[{"Attribute":[{"category":"External analysis","disable_correlation":false,"first_seen":"2023-05-26T01:49:01.745000+00:00","to_ids":false,"type":"link","uuid":"5d806d5d-a20a-4fb4-869c-bd4687092d0f","value":"https://lookyloo.circl.lu/tree/9a4120db-5154-4aab-943f-72ffe650b864"},{"category":"External analysis","comment":"Screenshot of the page at the end of the capture","data":"iVBORw0KGgoAAAANSUhEUgAAB4AAAARCCAYAAABCau/kAAAAAXNSR0IArs4c6QAAIABJREFUeJzs3Xt8VeWdL/5PQgKSIFoRIuAlooJo0qpth2jrpVCsvQC9jK3Qi9rCnLmd1p7OpZVzZqYzU+1vzlyknU7njNrbtFVaqxVn2mkrtGrV4F1DW0UMjmhr4oXrRq7J7w/KNpGLQQM7LN7v14vXftaz1l7ru5bb/SJ88jxP1fz587sDAAAAAAAAwH6vutIFAAAAAAAAANA/BMAAAAAAAAAABSEABgAAAAAAACgIATAAAAAAAABAQQiAAQAAAAAAAApCAAwAAAAAAABQEAJgAAAAAAAAgIIQAAMAAAAAAAAUhAAYAAAAAAAAoCAEwAAAAAAAAAAFIQAGAAAAAAAAKAgBMAAAAAAAAEBBCIABAAAAAAAACkIADAAAAAAAAFAQAmAAAAAAAACAghAAAwAAAAAAABSEABgAAAAAAACgIATAAAAAAAAAAAUhAAYAAAAAAAAoCAEwAAAAAAAAQEEIgAEAAAAAAAAKQgAMAAAAAAAAUBACYAAAAAAAAICCEAADAAAAAAAAFIQAGAAAAAAAAKAgBMAAAAAAAAAABSEABgAAAAAAACgIATAAAAAAAABAQQiAAQAAAAAAAApCAAwAAAAAAABQEAJgAAAAAAAAgIIQAAMAAAAAAAAUhAAYAAAAAAAAoCAEwAAAAAAAAAAFIQAGAAAAAAAAKAgBMAAAAAAAAEBBCIABAAAAAAAACkIADAAAAAAAAFAQAmAAAAAAAACAghAAAwAAAAAAABSEABgAAAAAAACgIATAAAAAAAAAAAUhAAYAAAAAAAAoCAEwAAAAAAAAQEEIgAEAAAAAAAAKQgAMAAAAAAAAUBACYAAAAAAAAICCqKl0AQAAQPF0d3dXugSA/UJVVVWlSwAAAApGAAwAAOwxAS9A/3i571MBMQAAsKcEwAAAQJ91d3enq6ur3BYEA+wdVVVVO/wBAADoCwEwAADwsrYHvV1dXRk0aFBqa2tTXV2d6urqClcGUExdXV3p6urK5s2by794kxgRDAAAvDwBMAAAsFvbw9/u7u7U1tZmyJAhFa4IoPi2/5JNTU1NNm7cmC1btqSqqird3d1CYAAAYLf8uj4AALBLPcPf6upq4S9ABQwZMiTV1dW9vpMBAAB2RQAMAADsVM+AYfvoXwAqo7a2ttdU0EJgAABgVwTAAADAbnV3d5dHAANQGdu/gwW/AADAy/EvOAAAwA5eOs2oABigsnY2BbQwGAAA2Bn/ggMAAAAAAABQEAJgAACgFyPLAAY+39UAAMCuCIABAAAAAAAACkIADAAAAAAAAFAQAmAAAGC3TC8KMHD4TgYAAF6OABgAAAAAAACgIATAAADADowwAxj4fFcDAAA7IwAGAAAAAAAAKAgBMAAAUGY0GcD+x3c3AADQkwAYAAAAAAAAoCAEwAAAAAAAAAAFIQAGAAAAAAAAKAgBMAAAAAAAAEBBCIABAAAAAAAACkIADAAAAAAAAFAQAmAAAAAAAACAghAAAwAAAAAAABSEABgAAAAAAACgIGoqXQAAAADsDUuWLElHR0c6Ozt79Y8aNSoNDQ1pamqqUGUAAACw9wiAAQAAKIRSqZSFCxdm4cKFWb58eZ/ec+yxx2bKlCmZMmVK6uvr93KFAAAAsPdVzZ8/v7vSRQAAAANDd3d3r9ft7a6urgwfPrxSZcFudXR05Nprr01ra2tKpdIrOkd9fX1aWlpywQUXpKGhoZ8rhP6xZs2aVFdXp6qqqty3vd2zDwAAOLAZAQwAAMB+a8GCBbnmmmteNvjdPt3zkiVLdrp/++jh1tbWzJw5M9OnT+/3WgEAAGBfEAADAACw3ymVSrniiiuyePHiHfY1NjZmypQpGTduXJqbm3f6/ra2trS3t2fhwoV5/PHHe533qquuSltbWy655BLTQgMAALDfMQU0AABQZgpo9gelUimXXnrpDuv8Tp48OTNnztzjKZw7OjpyzTXXZNGiRb36jz322Fx22WVCYAYMU0ADAAB9IQAGAADKBMDsDy699NJeUznX1dVl7ty5uxzt21dtbW353Oc+l/Xr15f7mpqactlll72q80J/EQADAAB9UV3pAgAAAKCvrrzyyl7hb2NjY66++upXHf4mSXNzc66++uo0NjaW+5YsWZIrr7zyVZ8bAAAA9hUBMAAAAPuFtra23HTTTeXtkSNH5vLLL+/XKZrr6+tz+eWX9wqBb7rpprS1tfXbNQAAAGBvEgADAACwX7jmmmvK7e3TPu+N9Xnr6+tzySWXpK6ubqfXBgAAgIFMAAwAAMCA19bW1mvq5+nTp2fcuHF77Xrjxo3L9OnTy9tLliwxChgAAID9ggAYAACAAW/hwoXldl1dXWbMmLHXrzljxoxeo4B71gAAAAADlQAYAACAAW/x4sXldktLy16Z+vml6uvr09LSstMaAAAAYKASAAMAADCgdXR0pFQqlbd7hrJ725QpU8rtUqmUjo6OfXZtAAAAeCUEwAAAAAxonZ2dvbabm5v32bVfus7wS2sBAACAgUYADAAAwIDW1tZWbtfV1e2T6Z+3q6+v77UOcM9aAAAAYCASAAMAALDfeOmI3KJeEwAAAF4pATAAAAAD2vLlyytdQtlAqgUAAAB2RgAMAADAgFYqlSpdQtlAqgUAAAB2RgAMAAAAAAAAUBA1lS4AAAAAtuvo6Mi1116btra2dHZ2pr6+vtIl9bJ8+fLMnDkzpVIpo0aNSnNzcy644II0NDRUujQAAABIIgAGAABggFi4cGGuuuqqXtMsD7Qpl3vW09nZmYULF6a1tTWzZ8/OlClTKlgZAAAAbGMKaAAAACquo6Njh/B3f1EqlXLVVVelo6Oj0qUAAACAEcAAAABU3oIFC3qFv9OmTUtzc3Pa29vT2tqaxx9/vILVvaixsTEtLS0ZN25c2tractNNNyXZFgIvWLAgc+bMqXCFAAAAHOgEwAAAAFTc8uXLy+3JkyeXg9SWlpbMmjUrHR0dWbBgQUXWBG5qasqxxx6b6dOn91rrt6WlJaVSKYsWLUrS+x4AAACgUgTAAAAADCg7C3kbGhoqNrp21qxZu9xXiUAaAAAAdscawAAAAFTcqFGjyu1Fixalvb29gtX0TXt7e3n0b9L7HgAAAKBSBMAAAABU3JQpU8rtUqmUuXPnpq2trYIV7V5bW1vmzp3ba93invcAAAAAlTLo/PPP/6tKFwEAAAxs3d3dGTJkSKXLoMAaGhqybt26LF26NEmyefPmLFq0KJ2dnWlubs7gwYMrXOE2pVIp3/jGN/LlL385mzdvLvdPmzYtb3/72ytYGQeCjRs3pqqqKlVVVeW+7e2efQAAwIHNCGAAAAAGhDlz5mTy5Mm9+hYuXJjZs2entbW1QlW9qLW1NbNnz86CBQt69U+ePLli6xMDAADASxkBDAAAvCwjgNlXWlpaUldXl0ceeaQ8wnbz5s257bbbUiqVctppp1Wkrm9/+9s7jPqtq6vLRz7ykVx00UUVqYkDjxHAAABAXxgBDAAAwIAyY8aMzJs3L01NTb36FyxYkI6Ojn1eT0dHR6699tpefU1NTZk3b15mzJixz+sBAACA3REAAwAAMOA0NDTksssuS2Nj4w79lailp8bGxlx22WUVqQUAAABejgAYAACAAWv9+vXl9qRJkypWR89r96wJAAAABhoBMAAAAAPSjTfemM7OzvJ2S0tLxWrpee3Ozs7ceOONFasFAAAAdkcADAAAwIDT3t7ea93dkSNHZsqUKRWrZ8qUKb2mo7722mvT3t5esXoAAABgVwTAAAAADCilUinz5s1LqVQq911yySUVrGibOXPmlNs7qxEAAAAGAgEwAAAAA0apVMqll16a5cuXl/umTZuW5ubmCla1TXNzc6ZNm1beXr58eS699FIhMAAAAAOKABgAAIABob29fYfwt7GxsdfI20qbM2dOr6mgt4fAHR0dFawKAAAAXiQABgAAoOIWLlyYuXPn7hD+Xn755RWsaucuv/zyHULgSy65JK2trRWsCgAAALapmj9/fneliwAAAAaG7u7uXq/b211dXRk+fHilyqLAOjo6Mm/evCxZsqRX//bwt76+vkKV7V6pVMpnPvOZPP744736m5qaMnv27IwbN65ClVFka9asSXV1daqqqsp929s9+wAAgAObABgAACgTALOvlEqlXHXVVVm4cOEO+6ZNmzagpn3enSuvvDI33XTTDv1TpkzJ7NmzB2yAzf5JAAwAAPSFABgAACgTALMvdHR05JJLLkmpVOrVP3LkyMyZMyctLS0VquyVaW1tzZVXXplnnnmmV399fX2uuOKKNDQ0VKgyikYADAAA9IU1gAEAANinrrnmml7hb11dXS644IJ84Qtf2O/C3yRpaWnJF77whVxwwQWpq6sr928f5QwAAAD7kgAYAACAfWrRokXldmNjY+bNm5dZs2bt19Ml19fXZ9asWZk3b14aGxvL/YsXL65gVQAAAByIBMAAAADsUyNHjiy3q6qqMmzYsApW07+GDRvWayrenvcKAAAA+4IAGAAAgH2q5zTPy5cvz+zZszNv3ry0t7dXsKpXp6OjI/Pmzcvs2bOzfPnycv/+OKU1AAAA+7eaShcAAADAgWXWrFlpa2vL448/nmTbWrkLFy7MwoULM2rUqLS0tGTy5MkZN25chSvdvfb29ixatCitra3p7OzcYX9jY2NmzZpVgcoAAAA4kFXNnz+/u9JFAAAAA0N3d3ev1+3trq6uDB8+vFJlUUClUilXXHHFbtfIvfTSSwfsCNrW1tZcdtllu9w/adKkXHLJJfv1usYMPGvWrEl1dXWvaca3t3v2AQAABzYjgAEAANjn6uvrM3fu3LS3t2fBggVZtGjRDscsWLBgwAbACxYs2Gn/5MmTM3369AE/ehkAAIDiMgIYAAAoMwKYSimVSmltbc2NN95Ynho6Sa655poBN4q2VCpl5syZ5e3GxsbMmDEjLS0tA65WisUIYAAAoC+MAAYAAKDi6uvrM2XKlIwaNSpz584t98+cOTNNTU3l7ebm5vJrz/69YcmSJWlra0uS8uv2/p7mzJlTrgsAAAAqTQAMAADAgLE92O0Zsu6sfc011yTZttbu9OnT+y2AbWtry4IFC3a7NnFPkyZNEv4CAAAwoJgCGgAAKDMFNANBqVTK5z73uR1G2u5OU1NTPvGJT6ShoeEVXbOjoyPz5s3b42vOnTvXtM/sM6aABgAA+kIADAAAlAmAGUja29vT2tqaJOns7ExnZ2eSHadg7mnmzJmZPn16n0PZUqmUBQsWlEcU78z2qaZHjRqVUaNGJUlaWloybty4Pl0D+osAGAAA6AsBMAAAUCYAZn+xPRxesGBB1q9f32tffX19Wlpa0tLSkqamph3C4FKplCVLlqS1tTWtra0plUq99tfV1WX69OlCXgYcATAAANAXAmAAAKBMAMz+plQq5corr8yiRYt2e9yxxx6bJFm+fPluj5s8eXLmzJljWmcGJAEwAADQFwJgAACgTADM/qq9vT1XXXXVHq3h21NTU1Nmz55txC8DmgAYAADoCwEwAABQJgBmf9fe3p4FCxakra0tzzzzzG6PHTlyZJqbmzNz5sw0NDTsowrhlRMAAwAAfSEABgAAygTAFEl7e3tKpVL5Ndm2PvC4ceMyatQooS/7HQEwAADQFzWVLgAAAAD2hu3TOTc3N1e4EgAAANh3qitdAAAAAAAAAAD9QwAMAAAAAAAAUBACYAAAAAAAAICCEAADAAAAAAAAFIQAGAAAAAAAAKAgBMAAAAAAAAAABSEABgAAAAAAACgIATAAAAAAAABAQQiAAQAAAAAAAApCAAwAAAAAAABQEAJgAAAAAAAAgIIQAAMAAAAAAAAUhAAYAAAAAAAAoCAEwAAAAAAAAAAFIQAGAAAAAAAAKAgBMAAAAAAAAEBBCIABAAAAAAAACkIADAAAAAAAAFAQAmAAAAAAAACAghAAAwAAAAAAABSEABgAAAAAAACgIATAAAAAAAAAAAUhAAYAAAAAAAAoCAEwAAAAAAAAQEEIgAEAAAAAAAAKQgAMAAAAAAAAUBACYAAAAAAAAICCEAADAAAAAAAAFIQAGAAAAAAAAKAgBMAAAAAAAAAABSEABgAAAAAAACgIATAAAAAAAABAQQiAAQAAAAAAAApCAAwAAAAAAABQEDWVLgAAAADYP2zevDnd3d1JkpqamlRX+71yAACAgUYADAAAAPTJxy/5ZNatKyVJPjhrZs5727kVrggAAICXEgADAAC8xKX/+y+yYsWKJElzc1P+7E8+VeGK+kd3d3e+9vVv5I47WzPy8MMzZ87HcmxjY6XLqpgNGzbkjjtbc9/99+eJJ1ZkzZq1GTSoOsOHD8/YsWNy0kkTM+mNv5MRIw6rdKkAAADQZwJgAACAA8SDDz6URT/9WZJkxZNP5qtf+0b++q/+osJVVcaDDz2UK6/6SlavXt2rf+vW5Nlnn82zzz6bBx98KN/5znX50z/5VE4+aWKFKgUAAIA9IwAGAADggLJkyZL84z/NS1dXV5LkrVOmZPLkc9IwalTWrl2Xu++5NzfddFPWrF2bd7zj7cJfAAAA9isCYAAAgAPE61732kx+yzm5487WjBgxIhd95EP79PrX3/D9/OyWW5MkE8aPzx/94e/v0+snSVdXV668+qvl8Pdd73xHPvD+88v7R4w4LOe9bWpOP31S7rrr7kx965R9XiM7NxA+PwAAAPsDATAAAMABoqqqKhdfdGEuvujCilx//fr1WblyZZJk7do1Fanh4UceyfPPP1/ebpk0aafHHTJ8uPB3gBkInx8AAID9QXWlCwAAAIB9pePpzl7bz/UIgwEAAKAIBMAAAAAcMKqqq3ptf+3r38iTTz1VoWoAAACg/5kCGgAAoB+tX78+t9728zzwwAN5YsWTWb9+fYYOPShjxxyZU1732px99pk5+OCDd3uOJ55YkZ/cfHN+8YtfZtXq1Rk0aFBGjhyZ1zY35dypU7Nw0aIsuOk/kiSnnXZqPvmJj/e5vj/4oz/OunWlJMkHZ83MeW87t9f+j1z00XR3dydJPvtXf5ENGzbkxz++OcuWLcu60voMH35wXvfa5syYMT2Hjxixx9fc7he//FU+fOHF5e0vzvunHHroob2O6Y9n+VJjx4zutb1y5cpcOvf/5PWnnZpJk34np55ySoYMGbLbc/THM/rVw49k8eK7suyxx/LMM89mw4YXUlc3NEcccURef+ppmTLlLRk6dOhur/2/L/1Mku7ccuvP88jSpVm1alWqq6szcuTIvP60U3Pu1Kk5+OBhu72XUqmUW265Nffd/2Ce+vWTeeGFDRk69KCMGTMmJ504MWee+aaMGjVql+//1a8ezo9vvjmPPros69aVMmxYfZpOPinvefeMNDQ09Mu9v9LPDwAAwIFKAAwAANBP7rn33lz9la/uEFatW1fKI0sfySNLH8mNN92Uj3z4gznzzW/e6TluuOHG3HDjjeWQL0k2b96cFStWZMWKFVn0059l3LGNe/U+tvvhD3+U1sWLe/WtXLkyP7vl1txz332Z+5lP58ixY/fKtfvjWe7Mcccdl7Fjx+apHqN+u7u7c8+99+Wee+/LkCFD8oY3vD7nvnVKxo0b97Ln29NntHnz5nz+7/4+S5cu3eFc69aVsmzZY1m27LHcvGhR/vxP/ySjRx+xy2tfd/0Nefjhh3fo3/5Z+cnNC/PHf/SHaTr5pJ2+/557781VV381pdKOz3jp0kezdOmj+Y8f/CCf/cu/yNFHH7XD+39+++351rev6dW3evXq3H7Hnbn3vvvzmT//017PsD/vHQAAgF0TAAMAAPSDxXfdnS/9y5fLwe3pLZPy7nfPyMjDD8/zzz+fnyxcmB/96CfZsGFD/u3Kq7Nl89a85S1n9zrHD37ww1z//e+Xtyefc07OO+/cHH744Xn22efy45tvzs03L8wvfvmrfXJPrYsXp7GxMbM/enHGjBmdxx//78z7whezes2arFu7Lv925dX567/6i5c9z5e/9M9Jkm9+69v50Y9/kiQ5+aSJ+fSf/9lOj++PZ7kr1dXV+YP/8Xv53OWfzwsvvLDD/o0bN+b22+/I7bffkbPOOjMXfeTDqa2t3eX59vQZ1dbW5sw3vylLly7NUUcemWnT3pWTTz4pQwYPzvLHH8/8+d/Jssfa89xzz+WLX/qXfO5vPpuqqqqdXvvhhx9OVVVV3j1jeia/5ZzU1dVl+fLHc+38+Vn2WHtKpVL+8Yp5+Yu5n0ljY+9fGrjr7rvzz1968RmfddaZmfbOd2bEiMPy1FNP5cYFN+WXv3o4f/A/fm+n4W+S/Pd/P5HRo0fn9+bMzjFHH5Xf/OY3+ad5X8yzzz6bDRs25Mv/78r83ecvK9f/Su99Tz8/AAAABzprAAMAALxKa9euzVe++vVymHb2WWflD//g9zNm9OjU1tamoaEhH5o1K+965zvK7/nmt7+dZ597rry9atWqXHf9DeXtKZMn5+KLL8zo355j9OgjcuGHP5Rp73rnPruvgw8+OJd++s9yzDFHp7a2NieccHw+/KEPlvcvX76810ja/tAfz/LlHHPM0fn8ZX+bU0553W6Pu/XW2/LP//Ll3R7zSp7ROWeflU998pL89Wf/Mqe3TMrwgw/OkCFDcuKECfmTT/2v1NXVJ9k2kvfRR5ft9vq//3tz8t73vDuHHnpoBg8enAkTxuczn/7zjBm9barrzZs25evf+Pde71m7dl2u/srXewXscz720RxxRENqa2vT2NiYj//PP37ZZzRk8ODMvfTTOf64camtrc3RRx+dj118UXn/008/nWXLetffn/cOAADAzgmAAQAAXqWf335H1q/fNo1ubW1tzv/d9+70uGnvemfq6uqSJJs2bcott9xa3nf7HXdk8+bN284xeHDe+9537/Qc06e9K8P3cN3bV+rNbzpjh3Vom5pO7rW94skn+/Wa/fEs++Kwww7Lpz55ST5/+efyrne+I4cffvhOj7vvvvtz/wMP7PI8r/QZnXLK61JTs+OkXPX19TnmmBdH3C5//PFdXvvECRNyxhmn79A/ePDgvOc9M8rbyx5rz5M9Qug77ryz/Iyrqqry3ve8Z4dzVFVV5TWvec0ur50kk1om5ZDhw3vXdOKEXiOWn9hL9w4AAMCumQIaAADgVeo5UvGYo4/KIYccstPj6urqctxxx6WtrS1J8kiPtVCXPdZebh9/3LhdhrwHHXRQml/bnNtvv6M/St+tI47YcQ3W+vr6DBo0KFu3bk2SbNiwsV+v2R/Pck+MHTMmH3j/+fnA+8/PI48szX/84Ad54IEHex1z333359RTTtnp+1/pM1q/fn3uuefePPzI0vzm6d9k5cpV2bhpYzZu3JTNmza9eFxp/S5rP+OMM3a5r7mpqdf2o48+Vl6LeOnSR8v9h48YkSOOaNjleXZn9E7uvaamJvXD6rNu7bokyca9dO8AAADsmgAYAADgVSqVSuX2oYfuftTkiBEv7l+3bt1OzzH8JaMqX+rQXYSi/W1nozST9Brh+dtZhPtNfzzLV2rChPGZMGF8brjhxl5rMa9ctWqX79nTZ9Td3Z0f/vC/cv33b8zGjS8fnndn1w/4sMMO3eW++vr6DB48OJt+G6iuX//i81m7bm25fehrdn2Ol7Orex9U1WOysR4335/3DgAAwK4JgAEAAF6lg4e/OFr3+ZUrd3vss8++uFZtz6C3vr6+3F69avVuz7F69Zo9LXG/0R/P8tWaMWNa/uvHP8769dtGoG6faro//OjHN+ea+d8pb48fPz7nvnVKGhuPyfDhw3PQQQfl7/7+H7JkyS9e9ly7+5ysW1cqh79JMmzYsBfb9S+2n39+98+4P/XnvQMAALBr1gAGAAB4lSaeeGK5/cQTT2TlLoLLUqmUZcseK2+fNHFiuX3CcceV28see2yXwdyGDRvy0EMPvdqSK2JXI0Z76o9n2Rc9w9GXqq6uzqBBg8rbxxx91C6P3VO33HJLuf07v/PG/J+5n8mkSb+ThoaGDB06NFVVVensfKZP57qzdfEu9z34ks/ICSecUG4ff8KLn7Xnnnsuv/7Nb/pa/qvyau+9L58fAAAABMAAAACv2hmnt+SQ345A3bJlS+Z/97p072Ru5BtvvCkbNmxIkgwdOjRnn3Xmi+c44/QMHjz4xXN857s7Pcd111+fNWvX7tC/P+g5SndX99Afz/LlzP/Od/PXf/u5rF6z85HU99x7b9b+tr7a2tqc3tLS53O/nHU9prjeviZvT0uWLElnZ2efzrXkF7/IXXffvUP/xo0b8/0bbyxvn3DC8RkzenR5+02nn56DDjqovP3d716Xrq6unZ6nP73ae+/L5wcAAABTQAMAAOxWW9uSfPjCi3d7zN//3efze3M+ln+84gvZunVrbr/9jmzauCnve9970jBqVJ577rn8149+kpsXLkyybX3Yj158YQ7psZbvoYcemvef/7v55re+nSS54847s2nTppx//vsyauTIPPPMM7nhxgW5887WvXeze1lj4zHl9ooVT+b+Bx7IiRMm5Oc/vz1Tp741ybYw99U+y13p6urK1V/9Wm699bYkyZ9/+tK84+3n5Y1veEMOP3xEVq9encV33ZUbbngxPP3d331vDjvssH57BuPHn5C77toW2i766c8yYcL4nHD88Vm7dm0ealuS+d/5zsucobd//tKX8773Pp2zzzozdXV1eax9ea655to8/XRHkqR28OBc+OEP93rPIYcckosu/Ej+9f/9W5Lknnvvyz/N+0I+8P7zc0RDQ5577rn87JZb87Nbb80nP/7xjB9/wg7XfSVe7b335fMDAACAABgAAKBfvPa1r82f/K9L8q//dlVWr16du++5J3ffc88Ox9XX1+djH704b3zD63fY97Zzp2bDxo353veuT3d3d+65997cc++9vY4ZMnhw6ocNy/PPP7/X7mVvOWmKR4uNAAAgAElEQVTixJx80sT84pe/SpL84z/NS7ItxO0Z4PXHs9yZjRs3prq6KlVVVenu7k6pVMp3r/tevnvd93Y4tqamJue/7715x3nnvZJb3aVZF1yQxx5rz3PPPZdVq1bl8s//Xa/9Bx10UI466sisWPHky57r+OPGZdlj7bnue9fnuu9dv8P+urr6/M8/+oMcc8zRO+x70xmnp6qqKl/7+jfywgsv5IEHHswDDzy4w3Gf/79/n7/57F9m7Jgxe3CXO/dq772vnx8AAIADnQAYAACgnzQ1NeUf/u//l1tv+3nuve++PPHEiqxfvz5Dhx6UI8cemVNPPSXnnH1W6urqdnmOGdPelTecdmp+/OObs+SXv8zKlStTVVWVww8/PM3NJ+fcqVPzrW99uxwA72/ron7ykk/khu/fmLvvvifPPb8ytbU1GTNmTLZs2dLrXvrjWb7U0KFD87GLL857Zrw7rXctzqNLH80TK57MmjVrsnHjxgwdWpcxoxty8skn55yzz8rhhx/e7/c/YsRh+dzffDY/u+WWtC6+O52dndm8eXMOO+w1aW5uzjvefl6uu+76PgXAb3nLW/KhD30wP7l5YZY+sjQrV61KTU1NRo0amdNOOTXnnjs1Bx88bJfvP+P0ljQ3NeWWW27NAw8+lKd+/WTWr38hgwcPzsiRh2f8CeNz1llv7pfwt7/uva+fHwAAgANZ1fz583dcTAkAADggbV9rteeaq93d3enq6uq1/iaV9dm/+dssW/ZYkmTyOefk4osvrHBF7Csfueij5f8/58z+WM46880Vroh9ac2aNamurk5VVVW5b3u7Zx8AAHBgq650AQAAAOyZlStXldtjxvbP6EwAAACgGATAAAAA+5HOZ57Jc889V96eOHFiBasBAAAABhoBMAAAwACxes2afPFL/5KVK1fu8pj53/luuT1+/Ak5+qgj90VpAAAAwH6iptIFAAAAkGzZsiVf+OKXsnTp0jz44EN565TJeeMb35Axo0enetCgrFjxZP7jP/4z9953X5JkyODB+ejFF1W4agAAAGCgEQADAAAMAI8sfTRPPfVUkmTjxo35zx/8MP/5gx/u9NjDDjssn/j4H2fsGOv/AgAAAL0JgAEAAAaAk0+amHlX/GMeeqgtS9qW5IknV+SZzmdSWr8+STJs2LAcfdTROe20U3LWmW9ObW1thSumEg466KB0bd2aJBk0aFCFqwEAAGAgqpo/f353pYsAAAAGhu7u7l6v29tdXV0ZPnx4pcoCIMmaNWtSXV2dqqqqct/2ds8+AADgwFZd6QIAAAAAAAAA6B8CYAAAAAAAAICCEAADAAAAAAAAFIQAGAAAAAAAAKAgBMAAAAAAAAAABSEABgAAAAAAACgIATAAAAAAAABAQQiAAQAAAAAAAApCAAwAAAAAAABQEAJgAAAAAAAAgIIQAAMAAAAAAAAUhAAYAAAAAAAAoCAEwAAAAAAAAAAFIQAGAAAAAAAAKAgBMAAAAAAAAEBBCIABAAAAAAAACkIADAAAAAAAAFAQAmAAAAAAAACAghAAAwAAAAAAABSEABgAAAAAAACgIATAAAAAAAAAAAUhAAYAAAAAAAAoCAEwAAAAAAAAQEEIgAEAANil7u7uvPDChmzd2lXpUgAAAIA+EAADAACwS6X163P117+d5f/9RKVLAQAAAPqgptIFAAAAJMmq1WvyzWuuy5S3nJmJE04o91/73RsyrH5Y3vWOqRWsbuDYuGlTrvzKN3fof13zyTnzTZP65Rpr15Xy45/8NG94/SkZMeI1/XJOAAAAYN8QAAMAAOyH3tTyxpx6SvNeOffBw+rzvve8K0myrlTaK9cAAAAA9g4BMAAAsN/YvGVLFv70tvzmN08nVVVpOunEvPH1p6Sj45ncdsfirF23LsOG1Wfy2W/KiMMOK48qnnDCcenofCavP+11WfjT23L8ccfm+ZUrs3HDxrRMekMmTjghW7ZsyS233ZEnf/N0Nm3clIZRIzN18lkZOnRo+TwnHH9sOjufzabNm9N00oQ8v3J1nu7szNAhB+XcKefksMMOTZJd1vNSHR3P5I7Wu7Nq7ZrU1tTmdc0npfnkiTvUffaZp+eoI8e+7PPZkzp3d7/rSqV87d/n57xzJ+eIhpH9/t8RAAAA2HusAQwAAOw3Hn7k0Tz51K9z4Yc+kPdMe3uOP64x6194IQt+8KMcOXZ0Lv7wBWk8+qj88EeL0tXVVX7fps2bMusD783oIxqSJIMGDcrM89+TkyZOyC233ZHNW7akpqYm445tzAff/9589COz0t3dnbvuub/X9WtqavPhWefnhOPG5e57H8xRR47JhbPen6rqqtx5191J0qd6kqRUWp8bf/CjjBlzRC7+0AWZ+pazctvtrXnk0cd2qHtn4e/trXfnn//1K+U/jy5r36M6+3K/AAAAwP7HCGAAAGBAqKqq2s3ObS9Dhw7Nhg0b841vfyfHNh6dN5z6ujzxxJPZuHFTeTrkCeOPy+K778szzz6fIUMGJ0lOHH9Cqqtf/P3X4449OlVVVRl9REPuvveBrF27LoceMjyrVq3OXffen1Wr1mTz5s3ZsmVLrzKOPebIJMnIkSO2bTcek+rq6owaOTJP/frXSbLbehpGHV4+1xMrnsqmjZty6uuakiQNDSMzuqEhjy5rT8OokTutu6edTQG9avWaPtfZ1dX1svcLAAAA7H8EwAAAwIBQXzc0VVVV2bx5c6/+zZu3ZMiQIUmS48c15u3nTs6y9sfzq4cfTeczz6Vp4olJkiu/8s1e71uzdm1GDtkWgA4a1DtE3R6qbs+cu7u7s+SXj+T21rvztreek8Zjjsqtty/O8ytX7vR95e3fnqC6Ounu6v7tubLLenoGwNlF3t0zCH9p3X3Vlzr7cr8AAADA/kcADAAADAg1NTU5btwx+eWvluaE48dl6EEH5dHHlmftunV560lnJUnWrl2bmpqavO2t5+S22xdnxZNP5cgjx6S2tibvPG9qjhw7OqtWr8nzz6/MuGOPKY+I7YutW7akprYmjY1HZ8uWLVnx5JOpr6/f4/vYXT09HX3UkRkyZHDuf7Atk974+jzd0ZlfP92Rc996zh5f85Xor/sFAAAABhYBMAAAMGBMOefM3HXP/bnu+puytWtr6uvr887zppbX7n2645ncdc/9WXTLz1NbW5uz39ySg4fV511vn5o7Ft+T9etfSFVVMuGE43Ns49F7dO2TJk7IE0/9Ot/41ncybFh9Dq4flq507/E97K6enqN76+uG5t3TzsvPb78rX/33a1NbW5tzzjojJxx3bJ+C69tb787trXeXtxsaRmbq5LP7XGd/3S8AAAAwsFTNnz/fT/gAAECSbVMh93zd3u7q6srw4cMrVRYASdasWZPq6upev0yyvb3bddQBAIADyitbUAoAAAAAAACAAUcADAAAAAAAAFAQAmAAAAAAAACAghAAAwAAAAAAABSEABgAAAAAAACgIATAAAAAAAAAAAUhAAYAAAAAAAAoCAEwAAAAAAAAQEEIgAEAAAAAAAAKQgAMAAAAAAAAUBA1lS4AAABgu61bt2bz5s3p7u6udCkAfVJVVZXa2toMGjSo0qUAAAAkMQIYAAAYILZs2ZJNmzYJf4H9Snd3dzZt2pQtW7ZUuhQAAIAkAmAAAGCAWL1ReALsv3yHAQAAA4UAGAAAGBCqY+QvsP/yHQYAAAwUAmAAAGBAOMhPJ8B+zHcYAAAwUPjxBAAAAAAAAKAgBMAAAAAAAAAABSEABgAAAAAAACgIATAAAAAAAABAQQiAAQAAAAAAAApCAAwAAAAAAABQEAJgAAAAAAAAgIIQAAMAAAAAAAAUhAAYAAAAAAAAoCAEwAAAAAAAAAAFIQAGAAAAAAAAKAgBMAAAAAAAAEBBCIABAAAAAAAACkIADAAAAAAAAFAQAmAAAAAAAACAghAAAwAAAAAAABSEABgAAAAAAACgIATAAAAAAAAAAAUhAAYAAAAAAAAoCAEwAAAAAAAAQEEIgAEAAAAAAAAKQgAMAAAAAAAAUBACYAAAAAAAAICCEAADAAAAAAAAFIQAGAAAAAAAAKAgBMAAAAAAAAAABSEABgAAAAAAACgIATAAAAAAAABAQQiAAQAAAAAAAApCAAwAAAAAAABQEAJgAAAAAAAAgIIQAAMAAAAAAAAUhAAYAAAAAAAAoCAEwAAAAAAAAAAFIQAGAAAAAAAAKAgBMAAAMCCs31LpCgBeOd9hAADAQCEABgAABoSOjVWVLgHgFfMdBgAADBQ1lS4AAAAgSe5dU5OHS905pKY7Jw/fmkP8tAIMcKu3JL9YMyirt1SltLUqJx1e6YoAAAAEwAAAwABx4qE1+YeHK10FwCvzqRMrXQEAAMA2poAGAAAGhDcelvzpxGT88KTOr6oC+4G6mm3fWX86cdt3GAAAwEDgn1UAAIAB4/Wv2fYHAAAAgFfGCGAAAAAAAACAghAAAwAAAAAAABSEABgAAAAAAACgIATAAAAAAAAAAAUhAAYAAAAAAAAoiJpKFwAAwIFp7NixGTFiRIYMGZLBgwdn8ODBlS6Jneju7i63Bw0aVMFKANi6dWuSpKqqqsKVsDPd3d3ZuHFjNm7cmPXr1+fJJ5/MunXrKl0WAAAHIAEwAAD7zLBhw3LSSSflyCOPTE2Nv4oCAMX12te+NqtXr87y5cuzdOnSSpcDAMABpGr+/PndL38YAAC8ckOGDMnJJ5+c4447zqglAOCAUyqV8tBDD2XFihWVLgUAgAOAYRcAAOxVo0aNyhlnnGGKZwDggFVfX5/TTz89Rx99dBYvXpwtW7ZUuiQAAAqsutIFAABQXOPHj8/ZZ58t/AUASDJ27NhMnTo19fX1lS4FAIACEwADALBXTJw4MaeccoopnwEAejj44IMzderU1NXVVboUAAAKSgAMAEC/a2hoSFNTU6XLAAAYkAYPHpwzzzwzgwYNqnQpAAAUkAAYAIB+VVNTk9NPP93IXwCA3TjkkENy8sknV7oMAAAKSAAMAEC/am5utuYvAEAfjB8/PsOHD690GQAAFIwAGACAfnPwwQfn+OOPr3QZAAD7herq6px66qmVLgMAgIIRAAMA0G8mTJhg6mcAgD3Q0NBgFDAAAP1KAAwAQL8ZO3ZspUsAANjv+DsUAAD/P3t3HldVtf9//H2YJwUE01IExARnDSU0B1DLHEMtNc2BsiQzJadrdjU0b7OK5lVTUxxyzOvQzbpaiojzEJpZjmDOCooDiIDy+8Mf5+sRlEEUO7yej8epffZZa+3P2WdDwZu1dlEiAAYAAECRcHNzk62tbXGXAQAA8LdDAAwAAICiRAAMAACAIuHm5lbcJQAAAPwtubi4yMKCX9MBAACgaPB/lgAAACgSjo6OxV0CAADA35KFhQUrqQAAAKDIEAADAACgSNjZ2RV3CQAAAH9b/L8UAAAAigoBMAAAAIoEv7QEAAAoPFZTAQAAQFEhAAYAAECRuHXrVnGXAAAA8LeVmZlZ3CUAAADATBAAAwAAAAAAAAAAAICZIAAGAAAAAAAAAAAAADNBAAwAAAAAAAAAAAAAZoIAGAAAAAAAAAAAAADMBAEwAAAAAAAAAAAAAJgJAmAAAAAAAAAAAAAAMBMEwAAAAAAAAAAAAABgJgiAAQAAAAAAAAAAAMBMEAADAAAAAAAAAAAAgJkgAAYAAAAAAAAAAAAAM0EADAAAAAAAAAAAAABmggAYAAAAAAAAAAAAAMwEATAAAAAAAAAAAAAAmAkCYAAAAAAAAAAAAAAwEwTAAAAAAAAAAAAAAGAmCIABAAAAAAAAAAAAwEwQAAMAAAAAAAAAAACAmSAABgAAAAAAAAAAAAAzQQAMAAAAAAAAAAAAAGaCABgAAAAAAAAAAAAAzAQBMAAAAAAAAAAAAACYCQJgAAAAAAAAAAAAADATBMAAAAAAAAAAAAAAYCYIgAEAAAAAAAAAAADATBAAAwAAAAAAAAAAAICZIAAGAAAAAAAAAAAAADNBAAwAAAAAAAAAAAAAZoIAGAAAAAAAAAAAAADMBAEwAAAAAAAAAAAAAJgJAmAAAAAAAAAAAAAAMBMEwAAAAAAAAAAAAABgJgiAAQAAAAAAAAAAAMBMEAADAAAAAAAAAAAAgJkgAAYAAAAAAAAAAAAAM0EADAAAAAAAAAAAAABmggAYAAAAAAAAAAAAAMwEATAAAAAAAAAAAAAAmAkCYAAAAAAAAAAAAAAwE1bFXQAAAAAAAI/KzZu3dOvWLWUpS8oq7mrw0Bkkg8EgS0tLWRgMxV0NAAAAADwSBMAAAAAAgBLhRnqGsrJIfUuUrNv/uHnzlqytrGRpyUJoAAAAAMwfP/kAAAAAAMzezZu3CH9LuIzMzOIuAQAAAAAeCQJgAAAAAIDZu3XrVnGXgMcAfwQAAAAAoCQgAAYAAAAAmD2CP0hcBwAAAABKBgJgAAAAAID5MxR3AXg8cCEAAAAAMH8EwAAAAAAAAAAAAABgJgiAAQAAAAAAAAAAAMBMEAADAAAAAAAAAAAAgJkgAAYAAAAAAAAAAAAAM0EADAAAAAAAAAAAAABmggAYAAAAAAAAAAAAAMyEVXEXAAAAAACPi+joaO3du1fJycny8vJSnTp1VLdu3eIuCwAAAAAAIN8IgAEAAACUeBEREZo0aZKSk5MlSXXq1NHevXslSUFBQfrwww8VFBRUnCUCAAAAAADkC0tAAwAAACixkpOTVa9ePUVGRmrQoEG6dOmSsrKyFBcXp6ysLG3YsEHOzs4KDg5WVFRUcZcLAAAAAACQJ2YAAwAAACix+vTpo/j4eEVHR+e61HNQUJCCgoIUERGh0NBQeXl5MRMYAAAAAAA81pgBDAAAAKBEiouL06pVq7Ry5co87/MbERGhZs2aacyYMY+oOgAAAAAAgMIhAAYAAABQIq1cuVKenp75ntEbHh6u6Oho432CAQAAAAAAHkcEwAAAAABKpHst+3wv2UFxXFzcwyoJJdzq1atVscJTObbvJy0tTfZ2ttq9e3eBjrVl82ZVqeKjpKSkQtWam4yMDDVqGKj58+cV2ZgAAAAAgIIjAAYAAABQYhUkAHZxcXmIleBxd/bsWdnb2d7zUdAANi+NGjXSsmXfFemY2VJTU9UntI8mTZosNzc3dX+1m0JD++Rol5mZKXs7W61d+z/jvthNm9S+XTt5VKygUk6OquJTWf/4x3ClpaXJ2tpa38yeo+HDhumv48cfSu0AAAAAgLwRAAMAAAAoUSIjIxUcHKzjhQyoxowZo44dOzITuIRasnSZ9v/+e45HzZo1i/Q47u7uatioUZGOmW3WrFlyd3NT27ZtC9Tv0KFD6tChvQIDA7UpNlbxCcc165tv9P3q7/VeeLgkqVq1anqhVSuNHz++QOMWRRsAAAAAwG0EwAAAAABKjMjISL333nvKyspSVlZWoe7ne+nSJcXHxys4OPghVIjHXYUKFeTjUyXHw9bWVpLUqGGgJk+apK5dXtEz9erK17eq/vOf/xj7b9u6VbVq1lAZVxd17tRRs2bNVK2aNXIc5+4loKdPn6Zqfn5ycS6tan5+mjZtqkn7hPh4NWvaRM6lS8n/mXr6448/7vkeZs2coTf69i3we9++fZucnJz0wT//KS8vb7m7uysoKFjzFyzQ8y+8YGz3Zt83NX/+PKWlpeU55uHDh1Wndi2NG/fRPduMHTtGdWrXIgQGAAAAgHwiAAYAAABQYiQkJKhu3bqKjo5WQkKCwv//rMX8io+PV1xcnCIjI5WcnMwsYORgbW2tqVOn6vMvvtCeX+M0fPhwDXx3gLKyspSenq6XX+6sDi+9pBMnTyn09Tf08b/+JQuL+/9ofuDAAb0/YoQWLV6spIuXNHfePI2JiND+/fuNbaZ/PV1fz5ipY/EJKl/+SY2J+DDXsU6fPq3Dhw8b72ldENWqVdeFCxc0a9ZMZWRkGPf7+/urU6dOxucBzz4rSdqxY3ueYz799NPq3qOH/jVunBYtXJjj9UULF+qTjz9W9x49VLVq1QLXDAAAAAAlEQEwAAAAgBIjKChIcXFxCg0NVXJysry8vArU38vLS9HR0QoNDVWdOnUKdA9hmIfnW7aQu1sZk0fLli1M2rRv306enrevraCgICUlJen8+fPasmWzLl++rBEj3pejo6PatWunoHzMJL9y+bIMBoPcypSRpaWlAgICdOr0GZNlp/u91U9+fn5yc3NTp86d7jkD+M8//5CdnZ18fKoU+L3Xr19fX02ZojEREarkUVEvd+6kyIkTlZAQb9LOxsZGVatW1e+//56vcadNm67GTZooLKyftmzebNy/OTZWYWH91LhJE02bNr3A9QIAAABASUUADAAAAKDECAkJ0YoVK7RixQrVq1dPCQkJBeofFRWl4OBgeXp6Kjo6+iFVicdZ1Nx52r5jh8kjKmquSZunnqpg3La1tZMkpaVd1+lTp1W2bFmVKlXK+HrduvXyPGaDgAC9FBKimjVrqF3btpoyZYquXLli0sbL29u47WDvoLQbN3Id62LSRZUpUybvN3oPffu+qWPxCVq27Dv5+9fX6u9Xq1bNmpo4YYJJOzc3dyUmJuZrTBsbGy1ZslSenp7q0uUVHT16REePHlHXrl3k6empJUuWysbGptA1AwAAAEBJQwAMAAAAoEQJCQnRypUrlZCQUOB7AK9cudI4C9jFxeUhVYjHWW73AK5YsaJJG4PBkGvfrKwsWd8VZOa1/LMkWVpaas6cKG3fsVPNmzfXooXfqm6d2jp+/P/+gOFex8zN3W2tbWx07erVHO2SkpIkSfZ29qbtra3VuEkTvT9ypNav36DISZM0atQ/TQLfgtQjSWXKlNGKlSslSR1DQtQxJESStGLlygcKrAEAAACgJCIABgAAAFDihIeHF2oJ5/DwcCUkJCgqKuohVQZzVvaJsjp39qyuX79u3Pfbvn159svIyFBSUpL8/Pw0eMgQbYrdrPLly2vVqtUFrsG1jKsx2M3mW9VXv/76q9LS0kz2b1i/XlZWVqpWvbokKXLiRM2Y8XWOMQMCntXNmzeVknLNuC8x8YLc3NwKVJuPTxUtW/adkpKSlJSUpGXLvivUUtUAAAAAUNIRAAMAAAAoMZKTkxUaGlroEDcoKEiDBg1SaGgoIXAJdfbsWR0/npDjcfny5Tz7PvdcY1lZWWnihAlKT0/XunVrtSF6Q579oqLmqEXzYB06dEi3bt3Sn3/+qXPnzsn7jmWf88vPr5rS0tJ07NhR476wt9+WDAa91qO7tm7Zoj/++EOzZ3+jIUMG6/33R8rd3V3S7fB4+LBhmjx5sg4ePKjTp09rU0yMBg0aqDp16hjve5yRkaHDhw+b3KM4vxo2aqSE43/p+F8n1LBRowL3BwAAAABIVsVdAAAAAAA8CtHR0QoNDdWlS5cUHR1d4Nm/2SIjI41B8t69e/Xhhx+yHHQJ8nLnTrnu//DDCI14//379nV0dFTU3Hka+f4IRUZO1IutWys8PFwzZ8y4b7/XX39D8fHxavXC87p48aKeeqqCBgx4V+3bt88xazcvFSpUUJUqVRQdHa3KlX0k3V5++eeff9aYMWPUs+drunTpknx8fDT2o48UGvq6sW/v3n1kb2evadOn6dNPPtbVq1dV/skn1eqFVhr94YfGdju2b1dWVpYCAp4tUG3ZrK2tC9UPAAAAAHCbYcmSJVnFXQQAAAD+/po1a6Zy5coVdxlAriIiIjRmzBi99NJLioyMlJeX1wOPuXLlSoWHh+vy5cuKj48nBH7MpWdk6Nat4v/xNz09XRYWFrKyuv332J98/LFiY2P1w5o1j6yGyZMna+mSxYrdvOWhjB8a2kelS5XWpMmTH8r4D8LG2loWFgW7PzHwqMTExOjs2bPFXQYAAADMAEtAAwAAADB7cXFx8vLyKrLwV5JCQkLUp08fJScnKyEhoUjGhHnLzMyUn29VjRkTodTUVP3++++aEzVHrV588ZHW8cYbb+j8hQv68ccfi3zsgwcP6qcff9SQIUOKfGwAAAAAQP4QAAMAAAAwexEREcrKypK3t7fq1aunuLi4BxovPDxc3t7eGjNmjHr37l3o5aRRslhZWWnhwkWK2bhRFSs8pZde6qCXX35ZYWFhj7QOR0dHRc2J0sCB7yopKanIxs3IyNDroX30+RdfqJKnZ5GNCwAAAAAoGJaABgAAQJFgCWj8HWQv2+zt7a2IiAh5enoWaEZwdHS0Ll++rJCQEPXu3VsRERFFNqMYD9fjsgQ0ihdLQONxxhLQAAAAKCpWxV0AAAAAADwqISEhcnFxUUhIiIKCgiTJ+HzixIm53sc3OjpaY8aMUXR0tHFfs2bNFBUV9cjqBgAAAAAAyC8CYAAAAAAlSlBQkJKTkxUXF2f8d0REhFauXKk+ffooJCREkpSQkKCoqChFR0erWbNmWrFihVxcXFS3bt1cg2IAAAAAAIDHAQEwAAAAgBIp+769QUFB6tOnjyIjIxUVFaXIyEhjm5deekkbNmwwzhYGAAAAAAB43BEAAwAAACjxXFxcFBERoYiIiOIuBQAAAAAA4IFYFHcBAAAAAAAAAAAAAICiQQAMAAAAAAAAAAAAAGaCABgAAAAAAAAAAAAAzAQBMAAAAAAAAAAAAACYCQJgAAAAAAAAAAAAADATBMAAAAAAAAAAAAAAYCYIgAEAAAAAAAAAAADATBAAAwAAAAAAAAAAAICZIAAGAAAAAJg9g4EffyFZWBiKuwQAAAAAeOj4CRgAAAAAYPasLPnxt6Qj/AUAAABQUvATMAAAAADA7BkMBllbWxV3GSgmFhYWsra2Lu4yAAAAAOCR4KdfAAAAAECJYGlhIUtbG2VlSVnKkrKKuyI8dAbJwsDMXwAAAAAlCwEwAAAAAKBEMRgkgwwSuSAAAAAAwAyxBDQAAAAAAAAAAAAAmAkCYAAAAAAAAAAAAAAwEwTAAAAAAAAAAF0cgvsAACAASURBVAAAAGAmCIABAAAAAAAAAAAAwEwQAAMAAAAAAAAAAACAmSAABgAAAAAAAAAAAAAzQQAMAAAAAAAAAAAAAGaCABgAAAAAAAAAAAAAzAQBMAAAAAAAAAAAAACYCQJgAAAAAAAAAAAAADATBMAAAAAAAAAAAAAAYCYIgAEAAAAAAAAAAADATBAAAwAAAAAAAAAAAICZIAAGAAAAAAAAAAAAADNBAAwAAAAAAAAAAAAAZoIAGAAAAAAAAAAAAADMBAEwAAAAAAAAAAAAAJgJAmAAAAAAAAAAAAAAMBMEwAAAAAAAAAAAAABgJgiAAQAAAAAAAAAAAMBMEAADAAAAAAAAAAAAgJkgAAYAAAAAAAAAAAAAM0EADAAAAAAAAAAAAABmggAYAAAAAAAAAAAAAMwEATAAAAAAAAAAAAAAmAkCYAAAAAAAAAAAAAAwE1bFXQAAAACA4nf+/HmtXLlSklSlShU1b968mCsCAAAAAABAYRAAAwAAANDp06c1fvx4SVKbNm0IgAEAAAAAAP6mCIABAACAhyQzM1Pr1q1TdHS09u7dq8TERKWlpcnZ2Vmenp6qV6+e2rRpoxo1ahR3qQV28OBBhYeH6/z58woNDdWAAQOKuyQAAAAAAACIABgAAAB4KKKjozVmzBidPn06x2uJiYlKTEzU7t27NWvWLDVt2lSffvqp3NzciqHSwvnuu+907NgxSdLUqVMVFhYmKyt+vAAAAAAAAChu/IYGAAAAKGLTp0/XxIkTjc8bN26snj17qm7durK3t9fx48f1448/au7cuUpJSZGtra1sbW2LseKC69SpkzZt2qQLFy6od+/ehL8AAAAAAACPCX5LAwAAABSh1atXG8Nfg8GgkSNHqlevXiZtqlatqqpVq6pVq1basmWLXn/99eIo9YFUq1ZNP/30U3GXAQAAAAAAgLsQAAMAAABF5OrVq/rkk0+Mz3v16pUj/L2Tn5+f/Pz8HkVpAAAAAAAAKCEIgAEAAIAi8t///lcXL16UJDk5OWnAgAGFHisjI0MrVqzQDz/8oD///FOpqalyc3NTgwYN1L17d9WrV++h9L3X+xo6dKiysrJkYWGhL7/8UhUqVFDXrl0lSW3atDFZ8lqSbty4oSVLlmjNmjU6fPiwMjIy5OHhoRdeeEF9+vSRs7NzjuOcOHFC33zzjbZs2aIzZ87I0dFR1atXV/v27dW+fXuWmQYAAAAAAMgHfoMCAAAAFJH169cbt5s0aaLSpUsXapwzZ87o7bff1h9//JFj/+rVq7V69WqFhoZqxIgRRdo3N7t27dL777+vrKwsSdLo0aPVtm1bxcXF3bPP6dOn9dZbb+nw4cMm+48cOaIjR45o9erVmjdvnipUqGB8LS4uTqGhoUpNTTXuS09P1+bNm7V582bt2bNHH330Ub5qBgAAAAAAKMksirsAAAAAwFycOHHCuF2jRo1CjZGRkaF+/foZA9x27dpp/fr12rdvn+bPn6+KFStKkubMmaMZM2YUWd/cHDt2TP3791d6erokadCgQXr11VfzVf/hw4dlbW2t8PBwbdy4Udu2bdOYMWNka2urkydPKjw83KTf559/bpypvHjxYv32229asWKFGjZsqJo1a+rdd9/Nx9kDAAAAAAAAATAAAABQRC5fvmzcdnJyKtQYy5Yt08GDByVJQUFBxuWWbW1tFRAQoIULF8rOzk6SNHXqVF26dKlI+t4tKSlJb775pvE99erVS/3798+z/uXLl+vQoUOSpPDwcL399tsqX768XF1d1a1bN/Xt21eStG/fPm3dutXYLzu09vT0VL169WRjY6Pq1atr5syZmj9/vp544on8nUAAAAAAAIASjgAYAAAAKCIuLi7G7WvXrhVqjB9//NG43bdvXxkMBpPXy5Urpw4dOkiSrl+/brLs9IP0vVNaWprCwsJ08uRJSVKHDh00cuTIfNX/008/SZIsLCz0yiuv5Hi9cePGxu3Y2FjjdpkyZSRJe/bs0WuvvaYFCxYoPj5e1tbWcnBwyNexAQAAAAAAwD2AAQAAgCLj7e2tY8eOSZJxJm5BHT9+3LhdvXr1XNvcuT8+Pr5I+t7pzmDY0dFRo0ePzhEm30v2mLdu3VJAQMB92546dcq4PWTIEL333nuSpJ07d2rnzp2SJF9fX7333nsKDg7O1/EBAAAAAABKOmYAAwAAAEXkzpAyNjZWaWlpBR7jzqA1Kysr1za3bt0ybltaWhZJ3zsFBQWpcuXKkqSUlBSNGjUqH5XnHD8vKSkpxu02bdpo0aJFatGihezt7Y37Dx48qP79+2vdunX5HhcAAAAAAKAkIwAGAAAAikjbtm1VtmxZSdKlS5cUFRVV4DF8fHyM27///nuubQ4cOJBr+wfpeycHBwdNmjTJGMT++OOP+vrrr/NRvVSxYkVJt5eA3r59uw4ePHjPx8yZM036PvPMM5o6dap27NihOXPmKCgoSNLtUDm/xwcAAAAAACjpCIABAACAIuLg4KD333/f+HzKlClau3btPdvHxcWpd+/eJksxt23b1rg9a9asHDN5z5w5o++//16S5OTkZAxJH7Tv3apWraoPP/zQ+DwyMlIbN268Z/tszZs3l3Q7tF24cGGO12/evKndu3fn2J+RkWFcNtvGxkaNGjXSlClTjLOUr169muexAQAAAAAAQAAMAAAAFKm2bdsqPDxc0u1Qc+DAgRo+fLh27dqlq1evKi0tTYcOHdKXX36pnj17atu2berYsaN+/vlnSVJISIjq1q0rSYqJidGQIUN06tQppaena8eOHXrttdd048YNSdLgwYNVunRp47EfpG9uOnbsqM6dO0u6HegOGTLknvcNzta9e3dVqFBB0u0AfPz48Tp58qRu3Lih/fv3KywsTD169NBXX31lDKhTUlL01ltvqVu3boqKilJiYqLS0tK0dOlS3bx5U5JUs2bNfH4CAAAAAAAAJZthyZIlud8cDAAAACiAZs2aqVy5csVdxmPj559/1rhx43TmzJn7tjMYDGrfvr0iIiLk6OgoSUpKStI777yjX3/99Z59BgwYoAEDBuR4rbB94+Li1LVrV0m378c7ceJESVJaWpq6dOlinJ1buXJlLVu2TEeOHMm1vSQdPXpU/fr104kTJ+75vtu0aaPPP/9c1tbWWr9+vQYNGqT09PRc27q4uGjJkiXy8vK653gAAPzdxcTE6OzZs8VdBgAAAMyA5SuvvBJR3EUAAADg78/Ly0tOTk7FXcZjo3LlyurRo4e8vb1lY2OjtLQ03bx5UwaDQa6urvLz81P79u01duxYdevWTTY2Nsa+Dg4OCgkJkYeHh1JTU3Xt2jXdunVL5cqVU4sWLfTxxx+rXbt2uR63sH3Pnj2r7777TpL09NNP68UXX5QkWVlZKTAwUCtXrlR6erouXbqkI0eOyN/fP9f2klSmTBl17txZzs7OSklJ0bVr1yRJ7u7uatSokYYPH66wsDDj8s7e3t7q0KGDrKyslJqaquvXr8va2loeHh7q1KmTPvnkE3l4eBTBpwIAwOPr+PHjxv9mAgAAAA+CGcAAAAAoEswABgAAKDxmAAMAAKCocA9gAAAAAAAAAAAAADATBMAAAAAAAAAAAAAAYCYIgAEAAAAAAAAAAADATBAAAwAAAAAAAAAAAICZIAAGAAAAAAAAAAAAADNBAAwAAAAAAAAAAAAAZoIAGAAAAAAAAAAAAADMBAEwAAAAAAAAAAAAAJgJAmAAAAAAAAAAAAAAMBMEwAAAAAAAAAAAAABgJgiAAQAAAAAAAAAAAMBMEAADAAAAAAAAAAAAgJkgAAYAAAAAAAAAAAAAM0EADAAAAAAAAAAAAABmggAYAAAAAAAAAAAAAMwEATAAAAAAAAAAAAAAmAkCYAAAAAAAAAAAAAAwEwTAAAAAAAAAAAAAAGAmCIABAAAAAAAAAAAAwEwQAAMAAAAAAAAAAACAmSAABgAAAAAAAAAAAAAzQQAMAAAAAAAAAAAAAGaCABgAAAAAAAAAAAAAzAQBMAAAAAAAAAAAAACYCQJgAAAAAAAAAAAAADATBMAAAAAAAAAAAAAAYCYIgAEAAAAAAAAAAADATBAAAwAAAAAAAAAAAICZsCruAgAAAAA8PKmpqbpx44ZsbGzk6OhY3OU8Evv27VNCQoLKly+vgICA4i4HAAAAAADgkWIGMAAAAGDGPvvsMwUGBmrYsGHFXUoOn3zyierXr6+hQ4cW6bjLly/XsGHDFBUVVaTjAgAAAAAA/B0wAxgAAAB4COLi4rR8+XLt2rVL586d082bN/Xkk08qICBA3bt3l5+fX3GXaGLGjBmaPn26unXrpuHDhz+SY6alpenq1atKTU19JMcDAAAAAAAoCZgBDAAAABSh1NRUDR06VF27dtXSpUt17NgxpaSkKC0tTfHx8VqyZIlCQkL01VdfFXepJhYtWqSUlBQtWLCguEsBAAAAAADAAyAABgAAAIrIzZs39c477+j777+XJAUGBuqbb77R7t27FRcXp7lz5yogIEC2trby8vIq5mpNde3aVQ4ODurevXtxlwIAAAAAAIAHwBLQAAAAQBFZunSptmzZIul2oDpmzBgZDAbj64GBgfL399fJkyfl7e1dXGXmKiwsTGFhYcVdBgAAAAAAAB4QM4ABAACAIvLtt99KksqWLasPPvjAJPzNZm1tnSP8vXbtmiZPnqy2bduqVq1aatCggd544w1t2LAh1+MUtP3dtm/frlq1asnX11f/+Mc/lJWVpQ8//FC+vr7q37+/Sdvk5GR9/vnnev7551WrVi0FBgbqvffeU3x8vEm78+fP64MPPlCzZs1Uq1YttW7dWtOmTdONGzfyVdO6devUoUMHY9+NGzfmaJPfWnIzYsQI+fr6qnv37goNDVWnTp3UvXt3NWnSREOHDtWJEyfyHKNfv37y9fXV2LFjTfbndu7yOh87duzQc889p86dOys5OTnPYwMAAAAAAOQXM4ABAACAInD16lUdPnxYkhQcHCxbW9t89btw4YJee+01JSQkGPelp6crNjZWsbGxevPNNzV06NBCt7/bsWPHNGDAAKWnp6tdu3b65JNPcg2qJencuXN69dVXderUKZNjrVmzRjExMVq8eLGefvppZWRkqFevXiZB7LFjxxQZGalz584pIiLivufgzz//1MCBA3Xr1i1j3379+mnx4sWqW7dugWrJy+7du/Xqq69q1KhRsrS01KFDhxQaGqqYmBgtXLhQVapUyXOMvOTnfKxYsUKJiYlKTEzU9u3b1apVqwc+LgAAAAAAgMQMYAAAAKBI3DmLs2zZsvnu969//UsJCQlydnZWZGSkdu7cqV9++UUvv/yyJGnmzJnavn17odvfKSkpSW+++aauXLmiF154QZ999pksLO79I8G4ceN06tQpeXh4aO7cufr111+1cuVK+fr66tq1a5owYYIk6a+//lJ8fLxsbGy0bNky7d27V5MmTVJgYKDefffdPM/BqVOn1LdvX23btk3/+c9/5O7urqysLOOM6oLUkpcKFSrogw8+kKWlpSSpatWq6tevny5fvqyPPvooX2PkJT/nIyQkRGXKlFHNmjUVGBhYJMcFAAAAAACQCIABAACAIuHq6mrcTkpKylef1NRUrVu3TpI0ePBgtW7dWqVLl1bFihX10UcfydfXV5K0atWqQrW/040bN/T222/r5MmTat68uSZMmCArq3svCJSamqr169dLksaOHavAwEA5ODioWrVqCg8PlyRt3rxZWVlZqlSpksqVK6eMjAxt27ZNJ0+e1Isvvqi5c+fKzc0tz/NQuXJlDR48WK6urqpRo4batm0rScZlmQtSS178/f1lbW1tsi8gIEDS7aWxi2I55vycj2effVZbt27V8uXL5ezs/MDHBAAAAAAAyMYS0AAAAEARcHJyUtWqVXXo0CHFxMQoIyMjR9B4t4sXLyozM1OSVKtWLZPXLCwsVKtWLR08eFDnzp0rVPs7xcbGGre9vLzyrC0pKcl4rNDQ0Fzb3LhxQ6mpqXJ0dNTChQs1Y8YMLV68WOPHj1fZsmX18ssv65133snzWN7e3ibLULu7u0u6vZRyYWq5n/T09Bz7rl+/LknKyspSYmKiXFxc7jvG3bKXrs5mbW39QOcDAAAAAADgQTADGAAAACgi3bt3lySdPn1akyZNyrVNRkaG/ve//0mS3NzcZGNjI0nat2+fSbtbt27pt99+kyQ9+eSThWp/p8aNG8vf31+SNHv2bC1btuy+78XV1dW4PPSsWbN08OBBk8fevXt18OBBY+Barlw5jR07VuvXr9cvv/yiatWqadq0aUWyrHJBa7mfLVu26PLlyyb7smdVGwyG+y7fnR3cXrp0yWT/0aNHc7R9mOcDAAAAAADgfgiAAQAAgCLSpUsXNWrUSNLte/G+++672rNnj65fv66UlBRt3bpVvXv31sCBA9WvXz8ZDAa9+OKLkqSJEyfqp59+0tWrV3Xy5EmNGjVKBw8elCR17NhRkmRvb1+g9neytbXVtGnT9PTTT0uSIiIitHXr1nu+FycnJzVs2FCS9M9//lPR0dFKTU3VuXPnNGLECHXu3FnHjx+XdDsQ7dKliz777DMlJSXJ1dVVpUqVkiQdOHDgwU5qAWvJy5UrV/T222/r+PHjSktL0+LFizVv3jxJUmBg4H2XY/bw8JAkbdy4UTt27NCVK1c0Z84c7d6926Rdfs7Hjh079Nxzz6lz585Fsuw0AAAAAABANpaABgAAAIqIpaWlpkyZolGjRumHH37Q2rVrtXbt2hztrKys1KBBA9nZ2WnkyJHGmayDBg0yaWcwGDRw4EDjzF1JBW5/J2dnZ82aNUvdunXTmTNnNHDgQC1evFg+Pj65th89erR69uyps2fPql+/fiavWVtb6+TJk/L09NSaNWt04MABHThwQLNnzzZpFxwcfO8TVgD5rSUvnp6eiouL0wsvvGCyv0yZMho1atR9+3bp0kXz5s1TSkqKevbsadxfv3597dq1y/g8P+djxYoVSkxMVGJiorZv365WrVrlWTsAAAAAAEB+MAMYAAAAKEKOjo6aMGGCFi1apM6dO8vT01N2dnayt7eXl5eXXn31Va1atUp9+/aVdHt54+XLl2v48OHy8fGRjY2NSpUqpcaNG2vx4sXq37+/yfgFbX+38uXLa9asWXJxcdGVK1fUr18/Xbx4Mde2Xl5e+vHHH/XWW2+pUqVKsra2lqurq1q2bKmlS5fqueeekyT16NFD06dPV8OGDeXk5CQHBwf5+flp5MiReuedd4rgrOa/lrzUqVNHX3/9tWrXri0bGxu5uroqJCRE//3vf+8ZhGfz9vbW7Nmz5efnJxsbG3l5eenLL79Us2bNTNrl53yEhISoTJkyqlmzpgIDAwt3UgAAAAAAAHJhWLJkSVZxFwEAAIC/v2bNmqlcuXLFXQaQqxEjRmjFihXq0KGDvvjii+IuBwCAHGJiYnT27NniLgMAAABmgBnAAAAAAAAAAAAAAGAmCIABAAAAAAAAAAAAwEwQAAMAAAAAAAAAAACAmbAq7gIAAAAA4GHr37+/unXrpjJlyhR3KQAAAAAAAA8VATAAAAAAs1epUiVVqlSpuMsAAAAAAAB46FgCGgAAAAAAAAAAAADMBAEwAAAAAAAAAAAAAJgJAmAAAAAAAAAAAAAAMBMEwAAAAAAAAAAAAABgJgiAAQAAAAAAAAAAAMBMEAADAAAAAAAAAAAAgJkgAAYAAAAAAAAAAAAAM0EADAAAAPxNREZGymAwmDxKlSolf39/ffPNN8rKyiruEgtl1qxZMhgMyszMvGebKVOmyMrK6hFWlTd3d3eNGzeu0P33798vg8Gg2NjYIqzq4RowYIBq1qxZ3GXk6lFeIw/62T9q69atU+XKlWVra6vdu3cXdzkAAAAAgIeMABgAAAD4m/n++++1YcMGbdiwQfPnz9czzzyjvn37auLEicVdWr78+9//Vp8+fQrUJzg4WFOnTn1IFRWPChUqaNq0aapSpYok6ffff5eXl1cxV/X3dfc1UpjrLL/Gjx+vNm3aGJ8/8cQTSkhIeCjHKgrjxo1TmTJltG3bNvn5+RV3OQAAAACAh+zx+hN6AAAAAHlq3LixXFxcjM9DQkJ06dIlTZgwQYMHDy7GyvKnMDMQa9SooRo1ajyEaoqPq6urwsLCjM+Zmflg7r5GHub57N27t3H7r7/+0oULFx7asYrCxYsX1axZM9WrV6+4SwEAAAAAPALMAAYAAADMQEBAgE6dOqXr169Lkm7cuKFhw4bJw8NDNjY28vT01AcffKDMzEwdPHhQBoNBmzZtMvZfvHixDAaDpk2bZtz3559/ymAwaOfOnZKkPXv2qFWrVnJ3d1fp0qXVqVMnHT9+3Nj+lVdeUdeuXTV69Gg5OTnpv//9b446g4KCNGfOHM2dO1cGg0FxcXHG1w4dOqTnnntOdnZ2euqppxQVFWV87e7lfTdt2qSmTZvKxcVFpUqVUuPGjRUTE5Prufn6669lb2+v9PR0476wsDAZDAb98ccfxn3Tp0+Xs7OzMjMzlZmZqYiICPn5+cne3l5Vq1Y1OTfZMjMz9d5778nd3V2Ojo7q2LGjkpKSjK/PmjVLNWvWlIODg9zd3dW5c2edPHlSkukS0BEREerdu7eOHz8ug8GgyMhISdKFCxfUq1cvVapUSQ4ODgoMDFR0dHSu7zPb+fPn1atXL1WoUMFY++TJk03alCtXTpMnT9bQoUNVsWJFOTs7q3379jp79qyxzenTp9WmTRvZ29urfPnyioiIuO9xJalr167q0qWLvvrqK3l5ecnBwUFt27ZVUlKShg4dqqeeekpubm569913TZYs37x5s5o2bSoHBwc5OTmpefPmxutOkqZNm6YnnnhC27dv17PPPitnZ2dVrlxZs2fPNra58xq513WW13Hycw1L/7cEdHR0tDw9PSVJ3t7eCgkJkVSw61OSJk6cKDc3N61du1Y1atSQk5OTvL29NW/ePJN2Bf0aXLVqlQwGg/bv369///vfMhgM2rZt232/P2QrW7asIiMj1aZNG9nZ2eny5cuF/nx37dql559/Xu7u7nJyclJAQIB+/vnnAn2+krR9+3bj5+fh4aHhw4frxo0b+T4/AAAAAFBSEAADAAAAZuDYsWNyc3OTvb29JKl///6aPXu2vvzyS/3xxx/6+OOP9dVXX2n48OHy9fWVh4eHNm/ebOy/ceNGeXh4mITCMTExcnV1lb+/v06cOKHg4GBZWlpqw4YNWr9+vZKSktSyZUtjAGNjY6N9+/bp119/1Zo1a9SwYcMcda5atUr+/v7q1q2bLly4oFq1akmSrKysNGDAAA0fPlxbtmxRcHCw3nzzTZ06dSrHGCkpKWrXrp2qV6+urVu3avv27apdu7Zat26tS5cu5WjfsmVLpaWlac+ePXm+3+DgYFlZWWnYsGH64osvNHLkSP32228aPHiwwsPD9c0335iMPXv2bN28eVM//fST5syZo/Xr1+vtt9+WdDsEfOuttzRo0CD99ttvWrNmjRITE9WlS5ccNQ4fPlwDBw6Uh4eHLly4oLCwMN26dUutW7fW1q1bFRUVpd27d6tBgwZq3bq19u/fn8tVcNvrr7+uLVu2aNGiRdq7d69GjBihwYMHa+XKlcY21tbW+vzzz1WjRg0lJCTo999/1+7duzV27Fhjm169emn//v364YcftGHDBiUmJmr58uX3PG72uJs2bdL58+d1+PBh7dixQ2vXrlVgYKCefvppnThxQkuWLNGUKVP0v//9T9Lt4L9ly5aqUKGCtm3bpi1btqhUqVJq0aKFMSy3trbW5cuX9dFHH2n58uVKTk5Wr169FBYWlus1ktt1lp/j5OcavtNzzz2nJUuWSLodPs6fP7/A1+ed72/8+PH6+eeflZSUpJ49eyo0NFQHDx6UpEJ9DTZu3FgXLlyQn5+f3njjDV24cEH169e/7/eHbDY2NpoxY4Zq1aqlDRs2yNHRsVCfb1paml588UXZ2dnp559/1o4dO9SwYUOFhIQYP7v8fL4JCQl6/vnn5ePjo/Xr12vy5MmaM2eOhgwZku/zAwAAAAAlBQEwAAAA8IjMnTtXoaGhGjNmzAPdL/TmzZvGWaoXL17Ut99+q6ioKPXr10+SlJSUpHnz5mnUqFHq2rWrfHx81KNHDw0cOFAzZsxQenq6WrRoodjYWOOY0dHReuutt3IEoi1atJCFhYWmTp0qg8GghQsXqlatWqpfv74WLFigY8eO6bvvvpMkGQwGHT16VHPnzlXTpk3l5uaWo3ZnZ2dZWVnJ1tZW7u7usrS0lHR7Ju2wYcP00ksv6ZlnntHYsWOVmZmZ6zK+f/31l65cuaLXXntN1apVU/Xq1TV58mStWbNGtra2Odr7+PjIy8vL+H7PnTunI0eOKDQ01OT9btq0Sc8//7yuXLmiqVOnatiwYerVq5eqVKmisLAw9erVS59++qnJ2OXLl9fkyZNVv359denSRe+8845Wrlyp1NRU7d+/X3Z2durTp498fHwUEBCgpUuXGmf33snBwUH29vaysLCQu7u77OzstG7dOu3evVszZ85U8+bNVa1aNU2aNEmenp6aNGnSPa+PyMhIrVu3Tk2bNlXVqlX1+uuvq06dOlq7dq1Ju2rVqik0NFRWVlaqWLGiWrdurV27dkmSTp06pV9++UUjRowwHvurr75S6dKl73ncbBkZGRo9erSsra1Vs2ZN1apVS7a2turXr58sLS3VsmVLlS1b1jgrd9q0aXJyctK8efNUu3Zt1a5dW99++60yMjI0d+5c47jp6el6//33VbFiRRkMBr3xxhvKyMjQ3r17c9SQ23WWn+Pk5xq+k7W1tfGcuLq6qlSpUgW+PrPdvHlTo0aN0pNPPilbW1v985//lIODg7799ltJKvTXYPb7t7Ozk7u7uy5fvpznY//43gAAIABJREFU94fssRwcHPTZZ5+pYcOGxtnVBf18swPZqKgo1a1bV9WrV9e4ceOUkpJi8kcoeX2+M2fOlL29vWbNmqXAwEB17NhREyZMMIa7+Tk/AAAAAFBSEAADAAAAj0BUVJT69OmjqKgoRUREqF69ekpOTi7UWO7u7rK2tpa1tbXc3NzUp08f9e/fX6NHj5Yk7d27V5mZmQoMDDTpV79+faWkpOjw4cNq0aKFtmzZoqysLJ0/f15HjhxRWFiYEhMTjeF0diAq3V56NSAgwOTewx4eHqpcubLJMs6+vr4qU6ZMod5Xo0aNjNtPPPGEJOnq1as52lWtWlW+vr7q0aOHPv30U+3Zs0eWlpZq1qyZHBwcch27RYsWxrBp48aNqlevnlq2bGkMgI8dO6aTJ0/q+eefV1xcnNLT0/XCCy+YjBEUFKQjR47o2rVrxn1NmjQxadOwYUNlZGTo6NGjat68uQwGg5o2baqZM2cqISFB5cqVU0BAQL7Ox/bt22Vra6tmzZoZ91lYWKhJkyYm5/xuTk5OmjRpkurUqaOnnnpK5cuX12+//aaLFy+atKtdu7bJc1dXV+MM1eylse+s1WAw5Kt2b29vWVtbG5+XLl1afn5+Jm1Kly6ty5cvS7p9r15/f3+TPk5OTvL19c3xPu+s2dXVVZLuOav2bvk9zoNcw1Lhrs9szzzzjHHbxsZGVapU0ZEjRyQV3ddgfr4/ZMttBnRBP19ra2ulp6drwIABqlatmp588kk9/fTTknTfa/Luz3fXrl165plnjH80Ikk9e/bUzJkzC3R+AAAAAKAkIAAGAAAAHoE7l9+VpOTk5EKHEhs2bNDOnTu1c+dOxcXFKSkpSRMmTDDOLrxy5Yok5ZitWapUKUm3Q9WWLVvq0qVLOnDggDZu3Kg6derI3d1dDRo00KZNm5SQkKC//vrLGABfuXJFv/zyi+zs7EweR48e1ZkzZ4zHcHZ2LtR7kiRHR0fjtsFgkCST+4hms7S01KZNm9SlSxfNnDlT/v7+8vLy0vz58+85dsuWLU0C4KZNm6pBgwY6c+aMTpw4oZiYGFWqVElVq1Y1nr/g4GCT9xoaGipJJvfJvfv9Zr+HlJQU+fr6auvWrfLx8dGIESPk7e2twMBA7dixI1/n48qVK7px44bs7e1N6pgzZ47JOb9TRkaGWrVqpXXr1mn8+PHasWOH4uLiVK9evRxts5cLv1P2+c4O3u9u4+TklGfduc1ytbOzu+exrly5kuvM4lKlSuX4A4D71ZyX/B7nQa5hqXDXp/R/M27v5OjoaPxDkaL6GszP94f7jVXQz/fw4cNq3ry50tLStGDBAu3ZsyfXmf3S/T/fS5cumXyPuFt+zw8AAAAAlARWxV0AAAAAUBLcOSvtQdWtW/e+42WHNtlBT7bs587OzipfvryqV6+uzZs3a+/evcaZrI0bN1ZsbKyysrLk4+Mjb29vY5/GjRvr66+/znG87ODoUSpbtqy++OILffHFFzpw4IDGjx+vXr16qXr16vL398/Rvnnz5kpMTNShQ4cUHR2tjz/+WHZ2dvL391dsbKxiYmKMYXf2+VuwYIHxHsV38vDwMG6npKSYvJY9Ozg7KK1du7YWLFigmzdvKjY2Vh988IHatm1rvOfs/Tg7O8vOzk6//vprjtfunAV5p+3bt2vfvn2KiYkxmZ184cIF42eZH9lBW/YszmyFnbV+P87OzjmuVen29frUU0/97Y4jFfz6lG4HnSkpKSYh55UrV+Tp6Wmsvyi+BvPz/aEoLVmyRJmZmVq0aJExKP7rr78KPE7ZsmVz/fyyPW7fowAAAACgODEDGAAAAHgE+vTpYxKsvPTSSwoKCnoox6pTp46srKxM7q8pSVu3bpWzs7Nx+dXsWbHZM2Kl2wFwTEyMyfLP0u2lgA8fPiwfHx/5+fkZHxYWFnryyScLXGN+Z23mJj4+XqtWrTI+r169uqZPny5LS0vt378/1z5PPPGEav0/9u48rMsq///48wMii4gbiCmiiYqIuOSSBAoK6qCmTSpobpRLjoNLpU2pmd+00hzT3BrT3NOx0RQblzTDhTQClBQ3TCG1MtzBLWT5/cGPe/gAygeiLHs9rovr4nN/7vuc9zn3ObdXvTnn9vFh06ZNnDhxAn9/f6Do9jZr1gxbW1tSU1PN2lqtWjVcXFzMVkDmf48yQGxsLLa2tnh4eBATE8OBAwcAjC2Ap06dyqVLl8xWEd+rX9q0acOdO3fIysoyi8Pe3h43N7cir79z5w6A2btrDxw4QHJycon63NPTE8Bslfrdu3fZvXu3xWVYqlWrVsTFxRnvnoXcRPOJEydo3br1Lyo7f5t/zXry11Wa8Zlnz549xu83btzg5MmTxvbKZTUHLX0+lJU7d+5QoUIFs1XCq1evBkr2HGjRogUxMTHGGAdYtWoV7du3Jzs7u8yfUSIiIiIiIn9kSgCLiIiIiPwGAgMDSUlJISoqiqioqEJbQpelqlWr8txzz/H2228TGRnJ2bNnWblyJQsWLGDs2LGUK5e7EVBQUBBffPEFx48fNxKiTzzxBKdOnWLHjh1mCeARI0Zw48YNwsPDSUhI4NSpU0ybNg1vb2+LtzTOU6VKFQ4dOmRsX11SZ8+epVevXsyaNYuTJ0+SlJTEtGnTsLKyKvKdpXmCgoKYP38+Xl5eRoLU39+frVu3cubMGYKCgoDcrXGHDx/O66+/zrp160hOTmb37t106tSJwYMHm5WZnJzMtGnTOHPmDDt37uRf//oXvXv3xt7enu3bt9OzZ082bNjAmTNnSEhIYO7cudStWxd3d/ci++XChQvs27eP7777juDgYFq0aMGAAQPYs2cPKSkprF27lhYtWrBgwYIi29isWTPs7OyYO3cuP/74Izt27CAiIoLOnTtz8uRJUlNTLerjOnXq4Ovry9tvv82OHTtISEhg+PDhlC9f3qLrS2LkyJHcunWLIUOGkJSUxJEjR3jmmWdwcnIq1N8lUXCc/Zr1AGzZsoVjx46VenyWK1eO6dOnEx0dTVJSEiNHjgSgf//+QNnNQUufD2Xl8ccf5+LFi8bW5QsXLuTrr7+mevXqfPPNN/dd1Zvf888/z927d+nfvz/79+8nMjKSl19+GS8vL6ysrCzqn6+++oq2bdty+PDhMm2jiIiIiIjI740SwCIiIiIiv5HKlSsTGBj4q638zW/evHmEh4czcuRIPDw8mDJlCpMmTeL11183zgkMDOTChQt4enri4uJixNi4cWPOnz9Phw4djHPr1KlDVFQUP/30E35+frRq1Ypt27axefNm2rZtW6LYRo8ezQ8//IC/vz9xcXElbltAQADLli1j1apVPPbYY7Ru3ZqdO3eyceNGGjZseM/rgoODOXfunLHaGcDPz49z584Z70DO8+677zJy5EhefvllPD09GTRoEP7+/qxZs8Y45+7du4wbN46ffvqJ1q1b89RTTxEYGMj8+fMBmDhxIsOGDWPcuHF4eXnRuXNncnJy2Lp1q/GO4/z69etHvXr1CA4OZunSpVhbW7N9+3Z8fHzo1asXXl5eTJ06lddee41x48YV2UYXFxeWLVvGZ599hoeHB9OmTWP58uW88MILJCcn07FjR4v7ec2aNXh6etKjRw+6dOmCu7s7AwcOJDs72+IyLOHh4cHOnTtJTk6mWbNmPPHEE+Tk5LB7925jXJZGwXH2a9XTqlUrQkJCeOmll4iIiCj1+ASYPn06Y8aMwcfHh+joaD755BPq1asHlO0ctOT5UFaefPJJxo8fbyRro6OjWbFiBX/7299YsWIFr776qkXl1K5dm+3bt3P+/HmCgoL4+9//TlhYGLNnzwYs659r164RExNjcdJZRERERETkj8q0bt260u+9JiIiIiLy/wUEBODq6vqgwxAR+cOZP38+Y8eOJTMz80GHIiIP0N69e+/5igARERERkZLQCmARERERERERERERERERkYeEEsAiIiIiIiIiIiIiIiIiIg8JJYBFREREREREHqCIiAht/ywiIiIiIiJlRglgEREREREREREREREREZGHhBLAIiIiIiIiIiIiIiIiIiIPCSWARUREREREREREREREREQeEkoAi4iIiIiIiIiIiIiIiIg8JJQAFhERERERERERERERERF5SCgBLCIiIiIiIiIiIiIiIiLykFACWERERERERERERERERETkIaEEsIiIiIiIiIiIiIiIiIjIQ0IJYBERERERERERERERERGRh4QSwCIiIiIiIiIiIiIiIiIiDwklgEVEREREREREREREREREHhJKAIuIiIiI/EHMmTMHk8lk9mNlZYWbmxu9e/fm1KlTDzrEX6R3794EBwc/6DAeSjNmzMDFxYWqVas+6FAeSuvXr8dkMnHp0qUiv58/fz7lypX7jaOSPxKNERERERERKUv6rwsRERERkT+YTz/9FEdHRwCys7M5ffo077zzDu3atSMxMRFnZ+cHHKH8nmRkZDBp0iTCw8MZNWrUgw7nT6lDhw4sXLjwQYchv2MaIyIiIiIiUpaUABYRERER+YPx9/encuXKxueOHTsSFBSEh4cHixYtYuLEiQ8wOvm9SU9PJzMzky5dutC0adMHHc6fkre3N97e3g86DPkd0xgREREREZGypC2gRUREREQeAvXq1cPFxYVz584Zxy5evMigQYNwd3fHwcGBtm3bsnv3buP748ePYzKZ2LFjB0FBQVSqVAl3d3fWrFnD119/TZs2bXBycqJ58+bExsYa12VmZjJlyhQaNWqEvb09DRs25P333zeLx9XVlTlz5jB8+HCcnZ2pUqUK48aNIzU1lZ49e1K1alXc3d1Zvny52XUmk4mlS5fy6KOPYmdnR+vWrTl48KDZOf/+979p3bo1jo6O1KhRgxdeeIHbt28b37u4uDBnzhy6du2KnZ0d169fN7s+PT0dR0dH3nrrLbPjWVlZVK9enVdffRWA8+fPExYWRtWqVbG1tcXHx4fVq1cb58fFxWEymYiLizMrp379+owbNw6Ao0ePYjKZ+PTTT/H29qZNmzZF3r/Zs2dTrVo1duzYgbe3N46Ojjz66KOsXLnSOKdPnz6EhYUxefJkHB0d+e9//wvc/z5//vnnxorwPn36YGdnZ/E9vFc/Ftf/YWFhhIaGsmzZMjw9PalYsSItW7bkq6++Ms7JyMhgwoQJuLm54ejoiL+/P/v37ze+tyS+ffv20b59eypXrkzFihXx9/dn7969RfYv5N7fyZMnU79+fezt7XFzc+Pvf/87N2/eLFHsmZmZREREUKVKFZycnHjmmWcKjbGCCm7vW5r58UvGyJdffkn79u1xcHDA0dGRjh07GnN6586dmEwmszYCfP3118bzAeDgwYN06dIFZ2dnnJycePrpp/nuu++KbO/vcY4V14bTp09ToUIF5s+fb5x//fp1XF1djZXzPXv2pFevXvzzn//E3d0de3t7WrVqVSi+4uZIUfep4Bix9Dk7d+5cxo0bh5ubG5UqVeLJJ5/kwoULxjk//vgj/fr1o3LlylSrVo3Q0FDOnz9vfF/cvxMiIiIiIvLHpASwiIiIiMhD4PLly1y+fBl3d3cgd2vokJAQDhw4wPLly4mPj6d169aEhISQmJgIgI2NDQCvvfYaCxYs4MqVK7Rr144RI0bw2muvsWnTJi5evEi1atXMtg4eP348M2fOZMKECRw5coQXX3yRsWPH8uGHHxrn2NjYMGvWLHr06MHFixeZPn06s2bNIiQkhFdeeYXLly8zePBgRo4cydWrV43rjh8/zpo1a1i5ciU7duzgzp079OzZk4yMDAAiIyPp168fwcHBJCQksGzZMtavX8/w4cONMsqXL88HH3yAj48PUVFRVKhQwayvKlasSJ8+fVi1apXZ8d27d3Px4kXCw8PJyMigU6dOnDx5kk2bNpGYmEivXr0YOHAgmzdvtvi+lC9fHoApU6Ywbtw4sz7Kz8bGhuvXrzNr1iw+//xzLl++zMCBA3n22Wc5efKkUdbhw4c5dOgQW7duxdfXt9j7HBAQYFy/dOlSvv/+e4vvYVH9aEn/29jYEB0dTUxMDAcPHiQ1NRVnZ2eee+4545yXXnqJJUuW8O6777Jnzx7q169Ply5dSE5Otii+mzdv0r17dxo3bsyBAweIiYmhadOmhISEmI2n/GbPns2MGTN48803OXz4MMuWLSMyMtJsxbwlsU+fPp3Fixfz7rvvcvDgQdq1a8cbb7xh4Yj4Xz0lnR+lHSNJSUkEBwdTq1YtvvrqK/bv30/FihUJCgri/PnzdOzYkerVq7Nx40azGNevX0/16tUJCgri3LlzdOjQAWtra6Kiovjiiy+4fPkywcHB/Pzzz4Xa93ucY8W1wcPDg2nTpjFp0iRSU1OB3GdjhQoVmD59unEPvvjiC06fPk1SUhI//vgjzs7O9OrVi+zsbMDyZ1TB+1SQpc/Zd955B29vb1JSUjh69Cjx8fHGeMzMzKRr166cPn2aTz75hE2bNpGcnEzXrl3Jzs626N8JERERERH5Y1ICWERERETkN7JixQr++te/8sILL5CQkFDqcrKyssjMzCQzM5OMjAxOnDhB//79sbW1ZcCAAUDuqr74+HgWL15Mx44d8fLy4r333qNOnTq89957ZuWFhYXRqFEjrK2tCQsLIz09nWHDhlGzZk1sbW3p1asX33zzDQBpaWksXLiQ8ePHM2jQIOrXr8+IESMYNGiQkSTJ06JFC7p3747JZKJfv34A+Pr64uvraxy7ffu2kbyC3NVo//nPf2jXrh3t27dn1qxZnD9/nj179gC5ybeAgADefvtt6tevT0hICNOnT+ejjz4yVrWZTCYcHByYMWMGvr6+Zqvq8gwdOpQTJ06Yrdxbv349vr6+eHp6sm3bNk6cOMHy5ctp3749DRo0YMqUKfj5+TFv3jyL75XJZAJy3+/57LPP4uPjc89zs7KyeO2113jkkUewtbVl0qRJODg48NFHHxllnT59mhUrVtC+fXuqVatW7H22sbGhatWqQG5Srlq1ahbfw6L60ZL+h9wE7ezZs6lQoQL29vYMGDCA48ePc+vWLdLT01myZAmTJ08mNDSUli1b8sEHH9ClSxe+/fZbi+I7e/YsaWlpDBgwAC8vLxo3bszcuXPZunUrtra2RfbvgAEDiIuLIywsjAYNGtCpUyfCwsKMFa6WxA6wcuVKevbsybPPPkv9+vX529/+RpcuXSweE3lKMz9KM0bef/99HB0dWblyJU2bNqVp06Z89NFH3L17lxUrVmBtbU2vXr0KJYA3bNhAaGgo1tbWLFy4EJPJxJo1a/Dx8aFVq1asXr2aM2fOsH79+iLb93ubY5a0YcyYMXh5eTF+/HgOHz7M+++/z5IlS8z+iCQzM5PZs2djZ2dH5cqVmTx5MmfPnjVWzVr6jCp4n/IryXPWy8uLZ599lnLlyuHm5kZISIjR51FRUSQkJLB06VI6duxIu3btWLx4MZ6envzwww8l+ndCRERERET+WJQAFhERERH5DSxfvpzw8HA2bdrEnDlz6NChA9euXStVWc7OztjY2GBjY4OtrS1eXl6kpqayfft2YwVwTEwMtra2BAQEGNdZWVnRrl27QslnT09P43cnJycAGjVqZHbszp07/PzzzyQkJJCRkUHnzp3NyggMDOTbb7/lxo0bJSoXMNs+t0mTJlSpUsX4nLcy7sSJE2RnZxMXF1dk3Tk5OUaSOv919+Ln54eXl5exQjE7O5uNGzcSHh4OQHx8PPb29jRr1szsulatWpUqeV9cPHkee+wx4/fy5ctTv359vv32W+OYp6enkdCFkt3nPCW5h/njLkn/522znCfvnl69epXExETu3LlD69atzdq6fv16OnXqZFF8DRs2xNPTk/79+zN9+nQOHjyItbU1AQEBODg4FNluZ2dntm3bRtu2balduzY1atRg0aJFXLlyxey8+8WekZHBt99+W2ib4ccff7zIOu+nNPMDSj5G4uPjadmypbHiH8DR0RFPT09jjISFhXHq1CmOHj0KwKFDhzhz5gzPPPMMkDvO2rRpY/bu8dq1a1OvXr17jrPf2xyzpA1WVlZ8+OGHfPzxx/Tu3ZshQ4bQsWNHs3K8vLyMrdQB47293377bYnmSMH7lF9J5mjB93pXqVLFWDUeFxeHnZ0dTZo0Mb5v3rw5//nPf3BzcyvV80NERERERP4YlAAWEREREfkNbNq0yezztWvXSv0/2KOiooiNjSU2NtZYKTd37lzat29vnJOWlsbPP/+Mvb09dnZ2xs+yZcv48ccfzcorasVk/gRHnpycHNLS0oDc1Xb5y3322WcBzN49WZJy81SqVMnsu7yVdzdv3uTWrVtkZmby+uuvm9Xt4eEBYNauguUUZciQIaxdu5bMzEz27dtHWloaYWFhQG7/OTo6GqsL81SsWJH09PRiyy7IknjyVtzmV6FCBbM/FChYTknuc/5rwLJ7mL++kvR//gRqfjk5OUZyquDW3CWJz9ramn379hEaGsrixYtp2bIldevWLbTlcH6jRo1i6tSpREREsHfvXhISEhg2bFih8+4X+82bN8nJySl0jqOj4z3rvZfSzI/SjpG8ZHJ++cdyu3bteOSRR/jkk0+A3JW6devWNZKqaWlp7Nq1y+x+2NnZcfr06XuOM/h9zTFL29C4cWP8/Pw4deoUQ4YMKVROwXudN46vXbtWZs+okszRosZr3pi5evXqPedZXj0lfX6IiIiIiMgfQ+G90EREREREpMzlX3X2SzVv3twor1WrVmzcuJHnn3+eQ4cOGe/DrFSpEnZ2dhw6dKjQ9dbW1qWuOy9psXr16iK3Wq1du3apy4bcRG9+eSvdHB0dcXBwwMbGhjFjxhSZmHF1dS1RXYMHD2bChAlERUWxefNm/vrXvxrtq1SpEunp6eTk5JglqNLS0oxzCiau8ty+fbtEceTJSzDmT9ikpaVRp06de15Tmvtc2ntYVv3v4uIC/C/JVdr4XFxcmDlzJjNnzuTYsWPMmjWLQYMG0bhxY1q2bGl2TVZWFkuXLmXSpEnGNulQeHVtcfKSrwWvK+1q/pIq7Rgpqq/T0tKoWbMmkLvqs0+fPmzcuJHXXnuNDRs2GNtS55Xh7+/PokWLCpVTsWLFe9b9e5pjlrZh69atREdHExQUxNixY9m3bx9WVv/72/mCyem8vq1SpUqZzZGyes66uLgU2cf56/k1/p0QEREREZEHTyuARURERER+A+Hh4WYrvnr27ElgYGCZlD1v3jySkpJ45513jGNt2rThzp07ZGVl0ahRI+PH3t4eNze3UtfVrFkzbG1tSU1NNSu3WrVquLi43PP9q5ZKTEw0S67FxsYCuavyrKysaNmyJSkpKWZ116tXj/Lly5ttHW0JZ2dnevTowdq1a1m/fr2xug5yE+t37tzh4MGDZtccOHDA2Lo4b1Vl/uRfamrqL1o5l/euY8hNfp88edJsW+CCSnOfS3sPy6r/PT09cXBwMGtrdnY2AQEBrFy50qL4kpOTiYyMNK5v3Lgx//rXv7C2tiYxMbFQnXnvzc7/rtX09HQ2b95stsK2OLa2ttStW7fQ6v2dO3daXMYvVdIx0qpVK+Li4sjIyDCOXbt2jRMnTphtwx0WFsahQ4fYtWsXJ0+eNLZ/htxxdurUKTw8PMzuiZWVFY888sg96/49zTFL2pCens6IESN49dVXWb16NUePHi30PuLExESzbcPz3rebV1ZZzJGyes62aNGCjIwMvvrqK+PYsWPHaNWqFUePHv3V/p0QEREREZEHTwlgEREREZHfQGBgICkpKURFRREVFVVoS+hfonHjxowePZpp06Zx6tQpAIKDg2nRogUDBgxgz549pKSksHbtWlq0aMGCBQtKXZeTkxPDhw/n9ddfZ926dSQnJ7N79246derE4MGDf3FbnJycGDJkCMeOHePIkSNMmDCBunXr0q5dOwDGjx/PJ598wvTp00lKSiIhIYGBAwfi5+dXqm1jhw4dyqpVq7CxsTF712dISAiNGzdm2LBhxMbGcubMGSZMmEBcXBwvvvgiAO7u7jg7O7Ny5UoyMzO5du0ao0aNuud7PYtTrlw5pk+fTnR0NElJSYwcORKA/v373/Oa0tznX3IPy6L/nZyceO6553jrrbdYtWoV8fHxjBgxgri4OPz8/CyK7+zZs/Tq1YtZs2Zx8uRJkpKSmDZtGlZWVkW+C7Z8+fI0b96cFStWcObMGQ4fPkz37t3p2rUrV65c4eTJk2RmZloUf79+/YiMjGTx4sUkJiYya9asIldQ/hpKM0ZGjhzJrVu3GDJkCElJSRw5coRnnnkGJycns/vt6+uLu7s7L730Ej4+PmbvjR0xYgQ3btwgPDychIQETp06xbRp0/D29ubrr7++b8y/lzlmSRtefvll7O3teeWVV6hRowZvvfUWEyZM4MyZM0Y5VapUMZ5R8fHxvPzyyzRo0AB/f3+g7OZIWTxng4KC8PHxYejQoezYsYPo6GiGDx/O7du38fT0tPj5MXToUEaPHm1xvSIiIiIi8uApASwiIiIi8hupXLkygYGBZbbyN78pU6ZQtWpVnn/+eSB3+87t27fj4+NDr1698PLyYurUqbz22muMGzfuF9X17rvvMnLkSF5++WU8PT0ZNGgQ/v7+rFmz5heVe/fuXZ544gk6depESEgIrVq1wmQyERkZiY2NDQBPP/00q1evZu3atfj4+NC5c2d+/vlnoqKi7rsV7b106tQJe3t7wsPDzbZ5LVeuHJ999hkeHh506tQJLy8vPvvsMzZu3GgksWxtbVm5ciUxMTFUrlwZX19f+vbtS8OGDcnOzi5VH0yfPp0xY8bg4+NDdHQ0n3zyCfXq1bvn+aW9z6W9h2XV/zNnzuS5555j/PjxtG/fniNHjrB161bjXanFxRcQEMCyZctYtWoVjz32GK1bt2bnzp1s3LgW0cTqAAAgAElEQVSRhg0bFlnn0qVLycrKwtvbm7CwMEaPHs1bb72Fu7s7rVu35vz58xbF/vrrrzNo0CDGjRuHr68vsbGxxur70t73kijpGPHw8GDnzp0kJyfTrFkznnjiCXJycti9e7exHTfkbrfcp08fvvnmG7PVvwB16tQhKiqKn376CT8/P1q1asW2bdvYvHkzbdu2vW+8v5c5Vlwb9u7dy6JFi1i4cKGxwnbEiBE0adKEoUOHGivFvb296dq1K926deOJJ57A1taW7du3G1ssl9UcKYvnrMlk4r///S8NGjSgd+/e9OjRAxcXF7Zu3Uq5cuUsfn4kJiZy7Ngxi+sVEREREZEHz7Ru3TrL97sSEREREbmHgICAEr+DVeRB27ZtGz179iQlJcV4H+qDMH/+fMaOHWvxKlT58/mjjpHfyxwrC7179+batWt8/vnnDzoUeUjt3buXCxcuPOgwREREROQhUO5BByAiIiIiIvJb+/777zl48CDDhw9n9OjRf/jElMjvjeaYiIiIiIjIg6MEsIiIiIiI/OmMGDGCffv2ERYWxptvvvmgwxF56GiOiYiIiIiIPDjaAlpEREREyoS2gBYREREpPW0BLSIiIiJlxepBByAiIiIiIiIiIiIiIiIiImVDCWARERERERERERERERERkYeEEsAiIiIiIiIiIiIiIiIiIg8JJYBFRERERERERERERERERB4SSgCLiIiIiIiIiIiIiIiIiDwklAAWEREREREREREREREREXlIKAEsIiIiIiIiIiIiIiIiIvKQUAJYREREREREREREREREROQhoQSwiIiIiIiIiIiIiIiIiMhDQglgEREREREREREREREREZGHhBLAIiIiIiIiIiIiIiIiIiIPCSWARUREREREREREREREREQeEkoAi4iIiIj8QUyaNIly5crd8/saNWoQERHxi+tp0qRJmZTzexIREUGTJk3u+f2SJUswmUxkZmb+hlFJUQYMGIC/v/99z3F2dmbatGm/UUTFmz9//n3n5m9VhoiIiIiIiAgoASwiIiIiIg9Inz59WL58+YMOQx6w0oyDWbNm0bVr118pogejQ4cOLFy40Pi8YMECwsPDH2BEIiIiIiIi8kelBLCIiIiIiDwQ8fHxDzoE+R0ozTgYPHgwjz322K8QzYPj7e3N8OHDjc+aHyIiIiIiIlJaSgCLiIiIiDyEjh8/jslkIioqiqeeegpnZ2dcXV0ZNWoUWVlZxnlffvklzZs3x9bWFk9PTzZs2FCorIsXLzJo0CDc3d1xcHCgbdu27N692/h+wYIFuLq6snnzZlxdXRk/fjyQu61ykyZNcHBwwNnZmV69enH+/HkATCYTycnJPPvss1SuXBmArKwsJk+eTP369bG3t8fNzY2///3v3Lx506grLCyM0NBQli1bhqenJxUrVqRly5Z89dVXxjk//PADXbt2xd7enho1ajBlyhSL+y0pKQk/Pz/s7OyoWbNmoZWpH374IY0bN8bW1pZq1arRv39/fvrpJwD69etHUFCQ2fmNGjXC1dXV7Fjfvn3p1q1bobpfe+01KlWqxO3bt82Ov/fee9jb23Pt2rViYwDo3r073bt3Nytj9erVmEwmbty4UWS7//nPf+Lo6Gh27Pz585hMJv773/8CcPfuXcaNG4e7uzt2dnbUrl2bF198kYyMDOOagwcP0qVLF5ydnXFycuLpp5/mu+++K7JOKHocAJQrV46NGzfi6emJra0tPj4+xMXFGd8X3AL6fmOtoJo1azJ16lTj84ULFzCZTISFhZmd98gjjzBz5kyg+DmQ15avvvqKli1bYmdnR7169Vi9erXxfXH9l38L6MDAQJYtW8aKFSswmUwkJCSUqn9FRERERETkz0kJYBERERGRh5CNjQ0AL7zwAv/4xz+4dOkSa9asYf78+UaS9/r16/To0YNq1aoRGxvLRx99xPvvv8+PP/5olJOdnU1ISAgHDhxg+fLlxMfH07p1a0JCQkhMTASgfPny3Lhxg7lz57J8+XJGjhzJvn37GD58OGPGjOHIkSNs3bqVS5cuERoaCmAk5+bNm8eZM2cAmD17NjNmzODNN9/k8OHDLFu2jMjISCZOnGjWrujoaGJiYjh48CCpqak4Ozvz3HPPGecMGjSIxMREtmzZQlRUFJcuXSoysV1QuXLliIiI4OWXX2b//v106NCBYcOG8f333wOwatUqhg0bxsCBAzly5AiffPIJBw8epFu3buTk5BAcHExMTIzxHuGffvqJs2fPkpOTQ1JSklHPvn376NSpU6H6hwwZQnp6Ops3bzY7vn79ep566ikqV65cbAy/phkzZrBq1SqWLFnCsWPHWLRoEevWrTMS7OfOnaNDhw5YW1sTFRXFF198weXLlwkODubnn38ussyixgHA2bNn+de//sWHH37Irl27sLKyYtCgQUWWUdxYKygoKIgvv/zS+Lxnzx5q167Nvn37jGNJSUlcuHCBTp06WTQHIDcBPHbsWCZPnkx0dDRt2rRh8ODBxjnF9V9+kZGRtGzZkr59+3Lx4kV8fHxK1b8iIiIiIiLy51TuQQcgIiIiIvJnsWLFCjZt2kTdunUZPHgwzZs3/9Xr7NOnD76+vkBu4qtevXrExcURGhrKli1buHLlCvPmzaNx48ZGjLVr1zau37lzJ/Hx8URFRREYGAjkrkjduXMn7733HosXL8ZkMnHr1i3Gjh1LSEgIANu3b8fOzo7w8HBsbGzw8PDg448/NlYrVqtWDQBHR0eqVq0KwIABA+jSpQs+Pj4ANGjQgLCwMLZt22bWpps3bzJ79mzs7e2N6wYNGsStW7e4evUqu3btYsGCBXTs2BHITS7u3Lmz2L7KzMxk/PjxRhveeOMN1qxZQ3x8PLVq1eLdd9+lR48evPrqqwA0bNiQefPm0alTJ/bv309wcDA3b94kISGBVq1asXv3bpo3b07lypXZt28fDRs25Ntvv+WHH34oMgFct25dgoKCWLVqlbEa9cKFC+zfv9/og+Ji8PPzK7adpXXkyBF8fHzo3LkzAPXq1TOSswALFy7EZDKxZs0aYzXv6tWrqVu3LuvXr6d///6FyixqHOS1OzY21vh+9OjRDB06lLS0NJycnMzKSExMvO9YKyg4OJjRo0eTnZ2NlZUVu3fv5plnnmHBggWcPn0aDw8P9u7di4uLC82aNWPHjh3FzgHIXeE7efJk493EH3zwAZs2bWLt2rW8+eabxfZffpUqVaJcuXLY2tri7Oxc6v4VERERERGRPyetABYRERER+Q0sX76c8PBwNm3axJw5c+jQoYOxpe+vqWnTpmafq1SpwtWrVwE4duwYFSpUMJK/ALVq1aJWrVrG55iYGGxtbQkICDCOWVlZ0a5dO2Nb2jx5iWaAjh07YjKZaN++PYsXLyYlJQVXV1fatGlzz1idnZ3Ztm0bbdu2pXbt2tSoUYNFixZx5coVs/PytojO3yaAq1evcvz4cQCzekwm033rze+JJ54wfq9evToA6enp3L17l8OHD9O2bVuz81u1agVAQkICderUwcPDw1hdumfPHvz9/fH19TVWl+7du5dHHnkEb2/vIusfOnQon332GampqQBs2LCBmjVrEhwcbFEMv6Ynn3ySXbt20bdvX9avX8/Vq1dp1KgRDRs2BHLHSps2bcy2cq5duzb16tUrcWyenp5G8hfM70VBJR1rQUFBpKWlceTIESD3PrVv3542bdqY3afg4GBMJlOJ5kC7du2M352cnPD29ubEiRNA8f1XnLLsXxEREREREXm4KQEsIiIiIvIb2LRpk9nna9eulThpY21tfd9tfjMzM42tn/PkT5TmySsjPT29yO/zvws2LS2Nn3/+GXt7e+zs7IyfZcuWmW0VDbmrFvN4enpy4MABPDw8eOWVV3j00Udp27YtX3/99T3jHzVqFFOnTiUiIoK9e/eSkJDAsGHDCp1XVMx57cpLEBY8p+D7be+lQoUKxu8mk8ko9+bNm2RnZxdafVqxYkXgf4nJ4OBgoqOjgf8lFv38/MwSi0Wt/s3z17/+lcqVK7N27Vogd/vnQYMGYWVlZXEMv5YBAwYQGRnJ1atXGThwINWrV6d3795GsjotLY1du3aZjRM7OztOnz5daKwUJ/99APN7UVBJx5qbmxuenp5ER0eTmppqvPf5XvfJ0jlgMpmMe5G/HXnvsC6u/4pTlv0rIiIiIiIiDzdtAS0iIiIi8hvIv2qvtFxcXMjOzubHH3/kkUceMfvu2rVrXL16lZo1a1pcXoUKFUhLSyt0PP/K5EqVKmFnZ8ehQ4cKnWdtbX3f8ps2bcrq1avJysoiOjqaiRMn0q1bN+O9r/llZWWxdOlSJk2axIABA4zj169ft7g98L/EYcHrfulq6woVKmBtbV2ov/I+5yW/g4KCGDNmDBcvXuTEiRP4+flha2vLuXPn+OGHH9i7dy9vvPHGPespX748AwYM4OOPP6Zfv37s27ePDz74oEQxmEymQonS27dv37d9eQnW4q7p0aMHPXr04ObNm2zZsoWxY8cydOhQNm/eTKVKlfD392fRokWFriuYGC1r9xtrtra2hc7Pew9w9erV8fHxMWIfNWoU586d47vvviM4OBiwfA7k5ORw+/Ztsz8+uHHjhrF6Ge7ff8V5kP0rIiIiIiIifyxaASwiIiIi8hsIDw83WyHbs2dP432ilurcuTMmk4n58+cX+u6tt94CoHv37haX5+npSUZGBseOHTOOHTlyhAsXLhif27Rpw507d8jKyqJRo0bGj729PW5ubvcsOyYmhgMHDgC5SbKAgACmTp3KpUuXzMrPS1RmZWWRmZlptu1veno6mzdvvu+q56LaBObbId+9e5fdu3dbXEZRbGxsaNasmbG9c568NrZu3RrI3Y74woULLF++nCZNmlClShUcHBxo3rw5a9euJTk52Ugs3svQoUM5cOAAs2fPpm3btjRo0KBEMTg5ORVKeH/zzTf3rdPJyYlbt25x9+7de14TGRlJSkoKkJuMDg0NZdiwYcZWym3atOHUqVN4eHiYjRUrK6tCf7BQUEnucUGWjrX8goOD+fLLL41V2pC7hfnp06dZt24djRo1Mt6FXZI5kLf6G3KTvydOnDC2WC+u/4qSv19+Sf+KiIiIiIjIn4sSwCIiIiIiv4HAwEBSUlKIiooiKiqq0JbQlmjYsCFjx45l+vTpDB06lPXr17N27Vr69evHzJkzeemll/Dy8rK4vO7du1OxYkUiIiKIjY0lOjqakSNH4urqapwTHBxMixYtGDBgAHv27CElJYW1a9fSokULFixYcM+yt2/fTs+ePdmwYQNnzpwhISGBuXPnUrduXdzd3bGzs8Pe3p49e/aQkJCAyWSiefPmrFixgjNnznD48GG6d+9O165duXLlCidPniQzM7PYNtWpUwdfX1/efvttduzYQUJCAsOHD6d8+fIW98u9jBs3ji1btvDuu+/y3XffERUVxZgxYwgICDDew1utWjWaN2/OvHnzzN4H6+/vz7x58/Dx8aFGjRr3rcfb25vHH3+cf/7zn4SHh5c4hpYtWxIbG8vhw4fJyclh+/btbN++/b51tmzZkpycHJYuXQrAyZMnC93fOXPmEBYWxt69e0lOTmb37t18/PHHxrtxR4wYwY0bNwgPDychIYFTp04xbdo0vL2977kdc8FxkD8BbanixlpROnTowPfff8/mzZuN+1SxYkWaNm3K/PnzzbbptnQO2NjYMG3aNKKjozl9+jQvvvgiGRkZPPPMMxb1X0FVqlTh0KFDJCQkcPnyZYv696uvvqJt27YcPny4xP0oIiIiIiIiDw8lgEVEREREfiOVK1cmMDCwxCt/83v33Xf54IMPOHr0KMOHD2fIkCGcOXOG5cuX884775SorGrVqrFx40ZSU1Px8/PjueeeY+zYsdSvX5/s7Gwgd0Xl9u3b8fHxoVevXnh5eTF16lRee+01xo0bd8+yJ06cyLBhwxg3bhxeXl507tyZnJwctm7damw3/Morr/Cf//yH4OBgbt68ydKlS8nKysLb25uwsDBGjx7NW2+9hbu7O61bty5y6+iirFmzBk9PT3r06EGXLl1wd3dn4MCBRptKq1+/fixevJjFixfToEEDwsLCCAwMLJTMDw4O5ty5c8bKUshNAOffVrg4Tz/9NLa2toSGhpY4hhEjRtCnTx8CAgJwcXFh1apVvP322wD37IPHHnuMt956i//7v/+jUqVKDBkyhNmzZ5tds27dOurXr0/v3r1p1KgRgwcPpmPHjrz33ntAbvI9KiqKn376CT8/P1q1asW2bdvYvHkzbdu2vWdbC46DkrJkrBVUuXJlHnvsMc6dO1coUV/wPlkyB+7evUvFihV56623GDVqFI0bN2bXrl2sWbOGRo0aWdR/BY0ePZoffvgBf39/4uLiLOrfa9euERMTU+TW7iIiIiIiIvLnYVq3bl3p99oSEREREfn/AgICzFaOikjp5OTk4OvrS8uWLe+7ylpERB4ue/fuvefW9SIiIiIiJVHuQQcgIiIiIiIicPv2bU6fPs3cuXM5fvw4GzZseNAhiYiIiIiIiMgfkBLAIiIiIiIivwNHjx7l8ccfx8vLi08//ZRatWo96JBERERERERE5A9ICWAREREREZHfgVatWpGVlfWgwxARERERERGRPzirBx2AiIiIiIiIiIiIiIiIiIiUDSWARUREREREREREREREREQeEkoAi4iIiIiIiIiIiIiIiIg8JJQAFhERERERERERERERERF5SCgBLCIiIiIiIiIiIiIiIiLykFACWERERERERERERERERETkIaEEsIiIiIiIiIiIiIiIiIjIQ0IJYBERERERERERERERERGRh4QSwCIiIiIiIiIiIiIiIiIiDwklgEVEREREREREREREREREHhJKAIuIiIiIiIiIiIiIiIiIPCSUABYRERER+YOYM2cOJpPJ+LG1taVOnTr079+fmJiYEpeXmJiIyWQiOjoagN69exMcHFzWYf9qCsb/Z9GkSRMiIiIedBhFioiIoEmTJg86jD+kJUuWYDKZyMzM/EXl/JrzeMaMGbi4uFC1atUiP/8a5s+fT7ly5X618kVERERERB5GSgCLiIiIiPzBfPrpp0RFRfHpp5/yyiuvkJKSwhNPPMGcOXN+UbnPP/88Y8eOLaMo/9wWLFhAeHj4gw5Dfsd+rTHya83jjIwMJk2axFNPPcXu3bsLfS4rBfulQ4cOLFy4sMzKFxERERER+TPQn9GKiIiIiPzB+Pv7U7lyZePziBEjeOmll3jxxRd5/PHH8fX1LVW5nTp1KqsQ//Ti4+MfdAjyO/drjZFfax6np6eTmZlJly5daNq0KZcvXzb7XFYK9ou3tzfe3t5lVr6IiIiIiMifgVYAi4iIiIj8wZlMJmbMmEGtWrWYNWuWcfzixYsMGjQId3d3HBwcaNu27X1X6uVtHZueno69vT3Tp083+z4jI4PKlSszYcIEi8o/evQoJpOJTz/9FG9vb9q0aVNkvQsWLMDV1ZXNmzfj6urK+PHjSxU/wL///W9at26No6MjNWrU4IUXXuD27dsATJw4kUqVKpGRkWF2zTvvvIOdnR1paWlkZWUxefJk6tevj729PW5ubvz973/n5s2bxvmurq7MnTuXcePG4ebmRqVKlXjyySe5cOECAIGBgSxbtowVK1ZgMplISEgoMtbU1FQGDRpErVq1sLe3p2HDhsydO9fsnC+//JLmzZtja2uLp6cnGzZsKFTOkiVLaNKkCQ4ODjg7O9OrVy/Onz9/zz4qizYC/PDDD3Tt2hV7e3tq1KjBlClT7llnnrCwMEJDQ5k3bx5169bFwcGBbt26cfnyZcaNG0fNmjWpVq0ao0aNIicnx7ju4MGDdOnSBWdnZ5ycnHj66af57rvvzMpeu3Ytjz32GBUrVsTZ2ZkePXpw+vRp4/u7d+8ybtw43N3dsbOzo3bt2rz44ovGePjnP/+Jo6OjWZnnz5/HZDLx3//+F4A+ffoQFhbG5MmTcXR0NI5bEl9+9xsjSUlJ+Pn5YWdnR82aNVm+fLnZtfcb42C+BbSlc7C4Nnz++ec4OzsbfVC+fHmzz3Z2dgBkZmYyZcoUGjVqZIzp999/36yejIwMJkyYgJubG46Ojvj7+7N///579kv+LaD9/Pz4y1/+Uij2rl278sQTT1gUw/HjxzGZTERFRfHUU0/h7OyMq6sro0aNIisryzjPkudPcXOvpHNTRERERESkrCgBLCIiIiLyELCxsaFr167s2bMHgOzsbEJCQjhw4ADLly8nPj6e1q1bExISQmJi4n3LqlixIl27dmXjxo1mxz///HOuX79Ov379LCq/fPnyAEyZMoVx48bx4YcfFllf+fLluXHjBnPnzmX58uWMHDmyVPFHRkbSr18/goODSUhIYNmyZaxfv57hw4cD0LdvX9LS0ti1a5fZdevXr6dbt244OTkxe/ZsZsyYwZtvvsnhw4dZtmwZkZGRTJw40ayv33nnHby9vUlJSeHo0aPEx8fzxhtvGHG0bNmSvn37cvHiRXx8fIqM97nnnmP//v2sXbuWb775hldeeYUXX3yRTZs2AXD9+nV69OhBtWrViI2N5aOPPuL999/nxx9/NMrYt28fw4cPZ8yYMRw5coStW7dy6dIlQkNDi765UCZtBBg0aBCJiYls2bKFqKgoLl26VGSCOj8bGxv27dtHamoqp06d4uuvv2bHjh20bduWBg0acO7cOdatW8f8+fP57LPPADh37hwdOnTA2tqaqKgovvjiCy5fvkxwcDA///wzALGxsfTv35+uXbsSGxvLtm3buHHjBr169TLqnjFjBqtWrWLJkiUcO3aMRYsWsW7dOosS13nKly/P4cOHOXToEFu3bsXX19ei+Aq61xgpV64cERERvPzyy+zfv58OHTowbNgwvv/+e+O6+43xouKF4udgcW0ICAjg5MmTACxdupSzZ8+afc6Lb/z48cycOZMJEyZw5MgRXnzxRcaOHWtW70svvcSSJUt499132bNnD/Xr16dLly4kJycXO3f69u3LF198wfXr141j169fZ9euXfTr18+iGGxsbAB44YUX+Mc//sGlS5dYs2YN8+fPN8avJc+f4uZeaeamiIiIiIhIWdEW0CIiIiIiv5EVK1awadMm6taty+DBg2nevHmZlu/u7s6lS5fIzMxk165dxMfHExUVRWBgIADvvfceO3fu5L333mPx4sX3LSssLIy+ffvy/fffU6tWLSA3UdqkSRN8fHz47LPPii3fZDIBue/wfPbZZ+9Zl8lk4tatW4wdO5aQkBAAi8ovaPr06QQEBPD2228DUL9+faZPn87AgQN5++238fHxwcvLi40bNxr1nD17ltjYWP7xj38AMGDAALp06WIknho0aEBYWBjbtm0zq8vLy8tok5ubGyEhIcTFxQFQqVIlypUrh62trbFKsihz5szB2tqaRx99FICGDRuyYMECduzYwVNPPcWWLVu4cuUK8+bNo3HjxkDuGKpdu7ZRRmJiInZ2doSHh2NjY4OHhwcff/zxfVeflkUbv//+e3bt2sWCBQvo2LEjAPPmzWPnzp33rDfP3bt3mTx5MjY2NsZ4ysjI4PnnnwcgODgYFxcXEhIS+Mtf/sLChQsxmUysWbPG2Pp89erV1K1bl/Xr19O/f388PT2JjY2lWbNmxmrRF154gR49epCamkr16tU5cuQIPj4+dO7cGYB69eqxa9curKws/7tok8nE6dOn+fLLL6latSqQu3K4uPgKutcYyczMZPz48cb4fOONN1izZg3x8fHUqlWr2DHu5uZWKF4ofg5a0sd57a1YsSI1atQw+rlixYpUq1aNtLQ0Fi5cyKuvvsqgQYOM+OLj45k+fTpDhgwhPT2dJUuWMHPmTCMR+sEHH3Djxg2+/fZbOnXqdN+507t3b8aOHcuWLVt45plngNykeFZWFqGhoRbFkKdPnz7GdvlBQUHUq1ePuLg4QkND2blzZ7HPn+LmXmnmpoiIiIiISFnRCmARERERkd/A8uXLCQ8PZ9OmTcyZM4cOHTpw7dq1Mq0jMzMTKysrrKysiImJwdbWloCAAON7Kysr2rVrd88tifPr3r07Dg4OxmrUzMxMNm/ebCRdSlK+pe8kzn9eSePPzs4mLi7OSO7lCQwMJCcnh2+++QbITWxHRkaSnZ0NwIYNG3BycqJbt24AODs7s23bNtq2bUvt2rWpUaMGixYt4sqVK2blFnznaZUqVbh69apF7czj6OjIe++9R7NmzahZsyY1atTgyJEjRl3Hjh2jQoUKRvIXoFatWkZCHqBjx46YTCbat2/P4sWLSUlJwdXV9b5b/ZZFG48fPw5gVo/JZLpvvXkeffRRYxUmgJOTE40aNTI7x8nJyVjlGRMTQ5s2bczee127dm3q1atnjAUnJyeSk5Pp2rUr9erVo0aNGgwePBjAaNeTTz7Jrl276Nu3L+vXr+fq1as0atSIhg0bFhtzfp6enkYy1NL4SiJvK2OA6tWrA7nv37V0jBeluDlYFm1ISEggIyOjyPi+/fZbbty4QWJiInfu3KF169bG9+XLl2f9+vUWvbv4kUceoX379ma7E2zYsIGgoCBcXV0tiiHP/ca3Jc+f4uZeaeamiIiIiIhIWVECWERERETkN5CXSM1z7dq1UiWH7icpKQk3NzesrKxIS0vj559/xt7eHjs7O+Nn2bJlZlsI34uDgwPdu3fnk08+ASAqKorLly8b26yWpPxKlSpZFH/+80oa/61bt8jMzOT11183O9/DwwPAuCYsLIzU1FS+/PJLIHdV89NPP228w3TUqFFMnTqViIgI9u7dS0JCAsOGDStUn729faFj+d9ZW5y7d+/SpUsXdu7cyaxZs/j6669JSEigRYsWxjl572IuKP97aj09PTlw4AAeHh688sorPNZ3VfQAACAASURBVProo7Rt25avv/76nnWXRRvT09OLPKfgO3SLYmtrW+hYXv8XVVfett3576udnR2nT5827uu6devo06cPjz/+ONu2bSMhIYFFixaZlTdgwAAiIyO5evUqAwcOpHr16vTu3ZvU1NRiY86v4Hi2JL6SqFChgvF73grenJwci8e4JTEXVBZtSEtLA3JXG+cvI2/l8YULF4wEa/42llTeavU7d+6Qnp7Ojh07jD9MsSSGPPcb35Y8f4qbe6WZmyIiIiIiImVFW0CLiIiIiPwG8q+s+zXcuHGDrVu30rt3byA34WNnZ8ehQ4cKnWttbW1RmWFhYYSGhnLlyhU2bNiAr68vdevWLbPy76ek5Ts4OGBjY8OYMWPMtnnN4+rqCkCjRo1o2rQpGzduxMPDgwMHDvD6668DkJWVxdKlS5k0aRIDBgwwrs3/vtGyEhMTw+HDh9m7dy/t2rUzjl+8eNHYErpChQpGQiu/givHmzZtyurVq8nKyiI6OpqJEyfSrVs3zp8/XyjZWlZtzEvgFbyurFe1Q+5Y8Pf3L5TQhdzthwEWL15Mx44dmTp1qvHd7du3C53fo0cPevTowc2bN9myZQtjx45l6NChbN682Ui25ldUGaWJryxYOsZLoyzakJdkXr16dZHvva5du7aRAC5qXFuqV69eREREsGPHDm7dugXAX//6V4tjOHfuXLF1WPr8KW7ulWRuioiIiIiIlCUlgEVEREREfgN52z/nJcx69uxpvFvyl8rOzmbkyJHcvHmTsWPHArlb8965c4esrCy8vb2Nc7/77jtjW9nihISEYG9vz7Zt24iMjGTixInGd2VR/v2UtHwrKytatmxJSkqK2XbCGRkZnD9/nipVqhjHwsLCWLFiBQ0bNqR69eoEBQUBucnRzMxMqlWrZpybnp7O5s2bS5XUvt+K4Dt37gCY1XXgwAGSk5ON7XE9PT3JyMjg2LFjxjbQR44cMVvFGBMTQ3Z2Nr6+vlhbWxMQEMDUqVPp2LEjFy5coE6dOmb1llUbPT09gdxtf/O2LL579y67d+82K7sstGnThhUrVuDh4WG2dXRSUhKPPPIIkNufNWvWNLvuo48+Av53HyIjI2nWrBl169alQoUKhIaGcvToUVauXAnkbiN969Yt7t69a9Rzv22VSxLfvZRk1XhJxnhJ/ZI25GnWrBm2trakpqaaxXfx4kWsrKywtbXF09MTBwcH9uzZY4yb7OxsOnTowJAhQ4z39t6vX1xcXOjYsSNbtmzh+vXrdOvWDScnJ4tjsLQ/inv+FDf3Lly4UKK5KSIiIiIiUpa0BbSIiIiIyG8gMDCQlJQUoqKiiIqKKrQldElER0eze/duvvjiCz788EP8/Pz46KOPWLBggZGsCA4OpkWLFgwYMIA9e/aQkpLC2rVradGiBQsWLLCoHjs7O3r27MnMmTO5ePEioaGhxndlUf79lKb88ePH88knnzB9+nSSkpJISEhg4MCB+Pn5GVsWQ24COCkpiX/961+EhoYaic/y5cvTvHlzVqxYwZkzZzh8+DDdu3ena9euXLlyhZMnT5KZmWlR/FWqVOHQoUMkJCRw+fLlQt83a9YMOzs75s6dy48//siOHTuIiIigc+fOnDx5ktTUVLp3707FihWJiIggNjaW6OhoRo4cabbSc/v27fTs2ZMNGzZw5swZEhISmDt3LnXr1sXd3b1QvWXVxjp16uDr68vbb7/Njh07SEhIYPjw4ZQvX96i/imJESNGcOPGDcLDw0lISODUqVNMmzYNb29vYzvdxx9/nJ07dxITE8N3333H3/72NyMhHBcXx+3bt5kzZw5hYWHs3buX5ORkdu/ezccff2y857Vly5bk5OSwdOlSAE6ePGnRWLYkvqIUN0aKYukYL6nStiE/Jycnhg8fzuuvv866df+PvTuP6rLM/z/+/IDIIogLKOVWYuKGS+AWBKWgA5o5bowLmpJEmrs4pqZOmmJ+01wmM0tQSTOX1G+5YBPuSoKSW2kqmruUC+7I8vvDH5+vH0G4IcoZ5vU4x3PiXq7rfS33fc7M+3Nd93JzHwcGBpq/x1y2bFn69evHlClTWLJkCUlJSURERJCYmIiPjw9grF9CQkLYtGkTmzZtMm//bDQGI4y8fwp69ow8m6+//jqDBw82HJeIiIiIiIhRWgEsIiIiIvInKVeuXLGs+n3llVeAB98HrVChAr6+vuzYsYOWLVuar7G2tmbjxo2MHDmSzp07c+vWLZ599lneeecdhg0bZriukJAQYmNjadu2rcXK2+Iq/3GKUn6nTp2IjY0lKiqKCRMm4OzszAsvvEB8fLzFNrbu7u54eXmRlJTExx9/bFHGwoULCQsLo379+jzzzDNMnjyZ5s2bs3PnTpo2bcqBAwcMxT948GBCQ0Px9fVl1apVtG3b1uK8q6sr0dHRvP322yxevBhvb29iYmI4d+4cISEhtGrVikOHDvHVV18xZMgQfHx8eOaZZ5g6dSozZ84kKysLgLFjx5Kens7IkSM5f/68uc3r16/Pc0vj4mzj0qVLef311+nQoQPOzs5EREQQGhpq/m50calRowbx8fH8/e9/x8fHh1KlStGgQQPWrVtHixYtgAf9cOLECQICAnBycuKNN97gnXfe4dy5c/Tv359SpUqxfPlyhg0bRpcuXbh+/Tpubm60b9+eKVOmAPD8888zZcoU/vGPfzBq1Cg8PT2ZO3cuTZo0Mfd3UePLy6NzxAijc7ywitqGR82YMYNy5coxatQoLly4gJubGx06dDD3McD06dOxsrIiMjKSGzdu0LBhQ9avX2/+lrGRfunUqRNvvvkmDg4OtGvXrtAxFMTI+6egZ8/Is3no0CFD380WEREREREpLNPy5cuN7zklIiIiIvIY/v7+v+sblCIiIiL/zbZt22axzb+IiIiISFFpC2gRERERERERERERERERkRJCCWARERERERERERERERERkRJCCWARERERERERERERERERkRJCCWARERERERERERERERERkRJCCWARERERERERERERERERkRJCCWARERERERERERERERERkRJCCWARERERERERERERERERkRJCCWARERERERERERERERERkRJCCWARERERERERERERERERkRJCCWARERERERERERERERERkRJCCWARERERERERERERERERkRJCCWARERERERERERERERERkRJCCWARERERERERERERERERkRJCCWARERERERERERERERERkRJCCWARERERERERERERERERkRJCCWARERERERERERERERERkRJCCWARERERERERERERERERkRJCCWARERERERERERERERERkRJCCWARERERERERERERERERkRJCCWARERERERERERERERERkRJCCWARERERkWLw6aefYjKZ8v33t7/97UmHadihQ4cwmUzs2LHjSYfyh3FxcWHy5MlPOox/K5mZmXTr1g1HR0c6depk6J7jx49jMpn49ttviz2ezZs3U7NmTWxtbUlKSjJ0T5cuXQgICAD++Hn8n/6c/KfHLyIiIiIiInkr9aQDEBEREREpCYKDg9m8ebP57xkzZrBv3z5iY2PNx9zc3J5EaIZVqlSJ77//nmeeeYYqVaowb948atWq9aTD+o9x+PBh2rVrx6lTp550KEW2bds2VqxYwccff0ybNm3yvObPbOfkyZOpUKECq1atonbt2n94fYX1n/acPDp2/2nxi4iIiIiIiDFKAIuIiIiIFIOnn36ap59+2vz3F198wZEjR8wrEf/d/fLLL6Smppr/Ll++PBEREU8wov88Rleo/ju7cuUKAJ07d8bFxSXPa/7Mdl65cgV/f3+aNGnyp9VZGP9pz8mjY/efFr+IiIiIiIgYoy2gRURERET+RJ999hn16tXD1taWihUr0rNnTy5dupTvPRcuXKB79+6UK1eOihUr0q1bN86ePWs+f/bsWUJCQqhQoQK2trZ4enparDyeN28elSpVIiEhgebNm+Ps7EzNmjVZuHAhAFu2bKFGjRoAPPvss3Ts2DHX1rAFlQHQvn172rdvbxF7bGwsJpOJmzdvmo998cUXNG3aFEdHR9zc3Bg2bBh37twpVD9u374dPz8/ypUrh5OTE76+vmzbts18PiMjg4kTJ1KnTh3s7e2pXbs28+bNy7fMffv20bZtW1xcXChbtiydOnXi9OnTFtcsWrSI+vXrY29vT7169YiOjgZg4sSJ9OnTh9OnT2Mymfjwww8fW09BcyAkJIRu3boRHR2Nh4cHTk5OeHl5sWfPnt/VPoCdO3fi5+eHg4MDjo6OtGrVir179wIwbtw4unTpAoCrqyt/+ctfct2fXztv3bpFz549cXJywtnZmWHDhpGZmVmo/n24fSaTiUOHDvHPf/4Tk8lkbn9RnqGH5Xd/9+7dad26tcX1derUoXLlyhbH/va3v9GuXbtcz4nRsRs0aBAVK1akbNmy9OvXj7Vr12Iymbh8+fJj485v7ABmzpxJxYoViYuLo379+jg6OvLss8+yePFiIO+xy2sL6OKYn2fOnKFbt25UrlzZ/Kx88skn5vMbN27U1tMiIiIiIiJ/ICWARURERET+JEuWLKF///6EhoZy8OBBVq9ezb59+2jXrh3Z2dl53pORkUFwcDAnTpxg9erVrFmzhpSUFIKDg8nKyiI9PZ3AwECOHj3KmjVrOHToEJ07dyY0NJR169YBYGNjw/Xr15k0aRKrVq3i2rVr9O7dm4iICM6dO4ePjw/Lly8HHiTplixZkiuOgsowau3atXTv3p2AgACSk5OJjo5m5cqVhIeHGy7j1q1btG/fnnr16rF7924SEhJo2LAhQUFBXL16FYDIyEimT5/OmDFjOHjwIMOHD2fo0KF89tlneZZ55swZXn75ZaytrYmPj+e7777jt99+IyAggHv37gGwatUqwsLCeO2119ixYwf9+/cnLCyMlStXMmrUKAYPHky1atVITU197KpKI3PAxsaGHTt2kJCQwL59+7h8+TIuLi7069fPXE5h2wdw7NgxAgICqFKlCnv27GHXrl04OTnRunVrzp49y5gxY8wJ/aNHj/Lll1/mKiO/dk6cOJGWLVuyY8cOxo0bx4cffsjKlSsN9+/DSpUqRWpqKnXq1CEsLIzU1FS8vb2L9AwVpv8DAgJISEggIyMDgEuXLvHLL7+QnZ3NsWPHzOVs376dwMDAXOUbGbuZM2cyf/58oqKi2Lt3L08//TSRkZEAWFnl/T/RCxq7nLqvX7/OBx98wLfffstvv/1GaGgoffv25ejRo4bmaHHNz759+3L+/Hm+/vprDh06xKBBgxgwYABxcXHAg+3m27VrR4UKFQocMxERERERESk8JYBFRERERP4kM2bMoEOHDrz99tvUrl0bf39/5syZQ1JSErt27crznvj4eJKTk1m4cCGtWrXixRdfZMGCBXh4eHD+/Hk2bNjATz/9RExMDH5+fjz33HNMnDgRHx8f5syZYy4nPT2dt99+m6pVq2IymQgLC+P+/fv88MMP2NjYULZsWeDBlrBOTk55xpJfGUZFRUXh7+/P1KlTqVWrFkFBQURFRfH5559brGrOzy+//EJaWhq9evWibt261KtXj9mzZ7N+/XpsbW1JS0vjo48+IjIykt69e1OrVi0iIiLo3bs3UVFReZb50UcfYTKZWLp0KZ6ennh7exMbG8vJkyfNScwZM2bQsWNHIiMj8fLyYtiwYURGRnLu3DkcHBywt7fHysoKFxcX7Ozs8qzH6By4desWM2fOpEyZMtjb29OrVy9+/PFHbt++XaT2wYNV3I6OjixevJiGDRvSsGFDPv/8c+7fv8+iRYtwcHAwj32FChXMc+Jh+bWzTZs2vPXWWzRq1IjIyEiqVq1KQkKC4f59lIuLC9bW1tjZ2eHi4kKpUqWK9AwVpv8DAgK4desWycnJwIPV8Y0bN8bb25vt27cDcPz4cc6fP59nArigsYMHq8g7duxI//798fDwYPLkyVSvXj3fuAsauxyZmZm88847PPXUU9ja2jJu3DgcHBz4/PPPDc3R4pifAAcPHuQvf/kLTZs2xd3dnTfffJOdO3fSqFEjAJ5//nm+/vpr6tWrV+CYiYiIiIiISOEpASwiIiIi8ie4f/8+Bw4coEWLFhbHvb29AcwJp0clJiZiZ2dHgwYNzMcaN27MihUrqFq1KklJSdjb25sTKw+X+2iZDRs2NP93+fLlAcwrZo36PWVkZWWRmJhImzZtLI6/9NJLZGdnG04k165dGw8PD3r27ElUVBT79u3D2toaf39/HBwcSE5OJj09Pc96jh8/brEddY6EhASaNWtGuXLlzMeqVatGzZo1zf2YlJRE06ZNLe6bNm0aQ4YMMRR3YeZArVq1sLe3N//9cF8XpX058Xt5eWFjY2M+5ujoiIeHx2PnX2G88MILFn9XqlSJGzduAMb6tyBFfYYKc3+NGjVwd3dn586dAGzduhVfX19atmxpTgBv27aNp556ivr16+dZT35jl7OS2MfHx+Kev/71r/nGXpixe/75583/Xbp0aWrVqsXx48fzLR+Kb34CvPLKK0ydOpURI0bwr3/9i/T0dJo3b55rK20RERERERH5YygBLCIiIiLyJ7h16xZZWVm5VlXmrLjMSZQ96urVq5QpU+ax5aalpeHo6IjJZMpV7qNlPpywyWFk29ziKuP27dtkZGQwYcIE7OzszP/c3d2BB986NsLa2prt27fTrVs3FixYgJeXF88884x56+q0tDQAXn75ZYt6+vbtC8DFixdzlZmWlsa//vUvi+vt7Ow4ceIEFy5c4Pbt29y7dy/fsShIYeZAXv0MD/q6KO3LaWNeq3rzmitF8WjfmEwm89woqH+NKOozVNj7AwICzN+m3bp1K35+fvj4+FgkgB+3+hcKHrv79+/nWmVfsWLFfGM3OnYmkwkHBweLa8qUKcO1a9fyLR+Kb37CgxXLU6ZMMfeVq6sro0ePNm+tLSIiIiIiIn+sUk86ABERERGR/wZlypTB2tranLzLkfO3s7Nznve5urpy48YNsrOzcyV5c+7L63xaWtpjy/yjPJzwy3Hnzh3zfzs4OGBjY8OQIUMICwvLdX9hVge6uroyffp0pk+fzpEjR/jggw/o3bs39erVM7c7NjYWT0/PXPdWq1Yt1zFnZ2d8fX2ZP39+rnNOTk44ODjg4OCQa/wKo6hzIK9YoXDty7kvr/jT0tJ4+umnDdVdVAX1rxG/t/+M3t+6dWuGDBlCamoqP/30Ez4+Ptja2nLmzBnOnz/Ptm3bePfddw3F/ChbW1sA81bJOa5cuZLvfUbHLjs7m1u3blkk49PS0qhRo0aBsRXX/ATMz/mQIUO4dOkSixcvZuzYsVSqVInhw4cbLkdERERERESKRiuARURERET+BDY2NjRq1Mi8tWyO3bt3A+TaWjhHkyZNSE9PZ8+ePeZjR44cwdvbm8OHD+Pt7c3du3fZt29frnIfV2Z+Crsi+GFly5bNtdLw4W2drays8PLy4tSpU9SpU8f8r2bNmpQuXdq8jWxBUlJSWLt2rfnvevXq8fHHH2Ntbc2hQ4do1KgRtra2XL582aKeihUr4urqak7CPaxZs2b8/PPPuLu7W9xjZWXFU089BTwYi61bt1rcN3ToUIstoPPrv6LOgUcVpX3wYCvfxMRE0tPTzceuXbvGTz/9VOi5Uth5YqR/C/J7+8/o/a1ateLixYvExMTQoEEDypcvj4ODA40bN2bZsmWkpKQQEBBgKOZH2dnZUa1aNb7//nuL41999VW+9xVm7B6eozdv3uTo0aPUqVPHfOxxY1dc8/P69evm7xPDgx92REZG0rJlSw4ePGioDBEREREREfl9lAAWEREREfmTjBw5km+++YYZM2Zw+vRp4uPjGTJkCP7+/ubvbD6qdevWeHp68vrrrxMXF8eOHTsIDw/nzp07eHh4EBQURL169ejfvz979+7l5MmTjBkzhsTExEKttMtJvn7zzTccOXKkSO3z8vJi7969HDhwgOzsbDZu3MjGjRstromMjGT16tVERUVx7NgxkpOTCQ0NxcfHx7zF7Pz582nRogWZmZl51vPLL7/QuXNnPvjgA44ePcqxY8eYPHkyVlZWtGzZkrJlyxIeHs6ECRNYvnw5KSkpbNmyhcDAQPr06ZNnmREREdy8eZPXXnuN5ORkfv75ZyZPnkz9+vXNybphw4YRFxfHhAkTSExMZM6cOcydO9f8zdTy5ctz8eJFtm/fzunTp/Ospyhz4FFFaR/AgAEDuH37NmFhYRw7doyDBw/So0cPypYtm+99jzLSzkcZ6V8jfm//Gbm/YsWKNG7cmDlz5vDiiy+a7/X19WXOnDl4enri5uZmOOZHde3alRUrVrB8+XJOnjzJxIkTOXfuXL73GB27UqVKERUVxY4dOzh27BgDBgwAoGfPnkDBY1cc89PKyoqBAwcSHh5OcnIyKSkpLFu2jKSkJPz9/QHYv38/HTt25McffzRUpoiIiIiIiBSOEsAiIiIiIn+S7t27s2DBAhYsWMBzzz1HSEgIL730EmvWrHnsPSaTia+//prnnnuOLl260KFDB1xdXVm/fj2lSpWiVKlSbNq0CXd3dwIDA6lbty6bNm3iq6++olWrVoZj8/b2JigoiBEjRvDWW28VqX0RERF07doVf39/XF1dWbJkCVOnTgUgKysLgE6dOhEbG8uyZcvw9PSkTZs23Lt3j/j4ePNWwGfOnCEhISHPLa8B/P39iY6OZsmSJTz//PM0bdqUzZs389VXX1G7dm0AZsyYwYABAxg1ahQeHh707t0bX19fli5dmmeZNWrUID4+nkuXLuHj44O3tzcbNmxg3bp15gRv586dmTdvHkuXLsXX15e5c+cyZ84cunfvDjwY35o1axIQEMDChQvzrKcocyAvhW0fgLu7O5s3byYlJYVGjRrxwgsvkJ2dzZYtW3B1dTVct5F2PspI/xqt+/f0n9H7AwICOHPmDH5+fuZjvr6+nD59usirf3O8++67dOrUibCwMJo3b861a9cYM2YMwGNXbxdm7KKiohgyZAienp7s2LGD1atXU7NmTXP78xu74pifTk5OxMXF8csvv/DSSy9Rr149Jk2axD/+8Q9ee+01AC5dusTatWv57bffDJcrIiIiIiIixpmWL19e9D3eRERERET+P39//0J9w1UkPx4eHhw9evRJhyFS7O7fv8+1a9csEreTJk1i9uzZpKamFrncuXPnMnToUDIyMoojTBF5ArZt28bFixefdBgiIiIiUgJoBbCIiIiIiPxbWb9+veHtZkX+00ydOpWaNWuyYsUKTp48yZo1a5g9e7Z5dayIiIiIiIjI71XqSQcgIiIiIiLysODgYIKDg590GCJ/iDFjxnD37l1GjhzJpUuXqFq1Kv3792f8+PFPOjQREREREREpIbQFtIiIiIgUC20BLSIiIlJ02gJaRERERIqLtoAWERERERERERERERERESkhlAAWERERERERERERERERESkhlAAWERERERERERERERERESkhlAAWERERERERERERERERESkhlAAWERERERERERERERERESkhlAAWERERERERERERERERESkhlAAWERERERERERERERERESkhlAAWERERERERERERERERESkhlAAWERERERERERERERERESkhlAAWERERESlmu3btolOnTlSqVAk7OzueeeYZ+vbty48//ljsdR06dAiTycSOHTuKdN6I5ORkTCYTFSpU4N69e3leM2jQIEwmE+PGjStyPcXp9OnTNG/eHDs7Oz788MMnHc4fpjjGVx6YO3cupUqVKvL5kqBLly4EBAQ86TBERERERETkd1ICWERERESkGH3yySf4+vpy4cIFpkyZwsqVKxk0aBDbtm2jWbNmbN269U+Np0qVKsybN49atWr97rLu3bvH//7v/+Y6npGRwfLly7Gzs/vddRSXhQsXcuTIEeLi4ujevfuTDue/VteuXYmJiXnSYRSLl19+mY8++uhJh/GHeuONNxg6dOiTDkNERERERER+p5L982URERERkT/RsWPHGDRoED169GDx4sVYWT34vWX79u0JDw/H39+fN954gyNHjpjP/dHKly9PREREsZTl4+PD4sWL6dKli8XxTZs2kZ6eznPPPVcs9RSHK1euUKNGDfz8/J50KP/VkpKSaNeu3ZMOo1jUr1+f+vXrP+kw/lCBgYFPOgQREREREREpBloBLCIiIiJSTObNm4eVlRVz5szJleB1cnJixYoVxMfHm8+dPXuWkJAQKlSogK2tLZ6ensTGxlrcZ+SaR02ZMgUnJyeSkpLy3CL4iy++oGnTpjg6OuLm5sawYcO4c+dOge37y1/+wsaNG0lNTbU4vmTJEtq2bUt2drbF8dTUVHr37k316tVxcHCgRYsWbNmyxXz+xx9/xGQyER8fT8eOHXFxcaFy5coMGjSIzMxMABITEzGZTCQmJlqUXatWLUaOHJlnnL6+vsydO5fDhw9jMpmIiooCYOfOnfj5+eHg4ICjoyOtWrVi79695vu6du1KSEgI48ePx9HRka+//jrP8jMzMxk/fjy1atXC3t6eqlWrMnDgQG7dumW+pnLlysyePZuRI0dStWpVnJ2deeWVV7h48eJj+9dIuQUpahkJCQnmvqlWrRqjRo2y2O572bJlPP/88zg5OeHi4kKHDh04ceKE+fw///lPKleuzLp166hcuTKRkZGYTCZSUlLo27cv5cqVM19blPl34cIFunfvTrly5ahYsSLdunXj7Nmz5vNGnpOCxj+vvmzXrh3169fn2rVrubaAzsjIYOLEidSpUwd7e3tq167NvHnz8m1HQe0/ceIEZcqUYe7cuebrr1+/bn4uAF599VU6d+7M//zP/1C9enXs7e3x9va2eEaMxObqp7l5NAAAIABJREFU6sqHH35IcHAwdnZ2XL9+PdcW0AWVY+QZhoLHr6B3hYiIiIiIiBSOEsAiIiIiIsVk27ZteHl5Ub58+TzPu7u789RTTwGQnp5OYGAgR48eZc2aNRw6dIjOnTsTGhrKunXrDF/zqJUrVzJx4kS+/PJLvLy8cp1fu3Yt3bt3JyAggOTkZKKjo1m5ciXh4eEFtq9NmzbY29uzbNky87EbN26wbt06QkJCLBLAWVlZBAUFsXv3bmJiYkhKSqJp06YEBQVx6NAhAGxsbAAYNmwYf//73/n1119ZunQpc+fOZdWqVQXG8zjffPMNYWFh1KlTh9TUVIYMGcKxY8cICAigSpUq7Nmzh127duHk5ETr1q3NiajSpUtz4MAB9u/fz/r162nZsmWe5c+cOZNp06bx3nvvceDAAaKjo1m7di1jx441X2NjY8P7779P/fr1OXXqFIcPHyYpKYl33333sXEbKbcgRSnj1KlTBAYG4u7uznfffcfs2bOJjo5mxIgRAOzdu5eePXsSHBzM3r172bBhAzdv3qRz587mMkqXLs3NmzeZPXs2MTExDBgwwNyvc+bM4eTJk0DR5l9GRgbBwcGcOHGC1atXs2bNGlJSUggODiYrK8vQc2Jk/B81dOhQ9u/fz4YNGywS2DkiIyOZPn06Y8aM4eDBgwwfPpyhQ4fy2WefPbYtBbXf3d2dyZMnM27cOC5fvgzAO++8Q5kyZcw/ZLCxseG7777jxIkTHDt2jAsXLuDi4kLnzp3JysoyHFvp0qX55JNP8PT0JD4+njJlyhS6jUae4YLGz8i7QkRERERERApHW0CLiIiIiBSTc+fO0aZNG0PXbtiwgZ9++on9+/fTuHFjACZOnMi3337LnDlz6NChg6FrHpaQkEDv3r35+OOPCQoKyrPeqKgo/P39mTp1KvBgJW1UVBShoaFMnTqVqlWrPjZmOzs7/vrXv7J48WIGDx4MwKpVq7CxsSE4OJjx48ebr928eTNJSUnEx8fz0ksvATBr1iw2b97MrFmzWLBggfnarl27mpOtrVu3pmbNmiQmJtKtWzdDffkoZ2dn7OzssLa2xsXFBXiwOtvR0ZHFixebk1aff/45rq6uLFq0iLFjx2IymThx4gQ7d+6kQoUKjy2/V69etG3bFk9PTwCee+45QkJC2LBhg8V1devWpW/fvgBUrVqVoKCgXCuZi1JufopSxoIFC7C3t+fTTz/F2toagJs3b7Jt2zYAPDw82Lt3L40aNTKvgB02bBgdOnTg8uXLVKpUCZPJxO3btxk6dKh57t29excAR0dHc38WZf7Fx8eTnJzMwYMHadCggTnm9957j/Pnz5OUlFTgc2Jk/B82e/ZsFi1axLZt26hevXqumNLS0vjoo494++236d27t7ktSUlJREVFERYWlmdfG2n/kCFD+PLLL4mMjGTEiBHMmzePTZs2WSRoMzIymDlzJnZ2dtjZ2TF+/Hh8fHzYsmUL3t7ehmIzmUw4ODgwbdq0PGMtTBvze4YLGr+cH0cYeVeIiIiIiIiIMVoBLCIiIiJSTEwmkzm5VJCkpCTs7e1p1KiRxXFvb2+Sk5MNX5Pj9OnTvPrqq4wYMYJ+/frlWWdWVhaJiYm5ktQvvfQS2dnZ/PDDDwXG3bNnT5KSkjhy5AjwYPvnv/71r9jZ2Vlcl5CQgK2tLf7+/uZjVlZWvPjii7lib9iwocXf5cuX5+rVqwXGUhhJSUl4eXlZjI+joyMeHh4W8Xh4eOSb/AVwcXFhw4YNtGjRgmrVquHm5sb8+fO5cuWKxXWFbZfRcosjtoclJiby/PPPm5O/AKGhoebEW9myZc0rNmvWrImbmxt9+vQByFXu41ZNQ9HnX2JiInZ2dubkIUDjxo1ZsWIFVatWNfwsGRl/eLCCfOTIkaxatcqcUH5UcnIy6enpebbl+PHj3Lx5s8jtt7Ky4rPPPuPLL7+kS5cuhIWF0apVK4t76tata/HM5Xyb+Pjx44WKLb/xKkw5+c31gsavMO8KERERERERMUYJYBERERGRYlKtWjV+/vlnQ9empaXh6OiIyWSyOO7k5MSNGzcMX5NjwIABpKamcuHChcfWefv2bTIyMpgwYYJ55aCdnR3u7u4A+d6bo1WrVri5ubFkyRLOnTvHli1b6N69e57tu3fvHvb29hZ1RUdH56rH3t4+1/2Pfk/490pLS6Ns2bK5jj/al87OzgWWNWjQICZNmsRbb73Ftm3bSE5Opn///rmuK2y7jJZbHLE97OrVq3lu/5tj+fLldO3alebNm7NhwwaSk5OZP39+ntfm139FnX8FxWf0WTIy/llZWfTo0YOMjAwuXbqUb50AL7/8skVbclZ85/Wt58K0v169evj4+PDzzz/nuZrY0dHR4u+c/rl27VqhYstvvApTTn5z3cj4GX1XiIiIiIiIiDHaAlpEREREpJj4+fkxc+ZMDh8+bF6R97DDhw+zefNmBg4ciLOzMzdu3CA7O9sicZWWlmZOyhi5JkfPnj0JCAigc+fOtG/fno4dO+aq38HBARsbG4YMGZJnUqly5coFttHa2ppu3brx5ZdfUrlyZSpWrEjr1q1zXZezDfP+/fvzLMOoR5N6Oe7cuWO4jJx4chJaD0tLS+Ppp582XE5mZiYLFy5k3Lhx9OrVy3z8+vXrhYrnjyi3qGW4urrm2Tc5FixYQKtWrZg0aZL5WGH7H4o+/1xdXfN8DnIYfZaMjH92djYff/wxCQkJvPXWW7z44ovUqFEjzzoBYmNjzdttP6xatWq5jhWm/evXr2fHjh20bt2aoUOHsn37dqys/u/324/+ACSnbeXLly9SbHkxUs6ZM2cKLMfI+BXHu0JERERERET+j1YAi4iIiIgUkzfffBMbGxsGDx7MvXv3LM6lpaXRp08fPvnkE+DB9rR3795l3759Ftft3r2bpk2bGr4mR48ePejUqRN9+/alf//+ea6cs7KywsvLi1OnTlGnTh3zv5o1a1K6dGnKly9vqJ09e/bk5MmTfPzxx3Tt2tX8XdiHNWvWjLt375KZmWlRl729fb7fGX5UzqrNa9eumY9dvny50CsDvb29SUxMJD093Xzs2rVr/PTTT7n6Mj+ZmZlkZGRQsWJF87EbN26wbt2637VquTjKLWoZTZo0ISEhwfzNXniwtbefnx9ZWVncvXvXokx48P1cMLZSO+eaos6/Jk2akJ6ezp49e8zHjhw5gre3N4cPHzb8LBkZf2tra7p3705UVBRVqlQhNDSUrKysXDE1atQIW1tbLl++bNGWihUr4urqiq2tba57jLb/xo0bRERE8PbbbxMbG8vhw4eZM2eORVmHDh2y2H4759vSderUKVJseSmucgoav+J6V4iIiIiIiMj/UQJYRERERKSYuLu7M3/+fLZu3YqXlxdz5sxh7dq1zJgxgyZNmnDmzBmWL1+OjY0NQUFB1KtXj/79+7N3715OnjzJmDFjSExMZPjw4QCGrnnUrFmzcHJyol+/fnkm5yIjI1m9ejVRUVEcO3aM5ORkQkND8fHxybWq8HGaNWtGrVq1OHr0aJ7bPwMEBATQpEkTevXqxdatWzl16hTLli2jSZMm/POf/zTYo1C9enVcXFxYvHgxGRkZXLt2jUGDBhX4nd5HDRgwgNu3bxMWFsaxY8c4ePAgPXr0oGzZsubv2RpRunRpGjduzKJFizh58iQHDhygffv2BAcHc+XKFY4ePUpGRkahYiuucotaxhtvvMH9+/fp2bMnu3btYu3atYwaNYq6detiZWVF8+bN2bx5MwkJCZw+fZo333zTvGo2MTHxsauB7ezssLe3Z+vWrSQnJ3P//v0izb/WrVvj6enJ66+/TlxcHDt27CA8PJw7d+7g4eFh6Dkp7Pjb2dkRGxvLnj17mDZtWq7zZcuWJTw8nAkTJrB8+XJSUlLYsmULgYGB+c4nI+0fNWoU9vb2jB49Gjc3N6ZMmcKYMWM4efKkuZzy5csTFhbGkSNHSEpKYtSoUTz33HP4+voWObbiauOjCho/I++K9PR0WrRoQUxMjOF6RURERERE/pspASwiIiIiUoz69OnD7t27qVOnDpMnTyYkJISPPvqIoKAgkpKSzFuplipVik2bNuHu7k5gYCB169Zl06ZNfPXVV7Rq1crwNY9ycnJi8eLFxMXFMXfu3FznO3XqRGxsLMuWLcPT05M2bdpw79494uPjcXJyMtzOHj16UK1aNXx8fPI8b21tzcaNG/H09KRz587UrVuXSZMm8c477zBy5EjD9dja2rJ48WISEhIoV64cLVu25G9/+xu1a9fOc2Xm47i7u7N582ZSUlJo1KgRL7zwAtnZ2WzZsgVXV1fD5QAsXLiQzMxM6tevT0hICIMHD2bKlClUr16dpk2bcvbs2UKVV5zlFqWMatWqsXHjRs6ePUvr1q0ZOHAgISEhzJw5E4CxY8fi7+9PQEAALVu2xM3Njc8++4zAwED69+/PmjVrHhvP6NGjWbFiBQEBAdy6datI889kMvH111/z3HPP0aVLFzp06ICrqyvr16+nVKlShp6Toox/kyZN+Mc//sGECRNISkrKdX7GjBkMGDCAUaNG4eHhQe/evfH19WXp0qWP7Y+C2r9t2zbmz5/PRx99ZF5hGxERQYMGDXj99dfNP+qoX78+wcHBtGvXjhdeeAFbW1s2btxo3mK5KLHlpTjKKWj8jLwrsrKySEhIKPKzJSIiIiIi8t/GtHz58qLvUyYiIiIi8v/5+/sb+oasiIgUXZcuXbh27Rrffvvtkw5FRIrZtm3buHjx4pMOQ0RERERKAK0AFhEREREREREREREREREpIZQAFhEREREREREREREREREpIUo96QBERERERERExJiVK1c+6RBERERERETk35xWAIuIiIiIiIiIiIiIiIiIlBBKAIuIiIiIiIiIiIiIiIiIlBBKAIuIiIiIiIiIiIiIiIiIlBBKAIuIiIiIiIiIiIiIiIiIlBBKAIuIiIiIiIiIiIiIiIiIlBBKAIuIiIiIiIiIiIiIiIiIlBBKAIuIiIiIiIiIiIiIiIiIlBBKAIuIiIiIiIiIiIiIiIiIlBBKAIuIiIiIiIiIiIiIiIiIlBBKAIuIiIiIiIiIiIiIiIiIlBBKAIuIiIiI/AHmzZuHyWSiR48eTzqUYpGZmUmVKlUwmUwcPXo01/m5c+dSqlQp898uLi5Mnjz5seWdPn2a5s2bY2dnx4cffviHxJyfh+N7NPYnpUuXLgQEBBT5/L+7t956iwYNGhi+/vjx45hMJr799ts/MKqSq2rVqowbN+5Jh1Fkv/76KyaTiZUrVz7pUIqsoPegiIiIiIjIH0UJYBERERGRP0BMTAwNGzZkzZo1pKWlPelwHqtr167ExMQUeF1cXBy//fYbHh4eLF68+HfXu3DhQo4cOUJcXBzdu3f/3eX9N3jjjTcYOnTokw7jD1WpUiVOnTr1pMP4wxw+fJhnnnnmSYchf5IPPviA4ODgJx2GiIiIiIj8F1ICWERERESkmP300098//33zJ07FysrK1asWPGkQ3qspKQkQ9fFxMTQpk0bevToQWxsLNnZ2b+r3itXrlCjRg38/PyoXLny7yrrv0VgYCDt27d/0mH8YX755RdSU1OfdBh/KKPPm5QMffr04fnnn3/SYYiIiIiIyH8hJYBFRERERIpZdHQ0derU4cUXX6RTp055rphNT09nzJgxVK1aFUdHR3x9fdm1a5fh8xkZGUycOJE6depgb29P7dq1mTdvnvn8/v37MZlMrF27lpdffhlnZ2dcXFwYOXIkWVlZAJhMJlJSUujbty/lypV7bHuuXbvGunXr6NmzJz179uSXX35hy5YtRe4fX19f5s6dy+HDhzGZTERFRQGwc+dO/Pz8cHBwwNHRkVatWrF3717zfV27diUkJITx48fj6OjI119/nWf5ly9fpnfv3lSpUsXcN7Nnzy5yvAAJCQnm2KpVq8aoUaO4d++e+XxBsRu95mEXL16kRo0a9OzZk+zs7FxbQBc0BwA+/fRTGjRogIODAy4uLnTu3JmzZ88+ts7MzEzGjx9PrVq1sLe3p2rVqgwcOJBbt26ZrwkJCaFbt25ER0fj4eGBk5MTXl5e7Nmzx3zN+fPnCQ4Oxt7eHjc3NyZOnJhv/27ZsoUaNWoA8Oyzz9KxY0fzuVu3btGzZ0+cnJxwdnZm2LBhZGZmms+npqbSu3dvqlevjoODAy1atChwflauXJkPP/yQ8PBwXFxcKF++PCNHjuTy5cu8+uqrVKhQgerVq+daHV/QGJ45c4Zu3bpRuXJl7O3tqVevHp988gkAEydOpE+fPpw+fRqTyZTv1udffPEFTZs2xdHRETc3N4YNG8adO3cs4p89ezYjR46katWqODs788orr3Dx4kWLcqytrXn33Xdxc3PDzs6O4OBgLl++bD5f0LPy448/YjKZiI+Pp2PHjri4uFC5cmUGDRpkMQYXLlyge/fulCtXjooVK9KtWzeLeWZkjObPn0/16tWxt7fHx8eHw4cP5zuGUPAz8MYbb1CjRg1u375tPjZ16lScnJw4ffq0ofekkfhz3mX/+7//S/369WnWrBmQewvoffv20bZtW1xcXChbtiydOnXi9OnT5vPz5s2jUqVKJCQk0Lx5c5ydnalZsyYLFy60aPeiRYuoX7++eY5FR0dbnC9o/oiIiIiISMmnBLCIiIiISDHKzMwkNjaWPn36AA9WgG3fvp2UlBSL60aMGMGnn37KjBkz2Lp1K7Vq1aJt27bm6wo6HxkZyfTp0xkzZgwHDx5k+PDhDB06lM8++wwAGxsbAEaNGsW0adO4evUq0dHRzJo1y5xMyEnQzJkzh5MnTz62TcuWLcPOzo5XX30Vd3d3fH19WbRoUZH76JtvviEsLIw6deqQmprKkCFDOHbsGAEBAVSpUoU9e/awa9cunJycaN26tTnO0qVLc+DAAfbv38/69etp2bJlnuX369ePXbt2sWzZMn744QdGjx7N8OHDWbNmTZHiPXXqFIGBgbi7u/Pdd98xe/ZsoqOjGTFiBICh2I1c87A7d+6Y+zs6OhqTyZTrmoLmwPbt2wkPD2fIkCEcPHiQ9evX8+uvv9KtW7fHtnXmzJlMmzaN9957jwMHDhAdHc3atWsZO3as+RobGxt27NhBQkIC+/bt4/Lly7i4uNCvXz/zNb179+bQoUN88803xMfH8+uvv7Jq1arH1uvj48Py5cuBB0myJUuWmM9NnDiRli1bsmPHDsaNG8eHH35o/i5sVlYWQUFB7N69m5iYGJKSkmjatClBQUEcOnTosfXZ2NjwwQcf0KFDB1JTU4mKiuKDDz4gKCiI0aNH89tvv9GnTx8GDBjA1atXAWNj2LdvX86fP8/XX3/NoUOHGDRoEAMGDCAuLo5Ro0YxePBgqlWrRmpqKhEREXnGtnbtWrp3705AQADJyclER0ezcuVKwsPDLeJ///33qV+/PqdOneLw4cMkJSXx7rvvWpS1fPlyUlNT+eabb1i6dCm7du1iwoQJ5vMFPSs575Fhw4bx97//nV9//ZWlS5cyd+5c83hmZGQQHBzMiRMnWL16NWvWrCElJYXg4GCysrIMjdH27duJiIiga9eu/PDDD4wbN878fOWnoGdg+vTpZGVlMWnSJOBBgv69995j2rRp1KhRw9B70kj8pUuXBh7M1ZEjR5rrf9iZM2d4+eWXsba2Jj4+nu+++47ffvuNgIAA849JbGxsuH79OpMmTWLVqlVcu3aN3r17ExERwblz5wBYtWoVYWFhvPbaa+zYsYP+/fsTFhZmfiaMzB8RERERESn5lAAWERERESlGcXFxXLx4kdDQUABatWpF9erVLRJaN27c4NNPP2X8+PF069YNLy8vPvnkE9q2bcvx48cLPJ+WlsZHH31EZGQkvXv3platWkRERNC7d2/zatocoaGhNGvWDCsrK1555RVefvll84rkihUrAuDo6EiFChUe26aYmBhCQkKws7MD4LXXXmPVqlUWq+oKw9nZGTs7O6ytrXFxccHe3p558+bh6OjI4sWLadiwIQ0bNuTzzz/n/v375mSzyWTixIkTLFq0CD8/P3P8j/rwww/ZvHkzfn5+1K5dm379+tGoUSPi4uKKFO+CBQuwt7fn008/pUWLFvz1r39lxowZ5qSNkdiNXJMjOzub0NBQbt++zVdffWVOLj3MyBw4dOgQdnZ2vPbaa7i7u9OsWTO+/PLLfFee9urVi8TEREJCQnjuuecIDAwkJCQkV9/dunWLmTNnUqZMGezt7enVqxc//vgjt2/f5ty5c/zrX/9i9OjRtGrVirp16zJnzhzKli372HptbGzM58uXL4+Tk5P5XJs2bXjrrbdo1KgRkZGRVK1alYSEBAA2b95MUlISCxYsMNc1a9YsatSowaxZsx5bH0CTJk1o3749JpPJ/B3qli1b0rJlS/OxO3fucPToUcDYGB48eJC//OUvNG3aFHd3d95880127txJo0aNcHBwwN7eHisrK1xcXMzP06OioqLw9/dn6tSp1KpVi6CgIKKiovj8888tfixQt25d+vbtS6lSpahatSpBQUEkJiZalOXs7MycOXPw8vKiU6dOvPLKK+a+A+PPSteuXc0/uGjdujU1a9Y01xUfH09ycjILFy6kVatWvPjiiyxYsAAPDw/Onz9vaIyWLFmCm5sb77//PrVr1yYoKIjhw4fnO35GnoGyZcsyf/58ZsyYwdGjRxk+fDje3t68+eabFmXl9540En/ODzRefvll+vbti6enZ654P/roI0wmE0uXLsXT0xNvb29iY2M5efKkOXkLD3Z/ePvtt6latSomk4mwsDDu37/PDz/8AMCMGTPo2LEjkZGReHl5MWzYMCIjI80JYqPzR0RERERESjYlgEVEREREilFMTAytWrWicuXKZGRkkJmZSc+ePS0SwIcOHeLu3bs0bdrUfKx06dKsXLmSwMDAAs8nJyeTnp5OmzZtLOp+6aWXOH78ODdv3jQfe/T7k/Xr1+f48eOG25PzPeOePXuSkZFBRkYGnTp1Iisri9WrVxsupyBJSUl4eXmZV+TBg8S0h4cHycnJ5mMeHh75Jqtz7ps1axaNGjXi6aefxs3NjYMHD3LlypUixZaYmMjzzz+PtbW1+VhoaCgLFiwwHLvR9gGMHj2anTt3smHDBpydnfOMycgcaNWqFSaTCT8/PxYsWMCpU6eoXLmyeXvavLi4uLBhwwZatGhBtWrVcHNzY/78+bn6LmeL6Bzly5cH4OrVq/z4448AFvWYTKZ8683PCy+8YPF3pUqVuHHjBvBga25bW1v8/f3N562srHjxxRdz9eujPDw8zP+dk3yuU6dOrmPXr18HjI3hK6+8wtSpUxkxYgT/+te/SE9Pp3nz5oa/c52VlUViYmKe45qdnW1OAgI0bNjQ4pry5cubVyvnyK/vcuI38qzkV1diYiJ2dnY0aNDAfL5x48asWLHCnKwvaIyOHDmCl5eXxTPWvHnzx/TSA0bfg8HBwXTr1o0OHTqwfv16Pvvss1wr6vN7TxZmjj1uV4Kccpo1a2ax3X61atWoWbNmrnIe7u+Hny3AvAL5YdOmTWPIkCGFmj8iIiIiIlKylXrSAYiIiIiIlBQ538q9e/euRZIox86dO/Hx8TH/H/llypTJs5yCzqelpQEPVps9nMjI+Wblw98BdXR0tLi3TJkyXLt2zWiTzN+W9PPzy3Vu0aJF9OrVy3BZ+UlLS8PNzS3XcScnJ4uE1eMSojnu379P27ZtycjIYNasWdSpU4dSpUrx6quvFjm2q1evUr169d8Vu9H2ff/992zZsgVbW9t8V1gbmQMeHh7s3r2b999/n9GjRxMeHk7z5s2ZPXv2Y5OxgwYNIjY2lnnz5uHj44O9vT3Tpk1j2bJlFtc9nPx9WHZ2trk9j17z6Fw06tHnwGQykZ2dDTzoh3v37uWqKyMjI8/+fpitrW2uY3mtyn24roLGcN68eXh6ehIbG8vMmTNxcnLizTffZPLkyZQqVfD//L59+zYZGRlMmDAh13bO8OBbuznyGoOcWHPk13eFeVbyq+vq1auPfVeBsTG6ceMGTz31lMX5guaLkWegVq1awINvAcfGxhIcHIy7u3uusvJ7TxZmjuX3fkpLS2P//v255lh6errFuMLj+/v27dvcu3fvsf1dmPkjIiIiIiIlmxLAIiIiIiLFZNmyZVhbW7Nnzx6LlWwA4eHhLF68GB8fH1xdXYH/S2A8qqDzOUmG2NjYPLcarVatGj///DOARXIxp8ycFWUFyfme8eDBg81bWudITExk4MCBnDt3jipVqhgqLz/Ozs55tjctLY2nn37acDkJCQkcOHCAbdu28eKLL5qPp6am8uyzzxYpNldX18eOBRiL3Wj77OzsiI+PJyIigp49e7Jr1648f0xgZA7Ag5WEsbGxZGZmsmPHDsaOHUu7du04e/ZsrgRoZmYmCxcuZNy4cRaJ/ZwVsEblJKceva8wPzwwKmc78f379+c69+gzWBx1FTSGNjY2DBkyhCFDhnDp0iUWL17M2LFjqVSpUoFbGgM4ODiYywgLC8t13uhKYiOK61lxdXXlxo0bZGdn5/mtaiNjVKZMmULPF6PPQFZWFpGRkQQGBrJ582Y2bdpE27ZtLa7N7z1ZXHPM2dkZX19f5s+fn+vcw1ue58fBwQEHB4fHvo/+zPkjIiIiIiL/3rQFtIiIiIhIMYmJiaF9+/Y0b94cb29vi39/+9vf+PLLL7l79y4eHh44ODiwdetW871ZWVn4+/uzePHiAs83atQIW1tbLl++TJ06dcz/KlasiKurq0Vi7+Ey4EHi9uFtbiH3qsEccXFxnD9/noiIiFzt6devH2XLliU2NrY4ug5vb28SExNJT083H7t27Ro//fRTru1O83P37l0Ai+8D7969m5SUlMe2syBNmjQhISHBXDbUHNb1AAAgAElEQVQ8+Gapn58fWVlZhmI32r6GDRvi5eVFbGwshw8fZuLEiXnGZGQOJCQksHv3buBBosrf359Jkybx66+/WqwSz5GZmUlGRoZF3924cYN169YVqu9ytlZ+eFvb+/fvs2XLFkP3F6auZs2acffuXTIzMy36wd7enqpVqxoux4iCxvD69evmbwLDg2RbZGQkLVu25ODBg+Z78muflZUVXl5enDp1yqI9NWvWpHTp0oZ/vGFEcT0rTZo0IT09nT179piPHTlyBG9vbw4fPmxojDw8PDhw4IB59S48+PZufoy+B2fNmsXPP//MsmXLGD58OOHh4bkSvvm9J4trjjVr1oyff/4Zd3d3i3KsrKxyrX7OT5MmTXLFO3ToUIYMGfKnzh8REREREfn3pgSwiIiIiEgxyPlWbteuXfM8361bN/MW0WXLlqVfv35MmTKFJUuWkJSUREREBImJifj4+Bg6Hx4ezoQJE1i+fDkpKSls2bKFwMBA+vTpY1HvunXr+OKLL0hJSWHmzJns3r2bvn37Ag9Wm9rb27N161aSk5PNiascMTExNGjQgLp16+ZqT+nSpXn11VdZtGhRsfTfgAEDuH37NmFhYRw7doyDBw/So0cPypYtm6tN+WnUqBF2dnbMnj2bCxcuEBcXx1tvvUWbNm04evQoly9fLnRsb7zxBvfv3zevyF27di2jRo2ibt26WFlZGYq9sO3z8PDg/fffZ9q0aezYsSPXeSNzYOPGjbz66qusWrWKkydPkpyczOzZs3nmmWfy3NK6dOnSNG7cmEWLFnHy5EkOHDhA+/btCQ4O5sqVKxw9epSMjIwC+6tGjRq0bNmSqVOnEhcXR3JyMuHh4ZQuXTrf+3KSU9988w1HjhwpsB6AgIAAmjRpQq9evdi6dSunTp1i2bJlNGnShH/+85+GyjCqoDG0srJi4MCBhIeHk5ycTEpKCsuWLSMpKcn8/djy5ctz8eJFtm/fzunTp/OsJzIyktWrVxMVFcWxY8dITk4mNDQUHx+fXInL36O4npXWrVvj6enJ66+/TlxcHDt27CA8PJw7d+7g4eFhaIy6d+/OpUuXGD58OAcPHmT16tUFvluMPAMpKSmMGzeO6dOnU7FiRcaPH4+VlRWjRo2yKCu/92RxzbGIiAhu3rzJa6+9RnJyMj///DOTJ0+mfv36fP/994bLGTZsGHFxcUyYMIHExETmzJnD3LlzadGiBWBs/uzZs4cWLVpw4MABw/WKiIiIiMh/FiWARURERESKQUxMDGXKlCEoKCjP88888wze3t4sXrwYgOnTp9OvXz8iIyPx8/Pj4MGDrF+/3vx9yoLOz5gxgwEDBjBq1Cg8PDzo3bs3vr6+LF261KLeSZMmERsbS4MGDXjvvfeYPHmyxfa+o0ePZsWKFQQEBHDr1i3z8Zxk9eMS2gBdu3blxx9/JDExsWid9hB3d3c2b95MSkoKjRo14oUXXiA7O5stW7aYt8Q2wtXVlejoaDZt2oS7uzuTJ08mJiaGYcOGkZKSQqtWrQodW7Vq1di4cSNnz56ldevWDBw4kJCQEGbOnGk49qK0b+DAgQQEBBAaGprnlq8FzYGxY8fSv39/Ro4cSd26dWnTpg3Z2dmsX78+z616ARYuXEhmZib169cnJCSEwYMHM2XKFKpXr07Tpk05e/asoT5bunQpHh4edOjQgbZt21K9enVCQ0MtVng+ytvbm6CgIEaMGMFbb71lqB5ra2s2btyIp6cnnTt3pm7dukyaNIl33nmHkSNHGirDqILG0MnJibi4OH755Rdeeukl6tWrx6RJk/jHP/7Ba6+9BjxIdNasWZOAgAAWLlyYZz2dOnXi/7F35/ExXf8fx1+TRHaJJSS1xNrErojYxa6hVGurr6VUKb72EkpVf6VtaC21trVrUK29LWqLrQgJQbS1r7WFIpZmk/n9Mc0wksiEVDTf9/PxmEfm3nvu2e6ZeVQ/c84JCQlhyZIllC9fniZNmhAXF0doaKjVSwVbI7M+KwaDgR9//JEXX3yRNm3a0LJlS/Lly8fatWuxs7Oz6hk1adKESZMm8f3331O1alU+//xzZs2aBfDYMZPeZ6BHjx5UqVLF3P/Ozs5MmzaNr776itDQUHM+j/uezKwxVqRIEUJDQ7ly5Qq1atXCz8+PdevWsWbNGnPw1hqtW7dm5syZLF68mNq1azNt2jSmTp1Khw4dAOvGz82bNwkLC3vs0vYiIiIiIvLvZli6dOmTrYMmIiIiIvKQgIAA7S/4HImKiqJ8+fLs2LGD2rVrZ3V1RESeO/qelOfN9u3bU12iX0REREQkozQDWEREREREREREREREREQkm1AAWEREREREREREREREREQkm7DL6gqIiIiIiEjmK1euHEajdnsREUmLvidFRERERCS70gxgEREREREREREREREREZFsQgFgEREREREREREREREREZFsQgFgEREREREREREREREREZFsQgFgEREREREREREREREREZFsQgFgEREREREREREREREREZFsQgFgEREREREREREREREREZFsQgFgEREREREREREREREREZFsQgFgEREREREREREREREREZFsQgFgEREREREREREREREREZFsQgFgEREREZFMMnnyZAwGQ5ovDw+PrK5iutq0aUOjRo2sTh8VFYXBYGDnzp2PTXfnzh3Gjh1LxYoVcXFxwdXVlcqVKzN+/HhiY2MzXE8PDw/Gjh2b4fuSnT17lmrVquHo6MjkyZOfOB9rzJ49G4PBQGJi4j9azvPmaZ+RNawdf/9W2b19IiIiIiIi8s+wy+oKiIiIiIhkN6tWrcLFxSXFeXt7+yyozeO1bduW5s2b07VrVwDeeecd4uLiMrWMq1evUr9+fc6dO0efPn2oWbMmSUlJbN26ldGjR7Ns2TI2bdqEm5tbppb7OHPnzuXXX39lw4YN+Pr6Zmre06dPZ9++fcyfPz9T832ePC9tLFiwIDNnzqRkyZJZWo9/SnZvn4iIiIiIiPwzFAAWEREREclkAQEB5MqVK6urYZWIiAiaN29uPm7cuHGml9GnTx/++OMP9u7dS+nSpc3nX3vtNTp27EjdunV59913mTVrVqaXnZY///yTIkWKULdu3UzPOyIiItPzfN48L23MnTs3vXr1yupq/GOye/tERERERETkn6EloEVEREREssCOHTuoW7cuuXLlImfOnNSuXZvt27dbfT0xMZEPP/yQUqVK4eTkhI+PDzNnzjRf/+233zAYDISGhtKqVSs8PDzw9PSkX79+3L9/HwCDwcDp06fp1q2bOWD96BLQ4eHhNG7cGA8PD1xdXfH392fTpk1Wt/P8+fOsXLmSoKAgi+BvMn9/f/r06cOCBQu4fv06AJ6enkyZMoUhQ4ZQqFAh3N3dadGiBZcvX05x/+bNmzEYDOzatcvi/MGDBzEYDPz8888p7qlduzbTpk3jyJEjGAwGgoODAfjll1+oW7cuzs7OuLq60qBBA/bt22e+r23btrRv354PPvgAV1dXfvzxxxR516tXj3nz5rFgwQIMBgORkZHma8eOHaNWrVo4OjpSoECBFLNn9+/fT9OmTfHw8MDNzY3XX3+ds2fPptm3yc94w4YNNGzYEHd3d7y9vVm8eDF79+7F398fNzc3XnrpJYt2AMyZM4cyZcrg4OBA3rx56dixI1euXDFff9z4e1wbH5WYmMigQYPw8PDAxcWF1157zfycwbrxNXv2bMqVK4ezszMeHh60bt2aCxcuAKkvkbxgwQLKli2Lk5MTZcqUYd68eWnWDyA6OpouXbrg7e2Ns7Mz1atXZ+vWrQAkJCRQoUIF2rRpY3HPyy+/TOXKlUlMTGTSpEnkzZuXDRs2ULZsWVxdXSlWrBgLFy60uCe95zt9+nQ8PT1Zs2YNnp6eDB06NNX2ffvtt1StWhVXV1e8vLwYNGgQf/31l/l6+/btadeuHfPmzcPX15ecOXNSpUoV9uzZY04THx/PiBEjKFSoEK6urtSuXdviM5Te94uIiIiIiIg83xQAFhERERHJZHFxccTGxqZ4JQde7969yyuvvEKZMmXYvXs3YWFhVKhQgcDAQG7cuJHudYChQ4fy2WefMWLECA4fPszgwYMZOHAgc+bMASBHjhwADBo0iGHDhnHt2jUWL17MtGnTWL58OYA5iDZ16lROnTqVoh2xsbG8/PLLODo6smnTJvbu3UuNGjVo1aoVf/zxh1V9sXPnTpKSkh47s7hJkyYkJCSwe/duc93Hjx9P2bJlOXPmDEeOHCEiIoKPPvooxb0NGjSgePHifPPNNxbnly1bRsGCBVMt96effqJ79+6UKlWK6OhoBgwYwLFjx2jUqBEFCxZkz5497Nq1i5w5c9KwYUNzP9nb23Po0CEOHDjA2rVrqVGjRoq8V69eTZUqVXjjjTeIjo6mfPnyANjZ2dG3b1+CgoLYtWsX9evXp0ePHuZ+PH/+PPXr18fW1pbQ0FC2bNnC9evXadSoUZpLcic/41GjRjF9+nT+/PNP6tSpQ69evRg1ahSrVq0iOjqavHnz0q9fP/N933zzDT169KBz584cPnyYFStWsH//fpo3b47RaEx3/KXVxtTMnTuX+/fvs379eubNm8eWLVvo3bs3YN342rFjBz179mTAgAEcPnyYtWvXcu3aNdq1a5dqecuXL6d79+507dqVnTt30qNHD7p3786yZctSTZ+UlERgYCC7d+9m/vz5REREULVqVQIDA4mKiiJHjhzMnTuXVatWmX9MsGLFCrZs2cK8efOws7MjR44c3Lp1iwkTJrBp0yauX79O586d6datG0ePHrX6+drb23Pnzh2mTJnC/Pnz6dOnT6rjq0OHDjRq1IjIyEjmzZvHsmXL6Nmzp8W42LlzJ2FhYezfv5+rV6/i4eHBW2+9ZU7z7rvvMnv2bCZOnMi2bdsoWbIkTZs25fTp00D63y8iIiIiIiLyfFMAWEREREQkk3l5eeHk5JTiNWnSJADOnTtHTEwMnTp1onTp0pQpU4YpU6awdu1aHBwc0r0eExPDjBkzGDp0KF26dKFkyZL06tWLLl26mGezJmvbtq05UNmwYUOKFy9OeHg4AHnz5gXA1dWVPHnypGhHcrBq/vz5vPTSS5QpU4axY8dy9+5dfvnlF6v6IjmQV7Ro0TTTFCtWzCItQOnSpenWrRt2dnYUKlSIwMBAc70fZjAYeOutt1i6dCnx8fHm88uXL6dLly7Y2KT8J4+7uzuOjo7Y2tri4eGBk5MTM2fOxNXVlYULF1KhQgUqVKjAokWLSEhIYMGCBeayTp48yYIFC6hbt665/x7N287ODgcHBzw8PLC1tQVMMyqHDh3Kq6++SuXKlfnoo49ITEw0L6U8Y8YMDAYDixcvpnz58vj5+RESEsKpU6fSDF4ma9++PaVKlcLW1pb27dtz+/ZtevToQYECBXBwcKB169YcPHjQnH7ixIm0bNmS9957Dx8fHwICApg6dSoRERHs2rUr3fGXVhtT4+XlxZQpU/Dz86Ndu3b897//ZdWqVdy7d8+q8RUVFYWjoyNdu3alRIkS+Pv789133zF58uRUy5s4cSKtWrVi6NChVKlShUGDBjF06NA0f7CwceNGIiIimDVrFg0aNKB06dJ88cUXFClShC+++AIAPz8/Bg8eTL9+/bh58yaDBw/mvffeo2LFiuZ87t+/z6hRo3jhhRdwcHDg/fffx9nZmUWLFln9fA0GA/fu3WPgwIEEBgaaPxcPCw4OJiAggE8//ZSSJUsSGBhIcHAwixYtMv9QAUw/Mpk0aRIuLi44OTnRqVMnfvvtN+7du8ft27eZPXs2H3zwAe3ataNKlSp8/fXXNG3alBMnTmTo+0VERERERESeTwoAi4iIiIhkso0bN7J79+4Ur44dOwLg4+ODr68vHTt2JDg4mP3792Nra0tAQADOzs7pXo+MjCQ+Pp4mTZpYlFuvXj1OnDjBnTt3zOcqVKhgkSZ37tzmWcTpyZEjB/Hx8fTt25fSpUvzwgsv8OKLLwKmPXStkRyATUhISDNNUlKSRdqM1rtbt27ExMTw008/AXDkyBF+++03unbtalUdwbSnbZUqVcyzasEUGPf19bVY4tjX1zfVYLk1atasaX6fP39+AG7fvg1AWFgY/v7+FntHFy5cmOLFiz92ieXkOiVzc3MDoFSpUhbnYmNjiYuLIyEhgUOHDlG9enWLPPz8/ACIjIxMd/xlRJ06dSyOa9SoQUJCAidPnrRqfDVo0ACDwUDdunWZNWsWZ86cwdPTE39//1TLS57B+7Bx48YxYMCAVNOHhYXh4OBAQECA+ZyNjQ116tSx6PePPvoIg8FAtWrVcHNzY+TIkSnyqly5svm9vb09JUuW5MSJE+ZyrH2+qc0sB9PnJDw8PNXPvdFotAjylyxZEicnJ/Nx7ty5Abhx4wZRUVHExsZa9JO9vT3Lli2jcePGGfp+ERERERERkeeTAsAiIiIiIpnMz8+P6tWrp3i98MILgGlm7Y4dO2jXrh2zZs2iSpUqFC1a1LyMcXrXY2JiAKhfvz6Ojo7mV7du3QAs9sp9OAiUzGg0WtWO48eP06BBA2JjYwkJCWH//v3mGavWKly4MIB5adnUJO+D6u3tbT6XkXoXKFCAwMBA856ry5Yto2bNmvj4+Fhdz5iYGHPw9GE5c+Y0B2nBNMP3Sbm4uJjfGwwG4EGbYmJi2Lx5s8XzdHR05OTJk1y6dOmx+To4OKQ45+jomOJc8vLOSUlJKdqaM2dOwBSQTm/8ZcSj/ZXcB3fv3rVqfPn6+rJ7925KlCjB8OHDKVasGNWrV2fv3r0pyrp37x5xcXEW/ZyemJgY4uLicHJysuj3efPmWfS7o6MjnTt35tixY3Tu3Bl7e3uLfAwGQ4rguIuLCzdv3jSXY+3zTWuM3bt3j8TEREaPHm2RR4kSJQAs8knt8wOmMZD8Q4q0+ikj3y8iIiIiIiLyfLLL6gqIiIiIiPwvypcvH5999hmfffYZv/76KxMmTKBLly6UKVOGKlWqPPZ6coAoJCQk1f1XCxcuzPnz55+6jkuXLiUxMZElS5aYA4rnzp3LUB516tTB1taWJUuWUKtWrVTTbNy4EScnpzRnPlrj7bffNi9/vGzZMvr375+h+93d3c2Br4fFxMRQoECBJ65XRsqvXbs2X331VYprycHZzODi4oKtrW2KtiYfJ4+t9Mante7evWtxnDx71NXV1erxVaFCBUJCQrh//z47d+5k5MiRNG/e3GLJYwBnZ2ecnZ1TfY5pSV4O/MCBAymuPby09cWLF/n8889p1qwZn376KZ07d8bLy8t8PTm4/nBQNSYmhiJFipjLedrn6+zsTI4cORgwYADdu3dPcd3T09OqfPLly2euX2qs+X4RERERERGR55tmAIuIiIiIPGOnT59m9erV5uMyZcrw5ZdfYmtrS1RUVLrXK1asiIODA1evXqVUqVLmV968ecmXL1+qM0IfJ62ZtbGxsbi4uFjMJg0JCXnsPY/y8vKiQ4cOzJ49m/3796e4Hh4ezowZM3jnnXdSnYFrrebNm5MnTx6Cg4M5efIk7du3z9D9fn5+hIeHW+wjfPPmTX7//fcUSwpbw9r+Sebv78/x48cpUaKExTO1sbExzxzPDDly5KBixYop9nDevXs3AFWrVk13/CWzpo07d+60ON63bx8ODg6UKFHCqvEVFhZmrlvyMtRjxozh2rVrqc5ErVSpEtu2bbM4N3DgwDSXgPb39yc2Npb79+9b9LuTkxOFChUyp+vTpw+VKlXihx9+oFSpUvTu3TtFXg+Xe+fOHY4ePWpeijsznq+NjQ1VqlThzJkzFnkUL14ce3t78zLP6fH19cXZ2dmivklJSQQEBLBw4cJM/34RERERERGRZ08BYBERERGRTLZ582bWr1+f6uvmzZucO3eO1q1bM2HCBI4ePcqxY8cYO3YsNjY21KhRI93rbm5u9OzZk9GjR7N06VJOnz7N1q1bady4MW+++abV9XR0dMTJyYlt27YRGRmZYp/eatWqER0dbV4Od8aMGezdu5f8+fNz8OBBq2daTp48mVKlSlGnTh2CgoJYvXo1q1atYvDgwdStW5eqVavy8ccfZ6iPH2VnZ8ebb77J+PHjef311zMcTO7Tpw/37t2je/fuHDt2jMOHD/Of//wHNze3DPUpmPZbPXDgAJGRkVy/ft2qe3r16sWdO3fo2rUrkZGRHD9+nLFjx1K2bNlUlzt+GkOGDOGnn35i4sSJnD17ltDQUAYMGEBAQAB+fn7pjr+MtPH06dOMHTuWU6dOsXHjRr788kvatGmDk5OTVeNr/fr1vPrqqyxfvpxTp04RGRnJlClTKFq0qMWS4ckGDRrEhg0bGD16NOHh4UydOpVp06al2PM4WaNGjahUqRKdOnVi27ZtnDlzhiVLllCpUiWmT58OmGbCr1u3jpkzZ2JjY8OXX37Jjz/+yNKlS8352NnZERwczM6dOzl27Bh9+vQBMO/7nVnPd+jQoaxYsYLg4GCOHTtGZGQknTt3platWhZLlT+Om5sbb731Fp988gnffPMNERER9OrVi/DwcGrVqmX198uMGTOoXbu21XUXERERERGRZ0dLQIuIiIiIZLI2bdqkeW3Hjh0EBAQwb948JkyYwAcffICdnR1ly5Zl5cqV+Pj44OPj89jrABMnTiRXrlwEBQVx6dIlvLy8aNmyJZ988kmG6jp8+HDGjRvHjz/+yIkTJyyutWjRgqFDhxIUFMSgQYNo1qwZCxYsYNKkSYwbNw5bW9tUZ0I+Km/evOzatYvJkyezdOlSc2CtdOnSfPLJJ/Tp0yfFnqpP4vXXXyc4OJi33norw/eWKFGCjRs3MmzYMCpWrIidnR21a9dm69at5iVzrdW/f386d+5M7dq1Wb58uVX3FClShNDQUIYNG0atWrWws7OjXLlyrFmzJs3g5ZPq0KED9+7d4/PPP2f48OHkypWLV199lc8++wwg3fGZWhubNm2aopyEhARGjBjB6dOnqVq1KrGxsTRr1oxp06YB1o2vL774gvj4eIYMGcLFixdxd3enZs2arF271ryP8sNat27NzJkzmTBhAuPGjaNIkSJMnTqVDh06pNoXtra2rF+/niFDhtC6dWvu3r1LsWLFGDVqFIMGDeL69ev079+foKAg82zeChUqMHDgQPr160fDhg3NeQUHB9OvXz+ioqIoWLAgK1asoHjx4kDmPd/XX3+dkJAQgoODGT16tLk/QkNDM7RU+GeffYaNjQ1Dhw7l9u3bVKhQgbVr15r3E7bm++XcuXPs2bPH6jJFRERERETk2TEsXbo0Y2uTiYiIiIikIiAgwOo9KEX+CcOGDeOnn36yWKZY5J82bdo0Bg4cSGJiYlZXRUT+5bZv357q8vYiIiIiIhmlGcAiIiIiIvKvdvToUTZu3MiECRNYuXJlVldHRERERERERCRLKQAsIiIiIiL/an5+fri7uzNp0iRatGiR1dUREREREREREclSCgCLiIiIiMi/2u3bt7O6CvI/rG/fvvTt2zerqyEiIiIiIiJiZpPVFRARERERERERERERERERkcyhALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiISCbZtGkTBoOBPXv2ZHVVsty1a9cwGAwsW7YszTQeHh6MHTs2U8vt1KkTtWvXztQ802JNGzPDtGnTsLOzMx+3adOGRo0aWX3/9evXeeedd8ifPz8uLi5UrFiR6dOnc//+/TTvadWqFQaDweKVI0cOXnzxRQYPHsytW7eeqk3WelZ9nFEnT51h5qz5DB4+mj4DhzH8g4+Z/823XLp8JdPL+uPiZXr2HcKJk6ef6Lo1zl+4SM++QyxevfsHMeqjcaxY/RNxcXEZyu/L2QuYOOXLTKufiIiIiIiIZIxd+klEREREROSf1LZtW5o3b07Xrl2zuiocOXKE5s2bc+bMmX+8rAkTJlC+fPmnyuN56jtrPEn/1q9fnxkzZjxReQkJCTRs2JDo6GiGDx9OoUKF2L59O/379+fGjRu8//77ad5bokQJZs+ebT6Oi4sjIiKCcePGcfjwYTZs2IDBYHiiev2bbf9lDyFLllGsqDevtWyGu1tOLl+JZuv2X4g4cIh+vbvj82KJZ1af3Lnc6di+NfnyeTx1Xq++8jIlSxQDICE+gTPnzrN+YygXL12hb6+3srx+IiIiIiIiYh0FgEVEREREslhERATNmzfP6moApro8K2+++eZT5/E89Z01nqR/y5YtS9myZZ+ovOXLl3Pw4EEOHTpkDra3a9eOhIQEpk2b9tgAsKurK/Xq1bM417RpU7y8vOjevTu7du2iVq1aT1Svf6srV6NZ8t1KqvlV5q03O5gD4BXKQd1a1fls8nS+WbKMj0YFPbPguLOzEwF1amRKXgVe8ML3oeB1ubKlcHF2Ysn3q7gafY38TxDEzcz6iYiIiIiIiHW0BLSIiIiIyD/kt99+w2AwEBoaSqtWrfDw8MDT05N+/fqZl981GAycPn2abt26kStXLgASExP58MMPKVWqFE5OTvj4+DBz5kyLvPPly8fkyZNp1qwZjo6O5iV5v/32W6pWrYqrqyteXl4MGjSIv/76y3zf+fPnadeuHZ6enjg5OVGmTBm+/vprAD788EPefPNNzp49i8FgYPLkyQBER0fTpUsXvL29cXZ2pnr16mzdutWiPl999RXe3t44OTlRq1Ytjhw5km7/PLwE9MyZM8mfPz9hYWFUq1YNd3d3ihcvzty5c9O8P7W+A7Czs2PlytdJdkAAACAASURBVJX4+vri4OBA+fLlCQ8Pt7g3vX5KjTVtfFy+afVveHg4jRs3xsPDA1dXV/z9/dm0aZM5z0eXgH7U7NmzKVeuHM7Oznh4eNC6dWsuXLgAgJeXF1OnTk0x07pSpUpcuXKF+Pj4x7Y5NdWrVwdMYynZ/v37adq0KR4eHri5ufH6669z9uxZi/uWLFlC5cqVyZkzJx4eHrRs2ZKTJ09apHmScXThwgXat29Pnjx5zM87JCTEfD08PByDwZBiDJQsWZIhQ4YAMH36dDw9PVmzZg2enp4MHTo01bK27tiFwWCgQ7vXUgR4HR0d6PX2mwwZ0Nt8LTExkWUrfyDo/TH07h/E8FFjWfnDOu4nJZnvu3HzFl/P/YaBQ0fRe8AwPvz4c/bsffwPBdb+vJl+g0dw9tyFVJdY3hdxgI/HT6bv4BG8+96HLF2+mviEhHT7MjVFi3gDcDX6mvnczl1hfDBmPL0HDGNg0Chmz19EzO3bqd6fWv12hYUzeuxn9Bk4nA/GjOeX3fsAWP3jevoPGZmirptDd9Bn4HDupfMZFRERERERERMFgEVERERE/iE5cuQAYNCgQQwbNoxr166xePFipk2bxvLlywHMgbqpU6dy6tQpAIYOHcpnn33GiBEjOHz4MIMHD2bgwIHMmTPHnLe9vT1ff/015cuXJzQ0FBcXF1avXk2HDh1o1KgRkZGRzJs3j2XLltGzZ0/zfd26dePixYv8+OOPREVF0a9fP/r06cOGDRsICgqif//+FC5cmOjoaHr16kVSUhKBgYHs3r2b+fPnExERQdWqVQkMDCQqKgqAHTt20KtXL9q2bcvBgwd5//33effddzPcV7du3WLMmDEsX76cmzdv0qVLF3r16sUff/yR6j2p9R3AuXPn+PLLL5kzZw6bN2/GxsaGLl26mK9b00+PsqaN6eWbWv/Gxsby8ssv4+joyKZNm9i7dy81atSgVatWabb70Xr17NmTAQMGcPjwYdauXcu1a9do164dAPXq1aNv374p7gsNDaVMmTLY29unW8ajjh07BoC3tykweP78eerXr4+trS2hoaFs2bKF69ev06hRI/Pesfv27aNjx440a9aMffv2sW7dOu7cuUPr1q0z1MePio+Pp3Hjxhw9epRVq1YRFRVF69at6dy5M2vWrLG6Tfb29ty5c4cpU6Ywf/58+vTpk2q64ydOUcS7EM7OTqlez+eRF3d3N/PxoqXL2bl7L21fa8FHHwzjtZbN2LJ1J8tX/ghAYuJ9Jk39istXrtLnnW58OHIolV8qz9yFSzh4OPXgd8SBQ/zw08+8070LRbwLpbgeeSiKWfMWUdrXhw/eG0y3Tm8QceAQ3yz+3ur+eNi169cByP33jyz27I1g4eLvqeFfhQ9HDqFPj66cO/8HU2bMwWg0ppvf/shDLAhZSs3qVRk2uC91alVnwaKlRBw4RO0a/sTGxnHwkGXbIw4colLFcjg7pd7vIiIiIiIiYklLQIuIiIiI/MPatm1LjRqmJVAbNmxI8eLFCQ8Pp127duTNmxcwLbebJ08eYmJimDFjBu+99545aFmyZEkiIiIIDg6me/fugGn2q7OzM+PGjTOXExwcTEBAAJ9++qn5vuDgYDp37synn35KoUKFOHz4MP369aNq1aoA9O7dm8qVK1O0aFGcnZ1xcnLCxsYGDw/TUq8///wzERERhIaGmpcD/uKLL9i4cSNffPEFs2bN4ptvvsHLy4vx48dja2uLj48PN27coGPHjhnqp/j4eN577z0KFTIFtbp3787//d//cfDgQQoWLJgi/aN9l+zy5cvs27fPfL1///68/fbbxMTE4ObmZlU/PcqaNlqT76P9m5CQQGhoKAUKFDDXd+zYsUyZMoVffvnFHMhNS1RUFI6OjnTt2pUcOXJQokQJvvvuuxSzbx82duxYVqxYwY8//vjYvME0gzVZfHw84eHhvPvuu5QrV848pmfMmIHBYGDx4sXmmdghISEULVqUZcuW0bFjR3x9fdm3bx8VK1Y0z2YeNGgQLVu25OrVq+TPn/+JxtG6dev4/fffOXDgAC+99BJgmmm9adMmpk6dSsuWLdNtI5g+T/fu3WPgwIEEBgamme7GzVuULe1rVZ537t5ld1gEbV57hapVTHXL55GXS5evsCl0B6+/2pyoX3/j8pWrjBo+mMKFCgDQsnlTfjt6nC1bd1KxvOXS36fPnGPuwsV06tCGcmVLpVruug1b8ClZnNdfbQZA/nwetH61OXMWLOb1V5uTO5d7mnU2Go3m2cmJiYmcPXeBVT+sp0TxohR4wROAjZu3UbF8WQKbNgTAM38+OrRtxaRpX3Py9BlKFi/22H7ZuHkblSqWo2kj0/dJEe9CxMTEcPPmLfJWqkBp3xfZszfC3Ge3Ym5z8vQZBgS+/dh8RURERERE5AHNABYRERER+YdVqFDB4jh37tzcuHEj1bSRkZHEx8fTpEkTi/P16tXjxIkT3Llzx3wuOQAHkJSURHh4eKr3GY1GDh48CECLFi349NNPeffdd9m8eTPx8fFUq1YNT0/PVOsTFhaGg4MDAQEB5nM2NjbUqVOHyMhIAH799VeqVKmCra2tOU21atXS7I/HebivcufODZBmX6XF19fXHEwFyJ8/PwC3b9+2up8elV4bnzTfHDlyEB8fT9++fSldujQvvPACL774IgB//vlnum1t0KABBoOBunXrMmvWLM6cOYOnpyf+/v4p0iYlJdG5c2cmTpzI2rVradq06WPzPnjwIDly5DC/XFxcqF+/PqVKlWL9+vXmZY7DwsLw9/e3WIa7cOHCFC9e3DxG3NzcOH36NM2aNaN48eJ4eXmZ94BObueTjKOIiAicnJyoWLGixXk/Pz9z2Rnx8GcqNQYM2Npa98/oC39cIikpieJFi1icL+JdmPj4eK5GR3P23AVy5LCjUMEXLNIU9S7M+QsXLc5d//MG076aS5OG9ahVI+XzBVMA9+y5C5R5JEidvK/vo3k+6svZC+jdP4je/YPoN3gEn0+egWf+fLzzVmcMBgP379/nwsVLFC/2SJuKFLYqf4Cz5y9Q9O/0yVq3eoWG9esAULtmNY78dpTbt03fdfsjD+Hu7kbpUj7p5i0iIiIiIiImmgEsIiIiIvIPc0pl2dK0lkqNiYkBoH79+hZ7jCb9PSvv8uXLlCxZEgB39wcz+e7du0diYiKjR4/mo48+SpHvpUuXANNeu8l7pE6aNImcOXPSu3dvxo4dm+o+szExMcTFxaVoQ2JiIl5eXoApsPrCC5YBLFdX11Tbl56M9FVaXFxcLI6T+9FoNFrdT49Kr41Pmu/x48dp0KABDRo0ICQkhAIFCpCUlJTqLOTU+Pr6snv3bsaPH8/w4cPp2bMn1apVY8qUKSmCwF9//TXLli0jLCwsxY8SUuPj48OiRYvMx9OnT2ft2rWEhISYg/NgGiMHDhzA0dHR4v74+Hhzu5cuXcobb7zB+++/z9SpU3F3d2fHjh0WM5yfZBzFxMTg6uqaYj/enDlzcjuNPWkf5+HPVGry5M7FlavXHpsm2V9/xQKk6BdHRwcAYmPjiI2Nw8HBIdX9hGPjYi3OLVq6nLi4eG7eikmzzPj4eJKSkljz08/8uG5Diuu3YtK+F6DNay3webE4ADYGG9zd3XB3y2m+Hhcfj9FoxOnRNjk8aNPjxMfHk5h4H4fHLD1eqWJ5nJ2c2Bt+gIb16xBx4BA1qvml6CMRERERERFJmwLAIiIiIiLPkeQAVEhICOXLl09xvXDhwinOATg7O5MjRw4GDBhgXib6YckzfJPTDBgwgCtXrrBw4UJGjhxJ/vz5GTx4cKr1cXR05MCBAymuJc/UdHFx4datWxbXbt68mU5Ls4a1/fSo9Nr4pPkuXbqUxMRElixZYg4Unjt3zur2gGnWdEhICPfv32fnzp2MHDmS5s2bc+HCBRz+DsyBabZsp06drAr+gikY7+fnZz6eMGECP/zwA0FBQcyaNct83t3dndq1a/PVV1+lyCNnTlPwcNasWTRo0IAxY8aYr/31118WaZ9kHLm7u3P79m2MRqNFgDAmJsb8WUorcPho+dZ4sWRxNoVu5+KlyxR4wSvF9YuXLvPr78eoX7cWzk6m5xkbaxnITT52cnLEycmR2Ni4FPX/KzYWJ0fLH0NUq1qZ0r4+fDl7ARXKlaFSxXIpyre3t8fWxoaG9etQu2bK2dNuOXOmOPewfB55Keqd+ncMgIO9PQaDgb9StCnO3KbHsbe3xz5HDv56TKDYzs6Wav6VCd8fib9fJY6fOEXnDm0fm6+IiIiIiIhY0hLQIiIiIiLPgeRZrhUrVsTBwYGrV69SqlQp8ytv3rzky5fPIqD3MBsbG6pUqcKZM2cs7itevDj29vbkzp2bW7dusWjRIhISEgBTUHLo0KHUqFGDw4cPp6gLgL+/P7Gxsdy/f98iXycnJ/MsVV9fXw4dOmSepQywcePGTO+jtGRkhrA1/ZSa9NqYkXwfrm9sbCwuLi4Ws0RDQkKsbldYWBi7d+8GTAH5gIAAxowZw7Vr17h8+bJF2lmzZlkEbjMqT548fPLJJ8yZM4cdO3aYz/v7+3P8+HFKlChh0XYbGxvzjN7Y2FiLZbkB8+zi5HY+yTjy8/MjNjaW/fv3W5zfvXu3eZ9rNzc3wDKYfPXq1TRnZT9Ovbo1sbW1Ycn3qyz2RwZT0Hbuwm/ZvnMPAIUKFsDGxoYTp85YpDt5+ixOjo7kz5+PIt6FSUxM5Nz5PyzSnDp1NsUyydX8KlP5pfLUrF6VbxZ/z61UZgIbDAa8vQtx7foNvDzzm18eefNia2uLs3PKGfYZYWtrS+FCBTh56vQjbTK18dE6p6Zw4YIcO37S4tzSZav5dtkq83GdmtU4efosG7dsp3ixInjm93iqeouIiIiIiPyvUQBYRERERCQLOTo64uTkxLZt24iMjMTJyYmePXsyevRoli5dyunTp9m6dSuNGzc275malqFDh7JixQqCg4M5duwYkZGRdO7cmVq1anH79m1sbGz473//S8+ePYmMjOT06dMsWbKEiIgI8x6/uXPn5vLly+zYsYOzZ8/SqFEjKlWqRKdOndi2bRtnzpxhyZIlVKpUienTpwPQoUMHrly5wuDBgzl8+DArVqxgwYIFz7zvkgPb6Umvn1JjTRutyffR/q1WrRrR0dHMmzePS5cuMWPGDPbu3Uv+/Pk5ePCgeUnwtKxfv55XX32V5cuXc+rUKSIjI5kyZQpFixbF29vbIu17773HhAkTrOqjtLz99ttUqVKFnj17Eh8fD0CvXr24c+cOXbt2JTIykuPHjzN27FjKli3L3r17AdNevhs3biQsLIyzZ8/Su3dvChQoAEB4eDh//fXXE42jwMBAypQpQ48ePdi3bx+nTp1ixIgRhIeHm2e0e3t74+HhwcKFC0lMTOTmzZv069ePPHnyZLj9+Tzy0qlDW44dP8nYcZPYsnUnkYei2LhlG2M+nciNGzd5p3tnbG1tcXFxplYNf9Zt2EzkoSj+/PMGu8PC2brtFxrWr4OtjQ3lypbiBS9PFi7+jjNnzxN97Tor16zlzLnzNG4YkGod3mjTCgdHB+aHLE31RwJNG9XnwMHDrNuwhStXozl/4SJzFy5m3IRp6S7RbI0mDetxKOo3Nm7ZxvU/b3D02Am+/X4VPiWLP3b2cLLGDery6+/HWPPTz5w5d54tW3eyZdtOi72SC7zgRbGi3mzYvJWa1as+dZ1FRERERET+1ygALCIiIiKSxYYPH873339Po0aNuHv3LhMnTqRPnz4EBQXh6+tLly5dqF27NosXL35sPq+//johISEsWbKE8uXL06RJE+Li4ggNDSVnzpzkzJmTDRs2cO7cOerVq0eZMmUYM2YM//d//0fXrl0BU6CzePHiNGrUiLlz52Jra8v69espX748rVu3pnTp0owZM4ZRo0YxZMgQAJo0acKkSZP4/vvvqVq1Kp9//rl5punDszmfRd9ZI71+So01bbQm30f7t0WLFgwdOpSgoCBKly7Nzp07WbBgAb1792bBggW89957j23LyJEj6dGjB0OGDKF06dI0adIEo9HI2rVrUyx9/MMPPxAaGmpVH6XFxsaG6dOnc/ToUT799FMAihQpQmhoKFeuXKFWrVr4+fmxbt061qxZQ/Xq1c31DAgIoFGjRtSoUQMvLy/mzJlD48aN6dGjB6tWrXqicWRnZ8fPP/9MiRIlaNy4MaVLl+bnn39m5cqVNGjQAAAHBwcWLlxIWFgYuXLlokaNGrzxxhv4+Pg80fisWc2P94b0x8szPz+t38TXc79h6/ZdlCtbiveHD6JggQf7GHdo+xo1q1Vl0dIVjPjwU9as3UDzlxvRolkTAGxtbBjYtyf5PDyYNPUrPhgzniO/HaVPz66U8imZavmOjg5079KBX38/Rui2X1Jcr/xSebq/+R/2hh/gw48/Z9K0r0hISGTIwN7m/Yefhr9fJbr8py07fgnj/Q8/5au53+DrU5I+73Sz6v7KL1WgY/vWhO3bz/iJ0wjdvpMO7V7D369SinR2dnb4Va741HUWERERERH5X2NYunSp9euliYiIiIikISAgIM19TkVERKxlNBoJnjCVIoUL8Z/2r2d1dUSeme3bt6dYvl9ERERE5EnYZXUFRERERERERETiExKIjr7Olq07uHT5Cr3ffvyy9yIiIiIiIpI6BYBFREREREREJMtdvHSZTz+bwgte+enbqzu5crlndZVERERERET+lRQAFhEREREREZEsV9S7MF9N/SyrqyEiIiIiIvKvZ5PVFRARERERERERERERERERkcyhALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDahALCIiIiIiIiIiIiIiIiISDZhl9UVEBERERGRjLl37x579uzh1KlTnD59mtOnT3Pp0iWMRmNWV03S4ODgQNGiRSlatCjFihWjfPnylC1bNqurZaV7YNwDnALjaeA0cAk03p6MwQEoCoaiQDEwlAc0FuQ58a8enyIiIiIikkwBYBERERGRf4GoqChWrVrFpk2b2LZtW1ZXRzJBgQIFaNiwIU2aNKFVq1a4urpmdZUeEgXGVZC0CdB4y1TGR/4CUAAMDcHQBAytAI0FySL/uvEpIiIiIiKpMSxdulQ/1RURERGRpxYQEICnp2dWVyPbOXDgAB999BGrV6/WDN9szMPDg6CgIPr27YuTk1MW1uQAJH0ExtU8EgGSZ8YDbILA0BfQWJDnzfMyPrOn7du3c/ny5ayuhoiIiIhkA9oDWERERETkOfTrr7/y2muvUaVKFVatWqXgbzZ37do1goKCKFGiBFOnTuWvv/56xjX4FZJeg/tVTLM9FfDLQtcgKQjulwDjVEBjQZ4nWT0+RURERETEGloCWkRERETkOXPhwgXatWvHkSNHsroq8oxdunSJ/v37c+vWLd5///1nU6jxAiS1BX59NuWJlS5BUn+wuQUGjQV53mTB+BQREREREatpBrCIiIiIyHPk5MmT1KhRQ8Hf/3GjRo2iZ8+e//zMb+NJSKqOAn7PsaRRkNQDNBbkefSsxqeIiIiIiGSIeQawlpQTERERkaeh/558euHh4TRr1ozo6Oisroo8B2bNmsXt27eZP38+Dg4OmV+AMRySAoFrmZ+3ZC7jbOA2sAAMGgvynPmnx+f/GP33lIiIiIg8DYPBAIDd3bt3s7gqIiIiIpIdJCUlZXUV/tViYmL4z3/+o+CvWPj222+pWLEiw4cPz9yMjTGQ1AEF/P5FjEvB8BKgsSDPoX9qfP6PiYuL4969e1ldDRERERHJBuw8PDyyug4iIiIikg3kyJEjq6vwr5WUlESbNm04fvx4VldFnkMjR46kYsWKBAYGZk6GxiRIag2cyJz85NlJGgE2FcGgsSDPocwen/+D3Nzc0P+nExEREZHMoD2ARURERESy2Ndff83GjRuzuhrynEpKSqJr167ExMRkUo5fA5syKS95toyQ9KZp1m6m0FiQzJTZ41NERERERJ6UAsAiIiIiIlkoJiaGDz74IKurIc+5q1ev8sknnzx9RsYYSBr19PlIFooGo8aCPK8yaXyKiIiIiMhTUQBYRERERCQLffLJJ9r3V6zyxRdfcPXq1afLxPgJ2us1GzBOBqPGgjynMmN8ioiIiIjIU1EAWEREREQki0RHRzN58uSsrob8S8TGxj7dbHFjNBgnZV6FJAvFgVFjQZ5XTzk+RURERETkqSkALCIiIiKSRZYvX05cXNxT51O4cGEmTJhAVFQUt2/fJi4ujrNnzzJ79mxKly6dCTVN34cffojRaCQxMTFT0lnr888/x2g0YjQauX//Pvny5UuRZtKkSeY0RqMRV1fXTCk7K3z77bfEx8c/4d3LgSe911J8POTJBwY702vCxEzJNsts3QYffgQ3b1p/z2efP2h/3vyQkJB6uuQ0Yz9+/LkMMy4BY9aMhTt3HrThca9Wrz9xEVkiKQnGjIVVqy3PP83zyui9mzZDuzegUBFwcIZcecG/BnzyKTztNuCZMu6s9VTjU0REREREnpYCwCIiIiIiWWTVqlVPnUeTJk349ddfGTx4MGXLlsXV1RV7e3u8vb3p3r07hw8fpl27dplQ28wRExPDH3/8wYULFzI9bxsbG1555ZUU55s3b57pZWWVW7dusWXLlie72fj04y3Zzxvgxo0Hx0uWZlrWWWLMWPi/DAaAv/3uwfs//zT1ybMVA2T9WMhOfvkFPvgwZQC4YEHTy83tnyvbaISevaBxU/h+Gfzxh+mHFrduwb59MHIUlKsIhw//c3XIXE8xPkVERERE5KkpACwiIiIikgViYmIIDQ19qjwKFCjAd999h6urK/fu3WPYsGGUKVMGHx8fOnXqxKlTp7C1tWXRokUULVo0k2r+dCZOnEihQoUyvT4xf0+Na9mypcX5UqVK8eKLL3L79u1MLS8rPdEPB4wxYMy8YMySb01/kydcR0TA8eOZlv0zdfMmbN+RsXuOHYP9+03vk/sguU+eqScJ5GbyWOj7X7hxLfXXom8yrZhnYvUPqZ+/cNb06t/vnyv78wkwa7bpfZUq8MNqOHMSDoTD0CFgYwPnz0PL10wzsP8V9EMDEREREZEsowCwiIiIiEgWWLt27VMs5Wvy3//+F3d3dwB69OjB+PHj+e233zh+/DiLFi2iTp063Lp1i99//50yZcqY73N3dyc4OJhjx44RGxvLzZs32bp1K61atUpRRkbSPsrb25urV69iNBr5+uuvgbSXgPb29mbevHlcvHiRuLg4Tpw4wYgRI7Czs7OqLyIjI0lISKBx48Y4OjqazyfPCN63b1+adUyv3ODgYIxGI1FRUbi6ujJ37lz+/PNPYmJimDNnDk5OTua0ISEhGI1Gfv/9d4ty3n///Uxb+vqHH37AaDRm8K61QBprFGfQvXuw5u9A2ZDBkCuX6f23acwCvnwZev/XtKStvRMULgrvjUy5nK216c6dg27doUBh0xK5JX1Ny+M+3LVBw01L3RYuCr//Ds1eAbfc4J7HdG9ynsNHQG6PB/cWKwkenun3QXKwN08eGDzQ9H7ND6a+eaaMa0xTRzMk88YCgIODaQyk9nJxeZDu2jUYOgxKlQUXN8jnBU1eTjlz2tp0APMXmJZHdnI1Pdtmr8ChQw+ux8Y+WPZ42XL48SeoUAkcXUz5b9psmS55KfMFC03H06abjlNbOvnePdPM8RI+pvFaoDC0bmv6cUBG3b0LnwSb3nt7w7Yt8EpzKFIEXnoJxgfDh39vqXvmzINAsbXtS01iIrxQyHRvh46W165fB1t707UxYzPeHrMnGp8iIiIiIpIZFAAWEREREckCkZGRT51HYGAgAGfPnuXbb1NOP7x48SKFChWifPnyrF27FoCcOXOyc+dOhg0bRvHixTl69Ch//fUXAQEBrFy5koEDB5rvz0jaRzk7O7N69Wry5cvHxo0b6dOnT5ppCxYsSFhYGF27diU2NpZVq1aRJ08ePv74YyZPnmxVXyQkJLBnzx5cXFxo2LCh+XyLFi0A2LVr1xOXGxsba+6Pb775hk6dOuHm5kbOnDl56623rK5jZrl48SJXrlzJ2E3Gpx9vydb8YApYAbRrC6/+Pek6tWWgr12DajXhy69MyyRXqGAKLgWPgyaBkLwFtrXp/vjDlG7+AnB0hFavmtKPHAUDBz8oN/k3ADduQNNmpuOAuqbA7/wFpiAwgK+PKcCWrG5daNgg/T5IbmvLzq+XNgAAIABJREFUFvBGe9P7O3dMAbhn6xIYsm4sWF2kEZq3NM1yvXHD9CyKFYONm6B5C1j/c8bSAYwabXqOERHQqCGUKwfr1kPd+nDihCnNQ78FIXSraU/iEydM4+noUVPA+Nw5sLWFpk0geXvwAgVMx0WKpN2mN/5jWi76yhUIfBns7WHFSmjQ2HJ5dGts2/5g+fEhgy0D58kGDXywBPXK1RlrX2rs7KDT34HftetMy00n+3mDaT9kgP90yFhbLD3B+BQRERERkUyhALCIiIiISBa4mZHNRtPg4+MDwKFDh0hK/r/1j7jzyFqhI0aMoFy5chiNRho3bkzFihXx9vbmhx9MUzrHjRuHp6dnhtM+zGAwsGDBAl566SWOHDlC27ZtHzvzdfTo0Xh5eXHx4kXKly9P+/btqVevHklJSfTu3ZuSJUum2xe2trasX78eeLAMdO7cualZsyZ37txJNQCc0XILFSqEq6srefPmJV++fBz+ezPOTp06YTAY0q1jZsr4+Hn68ZYsefZr1apQtCi0bWM6/u03OHjQMu1HY00BKAcH2L8PwsNg3x5TwC0sDBYtzli6/xtjmilcoAAcjoSlS2DrZtPyuDO/fBD4s/n7X7p370KvnrBimWlJ3QH9TedXrDQtWd2tK4x870F9F8w15fk4Bw6YgmtganvRouDnZ9k3z1bWjQUwBRtv3kz9lfy1dPw47N1rer93N6z90fT3ow+hdm3TLO2MpDt3zvTjAIDPx5ue7S/boU1r0565H6Uya3X2HFi9Eu7dhtmmBQlISDDNXM+RA9avfRDwbdzIdNwi5ZbiAJw+DfsPmPYFnj7VlO/unaZrf/zxYLxa6+EFA/yrpp7G1RVKlza9P3IkY+1LS9cupr8xMbDloR0J1q4z/a1eHUqUsK4Nacvc8SYiIiIiItZRAFhEREREJAtkRgDY2dkZgOvXr1t9T/v2pumKoaGh5j2IExISGDfOFE2xt7c3zyzOSNqHjRo1ijZt2hAdHc0rr7zCrVu3Hlun5GWaN2/ezN2/p5YeOnSI33//HRsbG5o0aZJuuwwGgzkw3aJFCwwGA4GBgdjZ2fHzzz+TkJByyduMlmtjY0NQUBC3b9/mxo0bzJs3DzA9h/z586dbx8yUVQHgmzcfzMJs29r0t3Ej+Hslcr79zjL96jWmvw0bQKlSpvdly8KG9aagnV+VjKVLnmHbsMGDWZIVKpjuSUqCDRtT1vnt7g/ed35oqdvwCOvb/bDk2b+5cplmnsKDvli33hSAfLayNgA8bbppGe3UXsnLIT+8CvDIUabZqvfuwaj3TQH8gQMylm79zw+W7X71oW2/27V9cP1RLzeF5s1M77t1/X/27jwuqivP//+7CigoNtncENkRAUVccV9j0m0naWPSSTpbp6cn05npmccjv/5mMltmvknPd/rbmXTn293TPZOemU5PJ+lsxmhMaxZ3Y9wVBQQREVGQoMhukKKK+v1RUrJTBQWF+Ho+HjyEuqfO/dzrOadu1afOuTeXLi897/4xJyTcvC/wQw86ZgEbDDf7wcVy9+rreIvyHr5T4zRhfPfy7QZyfBkZji9ySNKmG7OK29puLrf96KBm/7YjAQwAAAB4AwlgAAAAwAs8kQBuuHEj055m4fbE19dXCQkJkqQzXW5UWVJS4vw9KSnJrbId+fj46IUXXpAk+fv7q7m5ud+YJk6cKEl6/PHHZbfbnT/t9y2ePHmyS8eXl5en0tJSTZw4UbNmzXIu//zhhx96ZL/t9wFud+nSJefvHe8DPBzcbj/2Lz2y3w0f3Fwqdu03HUk4o/HmTMmOsw2t1pvLz8bHd65n5QrHPU4zM90rV1npePyNN2/e+9TgKxUUOB7vmngLDJTGjr3596RJN3/v8N/nMrtdevdGkvueux3HbrVK9924JXZLi7Rxk/v1DordO23BHamp0uOPOX7/w1vSyjuksEhp2UrpzT+4X67j/3PSlJvt4MGHHY9dueK4P25H06ff/N1olCZMcPzezxDVq//6b8f9p83B0oRJjvvptif/bTb36mpP1kqOGcS9uVTZvXy7gR5f+yzgD2/crvfIEceS7L6+NxPqg+Ju+wQAAADgEb7eDgAAAAC4HcV3zXQNQH5+vhYtWqSZM2fKZDLJ0vEmjjfccccdKi4uVllZmewdptcZjZ2/C9rx77a2NrfKdlVYWKiwsDBFR0frpZde0pNPPunS8Zw4cUJ79uzp9vjJrusK9+HDDz/UM888o1WrVmn16tWy2WzasmWLZs2aNej9trW1dZpJbOsjy9N1SWg/Pz9XD8Elbrcfw1TJ3v0Y3dVxieMpad23nz8vHTzoWDq2o15WKO/G1XJZWY77w3Y1I7Pv+trvJSzdXCbaHV98cTNZ/cabjp+u3nlXevI77tc9YAbvtIV2/+uHjmWY+/P730nr7nO0oc/3OZL5e/c6fk4XSf/nR66X6zhT+OnvO5YO7+r69c73yA3oUsbHx/1jbbfhA+nPnnb8/r0/cXwZwN/fkYDuaXZufzomb/d9IS1a1L1Mfb1jmXVJmpnVfftAj+/bD0s/fNaxtPrBg9KnN2bRr75D8sjCBu62TwAAAAAeQQIYAAAA8IIJ7dOzBmHTpk1atGiRJkyYoD/90z/Vv//7v3fanpCQoA0bNigkJETPP/+8fvzjH+v8+fOKj49Xampqp7Lt9xOWHDN+bTaby2U7stlsmjt3rh566CG99tpreuKJJ/Tqq6/q4MGDPR6D1WrVpUuXFB0drYKCAj3zzDMDOhft2hPATz/9tCIjI7V7927V1NQM+X7btc94DusyRa/rTOnBcr/9DL69ffmltNuFvOHb7zoSwL6+UkyMVF4unTvXuczv/sexbG5ammMJX1fLRUc7Zu6mp0k/f6X/WK5fd9SZmOj4++zNyeuKien/+T0dW3927HTMQO0483hoDX9bGAiDwTFrfO03HX+XlEj/668dM09/8cubCWBXysXF3qz3h89IKSnDeyzts8DDw2/eb7exUepyy3WXLV7kWPq5qkr6f7+Q/uwpR90d/fSVm/W333fbE8LDHX3rvfXSps2OZbcl6dFHPLUH77Q3AAAA4HbHEtAAAACAF3giAfyf//mfunjxoiTp5z//uf75n/9ZWVlZmjp1qh5//HHt3r1boaGhslgs2rhxoyTpvfccmYulS5dq2bJlkhxLNf/t3/6tJKmpqUlbtmxxu2xHX331lX7/+9/rxIkTMhgM+tWvftVtFnFHH3/8sSTpG9/4huLi4iRJUVFR2r59uzZt2qT5XaeT9uHzzz9XTU2Nc/nqnpZ/Hor9tjt/3nHDzXHjxmnJkiWSHMnftWvXul1Xb8aMGdMtwdwvw+Db23vrby5te+SgZLd2/vn6126Wa595235/1l27pbw8x+8FBdLTfyH93T/cnE3rarn2fWzZKpWVOX6vrpbuuFNau84xg7Grf/m/jhmjbW2O+9VKkp+ftNTx3yPfDl+LvtGdemSzSevfd/z+jTXdj//Qfsc2q/VmuaE3RtLwt4WOWloc94bu7UdyLIu9cIl0970321BS0s0kb/uEeVfL3bn65gzXf3/1Ziz/7+fSnV9zJIwHor0t9NUOJEf7kRwxts8q/+krN2cmu5sINpmkF/7J8XtVlbRoqWOWcUmJdPy49IO/kv7Pvzi2T59+c5lsT/nujUUa3npbOnbMcX/t9nM+OANonwAAAAA8ggQwAAAA4AVZWT2s4emmhoYG3XvvvaqsrJSfn5+ef/555eTkqLCwUK+//rpiY2NlsVj00EMPqfDG2qH/8i//ooKCAhkMBm3fvl05OTm6ePGi7rrrLrW1tekHP/iB8/6y7pTtqq2tTc8++6wkafbs2fre977X63G8+OKLqq6u1pgxY5SXl6e9e/eqsLBQq1atUkxMjFtLQLcv+dxu8+bNw7Lfdn/4wx9ktVolSVu3btX27dt19OhRffbZZ5K6Lw09EFOnTnX/SYbBt7f22a9Tp0pz5nTf/sTjjn87zhT+x39wzLRtbZXmLZDmZDt+LBZp9mzHTEd3yv3vf5SiohzL4U7PkpaukNKmOWbdlldIM2Z0jikoSDp4yLFcdWKKtOnG9wEef8wx41KSpnSYPbr2fil74c37HHe0fYdjZm/787uaN89xD1tJeue93s+jZ3mnLXT0q19L4VG9/zQ1SbNmOpYv3rJVSk13JHiXr3Ik+CXpqT91/Otqubg4x9LTkvTzX0jp06W58x1LGW/fIc2bO7BjaW8LO3dJM+c4Zhz35M7Vjn8bGhwJ64VLHOehfenvt952JG3d8fT3pb92DJkqLJQeeNBxj+HZ86R//w/H42lp0uaNPS95PRh3rnbcH7u83PFFibXfdPSdwRtA+wQAAADgESSAAQAAAC/Izs7WmDFjBl3PiRMnlJ6erhdffFE5OTlqaGhQa2urLl68qP/6r/9Sampqp1mwDQ0NWrhwoV5++WVduHBBGRkZ8vX11ccff6yVK1fq9ddfH1DZnuzYscOZjP3xj3+s8K5rmt5w8eJFZWdn65133tH169e1YMECXb9+XS+//LJWrVrlXFbZVe3Hm5+fr3Nd1xQewv1KjhnAa9asUVFRkUwmk2JiYvSXf/mXeucdx81zjUajTCaT2/V2NKDZxPZsSaED3mf7vX0l6fFHey7zzXul0Bu7aL9X8Pjx0sEvpD/5rmOp2ZMnpchI6bm/lnbvuJnIcrXc5MmOmbYPP+S4v+uBA45///pZacdnktncOSarVdqyWUqd4kjeRkZKf/kD6VcdEnvp6dL//ifHfq9dk5qbb8407aj9mEJDpXvv6fkctJ+bffv6n0XqEcbhbwsDERcnfbFXeuTbjmW5t22XTp2SZs2SXvtv6eWX3CsnSS/9X+k/fi1lZjqW+S4okJYulbZ9Kj304MDi/OcXHV9u8PNzJEO7tqd2Tzwu/ePzjiXJT5923H93z07HFxSmTXO0oZKSnp/bl3/9iaOeB7/lSMiaTFJYmLRwoWPJ8+NHJA/cPr4bo7Hzlxo8tvzzQNonAAAAAI8wbN682e7tIAAAAHDrmz9/vsYO300vR4WHH35Y777rwk1FgQ5ycnIGNoO87WHJfnu0txd+JL34I8cywdYWb0czhHxyJNEWMHjPPif97BXHlzHKyzovjT5gA22ft7FDhw7p8uXL3g4DAAAAowAzgAEAAAAv8eR9YXF7iI6O1oyu6xy7ykB7G10mSnbaAgYvN1f6zX86fv+Lpz2U/B1M+wQAAAAwaCSAAQAAAC9Zu3atxrffiBRwwVNPPTWI+wivlTTOk+HAmwx/1vNa1S6hLUD6+BMpNsFxn+GmJik2Vvr/nvFQ5YNqnwAAAAAGiwQwAAAA4CUBAQF64YUXvB0GbhHjxo3TD3/4w4FXYAiQjC96LiB40VjJQFvA4BiNUn29417HX7vLcR/tkBBP1DzI9gkAAABg0EgAAwAAAF701FNPKSEhwdth4Bbw4osvKjQ0dJC1PCUp3hPhjGgv/JNkt47i+/8afyQZaAsYnLvulOprpIZa6eMtUnKyhyr2SPsEAAAAMBgkgAEAAAAv8vHx0WuvvSY/Pz9vh4IRbOnSpfre9743+IoMPpLxd5I8cpNPeMUSSbQFjFQeap8AAAAABoUEMAAAAOBly5cv17/+6796OwyMULGxsVq/fr3nviRgWC4ZX/ZMXRhmkyXj+5KBtoCRyMPtEwAAAMCAkQAGAAAARoBnnnlGjz32mLfDwAjj5+enjRs3aty4cZ6t2PCMZHjUs3ViiPlKxk2SgbaAkWiI2icAAACAASEBDAAAAIwQv/nNb5SWlubtMDCC/PKXv9SsWbOGpnLDf0qaOjR1w/OM/yYZaAsYoYayfQIAAABwGwlgAAAAYIQIDAzUiRMn9OijzMa73UVGRmrHjh16+umnh24nhkDJeFIyPDJ0+4AHREjGHZKBtoCRaBjaJwAAAAC3kQAGAAAARhCTyaQ333xTv/zlL+Xj4+PtcOAFqampOnbsmFauXDn0OzOYJOMfJOMvJdHeRp4pkvG4ZKAtYCQaxvYJAAAAwC0kgAEAAIAR6K/+6q+Um5ur++67TwaDwdvhYBhERUXppZdeUk5OjuLi4oZ354a/knxyJcN9kmhv3hclGV+SfE5IBtoCRhovtk8AAAAALiEBDAAAAIxQ6enp+uCDD3Ts2DE98MAD3g4HQyQmJkY/+clPVFpaqueee05ms9lLkaRLxg8kn2OSgfbmHTGS8SeST6lkeE4SbQEjyUhpnwAAAAD64+vtAAAAAAD0bebMmVq/fr3q6+u1adMmrV+/Xtu2bZPFYvF2aBigmJgY3X///frWt76lhQsXjrBZ3jMl43pJ9ZJ9k2RfL9m3SaK9DY0YyXC/ZPyWpIUaWbNuaQsYye0TAAAAQG8Mmzdvtns7CAAAANz65s+fr7Fjx3o7jNvK1atXVVtbq7q6OjU1NXk7HPTB19dXYWFhCgsLU3h4uIKCgrwd0gBclVQrqU6y094GzOArKezGT7gk2gJGkFHRPm9dhw4d0uXLl70dBgAAAEYBZgADAAAAt6jIyEhFRkZ6OwzcNiJv/IhJgLc92gIAAAAAjGTcAxgAAAAAAAAAAAAARgkSwAAAAAAAAMAI8+6772rXrl3eDgMAAAC3IJaABgCMeC0tLdq5c6eOHj2qL7/8Uj4+Ppo6daruueceTZ482dvhAQAAAIDH7d69W6mpqVqxYoW3QwEAAMAthgQwAGBEq62t1c9+9jNVVVV1ejwnJ0d5eXn64Q9/qJSUFC9FBwAAAAAAAADAyEICGAAwov32t79VVVWVxo0bp3Xr1mnKlCmyWq06ceKEjhw5osjISG+HCAAAAAAAAADAiEECGAAwYlVUVKioqEiBgYF69tlnFR4e7ty2YsWKTkuhXb9+XVu2bNGxY8fU1NSkmJgY3XvvvZo6daqzzPe//30lJSVJkiorK2U0GrV69WqVl5fr3LlzslgsWrlypdasWeMsHxcXJ5PJpKqqKrW0tGjBggW6//77ZTKZJEnV1dV65513VFhYKH9/f2VnZ+v++++Xr69vp30ajUZVVVUpKChIjz76qFJSUvSTn/xEZWVlevnllxUcHCxJ+tnPfqbz58/rpz/9qfz9/Yf2BAMAAAAYMfbu3avk5GTnewkAAABgoIzeDgAAgN5UVFRIkjIyMjolf7uy2+36zW9+o08++URXrlxRc3OziouL9corr+jMmTOdypaWluqxxx7TSy+9pKCgIG3YsEERERH68Y9/rOXLl2vjxo0qLi52li8rK9Odd96pl19+WX/3d3+nI0eO6M0335QktbW16ZVXXtHJkydlsVjU2Nio7du3a8+ePZ32ee7cOT344IP6yU9+IpPJpN/85jeyWq362te+JqvVqoMHD0qSGhoadObMGWVnZ5P8BQAAAG4zx48f7/ZeAgAAABgIEsAAgFtecXGx8vPzlZCQoB/96Ef6t3/7Nz355JOSpE2bNnUqm5ycrOjoaJlMJuds4KVLl0qSpk2b5qyvXUZGhjIzMyVJEydO1Pz583XgwAFdu3ZNRqNRd999t/7iL/5Cv/zlL/UP//APMpvNKigo6LTPlJQUxcbGysfHR+np6aqvr9eVK1c0Y8YMTZw4Ufv27ZMkHTlyRG1tbVq8ePEQnCUAAAAAI5m/v3+39xIAAADAQLCmDABgxJo8ebIkqbCwUI2NjQoJCem0vbW1VX5+fqqurpYkLVu2TBMnTpQkLVq0yDkjuKOAgADn7z4+PpLknG3r5+cnSWppaXGWsVqt3fYpSVeuXFFQUJACAgK0Z88evfXWW2pqapLVatX169d73Wf7cm4tLS0yGAy666679D//8z8qLS3VkSNHFBsbq/j4eJfPEQAAAIDRoaWlpdt7CQAAAGAgmAEMABixJk6cqLS0NDU1NemVV15Rfn6+rl27pmvXrmnLli167rnndOLECY0bN06StGfPHlVVVclisWj//v2qqqpybhuowsJC7d27V83NzcrPz9eBAwckSWPHjtXx48f1H//xH4qLi9MLL7ygv/mbv5HZbHar/uzsbIWFhWnz5s0qKSnRkiVLBhUvAAAAgFsTt4EBAACApzADGAAwon33u9/VT3/6U5WXl+sXv/hFp20mk0lBQUFKTk5WVlaWTpw4oeeff9653Wg06v777x/U/sPDw/XGG2/ojTfecD62YMECBQUFyWKxSJK2bt2qrVu3ytfXV4GBgW7V7+vrq9WrV2v9+vUymUzKzs4eVLwAAAAAbk3tqwUBAAAAg8UMYADAiBYeHq7nn39ed999t6Kjo51J1qysLP393/+9UlJSJElPPfWU1qxZo9DQUPn6+iopKUnPPvusEhMTB7X/uLg4PfLIIwoODpbZbNbKlSv12GOPSZLmzJmjZcuWyWw2KzQ0VE8++aRCQ0MHtI/2+tydQQwAAABgdHD3y6QAAABAbwybN2+2ezsIAABGou9///vKzMzUD37wgyGp32azyWaz6de//rUKCgr03HPPORPawK1o/vz5Gjt2rLfDAAAAuCUdOnRIly9f9nYYAAAAGAVYWwYAAC/Jy8vTr3/9a0lSbGwsyV8AAAAAAAAAwKCRAAYAoBdZWVnO5ZmHwldffSWj0ajY2Fg9+eSTQ7YfAAAAAAAAAMDtgwQwAAC9+PM///MhrX/hwoVauHDhkO4DAAAAAAAAAHB7MXo7AAAAAAAAAAAAAACAZ5AABgAAAAAAAAAAAIBRggQwAAAAAAAAAAAAAIwSJIABAAAAAAAAAAAAYJQgAQwAAAAAAAAAAAAAowQJYAAAAAAAAAAAAAAYJUgAAwAAAAAAAAAAAMAoQQIYAAAAAAAAAAAAAEYJEsAAAAAAAAAAAAAAMEqQAAYAAAAAAAAAAACAUYIEMAAAAAAAAAAAAACMEiSAAQAAAAAAAAAAAGCU8PV2AAAA9KXFYtHBQ0d1/mK5ZJdMfn5KTkrQnFkzZDAYvBLTuxs+1LixUVqxdJFX9g8AAAAArrJabcrNL9CZsyW6fv267HYpwN9fiQmxmj1zhnx9+XgQAABgtOEKDwAwon386Q6ZTCY98uA6+fn6qvT8BTU2Nnkt+QsAAAAAt4qWFos2frRVVqtNq1cu0/hxUbLb7Sq7cFEHDh1TYkK8xkZFDno/O3btlZ/JpKWL5nsgagAAAAwWCWAAwIjV3Nys8opKff3OlfK78a30hPhYL0cFAAAAALeG3Z/vV2Njkx779gMyBwRIkgwGg+LjYhUf57n3VtdbLLJ7rDYAAAAMFglgAMCI5e/vLx8fo3LzCzRubJRCQoK7lfndG+9odlamLlZc0uXLVxQSEqKVyxcrIjxMknSqsEh5+YVqaWmR0WhU5vR0zZie4Xz+G2+t19TUFF2tqVXll1Vqa2vTtPRUzZ09U0aj0aU4+4vBarXq8LEclZScl9VmU3BwkObNnqm42BgPnCVg5Pjqq6+8HQIAAMAtq7m52fl7b+8hKiq/lN1u16L5c51lc07mq7GxSUsXz+9S33WdLSnVvDkzncnf3litVh08fFzFJedkNBo1ftxYLV08X4Fms6S+3/O8+tvXZW21SpJOF53VqhVLlJaa4lKd8+bM1Nlz53Wt6ZoeeWidR84jAAAAJJ9vf/vbL3g7CAAAemIwGOTn56tTBUXKzS9QeUWljEaDIiPCnUtA558qVNXlK7rzjuXKnjtLF8sv6fSZs8pIS5UkNTY2KSN9ihZkz9Wk6In6dNtuRU8cr9CQEElSbl6Byi9VamH2HC1bslCJ8XHaf+iImpq+UuzkST3GdaqwSEFBgUq48Y35/mLYtnOvqqquaO29azR3dpZ8fXwUFRWpAH//oT6FwLCKiIhQRESEt8MAAAC4Je3cvUdBgY7kaG/vIextdh04dETpaVNl8vNTW1ubPvlspxLiYzVh/LhO9V2+ckWFRcWaM3uGxoSG9Lnvz3bsVmNTk9Z9c41mZU1XxaVK5eYVKn3qFEl9v+eZM2uGrlRf1YTxY/Xwt9Y6l5R2pc4vL1/RnauWae7sLE+fTgAAgNuaa1ObAADwkqzMaXr4gbXKnJau2ro6bdu5V9t27ulUJiE+VqEhITIYDJqSnKjLl6tls7VJkpIS4xV5IyEVFRmhsVGRulRZ1en5qVOSNTnGkewNCwvV3FkzlZtfoLa2Npfj7C2Gurp6FZ89pwXZcxQUaJbBYFDqlOR+P4ABbkV1dXXeDgEAAOCWdPVqjc6fvyBJfb6HSE6KlzkgQKdPn5EklV+qVIulRalTknut22a19bnvxqZrOltyXosXZstkMslgMGju7Jmq/LJKNbU3r+/6et810DrjY2MUNibU5fMEAAAA17AENABgxIuKitCSqGwtnD9HO/d8oaIzZzV/3mznLN6gwEBnWT8/X9ntdlltVvn4mFR2oVwncvNVfbVGFotFNluboqPHd6o/MiK8099h4WPU1tama9euKSTEtURtbzE0NDZJkiLCxwzo2IFbSXV1tbdDAAAAuCUdP3FSrdZWSerzPYTRaNS0jDSdOl2kWTMzVVx8TokJ8QoI6L66UMSNlZOqr9YoPm5yr/uuq6+XJL393sZu2+rrG5y3tunrfZcn6gQAAIDnkAAGANwyfHx8NHVKkorOnFWbzd5v+aqqK/po62daMH+OVi5foqBAsz74cGu3crW1nWct1tXWy2g0KigoaNAxh4Q46qita3A5mQzcqlpbW9XQ0KDQUGZxAAAAuOPs2RLn7/29h5iWnqojx06o7EK5SkrLtOauVT3WaQ4I0JTkRJ3MO6XMaWkymTonaq1Wq3x9fRUc5EjCPvLgOkVEhA0ofoMMnf72RJ0AAAAYOJaABgCMWHV19Xrn/U26UF4hSWq1WnWqsEgTJ45XWFj/CSarzSpJSk5MUEhwkCq/rNKV6qvdyhWcLlbFpcob+2zQkeM5ypyWJqNx8C+T4WFhSk5K0P6DR3Tt2leSpHPny9TQ2Cir1aqHHfEOAAAgAElEQVTfv/We9u0/NOj9ACPFuXPnvB0CAADALaW5uVmfbNvh/Luv9xCSZDablZKcqF17v5A5wF+Toif0WvfSxQsUFGjWhk1bVH21xvn4xfIKvfH2+yosKlZ4WJiSEuP0+f6DslgskqTiklLt3XfQ5WMIDDKr8cbMZYvF4pE6AQAAMHDMAAYAjFjBwUGKmxyjvZ8fUKvVKqPRqJhJ0Vpz5wKXnh89cYJmZk3X+xs/ksnPT4mJ8UpOSpC1yz2wpmWk6mRegT7bsUdtbW3KSEvVvDkzPXYcd6xYosPHcvTBh1tktdkUFBio+fNmK9Bs9tg+gJGivLxcKSkpHplBDwAAcDvYsWu34ibHdHqf0tt7iPbb4GROS1fRmbNaMG+2DAZDb1XL39+kB+67RydzT2nbjj1qsbTIbpf8/f01PSNNU5KTHPtbuUyHDh/Tu+9/KKvNJrM5QHNnZbl8DDOmp+vjT3fqtd+/reXLFioxPm7QdQIAAGDgDJs3b+5/DU0AAEapN95ar2npUzUza7q3QwFGjcmTJysriw/3AAAA+tPS0qLt27erra3NreeVV1Rq85ZP9J1HH1JQEPfRBQAAQGcsAQ0AAACPKi8v15UrV7wdBgAAwIhmt9uVk5PjdvLXbrfrWM5JJcTHkfwFAABAj0gAAwAAwKPsdruOHj2qhoYGb4cCAAAwYhUUFLj9pblThUV67fW31WKxaPGCeUMUGQAAAG51LAENALit1dTWyRzgLzP34wU8zmw2a+nSpTKZTN4OBQAAYEQpKytTbm6ut8MAAADAKMUMYADAbS0iPIzkLzBEmpubtWvXLtXW1no7FAAAgBHBbrcrNzeX5C8AAACGFAlgAAAADBmLxaL9+/eroqLC26EAAAB4lcVi0cGDB1VWVubtUAAAADDK+Xo7AAAAAIxubW1tOn78uEpLSzVlyhSNGzfO2yEBAAAMm9bWVpWWlurcuXNqbW31djgAAAC4DZAABgAAwLCora3VoUOHZDabNWnSJEVHR2vMmDHeDgsAAMDjbDabqqqqdOnSJVVVVamtrc3bIQEAAOA2Yti8ebPd20EAAADg9mU2m2UymeTry3cTAQDArctut8tisTh/AAAAAG/hUzYAAAB4VXNzs5qbm70dBgAAAAAAADAqGL0dAAAAAAAAAAAAAADAM0gAAwAAAAAAAAAAAMAoQQIYAAAAAAAAAAAAAEYJEsAAAAAAAAAAAAAAMEqQAAYAAAAwrHJO5Onz/YdcLn/k2AlduFgxhBEBrnG37aIz+jKA/ny2Y7dOFxV7OwwAAIBbnq+3AwAAoD9Wq025+QU6c7ZE169fl90uBfj7KzEhVrNnzpCvLy9nABxuh/HCbrfr7fWblJKUoLmzszxWb8dz13z9umSXfH18NGnSRM2akamwsFCPxVbX0KD6+gaXYysqLpEkxU6eNGTHj9vTH97ZIIPBoEceWudSeXfb7mC52t6Hq1+8u+FDXblyVZLk6+uj0NBQZWakaVrGVJeeP9C+TL+HN3y45VNVV1/VY99+QP4mk/Px2ro6vf3eJi3InqOZM6YNSyzu9L2R3F9cuU67fOWqwsPCBryPkXz8AAAAw+nW/wQMADCqtbRYtPGjrbJabVq9cpnGj4uS3W5X2YWLOnDomBIT4jU2KtLbYQIYAW6r8cJu7/Tnjl175Wcyaemi+QOqrtO5W7FU48ePlSRVV9fo4OFjstqsA45tSAzHPjDqXbhYIYu1VZaWVl2suKTJk6K9HVLPfdnV9j5M/SIjPVUrli5Sq9Wqc6Vl2rFrr3x9fTQ1NcX9ytyJmX6PYbZy6SK99d5GHTx8VMsWL3Q+vnvvfkVFRWjG9PRhjcetvjcC+8uwXqeNwOMHAAAYbiSAAQAj2u7P96uxsUmPffsBmQMCJEkGg0HxcbGKj4v1cnQARpLbZbzoabbi9RaLBvNRZ0/nTpKioiJ095rVg4rN04ZjH7g95OYVaFraVDVdu6bcvIIRkQDu2pddbe/e6Bd+vr5KTUnSmeISlZZdcDsB7E7M9Ht4Q0hIsBbOn6O9+w4qfeoUjY2KUtGZs6r88rIefuCbMhq9c1e1/vreSO0vw3WdNlKPHwAAYLiRAAYAjFjNzdd1tqRU8+bM7JSQ6MmpwiLl5ReqpaVFRqNRmdPTNWN6hnP77954R/PmzNTZc+d1remaHnlonaxWqw4ePq7iknMyGo0aP26sli6er0CzWZL63d5TnXn5hTqZd0qtVqvCQkO1cP5c50w6AEPHnfHCZrPp6PGTKig6ozZbm6OvLpiriRPGO8v87o13lD41RWUXK9TY0KSwsDG6c9Uy5ZzMU8n5MvkafbRg/lwlJ8YPqPy+/YeVlBjn3Gf11RrlnSrUiqWLnPXNzsrUxYpLunz5ikJCQrRy+WJFhIc5nx8zaYLi42L16m9fl7XVMUP3dNFZrVqxRLV19bLb7Vo0f67zmHJO5quxsUlLF3eeJezOuXMl9o6xSZLF0qovDh7W2ZJSmfz8FB83WW02W6c6+xtve4qh4z76O1/91c/Yffupq2/QhfJyrVi2UF81N+u9DR+psbFRISEhzjL9td2jx0/K19dHWZk3l4AtKCxSY1OTsufOdvs6oqGpqVtfTktN6dbee2uvA+kXXxw8rDPF52TyNykqIlz+/v5qarqmtfd83eVz2dbWJpvV4NLY2lXXmK1Wqw4fy1FJyXlZbTYFBwdp3uyZiouN6bEs/RpDbVr6VJ0tKdXuzw/onq/fqX0HDmvu7CxFRIRLcu2awpXX/K7vKVzR3vd6en7H/tLfWNXf+6je+mVF5ZdDdq1xvaVFWz7ZpsuXqxUcEqyVyxYr0s1z7urYwlgCAABGK+98XREAABfU1NbKbrdrwoRx/ZYN8PfX6lVL9Z3HHtLX71ql/QePquJSpXO7r4+Pck7ma9niBc4PVbbv2qurNTV69KF1euKRbykgwF8ff7rT+Zz+tnets76hUXu/OKh1a7+h7zz6oJIS42UO7P8DDgCD5854sXP3PpVdKNdD939Tf/LEt5U5PV0bN3+sy1eqnWV8fXx0quCMvr56pb77xMOS7Hrvg82KCA/Xdx97WDNnZmr7zj1qbm4eUPnTZ4pVU1vn3F9DQ6NOFRR12v/JvFNasihbTz7+sIKDg7Rj9+fO7aXny3S1xvH8p7/3hBLiYzU1NVl/+fSfKC01RVERETqZm69rXzn219bWppwTeRoTejO5NZBz50rsHWOTpM927NaVK1f16MP364lHH9S4sWOd9wFt199421XXffR3vvqqn7H79pSbX6C42BgFBQVpbFSUoqIilHvqdKcy/bVdf5NJB48cV2trqyRHPzt05Lh8/fwkuX8d0VNfljq3977a60D6RVXVFT3y4Do98e1vKTkxQUVnOvfNvlgsrSooLFJ5RaVSpyS5NLZ21TXmHbv36cKFCq1be7eefOwhZWakKSxsTI9l6dcYDgaDQSuXL9HVqzXasOmPCgoM1OyZmc7trrR7V17zu75P6UvXvtfT8zv2l/7Gqv7eR/XWL4fyWuNMcYkWzZ+nJx9/WGFjxmj7rr3Oba6cc3fGFsYSAAAwWpEABgCMeDarrd8ySYnxioyIkCRFRUZobFSkLlVWdSoTHxujsDGhkqTGpms6W3Jeixdmy2QyyWAwaO7smar8sko1tXX9bu+pzlZLq+x2u47n5Kr6ao0yp6crNKT7ByAAhk5/40VdXb2Kiku0aMFcBZrNMhgMSklOVMykiTp8NKdT2SkpiQoJCZbRaFTs5BjZbG3KSE+VJKWmJMlqtenylasDLt+fhPhYhYaEyGAwaEpyoi5frpbN1ubSc5OT4mUOCNDp02ckSeWXKtViaVHqlORen2OQodPfb7y1Xr969TX96tXX9OGWT12Ou6P6hkadL7vY6XynTU3RpOiJzjKujrf96e189Vc/Y/ftx2JpVeHpYmWkTXU+lpGWqoLCIlmtjhm4rrTd1CnJMkg6e+68JOli+SU1X29RemrKgK4jXOFue+21XzQ26WzJeS1amK2goEAZDAalTklW3OSYfmM4VVCkX736ml57/S3lnirUyuWLNTYq0uWxtTd1dfUqPntOC7LnKCjQ7Iypp2QS/RrDaUxoiObOylJtXb1WLFvsXPrZnWuK/rgyFvTU91KSE/t9fl9jldT3+6i++uVArjVceV8nSYkJ8QoLG+Mcu65cuSqr1Tqgc97XMTCWAACA0YwloAEAI1ZERLgMBoOqr9YoPm5yn2XLLpTrRG6+qq/WyGKxyGZrU3R05yUHgwIDnb/X1ddLkt5+b2O3uurrG+Tr59vn9vblEzvWGRUVoey5s3QiN18nck8pIjxMa+66Q2Fhrn+wC2BgXB0vGhqbJElhYWGdnx8epgsXKzo91rF/+/r4yBzgL4PBkST18/WVwWBQ641k0UDK96djfX5+vrLb7bLarPLxMfX7XKPRqGkZaTp1ukizZmaquPicEhPiFRDg361s+7mrqrqsmEk3k1uPP/ItSdIn23apxWJxOe6O6hsaJElhY8Z0ejwqMkJXqh3J8P7G4/bxtj+9na/+6k+Ij2Xsvs0UFp1Ra2ur/vjxtm7biopLlJGW6lLbNZn8NCUlSaeLipWWmqLComIlJsTJbDbrYsUlSe5dR7jC3WuN3vpFQ0Njj8cXERmuy5ev9BlDRnqqc+nadu3jpytja2/ax+eI8DH9lOx/3KBfw9PG3Jgt2rENuXNN0R9XxoKe+p4rz+9rrJL6fh/VV78cyLWGK+/rJCk46ObxmG7MVG5ttQ7onPd1DIwlAABgNCMBDAAYscwBAZqSnKiTeaeUOS1NJlPnpIfVapWvr6+qqq7oo62facH8OVq5fImCAs364MOtfdbd/qHCIw+uU0RE9+RCbV1dn9t7M3d2lmbPzFTll1XavnOvjp3I1arli11+PoCBcXW8CL0xk6yurk5BgTfvL1tTW+fcNhwMBkOnWTDN168Prr4us3claVp6qo4cO6GyC+UqKS3TmrtW9fjc9nN3IveUpk1Lk7+p7wSzO7GPCXV8QFpXX6+gDh/mdpwB2d94PFiu1M/Yffuw2+3Kyy/U4oXzOt0PU5IOHDqq3LwCZaSlutR2JWl6epreeX+TqqtrVHr+gu5dc6ekgbfrnvpyV55or6GhwZK6j4W1tbVu1XOzvsGPrSEhQY4Y6ho63Yu5J/RrjASutntPv+YPRG9jVX/vo/rrl+5ea/R3ndafgYw1fR0DYwkAABjNWAIaADCiLV28QEGBZm3YtEXVV2ucj18sr9Abb7+vwqJiWW2OGXXJiQkKCQ5S5ZdVztk5vQkPC1NSYpw+339Qlhsz24pLSrV330GXtvek+mqN9u0/LLvdruiJExQcHNzpgwkAQ8uV8SJsTKhSpyTriwNHnPfjLS4pVXlFpbLnzhq2WCPCwlRSel5tbW1qsViUX3C6/yf1ITDIrMYbM1zaxyyz2ayU5ETt2vuFzAH+mhQ9odfnL12yQEHBgdqw6Y+qunzzHnrN16/rqxv39htI7GNCQxQfN7nT+S46c1ZlF8qdZQYy3rqjv/oZu28vZRfKVVffoKTEhG7bUpISdbWmVhWXKl1qu5JjRu64cVH6ZPtOhYQEadKNWfQDbdc99eWOPNVeQ0JClBAfq30HDuvata+c8VV0uX2GqzwxtoaHhSk5KUH7Dx5xxnTufJkaGht7LEu/hre52u49/Zo/EL2NVf29j+qvX7p1reHCdVp/BjLW9HUMjCUAAGA0YwYwAGBE8/c36YH77tHJ3FPatmOPWiwtstslf39/Tc9I05TkJBmNBs3Mmq73N34kk5+fEhPjlZyUIGs/95i6Y+UyHTp8TO++/6GsNpvM5gDNnZXl8vaujEaj6urq9ea7G2Rva9OE8eM1KyvTY+cCQN9cGS8kaeWyRTp6/IQ2bNoiq82qkOAQ3XfP1zU2KnLYYl28aJ527Nqn115/W8HBQUq5cX87m80mHx8ft+ubMT1dH3+6U6/9/m0tX7ZQifFxkqTMaekqOnNWC+bNdi5H3RN/k0kPrL1HJ/NPadeefWpuuS6jwSijwaBx48ZqWlrqgGO/c9Vy7TtwSG+8s0EB/iZFRkQodUqyrl275izj7njrrr7qZ+y+vZzMO6UJ48cpJDio27aoqAiFjQnVybwCTYqe6FLblaTpGWnasetzLVowr9PjA2nXvfXldp5sr3euWqZ9B47orfc+kMlkUnJivJLi4wY8O9ETY+sdK5bo8LEcffDhFlltNgUFBmr+vNk93nOTfo2RwJV27+nX/IHqaayKnjih3/dR/fVLl681XLxO689Axpq+joGxBAAAjFaGzZs3270dBAAAAADPK6+o1OYtn+g7jz7UaRlbAOjJxs1bNTYqUosXZns7FAC3CK41AAAARiaWgAYAAABGIbvdrmM5J5UQH8cHsgA6sdvt+nT7bhUVl8hut8tut6v47Dl9WXVZ0zLSvB0egFsE1xoAAAAjF0tAAwAAAKPMqcIiHTx8TCEhwVq5bLG3wwEwwtjtdk2eNFF5+YU6ePiYrFarQkNDdO+auxQ2JtTb4QG4BXCtAQAAMLKxBDQAAAAAAAAAAAAAjBIsAQ0AAAAAAAAAAAAAowQJYAAAAAAAAAAAAAAYJUgAAwAAAAAAAAAAAMAoQQIYAAAAAAAAAAAAAEYJEsAAAAAAAAAAAAAAMEqQAAYAAAAAAAAAAACAUYIEMAAAAAAAAAAAAACMEiSAAQAAAAAAAAAAAGCUIAEMAAAAAAAAAAAAAKMECWAAAAAAAAAAAAAAGCVIAAMAAACS2tratGvPPv3X797Urr1feDscACPUkWMndOFixajcf86JPH2+/9CQ1N3usx27dbqoeEj3Adyq/vjxNuUXFnk7jB55e+wDAACAe3y9HQAAAH15d8OHunLlqu5avUIpSQmdtq3f+JEiwsO1avliL0UHYCRpsVh08NBRnb9YLtklk5+fkpMSNGfWDBkMhn6fX3TmrM6dv6CHH1irwEDzMEQsWa025eYX6MzZEl2/fl12uxTg76/EhFjNnjlDvr5crgOe1n5tIUm+vj4KDQ1VZkaapmVMden5RcUlkqTYyZNkt9v19vpNSklK0NzZWT2Wd6WMOzruvz9/eGeDDAaDHnlonUt11zU0qL6+we2Y3t3wocaNjdKKpYs6Pd7TsV++clXhYWFu7wPwluF8ra6rb1DzV83dHvfEODLcYx8AAAC8i0+UAAAjnsFg0N59BzR5UrQCAvy9HQ6AEerjT3fIZDLpkQfXyc/XV6XnL6ixscml5K8kXblao6jICIWEBLtUfseuvfIzmbR00fwBxdvSYtHGj7bKarVp9cplGj8uSna7XWUXLurAoWNKTIjX2KjIAdXtyTiB0SgjPVUrli5Sq9Wqc6Vl2rFrr3x9fTQ1NcX9yuz2Tn/22Oe6lBkOFy5WyGJtlaWlVRcrLmnypOhhj0GSV44d8JTheq12iQf60lCOfQAAABhZSAADAEa85KR4Xaqs0uf7D2n1yqXeDgfACNTc3Kzyikp9/c6V8rsxEychPtatOmw2m+RisliSrrdYNJiPPnd/vl+NjU167NsPyBwQIMnxhZf4uFjFx7kXe18GGycwmvn5+io1JUlniktUWnbB7SRIT7Nru/Y5d2bgelJuXoGmpU1V07Vrys0r8EoC2FvHDnjKcL1W98fTfWkoxj4AAACMLCSAAQAjnslk0rLFC7T10x1KTUnqdclDq9Wqg4ePq7jknIxGo8aPG6uli+cr0GzWth171NDYpPvXfkOSlJdfqD37Dujeb9zlrO93b76jaWlTNXd2lvLyC3Uy75RarVaFhYZq4fy5Gj9+7LAdMwD3+Pv7y8fHqNz8Ao0bG9XjLN5ThUXKyy9US0uLjEajMqena8b0DEnSf//PH3T9eosk6Vevvqb77v26xo8b2+uY8upvX5e11SpJOl10VqtWLFFtXb3sdrsWzZ/r3GfOyXw1NjZp6eLOs2+bm6/rbEmp5s2Z6fxAuTd9jW2S9Ls33tHsrExdrLiky5evKCQkRCuXL1ZEeFiPcaalprhU57w5M3X23Hlda7rGh7wY9dra2mSzGmSz2XT0+EkVFJ1Rm63NcQ2wYK4mThjf63P37T+smEkTFB8X22uf61hGcvTrw8dyVFJyXlabTcHBQZo3e6biYmP6HKtcVVffoAvl5VqxbKG+am7Wexs+UmNjo0JCQpxlLJZWfXHwsM6WlMrk56f4uMlqs9k61eOJ66Guxy5JltZWbduxR+WVlWqztiktLUXZc2bLx8coqecxqL/z0vU58fGxLo/JQE/cea12Zexwd3ypravT1k92KD4+Vovmz+1xHOnrtdwVnhr72uPpaVyrqPySvggAAOAFJIABALeExIQ4JSXGadfeL/TIg/fJz8+vW5ntu/aqpcWiRx9aJz8/P+3Zd0Aff7pT96/9hhIT4vTp9l2yWCwymUw6f+GijEajzpddUOzkSbpaU6trTV8pKSFe9Q2N2vvFQX33iYcV4O+v/FOnZQ7s+0MfAN5lNBq1IHuO9u0/rNffWq+JE8YrI22KpqQkOZeADvD31+pVSxUZEaHqqzVa/8FHioqM0KToifrTJx/Vrr1fqKGxSd/8xl2SpE+27ex1THn6e09oyyfb5e9v0h0rHCsTnCk+p+279igrc5qCAs1qa2tTzok8zZ6Z2S3emtpa2e12TZgwrt9j62tskyRfHx+dzDulb97zNYUEB+vT7bu1Y/fn+tZ99/QYp6t15pzM191fX62wMaGD+88BRjCLpVVnS86pvKJSd65app2796m2rl4P3f9NmQMCdLakVBs3f6wH7rtb48ZG9VhH6fkymc0Bio+L7bXPdSwjSTt271NtbZ3Wrb1bgeYAnSkuUVjYGEl9j1Wuys0vUFxsjIKCghQUFKSoqAjlnjrdKQHz2Y7d+uqrZj368P0yBwTodNFZ7dq7T9ETJ0iSx66Huh67JOWfKtTXVq/U6lXL1NDYqM1bPlVra6uWLV4oqecxqL/z0vU57ozJQE/cea12ZexwZ3ypb2jUpo8+UcykaC3MniOpe1/q77W8L54e+6Tex7WWFgt9EQAAwAuM3g4AAABXLV28UC0Wiw4cPtZtW2PTNZ0tOa/FC7NlMplkMBg0d/ZMVX5ZpZraOsXGxshgMOpi+SVZrVaVV1Rq9sxMlZZdlCRduFCusDGhiogIU6ulVXa7XcdzclV9tUaZ09MV2mHGDICRKStzmh5+YK0yp6Wrtq5O23bu1bade5zbkxLjFRkRIUmKiozQ2KhIXaqs6rGu/saUniQnxTuSKKfPSJLKL1WqxdKi1CnJvcZss9p63eZOHAnxsQoNCZHBYNCU5ERdvlwtm61tUHXGx8aQ/MWodaqgSL969TW99vpbyj1VqJXLF2tsVKSKiku0aMFcBZrNMhgMSklOVMykiTp8NMdj+66rq1fx2XNakD1HQYGO/aROSdaYUMe1hjtjVU8sllYVni5WRtpU52MZaakqKCyS1eqYnVzf0KjzZRc7HWva1JROSeahvB6akpKkuNgYSVJoSIjmzZ6l/FM345O6j0GunJeOzxnImAz0pL/X6rq6+n7HDlfKtGtsatKmzVsVO3mS7lixxPlFts5l3L9OkYZu7OtrXKMvAgAAeAczgAEAt4ygQLMWz5+rXXv3KyU5sdO2uvp6SdLb723s9rz6+gZFhIdpcky0yi6Wy2g0KjgoULOypuv4iVxdralR2cVyJSbESZKioiKUPXeWTuTm60TuKUWEh2nNXXcoLIxECDDSRUVFaElUthbOn6Ode75Q0Zmzmj9vtkJDQlR2oVwncvNVfbVGFotFNluboqN7XtrQlTGlK6PRqGkZaTp1ukizZmaquPicEhPiFRDg361sRES4DAaDqq/WKD5ucq/H42ocQYGBzsf9/Hxlt9tltVnl42PySJ3AaJORnqoVSxd1euzCxQpJUlhY5/4dER7m3OYJDY1NN+od0+N2d8aqnhQWnVFra6v++PG2btuKikuUkZaq+oYGSVLYmM4xREVG6Er1VcfvQ3g9FBke3unv8PAxstvtamxqUnhYz2OQK+el43PcGZOBnrj6Wt3ep/saO1wp066g0JEoTYyP6zH5Kw3sOkUaurGvr3GNvggAAOAdJIABALeU9LRUFRWXaOeuz+Xj6+N8PDjI8YHfIw+uU0REzx94JCXE6dDR4zIYDEqIj5Wfn59iJkXrzNlSVX5Zpex5s51l587O0uyZmar8skrbd+7VsRO5WrV88dAeHACP8fHx0dQpSSo6c1ZtNruqqq7oo62facH8OVq5fImCAs364MOtvT7flTHFoO4fyk5LT9WRYydUdqFcJaVlWnPXqh6faw4I0JTkRJ3MO6XMaWkymTonaq1Wq3x9fV2Koz9d4/REncBoFHpjBm5dXZ2CAm/eQ7Omts65zRU9jQ0dhYQESZJq6xo63ZNXkttjVVd2u115+YVavHCesjKnddp24NBR5eYVKCMtVWNCHUncuvp6BQXdTJp2nTk4VNdDNXWd91NbWy+DwaCQ4O73b5cGfl5cHZOBnrj6Wu3K2OHO+JKRNkUXKi7p0x27te7eNT0uwezJ13JPjH19jWsSfREAAMAbWAIaAHDLWbFssRqbmlRdXeN8LDwsTEmJcfp8/0FZLBZJUnFJqfbuO+gsEx8Xq2vXmlVUXKKEG7N9E+JjdTI3XwH+/powbqwkqfpqjfbtPyy73a7oiRMUHBzc6cMQACNPXV293nl/ky6UO2aqtFqtOlVYpIkTxyssLFRWm2NZ0eTEBIUEB6nyyyrnLLeeuDKmBAaZ1Xhjxkt7GbPZrJTkRO3a+4XMAf6aFD2h130sXbxAQYFmbdi0RdVXb45nF8sr9Mbb76uwqNilOPrTNU5P1AmMRmFjQpU6JVlfHDii5uZmSY6+UV5Rqey5s1yup6exoaPwsDAlJyVo/8EjunbtK0nSufNlamhsdGf+q5AAACAASURBVHus6qrsQrnq6huUlJjQbVtKUqKu1tSq4lKlxoSGKD5ucqdjLTpzVmUXyp3lh/J66HRRsXO8bmhs1OFjxzUtPVW+vj1/R32g58WdMRnoiSuv1a6MHe6ML8HBwVp3zxqZzQH649Ztamxs7BaXJ1/LPTH29TWuSfRFAAAAb2AGMADglhM2JlRz58zUgYNHOz1+x8plOnT4mN59/0NZbTaZzQGaOyvLud1sDlD0hPG6WluriePHSZIS4mK1e+9+pU6JdS6xZjQaVVdXrzff3SB7W5smjB+vWVmZw3eAANwWHBykuMkx2vv5AbVarTIajYqZFK01dy6QJEVPnKCZWdP1/saPZPLzU2JivJKTEmTt475+/Y0pM6an6+NPd+q137+t5csWKjHe8cWSzGnpKjpzVgvmze516UZJ8vc36YH77tHJ3FPatmOPWiwtstslf39/Tc9I05TkJJfi6E9PcQ62TmC0WrlskY4eP6ENm7bIarMqJDhE993zdY2NinS5jt7Gho7uWLFEh4/l6IMPt8hqsykoMFDz583W5Jhot8eqjk7mndKE8eMUEhzUbVtUVITCxoTqZF6BJkVP1J2rlmvfgUN6450NCvA3KTIiQqlTknXt2jVJ7l8PnSoo0qmCok6P/cWfPdlj2fS0VOWcyNOuPV/I2mpV2tQUZc+d3WNZaWBjeDtXx2SgJ66+VrsydrgzvoSEOJLAH3y0VZu3fKYH7runWxlPvpZ7YuzrbVxrv3c4fREAAGB4GTZv3mz3dhAAAADAaFFeUanNWz7Rdx59qNPSqgCA4ceYDIwM9EUAAIDhxRLQAAAAgIfY7XYdyzmphPg4PtwEAC9jTAZGBvoiAADA8GMJaAAAAMADThUW6eDhYwoJCdbKZYu9HQ4A3NYYk4GRgb4IAADgHSwBDQAAAAAAAAAAAACjBEtAAwAAAAAAAAAAAMAoQQIYAAAAAAAAAAAAAEYJEsAAAAAAAAAAAAAAMEqQAAYAAAAAAAAAAACAUYIEMAAAAAAAAAAAAACMEiSAAQAAAAAAAAAAAGCUIAEMAAAAAAAAAAAAAKMECWAAAAAAAAAAAAAAGCVIAAMAAAAAAAAAAADAKEECGP8/e3caHNV15///c7tbLbWkllqtfUFoRaxiFWIzq3HGjkkM8YLtsWPP/DKT+k3yKFXzYB79qyaVmkd5MJWq8dR/xp6YjMGOHds44IXNrGaxAYEkEJIQmwDt+9bq7vt7ILuNjIRaQkKieb+eWH3vued8z9G9x3Z/dc4FAAAAAAAAAAAAECJIAAMAAAAAMAnOnD2vw8dOTHYYAaON59Q3Z3Xteu0ERgTgQfP7/Tpw8Ij+/7f+pAOHjk52OAAAABgj22QHAAAAAADAg/LuBx+roaFJkmQYhiIjHcrLzdaK4iJZrQ/2b6Rb29vV1tZ+zzJer0/nSst1qapaPb29kinZrFalp6dq0fxCuVwxI7Zjmqa2//kj5edmq2jxgvuK504VldWSpMxp6UG3ATxM7pwvLBaLYmKcmjUzX4vmz5NhGJMcXXDe/eBjJSUmaN3qlUGVr7hUpctXrmnrs88oMtJx13medQAAgIcDCWAAAAAAwCNlzuwCrVu9Ul6vTzdv39Znew7IarVoRXHRZIc2SF+fRx9+slter08b161WcnKiJKmxsVnHT34jr88bfGWmOUFRPuA2gAfsu/nC5/Op9uZtffrFfvl9/imR/Nx34JDC7HatXrls3OpsaGpWQrxbTmf08IUegWd9IsYWAADgQSIBDAAAAAB4JNlsVmVmpCs1OUktLa2THc5dvjx8TB0dnfrbF5+VIyIicDwhwa2nn9oYdD2GYeilF7ZMRIgPtA1gMlmtVmVOS9fMglxVXKqaEgng3j6PxjsV6/P5pHusbn5UnvWJGFsAAIAHiQQwAAAAAOCR5Pf7daP2lm7drtf6tasCx9/atkNLlyxU1eUr6urs0ksvbFHZhQqdL72gvr4+WSwWFc6brfnz5gy6ZvGCQl2vvan6+gY5nU6tX7tK7jiXJMnj6dfR4ydVVV0je1iYsqZPk9/nGza2np5eVVXXaOmShYOSv8M5cuykcnOmKzUlWZLU2NSs82UXAtu+Hjl2UhnpKcqanhl0PF6vV8dPnlZl9WVZLBYlJyVq9aplinTcvS3sUG2MNCYj1X++9IJKzpep3+uVKyZGK5YVBVZBA5PFNCWL1Rr4PNJ9vO2dP2tmQb6amlt063ad/H6/5s4uUNHihbJYBrad9/l8+vp0icorLsnv8w/c78uLAs+zdPe81N7ZKW//wC4AFyuqtGHdY5pVkD9i/Pd6Lv/rf/5Xvb19kqQ/vPGmNv/kSX2x7+Bd8+FYnvWjx0/qUuVl2cPtSnDHKTw8XJ2dXXpm05NBjeNb23Zo9sx8Xb1eq472TrlcsXpiwxqdKTmv6itXZbNYtXxZkfJysoKub7iY3/jvt8c0tgAAAFMJCWAAAAAAwCOlrLxCZeUVgc9zZs1Q9vRpgc82q1VnSkr19JMb5YodeMduRHi4Nm5YrXi3W41NzfrzXz5RQrxb6WmpgWtKzpfpp5v+Rs7oaH2+90vt+/Kwntu8SZL0xb4v1d3do5e3/kyOiAhdrKjSgUNHlJaaMmSMzS0tMk1TKSlJQfXp4qVKxcXFBhJG7e0dKiuvCCSAa65clcMREUjYBBPP3gOH1Nfn0csvbFFYWJgOHvlKn36+Xz975sdDxvDDNkYak3vV39beoUNHj+v1V7cqIjxcpWUX5YgcOREOTBSv16trN2p18VKVFi8oDBwP5jk5e65Uf7Nxnf5m4zq1trZr5+7P1N/v06oVSyVJ+788opbWNr3ws5/KERGhquoafbjzUz27+WklJSZIGnpe2vXZXoWH2/X4utVB9+Nez+X/ee1lHTh0VO0dnfrpj380bLtjedbb2zv00vNbFBnp0KXKau09cFjpacHPNzarVWXll/Tclk2KiorUhzt3672/7FTxkkVavWq5Si9UaO/+g0pPTZbD4QiqvuFi/uXfvzqmsQUAAJhKLJMdAAAAAAAAD9Kc2QX61S//Tv/3H17Ti88/o8bmFu3+fN+gMlmZGYFkhyTl5mQp3u2WJCXEu5WYEK+bt+oGXZOdlakYp1OGYWhGXo7q6xvl8/nV1t6hK1eva+XyIkU6HDIMQ7Nm5geSx/diaPBWrNve+bP+8Mab+sMbb+rjXZ+Pqf/BxNPR2aWq6itataJYdrtdhmGoaPFC3bpdp+ZRbJc93JiMVH+/p1+maer0mXNqbGpW4bzZinE6x9Rf4H6UlVfoD2+8qTf+620dPHRMRYsXaMmi+ZKCf04KZuRpWka6JMnlilHRooU6V1ouv9+v1tY2VVRWD3oe8/NylJGeqpNfnxkUyw/npbEa7rkcTjDtDvusd3SqqvqKVq4oVlRUpAzDUMGMPE2flhG4NthxnJGfI6czWhaLRZnTMuTz+TVndoEkqSA/V16vT/UNTUHXN9pxAAAAeJiwAhgAAAAA8EiyWCyKd7u1dPFCfbL7C3V1dSsqKlKSFBUZOajs1Ws3dPZcqRqbmuXxeOTz+ZWWljyozJ3XhIXZZJqmvD6v2trbJUmu2NhB5RPi3WpobBoyNrc7ToZhqK6uXhnp3ydmX3npOUnSZ3sOqM/jGVO/g4mnta1NkrT9vQ/vvr6tPbC160iGG5OR6s/OylRx0SKdPVeqs+fK5I5z6akfPS6X6/6TX8BozJldoHWrV2rfl0d04+ZNFc6ZJePbd+QG+5zEu+MGnXPFxcrv96urq0vtHZ0Dx1yDnyl3nEvXrtcOOvbDeWmshnsurVb7iOVHW2d7e4eku+cbd3yc6usbJAU/jne2YbNa5YgID/wuwmw2GYahfu/I88tQ9QUzDgAAAA8TEsAAAAAAgEeazzfwrke/f+iVX3V1Dfpk9xdavmyJ1q99TFGRDv3l491B1x8bM5C0bG1rCySYJd1zJa0jIkIz8nJ09lyZ5s6dpXD7vRMShmHI5/3+Hb49vb33FU/0t8dfen6L3O7gkr2jEUz9RYsXaPHCQt26Xae9+w/pm7PntOGOdzUDD9Kq5Uv1px3v68hXJwNbqwf7nLT84FlvbWmTxWJRVFSUfH5z4Fhrq6Iiv3+/dnNLq2Ji7r3q/Yc7BExFMTHRku7uX0tLS+Dn8Z5vxqO+h2FsAQAA7oUtoAEAAAAAjySfz6+6ugZ9deIbZU5Ll9MZPWQ577cJ4rycbDmjo3Trdt2wK3eHEhvjVNb0aTr61Sn19PRIkiouVenqtRv3vG71Y8sVFR2pDz76q+rqGwPHe3p71d3dM6is2+VSdc0V+f1+9Xk8Ki2/eF/xxLlcys2ZrsPHjsvz7UrjyuoaHTpyPOh+38tI9Tc2NevIsZMyTVNpqSmKjo4elDwCHrTwcLtWrShWWXmFrt0YWJkb7HNSfrFStTdvSZJaW9t16vQZFc6dJYvFIldsjApm5A16Hiura3Sj9paKixbdM6bIKIc6vl1B7BnjjgATzel0KjsrU0e+Oqmurm5JA/2rvWML/fGeb8ajvodhbAEAAO6FFcAAAAAAgEdKWXmFysorZLEYio6OUm5Otoq+fafnUNJSU7RwwTy9/+EnsoeFKScnS3m52fLeseJ2JE9sWKsjX53Qth0fKCLcrni3WwUz8tTV1TXsNeF2u559ZpNKSst04OAR9fT1ymJYZDEMJSUlau6sgkDZVSuXat+BI3rz7e2Kjo5Sfl6OGhqa5PP5ZLVaxxTP4+vX6MTJb/Tu+x/L6/PJ4YhQ0aIFQfd5JPeq32KxqLW1TX969wOZfr9SkpO1aEHhuLUNjEVBfq4uXqrS/i8P66Xnt8hutwf1nMydU6CS8+X6Yt9B+f1+zZlVoKVLFgbOr1+zUl+fPqsPPtolr88rZ7RTmzc9qcSE+HvGM3/ebH36+X69+cftWrtmhXKypk9Iv+/XExvW6MhXp/TOe3+R3W5XXk6WcrOmD9qpYLznm/ut72EZWwAAgOEYO3fuNCc7CAAAAAAAACDUbHvnz5o7e6YWLpg32aFMKR/u3K3EhHitWlE82aEAAACEJLaABgAAAAAAADDuTNPU53u/VEVltUzTlGmaqqy6rNt19Zo7Z9ZkhwcAABCy2AIaAAAAAAAAwLgzTVPT0lN1vvSCjp/8Rl6vVzExTv3kqR/JFRsz2eEBAACELLaABgAAAAAAACZAc0urHBHhcjgckx0KAAAAHiGsAAYAAAAAAAAmgDvONdkhAAAA4BHEO4ABAAAAAAAAAAAAIESQAAYAAAAAAAAAAACAEEECGAAAAAAAAAAAAABCBAlgAAAAAAAAAAAAAAgRJIABAAAAAAAAAAAAIESQAAYAAAAAAAAAAACAEEECGAAAAAAAAAAAAABCBAlgAAAAAAAAAAAAAAgRJIABAAAAAAAAAAAAIESQAAYAAAAAABPu1Ddnde167WSHAQDjirkNAABMRbbJDgAAAAAAgAfl3Q8+VkNDkyTJZrMqJiZGhXNmae6cmZMc2b2Zpqntf/5I+bnZKlq84IG3f+e4WSwWxcQ4NWtmvhbNnyfDMIKqo6KyWpKUOS19wuIExpvX69O50nJdqqpWb2+vTFOKCA9XTnamFi+cL5vt4fxqbar0ayLntre27VBXV/eQ52JjnHrlpefGpZ2xzG0PKjYAAPDoejj/KxUAAAAAgDGaM7tA61avVL/Xq8s1V7XvwCHZbFbNLMif7NAC9h04pDC7XatXLvv+oGlOXkD6ftx8Pp9qb97Wp1/sl9/nn5SENPAg9PV59OEnu+X1+rRx/RolJyXINE1dvXZdX534RjnZWUpMiB9z/UM+5w/ARPfrXh7k3Pb6K1sDP/919x5ZbRY9+cSGCWlrtKZybAAAIDSQAAYAAAAAPJLCbDYV5OfqUmW1aq5em1IJ4N4+j+5MiRiGoZde2DJp8dzJarUqc1q6ZhbkquJSFQlghKwvDx9TR0en/vbFZ+WIiJA08CxmTc9U1vTM+67/h8/5gzLR/bqXqTy3AQAAhBISwAAAAACAR5rf75fPa+itbTu0dMlCVV2+oq7OLr30whb5fD59fbpE5RWX5Pf55YqJ0YrlRUpNSQ5c/9a2HZo9M19Xr9eqo71TLlesntiwRmdKzqv6ylXZLFYtX1akvJwsSRqxzjf++215+72SpIsVVdqw7jHNKsjXkWMnlZGeEkjQBBvb4gWFul57U/X1DXI6nVq/dpXccS5J0vnSCyo5X6Z+r3fg+mVFSk5ODGrcTFOyWK2Bz0eOnVRuzvRA+41NzTpfdkHrVq8c8nqv16vjJ0+rsvqyLBaLkpMStXrVMkU6HPcdG3C/enp6VVVdo6VLFgaSpMMZ6d4f6l7+8K+fDvmcT8ScM9Z+DTUnjvTcll2o0PnSC+rr65PFYlHhvNmaP2+OpODmtq9Pl8hms2pB4dxAHOUXKtTR2aniosUjtj8awYx1MGV+aDzmrpH6OdTvZrT3BXMsAAChjQQwAAAAAOCR5PH0q6r6sm7U3tITG9ao5WSrzpSU6uknN8oVGyNJ2v/lEbW0tumFn/1UjogIVVXX6MOdn+rZzU8rKTFBkmSzWlVWfknPbdmkqKhIfbhzt977y04VL1mk1auWq/RChfbuP6j01GQ5HI4R6/zl37+qXZ/tVXi4XY+vWx2It+bKVTkcEYEEcLCxlZwv0083/Y2c0dH6fO+X2vflYT23eZPa2jt06Ohxvf7qVkWEh6u07KIckfdOCEkDiYlrN2p18VKVFi8oDBy/eKlScXGxgcRIe3uHysorhk0A7z1wSH19Hr38whaFhYXp4JGv9Onn+/WzZ3485tiA8dLc0iLTNJWSkjRi2Xvd+8Pdy8M95xMx54y1Xzar9a458V7PrTTwHuGNG1Yr3u1WY1Oz/vyXT5QQ71Z6WmpQc1u43a6jJ05pzqwChYWFye/368Sp0yosnBNU+6MRzFgHU+ZO4zV3jdTPoX43o7kvPP1e5lgAAEKcZbIDAAAAAADgQSorr9Af3nhTb779js6VXdD6tauUn5cjScrKzAh8md7a2qaKymqtXF6kSIdDhmEoPy9HGempOvn1mUF1zsjPkdMZLYvFosxpGfL5/Jozu0CSVJCfK6/Xp/qGplHVeS+jqSc7K1MxTqcMw9CMvBzV1zfK5/Or39Mv0zR1+sw5NTY1q3DebMU4nSOO2xv/9bYOHjqmosULtGTR/KBjvlNHZ5eqqq9o1Ypi2e12GYahosULdet2nZpbWkcdGzBRfF7ffV0/mnt5Iuac++3XnXPiSM+tJOXmZCne7ZYkJcS7lZgQr5u36oJqS5IKZuTJkFR1+Yok6fqNm+rp7dPsgvyg2g9WMGM9lvl6POauYPt55+/mO8HeF8yxAACEPlYAAwAAAAAeKXNmFwy7KjUqMjLwc3tHpyTJ5XINKuOOc+na9dphr7NZrXJEhMswDEkD7xo2DEP9Xu+o6ryXscYWFmaTaZry+rxKSHCruGiRzp4r1dlzZXLHufTUjx6XyzU4ofCd78Zt35dHdOPmTRXOmRXo42i1trVJkra/9+Fd59ra2pWdlTmq2IDx5nbHyTAMNTY1K2v6tDHXM5rnbCLmnPvt153tjPTcuuNcunrths6eK1VjU7M8Ho98Pr/S0obfLvmH7PYwzcjP1cWKSs0qyNeFikrlZE+Xw+HQ9dqbI7YfrGDGeizz9Wjn1aEEM87S4N/Nd4K9L8YjTgAAMLWRAAYAAAAAYAgxMQOroVpbWxUV+f02qs0trYFzE1WnoXsnVscrtqLFC7R4YaFu3a7T3v2H9M3Zc9qwdtU9r1m1fKn+tON9Hfnq5KBEumEYg1YV9vT2DltHdNRAkuKl57fI7R46aTOW2IDx4oiI0Iy8HJWcL1Ph3Fmy2+2Dznu9XtlsA1+rjXTvD3cv//A5n4g553769UMjPbd1dQ36ZPcXWr5sidavfUxRkQ795ePdg8qMNLdJ0rzZs7Tj/Y/U2NismivX9JOnngiq/dEIZqzH+vu437lrPPt5L8yxAACENraABgBMab/5zW/0L//yL5MdBgAAeAS5YmNUMCNPR786pZ6eHklSZXWNbtTeUnHRogmtMzLKoY5vV595PJ4Jia2xqVlHjp2UaZpKS01RdHT0oCTHcMLD7Vq1olhl5RW6duP7VXBul0vVNVfk9/vV5/GotPzisHXEuVzKzZmuw8eOB/pXWV2jQ0eO31dswHhavWq5oiId+uCjXWpsag4cv36jVtu2v68LFZWS7n3v3+te/uFzPhFzzv3064dGem69voEVx3k52XJGR+nW7To1NA7ehnqkuU0aWEWblJSgz/bul9MZpfT01KDaH41gxnosv4/xmLvGs5/DYY4FACD0sQIYAAAAAIBhrF+zUl+fPqsPPtolr88rZ7RTmzc9qcSE+Amtc/682fr08/1684/btXbNCuVkTR/32CwWi1pb2/Sndz+Q6fcrJTlZixYUBnVtQX6uLl6q0v4vD+ul57fIbrdr1cql2nfgiN58e7uio6OUn5ejhoYm+Xw+Wa3Wu+p4fP0anTj5jd59/2N5fT45HBEqWrTgvmMDxkt4uF3Pbt6kknNl2rPvoPo8fTJNKTw8XPPmzNKMvFxJuue9f697eajnfCLmnLH2ayj3em7TUlO0cME8vf/hJ7KHhSknJ0t5udny3rE6Opi5TZLmzZmlfQcOa+XypUG3P1rBjPVofx/jNXeNZz8nMk4AADB1GTt37jQnOwgAAIbzm9/8RuHh4frd73432aEAAAAAAAAAADDlsQIYAPDQamxs1I4dO3ThwgWFh4eruLhYP/vZzwLvrPrHf/xH5ebmymKxqK6uTlFRUXr55ZeVn58vSers7NT27dt1/vx5xcTEKDU1VfX19fL5fPrtb3+r3t5e/frXv9aKFSv0+uuvS5Lee+897dmzR7/97W+VnJw8YgwjtSFJvb29+uijj3TixAn5fD7NmDFDW7duVUJCwiSMKgAAAAAAAADgYcY7gAEADyW/36/f//73KikpkcfjUUdHh/bu3auDBw8OKnf58mU9//zz+rd/+zfZ7Xb953/+p7xer0zT1B/+8AfV1tbqX//1X/Xb3/5W8+fP182bN8cthmDbeOONN7Rv3z51dnaqp6dHJSUl+vd//3d5vd77HygAAAAAAAAAwCOFFcAAgIeSxWLR008/LYfDoZkzZ6qurk6///3vVV5erg0bNgTK5efnKzMzU5I0e/Zs7dq1Sw0NDert7VV1dbVeeeUVxcbGSpJWrVqlL774Qn6/f1xiuHLlyohtVFZWqqysTMXFxXruuecUERGhjz/+WHv27FF1dbUKCgrGc9gAAAAAAAAAACGOBDAA4KEVERGhgwcP6p133lFnZ6e8Xq96e3vvKvOd77Zl7uvrU319vSTJ4/EMKu/1emWxDN4g486EcH9/f9AxBNNGQ0ODJOnEiRM6ceLEoHL19fUkgAEAAAAAAAAAo0ICGADwUDp9+rT+4z/+Q0899ZR+8YtfqKGhQb///e+Dvj4xMVGS9MUXXyg3N1fJycn64osv1NDQoOTkZEkDCWPDMFRZWamWlhZ1d3fr9OnTQccQTBtxcXGSpKKiIj333HOy2+06fPiwLBaLHnvssfsbJAAAAAAAAADAI4cEMABgymtoaNAvfvGLQcdeeeUVSdLu3bu1e/du2Ww2RUZGBl1ndna2cnNzVV1drd/97neSBhK+DocjUMZmsykrK0s1NTX653/+Z0lSRkaG2tvbJX2/sne4GIJpo6CgQPn5+Tp16pROnToVOD59+nQ9/vjjd61GBgAAAAAAAADgXvhWGQDwUFq4cKHWrFkjh8OhmJgYvfbaa4qJiQn6esMw9Ktf/UrFxcUKDw+Xy+XS66+/LqvVqqioqEC51157TdnZ2QoPD9eaNWtUXFwcOLdkyZJ7xhBMGxaLRf/0T/+ktWvXyu12Kzw8XIWFhfr1r39N8hcAAAAAAAAAMGrGzp07zckOAgCAybB9+3YlJiZqyZIlCgsL0759+/TJJ59o5cqVeu211x6aNgAAAAAAAAAA+A5bQAMAHkltbW06cuSIPB6P3n333cBxi8WijRs3PjRtAAAAAAAAAABwJ+uLL774/012EAAAPGgRERFasGCB2tvb1draKmngnb3/8A//oOnTpz80bQAAAAAAAAAAcCe2gAYAAAAAAAAAAACAEGGZ7AAAAAAAAAAAAAAAAOODBDAAAAAAAAAAAAAAhAjbZAcAAAAAAAAAAGPl9/t18PAxVV2+orzcbK1bvXLQ+VPfnFVyUqIyp6VPUoQAAAAPFglgAAAAAAAAYAher0/nSst1qapavb29Mk0pIjxcOdmZWrxwvmy2h/+rNdM0tf3PHyk/N1tFixeMW713jl1Pb69kSjarVenpqVo0v1AuV8y4tVVxqUqXr1zT1mefUWSkQyXny3TufLle3vozWSwWVVRWS9KEJoDf2rZDXV3dQ56LjXHqlZeem7C2AQAAfujh/69UAAAAAAAAYJz19Xn04Se75fX6tHH9GiUnJcg0TV29dl1fnfhGOdlZSkyIn+wwx4dpDvq478AhhdntWr1y2ZiqGzR261YrOTlRktTY2KzjJ7+R1+e975Dv1NDUrIR4t5zOaEkDSW1T5g+7FXC//RvK669sDfz81917ZLVZ9OQTG8atfgAAgNEgAQwAAAAAAAD8wJeHj6mjo1N/++KzckRESJIMw1DW9ExlTc+c5OjGj2EYeumFLYOO9fZ5NEzuNChDjZ0kJSS49fRTG++j5qH5fD7JMAKfFxTO1YLCucOWv9/+AQAATHUkgAEAAAAAAIA79PT0qqq6RkuXLByUwByKz+fT16dLVF5xSX6fX66YGK1YXqTUlORAmbe27dDsmfm6er1WHe2dcrli9cSGNTpTcl7VV67KZrFq+bIi5eVkjan8kWMnlZszPdBmY1OzzpddCLwL961tO7R4QaGu195UfX2DnE6n1q9dJXecnNLJJQAAIABJREFUK3B9RnqKsqZn6o3/flve/oEVuhcrqrRh3WNqaW2TaZpauawo0KczJaXq6OjU6lWDV9GOZuwkyev16vjJ06qsviyLxaLkpEStXrVMkQ5HUOP7X//zv+rt7ZMk/eGNN7X5J0+qobFJJefL9fOXn7+rvaH6N6sgf8Q43tq2Q0uXLFTV5Svq6uy6K2l+v/0cqv7R3gfnSy+o5HyZ+r3egXFaVhRYfQ0AAB4tlskOAAAAAAAAAJhKmltaZJqmUlKSRiy7/8sjunrthl742U/1d6++qMJ5s/Xhzk9V39AYKGOzWlVWfklPblyv11/dKsnUe3/ZKXdcnF7/261auLBQe/cfVE9Pz5jKX7xUqeaW1kB77e0dKiuvGNR+yfkyPbayWK+9slXR0VHa9+XhwPmaK1fV1Dxw/S///lVlZ2VqZkGefvXLv9OsgnwluN0qOVeqru6B9vx+v86cPa/YGOd9jZ0k7T1wSE3NzXr5hS169aXnFBERrk8/3x/0+P6f117WnNkFmjYtXb/65d8pPS31nu0N1b9g4rBZrTpTUqo1q5aPOvk71vpHcx+0tXfo0NHj2vLMj/Xzl59Xbk6WHJEjJ+ABAEBoIgEMAAAAAAAADMHn9d3zfGtrmyoqq7VyeZEiHQ4ZhqH8vBxlpKfq5NdnBpWdkZ8jpzNaFotFmdMy5PP5NWd2gSSpID9XXq9P9Q1NYy4/kuysTMU4nTIMQzPyclRf3yifzx/UtXm5WXJEROjixUuSpBs3b6nP06eCGXnDXmPIGPR52zt/1h/eeFN/eONNfbzrc0lSR2eXqqqvaNWKYtntdhmGoaLFC3Xrdp2aW1pHNb73Y6Q4vpOVmSFXbMwDrT/Y+6Df0y/TNHX6zDk1NjWrcN5sxTjvTtADAIBHA1tAAwAAAAAAAHdwu+NkGIYam5qVNX3asOXaOzolSS6Xa/D1cS5du1476FhUZGTgZ5vVKkdEuIxv31sbZrPJMAz1e71jLj+SO+sLC7PJNE15fV5ZrfYRr7VYLJo7Z5bKLlZo0cJCVVZeVk52liIiwu8q+93Y1dXVKyP9+9W4r7z0nCTpsz0H1OfxSJJa29okSdvf+/Cuetra2mW1WiUFN773Y6Q4vtsq+84xfFD1B3sfJCS4VVy0SGfPlersuTK541x66kePy+UafcIaAAA8/EgAAwCmvP7+fjU3N6unp0feUXzBAYQSm82myMhIxcXFKSwsbLLDAQAACGmOiAjNyMtRyfkyFc6dJbt9cJLU6/XKZrMp5tstkFtbWxUV6Qicb25pDZx7EAzDGLRauae39/7q+8HqXUmaO7tAp745q6vXbqi65qqe+tGGIa/9buzOnivT3LmzFG4fPsEcHTWQ3Hzp+S1yu113nW9tax/45ziP7w/7N1Ic92ui6/9O0eIFWrywULdu12nv/kP65uw5bVi7asLaAwAAUxcJYADAlObxeHTr1i0lJSUpPj5eNhv/6sKjyev1qr+/X7W1tUpLS7vrS0gAAACMr9WrluvDnbv0wUe7tHHDGiXEuyVJ12/Uau+Bw1q2dLFmFeSrYEaejn51Spue2iiHw6HK6hrdqL2l57ZsemCxul0uVddc0dw5M9Xv9aq0/OJ91RcZ5VDLt1sTezwe2e12ORwO5efl6MCho3JEhCs9LWXY61c/tlwf7tytDz76qzasXa3kpARJA4np7u4eWW0DK3vjXC7l5kzX4WPH9eQT62W321VZXaNbt+q0etUyuWJjJmR8f9i/keK4XxNdvyQ1NjXrYkWVlhcvVlpqiqKjowclzQEAwKOFb9EBAFOWx+PRzZs3lZWVNdmhAJPOZrPJZrMpKytLV65cUXp6OiuBAQAAJlB4uF3Pbt6kknNl2rPvoPo8fTJNKTw8XPPmzNKMvFxJ0vo1K/X16bP64KNd8vq8ckY7tXnTk0pMiH9gsa5auVT7DhzRm29vV3R0lPLzctTQ0CSfzxfYRnk05s+brU8/3683/7hda9esUE7WdElS4dzZqrhUpeVLFwe2IR5KuN2uZ5/ZpJLSMh04eEQ9fb2yGBZZDENJSYmaO6sgUPbx9Wt04uQ3evf9j+X1+eRwRKho0YLA+YkY36H6N1Ic92ui67dYLGptbdOf3v1Apt+vlORkLVpQOG71AwCAh4uxc+dOc7KDAABgKHV1dYqJiZHDwV8tA3fq7u5WZ2enkpKSJjsUAAAAPEJu1N7Szl2f6ecvv6CoqLG9DxcAAAATzzLZAQAAMJzu7m5WOAJDsNvt6u7unuwwAAAA8AgxTVPfnClRdtZ0kr8AAABTHFtAAwCmLJ/Pxzt/gSHYbDZ5vd7JDgMAAACPiLILFTp+8hs5ndFav2bVZIcDAACAEfCtOgAAAAAAAIBhzZlVoDl3vLcXAAAAUxtbQAMAAAAAAAAAAABAiCABDAAAAAAAAAAAAAAhggQwAAAAAAAAAAAAAIQIEsAAAAAAAAAAAAAAECJIAAMAMApff/21rl27Nurr9uzZo4qKigmICKHg8uXLqq2tnewwAAAAAAAAAIQA22QHAADAeHnvvffU0NBw1/H58+dr1apV49LGpUuXJEmZmZkyTVPvvvuu8vLytGTJknte19DQoLi4uKDb8fv92rVrl4qLi5WUlKQ//elPys/PV3Fx8aByR48e1bVr1/Tiiy9Kkvr6+nTixAldvXpVkhQWFqbc3NxAfLt27dKSJUuUkpISdCyYWH19fTpy5Igk6dVXX53kaAAAAAAAAAA87EgAAwBCypw5c7R27doH1p5pmjJNc9zrLS8vV2trq9xu96iu++yzz2S327V161aFhYWppqZGHR0dMgxDkpScnKxDhw7p+eefH/eYMTYlJSXq6OiQJJ08eVJLly6d5IgAAAAAAAAAPMzYAhoAgDEyDEMvvviiioqKxr3ukpISLVy4UDZb8H+r1dPToxs3bqigoEBhYWGSpOzsbBUWFgbKzJ8/X62trWw3PEV0dHTo1KlTgc93JoMBAAAAAAAAYCxYAQwAeGT88Y9/1MKFC3Xjxg3V1dUpJiZG69atC6yy9Xq9OnbsmCorK2W32xUfH6/w8HB1dnbqpz/96ZB1Hj16VOnp6crKypIklZaWqqSkRF6vVzExMVqxYoWSk5MlSb29vdq9e7fq6urkdDq1fv36IVf4Njc3q62tTfn5+aPqX3h4uKxWq86dO6fExEQ5nc67ytjtdmVnZ6u6ulrp6emjqh/jb+/evYM+ezweHT58WE899dQkRQQAAAAAAADgYUcCGAAQUsrKylRWVjbo2E9+8hNNmzYtkBz9yU9+IqfTqS+++EL79+/Xs88+K2kgGdfR0aGtW7cqMjJSly5d0r59++6ZKK2pqVFERISysrLU1tamQ4cO6bXXXlNERIRKS0vlcDgCZSsrK7V582bFxsZq37592rt375BbMd++fVtut1vh4eGj6rvFYtGyZct07Ngxbdu2TampqZo9e7ZmzJgR2AJaklJTU1VeXj6qujExNm/ePNkhAAAAAAAAAAgxJIABACFlpHcAZ2VlKSYmRpKUn5+vzz77TD6fT93d3aqurtbmzZsVFRUlSSooKFBlZaV8Pl9Qbff398s0TZ0+fVozZswYtPWyJOXk5MjlcgXa3rVrl7xe713bPHd1dSk6OjroPt9pwYIFysjI0MWLF1VZWam9e/fq2rVr2rhxY6BMdHS0uru7x1Q/AAAAgNBz5ux5dXZ367EVxZMdCgAAAMYBCWAAwCPlzsRqWFiYTNOU1+tVe3u7JAUStN+Jj49XfX19UHUnJCSouLhYJSUlKikpkdvt1pNPPhmo87vEsjSwFbNpmurv7w/qPb92u33IRLTP57trpXBCQoJWrVql5cuX68svv9TFixdVXFwcSHxLGrQiGAAAAMDd3v3gYyUlJmjd6pWTFkOfx6PjJ77Wles3JFOyh4UpLzdbSxbNH9f/pm9tb1db28D/E5mmqe1//kj5udkqWrxgTPW9tW2HurqG/qPT2BinXnnpuTHHCgAAgJGRAAYAQAokR1taWhQZGRk43tLSMqp6lixZokWLFunWrVvau3evzpw5o3Xr1o2qjqioKHV2dg46lpiYqIaGhrvKNjQ0KCkpach6rFarZsyYoYsXL8rv9weOd3Z2DtqaGpPnww8/1M2bNwcdy87O5h3AAAAAkCR9+vk+2e12vfT8FoXZbKq5ck0dHZ2B5O++A4cUZrdr9cpl49uwad7X5a+/sjXw819375HVZtGTT2y436gAAAAQJMtkBwAAwFTgdDqVnZ2to0ePqqurS5JUVVV1V3LuXhobG3X06FGZpqm0tDQ5nc5ByeRgpaSkqLm5WX19fYFjixcv1u3bt3XhwgX5/X75/X6dO3dOTU1NWrhwoSSptbVV7733nq5fvy5pYEvqsrIypaWlDVrZfOvWLaWkpIw6Loy/xx9/fNBnu92uxx57bJKiAQAAwFTS09OjG7W3VJCfq7Bvdw3KzspU4bzZgTK9fR55PJ5xbdcwDL30wpYxr/4FAADA5GMFMAAgpJSVlamsrGzQsdTUVG3ZsmXEazdu3Khjx45px44dstvtys3NVXZ2tnp7e4Nq22KxqKWlRe+88478fr9SUlICydnRcLvdio2NVWVlpebOnStpYIXyc889p0OHDumrr76SaZpKSEjQ5s2bA9taR0dHKzMzU4cOHZLX65XFYlFGRobWrFkTqNvj8aimpkY//vGPRx0Xxp/T6VRRUZFOnTolSZo/f76cTuckRwUAAICReL1eHT95WpXVl2WxWJSclKjVq5Yp8tuddt7atkOLFxTqeu1N1dc3yOl0av3aVXLHDfxh5vnSCyo5X6Z+r1eumBitWFak5OTEQW2Eh4fLarXoXGm5khIT5HRGDzr/xn+/LW+/V5J0saJKG9Y9plkF+Tpy7KRyc6YrNSVZktTY1KzzZRcCW1l7PP06evykqqprZA8LU9b0afL/4HUzR46dVEZ6irKmZ0oaePXM16dLVF5xSX6ffyDm5UWBNiZi/JYuWaiqy1fU1dmll17Yore27dDsmfm6er1WHe2dcrli9cSGNTpTcl7VV67KZrFq+bIi5eVkBT3GAAAAocrYuXPn/e3pAgDABKmqqlJeXt6kxvDRRx8F3qn7IJWWlurMmTN68cUXg3pHcLBOnTqlmpoaPf/88+NWJ+5PX1+fduzYIUn6+c9/HvR1U+H5AAAACGX3egfwZ3v2q6/PoyefWK+wsDAdPPKVmppa9LNnBv7Qcts7f5Yk/XTT38gZHa3P936pjs5OPbd5k9raO/Sn7e/r9Ve3KiI8XKVlF5WVNU0xQ/wh4NlzpTpy7KQMw1BqSrLmzJqhGfm5gS2gd322V+Hhdj2+bnXgmv/6n//V8uIlmjOrQJJ0ueaqdn++T7/65d9Jkv766R51d/fo6ac2yhERoYsVVTpw6IjSUlP0zKYnA/HPnlWgxQsLJUl79h1US2tb4Jqq6hrt2X9Iz25+WkmJCfccx6G2gA5m/AyLRU8/uVGu2JjAsf5+r57bsklRUZH6cOdutba1q3jJIs2dM1OlFyp05Ohx/fzl5+Xp9wY9xgAAAKGILaABAJBkmqb27NmjS5cuyTRNmaapyspK3b59O7AK90GaPXu2XC6Xmpubx61O0zRVV1en1atXj1wYD0x4eLgee+yxu7aDBgAAwNTU0dmlquorWrWiWHa7XYZhqGjxQt26XafmltZAueysTMU4nTIMQzPyclRf3yifz69+T79M09TpM+fU2NSswnmzh01MLiicq63PPqPCubPV0tqqPfsPac/+g2OOva29Q1euXtfK5UWKdDhkGIZmzcxXelrqsNe0traporJ60DX5eTnKSE/Vya/PjDqGYMcvKzMjkPz9zoz8HDmd0bJYLMqcliGfz685swcS3QX5ufJ6fapvaBrVGAMAAIQitoAGAEADydGMjAydP39eJ06cUH9/v2JjY7Vp06ZB7899UCwWizZt2jSudRqGoaeffnpc68T4yMnJmewQAAAAEKTWtjZJ0vb3PrzrXFtbe2Cb56jIyMDxsDCbTNOU1+dVQoJbxUWLdPZcqc6eK5M7zqWnfvS4XK6Yu+qTpIQEtx5LKNaKZUu0/+BRVVyq0rKli8eU0Gxrb5ckuWJjB7cR71ZDY9OQ17R3dA5c84P/L3LHuXTteu2oYxjL+H3nzmM2q1WOiPDAaugwm02GYajfO/oxBgAACDUkgAEA0EDCddasWZo1a9ZkhwIAAABgCouOGkhCvvT8FrndY/tj0aLFC7R4YaFu3a7T3v2H9M3Zc9qw9t6vnbFarZo5I1cVl6rk9w280c2QcVc5wzDk837/Tt+e3t7Az7ExAwnQ1rY2RUV9n0y9c+XtD8XEDCSaW1tbFRXpGHTNd+dGYzzGLxhjGWMAAIBQwRbQAAAAAAAAQJDiXC7l5kzX4WPH5fF4JEmV1TU6dOR4UNc3NjXryLGTMk1Taakpio6OHpRY/U5ra5t2vP+Rrt0YWGXb7/Wq7EKFUlOTAytZI6Mc6vh2he53sbhdLlXXXJHf71efx6PS8ouBOmNjnMqaPk1Hvzqlnp4eSVLFpSpdvXZj2HhdsTEqmJE36JrK6hrdqL2l4qJFQfX5Tvc7fsEIdowBAABCFSuAAQAAAAAAgCGUlVeorLxi0LH/+w+v6fH1a3Ti5Dd69/2P5fX55HBEqGjRgqDqtFgsam1t05/e/UCm36+U5GQtWlB4V7no6ChNn5ahQ4e/Ur/XK4vFooz0ND31xPJAmfnzZuvTz/frzT9u19o1K5STNV2rVi7VvgNH9Obb2xUdHaX8vBw1NDTJ5/PJarXqiQ1rdeSrE9q24wNFhNsV73arYEaeurq6ho15/ZqV+vr0WX3w0S55fV45o53avOlJJSbEBzmSg93P+AUj2DEGAAAIVcbOnTvNyQ4CAIChVFVVKS8vb7LDAKYkng8AAAAAAAAAQ2ELaADAlGW1WuX1eic7DGDK8Xq9stnYyAUAAAAAAADA3UgAAwCmrKioKBLAwBA8Ho8iIyMnOwwAAAAAAAAAUxAJYADAlBUXF6fbt29PdhjAlFNfXy+32z3ZYQAAAAAAAACYgkgAAwCmrLCwMKWlpenq1avq6elhNTAeaV6vV93d3bpy5YrS0tLYAhoAAAAAAADAkPjmEAAwpdntdqWlpamlpUXd3d0kgfHIstlsioyMVEZGBslfAAAAAAAAAMPi20MAwJQXFhampKSkyQ4DAAAAAAAAAIApjy2gAQAAAAAAAAAAACBEkAAGAAAAAAAAAAAAgBBBAhgAAAAAAAAAAAAAQgQJYAAAAAAAAAAAAAAIESSAAQAAAAAAAAAAACBEkAAGAAAAAAAAAAAAgBBBAhgAAAAAAAAAAAAAQgQJYAAAAAAAAAAAAAAIESSAAQAAAAAAAAAAACBEkAAGAAAAAAAAAAAAgBBBAhgAAAAAAAAAAAAAQgQJYAAAAAAAAAAAAAAIESSAAQAAAAAAAAAAACBEkAAGAAAAAAAAAAAAgBBBAhgAAAAAAAAAAAAAQgQJYAAAAAAAAAAAAAAIESSAAQAAAAAAAAAAACBEkAAGAAAAAAAAAAAAgBBBAhgAAAAAAAAAAAAAQgQJYAAAAAAAAAAAAAAIESSAAQAAAAAAAAAAACBEkAAGAAAAAAAAAAAAgBBBAhgAAAAAAAAAAAAAQgQJYAAAAAAAAAAAAAAIESSAAQAAAAAAAAAAACBEkAAGAAAAAAAAAAAAgBBBAhgAAAAAAAAAAAAAQgQJYAAAAAAAAAAAAAAIESSAAQAAAAAAAAAAACBEGGlpaeZkBwEAAAAAAAAAAAAAuH+sAAYAAAAAAAAAAACAEEECGAAAAAAAAAAAAABCBAlgAAAAAAAAAAAAAAgRJIABAAAAAAAAAAAAIESQAAYAAAAAAAAAAACAEEECGAAAAAAAAAAAAABCBAlgAAAAAAAAAAAAAAgRJIABAAAAAAAAAAAAIESQAAYAAAAAAAAAAACAEEECGAAAAAAAAAAAAABCBAlgAAAAAAAAAAAAAAgRJIABAAAAAAAAAAAAIESQAAYAAAAAAAAAAACAEEECGAAAAAAAAAAAAABCBAlgAAAAAAAAAAAAAAgRJIABAAAAAAAAAAAAIESQAAYAAAAAAAAAAACAEEECGAAAAAAAAAAAAABCBAlgAAAAAAAAAAAAAAgRJIABAAAAAAAAAAAAIETYJjsAAABwb4nJaerp7lJnR9tkh4IxMgxDaRnTFRPrVltbs25evzLZIQEAAAAAAAAIUSSAAQBTWs6MOYqMjJIk+f0+efr61NxYr+am+rvKmqap/Jnz1NrSpMb6Ww861GGNpg9DiY2LlyR1drRN2T6Ot4I5CxQWZh/ynKevV5cunHvAEd0fV1y8nLFxqrpUKm9//13nLVarklMy5Ix1SaYpn9+njrZW1d+uHfdYHpV7CAAAAAAAAHhUkQAGAEx5zY31unnjigyLRTGxLmVk5spv+tXa3Hh3YcOQYRgPPsgRjKoPI5mifRxPFWVnAz9Pz5khv9+v61eqJjGi+xPhiFRvT7f6PZ4hz2dm5cnv96ny4nmZfr+csa5hE+Dj4hG4hwAAAAAAAIBHFQlgAMBDw/T71dbSLFdcgpwxrruSp4ZhqOri+UmKLjgj9WEkD0MfcTfDsMg0hz5ntdkU7YzV1ZpKmX6/JKmjrXUCY+EeAgAAAAAAAEIZCWAAwEPHkCGLxaKCOQtUf7tWMbFuhdntqrp4Xilp09TV2a6O9jYlJKVKMtVYfztwbZw7QWH2cNXfrpU7PlHuhCRZrTb5TVNNDbfV3Pj9tsyGYSgpJV0xLrcsFov6PX2qv31TkdFOGYahupvXA2XjE1Nkt4frVu3VUfXBMAwlJqcpLj5Rhgx5+np1+9Z1dXd1DnvtnX2c6DinKsMwlJyaodi4eJmmqZ7uTt26cVVer1eShrw3CuYsUEtzg6KdsQq3R6ivt0fXr1YrISlVMa44mX6/bt+8ofa2ZkmSOyFJ8Ykpslgs8vT16lbtdfX2dA0Zy71+hzPnLpTNFiZJmrtgqWqqLqirsyNwvd/nk2n6FZ+YrN7uLvX3371KeLT9HfjDguHv/WDvoc6OthHbBgAAAAAAADC1WCY7AAAAgmWxWBXnTlCUM0atzY0y/X7FJ6bo1o0rgRWNMbFxCo+IlDTwvt3ElHRZLN//6y4pNUP+b1dZ9nu9unH1sirKS3S9pkopaZmKinYGyqZn5sgZE6uaygu6WHpGTY316uvrUV9PtxISUwJJPUlKSEqRp6931H1Im5YtZ4xL1RWlulB6Wk2NdcrOm6UIR9SwddzZx4mKc6rLmJ6jCEekKi+c16XyEnm9XmVm5QfOD3VvmH6/4tyJun6lShfLzsiUlFswR329PaooO6uG+lvKmJ4tq80muz1cqenTVVNZroqys2prbZbfN3TCc6Tf4cXSM2purFdHe5tKz54clPyVBt7Je/vmDUVFOzVjznxl580KvPd5rP0d6d4P9h4Kpm0AAAAAAAAAUwsJYADAlOdOSNLcBUs1c+4CuROTVXu9Rm2tA6s0O9tb5fH0DXlda3OTZJqKcbklSU5nrGy2MLU0N0iSOtpa1Ns7kOTq7e1Wb0+XoqJjJEn28Ai54uJ1++YNeb39MgxDbS1N6vd41N7WIq+3X3HuBElSlDNGNptNrS1No+pDT0+34twJul17TV6vd6CN1mZ1drQpOTUtqLEZ7zgfBrYwu2Jd8bpVe01+v0+S1PDtimd7eESg3FD3xndjY5pmYHVrc9PAqu/WliZZLFY5HFGyWKz/r717a2oqzcIA/CY6JMhBznJSWxhKu62Z//8zpqaqa7qne9QGDHIwEEQMSUzmAk2LDTYCrbjrea5CDjvr23tVcfFmfTulUilTM3OpDg6lvrN1ap8NVKqXvoZJ8nL7Rf7304+pb29moFLJ3fvLWby/dOH1/lnvf7yGs3rovN8NAAAAAFwftoAG4Nqr72yltv7s1Nc67faZn+t236axV8/YxFT26jsZm5zKfqOet++2rh0ZuZ3JmdlUqoO5efNmSqVyfzpzYGAgSdJ6NwX5oV6vl92X2xmfnM7WZi1jY5Np7O3m7RkTometYXjkOGw++mgi96j5JsOjY2ce60NXXee3oFI9Dh5XHv3jj69Vqv0J59N648Pnet1uvxfe/93r9VIu30iz2cjmxnomp+9kamYuzeabrD75Ja3WyWv1/vxf5hq+12weZuP5al7U1jJ/90HGJ6aytfE8f6tUPnu9f9b7p63htB4677kGAAAAAK4PATAAhVbf3sryo8epVm9lZHQ8vz35OUlSHRzK/eWHeVFby/rq07zttPPg74/6n2u1ju/DOlAZ7D8+cdydzUzfmc/I6FhGx8az+uzXz66tdXQ8rVmpVNPp/B7eVaqD5w7WvkSd10373Tr/+59//6UB5PZmLdubtQwNj2Tx3lKm7symtnYyxL+Ka/ixXq+Xvfr2u8nt0oXXe1bvf+xTPfSlzjUAAAAAcHVsAQ1AoTWbh3lz+Dp3Hyyn3T7qT/jeuHH8L7Cx9zKddiu3hoZP3He3ddRMY+9lZucX+/fQHbk9loGB42nMTqeTvd2XWbj3IG87nRzsNz67tlbrKLv1ncwu3MuNm8e/yRq9PZHhkdvZ2nh+vmN8gTqvm+M11zO/cD/l8o0kye2xicwt3L+y76gO3srs/N2USqW8PniVdqt1IuDt13IF13CgUs3yw8cZejcRXiqXMzE1k9cHr9JqNS+83rN6/w9r+EQPfYlzDQAAAABcLRPAABRefWcri/eWsvF8tf/c64NX2d7ayNLKD+l2u9lv7KaxV0+5/Ptvo9Z/e5KZ2YUsrXyfUrmcTrudzY31/n1W6zubGZ+YymZtLaVS6UK11daeZnp2PksrP6RcOp72fPbrT2k2D899jC9R53Wzvvoks3MLWX74OOVyOZ1OO9svald2/G63m0p1MCvf/zMhi0FdAAABf0lEQVSlJIeHB9nZfHHqey97DdutoxzsNzK/+F3K5XJ63W4ODvZTW/+l/56Lrve03j/Np3rorz7XAAAAAMDVKs3Pz/e+dhEA8C0aGhnNd0sP8/OP/zp1OvS6+FbqBAAAAADg8mwBDQAXND0zl/3G7rUPVb+VOgEAAAAAuDxbQAPAZ5qYnM707ELa7Vaerz792uWc6VupEwAAAACAq2MLaAAAAAAAAICCsAU0AAAAAAAAQEEIgAEAAAAAAAAKQgAMAAAAAAAAUBACYAAAAAAAAICCEAADAAAAAAAAFIQAGAAAAAAAAKAgBMAAAAAAAAAABSEABgAAAAAAACgIATAAAAAAAABAQQiAAQAAAAAAAAri5vDw8NeuAQAAAAAAAIArYAIYAAAAAAAAoCAEwAAAAAAAAAAFIQAGAAAAAAAAKAgBMAAAAAAAAEBBCIABAAAAAAAACkIADAAAAAAAAFAQAmAAAAAAAACAghAAAwAAAAAAABSEABgAAAAAAACgIP4PqYV03k7Qb3kAAAAASUVORK5CYII=","disable_correlation":true,"first_seen":"2023-05-26T01:49:01.745000+00:00","to_ids":false,"type":"attachment","uuid":"1924b856-bdbb-4a03-b4a7-a6478d12b8b3","value":"screenshot_landing_page.png"},{"category":"External analysis","comment":"HTTP Archive (HAR) of the whole capture","data":"eyJsb2ciOiB7InZlcnNpb24iOiAiMS4yIiwgImNyZWF0b3IiOiB7Im5hbWUiOiAiUGxheXdyaWdodCIsICJ2ZXJzaW9uIjogIjEuMzMuMCJ9LCAiYnJvd3NlciI6IHsibmFtZSI6ICJjaHJvbWl1bSIsICJ2ZXJzaW9uIjogIjExMy4wLjU2NzIuNTMifSwgInBhZ2VzIjogW3sic3RhcnRlZERhdGVUaW1lIjogIjIwMjMtMDUtMjZUMDE6NDk6MDEuNzE2WiIsICJpZCI6ICJwYWdlQGU5MWE3ZGI1ZTRhNzRmYzkwZjJmZWIyNzBkZGFhMjljIiwgInRpdGxlIjogIkxvZyBJbiB8IFNuYXBjaGF0IiwgInBhZ2VUaW1pbmdzIjogeyJvbkNvbnRlbnRMb2FkIjogNjc1NSwgIm9uTG9hZCI6IDc4NTR9fV0sICJlbnRyaWVzIjogW3sic3RhcnRlZERhdGVUaW1lIjogIjIwMjMtMDUtMjZUMDE6NDk6MDEuNzQ1WiIsICJ0aW1lIjogMjYxLjIwMiwgInJlcXVlc3QiOiB7Im1ldGhvZCI6ICJHRVQiLCAidXJsIjogImh0dHBzOi8vd2ViLnNuYXBjaGF0LmNvbS8/cmVmPXdlYl90cnlfbm93X2Zvb3Rlcl9jdGEiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFt7Im5hbWUiOiAiRXNzZW50aWFsU2Vzc2lvbiIsICJ2YWx1ZSI6ICJ0cnVlIn1dLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiOmF1dGhvcml0eSIsICJ2YWx1ZSI6ICJ3ZWIuc25hcGNoYXQuY29tIn0sIHsibmFtZSI6ICI6bWV0aG9kIiwgInZhbHVlIjogIkdFVCJ9LCB7Im5hbWUiOiAiOnBhdGgiLCAidmFsdWUiOiAiLz9yZWY9d2ViX3RyeV9ub3dfZm9vdGVyX2N0YSJ9LCB7Im5hbWUiOiAiOnNjaGVtZSIsICJ2YWx1ZSI6ICJodHRwcyJ9LCB7Im5hbWUiOiAiYWNjZXB0IiwgInZhbHVlIjogInRleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LGltYWdlL2F2aWYsaW1hZ2Uvd2VicCxpbWFnZS9hcG5nLCovKjtxPTAuOCxhcHBsaWNhdGlvbi9zaWduZWQtZXhjaGFuZ2U7dj1iMztxPTAuNyJ9LCB7Im5hbWUiOiAiYWNjZXB0LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAsIGRlZmxhdGUsIGJyIn0sIHsibmFtZSI6ICJjb29raWUiLCAidmFsdWUiOiAiRXNzZW50aWFsU2Vzc2lvbj10cnVlIn0sIHsibmFtZSI6ICJyZWZlcmVyIiwgInZhbHVlIjogImh0dHBzOi8vd3d3LnNuYXBjaGF0LmNvbS8ifSwgeyJuYW1lIjogInNlYy1mZXRjaC1kZXN0IiwgInZhbHVlIjogImRvY3VtZW50In0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtbW9kZSIsICJ2YWx1ZSI6ICJuYXZpZ2F0ZSJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLXNpdGUiLCAidmFsdWUiOiAibm9uZSJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLXVzZXIiLCAidmFsdWUiOiAiPzEifSwgeyJuYW1lIjogInVwZ3JhZGUtaW5zZWN1cmUtcmVxdWVzdHMiLCAidmFsdWUiOiAiMSJ9LCB7Im5hbWUiOiAidXNlci1hZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTEzLjAuNTY3Mi41MyBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbeyJuYW1lIjogInJlZiIsICJ2YWx1ZSI6ICJ3ZWJfdHJ5X25vd19mb290ZXJfY3RhIn1dLCAiaGVhZGVyc1NpemUiOiA2MTQsICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDIwMCwgInN0YXR1c1RleHQiOiAiIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogImFsdC1zdmMiLCAidmFsdWUiOiAiaDM9XCI6NDQzXCI7IG1hPTI1OTIwMDAsaDMtMjk9XCI6NDQzXCI7IG1hPTI1OTIwMDAifSwgeyJuYW1lIjogImFsdC1zdmMiLCAidmFsdWUiOiAiaDM9XCI6NDQzXCI7IG1hPTI1OTIwMDAsaDMtMjk9XCI6NDQzXCI7IG1hPTI1OTIwMDAifSwgeyJuYW1lIjogImNhY2hlLWNvbnRyb2wiLCAidmFsdWUiOiAibWF4LWFnZT02MCwgcy1tYXhhZ2U9NjAsIHN0YWxlLXdoaWxlLXJldmFsaWRhdGU9NjAifSwgeyJuYW1lIjogImNvbnRlbnQtZW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCJ9LCB7Im5hbWUiOiAiY29udGVudC1zZWN1cml0eS1wb2xpY3kiLCAidmFsdWUiOiAiZGVmYXVsdC1zcmMgJ3NlbGYnOyByZXBvcnQtdXJpIGh0dHBzOi8vc2VudHJ5LnNjLXByb2QubmV0L2FwaS8xNTgvc2VjdXJpdHkvP3NlbnRyeV9rZXk9YjVlY2Q3MzYzNTA4NGZhMWIyMTE1MDQ4YjM1MTY1ZDU7IGJhc2UtdXJpICdzZWxmJzsgZm9udC1zcmMgJ3NlbGYnIGh0dHBzOi8vKi5zYy1jZG4ubmV0OyBtYW5pZmVzdC1zcmMgJ3NlbGYnIGh0dHBzOi8vKi5zYy1jZG4ubmV0OyBtZWRpYS1zcmMgJ3NlbGYnIGRhdGE6IGJsb2I6IGh0dHBzOi8vKi5zYy1jZG4ubmV0OyBpbWctc3JjICdzZWxmJyBkYXRhOiBibG9iOiBodHRwczovLyouYml0bW9qaS5jb20gaHR0cHM6Ly8qLnNjLWNkbi5uZXQgaHR0cHM6Ly8qLnNuYXBjaGF0LmNvbSBodHRwczovL2xlbnMtc3RvcmFnZS5zdG9yYWdlLmdvb2dsZWFwaXMuY29tIGh0dHBzOi8vbGVucy1wcmV2aWV3LXN0b3JhZ2Uuc3RvcmFnZS5nb29nbGVhcGlzLmNvbS87IHN0eWxlLXNyYyAnc2VsZicgJ3Vuc2FmZS1pbmxpbmUnIGh0dHBzOi8vKi5zYy1jZG4ubmV0OyBzY3JpcHQtc3JjICdzZWxmJyAnd2FzbS11bnNhZmUtZXZhbCcgaHR0cHM6Ly8qLnNjLWNkbi5uZXQgaHR0cHM6Ly9hcGkta2l0LnNuYXBjaGF0LmNvbSBibG9iOjsgd29ya2VyLXNyYyAnc2VsZicgYmxvYjo7IGNoaWxkLXNyYyAnc2VsZicgYmxvYjo7IGZyYW1lLXNyYyA7IGNvbm5lY3Qtc3JjICdzZWxmJyBodHRwczovL3NlbnRyeS5zYy1wcm9kLm5ldCBodHRwczovLyouc25hcGNoYXQuY29tIHdzczovLyouZHVwbGV4LnNuYXBjaGF0LmNvbSBodHRwczovLyouc2MtY2RuLm5ldCB3c3M6Ly8qLmFkZGxpdmUuaW86KiBodHRwczovL2FwaS1raXQuc25hcGNoYXQuY29tIGJsb2I6OyBvYmplY3Qtc3JjICdub25lJzsifSwgeyJuYW1lIjogImNvbnRlbnQtdHlwZSIsICJ2YWx1ZSI6ICJ0ZXh0L2h0bWwifSwgeyJuYW1lIjogImRhdGUiLCAidmFsdWUiOiAiRnJpLCAyNiBNYXkgMjAyMyAwMTo0OTowMiBHTVQifSwgeyJuYW1lIjogImV0YWciLCAidmFsdWUiOiAiVy9cIjNkMTItdU1iWGxiSXJXZEl2YkcvMlY5QTNoQ3ZiZXVjXCIifSwgeyJuYW1lIjogImxhc3QtbW9kaWZpZWQiLCAidmFsdWUiOiAiMjAyMy0wNS0yNFQxNzoyMDo0OC44MjdaIn0sIHsibmFtZSI6ICJyZWZlcnJlci1wb2xpY3kiLCAidmFsdWUiOiAic3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbiJ9LCB7Im5hbWUiOiAic2VydmVyIiwgInZhbHVlIjogIkFQSSBHYXRld2F5In0sIHsibmFtZSI6ICJzdHJpY3QtdHJhbnNwb3J0LXNlY3VyaXR5IiwgInZhbHVlIjogIm1heC1hZ2U9MzE1MzYwMDA7IGluY2x1ZGVTdWJEb21haW5zOyBwcmVsb2FkIn0sIHsibmFtZSI6ICJzdHJpY3QtdHJhbnNwb3J0LXNlY3VyaXR5IiwgInZhbHVlIjogIm1heC1hZ2U9MzE1MzYwMDA7IGluY2x1ZGVTdWJEb21haW5zIn0sIHsibmFtZSI6ICJ2YXJ5IiwgInZhbHVlIjogIkFjY2VwdC1FbmNvZGluZyJ9LCB7Im5hbWUiOiAidmlhIiwgInZhbHVlIjogIjEuMSBnb29nbGUsIDEuMSBnb29nbGUifSwgeyJuYW1lIjogIngtZW52b3ktdXBzdHJlYW0tc2VydmljZS10aW1lIiwgInZhbHVlIjogIjEifSwgeyJuYW1lIjogIngtZnJhbWUtb3B0aW9ucyIsICJ2YWx1ZSI6ICJERU5ZIn0sIHsibmFtZSI6ICJ4LXBvd2VyZWQtYnkiLCAidmFsdWUiOiAiRXhwcmVzcyJ9XSwgImNvbnRlbnQiOiB7InNpemUiOiAxNTYzNCwgIm1pbWVUeXBlIjogInRleHQvaHRtbCIsICJjb21wcmVzc2lvbiI6IDEwMTUxLCAidGV4dCI6ICI8IWRvY3R5cGUgaHRtbD48aHRtbCBkaXI9XCJsdHJcIj48IS0tIFNuYXBjaGF0IHYxMi4zNi4wIChwcm9kKSwgcmV2aXNpb24gNGVmMWY1ZDcsIGJ1aWx0IDUvMjQvMjAyMywgMTA6MTc6MjcgQU0gUERUIC0tPjxoZWFkPjxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiLz48dGl0bGU+U25hcGNoYXQuIE5vdyBvbiB0aGUgd2ViLjwvdGl0bGU+PG1ldGEgbmFtZT1cImNvbG9yLXNjaGVtZVwiIGNvbnRlbnQ9XCJsaWdodCBkYXJrXCIvPjxtZXRhIG5hbWU9XCJ2aWV3cG9ydFwiIGNvbnRlbnQ9XCJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xXCIvPjxtZXRhIG5hbWU9XCJnb29nbGUtc2l0ZS12ZXJpZmljYXRpb25cIiBjb250ZW50PVwiQ1p4RGxCYzVwRWJJTmFLMXIzM042OFJvbVdlTUV2eWxoS2JMeGlZVUJjMFwiLz48bGluayBjbGFzcz1cImpzLWZhdmljb25cIiByZWw9XCJhbHRlcm5hdGUgaWNvblwiIHR5cGU9XCJpbWFnZS9wbmdcIiBocmVmPVwiZmF2aWNvbi5wbmdcIiBzaXplcz1cIjQ4eDQ4XCIvPjxsaW5rIGNsYXNzPVwianMtZmF2aWNvblwiIHJlbD1cImljb25cIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiIGhyZWY9XCJmYXZpY29uLnN2Z1wiLz48c3R5bGU+Ym9keSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgICAgICBjb2xvcjogIzE2MTkxYztcbiAgICAgIH1cblxuICAgICAgLm5vdGxvYWRlZCB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpO1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICBhbmltYXRpb246IDAuNXMgbGluZWFyIDNzIGZvcndhcmRzIGZhZGUtaW47XG4gICAgICB9XG4gICAgICAubm90bG9hZGVkX19vdmVybGF5IHtcbiAgICAgICAgd2lkdGg6IDQyNXB4O1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMjRweDtcbiAgICAgICAgcGFkZGluZzogMCAyNHB4IDI0cHggMjRweDtcbiAgICAgIH1cbiAgICAgIC5ub3Rsb2FkZWRfX2JpdG1vamkge1xuICAgICAgICBtYXJnaW4tdG9wOiAtODhweDtcbiAgICAgICAgaGVpZ2h0OiAxOTlweDtcbiAgICAgIH1cbiAgICAgIC5ub3Rsb2FkZWRfX3RpdGxlIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMjBweDtcbiAgICAgICAgbWFyZ2luLXRvcDogMTJweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgICAgIH1cbiAgICAgIC5ub3Rsb2FkZWRfX3RleHQge1xuICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxNnB4O1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIG1hcmdpbi10b3A6IDEycHg7XG4gICAgICB9XG5cbiAgICAgIC5ub3Rsb2FkZWRfX3ZlcnNpb24ge1xuICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICBmb250LXNpemU6IDEwcHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxNHB4O1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIG1hcmdpbi10b3A6IDI0cHg7XG4gICAgICAgIGNvbG9yOiAjODg4ODg4O1xuICAgICAgfVxuXG4gICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7XG4gICAgICAgIGJvZHkge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMxMjEyMTI7XG4gICAgICAgICAgY29sb3I6ICNkZWRlZGU7XG4gICAgICAgIH1cbiAgICAgICAgLm5vdGxvYWRlZCB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE5KTtcbiAgICAgICAgfVxuICAgICAgICAubm90bG9hZGVkX19vdmVybGF5IHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTIxMjEyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIEBrZXlmcmFtZXMgZmFkZS1pbiB7XG4gICAgICAgIHRvIHtcbiAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICB9XG4gICAgICB9PC9zdHlsZT48bWV0YSBuYW1lPVwiZGVzY3JpcHRpb25cIiBjb250ZW50PVwiVHJ5IHRoZSBuZXcgU25hcGNoYXQgZm9yIFdlYiBvbiB5b3VyIGNvbXB1dGVyIHRvIGNoYXQsIGNhbGwgZnJpZW5kcywgdXNlIExlbnNlcywgYW5kIG1vcmVcIj48bWV0YSBwcm9wZXJ0eT1cIm9nOnNpdGVfbmFtZVwiIGNvbnRlbnQ9XCJTbmFwY2hhdFwiPjxtZXRhIHByb3BlcnR5PVwib2c6dGl0bGVcIiBjb250ZW50PVwiU25hcGNoYXQuIE5vdyBvbiB0aGUgd2ViLlwiPjxtZXRhIHByb3BlcnR5PVwib2c6ZGVzY3JpcHRpb25cIiBjb250ZW50PVwiVHJ5IHRoZSBuZXcgU25hcGNoYXQgZm9yIFdlYiBvbiB5b3VyIGNvbXB1dGVyIHRvIGNoYXQsIGNhbGwgZnJpZW5kcywgdXNlIExlbnNlcywgYW5kIG1vcmVcIj48bWV0YSBwcm9wZXJ0eT1cIm9nOnR5cGVcIiBjb250ZW50PVwid2Vic2l0ZVwiPjxtZXRhIHByb3BlcnR5PVwib2c6dXJsXCIgY29udGVudD1cImh0dHBzOi8vd2ViLnNuYXBjaGF0LmNvbVwiPjxtZXRhIHByb3BlcnR5PVwib2c6aW1hZ2VcIiBjb250ZW50PVwiaHR0cHM6Ly9jZi1zdC5zYy1jZG4ubmV0L2R3L29nLWltYWdlLTIwMjItMDktMjYucG5nXCI+PG1ldGEgbmFtZT1cInR3aXR0ZXI6Y2FyZFwiIGNvbnRlbnQ9XCJzdW1tYXJ5X2xhcmdlX2ltYWdlXCI+PGxpbmsgcmVsPVwibWFuaWZlc3RcIiBocmVmPVwiaHR0cHM6Ly9jZi1zdC5zYy1jZG4ubmV0L2R3L2Zhdmljb25zL2U5YjZkMmQzL21hbmlmZXN0Lmpzb25cIiBpbnRlZ3JpdHk9XCJzaGEzODQtR2IwVmpMMy96bkJ3UGUwWWV1anlBa0Q2WU5BWnNNMi9NNXptUzhiQlB1eGZHanB0YXR4MXhicVBDTVVmc3VqVVwiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+PG1ldGEgbmFtZT1cIm1vYmlsZS13ZWItYXBwLWNhcGFibGVcIiBjb250ZW50PVwieWVzXCI+PG1ldGEgbmFtZT1cInRoZW1lLWNvbG9yXCIgY29udGVudD1cIiNGRkZDMDBcIj48bWV0YSBuYW1lPVwiYXBwbGljYXRpb24tbmFtZVwiIGNvbnRlbnQ9XCJTbmFwY2hhdFwiPjxsaW5rIHJlbD1cImFwcGxlLXRvdWNoLWljb25cIiBzaXplcz1cIjU3eDU3XCIgaHJlZj1cImh0dHBzOi8vY2Ytc3Quc2MtY2RuLm5ldC9kdy9mYXZpY29ucy9lOWI2ZDJkMy9hcHBsZS10b3VjaC1pY29uLTU3eDU3LnBuZ1wiIGludGVncml0eT1cInNoYTM4NC00R0crTWs3bkpYY3A1bTZzL081NWdEbkw2OUZyeE9WL3JVR0RZVjdLZE9rVjA3dVB4Y0pOYWUvSldSSFFjY2puXCIgY3Jvc3NvcmlnaW49XCJhbm9ueW1vdXNcIj48bGluayByZWw9XCJhcHBsZS10b3VjaC1pY29uXCIgc2l6ZXM9XCI2MHg2MFwiIGhyZWY9XCJodHRwczovL2NmLXN0LnNjLWNkbi5uZXQvZHcvZmF2aWNvbnMvZTliNmQyZDMvYXBwbGUtdG91Y2gtaWNvbi02MHg2MC5wbmdcIiBpbnRlZ3JpdHk9XCJzaGEzODQtaUV3UHcvNTRHYVJOUGhSQWdEMVVhaENwaHMvNmRGSUhYYlN6MUlWcHRQenFZSHVCTDA1MjFwenp4QkxCNmx4L1wiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+PGxpbmsgcmVsPVwiYXBwbGUtdG91Y2gtaWNvblwiIHNpemVzPVwiNzJ4NzJcIiBocmVmPVwiaHR0cHM6Ly9jZi1zdC5zYy1jZG4ubmV0L2R3L2Zhdmljb25zL2U5YjZkMmQzL2FwcGxlLXRvdWNoLWljb24tNzJ4NzIucG5nXCIgaW50ZWdyaXR5PVwic2hhMzg0LWhlRnZWUkd4TElJWWlKa2ovREVGN1kyYlZqbng2QWlQUnpWVm9mWVFsNVYrNzBlNDJuKys0S3dBalVISFlUbkpcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPjxsaW5rIHJlbD1cImFwcGxlLXRvdWNoLWljb25cIiBzaXplcz1cIjc2eDc2XCIgaHJlZj1cImh0dHBzOi8vY2Ytc3Quc2MtY2RuLm5ldC9kdy9mYXZpY29ucy9lOWI2ZDJkMy9hcHBsZS10b3VjaC1pY29uLTc2eDc2LnBuZ1wiIGludGVncml0eT1cInNoYTM4NC0vOE1ZUW5zaEwwQzRVQ0x3dEYrQjVITWZnYnc1dnhSd0tQVkdpMGNEaXNyMU1YbTV5eGg1Si80R1dZL2orTlZ4XCIgY3Jvc3NvcmlnaW49XCJhbm9ueW1vdXNcIj48bGluayByZWw9XCJhcHBsZS10b3VjaC1pY29uXCIgc2l6ZXM9XCIxMTR4MTE0XCIgaHJlZj1cImh0dHBzOi8vY2Ytc3Quc2MtY2RuLm5ldC9kdy9mYXZpY29ucy9lOWI2ZDJkMy9hcHBsZS10b3VjaC1pY29uLTExNHgxMTQucG5nXCIgaW50ZWdyaXR5PVwic2hhMzg0LUo0RDlZbmp2UzVJZmxLQWZOS1NyTDRtNitHdGlhcjVqU0JvYzByWXVOeXljeVdQTXd3MWhETS9VSDNmVEgzVXdcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPjxsaW5rIHJlbD1cImFwcGxlLXRvdWNoLWljb25cIiBzaXplcz1cIjEyMHgxMjBcIiBocmVmPVwiaHR0cHM6Ly9jZi1zdC5zYy1jZG4ubmV0L2R3L2Zhdmljb25zL2U5YjZkMmQzL2FwcGxlLXRvdWNoLWljb24tMTIweDEyMC5wbmdcIiBpbnRlZ3JpdHk9XCJzaGEzODQtNlVPQmVyUCt3K3Q5ZS9kdGk5SXUwN3VSRi8wd2VmV1ZGRmVtcGpkZzRVdFc0cDhhK09tdXY1ekxLcExGZ0hoalwiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+PGxpbmsgcmVsPVwiYXBwbGUtdG91Y2gtaWNvblwiIHNpemVzPVwiMTQ0eDE0NFwiIGhyZWY9XCJodHRwczovL2NmLXN0LnNjLWNkbi5uZXQvZHcvZmF2aWNvbnMvZTliNmQyZDMvYXBwbGUtdG91Y2gtaWNvbi0xNDR4MTQ0LnBuZ1wiIGludGVncml0eT1cInNoYTM4NC1nVGFZbXlaZjhiM0FDRmtSK1ordUcvTkpkRkVSUXV1M2VXRDBYNVpNeFFaeTR3cmxCNlNLNDlscG40cmhodmUzXCIgY3Jvc3NvcmlnaW49XCJhbm9ueW1vdXNcIj48bGluayByZWw9XCJhcHBsZS10b3VjaC1pY29uXCIgc2l6ZXM9XCIxNTJ4MTUyXCIgaHJlZj1cImh0dHBzOi8vY2Ytc3Quc2MtY2RuLm5ldC9kdy9mYXZpY29ucy9lOWI2ZDJkMy9hcHBsZS10b3VjaC1pY29uLTE1MngxNTIucG5nXCIgaW50ZWdyaXR5PVwic2hhMzg0LUkreWhyL1J1MDZNZ2ZzTGd6VzdUeGdCVUZLRVE3T01CQnVZdUV2V3NBOXVZUXgzZERWd0JSa0JLN0pHTUZCUldcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPjxsaW5rIHJlbD1cImFwcGxlLXRvdWNoLWljb25cIiBzaXplcz1cIjE2N3gxNjdcIiBocmVmPVwiaHR0cHM6Ly9jZi1zdC5zYy1jZG4ubmV0L2R3L2Zhdmljb25zL2U5YjZkMmQzL2FwcGxlLXRvdWNoLWljb24tMTY3eDE2Ny5wbmdcIiBpbnRlZ3JpdHk9XCJzaGEzODQtTGFRcVQwdU8vTy8vN3M4UElTR3haYWo3bzJqeWFQcGhacVNYSFVoTlNpVFR0SWpLWFo4TldUMnZDdWR3cjZxN1wiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+PGxpbmsgcmVsPVwiYXBwbGUtdG91Y2gtaWNvblwiIHNpemVzPVwiMTgweDE4MFwiIGhyZWY9XCJodHRwczovL2NmLXN0LnNjLWNkbi5uZXQvZHcvZmF2aWNvbnMvZTliNmQyZDMvYXBwbGUtdG91Y2gtaWNvbi0xODB4MTgwLnBuZ1wiIGludGVncml0eT1cInNoYTM4NC1BcGlHb2lpWkV0NEh1WW5zWlFHZ0J1VTJ2UW9xRWl3QUVWd0hVaGgzanJ0V1J2ZWFxc1ZGc0N0MDF0d1lXTzlhXCIgY3Jvc3NvcmlnaW49XCJhbm9ueW1vdXNcIj48bGluayByZWw9XCJhcHBsZS10b3VjaC1pY29uXCIgc2l6ZXM9XCIxMDI0eDEwMjRcIiBocmVmPVwiaHR0cHM6Ly9jZi1zdC5zYy1jZG4ubmV0L2R3L2Zhdmljb25zL2U5YjZkMmQzL2FwcGxlLXRvdWNoLWljb24tMTAyNHgxMDI0LnBuZ1wiIGludGVncml0eT1cInNoYTM4NC1rcUgvb0hDTGZVbjZKZ2d6Z2l2b1JpZmkwTHY5L2lqWnZLbmZKL0FudU9OcFNCK2VoclVKd2FmTnEyRDFpRGZlXCIgY3Jvc3NvcmlnaW49XCJhbm9ueW1vdXNcIj48bWV0YSBuYW1lPVwiYXBwbGUtbW9iaWxlLXdlYi1hcHAtY2FwYWJsZVwiIGNvbnRlbnQ9XCJ5ZXNcIj48bWV0YSBuYW1lPVwiYXBwbGUtbW9iaWxlLXdlYi1hcHAtc3RhdHVzLWJhci1zdHlsZVwiIGNvbnRlbnQ9XCJibGFjay10cmFuc2x1Y2VudFwiPjxtZXRhIG5hbWU9XCJhcHBsZS1tb2JpbGUtd2ViLWFwcC10aXRsZVwiIGNvbnRlbnQ9XCJTbmFwY2hhdFwiPjxsaW5rIHJlbD1cImFwcGxlLXRvdWNoLXN0YXJ0dXAtaW1hZ2VcIiBtZWRpYT1cIihkZXZpY2Utd2lkdGg6IDMyMHB4KSBhbmQgKGRldmljZS1oZWlnaHQ6IDU2OHB4KSBhbmQgKC13ZWJraXQtZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdClcIiBocmVmPVwiaHR0cHM6Ly9jZi1zdC5zYy1jZG4ubmV0L2R3L2Zhdmljb25zL2U5YjZkMmQzL2FwcGxlLXRvdWNoLXN0YXJ0dXAtaW1hZ2UtNjQweDExMzYucG5nXCIgaW50ZWdyaXR5PVwic2hhMzg0LTc4c3JnaE1neEpoRWNCeXA2TkxCQUttS2JZL1BMb0J3T0tKNWlHSnMxZURjSWl6c1NuNXRvR3hEbU45cFplL1pcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPjxsaW5rIHJlbD1cImFwcGxlLXRvdWNoLXN0YXJ0dXAtaW1hZ2VcIiBtZWRpYT1cIihkZXZpY2Utd2lkdGg6IDM3NXB4KSBhbmQgKGRldmljZS1oZWlnaHQ6IDY2N3B4KSBhbmQgKC13ZWJraXQtZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdClcIiBocmVmPVwiaHR0cHM6Ly9jZi1zdC5zYy1jZG4ubmV0L2R3L2Zhdmljb25zL2U5YjZkMmQzL2FwcGxlLXRvdWNoLXN0YXJ0dXAtaW1hZ2UtNzUweDEzMzQucG5nXCIgaW50ZWdyaXR5PVwic2hhMzg0LUNmRDBVZ3NHa0puR2J3ZklSUGtDcVlOejNIMWt2bitBU293cUFKODFqVGg3NkE1Mmd2U1FGbk1uZW9xVDJWbWtcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPjxsaW5rIHJlbD1cImFwcGxlLXRvdWNoLXN0YXJ0dXAtaW1hZ2VcIiBtZWRpYT1cIihkZXZpY2Utd2lkdGg6IDQxNHB4KSBhbmQgKGRldmljZS1oZWlnaHQ6IDg5NnB4KSBhbmQgKC13ZWJraXQtZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdClcIiBocmVmPVwiaHR0cHM6Ly9jZi1zdC5zYy1jZG4ubmV0L2R3L2Zhdmljb25zL2U5YjZkMmQzL2FwcGxlLXRvdWNoLXN0YXJ0dXAtaW1hZ2UtODI4eDE3OTIucG5nXCIgaW50ZWdyaXR5PVwic2hhMzg0LU81SFdVOG0yeU1VWkZXeFBnTTRsdkZyNDVtRDdrVFpraUtPTS9oSitkcWkyOUxuN1lRK2xyVU9hQXlHclM1NktcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPjxsaW5rIHJlbD1cImFwcGxlLXRvdWNoLXN0YXJ0dXAtaW1hZ2VcIiBtZWRpYT1cIihkZXZpY2Utd2lkdGg6IDM3NXB4KSBhbmQgKGRldmljZS1oZWlnaHQ6IDgxMnB4KSBhbmQgKC13ZWJraXQtZGV2aWNlLXBpeGVsLXJhdGlvOiAzKSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdClcIiBocmVmPVwiaHR0cHM6Ly9jZi1zdC5zYy1jZG4ubmV0L2R3L2Zhdmljb25zL2U5YjZkMmQzL2FwcGxlLXRvdWNoLXN0YXJ0dXAtaW1hZ2UtMTEyNXgyNDM2LnBuZ1wiIGludGVncml0eT1cInNoYTM4NC1mem9aM0EveGZCYVZrKzBlRXJjc3EvY3VJc21rdmtLTUEyZkRVRDk3N1doMXJYNlpHVk12WmFNQ3JtZ3VCN09RXCIgY3Jvc3NvcmlnaW49XCJhbm9ueW1vdXNcIj48bGluayByZWw9XCJhcHBsZS10b3VjaC1zdGFydHVwLWltYWdlXCIgbWVkaWE9XCIoZGV2aWNlLXdpZHRoOiA0MTRweCkgYW5kIChkZXZpY2UtaGVpZ2h0OiA3MzZweCkgYW5kICgtd2Via2l0LWRldmljZS1waXhlbC1yYXRpbzogMykgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpXCIgaHJlZj1cImh0dHBzOi8vY2Ytc3Quc2MtY2RuLm5ldC9kdy9mYXZpY29ucy9lOWI2ZDJkMy9hcHBsZS10b3VjaC1zdGFydHVwLWltYWdlLTEyNDJ4MjIwOC5wbmdcIiBpbnRlZ3JpdHk9XCJzaGEzODQtUjVkbUpZcXMvcFBCMEgwVURFTm9ZUEg3Y3cwZU9BaGxEWWZEYktOSmdLemhvakZJdlNZWkt6bCtTZCtJU0l5ZlwiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+PGxpbmsgcmVsPVwiYXBwbGUtdG91Y2gtc3RhcnR1cC1pbWFnZVwiIG1lZGlhPVwiKGRldmljZS13aWR0aDogNDE0cHgpIGFuZCAoZGV2aWNlLWhlaWdodDogODk2cHgpIGFuZCAoLXdlYmtpdC1kZXZpY2UtcGl4ZWwtcmF0aW86IDMpIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KVwiIGhyZWY9XCJodHRwczovL2NmLXN0LnNjLWNkbi5uZXQvZHcvZmF2aWNvbnMvZTliNmQyZDMvYXBwbGUtdG91Y2gtc3RhcnR1cC1pbWFnZS0xMjQyeDI2ODgucG5nXCIgaW50ZWdyaXR5PVwic2hhMzg0LVlmcGZLanVubE1jSmkybXlIREpjN0czZGVyQ2tUOVlpQ3UydDNBU1A1bXZJL0FyTTNhTktMMkVXTU8vYXFJdytcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPjxsaW5rIHJlbD1cImFwcGxlLXRvdWNoLXN0YXJ0dXAtaW1hZ2VcIiBtZWRpYT1cIihkZXZpY2Utd2lkdGg6IDc2OHB4KSBhbmQgKGRldmljZS1oZWlnaHQ6IDEwMjRweCkgYW5kICgtd2Via2l0LWRldmljZS1waXhlbC1yYXRpbzogMikgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpXCIgaHJlZj1cImh0dHBzOi8vY2Ytc3Quc2MtY2RuLm5ldC9kdy9mYXZpY29ucy9lOWI2ZDJkMy9hcHBsZS10b3VjaC1zdGFydHVwLWltYWdlLTE1MzZ4MjA0OC5wbmdcIiBpbnRlZ3JpdHk9XCJzaGEzODQtTTJUbS90a21CTXkrZWZ2WmgvYUIwbmJTVjNpTThHN3dERzIySktzWDJmcSs2UkdYN3IyRm13N3B4MXpjSUdyOFwiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+PGxpbmsgcmVsPVwiYXBwbGUtdG91Y2gtc3RhcnR1cC1pbWFnZVwiIG1lZGlhPVwiKGRldmljZS13aWR0aDogODM0cHgpIGFuZCAoZGV2aWNlLWhlaWdodDogMTExMnB4KSBhbmQgKC13ZWJraXQtZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdClcIiBocmVmPVwiaHR0cHM6Ly9jZi1zdC5zYy1jZG4ubmV0L2R3L2Zhdmljb25zL2U5YjZkMmQzL2FwcGxlLXRvdWNoLXN0YXJ0dXAtaW1hZ2UtMTY2OHgyMjI0LnBuZ1wiIGludGVncml0eT1cInNoYTM4NC1SQXplU09MdXZXZ0QvazhGKy9GN0g0NE16cFVlNXNWNXdZZDRvVjVVaXErTDFoN2hvY0RNMUxabE9pN0NldWtHXCIgY3Jvc3NvcmlnaW49XCJhbm9ueW1vdXNcIj48bGluayByZWw9XCJhcHBsZS10b3VjaC1zdGFydHVwLWltYWdlXCIgbWVkaWE9XCIoZGV2aWNlLXdpZHRoOiA4MzRweCkgYW5kIChkZXZpY2UtaGVpZ2h0OiAxMTk0cHgpIGFuZCAoLXdlYmtpdC1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KVwiIGhyZWY9XCJodHRwczovL2NmLXN0LnNjLWNkbi5uZXQvZHcvZmF2aWNvbnMvZTliNmQyZDMvYXBwbGUtdG91Y2gtc3RhcnR1cC1pbWFnZS0xNjY4eDIzODgucG5nXCIgaW50ZWdyaXR5PVwic2hhMzg0LUQyclViYzg1UGIzMENkeldaS0lDd08wR0ZJc1l2bHZiTkswRCt3eGhNSVZwcERNSHBuWkZmSzF5d2FoRmgyV3pcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPjxsaW5rIHJlbD1cImFwcGxlLXRvdWNoLXN0YXJ0dXAtaW1hZ2VcIiBtZWRpYT1cIihkZXZpY2Utd2lkdGg6IDEwMjRweCkgYW5kIChkZXZpY2UtaGVpZ2h0OiAxMzY2cHgpIGFuZCAoLXdlYmtpdC1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KVwiIGhyZWY9XCJodHRwczovL2NmLXN0LnNjLWNkbi5uZXQvZHcvZmF2aWNvbnMvZTliNmQyZDMvYXBwbGUtdG91Y2gtc3RhcnR1cC1pbWFnZS0yMDQ4eDI3MzIucG5nXCIgaW50ZWdyaXR5PVwic2hhMzg0LWZKWnBGQUZaWUMrZ3V4L1NYT2dhOGRSVy9pazZIM3BGV3JvYTRQWm5sSEk2UUM1bUVQcy9uamJjZURxcmxsdnBcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPjxsaW5rIHJlbD1cImFwcGxlLXRvdWNoLXN0YXJ0dXAtaW1hZ2VcIiBtZWRpYT1cIihkZXZpY2Utd2lkdGg6IDgxMHB4KSBhbmQgKGRldmljZS1oZWlnaHQ6IDEwODBweCkgYW5kICgtd2Via2l0LWRldmljZS1waXhlbC1yYXRpbzogMikgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpXCIgaHJlZj1cImh0dHBzOi8vY2Ytc3Quc2MtY2RuLm5ldC9kdy9mYXZpY29ucy9lOWI2ZDJkMy9hcHBsZS10b3VjaC1zdGFydHVwLWltYWdlLTE2MjB4MjE2MC5wbmdcIiBpbnRlZ3JpdHk9XCJzaGEzODQtUnZvajdsVVpSQm13aldqZHFlVDJMU0ExVDlNMFZRRjR4MTF3bWlOcWpNallMUlljandMWlgxNDF3SVZFclFpc1wiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+PGxpbmsgcmVsPVwiYXBwbGUtdG91Y2gtc3RhcnR1cC1pbWFnZVwiIG1lZGlhPVwiKGRldmljZS13aWR0aDogMzIwcHgpIGFuZCAoZGV2aWNlLWhlaWdodDogNTY4cHgpIGFuZCAoLXdlYmtpdC1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSlcIiBocmVmPVwiaHR0cHM6Ly9jZi1zdC5zYy1jZG4ubmV0L2R3L2Zhdmljb25zL2U5YjZkMmQzL2FwcGxlLXRvdWNoLXN0YXJ0dXAtaW1hZ2UtMTEzNng2NDAucG5nXCIgaW50ZWdyaXR5PVwic2hhMzg0LTZWZzgyY1ZLNGpNQU1jWGxXTWl6UGk4dm9OdjNIaUx2WmRvdFNtNW1lNnF2Rm0xbFhzeGluTm9SWkRqM1MvRmNcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPjxsaW5rIHJlbD1cImFwcGxlLXRvdWNoLXN0YXJ0dXAtaW1hZ2VcIiBtZWRpYT1cIihkZXZpY2Utd2lkdGg6IDM3NXB4KSBhbmQgKGRldmljZS1oZWlnaHQ6IDY2N3B4KSBhbmQgKC13ZWJraXQtZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpXCIgaHJlZj1cImh0dHBzOi8vY2Ytc3Quc2MtY2RuLm5ldC9kdy9mYXZpY29ucy9lOWI2ZDJkMy9hcHBsZS10b3VjaC1zdGFydHVwLWltYWdlLTEzMzR4NzUwLnBuZ1wiIGludGVncml0eT1cInNoYTM4NC03dHBTMTBpN1ZqYjYrYktoK1E2eXdqUUJ1WkV5TFg1L1RoaWFBbzZoKzZ1S1liVHBhTFVEVSt0WDA3eXI1bEllXCIgY3Jvc3NvcmlnaW49XCJhbm9ueW1vdXNcIj48bGluayByZWw9XCJhcHBsZS10b3VjaC1zdGFydHVwLWltYWdlXCIgbWVkaWE9XCIoZGV2aWNlLXdpZHRoOiA0MTRweCkgYW5kIChkZXZpY2UtaGVpZ2h0OiA4OTZweCkgYW5kICgtd2Via2l0LWRldmljZS1waXhlbC1yYXRpbzogMikgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKVwiIGhyZWY9XCJodHRwczovL2NmLXN0LnNjLWNkbi5uZXQvZHcvZmF2aWNvbnMvZTliNmQyZDMvYXBwbGUtdG91Y2gtc3RhcnR1cC1pbWFnZS0xNzkyeDgyOC5wbmdcIiBpbnRlZ3JpdHk9XCJzaGEzODQtMVRpbmpwaE5oYzB4VEhIU0J5ZXU1WUp3dy85SFJLSUxUcUtwdDNUUDJsa0dZc0VUTG1mYks0ckwydmx5c0kxdFwiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+PGxpbmsgcmVsPVwiYXBwbGUtdG91Y2gtc3RhcnR1cC1pbWFnZVwiIG1lZGlhPVwiKGRldmljZS13aWR0aDogMzc1cHgpIGFuZCAoZGV2aWNlLWhlaWdodDogODEycHgpIGFuZCAoLXdlYmtpdC1kZXZpY2UtcGl4ZWwtcmF0aW86IDMpIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSlcIiBocmVmPVwiaHR0cHM6Ly9jZi1zdC5zYy1jZG4ubmV0L2R3L2Zhdmljb25zL2U5YjZkMmQzL2FwcGxlLXRvdWNoLXN0YXJ0dXAtaW1hZ2UtMjQzNngxMTI1LnBuZ1wiIGludGVncml0eT1cInNoYTM4NC1FcnBPNENwMDUzUkl6MGpvQU45ditPYzFGT1RLYXhhRVpySVJkSytpak5BVjNEcTJjKzFkNHpFR2RyRW4wVzlZXCIgY3Jvc3NvcmlnaW49XCJhbm9ueW1vdXNcIj48bGluayByZWw9XCJhcHBsZS10b3VjaC1zdGFydHVwLWltYWdlXCIgbWVkaWE9XCIoZGV2aWNlLXdpZHRoOiA0MTRweCkgYW5kIChkZXZpY2UtaGVpZ2h0OiA3MzZweCkgYW5kICgtd2Via2l0LWRldmljZS1waXhlbC1yYXRpbzogMykgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKVwiIGhyZWY9XCJodHRwczovL2NmLXN0LnNjLWNkbi5uZXQvZHcvZmF2aWNvbnMvZTliNmQyZDMvYXBwbGUtdG91Y2gtc3RhcnR1cC1pbWFnZS0yMjA4eDEyNDIucG5nXCIgaW50ZWdyaXR5PVwic2hhMzg0LWZ2LzlEOVVkNmhMam1oNnVWT0MvQlplY2czY1J6SVRTZnVDNVdXbkNwUVRUNSs0K25UdU1zUWlvRGI2VjZ2azZcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPjxsaW5rIHJlbD1cImFwcGxlLXRvdWNoLXN0YXJ0dXAtaW1hZ2VcIiBtZWRpYT1cIihkZXZpY2Utd2lkdGg6IDQxNHB4KSBhbmQgKGRldmljZS1oZWlnaHQ6IDg5NnB4KSBhbmQgKC13ZWJraXQtZGV2aWNlLXBpeGVsLXJhdGlvOiAzKSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpXCIgaHJlZj1cImh0dHBzOi8vY2Ytc3Quc2MtY2RuLm5ldC9kdy9mYXZpY29ucy9lOWI2ZDJkMy9hcHBsZS10b3VjaC1zdGFydHVwLWltYWdlLTI2ODh4MTI0Mi5wbmdcIiBpbnRlZ3JpdHk9XCJzaGEzODQtdmdNWXpKRjhWdm0zQitNSkNlMHNBQlBJejMwbG5vYzh4Wjc1MCtMUVFKdElpR3NodHVSSCtXdmM1VEoxMzBpZVwiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+PGxpbmsgcmVsPVwiYXBwbGUtdG91Y2gtc3RhcnR1cC1pbWFnZVwiIG1lZGlhPVwiKGRldmljZS13aWR0aDogNzY4cHgpIGFuZCAoZGV2aWNlLWhlaWdodDogMTAyNHB4KSBhbmQgKC13ZWJraXQtZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpXCIgaHJlZj1cImh0dHBzOi8vY2Ytc3Quc2MtY2RuLm5ldC9kdy9mYXZpY29ucy9lOWI2ZDJkMy9hcHBsZS10b3VjaC1zdGFydHVwLWltYWdlLTIwNDh4MTUzNi5wbmdcIiBpbnRlZ3JpdHk9XCJzaGEzODQtcWtkNExwbVpudUY0V1dUZ29rSzFNQ3ZJa2g4bWd4d0FLbThJRXVCWTI3MDhmZ1lhU3pDWk9aNzZCZ0JPUWZaeFwiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+PGxpbmsgcmVsPVwiYXBwbGUtdG91Y2gtc3RhcnR1cC1pbWFnZVwiIG1lZGlhPVwiKGRldmljZS13aWR0aDogODM0cHgpIGFuZCAoZGV2aWNlLWhlaWdodDogMTExMnB4KSBhbmQgKC13ZWJraXQtZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpXCIgaHJlZj1cImh0dHBzOi8vY2Ytc3Quc2MtY2RuLm5ldC9kdy9mYXZpY29ucy9lOWI2ZDJkMy9hcHBsZS10b3VjaC1zdGFydHVwLWltYWdlLTIyMjR4MTY2OC5wbmdcIiBpbnRlZ3JpdHk9XCJzaGEzODQtVXNRRys3eU0rY002NnJ4TzIzL0lwSzJjOVpEZC85WEFzclcrUTRpeDVNNEQzVHFMV1VxNkVnMEZ2OGt6RzdTbVwiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+PGxpbmsgcmVsPVwiYXBwbGUtdG91Y2gtc3RhcnR1cC1pbWFnZVwiIG1lZGlhPVwiKGRldmljZS13aWR0aDogODM0cHgpIGFuZCAoZGV2aWNlLWhlaWdodDogMTE5NHB4KSBhbmQgKC13ZWJraXQtZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpXCIgaHJlZj1cImh0dHBzOi8vY2Ytc3Quc2MtY2RuLm5ldC9kdy9mYXZpY29ucy9lOWI2ZDJkMy9hcHBsZS10b3VjaC1zdGFydHVwLWltYWdlLTIzODh4MTY2OC5wbmdcIiBpbnRlZ3JpdHk9XCJzaGEzODQtUDE0Yi80VlRPczRYMHhVMWtMbDBWMXREakIzU2tVWkJZaTBjY3EvVXA2dE5Kd0FzMXZRdHhxUmFoUUNkYXZZcFwiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+PGxpbmsgcmVsPVwiYXBwbGUtdG91Y2gtc3RhcnR1cC1pbWFnZVwiIG1lZGlhPVwiKGRldmljZS13aWR0aDogMTAyNHB4KSBhbmQgKGRldmljZS1oZWlnaHQ6IDEzNjZweCkgYW5kICgtd2Via2l0LWRldmljZS1waXhlbC1yYXRpbzogMikgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKVwiIGhyZWY9XCJodHRwczovL2NmLXN0LnNjLWNkbi5uZXQvZHcvZmF2aWNvbnMvZTliNmQyZDMvYXBwbGUtdG91Y2gtc3RhcnR1cC1pbWFnZS0yNzMyeDIwNDgucG5nXCIgaW50ZWdyaXR5PVwic2hhMzg0LXRaZFpmbHI3dkhkS2tsSVVQajJGVnZ5eWt2NCtyeW90c2FrcGFlemxkOVVRQldGWXlNZjNRNnBsNnRNM1I1dm5cIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPjxsaW5rIHJlbD1cImFwcGxlLXRvdWNoLXN0YXJ0dXAtaW1hZ2VcIiBtZWRpYT1cIihkZXZpY2Utd2lkdGg6IDgxMHB4KSBhbmQgKGRldmljZS1oZWlnaHQ6IDEwODBweCkgYW5kICgtd2Via2l0LWRldmljZS1waXhlbC1yYXRpbzogMikgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKVwiIGhyZWY9XCJodHRwczovL2NmLXN0LnNjLWNkbi5uZXQvZHcvZmF2aWNvbnMvZTliNmQyZDMvYXBwbGUtdG91Y2gtc3RhcnR1cC1pbWFnZS0yMTYweDE2MjAucG5nXCIgaW50ZWdyaXR5PVwic2hhMzg0LStTa1hVWXNQV3NEcjE4Z2s4bmNQQlZTNVp4bDhpakJBRFJjT3hkV1ppYW9IWWIzbVlnTmR0bktjNy8wUlFaR2xcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPjxtZXRhIG5hbWU9XCJtc2FwcGxpY2F0aW9uLVRpbGVDb2xvclwiIGNvbnRlbnQ9XCIjRkZGQzAwXCI+PG1ldGEgbmFtZT1cIm1zYXBwbGljYXRpb24tVGlsZUltYWdlXCIgY29udGVudD1cImh0dHBzOi8vY2Ytc3Quc2MtY2RuLm5ldC9kdy9mYXZpY29ucy9lOWI2ZDJkMy9tc3RpbGUtMTQ0eDE0NC5wbmdcIj48bWV0YSBuYW1lPVwibXNhcHBsaWNhdGlvbi1jb25maWdcIiBjb250ZW50PVwiaHR0cHM6Ly9jZi1zdC5zYy1jZG4ubmV0L2R3L2Zhdmljb25zL2U5YjZkMmQzL2Jyb3dzZXJjb25maWcueG1sXCI+PHNjcmlwdCBkZWZlcj1cImRlZmVyXCIgc3JjPVwiaHR0cHM6Ly9jZi1zdC5zYy1jZG4ubmV0L2R3LzUwODBiOGY2ZWE5Mjc1MjlkZDQ0LmpzXCIgaW50ZWdyaXR5PVwic2hhMzg0LVlYSmV5ZmRVd3YydkxGVVlPWXpOcnFrTEYrQXZCUmV2bXhrQXVDNkdzUXM0MFJLYzZaczdkZHMrSkw0d3RKSjdcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPjwvc2NyaXB0PjxzY3JpcHQgZGVmZXI9XCJkZWZlclwiIHNyYz1cImh0dHBzOi8vY2Ytc3Quc2MtY2RuLm5ldC9kdy8yZGVkNTdlMjYxOGIzMDI3OTBlMS5qc1wiIGludGVncml0eT1cInNoYTM4NC1mWFNoSW5kTklYVkVkUklmbmU0RFBaLzNzUzk1U0F0YlgzQmc3QnJmTWhZWURoZHkwSlBVd2NmYlZRMzJUQzdPXCIgY3Jvc3NvcmlnaW49XCJhbm9ueW1vdXNcIj48L3NjcmlwdD48bGluayBocmVmPVwiaHR0cHM6Ly9jZi1zdC5zYy1jZG4ubmV0L2R3LzVmNjJmNjM3YjkyZDU4NTY0MjcxLmNzc1wiIHJlbD1cInN0eWxlc2hlZXRcIiBpbnRlZ3JpdHk9XCJzaGEzODQtZHFIWUxzVDFhREJ1c292UXgxRjlMbzF3Qm9mY3ozRFJyODJOOXY4c1BuSzlBeUN5V2NhVEV2RkpTMHZ0NGJVb1wiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+PC9oZWFkPjxib2R5PjxtYWluIGlkPVwicm9vdFwiPjxkaXYgZGF0YS1ub3NuaXBwZXQgY2xhc3M9XCJub3Rsb2FkZWRcIj48ZGl2IGNsYXNzPVwibm90bG9hZGVkX19vdmVybGF5XCI+PGltZyBjbGFzcz1cIm5vdGxvYWRlZF9fYml0bW9qaVwiIGFsdD1cIkEgY2F0IHNsZWVwaW5nIG9uIGEgbGFwdG9wIGluIGZyb250IG9mIHRoZSB1c2VyJ3MgQml0bW9qaVwiIHNyYz1cImh0dHBzOi8vY2Ytc3Quc2MtY2RuLm5ldC9kdy83NDc0NGQxYTVhMTFhYTQyY2NlOC5wbmdcIi8+PGRpdiBjbGFzcz1cIm5vdGxvYWRlZF9fdGl0bGVcIj5Pb3BzISBTb21ldGhpbmcgd2VudCB3cm9uZ1x1MjAyNjwvZGl2PjxkaXYgY2xhc3M9XCJub3Rsb2FkZWRfX3RleHRcIj5UcnkgPGEgaHJlZj1cImh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vY2hyb21lL1wiIHRhcmdldD1cIl9ibGFua1wiPmFub3RoZXIgYnJvd3NlcjwvYT4sIHJlbG9hZCB0aGUgcGFnZSwgb3IgdmlzaXQgPGEgaHJlZj1cImh0dHBzOi8vd3d3LnNuYXBjaGF0LmNvbS9zdXBwb3J0XCIgdGFyZ2V0PVwiX2JsYW5rXCI+d3d3LnNuYXBjaGF0LmNvbS9zdXBwb3J0PC9hPiBmb3IgaGVscC48L2Rpdj48ZGl2IGNsYXNzPVwibm90bG9hZGVkX192ZXJzaW9uXCI+U25hcGNoYXQgdjEyLjM2LjAgKHByb2QgNGVmMWY1ZDcpPC9kaXY+PC9kaXY+PC9kaXY+PC9tYWluPjwhLS0gQW4gYWx3YXlzLXByZXNlbnQgZGl2IG9uIHRoZSBib2R5IHRvIHdoaWNoIHdlIGF0dGFjaCBlbGVtZW50cyB0byB3aGVuIHVzaW5nIFJlYWN0RG9tLmNyZWF0ZVBvcnRhbCAtLT48ZGl2IGlkPVwicG9ydGFsLWNvbnRhaW5lclwiPjwvZGl2PjwvYm9keT48L2h0bWw+In0sICJoZWFkZXJzU2l6ZSI6IDAsICJib2R5U2l6ZSI6IDU0ODMsICJyZWRpcmVjdFVSTCI6ICIiLCAiX3RyYW5zZmVyU2l6ZSI6IDU0ODN9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IDIwLjAwMywgImNvbm5lY3QiOiA0Ni45NCwgInNzbCI6IDMwLjc2NCwgInNlbmQiOiAwLCAid2FpdCI6IDEzMC4xNzQsICJyZWNlaXZlIjogMzMuMzIxfSwgInBhZ2VyZWYiOiAicGFnZUBlOTFhN2RiNWU0YTc0ZmM5MGYyZmViMjcwZGRhYTI5YyIsICJzZXJ2ZXJJUEFkZHJlc3MiOiAiMzQuMTQ5LjQ2LjEzMCIsICJfc2VydmVyUG9ydCI6IDQ0MywgIl9zZWN1cml0eURldGFpbHMiOiB7InByb3RvY29sIjogIlRMUyAxLjMiLCAic3ViamVjdE5hbWUiOiAiKi5zbmFwLmNvbSIsICJpc3N1ZXIiOiAiRGlnaUNlcnQgR2xvYmFsIEcyIFRMUyBSU0EgU0hBMjU2IDIwMjAgQ0ExIiwgInZhbGlkRnJvbSI6IDE2ODEzNDQwMDAsICJ2YWxpZFRvIjogMTcxMjk2NjM5OX19LCB7InN0YXJ0ZWREYXRlVGltZSI6ICIyMDIzLTA1LTI2VDAxOjQ5OjAyLjA4N1oiLCAidGltZSI6IDU4LjY3MiwgInJlcXVlc3QiOiB7Im1ldGhvZCI6ICJHRVQiLCAidXJsIjogImh0dHBzOi8vY2Ytc3Quc2MtY2RuLm5ldC9kdy81MDgwYjhmNmVhOTI3NTI5ZGQ0NC5qcyIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzEuMSIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICJBY2NlcHQiLCAidmFsdWUiOiAiKi8qIn0sIHsibmFtZSI6ICJBY2NlcHQtRW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCwgZGVmbGF0ZSwgYnIifSwgeyJuYW1lIjogIkNvbm5lY3Rpb24iLCAidmFsdWUiOiAia2VlcC1hbGl2ZSJ9LCB7Im5hbWUiOiAiSG9zdCIsICJ2YWx1ZSI6ICJjZi1zdC5zYy1jZG4ubmV0In0sIHsibmFtZSI6ICJPcmlnaW4iLCAidmFsdWUiOiAiaHR0cHM6Ly93ZWIuc25hcGNoYXQuY29tIn0sIHsibmFtZSI6ICJSZWZlcmVyIiwgInZhbHVlIjogImh0dHBzOi8vd2ViLnNuYXBjaGF0LmNvbS8ifSwgeyJuYW1lIjogIlNlYy1GZXRjaC1EZXN0IiwgInZhbHVlIjogInNjcmlwdCJ9LCB7Im5hbWUiOiAiU2VjLUZldGNoLU1vZGUiLCAidmFsdWUiOiAiY29ycyJ9LCB7Im5hbWUiOiAiU2VjLUZldGNoLVNpdGUiLCAidmFsdWUiOiAiY3Jvc3Mtc2l0ZSJ9LCB7Im5hbWUiOiAiVXNlci1BZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTEzLjAuNTY3Mi41MyBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbXSwgImhlYWRlcnNTaXplIjogNDEyLCAiYm9keVNpemUiOiAwfSwgInJlc3BvbnNlIjogeyJzdGF0dXMiOiAyMDAsICJzdGF0dXNUZXh0IjogIk9LIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMS4xIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbiIsICJ2YWx1ZSI6ICJodHRwczovL3dlYi5zbmFwY2hhdC5jb20ifSwgeyJuYW1lIjogIkFnZSIsICJ2YWx1ZSI6ICI2NzQ2In0sIHsibmFtZSI6ICJBbHQtU3ZjIiwgInZhbHVlIjogImgzPVwiOjQ0M1wiOyBtYT04NjQwMCJ9LCB7Im5hbWUiOiAiQ2FjaGUtQ29udHJvbCIsICJ2YWx1ZSI6ICJtYXgtYWdlPTYwNDgwMCwgaW1tdXRhYmxlIn0sIHsibmFtZSI6ICJDb25uZWN0aW9uIiwgInZhbHVlIjogImtlZXAtYWxpdmUifSwgeyJuYW1lIjogIkNvbnRlbnQtRW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCJ9LCB7Im5hbWUiOiAiQ29udGVudC1UeXBlIiwgInZhbHVlIjogImFwcGxpY2F0aW9uL2phdmFzY3JpcHQifSwgeyJuYW1lIjogIkRhdGUiLCAidmFsdWUiOiAiVGh1LCAyNSBNYXkgMjAyMyAyMzo1NjozNyBHTVQifSwgeyJuYW1lIjogIkVUYWciLCAidmFsdWUiOiAiVy9cImZjYzI1MjAxM2QyY2NjYjVkMTMyZjUwODRjNTI2YTJhXCIifSwgeyJuYW1lIjogIkxhc3QtTW9kaWZpZWQiLCAidmFsdWUiOiAiV2VkLCAyNCBNYXkgMjAyMyAxNzoyMDo0NCBHTVQifSwgeyJuYW1lIjogIlNlcnZlciIsICJ2YWx1ZSI6ICJBbWF6b25TMyJ9LCB7Im5hbWUiOiAiVHJhbnNmZXItRW5jb2RpbmciLCAidmFsdWUiOiAiY2h1bmtlZCJ9LCB7Im5hbWUiOiAiVmFyeSIsICJ2YWx1ZSI6ICJBY2NlcHQtRW5jb2RpbmcsT3JpZ2luIn0sIHsibmFtZSI6ICJWYXJ5IiwgInZhbHVlIjogIk9yaWdpbiJ9LCB7Im5hbWUiOiAiVmlhIiwgInZhbHVlIjogIjEuMSBhNGE4MGFjN2ZmZWU3OGMwNDI3MjhmNTJlM2Y3MjllMC5jbG91ZGZyb250Lm5ldCAoQ2xvdWRGcm9udCkifSwgeyJuYW1lIjogIlgtQW16LUNmLUlkIiwgInZhbHVlIjogImJYSEpydVZCaTZyZThGOWJzRkhwTVUxOTc3WERoNXlndWZZOVVfNDNmZmh6Wl9GempLZHZpdz09In0sIHsibmFtZSI6ICJYLUFtei1DZi1Qb3AiLCAidmFsdWUiOiAiTVVDNTAtUDEifSwgeyJuYW1lIjogIlgtQ2FjaGUiLCAidmFsdWUiOiAiSGl0IGZyb20gY2xvdWRmcm9udCJ9LCB7Im5hbWUiOiAieC1hbXotc2VydmVyLXNpZGUtZW5jcnlwdGlvbiIsICJ2YWx1ZSI6ICJBRVMyNTYifV0sICJjb250ZW50IjogeyJzaXplIjogMTUxOTksICJtaW1lVHlwZSI6ICJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiwgImNvbXByZXNzaW9uIjogNjM4MSwgInRleHQiOiAiKCgpPT57dmFyIGUsYSx0LHIsbyxkLG4sSCxzLGM9e30sZj17fTtmdW5jdGlvbiBpKGUpe3ZhciBhPWZbZV07aWYodm9pZCAwIT09YSlyZXR1cm4gYS5leHBvcnRzO3ZhciB0PWZbZV09e2lkOmUsbG9hZGVkOiExLGV4cG9ydHM6e319O3JldHVybiBjW2VdLmNhbGwodC5leHBvcnRzLHQsdC5leHBvcnRzLGkpLHQubG9hZGVkPSEwLHQuZXhwb3J0c31pLm09YyxpLmFtZE89e30sZT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sKFwid2VicGFjayBxdWV1ZXNcIik6XCJfX3dlYnBhY2tfcXVldWVzX19cIixhPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbD9TeW1ib2woXCJ3ZWJwYWNrIGV4cG9ydHNcIik6XCJfX3dlYnBhY2tfZXhwb3J0c19fXCIsdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sKFwid2VicGFjayBlcnJvclwiKTpcIl9fd2VicGFja19lcnJvcl9fXCIscj1lPT57ZSYmIWUuZCYmKGUuZD0xLGUuZm9yRWFjaCgoZT0+ZS5yLS0pKSxlLmZvckVhY2goKGU9PmUuci0tP2UucisrOmUoKSkpKX0saS5hPShvLGQsbik9Pnt2YXIgSDtuJiYoKEg9W10pLmQ9MSk7dmFyIHMsYyxmLGk9bmV3IFNldCxsPW8uZXhwb3J0cyxiPW5ldyBQcm9taXNlKCgoZSxhKT0+e2Y9YSxjPWV9KSk7YlthXT1sLGJbZV09ZT0+KEgmJmUoSCksaS5mb3JFYWNoKGUpLGIuY2F0Y2goKGU9Pnt9KSkpLG8uZXhwb3J0cz1iLGQoKG89Pnt2YXIgZDtzPShvPT5vLm1hcCgobz0+e2lmKG51bGwhPT1vJiZcIm9iamVjdFwiPT10eXBlb2Ygbyl7aWYob1tlXSlyZXR1cm4gbztpZihvLnRoZW4pe3ZhciBkPVtdO2QuZD0wLG8udGhlbigoZT0+e25bYV09ZSxyKGQpfSksKGU9PntuW3RdPWUscihkKX0pKTt2YXIgbj17fTtyZXR1cm4gbltlXT1lPT5lKGQpLG59fXZhciBIPXt9O3JldHVybiBIW2VdPWU9Pnt9LEhbYV09byxIfSkpKShvKTt2YXIgbj0oKT0+cy5tYXAoKGU9PntpZihlW3RdKXRocm93IGVbdF07cmV0dXJuIGVbYV19KSksYz1uZXcgUHJvbWlzZSgoYT0+eyhkPSgpPT5hKG4pKS5yPTA7dmFyIHQ9ZT0+ZSE9PUgmJiFpLmhhcyhlKSYmKGkuYWRkKGUpLGUmJiFlLmQmJihkLnIrKyxlLnB1c2goZCkpKTtzLm1hcCgoYT0+YVtlXSh0KSkpfSkpO3JldHVybiBkLnI/YzpuKCl9KSwoZT0+KGU/ZihiW3RdPWUpOmMobCkscihIKSkpKSxIJiYoSC5kPTApfSxvPVtdLGkuTz0oZSxhLHQscik9PntpZighYSl7dmFyIGQ9MS8wO2ZvcihjPTA7YzxvLmxlbmd0aDtjKyspe2Zvcih2YXJbYSx0LHJdPW9bY10sbj0hMCxIPTA7SDxhLmxlbmd0aDtIKyspKCExJnJ8fGQ+PXIpJiZPYmplY3Qua2V5cyhpLk8pLmV2ZXJ5KChlPT5pLk9bZV0oYVtIXSkpKT9hLnNwbGljZShILS0sMSk6KG49ITEscjxkJiYoZD1yKSk7aWYobil7by5zcGxpY2UoYy0tLDEpO3ZhciBzPXQoKTt2b2lkIDAhPT1zJiYoZT1zKX19cmV0dXJuIGV9cj1yfHwwO2Zvcih2YXIgYz1vLmxlbmd0aDtjPjAmJm9bYy0xXVsyXT5yO2MtLSlvW2NdPW9bYy0xXTtvW2NdPVthLHQscl19LGkubj1lPT57dmFyIGE9ZSYmZS5fX2VzTW9kdWxlPygpPT5lLmRlZmF1bHQ6KCk9PmU7cmV0dXJuIGkuZChhLHthfSksYX0sbj1PYmplY3QuZ2V0UHJvdG90eXBlT2Y/ZT0+T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpOmU9PmUuX19wcm90b19fLGkudD1mdW5jdGlvbihlLGEpe2lmKDEmYSYmKGU9dGhpcyhlKSksOCZhKXJldHVybiBlO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBlJiZlKXtpZig0JmEmJmUuX19lc01vZHVsZSlyZXR1cm4gZTtpZigxNiZhJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnRoZW4pcmV0dXJuIGV9dmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtpLnIodCk7dmFyIHI9e307ZD1kfHxbbnVsbCxuKHt9KSxuKFtdKSxuKG4pXTtmb3IodmFyIG89MiZhJiZlO1wib2JqZWN0XCI9PXR5cGVvZiBvJiYhfmQuaW5kZXhPZihvKTtvPW4obykpT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobykuZm9yRWFjaCgoYT0+clthXT0oKT0+ZVthXSkpO3JldHVybiByLmRlZmF1bHQ9KCk9PmUsaS5kKHQsciksdH0saS5kPShlLGEpPT57Zm9yKHZhciB0IGluIGEpaS5vKGEsdCkmJiFpLm8oZSx0KSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7ZW51bWVyYWJsZTohMCxnZXQ6YVt0XX0pfSxpLmY9e30saS5lPWU9PlByb21pc2UuYWxsKE9iamVjdC5rZXlzKGkuZikucmVkdWNlKCgoYSx0KT0+KGkuZlt0XShlLGEpLGEpKSxbXSkpLGkudT1lPT42NDA1PT09ZT9cImR3L3RyYW5zbGF0aW9ucy1mNzMyZjE2YjYzOTViOGM3YTViZi5qc1wiOjcxNDk9PT1lP1wiZHcvdHJhbnNsYXRpb25zLTllZDZiNmQ5YjEyNmQyODgxMWMxLmpzXCI6NjI0Mj09PWU/XCJkdy90cmFuc2xhdGlvbnMtZjcyZTc0OWQ3MjFiMjJkYWUxZjQuanNcIjozNDQ0PT09ZT9cImR3L3RyYW5zbGF0aW9ucy1mZTA1ODFkZjMyMTMyZDdlMTQzNC5qc1wiOjQ2MzA9PT1lP1wiZHcvdHJhbnNsYXRpb25zLTI2MjMxNTIyMTNjOTY4NTEwODZmLmpzXCI6OTg5MD09PWU/XCJkdy90cmFuc2xhdGlvbnMtZGJhODRlNDk2NTdiNTRlYzkxZjcuanNcIjoxODY5PT09ZT9cImR3L3RyYW5zbGF0aW9ucy04NzZkYWQ4MDk4YWM1NDhiNmY3Mi5qc1wiOjI3MzU9PT1lP1wiZHcvdHJhbnNsYXRpb25zLTNhMzA1NDg2N2Q5OTNhYjdmMTA4LmpzXCI6OTE4Mj09PWU/XCJkdy90cmFuc2xhdGlvbnMtZDhiZTE5NDAyZWNiOTYzNDYwMGYuanNcIjo5NzUyPT09ZT9cImR3L3RyYW5zbGF0aW9ucy1iZmM1NTRkODUzYzU5MWJjZjVlYy5qc1wiOjU4MTQ9PT1lP1wiZHcvdHJhbnNsYXRpb25zLWRiZmEwOTU2ODYwNzIzZjdkMzdmLmpzXCI6ODg3NT09PWU/XCJkdy90cmFuc2xhdGlvbnMtODQ4MjczZjgyY2Y5M2IwNDczODEuanNcIjo3ODYxPT09ZT9cImR3L3RyYW5zbGF0aW9ucy04ZWY2NjYxOTk0N2E3MDc2YTE3MS5qc1wiOjk4NTA9PT1lP1wiZHcvdHJhbnNsYXRpb25zLTAxYTliNDNhNTA1ZGE0MjVlMjdkLmpzXCI6NTA3PT09ZT9cImR3L3RyYW5zbGF0aW9ucy01ODJlYjc2OGE3N2EyYjFlZGM5My5qc1wiOjczNjI9PT1lP1wiZHcvdHJhbnNsYXRpb25zLWJiMGFmZDc3ZGYzYjRkZGU2MjExLmpzXCI6NTAxOD09PWU/XCJkdy90cmFuc2xhdGlvbnMtNmYzMDQxMDU0YTFhM2NlZjE3ZmUuanNcIjo0NTQ2PT09ZT9cImR3L3RyYW5zbGF0aW9ucy0xODNlMGUxZWM4MDM0YTU4ZTcyYS5qc1wiOjU0MT09PWU/XCJkdy90cmFuc2xhdGlvbnMtNTY0M2I4NWJlYjBkMWY4ZGUwYjUuanNcIjozNjk0PT09ZT9cImR3L3RyYW5zbGF0aW9ucy03NDA5MGQ1NzNlMzMzNTg4MWIxNS5qc1wiOjE2OTI9PT1lP1wiZHcvcG9seWZpbGxzLTc5MDM5YzZjNDVjM2Y2MjI1NDkzLmpzXCI6MTk0Mj09PWU/XCJkdy9wb2x5ZmlsbHMtZGRkOTE4YWZmOTViYjQ1MjZhNTQuanNcIjo5Mz09PWU/XCJkdy9wb2x5ZmlsbHMtYjg4YTAyMDNlMTM2NjI4YWNlYzcuanNcIjo5NDk9PT1lP1wiZHcvcG9seWZpbGxzLWRhdGEtNTQwOWZlMWY4YjI0ZmJmNTUxYmIuanNcIjo0OTAzPT09ZT9cImR3L3BvbHlmaWxscy1kYXRhLTYxYzM0YjE1YWY1ZTZmNjM3OTNhLmpzXCI6NTM3OD09PWU/XCJkdy9wb2x5ZmlsbHMtZGF0YS01NDc2N2JjZmYzYjAxNjEwZjE4NS5qc1wiOjI2NzY9PT1lP1wiZHcvcG9seWZpbGxzLWRhdGEtYmNjNmQ2NmZjMWM4NDI3MTk5YTUuanNcIjo1NDY9PT1lP1wiZHcvcG9seWZpbGxzLWRhdGEtMDRhN2UwZjE0MWQwODk2MWI5MTQuanNcIjoyMDQ2PT09ZT9cImR3L3BvbHlmaWxscy1kYXRhLWY1ZTc4MDBhMDY1ODgzNGExNjMxLmpzXCI6MTMxPT09ZT9cImR3L3BvbHlmaWxscy1kYXRhLTFhNWEzOTJkMjZkOTU0YTVhNzJmLmpzXCI6MjQ1MD09PWU/XCJkdy9wb2x5ZmlsbHMtZGF0YS05NjI3MDE3NTZhMDQ1YTNkMzY0MC5qc1wiOjM1MTQ9PT1lP1wiZHcvcG9seWZpbGxzLWRhdGEtYWY2MWZiNjJiZjJmMWFkOTNhZGUuanNcIjo2MzA2PT09ZT9cImR3L3BvbHlmaWxscy1kYXRhLTBhZDAwNzg4OTJmZTMwNmQ0MGQ5LmpzXCI6NTkyND09PWU/XCJkdy9wb2x5ZmlsbHMtZGF0YS1mNGFmNTQwMjBhZWMzNWZlY2UzZC5qc1wiOjIwMDg9PT1lP1wiZHcvcG9seWZpbGxzLWRhdGEtY2FiMDAyNGYxNzI2MjI4Y2U1MGYuanNcIjo2MjIzPT09ZT9cImR3L3BvbHlmaWxscy1kYXRhLTdkNDcwYjQ5NWM0M2NhMTU3YzllLmpzXCI6ODUyNT09PWU/XCJkdy9wb2x5ZmlsbHMtZGF0YS1kYTY3YzEwMjFkYWE5NjYwZDE3Ny5qc1wiOjc3Njk9PT1lP1wiZHcvcG9seWZpbGxzLWRhdGEtNjFiN2E1NGQ4NDc5MjE3YTljNDQuanNcIjo0NDg5PT09ZT9cImR3L3BvbHlmaWxscy1kYXRhLWE0YjcxYjkzNzY2NDcxMmU1YmI3LmpzXCI6MTc2Nj09PWU/XCJkdy9wb2x5ZmlsbHMtZGF0YS1hYzEwYzA3MjUwZjhlZWY0NjUzYS5qc1wiOlwiZHcvXCIrezI3OlwiMjM4MTM1ZmQzZTM3MWRjNzU5MmFcIiwyNzY6XCJiYzYwNWRiY2Y5NTU3ZWVjZGQ2Y1wiLDI5NTpcIjIzMDA0ZGNjMTUzYjk3OGU5NzlkXCIsNDM0OlwiZWM1YWFkY2Q3Y2NlMDMwMzVjYjlcIiw1Mjk6XCJhNDc5YTFlZjA5ZGRkNjhjMGViM1wiLDg5NDpcIjEwODM5ZWFkYTU1ZGMyNjJkNzIzXCIsOTU0OlwiYjRmYWNlYzM3MmY3ZDM5ZWViNmVcIiwxNjE5OlwiOWI4NzBjNTE4YWYyYWM3MmEwZjNcIiwxODcxOlwiOTY4N2Y4NDU1N2VjOWFkNjU3NjNcIiwxODk2OlwiY2VlYjk1Yzk1MDIwMTk3Y2VmNGRcIiwyMzEzOlwiNTZiNjA4NWI2Y2EwZGU0ODZkOWRcIiwyNTQxOlwiOTlkZTJmMTI2Y2EwMzdiOWZlMThcIiwyNTYzOlwiNjlhNTVmYjkyY2ViN2I1NDU2MjRcIiwyNzYyOlwiNjdhMTczMDBkNmNiNDNjNmFkYzVcIiwyNzcxOlwiODMwYmI2MDk5ZTk1MjU1ODQwZTNcIiwzMjgxOlwiZWFiNWZjMjFmODQwNmJmMjJiYjhcIiwzODE3OlwiODdhYzYyMDMxOWNlOTQ1MmM0MDlcIiwzODczOlwiYzliYjcyNmU0ZjU2Y2IyYTA4OTJcIiw0MDAyOlwiNTIxNDJiNzVhMDExN2FjMDljYzRcIiw0NTM4OlwiNDAxOWJjMTEzZjgzODMzYmUzYmNcIiw0NzgzOlwiMzIwZDVjYmE0YzFhNWI4OTA2NzdcIiw0OTMwOlwiZGEzZWE3NTRjZmMwOGEwN2EzMWNcIiw1NDE3OlwiZDg5MDM5OTA0ZGQxNmVmMWEzNjZcIiw1NzEyOlwiNjEyZDM1MTM0Njc1YjllZjNkY2VcIiw2MDg4OlwiMDIwNjkyNjM2NWZjZTU4NDQ4ZGRcIiw2NzYxOlwiOGJlZTE1ZjAzZjkxMzU5ZjAyOWFcIiw3NDkzOlwiODczOGJjN2FlYjU1MDk4YjVkNzdcIiw4MDQyOlwiYTY5YmE3ZDExYzU2YjhlNWM3NTJcIiw4MzQyOlwiYTc2YmM4MjgzZjU1MGE0MGZmMTBcIiw4NTkyOlwiZDIwNmMxYTdhMmQ4NTc5YTE0YzZcIiw4ODI4OlwiYmVhMzAxOGVhYjNmNzExODJhZjFcIiw5MDk3OlwiMGM3NzAxN2M2N2UzNzYzNGU0ZWJcIiw5MjczOlwiZmM1ZmFlZjA3M2Q3ZmQ1YTBlM2NcIiw5MzI4OlwiYzNiZmZmOTk5YjY5ZDAzZThmZjlcIiw5Njc5OlwiZTI0ZjI2MGVmNTRjNWJkZDU0MGFcIn1bZV0rXCIuY2h1bmsuanNcIixpLm1pbmlDc3NGPWU9PlwiZHcvZTliZWJkZDI0NGM2YjFjMGNjZjEuY2h1bmsuY3NzXCIsaS5nPWZ1bmN0aW9uKCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGdsb2JhbFRoaXMpcmV0dXJuIGdsb2JhbFRoaXM7dHJ5e3JldHVybiB0aGlzfHxuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpfWNhdGNoKGUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvd319KCksaS5obWQ9ZT0+KChlPU9iamVjdC5jcmVhdGUoZSkpLmNoaWxkcmVufHwoZS5jaGlsZHJlbj1bXSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJleHBvcnRzXCIse2VudW1lcmFibGU6ITAsc2V0OigpPT57dGhyb3cgbmV3IEVycm9yKFwiRVMgTW9kdWxlcyBtYXkgbm90IGFzc2lnbiBtb2R1bGUuZXhwb3J0cyBvciBleHBvcnRzLiosIFVzZSBFU00gZXhwb3J0IHN5bnRheCwgaW5zdGVhZDogXCIrZS5pZCl9fSksZSksaS5vPShlLGEpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxhKSxIPXt9LHM9XCJAc25hcGNoYXQtd2ViLWNhbGxpbmcvYXBwOlwiLGkubD0oZSxhLHQscik9PntpZihIW2VdKUhbZV0ucHVzaChhKTtlbHNle3ZhciBvLGQ7aWYodm9pZCAwIT09dClmb3IodmFyIG49ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIiksYz0wO2M8bi5sZW5ndGg7YysrKXt2YXIgZj1uW2NdO2lmKGYuZ2V0QXR0cmlidXRlKFwic3JjXCIpPT1lfHxmLmdldEF0dHJpYnV0ZShcImRhdGEtd2VicGFja1wiKT09cyt0KXtvPWY7YnJlYWt9fW98fChkPSEwLChvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIikpLmNoYXJzZXQ9XCJ1dGYtOFwiLG8udGltZW91dD0xMjAsaS5uYyYmby5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLGkubmMpLG8uc2V0QXR0cmlidXRlKFwiZGF0YS13ZWJwYWNrXCIscyt0KSxvLnNyYz1lLDAhPT1vLnNyYy5pbmRleE9mKHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4rXCIvXCIpJiYoby5jcm9zc09yaWdpbj1cImFub255bW91c1wiKSxvLmludGVncml0eT1pLnNyaUhhc2hlc1tyXSxvLmNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCIpLEhbZV09W2FdO3ZhciBsPShhLHQpPT57by5vbmVycm9yPW8ub25sb2FkPW51bGwsY2xlYXJUaW1lb3V0KGIpO3ZhciByPUhbZV07aWYoZGVsZXRlIEhbZV0sby5wYXJlbnROb2RlJiZvLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobyksciYmci5mb3JFYWNoKChlPT5lKHQpKSksYSlyZXR1cm4gYSh0KX0sYj1zZXRUaW1lb3V0KGwuYmluZChudWxsLHZvaWQgMCx7dHlwZTpcInRpbWVvdXRcIix0YXJnZXQ6b30pLDEyZTQpO28ub25lcnJvcj1sLmJpbmQobnVsbCxvLm9uZXJyb3IpLG8ub25sb2FkPWwuYmluZChudWxsLG8ub25sb2FkKSxkJiZkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG8pfX0saS5yPWU9PntcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSxpLm5tZD1lPT4oZS5wYXRocz1bXSxlLmNoaWxkcmVufHwoZS5jaGlsZHJlbj1bXSksZSksaS5wPVwiaHR0cHM6Ly9jZi1zdC5zYy1jZG4ubmV0L1wiLGkuc3JpSGFzaGVzPXsyNzpcInNoYTM4NC02bmxwblRUNVN1SGQyNU8wTE5qNnlpUTRoMjYycGQwZUk1dTQ0NHlLc0NrRFQyWGVTY2FEMGkxR2RybHlJZGVxXCIsOTM6XCJzaGEzODQtL0pIT0VBUWppRGtCb01VeGFEbUtiSllIakFkNTZJVE9zdWR2N3N1ZU8vNWN0ektmMHZXbERGbkhQZHI2dnovYlwiLDEzMTpcInNoYTM4NC1Md0FRZ0d6N1pqdUFHeFZZdWxpbUZWZWlkcDFvaE9FRWxKNXQwOWhFQWNobjZxcjhpcDcxek16Vm16ak5FSFZPXCIsMjc2Olwic2hhMzg0LVJyNGJEV0RKbjNablNDUk44ZTZoVzVQU2FBc0JFRGVXb29yWEtJMksxK2w2VmlkSWtETGNBWlBENzVJelBHZFNcIiwyOTU6XCJzaGEzODQtQSs5MkxUV0VxR0pyZ1VVRDlGS3NNZFN1Sm04ZTFVd1NQWVBYbHQrV0sxcVhzRm9IMVFQSFdhSkU0Z2hSQmJTNVwiLDQzNDpcInNoYTM4NC1rR3hsZ3d1Zzg1VEZpOFhBR2lmSnlES1FGeUNrSDd1MzE4KzA4ZTNYL3R2VHJZVnl4TXZGNUtVeU9yVmdQemJMXCIsNTA3Olwic2hhMzg0LVJzUTd1RTVNNVZrdU9mMXlWd0huOTIrb0RNelVrc2JaVWk0dlhpdk9JMTdjMDF4YmVSK3NmaUszbjF4ODlnekZcIiw1Mjk6XCJzaGEzODQtVFdSVDBXK25MMk1LQUkvZkk2VlZwODB3cXh1RzVJYkU1UlhwaTRoR3RPQlY3V3hjdmdVL1lTUnUzck11aEN0U1wiLDU0MTpcInNoYTM4NC0yUldaOUhPVDBuMEl5K1JaUWZlUmRPQ3VOOWoxRGtQUGJUYmxYQzBWWkxJaWZadkpzY2dwWk8vT2FJM2hpYm12XCIsNTQ2Olwic2hhMzg0LTNucnVQRzUrSnNIdC9Tc1ZJWDBmaUZnYXZlb1lwdHBVT2oyUWFrY3U1OFR4eEtnVVU0dTZnQjZreGd1TUR0eDJcIiw4OTQ6XCJzaGEzODQtSkYySFNtN2pYOXRQQ0RaVWFvcU0xTjE3RmF4M3JSdkZmaExBZkRCZkREMEgrbDRrcWNRNW93VmlvT0p4TW4rYlwiLDk0OTpcInNoYTM4NC1iK2RGdWltN0w0ckh3U21WZGQvSjlqd1VNM0hybGdyS3FiZFFNdTF3cFRPbnlxN2pYUUsyeU81L0I5QzlNR0dsXCIsOTU0Olwic2hhMzg0LUhVMVBUSnlKVFp5OWhzMFprM2hFKy94RGhuc21jRk5QRGd5R3RWOG1BbmpFY3FDMTFKMzdSTEJXUmRZOGJ1UzFcIiwxNjE5Olwic2hhMzg0LXBXUHpvN1NyVnk1Nm1VR2x1VjFyM2gxbTk2dm9pSi8vclovaElZMndyRlh6bUdkWHFQR1NodHA5OXMxeVdTd0pcIiwxNjkyOlwic2hhMzg0LVUvUEkwWUp4Q1Z2TWgwa1ZENXZrNkV1eFBEV3NLOVNlRkU1SEttQmpjWHp3VUYzdFV6TTBNdzdoTFI5Q1VsY1hcIiwxNzY2Olwic2hhMzg0LVBZZ0FFMXRDRkprZnhKY0RqbmVrd3JoSGk1dkEvQUFTaFJBQ2xyV0FCVFo5aGFjTG9QK3hIQ1NzL3dxUFQyWnBcIiwxODY5Olwic2hhMzg0LUZ6WTl0YVpYN3JyOUwva2tvQWlFNkprd1JBUlFUTHI0NFFEdGJ6bTNINThrY21WUVdYUHB1UE8wS3dXdGpGeE9cIiwxODcxOlwic2hhMzg0LTJPT1JLOFA5d2s2UUY3SEdVVnJQcmUxb2w3WUQzTmpJZTZmeE5QbDgyWVVmYVhKVDNRK1NuRUVHa0ZtaTVqQXVcIiwxODk2Olwic2hhMzg0LXA0TmpQSkh1QjVjdHlFbnhmeUZqdFFVZGI5RFF2Qmg0SDVBUTQ2dXVzdU5kb3ZBOFN1WFg4S0QxNEFUWXY3VWpcIiwxOTQyOlwic2hhMzg0LURmMmVkNnNmT2hDVXoxeGRJeXhuWWxaWmdOL3dGQm1JY1ZVNVNjUUFOOEsreld0QllpVERybVZHZ0x4MGNwOENcIiwyMDA4Olwic2hhMzg0LWxZUGI1NmxNZ2J6QXZGMFhrYnJuU2NlQmg3MUVVK2N5VHh3ZndYeEhDczR3RjBkVzhMbEtnQ2w4aitVVnZQQnhcIiwyMDQ2Olwic2hhMzg0LURQanJWT1BWdGcvRzd0K3VSODl6QzFLRU11TmlCUmdwQ3YzODZ0R29VUnF1dWRwSzRtSTZvTUlYbWZrYUVaQ25cIiwyMzEzOlwic2hhMzg0LXRUYTJIMEZEVUtPUTVnT05VTjMrR1hNUlBicnc5YjJoTlcrbXdpV2Y4OUM5aTB2eWhOMndOZzFIRUxkdUszd0dcIiwyNDUwOlwic2hhMzg0LXBHWDhXNVcvQ0ZwODVQL3pza1BtbUN5ZEdDVUl5ajlhYzdsUUZFem53SzdBZUlkZWZscUNqNGR6RDdweWUzenRcIiwyNTQxOlwic2hhMzg0LWw3eEpHYW9IWjNXM0pvajVBNGpsdS8vNUYwdWJJQVhZVFNlUDh1cno2dVZzSVlkcG1hb0xQRGhsZjVNNzl5NUNcIiwyNTYzOlwic2hhMzg0LVRNZlFOYld4eXVPVytJWHRVMUc5SEYrbXlNTW90VnFVZ1hDamNLMERqUnhwRkVnL0hXblVGajVib3VSWUtQejZcIiwyNjc2Olwic2hhMzg0LUk2L2p6Q2czY3ZoT29mSnNraVB1NTZvakdsOHFtelJtYktudHZpM3BzdS8xWXl1cDIwWHNxYmZXZVpWSUtvK1hcIiwyNzM1Olwic2hhMzg0LWJJMFU1TERuK2taUVNhUm1OYjNaRktCS09RR2sxdk5IeGlrdWlBOTRia3FWaGhBRENyRWlSVEo2S2pCQ0FGNmRcIiwyNzYyOlwic2hhMzg0LTZXVk9xN1l3VXJCdGRBOEM4UFdRdldiNHZManJRWmEwQ0lUcVlPN0t4ckJGbkpXY0plRlFpd2l2R1U3ZnY5OUlcIiwyNzcxOlwic2hhMzg0LW84eWNvV0VIUnlIcGk0V0gvVThITVIySXQ3WFovcGFxNDRZMzNHbGxaRGoyR2NmTEpyRGlKQmZpbnQxSy91TXFcIiwzMjgxOlwic2hhMzg0LVlrZThKbUkvY0NvdW4yZFFWRUxpT213L3J5S1Z5OW5BUEwzMEY1Z2QxekkrK21KbkxyYWxER2R1UkxoVjNTL0pcIiwzNDQ0Olwic2hhMzg0LVJNN3pKbEt4R3pvaUw3dFloL1l3WEtkMWo3OTFDeW8vT1NxSmJqYXJYVDhrTlVmVkpnSHBmay8vN3lpYjcvT1lcIiwzNTE0Olwic2hhMzg0LWdZVUQwWklhUHp3RTVqWHlwZ001OHdONDVyZHJOamtDYnQ5WUw5NVFqQjZjUm1RYnlxdjhURkp6bkphZkIxajRcIiwzNjk0Olwic2hhMzg0LXVPdFVjZWdLUWkyekVjMWVKOUdLckVQUzJBMTJnTE95eCtmMnVsKzBUWGJSZFNZR2R0VEx0b3k0TG9IOHpPSU1cIiwzODE3Olwic2hhMzg0LUF6d0NIZWxwaURsWHk3Vjlhd2V0NVZIMVIxcGRRYVN3VWlaUVFHbTZUdHp4M3BiYTVHdkdHMmxDOThvR3psM0NcIiwzODczOlwic2hhMzg0LVQ5NjFNeko4WEhwMGJuSlN5dkl1Qk5qVjU2OHJlYnZBbDViUk8xdEloUGQzK0hCWXpuYlM4L0UyQWtxcGlZZ05cIiw0MDAyOlwic2hhMzg0LWROdGxtbE16Y1djK0xuS2NiTXVjY29LbU5BbWJ3MjJkQ3FObG1pUXlWUjdQU3BNOG9aUVhwQTlKQUNDOTV4b0ZcIiw0NDg5Olwic2hhMzg0LWx2dk1yL2JEVmRyS2pUOEt5aFVmZUxFQ0pWalArR3JEeXJqVU9LMVd1Z3VkeU5pMW5vZGNDWmJocjBVa0VycjJcIiw0NTQ2Olwic2hhMzg0LUJZTHF1eHRXY2xzbERiU2xvU2x1cUZUYmN0K251ajdxWXJnNG8zMi9SOWMzUjNwaXA5VlFzaFRXZzlHMmpjbUJcIiw0NjMwOlwic2hhMzg0LXdqcHFNNGZ4N09Hb0RjSWlRWWlzWmJDWWw3ZlZXU0J6aWdEc1V0VGZpRU9od1Y2UW9OTjFZdGN2OFJodFYwN09cIiw0NzgzOlwic2hhMzg0LUdnZ0d0N1cxZUJ6MVNKNDBJdkFENWFOcWRTMGh0dTQ4UzFIRGpZMjFFM0o4dnRHR3RoKzJxamxyWExQeTE1d2dcIiw0OTAzOlwic2hhMzg0LUthaFE5NjErUmp6cDJIWUIxd1RPcE0vaWIwOUgxTE55SDJKaDd5V1BGdlcxQ0FpNzVJT1lSSUNtRjMwN0FKVnRcIiw0OTMwOlwic2hhMzg0LVMrQ3labU4yQ0RMM0NPQnlPNXovS3ZoWlVEMnlsR3B5WGFjUWdjSy9XM01nUXdLUWorclZZSFhDUzRWUnZsOFlcIiw1MDE4Olwic2hhMzg0LXhFS09CVWcxc0Y1T29BM2Q3YWh3OVdyWGYwZStHRlJDYUpsazIwOEo1LzFTK2tSbllCZDFvTGhCVGpEL1FXd29cIiw1Mzc4Olwic2hhMzg0LXU3V0h2bjVlckRuNFZmZ1dpZThLL1QwTzkyNythYk4yQkdYVERJdFZLRzRGaG5NNEh0ZHhnNVJmRFpjZ3dGWjFcIiw1NDE3Olwic2hhMzg0LUhLRkxNWUdpN0lZZ0JTdkdFY2p4Um43VmJYZ3drd3V6cUdOcnc0T3pxSHBySENwSXlIMjNXeCtSZHVDdng3V1RcIiw1NzEyOlwic2hhMzg0LXBLVnl6b2pTUGVjTEI5cnNVWWtvMUNzWkoxOXhFZnZIZEdMcE9OamFxLzBtcG1WOG4rdExZMmhOUmNaM0NwRDhcIiw1ODE0Olwic2hhMzg0LUw1ZXBuQitXeng3b0QvSWp6bWZoaEUwdlh6aWlWU1l3YWZnTmMvdWt4VXdtaWo4MlV4YzJ6N2Zaamkya0MrRndcIiw1OTI0Olwic2hhMzg0LTJWc1lyT0tVeXF0V1cybjZtQ24rQnVRU2xNMFVlclhjai9yUkZOZ0Z6WDdmODV2SWdQUVlKdWwvdm9TbElQcVdcIiw2MDg4Olwic2hhMzg0LTZRbnZxMU8yN0x5TnJLNTY0RXNMMnZMbVpDdXNmZjhaRFpIbEpncFRGWHVBUSt3RWg4MWtnQzFHcUdhZ3F0R0tcIiw2MjIzOlwic2hhMzg0LTdTSExMQlE5S2lNcEZUV0k2Tm9PZTJMQ2tPWk1RcG1wU09CcllnY0k2Y2JQVExRL3Y0UnM5cGl3Qmd1Z21Tb2tcIiw2MjQyOlwic2hhMzg0LVQxVURGZzR0TFV3cWFnV0ozSzdwU2NlSU11MXd4LzluYkRtR1hCVG93UUx0bXFkcU1LaU80REE3TGkzb09SWllcIiw2MzA2Olwic2hhMzg0LXpLcXZqdnhON1VQdlNoSUNqOVYxOUxwajNMcC9KQzZQTnQ0MlhQdFlncUU3MVpjK05ZdTNZd1RmTFg1MnZXMkdcIiw2NDA1Olwic2hhMzg0LUNoQVFwajB5c0pEbC95T1AveStLbXBxRngza0QzdlBFS1VhcnAySlRqUnF2VzFlQThWeUNmN205T2ZMV2tWMWdcIiw2NzYxOlwic2hhMzg0LUJ6ekJHeGhoc01ncW1TSjg1YnhSSE5Vdk9mei8xeUxmMExIT3UxUks5djhqeWdCdlNvSEtYbzdyaVpzT0VEQnNcIiw3MTQ5Olwic2hhMzg0LWRQZW1WL0N6UjVXMzU2dUZQa2kzYXp2UWptQlhKbmUwMEpaWHJ0RmJUTXR2bXpXNWJPL0QvZjNZUTZIVUJlKzBcIiw3MzYyOlwic2hhMzg0LVhGUHAxelg4WkV1cDRUQU55d2luWlRIOWNNODJKaVY2Q1ZaYW95akJ3M2ZTYVVsWlBaZW5ZYmpoUTJRNU52bzJcIiw3NDkzOlwic2hhMzg0LVBXUGNwOGJhRmQ1MWZrSm1WemhqVFZueUdIOWZob1draWZoVFo5K2h3NStVaGkvSUg5d1ZwL0JRN1YwS2xNbUVcIiw3NzY5Olwic2hhMzg0LWRjSlgvVXNHSDd6ZXUrdlhIWTB4YkVQU21iclNleW95Nk42SENhSWtock12TSs4NThidTFxYXlHcFRBN3ZTQUpcIiw3ODYxOlwic2hhMzg0LXh3enJiZUttSkU4dnFma0FqSGRqekVBNGptbldwa3NkVVl4ZVZUNjJuNlJaOTZTUjdPRXVkOTZOMGJYWEQ0ZENcIiw4MDQyOlwic2hhMzg0LWttaHIrcFV6alp3TE1td2RSbkNPcnpuazVQOG4rN1hKYTBUQWU1VWJ2Q2ZKZTQ5YUdRZndvemVrZlRnZ3NVaGtcIiw4MzQyOlwic2hhMzg0LWJqQXBMeTUzdmk0d0lsMlp2N1p4eVlpb0hJYWtURjAxWGtMa05KL2ozK05IaDh3TEFManYrS2NadlNIbkVFTVJcIiw4NTI1Olwic2hhMzg0LWVWdDlVWGVuVUF3dkttSTRBZE5TK0YrdGZ0U3M4UDYrSktwbTdWMW1LWGJWSWZ4Mm5iV0VNWStwb3oxQ2JNcUdcIiw4NTkyOlwic2hhMzg0LUdlRXFxejRxUFNuSXQ5VGh5bnBTSStuZDdLWk5PY2ZwOGFUcHlnVlNzMC9JbGN5aUo1U3lIalM0SEFXb1JFemFcIiw4ODI4Olwic2hhMzg0LWtyM0FjY3JLV0hhWUZMZmxtTU9pR0FFQmNuWm5BMDIwQ3o4U20zcDIvY1ByaG50NHRUcG9JQ04yckVnZzVLZTZcIiw4ODc1Olwic2hhMzg0LWhzNEJDWGo4K3I5UFBRdGJnVmNpSUpnQVhjdlNRSFFwa1pqNFhIV1dNYXBhY0k3UmhlRHpJdFg4ZTYwZHp2RFVcIiw5MDk3Olwic2hhMzg0LS9MeUU2N3FQY3lpZ3g0L2VKaXVMejYvcWxyTDhjVWQyRHl3eWhBcUlrWDZVaXJLRWRELzluTnpKS1M3MGp4WW9cIiw5MTgyOlwic2hhMzg0LXYydFBkSnhTWXc3Wks2LytKckk1QTdZTVFKOXJMKytCcWZRVkhrWEhRd0VNZ3FMSWFwY0J1RnMxTVMxRWJ5OVNcIiw5MjczOlwic2hhMzg0LW1ycHArVjdHY0JpMXhtMTQvK3Y2azlLdFF3L1IvbzJ4MW5zNGlWcEhGRVY5SldXS2hyM2xIRDlFbU1CSVNyM1pcIiw5MzI4Olwic2hhMzg0LThVNTZkUSs1S0hZR20wTUQ2Zzk3UTJ4ZkkrUVlNc1c0TktaNWlvQVVxVGlDSmU1VjhyUVF0RkNzMmt4Tm1ITmpcIiw5Njc5Olwic2hhMzg0LTdVemkzeXNOb0VBZFhQcVdWNngrK2VNakJEKy9sTCtVUXpzRXgraVJkU1pZczZURGVsUnUzU0FlQkVrRCtKUE1cIiw5NzUyOlwic2hhMzg0LVQrY1RNT2M1SnJ2djdIV1NLSEtxU2xrWHdVcEtZekZUNHpnVmxjbHBJdnlJNy9EaFRYVlJzK2EzTlNKMEhEdEpcIiw5ODUwOlwic2hhMzg0LVMwOTArNmZDTmluR2g1RlUwODBrbGxoek4wK1FGZkUxd29tZFpIQjlJR1g0a1dyblVlQytCMll0dVEycjB3dUZcIiw5ODkwOlwic2hhMzg0LVF1bVVOd3VsZkh0aElzcEhaL1FSQkgvSVluc2NFQ0xsdEc3d1pqSnNaTUZXaWVNdnlJS1lxM1Y0MVZYVGtncVhcIn0sKCgpPT57aWYodm9pZCAwIT09aSl7dmFyIGU9aS51LGE9aS5lLHQ9e30scj17fTtpLnU9ZnVuY3Rpb24oYSl7cmV0dXJuIGUoYSkrKHQuaGFzT3duUHJvcGVydHkoYSk/XCI/XCIrdFthXTpcIlwiKX0saS5lPWZ1bmN0aW9uKG8pe3JldHVybiBhKG8pLmNhdGNoKChmdW5jdGlvbihhKXt2YXIgZD1yLmhhc093blByb3BlcnR5KG8pP3Jbb106NTtpZihkPDEpe3ZhciBuPWUobyk7dGhyb3cgYS5tZXNzYWdlPVwiTG9hZGluZyBjaHVuayBcIitvK1wiIGZhaWxlZCBhZnRlciA1IHJldHJpZXMuXFxuKFwiK24rXCIpXCIsYS5yZXF1ZXN0PW4sYX1yZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe3ZhciBhPTUtZCsxO3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dmFyIG49XCJjYWNoZS1idXN0PXRydWUmcmV0cnktYXR0ZW1wdD1cIithO3Rbb109bixyW29dPWQtMSxlKGkuZShvKSl9KSw1MCl9KSl9KSl9fX0pKCksKCgpPT57aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50KXt2YXIgZT17MzY2NjowfTtpLmYubWluaUNzcz0oYSx0KT0+e2VbYV0/dC5wdXNoKGVbYV0pOjAhPT1lW2FdJiZ7NDAwMjoxfVthXSYmdC5wdXNoKGVbYV09KGU9Pm5ldyBQcm9taXNlKCgoYSx0KT0+e3ZhciByPWkubWluaUNzc0YoZSksbz1pLnArcjtpZigoKGUsYSk9Pntmb3IodmFyIHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJsaW5rXCIpLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG89KG49dFtyXSkuZ2V0QXR0cmlidXRlKFwiZGF0YS1ocmVmXCIpfHxuLmdldEF0dHJpYnV0ZShcImhyZWZcIik7aWYoXCJzdHlsZXNoZWV0XCI9PT1uLnJlbCYmKG89PT1lfHxvPT09YSkpcmV0dXJuIG59dmFyIGQ9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzdHlsZVwiKTtmb3Iocj0wO3I8ZC5sZW5ndGg7cisrKXt2YXIgbjtpZigobz0obj1kW3JdKS5nZXRBdHRyaWJ1dGUoXCJkYXRhLWhyZWZcIikpPT09ZXx8bz09PWEpcmV0dXJuIG59fSkocixvKSlyZXR1cm4gYSgpOygoZSxhLHQscixvKT0+e3ZhciBkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpO2QucmVsPVwic3R5bGVzaGVldFwiLGQudHlwZT1cInRleHQvY3NzXCIsZC5vbmVycm9yPWQub25sb2FkPXQ9PntpZihkLm9uZXJyb3I9ZC5vbmxvYWQ9bnVsbCxcImxvYWRcIj09PXQudHlwZSlyKCk7ZWxzZXt2YXIgbj10JiYoXCJsb2FkXCI9PT10LnR5cGU/XCJtaXNzaW5nXCI6dC50eXBlKSxIPXQmJnQudGFyZ2V0JiZ0LnRhcmdldC5ocmVmfHxhLHM9bmV3IEVycm9yKFwiTG9hZGluZyBDU1MgY2h1bmsgXCIrZStcIiBmYWlsZWQuXFxuKFwiK0grXCIpXCIpO3MuY29kZT1cIkNTU19DSFVOS19MT0FEX0ZBSUxFRFwiLHMudHlwZT1uLHMucmVxdWVzdD1ILGQucGFyZW50Tm9kZSYmZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGQpLG8ocyl9fSxkLmhyZWY9YSwwIT09ZC5ocmVmLmluZGV4T2Yod2luZG93LmxvY2F0aW9uLm9yaWdpbitcIi9cIikmJihkLmNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCIpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZCl9KShlLG8sMCxhLHQpfSkpKShhKS50aGVuKCgoKT0+e2VbYV09MH0pLCh0PT57dGhyb3cgZGVsZXRlIGVbYV0sdH0pKSl9fX0pKCksKCgpPT57aS5iPWRvY3VtZW50LmJhc2VVUkl8fHNlbGYubG9jYXRpb24uaHJlZjt2YXIgZT17MzY2NjowfTtpLmYuaj0oYSx0KT0+e3ZhciByPWkubyhlLGEpP2VbYV06dm9pZCAwO2lmKDAhPT1yKWlmKHIpdC5wdXNoKHJbMl0pO2Vsc2UgaWYoMzY2NiE9YSl7dmFyIG89bmV3IFByb21pc2UoKCh0LG8pPT5yPWVbYV09W3Qsb10pKTt0LnB1c2goclsyXT1vKTt2YXIgZD1pLnAraS51KGEpLG49bmV3IEVycm9yO2kubChkLCh0PT57aWYoaS5vKGUsYSkmJigwIT09KHI9ZVthXSkmJihlW2FdPXZvaWQgMCkscikpe3ZhciBvPXQmJihcImxvYWRcIj09PXQudHlwZT9cIm1pc3NpbmdcIjp0LnR5cGUpLGQ9dCYmdC50YXJnZXQmJnQudGFyZ2V0LnNyYztuLm1lc3NhZ2U9XCJMb2FkaW5nIGNodW5rIFwiK2ErXCIgZmFpbGVkLlxcbihcIitvK1wiOiBcIitkK1wiKVwiLG4ubmFtZT1cIkNodW5rTG9hZEVycm9yXCIsbi50eXBlPW8sbi5yZXF1ZXN0PWQsclsxXShuKX19KSxcImNodW5rLVwiK2EsYSl9ZWxzZSBlW2FdPTB9LGkuTy5qPWE9PjA9PT1lW2FdO3ZhciBhPShhLHQpPT57dmFyIHIsbyxbZCxuLEhdPXQscz0wO2lmKGQuc29tZSgoYT0+MCE9PWVbYV0pKSl7Zm9yKHIgaW4gbilpLm8obixyKSYmKGkubVtyXT1uW3JdKTtpZihIKXZhciBjPUgoaSl9Zm9yKGEmJmEodCk7czxkLmxlbmd0aDtzKyspbz1kW3NdLGkubyhlLG8pJiZlW29dJiZlW29dWzBdKCksZVtvXT0wO3JldHVybiBpLk8oYyl9LHQ9Z2xvYmFsVGhpcy53ZWJwYWNrQ2h1bmtfc25hcGNoYXRfd2ViX2NhbGxpbmdfYXBwPWdsb2JhbFRoaXMud2VicGFja0NodW5rX3NuYXBjaGF0X3dlYl9jYWxsaW5nX2FwcHx8W107dC5mb3JFYWNoKGEuYmluZChudWxsLDApKSx0LnB1c2g9YS5iaW5kKG51bGwsdC5wdXNoLmJpbmQodCkpfSkoKX0pKCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD01MDgwYjhmNmVhOTI3NTI5ZGQ0NC5qcy5tYXAifSwgImhlYWRlcnNTaXplIjogNjk0LCAiYm9keVNpemUiOiA4ODE4LCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiA5NTEyfSwgImNhY2hlIjoge30sICJ0aW1pbmdzIjogeyJkbnMiOiAxLjI5NSwgImNvbm5lY3QiOiAyNS42NjYsICJzc2wiOiAxNC4zNDUsICJzZW5kIjogMCwgIndhaXQiOiAxMi45MzMsICJyZWNlaXZlIjogNC40MzN9LCAicGFnZXJlZiI6ICJwYWdlQGU5MWE3ZGI1ZTRhNzRmYzkwZjJmZWIyNzBkZGFhMjljIiwgInNlcnZlcklQQWRkcmVzcyI6ICIxOC42Ni4xODIuMjQ4IiwgIl9zZXJ2ZXJQb3J0IjogNDQzLCAiX3NlY3VyaXR5RGV0YWlscyI6IHsicHJvdG9jb2wiOiAiVExTIDEuMyIsICJzdWJqZWN0TmFtZSI6ICIqLnNjLWNkbi5uZXQiLCAiaXNzdWVyIjogIkRpZ2lDZXJ0IFRMUyBSU0EgU0hBMjU2IDIwMjAgQ0ExIiwgInZhbGlkRnJvbSI6IDE2Nzc0NTYwMDAsICJ2YWxpZFRvIjogMTcwODk5MTk5OX19LCB7InN0YXJ0ZWREYXRlVGltZSI6ICIyMDIzLTA1LTI2VDAxOjQ5OjAyLjA4N1oiLCAidGltZSI6IDIwOC4xMywgInJlcXVlc3QiOiB7Im1ldGhvZCI6ICJHRVQiLCAidXJsIjogImh0dHBzOi8vY2Ytc3Quc2MtY2RuLm5ldC9kdy8yZGVkNTdlMjYxOGIzMDI3OTBlMS5qcyIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzEuMSIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICJBY2NlcHQiLCAidmFsdWUiOiAiKi8qIn0sIHsibmFtZSI6ICJBY2NlcHQtRW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCwgZGVmbGF0ZSwgYnIifSwgeyJuYW1lIjogIkNvbm5lY3Rpb24iLCAidmFsdWUiOiAia2VlcC1hbGl2ZSJ9LCB7Im5hbWUiOiAiSG9zdCIsICJ2YWx1ZSI6ICJjZi1zdC5zYy1jZG4ubmV0In0sIHsibmFtZSI6ICJPcmlnaW4iLCAidmFsdWUiOiAiaHR0cHM6Ly93ZWIuc25hcGNoYXQuY29tIn0sIHsibmFtZSI6ICJSZWZlcmVyIiwgInZhbHVlIjogImh0dHBzOi8vd2ViLnNuYXBjaGF0LmNvbS8ifSwgeyJuYW1lIjogIlNlYy1GZXRjaC1EZXN0IiwgInZhbHVlIjogInNjcmlwdCJ9LCB7Im5hbWUiOiAiU2VjLUZldGNoLU1vZGUiLCAidmFsdWUiOiAiY29ycyJ9LCB7Im5hbWUiOiAiU2VjLUZldGNoLVNpdGUiLCAidmFsdWUiOiAiY3Jvc3Mtc2l0ZSJ9LCB7Im5hbWUiOiAiVXNlci1BZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTEzLjAuNTY3Mi41MyBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbXSwgImhlYWRlcnNTaXplIjogNDEyLCAiYm9keVNpemUiOiAwfSwgInJlc3BvbnNlIjogeyJzdGF0dXMiOiAyMDAsICJzdGF0dXNUZXh0IjogIk9LIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMS4xIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbiIsICJ2YWx1ZSI6ICJodHRwczovL3dlYi5zbmFwY2hhdC5jb20ifSwgeyJuYW1lIjogIkFnZSIsICJ2YWx1ZSI6ICI2NzQ2In0sIHsibmFtZSI6ICJBbHQtU3ZjIiwgInZhbHVlIjogImgzPVwiOjQ0M1wiOyBtYT04NjQwMCJ9LCB7Im5hbWUiOiAiQ2FjaGUtQ29udHJvbCIsICJ2YWx1ZSI6ICJtYXgtYWdlPTYwNDgwMCwgaW1tdXRhYmxlIn0sIHsibmFtZSI6ICJDb25uZWN0aW9uIiwgInZhbHVlIjogImtlZXAtYWxpdmUifSwgeyJuYW1lIjogIkNvbnRlbnQtRW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCJ9LCB7Im5hbWUiOiAiQ29udGVudC1UeXBlIiwgInZhbHVlIjogImFwcGxpY2F0aW9uL2phdmFzY3JpcHQifSwgeyJuYW1lIjogIkRhdGUiLCAidmFsdWUiOiAiVGh1LCAyNSBNYXkgMjAyMyAyMzo1NjozNyBHTVQifSwgeyJuYW1lIjogIkVUYWciLCAidmFsdWUiOiAiVy9cIjc1NmNiNjAxNDNjNDcxMTVlZDgwYzJlZmE3NzZlYWQ0XCIifSwgeyJuYW1lIjogIkxhc3QtTW9kaWZpZWQiLCAidmFsdWUiOiAiV2VkLCAyNCBNYXkgMjAyMyAxNzoyMDo0NCBHTVQifSwgeyJuYW1lIjogIlNlcnZlciIsICJ2YWx1ZSI6ICJBbWF6b25TMyJ9LCB7Im5hbWUiOiAiVHJhbnNmZXItRW5jb2RpbmciLCAidmFsdWUiOiAiY2h1bmtlZCJ9LCB7Im5hbWUiOiAiVmFyeSIsICJ2YWx1ZSI6ICJBY2NlcHQtRW5jb2RpbmcsT3JpZ2luIn0sIHsibmFtZSI6ICJWYXJ5IiwgInZhbHVlIjogIk9yaWdpbiJ9LCB7Im5hbWUiOiAiVmlhIiwgInZhbHVlIjogIjEuMSAyOGU1NmI5ZGRjZWQ0ZWQ0MTRlNzVmODdjYmQwZDk3Ni5jbG91ZGZyb250Lm5ldCAoQ2xvdWRGcm9udCkifSwgeyJuYW1lIjogIlgtQW16LUNmLUlkIiwgInZhbHVlIjogIlZXQTludTRhTVgzSnRxUzg1emxiRnNXNE9KZjRLVUlGaS14dS0zaU9zZmQ4VHhJV0NxbVlKZz09In0sIHsibmFtZSI6ICJYLUFtei1DZi1Qb3AiLCAidmFsdWUiOiAiTVVDNTAtUDEifSwgeyJuYW1lIjogIlgtQ2FjaGUiLCAidmFsdWUiOiAiSGl0IGZyb20gY2xvdWRmcm9udCJ9LCB7Im5hbWUiOiAieC1hbXotc2VydmVyLXNpZGUtZW5jcnlwdGlvbiIsICJ2YWx1ZSI6ICJBRVMyNTYifV0sICJjb250ZW50IjogeyJzaXplIjogNDE2NTQyMywgIm1pbWVUeXBlIjogImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiLCAiY29tcHJlc3Npb24iOiAzMDczNTI1LCAidGV4dCI6ICIvKiEgRm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gcGxlYXNlIHNlZSAyZGVkNTdlMjYxOGIzMDI3OTBlMS5qcy5MSUNFTlNFLnR4dCAqL1xuKGdsb2JhbFRoaXMud2VicGFja0NodW5rX3NuYXBjaGF0X3dlYl9jYWxsaW5nX2FwcD1nbG9iYWxUaGlzLndlYnBhY2tDaHVua19zbmFwY2hhdF93ZWJfY2FsbGluZ19hcHB8fFtdKS5wdXNoKFtbMTc5XSx7MjU2ODc6KGUsdCxuKT0+e2Z1bmN0aW9uIHIoZSl7cmV0dXJuIE1hdGguZmxvb3IoTWF0aC5sb2coZSkqTWF0aC5MT0cxMEUpfWZ1bmN0aW9uIGkoZSx0KXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnJlcGVhdClyZXR1cm4gZS5yZXBlYXQodCk7Zm9yKHZhciBuPW5ldyBBcnJheSh0KSxyPTA7cjxuLmxlbmd0aDtyKyspbltyXT1lO3JldHVybiBuLmpvaW4oXCJcIil9ZnVuY3Rpb24gbyhlLHQsbixyKXtlLmdldCh0KXx8ZS5zZXQodCxPYmplY3QuY3JlYXRlKG51bGwpKSxlLmdldCh0KVtuXT1yfWZ1bmN0aW9uIGEoZSx0LG4pe2Zvcih2YXIgcj0wLGk9T2JqZWN0LmtleXMobik7cjxpLmxlbmd0aDtyKyspe3ZhciBhPWlbcl07byhlLHQsYSxuW2FdKX19ZnVuY3Rpb24gcyhlLHQsbil7cmV0dXJuIGMoZSx0LG4pW25dfWZ1bmN0aW9uIGMoZSx0KXtmb3IodmFyIG49W10scj0yO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspbltyLTJdPWFyZ3VtZW50c1tyXTt2YXIgaT1lLmdldCh0KTtpZighaSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KHQsXCIgSW50ZXJuYWxTbG90IGhhcyBub3QgYmVlbiBpbml0aWFsaXplZFwiKSk7cmV0dXJuIG4ucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlW3RdPWlbdF0sZX0pLE9iamVjdC5jcmVhdGUobnVsbCkpfWZ1bmN0aW9uIGwoZSl7cmV0dXJuXCJsaXRlcmFsXCI9PT1lLnR5cGV9ZnVuY3Rpb24gdShlLHQsbil7dmFyIHI9bi52YWx1ZTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCx2YWx1ZTpyfSl9ZnVuY3Rpb24gZChlLHQsbil7aWYodm9pZCAwPT09biYmKG49RXJyb3IpLCFlKXRocm93IG5ldyBuKHQpfW4uZCh0LHskMDooKT0+YyxMUzooKT0+byxUZzooKT0+cixfeDooKT0+dSxlNzooKT0+YSxlWTooKT0+bCxrRzooKT0+ZCxxOigpPT5zLHJ4OigpPT5pfSl9LDk1OTU3OihlLHQsbik9PntmdW5jdGlvbiByKGUsdCl7dmFyIG49dCYmdC5jYWNoZT90LmNhY2hlOnUscj10JiZ0LnNlcmlhbGl6ZXI/dC5zZXJpYWxpemVyOmM7cmV0dXJuKHQmJnQuc3RyYXRlZ3k/dC5zdHJhdGVneTpzKShlLHtjYWNoZTpuLHNlcmlhbGl6ZXI6cn0pfWZ1bmN0aW9uIGkoZSx0LG4scil7dmFyIGksbz1udWxsPT0oaT1yKXx8XCJudW1iZXJcIj09dHlwZW9mIGl8fFwiYm9vbGVhblwiPT10eXBlb2YgaT9yOm4ociksYT10LmdldChvKTtyZXR1cm4gdm9pZCAwPT09YSYmKGE9ZS5jYWxsKHRoaXMsciksdC5zZXQobyxhKSksYX1mdW5jdGlvbiBvKGUsdCxuKXt2YXIgcj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMyksaT1uKHIpLG89dC5nZXQoaSk7cmV0dXJuIHZvaWQgMD09PW8mJihvPWUuYXBwbHkodGhpcyxyKSx0LnNldChpLG8pKSxvfWZ1bmN0aW9uIGEoZSx0LG4scixpKXtyZXR1cm4gbi5iaW5kKHQsZSxyLGkpfWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm4gYShlLHRoaXMsMT09PWUubGVuZ3RoP2k6byx0LmNhY2hlLmNyZWF0ZSgpLHQuc2VyaWFsaXplcil9bi5kKHQse0E6KCk9PmQsSDooKT0+cn0pO3ZhciBjPWZ1bmN0aW9uKCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGFyZ3VtZW50cyl9O2Z1bmN0aW9uIGwoKXt0aGlzLmNhY2hlPU9iamVjdC5jcmVhdGUobnVsbCl9bC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNhY2hlW2VdfSxsLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt0aGlzLmNhY2hlW2VdPXR9O3ZhciB1PXtjcmVhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGx9fSxkPXt2YXJpYWRpYzpmdW5jdGlvbihlLHQpe3JldHVybiBhKGUsdGhpcyxvLHQuY2FjaGUuY3JlYXRlKCksdC5zZXJpYWxpemVyKX0sbW9uYWRpYzpmdW5jdGlvbihlLHQpe3JldHVybiBhKGUsdGhpcyxpLHQuY2FjaGUuY3JlYXRlKCksdC5zZXJpYWxpemVyKX19fSwzOTk0MzooZSx0LG4pPT57bi5kKHQse3dEOigpPT5pLFZHOigpPT5jLHJwOigpPT51LElpOigpPT5nLE80OigpPT5zLHVmOigpPT5sLFdoOigpPT52LEpvOigpPT5wLHl4OigpPT5tLFdpOigpPT5mLEhJOigpPT5oLHBlOigpPT5kLFFjOigpPT5vZX0pO3ZhciByLGksbyxhPW4oNzA2NTUpO2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGUudHlwZT09PWkubGl0ZXJhbH1mdW5jdGlvbiBjKGUpe3JldHVybiBlLnR5cGU9PT1pLmFyZ3VtZW50fWZ1bmN0aW9uIGwoZSl7cmV0dXJuIGUudHlwZT09PWkubnVtYmVyfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIGUudHlwZT09PWkuZGF0ZX1mdW5jdGlvbiBkKGUpe3JldHVybiBlLnR5cGU9PT1pLnRpbWV9ZnVuY3Rpb24gZihlKXtyZXR1cm4gZS50eXBlPT09aS5zZWxlY3R9ZnVuY3Rpb24gcChlKXtyZXR1cm4gZS50eXBlPT09aS5wbHVyYWx9ZnVuY3Rpb24gbShlKXtyZXR1cm4gZS50eXBlPT09aS5wb3VuZH1mdW5jdGlvbiBoKGUpe3JldHVybiBlLnR5cGU9PT1pLnRhZ31mdW5jdGlvbiB2KGUpe3JldHVybiEoIWV8fFwib2JqZWN0XCIhPXR5cGVvZiBlfHxlLnR5cGUhPT1vLm51bWJlcil9ZnVuY3Rpb24gZyhlKXtyZXR1cm4hKCFlfHxcIm9iamVjdFwiIT10eXBlb2YgZXx8ZS50eXBlIT09by5kYXRlVGltZSl9IWZ1bmN0aW9uKGUpe2VbZS5FWFBFQ1RfQVJHVU1FTlRfQ0xPU0lOR19CUkFDRT0xXT1cIkVYUEVDVF9BUkdVTUVOVF9DTE9TSU5HX0JSQUNFXCIsZVtlLkVNUFRZX0FSR1VNRU5UPTJdPVwiRU1QVFlfQVJHVU1FTlRcIixlW2UuTUFMRk9STUVEX0FSR1VNRU5UPTNdPVwiTUFMRk9STUVEX0FSR1VNRU5UXCIsZVtlLkVYUEVDVF9BUkdVTUVOVF9UWVBFPTRdPVwiRVhQRUNUX0FSR1VNRU5UX1RZUEVcIixlW2UuSU5WQUxJRF9BUkdVTUVOVF9UWVBFPTVdPVwiSU5WQUxJRF9BUkdVTUVOVF9UWVBFXCIsZVtlLkVYUEVDVF9BUkdVTUVOVF9TVFlMRT02XT1cIkVYUEVDVF9BUkdVTUVOVF9TVFlMRVwiLGVbZS5JTlZBTElEX05VTUJFUl9TS0VMRVRPTj03XT1cIklOVkFMSURfTlVNQkVSX1NLRUxFVE9OXCIsZVtlLklOVkFMSURfREFURV9USU1FX1NLRUxFVE9OPThdPVwiSU5WQUxJRF9EQVRFX1RJTUVfU0tFTEVUT05cIixlW2UuRVhQRUNUX05VTUJFUl9TS0VMRVRPTj05XT1cIkVYUEVDVF9OVU1CRVJfU0tFTEVUT05cIixlW2UuRVhQRUNUX0RBVEVfVElNRV9TS0VMRVRPTj0xMF09XCJFWFBFQ1RfREFURV9USU1FX1NLRUxFVE9OXCIsZVtlLlVOQ0xPU0VEX1FVT1RFX0lOX0FSR1VNRU5UX1NUWUxFPTExXT1cIlVOQ0xPU0VEX1FVT1RFX0lOX0FSR1VNRU5UX1NUWUxFXCIsZVtlLkVYUEVDVF9TRUxFQ1RfQVJHVU1FTlRfT1BUSU9OUz0xMl09XCJFWFBFQ1RfU0VMRUNUX0FSR1VNRU5UX09QVElPTlNcIixlW2UuRVhQRUNUX1BMVVJBTF9BUkdVTUVOVF9PRkZTRVRfVkFMVUU9MTNdPVwiRVhQRUNUX1BMVVJBTF9BUkdVTUVOVF9PRkZTRVRfVkFMVUVcIixlW2UuSU5WQUxJRF9QTFVSQUxfQVJHVU1FTlRfT0ZGU0VUX1ZBTFVFPTE0XT1cIklOVkFMSURfUExVUkFMX0FSR1VNRU5UX09GRlNFVF9WQUxVRVwiLGVbZS5FWFBFQ1RfU0VMRUNUX0FSR1VNRU5UX1NFTEVDVE9SPTE1XT1cIkVYUEVDVF9TRUxFQ1RfQVJHVU1FTlRfU0VMRUNUT1JcIixlW2UuRVhQRUNUX1BMVVJBTF9BUkdVTUVOVF9TRUxFQ1RPUj0xNl09XCJFWFBFQ1RfUExVUkFMX0FSR1VNRU5UX1NFTEVDVE9SXCIsZVtlLkVYUEVDVF9TRUxFQ1RfQVJHVU1FTlRfU0VMRUNUT1JfRlJBR01FTlQ9MTddPVwiRVhQRUNUX1NFTEVDVF9BUkdVTUVOVF9TRUxFQ1RPUl9GUkFHTUVOVFwiLGVbZS5FWFBFQ1RfUExVUkFMX0FSR1VNRU5UX1NFTEVDVE9SX0ZSQUdNRU5UPTE4XT1cIkVYUEVDVF9QTFVSQUxfQVJHVU1FTlRfU0VMRUNUT1JfRlJBR01FTlRcIixlW2UuSU5WQUxJRF9QTFVSQUxfQVJHVU1FTlRfU0VMRUNUT1I9MTldPVwiSU5WQUxJRF9QTFVSQUxfQVJHVU1FTlRfU0VMRUNUT1JcIixlW2UuRFVQTElDQVRFX1BMVVJBTF9BUkdVTUVOVF9TRUxFQ1RPUj0yMF09XCJEVVBMSUNBVEVfUExVUkFMX0FSR1VNRU5UX1NFTEVDVE9SXCIsZVtlLkRVUExJQ0FURV9TRUxFQ1RfQVJHVU1FTlRfU0VMRUNUT1I9MjFdPVwiRFVQTElDQVRFX1NFTEVDVF9BUkdVTUVOVF9TRUxFQ1RPUlwiLGVbZS5NSVNTSU5HX09USEVSX0NMQVVTRT0yMl09XCJNSVNTSU5HX09USEVSX0NMQVVTRVwiLGVbZS5JTlZBTElEX1RBRz0yM109XCJJTlZBTElEX1RBR1wiLGVbZS5JTlZBTElEX1RBR19OQU1FPTI1XT1cIklOVkFMSURfVEFHX05BTUVcIixlW2UuVU5NQVRDSEVEX0NMT1NJTkdfVEFHPTI2XT1cIlVOTUFUQ0hFRF9DTE9TSU5HX1RBR1wiLGVbZS5VTkNMT1NFRF9UQUc9MjddPVwiVU5DTE9TRURfVEFHXCJ9KHJ8fChyPXt9KSksZnVuY3Rpb24oZSl7ZVtlLmxpdGVyYWw9MF09XCJsaXRlcmFsXCIsZVtlLmFyZ3VtZW50PTFdPVwiYXJndW1lbnRcIixlW2UubnVtYmVyPTJdPVwibnVtYmVyXCIsZVtlLmRhdGU9M109XCJkYXRlXCIsZVtlLnRpbWU9NF09XCJ0aW1lXCIsZVtlLnNlbGVjdD01XT1cInNlbGVjdFwiLGVbZS5wbHVyYWw9Nl09XCJwbHVyYWxcIixlW2UucG91bmQ9N109XCJwb3VuZFwiLGVbZS50YWc9OF09XCJ0YWdcIn0oaXx8KGk9e30pKSxmdW5jdGlvbihlKXtlW2UubnVtYmVyPTBdPVwibnVtYmVyXCIsZVtlLmRhdGVUaW1lPTFdPVwiZGF0ZVRpbWVcIn0ob3x8KG89e30pKTt2YXIgeT0vWyBcXHhBMFxcdTE2ODBcXHUyMDAwLVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBdLyxFPS8oPzpbRWVjXXsxLDZ9fEd7MSw1fXxbUXFdezEsNX18KD86W3lZdXJdK3xVezEsNX0pfFtNTF17MSw1fXxkezEsMn18RHsxLDN9fEZ7MX18W2FiQl17MSw1fXxbaGtIS117MSwyfXx3ezEsMn18V3sxfXxtezEsMn18c3sxLDJ9fFt6Wk92VnhYXXsxLDR9KSg/PShbXiddKidbXiddKicpKlteJ10qJCkvZztmdW5jdGlvbiBfKGUpe3ZhciB0PXt9O3JldHVybiBlLnJlcGxhY2UoRSwoZnVuY3Rpb24oZSl7dmFyIG49ZS5sZW5ndGg7c3dpdGNoKGVbMF0pe2Nhc2VcIkdcIjp0LmVyYT00PT09bj9cImxvbmdcIjo1PT09bj9cIm5hcnJvd1wiOlwic2hvcnRcIjticmVhaztjYXNlXCJ5XCI6dC55ZWFyPTI9PT1uP1wiMi1kaWdpdFwiOlwibnVtZXJpY1wiO2JyZWFrO2Nhc2VcIllcIjpjYXNlXCJ1XCI6Y2FzZVwiVVwiOmNhc2VcInJcIjp0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImBZL3UvVS9yYCAoeWVhcikgcGF0dGVybnMgYXJlIG5vdCBzdXBwb3J0ZWQsIHVzZSBgeWAgaW5zdGVhZFwiKTtjYXNlXCJxXCI6Y2FzZVwiUVwiOnRocm93IG5ldyBSYW5nZUVycm9yKFwiYHEvUWAgKHF1YXJ0ZXIpIHBhdHRlcm5zIGFyZSBub3Qgc3VwcG9ydGVkXCIpO2Nhc2VcIk1cIjpjYXNlXCJMXCI6dC5tb250aD1bXCJudW1lcmljXCIsXCIyLWRpZ2l0XCIsXCJzaG9ydFwiLFwibG9uZ1wiLFwibmFycm93XCJdW24tMV07YnJlYWs7Y2FzZVwid1wiOmNhc2VcIldcIjp0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImB3L1dgICh3ZWVrKSBwYXR0ZXJucyBhcmUgbm90IHN1cHBvcnRlZFwiKTtjYXNlXCJkXCI6dC5kYXk9W1wibnVtZXJpY1wiLFwiMi1kaWdpdFwiXVtuLTFdO2JyZWFrO2Nhc2VcIkRcIjpjYXNlXCJGXCI6Y2FzZVwiZ1wiOnRocm93IG5ldyBSYW5nZUVycm9yKFwiYEQvRi9nYCAoZGF5KSBwYXR0ZXJucyBhcmUgbm90IHN1cHBvcnRlZCwgdXNlIGBkYCBpbnN0ZWFkXCIpO2Nhc2VcIkVcIjp0LndlZWtkYXk9ND09PW4/XCJzaG9ydFwiOjU9PT1uP1wibmFycm93XCI6XCJzaG9ydFwiO2JyZWFrO2Nhc2VcImVcIjppZihuPDQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJgZS4uZWVlYCAod2Vla2RheSkgcGF0dGVybnMgYXJlIG5vdCBzdXBwb3J0ZWRcIik7dC53ZWVrZGF5PVtcInNob3J0XCIsXCJsb25nXCIsXCJuYXJyb3dcIixcInNob3J0XCJdW24tNF07YnJlYWs7Y2FzZVwiY1wiOmlmKG48NCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImBjLi5jY2NgICh3ZWVrZGF5KSBwYXR0ZXJucyBhcmUgbm90IHN1cHBvcnRlZFwiKTt0LndlZWtkYXk9W1wic2hvcnRcIixcImxvbmdcIixcIm5hcnJvd1wiLFwic2hvcnRcIl1bbi00XTticmVhaztjYXNlXCJhXCI6dC5ob3VyMTI9ITA7YnJlYWs7Y2FzZVwiYlwiOmNhc2VcIkJcIjp0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImBiL0JgIChwZXJpb2QpIHBhdHRlcm5zIGFyZSBub3Qgc3VwcG9ydGVkLCB1c2UgYGFgIGluc3RlYWRcIik7Y2FzZVwiaFwiOnQuaG91ckN5Y2xlPVwiaDEyXCIsdC5ob3VyPVtcIm51bWVyaWNcIixcIjItZGlnaXRcIl1bbi0xXTticmVhaztjYXNlXCJIXCI6dC5ob3VyQ3ljbGU9XCJoMjNcIix0LmhvdXI9W1wibnVtZXJpY1wiLFwiMi1kaWdpdFwiXVtuLTFdO2JyZWFrO2Nhc2VcIktcIjp0LmhvdXJDeWNsZT1cImgxMVwiLHQuaG91cj1bXCJudW1lcmljXCIsXCIyLWRpZ2l0XCJdW24tMV07YnJlYWs7Y2FzZVwia1wiOnQuaG91ckN5Y2xlPVwiaDI0XCIsdC5ob3VyPVtcIm51bWVyaWNcIixcIjItZGlnaXRcIl1bbi0xXTticmVhaztjYXNlXCJqXCI6Y2FzZVwiSlwiOmNhc2VcIkNcIjp0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImBqL0ovQ2AgKGhvdXIpIHBhdHRlcm5zIGFyZSBub3Qgc3VwcG9ydGVkLCB1c2UgYGgvSC9LL2tgIGluc3RlYWRcIik7Y2FzZVwibVwiOnQubWludXRlPVtcIm51bWVyaWNcIixcIjItZGlnaXRcIl1bbi0xXTticmVhaztjYXNlXCJzXCI6dC5zZWNvbmQ9W1wibnVtZXJpY1wiLFwiMi1kaWdpdFwiXVtuLTFdO2JyZWFrO2Nhc2VcIlNcIjpjYXNlXCJBXCI6dGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJgUy9BYCAoc2Vjb25kKSBwYXR0ZXJucyBhcmUgbm90IHN1cHBvcnRlZCwgdXNlIGBzYCBpbnN0ZWFkXCIpO2Nhc2VcInpcIjp0LnRpbWVab25lTmFtZT1uPDQ/XCJzaG9ydFwiOlwibG9uZ1wiO2JyZWFrO2Nhc2VcIlpcIjpjYXNlXCJPXCI6Y2FzZVwidlwiOmNhc2VcIlZcIjpjYXNlXCJYXCI6Y2FzZVwieFwiOnRocm93IG5ldyBSYW5nZUVycm9yKFwiYFovTy92L1YvWC94YCAodGltZVpvbmUpIHBhdHRlcm5zIGFyZSBub3Qgc3VwcG9ydGVkLCB1c2UgYHpgIGluc3RlYWRcIil9cmV0dXJuXCJcIn0pKSx0fXZhciBJPS9bXFx0LVxcciBcXHg4NVxcdTIwMEVcXHUyMDBGXFx1MjAyOFxcdTIwMjldL2ksUz0vXlxcLig/OigwKykoXFwqKT98KCMrKXwoMCspKCMrKSkkL2csYj0vXihAKyk/KFxcK3wjKyk/W3JzXT8kL2csVD0vKFxcKikoMCspfCgjKykoMCspfCgwKykvZyxDPS9eKDArKSQvO2Z1bmN0aW9uIEEoZSl7dmFyIHQ9e307cmV0dXJuXCJyXCI9PT1lW2UubGVuZ3RoLTFdP3Qucm91bmRpbmdQcmlvcml0eT1cIm1vcmVQcmVjaXNpb25cIjpcInNcIj09PWVbZS5sZW5ndGgtMV0mJih0LnJvdW5kaW5nUHJpb3JpdHk9XCJsZXNzUHJlY2lzaW9uXCIpLGUucmVwbGFjZShiLChmdW5jdGlvbihlLG4scil7cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIHI/KHQubWluaW11bVNpZ25pZmljYW50RGlnaXRzPW4ubGVuZ3RoLHQubWF4aW11bVNpZ25pZmljYW50RGlnaXRzPW4ubGVuZ3RoKTpcIitcIj09PXI/dC5taW5pbXVtU2lnbmlmaWNhbnREaWdpdHM9bi5sZW5ndGg6XCIjXCI9PT1uWzBdP3QubWF4aW11bVNpZ25pZmljYW50RGlnaXRzPW4ubGVuZ3RoOih0Lm1pbmltdW1TaWduaWZpY2FudERpZ2l0cz1uLmxlbmd0aCx0Lm1heGltdW1TaWduaWZpY2FudERpZ2l0cz1uLmxlbmd0aCsoXCJzdHJpbmdcIj09dHlwZW9mIHI/ci5sZW5ndGg6MCkpLFwiXCJ9KSksdH1mdW5jdGlvbiBSKGUpe3N3aXRjaChlKXtjYXNlXCJzaWduLWF1dG9cIjpyZXR1cm57c2lnbkRpc3BsYXk6XCJhdXRvXCJ9O2Nhc2VcInNpZ24tYWNjb3VudGluZ1wiOmNhc2VcIigpXCI6cmV0dXJue2N1cnJlbmN5U2lnbjpcImFjY291bnRpbmdcIn07Y2FzZVwic2lnbi1hbHdheXNcIjpjYXNlXCIrIVwiOnJldHVybntzaWduRGlzcGxheTpcImFsd2F5c1wifTtjYXNlXCJzaWduLWFjY291bnRpbmctYWx3YXlzXCI6Y2FzZVwiKCkhXCI6cmV0dXJue3NpZ25EaXNwbGF5OlwiYWx3YXlzXCIsY3VycmVuY3lTaWduOlwiYWNjb3VudGluZ1wifTtjYXNlXCJzaWduLWV4Y2VwdC16ZXJvXCI6Y2FzZVwiKz9cIjpyZXR1cm57c2lnbkRpc3BsYXk6XCJleGNlcHRaZXJvXCJ9O2Nhc2VcInNpZ24tYWNjb3VudGluZy1leGNlcHQtemVyb1wiOmNhc2VcIigpP1wiOnJldHVybntzaWduRGlzcGxheTpcImV4Y2VwdFplcm9cIixjdXJyZW5jeVNpZ246XCJhY2NvdW50aW5nXCJ9O2Nhc2VcInNpZ24tbmV2ZXJcIjpjYXNlXCIrX1wiOnJldHVybntzaWduRGlzcGxheTpcIm5ldmVyXCJ9fX1mdW5jdGlvbiBrKGUpe3ZhciB0O2lmKFwiRVwiPT09ZVswXSYmXCJFXCI9PT1lWzFdPyh0PXtub3RhdGlvbjpcImVuZ2luZWVyaW5nXCJ9LGU9ZS5zbGljZSgyKSk6XCJFXCI9PT1lWzBdJiYodD17bm90YXRpb246XCJzY2llbnRpZmljXCJ9LGU9ZS5zbGljZSgxKSksdCl7dmFyIG49ZS5zbGljZSgwLDIpO2lmKFwiKyFcIj09PW4/KHQuc2lnbkRpc3BsYXk9XCJhbHdheXNcIixlPWUuc2xpY2UoMikpOlwiKz9cIj09PW4mJih0LnNpZ25EaXNwbGF5PVwiZXhjZXB0WmVyb1wiLGU9ZS5zbGljZSgyKSksIUMudGVzdChlKSl0aHJvdyBuZXcgRXJyb3IoXCJNYWxmb3JtZWQgY29uY2lzZSBlbmcvc2NpZW50aWZpYyBub3RhdGlvblwiKTt0Lm1pbmltdW1JbnRlZ2VyRGlnaXRzPWUubGVuZ3RofXJldHVybiB0fWZ1bmN0aW9uIE8oZSl7cmV0dXJuIFIoZSl8fHt9fWZ1bmN0aW9uIE4oZSl7Zm9yKHZhciB0PXt9LG49MCxyPWU7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07c3dpdGNoKGkuc3RlbSl7Y2FzZVwicGVyY2VudFwiOmNhc2VcIiVcIjp0LnN0eWxlPVwicGVyY2VudFwiO2NvbnRpbnVlO2Nhc2VcIiV4MTAwXCI6dC5zdHlsZT1cInBlcmNlbnRcIix0LnNjYWxlPTEwMDtjb250aW51ZTtjYXNlXCJjdXJyZW5jeVwiOnQuc3R5bGU9XCJjdXJyZW5jeVwiLHQuY3VycmVuY3k9aS5vcHRpb25zWzBdO2NvbnRpbnVlO2Nhc2VcImdyb3VwLW9mZlwiOmNhc2VcIixfXCI6dC51c2VHcm91cGluZz0hMTtjb250aW51ZTtjYXNlXCJwcmVjaXNpb24taW50ZWdlclwiOmNhc2VcIi5cIjp0Lm1heGltdW1GcmFjdGlvbkRpZ2l0cz0wO2NvbnRpbnVlO2Nhc2VcIm1lYXN1cmUtdW5pdFwiOmNhc2VcInVuaXRcIjp0LnN0eWxlPVwidW5pdFwiLHQudW5pdD1pLm9wdGlvbnNbMF0ucmVwbGFjZSgvXiguKj8pLS8sXCJcIik7Y29udGludWU7Y2FzZVwiY29tcGFjdC1zaG9ydFwiOmNhc2VcIktcIjp0Lm5vdGF0aW9uPVwiY29tcGFjdFwiLHQuY29tcGFjdERpc3BsYXk9XCJzaG9ydFwiO2NvbnRpbnVlO2Nhc2VcImNvbXBhY3QtbG9uZ1wiOmNhc2VcIktLXCI6dC5ub3RhdGlvbj1cImNvbXBhY3RcIix0LmNvbXBhY3REaXNwbGF5PVwibG9uZ1wiO2NvbnRpbnVlO2Nhc2VcInNjaWVudGlmaWNcIjp0PSgwLGEuX19hc3NpZ24pKCgwLGEuX19hc3NpZ24pKCgwLGEuX19hc3NpZ24pKHt9LHQpLHtub3RhdGlvbjpcInNjaWVudGlmaWNcIn0pLGkub3B0aW9ucy5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuKDAsYS5fX2Fzc2lnbikoKDAsYS5fX2Fzc2lnbikoe30sZSksTyh0KSl9KSx7fSkpO2NvbnRpbnVlO2Nhc2VcImVuZ2luZWVyaW5nXCI6dD0oMCxhLl9fYXNzaWduKSgoMCxhLl9fYXNzaWduKSgoMCxhLl9fYXNzaWduKSh7fSx0KSx7bm90YXRpb246XCJlbmdpbmVlcmluZ1wifSksaS5vcHRpb25zLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4oMCxhLl9fYXNzaWduKSgoMCxhLl9fYXNzaWduKSh7fSxlKSxPKHQpKX0pLHt9KSk7Y29udGludWU7Y2FzZVwibm90YXRpb24tc2ltcGxlXCI6dC5ub3RhdGlvbj1cInN0YW5kYXJkXCI7Y29udGludWU7Y2FzZVwidW5pdC13aWR0aC1uYXJyb3dcIjp0LmN1cnJlbmN5RGlzcGxheT1cIm5hcnJvd1N5bWJvbFwiLHQudW5pdERpc3BsYXk9XCJuYXJyb3dcIjtjb250aW51ZTtjYXNlXCJ1bml0LXdpZHRoLXNob3J0XCI6dC5jdXJyZW5jeURpc3BsYXk9XCJjb2RlXCIsdC51bml0RGlzcGxheT1cInNob3J0XCI7Y29udGludWU7Y2FzZVwidW5pdC13aWR0aC1mdWxsLW5hbWVcIjp0LmN1cnJlbmN5RGlzcGxheT1cIm5hbWVcIix0LnVuaXREaXNwbGF5PVwibG9uZ1wiO2NvbnRpbnVlO2Nhc2VcInVuaXQtd2lkdGgtaXNvLWNvZGVcIjp0LmN1cnJlbmN5RGlzcGxheT1cInN5bWJvbFwiO2NvbnRpbnVlO2Nhc2VcInNjYWxlXCI6dC5zY2FsZT1wYXJzZUZsb2F0KGkub3B0aW9uc1swXSk7Y29udGludWU7Y2FzZVwiaW50ZWdlci13aWR0aFwiOmlmKGkub3B0aW9ucy5sZW5ndGg+MSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImludGVnZXItd2lkdGggc3RlbXMgb25seSBhY2NlcHQgYSBzaW5nbGUgb3B0aW9uYWwgb3B0aW9uXCIpO2kub3B0aW9uc1swXS5yZXBsYWNlKFQsKGZ1bmN0aW9uKGUsbixyLGksbyxhKXtpZihuKXQubWluaW11bUludGVnZXJEaWdpdHM9ci5sZW5ndGg7ZWxzZXtpZihpJiZvKXRocm93IG5ldyBFcnJvcihcIldlIGN1cnJlbnRseSBkbyBub3Qgc3VwcG9ydCBtYXhpbXVtIGludGVnZXIgZGlnaXRzXCIpO2lmKGEpdGhyb3cgbmV3IEVycm9yKFwiV2UgY3VycmVudGx5IGRvIG5vdCBzdXBwb3J0IGV4YWN0IGludGVnZXIgZGlnaXRzXCIpfXJldHVyblwiXCJ9KSk7Y29udGludWV9aWYoQy50ZXN0KGkuc3RlbSkpdC5taW5pbXVtSW50ZWdlckRpZ2l0cz1pLnN0ZW0ubGVuZ3RoO2Vsc2UgaWYoUy50ZXN0KGkuc3RlbSkpe2lmKGkub3B0aW9ucy5sZW5ndGg+MSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkZyYWN0aW9uLXByZWNpc2lvbiBzdGVtcyBvbmx5IGFjY2VwdCBhIHNpbmdsZSBvcHRpb25hbCBvcHRpb25cIik7aS5zdGVtLnJlcGxhY2UoUywoZnVuY3Rpb24oZSxuLHIsaSxvLGEpe3JldHVyblwiKlwiPT09cj90Lm1pbmltdW1GcmFjdGlvbkRpZ2l0cz1uLmxlbmd0aDppJiZcIiNcIj09PWlbMF0/dC5tYXhpbXVtRnJhY3Rpb25EaWdpdHM9aS5sZW5ndGg6byYmYT8odC5taW5pbXVtRnJhY3Rpb25EaWdpdHM9by5sZW5ndGgsdC5tYXhpbXVtRnJhY3Rpb25EaWdpdHM9by5sZW5ndGgrYS5sZW5ndGgpOih0Lm1pbmltdW1GcmFjdGlvbkRpZ2l0cz1uLmxlbmd0aCx0Lm1heGltdW1GcmFjdGlvbkRpZ2l0cz1uLmxlbmd0aCksXCJcIn0pKTt2YXIgbz1pLm9wdGlvbnNbMF07XCJ3XCI9PT1vP3Q9KDAsYS5fX2Fzc2lnbikoKDAsYS5fX2Fzc2lnbikoe30sdCkse3RyYWlsaW5nWmVyb0Rpc3BsYXk6XCJzdHJpcElmSW50ZWdlclwifSk6byYmKHQ9KDAsYS5fX2Fzc2lnbikoKDAsYS5fX2Fzc2lnbikoe30sdCksQShvKSkpfWVsc2UgaWYoYi50ZXN0KGkuc3RlbSkpdD0oMCxhLl9fYXNzaWduKSgoMCxhLl9fYXNzaWduKSh7fSx0KSxBKGkuc3RlbSkpO2Vsc2V7dmFyIHM9UihpLnN0ZW0pO3MmJih0PSgwLGEuX19hc3NpZ24pKCgwLGEuX19hc3NpZ24pKHt9LHQpLHMpKTt2YXIgYz1rKGkuc3RlbSk7YyYmKHQ9KDAsYS5fX2Fzc2lnbikoKDAsYS5fX2Fzc2lnbikoe30sdCksYykpfX1yZXR1cm4gdH12YXIgdyxEPXtcIjAwMVwiOltcIkhcIixcImhcIl0sQUM6W1wiSFwiLFwiaFwiLFwiaGJcIixcImhCXCJdLEFEOltcIkhcIixcImhCXCJdLEFFOltcImhcIixcImhCXCIsXCJoYlwiLFwiSFwiXSxBRjpbXCJIXCIsXCJoYlwiLFwiaEJcIixcImhcIl0sQUc6W1wiaFwiLFwiaGJcIixcIkhcIixcImhCXCJdLEFJOltcIkhcIixcImhcIixcImhiXCIsXCJoQlwiXSxBTDpbXCJoXCIsXCJIXCIsXCJoQlwiXSxBTTpbXCJIXCIsXCJoQlwiXSxBTzpbXCJIXCIsXCJoQlwiXSxBUjpbXCJIXCIsXCJoXCIsXCJoQlwiLFwiaGJcIl0sQVM6W1wiaFwiLFwiSFwiXSxBVDpbXCJIXCIsXCJoQlwiXSxBVTpbXCJoXCIsXCJoYlwiLFwiSFwiLFwiaEJcIl0sQVc6W1wiSFwiLFwiaEJcIl0sQVg6W1wiSFwiXSxBWjpbXCJIXCIsXCJoQlwiLFwiaFwiXSxCQTpbXCJIXCIsXCJoQlwiLFwiaFwiXSxCQjpbXCJoXCIsXCJoYlwiLFwiSFwiLFwiaEJcIl0sQkQ6W1wiaFwiLFwiaEJcIixcIkhcIl0sQkU6W1wiSFwiLFwiaEJcIl0sQkY6W1wiSFwiLFwiaEJcIl0sQkc6W1wiSFwiLFwiaEJcIixcImhcIl0sQkg6W1wiaFwiLFwiaEJcIixcImhiXCIsXCJIXCJdLEJKOltcIkhcIixcImhCXCJdLEJMOltcIkhcIixcImhCXCJdLEJNOltcImhcIixcImhiXCIsXCJIXCIsXCJoQlwiXSxCTjpbXCJoYlwiLFwiaEJcIixcImhcIixcIkhcIl0sQk86W1wiSFwiLFwiaEJcIixcImhcIixcImhiXCJdLEJROltcIkhcIl0sQlI6W1wiSFwiLFwiaEJcIl0sQlM6W1wiaFwiLFwiaGJcIixcIkhcIixcImhCXCJdLEJUOltcImhcIixcIkhcIl0sQlc6W1wiSFwiLFwiaFwiLFwiaGJcIixcImhCXCJdLEJaOltcIkhcIixcImhcIixcImhiXCIsXCJoQlwiXSxDQTpbXCJoXCIsXCJoYlwiLFwiSFwiLFwiaEJcIl0sQ0M6W1wiSFwiLFwiaFwiLFwiaGJcIixcImhCXCJdLENEOltcImhCXCIsXCJIXCJdLENGOltcIkhcIixcImhcIixcImhCXCJdLENHOltcIkhcIixcImhCXCJdLENIOltcIkhcIixcImhCXCIsXCJoXCJdLENJOltcIkhcIixcImhCXCJdLENLOltcIkhcIixcImhcIixcImhiXCIsXCJoQlwiXSxDTDpbXCJIXCIsXCJoXCIsXCJoQlwiLFwiaGJcIl0sQ006W1wiSFwiLFwiaFwiLFwiaEJcIl0sQ046W1wiSFwiLFwiaEJcIixcImhiXCIsXCJoXCJdLENPOltcImhcIixcIkhcIixcImhCXCIsXCJoYlwiXSxDUDpbXCJIXCJdLENSOltcIkhcIixcImhcIixcImhCXCIsXCJoYlwiXSxDVTpbXCJIXCIsXCJoXCIsXCJoQlwiLFwiaGJcIl0sQ1Y6W1wiSFwiLFwiaEJcIl0sQ1g6W1wiSFwiLFwiaFwiLFwiaGJcIixcImhCXCJdLENZOltcImhcIixcIkhcIixcImhiXCIsXCJoQlwiXSxDWjpbXCJIXCJdLERFOltcIkhcIixcImhCXCJdLERHOltcIkhcIixcImhcIixcImhiXCIsXCJoQlwiXSxESjpbXCJoXCIsXCJIXCJdLERLOltcIkhcIl0sRE06W1wiaFwiLFwiaGJcIixcIkhcIixcImhCXCJdLERPOltcImhcIixcIkhcIixcImhCXCIsXCJoYlwiXSxEWjpbXCJoXCIsXCJoQlwiLFwiaGJcIixcIkhcIl0sRUE6W1wiSFwiLFwiaFwiLFwiaEJcIixcImhiXCJdLEVDOltcIkhcIixcImhCXCIsXCJoXCIsXCJoYlwiXSxFRTpbXCJIXCIsXCJoQlwiXSxFRzpbXCJoXCIsXCJoQlwiLFwiaGJcIixcIkhcIl0sRUg6W1wiaFwiLFwiaEJcIixcImhiXCIsXCJIXCJdLEVSOltcImhcIixcIkhcIl0sRVM6W1wiSFwiLFwiaEJcIixcImhcIixcImhiXCJdLEVUOltcImhCXCIsXCJoYlwiLFwiaFwiLFwiSFwiXSxGSTpbXCJIXCJdLEZKOltcImhcIixcImhiXCIsXCJIXCIsXCJoQlwiXSxGSzpbXCJIXCIsXCJoXCIsXCJoYlwiLFwiaEJcIl0sRk06W1wiaFwiLFwiaGJcIixcIkhcIixcImhCXCJdLEZSOltcIkhcIixcImhCXCJdLEdBOltcIkhcIixcImhCXCJdLEdCOltcIkhcIixcImhcIixcImhiXCIsXCJoQlwiXSxHRDpbXCJoXCIsXCJoYlwiLFwiSFwiLFwiaEJcIl0sR0U6W1wiSFwiLFwiaEJcIixcImhcIl0sR0Y6W1wiSFwiLFwiaEJcIl0sR0c6W1wiSFwiLFwiaFwiLFwiaGJcIixcImhCXCJdLEdIOltcImhcIixcIkhcIl0sR0k6W1wiSFwiLFwiaFwiLFwiaGJcIixcImhCXCJdLEdNOltcImhcIixcImhiXCIsXCJIXCIsXCJoQlwiXSxHTjpbXCJIXCIsXCJoQlwiXSxHUDpbXCJIXCIsXCJoQlwiXSxHUTpbXCJIXCIsXCJoQlwiLFwiaFwiLFwiaGJcIl0sR1I6W1wiaFwiLFwiSFwiLFwiaGJcIixcImhCXCJdLEdUOltcIkhcIixcImhcIixcImhCXCIsXCJoYlwiXSxHVTpbXCJoXCIsXCJoYlwiLFwiSFwiLFwiaEJcIl0sR1c6W1wiSFwiLFwiaEJcIl0sR1k6W1wiaFwiLFwiaGJcIixcIkhcIixcImhCXCJdLEhLOltcImhcIixcImhCXCIsXCJoYlwiLFwiSFwiXSxITjpbXCJIXCIsXCJoXCIsXCJoQlwiLFwiaGJcIl0sSFI6W1wiSFwiLFwiaEJcIl0sSUM6W1wiSFwiLFwiaFwiLFwiaEJcIixcImhiXCJdLElEOltcIkhcIl0sSUU6W1wiSFwiLFwiaFwiLFwiaGJcIixcImhCXCJdLElMOltcIkhcIixcImhCXCJdLElNOltcIkhcIixcImhcIixcImhiXCIsXCJoQlwiXSxJTjpbXCJoXCIsXCJIXCJdLElPOltcIkhcIixcImhcIixcImhiXCIsXCJoQlwiXSxJUTpbXCJoXCIsXCJoQlwiLFwiaGJcIixcIkhcIl0sSVI6W1wiaEJcIixcIkhcIl0sSVM6W1wiSFwiXSxJVDpbXCJIXCIsXCJoQlwiXSxKRTpbXCJIXCIsXCJoXCIsXCJoYlwiLFwiaEJcIl0sSk06W1wiaFwiLFwiaGJcIixcIkhcIixcImhCXCJdLEpPOltcImhcIixcImhCXCIsXCJoYlwiLFwiSFwiXSxKUDpbXCJIXCIsXCJoXCIsXCJLXCJdLEtFOltcImhCXCIsXCJoYlwiLFwiSFwiLFwiaFwiXSxLRzpbXCJIXCIsXCJoXCIsXCJoQlwiLFwiaGJcIl0sS0g6W1wiaEJcIixcImhcIixcIkhcIixcImhiXCJdLEtJOltcImhcIixcImhiXCIsXCJIXCIsXCJoQlwiXSxLTTpbXCJIXCIsXCJoXCIsXCJoQlwiLFwiaGJcIl0sS046W1wiaFwiLFwiaGJcIixcIkhcIixcImhCXCJdLEtQOltcImhcIixcIkhcIixcImhCXCIsXCJoYlwiXSxLUjpbXCJoXCIsXCJIXCIsXCJoQlwiLFwiaGJcIl0sS1c6W1wiaFwiLFwiaEJcIixcImhiXCIsXCJIXCJdLEtZOltcImhcIixcImhiXCIsXCJIXCIsXCJoQlwiXSxLWjpbXCJIXCIsXCJoQlwiXSxMQTpbXCJIXCIsXCJoYlwiLFwiaEJcIixcImhcIl0sTEI6W1wiaFwiLFwiaEJcIixcImhiXCIsXCJIXCJdLExDOltcImhcIixcImhiXCIsXCJIXCIsXCJoQlwiXSxMSTpbXCJIXCIsXCJoQlwiLFwiaFwiXSxMSzpbXCJIXCIsXCJoXCIsXCJoQlwiLFwiaGJcIl0sTFI6W1wiaFwiLFwiaGJcIixcIkhcIixcImhCXCJdLExTOltcImhcIixcIkhcIl0sTFQ6W1wiSFwiLFwiaFwiLFwiaGJcIixcImhCXCJdLExVOltcIkhcIixcImhcIixcImhCXCJdLExWOltcIkhcIixcImhCXCIsXCJoYlwiLFwiaFwiXSxMWTpbXCJoXCIsXCJoQlwiLFwiaGJcIixcIkhcIl0sTUE6W1wiSFwiLFwiaFwiLFwiaEJcIixcImhiXCJdLE1DOltcIkhcIixcImhCXCJdLE1EOltcIkhcIixcImhCXCJdLE1FOltcIkhcIixcImhCXCIsXCJoXCJdLE1GOltcIkhcIixcImhCXCJdLE1IOltcImhcIixcImhiXCIsXCJIXCIsXCJoQlwiXSxNSzpbXCJIXCIsXCJoXCIsXCJoYlwiLFwiaEJcIl0sTUw6W1wiSFwiXSxNTTpbXCJoQlwiLFwiaGJcIixcIkhcIixcImhcIl0sTU46W1wiSFwiLFwiaFwiLFwiaGJcIixcImhCXCJdLE1POltcImhcIixcImhCXCIsXCJoYlwiLFwiSFwiXSxNUDpbXCJoXCIsXCJoYlwiLFwiSFwiLFwiaEJcIl0sTVE6W1wiSFwiLFwiaEJcIl0sTVI6W1wiaFwiLFwiaEJcIixcImhiXCIsXCJIXCJdLE1TOltcIkhcIixcImhcIixcImhiXCIsXCJoQlwiXSxNVzpbXCJoXCIsXCJoYlwiLFwiSFwiLFwiaEJcIl0sTVg6W1wiSFwiLFwiaFwiLFwiaEJcIixcImhiXCJdLE1ZOltcImhiXCIsXCJoQlwiLFwiaFwiLFwiSFwiXSxNWjpbXCJIXCIsXCJoQlwiXSxOQTpbXCJoXCIsXCJIXCIsXCJoQlwiLFwiaGJcIl0sTkM6W1wiSFwiLFwiaEJcIl0sTkU6W1wiSFwiXSxORjpbXCJIXCIsXCJoXCIsXCJoYlwiLFwiaEJcIl0sTkc6W1wiSFwiLFwiaFwiLFwiaGJcIixcImhCXCJdLE5JOltcIkhcIixcImhcIixcImhCXCIsXCJoYlwiXSxOTDpbXCJIXCIsXCJoQlwiXSxOUDpbXCJIXCIsXCJoXCIsXCJoQlwiXSxOUjpbXCJIXCIsXCJoXCIsXCJoYlwiLFwiaEJcIl0sTlU6W1wiSFwiLFwiaFwiLFwiaGJcIixcImhCXCJdLE5aOltcImhcIixcImhiXCIsXCJIXCIsXCJoQlwiXSxPTTpbXCJoXCIsXCJoQlwiLFwiaGJcIixcIkhcIl0sUEE6W1wiaFwiLFwiSFwiLFwiaEJcIixcImhiXCJdLFBFOltcIkhcIixcImhCXCIsXCJoXCIsXCJoYlwiXSxQRjpbXCJIXCIsXCJoXCIsXCJoQlwiXSxQRzpbXCJoXCIsXCJIXCJdLFBIOltcImhcIixcImhCXCIsXCJoYlwiLFwiSFwiXSxQSzpbXCJoXCIsXCJoQlwiLFwiSFwiXSxQTTpbXCJIXCIsXCJoQlwiXSxQTjpbXCJIXCIsXCJoXCIsXCJoYlwiLFwiaEJcIl0sUFI6W1wiaFwiLFwiSFwiLFwiaEJcIixcImhiXCJdLFBTOltcImhcIixcImhCXCIsXCJoYlwiLFwiSFwiXSxQVDpbXCJIXCIsXCJoQlwiXSxQVzpbXCJoXCIsXCJIXCJdLFBZOltcIkhcIixcImhcIixcImhCXCIsXCJoYlwiXSxRQTpbXCJoXCIsXCJoQlwiLFwiaGJcIixcIkhcIl0sUkU6W1wiSFwiLFwiaEJcIl0sUk86W1wiSFwiLFwiaEJcIl0sUlM6W1wiSFwiLFwiaEJcIixcImhcIl0sUlU6W1wiSFwiXSxTQTpbXCJoXCIsXCJoQlwiLFwiaGJcIixcIkhcIl0sU0I6W1wiaFwiLFwiaGJcIixcIkhcIixcImhCXCJdLFNDOltcIkhcIixcImhcIixcImhCXCJdLFNEOltcImhcIixcImhCXCIsXCJoYlwiLFwiSFwiXSxTRTpbXCJIXCJdLFNHOltcImhcIixcImhiXCIsXCJIXCIsXCJoQlwiXSxTSDpbXCJIXCIsXCJoXCIsXCJoYlwiLFwiaEJcIl0sU0k6W1wiSFwiLFwiaEJcIl0sU0o6W1wiSFwiXSxTSzpbXCJIXCJdLFNMOltcImhcIixcImhiXCIsXCJIXCIsXCJoQlwiXSxTTTpbXCJIXCIsXCJoXCIsXCJoQlwiXSxTTjpbXCJIXCIsXCJoXCIsXCJoQlwiXSxTTzpbXCJoXCIsXCJIXCJdLFNSOltcIkhcIixcImhCXCJdLFNTOltcImhcIixcImhiXCIsXCJIXCIsXCJoQlwiXSxTVDpbXCJIXCIsXCJoQlwiXSxTVjpbXCJIXCIsXCJoXCIsXCJoQlwiLFwiaGJcIl0sU1g6W1wiSFwiLFwiaFwiLFwiaGJcIixcImhCXCJdLFNZOltcImhcIixcImhCXCIsXCJoYlwiLFwiSFwiXSxTWjpbXCJoXCIsXCJoYlwiLFwiSFwiLFwiaEJcIl0sVEE6W1wiSFwiLFwiaFwiLFwiaGJcIixcImhCXCJdLFRDOltcImhcIixcImhiXCIsXCJIXCIsXCJoQlwiXSxURDpbXCJoXCIsXCJIXCIsXCJoQlwiXSxURjpbXCJIXCIsXCJoXCIsXCJoQlwiXSxURzpbXCJIXCIsXCJoQlwiXSxUTDpbXCJIXCIsXCJoQlwiLFwiaGJcIixcImhcIl0sVE46W1wiaFwiLFwiaEJcIixcImhiXCIsXCJIXCJdLFRPOltcImhcIixcIkhcIl0sVFI6W1wiSFwiLFwiaEJcIl0sVFQ6W1wiaFwiLFwiaGJcIixcIkhcIixcImhCXCJdLFRXOltcImhCXCIsXCJoYlwiLFwiaFwiLFwiSFwiXSxUWjpbXCJoQlwiLFwiaGJcIixcIkhcIixcImhcIl0sVUE6W1wiSFwiLFwiaEJcIixcImhcIl0sVUc6W1wiaEJcIixcImhiXCIsXCJIXCIsXCJoXCJdLFVNOltcImhcIixcImhiXCIsXCJIXCIsXCJoQlwiXSxVUzpbXCJoXCIsXCJoYlwiLFwiSFwiLFwiaEJcIl0sVVk6W1wiSFwiLFwiaFwiLFwiaEJcIixcImhiXCJdLFVaOltcIkhcIixcImhCXCIsXCJoXCJdLFZBOltcIkhcIixcImhcIixcImhCXCJdLFZDOltcImhcIixcImhiXCIsXCJIXCIsXCJoQlwiXSxWRTpbXCJoXCIsXCJIXCIsXCJoQlwiLFwiaGJcIl0sVkc6W1wiaFwiLFwiaGJcIixcIkhcIixcImhCXCJdLFZJOltcImhcIixcImhiXCIsXCJIXCIsXCJoQlwiXSxWVTpbXCJoXCIsXCJIXCJdLFdGOltcIkhcIixcImhCXCJdLFdTOltcImhcIixcIkhcIl0sWEs6W1wiSFwiLFwiaEJcIixcImhcIl0sWUU6W1wiaFwiLFwiaEJcIixcImhiXCIsXCJIXCJdLFlUOltcIkhcIixcImhCXCJdLFpBOltcIkhcIixcImhcIixcImhiXCIsXCJoQlwiXSxaTTpbXCJoXCIsXCJoYlwiLFwiSFwiLFwiaEJcIl0sXCJhZi1aQVwiOltcIkhcIixcImhcIixcImhCXCIsXCJoYlwiXSxcImFyLTAwMVwiOltcImhcIixcImhCXCIsXCJoYlwiLFwiSFwiXSxcImNhLUVTXCI6W1wiSFwiLFwiaFwiLFwiaEJcIl0sXCJlbi0wMDFcIjpbXCJoXCIsXCJoYlwiLFwiSFwiLFwiaEJcIl0sXCJlcy1CT1wiOltcIkhcIixcImhcIixcImhCXCIsXCJoYlwiXSxcImVzLUJSXCI6W1wiSFwiLFwiaFwiLFwiaEJcIixcImhiXCJdLFwiZXMtRUNcIjpbXCJIXCIsXCJoXCIsXCJoQlwiLFwiaGJcIl0sXCJlcy1FU1wiOltcIkhcIixcImhcIixcImhCXCIsXCJoYlwiXSxcImVzLUdRXCI6W1wiSFwiLFwiaFwiLFwiaEJcIixcImhiXCJdLFwiZXMtUEVcIjpbXCJIXCIsXCJoXCIsXCJoQlwiLFwiaGJcIl0sXCJmci1DQVwiOltcIkhcIixcImhcIixcImhCXCJdLFwiZ2wtRVNcIjpbXCJIXCIsXCJoXCIsXCJoQlwiXSxcImd1LUlOXCI6W1wiaEJcIixcImhiXCIsXCJoXCIsXCJIXCJdLFwiaGktSU5cIjpbXCJoQlwiLFwiaFwiLFwiSFwiXSxcIml0LUNIXCI6W1wiSFwiLFwiaFwiLFwiaEJcIl0sXCJpdC1JVFwiOltcIkhcIixcImhcIixcImhCXCJdLFwia24tSU5cIjpbXCJoQlwiLFwiaFwiLFwiSFwiXSxcIm1sLUlOXCI6W1wiaEJcIixcImhcIixcIkhcIl0sXCJtci1JTlwiOltcImhCXCIsXCJoYlwiLFwiaFwiLFwiSFwiXSxcInBhLUlOXCI6W1wiaEJcIixcImhiXCIsXCJoXCIsXCJIXCJdLFwidGEtSU5cIjpbXCJoQlwiLFwiaFwiLFwiaGJcIixcIkhcIl0sXCJ0ZS1JTlwiOltcImhCXCIsXCJoXCIsXCJIXCJdLFwienUtWkFcIjpbXCJIXCIsXCJoQlwiLFwiaGJcIixcImhcIl19O2Z1bmN0aW9uIFAoZSl7dmFyIHQ9ZS5ob3VyQ3ljbGU7aWYodm9pZCAwPT09dCYmZS5ob3VyQ3ljbGVzJiZlLmhvdXJDeWNsZXMubGVuZ3RoJiYodD1lLmhvdXJDeWNsZXNbMF0pLHQpc3dpdGNoKHQpe2Nhc2VcImgyNFwiOnJldHVyblwia1wiO2Nhc2VcImgyM1wiOnJldHVyblwiSFwiO2Nhc2VcImgxMlwiOnJldHVyblwiaFwiO2Nhc2VcImgxMVwiOnJldHVyblwiS1wiO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBob3VyQ3ljbGVcIil9dmFyIG4scj1lLmxhbmd1YWdlO3JldHVyblwicm9vdFwiIT09ciYmKG49ZS5tYXhpbWl6ZSgpLnJlZ2lvbiksKERbbnx8XCJcIl18fERbcnx8XCJcIl18fERbXCJcIi5jb25jYXQocixcIi0wMDFcIildfHxEW1wiMDAxXCJdKVswXX12YXIgTT1uZXcgUmVnRXhwKFwiXlwiLmNvbmNhdCh5LnNvdXJjZSxcIipcIikpLEw9bmV3IFJlZ0V4cChcIlwiLmNvbmNhdCh5LnNvdXJjZSxcIiokXCIpKTtmdW5jdGlvbiBVKGUsdCl7cmV0dXJue3N0YXJ0OmUsZW5kOnR9fXZhciB4PSEhU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoLEY9ISFTdHJpbmcuZnJvbUNvZGVQb2ludCxCPSEhT2JqZWN0LmZyb21FbnRyaWVzLFY9ISFTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0LEc9ISFTdHJpbmcucHJvdG90eXBlLnRyaW1TdGFydCxIPSEhU3RyaW5nLnByb3RvdHlwZS50cmltRW5kLFc9TnVtYmVyLmlzU2FmZUludGVnZXI/TnVtYmVyLmlzU2FmZUludGVnZXI6ZnVuY3Rpb24oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGUmJmlzRmluaXRlKGUpJiZNYXRoLmZsb29yKGUpPT09ZSYmTWF0aC5hYnMoZSk8PTkwMDcxOTkyNTQ3NDA5OTF9LGo9ITA7dHJ5e2o9XCJhXCI9PT0obnVsbD09PSh3PUooXCIoW15cXFxccHtXaGl0ZV9TcGFjZX1cXFxccHtQYXR0ZXJuX1N5bnRheH1dKilcIixcInl1XCIpLmV4ZWMoXCJhXCIpKXx8dm9pZCAwPT09dz92b2lkIDA6d1swXSl9Y2F0Y2goZSl7aj0hMX12YXIgWix6PXg/ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlLnN0YXJ0c1dpdGgodCxuKX06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlLnNsaWNlKG4sbit0Lmxlbmd0aCk9PT10fSxLPUY/U3RyaW5nLmZyb21Db2RlUG9pbnQ6ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07Zm9yKHZhciBuLHI9XCJcIixpPWUubGVuZ3RoLG89MDtpPm87KXtpZigobj1lW28rK10pPjExMTQxMTEpdGhyb3cgUmFuZ2VFcnJvcihuK1wiIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnRcIik7cis9bjw2NTUzNj9TdHJpbmcuZnJvbUNoYXJDb2RlKG4pOlN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKChuLT02NTUzNik+PjEwKSxuJTEwMjQrNTYzMjApfXJldHVybiByfSxZPUI/T2JqZWN0LmZyb21FbnRyaWVzOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD17fSxuPTAscj1lO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dLG89aVswXSxhPWlbMV07dFtvXT1hfXJldHVybiB0fSxxPVY/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb2RlUG9pbnRBdCh0KX06ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmxlbmd0aDtpZighKHQ8MHx8dD49bikpe3ZhciByLGk9ZS5jaGFyQ29kZUF0KHQpO3JldHVybiBpPDU1Mjk2fHxpPjU2MzE5fHx0KzE9PT1ufHwocj1lLmNoYXJDb2RlQXQodCsxKSk8NTYzMjB8fHI+NTczNDM/aTpyLTU2MzIwKyhpLTU1Mjk2PDwxMCkrNjU1MzZ9fSxYPUc/ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbVN0YXJ0KCl9OmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoTSxcIlwiKX0sUT1IP2Z1bmN0aW9uKGUpe3JldHVybiBlLnRyaW1FbmQoKX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZShMLFwiXCIpfTtmdW5jdGlvbiBKKGUsdCl7cmV0dXJuIG5ldyBSZWdFeHAoZSx0KX1pZihqKXt2YXIgJD1KKFwiKFteXFxcXHB7V2hpdGVfU3BhY2V9XFxcXHB7UGF0dGVybl9TeW50YXh9XSopXCIsXCJ5dVwiKTtaPWZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuICQubGFzdEluZGV4PXQsbnVsbCE9PShuPSQuZXhlYyhlKVsxXSkmJnZvaWQgMCE9PW4/bjpcIlwifX1lbHNlIFo9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W107Oyl7dmFyIHI9cShlLHQpO2lmKHZvaWQgMD09PXJ8fG5lKHIpfHxyZShyKSlicmVhaztuLnB1c2gociksdCs9cj49NjU1MzY/MjoxfXJldHVybiBLLmFwcGx5KHZvaWQgMCxuKX07dmFyIGVlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZvaWQgMD09PXQmJih0PXt9KSx0aGlzLm1lc3NhZ2U9ZSx0aGlzLnBvc2l0aW9uPXtvZmZzZXQ6MCxsaW5lOjEsY29sdW1uOjF9LHRoaXMuaWdub3JlVGFnPSEhdC5pZ25vcmVUYWcsdGhpcy5sb2NhbGU9dC5sb2NhbGUsdGhpcy5yZXF1aXJlc090aGVyQ2xhdXNlPSEhdC5yZXF1aXJlc090aGVyQ2xhdXNlLHRoaXMuc2hvdWxkUGFyc2VTa2VsZXRvbnM9ISF0LnNob3VsZFBhcnNlU2tlbGV0b25zfXJldHVybiBlLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbigpe2lmKDAhPT10aGlzLm9mZnNldCgpKXRocm93IEVycm9yKFwicGFyc2VyIGNhbiBvbmx5IGJlIHVzZWQgb25jZVwiKTtyZXR1cm4gdGhpcy5wYXJzZU1lc3NhZ2UoMCxcIlwiLCExKX0sZS5wcm90b3R5cGUucGFyc2VNZXNzYWdlPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIG89W107IXRoaXMuaXNFT0YoKTspe3ZhciBhPXRoaXMuY2hhcigpO2lmKDEyMz09PWEpe2lmKChzPXRoaXMucGFyc2VBcmd1bWVudChlLG4pKS5lcnIpcmV0dXJuIHM7by5wdXNoKHMudmFsKX1lbHNle2lmKDEyNT09PWEmJmU+MClicmVhaztpZigzNSE9PWF8fFwicGx1cmFsXCIhPT10JiZcInNlbGVjdG9yZGluYWxcIiE9PXQpe2lmKDYwPT09YSYmIXRoaXMuaWdub3JlVGFnJiY0Nz09PXRoaXMucGVlaygpKXtpZihuKWJyZWFrO3JldHVybiB0aGlzLmVycm9yKHIuVU5NQVRDSEVEX0NMT1NJTkdfVEFHLFUodGhpcy5jbG9uZVBvc2l0aW9uKCksdGhpcy5jbG9uZVBvc2l0aW9uKCkpKX1pZig2MD09PWEmJiF0aGlzLmlnbm9yZVRhZyYmdGUodGhpcy5wZWVrKCl8fDApKXtpZigocz10aGlzLnBhcnNlVGFnKGUsdCkpLmVycilyZXR1cm4gcztvLnB1c2gocy52YWwpfWVsc2V7dmFyIHM7aWYoKHM9dGhpcy5wYXJzZUxpdGVyYWwoZSx0KSkuZXJyKXJldHVybiBzO28ucHVzaChzLnZhbCl9fWVsc2V7dmFyIGM9dGhpcy5jbG9uZVBvc2l0aW9uKCk7dGhpcy5idW1wKCksby5wdXNoKHt0eXBlOmkucG91bmQsbG9jYXRpb246VShjLHRoaXMuY2xvbmVQb3NpdGlvbigpKX0pfX19cmV0dXJue3ZhbDpvLGVycjpudWxsfX0sZS5wcm90b3R5cGUucGFyc2VUYWc9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNsb25lUG9zaXRpb24oKTt0aGlzLmJ1bXAoKTt2YXIgbz10aGlzLnBhcnNlVGFnTmFtZSgpO2lmKHRoaXMuYnVtcFNwYWNlKCksdGhpcy5idW1wSWYoXCIvPlwiKSlyZXR1cm57dmFsOnt0eXBlOmkubGl0ZXJhbCx2YWx1ZTpcIjxcIi5jb25jYXQobyxcIi8+XCIpLGxvY2F0aW9uOlUobix0aGlzLmNsb25lUG9zaXRpb24oKSl9LGVycjpudWxsfTtpZih0aGlzLmJ1bXBJZihcIj5cIikpe3ZhciBhPXRoaXMucGFyc2VNZXNzYWdlKGUrMSx0LCEwKTtpZihhLmVycilyZXR1cm4gYTt2YXIgcz1hLnZhbCxjPXRoaXMuY2xvbmVQb3NpdGlvbigpO2lmKHRoaXMuYnVtcElmKFwiPC9cIikpe2lmKHRoaXMuaXNFT0YoKXx8IXRlKHRoaXMuY2hhcigpKSlyZXR1cm4gdGhpcy5lcnJvcihyLklOVkFMSURfVEFHLFUoYyx0aGlzLmNsb25lUG9zaXRpb24oKSkpO3ZhciBsPXRoaXMuY2xvbmVQb3NpdGlvbigpO3JldHVybiBvIT09dGhpcy5wYXJzZVRhZ05hbWUoKT90aGlzLmVycm9yKHIuVU5NQVRDSEVEX0NMT1NJTkdfVEFHLFUobCx0aGlzLmNsb25lUG9zaXRpb24oKSkpOih0aGlzLmJ1bXBTcGFjZSgpLHRoaXMuYnVtcElmKFwiPlwiKT97dmFsOnt0eXBlOmkudGFnLHZhbHVlOm8sY2hpbGRyZW46cyxsb2NhdGlvbjpVKG4sdGhpcy5jbG9uZVBvc2l0aW9uKCkpfSxlcnI6bnVsbH06dGhpcy5lcnJvcihyLklOVkFMSURfVEFHLFUoYyx0aGlzLmNsb25lUG9zaXRpb24oKSkpKX1yZXR1cm4gdGhpcy5lcnJvcihyLlVOQ0xPU0VEX1RBRyxVKG4sdGhpcy5jbG9uZVBvc2l0aW9uKCkpKX1yZXR1cm4gdGhpcy5lcnJvcihyLklOVkFMSURfVEFHLFUobix0aGlzLmNsb25lUG9zaXRpb24oKSkpfSxlLnByb3RvdHlwZS5wYXJzZVRhZ05hbWU9ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMub2Zmc2V0KCk7Zm9yKHRoaXMuYnVtcCgpOyF0aGlzLmlzRU9GKCkmJig0NT09PShlPXRoaXMuY2hhcigpKXx8NDY9PT1lfHxlPj00OCYmZTw9NTd8fDk1PT09ZXx8ZT49OTcmJmU8PTEyMnx8ZT49NjUmJmU8PTkwfHwxODM9PWV8fGU+PTE5MiYmZTw9MjE0fHxlPj0yMTYmJmU8PTI0Nnx8ZT49MjQ4JiZlPD04OTN8fGU+PTg5NSYmZTw9ODE5MXx8ZT49ODIwNCYmZTw9ODIwNXx8ZT49ODI1NSYmZTw9ODI1Nnx8ZT49ODMwNCYmZTw9ODU5MXx8ZT49MTEyNjQmJmU8PTEyMjcxfHxlPj0xMjI4OSYmZTw9NTUyOTV8fGU+PTYzNzQ0JiZlPD02NDk3NXx8ZT49NjUwMDgmJmU8PTY1NTMzfHxlPj02NTUzNiYmZTw9OTgzMDM5KTspdGhpcy5idW1wKCk7cmV0dXJuIHRoaXMubWVzc2FnZS5zbGljZSh0LHRoaXMub2Zmc2V0KCkpfSxlLnByb3RvdHlwZS5wYXJzZUxpdGVyYWw9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy5jbG9uZVBvc2l0aW9uKCkscj1cIlwiOzspe3ZhciBvPXRoaXMudHJ5UGFyc2VRdW90ZSh0KTtpZihvKXIrPW87ZWxzZXt2YXIgYT10aGlzLnRyeVBhcnNlVW5xdW90ZWQoZSx0KTtpZihhKXIrPWE7ZWxzZXt2YXIgcz10aGlzLnRyeVBhcnNlTGVmdEFuZ2xlQnJhY2tldCgpO2lmKCFzKWJyZWFrO3IrPXN9fX12YXIgYz1VKG4sdGhpcy5jbG9uZVBvc2l0aW9uKCkpO3JldHVybnt2YWw6e3R5cGU6aS5saXRlcmFsLHZhbHVlOnIsbG9jYXRpb246Y30sZXJyOm51bGx9fSxlLnByb3RvdHlwZS50cnlQYXJzZUxlZnRBbmdsZUJyYWNrZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0VPRigpfHw2MCE9PXRoaXMuY2hhcigpfHwhdGhpcy5pZ25vcmVUYWcmJih0ZShlPXRoaXMucGVlaygpfHwwKXx8NDc9PT1lKT9udWxsOih0aGlzLmJ1bXAoKSxcIjxcIik7dmFyIGV9LGUucHJvdG90eXBlLnRyeVBhcnNlUXVvdGU9ZnVuY3Rpb24oZSl7aWYodGhpcy5pc0VPRigpfHwzOSE9PXRoaXMuY2hhcigpKXJldHVybiBudWxsO3N3aXRjaCh0aGlzLnBlZWsoKSl7Y2FzZSAzOTpyZXR1cm4gdGhpcy5idW1wKCksdGhpcy5idW1wKCksXCInXCI7Y2FzZSAxMjM6Y2FzZSA2MDpjYXNlIDYyOmNhc2UgMTI1OmJyZWFrO2Nhc2UgMzU6aWYoXCJwbHVyYWxcIj09PWV8fFwic2VsZWN0b3JkaW5hbFwiPT09ZSlicmVhaztyZXR1cm4gbnVsbDtkZWZhdWx0OnJldHVybiBudWxsfXRoaXMuYnVtcCgpO3ZhciB0PVt0aGlzLmNoYXIoKV07Zm9yKHRoaXMuYnVtcCgpOyF0aGlzLmlzRU9GKCk7KXt2YXIgbj10aGlzLmNoYXIoKTtpZigzOT09PW4pe2lmKDM5IT09dGhpcy5wZWVrKCkpe3RoaXMuYnVtcCgpO2JyZWFrfXQucHVzaCgzOSksdGhpcy5idW1wKCl9ZWxzZSB0LnB1c2gobik7dGhpcy5idW1wKCl9cmV0dXJuIEsuYXBwbHkodm9pZCAwLHQpfSxlLnByb3RvdHlwZS50cnlQYXJzZVVucXVvdGVkPWZ1bmN0aW9uKGUsdCl7aWYodGhpcy5pc0VPRigpKXJldHVybiBudWxsO3ZhciBuPXRoaXMuY2hhcigpO3JldHVybiA2MD09PW58fDEyMz09PW58fDM1PT09biYmKFwicGx1cmFsXCI9PT10fHxcInNlbGVjdG9yZGluYWxcIj09PXQpfHwxMjU9PT1uJiZlPjA/bnVsbDoodGhpcy5idW1wKCksSyhuKSl9LGUucHJvdG90eXBlLnBhcnNlQXJndW1lbnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNsb25lUG9zaXRpb24oKTtpZih0aGlzLmJ1bXAoKSx0aGlzLmJ1bXBTcGFjZSgpLHRoaXMuaXNFT0YoKSlyZXR1cm4gdGhpcy5lcnJvcihyLkVYUEVDVF9BUkdVTUVOVF9DTE9TSU5HX0JSQUNFLFUobix0aGlzLmNsb25lUG9zaXRpb24oKSkpO2lmKDEyNT09PXRoaXMuY2hhcigpKXJldHVybiB0aGlzLmJ1bXAoKSx0aGlzLmVycm9yKHIuRU1QVFlfQVJHVU1FTlQsVShuLHRoaXMuY2xvbmVQb3NpdGlvbigpKSk7dmFyIG89dGhpcy5wYXJzZUlkZW50aWZpZXJJZlBvc3NpYmxlKCkudmFsdWU7aWYoIW8pcmV0dXJuIHRoaXMuZXJyb3Ioci5NQUxGT1JNRURfQVJHVU1FTlQsVShuLHRoaXMuY2xvbmVQb3NpdGlvbigpKSk7aWYodGhpcy5idW1wU3BhY2UoKSx0aGlzLmlzRU9GKCkpcmV0dXJuIHRoaXMuZXJyb3Ioci5FWFBFQ1RfQVJHVU1FTlRfQ0xPU0lOR19CUkFDRSxVKG4sdGhpcy5jbG9uZVBvc2l0aW9uKCkpKTtzd2l0Y2godGhpcy5jaGFyKCkpe2Nhc2UgMTI1OnJldHVybiB0aGlzLmJ1bXAoKSx7dmFsOnt0eXBlOmkuYXJndW1lbnQsdmFsdWU6byxsb2NhdGlvbjpVKG4sdGhpcy5jbG9uZVBvc2l0aW9uKCkpfSxlcnI6bnVsbH07Y2FzZSA0NDpyZXR1cm4gdGhpcy5idW1wKCksdGhpcy5idW1wU3BhY2UoKSx0aGlzLmlzRU9GKCk/dGhpcy5lcnJvcihyLkVYUEVDVF9BUkdVTUVOVF9DTE9TSU5HX0JSQUNFLFUobix0aGlzLmNsb25lUG9zaXRpb24oKSkpOnRoaXMucGFyc2VBcmd1bWVudE9wdGlvbnMoZSx0LG8sbik7ZGVmYXVsdDpyZXR1cm4gdGhpcy5lcnJvcihyLk1BTEZPUk1FRF9BUkdVTUVOVCxVKG4sdGhpcy5jbG9uZVBvc2l0aW9uKCkpKX19LGUucHJvdG90eXBlLnBhcnNlSWRlbnRpZmllcklmUG9zc2libGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNsb25lUG9zaXRpb24oKSx0PXRoaXMub2Zmc2V0KCksbj1aKHRoaXMubWVzc2FnZSx0KSxyPXQrbi5sZW5ndGg7cmV0dXJuIHRoaXMuYnVtcFRvKHIpLHt2YWx1ZTpuLGxvY2F0aW9uOlUoZSx0aGlzLmNsb25lUG9zaXRpb24oKSl9fSxlLnByb3RvdHlwZS5wYXJzZUFyZ3VtZW50T3B0aW9ucz1mdW5jdGlvbihlLHQsbixzKXt2YXIgYyxsPXRoaXMuY2xvbmVQb3NpdGlvbigpLHU9dGhpcy5wYXJzZUlkZW50aWZpZXJJZlBvc3NpYmxlKCkudmFsdWUsZD10aGlzLmNsb25lUG9zaXRpb24oKTtzd2l0Y2godSl7Y2FzZVwiXCI6cmV0dXJuIHRoaXMuZXJyb3Ioci5FWFBFQ1RfQVJHVU1FTlRfVFlQRSxVKGwsZCkpO2Nhc2VcIm51bWJlclwiOmNhc2VcImRhdGVcIjpjYXNlXCJ0aW1lXCI6dGhpcy5idW1wU3BhY2UoKTt2YXIgZj1udWxsO2lmKHRoaXMuYnVtcElmKFwiLFwiKSl7dGhpcy5idW1wU3BhY2UoKTt2YXIgcD10aGlzLmNsb25lUG9zaXRpb24oKTtpZigoUz10aGlzLnBhcnNlU2ltcGxlQXJnU3R5bGVJZlBvc3NpYmxlKCkpLmVycilyZXR1cm4gUztpZigwPT09KGc9UShTLnZhbCkpLmxlbmd0aClyZXR1cm4gdGhpcy5lcnJvcihyLkVYUEVDVF9BUkdVTUVOVF9TVFlMRSxVKHRoaXMuY2xvbmVQb3NpdGlvbigpLHRoaXMuY2xvbmVQb3NpdGlvbigpKSk7Zj17c3R5bGU6ZyxzdHlsZUxvY2F0aW9uOlUocCx0aGlzLmNsb25lUG9zaXRpb24oKSl9fWlmKChiPXRoaXMudHJ5UGFyc2VBcmd1bWVudENsb3NlKHMpKS5lcnIpcmV0dXJuIGI7dmFyIG09VShzLHRoaXMuY2xvbmVQb3NpdGlvbigpKTtpZihmJiZ6KG51bGw9PWY/dm9pZCAwOmYuc3R5bGUsXCI6OlwiLDApKXt2YXIgaD1YKGYuc3R5bGUuc2xpY2UoMikpO2lmKFwibnVtYmVyXCI9PT11KXJldHVybihTPXRoaXMucGFyc2VOdW1iZXJTa2VsZXRvbkZyb21TdHJpbmcoaCxmLnN0eWxlTG9jYXRpb24pKS5lcnI/Uzp7dmFsOnt0eXBlOmkubnVtYmVyLHZhbHVlOm4sbG9jYXRpb246bSxzdHlsZTpTLnZhbH0sZXJyOm51bGx9O2lmKDA9PT1oLmxlbmd0aClyZXR1cm4gdGhpcy5lcnJvcihyLkVYUEVDVF9EQVRFX1RJTUVfU0tFTEVUT04sbSk7dmFyIHY9aDt0aGlzLmxvY2FsZSYmKHY9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49XCJcIixyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBpPWUuY2hhckF0KHIpO2lmKFwialwiPT09aSl7Zm9yKHZhciBvPTA7cisxPGUubGVuZ3RoJiZlLmNoYXJBdChyKzEpPT09aTspbysrLHIrKzt2YXIgYT0xKygxJm8pLHM9bzwyPzE6Mysobz4+MSksYz1QKHQpO2ZvcihcIkhcIiE9YyYmXCJrXCIhPWN8fChzPTApO3MtLSA+MDspbis9XCJhXCI7Zm9yKDthLS0gPjA7KW49YytufWVsc2Ugbis9XCJKXCI9PT1pP1wiSFwiOml9cmV0dXJuIG59KGgsdGhpcy5sb2NhbGUpKTt2YXIgZz17dHlwZTpvLmRhdGVUaW1lLHBhdHRlcm46dixsb2NhdGlvbjpmLnN0eWxlTG9jYXRpb24scGFyc2VkT3B0aW9uczp0aGlzLnNob3VsZFBhcnNlU2tlbGV0b25zP18odik6e319O3JldHVybnt2YWw6e3R5cGU6XCJkYXRlXCI9PT11P2kuZGF0ZTppLnRpbWUsdmFsdWU6bixsb2NhdGlvbjptLHN0eWxlOmd9LGVycjpudWxsfX1yZXR1cm57dmFsOnt0eXBlOlwibnVtYmVyXCI9PT11P2kubnVtYmVyOlwiZGF0ZVwiPT09dT9pLmRhdGU6aS50aW1lLHZhbHVlOm4sbG9jYXRpb246bSxzdHlsZTpudWxsIT09KGM9bnVsbD09Zj92b2lkIDA6Zi5zdHlsZSkmJnZvaWQgMCE9PWM/YzpudWxsfSxlcnI6bnVsbH07Y2FzZVwicGx1cmFsXCI6Y2FzZVwic2VsZWN0b3JkaW5hbFwiOmNhc2VcInNlbGVjdFwiOnZhciB5PXRoaXMuY2xvbmVQb3NpdGlvbigpO2lmKHRoaXMuYnVtcFNwYWNlKCksIXRoaXMuYnVtcElmKFwiLFwiKSlyZXR1cm4gdGhpcy5lcnJvcihyLkVYUEVDVF9TRUxFQ1RfQVJHVU1FTlRfT1BUSU9OUyxVKHksKDAsYS5fX2Fzc2lnbikoe30seSkpKTt0aGlzLmJ1bXBTcGFjZSgpO3ZhciBFPXRoaXMucGFyc2VJZGVudGlmaWVySWZQb3NzaWJsZSgpLEk9MDtpZihcInNlbGVjdFwiIT09dSYmXCJvZmZzZXRcIj09PUUudmFsdWUpe2lmKCF0aGlzLmJ1bXBJZihcIjpcIikpcmV0dXJuIHRoaXMuZXJyb3Ioci5FWFBFQ1RfUExVUkFMX0FSR1VNRU5UX09GRlNFVF9WQUxVRSxVKHRoaXMuY2xvbmVQb3NpdGlvbigpLHRoaXMuY2xvbmVQb3NpdGlvbigpKSk7dmFyIFM7aWYodGhpcy5idW1wU3BhY2UoKSwoUz10aGlzLnRyeVBhcnNlRGVjaW1hbEludGVnZXIoci5FWFBFQ1RfUExVUkFMX0FSR1VNRU5UX09GRlNFVF9WQUxVRSxyLklOVkFMSURfUExVUkFMX0FSR1VNRU5UX09GRlNFVF9WQUxVRSkpLmVycilyZXR1cm4gUzt0aGlzLmJ1bXBTcGFjZSgpLEU9dGhpcy5wYXJzZUlkZW50aWZpZXJJZlBvc3NpYmxlKCksST1TLnZhbH12YXIgYixUPXRoaXMudHJ5UGFyc2VQbHVyYWxPclNlbGVjdE9wdGlvbnMoZSx1LHQsRSk7aWYoVC5lcnIpcmV0dXJuIFQ7aWYoKGI9dGhpcy50cnlQYXJzZUFyZ3VtZW50Q2xvc2UocykpLmVycilyZXR1cm4gYjt2YXIgQz1VKHMsdGhpcy5jbG9uZVBvc2l0aW9uKCkpO3JldHVyblwic2VsZWN0XCI9PT11P3t2YWw6e3R5cGU6aS5zZWxlY3QsdmFsdWU6bixvcHRpb25zOlkoVC52YWwpLGxvY2F0aW9uOkN9LGVycjpudWxsfTp7dmFsOnt0eXBlOmkucGx1cmFsLHZhbHVlOm4sb3B0aW9uczpZKFQudmFsKSxvZmZzZXQ6SSxwbHVyYWxUeXBlOlwicGx1cmFsXCI9PT11P1wiY2FyZGluYWxcIjpcIm9yZGluYWxcIixsb2NhdGlvbjpDfSxlcnI6bnVsbH07ZGVmYXVsdDpyZXR1cm4gdGhpcy5lcnJvcihyLklOVkFMSURfQVJHVU1FTlRfVFlQRSxVKGwsZCkpfX0sZS5wcm90b3R5cGUudHJ5UGFyc2VBcmd1bWVudENsb3NlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmlzRU9GKCl8fDEyNSE9PXRoaXMuY2hhcigpP3RoaXMuZXJyb3Ioci5FWFBFQ1RfQVJHVU1FTlRfQ0xPU0lOR19CUkFDRSxVKGUsdGhpcy5jbG9uZVBvc2l0aW9uKCkpKToodGhpcy5idW1wKCkse3ZhbDohMCxlcnI6bnVsbH0pfSxlLnByb3RvdHlwZS5wYXJzZVNpbXBsZUFyZ1N0eWxlSWZQb3NzaWJsZT1mdW5jdGlvbigpe2Zvcih2YXIgZT0wLHQ9dGhpcy5jbG9uZVBvc2l0aW9uKCk7IXRoaXMuaXNFT0YoKTspc3dpdGNoKHRoaXMuY2hhcigpKXtjYXNlIDM5OnRoaXMuYnVtcCgpO3ZhciBuPXRoaXMuY2xvbmVQb3NpdGlvbigpO2lmKCF0aGlzLmJ1bXBVbnRpbChcIidcIikpcmV0dXJuIHRoaXMuZXJyb3Ioci5VTkNMT1NFRF9RVU9URV9JTl9BUkdVTUVOVF9TVFlMRSxVKG4sdGhpcy5jbG9uZVBvc2l0aW9uKCkpKTt0aGlzLmJ1bXAoKTticmVhaztjYXNlIDEyMzplKz0xLHRoaXMuYnVtcCgpO2JyZWFrO2Nhc2UgMTI1OmlmKCEoZT4wKSlyZXR1cm57dmFsOnRoaXMubWVzc2FnZS5zbGljZSh0Lm9mZnNldCx0aGlzLm9mZnNldCgpKSxlcnI6bnVsbH07ZS09MTticmVhaztkZWZhdWx0OnRoaXMuYnVtcCgpfXJldHVybnt2YWw6dGhpcy5tZXNzYWdlLnNsaWNlKHQub2Zmc2V0LHRoaXMub2Zmc2V0KCkpLGVycjpudWxsfX0sZS5wcm90b3R5cGUucGFyc2VOdW1iZXJTa2VsZXRvbkZyb21TdHJpbmc9ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXTt0cnl7bj1mdW5jdGlvbihlKXtpZigwPT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiTnVtYmVyIHNrZWxldG9uIGNhbm5vdCBiZSBlbXB0eVwiKTtmb3IodmFyIHQ9W10sbj0wLHI9ZS5zcGxpdChJKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmxlbmd0aD4wfSkpO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dLnNwbGl0KFwiL1wiKTtpZigwPT09aS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBudW1iZXIgc2tlbGV0b25cIik7Zm9yKHZhciBvPWlbMF0sYT1pLnNsaWNlKDEpLHM9MCxjPWE7czxjLmxlbmd0aDtzKyspaWYoMD09PWNbc10ubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbnVtYmVyIHNrZWxldG9uXCIpO3QucHVzaCh7c3RlbTpvLG9wdGlvbnM6YX0pfXJldHVybiB0fShlKX1jYXRjaChlKXtyZXR1cm4gdGhpcy5lcnJvcihyLklOVkFMSURfTlVNQkVSX1NLRUxFVE9OLHQpfXJldHVybnt2YWw6e3R5cGU6by5udW1iZXIsdG9rZW5zOm4sbG9jYXRpb246dCxwYXJzZWRPcHRpb25zOnRoaXMuc2hvdWxkUGFyc2VTa2VsZXRvbnM/TihuKTp7fX0sZXJyOm51bGx9fSxlLnByb3RvdHlwZS50cnlQYXJzZVBsdXJhbE9yU2VsZWN0T3B0aW9ucz1mdW5jdGlvbihlLHQsbixpKXtmb3IodmFyIG8sYT0hMSxzPVtdLGM9bmV3IFNldCxsPWkudmFsdWUsdT1pLmxvY2F0aW9uOzspe2lmKDA9PT1sLmxlbmd0aCl7dmFyIGQ9dGhpcy5jbG9uZVBvc2l0aW9uKCk7aWYoXCJzZWxlY3RcIj09PXR8fCF0aGlzLmJ1bXBJZihcIj1cIikpYnJlYWs7dmFyIGY9dGhpcy50cnlQYXJzZURlY2ltYWxJbnRlZ2VyKHIuRVhQRUNUX1BMVVJBTF9BUkdVTUVOVF9TRUxFQ1RPUixyLklOVkFMSURfUExVUkFMX0FSR1VNRU5UX1NFTEVDVE9SKTtpZihmLmVycilyZXR1cm4gZjt1PVUoZCx0aGlzLmNsb25lUG9zaXRpb24oKSksbD10aGlzLm1lc3NhZ2Uuc2xpY2UoZC5vZmZzZXQsdGhpcy5vZmZzZXQoKSl9aWYoYy5oYXMobCkpcmV0dXJuIHRoaXMuZXJyb3IoXCJzZWxlY3RcIj09PXQ/ci5EVVBMSUNBVEVfU0VMRUNUX0FSR1VNRU5UX1NFTEVDVE9SOnIuRFVQTElDQVRFX1BMVVJBTF9BUkdVTUVOVF9TRUxFQ1RPUix1KTtcIm90aGVyXCI9PT1sJiYoYT0hMCksdGhpcy5idW1wU3BhY2UoKTt2YXIgcD10aGlzLmNsb25lUG9zaXRpb24oKTtpZighdGhpcy5idW1wSWYoXCJ7XCIpKXJldHVybiB0aGlzLmVycm9yKFwic2VsZWN0XCI9PT10P3IuRVhQRUNUX1NFTEVDVF9BUkdVTUVOVF9TRUxFQ1RPUl9GUkFHTUVOVDpyLkVYUEVDVF9QTFVSQUxfQVJHVU1FTlRfU0VMRUNUT1JfRlJBR01FTlQsVSh0aGlzLmNsb25lUG9zaXRpb24oKSx0aGlzLmNsb25lUG9zaXRpb24oKSkpO3ZhciBtPXRoaXMucGFyc2VNZXNzYWdlKGUrMSx0LG4pO2lmKG0uZXJyKXJldHVybiBtO3ZhciBoPXRoaXMudHJ5UGFyc2VBcmd1bWVudENsb3NlKHApO2lmKGguZXJyKXJldHVybiBoO3MucHVzaChbbCx7dmFsdWU6bS52YWwsbG9jYXRpb246VShwLHRoaXMuY2xvbmVQb3NpdGlvbigpKX1dKSxjLmFkZChsKSx0aGlzLmJ1bXBTcGFjZSgpLGw9KG89dGhpcy5wYXJzZUlkZW50aWZpZXJJZlBvc3NpYmxlKCkpLnZhbHVlLHU9by5sb2NhdGlvbn1yZXR1cm4gMD09PXMubGVuZ3RoP3RoaXMuZXJyb3IoXCJzZWxlY3RcIj09PXQ/ci5FWFBFQ1RfU0VMRUNUX0FSR1VNRU5UX1NFTEVDVE9SOnIuRVhQRUNUX1BMVVJBTF9BUkdVTUVOVF9TRUxFQ1RPUixVKHRoaXMuY2xvbmVQb3NpdGlvbigpLHRoaXMuY2xvbmVQb3NpdGlvbigpKSk6dGhpcy5yZXF1aXJlc090aGVyQ2xhdXNlJiYhYT90aGlzLmVycm9yKHIuTUlTU0lOR19PVEhFUl9DTEFVU0UsVSh0aGlzLmNsb25lUG9zaXRpb24oKSx0aGlzLmNsb25lUG9zaXRpb24oKSkpOnt2YWw6cyxlcnI6bnVsbH19LGUucHJvdG90eXBlLnRyeVBhcnNlRGVjaW1hbEludGVnZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbj0xLHI9dGhpcy5jbG9uZVBvc2l0aW9uKCk7dGhpcy5idW1wSWYoXCIrXCIpfHx0aGlzLmJ1bXBJZihcIi1cIikmJihuPS0xKTtmb3IodmFyIGk9ITEsbz0wOyF0aGlzLmlzRU9GKCk7KXt2YXIgYT10aGlzLmNoYXIoKTtpZighKGE+PTQ4JiZhPD01NykpYnJlYWs7aT0hMCxvPTEwKm8rKGEtNDgpLHRoaXMuYnVtcCgpfXZhciBzPVUocix0aGlzLmNsb25lUG9zaXRpb24oKSk7cmV0dXJuIGk/VyhvKj1uKT97dmFsOm8sZXJyOm51bGx9OnRoaXMuZXJyb3IodCxzKTp0aGlzLmVycm9yKGUscyl9LGUucHJvdG90eXBlLm9mZnNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBvc2l0aW9uLm9mZnNldH0sZS5wcm90b3R5cGUuaXNFT0Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vZmZzZXQoKT09PXRoaXMubWVzc2FnZS5sZW5ndGh9LGUucHJvdG90eXBlLmNsb25lUG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm57b2Zmc2V0OnRoaXMucG9zaXRpb24ub2Zmc2V0LGxpbmU6dGhpcy5wb3NpdGlvbi5saW5lLGNvbHVtbjp0aGlzLnBvc2l0aW9uLmNvbHVtbn19LGUucHJvdG90eXBlLmNoYXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBvc2l0aW9uLm9mZnNldDtpZihlPj10aGlzLm1lc3NhZ2UubGVuZ3RoKXRocm93IEVycm9yKFwib3V0IG9mIGJvdW5kXCIpO3ZhciB0PXEodGhpcy5tZXNzYWdlLGUpO2lmKHZvaWQgMD09PXQpdGhyb3cgRXJyb3IoXCJPZmZzZXQgXCIuY29uY2F0KGUsXCIgaXMgYXQgaW52YWxpZCBVVEYtMTYgY29kZSB1bml0IGJvdW5kYXJ5XCIpKTtyZXR1cm4gdH0sZS5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24oZSx0KXtyZXR1cm57dmFsOm51bGwsZXJyOntraW5kOmUsbWVzc2FnZTp0aGlzLm1lc3NhZ2UsbG9jYXRpb246dH19fSxlLnByb3RvdHlwZS5idW1wPWZ1bmN0aW9uKCl7aWYoIXRoaXMuaXNFT0YoKSl7dmFyIGU9dGhpcy5jaGFyKCk7MTA9PT1lPyh0aGlzLnBvc2l0aW9uLmxpbmUrPTEsdGhpcy5wb3NpdGlvbi5jb2x1bW49MSx0aGlzLnBvc2l0aW9uLm9mZnNldCs9MSk6KHRoaXMucG9zaXRpb24uY29sdW1uKz0xLHRoaXMucG9zaXRpb24ub2Zmc2V0Kz1lPDY1NTM2PzE6Mil9fSxlLnByb3RvdHlwZS5idW1wSWY9ZnVuY3Rpb24oZSl7aWYoeih0aGlzLm1lc3NhZ2UsZSx0aGlzLm9mZnNldCgpKSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspdGhpcy5idW1wKCk7cmV0dXJuITB9cmV0dXJuITF9LGUucHJvdG90eXBlLmJ1bXBVbnRpbD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLm9mZnNldCgpLG49dGhpcy5tZXNzYWdlLmluZGV4T2YoZSx0KTtyZXR1cm4gbj49MD8odGhpcy5idW1wVG8obiksITApOih0aGlzLmJ1bXBUbyh0aGlzLm1lc3NhZ2UubGVuZ3RoKSwhMSl9LGUucHJvdG90eXBlLmJ1bXBUbz1mdW5jdGlvbihlKXtpZih0aGlzLm9mZnNldCgpPmUpdGhyb3cgRXJyb3IoXCJ0YXJnZXRPZmZzZXQgXCIuY29uY2F0KGUsXCIgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGN1cnJlbnQgb2Zmc2V0IFwiKS5jb25jYXQodGhpcy5vZmZzZXQoKSkpO2ZvcihlPU1hdGgubWluKGUsdGhpcy5tZXNzYWdlLmxlbmd0aCk7Oyl7dmFyIHQ9dGhpcy5vZmZzZXQoKTtpZih0PT09ZSlicmVhaztpZih0PmUpdGhyb3cgRXJyb3IoXCJ0YXJnZXRPZmZzZXQgXCIuY29uY2F0KGUsXCIgaXMgYXQgaW52YWxpZCBVVEYtMTYgY29kZSB1bml0IGJvdW5kYXJ5XCIpKTtpZih0aGlzLmJ1bXAoKSx0aGlzLmlzRU9GKCkpYnJlYWt9fSxlLnByb3RvdHlwZS5idW1wU3BhY2U9ZnVuY3Rpb24oKXtmb3IoOyF0aGlzLmlzRU9GKCkmJm5lKHRoaXMuY2hhcigpKTspdGhpcy5idW1wKCl9LGUucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oKXtpZih0aGlzLmlzRU9GKCkpcmV0dXJuIG51bGw7dmFyIGU9dGhpcy5jaGFyKCksdD10aGlzLm9mZnNldCgpLG49dGhpcy5tZXNzYWdlLmNoYXJDb2RlQXQodCsoZT49NjU1MzY/MjoxKSk7cmV0dXJuIG51bGwhPW4/bjpudWxsfSxlfSgpO2Z1bmN0aW9uIHRlKGUpe3JldHVybiBlPj05NyYmZTw9MTIyfHxlPj02NSYmZTw9OTB9ZnVuY3Rpb24gbmUoZSl7cmV0dXJuIGU+PTkmJmU8PTEzfHwzMj09PWV8fDEzMz09PWV8fGU+PTgyMDYmJmU8PTgyMDd8fDgyMzI9PT1lfHw4MjMzPT09ZX1mdW5jdGlvbiByZShlKXtyZXR1cm4gZT49MzMmJmU8PTM1fHwzNj09PWV8fGU+PTM3JiZlPD0zOXx8NDA9PT1lfHw0MT09PWV8fDQyPT09ZXx8NDM9PT1lfHw0ND09PWV8fDQ1PT09ZXx8ZT49NDYmJmU8PTQ3fHxlPj01OCYmZTw9NTl8fGU+PTYwJiZlPD02Mnx8ZT49NjMmJmU8PTY0fHw5MT09PWV8fDkyPT09ZXx8OTM9PT1lfHw5ND09PWV8fDk2PT09ZXx8MTIzPT09ZXx8MTI0PT09ZXx8MTI1PT09ZXx8MTI2PT09ZXx8MTYxPT09ZXx8ZT49MTYyJiZlPD0xNjV8fDE2Nj09PWV8fDE2Nz09PWV8fDE2OT09PWV8fDE3MT09PWV8fDE3Mj09PWV8fDE3ND09PWV8fDE3Nj09PWV8fDE3Nz09PWV8fDE4Mj09PWV8fDE4Nz09PWV8fDE5MT09PWV8fDIxNT09PWV8fDI0Nz09PWV8fGU+PTgyMDgmJmU8PTgyMTN8fGU+PTgyMTQmJmU8PTgyMTV8fDgyMTY9PT1lfHw4MjE3PT09ZXx8ODIxOD09PWV8fGU+PTgyMTkmJmU8PTgyMjB8fDgyMjE9PT1lfHw4MjIyPT09ZXx8ODIyMz09PWV8fGU+PTgyMjQmJmU8PTgyMzF8fGU+PTgyNDAmJmU8PTgyNDh8fDgyNDk9PT1lfHw4MjUwPT09ZXx8ZT49ODI1MSYmZTw9ODI1NHx8ZT49ODI1NyYmZTw9ODI1OXx8ODI2MD09PWV8fDgyNjE9PT1lfHw4MjYyPT09ZXx8ZT49ODI2MyYmZTw9ODI3M3x8ODI3ND09PWV8fDgyNzU9PT1lfHxlPj04Mjc3JiZlPD04Mjg2fHxlPj04NTkyJiZlPD04NTk2fHxlPj04NTk3JiZlPD04NjAxfHxlPj04NjAyJiZlPD04NjAzfHxlPj04NjA0JiZlPD04NjA3fHw4NjA4PT09ZXx8ZT49ODYwOSYmZTw9ODYxMHx8ODYxMT09PWV8fGU+PTg2MTImJmU8PTg2MTN8fDg2MTQ9PT1lfHxlPj04NjE1JiZlPD04NjIxfHw4NjIyPT09ZXx8ZT49ODYyMyYmZTw9ODY1M3x8ZT49ODY1NCYmZTw9ODY1NXx8ZT49ODY1NiYmZTw9ODY1N3x8ODY1OD09PWV8fDg2NTk9PT1lfHw4NjYwPT09ZXx8ZT49ODY2MSYmZTw9ODY5MXx8ZT49ODY5MiYmZTw9ODk1OXx8ZT49ODk2MCYmZTw9ODk2N3x8ODk2OD09PWV8fDg5Njk9PT1lfHw4OTcwPT09ZXx8ODk3MT09PWV8fGU+PTg5NzImJmU8PTg5OTF8fGU+PTg5OTImJmU8PTg5OTN8fGU+PTg5OTQmJmU8PTllM3x8OTAwMT09PWV8fDkwMDI9PT1lfHxlPj05MDAzJiZlPD05MDgzfHw5MDg0PT09ZXx8ZT49OTA4NSYmZTw9OTExNHx8ZT49OTExNSYmZTw9OTEzOXx8ZT49OTE0MCYmZTw9OTE3OXx8ZT49OTE4MCYmZTw9OTE4NXx8ZT49OTE4NiYmZTw9OTI1NHx8ZT49OTI1NSYmZTw9OTI3OXx8ZT49OTI4MCYmZTw9OTI5MHx8ZT49OTI5MSYmZTw9OTMxMXx8ZT49OTQ3MiYmZTw9OTY1NHx8OTY1NT09PWV8fGU+PTk2NTYmJmU8PTk2NjR8fDk2NjU9PT1lfHxlPj05NjY2JiZlPD05NzE5fHxlPj05NzIwJiZlPD05NzI3fHxlPj05NzI4JiZlPD05ODM4fHw5ODM5PT09ZXx8ZT49OTg0MCYmZTw9MTAwODd8fDEwMDg4PT09ZXx8MTAwODk9PT1lfHwxMDA5MD09PWV8fDEwMDkxPT09ZXx8MTAwOTI9PT1lfHwxMDA5Mz09PWV8fDEwMDk0PT09ZXx8MTAwOTU9PT1lfHwxMDA5Nj09PWV8fDEwMDk3PT09ZXx8MTAwOTg9PT1lfHwxMDA5OT09PWV8fDEwMTAwPT09ZXx8MTAxMDE9PT1lfHxlPj0xMDEzMiYmZTw9MTAxNzV8fGU+PTEwMTc2JiZlPD0xMDE4MHx8MTAxODE9PT1lfHwxMDE4Mj09PWV8fGU+PTEwMTgzJiZlPD0xMDIxM3x8MTAyMTQ9PT1lfHwxMDIxNT09PWV8fDEwMjE2PT09ZXx8MTAyMTc9PT1lfHwxMDIxOD09PWV8fDEwMjE5PT09ZXx8MTAyMjA9PT1lfHwxMDIyMT09PWV8fDEwMjIyPT09ZXx8MTAyMjM9PT1lfHxlPj0xMDIyNCYmZTw9MTAyMzl8fGU+PTEwMjQwJiZlPD0xMDQ5NXx8ZT49MTA0OTYmJmU8PTEwNjI2fHwxMDYyNz09PWV8fDEwNjI4PT09ZXx8MTA2Mjk9PT1lfHwxMDYzMD09PWV8fDEwNjMxPT09ZXx8MTA2MzI9PT1lfHwxMDYzMz09PWV8fDEwNjM0PT09ZXx8MTA2MzU9PT1lfHwxMDYzNj09PWV8fDEwNjM3PT09ZXx8MTA2Mzg9PT1lfHwxMDYzOT09PWV8fDEwNjQwPT09ZXx8MTA2NDE9PT1lfHwxMDY0Mj09PWV8fDEwNjQzPT09ZXx8MTA2NDQ9PT1lfHwxMDY0NT09PWV8fDEwNjQ2PT09ZXx8MTA2NDc9PT1lfHwxMDY0OD09PWV8fGU+PTEwNjQ5JiZlPD0xMDcxMXx8MTA3MTI9PT1lfHwxMDcxMz09PWV8fDEwNzE0PT09ZXx8MTA3MTU9PT1lfHxlPj0xMDcxNiYmZTw9MTA3NDd8fDEwNzQ4PT09ZXx8MTA3NDk9PT1lfHxlPj0xMDc1MCYmZTw9MTEwMDd8fGU+PTExMDA4JiZlPD0xMTA1NXx8ZT49MTEwNTYmJmU8PTExMDc2fHxlPj0xMTA3NyYmZTw9MTEwNzh8fGU+PTExMDc5JiZlPD0xMTA4NHx8ZT49MTEwODUmJmU8PTExMTIzfHxlPj0xMTEyNCYmZTw9MTExMjV8fGU+PTExMTI2JiZlPD0xMTE1N3x8MTExNTg9PT1lfHxlPj0xMTE1OSYmZTw9MTEyNjN8fGU+PTExNzc2JiZlPD0xMTc3N3x8MTE3Nzg9PT1lfHwxMTc3OT09PWV8fDExNzgwPT09ZXx8MTE3ODE9PT1lfHxlPj0xMTc4MiYmZTw9MTE3ODR8fDExNzg1PT09ZXx8MTE3ODY9PT1lfHwxMTc4Nz09PWV8fDExNzg4PT09ZXx8MTE3ODk9PT1lfHxlPj0xMTc5MCYmZTw9MTE3OTh8fDExNzk5PT09ZXx8ZT49MTE4MDAmJmU8PTExODAxfHwxMTgwMj09PWV8fDExODAzPT09ZXx8MTE4MDQ9PT1lfHwxMTgwNT09PWV8fGU+PTExODA2JiZlPD0xMTgwN3x8MTE4MDg9PT1lfHwxMTgwOT09PWV8fDExODEwPT09ZXx8MTE4MTE9PT1lfHwxMTgxMj09PWV8fDExODEzPT09ZXx8MTE4MTQ9PT1lfHwxMTgxNT09PWV8fDExODE2PT09ZXx8MTE4MTc9PT1lfHxlPj0xMTgxOCYmZTw9MTE4MjJ8fDExODIzPT09ZXx8ZT49MTE4MjQmJmU8PTExODMzfHxlPj0xMTgzNCYmZTw9MTE4MzV8fGU+PTExODM2JiZlPD0xMTgzOXx8MTE4NDA9PT1lfHwxMTg0MT09PWV8fDExODQyPT09ZXx8ZT49MTE4NDMmJmU8PTExODU1fHxlPj0xMTg1NiYmZTw9MTE4NTd8fDExODU4PT09ZXx8ZT49MTE4NTkmJmU8PTExOTAzfHxlPj0xMjI4OSYmZTw9MTIyOTF8fDEyMjk2PT09ZXx8MTIyOTc9PT1lfHwxMjI5OD09PWV8fDEyMjk5PT09ZXx8MTIzMDA9PT1lfHwxMjMwMT09PWV8fDEyMzAyPT09ZXx8MTIzMDM9PT1lfHwxMjMwND09PWV8fDEyMzA1PT09ZXx8ZT49MTIzMDYmJmU8PTEyMzA3fHwxMjMwOD09PWV8fDEyMzA5PT09ZXx8MTIzMTA9PT1lfHwxMjMxMT09PWV8fDEyMzEyPT09ZXx8MTIzMTM9PT1lfHwxMjMxND09PWV8fDEyMzE1PT09ZXx8MTIzMTY9PT1lfHwxMjMxNz09PWV8fGU+PTEyMzE4JiZlPD0xMjMxOXx8MTIzMjA9PT1lfHwxMjMzNj09PWV8fDY0ODMwPT09ZXx8NjQ4MzE9PT1lfHxlPj02NTA5MyYmZTw9NjUwOTR9ZnVuY3Rpb24gaWUoZSl7ZS5mb3JFYWNoKChmdW5jdGlvbihlKXtpZihkZWxldGUgZS5sb2NhdGlvbixmKGUpfHxwKGUpKWZvcih2YXIgdCBpbiBlLm9wdGlvbnMpZGVsZXRlIGUub3B0aW9uc1t0XS5sb2NhdGlvbixpZShlLm9wdGlvbnNbdF0udmFsdWUpO2Vsc2UgbChlKSYmdihlLnN0eWxlKXx8KHUoZSl8fGQoZSkpJiZnKGUuc3R5bGUpP2RlbGV0ZSBlLnN0eWxlLmxvY2F0aW9uOmgoZSkmJmllKGUuY2hpbGRyZW4pfSkpfWZ1bmN0aW9uIG9lKGUsdCl7dm9pZCAwPT09dCYmKHQ9e30pLHQ9KDAsYS5fX2Fzc2lnbikoe3Nob3VsZFBhcnNlU2tlbGV0b25zOiEwLHJlcXVpcmVzT3RoZXJDbGF1c2U6ITB9LHQpO3ZhciBuPW5ldyBlZShlLHQpLnBhcnNlKCk7aWYobi5lcnIpe3ZhciBpPVN5bnRheEVycm9yKHJbbi5lcnIua2luZF0pO3Rocm93IGkubG9jYXRpb249bi5lcnIubG9jYXRpb24saS5vcmlnaW5hbE1lc3NhZ2U9bi5lcnIubWVzc2FnZSxpfXJldHVybihudWxsPT10P3ZvaWQgMDp0LmNhcHR1cmVMb2NhdGlvbil8fGllKG4udmFsKSxuLnZhbH19LDY1MDEwOihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5zaG91bGRQb2x5ZmlsbD12b2lkIDAsdC5zaG91bGRQb2x5ZmlsbD1mdW5jdGlvbigpe3JldHVyblwidW5kZWZpbmVkXCI9PXR5cGVvZiBJbnRsfHwhKFwiZ2V0Q2Fub25pY2FsTG9jYWxlc1wiaW4gSW50bCl8fFwieC1wcml2YXRlXCI9PT1JbnRsLmdldENhbm9uaWNhbExvY2FsZXMoXCJ1bmQteC1wcml2YXRlXCIpWzBdfX0sOTY0MjM6KGUsdCxuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuc2hvdWxkUG9seWZpbGw9dm9pZCAwO3ZhciByPW4oOTgzKSxpPW4oODcxMTQpO3Quc2hvdWxkUG9seWZpbGw9ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSYmKGU9XCJlblwiKSwhKFwiTGlzdEZvcm1hdFwiaW4gSW50bCl8fCFmdW5jdGlvbihlKXtpZighZSlyZXR1cm4hMDt2YXIgdD1BcnJheS5pc0FycmF5KGUpP2U6W2VdO3JldHVybiBJbnRsLkxpc3RGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKHQpLmxlbmd0aD09PXQubGVuZ3RofShlKSlyZXR1cm4gZT8oMCxyLm1hdGNoKShbZV0saS5zdXBwb3J0ZWRMb2NhbGVzLFwiZW5cIik6dm9pZCAwfX0sODcxMTQ6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnN1cHBvcnRlZExvY2FsZXM9dm9pZCAwLHQuc3VwcG9ydGVkTG9jYWxlcz1bXCJhZlwiLFwiYWYtTkFcIixcImFncVwiLFwiYWtcIixcImFtXCIsXCJhclwiLFwiYXItQUVcIixcImFyLUJIXCIsXCJhci1ESlwiLFwiYXItRFpcIixcImFyLUVHXCIsXCJhci1FSFwiLFwiYXItRVJcIixcImFyLUlMXCIsXCJhci1JUVwiLFwiYXItSk9cIixcImFyLUtNXCIsXCJhci1LV1wiLFwiYXItTEJcIixcImFyLUxZXCIsXCJhci1NQVwiLFwiYXItTVJcIixcImFyLU9NXCIsXCJhci1QU1wiLFwiYXItUUFcIixcImFyLVNBXCIsXCJhci1TRFwiLFwiYXItU09cIixcImFyLVNTXCIsXCJhci1TWVwiLFwiYXItVERcIixcImFyLVROXCIsXCJhci1ZRVwiLFwiYXNcIixcImFzYVwiLFwiYXN0XCIsXCJhelwiLFwiYXotQ3lybFwiLFwiYXotTGF0blwiLFwiYmFzXCIsXCJiZVwiLFwiYmUtdGFyYXNrXCIsXCJiZW1cIixcImJlelwiLFwiYmdcIixcImJtXCIsXCJiblwiLFwiYm4tSU5cIixcImJvXCIsXCJiby1JTlwiLFwiYnJcIixcImJyeFwiLFwiYnNcIixcImJzLUN5cmxcIixcImJzLUxhdG5cIixcImNhXCIsXCJjYS1BRFwiLFwiY2EtRVMtdmFsZW5jaWFcIixcImNhLUZSXCIsXCJjYS1JVFwiLFwiY2NwXCIsXCJjY3AtSU5cIixcImNlXCIsXCJjZWJcIixcImNnZ1wiLFwiY2hyXCIsXCJja2JcIixcImNrYi1JUlwiLFwiY3NcIixcImN5XCIsXCJkYVwiLFwiZGEtR0xcIixcImRhdlwiLFwiZGVcIixcImRlLUFUXCIsXCJkZS1CRVwiLFwiZGUtQ0hcIixcImRlLUlUXCIsXCJkZS1MSVwiLFwiZGUtTFVcIixcImRqZVwiLFwiZG9pXCIsXCJkc2JcIixcImR1YVwiLFwiZHlvXCIsXCJkelwiLFwiZWJ1XCIsXCJlZVwiLFwiZWUtVEdcIixcImVsXCIsXCJlbC1DWVwiLFwiZW5cIixcImVuLTAwMVwiLFwiZW4tMTUwXCIsXCJlbi1BRVwiLFwiZW4tQUdcIixcImVuLUFJXCIsXCJlbi1BU1wiLFwiZW4tQVRcIixcImVuLUFVXCIsXCJlbi1CQlwiLFwiZW4tQkVcIixcImVuLUJJXCIsXCJlbi1CTVwiLFwiZW4tQlNcIixcImVuLUJXXCIsXCJlbi1CWlwiLFwiZW4tQ0FcIixcImVuLUNDXCIsXCJlbi1DSFwiLFwiZW4tQ0tcIixcImVuLUNNXCIsXCJlbi1DWFwiLFwiZW4tQ1lcIixcImVuLURFXCIsXCJlbi1ER1wiLFwiZW4tREtcIixcImVuLURNXCIsXCJlbi1FUlwiLFwiZW4tRklcIixcImVuLUZKXCIsXCJlbi1GS1wiLFwiZW4tRk1cIixcImVuLUdCXCIsXCJlbi1HRFwiLFwiZW4tR0dcIixcImVuLUdIXCIsXCJlbi1HSVwiLFwiZW4tR01cIixcImVuLUdVXCIsXCJlbi1HWVwiLFwiZW4tSEtcIixcImVuLUlFXCIsXCJlbi1JTFwiLFwiZW4tSU1cIixcImVuLUlOXCIsXCJlbi1JT1wiLFwiZW4tSkVcIixcImVuLUpNXCIsXCJlbi1LRVwiLFwiZW4tS0lcIixcImVuLUtOXCIsXCJlbi1LWVwiLFwiZW4tTENcIixcImVuLUxSXCIsXCJlbi1MU1wiLFwiZW4tTUdcIixcImVuLU1IXCIsXCJlbi1NT1wiLFwiZW4tTVBcIixcImVuLU1TXCIsXCJlbi1NVFwiLFwiZW4tTVVcIixcImVuLU1XXCIsXCJlbi1NWVwiLFwiZW4tTkFcIixcImVuLU5GXCIsXCJlbi1OR1wiLFwiZW4tTkxcIixcImVuLU5SXCIsXCJlbi1OVVwiLFwiZW4tTlpcIixcImVuLVBHXCIsXCJlbi1QSFwiLFwiZW4tUEtcIixcImVuLVBOXCIsXCJlbi1QUlwiLFwiZW4tUFdcIixcImVuLVJXXCIsXCJlbi1TQlwiLFwiZW4tU0NcIixcImVuLVNEXCIsXCJlbi1TRVwiLFwiZW4tU0dcIixcImVuLVNIXCIsXCJlbi1TSVwiLFwiZW4tU0xcIixcImVuLVNTXCIsXCJlbi1TWFwiLFwiZW4tU1pcIixcImVuLVRDXCIsXCJlbi1US1wiLFwiZW4tVE9cIixcImVuLVRUXCIsXCJlbi1UVlwiLFwiZW4tVFpcIixcImVuLVVHXCIsXCJlbi1VTVwiLFwiZW4tVkNcIixcImVuLVZHXCIsXCJlbi1WSVwiLFwiZW4tVlVcIixcImVuLVdTXCIsXCJlbi1aQVwiLFwiZW4tWk1cIixcImVuLVpXXCIsXCJlb1wiLFwiZXNcIixcImVzLTQxOVwiLFwiZXMtQVJcIixcImVzLUJPXCIsXCJlcy1CUlwiLFwiZXMtQlpcIixcImVzLUNMXCIsXCJlcy1DT1wiLFwiZXMtQ1JcIixcImVzLUNVXCIsXCJlcy1ET1wiLFwiZXMtRUFcIixcImVzLUVDXCIsXCJlcy1HUVwiLFwiZXMtR1RcIixcImVzLUhOXCIsXCJlcy1JQ1wiLFwiZXMtTVhcIixcImVzLU5JXCIsXCJlcy1QQVwiLFwiZXMtUEVcIixcImVzLVBIXCIsXCJlcy1QUlwiLFwiZXMtUFlcIixcImVzLVNWXCIsXCJlcy1VU1wiLFwiZXMtVVlcIixcImVzLVZFXCIsXCJldFwiLFwiZXVcIixcImV3b1wiLFwiZmFcIixcImZhLUFGXCIsXCJmZlwiLFwiZmYtQWRsbVwiLFwiZmYtQWRsbS1CRlwiLFwiZmYtQWRsbS1DTVwiLFwiZmYtQWRsbS1HSFwiLFwiZmYtQWRsbS1HTVwiLFwiZmYtQWRsbS1HV1wiLFwiZmYtQWRsbS1MUlwiLFwiZmYtQWRsbS1NUlwiLFwiZmYtQWRsbS1ORVwiLFwiZmYtQWRsbS1OR1wiLFwiZmYtQWRsbS1TTFwiLFwiZmYtQWRsbS1TTlwiLFwiZmYtTGF0blwiLFwiZmYtTGF0bi1CRlwiLFwiZmYtTGF0bi1DTVwiLFwiZmYtTGF0bi1HSFwiLFwiZmYtTGF0bi1HTVwiLFwiZmYtTGF0bi1HTlwiLFwiZmYtTGF0bi1HV1wiLFwiZmYtTGF0bi1MUlwiLFwiZmYtTGF0bi1NUlwiLFwiZmYtTGF0bi1ORVwiLFwiZmYtTGF0bi1OR1wiLFwiZmYtTGF0bi1TTFwiLFwiZmlcIixcImZpbFwiLFwiZm9cIixcImZvLURLXCIsXCJmclwiLFwiZnItQkVcIixcImZyLUJGXCIsXCJmci1CSVwiLFwiZnItQkpcIixcImZyLUJMXCIsXCJmci1DQVwiLFwiZnItQ0RcIixcImZyLUNGXCIsXCJmci1DR1wiLFwiZnItQ0hcIixcImZyLUNJXCIsXCJmci1DTVwiLFwiZnItREpcIixcImZyLURaXCIsXCJmci1HQVwiLFwiZnItR0ZcIixcImZyLUdOXCIsXCJmci1HUFwiLFwiZnItR1FcIixcImZyLUhUXCIsXCJmci1LTVwiLFwiZnItTFVcIixcImZyLU1BXCIsXCJmci1NQ1wiLFwiZnItTUZcIixcImZyLU1HXCIsXCJmci1NTFwiLFwiZnItTVFcIixcImZyLU1SXCIsXCJmci1NVVwiLFwiZnItTkNcIixcImZyLU5FXCIsXCJmci1QRlwiLFwiZnItUE1cIixcImZyLVJFXCIsXCJmci1SV1wiLFwiZnItU0NcIixcImZyLVNOXCIsXCJmci1TWVwiLFwiZnItVERcIixcImZyLVRHXCIsXCJmci1UTlwiLFwiZnItVlVcIixcImZyLVdGXCIsXCJmci1ZVFwiLFwiZnVyXCIsXCJmeVwiLFwiZ2FcIixcImdhLUdCXCIsXCJnZFwiLFwiZ2xcIixcImdzd1wiLFwiZ3N3LUZSXCIsXCJnc3ctTElcIixcImd1XCIsXCJndXpcIixcImd2XCIsXCJoYVwiLFwiaGEtR0hcIixcImhhLU5FXCIsXCJoYXdcIixcImhlXCIsXCJoaVwiLFwiaHJcIixcImhyLUJBXCIsXCJoc2JcIixcImh1XCIsXCJoeVwiLFwiaWFcIixcImlkXCIsXCJpZ1wiLFwiaWlcIixcImlzXCIsXCJpdFwiLFwiaXQtQ0hcIixcIml0LVNNXCIsXCJpdC1WQVwiLFwiamFcIixcImpnb1wiLFwiam1jXCIsXCJqdlwiLFwia2FcIixcImthYlwiLFwia2FtXCIsXCJrZGVcIixcImtlYVwiLFwia2dwXCIsXCJraHFcIixcImtpXCIsXCJra1wiLFwia2tqXCIsXCJrbFwiLFwia2xuXCIsXCJrbVwiLFwia25cIixcImtvXCIsXCJrby1LUFwiLFwia29rXCIsXCJrc1wiLFwia3MtQXJhYlwiLFwia3NiXCIsXCJrc2ZcIixcImtzaFwiLFwia3VcIixcImt3XCIsXCJreVwiLFwibGFnXCIsXCJsYlwiLFwibGdcIixcImxrdFwiLFwibG5cIixcImxuLUFPXCIsXCJsbi1DRlwiLFwibG4tQ0dcIixcImxvXCIsXCJscmNcIixcImxyYy1JUVwiLFwibHRcIixcImx1XCIsXCJsdW9cIixcImx1eVwiLFwibHZcIixcIm1haVwiLFwibWFzXCIsXCJtYXMtVFpcIixcIm1lclwiLFwibWZlXCIsXCJtZ1wiLFwibWdoXCIsXCJtZ29cIixcIm1pXCIsXCJta1wiLFwibWxcIixcIm1uXCIsXCJtbmlcIixcIm1uaS1CZW5nXCIsXCJtclwiLFwibXNcIixcIm1zLUJOXCIsXCJtcy1JRFwiLFwibXMtU0dcIixcIm10XCIsXCJtdWFcIixcIm15XCIsXCJtem5cIixcIm5hcVwiLFwibmJcIixcIm5iLVNKXCIsXCJuZFwiLFwibmRzXCIsXCJuZHMtTkxcIixcIm5lXCIsXCJuZS1JTlwiLFwibmxcIixcIm5sLUFXXCIsXCJubC1CRVwiLFwibmwtQlFcIixcIm5sLUNXXCIsXCJubC1TUlwiLFwibmwtU1hcIixcIm5tZ1wiLFwibm5cIixcIm5uaFwiLFwibm9cIixcIm51c1wiLFwibnluXCIsXCJvbVwiLFwib20tS0VcIixcIm9yXCIsXCJvc1wiLFwib3MtUlVcIixcInBhXCIsXCJwYS1BcmFiXCIsXCJwYS1HdXJ1XCIsXCJwY21cIixcInBsXCIsXCJwc1wiLFwicHMtUEtcIixcInB0XCIsXCJwdC1BT1wiLFwicHQtQ0hcIixcInB0LUNWXCIsXCJwdC1HUVwiLFwicHQtR1dcIixcInB0LUxVXCIsXCJwdC1NT1wiLFwicHQtTVpcIixcInB0LVBUXCIsXCJwdC1TVFwiLFwicHQtVExcIixcInF1XCIsXCJxdS1CT1wiLFwicXUtRUNcIixcInJtXCIsXCJyblwiLFwicm9cIixcInJvLU1EXCIsXCJyb2ZcIixcInJ1XCIsXCJydS1CWVwiLFwicnUtS0dcIixcInJ1LUtaXCIsXCJydS1NRFwiLFwicnUtVUFcIixcInJ3XCIsXCJyd2tcIixcInNhXCIsXCJzYWhcIixcInNhcVwiLFwic2F0XCIsXCJzYXQtT2xja1wiLFwic2JwXCIsXCJzY1wiLFwic2RcIixcInNkLUFyYWJcIixcInNkLURldmFcIixcInNlXCIsXCJzZS1GSVwiLFwic2UtU0VcIixcInNlaFwiLFwic2VzXCIsXCJzZ1wiLFwic2hpXCIsXCJzaGktTGF0blwiLFwic2hpLVRmbmdcIixcInNpXCIsXCJza1wiLFwic2xcIixcInNtblwiLFwic25cIixcInNvXCIsXCJzby1ESlwiLFwic28tRVRcIixcInNvLUtFXCIsXCJzcVwiLFwic3EtTUtcIixcInNxLVhLXCIsXCJzclwiLFwic3ItQ3lybFwiLFwic3ItQ3lybC1CQVwiLFwic3ItQ3lybC1NRVwiLFwic3ItQ3lybC1YS1wiLFwic3ItTGF0blwiLFwic3ItTGF0bi1CQVwiLFwic3ItTGF0bi1NRVwiLFwic3ItTGF0bi1YS1wiLFwic3VcIixcInN1LUxhdG5cIixcInN2XCIsXCJzdi1BWFwiLFwic3YtRklcIixcInN3XCIsXCJzdy1DRFwiLFwic3ctS0VcIixcInN3LVVHXCIsXCJ0YVwiLFwidGEtTEtcIixcInRhLU1ZXCIsXCJ0YS1TR1wiLFwidGVcIixcInRlb1wiLFwidGVvLUtFXCIsXCJ0Z1wiLFwidGhcIixcInRpXCIsXCJ0aS1FUlwiLFwidGtcIixcInRvXCIsXCJ0clwiLFwidHItQ1lcIixcInR0XCIsXCJ0d3FcIixcInR6bVwiLFwidWdcIixcInVrXCIsXCJ1bmRcIixcInVyXCIsXCJ1ci1JTlwiLFwidXpcIixcInV6LUFyYWJcIixcInV6LUN5cmxcIixcInV6LUxhdG5cIixcInZhaVwiLFwidmFpLUxhdG5cIixcInZhaS1WYWlpXCIsXCJ2aVwiLFwidnVuXCIsXCJ3YWVcIixcIndvXCIsXCJ4aFwiLFwieG9nXCIsXCJ5YXZcIixcInlpXCIsXCJ5b1wiLFwieW8tQkpcIixcInlybFwiLFwieXJsLUNPXCIsXCJ5cmwtVkVcIixcInl1ZVwiLFwieXVlLUhhbnNcIixcInl1ZS1IYW50XCIsXCJ6Z2hcIixcInpoXCIsXCJ6aC1IYW5zXCIsXCJ6aC1IYW5zLUhLXCIsXCJ6aC1IYW5zLU1PXCIsXCJ6aC1IYW5zLVNHXCIsXCJ6aC1IYW50XCIsXCJ6aC1IYW50LUhLXCIsXCJ6aC1IYW50LU1PXCIsXCJ6dVwiXX0sOTU5MTY6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnNob3VsZFBvbHlmaWxsPXZvaWQgMCx0LnNob3VsZFBvbHlmaWxsPWZ1bmN0aW9uKCl7cmV0dXJuIShcIkxvY2FsZVwiaW4gSW50bCl8fGZ1bmN0aW9uKCl7dHJ5e3JldHVyblwieC1wcml2YXRlXCI9PT1uZXcgSW50bC5Mb2NhbGUoXCJ1bmQteC1wcml2YXRlXCIpLnRvU3RyaW5nKCl9Y2F0Y2goZSl7cmV0dXJuITB9fSgpfX0sMzgwMzA6KGUsdCxuKT0+e2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49dDs7KXtpZihlLmhhcyhuKSlyZXR1cm4gbjt2YXIgcj1uLmxhc3RJbmRleE9mKFwiLVwiKTtpZighfnIpcmV0dXJuO3I+PTImJlwiLVwiPT09bltyLTJdJiYoci09Miksbj1uLnNsaWNlKDAscil9fW4uZCh0LHt0OigpPT5yfSl9LDcyNzU6KGUsdCxuKT0+e24uZCh0LHtUOigpPT5vfSk7dmFyIHI9bigyMDYxMCksaT1uKDM4MDMwKTtmdW5jdGlvbiBvKGUsdCl7Zm9yKHZhciBuPVtdLG89MCxhPXQ7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb10ucmVwbGFjZShyLnAsXCJcIiksYz0oMCxpLnQpKGUscyk7YyYmbi5wdXNoKGMpfXJldHVybiBufX0sMzM2MjooZSx0LG4pPT57bi5kKHQse2Y6KCk9PmF9KTt2YXIgcj1uKDIwNjEwKSxpPW4oMzgwMzApO2Z1bmN0aW9uIG8oZSx0KXsoMCxyLmspKDI9PT10Lmxlbmd0aCxcImtleSBtdXN0IGhhdmUgMiBlbGVtZW50c1wiKTt2YXIgbj1lLmxlbmd0aCxpPVwiLVwiLmNvbmNhdCh0LFwiLVwiKSxvPWUuaW5kZXhPZihpKTtpZigtMSE9PW8pe2Zvcih2YXIgYT1vKzQscz1hLGM9YSxsPSExOyFsOyl7dmFyIHU9ZS5pbmRleE9mKFwiLVwiLGMpOzI9PSgtMT09PXU/bi1jOnUtYyk/bD0hMDotMT09PXU/KHM9bixsPSEwKToocz11LGM9dSsxKX1yZXR1cm4gZS5zbGljZShhLHMpfWlmKGk9XCItXCIuY29uY2F0KHQpLC0xIT09KG89ZS5pbmRleE9mKGkpKSYmbyszPT09bilyZXR1cm5cIlwifWZ1bmN0aW9uIGEoZSx0LG4sYSxzLGMpe3ZhciBsO2w9XCJsb29rdXBcIj09PW4ubG9jYWxlTWF0Y2hlcj9mdW5jdGlvbihlLHQsbil7Zm9yKHZhciBvPXtsb2NhbGU6XCJcIn0sYT0wLHM9dDthPHMubGVuZ3RoO2ErKyl7dmFyIGM9c1thXSxsPWMucmVwbGFjZShyLnAsXCJcIiksdT0oMCxpLnQpKGUsbCk7aWYodSlyZXR1cm4gby5sb2NhbGU9dSxjIT09bCYmKG8uZXh0ZW5zaW9uPWMuc2xpY2UobC5sZW5ndGgrMSxjLmxlbmd0aCkpLG99cmV0dXJuIG8ubG9jYWxlPW4oKSxvfShlLHQsYyk6ZnVuY3Rpb24oZSx0LG4pe3ZhciBvLGE9e30scz17fSxjPXt9LGw9bmV3IFNldDtlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBJbnRsLkxvY2FsZShlKS5taW5pbWl6ZSgpLnRvU3RyaW5nKCksbj1JbnRsLmdldENhbm9uaWNhbExvY2FsZXMoZSlbMF18fGU7YVt0XT1lLHNbZV09ZSxjW25dPWUsbC5hZGQodCksbC5hZGQoZSksbC5hZGQobil9KSk7Zm9yKHZhciB1PTAsZD10O3U8ZC5sZW5ndGg7dSsrKXt2YXIgZj1kW3VdO2lmKG8pYnJlYWs7dmFyIHA9Zi5yZXBsYWNlKHIucCxcIlwiKTtpZihlLmhhcyhwKSl7bz1wO2JyZWFrfWlmKGwuaGFzKHApKXtvPXA7YnJlYWt9dmFyIG09bmV3IEludGwuTG9jYWxlKHApLGg9bS5tYXhpbWl6ZSgpLnRvU3RyaW5nKCksdj1tLm1pbmltaXplKCkudG9TdHJpbmcoKTtpZihsLmhhcyh2KSl7bz12O2JyZWFrfW89KDAsaS50KShsLGgpfXJldHVybiBvP3tsb2NhbGU6c1tvXXx8Y1tvXXx8YVtvXXx8b306e2xvY2FsZTpuKCl9fShlLHQsYyk7Zm9yKHZhciB1PWwubG9jYWxlLGQ9e2xvY2FsZTpcIlwiLGRhdGFMb2NhbGU6dX0sZj1cIi11XCIscD0wLG09YTtwPG0ubGVuZ3RoO3ArKyl7dmFyIGg9bVtwXTsoMCxyLmspKHUgaW4gcyxcIk1pc3NpbmcgbG9jYWxlIGRhdGEgZm9yIFwiLmNvbmNhdCh1KSk7dmFyIHY9c1t1XTsoMCxyLmspKFwib2JqZWN0XCI9PXR5cGVvZiB2JiZudWxsIT09dixcImxvY2FsZSBkYXRhIFwiLmNvbmNhdChoLFwiIG11c3QgYmUgYW4gb2JqZWN0XCIpKTt2YXIgZz12W2hdOygwLHIuaykoQXJyYXkuaXNBcnJheShnKSxcImtleUxvY2FsZURhdGEgZm9yIFwiLmNvbmNhdChoLFwiIG11c3QgYmUgYW4gYXJyYXlcIikpO3ZhciB5PWdbMF07KDAsci5rKShcInN0cmluZ1wiPT10eXBlb2YgeXx8bnVsbD09PXksXCJ2YWx1ZSBtdXN0IGJlIHN0cmluZyBvciBudWxsIGJ1dCBnb3QgXCIuY29uY2F0KHR5cGVvZiB5LFwiIGluIGtleSBcIikuY29uY2F0KGgpKTt2YXIgRT1cIlwiO2lmKGwuZXh0ZW5zaW9uKXt2YXIgXz1vKGwuZXh0ZW5zaW9uLGgpO3ZvaWQgMCE9PV8mJihcIlwiIT09Xz9+Zy5pbmRleE9mKF8pJiYoeT1fLEU9XCItXCIuY29uY2F0KGgsXCItXCIpLmNvbmNhdCh5KSk6fl8uaW5kZXhPZihcInRydWVcIikmJih5PVwidHJ1ZVwiLEU9XCItXCIuY29uY2F0KGgpKSl9aWYoaCBpbiBuKXt2YXIgST1uW2hdOygwLHIuaykoXCJzdHJpbmdcIj09dHlwZW9mIEl8fG51bGw9PUksXCJvcHRpb25zVmFsdWUgbXVzdCBiZSBTdHJpbmcsIFVuZGVmaW5lZCBvciBOdWxsXCIpLH5nLmluZGV4T2YoSSkmJkkhPT15JiYoeT1JLEU9XCJcIil9ZFtoXT15LGYrPUV9aWYoZi5sZW5ndGg+Mil7dmFyIFM9dS5pbmRleE9mKFwiLXgtXCIpO2lmKC0xPT09Uyl1Kz1mO2Vsc2V7dmFyIGI9dS5zbGljZSgwLFMpLFQ9dS5zbGljZShTLHUubGVuZ3RoKTt1PWIrZitUfXU9SW50bC5nZXRDYW5vbmljYWxMb2NhbGVzKHUpWzBdfXJldHVybiBkLmxvY2FsZT11LGR9fSwyMDYxMDooZSx0LG4pPT57bi5kKHQse2s6KCk9PmkscDooKT0+cn0pO3ZhciByPS8tdSg/Oi1bMC05YS16XXsyLDh9KSsvZ2k7ZnVuY3Rpb24gaShlLHQsbil7aWYodm9pZCAwPT09biYmKG49RXJyb3IpLCFlKXRocm93IG5ldyBuKHQpfX0sOTgzOihlLHQsbik9PntuLnIodCksbi5kKHQse0xvb2t1cFN1cHBvcnRlZExvY2FsZXM6KCk9PmkuVCxSZXNvbHZlTG9jYWxlOigpPT5yLmYsbWF0Y2g6KCk9Pm99KTt2YXIgcj1uKDMzNjIpLGk9big3Mjc1KTtmdW5jdGlvbiBvKGUsdCxuLGkpe3ZhciBvPXQucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlLmFkZCh0KSxlfSksbmV3IFNldCk7cmV0dXJuKDAsci5mKShvLGZ1bmN0aW9uKGUpe3JldHVybiBJbnRsLmdldENhbm9uaWNhbExvY2FsZXMoZSl9KGUpLHtsb2NhbGVNYXRjaGVyOihudWxsPT1pP3ZvaWQgMDppLmFsZ29yaXRobSl8fFwiYmVzdCBmaXRcIn0sW10se30sKGZ1bmN0aW9uKCl7cmV0dXJuIG59KSkubG9jYWxlfX0sODgyMjI6KGUsdCxuKT0+e24uZCh0LHskNjooKT0+ZCxPVjooKT0+cyxRZTooKT0+bCxYOTooKT0+dSxiYzooKT0+cixnYjooKT0+Yyx3STooKT0+YX0pO3ZhciByLGk9big3MDY1NSk7IWZ1bmN0aW9uKGUpe2UuRk9STUFUX0VSUk9SPVwiRk9STUFUX0VSUk9SXCIsZS5VTlNVUFBPUlRFRF9GT1JNQVRURVI9XCJVTlNVUFBPUlRFRF9GT1JNQVRURVJcIixlLklOVkFMSURfQ09ORklHPVwiSU5WQUxJRF9DT05GSUdcIixlLk1JU1NJTkdfREFUQT1cIk1JU1NJTkdfREFUQVwiLGUuTUlTU0lOR19UUkFOU0xBVElPTj1cIk1JU1NJTkdfVFJBTlNMQVRJT05cIn0ocnx8KHI9e30pKTt2YXIgbz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4scixpKXt2YXIgbz10aGlzLGE9aT9pIGluc3RhbmNlb2YgRXJyb3I/aTpuZXcgRXJyb3IoU3RyaW5nKGkpKTp2b2lkIDA7cmV0dXJuKG89ZS5jYWxsKHRoaXMsXCJbQGZvcm1hdGpzL2ludGwgRXJyb3IgXCIuY29uY2F0KG4sXCJdIFwiKS5jb25jYXQocixcIlxcblwiKS5jb25jYXQoYT9cIlxcblwiLmNvbmNhdChhLm1lc3NhZ2UsXCJcXG5cIikuY29uY2F0KGEuc3RhY2spOlwiXCIpKXx8dGhpcykuY29kZT1uLFwiZnVuY3Rpb25cIj09dHlwZW9mIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShvLHQpLG99cmV0dXJuKDAsaS5fX2V4dGVuZHMpKHQsZSksdH0oRXJyb3IpLGE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LG4pe3JldHVybiBlLmNhbGwodGhpcyxyLlVOU1VQUE9SVEVEX0ZPUk1BVFRFUix0LG4pfHx0aGlzfXJldHVybigwLGkuX19leHRlbmRzKSh0LGUpLHR9KG8pLHM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LG4pe3JldHVybiBlLmNhbGwodGhpcyxyLklOVkFMSURfQ09ORklHLHQsbil8fHRoaXN9cmV0dXJuKDAsaS5fX2V4dGVuZHMpKHQsZSksdH0obyksYz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbil7cmV0dXJuIGUuY2FsbCh0aGlzLHIuTUlTU0lOR19EQVRBLHQsbil8fHRoaXN9cmV0dXJuKDAsaS5fX2V4dGVuZHMpKHQsZSksdH0obyksbD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbixpKXt2YXIgbz1lLmNhbGwodGhpcyxyLkZPUk1BVF9FUlJPUixcIlwiLmNvbmNhdCh0LFwiXFxuTG9jYWxlOiBcIikuY29uY2F0KG4sXCJcXG5cIiksaSl8fHRoaXM7cmV0dXJuIG8ubG9jYWxlPW4sb31yZXR1cm4oMCxpLl9fZXh0ZW5kcykodCxlKSx0fShvKSx1PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuLHIsaSl7dmFyIG89ZS5jYWxsKHRoaXMsXCJcIi5jb25jYXQodCxcIlxcbk1lc3NhZ2VJRDogXCIpLmNvbmNhdChudWxsPT1yP3ZvaWQgMDpyLmlkLFwiXFxuRGVmYXVsdCBNZXNzYWdlOiBcIikuY29uY2F0KG51bGw9PXI/dm9pZCAwOnIuZGVmYXVsdE1lc3NhZ2UsXCJcXG5EZXNjcmlwdGlvbjogXCIpLmNvbmNhdChudWxsPT1yP3ZvaWQgMDpyLmRlc2NyaXB0aW9uLFwiXFxuXCIpLG4saSl8fHRoaXM7cmV0dXJuIG8uZGVzY3JpcHRvcj1yLG8ubG9jYWxlPW4sb31yZXR1cm4oMCxpLl9fZXh0ZW5kcykodCxlKSx0fShsKSxkPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuKXt2YXIgaT1lLmNhbGwodGhpcyxyLk1JU1NJTkdfVFJBTlNMQVRJT04sJ01pc3NpbmcgbWVzc2FnZTogXCInLmNvbmNhdCh0LmlkLCdcIiBmb3IgbG9jYWxlIFwiJykuY29uY2F0KG4sJ1wiLCB1c2luZyAnKS5jb25jYXQodC5kZWZhdWx0TWVzc2FnZT9cImRlZmF1bHQgbWVzc2FnZSAoXCIuY29uY2F0KFwic3RyaW5nXCI9PXR5cGVvZiB0LmRlZmF1bHRNZXNzYWdlP3QuZGVmYXVsdE1lc3NhZ2U6dC5kZWZhdWx0TWVzc2FnZS5tYXAoKGZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiBudWxsIT09KHQ9ZS52YWx1ZSkmJnZvaWQgMCE9PXQ/dDpKU09OLnN0cmluZ2lmeShlKX0pKS5qb2luKCksXCIpXCIpOlwiaWRcIixcIiBhcyBmYWxsYmFjay5cIikpfHx0aGlzO3JldHVybiBpLmRlc2NyaXB0b3I9dCxpfXJldHVybigwLGkuX19leHRlbmRzKSh0LGUpLHR9KG8pfSw4MjY0NDooZSx0LG4pPT57bi5kKHQse0w2OigpPT5zLFNuOigpPT5sLFRCOigpPT5mLFowOigpPT5jLGF4OigpPT5kfSk7dmFyIHI9big3MDY1NSksaT1uKDE2Mjg0KSxvPW4oOTU5NTcpLGE9big4ODIyMik7ZnVuY3Rpb24gcyhlLHQsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPXt9KSx0LnJlZHVjZSgoZnVuY3Rpb24odCxyKXtyZXR1cm4gciBpbiBlP3Rbcl09ZVtyXTpyIGluIG4mJih0W3JdPW5bcl0pLHR9KSx7fSl9dmFyIGM9e2Zvcm1hdHM6e30sbWVzc2FnZXM6e30sdGltZVpvbmU6dm9pZCAwLGRlZmF1bHRMb2NhbGU6XCJlblwiLGRlZmF1bHRGb3JtYXRzOnt9LGZhbGxiYWNrT25FbXB0eVN0cmluZzohMCxvbkVycm9yOmZ1bmN0aW9uKGUpe30sb25XYXJuOmZ1bmN0aW9uKGUpe319O2Z1bmN0aW9uIGwoKXtyZXR1cm57ZGF0ZVRpbWU6e30sbnVtYmVyOnt9LG1lc3NhZ2U6e30scmVsYXRpdmVUaW1lOnt9LHBsdXJhbFJ1bGVzOnt9LGxpc3Q6e30sZGlzcGxheU5hbWVzOnt9fX1mdW5jdGlvbiB1KGUpe3JldHVybntjcmVhdGU6ZnVuY3Rpb24oKXtyZXR1cm57Z2V0OmZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSxzZXQ6ZnVuY3Rpb24odCxuKXtlW3RdPW59fX19fWZ1bmN0aW9uIGQoZSl7dm9pZCAwPT09ZSYmKGU9e2RhdGVUaW1lOnt9LG51bWJlcjp7fSxtZXNzYWdlOnt9LHJlbGF0aXZlVGltZTp7fSxwbHVyYWxSdWxlczp7fSxsaXN0Ont9LGRpc3BsYXlOYW1lczp7fX0pO3ZhciB0PUludGwuUmVsYXRpdmVUaW1lRm9ybWF0LG49SW50bC5MaXN0Rm9ybWF0LGE9SW50bC5EaXNwbGF5TmFtZXMscz0oMCxvLkgpKChmdW5jdGlvbigpe2Zvcih2YXIgZSx0PVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXRbbl09YXJndW1lbnRzW25dO3JldHVybiBuZXcoKGU9SW50bC5EYXRlVGltZUZvcm1hdCkuYmluZC5hcHBseShlLCgwLHIuX19zcHJlYWRBcnJheSkoW3ZvaWQgMF0sdCwhMSkpKX0pLHtjYWNoZTp1KGUuZGF0ZVRpbWUpLHN0cmF0ZWd5Om8uQS52YXJpYWRpY30pLGM9KDAsby5IKSgoZnVuY3Rpb24oKXtmb3IodmFyIGUsdD1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gbmV3KChlPUludGwuTnVtYmVyRm9ybWF0KS5iaW5kLmFwcGx5KGUsKDAsci5fX3NwcmVhZEFycmF5KShbdm9pZCAwXSx0LCExKSkpfSkse2NhY2hlOnUoZS5udW1iZXIpLHN0cmF0ZWd5Om8uQS52YXJpYWRpY30pLGw9KDAsby5IKSgoZnVuY3Rpb24oKXtmb3IodmFyIGUsdD1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gbmV3KChlPUludGwuUGx1cmFsUnVsZXMpLmJpbmQuYXBwbHkoZSwoMCxyLl9fc3ByZWFkQXJyYXkpKFt2b2lkIDBdLHQsITEpKSl9KSx7Y2FjaGU6dShlLnBsdXJhbFJ1bGVzKSxzdHJhdGVneTpvLkEudmFyaWFkaWN9KTtyZXR1cm57Z2V0RGF0ZVRpbWVGb3JtYXQ6cyxnZXROdW1iZXJGb3JtYXQ6YyxnZXRNZXNzYWdlRm9ybWF0OigwLG8uSCkoKGZ1bmN0aW9uKGUsdCxuLG8pe3JldHVybiBuZXcgaS5DKGUsdCxuLCgwLHIuX19hc3NpZ24pKHtmb3JtYXR0ZXJzOntnZXROdW1iZXJGb3JtYXQ6YyxnZXREYXRlVGltZUZvcm1hdDpzLGdldFBsdXJhbFJ1bGVzOmx9fSxvfHx7fSkpfSkse2NhY2hlOnUoZS5tZXNzYWdlKSxzdHJhdGVneTpvLkEudmFyaWFkaWN9KSxnZXRSZWxhdGl2ZVRpbWVGb3JtYXQ6KDAsby5IKSgoZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuXT1hcmd1bWVudHNbbl07cmV0dXJuIG5ldyh0LmJpbmQuYXBwbHkodCwoMCxyLl9fc3ByZWFkQXJyYXkpKFt2b2lkIDBdLGUsITEpKSl9KSx7Y2FjaGU6dShlLnJlbGF0aXZlVGltZSksc3RyYXRlZ3k6by5BLnZhcmlhZGljfSksZ2V0UGx1cmFsUnVsZXM6bCxnZXRMaXN0Rm9ybWF0OigwLG8uSCkoKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdF09YXJndW1lbnRzW3RdO3JldHVybiBuZXcobi5iaW5kLmFwcGx5KG4sKDAsci5fX3NwcmVhZEFycmF5KShbdm9pZCAwXSxlLCExKSkpfSkse2NhY2hlOnUoZS5saXN0KSxzdHJhdGVneTpvLkEudmFyaWFkaWN9KSxnZXREaXNwbGF5TmFtZXM6KDAsby5IKSgoZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07cmV0dXJuIG5ldyhhLmJpbmQuYXBwbHkoYSwoMCxyLl9fc3ByZWFkQXJyYXkpKFt2b2lkIDBdLGUsITEpKSl9KSx7Y2FjaGU6dShlLmRpc3BsYXlOYW1lcyksc3RyYXRlZ3k6by5BLnZhcmlhZGljfSl9fWZ1bmN0aW9uIGYoZSx0LG4scil7dmFyIGksbz1lJiZlW3RdO2lmKG8mJihpPW9bbl0pLGkpcmV0dXJuIGk7cihuZXcgYS53SShcIk5vIFwiLmNvbmNhdCh0LFwiIGZvcm1hdCBuYW1lZDogXCIpLmNvbmNhdChuKSkpfX0sMzMwMzc6ZnVuY3Rpb24oZSl7dmFyIHQsbjtlLmV4cG9ydHM9KHQ9ezQxODpmdW5jdGlvbihlLHQpeyFmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KWVbbl09dFtuXX0odCxmdW5jdGlvbihlKXt2YXIgdD17fTtmdW5jdGlvbiBuKHIpe2lmKHRbcl0pcmV0dXJuIHRbcl0uZXhwb3J0czt2YXIgaT10W3JdPXtpOnIsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtyXS5jYWxsKGkuZXhwb3J0cyxpLGkuZXhwb3J0cyxuKSxpLmw9ITAsaS5leHBvcnRzfXJldHVybiBuLm09ZSxuLmM9dCxuLmk9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LG4uZD1mdW5jdGlvbihlLHQscil7bi5vKGUsdCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDpyfSl9LG4ubj1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gZS5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBlfTtyZXR1cm4gbi5kKHQsXCJhXCIsdCksdH0sbi5vPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfSxuLnA9XCJcIixuKG4ucz0xKX0oW2Z1bmN0aW9uKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgcj1uKDMpLGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dm9pZCAwPT09ZSYmKGU9e30pLHZvaWQgMD09PXQmJih0PXtzcGxpdFZhbHVlczohMX0pO3ZhciBuLGk9dGhpczt0aGlzLmhlYWRlcnNNYXA9e30sZSYmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBIZWFkZXJzJiZlIGluc3RhbmNlb2YgSGVhZGVycz9yLmdldEhlYWRlcktleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24obil7ci5nZXRIZWFkZXJWYWx1ZXMoZSxuKS5mb3JFYWNoKChmdW5jdGlvbihlKXt0LnNwbGl0VmFsdWVzP2kuYXBwZW5kKG4sci5zcGxpdEhlYWRlclZhbHVlKGUpKTppLmFwcGVuZChuLGUpfSkpfSkpOlwib2JqZWN0XCI9PXR5cGVvZihuPWUpJiZcIm9iamVjdFwiPT10eXBlb2Ygbi5oZWFkZXJzTWFwJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLmZvckVhY2g/ZS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2kuYXBwZW5kKGUsdCl9KSk6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIE1hcCYmZSBpbnN0YW5jZW9mIE1hcD9lLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7aS5hcHBlbmQodCxlKX0pKTpcInN0cmluZ1wiPT10eXBlb2YgZT90aGlzLmFwcGVuZEZyb21TdHJpbmcoZSk6XCJvYmplY3RcIj09dHlwZW9mIGUmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPWVbdF07QXJyYXkuaXNBcnJheShuKT9uLmZvckVhY2goKGZ1bmN0aW9uKGUpe2kuYXBwZW5kKHQsZSl9KSk6aS5hcHBlbmQodCxuKX0pKSl9cmV0dXJuIGUucHJvdG90eXBlLmFwcGVuZEZyb21TdHJpbmc9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUuc3BsaXQoXCJcXHJcXG5cIiksbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dLGk9ci5pbmRleE9mKFwiOlwiKTtpZihpPjApe3ZhciBvPXIuc3Vic3RyaW5nKDAsaSkudHJpbSgpLGE9ci5zdWJzdHJpbmcoaSsxKS50cmltKCk7dGhpcy5hcHBlbmQobyxhKX19fSxlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1yLm5vcm1hbGl6ZU5hbWUoZSk7aWYodm9pZCAwPT09dClkZWxldGUgdGhpcy5oZWFkZXJzTWFwW25dO2Vsc2V7dmFyIGk9dGhpcy5oZWFkZXJzTWFwW25dO2lmKGkpe3ZhciBvPWkuaW5kZXhPZih0KTtvPj0wJiZpLnNwbGljZShvLDEpLDA9PT1pLmxlbmd0aCYmZGVsZXRlIHRoaXMuaGVhZGVyc01hcFtuXX19fSxlLnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLGk9ci5ub3JtYWxpemVOYW1lKGUpO0FycmF5LmlzQXJyYXkodGhpcy5oZWFkZXJzTWFwW2ldKXx8KHRoaXMuaGVhZGVyc01hcFtpXT1bXSksQXJyYXkuaXNBcnJheSh0KT90LmZvckVhY2goKGZ1bmN0aW9uKGUpe24uaGVhZGVyc01hcFtpXS5wdXNoKHIubm9ybWFsaXplVmFsdWUoZSkpfSkpOnRoaXMuaGVhZGVyc01hcFtpXS5wdXNoKHIubm9ybWFsaXplVmFsdWUodCkpfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1yLm5vcm1hbGl6ZU5hbWUoZSk7aWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIGk9W107dC5mb3JFYWNoKChmdW5jdGlvbihlKXtpLnB1c2goci5ub3JtYWxpemVWYWx1ZShlKSl9KSksdGhpcy5oZWFkZXJzTWFwW25dPWl9ZWxzZSB0aGlzLmhlYWRlcnNNYXBbbl09W3Iubm9ybWFsaXplVmFsdWUodCldfSxlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmhlYWRlcnNNYXBbci5ub3JtYWxpemVOYW1lKGUpXTtpZighQXJyYXkuaXNBcnJheShuKSlyZXR1cm4hMTtpZih2b2lkIDAhPT10KXt2YXIgaT1yLm5vcm1hbGl6ZVZhbHVlKHQpO3JldHVybiBuLmluZGV4T2YoaSk+PTB9cmV0dXJuITB9LGUucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmhlYWRlcnNNYXBbci5ub3JtYWxpemVOYW1lKGUpXTtyZXR1cm4gdm9pZCAwIT09dD90LmNvbmNhdCgpOltdfSxlLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy5oZWFkZXJzTWFwKS5mb3JFYWNoKChmdW5jdGlvbihuKXtlKG4sdC5oZWFkZXJzTWFwW25dKX0pLHRoaXMpfSxlLnByb3RvdHlwZS50b0hlYWRlcnM9ZnVuY3Rpb24oKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgSGVhZGVycyl7dmFyIGU9bmV3IEhlYWRlcnM7cmV0dXJuIHRoaXMuZm9yRWFjaCgoZnVuY3Rpb24odCxuKXtuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2UuYXBwZW5kKHQsbil9KSl9KSksZX10aHJvdyBuZXcgRXJyb3IoXCJIZWFkZXJzIGNsYXNzIGlzIG5vdCBkZWZpbmVkXCIpfSxlfSgpO3QuQnJvd3NlckhlYWRlcnM9aX0sZnVuY3Rpb24oZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciByPW4oMCk7dC5Ccm93c2VySGVhZGVycz1yLkJyb3dzZXJIZWFkZXJzfSxmdW5jdGlvbihlLHQsbil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5pdGVyYXRlSGVhZGVycz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1lW1N5bWJvbC5pdGVyYXRvcl0oKSxyPW4ubmV4dCgpOyFyLmRvbmU7KXQoci52YWx1ZVswXSkscj1uLm5leHQoKX0sdC5pdGVyYXRlSGVhZGVyc0tleXM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49ZS5rZXlzKCkscj1uLm5leHQoKTshci5kb25lOyl0KHIudmFsdWUpLHI9bi5uZXh0KCl9fSxmdW5jdGlvbihlLHQsbil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIHI9bigyKTt0Lm5vcm1hbGl6ZU5hbWU9ZnVuY3Rpb24oZSl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUmJihlPVN0cmluZyhlKSksL1teYS16MC05XFwtIyQlJicqKy5cXF5fYHx+XS9pLnRlc3QoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lXCIpO3JldHVybiBlLnRvTG93ZXJDYXNlKCl9LHQubm9ybWFsaXplVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIGUmJihlPVN0cmluZyhlKSksZX0sdC5nZXRIZWFkZXJWYWx1ZXM9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lO2lmKG4gaW5zdGFuY2VvZiBIZWFkZXJzJiZuLmdldEFsbClyZXR1cm4gbi5nZXRBbGwodCk7dmFyIHI9bi5nZXQodCk7cmV0dXJuIHImJlwic3RyaW5nXCI9PXR5cGVvZiByP1tyXTpyfSx0LmdldEhlYWRlcktleXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZSxuPXt9LGk9W107cmV0dXJuIHQua2V5cz9yLml0ZXJhdGVIZWFkZXJzS2V5cyh0LChmdW5jdGlvbihlKXtuW2VdfHwobltlXT0hMCxpLnB1c2goZSkpfSkpOnQuZm9yRWFjaD90LmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7blt0XXx8KG5bdF09ITAsaS5wdXNoKHQpKX0pKTpyLml0ZXJhdGVIZWFkZXJzKHQsKGZ1bmN0aW9uKGUpe3ZhciB0PWVbMF07blt0XXx8KG5bdF09ITAsaS5wdXNoKHQpKX0pKSxpfSx0LnNwbGl0SGVhZGVyVmFsdWU9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIGUuc3BsaXQoXCIsIFwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnNwbGl0KFwiLFwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXt0LnB1c2goZSl9KSl9KSksdH19XSkpfSw2MTc6ZnVuY3Rpb24oZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2h1bmtQYXJzZXI9dC5DaHVua1R5cGU9dC5lbmNvZGVBU0NJST10LmRlY29kZUFTQ0lJPXZvaWQgMDt2YXIgcixpPW4oNjUpO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIDk9PT0odD1lKXx8MTA9PT10fHwxMz09PXR8fGU+PTMyJiZlPD0xMjY7dmFyIHR9ZnVuY3Rpb24gYShlKXtmb3IodmFyIHQ9MDt0IT09ZS5sZW5ndGg7Kyt0KWlmKCFvKGVbdF0pKXRocm93IG5ldyBFcnJvcihcIk1ldGFkYXRhIGlzIG5vdCB2YWxpZCAocHJpbnRhYmxlKSBBU0NJSVwiKTtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSkpfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIDEyOD09KDEyOCZlLmdldFVpbnQ4KDApKX1mdW5jdGlvbiBjKGUpe3JldHVybiBlLmdldFVpbnQzMigxLCExKX1mdW5jdGlvbiBsKGUsdCxuKXtyZXR1cm4gZS5ieXRlTGVuZ3RoLXQ+PW59ZnVuY3Rpb24gdShlLHQsbil7aWYoZS5zbGljZSlyZXR1cm4gZS5zbGljZSh0LG4pO3ZhciByPWUubGVuZ3RoO3ZvaWQgMCE9PW4mJihyPW4pO2Zvcih2YXIgaT1uZXcgVWludDhBcnJheShyLXQpLG89MCxhPXQ7YTxyO2ErKylpW28rK109ZVthXTtyZXR1cm4gaX10LmRlY29kZUFTQ0lJPWEsdC5lbmNvZGVBU0NJST1mdW5jdGlvbihlKXtmb3IodmFyIHQ9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgpLG49MDtuIT09ZS5sZW5ndGg7KytuKXt2YXIgcj1lLmNoYXJDb2RlQXQobik7aWYoIW8ocikpdGhyb3cgbmV3IEVycm9yKFwiTWV0YWRhdGEgY29udGFpbnMgaW52YWxpZCBBU0NJSVwiKTt0W25dPXJ9cmV0dXJuIHR9LGZ1bmN0aW9uKGUpe2VbZS5NRVNTQUdFPTFdPVwiTUVTU0FHRVwiLGVbZS5UUkFJTEVSUz0yXT1cIlRSQUlMRVJTXCJ9KHI9dC5DaHVua1R5cGV8fCh0LkNodW5rVHlwZT17fSkpO3ZhciBkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuYnVmZmVyPW51bGwsdGhpcy5wb3NpdGlvbj0wfXJldHVybiBlLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbihlLHQpe2lmKDA9PT1lLmxlbmd0aCYmdClyZXR1cm5bXTt2YXIgbixvPVtdO2lmKG51bGw9PXRoaXMuYnVmZmVyKXRoaXMuYnVmZmVyPWUsdGhpcy5wb3NpdGlvbj0wO2Vsc2UgaWYodGhpcy5wb3NpdGlvbj09PXRoaXMuYnVmZmVyLmJ5dGVMZW5ndGgpdGhpcy5idWZmZXI9ZSx0aGlzLnBvc2l0aW9uPTA7ZWxzZXt2YXIgZD10aGlzLmJ1ZmZlci5ieXRlTGVuZ3RoLXRoaXMucG9zaXRpb24sZj1uZXcgVWludDhBcnJheShkK2UuYnl0ZUxlbmd0aCkscD11KHRoaXMuYnVmZmVyLHRoaXMucG9zaXRpb24pO2Yuc2V0KHAsMCk7dmFyIG09bmV3IFVpbnQ4QXJyYXkoZSk7Zi5zZXQobSxkKSx0aGlzLmJ1ZmZlcj1mLHRoaXMucG9zaXRpb249MH1mb3IoOzspe2lmKCFsKHRoaXMuYnVmZmVyLHRoaXMucG9zaXRpb24sNSkpcmV0dXJuIG87dmFyIGg9dSh0aGlzLmJ1ZmZlcix0aGlzLnBvc2l0aW9uLHRoaXMucG9zaXRpb24rNSksdj1uZXcgRGF0YVZpZXcoaC5idWZmZXIsaC5ieXRlT2Zmc2V0LGguYnl0ZUxlbmd0aCksZz1jKHYpO2lmKCFsKHRoaXMuYnVmZmVyLHRoaXMucG9zaXRpb24sNStnKSlyZXR1cm4gbzt2YXIgeT11KHRoaXMuYnVmZmVyLHRoaXMucG9zaXRpb24rNSx0aGlzLnBvc2l0aW9uKzUrZyk7aWYodGhpcy5wb3NpdGlvbis9NStnLHModikpcmV0dXJuIG8ucHVzaCh7Y2h1bmtUeXBlOnIuVFJBSUxFUlMsdHJhaWxlcnM6KG49eSxuZXcgaS5NZXRhZGF0YShhKG4pKSl9KSxvO28ucHVzaCh7Y2h1bmtUeXBlOnIuTUVTU0FHRSxkYXRhOnl9KX19LGV9KCk7dC5DaHVua1BhcnNlcj1kfSw4OmZ1bmN0aW9uKGUsdCl7dmFyIG47T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5odHRwU3RhdHVzVG9Db2RlPXQuQ29kZT12b2lkIDAsZnVuY3Rpb24oZSl7ZVtlLk9LPTBdPVwiT0tcIixlW2UuQ2FuY2VsZWQ9MV09XCJDYW5jZWxlZFwiLGVbZS5Vbmtub3duPTJdPVwiVW5rbm93blwiLGVbZS5JbnZhbGlkQXJndW1lbnQ9M109XCJJbnZhbGlkQXJndW1lbnRcIixlW2UuRGVhZGxpbmVFeGNlZWRlZD00XT1cIkRlYWRsaW5lRXhjZWVkZWRcIixlW2UuTm90Rm91bmQ9NV09XCJOb3RGb3VuZFwiLGVbZS5BbHJlYWR5RXhpc3RzPTZdPVwiQWxyZWFkeUV4aXN0c1wiLGVbZS5QZXJtaXNzaW9uRGVuaWVkPTddPVwiUGVybWlzc2lvbkRlbmllZFwiLGVbZS5SZXNvdXJjZUV4aGF1c3RlZD04XT1cIlJlc291cmNlRXhoYXVzdGVkXCIsZVtlLkZhaWxlZFByZWNvbmRpdGlvbj05XT1cIkZhaWxlZFByZWNvbmRpdGlvblwiLGVbZS5BYm9ydGVkPTEwXT1cIkFib3J0ZWRcIixlW2UuT3V0T2ZSYW5nZT0xMV09XCJPdXRPZlJhbmdlXCIsZVtlLlVuaW1wbGVtZW50ZWQ9MTJdPVwiVW5pbXBsZW1lbnRlZFwiLGVbZS5JbnRlcm5hbD0xM109XCJJbnRlcm5hbFwiLGVbZS5VbmF2YWlsYWJsZT0xNF09XCJVbmF2YWlsYWJsZVwiLGVbZS5EYXRhTG9zcz0xNV09XCJEYXRhTG9zc1wiLGVbZS5VbmF1dGhlbnRpY2F0ZWQ9MTZdPVwiVW5hdXRoZW50aWNhdGVkXCJ9KG49dC5Db2RlfHwodC5Db2RlPXt9KSksdC5odHRwU3RhdHVzVG9Db2RlPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIG4uSW50ZXJuYWw7Y2FzZSAyMDA6cmV0dXJuIG4uT0s7Y2FzZSA0MDA6cmV0dXJuIG4uSW52YWxpZEFyZ3VtZW50O2Nhc2UgNDAxOnJldHVybiBuLlVuYXV0aGVudGljYXRlZDtjYXNlIDQwMzpyZXR1cm4gbi5QZXJtaXNzaW9uRGVuaWVkO2Nhc2UgNDA0OnJldHVybiBuLk5vdEZvdW5kO2Nhc2UgNDA5OnJldHVybiBuLkFib3J0ZWQ7Y2FzZSA0MTI6cmV0dXJuIG4uRmFpbGVkUHJlY29uZGl0aW9uO2Nhc2UgNDI5OnJldHVybiBuLlJlc291cmNlRXhoYXVzdGVkO2Nhc2UgNDk5OnJldHVybiBuLkNhbmNlbGVkO2Nhc2UgNTAwOmRlZmF1bHQ6cmV0dXJuIG4uVW5rbm93bjtjYXNlIDUwMTpyZXR1cm4gbi5VbmltcGxlbWVudGVkO2Nhc2UgNTAzOnJldHVybiBuLlVuYXZhaWxhYmxlO2Nhc2UgNTA0OnJldHVybiBuLkRlYWRsaW5lRXhjZWVkZWR9fX0sOTM0OmZ1bmN0aW9uKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmNsaWVudD12b2lkIDA7dmFyIHI9big2NSksaT1uKDYxNyksbz1uKDgpLGE9bigzNDYpLHM9big1NyksYz1uKDg4Mik7dC5jbGllbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IGwoZSx0KX07dmFyIGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5zdGFydGVkPSExLHRoaXMuc2VudEZpcnN0TWVzc2FnZT0hMSx0aGlzLmNvbXBsZXRlZD0hMSx0aGlzLmNsb3NlZD0hMSx0aGlzLmZpbmlzaGVkU2VuZGluZz0hMSx0aGlzLm9uSGVhZGVyc0NhbGxiYWNrcz1bXSx0aGlzLm9uTWVzc2FnZUNhbGxiYWNrcz1bXSx0aGlzLm9uRW5kQ2FsbGJhY2tzPVtdLHRoaXMucGFyc2VyPW5ldyBpLkNodW5rUGFyc2VyLHRoaXMubWV0aG9kRGVmaW5pdGlvbj1lLHRoaXMucHJvcHM9dCx0aGlzLmNyZWF0ZVRyYW5zcG9ydCgpfXJldHVybiBlLnByb3RvdHlwZS5jcmVhdGVUcmFuc3BvcnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLmhvc3QrXCIvXCIrdGhpcy5tZXRob2REZWZpbml0aW9uLnNlcnZpY2Uuc2VydmljZU5hbWUrXCIvXCIrdGhpcy5tZXRob2REZWZpbml0aW9uLm1ldGhvZE5hbWUsdD17bWV0aG9kRGVmaW5pdGlvbjp0aGlzLm1ldGhvZERlZmluaXRpb24sZGVidWc6dGhpcy5wcm9wcy5kZWJ1Z3x8ITEsdXJsOmUsb25IZWFkZXJzOnRoaXMub25UcmFuc3BvcnRIZWFkZXJzLmJpbmQodGhpcyksb25DaHVuazp0aGlzLm9uVHJhbnNwb3J0Q2h1bmsuYmluZCh0aGlzKSxvbkVuZDp0aGlzLm9uVHJhbnNwb3J0RW5kLmJpbmQodGhpcyl9O3RoaXMucHJvcHMudHJhbnNwb3J0P3RoaXMudHJhbnNwb3J0PXRoaXMucHJvcHMudHJhbnNwb3J0KHQpOnRoaXMudHJhbnNwb3J0PXMubWFrZURlZmF1bHRUcmFuc3BvcnQodCl9LGUucHJvdG90eXBlLm9uVHJhbnNwb3J0SGVhZGVycz1mdW5jdGlvbihlLHQpe2lmKHRoaXMucHJvcHMuZGVidWcmJmEuZGVidWcoXCJvbkhlYWRlcnNcIixlLHQpLHRoaXMuY2xvc2VkKXRoaXMucHJvcHMuZGVidWcmJmEuZGVidWcoXCJncnBjLm9uSGVhZGVycyByZWNlaXZlZCBhZnRlciByZXF1ZXN0IHdhcyBjbG9zZWQgLSBpZ25vcmluZ1wiKTtlbHNlIGlmKDA9PT10KTtlbHNle3RoaXMucmVzcG9uc2VIZWFkZXJzPWUsdGhpcy5wcm9wcy5kZWJ1ZyYmYS5kZWJ1ZyhcIm9uSGVhZGVycy5yZXNwb25zZUhlYWRlcnNcIixKU09OLnN0cmluZ2lmeSh0aGlzLnJlc3BvbnNlSGVhZGVycyxudWxsLDIpKTt2YXIgbj11KGUpO3RoaXMucHJvcHMuZGVidWcmJmEuZGVidWcoXCJvbkhlYWRlcnMuZ1JQQ1N0YXR1c1wiLG4pO3ZhciByPW4mJm4+PTA/bjpvLmh0dHBTdGF0dXNUb0NvZGUodCk7dGhpcy5wcm9wcy5kZWJ1ZyYmYS5kZWJ1ZyhcIm9uSGVhZGVycy5jb2RlXCIscik7dmFyIGk9ZS5nZXQoXCJncnBjLW1lc3NhZ2VcIil8fFtdO2lmKHRoaXMucHJvcHMuZGVidWcmJmEuZGVidWcoXCJvbkhlYWRlcnMuZ1JQQ01lc3NhZ2VcIixpKSx0aGlzLnJhd09uSGVhZGVycyhlKSxyIT09by5Db2RlLk9LKXt2YXIgcz10aGlzLmRlY29kZUdSUENTdGF0dXMoaVswXSk7dGhpcy5yYXdPbkVycm9yKHIscyxlKX19fSxlLnByb3RvdHlwZS5vblRyYW5zcG9ydENodW5rPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYodGhpcy5jbG9zZWQpdGhpcy5wcm9wcy5kZWJ1ZyYmYS5kZWJ1ZyhcImdycGMub25DaHVuayByZWNlaXZlZCBhZnRlciByZXF1ZXN0IHdhcyBjbG9zZWQgLSBpZ25vcmluZ1wiKTtlbHNle3ZhciBuPVtdO3RyeXtuPXRoaXMucGFyc2VyLnBhcnNlKGUpfWNhdGNoKGUpe3JldHVybiB0aGlzLnByb3BzLmRlYnVnJiZhLmRlYnVnKFwib25DaHVuay5wYXJzaW5nIGVycm9yXCIsZSxlLm1lc3NhZ2UpLHZvaWQgdGhpcy5yYXdPbkVycm9yKG8uQ29kZS5JbnRlcm5hbCxcInBhcnNpbmcgZXJyb3I6IFwiK2UubWVzc2FnZSl9bi5mb3JFYWNoKChmdW5jdGlvbihlKXtpZihlLmNodW5rVHlwZT09PWkuQ2h1bmtUeXBlLk1FU1NBR0Upe3ZhciBuPXQubWV0aG9kRGVmaW5pdGlvbi5yZXNwb25zZVR5cGUuZGVzZXJpYWxpemVCaW5hcnkoZS5kYXRhKTt0LnJhd09uTWVzc2FnZShuKX1lbHNlIGUuY2h1bmtUeXBlPT09aS5DaHVua1R5cGUuVFJBSUxFUlMmJih0LnJlc3BvbnNlSGVhZGVycz8odC5yZXNwb25zZVRyYWlsZXJzPW5ldyByLk1ldGFkYXRhKGUudHJhaWxlcnMpLHQucHJvcHMuZGVidWcmJmEuZGVidWcoXCJvbkNodW5rLnRyYWlsZXJzXCIsdC5yZXNwb25zZVRyYWlsZXJzKSk6KHQucmVzcG9uc2VIZWFkZXJzPW5ldyByLk1ldGFkYXRhKGUudHJhaWxlcnMpLHQucmF3T25IZWFkZXJzKHQucmVzcG9uc2VIZWFkZXJzKSkpfSkpfX0sZS5wcm90b3R5cGUub25UcmFuc3BvcnRFbmQ9ZnVuY3Rpb24oKXtpZih0aGlzLnByb3BzLmRlYnVnJiZhLmRlYnVnKFwiZ3JwYy5vbkVuZFwiKSx0aGlzLmNsb3NlZCl0aGlzLnByb3BzLmRlYnVnJiZhLmRlYnVnKFwiZ3JwYy5vbkVuZCByZWNlaXZlZCBhZnRlciByZXF1ZXN0IHdhcyBjbG9zZWQgLSBpZ25vcmluZ1wiKTtlbHNlIGlmKHZvaWQgMCE9PXRoaXMucmVzcG9uc2VUcmFpbGVycyl7dmFyIGU9dSh0aGlzLnJlc3BvbnNlVHJhaWxlcnMpO2lmKG51bGwhPT1lKXt2YXIgdD10aGlzLnJlc3BvbnNlVHJhaWxlcnMuZ2V0KFwiZ3JwYy1tZXNzYWdlXCIpLG49dGhpcy5kZWNvZGVHUlBDU3RhdHVzKHRbMF0pO3RoaXMucmF3T25FbmQoZSxuLHRoaXMucmVzcG9uc2VUcmFpbGVycyl9ZWxzZSB0aGlzLnJhd09uRXJyb3Ioby5Db2RlLkludGVybmFsLFwiUmVzcG9uc2UgY2xvc2VkIHdpdGhvdXQgZ3JwYy1zdGF0dXMgKFRyYWlsZXJzIHByb3ZpZGVkKVwiKX1lbHNle2lmKHZvaWQgMD09PXRoaXMucmVzcG9uc2VIZWFkZXJzKXJldHVybiB2b2lkIHRoaXMucmF3T25FcnJvcihvLkNvZGUuVW5rbm93bixcIlJlc3BvbnNlIGNsb3NlZCB3aXRob3V0IGhlYWRlcnNcIik7dmFyIHI9dSh0aGlzLnJlc3BvbnNlSGVhZGVycyksaT10aGlzLnJlc3BvbnNlSGVhZGVycy5nZXQoXCJncnBjLW1lc3NhZ2VcIik7aWYodGhpcy5wcm9wcy5kZWJ1ZyYmYS5kZWJ1ZyhcImdycGMuaGVhZGVycyBvbmx5IHJlc3BvbnNlIFwiLHIsaSksbnVsbD09PXIpcmV0dXJuIHZvaWQgdGhpcy5yYXdPbkVuZChvLkNvZGUuVW5rbm93bixcIlJlc3BvbnNlIGNsb3NlZCB3aXRob3V0IGdycGMtc3RhdHVzIChIZWFkZXJzIG9ubHkpXCIsdGhpcy5yZXNwb25zZUhlYWRlcnMpO3ZhciBzPXRoaXMuZGVjb2RlR1JQQ1N0YXR1cyhpWzBdKTt0aGlzLnJhd09uRW5kKHIscyx0aGlzLnJlc3BvbnNlSGVhZGVycyl9fSxlLnByb3RvdHlwZS5kZWNvZGVHUlBDU3RhdHVzPWZ1bmN0aW9uKGUpe2lmKCFlKXJldHVyblwiXCI7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZSl9Y2F0Y2godCl7cmV0dXJuIGV9fSxlLnByb3RvdHlwZS5yYXdPbkVuZD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpczt0aGlzLnByb3BzLmRlYnVnJiZhLmRlYnVnKFwicmF3T25FbmRcIixlLHQsbiksdGhpcy5jb21wbGV0ZWR8fCh0aGlzLmNvbXBsZXRlZD0hMCx0aGlzLm9uRW5kQ2FsbGJhY2tzLmZvckVhY2goKGZ1bmN0aW9uKGkpe2lmKCFyLmNsb3NlZCl0cnl7aShlLHQsbil9Y2F0Y2goZSl7c2V0VGltZW91dCgoZnVuY3Rpb24oKXt0aHJvdyBlfSksMCl9fSkpKX0sZS5wcm90b3R5cGUucmF3T25IZWFkZXJzPWZ1bmN0aW9uKGUpe3RoaXMucHJvcHMuZGVidWcmJmEuZGVidWcoXCJyYXdPbkhlYWRlcnNcIixlKSx0aGlzLmNvbXBsZXRlZHx8dGhpcy5vbkhlYWRlcnNDYWxsYmFja3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7dHJ5e3QoZSl9Y2F0Y2goZSl7c2V0VGltZW91dCgoZnVuY3Rpb24oKXt0aHJvdyBlfSksMCl9fSkpfSxlLnByb3RvdHlwZS5yYXdPbkVycm9yPWZ1bmN0aW9uKGUsdCxuKXt2YXIgaT10aGlzO3ZvaWQgMD09PW4mJihuPW5ldyByLk1ldGFkYXRhKSx0aGlzLnByb3BzLmRlYnVnJiZhLmRlYnVnKFwicmF3T25FcnJvclwiLGUsdCksdGhpcy5jb21wbGV0ZWR8fCh0aGlzLmNvbXBsZXRlZD0hMCx0aGlzLm9uRW5kQ2FsbGJhY2tzLmZvckVhY2goKGZ1bmN0aW9uKHIpe2lmKCFpLmNsb3NlZCl0cnl7cihlLHQsbil9Y2F0Y2goZSl7c2V0VGltZW91dCgoZnVuY3Rpb24oKXt0aHJvdyBlfSksMCl9fSkpKX0sZS5wcm90b3R5cGUucmF3T25NZXNzYWdlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5wcm9wcy5kZWJ1ZyYmYS5kZWJ1ZyhcInJhd09uTWVzc2FnZVwiLGUudG9PYmplY3QoKSksdGhpcy5jb21wbGV0ZWR8fHRoaXMuY2xvc2VkfHx0aGlzLm9uTWVzc2FnZUNhbGxiYWNrcy5mb3JFYWNoKChmdW5jdGlvbihuKXtpZighdC5jbG9zZWQpdHJ5e24oZSl9Y2F0Y2goZSl7c2V0VGltZW91dCgoZnVuY3Rpb24oKXt0aHJvdyBlfSksMCl9fSkpfSxlLnByb3RvdHlwZS5vbkhlYWRlcnM9ZnVuY3Rpb24oZSl7dGhpcy5vbkhlYWRlcnNDYWxsYmFja3MucHVzaChlKX0sZS5wcm90b3R5cGUub25NZXNzYWdlPWZ1bmN0aW9uKGUpe3RoaXMub25NZXNzYWdlQ2FsbGJhY2tzLnB1c2goZSl9LGUucHJvdG90eXBlLm9uRW5kPWZ1bmN0aW9uKGUpe3RoaXMub25FbmRDYWxsYmFja3MucHVzaChlKX0sZS5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oZSl7aWYodGhpcy5zdGFydGVkKXRocm93IG5ldyBFcnJvcihcIkNsaWVudCBhbHJlYWR5IHN0YXJ0ZWQgLSBjYW5ub3QgLnN0YXJ0KClcIik7dGhpcy5zdGFydGVkPSEwO3ZhciB0PW5ldyByLk1ldGFkYXRhKGV8fHt9KTt0LnNldChcImNvbnRlbnQtdHlwZVwiLFwiYXBwbGljYXRpb24vZ3JwYy13ZWIrcHJvdG9cIiksdC5zZXQoXCJ4LWdycGMtd2ViXCIsXCIxXCIpLHRoaXMudHJhbnNwb3J0LnN0YXJ0KHQpfSxlLnByb3RvdHlwZS5zZW5kPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLnN0YXJ0ZWQpdGhyb3cgbmV3IEVycm9yKFwiQ2xpZW50IG5vdCBzdGFydGVkIC0gLnN0YXJ0KCkgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIC5zZW5kKClcIik7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IEVycm9yKFwiQ2xpZW50IGFscmVhZHkgY2xvc2VkIC0gY2Fubm90IC5zZW5kKClcIik7aWYodGhpcy5maW5pc2hlZFNlbmRpbmcpdGhyb3cgbmV3IEVycm9yKFwiQ2xpZW50IGFscmVhZHkgZmluaXNoZWQgc2VuZGluZyAtIGNhbm5vdCAuc2VuZCgpXCIpO2lmKCF0aGlzLm1ldGhvZERlZmluaXRpb24ucmVxdWVzdFN0cmVhbSYmdGhpcy5zZW50Rmlyc3RNZXNzYWdlKXRocm93IG5ldyBFcnJvcihcIk1lc3NhZ2UgYWxyZWFkeSBzZW50IGZvciBub24tY2xpZW50LXN0cmVhbWluZyBtZXRob2QgLSBjYW5ub3QgLnNlbmQoKVwiKTt0aGlzLnNlbnRGaXJzdE1lc3NhZ2U9ITA7dmFyIHQ9Yy5mcmFtZVJlcXVlc3QoZSk7dGhpcy50cmFuc3BvcnQuc2VuZE1lc3NhZ2UodCl9LGUucHJvdG90eXBlLmZpbmlzaFNlbmQ9ZnVuY3Rpb24oKXtpZighdGhpcy5zdGFydGVkKXRocm93IG5ldyBFcnJvcihcIkNsaWVudCBub3Qgc3RhcnRlZCAtIC5maW5pc2hTZW5kKCkgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIC5jbG9zZSgpXCIpO2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBFcnJvcihcIkNsaWVudCBhbHJlYWR5IGNsb3NlZCAtIGNhbm5vdCAuc2VuZCgpXCIpO2lmKHRoaXMuZmluaXNoZWRTZW5kaW5nKXRocm93IG5ldyBFcnJvcihcIkNsaWVudCBhbHJlYWR5IGZpbmlzaGVkIHNlbmRpbmcgLSBjYW5ub3QgLmZpbmlzaFNlbmQoKVwiKTt0aGlzLmZpbmlzaGVkU2VuZGluZz0hMCx0aGlzLnRyYW5zcG9ydC5maW5pc2hTZW5kKCl9LGUucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuc3RhcnRlZCl0aHJvdyBuZXcgRXJyb3IoXCJDbGllbnQgbm90IHN0YXJ0ZWQgLSAuc3RhcnQoKSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgLmNsb3NlKClcIik7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IEVycm9yKFwiQ2xpZW50IGFscmVhZHkgY2xvc2VkIC0gY2Fubm90IC5jbG9zZSgpXCIpO3RoaXMuY2xvc2VkPSEwLHRoaXMucHJvcHMuZGVidWcmJmEuZGVidWcoXCJyZXF1ZXN0LmFib3J0IGFib3J0aW5nIHJlcXVlc3RcIiksdGhpcy50cmFuc3BvcnQuY2FuY2VsKCl9LGV9KCk7ZnVuY3Rpb24gdShlKXt2YXIgdD1lLmdldChcImdycGMtc3RhdHVzXCIpfHxbXTtpZih0Lmxlbmd0aD4wKXRyeXt2YXIgbj10WzBdO3JldHVybiBwYXJzZUludChuLDEwKX1jYXRjaChlKXtyZXR1cm4gbnVsbH1yZXR1cm4gbnVsbH19LDM0NjpmdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZGVidWc9dm9pZCAwLHQuZGVidWc9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07Y29uc29sZS5kZWJ1Zz9jb25zb2xlLmRlYnVnLmFwcGx5KG51bGwsZSk6Y29uc29sZS5sb2cuYXBwbHkobnVsbCxlKX19LDYwNzpmdW5jdGlvbihlLHQsbil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5ncnBjPXZvaWQgMDt2YXIgcixpPW4oNDE4KSxvPW4oNTcpLGE9bigyMjkpLHM9big1NDApLGM9bigyMTApLGw9big4NTkpLHU9big4KSxkPW4oOTM4KSxmPW4oMzUpLHA9big5MzQpOyhyPXQuZ3JwY3x8KHQuZ3JwYz17fSkpLnNldERlZmF1bHRUcmFuc3BvcnQ9by5zZXREZWZhdWx0VHJhbnNwb3J0RmFjdG9yeSxyLkNyb3NzQnJvd3Nlckh0dHBUcmFuc3BvcnQ9bC5Dcm9zc0Jyb3dzZXJIdHRwVHJhbnNwb3J0LHIuRmV0Y2hSZWFkYWJsZVN0cmVhbVRyYW5zcG9ydD1hLkZldGNoUmVhZGFibGVTdHJlYW1UcmFuc3BvcnQsci5YaHJUcmFuc3BvcnQ9Yy5YaHJUcmFuc3BvcnQsci5XZWJzb2NrZXRUcmFuc3BvcnQ9cy5XZWJzb2NrZXRUcmFuc3BvcnQsci5Db2RlPXUuQ29kZSxyLk1ldGFkYXRhPWkuQnJvd3NlckhlYWRlcnMsci5jbGllbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcC5jbGllbnQoZSx0KX0sci5pbnZva2U9ZC5pbnZva2Usci51bmFyeT1mLnVuYXJ5fSw5Mzg6ZnVuY3Rpb24oZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuaW52b2tlPXZvaWQgMDt2YXIgcj1uKDkzNCk7dC5pbnZva2U9ZnVuY3Rpb24oZSx0KXtpZihlLnJlcXVlc3RTdHJlYW0pdGhyb3cgbmV3IEVycm9yKFwiLmludm9rZSBjYW5ub3QgYmUgdXNlZCB3aXRoIGNsaWVudC1zdHJlYW1pbmcgbWV0aG9kcy4gVXNlIC5jbGllbnQgaW5zdGVhZC5cIik7dmFyIG49ci5jbGllbnQoZSx7aG9zdDp0Lmhvc3QsdHJhbnNwb3J0OnQudHJhbnNwb3J0LGRlYnVnOnQuZGVidWd9KTtyZXR1cm4gdC5vbkhlYWRlcnMmJm4ub25IZWFkZXJzKHQub25IZWFkZXJzKSx0Lm9uTWVzc2FnZSYmbi5vbk1lc3NhZ2UodC5vbk1lc3NhZ2UpLHQub25FbmQmJm4ub25FbmQodC5vbkVuZCksbi5zdGFydCh0Lm1ldGFkYXRhKSxuLnNlbmQodC5yZXF1ZXN0KSxuLmZpbmlzaFNlbmQoKSx7Y2xvc2U6ZnVuY3Rpb24oKXtuLmNsb3NlKCl9fX19LDY1OmZ1bmN0aW9uKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk1ldGFkYXRhPXZvaWQgMDt2YXIgcj1uKDQxOCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJNZXRhZGF0YVwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkJyb3dzZXJIZWFkZXJzfX0pfSw1NzpmdW5jdGlvbihlLHQsbil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5tYWtlRGVmYXVsdFRyYW5zcG9ydD10LnNldERlZmF1bHRUcmFuc3BvcnRGYWN0b3J5PXZvaWQgMDt2YXIgcj1uKDg1OSksaT1mdW5jdGlvbihlKXtyZXR1cm4gci5Dcm9zc0Jyb3dzZXJIdHRwVHJhbnNwb3J0KHt3aXRoQ3JlZGVudGlhbHM6ITF9KShlKX07dC5zZXREZWZhdWx0VHJhbnNwb3J0RmFjdG9yeT1mdW5jdGlvbihlKXtpPWV9LHQubWFrZURlZmF1bHRUcmFuc3BvcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGkoZSl9fSwyMjk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuKHI9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49MSxyPWFyZ3VtZW50cy5sZW5ndGg7bjxyO24rKylmb3IodmFyIGkgaW4gdD1hcmd1bWVudHNbbl0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsaSkmJihlW2ldPXRbaV0pO3JldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmRldGVjdEZldGNoU3VwcG9ydD10LkZldGNoUmVhZGFibGVTdHJlYW1UcmFuc3BvcnQ9dm9pZCAwO3ZhciBpPW4oNjUpLG89bigzNDYpO3QuRmV0Y2hSZWFkYWJsZVN0cmVhbVRyYW5zcG9ydD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZGVidWcmJm8uZGVidWcoXCJmZXRjaFJlcXVlc3RcIixlKSxuZXcgYShlLHQpfSh0LGUpfX07dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5jYW5jZWxsZWQ9ITEsdGhpcy5jb250cm9sbGVyPXNlbGYuQWJvcnRDb250cm9sbGVyJiZuZXcgQWJvcnRDb250cm9sbGVyLHRoaXMub3B0aW9ucz1lLHRoaXMuaW5pdD10fXJldHVybiBlLnByb3RvdHlwZS5wdW1wPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztpZih0aGlzLnJlYWRlcj1lLHRoaXMuY2FuY2VsbGVkKXJldHVybiB0aGlzLm9wdGlvbnMuZGVidWcmJm8uZGVidWcoXCJGZXRjaC5wdW1wLmNhbmNlbCBhdCBmaXJzdCBwdW1wXCIpLHZvaWQgdGhpcy5yZWFkZXIuY2FuY2VsKCkuY2F0Y2goKGZ1bmN0aW9uKGUpe24ub3B0aW9ucy5kZWJ1ZyYmby5kZWJ1ZyhcIkZldGNoLnB1bXAucmVhZGVyLmNhbmNlbCBleGNlcHRpb25cIixlKX0pKTt0aGlzLnJlYWRlci5yZWFkKCkudGhlbigoZnVuY3Rpb24oZSl7aWYoZS5kb25lKXJldHVybiBuLm9wdGlvbnMub25FbmQoKSx0O24ub3B0aW9ucy5vbkNodW5rKGUudmFsdWUpLG4ucHVtcChuLnJlYWRlcix0KX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7bi5jYW5jZWxsZWQ/bi5vcHRpb25zLmRlYnVnJiZvLmRlYnVnKFwiRmV0Y2guY2F0Y2ggLSByZXF1ZXN0IGNhbmNlbGxlZFwiKToobi5jYW5jZWxsZWQ9ITAsbi5vcHRpb25zLmRlYnVnJiZvLmRlYnVnKFwiRmV0Y2guY2F0Y2hcIixlLm1lc3NhZ2UpLG4ub3B0aW9ucy5vbkVuZChlKSl9KSl9LGUucHJvdG90eXBlLnNlbmQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztmZXRjaCh0aGlzLm9wdGlvbnMudXJsLHIocih7fSx0aGlzLmluaXQpLHtoZWFkZXJzOnRoaXMubWV0YWRhdGEudG9IZWFkZXJzKCksbWV0aG9kOlwiUE9TVFwiLGJvZHk6ZSxzaWduYWw6dGhpcy5jb250cm9sbGVyJiZ0aGlzLmNvbnRyb2xsZXIuc2lnbmFsfSkpLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKHQub3B0aW9ucy5kZWJ1ZyYmby5kZWJ1ZyhcIkZldGNoLnJlc3BvbnNlXCIsZSksdC5vcHRpb25zLm9uSGVhZGVycyhuZXcgaS5NZXRhZGF0YShlLmhlYWRlcnMpLGUuc3RhdHVzKSwhZS5ib2R5KXJldHVybiBlO3QucHVtcChlLmJvZHkuZ2V0UmVhZGVyKCksZSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3QuY2FuY2VsbGVkP3Qub3B0aW9ucy5kZWJ1ZyYmby5kZWJ1ZyhcIkZldGNoLmNhdGNoIC0gcmVxdWVzdCBjYW5jZWxsZWRcIik6KHQuY2FuY2VsbGVkPSEwLHQub3B0aW9ucy5kZWJ1ZyYmby5kZWJ1ZyhcIkZldGNoLmNhdGNoXCIsZS5tZXNzYWdlKSx0Lm9wdGlvbnMub25FbmQoZSkpfSkpfSxlLnByb3RvdHlwZS5zZW5kTWVzc2FnZT1mdW5jdGlvbihlKXt0aGlzLnNlbmQoZSl9LGUucHJvdG90eXBlLmZpbmlzaFNlbmQ9ZnVuY3Rpb24oKXt9LGUucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGUpe3RoaXMubWV0YWRhdGE9ZX0sZS5wcm90b3R5cGUuY2FuY2VsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmNhbmNlbGxlZD90aGlzLm9wdGlvbnMuZGVidWcmJm8uZGVidWcoXCJGZXRjaC5jYW5jZWwgYWxyZWFkeSBjYW5jZWxsZWRcIik6KHRoaXMuY2FuY2VsbGVkPSEwLHRoaXMuY29udHJvbGxlcj8odGhpcy5vcHRpb25zLmRlYnVnJiZvLmRlYnVnKFwiRmV0Y2guY2FuY2VsLmNvbnRyb2xsZXIuYWJvcnRcIiksdGhpcy5jb250cm9sbGVyLmFib3J0KCkpOnRoaXMub3B0aW9ucy5kZWJ1ZyYmby5kZWJ1ZyhcIkZldGNoLmNhbmNlbC5taXNzaW5nIGFib3J0IGNvbnRyb2xsZXJcIiksdGhpcy5yZWFkZXI/KHRoaXMub3B0aW9ucy5kZWJ1ZyYmby5kZWJ1ZyhcIkZldGNoLmNhbmNlbC5yZWFkZXIuY2FuY2VsXCIpLHRoaXMucmVhZGVyLmNhbmNlbCgpLmNhdGNoKChmdW5jdGlvbih0KXtlLm9wdGlvbnMuZGVidWcmJm8uZGVidWcoXCJGZXRjaC5jYW5jZWwucmVhZGVyLmNhbmNlbCBleGNlcHRpb25cIix0KX0pKSk6dGhpcy5vcHRpb25zLmRlYnVnJiZvLmRlYnVnKFwiRmV0Y2guY2FuY2VsIGJlZm9yZSByZWFkZXJcIikpfSxlfSgpO3QuZGV0ZWN0RmV0Y2hTdXBwb3J0PWZ1bmN0aW9uKCl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFJlc3BvbnNlJiZSZXNwb25zZS5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoXCJib2R5XCIpJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBIZWFkZXJzfX0sODU5OmZ1bmN0aW9uKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNyb3NzQnJvd3Nlckh0dHBUcmFuc3BvcnQ9dm9pZCAwO3ZhciByPW4oMjI5KSxpPW4oMjEwKTt0LkNyb3NzQnJvd3Nlckh0dHBUcmFuc3BvcnQ9ZnVuY3Rpb24oZSl7aWYoci5kZXRlY3RGZXRjaFN1cHBvcnQoKSl7dmFyIHQ9e2NyZWRlbnRpYWxzOmUud2l0aENyZWRlbnRpYWxzP1wiaW5jbHVkZVwiOlwic2FtZS1vcmlnaW5cIn07cmV0dXJuIHIuRmV0Y2hSZWFkYWJsZVN0cmVhbVRyYW5zcG9ydCh0KX1yZXR1cm4gaS5YaHJUcmFuc3BvcnQoe3dpdGhDcmVkZW50aWFsczplLndpdGhDcmVkZW50aWFsc30pfX0sMjEwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPXRoaXMmJnRoaXMuX19leHRlbmRzfHwocj1mdW5jdGlvbihlLHQpe3JldHVybihyPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pJiYoZVtuXT10W25dKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9ZX1yKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KToobi5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IG4pfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5zdHJpbmdUb0FycmF5QnVmZmVyPXQuTW96Q2h1bmtlZEFycmF5QnVmZmVyWEhSPXQuWEhSPXQuWGhyVHJhbnNwb3J0PXZvaWQgMDt2YXIgbz1uKDY1KSxhPW4oMzQ2KSxzPW4oODQ5KTt0LlhoclRyYW5zcG9ydD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYocy5kZXRlY3RNb3pYSFJTdXBwb3J0KCkpcmV0dXJuIG5ldyBsKHQsZSk7aWYocy5kZXRlY3RYSFJPdmVycmlkZU1pbWVUeXBlU3VwcG9ydCgpKXJldHVybiBuZXcgYyh0LGUpO3Rocm93IG5ldyBFcnJvcihcIlRoaXMgZW52aXJvbm1lbnQncyBYSFIgaW1wbGVtZW50YXRpb24gY2Fubm90IHN1cHBvcnQgYmluYXJ5IHRyYW5zZmVyLlwiKX19O3ZhciBjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMub3B0aW9ucz1lLHRoaXMuaW5pdD10fXJldHVybiBlLnByb3RvdHlwZS5vblByb2dyZXNzRXZlbnQ9ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuZGVidWcmJmEuZGVidWcoXCJYSFIub25Qcm9ncmVzc0V2ZW50Lmxlbmd0aDogXCIsdGhpcy54aHIucmVzcG9uc2UubGVuZ3RoKTt2YXIgZT10aGlzLnhoci5yZXNwb25zZS5zdWJzdHIodGhpcy5pbmRleCk7dGhpcy5pbmRleD10aGlzLnhoci5yZXNwb25zZS5sZW5ndGg7dmFyIHQ9ZChlKTt0aGlzLm9wdGlvbnMub25DaHVuayh0KX0sZS5wcm90b3R5cGUub25Mb2FkRXZlbnQ9ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuZGVidWcmJmEuZGVidWcoXCJYSFIub25Mb2FkRXZlbnRcIiksdGhpcy5vcHRpb25zLm9uRW5kKCl9LGUucHJvdG90eXBlLm9uU3RhdGVDaGFuZ2U9ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuZGVidWcmJmEuZGVidWcoXCJYSFIub25TdGF0ZUNoYW5nZVwiLHRoaXMueGhyLnJlYWR5U3RhdGUpLHRoaXMueGhyLnJlYWR5U3RhdGU9PT1YTUxIdHRwUmVxdWVzdC5IRUFERVJTX1JFQ0VJVkVEJiZ0aGlzLm9wdGlvbnMub25IZWFkZXJzKG5ldyBvLk1ldGFkYXRhKHRoaXMueGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSx0aGlzLnhoci5zdGF0dXMpfSxlLnByb3RvdHlwZS5zZW5kTWVzc2FnZT1mdW5jdGlvbihlKXt0aGlzLnhoci5zZW5kKGUpfSxlLnByb3RvdHlwZS5maW5pc2hTZW5kPWZ1bmN0aW9uKCl7fSxlLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMubWV0YWRhdGE9ZTt2YXIgbj1uZXcgWE1MSHR0cFJlcXVlc3Q7dGhpcy54aHI9bixuLm9wZW4oXCJQT1NUXCIsdGhpcy5vcHRpb25zLnVybCksdGhpcy5jb25maWd1cmVYaHIoKSx0aGlzLm1ldGFkYXRhLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7bi5zZXRSZXF1ZXN0SGVhZGVyKGUsdC5qb2luKFwiLCBcIikpfSkpLG4ud2l0aENyZWRlbnRpYWxzPUJvb2xlYW4odGhpcy5pbml0LndpdGhDcmVkZW50aWFscyksbi5hZGRFdmVudExpc3RlbmVyKFwicmVhZHlzdGF0ZWNoYW5nZVwiLHRoaXMub25TdGF0ZUNoYW5nZS5iaW5kKHRoaXMpKSxuLmFkZEV2ZW50TGlzdGVuZXIoXCJwcm9ncmVzc1wiLHRoaXMub25Qcm9ncmVzc0V2ZW50LmJpbmQodGhpcykpLG4uYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRlbmRcIix0aGlzLm9uTG9hZEV2ZW50LmJpbmQodGhpcykpLG4uYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsKGZ1bmN0aW9uKGUpe3Qub3B0aW9ucy5kZWJ1ZyYmYS5kZWJ1ZyhcIlhIUi5lcnJvclwiLGUpLHQub3B0aW9ucy5vbkVuZChlLmVycm9yKX0pKX0sZS5wcm90b3R5cGUuY29uZmlndXJlWGhyPWZ1bmN0aW9uKCl7dGhpcy54aHIucmVzcG9uc2VUeXBlPVwidGV4dFwiLHRoaXMueGhyLm92ZXJyaWRlTWltZVR5cGUoXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXgtdXNlci1kZWZpbmVkXCIpfSxlLnByb3RvdHlwZS5jYW5jZWw9ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuZGVidWcmJmEuZGVidWcoXCJYSFIuYWJvcnRcIiksdGhpcy54aHIuYWJvcnQoKX0sZX0oKTt0LlhIUj1jO3ZhciBsPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBpKHQsZSksdC5wcm90b3R5cGUuY29uZmlndXJlWGhyPWZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLmRlYnVnJiZhLmRlYnVnKFwiTW96WEhSLmNvbmZpZ3VyZVhocjogc2V0dGluZyByZXNwb25zZVR5cGUgdG8gJ21vei1jaHVua2VkLWFycmF5YnVmZmVyJ1wiKSx0aGlzLnhoci5yZXNwb25zZVR5cGU9XCJtb3otY2h1bmtlZC1hcnJheWJ1ZmZlclwifSx0LnByb3RvdHlwZS5vblByb2dyZXNzRXZlbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnhoci5yZXNwb25zZTt0aGlzLm9wdGlvbnMuZGVidWcmJmEuZGVidWcoXCJNb3pYSFIub25Qcm9ncmVzc0V2ZW50OiBcIixuZXcgVWludDhBcnJheShlKSksdGhpcy5vcHRpb25zLm9uQ2h1bmsobmV3IFVpbnQ4QXJyYXkoZSkpfSx0fShjKTtmdW5jdGlvbiB1KGUsdCl7dmFyIG49ZS5jaGFyQ29kZUF0KHQpO2lmKG4+PTU1Mjk2JiZuPD01NjMxOSl7dmFyIHI9ZS5jaGFyQ29kZUF0KHQrMSk7cj49NTYzMjAmJnI8PTU3MzQzJiYobj02NTUzNisobi01NTI5Njw8MTApKyhyLTU2MzIwKSl9cmV0dXJuIG59ZnVuY3Rpb24gZChlKXtmb3IodmFyIHQ9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgpLG49MCxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBpPVN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXQ/ZS5jb2RlUG9pbnRBdChyKTp1KGUscik7dFtuKytdPTI1NSZpfXJldHVybiB0fXQuTW96Q2h1bmtlZEFycmF5QnVmZmVyWEhSPWwsdC5zdHJpbmdUb0FycmF5QnVmZmVyPWR9LDg0OTpmdW5jdGlvbihlLHQpe3ZhciBuO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZih2b2lkIDAhPT1uKXJldHVybiBuO2lmKFhNTEh0dHBSZXF1ZXN0KXtuPW5ldyBYTUxIdHRwUmVxdWVzdDt0cnl7bi5vcGVuKFwiR0VUXCIsXCJodHRwczovL2xvY2FsaG9zdFwiKX1jYXRjaChlKXt9fXJldHVybiBufSgpO2lmKCF0KXJldHVybiExO3RyeXtyZXR1cm4gdC5yZXNwb25zZVR5cGU9ZSx0LnJlc3BvbnNlVHlwZT09PWV9Y2F0Y2goZSl7fXJldHVybiExfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZGV0ZWN0WEhST3ZlcnJpZGVNaW1lVHlwZVN1cHBvcnQ9dC5kZXRlY3RNb3pYSFJTdXBwb3J0PXQueGhyU3VwcG9ydHNSZXNwb25zZVR5cGU9dm9pZCAwLHQueGhyU3VwcG9ydHNSZXNwb25zZVR5cGU9cix0LmRldGVjdE1velhIUlN1cHBvcnQ9ZnVuY3Rpb24oKXtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgWE1MSHR0cFJlcXVlc3QmJnIoXCJtb3otY2h1bmtlZC1hcnJheWJ1ZmZlclwiKX0sdC5kZXRlY3RYSFJPdmVycmlkZU1pbWVUeXBlU3VwcG9ydD1mdW5jdGlvbigpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBYTUxIdHRwUmVxdWVzdCYmWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KFwib3ZlcnJpZGVNaW1lVHlwZVwiKX19LDU0MDpmdW5jdGlvbihlLHQsbil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5XZWJzb2NrZXRUcmFuc3BvcnQ9dm9pZCAwO3ZhciByLGk9bigzNDYpLG89big2MTcpOyFmdW5jdGlvbihlKXtlW2UuRklOSVNIX1NFTkQ9MV09XCJGSU5JU0hfU0VORFwifShyfHwocj17fSkpO3ZhciBhPW5ldyBVaW50OEFycmF5KFsxXSk7dC5XZWJzb2NrZXRUcmFuc3BvcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2UuZGVidWcmJmkuZGVidWcoXCJ3ZWJzb2NrZXRSZXF1ZXN0XCIsZSk7dmFyIHQsbj1mdW5jdGlvbihlKXtpZihcImh0dHBzOi8vXCI9PT1lLnN1YnN0cigwLDgpKXJldHVyblwid3NzOi8vXCIrZS5zdWJzdHIoOCk7aWYoXCJodHRwOi8vXCI9PT1lLnN1YnN0cigwLDcpKXJldHVyblwid3M6Ly9cIitlLnN1YnN0cig3KTt0aHJvdyBuZXcgRXJyb3IoXCJXZWJzb2NrZXQgdHJhbnNwb3J0IGNvbnN0cnVjdGVkIHdpdGggbm9uLWh0dHBzOi8vIG9yIGh0dHA6Ly8gaG9zdC5cIil9KGUudXJsKSxzPVtdO2Z1bmN0aW9uIGMoZSl7aWYoZT09PXIuRklOSVNIX1NFTkQpdC5zZW5kKGEpO2Vsc2V7dmFyIG49ZSxpPW5ldyBJbnQ4QXJyYXkobi5ieXRlTGVuZ3RoKzEpO2kuc2V0KG5ldyBVaW50OEFycmF5KFswXSkpLGkuc2V0KG4sMSksdC5zZW5kKGkpfX1yZXR1cm57c2VuZE1lc3NhZ2U6ZnVuY3Rpb24oZSl7dCYmdC5yZWFkeVN0YXRlIT09dC5DT05ORUNUSU5HP2MoZSk6cy5wdXNoKGUpfSxmaW5pc2hTZW5kOmZ1bmN0aW9uKCl7dCYmdC5yZWFkeVN0YXRlIT09dC5DT05ORUNUSU5HP2Moci5GSU5JU0hfU0VORCk6cy5wdXNoKHIuRklOSVNIX1NFTkQpfSxzdGFydDpmdW5jdGlvbihyKXsodD1uZXcgV2ViU29ja2V0KG4sW1wiZ3JwYy13ZWJzb2NrZXRzXCJdKSkuYmluYXJ5VHlwZT1cImFycmF5YnVmZmVyXCIsdC5vbm9wZW49ZnVuY3Rpb24oKXt2YXIgbjtlLmRlYnVnJiZpLmRlYnVnKFwid2Vic29ja2V0UmVxdWVzdC5vbm9wZW5cIiksdC5zZW5kKChuPVwiXCIsci5mb3JFYWNoKChmdW5jdGlvbihlLHQpe24rPWUrXCI6IFwiK3Quam9pbihcIiwgXCIpK1wiXFxyXFxuXCJ9KSksby5lbmNvZGVBU0NJSShuKSkpLHMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7YyhlKX0pKX0sdC5vbmNsb3NlPWZ1bmN0aW9uKHQpe2UuZGVidWcmJmkuZGVidWcoXCJ3ZWJzb2NrZXRSZXF1ZXN0Lm9uY2xvc2VcIix0KSxlLm9uRW5kKCl9LHQub25lcnJvcj1mdW5jdGlvbih0KXtlLmRlYnVnJiZpLmRlYnVnKFwid2Vic29ja2V0UmVxdWVzdC5vbmVycm9yXCIsdCl9LHQub25tZXNzYWdlPWZ1bmN0aW9uKHQpe2Uub25DaHVuayhuZXcgVWludDhBcnJheSh0LmRhdGEpKX19LGNhbmNlbDpmdW5jdGlvbigpe2UuZGVidWcmJmkuZGVidWcoXCJ3ZWJzb2NrZXQuYWJvcnRcIiksdC5jbG9zZSgpfX19KGUpfX19LDM1OmZ1bmN0aW9uKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVuYXJ5PXZvaWQgMDt2YXIgcj1uKDY1KSxpPW4oOTM0KTt0LnVuYXJ5PWZ1bmN0aW9uKGUsdCl7aWYoZS5yZXNwb25zZVN0cmVhbSl0aHJvdyBuZXcgRXJyb3IoXCIudW5hcnkgY2Fubm90IGJlIHVzZWQgd2l0aCBzZXJ2ZXItc3RyZWFtaW5nIG1ldGhvZHMuIFVzZSAuaW52b2tlIG9yIC5jbGllbnQgaW5zdGVhZC5cIik7aWYoZS5yZXF1ZXN0U3RyZWFtKXRocm93IG5ldyBFcnJvcihcIi51bmFyeSBjYW5ub3QgYmUgdXNlZCB3aXRoIGNsaWVudC1zdHJlYW1pbmcgbWV0aG9kcy4gVXNlIC5jbGllbnQgaW5zdGVhZC5cIik7dmFyIG49bnVsbCxvPW51bGwsYT1pLmNsaWVudChlLHtob3N0OnQuaG9zdCx0cmFuc3BvcnQ6dC50cmFuc3BvcnQsZGVidWc6dC5kZWJ1Z30pO3JldHVybiBhLm9uSGVhZGVycygoZnVuY3Rpb24oZSl7bj1lfSkpLGEub25NZXNzYWdlKChmdW5jdGlvbihlKXtvPWV9KSksYS5vbkVuZCgoZnVuY3Rpb24oZSxpLGEpe3Qub25FbmQoe3N0YXR1czplLHN0YXR1c01lc3NhZ2U6aSxoZWFkZXJzOm58fG5ldyByLk1ldGFkYXRhLG1lc3NhZ2U6byx0cmFpbGVyczphfSl9KSksYS5zdGFydCh0Lm1ldGFkYXRhKSxhLnNlbmQodC5yZXF1ZXN0KSxhLmZpbmlzaFNlbmQoKSx7Y2xvc2U6ZnVuY3Rpb24oKXthLmNsb3NlKCl9fX19LDg4MjpmdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZnJhbWVSZXF1ZXN0PXZvaWQgMCx0LmZyYW1lUmVxdWVzdD1mdW5jdGlvbihlKXt2YXIgdD1lLnNlcmlhbGl6ZUJpbmFyeSgpLG49bmV3IEFycmF5QnVmZmVyKHQuYnl0ZUxlbmd0aCs1KTtyZXR1cm4gbmV3IERhdGFWaWV3KG4sMSw0KS5zZXRVaW50MzIoMCx0Lmxlbmd0aCwhMSksbmV3IFVpbnQ4QXJyYXkobiw1KS5zZXQodCksbmV3IFVpbnQ4QXJyYXkobil9fX0sbj17fSxmdW5jdGlvbiBlKHIpe2lmKG5bcl0pcmV0dXJuIG5bcl0uZXhwb3J0czt2YXIgaT1uW3JdPXtleHBvcnRzOnt9fTtyZXR1cm4gdFtyXS5jYWxsKGkuZXhwb3J0cyxpLGkuZXhwb3J0cyxlKSxpLmV4cG9ydHN9KDYwNykpfSwzNDUzNzplPT57ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpLHI9MCxpPTIsbz0hMDtpPGFyZ3VtZW50cy5sZW5ndGg7KW5bcisrXT1hcmd1bWVudHNbaSsrXTtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGksYSl7bltyXT1mdW5jdGlvbihlKXtpZihvKWlmKG89ITEsZSlhKGUpO2Vsc2V7Zm9yKHZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpLG49MDtuPHQubGVuZ3RoOyl0W24rK109YXJndW1lbnRzW25dO2kuYXBwbHkobnVsbCx0KX19O3RyeXtlLmFwcGx5KHR8fG51bGwsbil9Y2F0Y2goZSl7byYmKG89ITEsYShlKSl9fSkpfX0sOTc0MTk6KGUsdCk9Pnt2YXIgbj10O24ubGVuZ3RoPWZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2lmKCF0KXJldHVybiAwO2Zvcih2YXIgbj0wOy0tdCU0PjEmJlwiPVwiPT09ZS5jaGFyQXQodCk7KSsrbjtyZXR1cm4gTWF0aC5jZWlsKDMqZS5sZW5ndGgpLzQtbn07Zm9yKHZhciByPW5ldyBBcnJheSg2NCksaT1uZXcgQXJyYXkoMTIzKSxvPTA7bzw2NDspaVtyW29dPW88MjY/bys2NTpvPDUyP28rNzE6bzw2Mj9vLTQ6by01OXw0M109bysrO24uZW5jb2RlPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIGksbz1udWxsLGE9W10scz0wLGM9MDt0PG47KXt2YXIgbD1lW3QrK107c3dpdGNoKGMpe2Nhc2UgMDphW3MrK109cltsPj4yXSxpPSgzJmwpPDw0LGM9MTticmVhaztjYXNlIDE6YVtzKytdPXJbaXxsPj40XSxpPSgxNSZsKTw8MixjPTI7YnJlYWs7Y2FzZSAyOmFbcysrXT1yW2l8bD4+Nl0sYVtzKytdPXJbNjMmbF0sYz0wfXM+ODE5MSYmKChvfHwobz1bXSkpLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsYSkpLHM9MCl9cmV0dXJuIGMmJihhW3MrK109cltpXSxhW3MrK109NjEsMT09PWMmJihhW3MrK109NjEpKSxvPyhzJiZvLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsYS5zbGljZSgwLHMpKSksby5qb2luKFwiXCIpKTpTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxhLnNsaWNlKDAscykpfTt2YXIgYT1cImludmFsaWQgZW5jb2RpbmdcIjtuLmRlY29kZT1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByLG89bixzPTAsYz0wO2M8ZS5sZW5ndGg7KXt2YXIgbD1lLmNoYXJDb2RlQXQoYysrKTtpZig2MT09PWwmJnM+MSlicmVhaztpZih2b2lkIDA9PT0obD1pW2xdKSl0aHJvdyBFcnJvcihhKTtzd2l0Y2gocyl7Y2FzZSAwOnI9bCxzPTE7YnJlYWs7Y2FzZSAxOnRbbisrXT1yPDwyfCg0OCZsKT4+NCxyPWwscz0yO2JyZWFrO2Nhc2UgMjp0W24rK109KDE1JnIpPDw0fCg2MCZsKT4+MixyPWwscz0zO2JyZWFrO2Nhc2UgMzp0W24rK109KDMmcik8PDZ8bCxzPTB9fWlmKDE9PT1zKXRocm93IEVycm9yKGEpO3JldHVybiBuLW99LG4udGVzdD1mdW5jdGlvbihlKXtyZXR1cm4vXig/OltBLVphLXowLTkrL117NH0pKig/OltBLVphLXowLTkrL117Mn09PXxbQS1aYS16MC05Ky9dezN9PSk/JC8udGVzdChlKX19LDE5MjExOmU9PntmdW5jdGlvbiB0KCl7dGhpcy5fbGlzdGVuZXJzPXt9fWUuZXhwb3J0cz10LHQucHJvdG90eXBlLm9uPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4odGhpcy5fbGlzdGVuZXJzW2VdfHwodGhpcy5fbGlzdGVuZXJzW2VdPVtdKSkucHVzaCh7Zm46dCxjdHg6bnx8dGhpc30pLHRoaXN9LHQucHJvdG90eXBlLm9mZj1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PWUpdGhpcy5fbGlzdGVuZXJzPXt9O2Vsc2UgaWYodm9pZCAwPT09dCl0aGlzLl9saXN0ZW5lcnNbZV09W107ZWxzZSBmb3IodmFyIG49dGhpcy5fbGlzdGVuZXJzW2VdLHI9MDtyPG4ubGVuZ3RoOyluW3JdLmZuPT09dD9uLnNwbGljZShyLDEpOisrcjtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9saXN0ZW5lcnNbZV07aWYodCl7Zm9yKHZhciBuPVtdLHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7KW4ucHVzaChhcmd1bWVudHNbcisrXSk7Zm9yKHI9MDtyPHQubGVuZ3RoOyl0W3JdLmZuLmFwcGx5KHRbcisrXS5jdHgsbil9cmV0dXJuIHRoaXN9fSwxMDk0NTplPT57ZnVuY3Rpb24gdChlKXtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgRmxvYXQzMkFycmF5P2Z1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheShbLTBdKSxuPW5ldyBVaW50OEFycmF5KHQuYnVmZmVyKSxyPTEyOD09PW5bM107ZnVuY3Rpb24gaShlLHIsaSl7dFswXT1lLHJbaV09blswXSxyW2krMV09blsxXSxyW2krMl09blsyXSxyW2krM109blszXX1mdW5jdGlvbiBvKGUscixpKXt0WzBdPWUscltpXT1uWzNdLHJbaSsxXT1uWzJdLHJbaSsyXT1uWzFdLHJbaSszXT1uWzBdfWZ1bmN0aW9uIGEoZSxyKXtyZXR1cm4gblswXT1lW3JdLG5bMV09ZVtyKzFdLG5bMl09ZVtyKzJdLG5bM109ZVtyKzNdLHRbMF19ZnVuY3Rpb24gcyhlLHIpe3JldHVybiBuWzNdPWVbcl0sblsyXT1lW3IrMV0sblsxXT1lW3IrMl0sblswXT1lW3IrM10sdFswXX1lLndyaXRlRmxvYXRMRT1yP2k6byxlLndyaXRlRmxvYXRCRT1yP286aSxlLnJlYWRGbG9hdExFPXI/YTpzLGUucmVhZEZsb2F0QkU9cj9zOmF9KCk6ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUsdCxuLHIpe3ZhciBpPXQ8MD8xOjA7aWYoaSYmKHQ9LXQpLDA9PT10KWUoMS90PjA/MDoyMTQ3NDgzNjQ4LG4scik7ZWxzZSBpZihpc05hTih0KSllKDIxNDMyODkzNDQsbixyKTtlbHNlIGlmKHQ+MzQwMjgyMzQ2NjM4NTI4ODZlMjIpZSgoaTw8MzF8MjEzOTA5NTA0MCk+Pj4wLG4scik7ZWxzZSBpZih0PDExNzU0OTQzNTA4MjIyODc1ZS01NCllKChpPDwzMXxNYXRoLnJvdW5kKHQvMTQwMTI5ODQ2NDMyNDgxN2UtNjApKT4+PjAsbixyKTtlbHNle3ZhciBvPU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjIpO2UoKGk8PDMxfG8rMTI3PDwyM3w4Mzg4NjA3Jk1hdGgucm91bmQodCpNYXRoLnBvdygyLC1vKSo4Mzg4NjA4KSk+Pj4wLG4scil9fWZ1bmN0aW9uIGEoZSx0LG4pe3ZhciByPWUodCxuKSxpPTIqKHI+PjMxKSsxLG89cj4+PjIzJjI1NSxhPTgzODg2MDcmcjtyZXR1cm4gMjU1PT09bz9hP05hTjppKigxLzApOjA9PT1vPzE0MDEyOTg0NjQzMjQ4MTdlLTYwKmkqYTppKk1hdGgucG93KDIsby0xNTApKihhKzgzODg2MDgpfWUud3JpdGVGbG9hdExFPXQuYmluZChudWxsLG4pLGUud3JpdGVGbG9hdEJFPXQuYmluZChudWxsLHIpLGUucmVhZEZsb2F0TEU9YS5iaW5kKG51bGwsaSksZS5yZWFkRmxvYXRCRT1hLmJpbmQobnVsbCxvKX0oKSxcInVuZGVmaW5lZFwiIT10eXBlb2YgRmxvYXQ2NEFycmF5P2Z1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0NjRBcnJheShbLTBdKSxuPW5ldyBVaW50OEFycmF5KHQuYnVmZmVyKSxyPTEyOD09PW5bN107ZnVuY3Rpb24gaShlLHIsaSl7dFswXT1lLHJbaV09blswXSxyW2krMV09blsxXSxyW2krMl09blsyXSxyW2krM109blszXSxyW2krNF09bls0XSxyW2krNV09bls1XSxyW2krNl09bls2XSxyW2krN109bls3XX1mdW5jdGlvbiBvKGUscixpKXt0WzBdPWUscltpXT1uWzddLHJbaSsxXT1uWzZdLHJbaSsyXT1uWzVdLHJbaSszXT1uWzRdLHJbaSs0XT1uWzNdLHJbaSs1XT1uWzJdLHJbaSs2XT1uWzFdLHJbaSs3XT1uWzBdfWZ1bmN0aW9uIGEoZSxyKXtyZXR1cm4gblswXT1lW3JdLG5bMV09ZVtyKzFdLG5bMl09ZVtyKzJdLG5bM109ZVtyKzNdLG5bNF09ZVtyKzRdLG5bNV09ZVtyKzVdLG5bNl09ZVtyKzZdLG5bN109ZVtyKzddLHRbMF19ZnVuY3Rpb24gcyhlLHIpe3JldHVybiBuWzddPWVbcl0sbls2XT1lW3IrMV0sbls1XT1lW3IrMl0sbls0XT1lW3IrM10sblszXT1lW3IrNF0sblsyXT1lW3IrNV0sblsxXT1lW3IrNl0sblswXT1lW3IrN10sdFswXX1lLndyaXRlRG91YmxlTEU9cj9pOm8sZS53cml0ZURvdWJsZUJFPXI/bzppLGUucmVhZERvdWJsZUxFPXI/YTpzLGUucmVhZERvdWJsZUJFPXI/czphfSgpOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHQsbixyLGksbyl7dmFyIGE9cjwwPzE6MDtpZihhJiYocj0tciksMD09PXIpZSgwLGksbyt0KSxlKDEvcj4wPzA6MjE0NzQ4MzY0OCxpLG8rbik7ZWxzZSBpZihpc05hTihyKSllKDAsaSxvK3QpLGUoMjE0Njk1OTM2MCxpLG8rbik7ZWxzZSBpZihyPjE3OTc2OTMxMzQ4NjIzMTU3ZTI5MillKDAsaSxvK3QpLGUoKGE8PDMxfDIxNDY0MzUwNzIpPj4+MCxpLG8rbik7ZWxzZXt2YXIgcztpZihyPDIyMjUwNzM4NTg1MDcyMDE0ZS0zMjQpZSgocz1yLzVlLTMyNCk+Pj4wLGksbyt0KSxlKChhPDwzMXxzLzQyOTQ5NjcyOTYpPj4+MCxpLG8rbik7ZWxzZXt2YXIgYz1NYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGguTE4yKTsxMDI0PT09YyYmKGM9MTAyMyksZSg0NTAzNTk5NjI3MzcwNDk2KihzPXIqTWF0aC5wb3coMiwtYykpPj4+MCxpLG8rdCksZSgoYTw8MzF8YysxMDIzPDwyMHwxMDQ4NTc2KnMmMTA0ODU3NSk+Pj4wLGksbytuKX19fWZ1bmN0aW9uIGEoZSx0LG4scixpKXt2YXIgbz1lKHIsaSt0KSxhPWUocixpK24pLHM9MiooYT4+MzEpKzEsYz1hPj4+MjAmMjA0NyxsPTQyOTQ5NjcyOTYqKDEwNDg1NzUmYSkrbztyZXR1cm4gMjA0Nz09PWM/bD9OYU46cyooMS8wKTowPT09Yz81ZS0zMjQqcypsOnMqTWF0aC5wb3coMixjLTEwNzUpKihsKzQ1MDM1OTk2MjczNzA0OTYpfWUud3JpdGVEb3VibGVMRT10LmJpbmQobnVsbCxuLDAsNCksZS53cml0ZURvdWJsZUJFPXQuYmluZChudWxsLHIsNCwwKSxlLnJlYWREb3VibGVMRT1hLmJpbmQobnVsbCxpLDAsNCksZS5yZWFkRG91YmxlQkU9YS5iaW5kKG51bGwsbyw0LDApfSgpLGV9ZnVuY3Rpb24gbihlLHQsbil7dFtuXT0yNTUmZSx0W24rMV09ZT4+PjgmMjU1LHRbbisyXT1lPj4+MTYmMjU1LHRbbiszXT1lPj4+MjR9ZnVuY3Rpb24gcihlLHQsbil7dFtuXT1lPj4+MjQsdFtuKzFdPWU+Pj4xNiYyNTUsdFtuKzJdPWU+Pj44JjI1NSx0W24rM109MjU1JmV9ZnVuY3Rpb24gaShlLHQpe3JldHVybihlW3RdfGVbdCsxXTw8OHxlW3QrMl08PDE2fGVbdCszXTw8MjQpPj4+MH1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuKGVbdF08PDI0fGVbdCsxXTw8MTZ8ZVt0KzJdPDw4fGVbdCszXSk+Pj4wfWUuZXhwb3J0cz10KHQpfSw3NjY2MjplPT57ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1ufHw4MTkyLGk9cj4+PjEsbz1udWxsLGE9cjtyZXR1cm4gZnVuY3Rpb24obil7aWYobjwxfHxuPmkpcmV0dXJuIGUobik7YStuPnImJihvPWUociksYT0wKTt2YXIgcz10LmNhbGwobyxhLGErPW4pO3JldHVybiA3JmEmJihhPTErKDd8YSkpLHN9fX0sOTQ5OTc6KGUsdCk9Pnt2YXIgbj10O24ubGVuZ3RoPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49MCxyPTA7cjxlLmxlbmd0aDsrK3IpKG49ZS5jaGFyQ29kZUF0KHIpKTwxMjg/dCs9MTpuPDIwNDg/dCs9Mjo1NTI5Nj09KDY0NTEyJm4pJiY1NjMyMD09KDY0NTEyJmUuY2hhckNvZGVBdChyKzEpKT8oKytyLHQrPTQpOnQrPTM7cmV0dXJuIHR9LG4ucmVhZD1mdW5jdGlvbihlLHQsbil7aWYobi10PDEpcmV0dXJuXCJcIjtmb3IodmFyIHIsaT1udWxsLG89W10sYT0wO3Q8bjspKHI9ZVt0KytdKTwxMjg/b1thKytdPXI6cj4xOTEmJnI8MjI0P29bYSsrXT0oMzEmcik8PDZ8NjMmZVt0KytdOnI+MjM5JiZyPDM2NT8ocj0oKDcmcik8PDE4fCg2MyZlW3QrK10pPDwxMnwoNjMmZVt0KytdKTw8Nnw2MyZlW3QrK10pLTY1NTM2LG9bYSsrXT01NTI5Nisocj4+MTApLG9bYSsrXT01NjMyMCsoMTAyMyZyKSk6b1thKytdPSgxNSZyKTw8MTJ8KDYzJmVbdCsrXSk8PDZ8NjMmZVt0KytdLGE+ODE5MSYmKChpfHwoaT1bXSkpLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsbykpLGE9MCk7cmV0dXJuIGk/KGEmJmkucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxvLnNsaWNlKDAsYSkpKSxpLmpvaW4oXCJcIikpOlN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLG8uc2xpY2UoMCxhKSl9LG4ud3JpdGU9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcixpLG89bixhPTA7YTxlLmxlbmd0aDsrK2EpKHI9ZS5jaGFyQ29kZUF0KGEpKTwxMjg/dFtuKytdPXI6cjwyMDQ4Pyh0W24rK109cj4+NnwxOTIsdFtuKytdPTYzJnJ8MTI4KTo1NTI5Nj09KDY0NTEyJnIpJiY1NjMyMD09KDY0NTEyJihpPWUuY2hhckNvZGVBdChhKzEpKSk/KHI9NjU1MzYrKCgxMDIzJnIpPDwxMCkrKDEwMjMmaSksKythLHRbbisrXT1yPj4xOHwyNDAsdFtuKytdPXI+PjEyJjYzfDEyOCx0W24rK109cj4+NiY2M3wxMjgsdFtuKytdPTYzJnJ8MTI4KToodFtuKytdPXI+PjEyfDIyNCx0W24rK109cj4+NiY2M3wxMjgsdFtuKytdPTYzJnJ8MTI4KTtyZXR1cm4gbi1vfX0sMTI1OTk6KGUsdCxuKT0+e2Z1bmN0aW9uIHIoKXtyZXR1cm4gcj1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBpO24uZCh0LHtKMDooKT0+cyxMWDooKT0+QSxSUTooKT0+RCxXSzooKT0+eCxabjooKT0+ayxacTooKT0+TixhVTooKT0+aSxjUDooKT0+ZixmcDooKT0+bSxsWDooKT0+YSxwQzooKT0+d30pLGZ1bmN0aW9uKGUpe2UuUG9wPVwiUE9QXCIsZS5QdXNoPVwiUFVTSFwiLGUuUmVwbGFjZT1cIlJFUExBQ0VcIn0oaXx8KGk9e30pKTtjb25zdCBvPVwicG9wc3RhdGVcIjtmdW5jdGlvbiBhKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT17fSksZnVuY3Rpb24oZSx0LG4sYSl7dm9pZCAwPT09YSYmKGE9e30pO2xldHt3aW5kb3c6Yz1kb2N1bWVudC5kZWZhdWx0Vmlldyx2NUNvbXBhdDpmPSExfT1hLHA9Yy5oaXN0b3J5LG09aS5Qb3AsaD1udWxsLHY9ZygpO2Z1bmN0aW9uIGcoKXtyZXR1cm4ocC5zdGF0ZXx8e2lkeDpudWxsfSkuaWR4fWZ1bmN0aW9uIHkoKXttPWkuUG9wO2xldCBlPWcoKSx0PW51bGw9PWU/bnVsbDplLXY7dj1lLGgmJmgoe2FjdGlvbjptLGxvY2F0aW9uOl8ubG9jYXRpb24sZGVsdGE6dH0pfWZ1bmN0aW9uIEUoZSl7bGV0IHQ9XCJudWxsXCIhPT1jLmxvY2F0aW9uLm9yaWdpbj9jLmxvY2F0aW9uLm9yaWdpbjpjLmxvY2F0aW9uLmhyZWYsbj1cInN0cmluZ1wiPT10eXBlb2YgZT9lOmQoZSk7cmV0dXJuIHModCxcIk5vIHdpbmRvdy5sb2NhdGlvbi4ob3JpZ2lufGhyZWYpIGF2YWlsYWJsZSB0byBjcmVhdGUgVVJMIGZvciBocmVmOiBcIituKSxuZXcgVVJMKG4sdCl9bnVsbD09diYmKHY9MCxwLnJlcGxhY2VTdGF0ZShyKHt9LHAuc3RhdGUse2lkeDp2fSksXCJcIikpO2xldCBfPXtnZXQgYWN0aW9uKCl7cmV0dXJuIG19LGdldCBsb2NhdGlvbigpe3JldHVybiBmdW5jdGlvbihlLHQpe2xldHtwYXRobmFtZTpuLHNlYXJjaDpyLGhhc2g6aX09ZS5sb2NhdGlvbjtyZXR1cm4gdShcIlwiLHtwYXRobmFtZTpuLHNlYXJjaDpyLGhhc2g6aX0sdC5zdGF0ZSYmdC5zdGF0ZS51c3J8fG51bGwsdC5zdGF0ZSYmdC5zdGF0ZS5rZXl8fFwiZGVmYXVsdFwiKX0oYyxwKX0sbGlzdGVuKGUpe2lmKGgpdGhyb3cgbmV3IEVycm9yKFwiQSBoaXN0b3J5IG9ubHkgYWNjZXB0cyBvbmUgYWN0aXZlIGxpc3RlbmVyXCIpO3JldHVybiBjLmFkZEV2ZW50TGlzdGVuZXIobyx5KSxoPWUsKCk9PntjLnJlbW92ZUV2ZW50TGlzdGVuZXIobyx5KSxoPW51bGx9fSxjcmVhdGVIcmVmOmU9PmZ1bmN0aW9uKGUsdCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQ/dDpkKHQpfSgwLGUpLGNyZWF0ZVVSTDpFLGVuY29kZUxvY2F0aW9uKGUpe2xldCB0PUUoZSk7cmV0dXJue3BhdGhuYW1lOnQucGF0aG5hbWUsc2VhcmNoOnQuc2VhcmNoLGhhc2g6dC5oYXNofX0scHVzaDpmdW5jdGlvbihlLHQpe209aS5QdXNoO2xldCBuPXUoXy5sb2NhdGlvbixlLHQpO3Y9ZygpKzE7bGV0IHI9bChuLHYpLG89Xy5jcmVhdGVIcmVmKG4pO3RyeXtwLnB1c2hTdGF0ZShyLFwiXCIsbyl9Y2F0Y2goZSl7Yy5sb2NhdGlvbi5hc3NpZ24obyl9ZiYmaCYmaCh7YWN0aW9uOm0sbG9jYXRpb246Xy5sb2NhdGlvbixkZWx0YToxfSl9LHJlcGxhY2U6ZnVuY3Rpb24oZSx0KXttPWkuUmVwbGFjZTtsZXQgbj11KF8ubG9jYXRpb24sZSx0KTt2PWcoKTtsZXQgcj1sKG4sdiksbz1fLmNyZWF0ZUhyZWYobik7cC5yZXBsYWNlU3RhdGUocixcIlwiLG8pLGYmJmgmJmgoe2FjdGlvbjptLGxvY2F0aW9uOl8ubG9jYXRpb24sZGVsdGE6MH0pfSxnbzplPT5wLmdvKGUpfTtyZXR1cm4gX30oMCwwLDAsZSl9ZnVuY3Rpb24gcyhlLHQpe2lmKCExPT09ZXx8bnVsbD09ZSl0aHJvdyBuZXcgRXJyb3IodCl9ZnVuY3Rpb24gYyhlLHQpe2lmKCFlKXtcInVuZGVmaW5lZFwiIT10eXBlb2YgY29uc29sZSYmY29uc29sZS53YXJuKHQpO3RyeXt0aHJvdyBuZXcgRXJyb3IodCl9Y2F0Y2goZSl7fX19ZnVuY3Rpb24gbChlLHQpe3JldHVybnt1c3I6ZS5zdGF0ZSxrZXk6ZS5rZXksaWR4OnR9fWZ1bmN0aW9uIHUoZSx0LG4saSl7cmV0dXJuIHZvaWQgMD09PW4mJihuPW51bGwpLHIoe3BhdGhuYW1lOlwic3RyaW5nXCI9PXR5cGVvZiBlP2U6ZS5wYXRobmFtZSxzZWFyY2g6XCJcIixoYXNoOlwiXCJ9LFwic3RyaW5nXCI9PXR5cGVvZiB0P2YodCk6dCx7c3RhdGU6bixrZXk6dCYmdC5rZXl8fGl8fE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLDgpfSl9ZnVuY3Rpb24gZChlKXtsZXR7cGF0aG5hbWU6dD1cIi9cIixzZWFyY2g6bj1cIlwiLGhhc2g6cj1cIlwifT1lO3JldHVybiBuJiZcIj9cIiE9PW4mJih0Kz1cIj9cIj09PW4uY2hhckF0KDApP246XCI/XCIrbiksciYmXCIjXCIhPT1yJiYodCs9XCIjXCI9PT1yLmNoYXJBdCgwKT9yOlwiI1wiK3IpLHR9ZnVuY3Rpb24gZihlKXtsZXQgdD17fTtpZihlKXtsZXQgbj1lLmluZGV4T2YoXCIjXCIpO24+PTAmJih0Lmhhc2g9ZS5zdWJzdHIobiksZT1lLnN1YnN0cigwLG4pKTtsZXQgcj1lLmluZGV4T2YoXCI/XCIpO3I+PTAmJih0LnNlYXJjaD1lLnN1YnN0cihyKSxlPWUuc3Vic3RyKDAscikpLGUmJih0LnBhdGhuYW1lPWUpfXJldHVybiB0fXZhciBwO2Z1bmN0aW9uIG0oZSx0LG4pe3ZvaWQgMD09PW4mJihuPVwiL1wiKTtsZXQgcj1rKChcInN0cmluZ1wiPT10eXBlb2YgdD9mKHQpOnQpLnBhdGhuYW1lfHxcIi9cIixuKTtpZihudWxsPT1yKXJldHVybiBudWxsO2xldCBpPWgoZSk7IWZ1bmN0aW9uKGUpe2Uuc29ydCgoKGUsdCk9PmUuc2NvcmUhPT10LnNjb3JlP3Quc2NvcmUtZS5zY29yZTpmdW5jdGlvbihlLHQpe3JldHVybiBlLmxlbmd0aD09PXQubGVuZ3RoJiZlLnNsaWNlKDAsLTEpLmV2ZXJ5KCgoZSxuKT0+ZT09PXRbbl0pKT9lW2UubGVuZ3RoLTFdLXRbdC5sZW5ndGgtMV06MH0oZS5yb3V0ZXNNZXRhLm1hcCgoZT0+ZS5jaGlsZHJlbkluZGV4KSksdC5yb3V0ZXNNZXRhLm1hcCgoZT0+ZS5jaGlsZHJlbkluZGV4KSkpKSl9KGkpO2xldCBvPW51bGw7Zm9yKGxldCBlPTA7bnVsbD09byYmZTxpLmxlbmd0aDsrK2Upbz1DKGlbZV0sUihyKSk7cmV0dXJuIG99ZnVuY3Rpb24gaChlLHQsbixyKXt2b2lkIDA9PT10JiYodD1bXSksdm9pZCAwPT09biYmKG49W10pLHZvaWQgMD09PXImJihyPVwiXCIpO2xldCBpPShlLGksbyk9PntsZXQgYT17cmVsYXRpdmVQYXRoOnZvaWQgMD09PW8/ZS5wYXRofHxcIlwiOm8sY2FzZVNlbnNpdGl2ZTohMD09PWUuY2FzZVNlbnNpdGl2ZSxjaGlsZHJlbkluZGV4Omkscm91dGU6ZX07YS5yZWxhdGl2ZVBhdGguc3RhcnRzV2l0aChcIi9cIikmJihzKGEucmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgociksJ0Fic29sdXRlIHJvdXRlIHBhdGggXCInK2EucmVsYXRpdmVQYXRoKydcIiBuZXN0ZWQgdW5kZXIgcGF0aCBcIicrcisnXCIgaXMgbm90IHZhbGlkLiBBbiBhYnNvbHV0ZSBjaGlsZCByb3V0ZSBwYXRoIG11c3Qgc3RhcnQgd2l0aCB0aGUgY29tYmluZWQgcGF0aCBvZiBhbGwgaXRzIHBhcmVudCByb3V0ZXMuJyksYS5yZWxhdGl2ZVBhdGg9YS5yZWxhdGl2ZVBhdGguc2xpY2Uoci5sZW5ndGgpKTtsZXQgYz1EKFtyLGEucmVsYXRpdmVQYXRoXSksbD1uLmNvbmNhdChhKTtlLmNoaWxkcmVuJiZlLmNoaWxkcmVuLmxlbmd0aD4wJiYocyghMCE9PWUuaW5kZXgsJ0luZGV4IHJvdXRlcyBtdXN0IG5vdCBoYXZlIGNoaWxkIHJvdXRlcy4gUGxlYXNlIHJlbW92ZSBhbGwgY2hpbGQgcm91dGVzIGZyb20gcm91dGUgcGF0aCBcIicrYysnXCIuJyksaChlLmNoaWxkcmVuLHQsbCxjKSksKG51bGwhPWUucGF0aHx8ZS5pbmRleCkmJnQucHVzaCh7cGF0aDpjLHNjb3JlOlQoYyxlLmluZGV4KSxyb3V0ZXNNZXRhOmx9KX07cmV0dXJuIGUuZm9yRWFjaCgoKGUsdCk9Pnt2YXIgbjtpZihcIlwiIT09ZS5wYXRoJiZudWxsIT0obj1lLnBhdGgpJiZuLmluY2x1ZGVzKFwiP1wiKSlmb3IobGV0IG4gb2YgdihlLnBhdGgpKWkoZSx0LG4pO2Vsc2UgaShlLHQpfSkpLHR9ZnVuY3Rpb24gdihlKXtsZXQgdD1lLnNwbGl0KFwiL1wiKTtpZigwPT09dC5sZW5ndGgpcmV0dXJuW107bGV0W24sLi4ucl09dCxpPW4uZW5kc1dpdGgoXCI/XCIpLG89bi5yZXBsYWNlKC9cXD8kLyxcIlwiKTtpZigwPT09ci5sZW5ndGgpcmV0dXJuIGk/W28sXCJcIl06W29dO2xldCBhPXYoci5qb2luKFwiL1wiKSkscz1bXTtyZXR1cm4gcy5wdXNoKC4uLmEubWFwKChlPT5cIlwiPT09ZT9vOltvLGVdLmpvaW4oXCIvXCIpKSkpLGkmJnMucHVzaCguLi5hKSxzLm1hcCgodD0+ZS5zdGFydHNXaXRoKFwiL1wiKSYmXCJcIj09PXQ/XCIvXCI6dCkpfSFmdW5jdGlvbihlKXtlLmRhdGE9XCJkYXRhXCIsZS5kZWZlcnJlZD1cImRlZmVycmVkXCIsZS5yZWRpcmVjdD1cInJlZGlyZWN0XCIsZS5lcnJvcj1cImVycm9yXCJ9KHB8fChwPXt9KSksbmV3IFNldChbXCJsYXp5XCIsXCJjYXNlU2Vuc2l0aXZlXCIsXCJwYXRoXCIsXCJpZFwiLFwiaW5kZXhcIixcImNoaWxkcmVuXCJdKTtjb25zdCBnPS9eOlxcdyskLyx5PTMsRT0yLF89MSxJPTEwLFM9LTIsYj1lPT5cIipcIj09PWU7ZnVuY3Rpb24gVChlLHQpe2xldCBuPWUuc3BsaXQoXCIvXCIpLHI9bi5sZW5ndGg7cmV0dXJuIG4uc29tZShiKSYmKHIrPVMpLHQmJihyKz1FKSxuLmZpbHRlcigoZT0+IWIoZSkpKS5yZWR1Y2UoKChlLHQpPT5lKyhnLnRlc3QodCk/eTpcIlwiPT09dD9fOkkpKSxyKX1mdW5jdGlvbiBDKGUsdCl7bGV0e3JvdXRlc01ldGE6bn09ZSxyPXt9LGk9XCIvXCIsbz1bXTtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoOysrZSl7bGV0IGE9bltlXSxzPWU9PT1uLmxlbmd0aC0xLGM9XCIvXCI9PT1pP3Q6dC5zbGljZShpLmxlbmd0aCl8fFwiL1wiLGw9QSh7cGF0aDphLnJlbGF0aXZlUGF0aCxjYXNlU2Vuc2l0aXZlOmEuY2FzZVNlbnNpdGl2ZSxlbmQ6c30sYyk7aWYoIWwpcmV0dXJuIG51bGw7T2JqZWN0LmFzc2lnbihyLGwucGFyYW1zKTtsZXQgdT1hLnJvdXRlO28ucHVzaCh7cGFyYW1zOnIscGF0aG5hbWU6RChbaSxsLnBhdGhuYW1lXSkscGF0aG5hbWVCYXNlOlAoRChbaSxsLnBhdGhuYW1lQmFzZV0pKSxyb3V0ZTp1fSksXCIvXCIhPT1sLnBhdGhuYW1lQmFzZSYmKGk9RChbaSxsLnBhdGhuYW1lQmFzZV0pKX1yZXR1cm4gb31mdW5jdGlvbiBBKGUsdCl7XCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPXtwYXRoOmUsY2FzZVNlbnNpdGl2ZTohMSxlbmQ6ITB9KTtsZXRbbixyXT1mdW5jdGlvbihlLHQsbil7dm9pZCAwPT09dCYmKHQ9ITEpLHZvaWQgMD09PW4mJihuPSEwKSxjKFwiKlwiPT09ZXx8IWUuZW5kc1dpdGgoXCIqXCIpfHxlLmVuZHNXaXRoKFwiLypcIiksJ1JvdXRlIHBhdGggXCInK2UrJ1wiIHdpbGwgYmUgdHJlYXRlZCBhcyBpZiBpdCB3ZXJlIFwiJytlLnJlcGxhY2UoL1xcKiQvLFwiLypcIikrJ1wiIGJlY2F1c2UgdGhlIGAqYCBjaGFyYWN0ZXIgbXVzdCBhbHdheXMgZm9sbG93IGEgYC9gIGluIHRoZSBwYXR0ZXJuLiBUbyBnZXQgcmlkIG9mIHRoaXMgd2FybmluZywgcGxlYXNlIGNoYW5nZSB0aGUgcm91dGUgcGF0aCB0byBcIicrZS5yZXBsYWNlKC9cXCokLyxcIi8qXCIpKydcIi4nKTtsZXQgcj1bXSxpPVwiXlwiK2UucmVwbGFjZSgvXFwvKlxcKj8kLyxcIlwiKS5yZXBsYWNlKC9eXFwvKi8sXCIvXCIpLnJlcGxhY2UoL1tcXFxcLiorXiQ/e318KClbXFxdXS9nLFwiXFxcXCQmXCIpLnJlcGxhY2UoL1xcLzooXFx3KykvZywoKGUsdCk9PihyLnB1c2godCksXCIvKFteXFxcXC9dKylcIikpKTtyZXR1cm4gZS5lbmRzV2l0aChcIipcIik/KHIucHVzaChcIipcIiksaSs9XCIqXCI9PT1lfHxcIi8qXCI9PT1lP1wiKC4qKSRcIjpcIig/OlxcXFwvKC4rKXxcXFxcLyopJFwiKTpuP2krPVwiXFxcXC8qJFwiOlwiXCIhPT1lJiZcIi9cIiE9PWUmJihpKz1cIig/Oig/PVxcXFwvfCQpKVwiKSxbbmV3IFJlZ0V4cChpLHQ/dm9pZCAwOlwiaVwiKSxyXX0oZS5wYXRoLGUuY2FzZVNlbnNpdGl2ZSxlLmVuZCksaT10Lm1hdGNoKG4pO2lmKCFpKXJldHVybiBudWxsO2xldCBvPWlbMF0sYT1vLnJlcGxhY2UoLyguKVxcLyskLyxcIiQxXCIpLHM9aS5zbGljZSgxKTtyZXR1cm57cGFyYW1zOnIucmVkdWNlKCgoZSx0LG4pPT57aWYoXCIqXCI9PT10KXtsZXQgZT1zW25dfHxcIlwiO2E9by5zbGljZSgwLG8ubGVuZ3RoLWUubGVuZ3RoKS5yZXBsYWNlKC8oLilcXC8rJC8sXCIkMVwiKX1yZXR1cm4gZVt0XT1mdW5jdGlvbihlLHQpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGUpfWNhdGNoKG4pe3JldHVybiBjKCExLCdUaGUgdmFsdWUgZm9yIHRoZSBVUkwgcGFyYW0gXCInK3QrJ1wiIHdpbGwgbm90IGJlIGRlY29kZWQgYmVjYXVzZSB0aGUgc3RyaW5nIFwiJytlKydcIiBpcyBhIG1hbGZvcm1lZCBVUkwgc2VnbWVudC4gVGhpcyBpcyBwcm9iYWJseSBkdWUgdG8gYSBiYWQgcGVyY2VudCBlbmNvZGluZyAoJytuK1wiKS5cIiksZX19KHNbbl18fFwiXCIsdCksZX0pLHt9KSxwYXRobmFtZTpvLHBhdGhuYW1lQmFzZTphLHBhdHRlcm46ZX19ZnVuY3Rpb24gUihlKXt0cnl7cmV0dXJuIGRlY29kZVVSSShlKX1jYXRjaCh0KXtyZXR1cm4gYyghMSwnVGhlIFVSTCBwYXRoIFwiJytlKydcIiBjb3VsZCBub3QgYmUgZGVjb2RlZCBiZWNhdXNlIGl0IGlzIGlzIGEgbWFsZm9ybWVkIFVSTCBzZWdtZW50LiBUaGlzIGlzIHByb2JhYmx5IGR1ZSB0byBhIGJhZCBwZXJjZW50IGVuY29kaW5nICgnK3QrXCIpLlwiKSxlfX1mdW5jdGlvbiBrKGUsdCl7aWYoXCIvXCI9PT10KXJldHVybiBlO2lmKCFlLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCh0LnRvTG93ZXJDYXNlKCkpKXJldHVybiBudWxsO2xldCBuPXQuZW5kc1dpdGgoXCIvXCIpP3QubGVuZ3RoLTE6dC5sZW5ndGgscj1lLmNoYXJBdChuKTtyZXR1cm4gciYmXCIvXCIhPT1yP251bGw6ZS5zbGljZShuKXx8XCIvXCJ9ZnVuY3Rpb24gTyhlLHQsbixyKXtyZXR1cm5cIkNhbm5vdCBpbmNsdWRlIGEgJ1wiK2UrXCInIGNoYXJhY3RlciBpbiBhIG1hbnVhbGx5IHNwZWNpZmllZCBgdG8uXCIrdCtcImAgZmllbGQgW1wiK0pTT04uc3RyaW5naWZ5KHIpK1wiXS4gIFBsZWFzZSBzZXBhcmF0ZSBpdCBvdXQgdG8gdGhlIGB0by5cIituKydgIGZpZWxkLiBBbHRlcm5hdGl2ZWx5IHlvdSBtYXkgcHJvdmlkZSB0aGUgZnVsbCBwYXRoIGFzIGEgc3RyaW5nIGluIDxMaW5rIHRvPVwiLi4uXCI+IGFuZCB0aGUgcm91dGVyIHdpbGwgcGFyc2UgaXQgZm9yIHlvdS4nfWZ1bmN0aW9uIE4oZSl7cmV0dXJuIGUuZmlsdGVyKCgoZSx0KT0+MD09PXR8fGUucm91dGUucGF0aCYmZS5yb3V0ZS5wYXRoLmxlbmd0aD4wKSl9ZnVuY3Rpb24gdyhlLHQsbixpKXtsZXQgbzt2b2lkIDA9PT1pJiYoaT0hMSksXCJzdHJpbmdcIj09dHlwZW9mIGU/bz1mKGUpOihvPXIoe30sZSkscyghby5wYXRobmFtZXx8IW8ucGF0aG5hbWUuaW5jbHVkZXMoXCI/XCIpLE8oXCI/XCIsXCJwYXRobmFtZVwiLFwic2VhcmNoXCIsbykpLHMoIW8ucGF0aG5hbWV8fCFvLnBhdGhuYW1lLmluY2x1ZGVzKFwiI1wiKSxPKFwiI1wiLFwicGF0aG5hbWVcIixcImhhc2hcIixvKSkscyghby5zZWFyY2h8fCFvLnNlYXJjaC5pbmNsdWRlcyhcIiNcIiksTyhcIiNcIixcInNlYXJjaFwiLFwiaGFzaFwiLG8pKSk7bGV0IGEsYz1cIlwiPT09ZXx8XCJcIj09PW8ucGF0aG5hbWUsbD1jP1wiL1wiOm8ucGF0aG5hbWU7aWYoaXx8bnVsbD09bClhPW47ZWxzZXtsZXQgZT10Lmxlbmd0aC0xO2lmKGwuc3RhcnRzV2l0aChcIi4uXCIpKXtsZXQgdD1sLnNwbGl0KFwiL1wiKTtmb3IoO1wiLi5cIj09PXRbMF07KXQuc2hpZnQoKSxlLT0xO28ucGF0aG5hbWU9dC5qb2luKFwiL1wiKX1hPWU+PTA/dFtlXTpcIi9cIn1sZXQgdT1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PVwiL1wiKTtsZXR7cGF0aG5hbWU6bixzZWFyY2g6cj1cIlwiLGhhc2g6aT1cIlwifT1cInN0cmluZ1wiPT10eXBlb2YgZT9mKGUpOmUsbz1uP24uc3RhcnRzV2l0aChcIi9cIik/bjpmdW5jdGlvbihlLHQpe2xldCBuPXQucmVwbGFjZSgvXFwvKyQvLFwiXCIpLnNwbGl0KFwiL1wiKTtyZXR1cm4gZS5zcGxpdChcIi9cIikuZm9yRWFjaCgoZT0+e1wiLi5cIj09PWU/bi5sZW5ndGg+MSYmbi5wb3AoKTpcIi5cIiE9PWUmJm4ucHVzaChlKX0pKSxuLmxlbmd0aD4xP24uam9pbihcIi9cIik6XCIvXCJ9KG4sdCk6dDtyZXR1cm57cGF0aG5hbWU6byxzZWFyY2g6TShyKSxoYXNoOkwoaSl9fShvLGEpLGQ9bCYmXCIvXCIhPT1sJiZsLmVuZHNXaXRoKFwiL1wiKSxwPShjfHxcIi5cIj09PWwpJiZuLmVuZHNXaXRoKFwiL1wiKTtyZXR1cm4gdS5wYXRobmFtZS5lbmRzV2l0aChcIi9cIil8fCFkJiYhcHx8KHUucGF0aG5hbWUrPVwiL1wiKSx1fWNvbnN0IEQ9ZT0+ZS5qb2luKFwiL1wiKS5yZXBsYWNlKC9cXC9cXC8rL2csXCIvXCIpLFA9ZT0+ZS5yZXBsYWNlKC9cXC8rJC8sXCJcIikucmVwbGFjZSgvXlxcLyovLFwiL1wiKSxNPWU9PmUmJlwiP1wiIT09ZT9lLnN0YXJ0c1dpdGgoXCI/XCIpP2U6XCI/XCIrZTpcIlwiLEw9ZT0+ZSYmXCIjXCIhPT1lP2Uuc3RhcnRzV2l0aChcIiNcIik/ZTpcIiNcIitlOlwiXCI7Y2xhc3MgVSBleHRlbmRzIEVycm9ye31mdW5jdGlvbiB4KGUpe3JldHVybiBudWxsIT1lJiZcIm51bWJlclwiPT10eXBlb2YgZS5zdGF0dXMmJlwic3RyaW5nXCI9PXR5cGVvZiBlLnN0YXR1c1RleHQmJlwiYm9vbGVhblwiPT10eXBlb2YgZS5pbnRlcm5hbCYmXCJkYXRhXCJpbiBlfWNvbnN0IEY9W1wicG9zdFwiLFwicHV0XCIsXCJwYXRjaFwiLFwiZGVsZXRlXCJdLEI9KG5ldyBTZXQoRiksW1wiZ2V0XCIsLi4uRl0pO25ldyBTZXQoQiksbmV3IFNldChbMzAxLDMwMiwzMDMsMzA3LDMwOF0pLG5ldyBTZXQoWzMwNywzMDhdKSxcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ2b2lkIDAhPT13aW5kb3cuZG9jdW1lbnQmJndpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50LFN5bWJvbChcImRlZmVycmVkXCIpfSwyNDMyNjooZSx0LG4pPT57bi5kKHQse2g6KCk9PnJ9KTt2YXIgcj1cInVuZGVmaW5lZFwiPT10eXBlb2YgX19TRU5UUllfREVCVUdfX3x8X19TRU5UUllfREVCVUdfX30sNTg4MjY6KGUsdCxuKT0+e24uZCh0LHtTMTooKT0+SmUsanA6KCk9PiRlfSk7dmFyIHI9big2Njg1NiksaT1uKDUxNDIxKSxvPW4oMTIzNDMpLGE9big2Mjg0NCkscz1uKDU3MzIxKSxjPVwidW5kZWZpbmVkXCI9PXR5cGVvZiBfX1NFTlRSWV9ERUJVR19ffHxfX1NFTlRSWV9ERUJVR19fLGw9Wy9eU2NyaXB0IGVycm9yXFwuPyQvLC9eSmF2YXNjcmlwdCBlcnJvcjogU2NyaXB0IGVycm9yXFwuPyBvbiBsaW5lIDAkL10sdT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dm9pZCAwPT09dCYmKHQ9e30pLHRoaXMuX29wdGlvbnM9dCx0aGlzLm5hbWU9ZS5pZH1yZXR1cm4gZS5wcm90b3R5cGUuc2V0dXBPbmNlPWZ1bmN0aW9uKHQsbil7dCgoZnVuY3Rpb24odCl7dmFyIHI9bigpO2lmKHIpe3ZhciB1PXIuZ2V0SW50ZWdyYXRpb24oZSk7aWYodSl7dmFyIGQ9ci5nZXRDbGllbnQoKSxwPWQ/ZC5nZXRPcHRpb25zKCk6e30sbT1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT1lJiYoZT17fSksdm9pZCAwPT09dCYmKHQ9e30pLHthbGxvd1VybHM6KDAsaS5mbCkoZS53aGl0ZWxpc3RVcmxzfHxbXSxlLmFsbG93VXJsc3x8W10sdC53aGl0ZWxpc3RVcmxzfHxbXSx0LmFsbG93VXJsc3x8W10pLGRlbnlVcmxzOigwLGkuZmwpKGUuYmxhY2tsaXN0VXJsc3x8W10sZS5kZW55VXJsc3x8W10sdC5ibGFja2xpc3RVcmxzfHxbXSx0LmRlbnlVcmxzfHxbXSksaWdub3JlRXJyb3JzOigwLGkuZmwpKGUuaWdub3JlRXJyb3JzfHxbXSx0Lmlnbm9yZUVycm9yc3x8W10sbCksaWdub3JlSW50ZXJuYWw6dm9pZCAwPT09ZS5pZ25vcmVJbnRlcm5hbHx8ZS5pZ25vcmVJbnRlcm5hbH19KHUuX29wdGlvbnMscCk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuaWdub3JlSW50ZXJuYWwmJmZ1bmN0aW9uKGUpe3RyeXtyZXR1cm5cIlNlbnRyeUVycm9yXCI9PT1lLmV4Y2VwdGlvbi52YWx1ZXNbMF0udHlwZX1jYXRjaChlKXt9cmV0dXJuITF9KGUpPyhjJiZvLmtnLndhcm4oXCJFdmVudCBkcm9wcGVkIGR1ZSB0byBiZWluZyBpbnRlcm5hbCBTZW50cnkgRXJyb3IuXFxuRXZlbnQ6IFwiKygwLGEuakgpKGUpKSwhMCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4hKCF0fHwhdC5sZW5ndGgpJiZmdW5jdGlvbihlKXtpZihlLm1lc3NhZ2UpcmV0dXJuW2UubWVzc2FnZV07aWYoZS5leGNlcHRpb24pdHJ5e3ZhciB0PWUuZXhjZXB0aW9uLnZhbHVlcyYmZS5leGNlcHRpb24udmFsdWVzWzBdfHx7fSxuPXQudHlwZSxyPXZvaWQgMD09PW4/XCJcIjpuLGk9dC52YWx1ZSxzPXZvaWQgMD09PWk/XCJcIjppO3JldHVybltcIlwiK3MscitcIjogXCIrc119Y2F0Y2godCl7cmV0dXJuIGMmJm8ua2cuZXJyb3IoXCJDYW5ub3QgZXh0cmFjdCBtZXNzYWdlIGZvciBldmVudCBcIisoMCxhLmpIKShlKSksW119cmV0dXJuW119KGUpLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiB0LnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybigwLHMuekMpKGUsdCl9KSl9KSl9KGUsdC5pZ25vcmVFcnJvcnMpPyhjJiZvLmtnLndhcm4oXCJFdmVudCBkcm9wcGVkIGR1ZSB0byBiZWluZyBtYXRjaGVkIGJ5IGBpZ25vcmVFcnJvcnNgIG9wdGlvbi5cXG5FdmVudDogXCIrKDAsYS5qSCkoZSkpLCEwKTpmdW5jdGlvbihlLHQpe2lmKCF0fHwhdC5sZW5ndGgpcmV0dXJuITE7dmFyIG49ZihlKTtyZXR1cm4hIW4mJnQuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuKDAscy56QykobixlKX0pKX0oZSx0LmRlbnlVcmxzKT8oYyYmby5rZy53YXJuKFwiRXZlbnQgZHJvcHBlZCBkdWUgdG8gYmVpbmcgbWF0Y2hlZCBieSBgZGVueVVybHNgIG9wdGlvbi5cXG5FdmVudDogXCIrKDAsYS5qSCkoZSkrXCIuXFxuVXJsOiBcIitmKGUpKSwhMCk6IWZ1bmN0aW9uKGUsdCl7aWYoIXR8fCF0Lmxlbmd0aClyZXR1cm4hMDt2YXIgbj1mKGUpO3JldHVybiFufHx0LnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybigwLHMuekMpKG4sZSl9KSl9KGUsdC5hbGxvd1VybHMpJiYoYyYmby5rZy53YXJuKFwiRXZlbnQgZHJvcHBlZCBkdWUgdG8gbm90IGJlaW5nIG1hdGNoZWQgYnkgYGFsbG93VXJsc2Agb3B0aW9uLlxcbkV2ZW50OiBcIisoMCxhLmpIKShlKStcIi5cXG5Vcmw6IFwiK2YoZSkpLCEwKX0odCxtKT9udWxsOnR9fXJldHVybiB0fSkpfSxlLmlkPVwiSW5ib3VuZEZpbHRlcnNcIixlfSgpO2Z1bmN0aW9uIGQoZSl7dm9pZCAwPT09ZSYmKGU9W10pO2Zvcih2YXIgdD1lLmxlbmd0aC0xO3Q+PTA7dC0tKXt2YXIgbj1lW3RdO2lmKG4mJlwiPGFub255bW91cz5cIiE9PW4uZmlsZW5hbWUmJlwiW25hdGl2ZSBjb2RlXVwiIT09bi5maWxlbmFtZSlyZXR1cm4gbi5maWxlbmFtZXx8bnVsbH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBmKGUpe3RyeXtpZihlLnN0YWNrdHJhY2UpcmV0dXJuIGQoZS5zdGFja3RyYWNlLmZyYW1lcyk7dmFyIHQ7dHJ5e3Q9ZS5leGNlcHRpb24udmFsdWVzWzBdLnN0YWNrdHJhY2UuZnJhbWVzfWNhdGNoKGUpe31yZXR1cm4gdD9kKHQpOm51bGx9Y2F0Y2godCl7cmV0dXJuIGMmJm8ua2cuZXJyb3IoXCJDYW5ub3QgZXh0cmFjdCB1cmwgZm9yIGV2ZW50IFwiKygwLGEuakgpKGUpKSxudWxsfX12YXIgcCxtPW4oMjA1MzUpLGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5uYW1lPWUuaWR9cmV0dXJuIGUucHJvdG90eXBlLnNldHVwT25jZT1mdW5jdGlvbigpe3A9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTt2YXIgbj0oMCxtLkhLKSh0aGlzKXx8dGhpcztyZXR1cm4gcC5hcHBseShuLGUpfX0sZS5pZD1cIkZ1bmN0aW9uVG9TdHJpbmdcIixlfSgpLHY9bigzNjg3OSksZz1uKDgyOTkxKSx5PW4oOTczMiksRT1uKDQwMTA1KSxfPW4oNDY3NjkpLEk9bigzMDI5MiksUz1uKDY3NTk3KSxiPW4oOTY4OTMpLFQ9bigyMTE3MCksQz1uKDg4MDA3KSxBPW4oODgyNjYpLFI9W107ZnVuY3Rpb24gayhlKXtyZXR1cm4gZS5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZXZlcnkoKGZ1bmN0aW9uKGUpe3JldHVybiB0Lm5hbWUhPT1lLm5hbWV9KSkmJmUucHVzaCh0KSxlfSksW10pfXZhciBPPVwiTm90IGNhcHR1cmluZyBleGNlcHRpb24gYmVjYXVzZSBpdCdzIGFscmVhZHkgYmVlbiBjYXB0dXJlZC5cIixOPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuX2ludGVncmF0aW9ucz17fSx0aGlzLl9udW1Qcm9jZXNzaW5nPTAsdGhpcy5fYmFja2VuZD1uZXcgZSh0KSx0aGlzLl9vcHRpb25zPXQsdC5kc24mJih0aGlzLl9kc249KDAsSS52KSh0LmRzbikpfXJldHVybiBlLnByb3RvdHlwZS5jYXB0dXJlRXhjZXB0aW9uPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzO2lmKCEoMCxhLllPKShlKSl7dmFyIGk9dCYmdC5ldmVudF9pZDtyZXR1cm4gdGhpcy5fcHJvY2Vzcyh0aGlzLl9nZXRCYWNrZW5kKCkuZXZlbnRGcm9tRXhjZXB0aW9uKGUsdCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIHIuX2NhcHR1cmVFdmVudChlLHQsbil9KSkudGhlbigoZnVuY3Rpb24oZSl7aT1lfSkpKSxpfWMmJm8ua2cubG9nKE8pfSxlLnByb3RvdHlwZS5jYXB0dXJlTWVzc2FnZT1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT10aGlzLG89biYmbi5ldmVudF9pZCxhPSgwLFMucHQpKGUpP3RoaXMuX2dldEJhY2tlbmQoKS5ldmVudEZyb21NZXNzYWdlKFN0cmluZyhlKSx0LG4pOnRoaXMuX2dldEJhY2tlbmQoKS5ldmVudEZyb21FeGNlcHRpb24oZSxuKTtyZXR1cm4gdGhpcy5fcHJvY2VzcyhhLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBpLl9jYXB0dXJlRXZlbnQoZSxuLHIpfSkpLnRoZW4oKGZ1bmN0aW9uKGUpe289ZX0pKSksb30sZS5wcm90b3R5cGUuY2FwdHVyZUV2ZW50PWZ1bmN0aW9uKGUsdCxuKXtpZighKHQmJnQub3JpZ2luYWxFeGNlcHRpb24mJigwLGEuWU8pKHQub3JpZ2luYWxFeGNlcHRpb24pKSl7dmFyIHI9dCYmdC5ldmVudF9pZDtyZXR1cm4gdGhpcy5fcHJvY2Vzcyh0aGlzLl9jYXB0dXJlRXZlbnQoZSx0LG4pLnRoZW4oKGZ1bmN0aW9uKGUpe3I9ZX0pKSkscn1jJiZvLmtnLmxvZyhPKX0sZS5wcm90b3R5cGUuY2FwdHVyZVNlc3Npb249ZnVuY3Rpb24oZSl7dGhpcy5faXNFbmFibGVkKCk/XCJzdHJpbmdcIiE9dHlwZW9mIGUucmVsZWFzZT9jJiZvLmtnLndhcm4oXCJEaXNjYXJkZWQgc2Vzc2lvbiBiZWNhdXNlIG9mIG1pc3Npbmcgb3Igbm9uLXN0cmluZyByZWxlYXNlXCIpOih0aGlzLl9zZW5kU2Vzc2lvbihlKSxlLnVwZGF0ZSh7aW5pdDohMX0pKTpjJiZvLmtnLndhcm4oXCJTREsgbm90IGVuYWJsZWQsIHdpbGwgbm90IGNhcHR1cmUgc2Vzc2lvbi5cIil9LGUucHJvdG90eXBlLmdldERzbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kc259LGUucHJvdG90eXBlLmdldE9wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb3B0aW9uc30sZS5wcm90b3R5cGUuZ2V0VHJhbnNwb3J0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dldEJhY2tlbmQoKS5nZXRUcmFuc3BvcnQoKX0sZS5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5faXNDbGllbnREb25lUHJvY2Vzc2luZyhlKS50aGVuKChmdW5jdGlvbihuKXtyZXR1cm4gdC5nZXRUcmFuc3BvcnQoKS5jbG9zZShlKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gbiYmZX0pKX0pKX0sZS5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5mbHVzaChlKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gdC5nZXRPcHRpb25zKCkuZW5hYmxlZD0hMSxlfSkpfSxlLnByb3RvdHlwZS5zZXR1cEludGVncmF0aW9ucz1mdW5jdGlvbigpe3ZhciBlLHQ7dGhpcy5faXNFbmFibGVkKCkmJiF0aGlzLl9pbnRlZ3JhdGlvbnMuaW5pdGlhbGl6ZWQmJih0aGlzLl9pbnRlZ3JhdGlvbnM9KGU9dGhpcy5fb3B0aW9ucyx0PXt9LGZ1bmN0aW9uKGUpe3ZhciB0PWUuZGVmYXVsdEludGVncmF0aW9ucyYmKDAsaS5mbCkoZS5kZWZhdWx0SW50ZWdyYXRpb25zKXx8W10sbj1lLmludGVncmF0aW9ucyxyPSgwLGkuZmwpKGsodCkpO0FycmF5LmlzQXJyYXkobik/cj0oMCxpLmZsKShyLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIG4uZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5hbWUhPT1lLm5hbWV9KSl9KSksayhuKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgbiYmKHI9bihyKSxyPUFycmF5LmlzQXJyYXkocik/cjpbcl0pO3ZhciBvPXIubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lfSkpLGE9XCJEZWJ1Z1wiO3JldHVybi0xIT09by5pbmRleE9mKGEpJiZyLnB1c2guYXBwbHkociwoMCxpLmZsKShyLnNwbGljZShvLmluZGV4T2YoYSksMSkpKSxyfShlKS5mb3JFYWNoKChmdW5jdGlvbihlKXt0W2UubmFtZV09ZSxmdW5jdGlvbihlKXstMT09PVIuaW5kZXhPZihlLm5hbWUpJiYoZS5zZXR1cE9uY2UoXy5jLHYuR2QpLFIucHVzaChlLm5hbWUpLGMmJm8ua2cubG9nKFwiSW50ZWdyYXRpb24gaW5zdGFsbGVkOiBcIitlLm5hbWUpKX0oZSl9KSksKDAsbS54cCkodCxcImluaXRpYWxpemVkXCIsITApLHQpKX0sZS5wcm90b3R5cGUuZ2V0SW50ZWdyYXRpb249ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiB0aGlzLl9pbnRlZ3JhdGlvbnNbZS5pZF18fG51bGx9Y2F0Y2godCl7cmV0dXJuIGMmJm8ua2cud2FybihcIkNhbm5vdCByZXRyaWV2ZSBpbnRlZ3JhdGlvbiBcIitlLmlkK1wiIGZyb20gdGhlIGN1cnJlbnQgQ2xpZW50XCIpLG51bGx9fSxlLnByb3RvdHlwZS5fdXBkYXRlU2Vzc2lvbkZyb21FdmVudD1mdW5jdGlvbihlLHQpe3ZhciBuLHIsbz0hMSxhPSExLHM9dC5leGNlcHRpb24mJnQuZXhjZXB0aW9uLnZhbHVlcztpZihzKXthPSEwO3RyeXtmb3IodmFyIGM9KDAsaS5YQSkocyksbD1jLm5leHQoKTshbC5kb25lO2w9Yy5uZXh0KCkpe3ZhciB1PWwudmFsdWUubWVjaGFuaXNtO2lmKHUmJiExPT09dS5oYW5kbGVkKXtvPSEwO2JyZWFrfX19Y2F0Y2goZSl7bj17ZXJyb3I6ZX19ZmluYWxseXt0cnl7bCYmIWwuZG9uZSYmKHI9Yy5yZXR1cm4pJiZyLmNhbGwoYyl9ZmluYWxseXtpZihuKXRocm93IG4uZXJyb3J9fX12YXIgZD1cIm9rXCI9PT1lLnN0YXR1czsoZCYmMD09PWUuZXJyb3JzfHxkJiZvKSYmKGUudXBkYXRlKCgwLGkucGkpKCgwLGkucGkpKHt9LG8mJntzdGF0dXM6XCJjcmFzaGVkXCJ9KSx7ZXJyb3JzOmUuZXJyb3JzfHxOdW1iZXIoYXx8byl9KSksdGhpcy5jYXB0dXJlU2Vzc2lvbihlKSl9LGUucHJvdG90eXBlLl9zZW5kU2Vzc2lvbj1mdW5jdGlvbihlKXt0aGlzLl9nZXRCYWNrZW5kKCkuc2VuZFNlc3Npb24oZSl9LGUucHJvdG90eXBlLl9pc0NsaWVudERvbmVQcm9jZXNzaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIG5ldyBiLmNXKChmdW5jdGlvbihuKXt2YXIgcj0wLGk9c2V0SW50ZXJ2YWwoKGZ1bmN0aW9uKCl7MD09dC5fbnVtUHJvY2Vzc2luZz8oY2xlYXJJbnRlcnZhbChpKSxuKCEwKSk6KHIrPTEsZSYmcj49ZSYmKGNsZWFySW50ZXJ2YWwoaSksbighMSkpKX0pLDEpfSkpfSxlLnByb3RvdHlwZS5fZ2V0QmFja2VuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNrZW5kfSxlLnByb3RvdHlwZS5faXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuITEhPT10aGlzLmdldE9wdGlvbnMoKS5lbmFibGVkJiZ2b2lkIDAhPT10aGlzLl9kc259LGUucHJvdG90eXBlLl9wcmVwYXJlRXZlbnQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMsbz10aGlzLmdldE9wdGlvbnMoKSxzPW8ubm9ybWFsaXplRGVwdGgsYz12b2lkIDA9PT1zPzM6cyxsPW8ubm9ybWFsaXplTWF4QnJlYWR0aCx1PXZvaWQgMD09PWw/MWUzOmwsZD0oMCxpLnBpKSgoMCxpLnBpKSh7fSxlKSx7ZXZlbnRfaWQ6ZS5ldmVudF9pZHx8KG4mJm4uZXZlbnRfaWQ/bi5ldmVudF9pZDooMCxhLkRNKSgpKSx0aW1lc3RhbXA6ZS50aW1lc3RhbXB8fCgwLFQueVcpKCl9KTt0aGlzLl9hcHBseUNsaWVudE9wdGlvbnMoZCksdGhpcy5fYXBwbHlJbnRlZ3JhdGlvbnNNZXRhZGF0YShkKTt2YXIgZj10O24mJm4uY2FwdHVyZUNvbnRleHQmJihmPV8ucy5jbG9uZShmKS51cGRhdGUobi5jYXB0dXJlQ29udGV4dCkpO3ZhciBwPSgwLGIuV0QpKGQpO3JldHVybiBmJiYocD1mLmFwcGx5VG9FdmVudChkLG4pKSxwLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlJiYoZS5zZGtQcm9jZXNzaW5nTWV0YWRhdGE9KDAsaS5waSkoKDAsaS5waSkoe30sZS5zZGtQcm9jZXNzaW5nTWV0YWRhdGEpLHtub3JtYWxpemVEZXB0aDooMCxDLkZ2KShjKStcIiAoXCIrdHlwZW9mIGMrXCIpXCJ9KSksXCJudW1iZXJcIj09dHlwZW9mIGMmJmM+MD9yLl9ub3JtYWxpemVFdmVudChlLGMsdSk6ZX0pKX0sZS5wcm90b3R5cGUuX25vcm1hbGl6ZUV2ZW50PWZ1bmN0aW9uKGUsdCxuKXtpZighZSlyZXR1cm4gbnVsbDt2YXIgcj0oMCxpLnBpKSgoMCxpLnBpKSgoMCxpLnBpKSgoMCxpLnBpKSgoMCxpLnBpKSh7fSxlKSxlLmJyZWFkY3J1bWJzJiZ7YnJlYWRjcnVtYnM6ZS5icmVhZGNydW1icy5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybigwLGkucGkpKCgwLGkucGkpKHt9LGUpLGUuZGF0YSYme2RhdGE6KDAsQy5GdikoZS5kYXRhLHQsbil9KX0pKX0pLGUudXNlciYme3VzZXI6KDAsQy5GdikoZS51c2VyLHQsbil9KSxlLmNvbnRleHRzJiZ7Y29udGV4dHM6KDAsQy5GdikoZS5jb250ZXh0cyx0LG4pfSksZS5leHRyYSYme2V4dHJhOigwLEMuRnYpKGUuZXh0cmEsdCxuKX0pO3JldHVybiBlLmNvbnRleHRzJiZlLmNvbnRleHRzLnRyYWNlJiYoci5jb250ZXh0cy50cmFjZT1lLmNvbnRleHRzLnRyYWNlKSxyLnNka1Byb2Nlc3NpbmdNZXRhZGF0YT0oMCxpLnBpKSgoMCxpLnBpKSh7fSxyLnNka1Byb2Nlc3NpbmdNZXRhZGF0YSkse2Jhc2VDbGllbnROb3JtYWxpemVkOiEwfSkscn0sZS5wcm90b3R5cGUuX2FwcGx5Q2xpZW50T3B0aW9ucz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldE9wdGlvbnMoKSxuPXQuZW52aXJvbm1lbnQscj10LnJlbGVhc2UsaT10LmRpc3Qsbz10Lm1heFZhbHVlTGVuZ3RoLGE9dm9pZCAwPT09bz8yNTA6bztcImVudmlyb25tZW50XCJpbiBlfHwoZS5lbnZpcm9ubWVudD1cImVudmlyb25tZW50XCJpbiB0P246XCJwcm9kdWN0aW9uXCIpLHZvaWQgMD09PWUucmVsZWFzZSYmdm9pZCAwIT09ciYmKGUucmVsZWFzZT1yKSx2b2lkIDA9PT1lLmRpc3QmJnZvaWQgMCE9PWkmJihlLmRpc3Q9aSksZS5tZXNzYWdlJiYoZS5tZXNzYWdlPSgwLHMuJEcpKGUubWVzc2FnZSxhKSk7dmFyIGM9ZS5leGNlcHRpb24mJmUuZXhjZXB0aW9uLnZhbHVlcyYmZS5leGNlcHRpb24udmFsdWVzWzBdO2MmJmMudmFsdWUmJihjLnZhbHVlPSgwLHMuJEcpKGMudmFsdWUsYSkpO3ZhciBsPWUucmVxdWVzdDtsJiZsLnVybCYmKGwudXJsPSgwLHMuJEcpKGwudXJsLGEpKX0sZS5wcm90b3R5cGUuX2FwcGx5SW50ZWdyYXRpb25zTWV0YWRhdGE9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0LmtleXModGhpcy5faW50ZWdyYXRpb25zKTt0Lmxlbmd0aD4wJiYoZS5zZGs9ZS5zZGt8fHt9LGUuc2RrLmludGVncmF0aW9ucz0oMCxpLmZsKShlLnNkay5pbnRlZ3JhdGlvbnN8fFtdLHQpKX0sZS5wcm90b3R5cGUuX3NlbmRFdmVudD1mdW5jdGlvbihlKXt0aGlzLl9nZXRCYWNrZW5kKCkuc2VuZEV2ZW50KGUpfSxlLnByb3RvdHlwZS5fY2FwdHVyZUV2ZW50PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5fcHJvY2Vzc0V2ZW50KGUsdCxuKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5ldmVudF9pZH0pLChmdW5jdGlvbihlKXtjJiZvLmtnLmVycm9yKGUpfSkpfSxlLnByb3RvdHlwZS5fcHJvY2Vzc0V2ZW50PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLGk9dGhpcy5nZXRPcHRpb25zKCksbz1pLmJlZm9yZVNlbmQsYT1pLnNhbXBsZVJhdGUscz10aGlzLmdldFRyYW5zcG9ydCgpO2Z1bmN0aW9uIGMoZSx0KXtzLnJlY29yZExvc3RFdmVudCYmcy5yZWNvcmRMb3N0RXZlbnQoZSx0KX1pZighdGhpcy5faXNFbmFibGVkKCkpcmV0dXJuKDAsYi4kMikobmV3IEEuYihcIlNESyBub3QgZW5hYmxlZCwgd2lsbCBub3QgY2FwdHVyZSBldmVudC5cIikpO3ZhciBsPVwidHJhbnNhY3Rpb25cIj09PWUudHlwZTtyZXR1cm4hbCYmXCJudW1iZXJcIj09dHlwZW9mIGEmJk1hdGgucmFuZG9tKCk+YT8oYyhcInNhbXBsZV9yYXRlXCIsXCJldmVudFwiKSwoMCxiLiQyKShuZXcgQS5iKFwiRGlzY2FyZGluZyBldmVudCBiZWNhdXNlIGl0J3Mgbm90IGluY2x1ZGVkIGluIHRoZSByYW5kb20gc2FtcGxlIChzYW1wbGluZyByYXRlID0gXCIrYStcIilcIikpKTp0aGlzLl9wcmVwYXJlRXZlbnQoZSxuLHQpLnRoZW4oKGZ1bmN0aW9uKG4pe2lmKG51bGw9PT1uKXRocm93IGMoXCJldmVudF9wcm9jZXNzb3JcIixlLnR5cGV8fFwiZXZlbnRcIiksbmV3IEEuYihcIkFuIGV2ZW50IHByb2Nlc3NvciByZXR1cm5lZCBudWxsLCB3aWxsIG5vdCBzZW5kIGV2ZW50LlwiKTtyZXR1cm4gdCYmdC5kYXRhJiYhMD09PXQuZGF0YS5fX3NlbnRyeV9ffHxsfHwhbz9uOmZ1bmN0aW9uKGUpe3ZhciB0PVwiYGJlZm9yZVNlbmRgIG1ldGhvZCBoYXMgdG8gcmV0dXJuIGBudWxsYCBvciBhIHZhbGlkIGV2ZW50LlwiO2lmKCgwLFMuSjgpKGUpKXJldHVybiBlLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKCEoMCxTLlBPKShlKSYmbnVsbCE9PWUpdGhyb3cgbmV3IEEuYih0KTtyZXR1cm4gZX0pLChmdW5jdGlvbihlKXt0aHJvdyBuZXcgQS5iKFwiYmVmb3JlU2VuZCByZWplY3RlZCB3aXRoIFwiK2UpfSkpO2lmKCEoMCxTLlBPKShlKSYmbnVsbCE9PWUpdGhyb3cgbmV3IEEuYih0KTtyZXR1cm4gZX0obyhuLHQpKX0pKS50aGVuKChmdW5jdGlvbih0KXtpZihudWxsPT09dCl0aHJvdyBjKFwiYmVmb3JlX3NlbmRcIixlLnR5cGV8fFwiZXZlbnRcIiksbmV3IEEuYihcImBiZWZvcmVTZW5kYCByZXR1cm5lZCBgbnVsbGAsIHdpbGwgbm90IHNlbmQgZXZlbnQuXCIpO3ZhciBpPW4mJm4uZ2V0U2Vzc2lvbiYmbi5nZXRTZXNzaW9uKCk7cmV0dXJuIWwmJmkmJnIuX3VwZGF0ZVNlc3Npb25Gcm9tRXZlbnQoaSx0KSxyLl9zZW5kRXZlbnQodCksdH0pKS50aGVuKG51bGwsKGZ1bmN0aW9uKGUpe2lmKGUgaW5zdGFuY2VvZiBBLmIpdGhyb3cgZTt0aHJvdyByLmNhcHR1cmVFeGNlcHRpb24oZSx7ZGF0YTp7X19zZW50cnlfXzohMH0sb3JpZ2luYWxFeGNlcHRpb246ZX0pLG5ldyBBLmIoXCJFdmVudCBwcm9jZXNzaW5nIHBpcGVsaW5lIHRocmV3IGFuIGVycm9yLCBvcmlnaW5hbCBldmVudCB3aWxsIG5vdCBiZSBzZW50LiBEZXRhaWxzIGhhdmUgYmVlbiBzZW50IGFzIGEgbmV3IGV2ZW50LlxcblJlYXNvbjogXCIrZSl9KSl9LGUucHJvdG90eXBlLl9wcm9jZXNzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5fbnVtUHJvY2Vzc2luZys9MSxlLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9udW1Qcm9jZXNzaW5nLT0xLGV9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQuX251bVByb2Nlc3NpbmctPTEsZX0pKX0sZX0oKSx3PW4oMTk4NCksRD1uKDI5MzI0KSxQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUuc2VuZEV2ZW50PWZ1bmN0aW9uKGUpe3JldHVybigwLGIuV0QpKHtyZWFzb246XCJOb29wVHJhbnNwb3J0OiBFdmVudCBoYXMgYmVlbiBza2lwcGVkIGJlY2F1c2Ugbm8gRHNuIGlzIGNvbmZpZ3VyZWQuXCIsc3RhdHVzOlwic2tpcHBlZFwifSl9LGUucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKGUpe3JldHVybigwLGIuV0QpKCEwKX0sZX0oKSxNPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLl9vcHRpb25zPWUsdGhpcy5fb3B0aW9ucy5kc258fGMmJm8ua2cud2FybihcIk5vIERTTiBwcm92aWRlZCwgYmFja2VuZCB3aWxsIG5vdCBkbyBhbnl0aGluZy5cIiksdGhpcy5fdHJhbnNwb3J0PXRoaXMuX3NldHVwVHJhbnNwb3J0KCl9cmV0dXJuIGUucHJvdG90eXBlLmV2ZW50RnJvbUV4Y2VwdGlvbj1mdW5jdGlvbihlLHQpe3Rocm93IG5ldyBBLmIoXCJCYWNrZW5kIGhhcyB0byBpbXBsZW1lbnQgYGV2ZW50RnJvbUV4Y2VwdGlvbmAgbWV0aG9kXCIpfSxlLnByb3RvdHlwZS5ldmVudEZyb21NZXNzYWdlPWZ1bmN0aW9uKGUsdCxuKXt0aHJvdyBuZXcgQS5iKFwiQmFja2VuZCBoYXMgdG8gaW1wbGVtZW50IGBldmVudEZyb21NZXNzYWdlYCBtZXRob2RcIil9LGUucHJvdG90eXBlLnNlbmRFdmVudD1mdW5jdGlvbihlKXtpZih0aGlzLl9uZXdUcmFuc3BvcnQmJnRoaXMuX29wdGlvbnMuZHNuJiZ0aGlzLl9vcHRpb25zLl9leHBlcmltZW50cyYmdGhpcy5fb3B0aW9ucy5fZXhwZXJpbWVudHMubmV3VHJhbnNwb3J0KXt2YXIgdD0oMCx3LmhkKSh0aGlzLl9vcHRpb25zLmRzbix0aGlzLl9vcHRpb25zLl9tZXRhZGF0YSx0aGlzLl9vcHRpb25zLnR1bm5lbCksbj0oMCxELk1xKShlLHQpO3RoaXMuX25ld1RyYW5zcG9ydC5zZW5kKG4pLnRoZW4obnVsbCwoZnVuY3Rpb24oZSl7YyYmby5rZy5lcnJvcihcIkVycm9yIHdoaWxlIHNlbmRpbmcgZXZlbnQ6XCIsZSl9KSl9ZWxzZSB0aGlzLl90cmFuc3BvcnQuc2VuZEV2ZW50KGUpLnRoZW4obnVsbCwoZnVuY3Rpb24oZSl7YyYmby5rZy5lcnJvcihcIkVycm9yIHdoaWxlIHNlbmRpbmcgZXZlbnQ6XCIsZSl9KSl9LGUucHJvdG90eXBlLnNlbmRTZXNzaW9uPWZ1bmN0aW9uKGUpe2lmKHRoaXMuX3RyYW5zcG9ydC5zZW5kU2Vzc2lvbilpZih0aGlzLl9uZXdUcmFuc3BvcnQmJnRoaXMuX29wdGlvbnMuZHNuJiZ0aGlzLl9vcHRpb25zLl9leHBlcmltZW50cyYmdGhpcy5fb3B0aW9ucy5fZXhwZXJpbWVudHMubmV3VHJhbnNwb3J0KXt2YXIgdD0oMCx3LmhkKSh0aGlzLl9vcHRpb25zLmRzbix0aGlzLl9vcHRpb25zLl9tZXRhZGF0YSx0aGlzLl9vcHRpb25zLnR1bm5lbCksbj0oMCxpLkNSKSgoMCxELlEzKShlLHQpLDEpWzBdO3RoaXMuX25ld1RyYW5zcG9ydC5zZW5kKG4pLnRoZW4obnVsbCwoZnVuY3Rpb24oZSl7YyYmby5rZy5lcnJvcihcIkVycm9yIHdoaWxlIHNlbmRpbmcgc2Vzc2lvbjpcIixlKX0pKX1lbHNlIHRoaXMuX3RyYW5zcG9ydC5zZW5kU2Vzc2lvbihlKS50aGVuKG51bGwsKGZ1bmN0aW9uKGUpe2MmJm8ua2cuZXJyb3IoXCJFcnJvciB3aGlsZSBzZW5kaW5nIHNlc3Npb246XCIsZSl9KSk7ZWxzZSBjJiZvLmtnLndhcm4oXCJEcm9wcGluZyBzZXNzaW9uIGJlY2F1c2UgY3VzdG9tIHRyYW5zcG9ydCBkb2Vzbid0IGltcGxlbWVudCBzZW5kU2Vzc2lvblwiKX0sZS5wcm90b3R5cGUuZ2V0VHJhbnNwb3J0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydH0sZS5wcm90b3R5cGUuX3NldHVwVHJhbnNwb3J0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBQfSxlfSgpLEw9bigxMzgxOSksVT1uKDg4MjMpLHg9bigzMDM2MCksRj1cIj9cIjtmdW5jdGlvbiBCKGUsdCxuLHIpe3ZhciBpPXtmaWxlbmFtZTplLGZ1bmN0aW9uOnQsaW5fYXBwOiEwfTtyZXR1cm4gdm9pZCAwIT09biYmKGkubGluZW5vPW4pLHZvaWQgMCE9PXImJihpLmNvbG5vPXIpLGl9dmFyIFY9L15cXHMqYXQgKD86KC4qPykgP1xcKCg/OmFkZHJlc3MgYXQgKT8pPygoPzpmaWxlfGh0dHBzP3xibG9ifGNocm9tZS1leHRlbnNpb258YWRkcmVzc3xuYXRpdmV8ZXZhbHx3ZWJwYWNrfDxhbm9ueW1vdXM+fFstYS16XSs6fC4qYnVuZGxlfFxcLykuKj8pKD86OihcXGQrKSk/KD86OihcXGQrKSk/XFwpP1xccyokL2ksRz0vXFwoKFxcUyopKD86OihcXGQrKSkoPzo6KFxcZCspKVxcKS8sSD1bMzAsZnVuY3Rpb24oZSl7dmFyIHQ9Vi5leGVjKGUpO2lmKHQpe2lmKHRbMl0mJjA9PT10WzJdLmluZGV4T2YoXCJldmFsXCIpKXt2YXIgbj1HLmV4ZWModFsyXSk7biYmKHRbMl09blsxXSx0WzNdPW5bMl0sdFs0XT1uWzNdKX12YXIgaT0oMCxyLkNSKShKKHRbMV18fEYsdFsyXSksMiksbz1pWzBdO3JldHVybiBCKGlbMV0sbyx0WzNdPyt0WzNdOnZvaWQgMCx0WzRdPyt0WzRdOnZvaWQgMCl9fV0sVz0vXlxccyooLio/KSg/OlxcKCguKj8pXFwpKT8oPzpefEApPygoPzpmaWxlfGh0dHBzP3xibG9ifGNocm9tZXx3ZWJwYWNrfHJlc291cmNlfG1vei1leHRlbnNpb258Y2FwYWNpdG9yKS4qPzpcXC8uKj98XFxbbmF0aXZlIGNvZGVcXF18W15AXSooPzpidW5kbGV8XFxkK1xcLmpzKXxcXC9bXFx3XFwtLiAvPV0rKSg/OjooXFxkKykpPyg/OjooXFxkKykpP1xccyokL2ksaj0vKFxcUyspIGxpbmUgKFxcZCspKD86ID4gZXZhbCBsaW5lIFxcZCspKiA+IGV2YWwvaSxaPVs1MCxmdW5jdGlvbihlKXt2YXIgdCxuPVcuZXhlYyhlKTtpZihuKXtpZihuWzNdJiZuWzNdLmluZGV4T2YoXCIgPiBldmFsXCIpPi0xKXt2YXIgaT1qLmV4ZWMoblszXSk7aSYmKG5bMV09blsxXXx8XCJldmFsXCIsblszXT1pWzFdLG5bNF09aVsyXSxuWzVdPVwiXCIpfXZhciBvPW5bM10sYT1uWzFdfHxGO3JldHVybiBhPSh0PSgwLHIuQ1IpKEooYSxvKSwyKSlbMF0sQihvPXRbMV0sYSxuWzRdPytuWzRdOnZvaWQgMCxuWzVdPytuWzVdOnZvaWQgMCl9fV0sej0vXlxccyphdCAoPzooKD86XFxbb2JqZWN0IG9iamVjdFxcXSk/LispICk/XFwoPygoPzpmaWxlfG1zLWFwcHh8aHR0cHM/fHdlYnBhY2t8YmxvYik6Lio/KTooXFxkKykoPzo6KFxcZCspKT9cXCk/XFxzKiQvaSxLPVs0MCxmdW5jdGlvbihlKXt2YXIgdD16LmV4ZWMoZSk7cmV0dXJuIHQ/Qih0WzJdLHRbMV18fEYsK3RbM10sdFs0XT8rdFs0XTp2b2lkIDApOnZvaWQgMH1dLFk9LyBsaW5lIChcXGQrKS4qc2NyaXB0ICg/OmluICk/KFxcUyspKD86OiBpbiBmdW5jdGlvbiAoXFxTKykpPyQvaSxxPVsxMCxmdW5jdGlvbihlKXt2YXIgdD1ZLmV4ZWMoZSk7cmV0dXJuIHQ/Qih0WzJdLHRbM118fEYsK3RbMV0pOnZvaWQgMH1dLFg9LyBsaW5lIChcXGQrKSwgY29sdW1uIChcXGQrKVxccyooPzppbiAoPzo8YW5vbnltb3VzIGZ1bmN0aW9uOiAoW14+XSspPnwoW14pXSspKVxcKC4qXFwpKT8gaW4gKC4qKTpcXHMqJC9pLFE9WzIwLGZ1bmN0aW9uKGUpe3ZhciB0PVguZXhlYyhlKTtyZXR1cm4gdD9CKHRbNV0sdFszXXx8dFs0XXx8RiwrdFsxXSwrdFsyXSk6dm9pZCAwfV0sSj1mdW5jdGlvbihlLHQpe3ZhciBuPS0xIT09ZS5pbmRleE9mKFwic2FmYXJpLWV4dGVuc2lvblwiKSxyPS0xIT09ZS5pbmRleE9mKFwic2FmYXJpLXdlYi1leHRlbnNpb25cIik7cmV0dXJuIG58fHI/Wy0xIT09ZS5pbmRleE9mKFwiQFwiKT9lLnNwbGl0KFwiQFwiKVswXTpGLG4/XCJzYWZhcmktZXh0ZW5zaW9uOlwiK3Q6XCJzYWZhcmktd2ViLWV4dGVuc2lvbjpcIit0XTpbZSx0XX07ZnVuY3Rpb24gJChlKXt2YXIgdD10ZShlKSxuPXt0eXBlOmUmJmUubmFtZSx2YWx1ZTpyZShlKX07cmV0dXJuIHQubGVuZ3RoJiYobi5zdGFja3RyYWNlPXtmcmFtZXM6dH0pLHZvaWQgMD09PW4udHlwZSYmXCJcIj09PW4udmFsdWUmJihuLnZhbHVlPVwiVW5yZWNvdmVyYWJsZSBlcnJvciBjYXVnaHRcIiksbn1mdW5jdGlvbiBlZShlKXtyZXR1cm57ZXhjZXB0aW9uOnt2YWx1ZXM6WyQoZSldfX19ZnVuY3Rpb24gdGUoZSl7dmFyIHQ9ZS5zdGFja3RyYWNlfHxlLnN0YWNrfHxcIlwiLG49ZnVuY3Rpb24oZSl7aWYoZSl7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUuZnJhbWVzVG9Qb3ApcmV0dXJuIGUuZnJhbWVzVG9Qb3A7aWYobmUudGVzdChlLm1lc3NhZ2UpKXJldHVybiAxfXJldHVybiAwfShlKTt0cnl7cmV0dXJuKDAseC5wRSkocSxRLEgsSyxaKSh0LG4pfWNhdGNoKGUpe31yZXR1cm5bXX12YXIgbmU9L01pbmlmaWVkIFJlYWN0IGVycm9yICNcXGQrOy9pO2Z1bmN0aW9uIHJlKGUpe3ZhciB0PWUmJmUubWVzc2FnZTtyZXR1cm4gdD90LmVycm9yJiZcInN0cmluZ1wiPT10eXBlb2YgdC5lcnJvci5tZXNzYWdlP3QuZXJyb3IubWVzc2FnZTp0OlwiTm8gZXJyb3IgbWVzc2FnZVwifWZ1bmN0aW9uIGllKGUsdCxuLGkpe3ZhciBvO2lmKCgwLFMuVlcpKGUpJiZlLmVycm9yKXJldHVybiBlZShlLmVycm9yKTtpZigoMCxTLlRYKShlKXx8KDAsUy5mbSkoZSkpe3ZhciBzPWU7aWYoXCJzdGFja1wiaW4gZSlvPWVlKGUpO2Vsc2V7dmFyIGM9cy5uYW1lfHwoKDAsUy5UWCkocyk/XCJET01FcnJvclwiOlwiRE9NRXhjZXB0aW9uXCIpLGw9cy5tZXNzYWdlP2MrXCI6IFwiK3MubWVzc2FnZTpjO289b2UobCx0LG4pLCgwLGEuRGIpKG8sbCl9cmV0dXJuXCJjb2RlXCJpbiBzJiYoby50YWdzPSgwLHIucGkpKCgwLHIucGkpKHt9LG8udGFncykse1wiRE9NRXhjZXB0aW9uLmNvZGVcIjpcIlwiK3MuY29kZX0pKSxvfXJldHVybigwLFMuVlopKGUpP2VlKGUpOigwLFMuUE8pKGUpfHwoMCxTLmNPKShlKT8obz1mdW5jdGlvbihlLHQsbil7dmFyIHI9e2V4Y2VwdGlvbjp7dmFsdWVzOlt7dHlwZTooMCxTLmNPKShlKT9lLmNvbnN0cnVjdG9yLm5hbWU6bj9cIlVuaGFuZGxlZFJlamVjdGlvblwiOlwiRXJyb3JcIix2YWx1ZTpcIk5vbi1FcnJvciBcIisobj9cInByb21pc2UgcmVqZWN0aW9uXCI6XCJleGNlcHRpb25cIikrXCIgY2FwdHVyZWQgd2l0aCBrZXlzOiBcIisoMCxtLnpmKShlKX1dfSxleHRyYTp7X19zZXJpYWxpemVkX186KDAsQy5ReSkoZSl9fTtpZih0KXt2YXIgaT10ZSh0KTtpLmxlbmd0aCYmKHIuc3RhY2t0cmFjZT17ZnJhbWVzOml9KX1yZXR1cm4gcn0oZSx0LGkpLCgwLGEuRUcpKG8se3N5bnRoZXRpYzohMH0pLG8pOihvPW9lKGUsdCxuKSwoMCxhLkRiKShvLFwiXCIrZSx2b2lkIDApLCgwLGEuRUcpKG8se3N5bnRoZXRpYzohMH0pLG8pfWZ1bmN0aW9uIG9lKGUsdCxuKXt2YXIgcj17bWVzc2FnZTplfTtpZihuJiZ0KXt2YXIgaT10ZSh0KTtpLmxlbmd0aCYmKHIuc3RhY2t0cmFjZT17ZnJhbWVzOml9KX1yZXR1cm4gcn12YXIgYWU9big4MTIyNyksc2U9big1ODcyNSksY2U9big4MDIyOCksbGU9bigxMzYpO2Z1bmN0aW9uIHVlKGUsdCxuKXt2b2lkIDA9PT1uJiYobj0oMCxhZS54KShlLmJ1ZmZlclNpemV8fDMwKSk7dmFyIHI9e307cmV0dXJue3NlbmQ6ZnVuY3Rpb24oZSl7dmFyIGk9KDAsc2UueTcpKGUpLG89XCJldmVudFwiPT09aT9cImVycm9yXCI6aSxhPXtjYXRlZ29yeTpvLGJvZHk6KDAsc2UuViQpKGUpfTtyZXR1cm4oMCxjZS5RKShyLG8pPygwLGIuJDIpKHtzdGF0dXM6XCJyYXRlX2xpbWl0XCIscmVhc29uOmRlKHIsbyl9KTpuLmFkZCgoZnVuY3Rpb24oKXtyZXR1cm4gdChhKS50aGVuKChmdW5jdGlvbihlKXt2YXIgdD1lLmJvZHksbj1lLmhlYWRlcnMsaT1lLnJlYXNvbixhPWUuc3RhdHVzQ29kZSxzPSgwLGxlLkYpKGEpO3JldHVybiBuJiYocj0oMCxjZS5XRykocixuKSksXCJzdWNjZXNzXCI9PT1zPygwLGIuV0QpKHtzdGF0dXM6cyxyZWFzb246aX0pOigwLGIuJDIpKHtzdGF0dXM6cyxyZWFzb246aXx8dHx8KFwicmF0ZV9saW1pdFwiPT09cz9kZShyLG8pOlwiVW5rbm93biB0cmFuc3BvcnQgZXJyb3JcIil9KX0pKX0pKX0sZmx1c2g6ZnVuY3Rpb24oZSl7cmV0dXJuIG4uZHJhaW4oZSl9fX1mdW5jdGlvbiBkZShlLHQpe3JldHVyblwiVG9vIG1hbnkgXCIrdCtcIiByZXF1ZXN0cywgYmFja2luZyBvZmYgdW50aWw6IFwiK25ldyBEYXRlKCgwLGNlLm5zKShlLHQpKS50b0lTT1N0cmluZygpfXZhciBmZT1uKDQ0MzMxKSxwZT1uKDY4NjkwKSxtZT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIG51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4oMCxyLlpUKSh0LGUpLHQucHJvdG90eXBlLl9zZW5kUmVxdWVzdD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7cmV0dXJuIHRoaXMuX2lzUmF0ZUxpbWl0ZWQoZS50eXBlKT8odGhpcy5yZWNvcmRMb3N0RXZlbnQoXCJyYXRlbGltaXRfYmFja29mZlwiLGUudHlwZSksUHJvbWlzZS5yZWplY3Qoe2V2ZW50OnQsdHlwZTplLnR5cGUscmVhc29uOlwiVHJhbnNwb3J0IGZvciBcIitlLnR5cGUrXCIgcmVxdWVzdHMgbG9ja2VkIHRpbGwgXCIrdGhpcy5fZGlzYWJsZWRVbnRpbChlLnR5cGUpK1wiIGR1ZSB0byB0b28gbWFueSByZXF1ZXN0cy5cIixzdGF0dXM6NDI5fSkpOnRoaXMuX2J1ZmZlci5hZGQoKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBiLmNXKChmdW5jdGlvbih0LHIpe3ZhciBpPW5ldyBYTUxIdHRwUmVxdWVzdDtmb3IodmFyIG8gaW4gaS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtpZig0PT09aS5yZWFkeVN0YXRlKXt2YXIgbz17XCJ4LXNlbnRyeS1yYXRlLWxpbWl0c1wiOmkuZ2V0UmVzcG9uc2VIZWFkZXIoXCJYLVNlbnRyeS1SYXRlLUxpbWl0c1wiKSxcInJldHJ5LWFmdGVyXCI6aS5nZXRSZXNwb25zZUhlYWRlcihcIlJldHJ5LUFmdGVyXCIpfTtuLl9oYW5kbGVSZXNwb25zZSh7cmVxdWVzdFR5cGU6ZS50eXBlLHJlc3BvbnNlOmksaGVhZGVyczpvLHJlc29sdmU6dCxyZWplY3Q6cn0pfX0saS5vcGVuKFwiUE9TVFwiLGUudXJsKSxuLm9wdGlvbnMuaGVhZGVycylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobi5vcHRpb25zLmhlYWRlcnMsbykmJmkuc2V0UmVxdWVzdEhlYWRlcihvLG4ub3B0aW9ucy5oZWFkZXJzW29dKTtpLnNlbmQoZS5ib2R5KX0pKX0pKS50aGVuKHZvaWQgMCwoZnVuY3Rpb24odCl7dGhyb3cgdCBpbnN0YW5jZW9mIEEuYj9uLnJlY29yZExvc3RFdmVudChcInF1ZXVlX292ZXJmbG93XCIsZS50eXBlKTpuLnJlY29yZExvc3RFdmVudChcIm5ldHdvcmtfZXJyb3JcIixlLnR5cGUpLHR9KSl9LHR9KG4oMTE3MzEpLmQpLGhlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybigwLHIuWlQpKHQsZSksdC5wcm90b3R5cGUuZXZlbnRGcm9tRXhjZXB0aW9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1pZShlLHQmJnQuc3ludGhldGljRXhjZXB0aW9ufHx2b2lkIDAsbik7cmV0dXJuKDAsYS5FRykociksci5sZXZlbD1MLnouRXJyb3IsdCYmdC5ldmVudF9pZCYmKHIuZXZlbnRfaWQ9dC5ldmVudF9pZCksKDAsYi5XRCkocil9KGUsdCx0aGlzLl9vcHRpb25zLmF0dGFjaFN0YWNrdHJhY2UpfSx0LnByb3RvdHlwZS5ldmVudEZyb21NZXNzYWdlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9TC56LkluZm8pLGZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXQmJih0PUwuei5JbmZvKTt2YXIgaT1vZShlLG4mJm4uc3ludGhldGljRXhjZXB0aW9ufHx2b2lkIDAscik7cmV0dXJuIGkubGV2ZWw9dCxuJiZuLmV2ZW50X2lkJiYoaS5ldmVudF9pZD1uLmV2ZW50X2lkKSwoMCxiLldEKShpKX0oZSx0LG4sdGhpcy5fb3B0aW9ucy5hdHRhY2hTdGFja3RyYWNlKX0sdC5wcm90b3R5cGUuX3NldHVwVHJhbnNwb3J0PWZ1bmN0aW9uKCl7aWYoIXRoaXMuX29wdGlvbnMuZHNuKXJldHVybiBlLnByb3RvdHlwZS5fc2V0dXBUcmFuc3BvcnQuY2FsbCh0aGlzKTt2YXIgdCxuLGk9KDAsci5waSkoKDAsci5waSkoe30sdGhpcy5fb3B0aW9ucy50cmFuc3BvcnRPcHRpb25zKSx7ZHNuOnRoaXMuX29wdGlvbnMuZHNuLHR1bm5lbDp0aGlzLl9vcHRpb25zLnR1bm5lbCxzZW5kQ2xpZW50UmVwb3J0czp0aGlzLl9vcHRpb25zLnNlbmRDbGllbnRSZXBvcnRzLF9tZXRhZGF0YTp0aGlzLl9vcHRpb25zLl9tZXRhZGF0YX0pLG89KDAsdy5oZCkoaS5kc24saS5fbWV0YWRhdGEsaS50dW5uZWwpLGE9KDAsdy5VdCkoby5kc24sby50dW5uZWwpO2lmKHRoaXMuX29wdGlvbnMudHJhbnNwb3J0KXJldHVybiBuZXcgdGhpcy5fb3B0aW9ucy50cmFuc3BvcnQoaSk7aWYoKDAsVS5BaykoKSl7dmFyIHM9KDAsci5waSkoe30saS5mZXRjaFBhcmFtZXRlcnMpO3JldHVybiB0aGlzLl9uZXdUcmFuc3BvcnQ9KHQ9e3JlcXVlc3RPcHRpb25zOnMsdXJsOmF9LHZvaWQgMD09PW4mJihuPSgwLGZlLngpKCkpLHVlKHtidWZmZXJTaXplOnQuYnVmZmVyU2l6ZX0sKGZ1bmN0aW9uKGUpe3ZhciBpPSgwLHIucGkpKHtib2R5OmUuYm9keSxtZXRob2Q6XCJQT1NUXCIscmVmZXJyZXJQb2xpY3k6XCJvcmlnaW5cIn0sdC5yZXF1ZXN0T3B0aW9ucyk7cmV0dXJuIG4odC51cmwsaSkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUudGV4dCgpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybntib2R5OnQsaGVhZGVyczp7XCJ4LXNlbnRyeS1yYXRlLWxpbWl0c1wiOmUuaGVhZGVycy5nZXQoXCJYLVNlbnRyeS1SYXRlLUxpbWl0c1wiKSxcInJldHJ5LWFmdGVyXCI6ZS5oZWFkZXJzLmdldChcIlJldHJ5LUFmdGVyXCIpfSxyZWFzb246ZS5zdGF0dXNUZXh0LHN0YXR1c0NvZGU6ZS5zdGF0dXN9fSkpfSkpfSkpKSxuZXcgcGUuVihpKX1yZXR1cm4gdGhpcy5fbmV3VHJhbnNwb3J0PWZ1bmN0aW9uKGUpe3JldHVybiB1ZSh7YnVmZmVyU2l6ZTplLmJ1ZmZlclNpemV9LChmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGIuY1coKGZ1bmN0aW9uKG4scil7dmFyIGk9bmV3IFhNTEh0dHBSZXF1ZXN0O2Zvcih2YXIgbyBpbiBpLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2lmKDQ9PT1pLnJlYWR5U3RhdGUpe3ZhciBlPXtib2R5OmkucmVzcG9uc2UsaGVhZGVyczp7XCJ4LXNlbnRyeS1yYXRlLWxpbWl0c1wiOmkuZ2V0UmVzcG9uc2VIZWFkZXIoXCJYLVNlbnRyeS1SYXRlLUxpbWl0c1wiKSxcInJldHJ5LWFmdGVyXCI6aS5nZXRSZXNwb25zZUhlYWRlcihcIlJldHJ5LUFmdGVyXCIpfSxyZWFzb246aS5zdGF0dXNUZXh0LHN0YXR1c0NvZGU6aS5zdGF0dXN9O24oZSl9fSxpLm9wZW4oXCJQT1NUXCIsZS51cmwpLGUuaGVhZGVycylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZS5oZWFkZXJzLG8pJiZpLnNldFJlcXVlc3RIZWFkZXIobyxlLmhlYWRlcnNbb10pO2kuc2VuZCh0LmJvZHkpfSkpfSkpfSh7dXJsOmEsaGVhZGVyczppLmhlYWRlcnN9KSxuZXcgbWUoaSl9LHR9KE0pLHZlPW4oMjQzMjYpLGdlPW4oNzEzNzEpLHllPSgwLGcuUikoKSxFZT0wO2Z1bmN0aW9uIF9lKCl7cmV0dXJuIEVlPjB9ZnVuY3Rpb24gSWUoZSx0LG4pe2lmKHZvaWQgMD09PXQmJih0PXt9KSxcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXJldHVybiBlO3RyeXt2YXIgaT1lLl9fc2VudHJ5X3dyYXBwZWRfXztpZihpKXJldHVybiBpO2lmKCgwLG0uSEspKGUpKXJldHVybiBlfWNhdGNoKHQpe3JldHVybiBlfXZhciBvPWZ1bmN0aW9uKCl7dmFyIGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0cnl7biYmXCJmdW5jdGlvblwiPT10eXBlb2YgbiYmbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIG89aS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBJZShlLHQpfSkpO3JldHVybiBlLmFwcGx5KHRoaXMsbyl9Y2F0Y2goZSl7dGhyb3cgRWUrPTEsc2V0VGltZW91dCgoZnVuY3Rpb24oKXtFZS09MX0pKSwoMCxnZS4kZSkoKGZ1bmN0aW9uKG4pe24uYWRkRXZlbnRQcm9jZXNzb3IoKGZ1bmN0aW9uKGUpe3JldHVybiB0Lm1lY2hhbmlzbSYmKCgwLGEuRGIpKGUsdm9pZCAwLHZvaWQgMCksKDAsYS5FRykoZSx0Lm1lY2hhbmlzbSkpLGUuZXh0cmE9KDAsci5waSkoKDAsci5waSkoe30sZS5leHRyYSkse2FyZ3VtZW50czppfSksZX0pKSwoMCxnZS5UYikoZSl9KSksZX19O3RyeXtmb3IodmFyIHMgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxzKSYmKG9bc109ZVtzXSl9Y2F0Y2goZSl7fSgwLG0uJFEpKG8sZSksKDAsbS54cCkoZSxcIl9fc2VudHJ5X3dyYXBwZWRfX1wiLG8pO3RyeXtPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG8sXCJuYW1lXCIpLmNvbmZpZ3VyYWJsZSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sXCJuYW1lXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBlLm5hbWV9fSl9Y2F0Y2goZSl7fXJldHVybiBvfXZhciBTZT1uKDU4NDY0KSxiZT1bXCJmYXRhbFwiLFwiZXJyb3JcIixcIndhcm5pbmdcIixcImxvZ1wiLFwiaW5mb1wiLFwiZGVidWdcIixcImNyaXRpY2FsXCJdLFRlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt0aGlzLm5hbWU9ZS5pZCx0aGlzLl9vcHRpb25zPSgwLHIucGkpKHtjb25zb2xlOiEwLGRvbTohMCxmZXRjaDohMCxoaXN0b3J5OiEwLHNlbnRyeTohMCx4aHI6ITB9LHQpfXJldHVybiBlLnByb3RvdHlwZS5hZGRTZW50cnlCcmVhZGNydW1iPWZ1bmN0aW9uKGUpe3RoaXMuX29wdGlvbnMuc2VudHJ5JiYoMCx2LkdkKSgpLmFkZEJyZWFkY3J1bWIoe2NhdGVnb3J5Olwic2VudHJ5LlwiKyhcInRyYW5zYWN0aW9uXCI9PT1lLnR5cGU/XCJ0cmFuc2FjdGlvblwiOlwiZXZlbnRcIiksZXZlbnRfaWQ6ZS5ldmVudF9pZCxsZXZlbDplLmxldmVsLG1lc3NhZ2U6KDAsYS5qSCkoZSl9LHtldmVudDplfSl9LGUucHJvdG90eXBlLnNldHVwT25jZT1mdW5jdGlvbigpe3ZhciBlO3RoaXMuX29wdGlvbnMuY29uc29sZSYmKDAseS5vKShcImNvbnNvbGVcIixDZSksdGhpcy5fb3B0aW9ucy5kb20mJigwLHkubykoXCJkb21cIiwoZT10aGlzLl9vcHRpb25zLmRvbSxmdW5jdGlvbih0KXt2YXIgbixyPVwib2JqZWN0XCI9PXR5cGVvZiBlP2Uuc2VyaWFsaXplQXR0cmlidXRlOnZvaWQgMDtcInN0cmluZ1wiPT10eXBlb2YgciYmKHI9W3JdKTt0cnl7bj10LmV2ZW50LnRhcmdldD8oMCxTZS5SKSh0LmV2ZW50LnRhcmdldCxyKTooMCxTZS5SKSh0LmV2ZW50LHIpfWNhdGNoKGUpe249XCI8dW5rbm93bj5cIn0wIT09bi5sZW5ndGgmJigwLHYuR2QpKCkuYWRkQnJlYWRjcnVtYih7Y2F0ZWdvcnk6XCJ1aS5cIit0Lm5hbWUsbWVzc2FnZTpufSx7ZXZlbnQ6dC5ldmVudCxuYW1lOnQubmFtZSxnbG9iYWw6dC5nbG9iYWx9KX0pKSx0aGlzLl9vcHRpb25zLnhociYmKDAseS5vKShcInhoclwiLEFlKSx0aGlzLl9vcHRpb25zLmZldGNoJiYoMCx5Lm8pKFwiZmV0Y2hcIixSZSksdGhpcy5fb3B0aW9ucy5oaXN0b3J5JiYoMCx5Lm8pKFwiaGlzdG9yeVwiLGtlKX0sZS5pZD1cIkJyZWFkY3J1bWJzXCIsZX0oKTtmdW5jdGlvbiBDZShlKXt2YXIgdCxuPXtjYXRlZ29yeTpcImNvbnNvbGVcIixkYXRhOnthcmd1bWVudHM6ZS5hcmdzLGxvZ2dlcjpcImNvbnNvbGVcIn0sbGV2ZWw6KHQ9ZS5sZXZlbCxcIndhcm5cIj09PXQ/TC56Lldhcm5pbmc6ZnVuY3Rpb24oZSl7cmV0dXJuLTEhPT1iZS5pbmRleE9mKGUpfSh0KT90Okwuei5Mb2cpLG1lc3NhZ2U6KDAscy5uSykoZS5hcmdzLFwiIFwiKX07aWYoXCJhc3NlcnRcIj09PWUubGV2ZWwpe2lmKCExIT09ZS5hcmdzWzBdKXJldHVybjtuLm1lc3NhZ2U9XCJBc3NlcnRpb24gZmFpbGVkOiBcIisoKDAscy5uSykoZS5hcmdzLnNsaWNlKDEpLFwiIFwiKXx8XCJjb25zb2xlLmFzc2VydFwiKSxuLmRhdGEuYXJndW1lbnRzPWUuYXJncy5zbGljZSgxKX0oMCx2LkdkKSgpLmFkZEJyZWFkY3J1bWIobix7aW5wdXQ6ZS5hcmdzLGxldmVsOmUubGV2ZWx9KX1mdW5jdGlvbiBBZShlKXtpZihlLmVuZFRpbWVzdGFtcCl7aWYoZS54aHIuX19zZW50cnlfb3duX3JlcXVlc3RfXylyZXR1cm47dmFyIHQ9ZS54aHIuX19zZW50cnlfeGhyX198fHt9LG49dC5tZXRob2Qscj10LnVybCxpPXQuc3RhdHVzX2NvZGUsbz10LmJvZHk7KDAsdi5HZCkoKS5hZGRCcmVhZGNydW1iKHtjYXRlZ29yeTpcInhoclwiLGRhdGE6e21ldGhvZDpuLHVybDpyLHN0YXR1c19jb2RlOml9LHR5cGU6XCJodHRwXCJ9LHt4aHI6ZS54aHIsaW5wdXQ6b30pfX1mdW5jdGlvbiBSZShlKXtlLmVuZFRpbWVzdGFtcCYmKGUuZmV0Y2hEYXRhLnVybC5tYXRjaCgvc2VudHJ5X2tleS8pJiZcIlBPU1RcIj09PWUuZmV0Y2hEYXRhLm1ldGhvZHx8KGUuZXJyb3I/KDAsdi5HZCkoKS5hZGRCcmVhZGNydW1iKHtjYXRlZ29yeTpcImZldGNoXCIsZGF0YTplLmZldGNoRGF0YSxsZXZlbDpMLnouRXJyb3IsdHlwZTpcImh0dHBcIn0se2RhdGE6ZS5lcnJvcixpbnB1dDplLmFyZ3N9KTooMCx2LkdkKSgpLmFkZEJyZWFkY3J1bWIoe2NhdGVnb3J5OlwiZmV0Y2hcIixkYXRhOigwLHIucGkpKCgwLHIucGkpKHt9LGUuZmV0Y2hEYXRhKSx7c3RhdHVzX2NvZGU6ZS5yZXNwb25zZS5zdGF0dXN9KSx0eXBlOlwiaHR0cFwifSx7aW5wdXQ6ZS5hcmdzLHJlc3BvbnNlOmUucmVzcG9uc2V9KSkpfWZ1bmN0aW9uIGtlKGUpe3ZhciB0PSgwLGcuUikoKSxuPWUuZnJvbSxyPWUudG8saT0oMCxhLmVuKSh0LmxvY2F0aW9uLmhyZWYpLG89KDAsYS5lbikobikscz0oMCxhLmVuKShyKTtvLnBhdGh8fChvPWkpLGkucHJvdG9jb2w9PT1zLnByb3RvY29sJiZpLmhvc3Q9PT1zLmhvc3QmJihyPXMucmVsYXRpdmUpLGkucHJvdG9jb2w9PT1vLnByb3RvY29sJiZpLmhvc3Q9PT1vLmhvc3QmJihuPW8ucmVsYXRpdmUpLCgwLHYuR2QpKCkuYWRkQnJlYWRjcnVtYih7Y2F0ZWdvcnk6XCJuYXZpZ2F0aW9uXCIsZGF0YTp7ZnJvbTpuLHRvOnJ9fSl9dmFyIE9lPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PXt9KSx0Ll9tZXRhZGF0YT10Ll9tZXRhZGF0YXx8e30sdC5fbWV0YWRhdGEuc2RrPXQuX21ldGFkYXRhLnNka3x8e25hbWU6XCJzZW50cnkuamF2YXNjcmlwdC5icm93c2VyXCIscGFja2FnZXM6W3tuYW1lOlwibnBtOkBzZW50cnkvYnJvd3NlclwiLHZlcnNpb246RS5KfV0sdmVyc2lvbjpFLkp9LGUuY2FsbCh0aGlzLGhlLHQpfHx0aGlzfXJldHVybigwLHIuWlQpKHQsZSksdC5wcm90b3R5cGUuc2hvd1JlcG9ydERpYWxvZz1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT17fSksKDAsZy5SKSgpLmRvY3VtZW50JiYodGhpcy5faXNFbmFibGVkKCk/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSYmKGU9e30pLHllLmRvY3VtZW50KWlmKGUuZXZlbnRJZClpZihlLmRzbil7dmFyIHQ9eWUuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTt0LmFzeW5jPSEwLHQuc3JjPSgwLHcuaFIpKGUuZHNuLGUpLGUub25Mb2FkJiYodC5vbmxvYWQ9ZS5vbkxvYWQpO3ZhciBuPXllLmRvY3VtZW50LmhlYWR8fHllLmRvY3VtZW50LmJvZHk7biYmbi5hcHBlbmRDaGlsZCh0KX1lbHNlIHZlLmgmJm8ua2cuZXJyb3IoXCJNaXNzaW5nIGRzbiBvcHRpb24gaW4gc2hvd1JlcG9ydERpYWxvZyBjYWxsXCIpO2Vsc2UgdmUuaCYmby5rZy5lcnJvcihcIk1pc3NpbmcgZXZlbnRJZCBvcHRpb24gaW4gc2hvd1JlcG9ydERpYWxvZyBjYWxsXCIpfSgoMCxyLnBpKSgoMCxyLnBpKSh7fSxlKSx7ZHNuOmUuZHNufHx0aGlzLmdldERzbigpfSkpOnZlLmgmJm8ua2cuZXJyb3IoXCJUcnlpbmcgdG8gY2FsbCBzaG93UmVwb3J0RGlhbG9nIHdpdGggU2VudHJ5IENsaWVudCBkaXNhYmxlZFwiKSl9LHQucHJvdG90eXBlLl9wcmVwYXJlRXZlbnQ9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0LnBsYXRmb3JtPXQucGxhdGZvcm18fFwiamF2YXNjcmlwdFwiLGUucHJvdG90eXBlLl9wcmVwYXJlRXZlbnQuY2FsbCh0aGlzLHQsbixyKX0sdC5wcm90b3R5cGUuX3NlbmRFdmVudD1mdW5jdGlvbih0KXt2YXIgbj10aGlzLmdldEludGVncmF0aW9uKFRlKTtuJiZuLmFkZFNlbnRyeUJyZWFkY3J1bWIodCksZS5wcm90b3R5cGUuX3NlbmRFdmVudC5jYWxsKHRoaXMsdCl9LHR9KE4pLE5lPVtcIkV2ZW50VGFyZ2V0XCIsXCJXaW5kb3dcIixcIk5vZGVcIixcIkFwcGxpY2F0aW9uQ2FjaGVcIixcIkF1ZGlvVHJhY2tMaXN0XCIsXCJDaGFubmVsTWVyZ2VyTm9kZVwiLFwiQ3J5cHRvT3BlcmF0aW9uXCIsXCJFdmVudFNvdXJjZVwiLFwiRmlsZVJlYWRlclwiLFwiSFRNTFVua25vd25FbGVtZW50XCIsXCJJREJEYXRhYmFzZVwiLFwiSURCUmVxdWVzdFwiLFwiSURCVHJhbnNhY3Rpb25cIixcIktleU9wZXJhdGlvblwiLFwiTWVkaWFDb250cm9sbGVyXCIsXCJNZXNzYWdlUG9ydFwiLFwiTW9kYWxXaW5kb3dcIixcIk5vdGlmaWNhdGlvblwiLFwiU1ZHRWxlbWVudEluc3RhbmNlXCIsXCJTY3JlZW5cIixcIlRleHRUcmFja1wiLFwiVGV4dFRyYWNrQ3VlXCIsXCJUZXh0VHJhY2tMaXN0XCIsXCJXZWJTb2NrZXRcIixcIldlYlNvY2tldFdvcmtlclwiLFwiV29ya2VyXCIsXCJYTUxIdHRwUmVxdWVzdFwiLFwiWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldFwiLFwiWE1MSHR0cFJlcXVlc3RVcGxvYWRcIl0sd2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3RoaXMubmFtZT1lLmlkLHRoaXMuX29wdGlvbnM9KDAsci5waSkoe1hNTEh0dHBSZXF1ZXN0OiEwLGV2ZW50VGFyZ2V0OiEwLHJlcXVlc3RBbmltYXRpb25GcmFtZTohMCxzZXRJbnRlcnZhbDohMCxzZXRUaW1lb3V0OiEwfSx0KX1yZXR1cm4gZS5wcm90b3R5cGUuc2V0dXBPbmNlPWZ1bmN0aW9uKCl7dmFyIGU9KDAsZy5SKSgpO3RoaXMuX29wdGlvbnMuc2V0VGltZW91dCYmKDAsbS5obCkoZSxcInNldFRpbWVvdXRcIixEZSksdGhpcy5fb3B0aW9ucy5zZXRJbnRlcnZhbCYmKDAsbS5obCkoZSxcInNldEludGVydmFsXCIsRGUpLHRoaXMuX29wdGlvbnMucmVxdWVzdEFuaW1hdGlvbkZyYW1lJiYoMCxtLmhsKShlLFwicmVxdWVzdEFuaW1hdGlvbkZyYW1lXCIsUGUpLHRoaXMuX29wdGlvbnMuWE1MSHR0cFJlcXVlc3QmJlwiWE1MSHR0cFJlcXVlc3RcImluIGUmJigwLG0uaGwpKFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSxcInNlbmRcIixNZSk7dmFyIHQ9dGhpcy5fb3B0aW9ucy5ldmVudFRhcmdldDt0JiYoQXJyYXkuaXNBcnJheSh0KT90Ok5lKS5mb3JFYWNoKExlKX0sZS5pZD1cIlRyeUNhdGNoXCIsZX0oKTtmdW5jdGlvbiBEZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuXT1hcmd1bWVudHNbbl07dmFyIHI9dFswXTtyZXR1cm4gdFswXT1JZShyLHttZWNoYW5pc206e2RhdGE6e2Z1bmN0aW9uOigwLHguJFApKGUpfSxoYW5kbGVkOiEwLHR5cGU6XCJpbnN0cnVtZW50XCJ9fSksZS5hcHBseSh0aGlzLHQpfX1mdW5jdGlvbiBQZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuYXBwbHkodGhpcyxbSWUodCx7bWVjaGFuaXNtOntkYXRhOntmdW5jdGlvbjpcInJlcXVlc3RBbmltYXRpb25GcmFtZVwiLGhhbmRsZXI6KDAseC4kUCkoZSl9LGhhbmRsZWQ6ITAsdHlwZTpcImluc3RydW1lbnRcIn19KV0pfX1mdW5jdGlvbiBNZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuXT1hcmd1bWVudHNbbl07dmFyIHI9dGhpcztyZXR1cm5bXCJvbmxvYWRcIixcIm9uZXJyb3JcIixcIm9ucHJvZ3Jlc3NcIixcIm9ucmVhZHlzdGF0ZWNoYW5nZVwiXS5mb3JFYWNoKChmdW5jdGlvbihlKXtlIGluIHImJlwiZnVuY3Rpb25cIj09dHlwZW9mIHJbZV0mJigwLG0uaGwpKHIsZSwoZnVuY3Rpb24odCl7dmFyIG49e21lY2hhbmlzbTp7ZGF0YTp7ZnVuY3Rpb246ZSxoYW5kbGVyOigwLHguJFApKHQpfSxoYW5kbGVkOiEwLHR5cGU6XCJpbnN0cnVtZW50XCJ9fSxyPSgwLG0uSEspKHQpO3JldHVybiByJiYobi5tZWNoYW5pc20uZGF0YS5oYW5kbGVyPSgwLHguJFApKHIpKSxJZSh0LG4pfSkpfSkpLGUuYXBwbHkodGhpcyx0KX19ZnVuY3Rpb24gTGUoZSl7dmFyIHQ9KDAsZy5SKSgpLG49dFtlXSYmdFtlXS5wcm90b3R5cGU7biYmbi5oYXNPd25Qcm9wZXJ0eSYmbi5oYXNPd25Qcm9wZXJ0eShcImFkZEV2ZW50TGlzdGVuZXJcIikmJigoMCxtLmhsKShuLFwiYWRkRXZlbnRMaXN0ZW5lclwiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obixyLGkpe3RyeXtcImZ1bmN0aW9uXCI9PXR5cGVvZiByLmhhbmRsZUV2ZW50JiYoci5oYW5kbGVFdmVudD1JZShyLmhhbmRsZUV2ZW50LmJpbmQocikse21lY2hhbmlzbTp7ZGF0YTp7ZnVuY3Rpb246XCJoYW5kbGVFdmVudFwiLGhhbmRsZXI6KDAseC4kUCkociksdGFyZ2V0OmV9LGhhbmRsZWQ6ITAsdHlwZTpcImluc3RydW1lbnRcIn19KSl9Y2F0Y2goZSl7fXJldHVybiB0LmFwcGx5KHRoaXMsW24sSWUocix7bWVjaGFuaXNtOntkYXRhOntmdW5jdGlvbjpcImFkZEV2ZW50TGlzdGVuZXJcIixoYW5kbGVyOigwLHguJFApKHIpLHRhcmdldDplfSxoYW5kbGVkOiEwLHR5cGU6XCJpbnN0cnVtZW50XCJ9fSksaV0pfX0pKSwoMCxtLmhsKShuLFwicmVtb3ZlRXZlbnRMaXN0ZW5lclwiLChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuLHIpe3ZhciBpPW47dHJ5e3ZhciBvPWkmJmkuX19zZW50cnlfd3JhcHBlZF9fO28mJmUuY2FsbCh0aGlzLHQsbyxyKX1jYXRjaChlKXt9cmV0dXJuIGUuY2FsbCh0aGlzLHQsaSxyKX19KSkpfXZhciBVZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dGhpcy5uYW1lPWUuaWQsdGhpcy5faW5zdGFsbEZ1bmM9e29uZXJyb3I6eGUsb251bmhhbmRsZWRyZWplY3Rpb246RmV9LHRoaXMuX29wdGlvbnM9KDAsci5waSkoe29uZXJyb3I6ITAsb251bmhhbmRsZWRyZWplY3Rpb246ITB9LHQpfXJldHVybiBlLnByb3RvdHlwZS5zZXR1cE9uY2U9ZnVuY3Rpb24oKXtFcnJvci5zdGFja1RyYWNlTGltaXQ9NTA7dmFyIGUsdD10aGlzLl9vcHRpb25zO2Zvcih2YXIgbiBpbiB0KXt2YXIgcj10aGlzLl9pbnN0YWxsRnVuY1tuXTtyJiZ0W25dJiYoZT1uLHZlLmgmJm8ua2cubG9nKFwiR2xvYmFsIEhhbmRsZXIgYXR0YWNoZWQ6IFwiK2UpLHIoKSx0aGlzLl9pbnN0YWxsRnVuY1tuXT12b2lkIDApfX0sZS5pZD1cIkdsb2JhbEhhbmRsZXJzXCIsZX0oKTtmdW5jdGlvbiB4ZSgpeygwLHkubykoXCJlcnJvclwiLChmdW5jdGlvbihlKXt2YXIgdD0oMCxyLkNSKShHZSgpLDIpLG49dFswXSxpPXRbMV07aWYobi5nZXRJbnRlZ3JhdGlvbihVZSkpe3ZhciBvPWUubXNnLGE9ZS51cmwscz1lLmxpbmUsYz1lLmNvbHVtbixsPWUuZXJyb3I7aWYoIShfZSgpfHxsJiZsLl9fc2VudHJ5X293bl9yZXF1ZXN0X18pKXt2YXIgdT12b2lkIDA9PT1sJiYoMCxTLkhEKShvKT9mdW5jdGlvbihlLHQsbixyKXt2YXIgaT0oMCxTLlZXKShlKT9lLm1lc3NhZ2U6ZSxvPVwiRXJyb3JcIixhPWkubWF0Y2goL14oPzpbVXVdbmNhdWdodCAoPzpleGNlcHRpb246ICk/KT8oPzooKD86RXZhbHxJbnRlcm5hbHxSYW5nZXxSZWZlcmVuY2V8U3ludGF4fFR5cGV8VVJJfClFcnJvcik6ICk/KC4qKSQvaSk7cmV0dXJuIGEmJihvPWFbMV0saT1hWzJdKSxCZSh7ZXhjZXB0aW9uOnt2YWx1ZXM6W3t0eXBlOm8sdmFsdWU6aX1dfX0sdCxuLHIpfShvLGEscyxjKTpCZShpZShsfHxvLHZvaWQgMCxpLCExKSxhLHMsYyk7dS5sZXZlbD1MLnouRXJyb3IsVmUobixsLHUsXCJvbmVycm9yXCIpfX19KSl9ZnVuY3Rpb24gRmUoKXsoMCx5Lm8pKFwidW5oYW5kbGVkcmVqZWN0aW9uXCIsKGZ1bmN0aW9uKGUpe3ZhciB0PSgwLHIuQ1IpKEdlKCksMiksbj10WzBdLGk9dFsxXTtpZihuLmdldEludGVncmF0aW9uKFVlKSl7dmFyIG89ZTt0cnl7XCJyZWFzb25cImluIGU/bz1lLnJlYXNvbjpcImRldGFpbFwiaW4gZSYmXCJyZWFzb25cImluIGUuZGV0YWlsJiYobz1lLmRldGFpbC5yZWFzb24pfWNhdGNoKGUpe31pZihfZSgpfHxvJiZvLl9fc2VudHJ5X293bl9yZXF1ZXN0X18pcmV0dXJuITA7dmFyIGE9KDAsUy5wdCkobyk/e2V4Y2VwdGlvbjp7dmFsdWVzOlt7dHlwZTpcIlVuaGFuZGxlZFJlamVjdGlvblwiLHZhbHVlOlwiTm9uLUVycm9yIHByb21pc2UgcmVqZWN0aW9uIGNhcHR1cmVkIHdpdGggdmFsdWU6IFwiK1N0cmluZyhvKX1dfX06aWUobyx2b2lkIDAsaSwhMCk7YS5sZXZlbD1MLnouRXJyb3IsVmUobixvLGEsXCJvbnVuaGFuZGxlZHJlamVjdGlvblwiKX19KSl9ZnVuY3Rpb24gQmUoZSx0LG4scil7dmFyIGk9ZS5leGNlcHRpb249ZS5leGNlcHRpb258fHt9LG89aS52YWx1ZXM9aS52YWx1ZXN8fFtdLGE9b1swXT1vWzBdfHx7fSxzPWEuc3RhY2t0cmFjZT1hLnN0YWNrdHJhY2V8fHt9LGM9cy5mcmFtZXM9cy5mcmFtZXN8fFtdLGw9aXNOYU4ocGFyc2VJbnQociwxMCkpP3ZvaWQgMDpyLHU9aXNOYU4ocGFyc2VJbnQobiwxMCkpP3ZvaWQgMDpuLGQ9KDAsUy5IRCkodCkmJnQubGVuZ3RoPjA/dDooMCxTZS5sKSgpO3JldHVybiAwPT09Yy5sZW5ndGgmJmMucHVzaCh7Y29sbm86bCxmaWxlbmFtZTpkLGZ1bmN0aW9uOlwiP1wiLGluX2FwcDohMCxsaW5lbm86dX0pLGV9ZnVuY3Rpb24gVmUoZSx0LG4scil7KDAsYS5FRykobix7aGFuZGxlZDohMSx0eXBlOnJ9KSxlLmNhcHR1cmVFdmVudChuLHtvcmlnaW5hbEV4Y2VwdGlvbjp0fSl9ZnVuY3Rpb24gR2UoKXt2YXIgZT0oMCx2LkdkKSgpLHQ9ZS5nZXRDbGllbnQoKTtyZXR1cm5bZSx0JiZ0LmdldE9wdGlvbnMoKS5hdHRhY2hTdGFja3RyYWNlXX12YXIgSGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZvaWQgMD09PXQmJih0PXt9KSx0aGlzLm5hbWU9ZS5pZCx0aGlzLl9rZXk9dC5rZXl8fFwiY2F1c2VcIix0aGlzLl9saW1pdD10LmxpbWl0fHw1fXJldHVybiBlLnByb3RvdHlwZS5zZXR1cE9uY2U9ZnVuY3Rpb24oKXsoMCxfLmMpKChmdW5jdGlvbih0LG4pe3ZhciBpPSgwLHYuR2QpKCkuZ2V0SW50ZWdyYXRpb24oZSk7cmV0dXJuIGk/ZnVuY3Rpb24oZSx0LG4saSl7aWYoIShuLmV4Y2VwdGlvbiYmbi5leGNlcHRpb24udmFsdWVzJiZpJiYoMCxTLlY5KShpLm9yaWdpbmFsRXhjZXB0aW9uLEVycm9yKSkpcmV0dXJuIG47dmFyIG89V2UodCxpLm9yaWdpbmFsRXhjZXB0aW9uLGUpO3JldHVybiBuLmV4Y2VwdGlvbi52YWx1ZXM9KDAsci5mbCkobyxuLmV4Y2VwdGlvbi52YWx1ZXMpLG59KGkuX2tleSxpLl9saW1pdCx0LG4pOnR9KSl9LGUuaWQ9XCJMaW5rZWRFcnJvcnNcIixlfSgpO2Z1bmN0aW9uIFdlKGUsdCxuLGkpe2lmKHZvaWQgMD09PWkmJihpPVtdKSwhKDAsUy5WOSkodFtuXSxFcnJvcil8fGkubGVuZ3RoKzE+PWUpcmV0dXJuIGk7dmFyIG89JCh0W25dKTtyZXR1cm4gV2UoZSx0W25dLG4sKDAsci5mbCkoW29dLGkpKX12YXIgamU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5uYW1lPWUuaWR9cmV0dXJuIGUucHJvdG90eXBlLnNldHVwT25jZT1mdW5jdGlvbih0LG4pe3QoKGZ1bmN0aW9uKHQpe3ZhciByPW4oKS5nZXRJbnRlZ3JhdGlvbihlKTtpZihyKXt0cnl7aWYoZnVuY3Rpb24oZSx0KXtyZXR1cm4hKCF0fHwhZnVuY3Rpb24oZSx0KXt2YXIgbj1lLm1lc3NhZ2Uscj10Lm1lc3NhZ2U7cmV0dXJuISghbiYmIXJ8fG4mJiFyfHwhbiYmcnx8biE9PXJ8fCF6ZShlLHQpfHwhWmUoZSx0KSl9KGUsdCkmJiFmdW5jdGlvbihlLHQpe3ZhciBuPUtlKHQpLHI9S2UoZSk7cmV0dXJuISEobiYmciYmbi50eXBlPT09ci50eXBlJiZuLnZhbHVlPT09ci52YWx1ZSYmemUoZSx0KSYmWmUoZSx0KSl9KGUsdCkpfSh0LHIuX3ByZXZpb3VzRXZlbnQpKXJldHVybiB2ZS5oJiZvLmtnLndhcm4oXCJFdmVudCBkcm9wcGVkIGR1ZSB0byBiZWluZyBhIGR1cGxpY2F0ZSBvZiBwcmV2aW91c2x5IGNhcHR1cmVkIGV2ZW50LlwiKSxudWxsfWNhdGNoKGUpe3JldHVybiByLl9wcmV2aW91c0V2ZW50PXR9cmV0dXJuIHIuX3ByZXZpb3VzRXZlbnQ9dH1yZXR1cm4gdH0pKX0sZS5pZD1cIkRlZHVwZVwiLGV9KCk7ZnVuY3Rpb24gWmUoZSx0KXt2YXIgbj1ZZShlKSxyPVllKHQpO2lmKCFuJiYhcilyZXR1cm4hMDtpZihuJiYhcnx8IW4mJnIpcmV0dXJuITE7aWYoci5sZW5ndGghPT1uLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIG89cltpXSxhPW5baV07aWYoby5maWxlbmFtZSE9PWEuZmlsZW5hbWV8fG8ubGluZW5vIT09YS5saW5lbm98fG8uY29sbm8hPT1hLmNvbG5vfHxvLmZ1bmN0aW9uIT09YS5mdW5jdGlvbilyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiB6ZShlLHQpe3ZhciBuPWUuZmluZ2VycHJpbnQscj10LmZpbmdlcnByaW50O2lmKCFuJiYhcilyZXR1cm4hMDtpZihuJiYhcnx8IW4mJnIpcmV0dXJuITE7dHJ5e3JldHVybiEobi5qb2luKFwiXCIpIT09ci5qb2luKFwiXCIpKX1jYXRjaChlKXtyZXR1cm4hMX19ZnVuY3Rpb24gS2UoZSl7cmV0dXJuIGUuZXhjZXB0aW9uJiZlLmV4Y2VwdGlvbi52YWx1ZXMmJmUuZXhjZXB0aW9uLnZhbHVlc1swXX1mdW5jdGlvbiBZZShlKXt2YXIgdD1lLmV4Y2VwdGlvbjtpZih0KXRyeXtyZXR1cm4gdC52YWx1ZXNbMF0uc3RhY2t0cmFjZS5mcmFtZXN9Y2F0Y2goZSl7cmV0dXJufWVsc2UgaWYoZS5zdGFja3RyYWNlKXJldHVybiBlLnN0YWNrdHJhY2UuZnJhbWVzfXZhciBxZT0oMCxnLlIpKCksWGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5uYW1lPWUuaWR9cmV0dXJuIGUucHJvdG90eXBlLnNldHVwT25jZT1mdW5jdGlvbigpeygwLF8uYykoKGZ1bmN0aW9uKHQpe2lmKCgwLHYuR2QpKCkuZ2V0SW50ZWdyYXRpb24oZSkpe2lmKCFxZS5uYXZpZ2F0b3ImJiFxZS5sb2NhdGlvbiYmIXFlLmRvY3VtZW50KXJldHVybiB0O3ZhciBuPXQucmVxdWVzdCYmdC5yZXF1ZXN0LnVybHx8cWUubG9jYXRpb24mJnFlLmxvY2F0aW9uLmhyZWYsaT0ocWUuZG9jdW1lbnR8fHt9KS5yZWZlcnJlcixvPShxZS5uYXZpZ2F0b3J8fHt9KS51c2VyQWdlbnQsYT0oMCxyLnBpKSgoMCxyLnBpKSgoMCxyLnBpKSh7fSx0LnJlcXVlc3QmJnQucmVxdWVzdC5oZWFkZXJzKSxpJiZ7UmVmZXJlcjppfSksbyYme1wiVXNlci1BZ2VudFwiOm99KSxzPSgwLHIucGkpKCgwLHIucGkpKHt9LG4mJnt1cmw6bn0pLHtoZWFkZXJzOmF9KTtyZXR1cm4oMCxyLnBpKSgoMCxyLnBpKSh7fSx0KSx7cmVxdWVzdDpzfSl9cmV0dXJuIHR9KSl9LGUuaWQ9XCJVc2VyQWdlbnRcIixlfSgpLFFlPVtuZXcgdSxuZXcgaCxuZXcgd2UsbmV3IFRlLG5ldyBVZSxuZXcgSGUsbmV3IGplLG5ldyBYZV07ZnVuY3Rpb24gSmUoZSl7aWYodm9pZCAwPT09ZSYmKGU9e30pLHZvaWQgMD09PWUuZGVmYXVsdEludGVncmF0aW9ucyYmKGUuZGVmYXVsdEludGVncmF0aW9ucz1RZSksdm9pZCAwPT09ZS5yZWxlYXNlKXt2YXIgdD0oMCxnLlIpKCk7dC5TRU5UUllfUkVMRUFTRSYmdC5TRU5UUllfUkVMRUFTRS5pZCYmKGUucmVsZWFzZT10LlNFTlRSWV9SRUxFQVNFLmlkKX12b2lkIDA9PT1lLmF1dG9TZXNzaW9uVHJhY2tpbmcmJihlLmF1dG9TZXNzaW9uVHJhY2tpbmc9ITApLHZvaWQgMD09PWUuc2VuZENsaWVudFJlcG9ydHMmJihlLnNlbmRDbGllbnRSZXBvcnRzPSEwKSxmdW5jdGlvbihlLHQpeyEwPT09dC5kZWJ1ZyYmKGM/by5rZy5lbmFibGUoKTpjb25zb2xlLndhcm4oXCJbU2VudHJ5XSBDYW5ub3QgaW5pdGlhbGl6ZSBTREsgd2l0aCBgZGVidWdgIG9wdGlvbiB1c2luZyBhIG5vbi1kZWJ1ZyBidW5kbGUuXCIpKTt2YXIgbj0oMCx2LkdkKSgpLHI9bi5nZXRTY29wZSgpO3ImJnIudXBkYXRlKHQuaW5pdGlhbFNjb3BlKTt2YXIgaT1uZXcgZSh0KTtuLmJpbmRDbGllbnQoaSl9KE9lLGUpLGUuYXV0b1Nlc3Npb25UcmFja2luZyYmZnVuY3Rpb24oKXtpZih2b2lkIDAhPT0oMCxnLlIpKCkuZG9jdW1lbnQpe3ZhciBlPSgwLHYuR2QpKCk7ZS5jYXB0dXJlU2Vzc2lvbiYmKGV0KGUpLCgwLHkubykoXCJoaXN0b3J5XCIsKGZ1bmN0aW9uKGUpe3ZhciB0PWUuZnJvbSxuPWUudG87dm9pZCAwIT09dCYmdCE9PW4mJmV0KCgwLHYuR2QpKCkpfSkpKX1lbHNlIHZlLmgmJm8ua2cud2FybihcIlNlc3Npb24gdHJhY2tpbmcgaW4gbm9uLWJyb3dzZXIgZW52aXJvbm1lbnQgd2l0aCBAc2VudHJ5L2Jyb3dzZXIgaXMgbm90IHN1cHBvcnRlZC5cIil9KCl9ZnVuY3Rpb24gJGUoZSl7dm9pZCAwPT09ZSYmKGU9e30pO3ZhciB0PSgwLHYuR2QpKCksbj10LmdldFNjb3BlKCk7biYmKGUudXNlcj0oMCxyLnBpKSgoMCxyLnBpKSh7fSxuLmdldFVzZXIoKSksZS51c2VyKSksZS5ldmVudElkfHwoZS5ldmVudElkPXQubGFzdEV2ZW50SWQoKSk7dmFyIGk9dC5nZXRDbGllbnQoKTtpJiZpLnNob3dSZXBvcnREaWFsb2coZSl9ZnVuY3Rpb24gZXQoZSl7ZS5zdGFydFNlc3Npb24oe2lnbm9yZUR1cmF0aW9uOiEwfSksZS5jYXB0dXJlU2Vzc2lvbigpfX0sMTE3MzE6KGUsdCxuKT0+e24uZCh0LHtkOigpPT55fSk7dmFyIHI9big2Njg1NiksaT1uKDE5ODQpLG89bigyOTMyNCksYT1uKDgyOTkxKSxzPW4oODEyMjcpLGM9bigxMjM0MyksbD1uKDU4NzI1KSx1PW4oMjExNzApLGQ9bigzMDI5MiksZj1uKDEzNikscD1uKDgwMjI4KSxtPW4oMjQzMjYpLGg9big0NDMzMSk7ZnVuY3Rpb24gdihlKXtyZXR1cm5cImV2ZW50XCI9PT1lP1wiZXJyb3JcIjplfXZhciBnPSgwLGEuUikoKSx5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgdD10aGlzO3RoaXMub3B0aW9ucz1lLHRoaXMuX2J1ZmZlcj0oMCxzLngpKDMwKSx0aGlzLl9yYXRlTGltaXRzPXt9LHRoaXMuX291dGNvbWVzPXt9LHRoaXMuX2FwaT0oMCxpLmhkKShlLmRzbixlLl9tZXRhZGF0YSxlLnR1bm5lbCksdGhpcy51cmw9KDAsaS5xaSkodGhpcy5fYXBpLmRzbiksdGhpcy5vcHRpb25zLnNlbmRDbGllbnRSZXBvcnRzJiZnLmRvY3VtZW50JiZnLmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsKGZ1bmN0aW9uKCl7XCJoaWRkZW5cIj09PWcuZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlJiZ0Ll9mbHVzaE91dGNvbWVzKCl9KSl9cmV0dXJuIGUucHJvdG90eXBlLnNlbmRFdmVudD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fc2VuZFJlcXVlc3QoKDAsby5uQSkoZSx0aGlzLl9hcGkpLGUpfSxlLnByb3RvdHlwZS5zZW5kU2Vzc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fc2VuZFJlcXVlc3QoKDAsby5ReikoZSx0aGlzLl9hcGkpLGUpfSxlLnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fYnVmZmVyLmRyYWluKGUpfSxlLnByb3RvdHlwZS5yZWNvcmRMb3N0RXZlbnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbjtpZih0aGlzLm9wdGlvbnMuc2VuZENsaWVudFJlcG9ydHMpe3ZhciByPXYodCkrXCI6XCIrZTttLmgmJmMua2cubG9nKFwiQWRkaW5nIG91dGNvbWU6IFwiK3IpLHRoaXMuX291dGNvbWVzW3JdPShudWxsIT0obj10aGlzLl9vdXRjb21lc1tyXSk/bjowKSsxfX0sZS5wcm90b3R5cGUuX2ZsdXNoT3V0Y29tZXM9ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuc2VuZENsaWVudFJlcG9ydHMpe3ZhciBlPXRoaXMuX291dGNvbWVzO2lmKHRoaXMuX291dGNvbWVzPXt9LE9iamVjdC5rZXlzKGUpLmxlbmd0aCl7bS5oJiZjLmtnLmxvZyhcIkZsdXNoaW5nIG91dGNvbWVzOlxcblwiK0pTT04uc3RyaW5naWZ5KGUsbnVsbCwyKSk7dmFyIHQ9KDAsaS5VdCkodGhpcy5fYXBpLmRzbix0aGlzLl9hcGkudHVubmVsKSxuPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1be3R5cGU6XCJjbGllbnRfcmVwb3J0XCJ9LHt0aW1lc3RhbXA6KDAsdS55VykoKSxkaXNjYXJkZWRfZXZlbnRzOmV9XTtyZXR1cm4oMCxsLkpkKSh0P3tkc246dH06e30sW3JdKX0oT2JqZWN0LmtleXMoZSkubWFwKChmdW5jdGlvbih0KXt2YXIgbj0oMCxyLkNSKSh0LnNwbGl0KFwiOlwiKSwyKSxpPW5bMF07cmV0dXJue3JlYXNvbjpuWzFdLGNhdGVnb3J5OmkscXVhbnRpdHk6ZVt0XX19KSksdGhpcy5fYXBpLnR1bm5lbCYmKDAsZC5SKSh0aGlzLl9hcGkuZHNuKSk7dHJ5eygwLGgueikodCwoMCxsLlYkKShuKSl9Y2F0Y2goZSl7bS5oJiZjLmtnLmVycm9yKGUpfX1lbHNlIG0uaCYmYy5rZy5sb2coXCJObyBvdXRjb21lcyB0byBmbHVzaFwiKX19LGUucHJvdG90eXBlLl9oYW5kbGVSZXNwb25zZT1mdW5jdGlvbihlKXt2YXIgdD1lLnJlcXVlc3RUeXBlLG49ZS5yZXNwb25zZSxyPWUuaGVhZGVycyxpPWUucmVzb2x2ZSxvPWUucmVqZWN0LGE9KDAsZi5GKShuLnN0YXR1cyk7dGhpcy5fcmF0ZUxpbWl0cz0oMCxwLldHKSh0aGlzLl9yYXRlTGltaXRzLHIpLHRoaXMuX2lzUmF0ZUxpbWl0ZWQodCkmJm0uaCYmYy5rZy53YXJuKFwiVG9vIG1hbnkgXCIrdCtcIiByZXF1ZXN0cywgYmFja2luZyBvZmYgdW50aWw6IFwiK3RoaXMuX2Rpc2FibGVkVW50aWwodCkpLFwic3VjY2Vzc1wiIT09YT9vKG4pOmkoe3N0YXR1czphfSl9LGUucHJvdG90eXBlLl9kaXNhYmxlZFVudGlsPWZ1bmN0aW9uKGUpe3ZhciB0PXYoZSk7cmV0dXJuIG5ldyBEYXRlKCgwLHAubnMpKHRoaXMuX3JhdGVMaW1pdHMsdCkpfSxlLnByb3RvdHlwZS5faXNSYXRlTGltaXRlZD1mdW5jdGlvbihlKXt2YXIgdD12KGUpO3JldHVybigwLHAuUSkodGhpcy5fcmF0ZUxpbWl0cyx0KX0sZX0oKX0sNjg2OTA6KGUsdCxuKT0+e24uZCh0LHtWOigpPT5sfSk7dmFyIHI9big2Njg1NiksaT1uKDg4MjMpLG89big5Njg5MyksYT1uKDg4MjY2KSxzPW4oMTE3MzEpLGM9big0NDMzMSksbD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbil7dm9pZCAwPT09biYmKG49KDAsYy54KSgpKTt2YXIgcj1lLmNhbGwodGhpcyx0KXx8dGhpcztyZXR1cm4gci5fZmV0Y2g9bixyfXJldHVybigwLHIuWlQpKHQsZSksdC5wcm90b3R5cGUuX3NlbmRSZXF1ZXN0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztpZih0aGlzLl9pc1JhdGVMaW1pdGVkKGUudHlwZSkpcmV0dXJuIHRoaXMucmVjb3JkTG9zdEV2ZW50KFwicmF0ZWxpbWl0X2JhY2tvZmZcIixlLnR5cGUpLFByb21pc2UucmVqZWN0KHtldmVudDp0LHR5cGU6ZS50eXBlLHJlYXNvbjpcIlRyYW5zcG9ydCBmb3IgXCIrZS50eXBlK1wiIHJlcXVlc3RzIGxvY2tlZCB0aWxsIFwiK3RoaXMuX2Rpc2FibGVkVW50aWwoZS50eXBlKStcIiBkdWUgdG8gdG9vIG1hbnkgcmVxdWVzdHMuXCIsc3RhdHVzOjQyOX0pO3ZhciByPXtib2R5OmUuYm9keSxtZXRob2Q6XCJQT1NUXCIscmVmZXJyZXJQb2xpY3k6KDAsaS5odikoKT9cIm9yaWdpblwiOlwiXCJ9O3JldHVybiB2b2lkIDAhPT10aGlzLm9wdGlvbnMuZmV0Y2hQYXJhbWV0ZXJzJiZPYmplY3QuYXNzaWduKHIsdGhpcy5vcHRpb25zLmZldGNoUGFyYW1ldGVycyksdm9pZCAwIT09dGhpcy5vcHRpb25zLmhlYWRlcnMmJihyLmhlYWRlcnM9dGhpcy5vcHRpb25zLmhlYWRlcnMpLHRoaXMuX2J1ZmZlci5hZGQoKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBvLmNXKChmdW5jdGlvbih0LGkpe24uX2ZldGNoKGUudXJsLHIpLnRoZW4oKGZ1bmN0aW9uKHIpe3ZhciBvPXtcIngtc2VudHJ5LXJhdGUtbGltaXRzXCI6ci5oZWFkZXJzLmdldChcIlgtU2VudHJ5LVJhdGUtTGltaXRzXCIpLFwicmV0cnktYWZ0ZXJcIjpyLmhlYWRlcnMuZ2V0KFwiUmV0cnktQWZ0ZXJcIil9O24uX2hhbmRsZVJlc3BvbnNlKHtyZXF1ZXN0VHlwZTplLnR5cGUscmVzcG9uc2U6cixoZWFkZXJzOm8scmVzb2x2ZTp0LHJlamVjdDppfSl9KSkuY2F0Y2goaSl9KSl9KSkudGhlbih2b2lkIDAsKGZ1bmN0aW9uKHQpe3Rocm93IHQgaW5zdGFuY2VvZiBhLmI/bi5yZWNvcmRMb3N0RXZlbnQoXCJxdWV1ZV9vdmVyZmxvd1wiLGUudHlwZSk6bi5yZWNvcmRMb3N0RXZlbnQoXCJuZXR3b3JrX2Vycm9yXCIsZS50eXBlKSx0fSkpfSx0fShzLmQpfSw0NDMzMTooZSx0LG4pPT57bi5kKHQse3g6KCk9PmwsejooKT0+dX0pO3ZhciByLGk9big4Mjk5MSksbz1uKDg4MjMpLGE9bigxMjM0Mykscz1uKDI0MzI2KSxjPSgwLGkuUikoKTtmdW5jdGlvbiBsKCl7aWYocilyZXR1cm4gcjtpZigoMCxvLkR1KShjLmZldGNoKSlyZXR1cm4gcj1jLmZldGNoLmJpbmQoYyk7dmFyIGU9Yy5kb2N1bWVudCx0PWMuZmV0Y2g7aWYoZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5jcmVhdGVFbGVtZW50KXRyeXt2YXIgbj1lLmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7bi5oaWRkZW49ITAsZS5oZWFkLmFwcGVuZENoaWxkKG4pO3ZhciBpPW4uY29udGVudFdpbmRvdztpJiZpLmZldGNoJiYodD1pLmZldGNoKSxlLmhlYWQucmVtb3ZlQ2hpbGQobil9Y2F0Y2goZSl7cy5oJiZhLmtnLndhcm4oXCJDb3VsZCBub3QgY3JlYXRlIHNhbmRib3ggaWZyYW1lIGZvciBwdXJlIGZldGNoIGNoZWNrLCBiYWlsaW5nIHRvIHdpbmRvdy5mZXRjaDogXCIsZSl9cmV0dXJuIHI9dC5iaW5kKGMpfWZ1bmN0aW9uIHUoZSx0KXtpZihcIltvYmplY3QgTmF2aWdhdG9yXVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMmJmMubmF2aWdhdG9yKSYmXCJmdW5jdGlvblwiPT10eXBlb2YgYy5uYXZpZ2F0b3Iuc2VuZEJlYWNvbilyZXR1cm4gYy5uYXZpZ2F0b3Iuc2VuZEJlYWNvbi5iaW5kKGMubmF2aWdhdG9yKShlLHQpOygwLG8uQWspKCkmJmwoKShlLHtib2R5OnQsbWV0aG9kOlwiUE9TVFwiLGNyZWRlbnRpYWxzOlwib21pdFwiLGtlZXBhbGl2ZTohMH0pLnRoZW4obnVsbCwoZnVuY3Rpb24oZSl7Y29uc29sZS5lcnJvcihlKX0pKX19LDY2ODU2OihlLHQsbik9PntuLmQodCx7Q1I6KCk9PmEsWlQ6KCk9PmksZmw6KCk9PnMscGk6KCk9Pm99KTt2YXIgcj1mdW5jdGlvbihlLHQpe3JldHVybiByPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJihlW25dPXRbbl0pfSxyKGUsdCl9O2Z1bmN0aW9uIGkoZSx0KXtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfXIoZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihuLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgbil9dmFyIG89ZnVuY3Rpb24oKXtyZXR1cm4gbz1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQsbj0xLHI9YXJndW1lbnRzLmxlbmd0aDtuPHI7bisrKWZvcih2YXIgaSBpbiB0PWFyZ3VtZW50c1tuXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxpKSYmKGVbaV09dFtpXSk7cmV0dXJuIGV9LG8uYXBwbHkodGhpcyxhcmd1bWVudHMpfTtmdW5jdGlvbiBhKGUsdCl7dmFyIG49XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl07aWYoIW4pcmV0dXJuIGU7dmFyIHIsaSxvPW4uY2FsbChlKSxhPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT10fHx0LS0gPjApJiYhKHI9by5uZXh0KCkpLmRvbmU7KWEucHVzaChyLnZhbHVlKX1jYXRjaChlKXtpPXtlcnJvcjplfX1maW5hbGx5e3RyeXtyJiYhci5kb25lJiYobj1vLnJldHVybikmJm4uY2FsbChvKX1maW5hbGx5e2lmKGkpdGhyb3cgaS5lcnJvcn19cmV0dXJuIGF9ZnVuY3Rpb24gcygpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllPWUuY29uY2F0KGEoYXJndW1lbnRzW3RdKSk7cmV0dXJuIGV9fSwxOTg0OihlLHQsbik9PntuLmQodCx7VXQ6KCk9PmYsaFI6KCk9PnAsaGQ6KCk9PmEscWk6KCk9PmR9KTt2YXIgcj1uKDMwMjkyKSxpPW4oMjA1MzUpLG89XCI3XCI7ZnVuY3Rpb24gYShlLHQsbil7cmV0dXJue2luaXREc246ZSxtZXRhZGF0YTp0fHx7fSxkc246KDAsci52KShlKSx0dW5uZWw6bn19ZnVuY3Rpb24gcyhlKXt2YXIgdD1lLnByb3RvY29sP2UucHJvdG9jb2wrXCI6XCI6XCJcIixuPWUucG9ydD9cIjpcIitlLnBvcnQ6XCJcIjtyZXR1cm4gdCtcIi8vXCIrZS5ob3N0K24rKGUucGF0aD9cIi9cIitlLnBhdGg6XCJcIikrXCIvYXBpL1wifWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm5cIlwiK3MoZSkrZS5wcm9qZWN0SWQrXCIvXCIrdCtcIi9cIn1mdW5jdGlvbiBsKGUpe3JldHVybigwLGkuX2opKHtzZW50cnlfa2V5OmUucHVibGljS2V5LHNlbnRyeV92ZXJzaW9uOm99KX1mdW5jdGlvbiB1KGUpe3JldHVybiBjKGUsXCJzdG9yZVwiKX1mdW5jdGlvbiBkKGUpe3JldHVybiB1KGUpK1wiP1wiK2woZSl9ZnVuY3Rpb24gZihlLHQpe3JldHVybiB0fHxmdW5jdGlvbihlKXtyZXR1cm4gYyhlLFwiZW52ZWxvcGVcIil9KGUpK1wiP1wiK2woZSl9ZnVuY3Rpb24gcChlLHQpe3ZhciBuPSgwLHIudikoZSksaT1zKG4pK1wiZW1iZWQvZXJyb3ItcGFnZS9cIixvPVwiZHNuPVwiKygwLHIuUikobik7Zm9yKHZhciBhIGluIHQpaWYoXCJkc25cIiE9PWEpaWYoXCJ1c2VyXCI9PT1hKXtpZighdC51c2VyKWNvbnRpbnVlO3QudXNlci5uYW1lJiYobys9XCImbmFtZT1cIitlbmNvZGVVUklDb21wb25lbnQodC51c2VyLm5hbWUpKSx0LnVzZXIuZW1haWwmJihvKz1cIiZlbWFpbD1cIitlbmNvZGVVUklDb21wb25lbnQodC51c2VyLmVtYWlsKSl9ZWxzZSBvKz1cIiZcIitlbmNvZGVVUklDb21wb25lbnQoYSkrXCI9XCIrZW5jb2RlVVJJQ29tcG9uZW50KHRbYV0pO3JldHVybiBpK1wiP1wiK299IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dm9pZCAwPT09dCYmKHQ9e30pLHRoaXMuZHNuPWUsdGhpcy5fZHNuT2JqZWN0PSgwLHIudikoZSksdGhpcy5tZXRhZGF0YT10LHRoaXMuX3R1bm5lbD1ufWUucHJvdG90eXBlLmdldERzbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kc25PYmplY3R9LGUucHJvdG90eXBlLmZvcmNlRW52ZWxvcGU9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3R1bm5lbH0sZS5wcm90b3R5cGUuZ2V0QmFzZUFwaUVuZHBvaW50PWZ1bmN0aW9uKCl7cmV0dXJuIHModGhpcy5fZHNuT2JqZWN0KX0sZS5wcm90b3R5cGUuZ2V0U3RvcmVFbmRwb2ludD1mdW5jdGlvbigpe3JldHVybiB1KHRoaXMuX2Rzbk9iamVjdCl9LGUucHJvdG90eXBlLmdldFN0b3JlRW5kcG9pbnRXaXRoVXJsRW5jb2RlZEF1dGg9ZnVuY3Rpb24oKXtyZXR1cm4gZCh0aGlzLl9kc25PYmplY3QpfSxlLnByb3RvdHlwZS5nZXRFbnZlbG9wZUVuZHBvaW50V2l0aFVybEVuY29kZWRBdXRoPWZ1bmN0aW9uKCl7cmV0dXJuIGYodGhpcy5fZHNuT2JqZWN0LHRoaXMuX3R1bm5lbCl9fSgpfSwyOTMyNDooZSx0LG4pPT57bi5kKHQse01xOigpPT5mLFEzOigpPT51LFF6OigpPT5kLG5BOigpPT5wfSk7dmFyIHI9big1MTQyMSksaT1uKDMwMjkyKSxvPW4oNTg3MjUpLGE9big4ODAwNykscz1uKDE5ODQpO2Z1bmN0aW9uIGMoZSl7aWYoZS5tZXRhZGF0YSYmZS5tZXRhZGF0YS5zZGspe3ZhciB0PWUubWV0YWRhdGEuc2RrO3JldHVybntuYW1lOnQubmFtZSx2ZXJzaW9uOnQudmVyc2lvbn19fWZ1bmN0aW9uIGwoZSx0KXtyZXR1cm4gdD8oZS5zZGs9ZS5zZGt8fHt9LGUuc2RrLm5hbWU9ZS5zZGsubmFtZXx8dC5uYW1lLGUuc2RrLnZlcnNpb249ZS5zZGsudmVyc2lvbnx8dC52ZXJzaW9uLGUuc2RrLmludGVncmF0aW9ucz0oMCxyLmZsKShlLnNkay5pbnRlZ3JhdGlvbnN8fFtdLHQuaW50ZWdyYXRpb25zfHxbXSksZS5zZGsucGFja2FnZXM9KDAsci5mbCkoZS5zZGsucGFja2FnZXN8fFtdLHQucGFja2FnZXN8fFtdKSxlKTplfWZ1bmN0aW9uIHUoZSx0KXt2YXIgbj1jKHQpLGE9KDAsci5waSkoKDAsci5waSkoe3NlbnRfYXQ6KG5ldyBEYXRlKS50b0lTT1N0cmluZygpfSxuJiZ7c2RrOm59KSwhIXQudHVubmVsJiZ7ZHNuOigwLGkuUikodC5kc24pfSkscz1cImFnZ3JlZ2F0ZXNcImluIGU/XCJzZXNzaW9uc1wiOlwic2Vzc2lvblwiLGw9W3t0eXBlOnN9LGVdO3JldHVyblsoMCxvLkpkKShhLFtsXSksc119ZnVuY3Rpb24gZChlLHQpe3ZhciBuPSgwLHIuQ1IpKHUoZSx0KSwyKSxpPW5bMF0sYT1uWzFdO3JldHVybntib2R5OigwLG8uViQpKGkpLHR5cGU6YSx1cmw6KDAscy5VdCkodC5kc24sdC50dW5uZWwpfX1mdW5jdGlvbiBmKGUsdCl7dmFyIG49Yyh0KSxhPWUudHlwZXx8XCJldmVudFwiLHM9KGUuc2RrUHJvY2Vzc2luZ01ldGFkYXRhfHx7fSkudHJhbnNhY3Rpb25TYW1wbGluZ3x8e30sdT1zLm1ldGhvZCxkPXMucmF0ZTtsKGUsdC5tZXRhZGF0YS5zZGspLGUudGFncz1lLnRhZ3N8fHt9LGUuZXh0cmE9ZS5leHRyYXx8e30sZS5zZGtQcm9jZXNzaW5nTWV0YWRhdGEmJmUuc2RrUHJvY2Vzc2luZ01ldGFkYXRhLmJhc2VDbGllbnROb3JtYWxpemVkfHwoZS50YWdzLnNraXBwZWROb3JtYWxpemF0aW9uPSEwLGUuZXh0cmEubm9ybWFsaXplRGVwdGg9ZS5zZGtQcm9jZXNzaW5nTWV0YWRhdGE/ZS5zZGtQcm9jZXNzaW5nTWV0YWRhdGEubm9ybWFsaXplRGVwdGg6XCJ1bnNldFwiKSxkZWxldGUgZS5zZGtQcm9jZXNzaW5nTWV0YWRhdGE7dmFyIGY9KDAsci5waSkoKDAsci5waSkoe2V2ZW50X2lkOmUuZXZlbnRfaWQsc2VudF9hdDoobmV3IERhdGUpLnRvSVNPU3RyaW5nKCl9LG4mJntzZGs6bn0pLCEhdC50dW5uZWwmJntkc246KDAsaS5SKSh0LmRzbil9KSxwPVt7dHlwZTphLHNhbXBsZV9yYXRlczpbe2lkOnUscmF0ZTpkfV19LGVdO3JldHVybigwLG8uSmQpKGYsW3BdKX1mdW5jdGlvbiBwKGUsdCl7dmFyIG4sdT1jKHQpLGQ9ZS50eXBlfHxcImV2ZW50XCIsZj1cInRyYW5zYWN0aW9uXCI9PT1kfHwhIXQudHVubmVsLHA9KGUuc2RrUHJvY2Vzc2luZ01ldGFkYXRhfHx7fSkudHJhbnNhY3Rpb25TYW1wbGluZ3x8e30sbT1wLm1ldGhvZCxoPXAucmF0ZTtsKGUsdC5tZXRhZGF0YS5zZGspLGUudGFncz1lLnRhZ3N8fHt9LGUuZXh0cmE9ZS5leHRyYXx8e30sZS5zZGtQcm9jZXNzaW5nTWV0YWRhdGEmJmUuc2RrUHJvY2Vzc2luZ01ldGFkYXRhLmJhc2VDbGllbnROb3JtYWxpemVkfHwoZS50YWdzLnNraXBwZWROb3JtYWxpemF0aW9uPSEwLGUuZXh0cmEubm9ybWFsaXplRGVwdGg9ZS5zZGtQcm9jZXNzaW5nTWV0YWRhdGE/ZS5zZGtQcm9jZXNzaW5nTWV0YWRhdGEubm9ybWFsaXplRGVwdGg6XCJ1bnNldFwiKSxkZWxldGUgZS5zZGtQcm9jZXNzaW5nTWV0YWRhdGE7dHJ5e249SlNPTi5zdHJpbmdpZnkoZSl9Y2F0Y2godCl7ZS50YWdzLkpTT05TdHJpbmdpZnlFcnJvcj0hMCxlLmV4dHJhLkpTT05TdHJpbmdpZnlFcnJvcj10O3RyeXtuPUpTT04uc3RyaW5naWZ5KCgwLGEuRnYpKGUpKX1jYXRjaChlKXt2YXIgdj1lO249SlNPTi5zdHJpbmdpZnkoe21lc3NhZ2U6XCJKU09OLnN0cmluZ2lmeSBlcnJvciBhZnRlciByZW5vcm1hbGl6YXRpb25cIixleHRyYTp7bWVzc2FnZTp2Lm1lc3NhZ2Usc3RhY2s6di5zdGFja319KX19dmFyIGc9e2JvZHk6bix0eXBlOmQsdXJsOmY/KDAscy5VdCkodC5kc24sdC50dW5uZWwpOigwLHMucWkpKHQuZHNuKX07aWYoZil7dmFyIHk9KDAsci5waSkoKDAsci5waSkoe2V2ZW50X2lkOmUuZXZlbnRfaWQsc2VudF9hdDoobmV3IERhdGUpLnRvSVNPU3RyaW5nKCl9LHUmJntzZGs6dX0pLCEhdC50dW5uZWwmJntkc246KDAsaS5SKSh0LmRzbil9KSxFPVt7dHlwZTpkLHNhbXBsZV9yYXRlczpbe2lkOm0scmF0ZTpofV19LGcuYm9keV0sXz0oMCxvLkpkKSh5LFtFXSk7Zy5ib2R5PSgwLG8uViQpKF8pfXJldHVybiBnfX0sNDAxMDU6KGUsdCxuKT0+e24uZCh0LHtKOigpPT5yfSk7dmFyIHI9XCI2LjE5LjdcIn0sNTE0MjE6KGUsdCxuKT0+e24uZCh0LHtDUjooKT0+byxYQTooKT0+aSxmbDooKT0+YSxwaTooKT0+cn0pO3ZhciByPWZ1bmN0aW9uKCl7cmV0dXJuIHI9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49MSxyPWFyZ3VtZW50cy5sZW5ndGg7bjxyO24rKylmb3IodmFyIGkgaW4gdD1hcmd1bWVudHNbbl0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsaSkmJihlW2ldPXRbaV0pO3JldHVybiBlfSxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07ZnVuY3Rpb24gaShlKXt2YXIgdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcixuPXQmJmVbdF0scj0wO2lmKG4pcmV0dXJuIG4uY2FsbChlKTtpZihlJiZcIm51bWJlclwiPT10eXBlb2YgZS5sZW5ndGgpcmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gZSYmcj49ZS5sZW5ndGgmJihlPXZvaWQgMCkse3ZhbHVlOmUmJmVbcisrXSxkb25lOiFlfX19O3Rocm93IG5ldyBUeXBlRXJyb3IodD9cIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCI6XCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpfWZ1bmN0aW9uIG8oZSx0KXt2YXIgbj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXTtpZighbilyZXR1cm4gZTt2YXIgcixpLG89bi5jYWxsKGUpLGE9W107dHJ5e2Zvcig7KHZvaWQgMD09PXR8fHQtLSA+MCkmJiEocj1vLm5leHQoKSkuZG9uZTspYS5wdXNoKHIudmFsdWUpfWNhdGNoKGUpe2k9e2Vycm9yOmV9fWZpbmFsbHl7dHJ5e3ImJiFyLmRvbmUmJihuPW8ucmV0dXJuKSYmbi5jYWxsKG8pfWZpbmFsbHl7aWYoaSl0aHJvdyBpLmVycm9yfX1yZXR1cm4gYX1mdW5jdGlvbiBhKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWU9ZS5jb25jYXQobyhhcmd1bWVudHNbdF0pKTtyZXR1cm4gZX19LDM2ODc5OihlLHQsbik9PntuLmQodCx7WGI6KCk9Pm0sR2Q6KCk9PmcsY3U6KCk9Pmh9KTt2YXIgcj1uKDY4OTA3KSxpPW4oNjI4NDQpLG89bigyMTE3MCksYT1uKDEyMzQzKSxzPW4oODI5OTEpLGM9big3MjE3NiksbD1cInVuZGVmaW5lZFwiPT10eXBlb2YgX19TRU5UUllfREVCVUdfX3x8X19TRU5UUllfREVCVUdfXyx1PW4oNDY3NjkpLGQ9bigyMDUzNSksZj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5lcnJvcnM9MCx0aGlzLnNpZD0oMCxpLkRNKSgpLHRoaXMuZHVyYXRpb249MCx0aGlzLnN0YXR1cz1cIm9rXCIsdGhpcy5pbml0PSEwLHRoaXMuaWdub3JlRHVyYXRpb249ITE7dmFyIHQ9KDAsby5waCkoKTt0aGlzLnRpbWVzdGFtcD10LHRoaXMuc3RhcnRlZD10LGUmJnRoaXMudXBkYXRlKGUpfXJldHVybiBlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSYmKGU9e30pLGUudXNlciYmKCF0aGlzLmlwQWRkcmVzcyYmZS51c2VyLmlwX2FkZHJlc3MmJih0aGlzLmlwQWRkcmVzcz1lLnVzZXIuaXBfYWRkcmVzcyksdGhpcy5kaWR8fGUuZGlkfHwodGhpcy5kaWQ9ZS51c2VyLmlkfHxlLnVzZXIuZW1haWx8fGUudXNlci51c2VybmFtZSkpLHRoaXMudGltZXN0YW1wPWUudGltZXN0YW1wfHwoMCxvLnBoKSgpLGUuaWdub3JlRHVyYXRpb24mJih0aGlzLmlnbm9yZUR1cmF0aW9uPWUuaWdub3JlRHVyYXRpb24pLGUuc2lkJiYodGhpcy5zaWQ9MzI9PT1lLnNpZC5sZW5ndGg/ZS5zaWQ6KDAsaS5ETSkoKSksdm9pZCAwIT09ZS5pbml0JiYodGhpcy5pbml0PWUuaW5pdCksIXRoaXMuZGlkJiZlLmRpZCYmKHRoaXMuZGlkPVwiXCIrZS5kaWQpLFwibnVtYmVyXCI9PXR5cGVvZiBlLnN0YXJ0ZWQmJih0aGlzLnN0YXJ0ZWQ9ZS5zdGFydGVkKSx0aGlzLmlnbm9yZUR1cmF0aW9uKXRoaXMuZHVyYXRpb249dm9pZCAwO2Vsc2UgaWYoXCJudW1iZXJcIj09dHlwZW9mIGUuZHVyYXRpb24pdGhpcy5kdXJhdGlvbj1lLmR1cmF0aW9uO2Vsc2V7dmFyIHQ9dGhpcy50aW1lc3RhbXAtdGhpcy5zdGFydGVkO3RoaXMuZHVyYXRpb249dD49MD90OjB9ZS5yZWxlYXNlJiYodGhpcy5yZWxlYXNlPWUucmVsZWFzZSksZS5lbnZpcm9ubWVudCYmKHRoaXMuZW52aXJvbm1lbnQ9ZS5lbnZpcm9ubWVudCksIXRoaXMuaXBBZGRyZXNzJiZlLmlwQWRkcmVzcyYmKHRoaXMuaXBBZGRyZXNzPWUuaXBBZGRyZXNzKSwhdGhpcy51c2VyQWdlbnQmJmUudXNlckFnZW50JiYodGhpcy51c2VyQWdlbnQ9ZS51c2VyQWdlbnQpLFwibnVtYmVyXCI9PXR5cGVvZiBlLmVycm9ycyYmKHRoaXMuZXJyb3JzPWUuZXJyb3JzKSxlLnN0YXR1cyYmKHRoaXMuc3RhdHVzPWUuc3RhdHVzKX0sZS5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oZSl7ZT90aGlzLnVwZGF0ZSh7c3RhdHVzOmV9KTpcIm9rXCI9PT10aGlzLnN0YXR1cz90aGlzLnVwZGF0ZSh7c3RhdHVzOlwiZXhpdGVkXCJ9KTp0aGlzLnVwZGF0ZSgpfSxlLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4oMCxkLkpyKSh7c2lkOlwiXCIrdGhpcy5zaWQsaW5pdDp0aGlzLmluaXQsc3RhcnRlZDpuZXcgRGF0ZSgxZTMqdGhpcy5zdGFydGVkKS50b0lTT1N0cmluZygpLHRpbWVzdGFtcDpuZXcgRGF0ZSgxZTMqdGhpcy50aW1lc3RhbXApLnRvSVNPU3RyaW5nKCksc3RhdHVzOnRoaXMuc3RhdHVzLGVycm9yczp0aGlzLmVycm9ycyxkaWQ6XCJudW1iZXJcIj09dHlwZW9mIHRoaXMuZGlkfHxcInN0cmluZ1wiPT10eXBlb2YgdGhpcy5kaWQ/XCJcIit0aGlzLmRpZDp2b2lkIDAsZHVyYXRpb246dGhpcy5kdXJhdGlvbixhdHRyczp7cmVsZWFzZTp0aGlzLnJlbGVhc2UsZW52aXJvbm1lbnQ6dGhpcy5lbnZpcm9ubWVudCxpcF9hZGRyZXNzOnRoaXMuaXBBZGRyZXNzLHVzZXJfYWdlbnQ6dGhpcy51c2VyQWdlbnR9fSl9LGV9KCkscD00LG09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt2b2lkIDA9PT10JiYodD1uZXcgdS5zKSx2b2lkIDA9PT1uJiYobj1wKSx0aGlzLl92ZXJzaW9uPW4sdGhpcy5fc3RhY2s9W3t9XSx0aGlzLmdldFN0YWNrVG9wKCkuc2NvcGU9dCxlJiZ0aGlzLmJpbmRDbGllbnQoZSl9cmV0dXJuIGUucHJvdG90eXBlLmlzT2xkZXJUaGFuPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl92ZXJzaW9uPGV9LGUucHJvdG90eXBlLmJpbmRDbGllbnQ9ZnVuY3Rpb24oZSl7dGhpcy5nZXRTdGFja1RvcCgpLmNsaWVudD1lLGUmJmUuc2V0dXBJbnRlZ3JhdGlvbnMmJmUuc2V0dXBJbnRlZ3JhdGlvbnMoKX0sZS5wcm90b3R5cGUucHVzaFNjb3BlPWZ1bmN0aW9uKCl7dmFyIGU9dS5zLmNsb25lKHRoaXMuZ2V0U2NvcGUoKSk7cmV0dXJuIHRoaXMuZ2V0U3RhY2soKS5wdXNoKHtjbGllbnQ6dGhpcy5nZXRDbGllbnQoKSxzY29wZTplfSksZX0sZS5wcm90b3R5cGUucG9wU2NvcGU9ZnVuY3Rpb24oKXtyZXR1cm4hKHRoaXMuZ2V0U3RhY2soKS5sZW5ndGg8PTF8fCF0aGlzLmdldFN0YWNrKCkucG9wKCkpfSxlLnByb3RvdHlwZS53aXRoU2NvcGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wdXNoU2NvcGUoKTt0cnl7ZSh0KX1maW5hbGx5e3RoaXMucG9wU2NvcGUoKX19LGUucHJvdG90eXBlLmdldENsaWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFN0YWNrVG9wKCkuY2xpZW50fSxlLnByb3RvdHlwZS5nZXRTY29wZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFN0YWNrVG9wKCkuc2NvcGV9LGUucHJvdG90eXBlLmdldFN0YWNrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YWNrfSxlLnByb3RvdHlwZS5nZXRTdGFja1RvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGFja1t0aGlzLl9zdGFjay5sZW5ndGgtMV19LGUucHJvdG90eXBlLmNhcHR1cmVFeGNlcHRpb249ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9sYXN0RXZlbnRJZD10JiZ0LmV2ZW50X2lkP3QuZXZlbnRfaWQ6KDAsaS5ETSkoKSxvPXQ7aWYoIXQpe3ZhciBhPXZvaWQgMDt0cnl7dGhyb3cgbmV3IEVycm9yKFwiU2VudHJ5IHN5bnRoZXRpY0V4Y2VwdGlvblwiKX1jYXRjaChlKXthPWV9bz17b3JpZ2luYWxFeGNlcHRpb246ZSxzeW50aGV0aWNFeGNlcHRpb246YX19cmV0dXJuIHRoaXMuX2ludm9rZUNsaWVudChcImNhcHR1cmVFeGNlcHRpb25cIixlLCgwLHIucGkpKCgwLHIucGkpKHt9LG8pLHtldmVudF9pZDpufSkpLG59LGUucHJvdG90eXBlLmNhcHR1cmVNZXNzYWdlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgbz10aGlzLl9sYXN0RXZlbnRJZD1uJiZuLmV2ZW50X2lkP24uZXZlbnRfaWQ6KDAsaS5ETSkoKSxhPW47aWYoIW4pe3ZhciBzPXZvaWQgMDt0cnl7dGhyb3cgbmV3IEVycm9yKGUpfWNhdGNoKGUpe3M9ZX1hPXtvcmlnaW5hbEV4Y2VwdGlvbjplLHN5bnRoZXRpY0V4Y2VwdGlvbjpzfX1yZXR1cm4gdGhpcy5faW52b2tlQ2xpZW50KFwiY2FwdHVyZU1lc3NhZ2VcIixlLHQsKDAsci5waSkoKDAsci5waSkoe30sYSkse2V2ZW50X2lkOm99KSksb30sZS5wcm90b3R5cGUuY2FwdHVyZUV2ZW50PWZ1bmN0aW9uKGUsdCl7dmFyIG49dCYmdC5ldmVudF9pZD90LmV2ZW50X2lkOigwLGkuRE0pKCk7cmV0dXJuXCJ0cmFuc2FjdGlvblwiIT09ZS50eXBlJiYodGhpcy5fbGFzdEV2ZW50SWQ9biksdGhpcy5faW52b2tlQ2xpZW50KFwiY2FwdHVyZUV2ZW50XCIsZSwoMCxyLnBpKSgoMCxyLnBpKSh7fSx0KSx7ZXZlbnRfaWQ6bn0pKSxufSxlLnByb3RvdHlwZS5sYXN0RXZlbnRJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXN0RXZlbnRJZH0sZS5wcm90b3R5cGUuYWRkQnJlYWRjcnVtYj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0U3RhY2tUb3AoKSxpPW4uc2NvcGUscz1uLmNsaWVudDtpZihpJiZzKXt2YXIgYz1zLmdldE9wdGlvbnMmJnMuZ2V0T3B0aW9ucygpfHx7fSxsPWMuYmVmb3JlQnJlYWRjcnVtYix1PXZvaWQgMD09PWw/bnVsbDpsLGQ9Yy5tYXhCcmVhZGNydW1icyxmPXZvaWQgMD09PWQ/MTAwOmQ7aWYoIShmPD0wKSl7dmFyIHA9KDAsby55VykoKSxtPSgwLHIucGkpKHt0aW1lc3RhbXA6cH0sZSksaD11PygwLGEuQ2YpKChmdW5jdGlvbigpe3JldHVybiB1KG0sdCl9KSk6bTtudWxsIT09aCYmaS5hZGRCcmVhZGNydW1iKGgsZil9fX0sZS5wcm90b3R5cGUuc2V0VXNlcj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldFNjb3BlKCk7dCYmdC5zZXRVc2VyKGUpfSxlLnByb3RvdHlwZS5zZXRUYWdzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0U2NvcGUoKTt0JiZ0LnNldFRhZ3MoZSl9LGUucHJvdG90eXBlLnNldEV4dHJhcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldFNjb3BlKCk7dCYmdC5zZXRFeHRyYXMoZSl9LGUucHJvdG90eXBlLnNldFRhZz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0U2NvcGUoKTtuJiZuLnNldFRhZyhlLHQpfSxlLnByb3RvdHlwZS5zZXRFeHRyYT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0U2NvcGUoKTtuJiZuLnNldEV4dHJhKGUsdCl9LGUucHJvdG90eXBlLnNldENvbnRleHQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmdldFNjb3BlKCk7biYmbi5zZXRDb250ZXh0KGUsdCl9LGUucHJvdG90eXBlLmNvbmZpZ3VyZVNjb3BlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0U3RhY2tUb3AoKSxuPXQuc2NvcGUscj10LmNsaWVudDtuJiZyJiZlKG4pfSxlLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oZSl7dmFyIHQ9dih0aGlzKTt0cnl7ZSh0aGlzKX1maW5hbGx5e3YodCl9fSxlLnByb3RvdHlwZS5nZXRJbnRlZ3JhdGlvbj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldENsaWVudCgpO2lmKCF0KXJldHVybiBudWxsO3RyeXtyZXR1cm4gdC5nZXRJbnRlZ3JhdGlvbihlKX1jYXRjaCh0KXtyZXR1cm4gbCYmYS5rZy53YXJuKFwiQ2Fubm90IHJldHJpZXZlIGludGVncmF0aW9uIFwiK2UuaWQrXCIgZnJvbSB0aGUgY3VycmVudCBIdWJcIiksbnVsbH19LGUucHJvdG90eXBlLnN0YXJ0U3Bhbj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fY2FsbEV4dGVuc2lvbk1ldGhvZChcInN0YXJ0U3BhblwiLGUpfSxlLnByb3RvdHlwZS5zdGFydFRyYW5zYWN0aW9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2NhbGxFeHRlbnNpb25NZXRob2QoXCJzdGFydFRyYW5zYWN0aW9uXCIsZSx0KX0sZS5wcm90b3R5cGUudHJhY2VIZWFkZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGxFeHRlbnNpb25NZXRob2QoXCJ0cmFjZUhlYWRlcnNcIil9LGUucHJvdG90eXBlLmNhcHR1cmVTZXNzaW9uPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUmJihlPSExKSxlKXJldHVybiB0aGlzLmVuZFNlc3Npb24oKTt0aGlzLl9zZW5kU2Vzc2lvblVwZGF0ZSgpfSxlLnByb3RvdHlwZS5lbmRTZXNzaW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRTdGFja1RvcCgpLHQ9ZSYmZS5zY29wZSxuPXQmJnQuZ2V0U2Vzc2lvbigpO24mJm4uY2xvc2UoKSx0aGlzLl9zZW5kU2Vzc2lvblVwZGF0ZSgpLHQmJnQuc2V0U2Vzc2lvbigpfSxlLnByb3RvdHlwZS5zdGFydFNlc3Npb249ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRTdGFja1RvcCgpLG49dC5zY29wZSxpPXQuY2xpZW50LG89aSYmaS5nZXRPcHRpb25zKCl8fHt9LGE9by5yZWxlYXNlLGM9by5lbnZpcm9ubWVudCxsPSgoMCxzLlIpKCkubmF2aWdhdG9yfHx7fSkudXNlckFnZW50LHU9bmV3IGYoKDAsci5waSkoKDAsci5waSkoKDAsci5waSkoe3JlbGVhc2U6YSxlbnZpcm9ubWVudDpjfSxuJiZ7dXNlcjpuLmdldFVzZXIoKX0pLGwmJnt1c2VyQWdlbnQ6bH0pLGUpKTtpZihuKXt2YXIgZD1uLmdldFNlc3Npb24mJm4uZ2V0U2Vzc2lvbigpO2QmJlwib2tcIj09PWQuc3RhdHVzJiZkLnVwZGF0ZSh7c3RhdHVzOlwiZXhpdGVkXCJ9KSx0aGlzLmVuZFNlc3Npb24oKSxuLnNldFNlc3Npb24odSl9cmV0dXJuIHV9LGUucHJvdG90eXBlLl9zZW5kU2Vzc2lvblVwZGF0ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0U3RhY2tUb3AoKSx0PWUuc2NvcGUsbj1lLmNsaWVudDtpZih0KXt2YXIgcj10LmdldFNlc3Npb24mJnQuZ2V0U2Vzc2lvbigpO3ImJm4mJm4uY2FwdHVyZVNlc3Npb24mJm4uY2FwdHVyZVNlc3Npb24ocil9fSxlLnByb3RvdHlwZS5faW52b2tlQ2xpZW50PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPVtdLGk9MTtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKW5baS0xXT1hcmd1bWVudHNbaV07dmFyIG89dGhpcy5nZXRTdGFja1RvcCgpLGE9by5zY29wZSxzPW8uY2xpZW50O3MmJnNbZV0mJih0PXMpW2VdLmFwcGx5KHQsKDAsci5mbCkobixbYV0pKX0sZS5wcm90b3R5cGUuX2NhbGxFeHRlbnNpb25NZXRob2Q9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXRbbi0xXT1hcmd1bWVudHNbbl07dmFyIHI9aCgpLl9fU0VOVFJZX187aWYociYmci5leHRlbnNpb25zJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiByLmV4dGVuc2lvbnNbZV0pcmV0dXJuIHIuZXh0ZW5zaW9uc1tlXS5hcHBseSh0aGlzLHQpO2wmJmEua2cud2FybihcIkV4dGVuc2lvbiBtZXRob2QgXCIrZStcIiBjb3VsZG4ndCBiZSBmb3VuZCwgZG9pbmcgbm90aGluZy5cIil9LGV9KCk7ZnVuY3Rpb24gaCgpe3ZhciBlPSgwLHMuUikoKTtyZXR1cm4gZS5fX1NFTlRSWV9fPWUuX19TRU5UUllfX3x8e2V4dGVuc2lvbnM6e30saHViOnZvaWQgMH0sZX1mdW5jdGlvbiB2KGUpe3ZhciB0PWgoKSxuPUUodCk7cmV0dXJuIF8odCxlKSxufWZ1bmN0aW9uIGcoKXt2YXIgZT1oKCk7cmV0dXJuIHkoZSkmJiFFKGUpLmlzT2xkZXJUaGFuKHApfHxfKGUsbmV3IG0pLCgwLGMuS1YpKCk/ZnVuY3Rpb24oZSl7dHJ5e3ZhciB0PWgoKS5fX1NFTlRSWV9fLG49dCYmdC5leHRlbnNpb25zJiZ0LmV4dGVuc2lvbnMuZG9tYWluJiZ0LmV4dGVuc2lvbnMuZG9tYWluLmFjdGl2ZTtpZighbilyZXR1cm4gRShlKTtpZigheShuKXx8RShuKS5pc09sZGVyVGhhbihwKSl7dmFyIHI9RShlKS5nZXRTdGFja1RvcCgpO18obixuZXcgbShyLmNsaWVudCx1LnMuY2xvbmUoci5zY29wZSkpKX1yZXR1cm4gRShuKX1jYXRjaCh0KXtyZXR1cm4gRShlKX19KGUpOkUoZSl9ZnVuY3Rpb24geShlKXtyZXR1cm4hIShlJiZlLl9fU0VOVFJZX18mJmUuX19TRU5UUllfXy5odWIpfWZ1bmN0aW9uIEUoZSl7cmV0dXJuKDAscy5ZKShcImh1YlwiLChmdW5jdGlvbigpe3JldHVybiBuZXcgbX0pLGUpfWZ1bmN0aW9uIF8oZSx0KXtyZXR1cm4hIWUmJigoZS5fX1NFTlRSWV9fPWUuX19TRU5UUllfX3x8e30pLmh1Yj10LCEwKX19LDQ2NzY5OihlLHQsbik9PntuLmQodCx7YzooKT0+dSxzOigpPT5jfSk7dmFyIHI9big2ODkwNyksaT1uKDY3NTk3KSxvPW4oMjExNzApLGE9big5Njg5Mykscz1uKDgyOTkxKSxjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuX25vdGlmeWluZ0xpc3RlbmVycz0hMSx0aGlzLl9zY29wZUxpc3RlbmVycz1bXSx0aGlzLl9ldmVudFByb2Nlc3NvcnM9W10sdGhpcy5fYnJlYWRjcnVtYnM9W10sdGhpcy5fdXNlcj17fSx0aGlzLl90YWdzPXt9LHRoaXMuX2V4dHJhPXt9LHRoaXMuX2NvbnRleHRzPXt9LHRoaXMuX3Nka1Byb2Nlc3NpbmdNZXRhZGF0YT17fX1yZXR1cm4gZS5jbG9uZT1mdW5jdGlvbih0KXt2YXIgbj1uZXcgZTtyZXR1cm4gdCYmKG4uX2JyZWFkY3J1bWJzPSgwLHIuZmwpKHQuX2JyZWFkY3J1bWJzKSxuLl90YWdzPSgwLHIucGkpKHt9LHQuX3RhZ3MpLG4uX2V4dHJhPSgwLHIucGkpKHt9LHQuX2V4dHJhKSxuLl9jb250ZXh0cz0oMCxyLnBpKSh7fSx0Ll9jb250ZXh0cyksbi5fdXNlcj10Ll91c2VyLG4uX2xldmVsPXQuX2xldmVsLG4uX3NwYW49dC5fc3BhbixuLl9zZXNzaW9uPXQuX3Nlc3Npb24sbi5fdHJhbnNhY3Rpb25OYW1lPXQuX3RyYW5zYWN0aW9uTmFtZSxuLl9maW5nZXJwcmludD10Ll9maW5nZXJwcmludCxuLl9ldmVudFByb2Nlc3NvcnM9KDAsci5mbCkodC5fZXZlbnRQcm9jZXNzb3JzKSxuLl9yZXF1ZXN0U2Vzc2lvbj10Ll9yZXF1ZXN0U2Vzc2lvbiksbn0sZS5wcm90b3R5cGUuYWRkU2NvcGVMaXN0ZW5lcj1mdW5jdGlvbihlKXt0aGlzLl9zY29wZUxpc3RlbmVycy5wdXNoKGUpfSxlLnByb3RvdHlwZS5hZGRFdmVudFByb2Nlc3Nvcj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fZXZlbnRQcm9jZXNzb3JzLnB1c2goZSksdGhpc30sZS5wcm90b3R5cGUuc2V0VXNlcj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fdXNlcj1lfHx7fSx0aGlzLl9zZXNzaW9uJiZ0aGlzLl9zZXNzaW9uLnVwZGF0ZSh7dXNlcjplfSksdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKSx0aGlzfSxlLnByb3RvdHlwZS5nZXRVc2VyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VzZXJ9LGUucHJvdG90eXBlLmdldFJlcXVlc3RTZXNzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlcXVlc3RTZXNzaW9ufSxlLnByb3RvdHlwZS5zZXRSZXF1ZXN0U2Vzc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcmVxdWVzdFNlc3Npb249ZSx0aGlzfSxlLnByb3RvdHlwZS5zZXRUYWdzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl90YWdzPSgwLHIucGkpKCgwLHIucGkpKHt9LHRoaXMuX3RhZ3MpLGUpLHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCksdGhpc30sZS5wcm90b3R5cGUuc2V0VGFnPWZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIHRoaXMuX3RhZ3M9KDAsci5waSkoKDAsci5waSkoe30sdGhpcy5fdGFncyksKChuPXt9KVtlXT10LG4pKSx0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpLHRoaXN9LGUucHJvdG90eXBlLnNldEV4dHJhcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fZXh0cmE9KDAsci5waSkoKDAsci5waSkoe30sdGhpcy5fZXh0cmEpLGUpLHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCksdGhpc30sZS5wcm90b3R5cGUuc2V0RXh0cmE9ZnVuY3Rpb24oZSx0KXt2YXIgbjtyZXR1cm4gdGhpcy5fZXh0cmE9KDAsci5waSkoKDAsci5waSkoe30sdGhpcy5fZXh0cmEpLCgobj17fSlbZV09dCxuKSksdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKSx0aGlzfSxlLnByb3RvdHlwZS5zZXRGaW5nZXJwcmludD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fZmluZ2VycHJpbnQ9ZSx0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpLHRoaXN9LGUucHJvdG90eXBlLnNldExldmVsPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9sZXZlbD1lLHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCksdGhpc30sZS5wcm90b3R5cGUuc2V0VHJhbnNhY3Rpb25OYW1lPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl90cmFuc2FjdGlvbk5hbWU9ZSx0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpLHRoaXN9LGUucHJvdG90eXBlLnNldFRyYW5zYWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnNldFRyYW5zYWN0aW9uTmFtZShlKX0sZS5wcm90b3R5cGUuc2V0Q29udGV4dD1mdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBudWxsPT09dD9kZWxldGUgdGhpcy5fY29udGV4dHNbZV06dGhpcy5fY29udGV4dHM9KDAsci5waSkoKDAsci5waSkoe30sdGhpcy5fY29udGV4dHMpLCgobj17fSlbZV09dCxuKSksdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKSx0aGlzfSxlLnByb3RvdHlwZS5zZXRTcGFuPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9zcGFuPWUsdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKSx0aGlzfSxlLnByb3RvdHlwZS5nZXRTcGFuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NwYW59LGUucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRTcGFuKCk7cmV0dXJuIGUmJmUudHJhbnNhY3Rpb259LGUucHJvdG90eXBlLnNldFNlc3Npb249ZnVuY3Rpb24oZSl7cmV0dXJuIGU/dGhpcy5fc2Vzc2lvbj1lOmRlbGV0ZSB0aGlzLl9zZXNzaW9uLHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCksdGhpc30sZS5wcm90b3R5cGUuZ2V0U2Vzc2lvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZXNzaW9ufSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIHRoaXM7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdCl7dmFyIG49dCh0aGlzKTtyZXR1cm4gbiBpbnN0YW5jZW9mIGU/bjp0aGlzfXJldHVybiB0IGluc3RhbmNlb2YgZT8odGhpcy5fdGFncz0oMCxyLnBpKSgoMCxyLnBpKSh7fSx0aGlzLl90YWdzKSx0Ll90YWdzKSx0aGlzLl9leHRyYT0oMCxyLnBpKSgoMCxyLnBpKSh7fSx0aGlzLl9leHRyYSksdC5fZXh0cmEpLHRoaXMuX2NvbnRleHRzPSgwLHIucGkpKCgwLHIucGkpKHt9LHRoaXMuX2NvbnRleHRzKSx0Ll9jb250ZXh0cyksdC5fdXNlciYmT2JqZWN0LmtleXModC5fdXNlcikubGVuZ3RoJiYodGhpcy5fdXNlcj10Ll91c2VyKSx0Ll9sZXZlbCYmKHRoaXMuX2xldmVsPXQuX2xldmVsKSx0Ll9maW5nZXJwcmludCYmKHRoaXMuX2ZpbmdlcnByaW50PXQuX2ZpbmdlcnByaW50KSx0Ll9yZXF1ZXN0U2Vzc2lvbiYmKHRoaXMuX3JlcXVlc3RTZXNzaW9uPXQuX3JlcXVlc3RTZXNzaW9uKSk6KDAsaS5QTykodCkmJih0aGlzLl90YWdzPSgwLHIucGkpKCgwLHIucGkpKHt9LHRoaXMuX3RhZ3MpLHQudGFncyksdGhpcy5fZXh0cmE9KDAsci5waSkoKDAsci5waSkoe30sdGhpcy5fZXh0cmEpLHQuZXh0cmEpLHRoaXMuX2NvbnRleHRzPSgwLHIucGkpKCgwLHIucGkpKHt9LHRoaXMuX2NvbnRleHRzKSx0LmNvbnRleHRzKSx0LnVzZXImJih0aGlzLl91c2VyPXQudXNlciksdC5sZXZlbCYmKHRoaXMuX2xldmVsPXQubGV2ZWwpLHQuZmluZ2VycHJpbnQmJih0aGlzLl9maW5nZXJwcmludD10LmZpbmdlcnByaW50KSx0LnJlcXVlc3RTZXNzaW9uJiYodGhpcy5fcmVxdWVzdFNlc3Npb249dC5yZXF1ZXN0U2Vzc2lvbikpLHRoaXN9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JyZWFkY3J1bWJzPVtdLHRoaXMuX3RhZ3M9e30sdGhpcy5fZXh0cmE9e30sdGhpcy5fdXNlcj17fSx0aGlzLl9jb250ZXh0cz17fSx0aGlzLl9sZXZlbD12b2lkIDAsdGhpcy5fdHJhbnNhY3Rpb25OYW1lPXZvaWQgMCx0aGlzLl9maW5nZXJwcmludD12b2lkIDAsdGhpcy5fcmVxdWVzdFNlc3Npb249dm9pZCAwLHRoaXMuX3NwYW49dm9pZCAwLHRoaXMuX3Nlc3Npb249dm9pZCAwLHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCksdGhpc30sZS5wcm90b3R5cGUuYWRkQnJlYWRjcnVtYj1mdW5jdGlvbihlLHQpe3ZhciBuPVwibnVtYmVyXCI9PXR5cGVvZiB0P01hdGgubWluKHQsMTAwKToxMDA7aWYobjw9MClyZXR1cm4gdGhpczt2YXIgaT0oMCxyLnBpKSh7dGltZXN0YW1wOigwLG8ueVcpKCl9LGUpO3JldHVybiB0aGlzLl9icmVhZGNydW1icz0oMCxyLmZsKSh0aGlzLl9icmVhZGNydW1icyxbaV0pLnNsaWNlKC1uKSx0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpLHRoaXN9LGUucHJvdG90eXBlLmNsZWFyQnJlYWRjcnVtYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYnJlYWRjcnVtYnM9W10sdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKSx0aGlzfSxlLnByb3RvdHlwZS5hcHBseVRvRXZlbnQ9ZnVuY3Rpb24oZSx0KXtpZih0aGlzLl9leHRyYSYmT2JqZWN0LmtleXModGhpcy5fZXh0cmEpLmxlbmd0aCYmKGUuZXh0cmE9KDAsci5waSkoKDAsci5waSkoe30sdGhpcy5fZXh0cmEpLGUuZXh0cmEpKSx0aGlzLl90YWdzJiZPYmplY3Qua2V5cyh0aGlzLl90YWdzKS5sZW5ndGgmJihlLnRhZ3M9KDAsci5waSkoKDAsci5waSkoe30sdGhpcy5fdGFncyksZS50YWdzKSksdGhpcy5fdXNlciYmT2JqZWN0LmtleXModGhpcy5fdXNlcikubGVuZ3RoJiYoZS51c2VyPSgwLHIucGkpKCgwLHIucGkpKHt9LHRoaXMuX3VzZXIpLGUudXNlcikpLHRoaXMuX2NvbnRleHRzJiZPYmplY3Qua2V5cyh0aGlzLl9jb250ZXh0cykubGVuZ3RoJiYoZS5jb250ZXh0cz0oMCxyLnBpKSgoMCxyLnBpKSh7fSx0aGlzLl9jb250ZXh0cyksZS5jb250ZXh0cykpLHRoaXMuX2xldmVsJiYoZS5sZXZlbD10aGlzLl9sZXZlbCksdGhpcy5fdHJhbnNhY3Rpb25OYW1lJiYoZS50cmFuc2FjdGlvbj10aGlzLl90cmFuc2FjdGlvbk5hbWUpLHRoaXMuX3NwYW4pe2UuY29udGV4dHM9KDAsci5waSkoe3RyYWNlOnRoaXMuX3NwYW4uZ2V0VHJhY2VDb250ZXh0KCl9LGUuY29udGV4dHMpO3ZhciBuPXRoaXMuX3NwYW4udHJhbnNhY3Rpb24mJnRoaXMuX3NwYW4udHJhbnNhY3Rpb24ubmFtZTtuJiYoZS50YWdzPSgwLHIucGkpKHt0cmFuc2FjdGlvbjpufSxlLnRhZ3MpKX1yZXR1cm4gdGhpcy5fYXBwbHlGaW5nZXJwcmludChlKSxlLmJyZWFkY3J1bWJzPSgwLHIuZmwpKGUuYnJlYWRjcnVtYnN8fFtdLHRoaXMuX2JyZWFkY3J1bWJzKSxlLmJyZWFkY3J1bWJzPWUuYnJlYWRjcnVtYnMubGVuZ3RoPjA/ZS5icmVhZGNydW1iczp2b2lkIDAsZS5zZGtQcm9jZXNzaW5nTWV0YWRhdGE9dGhpcy5fc2RrUHJvY2Vzc2luZ01ldGFkYXRhLHRoaXMuX25vdGlmeUV2ZW50UHJvY2Vzc29ycygoMCxyLmZsKShsKCksdGhpcy5fZXZlbnRQcm9jZXNzb3JzKSxlLHQpfSxlLnByb3RvdHlwZS5zZXRTREtQcm9jZXNzaW5nTWV0YWRhdGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3Nka1Byb2Nlc3NpbmdNZXRhZGF0YT0oMCxyLnBpKSgoMCxyLnBpKSh7fSx0aGlzLl9zZGtQcm9jZXNzaW5nTWV0YWRhdGEpLGUpLHRoaXN9LGUucHJvdG90eXBlLl9ub3RpZnlFdmVudFByb2Nlc3NvcnM9ZnVuY3Rpb24oZSx0LG4sbyl7dmFyIHM9dGhpcztyZXR1cm4gdm9pZCAwPT09byYmKG89MCksbmV3IGEuY1coKGZ1bmN0aW9uKGEsYyl7dmFyIGw9ZVtvXTtpZihudWxsPT09dHx8XCJmdW5jdGlvblwiIT10eXBlb2YgbClhKHQpO2Vsc2V7dmFyIHU9bCgoMCxyLnBpKSh7fSx0KSxuKTsoMCxpLko4KSh1KT91LnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBzLl9ub3RpZnlFdmVudFByb2Nlc3NvcnMoZSx0LG4sbysxKS50aGVuKGEpfSkpLnRoZW4obnVsbCxjKTpzLl9ub3RpZnlFdmVudFByb2Nlc3NvcnMoZSx1LG4sbysxKS50aGVuKGEpLnRoZW4obnVsbCxjKX19KSl9LGUucHJvdG90eXBlLl9ub3RpZnlTY29wZUxpc3RlbmVycz1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5fbm90aWZ5aW5nTGlzdGVuZXJzfHwodGhpcy5fbm90aWZ5aW5nTGlzdGVuZXJzPSEwLHRoaXMuX3Njb3BlTGlzdGVuZXJzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QoZSl9KSksdGhpcy5fbm90aWZ5aW5nTGlzdGVuZXJzPSExKX0sZS5wcm90b3R5cGUuX2FwcGx5RmluZ2VycHJpbnQ9ZnVuY3Rpb24oZSl7ZS5maW5nZXJwcmludD1lLmZpbmdlcnByaW50P0FycmF5LmlzQXJyYXkoZS5maW5nZXJwcmludCk/ZS5maW5nZXJwcmludDpbZS5maW5nZXJwcmludF06W10sdGhpcy5fZmluZ2VycHJpbnQmJihlLmZpbmdlcnByaW50PWUuZmluZ2VycHJpbnQuY29uY2F0KHRoaXMuX2ZpbmdlcnByaW50KSksZS5maW5nZXJwcmludCYmIWUuZmluZ2VycHJpbnQubGVuZ3RoJiZkZWxldGUgZS5maW5nZXJwcmludH0sZX0oKTtmdW5jdGlvbiBsKCl7cmV0dXJuKDAscy5ZKShcImdsb2JhbEV2ZW50UHJvY2Vzc29yc1wiLChmdW5jdGlvbigpe3JldHVybltdfSkpfWZ1bmN0aW9uIHUoZSl7bCgpLnB1c2goZSl9fSw2ODkwNzooZSx0LG4pPT57bi5kKHQse2ZsOigpPT5vLHBpOigpPT5yfSk7dmFyIHI9ZnVuY3Rpb24oKXtyZXR1cm4gcj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQsbj0xLHI9YXJndW1lbnRzLmxlbmd0aDtuPHI7bisrKWZvcih2YXIgaSBpbiB0PWFyZ3VtZW50c1tuXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxpKSYmKGVbaV09dFtpXSk7cmV0dXJuIGV9LHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtmdW5jdGlvbiBpKGUsdCl7dmFyIG49XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl07aWYoIW4pcmV0dXJuIGU7dmFyIHIsaSxvPW4uY2FsbChlKSxhPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT10fHx0LS0gPjApJiYhKHI9by5uZXh0KCkpLmRvbmU7KWEucHVzaChyLnZhbHVlKX1jYXRjaChlKXtpPXtlcnJvcjplfX1maW5hbGx5e3RyeXtyJiYhci5kb25lJiYobj1vLnJldHVybikmJm4uY2FsbChvKX1maW5hbGx5e2lmKGkpdGhyb3cgaS5lcnJvcn19cmV0dXJuIGF9ZnVuY3Rpb24gbygpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllPWUuY29uY2F0KGkoYXJndW1lbnRzW3RdKSk7cmV0dXJuIGV9fSw3MTM3MTooZSx0LG4pPT57bi5kKHQse25fOigpPT51LFRiOigpPT5zLHVUOigpPT5jLGU6KCk9PmwsdjooKT0+ZCxZQTooKT0+ZixhdjooKT0+cCwkZTooKT0+bX0pO3ZhciByPWZ1bmN0aW9uKCl7cmV0dXJuIHI9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49MSxyPWFyZ3VtZW50cy5sZW5ndGg7bjxyO24rKylmb3IodmFyIGkgaW4gdD1hcmd1bWVudHNbbl0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsaSkmJihlW2ldPXRbaV0pO3JldHVybiBlfSxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07ZnVuY3Rpb24gaShlLHQpe3ZhciBuPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdO2lmKCFuKXJldHVybiBlO3ZhciByLGksbz1uLmNhbGwoZSksYT1bXTt0cnl7Zm9yKDsodm9pZCAwPT09dHx8dC0tID4wKSYmIShyPW8ubmV4dCgpKS5kb25lOylhLnB1c2goci52YWx1ZSl9Y2F0Y2goZSl7aT17ZXJyb3I6ZX19ZmluYWxseXt0cnl7ciYmIXIuZG9uZSYmKG49by5yZXR1cm4pJiZuLmNhbGwobyl9ZmluYWxseXtpZihpKXRocm93IGkuZXJyb3J9fXJldHVybiBhfXZhciBvPW4oMzY4NzkpO2Z1bmN0aW9uIGEoZSl7Zm9yKHZhciB0PVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXRbbi0xXT1hcmd1bWVudHNbbl07dmFyIHI9KDAsby5HZCkoKTtpZihyJiZyW2VdKXJldHVybiByW2VdLmFwcGx5KHIsZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZT1lLmNvbmNhdChpKGFyZ3VtZW50c1t0XSkpO3JldHVybiBlfSh0KSk7dGhyb3cgbmV3IEVycm9yKFwiTm8gaHViIGRlZmluZWQgb3IgXCIrZStcIiB3YXMgbm90IGZvdW5kIG9uIHRoZSBodWIsIHBsZWFzZSBvcGVuIGEgYnVnIHJlcG9ydC5cIil9ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBhKFwiY2FwdHVyZUV4Y2VwdGlvblwiLGUse2NhcHR1cmVDb250ZXh0OnQsb3JpZ2luYWxFeGNlcHRpb246ZSxzeW50aGV0aWNFeGNlcHRpb246bmV3IEVycm9yKFwiU2VudHJ5IHN5bnRoZXRpY0V4Y2VwdGlvblwiKX0pfWZ1bmN0aW9uIGMoZSx0KXt2YXIgbj1uZXcgRXJyb3IoZSk7cmV0dXJuIGEoXCJjYXB0dXJlTWVzc2FnZVwiLGUsXCJzdHJpbmdcIj09dHlwZW9mIHQ/dDp2b2lkIDAscih7b3JpZ2luYWxFeGNlcHRpb246ZSxzeW50aGV0aWNFeGNlcHRpb246bn0sXCJzdHJpbmdcIiE9dHlwZW9mIHQ/e2NhcHR1cmVDb250ZXh0OnR9OnZvaWQgMCkpfWZ1bmN0aW9uIGwoZSl7YShcImNvbmZpZ3VyZVNjb3BlXCIsZSl9ZnVuY3Rpb24gdShlKXthKFwiYWRkQnJlYWRjcnVtYlwiLGUpfWZ1bmN0aW9uIGQoZSx0KXthKFwic2V0Q29udGV4dFwiLGUsdCl9ZnVuY3Rpb24gZihlLHQpe2EoXCJzZXRUYWdcIixlLHQpfWZ1bmN0aW9uIHAoZSl7YShcInNldFVzZXJcIixlKX1mdW5jdGlvbiBtKGUpe2EoXCJ3aXRoU2NvcGVcIixlKX19LDI3OTIzOihlLHQsbik9PntuLmQodCx7UzooKT0+b30pO3ZhciByPW4oNDAxMDUpLGk9big1ODgyNik7ZnVuY3Rpb24gbyhlKXtlLl9tZXRhZGF0YT1lLl9tZXRhZGF0YXx8e30sZS5fbWV0YWRhdGEuc2RrPWUuX21ldGFkYXRhLnNka3x8e25hbWU6XCJzZW50cnkuamF2YXNjcmlwdC5yZWFjdFwiLHBhY2thZ2VzOlt7bmFtZTpcIm5wbTpAc2VudHJ5L3JlYWN0XCIsdmVyc2lvbjpyLkp9XSx2ZXJzaW9uOnIuSn0sKDAsaS5TMSkoZSl9fSwyNjI1NzooZSx0LG4pPT57bi5kKHQse2Q6KCk9PnIseDooKT0+aX0pO3ZhciByPVwiZmluaXNoUmVhc29uXCIsaT1bXCJoZWFydGJlYXRGYWlsZWRcIixcImlkbGVUaW1lb3V0XCIsXCJkb2N1bWVudEhpZGRlblwiXX0sNzg5NTU6KGUsdCxuKT0+e24uZCh0LHtoOigpPT5yfSk7dmFyIHI9XCJ1bmRlZmluZWRcIj09dHlwZW9mIF9fU0VOVFJZX0RFQlVHX198fF9fU0VOVFJZX0RFQlVHX199LDUwNzkwOihlLHQsbik9PntuLmQodCx7cm86KCk9PnksbGI6KCk9Pmd9KTt2YXIgcj1uKDQxMTMyKSxpPW4oMzY4NzkpLG89bigxMjM0MyksYT1uKDY3NTk3KSxzPW4oNzIxNzYpLGM9big5NzMyKSxsPW4oNzg5NTUpLHU9big2MzIzMyk7ZnVuY3Rpb24gZCgpe3ZhciBlPSgwLHUueDEpKCk7aWYoZSl7dmFyIHQ9XCJpbnRlcm5hbF9lcnJvclwiO2wuaCYmby5rZy5sb2coXCJbVHJhY2luZ10gVHJhbnNhY3Rpb246IFwiK3QrXCIgLT4gR2xvYmFsIGVycm9yIG9jY3VyZWRcIiksZS5zZXRTdGF0dXModCl9fXZhciBmPW4oMTY0NTgpLHA9bigzMzM5MSk7ZnVuY3Rpb24gbSgpe3ZhciBlPXRoaXMuZ2V0U2NvcGUoKTtpZihlKXt2YXIgdD1lLmdldFNwYW4oKTtpZih0KXJldHVybntcInNlbnRyeS10cmFjZVwiOnQudG9UcmFjZXBhcmVudCgpfX1yZXR1cm57fX1mdW5jdGlvbiBoKGUsdCxuKXtyZXR1cm4oMCx1Lnp1KSh0KT92b2lkIDAhPT1lLnNhbXBsZWQ/KGUuc2V0TWV0YWRhdGEoe3RyYW5zYWN0aW9uU2FtcGxpbmc6e21ldGhvZDpcImV4cGxpY2l0bHlfc2V0XCJ9fSksZSk6KFwiZnVuY3Rpb25cIj09dHlwZW9mIHQudHJhY2VzU2FtcGxlcj8oaT10LnRyYWNlc1NhbXBsZXIobiksZS5zZXRNZXRhZGF0YSh7dHJhbnNhY3Rpb25TYW1wbGluZzp7bWV0aG9kOlwiY2xpZW50X3NhbXBsZXJcIixyYXRlOk51bWJlcihpKX19KSk6dm9pZCAwIT09bi5wYXJlbnRTYW1wbGVkPyhpPW4ucGFyZW50U2FtcGxlZCxlLnNldE1ldGFkYXRhKHt0cmFuc2FjdGlvblNhbXBsaW5nOnttZXRob2Q6XCJpbmhlcml0YW5jZVwifX0pKTooaT10LnRyYWNlc1NhbXBsZVJhdGUsZS5zZXRNZXRhZGF0YSh7dHJhbnNhY3Rpb25TYW1wbGluZzp7bWV0aG9kOlwiY2xpZW50X3JhdGVcIixyYXRlOk51bWJlcihpKX19KSkscj1pLCgoMCxhLmkyKShyKXx8XCJudW1iZXJcIiE9dHlwZW9mIHImJlwiYm9vbGVhblwiIT10eXBlb2Ygcj8obC5oJiZvLmtnLndhcm4oXCJbVHJhY2luZ10gR2l2ZW4gc2FtcGxlIHJhdGUgaXMgaW52YWxpZC4gU2FtcGxlIHJhdGUgbXVzdCBiZSBhIGJvb2xlYW4gb3IgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxLiBHb3QgXCIrSlNPTi5zdHJpbmdpZnkocikrXCIgb2YgdHlwZSBcIitKU09OLnN0cmluZ2lmeSh0eXBlb2YgcikrXCIuXCIpLDApOiEocjwwfHxyPjEpfHwobC5oJiZvLmtnLndhcm4oXCJbVHJhY2luZ10gR2l2ZW4gc2FtcGxlIHJhdGUgaXMgaW52YWxpZC4gU2FtcGxlIHJhdGUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEuIEdvdCBcIityK1wiLlwiKSwwKSk/aT8oZS5zYW1wbGVkPU1hdGgucmFuZG9tKCk8aSxlLnNhbXBsZWQ/KGwuaCYmby5rZy5sb2coXCJbVHJhY2luZ10gc3RhcnRpbmcgXCIrZS5vcCtcIiB0cmFuc2FjdGlvbiAtIFwiK2UubmFtZSksZSk6KGwuaCYmby5rZy5sb2coXCJbVHJhY2luZ10gRGlzY2FyZGluZyB0cmFuc2FjdGlvbiBiZWNhdXNlIGl0J3Mgbm90IGluY2x1ZGVkIGluIHRoZSByYW5kb20gc2FtcGxlIChzYW1wbGluZyByYXRlID0gXCIrTnVtYmVyKGkpK1wiKVwiKSxlKSk6KGwuaCYmby5rZy5sb2coXCJbVHJhY2luZ10gRGlzY2FyZGluZyB0cmFuc2FjdGlvbiBiZWNhdXNlIFwiKyhcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnRyYWNlc1NhbXBsZXI/XCJ0cmFjZXNTYW1wbGVyIHJldHVybmVkIDAgb3IgZmFsc2VcIjpcImEgbmVnYXRpdmUgc2FtcGxpbmcgZGVjaXNpb24gd2FzIGluaGVyaXRlZCBvciB0cmFjZXNTYW1wbGVSYXRlIGlzIHNldCB0byAwXCIpKSxlLnNhbXBsZWQ9ITEsZSk6KGwuaCYmby5rZy53YXJuKFwiW1RyYWNpbmddIERpc2NhcmRpbmcgdHJhbnNhY3Rpb24gYmVjYXVzZSBvZiBpbnZhbGlkIHNhbXBsZSByYXRlLlwiKSxlLnNhbXBsZWQ9ITEsZSkpOihlLnNhbXBsZWQ9ITEsZSk7dmFyIHIsaX1mdW5jdGlvbiB2KGUsdCl7dmFyIG49dGhpcy5nZXRDbGllbnQoKSxpPW4mJm4uZ2V0T3B0aW9ucygpfHx7fSxvPW5ldyBwLlkoZSx0aGlzKTtyZXR1cm4obz1oKG8saSwoMCxyLnBpKSh7cGFyZW50U2FtcGxlZDplLnBhcmVudFNhbXBsZWQsdHJhbnNhY3Rpb25Db250ZXh0OmV9LHQpKSkuc2FtcGxlZCYmby5pbml0U3BhblJlY29yZGVyKGkuX2V4cGVyaW1lbnRzJiZpLl9leHBlcmltZW50cy5tYXhTcGFucyksb31mdW5jdGlvbiBnKGUsdCxuLGksbyl7dmFyIGE9ZS5nZXRDbGllbnQoKSxzPWEmJmEuZ2V0T3B0aW9ucygpfHx7fSxjPW5ldyBmLmlvKHQsZSxuLGkpO3JldHVybihjPWgoYyxzLCgwLHIucGkpKHtwYXJlbnRTYW1wbGVkOnQucGFyZW50U2FtcGxlZCx0cmFuc2FjdGlvbkNvbnRleHQ6dH0sbykpKS5zYW1wbGVkJiZjLmluaXRTcGFuUmVjb3JkZXIocy5fZXhwZXJpbWVudHMmJnMuX2V4cGVyaW1lbnRzLm1heFNwYW5zKSxjfWZ1bmN0aW9uIHkoKXt2YXIgdDsodD0oMCxpLmN1KSgpKS5fX1NFTlRSWV9fJiYodC5fX1NFTlRSWV9fLmV4dGVuc2lvbnM9dC5fX1NFTlRSWV9fLmV4dGVuc2lvbnN8fHt9LHQuX19TRU5UUllfXy5leHRlbnNpb25zLnN0YXJ0VHJhbnNhY3Rpb258fCh0Ll9fU0VOVFJZX18uZXh0ZW5zaW9ucy5zdGFydFRyYW5zYWN0aW9uPXYpLHQuX19TRU5UUllfXy5leHRlbnNpb25zLnRyYWNlSGVhZGVyc3x8KHQuX19TRU5UUllfXy5leHRlbnNpb25zLnRyYWNlSGVhZGVycz1tKSksKDAscy5LVikoKSYmZnVuY3Rpb24oKXt2YXIgdD0oMCxpLmN1KSgpO2lmKHQuX19TRU5UUllfXyl7dmFyIG49e21vbmdvZGI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3KCgwLHMubCQpKGUsXCIuL2ludGVncmF0aW9ucy9ub2RlL21vbmdvXCIpLk1vbmdvKX0sbW9uZ29vc2U6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3KCgwLHMubCQpKGUsXCIuL2ludGVncmF0aW9ucy9ub2RlL21vbmdvXCIpLk1vbmdvKSh7bW9uZ29vc2U6ITB9KX0sbXlzcWw6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3KCgwLHMubCQpKGUsXCIuL2ludGVncmF0aW9ucy9ub2RlL215c3FsXCIpLk15c3FsKX0scGc6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3KCgwLHMubCQpKGUsXCIuL2ludGVncmF0aW9ucy9ub2RlL3Bvc3RncmVzXCIpLlBvc3RncmVzKX19LG89T2JqZWN0LmtleXMobikuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hISgwLHMuJHkpKGUpfSkpLm1hcCgoZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBuW2VdKCl9Y2F0Y2goZSl7cmV0dXJufX0pKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlfSkpO28ubGVuZ3RoPjAmJih0Ll9fU0VOVFJZX18uaW50ZWdyYXRpb25zPSgwLHIuZmwpKHQuX19TRU5UUllfXy5pbnRlZ3JhdGlvbnN8fFtdLG8pKX19KCksKDAsYy5vKShcImVycm9yXCIsZCksKDAsYy5vKShcInVuaGFuZGxlZHJlamVjdGlvblwiLGQpfWU9bi5obWQoZSl9LDE2NDU4OihlLHQsbik9PntuLmQodCx7aW86KCk9PmYsblQ6KCk9PnV9KTt2YXIgcj1uKDQxMTMyKSxpPW4oMjExNzApLG89bigxMjM0MyksYT1uKDI2MjU3KSxzPW4oNzg5NTUpLGM9big1NTMzNCksbD1uKDMzMzkxKSx1PTFlMyxkPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuLHIsaSl7dm9pZCAwPT09ciYmKHI9XCJcIik7dmFyIG89ZS5jYWxsKHRoaXMsaSl8fHRoaXM7cmV0dXJuIG8uX3B1c2hBY3Rpdml0eT10LG8uX3BvcEFjdGl2aXR5PW4sby50cmFuc2FjdGlvblNwYW5JZD1yLG99cmV0dXJuKDAsci5aVCkodCxlKSx0LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7dmFyIG49dGhpczt0LnNwYW5JZCE9PXRoaXMudHJhbnNhY3Rpb25TcGFuSWQmJih0LmZpbmlzaD1mdW5jdGlvbihlKXt0LmVuZFRpbWVzdGFtcD1cIm51bWJlclwiPT10eXBlb2YgZT9lOigwLGkuX0kpKCksbi5fcG9wQWN0aXZpdHkodC5zcGFuSWQpfSx2b2lkIDA9PT10LmVuZFRpbWVzdGFtcCYmdGhpcy5fcHVzaEFjdGl2aXR5KHQuc3BhbklkKSksZS5wcm90b3R5cGUuYWRkLmNhbGwodGhpcyx0KX0sdH0oYy5nQiksZj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbixyLGkpe3ZvaWQgMD09PXImJihyPXUpLHZvaWQgMD09PWkmJihpPSExKTt2YXIgYT1lLmNhbGwodGhpcyx0LG4pfHx0aGlzO3JldHVybiBhLl9pZGxlSHViPW4sYS5faWRsZVRpbWVvdXQ9cixhLl9vblNjb3BlPWksYS5hY3Rpdml0aWVzPXt9LGEuX2hlYXJ0YmVhdENvdW50ZXI9MCxhLl9maW5pc2hlZD0hMSxhLl9iZWZvcmVGaW5pc2hDYWxsYmFja3M9W10sbiYmaSYmKHAobikscy5oJiZvLmtnLmxvZyhcIlNldHRpbmcgaWRsZSB0cmFuc2FjdGlvbiBvbiBzY29wZS4gU3BhbiBJRDogXCIrYS5zcGFuSWQpLG4uY29uZmlndXJlU2NvcGUoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNldFNwYW4oYSl9KSkpLGEuX2luaXRUaW1lb3V0PXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7YS5fZmluaXNoZWR8fGEuZmluaXNoKCl9KSxhLl9pZGxlVGltZW91dCksYX1yZXR1cm4oMCxyLlpUKSh0LGUpLHQucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbih0KXt2YXIgbixhLGM9dGhpcztpZih2b2lkIDA9PT10JiYodD0oMCxpLl9JKSgpKSx0aGlzLl9maW5pc2hlZD0hMCx0aGlzLmFjdGl2aXRpZXM9e30sdGhpcy5zcGFuUmVjb3JkZXIpe3MuaCYmby5rZy5sb2coXCJbVHJhY2luZ10gZmluaXNoaW5nIElkbGVUcmFuc2FjdGlvblwiLG5ldyBEYXRlKDFlMyp0KS50b0lTT1N0cmluZygpLHRoaXMub3ApO3RyeXtmb3IodmFyIGw9KDAsci5YQSkodGhpcy5fYmVmb3JlRmluaXNoQ2FsbGJhY2tzKSx1PWwubmV4dCgpOyF1LmRvbmU7dT1sLm5leHQoKSkoMCx1LnZhbHVlKSh0aGlzLHQpfWNhdGNoKGUpe249e2Vycm9yOmV9fWZpbmFsbHl7dHJ5e3UmJiF1LmRvbmUmJihhPWwucmV0dXJuKSYmYS5jYWxsKGwpfWZpbmFsbHl7aWYobil0aHJvdyBuLmVycm9yfX10aGlzLnNwYW5SZWNvcmRlci5zcGFucz10aGlzLnNwYW5SZWNvcmRlci5zcGFucy5maWx0ZXIoKGZ1bmN0aW9uKGUpe2lmKGUuc3BhbklkPT09Yy5zcGFuSWQpcmV0dXJuITA7ZS5lbmRUaW1lc3RhbXB8fChlLmVuZFRpbWVzdGFtcD10LGUuc2V0U3RhdHVzKFwiY2FuY2VsbGVkXCIpLHMuaCYmby5rZy5sb2coXCJbVHJhY2luZ10gY2FuY2VsbGluZyBzcGFuIHNpbmNlIHRyYW5zYWN0aW9uIGVuZGVkIGVhcmx5XCIsSlNPTi5zdHJpbmdpZnkoZSx2b2lkIDAsMikpKTt2YXIgbj1lLnN0YXJ0VGltZXN0YW1wPHQ7cmV0dXJuIG58fHMuaCYmby5rZy5sb2coXCJbVHJhY2luZ10gZGlzY2FyZGluZyBTcGFuIHNpbmNlIGl0IGhhcHBlbmVkIGFmdGVyIFRyYW5zYWN0aW9uIHdhcyBmaW5pc2hlZFwiLEpTT04uc3RyaW5naWZ5KGUsdm9pZCAwLDIpKSxufSkpLHMuaCYmby5rZy5sb2coXCJbVHJhY2luZ10gZmx1c2hpbmcgSWRsZVRyYW5zYWN0aW9uXCIpfWVsc2Ugcy5oJiZvLmtnLmxvZyhcIltUcmFjaW5nXSBObyBhY3RpdmUgSWRsZVRyYW5zYWN0aW9uXCIpO3JldHVybiB0aGlzLl9vblNjb3BlJiZwKHRoaXMuX2lkbGVIdWIpLGUucHJvdG90eXBlLmZpbmlzaC5jYWxsKHRoaXMsdCl9LHQucHJvdG90eXBlLnJlZ2lzdGVyQmVmb3JlRmluaXNoQ2FsbGJhY2s9ZnVuY3Rpb24oZSl7dGhpcy5fYmVmb3JlRmluaXNoQ2FsbGJhY2tzLnB1c2goZSl9LHQucHJvdG90eXBlLmluaXRTcGFuUmVjb3JkZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLnNwYW5SZWNvcmRlcnx8KHRoaXMuc3BhblJlY29yZGVyPW5ldyBkKChmdW5jdGlvbihlKXt0Ll9maW5pc2hlZHx8dC5fcHVzaEFjdGl2aXR5KGUpfSksKGZ1bmN0aW9uKGUpe3QuX2ZpbmlzaGVkfHx0Ll9wb3BBY3Rpdml0eShlKX0pLHRoaXMuc3BhbklkLGUpLHMuaCYmby5rZy5sb2coXCJTdGFydGluZyBoZWFydGJlYXRcIiksdGhpcy5fcGluZ0hlYXJ0YmVhdCgpKSx0aGlzLnNwYW5SZWNvcmRlci5hZGQodGhpcyl9LHQucHJvdG90eXBlLl9wdXNoQWN0aXZpdHk9ZnVuY3Rpb24oZSl7dGhpcy5faW5pdFRpbWVvdXQmJihjbGVhclRpbWVvdXQodGhpcy5faW5pdFRpbWVvdXQpLHRoaXMuX2luaXRUaW1lb3V0PXZvaWQgMCkscy5oJiZvLmtnLmxvZyhcIltUcmFjaW5nXSBwdXNoQWN0aXZpdHk6IFwiK2UpLHRoaXMuYWN0aXZpdGllc1tlXT0hMCxzLmgmJm8ua2cubG9nKFwiW1RyYWNpbmddIG5ldyBhY3Rpdml0aWVzIGNvdW50XCIsT2JqZWN0LmtleXModGhpcy5hY3Rpdml0aWVzKS5sZW5ndGgpfSx0LnByb3RvdHlwZS5fcG9wQWN0aXZpdHk9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZih0aGlzLmFjdGl2aXRpZXNbZV0mJihzLmgmJm8ua2cubG9nKFwiW1RyYWNpbmddIHBvcEFjdGl2aXR5IFwiK2UpLGRlbGV0ZSB0aGlzLmFjdGl2aXRpZXNbZV0scy5oJiZvLmtnLmxvZyhcIltUcmFjaW5nXSBuZXcgYWN0aXZpdGllcyBjb3VudFwiLE9iamVjdC5rZXlzKHRoaXMuYWN0aXZpdGllcykubGVuZ3RoKSksMD09PU9iamVjdC5rZXlzKHRoaXMuYWN0aXZpdGllcykubGVuZ3RoKXt2YXIgbj10aGlzLl9pZGxlVGltZW91dCxyPSgwLGkuX0kpKCkrbi8xZTM7c2V0VGltZW91dCgoZnVuY3Rpb24oKXt0Ll9maW5pc2hlZHx8KHQuc2V0VGFnKGEuZCxhLnhbMV0pLHQuZmluaXNoKHIpKX0pLG4pfX0sdC5wcm90b3R5cGUuX2JlYXQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fZmluaXNoZWQpe3ZhciBlPU9iamVjdC5rZXlzKHRoaXMuYWN0aXZpdGllcykuam9pbihcIlwiKTtlPT09dGhpcy5fcHJldkhlYXJ0YmVhdFN0cmluZz90aGlzLl9oZWFydGJlYXRDb3VudGVyKz0xOnRoaXMuX2hlYXJ0YmVhdENvdW50ZXI9MSx0aGlzLl9wcmV2SGVhcnRiZWF0U3RyaW5nPWUsdGhpcy5faGVhcnRiZWF0Q291bnRlcj49Mz8ocy5oJiZvLmtnLmxvZyhcIltUcmFjaW5nXSBUcmFuc2FjdGlvbiBmaW5pc2hlZCBiZWNhdXNlIG9mIG5vIGNoYW5nZSBmb3IgMyBoZWFydCBiZWF0c1wiKSx0aGlzLnNldFN0YXR1cyhcImRlYWRsaW5lX2V4Y2VlZGVkXCIpLHRoaXMuc2V0VGFnKGEuZCxhLnhbMF0pLHRoaXMuZmluaXNoKCkpOnRoaXMuX3BpbmdIZWFydGJlYXQoKX19LHQucHJvdG90eXBlLl9waW5nSGVhcnRiZWF0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztzLmgmJm8ua2cubG9nKFwicGluZ2luZyBIZWFydGJlYXQgLT4gY3VycmVudCBjb3VudGVyOiBcIit0aGlzLl9oZWFydGJlYXRDb3VudGVyKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe2UuX2JlYXQoKX0pLDVlMyl9LHR9KGwuWSk7ZnVuY3Rpb24gcChlKXtpZihlKXt2YXIgdD1lLmdldFNjb3BlKCk7dCYmdC5nZXRUcmFuc2FjdGlvbigpJiZ0LnNldFNwYW4odm9pZCAwKX19fSw1NTE1MTooZSx0LG4pPT57bi5kKHQse2pLOigpPT5yfSk7dmFyIHI9e307bi5yKHIpLG4uZChyLHtnRTooKT0+TH0pO3ZhciBpPW4oNTA3OTApLG89big0MTEzMiksYT1uKDEyMzQzKSxzPW4oODI5OTEpLGM9big3ODk1NSksbD1uKDE2NDU4KSx1PW4oNjMyMzMpLGQ9bmV3IFJlZ0V4cChcIl5bIFxcXFx0XSooWzAtOWEtZl17MzJ9KT8tPyhbMC05YS1mXXsxNn0pPy0/KFswMV0pP1sgXFxcXHRdKiRcIiksZj1uKDI2MjU3KSxwPSgwLHMuUikoKSxtPW4oNzIxNzYpLGg9bigyMTE3MCksdj1uKDU4NDY0KSxnPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtyZXR1cm4gZnVuY3Rpb24oaSl7dC52YWx1ZT49MCYmKGl8fG4pJiYodC5kZWx0YT10LnZhbHVlLShyfHwwKSwodC5kZWx0YXx8dm9pZCAwPT09cikmJihyPXQudmFsdWUsZSh0KSkpfX0seT1mdW5jdGlvbihlLHQpe3JldHVybntuYW1lOmUsdmFsdWU6bnVsbCE9dD90Oi0xLGRlbHRhOjAsZW50cmllczpbXSxpZDpcInYyLVwiK0RhdGUubm93KCkrXCItXCIrKE1hdGguZmxvb3IoODk5OTk5OTk5OTk5OSpNYXRoLnJhbmRvbSgpKSsxZTEyKX19LEU9ZnVuY3Rpb24oZSx0KXt0cnl7aWYoUGVyZm9ybWFuY2VPYnNlcnZlci5zdXBwb3J0ZWRFbnRyeVR5cGVzLmluY2x1ZGVzKGUpKXtpZihcImZpcnN0LWlucHV0XCI9PT1lJiYhKFwiUGVyZm9ybWFuY2VFdmVudFRpbWluZ1wiaW4gc2VsZikpcmV0dXJuO3ZhciBuPW5ldyBQZXJmb3JtYW5jZU9ic2VydmVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRFbnRyaWVzKCkubWFwKHQpfSkpO3JldHVybiBuLm9ic2VydmUoe3R5cGU6ZSxidWZmZXJlZDohMH0pLG59fWNhdGNoKGUpe319LF89ZnVuY3Rpb24oZSx0KXt2YXIgbj1mdW5jdGlvbihyKXtcInBhZ2VoaWRlXCIhPT1yLnR5cGUmJlwiaGlkZGVuXCIhPT0oMCxzLlIpKCkuZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlfHwoZShyKSx0JiYocmVtb3ZlRXZlbnRMaXN0ZW5lcihcInZpc2liaWxpdHljaGFuZ2VcIixuLCEwKSxyZW1vdmVFdmVudExpc3RlbmVyKFwicGFnZWhpZGVcIixuLCEwKSkpfTthZGRFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLG4sITApLGFkZEV2ZW50TGlzdGVuZXIoXCJwYWdlaGlkZVwiLG4sITApfSxJPS0xLFM9ZnVuY3Rpb24oKXtyZXR1cm4gSTwwJiYoST1cImhpZGRlblwiPT09KDAscy5SKSgpLmRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT8wOjEvMCxfKChmdW5jdGlvbihlKXt2YXIgdD1lLnRpbWVTdGFtcDtJPXR9KSwhMCkpLHtnZXQgZmlyc3RIaWRkZW5UaW1lKCl7cmV0dXJuIEl9fX0sYj17fSxUPSgwLHMuUikoKSxDPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2b2lkIDA9PT1lJiYoZT0hMSksdGhpcy5fcmVwb3J0QWxsQ2hhbmdlcz1lLHRoaXMuX21lYXN1cmVtZW50cz17fSx0aGlzLl9wZXJmb3JtYW5jZUN1cnNvcj0wLCEoMCxtLktWKSgpJiZUJiZULnBlcmZvcm1hbmNlJiZULmRvY3VtZW50JiYoVC5wZXJmb3JtYW5jZS5tYXJrJiZULnBlcmZvcm1hbmNlLm1hcmsoXCJzZW50cnktdHJhY2luZy1pbml0XCIpLHRoaXMuX3RyYWNrQ0xTKCksdGhpcy5fdHJhY2tMQ1AoKSx0aGlzLl90cmFja0ZJRCgpKX1yZXR1cm4gZS5wcm90b3R5cGUuYWRkUGVyZm9ybWFuY2VFbnRyaWVzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYoVCYmVC5wZXJmb3JtYW5jZSYmVC5wZXJmb3JtYW5jZS5nZXRFbnRyaWVzJiZoLloxKXtjLmgmJmEua2cubG9nKFwiW1RyYWNpbmddIEFkZGluZyAmIGFkanVzdGluZyBzcGFucyB1c2luZyBQZXJmb3JtYW5jZSBBUElcIik7dmFyIG4scixpPSgwLHUuWEwpKGguWjEpO2lmKFQucGVyZm9ybWFuY2UuZ2V0RW50cmllcygpLnNsaWNlKHRoaXMuX3BlcmZvcm1hbmNlQ3Vyc29yKS5mb3JFYWNoKChmdW5jdGlvbihvKXt2YXIgcz0oMCx1LlhMKShvLnN0YXJ0VGltZSksbD0oMCx1LlhMKShvLmR1cmF0aW9uKTtpZighKFwibmF2aWdhdGlvblwiPT09ZS5vcCYmaStzPGUuc3RhcnRUaW1lc3RhbXApKXN3aXRjaChvLmVudHJ5VHlwZSl7Y2FzZVwibmF2aWdhdGlvblwiOiFmdW5jdGlvbihlLHQsbil7W1widW5sb2FkRXZlbnRcIixcInJlZGlyZWN0XCIsXCJkb21Db250ZW50TG9hZGVkRXZlbnRcIixcImxvYWRFdmVudFwiLFwiY29ubmVjdFwiXS5mb3JFYWNoKChmdW5jdGlvbihyKXtBKGUsdCxyLG4pfSkpLEEoZSx0LFwic2VjdXJlQ29ubmVjdGlvblwiLG4sXCJUTFMvU1NMXCIsXCJjb25uZWN0RW5kXCIpLEEoZSx0LFwiZmV0Y2hcIixuLFwiY2FjaGVcIixcImRvbWFpbkxvb2t1cFN0YXJ0XCIpLEEoZSx0LFwiZG9tYWluTG9va3VwXCIsbixcIkROU1wiKSxmdW5jdGlvbihlLHQsbil7UihlLHtvcDpcImJyb3dzZXJcIixkZXNjcmlwdGlvbjpcInJlcXVlc3RcIixzdGFydFRpbWVzdGFtcDpuKygwLHUuWEwpKHQucmVxdWVzdFN0YXJ0KSxlbmRUaW1lc3RhbXA6bisoMCx1LlhMKSh0LnJlc3BvbnNlRW5kKX0pLFIoZSx7b3A6XCJicm93c2VyXCIsZGVzY3JpcHRpb246XCJyZXNwb25zZVwiLHN0YXJ0VGltZXN0YW1wOm4rKDAsdS5YTCkodC5yZXNwb25zZVN0YXJ0KSxlbmRUaW1lc3RhbXA6bisoMCx1LlhMKSh0LnJlc3BvbnNlRW5kKX0pfShlLHQsbil9KGUsbyxpKSxuPWkrKDAsdS5YTCkoby5yZXNwb25zZVN0YXJ0KSxyPWkrKDAsdS5YTCkoby5yZXF1ZXN0U3RhcnQpO2JyZWFrO2Nhc2VcIm1hcmtcIjpjYXNlXCJwYWludFwiOmNhc2VcIm1lYXN1cmVcIjp2YXIgZD1mdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPWkrbixhPW8rcjtyZXR1cm4gUihlLHtkZXNjcmlwdGlvbjp0Lm5hbWUsZW5kVGltZXN0YW1wOmEsb3A6dC5lbnRyeVR5cGUsc3RhcnRUaW1lc3RhbXA6b30pLG99KGUsbyxzLGwsaSksZj1TKCkscD1vLnN0YXJ0VGltZTxmLmZpcnN0SGlkZGVuVGltZTtcImZpcnN0LXBhaW50XCI9PT1vLm5hbWUmJnAmJihjLmgmJmEua2cubG9nKFwiW01lYXN1cmVtZW50c10gQWRkaW5nIEZQXCIpLHQuX21lYXN1cmVtZW50cy5mcD17dmFsdWU6by5zdGFydFRpbWV9LHQuX21lYXN1cmVtZW50c1tcIm1hcmsuZnBcIl09e3ZhbHVlOmR9KSxcImZpcnN0LWNvbnRlbnRmdWwtcGFpbnRcIj09PW8ubmFtZSYmcCYmKGMuaCYmYS5rZy5sb2coXCJbTWVhc3VyZW1lbnRzXSBBZGRpbmcgRkNQXCIpLHQuX21lYXN1cmVtZW50cy5mY3A9e3ZhbHVlOm8uc3RhcnRUaW1lfSx0Ll9tZWFzdXJlbWVudHNbXCJtYXJrLmZjcFwiXT17dmFsdWU6ZH0pO2JyZWFrO2Nhc2VcInJlc291cmNlXCI6dmFyIG09by5uYW1lLnJlcGxhY2UoVC5sb2NhdGlvbi5vcmlnaW4sXCJcIik7IWZ1bmN0aW9uKGUsdCxuLHIsaSxvKXtpZihcInhtbGh0dHByZXF1ZXN0XCIhPT10LmluaXRpYXRvclR5cGUmJlwiZmV0Y2hcIiE9PXQuaW5pdGlhdG9yVHlwZSl7dmFyIGE9e307XCJ0cmFuc2ZlclNpemVcImluIHQmJihhW1wiVHJhbnNmZXIgU2l6ZVwiXT10LnRyYW5zZmVyU2l6ZSksXCJlbmNvZGVkQm9keVNpemVcImluIHQmJihhW1wiRW5jb2RlZCBCb2R5IFNpemVcIl09dC5lbmNvZGVkQm9keVNpemUpLFwiZGVjb2RlZEJvZHlTaXplXCJpbiB0JiYoYVtcIkRlY29kZWQgQm9keSBTaXplXCJdPXQuZGVjb2RlZEJvZHlTaXplKTt2YXIgcz1vK3I7UihlLHtkZXNjcmlwdGlvbjpuLGVuZFRpbWVzdGFtcDpzK2ksb3A6dC5pbml0aWF0b3JUeXBlP1wicmVzb3VyY2UuXCIrdC5pbml0aWF0b3JUeXBlOlwicmVzb3VyY2VcIixzdGFydFRpbWVzdGFtcDpzLGRhdGE6YX0pfX0oZSxvLG0scyxsLGkpfX0pKSx0aGlzLl9wZXJmb3JtYW5jZUN1cnNvcj1NYXRoLm1heChwZXJmb3JtYW5jZS5nZXRFbnRyaWVzKCkubGVuZ3RoLTEsMCksdGhpcy5fdHJhY2tOYXZpZ2F0b3IoZSksXCJwYWdlbG9hZFwiPT09ZS5vcCl7dmFyIG89KDAsdS5YTCkoaC5aMSk7XCJudW1iZXJcIj09dHlwZW9mIG4mJihjLmgmJmEua2cubG9nKFwiW01lYXN1cmVtZW50c10gQWRkaW5nIFRURkJcIiksdGhpcy5fbWVhc3VyZW1lbnRzLnR0ZmI9e3ZhbHVlOjFlMyoobi1lLnN0YXJ0VGltZXN0YW1wKX0sXCJudW1iZXJcIj09dHlwZW9mIHImJnI8PW4mJih0aGlzLl9tZWFzdXJlbWVudHNbXCJ0dGZiLnJlcXVlc3RUaW1lXCJdPXt2YWx1ZToxZTMqKG4tcil9KSksW1wiZmNwXCIsXCJmcFwiLFwibGNwXCJdLmZvckVhY2goKGZ1bmN0aW9uKG4pe2lmKHQuX21lYXN1cmVtZW50c1tuXSYmIShvPj1lLnN0YXJ0VGltZXN0YW1wKSl7dmFyIHI9dC5fbWVhc3VyZW1lbnRzW25dLnZhbHVlLGk9bysoMCx1LlhMKShyKSxzPU1hdGguYWJzKDFlMyooaS1lLnN0YXJ0VGltZXN0YW1wKSksbD1zLXI7Yy5oJiZhLmtnLmxvZyhcIltNZWFzdXJlbWVudHNdIE5vcm1hbGl6ZWQgXCIrbitcIiBmcm9tIFwiK3IrXCIgdG8gXCIrcytcIiAoXCIrbCtcIilcIiksdC5fbWVhc3VyZW1lbnRzW25dLnZhbHVlPXN9fSkpLHRoaXMuX21lYXN1cmVtZW50c1tcIm1hcmsuZmlkXCJdJiZ0aGlzLl9tZWFzdXJlbWVudHMuZmlkJiZSKGUse2Rlc2NyaXB0aW9uOlwiZmlyc3QgaW5wdXQgZGVsYXlcIixlbmRUaW1lc3RhbXA6dGhpcy5fbWVhc3VyZW1lbnRzW1wibWFyay5maWRcIl0udmFsdWUrKDAsdS5YTCkodGhpcy5fbWVhc3VyZW1lbnRzLmZpZC52YWx1ZSksb3A6XCJ3ZWIudml0YWxzXCIsc3RhcnRUaW1lc3RhbXA6dGhpcy5fbWVhc3VyZW1lbnRzW1wibWFyay5maWRcIl0udmFsdWV9KSxcImZjcFwiaW4gdGhpcy5fbWVhc3VyZW1lbnRzfHxkZWxldGUgdGhpcy5fbWVhc3VyZW1lbnRzLmNscyxlLnNldE1lYXN1cmVtZW50cyh0aGlzLl9tZWFzdXJlbWVudHMpLGZ1bmN0aW9uKGUsdCxuKXt0JiYoYy5oJiZhLmtnLmxvZyhcIltNZWFzdXJlbWVudHNdIEFkZGluZyBMQ1AgRGF0YVwiKSx0LmVsZW1lbnQmJmUuc2V0VGFnKFwibGNwLmVsZW1lbnRcIiwoMCx2LlIpKHQuZWxlbWVudCkpLHQuaWQmJmUuc2V0VGFnKFwibGNwLmlkXCIsdC5pZCksdC51cmwmJmUuc2V0VGFnKFwibGNwLnVybFwiLHQudXJsLnRyaW0oKS5zbGljZSgwLDIwMCkpLGUuc2V0VGFnKFwibGNwLnNpemVcIix0LnNpemUpKSxuJiZuLnNvdXJjZXMmJihjLmgmJmEua2cubG9nKFwiW01lYXN1cmVtZW50c10gQWRkaW5nIENMUyBEYXRhXCIpLG4uc291cmNlcy5mb3JFYWNoKChmdW5jdGlvbih0LG4pe3JldHVybiBlLnNldFRhZyhcImNscy5zb3VyY2UuXCIrKG4rMSksKDAsdi5SKSh0Lm5vZGUpKX0pKSl9KGUsdGhpcy5fbGNwRW50cnksdGhpcy5fY2xzRW50cnkpLGUuc2V0VGFnKFwic2VudHJ5X3JlcG9ydEFsbENoYW5nZXNcIix0aGlzLl9yZXBvcnRBbGxDaGFuZ2VzKX19fSxlLnByb3RvdHlwZS5fdHJhY2tOYXZpZ2F0b3I9ZnVuY3Rpb24oZSl7dmFyIHQ9VC5uYXZpZ2F0b3I7aWYodCl7dmFyIG49dC5jb25uZWN0aW9uO24mJihuLmVmZmVjdGl2ZVR5cGUmJmUuc2V0VGFnKFwiZWZmZWN0aXZlQ29ubmVjdGlvblR5cGVcIixuLmVmZmVjdGl2ZVR5cGUpLG4udHlwZSYmZS5zZXRUYWcoXCJjb25uZWN0aW9uVHlwZVwiLG4udHlwZSksayhuLnJ0dCkmJih0aGlzLl9tZWFzdXJlbWVudHNbXCJjb25uZWN0aW9uLnJ0dFwiXT17dmFsdWU6bi5ydHR9KSxrKG4uZG93bmxpbmspJiYodGhpcy5fbWVhc3VyZW1lbnRzW1wiY29ubmVjdGlvbi5kb3dubGlua1wiXT17dmFsdWU6bi5kb3dubGlua30pKSxrKHQuZGV2aWNlTWVtb3J5KSYmZS5zZXRUYWcoXCJkZXZpY2VNZW1vcnlcIixTdHJpbmcodC5kZXZpY2VNZW1vcnkpKSxrKHQuaGFyZHdhcmVDb25jdXJyZW5jeSkmJmUuc2V0VGFnKFwiaGFyZHdhcmVDb25jdXJyZW5jeVwiLFN0cmluZyh0LmhhcmR3YXJlQ29uY3VycmVuY3kpKX19LGUucHJvdG90eXBlLl90cmFja0NMUz1mdW5jdGlvbigpe3ZhciBlLHQsbixyLGksbyxzLGw9dGhpcztlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZW50cmllcy5wb3AoKTt0JiYoYy5oJiZhLmtnLmxvZyhcIltNZWFzdXJlbWVudHNdIEFkZGluZyBDTFNcIiksbC5fbWVhc3VyZW1lbnRzLmNscz17dmFsdWU6ZS52YWx1ZX0sbC5fY2xzRW50cnk9dCl9LG49eShcIkNMU1wiLDApLHI9MCxpPVtdLChzPUUoXCJsYXlvdXQtc2hpZnRcIixvPWZ1bmN0aW9uKGUpe2lmKGUmJiFlLmhhZFJlY2VudElucHV0KXt2YXIgbz1pWzBdLGE9aVtpLmxlbmd0aC0xXTtyJiYwIT09aS5sZW5ndGgmJmUuc3RhcnRUaW1lLWEuc3RhcnRUaW1lPDFlMyYmZS5zdGFydFRpbWUtby5zdGFydFRpbWU8NWUzPyhyKz1lLnZhbHVlLGkucHVzaChlKSk6KHI9ZS52YWx1ZSxpPVtlXSkscj5uLnZhbHVlJiYobi52YWx1ZT1yLG4uZW50cmllcz1pLHQmJnQoKSl9fSkpJiYodD1nKGUsbix2b2lkIDApLF8oKGZ1bmN0aW9uKCl7cy50YWtlUmVjb3JkcygpLm1hcChvKSx0KCEwKX0pKSl9LGUucHJvdG90eXBlLl90cmFja0xDUD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7IWZ1bmN0aW9uKHQsbil7dmFyIHIsaT1TKCksbz15KFwiTENQXCIpLHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdGFydFRpbWU7dDxpLmZpcnN0SGlkZGVuVGltZSYmKG8udmFsdWU9dCxvLmVudHJpZXMucHVzaChlKSksciYmcigpfSxsPUUoXCJsYXJnZXN0LWNvbnRlbnRmdWwtcGFpbnRcIixzKTtpZihsKXtyPWcoKGZ1bmN0aW9uKHQpe3ZhciBuPXQuZW50cmllcy5wb3AoKTtpZihuKXt2YXIgcj0oMCx1LlhMKShoLloxKSxpPSgwLHUuWEwpKG4uc3RhcnRUaW1lKTtjLmgmJmEua2cubG9nKFwiW01lYXN1cmVtZW50c10gQWRkaW5nIExDUFwiKSxlLl9tZWFzdXJlbWVudHMubGNwPXt2YWx1ZTp0LnZhbHVlfSxlLl9tZWFzdXJlbWVudHNbXCJtYXJrLmxjcFwiXT17dmFsdWU6citpfSxlLl9sY3BFbnRyeT1ufX0pLG8sbik7dmFyIGQ9ZnVuY3Rpb24oKXtiW28uaWRdfHwobC50YWtlUmVjb3JkcygpLm1hcChzKSxsLmRpc2Nvbm5lY3QoKSxiW28uaWRdPSEwLHIoITApKX07W1wia2V5ZG93blwiLFwiY2xpY2tcIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7YWRkRXZlbnRMaXN0ZW5lcihlLGQse29uY2U6ITAsY2FwdHVyZTohMH0pfSkpLF8oZCwhMCl9fSgwLHRoaXMuX3JlcG9ydEFsbENoYW5nZXMpfSxlLnByb3RvdHlwZS5fdHJhY2tGSUQ9ZnVuY3Rpb24oKXt2YXIgZSx0LG4scixpLG8scz10aGlzO2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5lbnRyaWVzLnBvcCgpO2lmKHQpe3ZhciBuPSgwLHUuWEwpKGguWjEpLHI9KDAsdS5YTCkodC5zdGFydFRpbWUpO2MuaCYmYS5rZy5sb2coXCJbTWVhc3VyZW1lbnRzXSBBZGRpbmcgRklEXCIpLHMuX21lYXN1cmVtZW50cy5maWQ9e3ZhbHVlOmUudmFsdWV9LHMuX21lYXN1cmVtZW50c1tcIm1hcmsuZmlkXCJdPXt2YWx1ZTpuK3J9fX0sbj1TKCkscj15KFwiRklEXCIpLChvPUUoXCJmaXJzdC1pbnB1dFwiLGk9ZnVuY3Rpb24oZSl7dCYmZS5zdGFydFRpbWU8bi5maXJzdEhpZGRlblRpbWUmJihyLnZhbHVlPWUucHJvY2Vzc2luZ1N0YXJ0LWUuc3RhcnRUaW1lLHIuZW50cmllcy5wdXNoKGUpLHQoITApKX0pKSYmKHQ9ZyhlLHIsdm9pZCAwKSxfKChmdW5jdGlvbigpe28udGFrZVJlY29yZHMoKS5tYXAoaSksby5kaXNjb25uZWN0KCl9KSwhMCkpfSxlfSgpO2Z1bmN0aW9uIEEoZSx0LG4scixpLG8pe3ZhciBhPW8/dFtvXTp0W24rXCJFbmRcIl0scz10W24rXCJTdGFydFwiXTtzJiZhJiZSKGUse29wOlwiYnJvd3NlclwiLGRlc2NyaXB0aW9uOm51bGwhPWk/aTpuLHN0YXJ0VGltZXN0YW1wOnIrKDAsdS5YTCkocyksZW5kVGltZXN0YW1wOnIrKDAsdS5YTCkoYSl9KX1mdW5jdGlvbiBSKGUsdCl7dmFyIG49dC5zdGFydFRpbWVzdGFtcCxyPSgwLG8uX1QpKHQsW1wic3RhcnRUaW1lc3RhbXBcIl0pO3JldHVybiBuJiZlLnN0YXJ0VGltZXN0YW1wPm4mJihlLnN0YXJ0VGltZXN0YW1wPW4pLGUuc3RhcnRDaGlsZCgoMCxvLnBpKSh7c3RhcnRUaW1lc3RhbXA6bn0scikpfWZ1bmN0aW9uIGsoZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGUmJmlzRmluaXRlKGUpfXZhciBPPW4oNTczMjEpLE49big5NzMyKSx3PW4oNjc1OTcpLEQ9e3RyYWNlRmV0Y2g6ITAsdHJhY2VYSFI6ITAsdHJhY2luZ09yaWdpbnM6W1wibG9jYWxob3N0XCIsL15cXC8vXX0sUD0oMCxzLlIpKCksTT0oMCxvLnBpKSh7aWRsZVRpbWVvdXQ6bC5uVCxtYXJrQmFja2dyb3VuZFRyYW5zYWN0aW9uczohMCxtYXhUcmFuc2FjdGlvbkR1cmF0aW9uOjYwMCxyb3V0aW5nSW5zdHJ1bWVudGF0aW9uOmZ1bmN0aW9uKGUsdCxuKXtpZih2b2lkIDA9PT10JiYodD0hMCksdm9pZCAwPT09biYmKG49ITApLFAmJlAubG9jYXRpb24pe3ZhciByLGk9UC5sb2NhdGlvbi5ocmVmO3QmJihyPWUoe25hbWU6UC5sb2NhdGlvbi5wYXRobmFtZSxvcDpcInBhZ2Vsb2FkXCJ9KSksbiYmKDAsTi5vKShcImhpc3RvcnlcIiwoZnVuY3Rpb24odCl7dmFyIG49dC50byxvPXQuZnJvbTt2b2lkIDA9PT1vJiZpJiYtMSE9PWkuaW5kZXhPZihuKT9pPXZvaWQgMDpvIT09biYmKGk9dm9pZCAwLHImJihjLmgmJmEua2cubG9nKFwiW1RyYWNpbmddIEZpbmlzaGluZyBjdXJyZW50IHRyYW5zYWN0aW9uIHdpdGggb3A6IFwiK3Iub3ApLHIuZmluaXNoKCkpLHI9ZSh7bmFtZTpQLmxvY2F0aW9uLnBhdGhuYW1lLG9wOlwibmF2aWdhdGlvblwifSkpfSkpfWVsc2UgYy5oJiZhLmtnLndhcm4oXCJDb3VsZCBub3QgaW5pdGlhbGl6ZSByb3V0aW5nIGluc3RydW1lbnRhdGlvbiBkdWUgdG8gaW52YWxpZCBsb2NhdGlvblwiKX0sc3RhcnRUcmFuc2FjdGlvbk9uTG9jYXRpb25DaGFuZ2U6ITAsc3RhcnRUcmFuc2FjdGlvbk9uUGFnZUxvYWQ6ITB9LEQpLEw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3RoaXMubmFtZT1lLmlkLHRoaXMuX2NvbmZpZ3VyZWRJZGxlVGltZW91dD12b2lkIDA7dmFyIG49RC50cmFjaW5nT3JpZ2luczt0JiYodGhpcy5fY29uZmlndXJlZElkbGVUaW1lb3V0PXQuaWRsZVRpbWVvdXQsdC50cmFjaW5nT3JpZ2lucyYmQXJyYXkuaXNBcnJheSh0LnRyYWNpbmdPcmlnaW5zKSYmMCE9PXQudHJhY2luZ09yaWdpbnMubGVuZ3RoP249dC50cmFjaW5nT3JpZ2luczpjLmgmJih0aGlzLl9lbWl0T3B0aW9uc1dhcm5pbmc9ITApKSx0aGlzLm9wdGlvbnM9KDAsby5waSkoKDAsby5waSkoKDAsby5waSkoe30sTSksdCkse3RyYWNpbmdPcmlnaW5zOm59KTt2YXIgcj10aGlzLm9wdGlvbnMuX21ldHJpY09wdGlvbnM7dGhpcy5fbWV0cmljcz1uZXcgQyhyJiZyLl9yZXBvcnRBbGxDaGFuZ2VzKX1yZXR1cm4gZS5wcm90b3R5cGUuc2V0dXBPbmNlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpczt0aGlzLl9nZXRDdXJyZW50SHViPXQsdGhpcy5fZW1pdE9wdGlvbnNXYXJuaW5nJiYoYy5oJiZhLmtnLndhcm4oXCJbVHJhY2luZ10gWW91IG5lZWQgdG8gZGVmaW5lIGB0cmFjaW5nT3JpZ2luc2AgaW4gdGhlIG9wdGlvbnMuIFNldCBhbiBhcnJheSBvZiB1cmxzIG9yIHBhdHRlcm5zIHRvIHRyYWNlLlwiKSxjLmgmJmEua2cud2FybihcIltUcmFjaW5nXSBXZSBhZGRlZCBhIHJlYXNvbmFibGUgZGVmYXVsdCBmb3IgeW91OiBcIitELnRyYWNpbmdPcmlnaW5zKSk7dmFyIHI9dGhpcy5vcHRpb25zLGk9ci5yb3V0aW5nSW5zdHJ1bWVudGF0aW9uLHM9ci5zdGFydFRyYW5zYWN0aW9uT25Mb2NhdGlvbkNoYW5nZSxsPXIuc3RhcnRUcmFuc2FjdGlvbk9uUGFnZUxvYWQsZD1yLm1hcmtCYWNrZ3JvdW5kVHJhbnNhY3Rpb25zLG09ci50cmFjZUZldGNoLGg9ci50cmFjZVhIUix2PXIudHJhY2luZ09yaWdpbnMsZz1yLnNob3VsZENyZWF0ZVNwYW5Gb3JSZXF1ZXN0O2koKGZ1bmN0aW9uKGUpe3JldHVybiBuLl9jcmVhdGVSb3V0ZVRyYW5zYWN0aW9uKGUpfSksbCxzKSxkJiYocCYmcC5kb2N1bWVudD9wLmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsKGZ1bmN0aW9uKCl7dmFyIGU9KDAsdS54MSkoKTtpZihwLmRvY3VtZW50LmhpZGRlbiYmZSl7dmFyIHQ9XCJjYW5jZWxsZWRcIjtjLmgmJmEua2cubG9nKFwiW1RyYWNpbmddIFRyYW5zYWN0aW9uOiBcIit0K1wiIC0+IHNpbmNlIHRhYiBtb3ZlZCB0byB0aGUgYmFja2dyb3VuZCwgb3A6IFwiK2Uub3ApLGUuc3RhdHVzfHxlLnNldFN0YXR1cyh0KSxlLnNldFRhZyhcInZpc2liaWxpdHljaGFuZ2VcIixcImRvY3VtZW50LmhpZGRlblwiKSxlLnNldFRhZyhmLmQsZi54WzJdKSxlLmZpbmlzaCgpfX0pKTpjLmgmJmEua2cud2FybihcIltUcmFjaW5nXSBDb3VsZCBub3Qgc2V0IHVwIGJhY2tncm91bmQgdGFiIGRldGVjdGlvbiBkdWUgdG8gbGFjayBvZiBnbG9iYWwgZG9jdW1lbnRcIikpLGZ1bmN0aW9uKGUpe3ZhciB0PSgwLG8ucGkpKCgwLG8ucGkpKHt9LEQpLGUpLG49dC50cmFjZUZldGNoLHI9dC50cmFjZVhIUixpPXQudHJhY2luZ09yaWdpbnMsYT10LnNob3VsZENyZWF0ZVNwYW5Gb3JSZXF1ZXN0LHM9e30sYz1mdW5jdGlvbihlKXtpZihzW2VdKXJldHVybiBzW2VdO3ZhciB0PWk7cmV0dXJuIHNbZV09dC5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4oMCxPLnpDKShlLHQpfSkpJiYhKDAsTy56QykoZSxcInNlbnRyeV9rZXlcIiksc1tlXX0sbD1jO1wiZnVuY3Rpb25cIj09dHlwZW9mIGEmJihsPWZ1bmN0aW9uKGUpe3JldHVybiBjKGUpJiZhKGUpfSk7dmFyIGQ9e307biYmKDAsTi5vKShcImZldGNoXCIsKGZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQsbil7aWYoKDAsdS56dSkoKSYmZS5mZXRjaERhdGEmJnQoZS5mZXRjaERhdGEudXJsKSlpZihlLmVuZFRpbWVzdGFtcCl7dmFyIHI9ZS5mZXRjaERhdGEuX19zcGFuO2lmKCFyKXJldHVybjsoYT1uW3JdKSYmKGUucmVzcG9uc2U/YS5zZXRIdHRwU3RhdHVzKGUucmVzcG9uc2Uuc3RhdHVzKTplLmVycm9yJiZhLnNldFN0YXR1cyhcImludGVybmFsX2Vycm9yXCIpLGEuZmluaXNoKCksZGVsZXRlIG5bcl0pfWVsc2V7dmFyIGk9KDAsdS54MSkoKTtpZihpKXt2YXIgYT1pLnN0YXJ0Q2hpbGQoe2RhdGE6KDAsby5waSkoKDAsby5waSkoe30sZS5mZXRjaERhdGEpLHt0eXBlOlwiZmV0Y2hcIn0pLGRlc2NyaXB0aW9uOmUuZmV0Y2hEYXRhLm1ldGhvZCtcIiBcIitlLmZldGNoRGF0YS51cmwsb3A6XCJodHRwLmNsaWVudFwifSk7ZS5mZXRjaERhdGEuX19zcGFuPWEuc3BhbklkLG5bYS5zcGFuSWRdPWE7dmFyIHM9ZS5hcmdzWzBdPWUuYXJnc1swXSxjPWUuYXJnc1sxXT1lLmFyZ3NbMV18fHt9LGw9Yy5oZWFkZXJzOygwLHcuVjkpKHMsUmVxdWVzdCkmJihsPXMuaGVhZGVycyksbD9cImZ1bmN0aW9uXCI9PXR5cGVvZiBsLmFwcGVuZD9sLmFwcGVuZChcInNlbnRyeS10cmFjZVwiLGEudG9UcmFjZXBhcmVudCgpKTpsPUFycmF5LmlzQXJyYXkobCk/KDAsby5mbCkobCxbW1wic2VudHJ5LXRyYWNlXCIsYS50b1RyYWNlcGFyZW50KCldXSk6KDAsby5waSkoKDAsby5waSkoe30sbCkse1wic2VudHJ5LXRyYWNlXCI6YS50b1RyYWNlcGFyZW50KCl9KTpsPXtcInNlbnRyeS10cmFjZVwiOmEudG9UcmFjZXBhcmVudCgpfSxjLmhlYWRlcnM9bH19fShlLGwsZCl9KSksciYmKDAsTi5vKShcInhoclwiLChmdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0LG4pe2lmKCEoISgwLHUuenUpKCl8fGUueGhyJiZlLnhoci5fX3NlbnRyeV9vd25fcmVxdWVzdF9fKSYmZS54aHImJmUueGhyLl9fc2VudHJ5X3hocl9fJiZ0KGUueGhyLl9fc2VudHJ5X3hocl9fLnVybCkpe3ZhciByPWUueGhyLl9fc2VudHJ5X3hocl9fO2lmKGUuZW5kVGltZXN0YW1wKXt2YXIgaT1lLnhoci5fX3NlbnRyeV94aHJfc3Bhbl9pZF9fO2lmKCFpKXJldHVybjsocz1uW2ldKSYmKHMuc2V0SHR0cFN0YXR1cyhyLnN0YXR1c19jb2RlKSxzLmZpbmlzaCgpLGRlbGV0ZSBuW2ldKX1lbHNle3ZhciBhPSgwLHUueDEpKCk7aWYoYSl7dmFyIHM9YS5zdGFydENoaWxkKHtkYXRhOigwLG8ucGkpKCgwLG8ucGkpKHt9LHIuZGF0YSkse3R5cGU6XCJ4aHJcIixtZXRob2Q6ci5tZXRob2QsdXJsOnIudXJsfSksZGVzY3JpcHRpb246ci5tZXRob2QrXCIgXCIrci51cmwsb3A6XCJodHRwLmNsaWVudFwifSk7aWYoZS54aHIuX19zZW50cnlfeGhyX3NwYW5faWRfXz1zLnNwYW5JZCxuW2UueGhyLl9fc2VudHJ5X3hocl9zcGFuX2lkX19dPXMsZS54aHIuc2V0UmVxdWVzdEhlYWRlcil0cnl7ZS54aHIuc2V0UmVxdWVzdEhlYWRlcihcInNlbnRyeS10cmFjZVwiLHMudG9UcmFjZXBhcmVudCgpKX1jYXRjaChlKXt9fX19fShlLGwsZCl9KSl9KHt0cmFjZUZldGNoOm0sdHJhY2VYSFI6aCx0cmFjaW5nT3JpZ2luczp2LHNob3VsZENyZWF0ZVNwYW5Gb3JSZXF1ZXN0Omd9KX0sZS5wcm90b3R5cGUuX2NyZWF0ZVJvdXRlVHJhbnNhY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZih0aGlzLl9nZXRDdXJyZW50SHViKXt2YXIgbj10aGlzLm9wdGlvbnMscj1uLmJlZm9yZU5hdmlnYXRlLGw9bi5pZGxlVGltZW91dCxmPW4ubWF4VHJhbnNhY3Rpb25EdXJhdGlvbixwPVwicGFnZWxvYWRcIj09PWUub3A/ZnVuY3Rpb24oKXt2YXIgZSx0PShlPSgwLHMuUikoKS5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwibWV0YVtuYW1lPXNlbnRyeS10cmFjZV1cIikpP2UuZ2V0QXR0cmlidXRlKFwiY29udGVudFwiKTpudWxsO2lmKHQpcmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUubWF0Y2goZCk7aWYodCl7dmFyIG49dm9pZCAwO3JldHVyblwiMVwiPT09dFszXT9uPSEwOlwiMFwiPT09dFszXSYmKG49ITEpLHt0cmFjZUlkOnRbMV0scGFyZW50U2FtcGxlZDpuLHBhcmVudFNwYW5JZDp0WzJdfX19KHQpfSgpOnZvaWQgMCxtPSgwLG8ucGkpKCgwLG8ucGkpKCgwLG8ucGkpKHt9LGUpLHApLHt0cmltRW5kOiEwfSksaD1cImZ1bmN0aW9uXCI9PXR5cGVvZiByP3IobSk6bSx2PXZvaWQgMD09PWg/KDAsby5waSkoKDAsby5waSkoe30sbSkse3NhbXBsZWQ6ITF9KTpoOyExPT09di5zYW1wbGVkJiZjLmgmJmEua2cubG9nKFwiW1RyYWNpbmddIFdpbGwgbm90IHNlbmQgXCIrdi5vcCtcIiB0cmFuc2FjdGlvbiBiZWNhdXNlIG9mIGJlZm9yZU5hdmlnYXRlLlwiKSxjLmgmJmEua2cubG9nKFwiW1RyYWNpbmddIFN0YXJ0aW5nIFwiK3Yub3ArXCIgdHJhbnNhY3Rpb24gb24gc2NvcGVcIik7dmFyIGc9dGhpcy5fZ2V0Q3VycmVudEh1YigpLHk9KDAscy5SKSgpLmxvY2F0aW9uLEU9KDAsaS5sYikoZyx2LGwsITAse2xvY2F0aW9uOnl9KTtyZXR1cm4gRS5yZWdpc3RlckJlZm9yZUZpbmlzaENhbGxiYWNrKChmdW5jdGlvbihlLG4pe3QuX21ldHJpY3MuYWRkUGVyZm9ybWFuY2VFbnRyaWVzKGUpLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uLXQuc3RhcnRUaW1lc3RhbXA7biYmKHI+ZXx8cjwwKSYmKHQuc2V0U3RhdHVzKFwiZGVhZGxpbmVfZXhjZWVkZWRcIiksdC5zZXRUYWcoXCJtYXhUcmFuc2FjdGlvbkR1cmF0aW9uRXhjZWVkZWRcIixcInRydWVcIikpfSgoMCx1LldCKShmKSxlLG4pfSkpLEUuc2V0VGFnKFwiaWRsZVRpbWVvdXRcIix0aGlzLl9jb25maWd1cmVkSWRsZVRpbWVvdXQpLEV9Yy5oJiZhLmtnLndhcm4oXCJbVHJhY2luZ10gRGlkIG5vdCBjcmVhdGUgXCIrZS5vcCtcIiB0cmFuc2FjdGlvbiBiZWNhdXNlIF9nZXRDdXJyZW50SHViIGlzIGludmFsaWQuXCIpfSxlLmlkPVwiQnJvd3NlclRyYWNpbmdcIixlfSgpOygwLGkucm8pKCl9LDU1MzM0OihlLHQsbik9PntuLmQodCx7RHI6KCk9PmMsZ0I6KCk9PnN9KTt2YXIgcj1uKDQxMTMyKSxpPW4oNjI4NDQpLG89bigyMTE3MCksYT1uKDIwNTM1KSxzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2b2lkIDA9PT1lJiYoZT0xZTMpLHRoaXMuc3BhbnM9W10sdGhpcy5fbWF4bGVuPWV9cmV0dXJuIGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt0aGlzLnNwYW5zLmxlbmd0aD50aGlzLl9tYXhsZW4/ZS5zcGFuUmVjb3JkZXI9dm9pZCAwOnRoaXMuc3BhbnMucHVzaChlKX0sZX0oKSxjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXtpZih0aGlzLnRyYWNlSWQ9KDAsaS5ETSkoKSx0aGlzLnNwYW5JZD0oMCxpLkRNKSgpLnN1YnN0cmluZygxNiksdGhpcy5zdGFydFRpbWVzdGFtcD0oMCxvLl9JKSgpLHRoaXMudGFncz17fSx0aGlzLmRhdGE9e30sIWUpcmV0dXJuIHRoaXM7ZS50cmFjZUlkJiYodGhpcy50cmFjZUlkPWUudHJhY2VJZCksZS5zcGFuSWQmJih0aGlzLnNwYW5JZD1lLnNwYW5JZCksZS5wYXJlbnRTcGFuSWQmJih0aGlzLnBhcmVudFNwYW5JZD1lLnBhcmVudFNwYW5JZCksXCJzYW1wbGVkXCJpbiBlJiYodGhpcy5zYW1wbGVkPWUuc2FtcGxlZCksZS5vcCYmKHRoaXMub3A9ZS5vcCksZS5kZXNjcmlwdGlvbiYmKHRoaXMuZGVzY3JpcHRpb249ZS5kZXNjcmlwdGlvbiksZS5kYXRhJiYodGhpcy5kYXRhPWUuZGF0YSksZS50YWdzJiYodGhpcy50YWdzPWUudGFncyksZS5zdGF0dXMmJih0aGlzLnN0YXR1cz1lLnN0YXR1cyksZS5zdGFydFRpbWVzdGFtcCYmKHRoaXMuc3RhcnRUaW1lc3RhbXA9ZS5zdGFydFRpbWVzdGFtcCksZS5lbmRUaW1lc3RhbXAmJih0aGlzLmVuZFRpbWVzdGFtcD1lLmVuZFRpbWVzdGFtcCl9cmV0dXJuIGUucHJvdG90eXBlLmNoaWxkPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnN0YXJ0Q2hpbGQoZSl9LGUucHJvdG90eXBlLnN0YXJ0Q2hpbGQ9ZnVuY3Rpb24odCl7dmFyIG49bmV3IGUoKDAsci5waSkoKDAsci5waSkoe30sdCkse3BhcmVudFNwYW5JZDp0aGlzLnNwYW5JZCxzYW1wbGVkOnRoaXMuc2FtcGxlZCx0cmFjZUlkOnRoaXMudHJhY2VJZH0pKTtyZXR1cm4gbi5zcGFuUmVjb3JkZXI9dGhpcy5zcGFuUmVjb3JkZXIsbi5zcGFuUmVjb3JkZXImJm4uc3BhblJlY29yZGVyLmFkZChuKSxuLnRyYW5zYWN0aW9uPXRoaXMudHJhbnNhY3Rpb24sbn0sZS5wcm90b3R5cGUuc2V0VGFnPWZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIHRoaXMudGFncz0oMCxyLnBpKSgoMCxyLnBpKSh7fSx0aGlzLnRhZ3MpLCgobj17fSlbZV09dCxuKSksdGhpc30sZS5wcm90b3R5cGUuc2V0RGF0YT1mdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiB0aGlzLmRhdGE9KDAsci5waSkoKDAsci5waSkoe30sdGhpcy5kYXRhKSwoKG49e30pW2VdPXQsbikpLHRoaXN9LGUucHJvdG90eXBlLnNldFN0YXR1cz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zdGF0dXM9ZSx0aGlzfSxlLnByb3RvdHlwZS5zZXRIdHRwU3RhdHVzPWZ1bmN0aW9uKGUpe3RoaXMuc2V0VGFnKFwiaHR0cC5zdGF0dXNfY29kZVwiLFN0cmluZyhlKSk7dmFyIHQ9ZnVuY3Rpb24oZSl7aWYoZTw0MDAmJmU+PTEwMClyZXR1cm5cIm9rXCI7aWYoZT49NDAwJiZlPDUwMClzd2l0Y2goZSl7Y2FzZSA0MDE6cmV0dXJuXCJ1bmF1dGhlbnRpY2F0ZWRcIjtjYXNlIDQwMzpyZXR1cm5cInBlcm1pc3Npb25fZGVuaWVkXCI7Y2FzZSA0MDQ6cmV0dXJuXCJub3RfZm91bmRcIjtjYXNlIDQwOTpyZXR1cm5cImFscmVhZHlfZXhpc3RzXCI7Y2FzZSA0MTM6cmV0dXJuXCJmYWlsZWRfcHJlY29uZGl0aW9uXCI7Y2FzZSA0Mjk6cmV0dXJuXCJyZXNvdXJjZV9leGhhdXN0ZWRcIjtkZWZhdWx0OnJldHVyblwiaW52YWxpZF9hcmd1bWVudFwifWlmKGU+PTUwMCYmZTw2MDApc3dpdGNoKGUpe2Nhc2UgNTAxOnJldHVyblwidW5pbXBsZW1lbnRlZFwiO2Nhc2UgNTAzOnJldHVyblwidW5hdmFpbGFibGVcIjtjYXNlIDUwNDpyZXR1cm5cImRlYWRsaW5lX2V4Y2VlZGVkXCI7ZGVmYXVsdDpyZXR1cm5cImludGVybmFsX2Vycm9yXCJ9cmV0dXJuXCJ1bmtub3duX2Vycm9yXCJ9KGUpO3JldHVyblwidW5rbm93bl9lcnJvclwiIT09dCYmdGhpcy5zZXRTdGF0dXModCksdGhpc30sZS5wcm90b3R5cGUuaXNTdWNjZXNzPWZ1bmN0aW9uKCl7cmV0dXJuXCJva1wiPT09dGhpcy5zdGF0dXN9LGUucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbihlKXt0aGlzLmVuZFRpbWVzdGFtcD1cIm51bWJlclwiPT10eXBlb2YgZT9lOigwLG8uX0kpKCl9LGUucHJvdG90eXBlLnRvVHJhY2VwYXJlbnQ9ZnVuY3Rpb24oKXt2YXIgZT1cIlwiO3JldHVybiB2b2lkIDAhPT10aGlzLnNhbXBsZWQmJihlPXRoaXMuc2FtcGxlZD9cIi0xXCI6XCItMFwiKSx0aGlzLnRyYWNlSWQrXCItXCIrdGhpcy5zcGFuSWQrZX0sZS5wcm90b3R5cGUudG9Db250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuKDAsYS5Kcikoe2RhdGE6dGhpcy5kYXRhLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sZW5kVGltZXN0YW1wOnRoaXMuZW5kVGltZXN0YW1wLG9wOnRoaXMub3AscGFyZW50U3BhbklkOnRoaXMucGFyZW50U3BhbklkLHNhbXBsZWQ6dGhpcy5zYW1wbGVkLHNwYW5JZDp0aGlzLnNwYW5JZCxzdGFydFRpbWVzdGFtcDp0aGlzLnN0YXJ0VGltZXN0YW1wLHN0YXR1czp0aGlzLnN0YXR1cyx0YWdzOnRoaXMudGFncyx0cmFjZUlkOnRoaXMudHJhY2VJZH0pfSxlLnByb3RvdHlwZS51cGRhdGVXaXRoQ29udGV4dD1mdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvO3JldHVybiB0aGlzLmRhdGE9bnVsbCE9KHQ9ZS5kYXRhKT90Ont9LHRoaXMuZGVzY3JpcHRpb249ZS5kZXNjcmlwdGlvbix0aGlzLmVuZFRpbWVzdGFtcD1lLmVuZFRpbWVzdGFtcCx0aGlzLm9wPWUub3AsdGhpcy5wYXJlbnRTcGFuSWQ9ZS5wYXJlbnRTcGFuSWQsdGhpcy5zYW1wbGVkPWUuc2FtcGxlZCx0aGlzLnNwYW5JZD1udWxsIT0obj1lLnNwYW5JZCk/bjp0aGlzLnNwYW5JZCx0aGlzLnN0YXJ0VGltZXN0YW1wPW51bGwhPShyPWUuc3RhcnRUaW1lc3RhbXApP3I6dGhpcy5zdGFydFRpbWVzdGFtcCx0aGlzLnN0YXR1cz1lLnN0YXR1cyx0aGlzLnRhZ3M9bnVsbCE9KGk9ZS50YWdzKT9pOnt9LHRoaXMudHJhY2VJZD1udWxsIT0obz1lLnRyYWNlSWQpP286dGhpcy50cmFjZUlkLHRoaXN9LGUucHJvdG90eXBlLmdldFRyYWNlQ29udGV4dD1mdW5jdGlvbigpe3JldHVybigwLGEuSnIpKHtkYXRhOk9iamVjdC5rZXlzKHRoaXMuZGF0YSkubGVuZ3RoPjA/dGhpcy5kYXRhOnZvaWQgMCxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG9wOnRoaXMub3AscGFyZW50X3NwYW5faWQ6dGhpcy5wYXJlbnRTcGFuSWQsc3Bhbl9pZDp0aGlzLnNwYW5JZCxzdGF0dXM6dGhpcy5zdGF0dXMsdGFnczpPYmplY3Qua2V5cyh0aGlzLnRhZ3MpLmxlbmd0aD4wP3RoaXMudGFnczp2b2lkIDAsdHJhY2VfaWQ6dGhpcy50cmFjZUlkfSl9LGUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybigwLGEuSnIpKHtkYXRhOk9iamVjdC5rZXlzKHRoaXMuZGF0YSkubGVuZ3RoPjA/dGhpcy5kYXRhOnZvaWQgMCxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG9wOnRoaXMub3AscGFyZW50X3NwYW5faWQ6dGhpcy5wYXJlbnRTcGFuSWQsc3Bhbl9pZDp0aGlzLnNwYW5JZCxzdGFydF90aW1lc3RhbXA6dGhpcy5zdGFydFRpbWVzdGFtcCxzdGF0dXM6dGhpcy5zdGF0dXMsdGFnczpPYmplY3Qua2V5cyh0aGlzLnRhZ3MpLmxlbmd0aD4wP3RoaXMudGFnczp2b2lkIDAsdGltZXN0YW1wOnRoaXMuZW5kVGltZXN0YW1wLHRyYWNlX2lkOnRoaXMudHJhY2VJZH0pfSxlfSgpfSwzMzM5MTooZSx0LG4pPT57bi5kKHQse1k6KCk9PnV9KTt2YXIgcj1uKDQxMTMyKSxpPW4oMzY4NzkpLG89big2NzU5NyksYT1uKDEyMzQzKSxzPW4oMjA1MzUpLGM9big3ODk1NSksbD1uKDU1MzM0KSx1PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuKXt2YXIgcj1lLmNhbGwodGhpcyx0KXx8dGhpcztyZXR1cm4gci5fbWVhc3VyZW1lbnRzPXt9LHIuX2h1Yj0oMCxpLkdkKSgpLCgwLG8uVjkpKG4saS5YYikmJihyLl9odWI9biksci5uYW1lPXQubmFtZXx8XCJcIixyLm1ldGFkYXRhPXQubWV0YWRhdGF8fHt9LHIuX3RyaW1FbmQ9dC50cmltRW5kLHIudHJhbnNhY3Rpb249cixyfXJldHVybigwLHIuWlQpKHQsZSksdC5wcm90b3R5cGUuc2V0TmFtZT1mdW5jdGlvbihlKXt0aGlzLm5hbWU9ZX0sdC5wcm90b3R5cGUuaW5pdFNwYW5SZWNvcmRlcj1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT0xZTMpLHRoaXMuc3BhblJlY29yZGVyfHwodGhpcy5zcGFuUmVjb3JkZXI9bmV3IGwuZ0IoZSkpLHRoaXMuc3BhblJlY29yZGVyLmFkZCh0aGlzKX0sdC5wcm90b3R5cGUuc2V0TWVhc3VyZW1lbnRzPWZ1bmN0aW9uKGUpe3RoaXMuX21lYXN1cmVtZW50cz0oMCxyLnBpKSh7fSxlKX0sdC5wcm90b3R5cGUuc2V0TWV0YWRhdGE9ZnVuY3Rpb24oZSl7dGhpcy5tZXRhZGF0YT0oMCxyLnBpKSgoMCxyLnBpKSh7fSx0aGlzLm1ldGFkYXRhKSxlKX0sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKHQpe3ZhciBuPXRoaXM7aWYodm9pZCAwPT09dGhpcy5lbmRUaW1lc3RhbXApe2lmKHRoaXMubmFtZXx8KGMuaCYmYS5rZy53YXJuKFwiVHJhbnNhY3Rpb24gaGFzIG5vIG5hbWUsIGZhbGxpbmcgYmFjayB0byBgPHVubGFiZWxlZCB0cmFuc2FjdGlvbj5gLlwiKSx0aGlzLm5hbWU9XCI8dW5sYWJlbGVkIHRyYW5zYWN0aW9uPlwiKSxlLnByb3RvdHlwZS5maW5pc2guY2FsbCh0aGlzLHQpLCEwPT09dGhpcy5zYW1wbGVkKXt2YXIgcj10aGlzLnNwYW5SZWNvcmRlcj90aGlzLnNwYW5SZWNvcmRlci5zcGFucy5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlIT09biYmZS5lbmRUaW1lc3RhbXB9KSk6W107dGhpcy5fdHJpbUVuZCYmci5sZW5ndGg+MCYmKHRoaXMuZW5kVGltZXN0YW1wPXIucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlLmVuZFRpbWVzdGFtcCYmdC5lbmRUaW1lc3RhbXA/ZS5lbmRUaW1lc3RhbXA+dC5lbmRUaW1lc3RhbXA/ZTp0OmV9KSkuZW5kVGltZXN0YW1wKTt2YXIgaT17Y29udGV4dHM6e3RyYWNlOnRoaXMuZ2V0VHJhY2VDb250ZXh0KCl9LHNwYW5zOnIsc3RhcnRfdGltZXN0YW1wOnRoaXMuc3RhcnRUaW1lc3RhbXAsdGFnczp0aGlzLnRhZ3MsdGltZXN0YW1wOnRoaXMuZW5kVGltZXN0YW1wLHRyYW5zYWN0aW9uOnRoaXMubmFtZSx0eXBlOlwidHJhbnNhY3Rpb25cIixzZGtQcm9jZXNzaW5nTWV0YWRhdGE6dGhpcy5tZXRhZGF0YX07cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX21lYXN1cmVtZW50cykubGVuZ3RoPjAmJihjLmgmJmEua2cubG9nKFwiW01lYXN1cmVtZW50c10gQWRkaW5nIG1lYXN1cmVtZW50cyB0byB0cmFuc2FjdGlvblwiLEpTT04uc3RyaW5naWZ5KHRoaXMuX21lYXN1cmVtZW50cyx2b2lkIDAsMikpLGkubWVhc3VyZW1lbnRzPXRoaXMuX21lYXN1cmVtZW50cyksYy5oJiZhLmtnLmxvZyhcIltUcmFjaW5nXSBGaW5pc2hpbmcgXCIrdGhpcy5vcCtcIiB0cmFuc2FjdGlvbjogXCIrdGhpcy5uYW1lK1wiLlwiKSx0aGlzLl9odWIuY2FwdHVyZUV2ZW50KGkpfWMuaCYmYS5rZy5sb2coXCJbVHJhY2luZ10gRGlzY2FyZGluZyB0cmFuc2FjdGlvbiBiZWNhdXNlIGl0cyB0cmFjZSB3YXMgbm90IGNob3NlbiB0byBiZSBzYW1wbGVkLlwiKTt2YXIgbz10aGlzLl9odWIuZ2V0Q2xpZW50KCkscz1vJiZvLmdldFRyYW5zcG9ydCYmby5nZXRUcmFuc3BvcnQoKTtzJiZzLnJlY29yZExvc3RFdmVudCYmcy5yZWNvcmRMb3N0RXZlbnQoXCJzYW1wbGVfcmF0ZVwiLFwidHJhbnNhY3Rpb25cIil9fSx0LnByb3RvdHlwZS50b0NvbnRleHQ9ZnVuY3Rpb24oKXt2YXIgdD1lLnByb3RvdHlwZS50b0NvbnRleHQuY2FsbCh0aGlzKTtyZXR1cm4oMCxzLkpyKSgoMCxyLnBpKSgoMCxyLnBpKSh7fSx0KSx7bmFtZTp0aGlzLm5hbWUsdHJpbUVuZDp0aGlzLl90cmltRW5kfSkpfSx0LnByb3RvdHlwZS51cGRhdGVXaXRoQ29udGV4dD1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gZS5wcm90b3R5cGUudXBkYXRlV2l0aENvbnRleHQuY2FsbCh0aGlzLHQpLHRoaXMubmFtZT1udWxsIT0obj10Lm5hbWUpP246XCJcIix0aGlzLl90cmltRW5kPXQudHJpbUVuZCx0aGlzfSx0fShsLkRyKX0sNjMyMzM6KGUsdCxuKT0+e24uZCh0LHtXQjooKT0+cyxYTDooKT0+YSx4MTooKT0+byx6dTooKT0+aX0pO3ZhciByPW4oMzY4NzkpO2Z1bmN0aW9uIGkoZSl7dmFyIHQ9KDAsci5HZCkoKS5nZXRDbGllbnQoKSxuPWV8fHQmJnQuZ2V0T3B0aW9ucygpO3JldHVybiEhbiYmKFwidHJhY2VzU2FtcGxlUmF0ZVwiaW4gbnx8XCJ0cmFjZXNTYW1wbGVyXCJpbiBuKX1mdW5jdGlvbiBvKGUpe3ZhciB0PShlfHwoMCxyLkdkKSgpKS5nZXRTY29wZSgpO3JldHVybiB0JiZ0LmdldFRyYW5zYWN0aW9uKCl9ZnVuY3Rpb24gYShlKXtyZXR1cm4gZS8xZTN9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gMWUzKmV9fSw0MTEzMjooZSx0LG4pPT57bi5kKHQse1hBOigpPT5zLFpUOigpPT5pLF9UOigpPT5hLGZsOigpPT5sLHBpOigpPT5vfSk7dmFyIHI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYoZVtuXT10W25dKX0scihlLHQpfTtmdW5jdGlvbiBpKGUsdCl7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9ZX1yKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KToobi5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IG4pfXZhciBvPWZ1bmN0aW9uKCl7cmV0dXJuIG89T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49MSxyPWFyZ3VtZW50cy5sZW5ndGg7bjxyO24rKylmb3IodmFyIGkgaW4gdD1hcmd1bWVudHNbbl0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsaSkmJihlW2ldPXRbaV0pO3JldHVybiBlfSxvLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07ZnVuY3Rpb24gYShlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LmluZGV4T2Yocik8MCYmKG5bcl09ZVtyXSk7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGk9MDtmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2k8ci5sZW5ndGg7aSsrKXQuaW5kZXhPZihyW2ldKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyW2ldKSYmKG5bcltpXV09ZVtyW2ldXSl9cmV0dXJuIG59ZnVuY3Rpb24gcyhlKXt2YXIgdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcixuPXQmJmVbdF0scj0wO2lmKG4pcmV0dXJuIG4uY2FsbChlKTtpZihlJiZcIm51bWJlclwiPT10eXBlb2YgZS5sZW5ndGgpcmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gZSYmcj49ZS5sZW5ndGgmJihlPXZvaWQgMCkse3ZhbHVlOmUmJmVbcisrXSxkb25lOiFlfX19O3Rocm93IG5ldyBUeXBlRXJyb3IodD9cIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCI6XCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpfWZ1bmN0aW9uIGMoZSx0KXt2YXIgbj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXTtpZighbilyZXR1cm4gZTt2YXIgcixpLG89bi5jYWxsKGUpLGE9W107dHJ5e2Zvcig7KHZvaWQgMD09PXR8fHQtLSA+MCkmJiEocj1vLm5leHQoKSkuZG9uZTspYS5wdXNoKHIudmFsdWUpfWNhdGNoKGUpe2k9e2Vycm9yOmV9fWZpbmFsbHl7dHJ5e3ImJiFyLmRvbmUmJihuPW8ucmV0dXJuKSYmbi5jYWxsKG8pfWZpbmFsbHl7aWYoaSl0aHJvdyBpLmVycm9yfX1yZXR1cm4gYX1mdW5jdGlvbiBsKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWU9ZS5jb25jYXQoYyhhcmd1bWVudHNbdF0pKTtyZXR1cm4gZX19LDEzODE5OihlLHQsbik9Pnt2YXIgcjtuLmQodCx7ejooKT0+cn0pLGZ1bmN0aW9uKGUpe2UuRmF0YWw9XCJmYXRhbFwiLGUuRXJyb3I9XCJlcnJvclwiLGUuV2FybmluZz1cIndhcm5pbmdcIixlLkxvZz1cImxvZ1wiLGUuSW5mbz1cImluZm9cIixlLkRlYnVnPVwiZGVidWdcIixlLkNyaXRpY2FsPVwiY3JpdGljYWxcIn0ocnx8KHI9e30pKX0sNTg0NjQ6KGUsdCxuKT0+e24uZCh0LHtSOigpPT5vLGw6KCk9PnN9KTt2YXIgcj1uKDgyOTkxKSxpPW4oNjc1OTcpO2Z1bmN0aW9uIG8oZSx0KXt0cnl7Zm9yKHZhciBuPWUscj1bXSxpPTAsbz0wLHM9dm9pZCAwO24mJmkrKzw1JiYhKFwiaHRtbFwiPT09KHM9YShuLHQpKXx8aT4xJiZvKzMqci5sZW5ndGgrcy5sZW5ndGg+PTgwKTspci5wdXNoKHMpLG8rPXMubGVuZ3RoLG49bi5wYXJlbnROb2RlO3JldHVybiByLnJldmVyc2UoKS5qb2luKFwiID4gXCIpfWNhdGNoKGUpe3JldHVyblwiPHVua25vd24+XCJ9fWZ1bmN0aW9uIGEoZSx0KXt2YXIgbixyLG8sYSxzLGM9ZSxsPVtdO2lmKCFjfHwhYy50YWdOYW1lKXJldHVyblwiXCI7bC5wdXNoKGMudGFnTmFtZS50b0xvd2VyQ2FzZSgpKTt2YXIgdT10JiZ0Lmxlbmd0aD90LmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGMuZ2V0QXR0cmlidXRlKGUpfSkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuW2UsYy5nZXRBdHRyaWJ1dGUoZSldfSkpOm51bGw7aWYodSYmdS5sZW5ndGgpdS5mb3JFYWNoKChmdW5jdGlvbihlKXtsLnB1c2goXCJbXCIrZVswXSsnPVwiJytlWzFdKydcIl0nKX0pKTtlbHNlIGlmKGMuaWQmJmwucHVzaChcIiNcIitjLmlkKSwobj1jLmNsYXNzTmFtZSkmJigwLGkuSEQpKG4pKWZvcihyPW4uc3BsaXQoL1xccysvKSxzPTA7czxyLmxlbmd0aDtzKyspbC5wdXNoKFwiLlwiK3Jbc10pO3ZhciBkPVtcInR5cGVcIixcIm5hbWVcIixcInRpdGxlXCIsXCJhbHRcIl07Zm9yKHM9MDtzPGQubGVuZ3RoO3MrKylvPWRbc10sKGE9Yy5nZXRBdHRyaWJ1dGUobykpJiZsLnB1c2goXCJbXCIrbysnPVwiJythKydcIl0nKTtyZXR1cm4gbC5qb2luKFwiXCIpfWZ1bmN0aW9uIHMoKXt2YXIgZT0oMCxyLlIpKCk7dHJ5e3JldHVybiBlLmRvY3VtZW50LmxvY2F0aW9uLmhyZWZ9Y2F0Y2goZSl7cmV0dXJuXCJcIn19fSwzMDI5MjooZSx0LG4pPT57bi5kKHQse1I6KCk9PnMsdjooKT0+bH0pO3ZhciByPW4oNTA4MzIpLGk9big4ODI2Niksbz1uKDg4Nzk1KSxhPS9eKD86KFxcdyspOilcXC9cXC8oPzooXFx3KykoPzo6KFxcdyspKT9AKShbXFx3Li1dKykoPzo6KFxcZCspKT9cXC8oLispLztmdW5jdGlvbiBzKGUsdCl7dm9pZCAwPT09dCYmKHQ9ITEpO3ZhciBuPWUuaG9zdCxyPWUucGF0aCxpPWUucGFzcyxvPWUucG9ydCxhPWUucHJvamVjdElkO3JldHVybiBlLnByb3RvY29sK1wiOi8vXCIrZS5wdWJsaWNLZXkrKHQmJmk/XCI6XCIraTpcIlwiKStcIkBcIituKyhvP1wiOlwiK286XCJcIikrXCIvXCIrKHI/citcIi9cIjpyKSthfWZ1bmN0aW9uIGMoZSl7cmV0dXJuXCJ1c2VyXCJpbiBlJiYhKFwicHVibGljS2V5XCJpbiBlKSYmKGUucHVibGljS2V5PWUudXNlcikse3VzZXI6ZS5wdWJsaWNLZXl8fFwiXCIscHJvdG9jb2w6ZS5wcm90b2NvbCxwdWJsaWNLZXk6ZS5wdWJsaWNLZXl8fFwiXCIscGFzczplLnBhc3N8fFwiXCIsaG9zdDplLmhvc3QscG9ydDplLnBvcnR8fFwiXCIscGF0aDplLnBhdGh8fFwiXCIscHJvamVjdElkOmUucHJvamVjdElkfX1mdW5jdGlvbiBsKGUpe3ZhciB0PVwic3RyaW5nXCI9PXR5cGVvZiBlP2Z1bmN0aW9uKGUpe3ZhciB0PWEuZXhlYyhlKTtpZighdCl0aHJvdyBuZXcgaS5iKFwiSW52YWxpZCBTZW50cnkgRHNuOiBcIitlKTt2YXIgbj0oMCxyLkNSKSh0LnNsaWNlKDEpLDYpLG89blswXSxzPW5bMV0sbD1uWzJdLHU9dm9pZCAwPT09bD9cIlwiOmwsZD1uWzNdLGY9bls0XSxwPXZvaWQgMD09PWY/XCJcIjpmLG09XCJcIixoPW5bNV0sdj1oLnNwbGl0KFwiL1wiKTtpZih2Lmxlbmd0aD4xJiYobT12LnNsaWNlKDAsLTEpLmpvaW4oXCIvXCIpLGg9di5wb3AoKSksaCl7dmFyIGc9aC5tYXRjaCgvXlxcZCsvKTtnJiYoaD1nWzBdKX1yZXR1cm4gYyh7aG9zdDpkLHBhc3M6dSxwYXRoOm0scHJvamVjdElkOmgscG9ydDpwLHByb3RvY29sOm8scHVibGljS2V5OnN9KX0oZSk6YyhlKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoby5oKXt2YXIgdD1lLnBvcnQsbj1lLnByb2plY3RJZCxyPWUucHJvdG9jb2w7aWYoW1wicHJvdG9jb2xcIixcInB1YmxpY0tleVwiLFwiaG9zdFwiLFwicHJvamVjdElkXCJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2lmKCFlW3RdKXRocm93IG5ldyBpLmIoXCJJbnZhbGlkIFNlbnRyeSBEc246IFwiK3QrXCIgbWlzc2luZ1wiKX0pKSwhbi5tYXRjaCgvXlxcZCskLykpdGhyb3cgbmV3IGkuYihcIkludmFsaWQgU2VudHJ5IERzbjogSW52YWxpZCBwcm9qZWN0SWQgXCIrbik7aWYoIWZ1bmN0aW9uKGUpe3JldHVyblwiaHR0cFwiPT09ZXx8XCJodHRwc1wiPT09ZX0ocikpdGhyb3cgbmV3IGkuYihcIkludmFsaWQgU2VudHJ5IERzbjogSW52YWxpZCBwcm90b2NvbCBcIityKTtpZih0JiZpc05hTihwYXJzZUludCh0LDEwKSkpdGhyb3cgbmV3IGkuYihcIkludmFsaWQgU2VudHJ5IERzbjogSW52YWxpZCBwb3J0IFwiK3QpfX0odCksdH19LDU4NzI1OihlLHQsbik9PntuLmQodCx7SmQ6KCk9Pm8sViQ6KCk9PnMseTc6KCk9PmF9KTt2YXIgcj1uKDUwODMyKSxpPW4oNjc1OTcpO2Z1bmN0aW9uIG8oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9W10pLFtlLHRdfWZ1bmN0aW9uIGEoZSl7dmFyIHQ9KDAsci5DUikoZSwyKSxuPSgwLHIuQ1IpKHRbMV0sMSk7cmV0dXJuKDAsci5DUikoblswXSwxKVswXS50eXBlfWZ1bmN0aW9uIHMoZSl7dmFyIHQ9KDAsci5DUikoZSwyKSxuPXRbMF0sbz10WzFdLGE9SlNPTi5zdHJpbmdpZnkobik7cmV0dXJuIG8ucmVkdWNlKChmdW5jdGlvbihlLHQpe3ZhciBuPSgwLHIuQ1IpKHQsMiksbz1uWzBdLGE9blsxXSxzPSgwLGkucHQpKGEpP1N0cmluZyhhKTpKU09OLnN0cmluZ2lmeShhKTtyZXR1cm4gZStcIlxcblwiK0pTT04uc3RyaW5naWZ5KG8pK1wiXFxuXCIrc30pLGEpfX0sODgyNjY6KGUsdCxuKT0+e24uZCh0LHtiOigpPT5vfSk7dmFyIHI9big1MDgzMiksaT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fCh7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXk/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pfHwoZVtuXT10W25dKTtyZXR1cm4gZX0pLG89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0KXt2YXIgbj10aGlzLmNvbnN0cnVjdG9yLHI9ZS5jYWxsKHRoaXMsdCl8fHRoaXM7cmV0dXJuIHIubWVzc2FnZT10LHIubmFtZT1uLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5uYW1lLGkocixuLnByb3RvdHlwZSkscn1yZXR1cm4oMCxyLlpUKSh0LGUpLHR9KEVycm9yKX0sODg3OTU6KGUsdCxuKT0+e24uZCh0LHtoOigpPT5yfSk7dmFyIHI9XCJ1bmRlZmluZWRcIj09dHlwZW9mIF9fU0VOVFJZX0RFQlVHX198fF9fU0VOVFJZX0RFQlVHX199LDgyOTkxOihlLHQsbik9PntuLmQodCx7UjooKT0+byxZOigpPT5hfSk7dmFyIHI9big3MjE3NiksaT17fTtmdW5jdGlvbiBvKCl7cmV0dXJuKDAsci5LVikoKT9uLmc6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjppfWZ1bmN0aW9uIGEoZSx0LG4pe3ZhciByPW58fG8oKSxpPXIuX19TRU5UUllfXz1yLl9fU0VOVFJZX198fHt9O3JldHVybiBpW2VdfHwoaVtlXT10KCkpfX0sOTczMjooZSx0LG4pPT57bi5kKHQse286KCk9Pmh9KTt2YXIgcixpPW4oNTA4MzIpLG89big4ODc5NSksYT1uKDgyOTkxKSxzPW4oNjc1OTcpLGM9bigxMjM0MyksbD1uKDIwNTM1KSx1PW4oMzAzNjApLGQ9big4ODIzKSxmPSgwLGEuUikoKSxwPXt9LG09e307ZnVuY3Rpb24gaChlLHQpe3BbZV09cFtlXXx8W10scFtlXS5wdXNoKHQpLGZ1bmN0aW9uKGUpe2lmKCFtW2VdKXN3aXRjaChtW2VdPSEwLGUpe2Nhc2VcImNvbnNvbGVcIjpcImNvbnNvbGVcImluIGYmJmMuUlUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZSBpbiBmLmNvbnNvbGUmJigwLGwuaGwpKGYuY29uc29sZSxlLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIG49W10scj0wO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspbltyXT1hcmd1bWVudHNbcl07dihcImNvbnNvbGVcIix7YXJnczpuLGxldmVsOmV9KSx0JiZ0LmFwcGx5KGYuY29uc29sZSxuKX19KSl9KSk7YnJlYWs7Y2FzZVwiZG9tXCI6IWZ1bmN0aW9uKCl7aWYoXCJkb2N1bWVudFwiaW4gZil7dmFyIGU9di5iaW5kKG51bGwsXCJkb21cIiksdD1JKGUsITApO2YuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdCwhMSksZi5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5cHJlc3NcIix0LCExKSxbXCJFdmVudFRhcmdldFwiLFwiTm9kZVwiXS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1mW3RdJiZmW3RdLnByb3RvdHlwZTtuJiZuLmhhc093blByb3BlcnR5JiZuLmhhc093blByb3BlcnR5KFwiYWRkRXZlbnRMaXN0ZW5lclwiKSYmKCgwLGwuaGwpKG4sXCJhZGRFdmVudExpc3RlbmVyXCIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihuLHIsaSl7aWYoXCJjbGlja1wiPT09bnx8XCJrZXlwcmVzc1wiPT1uKXRyeXt2YXIgbz10aGlzLl9fc2VudHJ5X2luc3RydW1lbnRhdGlvbl9oYW5kbGVyc19fPXRoaXMuX19zZW50cnlfaW5zdHJ1bWVudGF0aW9uX2hhbmRsZXJzX198fHt9LGE9b1tuXT1vW25dfHx7cmVmQ291bnQ6MH07aWYoIWEuaGFuZGxlcil7dmFyIHM9SShlKTthLmhhbmRsZXI9cyx0LmNhbGwodGhpcyxuLHMsaSl9YS5yZWZDb3VudCs9MX1jYXRjaChlKXt9cmV0dXJuIHQuY2FsbCh0aGlzLG4scixpKX19KSksKDAsbC5obCkobixcInJlbW92ZUV2ZW50TGlzdGVuZXJcIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXtpZihcImNsaWNrXCI9PT10fHxcImtleXByZXNzXCI9PXQpdHJ5e3ZhciBpPXRoaXMuX19zZW50cnlfaW5zdHJ1bWVudGF0aW9uX2hhbmRsZXJzX198fHt9LG89aVt0XTtvJiYoby5yZWZDb3VudC09MSxvLnJlZkNvdW50PD0wJiYoZS5jYWxsKHRoaXMsdCxvLmhhbmRsZXIsciksby5oYW5kbGVyPXZvaWQgMCxkZWxldGUgaVt0XSksMD09PU9iamVjdC5rZXlzKGkpLmxlbmd0aCYmZGVsZXRlIHRoaXMuX19zZW50cnlfaW5zdHJ1bWVudGF0aW9uX2hhbmRsZXJzX18pfWNhdGNoKGUpe31yZXR1cm4gZS5jYWxsKHRoaXMsdCxuLHIpfX0pKSl9KSl9fSgpO2JyZWFrO2Nhc2VcInhoclwiOiFmdW5jdGlvbigpe2lmKFwiWE1MSHR0cFJlcXVlc3RcImluIGYpe3ZhciBlPVhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZTsoMCxsLmhsKShlLFwib3BlblwiLChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuXT1hcmd1bWVudHNbbl07dmFyIHI9dGhpcyxpPXRbMV0sbz1yLl9fc2VudHJ5X3hocl9fPXttZXRob2Q6KDAscy5IRCkodFswXSk/dFswXS50b1VwcGVyQ2FzZSgpOnRbMF0sdXJsOnRbMV19OygwLHMuSEQpKGkpJiZcIlBPU1RcIj09PW8ubWV0aG9kJiZpLm1hdGNoKC9zZW50cnlfa2V5LykmJihyLl9fc2VudHJ5X293bl9yZXF1ZXN0X189ITApO3ZhciBhPWZ1bmN0aW9uKCl7aWYoND09PXIucmVhZHlTdGF0ZSl7dHJ5e28uc3RhdHVzX2NvZGU9ci5zdGF0dXN9Y2F0Y2goZSl7fXYoXCJ4aHJcIix7YXJnczp0LGVuZFRpbWVzdGFtcDpEYXRlLm5vdygpLHN0YXJ0VGltZXN0YW1wOkRhdGUubm93KCkseGhyOnJ9KX19O3JldHVyblwib25yZWFkeXN0YXRlY2hhbmdlXCJpbiByJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiByLm9ucmVhZHlzdGF0ZWNoYW5nZT8oMCxsLmhsKShyLFwib25yZWFkeXN0YXRlY2hhbmdlXCIsKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gYSgpLGUuYXBwbHkocix0KX19KSk6ci5hZGRFdmVudExpc3RlbmVyKFwicmVhZHlzdGF0ZWNoYW5nZVwiLGEpLGUuYXBwbHkocix0KX19KSksKDAsbC5obCkoZSxcInNlbmRcIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXRbbl09YXJndW1lbnRzW25dO3JldHVybiB0aGlzLl9fc2VudHJ5X3hocl9fJiZ2b2lkIDAhPT10WzBdJiYodGhpcy5fX3NlbnRyeV94aHJfXy5ib2R5PXRbMF0pLHYoXCJ4aHJcIix7YXJnczp0LHN0YXJ0VGltZXN0YW1wOkRhdGUubm93KCkseGhyOnRoaXN9KSxlLmFwcGx5KHRoaXMsdCl9fSkpfX0oKTticmVhaztjYXNlXCJmZXRjaFwiOigwLGQudCQpKCkmJigwLGwuaGwpKGYsXCJmZXRjaFwiLChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuXT1hcmd1bWVudHNbbl07dmFyIHIsbz17YXJnczp0LGZldGNoRGF0YTp7bWV0aG9kOihyPXQsdm9pZCAwPT09ciYmKHI9W10pLFwiUmVxdWVzdFwiaW4gZiYmKDAscy5WOSkoclswXSxSZXF1ZXN0KSYmclswXS5tZXRob2Q/U3RyaW5nKHJbMF0ubWV0aG9kKS50b1VwcGVyQ2FzZSgpOnJbMV0mJnJbMV0ubWV0aG9kP1N0cmluZyhyWzFdLm1ldGhvZCkudG9VcHBlckNhc2UoKTpcIkdFVFwiKSx1cmw6Zyh0KX0sc3RhcnRUaW1lc3RhbXA6RGF0ZS5ub3coKX07cmV0dXJuIHYoXCJmZXRjaFwiLCgwLGkucGkpKHt9LG8pKSxlLmFwcGx5KGYsdCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIHYoXCJmZXRjaFwiLCgwLGkucGkpKCgwLGkucGkpKHt9LG8pLHtlbmRUaW1lc3RhbXA6RGF0ZS5ub3coKSxyZXNwb25zZTplfSkpLGV9KSwoZnVuY3Rpb24oZSl7dGhyb3cgdihcImZldGNoXCIsKDAsaS5waSkoKDAsaS5waSkoe30sbykse2VuZFRpbWVzdGFtcDpEYXRlLm5vdygpLGVycm9yOmV9KSksZX0pKX19KSk7YnJlYWs7Y2FzZVwiaGlzdG9yeVwiOiFmdW5jdGlvbigpe2lmKCgwLGQuQmYpKCkpe3ZhciBlPWYub25wb3BzdGF0ZTtmLm9ucG9wc3RhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuXT1hcmd1bWVudHNbbl07dmFyIGk9Zi5sb2NhdGlvbi5ocmVmLG89cjtpZihyPWksdihcImhpc3RvcnlcIix7ZnJvbTpvLHRvOml9KSxlKXRyeXtyZXR1cm4gZS5hcHBseSh0aGlzLHQpfWNhdGNoKGUpe319LCgwLGwuaGwpKGYuaGlzdG9yeSxcInB1c2hTdGF0ZVwiLHQpLCgwLGwuaGwpKGYuaGlzdG9yeSxcInJlcGxhY2VTdGF0ZVwiLHQpfWZ1bmN0aW9uIHQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXRbbl09YXJndW1lbnRzW25dO3ZhciBpPXQubGVuZ3RoPjI/dFsyXTp2b2lkIDA7aWYoaSl7dmFyIG89cixhPVN0cmluZyhpKTtyPWEsdihcImhpc3RvcnlcIix7ZnJvbTpvLHRvOmF9KX1yZXR1cm4gZS5hcHBseSh0aGlzLHQpfX19KCk7YnJlYWs7Y2FzZVwiZXJyb3JcIjpTPWYub25lcnJvcixmLm9uZXJyb3I9ZnVuY3Rpb24oZSx0LG4scixpKXtyZXR1cm4gdihcImVycm9yXCIse2NvbHVtbjpyLGVycm9yOmksbGluZTpuLG1zZzplLHVybDp0fSksISFTJiZTLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07YnJlYWs7Y2FzZVwidW5oYW5kbGVkcmVqZWN0aW9uXCI6Yj1mLm9udW5oYW5kbGVkcmVqZWN0aW9uLGYub251bmhhbmRsZWRyZWplY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHYoXCJ1bmhhbmRsZWRyZWplY3Rpb25cIixlKSwhYnx8Yi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2JyZWFrO2RlZmF1bHQ6by5oJiZjLmtnLndhcm4oXCJ1bmtub3duIGluc3RydW1lbnRhdGlvbiB0eXBlOlwiLGUpfX0oZSl9ZnVuY3Rpb24gdihlLHQpe3ZhciBuLHI7aWYoZSYmcFtlXSl0cnl7Zm9yKHZhciBhPSgwLGkuWEEpKHBbZV18fFtdKSxzPWEubmV4dCgpOyFzLmRvbmU7cz1hLm5leHQoKSl7dmFyIGw9cy52YWx1ZTt0cnl7bCh0KX1jYXRjaCh0KXtvLmgmJmMua2cuZXJyb3IoXCJFcnJvciB3aGlsZSB0cmlnZ2VyaW5nIGluc3RydW1lbnRhdGlvbiBoYW5kbGVyLlxcblR5cGU6IFwiK2UrXCJcXG5OYW1lOiBcIisoMCx1LiRQKShsKStcIlxcbkVycm9yOlwiLHQpfX19Y2F0Y2goZSl7bj17ZXJyb3I6ZX19ZmluYWxseXt0cnl7cyYmIXMuZG9uZSYmKHI9YS5yZXR1cm4pJiZyLmNhbGwoYSl9ZmluYWxseXtpZihuKXRocm93IG4uZXJyb3J9fX1mdW5jdGlvbiBnKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT1bXSksXCJzdHJpbmdcIj09dHlwZW9mIGVbMF0/ZVswXTpcIlJlcXVlc3RcImluIGYmJigwLHMuVjkpKGVbMF0sUmVxdWVzdCk/ZVswXS51cmw6U3RyaW5nKGVbMF0pfXZhciB5LEUsXz0xZTM7ZnVuY3Rpb24gSShlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0hMSksZnVuY3Rpb24obil7aWYobiYmRSE9PW4mJiFmdW5jdGlvbihlKXtpZihcImtleXByZXNzXCIhPT1lLnR5cGUpcmV0dXJuITE7dHJ5e3ZhciB0PWUudGFyZ2V0O2lmKCF0fHwhdC50YWdOYW1lKXJldHVybiEwO2lmKFwiSU5QVVRcIj09PXQudGFnTmFtZXx8XCJURVhUQVJFQVwiPT09dC50YWdOYW1lfHx0LmlzQ29udGVudEVkaXRhYmxlKXJldHVybiExfWNhdGNoKGUpe31yZXR1cm4hMH0obikpe3ZhciByPVwia2V5cHJlc3NcIj09PW4udHlwZT9cImlucHV0XCI6bi50eXBlOyh2b2lkIDA9PT15fHxmdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiEwO2lmKGUudHlwZSE9PXQudHlwZSlyZXR1cm4hMDt0cnl7aWYoZS50YXJnZXQhPT10LnRhcmdldClyZXR1cm4hMH1jYXRjaChlKXt9cmV0dXJuITF9KEUsbikpJiYoZSh7ZXZlbnQ6bixuYW1lOnIsZ2xvYmFsOnR9KSxFPW4pLGNsZWFyVGltZW91dCh5KSx5PWYuc2V0VGltZW91dCgoZnVuY3Rpb24oKXt5PXZvaWQgMH0pLF8pfX19dmFyIFM9bnVsbCxiPW51bGx9LDY3NTk3OihlLHQsbik9PntuLmQodCx7Q3k6KCk9PnYsSEQ6KCk9PmwsSjg6KCk9PmgsS2o6KCk9Pm0sUE86KCk9PmQsVFg6KCk9PnMsVjk6KCk9PnksVlc6KCk9PmEsVlo6KCk9PmksY086KCk9PmYsZm06KCk9PmMsaTI6KCk9Pmcsa0s6KCk9PnAscHQ6KCk9PnV9KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIGkoZSl7c3dpdGNoKHIuY2FsbChlKSl7Y2FzZVwiW29iamVjdCBFcnJvcl1cIjpjYXNlXCJbb2JqZWN0IEV4Y2VwdGlvbl1cIjpjYXNlXCJbb2JqZWN0IERPTUV4Y2VwdGlvbl1cIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiB5KGUsRXJyb3IpfX1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIHIuY2FsbChlKT09PVwiW29iamVjdCBcIit0K1wiXVwifWZ1bmN0aW9uIGEoZSl7cmV0dXJuIG8oZSxcIkVycm9yRXZlbnRcIil9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gbyhlLFwiRE9NRXJyb3JcIil9ZnVuY3Rpb24gYyhlKXtyZXR1cm4gbyhlLFwiRE9NRXhjZXB0aW9uXCIpfWZ1bmN0aW9uIGwoZSl7cmV0dXJuIG8oZSxcIlN0cmluZ1wiKX1mdW5jdGlvbiB1KGUpe3JldHVybiBudWxsPT09ZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGV9ZnVuY3Rpb24gZChlKXtyZXR1cm4gbyhlLFwiT2JqZWN0XCIpfWZ1bmN0aW9uIGYoZSl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEV2ZW50JiZ5KGUsRXZlbnQpfWZ1bmN0aW9uIHAoZSl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEVsZW1lbnQmJnkoZSxFbGVtZW50KX1mdW5jdGlvbiBtKGUpe3JldHVybiBvKGUsXCJSZWdFeHBcIil9ZnVuY3Rpb24gaChlKXtyZXR1cm4gQm9vbGVhbihlJiZlLnRoZW4mJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUudGhlbil9ZnVuY3Rpb24gdihlKXtyZXR1cm4gZChlKSYmXCJuYXRpdmVFdmVudFwiaW4gZSYmXCJwcmV2ZW50RGVmYXVsdFwiaW4gZSYmXCJzdG9wUHJvcGFnYXRpb25cImluIGV9ZnVuY3Rpb24gZyhlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZSYmZSE9ZX1mdW5jdGlvbiB5KGUsdCl7dHJ5e3JldHVybiBlIGluc3RhbmNlb2YgdH1jYXRjaChlKXtyZXR1cm4hMX19fSwxMjM0MzooZSx0LG4pPT57bi5kKHQse0NmOigpPT5sLFJVOigpPT5jLGtnOigpPT5yfSk7dmFyIHIsaT1uKDUwODMyKSxvPW4oODg3OTUpLGE9big4Mjk5MSkscz0oMCxhLlIpKCksYz1bXCJkZWJ1Z1wiLFwiaW5mb1wiLFwid2FyblwiLFwiZXJyb3JcIixcImxvZ1wiLFwiYXNzZXJ0XCJdO2Z1bmN0aW9uIGwoZSl7dmFyIHQ9KDAsYS5SKSgpO2lmKCEoXCJjb25zb2xlXCJpbiB0KSlyZXR1cm4gZSgpO3ZhciBuPXQuY29uc29sZSxyPXt9O2MuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIGk9bltlXSYmbltlXS5fX3NlbnRyeV9vcmlnaW5hbF9fO2UgaW4gdC5jb25zb2xlJiZpJiYocltlXT1uW2VdLG5bZV09aSl9KSk7dHJ5e3JldHVybiBlKCl9ZmluYWxseXtPYmplY3Qua2V5cyhyKS5mb3JFYWNoKChmdW5jdGlvbihlKXtuW2VdPXJbZV19KSl9fWZ1bmN0aW9uIHUoKXt2YXIgZT0hMSx0PXtlbmFibGU6ZnVuY3Rpb24oKXtlPSEwfSxkaXNhYmxlOmZ1bmN0aW9uKCl7ZT0hMX19O3JldHVybiBvLmg/Yy5mb3JFYWNoKChmdW5jdGlvbihuKXt0W25dPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLHI9MDtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRbcl09YXJndW1lbnRzW3JdO2UmJmwoKGZ1bmN0aW9uKCl7dmFyIGU7KGU9cy5jb25zb2xlKVtuXS5hcHBseShlLCgwLGkuZmwpKFtcIlNlbnRyeSBMb2dnZXIgW1wiK24rXCJdOlwiXSx0KSl9KSl9fSkpOmMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dFtlXT1mdW5jdGlvbigpe319KSksdH1yPW8uaD8oMCxhLlkpKFwibG9nZ2VyXCIsdSk6dSgpfSw2Mjg0NDooZSx0LG4pPT57bi5kKHQse0RNOigpPT5hLERiOigpPT51LEVHOigpPT5kLFlPOigpPT5mLGVuOigpPT5zLGpIOigpPT5sfSk7dmFyIHI9big1MDgzMiksaT1uKDgyOTkxKSxvPW4oMjA1MzUpO2Z1bmN0aW9uIGEoKXt2YXIgZT0oMCxpLlIpKCksdD1lLmNyeXB0b3x8ZS5tc0NyeXB0bztpZih2b2lkIDAhPT10JiZ0LmdldFJhbmRvbVZhbHVlcyl7dmFyIG49bmV3IFVpbnQxNkFycmF5KDgpO3QuZ2V0UmFuZG9tVmFsdWVzKG4pLG5bM109NDA5NSZuWzNdfDE2Mzg0LG5bNF09MTYzODMmbls0XXwzMjc2ODt2YXIgcj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS50b1N0cmluZygxNik7dC5sZW5ndGg8NDspdD1cIjBcIit0O3JldHVybiB0fTtyZXR1cm4gcihuWzBdKStyKG5bMV0pK3IoblsyXSkrcihuWzNdKStyKG5bNF0pK3Iobls1XSkrcihuWzZdKStyKG5bN10pfXJldHVyblwieHh4eHh4eHh4eHh4NHh4eHl4eHh4eHh4eHh4eHh4eHhcIi5yZXBsYWNlKC9beHldL2csKGZ1bmN0aW9uKGUpe3ZhciB0PTE2Kk1hdGgucmFuZG9tKCl8MDtyZXR1cm4oXCJ4XCI9PT1lP3Q6MyZ0fDgpLnRvU3RyaW5nKDE2KX0pKX1mdW5jdGlvbiBzKGUpe2lmKCFlKXJldHVybnt9O3ZhciB0PWUubWF0Y2goL14oKFteOi8/I10rKTopPyhcXC9cXC8oW14vPyNdKikpPyhbXj8jXSopKFxcPyhbXiNdKikpPygjKC4qKSk/JC8pO2lmKCF0KXJldHVybnt9O3ZhciBuPXRbNl18fFwiXCIscj10WzhdfHxcIlwiO3JldHVybntob3N0OnRbNF0scGF0aDp0WzVdLHByb3RvY29sOnRbMl0scmVsYXRpdmU6dFs1XStuK3J9fWZ1bmN0aW9uIGMoZSl7cmV0dXJuIGUuZXhjZXB0aW9uJiZlLmV4Y2VwdGlvbi52YWx1ZXM/ZS5leGNlcHRpb24udmFsdWVzWzBdOnZvaWQgMH1mdW5jdGlvbiBsKGUpe3ZhciB0PWUubWVzc2FnZSxuPWUuZXZlbnRfaWQ7aWYodClyZXR1cm4gdDt2YXIgcj1jKGUpO3JldHVybiByP3IudHlwZSYmci52YWx1ZT9yLnR5cGUrXCI6IFwiK3IudmFsdWU6ci50eXBlfHxyLnZhbHVlfHxufHxcIjx1bmtub3duPlwiOm58fFwiPHVua25vd24+XCJ9ZnVuY3Rpb24gdShlLHQsbil7dmFyIHI9ZS5leGNlcHRpb249ZS5leGNlcHRpb258fHt9LGk9ci52YWx1ZXM9ci52YWx1ZXN8fFtdLG89aVswXT1pWzBdfHx7fTtvLnZhbHVlfHwoby52YWx1ZT10fHxcIlwiKSxvLnR5cGV8fChvLnR5cGU9bnx8XCJFcnJvclwiKX1mdW5jdGlvbiBkKGUsdCl7dmFyIG49YyhlKTtpZihuKXt2YXIgaT1uLm1lY2hhbmlzbTtpZihuLm1lY2hhbmlzbT0oMCxyLnBpKSgoMCxyLnBpKSgoMCxyLnBpKSh7fSx7dHlwZTpcImdlbmVyaWNcIixoYW5kbGVkOiEwfSksaSksdCksdCYmXCJkYXRhXCJpbiB0KXt2YXIgbz0oMCxyLnBpKSgoMCxyLnBpKSh7fSxpJiZpLmRhdGEpLHQuZGF0YSk7bi5tZWNoYW5pc20uZGF0YT1vfX19ZnVuY3Rpb24gZihlKXtpZihlJiZlLl9fc2VudHJ5X2NhcHR1cmVkX18pcmV0dXJuITA7dHJ5eygwLG8ueHApKGUsXCJfX3NlbnRyeV9jYXB0dXJlZF9fXCIsITApfWNhdGNoKGUpe31yZXR1cm4hMX19LDcyMTc2OihlLHQsbik9PntmdW5jdGlvbiByKCl7cmV0dXJuIShcInVuZGVmaW5lZFwiIT10eXBlb2YgX19TRU5UUllfQlJPV1NFUl9CVU5ETEVfXyYmX19TRU5UUllfQlJPV1NFUl9CVU5ETEVfXykmJlwiW29iamVjdCBwcm9jZXNzXVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBwcm9jZXNzP3Byb2Nlc3M6MCl9ZnVuY3Rpb24gaShlLHQpe3JldHVybiBlLnJlcXVpcmUodCl9ZnVuY3Rpb24gbyh0KXt2YXIgbjt0cnl7bj1pKGUsdCl9Y2F0Y2goZSl7fXRyeXt2YXIgcj1pKGUsXCJwcm9jZXNzXCIpLmN3ZDtuPWkoZSxyKCkrXCIvbm9kZV9tb2R1bGVzL1wiK3QpfWNhdGNoKGUpe31yZXR1cm4gbn1uLmQodCx7bCQ6KCk9PmksS1Y6KCk9PnIsJHk6KCk9Pm99KSxlPW4uaG1kKGUpfSw4ODAwNzooZSx0LG4pPT57bi5kKHQse0Z2OigpPT5zLFF5OigpPT5jfSk7dmFyIHI9big1MDgzMiksaT1uKDY3NTk3KSxvPW4oMjA1MzUpLGE9bigzMDM2MCk7ZnVuY3Rpb24gcyhlLHQsbil7dm9pZCAwPT09dCYmKHQ9MS8wKSx2b2lkIDA9PT1uJiYobj0xLzApO3RyeXtyZXR1cm4gbChcIlwiLGUsdCxuKX1jYXRjaChlKXtyZXR1cm57RVJST1I6XCIqKm5vbi1zZXJpYWxpemFibGUqKiAoXCIrZStcIilcIn19fWZ1bmN0aW9uIGMoZSx0LG4pe3ZvaWQgMD09PXQmJih0PTMpLHZvaWQgMD09PW4mJihuPTEwMjQwMCk7dmFyIHIsaT1zKGUsdCk7cmV0dXJuIHI9aSxmdW5jdGlvbihlKXtyZXR1cm5+LWVuY29kZVVSSShlKS5zcGxpdCgvJS4ufC4vKS5sZW5ndGh9KEpTT04uc3RyaW5naWZ5KHIpKT5uP2MoZSx0LTEsbik6aX1mdW5jdGlvbiBsKGUsdCxzLGMsdSl7dmFyIGQsZjt2b2lkIDA9PT1zJiYocz0xLzApLHZvaWQgMD09PWMmJihjPTEvMCksdm9pZCAwPT09dSYmKGQ9XCJmdW5jdGlvblwiPT10eXBlb2YgV2Vha1NldCxmPWQ/bmV3IFdlYWtTZXQ6W10sdT1bZnVuY3Rpb24oZSl7aWYoZClyZXR1cm4hIWYuaGFzKGUpfHwoZi5hZGQoZSksITEpO2Zvcih2YXIgdD0wO3Q8Zi5sZW5ndGg7dCsrKWlmKGZbdF09PT1lKXJldHVybiEwO3JldHVybiBmLnB1c2goZSksITF9LGZ1bmN0aW9uKGUpe2lmKGQpZi5kZWxldGUoZSk7ZWxzZSBmb3IodmFyIHQ9MDt0PGYubGVuZ3RoO3QrKylpZihmW3RdPT09ZSl7Zi5zcGxpY2UodCwxKTticmVha319XSk7dmFyIHA9KDAsci5DUikodSwyKSxtPXBbMF0saD1wWzFdLHY9dDtpZih2JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB2LnRvSlNPTil0cnl7cmV0dXJuIHYudG9KU09OKCl9Y2F0Y2goZSl7fWlmKG51bGw9PT10fHxbXCJudW1iZXJcIixcImJvb2xlYW5cIixcInN0cmluZ1wiXS5pbmNsdWRlcyh0eXBlb2YgdCkmJiEoMCxpLmkyKSh0KSlyZXR1cm4gdDt2YXIgZz1mdW5jdGlvbihlLHQpe3RyeXtyZXR1cm5cImRvbWFpblwiPT09ZSYmdCYmXCJvYmplY3RcIj09dHlwZW9mIHQmJnQuX2V2ZW50cz9cIltEb21haW5dXCI6XCJkb21haW5FbWl0dGVyXCI9PT1lP1wiW0RvbWFpbkVtaXR0ZXJdXCI6dm9pZCAwIT09bi5nJiZ0PT09bi5nP1wiW0dsb2JhbF1cIjpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ0PT09d2luZG93P1wiW1dpbmRvd11cIjpcInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQmJnQ9PT1kb2N1bWVudD9cIltEb2N1bWVudF1cIjooMCxpLkN5KSh0KT9cIltTeW50aGV0aWNFdmVudF1cIjpcIm51bWJlclwiPT10eXBlb2YgdCYmdCE9dD9cIltOYU5dXCI6dm9pZCAwPT09dD9cIlt1bmRlZmluZWRdXCI6XCJmdW5jdGlvblwiPT10eXBlb2YgdD9cIltGdW5jdGlvbjogXCIrKDAsYS4kUCkodCkrXCJdXCI6XCJzeW1ib2xcIj09dHlwZW9mIHQ/XCJbXCIrU3RyaW5nKHQpK1wiXVwiOlwiYmlnaW50XCI9PXR5cGVvZiB0P1wiW0JpZ0ludDogXCIrU3RyaW5nKHQpK1wiXVwiOlwiW29iamVjdCBcIitPYmplY3QuZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IubmFtZStcIl1cIn1jYXRjaChlKXtyZXR1cm5cIioqbm9uLXNlcmlhbGl6YWJsZSoqIChcIitlK1wiKVwifX0oZSx0KTtpZighZy5zdGFydHNXaXRoKFwiW29iamVjdCBcIikpcmV0dXJuIGc7aWYoMD09PXMpcmV0dXJuIGcucmVwbGFjZShcIm9iamVjdCBcIixcIlwiKTtpZihtKHQpKXJldHVyblwiW0NpcmN1bGFyIH5dXCI7dmFyIHk9QXJyYXkuaXNBcnJheSh0KT9bXTp7fSxFPTAsXz0oMCxpLlZaKSh0KXx8KDAsaS5jTykodCk/KDAsby5TaCkodCk6dDtmb3IodmFyIEkgaW4gXylpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoXyxJKSl7aWYoRT49Yyl7eVtJXT1cIltNYXhQcm9wZXJ0aWVzIH5dXCI7YnJlYWt9dmFyIFM9X1tJXTt5W0ldPWwoSSxTLHMtMSxjLHUpLEUrPTF9cmV0dXJuIGgodCkseX19LDIwNTM1OihlLHQsbik9PntuLmQodCx7JFE6KCk9PmwsSEs6KCk9PnUsSnI6KCk9PnYsU2g6KCk9PmYsX2o6KCk9PmQsaGw6KCk9PnMseHA6KCk9PmMsemY6KCk9Pmh9KTt2YXIgcj1uKDUwODMyKSxpPW4oNTg0NjQpLG89big2NzU5NyksYT1uKDU3MzIxKTtmdW5jdGlvbiBzKGUsdCxuKXtpZih0IGluIGUpe3ZhciByPWVbdF0saT1uKHIpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGkpdHJ5e2woaSxyKX1jYXRjaChlKXt9ZVt0XT1pfX1mdW5jdGlvbiBjKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfWZ1bmN0aW9uIGwoZSx0KXt2YXIgbj10LnByb3RvdHlwZXx8e307ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9bixjKGUsXCJfX3NlbnRyeV9vcmlnaW5hbF9fXCIsdCl9ZnVuY3Rpb24gdShlKXtyZXR1cm4gZS5fX3NlbnRyeV9vcmlnaW5hbF9ffWZ1bmN0aW9uIGQoZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh0KStcIj1cIitlbmNvZGVVUklDb21wb25lbnQoZVt0XSl9KSkuam9pbihcIiZcIil9ZnVuY3Rpb24gZihlKXt2YXIgdD1lO2lmKCgwLG8uVlopKGUpKXQ9KDAsci5waSkoe21lc3NhZ2U6ZS5tZXNzYWdlLG5hbWU6ZS5uYW1lLHN0YWNrOmUuc3RhY2t9LG0oZSkpO2Vsc2UgaWYoKDAsby5jTykoZSkpe3ZhciBuPWU7dD0oMCxyLnBpKSh7dHlwZTpuLnR5cGUsdGFyZ2V0OnAobi50YXJnZXQpLGN1cnJlbnRUYXJnZXQ6cChuLmN1cnJlbnRUYXJnZXQpfSxtKG4pKSxcInVuZGVmaW5lZFwiIT10eXBlb2YgQ3VzdG9tRXZlbnQmJigwLG8uVjkpKGUsQ3VzdG9tRXZlbnQpJiYodC5kZXRhaWw9bi5kZXRhaWwpfXJldHVybiB0fWZ1bmN0aW9uIHAoZSl7dHJ5e3JldHVybigwLG8ua0spKGUpPygwLGkuUikoZSk6T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfWNhdGNoKGUpe3JldHVyblwiPHVua25vd24+XCJ9fWZ1bmN0aW9uIG0oZSl7dmFyIHQ9e307Zm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0fWZ1bmN0aW9uIGgoZSx0KXt2b2lkIDA9PT10JiYodD00MCk7dmFyIG49T2JqZWN0LmtleXMoZihlKSk7aWYobi5zb3J0KCksIW4ubGVuZ3RoKXJldHVyblwiW29iamVjdCBoYXMgbm8ga2V5c11cIjtpZihuWzBdLmxlbmd0aD49dClyZXR1cm4oMCxhLiRHKShuWzBdLHQpO2Zvcih2YXIgcj1uLmxlbmd0aDtyPjA7ci0tKXt2YXIgaT1uLnNsaWNlKDAscikuam9pbihcIiwgXCIpO2lmKCEoaS5sZW5ndGg+dCkpcmV0dXJuIHI9PT1uLmxlbmd0aD9pOigwLGEuJEcpKGksdCl9cmV0dXJuXCJcIn1mdW5jdGlvbiB2KGUpe3ZhciB0LG47aWYoKDAsby5QTykoZSkpe3ZhciBpPXt9O3RyeXtmb3IodmFyIGE9KDAsci5YQSkoT2JqZWN0LmtleXMoZSkpLHM9YS5uZXh0KCk7IXMuZG9uZTtzPWEubmV4dCgpKXt2YXIgYz1zLnZhbHVlO3ZvaWQgMCE9PWVbY10mJihpW2NdPXYoZVtjXSkpfX1jYXRjaChlKXt0PXtlcnJvcjplfX1maW5hbGx5e3RyeXtzJiYhcy5kb25lJiYobj1hLnJldHVybikmJm4uY2FsbChhKX1maW5hbGx5e2lmKHQpdGhyb3cgdC5lcnJvcn19cmV0dXJuIGl9cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZS5tYXAodik6ZX19LDgxMjI3OihlLHQsbik9PntuLmQodCx7eDooKT0+b30pO3ZhciByPW4oODgyNjYpLGk9big5Njg5Myk7ZnVuY3Rpb24gbyhlKXt2YXIgdD1bXTtmdW5jdGlvbiBuKGUpe3JldHVybiB0LnNwbGljZSh0LmluZGV4T2YoZSksMSlbMF19cmV0dXJueyQ6dCxhZGQ6ZnVuY3Rpb24obyl7aWYoISh2b2lkIDA9PT1lfHx0Lmxlbmd0aDxlKSlyZXR1cm4oMCxpLiQyKShuZXcgci5iKFwiTm90IGFkZGluZyBQcm9taXNlIGR1ZSB0byBidWZmZXIgbGltaXQgcmVhY2hlZC5cIikpO3ZhciBhPW8oKTtyZXR1cm4tMT09PXQuaW5kZXhPZihhKSYmdC5wdXNoKGEpLGEudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gbihhKX0pKS50aGVuKG51bGwsKGZ1bmN0aW9uKCl7cmV0dXJuIG4oYSkudGhlbihudWxsLChmdW5jdGlvbigpe30pKX0pKSxhfSxkcmFpbjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGkuY1coKGZ1bmN0aW9uKG4scil7dmFyIG89dC5sZW5ndGg7aWYoIW8pcmV0dXJuIG4oITApO3ZhciBhPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZSYmZT4wJiZuKCExKX0pLGUpO3QuZm9yRWFjaCgoZnVuY3Rpb24oZSl7KDAsaS5XRCkoZSkudGhlbigoZnVuY3Rpb24oKXstLW98fChjbGVhclRpbWVvdXQoYSksbighMCkpfSkscil9KSl9KSl9fX19LDgwMjI4OihlLHQsbik9PntuLmQodCx7UTooKT0+YSxXRzooKT0+cyxuczooKT0+b30pO3ZhciByPW4oNTA4MzIpLGk9NmU0O2Z1bmN0aW9uIG8oZSx0KXtyZXR1cm4gZVt0XXx8ZS5hbGx8fDB9ZnVuY3Rpb24gYShlLHQsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPURhdGUubm93KCkpLG8oZSx0KT5ufWZ1bmN0aW9uIHMoZSx0LG4pe3ZhciBvLGEscyxjO3ZvaWQgMD09PW4mJihuPURhdGUubm93KCkpO3ZhciBsPSgwLHIucGkpKHt9LGUpLHU9dFtcIngtc2VudHJ5LXJhdGUtbGltaXRzXCJdLGQ9dFtcInJldHJ5LWFmdGVyXCJdO2lmKHUpdHJ5e2Zvcih2YXIgZj0oMCxyLlhBKSh1LnRyaW0oKS5zcGxpdChcIixcIikpLHA9Zi5uZXh0KCk7IXAuZG9uZTtwPWYubmV4dCgpKXt2YXIgbT1wLnZhbHVlLnNwbGl0KFwiOlwiLDIpLGg9cGFyc2VJbnQobVswXSwxMCksdj0xZTMqKGlzTmFOKGgpPzYwOmgpO2lmKG1bMV0pdHJ5e2Zvcih2YXIgZz0ocz12b2lkIDAsKDAsci5YQSkobVsxXS5zcGxpdChcIjtcIikpKSx5PWcubmV4dCgpOyF5LmRvbmU7eT1nLm5leHQoKSlsW3kudmFsdWVdPW4rdn1jYXRjaChlKXtzPXtlcnJvcjplfX1maW5hbGx5e3RyeXt5JiYheS5kb25lJiYoYz1nLnJldHVybikmJmMuY2FsbChnKX1maW5hbGx5e2lmKHMpdGhyb3cgcy5lcnJvcn19ZWxzZSBsLmFsbD1uK3Z9fWNhdGNoKGUpe289e2Vycm9yOmV9fWZpbmFsbHl7dHJ5e3AmJiFwLmRvbmUmJihhPWYucmV0dXJuKSYmYS5jYWxsKGYpfWZpbmFsbHl7aWYobyl0aHJvdyBvLmVycm9yfX1lbHNlIGQmJihsLmFsbD1uK2Z1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9RGF0ZS5ub3coKSk7dmFyIG49cGFyc2VJbnQoXCJcIitlLDEwKTtpZighaXNOYU4obikpcmV0dXJuIDFlMypuO3ZhciByPURhdGUucGFyc2UoXCJcIitlKTtyZXR1cm4gaXNOYU4ocik/aTpyLXR9KGQsbikpO3JldHVybiBsfX0sMzAzNjA6KGUsdCxuKT0+e24uZCh0LHskUDooKT0+cyxwRTooKT0+b30pO3ZhciByPW4oNTA4MzIpLGk9NTA7ZnVuY3Rpb24gbygpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTt2YXIgbj1lLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbMF0tdFswXX0pKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlWzFdfSkpO3JldHVybiBmdW5jdGlvbihlLHQpe3ZhciBvLGEscyxjO3ZvaWQgMD09PXQmJih0PTApO3ZhciBsPVtdO3RyeXtmb3IodmFyIHU9KDAsci5YQSkoZS5zcGxpdChcIlxcblwiKS5zbGljZSh0KSksZD11Lm5leHQoKTshZC5kb25lO2Q9dS5uZXh0KCkpe3ZhciBmPWQudmFsdWU7dHJ5e2Zvcih2YXIgcD0ocz12b2lkIDAsKDAsci5YQSkobikpLG09cC5uZXh0KCk7IW0uZG9uZTttPXAubmV4dCgpKXt2YXIgaD0oMCxtLnZhbHVlKShmKTtpZihoKXtsLnB1c2goaCk7YnJlYWt9fX1jYXRjaChlKXtzPXtlcnJvcjplfX1maW5hbGx5e3RyeXttJiYhbS5kb25lJiYoYz1wLnJldHVybikmJmMuY2FsbChwKX1maW5hbGx5e2lmKHMpdGhyb3cgcy5lcnJvcn19fX1jYXRjaChlKXtvPXtlcnJvcjplfX1maW5hbGx5e3RyeXtkJiYhZC5kb25lJiYoYT11LnJldHVybikmJmEuY2FsbCh1KX1maW5hbGx5e2lmKG8pdGhyb3cgby5lcnJvcn19cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKCFlLmxlbmd0aClyZXR1cm5bXTt2YXIgdD1lLG49dFswXS5mdW5jdGlvbnx8XCJcIixvPXRbdC5sZW5ndGgtMV0uZnVuY3Rpb258fFwiXCI7cmV0dXJuLTE9PT1uLmluZGV4T2YoXCJjYXB0dXJlTWVzc2FnZVwiKSYmLTE9PT1uLmluZGV4T2YoXCJjYXB0dXJlRXhjZXB0aW9uXCIpfHwodD10LnNsaWNlKDEpKSwtMSE9PW8uaW5kZXhPZihcInNlbnRyeVdyYXBwZWRcIikmJih0PXQuc2xpY2UoMCwtMSkpLHQuc2xpY2UoMCxpKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybigwLHIucGkpKCgwLHIucGkpKHt9LGUpLHtmaWxlbmFtZTplLmZpbGVuYW1lfHx0WzBdLmZpbGVuYW1lLGZ1bmN0aW9uOmUuZnVuY3Rpb258fFwiP1wifSl9KSkucmV2ZXJzZSgpfShsKX19dmFyIGE9XCI8YW5vbnltb3VzPlwiO2Z1bmN0aW9uIHMoZSl7dHJ5e3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlLm5hbWV8fGF9Y2F0Y2goZSl7cmV0dXJuIGF9fX0sMTM2OihlLHQsbik9PntmdW5jdGlvbiByKGUpe3JldHVybiBlPj0yMDAmJmU8MzAwP1wic3VjY2Vzc1wiOjQyOT09PWU/XCJyYXRlX2xpbWl0XCI6ZT49NDAwJiZlPDUwMD9cImludmFsaWRcIjplPj01MDA/XCJmYWlsZWRcIjpcInVua25vd25cIn1uLmQodCx7RjooKT0+cn0pfSw1NzMyMTooZSx0LG4pPT57bi5kKHQseyRHOigpPT5pLG5LOigpPT5vLHpDOigpPT5hfSk7dmFyIHI9big2NzU5Nyk7ZnVuY3Rpb24gaShlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0wKSxcInN0cmluZ1wiIT10eXBlb2YgZXx8MD09PXR8fGUubGVuZ3RoPD10P2U6ZS5zdWJzdHIoMCx0KStcIi4uLlwifWZ1bmN0aW9uIG8oZSx0KXtpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm5cIlwiO2Zvcih2YXIgbj1bXSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBpPWVbcl07dHJ5e24ucHVzaChTdHJpbmcoaSkpfWNhdGNoKGUpe24ucHVzaChcIlt2YWx1ZSBjYW5ub3QgYmUgc2VyaWFsaXplZF1cIil9fXJldHVybiBuLmpvaW4odCl9ZnVuY3Rpb24gYShlLHQpe3JldHVybiEhKDAsci5IRCkoZSkmJigoMCxyLktqKSh0KT90LnRlc3QoZSk6XCJzdHJpbmdcIj09dHlwZW9mIHQmJi0xIT09ZS5pbmRleE9mKHQpKX19LDg4MjM6KGUsdCxuKT0+e24uZCh0LHtBazooKT0+YSxCZjooKT0+dSxEdTooKT0+cyxodjooKT0+bCx0JDooKT0+Y30pO3ZhciByPW4oODg3OTUpLGk9big4Mjk5MSksbz1uKDEyMzQzKTtmdW5jdGlvbiBhKCl7aWYoIShcImZldGNoXCJpbigwLGkuUikoKSkpcmV0dXJuITE7dHJ5e3JldHVybiBuZXcgSGVhZGVycyxuZXcgUmVxdWVzdChcIlwiKSxuZXcgUmVzcG9uc2UsITB9Y2F0Y2goZSl7cmV0dXJuITF9fWZ1bmN0aW9uIHMoZSl7cmV0dXJuIGUmJi9eZnVuY3Rpb24gZmV0Y2hcXChcXClcXHMrXFx7XFxzK1xcW25hdGl2ZSBjb2RlXFxdXFxzK1xcfSQvLnRlc3QoZS50b1N0cmluZygpKX1mdW5jdGlvbiBjKCl7aWYoIWEoKSlyZXR1cm4hMTt2YXIgZT0oMCxpLlIpKCk7aWYocyhlLmZldGNoKSlyZXR1cm4hMDt2YXIgdD0hMSxuPWUuZG9jdW1lbnQ7aWYobiYmXCJmdW5jdGlvblwiPT10eXBlb2Ygbi5jcmVhdGVFbGVtZW50KXRyeXt2YXIgYz1uLmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7Yy5oaWRkZW49ITAsbi5oZWFkLmFwcGVuZENoaWxkKGMpLGMuY29udGVudFdpbmRvdyYmYy5jb250ZW50V2luZG93LmZldGNoJiYodD1zKGMuY29udGVudFdpbmRvdy5mZXRjaCkpLG4uaGVhZC5yZW1vdmVDaGlsZChjKX1jYXRjaChlKXtyLmgmJm8ua2cud2FybihcIkNvdWxkIG5vdCBjcmVhdGUgc2FuZGJveCBpZnJhbWUgZm9yIHB1cmUgZmV0Y2ggY2hlY2ssIGJhaWxpbmcgdG8gd2luZG93LmZldGNoOiBcIixlKX1yZXR1cm4gdH1mdW5jdGlvbiBsKCl7aWYoIWEoKSlyZXR1cm4hMTt0cnl7cmV0dXJuIG5ldyBSZXF1ZXN0KFwiX1wiLHtyZWZlcnJlclBvbGljeTpcIm9yaWdpblwifSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fWZ1bmN0aW9uIHUoKXt2YXIgZT0oMCxpLlIpKCksdD1lLmNocm9tZSxuPXQmJnQuYXBwJiZ0LmFwcC5ydW50aW1lLHI9XCJoaXN0b3J5XCJpbiBlJiYhIWUuaGlzdG9yeS5wdXNoU3RhdGUmJiEhZS5oaXN0b3J5LnJlcGxhY2VTdGF0ZTtyZXR1cm4hbiYmcn19LDk2ODkzOihlLHQsbik9PntuLmQodCx7JDI6KCk9Pm8sV0Q6KCk9PmksY1c6KCk9PmF9KTt2YXIgcj1uKDY3NTk3KTtmdW5jdGlvbiBpKGUpe3JldHVybiBuZXcgYSgoZnVuY3Rpb24odCl7dChlKX0pKX1mdW5jdGlvbiBvKGUpe3JldHVybiBuZXcgYSgoZnVuY3Rpb24odCxuKXtuKGUpfSkpfXZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgdD10aGlzO3RoaXMuX3N0YXRlPTAsdGhpcy5faGFuZGxlcnM9W10sdGhpcy5fcmVzb2x2ZT1mdW5jdGlvbihlKXt0Ll9zZXRSZXN1bHQoMSxlKX0sdGhpcy5fcmVqZWN0PWZ1bmN0aW9uKGUpe3QuX3NldFJlc3VsdCgyLGUpfSx0aGlzLl9zZXRSZXN1bHQ9ZnVuY3Rpb24oZSxuKXswPT09dC5fc3RhdGUmJigoMCxyLko4KShuKT9uLnRoZW4odC5fcmVzb2x2ZSx0Ll9yZWplY3QpOih0Ll9zdGF0ZT1lLHQuX3ZhbHVlPW4sdC5fZXhlY3V0ZUhhbmRsZXJzKCkpKX0sdGhpcy5fZXhlY3V0ZUhhbmRsZXJzPWZ1bmN0aW9uKCl7aWYoMCE9PXQuX3N0YXRlKXt2YXIgZT10Ll9oYW5kbGVycy5zbGljZSgpO3QuX2hhbmRsZXJzPVtdLGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZVswXXx8KDE9PT10Ll9zdGF0ZSYmZVsxXSh0Ll92YWx1ZSksMj09PXQuX3N0YXRlJiZlWzJdKHQuX3ZhbHVlKSxlWzBdPSEwKX0pKX19O3RyeXtlKHRoaXMuX3Jlc29sdmUsdGhpcy5fcmVqZWN0KX1jYXRjaChlKXt0aGlzLl9yZWplY3QoZSl9fXJldHVybiBlLnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKHQsbil7dmFyIHI9dGhpcztyZXR1cm4gbmV3IGUoKGZ1bmN0aW9uKGUsaSl7ci5faGFuZGxlcnMucHVzaChbITEsZnVuY3Rpb24obil7aWYodCl0cnl7ZSh0KG4pKX1jYXRjaChlKXtpKGUpfWVsc2UgZShuKX0sZnVuY3Rpb24odCl7aWYobil0cnl7ZShuKHQpKX1jYXRjaChlKXtpKGUpfWVsc2UgaSh0KX1dKSxyLl9leGVjdXRlSGFuZGxlcnMoKX0pKX0sZS5wcm90b3R5cGUuY2F0Y2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSxlKX0sZS5wcm90b3R5cGUuZmluYWxseT1mdW5jdGlvbih0KXt2YXIgbj10aGlzO3JldHVybiBuZXcgZSgoZnVuY3Rpb24oZSxyKXt2YXIgaSxvO3JldHVybiBuLnRoZW4oKGZ1bmN0aW9uKGUpe289ITEsaT1lLHQmJnQoKX0pLChmdW5jdGlvbihlKXtvPSEwLGk9ZSx0JiZ0KCl9KSkudGhlbigoZnVuY3Rpb24oKXtvP3IoaSk6ZShpKX0pKX0pKX0sZX0oKX0sMjExNzA6KGUsdCxuKT0+e24uZCh0LHtaMTooKT0+ZCxfSTooKT0+dSxwaDooKT0+bCx5VzooKT0+Y30pO3ZhciByPW4oODI5OTEpLGk9big3MjE3Nik7ZT1uLmhtZChlKTt2YXIgbz17bm93U2Vjb25kczpmdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdygpLzFlM319LGE9KDAsaS5LVikoKT9mdW5jdGlvbigpe3RyeXtyZXR1cm4oMCxpLmwkKShlLFwicGVyZl9ob29rc1wiKS5wZXJmb3JtYW5jZX1jYXRjaChlKXtyZXR1cm59fSgpOmZ1bmN0aW9uKCl7dmFyIGU9KDAsci5SKSgpLnBlcmZvcm1hbmNlO2lmKGUmJmUubm93KXJldHVybntub3c6ZnVuY3Rpb24oKXtyZXR1cm4gZS5ub3coKX0sdGltZU9yaWdpbjpEYXRlLm5vdygpLWUubm93KCl9fSgpLHM9dm9pZCAwPT09YT9vOntub3dTZWNvbmRzOmZ1bmN0aW9uKCl7cmV0dXJuKGEudGltZU9yaWdpbithLm5vdygpKS8xZTN9fSxjPW8ubm93U2Vjb25kcy5iaW5kKG8pLGw9cy5ub3dTZWNvbmRzLmJpbmQocyksdT1sLGQ9ZnVuY3Rpb24oKXt2YXIgZT0oMCxyLlIpKCkucGVyZm9ybWFuY2U7aWYoZSYmZS5ub3cpe3ZhciB0PTM2ZTUsbj1lLm5vdygpLGk9RGF0ZS5ub3coKSxvPWUudGltZU9yaWdpbj9NYXRoLmFicyhlLnRpbWVPcmlnaW4rbi1pKTp0LGE9bzx0LHM9ZS50aW1pbmcmJmUudGltaW5nLm5hdmlnYXRpb25TdGFydCxjPVwibnVtYmVyXCI9PXR5cGVvZiBzP01hdGguYWJzKHMrbi1pKTp0O3JldHVybiBhfHxjPHQ/bzw9Yz9lLnRpbWVPcmlnaW46czppfX0oKX0sNTA4MzI6KGUsdCxuKT0+e24uZCh0LHtDUjooKT0+cyxYQTooKT0+YSxaVDooKT0+aSxmbDooKT0+YyxwaTooKT0+b30pO3ZhciByPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHI9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09dFtuXSl9LHIoZSx0KX07ZnVuY3Rpb24gaShlLHQpe2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPWV9cihlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KG4ucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBuKX12YXIgbz1mdW5jdGlvbigpe3JldHVybiBvPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPTEscj1hcmd1bWVudHMubGVuZ3RoO248cjtuKyspZm9yKHZhciBpIGluIHQ9YXJndW1lbnRzW25dKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGkpJiYoZVtpXT10W2ldKTtyZXR1cm4gZX0sby5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Z1bmN0aW9uIGEoZSl7dmFyIHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3Isbj10JiZlW3RdLHI9MDtpZihuKXJldHVybiBuLmNhbGwoZSk7aWYoZSYmXCJudW1iZXJcIj09dHlwZW9mIGUubGVuZ3RoKXJldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIGUmJnI+PWUubGVuZ3RoJiYoZT12b2lkIDApLHt2YWx1ZTplJiZlW3IrK10sZG9uZTohZX19fTt0aHJvdyBuZXcgVHlwZUVycm9yKHQ/XCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiOlwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKX1mdW5jdGlvbiBzKGUsdCl7dmFyIG49XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl07aWYoIW4pcmV0dXJuIGU7dmFyIHIsaSxvPW4uY2FsbChlKSxhPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT10fHx0LS0gPjApJiYhKHI9by5uZXh0KCkpLmRvbmU7KWEucHVzaChyLnZhbHVlKX1jYXRjaChlKXtpPXtlcnJvcjplfX1maW5hbGx5e3RyeXtyJiYhci5kb25lJiYobj1vLnJldHVybikmJm4uY2FsbChvKX1maW5hbGx5e2lmKGkpdGhyb3cgaS5lcnJvcn19cmV0dXJuIGF9ZnVuY3Rpb24gYygpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllPWUuY29uY2F0KHMoYXJndW1lbnRzW3RdKSk7cmV0dXJuIGV9fSw5NzU4MDpmdW5jdGlvbihlKXt2YXIgdCxuO2UuZXhwb3J0cz0odD17NDE4OmZ1bmN0aW9uKGUsdCl7IWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpZVtuXT10W25dfSh0LGZ1bmN0aW9uKGUpe3ZhciB0PXt9O2Z1bmN0aW9uIG4ocil7aWYodFtyXSlyZXR1cm4gdFtyXS5leHBvcnRzO3ZhciBpPXRbcl09e2k6cixsOiExLGV4cG9ydHM6e319O3JldHVybiBlW3JdLmNhbGwoaS5leHBvcnRzLGksaS5leHBvcnRzLG4pLGkubD0hMCxpLmV4cG9ydHN9cmV0dXJuIG4ubT1lLG4uYz10LG4uaT1mdW5jdGlvbihlKXtyZXR1cm4gZX0sbi5kPWZ1bmN0aW9uKGUsdCxyKXtuLm8oZSx0KXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0OnJ9KX0sbi5uPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJmUuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBlLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGV9O3JldHVybiBuLmQodCxcImFcIix0KSx0fSxuLm89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9LG4ucD1cIlwiLG4obi5zPTEpfShbZnVuY3Rpb24oZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciByPW4oMyksaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt2b2lkIDA9PT1lJiYoZT17fSksdm9pZCAwPT09dCYmKHQ9e3NwbGl0VmFsdWVzOiExfSk7dmFyIG4saT10aGlzO3RoaXMuaGVhZGVyc01hcD17fSxlJiYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEhlYWRlcnMmJmUgaW5zdGFuY2VvZiBIZWFkZXJzP3IuZ2V0SGVhZGVyS2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihuKXtyLmdldEhlYWRlclZhbHVlcyhlLG4pLmZvckVhY2goKGZ1bmN0aW9uKGUpe3Quc3BsaXRWYWx1ZXM/aS5hcHBlbmQobixyLnNwbGl0SGVhZGVyVmFsdWUoZSkpOmkuYXBwZW5kKG4sZSl9KSl9KSk6XCJvYmplY3RcIj09dHlwZW9mKG49ZSkmJlwib2JqZWN0XCI9PXR5cGVvZiBuLmhlYWRlcnNNYXAmJlwiZnVuY3Rpb25cIj09dHlwZW9mIG4uZm9yRWFjaD9lLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7aS5hcHBlbmQoZSx0KX0pKTpcInVuZGVmaW5lZFwiIT10eXBlb2YgTWFwJiZlIGluc3RhbmNlb2YgTWFwP2UuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtpLmFwcGVuZCh0LGUpfSkpOlwic3RyaW5nXCI9PXR5cGVvZiBlP3RoaXMuYXBwZW5kRnJvbVN0cmluZyhlKTpcIm9iamVjdFwiPT10eXBlb2YgZSYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49ZVt0XTtBcnJheS5pc0FycmF5KG4pP24uZm9yRWFjaCgoZnVuY3Rpb24oZSl7aS5hcHBlbmQodCxlKX0pKTppLmFwcGVuZCh0LG4pfSkpKX1yZXR1cm4gZS5wcm90b3R5cGUuYXBwZW5kRnJvbVN0cmluZz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5zcGxpdChcIlxcclxcblwiKSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl0saT1yLmluZGV4T2YoXCI6XCIpO2lmKGk+MCl7dmFyIG89ci5zdWJzdHJpbmcoMCxpKS50cmltKCksYT1yLnN1YnN0cmluZyhpKzEpLnRyaW0oKTt0aGlzLmFwcGVuZChvLGEpfX19LGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlLHQpe3ZhciBuPXIubm9ybWFsaXplTmFtZShlKTtpZih2b2lkIDA9PT10KWRlbGV0ZSB0aGlzLmhlYWRlcnNNYXBbbl07ZWxzZXt2YXIgaT10aGlzLmhlYWRlcnNNYXBbbl07aWYoaSl7dmFyIG89aS5pbmRleE9mKHQpO28+PTAmJmkuc3BsaWNlKG8sMSksMD09PWkubGVuZ3RoJiZkZWxldGUgdGhpcy5oZWFkZXJzTWFwW25dfX19LGUucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMsaT1yLm5vcm1hbGl6ZU5hbWUoZSk7QXJyYXkuaXNBcnJheSh0aGlzLmhlYWRlcnNNYXBbaV0pfHwodGhpcy5oZWFkZXJzTWFwW2ldPVtdKSxBcnJheS5pc0FycmF5KHQpP3QuZm9yRWFjaCgoZnVuY3Rpb24oZSl7bi5oZWFkZXJzTWFwW2ldLnB1c2goci5ub3JtYWxpemVWYWx1ZShlKSl9KSk6dGhpcy5oZWFkZXJzTWFwW2ldLnB1c2goci5ub3JtYWxpemVWYWx1ZSh0KSl9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3ZhciBuPXIubm9ybWFsaXplTmFtZShlKTtpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgaT1bXTt0LmZvckVhY2goKGZ1bmN0aW9uKGUpe2kucHVzaChyLm5vcm1hbGl6ZVZhbHVlKGUpKX0pKSx0aGlzLmhlYWRlcnNNYXBbbl09aX1lbHNlIHRoaXMuaGVhZGVyc01hcFtuXT1bci5ub3JtYWxpemVWYWx1ZSh0KV19LGUucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuaGVhZGVyc01hcFtyLm5vcm1hbGl6ZU5hbWUoZSldO2lmKCFBcnJheS5pc0FycmF5KG4pKXJldHVybiExO2lmKHZvaWQgMCE9PXQpe3ZhciBpPXIubm9ybWFsaXplVmFsdWUodCk7cmV0dXJuIG4uaW5kZXhPZihpKT49MH1yZXR1cm4hMH0sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaGVhZGVyc01hcFtyLm5vcm1hbGl6ZU5hbWUoZSldO3JldHVybiB2b2lkIDAhPT10P3QuY29uY2F0KCk6W119LGUucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzLmhlYWRlcnNNYXApLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Uobix0LmhlYWRlcnNNYXBbbl0pfSksdGhpcyl9LGUucHJvdG90eXBlLnRvSGVhZGVycz1mdW5jdGlvbigpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBIZWFkZXJzKXt2YXIgZT1uZXcgSGVhZGVycztyZXR1cm4gdGhpcy5mb3JFYWNoKChmdW5jdGlvbih0LG4pe24uZm9yRWFjaCgoZnVuY3Rpb24obil7ZS5hcHBlbmQodCxuKX0pKX0pKSxlfXRocm93IG5ldyBFcnJvcihcIkhlYWRlcnMgY2xhc3MgaXMgbm90IGRlZmluZWRcIil9LGV9KCk7dC5Ccm93c2VySGVhZGVycz1pfSxmdW5jdGlvbihlLHQsbil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIHI9bigwKTt0LkJyb3dzZXJIZWFkZXJzPXIuQnJvd3NlckhlYWRlcnN9LGZ1bmN0aW9uKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lml0ZXJhdGVIZWFkZXJzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWVbU3ltYm9sLml0ZXJhdG9yXSgpLHI9bi5uZXh0KCk7IXIuZG9uZTspdChyLnZhbHVlWzBdKSxyPW4ubmV4dCgpfSx0Lml0ZXJhdGVIZWFkZXJzS2V5cz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1lLmtleXMoKSxyPW4ubmV4dCgpOyFyLmRvbmU7KXQoci52YWx1ZSkscj1uLm5leHQoKX19LGZ1bmN0aW9uKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgcj1uKDIpO3Qubm9ybWFsaXplTmFtZT1mdW5jdGlvbihlKXtpZihcInN0cmluZ1wiIT10eXBlb2YgZSYmKGU9U3RyaW5nKGUpKSwvW15hLXowLTlcXC0jJCUmJyorLlxcXl9gfH5dL2kudGVzdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWVcIik7cmV0dXJuIGUudG9Mb3dlckNhc2UoKX0sdC5ub3JtYWxpemVWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm5cInN0cmluZ1wiIT10eXBlb2YgZSYmKGU9U3RyaW5nKGUpKSxlfSx0LmdldEhlYWRlclZhbHVlcz1mdW5jdGlvbihlLHQpe3ZhciBuPWU7aWYobiBpbnN0YW5jZW9mIEhlYWRlcnMmJm4uZ2V0QWxsKXJldHVybiBuLmdldEFsbCh0KTt2YXIgcj1uLmdldCh0KTtyZXR1cm4gciYmXCJzdHJpbmdcIj09dHlwZW9mIHI/W3JdOnJ9LHQuZ2V0SGVhZGVyS2V5cz1mdW5jdGlvbihlKXt2YXIgdD1lLG49e30saT1bXTtyZXR1cm4gdC5rZXlzP3IuaXRlcmF0ZUhlYWRlcnNLZXlzKHQsKGZ1bmN0aW9uKGUpe25bZV18fChuW2VdPSEwLGkucHVzaChlKSl9KSk6dC5mb3JFYWNoP3QuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtuW3RdfHwoblt0XT0hMCxpLnB1c2godCkpfSkpOnIuaXRlcmF0ZUhlYWRlcnModCwoZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXTtuW3RdfHwoblt0XT0hMCxpLnB1c2godCkpfSkpLGl9LHQuc3BsaXRIZWFkZXJWYWx1ZT1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gZS5zcGxpdChcIiwgXCIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2Uuc3BsaXQoXCIsXCIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QucHVzaChlKX0pKX0pKSx0fX1dKSl9LDYxNzpmdW5jdGlvbihlLHQsbil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DaHVua1BhcnNlcj10LkNodW5rVHlwZT10LmVuY29kZUFTQ0lJPXQuZGVjb2RlQVNDSUk9dm9pZCAwO3ZhciByLGk9big2NSk7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gOT09PSh0PWUpfHwxMD09PXR8fDEzPT09dHx8ZT49MzImJmU8PTEyNjt2YXIgdH1mdW5jdGlvbiBhKGUpe2Zvcih2YXIgdD0wO3QhPT1lLmxlbmd0aDsrK3QpaWYoIW8oZVt0XSkpdGhyb3cgbmV3IEVycm9yKFwiTWV0YWRhdGEgaXMgbm90IHZhbGlkIChwcmludGFibGUpIEFTQ0lJXCIpO3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlKSl9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gMTI4PT0oMTI4JmUuZ2V0VWludDgoMCkpfWZ1bmN0aW9uIGMoZSl7cmV0dXJuIGUuZ2V0VWludDMyKDEsITEpfWZ1bmN0aW9uIGwoZSx0LG4pe3JldHVybiBlLmJ5dGVMZW5ndGgtdD49bn1mdW5jdGlvbiB1KGUsdCxuKXtpZihlLnNsaWNlKXJldHVybiBlLnNsaWNlKHQsbik7dmFyIHI9ZS5sZW5ndGg7dm9pZCAwIT09biYmKHI9bik7Zm9yKHZhciBpPW5ldyBVaW50OEFycmF5KHItdCksbz0wLGE9dDthPHI7YSsrKWlbbysrXT1lW2FdO3JldHVybiBpfXQuZGVjb2RlQVNDSUk9YSx0LmVuY29kZUFTQ0lJPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1uZXcgVWludDhBcnJheShlLmxlbmd0aCksbj0wO24hPT1lLmxlbmd0aDsrK24pe3ZhciByPWUuY2hhckNvZGVBdChuKTtpZighbyhyKSl0aHJvdyBuZXcgRXJyb3IoXCJNZXRhZGF0YSBjb250YWlucyBpbnZhbGlkIEFTQ0lJXCIpO3Rbbl09cn1yZXR1cm4gdH0sZnVuY3Rpb24oZSl7ZVtlLk1FU1NBR0U9MV09XCJNRVNTQUdFXCIsZVtlLlRSQUlMRVJTPTJdPVwiVFJBSUxFUlNcIn0ocj10LkNodW5rVHlwZXx8KHQuQ2h1bmtUeXBlPXt9KSk7dmFyIGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5idWZmZXI9bnVsbCx0aGlzLnBvc2l0aW9uPTB9cmV0dXJuIGUucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKGUsdCl7aWYoMD09PWUubGVuZ3RoJiZ0KXJldHVybltdO3ZhciBuLG89W107aWYobnVsbD09dGhpcy5idWZmZXIpdGhpcy5idWZmZXI9ZSx0aGlzLnBvc2l0aW9uPTA7ZWxzZSBpZih0aGlzLnBvc2l0aW9uPT09dGhpcy5idWZmZXIuYnl0ZUxlbmd0aCl0aGlzLmJ1ZmZlcj1lLHRoaXMucG9zaXRpb249MDtlbHNle3ZhciBkPXRoaXMuYnVmZmVyLmJ5dGVMZW5ndGgtdGhpcy5wb3NpdGlvbixmPW5ldyBVaW50OEFycmF5KGQrZS5ieXRlTGVuZ3RoKSxwPXUodGhpcy5idWZmZXIsdGhpcy5wb3NpdGlvbik7Zi5zZXQocCwwKTt2YXIgbT1uZXcgVWludDhBcnJheShlKTtmLnNldChtLGQpLHRoaXMuYnVmZmVyPWYsdGhpcy5wb3NpdGlvbj0wfWZvcig7Oyl7aWYoIWwodGhpcy5idWZmZXIsdGhpcy5wb3NpdGlvbiw1KSlyZXR1cm4gbzt2YXIgaD11KHRoaXMuYnVmZmVyLHRoaXMucG9zaXRpb24sdGhpcy5wb3NpdGlvbis1KSx2PW5ldyBEYXRhVmlldyhoLmJ1ZmZlcixoLmJ5dGVPZmZzZXQsaC5ieXRlTGVuZ3RoKSxnPWModik7aWYoIWwodGhpcy5idWZmZXIsdGhpcy5wb3NpdGlvbiw1K2cpKXJldHVybiBvO3ZhciB5PXUodGhpcy5idWZmZXIsdGhpcy5wb3NpdGlvbis1LHRoaXMucG9zaXRpb24rNStnKTtpZih0aGlzLnBvc2l0aW9uKz01K2cscyh2KSlyZXR1cm4gby5wdXNoKHtjaHVua1R5cGU6ci5UUkFJTEVSUyx0cmFpbGVyczoobj15LG5ldyBpLk1ldGFkYXRhKGEobikpKX0pLG87by5wdXNoKHtjaHVua1R5cGU6ci5NRVNTQUdFLGRhdGE6eX0pfX0sZX0oKTt0LkNodW5rUGFyc2VyPWR9LDg6ZnVuY3Rpb24oZSx0KXt2YXIgbjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lmh0dHBTdGF0dXNUb0NvZGU9dC5Db2RlPXZvaWQgMCxmdW5jdGlvbihlKXtlW2UuT0s9MF09XCJPS1wiLGVbZS5DYW5jZWxlZD0xXT1cIkNhbmNlbGVkXCIsZVtlLlVua25vd249Ml09XCJVbmtub3duXCIsZVtlLkludmFsaWRBcmd1bWVudD0zXT1cIkludmFsaWRBcmd1bWVudFwiLGVbZS5EZWFkbGluZUV4Y2VlZGVkPTRdPVwiRGVhZGxpbmVFeGNlZWRlZFwiLGVbZS5Ob3RGb3VuZD01XT1cIk5vdEZvdW5kXCIsZVtlLkFscmVhZHlFeGlzdHM9Nl09XCJBbHJlYWR5RXhpc3RzXCIsZVtlLlBlcm1pc3Npb25EZW5pZWQ9N109XCJQZXJtaXNzaW9uRGVuaWVkXCIsZVtlLlJlc291cmNlRXhoYXVzdGVkPThdPVwiUmVzb3VyY2VFeGhhdXN0ZWRcIixlW2UuRmFpbGVkUHJlY29uZGl0aW9uPTldPVwiRmFpbGVkUHJlY29uZGl0aW9uXCIsZVtlLkFib3J0ZWQ9MTBdPVwiQWJvcnRlZFwiLGVbZS5PdXRPZlJhbmdlPTExXT1cIk91dE9mUmFuZ2VcIixlW2UuVW5pbXBsZW1lbnRlZD0xMl09XCJVbmltcGxlbWVudGVkXCIsZVtlLkludGVybmFsPTEzXT1cIkludGVybmFsXCIsZVtlLlVuYXZhaWxhYmxlPTE0XT1cIlVuYXZhaWxhYmxlXCIsZVtlLkRhdGFMb3NzPTE1XT1cIkRhdGFMb3NzXCIsZVtlLlVuYXV0aGVudGljYXRlZD0xNl09XCJVbmF1dGhlbnRpY2F0ZWRcIn0obj10LkNvZGV8fCh0LkNvZGU9e30pKSx0Lmh0dHBTdGF0dXNUb0NvZGU9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4gbi5JbnRlcm5hbDtjYXNlIDIwMDpyZXR1cm4gbi5PSztjYXNlIDQwMDpyZXR1cm4gbi5JbnZhbGlkQXJndW1lbnQ7Y2FzZSA0MDE6cmV0dXJuIG4uVW5hdXRoZW50aWNhdGVkO2Nhc2UgNDAzOnJldHVybiBuLlBlcm1pc3Npb25EZW5pZWQ7Y2FzZSA0MDQ6cmV0dXJuIG4uTm90Rm91bmQ7Y2FzZSA0MDk6cmV0dXJuIG4uQWJvcnRlZDtjYXNlIDQxMjpyZXR1cm4gbi5GYWlsZWRQcmVjb25kaXRpb247Y2FzZSA0Mjk6cmV0dXJuIG4uUmVzb3VyY2VFeGhhdXN0ZWQ7Y2FzZSA0OTk6cmV0dXJuIG4uQ2FuY2VsZWQ7Y2FzZSA1MDA6ZGVmYXVsdDpyZXR1cm4gbi5Vbmtub3duO2Nhc2UgNTAxOnJldHVybiBuLlVuaW1wbGVtZW50ZWQ7Y2FzZSA1MDM6cmV0dXJuIG4uVW5hdmFpbGFibGU7Y2FzZSA1MDQ6cmV0dXJuIG4uRGVhZGxpbmVFeGNlZWRlZH19fSw5MzQ6ZnVuY3Rpb24oZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuY2xpZW50PXZvaWQgMDt2YXIgcj1uKDY1KSxpPW4oNjE3KSxvPW4oOCksYT1uKDM0Nikscz1uKDU3KSxjPW4oODgyKTt0LmNsaWVudD1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgbChlLHQpfTt2YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnN0YXJ0ZWQ9ITEsdGhpcy5zZW50Rmlyc3RNZXNzYWdlPSExLHRoaXMuY29tcGxldGVkPSExLHRoaXMuY2xvc2VkPSExLHRoaXMuZmluaXNoZWRTZW5kaW5nPSExLHRoaXMub25IZWFkZXJzQ2FsbGJhY2tzPVtdLHRoaXMub25NZXNzYWdlQ2FsbGJhY2tzPVtdLHRoaXMub25FbmRDYWxsYmFja3M9W10sdGhpcy5wYXJzZXI9bmV3IGkuQ2h1bmtQYXJzZXIsdGhpcy5tZXRob2REZWZpbml0aW9uPWUsdGhpcy5wcm9wcz10LHRoaXMuY3JlYXRlVHJhbnNwb3J0KCl9cmV0dXJuIGUucHJvdG90eXBlLmNyZWF0ZVRyYW5zcG9ydD1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuaG9zdCtcIi9cIit0aGlzLm1ldGhvZERlZmluaXRpb24uc2VydmljZS5zZXJ2aWNlTmFtZStcIi9cIit0aGlzLm1ldGhvZERlZmluaXRpb24ubWV0aG9kTmFtZSx0PXttZXRob2REZWZpbml0aW9uOnRoaXMubWV0aG9kRGVmaW5pdGlvbixkZWJ1Zzp0aGlzLnByb3BzLmRlYnVnfHwhMSx1cmw6ZSxvbkhlYWRlcnM6dGhpcy5vblRyYW5zcG9ydEhlYWRlcnMuYmluZCh0aGlzKSxvbkNodW5rOnRoaXMub25UcmFuc3BvcnRDaHVuay5iaW5kKHRoaXMpLG9uRW5kOnRoaXMub25UcmFuc3BvcnRFbmQuYmluZCh0aGlzKX07dGhpcy5wcm9wcy50cmFuc3BvcnQ/dGhpcy50cmFuc3BvcnQ9dGhpcy5wcm9wcy50cmFuc3BvcnQodCk6dGhpcy50cmFuc3BvcnQ9cy5tYWtlRGVmYXVsdFRyYW5zcG9ydCh0KX0sZS5wcm90b3R5cGUub25UcmFuc3BvcnRIZWFkZXJzPWZ1bmN0aW9uKGUsdCl7aWYodGhpcy5wcm9wcy5kZWJ1ZyYmYS5kZWJ1ZyhcIm9uSGVhZGVyc1wiLGUsdCksdGhpcy5jbG9zZWQpdGhpcy5wcm9wcy5kZWJ1ZyYmYS5kZWJ1ZyhcImdycGMub25IZWFkZXJzIHJlY2VpdmVkIGFmdGVyIHJlcXVlc3Qgd2FzIGNsb3NlZCAtIGlnbm9yaW5nXCIpO2Vsc2UgaWYoMD09PXQpO2Vsc2V7dGhpcy5yZXNwb25zZUhlYWRlcnM9ZSx0aGlzLnByb3BzLmRlYnVnJiZhLmRlYnVnKFwib25IZWFkZXJzLnJlc3BvbnNlSGVhZGVyc1wiLEpTT04uc3RyaW5naWZ5KHRoaXMucmVzcG9uc2VIZWFkZXJzLG51bGwsMikpO3ZhciBuPXUoZSk7dGhpcy5wcm9wcy5kZWJ1ZyYmYS5kZWJ1ZyhcIm9uSGVhZGVycy5nUlBDU3RhdHVzXCIsbik7dmFyIHI9biYmbj49MD9uOm8uaHR0cFN0YXR1c1RvQ29kZSh0KTt0aGlzLnByb3BzLmRlYnVnJiZhLmRlYnVnKFwib25IZWFkZXJzLmNvZGVcIixyKTt2YXIgaT1lLmdldChcImdycGMtbWVzc2FnZVwiKXx8W107aWYodGhpcy5wcm9wcy5kZWJ1ZyYmYS5kZWJ1ZyhcIm9uSGVhZGVycy5nUlBDTWVzc2FnZVwiLGkpLHRoaXMucmF3T25IZWFkZXJzKGUpLHIhPT1vLkNvZGUuT0spe3ZhciBzPXRoaXMuZGVjb2RlR1JQQ1N0YXR1cyhpWzBdKTt0aGlzLnJhd09uRXJyb3IocixzLGUpfX19LGUucHJvdG90eXBlLm9uVHJhbnNwb3J0Q2h1bms9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZih0aGlzLmNsb3NlZCl0aGlzLnByb3BzLmRlYnVnJiZhLmRlYnVnKFwiZ3JwYy5vbkNodW5rIHJlY2VpdmVkIGFmdGVyIHJlcXVlc3Qgd2FzIGNsb3NlZCAtIGlnbm9yaW5nXCIpO2Vsc2V7dmFyIG49W107dHJ5e249dGhpcy5wYXJzZXIucGFyc2UoZSl9Y2F0Y2goZSl7cmV0dXJuIHRoaXMucHJvcHMuZGVidWcmJmEuZGVidWcoXCJvbkNodW5rLnBhcnNpbmcgZXJyb3JcIixlLGUubWVzc2FnZSksdm9pZCB0aGlzLnJhd09uRXJyb3Ioby5Db2RlLkludGVybmFsLFwicGFyc2luZyBlcnJvcjogXCIrZS5tZXNzYWdlKX1uLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKGUuY2h1bmtUeXBlPT09aS5DaHVua1R5cGUuTUVTU0FHRSl7dmFyIG49dC5tZXRob2REZWZpbml0aW9uLnJlc3BvbnNlVHlwZS5kZXNlcmlhbGl6ZUJpbmFyeShlLmRhdGEpO3QucmF3T25NZXNzYWdlKG4pfWVsc2UgZS5jaHVua1R5cGU9PT1pLkNodW5rVHlwZS5UUkFJTEVSUyYmKHQucmVzcG9uc2VIZWFkZXJzPyh0LnJlc3BvbnNlVHJhaWxlcnM9bmV3IHIuTWV0YWRhdGEoZS50cmFpbGVycyksdC5wcm9wcy5kZWJ1ZyYmYS5kZWJ1ZyhcIm9uQ2h1bmsudHJhaWxlcnNcIix0LnJlc3BvbnNlVHJhaWxlcnMpKToodC5yZXNwb25zZUhlYWRlcnM9bmV3IHIuTWV0YWRhdGEoZS50cmFpbGVycyksdC5yYXdPbkhlYWRlcnModC5yZXNwb25zZUhlYWRlcnMpKSl9KSl9fSxlLnByb3RvdHlwZS5vblRyYW5zcG9ydEVuZD1mdW5jdGlvbigpe2lmKHRoaXMucHJvcHMuZGVidWcmJmEuZGVidWcoXCJncnBjLm9uRW5kXCIpLHRoaXMuY2xvc2VkKXRoaXMucHJvcHMuZGVidWcmJmEuZGVidWcoXCJncnBjLm9uRW5kIHJlY2VpdmVkIGFmdGVyIHJlcXVlc3Qgd2FzIGNsb3NlZCAtIGlnbm9yaW5nXCIpO2Vsc2UgaWYodm9pZCAwIT09dGhpcy5yZXNwb25zZVRyYWlsZXJzKXt2YXIgZT11KHRoaXMucmVzcG9uc2VUcmFpbGVycyk7aWYobnVsbCE9PWUpe3ZhciB0PXRoaXMucmVzcG9uc2VUcmFpbGVycy5nZXQoXCJncnBjLW1lc3NhZ2VcIiksbj10aGlzLmRlY29kZUdSUENTdGF0dXModFswXSk7dGhpcy5yYXdPbkVuZChlLG4sdGhpcy5yZXNwb25zZVRyYWlsZXJzKX1lbHNlIHRoaXMucmF3T25FcnJvcihvLkNvZGUuSW50ZXJuYWwsXCJSZXNwb25zZSBjbG9zZWQgd2l0aG91dCBncnBjLXN0YXR1cyAoVHJhaWxlcnMgcHJvdmlkZWQpXCIpfWVsc2V7aWYodm9pZCAwPT09dGhpcy5yZXNwb25zZUhlYWRlcnMpcmV0dXJuIHZvaWQgdGhpcy5yYXdPbkVycm9yKG8uQ29kZS5Vbmtub3duLFwiUmVzcG9uc2UgY2xvc2VkIHdpdGhvdXQgaGVhZGVyc1wiKTt2YXIgcj11KHRoaXMucmVzcG9uc2VIZWFkZXJzKSxpPXRoaXMucmVzcG9uc2VIZWFkZXJzLmdldChcImdycGMtbWVzc2FnZVwiKTtpZih0aGlzLnByb3BzLmRlYnVnJiZhLmRlYnVnKFwiZ3JwYy5oZWFkZXJzIG9ubHkgcmVzcG9uc2UgXCIscixpKSxudWxsPT09cilyZXR1cm4gdm9pZCB0aGlzLnJhd09uRW5kKG8uQ29kZS5Vbmtub3duLFwiUmVzcG9uc2UgY2xvc2VkIHdpdGhvdXQgZ3JwYy1zdGF0dXMgKEhlYWRlcnMgb25seSlcIix0aGlzLnJlc3BvbnNlSGVhZGVycyk7dmFyIHM9dGhpcy5kZWNvZGVHUlBDU3RhdHVzKGlbMF0pO3RoaXMucmF3T25FbmQocixzLHRoaXMucmVzcG9uc2VIZWFkZXJzKX19LGUucHJvdG90eXBlLmRlY29kZUdSUENTdGF0dXM9ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuXCJcIjt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlKX1jYXRjaCh0KXtyZXR1cm4gZX19LGUucHJvdG90eXBlLnJhd09uRW5kPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzO3RoaXMucHJvcHMuZGVidWcmJmEuZGVidWcoXCJyYXdPbkVuZFwiLGUsdCxuKSx0aGlzLmNvbXBsZXRlZHx8KHRoaXMuY29tcGxldGVkPSEwLHRoaXMub25FbmRDYWxsYmFja3MuZm9yRWFjaCgoZnVuY3Rpb24oaSl7aWYoIXIuY2xvc2VkKXRyeXtpKGUsdCxuKX1jYXRjaChlKXtzZXRUaW1lb3V0KChmdW5jdGlvbigpe3Rocm93IGV9KSwwKX19KSkpfSxlLnByb3RvdHlwZS5yYXdPbkhlYWRlcnM9ZnVuY3Rpb24oZSl7dGhpcy5wcm9wcy5kZWJ1ZyYmYS5kZWJ1ZyhcInJhd09uSGVhZGVyc1wiLGUpLHRoaXMuY29tcGxldGVkfHx0aGlzLm9uSGVhZGVyc0NhbGxiYWNrcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0cnl7dChlKX1jYXRjaChlKXtzZXRUaW1lb3V0KChmdW5jdGlvbigpe3Rocm93IGV9KSwwKX19KSl9LGUucHJvdG90eXBlLnJhd09uRXJyb3I9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPXRoaXM7dm9pZCAwPT09biYmKG49bmV3IHIuTWV0YWRhdGEpLHRoaXMucHJvcHMuZGVidWcmJmEuZGVidWcoXCJyYXdPbkVycm9yXCIsZSx0KSx0aGlzLmNvbXBsZXRlZHx8KHRoaXMuY29tcGxldGVkPSEwLHRoaXMub25FbmRDYWxsYmFja3MuZm9yRWFjaCgoZnVuY3Rpb24ocil7aWYoIWkuY2xvc2VkKXRyeXtyKGUsdCxuKX1jYXRjaChlKXtzZXRUaW1lb3V0KChmdW5jdGlvbigpe3Rocm93IGV9KSwwKX19KSkpfSxlLnByb3RvdHlwZS5yYXdPbk1lc3NhZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLnByb3BzLmRlYnVnJiZhLmRlYnVnKFwicmF3T25NZXNzYWdlXCIsZS50b09iamVjdCgpKSx0aGlzLmNvbXBsZXRlZHx8dGhpcy5jbG9zZWR8fHRoaXMub25NZXNzYWdlQ2FsbGJhY2tzLmZvckVhY2goKGZ1bmN0aW9uKG4pe2lmKCF0LmNsb3NlZCl0cnl7bihlKX1jYXRjaChlKXtzZXRUaW1lb3V0KChmdW5jdGlvbigpe3Rocm93IGV9KSwwKX19KSl9LGUucHJvdG90eXBlLm9uSGVhZGVycz1mdW5jdGlvbihlKXt0aGlzLm9uSGVhZGVyc0NhbGxiYWNrcy5wdXNoKGUpfSxlLnByb3RvdHlwZS5vbk1lc3NhZ2U9ZnVuY3Rpb24oZSl7dGhpcy5vbk1lc3NhZ2VDYWxsYmFja3MucHVzaChlKX0sZS5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24oZSl7dGhpcy5vbkVuZENhbGxiYWNrcy5wdXNoKGUpfSxlLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbihlKXtpZih0aGlzLnN0YXJ0ZWQpdGhyb3cgbmV3IEVycm9yKFwiQ2xpZW50IGFscmVhZHkgc3RhcnRlZCAtIGNhbm5vdCAuc3RhcnQoKVwiKTt0aGlzLnN0YXJ0ZWQ9ITA7dmFyIHQ9bmV3IHIuTWV0YWRhdGEoZXx8e30pO3Quc2V0KFwiY29udGVudC10eXBlXCIsXCJhcHBsaWNhdGlvbi9ncnBjLXdlYitwcm90b1wiKSx0LnNldChcIngtZ3JwYy13ZWJcIixcIjFcIiksdGhpcy50cmFuc3BvcnQuc3RhcnQodCl9LGUucHJvdG90eXBlLnNlbmQ9ZnVuY3Rpb24oZSl7aWYoIXRoaXMuc3RhcnRlZCl0aHJvdyBuZXcgRXJyb3IoXCJDbGllbnQgbm90IHN0YXJ0ZWQgLSAuc3RhcnQoKSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgLnNlbmQoKVwiKTtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgRXJyb3IoXCJDbGllbnQgYWxyZWFkeSBjbG9zZWQgLSBjYW5ub3QgLnNlbmQoKVwiKTtpZih0aGlzLmZpbmlzaGVkU2VuZGluZyl0aHJvdyBuZXcgRXJyb3IoXCJDbGllbnQgYWxyZWFkeSBmaW5pc2hlZCBzZW5kaW5nIC0gY2Fubm90IC5zZW5kKClcIik7aWYoIXRoaXMubWV0aG9kRGVmaW5pdGlvbi5yZXF1ZXN0U3RyZWFtJiZ0aGlzLnNlbnRGaXJzdE1lc3NhZ2UpdGhyb3cgbmV3IEVycm9yKFwiTWVzc2FnZSBhbHJlYWR5IHNlbnQgZm9yIG5vbi1jbGllbnQtc3RyZWFtaW5nIG1ldGhvZCAtIGNhbm5vdCAuc2VuZCgpXCIpO3RoaXMuc2VudEZpcnN0TWVzc2FnZT0hMDt2YXIgdD1jLmZyYW1lUmVxdWVzdChlKTt0aGlzLnRyYW5zcG9ydC5zZW5kTWVzc2FnZSh0KX0sZS5wcm90b3R5cGUuZmluaXNoU2VuZD1mdW5jdGlvbigpe2lmKCF0aGlzLnN0YXJ0ZWQpdGhyb3cgbmV3IEVycm9yKFwiQ2xpZW50IG5vdCBzdGFydGVkIC0gLmZpbmlzaFNlbmQoKSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgLmNsb3NlKClcIik7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IEVycm9yKFwiQ2xpZW50IGFscmVhZHkgY2xvc2VkIC0gY2Fubm90IC5zZW5kKClcIik7aWYodGhpcy5maW5pc2hlZFNlbmRpbmcpdGhyb3cgbmV3IEVycm9yKFwiQ2xpZW50IGFscmVhZHkgZmluaXNoZWQgc2VuZGluZyAtIGNhbm5vdCAuZmluaXNoU2VuZCgpXCIpO3RoaXMuZmluaXNoZWRTZW5kaW5nPSEwLHRoaXMudHJhbnNwb3J0LmZpbmlzaFNlbmQoKX0sZS5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oKXtpZighdGhpcy5zdGFydGVkKXRocm93IG5ldyBFcnJvcihcIkNsaWVudCBub3Qgc3RhcnRlZCAtIC5zdGFydCgpIG11c3QgYmUgY2FsbGVkIGJlZm9yZSAuY2xvc2UoKVwiKTtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgRXJyb3IoXCJDbGllbnQgYWxyZWFkeSBjbG9zZWQgLSBjYW5ub3QgLmNsb3NlKClcIik7dGhpcy5jbG9zZWQ9ITAsdGhpcy5wcm9wcy5kZWJ1ZyYmYS5kZWJ1ZyhcInJlcXVlc3QuYWJvcnQgYWJvcnRpbmcgcmVxdWVzdFwiKSx0aGlzLnRyYW5zcG9ydC5jYW5jZWwoKX0sZX0oKTtmdW5jdGlvbiB1KGUpe3ZhciB0PWUuZ2V0KFwiZ3JwYy1zdGF0dXNcIil8fFtdO2lmKHQubGVuZ3RoPjApdHJ5e3ZhciBuPXRbMF07cmV0dXJuIHBhcnNlSW50KG4sMTApfWNhdGNoKGUpe3JldHVybiBudWxsfXJldHVybiBudWxsfX0sMzQ2OmZ1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5kZWJ1Zz12b2lkIDAsdC5kZWJ1Zz1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTtjb25zb2xlLmRlYnVnP2NvbnNvbGUuZGVidWcuYXBwbHkobnVsbCxlKTpjb25zb2xlLmxvZy5hcHBseShudWxsLGUpfX0sNjA3OmZ1bmN0aW9uKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmdycGM9dm9pZCAwO3ZhciByLGk9big0MTgpLG89big1NyksYT1uKDIyOSkscz1uKDU0MCksYz1uKDIxMCksbD1uKDg1OSksdT1uKDgpLGQ9big5MzgpLGY9bigzNSkscD1uKDkzNCk7KHI9dC5ncnBjfHwodC5ncnBjPXt9KSkuc2V0RGVmYXVsdFRyYW5zcG9ydD1vLnNldERlZmF1bHRUcmFuc3BvcnRGYWN0b3J5LHIuQ3Jvc3NCcm93c2VySHR0cFRyYW5zcG9ydD1sLkNyb3NzQnJvd3Nlckh0dHBUcmFuc3BvcnQsci5GZXRjaFJlYWRhYmxlU3RyZWFtVHJhbnNwb3J0PWEuRmV0Y2hSZWFkYWJsZVN0cmVhbVRyYW5zcG9ydCxyLlhoclRyYW5zcG9ydD1jLlhoclRyYW5zcG9ydCxyLldlYnNvY2tldFRyYW5zcG9ydD1zLldlYnNvY2tldFRyYW5zcG9ydCxyLkNvZGU9dS5Db2RlLHIuTWV0YWRhdGE9aS5Ccm93c2VySGVhZGVycyxyLmNsaWVudD1mdW5jdGlvbihlLHQpe3JldHVybiBwLmNsaWVudChlLHQpfSxyLmludm9rZT1kLmludm9rZSxyLnVuYXJ5PWYudW5hcnl9LDkzODpmdW5jdGlvbihlLHQsbil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5pbnZva2U9dm9pZCAwO3ZhciByPW4oOTM0KTt0Lmludm9rZT1mdW5jdGlvbihlLHQpe2lmKGUucmVxdWVzdFN0cmVhbSl0aHJvdyBuZXcgRXJyb3IoXCIuaW52b2tlIGNhbm5vdCBiZSB1c2VkIHdpdGggY2xpZW50LXN0cmVhbWluZyBtZXRob2RzLiBVc2UgLmNsaWVudCBpbnN0ZWFkLlwiKTt2YXIgbj1yLmNsaWVudChlLHtob3N0OnQuaG9zdCx0cmFuc3BvcnQ6dC50cmFuc3BvcnQsZGVidWc6dC5kZWJ1Z30pO3JldHVybiB0Lm9uSGVhZGVycyYmbi5vbkhlYWRlcnModC5vbkhlYWRlcnMpLHQub25NZXNzYWdlJiZuLm9uTWVzc2FnZSh0Lm9uTWVzc2FnZSksdC5vbkVuZCYmbi5vbkVuZCh0Lm9uRW5kKSxuLnN0YXJ0KHQubWV0YWRhdGEpLG4uc2VuZCh0LnJlcXVlc3QpLG4uZmluaXNoU2VuZCgpLHtjbG9zZTpmdW5jdGlvbigpe24uY2xvc2UoKX19fX0sNjU6ZnVuY3Rpb24oZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTWV0YWRhdGE9dm9pZCAwO3ZhciByPW4oNDE4KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIk1ldGFkYXRhXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuQnJvd3NlckhlYWRlcnN9fSl9LDU3OmZ1bmN0aW9uKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lm1ha2VEZWZhdWx0VHJhbnNwb3J0PXQuc2V0RGVmYXVsdFRyYW5zcG9ydEZhY3Rvcnk9dm9pZCAwO3ZhciByPW4oODU5KSxpPWZ1bmN0aW9uKGUpe3JldHVybiByLkNyb3NzQnJvd3Nlckh0dHBUcmFuc3BvcnQoe3dpdGhDcmVkZW50aWFsczohMX0pKGUpfTt0LnNldERlZmF1bHRUcmFuc3BvcnRGYWN0b3J5PWZ1bmN0aW9uKGUpe2k9ZX0sdC5tYWtlRGVmYXVsdFRyYW5zcG9ydD1mdW5jdGlvbihlKXtyZXR1cm4gaShlKX19LDIyOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4ocj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQsbj0xLHI9YXJndW1lbnRzLmxlbmd0aDtuPHI7bisrKWZvcih2YXIgaSBpbiB0PWFyZ3VtZW50c1tuXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxpKSYmKGVbaV09dFtpXSk7cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZGV0ZWN0RmV0Y2hTdXBwb3J0PXQuRmV0Y2hSZWFkYWJsZVN0cmVhbVRyYW5zcG9ydD12b2lkIDA7dmFyIGk9big2NSksbz1uKDM0Nik7dC5GZXRjaFJlYWRhYmxlU3RyZWFtVHJhbnNwb3J0PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5kZWJ1ZyYmby5kZWJ1ZyhcImZldGNoUmVxdWVzdFwiLGUpLG5ldyBhKGUsdCl9KHQsZSl9fTt2YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLmNhbmNlbGxlZD0hMSx0aGlzLmNvbnRyb2xsZXI9c2VsZi5BYm9ydENvbnRyb2xsZXImJm5ldyBBYm9ydENvbnRyb2xsZXIsdGhpcy5vcHRpb25zPWUsdGhpcy5pbml0PXR9cmV0dXJuIGUucHJvdG90eXBlLnB1bXA9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO2lmKHRoaXMucmVhZGVyPWUsdGhpcy5jYW5jZWxsZWQpcmV0dXJuIHRoaXMub3B0aW9ucy5kZWJ1ZyYmby5kZWJ1ZyhcIkZldGNoLnB1bXAuY2FuY2VsIGF0IGZpcnN0IHB1bXBcIiksdm9pZCB0aGlzLnJlYWRlci5jYW5jZWwoKS5jYXRjaCgoZnVuY3Rpb24oZSl7bi5vcHRpb25zLmRlYnVnJiZvLmRlYnVnKFwiRmV0Y2gucHVtcC5yZWFkZXIuY2FuY2VsIGV4Y2VwdGlvblwiLGUpfSkpO3RoaXMucmVhZGVyLnJlYWQoKS50aGVuKChmdW5jdGlvbihlKXtpZihlLmRvbmUpcmV0dXJuIG4ub3B0aW9ucy5vbkVuZCgpLHQ7bi5vcHRpb25zLm9uQ2h1bmsoZS52YWx1ZSksbi5wdW1wKG4ucmVhZGVyLHQpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtuLmNhbmNlbGxlZD9uLm9wdGlvbnMuZGVidWcmJm8uZGVidWcoXCJGZXRjaC5jYXRjaCAtIHJlcXVlc3QgY2FuY2VsbGVkXCIpOihuLmNhbmNlbGxlZD0hMCxuLm9wdGlvbnMuZGVidWcmJm8uZGVidWcoXCJGZXRjaC5jYXRjaFwiLGUubWVzc2FnZSksbi5vcHRpb25zLm9uRW5kKGUpKX0pKX0sZS5wcm90b3R5cGUuc2VuZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2ZldGNoKHRoaXMub3B0aW9ucy51cmwscihyKHt9LHRoaXMuaW5pdCkse2hlYWRlcnM6dGhpcy5tZXRhZGF0YS50b0hlYWRlcnMoKSxtZXRob2Q6XCJQT1NUXCIsYm9keTplLHNpZ25hbDp0aGlzLmNvbnRyb2xsZXImJnRoaXMuY29udHJvbGxlci5zaWduYWx9KSkudGhlbigoZnVuY3Rpb24oZSl7aWYodC5vcHRpb25zLmRlYnVnJiZvLmRlYnVnKFwiRmV0Y2gucmVzcG9uc2VcIixlKSx0Lm9wdGlvbnMub25IZWFkZXJzKG5ldyBpLk1ldGFkYXRhKGUuaGVhZGVycyksZS5zdGF0dXMpLCFlLmJvZHkpcmV0dXJuIGU7dC5wdW1wKGUuYm9keS5nZXRSZWFkZXIoKSxlKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7dC5jYW5jZWxsZWQ/dC5vcHRpb25zLmRlYnVnJiZvLmRlYnVnKFwiRmV0Y2guY2F0Y2ggLSByZXF1ZXN0IGNhbmNlbGxlZFwiKToodC5jYW5jZWxsZWQ9ITAsdC5vcHRpb25zLmRlYnVnJiZvLmRlYnVnKFwiRmV0Y2guY2F0Y2hcIixlLm1lc3NhZ2UpLHQub3B0aW9ucy5vbkVuZChlKSl9KSl9LGUucHJvdG90eXBlLnNlbmRNZXNzYWdlPWZ1bmN0aW9uKGUpe3RoaXMuc2VuZChlKX0sZS5wcm90b3R5cGUuZmluaXNoU2VuZD1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oZSl7dGhpcy5tZXRhZGF0YT1lfSxlLnByb3RvdHlwZS5jYW5jZWw9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuY2FuY2VsbGVkP3RoaXMub3B0aW9ucy5kZWJ1ZyYmby5kZWJ1ZyhcIkZldGNoLmNhbmNlbCBhbHJlYWR5IGNhbmNlbGxlZFwiKToodGhpcy5jYW5jZWxsZWQ9ITAsdGhpcy5jb250cm9sbGVyPyh0aGlzLm9wdGlvbnMuZGVidWcmJm8uZGVidWcoXCJGZXRjaC5jYW5jZWwuY29udHJvbGxlci5hYm9ydFwiKSx0aGlzLmNvbnRyb2xsZXIuYWJvcnQoKSk6dGhpcy5vcHRpb25zLmRlYnVnJiZvLmRlYnVnKFwiRmV0Y2guY2FuY2VsLm1pc3NpbmcgYWJvcnQgY29udHJvbGxlclwiKSx0aGlzLnJlYWRlcj8odGhpcy5vcHRpb25zLmRlYnVnJiZvLmRlYnVnKFwiRmV0Y2guY2FuY2VsLnJlYWRlci5jYW5jZWxcIiksdGhpcy5yZWFkZXIuY2FuY2VsKCkuY2F0Y2goKGZ1bmN0aW9uKHQpe2Uub3B0aW9ucy5kZWJ1ZyYmby5kZWJ1ZyhcIkZldGNoLmNhbmNlbC5yZWFkZXIuY2FuY2VsIGV4Y2VwdGlvblwiLHQpfSkpKTp0aGlzLm9wdGlvbnMuZGVidWcmJm8uZGVidWcoXCJGZXRjaC5jYW5jZWwgYmVmb3JlIHJlYWRlclwiKSl9LGV9KCk7dC5kZXRlY3RGZXRjaFN1cHBvcnQ9ZnVuY3Rpb24oKXtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgUmVzcG9uc2UmJlJlc3BvbnNlLnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShcImJvZHlcIikmJlwiZnVuY3Rpb25cIj09dHlwZW9mIEhlYWRlcnN9fSw4NTk6ZnVuY3Rpb24oZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ3Jvc3NCcm93c2VySHR0cFRyYW5zcG9ydD12b2lkIDA7dmFyIHI9bigyMjkpLGk9bigyMTApO3QuQ3Jvc3NCcm93c2VySHR0cFRyYW5zcG9ydD1mdW5jdGlvbihlKXtpZihyLmRldGVjdEZldGNoU3VwcG9ydCgpKXt2YXIgdD17Y3JlZGVudGlhbHM6ZS53aXRoQ3JlZGVudGlhbHM/XCJpbmNsdWRlXCI6XCJzYW1lLW9yaWdpblwifTtyZXR1cm4gci5GZXRjaFJlYWRhYmxlU3RyZWFtVHJhbnNwb3J0KHQpfXJldHVybiBpLlhoclRyYW5zcG9ydCh7d2l0aENyZWRlbnRpYWxzOmUud2l0aENyZWRlbnRpYWxzfSl9fSwyMTA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKHI9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJihlW25dPXRbbl0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfXIoZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihuLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgbil9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnN0cmluZ1RvQXJyYXlCdWZmZXI9dC5Nb3pDaHVua2VkQXJyYXlCdWZmZXJYSFI9dC5YSFI9dC5YaHJUcmFuc3BvcnQ9dm9pZCAwO3ZhciBvPW4oNjUpLGE9bigzNDYpLHM9big4NDkpO3QuWGhyVHJhbnNwb3J0PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtpZihzLmRldGVjdE1velhIUlN1cHBvcnQoKSlyZXR1cm4gbmV3IGwodCxlKTtpZihzLmRldGVjdFhIUk92ZXJyaWRlTWltZVR5cGVTdXBwb3J0KCkpcmV0dXJuIG5ldyBjKHQsZSk7dGhyb3cgbmV3IEVycm9yKFwiVGhpcyBlbnZpcm9ubWVudCdzIFhIUiBpbXBsZW1lbnRhdGlvbiBjYW5ub3Qgc3VwcG9ydCBiaW5hcnkgdHJhbnNmZXIuXCIpfX07dmFyIGM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5vcHRpb25zPWUsdGhpcy5pbml0PXR9cmV0dXJuIGUucHJvdG90eXBlLm9uUHJvZ3Jlc3NFdmVudD1mdW5jdGlvbigpe3RoaXMub3B0aW9ucy5kZWJ1ZyYmYS5kZWJ1ZyhcIlhIUi5vblByb2dyZXNzRXZlbnQubGVuZ3RoOiBcIix0aGlzLnhoci5yZXNwb25zZS5sZW5ndGgpO3ZhciBlPXRoaXMueGhyLnJlc3BvbnNlLnN1YnN0cih0aGlzLmluZGV4KTt0aGlzLmluZGV4PXRoaXMueGhyLnJlc3BvbnNlLmxlbmd0aDt2YXIgdD1kKGUpO3RoaXMub3B0aW9ucy5vbkNodW5rKHQpfSxlLnByb3RvdHlwZS5vbkxvYWRFdmVudD1mdW5jdGlvbigpe3RoaXMub3B0aW9ucy5kZWJ1ZyYmYS5kZWJ1ZyhcIlhIUi5vbkxvYWRFdmVudFwiKSx0aGlzLm9wdGlvbnMub25FbmQoKX0sZS5wcm90b3R5cGUub25TdGF0ZUNoYW5nZT1mdW5jdGlvbigpe3RoaXMub3B0aW9ucy5kZWJ1ZyYmYS5kZWJ1ZyhcIlhIUi5vblN0YXRlQ2hhbmdlXCIsdGhpcy54aHIucmVhZHlTdGF0ZSksdGhpcy54aHIucmVhZHlTdGF0ZT09PVhNTEh0dHBSZXF1ZXN0LkhFQURFUlNfUkVDRUlWRUQmJnRoaXMub3B0aW9ucy5vbkhlYWRlcnMobmV3IG8uTWV0YWRhdGEodGhpcy54aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLHRoaXMueGhyLnN0YXR1cyl9LGUucHJvdG90eXBlLnNlbmRNZXNzYWdlPWZ1bmN0aW9uKGUpe3RoaXMueGhyLnNlbmQoZSl9LGUucHJvdG90eXBlLmZpbmlzaFNlbmQ9ZnVuY3Rpb24oKXt9LGUucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5tZXRhZGF0YT1lO3ZhciBuPW5ldyBYTUxIdHRwUmVxdWVzdDt0aGlzLnhocj1uLG4ub3BlbihcIlBPU1RcIix0aGlzLm9wdGlvbnMudXJsKSx0aGlzLmNvbmZpZ3VyZVhocigpLHRoaXMubWV0YWRhdGEuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtuLnNldFJlcXVlc3RIZWFkZXIoZSx0LmpvaW4oXCIsIFwiKSl9KSksbi53aXRoQ3JlZGVudGlhbHM9Qm9vbGVhbih0aGlzLmluaXQud2l0aENyZWRlbnRpYWxzKSxuLmFkZEV2ZW50TGlzdGVuZXIoXCJyZWFkeXN0YXRlY2hhbmdlXCIsdGhpcy5vblN0YXRlQ2hhbmdlLmJpbmQodGhpcykpLG4uYWRkRXZlbnRMaXN0ZW5lcihcInByb2dyZXNzXCIsdGhpcy5vblByb2dyZXNzRXZlbnQuYmluZCh0aGlzKSksbi5hZGRFdmVudExpc3RlbmVyKFwibG9hZGVuZFwiLHRoaXMub25Mb2FkRXZlbnQuYmluZCh0aGlzKSksbi5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwoZnVuY3Rpb24oZSl7dC5vcHRpb25zLmRlYnVnJiZhLmRlYnVnKFwiWEhSLmVycm9yXCIsZSksdC5vcHRpb25zLm9uRW5kKGUuZXJyb3IpfSkpfSxlLnByb3RvdHlwZS5jb25maWd1cmVYaHI9ZnVuY3Rpb24oKXt0aGlzLnhoci5yZXNwb25zZVR5cGU9XCJ0ZXh0XCIsdGhpcy54aHIub3ZlcnJpZGVNaW1lVHlwZShcInRleHQvcGxhaW47IGNoYXJzZXQ9eC11c2VyLWRlZmluZWRcIil9LGUucHJvdG90eXBlLmNhbmNlbD1mdW5jdGlvbigpe3RoaXMub3B0aW9ucy5kZWJ1ZyYmYS5kZWJ1ZyhcIlhIUi5hYm9ydFwiKSx0aGlzLnhoci5hYm9ydCgpfSxlfSgpO3QuWEhSPWM7dmFyIGw9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIGkodCxlKSx0LnByb3RvdHlwZS5jb25maWd1cmVYaHI9ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuZGVidWcmJmEuZGVidWcoXCJNb3pYSFIuY29uZmlndXJlWGhyOiBzZXR0aW5nIHJlc3BvbnNlVHlwZSB0byAnbW96LWNodW5rZWQtYXJyYXlidWZmZXInXCIpLHRoaXMueGhyLnJlc3BvbnNlVHlwZT1cIm1vei1jaHVua2VkLWFycmF5YnVmZmVyXCJ9LHQucHJvdG90eXBlLm9uUHJvZ3Jlc3NFdmVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMueGhyLnJlc3BvbnNlO3RoaXMub3B0aW9ucy5kZWJ1ZyYmYS5kZWJ1ZyhcIk1velhIUi5vblByb2dyZXNzRXZlbnQ6IFwiLG5ldyBVaW50OEFycmF5KGUpKSx0aGlzLm9wdGlvbnMub25DaHVuayhuZXcgVWludDhBcnJheShlKSl9LHR9KGMpO2Z1bmN0aW9uIHUoZSx0KXt2YXIgbj1lLmNoYXJDb2RlQXQodCk7aWYobj49NTUyOTYmJm48PTU2MzE5KXt2YXIgcj1lLmNoYXJDb2RlQXQodCsxKTtyPj01NjMyMCYmcjw9NTczNDMmJihuPTY1NTM2KyhuLTU1Mjk2PDwxMCkrKHItNTYzMjApKX1yZXR1cm4gbn1mdW5jdGlvbiBkKGUpe2Zvcih2YXIgdD1uZXcgVWludDhBcnJheShlLmxlbmd0aCksbj0wLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGk9U3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdD9lLmNvZGVQb2ludEF0KHIpOnUoZSxyKTt0W24rK109MjU1Jml9cmV0dXJuIHR9dC5Nb3pDaHVua2VkQXJyYXlCdWZmZXJYSFI9bCx0LnN0cmluZ1RvQXJyYXlCdWZmZXI9ZH0sODQ5OmZ1bmN0aW9uKGUsdCl7dmFyIG47ZnVuY3Rpb24gcihlKXt2YXIgdD1mdW5jdGlvbigpe2lmKHZvaWQgMCE9PW4pcmV0dXJuIG47aWYoWE1MSHR0cFJlcXVlc3Qpe249bmV3IFhNTEh0dHBSZXF1ZXN0O3RyeXtuLm9wZW4oXCJHRVRcIixcImh0dHBzOi8vbG9jYWxob3N0XCIpfWNhdGNoKGUpe319cmV0dXJuIG59KCk7aWYoIXQpcmV0dXJuITE7dHJ5e3JldHVybiB0LnJlc3BvbnNlVHlwZT1lLHQucmVzcG9uc2VUeXBlPT09ZX1jYXRjaChlKXt9cmV0dXJuITF9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5kZXRlY3RYSFJPdmVycmlkZU1pbWVUeXBlU3VwcG9ydD10LmRldGVjdE1velhIUlN1cHBvcnQ9dC54aHJTdXBwb3J0c1Jlc3BvbnNlVHlwZT12b2lkIDAsdC54aHJTdXBwb3J0c1Jlc3BvbnNlVHlwZT1yLHQuZGV0ZWN0TW96WEhSU3VwcG9ydD1mdW5jdGlvbigpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBYTUxIdHRwUmVxdWVzdCYmcihcIm1vei1jaHVua2VkLWFycmF5YnVmZmVyXCIpfSx0LmRldGVjdFhIUk92ZXJyaWRlTWltZVR5cGVTdXBwb3J0PWZ1bmN0aW9uKCl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0JiZYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoXCJvdmVycmlkZU1pbWVUeXBlXCIpfX0sNTQwOmZ1bmN0aW9uKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LldlYnNvY2tldFRyYW5zcG9ydD12b2lkIDA7dmFyIHIsaT1uKDM0Niksbz1uKDYxNyk7IWZ1bmN0aW9uKGUpe2VbZS5GSU5JU0hfU0VORD0xXT1cIkZJTklTSF9TRU5EXCJ9KHJ8fChyPXt9KSk7dmFyIGE9bmV3IFVpbnQ4QXJyYXkoWzFdKTt0LldlYnNvY2tldFRyYW5zcG9ydD1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5kZWJ1ZyYmaS5kZWJ1ZyhcIndlYnNvY2tldFJlcXVlc3RcIixlKTt2YXIgdCxuPWZ1bmN0aW9uKGUpe2lmKFwiaHR0cHM6Ly9cIj09PWUuc3Vic3RyKDAsOCkpcmV0dXJuXCJ3c3M6Ly9cIitlLnN1YnN0cig4KTtpZihcImh0dHA6Ly9cIj09PWUuc3Vic3RyKDAsNykpcmV0dXJuXCJ3czovL1wiK2Uuc3Vic3RyKDcpO3Rocm93IG5ldyBFcnJvcihcIldlYnNvY2tldCB0cmFuc3BvcnQgY29uc3RydWN0ZWQgd2l0aCBub24taHR0cHM6Ly8gb3IgaHR0cDovLyBob3N0LlwiKX0oZS51cmwpLHM9W107ZnVuY3Rpb24gYyhlKXtpZihlPT09ci5GSU5JU0hfU0VORCl0LnNlbmQoYSk7ZWxzZXt2YXIgbj1lLGk9bmV3IEludDhBcnJheShuLmJ5dGVMZW5ndGgrMSk7aS5zZXQobmV3IFVpbnQ4QXJyYXkoWzBdKSksaS5zZXQobiwxKSx0LnNlbmQoaSl9fXJldHVybntzZW5kTWVzc2FnZTpmdW5jdGlvbihlKXt0JiZ0LnJlYWR5U3RhdGUhPT10LkNPTk5FQ1RJTkc/YyhlKTpzLnB1c2goZSl9LGZpbmlzaFNlbmQ6ZnVuY3Rpb24oKXt0JiZ0LnJlYWR5U3RhdGUhPT10LkNPTk5FQ1RJTkc/YyhyLkZJTklTSF9TRU5EKTpzLnB1c2goci5GSU5JU0hfU0VORCl9LHN0YXJ0OmZ1bmN0aW9uKHIpeyh0PW5ldyBXZWJTb2NrZXQobixbXCJncnBjLXdlYnNvY2tldHNcIl0pKS5iaW5hcnlUeXBlPVwiYXJyYXlidWZmZXJcIix0Lm9ub3Blbj1mdW5jdGlvbigpe3ZhciBuO2UuZGVidWcmJmkuZGVidWcoXCJ3ZWJzb2NrZXRSZXF1ZXN0Lm9ub3BlblwiKSx0LnNlbmQoKG49XCJcIixyLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7bis9ZStcIjogXCIrdC5qb2luKFwiLCBcIikrXCJcXHJcXG5cIn0pKSxvLmVuY29kZUFTQ0lJKG4pKSkscy5mb3JFYWNoKChmdW5jdGlvbihlKXtjKGUpfSkpfSx0Lm9uY2xvc2U9ZnVuY3Rpb24odCl7ZS5kZWJ1ZyYmaS5kZWJ1ZyhcIndlYnNvY2tldFJlcXVlc3Qub25jbG9zZVwiLHQpLGUub25FbmQoKX0sdC5vbmVycm9yPWZ1bmN0aW9uKHQpe2UuZGVidWcmJmkuZGVidWcoXCJ3ZWJzb2NrZXRSZXF1ZXN0Lm9uZXJyb3JcIix0KX0sdC5vbm1lc3NhZ2U9ZnVuY3Rpb24odCl7ZS5vbkNodW5rKG5ldyBVaW50OEFycmF5KHQuZGF0YSkpfX0sY2FuY2VsOmZ1bmN0aW9uKCl7ZS5kZWJ1ZyYmaS5kZWJ1ZyhcIndlYnNvY2tldC5hYm9ydFwiKSx0LmNsb3NlKCl9fX0oZSl9fX0sMzU6ZnVuY3Rpb24oZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudW5hcnk9dm9pZCAwO3ZhciByPW4oNjUpLGk9big5MzQpO3QudW5hcnk9ZnVuY3Rpb24oZSx0KXtpZihlLnJlc3BvbnNlU3RyZWFtKXRocm93IG5ldyBFcnJvcihcIi51bmFyeSBjYW5ub3QgYmUgdXNlZCB3aXRoIHNlcnZlci1zdHJlYW1pbmcgbWV0aG9kcy4gVXNlIC5pbnZva2Ugb3IgLmNsaWVudCBpbnN0ZWFkLlwiKTtpZihlLnJlcXVlc3RTdHJlYW0pdGhyb3cgbmV3IEVycm9yKFwiLnVuYXJ5IGNhbm5vdCBiZSB1c2VkIHdpdGggY2xpZW50LXN0cmVhbWluZyBtZXRob2RzLiBVc2UgLmNsaWVudCBpbnN0ZWFkLlwiKTt2YXIgbj1udWxsLG89bnVsbCxhPWkuY2xpZW50KGUse2hvc3Q6dC5ob3N0LHRyYW5zcG9ydDp0LnRyYW5zcG9ydCxkZWJ1Zzp0LmRlYnVnfSk7cmV0dXJuIGEub25IZWFkZXJzKChmdW5jdGlvbihlKXtuPWV9KSksYS5vbk1lc3NhZ2UoKGZ1bmN0aW9uKGUpe289ZX0pKSxhLm9uRW5kKChmdW5jdGlvbihlLGksYSl7dC5vbkVuZCh7c3RhdHVzOmUsc3RhdHVzTWVzc2FnZTppLGhlYWRlcnM6bnx8bmV3IHIuTWV0YWRhdGEsbWVzc2FnZTpvLHRyYWlsZXJzOmF9KX0pKSxhLnN0YXJ0KHQubWV0YWRhdGEpLGEuc2VuZCh0LnJlcXVlc3QpLGEuZmluaXNoU2VuZCgpLHtjbG9zZTpmdW5jdGlvbigpe2EuY2xvc2UoKX19fX0sODgyOmZ1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5mcmFtZVJlcXVlc3Q9dm9pZCAwLHQuZnJhbWVSZXF1ZXN0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuc2VyaWFsaXplQmluYXJ5KCksbj1uZXcgQXJyYXlCdWZmZXIodC5ieXRlTGVuZ3RoKzUpO3JldHVybiBuZXcgRGF0YVZpZXcobiwxLDQpLnNldFVpbnQzMigwLHQubGVuZ3RoLCExKSxuZXcgVWludDhBcnJheShuLDUpLnNldCh0KSxuZXcgVWludDhBcnJheShuKX19fSxuPXt9LGZ1bmN0aW9uIGUocil7aWYobltyXSlyZXR1cm4gbltyXS5leHBvcnRzO3ZhciBpPW5bcl09e2V4cG9ydHM6e319O3JldHVybiB0W3JdLmNhbGwoaS5leHBvcnRzLGksaS5leHBvcnRzLGUpLGkuZXhwb3J0c30oNjA3KSl9LDM4Njk0OmU9PntlLmV4cG9ydHM9bjt2YXIgdD1udWxsO3RyeXt0PW5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKG5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDEzLDIsOTYsMCwxLDEyNyw5Niw0LDEyNywxMjcsMTI3LDEyNywxLDEyNywzLDcsNiwwLDEsMSwxLDEsMSw2LDYsMSwxMjcsMSw2NSwwLDExLDcsNTAsNiwzLDEwOSwxMTcsMTA4LDAsMSw1LDEwMCwxMDUsMTE4LDk1LDExNSwwLDIsNSwxMDAsMTA1LDExOCw5NSwxMTcsMCwzLDUsMTE0LDEwMSwxMDksOTUsMTE1LDAsNCw1LDExNCwxMDEsMTA5LDk1LDExNywwLDUsOCwxMDMsMTAxLDExNiw5NSwxMDQsMTA1LDEwMywxMDQsMCwwLDEwLDE5MSwxLDYsNCwwLDM1LDAsMTEsMzYsMSwxLDEyNiwzMiwwLDE3MywzMiwxLDE3Myw2NiwzMiwxMzQsMTMyLDMyLDIsMTczLDMyLDMsMTczLDY2LDMyLDEzNCwxMzIsMTI2LDM0LDQsNjYsMzIsMTM1LDE2NywzNiwwLDMyLDQsMTY3LDExLDM2LDEsMSwxMjYsMzIsMCwxNzMsMzIsMSwxNzMsNjYsMzIsMTM0LDEzMiwzMiwyLDE3MywzMiwzLDE3Myw2NiwzMiwxMzQsMTMyLDEyNywzNCw0LDY2LDMyLDEzNSwxNjcsMzYsMCwzMiw0LDE2NywxMSwzNiwxLDEsMTI2LDMyLDAsMTczLDMyLDEsMTczLDY2LDMyLDEzNCwxMzIsMzIsMiwxNzMsMzIsMywxNzMsNjYsMzIsMTM0LDEzMiwxMjgsMzQsNCw2NiwzMiwxMzUsMTY3LDM2LDAsMzIsNCwxNjcsMTEsMzYsMSwxLDEyNiwzMiwwLDE3MywzMiwxLDE3Myw2NiwzMiwxMzQsMTMyLDMyLDIsMTczLDMyLDMsMTczLDY2LDMyLDEzNCwxMzIsMTI5LDM0LDQsNjYsMzIsMTM1LDE2NywzNiwwLDMyLDQsMTY3LDExLDM2LDEsMSwxMjYsMzIsMCwxNzMsMzIsMSwxNzMsNjYsMzIsMTM0LDEzMiwzMiwyLDE3MywzMiwzLDE3Myw2NiwzMiwxMzQsMTMyLDEzMCwzNCw0LDY2LDMyLDEzNSwxNjcsMzYsMCwzMiw0LDE2NywxMV0pKSx7fSkuZXhwb3J0c31jYXRjaChlKXt9ZnVuY3Rpb24gbihlLHQsbil7dGhpcy5sb3c9MHxlLHRoaXMuaGlnaD0wfHQsdGhpcy51bnNpZ25lZD0hIW59ZnVuY3Rpb24gcihlKXtyZXR1cm4hMD09PShlJiZlLl9faXNMb25nX18pfW4ucHJvdG90eXBlLl9faXNMb25nX18sT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFwiX19pc0xvbmdfX1wiLHt2YWx1ZTohMH0pLG4uaXNMb25nPXI7dmFyIGk9e30sbz17fTtmdW5jdGlvbiBhKGUsdCl7dmFyIG4scixhO3JldHVybiB0PyhhPTA8PShlPj4+PTApJiZlPDI1NikmJihyPW9bZV0pP3I6KG49YyhlLCgwfGUpPDA/LTE6MCwhMCksYSYmKG9bZV09biksbik6KGE9LTEyODw9KGV8PTApJiZlPDEyOCkmJihyPWlbZV0pP3I6KG49YyhlLGU8MD8tMTowLCExKSxhJiYoaVtlXT1uKSxuKX1mdW5jdGlvbiBzKGUsdCl7aWYoaXNOYU4oZSkpcmV0dXJuIHQ/Zzp2O2lmKHQpe2lmKGU8MClyZXR1cm4gZztpZihlPj1wKXJldHVybiBTfWVsc2V7aWYoZTw9LW0pcmV0dXJuIGI7aWYoZSsxPj1tKXJldHVybiBJfXJldHVybiBlPDA/cygtZSx0KS5uZWcoKTpjKGUlZnwwLGUvZnwwLHQpfWZ1bmN0aW9uIGMoZSx0LHIpe3JldHVybiBuZXcgbihlLHQscil9bi5mcm9tSW50PWEsbi5mcm9tTnVtYmVyPXMsbi5mcm9tQml0cz1jO3ZhciBsPU1hdGgucG93O2Z1bmN0aW9uIHUoZSx0LG4pe2lmKDA9PT1lLmxlbmd0aCl0aHJvdyBFcnJvcihcImVtcHR5IHN0cmluZ1wiKTtpZihcIk5hTlwiPT09ZXx8XCJJbmZpbml0eVwiPT09ZXx8XCIrSW5maW5pdHlcIj09PWV8fFwiLUluZmluaXR5XCI9PT1lKXJldHVybiB2O2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0PyhuPXQsdD0hMSk6dD0hIXQsKG49bnx8MTApPDJ8fDM2PG4pdGhyb3cgUmFuZ2VFcnJvcihcInJhZGl4XCIpO3ZhciByO2lmKChyPWUuaW5kZXhPZihcIi1cIikpPjApdGhyb3cgRXJyb3IoXCJpbnRlcmlvciBoeXBoZW5cIik7aWYoMD09PXIpcmV0dXJuIHUoZS5zdWJzdHJpbmcoMSksdCxuKS5uZWcoKTtmb3IodmFyIGk9cyhsKG4sOCkpLG89dixhPTA7YTxlLmxlbmd0aDthKz04KXt2YXIgYz1NYXRoLm1pbig4LGUubGVuZ3RoLWEpLGQ9cGFyc2VJbnQoZS5zdWJzdHJpbmcoYSxhK2MpLG4pO2lmKGM8OCl7dmFyIGY9cyhsKG4sYykpO289by5tdWwoZikuYWRkKHMoZCkpfWVsc2Ugbz0obz1vLm11bChpKSkuYWRkKHMoZCkpfXJldHVybiBvLnVuc2lnbmVkPXQsb31mdW5jdGlvbiBkKGUsdCl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGU/cyhlLHQpOlwic3RyaW5nXCI9PXR5cGVvZiBlP3UoZSx0KTpjKGUubG93LGUuaGlnaCxcImJvb2xlYW5cIj09dHlwZW9mIHQ/dDplLnVuc2lnbmVkKX1uLmZyb21TdHJpbmc9dSxuLmZyb21WYWx1ZT1kO3ZhciBmPTQyOTQ5NjcyOTYscD1mKmYsbT1wLzIsaD1hKDE8PDI0KSx2PWEoMCk7bi5aRVJPPXY7dmFyIGc9YSgwLCEwKTtuLlVaRVJPPWc7dmFyIHk9YSgxKTtuLk9ORT15O3ZhciBFPWEoMSwhMCk7bi5VT05FPUU7dmFyIF89YSgtMSk7bi5ORUdfT05FPV87dmFyIEk9YygtMSwyMTQ3NDgzNjQ3LCExKTtuLk1BWF9WQUxVRT1JO3ZhciBTPWMoLTEsLTEsITApO24uTUFYX1VOU0lHTkVEX1ZBTFVFPVM7dmFyIGI9YygwLC0yMTQ3NDgzNjQ4LCExKTtuLk1JTl9WQUxVRT1iO3ZhciBUPW4ucHJvdG90eXBlO1QudG9JbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bnNpZ25lZD90aGlzLmxvdz4+PjA6dGhpcy5sb3d9LFQudG9OdW1iZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bnNpZ25lZD8odGhpcy5oaWdoPj4+MCkqZisodGhpcy5sb3c+Pj4wKTp0aGlzLmhpZ2gqZisodGhpcy5sb3c+Pj4wKX0sVC50b1N0cmluZz1mdW5jdGlvbihlKXtpZigoZT1lfHwxMCk8Mnx8MzY8ZSl0aHJvdyBSYW5nZUVycm9yKFwicmFkaXhcIik7aWYodGhpcy5pc1plcm8oKSlyZXR1cm5cIjBcIjtpZih0aGlzLmlzTmVnYXRpdmUoKSl7aWYodGhpcy5lcShiKSl7dmFyIHQ9cyhlKSxuPXRoaXMuZGl2KHQpLHI9bi5tdWwodCkuc3ViKHRoaXMpO3JldHVybiBuLnRvU3RyaW5nKGUpK3IudG9JbnQoKS50b1N0cmluZyhlKX1yZXR1cm5cIi1cIit0aGlzLm5lZygpLnRvU3RyaW5nKGUpfWZvcih2YXIgaT1zKGwoZSw2KSx0aGlzLnVuc2lnbmVkKSxvPXRoaXMsYT1cIlwiOzspe3ZhciBjPW8uZGl2KGkpLHU9KG8uc3ViKGMubXVsKGkpKS50b0ludCgpPj4+MCkudG9TdHJpbmcoZSk7aWYoKG89YykuaXNaZXJvKCkpcmV0dXJuIHUrYTtmb3IoO3UubGVuZ3RoPDY7KXU9XCIwXCIrdTthPVwiXCIrdSthfX0sVC5nZXRIaWdoQml0cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhpZ2h9LFQuZ2V0SGlnaEJpdHNVbnNpZ25lZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhpZ2g+Pj4wfSxULmdldExvd0JpdHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb3d9LFQuZ2V0TG93Qml0c1Vuc2lnbmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG93Pj4+MH0sVC5nZXROdW1CaXRzQWJzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc05lZ2F0aXZlKCkpcmV0dXJuIHRoaXMuZXEoYik/NjQ6dGhpcy5uZWcoKS5nZXROdW1CaXRzQWJzKCk7Zm9yKHZhciBlPTAhPXRoaXMuaGlnaD90aGlzLmhpZ2g6dGhpcy5sb3csdD0zMTt0PjAmJjA9PShlJjE8PHQpO3QtLSk7cmV0dXJuIDAhPXRoaXMuaGlnaD90KzMzOnQrMX0sVC5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuaGlnaCYmMD09PXRoaXMubG93fSxULmVxej1ULmlzWmVybyxULmlzTmVnYXRpdmU9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy51bnNpZ25lZCYmdGhpcy5oaWdoPDB9LFQuaXNQb3NpdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnVuc2lnbmVkfHx0aGlzLmhpZ2g+PTB9LFQuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09KDEmdGhpcy5sb3cpfSxULmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT0oMSZ0aGlzLmxvdyl9LFQuZXF1YWxzPWZ1bmN0aW9uKGUpe3JldHVybiByKGUpfHwoZT1kKGUpKSwodGhpcy51bnNpZ25lZD09PWUudW5zaWduZWR8fHRoaXMuaGlnaD4+PjMxIT0xfHxlLmhpZ2g+Pj4zMSE9MSkmJnRoaXMuaGlnaD09PWUuaGlnaCYmdGhpcy5sb3c9PT1lLmxvd30sVC5lcT1ULmVxdWFscyxULm5vdEVxdWFscz1mdW5jdGlvbihlKXtyZXR1cm4hdGhpcy5lcShlKX0sVC5uZXE9VC5ub3RFcXVhbHMsVC5uZT1ULm5vdEVxdWFscyxULmxlc3NUaGFuPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNvbXAoZSk8MH0sVC5sdD1ULmxlc3NUaGFuLFQubGVzc1RoYW5PckVxdWFsPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNvbXAoZSk8PTB9LFQubHRlPVQubGVzc1RoYW5PckVxdWFsLFQubGU9VC5sZXNzVGhhbk9yRXF1YWwsVC5ncmVhdGVyVGhhbj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jb21wKGUpPjB9LFQuZ3Q9VC5ncmVhdGVyVGhhbixULmdyZWF0ZXJUaGFuT3JFcXVhbD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jb21wKGUpPj0wfSxULmd0ZT1ULmdyZWF0ZXJUaGFuT3JFcXVhbCxULmdlPVQuZ3JlYXRlclRoYW5PckVxdWFsLFQuY29tcGFyZT1mdW5jdGlvbihlKXtpZihyKGUpfHwoZT1kKGUpKSx0aGlzLmVxKGUpKXJldHVybiAwO3ZhciB0PXRoaXMuaXNOZWdhdGl2ZSgpLG49ZS5pc05lZ2F0aXZlKCk7cmV0dXJuIHQmJiFuPy0xOiF0JiZuPzE6dGhpcy51bnNpZ25lZD9lLmhpZ2g+Pj4wPnRoaXMuaGlnaD4+PjB8fGUuaGlnaD09PXRoaXMuaGlnaCYmZS5sb3c+Pj4wPnRoaXMubG93Pj4+MD8tMToxOnRoaXMuc3ViKGUpLmlzTmVnYXRpdmUoKT8tMToxfSxULmNvbXA9VC5jb21wYXJlLFQubmVnYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMudW5zaWduZWQmJnRoaXMuZXEoYik/Yjp0aGlzLm5vdCgpLmFkZCh5KX0sVC5uZWc9VC5uZWdhdGUsVC5hZGQ9ZnVuY3Rpb24oZSl7cihlKXx8KGU9ZChlKSk7dmFyIHQ9dGhpcy5oaWdoPj4+MTYsbj02NTUzNSZ0aGlzLmhpZ2gsaT10aGlzLmxvdz4+PjE2LG89NjU1MzUmdGhpcy5sb3csYT1lLmhpZ2g+Pj4xNixzPTY1NTM1JmUuaGlnaCxsPWUubG93Pj4+MTYsdT0wLGY9MCxwPTAsbT0wO3JldHVybiBwKz0obSs9bysoNjU1MzUmZS5sb3cpKT4+PjE2LGYrPShwKz1pK2wpPj4+MTYsdSs9KGYrPW4rcyk+Pj4xNix1Kz10K2EsYygocCY9NjU1MzUpPDwxNnwobSY9NjU1MzUpLCh1Jj02NTUzNSk8PDE2fChmJj02NTUzNSksdGhpcy51bnNpZ25lZCl9LFQuc3VidHJhY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSl8fChlPWQoZSkpLHRoaXMuYWRkKGUubmVnKCkpfSxULnN1Yj1ULnN1YnRyYWN0LFQubXVsdGlwbHk9ZnVuY3Rpb24oZSl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gdjtpZihyKGUpfHwoZT1kKGUpKSx0KXJldHVybiBjKHQubXVsKHRoaXMubG93LHRoaXMuaGlnaCxlLmxvdyxlLmhpZ2gpLHQuZ2V0X2hpZ2goKSx0aGlzLnVuc2lnbmVkKTtpZihlLmlzWmVybygpKXJldHVybiB2O2lmKHRoaXMuZXEoYikpcmV0dXJuIGUuaXNPZGQoKT9iOnY7aWYoZS5lcShiKSlyZXR1cm4gdGhpcy5pc09kZCgpP2I6djtpZih0aGlzLmlzTmVnYXRpdmUoKSlyZXR1cm4gZS5pc05lZ2F0aXZlKCk/dGhpcy5uZWcoKS5tdWwoZS5uZWcoKSk6dGhpcy5uZWcoKS5tdWwoZSkubmVnKCk7aWYoZS5pc05lZ2F0aXZlKCkpcmV0dXJuIHRoaXMubXVsKGUubmVnKCkpLm5lZygpO2lmKHRoaXMubHQoaCkmJmUubHQoaCkpcmV0dXJuIHModGhpcy50b051bWJlcigpKmUudG9OdW1iZXIoKSx0aGlzLnVuc2lnbmVkKTt2YXIgbj10aGlzLmhpZ2g+Pj4xNixpPTY1NTM1JnRoaXMuaGlnaCxvPXRoaXMubG93Pj4+MTYsYT02NTUzNSZ0aGlzLmxvdyxsPWUuaGlnaD4+PjE2LHU9NjU1MzUmZS5oaWdoLGY9ZS5sb3c+Pj4xNixwPTY1NTM1JmUubG93LG09MCxnPTAseT0wLEU9MDtyZXR1cm4geSs9KEUrPWEqcCk+Pj4xNixnKz0oeSs9bypwKT4+PjE2LHkmPTY1NTM1LGcrPSh5Kz1hKmYpPj4+MTYsbSs9KGcrPWkqcCk+Pj4xNixnJj02NTUzNSxtKz0oZys9bypmKT4+PjE2LGcmPTY1NTM1LG0rPShnKz1hKnUpPj4+MTYsbSs9bipwK2kqZitvKnUrYSpsLGMoKHkmPTY1NTM1KTw8MTZ8KEUmPTY1NTM1KSwobSY9NjU1MzUpPDwxNnwoZyY9NjU1MzUpLHRoaXMudW5zaWduZWQpfSxULm11bD1ULm11bHRpcGx5LFQuZGl2aWRlPWZ1bmN0aW9uKGUpe2lmKHIoZSl8fChlPWQoZSkpLGUuaXNaZXJvKCkpdGhyb3cgRXJyb3IoXCJkaXZpc2lvbiBieSB6ZXJvXCIpO3ZhciBuLGksbztpZih0KXJldHVybiB0aGlzLnVuc2lnbmVkfHwtMjE0NzQ4MzY0OCE9PXRoaXMuaGlnaHx8LTEhPT1lLmxvd3x8LTEhPT1lLmhpZ2g/YygodGhpcy51bnNpZ25lZD90LmRpdl91OnQuZGl2X3MpKHRoaXMubG93LHRoaXMuaGlnaCxlLmxvdyxlLmhpZ2gpLHQuZ2V0X2hpZ2goKSx0aGlzLnVuc2lnbmVkKTp0aGlzO2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHRoaXMudW5zaWduZWQ/Zzp2O2lmKHRoaXMudW5zaWduZWQpe2lmKGUudW5zaWduZWR8fChlPWUudG9VbnNpZ25lZCgpKSxlLmd0KHRoaXMpKXJldHVybiBnO2lmKGUuZ3QodGhpcy5zaHJ1KDEpKSlyZXR1cm4gRTtvPWd9ZWxzZXtpZih0aGlzLmVxKGIpKXJldHVybiBlLmVxKHkpfHxlLmVxKF8pP2I6ZS5lcShiKT95OihuPXRoaXMuc2hyKDEpLmRpdihlKS5zaGwoMSkpLmVxKHYpP2UuaXNOZWdhdGl2ZSgpP3k6XzooaT10aGlzLnN1YihlLm11bChuKSksbz1uLmFkZChpLmRpdihlKSkpO2lmKGUuZXEoYikpcmV0dXJuIHRoaXMudW5zaWduZWQ/Zzp2O2lmKHRoaXMuaXNOZWdhdGl2ZSgpKXJldHVybiBlLmlzTmVnYXRpdmUoKT90aGlzLm5lZygpLmRpdihlLm5lZygpKTp0aGlzLm5lZygpLmRpdihlKS5uZWcoKTtpZihlLmlzTmVnYXRpdmUoKSlyZXR1cm4gdGhpcy5kaXYoZS5uZWcoKSkubmVnKCk7bz12fWZvcihpPXRoaXM7aS5ndGUoZSk7KXtuPU1hdGgubWF4KDEsTWF0aC5mbG9vcihpLnRvTnVtYmVyKCkvZS50b051bWJlcigpKSk7Zm9yKHZhciBhPU1hdGguY2VpbChNYXRoLmxvZyhuKS9NYXRoLkxOMiksdT1hPD00OD8xOmwoMixhLTQ4KSxmPXMobikscD1mLm11bChlKTtwLmlzTmVnYXRpdmUoKXx8cC5ndChpKTspcD0oZj1zKG4tPXUsdGhpcy51bnNpZ25lZCkpLm11bChlKTtmLmlzWmVybygpJiYoZj15KSxvPW8uYWRkKGYpLGk9aS5zdWIocCl9cmV0dXJuIG99LFQuZGl2PVQuZGl2aWRlLFQubW9kdWxvPWZ1bmN0aW9uKGUpe3JldHVybiByKGUpfHwoZT1kKGUpKSx0P2MoKHRoaXMudW5zaWduZWQ/dC5yZW1fdTp0LnJlbV9zKSh0aGlzLmxvdyx0aGlzLmhpZ2gsZS5sb3csZS5oaWdoKSx0LmdldF9oaWdoKCksdGhpcy51bnNpZ25lZCk6dGhpcy5zdWIodGhpcy5kaXYoZSkubXVsKGUpKX0sVC5tb2Q9VC5tb2R1bG8sVC5yZW09VC5tb2R1bG8sVC5ub3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYyh+dGhpcy5sb3csfnRoaXMuaGlnaCx0aGlzLnVuc2lnbmVkKX0sVC5hbmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSl8fChlPWQoZSkpLGModGhpcy5sb3cmZS5sb3csdGhpcy5oaWdoJmUuaGlnaCx0aGlzLnVuc2lnbmVkKX0sVC5vcj1mdW5jdGlvbihlKXtyZXR1cm4gcihlKXx8KGU9ZChlKSksYyh0aGlzLmxvd3xlLmxvdyx0aGlzLmhpZ2h8ZS5oaWdoLHRoaXMudW5zaWduZWQpfSxULnhvcj1mdW5jdGlvbihlKXtyZXR1cm4gcihlKXx8KGU9ZChlKSksYyh0aGlzLmxvd15lLmxvdyx0aGlzLmhpZ2heZS5oaWdoLHRoaXMudW5zaWduZWQpfSxULnNoaWZ0TGVmdD1mdW5jdGlvbihlKXtyZXR1cm4gcihlKSYmKGU9ZS50b0ludCgpKSwwPT0oZSY9NjMpP3RoaXM6ZTwzMj9jKHRoaXMubG93PDxlLHRoaXMuaGlnaDw8ZXx0aGlzLmxvdz4+PjMyLWUsdGhpcy51bnNpZ25lZCk6YygwLHRoaXMubG93PDxlLTMyLHRoaXMudW5zaWduZWQpfSxULnNobD1ULnNoaWZ0TGVmdCxULnNoaWZ0UmlnaHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSkmJihlPWUudG9JbnQoKSksMD09KGUmPTYzKT90aGlzOmU8MzI/Yyh0aGlzLmxvdz4+PmV8dGhpcy5oaWdoPDwzMi1lLHRoaXMuaGlnaD4+ZSx0aGlzLnVuc2lnbmVkKTpjKHRoaXMuaGlnaD4+ZS0zMix0aGlzLmhpZ2g+PTA/MDotMSx0aGlzLnVuc2lnbmVkKX0sVC5zaHI9VC5zaGlmdFJpZ2h0LFQuc2hpZnRSaWdodFVuc2lnbmVkPWZ1bmN0aW9uKGUpe2lmKHIoZSkmJihlPWUudG9JbnQoKSksMD09KGUmPTYzKSlyZXR1cm4gdGhpczt2YXIgdD10aGlzLmhpZ2g7cmV0dXJuIGU8MzI/Yyh0aGlzLmxvdz4+PmV8dDw8MzItZSx0Pj4+ZSx0aGlzLnVuc2lnbmVkKTpjKDMyPT09ZT90OnQ+Pj5lLTMyLDAsdGhpcy51bnNpZ25lZCl9LFQuc2hydT1ULnNoaWZ0UmlnaHRVbnNpZ25lZCxULnNocl91PVQuc2hpZnRSaWdodFVuc2lnbmVkLFQudG9TaWduZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bnNpZ25lZD9jKHRoaXMubG93LHRoaXMuaGlnaCwhMSk6dGhpc30sVC50b1Vuc2lnbmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5zaWduZWQ/dGhpczpjKHRoaXMubG93LHRoaXMuaGlnaCwhMCl9LFQudG9CeXRlcz1mdW5jdGlvbihlKXtyZXR1cm4gZT90aGlzLnRvQnl0ZXNMRSgpOnRoaXMudG9CeXRlc0JFKCl9LFQudG9CeXRlc0xFPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oaWdoLHQ9dGhpcy5sb3c7cmV0dXJuWzI1NSZ0LHQ+Pj44JjI1NSx0Pj4+MTYmMjU1LHQ+Pj4yNCwyNTUmZSxlPj4+OCYyNTUsZT4+PjE2JjI1NSxlPj4+MjRdfSxULnRvQnl0ZXNCRT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuaGlnaCx0PXRoaXMubG93O3JldHVybltlPj4+MjQsZT4+PjE2JjI1NSxlPj4+OCYyNTUsMjU1JmUsdD4+PjI0LHQ+Pj4xNiYyNTUsdD4+PjgmMjU1LDI1NSZ0XX0sbi5mcm9tQnl0ZXM9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiByP24uZnJvbUJ5dGVzTEUoZSx0KTpuLmZyb21CeXRlc0JFKGUsdCl9LG4uZnJvbUJ5dGVzTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IG4oZVswXXxlWzFdPDw4fGVbMl08PDE2fGVbM108PDI0LGVbNF18ZVs1XTw8OHxlWzZdPDwxNnxlWzddPDwyNCx0KX0sbi5mcm9tQnl0ZXNCRT1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgbihlWzRdPDwyNHxlWzVdPDwxNnxlWzZdPDw4fGVbN10sZVswXTw8MjR8ZVsxXTw8MTZ8ZVsyXTw8OHxlWzNdLHQpfX0sNTU0NTk6KGUsdCxuKT0+e2UuZXhwb3J0cz1uKDc3MDkzKX0sNzcwOTM6KGUsdCxuKT0+e3ZhciByPXQ7ZnVuY3Rpb24gaSgpe3IudXRpbC5fY29uZmlndXJlKCksci5Xcml0ZXIuX2NvbmZpZ3VyZShyLkJ1ZmZlcldyaXRlciksci5SZWFkZXIuX2NvbmZpZ3VyZShyLkJ1ZmZlclJlYWRlcil9ci5idWlsZD1cIm1pbmltYWxcIixyLldyaXRlcj1uKDg3ODgpLHIuQnVmZmVyV3JpdGVyPW4oNjY3MTMpLHIuUmVhZGVyPW4oOTEzNTApLHIuQnVmZmVyUmVhZGVyPW4oMjY0MTQpLHIudXRpbD1uKDg2Njg0KSxyLnJwYz1uKDE5NjI0KSxyLnJvb3RzPW4oMzI5NDUpLHIuY29uZmlndXJlPWksaSgpfSw5MTM1MDooZSx0LG4pPT57ZS5leHBvcnRzPWM7dmFyIHIsaT1uKDg2Njg0KSxvPWkuTG9uZ0JpdHMsYT1pLnV0Zjg7ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBSYW5nZUVycm9yKFwiaW5kZXggb3V0IG9mIHJhbmdlOiBcIitlLnBvcytcIiArIFwiKyh0fHwxKStcIiA+IFwiK2UubGVuKX1mdW5jdGlvbiBjKGUpe3RoaXMuYnVmPWUsdGhpcy5wb3M9MCx0aGlzLmxlbj1lLmxlbmd0aH12YXIgbCx1PVwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50OEFycmF5P2Z1bmN0aW9uKGUpe2lmKGUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxBcnJheS5pc0FycmF5KGUpKXJldHVybiBuZXcgYyhlKTt0aHJvdyBFcnJvcihcImlsbGVnYWwgYnVmZmVyXCIpfTpmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBuZXcgYyhlKTt0aHJvdyBFcnJvcihcImlsbGVnYWwgYnVmZmVyXCIpfSxkPWZ1bmN0aW9uKCl7cmV0dXJuIGkuQnVmZmVyP2Z1bmN0aW9uKGUpe3JldHVybihjLmNyZWF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gaS5CdWZmZXIuaXNCdWZmZXIoZSk/bmV3IHIoZSk6dShlKX0pKGUpfTp1fTtmdW5jdGlvbiBmKCl7dmFyIGU9bmV3IG8oMCwwKSx0PTA7aWYoISh0aGlzLmxlbi10aGlzLnBvcz40KSl7Zm9yKDt0PDM7Kyt0KXtpZih0aGlzLnBvcz49dGhpcy5sZW4pdGhyb3cgcyh0aGlzKTtpZihlLmxvPShlLmxvfCgxMjcmdGhpcy5idWZbdGhpcy5wb3NdKTw8Nyp0KT4+PjAsdGhpcy5idWZbdGhpcy5wb3MrK108MTI4KXJldHVybiBlfXJldHVybiBlLmxvPShlLmxvfCgxMjcmdGhpcy5idWZbdGhpcy5wb3MrK10pPDw3KnQpPj4+MCxlfWZvcig7dDw0OysrdClpZihlLmxvPShlLmxvfCgxMjcmdGhpcy5idWZbdGhpcy5wb3NdKTw8Nyp0KT4+PjAsdGhpcy5idWZbdGhpcy5wb3MrK108MTI4KXJldHVybiBlO2lmKGUubG89KGUubG98KDEyNyZ0aGlzLmJ1Zlt0aGlzLnBvc10pPDwyOCk+Pj4wLGUuaGk9KGUuaGl8KDEyNyZ0aGlzLmJ1Zlt0aGlzLnBvc10pPj40KT4+PjAsdGhpcy5idWZbdGhpcy5wb3MrK108MTI4KXJldHVybiBlO2lmKHQ9MCx0aGlzLmxlbi10aGlzLnBvcz40KXtmb3IoO3Q8NTsrK3QpaWYoZS5oaT0oZS5oaXwoMTI3JnRoaXMuYnVmW3RoaXMucG9zXSk8PDcqdCszKT4+PjAsdGhpcy5idWZbdGhpcy5wb3MrK108MTI4KXJldHVybiBlfWVsc2UgZm9yKDt0PDU7Kyt0KXtpZih0aGlzLnBvcz49dGhpcy5sZW4pdGhyb3cgcyh0aGlzKTtpZihlLmhpPShlLmhpfCgxMjcmdGhpcy5idWZbdGhpcy5wb3NdKTw8Nyp0KzMpPj4+MCx0aGlzLmJ1Zlt0aGlzLnBvcysrXTwxMjgpcmV0dXJuIGV9dGhyb3cgRXJyb3IoXCJpbnZhbGlkIHZhcmludCBlbmNvZGluZ1wiKX1mdW5jdGlvbiBwKGUsdCl7cmV0dXJuKGVbdC00XXxlW3QtM108PDh8ZVt0LTJdPDwxNnxlW3QtMV08PDI0KT4+PjB9ZnVuY3Rpb24gbSgpe2lmKHRoaXMucG9zKzg+dGhpcy5sZW4pdGhyb3cgcyh0aGlzLDgpO3JldHVybiBuZXcgbyhwKHRoaXMuYnVmLHRoaXMucG9zKz00KSxwKHRoaXMuYnVmLHRoaXMucG9zKz00KSl9Yy5jcmVhdGU9ZCgpLGMucHJvdG90eXBlLl9zbGljZT1pLkFycmF5LnByb3RvdHlwZS5zdWJhcnJheXx8aS5BcnJheS5wcm90b3R5cGUuc2xpY2UsYy5wcm90b3R5cGUudWludDMyPShsPTQyOTQ5NjcyOTUsZnVuY3Rpb24oKXtpZihsPSgxMjcmdGhpcy5idWZbdGhpcy5wb3NdKT4+PjAsdGhpcy5idWZbdGhpcy5wb3MrK108MTI4KXJldHVybiBsO2lmKGw9KGx8KDEyNyZ0aGlzLmJ1Zlt0aGlzLnBvc10pPDw3KT4+PjAsdGhpcy5idWZbdGhpcy5wb3MrK108MTI4KXJldHVybiBsO2lmKGw9KGx8KDEyNyZ0aGlzLmJ1Zlt0aGlzLnBvc10pPDwxNCk+Pj4wLHRoaXMuYnVmW3RoaXMucG9zKytdPDEyOClyZXR1cm4gbDtpZihsPShsfCgxMjcmdGhpcy5idWZbdGhpcy5wb3NdKTw8MjEpPj4+MCx0aGlzLmJ1Zlt0aGlzLnBvcysrXTwxMjgpcmV0dXJuIGw7aWYobD0obHwoMTUmdGhpcy5idWZbdGhpcy5wb3NdKTw8MjgpPj4+MCx0aGlzLmJ1Zlt0aGlzLnBvcysrXTwxMjgpcmV0dXJuIGw7aWYoKHRoaXMucG9zKz01KT50aGlzLmxlbil0aHJvdyB0aGlzLnBvcz10aGlzLmxlbixzKHRoaXMsMTApO3JldHVybiBsfSksYy5wcm90b3R5cGUuaW50MzI9ZnVuY3Rpb24oKXtyZXR1cm4gMHx0aGlzLnVpbnQzMigpfSxjLnByb3RvdHlwZS5zaW50MzI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnVpbnQzMigpO3JldHVybiBlPj4+MV4tKDEmZSl8MH0sYy5wcm90b3R5cGUuYm9vbD1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy51aW50MzIoKX0sYy5wcm90b3R5cGUuZml4ZWQzMj1mdW5jdGlvbigpe2lmKHRoaXMucG9zKzQ+dGhpcy5sZW4pdGhyb3cgcyh0aGlzLDQpO3JldHVybiBwKHRoaXMuYnVmLHRoaXMucG9zKz00KX0sYy5wcm90b3R5cGUuc2ZpeGVkMzI9ZnVuY3Rpb24oKXtpZih0aGlzLnBvcys0PnRoaXMubGVuKXRocm93IHModGhpcyw0KTtyZXR1cm4gMHxwKHRoaXMuYnVmLHRoaXMucG9zKz00KX0sYy5wcm90b3R5cGUuZmxvYXQ9ZnVuY3Rpb24oKXtpZih0aGlzLnBvcys0PnRoaXMubGVuKXRocm93IHModGhpcyw0KTt2YXIgZT1pLmZsb2F0LnJlYWRGbG9hdExFKHRoaXMuYnVmLHRoaXMucG9zKTtyZXR1cm4gdGhpcy5wb3MrPTQsZX0sYy5wcm90b3R5cGUuZG91YmxlPWZ1bmN0aW9uKCl7aWYodGhpcy5wb3MrOD50aGlzLmxlbil0aHJvdyBzKHRoaXMsNCk7dmFyIGU9aS5mbG9hdC5yZWFkRG91YmxlTEUodGhpcy5idWYsdGhpcy5wb3MpO3JldHVybiB0aGlzLnBvcys9OCxlfSxjLnByb3RvdHlwZS5ieXRlcz1mdW5jdGlvbigpe3ZhciBlPXRoaXMudWludDMyKCksdD10aGlzLnBvcyxuPXRoaXMucG9zK2U7aWYobj50aGlzLmxlbil0aHJvdyBzKHRoaXMsZSk7cmV0dXJuIHRoaXMucG9zKz1lLEFycmF5LmlzQXJyYXkodGhpcy5idWYpP3RoaXMuYnVmLnNsaWNlKHQsbik6dD09PW4/bmV3IHRoaXMuYnVmLmNvbnN0cnVjdG9yKDApOnRoaXMuX3NsaWNlLmNhbGwodGhpcy5idWYsdCxuKX0sYy5wcm90b3R5cGUuc3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5ieXRlcygpO3JldHVybiBhLnJlYWQoZSwwLGUubGVuZ3RoKX0sYy5wcm90b3R5cGUuc2tpcD1mdW5jdGlvbihlKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSl7aWYodGhpcy5wb3MrZT50aGlzLmxlbil0aHJvdyBzKHRoaXMsZSk7dGhpcy5wb3MrPWV9ZWxzZSBkb3tpZih0aGlzLnBvcz49dGhpcy5sZW4pdGhyb3cgcyh0aGlzKX13aGlsZSgxMjgmdGhpcy5idWZbdGhpcy5wb3MrK10pO3JldHVybiB0aGlzfSxjLnByb3RvdHlwZS5za2lwVHlwZT1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSAwOnRoaXMuc2tpcCgpO2JyZWFrO2Nhc2UgMTp0aGlzLnNraXAoOCk7YnJlYWs7Y2FzZSAyOnRoaXMuc2tpcCh0aGlzLnVpbnQzMigpKTticmVhaztjYXNlIDM6Zm9yKDs0IT0oZT03JnRoaXMudWludDMyKCkpOyl0aGlzLnNraXBUeXBlKGUpO2JyZWFrO2Nhc2UgNTp0aGlzLnNraXAoNCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcihcImludmFsaWQgd2lyZSB0eXBlIFwiK2UrXCIgYXQgb2Zmc2V0IFwiK3RoaXMucG9zKX1yZXR1cm4gdGhpc30sYy5fY29uZmlndXJlPWZ1bmN0aW9uKGUpe3I9ZSxjLmNyZWF0ZT1kKCksci5fY29uZmlndXJlKCk7dmFyIHQ9aS5Mb25nP1widG9Mb25nXCI6XCJ0b051bWJlclwiO2kubWVyZ2UoYy5wcm90b3R5cGUse2ludDY0OmZ1bmN0aW9uKCl7cmV0dXJuIGYuY2FsbCh0aGlzKVt0XSghMSl9LHVpbnQ2NDpmdW5jdGlvbigpe3JldHVybiBmLmNhbGwodGhpcylbdF0oITApfSxzaW50NjQ6ZnVuY3Rpb24oKXtyZXR1cm4gZi5jYWxsKHRoaXMpLnp6RGVjb2RlKClbdF0oITEpfSxmaXhlZDY0OmZ1bmN0aW9uKCl7cmV0dXJuIG0uY2FsbCh0aGlzKVt0XSghMCl9LHNmaXhlZDY0OmZ1bmN0aW9uKCl7cmV0dXJuIG0uY2FsbCh0aGlzKVt0XSghMSl9fSl9fSwyNjQxNDooZSx0LG4pPT57ZS5leHBvcnRzPW87dmFyIHI9big5MTM1MCk7KG8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoci5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1vO3ZhciBpPW4oODY2ODQpO2Z1bmN0aW9uIG8oZSl7ci5jYWxsKHRoaXMsZSl9by5fY29uZmlndXJlPWZ1bmN0aW9uKCl7aS5CdWZmZXImJihvLnByb3RvdHlwZS5fc2xpY2U9aS5CdWZmZXIucHJvdG90eXBlLnNsaWNlKX0sby5wcm90b3R5cGUuc3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy51aW50MzIoKTtyZXR1cm4gdGhpcy5idWYudXRmOFNsaWNlP3RoaXMuYnVmLnV0ZjhTbGljZSh0aGlzLnBvcyx0aGlzLnBvcz1NYXRoLm1pbih0aGlzLnBvcytlLHRoaXMubGVuKSk6dGhpcy5idWYudG9TdHJpbmcoXCJ1dGYtOFwiLHRoaXMucG9zLHRoaXMucG9zPU1hdGgubWluKHRoaXMucG9zK2UsdGhpcy5sZW4pKX0sby5fY29uZmlndXJlKCl9LDMyOTQ1OmU9PntlLmV4cG9ydHM9e319LDE5NjI0OihlLHQsbik9Pnt0LlNlcnZpY2U9bigxNDc0OSl9LDE0NzQ5OihlLHQsbik9PntlLmV4cG9ydHM9aTt2YXIgcj1uKDg2Njg0KTtmdW5jdGlvbiBpKGUsdCxuKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IFR5cGVFcnJvcihcInJwY0ltcGwgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO3IuRXZlbnRFbWl0dGVyLmNhbGwodGhpcyksdGhpcy5ycGNJbXBsPWUsdGhpcy5yZXF1ZXN0RGVsaW1pdGVkPUJvb2xlYW4odCksdGhpcy5yZXNwb25zZURlbGltaXRlZD1Cb29sZWFuKG4pfShpLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHIuRXZlbnRFbWl0dGVyLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWksaS5wcm90b3R5cGUucnBjQ2FsbD1mdW5jdGlvbiBlKHQsbixpLG8sYSl7aWYoIW8pdGhyb3cgVHlwZUVycm9yKFwicmVxdWVzdCBtdXN0IGJlIHNwZWNpZmllZFwiKTt2YXIgcz10aGlzO2lmKCFhKXJldHVybiByLmFzUHJvbWlzZShlLHMsdCxuLGksbyk7aWYocy5ycGNJbXBsKXRyeXtyZXR1cm4gcy5ycGNJbXBsKHQsbltzLnJlcXVlc3REZWxpbWl0ZWQ/XCJlbmNvZGVEZWxpbWl0ZWRcIjpcImVuY29kZVwiXShvKS5maW5pc2goKSwoZnVuY3Rpb24oZSxuKXtpZihlKXJldHVybiBzLmVtaXQoXCJlcnJvclwiLGUsdCksYShlKTtpZihudWxsIT09bil7aWYoIShuIGluc3RhbmNlb2YgaSkpdHJ5e249aVtzLnJlc3BvbnNlRGVsaW1pdGVkP1wiZGVjb2RlRGVsaW1pdGVkXCI6XCJkZWNvZGVcIl0obil9Y2F0Y2goZSl7cmV0dXJuIHMuZW1pdChcImVycm9yXCIsZSx0KSxhKGUpfXJldHVybiBzLmVtaXQoXCJkYXRhXCIsbix0KSxhKG51bGwsbil9cy5lbmQoITApfSkpfWNhdGNoKGUpe3JldHVybiBzLmVtaXQoXCJlcnJvclwiLGUsdCksdm9pZCBzZXRUaW1lb3V0KChmdW5jdGlvbigpe2EoZSl9KSwwKX1lbHNlIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7YShFcnJvcihcImFscmVhZHkgZW5kZWRcIikpfSksMCl9LGkucHJvdG90eXBlLmVuZD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5ycGNJbXBsJiYoZXx8dGhpcy5ycGNJbXBsKG51bGwsbnVsbCxudWxsKSx0aGlzLnJwY0ltcGw9bnVsbCx0aGlzLmVtaXQoXCJlbmRcIikub2ZmKCkpLHRoaXN9fSw4MzA4NDooZSx0LG4pPT57ZS5leHBvcnRzPWk7dmFyIHI9big4NjY4NCk7ZnVuY3Rpb24gaShlLHQpe3RoaXMubG89ZT4+PjAsdGhpcy5oaT10Pj4+MH12YXIgbz1pLnplcm89bmV3IGkoMCwwKTtvLnRvTnVtYmVyPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LG8uenpFbmNvZGU9by56ekRlY29kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxvLmxlbmd0aD1mdW5jdGlvbigpe3JldHVybiAxfTt2YXIgYT1pLnplcm9IYXNoPVwiXFwwXFwwXFwwXFwwXFwwXFwwXFwwXFwwXCI7aS5mcm9tTnVtYmVyPWZ1bmN0aW9uKGUpe2lmKDA9PT1lKXJldHVybiBvO3ZhciB0PWU8MDt0JiYoZT0tZSk7dmFyIG49ZT4+PjAscj0oZS1uKS80Mjk0OTY3Mjk2Pj4+MDtyZXR1cm4gdCYmKHI9fnI+Pj4wLG49fm4+Pj4wLCsrbj40Mjk0OTY3Mjk1JiYobj0wLCsrcj40Mjk0OTY3Mjk1JiYocj0wKSkpLG5ldyBpKG4scil9LGkuZnJvbT1mdW5jdGlvbihlKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSlyZXR1cm4gaS5mcm9tTnVtYmVyKGUpO2lmKHIuaXNTdHJpbmcoZSkpe2lmKCFyLkxvbmcpcmV0dXJuIGkuZnJvbU51bWJlcihwYXJzZUludChlLDEwKSk7ZT1yLkxvbmcuZnJvbVN0cmluZyhlKX1yZXR1cm4gZS5sb3d8fGUuaGlnaD9uZXcgaShlLmxvdz4+PjAsZS5oaWdoPj4+MCk6b30saS5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oZSl7aWYoIWUmJnRoaXMuaGk+Pj4zMSl7dmFyIHQ9MSt+dGhpcy5sbz4+PjAsbj1+dGhpcy5oaT4+PjA7cmV0dXJuIHR8fChuPW4rMT4+PjApLC0odCs0Mjk0OTY3Mjk2Km4pfXJldHVybiB0aGlzLmxvKzQyOTQ5NjcyOTYqdGhpcy5oaX0saS5wcm90b3R5cGUudG9Mb25nPWZ1bmN0aW9uKGUpe3JldHVybiByLkxvbmc/bmV3IHIuTG9uZygwfHRoaXMubG8sMHx0aGlzLmhpLEJvb2xlYW4oZSkpOntsb3c6MHx0aGlzLmxvLGhpZ2g6MHx0aGlzLmhpLHVuc2lnbmVkOkJvb2xlYW4oZSl9fTt2YXIgcz1TdHJpbmcucHJvdG90eXBlLmNoYXJDb2RlQXQ7aS5mcm9tSGFzaD1mdW5jdGlvbihlKXtyZXR1cm4gZT09PWE/bzpuZXcgaSgocy5jYWxsKGUsMCl8cy5jYWxsKGUsMSk8PDh8cy5jYWxsKGUsMik8PDE2fHMuY2FsbChlLDMpPDwyNCk+Pj4wLChzLmNhbGwoZSw0KXxzLmNhbGwoZSw1KTw8OHxzLmNhbGwoZSw2KTw8MTZ8cy5jYWxsKGUsNyk8PDI0KT4+PjApfSxpLnByb3RvdHlwZS50b0hhc2g9ZnVuY3Rpb24oKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmdGhpcy5sbyx0aGlzLmxvPj4+OCYyNTUsdGhpcy5sbz4+PjE2JjI1NSx0aGlzLmxvPj4+MjQsMjU1JnRoaXMuaGksdGhpcy5oaT4+PjgmMjU1LHRoaXMuaGk+Pj4xNiYyNTUsdGhpcy5oaT4+PjI0KX0saS5wcm90b3R5cGUuenpFbmNvZGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmhpPj4zMTtyZXR1cm4gdGhpcy5oaT0oKHRoaXMuaGk8PDF8dGhpcy5sbz4+PjMxKV5lKT4+PjAsdGhpcy5sbz0odGhpcy5sbzw8MV5lKT4+PjAsdGhpc30saS5wcm90b3R5cGUuenpEZWNvZGU9ZnVuY3Rpb24oKXt2YXIgZT0tKDEmdGhpcy5sbyk7cmV0dXJuIHRoaXMubG89KCh0aGlzLmxvPj4+MXx0aGlzLmhpPDwzMSleZSk+Pj4wLHRoaXMuaGk9KHRoaXMuaGk+Pj4xXmUpPj4+MCx0aGlzfSxpLnByb3RvdHlwZS5sZW5ndGg9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxvLHQ9KHRoaXMubG8+Pj4yOHx0aGlzLmhpPDw0KT4+PjAsbj10aGlzLmhpPj4+MjQ7cmV0dXJuIDA9PT1uPzA9PT10P2U8MTYzODQ/ZTwxMjg/MToyOmU8MjA5NzE1Mj8zOjQ6dDwxNjM4ND90PDEyOD81OjY6dDwyMDk3MTUyPzc6ODpuPDEyOD85OjEwfX0sODY2ODQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQ7ZnVuY3Rpb24gaShlLHQsbil7Zm9yKHZhciByPU9iamVjdC5rZXlzKHQpLGk9MDtpPHIubGVuZ3RoOysraSl2b2lkIDAhPT1lW3JbaV1dJiZufHwoZVtyW2ldXT10W3JbaV1dKTtyZXR1cm4gZX1mdW5jdGlvbiBvKGUpe2Z1bmN0aW9uIHQoZSxuKXtpZighKHRoaXMgaW5zdGFuY2VvZiB0KSlyZXR1cm4gbmV3IHQoZSxuKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcIm1lc3NhZ2VcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGV9fSksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0KTpPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcInN0YWNrXCIse3ZhbHVlOihuZXcgRXJyb3IpLnN0YWNrfHxcIlwifSksbiYmaSh0aGlzLG4pfXJldHVybih0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXQsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLFwibmFtZVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZX19KSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWUrXCI6IFwiK3RoaXMubWVzc2FnZX0sdH1yLmFzUHJvbWlzZT1uKDM0NTM3KSxyLmJhc2U2ND1uKDk3NDE5KSxyLkV2ZW50RW1pdHRlcj1uKDE5MjExKSxyLmZsb2F0PW4oMTA5NDUpLHIuaW5xdWlyZT1uKDY1OTQ5KSxyLnV0Zjg9big5NDk5Nyksci5wb29sPW4oNzY2NjIpLHIuTG9uZ0JpdHM9big4MzA4NCksci5pc05vZGU9Qm9vbGVhbih2b2lkIDAhPT1uLmcmJm4uZyYmbi5nLnByb2Nlc3MmJm4uZy5wcm9jZXNzLnZlcnNpb25zJiZuLmcucHJvY2Vzcy52ZXJzaW9ucy5ub2RlKSxyLmdsb2JhbD1yLmlzTm9kZSYmbi5nfHxcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3d8fFwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmJiZzZWxmfHx0aGlzLHIuZW1wdHlBcnJheT1PYmplY3QuZnJlZXplP09iamVjdC5mcmVlemUoW10pOltdLHIuZW1wdHlPYmplY3Q9T2JqZWN0LmZyZWV6ZT9PYmplY3QuZnJlZXplKHt9KTp7fSxyLmlzSW50ZWdlcj1OdW1iZXIuaXNJbnRlZ2VyfHxmdW5jdGlvbihlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZSYmaXNGaW5pdGUoZSkmJk1hdGguZmxvb3IoZSk9PT1lfSxyLmlzU3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlfHxlIGluc3RhbmNlb2YgU3RyaW5nfSxyLmlzT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBlJiZcIm9iamVjdFwiPT10eXBlb2YgZX0sci5pc3NldD1yLmlzU2V0PWZ1bmN0aW9uKGUsdCl7dmFyIG49ZVt0XTtyZXR1cm4hKG51bGw9PW58fCFlLmhhc093blByb3BlcnR5KHQpKSYmKFwib2JqZWN0XCIhPXR5cGVvZiBufHwoQXJyYXkuaXNBcnJheShuKT9uLmxlbmd0aDpPYmplY3Qua2V5cyhuKS5sZW5ndGgpPjApfSxyLkJ1ZmZlcj1mdW5jdGlvbigpe3RyeXt2YXIgZT1yLmlucXVpcmUoXCJidWZmZXJcIikuQnVmZmVyO3JldHVybiBlLnByb3RvdHlwZS51dGY4V3JpdGU/ZTpudWxsfWNhdGNoKGUpe3JldHVybiBudWxsfX0oKSxyLl9CdWZmZXJfZnJvbT1udWxsLHIuX0J1ZmZlcl9hbGxvY1Vuc2FmZT1udWxsLHIubmV3QnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlP3IuQnVmZmVyP3IuX0J1ZmZlcl9hbGxvY1Vuc2FmZShlKTpuZXcgci5BcnJheShlKTpyLkJ1ZmZlcj9yLl9CdWZmZXJfZnJvbShlKTpcInVuZGVmaW5lZFwiPT10eXBlb2YgVWludDhBcnJheT9lOm5ldyBVaW50OEFycmF5KGUpfSxyLkFycmF5PVwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50OEFycmF5P1VpbnQ4QXJyYXk6QXJyYXksci5Mb25nPXIuZ2xvYmFsLmRjb2RlSU8mJnIuZ2xvYmFsLmRjb2RlSU8uTG9uZ3x8ci5nbG9iYWwuTG9uZ3x8ci5pbnF1aXJlKFwibG9uZ1wiKSxyLmtleTJSZT0vXnRydWV8ZmFsc2V8MHwxJC8sci5rZXkzMlJlPS9eLT8oPzowfFsxLTldWzAtOV0qKSQvLHIua2V5NjRSZT0vXig/OltcXFxceDAwLVxcXFx4ZmZdezh9fC0/KD86MHxbMS05XVswLTldKikpJC8sci5sb25nVG9IYXNoPWZ1bmN0aW9uKGUpe3JldHVybiBlP3IuTG9uZ0JpdHMuZnJvbShlKS50b0hhc2goKTpyLkxvbmdCaXRzLnplcm9IYXNofSxyLmxvbmdGcm9tSGFzaD1mdW5jdGlvbihlLHQpe3ZhciBuPXIuTG9uZ0JpdHMuZnJvbUhhc2goZSk7cmV0dXJuIHIuTG9uZz9yLkxvbmcuZnJvbUJpdHMobi5sbyxuLmhpLHQpOm4udG9OdW1iZXIoQm9vbGVhbih0KSl9LHIubWVyZ2U9aSxyLmxjRmlyc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkrZS5zdWJzdHJpbmcoMSl9LHIubmV3RXJyb3I9byxyLlByb3RvY29sRXJyb3I9byhcIlByb3RvY29sRXJyb3JcIiksci5vbmVPZkdldHRlcj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9e30sbj0wO248ZS5sZW5ndGg7KytuKXRbZVtuXV09MTtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGU9T2JqZWN0LmtleXModGhpcyksbj1lLmxlbmd0aC0xO24+LTE7LS1uKWlmKDE9PT10W2Vbbl1dJiZ2b2lkIDAhPT10aGlzW2Vbbl1dJiZudWxsIT09dGhpc1tlW25dXSlyZXR1cm4gZVtuXX19LHIub25lT2ZTZXR0ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7KytuKWVbbl0hPT10JiZkZWxldGUgdGhpc1tlW25dXX19LHIudG9KU09OT3B0aW9ucz17bG9uZ3M6U3RyaW5nLGVudW1zOlN0cmluZyxieXRlczpTdHJpbmcsanNvbjohMH0sci5fY29uZmlndXJlPWZ1bmN0aW9uKCl7dmFyIGU9ci5CdWZmZXI7ZT8oci5fQnVmZmVyX2Zyb209ZS5mcm9tIT09VWludDhBcnJheS5mcm9tJiZlLmZyb218fGZ1bmN0aW9uKHQsbil7cmV0dXJuIG5ldyBlKHQsbil9LHIuX0J1ZmZlcl9hbGxvY1Vuc2FmZT1lLmFsbG9jVW5zYWZlfHxmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGUodCl9KTpyLl9CdWZmZXJfZnJvbT1yLl9CdWZmZXJfYWxsb2NVbnNhZmU9bnVsbH19LDg3ODg6KGUsdCxuKT0+e2UuZXhwb3J0cz1kO3ZhciByLGk9big4NjY4NCksbz1pLkxvbmdCaXRzLGE9aS5iYXNlNjQscz1pLnV0Zjg7ZnVuY3Rpb24gYyhlLHQsbil7dGhpcy5mbj1lLHRoaXMubGVuPXQsdGhpcy5uZXh0PXZvaWQgMCx0aGlzLnZhbD1ufWZ1bmN0aW9uIGwoKXt9ZnVuY3Rpb24gdShlKXt0aGlzLmhlYWQ9ZS5oZWFkLHRoaXMudGFpbD1lLnRhaWwsdGhpcy5sZW49ZS5sZW4sdGhpcy5uZXh0PWUuc3RhdGVzfWZ1bmN0aW9uIGQoKXt0aGlzLmxlbj0wLHRoaXMuaGVhZD1uZXcgYyhsLDAsMCksdGhpcy50YWlsPXRoaXMuaGVhZCx0aGlzLnN0YXRlcz1udWxsfXZhciBmPWZ1bmN0aW9uKCl7cmV0dXJuIGkuQnVmZmVyP2Z1bmN0aW9uKCl7cmV0dXJuKGQuY3JlYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyByfSkoKX06ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR9fTtmdW5jdGlvbiBwKGUsdCxuKXt0W25dPTI1NSZlfWZ1bmN0aW9uIG0oZSx0KXt0aGlzLmxlbj1lLHRoaXMubmV4dD12b2lkIDAsdGhpcy52YWw9dH1mdW5jdGlvbiBoKGUsdCxuKXtmb3IoO2UuaGk7KXRbbisrXT0xMjcmZS5sb3wxMjgsZS5sbz0oZS5sbz4+Pjd8ZS5oaTw8MjUpPj4+MCxlLmhpPj4+PTc7Zm9yKDtlLmxvPjEyNzspdFtuKytdPTEyNyZlLmxvfDEyOCxlLmxvPWUubG8+Pj43O3RbbisrXT1lLmxvfWZ1bmN0aW9uIHYoZSx0LG4pe3Rbbl09MjU1JmUsdFtuKzFdPWU+Pj44JjI1NSx0W24rMl09ZT4+PjE2JjI1NSx0W24rM109ZT4+PjI0fWQuY3JlYXRlPWYoKSxkLmFsbG9jPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaS5BcnJheShlKX0saS5BcnJheSE9PUFycmF5JiYoZC5hbGxvYz1pLnBvb2woZC5hbGxvYyxpLkFycmF5LnByb3RvdHlwZS5zdWJhcnJheSkpLGQucHJvdG90eXBlLl9wdXNoPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy50YWlsPXRoaXMudGFpbC5uZXh0PW5ldyBjKGUsdCxuKSx0aGlzLmxlbis9dCx0aGlzfSxtLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMucHJvdG90eXBlKSxtLnByb3RvdHlwZS5mbj1mdW5jdGlvbihlLHQsbil7Zm9yKDtlPjEyNzspdFtuKytdPTEyNyZlfDEyOCxlPj4+PTc7dFtuXT1lfSxkLnByb3RvdHlwZS51aW50MzI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubGVuKz0odGhpcy50YWlsPXRoaXMudGFpbC5uZXh0PW5ldyBtKChlPj4+PTApPDEyOD8xOmU8MTYzODQ/MjplPDIwOTcxNTI/MzplPDI2ODQzNTQ1Nj80OjUsZSkpLmxlbix0aGlzfSxkLnByb3RvdHlwZS5pbnQzMj1mdW5jdGlvbihlKXtyZXR1cm4gZTwwP3RoaXMuX3B1c2goaCwxMCxvLmZyb21OdW1iZXIoZSkpOnRoaXMudWludDMyKGUpfSxkLnByb3RvdHlwZS5zaW50MzI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudWludDMyKChlPDwxXmU+PjMxKT4+PjApfSxkLnByb3RvdHlwZS51aW50NjQ9ZnVuY3Rpb24oZSl7dmFyIHQ9by5mcm9tKGUpO3JldHVybiB0aGlzLl9wdXNoKGgsdC5sZW5ndGgoKSx0KX0sZC5wcm90b3R5cGUuaW50NjQ9ZC5wcm90b3R5cGUudWludDY0LGQucHJvdG90eXBlLnNpbnQ2ND1mdW5jdGlvbihlKXt2YXIgdD1vLmZyb20oZSkuenpFbmNvZGUoKTtyZXR1cm4gdGhpcy5fcHVzaChoLHQubGVuZ3RoKCksdCl9LGQucHJvdG90eXBlLmJvb2w9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3B1c2gocCwxLGU/MTowKX0sZC5wcm90b3R5cGUuZml4ZWQzMj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcHVzaCh2LDQsZT4+PjApfSxkLnByb3RvdHlwZS5zZml4ZWQzMj1kLnByb3RvdHlwZS5maXhlZDMyLGQucHJvdG90eXBlLmZpeGVkNjQ9ZnVuY3Rpb24oZSl7dmFyIHQ9by5mcm9tKGUpO3JldHVybiB0aGlzLl9wdXNoKHYsNCx0LmxvKS5fcHVzaCh2LDQsdC5oaSl9LGQucHJvdG90eXBlLnNmaXhlZDY0PWQucHJvdG90eXBlLmZpeGVkNjQsZC5wcm90b3R5cGUuZmxvYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3B1c2goaS5mbG9hdC53cml0ZUZsb2F0TEUsNCxlKX0sZC5wcm90b3R5cGUuZG91YmxlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wdXNoKGkuZmxvYXQud3JpdGVEb3VibGVMRSw4LGUpfTt2YXIgZz1pLkFycmF5LnByb3RvdHlwZS5zZXQ/ZnVuY3Rpb24oZSx0LG4pe3Quc2V0KGUsbil9OmZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoOysrcil0W24rcl09ZVtyXX07ZC5wcm90b3R5cGUuYnl0ZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg+Pj4wO2lmKCF0KXJldHVybiB0aGlzLl9wdXNoKHAsMSwwKTtpZihpLmlzU3RyaW5nKGUpKXt2YXIgbj1kLmFsbG9jKHQ9YS5sZW5ndGgoZSkpO2EuZGVjb2RlKGUsbiwwKSxlPW59cmV0dXJuIHRoaXMudWludDMyKHQpLl9wdXNoKGcsdCxlKX0sZC5wcm90b3R5cGUuc3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PXMubGVuZ3RoKGUpO3JldHVybiB0P3RoaXMudWludDMyKHQpLl9wdXNoKHMud3JpdGUsdCxlKTp0aGlzLl9wdXNoKHAsMSwwKX0sZC5wcm90b3R5cGUuZm9yaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlcz1uZXcgdSh0aGlzKSx0aGlzLmhlYWQ9dGhpcy50YWlsPW5ldyBjKGwsMCwwKSx0aGlzLmxlbj0wLHRoaXN9LGQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdGVzPyh0aGlzLmhlYWQ9dGhpcy5zdGF0ZXMuaGVhZCx0aGlzLnRhaWw9dGhpcy5zdGF0ZXMudGFpbCx0aGlzLmxlbj10aGlzLnN0YXRlcy5sZW4sdGhpcy5zdGF0ZXM9dGhpcy5zdGF0ZXMubmV4dCk6KHRoaXMuaGVhZD10aGlzLnRhaWw9bmV3IGMobCwwLDApLHRoaXMubGVuPTApLHRoaXN9LGQucHJvdG90eXBlLmxkZWxpbT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuaGVhZCx0PXRoaXMudGFpbCxuPXRoaXMubGVuO3JldHVybiB0aGlzLnJlc2V0KCkudWludDMyKG4pLG4mJih0aGlzLnRhaWwubmV4dD1lLm5leHQsdGhpcy50YWlsPXQsdGhpcy5sZW4rPW4pLHRoaXN9LGQucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmhlYWQubmV4dCx0PXRoaXMuY29uc3RydWN0b3IuYWxsb2ModGhpcy5sZW4pLG49MDtlOyllLmZuKGUudmFsLHQsbiksbis9ZS5sZW4sZT1lLm5leHQ7cmV0dXJuIHR9LGQuX2NvbmZpZ3VyZT1mdW5jdGlvbihlKXtyPWUsZC5jcmVhdGU9ZigpLHIuX2NvbmZpZ3VyZSgpfX0sNjY3MTM6KGUsdCxuKT0+e2UuZXhwb3J0cz1vO3ZhciByPW4oODc4OCk7KG8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoci5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1vO3ZhciBpPW4oODY2ODQpO2Z1bmN0aW9uIG8oKXtyLmNhbGwodGhpcyl9ZnVuY3Rpb24gYShlLHQsbil7ZS5sZW5ndGg8NDA/aS51dGY4LndyaXRlKGUsdCxuKTp0LnV0ZjhXcml0ZT90LnV0ZjhXcml0ZShlLG4pOnQud3JpdGUoZSxuKX1vLl9jb25maWd1cmU9ZnVuY3Rpb24oKXtvLmFsbG9jPWkuX0J1ZmZlcl9hbGxvY1Vuc2FmZSxvLndyaXRlQnl0ZXNCdWZmZXI9aS5CdWZmZXImJmkuQnVmZmVyLnByb3RvdHlwZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJlwic2V0XCI9PT1pLkJ1ZmZlci5wcm90b3R5cGUuc2V0Lm5hbWU/ZnVuY3Rpb24oZSx0LG4pe3Quc2V0KGUsbil9OmZ1bmN0aW9uKGUsdCxuKXtpZihlLmNvcHkpZS5jb3B5KHQsbiwwLGUubGVuZ3RoKTtlbHNlIGZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KXRbbisrXT1lW3IrK119fSxvLnByb3RvdHlwZS5ieXRlcz1mdW5jdGlvbihlKXtpLmlzU3RyaW5nKGUpJiYoZT1pLl9CdWZmZXJfZnJvbShlLFwiYmFzZTY0XCIpKTt2YXIgdD1lLmxlbmd0aD4+PjA7cmV0dXJuIHRoaXMudWludDMyKHQpLHQmJnRoaXMuX3B1c2goby53cml0ZUJ5dGVzQnVmZmVyLHQsZSksdGhpc30sby5wcm90b3R5cGUuc3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PWkuQnVmZmVyLmJ5dGVMZW5ndGgoZSk7cmV0dXJuIHRoaXMudWludDMyKHQpLHQmJnRoaXMuX3B1c2goYSx0LGUpLHRoaXN9LG8uX2NvbmZpZ3VyZSgpfSw1ODQzNjooZSx0LG4pPT57bi5kKHQse1o6KCk9PmF9KTt2YXIgcixpPW4oNjcyOTQpO2Z1bmN0aW9uIG8oKXtyZXR1cm4gbz1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LG8uYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IGE9ZT0+aS5jcmVhdGVFbGVtZW50KFwic3ZnXCIsbyh7d2lkdGg6MTYsaGVpZ2h0OjE2LHZpZXdCb3g6XCIwIDAgMTYgMTZcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSkscnx8KHI9aS5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTUgMi4wODhhLjY2Ny42NjcgMCAwIDEgLjkxLjI0NGwuNzcxIDEuMzM0Yy40MS0uMjE1Ljg1NC0uMzMzIDEuMzE5LS4zMzMuNDY1IDAgLjkxLjExOCAxLjMxOS4zMzNsLjc3LTEuMzM0YS42NjcuNjY3IDAgMCAxIDEuMTU1LjY2NmwtLjg3NiAxLjUxOGMuMjEuMjQyLjQuNTE3LjU2Ni44MTdoMS4xODNhLjY2Ny42NjcgMCAxIDEgMCAxLjMzNGgtLjY1OWMuMDgzLjMyLjE0My42NTQuMTc2IDFoLjk5N2EuNjY3LjY2NyAwIDEgMSAwIDEuMzMzaC0uOTk3Yy0uMDMzLjM0Ni0uMDkzLjY4LS4xNzYgMWguNjU5YS42NjcuNjY3IDAgMCAxIDAgMS4zMzNoLTEuMTgzYy0uNjcgMS4yMTUtMS43MzQgMi0yLjkzNCAyLTEuMiAwLTIuMjY1LS43ODUtMi45MzQtMkgzLjg4M2EuNjY3LjY2NyAwIDAgMSAwLTEuMzMzaC42NTlhNi41MSA2LjUxIDAgMCAxLS4xNzYtMWgtLjk5N2EuNjY3LjY2NyAwIDAgMSAwLTEuMzMzaC45OTdjLjAzMy0uMzQ2LjA5My0uNjguMTc2LTFoLS42NTlhLjY2Ny42NjcgMCAwIDEgMC0xLjMzNGgxLjE4M2MuMTY2LS4zLjM1Ni0uNTc1LjU2Ni0uODE3bC0uODc2LTEuNTE4QS42NjcuNjY3IDAgMCAxIDUgMi4wODhabTMgNS4yNDVBLjY2Ny42NjcgMCAxIDAgOCA2YS42NjcuNjY3IDAgMCAwIDAgMS4zMzNaTTguNjY3IDEwYS42NjcuNjY3IDAgMSAxLTEuMzM0IDAgLjY2Ny42NjcgMCAwIDEgMS4zMzQgMFpcIixvcGFjaXR5Oi44fSkpKX0sNTA4MjE6KGUsdCxuKT0+e24uZCh0LHtaOigpPT5hfSk7dmFyIHIsaT1uKDY3Mjk0KTtmdW5jdGlvbiBvKCl7cmV0dXJuIG89T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxvLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBhPWU9PmkuY3JlYXRlRWxlbWVudChcInN2Z1wiLG8oe3dpZHRoOjEwLGhlaWdodDoxNCx2aWV3Qm94OlwiMCAwIDEwIDE0XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLHJ8fChyPWkuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk04LjY4NiAxMy4zMWExLjUgMS41IDAgMCAwIDAtMi4xMkw0LjQ5NiA3bDQuMTktNC4xOUExLjUgMS41IDAgMSAwIDYuNTY0LjY5bC01LjI1IDUuMjVhMS41IDEuNSAwIDAgMCAwIDIuMTJsNS4yNSA1LjI1YTEuNSAxLjUgMCAwIDAgMi4xMjIgMFpcIixmaWxsOlwiIzIxMjEyMVwifSkpKX0sODI0OTY6ZT0+e3ZhciB0PS8oKChbYS16QS1aXSsoLVthLXpBLVowLTldKyl7MCwyfSl8XFwqKSg7cT1bMC0xXShcXC5bMC05XSspPyk/KSovZztmdW5jdGlvbiBuKGUpe3JldHVybihlfHxcIlwiKS5tYXRjaCh0KS5tYXAoKGZ1bmN0aW9uKGUpe2lmKGUpe3ZhciB0PWUuc3BsaXQoXCI7XCIpLG49dFswXS5zcGxpdChcIi1cIikscj0zPT09bi5sZW5ndGg7cmV0dXJue2NvZGU6blswXSxzY3JpcHQ6cj9uWzFdOm51bGwscmVnaW9uOnI/blsyXTpuWzFdLHF1YWxpdHk6dFsxXT9wYXJzZUZsb2F0KHRbMV0uc3BsaXQoXCI9XCIpWzFdKToxfX19KSkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZX0pKS5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiB0LnF1YWxpdHktZS5xdWFsaXR5fSkpfWUuZXhwb3J0cy5wYXJzZT1uLGUuZXhwb3J0cy5waWNrPWZ1bmN0aW9uKGUsdCxyKXtpZihyPXJ8fHt9LCFlfHwhZS5sZW5ndGh8fCF0KXJldHVybiBudWxsO1wic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1uKHQpKTtmb3IodmFyIGk9ZS5tYXAoKGZ1bmN0aW9uKGUpe3ZhciB0PWUuc3BsaXQoXCItXCIpLG49Mz09PXQubGVuZ3RoO3JldHVybntjb2RlOnRbMF0sc2NyaXB0Om4/dFsxXTpudWxsLHJlZ2lvbjpuP3RbMl06dFsxXX19KSksbz0wO288dC5sZW5ndGg7bysrKWZvcih2YXIgYT10W29dLHM9YS5jb2RlLnRvTG93ZXJDYXNlKCksYz1hLnJlZ2lvbj9hLnJlZ2lvbi50b0xvd2VyQ2FzZSgpOmEucmVnaW9uLGw9YS5zY3JpcHQ/YS5zY3JpcHQudG9Mb3dlckNhc2UoKTphLnNjcmlwdCx1PTA7dTxpLmxlbmd0aDt1Kyspe3ZhciBkPWlbdV0uY29kZS50b0xvd2VyQ2FzZSgpLGY9aVt1XS5zY3JpcHQ/aVt1XS5zY3JpcHQudG9Mb3dlckNhc2UoKTppW3VdLnNjcmlwdCxwPWlbdV0ucmVnaW9uP2lbdV0ucmVnaW9uLnRvTG93ZXJDYXNlKCk6aVt1XS5yZWdpb247aWYocz09PWQmJihyLmxvb3NlfHwhbHx8bD09PWYpJiYoci5sb29zZXx8IWN8fGM9PT1wKSlyZXR1cm4gZVt1XX1yZXR1cm4gbnVsbH19LDU4MzYzOihlLHQpPT57dC5aPWZ1bmN0aW9uKGUsdCl7aWYoZSYmdCl7dmFyIG49QXJyYXkuaXNBcnJheSh0KT90OnQuc3BsaXQoXCIsXCIpLHI9ZS5uYW1lfHxcIlwiLGk9KGUudHlwZXx8XCJcIikudG9Mb3dlckNhc2UoKSxvPWkucmVwbGFjZSgvXFwvLiokLyxcIlwiKTtyZXR1cm4gbi5zb21lKChmdW5jdGlvbihlKXt2YXIgdD1lLnRyaW0oKS50b0xvd2VyQ2FzZSgpO3JldHVyblwiLlwiPT09dC5jaGFyQXQoMCk/ci50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKHQpOnQuZW5kc1dpdGgoXCIvKlwiKT9vPT09dC5yZXBsYWNlKC9cXC8uKiQvLFwiXCIpOmk9PT10fSkpfXJldHVybiEwfX0sOTc3ODI6ZT0+e2UuZXhwb3J0cz17Z2V0TGV2ZWw6KCk9Pm51bGwsc2V0TGV2ZWw6KCk9Pm51bGwsc2V0RGVmYXVsdExldmVsOigpPT5udWxsLGxvZzooKT0+bnVsbCxkZWJ1ZzooKT0+bnVsbCxlcnJvcjooKT0+bnVsbCxpbmZvOigpPT5udWxsLHRyYWNlOigpPT5udWxsLHNpbGVudDooKT0+bnVsbCx3YXJuOigpPT5udWxsLHJlc2V0TGV2ZWw6KCk9Pm51bGwsZW5hYmxlQWxsOigpPT5udWxsLGRpc2FibGVBbGw6KCk9Pm51bGwsbGV2ZWxzOntUUkFDRTowLERFQlVHOjEsSU5GTzoyLFdBUk46MyxFUlJPUjo0LFNJTEVOVDo1fSxnZXRMb2dnZXI6KCk9Pih7Z2V0TGV2ZWw6KCk9Pm51bGwsc2V0TGV2ZWw6KCk9Pm51bGwsc2V0RGVmYXVsdExldmVsOigpPT5udWxsLGxvZzooKT0+bnVsbCxkZWJ1ZzooKT0+bnVsbCxlcnJvcjooKT0+bnVsbCxpbmZvOigpPT5udWxsLHRyYWNlOigpPT5udWxsLHNpbGVudDooKT0+bnVsbCx3YXJuOigpPT5udWxsLHJlc2V0TGV2ZWw6KCk9Pm51bGwsZW5hYmxlQWxsOigpPT5udWxsLGRpc2FibGVBbGw6KCk9Pm51bGx9KSxnZXRMb2dnZXJzOigpPT4oe30pfX0sODk5NjY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBhKGUpe3RyeXtjKHIubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gcyhlKXt0cnl7YyhyLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBjKGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIG4/dDpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihhLHMpfWMoKHI9ci5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX0saT10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvLGE9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmaVswXSl0aHJvdyBpWzFdO3JldHVybiBpWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIG89e25leHQ6cygwKSx0aHJvdzpzKDEpLHJldHVybjpzKDIpfSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJihvW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLG87ZnVuY3Rpb24gcyhzKXtyZXR1cm4gZnVuY3Rpb24oYyl7cmV0dXJuIGZ1bmN0aW9uKHMpe2lmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7Zm9yKDtvJiYobz0wLHNbMF0mJihhPTApKSxhOyl0cnl7aWYobj0xLHImJihpPTImc1swXT9yLnJldHVybjpzWzBdP3IudGhyb3d8fCgoaT1yLnJldHVybikmJmkuY2FsbChyKSwwKTpyLm5leHQpJiYhKGk9aS5jYWxsKHIsc1sxXSkpLmRvbmUpcmV0dXJuIGk7c3dpdGNoKHI9MCxpJiYocz1bMiZzWzBdLGkudmFsdWVdKSxzWzBdKXtjYXNlIDA6Y2FzZSAxOmk9czticmVhaztjYXNlIDQ6cmV0dXJuIGEubGFiZWwrKyx7dmFsdWU6c1sxXSxkb25lOiExfTtjYXNlIDU6YS5sYWJlbCsrLHI9c1sxXSxzPVswXTtjb250aW51ZTtjYXNlIDc6cz1hLm9wcy5wb3AoKSxhLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChpPShpPWEudHJ5cykubGVuZ3RoPjAmJmlbaS5sZW5ndGgtMV0pfHw2IT09c1swXSYmMiE9PXNbMF0pKXthPTA7Y29udGludWV9aWYoMz09PXNbMF0mJighaXx8c1sxXT5pWzBdJiZzWzFdPGlbM10pKXthLmxhYmVsPXNbMV07YnJlYWt9aWYoNj09PXNbMF0mJmEubGFiZWw8aVsxXSl7YS5sYWJlbD1pWzFdLGk9czticmVha31pZihpJiZhLmxhYmVsPGlbMl0pe2EubGFiZWw9aVsyXSxhLm9wcy5wdXNoKHMpO2JyZWFrfWlbMl0mJmEub3BzLnBvcCgpLGEudHJ5cy5wb3AoKTtjb250aW51ZX1zPXQuY2FsbChlLGEpfWNhdGNoKGUpe3M9WzYsZV0scj0wfWZpbmFsbHl7bj1pPTB9aWYoNSZzWzBdKXRocm93IHNbMV07cmV0dXJue3ZhbHVlOnNbMF0/c1sxXTp2b2lkIDAsZG9uZTohMH19KFtzLGNdKX19fTt0Ll9fZXNNb2R1bGU9ITAsdC5nZXRTc29DbGllbnRJZD10LmdldEF1dGhTdGF0ZT10LmluaXRpYWxpemVBdXRoU3RhdGU9dC5VTkFVVEhfU1RBVEU9dC5VTlNFVF9BVVRIX1NUQVRFPXQuQXV0aFN0YXR1cz12b2lkIDA7dmFyIG8sYT0oMCxuKDIxOTMzKS5nZXRMb2dnZXIpKFwiYXV0aFN0YXRlXCIpOyFmdW5jdGlvbihlKXtlW2UuQVVUSEVOVElDQVRFRD0wXT1cIkFVVEhFTlRJQ0FURURcIixlW2UuVU5BVVRIRU5USUNBVEVEPTFdPVwiVU5BVVRIRU5USUNBVEVEXCIsZVtlLlVOS05PV049Ml09XCJVTktOT1dOXCJ9KG89dC5BdXRoU3RhdHVzfHwodC5BdXRoU3RhdHVzPXt9KSksdC5VTlNFVF9BVVRIX1NUQVRFPU9iamVjdC5mcmVlemUoe2F1dGhTdGF0dXM6by5VTktOT1dOfSksdC5VTkFVVEhfU1RBVEU9T2JqZWN0LmZyZWV6ZSh7YXV0aFN0YXR1czpvLlVOQVVUSEVOVElDQVRFRH0pO3ZhciBzPXZvaWQgMCxjPXZvaWQgMDt0LmluaXRpYWxpemVBdXRoU3RhdGU9ZnVuY3Rpb24oZSl7aWYobnVsbD09PWUpcmV0dXJuIGEuZGVidWcoXCJTZXR0aW5nIG5vLW9wIHVuYXV0aGVudGljYXRlZCBjbGllbnRBdXRoUHJvdmlkZXJcIiksYz1Qcm9taXNlLnJlc29sdmUodC5VTkFVVEhfU1RBVEUpLHZvaWQocz1udWxsKTtzPWUuc3NvQ2xpZW50SWQsYz1uZXcgUHJvbWlzZSgoZnVuY3Rpb24obil7ZS5hdXRoU3RhdGUuc3Vic2NyaWJlKChmdW5jdGlvbihlKXthLmRlYnVnKFwiR290IG5ldyBhdXRoU3RhdGU6XCIsZSksZSE9PXQuVU5TRVRfQVVUSF9TVEFURSYmKG4oZSksYz1Qcm9taXNlLnJlc29sdmUoZSkpfSkpfSkpfSx0LmdldEF1dGhTdGF0ZT1mdW5jdGlvbigpe3JldHVybiByKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXtyZXR1cm4gaSh0aGlzLChmdW5jdGlvbihlKXtpZighYyl0aHJvdyBuZXcgRXJyb3IoXCJnZXRBdXRoU3RhdGUgY2FsbGVkIGJlZm9yZSBzZXRDbGllbnRBdXRoUHJvdmlkZXIsIHdhcyBpbml0QmxpenphcmQgY2FsbGVkP1wiKTtyZXR1cm5bMixjXX0pKX0pKX0sdC5nZXRTc29DbGllbnRJZD1mdW5jdGlvbigpe2lmKHZvaWQgMD09PXMpdGhyb3cgbmV3IEVycm9yKFwiZ2V0U3NvQ2xpZW50SWQgY2FsbGVkIGJlZm9yZSBzZXRDbGllbnRBdXRoUHJvdmlkZXIsIHdhcyBpbml0QmxpenphcmQgY2FsbGVkP1wiKTtyZXR1cm4gc319LDI0MDMzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShlKXt0cnl7YyhyLm5leHQoZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIHMoZSl7dHJ5e2Moci50aHJvdyhlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYyhlKXt2YXIgdDtlLmRvbmU/aShlLnZhbHVlKToodD1lLnZhbHVlLHQgaW5zdGFuY2VvZiBuP3Q6bmV3IG4oKGZ1bmN0aW9uKGUpe2UodCl9KSkpLnRoZW4oYSxzKX1jKChyPXIuYXBwbHkoZSx0fHxbXSkpLm5leHQoKSl9KSl9LGk9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxhPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmlbMF0pdGhyb3cgaVsxXTtyZXR1cm4gaVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBvPXtuZXh0OnMoMCksdGhyb3c6cygxKSxyZXR1cm46cygyKX0sXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiYob1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxvO2Z1bmN0aW9uIHMocyl7cmV0dXJuIGZ1bmN0aW9uKGMpe3JldHVybiBmdW5jdGlvbihzKXtpZihuKXRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO2Zvcig7byYmKG89MCxzWzBdJiYoYT0wKSksYTspdHJ5e2lmKG49MSxyJiYoaT0yJnNbMF0/ci5yZXR1cm46c1swXT9yLnRocm93fHwoKGk9ci5yZXR1cm4pJiZpLmNhbGwociksMCk6ci5uZXh0KSYmIShpPWkuY2FsbChyLHNbMV0pKS5kb25lKXJldHVybiBpO3N3aXRjaChyPTAsaSYmKHM9WzImc1swXSxpLnZhbHVlXSksc1swXSl7Y2FzZSAwOmNhc2UgMTppPXM7YnJlYWs7Y2FzZSA0OnJldHVybiBhLmxhYmVsKysse3ZhbHVlOnNbMV0sZG9uZTohMX07Y2FzZSA1OmEubGFiZWwrKyxyPXNbMV0scz1bMF07Y29udGludWU7Y2FzZSA3OnM9YS5vcHMucG9wKCksYS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoaT0oaT1hLnRyeXMpLmxlbmd0aD4wJiZpW2kubGVuZ3RoLTFdKXx8NiE9PXNbMF0mJjIhPT1zWzBdKSl7YT0wO2NvbnRpbnVlfWlmKDM9PT1zWzBdJiYoIWl8fHNbMV0+aVswXSYmc1sxXTxpWzNdKSl7YS5sYWJlbD1zWzFdO2JyZWFrfWlmKDY9PT1zWzBdJiZhLmxhYmVsPGlbMV0pe2EubGFiZWw9aVsxXSxpPXM7YnJlYWt9aWYoaSYmYS5sYWJlbDxpWzJdKXthLmxhYmVsPWlbMl0sYS5vcHMucHVzaChzKTticmVha31pWzJdJiZhLm9wcy5wb3AoKSxhLnRyeXMucG9wKCk7Y29udGludWV9cz10LmNhbGwoZSxhKX1jYXRjaChlKXtzPVs2LGVdLHI9MH1maW5hbGx5e249aT0wfWlmKDUmc1swXSl0aHJvdyBzWzFdO3JldHVybnt2YWx1ZTpzWzBdP3NbMV06dm9pZCAwLGRvbmU6ITB9fShbcyxjXSl9fX07dC5fX2VzTW9kdWxlPSEwLHQuZ2V0U2NhVG9rZW49dm9pZCAwO3ZhciBvPW4oNDcwMyksYT1uKDg3MTgxKSxzPW4oMTQ2MTApLGM9bigyMTkzMyk7dC5nZXRTY2FUb2tlbj1mdW5jdGlvbihlKXtyZXR1cm4gcih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7dmFyIHQsbjtyZXR1cm4gaSh0aGlzLChmdW5jdGlvbihyKXtzd2l0Y2goci5sYWJlbCl7Y2FzZSAwOnJldHVybiB1JiYhZT9bMix1XToobC5kZWJ1ZyhcIlJldHJpZXZpbmcgbmV3IFNDQSB0b2tlblwiKSxbNCwoMCxzLmZldGNoUmV0cnkpKFwiXCIuY29uY2F0KCgwLG8uZ2V0VW5hdXRoZW50aWNhdGVkQmFzZVVybCkoKSxcIi9pbml0X2NsaWVudFwiKSx7bWV0aG9kOlwiUE9TVFwiLGhlYWRlcnM6e1wiQ29udGVudC1UeXBlXCI6YS5DT05URU5UX1RZUEVfSlNPTn19KV0pO2Nhc2UgMTppZighKHQ9ci5zZW50KCkpKXRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byByZXRyaWV2ZSBhdXRoZW50aWNhdGlvbiB0b2tlblwiKTtyZXR1cm5bNCx0Lmpzb24oKV07Y2FzZSAyOmlmKCEobj1yLnNlbnQoKS50b2tlbikpdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyB0b2tsZW4gaW4gcmVzcG9uc2VcIik7cmV0dXJuIGwuZGVidWcoXCJSZXRyaWV2ZWQgU0NBIHRva2VuXCIpLHU9bixbMixuXX19KSl9KSl9O3ZhciBsPSgwLGMuZ2V0TG9nZ2VyKShcImdldFNjYVRva2VuXCIpLHU9dm9pZCAwfSw3MjU4MDooZSx0LG4pPT57dmFyIHI7dC5fX2VzTW9kdWxlPSEwLHQuZ2V0QXV0aEJhc2VVcmw9dC5Tc29DbGllbnRJZD12b2lkIDA7dmFyIGksbz1uKDc0MjkpLGE9big4NzQwNCk7IWZ1bmN0aW9uKGUpe2UuREVTS1RPUF9XRUI9XCJ3ZWItY2FsbGluZy1jb3JwLS1wcm9kXCIsZS5TTkFQQ0hBVF9DT009XCJzbmFwY2hhdC1jb20tbWV0cmljc1wifShpPXQuU3NvQ2xpZW50SWR8fCh0LlNzb0NsaWVudElkPXt9KSk7dmFyIHM9KChyPXt9KVtpLkRFU0tUT1BfV0VCXT17c3RhZ2luZ1VybDpcImh0dHBzOi8vc3RhZ2luZy13ZWItZ2NwLnNuYXAtZGV2Lm5ldC93ZWItYW5hbHl0aWNzLXYyL3dlYlwiLHByb2RVcmw6XCJodHRwczovL3dlYi5zbmFwY2hhdC5jb20vd2ViLWFuYWx5dGljcy12Mi93ZWJcIn0scltpLlNOQVBDSEFUX0NPTV09e3N0YWdpbmdVcmw6XCJodHRwczovL3N0YWdpbmctZ2NwLmFwaS5zbmFwY2hhdC5jb20vd2ViLWFuYWx5dGljcy12Mi93ZWJcIixwcm9kVXJsOlwiaHR0cHM6Ly9nY3AuYXBpLnNuYXBjaGF0LmNvbS93ZWItYW5hbHl0aWNzLXYyL3dlYlwifSxyKTt0LmdldEF1dGhCYXNlVXJsPWZ1bmN0aW9uKGUpe3ZhciB0PXNbZV07cmV0dXJuKDAsYS5nZXRDb2xsZWN0aW9uTW9kZSkoKT09PW8uQ29sbGVjdGlvbk1vZGUuU1RBR0U/dC5zdGFnaW5nVXJsOnQucHJvZFVybH19LDQ2MTkwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTt0Ll9fZXNNb2R1bGU9ITAsdC5zZXRDb29raWVzRW5hYmxlZD10LmdldENsaWVudElkPXZvaWQgMDt2YXIgaT1uKDIxOTMzKSxvPW4oODk0MTApLGE9cihuKDEwNjQ2KSkscz0oMCxpLmdldExvZ2dlcikoXCJjbGllbnRJZFwiKSxjPW51bGw7dC5nZXRDbGllbnRJZD1mdW5jdGlvbigpe3ZhciBlO2lmKG51bGw9PT1jKXt2YXIgdD11P2EuZGVmYXVsdC5nZXQocCk6dm9pZCAwO251bGwhPT0oYz10P2wucGFyc2UodCk6bnVsbCkmJnMuZGVidWcoXCJMb2FkZWQgY2xpZW50IElEXCIsYyl9aWYoKG51bGw9PT0oZT1udWxsPT1jP3ZvaWQgMDpjLmlzRXhwaXJlZCgpKXx8dm9pZCAwPT09ZXx8ZSkmJihzLmluZm8oXCJHZW5lcmF0aW5nIG5ldyBjbGllbnRJZFwiKSxjPWwuZ2VuZXJhdGUoKSx1JiYoYS5kZWZhdWx0LnNldChwLGMuaWQse2V4cGlyZXM6Zixkb21haW46ZH0pLHMuaW5mbyhcImNsaWVudElkIGlzIHNldCBpbiBDb29raWVzXCIpKSksbnVsbD09PWMpdGhyb3dcIlVuZXhwZWN0ZWQgbnVsbCBjbGllbnRJZFwiO3JldHVybiBjLmlkfTt2YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7T2JqZWN0LmFzc2lnbih0aGlzLGUpfXJldHVybiBlLmdlbmVyYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBlKHtpZDooMCxvLnY0KSgpLHRpbWVzdGFtcDoobmV3IERhdGUpLmdldFRpbWUoKX0pfSxlLnBhcnNlPWZ1bmN0aW9uKHQpe3ZhciBuPXQuc3BsaXQoXCI6XCIpO2lmKDIhPT1uLmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgcj17aWQ6blswXSx0aW1lc3RhbXA6cGFyc2VJbnQoblsxXSwxMCl9O3JldHVybigwLG8udmFsaWRhdGUpKHIuaWQpP2lzTmFOKHIudGltZXN0YW1wKT9udWxsOm5ldyBlKHIpOm51bGx9LGUucHJvdG90eXBlLmlzRXhwaXJlZD1mdW5jdGlvbigpe3ZhciBlPW5ldyBEYXRlO3JldHVybiBlPm5ldyBEYXRlKHRoaXMudGltZXN0YW1wK20pfHxlPG5ldyBEYXRlKHRoaXMudGltZXN0YW1wKX0sZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuXCJcIi5jb25jYXQodGhpcy5pZCxcIjpcIikuY29uY2F0KHRoaXMudGltZXN0YW1wKX0sZX0oKSx1PSEwLGQ9XCIuc25hcGNoYXQuY29tXCIsZj0zMDt0LnNldENvb2tpZXNFbmFibGVkPWZ1bmN0aW9uKGUsdCxuKXt2b2lkIDA9PT10JiYodD1cIi5zbmFwY2hhdC5jb21cIiksdm9pZCAwPT09biYmKG49MzApLHU9ZSxkPXQsZj1ufTt2YXIgcD1cImJsaXp6YXJkX2NsaWVudF9pZFwiLG09MjU5MmU2fSw4MzQ4NTooZSx0KT0+e3QuX19lc01vZHVsZT0hMCx0LmxvZ0RlYnVnQWN0aW9uPXQucmVnaXN0ZXJEZWJ1Z09ic2VydmVyPXZvaWQgMDt2YXIgbj1bXTt0LnJlZ2lzdGVyRGVidWdPYnNlcnZlcj1mdW5jdGlvbihlLHQpe3ZhciByPXtvYnNlcnZlcjplLHR5cGVzOnR9O3JldHVybiBuLnB1c2gociksZnVuY3Rpb24oKXtuLnNwbGljZShuLmluZGV4T2YociksMSl9fSx0LmxvZ0RlYnVnQWN0aW9uPWZ1bmN0aW9uKGUpe24uZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG4scj10Lm9ic2VydmVyLGk9dC50eXBlczsobnVsbD09PShuPW51bGw9PWk/dm9pZCAwOmkuaW5jbHVkZXMoZS50eXBlKSl8fHZvaWQgMD09PW58fG4pJiZyKGUpfSkpfX0sODc0MDQ6KGUsdCk9Pnt2YXIgbixyO3QuX19lc01vZHVsZT0hMCx0LmdldENvbGxlY3Rpb25Nb2RlPXQuc2V0Q29sbGVjdGlvbk1vZGU9dC5nZXRBcHBFbnZpcm9ubWVudD10LnNldEFwcEVudmlyb25tZW50PXZvaWQgMCx0LnNldEFwcEVudmlyb25tZW50PWZ1bmN0aW9uKGUpe249ZX0sdC5nZXRBcHBFbnZpcm9ubWVudD1mdW5jdGlvbigpe2lmKCFuKXRocm93IG5ldyBFcnJvcihcImFwcEVudmlyb25tZW50IG5vdCBzZXQ6IHdhcyBCbGl6emFyZCBpbml0aWFsaXplZD9cIik7cmV0dXJuIG59LHQuc2V0Q29sbGVjdGlvbk1vZGU9ZnVuY3Rpb24oZSl7cj1lfSx0LmdldENvbGxlY3Rpb25Nb2RlPWZ1bmN0aW9uKCl7aWYoIXIpdGhyb3cgbmV3IEVycm9yKFwiY29sbGVjdGlvbk1vZGUgbm90IHNldDogd2FzIEJsaXp6YXJkIGluaXRpYWxpemVkP1wiKTtyZXR1cm4gcn19LDU1Nzg4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTt0Ll9fZXNNb2R1bGU9ITAsdC5pbml0R3JhcGhlbmU9dC5ibGl6emFyZEdyYXBoZW5lPXQuU1VDQ0VTUz10LkZPQ1VTRUQ9dC5TVEFSVFVQX1RZUEU9dC5PTl9DTE9TRT10Lk9OX09QRU49dC5ORVRXT1JLX1JFUVVFU1RfQVRURU1QVFNfQ09VTlQ9dC5ORVRXT1JLX1JFUVVFU1RfTEFURU5DWV9NUz10Lk5FVFdPUktfUkVRVUVTVD10LkxPR19FVkVOVF9CVUZGRVJfU0laRT10LkxPR19GUkFNRV9TVEFSVD10LkxPR19FVkVOVD10LklOSVRfRFVSQVRJT05fTUlMTElTPXZvaWQgMDt2YXIgaT1uKDQ1MzYzKSxvPXIobig5MDU3OCkpLGE9cihuKDYyMDk2KSkscz1uKDg3NDA0KSxjPXIobig5NjQ4NikpO3QuSU5JVF9EVVJBVElPTl9NSUxMSVM9XCJpbml0X2R1cmF0aW9uX21pbGxpc1wiLHQuTE9HX0VWRU5UPVwibG9nX2V2ZW50XCIsdC5MT0dfRlJBTUVfU1RBUlQ9XCJsb2dfZnJhbWVfc3RhcnRcIix0LkxPR19FVkVOVF9CVUZGRVJfU0laRT1cImxvZ19ldmVudF9idWZmZXJfc2l6ZVwiLHQuTkVUV09SS19SRVFVRVNUPVwibmV0d29ya19yZXF1ZXN0XCIsdC5ORVRXT1JLX1JFUVVFU1RfTEFURU5DWV9NUz1cIm5ldHdvcmtfcmVxdWVzdF9sYXRlbmN5X21zXCIsdC5ORVRXT1JLX1JFUVVFU1RfQVRURU1QVFNfQ09VTlQ9XCJuZXR3b3JrX3JlcXVlc3RfYXR0ZW1wdHNfY291bnRcIix0Lk9OX09QRU49XCJvbl9vcGVuXCIsdC5PTl9DTE9TRT1cIm9uX2Nsb3NlXCIsdC5TVEFSVFVQX1RZUEU9XCJzdGFydHVwX3R5cGVcIix0LkZPQ1VTRUQ9XCJmb2N1c2VkXCIsdC5TVUNDRVNTPVwic3VjY2Vzc1wiLHQuYmxpenphcmRHcmFwaGVuZT1uZXcgaS5HcmFwaGVuZSx0LmluaXRHcmFwaGVuZT1mdW5jdGlvbigpe3ZhciBlLG49KDAscy5nZXRBcHBFbnZpcm9ubWVudCkoKTt0LmJsaXp6YXJkR3JhcGhlbmUuaW5pdGlhbGl6ZSh7bmV0d29ya0hhbmRsZXI6bmV3IG8uZGVmYXVsdCgoMCxhLmRlZmF1bHQpKHtwYXJ0aXRpb25OYW1lOmkuUEFSVElUSU9OLkJMSVpaQVJELGZsYXZvcjpudWxsIT09KGU9bi5hcHBCdWlsZCkmJnZvaWQgMCE9PWU/ZTpcInVua25vd25cIixkZWZhdWx0RGltZW5zaW9uczpjLmRlZmF1bHQub21pdEJ5KHthcHA6bi5hcHBsaWNhdGlvbixhcHBUeXBlOm4uYXBwVHlwZSxhcHBWZXJzaW9uOm4uYXBwVmVyc2lvbn0sYy5kZWZhdWx0LmlzTmlsKX0pKX0pfX0sNzA2OTI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKTt2YXIgaT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7aSYmIShcImdldFwiaW4gaT8hdC5fX2VzTW9kdWxlOmkud3JpdGFibGV8fGkuY29uZmlndXJhYmxlKXx8KGk9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixpKX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSk7dC5fX2VzTW9kdWxlPSEwLHQucmVnaXN0ZXJEZWJ1Z09ic2VydmVyPXQubG9nVHlwZWRFdmVudD10LmxvZ0V2ZW50PXQub25QYWdlQ2xvc2U9dC5vblBhZ2VPcGVuPXQuQ29sbGVjdGlvbk1vZGU9dC5pbml0QmxpenphcmQ9dm9pZCAwO3ZhciBpPW4oNzQyOSk7cih0LGksXCJpbml0QmxpenphcmRcIikscih0LGksXCJDb2xsZWN0aW9uTW9kZVwiKTt2YXIgbz1uKDM2OTIxKTtyKHQsbyxcIm9uUGFnZU9wZW5cIikscih0LG8sXCJvblBhZ2VDbG9zZVwiKTt2YXIgYT1uKDMzNDY5KTtyKHQsYSxcImxvZ0V2ZW50XCIpLHIodCxhLFwibG9nVHlwZWRFdmVudFwiKSxyKHQsbig4MzQ4NSksXCJyZWdpc3RlckRlYnVnT2JzZXJ2ZXJcIil9LDc0Mjk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBhKGUpe3RyeXtjKHIubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gcyhlKXt0cnl7YyhyLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBjKGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIG4/dDpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihhLHMpfWMoKHI9ci5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX0saT10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvLGE9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmaVswXSl0aHJvdyBpWzFdO3JldHVybiBpWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIG89e25leHQ6cygwKSx0aHJvdzpzKDEpLHJldHVybjpzKDIpfSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJihvW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLG87ZnVuY3Rpb24gcyhzKXtyZXR1cm4gZnVuY3Rpb24oYyl7cmV0dXJuIGZ1bmN0aW9uKHMpe2lmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7Zm9yKDtvJiYobz0wLHNbMF0mJihhPTApKSxhOyl0cnl7aWYobj0xLHImJihpPTImc1swXT9yLnJldHVybjpzWzBdP3IudGhyb3d8fCgoaT1yLnJldHVybikmJmkuY2FsbChyKSwwKTpyLm5leHQpJiYhKGk9aS5jYWxsKHIsc1sxXSkpLmRvbmUpcmV0dXJuIGk7c3dpdGNoKHI9MCxpJiYocz1bMiZzWzBdLGkudmFsdWVdKSxzWzBdKXtjYXNlIDA6Y2FzZSAxOmk9czticmVhaztjYXNlIDQ6cmV0dXJuIGEubGFiZWwrKyx7dmFsdWU6c1sxXSxkb25lOiExfTtjYXNlIDU6YS5sYWJlbCsrLHI9c1sxXSxzPVswXTtjb250aW51ZTtjYXNlIDc6cz1hLm9wcy5wb3AoKSxhLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChpPShpPWEudHJ5cykubGVuZ3RoPjAmJmlbaS5sZW5ndGgtMV0pfHw2IT09c1swXSYmMiE9PXNbMF0pKXthPTA7Y29udGludWV9aWYoMz09PXNbMF0mJighaXx8c1sxXT5pWzBdJiZzWzFdPGlbM10pKXthLmxhYmVsPXNbMV07YnJlYWt9aWYoNj09PXNbMF0mJmEubGFiZWw8aVsxXSl7YS5sYWJlbD1pWzFdLGk9czticmVha31pZihpJiZhLmxhYmVsPGlbMl0pe2EubGFiZWw9aVsyXSxhLm9wcy5wdXNoKHMpO2JyZWFrfWlbMl0mJmEub3BzLnBvcCgpLGEudHJ5cy5wb3AoKTtjb250aW51ZX1zPXQuY2FsbChlLGEpfWNhdGNoKGUpe3M9WzYsZV0scj0wfWZpbmFsbHl7bj1pPTB9aWYoNSZzWzBdKXRocm93IHNbMV07cmV0dXJue3ZhbHVlOnNbMF0/c1sxXTp2b2lkIDAsZG9uZTohMH19KFtzLGNdKX19fTt0Ll9fZXNNb2R1bGU9ITAsdC5Db2xsZWN0aW9uTW9kZT10LmluaXRCbGl6emFyZD12b2lkIDA7dmFyIG8sYT1uKDg3NDA0KSxzPW4oMjE5MzMpLGM9bigzNjkyMSksbD1uKDMzNDY5KSx1PW4oMzY0MjQpLGQ9big1NTc4OCksZj1uKDUxNTQyKSxwPW4oODk5NjYpLG09bigzNzQwKSxoPW4oNDcwMyksdj1uKDQ2MTkwKSxnPSgwLHMuZ2V0TG9nZ2VyKShcImluaXRCbGl6emFyZFwiKTt0LmluaXRCbGl6emFyZD1mdW5jdGlvbihlKXt2YXIgdCxuLHksRSxfPXRoaXM7aWYobC5pbml0Q2FsbGVkKXRocm93IG5ldyBFcnJvcihcImluaXRCbGl6emFyZCBzaG91bGQgbm90IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lc1wiKTtnLmluZm8oXCJJbml0aWFsaXppbmcgQmxpenphcmRcIixlKSwoMCxsLnNldEluaXRDYWxsZWQpKCksKDAscy5zZXRBbmFseXRpY3NMb2dnaW5nRW5hYmxlZCkoQm9vbGVhbihlLmRlYnVnTG9nZ2luZ0VuYWJsZWQpKSwoMCx2LnNldENvb2tpZXNFbmFibGVkKSghZS5jb29raWVzRGlzYWJsZWQsbnVsbD09PSh0PWUuY29va2llc0FyZ3MpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmN1c3RvbURvbWFpbixudWxsPT09KG49ZS5jb29raWVzQXJncyl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZXhwaXJlRGF5cyksKDAsYS5zZXRBcHBFbnZpcm9ubWVudCkoZS5hcHBFbnZpcm9ubWVudCksKDAsYS5zZXRDb2xsZWN0aW9uTW9kZSkobnVsbCE9PSh5PWUubW9kZSkmJnZvaWQgMCE9PXk/eTpvLlBST0QpLCgwLHAuaW5pdGlhbGl6ZUF1dGhTdGF0ZSkobnVsbCE9PShFPWUuY2xpZW50QXV0aFByb3ZpZGVyKSYmdm9pZCAwIT09RT9FOm51bGwpLCgwLGQuaW5pdEdyYXBoZW5lKSgpLGUubGlmZWN5Y2xlQ29uZmlnJiYoMCxjLnNldExpZmVjeWNsZUNvbmZpZykoZS5saWZlY3ljbGVDb25maWcpLGUudXNlckd1aWQmJigwLHUuc2V0VXNlckd1aWRQcm9taXNlKShlLnVzZXJHdWlkKSxlLnRpdlRyYW5zYWN0aW9uSWQmJigwLGYuc2V0VGl2VHJhbnNhY3Rpb25JZFByb21pc2UpKGUudGl2VHJhbnNhY3Rpb25JZCksKDAsbS50aW1lZCkoKGZ1bmN0aW9uKCl7cmV0dXJuIHIoXyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3JldHVybiBpKHRoaXMsKGZ1bmN0aW9uKHQpe3N3aXRjaCh0LmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsZS50aXZUcmFuc2FjdGlvbklkXTtjYXNlIDE6cmV0dXJuIHQuc2VudCgpLFs0LGUudXNlckd1aWRdO2Nhc2UgMjpyZXR1cm4gdC5zZW50KCksWzQsKDAsaC5nZXRVcGxvYWRDb25maWcpKCldO2Nhc2UgMzpyZXR1cm4gdC5zZW50KCksZy5pbmZvKFwiQmxpenphcmQgaW5pdGlhbGl6ZWRcIiksWzJdfX0pKX0pKX0pLHttZXRyaWNzTmFtZTpkLklOSVRfRFVSQVRJT05fTUlMTElTfSl9LGZ1bmN0aW9uKGUpe2UuU1RBR0U9XCJTVEFHRVwiLGUuUFJPRD1cIlBST0RcIn0obz10LkNvbGxlY3Rpb25Nb2RlfHwodC5Db2xsZWN0aW9uTW9kZT17fSkpfSwzNjkyMTooZSx0LG4pPT57dC5fX2VzTW9kdWxlPSEwLHQuc2V0TGlmZWN5Y2xlQ29uZmlnPXQub25QYWdlQ2xvc2U9dC5vblBhZ2VPcGVuPXZvaWQgMDt2YXIgcj1uKDIxOTMzKSxpPW4oMTU0ODkpLG89big1MTU0MiksYT1uKDU1Nzg4KSxzPSgwLHIuZ2V0TG9nZ2VyKShcImxpZmVjeWNsZVwiKSxjPSEwO3Qub25QYWdlT3Blbj1mdW5jdGlvbihlKXt2YXIgdCxuLHI9bnVsbCE9PShuPW51bGw9PWU/dm9pZCAwOmUuaGFzRm9jdXMpJiZ2b2lkIDAhPT1uP246ZG9jdW1lbnQuaGFzRm9jdXMoKTtzLmluZm8oXCJCbGl6emFyZCAtICNvbk9wZW5cIixjP1wiKGNvbGQgc3RhcnQpXCI6XCIod2FybSBzdGFydClcIixyP1wiKGZvcmVncm91bmQpXCI6XCIoYmFja2dyb3VuZClcIiksYS5ibGl6emFyZEdyYXBoZW5lLmluY3JlbWVudCh7bWV0cmljc05hbWU6YS5PTl9PUEVOLGRpbWVuc2lvbnM6KHQ9e30sdFthLlNUQVJUVVBfVFlQRV09Yz9cImNvbGRcIjpcIndhcm1cIix0W2EuRk9DVVNFRF09XCJcIi5jb25jYXQociksdCl9KSxjP2M9ITE6KDAsaS5zdGFydE5ld1Nlc3Npb24pKFwiV0FSTVwiKSxsLnJlcG9ydFdlYlBhZ2VPcGVuJiZyJiYoMCxvLnJlcG9ydFdlYlBhZ2VPcGVuKShlfHx7fSl9LHQub25QYWdlQ2xvc2U9ZnVuY3Rpb24oKXt2YXIgZSx0LG47cy5pbmZvKFwiQmxpenphcmQgLSAjb25DbG9zZVwiKSxhLmJsaXp6YXJkR3JhcGhlbmUuaW5jcmVtZW50KHttZXRyaWNzTmFtZTphLk9OX0NMT1NFLGRpbWVuc2lvbnM6KGU9e30sZVthLlNUQVJUVVBfVFlQRV09bnVsbCE9PShuPW51bGw9PT0odD0oMCxpLmdldFNlc3Npb25Qcm9wZXJ0aWVzKSgpKXx8dm9pZCAwPT09dD92b2lkIDA6dC5hcHBTdGFydHVwVHlwZSkmJnZvaWQgMCE9PW4/bjpcIlwiLGUpfSl9O3ZhciBsPXt9O3Quc2V0TGlmZWN5Y2xlQ29uZmlnPWZ1bmN0aW9uKGUpe2w9ZX19LDUxNTQyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShlKXt0cnl7YyhyLm5leHQoZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIHMoZSl7dHJ5e2Moci50aHJvdyhlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYyhlKXt2YXIgdDtlLmRvbmU/aShlLnZhbHVlKToodD1lLnZhbHVlLHQgaW5zdGFuY2VvZiBuP3Q6bmV3IG4oKGZ1bmN0aW9uKGUpe2UodCl9KSkpLnRoZW4oYSxzKX1jKChyPXIuYXBwbHkoZSx0fHxbXSkpLm5leHQoKSl9KSl9LGk9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxhPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmlbMF0pdGhyb3cgaVsxXTtyZXR1cm4gaVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBvPXtuZXh0OnMoMCksdGhyb3c6cygxKSxyZXR1cm46cygyKX0sXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiYob1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxvO2Z1bmN0aW9uIHMocyl7cmV0dXJuIGZ1bmN0aW9uKGMpe3JldHVybiBmdW5jdGlvbihzKXtpZihuKXRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO2Zvcig7byYmKG89MCxzWzBdJiYoYT0wKSksYTspdHJ5e2lmKG49MSxyJiYoaT0yJnNbMF0/ci5yZXR1cm46c1swXT9yLnRocm93fHwoKGk9ci5yZXR1cm4pJiZpLmNhbGwociksMCk6ci5uZXh0KSYmIShpPWkuY2FsbChyLHNbMV0pKS5kb25lKXJldHVybiBpO3N3aXRjaChyPTAsaSYmKHM9WzImc1swXSxpLnZhbHVlXSksc1swXSl7Y2FzZSAwOmNhc2UgMTppPXM7YnJlYWs7Y2FzZSA0OnJldHVybiBhLmxhYmVsKysse3ZhbHVlOnNbMV0sZG9uZTohMX07Y2FzZSA1OmEubGFiZWwrKyxyPXNbMV0scz1bMF07Y29udGludWU7Y2FzZSA3OnM9YS5vcHMucG9wKCksYS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoaT0oaT1hLnRyeXMpLmxlbmd0aD4wJiZpW2kubGVuZ3RoLTFdKXx8NiE9PXNbMF0mJjIhPT1zWzBdKSl7YT0wO2NvbnRpbnVlfWlmKDM9PT1zWzBdJiYoIWl8fHNbMV0+aVswXSYmc1sxXTxpWzNdKSl7YS5sYWJlbD1zWzFdO2JyZWFrfWlmKDY9PT1zWzBdJiZhLmxhYmVsPGlbMV0pe2EubGFiZWw9aVsxXSxpPXM7YnJlYWt9aWYoaSYmYS5sYWJlbDxpWzJdKXthLmxhYmVsPWlbMl0sYS5vcHMucHVzaChzKTticmVha31pWzJdJiZhLm9wcy5wb3AoKSxhLnRyeXMucG9wKCk7Y29udGludWV9cz10LmNhbGwoZSxhKX1jYXRjaChlKXtzPVs2LGVdLHI9MH1maW5hbGx5e249aT0wfWlmKDUmc1swXSl0aHJvdyBzWzFdO3JldHVybnt2YWx1ZTpzWzBdP3NbMV06dm9pZCAwLGRvbmU6ITB9fShbcyxjXSl9fX07dC5fX2VzTW9kdWxlPSEwLHQucmVwb3J0V2ViUGFnZU9wZW49dC5zZXRUaXZUcmFuc2FjdGlvbklkUHJvbWlzZT12b2lkIDA7dmFyIG89bigyMTkzMyksYT1uKDcwNjkyKSxzPSgwLG8uZ2V0TG9nZ2VyKShcInJlcG9ydFdlYlBhZ2VPcGVuXCIpLGM9UHJvbWlzZS5yZXNvbHZlKHZvaWQgMCk7dC5zZXRUaXZUcmFuc2FjdGlvbklkUHJvbWlzZT1mdW5jdGlvbihlKXtjPWV9LHQucmVwb3J0V2ViUGFnZU9wZW49ZnVuY3Rpb24oZSl7dmFyIHQsbixvLGwsdSxkO3JldHVybiByKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXt2YXIgcixmLHA7cmV0dXJuIGkodGhpcywoZnVuY3Rpb24oaSl7c3dpdGNoKGkubGFiZWwpe2Nhc2UgMDpyZXR1cm4gcj1uZXcgVVJMU2VhcmNoUGFyYW1zKHNlbGYubG9jYXRpb24uc2VhcmNoKSxwPXtldmVudF9uYW1lOlwiV0VCX1BBR0VfT1BFTlwiLGNhbm9uaWNhbF91cmw6c2VsZi5sb2NhdGlvbi5ob3N0bmFtZSxxdWVyeV9wYXJhbWV0ZXJzOnNlbGYubG9jYXRpb24uc2VhcmNoLnJlcGxhY2UoL15cXD8vLFwiXCIpLGRldmljZV9zY3JlZW5fd2lkdGg6c2NyZWVuLndpZHRoLGRldmljZV9zY3JlZW5faGVpZ2h0OnNjcmVlbi5oZWlnaHQsc2NfcmVmZXJyZXI6bnVsbCE9PSh0PXIuZ2V0KFwic2NfcmVmZXJyZXJcIikpJiZ2b2lkIDAhPT10P3Q6dm9pZCAwLHV0bV9jYW1wYWlnbjpudWxsIT09KG49ci5nZXQoXCJ1dG1fY2FtcGFpZ25cIikpJiZ2b2lkIDAhPT1uP246dm9pZCAwLHV0bV9jb250ZW50Om51bGwhPT0obz1yLmdldChcInV0bV9jb250ZW50XCIpKSYmdm9pZCAwIT09bz9vOnZvaWQgMCx1dG1fbWVkaXVtOm51bGwhPT0obD1yLmdldChcInV0bV9tZWRpdW1cIikpJiZ2b2lkIDAhPT1sP2w6dm9pZCAwLHV0bV9zb3VyY2U6bnVsbCE9PSh1PXIuZ2V0KFwidXRtX3NvdXJjZVwiKSkmJnZvaWQgMCE9PXU/dTp2b2lkIDAsdXRtX3Rlcm06bnVsbCE9PShkPXIuZ2V0KFwidXRtX3Rlcm1cIikpJiZ2b2lkIDAhPT1kP2Q6dm9pZCAwfSxbNCxjXTtjYXNlIDE6cmV0dXJuIHAudGl2X3RyYW5zYWN0aW9uX2lkPWkuc2VudCgpLHAud2ViX2FwcF9mb3JtYXQ9ZS5hcHBGb3JtYXQscC5ub3RpZmljYXRpb25faWQ9ZS5ub3RpZmljYXRpb25JZCxwLm5vdGlmaWNhdGlvbl90eXBlPWUubm90aWZpY2F0aW9uVHlwZSxwLnNvdXJjZT1lLnNvdXJjZSxmPXAscy5pbmZvKFwiTG9nZ2luZyBXRUJfUEFHRV9PUEVOXCIsZiksKDAsYS5sb2dFdmVudCkoZiksWzJdfX0pKX0pKX19LDE1NDg5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fcmVhZHx8ZnVuY3Rpb24oZSx0KXt2YXIgbj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXTtpZighbilyZXR1cm4gZTt2YXIgcixpLG89bi5jYWxsKGUpLGE9W107dHJ5e2Zvcig7KHZvaWQgMD09PXR8fHQtLSA+MCkmJiEocj1vLm5leHQoKSkuZG9uZTspYS5wdXNoKHIudmFsdWUpfWNhdGNoKGUpe2k9e2Vycm9yOmV9fWZpbmFsbHl7dHJ5e3ImJiFyLmRvbmUmJihuPW8ucmV0dXJuKSYmbi5jYWxsKG8pfWZpbmFsbHl7aWYoaSl0aHJvdyBpLmVycm9yfX1yZXR1cm4gYX0saT10aGlzJiZ0aGlzLl9fc3ByZWFkQXJyYXl8fGZ1bmN0aW9uKGUsdCxuKXtpZihufHwyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodmFyIHIsaT0wLG89dC5sZW5ndGg7aTxvO2krKykhciYmaSBpbiB0fHwocnx8KHI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwwLGkpKSxyW2ldPXRbaV0pO3JldHVybiBlLmNvbmNhdChyfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSl9O3QuX19lc01vZHVsZT0hMCx0LnN0YXJ0TmV3U2Vzc2lvbj10LmdldFNlc3Npb25Qcm9wZXJ0aWVzPXZvaWQgMDt2YXIgbyxhPSgwLG4oMjE5MzMpLmdldExvZ2dlcikoXCJzZXNzaW9uXCIpO2Z1bmN0aW9uIHMoZSl7dmFyIHQ9e3Nlc3Npb25JZDpidG9hKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGkoW10scihzZWxmLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoYykpKSwhMSkpKSxhcHBTdGFydHVwVHlwZTplfTthLmRlYnVnKFwiU3RhcnRlZCBuZXcgQmxpenphcmQgc2Vzc2lvbjpcIix0KSxvPXR9dC5nZXRTZXNzaW9uUHJvcGVydGllcz1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT1vJiZzKFwiQ09MRFwiKSxvfSx0LnN0YXJ0TmV3U2Vzc2lvbj1zO3ZhciBjPTEyfSw0NzQ1ODooZSx0KT0+e3QuX19lc01vZHVsZT0hMCx0LmlzRXZlbnQ9dm9pZCAwLHQuaXNFdmVudD1mdW5jdGlvbihlKXtyZXR1cm5cImV2ZW50TmFtZVwiaW4gZX19LDMzNDY5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShlKXt0cnl7YyhyLm5leHQoZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIHMoZSl7dHJ5e2Moci50aHJvdyhlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYyhlKXt2YXIgdDtlLmRvbmU/aShlLnZhbHVlKToodD1lLnZhbHVlLHQgaW5zdGFuY2VvZiBuP3Q6bmV3IG4oKGZ1bmN0aW9uKGUpe2UodCl9KSkpLnRoZW4oYSxzKX1jKChyPXIuYXBwbHkoZSx0fHxbXSkpLm5leHQoKSl9KSl9LGk9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxhPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmlbMF0pdGhyb3cgaVsxXTtyZXR1cm4gaVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBvPXtuZXh0OnMoMCksdGhyb3c6cygxKSxyZXR1cm46cygyKX0sXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiYob1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxvO2Z1bmN0aW9uIHMocyl7cmV0dXJuIGZ1bmN0aW9uKGMpe3JldHVybiBmdW5jdGlvbihzKXtpZihuKXRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO2Zvcig7byYmKG89MCxzWzBdJiYoYT0wKSksYTspdHJ5e2lmKG49MSxyJiYoaT0yJnNbMF0/ci5yZXR1cm46c1swXT9yLnRocm93fHwoKGk9ci5yZXR1cm4pJiZpLmNhbGwociksMCk6ci5uZXh0KSYmIShpPWkuY2FsbChyLHNbMV0pKS5kb25lKXJldHVybiBpO3N3aXRjaChyPTAsaSYmKHM9WzImc1swXSxpLnZhbHVlXSksc1swXSl7Y2FzZSAwOmNhc2UgMTppPXM7YnJlYWs7Y2FzZSA0OnJldHVybiBhLmxhYmVsKysse3ZhbHVlOnNbMV0sZG9uZTohMX07Y2FzZSA1OmEubGFiZWwrKyxyPXNbMV0scz1bMF07Y29udGludWU7Y2FzZSA3OnM9YS5vcHMucG9wKCksYS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoaT0oaT1hLnRyeXMpLmxlbmd0aD4wJiZpW2kubGVuZ3RoLTFdKXx8NiE9PXNbMF0mJjIhPT1zWzBdKSl7YT0wO2NvbnRpbnVlfWlmKDM9PT1zWzBdJiYoIWl8fHNbMV0+aVswXSYmc1sxXTxpWzNdKSl7YS5sYWJlbD1zWzFdO2JyZWFrfWlmKDY9PT1zWzBdJiZhLmxhYmVsPGlbMV0pe2EubGFiZWw9aVsxXSxpPXM7YnJlYWt9aWYoaSYmYS5sYWJlbDxpWzJdKXthLmxhYmVsPWlbMl0sYS5vcHMucHVzaChzKTticmVha31pWzJdJiZhLm9wcy5wb3AoKSxhLnRyeXMucG9wKCk7Y29udGludWV9cz10LmNhbGwoZSxhKX1jYXRjaChlKXtzPVs2LGVdLHI9MH1maW5hbGx5e249aT0wfWlmKDUmc1swXSl0aHJvdyBzWzFdO3JldHVybnt2YWx1ZTpzWzBdP3NbMV06dm9pZCAwLGRvbmU6ITB9fShbcyxjXSl9fX0sbz10aGlzJiZ0aGlzLl9fdmFsdWVzfHxmdW5jdGlvbihlKXt2YXIgdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcixuPXQmJmVbdF0scj0wO2lmKG4pcmV0dXJuIG4uY2FsbChlKTtpZihlJiZcIm51bWJlclwiPT10eXBlb2YgZS5sZW5ndGgpcmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gZSYmcj49ZS5sZW5ndGgmJihlPXZvaWQgMCkse3ZhbHVlOmUmJmVbcisrXSxkb25lOiFlfX19O3Rocm93IG5ldyBUeXBlRXJyb3IodD9cIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCI6XCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpfTt0Ll9fZXNNb2R1bGU9ITAsdC5zZXRJbml0Q2FsbGVkPXQuaW5pdENhbGxlZD10LmxvZ0V2ZW50PXQubG9nVHlwZWRFdmVudD12b2lkIDA7dmFyIGE9bigzNjQyNCkscz1uKDYxNjExKSxjPW4oNDc0NTgpLGw9bigyMTkzMyksdT1uKDExNDgpLGQ9big1NTc4OCksZj1uKDg3NDA0KSxwPW4oODM0ODUpLG09KDAsbC5nZXRMb2dnZXIpKFwibG9nRXZlbnRcIik7dC5sb2dUeXBlZEV2ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHZ9O3ZhciBoPTA7ZnVuY3Rpb24gdihlKXtpZighdC5pbml0Q2FsbGVkKXRocm93IG5ldyBFcnJvcihcImluaXRCbGl6emFyZCBtdXN0IGJlIGNhbGxlZCBwcmlvciB0byBjYWxsaW5nIGxvZ0V2ZW50XCIpO3ZhciBuPVtdLGw9bmV3IERhdGU7bS5pbmZvKFwiTG9nZ2luZyBldmVudFwiLGUuZXZlbnRfbmFtZSxlKTt2YXIgdj0oMCxhLmdldEZyYW1lU3RhcnQpKCk7bi5wdXNoKHYpO3ZhciBnPSgwLHMuZ2V0RXZlbnRNZXRhZGF0YSkoZS5ldmVudF9uYW1lLGwpLHk9e2V2ZW50TmFtZTplLmV2ZW50X25hbWUsbWV0YWRhdGE6ZyxkYXRhOmV9O24ucHVzaCh5KSwoMCxwLmxvZ0RlYnVnQWN0aW9uKSh7dHlwZTpcIkV2ZW50TG9nZ2VkXCIsZXZlbnQ6eX0pLGgrPW4ubGVuZ3RoLGQuYmxpenphcmRHcmFwaGVuZS5hZGRIaXN0b2dyYW0oe21ldHJpY3NOYW1lOmQuTE9HX0VWRU5UX0JVRkZFUl9TSVpFLHZhbHVlOmh9KSxoPm4ubGVuZ3RoJiZtLmRlYnVnKFwiI2xvZ0V2ZW50OiBQZW5kaW5nIGl0ZW1zOiBcIi5jb25jYXQoaCkpLGZ1bmN0aW9uKGUpe3ZhciB0LG47cih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7dmFyIHIscyxsLHYsZyx5O3JldHVybiBpKHRoaXMsKGZ1bmN0aW9uKGkpe3N3aXRjaChpLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsUHJvbWlzZS5hbGwoZSldO2Nhc2UgMTpyPWkuc2VudCgpO3RyeXtmb3Iocz1vKHIpLGw9cy5uZXh0KCk7IWwuZG9uZTtsPXMubmV4dCgpKXY9bC52YWx1ZSxoLS0sbnVsbCE9PXYmJigoMCxhLmlzRnJhbWVTdGFydCkodik/KG0uaW5mbyhcIkVucXVldWluZyBhIG5ldyBGcmFtZVN0YXJ0XCIsdiksKDAscC5sb2dEZWJ1Z0FjdGlvbikoe3R5cGU6XCJGcmFtZVN0YXJ0RW5xdWV1ZWRcIixmcmFtZVN0YXJ0OnZ9KSxkLmJsaXp6YXJkR3JhcGhlbmUuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpkLkxPR19GUkFNRV9TVEFSVCxkaW1lbnNpb25zOnthcHA6bnVsbCE9PSh0PSgwLGYuZ2V0QXBwRW52aXJvbm1lbnQpKCkuYXBwbGljYXRpb24pJiZ2b2lkIDAhPT10P3Q6XCJcIn19KSk6KDAsYy5pc0V2ZW50KSh2KSYmKG0uZGVidWcoXCJFbnF1ZXVpbmcgYW4gZXZlbnRcIix2KSwoMCxwLmxvZ0RlYnVnQWN0aW9uKSh7dHlwZTpcIkV2ZW50RW5xdWV1ZWRcIixldmVudDp2fSksZC5ibGl6emFyZEdyYXBoZW5lLmluY3JlbWVudCh7bWV0cmljc05hbWU6ZC5MT0dfRVZFTlQsZGltZW5zaW9uczp7bmFtZTp2LmV2ZW50TmFtZSxhcHA6bnVsbCE9PShuPSgwLGYuZ2V0QXBwRW52aXJvbm1lbnQpKCkuYXBwbGljYXRpb24pJiZ2b2lkIDAhPT1uP246XCJcIn19KSksdS5kZWZhdWx0TG9nUXVldWUuYXBwZW5kKHYpLG0uZGVidWcoXCIjZW5xdWV1ZUl0ZW1zOiBcIi5jb25jYXQoaCxcIiByZW1haW5pbmdcIikpKX1jYXRjaChlKXtnPXtlcnJvcjplfX1maW5hbGx5e3RyeXtsJiYhbC5kb25lJiYoeT1zLnJldHVybikmJnkuY2FsbChzKX1maW5hbGx5e2lmKGcpdGhyb3cgZy5lcnJvcn19cmV0dXJuWzJdfX0pKX0pKX0obil9dC5sb2dFdmVudD12LHQuaW5pdENhbGxlZD0hMSx0LnNldEluaXRDYWxsZWQ9ZnVuY3Rpb24oKXt0LmluaXRDYWxsZWQ9ITB9fSwxMzY1MTooZSx0KT0+e3QuX19lc01vZHVsZT0hMCx0LnN0cmluZ2lmeUJsaXp6YXJkSnNvbj12b2lkIDAsdC5zdHJpbmdpZnlCbGl6emFyZEpzb249ZnVuY3Rpb24oZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUsKGZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9PXQpcmV0dXJuXCJiaWdpbnRcIj09dHlwZW9mIHQ/dC50b1N0cmluZygpOnR9KSl9fSwxMTQ4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybiByPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPTEscj1hcmd1bWVudHMubGVuZ3RoO248cjtuKyspZm9yKHZhciBpIGluIHQ9YXJndW1lbnRzW25dKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGkpJiYoZVtpXT10W2ldKTtyZXR1cm4gZX0sci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O3QuX19lc01vZHVsZT0hMCx0LmRlZmF1bHRMb2dRdWV1ZT10Lkpzb25Mb2dRdWV1ZT12b2lkIDA7dmFyIGk9big0NzQ1OCksbz1uKDM2NDI0KSxhPW4oMjE5MzMpLHM9big1MDEwNyksYz0oMCxhLmdldExvZ2dlcikoXCJxdWV1ZVwiKSxsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnNlcXVlbmNlSWQ9MSx0aGlzLmxvZ1F1ZXVlTmFtZT1lfXJldHVybiBlLnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24oZSl7aWYoKDAsby5pc0ZyYW1lU3RhcnQpKGUpKWMudHJhY2UoXCJTYXcgbmV3IEZyYW1lU3RhcnQsIGNvcHlpbmcgZm9yIHRoaXMgcXVldWVcIiksdGhpcy5sYXN0RnJhbWVTdGFydD1yKHIoe30sZSkse2xvZ19xdWV1ZV9uYW1lOnRoaXMubG9nUXVldWVOYW1lfSk7ZWxzZXtpZighKDAsaS5pc0V2ZW50KShlKSl0aHJvdyBuZXcgRXJyb3IoXCJJbGxlZ2FsIGl0ZW06IFwiK2UpO2lmKHZvaWQgMD09PXRoaXMubGFzdEZyYW1lU3RhcnQpdGhyb3cgbmV3IEVycm9yKFwiRXZlbnQgYmVmb3JlIEZyYW1lU3RhcnRcIik7dmFyIHQ9cihyKHIocih7fSxlLmRhdGEpLGUubWV0YWRhdGEpLHRoaXMubGFzdEZyYW1lU3RhcnQpLHtsb2dfcXVldWVfc2VxdWVuY2VfaWQ6dGhpcy5zZXF1ZW5jZUlkKyt9KTsoMCxzLnRyYW5zbWl0SnNvbkV2ZW50cykoW3RdKX19LGV9KCk7dC5Kc29uTG9nUXVldWU9bCx0LmRlZmF1bHRMb2dRdWV1ZT1uZXcgbChcIndcIil9LDIxOTMzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fdmFsdWVzfHxmdW5jdGlvbihlKXt2YXIgdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcixuPXQmJmVbdF0scj0wO2lmKG4pcmV0dXJuIG4uY2FsbChlKTtpZihlJiZcIm51bWJlclwiPT10eXBlb2YgZS5sZW5ndGgpcmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gZSYmcj49ZS5sZW5ndGgmJihlPXZvaWQgMCkse3ZhbHVlOmUmJmVbcisrXSxkb25lOiFlfX19O3Rocm93IG5ldyBUeXBlRXJyb3IodD9cIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCI6XCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpfSxpPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O3QuX19lc01vZHVsZT0hMCx0LnNldEFuYWx5dGljc0xvZ2dpbmdFbmFibGVkPXQuZ2V0TG9nZ2VyPXZvaWQgMDt2YXIgbz1pKG4oOTc3ODIpKSxhPSExLHM9bmV3IE1hcDt0LmdldExvZ2dlcj1mdW5jdGlvbihlKXt2YXIgdD1zLmdldChlKTtyZXR1cm4gdm9pZCAwPT09dCYmKCh0PW8uZGVmYXVsdC5nZXRMb2dnZXIoYytlKSkuc2V0RGVmYXVsdExldmVsKG8uZGVmYXVsdC5sZXZlbHMuU0lMRU5UKSxhJiZ0LnNldExldmVsKG8uZGVmYXVsdC5sZXZlbHMuREVCVUcpLHMuc2V0KGUsdCkpLHR9LHQuc2V0QW5hbHl0aWNzTG9nZ2luZ0VuYWJsZWQ9ZnVuY3Rpb24oZSl7dmFyIHQsbjthPWU7dHJ5e2Zvcih2YXIgaT1yKHMudmFsdWVzKCkpLGM9aS5uZXh0KCk7IWMuZG9uZTtjPWkubmV4dCgpKXt2YXIgbD1jLnZhbHVlO2E/bC5zZXRMZXZlbChvLmRlZmF1bHQubGV2ZWxzLkRFQlVHKTpsLnJlc2V0TGV2ZWwoKX19Y2F0Y2goZSl7dD17ZXJyb3I6ZX19ZmluYWxseXt0cnl7YyYmIWMuZG9uZSYmKG49aS5yZXR1cm4pJiZuLmNhbGwoaSl9ZmluYWxseXtpZih0KXRocm93IHQuZXJyb3J9fX07dmFyIGM9XCJBbmFseXRpY3MuXCJ9LDYxNjExOihlLHQsbik9Pnt0Ll9fZXNNb2R1bGU9ITAsdC5nZXRFdmVudE1ldGFkYXRhPXZvaWQgMDt2YXIgcj1uKDgzOTUwKTtmdW5jdGlvbiBpKCl7dmFyIGUsdDtzd2l0Y2gobnVsbD09PSh0PW51bGw9PT0oZT1zZWxmLm5hdmlnYXRvcil8fHZvaWQgMD09PWU/dm9pZCAwOmUuY29ubmVjdGlvbil8fHZvaWQgMD09PXQ/dm9pZCAwOnQudHlwZSl7Y2FzZVwiYmx1ZXRvb3RoXCI6cmV0dXJuXCJCTFVFVE9PVEhcIjtjYXNlXCJjZWxsdWxhclwiOnJldHVyblwiTU9CSUxFXCI7Y2FzZVwid2lmaVwiOnJldHVyblwiV0lGSVwiO2Nhc2VcImV0aGVybmV0XCI6cmV0dXJuXCJFVEhFUk5FVFwiO2Nhc2VcIm5vbmVcIjpyZXR1cm5cIlVOUkVBQ0hBQkxFXCI7ZGVmYXVsdDpyZXR1cm59fWZ1bmN0aW9uIG8oKXt2YXIgZSx0O2lmKG51bGw9PT0odD1udWxsPT09KGU9c2VsZi5uYXZpZ2F0b3IpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNvbm5lY3Rpb24pfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmRvd25saW5rKXJldHVybiAxMDI0KnNlbGYubmF2aWdhdG9yLmNvbm5lY3Rpb24uZG93bmxpbmsqMTAyNH10LmdldEV2ZW50TWV0YWRhdGE9ZnVuY3Rpb24oZSx0KXtyZXR1cm57ZXZlbnRfbmFtZTplLGNsaWVudF90czooMCxyLmFzVGltZXN0YW1wKSh0KSxkZXZpY2VfY29ubmVjdGl2aXR5OmkoKSxjb25uZWN0aW9uX2Rvd25sb2FkX2JhbmR3aWR0aF9icHM6bygpfX19LDM2NDI0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybiByPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPTEscj1hcmd1bWVudHMubGVuZ3RoO248cjtuKyspZm9yKHZhciBpIGluIHQ9YXJndW1lbnRzW25dKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGkpJiYoZVtpXT10W2ldKTtyZXR1cm4gZX0sci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIGEoZSl7dHJ5e2Moci5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBzKGUpe3RyeXtjKHIudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGMoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKGEscyl9Yygocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfSxvPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZpWzBdKXRocm93IGlbMV07cmV0dXJuIGlbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gbz17bmV4dDpzKDApLHRocm93OnMoMSkscmV0dXJuOnMoMil9LFwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmKG9bU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksbztmdW5jdGlvbiBzKHMpe3JldHVybiBmdW5jdGlvbihjKXtyZXR1cm4gZnVuY3Rpb24ocyl7aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtmb3IoO28mJihvPTAsc1swXSYmKGE9MCkpLGE7KXRyeXtpZihuPTEsciYmKGk9MiZzWzBdP3IucmV0dXJuOnNbMF0/ci50aHJvd3x8KChpPXIucmV0dXJuKSYmaS5jYWxsKHIpLDApOnIubmV4dCkmJiEoaT1pLmNhbGwocixzWzFdKSkuZG9uZSlyZXR1cm4gaTtzd2l0Y2gocj0wLGkmJihzPVsyJnNbMF0saS52YWx1ZV0pLHNbMF0pe2Nhc2UgMDpjYXNlIDE6aT1zO2JyZWFrO2Nhc2UgNDpyZXR1cm4gYS5sYWJlbCsrLHt2YWx1ZTpzWzFdLGRvbmU6ITF9O2Nhc2UgNTphLmxhYmVsKysscj1zWzFdLHM9WzBdO2NvbnRpbnVlO2Nhc2UgNzpzPWEub3BzLnBvcCgpLGEudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKGk9KGk9YS50cnlzKS5sZW5ndGg+MCYmaVtpLmxlbmd0aC0xXSl8fDYhPT1zWzBdJiYyIT09c1swXSkpe2E9MDtjb250aW51ZX1pZigzPT09c1swXSYmKCFpfHxzWzFdPmlbMF0mJnNbMV08aVszXSkpe2EubGFiZWw9c1sxXTticmVha31pZig2PT09c1swXSYmYS5sYWJlbDxpWzFdKXthLmxhYmVsPWlbMV0saT1zO2JyZWFrfWlmKGkmJmEubGFiZWw8aVsyXSl7YS5sYWJlbD1pWzJdLGEub3BzLnB1c2gocyk7YnJlYWt9aVsyXSYmYS5vcHMucG9wKCksYS50cnlzLnBvcCgpO2NvbnRpbnVlfXM9dC5jYWxsKGUsYSl9Y2F0Y2goZSl7cz1bNixlXSxyPTB9ZmluYWxseXtuPWk9MH1pZig1JnNbMF0pdGhyb3cgc1sxXTtyZXR1cm57dmFsdWU6c1swXT9zWzFdOnZvaWQgMCxkb25lOiEwfX0oW3MsY10pfX19LGE9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07dC5fX2VzTW9kdWxlPSEwLHQuc2V0VXNlckd1aWRQcm9taXNlPXQuZ2V0RnJhbWVTdGFydD10LmlzRnJhbWVTdGFydD12b2lkIDA7dmFyIHMsYz1hKG4oNDIyMzgpKSxsPW4oOTExMzIpLHU9bigyMTkzMyksZD1uKDg3NDA0KSxmPW4oMTU0ODkpLHA9big5NjQ4NiksbT1uKDQ2MTkwKSxoPSgwLHUuZ2V0TG9nZ2VyKShcImZyYW1lU3RhcnRcIik7dC5pc0ZyYW1lU3RhcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWUudXNlcl9hZ2VudH0sdC5nZXRGcmFtZVN0YXJ0PWZ1bmN0aW9uKCl7dmFyIGUsdDtyZXR1cm4gaSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7dmFyIG4saTtyZXR1cm4gbyh0aGlzLChmdW5jdGlvbihvKXtzd2l0Y2goby5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHldO2Nhc2UgMTpyZXR1cm4gbj1vLnNlbnQoKSxpPXIocih7fSxudWxsIT12P3Y6dj1mdW5jdGlvbigpe3ZhciBlLHQsbixyPW5ldyBjLmRlZmF1bHQsaT1udWxsPT09KGU9ci5nZXRPUygpLm5hbWUpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnRvVXBwZXJDYXNlKCksbz1pP2dbaV18fGk6dm9pZCAwO2lmKGRvY3VtZW50LnJlZmVycmVyKXRyeXtuPW5ldyBVUkwoZG9jdW1lbnQucmVmZXJyZXIpLm9yaWdpbn1jYXRjaChlKXtoLndhcm4oXCJGYWlsZWQgdG8gcGFyc2UgcmVmZXJyZXI6IFwiLGRvY3VtZW50LnJlZmVycmVyLGUpfXJldHVybnt1c2VyX2FnZW50OnIuZ2V0VUEoKSxsb2NhbGU6KDAsbC5nZXRMb2NhbGUpKCksb3NfdHlwZTpvLG9zX3ZlcnNpb246byxhcHBfdHlwZTooMCxkLmdldEFwcEVudmlyb25tZW50KSgpLmFwcFR5cGUsYXBwX2J1aWxkOlwiUFJPRFwiPT09KDAsZC5nZXRBcHBFbnZpcm9ubWVudCkoKS5hcHBCdWlsZD9cIlwiOm51bGw9PT0odD0oMCxkLmdldEFwcEVudmlyb25tZW50KSgpKXx8dm9pZCAwPT09dD92b2lkIDA6dC5hcHBCdWlsZCxhcHBfdmVyc2lvbjooMCxkLmdldEFwcEVudmlyb25tZW50KSgpLmFwcFZlcnNpb24sYnJvd3NlcjpyLmdldEJyb3dzZXIoKS5uYW1lLGJyb3dzZXJfdmVyc2lvbjpyLmdldEJyb3dzZXIoKS52ZXJzaW9uLGRldmljZV9tb2RlbDpyLmdldERldmljZSgpLm1vZGVsLGRvbWFpbjpzZWxmLmxvY2F0aW9uLmhvc3RuYW1lLHJlZmVycmVyOm59fSgpKSx7Y2xpZW50X2lkOigwLG0uZ2V0Q2xpZW50SWQpKCksc2Vzc2lvbl9pZDpudWxsPT09KGU9KDAsZi5nZXRTZXNzaW9uUHJvcGVydGllcykoKSl8fHZvaWQgMD09PWU/dm9pZCAwOmUuc2Vzc2lvbklkLGFwcF9zdGFydHVwX3R5cGU6bnVsbD09PSh0PSgwLGYuZ2V0U2Vzc2lvblByb3BlcnRpZXMpKCkpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmFwcFN0YXJ0dXBUeXBlLHVzZXJfZ3VpZDpudWxsIT1uP246dm9pZCAwfSksKDAscC5pc0VxdWFsKShzLGkpP1syLG51bGxdOihzPWksWzIsaV0pfX0pKX0pKX07dmFyIHYsZz17XCJNQUMgT1NcIjpcIk9TWFwifSx5PVByb21pc2UucmVzb2x2ZShudWxsKTt0LnNldFVzZXJHdWlkUHJvbWlzZT1mdW5jdGlvbihlKXt5PWV9fSw4NzE4MTooZSx0KT0+e3QuX19lc01vZHVsZT0hMCx0LlNUQVRVU0VTX1BPU1NJQkxFX0FVVEhfRkFJTFVSRT10LlNUQVRVU19PSz10LkNPTlRFTlRfVFlQRV9KU09OPXQuREVGQVVMVF9CQVNFX1VSTD10LkRFRkFVTFRfQkFTRV9VUkxfU1RBR0lORz12b2lkIDAsdC5ERUZBVUxUX0JBU0VfVVJMX1NUQUdJTkc9XCJodHRwczovL3N0YWdpbmctdXMtY2VudHJhbDEtZ2NwLmFwaS5zbmFwY2hhdC5jb20vd2ViLWFuYWx5dGljcy93ZWJcIix0LkRFRkFVTFRfQkFTRV9VUkw9XCJodHRwczovL3VzLWNlbnRyYWwxLWdjcC5hcGkuc25hcGNoYXQuY29tL3dlYi1hbmFseXRpY3Mvd2ViXCIsdC5DT05URU5UX1RZUEVfSlNPTj1cImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLThcIix0LlNUQVRVU19PSz0yMDAsdC5TVEFUVVNFU19QT1NTSUJMRV9BVVRIX0ZBSUxVUkU9WzQwMCw0MDEsNDAzXX0sMTQ2MTA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuIHI9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49MSxyPWFyZ3VtZW50cy5sZW5ndGg7bjxyO24rKylmb3IodmFyIGkgaW4gdD1hcmd1bWVudHNbbl0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsaSkmJihlW2ldPXRbaV0pO3JldHVybiBlfSxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saT10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShlKXt0cnl7YyhyLm5leHQoZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIHMoZSl7dHJ5e2Moci50aHJvdyhlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYyhlKXt2YXIgdDtlLmRvbmU/aShlLnZhbHVlKToodD1lLnZhbHVlLHQgaW5zdGFuY2VvZiBuP3Q6bmV3IG4oKGZ1bmN0aW9uKGUpe2UodCl9KSkpLnRoZW4oYSxzKX1jKChyPXIuYXBwbHkoZSx0fHxbXSkpLm5leHQoKSl9KSl9LG89dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxhPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmlbMF0pdGhyb3cgaVsxXTtyZXR1cm4gaVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBvPXtuZXh0OnMoMCksdGhyb3c6cygxKSxyZXR1cm46cygyKX0sXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiYob1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxvO2Z1bmN0aW9uIHMocyl7cmV0dXJuIGZ1bmN0aW9uKGMpe3JldHVybiBmdW5jdGlvbihzKXtpZihuKXRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO2Zvcig7byYmKG89MCxzWzBdJiYoYT0wKSksYTspdHJ5e2lmKG49MSxyJiYoaT0yJnNbMF0/ci5yZXR1cm46c1swXT9yLnRocm93fHwoKGk9ci5yZXR1cm4pJiZpLmNhbGwociksMCk6ci5uZXh0KSYmIShpPWkuY2FsbChyLHNbMV0pKS5kb25lKXJldHVybiBpO3N3aXRjaChyPTAsaSYmKHM9WzImc1swXSxpLnZhbHVlXSksc1swXSl7Y2FzZSAwOmNhc2UgMTppPXM7YnJlYWs7Y2FzZSA0OnJldHVybiBhLmxhYmVsKysse3ZhbHVlOnNbMV0sZG9uZTohMX07Y2FzZSA1OmEubGFiZWwrKyxyPXNbMV0scz1bMF07Y29udGludWU7Y2FzZSA3OnM9YS5vcHMucG9wKCksYS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoaT0oaT1hLnRyeXMpLmxlbmd0aD4wJiZpW2kubGVuZ3RoLTFdKXx8NiE9PXNbMF0mJjIhPT1zWzBdKSl7YT0wO2NvbnRpbnVlfWlmKDM9PT1zWzBdJiYoIWl8fHNbMV0+aVswXSYmc1sxXTxpWzNdKSl7YS5sYWJlbD1zWzFdO2JyZWFrfWlmKDY9PT1zWzBdJiZhLmxhYmVsPGlbMV0pe2EubGFiZWw9aVsxXSxpPXM7YnJlYWt9aWYoaSYmYS5sYWJlbDxpWzJdKXthLmxhYmVsPWlbMl0sYS5vcHMucHVzaChzKTticmVha31pWzJdJiZhLm9wcy5wb3AoKSxhLnRyeXMucG9wKCk7Y29udGludWV9cz10LmNhbGwoZSxhKX1jYXRjaChlKXtzPVs2LGVdLHI9MH1maW5hbGx5e249aT0wfWlmKDUmc1swXSl0aHJvdyBzWzFdO3JldHVybnt2YWx1ZTpzWzBdP3NbMV06dm9pZCAwLGRvbmU6ITB9fShbcyxjXSl9fX0sYT10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTt0Ll9fZXNNb2R1bGU9ITAsdC5mZXRjaFJldHJ5PXZvaWQgMDt2YXIgcz1uKDgyODUxKSxjPW4oMjE5MzMpLGw9bigzNzQwKSx1PW4oNTU3ODgpLGQ9YShuKDk2NDg2KSk7dC5mZXRjaFJldHJ5PWZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIHZvaWQgMD09PXQmJih0PXt9KSxpKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXt2YXIgaSxhLGMsdjtyZXR1cm4gbyh0aGlzLChmdW5jdGlvbih5KXtzd2l0Y2goeS5sYWJlbCl7Y2FzZSAwOmk9MSxhPSExLGM9ZnVuY3Rpb24oKXt2YXIgYyx2LHksRSxfLEksUztyZXR1cm4gbyh0aGlzLChmdW5jdGlvbihvKXtzd2l0Y2goby5sYWJlbCl7Y2FzZSAwOmM9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90KCk6dCxhJiYoYy5rZWVwYWxpdmU9ITEpLHY9dm9pZCAwLGMuc2lnbmFsfHwoeT1uZXcgQWJvcnRDb250cm9sbGVyLHY9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4geS5hYm9ydCgpfSksZyksYy5zaWduYWw9eS5zaWduYWwpLEU9XCJcIixvLmxhYmVsPTE7Y2FzZSAxOnJldHVybiBvLnRyeXMucHVzaChbMSw0LDUsNl0pLFs0LCgwLGwudGltZWQpKChmdW5jdGlvbigpe3JldHVybiBmZXRjaChlLGQuZGVmYXVsdC5vbWl0KGMsW1wib25TdGF0dXNcIl0pKX0pLHttZXRyaWNzTmFtZTp1Lk5FVFdPUktfUkVRVUVTVF9MQVRFTkNZX01TfSldO2Nhc2UgMjpyZXR1cm4gXz1vLnNlbnQoKSxFPV8uc3RhdHVzLnRvU3RyaW5nKCksWzQsbnVsbD09PShuPW51bGw9PWM/dm9pZCAwOmMub25TdGF0dXMpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmNhbGwoYyxfLnN0YXR1cyldO2Nhc2UgMzpyZXR1cm4gby5zZW50KCksXy5vaz8odS5ibGl6emFyZEdyYXBoZW5lLmFkZEhpc3RvZ3JhbSh7bWV0cmljc05hbWU6dS5ORVRXT1JLX1JFUVVFU1RfQVRURU1QVFNfQ09VTlQsZGltZW5zaW9uczptKGUpLHZhbHVlOml9KSxbMix7dmFsdWU6X31dKTooZi53YXJuKFwiUmVxdWVzdCBmYWlsZWRcIixfLnN0YXR1cyxfLnN0YXR1c1RleHQpLFszLDZdKTtjYXNlIDQ6cmV0dXJuIEk9by5zZW50KCksZi53YXJuKFwiZmV0Y2ggZXJyb3JcIixJKSxFPVwiZXJyb3JfXCIuY29uY2F0KEkgaW5zdGFuY2VvZiBFcnJvcj9JLm5hbWU6dHlwZW9mIEkpLGMua2VlcGFsaXZlJiYoZi5kZWJ1ZyhcIlJlY2VpdmVkIGFuIGVycm9yIHdoaWxlIGtlZXBhbGl2ZSB3YXMgZW5hYmxlZCwgcmV0cnlpbmcgd2l0aG91dCBrZWVwYWxpdmVcIixJKSxhPSEwKSxbMyw2XTtjYXNlIDU6cmV0dXJuIHYmJmNsZWFyVGltZW91dCh2KSx1LmJsaXp6YXJkR3JhcGhlbmUuaW5jcmVtZW50KHttZXRyaWNzTmFtZTp1Lk5FVFdPUktfUkVRVUVTVCxkaW1lbnNpb25zOnIocih7fSxtKGUpKSx7c3RhdHVzOkV9KX0pLFs3XTtjYXNlIDY6cmV0dXJuIGk8aD8oUz1wKGkpLGYuZGVidWcoXCJSZXRyeWluZyBhZnRlciBcIi5jb25jYXQoUyxcIm1zLi4uXCIpKSxbNCwoMCxzLnNsZWVwKShTKV0pOlszLDhdO2Nhc2UgNzpvLnNlbnQoKSxvLmxhYmVsPTg7Y2FzZSA4OnJldHVyblsyXX19KSl9LHkubGFiZWw9MTtjYXNlIDE6cmV0dXJuWzUsYygpXTtjYXNlIDI6aWYoXCJvYmplY3RcIj09dHlwZW9mKHY9eS5zZW50KCkpKXJldHVyblsyLHYudmFsdWVdO3kubGFiZWw9MztjYXNlIDM6aWYoaSsrPGgpcmV0dXJuWzMsMV07eS5sYWJlbD00O2Nhc2UgNDpyZXR1cm5bMixudWxsXX19KSl9KSl9O3ZhciBmPSgwLGMuZ2V0TG9nZ2VyKShcImZldGNoUmV0cnlcIikscD1mdW5jdGlvbihlKXtyZXR1cm4gMT09PWU/MDpkLmRlZmF1bHQucmFuZG9tKDAsdipNYXRoLnBvdygyLGUtMikpfTtmdW5jdGlvbiBtKGUpe3RyeXt2YXIgdD1uZXcgVVJMKGUpO3JldHVybntob3N0OnQuaG9zdG5hbWUuc3Vic3RyaW5nKDAsNjQpLHBhdGg6dC5wYXRobmFtZS5yZXBsYWNlKC9eXFwvLyxcIlwiKS5zdWJzdHJpbmcoMCw2NCl9fWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBUeXBlRXJyb3IpcmV0dXJue2hvc3Q6XCJpbnZhbGlkXCIscGF0aDpcImludmFsaWRcIn07dGhyb3cgZX19dmFyIGg9MTAsdj0yNTAsZz0xNWU0fSw0NzAzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShlKXt0cnl7YyhyLm5leHQoZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIHMoZSl7dHJ5e2Moci50aHJvdyhlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYyhlKXt2YXIgdDtlLmRvbmU/aShlLnZhbHVlKToodD1lLnZhbHVlLHQgaW5zdGFuY2VvZiBuP3Q6bmV3IG4oKGZ1bmN0aW9uKGUpe2UodCl9KSkpLnRoZW4oYSxzKX1jKChyPXIuYXBwbHkoZSx0fHxbXSkpLm5leHQoKSl9KSl9LGk9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxhPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmlbMF0pdGhyb3cgaVsxXTtyZXR1cm4gaVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBvPXtuZXh0OnMoMCksdGhyb3c6cygxKSxyZXR1cm46cygyKX0sXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiYob1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxvO2Z1bmN0aW9uIHMocyl7cmV0dXJuIGZ1bmN0aW9uKGMpe3JldHVybiBmdW5jdGlvbihzKXtpZihuKXRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO2Zvcig7byYmKG89MCxzWzBdJiYoYT0wKSksYTspdHJ5e2lmKG49MSxyJiYoaT0yJnNbMF0/ci5yZXR1cm46c1swXT9yLnRocm93fHwoKGk9ci5yZXR1cm4pJiZpLmNhbGwociksMCk6ci5uZXh0KSYmIShpPWkuY2FsbChyLHNbMV0pKS5kb25lKXJldHVybiBpO3N3aXRjaChyPTAsaSYmKHM9WzImc1swXSxpLnZhbHVlXSksc1swXSl7Y2FzZSAwOmNhc2UgMTppPXM7YnJlYWs7Y2FzZSA0OnJldHVybiBhLmxhYmVsKysse3ZhbHVlOnNbMV0sZG9uZTohMX07Y2FzZSA1OmEubGFiZWwrKyxyPXNbMV0scz1bMF07Y29udGludWU7Y2FzZSA3OnM9YS5vcHMucG9wKCksYS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoaT0oaT1hLnRyeXMpLmxlbmd0aD4wJiZpW2kubGVuZ3RoLTFdKXx8NiE9PXNbMF0mJjIhPT1zWzBdKSl7YT0wO2NvbnRpbnVlfWlmKDM9PT1zWzBdJiYoIWl8fHNbMV0+aVswXSYmc1sxXTxpWzNdKSl7YS5sYWJlbD1zWzFdO2JyZWFrfWlmKDY9PT1zWzBdJiZhLmxhYmVsPGlbMV0pe2EubGFiZWw9aVsxXSxpPXM7YnJlYWt9aWYoaSYmYS5sYWJlbDxpWzJdKXthLmxhYmVsPWlbMl0sYS5vcHMucHVzaChzKTticmVha31pWzJdJiZhLm9wcy5wb3AoKSxhLnRyeXMucG9wKCk7Y29udGludWV9cz10LmNhbGwoZSxhKX1jYXRjaChlKXtzPVs2LGVdLHI9MH1maW5hbGx5e249aT0wfWlmKDUmc1swXSl0aHJvdyBzWzFdO3JldHVybnt2YWx1ZTpzWzBdP3NbMV06dm9pZCAwLGRvbmU6ITB9fShbcyxjXSl9fX07dC5fX2VzTW9kdWxlPSEwLHQuZ2V0VW5hdXRoZW50aWNhdGVkQmFzZVVybD10LmdldFVwbG9hZENvbmZpZz12b2lkIDA7dmFyIG89bigyNDAzMyksYT1uKDcyNTgwKSxzPW4oODcxODEpLGM9big4OTk2NiksbD1uKDg3NDA0KSx1PW4oNzQyOSksZD1uKDIxOTMzKTtmdW5jdGlvbiBmKCl7cmV0dXJuKDAsbC5nZXRDb2xsZWN0aW9uTW9kZSkoKT09PXUuQ29sbGVjdGlvbk1vZGUuU1RBR0U/cy5ERUZBVUxUX0JBU0VfVVJMX1NUQUdJTkc6cy5ERUZBVUxUX0JBU0VfVVJMfXQuZ2V0VXBsb2FkQ29uZmlnPWZ1bmN0aW9uKGUpe3JldHVybiByKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXt2YXIgdCxuLHIscyxsLHU7cmV0dXJuIGkodGhpcywoZnVuY3Rpb24oaSl7c3dpdGNoKGkubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCwoMCxjLmdldEF1dGhTdGF0ZSkoKV07Y2FzZSAxOnJldHVybiB0PWkuc2VudCgpLG49KDAsYy5nZXRTc29DbGllbnRJZCkoKSxyPW4mJnQuc3NvVG9rZW4mJnQuYXV0aFN0YXR1cz09PWMuQXV0aFN0YXR1cy5BVVRIRU5USUNBVEVELGUmJnI/KHAuaW5mbyhcIlNTTyB0b2tlbnMgY2Fubm90IGJlIHJlZnJlc2hlZCAtIGlmIHByb3ZpZGVyIGRvZXMgbm90IHByb3ZpZGUgYSBuZXcgb25lIGFzeW5jaHJvbm91c2x5IHRoaXMgbWF5IGJlIGFuIGlzc3VlIHdpdGggdGhlIHByb3ZpZGVyXCIpLFsyLGVdKTpyPyhsPVwiQmVhcmVyIFwiLmNvbmNhdCh0LnNzb1Rva2VuKSxbMyw0XSk6WzMsMl07Y2FzZSAyOnJldHVybiB1PVwiU0NBIFwiLmNvbmNhdCxbNCwoMCxvLmdldFNjYVRva2VuKShCb29sZWFuKGUpKV07Y2FzZSAzOmw9dS5hcHBseShcIlNDQSBcIixbaS5zZW50KCldKSxpLmxhYmVsPTQ7Y2FzZSA0OnJldHVybiBzPWwsWzIse2Jhc2VVcmw6cj8oMCxhLmdldEF1dGhCYXNlVXJsKShuKTpmKCksY3JlZGVudGlhbHM6cj9cImluY2x1ZGVcIjpcInNhbWUtb3JpZ2luXCIsYXV0aG9yaXphdGlvbkhlYWRlcjpzfV19fSkpfSkpfSx0LmdldFVuYXV0aGVudGljYXRlZEJhc2VVcmw9Zjt2YXIgcD0oMCxkLmdldExvZ2dlcikoXCJ1cGxvYWRDb25maWdcIil9LDUwMTA3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShlKXt0cnl7YyhyLm5leHQoZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIHMoZSl7dHJ5e2Moci50aHJvdyhlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYyhlKXt2YXIgdDtlLmRvbmU/aShlLnZhbHVlKToodD1lLnZhbHVlLHQgaW5zdGFuY2VvZiBuP3Q6bmV3IG4oKGZ1bmN0aW9uKGUpe2UodCl9KSkpLnRoZW4oYSxzKX1jKChyPXIuYXBwbHkoZSx0fHxbXSkpLm5leHQoKSl9KSl9LGk9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxhPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmlbMF0pdGhyb3cgaVsxXTtyZXR1cm4gaVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBvPXtuZXh0OnMoMCksdGhyb3c6cygxKSxyZXR1cm46cygyKX0sXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiYob1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxvO2Z1bmN0aW9uIHMocyl7cmV0dXJuIGZ1bmN0aW9uKGMpe3JldHVybiBmdW5jdGlvbihzKXtpZihuKXRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO2Zvcig7byYmKG89MCxzWzBdJiYoYT0wKSksYTspdHJ5e2lmKG49MSxyJiYoaT0yJnNbMF0/ci5yZXR1cm46c1swXT9yLnRocm93fHwoKGk9ci5yZXR1cm4pJiZpLmNhbGwociksMCk6ci5uZXh0KSYmIShpPWkuY2FsbChyLHNbMV0pKS5kb25lKXJldHVybiBpO3N3aXRjaChyPTAsaSYmKHM9WzImc1swXSxpLnZhbHVlXSksc1swXSl7Y2FzZSAwOmNhc2UgMTppPXM7YnJlYWs7Y2FzZSA0OnJldHVybiBhLmxhYmVsKysse3ZhbHVlOnNbMV0sZG9uZTohMX07Y2FzZSA1OmEubGFiZWwrKyxyPXNbMV0scz1bMF07Y29udGludWU7Y2FzZSA3OnM9YS5vcHMucG9wKCksYS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoaT0oaT1hLnRyeXMpLmxlbmd0aD4wJiZpW2kubGVuZ3RoLTFdKXx8NiE9PXNbMF0mJjIhPT1zWzBdKSl7YT0wO2NvbnRpbnVlfWlmKDM9PT1zWzBdJiYoIWl8fHNbMV0+aVswXSYmc1sxXTxpWzNdKSl7YS5sYWJlbD1zWzFdO2JyZWFrfWlmKDY9PT1zWzBdJiZhLmxhYmVsPGlbMV0pe2EubGFiZWw9aVsxXSxpPXM7YnJlYWt9aWYoaSYmYS5sYWJlbDxpWzJdKXthLmxhYmVsPWlbMl0sYS5vcHMucHVzaChzKTticmVha31pWzJdJiZhLm9wcy5wb3AoKSxhLnRyeXMucG9wKCk7Y29udGludWV9cz10LmNhbGwoZSxhKX1jYXRjaChlKXtzPVs2LGVdLHI9MH1maW5hbGx5e249aT0wfWlmKDUmc1swXSl0aHJvdyBzWzFdO3JldHVybnt2YWx1ZTpzWzBdP3NbMV06dm9pZCAwLGRvbmU6ITB9fShbcyxjXSl9fX07dC5fX2VzTW9kdWxlPSEwLHQudHJhbnNtaXRKc29uRXZlbnRzPXZvaWQgMDt2YXIgbz1uKDEzNjUxKSxhPW4oNDcwMykscz1uKDg3MTgxKSxjPW4oMjE5MzMpLGw9bigxNDYxMCksdT1uKDgzNDg1KTt0LnRyYW5zbWl0SnNvbkV2ZW50cz1mdW5jdGlvbihlKXtyZXR1cm4gcih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7dmFyIHQsbixjPXRoaXM7cmV0dXJuIGkodGhpcywoZnVuY3Rpb24oZil7c3dpdGNoKGYubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCwoMCxhLmdldFVwbG9hZENvbmZpZykoKV07Y2FzZSAxOnJldHVybiB0PWYuc2VudCgpLG49KDAsby5zdHJpbmdpZnlCbGl6emFyZEpzb24pKGUpLGQuZGVidWcoXCJVcGxvYWRpbmcgXCIuY29uY2F0KGUubGVuZ3RoLFwiIGV2ZW50KHMpLi4uXCIpKSxbNCwoMCxsLmZldGNoUmV0cnkpKFwiXCIuY29uY2F0KHQuYmFzZVVybCxcIi9ldmVudHNcIiksKGZ1bmN0aW9uKCl7cmV0dXJue21ldGhvZDpcIlBPU1RcIixoZWFkZXJzOntcIkNvbnRlbnQtVHlwZVwiOnMuQ09OVEVOVF9UWVBFX0pTT04sQXV0aG9yaXphdGlvbjp0LmF1dGhvcml6YXRpb25IZWFkZXIsXCJYLUJsaXp6YXJkLVVwbG9hZC1UaW1lc3RhbXBcIjpcIlwiLmNvbmNhdCgobmV3IERhdGUpLmdldFRpbWUoKSl9LGJvZHk6bixjcmVkZW50aWFsczp0LmNyZWRlbnRpYWxzLGtlZXBhbGl2ZTohMCxvblN0YXR1czpmdW5jdGlvbihlKXtyZXR1cm4gcihjLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7cmV0dXJuIGkodGhpcywoZnVuY3Rpb24obil7c3dpdGNoKG4ubGFiZWwpe2Nhc2UgMDpyZXR1cm4gcy5TVEFUVVNFU19QT1NTSUJMRV9BVVRIX0ZBSUxVUkUuaW5jbHVkZXMoZSk/KGQuaW5mbyhcIkF1dGggZmFpbHVyZSwgYXR0ZW1wdGluZyB0byByZWZyZXNoIGF1dGhlbnRpY2F0aW9uLi4uXCIpLFs0LCgwLGEuZ2V0VXBsb2FkQ29uZmlnKSh0KV0pOlszLDJdO2Nhc2UgMTp0PW4uc2VudCgpLG4ubGFiZWw9MjtjYXNlIDI6cmV0dXJuWzJdfX0pKX0pKX19fSkpXTtjYXNlIDI6cmV0dXJuIGYuc2VudCgpPyhkLmRlYnVnKFwiVXBsb2FkZWQgXCIuY29uY2F0KGUubGVuZ3RoLFwiIGV2ZW50KHMpXCIpLGUpLCgwLHUubG9nRGVidWdBY3Rpb24pKHt0eXBlOlwiRXZlbnRzVXBsb2FkZWRcIixldmVudHM6ZX0pKTpkLmVycm9yKFwiRmFpbGVkIHRvIHVwbG9hZCBldmVudHMgYWZ0ZXIgcmV0cmllcywgZGlzY2FyZGluZ1wiKSxbMl19fSkpfSkpfTt2YXIgZD0oMCxjLmdldExvZ2dlcikoXCJ0cmFuc21pdFwiKX0sODI4NTE6KGUsdCk9Pnt0Ll9fZXNNb2R1bGU9ITAsdC5zbGVlcD12b2lkIDAsdC5zbGVlcD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQpe3JldHVybiBzZXRUaW1lb3V0KHQsZSl9KSl9fSwzNzQwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybiByPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPTEscj1hcmd1bWVudHMubGVuZ3RoO248cjtuKyspZm9yKHZhciBpIGluIHQ9YXJndW1lbnRzW25dKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGkpJiYoZVtpXT10W2ldKTtyZXR1cm4gZX0sci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIGEoZSl7dHJ5e2Moci5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBzKGUpe3RyeXtjKHIudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGMoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKGEscyl9Yygocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfSxvPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZpWzBdKXRocm93IGlbMV07cmV0dXJuIGlbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gbz17bmV4dDpzKDApLHRocm93OnMoMSkscmV0dXJuOnMoMil9LFwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmKG9bU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksbztmdW5jdGlvbiBzKHMpe3JldHVybiBmdW5jdGlvbihjKXtyZXR1cm4gZnVuY3Rpb24ocyl7aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtmb3IoO28mJihvPTAsc1swXSYmKGE9MCkpLGE7KXRyeXtpZihuPTEsciYmKGk9MiZzWzBdP3IucmV0dXJuOnNbMF0/ci50aHJvd3x8KChpPXIucmV0dXJuKSYmaS5jYWxsKHIpLDApOnIubmV4dCkmJiEoaT1pLmNhbGwocixzWzFdKSkuZG9uZSlyZXR1cm4gaTtzd2l0Y2gocj0wLGkmJihzPVsyJnNbMF0saS52YWx1ZV0pLHNbMF0pe2Nhc2UgMDpjYXNlIDE6aT1zO2JyZWFrO2Nhc2UgNDpyZXR1cm4gYS5sYWJlbCsrLHt2YWx1ZTpzWzFdLGRvbmU6ITF9O2Nhc2UgNTphLmxhYmVsKysscj1zWzFdLHM9WzBdO2NvbnRpbnVlO2Nhc2UgNzpzPWEub3BzLnBvcCgpLGEudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKGk9KGk9YS50cnlzKS5sZW5ndGg+MCYmaVtpLmxlbmd0aC0xXSl8fDYhPT1zWzBdJiYyIT09c1swXSkpe2E9MDtjb250aW51ZX1pZigzPT09c1swXSYmKCFpfHxzWzFdPmlbMF0mJnNbMV08aVszXSkpe2EubGFiZWw9c1sxXTticmVha31pZig2PT09c1swXSYmYS5sYWJlbDxpWzFdKXthLmxhYmVsPWlbMV0saT1zO2JyZWFrfWlmKGkmJmEubGFiZWw8aVsyXSl7YS5sYWJlbD1pWzJdLGEub3BzLnB1c2gocyk7YnJlYWt9aVsyXSYmYS5vcHMucG9wKCksYS50cnlzLnBvcCgpO2NvbnRpbnVlfXM9dC5jYWxsKGUsYSl9Y2F0Y2goZSl7cz1bNixlXSxyPTB9ZmluYWxseXtuPWk9MH1pZig1JnNbMF0pdGhyb3cgc1sxXTtyZXR1cm57dmFsdWU6c1swXT9zWzFdOnZvaWQgMCxkb25lOiEwfX0oW3MsY10pfX19O3QuX19lc01vZHVsZT0hMCx0LnRpbWVkPXZvaWQgMDt2YXIgYT1uKDU1Nzg4KTt0LnRpbWVkPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3ZhciBuO3JldHVybiBvKHRoaXMsKGZ1bmN0aW9uKGkpe3N3aXRjaChpLmxhYmVsKXtjYXNlIDA6bj1wZXJmb3JtYW5jZS5ub3coKSxpLmxhYmVsPTE7Y2FzZSAxOnJldHVybiBpLnRyeXMucHVzaChbMSwsMyw0XSksWzQsZSgpXTtjYXNlIDI6cmV0dXJuWzIsaS5zZW50KCldO2Nhc2UgMzpyZXR1cm4gYS5ibGl6emFyZEdyYXBoZW5lLmFkZFRpbWVyKHIocih7fSx0KSx7bWlsbGlTZWM6TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKS1uKX0pKSxbN107Y2FzZSA0OnJldHVyblsyXX19KSl9KSl9fSw4Mzk1MDooZSx0KT0+e3QuX19lc01vZHVsZT0hMCx0LmFzVGltZXN0YW1wPXZvaWQgMCx0LmFzVGltZXN0YW1wPWZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFRpbWUoKS8xZTN9fSw4OTQxMDooZSx0LG4pPT57dmFyIHI7bi5yKHQpLG4uZCh0LHtOSUw6KCk9Pk4scGFyc2U6KCk9PnYsc3RyaW5naWZ5OigpPT51LHYxOigpPT5oLHYzOigpPT5DLHY0OigpPT5BLHY1OigpPT5PLHZhbGlkYXRlOigpPT5zLHZlcnNpb246KCk9Pnd9KTt2YXIgaT1uZXcgVWludDhBcnJheSgxNik7ZnVuY3Rpb24gbygpe2lmKCFyJiYhKHI9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGNyeXB0byYmY3J5cHRvLmdldFJhbmRvbVZhbHVlcyYmY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0byl8fFwidW5kZWZpbmVkXCIhPXR5cGVvZiBtc0NyeXB0byYmXCJmdW5jdGlvblwiPT10eXBlb2YgbXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzJiZtc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChtc0NyeXB0bykpKXRocm93IG5ldyBFcnJvcihcImNyeXB0by5nZXRSYW5kb21WYWx1ZXMoKSBub3Qgc3VwcG9ydGVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkI2dldHJhbmRvbXZhbHVlcy1ub3Qtc3VwcG9ydGVkXCIpO3JldHVybiByKGkpfWNvbnN0IGE9L14oPzpbMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMS01XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDApJC9pLHM9ZnVuY3Rpb24oZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUmJmEudGVzdChlKX07Zm9yKHZhciBjPVtdLGw9MDtsPDI1NjsrK2wpYy5wdXNoKChsKzI1NikudG9TdHJpbmcoMTYpLnN1YnN0cigxKSk7Y29uc3QgdT1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxuPShjW2VbdCswXV0rY1tlW3QrMV1dK2NbZVt0KzJdXStjW2VbdCszXV0rXCItXCIrY1tlW3QrNF1dK2NbZVt0KzVdXStcIi1cIitjW2VbdCs2XV0rY1tlW3QrN11dK1wiLVwiK2NbZVt0KzhdXStjW2VbdCs5XV0rXCItXCIrY1tlW3QrMTBdXStjW2VbdCsxMV1dK2NbZVt0KzEyXV0rY1tlW3QrMTNdXStjW2VbdCsxNF1dK2NbZVt0KzE1XV0pLnRvTG93ZXJDYXNlKCk7aWYoIXMobikpdGhyb3cgVHlwZUVycm9yKFwiU3RyaW5naWZpZWQgVVVJRCBpcyBpbnZhbGlkXCIpO3JldHVybiBufTt2YXIgZCxmLHA9MCxtPTA7Y29uc3QgaD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dCYmbnx8MCxpPXR8fG5ldyBBcnJheSgxNiksYT0oZT1lfHx7fSkubm9kZXx8ZCxzPXZvaWQgMCE9PWUuY2xvY2tzZXE/ZS5jbG9ja3NlcTpmO2lmKG51bGw9PWF8fG51bGw9PXMpe3ZhciBjPWUucmFuZG9tfHwoZS5ybmd8fG8pKCk7bnVsbD09YSYmKGE9ZD1bMXxjWzBdLGNbMV0sY1syXSxjWzNdLGNbNF0sY1s1XV0pLG51bGw9PXMmJihzPWY9MTYzODMmKGNbNl08PDh8Y1s3XSkpfXZhciBsPXZvaWQgMCE9PWUubXNlY3M/ZS5tc2VjczpEYXRlLm5vdygpLGg9dm9pZCAwIT09ZS5uc2Vjcz9lLm5zZWNzOm0rMSx2PWwtcCsoaC1tKS8xZTQ7aWYodjwwJiZ2b2lkIDA9PT1lLmNsb2Nrc2VxJiYocz1zKzEmMTYzODMpLCh2PDB8fGw+cCkmJnZvaWQgMD09PWUubnNlY3MmJihoPTApLGg+PTFlNCl0aHJvdyBuZXcgRXJyb3IoXCJ1dWlkLnYxKCk6IENhbid0IGNyZWF0ZSBtb3JlIHRoYW4gMTBNIHV1aWRzL3NlY1wiKTtwPWwsbT1oLGY9czt2YXIgZz0oMWU0KigyNjg0MzU0NTUmKGwrPTEyMjE5MjkyOGU1KSkraCklNDI5NDk2NzI5NjtpW3IrK109Zz4+PjI0JjI1NSxpW3IrK109Zz4+PjE2JjI1NSxpW3IrK109Zz4+PjgmMjU1LGlbcisrXT0yNTUmZzt2YXIgeT1sLzQyOTQ5NjcyOTYqMWU0JjI2ODQzNTQ1NTtpW3IrK109eT4+PjgmMjU1LGlbcisrXT0yNTUmeSxpW3IrK109eT4+PjI0JjE1fDE2LGlbcisrXT15Pj4+MTYmMjU1LGlbcisrXT1zPj4+OHwxMjgsaVtyKytdPTI1NSZzO2Zvcih2YXIgRT0wO0U8NjsrK0UpaVtyK0VdPWFbRV07cmV0dXJuIHR8fHUoaSl9LHY9ZnVuY3Rpb24oZSl7aWYoIXMoZSkpdGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBVVUlEXCIpO3ZhciB0LG49bmV3IFVpbnQ4QXJyYXkoMTYpO3JldHVybiBuWzBdPSh0PXBhcnNlSW50KGUuc2xpY2UoMCw4KSwxNikpPj4+MjQsblsxXT10Pj4+MTYmMjU1LG5bMl09dD4+PjgmMjU1LG5bM109MjU1JnQsbls0XT0odD1wYXJzZUludChlLnNsaWNlKDksMTMpLDE2KSk+Pj44LG5bNV09MjU1JnQsbls2XT0odD1wYXJzZUludChlLnNsaWNlKDE0LDE4KSwxNikpPj4+OCxuWzddPTI1NSZ0LG5bOF09KHQ9cGFyc2VJbnQoZS5zbGljZSgxOSwyMyksMTYpKT4+Pjgsbls5XT0yNTUmdCxuWzEwXT0odD1wYXJzZUludChlLnNsaWNlKDI0LDM2KSwxNikpLzEwOTk1MTE2Mjc3NzYmMjU1LG5bMTFdPXQvNDI5NDk2NzI5NiYyNTUsblsxMl09dD4+PjI0JjI1NSxuWzEzXT10Pj4+MTYmMjU1LG5bMTRdPXQ+Pj44JjI1NSxuWzE1XT0yNTUmdCxufTtmdW5jdGlvbiBnKGUsdCxuKXtmdW5jdGlvbiByKGUscixpLG8pe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT1mdW5jdGlvbihlKXtlPXVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChlKSk7Zm9yKHZhciB0PVtdLG49MDtuPGUubGVuZ3RoOysrbil0LnB1c2goZS5jaGFyQ29kZUF0KG4pKTtyZXR1cm4gdH0oZSkpLFwic3RyaW5nXCI9PXR5cGVvZiByJiYocj12KHIpKSwxNiE9PXIubGVuZ3RoKXRocm93IFR5cGVFcnJvcihcIk5hbWVzcGFjZSBtdXN0IGJlIGFycmF5LWxpa2UgKDE2IGl0ZXJhYmxlIGludGVnZXIgdmFsdWVzLCAwLTI1NSlcIik7dmFyIGE9bmV3IFVpbnQ4QXJyYXkoMTYrZS5sZW5ndGgpO2lmKGEuc2V0KHIpLGEuc2V0KGUsci5sZW5ndGgpLChhPW4oYSkpWzZdPTE1JmFbNl18dCxhWzhdPTYzJmFbOF18MTI4LGkpe289b3x8MDtmb3IodmFyIHM9MDtzPDE2OysrcylpW28rc109YVtzXTtyZXR1cm4gaX1yZXR1cm4gdShhKX10cnl7ci5uYW1lPWV9Y2F0Y2goZSl7fXJldHVybiByLkROUz1cIjZiYTdiODEwLTlkYWQtMTFkMS04MGI0LTAwYzA0ZmQ0MzBjOFwiLHIuVVJMPVwiNmJhN2I4MTEtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4XCIscn1mdW5jdGlvbiB5KGUpe3JldHVybiAxNCsoZSs2ND4+Pjk8PDQpKzF9ZnVuY3Rpb24gRShlLHQpe3ZhciBuPSg2NTUzNSZlKSsoNjU1MzUmdCk7cmV0dXJuKGU+PjE2KSsodD4+MTYpKyhuPj4xNik8PDE2fDY1NTM1Jm59ZnVuY3Rpb24gXyhlLHQsbixyLGksbyl7cmV0dXJuIEUoKGE9RShFKHQsZSksRShyLG8pKSk8PChzPWkpfGE+Pj4zMi1zLG4pO3ZhciBhLHN9ZnVuY3Rpb24gSShlLHQsbixyLGksbyxhKXtyZXR1cm4gXyh0Jm58fnQmcixlLHQsaSxvLGEpfWZ1bmN0aW9uIFMoZSx0LG4scixpLG8sYSl7cmV0dXJuIF8odCZyfG4mfnIsZSx0LGksbyxhKX1mdW5jdGlvbiBiKGUsdCxuLHIsaSxvLGEpe3JldHVybiBfKHRebl5yLGUsdCxpLG8sYSl9ZnVuY3Rpb24gVChlLHQsbixyLGksbyxhKXtyZXR1cm4gXyhuXih0fH5yKSxlLHQsaSxvLGEpfWNvbnN0IEM9ZyhcInYzXCIsNDgsKGZ1bmN0aW9uKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXt2YXIgdD11bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZSkpO2U9bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7KytuKWVbbl09dC5jaGFyQ29kZUF0KG4pfXJldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0zMiplLmxlbmd0aCxyPVwiMDEyMzQ1Njc4OWFiY2RlZlwiLGk9MDtpPG47aSs9OCl7dmFyIG89ZVtpPj41XT4+PmklMzImMjU1LGE9cGFyc2VJbnQoci5jaGFyQXQobz4+PjQmMTUpK3IuY2hhckF0KDE1Jm8pLDE2KTt0LnB1c2goYSl9cmV0dXJuIHR9KGZ1bmN0aW9uKGUsdCl7ZVt0Pj41XXw9MTI4PDx0JTMyLGVbeSh0KS0xXT10O2Zvcih2YXIgbj0xNzMyNTg0MTkzLHI9LTI3MTczMzg3OSxpPS0xNzMyNTg0MTk0LG89MjcxNzMzODc4LGE9MDthPGUubGVuZ3RoO2ErPTE2KXt2YXIgcz1uLGM9cixsPWksdT1vO249SShuLHIsaSxvLGVbYV0sNywtNjgwODc2OTM2KSxvPUkobyxuLHIsaSxlW2ErMV0sMTIsLTM4OTU2NDU4NiksaT1JKGksbyxuLHIsZVthKzJdLDE3LDYwNjEwNTgxOSkscj1JKHIsaSxvLG4sZVthKzNdLDIyLC0xMDQ0NTI1MzMwKSxuPUkobixyLGksbyxlW2ErNF0sNywtMTc2NDE4ODk3KSxvPUkobyxuLHIsaSxlW2ErNV0sMTIsMTIwMDA4MDQyNiksaT1JKGksbyxuLHIsZVthKzZdLDE3LC0xNDczMjMxMzQxKSxyPUkocixpLG8sbixlW2ErN10sMjIsLTQ1NzA1OTgzKSxuPUkobixyLGksbyxlW2ErOF0sNywxNzcwMDM1NDE2KSxvPUkobyxuLHIsaSxlW2ErOV0sMTIsLTE5NTg0MTQ0MTcpLGk9SShpLG8sbixyLGVbYSsxMF0sMTcsLTQyMDYzKSxyPUkocixpLG8sbixlW2ErMTFdLDIyLC0xOTkwNDA0MTYyKSxuPUkobixyLGksbyxlW2ErMTJdLDcsMTgwNDYwMzY4Miksbz1JKG8sbixyLGksZVthKzEzXSwxMiwtNDAzNDExMDEpLGk9SShpLG8sbixyLGVbYSsxNF0sMTcsLTE1MDIwMDIyOTApLG49UyhuLHI9SShyLGksbyxuLGVbYSsxNV0sMjIsMTIzNjUzNTMyOSksaSxvLGVbYSsxXSw1LC0xNjU3OTY1MTApLG89UyhvLG4scixpLGVbYSs2XSw5LC0xMDY5NTAxNjMyKSxpPVMoaSxvLG4scixlW2ErMTFdLDE0LDY0MzcxNzcxMykscj1TKHIsaSxvLG4sZVthXSwyMCwtMzczODk3MzAyKSxuPVMobixyLGksbyxlW2ErNV0sNSwtNzAxNTU4NjkxKSxvPVMobyxuLHIsaSxlW2ErMTBdLDksMzgwMTYwODMpLGk9UyhpLG8sbixyLGVbYSsxNV0sMTQsLTY2MDQ3ODMzNSkscj1TKHIsaSxvLG4sZVthKzRdLDIwLC00MDU1Mzc4NDgpLG49UyhuLHIsaSxvLGVbYSs5XSw1LDU2ODQ0NjQzOCksbz1TKG8sbixyLGksZVthKzE0XSw5LC0xMDE5ODAzNjkwKSxpPVMoaSxvLG4scixlW2ErM10sMTQsLTE4NzM2Mzk2MSkscj1TKHIsaSxvLG4sZVthKzhdLDIwLDExNjM1MzE1MDEpLG49UyhuLHIsaSxvLGVbYSsxM10sNSwtMTQ0NDY4MTQ2Nyksbz1TKG8sbixyLGksZVthKzJdLDksLTUxNDAzNzg0KSxpPVMoaSxvLG4scixlW2ErN10sMTQsMTczNTMyODQ3Myksbj1iKG4scj1TKHIsaSxvLG4sZVthKzEyXSwyMCwtMTkyNjYwNzczNCksaSxvLGVbYSs1XSw0LC0zNzg1NTgpLG89YihvLG4scixpLGVbYSs4XSwxMSwtMjAyMjU3NDQ2MyksaT1iKGksbyxuLHIsZVthKzExXSwxNiwxODM5MDMwNTYyKSxyPWIocixpLG8sbixlW2ErMTRdLDIzLC0zNTMwOTU1Niksbj1iKG4scixpLG8sZVthKzFdLDQsLTE1MzA5OTIwNjApLG89YihvLG4scixpLGVbYSs0XSwxMSwxMjcyODkzMzUzKSxpPWIoaSxvLG4scixlW2ErN10sMTYsLTE1NTQ5NzYzMikscj1iKHIsaSxvLG4sZVthKzEwXSwyMywtMTA5NDczMDY0MCksbj1iKG4scixpLG8sZVthKzEzXSw0LDY4MTI3OTE3NCksbz1iKG8sbixyLGksZVthXSwxMSwtMzU4NTM3MjIyKSxpPWIoaSxvLG4scixlW2ErM10sMTYsLTcyMjUyMTk3OSkscj1iKHIsaSxvLG4sZVthKzZdLDIzLDc2MDI5MTg5KSxuPWIobixyLGksbyxlW2ErOV0sNCwtNjQwMzY0NDg3KSxvPWIobyxuLHIsaSxlW2ErMTJdLDExLC00MjE4MTU4MzUpLGk9YihpLG8sbixyLGVbYSsxNV0sMTYsNTMwNzQyNTIwKSxuPVQobixyPWIocixpLG8sbixlW2ErMl0sMjMsLTk5NTMzODY1MSksaSxvLGVbYV0sNiwtMTk4NjMwODQ0KSxvPVQobyxuLHIsaSxlW2ErN10sMTAsMTEyNjg5MTQxNSksaT1UKGksbyxuLHIsZVthKzE0XSwxNSwtMTQxNjM1NDkwNSkscj1UKHIsaSxvLG4sZVthKzVdLDIxLC01NzQzNDA1NSksbj1UKG4scixpLG8sZVthKzEyXSw2LDE3MDA0ODU1NzEpLG89VChvLG4scixpLGVbYSszXSwxMCwtMTg5NDk4NjYwNiksaT1UKGksbyxuLHIsZVthKzEwXSwxNSwtMTA1MTUyMykscj1UKHIsaSxvLG4sZVthKzFdLDIxLC0yMDU0OTIyNzk5KSxuPVQobixyLGksbyxlW2ErOF0sNiwxODczMzEzMzU5KSxvPVQobyxuLHIsaSxlW2ErMTVdLDEwLC0zMDYxMTc0NCksaT1UKGksbyxuLHIsZVthKzZdLDE1LC0xNTYwMTk4MzgwKSxyPVQocixpLG8sbixlW2ErMTNdLDIxLDEzMDkxNTE2NDkpLG49VChuLHIsaSxvLGVbYSs0XSw2LC0xNDU1MjMwNzApLG89VChvLG4scixpLGVbYSsxMV0sMTAsLTExMjAyMTAzNzkpLGk9VChpLG8sbixyLGVbYSsyXSwxNSw3MTg3ODcyNTkpLHI9VChyLGksbyxuLGVbYSs5XSwyMSwtMzQzNDg1NTUxKSxuPUUobixzKSxyPUUocixjKSxpPUUoaSxsKSxvPUUobyx1KX1yZXR1cm5bbixyLGksb119KGZ1bmN0aW9uKGUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm5bXTtmb3IodmFyIHQ9OCplLmxlbmd0aCxuPW5ldyBVaW50MzJBcnJheSh5KHQpKSxyPTA7cjx0O3IrPTgpbltyPj41XXw9KDI1NSZlW3IvOF0pPDxyJTMyO3JldHVybiBufShlKSw4KmUubGVuZ3RoKSl9KSksQT1mdW5jdGlvbihlLHQsbil7dmFyIHI9KGU9ZXx8e30pLnJhbmRvbXx8KGUucm5nfHxvKSgpO2lmKHJbNl09MTUmcls2XXw2NCxyWzhdPTYzJnJbOF18MTI4LHQpe249bnx8MDtmb3IodmFyIGk9MDtpPDE2OysraSl0W24raV09cltpXTtyZXR1cm4gdH1yZXR1cm4gdShyKX07ZnVuY3Rpb24gUihlLHQsbixyKXtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiB0Jm5efnQmcjtjYXNlIDE6Y2FzZSAzOnJldHVybiB0Xm5ecjtjYXNlIDI6cmV0dXJuIHQmbl50JnJebiZyfX1mdW5jdGlvbiBrKGUsdCl7cmV0dXJuIGU8PHR8ZT4+PjMyLXR9Y29uc3QgTz1nKFwidjVcIiw4MCwoZnVuY3Rpb24oZSl7dmFyIHQ9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDMzOTU0Njk3ODJdLG49WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXTtpZihcInN0cmluZ1wiPT10eXBlb2YgZSl7dmFyIHI9dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGUpKTtlPVtdO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7KytpKWUucHVzaChyLmNoYXJDb2RlQXQoaSkpfWVsc2UgQXJyYXkuaXNBcnJheShlKXx8KGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSkpO2UucHVzaCgxMjgpO2Zvcih2YXIgbz1lLmxlbmd0aC80KzIsYT1NYXRoLmNlaWwoby8xNikscz1uZXcgQXJyYXkoYSksYz0wO2M8YTsrK2Mpe2Zvcih2YXIgbD1uZXcgVWludDMyQXJyYXkoMTYpLHU9MDt1PDE2OysrdSlsW3VdPWVbNjQqYys0KnVdPDwyNHxlWzY0KmMrNCp1KzFdPDwxNnxlWzY0KmMrNCp1KzJdPDw4fGVbNjQqYys0KnUrM107c1tjXT1sfXNbYS0xXVsxNF09OCooZS5sZW5ndGgtMSkvTWF0aC5wb3coMiwzMiksc1thLTFdWzE0XT1NYXRoLmZsb29yKHNbYS0xXVsxNF0pLHNbYS0xXVsxNV09OCooZS5sZW5ndGgtMSkmNDI5NDk2NzI5NTtmb3IodmFyIGQ9MDtkPGE7KytkKXtmb3IodmFyIGY9bmV3IFVpbnQzMkFycmF5KDgwKSxwPTA7cDwxNjsrK3ApZltwXT1zW2RdW3BdO2Zvcih2YXIgbT0xNjttPDgwOysrbSlmW21dPWsoZlttLTNdXmZbbS04XV5mW20tMTRdXmZbbS0xNl0sMSk7Zm9yKHZhciBoPW5bMF0sdj1uWzFdLGc9blsyXSx5PW5bM10sRT1uWzRdLF89MDtfPDgwOysrXyl7dmFyIEk9TWF0aC5mbG9vcihfLzIwKSxTPWsoaCw1KStSKEksdixnLHkpK0UrdFtJXStmW19dPj4+MDtFPXkseT1nLGc9ayh2LDMwKT4+PjAsdj1oLGg9U31uWzBdPW5bMF0raD4+PjAsblsxXT1uWzFdK3Y+Pj4wLG5bMl09blsyXStnPj4+MCxuWzNdPW5bM10reT4+PjAsbls0XT1uWzRdK0U+Pj4wfXJldHVybltuWzBdPj4yNCYyNTUsblswXT4+MTYmMjU1LG5bMF0+PjgmMjU1LDI1NSZuWzBdLG5bMV0+PjI0JjI1NSxuWzFdPj4xNiYyNTUsblsxXT4+OCYyNTUsMjU1Jm5bMV0sblsyXT4+MjQmMjU1LG5bMl0+PjE2JjI1NSxuWzJdPj44JjI1NSwyNTUmblsyXSxuWzNdPj4yNCYyNTUsblszXT4+MTYmMjU1LG5bM10+PjgmMjU1LDI1NSZuWzNdLG5bNF0+PjI0JjI1NSxuWzRdPj4xNiYyNTUsbls0XT4+OCYyNTUsMjU1Jm5bNF1dfSkpLE49XCIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIix3PWZ1bmN0aW9uKGUpe2lmKCFzKGUpKXRocm93IFR5cGVFcnJvcihcIkludmFsaWQgVVVJRFwiKTtyZXR1cm4gcGFyc2VJbnQoZS5zdWJzdHIoMTQsMSksMTYpfX0sNjk3NzU6ZnVuY3Rpb24oZSl7dmFyIHQsbjtlLmV4cG9ydHM9KHQ9ezQxODpmdW5jdGlvbihlLHQpeyFmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KWVbbl09dFtuXX0odCxmdW5jdGlvbihlKXt2YXIgdD17fTtmdW5jdGlvbiBuKHIpe2lmKHRbcl0pcmV0dXJuIHRbcl0uZXhwb3J0czt2YXIgaT10W3JdPXtpOnIsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtyXS5jYWxsKGkuZXhwb3J0cyxpLGkuZXhwb3J0cyxuKSxpLmw9ITAsaS5leHBvcnRzfXJldHVybiBuLm09ZSxuLmM9dCxuLmk9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LG4uZD1mdW5jdGlvbihlLHQscil7bi5vKGUsdCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDpyfSl9LG4ubj1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gZS5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBlfTtyZXR1cm4gbi5kKHQsXCJhXCIsdCksdH0sbi5vPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfSxuLnA9XCJcIixuKG4ucz0xKX0oW2Z1bmN0aW9uKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgcj1uKDMpLGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dm9pZCAwPT09ZSYmKGU9e30pLHZvaWQgMD09PXQmJih0PXtzcGxpdFZhbHVlczohMX0pO3ZhciBuLGk9dGhpczt0aGlzLmhlYWRlcnNNYXA9e30sZSYmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBIZWFkZXJzJiZlIGluc3RhbmNlb2YgSGVhZGVycz9yLmdldEhlYWRlcktleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24obil7ci5nZXRIZWFkZXJWYWx1ZXMoZSxuKS5mb3JFYWNoKChmdW5jdGlvbihlKXt0LnNwbGl0VmFsdWVzP2kuYXBwZW5kKG4sci5zcGxpdEhlYWRlclZhbHVlKGUpKTppLmFwcGVuZChuLGUpfSkpfSkpOlwib2JqZWN0XCI9PXR5cGVvZihuPWUpJiZcIm9iamVjdFwiPT10eXBlb2Ygbi5oZWFkZXJzTWFwJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLmZvckVhY2g/ZS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2kuYXBwZW5kKGUsdCl9KSk6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIE1hcCYmZSBpbnN0YW5jZW9mIE1hcD9lLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7aS5hcHBlbmQodCxlKX0pKTpcInN0cmluZ1wiPT10eXBlb2YgZT90aGlzLmFwcGVuZEZyb21TdHJpbmcoZSk6XCJvYmplY3RcIj09dHlwZW9mIGUmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPWVbdF07QXJyYXkuaXNBcnJheShuKT9uLmZvckVhY2goKGZ1bmN0aW9uKGUpe2kuYXBwZW5kKHQsZSl9KSk6aS5hcHBlbmQodCxuKX0pKSl9cmV0dXJuIGUucHJvdG90eXBlLmFwcGVuZEZyb21TdHJpbmc9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUuc3BsaXQoXCJcXHJcXG5cIiksbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dLGk9ci5pbmRleE9mKFwiOlwiKTtpZihpPjApe3ZhciBvPXIuc3Vic3RyaW5nKDAsaSkudHJpbSgpLGE9ci5zdWJzdHJpbmcoaSsxKS50cmltKCk7dGhpcy5hcHBlbmQobyxhKX19fSxlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1yLm5vcm1hbGl6ZU5hbWUoZSk7aWYodm9pZCAwPT09dClkZWxldGUgdGhpcy5oZWFkZXJzTWFwW25dO2Vsc2V7dmFyIGk9dGhpcy5oZWFkZXJzTWFwW25dO2lmKGkpe3ZhciBvPWkuaW5kZXhPZih0KTtvPj0wJiZpLnNwbGljZShvLDEpLDA9PT1pLmxlbmd0aCYmZGVsZXRlIHRoaXMuaGVhZGVyc01hcFtuXX19fSxlLnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLGk9ci5ub3JtYWxpemVOYW1lKGUpO0FycmF5LmlzQXJyYXkodGhpcy5oZWFkZXJzTWFwW2ldKXx8KHRoaXMuaGVhZGVyc01hcFtpXT1bXSksQXJyYXkuaXNBcnJheSh0KT90LmZvckVhY2goKGZ1bmN0aW9uKGUpe24uaGVhZGVyc01hcFtpXS5wdXNoKHIubm9ybWFsaXplVmFsdWUoZSkpfSkpOnRoaXMuaGVhZGVyc01hcFtpXS5wdXNoKHIubm9ybWFsaXplVmFsdWUodCkpfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1yLm5vcm1hbGl6ZU5hbWUoZSk7aWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIGk9W107dC5mb3JFYWNoKChmdW5jdGlvbihlKXtpLnB1c2goci5ub3JtYWxpemVWYWx1ZShlKSl9KSksdGhpcy5oZWFkZXJzTWFwW25dPWl9ZWxzZSB0aGlzLmhlYWRlcnNNYXBbbl09W3Iubm9ybWFsaXplVmFsdWUodCldfSxlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmhlYWRlcnNNYXBbci5ub3JtYWxpemVOYW1lKGUpXTtpZighQXJyYXkuaXNBcnJheShuKSlyZXR1cm4hMTtpZih2b2lkIDAhPT10KXt2YXIgaT1yLm5vcm1hbGl6ZVZhbHVlKHQpO3JldHVybiBuLmluZGV4T2YoaSk+PTB9cmV0dXJuITB9LGUucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmhlYWRlcnNNYXBbci5ub3JtYWxpemVOYW1lKGUpXTtyZXR1cm4gdm9pZCAwIT09dD90LmNvbmNhdCgpOltdfSxlLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy5oZWFkZXJzTWFwKS5mb3JFYWNoKChmdW5jdGlvbihuKXtlKG4sdC5oZWFkZXJzTWFwW25dKX0pLHRoaXMpfSxlLnByb3RvdHlwZS50b0hlYWRlcnM9ZnVuY3Rpb24oKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgSGVhZGVycyl7dmFyIGU9bmV3IEhlYWRlcnM7cmV0dXJuIHRoaXMuZm9yRWFjaCgoZnVuY3Rpb24odCxuKXtuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2UuYXBwZW5kKHQsbil9KSl9KSksZX10aHJvdyBuZXcgRXJyb3IoXCJIZWFkZXJzIGNsYXNzIGlzIG5vdCBkZWZpbmVkXCIpfSxlfSgpO3QuQnJvd3NlckhlYWRlcnM9aX0sZnVuY3Rpb24oZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciByPW4oMCk7dC5Ccm93c2VySGVhZGVycz1yLkJyb3dzZXJIZWFkZXJzfSxmdW5jdGlvbihlLHQsbil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5pdGVyYXRlSGVhZGVycz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1lW1N5bWJvbC5pdGVyYXRvcl0oKSxyPW4ubmV4dCgpOyFyLmRvbmU7KXQoci52YWx1ZVswXSkscj1uLm5leHQoKX0sdC5pdGVyYXRlSGVhZGVyc0tleXM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49ZS5rZXlzKCkscj1uLm5leHQoKTshci5kb25lOyl0KHIudmFsdWUpLHI9bi5uZXh0KCl9fSxmdW5jdGlvbihlLHQsbil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIHI9bigyKTt0Lm5vcm1hbGl6ZU5hbWU9ZnVuY3Rpb24oZSl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUmJihlPVN0cmluZyhlKSksL1teYS16MC05XFwtIyQlJicqKy5cXF5fYHx+XS9pLnRlc3QoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lXCIpO3JldHVybiBlLnRvTG93ZXJDYXNlKCl9LHQubm9ybWFsaXplVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIGUmJihlPVN0cmluZyhlKSksZX0sdC5nZXRIZWFkZXJWYWx1ZXM9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lO2lmKG4gaW5zdGFuY2VvZiBIZWFkZXJzJiZuLmdldEFsbClyZXR1cm4gbi5nZXRBbGwodCk7dmFyIHI9bi5nZXQodCk7cmV0dXJuIHImJlwic3RyaW5nXCI9PXR5cGVvZiByP1tyXTpyfSx0LmdldEhlYWRlcktleXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZSxuPXt9LGk9W107cmV0dXJuIHQua2V5cz9yLml0ZXJhdGVIZWFkZXJzS2V5cyh0LChmdW5jdGlvbihlKXtuW2VdfHwobltlXT0hMCxpLnB1c2goZSkpfSkpOnQuZm9yRWFjaD90LmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7blt0XXx8KG5bdF09ITAsaS5wdXNoKHQpKX0pKTpyLml0ZXJhdGVIZWFkZXJzKHQsKGZ1bmN0aW9uKGUpe3ZhciB0PWVbMF07blt0XXx8KG5bdF09ITAsaS5wdXNoKHQpKX0pKSxpfSx0LnNwbGl0SGVhZGVyVmFsdWU9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIGUuc3BsaXQoXCIsIFwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnNwbGl0KFwiLFwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXt0LnB1c2goZSl9KSl9KSksdH19XSkpfSw2MTc6ZnVuY3Rpb24oZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2h1bmtQYXJzZXI9dC5DaHVua1R5cGU9dC5lbmNvZGVBU0NJST10LmRlY29kZUFTQ0lJPXZvaWQgMDt2YXIgcixpPW4oNjUpO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIDk9PT0odD1lKXx8MTA9PT10fHwxMz09PXR8fGU+PTMyJiZlPD0xMjY7dmFyIHR9ZnVuY3Rpb24gYShlKXtmb3IodmFyIHQ9MDt0IT09ZS5sZW5ndGg7Kyt0KWlmKCFvKGVbdF0pKXRocm93IG5ldyBFcnJvcihcIk1ldGFkYXRhIGlzIG5vdCB2YWxpZCAocHJpbnRhYmxlKSBBU0NJSVwiKTtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSkpfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIDEyOD09KDEyOCZlLmdldFVpbnQ4KDApKX1mdW5jdGlvbiBjKGUpe3JldHVybiBlLmdldFVpbnQzMigxLCExKX1mdW5jdGlvbiBsKGUsdCxuKXtyZXR1cm4gZS5ieXRlTGVuZ3RoLXQ+PW59ZnVuY3Rpb24gdShlLHQsbil7aWYoZS5zbGljZSlyZXR1cm4gZS5zbGljZSh0LG4pO3ZhciByPWUubGVuZ3RoO3ZvaWQgMCE9PW4mJihyPW4pO2Zvcih2YXIgaT1uZXcgVWludDhBcnJheShyLXQpLG89MCxhPXQ7YTxyO2ErKylpW28rK109ZVthXTtyZXR1cm4gaX10LmRlY29kZUFTQ0lJPWEsdC5lbmNvZGVBU0NJST1mdW5jdGlvbihlKXtmb3IodmFyIHQ9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgpLG49MDtuIT09ZS5sZW5ndGg7KytuKXt2YXIgcj1lLmNoYXJDb2RlQXQobik7aWYoIW8ocikpdGhyb3cgbmV3IEVycm9yKFwiTWV0YWRhdGEgY29udGFpbnMgaW52YWxpZCBBU0NJSVwiKTt0W25dPXJ9cmV0dXJuIHR9LGZ1bmN0aW9uKGUpe2VbZS5NRVNTQUdFPTFdPVwiTUVTU0FHRVwiLGVbZS5UUkFJTEVSUz0yXT1cIlRSQUlMRVJTXCJ9KHI9dC5DaHVua1R5cGV8fCh0LkNodW5rVHlwZT17fSkpO3ZhciBkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuYnVmZmVyPW51bGwsdGhpcy5wb3NpdGlvbj0wfXJldHVybiBlLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbihlLHQpe2lmKDA9PT1lLmxlbmd0aCYmdClyZXR1cm5bXTt2YXIgbixvPVtdO2lmKG51bGw9PXRoaXMuYnVmZmVyKXRoaXMuYnVmZmVyPWUsdGhpcy5wb3NpdGlvbj0wO2Vsc2UgaWYodGhpcy5wb3NpdGlvbj09PXRoaXMuYnVmZmVyLmJ5dGVMZW5ndGgpdGhpcy5idWZmZXI9ZSx0aGlzLnBvc2l0aW9uPTA7ZWxzZXt2YXIgZD10aGlzLmJ1ZmZlci5ieXRlTGVuZ3RoLXRoaXMucG9zaXRpb24sZj1uZXcgVWludDhBcnJheShkK2UuYnl0ZUxlbmd0aCkscD11KHRoaXMuYnVmZmVyLHRoaXMucG9zaXRpb24pO2Yuc2V0KHAsMCk7dmFyIG09bmV3IFVpbnQ4QXJyYXkoZSk7Zi5zZXQobSxkKSx0aGlzLmJ1ZmZlcj1mLHRoaXMucG9zaXRpb249MH1mb3IoOzspe2lmKCFsKHRoaXMuYnVmZmVyLHRoaXMucG9zaXRpb24sNSkpcmV0dXJuIG87dmFyIGg9dSh0aGlzLmJ1ZmZlcix0aGlzLnBvc2l0aW9uLHRoaXMucG9zaXRpb24rNSksdj1uZXcgRGF0YVZpZXcoaC5idWZmZXIsaC5ieXRlT2Zmc2V0LGguYnl0ZUxlbmd0aCksZz1jKHYpO2lmKCFsKHRoaXMuYnVmZmVyLHRoaXMucG9zaXRpb24sNStnKSlyZXR1cm4gbzt2YXIgeT11KHRoaXMuYnVmZmVyLHRoaXMucG9zaXRpb24rNSx0aGlzLnBvc2l0aW9uKzUrZyk7aWYodGhpcy5wb3NpdGlvbis9NStnLHModikpcmV0dXJuIG8ucHVzaCh7Y2h1bmtUeXBlOnIuVFJBSUxFUlMsdHJhaWxlcnM6KG49eSxuZXcgaS5NZXRhZGF0YShhKG4pKSl9KSxvO28ucHVzaCh7Y2h1bmtUeXBlOnIuTUVTU0FHRSxkYXRhOnl9KX19LGV9KCk7dC5DaHVua1BhcnNlcj1kfSw4OmZ1bmN0aW9uKGUsdCl7dmFyIG47T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5odHRwU3RhdHVzVG9Db2RlPXQuQ29kZT12b2lkIDAsZnVuY3Rpb24oZSl7ZVtlLk9LPTBdPVwiT0tcIixlW2UuQ2FuY2VsZWQ9MV09XCJDYW5jZWxlZFwiLGVbZS5Vbmtub3duPTJdPVwiVW5rbm93blwiLGVbZS5JbnZhbGlkQXJndW1lbnQ9M109XCJJbnZhbGlkQXJndW1lbnRcIixlW2UuRGVhZGxpbmVFeGNlZWRlZD00XT1cIkRlYWRsaW5lRXhjZWVkZWRcIixlW2UuTm90Rm91bmQ9NV09XCJOb3RGb3VuZFwiLGVbZS5BbHJlYWR5RXhpc3RzPTZdPVwiQWxyZWFkeUV4aXN0c1wiLGVbZS5QZXJtaXNzaW9uRGVuaWVkPTddPVwiUGVybWlzc2lvbkRlbmllZFwiLGVbZS5SZXNvdXJjZUV4aGF1c3RlZD04XT1cIlJlc291cmNlRXhoYXVzdGVkXCIsZVtlLkZhaWxlZFByZWNvbmRpdGlvbj05XT1cIkZhaWxlZFByZWNvbmRpdGlvblwiLGVbZS5BYm9ydGVkPTEwXT1cIkFib3J0ZWRcIixlW2UuT3V0T2ZSYW5nZT0xMV09XCJPdXRPZlJhbmdlXCIsZVtlLlVuaW1wbGVtZW50ZWQ9MTJdPVwiVW5pbXBsZW1lbnRlZFwiLGVbZS5JbnRlcm5hbD0xM109XCJJbnRlcm5hbFwiLGVbZS5VbmF2YWlsYWJsZT0xNF09XCJVbmF2YWlsYWJsZVwiLGVbZS5EYXRhTG9zcz0xNV09XCJEYXRhTG9zc1wiLGVbZS5VbmF1dGhlbnRpY2F0ZWQ9MTZdPVwiVW5hdXRoZW50aWNhdGVkXCJ9KG49dC5Db2RlfHwodC5Db2RlPXt9KSksdC5odHRwU3RhdHVzVG9Db2RlPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIG4uSW50ZXJuYWw7Y2FzZSAyMDA6cmV0dXJuIG4uT0s7Y2FzZSA0MDA6cmV0dXJuIG4uSW52YWxpZEFyZ3VtZW50O2Nhc2UgNDAxOnJldHVybiBuLlVuYXV0aGVudGljYXRlZDtjYXNlIDQwMzpyZXR1cm4gbi5QZXJtaXNzaW9uRGVuaWVkO2Nhc2UgNDA0OnJldHVybiBuLk5vdEZvdW5kO2Nhc2UgNDA5OnJldHVybiBuLkFib3J0ZWQ7Y2FzZSA0MTI6cmV0dXJuIG4uRmFpbGVkUHJlY29uZGl0aW9uO2Nhc2UgNDI5OnJldHVybiBuLlJlc291cmNlRXhoYXVzdGVkO2Nhc2UgNDk5OnJldHVybiBuLkNhbmNlbGVkO2Nhc2UgNTAwOmRlZmF1bHQ6cmV0dXJuIG4uVW5rbm93bjtjYXNlIDUwMTpyZXR1cm4gbi5VbmltcGxlbWVudGVkO2Nhc2UgNTAzOnJldHVybiBuLlVuYXZhaWxhYmxlO2Nhc2UgNTA0OnJldHVybiBuLkRlYWRsaW5lRXhjZWVkZWR9fX0sOTM0OmZ1bmN0aW9uKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmNsaWVudD12b2lkIDA7dmFyIHI9big2NSksaT1uKDYxNyksbz1uKDgpLGE9bigzNDYpLHM9big1NyksYz1uKDg4Mik7dC5jbGllbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IGwoZSx0KX07dmFyIGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5zdGFydGVkPSExLHRoaXMuc2VudEZpcnN0TWVzc2FnZT0hMSx0aGlzLmNvbXBsZXRlZD0hMSx0aGlzLmNsb3NlZD0hMSx0aGlzLmZpbmlzaGVkU2VuZGluZz0hMSx0aGlzLm9uSGVhZGVyc0NhbGxiYWNrcz1bXSx0aGlzLm9uTWVzc2FnZUNhbGxiYWNrcz1bXSx0aGlzLm9uRW5kQ2FsbGJhY2tzPVtdLHRoaXMucGFyc2VyPW5ldyBpLkNodW5rUGFyc2VyLHRoaXMubWV0aG9kRGVmaW5pdGlvbj1lLHRoaXMucHJvcHM9dCx0aGlzLmNyZWF0ZVRyYW5zcG9ydCgpfXJldHVybiBlLnByb3RvdHlwZS5jcmVhdGVUcmFuc3BvcnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLmhvc3QrXCIvXCIrdGhpcy5tZXRob2REZWZpbml0aW9uLnNlcnZpY2Uuc2VydmljZU5hbWUrXCIvXCIrdGhpcy5tZXRob2REZWZpbml0aW9uLm1ldGhvZE5hbWUsdD17bWV0aG9kRGVmaW5pdGlvbjp0aGlzLm1ldGhvZERlZmluaXRpb24sZGVidWc6dGhpcy5wcm9wcy5kZWJ1Z3x8ITEsdXJsOmUsb25IZWFkZXJzOnRoaXMub25UcmFuc3BvcnRIZWFkZXJzLmJpbmQodGhpcyksb25DaHVuazp0aGlzLm9uVHJhbnNwb3J0Q2h1bmsuYmluZCh0aGlzKSxvbkVuZDp0aGlzLm9uVHJhbnNwb3J0RW5kLmJpbmQodGhpcyl9O3RoaXMucHJvcHMudHJhbnNwb3J0P3RoaXMudHJhbnNwb3J0PXRoaXMucHJvcHMudHJhbnNwb3J0KHQpOnRoaXMudHJhbnNwb3J0PXMubWFrZURlZmF1bHRUcmFuc3BvcnQodCl9LGUucHJvdG90eXBlLm9uVHJhbnNwb3J0SGVhZGVycz1mdW5jdGlvbihlLHQpe2lmKHRoaXMucHJvcHMuZGVidWcmJmEuZGVidWcoXCJvbkhlYWRlcnNcIixlLHQpLHRoaXMuY2xvc2VkKXRoaXMucHJvcHMuZGVidWcmJmEuZGVidWcoXCJncnBjLm9uSGVhZGVycyByZWNlaXZlZCBhZnRlciByZXF1ZXN0IHdhcyBjbG9zZWQgLSBpZ25vcmluZ1wiKTtlbHNlIGlmKDA9PT10KTtlbHNle3RoaXMucmVzcG9uc2VIZWFkZXJzPWUsdGhpcy5wcm9wcy5kZWJ1ZyYmYS5kZWJ1ZyhcIm9uSGVhZGVycy5yZXNwb25zZUhlYWRlcnNcIixKU09OLnN0cmluZ2lmeSh0aGlzLnJlc3BvbnNlSGVhZGVycyxudWxsLDIpKTt2YXIgbj11KGUpO3RoaXMucHJvcHMuZGVidWcmJmEuZGVidWcoXCJvbkhlYWRlcnMuZ1JQQ1N0YXR1c1wiLG4pO3ZhciByPW4mJm4+PTA/bjpvLmh0dHBTdGF0dXNUb0NvZGUodCk7dGhpcy5wcm9wcy5kZWJ1ZyYmYS5kZWJ1ZyhcIm9uSGVhZGVycy5jb2RlXCIscik7dmFyIGk9ZS5nZXQoXCJncnBjLW1lc3NhZ2VcIil8fFtdO2lmKHRoaXMucHJvcHMuZGVidWcmJmEuZGVidWcoXCJvbkhlYWRlcnMuZ1JQQ01lc3NhZ2VcIixpKSx0aGlzLnJhd09uSGVhZGVycyhlKSxyIT09by5Db2RlLk9LKXt2YXIgcz10aGlzLmRlY29kZUdSUENTdGF0dXMoaVswXSk7dGhpcy5yYXdPbkVycm9yKHIscyxlKX19fSxlLnByb3RvdHlwZS5vblRyYW5zcG9ydENodW5rPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYodGhpcy5jbG9zZWQpdGhpcy5wcm9wcy5kZWJ1ZyYmYS5kZWJ1ZyhcImdycGMub25DaHVuayByZWNlaXZlZCBhZnRlciByZXF1ZXN0IHdhcyBjbG9zZWQgLSBpZ25vcmluZ1wiKTtlbHNle3ZhciBuPVtdO3RyeXtuPXRoaXMucGFyc2VyLnBhcnNlKGUpfWNhdGNoKGUpe3JldHVybiB0aGlzLnByb3BzLmRlYnVnJiZhLmRlYnVnKFwib25DaHVuay5wYXJzaW5nIGVycm9yXCIsZSxlLm1lc3NhZ2UpLHZvaWQgdGhpcy5yYXdPbkVycm9yKG8uQ29kZS5JbnRlcm5hbCxcInBhcnNpbmcgZXJyb3I6IFwiK2UubWVzc2FnZSl9bi5mb3JFYWNoKChmdW5jdGlvbihlKXtpZihlLmNodW5rVHlwZT09PWkuQ2h1bmtUeXBlLk1FU1NBR0Upe3ZhciBuPXQubWV0aG9kRGVmaW5pdGlvbi5yZXNwb25zZVR5cGUuZGVzZXJpYWxpemVCaW5hcnkoZS5kYXRhKTt0LnJhd09uTWVzc2FnZShuKX1lbHNlIGUuY2h1bmtUeXBlPT09aS5DaHVua1R5cGUuVFJBSUxFUlMmJih0LnJlc3BvbnNlSGVhZGVycz8odC5yZXNwb25zZVRyYWlsZXJzPW5ldyByLk1ldGFkYXRhKGUudHJhaWxlcnMpLHQucHJvcHMuZGVidWcmJmEuZGVidWcoXCJvbkNodW5rLnRyYWlsZXJzXCIsdC5yZXNwb25zZVRyYWlsZXJzKSk6KHQucmVzcG9uc2VIZWFkZXJzPW5ldyByLk1ldGFkYXRhKGUudHJhaWxlcnMpLHQucmF3T25IZWFkZXJzKHQucmVzcG9uc2VIZWFkZXJzKSkpfSkpfX0sZS5wcm90b3R5cGUub25UcmFuc3BvcnRFbmQ9ZnVuY3Rpb24oKXtpZih0aGlzLnByb3BzLmRlYnVnJiZhLmRlYnVnKFwiZ3JwYy5vbkVuZFwiKSx0aGlzLmNsb3NlZCl0aGlzLnByb3BzLmRlYnVnJiZhLmRlYnVnKFwiZ3JwYy5vbkVuZCByZWNlaXZlZCBhZnRlciByZXF1ZXN0IHdhcyBjbG9zZWQgLSBpZ25vcmluZ1wiKTtlbHNlIGlmKHZvaWQgMCE9PXRoaXMucmVzcG9uc2VUcmFpbGVycyl7dmFyIGU9dSh0aGlzLnJlc3BvbnNlVHJhaWxlcnMpO2lmKG51bGwhPT1lKXt2YXIgdD10aGlzLnJlc3BvbnNlVHJhaWxlcnMuZ2V0KFwiZ3JwYy1tZXNzYWdlXCIpLG49dGhpcy5kZWNvZGVHUlBDU3RhdHVzKHRbMF0pO3RoaXMucmF3T25FbmQoZSxuLHRoaXMucmVzcG9uc2VUcmFpbGVycyl9ZWxzZSB0aGlzLnJhd09uRXJyb3Ioby5Db2RlLkludGVybmFsLFwiUmVzcG9uc2UgY2xvc2VkIHdpdGhvdXQgZ3JwYy1zdGF0dXMgKFRyYWlsZXJzIHByb3ZpZGVkKVwiKX1lbHNle2lmKHZvaWQgMD09PXRoaXMucmVzcG9uc2VIZWFkZXJzKXJldHVybiB2b2lkIHRoaXMucmF3T25FcnJvcihvLkNvZGUuVW5rbm93bixcIlJlc3BvbnNlIGNsb3NlZCB3aXRob3V0IGhlYWRlcnNcIik7dmFyIHI9dSh0aGlzLnJlc3BvbnNlSGVhZGVycyksaT10aGlzLnJlc3BvbnNlSGVhZGVycy5nZXQoXCJncnBjLW1lc3NhZ2VcIik7aWYodGhpcy5wcm9wcy5kZWJ1ZyYmYS5kZWJ1ZyhcImdycGMuaGVhZGVycyBvbmx5IHJlc3BvbnNlIFwiLHIsaSksbnVsbD09PXIpcmV0dXJuIHZvaWQgdGhpcy5yYXdPbkVuZChvLkNvZGUuVW5rbm93bixcIlJlc3BvbnNlIGNsb3NlZCB3aXRob3V0IGdycGMtc3RhdHVzIChIZWFkZXJzIG9ubHkpXCIsdGhpcy5yZXNwb25zZUhlYWRlcnMpO3ZhciBzPXRoaXMuZGVjb2RlR1JQQ1N0YXR1cyhpWzBdKTt0aGlzLnJhd09uRW5kKHIscyx0aGlzLnJlc3BvbnNlSGVhZGVycyl9fSxlLnByb3RvdHlwZS5kZWNvZGVHUlBDU3RhdHVzPWZ1bmN0aW9uKGUpe2lmKCFlKXJldHVyblwiXCI7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZSl9Y2F0Y2godCl7cmV0dXJuIGV9fSxlLnByb3RvdHlwZS5yYXdPbkVuZD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpczt0aGlzLnByb3BzLmRlYnVnJiZhLmRlYnVnKFwicmF3T25FbmRcIixlLHQsbiksdGhpcy5jb21wbGV0ZWR8fCh0aGlzLmNvbXBsZXRlZD0hMCx0aGlzLm9uRW5kQ2FsbGJhY2tzLmZvckVhY2goKGZ1bmN0aW9uKGkpe2lmKCFyLmNsb3NlZCl0cnl7aShlLHQsbil9Y2F0Y2goZSl7c2V0VGltZW91dCgoZnVuY3Rpb24oKXt0aHJvdyBlfSksMCl9fSkpKX0sZS5wcm90b3R5cGUucmF3T25IZWFkZXJzPWZ1bmN0aW9uKGUpe3RoaXMucHJvcHMuZGVidWcmJmEuZGVidWcoXCJyYXdPbkhlYWRlcnNcIixlKSx0aGlzLmNvbXBsZXRlZHx8dGhpcy5vbkhlYWRlcnNDYWxsYmFja3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7dHJ5e3QoZSl9Y2F0Y2goZSl7c2V0VGltZW91dCgoZnVuY3Rpb24oKXt0aHJvdyBlfSksMCl9fSkpfSxlLnByb3RvdHlwZS5yYXdPbkVycm9yPWZ1bmN0aW9uKGUsdCxuKXt2YXIgaT10aGlzO3ZvaWQgMD09PW4mJihuPW5ldyByLk1ldGFkYXRhKSx0aGlzLnByb3BzLmRlYnVnJiZhLmRlYnVnKFwicmF3T25FcnJvclwiLGUsdCksdGhpcy5jb21wbGV0ZWR8fCh0aGlzLmNvbXBsZXRlZD0hMCx0aGlzLm9uRW5kQ2FsbGJhY2tzLmZvckVhY2goKGZ1bmN0aW9uKHIpe2lmKCFpLmNsb3NlZCl0cnl7cihlLHQsbil9Y2F0Y2goZSl7c2V0VGltZW91dCgoZnVuY3Rpb24oKXt0aHJvdyBlfSksMCl9fSkpKX0sZS5wcm90b3R5cGUucmF3T25NZXNzYWdlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5wcm9wcy5kZWJ1ZyYmYS5kZWJ1ZyhcInJhd09uTWVzc2FnZVwiLGUudG9PYmplY3QoKSksdGhpcy5jb21wbGV0ZWR8fHRoaXMuY2xvc2VkfHx0aGlzLm9uTWVzc2FnZUNhbGxiYWNrcy5mb3JFYWNoKChmdW5jdGlvbihuKXtpZighdC5jbG9zZWQpdHJ5e24oZSl9Y2F0Y2goZSl7c2V0VGltZW91dCgoZnVuY3Rpb24oKXt0aHJvdyBlfSksMCl9fSkpfSxlLnByb3RvdHlwZS5vbkhlYWRlcnM9ZnVuY3Rpb24oZSl7dGhpcy5vbkhlYWRlcnNDYWxsYmFja3MucHVzaChlKX0sZS5wcm90b3R5cGUub25NZXNzYWdlPWZ1bmN0aW9uKGUpe3RoaXMub25NZXNzYWdlQ2FsbGJhY2tzLnB1c2goZSl9LGUucHJvdG90eXBlLm9uRW5kPWZ1bmN0aW9uKGUpe3RoaXMub25FbmRDYWxsYmFja3MucHVzaChlKX0sZS5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oZSl7aWYodGhpcy5zdGFydGVkKXRocm93IG5ldyBFcnJvcihcIkNsaWVudCBhbHJlYWR5IHN0YXJ0ZWQgLSBjYW5ub3QgLnN0YXJ0KClcIik7dGhpcy5zdGFydGVkPSEwO3ZhciB0PW5ldyByLk1ldGFkYXRhKGV8fHt9KTt0LnNldChcImNvbnRlbnQtdHlwZVwiLFwiYXBwbGljYXRpb24vZ3JwYy13ZWIrcHJvdG9cIiksdC5zZXQoXCJ4LWdycGMtd2ViXCIsXCIxXCIpLHRoaXMudHJhbnNwb3J0LnN0YXJ0KHQpfSxlLnByb3RvdHlwZS5zZW5kPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLnN0YXJ0ZWQpdGhyb3cgbmV3IEVycm9yKFwiQ2xpZW50IG5vdCBzdGFydGVkIC0gLnN0YXJ0KCkgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIC5zZW5kKClcIik7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IEVycm9yKFwiQ2xpZW50IGFscmVhZHkgY2xvc2VkIC0gY2Fubm90IC5zZW5kKClcIik7aWYodGhpcy5maW5pc2hlZFNlbmRpbmcpdGhyb3cgbmV3IEVycm9yKFwiQ2xpZW50IGFscmVhZHkgZmluaXNoZWQgc2VuZGluZyAtIGNhbm5vdCAuc2VuZCgpXCIpO2lmKCF0aGlzLm1ldGhvZERlZmluaXRpb24ucmVxdWVzdFN0cmVhbSYmdGhpcy5zZW50Rmlyc3RNZXNzYWdlKXRocm93IG5ldyBFcnJvcihcIk1lc3NhZ2UgYWxyZWFkeSBzZW50IGZvciBub24tY2xpZW50LXN0cmVhbWluZyBtZXRob2QgLSBjYW5ub3QgLnNlbmQoKVwiKTt0aGlzLnNlbnRGaXJzdE1lc3NhZ2U9ITA7dmFyIHQ9Yy5mcmFtZVJlcXVlc3QoZSk7dGhpcy50cmFuc3BvcnQuc2VuZE1lc3NhZ2UodCl9LGUucHJvdG90eXBlLmZpbmlzaFNlbmQ9ZnVuY3Rpb24oKXtpZighdGhpcy5zdGFydGVkKXRocm93IG5ldyBFcnJvcihcIkNsaWVudCBub3Qgc3RhcnRlZCAtIC5maW5pc2hTZW5kKCkgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIC5jbG9zZSgpXCIpO2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBFcnJvcihcIkNsaWVudCBhbHJlYWR5IGNsb3NlZCAtIGNhbm5vdCAuc2VuZCgpXCIpO2lmKHRoaXMuZmluaXNoZWRTZW5kaW5nKXRocm93IG5ldyBFcnJvcihcIkNsaWVudCBhbHJlYWR5IGZpbmlzaGVkIHNlbmRpbmcgLSBjYW5ub3QgLmZpbmlzaFNlbmQoKVwiKTt0aGlzLmZpbmlzaGVkU2VuZGluZz0hMCx0aGlzLnRyYW5zcG9ydC5maW5pc2hTZW5kKCl9LGUucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuc3RhcnRlZCl0aHJvdyBuZXcgRXJyb3IoXCJDbGllbnQgbm90IHN0YXJ0ZWQgLSAuc3RhcnQoKSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgLmNsb3NlKClcIik7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IEVycm9yKFwiQ2xpZW50IGFscmVhZHkgY2xvc2VkIC0gY2Fubm90IC5jbG9zZSgpXCIpO3RoaXMuY2xvc2VkPSEwLHRoaXMucHJvcHMuZGVidWcmJmEuZGVidWcoXCJyZXF1ZXN0LmFib3J0IGFib3J0aW5nIHJlcXVlc3RcIiksdGhpcy50cmFuc3BvcnQuY2FuY2VsKCl9LGV9KCk7ZnVuY3Rpb24gdShlKXt2YXIgdD1lLmdldChcImdycGMtc3RhdHVzXCIpfHxbXTtpZih0Lmxlbmd0aD4wKXRyeXt2YXIgbj10WzBdO3JldHVybiBwYXJzZUludChuLDEwKX1jYXRjaChlKXtyZXR1cm4gbnVsbH1yZXR1cm4gbnVsbH19LDM0NjpmdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZGVidWc9dm9pZCAwLHQuZGVidWc9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07Y29uc29sZS5kZWJ1Zz9jb25zb2xlLmRlYnVnLmFwcGx5KG51bGwsZSk6Y29uc29sZS5sb2cuYXBwbHkobnVsbCxlKX19LDYwNzpmdW5jdGlvbihlLHQsbil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5ncnBjPXZvaWQgMDt2YXIgcixpPW4oNDE4KSxvPW4oNTcpLGE9bigyMjkpLHM9big1NDApLGM9bigyMTApLGw9big4NTkpLHU9big4KSxkPW4oOTM4KSxmPW4oMzUpLHA9big5MzQpOyhyPXQuZ3JwY3x8KHQuZ3JwYz17fSkpLnNldERlZmF1bHRUcmFuc3BvcnQ9by5zZXREZWZhdWx0VHJhbnNwb3J0RmFjdG9yeSxyLkNyb3NzQnJvd3Nlckh0dHBUcmFuc3BvcnQ9bC5Dcm9zc0Jyb3dzZXJIdHRwVHJhbnNwb3J0LHIuRmV0Y2hSZWFkYWJsZVN0cmVhbVRyYW5zcG9ydD1hLkZldGNoUmVhZGFibGVTdHJlYW1UcmFuc3BvcnQsci5YaHJUcmFuc3BvcnQ9Yy5YaHJUcmFuc3BvcnQsci5XZWJzb2NrZXRUcmFuc3BvcnQ9cy5XZWJzb2NrZXRUcmFuc3BvcnQsci5Db2RlPXUuQ29kZSxyLk1ldGFkYXRhPWkuQnJvd3NlckhlYWRlcnMsci5jbGllbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcC5jbGllbnQoZSx0KX0sci5pbnZva2U9ZC5pbnZva2Usci51bmFyeT1mLnVuYXJ5fSw5Mzg6ZnVuY3Rpb24oZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuaW52b2tlPXZvaWQgMDt2YXIgcj1uKDkzNCk7dC5pbnZva2U9ZnVuY3Rpb24oZSx0KXtpZihlLnJlcXVlc3RTdHJlYW0pdGhyb3cgbmV3IEVycm9yKFwiLmludm9rZSBjYW5ub3QgYmUgdXNlZCB3aXRoIGNsaWVudC1zdHJlYW1pbmcgbWV0aG9kcy4gVXNlIC5jbGllbnQgaW5zdGVhZC5cIik7dmFyIG49ci5jbGllbnQoZSx7aG9zdDp0Lmhvc3QsdHJhbnNwb3J0OnQudHJhbnNwb3J0LGRlYnVnOnQuZGVidWd9KTtyZXR1cm4gdC5vbkhlYWRlcnMmJm4ub25IZWFkZXJzKHQub25IZWFkZXJzKSx0Lm9uTWVzc2FnZSYmbi5vbk1lc3NhZ2UodC5vbk1lc3NhZ2UpLHQub25FbmQmJm4ub25FbmQodC5vbkVuZCksbi5zdGFydCh0Lm1ldGFkYXRhKSxuLnNlbmQodC5yZXF1ZXN0KSxuLmZpbmlzaFNlbmQoKSx7Y2xvc2U6ZnVuY3Rpb24oKXtuLmNsb3NlKCl9fX19LDY1OmZ1bmN0aW9uKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk1ldGFkYXRhPXZvaWQgMDt2YXIgcj1uKDQxOCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJNZXRhZGF0YVwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkJyb3dzZXJIZWFkZXJzfX0pfSw1NzpmdW5jdGlvbihlLHQsbil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5tYWtlRGVmYXVsdFRyYW5zcG9ydD10LnNldERlZmF1bHRUcmFuc3BvcnRGYWN0b3J5PXZvaWQgMDt2YXIgcj1uKDg1OSksaT1mdW5jdGlvbihlKXtyZXR1cm4gci5Dcm9zc0Jyb3dzZXJIdHRwVHJhbnNwb3J0KHt3aXRoQ3JlZGVudGlhbHM6ITF9KShlKX07dC5zZXREZWZhdWx0VHJhbnNwb3J0RmFjdG9yeT1mdW5jdGlvbihlKXtpPWV9LHQubWFrZURlZmF1bHRUcmFuc3BvcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGkoZSl9fSwyMjk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuKHI9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49MSxyPWFyZ3VtZW50cy5sZW5ndGg7bjxyO24rKylmb3IodmFyIGkgaW4gdD1hcmd1bWVudHNbbl0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsaSkmJihlW2ldPXRbaV0pO3JldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmRldGVjdEZldGNoU3VwcG9ydD10LkZldGNoUmVhZGFibGVTdHJlYW1UcmFuc3BvcnQ9dm9pZCAwO3ZhciBpPW4oNjUpLG89bigzNDYpO3QuRmV0Y2hSZWFkYWJsZVN0cmVhbVRyYW5zcG9ydD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZGVidWcmJm8uZGVidWcoXCJmZXRjaFJlcXVlc3RcIixlKSxuZXcgYShlLHQpfSh0LGUpfX07dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5jYW5jZWxsZWQ9ITEsdGhpcy5jb250cm9sbGVyPXNlbGYuQWJvcnRDb250cm9sbGVyJiZuZXcgQWJvcnRDb250cm9sbGVyLHRoaXMub3B0aW9ucz1lLHRoaXMuaW5pdD10fXJldHVybiBlLnByb3RvdHlwZS5wdW1wPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztpZih0aGlzLnJlYWRlcj1lLHRoaXMuY2FuY2VsbGVkKXJldHVybiB0aGlzLm9wdGlvbnMuZGVidWcmJm8uZGVidWcoXCJGZXRjaC5wdW1wLmNhbmNlbCBhdCBmaXJzdCBwdW1wXCIpLHZvaWQgdGhpcy5yZWFkZXIuY2FuY2VsKCkuY2F0Y2goKGZ1bmN0aW9uKGUpe24ub3B0aW9ucy5kZWJ1ZyYmby5kZWJ1ZyhcIkZldGNoLnB1bXAucmVhZGVyLmNhbmNlbCBleGNlcHRpb25cIixlKX0pKTt0aGlzLnJlYWRlci5yZWFkKCkudGhlbigoZnVuY3Rpb24oZSl7aWYoZS5kb25lKXJldHVybiBuLm9wdGlvbnMub25FbmQoKSx0O24ub3B0aW9ucy5vbkNodW5rKGUudmFsdWUpLG4ucHVtcChuLnJlYWRlcix0KX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7bi5jYW5jZWxsZWQ/bi5vcHRpb25zLmRlYnVnJiZvLmRlYnVnKFwiRmV0Y2guY2F0Y2ggLSByZXF1ZXN0IGNhbmNlbGxlZFwiKToobi5jYW5jZWxsZWQ9ITAsbi5vcHRpb25zLmRlYnVnJiZvLmRlYnVnKFwiRmV0Y2guY2F0Y2hcIixlLm1lc3NhZ2UpLG4ub3B0aW9ucy5vbkVuZChlKSl9KSl9LGUucHJvdG90eXBlLnNlbmQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztmZXRjaCh0aGlzLm9wdGlvbnMudXJsLHIocih7fSx0aGlzLmluaXQpLHtoZWFkZXJzOnRoaXMubWV0YWRhdGEudG9IZWFkZXJzKCksbWV0aG9kOlwiUE9TVFwiLGJvZHk6ZSxzaWduYWw6dGhpcy5jb250cm9sbGVyJiZ0aGlzLmNvbnRyb2xsZXIuc2lnbmFsfSkpLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKHQub3B0aW9ucy5kZWJ1ZyYmby5kZWJ1ZyhcIkZldGNoLnJlc3BvbnNlXCIsZSksdC5vcHRpb25zLm9uSGVhZGVycyhuZXcgaS5NZXRhZGF0YShlLmhlYWRlcnMpLGUuc3RhdHVzKSwhZS5ib2R5KXJldHVybiBlO3QucHVtcChlLmJvZHkuZ2V0UmVhZGVyKCksZSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3QuY2FuY2VsbGVkP3Qub3B0aW9ucy5kZWJ1ZyYmby5kZWJ1ZyhcIkZldGNoLmNhdGNoIC0gcmVxdWVzdCBjYW5jZWxsZWRcIik6KHQuY2FuY2VsbGVkPSEwLHQub3B0aW9ucy5kZWJ1ZyYmby5kZWJ1ZyhcIkZldGNoLmNhdGNoXCIsZS5tZXNzYWdlKSx0Lm9wdGlvbnMub25FbmQoZSkpfSkpfSxlLnByb3RvdHlwZS5zZW5kTWVzc2FnZT1mdW5jdGlvbihlKXt0aGlzLnNlbmQoZSl9LGUucHJvdG90eXBlLmZpbmlzaFNlbmQ9ZnVuY3Rpb24oKXt9LGUucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKGUpe3RoaXMubWV0YWRhdGE9ZX0sZS5wcm90b3R5cGUuY2FuY2VsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmNhbmNlbGxlZD90aGlzLm9wdGlvbnMuZGVidWcmJm8uZGVidWcoXCJGZXRjaC5jYW5jZWwgYWxyZWFkeSBjYW5jZWxsZWRcIik6KHRoaXMuY2FuY2VsbGVkPSEwLHRoaXMuY29udHJvbGxlcj8odGhpcy5vcHRpb25zLmRlYnVnJiZvLmRlYnVnKFwiRmV0Y2guY2FuY2VsLmNvbnRyb2xsZXIuYWJvcnRcIiksdGhpcy5jb250cm9sbGVyLmFib3J0KCkpOnRoaXMub3B0aW9ucy5kZWJ1ZyYmby5kZWJ1ZyhcIkZldGNoLmNhbmNlbC5taXNzaW5nIGFib3J0IGNvbnRyb2xsZXJcIiksdGhpcy5yZWFkZXI/KHRoaXMub3B0aW9ucy5kZWJ1ZyYmby5kZWJ1ZyhcIkZldGNoLmNhbmNlbC5yZWFkZXIuY2FuY2VsXCIpLHRoaXMucmVhZGVyLmNhbmNlbCgpLmNhdGNoKChmdW5jdGlvbih0KXtlLm9wdGlvbnMuZGVidWcmJm8uZGVidWcoXCJGZXRjaC5jYW5jZWwucmVhZGVyLmNhbmNlbCBleGNlcHRpb25cIix0KX0pKSk6dGhpcy5vcHRpb25zLmRlYnVnJiZvLmRlYnVnKFwiRmV0Y2guY2FuY2VsIGJlZm9yZSByZWFkZXJcIikpfSxlfSgpO3QuZGV0ZWN0RmV0Y2hTdXBwb3J0PWZ1bmN0aW9uKCl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFJlc3BvbnNlJiZSZXNwb25zZS5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoXCJib2R5XCIpJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBIZWFkZXJzfX0sODU5OmZ1bmN0aW9uKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNyb3NzQnJvd3Nlckh0dHBUcmFuc3BvcnQ9dm9pZCAwO3ZhciByPW4oMjI5KSxpPW4oMjEwKTt0LkNyb3NzQnJvd3Nlckh0dHBUcmFuc3BvcnQ9ZnVuY3Rpb24oZSl7aWYoci5kZXRlY3RGZXRjaFN1cHBvcnQoKSl7dmFyIHQ9e2NyZWRlbnRpYWxzOmUud2l0aENyZWRlbnRpYWxzP1wiaW5jbHVkZVwiOlwic2FtZS1vcmlnaW5cIn07cmV0dXJuIHIuRmV0Y2hSZWFkYWJsZVN0cmVhbVRyYW5zcG9ydCh0KX1yZXR1cm4gaS5YaHJUcmFuc3BvcnQoe3dpdGhDcmVkZW50aWFsczplLndpdGhDcmVkZW50aWFsc30pfX0sMjEwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPXRoaXMmJnRoaXMuX19leHRlbmRzfHwocj1mdW5jdGlvbihlLHQpe3JldHVybihyPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pJiYoZVtuXT10W25dKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9ZX1yKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KToobi5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IG4pfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5zdHJpbmdUb0FycmF5QnVmZmVyPXQuTW96Q2h1bmtlZEFycmF5QnVmZmVyWEhSPXQuWEhSPXQuWGhyVHJhbnNwb3J0PXZvaWQgMDt2YXIgbz1uKDY1KSxhPW4oMzQ2KSxzPW4oODQ5KTt0LlhoclRyYW5zcG9ydD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYocy5kZXRlY3RNb3pYSFJTdXBwb3J0KCkpcmV0dXJuIG5ldyBsKHQsZSk7aWYocy5kZXRlY3RYSFJPdmVycmlkZU1pbWVUeXBlU3VwcG9ydCgpKXJldHVybiBuZXcgYyh0LGUpO3Rocm93IG5ldyBFcnJvcihcIlRoaXMgZW52aXJvbm1lbnQncyBYSFIgaW1wbGVtZW50YXRpb24gY2Fubm90IHN1cHBvcnQgYmluYXJ5IHRyYW5zZmVyLlwiKX19O3ZhciBjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMub3B0aW9ucz1lLHRoaXMuaW5pdD10fXJldHVybiBlLnByb3RvdHlwZS5vblByb2dyZXNzRXZlbnQ9ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuZGVidWcmJmEuZGVidWcoXCJYSFIub25Qcm9ncmVzc0V2ZW50Lmxlbmd0aDogXCIsdGhpcy54aHIucmVzcG9uc2UubGVuZ3RoKTt2YXIgZT10aGlzLnhoci5yZXNwb25zZS5zdWJzdHIodGhpcy5pbmRleCk7dGhpcy5pbmRleD10aGlzLnhoci5yZXNwb25zZS5sZW5ndGg7dmFyIHQ9ZChlKTt0aGlzLm9wdGlvbnMub25DaHVuayh0KX0sZS5wcm90b3R5cGUub25Mb2FkRXZlbnQ9ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuZGVidWcmJmEuZGVidWcoXCJYSFIub25Mb2FkRXZlbnRcIiksdGhpcy5vcHRpb25zLm9uRW5kKCl9LGUucHJvdG90eXBlLm9uU3RhdGVDaGFuZ2U9ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuZGVidWcmJmEuZGVidWcoXCJYSFIub25TdGF0ZUNoYW5nZVwiLHRoaXMueGhyLnJlYWR5U3RhdGUpLHRoaXMueGhyLnJlYWR5U3RhdGU9PT1YTUxIdHRwUmVxdWVzdC5IRUFERVJTX1JFQ0VJVkVEJiZ0aGlzLm9wdGlvbnMub25IZWFkZXJzKG5ldyBvLk1ldGFkYXRhKHRoaXMueGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSx0aGlzLnhoci5zdGF0dXMpfSxlLnByb3RvdHlwZS5zZW5kTWVzc2FnZT1mdW5jdGlvbihlKXt0aGlzLnhoci5zZW5kKGUpfSxlLnByb3RvdHlwZS5maW5pc2hTZW5kPWZ1bmN0aW9uKCl7fSxlLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMubWV0YWRhdGE9ZTt2YXIgbj1uZXcgWE1MSHR0cFJlcXVlc3Q7dGhpcy54aHI9bixuLm9wZW4oXCJQT1NUXCIsdGhpcy5vcHRpb25zLnVybCksdGhpcy5jb25maWd1cmVYaHIoKSx0aGlzLm1ldGFkYXRhLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7bi5zZXRSZXF1ZXN0SGVhZGVyKGUsdC5qb2luKFwiLCBcIikpfSkpLG4ud2l0aENyZWRlbnRpYWxzPUJvb2xlYW4odGhpcy5pbml0LndpdGhDcmVkZW50aWFscyksbi5hZGRFdmVudExpc3RlbmVyKFwicmVhZHlzdGF0ZWNoYW5nZVwiLHRoaXMub25TdGF0ZUNoYW5nZS5iaW5kKHRoaXMpKSxuLmFkZEV2ZW50TGlzdGVuZXIoXCJwcm9ncmVzc1wiLHRoaXMub25Qcm9ncmVzc0V2ZW50LmJpbmQodGhpcykpLG4uYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRlbmRcIix0aGlzLm9uTG9hZEV2ZW50LmJpbmQodGhpcykpLG4uYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsKGZ1bmN0aW9uKGUpe3Qub3B0aW9ucy5kZWJ1ZyYmYS5kZWJ1ZyhcIlhIUi5lcnJvclwiLGUpLHQub3B0aW9ucy5vbkVuZChlLmVycm9yKX0pKX0sZS5wcm90b3R5cGUuY29uZmlndXJlWGhyPWZ1bmN0aW9uKCl7dGhpcy54aHIucmVzcG9uc2VUeXBlPVwidGV4dFwiLHRoaXMueGhyLm92ZXJyaWRlTWltZVR5cGUoXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXgtdXNlci1kZWZpbmVkXCIpfSxlLnByb3RvdHlwZS5jYW5jZWw9ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuZGVidWcmJmEuZGVidWcoXCJYSFIuYWJvcnRcIiksdGhpcy54aHIuYWJvcnQoKX0sZX0oKTt0LlhIUj1jO3ZhciBsPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBpKHQsZSksdC5wcm90b3R5cGUuY29uZmlndXJlWGhyPWZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLmRlYnVnJiZhLmRlYnVnKFwiTW96WEhSLmNvbmZpZ3VyZVhocjogc2V0dGluZyByZXNwb25zZVR5cGUgdG8gJ21vei1jaHVua2VkLWFycmF5YnVmZmVyJ1wiKSx0aGlzLnhoci5yZXNwb25zZVR5cGU9XCJtb3otY2h1bmtlZC1hcnJheWJ1ZmZlclwifSx0LnByb3RvdHlwZS5vblByb2dyZXNzRXZlbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnhoci5yZXNwb25zZTt0aGlzLm9wdGlvbnMuZGVidWcmJmEuZGVidWcoXCJNb3pYSFIub25Qcm9ncmVzc0V2ZW50OiBcIixuZXcgVWludDhBcnJheShlKSksdGhpcy5vcHRpb25zLm9uQ2h1bmsobmV3IFVpbnQ4QXJyYXkoZSkpfSx0fShjKTtmdW5jdGlvbiB1KGUsdCl7dmFyIG49ZS5jaGFyQ29kZUF0KHQpO2lmKG4+PTU1Mjk2JiZuPD01NjMxOSl7dmFyIHI9ZS5jaGFyQ29kZUF0KHQrMSk7cj49NTYzMjAmJnI8PTU3MzQzJiYobj02NTUzNisobi01NTI5Njw8MTApKyhyLTU2MzIwKSl9cmV0dXJuIG59ZnVuY3Rpb24gZChlKXtmb3IodmFyIHQ9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgpLG49MCxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBpPVN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXQ/ZS5jb2RlUG9pbnRBdChyKTp1KGUscik7dFtuKytdPTI1NSZpfXJldHVybiB0fXQuTW96Q2h1bmtlZEFycmF5QnVmZmVyWEhSPWwsdC5zdHJpbmdUb0FycmF5QnVmZmVyPWR9LDg0OTpmdW5jdGlvbihlLHQpe3ZhciBuO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9ZnVuY3Rpb24oKXtpZih2b2lkIDAhPT1uKXJldHVybiBuO2lmKFhNTEh0dHBSZXF1ZXN0KXtuPW5ldyBYTUxIdHRwUmVxdWVzdDt0cnl7bi5vcGVuKFwiR0VUXCIsXCJodHRwczovL2xvY2FsaG9zdFwiKX1jYXRjaChlKXt9fXJldHVybiBufSgpO2lmKCF0KXJldHVybiExO3RyeXtyZXR1cm4gdC5yZXNwb25zZVR5cGU9ZSx0LnJlc3BvbnNlVHlwZT09PWV9Y2F0Y2goZSl7fXJldHVybiExfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZGV0ZWN0WEhST3ZlcnJpZGVNaW1lVHlwZVN1cHBvcnQ9dC5kZXRlY3RNb3pYSFJTdXBwb3J0PXQueGhyU3VwcG9ydHNSZXNwb25zZVR5cGU9dm9pZCAwLHQueGhyU3VwcG9ydHNSZXNwb25zZVR5cGU9cix0LmRldGVjdE1velhIUlN1cHBvcnQ9ZnVuY3Rpb24oKXtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgWE1MSHR0cFJlcXVlc3QmJnIoXCJtb3otY2h1bmtlZC1hcnJheWJ1ZmZlclwiKX0sdC5kZXRlY3RYSFJPdmVycmlkZU1pbWVUeXBlU3VwcG9ydD1mdW5jdGlvbigpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBYTUxIdHRwUmVxdWVzdCYmWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KFwib3ZlcnJpZGVNaW1lVHlwZVwiKX19LDU0MDpmdW5jdGlvbihlLHQsbil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5XZWJzb2NrZXRUcmFuc3BvcnQ9dm9pZCAwO3ZhciByLGk9bigzNDYpLG89big2MTcpOyFmdW5jdGlvbihlKXtlW2UuRklOSVNIX1NFTkQ9MV09XCJGSU5JU0hfU0VORFwifShyfHwocj17fSkpO3ZhciBhPW5ldyBVaW50OEFycmF5KFsxXSk7dC5XZWJzb2NrZXRUcmFuc3BvcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2UuZGVidWcmJmkuZGVidWcoXCJ3ZWJzb2NrZXRSZXF1ZXN0XCIsZSk7dmFyIHQsbj1mdW5jdGlvbihlKXtpZihcImh0dHBzOi8vXCI9PT1lLnN1YnN0cigwLDgpKXJldHVyblwid3NzOi8vXCIrZS5zdWJzdHIoOCk7aWYoXCJodHRwOi8vXCI9PT1lLnN1YnN0cigwLDcpKXJldHVyblwid3M6Ly9cIitlLnN1YnN0cig3KTt0aHJvdyBuZXcgRXJyb3IoXCJXZWJzb2NrZXQgdHJhbnNwb3J0IGNvbnN0cnVjdGVkIHdpdGggbm9uLWh0dHBzOi8vIG9yIGh0dHA6Ly8gaG9zdC5cIil9KGUudXJsKSxzPVtdO2Z1bmN0aW9uIGMoZSl7aWYoZT09PXIuRklOSVNIX1NFTkQpdC5zZW5kKGEpO2Vsc2V7dmFyIG49ZSxpPW5ldyBJbnQ4QXJyYXkobi5ieXRlTGVuZ3RoKzEpO2kuc2V0KG5ldyBVaW50OEFycmF5KFswXSkpLGkuc2V0KG4sMSksdC5zZW5kKGkpfX1yZXR1cm57c2VuZE1lc3NhZ2U6ZnVuY3Rpb24oZSl7dCYmdC5yZWFkeVN0YXRlIT09dC5DT05ORUNUSU5HP2MoZSk6cy5wdXNoKGUpfSxmaW5pc2hTZW5kOmZ1bmN0aW9uKCl7dCYmdC5yZWFkeVN0YXRlIT09dC5DT05ORUNUSU5HP2Moci5GSU5JU0hfU0VORCk6cy5wdXNoKHIuRklOSVNIX1NFTkQpfSxzdGFydDpmdW5jdGlvbihyKXsodD1uZXcgV2ViU29ja2V0KG4sW1wiZ3JwYy13ZWJzb2NrZXRzXCJdKSkuYmluYXJ5VHlwZT1cImFycmF5YnVmZmVyXCIsdC5vbm9wZW49ZnVuY3Rpb24oKXt2YXIgbjtlLmRlYnVnJiZpLmRlYnVnKFwid2Vic29ja2V0UmVxdWVzdC5vbm9wZW5cIiksdC5zZW5kKChuPVwiXCIsci5mb3JFYWNoKChmdW5jdGlvbihlLHQpe24rPWUrXCI6IFwiK3Quam9pbihcIiwgXCIpK1wiXFxyXFxuXCJ9KSksby5lbmNvZGVBU0NJSShuKSkpLHMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7YyhlKX0pKX0sdC5vbmNsb3NlPWZ1bmN0aW9uKHQpe2UuZGVidWcmJmkuZGVidWcoXCJ3ZWJzb2NrZXRSZXF1ZXN0Lm9uY2xvc2VcIix0KSxlLm9uRW5kKCl9LHQub25lcnJvcj1mdW5jdGlvbih0KXtlLmRlYnVnJiZpLmRlYnVnKFwid2Vic29ja2V0UmVxdWVzdC5vbmVycm9yXCIsdCl9LHQub25tZXNzYWdlPWZ1bmN0aW9uKHQpe2Uub25DaHVuayhuZXcgVWludDhBcnJheSh0LmRhdGEpKX19LGNhbmNlbDpmdW5jdGlvbigpe2UuZGVidWcmJmkuZGVidWcoXCJ3ZWJzb2NrZXQuYWJvcnRcIiksdC5jbG9zZSgpfX19KGUpfX19LDM1OmZ1bmN0aW9uKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVuYXJ5PXZvaWQgMDt2YXIgcj1uKDY1KSxpPW4oOTM0KTt0LnVuYXJ5PWZ1bmN0aW9uKGUsdCl7aWYoZS5yZXNwb25zZVN0cmVhbSl0aHJvdyBuZXcgRXJyb3IoXCIudW5hcnkgY2Fubm90IGJlIHVzZWQgd2l0aCBzZXJ2ZXItc3RyZWFtaW5nIG1ldGhvZHMuIFVzZSAuaW52b2tlIG9yIC5jbGllbnQgaW5zdGVhZC5cIik7aWYoZS5yZXF1ZXN0U3RyZWFtKXRocm93IG5ldyBFcnJvcihcIi51bmFyeSBjYW5ub3QgYmUgdXNlZCB3aXRoIGNsaWVudC1zdHJlYW1pbmcgbWV0aG9kcy4gVXNlIC5jbGllbnQgaW5zdGVhZC5cIik7dmFyIG49bnVsbCxvPW51bGwsYT1pLmNsaWVudChlLHtob3N0OnQuaG9zdCx0cmFuc3BvcnQ6dC50cmFuc3BvcnQsZGVidWc6dC5kZWJ1Z30pO3JldHVybiBhLm9uSGVhZGVycygoZnVuY3Rpb24oZSl7bj1lfSkpLGEub25NZXNzYWdlKChmdW5jdGlvbihlKXtvPWV9KSksYS5vbkVuZCgoZnVuY3Rpb24oZSxpLGEpe3Qub25FbmQoe3N0YXR1czplLHN0YXR1c01lc3NhZ2U6aSxoZWFkZXJzOm58fG5ldyByLk1ldGFkYXRhLG1lc3NhZ2U6byx0cmFpbGVyczphfSl9KSksYS5zdGFydCh0Lm1ldGFkYXRhKSxhLnNlbmQodC5yZXF1ZXN0KSxhLmZpbmlzaFNlbmQoKSx7Y2xvc2U6ZnVuY3Rpb24oKXthLmNsb3NlKCl9fX19LDg4MjpmdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZnJhbWVSZXF1ZXN0PXZvaWQgMCx0LmZyYW1lUmVxdWVzdD1mdW5jdGlvbihlKXt2YXIgdD1lLnNlcmlhbGl6ZUJpbmFyeSgpLG49bmV3IEFycmF5QnVmZmVyKHQuYnl0ZUxlbmd0aCs1KTtyZXR1cm4gbmV3IERhdGFWaWV3KG4sMSw0KS5zZXRVaW50MzIoMCx0Lmxlbmd0aCwhMSksbmV3IFVpbnQ4QXJyYXkobiw1KS5zZXQodCksbmV3IFVpbnQ4QXJyYXkobil9fX0sbj17fSxmdW5jdGlvbiBlKHIpe2lmKG5bcl0pcmV0dXJuIG5bcl0uZXhwb3J0czt2YXIgaT1uW3JdPXtleHBvcnRzOnt9fTtyZXR1cm4gdFtyXS5jYWxsKGkuZXhwb3J0cyxpLGkuZXhwb3J0cyxlKSxpLmV4cG9ydHN9KDYwNykpfSw4NTkyMTplPT57ZS5leHBvcnRzPW47dmFyIHQ9bnVsbDt0cnl7dD1uZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShuZXcgVWludDhBcnJheShbMCw5NywxMTUsMTA5LDEsMCwwLDAsMSwxMywyLDk2LDAsMSwxMjcsOTYsNCwxMjcsMTI3LDEyNywxMjcsMSwxMjcsMyw3LDYsMCwxLDEsMSwxLDEsNiw2LDEsMTI3LDEsNjUsMCwxMSw3LDUwLDYsMywxMDksMTE3LDEwOCwwLDEsNSwxMDAsMTA1LDExOCw5NSwxMTUsMCwyLDUsMTAwLDEwNSwxMTgsOTUsMTE3LDAsMyw1LDExNCwxMDEsMTA5LDk1LDExNSwwLDQsNSwxMTQsMTAxLDEwOSw5NSwxMTcsMCw1LDgsMTAzLDEwMSwxMTYsOTUsMTA0LDEwNSwxMDMsMTA0LDAsMCwxMCwxOTEsMSw2LDQsMCwzNSwwLDExLDM2LDEsMSwxMjYsMzIsMCwxNzMsMzIsMSwxNzMsNjYsMzIsMTM0LDEzMiwzMiwyLDE3MywzMiwzLDE3Myw2NiwzMiwxMzQsMTMyLDEyNiwzNCw0LDY2LDMyLDEzNSwxNjcsMzYsMCwzMiw0LDE2NywxMSwzNiwxLDEsMTI2LDMyLDAsMTczLDMyLDEsMTczLDY2LDMyLDEzNCwxMzIsMzIsMiwxNzMsMzIsMywxNzMsNjYsMzIsMTM0LDEzMiwxMjcsMzQsNCw2NiwzMiwxMzUsMTY3LDM2LDAsMzIsNCwxNjcsMTEsMzYsMSwxLDEyNiwzMiwwLDE3MywzMiwxLDE3Myw2NiwzMiwxMzQsMTMyLDMyLDIsMTczLDMyLDMsMTczLDY2LDMyLDEzNCwxMzIsMTI4LDM0LDQsNjYsMzIsMTM1LDE2NywzNiwwLDMyLDQsMTY3LDExLDM2LDEsMSwxMjYsMzIsMCwxNzMsMzIsMSwxNzMsNjYsMzIsMTM0LDEzMiwzMiwyLDE3MywzMiwzLDE3Myw2NiwzMiwxMzQsMTMyLDEyOSwzNCw0LDY2LDMyLDEzNSwxNjcsMzYsMCwzMiw0LDE2NywxMSwzNiwxLDEsMTI2LDMyLDAsMTczLDMyLDEsMTczLDY2LDMyLDEzNCwxMzIsMzIsMiwxNzMsMzIsMywxNzMsNjYsMzIsMTM0LDEzMiwxMzAsMzQsNCw2NiwzMiwxMzUsMTY3LDM2LDAsMzIsNCwxNjcsMTFdKSkse30pLmV4cG9ydHN9Y2F0Y2goZSl7fWZ1bmN0aW9uIG4oZSx0LG4pe3RoaXMubG93PTB8ZSx0aGlzLmhpZ2g9MHx0LHRoaXMudW5zaWduZWQ9ISFufWZ1bmN0aW9uIHIoZSl7cmV0dXJuITA9PT0oZSYmZS5fX2lzTG9uZ19fKX1uLnByb3RvdHlwZS5fX2lzTG9uZ19fLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxcIl9faXNMb25nX19cIix7dmFsdWU6ITB9KSxuLmlzTG9uZz1yO3ZhciBpPXt9LG89e307ZnVuY3Rpb24gYShlLHQpe3ZhciBuLHIsYTtyZXR1cm4gdD8oYT0wPD0oZT4+Pj0wKSYmZTwyNTYpJiYocj1vW2VdKT9yOihuPWMoZSwoMHxlKTwwPy0xOjAsITApLGEmJihvW2VdPW4pLG4pOihhPS0xMjg8PShlfD0wKSYmZTwxMjgpJiYocj1pW2VdKT9yOihuPWMoZSxlPDA/LTE6MCwhMSksYSYmKGlbZV09biksbil9ZnVuY3Rpb24gcyhlLHQpe2lmKGlzTmFOKGUpKXJldHVybiB0P2c6djtpZih0KXtpZihlPDApcmV0dXJuIGc7aWYoZT49cClyZXR1cm4gU31lbHNle2lmKGU8PS1tKXJldHVybiBiO2lmKGUrMT49bSlyZXR1cm4gSX1yZXR1cm4gZTwwP3MoLWUsdCkubmVnKCk6YyhlJWZ8MCxlL2Z8MCx0KX1mdW5jdGlvbiBjKGUsdCxyKXtyZXR1cm4gbmV3IG4oZSx0LHIpfW4uZnJvbUludD1hLG4uZnJvbU51bWJlcj1zLG4uZnJvbUJpdHM9Yzt2YXIgbD1NYXRoLnBvdztmdW5jdGlvbiB1KGUsdCxuKXtpZigwPT09ZS5sZW5ndGgpdGhyb3cgRXJyb3IoXCJlbXB0eSBzdHJpbmdcIik7aWYoXCJOYU5cIj09PWV8fFwiSW5maW5pdHlcIj09PWV8fFwiK0luZmluaXR5XCI9PT1lfHxcIi1JbmZpbml0eVwiPT09ZSlyZXR1cm4gdjtpZihcIm51bWJlclwiPT10eXBlb2YgdD8obj10LHQ9ITEpOnQ9ISF0LChuPW58fDEwKTwyfHwzNjxuKXRocm93IFJhbmdlRXJyb3IoXCJyYWRpeFwiKTt2YXIgcjtpZigocj1lLmluZGV4T2YoXCItXCIpKT4wKXRocm93IEVycm9yKFwiaW50ZXJpb3IgaHlwaGVuXCIpO2lmKDA9PT1yKXJldHVybiB1KGUuc3Vic3RyaW5nKDEpLHQsbikubmVnKCk7Zm9yKHZhciBpPXMobChuLDgpKSxvPXYsYT0wO2E8ZS5sZW5ndGg7YSs9OCl7dmFyIGM9TWF0aC5taW4oOCxlLmxlbmd0aC1hKSxkPXBhcnNlSW50KGUuc3Vic3RyaW5nKGEsYStjKSxuKTtpZihjPDgpe3ZhciBmPXMobChuLGMpKTtvPW8ubXVsKGYpLmFkZChzKGQpKX1lbHNlIG89KG89by5tdWwoaSkpLmFkZChzKGQpKX1yZXR1cm4gby51bnNpZ25lZD10LG99ZnVuY3Rpb24gZChlLHQpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlP3MoZSx0KTpcInN0cmluZ1wiPT10eXBlb2YgZT91KGUsdCk6YyhlLmxvdyxlLmhpZ2gsXCJib29sZWFuXCI9PXR5cGVvZiB0P3Q6ZS51bnNpZ25lZCl9bi5mcm9tU3RyaW5nPXUsbi5mcm9tVmFsdWU9ZDt2YXIgZj00Mjk0OTY3Mjk2LHA9ZipmLG09cC8yLGg9YSgxPDwyNCksdj1hKDApO24uWkVSTz12O3ZhciBnPWEoMCwhMCk7bi5VWkVSTz1nO3ZhciB5PWEoMSk7bi5PTkU9eTt2YXIgRT1hKDEsITApO24uVU9ORT1FO3ZhciBfPWEoLTEpO24uTkVHX09ORT1fO3ZhciBJPWMoLTEsMjE0NzQ4MzY0NywhMSk7bi5NQVhfVkFMVUU9STt2YXIgUz1jKC0xLC0xLCEwKTtuLk1BWF9VTlNJR05FRF9WQUxVRT1TO3ZhciBiPWMoMCwtMjE0NzQ4MzY0OCwhMSk7bi5NSU5fVkFMVUU9Yjt2YXIgVD1uLnByb3RvdHlwZTtULnRvSW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5zaWduZWQ/dGhpcy5sb3c+Pj4wOnRoaXMubG93fSxULnRvTnVtYmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5zaWduZWQ/KHRoaXMuaGlnaD4+PjApKmYrKHRoaXMubG93Pj4+MCk6dGhpcy5oaWdoKmYrKHRoaXMubG93Pj4+MCl9LFQudG9TdHJpbmc9ZnVuY3Rpb24oZSl7aWYoKGU9ZXx8MTApPDJ8fDM2PGUpdGhyb3cgUmFuZ2VFcnJvcihcInJhZGl4XCIpO2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuXCIwXCI7aWYodGhpcy5pc05lZ2F0aXZlKCkpe2lmKHRoaXMuZXEoYikpe3ZhciB0PXMoZSksbj10aGlzLmRpdih0KSxyPW4ubXVsKHQpLnN1Yih0aGlzKTtyZXR1cm4gbi50b1N0cmluZyhlKStyLnRvSW50KCkudG9TdHJpbmcoZSl9cmV0dXJuXCItXCIrdGhpcy5uZWcoKS50b1N0cmluZyhlKX1mb3IodmFyIGk9cyhsKGUsNiksdGhpcy51bnNpZ25lZCksbz10aGlzLGE9XCJcIjs7KXt2YXIgYz1vLmRpdihpKSx1PShvLnN1YihjLm11bChpKSkudG9JbnQoKT4+PjApLnRvU3RyaW5nKGUpO2lmKChvPWMpLmlzWmVybygpKXJldHVybiB1K2E7Zm9yKDt1Lmxlbmd0aDw2Oyl1PVwiMFwiK3U7YT1cIlwiK3UrYX19LFQuZ2V0SGlnaEJpdHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oaWdofSxULmdldEhpZ2hCaXRzVW5zaWduZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oaWdoPj4+MH0sVC5nZXRMb3dCaXRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG93fSxULmdldExvd0JpdHNVbnNpZ25lZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxvdz4+PjB9LFQuZ2V0TnVtQml0c0Ficz1mdW5jdGlvbigpe2lmKHRoaXMuaXNOZWdhdGl2ZSgpKXJldHVybiB0aGlzLmVxKGIpPzY0OnRoaXMubmVnKCkuZ2V0TnVtQml0c0FicygpO2Zvcih2YXIgZT0wIT10aGlzLmhpZ2g/dGhpcy5oaWdoOnRoaXMubG93LHQ9MzE7dD4wJiYwPT0oZSYxPDx0KTt0LS0pO3JldHVybiAwIT10aGlzLmhpZ2g/dCszMzp0KzF9LFQuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmhpZ2gmJjA9PT10aGlzLmxvd30sVC5lcXo9VC5pc1plcm8sVC5pc05lZ2F0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMudW5zaWduZWQmJnRoaXMuaGlnaDwwfSxULmlzUG9zaXRpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bnNpZ25lZHx8dGhpcy5oaWdoPj0wfSxULmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMubG93KX0sVC5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEmdGhpcy5sb3cpfSxULmVxdWFscz1mdW5jdGlvbihlKXtyZXR1cm4gcihlKXx8KGU9ZChlKSksKHRoaXMudW5zaWduZWQ9PT1lLnVuc2lnbmVkfHx0aGlzLmhpZ2g+Pj4zMSE9MXx8ZS5oaWdoPj4+MzEhPTEpJiZ0aGlzLmhpZ2g9PT1lLmhpZ2gmJnRoaXMubG93PT09ZS5sb3d9LFQuZXE9VC5lcXVhbHMsVC5ub3RFcXVhbHM9ZnVuY3Rpb24oZSl7cmV0dXJuIXRoaXMuZXEoZSl9LFQubmVxPVQubm90RXF1YWxzLFQubmU9VC5ub3RFcXVhbHMsVC5sZXNzVGhhbj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jb21wKGUpPDB9LFQubHQ9VC5sZXNzVGhhbixULmxlc3NUaGFuT3JFcXVhbD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jb21wKGUpPD0wfSxULmx0ZT1ULmxlc3NUaGFuT3JFcXVhbCxULmxlPVQubGVzc1RoYW5PckVxdWFsLFQuZ3JlYXRlclRoYW49ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY29tcChlKT4wfSxULmd0PVQuZ3JlYXRlclRoYW4sVC5ncmVhdGVyVGhhbk9yRXF1YWw9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY29tcChlKT49MH0sVC5ndGU9VC5ncmVhdGVyVGhhbk9yRXF1YWwsVC5nZT1ULmdyZWF0ZXJUaGFuT3JFcXVhbCxULmNvbXBhcmU9ZnVuY3Rpb24oZSl7aWYocihlKXx8KGU9ZChlKSksdGhpcy5lcShlKSlyZXR1cm4gMDt2YXIgdD10aGlzLmlzTmVnYXRpdmUoKSxuPWUuaXNOZWdhdGl2ZSgpO3JldHVybiB0JiYhbj8tMTohdCYmbj8xOnRoaXMudW5zaWduZWQ/ZS5oaWdoPj4+MD50aGlzLmhpZ2g+Pj4wfHxlLmhpZ2g9PT10aGlzLmhpZ2gmJmUubG93Pj4+MD50aGlzLmxvdz4+PjA/LTE6MTp0aGlzLnN1YihlKS5pc05lZ2F0aXZlKCk/LTE6MX0sVC5jb21wPVQuY29tcGFyZSxULm5lZ2F0ZT1mdW5jdGlvbigpe3JldHVybiF0aGlzLnVuc2lnbmVkJiZ0aGlzLmVxKGIpP2I6dGhpcy5ub3QoKS5hZGQoeSl9LFQubmVnPVQubmVnYXRlLFQuYWRkPWZ1bmN0aW9uKGUpe3IoZSl8fChlPWQoZSkpO3ZhciB0PXRoaXMuaGlnaD4+PjE2LG49NjU1MzUmdGhpcy5oaWdoLGk9dGhpcy5sb3c+Pj4xNixvPTY1NTM1JnRoaXMubG93LGE9ZS5oaWdoPj4+MTYscz02NTUzNSZlLmhpZ2gsbD1lLmxvdz4+PjE2LHU9MCxmPTAscD0wLG09MDtyZXR1cm4gcCs9KG0rPW8rKDY1NTM1JmUubG93KSk+Pj4xNixmKz0ocCs9aStsKT4+PjE2LHUrPShmKz1uK3MpPj4+MTYsdSs9dCthLGMoKHAmPTY1NTM1KTw8MTZ8KG0mPTY1NTM1KSwodSY9NjU1MzUpPDwxNnwoZiY9NjU1MzUpLHRoaXMudW5zaWduZWQpfSxULnN1YnRyYWN0PWZ1bmN0aW9uKGUpe3JldHVybiByKGUpfHwoZT1kKGUpKSx0aGlzLmFkZChlLm5lZygpKX0sVC5zdWI9VC5zdWJ0cmFjdCxULm11bHRpcGx5PWZ1bmN0aW9uKGUpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHY7aWYocihlKXx8KGU9ZChlKSksdClyZXR1cm4gYyh0Lm11bCh0aGlzLmxvdyx0aGlzLmhpZ2gsZS5sb3csZS5oaWdoKSx0LmdldF9oaWdoKCksdGhpcy51bnNpZ25lZCk7aWYoZS5pc1plcm8oKSlyZXR1cm4gdjtpZih0aGlzLmVxKGIpKXJldHVybiBlLmlzT2RkKCk/Yjp2O2lmKGUuZXEoYikpcmV0dXJuIHRoaXMuaXNPZGQoKT9iOnY7aWYodGhpcy5pc05lZ2F0aXZlKCkpcmV0dXJuIGUuaXNOZWdhdGl2ZSgpP3RoaXMubmVnKCkubXVsKGUubmVnKCkpOnRoaXMubmVnKCkubXVsKGUpLm5lZygpO2lmKGUuaXNOZWdhdGl2ZSgpKXJldHVybiB0aGlzLm11bChlLm5lZygpKS5uZWcoKTtpZih0aGlzLmx0KGgpJiZlLmx0KGgpKXJldHVybiBzKHRoaXMudG9OdW1iZXIoKSplLnRvTnVtYmVyKCksdGhpcy51bnNpZ25lZCk7dmFyIG49dGhpcy5oaWdoPj4+MTYsaT02NTUzNSZ0aGlzLmhpZ2gsbz10aGlzLmxvdz4+PjE2LGE9NjU1MzUmdGhpcy5sb3csbD1lLmhpZ2g+Pj4xNix1PTY1NTM1JmUuaGlnaCxmPWUubG93Pj4+MTYscD02NTUzNSZlLmxvdyxtPTAsZz0wLHk9MCxFPTA7cmV0dXJuIHkrPShFKz1hKnApPj4+MTYsZys9KHkrPW8qcCk+Pj4xNix5Jj02NTUzNSxnKz0oeSs9YSpmKT4+PjE2LG0rPShnKz1pKnApPj4+MTYsZyY9NjU1MzUsbSs9KGcrPW8qZik+Pj4xNixnJj02NTUzNSxtKz0oZys9YSp1KT4+PjE2LG0rPW4qcCtpKmYrbyp1K2EqbCxjKCh5Jj02NTUzNSk8PDE2fChFJj02NTUzNSksKG0mPTY1NTM1KTw8MTZ8KGcmPTY1NTM1KSx0aGlzLnVuc2lnbmVkKX0sVC5tdWw9VC5tdWx0aXBseSxULmRpdmlkZT1mdW5jdGlvbihlKXtpZihyKGUpfHwoZT1kKGUpKSxlLmlzWmVybygpKXRocm93IEVycm9yKFwiZGl2aXNpb24gYnkgemVyb1wiKTt2YXIgbixpLG87aWYodClyZXR1cm4gdGhpcy51bnNpZ25lZHx8LTIxNDc0ODM2NDghPT10aGlzLmhpZ2h8fC0xIT09ZS5sb3d8fC0xIT09ZS5oaWdoP2MoKHRoaXMudW5zaWduZWQ/dC5kaXZfdTp0LmRpdl9zKSh0aGlzLmxvdyx0aGlzLmhpZ2gsZS5sb3csZS5oaWdoKSx0LmdldF9oaWdoKCksdGhpcy51bnNpZ25lZCk6dGhpcztpZih0aGlzLmlzWmVybygpKXJldHVybiB0aGlzLnVuc2lnbmVkP2c6djtpZih0aGlzLnVuc2lnbmVkKXtpZihlLnVuc2lnbmVkfHwoZT1lLnRvVW5zaWduZWQoKSksZS5ndCh0aGlzKSlyZXR1cm4gZztpZihlLmd0KHRoaXMuc2hydSgxKSkpcmV0dXJuIEU7bz1nfWVsc2V7aWYodGhpcy5lcShiKSlyZXR1cm4gZS5lcSh5KXx8ZS5lcShfKT9iOmUuZXEoYik/eToobj10aGlzLnNocigxKS5kaXYoZSkuc2hsKDEpKS5lcSh2KT9lLmlzTmVnYXRpdmUoKT95Ol86KGk9dGhpcy5zdWIoZS5tdWwobikpLG89bi5hZGQoaS5kaXYoZSkpKTtpZihlLmVxKGIpKXJldHVybiB0aGlzLnVuc2lnbmVkP2c6djtpZih0aGlzLmlzTmVnYXRpdmUoKSlyZXR1cm4gZS5pc05lZ2F0aXZlKCk/dGhpcy5uZWcoKS5kaXYoZS5uZWcoKSk6dGhpcy5uZWcoKS5kaXYoZSkubmVnKCk7aWYoZS5pc05lZ2F0aXZlKCkpcmV0dXJuIHRoaXMuZGl2KGUubmVnKCkpLm5lZygpO289dn1mb3IoaT10aGlzO2kuZ3RlKGUpOyl7bj1NYXRoLm1heCgxLE1hdGguZmxvb3IoaS50b051bWJlcigpL2UudG9OdW1iZXIoKSkpO2Zvcih2YXIgYT1NYXRoLmNlaWwoTWF0aC5sb2cobikvTWF0aC5MTjIpLHU9YTw9NDg/MTpsKDIsYS00OCksZj1zKG4pLHA9Zi5tdWwoZSk7cC5pc05lZ2F0aXZlKCl8fHAuZ3QoaSk7KXA9KGY9cyhuLT11LHRoaXMudW5zaWduZWQpKS5tdWwoZSk7Zi5pc1plcm8oKSYmKGY9eSksbz1vLmFkZChmKSxpPWkuc3ViKHApfXJldHVybiBvfSxULmRpdj1ULmRpdmlkZSxULm1vZHVsbz1mdW5jdGlvbihlKXtyZXR1cm4gcihlKXx8KGU9ZChlKSksdD9jKCh0aGlzLnVuc2lnbmVkP3QucmVtX3U6dC5yZW1fcykodGhpcy5sb3csdGhpcy5oaWdoLGUubG93LGUuaGlnaCksdC5nZXRfaGlnaCgpLHRoaXMudW5zaWduZWQpOnRoaXMuc3ViKHRoaXMuZGl2KGUpLm11bChlKSl9LFQubW9kPVQubW9kdWxvLFQucmVtPVQubW9kdWxvLFQubm90PWZ1bmN0aW9uKCl7cmV0dXJuIGMofnRoaXMubG93LH50aGlzLmhpZ2gsdGhpcy51bnNpZ25lZCl9LFQuYW5kPWZ1bmN0aW9uKGUpe3JldHVybiByKGUpfHwoZT1kKGUpKSxjKHRoaXMubG93JmUubG93LHRoaXMuaGlnaCZlLmhpZ2gsdGhpcy51bnNpZ25lZCl9LFQub3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSl8fChlPWQoZSkpLGModGhpcy5sb3d8ZS5sb3csdGhpcy5oaWdofGUuaGlnaCx0aGlzLnVuc2lnbmVkKX0sVC54b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSl8fChlPWQoZSkpLGModGhpcy5sb3deZS5sb3csdGhpcy5oaWdoXmUuaGlnaCx0aGlzLnVuc2lnbmVkKX0sVC5zaGlmdExlZnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSkmJihlPWUudG9JbnQoKSksMD09KGUmPTYzKT90aGlzOmU8MzI/Yyh0aGlzLmxvdzw8ZSx0aGlzLmhpZ2g8PGV8dGhpcy5sb3c+Pj4zMi1lLHRoaXMudW5zaWduZWQpOmMoMCx0aGlzLmxvdzw8ZS0zMix0aGlzLnVuc2lnbmVkKX0sVC5zaGw9VC5zaGlmdExlZnQsVC5zaGlmdFJpZ2h0PWZ1bmN0aW9uKGUpe3JldHVybiByKGUpJiYoZT1lLnRvSW50KCkpLDA9PShlJj02Myk/dGhpczplPDMyP2ModGhpcy5sb3c+Pj5lfHRoaXMuaGlnaDw8MzItZSx0aGlzLmhpZ2g+PmUsdGhpcy51bnNpZ25lZCk6Yyh0aGlzLmhpZ2g+PmUtMzIsdGhpcy5oaWdoPj0wPzA6LTEsdGhpcy51bnNpZ25lZCl9LFQuc2hyPVQuc2hpZnRSaWdodCxULnNoaWZ0UmlnaHRVbnNpZ25lZD1mdW5jdGlvbihlKXtpZihyKGUpJiYoZT1lLnRvSW50KCkpLDA9PShlJj02MykpcmV0dXJuIHRoaXM7dmFyIHQ9dGhpcy5oaWdoO3JldHVybiBlPDMyP2ModGhpcy5sb3c+Pj5lfHQ8PDMyLWUsdD4+PmUsdGhpcy51bnNpZ25lZCk6YygzMj09PWU/dDp0Pj4+ZS0zMiwwLHRoaXMudW5zaWduZWQpfSxULnNocnU9VC5zaGlmdFJpZ2h0VW5zaWduZWQsVC5zaHJfdT1ULnNoaWZ0UmlnaHRVbnNpZ25lZCxULnRvU2lnbmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5zaWduZWQ/Yyh0aGlzLmxvdyx0aGlzLmhpZ2gsITEpOnRoaXN9LFQudG9VbnNpZ25lZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnVuc2lnbmVkP3RoaXM6Yyh0aGlzLmxvdyx0aGlzLmhpZ2gsITApfSxULnRvQnl0ZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGU/dGhpcy50b0J5dGVzTEUoKTp0aGlzLnRvQnl0ZXNCRSgpfSxULnRvQnl0ZXNMRT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuaGlnaCx0PXRoaXMubG93O3JldHVyblsyNTUmdCx0Pj4+OCYyNTUsdD4+PjE2JjI1NSx0Pj4+MjQsMjU1JmUsZT4+PjgmMjU1LGU+Pj4xNiYyNTUsZT4+PjI0XX0sVC50b0J5dGVzQkU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmhpZ2gsdD10aGlzLmxvdztyZXR1cm5bZT4+PjI0LGU+Pj4xNiYyNTUsZT4+PjgmMjU1LDI1NSZlLHQ+Pj4yNCx0Pj4+MTYmMjU1LHQ+Pj44JjI1NSwyNTUmdF19LG4uZnJvbUJ5dGVzPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gcj9uLmZyb21CeXRlc0xFKGUsdCk6bi5mcm9tQnl0ZXNCRShlLHQpfSxuLmZyb21CeXRlc0xFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBuKGVbMF18ZVsxXTw8OHxlWzJdPDwxNnxlWzNdPDwyNCxlWzRdfGVbNV08PDh8ZVs2XTw8MTZ8ZVs3XTw8MjQsdCl9LG4uZnJvbUJ5dGVzQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IG4oZVs0XTw8MjR8ZVs1XTw8MTZ8ZVs2XTw8OHxlWzddLGVbMF08PDI0fGVbMV08PDE2fGVbMl08PDh8ZVszXSx0KX19LDgzMjEyOihlLHQsbik9PntlLmV4cG9ydHM9bigzMDI0KX0sMzAyNDooZSx0LG4pPT57dmFyIHI9dDtmdW5jdGlvbiBpKCl7ci51dGlsLl9jb25maWd1cmUoKSxyLldyaXRlci5fY29uZmlndXJlKHIuQnVmZmVyV3JpdGVyKSxyLlJlYWRlci5fY29uZmlndXJlKHIuQnVmZmVyUmVhZGVyKX1yLmJ1aWxkPVwibWluaW1hbFwiLHIuV3JpdGVyPW4oOTYyNjIpLHIuQnVmZmVyV3JpdGVyPW4oMjgwNzgpLHIuUmVhZGVyPW4oNzIyODIpLHIuQnVmZmVyUmVhZGVyPW4oNTA2NjQpLHIudXRpbD1uKDgxMjc2KSxyLnJwYz1uKDY1OTcpLHIucm9vdHM9big1NTM0Miksci5jb25maWd1cmU9aSxpKCl9LDcyMjgyOihlLHQsbik9PntlLmV4cG9ydHM9Yzt2YXIgcixpPW4oODEyNzYpLG89aS5Mb25nQml0cyxhPWkudXRmODtmdW5jdGlvbiBzKGUsdCl7cmV0dXJuIFJhbmdlRXJyb3IoXCJpbmRleCBvdXQgb2YgcmFuZ2U6IFwiK2UucG9zK1wiICsgXCIrKHR8fDEpK1wiID4gXCIrZS5sZW4pfWZ1bmN0aW9uIGMoZSl7dGhpcy5idWY9ZSx0aGlzLnBvcz0wLHRoaXMubGVuPWUubGVuZ3RofXZhciBsLHU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4QXJyYXk/ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIG5ldyBjKGUpO3Rocm93IEVycm9yKFwiaWxsZWdhbCBidWZmZXJcIil9OmZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIG5ldyBjKGUpO3Rocm93IEVycm9yKFwiaWxsZWdhbCBidWZmZXJcIil9LGQ9ZnVuY3Rpb24oKXtyZXR1cm4gaS5CdWZmZXI/ZnVuY3Rpb24oZSl7cmV0dXJuKGMuY3JlYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBpLkJ1ZmZlci5pc0J1ZmZlcihlKT9uZXcgcihlKTp1KGUpfSkoZSl9OnV9O2Z1bmN0aW9uIGYoKXt2YXIgZT1uZXcgbygwLDApLHQ9MDtpZighKHRoaXMubGVuLXRoaXMucG9zPjQpKXtmb3IoO3Q8MzsrK3Qpe2lmKHRoaXMucG9zPj10aGlzLmxlbil0aHJvdyBzKHRoaXMpO2lmKGUubG89KGUubG98KDEyNyZ0aGlzLmJ1Zlt0aGlzLnBvc10pPDw3KnQpPj4+MCx0aGlzLmJ1Zlt0aGlzLnBvcysrXTwxMjgpcmV0dXJuIGV9cmV0dXJuIGUubG89KGUubG98KDEyNyZ0aGlzLmJ1Zlt0aGlzLnBvcysrXSk8PDcqdCk+Pj4wLGV9Zm9yKDt0PDQ7Kyt0KWlmKGUubG89KGUubG98KDEyNyZ0aGlzLmJ1Zlt0aGlzLnBvc10pPDw3KnQpPj4+MCx0aGlzLmJ1Zlt0aGlzLnBvcysrXTwxMjgpcmV0dXJuIGU7aWYoZS5sbz0oZS5sb3woMTI3JnRoaXMuYnVmW3RoaXMucG9zXSk8PDI4KT4+PjAsZS5oaT0oZS5oaXwoMTI3JnRoaXMuYnVmW3RoaXMucG9zXSk+PjQpPj4+MCx0aGlzLmJ1Zlt0aGlzLnBvcysrXTwxMjgpcmV0dXJuIGU7aWYodD0wLHRoaXMubGVuLXRoaXMucG9zPjQpe2Zvcig7dDw1OysrdClpZihlLmhpPShlLmhpfCgxMjcmdGhpcy5idWZbdGhpcy5wb3NdKTw8Nyp0KzMpPj4+MCx0aGlzLmJ1Zlt0aGlzLnBvcysrXTwxMjgpcmV0dXJuIGV9ZWxzZSBmb3IoO3Q8NTsrK3Qpe2lmKHRoaXMucG9zPj10aGlzLmxlbil0aHJvdyBzKHRoaXMpO2lmKGUuaGk9KGUuaGl8KDEyNyZ0aGlzLmJ1Zlt0aGlzLnBvc10pPDw3KnQrMyk+Pj4wLHRoaXMuYnVmW3RoaXMucG9zKytdPDEyOClyZXR1cm4gZX10aHJvdyBFcnJvcihcImludmFsaWQgdmFyaW50IGVuY29kaW5nXCIpfWZ1bmN0aW9uIHAoZSx0KXtyZXR1cm4oZVt0LTRdfGVbdC0zXTw8OHxlW3QtMl08PDE2fGVbdC0xXTw8MjQpPj4+MH1mdW5jdGlvbiBtKCl7aWYodGhpcy5wb3MrOD50aGlzLmxlbil0aHJvdyBzKHRoaXMsOCk7cmV0dXJuIG5ldyBvKHAodGhpcy5idWYsdGhpcy5wb3MrPTQpLHAodGhpcy5idWYsdGhpcy5wb3MrPTQpKX1jLmNyZWF0ZT1kKCksYy5wcm90b3R5cGUuX3NsaWNlPWkuQXJyYXkucHJvdG90eXBlLnN1YmFycmF5fHxpLkFycmF5LnByb3RvdHlwZS5zbGljZSxjLnByb3RvdHlwZS51aW50MzI9KGw9NDI5NDk2NzI5NSxmdW5jdGlvbigpe2lmKGw9KDEyNyZ0aGlzLmJ1Zlt0aGlzLnBvc10pPj4+MCx0aGlzLmJ1Zlt0aGlzLnBvcysrXTwxMjgpcmV0dXJuIGw7aWYobD0obHwoMTI3JnRoaXMuYnVmW3RoaXMucG9zXSk8PDcpPj4+MCx0aGlzLmJ1Zlt0aGlzLnBvcysrXTwxMjgpcmV0dXJuIGw7aWYobD0obHwoMTI3JnRoaXMuYnVmW3RoaXMucG9zXSk8PDE0KT4+PjAsdGhpcy5idWZbdGhpcy5wb3MrK108MTI4KXJldHVybiBsO2lmKGw9KGx8KDEyNyZ0aGlzLmJ1Zlt0aGlzLnBvc10pPDwyMSk+Pj4wLHRoaXMuYnVmW3RoaXMucG9zKytdPDEyOClyZXR1cm4gbDtpZihsPShsfCgxNSZ0aGlzLmJ1Zlt0aGlzLnBvc10pPDwyOCk+Pj4wLHRoaXMuYnVmW3RoaXMucG9zKytdPDEyOClyZXR1cm4gbDtpZigodGhpcy5wb3MrPTUpPnRoaXMubGVuKXRocm93IHRoaXMucG9zPXRoaXMubGVuLHModGhpcywxMCk7cmV0dXJuIGx9KSxjLnByb3RvdHlwZS5pbnQzMj1mdW5jdGlvbigpe3JldHVybiAwfHRoaXMudWludDMyKCl9LGMucHJvdG90eXBlLnNpbnQzMj1mdW5jdGlvbigpe3ZhciBlPXRoaXMudWludDMyKCk7cmV0dXJuIGU+Pj4xXi0oMSZlKXwwfSxjLnByb3RvdHlwZS5ib29sPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLnVpbnQzMigpfSxjLnByb3RvdHlwZS5maXhlZDMyPWZ1bmN0aW9uKCl7aWYodGhpcy5wb3MrND50aGlzLmxlbil0aHJvdyBzKHRoaXMsNCk7cmV0dXJuIHAodGhpcy5idWYsdGhpcy5wb3MrPTQpfSxjLnByb3RvdHlwZS5zZml4ZWQzMj1mdW5jdGlvbigpe2lmKHRoaXMucG9zKzQ+dGhpcy5sZW4pdGhyb3cgcyh0aGlzLDQpO3JldHVybiAwfHAodGhpcy5idWYsdGhpcy5wb3MrPTQpfSxjLnByb3RvdHlwZS5mbG9hdD1mdW5jdGlvbigpe2lmKHRoaXMucG9zKzQ+dGhpcy5sZW4pdGhyb3cgcyh0aGlzLDQpO3ZhciBlPWkuZmxvYXQucmVhZEZsb2F0TEUodGhpcy5idWYsdGhpcy5wb3MpO3JldHVybiB0aGlzLnBvcys9NCxlfSxjLnByb3RvdHlwZS5kb3VibGU9ZnVuY3Rpb24oKXtpZih0aGlzLnBvcys4PnRoaXMubGVuKXRocm93IHModGhpcyw0KTt2YXIgZT1pLmZsb2F0LnJlYWREb3VibGVMRSh0aGlzLmJ1Zix0aGlzLnBvcyk7cmV0dXJuIHRoaXMucG9zKz04LGV9LGMucHJvdG90eXBlLmJ5dGVzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy51aW50MzIoKSx0PXRoaXMucG9zLG49dGhpcy5wb3MrZTtpZihuPnRoaXMubGVuKXRocm93IHModGhpcyxlKTtyZXR1cm4gdGhpcy5wb3MrPWUsQXJyYXkuaXNBcnJheSh0aGlzLmJ1Zik/dGhpcy5idWYuc2xpY2UodCxuKTp0PT09bj9uZXcgdGhpcy5idWYuY29uc3RydWN0b3IoMCk6dGhpcy5fc2xpY2UuY2FsbCh0aGlzLmJ1Zix0LG4pfSxjLnByb3RvdHlwZS5zdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJ5dGVzKCk7cmV0dXJuIGEucmVhZChlLDAsZS5sZW5ndGgpfSxjLnByb3RvdHlwZS5za2lwPWZ1bmN0aW9uKGUpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXtpZih0aGlzLnBvcytlPnRoaXMubGVuKXRocm93IHModGhpcyxlKTt0aGlzLnBvcys9ZX1lbHNlIGRve2lmKHRoaXMucG9zPj10aGlzLmxlbil0aHJvdyBzKHRoaXMpfXdoaWxlKDEyOCZ0aGlzLmJ1Zlt0aGlzLnBvcysrXSk7cmV0dXJuIHRoaXN9LGMucHJvdG90eXBlLnNraXBUeXBlPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDA6dGhpcy5za2lwKCk7YnJlYWs7Y2FzZSAxOnRoaXMuc2tpcCg4KTticmVhaztjYXNlIDI6dGhpcy5za2lwKHRoaXMudWludDMyKCkpO2JyZWFrO2Nhc2UgMzpmb3IoOzQhPShlPTcmdGhpcy51aW50MzIoKSk7KXRoaXMuc2tpcFR5cGUoZSk7YnJlYWs7Y2FzZSA1OnRoaXMuc2tpcCg0KTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKFwiaW52YWxpZCB3aXJlIHR5cGUgXCIrZStcIiBhdCBvZmZzZXQgXCIrdGhpcy5wb3MpfXJldHVybiB0aGlzfSxjLl9jb25maWd1cmU9ZnVuY3Rpb24oZSl7cj1lLGMuY3JlYXRlPWQoKSxyLl9jb25maWd1cmUoKTt2YXIgdD1pLkxvbmc/XCJ0b0xvbmdcIjpcInRvTnVtYmVyXCI7aS5tZXJnZShjLnByb3RvdHlwZSx7aW50NjQ6ZnVuY3Rpb24oKXtyZXR1cm4gZi5jYWxsKHRoaXMpW3RdKCExKX0sdWludDY0OmZ1bmN0aW9uKCl7cmV0dXJuIGYuY2FsbCh0aGlzKVt0XSghMCl9LHNpbnQ2NDpmdW5jdGlvbigpe3JldHVybiBmLmNhbGwodGhpcykuenpEZWNvZGUoKVt0XSghMSl9LGZpeGVkNjQ6ZnVuY3Rpb24oKXtyZXR1cm4gbS5jYWxsKHRoaXMpW3RdKCEwKX0sc2ZpeGVkNjQ6ZnVuY3Rpb24oKXtyZXR1cm4gbS5jYWxsKHRoaXMpW3RdKCExKX19KX19LDUwNjY0OihlLHQsbik9PntlLmV4cG9ydHM9bzt2YXIgcj1uKDcyMjgyKTsoby5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShyLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPW87dmFyIGk9big4MTI3Nik7ZnVuY3Rpb24gbyhlKXtyLmNhbGwodGhpcyxlKX1vLl9jb25maWd1cmU9ZnVuY3Rpb24oKXtpLkJ1ZmZlciYmKG8ucHJvdG90eXBlLl9zbGljZT1pLkJ1ZmZlci5wcm90b3R5cGUuc2xpY2UpfSxvLnByb3RvdHlwZS5zdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnVpbnQzMigpO3JldHVybiB0aGlzLmJ1Zi51dGY4U2xpY2U/dGhpcy5idWYudXRmOFNsaWNlKHRoaXMucG9zLHRoaXMucG9zPU1hdGgubWluKHRoaXMucG9zK2UsdGhpcy5sZW4pKTp0aGlzLmJ1Zi50b1N0cmluZyhcInV0Zi04XCIsdGhpcy5wb3MsdGhpcy5wb3M9TWF0aC5taW4odGhpcy5wb3MrZSx0aGlzLmxlbikpfSxvLl9jb25maWd1cmUoKX0sNTUzNDI6ZT0+e2UuZXhwb3J0cz17fX0sNjU5NzooZSx0LG4pPT57dC5TZXJ2aWNlPW4oMzI3MTkpfSwzMjcxOTooZSx0LG4pPT57ZS5leHBvcnRzPWk7dmFyIHI9big4MTI3Nik7ZnVuY3Rpb24gaShlLHQsbil7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBUeXBlRXJyb3IoXCJycGNJbXBsIG11c3QgYmUgYSBmdW5jdGlvblwiKTtyLkV2ZW50RW1pdHRlci5jYWxsKHRoaXMpLHRoaXMucnBjSW1wbD1lLHRoaXMucmVxdWVzdERlbGltaXRlZD1Cb29sZWFuKHQpLHRoaXMucmVzcG9uc2VEZWxpbWl0ZWQ9Qm9vbGVhbihuKX0oaS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShyLkV2ZW50RW1pdHRlci5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1pLGkucHJvdG90eXBlLnJwY0NhbGw9ZnVuY3Rpb24gZSh0LG4saSxvLGEpe2lmKCFvKXRocm93IFR5cGVFcnJvcihcInJlcXVlc3QgbXVzdCBiZSBzcGVjaWZpZWRcIik7dmFyIHM9dGhpcztpZighYSlyZXR1cm4gci5hc1Byb21pc2UoZSxzLHQsbixpLG8pO2lmKHMucnBjSW1wbCl0cnl7cmV0dXJuIHMucnBjSW1wbCh0LG5bcy5yZXF1ZXN0RGVsaW1pdGVkP1wiZW5jb2RlRGVsaW1pdGVkXCI6XCJlbmNvZGVcIl0obykuZmluaXNoKCksKGZ1bmN0aW9uKGUsbil7aWYoZSlyZXR1cm4gcy5lbWl0KFwiZXJyb3JcIixlLHQpLGEoZSk7aWYobnVsbCE9PW4pe2lmKCEobiBpbnN0YW5jZW9mIGkpKXRyeXtuPWlbcy5yZXNwb25zZURlbGltaXRlZD9cImRlY29kZURlbGltaXRlZFwiOlwiZGVjb2RlXCJdKG4pfWNhdGNoKGUpe3JldHVybiBzLmVtaXQoXCJlcnJvclwiLGUsdCksYShlKX1yZXR1cm4gcy5lbWl0KFwiZGF0YVwiLG4sdCksYShudWxsLG4pfXMuZW5kKCEwKX0pKX1jYXRjaChlKXtyZXR1cm4gcy5lbWl0KFwiZXJyb3JcIixlLHQpLHZvaWQgc2V0VGltZW91dCgoZnVuY3Rpb24oKXthKGUpfSksMCl9ZWxzZSBzZXRUaW1lb3V0KChmdW5jdGlvbigpe2EoRXJyb3IoXCJhbHJlYWR5IGVuZGVkXCIpKX0pLDApfSxpLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucnBjSW1wbCYmKGV8fHRoaXMucnBjSW1wbChudWxsLG51bGwsbnVsbCksdGhpcy5ycGNJbXBsPW51bGwsdGhpcy5lbWl0KFwiZW5kXCIpLm9mZigpKSx0aGlzfX0sODg3OTY6KGUsdCxuKT0+e2UuZXhwb3J0cz1pO3ZhciByPW4oODEyNzYpO2Z1bmN0aW9uIGkoZSx0KXt0aGlzLmxvPWU+Pj4wLHRoaXMuaGk9dD4+PjB9dmFyIG89aS56ZXJvPW5ldyBpKDAsMCk7by50b051bWJlcj1mdW5jdGlvbigpe3JldHVybiAwfSxvLnp6RW5jb2RlPW8uenpEZWNvZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sby5sZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gMX07dmFyIGE9aS56ZXJvSGFzaD1cIlxcMFxcMFxcMFxcMFxcMFxcMFxcMFxcMFwiO2kuZnJvbU51bWJlcj1mdW5jdGlvbihlKXtpZigwPT09ZSlyZXR1cm4gbzt2YXIgdD1lPDA7dCYmKGU9LWUpO3ZhciBuPWU+Pj4wLHI9KGUtbikvNDI5NDk2NzI5Nj4+PjA7cmV0dXJuIHQmJihyPX5yPj4+MCxuPX5uPj4+MCwrK24+NDI5NDk2NzI5NSYmKG49MCwrK3I+NDI5NDk2NzI5NSYmKHI9MCkpKSxuZXcgaShuLHIpfSxpLmZyb209ZnVuY3Rpb24oZSl7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpcmV0dXJuIGkuZnJvbU51bWJlcihlKTtpZihyLmlzU3RyaW5nKGUpKXtpZighci5Mb25nKXJldHVybiBpLmZyb21OdW1iZXIocGFyc2VJbnQoZSwxMCkpO2U9ci5Mb25nLmZyb21TdHJpbmcoZSl9cmV0dXJuIGUubG93fHxlLmhpZ2g/bmV3IGkoZS5sb3c+Pj4wLGUuaGlnaD4+PjApOm99LGkucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKGUpe2lmKCFlJiZ0aGlzLmhpPj4+MzEpe3ZhciB0PTErfnRoaXMubG8+Pj4wLG49fnRoaXMuaGk+Pj4wO3JldHVybiB0fHwobj1uKzE+Pj4wKSwtKHQrNDI5NDk2NzI5NipuKX1yZXR1cm4gdGhpcy5sbys0Mjk0OTY3Mjk2KnRoaXMuaGl9LGkucHJvdG90eXBlLnRvTG9uZz1mdW5jdGlvbihlKXtyZXR1cm4gci5Mb25nP25ldyByLkxvbmcoMHx0aGlzLmxvLDB8dGhpcy5oaSxCb29sZWFuKGUpKTp7bG93OjB8dGhpcy5sbyxoaWdoOjB8dGhpcy5oaSx1bnNpZ25lZDpCb29sZWFuKGUpfX07dmFyIHM9U3RyaW5nLnByb3RvdHlwZS5jaGFyQ29kZUF0O2kuZnJvbUhhc2g9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1hP286bmV3IGkoKHMuY2FsbChlLDApfHMuY2FsbChlLDEpPDw4fHMuY2FsbChlLDIpPDwxNnxzLmNhbGwoZSwzKTw8MjQpPj4+MCwocy5jYWxsKGUsNCl8cy5jYWxsKGUsNSk8PDh8cy5jYWxsKGUsNik8PDE2fHMuY2FsbChlLDcpPDwyNCk+Pj4wKX0saS5wcm90b3R5cGUudG9IYXNoPWZ1bmN0aW9uKCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoMjU1JnRoaXMubG8sdGhpcy5sbz4+PjgmMjU1LHRoaXMubG8+Pj4xNiYyNTUsdGhpcy5sbz4+PjI0LDI1NSZ0aGlzLmhpLHRoaXMuaGk+Pj44JjI1NSx0aGlzLmhpPj4+MTYmMjU1LHRoaXMuaGk+Pj4yNCl9LGkucHJvdG90eXBlLnp6RW5jb2RlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oaT4+MzE7cmV0dXJuIHRoaXMuaGk9KCh0aGlzLmhpPDwxfHRoaXMubG8+Pj4zMSleZSk+Pj4wLHRoaXMubG89KHRoaXMubG88PDFeZSk+Pj4wLHRoaXN9LGkucHJvdG90eXBlLnp6RGVjb2RlPWZ1bmN0aW9uKCl7dmFyIGU9LSgxJnRoaXMubG8pO3JldHVybiB0aGlzLmxvPSgodGhpcy5sbz4+PjF8dGhpcy5oaTw8MzEpXmUpPj4+MCx0aGlzLmhpPSh0aGlzLmhpPj4+MV5lKT4+PjAsdGhpc30saS5wcm90b3R5cGUubGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sbyx0PSh0aGlzLmxvPj4+Mjh8dGhpcy5oaTw8NCk+Pj4wLG49dGhpcy5oaT4+PjI0O3JldHVybiAwPT09bj8wPT09dD9lPDE2Mzg0P2U8MTI4PzE6MjplPDIwOTcxNTI/Mzo0OnQ8MTYzODQ/dDwxMjg/NTo2OnQ8MjA5NzE1Mj83Ojg6bjwxMjg/OToxMH19LDgxMjc2OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10O2Z1bmN0aW9uIGkoZSx0LG4pe2Zvcih2YXIgcj1PYmplY3Qua2V5cyh0KSxpPTA7aTxyLmxlbmd0aDsrK2kpdm9pZCAwIT09ZVtyW2ldXSYmbnx8KGVbcltpXV09dFtyW2ldXSk7cmV0dXJuIGV9ZnVuY3Rpb24gbyhlKXtmdW5jdGlvbiB0KGUsbil7aWYoISh0aGlzIGluc3RhbmNlb2YgdCkpcmV0dXJuIG5ldyB0KGUsbik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJtZXNzYWdlXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBlfX0pLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdCk6T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJzdGFja1wiLHt2YWx1ZToobmV3IEVycm9yKS5zdGFja3x8XCJcIn0pLG4mJmkodGhpcyxuKX1yZXR1cm4odC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj10LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSxcIm5hbWVcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGV9fSksdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uYW1lK1wiOiBcIit0aGlzLm1lc3NhZ2V9LHR9ci5hc1Byb21pc2U9bigzNDUzNyksci5iYXNlNjQ9big5NzQxOSksci5FdmVudEVtaXR0ZXI9bigxOTIxMSksci5mbG9hdD1uKDEwOTQ1KSxyLmlucXVpcmU9big2NTk0OSksci51dGY4PW4oOTQ5OTcpLHIucG9vbD1uKDc2NjYyKSxyLkxvbmdCaXRzPW4oODg3OTYpLHIuaXNOb2RlPUJvb2xlYW4odm9pZCAwIT09bi5nJiZuLmcmJm4uZy5wcm9jZXNzJiZuLmcucHJvY2Vzcy52ZXJzaW9ucyYmbi5nLnByb2Nlc3MudmVyc2lvbnMubm9kZSksci5nbG9iYWw9ci5pc05vZGUmJm4uZ3x8XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93fHxcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZiYmc2VsZnx8dGhpcyxyLmVtcHR5QXJyYXk9T2JqZWN0LmZyZWV6ZT9PYmplY3QuZnJlZXplKFtdKTpbXSxyLmVtcHR5T2JqZWN0PU9iamVjdC5mcmVlemU/T2JqZWN0LmZyZWV6ZSh7fSk6e30sci5pc0ludGVnZXI9TnVtYmVyLmlzSW50ZWdlcnx8ZnVuY3Rpb24oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGUmJmlzRmluaXRlKGUpJiZNYXRoLmZsb29yKGUpPT09ZX0sci5pc1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZXx8ZSBpbnN0YW5jZW9mIFN0cmluZ30sci5pc09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGV9LHIuaXNzZXQ9ci5pc1NldD1mdW5jdGlvbihlLHQpe3ZhciBuPWVbdF07cmV0dXJuIShudWxsPT1ufHwhZS5oYXNPd25Qcm9wZXJ0eSh0KSkmJihcIm9iamVjdFwiIT10eXBlb2Ygbnx8KEFycmF5LmlzQXJyYXkobik/bi5sZW5ndGg6T2JqZWN0LmtleXMobikubGVuZ3RoKT4wKX0sci5CdWZmZXI9ZnVuY3Rpb24oKXt0cnl7dmFyIGU9ci5pbnF1aXJlKFwiYnVmZmVyXCIpLkJ1ZmZlcjtyZXR1cm4gZS5wcm90b3R5cGUudXRmOFdyaXRlP2U6bnVsbH1jYXRjaChlKXtyZXR1cm4gbnVsbH19KCksci5fQnVmZmVyX2Zyb209bnVsbCxyLl9CdWZmZXJfYWxsb2NVbnNhZmU9bnVsbCxyLm5ld0J1ZmZlcj1mdW5jdGlvbihlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZT9yLkJ1ZmZlcj9yLl9CdWZmZXJfYWxsb2NVbnNhZmUoZSk6bmV3IHIuQXJyYXkoZSk6ci5CdWZmZXI/ci5fQnVmZmVyX2Zyb20oZSk6XCJ1bmRlZmluZWRcIj09dHlwZW9mIFVpbnQ4QXJyYXk/ZTpuZXcgVWludDhBcnJheShlKX0sci5BcnJheT1cInVuZGVmaW5lZFwiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LHIuTG9uZz1yLmdsb2JhbC5kY29kZUlPJiZyLmdsb2JhbC5kY29kZUlPLkxvbmd8fHIuZ2xvYmFsLkxvbmd8fHIuaW5xdWlyZShcImxvbmdcIiksci5rZXkyUmU9L150cnVlfGZhbHNlfDB8MSQvLHIua2V5MzJSZT0vXi0/KD86MHxbMS05XVswLTldKikkLyxyLmtleTY0UmU9L14oPzpbXFxcXHgwMC1cXFxceGZmXXs4fXwtPyg/OjB8WzEtOV1bMC05XSopKSQvLHIubG9uZ1RvSGFzaD1mdW5jdGlvbihlKXtyZXR1cm4gZT9yLkxvbmdCaXRzLmZyb20oZSkudG9IYXNoKCk6ci5Mb25nQml0cy56ZXJvSGFzaH0sci5sb25nRnJvbUhhc2g9ZnVuY3Rpb24oZSx0KXt2YXIgbj1yLkxvbmdCaXRzLmZyb21IYXNoKGUpO3JldHVybiByLkxvbmc/ci5Mb25nLmZyb21CaXRzKG4ubG8sbi5oaSx0KTpuLnRvTnVtYmVyKEJvb2xlYW4odCkpfSxyLm1lcmdlPWksci5sY0ZpcnN0PWZ1bmN0aW9uKGUpe3JldHVybiBlLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpK2Uuc3Vic3RyaW5nKDEpfSxyLm5ld0Vycm9yPW8sci5Qcm90b2NvbEVycm9yPW8oXCJQcm90b2NvbEVycm9yXCIpLHIub25lT2ZHZXR0ZXI9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXt9LG49MDtuPGUubGVuZ3RoOysrbil0W2Vbbl1dPTE7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBlPU9iamVjdC5rZXlzKHRoaXMpLG49ZS5sZW5ndGgtMTtuPi0xOy0tbilpZigxPT09dFtlW25dXSYmdm9pZCAwIT09dGhpc1tlW25dXSYmbnVsbCE9PXRoaXNbZVtuXV0pcmV0dXJuIGVbbl19fSxyLm9uZU9mU2V0dGVyPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIG49MDtuPGUubGVuZ3RoOysrbillW25dIT09dCYmZGVsZXRlIHRoaXNbZVtuXV19fSxyLnRvSlNPTk9wdGlvbnM9e2xvbmdzOlN0cmluZyxlbnVtczpTdHJpbmcsYnl0ZXM6U3RyaW5nLGpzb246ITB9LHIuX2NvbmZpZ3VyZT1mdW5jdGlvbigpe3ZhciBlPXIuQnVmZmVyO2U/KHIuX0J1ZmZlcl9mcm9tPWUuZnJvbSE9PVVpbnQ4QXJyYXkuZnJvbSYmZS5mcm9tfHxmdW5jdGlvbih0LG4pe3JldHVybiBuZXcgZSh0LG4pfSxyLl9CdWZmZXJfYWxsb2NVbnNhZmU9ZS5hbGxvY1Vuc2FmZXx8ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBlKHQpfSk6ci5fQnVmZmVyX2Zyb209ci5fQnVmZmVyX2FsbG9jVW5zYWZlPW51bGx9fSw5NjI2MjooZSx0LG4pPT57ZS5leHBvcnRzPWQ7dmFyIHIsaT1uKDgxMjc2KSxvPWkuTG9uZ0JpdHMsYT1pLmJhc2U2NCxzPWkudXRmODtmdW5jdGlvbiBjKGUsdCxuKXt0aGlzLmZuPWUsdGhpcy5sZW49dCx0aGlzLm5leHQ9dm9pZCAwLHRoaXMudmFsPW59ZnVuY3Rpb24gbCgpe31mdW5jdGlvbiB1KGUpe3RoaXMuaGVhZD1lLmhlYWQsdGhpcy50YWlsPWUudGFpbCx0aGlzLmxlbj1lLmxlbix0aGlzLm5leHQ9ZS5zdGF0ZXN9ZnVuY3Rpb24gZCgpe3RoaXMubGVuPTAsdGhpcy5oZWFkPW5ldyBjKGwsMCwwKSx0aGlzLnRhaWw9dGhpcy5oZWFkLHRoaXMuc3RhdGVzPW51bGx9dmFyIGY9ZnVuY3Rpb24oKXtyZXR1cm4gaS5CdWZmZXI/ZnVuY3Rpb24oKXtyZXR1cm4oZC5jcmVhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHJ9KSgpfTpmdW5jdGlvbigpe3JldHVybiBuZXcgZH19O2Z1bmN0aW9uIHAoZSx0LG4pe3Rbbl09MjU1JmV9ZnVuY3Rpb24gbShlLHQpe3RoaXMubGVuPWUsdGhpcy5uZXh0PXZvaWQgMCx0aGlzLnZhbD10fWZ1bmN0aW9uIGgoZSx0LG4pe2Zvcig7ZS5oaTspdFtuKytdPTEyNyZlLmxvfDEyOCxlLmxvPShlLmxvPj4+N3xlLmhpPDwyNSk+Pj4wLGUuaGk+Pj49Nztmb3IoO2UubG8+MTI3Oyl0W24rK109MTI3JmUubG98MTI4LGUubG89ZS5sbz4+Pjc7dFtuKytdPWUubG99ZnVuY3Rpb24gdihlLHQsbil7dFtuXT0yNTUmZSx0W24rMV09ZT4+PjgmMjU1LHRbbisyXT1lPj4+MTYmMjU1LHRbbiszXT1lPj4+MjR9ZC5jcmVhdGU9ZigpLGQuYWxsb2M9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBpLkFycmF5KGUpfSxpLkFycmF5IT09QXJyYXkmJihkLmFsbG9jPWkucG9vbChkLmFsbG9jLGkuQXJyYXkucHJvdG90eXBlLnN1YmFycmF5KSksZC5wcm90b3R5cGUuX3B1c2g9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLnRhaWw9dGhpcy50YWlsLm5leHQ9bmV3IGMoZSx0LG4pLHRoaXMubGVuKz10LHRoaXN9LG0ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYy5wcm90b3R5cGUpLG0ucHJvdG90eXBlLmZuPWZ1bmN0aW9uKGUsdCxuKXtmb3IoO2U+MTI3Oyl0W24rK109MTI3JmV8MTI4LGU+Pj49Nzt0W25dPWV9LGQucHJvdG90eXBlLnVpbnQzMj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5sZW4rPSh0aGlzLnRhaWw9dGhpcy50YWlsLm5leHQ9bmV3IG0oKGU+Pj49MCk8MTI4PzE6ZTwxNjM4ND8yOmU8MjA5NzE1Mj8zOmU8MjY4NDM1NDU2PzQ6NSxlKSkubGVuLHRoaXN9LGQucHJvdG90eXBlLmludDMyPWZ1bmN0aW9uKGUpe3JldHVybiBlPDA/dGhpcy5fcHVzaChoLDEwLG8uZnJvbU51bWJlcihlKSk6dGhpcy51aW50MzIoZSl9LGQucHJvdG90eXBlLnNpbnQzMj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy51aW50MzIoKGU8PDFeZT4+MzEpPj4+MCl9LGQucHJvdG90eXBlLnVpbnQ2ND1mdW5jdGlvbihlKXt2YXIgdD1vLmZyb20oZSk7cmV0dXJuIHRoaXMuX3B1c2goaCx0Lmxlbmd0aCgpLHQpfSxkLnByb3RvdHlwZS5pbnQ2ND1kLnByb3RvdHlwZS51aW50NjQsZC5wcm90b3R5cGUuc2ludDY0PWZ1bmN0aW9uKGUpe3ZhciB0PW8uZnJvbShlKS56ekVuY29kZSgpO3JldHVybiB0aGlzLl9wdXNoKGgsdC5sZW5ndGgoKSx0KX0sZC5wcm90b3R5cGUuYm9vbD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcHVzaChwLDEsZT8xOjApfSxkLnByb3RvdHlwZS5maXhlZDMyPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wdXNoKHYsNCxlPj4+MCl9LGQucHJvdG90eXBlLnNmaXhlZDMyPWQucHJvdG90eXBlLmZpeGVkMzIsZC5wcm90b3R5cGUuZml4ZWQ2ND1mdW5jdGlvbihlKXt2YXIgdD1vLmZyb20oZSk7cmV0dXJuIHRoaXMuX3B1c2godiw0LHQubG8pLl9wdXNoKHYsNCx0LmhpKX0sZC5wcm90b3R5cGUuc2ZpeGVkNjQ9ZC5wcm90b3R5cGUuZml4ZWQ2NCxkLnByb3RvdHlwZS5mbG9hdD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcHVzaChpLmZsb2F0LndyaXRlRmxvYXRMRSw0LGUpfSxkLnByb3RvdHlwZS5kb3VibGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3B1c2goaS5mbG9hdC53cml0ZURvdWJsZUxFLDgsZSl9O3ZhciBnPWkuQXJyYXkucHJvdG90eXBlLnNldD9mdW5jdGlvbihlLHQsbil7dC5zZXQoZSxuKX06ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKXRbbityXT1lW3JdfTtkLnByb3RvdHlwZS5ieXRlcz1mdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aD4+PjA7aWYoIXQpcmV0dXJuIHRoaXMuX3B1c2gocCwxLDApO2lmKGkuaXNTdHJpbmcoZSkpe3ZhciBuPWQuYWxsb2ModD1hLmxlbmd0aChlKSk7YS5kZWNvZGUoZSxuLDApLGU9bn1yZXR1cm4gdGhpcy51aW50MzIodCkuX3B1c2goZyx0LGUpfSxkLnByb3RvdHlwZS5zdHJpbmc9ZnVuY3Rpb24oZSl7dmFyIHQ9cy5sZW5ndGgoZSk7cmV0dXJuIHQ/dGhpcy51aW50MzIodCkuX3B1c2gocy53cml0ZSx0LGUpOnRoaXMuX3B1c2gocCwxLDApfSxkLnByb3RvdHlwZS5mb3JrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdGVzPW5ldyB1KHRoaXMpLHRoaXMuaGVhZD10aGlzLnRhaWw9bmV3IGMobCwwLDApLHRoaXMubGVuPTAsdGhpc30sZC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGF0ZXM/KHRoaXMuaGVhZD10aGlzLnN0YXRlcy5oZWFkLHRoaXMudGFpbD10aGlzLnN0YXRlcy50YWlsLHRoaXMubGVuPXRoaXMuc3RhdGVzLmxlbix0aGlzLnN0YXRlcz10aGlzLnN0YXRlcy5uZXh0KToodGhpcy5oZWFkPXRoaXMudGFpbD1uZXcgYyhsLDAsMCksdGhpcy5sZW49MCksdGhpc30sZC5wcm90b3R5cGUubGRlbGltPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oZWFkLHQ9dGhpcy50YWlsLG49dGhpcy5sZW47cmV0dXJuIHRoaXMucmVzZXQoKS51aW50MzIobiksbiYmKHRoaXMudGFpbC5uZXh0PWUubmV4dCx0aGlzLnRhaWw9dCx0aGlzLmxlbis9biksdGhpc30sZC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuaGVhZC5uZXh0LHQ9dGhpcy5jb25zdHJ1Y3Rvci5hbGxvYyh0aGlzLmxlbiksbj0wO2U7KWUuZm4oZS52YWwsdCxuKSxuKz1lLmxlbixlPWUubmV4dDtyZXR1cm4gdH0sZC5fY29uZmlndXJlPWZ1bmN0aW9uKGUpe3I9ZSxkLmNyZWF0ZT1mKCksci5fY29uZmlndXJlKCl9fSwyODA3ODooZSx0LG4pPT57ZS5leHBvcnRzPW87dmFyIHI9big5NjI2Mik7KG8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoci5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1vO3ZhciBpPW4oODEyNzYpO2Z1bmN0aW9uIG8oKXtyLmNhbGwodGhpcyl9ZnVuY3Rpb24gYShlLHQsbil7ZS5sZW5ndGg8NDA/aS51dGY4LndyaXRlKGUsdCxuKTp0LnV0ZjhXcml0ZT90LnV0ZjhXcml0ZShlLG4pOnQud3JpdGUoZSxuKX1vLl9jb25maWd1cmU9ZnVuY3Rpb24oKXtvLmFsbG9jPWkuX0J1ZmZlcl9hbGxvY1Vuc2FmZSxvLndyaXRlQnl0ZXNCdWZmZXI9aS5CdWZmZXImJmkuQnVmZmVyLnByb3RvdHlwZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJlwic2V0XCI9PT1pLkJ1ZmZlci5wcm90b3R5cGUuc2V0Lm5hbWU/ZnVuY3Rpb24oZSx0LG4pe3Quc2V0KGUsbil9OmZ1bmN0aW9uKGUsdCxuKXtpZihlLmNvcHkpZS5jb3B5KHQsbiwwLGUubGVuZ3RoKTtlbHNlIGZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KXRbbisrXT1lW3IrK119fSxvLnByb3RvdHlwZS5ieXRlcz1mdW5jdGlvbihlKXtpLmlzU3RyaW5nKGUpJiYoZT1pLl9CdWZmZXJfZnJvbShlLFwiYmFzZTY0XCIpKTt2YXIgdD1lLmxlbmd0aD4+PjA7cmV0dXJuIHRoaXMudWludDMyKHQpLHQmJnRoaXMuX3B1c2goby53cml0ZUJ5dGVzQnVmZmVyLHQsZSksdGhpc30sby5wcm90b3R5cGUuc3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PWkuQnVmZmVyLmJ5dGVMZW5ndGgoZSk7cmV0dXJuIHRoaXMudWludDMyKHQpLHQmJnRoaXMuX3B1c2goYSx0LGUpLHRoaXN9LG8uX2NvbmZpZ3VyZSgpfSwxOTQ4NjooZSx0LG4pPT57dmFyIHI7bi5kKHQse1U6KCk9PnJ9KSxmdW5jdGlvbihlKXtlW2UuT1NfVU5LTk9XTj0wXT1cIk9TX1VOS05PV05cIixlW2UuT1NfQU5EUk9JRD0xXT1cIk9TX0FORFJPSURcIixlW2UuT1NfSU9TPTJdPVwiT1NfSU9TXCIsZVtlLk9TX1dFQj0zXT1cIk9TX1dFQlwifShyfHwocj17fSkpfSw3NDg4ODooZSx0LG4pPT57dmFyIHIsaSxvLGEscyxjO24uZCh0LHtHTDooKT0+c30pLGZ1bmN0aW9uKGUpe2VbZS5TU0w9MF09XCJTU0xcIixlW2UuSU5TRUNVUkU9MV09XCJJTlNFQ1VSRVwiLGVbZS5DUk9ORVQ9Ml09XCJDUk9ORVRcIn0ocnx8KHI9e30pKSxmdW5jdGlvbihlKXtlW2UuTkVUV09SS0ZBSUxVUkU9MF09XCJORVRXT1JLRkFJTFVSRVwiLGVbZS5PVEhFUlRPS0VORVJST1JTPTFdPVwiT1RIRVJUT0tFTkVSUk9SU1wifShpfHwoaT17fSkpLGZ1bmN0aW9uKGUpe2VbZS5JRExFPTBdPVwiSURMRVwiLGVbZS5DT05ORUNUSU5HPTFdPVwiQ09OTkVDVElOR1wiLGVbZS5SRUFEWT0yXT1cIlJFQURZXCIsZVtlLlRSQU5TSUVOVEZBSUxVUkU9M109XCJUUkFOU0lFTlRGQUlMVVJFXCIsZVtlLlVOQVVUSE9SSVpFRD00XT1cIlVOQVVUSE9SSVpFRFwiLGVbZS5TSFVURE9XTj01XT1cIlNIVVRET1dOXCJ9KG98fChvPXt9KSksZnVuY3Rpb24oZSl7ZVtlLk5PTkU9MF09XCJOT05FXCIsZVtlLkxFR0FDWUFSR09TPTFdPVwiTEVHQUNZQVJHT1NcIixlW2UuQVJHT1M9Ml09XCJBUkdPU1wiLGVbZS5CT1RIPTNdPVwiQk9USFwifShhfHwoYT17fSkpLGZ1bmN0aW9uKGUpe2VbZS5PSz0wXT1cIk9LXCIsZVtlLkNBTkNFTExFRD0xXT1cIkNBTkNFTExFRFwiLGVbZS5VTktOT1dOPTJdPVwiVU5LTk9XTlwiLGVbZS5JTlZBTElEX0FSR1VNRU5UPTNdPVwiSU5WQUxJRF9BUkdVTUVOVFwiLGVbZS5ERUFETElORV9FWENFRURFRD00XT1cIkRFQURMSU5FX0VYQ0VFREVEXCIsZVtlLk5PVF9GT1VORD01XT1cIk5PVF9GT1VORFwiLGVbZS5BTFJFQURZX0VYSVNUPTZdPVwiQUxSRUFEWV9FWElTVFwiLGVbZS5QRVJNSVNTSU9OX0RFTklFRD03XT1cIlBFUk1JU1NJT05fREVOSUVEXCIsZVtlLlJFU09VUkNFX0VYVEhBVVNURUQ9OF09XCJSRVNPVVJDRV9FWFRIQVVTVEVEXCIsZVtlLkZBSUxFRF9QUkVDT05ESVRJT049OV09XCJGQUlMRURfUFJFQ09ORElUSU9OXCIsZVtlLkFCT1JURUQ9MTBdPVwiQUJPUlRFRFwiLGVbZS5PVVRfT0ZfUkFOR0U9MTFdPVwiT1VUX09GX1JBTkdFXCIsZVtlLlVOSU1QTEVNRU5URUQ9MTJdPVwiVU5JTVBMRU1FTlRFRFwiLGVbZS5JTlRFUk5BTD0xM109XCJJTlRFUk5BTFwiLGVbZS5VTkFWQUlMQUJMRT0xNF09XCJVTkFWQUlMQUJMRVwiLGVbZS5EQVRBX0xPU1M9MTVdPVwiREFUQV9MT1NTXCIsZVtlLlVOQVVUSEVOVElDQVRFRD0xNl09XCJVTkFVVEhFTlRJQ0FURURcIn0oc3x8KHM9e30pKSxmdW5jdGlvbihlKXtlW2UuVU5TRVQ9MF09XCJVTlNFVFwiLGVbZS5OT05FPTFdPVwiTk9ORVwiLGVbZS5MRUdBQ1k9Ml09XCJMRUdBQ1lcIixlW2UuQVJHT1M9M109XCJBUkdPU1wifShjfHwoYz17fSkpfSw3MjEwODooZSx0LG4pPT57dmFyIHI7bi5kKHQse1o6KCk9Pml9KSxuKDkyMDg3KTtjb25zdCBpPShyPShyPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudCYmZG9jdW1lbnQuY3VycmVudFNjcmlwdD9kb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYzp2b2lkIDApfHxcIi9pbmRleC5qc1wiLGZ1bmN0aW9uKGUpe3ZhciB0LGksbz12b2lkIDAhPT0oZT1lfHx7fSk/ZTp7fTtvLnJlYWR5PW5ldyBQcm9taXNlKChmdW5jdGlvbihlLG4pe3Q9ZSxpPW59KSksT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvLnJlYWR5LFwiX3JlbGVhc2VXYXNtQnVmZmVyXCIpfHwoT2JqZWN0LmRlZmluZVByb3BlcnR5KG8ucmVhZHksXCJfcmVsZWFzZVdhc21CdWZmZXJcIix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe1RlKFwiWW91IGFyZSBnZXR0aW5nIF9yZWxlYXNlV2FzbUJ1ZmZlciBvbiB0aGUgUHJvbWlzZSBvYmplY3QsIGluc3RlYWQgb2YgdGhlIGluc3RhbmNlLiBVc2UgLnRoZW4oKSB0byBnZXQgY2FsbGVkIGJhY2sgd2l0aCB0aGUgaW5zdGFuY2UsIHNlZSB0aGUgTU9EVUxBUklaRSBkb2NzIGluIHNyYy9zZXR0aW5ncy5qc1wiKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoby5yZWFkeSxcIl9yZWxlYXNlV2FzbUJ1ZmZlclwiLHtjb25maWd1cmFibGU6ITAsc2V0OmZ1bmN0aW9uKCl7VGUoXCJZb3UgYXJlIHNldHRpbmcgX3JlbGVhc2VXYXNtQnVmZmVyIG9uIHRoZSBQcm9taXNlIG9iamVjdCwgaW5zdGVhZCBvZiB0aGUgaW5zdGFuY2UuIFVzZSAudGhlbigpIHRvIGdldCBjYWxsZWQgYmFjayB3aXRoIHRoZSBpbnN0YW5jZSwgc2VlIHRoZSBNT0RVTEFSSVpFIGRvY3MgaW4gc3JjL3NldHRpbmdzLmpzXCIpfX0pKSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG8ucmVhZHksXCJfX19nZXRUeXBlTmFtZVwiKXx8KE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLnJlYWR5LFwiX19fZ2V0VHlwZU5hbWVcIix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe1RlKFwiWW91IGFyZSBnZXR0aW5nIF9fX2dldFR5cGVOYW1lIG9uIHRoZSBQcm9taXNlIG9iamVjdCwgaW5zdGVhZCBvZiB0aGUgaW5zdGFuY2UuIFVzZSAudGhlbigpIHRvIGdldCBjYWxsZWQgYmFjayB3aXRoIHRoZSBpbnN0YW5jZSwgc2VlIHRoZSBNT0RVTEFSSVpFIGRvY3MgaW4gc3JjL3NldHRpbmdzLmpzXCIpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLnJlYWR5LFwiX19fZ2V0VHlwZU5hbWVcIix7Y29uZmlndXJhYmxlOiEwLHNldDpmdW5jdGlvbigpe1RlKFwiWW91IGFyZSBzZXR0aW5nIF9fX2dldFR5cGVOYW1lIG9uIHRoZSBQcm9taXNlIG9iamVjdCwgaW5zdGVhZCBvZiB0aGUgaW5zdGFuY2UuIFVzZSAudGhlbigpIHRvIGdldCBjYWxsZWQgYmFjayB3aXRoIHRoZSBpbnN0YW5jZSwgc2VlIHRoZSBNT0RVTEFSSVpFIGRvY3MgaW4gc3JjL3NldHRpbmdzLmpzXCIpfX0pKSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG8ucmVhZHksXCJfX19lbWJpbmRfcmVnaXN0ZXJfbmF0aXZlX2FuZF9idWlsdGluX3R5cGVzXCIpfHwoT2JqZWN0LmRlZmluZVByb3BlcnR5KG8ucmVhZHksXCJfX19lbWJpbmRfcmVnaXN0ZXJfbmF0aXZlX2FuZF9idWlsdGluX3R5cGVzXCIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtUZShcIllvdSBhcmUgZ2V0dGluZyBfX19lbWJpbmRfcmVnaXN0ZXJfbmF0aXZlX2FuZF9idWlsdGluX3R5cGVzIG9uIHRoZSBQcm9taXNlIG9iamVjdCwgaW5zdGVhZCBvZiB0aGUgaW5zdGFuY2UuIFVzZSAudGhlbigpIHRvIGdldCBjYWxsZWQgYmFjayB3aXRoIHRoZSBpbnN0YW5jZSwgc2VlIHRoZSBNT0RVTEFSSVpFIGRvY3MgaW4gc3JjL3NldHRpbmdzLmpzXCIpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLnJlYWR5LFwiX19fZW1iaW5kX3JlZ2lzdGVyX25hdGl2ZV9hbmRfYnVpbHRpbl90eXBlc1wiLHtjb25maWd1cmFibGU6ITAsc2V0OmZ1bmN0aW9uKCl7VGUoXCJZb3UgYXJlIHNldHRpbmcgX19fZW1iaW5kX3JlZ2lzdGVyX25hdGl2ZV9hbmRfYnVpbHRpbl90eXBlcyBvbiB0aGUgUHJvbWlzZSBvYmplY3QsIGluc3RlYWQgb2YgdGhlIGluc3RhbmNlLiBVc2UgLnRoZW4oKSB0byBnZXQgY2FsbGVkIGJhY2sgd2l0aCB0aGUgaW5zdGFuY2UsIHNlZSB0aGUgTU9EVUxBUklaRSBkb2NzIGluIHNyYy9zZXR0aW5ncy5qc1wiKX19KSksT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvLnJlYWR5LFwiX19fc3RkaW9fZXhpdFwiKXx8KE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLnJlYWR5LFwiX19fc3RkaW9fZXhpdFwiLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7VGUoXCJZb3UgYXJlIGdldHRpbmcgX19fc3RkaW9fZXhpdCBvbiB0aGUgUHJvbWlzZSBvYmplY3QsIGluc3RlYWQgb2YgdGhlIGluc3RhbmNlLiBVc2UgLnRoZW4oKSB0byBnZXQgY2FsbGVkIGJhY2sgd2l0aCB0aGUgaW5zdGFuY2UsIHNlZSB0aGUgTU9EVUxBUklaRSBkb2NzIGluIHNyYy9zZXR0aW5ncy5qc1wiKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoby5yZWFkeSxcIl9fX3N0ZGlvX2V4aXRcIix7Y29uZmlndXJhYmxlOiEwLHNldDpmdW5jdGlvbigpe1RlKFwiWW91IGFyZSBzZXR0aW5nIF9fX3N0ZGlvX2V4aXQgb24gdGhlIFByb21pc2Ugb2JqZWN0LCBpbnN0ZWFkIG9mIHRoZSBpbnN0YW5jZS4gVXNlIC50aGVuKCkgdG8gZ2V0IGNhbGxlZCBiYWNrIHdpdGggdGhlIGluc3RhbmNlLCBzZWUgdGhlIE1PRFVMQVJJWkUgZG9jcyBpbiBzcmMvc2V0dGluZ3MuanNcIil9fSkpLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioby5yZWFkeSxcIm9uUnVudGltZUluaXRpYWxpemVkXCIpfHwoT2JqZWN0LmRlZmluZVByb3BlcnR5KG8ucmVhZHksXCJvblJ1bnRpbWVJbml0aWFsaXplZFwiLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7VGUoXCJZb3UgYXJlIGdldHRpbmcgb25SdW50aW1lSW5pdGlhbGl6ZWQgb24gdGhlIFByb21pc2Ugb2JqZWN0LCBpbnN0ZWFkIG9mIHRoZSBpbnN0YW5jZS4gVXNlIC50aGVuKCkgdG8gZ2V0IGNhbGxlZCBiYWNrIHdpdGggdGhlIGluc3RhbmNlLCBzZWUgdGhlIE1PRFVMQVJJWkUgZG9jcyBpbiBzcmMvc2V0dGluZ3MuanNcIil9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG8ucmVhZHksXCJvblJ1bnRpbWVJbml0aWFsaXplZFwiLHtjb25maWd1cmFibGU6ITAsc2V0OmZ1bmN0aW9uKCl7VGUoXCJZb3UgYXJlIHNldHRpbmcgb25SdW50aW1lSW5pdGlhbGl6ZWQgb24gdGhlIFByb21pc2Ugb2JqZWN0LCBpbnN0ZWFkIG9mIHRoZSBpbnN0YW5jZS4gVXNlIC50aGVuKCkgdG8gZ2V0IGNhbGxlZCBiYWNrIHdpdGggdGhlIGluc3RhbmNlLCBzZWUgdGhlIE1PRFVMQVJJWkUgZG9jcyBpbiBzcmMvc2V0dGluZ3MuanNcIil9fSkpO3ZhciBhPU9iamVjdC5hc3NpZ24oe30sbykscz1bXSxjPVwiLi90aGlzLnByb2dyYW1cIixsPVwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3csdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBpbXBvcnRTY3JpcHRzLGQ9XCJvYmplY3RcIj09dHlwZW9mIHByb2Nlc3MmJlwib2JqZWN0XCI9PXR5cGVvZiBwcm9jZXNzLnZlcnNpb25zJiZcInN0cmluZ1wiPT10eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlLGY9IWwmJiFkJiYhdTtpZihvLkVOVklST05NRU5UKXRocm93IG5ldyBFcnJvcihcIk1vZHVsZS5FTlZJUk9OTUVOVCBoYXMgYmVlbiBkZXByZWNhdGVkLiBUbyBmb3JjZSB0aGUgZW52aXJvbm1lbnQsIHVzZSB0aGUgRU5WSVJPTk1FTlQgY29tcGlsZS10aW1lIG9wdGlvbiAoZm9yIGV4YW1wbGUsIC1zRU5WSVJPTk1FTlQ9d2ViIG9yIC1zRU5WSVJPTk1FTlQ9bm9kZSlcIik7dmFyIHAsbSxoLHYsZyx5LEU9XCJcIjtpZihkKXtpZihcIm9iamVjdFwiIT10eXBlb2YgcHJvY2Vzcyl0aHJvdyBuZXcgRXJyb3IoXCJub3QgY29tcGlsZWQgZm9yIHRoaXMgZW52aXJvbm1lbnQgKGRpZCB5b3UgYnVpbGQgdG8gSFRNTCBhbmQgdHJ5IHRvIHJ1biBpdCBub3Qgb24gdGhlIHdlYiwgb3Igc2V0IEVOVklST05NRU5UIHRvIHNvbWV0aGluZyAtIGxpa2Ugbm9kZSAtIGFuZCBydW4gaXQgc29tZXBsYWNlIGVsc2UgLSBsaWtlIG9uIHRoZSB3ZWI/KVwiKTtFPXU/bigyNjcyOCkuZGlybmFtZShFKStcIi9cIjpcIi8vXCIseT0oKT0+e2d8fCh2PW4oODM5MTgpLGc9bigyNjcyOCkpfSxwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHkoKSxlPWcubm9ybWFsaXplKGUpLHYucmVhZEZpbGVTeW5jKGUsdD92b2lkIDA6XCJ1dGY4XCIpfSxoPWU9Pnt2YXIgdD1wKGUsITApO3JldHVybiB0LmJ1ZmZlcnx8KHQ9bmV3IFVpbnQ4QXJyYXkodCkpLFAodC5idWZmZXIpLHR9LG09KGUsdCxuKT0+e3koKSxlPWcubm9ybWFsaXplKGUpLHYucmVhZEZpbGUoZSwoZnVuY3Rpb24oZSxyKXtlP24oZSk6dChyLmJ1ZmZlcil9KSl9LHByb2Nlc3MuYXJndi5sZW5ndGg+MSYmKGM9cHJvY2Vzcy5hcmd2WzFdLnJlcGxhY2UoL1xcXFwvZyxcIi9cIikpLHM9cHJvY2Vzcy5hcmd2LnNsaWNlKDIpLHByb2Nlc3Mub24oXCJ1bmNhdWdodEV4Y2VwdGlvblwiLChmdW5jdGlvbihlKXtpZighKGUgaW5zdGFuY2VvZiBNbikpdGhyb3cgZX0pKSxwcm9jZXNzLm9uKFwidW5oYW5kbGVkUmVqZWN0aW9uXCIsKGZ1bmN0aW9uKGUpe3Rocm93IGV9KSksby5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuXCJbRW1zY3JpcHRlbiBNb2R1bGUgb2JqZWN0XVwifX1lbHNlIGlmKGYpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBwcm9jZXNzfHxcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93fHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBpbXBvcnRTY3JpcHRzKXRocm93IG5ldyBFcnJvcihcIm5vdCBjb21waWxlZCBmb3IgdGhpcyBlbnZpcm9ubWVudCAoZGlkIHlvdSBidWlsZCB0byBIVE1MIGFuZCB0cnkgdG8gcnVuIGl0IG5vdCBvbiB0aGUgd2ViLCBvciBzZXQgRU5WSVJPTk1FTlQgdG8gc29tZXRoaW5nIC0gbGlrZSBub2RlIC0gYW5kIHJ1biBpdCBzb21lcGxhY2UgZWxzZSAtIGxpa2Ugb24gdGhlIHdlYj8pXCIpO1widW5kZWZpbmVkXCIhPXR5cGVvZiByZWFkJiYocD1mdW5jdGlvbihlKXtyZXR1cm4gcmVhZChlKX0pLGg9ZnVuY3Rpb24oZSl7bGV0IHQ7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgcmVhZGJ1ZmZlcj9uZXcgVWludDhBcnJheShyZWFkYnVmZmVyKGUpKToodD1yZWFkKGUsXCJiaW5hcnlcIiksUChcIm9iamVjdFwiPT10eXBlb2YgdCksdCl9LG09ZnVuY3Rpb24oZSx0LG4pe3NldFRpbWVvdXQoKCgpPT50KGgoZSkpKSwwKX0sXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNjcmlwdEFyZ3M/cz1zY3JpcHRBcmdzOnZvaWQgMCE9PWFyZ3VtZW50cyYmKHM9YXJndW1lbnRzKSxcInVuZGVmaW5lZFwiIT10eXBlb2YgcHJpbnQmJihcInVuZGVmaW5lZFwiPT10eXBlb2YgY29uc29sZSYmKGNvbnNvbGU9e30pLGNvbnNvbGUubG9nPXByaW50LGNvbnNvbGUud2Fybj1jb25zb2xlLmVycm9yPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBwcmludEVycj9wcmludEVycjpwcmludCl9ZWxzZXtpZighbCYmIXUpdGhyb3cgbmV3IEVycm9yKFwiZW52aXJvbm1lbnQgZGV0ZWN0aW9uIGVycm9yXCIpO2lmKHU/RT1zZWxmLmxvY2F0aW9uLmhyZWY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudC5jdXJyZW50U2NyaXB0JiYoRT1kb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyksciYmKEU9ciksRT0wIT09RS5pbmRleE9mKFwiYmxvYjpcIik/RS5zdWJzdHIoMCxFLnJlcGxhY2UoL1s/I10uKi8sXCJcIikubGFzdEluZGV4T2YoXCIvXCIpKzEpOlwiXCIsXCJvYmplY3RcIiE9dHlwZW9mIHdpbmRvdyYmXCJmdW5jdGlvblwiIT10eXBlb2YgaW1wb3J0U2NyaXB0cyl0aHJvdyBuZXcgRXJyb3IoXCJub3QgY29tcGlsZWQgZm9yIHRoaXMgZW52aXJvbm1lbnQgKGRpZCB5b3UgYnVpbGQgdG8gSFRNTCBhbmQgdHJ5IHRvIHJ1biBpdCBub3Qgb24gdGhlIHdlYiwgb3Igc2V0IEVOVklST05NRU5UIHRvIHNvbWV0aGluZyAtIGxpa2Ugbm9kZSAtIGFuZCBydW4gaXQgc29tZXBsYWNlIGVsc2UgLSBsaWtlIG9uIHRoZSB3ZWI/KVwiKTtwPWU9Pnt2YXIgdD1uZXcgWE1MSHR0cFJlcXVlc3Q7cmV0dXJuIHQub3BlbihcIkdFVFwiLGUsITEpLHQuc2VuZChudWxsKSx0LnJlc3BvbnNlVGV4dH0sdSYmKGg9ZT0+e3ZhciB0PW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gdC5vcGVuKFwiR0VUXCIsZSwhMSksdC5yZXNwb25zZVR5cGU9XCJhcnJheWJ1ZmZlclwiLHQuc2VuZChudWxsKSxuZXcgVWludDhBcnJheSh0LnJlc3BvbnNlKX0pLG09KGUsdCxuKT0+e3ZhciByPW5ldyBYTUxIdHRwUmVxdWVzdDtyLm9wZW4oXCJHRVRcIixlLCEwKSxyLnJlc3BvbnNlVHlwZT1cImFycmF5YnVmZmVyXCIsci5vbmxvYWQ9KCk9PnsyMDA9PXIuc3RhdHVzfHwwPT1yLnN0YXR1cyYmci5yZXNwb25zZT90KHIucmVzcG9uc2UpOm4oKX0sci5vbmVycm9yPW4sci5zZW5kKG51bGwpfX12YXIgXyxJPW8ucHJpbnR8fGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksUz1vLnByaW50RXJyfHxjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTtmdW5jdGlvbiBiKGUpe2Iuc2hvd258fChiLnNob3duPXt9KSxiLnNob3duW2VdfHwoYi5zaG93bltlXT0xLFMoZSkpfWZ1bmN0aW9uIFQoZSx0KXtPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG8sZSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLGUse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtUZShcIk1vZHVsZS5cIitlK1wiIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggcGxhaW4gXCIrdCtcIiAodGhlIGluaXRpYWwgdmFsdWUgY2FuIGJlIHByb3ZpZGVkIG9uIE1vZHVsZSwgYnV0IGFmdGVyIHN0YXJ0dXAgdGhlIHZhbHVlIGlzIG9ubHkgbG9va2VkIGZvciBvbiBhIGxvY2FsIHZhcmlhYmxlIG9mIHRoYXQgbmFtZSlcIil9fSl9ZnVuY3Rpb24gQyhlLHQpe3ZhciBuPVwiJ1wiK2UrXCInIHdhcyBub3QgZXhwb3J0ZWQuIGFkZCBpdCB0byBFWFBPUlRFRF9SVU5USU1FX01FVEhPRFMgKHNlZSB0aGUgRkFRKVwiO3JldHVybiB0JiYobis9XCIuIEFsdGVybmF0aXZlbHksIGZvcmNpbmcgZmlsZXN5c3RlbSBzdXBwb3J0ICgtc0ZPUkNFX0ZJTEVTWVNURU0pIGNhbiBleHBvcnQgdGhpcyBmb3IgeW91XCIpLG59ZnVuY3Rpb24gQShlLHQpe09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobyxlKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KG8sZSx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe1RlKEMoZSx0KSl9fSl9ZnVuY3Rpb24gUihlLHQpe09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobyxlKXx8KG9bZV09KCk9PlRlKEMoZSx0KSkpfU9iamVjdC5hc3NpZ24obyxhKSxhPW51bGwsXz1cImZldGNoU2V0dGluZ3NcIixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG8sXykmJlRlKFwiYE1vZHVsZS5cIitfK1wiYCB3YXMgc3VwcGxpZWQgYnV0IGBcIitfK1wiYCBub3QgaW5jbHVkZWQgaW4gSU5DT01JTkdfTU9EVUxFX0pTX0FQSVwiKSxvLmFyZ3VtZW50cyYmKHM9by5hcmd1bWVudHMpLFQoXCJhcmd1bWVudHNcIixcImFyZ3VtZW50c19cIiksby50aGlzUHJvZ3JhbSYmKGM9by50aGlzUHJvZ3JhbSksVChcInRoaXNQcm9ncmFtXCIsXCJ0aGlzUHJvZ3JhbVwiKSxvLnF1aXQmJm8ucXVpdCxUKFwicXVpdFwiLFwicXVpdF9cIiksUCh2b2lkIDA9PT1vLm1lbW9yeUluaXRpYWxpemVyUHJlZml4VVJMLFwiTW9kdWxlLm1lbW9yeUluaXRpYWxpemVyUHJlZml4VVJMIG9wdGlvbiB3YXMgcmVtb3ZlZCwgdXNlIE1vZHVsZS5sb2NhdGVGaWxlIGluc3RlYWRcIiksUCh2b2lkIDA9PT1vLnB0aHJlYWRNYWluUHJlZml4VVJMLFwiTW9kdWxlLnB0aHJlYWRNYWluUHJlZml4VVJMIG9wdGlvbiB3YXMgcmVtb3ZlZCwgdXNlIE1vZHVsZS5sb2NhdGVGaWxlIGluc3RlYWRcIiksUCh2b2lkIDA9PT1vLmNkSW5pdGlhbGl6ZXJQcmVmaXhVUkwsXCJNb2R1bGUuY2RJbml0aWFsaXplclByZWZpeFVSTCBvcHRpb24gd2FzIHJlbW92ZWQsIHVzZSBNb2R1bGUubG9jYXRlRmlsZSBpbnN0ZWFkXCIpLFAodm9pZCAwPT09by5maWxlUGFja2FnZVByZWZpeFVSTCxcIk1vZHVsZS5maWxlUGFja2FnZVByZWZpeFVSTCBvcHRpb24gd2FzIHJlbW92ZWQsIHVzZSBNb2R1bGUubG9jYXRlRmlsZSBpbnN0ZWFkXCIpLFAodm9pZCAwPT09by5yZWFkLFwiTW9kdWxlLnJlYWQgb3B0aW9uIHdhcyByZW1vdmVkIChtb2RpZnkgcmVhZF8gaW4gSlMpXCIpLFAodm9pZCAwPT09by5yZWFkQXN5bmMsXCJNb2R1bGUucmVhZEFzeW5jIG9wdGlvbiB3YXMgcmVtb3ZlZCAobW9kaWZ5IHJlYWRBc3luYyBpbiBKUylcIiksUCh2b2lkIDA9PT1vLnJlYWRCaW5hcnksXCJNb2R1bGUucmVhZEJpbmFyeSBvcHRpb24gd2FzIHJlbW92ZWQgKG1vZGlmeSByZWFkQmluYXJ5IGluIEpTKVwiKSxQKHZvaWQgMD09PW8uc2V0V2luZG93VGl0bGUsXCJNb2R1bGUuc2V0V2luZG93VGl0bGUgb3B0aW9uIHdhcyByZW1vdmVkIChtb2RpZnkgc2V0V2luZG93VGl0bGUgaW4gSlMpXCIpLFAodm9pZCAwPT09by5UT1RBTF9NRU1PUlksXCJNb2R1bGUuVE9UQUxfTUVNT1JZIGhhcyBiZWVuIHJlbmFtZWQgTW9kdWxlLklOSVRJQUxfTUVNT1JZXCIpLFQoXCJyZWFkXCIsXCJyZWFkX1wiKSxUKFwicmVhZEFzeW5jXCIsXCJyZWFkQXN5bmNcIiksVChcInJlYWRCaW5hcnlcIixcInJlYWRCaW5hcnlcIiksVChcInNldFdpbmRvd1RpdGxlXCIsXCJzZXRXaW5kb3dUaXRsZVwiKSxQKCFmLFwic2hlbGwgZW52aXJvbm1lbnQgZGV0ZWN0ZWQgYnV0IG5vdCBlbmFibGVkIGF0IGJ1aWxkIHRpbWUuICBBZGQgJ3NoZWxsJyB0byBgLXNFTlZJUk9OTUVOVGAgdG8gZW5hYmxlLlwiKTt2YXIgayxPLE49MCx3PWU9PntOPWV9O28ud2FzbUJpbmFyeSYmKGs9by53YXNtQmluYXJ5KSxUKFwid2FzbUJpbmFyeVwiLFwid2FzbUJpbmFyeVwiKSxvLm5vRXhpdFJ1bnRpbWUsVChcIm5vRXhpdFJ1bnRpbWVcIixcIm5vRXhpdFJ1bnRpbWVcIiksXCJvYmplY3RcIiE9dHlwZW9mIFdlYkFzc2VtYmx5JiZUZShcIm5vIG5hdGl2ZSB3YXNtIHN1cHBvcnQgZGV0ZWN0ZWRcIik7dmFyIEQ9ITE7ZnVuY3Rpb24gUChlLHQpe2V8fFRlKFwiQXNzZXJ0aW9uIGZhaWxlZFwiKyh0P1wiOiBcIit0OlwiXCIpKX12YXIgTT1cInVuZGVmaW5lZFwiIT10eXBlb2YgVGV4dERlY29kZXI/bmV3IFRleHREZWNvZGVyKFwidXRmOFwiKTp2b2lkIDA7ZnVuY3Rpb24gTChlLHQsbil7Zm9yKHZhciByPXQrbixpPXQ7ZVtpXSYmIShpPj1yKTspKytpO2lmKGktdD4xNiYmZS5idWZmZXImJk0pcmV0dXJuIE0uZGVjb2RlKGUuc3ViYXJyYXkodCxpKSk7Zm9yKHZhciBvPVwiXCI7dDxpOyl7dmFyIGE9ZVt0KytdO2lmKDEyOCZhKXt2YXIgcz02MyZlW3QrK107aWYoMTkyIT0oMjI0JmEpKXt2YXIgYz02MyZlW3QrK107aWYoMjI0PT0oMjQwJmEpP2E9KDE1JmEpPDwxMnxzPDw2fGM6KDI0MCE9KDI0OCZhKSYmYihcIkludmFsaWQgVVRGLTggbGVhZGluZyBieXRlIDB4XCIrYS50b1N0cmluZygxNikrXCIgZW5jb3VudGVyZWQgd2hlbiBkZXNlcmlhbGl6aW5nIGEgVVRGLTggc3RyaW5nIGluIHdhc20gbWVtb3J5IHRvIGEgSlMgc3RyaW5nIVwiKSxhPSg3JmEpPDwxOHxzPDwxMnxjPDw2fDYzJmVbdCsrXSksYTw2NTUzNilvKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGEpO2Vsc2V7dmFyIGw9YS02NTUzNjtvKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fGw+PjEwLDU2MzIwfDEwMjMmbCl9fWVsc2Ugbys9U3RyaW5nLmZyb21DaGFyQ29kZSgoMzEmYSk8PDZ8cyl9ZWxzZSBvKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGEpfXJldHVybiBvfWZ1bmN0aW9uIFUoZSx0KXtyZXR1cm4gZT9MKEgsZSx0KTpcIlwifWZ1bmN0aW9uIHgoZSx0LG4scil7aWYoIShyPjApKXJldHVybiAwO2Zvcih2YXIgaT1uLG89bityLTEsYT0wO2E8ZS5sZW5ndGg7KythKXt2YXIgcz1lLmNoYXJDb2RlQXQoYSk7aWYocz49NTUyOTYmJnM8PTU3MzQzJiYocz02NTUzNisoKDEwMjMmcyk8PDEwKXwxMDIzJmUuY2hhckNvZGVBdCgrK2EpKSxzPD0xMjcpe2lmKG4+PW8pYnJlYWs7dFtuKytdPXN9ZWxzZSBpZihzPD0yMDQ3KXtpZihuKzE+PW8pYnJlYWs7dFtuKytdPTE5MnxzPj42LHRbbisrXT0xMjh8NjMmc31lbHNlIGlmKHM8PTY1NTM1KXtpZihuKzI+PW8pYnJlYWs7dFtuKytdPTIyNHxzPj4xMix0W24rK109MTI4fHM+PjYmNjMsdFtuKytdPTEyOHw2MyZzfWVsc2V7aWYobiszPj1vKWJyZWFrO3M+MTExNDExMSYmYihcIkludmFsaWQgVW5pY29kZSBjb2RlIHBvaW50IDB4XCIrcy50b1N0cmluZygxNikrXCIgZW5jb3VudGVyZWQgd2hlbiBzZXJpYWxpemluZyBhIEpTIHN0cmluZyB0byBhIFVURi04IHN0cmluZyBpbiB3YXNtIG1lbW9yeSEgKFZhbGlkIHVuaWNvZGUgY29kZSBwb2ludHMgc2hvdWxkIGJlIGluIHJhbmdlIDAtMHgxMEZGRkYpLlwiKSx0W24rK109MjQwfHM+PjE4LHRbbisrXT0xMjh8cz4+MTImNjMsdFtuKytdPTEyOHxzPj42JjYzLHRbbisrXT0xMjh8NjMmc319cmV0dXJuIHRbbl09MCxuLWl9ZnVuY3Rpb24gRihlLHQsbil7cmV0dXJuIFAoXCJudW1iZXJcIj09dHlwZW9mIG4sXCJzdHJpbmdUb1VURjgoc3RyLCBvdXRQdHIsIG1heEJ5dGVzVG9Xcml0ZSkgaXMgbWlzc2luZyB0aGUgdGhpcmQgcGFyYW1ldGVyIHRoYXQgc3BlY2lmaWVzIHRoZSBsZW5ndGggb2YgdGhlIG91dHB1dCBidWZmZXIhXCIpLHgoZSxILHQsbil9ZnVuY3Rpb24gQihlKXtmb3IodmFyIHQ9MCxuPTA7bjxlLmxlbmd0aDsrK24pe3ZhciByPWUuY2hhckNvZGVBdChuKTtyPj01NTI5NiYmcjw9NTczNDMmJihyPTY1NTM2KygoMTAyMyZyKTw8MTApfDEwMjMmZS5jaGFyQ29kZUF0KCsrbikpLHI8PTEyNz8rK3Q6dCs9cjw9MjA0Nz8yOnI8PTY1NTM1PzM6NH1yZXR1cm4gdH12YXIgVixHLEgsVyxqLFoseixLLFkscSxYLFE9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFRleHREZWNvZGVyP25ldyBUZXh0RGVjb2RlcihcInV0Zi0xNmxlXCIpOnZvaWQgMDtmdW5jdGlvbiBKKGUsdCl7UChlJTI9PTAsXCJQb2ludGVyIHBhc3NlZCB0byBVVEYxNlRvU3RyaW5nIG11c3QgYmUgYWxpZ25lZCB0byB0d28gYnl0ZXMhXCIpO2Zvcih2YXIgbj1lLHI9bj4+MSxpPXIrdC8yOyEocj49aSkmJmpbcl07KSsrcjtpZigobj1yPDwxKS1lPjMyJiZRKXJldHVybiBRLmRlY29kZShILnN1YmFycmF5KGUsbikpO2Zvcih2YXIgbz1cIlwiLGE9MDshKGE+PXQvMik7KythKXt2YXIgcz1XW2UrMiphPj4xXTtpZigwPT1zKWJyZWFrO28rPVN0cmluZy5mcm9tQ2hhckNvZGUocyl9cmV0dXJuIG99ZnVuY3Rpb24gJChlLHQsbil7aWYoUCh0JTI9PTAsXCJQb2ludGVyIHBhc3NlZCB0byBzdHJpbmdUb1VURjE2IG11c3QgYmUgYWxpZ25lZCB0byB0d28gYnl0ZXMhXCIpLFAoXCJudW1iZXJcIj09dHlwZW9mIG4sXCJzdHJpbmdUb1VURjE2KHN0ciwgb3V0UHRyLCBtYXhCeXRlc1RvV3JpdGUpIGlzIG1pc3NpbmcgdGhlIHRoaXJkIHBhcmFtZXRlciB0aGF0IHNwZWNpZmllcyB0aGUgbGVuZ3RoIG9mIHRoZSBvdXRwdXQgYnVmZmVyIVwiKSx2b2lkIDA9PT1uJiYobj0yMTQ3NDgzNjQ3KSxuPDIpcmV0dXJuIDA7Zm9yKHZhciByPXQsaT0obi09Mik8MiplLmxlbmd0aD9uLzI6ZS5sZW5ndGgsbz0wO288aTsrK28pe3ZhciBhPWUuY2hhckNvZGVBdChvKTtXW3Q+PjFdPWEsdCs9Mn1yZXR1cm4gV1t0Pj4xXT0wLHQtcn1mdW5jdGlvbiBlZShlKXtyZXR1cm4gMiplLmxlbmd0aH1mdW5jdGlvbiB0ZShlLHQpe1AoZSU0PT0wLFwiUG9pbnRlciBwYXNzZWQgdG8gVVRGMzJUb1N0cmluZyBtdXN0IGJlIGFsaWduZWQgdG8gZm91ciBieXRlcyFcIik7Zm9yKHZhciBuPTAscj1cIlwiOyEobj49dC80KTspe3ZhciBpPVpbZSs0Km4+PjJdO2lmKDA9PWkpYnJlYWs7aWYoKytuLGk+PTY1NTM2KXt2YXIgbz1pLTY1NTM2O3IrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8bz4+MTAsNTYzMjB8MTAyMyZvKX1lbHNlIHIrPVN0cmluZy5mcm9tQ2hhckNvZGUoaSl9cmV0dXJuIHJ9ZnVuY3Rpb24gbmUoZSx0LG4pe2lmKFAodCU0PT0wLFwiUG9pbnRlciBwYXNzZWQgdG8gc3RyaW5nVG9VVEYzMiBtdXN0IGJlIGFsaWduZWQgdG8gZm91ciBieXRlcyFcIiksUChcIm51bWJlclwiPT10eXBlb2YgbixcInN0cmluZ1RvVVRGMzIoc3RyLCBvdXRQdHIsIG1heEJ5dGVzVG9Xcml0ZSkgaXMgbWlzc2luZyB0aGUgdGhpcmQgcGFyYW1ldGVyIHRoYXQgc3BlY2lmaWVzIHRoZSBsZW5ndGggb2YgdGhlIG91dHB1dCBidWZmZXIhXCIpLHZvaWQgMD09PW4mJihuPTIxNDc0ODM2NDcpLG48NClyZXR1cm4gMDtmb3IodmFyIHI9dCxpPXIrbi00LG89MDtvPGUubGVuZ3RoOysrbyl7dmFyIGE9ZS5jaGFyQ29kZUF0KG8pO2lmKGE+PTU1Mjk2JiZhPD01NzM0MyYmKGE9NjU1MzYrKCgxMDIzJmEpPDwxMCl8MTAyMyZlLmNoYXJDb2RlQXQoKytvKSksWlt0Pj4yXT1hLCh0Kz00KSs0PmkpYnJlYWt9cmV0dXJuIFpbdD4+Ml09MCx0LXJ9ZnVuY3Rpb24gcmUoZSl7Zm9yKHZhciB0PTAsbj0wO248ZS5sZW5ndGg7KytuKXt2YXIgcj1lLmNoYXJDb2RlQXQobik7cj49NTUyOTYmJnI8PTU3MzQzJiYrK24sdCs9NH1yZXR1cm4gdH1mdW5jdGlvbiBpZShlKXt2YXIgdD1CKGUpKzEsbj1Jbih0KTtyZXR1cm4gbiYmeChlLEcsbix0KSxufWZ1bmN0aW9uIG9lKGUpe1Y9ZSxvLkhFQVA4PUc9bmV3IEludDhBcnJheShlKSxvLkhFQVAxNj1XPW5ldyBJbnQxNkFycmF5KGUpLG8uSEVBUDMyPVo9bmV3IEludDMyQXJyYXkoZSksby5IRUFQVTg9SD1uZXcgVWludDhBcnJheShlKSxvLkhFQVBVMTY9aj1uZXcgVWludDE2QXJyYXkoZSksby5IRUFQVTMyPXo9bmV3IFVpbnQzMkFycmF5KGUpLG8uSEVBUEYzMj1LPW5ldyBGbG9hdDMyQXJyYXkoZSksby5IRUFQRjY0PVg9bmV3IEZsb2F0NjRBcnJheShlKSxvLkhFQVA2ND1ZPW5ldyBCaWdJbnQ2NEFycmF5KGUpLG8uSEVBUFU2ND1xPW5ldyBCaWdVaW50NjRBcnJheShlKX12YXIgYWU9NTI0Mjg4MDtvLlRPVEFMX1NUQUNLJiZQKGFlPT09by5UT1RBTF9TVEFDSyxcInRoZSBzdGFjayBzaXplIGNhbiBubyBsb25nZXIgYmUgZGV0ZXJtaW5lZCBhdCBydW50aW1lXCIpO3ZhciBzZSxjZT1vLklOSVRJQUxfTUVNT1JZfHwzMzU1NDQzMjtmdW5jdGlvbiBsZSgpe3ZhciBlPU9uKCk7UCgwPT0oMyZlKSksWltlPj4yXT0zNDgyMTIyMyxaW2UrND4+Ml09MjMxMDcyMTAyMix6WzBdPTE2Njg1MDkwMjl9ZnVuY3Rpb24gdWUoKXtpZighRCl7dmFyIGU9T24oKSx0PXpbZT4+Ml0sbj16W2UrND4+Ml07MzQ4MjEyMjM9PXQmJjIzMTA3MjEwMjI9PW58fFRlKFwiU3RhY2sgb3ZlcmZsb3chIFN0YWNrIGNvb2tpZSBoYXMgYmVlbiBvdmVyd3JpdHRlbiwgZXhwZWN0ZWQgaGV4IGR3b3JkcyAweDg5QkFDREZFIGFuZCAweDIxMzU0NjcsIGJ1dCByZWNlaXZlZCAweFwiK24udG9TdHJpbmcoMTYpK1wiIDB4XCIrdC50b1N0cmluZygxNikpLDE2Njg1MDkwMjkhPT16WzBdJiZUZShcIlJ1bnRpbWUgZXJyb3I6IFRoZSBhcHBsaWNhdGlvbiBoYXMgY29ycnVwdGVkIGl0cyBoZWFwIG1lbW9yeSBhcmVhIChhZGRyZXNzIHplcm8pIVwiKX19VChcIklOSVRJQUxfTUVNT1JZXCIsXCJJTklUSUFMX01FTU9SWVwiKSxQKGNlPj1hZSxcIklOSVRJQUxfTUVNT1JZIHNob3VsZCBiZSBsYXJnZXIgdGhhbiBUT1RBTF9TVEFDSywgd2FzIFwiK2NlK1wiISAoVE9UQUxfU1RBQ0s9XCIrYWUrXCIpXCIpLFAoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEludDMyQXJyYXkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBGbG9hdDY0QXJyYXkmJm51bGwhPUludDMyQXJyYXkucHJvdG90eXBlLnN1YmFycmF5JiZudWxsIT1JbnQzMkFycmF5LnByb3RvdHlwZS5zZXQsXCJKUyBlbmdpbmUgZG9lcyBub3QgcHJvdmlkZSBmdWxsIHR5cGVkIGFycmF5IHN1cHBvcnRcIiksUCghby53YXNtTWVtb3J5LFwiVXNlIG9mIGB3YXNtTWVtb3J5YCBkZXRlY3RlZC4gIFVzZSAtc0lNUE9SVEVEX01FTU9SWSB0byBkZWZpbmUgd2FzbU1lbW9yeSBleHRlcm5hbGx5XCIpLFAoMzM1NTQ0MzI9PWNlLFwiRGV0ZWN0ZWQgcnVudGltZSBJTklUSUFMX01FTU9SWSBzZXR0aW5nLiAgVXNlIC1zSU1QT1JURURfTUVNT1JZIHRvIGRlZmluZSB3YXNtTWVtb3J5IGR5bmFtaWNhbGx5XCIpLGZ1bmN0aW9uKCl7dmFyIGU9bmV3IEludDE2QXJyYXkoMSksdD1uZXcgSW50OEFycmF5KGUuYnVmZmVyKTtpZihlWzBdPTI1NDU5LDExNSE9PXRbMF18fDk5IT09dFsxXSl0aHJvd1wiUnVudGltZSBlcnJvcjogZXhwZWN0ZWQgdGhlIHN5c3RlbSB0byBiZSBsaXR0bGUtZW5kaWFuISAoUnVuIHdpdGggLXNTVVBQT1JUX0JJR19FTkRJQU4gdG8gYnlwYXNzKVwifSgpO3ZhciBkZT1bXSxmZT1bXSxwZT1bXSxtZT0hMTtQKE1hdGguaW11bCxcIlRoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IE1hdGguaW11bCgpLCBidWlsZCB3aXRoIExFR0FDWV9WTV9TVVBQT1JUIG9yIFBPTFlGSUxMX09MRF9NQVRIX0ZVTkNUSU9OUyB0byBhZGQgaW4gYSBwb2x5ZmlsbFwiKSxQKE1hdGguZnJvdW5kLFwiVGhpcyBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgTWF0aC5mcm91bmQoKSwgYnVpbGQgd2l0aCBMRUdBQ1lfVk1fU1VQUE9SVCBvciBQT0xZRklMTF9PTERfTUFUSF9GVU5DVElPTlMgdG8gYWRkIGluIGEgcG9seWZpbGxcIiksUChNYXRoLmNsejMyLFwiVGhpcyBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgTWF0aC5jbHozMigpLCBidWlsZCB3aXRoIExFR0FDWV9WTV9TVVBQT1JUIG9yIFBPTFlGSUxMX09MRF9NQVRIX0ZVTkNUSU9OUyB0byBhZGQgaW4gYSBwb2x5ZmlsbFwiKSxQKE1hdGgudHJ1bmMsXCJUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBNYXRoLnRydW5jKCksIGJ1aWxkIHdpdGggTEVHQUNZX1ZNX1NVUFBPUlQgb3IgUE9MWUZJTExfT0xEX01BVEhfRlVOQ1RJT05TIHRvIGFkZCBpbiBhIHBvbHlmaWxsXCIpO3ZhciBoZSx2ZSxnZT0wLHllPW51bGwsRWU9bnVsbCxfZT17fTtmdW5jdGlvbiBJZShlKXtmb3IodmFyIHQ9ZTs7KXtpZighX2VbZV0pcmV0dXJuIGU7ZT10K01hdGgucmFuZG9tKCl9fWZ1bmN0aW9uIFNlKGUpe2dlKyssby5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZvLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMoZ2UpLGU/KFAoIV9lW2VdKSxfZVtlXT0xLG51bGw9PT15ZSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNldEludGVydmFsJiYoeWU9c2V0SW50ZXJ2YWwoKGZ1bmN0aW9uKCl7aWYoRClyZXR1cm4gY2xlYXJJbnRlcnZhbCh5ZSksdm9pZCh5ZT1udWxsKTt2YXIgZT0hMTtmb3IodmFyIHQgaW4gX2UpZXx8KGU9ITAsUyhcInN0aWxsIHdhaXRpbmcgb24gcnVuIGRlcGVuZGVuY2llczpcIikpLFMoXCJkZXBlbmRlbmN5OiBcIit0KTtlJiZTKFwiKGVuZCBvZiBsaXN0KVwiKX0pLDFlNCkpKTpTKFwid2FybmluZzogcnVuIGRlcGVuZGVuY3kgYWRkZWQgd2l0aG91dCBJRFwiKX1mdW5jdGlvbiBiZShlKXtpZihnZS0tLG8ubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmby5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKGdlKSxlPyhQKF9lW2VdKSxkZWxldGUgX2VbZV0pOlMoXCJ3YXJuaW5nOiBydW4gZGVwZW5kZW5jeSByZW1vdmVkIHdpdGhvdXQgSURcIiksMD09Z2UmJihudWxsIT09eWUmJihjbGVhckludGVydmFsKHllKSx5ZT1udWxsKSxFZSkpe3ZhciB0PUVlO0VlPW51bGwsdCgpfX1mdW5jdGlvbiBUZShlKXtvLm9uQWJvcnQmJm8ub25BYm9ydChlKSxTKGU9XCJBYm9ydGVkKFwiK2UrXCIpXCIpLEQ9ITA7dmFyIHQ9bmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvcihlKTt0aHJvdyBpKHQpLHR9ZnVuY3Rpb24gQ2UoZSl7cmV0dXJuIGUuc3RhcnRzV2l0aChcImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCxcIil9ZnVuY3Rpb24gQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLHI9dDtyZXR1cm4gdHx8KHI9by5hc20pLFAobWUsXCJuYXRpdmUgZnVuY3Rpb24gYFwiK24rXCJgIGNhbGxlZCBiZWZvcmUgcnVudGltZSBpbml0aWFsaXphdGlvblwiKSxyW2VdfHxQKHJbZV0sXCJleHBvcnRlZCBuYXRpdmUgZnVuY3Rpb24gYFwiK24rXCJgIG5vdCBmb3VuZFwiKSxyW2VdLmFwcGx5KG51bGwsYXJndW1lbnRzKX19ZnVuY3Rpb24gUmUoZSl7dHJ5e2lmKGU9PWhlJiZrKXJldHVybiBuZXcgVWludDhBcnJheShrKTtpZihoKXJldHVybiBoKGUpO3Rocm93XCJib3RoIGFzeW5jIGFuZCBzeW5jIGZldGNoaW5nIG9mIHRoZSB3YXNtIGZhaWxlZFwifWNhdGNoKGUpe1RlKGUpfX1DZShoZT1cImNjX2JpbmFyeS53YXNtXCIpfHwodmU9aGUsaGU9by5sb2NhdGVGaWxlP28ubG9jYXRlRmlsZSh2ZSxFKTpFK3ZlKTt2YXIga2U9ezgwOTE1NjpmdW5jdGlvbigpe3JldHVybiBHLmxlbmd0aH19O2Z1bmN0aW9uIE9lKGUpe2Zvcig7ZS5sZW5ndGg+MDspe3ZhciB0PWUuc2hpZnQoKTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXt2YXIgbj10LmZ1bmM7XCJudW1iZXJcIj09dHlwZW9mIG4/dm9pZCAwPT09dC5hcmc/TmUobikoKTpOZShuKSh0LmFyZyk6bih2b2lkIDA9PT10LmFyZz9udWxsOnQuYXJnKX1lbHNlIHQobyl9fWZ1bmN0aW9uIE5lKGUpe3JldHVybiBzZS5nZXQoZSl9dmFyIHdlPVtdO2Z1bmN0aW9uIERlKGUpe2UuYWRkX3JlZigpfXZhciBQZT0wO2Z1bmN0aW9uIE1lKGUpe3RoaXMuZXhjUHRyPWUsdGhpcy5wdHI9ZS0yNCx0aGlzLnNldF90eXBlPWZ1bmN0aW9uKGUpe3pbdGhpcy5wdHIrND4+Ml09ZX0sdGhpcy5nZXRfdHlwZT1mdW5jdGlvbigpe3JldHVybiB6W3RoaXMucHRyKzQ+PjJdfSx0aGlzLnNldF9kZXN0cnVjdG9yPWZ1bmN0aW9uKGUpe3pbdGhpcy5wdHIrOD4+Ml09ZX0sdGhpcy5nZXRfZGVzdHJ1Y3Rvcj1mdW5jdGlvbigpe3JldHVybiB6W3RoaXMucHRyKzg+PjJdfSx0aGlzLnNldF9yZWZjb3VudD1mdW5jdGlvbihlKXtaW3RoaXMucHRyPj4yXT1lfSx0aGlzLnNldF9jYXVnaHQ9ZnVuY3Rpb24oZSl7ZT1lPzE6MCxHW3RoaXMucHRyKzEyPj4wXT1lfSx0aGlzLmdldF9jYXVnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9R1t0aGlzLnB0cisxMj4+MF19LHRoaXMuc2V0X3JldGhyb3duPWZ1bmN0aW9uKGUpe2U9ZT8xOjAsR1t0aGlzLnB0cisxMz4+MF09ZX0sdGhpcy5nZXRfcmV0aHJvd249ZnVuY3Rpb24oKXtyZXR1cm4gMCE9R1t0aGlzLnB0cisxMz4+MF19LHRoaXMuaW5pdD1mdW5jdGlvbihlLHQpe3RoaXMuc2V0X2FkanVzdGVkX3B0cigwKSx0aGlzLnNldF90eXBlKGUpLHRoaXMuc2V0X2Rlc3RydWN0b3IodCksdGhpcy5zZXRfcmVmY291bnQoMCksdGhpcy5zZXRfY2F1Z2h0KCExKSx0aGlzLnNldF9yZXRocm93bighMSl9LHRoaXMuYWRkX3JlZj1mdW5jdGlvbigpe3ZhciBlPVpbdGhpcy5wdHI+PjJdO1pbdGhpcy5wdHI+PjJdPWUrMX0sdGhpcy5yZWxlYXNlX3JlZj1mdW5jdGlvbigpe3ZhciBlPVpbdGhpcy5wdHI+PjJdO3JldHVybiBaW3RoaXMucHRyPj4yXT1lLTEsUChlPjApLDE9PT1lfSx0aGlzLnNldF9hZGp1c3RlZF9wdHI9ZnVuY3Rpb24oZSl7elt0aGlzLnB0cisxNj4+Ml09ZX0sdGhpcy5nZXRfYWRqdXN0ZWRfcHRyPWZ1bmN0aW9uKCl7cmV0dXJuIHpbdGhpcy5wdHIrMTY+PjJdfSx0aGlzLmdldF9leGNlcHRpb25fcHRyPWZ1bmN0aW9uKCl7aWYoUG4odGhpcy5nZXRfdHlwZSgpKSlyZXR1cm4gelt0aGlzLmV4Y1B0cj4+Ml07dmFyIGU9dGhpcy5nZXRfYWRqdXN0ZWRfcHRyKCk7cmV0dXJuIDAhPT1lP2U6dGhpcy5leGNQdHJ9fWZ1bmN0aW9uIExlKGUpe3RyeXtyZXR1cm4gU24obmV3IE1lKGUpLnB0cil9Y2F0Y2goZSl7UyhcImV4Y2VwdGlvbiBkdXJpbmcgX19jeGFfZnJlZV9leGNlcHRpb246IFwiK2UpfX1mdW5jdGlvbiBVZShlKXtpZihlLnJlbGVhc2VfcmVmKCkmJiFlLmdldF9yZXRocm93bigpKXt2YXIgdD1lLmdldF9kZXN0cnVjdG9yKCk7dCYmTmUodCkoZS5leGNQdHIpLExlKGUuZXhjUHRyKX19dmFyIHhlPTA7ZnVuY3Rpb24gRmUoKXt2YXIgZT13ZS5wb3AoKTtlfHxUZShcIm5vIGV4Y2VwdGlvbiB0byB0aHJvd1wiKTt2YXIgdD1lLmV4Y1B0cjt0aHJvdyBlLmdldF9yZXRocm93bigpfHwod2UucHVzaChlKSxlLnNldF9yZXRocm93bighMCksZS5zZXRfY2F1Z2h0KCExKSxQZSsrKSx4ZT10LHR9dmFyIEJlPXtpc0FiczplPT5cIi9cIj09PWUuY2hhckF0KDApLHNwbGl0UGF0aDplPT4vXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLy5leGVjKGUpLnNsaWNlKDEpLG5vcm1hbGl6ZUFycmF5OihlLHQpPT57Zm9yKHZhciBuPTAscj1lLmxlbmd0aC0xO3I+PTA7ci0tKXt2YXIgaT1lW3JdO1wiLlwiPT09aT9lLnNwbGljZShyLDEpOlwiLi5cIj09PWk/KGUuc3BsaWNlKHIsMSksbisrKTpuJiYoZS5zcGxpY2UociwxKSxuLS0pfWlmKHQpZm9yKDtuO24tLSllLnVuc2hpZnQoXCIuLlwiKTtyZXR1cm4gZX0sbm9ybWFsaXplOmU9Pnt2YXIgdD1CZS5pc0FicyhlKSxuPVwiL1wiPT09ZS5zdWJzdHIoLTEpO3JldHVybihlPUJlLm5vcm1hbGl6ZUFycmF5KGUuc3BsaXQoXCIvXCIpLmZpbHRlcigoZT0+ISFlKSksIXQpLmpvaW4oXCIvXCIpKXx8dHx8KGU9XCIuXCIpLGUmJm4mJihlKz1cIi9cIiksKHQ/XCIvXCI6XCJcIikrZX0sZGlybmFtZTplPT57dmFyIHQ9QmUuc3BsaXRQYXRoKGUpLG49dFswXSxyPXRbMV07cmV0dXJuIG58fHI/KHImJihyPXIuc3Vic3RyKDAsci5sZW5ndGgtMSkpLG4rcik6XCIuXCJ9LGJhc2VuYW1lOmU9PntpZihcIi9cIj09PWUpcmV0dXJuXCIvXCI7dmFyIHQ9KGU9KGU9QmUubm9ybWFsaXplKGUpKS5yZXBsYWNlKC9cXC8kLyxcIlwiKSkubGFzdEluZGV4T2YoXCIvXCIpO3JldHVybi0xPT09dD9lOmUuc3Vic3RyKHQrMSl9LGpvaW46ZnVuY3Rpb24oKXt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIEJlLm5vcm1hbGl6ZShlLmpvaW4oXCIvXCIpKX0sam9pbjI6KGUsdCk9PkJlLm5vcm1hbGl6ZShlK1wiL1wiK3QpfTtmdW5jdGlvbiBWZSgpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBjcnlwdG8mJlwiZnVuY3Rpb25cIj09dHlwZW9mIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMpe3ZhciBlPW5ldyBVaW50OEFycmF5KDEpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGUpLGVbMF19fWlmKGQpdHJ5e3ZhciB0PW4oNDA4ODYpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0LnJhbmRvbUJ5dGVzKDEpWzBdfX1jYXRjaChlKXt9cmV0dXJuIGZ1bmN0aW9uKCl7VGUoXCJubyBjcnlwdG9ncmFwaGljIHN1cHBvcnQgZm91bmQgZm9yIHJhbmRvbURldmljZS4gY29uc2lkZXIgcG9seWZpbGxpbmcgaXQgaWYgeW91IHdhbnQgdG8gdXNlIHNvbWV0aGluZyBpbnNlY3VyZSBsaWtlIE1hdGgucmFuZG9tKCksIGUuZy4gcHV0IHRoaXMgaW4gYSAtLXByZS1qczogdmFyIGNyeXB0byA9IHsgZ2V0UmFuZG9tVmFsdWVzOiBmdW5jdGlvbihhcnJheSkgeyBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSBhcnJheVtpXSA9IChNYXRoLnJhbmRvbSgpKjI1Nil8MCB9IH07XCIpfX12YXIgR2U9e3Jlc29sdmU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9XCJcIix0PSExLG49YXJndW1lbnRzLmxlbmd0aC0xO24+PS0xJiYhdDtuLS0pe3ZhciByPW4+PTA/YXJndW1lbnRzW25dOktlLmN3ZCgpO2lmKFwic3RyaW5nXCIhPXR5cGVvZiByKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5nc1wiKTtpZighcilyZXR1cm5cIlwiO2U9citcIi9cIitlLHQ9QmUuaXNBYnMocil9cmV0dXJuKHQ/XCIvXCI6XCJcIikrKGU9QmUubm9ybWFsaXplQXJyYXkoZS5zcGxpdChcIi9cIikuZmlsdGVyKChlPT4hIWUpKSwhdCkuam9pbihcIi9cIikpfHxcIi5cIn0scmVsYXRpdmU6KGUsdCk9PntmdW5jdGlvbiBuKGUpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGgmJlwiXCI9PT1lW3RdO3QrKyk7Zm9yKHZhciBuPWUubGVuZ3RoLTE7bj49MCYmXCJcIj09PWVbbl07bi0tKTtyZXR1cm4gdD5uP1tdOmUuc2xpY2UodCxuLXQrMSl9ZT1HZS5yZXNvbHZlKGUpLnN1YnN0cigxKSx0PUdlLnJlc29sdmUodCkuc3Vic3RyKDEpO2Zvcih2YXIgcj1uKGUuc3BsaXQoXCIvXCIpKSxpPW4odC5zcGxpdChcIi9cIikpLG89TWF0aC5taW4oci5sZW5ndGgsaS5sZW5ndGgpLGE9byxzPTA7czxvO3MrKylpZihyW3NdIT09aVtzXSl7YT1zO2JyZWFrfXZhciBjPVtdO2ZvcihzPWE7czxyLmxlbmd0aDtzKyspYy5wdXNoKFwiLi5cIik7cmV0dXJuKGM9Yy5jb25jYXQoaS5zbGljZShhKSkpLmpvaW4oXCIvXCIpfX0sSGU9e3R0eXM6W10saW5pdDpmdW5jdGlvbigpe30sc2h1dGRvd246ZnVuY3Rpb24oKXt9LHJlZ2lzdGVyOmZ1bmN0aW9uKGUsdCl7SGUudHR5c1tlXT17aW5wdXQ6W10sb3V0cHV0OltdLG9wczp0fSxLZS5yZWdpc3RlckRldmljZShlLEhlLnN0cmVhbV9vcHMpfSxzdHJlYW1fb3BzOntvcGVuOmZ1bmN0aW9uKGUpe3ZhciB0PUhlLnR0eXNbZS5ub2RlLnJkZXZdO2lmKCF0KXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDQzKTtlLnR0eT10LGUuc2Vla2FibGU9ITF9LGNsb3NlOmZ1bmN0aW9uKGUpe2UudHR5Lm9wcy5mbHVzaChlLnR0eSl9LGZsdXNoOmZ1bmN0aW9uKGUpe2UudHR5Lm9wcy5mbHVzaChlLnR0eSl9LHJlYWQ6ZnVuY3Rpb24oZSx0LG4scixpKXtpZighZS50dHl8fCFlLnR0eS5vcHMuZ2V0X2NoYXIpdGhyb3cgbmV3IEtlLkVycm5vRXJyb3IoNjApO2Zvcih2YXIgbz0wLGE9MDthPHI7YSsrKXt2YXIgczt0cnl7cz1lLnR0eS5vcHMuZ2V0X2NoYXIoZS50dHkpfWNhdGNoKGUpe3Rocm93IG5ldyBLZS5FcnJub0Vycm9yKDI5KX1pZih2b2lkIDA9PT1zJiYwPT09byl0aHJvdyBuZXcgS2UuRXJybm9FcnJvcig2KTtpZihudWxsPT1zKWJyZWFrO28rKyx0W24rYV09c31yZXR1cm4gbyYmKGUubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksb30sd3JpdGU6ZnVuY3Rpb24oZSx0LG4scixpKXtpZighZS50dHl8fCFlLnR0eS5vcHMucHV0X2NoYXIpdGhyb3cgbmV3IEtlLkVycm5vRXJyb3IoNjApO3RyeXtmb3IodmFyIG89MDtvPHI7bysrKWUudHR5Lm9wcy5wdXRfY2hhcihlLnR0eSx0W24rb10pfWNhdGNoKGUpe3Rocm93IG5ldyBLZS5FcnJub0Vycm9yKDI5KX1yZXR1cm4gciYmKGUubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksb319LGRlZmF1bHRfdHR5X29wczp7Z2V0X2NoYXI6ZnVuY3Rpb24oZSl7aWYoIWUuaW5wdXQubGVuZ3RoKXt2YXIgdD1udWxsO2lmKGQpe3ZhciBuPUJ1ZmZlci5hbGxvYygyNTYpLHI9MDt0cnl7cj12LnJlYWRTeW5jKHByb2Nlc3Muc3RkaW4uZmQsbiwwLDI1NiwtMSl9Y2F0Y2goZSl7aWYoIWUudG9TdHJpbmcoKS5pbmNsdWRlcyhcIkVPRlwiKSl0aHJvdyBlO3I9MH10PXI+MD9uLnNsaWNlKDAscikudG9TdHJpbmcoXCJ1dGYtOFwiKTpudWxsfWVsc2VcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB3aW5kb3cucHJvbXB0P251bGwhPT0odD13aW5kb3cucHJvbXB0KFwiSW5wdXQ6IFwiKSkmJih0Kz1cIlxcblwiKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiByZWFkbGluZSYmbnVsbCE9PSh0PXJlYWRsaW5lKCkpJiYodCs9XCJcXG5cIik7aWYoIXQpcmV0dXJuIG51bGw7ZS5pbnB1dD15bih0LCEwKX1yZXR1cm4gZS5pbnB1dC5zaGlmdCgpfSxwdXRfY2hhcjpmdW5jdGlvbihlLHQpe251bGw9PT10fHwxMD09PXQ/KEkoTChlLm91dHB1dCwwKSksZS5vdXRwdXQ9W10pOjAhPXQmJmUub3V0cHV0LnB1c2godCl9LGZsdXNoOmZ1bmN0aW9uKGUpe2Uub3V0cHV0JiZlLm91dHB1dC5sZW5ndGg+MCYmKEkoTChlLm91dHB1dCwwKSksZS5vdXRwdXQ9W10pfX0sZGVmYXVsdF90dHkxX29wczp7cHV0X2NoYXI6ZnVuY3Rpb24oZSx0KXtudWxsPT09dHx8MTA9PT10PyhTKEwoZS5vdXRwdXQsMCkpLGUub3V0cHV0PVtdKTowIT10JiZlLm91dHB1dC5wdXNoKHQpfSxmbHVzaDpmdW5jdGlvbihlKXtlLm91dHB1dCYmZS5vdXRwdXQubGVuZ3RoPjAmJihTKEwoZS5vdXRwdXQsMCkpLGUub3V0cHV0PVtdKX19fSxXZT17b3BzX3RhYmxlOm51bGwsbW91bnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIFdlLmNyZWF0ZU5vZGUobnVsbCxcIi9cIiwxNjg5NSwwKX0sY3JlYXRlTm9kZTpmdW5jdGlvbihlLHQsbixyKXtpZihLZS5pc0Jsa2RldihuKXx8S2UuaXNGSUZPKG4pKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDYzKTtXZS5vcHNfdGFibGV8fChXZS5vcHNfdGFibGU9e2Rpcjp7bm9kZTp7Z2V0YXR0cjpXZS5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6V2Uubm9kZV9vcHMuc2V0YXR0cixsb29rdXA6V2Uubm9kZV9vcHMubG9va3VwLG1rbm9kOldlLm5vZGVfb3BzLm1rbm9kLHJlbmFtZTpXZS5ub2RlX29wcy5yZW5hbWUsdW5saW5rOldlLm5vZGVfb3BzLnVubGluayxybWRpcjpXZS5ub2RlX29wcy5ybWRpcixyZWFkZGlyOldlLm5vZGVfb3BzLnJlYWRkaXIsc3ltbGluazpXZS5ub2RlX29wcy5zeW1saW5rfSxzdHJlYW06e2xsc2VlazpXZS5zdHJlYW1fb3BzLmxsc2Vla319LGZpbGU6e25vZGU6e2dldGF0dHI6V2Uubm9kZV9vcHMuZ2V0YXR0cixzZXRhdHRyOldlLm5vZGVfb3BzLnNldGF0dHJ9LHN0cmVhbTp7bGxzZWVrOldlLnN0cmVhbV9vcHMubGxzZWVrLHJlYWQ6V2Uuc3RyZWFtX29wcy5yZWFkLHdyaXRlOldlLnN0cmVhbV9vcHMud3JpdGUsYWxsb2NhdGU6V2Uuc3RyZWFtX29wcy5hbGxvY2F0ZSxtbWFwOldlLnN0cmVhbV9vcHMubW1hcCxtc3luYzpXZS5zdHJlYW1fb3BzLm1zeW5jfX0sbGluazp7bm9kZTp7Z2V0YXR0cjpXZS5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6V2Uubm9kZV9vcHMuc2V0YXR0cixyZWFkbGluazpXZS5ub2RlX29wcy5yZWFkbGlua30sc3RyZWFtOnt9fSxjaHJkZXY6e25vZGU6e2dldGF0dHI6V2Uubm9kZV9vcHMuZ2V0YXR0cixzZXRhdHRyOldlLm5vZGVfb3BzLnNldGF0dHJ9LHN0cmVhbTpLZS5jaHJkZXZfc3RyZWFtX29wc319KTt2YXIgaT1LZS5jcmVhdGVOb2RlKGUsdCxuLHIpO3JldHVybiBLZS5pc0RpcihpLm1vZGUpPyhpLm5vZGVfb3BzPVdlLm9wc190YWJsZS5kaXIubm9kZSxpLnN0cmVhbV9vcHM9V2Uub3BzX3RhYmxlLmRpci5zdHJlYW0saS5jb250ZW50cz17fSk6S2UuaXNGaWxlKGkubW9kZSk/KGkubm9kZV9vcHM9V2Uub3BzX3RhYmxlLmZpbGUubm9kZSxpLnN0cmVhbV9vcHM9V2Uub3BzX3RhYmxlLmZpbGUuc3RyZWFtLGkudXNlZEJ5dGVzPTAsaS5jb250ZW50cz1udWxsKTpLZS5pc0xpbmsoaS5tb2RlKT8oaS5ub2RlX29wcz1XZS5vcHNfdGFibGUubGluay5ub2RlLGkuc3RyZWFtX29wcz1XZS5vcHNfdGFibGUubGluay5zdHJlYW0pOktlLmlzQ2hyZGV2KGkubW9kZSkmJihpLm5vZGVfb3BzPVdlLm9wc190YWJsZS5jaHJkZXYubm9kZSxpLnN0cmVhbV9vcHM9V2Uub3BzX3RhYmxlLmNocmRldi5zdHJlYW0pLGkudGltZXN0YW1wPURhdGUubm93KCksZSYmKGUuY29udGVudHNbdF09aSxlLnRpbWVzdGFtcD1pLnRpbWVzdGFtcCksaX0sZ2V0RmlsZURhdGFBc1R5cGVkQXJyYXk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY29udGVudHM/ZS5jb250ZW50cy5zdWJhcnJheT9lLmNvbnRlbnRzLnN1YmFycmF5KDAsZS51c2VkQnl0ZXMpOm5ldyBVaW50OEFycmF5KGUuY29udGVudHMpOm5ldyBVaW50OEFycmF5KDApfSxleHBhbmRGaWxlU3RvcmFnZTpmdW5jdGlvbihlLHQpe3ZhciBuPWUuY29udGVudHM/ZS5jb250ZW50cy5sZW5ndGg6MDtpZighKG4+PXQpKXt0PU1hdGgubWF4KHQsbioobjwxMDQ4NTc2PzI6MS4xMjUpPj4+MCksMCE9biYmKHQ9TWF0aC5tYXgodCwyNTYpKTt2YXIgcj1lLmNvbnRlbnRzO2UuY29udGVudHM9bmV3IFVpbnQ4QXJyYXkodCksZS51c2VkQnl0ZXM+MCYmZS5jb250ZW50cy5zZXQoci5zdWJhcnJheSgwLGUudXNlZEJ5dGVzKSwwKX19LHJlc2l6ZUZpbGVTdG9yYWdlOmZ1bmN0aW9uKGUsdCl7aWYoZS51c2VkQnl0ZXMhPXQpaWYoMD09dCllLmNvbnRlbnRzPW51bGwsZS51c2VkQnl0ZXM9MDtlbHNle3ZhciBuPWUuY29udGVudHM7ZS5jb250ZW50cz1uZXcgVWludDhBcnJheSh0KSxuJiZlLmNvbnRlbnRzLnNldChuLnN1YmFycmF5KDAsTWF0aC5taW4odCxlLnVzZWRCeXRlcykpKSxlLnVzZWRCeXRlcz10fX0sbm9kZV9vcHM6e2dldGF0dHI6ZnVuY3Rpb24oZSl7dmFyIHQ9e307cmV0dXJuIHQuZGV2PUtlLmlzQ2hyZGV2KGUubW9kZSk/ZS5pZDoxLHQuaW5vPWUuaWQsdC5tb2RlPWUubW9kZSx0Lm5saW5rPTEsdC51aWQ9MCx0LmdpZD0wLHQucmRldj1lLnJkZXYsS2UuaXNEaXIoZS5tb2RlKT90LnNpemU9NDA5NjpLZS5pc0ZpbGUoZS5tb2RlKT90LnNpemU9ZS51c2VkQnl0ZXM6S2UuaXNMaW5rKGUubW9kZSk/dC5zaXplPWUubGluay5sZW5ndGg6dC5zaXplPTAsdC5hdGltZT1uZXcgRGF0ZShlLnRpbWVzdGFtcCksdC5tdGltZT1uZXcgRGF0ZShlLnRpbWVzdGFtcCksdC5jdGltZT1uZXcgRGF0ZShlLnRpbWVzdGFtcCksdC5ibGtzaXplPTQwOTYsdC5ibG9ja3M9TWF0aC5jZWlsKHQuc2l6ZS90LmJsa3NpemUpLHR9LHNldGF0dHI6ZnVuY3Rpb24oZSx0KXt2b2lkIDAhPT10Lm1vZGUmJihlLm1vZGU9dC5tb2RlKSx2b2lkIDAhPT10LnRpbWVzdGFtcCYmKGUudGltZXN0YW1wPXQudGltZXN0YW1wKSx2b2lkIDAhPT10LnNpemUmJldlLnJlc2l6ZUZpbGVTdG9yYWdlKGUsdC5zaXplKX0sbG9va3VwOmZ1bmN0aW9uKGUsdCl7dGhyb3cgS2UuZ2VuZXJpY0Vycm9yc1s0NF19LG1rbm9kOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBXZS5jcmVhdGVOb2RlKGUsdCxuLHIpfSxyZW5hbWU6ZnVuY3Rpb24oZSx0LG4pe2lmKEtlLmlzRGlyKGUubW9kZSkpe3ZhciByO3RyeXtyPUtlLmxvb2t1cE5vZGUodCxuKX1jYXRjaChlKXt9aWYocilmb3IodmFyIGkgaW4gci5jb250ZW50cyl0aHJvdyBuZXcgS2UuRXJybm9FcnJvcig1NSl9ZGVsZXRlIGUucGFyZW50LmNvbnRlbnRzW2UubmFtZV0sZS5wYXJlbnQudGltZXN0YW1wPURhdGUubm93KCksZS5uYW1lPW4sdC5jb250ZW50c1tuXT1lLHQudGltZXN0YW1wPWUucGFyZW50LnRpbWVzdGFtcCxlLnBhcmVudD10fSx1bmxpbms6ZnVuY3Rpb24oZSx0KXtkZWxldGUgZS5jb250ZW50c1t0XSxlLnRpbWVzdGFtcD1EYXRlLm5vdygpfSxybWRpcjpmdW5jdGlvbihlLHQpe3ZhciBuPUtlLmxvb2t1cE5vZGUoZSx0KTtmb3IodmFyIHIgaW4gbi5jb250ZW50cyl0aHJvdyBuZXcgS2UuRXJybm9FcnJvcig1NSk7ZGVsZXRlIGUuY29udGVudHNbdF0sZS50aW1lc3RhbXA9RGF0ZS5ub3coKX0scmVhZGRpcjpmdW5jdGlvbihlKXt2YXIgdD1bXCIuXCIsXCIuLlwiXTtmb3IodmFyIG4gaW4gZS5jb250ZW50cyllLmNvbnRlbnRzLmhhc093blByb3BlcnR5KG4pJiZ0LnB1c2gobik7cmV0dXJuIHR9LHN5bWxpbms6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVdlLmNyZWF0ZU5vZGUoZSx0LDQxNDcxLDApO3JldHVybiByLmxpbms9bixyfSxyZWFkbGluazpmdW5jdGlvbihlKXtpZighS2UuaXNMaW5rKGUubW9kZSkpdGhyb3cgbmV3IEtlLkVycm5vRXJyb3IoMjgpO3JldHVybiBlLmxpbmt9fSxzdHJlYW1fb3BzOntyZWFkOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89ZS5ub2RlLmNvbnRlbnRzO2lmKGk+PWUubm9kZS51c2VkQnl0ZXMpcmV0dXJuIDA7dmFyIGE9TWF0aC5taW4oZS5ub2RlLnVzZWRCeXRlcy1pLHIpO2lmKFAoYT49MCksYT44JiZvLnN1YmFycmF5KXQuc2V0KG8uc3ViYXJyYXkoaSxpK2EpLG4pO2Vsc2UgZm9yKHZhciBzPTA7czxhO3MrKyl0W24rc109b1tpK3NdO3JldHVybiBhfSx3cml0ZTpmdW5jdGlvbihlLHQsbixyLGksbyl7aWYoUCghKHQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpLHQuYnVmZmVyPT09Ry5idWZmZXImJihvPSExKSwhcilyZXR1cm4gMDt2YXIgYT1lLm5vZGU7aWYoYS50aW1lc3RhbXA9RGF0ZS5ub3coKSx0LnN1YmFycmF5JiYoIWEuY29udGVudHN8fGEuY29udGVudHMuc3ViYXJyYXkpKXtpZihvKXJldHVybiBQKDA9PT1pLFwiY2FuT3duIG11c3QgaW1wbHkgbm8gd2VpcmQgcG9zaXRpb24gaW5zaWRlIHRoZSBmaWxlXCIpLGEuY29udGVudHM9dC5zdWJhcnJheShuLG4rciksYS51c2VkQnl0ZXM9cixyO2lmKDA9PT1hLnVzZWRCeXRlcyYmMD09PWkpcmV0dXJuIGEuY29udGVudHM9dC5zbGljZShuLG4rciksYS51c2VkQnl0ZXM9cixyO2lmKGkrcjw9YS51c2VkQnl0ZXMpcmV0dXJuIGEuY29udGVudHMuc2V0KHQuc3ViYXJyYXkobixuK3IpLGkpLHJ9aWYoV2UuZXhwYW5kRmlsZVN0b3JhZ2UoYSxpK3IpLGEuY29udGVudHMuc3ViYXJyYXkmJnQuc3ViYXJyYXkpYS5jb250ZW50cy5zZXQodC5zdWJhcnJheShuLG4rciksaSk7ZWxzZSBmb3IodmFyIHM9MDtzPHI7cysrKWEuY29udGVudHNbaStzXT10W24rc107cmV0dXJuIGEudXNlZEJ5dGVzPU1hdGgubWF4KGEudXNlZEJ5dGVzLGkrcikscn0sbGxzZWVrOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10O2lmKDE9PT1uP3IrPWUucG9zaXRpb246Mj09PW4mJktlLmlzRmlsZShlLm5vZGUubW9kZSkmJihyKz1lLm5vZGUudXNlZEJ5dGVzKSxyPDApdGhyb3cgbmV3IEtlLkVycm5vRXJyb3IoMjgpO3JldHVybiByfSxhbGxvY2F0ZTpmdW5jdGlvbihlLHQsbil7V2UuZXhwYW5kRmlsZVN0b3JhZ2UoZS5ub2RlLHQrbiksZS5ub2RlLnVzZWRCeXRlcz1NYXRoLm1heChlLm5vZGUudXNlZEJ5dGVzLHQrbil9LG1tYXA6ZnVuY3Rpb24oZSx0LG4scixpLG8pe2lmKDAhPT10KXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDI4KTtpZighS2UuaXNGaWxlKGUubm9kZS5tb2RlKSl0aHJvdyBuZXcgS2UuRXJybm9FcnJvcig0Myk7dmFyIGEscyxjPWUubm9kZS5jb250ZW50cztpZigyJm98fGMuYnVmZmVyIT09Vil7aWYoKHI+MHx8cituPGMubGVuZ3RoKSYmKGM9Yy5zdWJhcnJheT9jLnN1YmFycmF5KHIscituKTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChjLHIscituKSkscz0hMCwhKGE9ZnVuY3Rpb24oZSl7ZT1mdW5jdGlvbihlLHQpe3JldHVybiBQKHQsXCJhbGlnbm1lbnQgYXJndW1lbnQgaXMgcmVxdWlyZWRcIiksTWF0aC5jZWlsKGUvdCkqdH0oZSw2NTUzNik7dmFyIHQ9QW4oNjU1MzYsZSk7cmV0dXJuIHQ/KGZ1bmN0aW9uKGUsdCl7SC5maWxsKDAsZSxlK3QpfSh0LGUpLHQpOjB9KG4pKSl0aHJvdyBuZXcgS2UuRXJybm9FcnJvcig0OCk7Ry5zZXQoYyxhKX1lbHNlIHM9ITEsYT1jLmJ5dGVPZmZzZXQ7cmV0dXJue3B0cjphLGFsbG9jYXRlZDpzfX0sbXN5bmM6ZnVuY3Rpb24oZSx0LG4scixpKXtpZighS2UuaXNGaWxlKGUubm9kZS5tb2RlKSl0aHJvdyBuZXcgS2UuRXJybm9FcnJvcig0Myk7cmV0dXJuIDImaXx8V2Uuc3RyZWFtX29wcy53cml0ZShlLHQsMCxyLG4sITEpLDB9fX0samU9e2Riczp7fSxpbmRleGVkREI6KCk9PntpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgaW5kZXhlZERCKXJldHVybiBpbmRleGVkREI7dmFyIGU9bnVsbDtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiYoZT13aW5kb3cuaW5kZXhlZERCfHx3aW5kb3cubW96SW5kZXhlZERCfHx3aW5kb3cud2Via2l0SW5kZXhlZERCfHx3aW5kb3cubXNJbmRleGVkREIpLFAoZSxcIklEQkZTIHVzZWQsIGJ1dCBpbmRleGVkREIgbm90IHN1cHBvcnRlZFwiKSxlfSxEQl9WRVJTSU9OOjIxLERCX1NUT1JFX05BTUU6XCJGSUxFX0RBVEFcIixtb3VudDpmdW5jdGlvbihlKXtyZXR1cm4gV2UubW91bnQuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxzeW5jZnM6KGUsdCxuKT0+e2plLmdldExvY2FsU2V0KGUsKChyLGkpPT57aWYocilyZXR1cm4gbihyKTtqZS5nZXRSZW1vdGVTZXQoZSwoKGUscik9PntpZihlKXJldHVybiBuKGUpO3ZhciBvPXQ/cjppLGE9dD9pOnI7amUucmVjb25jaWxlKG8sYSxuKX0pKX0pKX0scXVpdDooKT0+e09iamVjdC52YWx1ZXMoamUuZGJzKS5mb3JFYWNoKChlPT5lLmNsb3NlKCkpKSxqZS5kYnM9e319LGdldERCOihlLHQpPT57dmFyIG4scj1qZS5kYnNbZV07aWYocilyZXR1cm4gdChudWxsLHIpO3RyeXtuPWplLmluZGV4ZWREQigpLm9wZW4oZSxqZS5EQl9WRVJTSU9OKX1jYXRjaChlKXtyZXR1cm4gdChlKX1pZighbilyZXR1cm4gdChcIlVuYWJsZSB0byBjb25uZWN0IHRvIEluZGV4ZWREQlwiKTtuLm9udXBncmFkZW5lZWRlZD1lPT57dmFyIHQsbj1lLnRhcmdldC5yZXN1bHQscj1lLnRhcmdldC50cmFuc2FjdGlvbjsodD1uLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoamUuREJfU1RPUkVfTkFNRSk/ci5vYmplY3RTdG9yZShqZS5EQl9TVE9SRV9OQU1FKTpuLmNyZWF0ZU9iamVjdFN0b3JlKGplLkRCX1NUT1JFX05BTUUpKS5pbmRleE5hbWVzLmNvbnRhaW5zKFwidGltZXN0YW1wXCIpfHx0LmNyZWF0ZUluZGV4KFwidGltZXN0YW1wXCIsXCJ0aW1lc3RhbXBcIix7dW5pcXVlOiExfSl9LG4ub25zdWNjZXNzPSgpPT57cj1uLnJlc3VsdCxqZS5kYnNbZV09cix0KG51bGwscil9LG4ub25lcnJvcj1lPT57dCh0aGlzLmVycm9yKSxlLnByZXZlbnREZWZhdWx0KCl9fSxnZXRMb2NhbFNldDooZSx0KT0+e3ZhciBuPXt9O2Z1bmN0aW9uIHIoZSl7cmV0dXJuXCIuXCIhPT1lJiZcIi4uXCIhPT1lfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIHQ9PkJlLmpvaW4yKGUsdCl9Zm9yKHZhciBvPUtlLnJlYWRkaXIoZS5tb3VudHBvaW50KS5maWx0ZXIocikubWFwKGkoZS5tb3VudHBvaW50KSk7by5sZW5ndGg7KXt2YXIgYSxzPW8ucG9wKCk7dHJ5e2E9S2Uuc3RhdChzKX1jYXRjaChlKXtyZXR1cm4gdChlKX1LZS5pc0RpcihhLm1vZGUpJiZvLnB1c2guYXBwbHkobyxLZS5yZWFkZGlyKHMpLmZpbHRlcihyKS5tYXAoaShzKSkpLG5bc109e3RpbWVzdGFtcDphLm10aW1lfX1yZXR1cm4gdChudWxsLHt0eXBlOlwibG9jYWxcIixlbnRyaWVzOm59KX0sZ2V0UmVtb3RlU2V0OihlLHQpPT57dmFyIG49e307amUuZ2V0REIoZS5tb3VudHBvaW50LCgoZSxyKT0+e2lmKGUpcmV0dXJuIHQoZSk7dHJ5e3ZhciBpPXIudHJhbnNhY3Rpb24oW2plLkRCX1NUT1JFX05BTUVdLFwicmVhZG9ubHlcIik7aS5vbmVycm9yPWU9Pnt0KHRoaXMuZXJyb3IpLGUucHJldmVudERlZmF1bHQoKX0saS5vYmplY3RTdG9yZShqZS5EQl9TVE9SRV9OQU1FKS5pbmRleChcInRpbWVzdGFtcFwiKS5vcGVuS2V5Q3Vyc29yKCkub25zdWNjZXNzPWU9Pnt2YXIgaT1lLnRhcmdldC5yZXN1bHQ7aWYoIWkpcmV0dXJuIHQobnVsbCx7dHlwZTpcInJlbW90ZVwiLGRiOnIsZW50cmllczpufSk7bltpLnByaW1hcnlLZXldPXt0aW1lc3RhbXA6aS5rZXl9LGkuY29udGludWUoKX19Y2F0Y2goZSl7cmV0dXJuIHQoZSl9fSkpfSxsb2FkTG9jYWxFbnRyeTooZSx0KT0+e3ZhciBuLHI7dHJ5e3I9S2UubG9va3VwUGF0aChlKS5ub2RlLG49S2Uuc3RhdChlKX1jYXRjaChlKXtyZXR1cm4gdChlKX1yZXR1cm4gS2UuaXNEaXIobi5tb2RlKT90KG51bGwse3RpbWVzdGFtcDpuLm10aW1lLG1vZGU6bi5tb2RlfSk6S2UuaXNGaWxlKG4ubW9kZSk/KHIuY29udGVudHM9V2UuZ2V0RmlsZURhdGFBc1R5cGVkQXJyYXkociksdChudWxsLHt0aW1lc3RhbXA6bi5tdGltZSxtb2RlOm4ubW9kZSxjb250ZW50czpyLmNvbnRlbnRzfSkpOnQobmV3IEVycm9yKFwibm9kZSB0eXBlIG5vdCBzdXBwb3J0ZWRcIikpfSxzdG9yZUxvY2FsRW50cnk6KGUsdCxuKT0+e3RyeXtpZihLZS5pc0Rpcih0Lm1vZGUpKUtlLm1rZGlyVHJlZShlLHQubW9kZSk7ZWxzZXtpZighS2UuaXNGaWxlKHQubW9kZSkpcmV0dXJuIG4obmV3IEVycm9yKFwibm9kZSB0eXBlIG5vdCBzdXBwb3J0ZWRcIikpO0tlLndyaXRlRmlsZShlLHQuY29udGVudHMse2Nhbk93bjohMH0pfUtlLmNobW9kKGUsdC5tb2RlKSxLZS51dGltZShlLHQudGltZXN0YW1wLHQudGltZXN0YW1wKX1jYXRjaChlKXtyZXR1cm4gbihlKX1uKG51bGwpfSxyZW1vdmVMb2NhbEVudHJ5OihlLHQpPT57dHJ5e3ZhciBuPUtlLnN0YXQoZSk7S2UuaXNEaXIobi5tb2RlKT9LZS5ybWRpcihlKTpLZS5pc0ZpbGUobi5tb2RlKSYmS2UudW5saW5rKGUpfWNhdGNoKGUpe3JldHVybiB0KGUpfXQobnVsbCl9LGxvYWRSZW1vdGVFbnRyeTooZSx0LG4pPT57dmFyIHI9ZS5nZXQodCk7ci5vbnN1Y2Nlc3M9ZT0+e24obnVsbCxlLnRhcmdldC5yZXN1bHQpfSxyLm9uZXJyb3I9ZT0+e24odGhpcy5lcnJvciksZS5wcmV2ZW50RGVmYXVsdCgpfX0sc3RvcmVSZW1vdGVFbnRyeTooZSx0LG4scik9Pnt0cnl7dmFyIGk9ZS5wdXQobix0KX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfWkub25zdWNjZXNzPSgpPT57cihudWxsKX0saS5vbmVycm9yPWU9PntyKHRoaXMuZXJyb3IpLGUucHJldmVudERlZmF1bHQoKX19LHJlbW92ZVJlbW90ZUVudHJ5OihlLHQsbik9Pnt2YXIgcj1lLmRlbGV0ZSh0KTtyLm9uc3VjY2Vzcz0oKT0+e24obnVsbCl9LHIub25lcnJvcj1lPT57bih0aGlzLmVycm9yKSxlLnByZXZlbnREZWZhdWx0KCl9fSxyZWNvbmNpbGU6KGUsdCxuKT0+e3ZhciByPTAsaT1bXTtPYmplY3Qua2V5cyhlLmVudHJpZXMpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBvPWUuZW50cmllc1tuXSxhPXQuZW50cmllc1tuXTthJiZvLnRpbWVzdGFtcC5nZXRUaW1lKCk9PWEudGltZXN0YW1wLmdldFRpbWUoKXx8KGkucHVzaChuKSxyKyspfSkpO3ZhciBvPVtdO2lmKE9iamVjdC5rZXlzKHQuZW50cmllcykuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZS5lbnRyaWVzW3RdfHwoby5wdXNoKHQpLHIrKyl9KSksIXIpcmV0dXJuIG4obnVsbCk7dmFyIGE9ITEscz0oXCJyZW1vdGVcIj09PWUudHlwZT9lLmRiOnQuZGIpLnRyYW5zYWN0aW9uKFtqZS5EQl9TVE9SRV9OQU1FXSxcInJlYWR3cml0ZVwiKSxjPXMub2JqZWN0U3RvcmUoamUuREJfU1RPUkVfTkFNRSk7ZnVuY3Rpb24gbChlKXtpZihlJiYhYSlyZXR1cm4gYT0hMCxuKGUpfXMub25lcnJvcj1lPT57bCh0aGlzLmVycm9yKSxlLnByZXZlbnREZWZhdWx0KCl9LHMub25jb21wbGV0ZT1lPT57YXx8bihudWxsKX0saS5zb3J0KCkuZm9yRWFjaCgoZT0+e1wibG9jYWxcIj09PXQudHlwZT9qZS5sb2FkUmVtb3RlRW50cnkoYyxlLCgodCxuKT0+e2lmKHQpcmV0dXJuIGwodCk7amUuc3RvcmVMb2NhbEVudHJ5KGUsbixsKX0pKTpqZS5sb2FkTG9jYWxFbnRyeShlLCgodCxuKT0+e2lmKHQpcmV0dXJuIGwodCk7amUuc3RvcmVSZW1vdGVFbnRyeShjLGUsbixsKX0pKX0pKSxvLnNvcnQoKS5yZXZlcnNlKCkuZm9yRWFjaCgoZT0+e1wibG9jYWxcIj09PXQudHlwZT9qZS5yZW1vdmVMb2NhbEVudHJ5KGUsbCk6amUucmVtb3ZlUmVtb3RlRW50cnkoYyxlLGwpfSkpfX0sWmU9ezA6XCJTdWNjZXNzXCIsMTpcIkFyZyBsaXN0IHRvbyBsb25nXCIsMjpcIlBlcm1pc3Npb24gZGVuaWVkXCIsMzpcIkFkZHJlc3MgYWxyZWFkeSBpbiB1c2VcIiw0OlwiQWRkcmVzcyBub3QgYXZhaWxhYmxlXCIsNTpcIkFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wgZmFtaWx5XCIsNjpcIk5vIG1vcmUgcHJvY2Vzc2VzXCIsNzpcIlNvY2tldCBhbHJlYWR5IGNvbm5lY3RlZFwiLDg6XCJCYWQgZmlsZSBudW1iZXJcIiw5OlwiVHJ5aW5nIHRvIHJlYWQgdW5yZWFkYWJsZSBtZXNzYWdlXCIsMTA6XCJNb3VudCBkZXZpY2UgYnVzeVwiLDExOlwiT3BlcmF0aW9uIGNhbmNlbGVkXCIsMTI6XCJObyBjaGlsZHJlblwiLDEzOlwiQ29ubmVjdGlvbiBhYm9ydGVkXCIsMTQ6XCJDb25uZWN0aW9uIHJlZnVzZWRcIiwxNTpcIkNvbm5lY3Rpb24gcmVzZXQgYnkgcGVlclwiLDE2OlwiRmlsZSBsb2NraW5nIGRlYWRsb2NrIGVycm9yXCIsMTc6XCJEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkXCIsMTg6XCJNYXRoIGFyZyBvdXQgb2YgZG9tYWluIG9mIGZ1bmNcIiwxOTpcIlF1b3RhIGV4Y2VlZGVkXCIsMjA6XCJGaWxlIGV4aXN0c1wiLDIxOlwiQmFkIGFkZHJlc3NcIiwyMjpcIkZpbGUgdG9vIGxhcmdlXCIsMjM6XCJIb3N0IGlzIHVucmVhY2hhYmxlXCIsMjQ6XCJJZGVudGlmaWVyIHJlbW92ZWRcIiwyNTpcIklsbGVnYWwgYnl0ZSBzZXF1ZW5jZVwiLDI2OlwiQ29ubmVjdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzXCIsMjc6XCJJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbFwiLDI4OlwiSW52YWxpZCBhcmd1bWVudFwiLDI5OlwiSS9PIGVycm9yXCIsMzA6XCJTb2NrZXQgaXMgYWxyZWFkeSBjb25uZWN0ZWRcIiwzMTpcIklzIGEgZGlyZWN0b3J5XCIsMzI6XCJUb28gbWFueSBzeW1ib2xpYyBsaW5rc1wiLDMzOlwiVG9vIG1hbnkgb3BlbiBmaWxlc1wiLDM0OlwiVG9vIG1hbnkgbGlua3NcIiwzNTpcIk1lc3NhZ2UgdG9vIGxvbmdcIiwzNjpcIk11bHRpaG9wIGF0dGVtcHRlZFwiLDM3OlwiRmlsZSBvciBwYXRoIG5hbWUgdG9vIGxvbmdcIiwzODpcIk5ldHdvcmsgaW50ZXJmYWNlIGlzIG5vdCBjb25maWd1cmVkXCIsMzk6XCJDb25uZWN0aW9uIHJlc2V0IGJ5IG5ldHdvcmtcIiw0MDpcIk5ldHdvcmsgaXMgdW5yZWFjaGFibGVcIiw0MTpcIlRvbyBtYW55IG9wZW4gZmlsZXMgaW4gc3lzdGVtXCIsNDI6XCJObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlXCIsNDM6XCJObyBzdWNoIGRldmljZVwiLDQ0OlwiTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVwiLDQ1OlwiRXhlYyBmb3JtYXQgZXJyb3JcIiw0NjpcIk5vIHJlY29yZCBsb2NrcyBhdmFpbGFibGVcIiw0NzpcIlRoZSBsaW5rIGhhcyBiZWVuIHNldmVyZWRcIiw0ODpcIk5vdCBlbm91Z2ggY29yZVwiLDQ5OlwiTm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGVcIiw1MDpcIlByb3RvY29sIG5vdCBhdmFpbGFibGVcIiw1MTpcIk5vIHNwYWNlIGxlZnQgb24gZGV2aWNlXCIsNTI6XCJGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWRcIiw1MzpcIlNvY2tldCBpcyBub3QgY29ubmVjdGVkXCIsNTQ6XCJOb3QgYSBkaXJlY3RvcnlcIiw1NTpcIkRpcmVjdG9yeSBub3QgZW1wdHlcIiw1NjpcIlN0YXRlIG5vdCByZWNvdmVyYWJsZVwiLDU3OlwiU29ja2V0IG9wZXJhdGlvbiBvbiBub24tc29ja2V0XCIsNTk6XCJOb3QgYSB0eXBld3JpdGVyXCIsNjA6XCJObyBzdWNoIGRldmljZSBvciBhZGRyZXNzXCIsNjE6XCJWYWx1ZSB0b28gbGFyZ2UgZm9yIGRlZmluZWQgZGF0YSB0eXBlXCIsNjI6XCJQcmV2aW91cyBvd25lciBkaWVkXCIsNjM6XCJOb3Qgc3VwZXItdXNlclwiLDY0OlwiQnJva2VuIHBpcGVcIiw2NTpcIlByb3RvY29sIGVycm9yXCIsNjY6XCJVbmtub3duIHByb3RvY29sXCIsNjc6XCJQcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXRcIiw2ODpcIk1hdGggcmVzdWx0IG5vdCByZXByZXNlbnRhYmxlXCIsNjk6XCJSZWFkIG9ubHkgZmlsZSBzeXN0ZW1cIiw3MDpcIklsbGVnYWwgc2Vla1wiLDcxOlwiTm8gc3VjaCBwcm9jZXNzXCIsNzI6XCJTdGFsZSBmaWxlIGhhbmRsZVwiLDczOlwiQ29ubmVjdGlvbiB0aW1lZCBvdXRcIiw3NDpcIlRleHQgZmlsZSBidXN5XCIsNzU6XCJDcm9zcy1kZXZpY2UgbGlua1wiLDEwMDpcIkRldmljZSBub3QgYSBzdHJlYW1cIiwxMDE6XCJCYWQgZm9udCBmaWxlIGZtdFwiLDEwMjpcIkludmFsaWQgc2xvdFwiLDEwMzpcIkludmFsaWQgcmVxdWVzdCBjb2RlXCIsMTA0OlwiTm8gYW5vZGVcIiwxMDU6XCJCbG9jayBkZXZpY2UgcmVxdWlyZWRcIiwxMDY6XCJDaGFubmVsIG51bWJlciBvdXQgb2YgcmFuZ2VcIiwxMDc6XCJMZXZlbCAzIGhhbHRlZFwiLDEwODpcIkxldmVsIDMgcmVzZXRcIiwxMDk6XCJMaW5rIG51bWJlciBvdXQgb2YgcmFuZ2VcIiwxMTA6XCJQcm90b2NvbCBkcml2ZXIgbm90IGF0dGFjaGVkXCIsMTExOlwiTm8gQ1NJIHN0cnVjdHVyZSBhdmFpbGFibGVcIiwxMTI6XCJMZXZlbCAyIGhhbHRlZFwiLDExMzpcIkludmFsaWQgZXhjaGFuZ2VcIiwxMTQ6XCJJbnZhbGlkIHJlcXVlc3QgZGVzY3JpcHRvclwiLDExNTpcIkV4Y2hhbmdlIGZ1bGxcIiwxMTY6XCJObyBkYXRhIChmb3Igbm8gZGVsYXkgaW8pXCIsMTE3OlwiVGltZXIgZXhwaXJlZFwiLDExODpcIk91dCBvZiBzdHJlYW1zIHJlc291cmNlc1wiLDExOTpcIk1hY2hpbmUgaXMgbm90IG9uIHRoZSBuZXR3b3JrXCIsMTIwOlwiUGFja2FnZSBub3QgaW5zdGFsbGVkXCIsMTIxOlwiVGhlIG9iamVjdCBpcyByZW1vdGVcIiwxMjI6XCJBZHZlcnRpc2UgZXJyb3JcIiwxMjM6XCJTcm1vdW50IGVycm9yXCIsMTI0OlwiQ29tbXVuaWNhdGlvbiBlcnJvciBvbiBzZW5kXCIsMTI1OlwiQ3Jvc3MgbW91bnQgcG9pbnQgKG5vdCByZWFsbHkgZXJyb3IpXCIsMTI2OlwiR2l2ZW4gbG9nLiBuYW1lIG5vdCB1bmlxdWVcIiwxMjc6XCJmLmQuIGludmFsaWQgZm9yIHRoaXMgb3BlcmF0aW9uXCIsMTI4OlwiUmVtb3RlIGFkZHJlc3MgY2hhbmdlZFwiLDEyOTpcIkNhbiAgIGFjY2VzcyBhIG5lZWRlZCBzaGFyZWQgbGliXCIsMTMwOlwiQWNjZXNzaW5nIGEgY29ycnVwdGVkIHNoYXJlZCBsaWJcIiwxMzE6XCIubGliIHNlY3Rpb24gaW4gYS5vdXQgY29ycnVwdGVkXCIsMTMyOlwiQXR0ZW1wdGluZyB0byBsaW5rIGluIHRvbyBtYW55IGxpYnNcIiwxMzM6XCJBdHRlbXB0aW5nIHRvIGV4ZWMgYSBzaGFyZWQgbGlicmFyeVwiLDEzNTpcIlN0cmVhbXMgcGlwZSBlcnJvclwiLDEzNjpcIlRvbyBtYW55IHVzZXJzXCIsMTM3OlwiU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZFwiLDEzODpcIk5vdCBzdXBwb3J0ZWRcIiwxMzk6XCJQcm90b2NvbCBmYW1pbHkgbm90IHN1cHBvcnRlZFwiLDE0MDpcIkNhbid0IHNlbmQgYWZ0ZXIgc29ja2V0IHNodXRkb3duXCIsMTQxOlwiVG9vIG1hbnkgcmVmZXJlbmNlc1wiLDE0MjpcIkhvc3QgaXMgZG93blwiLDE0ODpcIk5vIG1lZGl1bSAoaW4gdGFwZSBkcml2ZSlcIiwxNTY6XCJMZXZlbCAyIG5vdCBzeW5jaHJvbml6ZWRcIn0semU9e30sS2U9e3Jvb3Q6bnVsbCxtb3VudHM6W10sZGV2aWNlczp7fSxzdHJlYW1zOltdLG5leHRJbm9kZToxLG5hbWVUYWJsZTpudWxsLGN1cnJlbnRQYXRoOlwiL1wiLGluaXRpYWxpemVkOiExLGlnbm9yZVBlcm1pc3Npb25zOiEwLEVycm5vRXJyb3I6bnVsbCxnZW5lcmljRXJyb3JzOnt9LGZpbGVzeXN0ZW1zOm51bGwsc3luY0ZTUmVxdWVzdHM6MCxsb29rdXBQYXRoOmZ1bmN0aW9uKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZighKGU9R2UucmVzb2x2ZShLZS5jd2QoKSxlKSkpcmV0dXJue3BhdGg6XCJcIixub2RlOm51bGx9O2lmKHQ9T2JqZWN0LmFzc2lnbih7Zm9sbG93X21vdW50OiEwLHJlY3Vyc2VfY291bnQ6MH0sdCksdC5yZWN1cnNlX2NvdW50PjgpdGhyb3cgbmV3IEtlLkVycm5vRXJyb3IoMzIpO2Zvcih2YXIgbj1CZS5ub3JtYWxpemVBcnJheShlLnNwbGl0KFwiL1wiKS5maWx0ZXIoKGU9PiEhZSkpLCExKSxyPUtlLnJvb3QsaT1cIi9cIixvPTA7bzxuLmxlbmd0aDtvKyspe3ZhciBhPW89PT1uLmxlbmd0aC0xO2lmKGEmJnQucGFyZW50KWJyZWFrO2lmKHI9S2UubG9va3VwTm9kZShyLG5bb10pLGk9QmUuam9pbjIoaSxuW29dKSxLZS5pc01vdW50cG9pbnQocikmJighYXx8YSYmdC5mb2xsb3dfbW91bnQpJiYocj1yLm1vdW50ZWQucm9vdCksIWF8fHQuZm9sbG93KWZvcih2YXIgcz0wO0tlLmlzTGluayhyLm1vZGUpOyl7dmFyIGM9S2UucmVhZGxpbmsoaSk7aWYoaT1HZS5yZXNvbHZlKEJlLmRpcm5hbWUoaSksYykscj1LZS5sb29rdXBQYXRoKGkse3JlY3Vyc2VfY291bnQ6dC5yZWN1cnNlX2NvdW50KzF9KS5ub2RlLHMrKz40MCl0aHJvdyBuZXcgS2UuRXJybm9FcnJvcigzMil9fXJldHVybntwYXRoOmksbm9kZTpyfX0sZ2V0UGF0aDplPT57Zm9yKHZhciB0Ozspe2lmKEtlLmlzUm9vdChlKSl7dmFyIG49ZS5tb3VudC5tb3VudHBvaW50O3JldHVybiB0P1wiL1wiIT09bltuLmxlbmd0aC0xXT9uK1wiL1wiK3Q6bit0Om59dD10P2UubmFtZStcIi9cIit0OmUubmFtZSxlPWUucGFyZW50fX0saGFzaE5hbWU6KGUsdCk9Pntmb3IodmFyIG49MCxyPTA7cjx0Lmxlbmd0aDtyKyspbj0objw8NSktbit0LmNoYXJDb2RlQXQocil8MDtyZXR1cm4oZStuPj4+MCklS2UubmFtZVRhYmxlLmxlbmd0aH0saGFzaEFkZE5vZGU6ZT0+e3ZhciB0PUtlLmhhc2hOYW1lKGUucGFyZW50LmlkLGUubmFtZSk7ZS5uYW1lX25leHQ9S2UubmFtZVRhYmxlW3RdLEtlLm5hbWVUYWJsZVt0XT1lfSxoYXNoUmVtb3ZlTm9kZTplPT57dmFyIHQ9S2UuaGFzaE5hbWUoZS5wYXJlbnQuaWQsZS5uYW1lKTtpZihLZS5uYW1lVGFibGVbdF09PT1lKUtlLm5hbWVUYWJsZVt0XT1lLm5hbWVfbmV4dDtlbHNlIGZvcih2YXIgbj1LZS5uYW1lVGFibGVbdF07bjspe2lmKG4ubmFtZV9uZXh0PT09ZSl7bi5uYW1lX25leHQ9ZS5uYW1lX25leHQ7YnJlYWt9bj1uLm5hbWVfbmV4dH19LGxvb2t1cE5vZGU6KGUsdCk9Pnt2YXIgbj1LZS5tYXlMb29rdXAoZSk7aWYobil0aHJvdyBuZXcgS2UuRXJybm9FcnJvcihuLGUpO2Zvcih2YXIgcj1LZS5oYXNoTmFtZShlLmlkLHQpLGk9S2UubmFtZVRhYmxlW3JdO2k7aT1pLm5hbWVfbmV4dCl7dmFyIG89aS5uYW1lO2lmKGkucGFyZW50LmlkPT09ZS5pZCYmbz09PXQpcmV0dXJuIGl9cmV0dXJuIEtlLmxvb2t1cChlLHQpfSxjcmVhdGVOb2RlOihlLHQsbixyKT0+e1AoXCJvYmplY3RcIj09dHlwZW9mIGUpO3ZhciBpPW5ldyBLZS5GU05vZGUoZSx0LG4scik7cmV0dXJuIEtlLmhhc2hBZGROb2RlKGkpLGl9LGRlc3Ryb3lOb2RlOmU9PntLZS5oYXNoUmVtb3ZlTm9kZShlKX0saXNSb290OmU9PmU9PT1lLnBhcmVudCxpc01vdW50cG9pbnQ6ZT0+ISFlLm1vdW50ZWQsaXNGaWxlOmU9PjMyNzY4PT0oNjE0NDAmZSksaXNEaXI6ZT0+MTYzODQ9PSg2MTQ0MCZlKSxpc0xpbms6ZT0+NDA5NjA9PSg2MTQ0MCZlKSxpc0NocmRldjplPT44MTkyPT0oNjE0NDAmZSksaXNCbGtkZXY6ZT0+MjQ1NzY9PSg2MTQ0MCZlKSxpc0ZJRk86ZT0+NDA5Nj09KDYxNDQwJmUpLGlzU29ja2V0OmU9PjQ5MTUyPT0oNDkxNTImZSksZmxhZ01vZGVzOntyOjAsXCJyK1wiOjIsdzo1NzcsXCJ3K1wiOjU3OCxhOjEwODksXCJhK1wiOjEwOTB9LG1vZGVTdHJpbmdUb0ZsYWdzOmU9Pnt2YXIgdD1LZS5mbGFnTW9kZXNbZV07aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGZpbGUgb3BlbiBtb2RlOiBcIitlKTtyZXR1cm4gdH0sZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmc6ZT0+e3ZhciB0PVtcInJcIixcIndcIixcInJ3XCJdWzMmZV07cmV0dXJuIDUxMiZlJiYodCs9XCJ3XCIpLHR9LG5vZGVQZXJtaXNzaW9uczooZSx0KT0+S2UuaWdub3JlUGVybWlzc2lvbnN8fCghdC5pbmNsdWRlcyhcInJcIil8fDI5MiZlLm1vZGUpJiYoIXQuaW5jbHVkZXMoXCJ3XCIpfHwxNDYmZS5tb2RlKSYmKCF0LmluY2x1ZGVzKFwieFwiKXx8NzMmZS5tb2RlKT8wOjIsbWF5TG9va3VwOmU9PktlLm5vZGVQZXJtaXNzaW9ucyhlLFwieFwiKXx8KGUubm9kZV9vcHMubG9va3VwPzA6MiksbWF5Q3JlYXRlOihlLHQpPT57dHJ5e3JldHVybiBLZS5sb29rdXBOb2RlKGUsdCksMjB9Y2F0Y2goZSl7fXJldHVybiBLZS5ub2RlUGVybWlzc2lvbnMoZSxcInd4XCIpfSxtYXlEZWxldGU6KGUsdCxuKT0+e3ZhciByO3RyeXtyPUtlLmxvb2t1cE5vZGUoZSx0KX1jYXRjaChlKXtyZXR1cm4gZS5lcnJub312YXIgaT1LZS5ub2RlUGVybWlzc2lvbnMoZSxcInd4XCIpO2lmKGkpcmV0dXJuIGk7aWYobil7aWYoIUtlLmlzRGlyKHIubW9kZSkpcmV0dXJuIDU0O2lmKEtlLmlzUm9vdChyKXx8S2UuZ2V0UGF0aChyKT09PUtlLmN3ZCgpKXJldHVybiAxMH1lbHNlIGlmKEtlLmlzRGlyKHIubW9kZSkpcmV0dXJuIDMxO3JldHVybiAwfSxtYXlPcGVuOihlLHQpPT5lP0tlLmlzTGluayhlLm1vZGUpPzMyOktlLmlzRGlyKGUubW9kZSkmJihcInJcIiE9PUtlLmZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nKHQpfHw1MTImdCk/MzE6S2Uubm9kZVBlcm1pc3Npb25zKGUsS2UuZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcodCkpOjQ0LE1BWF9PUEVOX0ZEUzo0MDk2LG5leHRmZDpmdW5jdGlvbigpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTowLHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOktlLk1BWF9PUEVOX0ZEUztmb3IodmFyIG49ZTtuPD10O24rKylpZighS2Uuc3RyZWFtc1tuXSlyZXR1cm4gbjt0aHJvdyBuZXcgS2UuRXJybm9FcnJvcigzMyl9LGdldFN0cmVhbTplPT5LZS5zdHJlYW1zW2VdLGNyZWF0ZVN0cmVhbTooZSx0LG4pPT57S2UuRlNTdHJlYW18fChLZS5GU1N0cmVhbT1mdW5jdGlvbigpe3RoaXMuc2hhcmVkPXt9fSxLZS5GU1N0cmVhbS5wcm90b3R5cGU9e29iamVjdDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMubm9kZT1lfX0saXNSZWFkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMSE9KDIwOTcxNTUmdGhpcy5mbGFncyl9fSxpc1dyaXRlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMCE9KDIwOTcxNTUmdGhpcy5mbGFncyl9fSxpc0FwcGVuZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDEwMjQmdGhpcy5mbGFnc319LGZsYWdzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaGFyZWQuZmxhZ3N9LHNldDpmdW5jdGlvbihlKXt0aGlzLnNoYXJlZC5mbGFncz1lfX0scG9zaXRpb246e2dldCBmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYXJlZC5wb3NpdGlvbn0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuc2hhcmVkLnBvc2l0aW9uPWV9fX0pLGU9T2JqZWN0LmFzc2lnbihuZXcgS2UuRlNTdHJlYW0sZSk7dmFyIHI9S2UubmV4dGZkKHQsbik7cmV0dXJuIGUuZmQ9cixLZS5zdHJlYW1zW3JdPWUsZX0sY2xvc2VTdHJlYW06ZT0+e0tlLnN0cmVhbXNbZV09bnVsbH0sY2hyZGV2X3N0cmVhbV9vcHM6e29wZW46ZT0+e3ZhciB0PUtlLmdldERldmljZShlLm5vZGUucmRldik7ZS5zdHJlYW1fb3BzPXQuc3RyZWFtX29wcyxlLnN0cmVhbV9vcHMub3BlbiYmZS5zdHJlYW1fb3BzLm9wZW4oZSl9LGxsc2VlazooKT0+e3Rocm93IG5ldyBLZS5FcnJub0Vycm9yKDcwKX19LG1ham9yOmU9PmU+PjgsbWlub3I6ZT0+MjU1JmUsbWFrZWRldjooZSx0KT0+ZTw8OHx0LHJlZ2lzdGVyRGV2aWNlOihlLHQpPT57S2UuZGV2aWNlc1tlXT17c3RyZWFtX29wczp0fX0sZ2V0RGV2aWNlOmU9PktlLmRldmljZXNbZV0sZ2V0TW91bnRzOmU9Pntmb3IodmFyIHQ9W10sbj1bZV07bi5sZW5ndGg7KXt2YXIgcj1uLnBvcCgpO3QucHVzaChyKSxuLnB1c2guYXBwbHkobixyLm1vdW50cyl9cmV0dXJuIHR9LHN5bmNmczooZSx0KT0+e1wiZnVuY3Rpb25cIj09dHlwZW9mIGUmJih0PWUsZT0hMSksS2Uuc3luY0ZTUmVxdWVzdHMrKyxLZS5zeW5jRlNSZXF1ZXN0cz4xJiZTKFwid2FybmluZzogXCIrS2Uuc3luY0ZTUmVxdWVzdHMrXCIgRlMuc3luY2ZzIG9wZXJhdGlvbnMgaW4gZmxpZ2h0IGF0IG9uY2UsIHByb2JhYmx5IGp1c3QgZG9pbmcgZXh0cmEgd29ya1wiKTt2YXIgbj1LZS5nZXRNb3VudHMoS2Uucm9vdC5tb3VudCkscj0wO2Z1bmN0aW9uIGkoZSl7cmV0dXJuIFAoS2Uuc3luY0ZTUmVxdWVzdHM+MCksS2Uuc3luY0ZTUmVxdWVzdHMtLSx0KGUpfWZ1bmN0aW9uIG8oZSl7aWYoZSlyZXR1cm4gby5lcnJvcmVkP3ZvaWQgMDooby5lcnJvcmVkPSEwLGkoZSkpOysrcj49bi5sZW5ndGgmJmkobnVsbCl9bi5mb3JFYWNoKCh0PT57aWYoIXQudHlwZS5zeW5jZnMpcmV0dXJuIG8obnVsbCk7dC50eXBlLnN5bmNmcyh0LGUsbyl9KSl9LG1vdW50OihlLHQsbik9PntpZihcInN0cmluZ1wiPT10eXBlb2YgZSl0aHJvdyBlO3ZhciByLGk9XCIvXCI9PT1uLG89IW47aWYoaSYmS2Uucm9vdCl0aHJvdyBuZXcgS2UuRXJybm9FcnJvcigxMCk7aWYoIWkmJiFvKXt2YXIgYT1LZS5sb29rdXBQYXRoKG4se2ZvbGxvd19tb3VudDohMX0pO2lmKG49YS5wYXRoLHI9YS5ub2RlLEtlLmlzTW91bnRwb2ludChyKSl0aHJvdyBuZXcgS2UuRXJybm9FcnJvcigxMCk7aWYoIUtlLmlzRGlyKHIubW9kZSkpdGhyb3cgbmV3IEtlLkVycm5vRXJyb3IoNTQpfXZhciBzPXt0eXBlOmUsb3B0czp0LG1vdW50cG9pbnQ6bixtb3VudHM6W119LGM9ZS5tb3VudChzKTtyZXR1cm4gYy5tb3VudD1zLHMucm9vdD1jLGk/S2Uucm9vdD1jOnImJihyLm1vdW50ZWQ9cyxyLm1vdW50JiZyLm1vdW50Lm1vdW50cy5wdXNoKHMpKSxjfSx1bm1vdW50OmU9Pnt2YXIgdD1LZS5sb29rdXBQYXRoKGUse2ZvbGxvd19tb3VudDohMX0pO2lmKCFLZS5pc01vdW50cG9pbnQodC5ub2RlKSl0aHJvdyBuZXcgS2UuRXJybm9FcnJvcigyOCk7dmFyIG49dC5ub2RlLHI9bi5tb3VudGVkLGk9S2UuZ2V0TW91bnRzKHIpO09iamVjdC5rZXlzKEtlLm5hbWVUYWJsZSkuZm9yRWFjaCgoZT0+e2Zvcih2YXIgdD1LZS5uYW1lVGFibGVbZV07dDspe3ZhciBuPXQubmFtZV9uZXh0O2kuaW5jbHVkZXModC5tb3VudCkmJktlLmRlc3Ryb3lOb2RlKHQpLHQ9bn19KSksbi5tb3VudGVkPW51bGw7dmFyIG89bi5tb3VudC5tb3VudHMuaW5kZXhPZihyKTtQKC0xIT09byksbi5tb3VudC5tb3VudHMuc3BsaWNlKG8sMSl9LGxvb2t1cDooZSx0KT0+ZS5ub2RlX29wcy5sb29rdXAoZSx0KSxta25vZDooZSx0LG4pPT57dmFyIHI9S2UubG9va3VwUGF0aChlLHtwYXJlbnQ6ITB9KS5ub2RlLGk9QmUuYmFzZW5hbWUoZSk7aWYoIWl8fFwiLlwiPT09aXx8XCIuLlwiPT09aSl0aHJvdyBuZXcgS2UuRXJybm9FcnJvcigyOCk7dmFyIG89S2UubWF5Q3JlYXRlKHIsaSk7aWYobyl0aHJvdyBuZXcgS2UuRXJybm9FcnJvcihvKTtpZighci5ub2RlX29wcy5ta25vZCl0aHJvdyBuZXcgS2UuRXJybm9FcnJvcig2Myk7cmV0dXJuIHIubm9kZV9vcHMubWtub2QocixpLHQsbil9LGNyZWF0ZTooZSx0KT0+KHQ9dm9pZCAwIT09dD90OjQzOCx0Jj00MDk1LHR8PTMyNzY4LEtlLm1rbm9kKGUsdCwwKSksbWtkaXI6KGUsdCk9Pih0PXZvaWQgMCE9PXQ/dDo1MTEsdCY9MTAyMyx0fD0xNjM4NCxLZS5ta25vZChlLHQsMCkpLG1rZGlyVHJlZTooZSx0KT0+e2Zvcih2YXIgbj1lLnNwbGl0KFwiL1wiKSxyPVwiXCIsaT0wO2k8bi5sZW5ndGg7KytpKWlmKG5baV0pe3IrPVwiL1wiK25baV07dHJ5e0tlLm1rZGlyKHIsdCl9Y2F0Y2goZSl7aWYoMjAhPWUuZXJybm8pdGhyb3cgZX19fSxta2RldjooZSx0LG4pPT4odm9pZCAwPT09biYmKG49dCx0PTQzOCksdHw9ODE5MixLZS5ta25vZChlLHQsbikpLHN5bWxpbms6KGUsdCk9PntpZighR2UucmVzb2x2ZShlKSl0aHJvdyBuZXcgS2UuRXJybm9FcnJvcig0NCk7dmFyIG49S2UubG9va3VwUGF0aCh0LHtwYXJlbnQ6ITB9KS5ub2RlO2lmKCFuKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDQ0KTt2YXIgcj1CZS5iYXNlbmFtZSh0KSxpPUtlLm1heUNyZWF0ZShuLHIpO2lmKGkpdGhyb3cgbmV3IEtlLkVycm5vRXJyb3IoaSk7aWYoIW4ubm9kZV9vcHMuc3ltbGluayl0aHJvdyBuZXcgS2UuRXJybm9FcnJvcig2Myk7cmV0dXJuIG4ubm9kZV9vcHMuc3ltbGluayhuLHIsZSl9LHJlbmFtZTooZSx0KT0+e3ZhciBuLHIsaT1CZS5kaXJuYW1lKGUpLG89QmUuZGlybmFtZSh0KSxhPUJlLmJhc2VuYW1lKGUpLHM9QmUuYmFzZW5hbWUodCk7aWYobj1LZS5sb29rdXBQYXRoKGUse3BhcmVudDohMH0pLm5vZGUscj1LZS5sb29rdXBQYXRoKHQse3BhcmVudDohMH0pLm5vZGUsIW58fCFyKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDQ0KTtpZihuLm1vdW50IT09ci5tb3VudCl0aHJvdyBuZXcgS2UuRXJybm9FcnJvcig3NSk7dmFyIGMsbD1LZS5sb29rdXBOb2RlKG4sYSksdT1HZS5yZWxhdGl2ZShlLG8pO2lmKFwiLlwiIT09dS5jaGFyQXQoMCkpdGhyb3cgbmV3IEtlLkVycm5vRXJyb3IoMjgpO2lmKFwiLlwiIT09KHU9R2UucmVsYXRpdmUodCxpKSkuY2hhckF0KDApKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDU1KTt0cnl7Yz1LZS5sb29rdXBOb2RlKHIscyl9Y2F0Y2goZSl7fWlmKGwhPT1jKXt2YXIgZD1LZS5pc0RpcihsLm1vZGUpLGY9S2UubWF5RGVsZXRlKG4sYSxkKTtpZihmKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKGYpO2lmKGY9Yz9LZS5tYXlEZWxldGUocixzLGQpOktlLm1heUNyZWF0ZShyLHMpKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKGYpO2lmKCFuLm5vZGVfb3BzLnJlbmFtZSl0aHJvdyBuZXcgS2UuRXJybm9FcnJvcig2Myk7aWYoS2UuaXNNb3VudHBvaW50KGwpfHxjJiZLZS5pc01vdW50cG9pbnQoYykpdGhyb3cgbmV3IEtlLkVycm5vRXJyb3IoMTApO2lmKHIhPT1uJiYoZj1LZS5ub2RlUGVybWlzc2lvbnMobixcIndcIikpKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKGYpO0tlLmhhc2hSZW1vdmVOb2RlKGwpO3RyeXtuLm5vZGVfb3BzLnJlbmFtZShsLHIscyl9Y2F0Y2goZSl7dGhyb3cgZX1maW5hbGx5e0tlLmhhc2hBZGROb2RlKGwpfX19LHJtZGlyOmU9Pnt2YXIgdD1LZS5sb29rdXBQYXRoKGUse3BhcmVudDohMH0pLm5vZGUsbj1CZS5iYXNlbmFtZShlKSxyPUtlLmxvb2t1cE5vZGUodCxuKSxpPUtlLm1heURlbGV0ZSh0LG4sITApO2lmKGkpdGhyb3cgbmV3IEtlLkVycm5vRXJyb3IoaSk7aWYoIXQubm9kZV9vcHMucm1kaXIpdGhyb3cgbmV3IEtlLkVycm5vRXJyb3IoNjMpO2lmKEtlLmlzTW91bnRwb2ludChyKSl0aHJvdyBuZXcgS2UuRXJybm9FcnJvcigxMCk7dC5ub2RlX29wcy5ybWRpcih0LG4pLEtlLmRlc3Ryb3lOb2RlKHIpfSxyZWFkZGlyOmU9Pnt2YXIgdD1LZS5sb29rdXBQYXRoKGUse2ZvbGxvdzohMH0pLm5vZGU7aWYoIXQubm9kZV9vcHMucmVhZGRpcil0aHJvdyBuZXcgS2UuRXJybm9FcnJvcig1NCk7cmV0dXJuIHQubm9kZV9vcHMucmVhZGRpcih0KX0sdW5saW5rOmU9Pnt2YXIgdD1LZS5sb29rdXBQYXRoKGUse3BhcmVudDohMH0pLm5vZGU7aWYoIXQpdGhyb3cgbmV3IEtlLkVycm5vRXJyb3IoNDQpO3ZhciBuPUJlLmJhc2VuYW1lKGUpLHI9S2UubG9va3VwTm9kZSh0LG4pLGk9S2UubWF5RGVsZXRlKHQsbiwhMSk7aWYoaSl0aHJvdyBuZXcgS2UuRXJybm9FcnJvcihpKTtpZighdC5ub2RlX29wcy51bmxpbmspdGhyb3cgbmV3IEtlLkVycm5vRXJyb3IoNjMpO2lmKEtlLmlzTW91bnRwb2ludChyKSl0aHJvdyBuZXcgS2UuRXJybm9FcnJvcigxMCk7dC5ub2RlX29wcy51bmxpbmsodCxuKSxLZS5kZXN0cm95Tm9kZShyKX0scmVhZGxpbms6ZT0+e3ZhciB0PUtlLmxvb2t1cFBhdGgoZSkubm9kZTtpZighdCl0aHJvdyBuZXcgS2UuRXJybm9FcnJvcig0NCk7aWYoIXQubm9kZV9vcHMucmVhZGxpbmspdGhyb3cgbmV3IEtlLkVycm5vRXJyb3IoMjgpO3JldHVybiBHZS5yZXNvbHZlKEtlLmdldFBhdGgodC5wYXJlbnQpLHQubm9kZV9vcHMucmVhZGxpbmsodCkpfSxzdGF0OihlLHQpPT57dmFyIG49S2UubG9va3VwUGF0aChlLHtmb2xsb3c6IXR9KS5ub2RlO2lmKCFuKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDQ0KTtpZighbi5ub2RlX29wcy5nZXRhdHRyKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDYzKTtyZXR1cm4gbi5ub2RlX29wcy5nZXRhdHRyKG4pfSxsc3RhdDplPT5LZS5zdGF0KGUsITApLGNobW9kOihlLHQsbik9Pnt2YXIgcjtpZighKHI9XCJzdHJpbmdcIj09dHlwZW9mIGU/S2UubG9va3VwUGF0aChlLHtmb2xsb3c6IW59KS5ub2RlOmUpLm5vZGVfb3BzLnNldGF0dHIpdGhyb3cgbmV3IEtlLkVycm5vRXJyb3IoNjMpO3Iubm9kZV9vcHMuc2V0YXR0cihyLHttb2RlOjQwOTUmdHwtNDA5NiZyLm1vZGUsdGltZXN0YW1wOkRhdGUubm93KCl9KX0sbGNobW9kOihlLHQpPT57S2UuY2htb2QoZSx0LCEwKX0sZmNobW9kOihlLHQpPT57dmFyIG49S2UuZ2V0U3RyZWFtKGUpO2lmKCFuKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDgpO0tlLmNobW9kKG4ubm9kZSx0KX0sY2hvd246KGUsdCxuLHIpPT57dmFyIGk7aWYoIShpPVwic3RyaW5nXCI9PXR5cGVvZiBlP0tlLmxvb2t1cFBhdGgoZSx7Zm9sbG93OiFyfSkubm9kZTplKS5ub2RlX29wcy5zZXRhdHRyKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDYzKTtpLm5vZGVfb3BzLnNldGF0dHIoaSx7dGltZXN0YW1wOkRhdGUubm93KCl9KX0sbGNob3duOihlLHQsbik9PntLZS5jaG93bihlLHQsbiwhMCl9LGZjaG93bjooZSx0LG4pPT57dmFyIHI9S2UuZ2V0U3RyZWFtKGUpO2lmKCFyKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDgpO0tlLmNob3duKHIubm9kZSx0LG4pfSx0cnVuY2F0ZTooZSx0KT0+e2lmKHQ8MCl0aHJvdyBuZXcgS2UuRXJybm9FcnJvcigyOCk7dmFyIG47aWYoIShuPVwic3RyaW5nXCI9PXR5cGVvZiBlP0tlLmxvb2t1cFBhdGgoZSx7Zm9sbG93OiEwfSkubm9kZTplKS5ub2RlX29wcy5zZXRhdHRyKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDYzKTtpZihLZS5pc0RpcihuLm1vZGUpKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDMxKTtpZighS2UuaXNGaWxlKG4ubW9kZSkpdGhyb3cgbmV3IEtlLkVycm5vRXJyb3IoMjgpO3ZhciByPUtlLm5vZGVQZXJtaXNzaW9ucyhuLFwid1wiKTtpZihyKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKHIpO24ubm9kZV9vcHMuc2V0YXR0cihuLHtzaXplOnQsdGltZXN0YW1wOkRhdGUubm93KCl9KX0sZnRydW5jYXRlOihlLHQpPT57dmFyIG49S2UuZ2V0U3RyZWFtKGUpO2lmKCFuKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDgpO2lmKDA9PSgyMDk3MTU1Jm4uZmxhZ3MpKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDI4KTtLZS50cnVuY2F0ZShuLm5vZGUsdCl9LHV0aW1lOihlLHQsbik9Pnt2YXIgcj1LZS5sb29rdXBQYXRoKGUse2ZvbGxvdzohMH0pLm5vZGU7ci5ub2RlX29wcy5zZXRhdHRyKHIse3RpbWVzdGFtcDpNYXRoLm1heCh0LG4pfSl9LG9wZW46KGUsdCxuKT0+e2lmKFwiXCI9PT1lKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDQ0KTt2YXIgcjtpZihuPXZvaWQgMD09PW4/NDM4Om4sbj02NCYodD1cInN0cmluZ1wiPT10eXBlb2YgdD9LZS5tb2RlU3RyaW5nVG9GbGFncyh0KTp0KT80MDk1Jm58MzI3Njg6MCxcIm9iamVjdFwiPT10eXBlb2YgZSlyPWU7ZWxzZXtlPUJlLm5vcm1hbGl6ZShlKTt0cnl7cj1LZS5sb29rdXBQYXRoKGUse2ZvbGxvdzohKDEzMTA3MiZ0KX0pLm5vZGV9Y2F0Y2goZSl7fX12YXIgaT0hMTtpZig2NCZ0KWlmKHIpe2lmKDEyOCZ0KXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDIwKX1lbHNlIHI9S2UubWtub2QoZSxuLDApLGk9ITA7aWYoIXIpdGhyb3cgbmV3IEtlLkVycm5vRXJyb3IoNDQpO2lmKEtlLmlzQ2hyZGV2KHIubW9kZSkmJih0Jj0tNTEzKSw2NTUzNiZ0JiYhS2UuaXNEaXIoci5tb2RlKSl0aHJvdyBuZXcgS2UuRXJybm9FcnJvcig1NCk7aWYoIWkpe3ZhciBhPUtlLm1heU9wZW4ocix0KTtpZihhKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKGEpfTUxMiZ0JiYhaSYmS2UudHJ1bmNhdGUociwwKSx0Jj0tMTMxNzEzO3ZhciBzPUtlLmNyZWF0ZVN0cmVhbSh7bm9kZTpyLHBhdGg6S2UuZ2V0UGF0aChyKSxmbGFnczp0LHNlZWthYmxlOiEwLHBvc2l0aW9uOjAsc3RyZWFtX29wczpyLnN0cmVhbV9vcHMsdW5nb3R0ZW46W10sZXJyb3I6ITF9KTtyZXR1cm4gcy5zdHJlYW1fb3BzLm9wZW4mJnMuc3RyZWFtX29wcy5vcGVuKHMpLCFvLmxvZ1JlYWRGaWxlc3x8MSZ0fHwoS2UucmVhZEZpbGVzfHwoS2UucmVhZEZpbGVzPXt9KSxlIGluIEtlLnJlYWRGaWxlc3x8KEtlLnJlYWRGaWxlc1tlXT0xKSksc30sY2xvc2U6ZT0+e2lmKEtlLmlzQ2xvc2VkKGUpKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDgpO2UuZ2V0ZGVudHMmJihlLmdldGRlbnRzPW51bGwpO3RyeXtlLnN0cmVhbV9vcHMuY2xvc2UmJmUuc3RyZWFtX29wcy5jbG9zZShlKX1jYXRjaChlKXt0aHJvdyBlfWZpbmFsbHl7S2UuY2xvc2VTdHJlYW0oZS5mZCl9ZS5mZD1udWxsfSxpc0Nsb3NlZDplPT5udWxsPT09ZS5mZCxsbHNlZWs6KGUsdCxuKT0+e2lmKEtlLmlzQ2xvc2VkKGUpKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDgpO2lmKCFlLnNlZWthYmxlfHwhZS5zdHJlYW1fb3BzLmxsc2Vlayl0aHJvdyBuZXcgS2UuRXJybm9FcnJvcig3MCk7aWYoMCE9biYmMSE9biYmMiE9bil0aHJvdyBuZXcgS2UuRXJybm9FcnJvcigyOCk7cmV0dXJuIGUucG9zaXRpb249ZS5zdHJlYW1fb3BzLmxsc2VlayhlLHQsbiksZS51bmdvdHRlbj1bXSxlLnBvc2l0aW9ufSxyZWFkOihlLHQsbixyLGkpPT57aWYocjwwfHxpPDApdGhyb3cgbmV3IEtlLkVycm5vRXJyb3IoMjgpO2lmKEtlLmlzQ2xvc2VkKGUpKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDgpO2lmKDE9PSgyMDk3MTU1JmUuZmxhZ3MpKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDgpO2lmKEtlLmlzRGlyKGUubm9kZS5tb2RlKSl0aHJvdyBuZXcgS2UuRXJybm9FcnJvcigzMSk7aWYoIWUuc3RyZWFtX29wcy5yZWFkKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDI4KTt2YXIgbz12b2lkIDAhPT1pO2lmKG8pe2lmKCFlLnNlZWthYmxlKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDcwKX1lbHNlIGk9ZS5wb3NpdGlvbjt2YXIgYT1lLnN0cmVhbV9vcHMucmVhZChlLHQsbixyLGkpO3JldHVybiBvfHwoZS5wb3NpdGlvbis9YSksYX0sd3JpdGU6KGUsdCxuLHIsaSxvKT0+e2lmKHI8MHx8aTwwKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDI4KTtpZihLZS5pc0Nsb3NlZChlKSl0aHJvdyBuZXcgS2UuRXJybm9FcnJvcig4KTtpZigwPT0oMjA5NzE1NSZlLmZsYWdzKSl0aHJvdyBuZXcgS2UuRXJybm9FcnJvcig4KTtpZihLZS5pc0RpcihlLm5vZGUubW9kZSkpdGhyb3cgbmV3IEtlLkVycm5vRXJyb3IoMzEpO2lmKCFlLnN0cmVhbV9vcHMud3JpdGUpdGhyb3cgbmV3IEtlLkVycm5vRXJyb3IoMjgpO2Uuc2Vla2FibGUmJjEwMjQmZS5mbGFncyYmS2UubGxzZWVrKGUsMCwyKTt2YXIgYT12b2lkIDAhPT1pO2lmKGEpe2lmKCFlLnNlZWthYmxlKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDcwKX1lbHNlIGk9ZS5wb3NpdGlvbjt2YXIgcz1lLnN0cmVhbV9vcHMud3JpdGUoZSx0LG4scixpLG8pO3JldHVybiBhfHwoZS5wb3NpdGlvbis9cyksc30sYWxsb2NhdGU6KGUsdCxuKT0+e2lmKEtlLmlzQ2xvc2VkKGUpKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDgpO2lmKHQ8MHx8bjw9MCl0aHJvdyBuZXcgS2UuRXJybm9FcnJvcigyOCk7aWYoMD09KDIwOTcxNTUmZS5mbGFncykpdGhyb3cgbmV3IEtlLkVycm5vRXJyb3IoOCk7aWYoIUtlLmlzRmlsZShlLm5vZGUubW9kZSkmJiFLZS5pc0RpcihlLm5vZGUubW9kZSkpdGhyb3cgbmV3IEtlLkVycm5vRXJyb3IoNDMpO2lmKCFlLnN0cmVhbV9vcHMuYWxsb2NhdGUpdGhyb3cgbmV3IEtlLkVycm5vRXJyb3IoMTM4KTtlLnN0cmVhbV9vcHMuYWxsb2NhdGUoZSx0LG4pfSxtbWFwOihlLHQsbixyLGksbyk9PntpZigwIT0oMiZpKSYmMD09KDImbykmJjIhPSgyMDk3MTU1JmUuZmxhZ3MpKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDIpO2lmKDE9PSgyMDk3MTU1JmUuZmxhZ3MpKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDIpO2lmKCFlLnN0cmVhbV9vcHMubW1hcCl0aHJvdyBuZXcgS2UuRXJybm9FcnJvcig0Myk7cmV0dXJuIGUuc3RyZWFtX29wcy5tbWFwKGUsdCxuLHIsaSxvKX0sbXN5bmM6KGUsdCxuLHIsaSk9PmUmJmUuc3RyZWFtX29wcy5tc3luYz9lLnN0cmVhbV9vcHMubXN5bmMoZSx0LG4scixpKTowLG11bm1hcDplPT4wLGlvY3RsOihlLHQsbik9PntpZighZS5zdHJlYW1fb3BzLmlvY3RsKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDU5KTtyZXR1cm4gZS5zdHJlYW1fb3BzLmlvY3RsKGUsdCxuKX0scmVhZEZpbGU6ZnVuY3Rpb24oZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2lmKHQuZmxhZ3M9dC5mbGFnc3x8MCx0LmVuY29kaW5nPXQuZW5jb2Rpbmd8fFwiYmluYXJ5XCIsXCJ1dGY4XCIhPT10LmVuY29kaW5nJiZcImJpbmFyeVwiIT09dC5lbmNvZGluZyl0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZW5jb2RpbmcgdHlwZSBcIicrdC5lbmNvZGluZysnXCInKTt2YXIgbixyPUtlLm9wZW4oZSx0LmZsYWdzKSxpPUtlLnN0YXQoZSkuc2l6ZSxvPW5ldyBVaW50OEFycmF5KGkpO3JldHVybiBLZS5yZWFkKHIsbywwLGksMCksXCJ1dGY4XCI9PT10LmVuY29kaW5nP249TChvLDApOlwiYmluYXJ5XCI9PT10LmVuY29kaW5nJiYobj1vKSxLZS5jbG9zZShyKSxufSx3cml0ZUZpbGU6ZnVuY3Rpb24oZSx0KXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307bi5mbGFncz1uLmZsYWdzfHw1Nzc7dmFyIHI9S2Uub3BlbihlLG4uZmxhZ3Msbi5tb2RlKTtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7dmFyIGk9bmV3IFVpbnQ4QXJyYXkoQih0KSsxKSxvPXgodCxpLDAsaS5sZW5ndGgpO0tlLndyaXRlKHIsaSwwLG8sdm9pZCAwLG4uY2FuT3duKX1lbHNle2lmKCFBcnJheUJ1ZmZlci5pc1ZpZXcodCkpdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgZGF0YSB0eXBlXCIpO0tlLndyaXRlKHIsdCwwLHQuYnl0ZUxlbmd0aCx2b2lkIDAsbi5jYW5Pd24pfUtlLmNsb3NlKHIpfSxjd2Q6KCk9PktlLmN1cnJlbnRQYXRoLGNoZGlyOmU9Pnt2YXIgdD1LZS5sb29rdXBQYXRoKGUse2ZvbGxvdzohMH0pO2lmKG51bGw9PT10Lm5vZGUpdGhyb3cgbmV3IEtlLkVycm5vRXJyb3IoNDQpO2lmKCFLZS5pc0Rpcih0Lm5vZGUubW9kZSkpdGhyb3cgbmV3IEtlLkVycm5vRXJyb3IoNTQpO3ZhciBuPUtlLm5vZGVQZXJtaXNzaW9ucyh0Lm5vZGUsXCJ4XCIpO2lmKG4pdGhyb3cgbmV3IEtlLkVycm5vRXJyb3Iobik7S2UuY3VycmVudFBhdGg9dC5wYXRofSxjcmVhdGVEZWZhdWx0RGlyZWN0b3JpZXM6KCk9PntLZS5ta2RpcihcIi90bXBcIiksS2UubWtkaXIoXCIvaG9tZVwiKSxLZS5ta2RpcihcIi9ob21lL3dlYl91c2VyXCIpfSxjcmVhdGVEZWZhdWx0RGV2aWNlczooKT0+e0tlLm1rZGlyKFwiL2RldlwiKSxLZS5yZWdpc3RlckRldmljZShLZS5tYWtlZGV2KDEsMykse3JlYWQ6KCk9PjAsd3JpdGU6KGUsdCxuLHIsaSk9PnJ9KSxLZS5ta2RldihcIi9kZXYvbnVsbFwiLEtlLm1ha2VkZXYoMSwzKSksSGUucmVnaXN0ZXIoS2UubWFrZWRldig1LDApLEhlLmRlZmF1bHRfdHR5X29wcyksSGUucmVnaXN0ZXIoS2UubWFrZWRldig2LDApLEhlLmRlZmF1bHRfdHR5MV9vcHMpLEtlLm1rZGV2KFwiL2Rldi90dHlcIixLZS5tYWtlZGV2KDUsMCkpLEtlLm1rZGV2KFwiL2Rldi90dHkxXCIsS2UubWFrZWRldig2LDApKTt2YXIgZT1WZSgpO0tlLmNyZWF0ZURldmljZShcIi9kZXZcIixcInJhbmRvbVwiLGUpLEtlLmNyZWF0ZURldmljZShcIi9kZXZcIixcInVyYW5kb21cIixlKSxLZS5ta2RpcihcIi9kZXYvc2htXCIpLEtlLm1rZGlyKFwiL2Rldi9zaG0vdG1wXCIpfSxjcmVhdGVTcGVjaWFsRGlyZWN0b3JpZXM6KCk9PntLZS5ta2RpcihcIi9wcm9jXCIpO3ZhciBlPUtlLm1rZGlyKFwiL3Byb2Mvc2VsZlwiKTtLZS5ta2RpcihcIi9wcm9jL3NlbGYvZmRcIiksS2UubW91bnQoe21vdW50OigpPT57dmFyIHQ9S2UuY3JlYXRlTm9kZShlLFwiZmRcIiwxNjg5NSw3Myk7cmV0dXJuIHQubm9kZV9vcHM9e2xvb2t1cDooZSx0KT0+e3ZhciBuPSt0LHI9S2UuZ2V0U3RyZWFtKG4pO2lmKCFyKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDgpO3ZhciBpPXtwYXJlbnQ6bnVsbCxtb3VudDp7bW91bnRwb2ludDpcImZha2VcIn0sbm9kZV9vcHM6e3JlYWRsaW5rOigpPT5yLnBhdGh9fTtyZXR1cm4gaS5wYXJlbnQ9aSxpfX0sdH19LHt9LFwiL3Byb2Mvc2VsZi9mZFwiKX0sY3JlYXRlU3RhbmRhcmRTdHJlYW1zOigpPT57by5zdGRpbj9LZS5jcmVhdGVEZXZpY2UoXCIvZGV2XCIsXCJzdGRpblwiLG8uc3RkaW4pOktlLnN5bWxpbmsoXCIvZGV2L3R0eVwiLFwiL2Rldi9zdGRpblwiKSxvLnN0ZG91dD9LZS5jcmVhdGVEZXZpY2UoXCIvZGV2XCIsXCJzdGRvdXRcIixudWxsLG8uc3Rkb3V0KTpLZS5zeW1saW5rKFwiL2Rldi90dHlcIixcIi9kZXYvc3Rkb3V0XCIpLG8uc3RkZXJyP0tlLmNyZWF0ZURldmljZShcIi9kZXZcIixcInN0ZGVyclwiLG51bGwsby5zdGRlcnIpOktlLnN5bWxpbmsoXCIvZGV2L3R0eTFcIixcIi9kZXYvc3RkZXJyXCIpO3ZhciBlPUtlLm9wZW4oXCIvZGV2L3N0ZGluXCIsMCksdD1LZS5vcGVuKFwiL2Rldi9zdGRvdXRcIiwxKSxuPUtlLm9wZW4oXCIvZGV2L3N0ZGVyclwiLDEpO1AoMD09PWUuZmQsXCJpbnZhbGlkIGhhbmRsZSBmb3Igc3RkaW4gKFwiK2UuZmQrXCIpXCIpLFAoMT09PXQuZmQsXCJpbnZhbGlkIGhhbmRsZSBmb3Igc3Rkb3V0IChcIit0LmZkK1wiKVwiKSxQKDI9PT1uLmZkLFwiaW52YWxpZCBoYW5kbGUgZm9yIHN0ZGVyciAoXCIrbi5mZCtcIilcIil9LGVuc3VyZUVycm5vRXJyb3I6KCk9PntLZS5FcnJub0Vycm9yfHwoS2UuRXJybm9FcnJvcj1mdW5jdGlvbihlLHQpe3RoaXMubm9kZT10LHRoaXMuc2V0RXJybm89ZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIHRoaXMuZXJybm89ZSx6ZSlpZih6ZVt0XT09PWUpe3RoaXMuY29kZT10O2JyZWFrfX0sdGhpcy5zZXRFcnJubyhlKSx0aGlzLm1lc3NhZ2U9WmVbZV0sdGhpcy5zdGFjayYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwic3RhY2tcIix7dmFsdWU6KG5ldyBFcnJvcikuc3RhY2ssd3JpdGFibGU6ITB9KSx0aGlzLnN0YWNrPXRoaXMuc3RhY2sucmVwbGFjZSgvXFxiX1pbXFx3XFxkX10rL2csKGZ1bmN0aW9uKGUpe3ZhciB0LG49KHQ9ZSxiKFwid2FybmluZzogYnVpbGQgd2l0aCAtc0RFTUFOR0xFX1NVUFBPUlQgdG8gbGluayBpbiBsaWJjeHhhYmkgZGVtYW5nbGluZ1wiKSx0KTtyZXR1cm4gZT09PW4/ZTpuK1wiIFtcIitlK1wiXVwifSkpKX0sS2UuRXJybm9FcnJvci5wcm90b3R5cGU9bmV3IEVycm9yLEtlLkVycm5vRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yPUtlLkVycm5vRXJyb3IsWzQ0XS5mb3JFYWNoKChlPT57S2UuZ2VuZXJpY0Vycm9yc1tlXT1uZXcgS2UuRXJybm9FcnJvcihlKSxLZS5nZW5lcmljRXJyb3JzW2VdLnN0YWNrPVwiPGdlbmVyaWMgZXJyb3IsIG5vIHN0YWNrPlwifSkpKX0sc3RhdGljSW5pdDooKT0+e0tlLmVuc3VyZUVycm5vRXJyb3IoKSxLZS5uYW1lVGFibGU9bmV3IEFycmF5KDQwOTYpLEtlLm1vdW50KFdlLHt9LFwiL1wiKSxLZS5jcmVhdGVEZWZhdWx0RGlyZWN0b3JpZXMoKSxLZS5jcmVhdGVEZWZhdWx0RGV2aWNlcygpLEtlLmNyZWF0ZVNwZWNpYWxEaXJlY3RvcmllcygpLEtlLmZpbGVzeXN0ZW1zPXtNRU1GUzpXZSxJREJGUzpqZX19LGluaXQ6KGUsdCxuKT0+e1AoIUtlLmluaXQuaW5pdGlhbGl6ZWQsXCJGUy5pbml0IHdhcyBwcmV2aW91c2x5IGNhbGxlZC4gSWYgeW91IHdhbnQgdG8gaW5pdGlhbGl6ZSBsYXRlciB3aXRoIGN1c3RvbSBwYXJhbWV0ZXJzLCByZW1vdmUgYW55IGVhcmxpZXIgY2FsbHMgKG5vdGUgdGhhdCBvbmUgaXMgYXV0b21hdGljYWxseSBhZGRlZCB0byB0aGUgZ2VuZXJhdGVkIGNvZGUpXCIpLEtlLmluaXQuaW5pdGlhbGl6ZWQ9ITAsS2UuZW5zdXJlRXJybm9FcnJvcigpLG8uc3RkaW49ZXx8by5zdGRpbixvLnN0ZG91dD10fHxvLnN0ZG91dCxvLnN0ZGVycj1ufHxvLnN0ZGVycixLZS5jcmVhdGVTdGFuZGFyZFN0cmVhbXMoKX0scXVpdDooKT0+e0tlLmluaXQuaW5pdGlhbGl6ZWQ9ITEsQ24oKTtmb3IodmFyIGU9MDtlPEtlLnN0cmVhbXMubGVuZ3RoO2UrKyl7dmFyIHQ9S2Uuc3RyZWFtc1tlXTt0JiZLZS5jbG9zZSh0KX19LGdldE1vZGU6KGUsdCk9Pnt2YXIgbj0wO3JldHVybiBlJiYobnw9MzY1KSx0JiYobnw9MTQ2KSxufSxmaW5kT2JqZWN0OihlLHQpPT57dmFyIG49S2UuYW5hbHl6ZVBhdGgoZSx0KTtyZXR1cm4gbi5leGlzdHM/bi5vYmplY3Q6bnVsbH0sYW5hbHl6ZVBhdGg6KGUsdCk9Pnt0cnl7ZT0ocj1LZS5sb29rdXBQYXRoKGUse2ZvbGxvdzohdH0pKS5wYXRofWNhdGNoKGUpe312YXIgbj17aXNSb290OiExLGV4aXN0czohMSxlcnJvcjowLG5hbWU6bnVsbCxwYXRoOm51bGwsb2JqZWN0Om51bGwscGFyZW50RXhpc3RzOiExLHBhcmVudFBhdGg6bnVsbCxwYXJlbnRPYmplY3Q6bnVsbH07dHJ5e3ZhciByPUtlLmxvb2t1cFBhdGgoZSx7cGFyZW50OiEwfSk7bi5wYXJlbnRFeGlzdHM9ITAsbi5wYXJlbnRQYXRoPXIucGF0aCxuLnBhcmVudE9iamVjdD1yLm5vZGUsbi5uYW1lPUJlLmJhc2VuYW1lKGUpLHI9S2UubG9va3VwUGF0aChlLHtmb2xsb3c6IXR9KSxuLmV4aXN0cz0hMCxuLnBhdGg9ci5wYXRoLG4ub2JqZWN0PXIubm9kZSxuLm5hbWU9ci5ub2RlLm5hbWUsbi5pc1Jvb3Q9XCIvXCI9PT1yLnBhdGh9Y2F0Y2goZSl7bi5lcnJvcj1lLmVycm5vfXJldHVybiBufSxjcmVhdGVQYXRoOihlLHQsbixyKT0+e2U9XCJzdHJpbmdcIj09dHlwZW9mIGU/ZTpLZS5nZXRQYXRoKGUpO2Zvcih2YXIgaT10LnNwbGl0KFwiL1wiKS5yZXZlcnNlKCk7aS5sZW5ndGg7KXt2YXIgbz1pLnBvcCgpO2lmKG8pe3ZhciBhPUJlLmpvaW4yKGUsbyk7dHJ5e0tlLm1rZGlyKGEpfWNhdGNoKGUpe31lPWF9fXJldHVybiBhfSxjcmVhdGVGaWxlOihlLHQsbixyLGkpPT57dmFyIG89QmUuam9pbjIoXCJzdHJpbmdcIj09dHlwZW9mIGU/ZTpLZS5nZXRQYXRoKGUpLHQpLGE9S2UuZ2V0TW9kZShyLGkpO3JldHVybiBLZS5jcmVhdGUobyxhKX0sY3JlYXRlRGF0YUZpbGU6KGUsdCxuLHIsaSxvKT0+e3ZhciBhPXQ7ZSYmKGU9XCJzdHJpbmdcIj09dHlwZW9mIGU/ZTpLZS5nZXRQYXRoKGUpLGE9dD9CZS5qb2luMihlLHQpOmUpO3ZhciBzPUtlLmdldE1vZGUocixpKSxjPUtlLmNyZWF0ZShhLHMpO2lmKG4pe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuKXtmb3IodmFyIGw9bmV3IEFycmF5KG4ubGVuZ3RoKSx1PTAsZD1uLmxlbmd0aDt1PGQ7Kyt1KWxbdV09bi5jaGFyQ29kZUF0KHUpO249bH1LZS5jaG1vZChjLDE0NnxzKTt2YXIgZj1LZS5vcGVuKGMsNTc3KTtLZS53cml0ZShmLG4sMCxuLmxlbmd0aCwwLG8pLEtlLmNsb3NlKGYpLEtlLmNobW9kKGMscyl9cmV0dXJuIGN9LGNyZWF0ZURldmljZTooZSx0LG4scik9Pnt2YXIgaT1CZS5qb2luMihcInN0cmluZ1wiPT10eXBlb2YgZT9lOktlLmdldFBhdGgoZSksdCksbz1LZS5nZXRNb2RlKCEhbiwhIXIpO0tlLmNyZWF0ZURldmljZS5tYWpvcnx8KEtlLmNyZWF0ZURldmljZS5tYWpvcj02NCk7dmFyIGE9S2UubWFrZWRldihLZS5jcmVhdGVEZXZpY2UubWFqb3IrKywwKTtyZXR1cm4gS2UucmVnaXN0ZXJEZXZpY2UoYSx7b3BlbjplPT57ZS5zZWVrYWJsZT0hMX0sY2xvc2U6ZT0+e3ImJnIuYnVmZmVyJiZyLmJ1ZmZlci5sZW5ndGgmJnIoMTApfSxyZWFkOihlLHQscixpLG8pPT57Zm9yKHZhciBhPTAscz0wO3M8aTtzKyspe3ZhciBjO3RyeXtjPW4oKX1jYXRjaChlKXt0aHJvdyBuZXcgS2UuRXJybm9FcnJvcigyOSl9aWYodm9pZCAwPT09YyYmMD09PWEpdGhyb3cgbmV3IEtlLkVycm5vRXJyb3IoNik7aWYobnVsbD09YylicmVhazthKyssdFtyK3NdPWN9cmV0dXJuIGEmJihlLm5vZGUudGltZXN0YW1wPURhdGUubm93KCkpLGF9LHdyaXRlOihlLHQsbixpLG8pPT57Zm9yKHZhciBhPTA7YTxpO2ErKyl0cnl7cih0W24rYV0pfWNhdGNoKGUpe3Rocm93IG5ldyBLZS5FcnJub0Vycm9yKDI5KX1yZXR1cm4gaSYmKGUubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksYX19KSxLZS5ta2RldihpLG8sYSl9LGZvcmNlTG9hZEZpbGU6ZT0+e2lmKGUuaXNEZXZpY2V8fGUuaXNGb2xkZXJ8fGUubGlua3x8ZS5jb250ZW50cylyZXR1cm4hMDtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgWE1MSHR0cFJlcXVlc3QpdGhyb3cgbmV3IEVycm9yKFwiTGF6eSBsb2FkaW5nIHNob3VsZCBoYXZlIGJlZW4gcGVyZm9ybWVkIChjb250ZW50cyBzZXQpIGluIGNyZWF0ZUxhenlGaWxlLCBidXQgaXQgd2FzIG5vdC4gTGF6eSBsb2FkaW5nIG9ubHkgd29ya3MgaW4gd2ViIHdvcmtlcnMuIFVzZSAtLWVtYmVkLWZpbGUgb3IgLS1wcmVsb2FkLWZpbGUgaW4gZW1jYyBvbiB0aGUgbWFpbiB0aHJlYWQuXCIpO2lmKCFwKXRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBsb2FkIHdpdGhvdXQgcmVhZCgpIG9yIFhNTEh0dHBSZXF1ZXN0LlwiKTt0cnl7ZS5jb250ZW50cz15bihwKGUudXJsKSwhMCksZS51c2VkQnl0ZXM9ZS5jb250ZW50cy5sZW5ndGh9Y2F0Y2goZSl7dGhyb3cgbmV3IEtlLkVycm5vRXJyb3IoMjkpfX0sY3JlYXRlTGF6eUZpbGU6KGUsdCxuLHIsaSk9PntmdW5jdGlvbiBvKCl7dGhpcy5sZW5ndGhLbm93bj0hMSx0aGlzLmNodW5rcz1bXX1pZihvLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7aWYoIShlPnRoaXMubGVuZ3RoLTF8fGU8MCkpe3ZhciB0PWUldGhpcy5jaHVua1NpemUsbj1lL3RoaXMuY2h1bmtTaXplfDA7cmV0dXJuIHRoaXMuZ2V0dGVyKG4pW3RdfX0sby5wcm90b3R5cGUuc2V0RGF0YUdldHRlcj1mdW5jdGlvbihlKXt0aGlzLmdldHRlcj1lfSxvLnByb3RvdHlwZS5jYWNoZUxlbmd0aD1mdW5jdGlvbigpe3ZhciBlPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihlLm9wZW4oXCJIRUFEXCIsbiwhMSksZS5zZW5kKG51bGwpLCEoZS5zdGF0dXM+PTIwMCYmZS5zdGF0dXM8MzAwfHwzMDQ9PT1lLnN0YXR1cykpdGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgbG9hZCBcIituK1wiLiBTdGF0dXM6IFwiK2Uuc3RhdHVzKTt2YXIgdCxyPU51bWJlcihlLmdldFJlc3BvbnNlSGVhZGVyKFwiQ29udGVudC1sZW5ndGhcIikpLGk9KHQ9ZS5nZXRSZXNwb25zZUhlYWRlcihcIkFjY2VwdC1SYW5nZXNcIikpJiZcImJ5dGVzXCI9PT10LG89KHQ9ZS5nZXRSZXNwb25zZUhlYWRlcihcIkNvbnRlbnQtRW5jb2RpbmdcIikpJiZcImd6aXBcIj09PXQsYT0xMDQ4NTc2O2l8fChhPXIpO3ZhciBzPXRoaXM7cy5zZXREYXRhR2V0dGVyKChlPT57dmFyIHQ9ZSphLGk9KGUrMSkqYS0xO2lmKGk9TWF0aC5taW4oaSxyLTEpLHZvaWQgMD09PXMuY2h1bmtzW2VdJiYocy5jaHVua3NbZV09KChlLHQpPT57aWYoZT50KXRocm93IG5ldyBFcnJvcihcImludmFsaWQgcmFuZ2UgKFwiK2UrXCIsIFwiK3QrXCIpIG9yIG5vIGJ5dGVzIHJlcXVlc3RlZCFcIik7aWYodD5yLTEpdGhyb3cgbmV3IEVycm9yKFwib25seSBcIityK1wiIGJ5dGVzIGF2YWlsYWJsZSEgcHJvZ3JhbW1lciBlcnJvciFcIik7dmFyIGk9bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKGkub3BlbihcIkdFVFwiLG4sITEpLHIhPT1hJiZpLnNldFJlcXVlc3RIZWFkZXIoXCJSYW5nZVwiLFwiYnl0ZXM9XCIrZStcIi1cIit0KSxpLnJlc3BvbnNlVHlwZT1cImFycmF5YnVmZmVyXCIsaS5vdmVycmlkZU1pbWVUeXBlJiZpLm92ZXJyaWRlTWltZVR5cGUoXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXgtdXNlci1kZWZpbmVkXCIpLGkuc2VuZChudWxsKSwhKGkuc3RhdHVzPj0yMDAmJmkuc3RhdHVzPDMwMHx8MzA0PT09aS5zdGF0dXMpKXRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGxvYWQgXCIrbitcIi4gU3RhdHVzOiBcIitpLnN0YXR1cyk7cmV0dXJuIHZvaWQgMCE9PWkucmVzcG9uc2U/bmV3IFVpbnQ4QXJyYXkoaS5yZXNwb25zZXx8W10pOnluKGkucmVzcG9uc2VUZXh0fHxcIlwiLCEwKX0pKHQsaSkpLHZvaWQgMD09PXMuY2h1bmtzW2VdKXRocm93IG5ldyBFcnJvcihcImRvWEhSIGZhaWxlZCFcIik7cmV0dXJuIHMuY2h1bmtzW2VdfSkpLCFvJiZyfHwoYT1yPTEscj10aGlzLmdldHRlcigwKS5sZW5ndGgsYT1yLEkoXCJMYXp5RmlsZXMgb24gZ3ppcCBmb3JjZXMgZG93bmxvYWQgb2YgdGhlIHdob2xlIGZpbGUgd2hlbiBsZW5ndGggaXMgYWNjZXNzZWRcIikpLHRoaXMuX2xlbmd0aD1yLHRoaXMuX2NodW5rU2l6ZT1hLHRoaXMubGVuZ3RoS25vd249ITB9LFwidW5kZWZpbmVkXCIhPXR5cGVvZiBYTUxIdHRwUmVxdWVzdCl7aWYoIXUpdGhyb3dcIkNhbm5vdCBkbyBzeW5jaHJvbm91cyBiaW5hcnkgWEhScyBvdXRzaWRlIHdlYndvcmtlcnMgaW4gbW9kZXJuIGJyb3dzZXJzLiBVc2UgLS1lbWJlZC1maWxlIG9yIC0tcHJlbG9hZC1maWxlIGluIGVtY2NcIjt2YXIgYT1uZXcgbztPYmplY3QuZGVmaW5lUHJvcGVydGllcyhhLHtsZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aEtub3dufHx0aGlzLmNhY2hlTGVuZ3RoKCksdGhpcy5fbGVuZ3RofX0sY2h1bmtTaXplOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGhLbm93bnx8dGhpcy5jYWNoZUxlbmd0aCgpLHRoaXMuX2NodW5rU2l6ZX19fSk7dmFyIHM9e2lzRGV2aWNlOiExLGNvbnRlbnRzOmF9fWVsc2Ugcz17aXNEZXZpY2U6ITEsdXJsOm59O3ZhciBjPUtlLmNyZWF0ZUZpbGUoZSx0LHMscixpKTtzLmNvbnRlbnRzP2MuY29udGVudHM9cy5jb250ZW50czpzLnVybCYmKGMuY29udGVudHM9bnVsbCxjLnVybD1zLnVybCksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYyx7dXNlZEJ5dGVzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250ZW50cy5sZW5ndGh9fX0pO3ZhciBsPXt9O3JldHVybiBPYmplY3Qua2V5cyhjLnN0cmVhbV9vcHMpLmZvckVhY2goKGU9Pnt2YXIgdD1jLnN0cmVhbV9vcHNbZV07bFtlXT1mdW5jdGlvbigpe3JldHVybiBLZS5mb3JjZUxvYWRGaWxlKGMpLHQuYXBwbHkobnVsbCxhcmd1bWVudHMpfX0pKSxsLnJlYWQ9KGUsdCxuLHIsaSk9PntLZS5mb3JjZUxvYWRGaWxlKGMpO3ZhciBvPWUubm9kZS5jb250ZW50cztpZihpPj1vLmxlbmd0aClyZXR1cm4gMDt2YXIgYT1NYXRoLm1pbihvLmxlbmd0aC1pLHIpO2lmKFAoYT49MCksby5zbGljZSlmb3IodmFyIHM9MDtzPGE7cysrKXRbbitzXT1vW2krc107ZWxzZSBmb3Iocz0wO3M8YTtzKyspdFtuK3NdPW8uZ2V0KGkrcyk7cmV0dXJuIGF9LGMuc3RyZWFtX29wcz1sLGN9LGNyZWF0ZVByZWxvYWRlZEZpbGU6KGUsdCxuLHIsaSxvLGEscyxjLGwpPT57dmFyIHU9dD9HZS5yZXNvbHZlKEJlLmpvaW4yKGUsdCkpOmUsZD1JZShcImNwIFwiK3UpO2Z1bmN0aW9uIGYobil7ZnVuY3Rpb24gZihuKXtsJiZsKCksc3x8S2UuY3JlYXRlRGF0YUZpbGUoZSx0LG4scixpLGMpLG8mJm8oKSxiZShkKX1Ccm93c2VyLmhhbmRsZWRCeVByZWxvYWRQbHVnaW4obix1LGYsKCgpPT57YSYmYSgpLGJlKGQpfSkpfHxmKG4pfVNlKGQpLFwic3RyaW5nXCI9PXR5cGVvZiBuP2Z1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPUllKFwiYWwgXCIrZSk7bShlLChmdW5jdGlvbih0KXtQKHQsJ0xvYWRpbmcgZGF0YSBmaWxlIFwiJytlKydcIiBmYWlsZWQgKG5vIGFycmF5QnVmZmVyKS4nKSxmKG5ldyBVaW50OEFycmF5KHQpKSxpJiZiZShpKX0pLChmdW5jdGlvbih0KXtpZighbil0aHJvdydMb2FkaW5nIGRhdGEgZmlsZSBcIicrZSsnXCIgZmFpbGVkLic7bigpfSkpLGkmJlNlKGkpfShuLDAsYSk6ZihuKX0saW5kZXhlZERCOigpPT53aW5kb3cuaW5kZXhlZERCfHx3aW5kb3cubW96SW5kZXhlZERCfHx3aW5kb3cud2Via2l0SW5kZXhlZERCfHx3aW5kb3cubXNJbmRleGVkREIsREJfTkFNRTooKT0+XCJFTV9GU19cIit3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUsREJfVkVSU0lPTjoyMCxEQl9TVE9SRV9OQU1FOlwiRklMRV9EQVRBXCIsc2F2ZUZpbGVzVG9EQjooZSx0LG4pPT57dD10fHwoKCk9Pnt9KSxuPW58fCgoKT0+e30pO3ZhciByPUtlLmluZGV4ZWREQigpO3RyeXt2YXIgaT1yLm9wZW4oS2UuREJfTkFNRSgpLEtlLkRCX1ZFUlNJT04pfWNhdGNoKGUpe3JldHVybiBuKGUpfWkub251cGdyYWRlbmVlZGVkPSgpPT57SShcImNyZWF0aW5nIGRiXCIpLGkucmVzdWx0LmNyZWF0ZU9iamVjdFN0b3JlKEtlLkRCX1NUT1JFX05BTUUpfSxpLm9uc3VjY2Vzcz0oKT0+e3ZhciByPWkucmVzdWx0LnRyYW5zYWN0aW9uKFtLZS5EQl9TVE9SRV9OQU1FXSxcInJlYWR3cml0ZVwiKSxvPXIub2JqZWN0U3RvcmUoS2UuREJfU1RPUkVfTkFNRSksYT0wLHM9MCxjPWUubGVuZ3RoO2Z1bmN0aW9uIGwoKXswPT1zP3QoKTpuKCl9ZS5mb3JFYWNoKChlPT57dmFyIHQ9by5wdXQoS2UuYW5hbHl6ZVBhdGgoZSkub2JqZWN0LmNvbnRlbnRzLGUpO3Qub25zdWNjZXNzPSgpPT57KythK3M9PWMmJmwoKX0sdC5vbmVycm9yPSgpPT57cysrLGErcz09YyYmbCgpfX0pKSxyLm9uZXJyb3I9bn0saS5vbmVycm9yPW59LGxvYWRGaWxlc0Zyb21EQjooZSx0LG4pPT57dD10fHwoKCk9Pnt9KSxuPW58fCgoKT0+e30pO3ZhciByPUtlLmluZGV4ZWREQigpO3RyeXt2YXIgaT1yLm9wZW4oS2UuREJfTkFNRSgpLEtlLkRCX1ZFUlNJT04pfWNhdGNoKGUpe3JldHVybiBuKGUpfWkub251cGdyYWRlbmVlZGVkPW4saS5vbnN1Y2Nlc3M9KCk9Pnt2YXIgcj1pLnJlc3VsdDt0cnl7dmFyIG89ci50cmFuc2FjdGlvbihbS2UuREJfU1RPUkVfTkFNRV0sXCJyZWFkb25seVwiKX1jYXRjaChlKXtyZXR1cm4gdm9pZCBuKGUpfXZhciBhPW8ub2JqZWN0U3RvcmUoS2UuREJfU1RPUkVfTkFNRSkscz0wLGM9MCxsPWUubGVuZ3RoO2Z1bmN0aW9uIHUoKXswPT1jP3QoKTpuKCl9ZS5mb3JFYWNoKChlPT57dmFyIHQ9YS5nZXQoZSk7dC5vbnN1Y2Nlc3M9KCk9PntLZS5hbmFseXplUGF0aChlKS5leGlzdHMmJktlLnVubGluayhlKSxLZS5jcmVhdGVEYXRhRmlsZShCZS5kaXJuYW1lKGUpLEJlLmJhc2VuYW1lKGUpLHQucmVzdWx0LCEwLCEwLCEwKSwrK3MrYz09bCYmdSgpfSx0Lm9uZXJyb3I9KCk9PntjKysscytjPT1sJiZ1KCl9fSkpLG8ub25lcnJvcj1ufSxpLm9uZXJyb3I9bn0sYWJzb2x1dGVQYXRoOigpPT57VGUoXCJGUy5hYnNvbHV0ZVBhdGggaGFzIGJlZW4gcmVtb3ZlZDsgdXNlIFBBVEhfRlMucmVzb2x2ZSBpbnN0ZWFkXCIpfSxjcmVhdGVGb2xkZXI6KCk9PntUZShcIkZTLmNyZWF0ZUZvbGRlciBoYXMgYmVlbiByZW1vdmVkOyB1c2UgRlMubWtkaXIgaW5zdGVhZFwiKX0sY3JlYXRlTGluazooKT0+e1RlKFwiRlMuY3JlYXRlTGluayBoYXMgYmVlbiByZW1vdmVkOyB1c2UgRlMuc3ltbGluayBpbnN0ZWFkXCIpfSxqb2luUGF0aDooKT0+e1RlKFwiRlMuam9pblBhdGggaGFzIGJlZW4gcmVtb3ZlZDsgdXNlIFBBVEguam9pbiBpbnN0ZWFkXCIpfSxtbWFwQWxsb2M6KCk9PntUZShcIkZTLm1tYXBBbGxvYyBoYXMgYmVlbiByZXBsYWNlZCBieSB0aGUgdG9wIGxldmVsIGZ1bmN0aW9uIG1tYXBBbGxvY1wiKX0sc3RhbmRhcmRpemVQYXRoOigpPT57VGUoXCJGUy5zdGFuZGFyZGl6ZVBhdGggaGFzIGJlZW4gcmVtb3ZlZDsgdXNlIFBBVEgubm9ybWFsaXplIGluc3RlYWRcIil9fSxZZT17REVGQVVMVF9QT0xMTUFTSzo1LGNhbGN1bGF0ZUF0OmZ1bmN0aW9uKGUsdCxuKXtpZihCZS5pc0Ficyh0KSlyZXR1cm4gdDt2YXIgcjtpZigtMTAwPT09ZSlyPUtlLmN3ZCgpO2Vsc2V7dmFyIGk9S2UuZ2V0U3RyZWFtKGUpO2lmKCFpKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDgpO3I9aS5wYXRofWlmKDA9PXQubGVuZ3RoKXtpZighbil0aHJvdyBuZXcgS2UuRXJybm9FcnJvcig0NCk7cmV0dXJuIHJ9cmV0dXJuIEJlLmpvaW4yKHIsdCl9LGRvU3RhdDpmdW5jdGlvbihlLHQsbil7dHJ5e3ZhciByPWUodCl9Y2F0Y2goZSl7aWYoZSYmZS5ub2RlJiZCZS5ub3JtYWxpemUodCkhPT1CZS5ub3JtYWxpemUoS2UuZ2V0UGF0aChlLm5vZGUpKSlyZXR1cm4tNTQ7dGhyb3cgZX1yZXR1cm4gWltuPj4yXT1yLmRldixaW24rND4+Ml09MCxaW24rOD4+Ml09ci5pbm8sWltuKzEyPj4yXT1yLm1vZGUsWltuKzE2Pj4yXT1yLm5saW5rLFpbbisyMD4+Ml09ci51aWQsWltuKzI0Pj4yXT1yLmdpZCxaW24rMjg+PjJdPXIucmRldixaW24rMzI+PjJdPTAsWVtuKzQwPj4zXT1CaWdJbnQoci5zaXplKSxaW24rNDg+PjJdPTQwOTYsWltuKzUyPj4yXT1yLmJsb2NrcyxaW24rNTY+PjJdPXIuYXRpbWUuZ2V0VGltZSgpLzFlM3wwLFpbbis2MD4+Ml09MCxaW24rNjQ+PjJdPXIubXRpbWUuZ2V0VGltZSgpLzFlM3wwLFpbbis2OD4+Ml09MCxaW24rNzI+PjJdPXIuY3RpbWUuZ2V0VGltZSgpLzFlM3wwLFpbbis3Nj4+Ml09MCxZW24rODA+PjNdPUJpZ0ludChyLmlubyksMH0sZG9Nc3luYzpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPUguc2xpY2UoZSxlK24pO0tlLm1zeW5jKHQsbyxpLG4scil9LHZhcmFyZ3M6dm9pZCAwLGdldDpmdW5jdGlvbigpe3JldHVybiBQKG51bGwhPVllLnZhcmFyZ3MpLFllLnZhcmFyZ3MrPTQsWltZZS52YXJhcmdzLTQ+PjJdfSxnZXRTdHI6ZnVuY3Rpb24oZSl7cmV0dXJuIFUoZSl9LGdldFN0cmVhbUZyb21GRDpmdW5jdGlvbihlKXt2YXIgdD1LZS5nZXRTdHJlYW0oZSk7aWYoIXQpdGhyb3cgbmV3IEtlLkVycm5vRXJyb3IoOCk7cmV0dXJuIHR9fSxxZT17bW91bnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIG8ud2Vic29ja2V0PW8ud2Vic29ja2V0JiZcIm9iamVjdFwiPT10eXBlb2Ygby53ZWJzb2NrZXQ/by53ZWJzb2NrZXQ6e30sby53ZWJzb2NrZXQuX2NhbGxiYWNrcz17fSxvLndlYnNvY2tldC5vbj1mdW5jdGlvbihlLHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJih0aGlzLl9jYWxsYmFja3NbZV09dCksdGhpc30sby53ZWJzb2NrZXQuZW1pdD1mdW5jdGlvbihlLHQpe1wiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMuX2NhbGxiYWNrc1tlXSYmdGhpcy5fY2FsbGJhY2tzW2VdLmNhbGwodGhpcyx0KX0sS2UuY3JlYXRlTm9kZShudWxsLFwiL1wiLDE2ODk1LDApfSxjcmVhdGVTb2NrZXQ6ZnVuY3Rpb24oZSx0LG4pe2lmKDE9PSh0Jj0tNTI2MzM3KSYmbiYmNiE9bil0aHJvdyBuZXcgS2UuRXJybm9FcnJvcig2Nik7dmFyIHI9e2ZhbWlseTplLHR5cGU6dCxwcm90b2NvbDpuLHNlcnZlcjpudWxsLGVycm9yOm51bGwscGVlcnM6e30scGVuZGluZzpbXSxyZWN2X3F1ZXVlOltdLHNvY2tfb3BzOnFlLndlYnNvY2tldF9zb2NrX29wc30saT1xZS5uZXh0bmFtZSgpLG89S2UuY3JlYXRlTm9kZShxZS5yb290LGksNDkxNTIsMCk7by5zb2NrPXI7dmFyIGE9S2UuY3JlYXRlU3RyZWFtKHtwYXRoOmksbm9kZTpvLGZsYWdzOjIsc2Vla2FibGU6ITEsc3RyZWFtX29wczpxZS5zdHJlYW1fb3BzfSk7cmV0dXJuIHIuc3RyZWFtPWEscn0sZ2V0U29ja2V0OmZ1bmN0aW9uKGUpe3ZhciB0PUtlLmdldFN0cmVhbShlKTtyZXR1cm4gdCYmS2UuaXNTb2NrZXQodC5ub2RlLm1vZGUpP3Qubm9kZS5zb2NrOm51bGx9LHN0cmVhbV9vcHM6e3BvbGw6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlLnNvY2s7cmV0dXJuIHQuc29ja19vcHMucG9sbCh0KX0saW9jdGw6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUubm9kZS5zb2NrO3JldHVybiByLnNvY2tfb3BzLmlvY3RsKHIsdCxuKX0scmVhZDpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPWUubm9kZS5zb2NrLGE9by5zb2NrX29wcy5yZWN2bXNnKG8scik7cmV0dXJuIGE/KHQuc2V0KGEuYnVmZmVyLG4pLGEuYnVmZmVyLmxlbmd0aCk6MH0sd3JpdGU6ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbz1lLm5vZGUuc29jaztyZXR1cm4gby5zb2NrX29wcy5zZW5kbXNnKG8sdCxuLHIpfSxjbG9zZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGUuc29jazt0LnNvY2tfb3BzLmNsb3NlKHQpfX0sbmV4dG5hbWU6ZnVuY3Rpb24oKXtyZXR1cm4gcWUubmV4dG5hbWUuY3VycmVudHx8KHFlLm5leHRuYW1lLmN1cnJlbnQ9MCksXCJzb2NrZXRbXCIrcWUubmV4dG5hbWUuY3VycmVudCsrK1wiXVwifSx3ZWJzb2NrZXRfc29ja19vcHM6e2NyZWF0ZVBlZXI6ZnVuY3Rpb24oZSx0LHIpe3ZhciBpO2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0JiYoaT10LHQ9bnVsbCxyPW51bGwpLGkpaWYoaS5fc29ja2V0KXQ9aS5fc29ja2V0LnJlbW90ZUFkZHJlc3Mscj1pLl9zb2NrZXQucmVtb3RlUG9ydDtlbHNle3ZhciBhPS93c1tzXT86XFwvXFwvKFteOl0rKTooXFxkKykvLmV4ZWMoaS51cmwpO2lmKCFhKXRocm93IG5ldyBFcnJvcihcIldlYlNvY2tldCBVUkwgbXVzdCBiZSBpbiB0aGUgZm9ybWF0IHdzKHMpOi8vYWRkcmVzczpwb3J0XCIpO3Q9YVsxXSxyPXBhcnNlSW50KGFbMl0sMTApfWVsc2UgdHJ5e3ZhciBzPW8ud2Vic29ja2V0JiZcIm9iamVjdFwiPT10eXBlb2Ygby53ZWJzb2NrZXQsYz1cIndzOiNcIi5yZXBsYWNlKFwiI1wiLFwiLy9cIik7aWYocyYmXCJzdHJpbmdcIj09dHlwZW9mIG8ud2Vic29ja2V0LnVybCYmKGM9by53ZWJzb2NrZXQudXJsKSxcIndzOi8vXCI9PT1jfHxcIndzczovL1wiPT09Yyl7dmFyIGw9dC5zcGxpdChcIi9cIik7Yz1jK2xbMF0rXCI6XCIrcitcIi9cIitsLnNsaWNlKDEpLmpvaW4oXCIvXCIpfXZhciB1PVwiYmluYXJ5XCI7cyYmXCJzdHJpbmdcIj09dHlwZW9mIG8ud2Vic29ja2V0LnN1YnByb3RvY29sJiYodT1vLndlYnNvY2tldC5zdWJwcm90b2NvbCk7dmFyIGY9dm9pZCAwO1wibnVsbFwiIT09dSYmKGY9dT11LnJlcGxhY2UoL14gK3wgKyQvZyxcIlwiKS5zcGxpdCgvICosICovKSkscyYmbnVsbD09PW8ud2Vic29ja2V0LnN1YnByb3RvY29sJiYodT1cIm51bGxcIixmPXZvaWQgMCksKGk9bmV3KGQ/big1NzAyNik6V2ViU29ja2V0KShjLGYpKS5iaW5hcnlUeXBlPVwiYXJyYXlidWZmZXJcIn1jYXRjaChlKXt0aHJvdyBuZXcgS2UuRXJybm9FcnJvcigyMyl9dmFyIHA9e2FkZHI6dCxwb3J0OnIsc29ja2V0OmksZGdyYW1fc2VuZF9xdWV1ZTpbXX07cmV0dXJuIHFlLndlYnNvY2tldF9zb2NrX29wcy5hZGRQZWVyKGUscCkscWUud2Vic29ja2V0X3NvY2tfb3BzLmhhbmRsZVBlZXJFdmVudHMoZSxwKSwyPT09ZS50eXBlJiZ2b2lkIDAhPT1lLnNwb3J0JiZwLmRncmFtX3NlbmRfcXVldWUucHVzaChuZXcgVWludDhBcnJheShbMjU1LDI1NSwyNTUsMjU1LFwicFwiLmNoYXJDb2RlQXQoMCksXCJvXCIuY2hhckNvZGVBdCgwKSxcInJcIi5jaGFyQ29kZUF0KDApLFwidFwiLmNoYXJDb2RlQXQoMCksKDY1MjgwJmUuc3BvcnQpPj44LDI1NSZlLnNwb3J0XSkpLHB9LGdldFBlZXI6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlLnBlZXJzW3QrXCI6XCIrbl19LGFkZFBlZXI6ZnVuY3Rpb24oZSx0KXtlLnBlZXJzW3QuYWRkcitcIjpcIit0LnBvcnRdPXR9LHJlbW92ZVBlZXI6ZnVuY3Rpb24oZSx0KXtkZWxldGUgZS5wZWVyc1t0LmFkZHIrXCI6XCIrdC5wb3J0XX0saGFuZGxlUGVlckV2ZW50czpmdW5jdGlvbihlLHQpe3ZhciBuPSEwLHI9ZnVuY3Rpb24oKXtvLndlYnNvY2tldC5lbWl0KFwib3BlblwiLGUuc3RyZWFtLmZkKTt0cnl7Zm9yKHZhciBuPXQuZGdyYW1fc2VuZF9xdWV1ZS5zaGlmdCgpO247KXQuc29ja2V0LnNlbmQobiksbj10LmRncmFtX3NlbmRfcXVldWUuc2hpZnQoKX1jYXRjaChlKXt0LnNvY2tldC5jbG9zZSgpfX07ZnVuY3Rpb24gaShyKXtpZihcInN0cmluZ1wiPT10eXBlb2YgcilyPShuZXcgVGV4dEVuY29kZXIpLmVuY29kZShyKTtlbHNle2lmKFAodm9pZCAwIT09ci5ieXRlTGVuZ3RoKSwwPT1yLmJ5dGVMZW5ndGgpcmV0dXJuO3I9bmV3IFVpbnQ4QXJyYXkocil9dmFyIGk9bjtpZihuPSExLGkmJjEwPT09ci5sZW5ndGgmJjI1NT09PXJbMF0mJjI1NT09PXJbMV0mJjI1NT09PXJbMl0mJjI1NT09PXJbM10mJnJbNF09PT1cInBcIi5jaGFyQ29kZUF0KDApJiZyWzVdPT09XCJvXCIuY2hhckNvZGVBdCgwKSYmcls2XT09PVwiclwiLmNoYXJDb2RlQXQoMCkmJnJbN109PT1cInRcIi5jaGFyQ29kZUF0KDApKXt2YXIgYT1yWzhdPDw4fHJbOV07cmV0dXJuIHFlLndlYnNvY2tldF9zb2NrX29wcy5yZW1vdmVQZWVyKGUsdCksdC5wb3J0PWEsdm9pZCBxZS53ZWJzb2NrZXRfc29ja19vcHMuYWRkUGVlcihlLHQpfWUucmVjdl9xdWV1ZS5wdXNoKHthZGRyOnQuYWRkcixwb3J0OnQucG9ydCxkYXRhOnJ9KSxvLndlYnNvY2tldC5lbWl0KFwibWVzc2FnZVwiLGUuc3RyZWFtLmZkKX1kPyh0LnNvY2tldC5vbihcIm9wZW5cIixyKSx0LnNvY2tldC5vbihcIm1lc3NhZ2VcIiwoZnVuY3Rpb24oZSx0KXt0JiZpKG5ldyBVaW50OEFycmF5KGUpLmJ1ZmZlcil9KSksdC5zb2NrZXQub24oXCJjbG9zZVwiLChmdW5jdGlvbigpe28ud2Vic29ja2V0LmVtaXQoXCJjbG9zZVwiLGUuc3RyZWFtLmZkKX0pKSx0LnNvY2tldC5vbihcImVycm9yXCIsKGZ1bmN0aW9uKHQpe2UuZXJyb3I9MTQsby53ZWJzb2NrZXQuZW1pdChcImVycm9yXCIsW2Uuc3RyZWFtLmZkLGUuZXJyb3IsXCJFQ09OTlJFRlVTRUQ6IENvbm5lY3Rpb24gcmVmdXNlZFwiXSl9KSkpOih0LnNvY2tldC5vbm9wZW49cix0LnNvY2tldC5vbmNsb3NlPWZ1bmN0aW9uKCl7by53ZWJzb2NrZXQuZW1pdChcImNsb3NlXCIsZS5zdHJlYW0uZmQpfSx0LnNvY2tldC5vbm1lc3NhZ2U9ZnVuY3Rpb24oZSl7aShlLmRhdGEpfSx0LnNvY2tldC5vbmVycm9yPWZ1bmN0aW9uKHQpe2UuZXJyb3I9MTQsby53ZWJzb2NrZXQuZW1pdChcImVycm9yXCIsW2Uuc3RyZWFtLmZkLGUuZXJyb3IsXCJFQ09OTlJFRlVTRUQ6IENvbm5lY3Rpb24gcmVmdXNlZFwiXSl9KX0scG9sbDpmdW5jdGlvbihlKXtpZigxPT09ZS50eXBlJiZlLnNlcnZlcilyZXR1cm4gZS5wZW5kaW5nLmxlbmd0aD82NTowO3ZhciB0PTAsbj0xPT09ZS50eXBlP3FlLndlYnNvY2tldF9zb2NrX29wcy5nZXRQZWVyKGUsZS5kYWRkcixlLmRwb3J0KTpudWxsO3JldHVybihlLnJlY3ZfcXVldWUubGVuZ3RofHwhbnx8biYmbi5zb2NrZXQucmVhZHlTdGF0ZT09PW4uc29ja2V0LkNMT1NJTkd8fG4mJm4uc29ja2V0LnJlYWR5U3RhdGU9PT1uLnNvY2tldC5DTE9TRUQpJiYodHw9NjUpLCghbnx8biYmbi5zb2NrZXQucmVhZHlTdGF0ZT09PW4uc29ja2V0Lk9QRU4pJiYodHw9NCksKG4mJm4uc29ja2V0LnJlYWR5U3RhdGU9PT1uLnNvY2tldC5DTE9TSU5HfHxuJiZuLnNvY2tldC5yZWFkeVN0YXRlPT09bi5zb2NrZXQuQ0xPU0VEKSYmKHR8PTE2KSx0fSxpb2N0bDpmdW5jdGlvbihlLHQsbil7aWYoMjE1MzE9PT10KXt2YXIgcj0wO3JldHVybiBlLnJlY3ZfcXVldWUubGVuZ3RoJiYocj1lLnJlY3ZfcXVldWVbMF0uZGF0YS5sZW5ndGgpLFpbbj4+Ml09ciwwfXJldHVybiAyOH0sY2xvc2U6ZnVuY3Rpb24oZSl7aWYoZS5zZXJ2ZXIpe3RyeXtlLnNlcnZlci5jbG9zZSgpfWNhdGNoKGUpe31lLnNlcnZlcj1udWxsfWZvcih2YXIgdD1PYmplY3Qua2V5cyhlLnBlZXJzKSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPWUucGVlcnNbdFtuXV07dHJ5e3Iuc29ja2V0LmNsb3NlKCl9Y2F0Y2goZSl7fXFlLndlYnNvY2tldF9zb2NrX29wcy5yZW1vdmVQZWVyKGUscil9cmV0dXJuIDB9LGJpbmQ6ZnVuY3Rpb24oZSx0LG4pe2lmKHZvaWQgMCE9PWUuc2FkZHJ8fHZvaWQgMCE9PWUuc3BvcnQpdGhyb3cgbmV3IEtlLkVycm5vRXJyb3IoMjgpO2lmKGUuc2FkZHI9dCxlLnNwb3J0PW4sMj09PWUudHlwZSl7ZS5zZXJ2ZXImJihlLnNlcnZlci5jbG9zZSgpLGUuc2VydmVyPW51bGwpO3RyeXtlLnNvY2tfb3BzLmxpc3RlbihlLDApfWNhdGNoKGUpe2lmKCEoZSBpbnN0YW5jZW9mIEtlLkVycm5vRXJyb3IpKXRocm93IGU7aWYoMTM4IT09ZS5lcnJubyl0aHJvdyBlfX19LGNvbm5lY3Q6ZnVuY3Rpb24oZSx0LG4pe2lmKGUuc2VydmVyKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDEzOCk7aWYodm9pZCAwIT09ZS5kYWRkciYmdm9pZCAwIT09ZS5kcG9ydCl7dmFyIHI9cWUud2Vic29ja2V0X3NvY2tfb3BzLmdldFBlZXIoZSxlLmRhZGRyLGUuZHBvcnQpO2lmKHIpdGhyb3cgci5zb2NrZXQucmVhZHlTdGF0ZT09PXIuc29ja2V0LkNPTk5FQ1RJTkc/bmV3IEtlLkVycm5vRXJyb3IoNyk6bmV3IEtlLkVycm5vRXJyb3IoMzApfXZhciBpPXFlLndlYnNvY2tldF9zb2NrX29wcy5jcmVhdGVQZWVyKGUsdCxuKTt0aHJvdyBlLmRhZGRyPWkuYWRkcixlLmRwb3J0PWkucG9ydCxuZXcgS2UuRXJybm9FcnJvcigyNil9LGxpc3RlbjpmdW5jdGlvbihlLHQpe2lmKCFkKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDEzOCk7aWYoZS5zZXJ2ZXIpdGhyb3cgbmV3IEtlLkVycm5vRXJyb3IoMjgpO3ZhciByPW4oNTcwMjYpLlNlcnZlcixpPWUuc2FkZHI7ZS5zZXJ2ZXI9bmV3IHIoe2hvc3Q6aSxwb3J0OmUuc3BvcnR9KSxvLndlYnNvY2tldC5lbWl0KFwibGlzdGVuXCIsZS5zdHJlYW0uZmQpLGUuc2VydmVyLm9uKFwiY29ubmVjdGlvblwiLChmdW5jdGlvbih0KXtpZigxPT09ZS50eXBlKXt2YXIgbj1xZS5jcmVhdGVTb2NrZXQoZS5mYW1pbHksZS50eXBlLGUucHJvdG9jb2wpLHI9cWUud2Vic29ja2V0X3NvY2tfb3BzLmNyZWF0ZVBlZXIobix0KTtuLmRhZGRyPXIuYWRkcixuLmRwb3J0PXIucG9ydCxlLnBlbmRpbmcucHVzaChuKSxvLndlYnNvY2tldC5lbWl0KFwiY29ubmVjdGlvblwiLG4uc3RyZWFtLmZkKX1lbHNlIHFlLndlYnNvY2tldF9zb2NrX29wcy5jcmVhdGVQZWVyKGUsdCksby53ZWJzb2NrZXQuZW1pdChcImNvbm5lY3Rpb25cIixlLnN0cmVhbS5mZCl9KSksZS5zZXJ2ZXIub24oXCJjbG9zZVwiLChmdW5jdGlvbigpe28ud2Vic29ja2V0LmVtaXQoXCJjbG9zZVwiLGUuc3RyZWFtLmZkKSxlLnNlcnZlcj1udWxsfSkpLGUuc2VydmVyLm9uKFwiZXJyb3JcIiwoZnVuY3Rpb24odCl7ZS5lcnJvcj0yMyxvLndlYnNvY2tldC5lbWl0KFwiZXJyb3JcIixbZS5zdHJlYW0uZmQsZS5lcnJvcixcIkVIT1NUVU5SRUFDSDogSG9zdCBpcyB1bnJlYWNoYWJsZVwiXSl9KSl9LGFjY2VwdDpmdW5jdGlvbihlKXtpZighZS5zZXJ2ZXJ8fCFlLnBlbmRpbmcubGVuZ3RoKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDI4KTt2YXIgdD1lLnBlbmRpbmcuc2hpZnQoKTtyZXR1cm4gdC5zdHJlYW0uZmxhZ3M9ZS5zdHJlYW0uZmxhZ3MsdH0sZ2V0bmFtZTpmdW5jdGlvbihlLHQpe3ZhciBuLHI7aWYodCl7aWYodm9pZCAwPT09ZS5kYWRkcnx8dm9pZCAwPT09ZS5kcG9ydCl0aHJvdyBuZXcgS2UuRXJybm9FcnJvcig1Myk7bj1lLmRhZGRyLHI9ZS5kcG9ydH1lbHNlIG49ZS5zYWRkcnx8MCxyPWUuc3BvcnR8fDA7cmV0dXJue2FkZHI6bixwb3J0OnJ9fSxzZW5kbXNnOmZ1bmN0aW9uKGUsdCxuLHIsaSxvKXtpZigyPT09ZS50eXBlKXtpZih2b2lkIDAhPT1pJiZ2b2lkIDAhPT1vfHwoaT1lLmRhZGRyLG89ZS5kcG9ydCksdm9pZCAwPT09aXx8dm9pZCAwPT09byl0aHJvdyBuZXcgS2UuRXJybm9FcnJvcigxNyl9ZWxzZSBpPWUuZGFkZHIsbz1lLmRwb3J0O3ZhciBhLHM9cWUud2Vic29ja2V0X3NvY2tfb3BzLmdldFBlZXIoZSxpLG8pO2lmKDE9PT1lLnR5cGUpe2lmKCFzfHxzLnNvY2tldC5yZWFkeVN0YXRlPT09cy5zb2NrZXQuQ0xPU0lOR3x8cy5zb2NrZXQucmVhZHlTdGF0ZT09PXMuc29ja2V0LkNMT1NFRCl0aHJvdyBuZXcgS2UuRXJybm9FcnJvcig1Myk7aWYocy5zb2NrZXQucmVhZHlTdGF0ZT09PXMuc29ja2V0LkNPTk5FQ1RJTkcpdGhyb3cgbmV3IEtlLkVycm5vRXJyb3IoNil9aWYoQXJyYXlCdWZmZXIuaXNWaWV3KHQpJiYobis9dC5ieXRlT2Zmc2V0LHQ9dC5idWZmZXIpLGE9dC5zbGljZShuLG4rciksMj09PWUudHlwZSYmKCFzfHxzLnNvY2tldC5yZWFkeVN0YXRlIT09cy5zb2NrZXQuT1BFTikpcmV0dXJuIHMmJnMuc29ja2V0LnJlYWR5U3RhdGUhPT1zLnNvY2tldC5DTE9TSU5HJiZzLnNvY2tldC5yZWFkeVN0YXRlIT09cy5zb2NrZXQuQ0xPU0VEfHwocz1xZS53ZWJzb2NrZXRfc29ja19vcHMuY3JlYXRlUGVlcihlLGksbykpLHMuZGdyYW1fc2VuZF9xdWV1ZS5wdXNoKGEpLHI7dHJ5e3JldHVybiBzLnNvY2tldC5zZW5kKGEpLHJ9Y2F0Y2goZSl7dGhyb3cgbmV3IEtlLkVycm5vRXJyb3IoMjgpfX0scmVjdm1zZzpmdW5jdGlvbihlLHQpe2lmKDE9PT1lLnR5cGUmJmUuc2VydmVyKXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDUzKTt2YXIgbj1lLnJlY3ZfcXVldWUuc2hpZnQoKTtpZighbil7aWYoMT09PWUudHlwZSl7dmFyIHI9cWUud2Vic29ja2V0X3NvY2tfb3BzLmdldFBlZXIoZSxlLmRhZGRyLGUuZHBvcnQpO2lmKHIpe2lmKHIuc29ja2V0LnJlYWR5U3RhdGU9PT1yLnNvY2tldC5DTE9TSU5HfHxyLnNvY2tldC5yZWFkeVN0YXRlPT09ci5zb2NrZXQuQ0xPU0VEKXJldHVybiBudWxsO3Rocm93IG5ldyBLZS5FcnJub0Vycm9yKDYpfXRocm93IG5ldyBLZS5FcnJub0Vycm9yKDUzKX10aHJvdyBuZXcgS2UuRXJybm9FcnJvcig2KX12YXIgaT1uLmRhdGEuYnl0ZUxlbmd0aHx8bi5kYXRhLmxlbmd0aCxvPW4uZGF0YS5ieXRlT2Zmc2V0fHwwLGE9bi5kYXRhLmJ1ZmZlcnx8bi5kYXRhLHM9TWF0aC5taW4odCxpKSxjPXtidWZmZXI6bmV3IFVpbnQ4QXJyYXkoYSxvLHMpLGFkZHI6bi5hZGRyLHBvcnQ6bi5wb3J0fTtpZigxPT09ZS50eXBlJiZzPGkpe3ZhciBsPWktcztuLmRhdGE9bmV3IFVpbnQ4QXJyYXkoYSxvK3MsbCksZS5yZWN2X3F1ZXVlLnVuc2hpZnQobil9cmV0dXJuIGN9fX0sWGU9XCJUbyB1c2UgZGxvcGVuLCB5b3UgbmVlZCBlbmFibGUgZHluYW1pYyBsaW5raW5nLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Vtc2NyaXB0ZW4tY29yZS9lbXNjcmlwdGVuL3dpa2kvTGlua2luZ1wiO2Z1bmN0aW9uIFFlKGUpe2lmKG51bGw9PT1lKXJldHVyblwibnVsbFwiO3ZhciB0PXR5cGVvZiBlO3JldHVyblwib2JqZWN0XCI9PT10fHxcImFycmF5XCI9PT10fHxcImZ1bmN0aW9uXCI9PT10P2UudG9TdHJpbmcoKTpcIlwiK2V9dmFyIEplPXZvaWQgMDtmdW5jdGlvbiAkZShlKXtmb3IodmFyIHQ9XCJcIixuPWU7SFtuXTspdCs9SmVbSFtuKytdXTtyZXR1cm4gdH12YXIgZXQ9e30sdHQ9e30sbnQ9e30scnQ9NDgsaXQ9NTc7ZnVuY3Rpb24gb3QoZSl7aWYodm9pZCAwPT09ZSlyZXR1cm5cIl91bmtub3duXCI7dmFyIHQ9KGU9ZS5yZXBsYWNlKC9bXmEtekEtWjAtOV9dL2csXCIkXCIpKS5jaGFyQ29kZUF0KDApO3JldHVybiB0Pj1ydCYmdDw9aXQ/XCJfXCIrZTplfWZ1bmN0aW9uIGF0KGUsdCl7cmV0dXJuIGU9b3QoZSksZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIHN0KGUsdCl7dmFyIG49YXQodCwoZnVuY3Rpb24oZSl7dGhpcy5uYW1lPXQsdGhpcy5tZXNzYWdlPWU7dmFyIG49bmV3IEVycm9yKGUpLnN0YWNrO3ZvaWQgMCE9PW4mJih0aGlzLnN0YWNrPXRoaXMudG9TdHJpbmcoKStcIlxcblwiK24ucmVwbGFjZSgvXkVycm9yKDpbXlxcbl0qKT9cXG4vLFwiXCIpKX0pKTtyZXR1cm4gbi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSksbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bixuLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlzLm1lc3NhZ2U/dGhpcy5uYW1lOnRoaXMubmFtZStcIjogXCIrdGhpcy5tZXNzYWdlfSxufXZhciBjdD12b2lkIDA7ZnVuY3Rpb24gbHQoZSl7dGhyb3cgbmV3IGN0KGUpfXZhciB1dD12b2lkIDA7ZnVuY3Rpb24gZHQoZSl7dGhyb3cgbmV3IHV0KGUpfWZ1bmN0aW9uIGZ0KGUsdCxuKXtmdW5jdGlvbiByKHQpe3ZhciByPW4odCk7ci5sZW5ndGghPT1lLmxlbmd0aCYmZHQoXCJNaXNtYXRjaGVkIHR5cGUgY29udmVydGVyIGNvdW50XCIpO2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7KytpKXB0KGVbaV0scltpXSl9ZS5mb3JFYWNoKChmdW5jdGlvbihlKXtudFtlXT10fSkpO3ZhciBpPW5ldyBBcnJheSh0Lmxlbmd0aCksbz1bXSxhPTA7dC5mb3JFYWNoKCgoZSx0KT0+e3R0Lmhhc093blByb3BlcnR5KGUpP2lbdF09dHRbZV06KG8ucHVzaChlKSxldC5oYXNPd25Qcm9wZXJ0eShlKXx8KGV0W2VdPVtdKSxldFtlXS5wdXNoKCgoKT0+e2lbdF09dHRbZV0sKythPT09by5sZW5ndGgmJnIoaSl9KSkpfSkpLDA9PT1vLmxlbmd0aCYmcihpKX1mdW5jdGlvbiBwdChlLHQpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtpZighKFwiYXJnUGFja0FkdmFuY2VcImluIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJyZWdpc3RlclR5cGUgcmVnaXN0ZXJlZEluc3RhbmNlIHJlcXVpcmVzIGFyZ1BhY2tBZHZhbmNlXCIpO3ZhciByPXQubmFtZTtpZihlfHxsdCgndHlwZSBcIicrcisnXCIgbXVzdCBoYXZlIGEgcG9zaXRpdmUgaW50ZWdlciB0eXBlaWQgcG9pbnRlcicpLHR0Lmhhc093blByb3BlcnR5KGUpKXtpZihuLmlnbm9yZUR1cGxpY2F0ZVJlZ2lzdHJhdGlvbnMpcmV0dXJuO2x0KFwiQ2Fubm90IHJlZ2lzdGVyIHR5cGUgJ1wiK3IrXCInIHR3aWNlXCIpfWlmKHR0W2VdPXQsZGVsZXRlIG50W2VdLGV0Lmhhc093blByb3BlcnR5KGUpKXt2YXIgaT1ldFtlXTtkZWxldGUgZXRbZV0saS5mb3JFYWNoKChlPT5lKCkpKX19ZnVuY3Rpb24gbXQoZSx0LG4pe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIG4/ZnVuY3Rpb24oZSl7cmV0dXJuIEdbZV19OmZ1bmN0aW9uKGUpe3JldHVybiBIW2VdfTtjYXNlIDE6cmV0dXJuIG4/ZnVuY3Rpb24oZSl7cmV0dXJuIFdbZT4+MV19OmZ1bmN0aW9uKGUpe3JldHVybiBqW2U+PjFdfTtjYXNlIDI6cmV0dXJuIG4/ZnVuY3Rpb24oZSl7cmV0dXJuIFpbZT4+Ml19OmZ1bmN0aW9uKGUpe3JldHVybiB6W2U+PjJdfTtjYXNlIDM6cmV0dXJuIG4/ZnVuY3Rpb24oZSl7cmV0dXJuIFlbZT4+M119OmZ1bmN0aW9uKGUpe3JldHVybiBxW2U+PjNdfTtkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmtub3duIGludGVnZXIgdHlwZTogXCIrZSl9fWZ1bmN0aW9uIGh0KGUpe3N3aXRjaChlKXtjYXNlIDE6cmV0dXJuIDA7Y2FzZSAyOnJldHVybiAxO2Nhc2UgNDpyZXR1cm4gMjtjYXNlIDg6cmV0dXJuIDM7ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biB0eXBlIHNpemU6IFwiK2UpfX1mdW5jdGlvbiB2dChlKXtsdChlLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLm5hbWUrXCIgaW5zdGFuY2UgYWxyZWFkeSBkZWxldGVkXCIpfXZhciBndD0hMTtmdW5jdGlvbiB5dChlKXt9ZnVuY3Rpb24gRXQoZSl7ZS5jb3VudC52YWx1ZS09MSwwPT09ZS5jb3VudC52YWx1ZSYmZnVuY3Rpb24oZSl7ZS5zbWFydFB0cj9lLnNtYXJ0UHRyVHlwZS5yYXdEZXN0cnVjdG9yKGUuc21hcnRQdHIpOmUucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3MucmF3RGVzdHJ1Y3RvcihlLnB0cil9KGUpfWZ1bmN0aW9uIF90KGUsdCxuKXtpZih0PT09bilyZXR1cm4gZTtpZih2b2lkIDA9PT1uLmJhc2VDbGFzcylyZXR1cm4gbnVsbDt2YXIgcj1fdChlLHQsbi5iYXNlQ2xhc3MpO3JldHVybiBudWxsPT09cj9udWxsOm4uZG93bmNhc3Qocil9dmFyIEl0PXt9LFN0PVtdO2Z1bmN0aW9uIGJ0KCl7Zm9yKDtTdC5sZW5ndGg7KXt2YXIgZT1TdC5wb3AoKTtlLiQkLmRlbGV0ZVNjaGVkdWxlZD0hMSxlLmRlbGV0ZSgpfX12YXIgVHQ9dm9pZCAwLEN0PXt9O2Z1bmN0aW9uIEF0KGUsdCl7cmV0dXJuIHQucHRyVHlwZSYmdC5wdHJ8fGR0KFwibWFrZUNsYXNzSGFuZGxlIHJlcXVpcmVzIHB0ciBhbmQgcHRyVHlwZVwiKSwhIXQuc21hcnRQdHJUeXBlIT0hIXQuc21hcnRQdHImJmR0KFwiQm90aCBzbWFydFB0clR5cGUgYW5kIHNtYXJ0UHRyIG11c3QgYmUgc3BlY2lmaWVkXCIpLHQuY291bnQ9e3ZhbHVlOjF9LGt0KE9iamVjdC5jcmVhdGUoZSx7JCQ6e3ZhbHVlOnR9fSkpfWZ1bmN0aW9uIFJ0KGUpe3ZhciB0PXRoaXMuZ2V0UG9pbnRlZShlKTtpZighdClyZXR1cm4gdGhpcy5kZXN0cnVjdG9yKGUpLG51bGw7dmFyIG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD1mdW5jdGlvbihlLHQpe2Zvcih2b2lkIDA9PT10JiZsdChcInB0ciBzaG91bGQgbm90IGJlIHVuZGVmaW5lZFwiKTtlLmJhc2VDbGFzczspdD1lLnVwY2FzdCh0KSxlPWUuYmFzZUNsYXNzO3JldHVybiB0fShlLHQpLEN0W3RdfSh0aGlzLnJlZ2lzdGVyZWRDbGFzcyx0KTtpZih2b2lkIDAhPT1uKXtpZigwPT09bi4kJC5jb3VudC52YWx1ZSlyZXR1cm4gbi4kJC5wdHI9dCxuLiQkLnNtYXJ0UHRyPWUsbi5jbG9uZSgpO3ZhciByPW4uY2xvbmUoKTtyZXR1cm4gdGhpcy5kZXN0cnVjdG9yKGUpLHJ9ZnVuY3Rpb24gaSgpe3JldHVybiB0aGlzLmlzU21hcnRQb2ludGVyP0F0KHRoaXMucmVnaXN0ZXJlZENsYXNzLmluc3RhbmNlUHJvdG90eXBlLHtwdHJUeXBlOnRoaXMucG9pbnRlZVR5cGUscHRyOnQsc21hcnRQdHJUeXBlOnRoaXMsc21hcnRQdHI6ZX0pOkF0KHRoaXMucmVnaXN0ZXJlZENsYXNzLmluc3RhbmNlUHJvdG90eXBlLHtwdHJUeXBlOnRoaXMscHRyOmV9KX12YXIgbyxhPXRoaXMucmVnaXN0ZXJlZENsYXNzLmdldEFjdHVhbFR5cGUodCkscz1JdFthXTtpZighcylyZXR1cm4gaS5jYWxsKHRoaXMpO289dGhpcy5pc0NvbnN0P3MuY29uc3RQb2ludGVyVHlwZTpzLnBvaW50ZXJUeXBlO3ZhciBjPV90KHQsdGhpcy5yZWdpc3RlcmVkQ2xhc3Msby5yZWdpc3RlcmVkQ2xhc3MpO3JldHVybiBudWxsPT09Yz9pLmNhbGwodGhpcyk6dGhpcy5pc1NtYXJ0UG9pbnRlcj9BdChvLnJlZ2lzdGVyZWRDbGFzcy5pbnN0YW5jZVByb3RvdHlwZSx7cHRyVHlwZTpvLHB0cjpjLHNtYXJ0UHRyVHlwZTp0aGlzLHNtYXJ0UHRyOmV9KTpBdChvLnJlZ2lzdGVyZWRDbGFzcy5pbnN0YW5jZVByb3RvdHlwZSx7cHRyVHlwZTpvLHB0cjpjfSl9ZnVuY3Rpb24ga3QoZSl7cmV0dXJuXCJ1bmRlZmluZWRcIj09dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5PyhrdD1lPT5lLGUpOihndD1uZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoKGU9Pntjb25zb2xlLndhcm4oZS5sZWFrV2FybmluZy5zdGFjay5yZXBsYWNlKC9eRXJyb3I6IC8sXCJcIikpLEV0KGUuJCQpfSkpLGt0PWU9Pnt2YXIgdD1lLiQkO2lmKHQuc21hcnRQdHIpe3ZhciBuPXskJDp0fSxyPXQucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3M7bi5sZWFrV2FybmluZz1uZXcgRXJyb3IoXCJFbWJpbmQgZm91bmQgYSBsZWFrZWQgQysrIGluc3RhbmNlIFwiK3IubmFtZStcIiA8MHhcIit0LnB0ci50b1N0cmluZygxNikrXCI+LlxcbldlJ2xsIGZyZWUgaXQgYXV0b21hdGljYWxseSBpbiB0aGlzIGNhc2UsIGJ1dCB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgbm90IHJlbGlhYmxlIGFjcm9zcyB2YXJpb3VzIGVudmlyb25tZW50cy5cXG5NYWtlIHN1cmUgdG8gaW52b2tlIC5kZWxldGUoKSBtYW51YWxseSBvbmNlIHlvdSdyZSBkb25lIHdpdGggdGhlIGluc3RhbmNlIGluc3RlYWQuXFxuT3JpZ2luYWxseSBhbGxvY2F0ZWRcIiksXCJjYXB0dXJlU3RhY2tUcmFjZVwiaW4gRXJyb3ImJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKG4ubGVha1dhcm5pbmcsUnQpLGd0LnJlZ2lzdGVyKGUsbixlKX1yZXR1cm4gZX0seXQ9ZT0+Z3QudW5yZWdpc3RlcihlKSxrdChlKSl9ZnVuY3Rpb24gT3QoKXt9ZnVuY3Rpb24gTnQoZSx0LG4pe2lmKHZvaWQgMD09PWVbdF0ub3ZlcmxvYWRUYWJsZSl7dmFyIHI9ZVt0XTtlW3RdPWZ1bmN0aW9uKCl7cmV0dXJuIGVbdF0ub3ZlcmxvYWRUYWJsZS5oYXNPd25Qcm9wZXJ0eShhcmd1bWVudHMubGVuZ3RoKXx8bHQoXCJGdW5jdGlvbiAnXCIrbitcIicgY2FsbGVkIHdpdGggYW4gaW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIChcIithcmd1bWVudHMubGVuZ3RoK1wiKSAtIGV4cGVjdHMgb25lIG9mIChcIitlW3RdLm92ZXJsb2FkVGFibGUrXCIpIVwiKSxlW3RdLm92ZXJsb2FkVGFibGVbYXJndW1lbnRzLmxlbmd0aF0uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxlW3RdLm92ZXJsb2FkVGFibGU9W10sZVt0XS5vdmVybG9hZFRhYmxlW3IuYXJnQ291bnRdPXJ9fWZ1bmN0aW9uIHd0KGUsdCxuKXtvLmhhc093blByb3BlcnR5KGUpPygodm9pZCAwPT09bnx8dm9pZCAwIT09b1tlXS5vdmVybG9hZFRhYmxlJiZ2b2lkIDAhPT1vW2VdLm92ZXJsb2FkVGFibGVbbl0pJiZsdChcIkNhbm5vdCByZWdpc3RlciBwdWJsaWMgbmFtZSAnXCIrZStcIicgdHdpY2VcIiksTnQobyxlLGUpLG8uaGFzT3duUHJvcGVydHkobikmJmx0KFwiQ2Fubm90IHJlZ2lzdGVyIG11bHRpcGxlIG92ZXJsb2FkcyBvZiBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mIGFyZ3VtZW50cyAoXCIrbitcIikhXCIpLG9bZV0ub3ZlcmxvYWRUYWJsZVtuXT10KToob1tlXT10LHZvaWQgMCE9PW4mJihvW2VdLm51bUFyZ3VtZW50cz1uKSl9ZnVuY3Rpb24gRHQoZSx0LG4scixpLG8sYSxzKXt0aGlzLm5hbWU9ZSx0aGlzLmNvbnN0cnVjdG9yPXQsdGhpcy5pbnN0YW5jZVByb3RvdHlwZT1uLHRoaXMucmF3RGVzdHJ1Y3Rvcj1yLHRoaXMuYmFzZUNsYXNzPWksdGhpcy5nZXRBY3R1YWxUeXBlPW8sdGhpcy51cGNhc3Q9YSx0aGlzLmRvd25jYXN0PXMsdGhpcy5wdXJlVmlydHVhbEZ1bmN0aW9ucz1bXX1mdW5jdGlvbiBQdChlLHQsbil7Zm9yKDt0IT09bjspdC51cGNhc3R8fGx0KFwiRXhwZWN0ZWQgbnVsbCBvciBpbnN0YW5jZSBvZiBcIituLm5hbWUrXCIsIGdvdCBhbiBpbnN0YW5jZSBvZiBcIit0Lm5hbWUpLGU9dC51cGNhc3QoZSksdD10LmJhc2VDbGFzcztyZXR1cm4gZX1mdW5jdGlvbiBNdChlLHQpe2lmKG51bGw9PT10KXJldHVybiB0aGlzLmlzUmVmZXJlbmNlJiZsdChcIm51bGwgaXMgbm90IGEgdmFsaWQgXCIrdGhpcy5uYW1lKSwwO3QuJCR8fGx0KCdDYW5ub3QgcGFzcyBcIicrUWUodCkrJ1wiIGFzIGEgJyt0aGlzLm5hbWUpLHQuJCQucHRyfHxsdChcIkNhbm5vdCBwYXNzIGRlbGV0ZWQgb2JqZWN0IGFzIGEgcG9pbnRlciBvZiB0eXBlIFwiK3RoaXMubmFtZSk7dmFyIG49dC4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcztyZXR1cm4gUHQodC4kJC5wdHIsbix0aGlzLnJlZ2lzdGVyZWRDbGFzcyl9ZnVuY3Rpb24gTHQoZSx0KXt2YXIgbjtpZihudWxsPT09dClyZXR1cm4gdGhpcy5pc1JlZmVyZW5jZSYmbHQoXCJudWxsIGlzIG5vdCBhIHZhbGlkIFwiK3RoaXMubmFtZSksdGhpcy5pc1NtYXJ0UG9pbnRlcj8obj10aGlzLnJhd0NvbnN0cnVjdG9yKCksbnVsbCE9PWUmJmUucHVzaCh0aGlzLnJhd0Rlc3RydWN0b3Isbiksbik6MDt0LiQkfHxsdCgnQ2Fubm90IHBhc3MgXCInK1FlKHQpKydcIiBhcyBhICcrdGhpcy5uYW1lKSx0LiQkLnB0cnx8bHQoXCJDYW5ub3QgcGFzcyBkZWxldGVkIG9iamVjdCBhcyBhIHBvaW50ZXIgb2YgdHlwZSBcIit0aGlzLm5hbWUpLCF0aGlzLmlzQ29uc3QmJnQuJCQucHRyVHlwZS5pc0NvbnN0JiZsdChcIkNhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgXCIrKHQuJCQuc21hcnRQdHJUeXBlP3QuJCQuc21hcnRQdHJUeXBlLm5hbWU6dC4kJC5wdHJUeXBlLm5hbWUpK1wiIHRvIHBhcmFtZXRlciB0eXBlIFwiK3RoaXMubmFtZSk7dmFyIHI9dC4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcztpZihuPVB0KHQuJCQucHRyLHIsdGhpcy5yZWdpc3RlcmVkQ2xhc3MpLHRoaXMuaXNTbWFydFBvaW50ZXIpc3dpdGNoKHZvaWQgMD09PXQuJCQuc21hcnRQdHImJmx0KFwiUGFzc2luZyByYXcgcG9pbnRlciB0byBzbWFydCBwb2ludGVyIGlzIGlsbGVnYWxcIiksdGhpcy5zaGFyaW5nUG9saWN5KXtjYXNlIDA6dC4kJC5zbWFydFB0clR5cGU9PT10aGlzP249dC4kJC5zbWFydFB0cjpsdChcIkNhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgXCIrKHQuJCQuc21hcnRQdHJUeXBlP3QuJCQuc21hcnRQdHJUeXBlLm5hbWU6dC4kJC5wdHJUeXBlLm5hbWUpK1wiIHRvIHBhcmFtZXRlciB0eXBlIFwiK3RoaXMubmFtZSk7YnJlYWs7Y2FzZSAxOm49dC4kJC5zbWFydFB0cjticmVhaztjYXNlIDI6aWYodC4kJC5zbWFydFB0clR5cGU9PT10aGlzKW49dC4kJC5zbWFydFB0cjtlbHNle3ZhciBpPXQuY2xvbmUoKTtuPXRoaXMucmF3U2hhcmUobixYdC50b0hhbmRsZSgoZnVuY3Rpb24oKXtpLmRlbGV0ZSgpfSkpKSxudWxsIT09ZSYmZS5wdXNoKHRoaXMucmF3RGVzdHJ1Y3RvcixuKX1icmVhaztkZWZhdWx0Omx0KFwiVW5zdXBwb3J0aW5nIHNoYXJpbmcgcG9saWN5XCIpfXJldHVybiBufWZ1bmN0aW9uIFV0KGUsdCl7aWYobnVsbD09PXQpcmV0dXJuIHRoaXMuaXNSZWZlcmVuY2UmJmx0KFwibnVsbCBpcyBub3QgYSB2YWxpZCBcIit0aGlzLm5hbWUpLDA7dC4kJHx8bHQoJ0Nhbm5vdCBwYXNzIFwiJytRZSh0KSsnXCIgYXMgYSAnK3RoaXMubmFtZSksdC4kJC5wdHJ8fGx0KFwiQ2Fubm90IHBhc3MgZGVsZXRlZCBvYmplY3QgYXMgYSBwb2ludGVyIG9mIHR5cGUgXCIrdGhpcy5uYW1lKSx0LiQkLnB0clR5cGUuaXNDb25zdCYmbHQoXCJDYW5ub3QgY29udmVydCBhcmd1bWVudCBvZiB0eXBlIFwiK3QuJCQucHRyVHlwZS5uYW1lK1wiIHRvIHBhcmFtZXRlciB0eXBlIFwiK3RoaXMubmFtZSk7dmFyIG49dC4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcztyZXR1cm4gUHQodC4kJC5wdHIsbix0aGlzLnJlZ2lzdGVyZWRDbGFzcyl9ZnVuY3Rpb24geHQoZSl7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKHpbZT4+Ml0pfWZ1bmN0aW9uIEZ0KGUsdCxuLHIsaSxvLGEscyxjLGwsdSl7dGhpcy5uYW1lPWUsdGhpcy5yZWdpc3RlcmVkQ2xhc3M9dCx0aGlzLmlzUmVmZXJlbmNlPW4sdGhpcy5pc0NvbnN0PXIsdGhpcy5pc1NtYXJ0UG9pbnRlcj1pLHRoaXMucG9pbnRlZVR5cGU9byx0aGlzLnNoYXJpbmdQb2xpY3k9YSx0aGlzLnJhd0dldFBvaW50ZWU9cyx0aGlzLnJhd0NvbnN0cnVjdG9yPWMsdGhpcy5yYXdTaGFyZT1sLHRoaXMucmF3RGVzdHJ1Y3Rvcj11LGl8fHZvaWQgMCE9PXQuYmFzZUNsYXNzP3RoaXMudG9XaXJlVHlwZT1MdDpyPyh0aGlzLnRvV2lyZVR5cGU9TXQsdGhpcy5kZXN0cnVjdG9yRnVuY3Rpb249bnVsbCk6KHRoaXMudG9XaXJlVHlwZT1VdCx0aGlzLmRlc3RydWN0b3JGdW5jdGlvbj1udWxsKX1mdW5jdGlvbiBCdChlLHQsbil7by5oYXNPd25Qcm9wZXJ0eShlKXx8ZHQoXCJSZXBsYWNpbmcgbm9uZXhpc3RhbnQgcHVibGljIHN5bWJvbFwiKSx2b2lkIDAhPT1vW2VdLm92ZXJsb2FkVGFibGUmJnZvaWQgMCE9PW4/b1tlXS5vdmVybG9hZFRhYmxlW25dPXQ6KG9bZV09dCxvW2VdLmFyZ0NvdW50PW4pfWZ1bmN0aW9uIFZ0KGUsdCl7ZT0kZShlKTt2YXIgbj1OZSh0KTtyZXR1cm5cImZ1bmN0aW9uXCIhPXR5cGVvZiBuJiZsdChcInVua25vd24gZnVuY3Rpb24gcG9pbnRlciB3aXRoIHNpZ25hdHVyZSBcIitlK1wiOiBcIit0KSxufXZhciBHdD12b2lkIDA7ZnVuY3Rpb24gSHQoZSl7dmFyIHQ9VG4oZSksbj0kZSh0KTtyZXR1cm4gU24odCksbn1mdW5jdGlvbiBXdChlLHQpe3ZhciBuPVtdLHI9e307dGhyb3cgdC5mb3JFYWNoKChmdW5jdGlvbiBlKHQpe3JbdF18fHR0W3RdfHwobnRbdF0/bnRbdF0uZm9yRWFjaChlKToobi5wdXNoKHQpLHJbdF09ITApKX0pKSxuZXcgR3QoZStcIjogXCIrbi5tYXAoSHQpLmpvaW4oW1wiLCBcIl0pKX1mdW5jdGlvbiBqdChlKXtmb3IoO2UubGVuZ3RoOyl7dmFyIHQ9ZS5wb3AoKTtlLnBvcCgpKHQpfX1mdW5jdGlvbiBadChlLHQsbixyLGkpe3ZhciBvPXQubGVuZ3RoO288MiYmbHQoXCJhcmdUeXBlcyBhcnJheSBzaXplIG1pc21hdGNoISBNdXN0IGF0IGxlYXN0IGdldCByZXR1cm4gdmFsdWUgYW5kICd0aGlzJyB0eXBlcyFcIik7Zm9yKHZhciBhPW51bGwhPT10WzFdJiZudWxsIT09bixzPSExLGM9MTtjPHQubGVuZ3RoOysrYylpZihudWxsIT09dFtjXSYmdm9pZCAwPT09dFtjXS5kZXN0cnVjdG9yRnVuY3Rpb24pe3M9ITA7YnJlYWt9dmFyIGw9XCJ2b2lkXCIhPT10WzBdLm5hbWUsdT1vLTIsZD1uZXcgQXJyYXkodSksZj1bXSxwPVtdO3JldHVybiBmdW5jdGlvbigpe3ZhciBuO2FyZ3VtZW50cy5sZW5ndGghPT11JiZsdChcImZ1bmN0aW9uIFwiK2UrXCIgY2FsbGVkIHdpdGggXCIrYXJndW1lbnRzLmxlbmd0aCtcIiBhcmd1bWVudHMsIGV4cGVjdGVkIFwiK3UrXCIgYXJncyFcIikscC5sZW5ndGg9MCxmLmxlbmd0aD1hPzI6MSxmWzBdPWksYSYmKG49dFsxXS50b1dpcmVUeXBlKHAsdGhpcyksZlsxXT1uKTtmb3IodmFyIG89MDtvPHU7KytvKWRbb109dFtvKzJdLnRvV2lyZVR5cGUocCxhcmd1bWVudHNbb10pLGYucHVzaChkW29dKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYocylqdChwKTtlbHNlIGZvcih2YXIgcj1hPzE6MjtyPHQubGVuZ3RoO3IrKyl7dmFyIGk9MT09PXI/bjpkW3ItMl07bnVsbCE9PXRbcl0uZGVzdHJ1Y3RvckZ1bmN0aW9uJiZ0W3JdLmRlc3RydWN0b3JGdW5jdGlvbihpKX1pZihsKXJldHVybiB0WzBdLmZyb21XaXJlVHlwZShlKX0oci5hcHBseShudWxsLGYpKX19ZnVuY3Rpb24genQoZSx0KXtmb3IodmFyIG49W10scj0wO3I8ZTtyKyspbi5wdXNoKFpbKHQ+PjIpK3JdKTtyZXR1cm4gbn12YXIgS3Q9W10sWXQ9W3t9LHt2YWx1ZTp2b2lkIDB9LHt2YWx1ZTpudWxsfSx7dmFsdWU6ITB9LHt2YWx1ZTohMX1dO2Z1bmN0aW9uIHF0KGUpe2U+NCYmMD09LS1ZdFtlXS5yZWZjb3VudCYmKFl0W2VdPXZvaWQgMCxLdC5wdXNoKGUpKX12YXIgWHQ9e3RvVmFsdWU6ZT0+KGV8fGx0KFwiQ2Fubm90IHVzZSBkZWxldGVkIHZhbC4gaGFuZGxlID0gXCIrZSksWXRbZV0udmFsdWUpLHRvSGFuZGxlOmU9Pntzd2l0Y2goZSl7Y2FzZSB2b2lkIDA6cmV0dXJuIDE7Y2FzZSBudWxsOnJldHVybiAyO2Nhc2UhMDpyZXR1cm4gMztjYXNlITE6cmV0dXJuIDQ7ZGVmYXVsdDp2YXIgdD1LdC5sZW5ndGg/S3QucG9wKCk6WXQubGVuZ3RoO3JldHVybiBZdFt0XT17cmVmY291bnQ6MSx2YWx1ZTplfSx0fX19O2Z1bmN0aW9uIFF0KGUsdCl7c3dpdGNoKHQpe2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKEtbZT4+Ml0pfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmZyb21XaXJlVHlwZShYW2U+PjNdKX07ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBmbG9hdCB0eXBlOiBcIitlKX19ZnVuY3Rpb24gSnQoZSx0KXt2YXIgbj10dFtlXTtyZXR1cm4gdm9pZCAwPT09biYmbHQodCtcIiBoYXMgdW5rbm93biB0eXBlIFwiK0h0KGUpKSxufWZ1bmN0aW9uICR0KGUsdCl7Zm9yKHZhciBuPW5ldyBBcnJheShlKSxyPTA7cjxlOysrciluW3JdPUp0KFpbKHQ+PjIpK3JdLFwicGFyYW1ldGVyIFwiK3IpO3JldHVybiBufXZhciBlbj17fTtmdW5jdGlvbiB0bihlKXt2YXIgdD1lbltlXTtyZXR1cm4gdm9pZCAwPT09dD8kZShlKTp0fXZhciBubj1bXTtmdW5jdGlvbiBybigpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBnbG9iYWxUaGlzKXJldHVybiBnbG9iYWxUaGlzO2Z1bmN0aW9uIGUoZSl7ZS4kJCRlbWJpbmRfZ2xvYmFsJCQkPWU7dmFyIHQ9XCJvYmplY3RcIj09dHlwZW9mICQkJGVtYmluZF9nbG9iYWwkJCQmJmUuJCQkZW1iaW5kX2dsb2JhbCQkJD09ZTtyZXR1cm4gdHx8ZGVsZXRlIGUuJCQkZW1iaW5kX2dsb2JhbCQkJCx0fWlmKFwib2JqZWN0XCI9PXR5cGVvZiAkJCRlbWJpbmRfZ2xvYmFsJCQkKXJldHVybiAkJCRlbWJpbmRfZ2xvYmFsJCQkO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBuLmcmJmUobi5nKT8kJCRlbWJpbmRfZ2xvYmFsJCQkPW4uZzpcIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmZShzZWxmKSYmKCQkJGVtYmluZF9nbG9iYWwkJCQ9c2VsZiksXCJvYmplY3RcIj09dHlwZW9mICQkJGVtYmluZF9nbG9iYWwkJCQpcmV0dXJuICQkJGVtYmluZF9nbG9iYWwkJCQ7dGhyb3cgRXJyb3IoXCJ1bmFibGUgdG8gZ2V0IGdsb2JhbCBvYmplY3QuXCIpfXZhciBvbixhbj1bXSxzbj17fSxjbj1bXTtmdW5jdGlvbiBsbihlKXtUZShcIkNhbm5vdCBlbmxhcmdlIG1lbW9yeSBhcnJheXMgdG8gc2l6ZSBcIitlK1wiIGJ5dGVzIChPT00pLiBJZiB5b3Ugd2FudCBtYWxsb2MgdG8gcmV0dXJuIE5VTEwgKDApIGluc3RlYWQgb2YgdGhpcyBhYm9ydCwgZG8gbm90IGxpbmsgd2l0aCAtc0FCT1JUSU5HX01BTExPQyAodGhhdCBpcywgdGhlIGRlZmF1bHQgd2hlbiBncm93dGggaXMgZW5hYmxlZCBpcyB0byBub3QgYWJvcnQsIGJ1dCB5b3UgaGF2ZSBvdmVycmlkZGVuIHRoYXQpXCIpfWZ1bmN0aW9uIHVuKGUpe3RyeXtyZXR1cm4gTy5ncm93KGUtVi5ieXRlTGVuZ3RoKzY1NTM1Pj4+MTYpLG9lKE8uYnVmZmVyKSwxfWNhdGNoKHQpe1MoXCJlbXNjcmlwdGVuX3JlYWxsb2NfYnVmZmVyOiBBdHRlbXB0ZWQgdG8gZ3JvdyBoZWFwIGZyb20gXCIrVi5ieXRlTGVuZ3RoK1wiIGJ5dGVzIHRvIFwiK2UrXCIgYnl0ZXMsIGJ1dCBnb3QgZXJyb3I6IFwiK3QpfX1vbj1kPygpPT57dmFyIGU9cHJvY2Vzcy5ocnRpbWUoKTtyZXR1cm4gMWUzKmVbMF0rZVsxXS8xZTZ9OigpPT5wZXJmb3JtYW5jZS5ub3coKTt2YXIgZG49e307ZnVuY3Rpb24gZm4oKXtpZighZm4uc3RyaW5ncyl7dmFyIGU9e1VTRVI6XCJ3ZWJfdXNlclwiLExPR05BTUU6XCJ3ZWJfdXNlclwiLFBBVEg6XCIvXCIsUFdEOlwiL1wiLEhPTUU6XCIvaG9tZS93ZWJfdXNlclwiLExBTkc6KFwib2JqZWN0XCI9PXR5cGVvZiBuYXZpZ2F0b3ImJm5hdmlnYXRvci5sYW5ndWFnZXMmJm5hdmlnYXRvci5sYW5ndWFnZXNbMF18fFwiQ1wiKS5yZXBsYWNlKFwiLVwiLFwiX1wiKStcIi5VVEYtOFwiLF86Y3x8XCIuL3RoaXMucHJvZ3JhbVwifTtmb3IodmFyIHQgaW4gZG4pdm9pZCAwPT09ZG5bdF0/ZGVsZXRlIGVbdF06ZVt0XT1kblt0XTt2YXIgbj1bXTtmb3IodmFyIHQgaW4gZSluLnB1c2godCtcIj1cIitlW3RdKTtmbi5zdHJpbmdzPW59cmV0dXJuIGZuLnN0cmluZ3N9ZnVuY3Rpb24gcG4oZSl7cmV0dXJuIGUlND09MCYmKGUlMTAwIT0wfHxlJTQwMD09MCl9dmFyIG1uPVszMSwyOSwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0saG49WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXTtmdW5jdGlvbiB2bihlLHQsbixyKXt2YXIgaT1aW3IrNDA+PjJdLG89e3RtX3NlYzpaW3I+PjJdLHRtX21pbjpaW3IrND4+Ml0sdG1faG91cjpaW3IrOD4+Ml0sdG1fbWRheTpaW3IrMTI+PjJdLHRtX21vbjpaW3IrMTY+PjJdLHRtX3llYXI6WltyKzIwPj4yXSx0bV93ZGF5OlpbcisyND4+Ml0sdG1feWRheTpaW3IrMjg+PjJdLHRtX2lzZHN0OlpbciszMj4+Ml0sdG1fZ210b2ZmOlpbciszNj4+Ml0sdG1fem9uZTppP1UoaSk6XCJcIn0sYT1VKG4pLHM9e1wiJWNcIjpcIiVhICViICVkICVIOiVNOiVTICVZXCIsXCIlRFwiOlwiJW0vJWQvJXlcIixcIiVGXCI6XCIlWS0lbS0lZFwiLFwiJWhcIjpcIiViXCIsXCIlclwiOlwiJUk6JU06JVMgJXBcIixcIiVSXCI6XCIlSDolTVwiLFwiJVRcIjpcIiVIOiVNOiVTXCIsXCIleFwiOlwiJW0vJWQvJXlcIixcIiVYXCI6XCIlSDolTTolU1wiLFwiJUVjXCI6XCIlY1wiLFwiJUVDXCI6XCIlQ1wiLFwiJUV4XCI6XCIlbS8lZC8leVwiLFwiJUVYXCI6XCIlSDolTTolU1wiLFwiJUV5XCI6XCIleVwiLFwiJUVZXCI6XCIlWVwiLFwiJU9kXCI6XCIlZFwiLFwiJU9lXCI6XCIlZVwiLFwiJU9IXCI6XCIlSFwiLFwiJU9JXCI6XCIlSVwiLFwiJU9tXCI6XCIlbVwiLFwiJU9NXCI6XCIlTVwiLFwiJU9TXCI6XCIlU1wiLFwiJU91XCI6XCIldVwiLFwiJU9VXCI6XCIlVVwiLFwiJU9WXCI6XCIlVlwiLFwiJU93XCI6XCIld1wiLFwiJU9XXCI6XCIlV1wiLFwiJU95XCI6XCIleVwifTtmb3IodmFyIGMgaW4gcylhPWEucmVwbGFjZShuZXcgUmVnRXhwKGMsXCJnXCIpLHNbY10pO3ZhciBsPVtcIlN1bmRheVwiLFwiTW9uZGF5XCIsXCJUdWVzZGF5XCIsXCJXZWRuZXNkYXlcIixcIlRodXJzZGF5XCIsXCJGcmlkYXlcIixcIlNhdHVyZGF5XCJdLHU9W1wiSmFudWFyeVwiLFwiRmVicnVhcnlcIixcIk1hcmNoXCIsXCJBcHJpbFwiLFwiTWF5XCIsXCJKdW5lXCIsXCJKdWx5XCIsXCJBdWd1c3RcIixcIlNlcHRlbWJlclwiLFwiT2N0b2JlclwiLFwiTm92ZW1iZXJcIixcIkRlY2VtYmVyXCJdO2Z1bmN0aW9uIGQoZSx0LG4pe2Zvcih2YXIgcj1cIm51bWJlclwiPT10eXBlb2YgZT9lLnRvU3RyaW5nKCk6ZXx8XCJcIjtyLmxlbmd0aDx0OylyPW5bMF0rcjtyZXR1cm4gcn1mdW5jdGlvbiBmKGUsdCl7cmV0dXJuIGQoZSx0LFwiMFwiKX1mdW5jdGlvbiBwKGUsdCl7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZTwwPy0xOmU+MD8xOjB9dmFyIHI7cmV0dXJuIDA9PT0ocj1uKGUuZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCkpKSYmMD09PShyPW4oZS5nZXRNb250aCgpLXQuZ2V0TW9udGgoKSkpJiYocj1uKGUuZ2V0RGF0ZSgpLXQuZ2V0RGF0ZSgpKSkscn1mdW5jdGlvbiBtKGUpe3N3aXRjaChlLmdldERheSgpKXtjYXNlIDA6cmV0dXJuIG5ldyBEYXRlKGUuZ2V0RnVsbFllYXIoKS0xLDExLDI5KTtjYXNlIDE6cmV0dXJuIGU7Y2FzZSAyOnJldHVybiBuZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCksMCwzKTtjYXNlIDM6cmV0dXJuIG5ldyBEYXRlKGUuZ2V0RnVsbFllYXIoKSwwLDIpO2Nhc2UgNDpyZXR1cm4gbmV3IERhdGUoZS5nZXRGdWxsWWVhcigpLDAsMSk7Y2FzZSA1OnJldHVybiBuZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCktMSwxMSwzMSk7Y2FzZSA2OnJldHVybiBuZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCktMSwxMSwzMCl9fWZ1bmN0aW9uIGgoZSl7dmFyIHQ9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49bmV3IERhdGUoZS5nZXRUaW1lKCkpO3Q+MDspe3ZhciByPXBuKG4uZ2V0RnVsbFllYXIoKSksaT1uLmdldE1vbnRoKCksbz0ocj9tbjpobilbaV07aWYoISh0Pm8tbi5nZXREYXRlKCkpKXJldHVybiBuLnNldERhdGUobi5nZXREYXRlKCkrdCksbjt0LT1vLW4uZ2V0RGF0ZSgpKzEsbi5zZXREYXRlKDEpLGk8MTE/bi5zZXRNb250aChpKzEpOihuLnNldE1vbnRoKDApLG4uc2V0RnVsbFllYXIobi5nZXRGdWxsWWVhcigpKzEpKX1yZXR1cm4gbn0obmV3IERhdGUoZS50bV95ZWFyKzE5MDAsMCwxKSxlLnRtX3lkYXkpLG49bmV3IERhdGUodC5nZXRGdWxsWWVhcigpLDAsNCkscj1uZXcgRGF0ZSh0LmdldEZ1bGxZZWFyKCkrMSwwLDQpLGk9bShuKSxvPW0ocik7cmV0dXJuIHAoaSx0KTw9MD9wKG8sdCk8PTA/dC5nZXRGdWxsWWVhcigpKzE6dC5nZXRGdWxsWWVhcigpOnQuZ2V0RnVsbFllYXIoKS0xfXZhciB2PXtcIiVhXCI6ZnVuY3Rpb24oZSl7cmV0dXJuIGxbZS50bV93ZGF5XS5zdWJzdHJpbmcoMCwzKX0sXCIlQVwiOmZ1bmN0aW9uKGUpe3JldHVybiBsW2UudG1fd2RheV19LFwiJWJcIjpmdW5jdGlvbihlKXtyZXR1cm4gdVtlLnRtX21vbl0uc3Vic3RyaW5nKDAsMyl9LFwiJUJcIjpmdW5jdGlvbihlKXtyZXR1cm4gdVtlLnRtX21vbl19LFwiJUNcIjpmdW5jdGlvbihlKXtyZXR1cm4gZigoZS50bV95ZWFyKzE5MDApLzEwMHwwLDIpfSxcIiVkXCI6ZnVuY3Rpb24oZSl7cmV0dXJuIGYoZS50bV9tZGF5LDIpfSxcIiVlXCI6ZnVuY3Rpb24oZSl7cmV0dXJuIGQoZS50bV9tZGF5LDIsXCIgXCIpfSxcIiVnXCI6ZnVuY3Rpb24oZSl7cmV0dXJuIGgoZSkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMil9LFwiJUdcIjpmdW5jdGlvbihlKXtyZXR1cm4gaChlKX0sXCIlSFwiOmZ1bmN0aW9uKGUpe3JldHVybiBmKGUudG1faG91ciwyKX0sXCIlSVwiOmZ1bmN0aW9uKGUpe3ZhciB0PWUudG1faG91cjtyZXR1cm4gMD09dD90PTEyOnQ+MTImJih0LT0xMiksZih0LDIpfSxcIiVqXCI6ZnVuY3Rpb24oZSl7cmV0dXJuIGYoZS50bV9tZGF5K2Z1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTAscj0wO3I8PXQ7bis9ZVtyKytdKTtyZXR1cm4gbn0ocG4oZS50bV95ZWFyKzE5MDApP21uOmhuLGUudG1fbW9uLTEpLDMpfSxcIiVtXCI6ZnVuY3Rpb24oZSl7cmV0dXJuIGYoZS50bV9tb24rMSwyKX0sXCIlTVwiOmZ1bmN0aW9uKGUpe3JldHVybiBmKGUudG1fbWluLDIpfSxcIiVuXCI6ZnVuY3Rpb24oKXtyZXR1cm5cIlxcblwifSxcIiVwXCI6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudG1faG91cj49MCYmZS50bV9ob3VyPDEyP1wiQU1cIjpcIlBNXCJ9LFwiJVNcIjpmdW5jdGlvbihlKXtyZXR1cm4gZihlLnRtX3NlYywyKX0sXCIldFwiOmZ1bmN0aW9uKCl7cmV0dXJuXCJcXHRcIn0sXCIldVwiOmZ1bmN0aW9uKGUpe3JldHVybiBlLnRtX3dkYXl8fDd9LFwiJVVcIjpmdW5jdGlvbihlKXt2YXIgdD1lLnRtX3lkYXkrNy1lLnRtX3dkYXk7cmV0dXJuIGYoTWF0aC5mbG9vcih0LzcpLDIpfSxcIiVWXCI6ZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5mbG9vcigoZS50bV95ZGF5KzctKGUudG1fd2RheSs2KSU3KS83KTtpZigoZS50bV93ZGF5KzM3MS1lLnRtX3lkYXktMiklNzw9MiYmdCsrLHQpe2lmKDUzPT10KXt2YXIgbj0oZS50bV93ZGF5KzM3MS1lLnRtX3lkYXkpJTc7ND09bnx8Mz09biYmcG4oZS50bV95ZWFyKXx8KHQ9MSl9fWVsc2V7dD01Mjt2YXIgcj0oZS50bV93ZGF5KzctZS50bV95ZGF5LTEpJTc7KDQ9PXJ8fDU9PXImJnBuKGUudG1feWVhciU0MDAtMSkpJiZ0Kyt9cmV0dXJuIGYodCwyKX0sXCIld1wiOmZ1bmN0aW9uKGUpe3JldHVybiBlLnRtX3dkYXl9LFwiJVdcIjpmdW5jdGlvbihlKXt2YXIgdD1lLnRtX3lkYXkrNy0oZS50bV93ZGF5KzYpJTc7cmV0dXJuIGYoTWF0aC5mbG9vcih0LzcpLDIpfSxcIiV5XCI6ZnVuY3Rpb24oZSl7cmV0dXJuKGUudG1feWVhcisxOTAwKS50b1N0cmluZygpLnN1YnN0cmluZygyKX0sXCIlWVwiOmZ1bmN0aW9uKGUpe3JldHVybiBlLnRtX3llYXIrMTkwMH0sXCIlelwiOmZ1bmN0aW9uKGUpe3ZhciB0PWUudG1fZ210b2ZmLG49dD49MDtyZXR1cm4gdD0odD1NYXRoLmFicyh0KS82MCkvNjAqMTAwK3QlNjAsKG4/XCIrXCI6XCItXCIpK1N0cmluZyhcIjAwMDBcIit0KS5zbGljZSgtNCl9LFwiJVpcIjpmdW5jdGlvbihlKXtyZXR1cm4gZS50bV96b25lfSxcIiUlXCI6ZnVuY3Rpb24oKXtyZXR1cm5cIiVcIn19O2Zvcih2YXIgYyBpbiBhPWEucmVwbGFjZSgvJSUvZyxcIlxcMFxcMFwiKSx2KWEuaW5jbHVkZXMoYykmJihhPWEucmVwbGFjZShuZXcgUmVnRXhwKGMsXCJnXCIpLHZbY10obykpKTt2YXIgZz15bihhPWEucmVwbGFjZSgvXFwwXFwwL2csXCIlXCIpLCExKTtyZXR1cm4gZy5sZW5ndGg+dD8wOihmdW5jdGlvbihlLHQpe1AoZS5sZW5ndGg+PTAsXCJ3cml0ZUFycmF5VG9NZW1vcnkgYXJyYXkgbXVzdCBoYXZlIGEgbGVuZ3RoIChzaG91bGQgYmUgYW4gYXJyYXkgb3IgdHlwZWQgYXJyYXkpXCIpLEcuc2V0KGUsdCl9KGcsZSksZy5sZW5ndGgtMSl9dmFyIGduPWZ1bmN0aW9uKGUsdCxuLHIpe2V8fChlPXRoaXMpLHRoaXMucGFyZW50PWUsdGhpcy5tb3VudD1lLm1vdW50LHRoaXMubW91bnRlZD1udWxsLHRoaXMuaWQ9S2UubmV4dElub2RlKyssdGhpcy5uYW1lPXQsdGhpcy5tb2RlPW4sdGhpcy5ub2RlX29wcz17fSx0aGlzLnN0cmVhbV9vcHM9e30sdGhpcy5yZGV2PXJ9O2Z1bmN0aW9uIHluKGUsdCxuKXt2YXIgcj1uPjA/bjpCKGUpKzEsaT1uZXcgQXJyYXkociksbz14KGUsaSwwLGkubGVuZ3RoKTtyZXR1cm4gdCYmKGkubGVuZ3RoPW8pLGl9T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZ24ucHJvdG90eXBlLHtyZWFkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMzY1PT0oMzY1JnRoaXMubW9kZSl9LHNldDpmdW5jdGlvbihlKXtlP3RoaXMubW9kZXw9MzY1OnRoaXMubW9kZSY9LTM2Nn19LHdyaXRlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMTQ2PT0oMTQ2JnRoaXMubW9kZSl9LHNldDpmdW5jdGlvbihlKXtlP3RoaXMubW9kZXw9MTQ2OnRoaXMubW9kZSY9LTE0N319LGlzRm9sZGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gS2UuaXNEaXIodGhpcy5tb2RlKX19LGlzRGV2aWNlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gS2UuaXNDaHJkZXYodGhpcy5tb2RlKX19fSksS2UuRlNOb2RlPWduLEtlLnN0YXRpY0luaXQoKSx6ZT17RVBFUk06NjMsRU5PRU5UOjQ0LEVTUkNIOjcxLEVJTlRSOjI3LEVJTzoyOSxFTlhJTzo2MCxFMkJJRzoxLEVOT0VYRUM6NDUsRUJBREY6OCxFQ0hJTEQ6MTIsRUFHQUlOOjYsRVdPVUxEQkxPQ0s6NixFTk9NRU06NDgsRUFDQ0VTOjIsRUZBVUxUOjIxLEVOT1RCTEs6MTA1LEVCVVNZOjEwLEVFWElTVDoyMCxFWERFVjo3NSxFTk9ERVY6NDMsRU5PVERJUjo1NCxFSVNESVI6MzEsRUlOVkFMOjI4LEVORklMRTo0MSxFTUZJTEU6MzMsRU5PVFRZOjU5LEVUWFRCU1k6NzQsRUZCSUc6MjIsRU5PU1BDOjUxLEVTUElQRTo3MCxFUk9GUzo2OSxFTUxJTks6MzQsRVBJUEU6NjQsRURPTToxOCxFUkFOR0U6NjgsRU5PTVNHOjQ5LEVJRFJNOjI0LEVDSFJORzoxMDYsRUwyTlNZTkM6MTU2LEVMM0hMVDoxMDcsRUwzUlNUOjEwOCxFTE5STkc6MTA5LEVVTkFUQ0g6MTEwLEVOT0NTSToxMTEsRUwySExUOjExMixFREVBRExLOjE2LEVOT0xDSzo0NixFQkFERToxMTMsRUJBRFI6MTE0LEVYRlVMTDoxMTUsRU5PQU5POjEwNCxFQkFEUlFDOjEwMyxFQkFEU0xUOjEwMixFREVBRExPQ0s6MTYsRUJGT05UOjEwMSxFTk9TVFI6MTAwLEVOT0RBVEE6MTE2LEVUSU1FOjExNyxFTk9TUjoxMTgsRU5PTkVUOjExOSxFTk9QS0c6MTIwLEVSRU1PVEU6MTIxLEVOT0xJTks6NDcsRUFEVjoxMjIsRVNSTU5UOjEyMyxFQ09NTToxMjQsRVBST1RPOjY1LEVNVUxUSUhPUDozNixFRE9URE9UOjEyNSxFQkFETVNHOjksRU5PVFVOSVE6MTI2LEVCQURGRDoxMjcsRVJFTUNIRzoxMjgsRUxJQkFDQzoxMjksRUxJQkJBRDoxMzAsRUxJQlNDTjoxMzEsRUxJQk1BWDoxMzIsRUxJQkVYRUM6MTMzLEVOT1NZUzo1MixFTk9URU1QVFk6NTUsRU5BTUVUT09MT05HOjM3LEVMT09QOjMyLEVPUE5PVFNVUFA6MTM4LEVQRk5PU1VQUE9SVDoxMzksRUNPTk5SRVNFVDoxNSxFTk9CVUZTOjQyLEVBRk5PU1VQUE9SVDo1LEVQUk9UT1RZUEU6NjcsRU5PVFNPQ0s6NTcsRU5PUFJPVE9PUFQ6NTAsRVNIVVRET1dOOjE0MCxFQ09OTlJFRlVTRUQ6MTQsRUFERFJJTlVTRTozLEVDT05OQUJPUlRFRDoxMyxFTkVUVU5SRUFDSDo0MCxFTkVURE9XTjozOCxFVElNRURPVVQ6NzMsRUhPU1RET1dOOjE0MixFSE9TVFVOUkVBQ0g6MjMsRUlOUFJPR1JFU1M6MjYsRUFMUkVBRFk6NyxFREVTVEFERFJSRVE6MTcsRU1TR1NJWkU6MzUsRVBST1RPTk9TVVBQT1JUOjY2LEVTT0NLVE5PU1VQUE9SVDoxMzcsRUFERFJOT1RBVkFJTDo0LEVORVRSRVNFVDozOSxFSVNDT05OOjMwLEVOT1RDT05OOjUzLEVUT09NQU5ZUkVGUzoxNDEsRVVTRVJTOjEzNixFRFFVT1Q6MTksRVNUQUxFOjcyLEVOT1RTVVA6MTM4LEVOT01FRElVTToxNDgsRUlMU0VROjI1LEVPVkVSRkxPVzo2MSxFQ0FOQ0VMRUQ6MTEsRU5PVFJFQ09WRVJBQkxFOjU2LEVPV05FUkRFQUQ6NjIsRVNUUlBJUEU6MTM1fSxmdW5jdGlvbigpe2Zvcih2YXIgZT1uZXcgQXJyYXkoMjU2KSx0PTA7dDwyNTY7Kyt0KWVbdF09U3RyaW5nLmZyb21DaGFyQ29kZSh0KTtKZT1lfSgpLGN0PW8uQmluZGluZ0Vycm9yPXN0KEVycm9yLFwiQmluZGluZ0Vycm9yXCIpLHV0PW8uSW50ZXJuYWxFcnJvcj1zdChFcnJvcixcIkludGVybmFsRXJyb3JcIiksT3QucHJvdG90eXBlLmlzQWxpYXNPZj1mdW5jdGlvbihlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBPdCkpcmV0dXJuITE7aWYoIShlIGluc3RhbmNlb2YgT3QpKXJldHVybiExO2Zvcih2YXIgdD10aGlzLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLG49dGhpcy4kJC5wdHIscj1lLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLGk9ZS4kJC5wdHI7dC5iYXNlQ2xhc3M7KW49dC51cGNhc3QobiksdD10LmJhc2VDbGFzcztmb3IoO3IuYmFzZUNsYXNzOylpPXIudXBjYXN0KGkpLHI9ci5iYXNlQ2xhc3M7cmV0dXJuIHQ9PT1yJiZuPT09aX0sT3QucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7aWYodGhpcy4kJC5wdHJ8fHZ0KHRoaXMpLHRoaXMuJCQucHJlc2VydmVQb2ludGVyT25EZWxldGUpcmV0dXJuIHRoaXMuJCQuY291bnQudmFsdWUrPTEsdGhpczt2YXIgZSx0PWt0KE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLHskJDp7dmFsdWU6KGU9dGhpcy4kJCx7Y291bnQ6ZS5jb3VudCxkZWxldGVTY2hlZHVsZWQ6ZS5kZWxldGVTY2hlZHVsZWQscHJlc2VydmVQb2ludGVyT25EZWxldGU6ZS5wcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0ZSxwdHI6ZS5wdHIscHRyVHlwZTplLnB0clR5cGUsc21hcnRQdHI6ZS5zbWFydFB0cixzbWFydFB0clR5cGU6ZS5zbWFydFB0clR5cGV9KX19KSk7cmV0dXJuIHQuJCQuY291bnQudmFsdWUrPTEsdC4kJC5kZWxldGVTY2hlZHVsZWQ9ITEsdH0sT3QucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbigpe3RoaXMuJCQucHRyfHx2dCh0aGlzKSx0aGlzLiQkLmRlbGV0ZVNjaGVkdWxlZCYmIXRoaXMuJCQucHJlc2VydmVQb2ludGVyT25EZWxldGUmJmx0KFwiT2JqZWN0IGFscmVhZHkgc2NoZWR1bGVkIGZvciBkZWxldGlvblwiKSx5dCh0aGlzKSxFdCh0aGlzLiQkKSx0aGlzLiQkLnByZXNlcnZlUG9pbnRlck9uRGVsZXRlfHwodGhpcy4kJC5zbWFydFB0cj12b2lkIDAsdGhpcy4kJC5wdHI9dm9pZCAwKX0sT3QucHJvdG90eXBlLmlzRGVsZXRlZD1mdW5jdGlvbigpe3JldHVybiF0aGlzLiQkLnB0cn0sT3QucHJvdG90eXBlLmRlbGV0ZUxhdGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJCQucHRyfHx2dCh0aGlzKSx0aGlzLiQkLmRlbGV0ZVNjaGVkdWxlZCYmIXRoaXMuJCQucHJlc2VydmVQb2ludGVyT25EZWxldGUmJmx0KFwiT2JqZWN0IGFscmVhZHkgc2NoZWR1bGVkIGZvciBkZWxldGlvblwiKSxTdC5wdXNoKHRoaXMpLDE9PT1TdC5sZW5ndGgmJlR0JiZUdChidCksdGhpcy4kJC5kZWxldGVTY2hlZHVsZWQ9ITAsdGhpc30sby5nZXRJbmhlcml0ZWRJbnN0YW5jZUNvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKEN0KS5sZW5ndGh9LG8uZ2V0TGl2ZUluaGVyaXRlZEluc3RhbmNlcz1mdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiBDdClDdC5oYXNPd25Qcm9wZXJ0eSh0KSYmZS5wdXNoKEN0W3RdKTtyZXR1cm4gZX0sby5mbHVzaFBlbmRpbmdEZWxldGVzPWJ0LG8uc2V0RGVsYXlGdW5jdGlvbj1mdW5jdGlvbihlKXtUdD1lLFN0Lmxlbmd0aCYmVHQmJlR0KGJ0KX0sRnQucHJvdG90eXBlLmdldFBvaW50ZWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmF3R2V0UG9pbnRlZSYmKGU9dGhpcy5yYXdHZXRQb2ludGVlKGUpKSxlfSxGdC5wcm90b3R5cGUuZGVzdHJ1Y3Rvcj1mdW5jdGlvbihlKXt0aGlzLnJhd0Rlc3RydWN0b3ImJnRoaXMucmF3RGVzdHJ1Y3RvcihlKX0sRnQucHJvdG90eXBlLmFyZ1BhY2tBZHZhbmNlPTgsRnQucHJvdG90eXBlLnJlYWRWYWx1ZUZyb21Qb2ludGVyPXh0LEZ0LnByb3RvdHlwZS5kZWxldGVPYmplY3Q9ZnVuY3Rpb24oZSl7bnVsbCE9PWUmJmUuZGVsZXRlKCl9LEZ0LnByb3RvdHlwZS5mcm9tV2lyZVR5cGU9UnQsR3Q9by5VbmJvdW5kVHlwZUVycm9yPXN0KEVycm9yLFwiVW5ib3VuZFR5cGVFcnJvclwiKSxvLmNvdW50X2VtdmFsX2hhbmRsZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCx0PTU7dDxZdC5sZW5ndGg7Kyt0KXZvaWQgMCE9PVl0W3RdJiYrK2U7cmV0dXJuIGV9LG8uZ2V0X2ZpcnN0X2VtdmFsPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTU7ZTxZdC5sZW5ndGg7KytlKWlmKHZvaWQgMCE9PVl0W2VdKXJldHVybiBZdFtlXTtyZXR1cm4gbnVsbH07dmFyIEVuLF9uPXtfX2Fzc2VydF9mYWlsOmZ1bmN0aW9uKGUsdCxuLHIpe1RlKFwiQXNzZXJ0aW9uIGZhaWxlZDogXCIrVShlKStcIiwgYXQ6IFwiK1t0P1UodCk6XCJ1bmtub3duIGZpbGVuYW1lXCIsbixyP1Uocik6XCJ1bmtub3duIGZ1bmN0aW9uXCJdKX0sX19jeGFfYWxsb2NhdGVfZXhjZXB0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiBJbihlKzI0KSsyNH0sX19jeGFfYmVnaW5fY2F0Y2g6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IE1lKGUpO3JldHVybiB0LmdldF9jYXVnaHQoKXx8KHQuc2V0X2NhdWdodCghMCksUGUtLSksdC5zZXRfcmV0aHJvd24oITEpLHdlLnB1c2godCksRGUodCksdC5nZXRfZXhjZXB0aW9uX3B0cigpfSxfX2N4YV9jdXJyZW50X3ByaW1hcnlfZXhjZXB0aW9uOmZ1bmN0aW9uKCl7aWYoIXdlLmxlbmd0aClyZXR1cm4gMDt2YXIgZT13ZVt3ZS5sZW5ndGgtMV07cmV0dXJuIERlKGUpLGUuZXhjUHRyfSxfX2N4YV9kZWNyZW1lbnRfZXhjZXB0aW9uX3JlZmNvdW50OmZ1bmN0aW9uKGUpe2UmJlVlKG5ldyBNZShlKSl9LF9fY3hhX2VuZF9jYXRjaDpmdW5jdGlvbigpe1JuKDApLFAod2UubGVuZ3RoPjApLFVlKHdlLnBvcCgpKSx4ZT0wfSxfX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoXzI6ZnVuY3Rpb24oKXt2YXIgZT14ZTtpZighZSlyZXR1cm4gdygwKSwwO3ZhciB0PW5ldyBNZShlKTt0LnNldF9hZGp1c3RlZF9wdHIoZSk7dmFyIG49dC5nZXRfdHlwZSgpO2lmKCFuKXJldHVybiB3KDApLGU7Zm9yKHZhciByPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyksaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgbz1yW2ldO2lmKDA9PT1vfHxvPT09bilicmVhazt2YXIgYT10LnB0cisxNjtpZihEbihvLG4sYSkpcmV0dXJuIHcobyksZX1yZXR1cm4gdyhuKSxlfSxfX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoXzM6ZnVuY3Rpb24oKXt2YXIgZT14ZTtpZighZSlyZXR1cm4gdygwKSwwO3ZhciB0PW5ldyBNZShlKTt0LnNldF9hZGp1c3RlZF9wdHIoZSk7dmFyIG49dC5nZXRfdHlwZSgpO2lmKCFuKXJldHVybiB3KDApLGU7Zm9yKHZhciByPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyksaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgbz1yW2ldO2lmKDA9PT1vfHxvPT09bilicmVhazt2YXIgYT10LnB0cisxNjtpZihEbihvLG4sYSkpcmV0dXJuIHcobyksZX1yZXR1cm4gdyhuKSxlfSxfX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoXzQ6ZnVuY3Rpb24oKXt2YXIgZT14ZTtpZighZSlyZXR1cm4gdygwKSwwO3ZhciB0PW5ldyBNZShlKTt0LnNldF9hZGp1c3RlZF9wdHIoZSk7dmFyIG49dC5nZXRfdHlwZSgpO2lmKCFuKXJldHVybiB3KDApLGU7Zm9yKHZhciByPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyksaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgbz1yW2ldO2lmKDA9PT1vfHxvPT09bilicmVhazt2YXIgYT10LnB0cisxNjtpZihEbihvLG4sYSkpcmV0dXJuIHcobyksZX1yZXR1cm4gdyhuKSxlfSxfX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoXzU6ZnVuY3Rpb24oKXt2YXIgZT14ZTtpZighZSlyZXR1cm4gdygwKSwwO3ZhciB0PW5ldyBNZShlKTt0LnNldF9hZGp1c3RlZF9wdHIoZSk7dmFyIG49dC5nZXRfdHlwZSgpO2lmKCFuKXJldHVybiB3KDApLGU7Zm9yKHZhciByPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyksaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgbz1yW2ldO2lmKDA9PT1vfHxvPT09bilicmVhazt2YXIgYT10LnB0cisxNjtpZihEbihvLG4sYSkpcmV0dXJuIHcobyksZX1yZXR1cm4gdyhuKSxlfSxfX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoXzg6ZnVuY3Rpb24oKXt2YXIgZT14ZTtpZighZSlyZXR1cm4gdygwKSwwO3ZhciB0PW5ldyBNZShlKTt0LnNldF9hZGp1c3RlZF9wdHIoZSk7dmFyIG49dC5nZXRfdHlwZSgpO2lmKCFuKXJldHVybiB3KDApLGU7Zm9yKHZhciByPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyksaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgbz1yW2ldO2lmKDA9PT1vfHxvPT09bilicmVhazt2YXIgYT10LnB0cisxNjtpZihEbihvLG4sYSkpcmV0dXJuIHcobyksZX1yZXR1cm4gdyhuKSxlfSxfX2N4YV9mcmVlX2V4Y2VwdGlvbjpMZSxfX2N4YV9pbmNyZW1lbnRfZXhjZXB0aW9uX3JlZmNvdW50OmZ1bmN0aW9uKGUpe2UmJkRlKG5ldyBNZShlKSl9LF9fY3hhX3JldGhyb3c6RmUsX19jeGFfcmV0aHJvd19wcmltYXJ5X2V4Y2VwdGlvbjpmdW5jdGlvbihlKXtpZihlKXt2YXIgdD1uZXcgTWUoZSk7d2UucHVzaCh0KSx0LnNldF9yZXRocm93bighMCksRmUoKX19LF9fY3hhX3Rocm93OmZ1bmN0aW9uKGUsdCxuKXt0aHJvdyBuZXcgTWUoZSkuaW5pdCh0LG4pLHhlPWUsUGUrKyxlfSxfX2N4YV91bmNhdWdodF9leGNlcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIFBlfSxfX3Jlc3VtZUV4Y2VwdGlvbjpmdW5jdGlvbihlKXt0aHJvdyB4ZXx8KHhlPWUpLGV9LF9fc3lzY2FsbF9jaG1vZDpmdW5jdGlvbihlLHQpe3RyeXtyZXR1cm4gZT1ZZS5nZXRTdHIoZSksS2UuY2htb2QoZSx0KSwwfWNhdGNoKGUpe2lmKHZvaWQgMD09PUtlfHwhKGUgaW5zdGFuY2VvZiBLZS5FcnJub0Vycm9yKSl0aHJvdyBlO3JldHVybi1lLmVycm5vfX0sX19zeXNjYWxsX2ZhY2Nlc3NhdDpmdW5jdGlvbihlLHQsbixyKXt0cnl7aWYodD1ZZS5nZXRTdHIodCksUCgwPT09ciksdD1ZZS5jYWxjdWxhdGVBdChlLHQpLC04Jm4pcmV0dXJuLTI4O3ZhciBpPUtlLmxvb2t1cFBhdGgodCx7Zm9sbG93OiEwfSkubm9kZTtpZighaSlyZXR1cm4tNDQ7dmFyIG89XCJcIjtyZXR1cm4gNCZuJiYobys9XCJyXCIpLDImbiYmKG8rPVwid1wiKSwxJm4mJihvKz1cInhcIiksbyYmS2Uubm9kZVBlcm1pc3Npb25zKGksbyk/LTI6MH1jYXRjaChlKXtpZih2b2lkIDA9PT1LZXx8IShlIGluc3RhbmNlb2YgS2UuRXJybm9FcnJvcikpdGhyb3cgZTtyZXR1cm4tZS5lcnJub319LF9fc3lzY2FsbF9mY2htb2Q6ZnVuY3Rpb24oZSx0KXt0cnl7cmV0dXJuIEtlLmZjaG1vZChlLHQpLDB9Y2F0Y2goZSl7aWYodm9pZCAwPT09S2V8fCEoZSBpbnN0YW5jZW9mIEtlLkVycm5vRXJyb3IpKXRocm93IGU7cmV0dXJuLWUuZXJybm99fSxfX3N5c2NhbGxfZmNob3duMzI6ZnVuY3Rpb24oZSx0LG4pe3RyeXtyZXR1cm4gS2UuZmNob3duKGUsdCxuKSwwfWNhdGNoKGUpe2lmKHZvaWQgMD09PUtlfHwhKGUgaW5zdGFuY2VvZiBLZS5FcnJub0Vycm9yKSl0aHJvdyBlO3JldHVybi1lLmVycm5vfX0sX19zeXNjYWxsX2ZjbnRsNjQ6ZnVuY3Rpb24oZSx0LG4pe1llLnZhcmFyZ3M9bjt0cnl7dmFyIHI9WWUuZ2V0U3RyZWFtRnJvbUZEKGUpO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuKGk9WWUuZ2V0KCkpPDA/LTI4OktlLmNyZWF0ZVN0cmVhbShyLGkpLmZkO2Nhc2UgMTpjYXNlIDI6Y2FzZSA2OmNhc2UgNzpyZXR1cm4gMDtjYXNlIDM6cmV0dXJuIHIuZmxhZ3M7Y2FzZSA0OnZhciBpPVllLmdldCgpO3JldHVybiByLmZsYWdzfD1pLDA7Y2FzZSA1OnJldHVybiBpPVllLmdldCgpLFdbaSswPj4xXT0yLDA7Y2FzZSAxNjpjYXNlIDg6ZGVmYXVsdDpyZXR1cm4tMjg7Y2FzZSA5OnJldHVybiBaW2JuKCk+PjJdPTI4LC0xfX1jYXRjaChlKXtpZih2b2lkIDA9PT1LZXx8IShlIGluc3RhbmNlb2YgS2UuRXJybm9FcnJvcikpdGhyb3cgZTtyZXR1cm4tZS5lcnJub319LF9fc3lzY2FsbF9mc3RhdDY0OmZ1bmN0aW9uKGUsdCl7dHJ5e3ZhciBuPVllLmdldFN0cmVhbUZyb21GRChlKTtyZXR1cm4gWWUuZG9TdGF0KEtlLnN0YXQsbi5wYXRoLHQpfWNhdGNoKGUpe2lmKHZvaWQgMD09PUtlfHwhKGUgaW5zdGFuY2VvZiBLZS5FcnJub0Vycm9yKSl0aHJvdyBlO3JldHVybi1lLmVycm5vfX0sX19zeXNjYWxsX2Z0cnVuY2F0ZTY0OmZ1bmN0aW9uKGUsdCl7dHJ5e3ZhciBuPU51bWJlcih0KTtyZXR1cm4gS2UuZnRydW5jYXRlKGUsbiksMH1jYXRjaChlKXtpZih2b2lkIDA9PT1LZXx8IShlIGluc3RhbmNlb2YgS2UuRXJybm9FcnJvcikpdGhyb3cgZTtyZXR1cm4tZS5lcnJub319LF9fc3lzY2FsbF9nZXRjd2Q6ZnVuY3Rpb24oZSx0KXt0cnl7aWYoMD09PXQpcmV0dXJuLTI4O3ZhciBuPUtlLmN3ZCgpLHI9QihuKSsxO3JldHVybiB0PHI/LTY4OihGKG4sZSx0KSxyKX1jYXRjaChlKXtpZih2b2lkIDA9PT1LZXx8IShlIGluc3RhbmNlb2YgS2UuRXJybm9FcnJvcikpdGhyb3cgZTtyZXR1cm4tZS5lcnJub319LF9fc3lzY2FsbF9pb2N0bDpmdW5jdGlvbihlLHQsbil7WWUudmFyYXJncz1uO3RyeXt2YXIgcj1ZZS5nZXRTdHJlYW1Gcm9tRkQoZSk7c3dpdGNoKHQpe2Nhc2UgMjE1MDk6Y2FzZSAyMTUwNTpjYXNlIDIxNTEwOmNhc2UgMjE1MTE6Y2FzZSAyMTUxMjpjYXNlIDIxNTA2OmNhc2UgMjE1MDc6Y2FzZSAyMTUwODpjYXNlIDIxNTIzOmNhc2UgMjE1MjQ6cmV0dXJuIHIudHR5PzA6LTU5O2Nhc2UgMjE1MTk6aWYoIXIudHR5KXJldHVybi01OTt2YXIgaT1ZZS5nZXQoKTtyZXR1cm4gWltpPj4yXT0wLDA7Y2FzZSAyMTUyMDpyZXR1cm4gci50dHk/LTI4Oi01OTtjYXNlIDIxNTMxOnJldHVybiBpPVllLmdldCgpLEtlLmlvY3RsKHIsdCxpKTtkZWZhdWx0OlRlKFwiYmFkIGlvY3RsIHN5c2NhbGwgXCIrdCl9fWNhdGNoKGUpe2lmKHZvaWQgMD09PUtlfHwhKGUgaW5zdGFuY2VvZiBLZS5FcnJub0Vycm9yKSl0aHJvdyBlO3JldHVybi1lLmVycm5vfX0sX19zeXNjYWxsX2xzdGF0NjQ6ZnVuY3Rpb24oZSx0KXt0cnl7cmV0dXJuIGU9WWUuZ2V0U3RyKGUpLFllLmRvU3RhdChLZS5sc3RhdCxlLHQpfWNhdGNoKGUpe2lmKHZvaWQgMD09PUtlfHwhKGUgaW5zdGFuY2VvZiBLZS5FcnJub0Vycm9yKSl0aHJvdyBlO3JldHVybi1lLmVycm5vfX0sX19zeXNjYWxsX21rZGlyYXQ6ZnVuY3Rpb24oZSx0LG4pe3RyeXtyZXR1cm4gdD1ZZS5nZXRTdHIodCksdD1ZZS5jYWxjdWxhdGVBdChlLHQpLFwiL1wiPT09KHQ9QmUubm9ybWFsaXplKHQpKVt0Lmxlbmd0aC0xXSYmKHQ9dC5zdWJzdHIoMCx0Lmxlbmd0aC0xKSksS2UubWtkaXIodCxuLDApLDB9Y2F0Y2goZSl7aWYodm9pZCAwPT09S2V8fCEoZSBpbnN0YW5jZW9mIEtlLkVycm5vRXJyb3IpKXRocm93IGU7cmV0dXJuLWUuZXJybm99fSxfX3N5c2NhbGxfbmV3ZnN0YXRhdDpmdW5jdGlvbihlLHQsbixyKXt0cnl7dD1ZZS5nZXRTdHIodCk7dmFyIGk9MjU2JnIsbz00MDk2JnI7cmV0dXJuIFAoIShyJj0tNDM1MyksciksdD1ZZS5jYWxjdWxhdGVBdChlLHQsbyksWWUuZG9TdGF0KGk/S2UubHN0YXQ6S2Uuc3RhdCx0LG4pfWNhdGNoKGUpe2lmKHZvaWQgMD09PUtlfHwhKGUgaW5zdGFuY2VvZiBLZS5FcnJub0Vycm9yKSl0aHJvdyBlO3JldHVybi1lLmVycm5vfX0sX19zeXNjYWxsX29wZW5hdDpmdW5jdGlvbihlLHQsbixyKXtZZS52YXJhcmdzPXI7dHJ5e3Q9WWUuZ2V0U3RyKHQpLHQ9WWUuY2FsY3VsYXRlQXQoZSx0KTt2YXIgaT1yP1llLmdldCgpOjA7cmV0dXJuIEtlLm9wZW4odCxuLGkpLmZkfWNhdGNoKGUpe2lmKHZvaWQgMD09PUtlfHwhKGUgaW5zdGFuY2VvZiBLZS5FcnJub0Vycm9yKSl0aHJvdyBlO3JldHVybi1lLmVycm5vfX0sX19zeXNjYWxsX3JlYWRsaW5rYXQ6ZnVuY3Rpb24oZSx0LG4scil7dHJ5e2lmKHQ9WWUuZ2V0U3RyKHQpLHQ9WWUuY2FsY3VsYXRlQXQoZSx0KSxyPD0wKXJldHVybi0yODt2YXIgaT1LZS5yZWFkbGluayh0KSxvPU1hdGgubWluKHIsQihpKSksYT1HW24rb107cmV0dXJuIEYoaSxuLHIrMSksR1tuK29dPWEsb31jYXRjaChlKXtpZih2b2lkIDA9PT1LZXx8IShlIGluc3RhbmNlb2YgS2UuRXJybm9FcnJvcikpdGhyb3cgZTtyZXR1cm4tZS5lcnJub319LF9fc3lzY2FsbF9ybWRpcjpmdW5jdGlvbihlKXt0cnl7cmV0dXJuIGU9WWUuZ2V0U3RyKGUpLEtlLnJtZGlyKGUpLDB9Y2F0Y2goZSl7aWYodm9pZCAwPT09S2V8fCEoZSBpbnN0YW5jZW9mIEtlLkVycm5vRXJyb3IpKXRocm93IGU7cmV0dXJuLWUuZXJybm99fSxfX3N5c2NhbGxfc29ja2V0OmZ1bmN0aW9uKGUsdCxuKXt0cnl7dmFyIHI9cWUuY3JlYXRlU29ja2V0KGUsdCxuKTtyZXR1cm4gUChyLnN0cmVhbS5mZDw2NCksci5zdHJlYW0uZmR9Y2F0Y2goZSl7aWYodm9pZCAwPT09S2V8fCEoZSBpbnN0YW5jZW9mIEtlLkVycm5vRXJyb3IpKXRocm93IGU7cmV0dXJuLWUuZXJybm99fSxfX3N5c2NhbGxfc3RhdDY0OmZ1bmN0aW9uKGUsdCl7dHJ5e3JldHVybiBlPVllLmdldFN0cihlKSxZZS5kb1N0YXQoS2Uuc3RhdCxlLHQpfWNhdGNoKGUpe2lmKHZvaWQgMD09PUtlfHwhKGUgaW5zdGFuY2VvZiBLZS5FcnJub0Vycm9yKSl0aHJvdyBlO3JldHVybi1lLmVycm5vfX0sX19zeXNjYWxsX3VubGlua2F0OmZ1bmN0aW9uKGUsdCxuKXt0cnl7cmV0dXJuIHQ9WWUuZ2V0U3RyKHQpLHQ9WWUuY2FsY3VsYXRlQXQoZSx0KSwwPT09bj9LZS51bmxpbmsodCk6NTEyPT09bj9LZS5ybWRpcih0KTpUZShcIkludmFsaWQgZmxhZ3MgcGFzc2VkIHRvIHVubGlua2F0XCIpLDB9Y2F0Y2goZSl7aWYodm9pZCAwPT09S2V8fCEoZSBpbnN0YW5jZW9mIEtlLkVycm5vRXJyb3IpKXRocm93IGU7cmV0dXJuLWUuZXJybm99fSxfX3N5c2NhbGxfdXRpbWVuc2F0OmZ1bmN0aW9uKGUsdCxuLHIpe3RyeXtpZih0PVllLmdldFN0cih0KSxQKDA9PT1yKSx0PVllLmNhbGN1bGF0ZUF0KGUsdCwhMCksbil7dmFyIGk9WltuPj4yXSxvPVpbbis0Pj4yXTthPTFlMyppK28vMWU2LHM9MWUzKihpPVpbKG4rPTgpPj4yXSkrKG89WltuKzQ+PjJdKS8xZTZ9ZWxzZSB2YXIgYT1EYXRlLm5vdygpLHM9YTtyZXR1cm4gS2UudXRpbWUodCxhLHMpLDB9Y2F0Y2goZSl7aWYodm9pZCAwPT09S2V8fCEoZSBpbnN0YW5jZW9mIEtlLkVycm5vRXJyb3IpKXRocm93IGU7cmV0dXJuLWUuZXJybm99fSxfZGxpbml0OmZ1bmN0aW9uKGUpe30sX2Rsb3Blbl9qczpmdW5jdGlvbihlLHQpe1RlKFhlKX0sX2Rsc3ltX2pzOmZ1bmN0aW9uKGUsdCl7VGUoWGUpfSxfZW1iaW5kX3JlZ2lzdGVyX2JpZ2ludDpmdW5jdGlvbihlLHQsbixyLGkpe3Q9JGUodCk7dmFyIG89aHQobiksYT0tMSE9dC5pbmRleE9mKFwidVwiKTthJiYoaT0oQmlnSW50KDEpPDxCaWdJbnQoNjQpKS1CaWdJbnQoMSkpLHB0KGUse25hbWU6dCxmcm9tV2lyZVR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHRvV2lyZVR5cGU6ZnVuY3Rpb24oZSxuKXtpZihcImJpZ2ludFwiIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCBcIicrUWUobikrJ1wiIHRvICcrdGhpcy5uYW1lKTtpZihuPHJ8fG4+aSl0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXNzaW5nIGEgbnVtYmVyIFwiJytRZShuKSsnXCIgZnJvbSBKUyBzaWRlIHRvIEMvQysrIHNpZGUgdG8gYW4gYXJndW1lbnQgb2YgdHlwZSBcIicrdCsnXCIsIHdoaWNoIGlzIG91dHNpZGUgdGhlIHZhbGlkIHJhbmdlIFsnK3IrXCIsIFwiK2krXCJdIVwiKTtyZXR1cm4gbn0sYXJnUGFja0FkdmFuY2U6OCxyZWFkVmFsdWVGcm9tUG9pbnRlcjptdCh0LG8sIWEpLGRlc3RydWN0b3JGdW5jdGlvbjpudWxsfSl9LF9lbWJpbmRfcmVnaXN0ZXJfYm9vbDpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPWh0KG4pO3B0KGUse25hbWU6dD0kZSh0KSxmcm9tV2lyZVR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuISFlfSx0b1dpcmVUeXBlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/cjppfSxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOmZ1bmN0aW9uKGUpe3ZhciByO2lmKDE9PT1uKXI9RztlbHNlIGlmKDI9PT1uKXI9VztlbHNle2lmKDQhPT1uKXRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmtub3duIGJvb2xlYW4gdHlwZSBzaXplOiBcIit0KTtyPVp9cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKHJbZT4+b10pfSxkZXN0cnVjdG9yRnVuY3Rpb246bnVsbH0pfSxfZW1iaW5kX3JlZ2lzdGVyX2NsYXNzOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyxjLGwsdSxkLGYpe3U9JGUodSksbz1WdChpLG8pLHMmJihzPVZ0KGEscykpLGwmJihsPVZ0KGMsbCkpLGY9VnQoZCxmKTt2YXIgcD1vdCh1KTt3dChwLChmdW5jdGlvbigpe1d0KFwiQ2Fubm90IGNvbnN0cnVjdCBcIit1K1wiIGR1ZSB0byB1bmJvdW5kIHR5cGVzXCIsW3JdKX0pKSxmdChbZSx0LG5dLHI/W3JdOltdLChmdW5jdGlvbih0KXt2YXIgbixpO3Q9dFswXSxpPXI/KG49dC5yZWdpc3RlcmVkQ2xhc3MpLmluc3RhbmNlUHJvdG90eXBlOk90LnByb3RvdHlwZTt2YXIgYT1hdChwLChmdW5jdGlvbigpe2lmKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSE9PWMpdGhyb3cgbmV3IGN0KFwiVXNlICduZXcnIHRvIGNvbnN0cnVjdCBcIit1KTtpZih2b2lkIDA9PT1kLmNvbnN0cnVjdG9yX2JvZHkpdGhyb3cgbmV3IGN0KHUrXCIgaGFzIG5vIGFjY2Vzc2libGUgY29uc3RydWN0b3JcIik7dmFyIGU9ZC5jb25zdHJ1Y3Rvcl9ib2R5W2FyZ3VtZW50cy5sZW5ndGhdO2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IGN0KFwiVHJpZWQgdG8gaW52b2tlIGN0b3Igb2YgXCIrdStcIiB3aXRoIGludmFsaWQgbnVtYmVyIG9mIHBhcmFtZXRlcnMgKFwiK2FyZ3VtZW50cy5sZW5ndGgrXCIpIC0gZXhwZWN0ZWQgKFwiK09iamVjdC5rZXlzKGQuY29uc3RydWN0b3JfYm9keSkudG9TdHJpbmcoKStcIikgcGFyYW1ldGVycyBpbnN0ZWFkIVwiKTtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSksYz1PYmplY3QuY3JlYXRlKGkse2NvbnN0cnVjdG9yOnt2YWx1ZTphfX0pO2EucHJvdG90eXBlPWM7dmFyIGQ9bmV3IER0KHUsYSxjLGYsbixvLHMsbCksbT1uZXcgRnQodSxkLCEwLCExLCExKSxoPW5ldyBGdCh1K1wiKlwiLGQsITEsITEsITEpLHY9bmV3IEZ0KHUrXCIgY29uc3QqXCIsZCwhMSwhMCwhMSk7cmV0dXJuIEl0W2VdPXtwb2ludGVyVHlwZTpoLGNvbnN0UG9pbnRlclR5cGU6dn0sQnQocCxhKSxbbSxoLHZdfSkpfSxfZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2NsYXNzX2Z1bmN0aW9uOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEpe3ZhciBzPXp0KG4scik7dD0kZSh0KSxvPVZ0KGksbyksZnQoW10sW2VdLChmdW5jdGlvbihlKXt2YXIgcj0oZT1lWzBdKS5uYW1lK1wiLlwiK3Q7ZnVuY3Rpb24gaSgpe1d0KFwiQ2Fubm90IGNhbGwgXCIrcitcIiBkdWUgdG8gdW5ib3VuZCB0eXBlc1wiLHMpfXQuc3RhcnRzV2l0aChcIkBAXCIpJiYodD1TeW1ib2xbdC5zdWJzdHJpbmcoMildKTt2YXIgYz1lLnJlZ2lzdGVyZWRDbGFzcy5jb25zdHJ1Y3RvcjtyZXR1cm4gdm9pZCAwPT09Y1t0XT8oaS5hcmdDb3VudD1uLTEsY1t0XT1pKTooTnQoYyx0LHIpLGNbdF0ub3ZlcmxvYWRUYWJsZVtuLTFdPWkpLGZ0KFtdLHMsKGZ1bmN0aW9uKGUpe3ZhciBpPVtlWzBdLG51bGxdLmNvbmNhdChlLnNsaWNlKDEpKSxzPVp0KHIsaSxudWxsLG8sYSk7cmV0dXJuIHZvaWQgMD09PWNbdF0ub3ZlcmxvYWRUYWJsZT8ocy5hcmdDb3VudD1uLTEsY1t0XT1zKTpjW3RdLm92ZXJsb2FkVGFibGVbbi0xXT1zLFtdfSkpLFtdfSkpfSxfZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyl7dmFyIGM9enQobixyKTt0PSRlKHQpLG89VnQoaSxvKSxmdChbXSxbZV0sKGZ1bmN0aW9uKGUpe3ZhciByPShlPWVbMF0pLm5hbWUrXCIuXCIrdDtmdW5jdGlvbiBpKCl7V3QoXCJDYW5ub3QgY2FsbCBcIityK1wiIGR1ZSB0byB1bmJvdW5kIHR5cGVzXCIsYyl9dC5zdGFydHNXaXRoKFwiQEBcIikmJih0PVN5bWJvbFt0LnN1YnN0cmluZygyKV0pLHMmJmUucmVnaXN0ZXJlZENsYXNzLnB1cmVWaXJ0dWFsRnVuY3Rpb25zLnB1c2godCk7dmFyIGw9ZS5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGUsdT1sW3RdO3JldHVybiB2b2lkIDA9PT11fHx2b2lkIDA9PT11Lm92ZXJsb2FkVGFibGUmJnUuY2xhc3NOYW1lIT09ZS5uYW1lJiZ1LmFyZ0NvdW50PT09bi0yPyhpLmFyZ0NvdW50PW4tMixpLmNsYXNzTmFtZT1lLm5hbWUsbFt0XT1pKTooTnQobCx0LHIpLGxbdF0ub3ZlcmxvYWRUYWJsZVtuLTJdPWkpLGZ0KFtdLGMsKGZ1bmN0aW9uKGkpe3ZhciBzPVp0KHIsaSxlLG8sYSk7cmV0dXJuIHZvaWQgMD09PWxbdF0ub3ZlcmxvYWRUYWJsZT8ocy5hcmdDb3VudD1uLTIsbFt0XT1zKTpsW3RdLm92ZXJsb2FkVGFibGVbbi0yXT1zLFtdfSkpLFtdfSkpfSxfZW1iaW5kX3JlZ2lzdGVyX2VtdmFsOmZ1bmN0aW9uKGUsdCl7cHQoZSx7bmFtZTp0PSRlKHQpLGZyb21XaXJlVHlwZTpmdW5jdGlvbihlKXt2YXIgdD1YdC50b1ZhbHVlKGUpO3JldHVybiBxdChlKSx0fSx0b1dpcmVUeXBlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFh0LnRvSGFuZGxlKHQpfSxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOnh0LGRlc3RydWN0b3JGdW5jdGlvbjpudWxsfSl9LF9lbWJpbmRfcmVnaXN0ZXJfZmxvYXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWh0KG4pO3B0KGUse25hbWU6dD0kZSh0KSxmcm9tV2lyZVR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHRvV2lyZVR5cGU6ZnVuY3Rpb24oZSx0KXtpZihcIm51bWJlclwiIT10eXBlb2YgdCYmXCJib29sZWFuXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IFwiJytRZSh0KSsnXCIgdG8gJyt0aGlzLm5hbWUpO3JldHVybiB0fSxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOlF0KHQsciksZGVzdHJ1Y3RvckZ1bmN0aW9uOm51bGx9KX0sX2VtYmluZF9yZWdpc3Rlcl9mdW5jdGlvbjpmdW5jdGlvbihlLHQsbixyLGksbyl7dmFyIGE9enQodCxuKTtlPSRlKGUpLGk9VnQocixpKSx3dChlLChmdW5jdGlvbigpe1d0KFwiQ2Fubm90IGNhbGwgXCIrZStcIiBkdWUgdG8gdW5ib3VuZCB0eXBlc1wiLGEpfSksdC0xKSxmdChbXSxhLChmdW5jdGlvbihuKXt2YXIgcj1bblswXSxudWxsXS5jb25jYXQobi5zbGljZSgxKSk7cmV0dXJuIEJ0KGUsWnQoZSxyLG51bGwsaSxvKSx0LTEpLFtdfSkpfSxfZW1iaW5kX3JlZ2lzdGVyX2ludGVnZXI6ZnVuY3Rpb24oZSx0LG4scixpKXt0PSRlKHQpLC0xPT09aSYmKGk9NDI5NDk2NzI5NSk7dmFyIG89aHQobiksYT1lPT5lO2lmKDA9PT1yKXt2YXIgcz0zMi04Km47YT1lPT5lPDxzPj4+c312YXIgYz10LmluY2x1ZGVzKFwidW5zaWduZWRcIiksbD0oZSxuKT0+e2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlJiZcImJvb2xlYW5cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgXCInK1FlKGUpKydcIiB0byAnK24pO2lmKGU8cnx8ZT5pKXRocm93IG5ldyBUeXBlRXJyb3IoJ1Bhc3NpbmcgYSBudW1iZXIgXCInK1FlKGUpKydcIiBmcm9tIEpTIHNpZGUgdG8gQy9DKysgc2lkZSB0byBhbiBhcmd1bWVudCBvZiB0eXBlIFwiJyt0KydcIiwgd2hpY2ggaXMgb3V0c2lkZSB0aGUgdmFsaWQgcmFuZ2UgWycrcitcIiwgXCIraStcIl0hXCIpfTtwdChlLHtuYW1lOnQsZnJvbVdpcmVUeXBlOmEsdG9XaXJlVHlwZTpjP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIGwodCx0aGlzLm5hbWUpLHQ+Pj4wfTpmdW5jdGlvbihlLHQpe3JldHVybiBsKHQsdGhpcy5uYW1lKSx0fSxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOm10KHQsbywwIT09ciksZGVzdHJ1Y3RvckZ1bmN0aW9uOm51bGx9KX0sX2VtYmluZF9yZWdpc3Rlcl9tZW1vcnlfdmlldzpmdW5jdGlvbihlLHQsbil7dmFyIHI9W0ludDhBcnJheSxVaW50OEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5LEJpZ0ludDY0QXJyYXksQmlnVWludDY0QXJyYXldW3RdO2Z1bmN0aW9uIGkoZSl7dmFyIHQ9eixuPXRbZT4+PTJdLGk9dFtlKzFdO3JldHVybiBuZXcgcihWLGksbil9cHQoZSx7bmFtZTpuPSRlKG4pLGZyb21XaXJlVHlwZTppLGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6aX0se2lnbm9yZUR1cGxpY2F0ZVJlZ2lzdHJhdGlvbnM6ITB9KX0sX2VtYmluZF9yZWdpc3Rlcl9zbWFydF9wdHI6ZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzLGMsbCx1LGQpe249JGUobiksbz1WdChpLG8pLHM9VnQoYSxzKSxsPVZ0KGMsbCksZD1WdCh1LGQpLGZ0KFtlXSxbdF0sKGZ1bmN0aW9uKGUpe3JldHVybiBlPWVbMF0sW25ldyBGdChuLGUucmVnaXN0ZXJlZENsYXNzLCExLCExLCEwLGUscixvLHMsbCxkKV19KSl9LF9lbWJpbmRfcmVnaXN0ZXJfc3RkX3N0cmluZzpmdW5jdGlvbihlLHQpe3ZhciBuPVwic3RkOjpzdHJpbmdcIj09PSh0PSRlKHQpKTtwdChlLHtuYW1lOnQsZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKGUpe3ZhciB0LHI9eltlPj4yXTtpZihuKWZvcih2YXIgaT1lKzQsbz0wO288PXI7KytvKXt2YXIgYT1lKzQrbztpZihvPT1yfHwwPT1IW2FdKXt2YXIgcz1VKGksYS1pKTt2b2lkIDA9PT10P3Q9czoodCs9U3RyaW5nLmZyb21DaGFyQ29kZSgwKSx0Kz1zKSxpPWErMX19ZWxzZXt2YXIgYz1uZXcgQXJyYXkocik7Zm9yKG89MDtvPHI7KytvKWNbb109U3RyaW5nLmZyb21DaGFyQ29kZShIW2UrNCtvXSk7dD1jLmpvaW4oXCJcIil9cmV0dXJuIFNuKGUpLHR9LHRvV2lyZVR5cGU6ZnVuY3Rpb24oZSx0KXt0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXImJih0PW5ldyBVaW50OEFycmF5KHQpKTt2YXIgcj1cInN0cmluZ1wiPT10eXBlb2YgdDtyfHx0IGluc3RhbmNlb2YgVWludDhBcnJheXx8dCBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5fHx0IGluc3RhbmNlb2YgSW50OEFycmF5fHxsdChcIkNhbm5vdCBwYXNzIG5vbi1zdHJpbmcgdG8gc3RkOjpzdHJpbmdcIik7dmFyIGk9KG4mJnI/KCk9PkIodCk6KCk9PnQubGVuZ3RoKSgpLG89SW4oNCtpKzEpO2lmKHpbbz4+Ml09aSxuJiZyKUYodCxvKzQsaSsxKTtlbHNlIGlmKHIpZm9yKHZhciBhPTA7YTxpOysrYSl7dmFyIHM9dC5jaGFyQ29kZUF0KGEpO3M+MjU1JiYoU24obyksbHQoXCJTdHJpbmcgaGFzIFVURi0xNiBjb2RlIHVuaXRzIHRoYXQgZG8gbm90IGZpdCBpbiA4IGJpdHNcIikpLEhbbys0K2FdPXN9ZWxzZSBmb3IoYT0wO2E8aTsrK2EpSFtvKzQrYV09dFthXTtyZXR1cm4gbnVsbCE9PWUmJmUucHVzaChTbixvKSxvfSxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOnh0LGRlc3RydWN0b3JGdW5jdGlvbjpmdW5jdGlvbihlKXtTbihlKX19KX0sX2VtYmluZF9yZWdpc3Rlcl9zdGRfd3N0cmluZzpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscztuPSRlKG4pLDI9PT10PyhyPUosaT0kLGE9ZWUsbz0oKT0+aixzPTEpOjQ9PT10JiYocj10ZSxpPW5lLGE9cmUsbz0oKT0+eixzPTIpLHB0KGUse25hbWU6bixmcm9tV2lyZVR5cGU6ZnVuY3Rpb24oZSl7Zm9yKHZhciBuLGk9eltlPj4yXSxhPW8oKSxjPWUrNCxsPTA7bDw9aTsrK2wpe3ZhciB1PWUrNCtsKnQ7aWYobD09aXx8MD09YVt1Pj5zXSl7dmFyIGQ9cihjLHUtYyk7dm9pZCAwPT09bj9uPWQ6KG4rPVN0cmluZy5mcm9tQ2hhckNvZGUoMCksbis9ZCksYz11K3R9fXJldHVybiBTbihlKSxufSx0b1dpcmVUeXBlOmZ1bmN0aW9uKGUscil7XCJzdHJpbmdcIiE9dHlwZW9mIHImJmx0KFwiQ2Fubm90IHBhc3Mgbm9uLXN0cmluZyB0byBDKysgc3RyaW5nIHR5cGUgXCIrbik7dmFyIG89YShyKSxjPUluKDQrbyt0KTtyZXR1cm4geltjPj4yXT1vPj5zLGkocixjKzQsbyt0KSxudWxsIT09ZSYmZS5wdXNoKFNuLGMpLGN9LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6eHQsZGVzdHJ1Y3RvckZ1bmN0aW9uOmZ1bmN0aW9uKGUpe1NuKGUpfX0pfSxfZW1iaW5kX3JlZ2lzdGVyX3ZvaWQ6ZnVuY3Rpb24oZSx0KXtwdChlLHtpc1ZvaWQ6ITAsbmFtZTp0PSRlKHQpLGFyZ1BhY2tBZHZhbmNlOjAsZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKCl7fSx0b1dpcmVUeXBlOmZ1bmN0aW9uKGUsdCl7fX0pfSxfZW1zY3JpcHRlbl9kYXRlX25vdzpmdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdygpfSxfZW1zY3JpcHRlbl9nZXRfbm93X2lzX21vbm90b25pYzpmdW5jdGlvbigpe3JldHVybiEwfSxfZW12YWxfYXM6ZnVuY3Rpb24oZSx0LG4pe2U9WHQudG9WYWx1ZShlKSx0PUp0KHQsXCJlbXZhbDo6YXNcIik7dmFyIHI9W10saT1YdC50b0hhbmRsZShyKTtyZXR1cm4gWltuPj4yXT1pLHQudG9XaXJlVHlwZShyLGUpfSxfZW12YWxfYXNfaW50NjQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPVh0LnRvVmFsdWUoZSksKHQ9SnQodCxcImVtdmFsOjphc1wiKSkudG9XaXJlVHlwZShudWxsLGUpfSxfZW12YWxfYXNfdWludDY0OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT1YdC50b1ZhbHVlKGUpLCh0PUp0KHQsXCJlbXZhbDo6YXNcIikpLnRvV2lyZVR5cGUobnVsbCxlKX0sX2VtdmFsX2NhbGw6ZnVuY3Rpb24oZSx0LG4scil7ZT1YdC50b1ZhbHVlKGUpO2Zvcih2YXIgaT0kdCh0LG4pLG89bmV3IEFycmF5KHQpLGE9MDthPHQ7KythKXt2YXIgcz1pW2FdO29bYV09cy5yZWFkVmFsdWVGcm9tUG9pbnRlcihyKSxyKz1zLmFyZ1BhY2tBZHZhbmNlfXZhciBjPWUuYXBwbHkodm9pZCAwLG8pO3JldHVybiBYdC50b0hhbmRsZShjKX0sX2VtdmFsX2NhbGxfbWV0aG9kOmZ1bmN0aW9uKGUsdCxuLHIsaSl7cmV0dXJuKGU9bm5bZV0pKHQ9WHQudG9WYWx1ZSh0KSxuPXRuKG4pLGZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiBaW2U+PjJdPVh0LnRvSGFuZGxlKHQpLHR9KHIpLGkpfSxfZW12YWxfY2FsbF92b2lkX21ldGhvZDpmdW5jdGlvbihlLHQsbixyKXsoZT1ubltlXSkodD1YdC50b1ZhbHVlKHQpLG49dG4obiksbnVsbCxyKX0sX2VtdmFsX2RlY3JlZjpxdCxfZW12YWxfZ2V0X2dsb2JhbDpmdW5jdGlvbihlKXtyZXR1cm4gMD09PWU/WHQudG9IYW5kbGUocm4oKSk6KGU9dG4oZSksWHQudG9IYW5kbGUocm4oKVtlXSkpfSxfZW12YWxfZ2V0X21ldGhvZF9jYWxsZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj0kdChlLHQpLHI9blswXSxpPXIubmFtZStcIl8kXCIrbi5zbGljZSgxKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLm5hbWV9KSkuam9pbihcIl9cIikrXCIkXCIsbz1hbltpXTtpZih2b2lkIDAhPT1vKXJldHVybiBvO3ZhciBhLHMsYz1uZXcgQXJyYXkoZS0xKTtyZXR1cm4gYT0odCxpLG8sYSk9Pntmb3IodmFyIHM9MCxsPTA7bDxlLTE7KytsKWNbbF09bltsKzFdLnJlYWRWYWx1ZUZyb21Qb2ludGVyKGErcykscys9bltsKzFdLmFyZ1BhY2tBZHZhbmNlO3ZhciB1PXRbaV0uYXBwbHkodCxjKTtmb3IobD0wO2w8ZS0xOysrbCluW2wrMV0uZGVsZXRlT2JqZWN0JiZuW2wrMV0uZGVsZXRlT2JqZWN0KGNbbF0pO2lmKCFyLmlzVm9pZClyZXR1cm4gci50b1dpcmVUeXBlKG8sdSl9LHM9bm4ubGVuZ3RoLG5uLnB1c2goYSksbz1zLGFuW2ldPW8sb30sX2VtdmFsX2dldF9tb2R1bGVfcHJvcGVydHk6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9dG4oZSksWHQudG9IYW5kbGUob1tlXSl9LF9lbXZhbF9nZXRfcHJvcGVydHk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1YdC50b1ZhbHVlKGUpLHQ9WHQudG9WYWx1ZSh0KSxYdC50b0hhbmRsZShlW3RdKX0sX2VtdmFsX2luOmZ1bmN0aW9uKGUsdCl7cmV0dXJuKGU9WHQudG9WYWx1ZShlKSlpbiBYdC50b1ZhbHVlKHQpfSxfZW12YWxfaW5jcmVmOmZ1bmN0aW9uKGUpe2U+NCYmKFl0W2VdLnJlZmNvdW50Kz0xKX0sX2VtdmFsX2luc3RhbmNlb2Y6ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZT1YdC50b1ZhbHVlKGUpKWluc3RhbmNlb2YgWHQudG9WYWx1ZSh0KX0sX2VtdmFsX2lzX3N0cmluZzpmdW5jdGlvbihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YoZT1YdC50b1ZhbHVlKGUpKX0sX2VtdmFsX25ldzpmdW5jdGlvbihlLHQsbixyKXtlPVh0LnRvVmFsdWUoZSk7dmFyIGk9c25bdF07cmV0dXJuIGl8fChpPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShlKzEpO3JldHVybiBmdW5jdGlvbihuLHIsaSl7dFswXT1uO2Zvcih2YXIgbz0wO288ZTsrK28pe3ZhciBhPUp0KFpbKHI+PjIpK29dLFwicGFyYW1ldGVyIFwiK28pO3RbbysxXT1hLnJlYWRWYWx1ZUZyb21Qb2ludGVyKGkpLGkrPWEuYXJnUGFja0FkdmFuY2V9dmFyIHM9bmV3KG4uYmluZC5hcHBseShuLHQpKTtyZXR1cm4gWHQudG9IYW5kbGUocyl9fSh0KSxzblt0XT1pKSxpKGUsbixyKX0sX2VtdmFsX25ld19hcnJheTpmdW5jdGlvbigpe3JldHVybiBYdC50b0hhbmRsZShbXSl9LF9lbXZhbF9uZXdfY3N0cmluZzpmdW5jdGlvbihlKXtyZXR1cm4gWHQudG9IYW5kbGUodG4oZSkpfSxfZW12YWxfbmV3X29iamVjdDpmdW5jdGlvbigpe3JldHVybiBYdC50b0hhbmRsZSh7fSl9LF9lbXZhbF9ydW5fZGVzdHJ1Y3RvcnM6ZnVuY3Rpb24oZSl7anQoWHQudG9WYWx1ZShlKSkscXQoZSl9LF9lbXZhbF9zZXRfcHJvcGVydHk6ZnVuY3Rpb24oZSx0LG4pe2U9WHQudG9WYWx1ZShlKSx0PVh0LnRvVmFsdWUodCksbj1YdC50b1ZhbHVlKG4pLGVbdF09bn0sX2VtdmFsX3Rha2VfdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj0oZT1KdChlLFwiX2VtdmFsX3Rha2VfdmFsdWVcIikpLnJlYWRWYWx1ZUZyb21Qb2ludGVyKHQpO3JldHVybiBYdC50b0hhbmRsZShuKX0sX2VtdmFsX3Rocm93OmZ1bmN0aW9uKGUpe3Rocm93IFh0LnRvVmFsdWUoZSl9LF9sb2NhbHRpbWVfanM6ZnVuY3Rpb24oZSx0KXt2YXIgbj1uZXcgRGF0ZSgxZTMqWltlPj4yXSk7Wlt0Pj4yXT1uLmdldFNlY29uZHMoKSxaW3QrND4+Ml09bi5nZXRNaW51dGVzKCksWlt0Kzg+PjJdPW4uZ2V0SG91cnMoKSxaW3QrMTI+PjJdPW4uZ2V0RGF0ZSgpLFpbdCsxNj4+Ml09bi5nZXRNb250aCgpLFpbdCsyMD4+Ml09bi5nZXRGdWxsWWVhcigpLTE5MDAsWlt0KzI0Pj4yXT1uLmdldERheSgpO3ZhciByPW5ldyBEYXRlKG4uZ2V0RnVsbFllYXIoKSwwLDEpLGk9KG4uZ2V0VGltZSgpLXIuZ2V0VGltZSgpKS84NjRlNXwwO1pbdCsyOD4+Ml09aSxaW3QrMzY+PjJdPS02MCpuLmdldFRpbWV6b25lT2Zmc2V0KCk7dmFyIG89bmV3IERhdGUobi5nZXRGdWxsWWVhcigpLDYsMSkuZ2V0VGltZXpvbmVPZmZzZXQoKSxhPXIuZ2V0VGltZXpvbmVPZmZzZXQoKSxzPTB8KG8hPWEmJm4uZ2V0VGltZXpvbmVPZmZzZXQoKT09TWF0aC5taW4oYSxvKSk7Wlt0KzMyPj4yXT1zfSxfbW1hcF9qczpmdW5jdGlvbihlLHQsbixyLGksbyxhLHMpe3RyeXt2YXIgYz1LZS5nZXRTdHJlYW0oaSk7aWYoIWMpcmV0dXJuLTg7dmFyIGw9S2UubW1hcChjLGUsdCxvLG4sciksdT1sLnB0cjtyZXR1cm4gWlthPj4yXT1sLmFsbG9jYXRlZCx1fWNhdGNoKGUpe2lmKHZvaWQgMD09PUtlfHwhKGUgaW5zdGFuY2VvZiBLZS5FcnJub0Vycm9yKSl0aHJvdyBlO3JldHVybi1lLmVycm5vfX0sX211bm1hcF9qczpmdW5jdGlvbihlLHQsbixyLGksbyl7dHJ5e3ZhciBhPUtlLmdldFN0cmVhbShpKTthJiYoMiZuJiZZZS5kb01zeW5jKGUsYSx0LHIsbyksS2UubXVubWFwKGEpKX1jYXRjaChlKXtpZih2b2lkIDA9PT1LZXx8IShlIGluc3RhbmNlb2YgS2UuRXJybm9FcnJvcikpdGhyb3cgZTtyZXR1cm4tZS5lcnJub319LF90enNldF9qczpmdW5jdGlvbiBlKHQsbixyKXtlLmNhbGxlZHx8KGUuY2FsbGVkPSEwLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCksaT1uZXcgRGF0ZShyLDAsMSksbz1uZXcgRGF0ZShyLDYsMSksYT1pLmdldFRpbWV6b25lT2Zmc2V0KCkscz1vLmdldFRpbWV6b25lT2Zmc2V0KCksYz1NYXRoLm1heChhLHMpO2Z1bmN0aW9uIGwoZSl7dmFyIHQ9ZS50b1RpbWVTdHJpbmcoKS5tYXRjaCgvXFwoKFtBLVphLXogXSspXFwpJC8pO3JldHVybiB0P3RbMV06XCJHTVRcIn1aW2U+PjJdPTYwKmMsWlt0Pj4yXT1OdW1iZXIoYSE9cyk7dmFyIHU9bChpKSxkPWwobyksZj1pZSh1KSxwPWllKGQpO3M8YT8oWltuPj4yXT1mLFpbbis0Pj4yXT1wKTooWltuPj4yXT1wLFpbbis0Pj4yXT1mKX0odCxuLHIpKX0sYWJvcnQ6ZnVuY3Rpb24oKXtUZShcIm5hdGl2ZSBjb2RlIGNhbGxlZCBhYm9ydCgpXCIpfSxkamlubmlfaW5pdF93YXNtOmZ1bmN0aW9uKCl7by5jcHBQcm94eUZpbmFsaXplclJlZ2lzdHJ5PW5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeSgoZT0+e2UubmF0aXZlRGVzdHJveSgpLGUuZGVsZXRlKCl9KSksby5kaXJlY3RCdWZmZXJGaW5hbGl6ZXJSZWdpc3RyeT1uZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoKGU9PntvLl9yZWxlYXNlV2FzbUJ1ZmZlcihlKX0pKSxvLkRqaW5uaUNwcFByb3h5PWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5fZGppbm5pX25hdGl2ZV9yZWY9ZTtsZXQgbj10aGlzO3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7blt0XT1mdW5jdGlvbigpe3JldHVybiBlW3RdKC4uLmFyZ3VtZW50cyl9fSkpfX0sby5EamlubmlKc1Byb21pc2VCdWlsZGVyPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZSgoKHQsbik9PntvLmluaXRDcHBSZXNvbHZlSGFuZGxlcihlLHQsbil9KSl9fSxvLm1ha2VOYXRpdmVQcm9taXNlUmVzb2x2ZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7by5yZXNvbHZlTmF0aXZlUHJvbWlzZShlLHQsbil9fSxvLm1ha2VOYXRpdmVQcm9taXNlUmVqZWN0ZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7by5yZWplY3ROYXRpdmVQcm9taXNlKGUsdCxuKX19LG8ud3JpdGVOYXRpdmVNZW1vcnk9ZnVuY3Rpb24oZSx0KXt2YXIgbj1uZXcgVWludDhBcnJheShlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQsZS5ieXRlTGVuZ3RoKTtvLkhFQVBVOC5zZXQobix0KX0sby5yZWFkTmF0aXZlTWVtb3J5PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbmV3IGUoby5IRUFQVTguYnVmZmVyLnNsaWNlKHQsdCtuKSl9LG8ucHJvdG9idWY9e30sby5yZWdpc3RlclByb3RvYnVmTGliPWZ1bmN0aW9uKGUsdCl7by5wcm90b2J1ZltlXT10fSxvLmNhbGxKc1Byb3h5TWV0aG9kPWZ1bmN0aW9uKGUsdCl7dHJ5e2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KG4+Mj9uLTI6MCksaT0yO2k8bjtpKyspcltpLTJdPWFyZ3VtZW50c1tpXTtyZXR1cm4gZVt0XS5hcHBseShlLHIpfWNhdGNoKGUpe3JldHVybiBlfX19LGRqaW5uaV9yZWdpc3Rlcl9uYW1lX2luX25zOmZ1bmN0aW9uKGUsdCl7ZT0kZShlKTtsZXQgbj0odD0kZSh0KSkuc3BsaXQoXCIuXCIpLHI9bi5wb3AoKSxpPW4ucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlLmhhc093blByb3BlcnR5KHQpfHwoZVt0XT17fSksZVt0XX0pLG8pO2lbcl09b1tlXX0sZW1zY3JpcHRlbl9hc21fY29uc3RfaW50OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1mdW5jdGlvbihlLHQpe3ZhciBuO2ZvcihQKEFycmF5LmlzQXJyYXkoY24pKSxQKHQlMTY9PTApLGNuLmxlbmd0aD0wLHQ+Pj0yO249SFtlKytdOylQKDEwMD09PW58fDEwMj09PW58fDEwNT09PW58fDEwNj09PW4sXCJJbnZhbGlkIGNoYXJhY3RlciBcIituKycoXCInK1N0cmluZy5mcm9tQ2hhckNvZGUobikrJ1wiKSBpbiByZWFkQXNtQ29uc3RBcmdzISBVc2Ugb25seSBcImRcIiwgXCJmXCIgb3IgXCJpXCIsIGFuZCBkbyBub3Qgc3BlY2lmeSBcInZcIiBmb3Igdm9pZCByZXR1cm4gYXJndW1lbnQuJyksdCs9MTA1IT1uJnQsY24ucHVzaCgxMDU9PW4/Wlt0XTooMTA2PT1uP1k6WClbdCsrPj4xXSksKyt0O3JldHVybiBjbn0odCxuKTtyZXR1cm4ga2UuaGFzT3duUHJvcGVydHkoZSl8fFRlKFwiTm8gRU1fQVNNIGNvbnN0YW50IGZvdW5kIGF0IGFkZHJlc3MgXCIrZSksa2VbZV0uYXBwbHkobnVsbCxyKX0sZW1zY3JpcHRlbl9jb25zb2xlX2Vycm9yOmZ1bmN0aW9uKGUpe1AoXCJudW1iZXJcIj09dHlwZW9mIGUpLGNvbnNvbGUuZXJyb3IoVShlKSl9LGVtc2NyaXB0ZW5fZ2V0X2hlYXBfbWF4OmZ1bmN0aW9uKCl7cmV0dXJuIDIxNDc0ODM2NDh9LGVtc2NyaXB0ZW5fZ2V0X25vdzpvbixlbXNjcmlwdGVuX3Jlc2l6ZV9oZWFwOmZ1bmN0aW9uKGUpe3ZhciB0PUgubGVuZ3RoO1AoKGU+Pj49MCk+dCk7dmFyIG4scj0yMTQ3NDgzNjQ4O2U+ciYmKFMoXCJDYW5ub3QgZW5sYXJnZSBtZW1vcnksIGFza2VkIHRvIGdvIHVwIHRvIFwiK2UrXCIgYnl0ZXMsIGJ1dCB0aGUgbGltaXQgaXMgXCIrcitcIiBieXRlcyFcIiksbG4oZSkpO2Zvcih2YXIgaT0xO2k8PTQ7aSo9Mil7dmFyIG89dCooMSsuMi9pKTtvPU1hdGgubWluKG8sZSsxMDA2NjMyOTYpO3ZhciBhPU1hdGgubWluKHIsKG49TWF0aC5tYXgoZSxvKSkrKDY1NTM2LW4lNjU1MzYpJTY1NTM2KTtpZih1bihhKSlyZXR1cm4hMH1TKFwiRmFpbGVkIHRvIGdyb3cgdGhlIGhlYXAgZnJvbSBcIit0K1wiIGJ5dGVzIHRvIFwiK2ErXCIgYnl0ZXMsIG5vdCBlbm91Z2ggbWVtb3J5IVwiKSxsbihlKX0sZW52aXJvbl9nZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj0wO3JldHVybiBmbigpLmZvckVhY2goKGZ1bmN0aW9uKHIsaSl7dmFyIG89dCtuO1pbZSs0Kmk+PjJdPW8sZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKVAoZS5jaGFyQ29kZUF0KHIpPT09KDI1NSZlLmNoYXJDb2RlQXQocikpKSxHW3QrKz4+MF09ZS5jaGFyQ29kZUF0KHIpO0dbdD4+MF09MH0ocixvKSxuKz1yLmxlbmd0aCsxfSkpLDB9LGVudmlyb25fc2l6ZXNfZ2V0OmZ1bmN0aW9uKGUsdCl7dmFyIG49Zm4oKTtaW2U+PjJdPW4ubGVuZ3RoO3ZhciByPTA7cmV0dXJuIG4uZm9yRWFjaCgoZnVuY3Rpb24oZSl7cis9ZS5sZW5ndGgrMX0pKSxaW3Q+PjJdPXIsMH0sZmRfY2xvc2U6ZnVuY3Rpb24oZSl7dHJ5e3ZhciB0PVllLmdldFN0cmVhbUZyb21GRChlKTtyZXR1cm4gS2UuY2xvc2UodCksMH1jYXRjaChlKXtpZih2b2lkIDA9PT1LZXx8IShlIGluc3RhbmNlb2YgS2UuRXJybm9FcnJvcikpdGhyb3cgZTtyZXR1cm4gZS5lcnJub319LGZkX2Zkc3RhdF9nZXQ6ZnVuY3Rpb24oZSx0KXt0cnl7dmFyIG49WWUuZ2V0U3RyZWFtRnJvbUZEKGUpLHI9bi50dHk/MjpLZS5pc0RpcihuLm1vZGUpPzM6S2UuaXNMaW5rKG4ubW9kZSk/Nzo0O3JldHVybiBHW3Q+PjBdPXIsMH1jYXRjaChlKXtpZih2b2lkIDA9PT1LZXx8IShlIGluc3RhbmNlb2YgS2UuRXJybm9FcnJvcikpdGhyb3cgZTtyZXR1cm4gZS5lcnJub319LGZkX3JlYWQ6ZnVuY3Rpb24oZSx0LG4scil7dHJ5e3ZhciBpPWZ1bmN0aW9uKGUsdCxuLHIpe2Zvcih2YXIgaT0wLG89MDtvPG47bysrKXt2YXIgYT16W3Q+PjJdLHM9elt0KzQ+PjJdO3QrPTg7dmFyIGM9S2UucmVhZChlLEcsYSxzLHZvaWQgMCk7aWYoYzwwKXJldHVybi0xO2lmKGkrPWMsYzxzKWJyZWFrfXJldHVybiBpfShZZS5nZXRTdHJlYW1Gcm9tRkQoZSksdCxuKTtyZXR1cm4gWltyPj4yXT1pLDB9Y2F0Y2goZSl7aWYodm9pZCAwPT09S2V8fCEoZSBpbnN0YW5jZW9mIEtlLkVycm5vRXJyb3IpKXRocm93IGU7cmV0dXJuIGUuZXJybm99fSxmZF9zZWVrOmZ1bmN0aW9uKGUsdCxuLHIpe3RyeXt2YXIgaT0wfE51bWJlcih0JkJpZ0ludCg0Mjk0OTY3Mjk1KSksbz0wfE51bWJlcih0Pj5CaWdJbnQoMzIpKSxhPVllLmdldFN0cmVhbUZyb21GRChlKSxzPTQyOTQ5NjcyOTYqbysoaT4+PjApLGM9OTAwNzE5OTI1NDc0MDk5MjtyZXR1cm4gczw9LWN8fHM+PWM/NjE6KEtlLmxsc2VlayhhLHMsbiksWVtyPj4zXT1CaWdJbnQoYS5wb3NpdGlvbiksYS5nZXRkZW50cyYmMD09PXMmJjA9PT1uJiYoYS5nZXRkZW50cz1udWxsKSwwKX1jYXRjaChlKXtpZih2b2lkIDA9PT1LZXx8IShlIGluc3RhbmNlb2YgS2UuRXJybm9FcnJvcikpdGhyb3cgZTtyZXR1cm4gZS5lcnJub319LGZkX3N5bmM6ZnVuY3Rpb24oZSl7dHJ5e3ZhciB0PVllLmdldFN0cmVhbUZyb21GRChlKTtyZXR1cm4gdC5zdHJlYW1fb3BzJiZ0LnN0cmVhbV9vcHMuZnN5bmM/LXQuc3RyZWFtX29wcy5mc3luYyh0KTowfWNhdGNoKGUpe2lmKHZvaWQgMD09PUtlfHwhKGUgaW5zdGFuY2VvZiBLZS5FcnJub0Vycm9yKSl0aHJvdyBlO3JldHVybiBlLmVycm5vfX0sZmRfd3JpdGU6ZnVuY3Rpb24oZSx0LG4scil7dHJ5e3ZhciBpPWZ1bmN0aW9uKGUsdCxuLHIpe2Zvcih2YXIgaT0wLG89MDtvPG47bysrKXt2YXIgYT16W3Q+PjJdLHM9elt0KzQ+PjJdO3QrPTg7dmFyIGM9S2Uud3JpdGUoZSxHLGEscyx2b2lkIDApO2lmKGM8MClyZXR1cm4tMTtpKz1jfXJldHVybiBpfShZZS5nZXRTdHJlYW1Gcm9tRkQoZSksdCxuKTtyZXR1cm4gWltyPj4yXT1pLDB9Y2F0Y2goZSl7aWYodm9pZCAwPT09S2V8fCEoZSBpbnN0YW5jZW9mIEtlLkVycm5vRXJyb3IpKXRocm93IGU7cmV0dXJuIGUuZXJybm99fSxnZXRUZW1wUmV0MDpmdW5jdGlvbigpe3JldHVybiBOfSxnZXRlbnRyb3B5OmZ1bmN0aW9uIGUodCxuKXtlLnJhbmRvbURldmljZXx8KGUucmFuZG9tRGV2aWNlPVZlKCkpO2Zvcih2YXIgcj0wO3I8bjtyKyspR1t0K3I+PjBdPWUucmFuZG9tRGV2aWNlKCk7cmV0dXJuIDB9LGludm9rZV9kZDpmdW5jdGlvbihlLHQpe3ZhciBuPU5uKCk7dHJ5e3JldHVybiBOZShlKSh0KX1jYXRjaChlKXtpZih3bihuKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV9kaTpmdW5jdGlvbihlLHQpe3ZhciBuPU5uKCk7dHJ5e3JldHVybiBOZShlKSh0KX1jYXRjaChlKXtpZih3bihuKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV9kaWlpOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPU5uKCk7dHJ5e3JldHVybiBOZShlKSh0LG4scil9Y2F0Y2goZSl7aWYod24oaSksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfZmQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj1ObigpO3RyeXtyZXR1cm4gTmUoZSkodCl9Y2F0Y2goZSl7aWYod24obiksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfZmk6ZnVuY3Rpb24oZSx0KXt2YXIgbj1ObigpO3RyeXtyZXR1cm4gTmUoZSkodCl9Y2F0Y2goZSl7aWYod24obiksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfZmlpaTpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT1ObigpO3RyeXtyZXR1cm4gTmUoZSkodCxuLHIpfWNhdGNoKGUpe2lmKHduKGkpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX2k6ZnVuY3Rpb24oZSl7dmFyIHQ9Tm4oKTt0cnl7cmV0dXJuIE5lKGUpKCl9Y2F0Y2goZSl7aWYod24odCksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfaWQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj1ObigpO3RyeXtyZXR1cm4gTmUoZSkodCl9Y2F0Y2goZSl7aWYod24obiksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfaWRpaWk6ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbz1ObigpO3RyeXtyZXR1cm4gTmUoZSkodCxuLHIsaSl9Y2F0Y2goZSl7aWYod24obyksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfaWk6ZnVuY3Rpb24oZSx0KXt2YXIgbj1ObigpO3RyeXtyZXR1cm4gTmUoZSkodCl9Y2F0Y2goZSl7aWYod24obiksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfaWlkOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1ObigpO3RyeXtyZXR1cm4gTmUoZSkodCxuKX1jYXRjaChlKXtpZih3bihyKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV9paWY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPU5uKCk7dHJ5e3JldHVybiBOZShlKSh0LG4pfWNhdGNoKGUpe2lmKHduKHIpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX2lpaTpmdW5jdGlvbihlLHQsbil7dmFyIHI9Tm4oKTt0cnl7cmV0dXJuIE5lKGUpKHQsbil9Y2F0Y2goZSl7aWYod24ociksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfaWlpaTpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT1ObigpO3RyeXtyZXR1cm4gTmUoZSkodCxuLHIpfWNhdGNoKGUpe2lmKHduKGkpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX2lpaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89Tm4oKTt0cnl7cmV0dXJuIE5lKGUpKHQsbixyLGkpfWNhdGNoKGUpe2lmKHduKG8pLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX2lpaWlpaTpmdW5jdGlvbihlLHQsbixyLGksbyl7dmFyIGE9Tm4oKTt0cnl7cmV0dXJuIE5lKGUpKHQsbixyLGksbyl9Y2F0Y2goZSl7aWYod24oYSksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfaWlpaWlpaTpmdW5jdGlvbihlLHQsbixyLGksbyxhKXt2YXIgcz1ObigpO3RyeXtyZXR1cm4gTmUoZSkodCxuLHIsaSxvLGEpfWNhdGNoKGUpe2lmKHduKHMpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX2lpaWlpaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyl7dmFyIGM9Tm4oKTt0cnl7cmV0dXJuIE5lKGUpKHQsbixyLGksbyxhLHMpfWNhdGNoKGUpe2lmKHduKGMpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX2lpaWlpaWlpaTpmdW5jdGlvbihlLHQsbixyLGksbyxhLHMsYyl7dmFyIGw9Tm4oKTt0cnl7cmV0dXJuIE5lKGUpKHQsbixyLGksbyxhLHMsYyl9Y2F0Y2goZSl7aWYod24obCksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfaWlpaWlpaWlpaTpmdW5jdGlvbihlLHQsbixyLGksbyxhLHMsYyxsKXt2YXIgdT1ObigpO3RyeXtyZXR1cm4gTmUoZSkodCxuLHIsaSxvLGEscyxjLGwpfWNhdGNoKGUpe2lmKHduKHUpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX2lpaWlpaWlpaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyxjLGwsdSl7dmFyIGQ9Tm4oKTt0cnl7cmV0dXJuIE5lKGUpKHQsbixyLGksbyxhLHMsYyxsLHUpfWNhdGNoKGUpe2lmKHduKGQpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX2lpaWlpaWlpaWlpaTpmdW5jdGlvbihlLHQsbixyLGksbyxhLHMsYyxsLHUsZCl7dmFyIGY9Tm4oKTt0cnl7cmV0dXJuIE5lKGUpKHQsbixyLGksbyxhLHMsYyxsLHUsZCl9Y2F0Y2goZSl7aWYod24oZiksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfaWlpaWlpaWlpaWlpaTpmdW5jdGlvbihlLHQsbixyLGksbyxhLHMsYyxsLHUsZCxmKXt2YXIgcD1ObigpO3RyeXtyZXR1cm4gTmUoZSkodCxuLHIsaSxvLGEscyxjLGwsdSxkLGYpfWNhdGNoKGUpe2lmKHduKHApLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX2lpaWlpaWlpaWlpaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyxjLGwsdSxkLGYscCl7dmFyIG09Tm4oKTt0cnl7cmV0dXJuIE5lKGUpKHQsbixyLGksbyxhLHMsYyxsLHUsZCxmLHApfWNhdGNoKGUpe2lmKHduKG0pLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX2lpaWlpaWlpaWlpaWlpaTpmdW5jdGlvbihlLHQsbixyLGksbyxhLHMsYyxsLHUsZCxmLHAsbSl7dmFyIGg9Tm4oKTt0cnl7cmV0dXJuIE5lKGUpKHQsbixyLGksbyxhLHMsYyxsLHUsZCxmLHAsbSl9Y2F0Y2goZSl7aWYod24oaCksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfaWlpaWlpaWlpaWlpaWlpaTpmdW5jdGlvbihlLHQsbixyLGksbyxhLHMsYyxsLHUsZCxmLHAsbSxoKXt2YXIgdj1ObigpO3RyeXtyZXR1cm4gTmUoZSkodCxuLHIsaSxvLGEscyxjLGwsdSxkLGYscCxtLGgpfWNhdGNoKGUpe2lmKHduKHYpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX2lpaWlpaWlpaWlpaWlpaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyxjLGwsdSxkLGYscCxtLGgsdil7dmFyIGc9Tm4oKTt0cnl7cmV0dXJuIE5lKGUpKHQsbixyLGksbyxhLHMsYyxsLHUsZCxmLHAsbSxoLHYpfWNhdGNoKGUpe2lmKHduKGcpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX2lpaWlpaWlpaWlpaWlpaWlpaTpmdW5jdGlvbihlLHQsbixyLGksbyxhLHMsYyxsLHUsZCxmLHAsbSxoLHYsZyl7dmFyIHk9Tm4oKTt0cnl7cmV0dXJuIE5lKGUpKHQsbixyLGksbyxhLHMsYyxsLHUsZCxmLHAsbSxoLHYsZyl9Y2F0Y2goZSl7aWYod24oeSksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfaWlpaWlpaWlpaWlpaWlpaWlpaTpmdW5jdGlvbihlLHQsbixyLGksbyxhLHMsYyxsLHUsZCxmLHAsbSxoLHYsZyx5KXt2YXIgRT1ObigpO3RyeXtyZXR1cm4gTmUoZSkodCxuLHIsaSxvLGEscyxjLGwsdSxkLGYscCxtLGgsdixnLHkpfWNhdGNoKGUpe2lmKHduKEUpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX2lpaWlpaWlpaWlpaWlpaWlpaWlpaWk6ZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzLGMsbCx1LGQsZixwLG0saCx2LGcseSxFLF8sSSl7dmFyIFM9Tm4oKTt0cnl7cmV0dXJuIE5lKGUpKHQsbixyLGksbyxhLHMsYyxsLHUsZCxmLHAsbSxoLHYsZyx5LEUsXyxJKX1jYXRjaChlKXtpZih3bihTKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV9paWlpaWlpaWlpaWlpaWlpaWlpaWlpaTpmdW5jdGlvbihlLHQsbixyLGksbyxhLHMsYyxsLHUsZCxmLHAsbSxoLHYsZyx5LEUsXyxJLFMpe3ZhciBiPU5uKCk7dHJ5e3JldHVybiBOZShlKSh0LG4scixpLG8sYSxzLGMsbCx1LGQsZixwLG0saCx2LGcseSxFLF8sSSxTKX1jYXRjaChlKXtpZih3bihiKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV9paWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaTpmdW5jdGlvbihlLHQsbixyLGksbyxhLHMsYyxsLHUsZCxmLHAsbSxoLHYsZyx5LEUsXyxJLFMsYixULEMsQSxSLGssTyxOLHcsRCxQLE0sTCxVLHgsRixCLFYsRyxILFcsaixaLHosSyxZLHEsWCxRLEosJCxlZSx0ZSxuZSxyZSxpZSl7dmFyIG9lPU5uKCk7dHJ5e3JldHVybiBOZShlKSh0LG4scixpLG8sYSxzLGMsbCx1LGQsZixwLG0saCx2LGcseSxFLF8sSSxTLGIsVCxDLEEsUixrLE8sTix3LEQsUCxNLEwsVSx4LEYsQixWLEcsSCxXLGosWix6LEssWSxxLFgsUSxKLCQsZWUsdGUsbmUscmUsaWUpfWNhdGNoKGUpe2lmKHduKG9lKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV9paWlpaWlpaWlpaWlpaWlpaWlqOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyxjLGwsdSxkLGYscCxtLGgsdixnLHkpe3ZhciBFPU5uKCk7dHJ5e3JldHVybiBOZShlKSh0LG4scixpLG8sYSxzLGMsbCx1LGQsZixwLG0saCx2LGcseSl9Y2F0Y2goZSl7aWYod24oRSksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfaWlpaWlpaWlpaWlpaWlpaWppaWlpaWo6ZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzLGMsbCx1LGQsZixwLG0saCx2LGcseSxFLF8sSSxTKXt2YXIgYj1ObigpO3RyeXtyZXR1cm4gTmUoZSkodCxuLHIsaSxvLGEscyxjLGwsdSxkLGYscCxtLGgsdixnLHksRSxfLEksUyl9Y2F0Y2goZSl7aWYod24oYiksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfaWlpaWlpaWlpaWlpaWlpaWppaWlpajpmdW5jdGlvbihlLHQsbixyLGksbyxhLHMsYyxsLHUsZCxmLHAsbSxoLHYsZyx5LEUsXyxJKXt2YXIgUz1ObigpO3RyeXtyZXR1cm4gTmUoZSkodCxuLHIsaSxvLGEscyxjLGwsdSxkLGYscCxtLGgsdixnLHksRSxfLEkpfWNhdGNoKGUpe2lmKHduKFMpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX2lpaWlpaWlpaWlpaWppaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyxjLGwsdSxkLGYscCxtLGgsdil7dmFyIGc9Tm4oKTt0cnl7cmV0dXJuIE5lKGUpKHQsbixyLGksbyxhLHMsYyxsLHUsZCxmLHAsbSxoLHYpfWNhdGNoKGUpe2lmKHduKGcpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX2lpaWlpaWlpaWlpaWppajpmdW5jdGlvbihlLHQsbixyLGksbyxhLHMsYyxsLHUsZCxmLHAsbSl7dmFyIGg9Tm4oKTt0cnl7cmV0dXJuIE5lKGUpKHQsbixyLGksbyxhLHMsYyxsLHUsZCxmLHAsbSl9Y2F0Y2goZSl7aWYod24oaCksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfaWlpaWlpaWlpaWlqaTpmdW5jdGlvbihlLHQsbixyLGksbyxhLHMsYyxsLHUsZCxmKXt2YXIgcD1ObigpO3RyeXtyZXR1cm4gTmUoZSkodCxuLHIsaSxvLGEscyxjLGwsdSxkLGYpfWNhdGNoKGUpe2lmKHduKHApLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX2lpaWlpaWlpamppaWk6ZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzLGMsbCx1LGQsZil7dmFyIHA9Tm4oKTt0cnl7cmV0dXJuIE5lKGUpKHQsbixyLGksbyxhLHMsYyxsLHUsZCxmKX1jYXRjaChlKXtpZih3bihwKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV9paWlpaWlpamlpaTpmdW5jdGlvbihlLHQsbixyLGksbyxhLHMsYyxsLHUpe3ZhciBkPU5uKCk7dHJ5e3JldHVybiBOZShlKSh0LG4scixpLG8sYSxzLGMsbCx1KX1jYXRjaChlKXtpZih3bihkKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV9paWlpaWlpamlpaWk6ZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzLGMsbCx1LGQpe3ZhciBmPU5uKCk7dHJ5e3JldHVybiBOZShlKSh0LG4scixpLG8sYSxzLGMsbCx1LGQpfWNhdGNoKGUpe2lmKHduKGYpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX2lpaWlpaWo6ZnVuY3Rpb24oZSx0LG4scixpLG8sYSl7dmFyIHM9Tm4oKTt0cnl7cmV0dXJuIE5lKGUpKHQsbixyLGksbyxhKX1jYXRjaChlKXtpZih3bihzKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV9paWlpaWlqaTpmdW5jdGlvbihlLHQsbixyLGksbyxhLHMpe3ZhciBjPU5uKCk7dHJ5e3JldHVybiBOZShlKSh0LG4scixpLG8sYSxzKX1jYXRjaChlKXtpZih3bihjKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV9paWlpaWlqaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyxjLGwpe3ZhciB1PU5uKCk7dHJ5e3JldHVybiBOZShlKSh0LG4scixpLG8sYSxzLGMsbCl9Y2F0Y2goZSl7aWYod24odSksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfaWlpaWlqOmZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt2YXIgYT1ObigpO3RyeXtyZXR1cm4gTmUoZSkodCxuLHIsaSxvKX1jYXRjaChlKXtpZih3bihhKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV9paWlpaWpkOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEpe3ZhciBzPU5uKCk7dHJ5e3JldHVybiBOZShlKSh0LG4scixpLG8sYSl9Y2F0Y2goZSl7aWYod24ocyksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfaWlpaWlqaTpmdW5jdGlvbihlLHQsbixyLGksbyxhKXt2YXIgcz1ObigpO3RyeXtyZXR1cm4gTmUoZSkodCxuLHIsaSxvLGEpfWNhdGNoKGUpe2lmKHduKHMpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX2lpaWlpamlpaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyxjLGwsdSl7dmFyIGQ9Tm4oKTt0cnl7cmV0dXJuIE5lKGUpKHQsbixyLGksbyxhLHMsYyxsLHUpfWNhdGNoKGUpe2lmKHduKGQpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX2lpaWlpamlqamlpaTpmdW5jdGlvbihlLHQsbixyLGksbyxhLHMsYyxsLHUsZCl7dmFyIGY9Tm4oKTt0cnl7cmV0dXJuIE5lKGUpKHQsbixyLGksbyxhLHMsYyxsLHUsZCl9Y2F0Y2goZSl7aWYod24oZiksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfaWlpaWlqamlpaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyxjLGwsdSxkKXt2YXIgZj1ObigpO3RyeXtyZXR1cm4gTmUoZSkodCxuLHIsaSxvLGEscyxjLGwsdSxkKX1jYXRjaChlKXtpZih3bihmKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV9paWlpajpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPU5uKCk7dHJ5e3JldHVybiBOZShlKSh0LG4scixpKX1jYXRjaChlKXtpZih3bihvKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV9paWlpamlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEpe3ZhciBzPU5uKCk7dHJ5e3JldHVybiBOZShlKSh0LG4scixpLG8sYSl9Y2F0Y2goZSl7aWYod24ocyksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfaWlpaWppaWk6ZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzKXt2YXIgYz1ObigpO3RyeXtyZXR1cm4gTmUoZSkodCxuLHIsaSxvLGEscyl9Y2F0Y2goZSl7aWYod24oYyksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfaWlpaWppaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyxjKXt2YXIgbD1ObigpO3RyeXtyZXR1cm4gTmUoZSkodCxuLHIsaSxvLGEscyxjKX1jYXRjaChlKXtpZih3bihsKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV9paWlpamlpaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyxjLGwpe3ZhciB1PU5uKCk7dHJ5e3JldHVybiBOZShlKSh0LG4scixpLG8sYSxzLGMsbCl9Y2F0Y2goZSl7aWYod24odSksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfaWlpaWppaWlpaWk6ZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzLGMsbCx1KXt2YXIgZD1ObigpO3RyeXtyZXR1cm4gTmUoZSkodCxuLHIsaSxvLGEscyxjLGwsdSl9Y2F0Y2goZSl7aWYod24oZCksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfaWlpaWppaWlpaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyxjLGwsdSxkKXt2YXIgZj1ObigpO3RyeXtyZXR1cm4gTmUoZSkodCxuLHIsaSxvLGEscyxjLGwsdSxkKX1jYXRjaChlKXtpZih3bihmKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV9paWlpamlpamlpaTpmdW5jdGlvbihlLHQsbixyLGksbyxhLHMsYyxsLHUpe3ZhciBkPU5uKCk7dHJ5e3JldHVybiBOZShlKSh0LG4scixpLG8sYSxzLGMsbCx1KX1jYXRjaChlKXtpZih3bihkKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV9paWlpamo6ZnVuY3Rpb24oZSx0LG4scixpLG8pe3ZhciBhPU5uKCk7dHJ5e3JldHVybiBOZShlKSh0LG4scixpLG8pfWNhdGNoKGUpe2lmKHduKGEpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX2lpaWlqamlqaWlpaTpmdW5jdGlvbihlLHQsbixyLGksbyxhLHMsYyxsLHUsZCl7dmFyIGY9Tm4oKTt0cnl7cmV0dXJuIE5lKGUpKHQsbixyLGksbyxhLHMsYyxsLHUsZCl9Y2F0Y2goZSl7aWYod24oZiksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfaWlpaWpqaWppaWlpaTpmdW5jdGlvbihlLHQsbixyLGksbyxhLHMsYyxsLHUsZCxmKXt2YXIgcD1ObigpO3RyeXtyZXR1cm4gTmUoZSkodCxuLHIsaSxvLGEscyxjLGwsdSxkLGYpfWNhdGNoKGUpe2lmKHduKHApLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX2lpaWo6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9Tm4oKTt0cnl7cmV0dXJuIE5lKGUpKHQsbixyKX1jYXRjaChlKXtpZih3bihpKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV9paWlqaTpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPU5uKCk7dHJ5e3JldHVybiBOZShlKSh0LG4scixpKX1jYXRjaChlKXtpZih3bihvKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV9paWlqaWk6ZnVuY3Rpb24oZSx0LG4scixpLG8pe3ZhciBhPU5uKCk7dHJ5e3JldHVybiBOZShlKSh0LG4scixpLG8pfWNhdGNoKGUpe2lmKHduKGEpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX2lpaWppaWk6ZnVuY3Rpb24oZSx0LG4scixpLG8sYSl7dmFyIHM9Tm4oKTt0cnl7cmV0dXJuIE5lKGUpKHQsbixyLGksbyxhKX1jYXRjaChlKXtpZih3bihzKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV9paWlqaWlpaTpmdW5jdGlvbihlLHQsbixyLGksbyxhLHMpe3ZhciBjPU5uKCk7dHJ5e3JldHVybiBOZShlKSh0LG4scixpLG8sYSxzKX1jYXRjaChlKXtpZih3bihjKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV9paWlqaWlpaWk6ZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzLGMpe3ZhciBsPU5uKCk7dHJ5e3JldHVybiBOZShlKSh0LG4scixpLG8sYSxzLGMpfWNhdGNoKGUpe2lmKHduKGwpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX2lpaWppaWlpaWlpaTpmdW5jdGlvbihlLHQsbixyLGksbyxhLHMsYyxsLHUsZCl7dmFyIGY9Tm4oKTt0cnl7cmV0dXJuIE5lKGUpKHQsbixyLGksbyxhLHMsYyxsLHUsZCl9Y2F0Y2goZSl7aWYod24oZiksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfaWlpamlpaWo6ZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzKXt2YXIgYz1ObigpO3RyeXtyZXR1cm4gTmUoZSkodCxuLHIsaSxvLGEscyl9Y2F0Y2goZSl7aWYod24oYyksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfaWlpamlpajpmdW5jdGlvbihlLHQsbixyLGksbyxhKXt2YXIgcz1ObigpO3RyeXtyZXR1cm4gTmUoZSkodCxuLHIsaSxvLGEpfWNhdGNoKGUpe2lmKHduKHMpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX2lpaWppamlpaWk6ZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzLGMsbCl7dmFyIHU9Tm4oKTt0cnl7cmV0dXJuIE5lKGUpKHQsbixyLGksbyxhLHMsYyxsKX1jYXRjaChlKXtpZih3bih1KSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV9paWlqaWppaWlpaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyxjLGwsdSxkLGYpe3ZhciBwPU5uKCk7dHJ5e3JldHVybiBOZShlKSh0LG4scixpLG8sYSxzLGMsbCx1LGQsZil9Y2F0Y2goZSl7aWYod24ocCksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfaWlqOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1ObigpO3RyeXtyZXR1cm4gTmUoZSkodCxuKX1jYXRjaChlKXtpZih3bihyKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV9paWppOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPU5uKCk7dHJ5e3JldHVybiBOZShlKSh0LG4scil9Y2F0Y2goZSl7aWYod24oaSksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfaWlqaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt2YXIgYT1ObigpO3RyeXtyZXR1cm4gTmUoZSkodCxuLHIsaSxvKX1jYXRjaChlKXtpZih3bihhKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV9paWppaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEpe3ZhciBzPU5uKCk7dHJ5e3JldHVybiBOZShlKSh0LG4scixpLG8sYSl9Y2F0Y2goZSl7aWYod24ocyksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfaWlqaWlpaWk6ZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzKXt2YXIgYz1ObigpO3RyeXtyZXR1cm4gTmUoZSkodCxuLHIsaSxvLGEscyl9Y2F0Y2goZSl7aWYod24oYyksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfaWlqaWlpaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyxjKXt2YXIgbD1ObigpO3RyeXtyZXR1cm4gTmUoZSkodCxuLHIsaSxvLGEscyxjKX1jYXRjaChlKXtpZih3bihsKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV9paWppaWlpaWlqOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyxjLGwpe3ZhciB1PU5uKCk7dHJ5e3JldHVybiBOZShlKSh0LG4scixpLG8sYSxzLGMsbCl9Y2F0Y2goZSl7aWYod24odSksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfaWlqajpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT1ObigpO3RyeXtyZXR1cm4gTmUoZSkodCxuLHIpfWNhdGNoKGUpe2lmKHduKGkpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX2lqaTpmdW5jdGlvbihlLHQsbil7dmFyIHI9Tm4oKTt0cnl7cmV0dXJuIE5lKGUpKHQsbil9Y2F0Y2goZSl7aWYod24ociksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfaWpqOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1ObigpO3RyeXtyZXR1cm4gTmUoZSkodCxuKX1jYXRjaChlKXtpZih3bihyKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV9pamppaWk6ZnVuY3Rpb24oZSx0LG4scixpLG8pe3ZhciBhPU5uKCk7dHJ5e3JldHVybiBOZShlKSh0LG4scixpLG8pfWNhdGNoKGUpe2lmKHduKGEpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX2o6ZnVuY3Rpb24oZSl7dmFyIHQ9Tm4oKTt0cnl7cmV0dXJuIE5lKGUpKCl9Y2F0Y2goZSl7aWYod24odCksZSE9PWUrMCl0aHJvdyBlO3JldHVybiBSbigxLDApLEJpZ0ludCgwKX19LGludm9rZV9qaTpmdW5jdGlvbihlLHQpe3ZhciBuPU5uKCk7dHJ5e3JldHVybiBOZShlKSh0KX1jYXRjaChlKXtpZih3bihuKSxlIT09ZSswKXRocm93IGU7cmV0dXJuIFJuKDEsMCksQmlnSW50KDApfX0saW52b2tlX2ppaTpmdW5jdGlvbihlLHQsbil7dmFyIHI9Tm4oKTt0cnl7cmV0dXJuIE5lKGUpKHQsbil9Y2F0Y2goZSl7aWYod24ociksZSE9PWUrMCl0aHJvdyBlO3JldHVybiBSbigxLDApLEJpZ0ludCgwKX19LGludm9rZV9qaWlpOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPU5uKCk7dHJ5e3JldHVybiBOZShlKSh0LG4scil9Y2F0Y2goZSl7aWYod24oaSksZSE9PWUrMCl0aHJvdyBlO3JldHVybiBSbigxLDApLEJpZ0ludCgwKX19LGludm9rZV9qaWlpaTpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPU5uKCk7dHJ5e3JldHVybiBOZShlKSh0LG4scixpKX1jYXRjaChlKXtpZih3bihvKSxlIT09ZSswKXRocm93IGU7cmV0dXJuIFJuKDEsMCksQmlnSW50KDApfX0saW52b2tlX2ppaWlpaWo6ZnVuY3Rpb24oZSx0LG4scixpLG8sYSl7dmFyIHM9Tm4oKTt0cnl7cmV0dXJuIE5lKGUpKHQsbixyLGksbyxhKX1jYXRjaChlKXtpZih3bihzKSxlIT09ZSswKXRocm93IGU7cmV0dXJuIFJuKDEsMCksQmlnSW50KDApfX0saW52b2tlX2ppaWlqOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89Tm4oKTt0cnl7cmV0dXJuIE5lKGUpKHQsbixyLGkpfWNhdGNoKGUpe2lmKHduKG8pLGUhPT1lKzApdGhyb3cgZTtyZXR1cm4gUm4oMSwwKSxCaWdJbnQoMCl9fSxpbnZva2VfamlpajpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT1ObigpO3RyeXtyZXR1cm4gTmUoZSkodCxuLHIpfWNhdGNoKGUpe2lmKHduKGkpLGUhPT1lKzApdGhyb3cgZTtyZXR1cm4gUm4oMSwwKSxCaWdJbnQoMCl9fSxpbnZva2VfamlqOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1ObigpO3RyeXtyZXR1cm4gTmUoZSkodCxuKX1jYXRjaChlKXtpZih3bihyKSxlIT09ZSswKXRocm93IGU7cmV0dXJuIFJuKDEsMCksQmlnSW50KDApfX0saW52b2tlX2ppamk6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9Tm4oKTt0cnl7cmV0dXJuIE5lKGUpKHQsbixyKX1jYXRjaChlKXtpZih3bihpKSxlIT09ZSswKXRocm93IGU7cmV0dXJuIFJuKDEsMCksQmlnSW50KDApfX0saW52b2tlX2pqOmZ1bmN0aW9uKGUsdCl7dmFyIG49Tm4oKTt0cnl7cmV0dXJuIE5lKGUpKHQpfWNhdGNoKGUpe2lmKHduKG4pLGUhPT1lKzApdGhyb3cgZTtyZXR1cm4gUm4oMSwwKSxCaWdJbnQoMCl9fSxpbnZva2VfampqOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1ObigpO3RyeXtyZXR1cm4gTmUoZSkodCxuKX1jYXRjaChlKXtpZih3bihyKSxlIT09ZSswKXRocm93IGU7cmV0dXJuIFJuKDEsMCksQmlnSW50KDApfX0saW52b2tlX3Y6ZnVuY3Rpb24oZSl7dmFyIHQ9Tm4oKTt0cnl7TmUoZSkoKX1jYXRjaChlKXtpZih3bih0KSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV92aTpmdW5jdGlvbihlLHQpe3ZhciBuPU5uKCk7dHJ5e05lKGUpKHQpfWNhdGNoKGUpe2lmKHduKG4pLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX3ZpZDpmdW5jdGlvbihlLHQsbil7dmFyIHI9Tm4oKTt0cnl7TmUoZSkodCxuKX1jYXRjaChlKXtpZih3bihyKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV92aWY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPU5uKCk7dHJ5e05lKGUpKHQsbil9Y2F0Y2goZSl7aWYod24ociksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfdmlpOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1ObigpO3RyeXtOZShlKSh0LG4pfWNhdGNoKGUpe2lmKHduKHIpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX3ZpaWQ6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9Tm4oKTt0cnl7TmUoZSkodCxuLHIpfWNhdGNoKGUpe2lmKHduKGkpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX3ZpaWY6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9Tm4oKTt0cnl7TmUoZSkodCxuLHIpfWNhdGNoKGUpe2lmKHduKGkpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX3ZpaWk6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9Tm4oKTt0cnl7TmUoZSkodCxuLHIpfWNhdGNoKGUpe2lmKHduKGkpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX3ZpaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89Tm4oKTt0cnl7TmUoZSkodCxuLHIsaSl9Y2F0Y2goZSl7aWYod24obyksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfdmlpaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt2YXIgYT1ObigpO3RyeXtOZShlKSh0LG4scixpLG8pfWNhdGNoKGUpe2lmKHduKGEpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX3ZpaWlpaWk6ZnVuY3Rpb24oZSx0LG4scixpLG8sYSl7dmFyIHM9Tm4oKTt0cnl7TmUoZSkodCxuLHIsaSxvLGEpfWNhdGNoKGUpe2lmKHduKHMpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX3ZpaWlpaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyl7dmFyIGM9Tm4oKTt0cnl7TmUoZSkodCxuLHIsaSxvLGEscyl9Y2F0Y2goZSl7aWYod24oYyksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfdmlpaWlpaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyxjKXt2YXIgbD1ObigpO3RyeXtOZShlKSh0LG4scixpLG8sYSxzLGMpfWNhdGNoKGUpe2lmKHduKGwpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX3ZpaWlpaWlpaWk6ZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzLGMsbCl7dmFyIHU9Tm4oKTt0cnl7TmUoZSkodCxuLHIsaSxvLGEscyxjLGwpfWNhdGNoKGUpe2lmKHduKHUpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX3ZpaWlpaWlpaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyxjLGwsdSl7dmFyIGQ9Tm4oKTt0cnl7TmUoZSkodCxuLHIsaSxvLGEscyxjLGwsdSl9Y2F0Y2goZSl7aWYod24oZCksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfdmlpaWlpaWlpaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyxjLGwsdSxkKXt2YXIgZj1ObigpO3RyeXtOZShlKSh0LG4scixpLG8sYSxzLGMsbCx1LGQpfWNhdGNoKGUpe2lmKHduKGYpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX3ZpaWlpaWlpaWlpaWk6ZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzLGMsbCx1LGQsZil7dmFyIHA9Tm4oKTt0cnl7TmUoZSkodCxuLHIsaSxvLGEscyxjLGwsdSxkLGYpfWNhdGNoKGUpe2lmKHduKHApLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX3ZpaWlpaWlpaWlpaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyxjLGwsdSxkLGYscCl7dmFyIG09Tm4oKTt0cnl7TmUoZSkodCxuLHIsaSxvLGEscyxjLGwsdSxkLGYscCl9Y2F0Y2goZSl7aWYod24obSksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfdmlpaWlpaWlpaWlpaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyxjLGwsdSxkLGYscCxtKXt2YXIgaD1ObigpO3RyeXtOZShlKSh0LG4scixpLG8sYSxzLGMsbCx1LGQsZixwLG0pfWNhdGNoKGUpe2lmKHduKGgpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX3ZpaWlpaWlpaWlpaWlpaWk6ZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzLGMsbCx1LGQsZixwLG0saCl7dmFyIHY9Tm4oKTt0cnl7TmUoZSkodCxuLHIsaSxvLGEscyxjLGwsdSxkLGYscCxtLGgpfWNhdGNoKGUpe2lmKHduKHYpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX3ZpaWlpaWlpaWlpaWlpaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyxjLGwsdSxkLGYscCxtLGgsdil7dmFyIGc9Tm4oKTt0cnl7TmUoZSkodCxuLHIsaSxvLGEscyxjLGwsdSxkLGYscCxtLGgsdil9Y2F0Y2goZSl7aWYod24oZyksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfdmlpaWlpaWlpaWlpaWlpaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyxjLGwsdSxkLGYscCxtLGgsdixnKXt2YXIgeT1ObigpO3RyeXtOZShlKSh0LG4scixpLG8sYSxzLGMsbCx1LGQsZixwLG0saCx2LGcpfWNhdGNoKGUpe2lmKHduKHkpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX3ZpaWlpaWlpaWlpaWlpaWlpaWk6ZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzLGMsbCx1LGQsZixwLG0saCx2LGcseSl7dmFyIEU9Tm4oKTt0cnl7TmUoZSkodCxuLHIsaSxvLGEscyxjLGwsdSxkLGYscCxtLGgsdixnLHkpfWNhdGNoKGUpe2lmKHduKEUpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX3ZpaWlpaWlpaWlpaWlpaWlpaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyxjLGwsdSxkLGYscCxtLGgsdixnLHksRSl7dmFyIF89Tm4oKTt0cnl7TmUoZSkodCxuLHIsaSxvLGEscyxjLGwsdSxkLGYscCxtLGgsdixnLHksRSl9Y2F0Y2goZSl7aWYod24oXyksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfdmlpaWlpaWlpaWlpaWlpaWlpaWlpaTpmdW5jdGlvbihlLHQsbixyLGksbyxhLHMsYyxsLHUsZCxmLHAsbSxoLHYsZyx5LEUsXyxJKXt2YXIgUz1ObigpO3RyeXtOZShlKSh0LG4scixpLG8sYSxzLGMsbCx1LGQsZixwLG0saCx2LGcseSxFLF8sSSl9Y2F0Y2goZSl7aWYod24oUyksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfdmlpaWlpaWlpaWlpaWlpaWlpaWlpaWk6ZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzLGMsbCx1LGQsZixwLG0saCx2LGcseSxFLF8sSSxTKXt2YXIgYj1ObigpO3RyeXtOZShlKSh0LG4scixpLG8sYSxzLGMsbCx1LGQsZixwLG0saCx2LGcseSxFLF8sSSxTKX1jYXRjaChlKXtpZih3bihiKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV92aWlpaWlpaWlpaWlpaWlpaWlpaWlpaWk6ZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzLGMsbCx1LGQsZixwLG0saCx2LGcseSxFLF8sSSxTLGIpe3ZhciBUPU5uKCk7dHJ5e05lKGUpKHQsbixyLGksbyxhLHMsYyxsLHUsZCxmLHAsbSxoLHYsZyx5LEUsXyxJLFMsYil9Y2F0Y2goZSl7aWYod24oVCksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfdmlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyxjLGwsdSxkLGYscCxtLGgsdixnLHksRSxfLEksUyxiLFQsQyxBKXt2YXIgUj1ObigpO3RyeXtOZShlKSh0LG4scixpLG8sYSxzLGMsbCx1LGQsZixwLG0saCx2LGcseSxFLF8sSSxTLGIsVCxDLEEpfWNhdGNoKGUpe2lmKHduKFIpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX3ZpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyxjLGwsdSxkLGYscCxtLGgsdixnLHksRSxfLEksUyxiLFQsQyxBLFIsayl7dmFyIE89Tm4oKTt0cnl7TmUoZSkodCxuLHIsaSxvLGEscyxjLGwsdSxkLGYscCxtLGgsdixnLHksRSxfLEksUyxiLFQsQyxBLFIsayl9Y2F0Y2goZSl7aWYod24oTyksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfdmlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaTpmdW5jdGlvbihlLHQsbixyLGksbyxhLHMsYyxsLHUsZCxmLHAsbSxoLHYsZyx5LEUsXyxJLFMsYixULEMsQSxSLGssTyxOLHcsRCxQLE0sTCxVLHgsRixCLFYsRyxILFcsaixaKXt2YXIgej1ObigpO3RyeXtOZShlKSh0LG4scixpLG8sYSxzLGMsbCx1LGQsZixwLG0saCx2LGcseSxFLF8sSSxTLGIsVCxDLEEsUixrLE8sTix3LEQsUCxNLEwsVSx4LEYsQixWLEcsSCxXLGosWil9Y2F0Y2goZSl7aWYod24oeiksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfdmlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWk6ZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzLGMsbCx1LGQsZixwLG0saCx2LGcseSxFLF8sSSxTLGIsVCxDLEEsUixrLE8sTix3LEQsUCxNLEwsVSx4LEYsQixWLEcsSCxXLGosWix6LEssWSxxLFgsUSxKLCQsZWUsdGUsbmUscmUsaWUpe3ZhciBvZT1ObigpO3RyeXtOZShlKSh0LG4scixpLG8sYSxzLGMsbCx1LGQsZixwLG0saCx2LGcseSxFLF8sSSxTLGIsVCxDLEEsUixrLE8sTix3LEQsUCxNLEwsVSx4LEYsQixWLEcsSCxXLGosWix6LEssWSxxLFgsUSxKLCQsZWUsdGUsbmUscmUsaWUpfWNhdGNoKGUpe2lmKHduKG9lKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV92aWlpaWlpaWlpaWlpaWlqaWk6ZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzLGMsbCx1LGQsZixwLG0saCx2LGcpe3ZhciB5PU5uKCk7dHJ5e05lKGUpKHQsbixyLGksbyxhLHMsYyxsLHUsZCxmLHAsbSxoLHYsZyl9Y2F0Y2goZSl7aWYod24oeSksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfdmlpaWlpaWlpamlpaTpmdW5jdGlvbihlLHQsbixyLGksbyxhLHMsYyxsLHUsZCxmKXt2YXIgcD1ObigpO3RyeXtOZShlKSh0LG4scixpLG8sYSxzLGMsbCx1LGQsZil9Y2F0Y2goZSl7aWYod24ocCksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfdmlpaWlpaWlqaWlpaWk6ZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzLGMsbCx1LGQsZixwKXt2YXIgbT1ObigpO3RyeXtOZShlKSh0LG4scixpLG8sYSxzLGMsbCx1LGQsZixwKX1jYXRjaChlKXtpZih3bihtKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV92aWlpaWlpaWpqaWlpaTpmdW5jdGlvbihlLHQsbixyLGksbyxhLHMsYyxsLHUsZCxmLHApe3ZhciBtPU5uKCk7dHJ5e05lKGUpKHQsbixyLGksbyxhLHMsYyxsLHUsZCxmLHApfWNhdGNoKGUpe2lmKHduKG0pLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX3ZpaWlpaWlqOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyl7dmFyIGM9Tm4oKTt0cnl7TmUoZSkodCxuLHIsaSxvLGEscyl9Y2F0Y2goZSl7aWYod24oYyksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfdmlpaWlpaWppaWo6ZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzLGMsbCx1KXt2YXIgZD1ObigpO3RyeXtOZShlKSh0LG4scixpLG8sYSxzLGMsbCx1KX1jYXRjaChlKXtpZih3bihkKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV92aWlpaWlqOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEpe3ZhciBzPU5uKCk7dHJ5e05lKGUpKHQsbixyLGksbyxhKX1jYXRjaChlKXtpZih3bihzKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV92aWlpaWlqaTpmdW5jdGlvbihlLHQsbixyLGksbyxhLHMpe3ZhciBjPU5uKCk7dHJ5e05lKGUpKHQsbixyLGksbyxhLHMpfWNhdGNoKGUpe2lmKHduKGMpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX3ZpaWlpaWppaWk6ZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzLGMsbCl7dmFyIHU9Tm4oKTt0cnl7TmUoZSkodCxuLHIsaSxvLGEscyxjLGwpfWNhdGNoKGUpe2lmKHduKHUpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX3ZpaWlpaWppaWlpaWlpaWlpaWlpaWk6ZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzLGMsbCx1LGQsZixwLG0saCx2LGcseSxFLF8sSSl7dmFyIFM9Tm4oKTt0cnl7TmUoZSkodCxuLHIsaSxvLGEscyxjLGwsdSxkLGYscCxtLGgsdixnLHksRSxfLEkpfWNhdGNoKGUpe2lmKHduKFMpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX3ZpaWlpajpmdW5jdGlvbihlLHQsbixyLGksbyl7dmFyIGE9Tm4oKTt0cnl7TmUoZSkodCxuLHIsaSxvKX1jYXRjaChlKXtpZih3bihhKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV92aWlpaWppOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEpe3ZhciBzPU5uKCk7dHJ5e05lKGUpKHQsbixyLGksbyxhKX1jYXRjaChlKXtpZih3bihzKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV92aWlpaWppaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyxjLGwpe3ZhciB1PU5uKCk7dHJ5e05lKGUpKHQsbixyLGksbyxhLHMsYyxsKX1jYXRjaChlKXtpZih3bih1KSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV92aWlpaWppaWlqOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyxjLGwpe3ZhciB1PU5uKCk7dHJ5e05lKGUpKHQsbixyLGksbyxhLHMsYyxsKX1jYXRjaChlKXtpZih3bih1KSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV92aWlpaWppaWo6ZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzLGMpe3ZhciBsPU5uKCk7dHJ5e05lKGUpKHQsbixyLGksbyxhLHMsYyl9Y2F0Y2goZSl7aWYod24obCksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfdmlpaWlqamppaTpmdW5jdGlvbihlLHQsbixyLGksbyxhLHMsYyxsKXt2YXIgdT1ObigpO3RyeXtOZShlKSh0LG4scixpLG8sYSxzLGMsbCl9Y2F0Y2goZSl7aWYod24odSksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfdmlpaWlqampqaWlpaTpmdW5jdGlvbihlLHQsbixyLGksbyxhLHMsYyxsLHUsZCxmKXt2YXIgcD1ObigpO3RyeXtOZShlKSh0LG4scixpLG8sYSxzLGMsbCx1LGQsZil9Y2F0Y2goZSl7aWYod24ocCksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfdmlpaWo6ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbz1ObigpO3RyeXtOZShlKSh0LG4scixpKX1jYXRjaChlKXtpZih3bihvKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV92aWlpamk6ZnVuY3Rpb24oZSx0LG4scixpLG8pe3ZhciBhPU5uKCk7dHJ5e05lKGUpKHQsbixyLGksbyl9Y2F0Y2goZSl7aWYod24oYSksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfdmlpaWppaTpmdW5jdGlvbihlLHQsbixyLGksbyxhKXt2YXIgcz1ObigpO3RyeXtOZShlKSh0LG4scixpLG8sYSl9Y2F0Y2goZSl7aWYod24ocyksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfdmlpaWppaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyxjKXt2YXIgbD1ObigpO3RyeXtOZShlKSh0LG4scixpLG8sYSxzLGMpfWNhdGNoKGUpe2lmKHduKGwpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX3ZpaWlqaWlqaTpmdW5jdGlvbihlLHQsbixyLGksbyxhLHMsYyl7dmFyIGw9Tm4oKTt0cnl7TmUoZSkodCxuLHIsaSxvLGEscyxjKX1jYXRjaChlKXtpZih3bihsKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV92aWlpamlqOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEpe3ZhciBzPU5uKCk7dHJ5e05lKGUpKHQsbixyLGksbyxhKX1jYXRjaChlKXtpZih3bihzKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV92aWlpamo6ZnVuY3Rpb24oZSx0LG4scixpLG8pe3ZhciBhPU5uKCk7dHJ5e05lKGUpKHQsbixyLGksbyl9Y2F0Y2goZSl7aWYod24oYSksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfdmlpaWpqaWk6ZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzKXt2YXIgYz1ObigpO3RyeXtOZShlKSh0LG4scixpLG8sYSxzKX1jYXRjaChlKXtpZih3bihjKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV92aWlqOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPU5uKCk7dHJ5e05lKGUpKHQsbixyKX1jYXRjaChlKXtpZih3bihpKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV92aWlqaTpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPU5uKCk7dHJ5e05lKGUpKHQsbixyLGkpfWNhdGNoKGUpe2lmKHduKG8pLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX3ZpaWppaTpmdW5jdGlvbihlLHQsbixyLGksbyl7dmFyIGE9Tm4oKTt0cnl7TmUoZSkodCxuLHIsaSxvKX1jYXRjaChlKXtpZih3bihhKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV92aWlqaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEpe3ZhciBzPU5uKCk7dHJ5e05lKGUpKHQsbixyLGksbyxhKX1jYXRjaChlKXtpZih3bihzKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV92aWlqaWlpaTpmdW5jdGlvbihlLHQsbixyLGksbyxhLHMpe3ZhciBjPU5uKCk7dHJ5e05lKGUpKHQsbixyLGksbyxhLHMpfWNhdGNoKGUpe2lmKHduKGMpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX3ZpaWppaWlpaTpmdW5jdGlvbihlLHQsbixyLGksbyxhLHMsYyl7dmFyIGw9Tm4oKTt0cnl7TmUoZSkodCxuLHIsaSxvLGEscyxjKX1jYXRjaChlKXtpZih3bihsKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV92aWlqaWlpaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyxjLGwpe3ZhciB1PU5uKCk7dHJ5e05lKGUpKHQsbixyLGksbyxhLHMsYyxsKX1jYXRjaChlKXtpZih3bih1KSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV92aWlqaWo6ZnVuY3Rpb24oZSx0LG4scixpLG8pe3ZhciBhPU5uKCk7dHJ5e05lKGUpKHQsbixyLGksbyl9Y2F0Y2goZSl7aWYod24oYSksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfdmlpamlqaWk6ZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzKXt2YXIgYz1ObigpO3RyeXtOZShlKSh0LG4scixpLG8sYSxzKX1jYXRjaChlKXtpZih3bihjKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV92aWlqajpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPU5uKCk7dHJ5e05lKGUpKHQsbixyLGkpfWNhdGNoKGUpe2lmKHduKG8pLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX3ZpaWpqaTpmdW5jdGlvbihlLHQsbixyLGksbyl7dmFyIGE9Tm4oKTt0cnl7TmUoZSkodCxuLHIsaSxvKX1jYXRjaChlKXtpZih3bihhKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV92aWlqamlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEpe3ZhciBzPU5uKCk7dHJ5e05lKGUpKHQsbixyLGksbyxhKX1jYXRjaChlKXtpZih3bihzKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV92aWlqamlpaTpmdW5jdGlvbihlLHQsbixyLGksbyxhLHMpe3ZhciBjPU5uKCk7dHJ5e05lKGUpKHQsbixyLGksbyxhLHMpfWNhdGNoKGUpe2lmKHduKGMpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX3ZpaWpqaWppOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyl7dmFyIGM9Tm4oKTt0cnl7TmUoZSkodCxuLHIsaSxvLGEscyl9Y2F0Y2goZSl7aWYod24oYyksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfdmlqOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1ObigpO3RyeXtOZShlKSh0LG4pfWNhdGNoKGUpe2lmKHduKHIpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX3Zpamk6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9Tm4oKTt0cnl7TmUoZSkodCxuLHIpfWNhdGNoKGUpe2lmKHduKGkpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX3ZpamlpOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89Tm4oKTt0cnl7TmUoZSkodCxuLHIsaSl9Y2F0Y2goZSl7aWYod24obyksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfdmlqaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt2YXIgYT1ObigpO3RyeXtOZShlKSh0LG4scixpLG8pfWNhdGNoKGUpe2lmKHduKGEpLGUhPT1lKzApdGhyb3cgZTtSbigxLDApfX0saW52b2tlX3ZpamlpaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyl7dmFyIGM9Tm4oKTt0cnl7TmUoZSkodCxuLHIsaSxvLGEscyl9Y2F0Y2goZSl7aWYod24oYyksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfdmlqaWlpaWlpaTpmdW5jdGlvbihlLHQsbixyLGksbyxhLHMsYyxsKXt2YXIgdT1ObigpO3RyeXtOZShlKSh0LG4scixpLG8sYSxzLGMsbCl9Y2F0Y2goZSl7aWYod24odSksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxpbnZva2VfdmlqaWlpaWlpaWk6ZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzLGMsbCx1KXt2YXIgZD1ObigpO3RyeXtOZShlKSh0LG4scixpLG8sYSxzLGMsbCx1KX1jYXRjaChlKXtpZih3bihkKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV92aWpqOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPU5uKCk7dHJ5e05lKGUpKHQsbixyKX1jYXRjaChlKXtpZih3bihpKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV92aWpqaWlpOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEpe3ZhciBzPU5uKCk7dHJ5e05lKGUpKHQsbixyLGksbyxhKX1jYXRjaChlKXtpZih3bihzKSxlIT09ZSswKXRocm93IGU7Um4oMSwwKX19LGludm9rZV92amk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPU5uKCk7dHJ5e05lKGUpKHQsbil9Y2F0Y2goZSl7aWYod24ociksZSE9PWUrMCl0aHJvdyBlO1JuKDEsMCl9fSxsbHZtX2VoX3R5cGVpZF9mb3I6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHN0cmZ0aW1lOnZuLHN0cmZ0aW1lX2w6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHZuKGUsdCxuLHIpfX0sSW49KGZ1bmN0aW9uKCl7dmFyIGU9e2Vudjpfbix3YXNpX3NuYXBzaG90X3ByZXZpZXcxOl9ufTtmdW5jdGlvbiB0KGUsdCl7dmFyIG4scj1lLmV4cG9ydHM7by5hc209cixQKE89by5hc20ubWVtb3J5LFwibWVtb3J5IG5vdCBmb3VuZCBpbiB3YXNtIGV4cG9ydHNcIiksb2UoTy5idWZmZXIpLFAoc2U9by5hc20uX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZSxcInRhYmxlIG5vdCBmb3VuZCBpbiB3YXNtIGV4cG9ydHNcIiksbj1vLmFzbS5fX3dhc21fY2FsbF9jdG9ycyxmZS51bnNoaWZ0KG4pLGJlKFwid2FzbS1pbnN0YW50aWF0ZVwiKX1TZShcIndhc20taW5zdGFudGlhdGVcIik7dmFyIG49bztmdW5jdGlvbiByKGUpe1Aobz09PW4sXCJ0aGUgTW9kdWxlIG9iamVjdCBzaG91bGQgbm90IGJlIHJlcGxhY2VkIGR1cmluZyBhc3luYyBjb21waWxhdGlvbiAtIHBlcmhhcHMgdGhlIG9yZGVyIG9mIEhUTUwgZWxlbWVudHMgaXMgd3Jvbmc/XCIpLG49bnVsbCx0KGUuaW5zdGFuY2UpfWZ1bmN0aW9uIGEodCl7cmV0dXJuKGt8fCFsJiYhdXx8XCJmdW5jdGlvblwiIT10eXBlb2YgZmV0Y2g/UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gUmUoaGUpfSkpOmZldGNoKGhlLHtjcmVkZW50aWFsczpcInNhbWUtb3JpZ2luXCJ9KS50aGVuKChmdW5jdGlvbihlKXtpZighZS5vayl0aHJvd1wiZmFpbGVkIHRvIGxvYWQgd2FzbSBiaW5hcnkgZmlsZSBhdCAnXCIraGUrXCInXCI7cmV0dXJuIGUuYXJyYXlCdWZmZXIoKX0pKS5jYXRjaCgoZnVuY3Rpb24oKXtyZXR1cm4gUmUoaGUpfSkpKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUodCxlKX0pKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZX0pKS50aGVuKHQsKGZ1bmN0aW9uKGUpe1MoXCJmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiBcIitlKSxoZS5zdGFydHNXaXRoKFwiZmlsZTovL1wiKSYmUyhcIndhcm5pbmc6IExvYWRpbmcgZnJvbSBhIGZpbGUgVVJJIChcIitoZStcIikgaXMgbm90IHN1cHBvcnRlZCBpbiBtb3N0IGJyb3dzZXJzLiBTZWUgaHR0cHM6Ly9lbXNjcmlwdGVuLm9yZy9kb2NzL2dldHRpbmdfc3RhcnRlZC9GQVEuaHRtbCNob3ctZG8taS1ydW4tYS1sb2NhbC13ZWJzZXJ2ZXItZm9yLXRlc3Rpbmctd2h5LWRvZXMtbXktcHJvZ3JhbS1zdGFsbC1pbi1kb3dubG9hZGluZy1vci1wcmVwYXJpbmdcIiksVGUoZSl9KSl9aWYoby5pbnN0YW50aWF0ZVdhc20pdHJ5e3JldHVybiBvLmluc3RhbnRpYXRlV2FzbShlLHQpfWNhdGNoKGUpe3JldHVybiBTKFwiTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogXCIrZSksITF9KGt8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nfHxDZShoZSl8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGZldGNoP2Eocik6ZmV0Y2goaGUse2NyZWRlbnRpYWxzOlwic2FtZS1vcmlnaW5cIn0pLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyh0LGUpLnRoZW4ociwoZnVuY3Rpb24oZSl7cmV0dXJuIFMoXCJ3YXNtIHN0cmVhbWluZyBjb21waWxlIGZhaWxlZDogXCIrZSksUyhcImZhbGxpbmcgYmFjayB0byBBcnJheUJ1ZmZlciBpbnN0YW50aWF0aW9uXCIpLGEocil9KSl9KSkpLmNhdGNoKGkpfSgpLG8uX19fd2FzbV9jYWxsX2N0b3JzPUFlKFwiX193YXNtX2NhbGxfY3RvcnNcIiksby5fbWFsbG9jPUFlKFwibWFsbG9jXCIpKSxTbj1vLl9mcmVlPUFlKFwiZnJlZVwiKSxibj1vLl9fX2Vycm5vX2xvY2F0aW9uPUFlKFwiX19lcnJub19sb2NhdGlvblwiKSxUbj0oby5faHRvbmw9QWUoXCJodG9ubFwiKSxvLl9udG9ocz1BZShcIm50b2hzXCIpLG8uX2h0b25zPUFlKFwiaHRvbnNcIiksby5fcmVsZWFzZVdhc21CdWZmZXI9QWUoXCJyZWxlYXNlV2FzbUJ1ZmZlclwiKSxvLl9fX2dldFR5cGVOYW1lPUFlKFwiX19nZXRUeXBlTmFtZVwiKSksQ249KG8uX19fZW1iaW5kX3JlZ2lzdGVyX25hdGl2ZV9hbmRfYnVpbHRpbl90eXBlcz1BZShcIl9fZW1iaW5kX3JlZ2lzdGVyX25hdGl2ZV9hbmRfYnVpbHRpbl90eXBlc1wiKSxvLl9fX3N0ZGlvX2V4aXQ9QWUoXCJfX3N0ZGlvX2V4aXRcIikpLEFuPShvLl9fX2RsX3NldGVycj1BZShcIl9fZGxfc2V0ZXJyXCIpLG8uX2Vtc2NyaXB0ZW5fYnVpbHRpbl9tZW1hbGlnbj1BZShcImVtc2NyaXB0ZW5fYnVpbHRpbl9tZW1hbGlnblwiKSksUm49by5fc2V0VGhyZXc9QWUoXCJzZXRUaHJld1wiKSxrbj1vLl9lbXNjcmlwdGVuX3N0YWNrX2luaXQ9ZnVuY3Rpb24oKXtyZXR1cm4oa249by5fZW1zY3JpcHRlbl9zdGFja19pbml0PW8uYXNtLmVtc2NyaXB0ZW5fc3RhY2tfaW5pdCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxPbj0oby5fZW1zY3JpcHRlbl9zdGFja19nZXRfZnJlZT1mdW5jdGlvbigpe3JldHVybihvLl9lbXNjcmlwdGVuX3N0YWNrX2dldF9mcmVlPW8uYXNtLmVtc2NyaXB0ZW5fc3RhY2tfZ2V0X2ZyZWUpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sby5fZW1zY3JpcHRlbl9zdGFja19nZXRfYmFzZT1mdW5jdGlvbigpe3JldHVybihvLl9lbXNjcmlwdGVuX3N0YWNrX2dldF9iYXNlPW8uYXNtLmVtc2NyaXB0ZW5fc3RhY2tfZ2V0X2Jhc2UpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sby5fZW1zY3JpcHRlbl9zdGFja19nZXRfZW5kPWZ1bmN0aW9uKCl7cmV0dXJuKE9uPW8uX2Vtc2NyaXB0ZW5fc3RhY2tfZ2V0X2VuZD1vLmFzbS5lbXNjcmlwdGVuX3N0YWNrX2dldF9lbmQpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0pLE5uPW8uc3RhY2tTYXZlPUFlKFwic3RhY2tTYXZlXCIpLHduPW8uc3RhY2tSZXN0b3JlPUFlKFwic3RhY2tSZXN0b3JlXCIpLERuPShvLnN0YWNrQWxsb2M9QWUoXCJzdGFja0FsbG9jXCIpLG8uX19fY3hhX2Nhbl9jYXRjaD1BZShcIl9fY3hhX2Nhbl9jYXRjaFwiKSksUG49by5fX19jeGFfaXNfcG9pbnRlcl90eXBlPUFlKFwiX19jeGFfaXNfcG9pbnRlcl90eXBlXCIpO2Z1bmN0aW9uIE1uKGUpe3RoaXMubmFtZT1cIkV4aXRTdGF0dXNcIix0aGlzLm1lc3NhZ2U9XCJQcm9ncmFtIHRlcm1pbmF0ZWQgd2l0aCBleGl0KFwiK2UrXCIpXCIsdGhpcy5zdGF0dXM9ZX1mdW5jdGlvbiBMbihlKXtmdW5jdGlvbiBuKCl7RW58fChFbj0hMCxvLmNhbGxlZFJ1bj0hMCxEfHwodWUoKSxQKCFtZSksbWU9ITAsby5ub0ZTSW5pdHx8S2UuaW5pdC5pbml0aWFsaXplZHx8S2UuaW5pdCgpLEtlLmlnbm9yZVBlcm1pc3Npb25zPSExLEhlLmluaXQoKSxxZS5yb290PUtlLm1vdW50KHFlLHt9LG51bGwpLE9lKGZlKSx0KG8pLG8ub25SdW50aW1lSW5pdGlhbGl6ZWQmJm8ub25SdW50aW1lSW5pdGlhbGl6ZWQoKSxQKCFvLl9tYWluLCdjb21waWxlZCB3aXRob3V0IGEgbWFpbiwgYnV0IG9uZSBpcyBwcmVzZW50LiBpZiB5b3UgYWRkZWQgaXQgZnJvbSBKUywgdXNlIE1vZHVsZVtcIm9uUnVudGltZUluaXRpYWxpemVkXCJdJyksZnVuY3Rpb24oKXtpZih1ZSgpLG8ucG9zdFJ1bilmb3IoXCJmdW5jdGlvblwiPT10eXBlb2Ygby5wb3N0UnVuJiYoby5wb3N0UnVuPVtvLnBvc3RSdW5dKTtvLnBvc3RSdW4ubGVuZ3RoOyllPW8ucG9zdFJ1bi5zaGlmdCgpLHBlLnVuc2hpZnQoZSk7dmFyIGU7T2UocGUpfSgpKSl9ZT1lfHxzLGdlPjB8fChrbigpLGxlKCksZnVuY3Rpb24oKXtpZihvLnByZVJ1bilmb3IoXCJmdW5jdGlvblwiPT10eXBlb2Ygby5wcmVSdW4mJihvLnByZVJ1bj1bby5wcmVSdW5dKTtvLnByZVJ1bi5sZW5ndGg7KWU9by5wcmVSdW4uc2hpZnQoKSxkZS51bnNoaWZ0KGUpO3ZhciBlO09lKGRlKX0oKSxnZT4wfHwoby5zZXRTdGF0dXM/KG8uc2V0U3RhdHVzKFwiUnVubmluZy4uLlwiKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7by5zZXRTdGF0dXMoXCJcIil9KSwxKSxuKCl9KSwxKSk6bigpLHVlKCkpKX1pZihSKFwiY2NhbGxcIiwhMSksUihcImN3cmFwXCIsITEpLFIoXCJzZXRWYWx1ZVwiLCExKSxSKFwiZ2V0VmFsdWVcIiwhMSksUihcImFsbG9jYXRlXCIsITEpLFIoXCJVVEY4QXJyYXlUb1N0cmluZ1wiLCExKSxSKFwiVVRGOFRvU3RyaW5nXCIsITEpLFIoXCJzdHJpbmdUb1VURjhBcnJheVwiLCExKSxSKFwic3RyaW5nVG9VVEY4XCIsITEpLFIoXCJsZW5ndGhCeXRlc1VURjhcIiwhMSksUihcImFkZE9uUHJlUnVuXCIsITEpLFIoXCJhZGRPbkluaXRcIiwhMSksUihcImFkZE9uUHJlTWFpblwiLCExKSxSKFwiYWRkT25FeGl0XCIsITEpLFIoXCJhZGRPblBvc3RSdW5cIiwhMSksUihcImFkZFJ1bkRlcGVuZGVuY3lcIiwhMCksUihcInJlbW92ZVJ1bkRlcGVuZGVuY3lcIiwhMCksUihcIkZTX2NyZWF0ZUZvbGRlclwiLCExKSxSKFwiRlNfY3JlYXRlUGF0aFwiLCEwKSxSKFwiRlNfY3JlYXRlRGF0YUZpbGVcIiwhMCksUihcIkZTX2NyZWF0ZVByZWxvYWRlZEZpbGVcIiwhMCksUihcIkZTX2NyZWF0ZUxhenlGaWxlXCIsITApLFIoXCJGU19jcmVhdGVMaW5rXCIsITEpLFIoXCJGU19jcmVhdGVEZXZpY2VcIiwhMCksUihcIkZTX3VubGlua1wiLCEwKSxSKFwiZ2V0TEVCXCIsITEpLFIoXCJnZXRGdW5jdGlvblRhYmxlc1wiLCExKSxSKFwiYWxpZ25GdW5jdGlvblRhYmxlc1wiLCExKSxSKFwicmVnaXN0ZXJGdW5jdGlvbnNcIiwhMSksUihcImFkZEZ1bmN0aW9uXCIsITEpLFIoXCJyZW1vdmVGdW5jdGlvblwiLCExKSxSKFwicHJldHR5UHJpbnRcIiwhMSksUihcImdldENvbXBpbGVyU2V0dGluZ1wiLCExKSxSKFwicHJpbnRcIiwhMSksUihcInByaW50RXJyXCIsITEpLFIoXCJnZXRUZW1wUmV0MFwiLCExKSxSKFwic2V0VGVtcFJldDBcIiwhMSksUihcImNhbGxNYWluXCIsITEpLFIoXCJhYm9ydFwiLCExKSxSKFwia2VlcFJ1bnRpbWVBbGl2ZVwiLCExKSxSKFwid2FzbU1lbW9yeVwiLCExKSxSKFwid2Fybk9uY2VcIiwhMSksUihcInN0YWNrU2F2ZVwiLCExKSxSKFwic3RhY2tSZXN0b3JlXCIsITEpLFIoXCJzdGFja0FsbG9jXCIsITEpLFIoXCJBc2NpaVRvU3RyaW5nXCIsITEpLFIoXCJzdHJpbmdUb0FzY2lpXCIsITEpLFIoXCJVVEYxNlRvU3RyaW5nXCIsITEpLFIoXCJzdHJpbmdUb1VURjE2XCIsITEpLFIoXCJsZW5ndGhCeXRlc1VURjE2XCIsITEpLFIoXCJVVEYzMlRvU3RyaW5nXCIsITEpLFIoXCJzdHJpbmdUb1VURjMyXCIsITEpLFIoXCJsZW5ndGhCeXRlc1VURjMyXCIsITEpLFIoXCJhbGxvY2F0ZVVURjhcIiwhMSksUihcImFsbG9jYXRlVVRGOE9uU3RhY2tcIiwhMSksUihcIkV4aXRTdGF0dXNcIiwhMSksUihcImludEFycmF5RnJvbVN0cmluZ1wiLCExKSxSKFwiaW50QXJyYXlUb1N0cmluZ1wiLCExKSxSKFwid3JpdGVTdHJpbmdUb01lbW9yeVwiLCExKSxSKFwid3JpdGVBcnJheVRvTWVtb3J5XCIsITEpLFIoXCJ3cml0ZUFzY2lpVG9NZW1vcnlcIiwhMSksby53cml0ZVN0YWNrQ29va2llPWxlLG8uY2hlY2tTdGFja0Nvb2tpZT11ZSxSKFwicHRyVG9TdHJpbmdcIiwhMSksUihcInplcm9NZW1vcnlcIiwhMSksUihcInN0cmluZ1RvTmV3VVRGOFwiLCExKSxSKFwiYWJvcnRPbkNhbm5vdEdyb3dNZW1vcnlcIiwhMSksUihcImVtc2NyaXB0ZW5fcmVhbGxvY19idWZmZXJcIiwhMSksUihcIkVOVlwiLCExKSxSKFwiRVJSTk9fQ09ERVNcIiwhMSksUihcIkVSUk5PX01FU1NBR0VTXCIsITEpLFIoXCJzZXRFcnJOb1wiLCExKSxSKFwiaW5ldFB0b240XCIsITEpLFIoXCJpbmV0TnRvcDRcIiwhMSksUihcImluZXRQdG9uNlwiLCExKSxSKFwiaW5ldE50b3A2XCIsITEpLFIoXCJyZWFkU29ja2FkZHJcIiwhMSksUihcIndyaXRlU29ja2FkZHJcIiwhMSksUihcIkROU1wiLCExKSxSKFwiZ2V0SG9zdEJ5TmFtZVwiLCExKSxSKFwiUHJvdG9jb2xzXCIsITEpLFIoXCJTb2NrZXRzXCIsITEpLFIoXCJnZXRSYW5kb21EZXZpY2VcIiwhMSksUihcInRyYXZlcnNlU3RhY2tcIiwhMSksUihcIlVOV0lORF9DQUNIRVwiLCExKSxSKFwiY29udmVydFBDdG9Tb3VyY2VMb2NhdGlvblwiLCExKSxSKFwicmVhZEFzbUNvbnN0QXJnc0FycmF5XCIsITEpLFIoXCJyZWFkQXNtQ29uc3RBcmdzXCIsITEpLFIoXCJtYWluVGhyZWFkRU1fQVNNXCIsITEpLFIoXCJqc3RvaV9xXCIsITEpLFIoXCJqc3RvaV9zXCIsITEpLFIoXCJnZXRFeGVjdXRhYmxlTmFtZVwiLCExKSxSKFwibGlzdGVuT25jZVwiLCExKSxSKFwiYXV0b1Jlc3VtZUF1ZGlvQ29udGV4dFwiLCExKSxSKFwiZHluQ2FsbFwiLCExKSxSKFwic2V0V2FzbVRhYmxlRW50cnlcIiwhMSksUihcImdldFdhc21UYWJsZUVudHJ5XCIsITEpLFIoXCJoYW5kbGVFeGNlcHRpb25cIiwhMSksUihcInJ1bnRpbWVLZWVwYWxpdmVQdXNoXCIsITEpLFIoXCJydW50aW1lS2VlcGFsaXZlUG9wXCIsITEpLFIoXCJjYWxsVXNlckNhbGxiYWNrXCIsITEpLFIoXCJtYXliZUV4aXRcIiwhMSksUihcInNhZmVTZXRUaW1lb3V0XCIsITEpLFIoXCJhc21qc01hbmdsZVwiLCExKSxSKFwiYXN5bmNMb2FkXCIsITEpLFIoXCJhbGlnbk1lbW9yeVwiLCExKSxSKFwibW1hcEFsbG9jXCIsITEpLFIoXCJyZWFsbHlOZWdhdGl2ZVwiLCExKSxSKFwidW5TaWduXCIsITEpLFIoXCJyZVNpZ25cIiwhMSksUihcImZvcm1hdFN0cmluZ1wiLCExKSxSKFwiUEFUSFwiLCExKSxSKFwiUEFUSF9GU1wiLCExKSxSKFwiU1lTQ0FMTFNcIiwhMSksUihcImdldFNvY2tldEZyb21GRFwiLCExKSxSKFwiZ2V0U29ja2V0QWRkcmVzc1wiLCExKSxSKFwiSlNFdmVudHNcIiwhMSksUihcInJlZ2lzdGVyS2V5RXZlbnRDYWxsYmFja1wiLCExKSxSKFwic3BlY2lhbEhUTUxUYXJnZXRzXCIsITEpLFIoXCJtYXliZUNTdHJpbmdUb0pzU3RyaW5nXCIsITEpLFIoXCJmaW5kRXZlbnRUYXJnZXRcIiwhMSksUihcImZpbmRDYW52YXNFdmVudFRhcmdldFwiLCExKSxSKFwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0XCIsITEpLFIoXCJmaWxsTW91c2VFdmVudERhdGFcIiwhMSksUihcInJlZ2lzdGVyTW91c2VFdmVudENhbGxiYWNrXCIsITEpLFIoXCJyZWdpc3RlcldoZWVsRXZlbnRDYWxsYmFja1wiLCExKSxSKFwicmVnaXN0ZXJVaUV2ZW50Q2FsbGJhY2tcIiwhMSksUihcInJlZ2lzdGVyRm9jdXNFdmVudENhbGxiYWNrXCIsITEpLFIoXCJmaWxsRGV2aWNlT3JpZW50YXRpb25FdmVudERhdGFcIiwhMSksUihcInJlZ2lzdGVyRGV2aWNlT3JpZW50YXRpb25FdmVudENhbGxiYWNrXCIsITEpLFIoXCJmaWxsRGV2aWNlTW90aW9uRXZlbnREYXRhXCIsITEpLFIoXCJyZWdpc3RlckRldmljZU1vdGlvbkV2ZW50Q2FsbGJhY2tcIiwhMSksUihcInNjcmVlbk9yaWVudGF0aW9uXCIsITEpLFIoXCJmaWxsT3JpZW50YXRpb25DaGFuZ2VFdmVudERhdGFcIiwhMSksUihcInJlZ2lzdGVyT3JpZW50YXRpb25DaGFuZ2VFdmVudENhbGxiYWNrXCIsITEpLFIoXCJmaWxsRnVsbHNjcmVlbkNoYW5nZUV2ZW50RGF0YVwiLCExKSxSKFwicmVnaXN0ZXJGdWxsc2NyZWVuQ2hhbmdlRXZlbnRDYWxsYmFja1wiLCExKSxSKFwicmVnaXN0ZXJSZXN0b3JlT2xkU3R5bGVcIiwhMSksUihcImhpZGVFdmVyeXRoaW5nRXhjZXB0R2l2ZW5FbGVtZW50XCIsITEpLFIoXCJyZXN0b3JlSGlkZGVuRWxlbWVudHNcIiwhMSksUihcInNldExldHRlcmJveFwiLCExKSxSKFwiY3VycmVudEZ1bGxzY3JlZW5TdHJhdGVneVwiLCExKSxSKFwicmVzdG9yZU9sZFdpbmRvd2VkU3R5bGVcIiwhMSksUihcInNvZnRGdWxsc2NyZWVuUmVzaXplV2ViR0xSZW5kZXJUYXJnZXRcIiwhMSksUihcImRvUmVxdWVzdEZ1bGxzY3JlZW5cIiwhMSksUihcImZpbGxQb2ludGVybG9ja0NoYW5nZUV2ZW50RGF0YVwiLCExKSxSKFwicmVnaXN0ZXJQb2ludGVybG9ja0NoYW5nZUV2ZW50Q2FsbGJhY2tcIiwhMSksUihcInJlZ2lzdGVyUG9pbnRlcmxvY2tFcnJvckV2ZW50Q2FsbGJhY2tcIiwhMSksUihcInJlcXVlc3RQb2ludGVyTG9ja1wiLCExKSxSKFwiZmlsbFZpc2liaWxpdHlDaGFuZ2VFdmVudERhdGFcIiwhMSksUihcInJlZ2lzdGVyVmlzaWJpbGl0eUNoYW5nZUV2ZW50Q2FsbGJhY2tcIiwhMSksUihcInJlZ2lzdGVyVG91Y2hFdmVudENhbGxiYWNrXCIsITEpLFIoXCJmaWxsR2FtZXBhZEV2ZW50RGF0YVwiLCExKSxSKFwicmVnaXN0ZXJHYW1lcGFkRXZlbnRDYWxsYmFja1wiLCExKSxSKFwicmVnaXN0ZXJCZWZvcmVVbmxvYWRFdmVudENhbGxiYWNrXCIsITEpLFIoXCJmaWxsQmF0dGVyeUV2ZW50RGF0YVwiLCExKSxSKFwiYmF0dGVyeVwiLCExKSxSKFwicmVnaXN0ZXJCYXR0ZXJ5RXZlbnRDYWxsYmFja1wiLCExKSxSKFwic2V0Q2FudmFzRWxlbWVudFNpemVcIiwhMSksUihcImdldENhbnZhc0VsZW1lbnRTaXplXCIsITEpLFIoXCJkZW1hbmdsZVwiLCExKSxSKFwiZGVtYW5nbGVBbGxcIiwhMSksUihcImpzU3RhY2tUcmFjZVwiLCExKSxSKFwic3RhY2tUcmFjZVwiLCExKSxSKFwiZ2V0RW52U3RyaW5nc1wiLCExKSxSKFwiY2hlY2tXYXNpQ2xvY2tcIiwhMSksUihcImRvUmVhZHZcIiwhMSksUihcImRvV3JpdGV2XCIsITEpLFIoXCJ3cml0ZUk1M1RvSTY0XCIsITEpLFIoXCJ3cml0ZUk1M1RvSTY0Q2xhbXBlZFwiLCExKSxSKFwid3JpdGVJNTNUb0k2NFNpZ25hbGluZ1wiLCExKSxSKFwid3JpdGVJNTNUb1U2NENsYW1wZWRcIiwhMSksUihcIndyaXRlSTUzVG9VNjRTaWduYWxpbmdcIiwhMSksUihcInJlYWRJNTNGcm9tSTY0XCIsITEpLFIoXCJyZWFkSTUzRnJvbVU2NFwiLCExKSxSKFwiY29udmVydEkzMlBhaXJUb0k1M1wiLCExKSxSKFwiY29udmVydFUzMlBhaXJUb0k1M1wiLCExKSxSKFwiZGxvcGVuTWlzc2luZ0Vycm9yXCIsITEpLFIoXCJzZXRJbW1lZGlhdGVXcmFwcGVkXCIsITEpLFIoXCJjbGVhckltbWVkaWF0ZVdyYXBwZWRcIiwhMSksUihcInBvbHlmaWxsU2V0SW1tZWRpYXRlXCIsITEpLFIoXCJ1bmNhdWdodEV4Y2VwdGlvbkNvdW50XCIsITEpLFIoXCJleGNlcHRpb25MYXN0XCIsITEpLFIoXCJleGNlcHRpb25DYXVnaHRcIiwhMSksUihcIkV4Y2VwdGlvbkluZm9cIiwhMSksUihcImV4Y2VwdGlvbl9hZGRSZWZcIiwhMSksUihcImV4Y2VwdGlvbl9kZWNSZWZcIiwhMSksUihcImZvcm1hdEV4Y2VwdGlvblwiLCExKSxSKFwiQnJvd3NlclwiLCExKSxSKFwic2V0TWFpbkxvb3BcIiwhMSksUihcIndnZXRcIiwhMSksby5GUz1LZSxSKFwiTUVNRlNcIiwhMSksUihcIlRUWVwiLCExKSxSKFwiUElQRUZTXCIsITEpLFIoXCJTT0NLRlNcIiwhMSksUihcIl9zZXROZXR3b3JrQ2FsbGJhY2tcIiwhMSksUihcInRlbXBGaXhlZExlbmd0aEFycmF5XCIsITEpLFIoXCJtaW5pVGVtcFdlYkdMRmxvYXRCdWZmZXJzXCIsITEpLFIoXCJoZWFwT2JqZWN0Rm9yV2ViR0xUeXBlXCIsITEpLFIoXCJoZWFwQWNjZXNzU2hpZnRGb3JXZWJHTEhlYXBcIiwhMSksUihcIkdMXCIsITEpLFIoXCJlbXNjcmlwdGVuV2ViR0xHZXRcIiwhMSksUihcImNvbXB1dGVVbnBhY2tBbGlnbmVkSW1hZ2VTaXplXCIsITEpLFIoXCJlbXNjcmlwdGVuV2ViR0xHZXRUZXhQaXhlbERhdGFcIiwhMSksUihcImVtc2NyaXB0ZW5XZWJHTEdldFVuaWZvcm1cIiwhMSksUihcIndlYmdsR2V0VW5pZm9ybUxvY2F0aW9uXCIsITEpLFIoXCJ3ZWJnbFByZXBhcmVVbmlmb3JtTG9jYXRpb25zQmVmb3JlRmlyc3RVc2VcIiwhMSksUihcIndlYmdsR2V0TGVmdEJyYWNlUG9zXCIsITEpLFIoXCJlbXNjcmlwdGVuV2ViR0xHZXRWZXJ0ZXhBdHRyaWJcIiwhMSksUihcIndyaXRlR0xBcnJheVwiLCExKSxSKFwiQUxcIiwhMSksUihcIlNETF91bmljb2RlXCIsITEpLFIoXCJTRExfdHRmQ29udGV4dFwiLCExKSxSKFwiU0RMX2F1ZGlvXCIsITEpLFIoXCJTRExcIiwhMSksUihcIlNETF9nZnhcIiwhMSksUihcIkdMVVRcIiwhMSksUihcIkVHTFwiLCExKSxSKFwiR0xGV19XaW5kb3dcIiwhMSksUihcIkdMRldcIiwhMSksUihcIkdMRVdcIiwhMSksUihcIklEQlN0b3JlXCIsITEpLFIoXCJydW5BbmRBYm9ydElmRXJyb3JcIiwhMSksUihcIkludGVybmFsRXJyb3JcIiwhMSksUihcIkJpbmRpbmdFcnJvclwiLCExKSxSKFwiVW5ib3VuZFR5cGVFcnJvclwiLCExKSxSKFwiUHVyZVZpcnR1YWxFcnJvclwiLCExKSxSKFwiaW5pdF9lbWJpbmRcIiwhMSksUihcInRocm93SW50ZXJuYWxFcnJvclwiLCExKSxSKFwidGhyb3dCaW5kaW5nRXJyb3JcIiwhMSksUihcInRocm93VW5ib3VuZFR5cGVFcnJvclwiLCExKSxSKFwiZW5zdXJlT3ZlcmxvYWRUYWJsZVwiLCExKSxSKFwiZXhwb3NlUHVibGljU3ltYm9sXCIsITEpLFIoXCJyZXBsYWNlUHVibGljU3ltYm9sXCIsITEpLFIoXCJleHRlbmRFcnJvclwiLCExKSxSKFwiY3JlYXRlTmFtZWRGdW5jdGlvblwiLCExKSxSKFwicmVnaXN0ZXJlZEluc3RhbmNlc1wiLCExKSxSKFwiZ2V0QmFzZXN0UG9pbnRlclwiLCExKSxSKFwicmVnaXN0ZXJJbmhlcml0ZWRJbnN0YW5jZVwiLCExKSxSKFwidW5yZWdpc3RlckluaGVyaXRlZEluc3RhbmNlXCIsITEpLFIoXCJnZXRJbmhlcml0ZWRJbnN0YW5jZVwiLCExKSxSKFwiZ2V0SW5oZXJpdGVkSW5zdGFuY2VDb3VudFwiLCExKSxSKFwiZ2V0TGl2ZUluaGVyaXRlZEluc3RhbmNlc1wiLCExKSxSKFwicmVnaXN0ZXJlZFR5cGVzXCIsITEpLFIoXCJhd2FpdGluZ0RlcGVuZGVuY2llc1wiLCExKSxSKFwidHlwZURlcGVuZGVuY2llc1wiLCExKSxSKFwicmVnaXN0ZXJlZFBvaW50ZXJzXCIsITEpLFIoXCJyZWdpc3RlclR5cGVcIiwhMSksUihcIndoZW5EZXBlbmRlbnRUeXBlc0FyZVJlc29sdmVkXCIsITEpLFIoXCJlbWJpbmRfY2hhckNvZGVzXCIsITEpLFIoXCJlbWJpbmRfaW5pdF9jaGFyQ29kZXNcIiwhMSksUihcInJlYWRMYXRpbjFTdHJpbmdcIiwhMSksUihcImdldFR5cGVOYW1lXCIsITEpLFIoXCJoZWFwMzJWZWN0b3JUb0FycmF5XCIsITEpLFIoXCJyZXF1aXJlUmVnaXN0ZXJlZFR5cGVcIiwhMSksUihcImdldFNoaWZ0RnJvbVNpemVcIiwhMSksUihcImludGVnZXJSZWFkVmFsdWVGcm9tUG9pbnRlclwiLCExKSxSKFwiZW51bVJlYWRWYWx1ZUZyb21Qb2ludGVyXCIsITEpLFIoXCJmbG9hdFJlYWRWYWx1ZUZyb21Qb2ludGVyXCIsITEpLFIoXCJzaW1wbGVSZWFkVmFsdWVGcm9tUG9pbnRlclwiLCExKSxSKFwicnVuRGVzdHJ1Y3RvcnNcIiwhMSksUihcIm5ld19cIiwhMSksUihcImNyYWZ0SW52b2tlckZ1bmN0aW9uXCIsITEpLFIoXCJlbWJpbmRfX3JlcXVpcmVGdW5jdGlvblwiLCExKSxSKFwidHVwbGVSZWdpc3RyYXRpb25zXCIsITEpLFIoXCJzdHJ1Y3RSZWdpc3RyYXRpb25zXCIsITEpLFIoXCJnZW5lcmljUG9pbnRlclRvV2lyZVR5cGVcIiwhMSksUihcImNvbnN0Tm9TbWFydFB0clJhd1BvaW50ZXJUb1dpcmVUeXBlXCIsITEpLFIoXCJub25Db25zdE5vU21hcnRQdHJSYXdQb2ludGVyVG9XaXJlVHlwZVwiLCExKSxSKFwiaW5pdF9SZWdpc3RlcmVkUG9pbnRlclwiLCExKSxSKFwiUmVnaXN0ZXJlZFBvaW50ZXJcIiwhMSksUihcIlJlZ2lzdGVyZWRQb2ludGVyX2dldFBvaW50ZWVcIiwhMSksUihcIlJlZ2lzdGVyZWRQb2ludGVyX2Rlc3RydWN0b3JcIiwhMSksUihcIlJlZ2lzdGVyZWRQb2ludGVyX2RlbGV0ZU9iamVjdFwiLCExKSxSKFwiUmVnaXN0ZXJlZFBvaW50ZXJfZnJvbVdpcmVUeXBlXCIsITEpLFIoXCJydW5EZXN0cnVjdG9yXCIsITEpLFIoXCJyZWxlYXNlQ2xhc3NIYW5kbGVcIiwhMSksUihcImZpbmFsaXphdGlvblJlZ2lzdHJ5XCIsITEpLFIoXCJkZXRhY2hGaW5hbGl6ZXJfZGVwc1wiLCExKSxSKFwiZGV0YWNoRmluYWxpemVyXCIsITEpLFIoXCJhdHRhY2hGaW5hbGl6ZXJcIiwhMSksUihcIm1ha2VDbGFzc0hhbmRsZVwiLCExKSxSKFwiaW5pdF9DbGFzc0hhbmRsZVwiLCExKSxSKFwiQ2xhc3NIYW5kbGVcIiwhMSksUihcIkNsYXNzSGFuZGxlX2lzQWxpYXNPZlwiLCExKSxSKFwidGhyb3dJbnN0YW5jZUFscmVhZHlEZWxldGVkXCIsITEpLFIoXCJDbGFzc0hhbmRsZV9jbG9uZVwiLCExKSxSKFwiQ2xhc3NIYW5kbGVfZGVsZXRlXCIsITEpLFIoXCJkZWxldGlvblF1ZXVlXCIsITEpLFIoXCJDbGFzc0hhbmRsZV9pc0RlbGV0ZWRcIiwhMSksUihcIkNsYXNzSGFuZGxlX2RlbGV0ZUxhdGVyXCIsITEpLFIoXCJmbHVzaFBlbmRpbmdEZWxldGVzXCIsITEpLFIoXCJkZWxheUZ1bmN0aW9uXCIsITEpLFIoXCJzZXREZWxheUZ1bmN0aW9uXCIsITEpLFIoXCJSZWdpc3RlcmVkQ2xhc3NcIiwhMSksUihcInNoYWxsb3dDb3B5SW50ZXJuYWxQb2ludGVyXCIsITEpLFIoXCJkb3duY2FzdFBvaW50ZXJcIiwhMSksUihcInVwY2FzdFBvaW50ZXJcIiwhMSksUihcInZhbGlkYXRlVGhpc1wiLCExKSxSKFwiY2hhcl8wXCIsITEpLFIoXCJjaGFyXzlcIiwhMSksUihcIm1ha2VMZWdhbEZ1bmN0aW9uTmFtZVwiLCExKSxSKFwiZW12YWxfaGFuZGxlX2FycmF5XCIsITEpLFIoXCJlbXZhbF9mcmVlX2xpc3RcIiwhMSksUihcImVtdmFsX3N5bWJvbHNcIiwhMSksUihcImluaXRfZW12YWxcIiwhMSksUihcImNvdW50X2VtdmFsX2hhbmRsZXNcIiwhMSksUihcImdldF9maXJzdF9lbXZhbFwiLCExKSxSKFwiZ2V0U3RyaW5nT3JTeW1ib2xcIiwhMSksUihcIkVtdmFsXCIsITEpLFIoXCJlbXZhbF9uZXdlcnNcIiwhMSksUihcImNyYWZ0RW12YWxBbGxvY2F0b3JcIiwhMSksUihcImVtdmFsX2dldF9nbG9iYWxcIiwhMSksUihcImVtdmFsX21ldGhvZENhbGxlcnNcIiwhMSksUihcImVtdmFsX3JlZ2lzdGVyZWRNZXRob2RzXCIsITEpLG8uSURCRlM9amUsQShcIkFMTE9DX05PUk1BTFwiLCExKSxBKFwiQUxMT0NfU1RBQ0tcIiwhMSksRWU9ZnVuY3Rpb24gZSgpe0VufHxMbigpLEVufHwoRWU9ZSl9LG8ucnVuPUxuLG8ucHJlSW5pdClmb3IoXCJmdW5jdGlvblwiPT10eXBlb2Ygby5wcmVJbml0JiYoby5wcmVJbml0PVtvLnByZUluaXRdKTtvLnByZUluaXQubGVuZ3RoPjA7KW8ucHJlSW5pdC5wb3AoKSgpO3JldHVybiBMbigpLGUucmVhZHl9KX0sNTg4NjE6KGUsdCxuKT0+e3ZhciByLGksbyxhLHMsYyxsLHUsZCxmLHAsbSxoLHYsZyx5LEUsXyxJLFMsYixULEMsQSxSLGssTyxOLHcsRCxQLE0sTCxVLHgsRixCLFYsRyxILFcsaixaLHosSyxZLHEsWCxRLEosJCxlZSx0ZSxuZSxyZSxpZSxvZSxhZSxzZSxjZSxsZSx1ZSxkZSxmZSxwZSxtZSxoZSx2ZSxnZSx5ZSxFZTtuLmQodCx7Qko6KCk9PkssQkw6KCk9PmwsQlE6KCk9PlcsRTI6KCk9PmRlLEVXOigpPT56LEVmOigpPT5ZLEtVOigpPT5yLEt1OigpPT5WLExGOigpPT5ULE1rOigpPT5oLFBfOigpPT5MLFEzOigpPT50ZSxRQjooKT0+ZCxSNjooKT0+aixTOTooKT0+UixUaDooKT0+cSxUcjooKT0+dmUsYmI6KCk9PkosY0U6KCk9PkcsY2M6KCk9Pm9lLGZCOigpPT5CLGZxOigpPT5BLGkxOigpPT5uZSxqRTooKT0+dWUsbHE6KCk9Pk8sbTI6KCk9PkQsbnI6KCk9PnBlLHJTOigpPT5rLHJjOigpPT4kLHVlOigpPT5nLHVqOigpPT5RLHZDOigpPT5lZSx5bjooKT0+dix6YzooKT0+UCx6dzooKT0+SH0pLGZ1bmN0aW9uKGUpe2VbZS5OT05FPTBdPVwiTk9ORVwiLGVbZS5SRVRSWUFCTEU9MV09XCJSRVRSWUFCTEVcIixlW2UuRkFUQUw9Ml09XCJGQVRBTFwifShyfHwocj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5QRVJTSVNUU0VORFFVRVVFRFNURVA9MF09XCJQRVJTSVNUU0VORFFVRVVFRFNURVBcIixlW2UuVkFMSURBVEVTRU5ET1JERVJTVEVQPTFdPVwiVkFMSURBVEVTRU5ET1JERVJTVEVQXCIsZVtlLlZBTElEQVRFU0VORE1FU1NBR0VORVRXT1JLU1RFUD0yXT1cIlZBTElEQVRFU0VORE1FU1NBR0VORVRXT1JLU1RFUFwiLGVbZS5DUkVBVEVORVRXT1JLR1JPVVBTU1RFUD0zXT1cIkNSRUFURU5FVFdPUktHUk9VUFNTVEVQXCIsZVtlLkVOU1VSRUNPTlZFUlNBVElPTlNURVA9NF09XCJFTlNVUkVDT05WRVJTQVRJT05TVEVQXCIsZVtlLlBSRVBBUkVNRURJQVdJVEhERUxFR0FURVNURVA9NV09XCJQUkVQQVJFTUVESUFXSVRIREVMRUdBVEVTVEVQXCIsZVtlLlBSRVBBUkVHUk9VUElOVklURVdJVEhERUxFR0FURVNURVA9Nl09XCJQUkVQQVJFR1JPVVBJTlZJVEVXSVRIREVMRUdBVEVTVEVQXCIsZVtlLkVOQ1JZUFRTVEVQPTddPVwiRU5DUllQVFNURVBcIixlW2UuTUNTU0VORFNURVA9OF09XCJNQ1NTRU5EU1RFUFwifShpfHwoaT17fSkpLGZ1bmN0aW9uKGUpe2VbZS5CTE9DS0lOR1NZTkM9MF09XCJCTE9DS0lOR1NZTkNcIixlW2UuTk9OQkxPQ0tJTkdTWU5DPTFdPVwiTk9OQkxPQ0tJTkdTWU5DXCIsZVtlLlNZTkNSRVNQT05TRUlOQ0xVREVEPTJdPVwiU1lOQ1JFU1BPTlNFSU5DTFVERURcIn0ob3x8KG89e30pKSxmdW5jdGlvbihlKXtlW2UuRElTQUJMRUQ9MF09XCJESVNBQkxFRFwiLGVbZS5FTUlUTUVUUklDT05MWT0xXT1cIkVNSVRNRVRSSUNPTkxZXCIsZVtlLk1BUktBU0ZBSUxFRD0yXT1cIk1BUktBU0ZBSUxFRFwiLGVbZS5ERUxFVEVUQVNLPTNdPVwiREVMRVRFVEFTS1wifShhfHwoYT17fSkpLGZ1bmN0aW9uKGUpe2VbZS5SRUxFQVNFTUVTU0FHRVVQREFURURPRVNOT1RCTE9DSz0wXT1cIlJFTEVBU0VNRVNTQUdFVVBEQVRFRE9FU05PVEJMT0NLXCIsZVtlLlJFTEVBU0VNRVNTQUdFVVBEQVRFRE9FU05PVEJMT0NLRVhDRVBUT1RIRVJSRUxFQVNFUz0xXT1cIlJFTEVBU0VNRVNTQUdFVVBEQVRFRE9FU05PVEJMT0NLRVhDRVBUT1RIRVJSRUxFQVNFU1wiLGVbZS5SRUxFQVNFV0FURVJNQVJLRE9FU05PVEJMT0NLPTJdPVwiUkVMRUFTRVdBVEVSTUFSS0RPRVNOT1RCTE9DS1wiLGVbZS5SRUFETUVTU0FHRVVQREFURUFORFVQREFURVdBVEVSTUFSS0RPTk9UQkxPQ0s9M109XCJSRUFETUVTU0FHRVVQREFURUFORFVQREFURVdBVEVSTUFSS0RPTk9UQkxPQ0tcIixlW2UuTUVTU0FHRVNFTkRJU05PVEJMT0NLRUQ9NF09XCJNRVNTQUdFU0VORElTTk9UQkxPQ0tFRFwifShzfHwocz17fSkpLGZ1bmN0aW9uKGUpe2VbZS5PTkxZU0VORElOR0JFQVRTTkVXQ09OVEVOVD0wXT1cIk9OTFlTRU5ESU5HQkVBVFNORVdDT05URU5UXCIsZVtlLk5FV0NPTlRFTlRCRUFUU0FMTE9VVEJPVU5EU0VORFM9MV09XCJORVdDT05URU5UQkVBVFNBTExPVVRCT1VORFNFTkRTXCJ9KGN8fChjPXt9KSksZnVuY3Rpb24oZSl7ZS5FTkRfVE9fRU5EX0VOQ1JZUFRJT05fS0VZPTEsZS5DVVNUT01fU0VSVkVSX0NFUlRJRklDQVRFX1JPT1RfS0VZPTMsZS5HUlBDX1BST1hZX0tFWT00LGUuVVNFX0NMSUVOVF9GRUVEX1VQREFURVJfS0VZPTUsZS5HUlBDX0VOQUJMRV9UUkFDRVNfS0VZPTYsZS5BUlJPWU9fRVhQRVJJRU5DRV9LRVk9NyxlLkVOQUJMRV9QUkVTRU5DRV9UUkFOU1BPUlRfS0VZPTgsZS5BUElfR0FURVdBWV9HUlBDX1RJTUVPVVRfTVNfS0VZPTksZS5OVU1CRVJfT0ZfU1lOQ19GRUVEX05FVFdPUktfUkVUUklFU19LRVk9MTAsZS5DUk9ORVRfU1RPUkFHRV9QQVRIX0tFWT0xMSxlLkNST05FVF9TVFJFQU1fRU5HSU5FX0tFWT0xMixlLlNZTkNfTUVTU0FHRVNfRlJPTV9USEVfRkVFRF9URVNUX0tFWT0xMyxlLkFMTE9XX1JFUVVFU1RfV0lUSF9OT19SRUFDSEFCSUxJVFlfS0VZPTE0LGUuRU5BQkxFX0dBVEVXQVlfTUVTU0FHRV9CVUZGRVJfS0VZPTE1LGUuRU5BQkxFX0dSUENfQ1JPTkVUX0tFWT0xNixlLkFSUk9ZT19CQUNLRU5EX0VORFBPSU5UX1NFTEVDVE9SX0tFWT0xNyxlLkFQSV9HQVRFV0FZX0NVU1RPTV9FTkRQT0lOVF9LRVk9MTgsZS5BUElfR0FURVdBWV9BQl9URVNUX0VORFBPSU5UX0tFWT0xOSxlLlNUUkVBTUlOR19TRVJWSUNFX0NVU1RPTV9FTkRQT0lOVF9LRVk9MjAsZS5TVFJFQU1JTkdfU0VSVklDRV9BQl9URVNUX0VORFBPSU5UX0tFWT0yMSxlLkVOQUJMRV9JTl9NRU1PUllfU1lOQ19UT0tFTl9LRVk9MjIsZS5VU0VfQVJST1lPX1NDSEVEVUxFUj0yMyxlLkFSUk9ZT19TQ0hFRFVMRVJfUFJJT1JJVFk9MjQsZS5ESVNBQkxFX05PVElGSUNBVElPTl9ERUxJVkVSWV9SQVRFX0xJTUlUSU5HPTI1LGUuTUVTU0FHSU5HX1JPVVRFX1RBR19LRVk9MjYsZS5MT1NUX0NPTk5FQ1RJT05fSU5URVJWQUxfTVNfRk9SX1NZTkNfRkVFRF9LRVk9MjcsZS5GTE9XX09SQ0hFU1RSQVRPUl9TVEVQX1RJTUVPVVRfTVNfS0VZPTI5LGUuRU5BQkxFX1NUT1JBR0VfTUVUUklDU19LRVk9MzAsZS5NSU5fTUVTU0FHRVNfUkVUVVJORURfRlJPTV9JTklUSUFMX0NPTlZfRkVUQ0hfS0VZPTMxLGUuRU5BQkxFX0ZFRURfVkFMSURBVE9SX0tFWT0zMixlLk9SQ0hFU1RSQVRPUl9SRVFVRVNUX1JFVFJZX0NPVU5UX0tFWT0yOCxlLk9SQ0hFU1RSQVRPUl9SRVFVRVNUX1JFVFJZX01BWF9CQUNLT0ZGX0tFWT0zMyxlLk9SQ0hFU1RSQVRPUl9VUERBVEVfUkVRVUVTVF9FWFRSQV9SRVRSSUVTPTM0LGUuT1JDSEVTVFJBVE9SX05PX05FVFdPUktfUkVUUllfQ09VTlRfS0VZPTM1LGUuT1JDSEVTVFJBVE9SX05PX05FVFdPUktfUkVUUllfTUFYX0JBQ0tPRkZfS0VZPTM2LGUuRU5BQkxFX0JBVENIX1NZTkNfQ09OVkVSU0FUSU9OX0tFWT0zNyxlLkFMTE9XX1NBVkVBQkxFX1NOQVBTX0tFWT0zOCxlLkxPU1RfQ09OTkVDVElPTl9BUFBfRk9SRUdST1VORF9NSU5fSU5URVJWQUxfTVNfRk9SX1NZTkNfRkVFRF9LRVk9MzksZS5TRU5ETUVTU0FHRV9TS0lQX1JFQUNIQUJJTElUWV9DSEVDS19GSVJTVF9BVFRFTVBUX0tFWT00MCxlLlVTRV9FWFBJUkVEX01FU1NBR0VTX1FVRVJZPTQxLGUuVEVTVF9VTlJFQURfTUVTU0FHRV9USU1FT1VUX1NFQ09ORFNfS0VZPTQyLGUuVEVTVF9SRUFEX01FU1NBR0VfVElNRU9VVF9TRUNPTkRTX0tFWT00MyxlLlNLSVBfREFUQV9XSVBFX0ZST01fRkVFRF9NT0RFPTQ0LGUuRk9SQ0VfU1RFUF9GQUlMVVJFX0tFWT00NSxlLkZPUkNFX0ZBSUxfU0VORF9GTE9XX1NURVBfTkFNRV9LRVk9NDYsZS5VU0VfSU5TRUNVUkVfR1JQQ19DSEFOTkVMX1RZUEU9NDcsZS5TRU5ERkxPV19DTEVBTkVSX0FDVElPTj00OCxlLlNFTkRGTE9XX0NMRUFORVJfTUlOX1JFVFJZX0NPVU5UX1NUVUNLPTQ5LGUuU0VOREZMT1dfQ0xFQU5FUl9NSU5fQUdFX01JTExJU0VDT05EU19TVFVDSz01MCxlLlZBTElEQVRFX09SREVSX1NURVBfT1BUSU9OPTUxLGUuTUNTX0dSUENfUEFUSF9QUkVGSVg9NTMsZS5ESVNBQkxFX1RBUkdFVEVEX0ZMT1dfVEFTS19FTlFVRVVFX0tFWT01NCxlLlNFTkRGTE9XX09SREVSSU5HX01BUktfU0VORElORz01NSxlLkZFRURfU0VORF9TVEFURV9QUklPUklUWV9LRVk9NTYsZS5TRU5ERkxPV19PUkRFUklOR19BRlRFUl9QUkVQQVJFX01FRElBPTU3LGUuRU5BQkxFX0ZFRURfU1RVQ0tfU05BUF9DTEVBTkVSPTU4LGUuU0VORE1FU1NBR0VfS0lDS19GUk9OVF9PRl9RVUVVRV9XSElMRV9PRkZMSU5FPTU5LGUuU1lOQ19GRUVEX09OX1JFQUNIQUJJTElUWV9DSEFOR0U9NjAsZS5FTkFCTEVfQ0hBVF9NRU5USU9OUz02MSxlLlNFTkRGTE9XX1ZFUlNJT05fR0FQX1NZTkNfUE9MSUNZPTYyLGUuQUxMT1dfQkFUQ0hfU0FWRUFCTEVfU05BUFNfS0VZPTYzLGUuRkVFRF9GT1JDRV9TRVFVRU5USUFMX1JFUVVFU1RTX0tFWT02NCxlLlVTRV9GRUVEX1ZJU0lCSUxJVFlfS0VZPTY1LGUuTUFYX0ZBSUxFRF9XQVRFUk1BUktfVVBEQVRFU19UT19DTEVBTj02NixlLkVOQUJMRV9DTElFTlRfU0lERV9GRUVEX1BBR0lOQVRJT049NjcsZS5TVFJFQU1JTkdfU0VSVklDRV9DVVNUT01fRElTQ09OTkVDVElPTl9ERUxBWT02OCxlLkVOQUJMRV9JTkFDVElWRV9DT05WX0RFTEVHQVRFX1VQREFURVM9NjksZS5FTkFCTEVfRVhQSVJFRF9NRURJQV9DT05URU5UX1RSQUNLSU5HPTcwLGUuRU5BQkxFX0ZFRURfSUdOT1JFX0RPV05MT0FEX1NUQVRVU19TTkFQUz03MSxlLkZFRURfVU5WSUVXRURfU05BUF9NQVhfTElNSVQ9NzIsZS5QUkVGRVRDSEFCTEVfU05BUFNfQUxSRUFEWV9ET1dOTE9BREVEX0xJTUlUPTczLGUuU1lOQ19GRUVEX1JFVFJZX0RFTEFZX0tFWT03NCxlLlNZTkNfRkVFRF9BUFBMWV9SRVRSWV9PVkVSUklERV9UT19IT1RTVEFSVF9PTkxZX0tFWT03NSxlLlVTRV9HRU5FUklDX0dSUENfQ0xJRU5UPTc2LGUuQ0FOQ0VMX01FU1NBR0VfU0VORF9GRUVEX1VJPTc3LGUuQ0FOQ0VMX01FU1NBR0VfU0VORF9DSEFUX1VJX0VOQUJMRUQ9NzgsZS5DQU5DRUxfQUxTT19GT1JfU0VORElOR19NRVNTQUdFUz03OSxlLkVOQUJMRV9DSEFUX1JFUExZPTgwLGUuRU5BQkxFX0NIQVRfUkVBQ1RJT05TPTgxLGUuRU5BQkxFX1ZPSUNFX05PVEVfQ09OU1VNUFRJT049ODIsZS5FTkFCTEVfQ09OVEFDVF9TVUdHRVNUSU9OUz04MyxlLkVOQUJMRV9OT05fRlJJRU5EX01FU1NBR0lORz04NCxlLkVOQUJMRV9DT05UQUNUX0JPT0tfTUVTU0FHSU5HPTg1LGUuRU5BQkxFX1BJTl9DT05WRVJTQVRJT05fQVBJPTg2LGUuRUVMX0NMSUVOVF9DT05GSUdfQ09GX09WRVJSSURFPTg3LGUuQ1JFQVRFX0NPTlZPU19XSVRIXzI0SFJfUkVURU5USU9OPTg4LGUuTElNSVRfUElOTkVEX0NPTlZFUlNBVElPTj04OSxlLkVOQUJMRV9NSUdSQVRJTkdfT05FX09OX09ORV9DT05WT1NfVE9fMjRIUl9SRVRFTlRJT049OTAsZS5FTkFCTEVfQUxXQVlTX1NJR05BTF9GRUVEX0RFTEVHQVRFPTkxLGUuRU5BQkxFX0FVVE9fUkVBRF9XQVRFUk1BUks9OTIsZS5FTkFCTEVfQVVUT19SRUxFQVNFX1dBVEVSTUFSSz05MyxlLlNLSVBfRklERUxJVVNfREVDUllQVElPTl9GT1JfREVTS1RPUF9XRUI9OTQsZS5FTkFCTEVfVk9JQ0VfTk9URV9UUkFOU0NSSVBUSU9OPTk1LGUuRU5BQkxFX0NPTlNVTUlOR19NU0dfRlJPTV9OT1RJRl9FWFRFTlNJT049OTYsZS5TS0lQX0ZBTExCQUNLX1dIRU5fQ09OU1VNSU5HX01TR19GUk9NX05PVElGX0VYVEVOU0lPTj05NyxlLk1BWF9ERUxUQV9TWU5DX0NPTlZPX0dBUF9BTExPV0VEX0ZST01fTk9USUZfRVhURU5TSU9OPTk4LGUuRU5BQkxFX0lPU19FWFRFTlNJT05fRElTUE9TQUw9OTksZS5JT1NfTk9USUZfRVhURU5TSU9OX1NDSEVEVUxFUl9QUklPUklUWT0xMDAsZS5FTkFCTEVfQ0hBVF9XQUxMUEFQRVI9MTAxLGUuRU5BQkxFX0lTX1NBVkFCTEVfSVNfUkVBQ1RBQkxFX0xPQ0tFRF9DT05WRVJTQVRJT05fQkxPQ0s9MTAyLGUuT1ZFUlJJREVfS0lDS19QQVJUSUNJUEFOVF9DT0Y9MTAzLGUuRFdFQl9FTkFCTEVfQ0xFQVJfTUVESUFfUkVGRVJFTkNFX0xJU1RTX1dIRU5fREVDUllQVElPTl9GQUlMPTEwNCxlLkRVUExFWF9VUERBVEVTX1NFTkRFUl9JU19TRUxGX0FTU0VSVFM9MTA1LGUuRU5BQkxFX0lPU19FWFRFTlNJT05fRElTUE9TQUxfUkVRVUVTVF9UUkFDS0lORz0xMDYsZS5TTkFQX1JFUExBWV9EVVJBVElPTl9NUz0xMDcsZS5NSU5fU1RSRUFLX0NPVU5UX1RPX0VOQUJMRV9SRVNUT1JFPTEwOCxlLk1BWF9IT1VSU19BRlRFUl9TVFJFQUtfRVhQSVJFX1RPX0VOQUJMRV9SRVNUT1JFPTEwOSxlLkVOQUJMRV9TVFJFQUtfRURVQ0FUSU9OPTExMCxlLk1FUkxJTl9UV0VBS1M9MTExLGUuREVMVEFfU1lOQ19TUUxJVEVfU0hBUkVEX1NUT1JBR0VfUEFUSD0xMTIsZS5ERUxUQV9TWU5DX1NRTElURV9TSEFSRURfU1RPUkFHRV9DQUNIRV9TSVpFPTExM30obHx8KGw9e30pKSxmdW5jdGlvbihlKXtlW2UuTUNTX0FDVElWRT0wXT1cIk1DU19BQ1RJVkVcIixlW2UuRFVQTEVYX0FDVElWRT0xXT1cIkRVUExFWF9BQ1RJVkVcIixlW2UuQUxMX0NPTk5FQ1RJT05TX0FSRV9BQ1RJVkU9Ml09XCJBTExfQ09OTkVDVElPTlNfQVJFX0FDVElWRVwiLGVbZS5OT19DT05ORUNUSU9OU19BQ1RJVkU9M109XCJOT19DT05ORUNUSU9OU19BQ1RJVkVcIn0odXx8KHU9e30pKSxmdW5jdGlvbihlKXtlW2UuQ09MRF9TVEFSVD0wXT1cIkNPTERfU1RBUlRcIixlW2UuV0FSTV9TVEFSVD0xXT1cIldBUk1fU1RBUlRcIixlW2UuSE9UX1NUQVJUPTJdPVwiSE9UX1NUQVJUXCIsZVtlLlBVTExfVE9fUkVGUkVTSD0zXT1cIlBVTExfVE9fUkVGUkVTSFwiLGVbZS5MT0dJTj00XT1cIkxPR0lOXCIsZVtlLlJFR0lTVFJBVElPTj01XT1cIlJFR0lTVFJBVElPTlwiLGVbZS5ORVRXT1JLX1JFQ09OTkVDVD02XT1cIk5FVFdPUktfUkVDT05ORUNUXCIsZVtlLkJBQ0tHUk9VTkQ9N109XCJCQUNLR1JPVU5EXCIsZVtlLk9USEVSPThdPVwiT1RIRVJcIn0oZHx8KGQ9e30pKSxmdW5jdGlvbihlKXtlW2UuRkVFRF9PTkxZPTBdPVwiRkVFRF9PTkxZXCIsZVtlLkdST1VQUz0xXT1cIkdST1VQU1wiLGVbZS5BTEw9Ml09XCJBTExcIn0oZnx8KGY9e30pKSxmdW5jdGlvbihlKXtlW2UuVVNFUl9JRF9DSEFOR0U9MF09XCJVU0VSX0lEX0NIQU5HRVwiLGVbZS5EQVRBQkFTRV9VUEdSQURFPTFdPVwiREFUQUJBU0VfVVBHUkFERVwiLGVbZS5BUlJPWU9fRVhQRVJJRU5DRV9DSEFOR0U9Ml09XCJBUlJPWU9fRVhQRVJJRU5DRV9DSEFOR0VcIixlW2UuQ09SUlVQVElPTl9ERVRFQ1RFRD0zXT1cIkNPUlJVUFRJT05fREVURUNURURcIn0ocHx8KHA9e30pKSxmdW5jdGlvbihlKXtlW2UuU05BUFNfT05MWT0wXT1cIlNOQVBTX09OTFlcIixlW2UuUFJJT1JJVElaRV9TTkFQUz0xXT1cIlBSSU9SSVRJWkVfU05BUFNcIixlW2UuU05BUFNfQU5EX0NIQVRTPTJdPVwiU05BUFNfQU5EX0NIQVRTXCJ9KG18fChtPXt9KSksZnVuY3Rpb24oZSl7ZVtlLk1FRElBX1NVQ0NFU1NGVUxMWV9SRU5ERVJFRD0wXT1cIk1FRElBX1NVQ0NFU1NGVUxMWV9SRU5ERVJFRFwiLGVbZS5NRURJQV9OT1RfUkVOREVSRUQ9MV09XCJNRURJQV9OT1RfUkVOREVSRURcIixlW2UuTUVESUFfUEVSTUFORU5UTFlfRkFJTEVEPTJdPVwiTUVESUFfUEVSTUFORU5UTFlfRkFJTEVEXCJ9KGh8fChoPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlBSRV9TRU5EX1VQREFURT0wXT1cIlBSRV9TRU5EX1VQREFURVwiLGVbZS5WQUxJREFURV9PUkRFUl9TVEVQPTFdPVwiVkFMSURBVEVfT1JERVJfU1RFUFwiLGVbZS5WQUxJREFURV9ORVRXT1JLX1NURVA9Ml09XCJWQUxJREFURV9ORVRXT1JLX1NURVBcIixlW2UuQ1JFQVRFX05FVFdPUktfR1JPVVBTPTNdPVwiQ1JFQVRFX05FVFdPUktfR1JPVVBTXCIsZVtlLkVOU1VSRV9DT05WRVJTQVRJT05TPTRdPVwiRU5TVVJFX0NPTlZFUlNBVElPTlNcIixlW2UuRU5DUllQVD01XT1cIkVOQ1JZUFRcIixlW2UuTUVESUFfQUxMPTZdPVwiTUVESUFfQUxMXCIsZVtlLk1FRElBX1JFU09MVkU9N109XCJNRURJQV9SRVNPTFZFXCIsZVtlLk1FRElBX1NBVkU9OF09XCJNRURJQV9TQVZFXCIsZVtlLk1FRElBX0VOQ1JZUFQ9OV09XCJNRURJQV9FTkNSWVBUXCIsZVtlLk1FRElBX1NNQVJUX1NIQVJFPTEwXT1cIk1FRElBX1NNQVJUX1NIQVJFXCIsZVtlLk1FRElBX0RPV05MT0FEPTExXT1cIk1FRElBX0RPV05MT0FEXCIsZVtlLk1FRElBX1RSSU09MTJdPVwiTUVESUFfVFJJTVwiLGVbZS5NRURJQV9UUkFOU0NPREU9MTNdPVwiTUVESUFfVFJBTlNDT0RFXCIsZVtlLk1FRElBX1pJUD0xNF09XCJNRURJQV9aSVBcIixlW2UuTUVESUFfUFJFX1VQTE9BRF9VUERBVEU9MTVdPVwiTUVESUFfUFJFX1VQTE9BRF9VUERBVEVcIixlW2UuTUVESUFfVVBMT0FEPTE2XT1cIk1FRElBX1VQTE9BRFwiLGVbZS5NRURJQV9QT1NUX1VQTE9BRF9VUERBVEU9MTddPVwiTUVESUFfUE9TVF9VUExPQURfVVBEQVRFXCIsZVtlLk1FRElBX1VTRVJfR0VORVJBVEVEX0FTU0VUU19VUExPQUQ9MThdPVwiTUVESUFfVVNFUl9HRU5FUkFURURfQVNTRVRTX1VQTE9BRFwiLGVbZS5TRU5EPTE5XT1cIlNFTkRcIixlW2UuUE9TVF9TRU5EX1VQREFURT0yMF09XCJQT1NUX1NFTkRfVVBEQVRFXCIsZVtlLkNSRUFURV9HUk9VUF9BTkRfSU5WSVRFPTIxXT1cIkNSRUFURV9HUk9VUF9BTkRfSU5WSVRFXCIsZVtlLklOSVRJQUxJWkVfQ09OVEVYVF9JTkZPPTIyXT1cIklOSVRJQUxJWkVfQ09OVEVYVF9JTkZPXCIsZVtlLlBSRV9TRU5EX0RFTEFZPTIzXT1cIlBSRV9TRU5EX0RFTEFZXCIsZVtlLlVQREFURV9JTkNJREVOVEFMX0FUVEFDSE1FTlRTPTI0XT1cIlVQREFURV9JTkNJREVOVEFMX0FUVEFDSE1FTlRTXCJ9KHZ8fCh2PXt9KSksZnVuY3Rpb24oZSl7ZVtlLlJFU09MVkU9MF09XCJSRVNPTFZFXCIsZVtlLlNBVkU9MV09XCJTQVZFXCIsZVtlLkVOQ1JZUFQ9Ml09XCJFTkNSWVBUXCIsZVtlLlRSSU09M109XCJUUklNXCIsZVtlLlRSQU5TQ09ERT00XT1cIlRSQU5TQ09ERVwiLGVbZS5aSVA9NV09XCJaSVBcIixlW2UuUFJFX1VQTE9BRF9VUERBVEU9Nl09XCJQUkVfVVBMT0FEX1VQREFURVwiLGVbZS5VUExPQUQ9N109XCJVUExPQURcIixlW2UuUE9TVF9VUExPQURfVVBEQVRFPThdPVwiUE9TVF9VUExPQURfVVBEQVRFXCIsZVtlLkRPV05MT0FEPTldPVwiRE9XTkxPQURcIixlW2UuU01BUlRfU0hBUkU9MTBdPVwiU01BUlRfU0hBUkVcIixlW2UuVVNFUl9HRU5FUkFURURfQVNTRVRTX1VQTE9BRD0xMV09XCJVU0VSX0dFTkVSQVRFRF9BU1NFVFNfVVBMT0FEXCJ9KGd8fChnPXt9KSksZnVuY3Rpb24oZSl7ZVtlLklOSVQ9MF09XCJJTklUXCIsZVtlLkFDSz0xXT1cIkFDS1wiLGVbZS5WRVJJRklFRD0yXT1cIlZFUklGSUVEXCJ9KHl8fCh5PXt9KSksZnVuY3Rpb24oZSl7ZVtlLkNFS05PVEZPVU5EPTBdPVwiQ0VLTk9URk9VTkRcIixlW2UuQ0VLRU5DUllQVEZBSUxFRD0xXT1cIkNFS0VOQ1JZUFRGQUlMRURcIixlW2UuREVDUllQVE9SS0VZU05PVEZPVU5EPTJdPVwiREVDUllQVE9SS0VZU05PVEZPVU5EXCIsZVtlLlJFUVVFU1RGT1JVTktOT1dOREVWSUNFPTNdPVwiUkVRVUVTVEZPUlVOS05PV05ERVZJQ0VcIixlW2UuQ09OVkVSU0FUSU9OTk9URk9VTkQ9NF09XCJDT05WRVJTQVRJT05OT1RGT1VORFwiLGVbZS5ORVRXT1JLRkFJTFVSRT01XT1cIk5FVFdPUktGQUlMVVJFXCIsZVtlLkRCRVhDRVBUSU9OPTZdPVwiREJFWENFUFRJT05cIixlW2UuUlVOVElNRUVYQ0VQVElPTj03XT1cIlJVTlRJTUVFWENFUFRJT05cIixlW2UuU0hVVFRJTkdET1dOPThdPVwiU0hVVFRJTkdET1dOXCIsZVtlLlNFUlZFUkVSUk9SPTldPVwiU0VSVkVSRVJST1JcIn0oRXx8KEU9e30pKSxmdW5jdGlvbihlKXtlW2UuU1VDQ0VTUz0wXT1cIlNVQ0NFU1NcIixlW2UuRkFJTFVSRT0xXT1cIkZBSUxVUkVcIn0oX3x8KF89e30pKSxmdW5jdGlvbihlKXtlW2UuUkVRVUVTVFNZTkM9MF09XCJSRVFVRVNUU1lOQ1wiLGVbZS5VUERBVEVDT05WRVJTQVRJT049MV09XCJVUERBVEVDT05WRVJTQVRJT05cIixlW2UuQVBQTk9UUlVOTklORz0yXT1cIkFQUE5PVFJVTk5JTkdcIn0oSXx8KEk9e30pKSxmdW5jdGlvbihlKXtlW2UuVU5LTk9XTj0wXT1cIlVOS05PV05cIixlW2UuREVDUllQVD0xXT1cIkRFQ1JZUFRcIixlW2UuUEVSU0lTVD0yXT1cIlBFUlNJU1RcIn0oU3x8KFM9e30pKSxmdW5jdGlvbihlKXtlW2UuUkVBTF9USU1FPTBdPVwiUkVBTF9USU1FXCIsZVtlLlNZTkNfQ09OVkVSU0FUSU9OPTFdPVwiU1lOQ19DT05WRVJTQVRJT05cIixlW2UuUFVTSF9OT1RJRklDQVRJT049Ml09XCJQVVNIX05PVElGSUNBVElPTlwifShifHwoYj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5SRUNFSVZFRF9QVVNIX05PVElGSUNBVElPTj0wXT1cIlJFQ0VJVkVEX1BVU0hfTk9USUZJQ0FUSU9OXCIsZVtlLkVOU1VSRV9DT05WRVJTQVRJT05fQVZBSUxBQkxFPTFdPVwiRU5TVVJFX0NPTlZFUlNBVElPTl9BVkFJTEFCTEVcIixlW2UuRU5TVVJFX1BST19DT05WRVJTQVRJT05fU1lOQ0VEPTJdPVwiRU5TVVJFX1BST19DT05WRVJTQVRJT05fU1lOQ0VEXCIsZVtlLlNZTkNfU1RSRUFLX01FVEFEQVRBPTNdPVwiU1lOQ19TVFJFQUtfTUVUQURBVEFcIn0oVHx8KFQ9e30pKSxmdW5jdGlvbihlKXtlW2UuRkVFRF9TSE9SVENVVFM9MF09XCJGRUVEX1NIT1JUQ1VUU1wifShDfHwoQz17fSkpLGZ1bmN0aW9uKGUpe2VbZS5TVUNDRVNTPTBdPVwiU1VDQ0VTU1wiLGVbZS5OT19DT05ORUNUSU9OPTFdPVwiTk9fQ09OTkVDVElPTlwiLGVbZS5USU1FT1VUPTJdPVwiVElNRU9VVFwiLGVbZS5SRVRSWUFCTEVfRVJST1I9M109XCJSRVRSWUFCTEVfRVJST1JcIixlW2UuUVVFVUVfRk9SX1JFU0VORF9PUkRFUklORz00XT1cIlFVRVVFX0ZPUl9SRVNFTkRfT1JERVJJTkdcIixlW2UuUVVFVUVfRk9SX1JFU0VORF9ORVRXT1JLPTVdPVwiUVVFVUVfRk9SX1JFU0VORF9ORVRXT1JLXCIsZVtlLkNBTkNFTEVEPTZdPVwiQ0FOQ0VMRURcIixlW2UuRkFUQUxfRVJST1I9N109XCJGQVRBTF9FUlJPUlwifShBfHwoQT17fSkpLGZ1bmN0aW9uKGUpe2VbZS5SQVRFX0xJTUlURUQ9MF09XCJSQVRFX0xJTUlURURcIixlW2UuTE9DS0VEPTFdPVwiTE9DS0VEXCIsZVtlLlNFUlZFUl9ERU5JRUQ9Ml09XCJTRVJWRVJfREVOSUVEXCJ9KFJ8fChSPXt9KSksZnVuY3Rpb24oZSl7ZVtlLk5PTkU9MF09XCJOT05FXCIsZVtlLkVFTD0xXT1cIkVFTFwiLGVbZS5GSURFTElVUz0yXT1cIkZJREVMSVVTXCIsZVtlLkNMRUFSVEVYVEtFWT0zXT1cIkNMRUFSVEVYVEtFWVwiLGVbZS5VTkVYUEVDVEVEPTRdPVwiVU5FWFBFQ1RFRFwifShrfHwoaz17fSkpLGZ1bmN0aW9uKGUpe2VbZS5OT1RfRUxJR0lCTEU9MF09XCJOT1RfRUxJR0lCTEVcIixlW2UuUkVDSVBJRU5UX1BLX05PVF9GT1VORD0xXT1cIlJFQ0lQSUVOVF9QS19OT1RfRk9VTkRcIixlW2UuQ1VSUkVOVF9QS19OT1RfRk9VTkQ9Ml09XCJDVVJSRU5UX1BLX05PVF9GT1VORFwiLGVbZS5PVEhFUj0zXT1cIk9USEVSXCJ9KE98fChPPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlNVQ0NFU1M9MF09XCJTVUNDRVNTXCIsZVtlLkZBSUxVUkU9MV09XCJGQUlMVVJFXCIsZVtlLlJFX0VOQ1JZUFQ9Ml09XCJSRV9FTkNSWVBUXCJ9KE58fChOPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkNFS19OT1RfRk9VTkQ9MF09XCJDRUtfTk9UX0ZPVU5EXCIsZVtlLkNVUlJFTlRfUEtfTk9UX0ZPVU5EPTFdPVwiQ1VSUkVOVF9QS19OT1RfRk9VTkRcIixlW2UuTUFMRk9STUVEX01TRz0yXT1cIk1BTEZPUk1FRF9NU0dcIixlW2UuQ0VLX0RFQ1JZUFRfRVJST1I9M109XCJDRUtfREVDUllQVF9FUlJPUlwiLGVbZS5TSEFSRURfS0VZX05PVF9GT1VORD00XT1cIlNIQVJFRF9LRVlfTk9UX0ZPVU5EXCIsZVtlLlBLX0RFQ09NUFJFU1NfRVJST1I9NV09XCJQS19ERUNPTVBSRVNTX0VSUk9SXCIsZVtlLkNPTlRFTlRfREVDUllQVF9FUlJPUj02XT1cIkNPTlRFTlRfREVDUllQVF9FUlJPUlwiLGVbZS5NQUxGT1JNRURfRU5DUl9EQVRBPTddPVwiTUFMRk9STUVEX0VOQ1JfREFUQVwiLGVbZS5PVEhFUj04XT1cIk9USEVSXCIsZVtlLkNPTlZfTk9UX0ZPVU5EPTldPVwiQ09OVl9OT1RfRk9VTkRcIixlW2UuUEFSVElDSVBBTlRfTk9UX0ZPVU5EPTEwXT1cIlBBUlRJQ0lQQU5UX05PVF9GT1VORFwifSh3fHwodz17fSkpLGZ1bmN0aW9uKGUpe2VbZS5VU0VSX0lOSVRJQVRFRD0wXT1cIlVTRVJfSU5JVElBVEVEXCIsZVtlLlVTRVJfUkVUUlk9MV09XCJVU0VSX1JFVFJZXCIsZVtlLlJFVFJZX1BFTkRJTkc9Ml09XCJSRVRSWV9QRU5ESU5HXCIsZVtlLkFVVE9fUkVUUlk9M109XCJBVVRPX1JFVFJZXCJ9KER8fChEPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlVOS05PV049MF09XCJVTktOT1dOXCIsZVtlLlNOQVA9MV09XCJTTkFQXCIsZVtlLkNIQVQ9Ml09XCJDSEFUXCIsZVtlLkVYVEVSTkFMX01FRElBPTNdPVwiRVhURVJOQUxfTUVESUFcIixlW2UuU0hBUkU9NF09XCJTSEFSRVwiLGVbZS5OT1RFPTVdPVwiTk9URVwiLGVbZS5TVElDS0VSPTZdPVwiU1RJQ0tFUlwiLGVbZS5TVEFUVVM9N109XCJTVEFUVVNcIixlW2UuTE9DQVRJT049OF09XCJMT0NBVElPTlwiLGVbZS5TVEFUVVNfU0FWRV9UT19DQU1FUkFfUk9MTD05XT1cIlNUQVRVU19TQVZFX1RPX0NBTUVSQV9ST0xMXCIsZVtlLlNUQVRVU19DT05WRVJTQVRJT05fQ0FQVFVSRV9TQ1JFRU5TSE9UPTEwXT1cIlNUQVRVU19DT05WRVJTQVRJT05fQ0FQVFVSRV9TQ1JFRU5TSE9UXCIsZVtlLlNUQVRVU19DT05WRVJTQVRJT05fQ0FQVFVSRV9SRUNPUkQ9MTFdPVwiU1RBVFVTX0NPTlZFUlNBVElPTl9DQVBUVVJFX1JFQ09SRFwiLGVbZS5TVEFUVVNfQ0FMTF9NSVNTRURfVklERU89MTJdPVwiU1RBVFVTX0NBTExfTUlTU0VEX1ZJREVPXCIsZVtlLlNUQVRVU19DQUxMX01JU1NFRF9BVURJTz0xM109XCJTVEFUVVNfQ0FMTF9NSVNTRURfQVVESU9cIixlW2UuTElWRV9MT0NBVElPTl9TSEFSRT0xNF09XCJMSVZFX0xPQ0FUSU9OX1NIQVJFXCIsZVtlLkNSRUFUSVZFX1RPT0xfSVRFTT0xNV09XCJDUkVBVElWRV9UT09MX0lURU1cIixlW2UuRkFNSUxZX0NFTlRFUl9JTlZJVEU9MTZdPVwiRkFNSUxZX0NFTlRFUl9JTlZJVEVcIixlW2UuRkFNSUxZX0NFTlRFUl9BQ0NFUFQ9MTddPVwiRkFNSUxZX0NFTlRFUl9BQ0NFUFRcIixlW2UuRkFNSUxZX0NFTlRFUl9MRUFWRT0xOF09XCJGQU1JTFlfQ0VOVEVSX0xFQVZFXCIsZVtlLlNUQVRVU19QTFVTX0dJRlQ9MTldPVwiU1RBVFVTX1BMVVNfR0lGVFwifShQfHwoUD17fSkpLGZ1bmN0aW9uKGUpe2VbZS5VTktOT1dOPTBdPVwiVU5LTk9XTlwiLGVbZS5JTUFHRT0xXT1cIklNQUdFXCIsZVtlLlZJREVPPTJdPVwiVklERU9cIixlW2UuR0lGPTNdPVwiR0lGXCJ9KE18fChNPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlVOQVNTSUdORUQ9MF09XCJVTkFTU0lHTkVEXCIsZVtlLk9WRVJMQVk9MV09XCJPVkVSTEFZXCIsZVtlLklNQUdFPTJdPVwiSU1BR0VcIixlW2UuVklERU89M109XCJWSURFT1wiLGVbZS5BU1NFVF9CVU5ETEU9NF09XCJBU1NFVF9CVU5ETEVcIixlW2UuQVVESU89NV09XCJBVURJT1wiLGVbZS5BTklNQVRFRF9JTUFHRT02XT1cIkFOSU1BVEVEX0lNQUdFXCIsZVtlLkZPTlQ9N109XCJGT05UXCIsZVtlLldFQl9WSUVXX0NPTlRFTlQ9OF09XCJXRUJfVklFV19DT05URU5UXCIsZVtlLlZJREVPX05PX0FVRElPPTldPVwiVklERU9fTk9fQVVESU9cIn0oTHx8KEw9e30pKSxmdW5jdGlvbihlKXtlW2UuVU5LTk9XTj0wXT1cIlVOS05PV05cIixlW2UuTEVWRUwxPTFdPVwiTEVWRUwxXCIsZVtlLkxFVkVMMj0yXT1cIkxFVkVMMlwiLGVbZS5MRVZFTDM9M109XCJMRVZFTDNcIixlW2UuTEVWRUw0PTRdPVwiTEVWRUw0XCIsZVtlLkxFVkVMNT01XT1cIkxFVkVMNVwiLGVbZS5MRVZFTDY9Nl09XCJMRVZFTDZcIixlW2UuTEVWRUw3PTddPVwiTEVWRUw3XCIsZVtlLkxFVkVMTUFYPThdPVwiTEVWRUxNQVhcIixlW2UuTEVWRUw0NT05XT1cIkxFVkVMNDVcIixlW2UuTEVWRUwyMT0xMF09XCJMRVZFTDIxXCIsZVtlLkxFVkVMMjI9MTFdPVwiTEVWRUwyMlwiLGVbZS5MRVZFTDI1PTEyXT1cIkxFVkVMMjVcIixlW2UuTEVWRUwzMj0xM109XCJMRVZFTDMyXCIsZVtlLkxFVkVMMzU9MTRdPVwiTEVWRUwzNVwiLGVbZS5MRVZFTDI3PTE1XT1cIkxFVkVMMjdcIixlW2UuTEVWRUw2NT0xNl09XCJMRVZFTDY1XCJ9KFV8fChVPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlVOS05PV049MF09XCJVTktOT1dOXCIsZVtlLkZBU1RTVEFSVERJU0FCTEVEPTFdPVwiRkFTVFNUQVJURElTQUJMRURcIixlW2UuRkFTVFNUQVJURU5BQkxFRD0yXT1cIkZBU1RTVEFSVEVOQUJMRURcIixlW2UuSFRUUFNUUkVBTUlOR0RBU0g9M109XCJIVFRQU1RSRUFNSU5HREFTSFwiLGVbZS5IVFRQU1RSRUFNSU5HSExTPTRdPVwiSFRUUFNUUkVBTUlOR0hMU1wifSh4fHwoeD17fSkpLGZ1bmN0aW9uKGUpe2VbZS5VTlNFVD0wXT1cIlVOU0VUXCIsZVtlLlBSRVNFTlQ9MV09XCJQUkVTRU5UXCIsZVtlLkRFTEVURURCWVBPU1RFUj0yXT1cIkRFTEVURURCWVBPU1RFUlwifShGfHwoRj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5QUk9ISUJJVEVEPTBdPVwiUFJPSElCSVRFRFwiLGVbZS5MSUZFVElNRT0xXT1cIkxJRkVUSU1FXCIsZVtlLlZJRVdfU0VTU0lPTj0yXT1cIlZJRVdfU0VTU0lPTlwifShCfHwoQj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5URVhUPTBdPVwiVEVYVFwiLGVbZS5TVElDS0VSPTFdPVwiU1RJQ0tFUlwiLGVbZS5DVVNUT01fU1RJQ0tFUj0yXT1cIkNVU1RPTV9TVElDS0VSXCIsZVtlLlNOQVA9M109XCJTTkFQXCIsZVtlLkFVRElPX05PVEU9NF09XCJBVURJT19OT1RFXCIsZVtlLk1FRElBPTVdPVwiTUVESUFcIixlW2UuQkFUQ0hFRF9NRURJQT02XT1cIkJBVENIRURfTUVESUFcIixlW2UuTUlTU0VEX0FVRElPX0NBTEw9N109XCJNSVNTRURfQVVESU9fQ0FMTFwiLGVbZS5NSVNTRURfVklERU9fQ0FMTD04XT1cIk1JU1NFRF9WSURFT19DQUxMXCIsZVtlLkpPSU5FRF9DQUxMPTldPVwiSk9JTkVEX0NBTExcIixlW2UuTEVGVF9DQUxMPTEwXT1cIkxFRlRfQ0FMTFwiLGVbZS5TTkFQQ0hBVFRFUj0xMV09XCJTTkFQQ0hBVFRFUlwiLGVbZS5MT0NBVElPTl9TSEFSRT0xMl09XCJMT0NBVElPTl9TSEFSRVwiLGVbZS5MT0NBVElPTl9SRVFVRVNUPTEzXT1cIkxPQ0FUSU9OX1JFUVVFU1RcIixlW2UuU0NSRUVOU0hPVD0xNF09XCJTQ1JFRU5TSE9UXCIsZVtlLlNDUkVFTl9SRUNPUkRJTkc9MTVdPVwiU0NSRUVOX1JFQ09SRElOR1wiLGVbZS5HQU1FX0NMT1NFRD0xNl09XCJHQU1FX0NMT1NFRFwiLGVbZS5TVE9SWV9TSEFSRT0xN109XCJTVE9SWV9TSEFSRVwiLGVbZS5NQVBfRFJPUF9TSEFSRT0xOF09XCJNQVBfRFJPUF9TSEFSRVwiLGVbZS5NQVBfU1RPUllfU0hBUkU9MTldPVwiTUFQX1NUT1JZX1NIQVJFXCIsZVtlLk1BUF9TVE9SWV9TTkFQX1NIQVJFPTIwXT1cIk1BUF9TVE9SWV9TTkFQX1NIQVJFXCIsZVtlLk1BUF9IRUFUX1NOQVBfU0hBUkU9MjFdPVwiTUFQX0hFQVRfU05BUF9TSEFSRVwiLGVbZS5NQVBfU0NSRUVOU0hPVF9TSEFSRT0yMl09XCJNQVBfU0NSRUVOU0hPVF9TSEFSRVwiLGVbZS5NRU1PUklFU19TVE9SWT0yM109XCJNRU1PUklFU19TVE9SWVwiLGVbZS5TRUFSQ0hfU1RPUllfU0hBUkU9MjRdPVwiU0VBUkNIX1NUT1JZX1NIQVJFXCIsZVtlLlNFQVJDSF9TVE9SWV9TTkFQX1NIQVJFPTI1XT1cIlNFQVJDSF9TVE9SWV9TTkFQX1NIQVJFXCIsZVtlLkRJU0NPVkVSX1NIQVJFPTI2XT1cIkRJU0NPVkVSX1NIQVJFXCIsZVtlLlNIQVpBTV9TSEFSRT0yN109XCJTSEFaQU1fU0hBUkVcIixlW2UuU0FWRV9UT19DQU1FUkFfUk9MTD0yOF09XCJTQVZFX1RPX0NBTUVSQV9ST0xMXCIsZVtlLkdBTUVfU0NPUkVfU0hBUkU9MjldPVwiR0FNRV9TQ09SRV9TSEFSRVwiLGVbZS5TTkFQX1BST19QUk9GSUxFX1NIQVJFPTMwXT1cIlNOQVBfUFJPX1BST0ZJTEVfU0hBUkVcIixlW2UuU05BUF9QUk9fU05BUF9TSEFSRT0zMV09XCJTTkFQX1BST19TTkFQX1NIQVJFXCIsZVtlLkNBTlZBU19BUFBfU0hBUkU9MzJdPVwiQ0FOVkFTX0FQUF9TSEFSRVwiLGVbZS5BRF9TSEFSRT0zM109XCJBRF9TSEFSRVwiLGVbZS5TVE9SWV9SRVBMWT0zNF09XCJTVE9SWV9SRVBMWVwiLGVbZS5TUE9UTElHSFRfU1RPUllfU0hBUkU9MzVdPVwiU1BPVExJR0hUX1NUT1JZX1NIQVJFXCIsZVtlLkNBTUVPPTM2XT1cIkNBTUVPXCIsZVtlLk1FTU9KST0zN109XCJNRU1PSklcIixlW2UuQklUTU9KSV9PVVRGSVRfU0hBUkU9MzhdPVwiQklUTU9KSV9PVVRGSVRfU0hBUkVcIixlW2UuTElWRV9MT0NBVElPTl9TSEFSRT0zOV09XCJMSVZFX0xPQ0FUSU9OX1NIQVJFXCIsZVtlLkNSRUFUSVZFX1RPT0xfSVRFTT00MF09XCJDUkVBVElWRV9UT09MX0lURU1cIixlW2UuU05BUF9LSVRfSU5WSVRFX1NIQVJFPTQxXT1cIlNOQVBfS0lUX0lOVklURV9TSEFSRVwiLGVbZS5RVU9URV9SRVBMWV9TSEFSRT00Ml09XCJRVU9URV9SRVBMWV9TSEFSRVwiLGVbZS5CTE9PUFNfU1RPUllfU0hBUkU9NDNdPVwiQkxPT1BTX1NUT1JZX1NIQVJFXCIsZVtlLlNOQVBfUFJPX1NBVkVEX1NUT1JZX1NIQVJFPTQ0XT1cIlNOQVBfUFJPX1NBVkVEX1NUT1JZX1NIQVJFXCIsZVtlLlBMQUNFX1BST0ZJTEVfU0hBUkU9NDVdPVwiUExBQ0VfUFJPRklMRV9TSEFSRVwiLGVbZS5QTEFDRV9TVE9SWV9TSEFSRT00Nl09XCJQTEFDRV9TVE9SWV9TSEFSRVwiLGVbZS5TQVZFRF9TVE9SWV9TSEFSRT00N109XCJTQVZFRF9TVE9SWV9TSEFSRVwifShWfHwoVj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5OT19NRURJQT0wXT1cIk5PX01FRElBXCIsZVtlLklNQUdFPTFdPVwiSU1BR0VcIixlW2UuVklERU89Ml09XCJWSURFT1wiLGVbZS5WSURFT19OT19TT1VORD0zXT1cIlZJREVPX05PX1NPVU5EXCIsZVtlLkdJRj00XT1cIkdJRlwiLGVbZS5ERVJJVkVEX0ZST01fTUVTU0FHRV9UWVBFPTVdPVwiREVSSVZFRF9GUk9NX01FU1NBR0VfVFlQRVwiLGVbZS5SRUFDVElPTj02XT1cIlJFQUNUSU9OXCJ9KEd8fChHPXt9KSksZnVuY3Rpb24oZSl7ZVtlLk5PTkU9MF09XCJOT05FXCIsZVtlLlJFQUNUSU9OU19ERVRBSUxfVklFVz0xXT1cIlJFQUNUSU9OU19ERVRBSUxfVklFV1wiLGVbZS5BQ1RJT05fTUVOVT0yXT1cIkFDVElPTl9NRU5VXCJ9KEh8fChIPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlBSRVBBUklORz0wXT1cIlBSRVBBUklOR1wiLGVbZS5TRU5ESU5HPTFdPVwiU0VORElOR1wiLGVbZS5DT01NSVRURUQ9Ml09XCJDT01NSVRURURcIixlW2UuRkFJTEVEPTNdPVwiRkFJTEVEXCIsZVtlLkNBTkNFTElORz00XT1cIkNBTkNFTElOR1wifShXfHwoVz17fSkpLGZ1bmN0aW9uKGUpe2VbZS5VTktOT1dOPTBdPVwiVU5LTk9XTlwiLGVbZS5SRUFEPTFdPVwiUkVBRFwiLGVbZS5SRUxFQVNFPTJdPVwiUkVMRUFTRVwiLGVbZS5TQVZFPTNdPVwiU0FWRVwiLGVbZS5VTlNBVkU9NF09XCJVTlNBVkVcIixlW2UuRVJBU0U9NV09XCJFUkFTRVwiLGVbZS5TQ1JFRU5TSE9UPTZdPVwiU0NSRUVOU0hPVFwiLGVbZS5TQ1JFRU5fUkVDT1JEPTddPVwiU0NSRUVOX1JFQ09SRFwiLGVbZS5SRVBMQVk9OF09XCJSRVBMQVlcIixlW2UuUkVBQ1RJT049OV09XCJSRUFDVElPTlwiLGVbZS5SRU1PVkVSRUFDVElPTj0xMF09XCJSRU1PVkVSRUFDVElPTlwiLGVbZS5SRVZPS0VUUkFOU0NSSVBUSU9OPTExXT1cIlJFVk9LRVRSQU5TQ1JJUFRJT05cIixlW2UuQUxMT1dUUkFOU0NSSVBUSU9OPTEyXT1cIkFMTE9XVFJBTlNDUklQVElPTlwiLGVbZS5FUkFTRVNBVkVEU1RPUllNRURJQT0xM109XCJFUkFTRVNBVkVEU1RPUllNRURJQVwifShqfHwoaj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5TVUNDRVNTPTBdPVwiU1VDQ0VTU1wiLGVbZS5GQUlMVVJFPTFdPVwiRkFJTFVSRVwifShafHwoWj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5OT1RET1dOTE9BREVEPTBdPVwiTk9URE9XTkxPQURFRFwiLGVbZS5ET1dOTE9BRElORz0xXT1cIkRPV05MT0FESU5HXCIsZVtlLkRPV05MT0FERkFJTEVEPTJdPVwiRE9XTkxPQURGQUlMRURcIixlW2UuUExBWUFCTEU9M109XCJQTEFZQUJMRVwiLGVbZS5WSUVXRURSRVBMQVlBQkxFPTRdPVwiVklFV0VEUkVQTEFZQUJMRVwiLGVbZS5QTEFZSU5HPTVdPVwiUExBWUlOR1wiLGVbZS5WSUVXRUROT1RSRVBMQVlBQkxFPTZdPVwiVklFV0VETk9UUkVQTEFZQUJMRVwifSh6fHwoej17fSkpLGZ1bmN0aW9uKGUpe2VbZS5VTktOT1dOPTBdPVwiVU5LTk9XTlwiLGVbZS5BVkFJTEFCTEU9MV09XCJBVkFJTEFCTEVcIixlW2UuREVMRVRFRD0yXT1cIkRFTEVURURcIixlW2UuSk9JTkVEQUZURVJPUklHSU5BTE1FU1NBR0VTRU5UPTNdPVwiSk9JTkVEQUZURVJPUklHSU5BTE1FU1NBR0VTRU5UXCIsZVtlLlVOQVZBSUxBQkxFPTRdPVwiVU5BVkFJTEFCTEVcIixlW2UuU1RPUllNRURJQURFTEVURURCWVBPU1RFUj01XT1cIlNUT1JZTUVESUFERUxFVEVEQllQT1NURVJcIn0oS3x8KEs9e30pKSxmdW5jdGlvbihlKXtlW2UuVklFV0lOR19JTklUSUFURUQ9MF09XCJWSUVXSU5HX0lOSVRJQVRFRFwiLGVbZS5WSUVXSU5HX0ZJTklTSEVEPTFdPVwiVklFV0lOR19GSU5JU0hFRFwiLGVbZS5SRVBMQVlfR0VTVFVSRV9QRVJGT1JNRUQ9Ml09XCJSRVBMQVlfR0VTVFVSRV9QRVJGT1JNRURcIixlW2UuTUFSS19BU19JTlZBTElEPTNdPVwiTUFSS19BU19JTlZBTElEXCJ9KFl8fChZPXt9KSksZnVuY3Rpb24oZSl7ZVtlLklOSVRJQVRFRD0wXT1cIklOSVRJQVRFRFwiLGVbZS5TVUNDRUVERUQ9MV09XCJTVUNDRUVERURcIixlW2UuRkFJTEVEPTJdPVwiRkFJTEVEXCJ9KHF8fChxPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlJFTU9WRURfRlJPTV9CQUNLRU5EPTBdPVwiUkVNT1ZFRF9GUk9NX0JBQ0tFTkRcIixlW2UuUkVNT1ZFRF9MT0NBTF9HUk9VUD0xXT1cIlJFTU9WRURfTE9DQUxfR1JPVVBcIixlW2UuQ0xFQVJfQ09OVkVSU0FUSU9OPTJdPVwiQ0xFQVJfQ09OVkVSU0FUSU9OXCIsZVtlLkxFQVZFX0NPTlZFUlNBVElPTj0zXT1cIkxFQVZFX0NPTlZFUlNBVElPTlwiLGVbZS5GUklFTkRfTElOS19SRU1PVkVEPTRdPVwiRlJJRU5EX0xJTktfUkVNT1ZFRFwifShYfHwoWD17fSkpLGZ1bmN0aW9uKGUpe2VbZS5BTExfTUVTU0FHRVM9MF09XCJBTExfTUVTU0FHRVNcIixlW2UuU0lMRU5UPTFdPVwiU0lMRU5UXCIsZVtlLk1FTlRJT05fT05MWT0yXT1cIk1FTlRJT05fT05MWVwifShRfHwoUT17fSkpLGZ1bmN0aW9uKGUpe2VbZS5VTktOT1dOPTBdPVwiVU5LTk9XTlwiLGVbZS5DUkVBVEVEPTFdPVwiQ1JFQVRFRFwiLGVbZS5NRU1CRVJfQURERUQ9Ml09XCJNRU1CRVJfQURERURcIixlW2UuTkFNRV9DSEFOR0VEPTNdPVwiTkFNRV9DSEFOR0VEXCIsZVtlLkpPSU5FRF9GUk9NX0NPTlRBQ1RTPTRdPVwiSk9JTkVEX0ZST01fQ09OVEFDVFNcIixlW2UuSU5fTVlfQ09OVEFDVFM9NV09XCJJTl9NWV9DT05UQUNUU1wiLGVbZS5NRU1CRVJfS0lDS0VEPTZdPVwiTUVNQkVSX0tJQ0tFRFwiLGVbZS5TVFJFQUtfUkVTVE9SRT03XT1cIlNUUkVBS19SRVNUT1JFXCJ9KEp8fChKPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlVOS05PV049MF09XCJVTktOT1dOXCIsZVtlLk1JU1NFRD0xXT1cIk1JU1NFRFwiLGVbZS5DQUxMRUQ9Ml09XCJDQUxMRURcIn0oJHx8KCQ9e30pKSxmdW5jdGlvbihlKXtlW2UuVU5LTk9XTj0wXT1cIlVOS05PV05cIixlW2UuTk9ORT0xXT1cIk5PTkVcIixlW2UuU0NSRUVOU0hPVFRFRD0yXT1cIlNDUkVFTlNIT1RURURcIixlW2UuUkVDT1JERUQ9M109XCJSRUNPUkRFRFwiLGVbZS5SRVBMQVlFRD00XT1cIlJFUExBWUVEXCIsZVtlLlNFTkRJTkc9NV09XCJTRU5ESU5HXCIsZVtlLldBSVRJTkdfVE9fU0VORD02XT1cIldBSVRJTkdfVE9fU0VORFwiLGVbZS5TRU5EX0ZBSUxFRD03XT1cIlNFTkRfRkFJTEVEXCIsZVtlLlBMQVlJTkc9OF09XCJQTEFZSU5HXCIsZVtlLlRBUF9UT19ET1dOTE9BRD05XT1cIlRBUF9UT19ET1dOTE9BRFwiLGVbZS5ET1dOTE9BRElORz0xMF09XCJET1dOTE9BRElOR1wiLGVbZS5ET1dOTE9BRF9GQUlMRUQ9MTFdPVwiRE9XTkxPQURfRkFJTEVEXCIsZVtlLlNBVkVEPTEyXT1cIlNBVkVEXCIsZVtlLlJFQUNUSU9OPTEzXT1cIlJFQUNUSU9OXCIsZVtlLlJFTU9WRURSRUFDVElPTj0xNF09XCJSRU1PVkVEUkVBQ1RJT05cIixlW2UuSU5NWUNPTlRBQ1RTPTE1XT1cIklOTVlDT05UQUNUU1wifShlZXx8KGVlPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlVOS05PV049MF09XCJVTktOT1dOXCIsZVtlLk5PTkU9MV09XCJOT05FXCIsZVtlLlNDUkVFTlNIT1RURUQ9Ml09XCJTQ1JFRU5TSE9UVEVEXCIsZVtlLlJFQ09SREVEPTNdPVwiUkVDT1JERURcIixlW2UuU0FWRUQ9NF09XCJTQVZFRFwiLGVbZS5TQVZFRF9UT19DQU1FUkFfUk9MTD01XT1cIlNBVkVEX1RPX0NBTUVSQV9ST0xMXCIsZVtlLkVSQVNFRD02XT1cIkVSQVNFRFwiLGVbZS5TRU5ESU5HPTddPVwiU0VORElOR1wiLGVbZS5XQUlUSU5HX1RPX1NFTkQ9OF09XCJXQUlUSU5HX1RPX1NFTkRcIixlW2UuRkFJTEVEPTldPVwiRkFJTEVEXCIsZVtlLk1FTlRJT05FRD0xMF09XCJNRU5USU9ORURcIixlW2UuUkVBQ1RJT049MTFdPVwiUkVBQ1RJT05cIixlW2UuUkVNT1ZFRFJFQUNUSU9OPTEyXT1cIlJFTU9WRURSRUFDVElPTlwiLGVbZS5SRVBMSUVEPTEzXT1cIlJFUExJRURcIixlW2UuR0lGVEVEPTE0XT1cIkdJRlRFRFwiLGVbZS5SRUNFSVZFRFZPSUNFTk9URT0xNV09XCJSRUNFSVZFRFZPSUNFTk9URVwiLGVbZS5JTk1ZQ09OVEFDVFM9MTZdPVwiSU5NWUNPTlRBQ1RTXCIsZVtlLlNUT1JZU0FWRURUT0NIQVQ9MTddPVwiU1RPUllTQVZFRFRPQ0hBVFwifSh0ZXx8KHRlPXt9KSksZnVuY3Rpb24oZSl7ZVtlLk9ORU9OT05FPTBdPVwiT05FT05PTkVcIixlW2UuVVNFUkNSRUFURURHUk9VUD0xXT1cIlVTRVJDUkVBVEVER1JPVVBcIn0obmV8fChuZT17fSkpLGZ1bmN0aW9uKGUpe2VbZS5URU1QT1JBUllDT05WRVJTQVRJT049MF09XCJURU1QT1JBUllDT05WRVJTQVRJT05cIixlW2UuU1VHR0VTVEVEQ09OVkVSU0FUSU9OPTFdPVwiU1VHR0VTVEVEQ09OVkVSU0FUSU9OXCIsZVtlLkJPVENPTlZFUlNBVElPTj0yXT1cIkJPVENPTlZFUlNBVElPTlwifShyZXx8KHJlPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlVOTE9DS0VEPTBdPVwiVU5MT0NLRURcIixlW2UuTE9DS0VEPTFdPVwiTE9DS0VEXCIsZVtlLkxPQ0tFREFOREFDS0VEPTJdPVwiTE9DS0VEQU5EQUNLRURcIn0oaWV8fChpZT17fSkpLGZ1bmN0aW9uKGUpe2VbZS5GRUVEPTBdPVwiRkVFRFwiLGVbZS5TRU5EVE89MV09XCJTRU5EVE9cIixlW2UuR1JPVVA9Ml09XCJHUk9VUFwiLGVbZS5RVUlDS0NIQVQ9M109XCJRVUlDS0NIQVRcIixlW2UuTUFQUz00XT1cIk1BUFNcIixlW2UuR1JPVVBJTlZJVEVTVElDS0VSPTVdPVwiR1JPVVBJTlZJVEVTVElDS0VSXCIsZVtlLkdST1VQSU5WSVRFTElOSz02XT1cIkdST1VQSU5WSVRFTElOS1wiLGVbZS5PTkVPTk9ORT03XT1cIk9ORU9OT05FXCIsZVtlLkNPTlRFWFQ9OF09XCJDT05URVhUXCJ9KG9lfHwob2U9e30pKSxmdW5jdGlvbihlKXtlW2UuTUVTU0FHRVNfVVBfVE9fREFURT0wXT1cIk1FU1NBR0VTX1VQX1RPX0RBVEVcIixlW2UuT0xEX01FU1NBR0VTPTFdPVwiT0xEX01FU1NBR0VTXCIsZVtlLk5PX01FU1NBR0VTX1NZTkNFRD0yXT1cIk5PX01FU1NBR0VTX1NZTkNFRFwifShhZXx8KGFlPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlBSRVNFTlRfRlVMTF9TQ1JFRU5fUExBWUVSPTBdPVwiUFJFU0VOVF9GVUxMX1NDUkVFTl9QTEFZRVJcIixlW2UuRU5URVJfQ09OVkVSU0FUSU9OPTFdPVwiRU5URVJfQ09OVkVSU0FUSU9OXCIsZVtlLldBSVRfRk9SX01FU1NBR0VfU1lOQz0yXT1cIldBSVRfRk9SX01FU1NBR0VfU1lOQ1wiLGVbZS5UQVBfVE9fRE9XTkxPQURfU05BUD0zXT1cIlRBUF9UT19ET1dOTE9BRF9TTkFQXCIsZVtlLlRBUF9UT19SRVRSWV9TRU5ESU5HPTRdPVwiVEFQX1RPX1JFVFJZX1NFTkRJTkdcIn0oc2V8fChzZT17fSkpLGZ1bmN0aW9uKGUpe2VbZS5TSE9XX0NPTlZFUlNBVElPTl9BQ1RJT05fTUVOVT0wXT1cIlNIT1dfQ09OVkVSU0FUSU9OX0FDVElPTl9NRU5VXCIsZVtlLlNIT1dfTUVTU0FHRV9BQ1RJT05fTUVOVT0xXT1cIlNIT1dfTUVTU0FHRV9BQ1RJT05fTUVOVVwiLGVbZS5SRVFVRVNUX1NOQVBfUkVQTEFZPTJdPVwiUkVRVUVTVF9TTkFQX1JFUExBWVwifShjZXx8KGNlPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkhJR0hfV0FURVJfTUFSSz0wXT1cIkhJR0hfV0FURVJfTUFSS1wiLGVbZS5QRVJfTUVTU0FHRT0xXT1cIlBFUl9NRVNTQUdFXCIsZVtlLlNOQVA9Ml09XCJTTkFQXCIsZVtlLlVOS05PV049M109XCJVTktOT1dOXCJ9KGxlfHwobGU9e30pKSxmdW5jdGlvbihlKXtlW2UuQ0hBVF9TRVRUSU5HUz0wXT1cIkNIQVRfU0VUVElOR1NcIixlW2UuVE9HR0xFPTFdPVwiVE9HR0xFXCJ9KHVlfHwodWU9e30pKSxmdW5jdGlvbihlKXtlW2UuSU5URVJOQUxFUlJPUj0wXT1cIklOVEVSTkFMRVJST1JcIixlW2UuVU5BVVRIT1JJWkVEPTFdPVwiVU5BVVRIT1JJWkVEXCIsZVtlLlRJTUVPVVQ9Ml09XCJUSU1FT1VUXCIsZVtlLlJFVFJZRkFJTFVSRT0zXT1cIlJFVFJZRkFJTFVSRVwiLGVbZS5JTlZBTElEPTRdPVwiSU5WQUxJRFwiLGVbZS5VTkFWQUlMQUJMRT01XT1cIlVOQVZBSUxBQkxFXCIsZVtlLkRVUExJQ0FURVJFUVVFU1Q9Nl09XCJEVVBMSUNBVEVSRVFVRVNUXCIsZVtlLk5PVEZPVU5EPTddPVwiTk9URk9VTkRcIixlW2UuU1RPUkFHRUZVTEw9OF09XCJTVE9SQUdFRlVMTFwiLGVbZS5VTkVYUEVDVEVEREFUQUJBU0VFUlJPUj05XT1cIlVORVhQRUNURUREQVRBQkFTRUVSUk9SXCIsZVtlLkNPUlJVUFRFRERBVEFCQVNFRVJST1I9MTBdPVwiQ09SUlVQVEVEREFUQUJBU0VFUlJPUlwiLGVbZS5DQU5DRUxFRD0xMV09XCJDQU5DRUxFRFwiLGVbZS5TRU5EQ0FOQ0VMRUQ9MTJdPVwiU0VORENBTkNFTEVEXCJ9KGRlfHwoZGU9e30pKSxmdW5jdGlvbihlKXtlW2UuUkVRVUVTVF9DT05TVFJVQ1RJT05fVElNRV9NUz0wXT1cIlJFUVVFU1RfQ09OU1RSVUNUSU9OX1RJTUVfTVNcIixlW2UuRkVUQ0hfQVVUSF9UT0tFTl9USU1FX01TPTFdPVwiRkVUQ0hfQVVUSF9UT0tFTl9USU1FX01TXCIsZVtlLkVOUVVFVUVfT05fSU5URVJOQUxfUVVFVUVfVElNRV9NUz0yXT1cIkVOUVVFVUVfT05fSU5URVJOQUxfUVVFVUVfVElNRV9NU1wiLGVbZS5XSVJFX1RJTUVfTVM9M109XCJXSVJFX1RJTUVfTVNcIixlW2UuSEFORExFX1JFU1VMVFNfVElNRV9NUz00XT1cIkhBTkRMRV9SRVNVTFRTX1RJTUVfTVNcIixlW2UuUkVQT1JUX1RPX1BMQVRGT1JNX1RJTUVfTVM9NV09XCJSRVBPUlRfVE9fUExBVEZPUk1fVElNRV9NU1wiLGVbZS5TWU5DRURfQ09OVkVSU0FUSU9OU19TVUNDRVNTX0NPVU5UPTZdPVwiU1lOQ0VEX0NPTlZFUlNBVElPTlNfU1VDQ0VTU19DT1VOVFwiLGVbZS5TWU5DRURfQ09OVkVSU0FUSU9OU19GQUlMRURfQ09VTlQ9N109XCJTWU5DRURfQ09OVkVSU0FUSU9OU19GQUlMRURfQ09VTlRcIixlW2UuVVBEQVRFRF9GRUVEX0VOVFJJRVNfQ09VTlQ9OF09XCJVUERBVEVEX0ZFRURfRU5UUklFU19DT1VOVFwiLGVbZS5FRUxfREVDUllQVElPTl9MQVRFTkNZX1VTPTldPVwiRUVMX0RFQ1JZUFRJT05fTEFURU5DWV9VU1wiLGVbZS5TWU5DX0VFTF9NRVNTQUdFX0NPVU5UPTEwXT1cIlNZTkNfRUVMX01FU1NBR0VfQ09VTlRcIixlW2UuU1lOQ19NRVNTQUdFX0NPVU5UPTExXT1cIlNZTkNfTUVTU0FHRV9DT1VOVFwifShmZXx8KGZlPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlRJVl9UUkFOU0FDVElPTl9JRF9CTElaWkFSRD0wXT1cIlRJVl9UUkFOU0FDVElPTl9JRF9CTElaWkFSRFwifShwZXx8KHBlPXt9KSksZnVuY3Rpb24oZSl7ZVtlLk1FU1NBR0U9MF09XCJNRVNTQUdFXCIsZVtlLkNPTlZFUlNBVElPTl9VUERBVEU9MV09XCJDT05WRVJTQVRJT05fVVBEQVRFXCIsZVtlLk1FU1NBR0VfVVBEQVRFPTJdPVwiTUVTU0FHRV9VUERBVEVcIn0obWV8fChtZT17fSkpLGZ1bmN0aW9uKGUpe2VbZS5TVUNDRVNTPTBdPVwiU1VDQ0VTU1wiLGVbZS5GQUlMRURfUkVUUklBQkxFPTFdPVwiRkFJTEVEX1JFVFJJQUJMRVwiLGVbZS5GQUlMRURfTk9UX1JFVFJJQUJMRT0yXT1cIkZBSUxFRF9OT1RfUkVUUklBQkxFXCIsZVtlLkxPU1RfQ09OTkVDVElPTj0zXT1cIkxPU1RfQ09OTkVDVElPTlwiLGVbZS5FWFBJUkVEPTRdPVwiRVhQSVJFRFwiLGVbZS5DQU5DRUxFRD01XT1cIkNBTkNFTEVEXCJ9KGhlfHwoaGU9e30pKSxmdW5jdGlvbihlKXtlW2UuVU5LTk9XTj0wXT1cIlVOS05PV05cIixlW2UuTVVUVUFMX0ZSSUVORD0xXT1cIk1VVFVBTF9GUklFTkRcIixlW2UuRk9MTE9XRVI9Ml09XCJGT0xMT1dFUlwiLGVbZS5QRU5ESU5HPTNdPVwiUEVORElOR1wiLGVbZS5CTE9DS0VEPTRdPVwiQkxPQ0tFRFwiLGVbZS5JTkNPTUlORz01XT1cIklOQ09NSU5HXCIsZVtlLkRFTEVURUQ9Nl09XCJERUxFVEVEXCJ9KHZlfHwodmU9e30pKSxmdW5jdGlvbihlKXtlW2UuUElOTkVEPTBdPVwiUElOTkVEXCIsZVtlLlVOUElOTkVEPTFdPVwiVU5QSU5ORURcIn0oZ2V8fChnZT17fSkpLGZ1bmN0aW9uKGUpe2VbZS5TRVRXQUxMUEFQRVI9MF09XCJTRVRXQUxMUEFQRVJcIixlW2UuUkVNT1ZFV0FMTFBBUEVSPTFdPVwiUkVNT1ZFV0FMTFBBUEVSXCJ9KHllfHwoeWU9e30pKSxmdW5jdGlvbihlKXtlW2UuTk9ORT0wXT1cIk5PTkVcIixlW2UuR0VORVJBVElWRT0xXT1cIkdFTkVSQVRJVkVcIn0oRWV8fChFZT17fSkpfSw1MzU1MTooZSx0LG4pPT57dmFyIHIsaSxvLGEscyxjLGwsdSxkLGYscDtuLmQodCx7TkM6KCk9PmR9KSxmdW5jdGlvbihlKXtlW2UuTEFSR0VfTUVESUE9MF09XCJMQVJHRV9NRURJQVwiLGVbZS5TTUFMTF9NRURJQT0xXT1cIlNNQUxMX01FRElBXCIsZVtlLkFOQUxZVElDPTJdPVwiQU5BTFlUSUNcIixlW2UuQU5BTFlUSUNTX0JBQ0tHUk9VTkQ9M109XCJBTkFMWVRJQ1NfQkFDS0dST1VORFwiLGVbZS5BTkFMWVRJQ19WMj00XT1cIkFOQUxZVElDX1YyXCIsZVtlLkJBQ0tHUk9VTkRfVVBMT0FEPTVdPVwiQkFDS0dST1VORF9VUExPQURcIixlW2UuRE9XTkxPQUQ9Nl09XCJET1dOTE9BRFwiLGVbZS5NRVRBREFUQT03XT1cIk1FVEFEQVRBXCIsZVtlLlNUUkVBTUlORz04XT1cIlNUUkVBTUlOR1wiLGVbZS5VUExPQUQ9OV09XCJVUExPQURcIn0ocnx8KHI9e30pKSxmdW5jdGlvbihlKXtlW2UuR0VUPTBdPVwiR0VUXCIsZVtlLlBPU1Q9MV09XCJQT1NUXCIsZVtlLkRFTEVURT0yXT1cIkRFTEVURVwiLGVbZS5QVVQ9M109XCJQVVRcIixlW2UuSEVBRD00XT1cIkhFQURcIn0oaXx8KGk9e30pKSxmdW5jdGlvbihlKXtlLkVSUk9SX09QRU5fRklMRV9GT1JfRE9XTkxPQUQ9MWUzLGUuRVJST1JfV1JJVEVfRklMRV9GT1JfRE9XTkxPQUQ9MTAwMSxlLkVSUk9SX0NBTkNFTEVEPTEwMDIsZS5FUlJPUl9USU1FT1VUPTEwMDMsZS5FUlJPUl9BV1NfU0VSVkVSX1VQTE9BRF9USU1FT1VUPTEwMDQsZS5FUlJPUl9GQUlMRURfUkVESVJFQ1Q9MTAwNSxlLkVSUk9SX1VQTE9BRF9TRVJWRVJfVFJBTlNJRU5UX0VSUk9SPTEwMDYsZS5FUlJPUl9TTkFQX1RPS0VOX0ZFVENIX0VSUk9SPTEwMDcsZS5FUlJPUl9SVFRfVElNRU9VVD0xMTAwLGUuRVJST1JfSU5URVJOQUxfUEFVU0U9MTIwMH0ob3x8KG89e30pKSxmdW5jdGlvbihlKXtlW2UuRklMRT0wXT1cIkZJTEVcIixlW2UuTUVNT1JZPTFdPVwiTUVNT1JZXCIsZVtlLlNUUkVBTUlORz0yXT1cIlNUUkVBTUlOR1wifShhfHwoYT17fSkpLGZ1bmN0aW9uKGUpe2VbZS5CQUNLR1JPVU5EUFJFRkVUQ0g9MF09XCJCQUNLR1JPVU5EUFJFRkVUQ0hcIixlW2UuRk9SRUdST1VORFBSRUZFVENIPTFdPVwiRk9SRUdST1VORFBSRUZFVENIXCIsZVtlLlBSRUZFVENIPTJdPVwiUFJFRkVUQ0hcIixlW2UuVVNFUkJMT0NLSU5HPTNdPVwiVVNFUkJMT0NLSU5HXCJ9KHN8fChzPXt9KSksZnVuY3Rpb24oZSl7ZVtlLldJRkk9MF09XCJXSUZJXCIsZVtlLldXQU49MV09XCJXV0FOXCIsZVtlLlVOUkVBQ0hBQkxFPTJdPVwiVU5SRUFDSEFCTEVcIixlW2UuVU5LTk9XTj0zXT1cIlVOS05PV05cIn0oY3x8KGM9e30pKSxmdW5jdGlvbihlKXtlW2UuVU5SRUNPR05JWkVEPTBdPVwiVU5SRUNPR05JWkVEXCIsZVtlLkZPUkVHUk9VTkRFRD0xXT1cIkZPUkVHUk9VTkRFRFwiLGVbZS5CQUNLR1JPVU5ERUQ9Ml09XCJCQUNLR1JPVU5ERURcIixlW2UuT1NfV0FLRVVQPTNdPVwiT1NfV0FLRVVQXCJ9KGx8fChsPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkJFTE9XXzQwMEtCSVRQUz0wXT1cIkJFTE9XXzQwMEtCSVRQU1wiLGVbZS5CRVRXRUVOXzQwMEtCSVRQU184MDBLQklUUFM9MV09XCJCRVRXRUVOXzQwMEtCSVRQU184MDBLQklUUFNcIixlW2UuQkVUV0VFTl84MDBLQklUUFNfMTYwMEtCSVRQUz0yXT1cIkJFVFdFRU5fODAwS0JJVFBTXzE2MDBLQklUUFNcIixlW2UuQkVUV0VFTl8xNjAwS0JJVFBTXzRNQklUUFM9M109XCJCRVRXRUVOXzE2MDBLQklUUFNfNE1CSVRQU1wiLGVbZS5CRVRXRUVOXzRNQklUUFNfOE1CSVRQUz00XT1cIkJFVFdFRU5fNE1CSVRQU184TUJJVFBTXCIsZVtlLkJFVFdFRU5fOE1CSVRQU18xNk1CSVRQUz01XT1cIkJFVFdFRU5fOE1CSVRQU18xNk1CSVRQU1wiLGVbZS5BQk9WRV8xNk1CSVRQUz02XT1cIkFCT1ZFXzE2TUJJVFBTXCIsZVtlLlVOUkVDT0dOSVpFRD03XT1cIlVOUkVDT0dOSVpFRFwifSh1fHwodT17fSkpLGZ1bmN0aW9uKGUpe2VbZS5JTU1FRElBVEVfUkVUUlk9MF09XCJJTU1FRElBVEVfUkVUUllcIixlW2UuUkVHVUxBUkJBQ0tPRkZfUkVUUlk9MV09XCJSRUdVTEFSQkFDS09GRl9SRVRSWVwiLGVbZS5FWFBPTkVOVElBTEJBQ0tPRkZfUkVUUlk9Ml09XCJFWFBPTkVOVElBTEJBQ0tPRkZfUkVUUllcIixlW2UuSU1NRURJQVRFUkVUUllfRVhQQkFDS09GRj0zXT1cIklNTUVESUFURVJFVFJZX0VYUEJBQ0tPRkZcIn0oZHx8KGQ9e30pKSxmdW5jdGlvbihlKXtlW2UuTk9fQ09NUFJFU1NJT049MF09XCJOT19DT01QUkVTU0lPTlwiLGVbZS5HWklQPTFdPVwiR1pJUFwiLGVbZS5CUk9UTEk9Ml09XCJCUk9UTElcIixlW2UuWlNURD0zXT1cIlpTVERcIn0oZnx8KGY9e30pKSxmdW5jdGlvbihlKXtlW2UuTEFTVE9CU0VSVkVEVEhST1VHSFBVVD0wXT1cIkxBU1RPQlNFUlZFRFRIUk9VR0hQVVRcIixlW2UuU0xJRElOR01FRElBTlNRUlRXRUlHSFQ9MV09XCJTTElESU5HTUVESUFOU1FSVFdFSUdIVFwifShwfHwocD17fSkpfSw4MTE6KGUsdCxuKT0+e3ZhciByO24uZCh0LHt2OigpPT5yfSksZnVuY3Rpb24oZSl7ZVtlLkNMSUVOVERFVkVMT1BNRU5UPTBdPVwiQ0xJRU5UREVWRUxPUE1FTlRcIixlW2UuUExBVEZPUk1ERVZFTE9QTUVOVD0xXT1cIlBMQVRGT1JNREVWRUxPUE1FTlRcIixlW2UuR09MRD0yXT1cIkdPTERcIixlW2UuQUxQSEE9M109XCJBTFBIQVwiLGVbZS5QUk9EVUNUSU9OPTRdPVwiUFJPRFVDVElPTlwifShyfHwocj17fSkpfSwyNzc1NjooZSx0LG4pPT57dmFyIHIsaSxvLGEscztuLmQodCx7TyQ6KCk9Pm8sX1A6KCk9PnIsaW46KCk9PmkscWo6KCk9PnN9KSxmdW5jdGlvbihlKXtlW2UuQUxXQVlTPTBdPVwiQUxXQVlTXCIsZVtlLkZVU0VEPTFdPVwiRlVTRURcIixlW2UuRElTQUJMRUQ9Ml09XCJESVNBQkxFRFwifShyfHwocj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5WRVJCT1NFPTBdPVwiVkVSQk9TRVwiLGVbZS5ERUJVRz0xXT1cIkRFQlVHXCIsZVtlLklORk89Ml09XCJJTkZPXCIsZVtlLldBUk49M109XCJXQVJOXCIsZVtlLkVSUk9SPTRdPVwiRVJST1JcIixlW2UuTk9ORT01XT1cIk5PTkVcIn0oaXx8KGk9e30pKSxmdW5jdGlvbihlKXtlW2UuR0VORVJBTD0wXT1cIkdFTkVSQUxcIixlW2UuQ0hBVD0xXT1cIkNIQVRcIixlW2UuQ09OVEVOVE1BTkFHRVI9Ml09XCJDT05URU5UTUFOQUdFUlwiLGVbZS5HUlBDPTNdPVwiR1JQQ1wiLGVbZS5HUlBDVFJBQ0U9NF09XCJHUlBDVFJBQ0VcIixlW2UuTkVUV09SSz01XT1cIk5FVFdPUktcIixlW2UuVEFMSz02XT1cIlRBTEtcIixlW2UuQ09SRT03XT1cIkNPUkVcIixlW2UuQ1VQUz04XT1cIkNVUFNcIixlW2UuQUQ9OV09XCJBRFwiLGVbZS5USVY9MTBdPVwiVElWXCIsZVtlLk1BUD0xMV09XCJNQVBcIixlW2UuT05ERVZJQ0VNTD0xMl09XCJPTkRFVklDRU1MXCIsZVtlLkRFRVBMSU5LUkVTT0xVVElPTj0xM109XCJERUVQTElOS1JFU09MVVRJT05cIn0ob3x8KG89e30pKSxmdW5jdGlvbihlKXtlW2UuQUNUSVZFPTBdPVwiQUNUSVZFXCIsZVtlLklOQUNUSVZFPTFdPVwiSU5BQ1RJVkVcIn0oYXx8KGE9e30pKSxmdW5jdGlvbihlKXtlW2UuQ01fQ09OVEVOVF9FVklDVElPTj0wXT1cIkNNX0NPTlRFTlRfRVZJQ1RJT05cIixlW2UuTk1fQ1JPTkVUX0NBTExCQUNLPTFdPVwiTk1fQ1JPTkVUX0NBTExCQUNLXCIsZVtlLkRBVEFCQVNFPTJdPVwiREFUQUJBU0VcIixlW2UuRkVFRF9ESVNQTEFZPTNdPVwiRkVFRF9ESVNQTEFZXCIsZVtlLkZFRURfSU5URVJBQ1RJT049NF09XCJGRUVEX0lOVEVSQUNUSU9OXCIsZVtlLkZFRURfVkFMSURBVE9SPTVdPVwiRkVFRF9WQUxJREFUT1JcIixlW2UuU0VORE1FU1NBR0VfRU5TVVJFQ09OVkVSU0FUSU9OU1NURVA9Nl09XCJTRU5ETUVTU0FHRV9FTlNVUkVDT05WRVJTQVRJT05TU1RFUFwiLGVbZS5GTE9XT1JDSEVTVFJBVE9SPTddPVwiRkxPV09SQ0hFU1RSQVRPUlwiLGVbZS5VTktOT1dOPThdPVwiVU5LTk9XTlwiLGVbZS5NQ1NTRU5EU1RFUEVSUk9SPTldPVwiTUNTU0VORFNURVBFUlJPUlwiLGVbZS5TRU5ETUVTU0FHRV9DUkVBVEVORVRXT1JLR1JPVVBTU1RFUD0xMF09XCJTRU5ETUVTU0FHRV9DUkVBVEVORVRXT1JLR1JPVVBTU1RFUFwiLGVbZS5VUERBVEVNRVNTQUdFX09SQ0hFU1RSQVRJT05SRVNVTFRIQU5ETEVSPTExXT1cIlVQREFURU1FU1NBR0VfT1JDSEVTVFJBVElPTlJFU1VMVEhBTkRMRVJcIixlW2UuU0VORE1FU1NBR0VfT1JDSEVTVFJBVElPTlJFU1VMVEhBTkRMRVI9MTJdPVwiU0VORE1FU1NBR0VfT1JDSEVTVFJBVElPTlJFU1VMVEhBTkRMRVJcIixlW2UuVVBEQVRFQ09OVkVSU0FUSU9OX09SQ0hFU1RSQVRJT05SRVNVTFRIQU5ETEVSPTEzXT1cIlVQREFURUNPTlZFUlNBVElPTl9PUkNIRVNUUkFUSU9OUkVTVUxUSEFORExFUlwiLGVbZS5OT05GQVRBTF9BU1NFUlRJT049MTRdPVwiTk9ORkFUQUxfQVNTRVJUSU9OXCIsZVtlLlNZTkNGRUVEX0lOSVRJQUxSRVFVRVNUVU5BVkFJTEFCTEU9MTVdPVwiU1lOQ0ZFRURfSU5JVElBTFJFUVVFU1RVTkFWQUlMQUJMRVwiLGVbZS5JTlZBTElEX1VVSURfU0laRT0xNl09XCJJTlZBTElEX1VVSURfU0laRVwiLGVbZS5TRVNTSU9OX0NSRUFUSU9OPTE3XT1cIlNFU1NJT05fQ1JFQVRJT05cIixlW2UuQ0xPU0VEX0ZEX1dSSVRFPTE4XT1cIkNMT1NFRF9GRF9XUklURVwiLGVbZS5GSUxFUExBVEZPUk1FUlJPUlM9MTldPVwiRklMRVBMQVRGT1JNRVJST1JTXCIsZVtlLk1BUF9TREs9MjBdPVwiTUFQX1NES1wifShzfHwocz17fSkpfSw0MTMxOihlLHQsbik9Pnt2YXIgcixpLG8sYSxzLGMsbCx1LGQsZixwLG0saDtuLmQodCx7Q2Y6KCk9Pm0sSXM6KCk9PmEsS0c6KCk9PnUsVXE6KCk9Pm8sWHQ6KCk9PmYsZ1E6KCk9PmMsb2M6KCk9PmkscFU6KCk9PnIsckY6KCk9PmwsdDQ6KCk9PnAsenc6KCk9Pmh9KSxmdW5jdGlvbihlKXtlW2UuTk9ORT0wXT1cIk5PTkVcIixlW2UuQVVESU89MV09XCJBVURJT1wiLGVbZS5NVVRFRF9BVURJTz0yXT1cIk1VVEVEX0FVRElPXCIsZVtlLkFVRElPX1BBVVNFRF9WSURFTz0zXT1cIkFVRElPX1BBVVNFRF9WSURFT1wiLGVbZS5NVVRFRF9BVURJT19WSURFTz00XT1cIk1VVEVEX0FVRElPX1ZJREVPXCIsZVtlLk1VVEVEX0FVRElPX1BBVVNFRF9WSURFTz01XT1cIk1VVEVEX0FVRElPX1BBVVNFRF9WSURFT1wiLGVbZS5BVURJT19WSURFTz02XT1cIkFVRElPX1ZJREVPXCJ9KHJ8fChyPXt9KSksZnVuY3Rpb24oZSl7ZVtlLk5PTkU9MF09XCJOT05FXCIsZVtlLlRZUElORz0xXT1cIlRZUElOR1wiLGVbZS5QQVVTRUQ9Ml09XCJQQVVTRURcIixlW2UuRklOSVNIRUQ9M109XCJGSU5JU0hFRFwifShpfHwoaT17fSkpLGZ1bmN0aW9uKGUpe2VbZS5OT05FPTBdPVwiTk9ORVwiLGVbZS5DQUxMSU5HPTFdPVwiQ0FMTElOR1wiLGVbZS5SSU5HSU5HPTJdPVwiUklOR0lOR1wiLGVbZS5BTlNXRVJFRD0zXT1cIkFOU1dFUkVEXCIsZVtlLklOX0NBTEw9NF09XCJJTl9DQUxMXCJ9KG98fChvPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkNPTk5FQ1RJT05fRlJPWkVOPTBdPVwiQ09OTkVDVElPTl9GUk9aRU5cIixlW2UuVklERU9fRlJPWkVOPTFdPVwiVklERU9fRlJPWkVOXCIsZVtlLlBPT1JfQVVESU9fUVVBTElUWT0yXT1cIlBPT1JfQVVESU9fUVVBTElUWVwiLGVbZS5ORVRXT1JLX1BST0JMRU09M109XCJORVRXT1JLX1BST0JMRU1cIixlW2UuVklERU9fU1VTUEVOREVEPTRdPVwiVklERU9fU1VTUEVOREVEXCIsZVtlLlZJREVPX1VQTElOS19TTE9XPTVdPVwiVklERU9fVVBMSU5LX1NMT1dcIixlW2UuTk9ORT02XT1cIk5PTkVcIn0oYXx8KGE9e30pKSxmdW5jdGlvbihlKXtlW2UuUkVNT1RFPTBdPVwiUkVNT1RFXCIsZVtlLkxPQ0FMPTFdPVwiTE9DQUxcIixlW2UuQk9USD0yXT1cIkJPVEhcIn0oc3x8KHM9e30pKSxmdW5jdGlvbihlKXtlW2UuTUlTU0VEPTBdPVwiTUlTU0VEXCIsZVtlLkpPSU5FRD0xXT1cIkpPSU5FRFwiLGVbZS5MRUZUPTJdPVwiTEVGVFwiLGVbZS5FTkRFRD0zXT1cIkVOREVEXCJ9KGN8fChjPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlRZUElORz0wXT1cIlRZUElOR1wiLGVbZS5ERUxFVEU9MV09XCJERUxFVEVcIixlW2UuREVMRVRFX0FMTD0yXT1cIkRFTEVURV9BTExcIixlW2UuRklOSVNIPTNdPVwiRklOSVNIXCJ9KGx8fChsPXt9KSksZnVuY3Rpb24oZSl7ZVtlLk5PUk1BTD0wXT1cIk5PUk1BTFwiLGVbZS5DQUxMSU5HX1JFSkVDVEVEX0FVRElPPTFdPVwiQ0FMTElOR19SRUpFQ1RFRF9BVURJT1wiLGVbZS5DQUxMSU5HX1JFSkVDVEVEX1ZJREVPPTJdPVwiQ0FMTElOR19SRUpFQ1RFRF9WSURFT1wiLGVbZS5SSU5HSU5HX0VOREVEPTNdPVwiUklOR0lOR19FTkRFRFwiLGVbZS5SRU1PVEVfSFVOR19VUD00XT1cIlJFTU9URV9IVU5HX1VQXCIsZVtlLkNPTk5FQ1RJT05fRkFJTEVEPTVdPVwiQ09OTkVDVElPTl9GQUlMRURcIixlW2UuQ09OTkVDVElPTl9GQUlMRURfVU5SRUFDSEFCTEU9Nl09XCJDT05ORUNUSU9OX0ZBSUxFRF9VTlJFQUNIQUJMRVwiLGVbZS5DQUxMSU5HX1RJTUVEX09VVD03XT1cIkNBTExJTkdfVElNRURfT1VUXCIsZVtlLkhBTkRMRURfT05fQU5PVEhFUl9ERVZJQ0U9OF09XCJIQU5ETEVEX09OX0FOT1RIRVJfREVWSUNFXCIsZVtlLlBBUlRJQ0lQQU5UX1VQREFURT05XT1cIlBBUlRJQ0lQQU5UX1VQREFURVwifSh1fHwodT17fSkpLGZ1bmN0aW9uKGUpe2VbZS5DQUxMX0FDVElWRT0wXT1cIkNBTExfQUNUSVZFXCIsZVtlLkNBTExfRU5ERUQ9MV09XCJDQUxMX0VOREVEXCIsZVtlLkNBTExfTUlTU0VEPTJdPVwiQ0FMTF9NSVNTRURcIixlW2UuQ0FMTF9IQU5ETEVEX0VMU0VXSEVSRT0zXT1cIkNBTExfSEFORExFRF9FTFNFV0hFUkVcIn0oZHx8KGQ9e30pKSxmdW5jdGlvbihlKXtlW2UuRElTUExBWT0wXT1cIkRJU1BMQVlcIixlW2UuQkxPQ0s9MV09XCJCTE9DS1wifShmfHwoZj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5OT05FPTBdPVwiTk9ORVwiLGVbZS5NT0JJTEU9MV09XCJNT0JJTEVcIixlW2UuV0VCPTJdPVwiV0VCXCJ9KHB8fChwPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkRJU0FCTEVEPTBdPVwiRElTQUJMRURcIixlW2UuR1JPVVBTX09OTFk9MV09XCJHUk9VUFNfT05MWVwiLGVbZS5BTEw9Ml09XCJBTExcIn0obXx8KG09e30pKSxmdW5jdGlvbihlKXtlW2UuTk9UX1BVQkxJU0hFRD0wXT1cIk5PVF9QVUJMSVNIRURcIixlW2UuUFJPUEFHQVRJTkdfTUVESUE9MV09XCJQUk9QQUdBVElOR19NRURJQVwiLGVbZS5GUk9aRU49Ml09XCJGUk9aRU5cIixlW2UuRElTQUxMT1dFRF9CWV9MT0NBTF9VU0VSPTNdPVwiRElTQUxMT1dFRF9CWV9MT0NBTF9VU0VSXCIsZVtlLk5PX1JFUVVJUkVEX0RFQ09ERVI9NF09XCJOT19SRVFVSVJFRF9ERUNPREVSXCIsZVtlLlJFU09VUkNFX0xJTUlURUQ9NV09XCJSRVNPVVJDRV9MSU1JVEVEXCIsZVtlLlRPT19MT1dfRE9XTkxJTktfQkFORFdJRFRIPTZdPVwiVE9PX0xPV19ET1dOTElOS19CQU5EV0lEVEhcIn0oaHx8KGg9e30pKX0sMzY0OihlLHQpPT57dC5fX2VzTW9kdWxlPSEwO3ZhciBuPVtcIm1vdXNlZG93blwiLFwibW91c2Vtb3ZlXCIsXCJrZXlkb3duXCIsXCJzY3JvbGxcIixcInRvdWNoc3RhcnRcIl07dC5kZWZhdWx0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5kZXN0cm95PWZ1bmN0aW9uKCl7bi5mb3JFYWNoKChmdW5jdGlvbihlKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGUsdC5vbkFjdGl2aXR5LCEwKX0pKX0sdGhpcy5vbkFjdGl2aXR5PWZ1bmN0aW9uKCl7dC5sYXN0QWN0aXZpdHlUaW1lc3RhbXA9RGF0ZS5ub3coKX0sdGhpcy5yZWdpc3Rlckxpc3RlbmVycz1mdW5jdGlvbigpe24uZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihlLHQub25BY3Rpdml0eSwhMCl9KSl9LHRoaXMuZ2V0U2Vjb25kc1NpbmNlTGFzdEFjdGl2aXR5PWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgucm91bmQoKERhdGUubm93KCktdC5sYXN0QWN0aXZpdHlUaW1lc3RhbXApLzFlMyl9LHRoaXMuZ2V0SXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdC5nZXRTZWNvbmRzU2luY2VMYXN0QWN0aXZpdHkoKTx0LmluYWN0aXZlVGhyZXNob2xkSW5TZWNvbmR9LHRoaXMubGFzdEFjdGl2aXR5VGltZXN0YW1wPURhdGUubm93KCksdGhpcy5pbmFjdGl2ZVRocmVzaG9sZEluU2Vjb25kPWUsdGhpcy5yZWdpc3Rlckxpc3RlbmVycygpfX0sMzMwMzY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHI9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJihlW25dPXRbbl0pfSxyKGUsdCl9LGZ1bmN0aW9uKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIrU3RyaW5nKHQpK1wiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9ZX1yKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KToobi5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IG4pfSksbz10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybiBvPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPTEscj1hcmd1bWVudHMubGVuZ3RoO248cjtuKyspZm9yKHZhciBpIGluIHQ9YXJndW1lbnRzW25dKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGkpJiYoZVtpXT10W2ldKTtyZXR1cm4gZX0sby5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGE9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07dC5fX2VzTW9kdWxlPSEwLHQuV0VCX0FUVEVTVEFUSU9OX0hFQURFUj12b2lkIDA7dmFyIHM9bigxMTcyMSksYz1hKG4oNjYxMTgpKTt0LldFQl9BVFRFU1RBVElPTl9IRUFERVI9XCJYLVNuYXBjaGF0LVdlYi1DbGllbnQtQXV0aFwiO3ZhciBsPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBpKG4sZSksbi5wcm90b3R5cGUuYXV0aFJlcXVlc3Q9ZnVuY3Rpb24oZSxuLHIpe3ZhciBpO3N3aXRjaChlKXtjYXNlIHMuQXV0aFR5cGUuTm9uZTpyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHIpO2Nhc2Ugcy5BdXRoVHlwZS5XZWJBdHRlc3RhdGlvbjp2YXIgYT1jLmRlZmF1bHQobik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShvKG8oe30sciksKChpPXt9KVt0LldFQl9BVFRFU1RBVElPTl9IRUFERVJdPWEsaSkpKTtkZWZhdWx0OnJldHVybiBQcm9taXNlLnJlamVjdChcIlVuc3VwcG9ydGVkIGF1dGggdHlwZTogXCIrZSl9fSxufShzLkF1dGhlbnRpY2F0b3IpO3QuZGVmYXVsdD1sfSw2NjExODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07dC5fX2VzTW9kdWxlPSEwO3ZhciBpPXIobig1OTEzNikpLG89bigxNTk2NiksYT1yKG4oOTkxODgpKTt0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9QXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGUsKGZ1bmN0aW9uKGUpe3JldHVybihcIjBcIitlLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpfSkpLmpvaW4oXCJcIiksbj1hLmRlZmF1bHQuaGFzaCh0LHttc2dGb3JtYXQ6XCJoZXgtYnl0ZXNcIn0pK1wiOlwiK0RhdGUubm93KCk7cmV0dXJuIG8uaXNJbkJyb3dzZXIoKT9idG9hKG4pOmkuZGVmYXVsdChuKX19LDMzNjkwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPXRoaXMmJnRoaXMuX19leHRlbmRzfHwocj1mdW5jdGlvbihlLHQpe3JldHVybiByPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pJiYoZVtuXT10W25dKX0scihlLHQpfSxmdW5jdGlvbihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiK1N0cmluZyh0KStcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPWV9cihlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KG4ucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBuKX0pLG89dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4gbz1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQsbj0xLHI9YXJndW1lbnRzLmxlbmd0aDtuPHI7bisrKWZvcih2YXIgaSBpbiB0PWFyZ3VtZW50c1tuXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxpKSYmKGVbaV09dFtpXSk7cmV0dXJuIGV9LG8uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxhPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O3QuX19lc01vZHVsZT0hMDt2YXIgcz1hKG4oNDc5NjgpKSxjPW4oMTE3MjEpLGw9YShuKDI2Njk4KSksdT1hKG4oNTE5MTEpKSxkPWEobigzODU5NSkpLGY9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0KXt2YXIgbj1lLmNhbGwodGhpcyl8fHRoaXM7aWYoIXQucGFydGl0aW9uTmFtZXx8IXMuZGVmYXVsdFt0LnBhcnRpdGlvbk5hbWUudG9VcHBlckNhc2UoKV0pdGhyb3cgbmV3IEVycm9yKFwiUGFydGl0aW9uIGlzIG5vdCBkZWZpbmVkIVwiKTtyZXR1cm4gbi5wYXJ0aXRpb25OYW1lPXQucGFydGl0aW9uTmFtZSxuLmZsYXZvcj10LmZsYXZvcixuLnZhcmlhbnQ9dC52YXJpYW50LG4udmVyc2lvbk51bWJlcj10LnZlcnNpb25OdW1iZXIsbi5tYXhTaXplUGVyTWV0cmljPXQubWF4U2l6ZVBlck1ldHJpY3x8NTAsbi5kZWZhdWx0RGltZW5zaW9ucz10LmRlZmF1bHREaW1lbnNpb25zLG59cmV0dXJuIGkodCxlKSx0LnByb3RvdHlwZS5pbmNyZW1lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tZXRyaWNzTmFtZSxuPWUuZGltZW5zaW9ucyxyPWUudmFsdWUsaT1sLmRlZmF1bHQoe21ldHJpY3NOYW1lOnQsZGltZW5zaW9uczpufSksbz10aGlzLm1ldHJpY3MuY291bnRlcnNbaV07dGhpcy5tZXRyaWNzLmNvdW50ZXJzW2ldPXRoaXMudXBkYXRlTWV0cmljT2JqZWN0KHtwcmV2TWV0cmljT2JqZWN0Om8sbWV0cmljc05hbWU6dCxkaW1lbnNpb25zOnRoaXMuX2RlY29yYXRlRGltZW5zaW9ucyhuKSx2YWx1ZTpyLHNob3VsZEFnZ3JlZ2F0ZTohMH0pfSx0LnByb3RvdHlwZS5hZGRIaXN0b2dyYW09ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tZXRyaWNzTmFtZSxuPWUuZGltZW5zaW9ucyxyPWUudmFsdWUsaT1sLmRlZmF1bHQoe21ldHJpY3NOYW1lOnQsZGltZW5zaW9uczpufSksbz10aGlzLm1ldHJpY3MubGV2ZWxzW2ldO3RoaXMubWV0cmljcy5sZXZlbHNbaV09dGhpcy51cGRhdGVNZXRyaWNPYmplY3Qoe3ByZXZNZXRyaWNPYmplY3Q6byxtZXRyaWNzTmFtZTp0LGRpbWVuc2lvbnM6dGhpcy5fZGVjb3JhdGVEaW1lbnNpb25zKG4pLHZhbHVlOnIsc2hvdWxkQWdncmVnYXRlOiExfSl9LHQucHJvdG90eXBlLmFkZFRpbWVyPWZ1bmN0aW9uKGUpe3ZhciB0PWUubWV0cmljc05hbWUsbj1lLmRpbWVuc2lvbnMscj1lLm1pbGxpU2VjLGk9bC5kZWZhdWx0KHttZXRyaWNzTmFtZTp0LGRpbWVuc2lvbnM6bn0pLG89dGhpcy5tZXRyaWNzLnRpbWVyc1tpXTt0aGlzLm1ldHJpY3MudGltZXJzW2ldPXRoaXMudXBkYXRlTWV0cmljT2JqZWN0KHtwcmV2TWV0cmljT2JqZWN0Om8sbWV0cmljc05hbWU6dCxkaW1lbnNpb25zOnRoaXMuX2RlY29yYXRlRGltZW5zaW9ucyhuKSx2YWx1ZTpyLHNob3VsZEFnZ3JlZ2F0ZTohMX0pfSx0LnByb3RvdHlwZS5nZXRQYXlsb2FkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb252ZXJ0VG9NZXRyaWNGcmFtZSh0aGlzLm1ldHJpY3MpO3JldHVybiBkLmRlZmF1bHQuTWV0cmljRnJhbWUuZW5jb2RlKGUpLmZpbmlzaCgpfSx0LnByb3RvdHlwZS51cGRhdGVNZXRyaWNPYmplY3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wcmV2TWV0cmljT2JqZWN0LG49ZS5tZXRyaWNzTmFtZSxyPWUuZGltZW5zaW9ucyxpPXZvaWQgMD09PXI/e306cixvPWUudmFsdWUsYT1lLnNob3VsZEFnZ3JlZ2F0ZSxzPXZvaWQgMCE9PWEmJmEsYz10O2lmKGN8fChjPW5ldyBkLmRlZmF1bHQuTWV0cmljKHtwYXJ0aXRpb25OYW1lOnRoaXMucGFydGl0aW9uTmFtZSxtZXRyaWNOYW1lOm4sY3VzdG9tRGltZW5zaW9uczppfSkpLHMpe3ZhciBsPWMudmFsdWVzLHU9bysoTnVtYmVyKGxbMF0pfHwwKTtjLnZhbHVlcz1bdV19ZWxzZSBjLnZhbHVlcy5wdXNoKG8pO3JldHVybiBjfSx0LnByb3RvdHlwZS5jb252ZXJ0VG9NZXRyaWNGcmFtZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49bmV3IGQuZGVmYXVsdC5NZXRyaWNGcmFtZTtpZihuLmNsaWVudE9zVHlwZT1kLmRlZmF1bHQuT3NUeXBlLk9TX1dFQix0aGlzLmZsYXZvcnx8dGhpcy52YXJpYW50fHx0aGlzLnZlcnNpb25OdW1iZXIpe3ZhciByPW5ldyBkLmRlZmF1bHQuQXBwVmVyc2lvbjt0aGlzLmZsYXZvciYmKHIuZmxhdm9yPXRoaXMuZmxhdm9yKSx0aGlzLnZhcmlhbnQmJihyLnZhcmlhbnQ9dGhpcy52YXJpYW50KSx0aGlzLnZlcnNpb25OdW1iZXImJihyLnZlcnNpb25OdW1iZXI9dGhpcy52ZXJzaW9uTnVtYmVyKSxuLmFwcFZlcnNpb249cn1yZXR1cm4gT2JqZWN0LmtleXMoZS5jb3VudGVycykuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9ZS5jb3VudGVyc1t0XTtuLmNvdW50ZXJzLnB1c2gocil9KSksT2JqZWN0LmtleXMoZS50aW1lcnMpLmZvckVhY2goKGZ1bmN0aW9uKHIpe3ZhciBpPXQuc2FtcGxlTWV0cmljVmFsdWVzKGUudGltZXJzW3JdKTtuLnRpbWVycy5wdXNoKGkpfSkpLE9iamVjdC5rZXlzKGUubGV2ZWxzKS5mb3JFYWNoKChmdW5jdGlvbihyKXt2YXIgaT10LnNhbXBsZU1ldHJpY1ZhbHVlcyhlLmxldmVsc1tyXSk7bi5sZXZlbHMucHVzaChpKX0pKSxufSx0LnByb3RvdHlwZS5zYW1wbGVNZXRyaWNWYWx1ZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVzPXUuZGVmYXVsdChlLnZhbHVlcyx0aGlzLm1heFNpemVQZXJNZXRyaWMpLGV9LHQucHJvdG90eXBlLl9kZWNvcmF0ZURpbWVuc2lvbnM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGVmYXVsdERpbWVuc2lvbnM/byhvKHt9LHRoaXMuZGVmYXVsdERpbWVuc2lvbnMpLGV8fHt9KTplfSx0fShjLk1ldHJpY0NvbGxlY3Rvcik7dC5kZWZhdWx0PWZ9LDYyMDk2OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTt0Ll9fZXNNb2R1bGU9ITAsdC5nZXRXZWJDb25maWc9dm9pZCAwO3ZhciBpPW4oMTE3MjEpLG89cihuKDMzMDM2KSksYT1yKG4oMzM2OTApKTt0LmdldFdlYkNvbmZpZz1mdW5jdGlvbihlKXtyZXR1cm57cHJvdG9jb2w6XCJodHRwczpcIixob3N0OlwiZ2NwLmFwaS5zbmFwY2hhdC5jb21cIixwYXRoOlwiL3dlYi9tZXRyaWNzXCIsaGVhZGVyczp7XCJDb250ZW50LVR5cGVcIjpcImFwcGxpY2F0aW9uL3gtcHJvdG9idWZcIn0sYXV0aFR5cGU6aS5BdXRoVHlwZS5XZWJBdHRlc3RhdGlvbixhdXRoZW50aWNhdG9yOm5ldyBvLmRlZmF1bHQsY29sbGVjdG9yOm5ldyBhLmRlZmF1bHQoZSl9fSx0LmRlZmF1bHQ9dC5nZXRXZWJDb25maWd9LDcyMzMyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPXRoaXMmJnRoaXMuX19leHRlbmRzfHwocj1mdW5jdGlvbihlLHQpe3JldHVybiByPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pJiYoZVtuXT10W25dKX0scihlLHQpfSxmdW5jdGlvbihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiK1N0cmluZyh0KStcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPWV9cihlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KG4ucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBuKX0pLG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07dC5fX2VzTW9kdWxlPSEwLHQuR3JhcGhlbmU9dC5ERUZBVUxUX0lOQUNUSVZFX1RIUkVTSE9MRD12b2lkIDA7dmFyIGE9bigxMTcyMSkscz1uKDE1OTY2KSxjPW8obigzNjQpKTt0LkRFRkFVTFRfSU5BQ1RJVkVfVEhSRVNIT0xEPTYwO3ZhciBsPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXt2YXIgdD1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHQuc2VuZEhlYXJ0QmVhdENvdW50ZXI9ZnVuY3Rpb24oZSl7aWYodC5pc0luaXRpYWxpemVkKXt2YXIgbj1mdW5jdGlvbigpe3ZhciBuLHI9KG51bGw9PT0obj10LmFjdGl2aXR5RGV0ZWN0b3IpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmdldElzQWN0aXZlKCkpP1wiYWN0aXZlXCI6XCJpbmFjdGl2ZVwiO3QuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcImhlYXJ0X2JlYXRcIixkaW1lbnNpb25zOnt2ZXJzaW9uOmUsYWN0aXZlOnJ9fSl9O24oKSx0LmhlYXJ0QmVhdElkPXNldEludGVydmFsKG4sNmU0KX19LHR9cmV0dXJuIGkobixlKSxuLnByb3RvdHlwZS5pbml0aWFsaXplPWZ1bmN0aW9uKG4pe2lmKHRoaXMuaXNJbml0aWFsaXplZCl0aHJvdyBuZXcgRXJyb3IoXCJ0aGlzIGluc3RhbmNlIGhhcyBiZWVuIGluaXRpYWxpemVkLiBDYW4ndCByZS1pbml0aWFsaXplIGl0LlwiKTtlLnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcyxuKTt2YXIgcj1uLmluYWN0aXZlVGhyZXNob2xkSW5TZWNvbmQsaT12b2lkIDA9PT1yP3QuREVGQVVMVF9JTkFDVElWRV9USFJFU0hPTEQ6cjtzLmlzSW5XaW5kb3coKSYmKHRoaXMuYWN0aXZpdHlEZXRlY3Rvcj1uZXcgYy5kZWZhdWx0KGkpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsdGhpcy5mbHVzaCkpfSxuLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHMuaXNJbldpbmRvdygpJiZ3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLHRoaXMuZmx1c2gpLHRoaXMuYWN0aXZpdHlEZXRlY3RvciYmdGhpcy5hY3Rpdml0eURldGVjdG9yLmRlc3Ryb3koKX0sbn0oYS5CYXNlQ2xpZW50KTt0LkdyYXBoZW5lPWw7dmFyIHU9bmV3IGw7dC5kZWZhdWx0PXV9LDQ1MzYzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSksaT10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTp0fSl9OmZ1bmN0aW9uKGUsdCl7ZS5kZWZhdWx0PXR9KSxvPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIiE9PW4mJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZyKHQsZSxuKTtyZXR1cm4gaSh0LGUpLHR9LGE9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O3QuX19lc01vZHVsZT0hMCx0LkdyYXBoZW5lPXQuZ3JhcGhlbmU9dC5QQVJUSVRJT049dm9pZCAwO3ZhciBzPW8obig3MjMzMikpO3QuZ3JhcGhlbmU9cy5kZWZhdWx0LHQuR3JhcGhlbmU9cy5HcmFwaGVuZTt2YXIgYz1uKDQ3OTY4KTtyKHQsYyxcIlBBUlRJVElPTlwiKSxhKG4oMTE3MjEpLHQpLHQuZGVmYXVsdD1zLmRlZmF1bHR9LDkwNTc4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KX06ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9biksZVtyXT10W25dfSk7dC5fX2VzTW9kdWxlPSEwLHQuZGVmYXVsdD10LkJyb3dzZXJOZXR3b3JrSGFuZGxlcj12b2lkIDA7dmFyIGk9big3Njg1OSk7cih0LGksXCJCcm93c2VyTmV0d29ya0hhbmRsZXJcIikscih0LGksXCJkZWZhdWx0XCIpfSwxNTc4MDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pO3QuX19lc01vZHVsZT0hMCx0LmRlZmF1bHQ9dC5GZXRjaE5ldHdvcmtIYW5kbGVyPXZvaWQgMDt2YXIgaT1uKDk1OTMwKTtyKHQsaSxcIkZldGNoTmV0d29ya0hhbmRsZXJcIikscih0LGksXCJkZWZhdWx0XCIpfSw0Nzk2ODooZSx0KT0+e3ZhciBuO3QuX19lc01vZHVsZT0hMCx0LlBBUlRJVElPTj12b2lkIDAsZnVuY3Rpb24oZSl7ZS5VTkRFRklORUQ9XCJ1bmRlZmluZWRcIixlLkFEU19NQU5BR0VSPVwiYWRzX21hbmFnZXJcIixlLkJVU0lORVNTX01BTkFHRVI9XCJidXNpbmVzc19tYW5hZ2VyXCIsZS5QUk9GSUxFX01BTkFHRVI9XCJwcm9maWxlX21hbmFnZXJcIixlLlJFVklFV19UT09MPVwicmV2aWV3X3Rvb2xcIixlLlNOQVBfTUFQUz1cInNuYXBfbWFwc1wiLGUuRk9SX0JVU0lORVNTPVwiZm9yX2J1c2luZXNzXCIsZS5BREZPUk1BVFNfV0VCPVwiYWRmb3JtYXRzX3dlYlwiLGUuRElTQ09WRVJfQ01TPVwiZGlzY292ZXJfY21zXCIsZS5TTkFQX1dFQj1cInNuYXBfd2ViXCIsZS5ORVdTUk9PTT1cIm5ld3Nyb29tXCIsZS5ZRUxMT1dfTEE9XCJ5ZWxsb3dfbGFcIixlLkNJVElaRU5fU05BUD1cImNpdGl6ZW5fc25hcFwiLGUuU05BUF9GT1VOREFUSU9OPVwic25hcF9mb3VuZGF0aW9uXCIsZS5FTkdfQkxPRz1cImVuZ19ibG9nXCIsZS5SRVNFQVJDSF9TTkFQPVwicmVzZWFyY2hfc25hcFwiLGUuTVlfTEVOU0VTPVwibXlfbGVuc2VzXCIsZS5QTEFZQ0FOVkFTPVwicGxheWNhbnZhc1wiLGUuTUVBU1VSRU1FTlRfUE9SVEFMPVwibWVhc3VyZW1lbnRfcG9ydGFsXCIsZS5UUlVTVD1cInRydXN0XCIsZS5DSEVFUklPUz1cImNoZWVyaW9zXCIsZS5TUFM9XCJzcHNcIixlLkFSX1NOQVA9XCJhcl9zbmFwXCIsZS5ERVZFTE9QRVJfU05BUD1cImRldmVsb3Blcl9zbmFwXCIsZS5EQU5ERUxJT049XCJkYW5kZWxpb25cIixlLkNSRUFUT1JTX1NOQVA9XCJjcmVhdG9yc19zbmFwXCIsZS5ESVZFUlNJVFk9XCJkaXZlcnNpdHlcIixlLlNOQVBDSEFUX1dFQj1cInNuYXBjaGF0X3dlYlwiLGUuRU1CRURERURfV0VCVklFV19BRFM9XCJlbWJlZGRlZF93ZWJ2aWV3X2Fkc1wiLGUuTUVUUklDU19NT05JVE9SPVwibWV0cmljc19tb25pdG9yXCIsZS5TTkFQR1JBUEg9XCJzbmFwZ3JhcGhcIixlLk1FQVNVUkVNRU5UX1JFU09OQU5DRV9TVVJWRVk9XCJtZWFzdXJlbWVudF9yZXNvbmFuY2Vfc3VydmV5XCIsZS5NRUFTVVJFTUVOVF9NUl9TVVJWRVk9XCJtZWFzdXJlbWVudF9tcl9zdXJ2ZXlcIixlLk1FQVNVUkVNRU5UX0NPTExFQ1RJT05fU1VSVkVZPVwibWVhc3VyZW1lbnRfY29sbGVjdGlvbl9zdXJ2ZXlcIixlLlNUT1JZX1NUVURJT19MSVRFPVwic3Rvcnlfc3R1ZGlvX2xpdGVcIixlLldFQl9TRUxGX1NFUlZFX0FEUz1cIndlYl9zZWxmX3NlcnZlX2Fkc1wiLGUuQVJDQURJQT1cImFyY2FkaWFcIixlLlNOQVBfNTIzPVwic25hcF81MjNcIixlLk9SSUdJTkFMUz1cIm9yaWdpbmFsc1wiLGUuTEVPX1dFQj1cImxlb193ZWJcIixlLkRXRUI9XCJkd2ViXCIsZS5TQ05fQ09OVEVOVF9NQU5BR0VSPVwic2NuX2NvbnRlbnRfbWFuYWdlclwiLGUuQURWRVJUSVNFUl8zNjA9XCJhZHZlcnRpc2VyXzM2MFwiLGUuQ0FSRUVSUz1cImNhcmVlcnNcIixlLlBSSVZBQ1lfSU5GUkE9XCJwcml2YWN5X2luZnJhXCIsZS5CTElaWkFSRD1cImJsaXp6YXJkXCIsZS5DT09LSUVfTU9EQUxfQ09NUE9ORU5UUz1cImNvb2tpZV9tb2RhbF9jb21wb25lbnRzXCIsZS5DT05URU5UX1RPT0xTPVwiY29udGVudF90b29sc1wiLGUuV0VCX0FDQ09VTlRTPVwid2ViX2FjY291bnRzXCIsZS5NQVJLRVRJTkdfV0VCX1BMQVRGT1JNPVwibWFya2V0aW5nX3dlYl9wbGF0Zm9ybVwiLGUuQVJFU19TREs9XCJhcmVzX3Nka1wiLGUuU05BUF9PUkNBPVwic25hcF9vcmNhXCJ9KG49dC5QQVJUSVRJT058fCh0LlBBUlRJVElPTj17fSkpLHQuZGVmYXVsdD1ufSwzODU5NTooZSx0LG4pPT57dmFyIHIsaSxvPW4oNjIxMDApLGE9by5Xcml0ZXIscz1vLnV0aWwsYz1vLnJvb3RzLmRlZmF1bHR8fChvLnJvb3RzLmRlZmF1bHQ9e30pO2MuT3NUeXBlPShyPXt9LChpPU9iamVjdC5jcmVhdGUocikpW3JbMF09XCJVTktOT1dOX09TX1RZUEVcIl09MCxpW3JbMV09XCJPU19JT1NcIl09MSxpW3JbMl09XCJPU19BTkRST0lEXCJdPTIsaVtyWzNdPVwiT1NfV0VCXCJdPTMsaSksYy5BcHBWZXJzaW9uPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXtpZihlKWZvcih2YXIgdD1PYmplY3Qua2V5cyhlKSxuPTA7bjx0Lmxlbmd0aDsrK24pbnVsbCE9ZVt0W25dXSYmKHRoaXNbdFtuXV09ZVt0W25dXSl9cmV0dXJuIGUucHJvdG90eXBlLnZlcnNpb25OdW1iZXI9bnVsbCxlLnByb3RvdHlwZS5mbGF2b3I9XCJcIixlLnByb3RvdHlwZS52YXJpYW50PVwiXCIsZS5lbmNvZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8KHQ9YS5jcmVhdGUoKSksbnVsbCE9ZS52ZXJzaW9uTnVtYmVyJiZPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLFwidmVyc2lvbk51bWJlclwiKSYmYy5BcHBWZXJzaW9uLlZlcnNpb25OdW1iZXIuZW5jb2RlKGUudmVyc2lvbk51bWJlcix0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSxudWxsIT1lLmZsYXZvciYmT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoZSxcImZsYXZvclwiKSYmdC51aW50MzIoMTgpLnN0cmluZyhlLmZsYXZvciksbnVsbCE9ZS52YXJpYW50JiZPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLFwidmFyaWFudFwiKSYmdC51aW50MzIoMjYpLnN0cmluZyhlLnZhcmlhbnQpLHR9LGUuZnJvbU9iamVjdD1mdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgYy5BcHBWZXJzaW9uKXJldHVybiBlO3ZhciB0PW5ldyBjLkFwcFZlcnNpb247aWYobnVsbCE9ZS52ZXJzaW9uTnVtYmVyKXtpZihcIm9iamVjdFwiIT10eXBlb2YgZS52ZXJzaW9uTnVtYmVyKXRocm93IFR5cGVFcnJvcihcIi5BcHBWZXJzaW9uLnZlcnNpb25OdW1iZXI6IG9iamVjdCBleHBlY3RlZFwiKTt0LnZlcnNpb25OdW1iZXI9Yy5BcHBWZXJzaW9uLlZlcnNpb25OdW1iZXIuZnJvbU9iamVjdChlLnZlcnNpb25OdW1iZXIpfXJldHVybiBudWxsIT1lLmZsYXZvciYmKHQuZmxhdm9yPVN0cmluZyhlLmZsYXZvcikpLG51bGwhPWUudmFyaWFudCYmKHQudmFyaWFudD1TdHJpbmcoZS52YXJpYW50KSksdH0sZS50b09iamVjdD1mdW5jdGlvbihlLHQpe3R8fCh0PXt9KTt2YXIgbj17fTtyZXR1cm4gdC5kZWZhdWx0cyYmKG4udmVyc2lvbk51bWJlcj1udWxsLG4uZmxhdm9yPVwiXCIsbi52YXJpYW50PVwiXCIpLG51bGwhPWUudmVyc2lvbk51bWJlciYmZS5oYXNPd25Qcm9wZXJ0eShcInZlcnNpb25OdW1iZXJcIikmJihuLnZlcnNpb25OdW1iZXI9Yy5BcHBWZXJzaW9uLlZlcnNpb25OdW1iZXIudG9PYmplY3QoZS52ZXJzaW9uTnVtYmVyLHQpKSxudWxsIT1lLmZsYXZvciYmZS5oYXNPd25Qcm9wZXJ0eShcImZsYXZvclwiKSYmKG4uZmxhdm9yPWUuZmxhdm9yKSxudWxsIT1lLnZhcmlhbnQmJmUuaGFzT3duUHJvcGVydHkoXCJ2YXJpYW50XCIpJiYobi52YXJpYW50PWUudmFyaWFudCksbn0sZS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcyxvLnV0aWwudG9KU09OT3B0aW9ucyl9LGUuVmVyc2lvbk51bWJlcj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7aWYoZSlmb3IodmFyIHQ9T2JqZWN0LmtleXMoZSksbj0wO248dC5sZW5ndGg7KytuKW51bGwhPWVbdFtuXV0mJih0aGlzW3Rbbl1dPWVbdFtuXV0pfXJldHVybiBlLnByb3RvdHlwZS5tYWpvcj0wLGUucHJvdG90eXBlLm1pbm9yPTAsZS5wcm90b3R5cGUucGF0Y2g9MCxlLnByb3RvdHlwZS5idWlsZD0wLGUuZW5jb2RlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fCh0PWEuY3JlYXRlKCkpLG51bGwhPWUubWFqb3ImJk9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsXCJtYWpvclwiKSYmdC51aW50MzIoOCkuaW50MzIoZS5tYWpvciksbnVsbCE9ZS5taW5vciYmT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoZSxcIm1pbm9yXCIpJiZ0LnVpbnQzMigxNikuaW50MzIoZS5taW5vciksbnVsbCE9ZS5wYXRjaCYmT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoZSxcInBhdGNoXCIpJiZ0LnVpbnQzMigyNCkuaW50MzIoZS5wYXRjaCksbnVsbCE9ZS5idWlsZCYmT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoZSxcImJ1aWxkXCIpJiZ0LnVpbnQzMigzMikuaW50MzIoZS5idWlsZCksdH0sZS5mcm9tT2JqZWN0PWZ1bmN0aW9uKGUpe2lmKGUgaW5zdGFuY2VvZiBjLkFwcFZlcnNpb24uVmVyc2lvbk51bWJlcilyZXR1cm4gZTt2YXIgdD1uZXcgYy5BcHBWZXJzaW9uLlZlcnNpb25OdW1iZXI7cmV0dXJuIG51bGwhPWUubWFqb3ImJih0Lm1ham9yPTB8ZS5tYWpvciksbnVsbCE9ZS5taW5vciYmKHQubWlub3I9MHxlLm1pbm9yKSxudWxsIT1lLnBhdGNoJiYodC5wYXRjaD0wfGUucGF0Y2gpLG51bGwhPWUuYnVpbGQmJih0LmJ1aWxkPTB8ZS5idWlsZCksdH0sZS50b09iamVjdD1mdW5jdGlvbihlLHQpe3R8fCh0PXt9KTt2YXIgbj17fTtyZXR1cm4gdC5kZWZhdWx0cyYmKG4ubWFqb3I9MCxuLm1pbm9yPTAsbi5wYXRjaD0wLG4uYnVpbGQ9MCksbnVsbCE9ZS5tYWpvciYmZS5oYXNPd25Qcm9wZXJ0eShcIm1ham9yXCIpJiYobi5tYWpvcj1lLm1ham9yKSxudWxsIT1lLm1pbm9yJiZlLmhhc093blByb3BlcnR5KFwibWlub3JcIikmJihuLm1pbm9yPWUubWlub3IpLG51bGwhPWUucGF0Y2gmJmUuaGFzT3duUHJvcGVydHkoXCJwYXRjaFwiKSYmKG4ucGF0Y2g9ZS5wYXRjaCksbnVsbCE9ZS5idWlsZCYmZS5oYXNPd25Qcm9wZXJ0eShcImJ1aWxkXCIpJiYobi5idWlsZD1lLmJ1aWxkKSxufSxlLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLG8udXRpbC50b0pTT05PcHRpb25zKX0sZX0oKSxlfSgpLGMuTWV0cmljPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXtpZih0aGlzLmN1c3RvbURpbWVuc2lvbnM9e30sdGhpcy52YWx1ZXM9W10sZSlmb3IodmFyIHQ9T2JqZWN0LmtleXMoZSksbj0wO248dC5sZW5ndGg7KytuKW51bGwhPWVbdFtuXV0mJih0aGlzW3Rbbl1dPWVbdFtuXV0pfXJldHVybiBlLnByb3RvdHlwZS5wYXJ0aXRpb25OYW1lPVwiXCIsZS5wcm90b3R5cGUubWV0cmljTmFtZT1cIlwiLGUucHJvdG90eXBlLmN1c3RvbURpbWVuc2lvbnM9cy5lbXB0eU9iamVjdCxlLnByb3RvdHlwZS52YWx1ZXM9cy5lbXB0eUFycmF5LGUuZW5jb2RlPWZ1bmN0aW9uKGUsdCl7aWYodHx8KHQ9YS5jcmVhdGUoKSksbnVsbCE9ZS5wYXJ0aXRpb25OYW1lJiZPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLFwicGFydGl0aW9uTmFtZVwiKSYmdC51aW50MzIoMTApLnN0cmluZyhlLnBhcnRpdGlvbk5hbWUpLG51bGwhPWUubWV0cmljTmFtZSYmT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoZSxcIm1ldHJpY05hbWVcIikmJnQudWludDMyKDE4KS5zdHJpbmcoZS5tZXRyaWNOYW1lKSxudWxsIT1lLmN1c3RvbURpbWVuc2lvbnMmJk9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsXCJjdXN0b21EaW1lbnNpb25zXCIpKWZvcih2YXIgbj1PYmplY3Qua2V5cyhlLmN1c3RvbURpbWVuc2lvbnMpLHI9MDtyPG4ubGVuZ3RoOysrcil0LnVpbnQzMigyNikuZm9yaygpLnVpbnQzMigxMCkuc3RyaW5nKG5bcl0pLnVpbnQzMigxOCkuc3RyaW5nKGUuY3VzdG9tRGltZW5zaW9uc1tuW3JdXSkubGRlbGltKCk7aWYobnVsbCE9ZS52YWx1ZXMmJmUudmFsdWVzLmxlbmd0aCl7Zm9yKHQudWludDMyKDM0KS5mb3JrKCkscj0wO3I8ZS52YWx1ZXMubGVuZ3RoOysrcil0LmludDY0KGUudmFsdWVzW3JdKTt0LmxkZWxpbSgpfXJldHVybiB0fSxlLmZyb21PYmplY3Q9ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIGMuTWV0cmljKXJldHVybiBlO3ZhciB0PW5ldyBjLk1ldHJpYztpZihudWxsIT1lLnBhcnRpdGlvbk5hbWUmJih0LnBhcnRpdGlvbk5hbWU9U3RyaW5nKGUucGFydGl0aW9uTmFtZSkpLG51bGwhPWUubWV0cmljTmFtZSYmKHQubWV0cmljTmFtZT1TdHJpbmcoZS5tZXRyaWNOYW1lKSksZS5jdXN0b21EaW1lbnNpb25zKXtpZihcIm9iamVjdFwiIT10eXBlb2YgZS5jdXN0b21EaW1lbnNpb25zKXRocm93IFR5cGVFcnJvcihcIi5NZXRyaWMuY3VzdG9tRGltZW5zaW9uczogb2JqZWN0IGV4cGVjdGVkXCIpO3QuY3VzdG9tRGltZW5zaW9ucz17fTtmb3IodmFyIG49T2JqZWN0LmtleXMoZS5jdXN0b21EaW1lbnNpb25zKSxyPTA7cjxuLmxlbmd0aDsrK3IpdC5jdXN0b21EaW1lbnNpb25zW25bcl1dPVN0cmluZyhlLmN1c3RvbURpbWVuc2lvbnNbbltyXV0pfWlmKGUudmFsdWVzKXtpZighQXJyYXkuaXNBcnJheShlLnZhbHVlcykpdGhyb3cgVHlwZUVycm9yKFwiLk1ldHJpYy52YWx1ZXM6IGFycmF5IGV4cGVjdGVkXCIpO2Zvcih0LnZhbHVlcz1bXSxyPTA7cjxlLnZhbHVlcy5sZW5ndGg7KytyKXMuTG9uZz8odC52YWx1ZXNbcl09cy5Mb25nLmZyb21WYWx1ZShlLnZhbHVlc1tyXSkpLnVuc2lnbmVkPSExOlwic3RyaW5nXCI9PXR5cGVvZiBlLnZhbHVlc1tyXT90LnZhbHVlc1tyXT1wYXJzZUludChlLnZhbHVlc1tyXSwxMCk6XCJudW1iZXJcIj09dHlwZW9mIGUudmFsdWVzW3JdP3QudmFsdWVzW3JdPWUudmFsdWVzW3JdOlwib2JqZWN0XCI9PXR5cGVvZiBlLnZhbHVlc1tyXSYmKHQudmFsdWVzW3JdPW5ldyBzLkxvbmdCaXRzKGUudmFsdWVzW3JdLmxvdz4+PjAsZS52YWx1ZXNbcl0uaGlnaD4+PjApLnRvTnVtYmVyKCkpfXJldHVybiB0fSxlLnRvT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dHx8KHQ9e30pO3ZhciBuLHI9e307aWYoKHQuYXJyYXlzfHx0LmRlZmF1bHRzKSYmKHIudmFsdWVzPVtdKSwodC5vYmplY3RzfHx0LmRlZmF1bHRzKSYmKHIuY3VzdG9tRGltZW5zaW9ucz17fSksdC5kZWZhdWx0cyYmKHIucGFydGl0aW9uTmFtZT1cIlwiLHIubWV0cmljTmFtZT1cIlwiKSxudWxsIT1lLnBhcnRpdGlvbk5hbWUmJmUuaGFzT3duUHJvcGVydHkoXCJwYXJ0aXRpb25OYW1lXCIpJiYoci5wYXJ0aXRpb25OYW1lPWUucGFydGl0aW9uTmFtZSksbnVsbCE9ZS5tZXRyaWNOYW1lJiZlLmhhc093blByb3BlcnR5KFwibWV0cmljTmFtZVwiKSYmKHIubWV0cmljTmFtZT1lLm1ldHJpY05hbWUpLGUuY3VzdG9tRGltZW5zaW9ucyYmKG49T2JqZWN0LmtleXMoZS5jdXN0b21EaW1lbnNpb25zKSkubGVuZ3RoKXtyLmN1c3RvbURpbWVuc2lvbnM9e307Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDsrK2kpci5jdXN0b21EaW1lbnNpb25zW25baV1dPWUuY3VzdG9tRGltZW5zaW9uc1tuW2ldXX1pZihlLnZhbHVlcyYmZS52YWx1ZXMubGVuZ3RoKWZvcihyLnZhbHVlcz1bXSxpPTA7aTxlLnZhbHVlcy5sZW5ndGg7KytpKVwibnVtYmVyXCI9PXR5cGVvZiBlLnZhbHVlc1tpXT9yLnZhbHVlc1tpXT10LmxvbmdzPT09U3RyaW5nP1N0cmluZyhlLnZhbHVlc1tpXSk6ZS52YWx1ZXNbaV06ci52YWx1ZXNbaV09dC5sb25ncz09PVN0cmluZz9zLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZS52YWx1ZXNbaV0pOnQubG9uZ3M9PT1OdW1iZXI/bmV3IHMuTG9uZ0JpdHMoZS52YWx1ZXNbaV0ubG93Pj4+MCxlLnZhbHVlc1tpXS5oaWdoPj4+MCkudG9OdW1iZXIoKTplLnZhbHVlc1tpXTtyZXR1cm4gcn0sZS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcyxvLnV0aWwudG9KU09OT3B0aW9ucyl9LGV9KCksYy5NZXRyaWNGcmFtZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7aWYodGhpcy50aW1lcnM9W10sdGhpcy5jb3VudGVycz1bXSx0aGlzLmxldmVscz1bXSxlKWZvcih2YXIgdD1PYmplY3Qua2V5cyhlKSxuPTA7bjx0Lmxlbmd0aDsrK24pbnVsbCE9ZVt0W25dXSYmKHRoaXNbdFtuXV09ZVt0W25dXSl9cmV0dXJuIGUucHJvdG90eXBlLnRpbWVycz1zLmVtcHR5QXJyYXksZS5wcm90b3R5cGUuY291bnRlcnM9cy5lbXB0eUFycmF5LGUucHJvdG90eXBlLmxldmVscz1zLmVtcHR5QXJyYXksZS5wcm90b3R5cGUucHJvdG9jb2xWZXJzaW9uPTAsZS5wcm90b3R5cGUuYnVmZmVyU3RhcnRUaW1lc3RhbXBNaWxsaXM9cy5Mb25nP3MuTG9uZy5mcm9tQml0cygwLDAsITApOjAsZS5wcm90b3R5cGUuYnVmZmVyRW5kVGltZXN0YW1wTWlsbGlzPXMuTG9uZz9zLkxvbmcuZnJvbUJpdHMoMCwwLCEwKTowLGUucHJvdG90eXBlLmFwcFZlcnNpb249bnVsbCxlLnByb3RvdHlwZS5jbGllbnRPc1R5cGU9MCxlLnByb3RvdHlwZS51c2VySWQ9XCJcIixlLmVuY29kZT1mdW5jdGlvbihlLHQpe2lmKHR8fCh0PWEuY3JlYXRlKCkpLG51bGwhPWUudGltZXJzJiZlLnRpbWVycy5sZW5ndGgpZm9yKHZhciBuPTA7bjxlLnRpbWVycy5sZW5ndGg7KytuKWMuTWV0cmljLmVuY29kZShlLnRpbWVyc1tuXSx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtpZihudWxsIT1lLmNvdW50ZXJzJiZlLmNvdW50ZXJzLmxlbmd0aClmb3Iobj0wO248ZS5jb3VudGVycy5sZW5ndGg7KytuKWMuTWV0cmljLmVuY29kZShlLmNvdW50ZXJzW25dLHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpO2lmKG51bGwhPWUubGV2ZWxzJiZlLmxldmVscy5sZW5ndGgpZm9yKG49MDtuPGUubGV2ZWxzLmxlbmd0aDsrK24pYy5NZXRyaWMuZW5jb2RlKGUubGV2ZWxzW25dLHQudWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiBudWxsIT1lLnByb3RvY29sVmVyc2lvbiYmT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoZSxcInByb3RvY29sVmVyc2lvblwiKSYmdC51aW50MzIoMzIpLnVpbnQzMihlLnByb3RvY29sVmVyc2lvbiksbnVsbCE9ZS5idWZmZXJTdGFydFRpbWVzdGFtcE1pbGxpcyYmT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoZSxcImJ1ZmZlclN0YXJ0VGltZXN0YW1wTWlsbGlzXCIpJiZ0LnVpbnQzMig0MCkudWludDY0KGUuYnVmZmVyU3RhcnRUaW1lc3RhbXBNaWxsaXMpLG51bGwhPWUuYnVmZmVyRW5kVGltZXN0YW1wTWlsbGlzJiZPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChlLFwiYnVmZmVyRW5kVGltZXN0YW1wTWlsbGlzXCIpJiZ0LnVpbnQzMig0OCkudWludDY0KGUuYnVmZmVyRW5kVGltZXN0YW1wTWlsbGlzKSxudWxsIT1lLmFwcFZlcnNpb24mJk9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsXCJhcHBWZXJzaW9uXCIpJiZjLkFwcFZlcnNpb24uZW5jb2RlKGUuYXBwVmVyc2lvbix0LnVpbnQzMig1OCkuZm9yaygpKS5sZGVsaW0oKSxudWxsIT1lLmNsaWVudE9zVHlwZSYmT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoZSxcImNsaWVudE9zVHlwZVwiKSYmdC51aW50MzIoNjQpLmludDMyKGUuY2xpZW50T3NUeXBlKSxudWxsIT1lLnVzZXJJZCYmT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoZSxcInVzZXJJZFwiKSYmdC51aW50MzIoNzQpLnN0cmluZyhlLnVzZXJJZCksdH0sZS5mcm9tT2JqZWN0PWZ1bmN0aW9uKGUpe2lmKGUgaW5zdGFuY2VvZiBjLk1ldHJpY0ZyYW1lKXJldHVybiBlO3ZhciB0PW5ldyBjLk1ldHJpY0ZyYW1lO2lmKGUudGltZXJzKXtpZighQXJyYXkuaXNBcnJheShlLnRpbWVycykpdGhyb3cgVHlwZUVycm9yKFwiLk1ldHJpY0ZyYW1lLnRpbWVyczogYXJyYXkgZXhwZWN0ZWRcIik7dC50aW1lcnM9W107Zm9yKHZhciBuPTA7bjxlLnRpbWVycy5sZW5ndGg7KytuKXtpZihcIm9iamVjdFwiIT10eXBlb2YgZS50aW1lcnNbbl0pdGhyb3cgVHlwZUVycm9yKFwiLk1ldHJpY0ZyYW1lLnRpbWVyczogb2JqZWN0IGV4cGVjdGVkXCIpO3QudGltZXJzW25dPWMuTWV0cmljLmZyb21PYmplY3QoZS50aW1lcnNbbl0pfX1pZihlLmNvdW50ZXJzKXtpZighQXJyYXkuaXNBcnJheShlLmNvdW50ZXJzKSl0aHJvdyBUeXBlRXJyb3IoXCIuTWV0cmljRnJhbWUuY291bnRlcnM6IGFycmF5IGV4cGVjdGVkXCIpO2Zvcih0LmNvdW50ZXJzPVtdLG49MDtuPGUuY291bnRlcnMubGVuZ3RoOysrbil7aWYoXCJvYmplY3RcIiE9dHlwZW9mIGUuY291bnRlcnNbbl0pdGhyb3cgVHlwZUVycm9yKFwiLk1ldHJpY0ZyYW1lLmNvdW50ZXJzOiBvYmplY3QgZXhwZWN0ZWRcIik7dC5jb3VudGVyc1tuXT1jLk1ldHJpYy5mcm9tT2JqZWN0KGUuY291bnRlcnNbbl0pfX1pZihlLmxldmVscyl7aWYoIUFycmF5LmlzQXJyYXkoZS5sZXZlbHMpKXRocm93IFR5cGVFcnJvcihcIi5NZXRyaWNGcmFtZS5sZXZlbHM6IGFycmF5IGV4cGVjdGVkXCIpO2Zvcih0LmxldmVscz1bXSxuPTA7bjxlLmxldmVscy5sZW5ndGg7KytuKXtpZihcIm9iamVjdFwiIT10eXBlb2YgZS5sZXZlbHNbbl0pdGhyb3cgVHlwZUVycm9yKFwiLk1ldHJpY0ZyYW1lLmxldmVsczogb2JqZWN0IGV4cGVjdGVkXCIpO3QubGV2ZWxzW25dPWMuTWV0cmljLmZyb21PYmplY3QoZS5sZXZlbHNbbl0pfX1pZihudWxsIT1lLnByb3RvY29sVmVyc2lvbiYmKHQucHJvdG9jb2xWZXJzaW9uPWUucHJvdG9jb2xWZXJzaW9uPj4+MCksbnVsbCE9ZS5idWZmZXJTdGFydFRpbWVzdGFtcE1pbGxpcyYmKHMuTG9uZz8odC5idWZmZXJTdGFydFRpbWVzdGFtcE1pbGxpcz1zLkxvbmcuZnJvbVZhbHVlKGUuYnVmZmVyU3RhcnRUaW1lc3RhbXBNaWxsaXMpKS51bnNpZ25lZD0hMDpcInN0cmluZ1wiPT10eXBlb2YgZS5idWZmZXJTdGFydFRpbWVzdGFtcE1pbGxpcz90LmJ1ZmZlclN0YXJ0VGltZXN0YW1wTWlsbGlzPXBhcnNlSW50KGUuYnVmZmVyU3RhcnRUaW1lc3RhbXBNaWxsaXMsMTApOlwibnVtYmVyXCI9PXR5cGVvZiBlLmJ1ZmZlclN0YXJ0VGltZXN0YW1wTWlsbGlzP3QuYnVmZmVyU3RhcnRUaW1lc3RhbXBNaWxsaXM9ZS5idWZmZXJTdGFydFRpbWVzdGFtcE1pbGxpczpcIm9iamVjdFwiPT10eXBlb2YgZS5idWZmZXJTdGFydFRpbWVzdGFtcE1pbGxpcyYmKHQuYnVmZmVyU3RhcnRUaW1lc3RhbXBNaWxsaXM9bmV3IHMuTG9uZ0JpdHMoZS5idWZmZXJTdGFydFRpbWVzdGFtcE1pbGxpcy5sb3c+Pj4wLGUuYnVmZmVyU3RhcnRUaW1lc3RhbXBNaWxsaXMuaGlnaD4+PjApLnRvTnVtYmVyKCEwKSkpLG51bGwhPWUuYnVmZmVyRW5kVGltZXN0YW1wTWlsbGlzJiYocy5Mb25nPyh0LmJ1ZmZlckVuZFRpbWVzdGFtcE1pbGxpcz1zLkxvbmcuZnJvbVZhbHVlKGUuYnVmZmVyRW5kVGltZXN0YW1wTWlsbGlzKSkudW5zaWduZWQ9ITA6XCJzdHJpbmdcIj09dHlwZW9mIGUuYnVmZmVyRW5kVGltZXN0YW1wTWlsbGlzP3QuYnVmZmVyRW5kVGltZXN0YW1wTWlsbGlzPXBhcnNlSW50KGUuYnVmZmVyRW5kVGltZXN0YW1wTWlsbGlzLDEwKTpcIm51bWJlclwiPT10eXBlb2YgZS5idWZmZXJFbmRUaW1lc3RhbXBNaWxsaXM/dC5idWZmZXJFbmRUaW1lc3RhbXBNaWxsaXM9ZS5idWZmZXJFbmRUaW1lc3RhbXBNaWxsaXM6XCJvYmplY3RcIj09dHlwZW9mIGUuYnVmZmVyRW5kVGltZXN0YW1wTWlsbGlzJiYodC5idWZmZXJFbmRUaW1lc3RhbXBNaWxsaXM9bmV3IHMuTG9uZ0JpdHMoZS5idWZmZXJFbmRUaW1lc3RhbXBNaWxsaXMubG93Pj4+MCxlLmJ1ZmZlckVuZFRpbWVzdGFtcE1pbGxpcy5oaWdoPj4+MCkudG9OdW1iZXIoITApKSksbnVsbCE9ZS5hcHBWZXJzaW9uKXtpZihcIm9iamVjdFwiIT10eXBlb2YgZS5hcHBWZXJzaW9uKXRocm93IFR5cGVFcnJvcihcIi5NZXRyaWNGcmFtZS5hcHBWZXJzaW9uOiBvYmplY3QgZXhwZWN0ZWRcIik7dC5hcHBWZXJzaW9uPWMuQXBwVmVyc2lvbi5mcm9tT2JqZWN0KGUuYXBwVmVyc2lvbil9c3dpdGNoKGUuY2xpZW50T3NUeXBlKXtjYXNlXCJVTktOT1dOX09TX1RZUEVcIjpjYXNlIDA6dC5jbGllbnRPc1R5cGU9MDticmVhaztjYXNlXCJPU19JT1NcIjpjYXNlIDE6dC5jbGllbnRPc1R5cGU9MTticmVhaztjYXNlXCJPU19BTkRST0lEXCI6Y2FzZSAyOnQuY2xpZW50T3NUeXBlPTI7YnJlYWs7Y2FzZVwiT1NfV0VCXCI6Y2FzZSAzOnQuY2xpZW50T3NUeXBlPTN9cmV0dXJuIG51bGwhPWUudXNlcklkJiYodC51c2VySWQ9U3RyaW5nKGUudXNlcklkKSksdH0sZS50b09iamVjdD1mdW5jdGlvbihlLHQpe3R8fCh0PXt9KTt2YXIgbj17fTtpZigodC5hcnJheXN8fHQuZGVmYXVsdHMpJiYobi50aW1lcnM9W10sbi5jb3VudGVycz1bXSxuLmxldmVscz1bXSksdC5kZWZhdWx0cyl7aWYobi5wcm90b2NvbFZlcnNpb249MCxzLkxvbmcpe3ZhciByPW5ldyBzLkxvbmcoMCwwLCEwKTtuLmJ1ZmZlclN0YXJ0VGltZXN0YW1wTWlsbGlzPXQubG9uZ3M9PT1TdHJpbmc/ci50b1N0cmluZygpOnQubG9uZ3M9PT1OdW1iZXI/ci50b051bWJlcigpOnJ9ZWxzZSBuLmJ1ZmZlclN0YXJ0VGltZXN0YW1wTWlsbGlzPXQubG9uZ3M9PT1TdHJpbmc/XCIwXCI6MDtzLkxvbmc/KHI9bmV3IHMuTG9uZygwLDAsITApLG4uYnVmZmVyRW5kVGltZXN0YW1wTWlsbGlzPXQubG9uZ3M9PT1TdHJpbmc/ci50b1N0cmluZygpOnQubG9uZ3M9PT1OdW1iZXI/ci50b051bWJlcigpOnIpOm4uYnVmZmVyRW5kVGltZXN0YW1wTWlsbGlzPXQubG9uZ3M9PT1TdHJpbmc/XCIwXCI6MCxuLmFwcFZlcnNpb249bnVsbCxuLmNsaWVudE9zVHlwZT10LmVudW1zPT09U3RyaW5nP1wiVU5LTk9XTl9PU19UWVBFXCI6MCxuLnVzZXJJZD1cIlwifWlmKGUudGltZXJzJiZlLnRpbWVycy5sZW5ndGgpe24udGltZXJzPVtdO2Zvcih2YXIgaT0wO2k8ZS50aW1lcnMubGVuZ3RoOysraSluLnRpbWVyc1tpXT1jLk1ldHJpYy50b09iamVjdChlLnRpbWVyc1tpXSx0KX1pZihlLmNvdW50ZXJzJiZlLmNvdW50ZXJzLmxlbmd0aClmb3Iobi5jb3VudGVycz1bXSxpPTA7aTxlLmNvdW50ZXJzLmxlbmd0aDsrK2kpbi5jb3VudGVyc1tpXT1jLk1ldHJpYy50b09iamVjdChlLmNvdW50ZXJzW2ldLHQpO2lmKGUubGV2ZWxzJiZlLmxldmVscy5sZW5ndGgpZm9yKG4ubGV2ZWxzPVtdLGk9MDtpPGUubGV2ZWxzLmxlbmd0aDsrK2kpbi5sZXZlbHNbaV09Yy5NZXRyaWMudG9PYmplY3QoZS5sZXZlbHNbaV0sdCk7cmV0dXJuIG51bGwhPWUucHJvdG9jb2xWZXJzaW9uJiZlLmhhc093blByb3BlcnR5KFwicHJvdG9jb2xWZXJzaW9uXCIpJiYobi5wcm90b2NvbFZlcnNpb249ZS5wcm90b2NvbFZlcnNpb24pLG51bGwhPWUuYnVmZmVyU3RhcnRUaW1lc3RhbXBNaWxsaXMmJmUuaGFzT3duUHJvcGVydHkoXCJidWZmZXJTdGFydFRpbWVzdGFtcE1pbGxpc1wiKSYmKFwibnVtYmVyXCI9PXR5cGVvZiBlLmJ1ZmZlclN0YXJ0VGltZXN0YW1wTWlsbGlzP24uYnVmZmVyU3RhcnRUaW1lc3RhbXBNaWxsaXM9dC5sb25ncz09PVN0cmluZz9TdHJpbmcoZS5idWZmZXJTdGFydFRpbWVzdGFtcE1pbGxpcyk6ZS5idWZmZXJTdGFydFRpbWVzdGFtcE1pbGxpczpuLmJ1ZmZlclN0YXJ0VGltZXN0YW1wTWlsbGlzPXQubG9uZ3M9PT1TdHJpbmc/cy5Mb25nLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUuYnVmZmVyU3RhcnRUaW1lc3RhbXBNaWxsaXMpOnQubG9uZ3M9PT1OdW1iZXI/bmV3IHMuTG9uZ0JpdHMoZS5idWZmZXJTdGFydFRpbWVzdGFtcE1pbGxpcy5sb3c+Pj4wLGUuYnVmZmVyU3RhcnRUaW1lc3RhbXBNaWxsaXMuaGlnaD4+PjApLnRvTnVtYmVyKCEwKTplLmJ1ZmZlclN0YXJ0VGltZXN0YW1wTWlsbGlzKSxudWxsIT1lLmJ1ZmZlckVuZFRpbWVzdGFtcE1pbGxpcyYmZS5oYXNPd25Qcm9wZXJ0eShcImJ1ZmZlckVuZFRpbWVzdGFtcE1pbGxpc1wiKSYmKFwibnVtYmVyXCI9PXR5cGVvZiBlLmJ1ZmZlckVuZFRpbWVzdGFtcE1pbGxpcz9uLmJ1ZmZlckVuZFRpbWVzdGFtcE1pbGxpcz10LmxvbmdzPT09U3RyaW5nP1N0cmluZyhlLmJ1ZmZlckVuZFRpbWVzdGFtcE1pbGxpcyk6ZS5idWZmZXJFbmRUaW1lc3RhbXBNaWxsaXM6bi5idWZmZXJFbmRUaW1lc3RhbXBNaWxsaXM9dC5sb25ncz09PVN0cmluZz9zLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZS5idWZmZXJFbmRUaW1lc3RhbXBNaWxsaXMpOnQubG9uZ3M9PT1OdW1iZXI/bmV3IHMuTG9uZ0JpdHMoZS5idWZmZXJFbmRUaW1lc3RhbXBNaWxsaXMubG93Pj4+MCxlLmJ1ZmZlckVuZFRpbWVzdGFtcE1pbGxpcy5oaWdoPj4+MCkudG9OdW1iZXIoITApOmUuYnVmZmVyRW5kVGltZXN0YW1wTWlsbGlzKSxudWxsIT1lLmFwcFZlcnNpb24mJmUuaGFzT3duUHJvcGVydHkoXCJhcHBWZXJzaW9uXCIpJiYobi5hcHBWZXJzaW9uPWMuQXBwVmVyc2lvbi50b09iamVjdChlLmFwcFZlcnNpb24sdCkpLG51bGwhPWUuY2xpZW50T3NUeXBlJiZlLmhhc093blByb3BlcnR5KFwiY2xpZW50T3NUeXBlXCIpJiYobi5jbGllbnRPc1R5cGU9dC5lbnVtcz09PVN0cmluZz9jLk9zVHlwZVtlLmNsaWVudE9zVHlwZV06ZS5jbGllbnRPc1R5cGUpLG51bGwhPWUudXNlcklkJiZlLmhhc093blByb3BlcnR5KFwidXNlcklkXCIpJiYobi51c2VySWQ9ZS51c2VySWQpLG59LGUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsby51dGlsLnRvSlNPTk9wdGlvbnMpfSxlfSgpLGUuZXhwb3J0cz1jfSw1NzMwNTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07dC5fX2VzTW9kdWxlPSEwO3ZhciBpPW4oMTU5NjYpLG89cihuKDc1NDUpKSxhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXRoaXM7dGhpcy5pc0luaXRpYWxpemVkPSExLHRoaXMuaXNNZXRyaWNFbXB0eT1mdW5jdGlvbigpe3JldHVybiFlLm1ldHJpY0NvbGxlY3Rvcnx8ZS5tZXRyaWNDb2xsZWN0b3IuaXNFbXB0eSgpfSx0aGlzLmZsdXNoPWZ1bmN0aW9uKCl7aWYoIWUubWV0cmljQ29sbGVjdG9yfHwhZS5uZXR3b3JrSGFuZGxlcnx8ZS5tZXRyaWNDb2xsZWN0b3IuaXNFbXB0eSgpKXJldHVybiBQcm9taXNlLnJlc29sdmUoKTtvLmRlZmF1bHQubG9nKFwiZmx1c2hpbmcgbWV0cmljc1wiLGUubWV0cmljQ29sbGVjdG9yLm1ldHJpY3MpO3ZhciB0PWUubWV0cmljQ29sbGVjdG9yLmdldFBheWxvYWQoKTtyZXR1cm4gZS5tZXRyaWNDb2xsZWN0b3IuY2xlYXJNZXRyaWNzKCksZS5uZXR3b3JrSGFuZGxlci5zZW5kUmVxdWVzdCh0KX19cmV0dXJuIGUucHJvdG90eXBlLmluaXRpYWxpemU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kZWJ1Z01vZGUsbj12b2lkIDAhPT10JiZ0LHI9ZS5sb2dUaW1lSW50ZXJ2YWwsYT12b2lkIDA9PT1yPzVlMzpyO28uZGVmYXVsdC5zZXREZWJ1Z01vZGUobiksdGhpcy5uZXR3b3JrSGFuZGxlcj1lLm5ldHdvcmtIYW5kbGVyLHRoaXMubWV0cmljQ29sbGVjdG9yPXRoaXMubmV0d29ya0hhbmRsZXIuY29uZmlnLmNvbGxlY3Rvcix0aGlzLnRpbWVySWQ9c2V0SW50ZXJ2YWwodGhpcy5mbHVzaCxhKSxpLmlzSW5XaW5kb3coKSYmd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIix0aGlzLmZsdXNoKSx0aGlzLmlzSW5pdGlhbGl6ZWQ9ITAsby5kZWZhdWx0LmxvZyhcImluaXRpYWxpemluZyBTREsgd2l0aCBjb25maWdcIixlKX0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciBlO28uZGVmYXVsdC5sb2coXCJkZXN0cm95aW5nIFNESy5cIiksdGhpcy50aW1lcklkJiZjbGVhckludGVydmFsKHRoaXMudGltZXJJZCksdGhpcy5oZWFydEJlYXRJZCYmY2xlYXJJbnRlcnZhbCh0aGlzLmhlYXJ0QmVhdElkKSx0aGlzLmlzSW5pdGlhbGl6ZWQ9ITEsbnVsbD09PShlPXRoaXMubWV0cmljQ29sbGVjdG9yKXx8dm9pZCAwPT09ZXx8ZS5jbGVhck1ldHJpY3MoKSxpLmlzSW5XaW5kb3coKSYmd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIix0aGlzLmZsdXNoKX0sZS5wcm90b3R5cGUuaXNSZWFkeT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5pdGlhbGl6ZWR9LGUucHJvdG90eXBlLmluY3JlbWVudD1mdW5jdGlvbihlKXt2YXIgdD1lLm1ldHJpY3NOYW1lLG49ZS5kaW1lbnNpb25zLHI9ZS52YWx1ZSxpPXZvaWQgMD09PXI/MTpyO2lmKHRoaXMuaXNJbml0aWFsaXplZCYmdGhpcy5tZXRyaWNDb2xsZWN0b3Ipe2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGkpKXRocm93IG5ldyBFcnJvcihcInZhbHVlIG11c3QgYmUgYW4gaW50ZWdlciBpbiBpbmNyZW1lbnQuXCIpO3RoaXMubWV0cmljQ29sbGVjdG9yLmluY3JlbWVudCh7bWV0cmljc05hbWU6dCxkaW1lbnNpb25zOm4sdmFsdWU6aX0pLG8uZGVmYXVsdC5sb2coXCJpbmNyZW1lbnQgY291bnRlciBcIit0K1wiIHdpdGggZGltZW5zaW9uIFwiLG4sXCIgd2l0aCB2YWx1ZSBcIixpKX19LGUucHJvdG90eXBlLmFkZEhpc3RvZ3JhbT1mdW5jdGlvbihlKXt2YXIgdD1lLm1ldHJpY3NOYW1lLG49ZS5kaW1lbnNpb25zLHI9ZS52YWx1ZTt0aGlzLmlzSW5pdGlhbGl6ZWQmJnRoaXMubWV0cmljQ29sbGVjdG9yJiYodGhpcy5tZXRyaWNDb2xsZWN0b3IuYWRkSGlzdG9ncmFtKHttZXRyaWNzTmFtZTp0LGRpbWVuc2lvbnM6bix2YWx1ZTpyfSksby5kZWZhdWx0LmxvZyhcImFkZEhpc3RvZ3JhbSBsZXZlbCBcIit0K1wiIHdpdGggZGltZW5zaW9uIFwiLG4sXCIgd2l0aCB2YWx1ZSBcIixyKSl9LGUucHJvdG90eXBlLmFkZFRpbWVyPWZ1bmN0aW9uKGUpe3ZhciB0PWUubWV0cmljc05hbWUsbj1lLmRpbWVuc2lvbnMscj1lLm1pbGxpU2VjO2lmKHRoaXMuaXNJbml0aWFsaXplZCYmdGhpcy5tZXRyaWNDb2xsZWN0b3Ipe2lmKCFOdW1iZXIuaXNJbnRlZ2VyKHIpKXRocm93IG5ldyBFcnJvcihcIm1pbGxpU2VjIG11c3QgYmUgYW4gaW50ZWdlciBpbiBhZGRUaW1lci5cIik7dGhpcy5tZXRyaWNDb2xsZWN0b3IuYWRkVGltZXIoe21ldHJpY3NOYW1lOnQsZGltZW5zaW9uczpuLG1pbGxpU2VjOnJ9KSxvLmRlZmF1bHQubG9nKFwiYWRkVGltZXIgdGltZXIgXCIrdCtcIiB3aXRoIGRpbWVuc2lvbiBcIixuLFwiIHdpdGggbWlsbGlTZWMgXCIscil9fSxlLnByb3RvdHlwZS5nZXRDb2xsZWN0ZWRNZXRyaWNzPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIG51bGw9PT0oZT10aGlzLm1ldHJpY0NvbGxlY3Rvcil8fHZvaWQgMD09PWU/dm9pZCAwOmUubWV0cmljc30sZX0oKTt0LmRlZmF1bHQ9YX0sNzM3MDM6KGUsdCk9Pnt0Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PWZ1bmN0aW9uKCl7fX0sMzY0MjM6KGUsdCk9Pnt0Ll9fZXNNb2R1bGU9ITAsdC5BdXRoVHlwZT12b2lkIDAsdC5BdXRoVHlwZT17TGNhOlwibGNhXCIsV2ViQXR0ZXN0YXRpb246XCJ3ZWJBdHRlc3RhdGlvblwiLE5vbmU6XCJub25lXCJ9fSw4NTMxODooZSx0KT0+e3QuX19lc01vZHVsZT0hMDt2YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLm1ldHJpY3M9dGhpcy5nZXRGcmVzaE1ldHJpY3MoKX1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0RnJlc2hNZXRyaWNzPWZ1bmN0aW9uKCl7cmV0dXJue2NvdW50ZXJzOnt9LHRpbWVyczp7fSxsZXZlbHM6e319fSxlLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIU9iamVjdC5rZXlzKHRoaXMubWV0cmljcy5jb3VudGVycykubGVuZ3RoJiYhT2JqZWN0LmtleXModGhpcy5tZXRyaWNzLnRpbWVycykubGVuZ3RoJiYhT2JqZWN0LmtleXModGhpcy5tZXRyaWNzLmxldmVscykubGVuZ3RofSxlLnByb3RvdHlwZS5jbGVhck1ldHJpY3M9ZnVuY3Rpb24oKXt0aGlzLm1ldHJpY3M9dGhpcy5nZXRGcmVzaE1ldHJpY3MoKX0sZX0oKTt0LmRlZmF1bHQ9bn0sNzQzMDE6KGUsdCk9Pnt0Ll9fZXNNb2R1bGU9ITB9LDEzMTAwOihlLHQpPT57dC5fX2VzTW9kdWxlPSEwfSwxMTcyMTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLGk9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O3QuX19lc01vZHVsZT0hMCx0LkJhc2VOZXR3b3JrSGFuZGxlcj10Lk1ldHJpY0NvbGxlY3Rvcj10LkF1dGhlbnRpY2F0b3I9dC5sb2dnZXI9dC5CYXNlQ2xpZW50PXZvaWQgMCxpKG4oNjYwNjUpLHQpO3ZhciBvPW4oNTczMDUpO3IodCxvLFwiZGVmYXVsdFwiLFwiQmFzZUNsaWVudFwiKTt2YXIgYT1uKDc1NDUpO3IodCxhLFwiZGVmYXVsdFwiLFwibG9nZ2VyXCIpLGkobigzNjQyMyksdCk7dmFyIHM9big3MzcwMyk7cih0LHMsXCJkZWZhdWx0XCIsXCJBdXRoZW50aWNhdG9yXCIpO3ZhciBjPW4oODUzMTgpO3IodCxjLFwiZGVmYXVsdFwiLFwiTWV0cmljQ29sbGVjdG9yXCIpLGkobig3NDMwMSksdCksaShuKDEzMTAwKSx0KTt2YXIgbD1uKDE3MTE5KTtyKHQsbCxcImRlZmF1bHRcIixcIkJhc2VOZXR3b3JrSGFuZGxlclwiKX0sNzU0NTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMmJnRoaXMuX19yZWFkfHxmdW5jdGlvbihlLHQpe3ZhciBuPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdO2lmKCFuKXJldHVybiBlO3ZhciByLGksbz1uLmNhbGwoZSksYT1bXTt0cnl7Zm9yKDsodm9pZCAwPT09dHx8dC0tID4wKSYmIShyPW8ubmV4dCgpKS5kb25lOylhLnB1c2goci52YWx1ZSl9Y2F0Y2goZSl7aT17ZXJyb3I6ZX19ZmluYWxseXt0cnl7ciYmIXIuZG9uZSYmKG49by5yZXR1cm4pJiZuLmNhbGwobyl9ZmluYWxseXtpZihpKXRocm93IGkuZXJyb3J9fXJldHVybiBhfSxyPXRoaXMmJnRoaXMuX19zcHJlYWRBcnJheXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MCxyPXQubGVuZ3RoLGk9ZS5sZW5ndGg7bjxyO24rKyxpKyspZVtpXT10W25dO3JldHVybiBlfTt0Ll9fZXNNb2R1bGU9ITA7dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIGU9dGhpczt0aGlzLmxvZz1mdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxpPTA7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl0W2ldPWFyZ3VtZW50c1tpXTtlLmRlYnVnTW9kZSYmY29uc29sZS5sb2cuYXBwbHkoY29uc29sZSxyKFtcIltNZXRyaWNzIFNES11cIl0sbih0KSkpfX1yZXR1cm4gZS5wcm90b3R5cGUuc2V0RGVidWdNb2RlPWZ1bmN0aW9uKGUpe3RoaXMuZGVidWdNb2RlPWV9LGV9KCk7dC5kZWZhdWx0PW5ldyBpfSwxNzExOTooZSx0KT0+e3QuX19lc01vZHVsZT0hMCx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7dGhpcy5jb25maWc9ZX19LDc2ODU5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPXRoaXMmJnRoaXMuX19leHRlbmRzfHwocj1mdW5jdGlvbihlLHQpe3JldHVybiByPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pJiYoZVtuXT10W25dKX0scihlLHQpfSxmdW5jdGlvbihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiK1N0cmluZyh0KStcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPWV9cihlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KG4ucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBuKX0pLG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07dC5fX2VzTW9kdWxlPSEwLHQuQnJvd3Nlck5ldHdvcmtIYW5kbGVyPXZvaWQgMDt2YXIgYT1vKG4oNzU0NSkpLHM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIGkodCxlKSx0LnByb3RvdHlwZS5zZW5kUmVxdWVzdD1mdW5jdGlvbihlKXt2YXIgdD1uZXcgWE1MSHR0cFJlcXVlc3Qsbj10aGlzLmNvbmZpZyxyPW4uYXV0aFR5cGUsaT1uLmF1dGhlbnRpY2F0b3Isbz1uLnByb3RvY29sLHM9bi5ob3N0LGM9bi5wYXRoLGw9bi5oZWFkZXJzO3JldHVybiBpLmF1dGhSZXF1ZXN0KHIsZSxsKS50aGVuKChmdW5jdGlvbihuKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsaSl7dmFyIGw9bytcIi8vXCIrcytjO3Qub3BlbihcIlBPU1RcIixsLCEwKSxPYmplY3Qua2V5cyhuKS5mb3JFYWNoKChmdW5jdGlvbihlKXt0LnNldFJlcXVlc3RIZWFkZXIoZSxuW2VdKX0pKSx0Lm9ubG9hZD1mdW5jdGlvbigpe2EuZGVmYXVsdC5sb2coXCJSZWNlaXZlZCByZXNwb25zZSBmcm9tIG1ldHJpY3Mgc2VydmVyLiBTdGF0dXMgY29kZTpcIix0aGlzLnN0YXR1cyx0LnN0YXR1c1RleHQpLHRoaXMuc3RhdHVzPj0yMDAmJnRoaXMuc3RhdHVzPDMwMD9yKCk6aSh7c3RhdHVzOnRoaXMuc3RhdHVzLHN0YXR1c1RleHQ6dC5zdGF0dXNUZXh0fSl9LHQub25lcnJvcj1mdW5jdGlvbigpe2EuZGVmYXVsdC5sb2coXCJGYWlsZWQgdG8gc2VuZCByZXF1ZXN0XCIsdCksaSh7c3RhdHVzOnRoaXMuc3RhdHVzLHN0YXR1c1RleHQ6dC5zdGF0dXNUZXh0fSl9LHQuc2VuZChlKX0pKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7YS5kZWZhdWx0LmxvZyhcIkdvdCBlcnJvciB3aGVuIHNlbmRpbmcgcmVxdWVzdDpcIixlKX0pKX0sdH0obyhuKDE3MTE5KSkuZGVmYXVsdCk7dC5Ccm93c2VyTmV0d29ya0hhbmRsZXI9cyx0LmRlZmF1bHQ9c30sOTU5MzA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHI9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJihlW25dPXRbbl0pfSxyKGUsdCl9LGZ1bmN0aW9uKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIrU3RyaW5nKHQpK1wiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9ZX1yKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KToobi5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IG4pfSksbz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTt0Ll9fZXNNb2R1bGU9ITAsdC5GZXRjaE5ldHdvcmtIYW5kbGVyPXZvaWQgMDt2YXIgYT1vKG4oNzU0NSkpLHM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIGkodCxlKSx0LnByb3RvdHlwZS5zZW5kUmVxdWVzdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNvbmZpZyxuPXQuYXV0aFR5cGUscj10LmF1dGhlbnRpY2F0b3IsaT10LnByb3RvY29sLG89dC5ob3N0LHM9dC5wYXRoLGM9dC5oZWFkZXJzO3JldHVybiByLmF1dGhSZXF1ZXN0KG4sZSxjKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4scil7dmFyIGM9aStcIi8vXCIrbytzO3JldHVybiBzZWxmLmZldGNoKGMse21ldGhvZDpcIlBPU1RcIixoZWFkZXJzOnQsYm9keTplfSkudGhlbigoZnVuY3Rpb24oZSl7YS5kZWZhdWx0LmxvZyhcIlJlY2VpdmVkIHJlc3BvbnNlIGZyb20gbWV0cmljcyBzZXJ2ZXIuIFN0YXR1cyBjb2RlOlwiLGUuc3RhdHVzLGUuc3RhdHVzVGV4dCksZS5vaz9uKCk6cih7c3RhdHVzOmUuc3RhdHVzLHN0YXR1c1RleHQ6ZS5zdGF0dXNUZXh0fSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3Ioe3N0YXR1czotMSxzdGF0dXNUZXh0OmUubWVzc2FnZX0pfSkpfSkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXthLmRlZmF1bHQubG9nKFwiR290IGVycm9yIHdoZW4gc2VuZGluZyByZXF1ZXN0OlwiLGUpfSkpfSx0fShvKG4oMTcxMTkpKS5kZWZhdWx0KTt0LkZldGNoTmV0d29ya0hhbmRsZXI9cyx0LmRlZmF1bHQ9c30sNjYwNjU6KGUsdCk9Pnt0Ll9fZXNNb2R1bGU9ITB9LDI2Njk4OmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyYmdGhpcy5fX3JlYWR8fGZ1bmN0aW9uKGUsdCl7dmFyIG49XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl07aWYoIW4pcmV0dXJuIGU7dmFyIHIsaSxvPW4uY2FsbChlKSxhPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT10fHx0LS0gPjApJiYhKHI9by5uZXh0KCkpLmRvbmU7KWEucHVzaChyLnZhbHVlKX1jYXRjaChlKXtpPXtlcnJvcjplfX1maW5hbGx5e3RyeXtyJiYhci5kb25lJiYobj1vLnJldHVybikmJm4uY2FsbChvKX1maW5hbGx5e2lmKGkpdGhyb3cgaS5lcnJvcn19cmV0dXJuIGF9LHI9dGhpcyYmdGhpcy5fX3NwcmVhZEFycmF5fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLHI9dC5sZW5ndGgsaT1lLmxlbmd0aDtuPHI7bisrLGkrKyllW2ldPXRbbl07cmV0dXJuIGV9O3QuX19lc01vZHVsZT0hMCx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tZXRyaWNzTmFtZSxpPWUuZGltZW5zaW9ucyxvPWUucHJlZml4ZXMsYT1yKFtdLG4odm9pZCAwPT09bz9bXTpvKSk7cmV0dXJuIGEucHVzaCh0KSxpJiZPYmplY3Qua2V5cyhpKS5zb3J0KCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9aVtlXTthLnB1c2goZSx0KX0pKSxhLmpvaW4oXCIuXCIpfX0sMjM1MzY6KGUsdCk9Pnt0Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoodC1lKzEpKStlfX0sNTkxMzY6KGUsdCk9Pnt0Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PWZ1bmN0aW9uKGUpe3JldHVybiBCdWZmZXIuZnJvbShlLFwiYmluYXJ5XCIpLnRvU3RyaW5nKFwiYmFzZTY0XCIpfX0sMTU5NjY6KGUsdCk9Pnt0Ll9fZXNNb2R1bGU9ITAsdC5pc0luQnJvd3Nlcj10LmlzSW5Xb3JrZXI9dC5pc0luV2luZG93PXZvaWQgMCx0LmlzSW5XaW5kb3c9ZnVuY3Rpb24oKXtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93fSx0LmlzSW5Xb3JrZXI9ZnVuY3Rpb24oKXtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGV9LHQuaXNJbkJyb3dzZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdC5pc0luV2luZG93KCl8fHQuaXNJbldvcmtlcigpfX0sNTE5MTE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O3QuX19lc01vZHVsZT0hMDt2YXIgaT1yKG4oMjM1MzYpKTt0LmRlZmF1bHQ9ZnVuY3Rpb24oZSx0KXtpZihlLmxlbmd0aDw9dClyZXR1cm4gZTtmb3IodmFyIG49ZS5zbGljZSgwLHQpLHI9dDtyPGUubGVuZ3RoO3IrKyl7dmFyIG89aS5kZWZhdWx0KDAscik7bzx0JiYobltvXT1lW3JdKX1yZXR1cm4gbn19LDk5MTg4OihlLHQpPT57dC5fX2VzTW9kdWxlPSEwO3ZhciBuPXtoYXNoOmZ1bmN0aW9uKGUsdCl7dmFyIHI9T2JqZWN0LmFzc2lnbih7bXNnRm9ybWF0Olwic3RyaW5nXCIsb3V0Rm9ybWF0OlwiaGV4XCJ9LHQpO3N3aXRjaChyLm1zZ0Zvcm1hdCl7ZGVmYXVsdDpjYXNlXCJzdHJpbmdcIjplPW4udXRmOEVuY29kZShlKTticmVhaztjYXNlXCJoZXgtYnl0ZXNcIjplPW4uaGV4Qnl0ZXNUb1N0cmluZyhlKX1mb3IodmFyIGk9WzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF0sbz1bMTc3OTAzMzcwMywzMTQ0MTM0Mjc3LDEwMTM5MDQyNDIsMjc3MzQ4MDc2MiwxMzU5ODkzMTE5LDI2MDA4MjI5MjQsNTI4NzM0NjM1LDE1NDE0NTkyMjVdLGE9KGUrPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI4KSkubGVuZ3RoLzQrMixzPU1hdGguY2VpbChhLzE2KSxjPW5ldyBBcnJheShzKSxsPTA7bDxzO2wrKyl7Y1tsXT1uZXcgQXJyYXkoMTYpO2Zvcih2YXIgdT0wO3U8MTY7dSsrKWNbbF1bdV09ZS5jaGFyQ29kZUF0KDY0KmwrNCp1KTw8MjR8ZS5jaGFyQ29kZUF0KDY0KmwrNCp1KzEpPDwxNnxlLmNoYXJDb2RlQXQoNjQqbCs0KnUrMik8PDh8ZS5jaGFyQ29kZUF0KDY0KmwrNCp1KzMpfXZhciBkPTgqKGUubGVuZ3RoLTEpL01hdGgucG93KDIsMzIpLGY9OCooZS5sZW5ndGgtMSk+Pj4wO2ZvcihjW3MtMV1bMTRdPU1hdGguZmxvb3IoZCksY1tzLTFdWzE1XT1mLGw9MDtsPHM7bCsrKXtmb3IodmFyIHA9bmV3IEFycmF5KDY0KSxtPTA7bTwxNjttKyspcFttXT1jW2xdW21dO2ZvcihtPTE2O208NjQ7bSsrKXBbbV09bi5cdTAzYzMxKHBbbS0yXSkrcFttLTddK24uXHUwM2MzMChwW20tMTVdKStwW20tMTZdPj4+MDt2YXIgaD1vWzBdLHY9b1sxXSxnPW9bMl0seT1vWzNdLEU9b1s0XSxfPW9bNV0sST1vWzZdLFM9b1s3XTtmb3IobT0wO208NjQ7bSsrKXt2YXIgYj1TK24uXHUwM2EzMShFKStuLkNoKEUsXyxJKStpW21dK3BbbV0sVD1uLlx1MDNhMzAoaCkrbi5NYWooaCx2LGcpO1M9SSxJPV8sXz1FLEU9eStiPj4+MCx5PWcsZz12LHY9aCxoPWIrVD4+PjB9b1swXT1vWzBdK2g+Pj4wLG9bMV09b1sxXSt2Pj4+MCxvWzJdPW9bMl0rZz4+PjAsb1szXT1vWzNdK3k+Pj4wLG9bNF09b1s0XStFPj4+MCxvWzVdPW9bNV0rXz4+PjAsb1s2XT1vWzZdK0k+Pj4wLG9bN109b1s3XStTPj4+MH1mb3IoUz0wO1M8by5sZW5ndGg7UysrKW9bU109KFwiMDAwMDAwMDBcIitvW1NdLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTgpO3ZhciBDPVwiaGV4LXdcIj09ci5vdXRGb3JtYXQ/XCIgXCI6XCJcIjtyZXR1cm4gby5qb2luKEMpfSxST1RSOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ+Pj5lfHQ8PDMyLWV9LFx1MDNhMzA6ZnVuY3Rpb24oZSl7cmV0dXJuIG4uUk9UUigyLGUpXm4uUk9UUigxMyxlKV5uLlJPVFIoMjIsZSl9LFx1MDNhMzE6ZnVuY3Rpb24oZSl7cmV0dXJuIG4uUk9UUig2LGUpXm4uUk9UUigxMSxlKV5uLlJPVFIoMjUsZSl9LFx1MDNjMzA6ZnVuY3Rpb24oZSl7cmV0dXJuIG4uUk9UUig3LGUpXm4uUk9UUigxOCxlKV5lPj4+M30sXHUwM2MzMTpmdW5jdGlvbihlKXtyZXR1cm4gbi5ST1RSKDE3LGUpXm4uUk9UUigxOSxlKV5lPj4+MTB9LENoOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSZ0Xn5lJm59LE1hajpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGUmdF5lJm5edCZufSx1dGY4RW5jb2RlOmZ1bmN0aW9uKGUpe3JldHVybiB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZSkpfSxoZXhCeXRlc1RvU3RyaW5nOmZ1bmN0aW9uKGUpe2U9ZS5yZXBsYWNlKFwiIFwiLFwiXCIpO2Zvcih2YXIgdD1cIlwiLG49MDtuPGUubGVuZ3RoO24rPTIpdCs9U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChlLnNsaWNlKG4sbisyKSwxNikpO3JldHVybiB0fX07dC5kZWZhdWx0PW59LDM3NjYxOihlLHQpPT57dmFyIG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5yZXNvbHZlQ29udGVudE9iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQpe3ZhciBuPWJ0b2EoU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGUpKTt0KFwiaHR0cHM6Ly93ZWIuc25hcGNoYXQuY29tL2JvbHQtaHR0cC9yZXNvbHZlP2NvPVwiK3IobikpfSkpfSxlLnByb3RvdHlwZS5yZXNvbHZlQ29udGVudFVybD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQpe3QoZSl9KSl9LGV9KCk7dC5aPW47dmFyIHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKC89L2csXCJcIik7cmV0dXJuKHQ9dC5yZXBsYWNlKC9cXCsvZyxcIi1cIikpLnJlcGxhY2UoL1xcLy9nLFwiX1wiKX19LDMyNTEyOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnByaW50V2FybmluZz12b2lkIDA7dmFyIHI9big4MDk0NyksaT1cImVuLXVzXCI7dC5wcmludFdhcm5pbmc9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9aSksZT1lP2UudG9Mb3dlckNhc2UoKTplO3ZhciB0PXIuZGVmYXVsdFtlXT9yLmRlZmF1bHRbZV06ci5kZWZhdWx0W2ldO2NvbnNvbGUubG9nKFwiJWNcIit0Lndhcm5pbmcsXCJmb250LXNpemU6IDMwcHg7IGNvbG9yOiAjRjYxRjFGOyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRjAwO1wiKSxjb25zb2xlLmxvZyhcIiVjXCIrdC5tZXNzYWdlLFwiZm9udC1zaXplOiAxNnB4OyBjb2xvcjogIzQ2NDY1NjsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRjtcIil9fSw4MDk0NzooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIHI9e1wiYXItYWFcIjpuKDI2MzgxKSxcImJuLWJkXCI6big0ODA0KSxcImJuLWluXCI6bigzNTc5NCksXCJkYS1ka1wiOm4oOTEwNjkpLFwiZGUtZGVcIjpuKDI3MDYpLFwiZWwtZ3JcIjpuKDU2OTg0KSxcImVuLWdiXCI6big1NDIyNyksXCJlbi11c1wiOm4oODgyMzcpLFwiZXMtYXJcIjpuKDE2ODQ2KSxcImVzLWVzXCI6bigzNzk1MyksXCJlcy1teFwiOm4oMjIwNzcpLGVzOm4oODk3NDApLFwiZmktZmlcIjpuKDMzOTE0KSxcImZpbC1waFwiOm4oMzAwNiksXCJmci1mclwiOm4oNTA1MzgpLFwiZ3UtaW5cIjpuKDIxMjA1KSxcImhpLWluXCI6bigyMjM4MiksXCJpZC1pZFwiOm4oMzIyMzUpLFwiaXQtaXRcIjpuKDQzMTM2KSxcImphLWpwXCI6bigyNjg1MSksXCJrbi1pblwiOm4oNzI3MDEpLFwia28ta3JcIjpuKDk3MTU3KSxcIm1sLWluXCI6bigyOTU3MSksXCJtci1pblwiOm4oNzI5NTApLFwibXMtbXlcIjpuKDE4MzA4KSxcIm5iLW5vXCI6bigyNTY2OSksXCJubC1ubFwiOm4oNjQ4OTApLFwicGEtaW5cIjpuKDg4ODk0KSxcInBsLXBsXCI6big0MDUxNyksXCJwdC1iclwiOm4oMzY2NSksXCJwdC1wdFwiOm4oNjg5MSksXCJyby1yb1wiOm4oOTUxOTApLFwicnUtcnVcIjpuKDMxOTM3KSxcInN2LXNlXCI6big4MTIxOSksXCJ0YS1pblwiOm4oNjg0MDkpLFwidGUtaW5cIjpuKDUyMTkyKSxcInRoLXRoXCI6bigyNjczMyksXCJ0ci10clwiOm4oMjkxMzApLFwidXItcGtcIjpuKDU5Nzc3KSxcInZpLXZuXCI6big3OTU0MyksXCJ6aC1jblwiOm4oNDEzOTIpLFwiemgtdHdcIjpuKDIwNzk0KX07dC5kZWZhdWx0PXJ9LDc4OTI0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkJ1ZGdldEFiU3R1ZHk9dC5CdWRnZXRTZWdtZW50SUQ9dm9pZCAwO2NvbnN0IGk9cihuKDQxNTgzKSksbz1yKG4oNjIxMDApKTt2YXIgYTsoYT10LkJ1ZGdldFNlZ21lbnRJRHx8KHQuQnVkZ2V0U2VnbWVudElEPXt9KSlbYS5VTktOT1dOX0JTSUQ9MF09XCJVTktOT1dOX0JTSURcIixhW2EuQlNJRF8xPTFdPVwiQlNJRF8xXCIsYVthLkJTSURfMj0yXT1cIkJTSURfMlwiLGFbYS5CU0lEXzM9M109XCJCU0lEXzNcIixhW2EuQlNJRF80PTRdPVwiQlNJRF80XCIsYVthLkJTSURfNT01XT1cIkJTSURfNVwiLGFbYS5CU0lEXzY9Nl09XCJCU0lEXzZcIixhW2EuQlNJRF83PTddPVwiQlNJRF83XCIsYVthLkJTSURfOD04XT1cIkJTSURfOFwiLGFbYS5CU0lEXzk9OV09XCJCU0lEXzlcIixhW2EuQlNJRF8xMD0xMF09XCJCU0lEXzEwXCIsYVthLkJTSURfQUxMPTExXT1cIkJTSURfQUxMXCIsYVthLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0LkJ1ZGdldEFiU3R1ZHk9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5leHBlcmltZW50SWQmJnQudWludDMyKDEwKS5zdHJpbmcoZS5leHBlcmltZW50SWQpLFwiMFwiIT09ZS5zdHVkeVZlcnNpb24mJnQudWludDMyKDE2KS5pbnQ2NChlLnN0dWR5VmVyc2lvbiksMCE9PWUuYnVkZ2V0U2VnbWVudElkJiZ0LnVpbnQzMigyNCkuaW50MzIoZS5idWRnZXRTZWdtZW50SWQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17ZXhwZXJpbWVudElkOlwiXCIsc3R1ZHlWZXJzaW9uOlwiMFwiLGJ1ZGdldFNlZ21lbnRJZDowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5leHBlcmltZW50SWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS5zdHVkeVZlcnNpb249bi5pbnQ2NCgpLnRvU3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmkuYnVkZ2V0U2VnbWVudElkPW4uaW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2V4cGVyaW1lbnRJZDpcIlwiLHN0dWR5VmVyc2lvbjpcIjBcIixidWRnZXRTZWdtZW50SWQ6MH07cmV0dXJuIHQuZXhwZXJpbWVudElkPWUuZXhwZXJpbWVudElkPz9cIlwiLHQuc3R1ZHlWZXJzaW9uPWUuc3R1ZHlWZXJzaW9uPz9cIjBcIix0LmJ1ZGdldFNlZ21lbnRJZD1lLmJ1ZGdldFNlZ21lbnRJZD8/MCx0fX0sby5kZWZhdWx0LnV0aWwuTG9uZyE9PWkuZGVmYXVsdCYmKG8uZGVmYXVsdC51dGlsLkxvbmc9aS5kZWZhdWx0LG8uZGVmYXVsdC5jb25maWd1cmUoKSl9LDY2MDA0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNsaWVudFJhbmtpbmdTdHVkeT12b2lkIDA7Y29uc3QgaT1yKG4oNjIxMDApKTt0LkNsaWVudFJhbmtpbmdTdHVkeT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLm1vZGVsSWQmJnQudWludDMyKDEwKS5zdHJpbmcoZS5tb2RlbElkKSwwIT09ZS5hdmdUaW1lVmlld2VkV2VpZ2h0JiZ0LnVpbnQzMigyMSkuZmxvYXQoZS5hdmdUaW1lVmlld2VkV2VpZ2h0KSwwIT09ZS5zdGRXZWlnaHQmJnQudWludDMyKDI5KS5mbG9hdChlLnN0ZFdlaWdodCksMCE9PWUuY29uc3RhbnQmJnQudWludDMyKDM3KS5mbG9hdChlLmNvbnN0YW50KSwwIT09ZS50aHJlc2hvbGQmJnQudWludDMyKDQ1KS5mbG9hdChlLnRocmVzaG9sZCksMCE9PWUubnVtU25hcHMmJnQudWludDMyKDQ4KS5pbnQzMihlLm51bVNuYXBzKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e21vZGVsSWQ6XCJcIixhdmdUaW1lVmlld2VkV2VpZ2h0OjAsc3RkV2VpZ2h0OjAsY29uc3RhbnQ6MCx0aHJlc2hvbGQ6MCxudW1TbmFwczowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5tb2RlbElkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOm8uYXZnVGltZVZpZXdlZFdlaWdodD1uLmZsb2F0KCk7YnJlYWs7Y2FzZSAzOm8uc3RkV2VpZ2h0PW4uZmxvYXQoKTticmVhaztjYXNlIDQ6by5jb25zdGFudD1uLmZsb2F0KCk7YnJlYWs7Y2FzZSA1Om8udGhyZXNob2xkPW4uZmxvYXQoKTticmVhaztjYXNlIDY6by5udW1TbmFwcz1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXttb2RlbElkOlwiXCIsYXZnVGltZVZpZXdlZFdlaWdodDowLHN0ZFdlaWdodDowLGNvbnN0YW50OjAsdGhyZXNob2xkOjAsbnVtU25hcHM6MH07cmV0dXJuIHQubW9kZWxJZD1lLm1vZGVsSWQ/P1wiXCIsdC5hdmdUaW1lVmlld2VkV2VpZ2h0PWUuYXZnVGltZVZpZXdlZFdlaWdodD8/MCx0LnN0ZFdlaWdodD1lLnN0ZFdlaWdodD8/MCx0LmNvbnN0YW50PWUuY29uc3RhbnQ/PzAsdC50aHJlc2hvbGQ9ZS50aHJlc2hvbGQ/PzAsdC5udW1TbmFwcz1lLm51bVNuYXBzPz8wLHR9fX0sNjM1Nzg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuUHJlZGljdGlvblN0dWR5PXZvaWQgMDtjb25zdCBpPXIobig0MTU4MykpLG89cihuKDYyMTAwKSk7dC5QcmVkaWN0aW9uU3R1ZHk9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5leHBlcmltZW50SWQmJnQudWludDMyKDEwKS5zdHJpbmcoZS5leHBlcmltZW50SWQpLFwiMFwiIT09ZS5zdHVkeVZlcnNpb24mJnQudWludDMyKDE2KS5pbnQ2NChlLnN0dWR5VmVyc2lvbiksXCJcIiE9PWUubW9kZWxJZCYmdC51aW50MzIoMjYpLnN0cmluZyhlLm1vZGVsSWQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17ZXhwZXJpbWVudElkOlwiXCIsc3R1ZHlWZXJzaW9uOlwiMFwiLG1vZGVsSWQ6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuZXhwZXJpbWVudElkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkuc3R1ZHlWZXJzaW9uPW4uaW50NjQoKS50b1N0cmluZygpO2JyZWFrO2Nhc2UgMzppLm1vZGVsSWQ9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2V4cGVyaW1lbnRJZDpcIlwiLHN0dWR5VmVyc2lvbjpcIjBcIixtb2RlbElkOlwiXCJ9O3JldHVybiB0LmV4cGVyaW1lbnRJZD1lLmV4cGVyaW1lbnRJZD8/XCJcIix0LnN0dWR5VmVyc2lvbj1lLnN0dWR5VmVyc2lvbj8/XCIwXCIsdC5tb2RlbElkPWUubW9kZWxJZD8/XCJcIix0fX0sby5kZWZhdWx0LnV0aWwuTG9uZyE9PWkuZGVmYXVsdCYmKG8uZGVmYXVsdC51dGlsLkxvbmc9aS5kZWZhdWx0LG8uZGVmYXVsdC5jb25maWd1cmUoKSl9LDQ5NTM4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LldlYnZpZXdQcmVmZXRjaFN0dWR5PXZvaWQgMDtjb25zdCBpPXIobig0MTU4MykpLG89cihuKDYyMTAwKSk7dC5XZWJ2aWV3UHJlZmV0Y2hTdHVkeT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmV4cGVyaW1lbnRJZCYmdC51aW50MzIoMTApLnN0cmluZyhlLmV4cGVyaW1lbnRJZCksXCIwXCIhPT1lLnN0dWR5VmVyc2lvbiYmdC51aW50MzIoMTYpLmludDY0KGUuc3R1ZHlWZXJzaW9uKSwwIT09ZS5wZXJjZW50aWxlVGhyZXNob2xkJiZ0LnVpbnQzMigyOSkuZmxvYXQoZS5wZXJjZW50aWxlVGhyZXNob2xkKSwhMD09PWUucHJlZGljdGl2ZVByZWZldGNoRW5hYmxlZCYmdC51aW50MzIoMzIpLmJvb2woZS5wcmVkaWN0aXZlUHJlZmV0Y2hFbmFibGVkKSxcIlwiIT09ZS5tb2RlbElkJiZ0LnVpbnQzMig0Mikuc3RyaW5nKGUubW9kZWxJZCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtleHBlcmltZW50SWQ6XCJcIixzdHVkeVZlcnNpb246XCIwXCIscGVyY2VudGlsZVRocmVzaG9sZDowLHByZWRpY3RpdmVQcmVmZXRjaEVuYWJsZWQ6ITEsbW9kZWxJZDpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5leHBlcmltZW50SWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS5zdHVkeVZlcnNpb249bi5pbnQ2NCgpLnRvU3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmkucGVyY2VudGlsZVRocmVzaG9sZD1uLmZsb2F0KCk7YnJlYWs7Y2FzZSA0OmkucHJlZGljdGl2ZVByZWZldGNoRW5hYmxlZD1uLmJvb2woKTticmVhaztjYXNlIDU6aS5tb2RlbElkPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtleHBlcmltZW50SWQ6XCJcIixzdHVkeVZlcnNpb246XCIwXCIscGVyY2VudGlsZVRocmVzaG9sZDowLHByZWRpY3RpdmVQcmVmZXRjaEVuYWJsZWQ6ITEsbW9kZWxJZDpcIlwifTtyZXR1cm4gdC5leHBlcmltZW50SWQ9ZS5leHBlcmltZW50SWQ/P1wiXCIsdC5zdHVkeVZlcnNpb249ZS5zdHVkeVZlcnNpb24/P1wiMFwiLHQucGVyY2VudGlsZVRocmVzaG9sZD1lLnBlcmNlbnRpbGVUaHJlc2hvbGQ/PzAsdC5wcmVkaWN0aXZlUHJlZmV0Y2hFbmFibGVkPWUucHJlZGljdGl2ZVByZWZldGNoRW5hYmxlZD8/ITEsdC5tb2RlbElkPWUubW9kZWxJZD8/XCJcIix0fX0sby5kZWZhdWx0LnV0aWwuTG9uZyE9PWkuZGVmYXVsdCYmKG8uZGVmYXVsdC51dGlsLkxvbmc9aS5kZWZhdWx0LG8uZGVmYXVsdC5jb25maWd1cmUoKSl9LDk0MjA3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkRwYVN0b3J5QWRNZXRhZGF0YT12b2lkIDA7Y29uc3QgaT1yKG4oNjIxMDApKTt0LkRwYVN0b3J5QWRNZXRhZGF0YT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5wcmV2aWV3Q3JlYXRpdmVSZW5kZXJUeXBlJiZ0LnVpbnQzMig4KS5pbnQzMihlLnByZXZpZXdDcmVhdGl2ZVJlbmRlclR5cGUpLDAhPT1lLmZpcnN0U3ViQ3JlYXRpdmVSZW5kZXJUeXBlJiZ0LnVpbnQzMigxNikuaW50MzIoZS5maXJzdFN1YkNyZWF0aXZlUmVuZGVyVHlwZSksMCE9PWUuYXR0YWNobWVudEFkVHlwZSYmdC51aW50MzIoMjQpLmludDMyKGUuYXR0YWNobWVudEFkVHlwZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXtwcmV2aWV3Q3JlYXRpdmVSZW5kZXJUeXBlOjAsZmlyc3RTdWJDcmVhdGl2ZVJlbmRlclR5cGU6MCxhdHRhY2htZW50QWRUeXBlOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLnByZXZpZXdDcmVhdGl2ZVJlbmRlclR5cGU9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMjpvLmZpcnN0U3ViQ3JlYXRpdmVSZW5kZXJUeXBlPW4uaW50MzIoKTticmVhaztjYXNlIDM6by5hdHRhY2htZW50QWRUeXBlPW4uaW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3ByZXZpZXdDcmVhdGl2ZVJlbmRlclR5cGU6MCxmaXJzdFN1YkNyZWF0aXZlUmVuZGVyVHlwZTowLGF0dGFjaG1lbnRBZFR5cGU6MH07cmV0dXJuIHQucHJldmlld0NyZWF0aXZlUmVuZGVyVHlwZT1lLnByZXZpZXdDcmVhdGl2ZVJlbmRlclR5cGU/PzAsdC5maXJzdFN1YkNyZWF0aXZlUmVuZGVyVHlwZT1lLmZpcnN0U3ViQ3JlYXRpdmVSZW5kZXJUeXBlPz8wLHQuYXR0YWNobWVudEFkVHlwZT1lLmF0dGFjaG1lbnRBZFR5cGU/PzAsdH19fSwzNDYwMzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5BcHBJbnN0YWxsX1BsYXlTdG9yZVBhcmFtc0VudHJ5PXQuQXBwSW5zdGFsbD12b2lkIDA7Y29uc3QgaT1uKDQ0NzA2KSxvPW4oODk4MDkpLGE9cihuKDYyMTAwKSk7dC5BcHBJbnN0YWxsPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUuYW5kcm9pZFBhY2thZ2VJZCYmbi51aW50MzIoMTApLnN0cmluZyhlLmFuZHJvaWRQYWNrYWdlSWQpLFwiXCIhPT1lLmlvc0FwcElkJiZuLnVpbnQzMigxOCkuc3RyaW5nKGUuaW9zQXBwSWQpLFwiXCIhPT1lLmFwcFRpdGxlJiZuLnVpbnQzMigyNikuc3RyaW5nKGUuYXBwVGl0bGUpLHZvaWQgMCE9PWUuaWNvblJlbmRlckluZm8mJmkuTWVkaWFSZW5kZXJJbmZvLmVuY29kZShlLmljb25SZW5kZXJJbmZvLG4udWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpLFwiXCIhPT1lLmlvc0FwcFRpdGxlJiZuLnVpbnQzMig0Mikuc3RyaW5nKGUuaW9zQXBwVGl0bGUpLFwiXCIhPT1lLmFuZHJvaWRBcHBUaXRsZSYmbi51aW50MzIoNTApLnN0cmluZyhlLmFuZHJvaWRBcHBUaXRsZSksdm9pZCAwIT09ZS5pb3NQb3B1bGFyaXR5SW5mbyYmby5BcHBQb3B1bGFyaXR5SW5mby5lbmNvZGUoZS5pb3NQb3B1bGFyaXR5SW5mbyxuLnVpbnQzMig1OCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmFuZHJvaWRQb3B1bGFyaXR5SW5mbyYmby5BcHBQb3B1bGFyaXR5SW5mby5lbmNvZGUoZS5hbmRyb2lkUG9wdWxhcml0eUluZm8sbi51aW50MzIoNjYpLmZvcmsoKSkubGRlbGltKCksT2JqZWN0LmVudHJpZXMoZS5wbGF5U3RvcmVQYXJhbXMpLmZvckVhY2goKGU9PntsZXRbcixpXT1lO3QuQXBwSW5zdGFsbF9QbGF5U3RvcmVQYXJhbXNFbnRyeS5lbmNvZGUoe2tleTpyLHZhbHVlOml9LG4udWludDMyKDc0KS5mb3JrKCkpLmxkZWxpbSgpfSkpLFwiXCIhPT1lLnByb2R1Y3RQYWdlSWQmJm4udWludDMyKDgyKS5zdHJpbmcoZS5wcm9kdWN0UGFnZUlkKSwhMD09PWUuZW5hYmxlU2tvdmVybGF5JiZuLnVpbnQzMig4OCkuYm9vbChlLmVuYWJsZVNrb3ZlcmxheSksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBzPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBjPXthbmRyb2lkUGFja2FnZUlkOlwiXCIsaW9zQXBwSWQ6XCJcIixhcHBUaXRsZTpcIlwiLGljb25SZW5kZXJJbmZvOnZvaWQgMCxpb3NBcHBUaXRsZTpcIlwiLGFuZHJvaWRBcHBUaXRsZTpcIlwiLGlvc1BvcHVsYXJpdHlJbmZvOnZvaWQgMCxhbmRyb2lkUG9wdWxhcml0eUluZm86dm9pZCAwLHBsYXlTdG9yZVBhcmFtczp7fSxwcm9kdWN0UGFnZUlkOlwiXCIsZW5hYmxlU2tvdmVybGF5OiExfTtmb3IoO3IucG9zPHM7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6Yy5hbmRyb2lkUGFja2FnZUlkPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmMuaW9zQXBwSWQ9ci5zdHJpbmcoKTticmVhaztjYXNlIDM6Yy5hcHBUaXRsZT1yLnN0cmluZygpO2JyZWFrO2Nhc2UgNDpjLmljb25SZW5kZXJJbmZvPWkuTWVkaWFSZW5kZXJJbmZvLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgNTpjLmlvc0FwcFRpdGxlPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSA2OmMuYW5kcm9pZEFwcFRpdGxlPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSA3OmMuaW9zUG9wdWxhcml0eUluZm89by5BcHBQb3B1bGFyaXR5SW5mby5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDg6Yy5hbmRyb2lkUG9wdWxhcml0eUluZm89by5BcHBQb3B1bGFyaXR5SW5mby5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDk6Y29uc3Qgbj10LkFwcEluc3RhbGxfUGxheVN0b3JlUGFyYW1zRW50cnkuZGVjb2RlKHIsci51aW50MzIoKSk7dm9pZCAwIT09bi52YWx1ZSYmKGMucGxheVN0b3JlUGFyYW1zW24ua2V5XT1uLnZhbHVlKTticmVhaztjYXNlIDEwOmMucHJvZHVjdFBhZ2VJZD1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMTE6Yy5lbmFibGVTa292ZXJsYXk9ci5ib29sKCk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBjfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXthbmRyb2lkUGFja2FnZUlkOlwiXCIsaW9zQXBwSWQ6XCJcIixhcHBUaXRsZTpcIlwiLGljb25SZW5kZXJJbmZvOnZvaWQgMCxpb3NBcHBUaXRsZTpcIlwiLGFuZHJvaWRBcHBUaXRsZTpcIlwiLGlvc1BvcHVsYXJpdHlJbmZvOnZvaWQgMCxhbmRyb2lkUG9wdWxhcml0eUluZm86dm9pZCAwLHBsYXlTdG9yZVBhcmFtczp7fSxwcm9kdWN0UGFnZUlkOlwiXCIsZW5hYmxlU2tvdmVybGF5OiExfTtyZXR1cm4gdC5hbmRyb2lkUGFja2FnZUlkPWUuYW5kcm9pZFBhY2thZ2VJZD8/XCJcIix0Lmlvc0FwcElkPWUuaW9zQXBwSWQ/P1wiXCIsdC5hcHBUaXRsZT1lLmFwcFRpdGxlPz9cIlwiLHQuaWNvblJlbmRlckluZm89dm9pZCAwIT09ZS5pY29uUmVuZGVySW5mbyYmbnVsbCE9PWUuaWNvblJlbmRlckluZm8/aS5NZWRpYVJlbmRlckluZm8uZnJvbVBhcnRpYWwoZS5pY29uUmVuZGVySW5mbyk6dm9pZCAwLHQuaW9zQXBwVGl0bGU9ZS5pb3NBcHBUaXRsZT8/XCJcIix0LmFuZHJvaWRBcHBUaXRsZT1lLmFuZHJvaWRBcHBUaXRsZT8/XCJcIix0Lmlvc1BvcHVsYXJpdHlJbmZvPXZvaWQgMCE9PWUuaW9zUG9wdWxhcml0eUluZm8mJm51bGwhPT1lLmlvc1BvcHVsYXJpdHlJbmZvP28uQXBwUG9wdWxhcml0eUluZm8uZnJvbVBhcnRpYWwoZS5pb3NQb3B1bGFyaXR5SW5mbyk6dm9pZCAwLHQuYW5kcm9pZFBvcHVsYXJpdHlJbmZvPXZvaWQgMCE9PWUuYW5kcm9pZFBvcHVsYXJpdHlJbmZvJiZudWxsIT09ZS5hbmRyb2lkUG9wdWxhcml0eUluZm8/by5BcHBQb3B1bGFyaXR5SW5mby5mcm9tUGFydGlhbChlLmFuZHJvaWRQb3B1bGFyaXR5SW5mbyk6dm9pZCAwLHQucGxheVN0b3JlUGFyYW1zPU9iamVjdC5lbnRyaWVzKGUucGxheVN0b3JlUGFyYW1zPz97fSkucmVkdWNlKCgoZSx0KT0+e2xldFtuLHJdPXQ7cmV0dXJuIHZvaWQgMCE9PXImJihlW25dPVN0cmluZyhyKSksZX0pLHt9KSx0LnByb2R1Y3RQYWdlSWQ9ZS5wcm9kdWN0UGFnZUlkPz9cIlwiLHQuZW5hYmxlU2tvdmVybGF5PWUuZW5hYmxlU2tvdmVybGF5Pz8hMSx0fX0sdC5BcHBJbnN0YWxsX1BsYXlTdG9yZVBhcmFtc0VudHJ5PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUua2V5JiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUua2V5KSxcIlwiIT09ZS52YWx1ZSYmdC51aW50MzIoMTgpLnN0cmluZyhlLnZhbHVlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2tleTpcIlwiLHZhbHVlOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmtleT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLnZhbHVlPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtrZXk6XCJcIix2YWx1ZTpcIlwifTtyZXR1cm4gdC5rZXk9ZS5rZXk/P1wiXCIsdC52YWx1ZT1lLnZhbHVlPz9cIlwiLHR9fX0sODk4MDk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQXBwUG9wdWxhcml0eUluZm89dm9pZCAwO2NvbnN0IGk9cihuKDYyMTAwKSksbz1uKDUzMDU2KTt0LkFwcFBvcHVsYXJpdHlJbmZvPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUuYXBwUmF0aW5nJiZvLkZsb2F0VmFsdWUuZW5jb2RlKHt2YWx1ZTplLmFwcFJhdGluZ30sdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5hcHBEb3dubG9hZHMmJm8uSW50NjRWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUuYXBwRG93bmxvYWRzfSx0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGE9e2FwcFJhdGluZzp2b2lkIDAsYXBwRG93bmxvYWRzOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmEuYXBwUmF0aW5nPW8uRmxvYXRWYWx1ZS5kZWNvZGUobixuLnVpbnQzMigpKS52YWx1ZTticmVhaztjYXNlIDI6YS5hcHBEb3dubG9hZHM9by5JbnQ2NFZhbHVlLmRlY29kZShuLG4udWludDMyKCkpLnZhbHVlO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17YXBwUmF0aW5nOnZvaWQgMCxhcHBEb3dubG9hZHM6dm9pZCAwfTtyZXR1cm4gdC5hcHBSYXRpbmc9ZS5hcHBSYXRpbmc/P3ZvaWQgMCx0LmFwcERvd25sb2Fkcz1lLmFwcERvd25sb2Fkcz8/dm9pZCAwLHR9fX0sODM2MTE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2lkTWV0YWRhdGFfQ2lkVXJsUGFyYW1zRW50cnk9dC5DaWRNZXRhZGF0YT10LkNpZE1ldGFkYXRhX0V4Yk1vZGU9dm9pZCAwO2NvbnN0IGk9cihuKDYyMTAwKSk7dmFyIG87KG89dC5DaWRNZXRhZGF0YV9FeGJNb2RlfHwodC5DaWRNZXRhZGF0YV9FeGJNb2RlPXt9KSlbby5VTlNFVD0wXT1cIlVOU0VUXCIsb1tvLkRFRkFVTFQ9MV09XCJERUZBVUxUXCIsb1tvLklOX0FQUF9IVE1MX1JFU09MVkU9Ml09XCJJTl9BUFBfSFRNTF9SRVNPTFZFXCIsb1tvLlNVQl9OQVZfT05MWT0zXT1cIlNVQl9OQVZfT05MWVwiLG9bby5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsdC5DaWRNZXRhZGF0YT17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiBPYmplY3QuZW50cmllcyhlLmNpZFVybFBhcmFtcykuZm9yRWFjaCgoZT0+e2xldFtyLGldPWU7dC5DaWRNZXRhZGF0YV9DaWRVcmxQYXJhbXNFbnRyeS5lbmNvZGUoe2tleTpyLHZhbHVlOml9LG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpfSkpLDAhPT1lLmNpZFBhcmFtQXV0b0NvcnJlY3RTZXJ2ZXJSZWRpcmVjdERpc3RhbmNlJiZuLnVpbnQzMigxNikuaW50MzIoZS5jaWRQYXJhbUF1dG9Db3JyZWN0U2VydmVyUmVkaXJlY3REaXN0YW5jZSksMCE9PWUuZXhiTW9kZSYmbi51aW50MzIoMjQpLmludDMyKGUuZXhiTW9kZSksXCJcIiE9PWUuZXhiSW5BcHBIdG1sUmVzb2x2ZUZpbmFsVXJsTWF0Y2hQcmVmaXgmJm4udWludDMyKDM0KS5zdHJpbmcoZS5leGJJbkFwcEh0bWxSZXNvbHZlRmluYWxVcmxNYXRjaFByZWZpeCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBvPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBhPXtjaWRVcmxQYXJhbXM6e30sY2lkUGFyYW1BdXRvQ29ycmVjdFNlcnZlclJlZGlyZWN0RGlzdGFuY2U6MCxleGJNb2RlOjAsZXhiSW5BcHBIdG1sUmVzb2x2ZUZpbmFsVXJsTWF0Y2hQcmVmaXg6XCJcIn07Zm9yKDtyLnBvczxvOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmNvbnN0IG49dC5DaWRNZXRhZGF0YV9DaWRVcmxQYXJhbXNFbnRyeS5kZWNvZGUocixyLnVpbnQzMigpKTt2b2lkIDAhPT1uLnZhbHVlJiYoYS5jaWRVcmxQYXJhbXNbbi5rZXldPW4udmFsdWUpO2JyZWFrO2Nhc2UgMjphLmNpZFBhcmFtQXV0b0NvcnJlY3RTZXJ2ZXJSZWRpcmVjdERpc3RhbmNlPXIuaW50MzIoKTticmVhaztjYXNlIDM6YS5leGJNb2RlPXIuaW50MzIoKTticmVhaztjYXNlIDQ6YS5leGJJbkFwcEh0bWxSZXNvbHZlRmluYWxVcmxNYXRjaFByZWZpeD1yLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17Y2lkVXJsUGFyYW1zOnt9LGNpZFBhcmFtQXV0b0NvcnJlY3RTZXJ2ZXJSZWRpcmVjdERpc3RhbmNlOjAsZXhiTW9kZTowLGV4YkluQXBwSHRtbFJlc29sdmVGaW5hbFVybE1hdGNoUHJlZml4OlwiXCJ9O3JldHVybiB0LmNpZFVybFBhcmFtcz1PYmplY3QuZW50cmllcyhlLmNpZFVybFBhcmFtcz8/e30pLnJlZHVjZSgoKGUsdCk9PntsZXRbbixyXT10O3JldHVybiB2b2lkIDAhPT1yJiYoZVtuXT1TdHJpbmcocikpLGV9KSx7fSksdC5jaWRQYXJhbUF1dG9Db3JyZWN0U2VydmVyUmVkaXJlY3REaXN0YW5jZT1lLmNpZFBhcmFtQXV0b0NvcnJlY3RTZXJ2ZXJSZWRpcmVjdERpc3RhbmNlPz8wLHQuZXhiTW9kZT1lLmV4Yk1vZGU/PzAsdC5leGJJbkFwcEh0bWxSZXNvbHZlRmluYWxVcmxNYXRjaFByZWZpeD1lLmV4YkluQXBwSHRtbFJlc29sdmVGaW5hbFVybE1hdGNoUHJlZml4Pz9cIlwiLHR9fSx0LkNpZE1ldGFkYXRhX0NpZFVybFBhcmFtc0VudHJ5PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUua2V5JiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUua2V5KSxcIlwiIT09ZS52YWx1ZSYmdC51aW50MzIoMTgpLnN0cmluZyhlLnZhbHVlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e2tleTpcIlwiLHZhbHVlOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLmtleT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjpvLnZhbHVlPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtrZXk6XCJcIix2YWx1ZTpcIlwifTtyZXR1cm4gdC5rZXk9ZS5rZXk/P1wiXCIsdC52YWx1ZT1lLnZhbHVlPz9cIlwiLHR9fX0sMjIzOTQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ29va2llSW5mbz10LkNvb2tpZUluZm9fQ29va2llVHlwZT10LkNvb2tpZUluZm9fQ29va2llQ29udGVudFRyYW5zZm9ybWF0aW9uPXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO2Z1bmN0aW9uIG8oKXtyZXR1cm57Y29va2llTmFtZTpcIlwiLGNvb2tpZUNvbnRlbnQ6bmV3IFVpbnQ4QXJyYXksY29va2llQ29udGVudFRyYW5zZm9ybWF0aW9uOjAsY29va2llVHlwZTowfX12YXIgYSxzOyhzPXQuQ29va2llSW5mb19Db29raWVDb250ZW50VHJhbnNmb3JtYXRpb258fCh0LkNvb2tpZUluZm9fQ29va2llQ29udGVudFRyYW5zZm9ybWF0aW9uPXt9KSlbcy5VVEY4X0RFQ09ERT0wXT1cIlVURjhfREVDT0RFXCIsc1tzLkJBU0U2NF9FTkNPREU9MV09XCJCQVNFNjRfRU5DT0RFXCIsc1tzLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwoYT10LkNvb2tpZUluZm9fQ29va2llVHlwZXx8KHQuQ29va2llSW5mb19Db29raWVUeXBlPXt9KSlbYS5VTktOT1dOPTBdPVwiVU5LTk9XTlwiLGFbYS5QUk9EVUNUPTFdPVwiUFJPRFVDVFwiLGFbYS5BRD0yXT1cIkFEXCIsYVthLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0LkNvb2tpZUluZm89e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5jb29raWVOYW1lJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUuY29va2llTmFtZSksMCE9PWUuY29va2llQ29udGVudC5sZW5ndGgmJnQudWludDMyKDE4KS5ieXRlcyhlLmNvb2tpZUNvbnRlbnQpLDAhPT1lLmNvb2tpZUNvbnRlbnRUcmFuc2Zvcm1hdGlvbiYmdC51aW50MzIoMjQpLmludDMyKGUuY29va2llQ29udGVudFRyYW5zZm9ybWF0aW9uKSwwIT09ZS5jb29raWVUeXBlJiZ0LnVpbnQzMigzMikuaW50MzIoZS5jb29raWVUeXBlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGE9bygpO2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLmNvb2tpZU5hbWU9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6YS5jb29raWVDb250ZW50PW4uYnl0ZXMoKTticmVhaztjYXNlIDM6YS5jb29raWVDb250ZW50VHJhbnNmb3JtYXRpb249bi5pbnQzMigpO2JyZWFrO2Nhc2UgNDphLmNvb2tpZVR5cGU9bi5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD1vKCk7cmV0dXJuIHQuY29va2llTmFtZT1lLmNvb2tpZU5hbWU/P1wiXCIsdC5jb29raWVDb250ZW50PWUuY29va2llQ29udGVudD8/bmV3IFVpbnQ4QXJyYXksdC5jb29raWVDb250ZW50VHJhbnNmb3JtYXRpb249ZS5jb29raWVDb250ZW50VHJhbnNmb3JtYXRpb24/PzAsdC5jb29raWVUeXBlPWUuY29va2llVHlwZT8/MCx0fX19LDg4NzA4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkRlZXBsaW5rPXQuRGVlcGxpbmtGYWxsQmFja1R5cGU9dm9pZCAwO2NvbnN0IGk9big0NDcwNiksbz1yKG4oNjIxMDApKTt2YXIgYTsoYT10LkRlZXBsaW5rRmFsbEJhY2tUeXBlfHwodC5EZWVwbGlua0ZhbGxCYWNrVHlwZT17fSkpW2EuREVFTElOS19GQUxMQkFDS19OT05FPTBdPVwiREVFTElOS19GQUxMQkFDS19OT05FXCIsYVthLkRFRUxJTktfRkFMTEJBQ0tfV0VCVklFVz0xXT1cIkRFRUxJTktfRkFMTEJBQ0tfV0VCVklFV1wiLGFbYS5ERUVMSU5LX0ZBTExCQUNLX0FQUF9JU05UQUxMPTJdPVwiREVFTElOS19GQUxMQkFDS19BUFBfSVNOVEFMTFwiLGFbYS5ERUVMSU5LX0ZBTExCQUNLX0RFRkFVTFRfQlJPV1NFUj0zXT1cIkRFRUxJTktfRkFMTEJBQ0tfREVGQVVMVF9CUk9XU0VSXCIsYVthLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0LkRlZXBsaW5rPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUudXJpJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUudXJpKSxcIlwiIT09ZS5hcHBUaXRsZSYmdC51aW50MzIoMTgpLnN0cmluZyhlLmFwcFRpdGxlKSxcIlwiIT09ZS5pb3NBcHBJZCYmdC51aW50MzIoMjYpLnN0cmluZyhlLmlvc0FwcElkKSxcIlwiIT09ZS5hbmRyb2lkUGFja2FnZUlkJiZ0LnVpbnQzMigzNCkuc3RyaW5nKGUuYW5kcm9pZFBhY2thZ2VJZCksXCJcIiE9PWUuZGVlcExpbmtXZWJGYWxsYmFja1VybCYmdC51aW50MzIoNDIpLnN0cmluZyhlLmRlZXBMaW5rV2ViRmFsbGJhY2tVcmwpLDAhPT1lLmRlZXBMaW5rRmFsbGJhY2tUeXBlJiZ0LnVpbnQzMig0OCkuaW50MzIoZS5kZWVwTGlua0ZhbGxiYWNrVHlwZSksdm9pZCAwIT09ZS5pY29uUmVuZGVySW5mbyYmaS5NZWRpYVJlbmRlckluZm8uZW5jb2RlKGUuaWNvblJlbmRlckluZm8sdC51aW50MzIoNTgpLmZvcmsoKSkubGRlbGltKCksXCJcIiE9PWUuaW9zVXJpJiZ0LnVpbnQzMig2Nikuc3RyaW5nKGUuaW9zVXJpKSxcIlwiIT09ZS5pb3NBcHBUaXRsZSYmdC51aW50MzIoNzQpLnN0cmluZyhlLmlvc0FwcFRpdGxlKSxcIlwiIT09ZS5hbmRyb2lkVXJpJiZ0LnVpbnQzMig4Mikuc3RyaW5nKGUuYW5kcm9pZFVyaSksXCJcIiE9PWUuYW5kcm9pZEFwcFRpdGxlJiZ0LnVpbnQzMig5MCkuc3RyaW5nKGUuYW5kcm9pZEFwcFRpdGxlKSxcIlwiIT09ZS5wcm9kdWN0UGFnZUlkJiZ0LnVpbnQzMigxMDYpLnN0cmluZyhlLnByb2R1Y3RQYWdlSWQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgYT17dXJpOlwiXCIsYXBwVGl0bGU6XCJcIixpb3NBcHBJZDpcIlwiLGFuZHJvaWRQYWNrYWdlSWQ6XCJcIixkZWVwTGlua1dlYkZhbGxiYWNrVXJsOlwiXCIsZGVlcExpbmtGYWxsYmFja1R5cGU6MCxpY29uUmVuZGVySW5mbzp2b2lkIDAsaW9zVXJpOlwiXCIsaW9zQXBwVGl0bGU6XCJcIixhbmRyb2lkVXJpOlwiXCIsYW5kcm9pZEFwcFRpdGxlOlwiXCIscHJvZHVjdFBhZ2VJZDpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS51cmk9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6YS5hcHBUaXRsZT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMzphLmlvc0FwcElkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA0OmEuYW5kcm9pZFBhY2thZ2VJZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNTphLmRlZXBMaW5rV2ViRmFsbGJhY2tVcmw9bi5zdHJpbmcoKTticmVhaztjYXNlIDY6YS5kZWVwTGlua0ZhbGxiYWNrVHlwZT1uLmludDMyKCk7YnJlYWs7Y2FzZSA3OmEuaWNvblJlbmRlckluZm89aS5NZWRpYVJlbmRlckluZm8uZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSA4OmEuaW9zVXJpPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA5OmEuaW9zQXBwVGl0bGU9bi5zdHJpbmcoKTticmVhaztjYXNlIDEwOmEuYW5kcm9pZFVyaT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMTE6YS5hbmRyb2lkQXBwVGl0bGU9bi5zdHJpbmcoKTticmVhaztjYXNlIDEzOmEucHJvZHVjdFBhZ2VJZD1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dXJpOlwiXCIsYXBwVGl0bGU6XCJcIixpb3NBcHBJZDpcIlwiLGFuZHJvaWRQYWNrYWdlSWQ6XCJcIixkZWVwTGlua1dlYkZhbGxiYWNrVXJsOlwiXCIsZGVlcExpbmtGYWxsYmFja1R5cGU6MCxpY29uUmVuZGVySW5mbzp2b2lkIDAsaW9zVXJpOlwiXCIsaW9zQXBwVGl0bGU6XCJcIixhbmRyb2lkVXJpOlwiXCIsYW5kcm9pZEFwcFRpdGxlOlwiXCIscHJvZHVjdFBhZ2VJZDpcIlwifTtyZXR1cm4gdC51cmk9ZS51cmk/P1wiXCIsdC5hcHBUaXRsZT1lLmFwcFRpdGxlPz9cIlwiLHQuaW9zQXBwSWQ9ZS5pb3NBcHBJZD8/XCJcIix0LmFuZHJvaWRQYWNrYWdlSWQ9ZS5hbmRyb2lkUGFja2FnZUlkPz9cIlwiLHQuZGVlcExpbmtXZWJGYWxsYmFja1VybD1lLmRlZXBMaW5rV2ViRmFsbGJhY2tVcmw/P1wiXCIsdC5kZWVwTGlua0ZhbGxiYWNrVHlwZT1lLmRlZXBMaW5rRmFsbGJhY2tUeXBlPz8wLHQuaWNvblJlbmRlckluZm89dm9pZCAwIT09ZS5pY29uUmVuZGVySW5mbyYmbnVsbCE9PWUuaWNvblJlbmRlckluZm8/aS5NZWRpYVJlbmRlckluZm8uZnJvbVBhcnRpYWwoZS5pY29uUmVuZGVySW5mbyk6dm9pZCAwLHQuaW9zVXJpPWUuaW9zVXJpPz9cIlwiLHQuaW9zQXBwVGl0bGU9ZS5pb3NBcHBUaXRsZT8/XCJcIix0LmFuZHJvaWRVcmk9ZS5hbmRyb2lkVXJpPz9cIlwiLHQuYW5kcm9pZEFwcFRpdGxlPWUuYW5kcm9pZEFwcFRpdGxlPz9cIlwiLHQucHJvZHVjdFBhZ2VJZD1lLnByb2R1Y3RQYWdlSWQ/P1wiXCIsdH19fSw2MTEyNzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5NZWRpYUxvY2F0aW9uPXQuTWVkaWFMb2NhdGlvblR5cGU9dm9pZCAwO2NvbnN0IGk9cihuKDYyMTAwKSk7ZnVuY3Rpb24gbygpe3JldHVybnttZWRpYUxvY2F0aW9uVHlwZTowLG1lZGlhSW5mbzpuZXcgVWludDhBcnJheX19dmFyIGE7KGE9dC5NZWRpYUxvY2F0aW9uVHlwZXx8KHQuTWVkaWFMb2NhdGlvblR5cGU9e30pKVthLk1lZGlhTG9jYXRpb25UeXBlX05PTkU9MF09XCJNZWRpYUxvY2F0aW9uVHlwZV9OT05FXCIsYVthLk1lZGlhTG9jYXRpb25UeXBlX1pJUD0xXT1cIk1lZGlhTG9jYXRpb25UeXBlX1pJUFwiLGFbYS5NZWRpYUxvY2F0aW9uVHlwZV9ESVNDT1ZFUj0yXT1cIk1lZGlhTG9jYXRpb25UeXBlX0RJU0NPVkVSXCIsYVthLk1lZGlhTG9jYXRpb25UeXBlX1VSTD0zXT1cIk1lZGlhTG9jYXRpb25UeXBlX1VSTFwiLGFbYS5NZWRpYUxvY2F0aW9uVHlwZV9CT0xUPTRdPVwiTWVkaWFMb2NhdGlvblR5cGVfQk9MVFwiLGFbYS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsdC5NZWRpYUxvY2F0aW9uPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLm1lZGlhTG9jYXRpb25UeXBlJiZ0LnVpbnQzMig4KS5pbnQzMihlLm1lZGlhTG9jYXRpb25UeXBlKSwwIT09ZS5tZWRpYUluZm8ubGVuZ3RoJiZ0LnVpbnQzMigxOCkuYnl0ZXMoZS5tZWRpYUluZm8pLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgYT1vKCk7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmEubWVkaWFMb2NhdGlvblR5cGU9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMjphLm1lZGlhSW5mbz1uLmJ5dGVzKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PW8oKTtyZXR1cm4gdC5tZWRpYUxvY2F0aW9uVHlwZT1lLm1lZGlhTG9jYXRpb25UeXBlPz8wLHQubWVkaWFJbmZvPWUubWVkaWFJbmZvPz9uZXcgVWludDhBcnJheSx0fX19LDQ0NzA2OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk1lZGlhUmVuZGVySW5mbz12b2lkIDA7Y29uc3QgaT1uKDYxMTI3KSxvPXIobig2MjEwMCkpO3QuTWVkaWFSZW5kZXJJbmZvPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7MCE9PWUubWVkaWFUeXBlJiZ0LnVpbnQzMig4KS5pbnQzMihlLm1lZGlhVHlwZSk7Zm9yKGNvbnN0IG4gb2YgZS5tZWRpYUxvY2F0aW9ucylpLk1lZGlhTG9jYXRpb24uZW5jb2RlKG4sdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgYT17bWVkaWFUeXBlOjAsbWVkaWFMb2NhdGlvbnM6W119O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLm1lZGlhVHlwZT1uLmludDMyKCk7YnJlYWs7Y2FzZSAyOmEubWVkaWFMb2NhdGlvbnMucHVzaChpLk1lZGlhTG9jYXRpb24uZGVjb2RlKG4sbi51aW50MzIoKSkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17bWVkaWFUeXBlOjAsbWVkaWFMb2NhdGlvbnM6W119O3JldHVybiB0Lm1lZGlhVHlwZT1lLm1lZGlhVHlwZT8/MCx0Lm1lZGlhTG9jYXRpb25zPWUubWVkaWFMb2NhdGlvbnM/Lm1hcCgoZT0+aS5NZWRpYUxvY2F0aW9uLmZyb21QYXJ0aWFsKGUpKSl8fFtdLHR9fX0sNzE1NzY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuT3JnYW5pY0FkVG9rZW49dC5QZHBDb250ZXh0PXQuU3RvcmVDb250ZXh0PXZvaWQgMDtjb25zdCBpPXIobig0MTU4MykpLG89cihuKDYyMTAwKSk7ZnVuY3Rpb24gYSgpe3JldHVybntzdG9yZUlkOm5ldyBVaW50OEFycmF5LGNhdGVnb3J5SWQ6bmV3IFVpbnQ4QXJyYXl9fWZ1bmN0aW9uIHMoKXtyZXR1cm57cHJvZHVjdElkOlwiMFwiLG9yZ2FuaWNBZFRva2VuOm5ldyBVaW50OEFycmF5fX1mdW5jdGlvbiBjKGUpe3JldHVybiBlLnRvU3RyaW5nKCl9dC5TdG9yZUNvbnRleHQ9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUuc3RvcmVJZC5sZW5ndGgmJnQudWludDMyKDEwKS5ieXRlcyhlLnN0b3JlSWQpLDAhPT1lLmNhdGVnb3J5SWQubGVuZ3RoJiZ0LnVpbnQzMigxOCkuYnl0ZXMoZS5jYXRlZ29yeUlkKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9YSgpO2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnN0b3JlSWQ9bi5ieXRlcygpO2JyZWFrO2Nhc2UgMjppLmNhdGVnb3J5SWQ9bi5ieXRlcygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD1hKCk7cmV0dXJuIHQuc3RvcmVJZD1lLnN0b3JlSWQ/P25ldyBVaW50OEFycmF5LHQuY2F0ZWdvcnlJZD1lLmNhdGVnb3J5SWQ/P25ldyBVaW50OEFycmF5LHR9fSx0LlBkcENvbnRleHQ9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIjBcIiE9PWUucHJvZHVjdElkJiZ0LnVpbnQzMig4KS5pbnQ2NChlLnByb2R1Y3RJZCksMCE9PWUub3JnYW5pY0FkVG9rZW4ubGVuZ3RoJiZ0LnVpbnQzMigxOCkuYnl0ZXMoZS5vcmdhbmljQWRUb2tlbiksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXMoKTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5wcm9kdWN0SWQ9YyhuLmludDY0KCkpO2JyZWFrO2Nhc2UgMjppLm9yZ2FuaWNBZFRva2VuPW4uYnl0ZXMoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9cygpO3JldHVybiB0LnByb2R1Y3RJZD1lLnByb2R1Y3RJZD8/XCIwXCIsdC5vcmdhbmljQWRUb2tlbj1lLm9yZ2FuaWNBZFRva2VuPz9uZXcgVWludDhBcnJheSx0fX0sdC5PcmdhbmljQWRUb2tlbj17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO24udWludDMyKDEwKS5mb3JrKCk7Zm9yKGNvbnN0IHQgb2YgZS5wcm9kdWN0SWRzKW4uaW50NjQodCk7cmV0dXJuIG4ubGRlbGltKCksdm9pZCAwIT09ZS5zdG9yZUNvbnRleHQmJnQuU3RvcmVDb250ZXh0LmVuY29kZShlLnN0b3JlQ29udGV4dCxuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGE9e3Byb2R1Y3RJZHM6W10sc3RvcmVDb250ZXh0OnZvaWQgMH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmlmKDI9PSg3JmUpKXtjb25zdCBlPXIudWludDMyKCkrci5wb3M7Zm9yKDtyLnBvczxlOylhLnByb2R1Y3RJZHMucHVzaChjKHIuaW50NjQoKSkpfWVsc2UgYS5wcm9kdWN0SWRzLnB1c2goYyhyLmludDY0KCkpKTticmVhaztjYXNlIDI6YS5zdG9yZUNvbnRleHQ9dC5TdG9yZUNvbnRleHQuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtwcm9kdWN0SWRzOltdLHN0b3JlQ29udGV4dDp2b2lkIDB9O3JldHVybiBuLnByb2R1Y3RJZHM9ZS5wcm9kdWN0SWRzPy5tYXAoKGU9PmUpKXx8W10sbi5zdG9yZUNvbnRleHQ9dm9pZCAwIT09ZS5zdG9yZUNvbnRleHQmJm51bGwhPT1lLnN0b3JlQ29udGV4dD90LlN0b3JlQ29udGV4dC5mcm9tUGFydGlhbChlLnN0b3JlQ29udGV4dCk6dm9pZCAwLG59fSxvLmRlZmF1bHQudXRpbC5Mb25nIT09aS5kZWZhdWx0JiYoby5kZWZhdWx0LnV0aWwuTG9uZz1pLmRlZmF1bHQsby5kZWZhdWx0LmNvbmZpZ3VyZSgpKX0sMjY0NDk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuV2ViVmlldz12b2lkIDA7Y29uc3QgaT1uKDIyMzk0KSxvPXIobig2MjEwMCkpO3QuV2ViVmlldz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO1wiXCIhPT1lLnVybCYmdC51aW50MzIoMTApLnN0cmluZyhlLnVybCk7Zm9yKGNvbnN0IG4gb2YgZS5jb29raWVJbmZvKWkuQ29va2llSW5mby5lbmNvZGUobix0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBhPXt1cmw6XCJcIixjb29raWVJbmZvOltdfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS51cmw9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6YS5jb29raWVJbmZvLnB1c2goaS5Db29raWVJbmZvLmRlY29kZShuLG4udWludDMyKCkpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3VybDpcIlwiLGNvb2tpZUluZm86W119O3JldHVybiB0LnVybD1lLnVybD8/XCJcIix0LmNvb2tpZUluZm89ZS5jb29raWVJbmZvPy5tYXAoKGU9PmkuQ29va2llSW5mby5mcm9tUGFydGlhbChlKSkpfHxbXSx0fX19LDgzNDYyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LldlYlZpZXdBdHRhY2htZW50PXZvaWQgMDtjb25zdCBpPW4oMjY0NDkpLG89big3OSksYT1uKDgzNjExKSxzPW4oNDQ3MDYpLGM9big3MTU3NiksbD1yKG4oNjIxMDApKSx1PW4oNTMwNTYpO3QuV2ViVmlld0F0dGFjaG1lbnQ9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bC5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS53ZWJ2aWV3JiZpLldlYlZpZXcuZW5jb2RlKGUud2Vidmlldyx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSwhMD09PWUuYmxvY2tXZWJ2aWV3UHJlbG9hZGluZyYmdC51aW50MzIoMTYpLmJvb2woZS5ibG9ja1dlYnZpZXdQcmVsb2FkaW5nKSwhMD09PWUuYWxsb3dBdXRvRmlsbCYmdC51aW50MzIoMjQpLmJvb2woZS5hbGxvd0F1dG9GaWxsKSwhMD09PWUuYWxsb3dBcGtEb3dubG9hZCYmdC51aW50MzIoNDApLmJvb2woZS5hbGxvd0Fwa0Rvd25sb2FkKSxcInBkcENvbnRleHRcIj09PWUub3JnYW5pY0NvbnRleHQ/LiRjYXNlJiZjLlBkcENvbnRleHQuZW5jb2RlKGUub3JnYW5pY0NvbnRleHQucGRwQ29udGV4dCx0LnVpbnQzMig1MCkuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS53ZWJCcm93c2VyVHlwZSYmdC51aW50MzIoNTYpLmludDMyKGUud2ViQnJvd3NlclR5cGUpLHZvaWQgMCE9PWUud2Vidmlld01ldGFkYXRhJiZvLldlYlZpZXdNZXRhZGF0YS5lbmNvZGUoZS53ZWJ2aWV3TWV0YWRhdGEsdC51aW50MzIoNjYpLmZvcmsoKSkubGRlbGltKCksITA9PT1lLmFsbG93Q2xpY2tJZCYmdC51aW50MzIoNzIpLmJvb2woZS5hbGxvd0NsaWNrSWQpLCEwPT09ZS5lbmFibGVMaWdodG5pbmdNb2RlSHRtbFByZWZldGNoJiZ0LnVpbnQzMig4MCkuYm9vbChlLmVuYWJsZUxpZ2h0bmluZ01vZGVIdG1sUHJlZmV0Y2gpLHZvaWQgMCE9PWUuZW5hYmxlV2Vidmlld0FkQmFja2dyb3VuZENvbnRpbnVlTG9hZCYmdS5Cb29sVmFsdWUuZW5jb2RlKHt2YWx1ZTplLmVuYWJsZVdlYnZpZXdBZEJhY2tncm91bmRDb250aW51ZUxvYWR9LHQudWludDMyKDkwKS5mb3JrKCkpLmxkZWxpbSgpLCEwPT09ZS5hbGxvd0RlZXBsaW5rJiZ0LnVpbnQzMig5NikuYm9vbChlLmFsbG93RGVlcGxpbmspLHZvaWQgMCE9PWUuY2lkTWV0YWRhdGEmJmEuQ2lkTWV0YWRhdGEuZW5jb2RlKGUuY2lkTWV0YWRhdGEsdC51aW50MzIoMTA2KS5mb3JrKCkpLmxkZWxpbSgpLFwiXCIhPT1lLmRpc3BsYXlhYmxlVXJsJiZ0LnVpbnQzMigxMTQpLnN0cmluZyhlLmRpc3BsYXlhYmxlVXJsKSx2b2lkIDAhPT1lLnByb2ZpbGVJY29uUmVuZGVySW5mbyYmcy5NZWRpYVJlbmRlckluZm8uZW5jb2RlKGUucHJvZmlsZUljb25SZW5kZXJJbmZvLHQudWludDMyKDEyMikuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS53ZWJ2aWV3TGlmZWN5Y2xlRXh0ZW5zaW9uTWluRHdlbGxUaW1lVGhyZXNob2xkTWlsbGlzJiZ0LnVpbnQzMigxMjgpLmludDMyKGUud2Vidmlld0xpZmVjeWNsZUV4dGVuc2lvbk1pbkR3ZWxsVGltZVRocmVzaG9sZE1pbGxpcyksdm9pZCAwIT09ZS53ZWJ2aWV3TGlmZWN5Y2xlRXh0ZW5zaW9uVHRsTWlsbGlzJiZ1LkludDMyVmFsdWUuZW5jb2RlKHt2YWx1ZTplLndlYnZpZXdMaWZlY3ljbGVFeHRlbnNpb25UdGxNaWxsaXN9LHQudWludDMyKDEzOCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBsLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGwuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGQ9e3dlYnZpZXc6dm9pZCAwLGJsb2NrV2Vidmlld1ByZWxvYWRpbmc6ITEsYWxsb3dBdXRvRmlsbDohMSxhbGxvd0Fwa0Rvd25sb2FkOiExLG9yZ2FuaWNDb250ZXh0OnZvaWQgMCx3ZWJCcm93c2VyVHlwZTowLHdlYnZpZXdNZXRhZGF0YTp2b2lkIDAsYWxsb3dDbGlja0lkOiExLGVuYWJsZUxpZ2h0bmluZ01vZGVIdG1sUHJlZmV0Y2g6ITEsZW5hYmxlV2Vidmlld0FkQmFja2dyb3VuZENvbnRpbnVlTG9hZDp2b2lkIDAsYWxsb3dEZWVwbGluazohMSxjaWRNZXRhZGF0YTp2b2lkIDAsZGlzcGxheWFibGVVcmw6XCJcIixwcm9maWxlSWNvblJlbmRlckluZm86dm9pZCAwLHdlYnZpZXdMaWZlY3ljbGVFeHRlbnNpb25NaW5Ed2VsbFRpbWVUaHJlc2hvbGRNaWxsaXM6MCx3ZWJ2aWV3TGlmZWN5Y2xlRXh0ZW5zaW9uVHRsTWlsbGlzOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmQud2Vidmlldz1pLldlYlZpZXcuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOmQuYmxvY2tXZWJ2aWV3UHJlbG9hZGluZz1uLmJvb2woKTticmVhaztjYXNlIDM6ZC5hbGxvd0F1dG9GaWxsPW4uYm9vbCgpO2JyZWFrO2Nhc2UgNTpkLmFsbG93QXBrRG93bmxvYWQ9bi5ib29sKCk7YnJlYWs7Y2FzZSA2OmQub3JnYW5pY0NvbnRleHQ9eyRjYXNlOlwicGRwQ29udGV4dFwiLHBkcENvbnRleHQ6Yy5QZHBDb250ZXh0LmRlY29kZShuLG4udWludDMyKCkpfTticmVhaztjYXNlIDc6ZC53ZWJCcm93c2VyVHlwZT1uLmludDMyKCk7YnJlYWs7Y2FzZSA4OmQud2Vidmlld01ldGFkYXRhPW8uV2ViVmlld01ldGFkYXRhLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgOTpkLmFsbG93Q2xpY2tJZD1uLmJvb2woKTticmVhaztjYXNlIDEwOmQuZW5hYmxlTGlnaHRuaW5nTW9kZUh0bWxQcmVmZXRjaD1uLmJvb2woKTticmVhaztjYXNlIDExOmQuZW5hYmxlV2Vidmlld0FkQmFja2dyb3VuZENvbnRpbnVlTG9hZD11LkJvb2xWYWx1ZS5kZWNvZGUobixuLnVpbnQzMigpKS52YWx1ZTticmVhaztjYXNlIDEyOmQuYWxsb3dEZWVwbGluaz1uLmJvb2woKTticmVhaztjYXNlIDEzOmQuY2lkTWV0YWRhdGE9YS5DaWRNZXRhZGF0YS5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDE0OmQuZGlzcGxheWFibGVVcmw9bi5zdHJpbmcoKTticmVhaztjYXNlIDE1OmQucHJvZmlsZUljb25SZW5kZXJJbmZvPXMuTWVkaWFSZW5kZXJJbmZvLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMTY6ZC53ZWJ2aWV3TGlmZWN5Y2xlRXh0ZW5zaW9uTWluRHdlbGxUaW1lVGhyZXNob2xkTWlsbGlzPW4uaW50MzIoKTticmVhaztjYXNlIDE3OmQud2Vidmlld0xpZmVjeWNsZUV4dGVuc2lvblR0bE1pbGxpcz11LkludDMyVmFsdWUuZGVjb2RlKG4sbi51aW50MzIoKSkudmFsdWU7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBkfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt3ZWJ2aWV3OnZvaWQgMCxibG9ja1dlYnZpZXdQcmVsb2FkaW5nOiExLGFsbG93QXV0b0ZpbGw6ITEsYWxsb3dBcGtEb3dubG9hZDohMSxvcmdhbmljQ29udGV4dDp2b2lkIDAsd2ViQnJvd3NlclR5cGU6MCx3ZWJ2aWV3TWV0YWRhdGE6dm9pZCAwLGFsbG93Q2xpY2tJZDohMSxlbmFibGVMaWdodG5pbmdNb2RlSHRtbFByZWZldGNoOiExLGVuYWJsZVdlYnZpZXdBZEJhY2tncm91bmRDb250aW51ZUxvYWQ6dm9pZCAwLGFsbG93RGVlcGxpbms6ITEsY2lkTWV0YWRhdGE6dm9pZCAwLGRpc3BsYXlhYmxlVXJsOlwiXCIscHJvZmlsZUljb25SZW5kZXJJbmZvOnZvaWQgMCx3ZWJ2aWV3TGlmZWN5Y2xlRXh0ZW5zaW9uTWluRHdlbGxUaW1lVGhyZXNob2xkTWlsbGlzOjAsd2Vidmlld0xpZmVjeWNsZUV4dGVuc2lvblR0bE1pbGxpczp2b2lkIDB9O3JldHVybiB0LndlYnZpZXc9dm9pZCAwIT09ZS53ZWJ2aWV3JiZudWxsIT09ZS53ZWJ2aWV3P2kuV2ViVmlldy5mcm9tUGFydGlhbChlLndlYnZpZXcpOnZvaWQgMCx0LmJsb2NrV2Vidmlld1ByZWxvYWRpbmc9ZS5ibG9ja1dlYnZpZXdQcmVsb2FkaW5nPz8hMSx0LmFsbG93QXV0b0ZpbGw9ZS5hbGxvd0F1dG9GaWxsPz8hMSx0LmFsbG93QXBrRG93bmxvYWQ9ZS5hbGxvd0Fwa0Rvd25sb2FkPz8hMSxcInBkcENvbnRleHRcIj09PWUub3JnYW5pY0NvbnRleHQ/LiRjYXNlJiZ2b2lkIDAhPT1lLm9yZ2FuaWNDb250ZXh0Py5wZHBDb250ZXh0JiZudWxsIT09ZS5vcmdhbmljQ29udGV4dD8ucGRwQ29udGV4dCYmKHQub3JnYW5pY0NvbnRleHQ9eyRjYXNlOlwicGRwQ29udGV4dFwiLHBkcENvbnRleHQ6Yy5QZHBDb250ZXh0LmZyb21QYXJ0aWFsKGUub3JnYW5pY0NvbnRleHQucGRwQ29udGV4dCl9KSx0LndlYkJyb3dzZXJUeXBlPWUud2ViQnJvd3NlclR5cGU/PzAsdC53ZWJ2aWV3TWV0YWRhdGE9dm9pZCAwIT09ZS53ZWJ2aWV3TWV0YWRhdGEmJm51bGwhPT1lLndlYnZpZXdNZXRhZGF0YT9vLldlYlZpZXdNZXRhZGF0YS5mcm9tUGFydGlhbChlLndlYnZpZXdNZXRhZGF0YSk6dm9pZCAwLHQuYWxsb3dDbGlja0lkPWUuYWxsb3dDbGlja0lkPz8hMSx0LmVuYWJsZUxpZ2h0bmluZ01vZGVIdG1sUHJlZmV0Y2g9ZS5lbmFibGVMaWdodG5pbmdNb2RlSHRtbFByZWZldGNoPz8hMSx0LmVuYWJsZVdlYnZpZXdBZEJhY2tncm91bmRDb250aW51ZUxvYWQ9ZS5lbmFibGVXZWJ2aWV3QWRCYWNrZ3JvdW5kQ29udGludWVMb2FkPz92b2lkIDAsdC5hbGxvd0RlZXBsaW5rPWUuYWxsb3dEZWVwbGluaz8/ITEsdC5jaWRNZXRhZGF0YT12b2lkIDAhPT1lLmNpZE1ldGFkYXRhJiZudWxsIT09ZS5jaWRNZXRhZGF0YT9hLkNpZE1ldGFkYXRhLmZyb21QYXJ0aWFsKGUuY2lkTWV0YWRhdGEpOnZvaWQgMCx0LmRpc3BsYXlhYmxlVXJsPWUuZGlzcGxheWFibGVVcmw/P1wiXCIsdC5wcm9maWxlSWNvblJlbmRlckluZm89dm9pZCAwIT09ZS5wcm9maWxlSWNvblJlbmRlckluZm8mJm51bGwhPT1lLnByb2ZpbGVJY29uUmVuZGVySW5mbz9zLk1lZGlhUmVuZGVySW5mby5mcm9tUGFydGlhbChlLnByb2ZpbGVJY29uUmVuZGVySW5mbyk6dm9pZCAwLHQud2Vidmlld0xpZmVjeWNsZUV4dGVuc2lvbk1pbkR3ZWxsVGltZVRocmVzaG9sZE1pbGxpcz1lLndlYnZpZXdMaWZlY3ljbGVFeHRlbnNpb25NaW5Ed2VsbFRpbWVUaHJlc2hvbGRNaWxsaXM/PzAsdC53ZWJ2aWV3TGlmZWN5Y2xlRXh0ZW5zaW9uVHRsTWlsbGlzPWUud2Vidmlld0xpZmVjeWNsZUV4dGVuc2lvblR0bE1pbGxpcz8/dm9pZCAwLHR9fX0sMTU3ODQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQWRJbnNlcnRpb25Db25maWc9dm9pZCAwO2NvbnN0IGk9cihuKDYyMTAwKSksbz1uKDUzMDU2KTt0LkFkSW5zZXJ0aW9uQ29uZmlnPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUubWluU25hcEZyb21TdGFydCYmby5JbnQzMlZhbHVlLmVuY29kZSh7dmFsdWU6ZS5taW5TbmFwRnJvbVN0YXJ0fSx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLm1pblRpbWVGcm9tU3RhcnRTZWNvbmRzJiZvLkZsb2F0VmFsdWUuZW5jb2RlKHt2YWx1ZTplLm1pblRpbWVGcm9tU3RhcnRTZWNvbmRzfSx0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLm1pblN0b3JpZXNGcm9tU3RhcnQmJm8uSW50MzJWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUubWluU3Rvcmllc0Zyb21TdGFydH0sdC51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5taW5TdG9yaWVzQmVmb3JlRW5kJiZvLkludDMyVmFsdWUuZW5jb2RlKHt2YWx1ZTplLm1pblN0b3JpZXNCZWZvcmVFbmR9LHQudWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUubWluU3Rvcmllc0JldHdlZW5BZHMmJm8uSW50MzJWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUubWluU3Rvcmllc0JldHdlZW5BZHN9LHQudWludDMyKDQyKS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUubWluU25hcHNCZXR3ZWVuQWRzJiZvLkludDMyVmFsdWUuZW5jb2RlKHt2YWx1ZTplLm1pblNuYXBzQmV0d2VlbkFkc30sdC51aW50MzIoNTApLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5taW5UaW1lQmV0d2VlbkFkc1NlY29uZHMmJm8uRmxvYXRWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUubWluVGltZUJldHdlZW5BZHNTZWNvbmRzfSx0LnVpbnQzMig1OCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLm1pblNuYXBzQmVmb3JlRW5kJiZvLkludDMyVmFsdWUuZW5jb2RlKHt2YWx1ZTplLm1pblNuYXBzQmVmb3JlRW5kfSx0LnVpbnQzMig2NikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLm1pblRpbWVCZWZvcmVFbmRTZWNvbmRzJiZvLkZsb2F0VmFsdWUuZW5jb2RlKHt2YWx1ZTplLm1pblRpbWVCZWZvcmVFbmRTZWNvbmRzfSx0LnVpbnQzMig3NCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLm1pblRpbWVJbnNlcnRpb25UaHJlc2hvbGRTZWNvbmRzJiZvLkZsb2F0VmFsdWUuZW5jb2RlKHt2YWx1ZTplLm1pblRpbWVJbnNlcnRpb25UaHJlc2hvbGRTZWNvbmRzfSx0LnVpbnQzMig4MikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmdsb2JhbE1pblNuYXBzQmV0d2VlbkFkcyYmby5JbnQzMlZhbHVlLmVuY29kZSh7dmFsdWU6ZS5nbG9iYWxNaW5TbmFwc0JldHdlZW5BZHN9LHQudWludDMyKDkwKS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuZ2xvYmFsTWluVGltZUJldHdlZW5BZHNTZWNvbmRzJiZvLkZsb2F0VmFsdWUuZW5jb2RlKHt2YWx1ZTplLmdsb2JhbE1pblRpbWVCZXR3ZWVuQWRzU2Vjb25kc30sdC51aW50MzIoOTgpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5tYXhTbmFwc051bSYmby5JbnQzMlZhbHVlLmVuY29kZSh7dmFsdWU6ZS5tYXhTbmFwc051bX0sdC51aW50MzIoMTA2KS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgYT17bWluU25hcEZyb21TdGFydDp2b2lkIDAsbWluVGltZUZyb21TdGFydFNlY29uZHM6dm9pZCAwLG1pblN0b3JpZXNGcm9tU3RhcnQ6dm9pZCAwLG1pblN0b3JpZXNCZWZvcmVFbmQ6dm9pZCAwLG1pblN0b3JpZXNCZXR3ZWVuQWRzOnZvaWQgMCxtaW5TbmFwc0JldHdlZW5BZHM6dm9pZCAwLG1pblRpbWVCZXR3ZWVuQWRzU2Vjb25kczp2b2lkIDAsbWluU25hcHNCZWZvcmVFbmQ6dm9pZCAwLG1pblRpbWVCZWZvcmVFbmRTZWNvbmRzOnZvaWQgMCxtaW5UaW1lSW5zZXJ0aW9uVGhyZXNob2xkU2Vjb25kczp2b2lkIDAsZ2xvYmFsTWluU25hcHNCZXR3ZWVuQWRzOnZvaWQgMCxnbG9iYWxNaW5UaW1lQmV0d2VlbkFkc1NlY29uZHM6dm9pZCAwLG1heFNuYXBzTnVtOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmEubWluU25hcEZyb21TdGFydD1vLkludDMyVmFsdWUuZGVjb2RlKG4sbi51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSAyOmEubWluVGltZUZyb21TdGFydFNlY29uZHM9by5GbG9hdFZhbHVlLmRlY29kZShuLG4udWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgMzphLm1pblN0b3JpZXNGcm9tU3RhcnQ9by5JbnQzMlZhbHVlLmRlY29kZShuLG4udWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgNDphLm1pblN0b3JpZXNCZWZvcmVFbmQ9by5JbnQzMlZhbHVlLmRlY29kZShuLG4udWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgNTphLm1pblN0b3JpZXNCZXR3ZWVuQWRzPW8uSW50MzJWYWx1ZS5kZWNvZGUobixuLnVpbnQzMigpKS52YWx1ZTticmVhaztjYXNlIDY6YS5taW5TbmFwc0JldHdlZW5BZHM9by5JbnQzMlZhbHVlLmRlY29kZShuLG4udWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgNzphLm1pblRpbWVCZXR3ZWVuQWRzU2Vjb25kcz1vLkZsb2F0VmFsdWUuZGVjb2RlKG4sbi51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSA4OmEubWluU25hcHNCZWZvcmVFbmQ9by5JbnQzMlZhbHVlLmRlY29kZShuLG4udWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgOTphLm1pblRpbWVCZWZvcmVFbmRTZWNvbmRzPW8uRmxvYXRWYWx1ZS5kZWNvZGUobixuLnVpbnQzMigpKS52YWx1ZTticmVhaztjYXNlIDEwOmEubWluVGltZUluc2VydGlvblRocmVzaG9sZFNlY29uZHM9by5GbG9hdFZhbHVlLmRlY29kZShuLG4udWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgMTE6YS5nbG9iYWxNaW5TbmFwc0JldHdlZW5BZHM9by5JbnQzMlZhbHVlLmRlY29kZShuLG4udWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgMTI6YS5nbG9iYWxNaW5UaW1lQmV0d2VlbkFkc1NlY29uZHM9by5GbG9hdFZhbHVlLmRlY29kZShuLG4udWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgMTM6YS5tYXhTbmFwc051bT1vLkludDMyVmFsdWUuZGVjb2RlKG4sbi51aW50MzIoKSkudmFsdWU7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXttaW5TbmFwRnJvbVN0YXJ0OnZvaWQgMCxtaW5UaW1lRnJvbVN0YXJ0U2Vjb25kczp2b2lkIDAsbWluU3Rvcmllc0Zyb21TdGFydDp2b2lkIDAsbWluU3Rvcmllc0JlZm9yZUVuZDp2b2lkIDAsbWluU3Rvcmllc0JldHdlZW5BZHM6dm9pZCAwLG1pblNuYXBzQmV0d2VlbkFkczp2b2lkIDAsbWluVGltZUJldHdlZW5BZHNTZWNvbmRzOnZvaWQgMCxtaW5TbmFwc0JlZm9yZUVuZDp2b2lkIDAsbWluVGltZUJlZm9yZUVuZFNlY29uZHM6dm9pZCAwLG1pblRpbWVJbnNlcnRpb25UaHJlc2hvbGRTZWNvbmRzOnZvaWQgMCxnbG9iYWxNaW5TbmFwc0JldHdlZW5BZHM6dm9pZCAwLGdsb2JhbE1pblRpbWVCZXR3ZWVuQWRzU2Vjb25kczp2b2lkIDAsbWF4U25hcHNOdW06dm9pZCAwfTtyZXR1cm4gdC5taW5TbmFwRnJvbVN0YXJ0PWUubWluU25hcEZyb21TdGFydD8/dm9pZCAwLHQubWluVGltZUZyb21TdGFydFNlY29uZHM9ZS5taW5UaW1lRnJvbVN0YXJ0U2Vjb25kcz8/dm9pZCAwLHQubWluU3Rvcmllc0Zyb21TdGFydD1lLm1pblN0b3JpZXNGcm9tU3RhcnQ/P3ZvaWQgMCx0Lm1pblN0b3JpZXNCZWZvcmVFbmQ9ZS5taW5TdG9yaWVzQmVmb3JlRW5kPz92b2lkIDAsdC5taW5TdG9yaWVzQmV0d2VlbkFkcz1lLm1pblN0b3JpZXNCZXR3ZWVuQWRzPz92b2lkIDAsdC5taW5TbmFwc0JldHdlZW5BZHM9ZS5taW5TbmFwc0JldHdlZW5BZHM/P3ZvaWQgMCx0Lm1pblRpbWVCZXR3ZWVuQWRzU2Vjb25kcz1lLm1pblRpbWVCZXR3ZWVuQWRzU2Vjb25kcz8/dm9pZCAwLHQubWluU25hcHNCZWZvcmVFbmQ9ZS5taW5TbmFwc0JlZm9yZUVuZD8/dm9pZCAwLHQubWluVGltZUJlZm9yZUVuZFNlY29uZHM9ZS5taW5UaW1lQmVmb3JlRW5kU2Vjb25kcz8/dm9pZCAwLHQubWluVGltZUluc2VydGlvblRocmVzaG9sZFNlY29uZHM9ZS5taW5UaW1lSW5zZXJ0aW9uVGhyZXNob2xkU2Vjb25kcz8/dm9pZCAwLHQuZ2xvYmFsTWluU25hcHNCZXR3ZWVuQWRzPWUuZ2xvYmFsTWluU25hcHNCZXR3ZWVuQWRzPz92b2lkIDAsdC5nbG9iYWxNaW5UaW1lQmV0d2VlbkFkc1NlY29uZHM9ZS5nbG9iYWxNaW5UaW1lQmV0d2VlbkFkc1NlY29uZHM/P3ZvaWQgMCx0Lm1heFNuYXBzTnVtPWUubWF4U25hcHNOdW0/P3ZvaWQgMCx0fX19LDg0NjEzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlZpZXdlZEFkQ29udGV4dD10LlZpZXdTZXNzaW9uQ29udGV4dD10LkFkUmFua2luZ0NvbnRleHQ9dm9pZCAwO2NvbnN0IGk9cihuKDQxNTgzKSksbz1yKG4oNjIxMDApKSxhPW4oNTMwNTYpO3QuQWRSYW5raW5nQ29udGV4dD17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO2Zvcihjb25zdCByIG9mIGUudmlld1Nlc3Npb24pdC5WaWV3U2Vzc2lvbkNvbnRleHQuZW5jb2RlKHIsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7MCE9PWUub3BlcmFUeXBlJiZuLnVpbnQzMigxNikuaW50MzIoZS5vcGVyYVR5cGUpLHZvaWQgMCE9PWUudGltZVNpbmNlRm9yZWdyb3VuZE1pbGxpcyYmYS5JbnQ2NFZhbHVlLmVuY29kZSh7dmFsdWU6ZS50aW1lU2luY2VGb3JlZ3JvdW5kTWlsbGlzfSxuLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKTtmb3IoY29uc3QgdCBvZiBlLmFkT3JnYW5pY1NpZ25hbHMpbi51aW50MzIoMzQpLmJ5dGVzKHQpO3JldHVybiB2b2lkIDAhPT1lLmZvdXJ0aFRhYlRvdGFsVGltZVNwZW50TWlsbGlzJiZhLkludDY0VmFsdWUuZW5jb2RlKHt2YWx1ZTplLmZvdXJ0aFRhYlRvdGFsVGltZVNwZW50TWlsbGlzfSxuLnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmZvdXJ0aFRhYlNlc3Npb25UaW1lU3BlbnRNaWxsaXMmJmEuSW50NjRWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUuZm91cnRoVGFiU2Vzc2lvblRpbWVTcGVudE1pbGxpc30sbi51aW50MzIoNTApLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5mb3VydGhUYWJGcmllbmRTdG9yaWVzVG90YWxWaWV3VGltZU1pbGxpcyYmYS5JbnQ2NFZhbHVlLmVuY29kZSh7dmFsdWU6ZS5mb3VydGhUYWJGcmllbmRTdG9yaWVzVG90YWxWaWV3VGltZU1pbGxpc30sbi51aW50MzIoNTgpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5mb3VydGhUYWJOb25GcmllbmRTdG9yaWVzVG90YWxWaWV3VGltZU1pbGxpcyYmYS5JbnQ2NFZhbHVlLmVuY29kZSh7dmFsdWU6ZS5mb3VydGhUYWJOb25GcmllbmRTdG9yaWVzVG90YWxWaWV3VGltZU1pbGxpc30sbi51aW50MzIoNjYpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5mb3VydGhUYWJGcmllbmRTdG9yaWVzU2Vzc2lvblZpZXdUaW1lTWlsbGlzJiZhLkludDY0VmFsdWUuZW5jb2RlKHt2YWx1ZTplLmZvdXJ0aFRhYkZyaWVuZFN0b3JpZXNTZXNzaW9uVmlld1RpbWVNaWxsaXN9LG4udWludDMyKDc0KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuZm91cnRoVGFiTm9uRnJpZW5kU3Rvcmllc1Nlc3Npb25WaWV3VGltZU1pbGxpcyYmYS5JbnQ2NFZhbHVlLmVuY29kZSh7dmFsdWU6ZS5mb3VydGhUYWJOb25GcmllbmRTdG9yaWVzU2Vzc2lvblZpZXdUaW1lTWlsbGlzfSxuLnVpbnQzMig4MikuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IHM9e3ZpZXdTZXNzaW9uOltdLG9wZXJhVHlwZTowLHRpbWVTaW5jZUZvcmVncm91bmRNaWxsaXM6dm9pZCAwLGFkT3JnYW5pY1NpZ25hbHM6W10sZm91cnRoVGFiVG90YWxUaW1lU3BlbnRNaWxsaXM6dm9pZCAwLGZvdXJ0aFRhYlNlc3Npb25UaW1lU3BlbnRNaWxsaXM6dm9pZCAwLGZvdXJ0aFRhYkZyaWVuZFN0b3JpZXNUb3RhbFZpZXdUaW1lTWlsbGlzOnZvaWQgMCxmb3VydGhUYWJOb25GcmllbmRTdG9yaWVzVG90YWxWaWV3VGltZU1pbGxpczp2b2lkIDAsZm91cnRoVGFiRnJpZW5kU3Rvcmllc1Nlc3Npb25WaWV3VGltZU1pbGxpczp2b2lkIDAsZm91cnRoVGFiTm9uRnJpZW5kU3Rvcmllc1Nlc3Npb25WaWV3VGltZU1pbGxpczp2b2lkIDB9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpzLnZpZXdTZXNzaW9uLnB1c2godC5WaWV3U2Vzc2lvbkNvbnRleHQuZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2Nhc2UgMjpzLm9wZXJhVHlwZT1yLmludDMyKCk7YnJlYWs7Y2FzZSAzOnMudGltZVNpbmNlRm9yZWdyb3VuZE1pbGxpcz1hLkludDY0VmFsdWUuZGVjb2RlKHIsci51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSA0OnMuYWRPcmdhbmljU2lnbmFscy5wdXNoKHIuYnl0ZXMoKSk7YnJlYWs7Y2FzZSA1OnMuZm91cnRoVGFiVG90YWxUaW1lU3BlbnRNaWxsaXM9YS5JbnQ2NFZhbHVlLmRlY29kZShyLHIudWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgNjpzLmZvdXJ0aFRhYlNlc3Npb25UaW1lU3BlbnRNaWxsaXM9YS5JbnQ2NFZhbHVlLmRlY29kZShyLHIudWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgNzpzLmZvdXJ0aFRhYkZyaWVuZFN0b3JpZXNUb3RhbFZpZXdUaW1lTWlsbGlzPWEuSW50NjRWYWx1ZS5kZWNvZGUocixyLnVpbnQzMigpKS52YWx1ZTticmVhaztjYXNlIDg6cy5mb3VydGhUYWJOb25GcmllbmRTdG9yaWVzVG90YWxWaWV3VGltZU1pbGxpcz1hLkludDY0VmFsdWUuZGVjb2RlKHIsci51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSA5OnMuZm91cnRoVGFiRnJpZW5kU3Rvcmllc1Nlc3Npb25WaWV3VGltZU1pbGxpcz1hLkludDY0VmFsdWUuZGVjb2RlKHIsci51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSAxMDpzLmZvdXJ0aFRhYk5vbkZyaWVuZFN0b3JpZXNTZXNzaW9uVmlld1RpbWVNaWxsaXM9YS5JbnQ2NFZhbHVlLmRlY29kZShyLHIudWludDMyKCkpLnZhbHVlO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gc30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17dmlld1Nlc3Npb246W10sb3BlcmFUeXBlOjAsdGltZVNpbmNlRm9yZWdyb3VuZE1pbGxpczp2b2lkIDAsYWRPcmdhbmljU2lnbmFsczpbXSxmb3VydGhUYWJUb3RhbFRpbWVTcGVudE1pbGxpczp2b2lkIDAsZm91cnRoVGFiU2Vzc2lvblRpbWVTcGVudE1pbGxpczp2b2lkIDAsZm91cnRoVGFiRnJpZW5kU3Rvcmllc1RvdGFsVmlld1RpbWVNaWxsaXM6dm9pZCAwLGZvdXJ0aFRhYk5vbkZyaWVuZFN0b3JpZXNUb3RhbFZpZXdUaW1lTWlsbGlzOnZvaWQgMCxmb3VydGhUYWJGcmllbmRTdG9yaWVzU2Vzc2lvblZpZXdUaW1lTWlsbGlzOnZvaWQgMCxmb3VydGhUYWJOb25GcmllbmRTdG9yaWVzU2Vzc2lvblZpZXdUaW1lTWlsbGlzOnZvaWQgMH07cmV0dXJuIG4udmlld1Nlc3Npb249ZS52aWV3U2Vzc2lvbj8ubWFwKChlPT50LlZpZXdTZXNzaW9uQ29udGV4dC5mcm9tUGFydGlhbChlKSkpfHxbXSxuLm9wZXJhVHlwZT1lLm9wZXJhVHlwZT8/MCxuLnRpbWVTaW5jZUZvcmVncm91bmRNaWxsaXM9ZS50aW1lU2luY2VGb3JlZ3JvdW5kTWlsbGlzPz92b2lkIDAsbi5hZE9yZ2FuaWNTaWduYWxzPWUuYWRPcmdhbmljU2lnbmFscz8ubWFwKChlPT5lKSl8fFtdLG4uZm91cnRoVGFiVG90YWxUaW1lU3BlbnRNaWxsaXM9ZS5mb3VydGhUYWJUb3RhbFRpbWVTcGVudE1pbGxpcz8/dm9pZCAwLG4uZm91cnRoVGFiU2Vzc2lvblRpbWVTcGVudE1pbGxpcz1lLmZvdXJ0aFRhYlNlc3Npb25UaW1lU3BlbnRNaWxsaXM/P3ZvaWQgMCxuLmZvdXJ0aFRhYkZyaWVuZFN0b3JpZXNUb3RhbFZpZXdUaW1lTWlsbGlzPWUuZm91cnRoVGFiRnJpZW5kU3Rvcmllc1RvdGFsVmlld1RpbWVNaWxsaXM/P3ZvaWQgMCxuLmZvdXJ0aFRhYk5vbkZyaWVuZFN0b3JpZXNUb3RhbFZpZXdUaW1lTWlsbGlzPWUuZm91cnRoVGFiTm9uRnJpZW5kU3Rvcmllc1RvdGFsVmlld1RpbWVNaWxsaXM/P3ZvaWQgMCxuLmZvdXJ0aFRhYkZyaWVuZFN0b3JpZXNTZXNzaW9uVmlld1RpbWVNaWxsaXM9ZS5mb3VydGhUYWJGcmllbmRTdG9yaWVzU2Vzc2lvblZpZXdUaW1lTWlsbGlzPz92b2lkIDAsbi5mb3VydGhUYWJOb25GcmllbmRTdG9yaWVzU2Vzc2lvblZpZXdUaW1lTWlsbGlzPWUuZm91cnRoVGFiTm9uRnJpZW5kU3Rvcmllc1Nlc3Npb25WaWV3VGltZU1pbGxpcz8/dm9pZCAwLG59fSx0LlZpZXdTZXNzaW9uQ29udGV4dD17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO1wiMFwiIT09ZS5zdGFydFRpbWVzdGFtcE1pbGxpcyYmbi51aW50MzIoOCkuaW50NjQoZS5zdGFydFRpbWVzdGFtcE1pbGxpcyksMCE9PWUudmlld1NvdXJjZSYmbi51aW50MzIoMTYpLmludDMyKGUudmlld1NvdXJjZSksdm9pZCAwIT09ZS50aW1lU2luY2VTZXNzaW9uU3RhcnRNaWxsaXMmJmEuSW50NjRWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUudGltZVNpbmNlU2Vzc2lvblN0YXJ0TWlsbGlzfSxuLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnRvdGFsQWRTbmFwVmlld1RpbWVNaWxsaXMmJmEuSW50NjRWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUudG90YWxBZFNuYXBWaWV3VGltZU1pbGxpc30sbi51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS50b3RhbFNuYXBWaWV3Q291bnQmJmEuSW50MzJWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUudG90YWxTbmFwVmlld0NvdW50fSxuLnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnRvdGFsQWRTbmFwVmlld0NvdW50JiZhLkludDMyVmFsdWUuZW5jb2RlKHt2YWx1ZTplLnRvdGFsQWRTbmFwVmlld0NvdW50fSxuLnVpbnQzMig1MCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnRvdGFsQWRTd2lwZVVwQ291bnQmJmEuSW50MzJWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUudG90YWxBZFN3aXBlVXBDb3VudH0sbi51aW50MzIoNTgpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS50b3RhbFN3aXBlVXBDb3VudCYmYS5JbnQzMlZhbHVlLmVuY29kZSh7dmFsdWU6ZS50b3RhbFN3aXBlVXBDb3VudH0sbi51aW50MzIoNjYpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS50b3RhbEFkTG9uZ2Zvcm1WaWV3VGltZU1pbGxpcyYmYS5JbnQ2NFZhbHVlLmVuY29kZSh7dmFsdWU6ZS50b3RhbEFkTG9uZ2Zvcm1WaWV3VGltZU1pbGxpc30sbi51aW50MzIoNzQpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS50b3RhbExvbmdmb3JtVmlld1RpbWVNaWxsaXMmJmEuSW50NjRWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUudG90YWxMb25nZm9ybVZpZXdUaW1lTWlsbGlzfSxuLnVpbnQzMig4MikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnRvdGFsU3Rvcmllc1ZpZXdDb3VudCYmYS5JbnQzMlZhbHVlLmVuY29kZSh7dmFsdWU6ZS50b3RhbFN0b3JpZXNWaWV3Q291bnR9LG4udWludDMyKDkwKS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuYXZhaWxhYmxlU3Rvcmllc0NvdW50JiZhLkludDMyVmFsdWUuZW5jb2RlKHt2YWx1ZTplLmF2YWlsYWJsZVN0b3JpZXNDb3VudH0sbi51aW50MzIoOTgpLmZvcmsoKSkubGRlbGltKCksMCE9PWUuZXhpdEV2ZW50JiZuLnVpbnQzMigxMDQpLmludDMyKGUuZXhpdEV2ZW50KSx2b2lkIDAhPT1lLmlzTGFzdFNuYXBBZCYmYS5Cb29sVmFsdWUuZW5jb2RlKHt2YWx1ZTplLmlzTGFzdFNuYXBBZH0sbi51aW50MzIoMTE0KS5mb3JrKCkpLmxkZWxpbSgpO2Zvcihjb25zdCByIG9mIGUudmlld2VkQWQpdC5WaWV3ZWRBZENvbnRleHQuZW5jb2RlKHIsbi51aW50MzIoMTIyKS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiBufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IHM9e3N0YXJ0VGltZXN0YW1wTWlsbGlzOlwiMFwiLHZpZXdTb3VyY2U6MCx0aW1lU2luY2VTZXNzaW9uU3RhcnRNaWxsaXM6dm9pZCAwLHRvdGFsQWRTbmFwVmlld1RpbWVNaWxsaXM6dm9pZCAwLHRvdGFsU25hcFZpZXdDb3VudDp2b2lkIDAsdG90YWxBZFNuYXBWaWV3Q291bnQ6dm9pZCAwLHRvdGFsQWRTd2lwZVVwQ291bnQ6dm9pZCAwLHRvdGFsU3dpcGVVcENvdW50OnZvaWQgMCx0b3RhbEFkTG9uZ2Zvcm1WaWV3VGltZU1pbGxpczp2b2lkIDAsdG90YWxMb25nZm9ybVZpZXdUaW1lTWlsbGlzOnZvaWQgMCx0b3RhbFN0b3JpZXNWaWV3Q291bnQ6dm9pZCAwLGF2YWlsYWJsZVN0b3JpZXNDb3VudDp2b2lkIDAsZXhpdEV2ZW50OjAsaXNMYXN0U25hcEFkOnZvaWQgMCx2aWV3ZWRBZDpbXX07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOnMuc3RhcnRUaW1lc3RhbXBNaWxsaXM9ci5pbnQ2NCgpLnRvU3RyaW5nKCk7YnJlYWs7Y2FzZSAyOnMudmlld1NvdXJjZT1yLmludDMyKCk7YnJlYWs7Y2FzZSAzOnMudGltZVNpbmNlU2Vzc2lvblN0YXJ0TWlsbGlzPWEuSW50NjRWYWx1ZS5kZWNvZGUocixyLnVpbnQzMigpKS52YWx1ZTticmVhaztjYXNlIDQ6cy50b3RhbEFkU25hcFZpZXdUaW1lTWlsbGlzPWEuSW50NjRWYWx1ZS5kZWNvZGUocixyLnVpbnQzMigpKS52YWx1ZTticmVhaztjYXNlIDU6cy50b3RhbFNuYXBWaWV3Q291bnQ9YS5JbnQzMlZhbHVlLmRlY29kZShyLHIudWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgNjpzLnRvdGFsQWRTbmFwVmlld0NvdW50PWEuSW50MzJWYWx1ZS5kZWNvZGUocixyLnVpbnQzMigpKS52YWx1ZTticmVhaztjYXNlIDc6cy50b3RhbEFkU3dpcGVVcENvdW50PWEuSW50MzJWYWx1ZS5kZWNvZGUocixyLnVpbnQzMigpKS52YWx1ZTticmVhaztjYXNlIDg6cy50b3RhbFN3aXBlVXBDb3VudD1hLkludDMyVmFsdWUuZGVjb2RlKHIsci51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSA5OnMudG90YWxBZExvbmdmb3JtVmlld1RpbWVNaWxsaXM9YS5JbnQ2NFZhbHVlLmRlY29kZShyLHIudWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgMTA6cy50b3RhbExvbmdmb3JtVmlld1RpbWVNaWxsaXM9YS5JbnQ2NFZhbHVlLmRlY29kZShyLHIudWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgMTE6cy50b3RhbFN0b3JpZXNWaWV3Q291bnQ9YS5JbnQzMlZhbHVlLmRlY29kZShyLHIudWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgMTI6cy5hdmFpbGFibGVTdG9yaWVzQ291bnQ9YS5JbnQzMlZhbHVlLmRlY29kZShyLHIudWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgMTM6cy5leGl0RXZlbnQ9ci5pbnQzMigpO2JyZWFrO2Nhc2UgMTQ6cy5pc0xhc3RTbmFwQWQ9YS5Cb29sVmFsdWUuZGVjb2RlKHIsci51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSAxNTpzLnZpZXdlZEFkLnB1c2godC5WaWV3ZWRBZENvbnRleHQuZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gc30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17c3RhcnRUaW1lc3RhbXBNaWxsaXM6XCIwXCIsdmlld1NvdXJjZTowLHRpbWVTaW5jZVNlc3Npb25TdGFydE1pbGxpczp2b2lkIDAsdG90YWxBZFNuYXBWaWV3VGltZU1pbGxpczp2b2lkIDAsdG90YWxTbmFwVmlld0NvdW50OnZvaWQgMCx0b3RhbEFkU25hcFZpZXdDb3VudDp2b2lkIDAsdG90YWxBZFN3aXBlVXBDb3VudDp2b2lkIDAsdG90YWxTd2lwZVVwQ291bnQ6dm9pZCAwLHRvdGFsQWRMb25nZm9ybVZpZXdUaW1lTWlsbGlzOnZvaWQgMCx0b3RhbExvbmdmb3JtVmlld1RpbWVNaWxsaXM6dm9pZCAwLHRvdGFsU3Rvcmllc1ZpZXdDb3VudDp2b2lkIDAsYXZhaWxhYmxlU3Rvcmllc0NvdW50OnZvaWQgMCxleGl0RXZlbnQ6MCxpc0xhc3RTbmFwQWQ6dm9pZCAwLHZpZXdlZEFkOltdfTtyZXR1cm4gbi5zdGFydFRpbWVzdGFtcE1pbGxpcz1lLnN0YXJ0VGltZXN0YW1wTWlsbGlzPz9cIjBcIixuLnZpZXdTb3VyY2U9ZS52aWV3U291cmNlPz8wLG4udGltZVNpbmNlU2Vzc2lvblN0YXJ0TWlsbGlzPWUudGltZVNpbmNlU2Vzc2lvblN0YXJ0TWlsbGlzPz92b2lkIDAsbi50b3RhbEFkU25hcFZpZXdUaW1lTWlsbGlzPWUudG90YWxBZFNuYXBWaWV3VGltZU1pbGxpcz8/dm9pZCAwLG4udG90YWxTbmFwVmlld0NvdW50PWUudG90YWxTbmFwVmlld0NvdW50Pz92b2lkIDAsbi50b3RhbEFkU25hcFZpZXdDb3VudD1lLnRvdGFsQWRTbmFwVmlld0NvdW50Pz92b2lkIDAsbi50b3RhbEFkU3dpcGVVcENvdW50PWUudG90YWxBZFN3aXBlVXBDb3VudD8/dm9pZCAwLG4udG90YWxTd2lwZVVwQ291bnQ9ZS50b3RhbFN3aXBlVXBDb3VudD8/dm9pZCAwLG4udG90YWxBZExvbmdmb3JtVmlld1RpbWVNaWxsaXM9ZS50b3RhbEFkTG9uZ2Zvcm1WaWV3VGltZU1pbGxpcz8/dm9pZCAwLG4udG90YWxMb25nZm9ybVZpZXdUaW1lTWlsbGlzPWUudG90YWxMb25nZm9ybVZpZXdUaW1lTWlsbGlzPz92b2lkIDAsbi50b3RhbFN0b3JpZXNWaWV3Q291bnQ9ZS50b3RhbFN0b3JpZXNWaWV3Q291bnQ/P3ZvaWQgMCxuLmF2YWlsYWJsZVN0b3JpZXNDb3VudD1lLmF2YWlsYWJsZVN0b3JpZXNDb3VudD8/dm9pZCAwLG4uZXhpdEV2ZW50PWUuZXhpdEV2ZW50Pz8wLG4uaXNMYXN0U25hcEFkPWUuaXNMYXN0U25hcEFkPz92b2lkIDAsbi52aWV3ZWRBZD1lLnZpZXdlZEFkPy5tYXAoKGU9PnQuVmlld2VkQWRDb250ZXh0LmZyb21QYXJ0aWFsKGUpKSl8fFtdLG59fSx0LlZpZXdlZEFkQ29udGV4dD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5hZEV4aXRFdmVudCYmdC51aW50MzIoOCkuaW50MzIoZS5hZEV4aXRFdmVudCksdm9pZCAwIT09ZS5hZExvYWRpbmdTcGlubmVyVGltZU1pbGxpcyYmYS5JbnQzMlZhbHVlLmVuY29kZSh7dmFsdWU6ZS5hZExvYWRpbmdTcGlubmVyVGltZU1pbGxpc30sdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5hZFZpZXdUaW1lTWlsbGlzJiZhLkludDMyVmFsdWUuZW5jb2RlKHt2YWx1ZTplLmFkVmlld1RpbWVNaWxsaXN9LHQudWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuYWRTd2lwZVVwJiZhLkJvb2xWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUuYWRTd2lwZVVwfSx0LnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2FkRXhpdEV2ZW50OjAsYWRMb2FkaW5nU3Bpbm5lclRpbWVNaWxsaXM6dm9pZCAwLGFkVmlld1RpbWVNaWxsaXM6dm9pZCAwLGFkU3dpcGVVcDp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmFkRXhpdEV2ZW50PW4uaW50MzIoKTticmVhaztjYXNlIDI6aS5hZExvYWRpbmdTcGlubmVyVGltZU1pbGxpcz1hLkludDMyVmFsdWUuZGVjb2RlKG4sbi51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSAzOmkuYWRWaWV3VGltZU1pbGxpcz1hLkludDMyVmFsdWUuZGVjb2RlKG4sbi51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSA0OmkuYWRTd2lwZVVwPWEuQm9vbFZhbHVlLmRlY29kZShuLG4udWludDMyKCkpLnZhbHVlO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17YWRFeGl0RXZlbnQ6MCxhZExvYWRpbmdTcGlubmVyVGltZU1pbGxpczp2b2lkIDAsYWRWaWV3VGltZU1pbGxpczp2b2lkIDAsYWRTd2lwZVVwOnZvaWQgMH07cmV0dXJuIHQuYWRFeGl0RXZlbnQ9ZS5hZEV4aXRFdmVudD8/MCx0LmFkTG9hZGluZ1NwaW5uZXJUaW1lTWlsbGlzPWUuYWRMb2FkaW5nU3Bpbm5lclRpbWVNaWxsaXM/P3ZvaWQgMCx0LmFkVmlld1RpbWVNaWxsaXM9ZS5hZFZpZXdUaW1lTWlsbGlzPz92b2lkIDAsdC5hZFN3aXBlVXA9ZS5hZFN3aXBlVXA/P3ZvaWQgMCx0fX0sby5kZWZhdWx0LnV0aWwuTG9uZyE9PWkuZGVmYXVsdCYmKG8uZGVmYXVsdC51dGlsLkxvbmc9aS5kZWZhdWx0LG8uZGVmYXVsdC5jb25maWd1cmUoKSl9LDQxOTkzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkdycGNXZWJFcnJvcj10LkdycGNXZWJJbXBsPXQuQWRTZXJ2ZVNlcnZpY2VBZFNlcnZlUmVxdWVzdERlc2M9dC5BZFNlcnZlU2VydmljZURlc2M9dC5BZFNlcnZlU2VydmljZUNsaWVudEltcGw9dC5EaXNjb3ZlclBhZ2VfRmVlZD10LkRpc2NvdmVyUGFnZV9GZWVkU3R5bGU9dC5EaXNjb3ZlclBhZ2U9dC5TdG9yeUl0ZW1fU2NjVGFnV2VpZ2h0UGFpcj10LlN0b3J5SXRlbT10Lk1peGVySW5mbz10LlN1YnNCcmFuZFNhZmV0eT10LkFiQ29uc29sZVN0dWR5VHJlYXRtZW50RGF0YT10LkFCVGVzdF9EeW5hbWljQ29uZmlnc0VudHJ5PXQuQUJUZXN0PXQuRGVidWdDb25maWc9dC5OZXR3b3JrPXQuRGV2aWNlPXQuUHJlZmVyZW5jZXM9dC5BZEtpdEFwcGxpY2F0aW9uPXQuQXBwbGljYXRpb249dC5Vc2VyPXQuVXNlckRhdGE9dC5Mb2NhdGlvbj10LlRoaXJkUGFydHlBZE5ldHdvcmtJbmZvPXQuQWRSZXF1ZXN0PXQuRGlzY292ZXJQYWdlX0ZlZWRTdHlsZV9FbnVtPXQuU3Vic0JyYW5kU2FmZXR5X01vZGU9dC5EZXZpY2VfQVRUQXV0aFN0YXR1c1R5cGU9dC5UaGlyZFBhcnR5QWROZXR3b3JrSW5mb19UaGlyZFBhcnR5U2lnbmFsQ29udGVudFRyYW5zZm9ybWF0aW9uPXQuVGhpcmRQYXJ0eUFkTmV0d29ya1R5cGU9dm9pZCAwO2NvbnN0IGk9bigzMzAzNyksbz1uKDc4OTI0KSxhPW4oMzc1NzUpLHM9big4MjA4NCksYz1yKG4oNDE1ODMpKSxsPW4oMTQ0MiksdT1uKDg0NjEzKSxkPW4oNTcxOTQpLGY9big5MjI3NikscD1uKDYzNTc4KSxtPW4oNjYwMDQpLGg9big0OTUzOCksdj1uKDM0MDEwKSxnPW4oNTExMzkpLHk9cihuKDYyMTAwKSksRT1uKDUzMDU2KTtmdW5jdGlvbiBfKCl7cmV0dXJue3VzZXI6dm9pZCAwLGFwcGxpY2F0aW9uOnZvaWQgMCxwcmVmZXJlbmNlczp2b2lkIDAsZGV2aWNlOnZvaWQgMCxuZXR3b3JrOnZvaWQgMCxpbnZlbnRvcnlSZXF1ZXN0czpbXSxpc0RlYnVnOiExLG1peGVySW5mbzp2b2lkIDAsc3RvcmllczpbXSx0aW1lc3RhbXA6XCIwXCIscmVjZW50Vmlld1JlY2VpcHRzOltdLGRpc2NvdmVyUGFnZTp2b2lkIDAsY2xpZW50UmVxdWVzdElkOm5ldyBVaW50OEFycmF5LGxvY2F0aW9uOnZvaWQgMCx0aGlyZFBhcnR5QWROZXR3b3JrSW5mb3M6W10sYWRSYW5raW5nQ29udGV4dDp2b2lkIDAsbGVuc1JhbmtpbmdDb250ZXh0OnZvaWQgMCxmZWF0dXJlQ29udGV4dDp2b2lkIDB9fWZ1bmN0aW9uIEkoKXtyZXR1cm57cmVxdWVzdFNpZ25hbHM6bmV3IFVpbnQ4QXJyYXksY29udGVudFRyYW5zZm9ybWF0aW9uOjAsYWROZXR3b3JrVHlwZTowfX1mdW5jdGlvbiBTKCl7cmV0dXJue3NhaWQ6bmV3IFVpbnQ4QXJyYXksaXNBZHNIb2xkb3V0OiExLGRlYnVnQ29uZmlnOnZvaWQgMCxhYlRlc3Q6dm9pZCAwLGlzRW1wbG95ZWU6ITEsaXNOZXdVc2VyOiExLHRhcmdldGluZ1Rva2VuOlwiXCIsY3JlYXRlZFRpbWVzdGFtcE1pbGxpczp2b2lkIDAsYWdlOnZvaWQgMCxnZW5kZXI6MCxzbmFwVXNlclN0YXR1czowLHN0b3J5QWRzSW5Vc2VyU3Rvcmllc0VuYWJsZWQ6ITEsaXNQYXJ0aWFsbHlGaWxsZWQ6ITEsdXNlcklkOm5ldyBVaW50OEFycmF5LGNsaWVudElwOm5ldyBVaW50OEFycmF5fX1mdW5jdGlvbiBiKCl7cmV0dXJue2RhdGE6dm9pZCAwLGlzVGVzdEdyb3VwUWE6ITEsZnNuRW5jcnlwdGVkVXNlckRhdGE6bmV3IFVpbnQ4QXJyYXksc2FpZDpuZXcgVWludDhBcnJheSxidWRnZXRTZWdtZW50SWQ6MH19ZnVuY3Rpb24gVCgpe3JldHVybnthcHBsaWNhdGlvbklkZW50aWZpZXI6XCJcIixzbmFwa2l0QXBwSWQ6bmV3IFVpbnQ4QXJyYXksYWRraXRTZGtWZXJzaW9uTnVtZXJpYzpcIjBcIn19ZnVuY3Rpb24gQygpe3JldHVybntpZGZhOm5ldyBVaW50OEFycmF5LHBsYXRmb3JtVHlwZTowLGRldmljZU1vZGVsOlwiXCIsb3NWZXJzaW9uTnVtZXJpYzpcIjBcIixkZXZpY2VMYW5ndWFnZTpcIlwiLHNvdW5kSXNPbjohMSxidWlsZE51bWJlcjpcIlwiLGJhdHRlcnlQZXJjZW50OnZvaWQgMCxpc0JhdHRlcnlDaGFyZ2luZzp2b2lkIDAsZGlza1RvdGFsU3BhY2VLYjp2b2lkIDAsZGlza0ZyZWVTcGFjZUtiOnZvaWQgMCxhbmRyb2lkTW9iaWxlU2VydmljZVR5cGU6MCxzeXN0ZW1VcHRpbWVNczp2b2lkIDAsaWRmdjpuZXcgVWludDhBcnJheSxhdHRBdXRoU3RhdHVzOjAsYXVkaW9QbGF5YmFja1ZvbHVtZTp2b2lkIDAsc2NyZWVuV2lkdGg6dm9pZCAwLHNjcmVlbkhlaWdodDp2b2lkIDB9fWZ1bmN0aW9uIEEoKXtyZXR1cm57Y29ubmVjdGlvblR5cGU6MCxtY2NNbmM6XCJcIixjbGllbnRJcDpuZXcgVWludDhBcnJheSxjYXJyaWVyOlwiXCIsa2lsb0J5dGVzUGVyU2Vjb25kOlwiMFwiLGNlbGx1bGFyTmV0d29ya1R5cGU6MH19dmFyIFIsayxPLE4sdztmdW5jdGlvbiBEKGUpe3JldHVybiBlLnRvU3RyaW5nKCl9KHc9dC5UaGlyZFBhcnR5QWROZXR3b3JrVHlwZXx8KHQuVGhpcmRQYXJ0eUFkTmV0d29ya1R5cGU9e30pKVt3LkFEX05FVFdPUktfVFlQRV9VTktOT1dOPTBdPVwiQURfTkVUV09SS19UWVBFX1VOS05PV05cIix3W3cuQURfTkVUV09SS19UWVBFX1BFVFJBPTFdPVwiQURfTkVUV09SS19UWVBFX1BFVFJBXCIsd1t3LlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwoTj10LlRoaXJkUGFydHlBZE5ldHdvcmtJbmZvX1RoaXJkUGFydHlTaWduYWxDb250ZW50VHJhbnNmb3JtYXRpb258fCh0LlRoaXJkUGFydHlBZE5ldHdvcmtJbmZvX1RoaXJkUGFydHlTaWduYWxDb250ZW50VHJhbnNmb3JtYXRpb249e30pKVtOLlVURjhfREVDT0RFPTBdPVwiVVRGOF9ERUNPREVcIixOW04uQkFTRTY0X0VOQ09ERT0xXT1cIkJBU0U2NF9FTkNPREVcIixOW04uUFJPVE89Ml09XCJQUk9UT1wiLE5bTi5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKE89dC5EZXZpY2VfQVRUQXV0aFN0YXR1c1R5cGV8fCh0LkRldmljZV9BVFRBdXRoU3RhdHVzVHlwZT17fSkpW08uTk9UX0RFVEVSTUlORUQ9MF09XCJOT1RfREVURVJNSU5FRFwiLE9bTy5SRVNUUklDVEVEPTFdPVwiUkVTVFJJQ1RFRFwiLE9bTy5ERU5JRUQ9Ml09XCJERU5JRURcIixPW08uQVVUSE9SSVpFRD0zXT1cIkFVVEhPUklaRURcIixPW08uVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLChrPXQuU3Vic0JyYW5kU2FmZXR5X01vZGV8fCh0LlN1YnNCcmFuZFNhZmV0eV9Nb2RlPXt9KSlbay5VTktOT1dOPTBdPVwiVU5LTk9XTlwiLGtbay5DT01QTEVURV9DSEVDSz0xXT1cIkNPTVBMRVRFX0NIRUNLXCIsa1trLlBBUlRJQUxfQ0hFQ0s9Ml09XCJQQVJUSUFMX0NIRUNLXCIsa1trLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwoUj10LkRpc2NvdmVyUGFnZV9GZWVkU3R5bGVfRW51bXx8KHQuRGlzY292ZXJQYWdlX0ZlZWRTdHlsZV9FbnVtPXt9KSlbUi5VTktOT1dOPTBdPVwiVU5LTk9XTlwiLFJbUi5IT1JJWk9OVEFMPTFdPVwiSE9SSVpPTlRBTFwiLFJbUi5WRVJUSUNBTD0yXT1cIlZFUlRJQ0FMXCIsUltSLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0LkFkUmVxdWVzdD17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp5LmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3ZvaWQgMCE9PWUudXNlciYmdC5Vc2VyLmVuY29kZShlLnVzZXIsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5hcHBsaWNhdGlvbiYmdC5BcHBsaWNhdGlvbi5lbmNvZGUoZS5hcHBsaWNhdGlvbixuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnByZWZlcmVuY2VzJiZ0LlByZWZlcmVuY2VzLmVuY29kZShlLnByZWZlcmVuY2VzLG4udWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuZGV2aWNlJiZ0LkRldmljZS5lbmNvZGUoZS5kZXZpY2Usbi51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5uZXR3b3JrJiZ0Lk5ldHdvcmsuZW5jb2RlKGUubmV0d29yayxuLnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKTtmb3IoY29uc3QgdCBvZiBlLmludmVudG9yeVJlcXVlc3RzKWwuSW52ZW50b3J5UmVxdWVzdC5lbmNvZGUodCxuLnVpbnQzMig1MCkuZm9yaygpKS5sZGVsaW0oKTshMD09PWUuaXNEZWJ1ZyYmbi51aW50MzIoNTYpLmJvb2woZS5pc0RlYnVnKSx2b2lkIDAhPT1lLm1peGVySW5mbyYmdC5NaXhlckluZm8uZW5jb2RlKGUubWl4ZXJJbmZvLG4udWludDMyKDY2KS5mb3JrKCkpLmxkZWxpbSgpO2Zvcihjb25zdCByIG9mIGUuc3Rvcmllcyl0LlN0b3J5SXRlbS5lbmNvZGUocixuLnVpbnQzMig3NCkuZm9yaygpKS5sZGVsaW0oKTtcIjBcIiE9PWUudGltZXN0YW1wJiZuLnVpbnQzMig4MCkuaW50NjQoZS50aW1lc3RhbXApO2Zvcihjb25zdCB0IG9mIGUucmVjZW50Vmlld1JlY2VpcHRzKW4udWludDMyKDkwKS5ieXRlcyh0KTt2b2lkIDAhPT1lLmRpc2NvdmVyUGFnZSYmdC5EaXNjb3ZlclBhZ2UuZW5jb2RlKGUuZGlzY292ZXJQYWdlLG4udWludDMyKDk4KS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLmNsaWVudFJlcXVlc3RJZC5sZW5ndGgmJm4udWludDMyKDEwNikuYnl0ZXMoZS5jbGllbnRSZXF1ZXN0SWQpLHZvaWQgMCE9PWUubG9jYXRpb24mJnQuTG9jYXRpb24uZW5jb2RlKGUubG9jYXRpb24sbi51aW50MzIoMTE0KS5mb3JrKCkpLmxkZWxpbSgpO2Zvcihjb25zdCByIG9mIGUudGhpcmRQYXJ0eUFkTmV0d29ya0luZm9zKXQuVGhpcmRQYXJ0eUFkTmV0d29ya0luZm8uZW5jb2RlKHIsbi51aW50MzIoMTIyKS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiB2b2lkIDAhPT1lLmFkUmFua2luZ0NvbnRleHQmJnUuQWRSYW5raW5nQ29udGV4dC5lbmNvZGUoZS5hZFJhbmtpbmdDb250ZXh0LG4udWludDMyKDEzMCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmxlbnNSYW5raW5nQ29udGV4dCYmZC5MZW5zUmFua2luZ0NvbnRleHQuZW5jb2RlKGUubGVuc1JhbmtpbmdDb250ZXh0LG4udWludDMyKDEzOCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmZlYXR1cmVDb250ZXh0JiZmLkZlYXR1cmVDb250ZXh0LmVuY29kZShlLmZlYXR1cmVDb250ZXh0LG4udWludDMyKDE0NikuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiB5LmRlZmF1bHQuUmVhZGVyP2U6bmV3IHkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89XygpO2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLnVzZXI9dC5Vc2VyLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMjpvLmFwcGxpY2F0aW9uPXQuQXBwbGljYXRpb24uZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAzOm8ucHJlZmVyZW5jZXM9dC5QcmVmZXJlbmNlcy5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDQ6by5kZXZpY2U9dC5EZXZpY2UuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSA1Om8ubmV0d29yaz10Lk5ldHdvcmsuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSA2Om8uaW52ZW50b3J5UmVxdWVzdHMucHVzaChsLkludmVudG9yeVJlcXVlc3QuZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2Nhc2UgNzpvLmlzRGVidWc9ci5ib29sKCk7YnJlYWs7Y2FzZSA4Om8ubWl4ZXJJbmZvPXQuTWl4ZXJJbmZvLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgOTpvLnN0b3JpZXMucHVzaCh0LlN0b3J5SXRlbS5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAxMDpvLnRpbWVzdGFtcD1EKHIuaW50NjQoKSk7YnJlYWs7Y2FzZSAxMTpvLnJlY2VudFZpZXdSZWNlaXB0cy5wdXNoKHIuYnl0ZXMoKSk7YnJlYWs7Y2FzZSAxMjpvLmRpc2NvdmVyUGFnZT10LkRpc2NvdmVyUGFnZS5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDEzOm8uY2xpZW50UmVxdWVzdElkPXIuYnl0ZXMoKTticmVhaztjYXNlIDE0Om8ubG9jYXRpb249dC5Mb2NhdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDE1Om8udGhpcmRQYXJ0eUFkTmV0d29ya0luZm9zLnB1c2godC5UaGlyZFBhcnR5QWROZXR3b3JrSW5mby5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAxNjpvLmFkUmFua2luZ0NvbnRleHQ9dS5BZFJhbmtpbmdDb250ZXh0LmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMTc6by5sZW5zUmFua2luZ0NvbnRleHQ9ZC5MZW5zUmFua2luZ0NvbnRleHQuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAxODpvLmZlYXR1cmVDb250ZXh0PWYuRmVhdHVyZUNvbnRleHQuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPV8oKTtyZXR1cm4gbi51c2VyPXZvaWQgMCE9PWUudXNlciYmbnVsbCE9PWUudXNlcj90LlVzZXIuZnJvbVBhcnRpYWwoZS51c2VyKTp2b2lkIDAsbi5hcHBsaWNhdGlvbj12b2lkIDAhPT1lLmFwcGxpY2F0aW9uJiZudWxsIT09ZS5hcHBsaWNhdGlvbj90LkFwcGxpY2F0aW9uLmZyb21QYXJ0aWFsKGUuYXBwbGljYXRpb24pOnZvaWQgMCxuLnByZWZlcmVuY2VzPXZvaWQgMCE9PWUucHJlZmVyZW5jZXMmJm51bGwhPT1lLnByZWZlcmVuY2VzP3QuUHJlZmVyZW5jZXMuZnJvbVBhcnRpYWwoZS5wcmVmZXJlbmNlcyk6dm9pZCAwLG4uZGV2aWNlPXZvaWQgMCE9PWUuZGV2aWNlJiZudWxsIT09ZS5kZXZpY2U/dC5EZXZpY2UuZnJvbVBhcnRpYWwoZS5kZXZpY2UpOnZvaWQgMCxuLm5ldHdvcms9dm9pZCAwIT09ZS5uZXR3b3JrJiZudWxsIT09ZS5uZXR3b3JrP3QuTmV0d29yay5mcm9tUGFydGlhbChlLm5ldHdvcmspOnZvaWQgMCxuLmludmVudG9yeVJlcXVlc3RzPWUuaW52ZW50b3J5UmVxdWVzdHM/Lm1hcCgoZT0+bC5JbnZlbnRvcnlSZXF1ZXN0LmZyb21QYXJ0aWFsKGUpKSl8fFtdLG4uaXNEZWJ1Zz1lLmlzRGVidWc/PyExLG4ubWl4ZXJJbmZvPXZvaWQgMCE9PWUubWl4ZXJJbmZvJiZudWxsIT09ZS5taXhlckluZm8/dC5NaXhlckluZm8uZnJvbVBhcnRpYWwoZS5taXhlckluZm8pOnZvaWQgMCxuLnN0b3JpZXM9ZS5zdG9yaWVzPy5tYXAoKGU9PnQuU3RvcnlJdGVtLmZyb21QYXJ0aWFsKGUpKSl8fFtdLG4udGltZXN0YW1wPWUudGltZXN0YW1wPz9cIjBcIixuLnJlY2VudFZpZXdSZWNlaXB0cz1lLnJlY2VudFZpZXdSZWNlaXB0cz8ubWFwKChlPT5lKSl8fFtdLG4uZGlzY292ZXJQYWdlPXZvaWQgMCE9PWUuZGlzY292ZXJQYWdlJiZudWxsIT09ZS5kaXNjb3ZlclBhZ2U/dC5EaXNjb3ZlclBhZ2UuZnJvbVBhcnRpYWwoZS5kaXNjb3ZlclBhZ2UpOnZvaWQgMCxuLmNsaWVudFJlcXVlc3RJZD1lLmNsaWVudFJlcXVlc3RJZD8/bmV3IFVpbnQ4QXJyYXksbi5sb2NhdGlvbj12b2lkIDAhPT1lLmxvY2F0aW9uJiZudWxsIT09ZS5sb2NhdGlvbj90LkxvY2F0aW9uLmZyb21QYXJ0aWFsKGUubG9jYXRpb24pOnZvaWQgMCxuLnRoaXJkUGFydHlBZE5ldHdvcmtJbmZvcz1lLnRoaXJkUGFydHlBZE5ldHdvcmtJbmZvcz8ubWFwKChlPT50LlRoaXJkUGFydHlBZE5ldHdvcmtJbmZvLmZyb21QYXJ0aWFsKGUpKSl8fFtdLG4uYWRSYW5raW5nQ29udGV4dD12b2lkIDAhPT1lLmFkUmFua2luZ0NvbnRleHQmJm51bGwhPT1lLmFkUmFua2luZ0NvbnRleHQ/dS5BZFJhbmtpbmdDb250ZXh0LmZyb21QYXJ0aWFsKGUuYWRSYW5raW5nQ29udGV4dCk6dm9pZCAwLG4ubGVuc1JhbmtpbmdDb250ZXh0PXZvaWQgMCE9PWUubGVuc1JhbmtpbmdDb250ZXh0JiZudWxsIT09ZS5sZW5zUmFua2luZ0NvbnRleHQ/ZC5MZW5zUmFua2luZ0NvbnRleHQuZnJvbVBhcnRpYWwoZS5sZW5zUmFua2luZ0NvbnRleHQpOnZvaWQgMCxuLmZlYXR1cmVDb250ZXh0PXZvaWQgMCE9PWUuZmVhdHVyZUNvbnRleHQmJm51bGwhPT1lLmZlYXR1cmVDb250ZXh0P2YuRmVhdHVyZUNvbnRleHQuZnJvbVBhcnRpYWwoZS5mZWF0dXJlQ29udGV4dCk6dm9pZCAwLG59fSx0LlRoaXJkUGFydHlBZE5ldHdvcmtJbmZvPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLnJlcXVlc3RTaWduYWxzLmxlbmd0aCYmdC51aW50MzIoMTgpLmJ5dGVzKGUucmVxdWVzdFNpZ25hbHMpLDAhPT1lLmNvbnRlbnRUcmFuc2Zvcm1hdGlvbiYmdC51aW50MzIoMjQpLmludDMyKGUuY29udGVudFRyYW5zZm9ybWF0aW9uKSwwIT09ZS5hZE5ldHdvcmtUeXBlJiZ0LnVpbnQzMigzMikuaW50MzIoZS5hZE5ldHdvcmtUeXBlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiB5LmRlZmF1bHQuUmVhZGVyP2U6bmV3IHkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9SSgpO2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMjppLnJlcXVlc3RTaWduYWxzPW4uYnl0ZXMoKTticmVhaztjYXNlIDM6aS5jb250ZW50VHJhbnNmb3JtYXRpb249bi5pbnQzMigpO2JyZWFrO2Nhc2UgNDppLmFkTmV0d29ya1R5cGU9bi5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD1JKCk7cmV0dXJuIHQucmVxdWVzdFNpZ25hbHM9ZS5yZXF1ZXN0U2lnbmFscz8/bmV3IFVpbnQ4QXJyYXksdC5jb250ZW50VHJhbnNmb3JtYXRpb249ZS5jb250ZW50VHJhbnNmb3JtYXRpb24/PzAsdC5hZE5ldHdvcmtUeXBlPWUuYWROZXR3b3JrVHlwZT8/MCx0fX0sdC5Mb2NhdGlvbj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp5LmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLmxhdGl0dWRlJiZFLkRvdWJsZVZhbHVlLmVuY29kZSh7dmFsdWU6ZS5sYXRpdHVkZX0sdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5sb25naXR1ZGUmJkUuRG91YmxlVmFsdWUuZW5jb2RlKHt2YWx1ZTplLmxvbmdpdHVkZX0sdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5hY2N1cmFjeUluTWV0ZXJzJiZFLkludDMyVmFsdWUuZW5jb2RlKHt2YWx1ZTplLmFjY3VyYWN5SW5NZXRlcnN9LHQudWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUubG9jYXRpb25DYXB0dXJlZFRpbWVzdGFtcE1pbGxpcyYmRS5JbnQ2NFZhbHVlLmVuY29kZSh7dmFsdWU6ZS5sb2NhdGlvbkNhcHR1cmVkVGltZXN0YW1wTWlsbGlzfSx0LnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiB5LmRlZmF1bHQuUmVhZGVyP2U6bmV3IHkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2xhdGl0dWRlOnZvaWQgMCxsb25naXR1ZGU6dm9pZCAwLGFjY3VyYWN5SW5NZXRlcnM6dm9pZCAwLGxvY2F0aW9uQ2FwdHVyZWRUaW1lc3RhbXBNaWxsaXM6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5sYXRpdHVkZT1FLkRvdWJsZVZhbHVlLmRlY29kZShuLG4udWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgMjppLmxvbmdpdHVkZT1FLkRvdWJsZVZhbHVlLmRlY29kZShuLG4udWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgMzppLmFjY3VyYWN5SW5NZXRlcnM9RS5JbnQzMlZhbHVlLmRlY29kZShuLG4udWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgNDppLmxvY2F0aW9uQ2FwdHVyZWRUaW1lc3RhbXBNaWxsaXM9RS5JbnQ2NFZhbHVlLmRlY29kZShuLG4udWludDMyKCkpLnZhbHVlO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17bGF0aXR1ZGU6dm9pZCAwLGxvbmdpdHVkZTp2b2lkIDAsYWNjdXJhY3lJbk1ldGVyczp2b2lkIDAsbG9jYXRpb25DYXB0dXJlZFRpbWVzdGFtcE1pbGxpczp2b2lkIDB9O3JldHVybiB0LmxhdGl0dWRlPWUubGF0aXR1ZGU/P3ZvaWQgMCx0LmxvbmdpdHVkZT1lLmxvbmdpdHVkZT8/dm9pZCAwLHQuYWNjdXJhY3lJbk1ldGVycz1lLmFjY3VyYWN5SW5NZXRlcnM/P3ZvaWQgMCx0LmxvY2F0aW9uQ2FwdHVyZWRUaW1lc3RhbXBNaWxsaXM9ZS5sb2NhdGlvbkNhcHR1cmVkVGltZXN0YW1wTWlsbGlzPz92b2lkIDAsdH19LHQuVXNlckRhdGE9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06eS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUuc2FpZC5sZW5ndGgmJm4udWludDMyKDEwKS5ieXRlcyhlLnNhaWQpLCEwPT09ZS5pc0Fkc0hvbGRvdXQmJm4udWludDMyKDE2KS5ib29sKGUuaXNBZHNIb2xkb3V0KSx2b2lkIDAhPT1lLmRlYnVnQ29uZmlnJiZ0LkRlYnVnQ29uZmlnLmVuY29kZShlLmRlYnVnQ29uZmlnLG4udWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuYWJUZXN0JiZ0LkFCVGVzdC5lbmNvZGUoZS5hYlRlc3Qsbi51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCksITA9PT1lLmlzRW1wbG95ZWUmJm4udWludDMyKDQwKS5ib29sKGUuaXNFbXBsb3llZSksITA9PT1lLmlzTmV3VXNlciYmbi51aW50MzIoNDgpLmJvb2woZS5pc05ld1VzZXIpLFwiXCIhPT1lLnRhcmdldGluZ1Rva2VuJiZuLnVpbnQzMig1OCkuc3RyaW5nKGUudGFyZ2V0aW5nVG9rZW4pLHZvaWQgMCE9PWUuY3JlYXRlZFRpbWVzdGFtcE1pbGxpcyYmRS5JbnQ2NFZhbHVlLmVuY29kZSh7dmFsdWU6ZS5jcmVhdGVkVGltZXN0YW1wTWlsbGlzfSxuLnVpbnQzMig2NikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmFnZSYmRS5JbnQzMlZhbHVlLmVuY29kZSh7dmFsdWU6ZS5hZ2V9LG4udWludDMyKDc0KS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLmdlbmRlciYmbi51aW50MzIoODApLmludDMyKGUuZ2VuZGVyKSwwIT09ZS5zbmFwVXNlclN0YXR1cyYmbi51aW50MzIoODgpLmludDMyKGUuc25hcFVzZXJTdGF0dXMpLCEwPT09ZS5zdG9yeUFkc0luVXNlclN0b3JpZXNFbmFibGVkJiZuLnVpbnQzMig5NikuYm9vbChlLnN0b3J5QWRzSW5Vc2VyU3Rvcmllc0VuYWJsZWQpLCEwPT09ZS5pc1BhcnRpYWxseUZpbGxlZCYmbi51aW50MzIoMTA0KS5ib29sKGUuaXNQYXJ0aWFsbHlGaWxsZWQpLDAhPT1lLnVzZXJJZC5sZW5ndGgmJm4udWludDMyKDExNCkuYnl0ZXMoZS51c2VySWQpLDAhPT1lLmNsaWVudElwLmxlbmd0aCYmbi51aW50MzIoMTIyKS5ieXRlcyhlLmNsaWVudElwKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiB5LmRlZmF1bHQuUmVhZGVyP2U6bmV3IHkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89UygpO2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLnNhaWQ9ci5ieXRlcygpO2JyZWFrO2Nhc2UgMjpvLmlzQWRzSG9sZG91dD1yLmJvb2woKTticmVhaztjYXNlIDM6by5kZWJ1Z0NvbmZpZz10LkRlYnVnQ29uZmlnLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgNDpvLmFiVGVzdD10LkFCVGVzdC5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDU6by5pc0VtcGxveWVlPXIuYm9vbCgpO2JyZWFrO2Nhc2UgNjpvLmlzTmV3VXNlcj1yLmJvb2woKTticmVhaztjYXNlIDc6by50YXJnZXRpbmdUb2tlbj1yLnN0cmluZygpO2JyZWFrO2Nhc2UgODpvLmNyZWF0ZWRUaW1lc3RhbXBNaWxsaXM9RS5JbnQ2NFZhbHVlLmRlY29kZShyLHIudWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgOTpvLmFnZT1FLkludDMyVmFsdWUuZGVjb2RlKHIsci51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSAxMDpvLmdlbmRlcj1yLmludDMyKCk7YnJlYWs7Y2FzZSAxMTpvLnNuYXBVc2VyU3RhdHVzPXIuaW50MzIoKTticmVhaztjYXNlIDEyOm8uc3RvcnlBZHNJblVzZXJTdG9yaWVzRW5hYmxlZD1yLmJvb2woKTticmVhaztjYXNlIDEzOm8uaXNQYXJ0aWFsbHlGaWxsZWQ9ci5ib29sKCk7YnJlYWs7Y2FzZSAxNDpvLnVzZXJJZD1yLmJ5dGVzKCk7YnJlYWs7Y2FzZSAxNTpvLmNsaWVudElwPXIuYnl0ZXMoKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49UygpO3JldHVybiBuLnNhaWQ9ZS5zYWlkPz9uZXcgVWludDhBcnJheSxuLmlzQWRzSG9sZG91dD1lLmlzQWRzSG9sZG91dD8/ITEsbi5kZWJ1Z0NvbmZpZz12b2lkIDAhPT1lLmRlYnVnQ29uZmlnJiZudWxsIT09ZS5kZWJ1Z0NvbmZpZz90LkRlYnVnQ29uZmlnLmZyb21QYXJ0aWFsKGUuZGVidWdDb25maWcpOnZvaWQgMCxuLmFiVGVzdD12b2lkIDAhPT1lLmFiVGVzdCYmbnVsbCE9PWUuYWJUZXN0P3QuQUJUZXN0LmZyb21QYXJ0aWFsKGUuYWJUZXN0KTp2b2lkIDAsbi5pc0VtcGxveWVlPWUuaXNFbXBsb3llZT8/ITEsbi5pc05ld1VzZXI9ZS5pc05ld1VzZXI/PyExLG4udGFyZ2V0aW5nVG9rZW49ZS50YXJnZXRpbmdUb2tlbj8/XCJcIixuLmNyZWF0ZWRUaW1lc3RhbXBNaWxsaXM9ZS5jcmVhdGVkVGltZXN0YW1wTWlsbGlzPz92b2lkIDAsbi5hZ2U9ZS5hZ2U/P3ZvaWQgMCxuLmdlbmRlcj1lLmdlbmRlcj8/MCxuLnNuYXBVc2VyU3RhdHVzPWUuc25hcFVzZXJTdGF0dXM/PzAsbi5zdG9yeUFkc0luVXNlclN0b3JpZXNFbmFibGVkPWUuc3RvcnlBZHNJblVzZXJTdG9yaWVzRW5hYmxlZD8/ITEsbi5pc1BhcnRpYWxseUZpbGxlZD1lLmlzUGFydGlhbGx5RmlsbGVkPz8hMSxuLnVzZXJJZD1lLnVzZXJJZD8/bmV3IFVpbnQ4QXJyYXksbi5jbGllbnRJcD1lLmNsaWVudElwPz9uZXcgVWludDhBcnJheSxufX0sdC5Vc2VyPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJ1c2VyRGF0YVwiPT09ZS5kYXRhPy4kY2FzZSYmdC5Vc2VyRGF0YS5lbmNvZGUoZS5kYXRhLnVzZXJEYXRhLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLFwiZW5jcnlwdGVkVXNlckRhdGFcIj09PWUuZGF0YT8uJGNhc2UmJm4udWludDMyKDE4KS5ieXRlcyhlLmRhdGEuZW5jcnlwdGVkVXNlckRhdGEpLCEwPT09ZS5pc1Rlc3RHcm91cFFhJiZuLnVpbnQzMigyNCkuYm9vbChlLmlzVGVzdEdyb3VwUWEpLDAhPT1lLmZzbkVuY3J5cHRlZFVzZXJEYXRhLmxlbmd0aCYmbi51aW50MzIoMzQpLmJ5dGVzKGUuZnNuRW5jcnlwdGVkVXNlckRhdGEpLDAhPT1lLnNhaWQubGVuZ3RoJiZuLnVpbnQzMig0MikuYnl0ZXMoZS5zYWlkKSwwIT09ZS5idWRnZXRTZWdtZW50SWQmJm4udWludDMyKDQ4KS5pbnQzMihlLmJ1ZGdldFNlZ21lbnRJZCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgeS5kZWZhdWx0LlJlYWRlcj9lOm5ldyB5LmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPWIoKTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5kYXRhPXskY2FzZTpcInVzZXJEYXRhXCIsdXNlckRhdGE6dC5Vc2VyRGF0YS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAyOm8uZGF0YT17JGNhc2U6XCJlbmNyeXB0ZWRVc2VyRGF0YVwiLGVuY3J5cHRlZFVzZXJEYXRhOnIuYnl0ZXMoKX07YnJlYWs7Y2FzZSAzOm8uaXNUZXN0R3JvdXBRYT1yLmJvb2woKTticmVhaztjYXNlIDQ6by5mc25FbmNyeXB0ZWRVc2VyRGF0YT1yLmJ5dGVzKCk7YnJlYWs7Y2FzZSA1Om8uc2FpZD1yLmJ5dGVzKCk7YnJlYWs7Y2FzZSA2Om8uYnVkZ2V0U2VnbWVudElkPXIuaW50MzIoKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49YigpO3JldHVyblwidXNlckRhdGFcIj09PWUuZGF0YT8uJGNhc2UmJnZvaWQgMCE9PWUuZGF0YT8udXNlckRhdGEmJm51bGwhPT1lLmRhdGE/LnVzZXJEYXRhJiYobi5kYXRhPXskY2FzZTpcInVzZXJEYXRhXCIsdXNlckRhdGE6dC5Vc2VyRGF0YS5mcm9tUGFydGlhbChlLmRhdGEudXNlckRhdGEpfSksXCJlbmNyeXB0ZWRVc2VyRGF0YVwiPT09ZS5kYXRhPy4kY2FzZSYmdm9pZCAwIT09ZS5kYXRhPy5lbmNyeXB0ZWRVc2VyRGF0YSYmbnVsbCE9PWUuZGF0YT8uZW5jcnlwdGVkVXNlckRhdGEmJihuLmRhdGE9eyRjYXNlOlwiZW5jcnlwdGVkVXNlckRhdGFcIixlbmNyeXB0ZWRVc2VyRGF0YTplLmRhdGEuZW5jcnlwdGVkVXNlckRhdGF9KSxuLmlzVGVzdEdyb3VwUWE9ZS5pc1Rlc3RHcm91cFFhPz8hMSxuLmZzbkVuY3J5cHRlZFVzZXJEYXRhPWUuZnNuRW5jcnlwdGVkVXNlckRhdGE/P25ldyBVaW50OEFycmF5LG4uc2FpZD1lLnNhaWQ/P25ldyBVaW50OEFycmF5LG4uYnVkZ2V0U2VnbWVudElkPWUuYnVkZ2V0U2VnbWVudElkPz8wLG59fSx0LkFwcGxpY2F0aW9uPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUuYXBwTmFtZSYmbi51aW50MzIoMTApLnN0cmluZyhlLmFwcE5hbWUpLFwiMFwiIT09ZS5hcHBWZXJzaW9uTnVtZXJpYyYmbi51aW50MzIoMTYpLmludDY0KGUuYXBwVmVyc2lvbk51bWVyaWMpLFwiXCIhPT1lLmFwcFZhcmlhbnQmJm4udWludDMyKDI2KS5zdHJpbmcoZS5hcHBWYXJpYW50KSwwIT09ZS5hcHBWYXJpYW50RW51bSYmbi51aW50MzIoMzIpLmludDMyKGUuYXBwVmFyaWFudEVudW0pLDAhPT1lLmFwcFR5cGUmJm4udWludDMyKDQwKS5pbnQzMihlLmFwcFR5cGUpLHZvaWQgMCE9PWUuYWRLaXRBcHBsaWNhdGlvbiYmdC5BZEtpdEFwcGxpY2F0aW9uLmVuY29kZShlLmFkS2l0QXBwbGljYXRpb24sbi51aW50MzIoNTgpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5hcHBVcHRpbWVNcyYmRS5JbnQ2NFZhbHVlLmVuY29kZSh7dmFsdWU6ZS5hcHBVcHRpbWVNc30sbi51aW50MzIoNjYpLmZvcmsoKSkubGRlbGltKCksXCJcIiE9PWUuc291cmNlQXBwSWQmJm4udWludDMyKDc0KS5zdHJpbmcoZS5zb3VyY2VBcHBJZCksITA9PT1lLmlzTmF0aXZlQ2xpZW50JiZuLnVpbnQzMig4MCkuYm9vbChlLmlzTmF0aXZlQ2xpZW50KSx2b2lkIDAhPT1lLmFwcFNlc3Npb25JZCYmRS5TdHJpbmdWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUuYXBwU2Vzc2lvbklkfSxuLnVpbnQzMig5MCkuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiB5LmRlZmF1bHQuUmVhZGVyP2U6bmV3IHkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89e2FwcE5hbWU6XCJcIixhcHBWZXJzaW9uTnVtZXJpYzpcIjBcIixhcHBWYXJpYW50OlwiXCIsYXBwVmFyaWFudEVudW06MCxhcHBUeXBlOjAsYWRLaXRBcHBsaWNhdGlvbjp2b2lkIDAsYXBwVXB0aW1lTXM6dm9pZCAwLHNvdXJjZUFwcElkOlwiXCIsaXNOYXRpdmVDbGllbnQ6ITEsYXBwU2Vzc2lvbklkOnZvaWQgMH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8uYXBwTmFtZT1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMjpvLmFwcFZlcnNpb25OdW1lcmljPUQoci5pbnQ2NCgpKTticmVhaztjYXNlIDM6by5hcHBWYXJpYW50PXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSA0Om8uYXBwVmFyaWFudEVudW09ci5pbnQzMigpO2JyZWFrO2Nhc2UgNTpvLmFwcFR5cGU9ci5pbnQzMigpO2JyZWFrO2Nhc2UgNzpvLmFkS2l0QXBwbGljYXRpb249dC5BZEtpdEFwcGxpY2F0aW9uLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgODpvLmFwcFVwdGltZU1zPUUuSW50NjRWYWx1ZS5kZWNvZGUocixyLnVpbnQzMigpKS52YWx1ZTticmVhaztjYXNlIDk6by5zb3VyY2VBcHBJZD1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMTA6by5pc05hdGl2ZUNsaWVudD1yLmJvb2woKTticmVhaztjYXNlIDExOm8uYXBwU2Vzc2lvbklkPUUuU3RyaW5nVmFsdWUuZGVjb2RlKHIsci51aW50MzIoKSkudmFsdWU7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXthcHBOYW1lOlwiXCIsYXBwVmVyc2lvbk51bWVyaWM6XCIwXCIsYXBwVmFyaWFudDpcIlwiLGFwcFZhcmlhbnRFbnVtOjAsYXBwVHlwZTowLGFkS2l0QXBwbGljYXRpb246dm9pZCAwLGFwcFVwdGltZU1zOnZvaWQgMCxzb3VyY2VBcHBJZDpcIlwiLGlzTmF0aXZlQ2xpZW50OiExLGFwcFNlc3Npb25JZDp2b2lkIDB9O3JldHVybiBuLmFwcE5hbWU9ZS5hcHBOYW1lPz9cIlwiLG4uYXBwVmVyc2lvbk51bWVyaWM9ZS5hcHBWZXJzaW9uTnVtZXJpYz8/XCIwXCIsbi5hcHBWYXJpYW50PWUuYXBwVmFyaWFudD8/XCJcIixuLmFwcFZhcmlhbnRFbnVtPWUuYXBwVmFyaWFudEVudW0/PzAsbi5hcHBUeXBlPWUuYXBwVHlwZT8/MCxuLmFkS2l0QXBwbGljYXRpb249dm9pZCAwIT09ZS5hZEtpdEFwcGxpY2F0aW9uJiZudWxsIT09ZS5hZEtpdEFwcGxpY2F0aW9uP3QuQWRLaXRBcHBsaWNhdGlvbi5mcm9tUGFydGlhbChlLmFkS2l0QXBwbGljYXRpb24pOnZvaWQgMCxuLmFwcFVwdGltZU1zPWUuYXBwVXB0aW1lTXM/P3ZvaWQgMCxuLnNvdXJjZUFwcElkPWUuc291cmNlQXBwSWQ/P1wiXCIsbi5pc05hdGl2ZUNsaWVudD1lLmlzTmF0aXZlQ2xpZW50Pz8hMSxuLmFwcFNlc3Npb25JZD1lLmFwcFNlc3Npb25JZD8/dm9pZCAwLG59fSx0LkFkS2l0QXBwbGljYXRpb249e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06eS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5hcHBsaWNhdGlvbklkZW50aWZpZXImJnQudWludDMyKDEwKS5zdHJpbmcoZS5hcHBsaWNhdGlvbklkZW50aWZpZXIpLDAhPT1lLnNuYXBraXRBcHBJZC5sZW5ndGgmJnQudWludDMyKDE4KS5ieXRlcyhlLnNuYXBraXRBcHBJZCksXCIwXCIhPT1lLmFka2l0U2RrVmVyc2lvbk51bWVyaWMmJnQudWludDMyKDI0KS5pbnQ2NChlLmFka2l0U2RrVmVyc2lvbk51bWVyaWMpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgeS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT1UKCk7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuYXBwbGljYXRpb25JZGVudGlmaWVyPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkuc25hcGtpdEFwcElkPW4uYnl0ZXMoKTticmVhaztjYXNlIDM6aS5hZGtpdFNka1ZlcnNpb25OdW1lcmljPUQobi5pbnQ2NCgpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9VCgpO3JldHVybiB0LmFwcGxpY2F0aW9uSWRlbnRpZmllcj1lLmFwcGxpY2F0aW9uSWRlbnRpZmllcj8/XCJcIix0LnNuYXBraXRBcHBJZD1lLnNuYXBraXRBcHBJZD8/bmV3IFVpbnQ4QXJyYXksdC5hZGtpdFNka1ZlcnNpb25OdW1lcmljPWUuYWRraXRTZGtWZXJzaW9uTnVtZXJpYz8/XCIwXCIsdH19LHQuUHJlZmVyZW5jZXM9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06eS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4hMD09PWUubGltaXRBZFRyYWNraW5nJiZ0LnVpbnQzMig4KS5ib29sKGUubGltaXRBZFRyYWNraW5nKSwhMD09PWUuYXVkaWVuY2VNYXRjaE9wdE91dCYmdC51aW50MzIoMTYpLmJvb2woZS5hdWRpZW5jZU1hdGNoT3B0T3V0KSwhMD09PWUuZXh0ZXJuYWxBY3Rpdml0eU1hdGNoT3B0T3V0JiZ0LnVpbnQzMigyNCkuYm9vbChlLmV4dGVybmFsQWN0aXZpdHlNYXRjaE9wdE91dCksITA9PT1lLnRoaXJkUGFydHlBZE5ldHdvcmtPcHRPdXQmJnQudWludDMyKDMyKS5ib29sKGUudGhpcmRQYXJ0eUFkTmV0d29ya09wdE91dCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgeS5kZWZhdWx0LlJlYWRlcj9lOm5ldyB5LmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtsaW1pdEFkVHJhY2tpbmc6ITEsYXVkaWVuY2VNYXRjaE9wdE91dDohMSxleHRlcm5hbEFjdGl2aXR5TWF0Y2hPcHRPdXQ6ITEsdGhpcmRQYXJ0eUFkTmV0d29ya09wdE91dDohMX07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkubGltaXRBZFRyYWNraW5nPW4uYm9vbCgpO2JyZWFrO2Nhc2UgMjppLmF1ZGllbmNlTWF0Y2hPcHRPdXQ9bi5ib29sKCk7YnJlYWs7Y2FzZSAzOmkuZXh0ZXJuYWxBY3Rpdml0eU1hdGNoT3B0T3V0PW4uYm9vbCgpO2JyZWFrO2Nhc2UgNDppLnRoaXJkUGFydHlBZE5ldHdvcmtPcHRPdXQ9bi5ib29sKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtsaW1pdEFkVHJhY2tpbmc6ITEsYXVkaWVuY2VNYXRjaE9wdE91dDohMSxleHRlcm5hbEFjdGl2aXR5TWF0Y2hPcHRPdXQ6ITEsdGhpcmRQYXJ0eUFkTmV0d29ya09wdE91dDohMX07cmV0dXJuIHQubGltaXRBZFRyYWNraW5nPWUubGltaXRBZFRyYWNraW5nPz8hMSx0LmF1ZGllbmNlTWF0Y2hPcHRPdXQ9ZS5hdWRpZW5jZU1hdGNoT3B0T3V0Pz8hMSx0LmV4dGVybmFsQWN0aXZpdHlNYXRjaE9wdE91dD1lLmV4dGVybmFsQWN0aXZpdHlNYXRjaE9wdE91dD8/ITEsdC50aGlyZFBhcnR5QWROZXR3b3JrT3B0T3V0PWUudGhpcmRQYXJ0eUFkTmV0d29ya09wdE91dD8/ITEsdH19LHQuRGV2aWNlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLmlkZmEubGVuZ3RoJiZ0LnVpbnQzMigxMCkuYnl0ZXMoZS5pZGZhKSwwIT09ZS5wbGF0Zm9ybVR5cGUmJnQudWludDMyKDE2KS5pbnQzMihlLnBsYXRmb3JtVHlwZSksXCJcIiE9PWUuZGV2aWNlTW9kZWwmJnQudWludDMyKDI2KS5zdHJpbmcoZS5kZXZpY2VNb2RlbCksXCIwXCIhPT1lLm9zVmVyc2lvbk51bWVyaWMmJnQudWludDMyKDMyKS5pbnQ2NChlLm9zVmVyc2lvbk51bWVyaWMpLFwiXCIhPT1lLmRldmljZUxhbmd1YWdlJiZ0LnVpbnQzMig0Mikuc3RyaW5nKGUuZGV2aWNlTGFuZ3VhZ2UpLCEwPT09ZS5zb3VuZElzT24mJnQudWludDMyKDQ4KS5ib29sKGUuc291bmRJc09uKSxcIlwiIT09ZS5idWlsZE51bWJlciYmdC51aW50MzIoNTgpLnN0cmluZyhlLmJ1aWxkTnVtYmVyKSx2b2lkIDAhPT1lLmJhdHRlcnlQZXJjZW50JiZFLkludDMyVmFsdWUuZW5jb2RlKHt2YWx1ZTplLmJhdHRlcnlQZXJjZW50fSx0LnVpbnQzMig2NikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmlzQmF0dGVyeUNoYXJnaW5nJiZFLkJvb2xWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUuaXNCYXR0ZXJ5Q2hhcmdpbmd9LHQudWludDMyKDc0KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuZGlza1RvdGFsU3BhY2VLYiYmRS5JbnQ2NFZhbHVlLmVuY29kZSh7dmFsdWU6ZS5kaXNrVG90YWxTcGFjZUtifSx0LnVpbnQzMig4MikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmRpc2tGcmVlU3BhY2VLYiYmRS5JbnQ2NFZhbHVlLmVuY29kZSh7dmFsdWU6ZS5kaXNrRnJlZVNwYWNlS2J9LHQudWludDMyKDkwKS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLmFuZHJvaWRNb2JpbGVTZXJ2aWNlVHlwZSYmdC51aW50MzIoOTYpLmludDMyKGUuYW5kcm9pZE1vYmlsZVNlcnZpY2VUeXBlKSx2b2lkIDAhPT1lLnN5c3RlbVVwdGltZU1zJiZFLkludDY0VmFsdWUuZW5jb2RlKHt2YWx1ZTplLnN5c3RlbVVwdGltZU1zfSx0LnVpbnQzMigxMDYpLmZvcmsoKSkubGRlbGltKCksMCE9PWUuaWRmdi5sZW5ndGgmJnQudWludDMyKDExNCkuYnl0ZXMoZS5pZGZ2KSwwIT09ZS5hdHRBdXRoU3RhdHVzJiZ0LnVpbnQzMigxMjApLmludDMyKGUuYXR0QXV0aFN0YXR1cyksdm9pZCAwIT09ZS5hdWRpb1BsYXliYWNrVm9sdW1lJiZFLkZsb2F0VmFsdWUuZW5jb2RlKHt2YWx1ZTplLmF1ZGlvUGxheWJhY2tWb2x1bWV9LHQudWludDMyKDEzMCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnNjcmVlbldpZHRoJiZFLkludDY0VmFsdWUuZW5jb2RlKHt2YWx1ZTplLnNjcmVlbldpZHRofSx0LnVpbnQzMigxMzgpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5zY3JlZW5IZWlnaHQmJkUuSW50NjRWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUuc2NyZWVuSGVpZ2h0fSx0LnVpbnQzMigxNDYpLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgeS5kZWZhdWx0LlJlYWRlcj9lOm5ldyB5LmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPUMoKTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5pZGZhPW4uYnl0ZXMoKTticmVhaztjYXNlIDI6aS5wbGF0Zm9ybVR5cGU9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMzppLmRldmljZU1vZGVsPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA0Omkub3NWZXJzaW9uTnVtZXJpYz1EKG4uaW50NjQoKSk7YnJlYWs7Y2FzZSA1OmkuZGV2aWNlTGFuZ3VhZ2U9bi5zdHJpbmcoKTticmVhaztjYXNlIDY6aS5zb3VuZElzT249bi5ib29sKCk7YnJlYWs7Y2FzZSA3OmkuYnVpbGROdW1iZXI9bi5zdHJpbmcoKTticmVhaztjYXNlIDg6aS5iYXR0ZXJ5UGVyY2VudD1FLkludDMyVmFsdWUuZGVjb2RlKG4sbi51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSA5OmkuaXNCYXR0ZXJ5Q2hhcmdpbmc9RS5Cb29sVmFsdWUuZGVjb2RlKG4sbi51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSAxMDppLmRpc2tUb3RhbFNwYWNlS2I9RS5JbnQ2NFZhbHVlLmRlY29kZShuLG4udWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgMTE6aS5kaXNrRnJlZVNwYWNlS2I9RS5JbnQ2NFZhbHVlLmRlY29kZShuLG4udWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgMTI6aS5hbmRyb2lkTW9iaWxlU2VydmljZVR5cGU9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMTM6aS5zeXN0ZW1VcHRpbWVNcz1FLkludDY0VmFsdWUuZGVjb2RlKG4sbi51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSAxNDppLmlkZnY9bi5ieXRlcygpO2JyZWFrO2Nhc2UgMTU6aS5hdHRBdXRoU3RhdHVzPW4uaW50MzIoKTticmVhaztjYXNlIDE2OmkuYXVkaW9QbGF5YmFja1ZvbHVtZT1FLkZsb2F0VmFsdWUuZGVjb2RlKG4sbi51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSAxNzppLnNjcmVlbldpZHRoPUUuSW50NjRWYWx1ZS5kZWNvZGUobixuLnVpbnQzMigpKS52YWx1ZTticmVhaztjYXNlIDE4Omkuc2NyZWVuSGVpZ2h0PUUuSW50NjRWYWx1ZS5kZWNvZGUobixuLnVpbnQzMigpKS52YWx1ZTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9QygpO3JldHVybiB0LmlkZmE9ZS5pZGZhPz9uZXcgVWludDhBcnJheSx0LnBsYXRmb3JtVHlwZT1lLnBsYXRmb3JtVHlwZT8/MCx0LmRldmljZU1vZGVsPWUuZGV2aWNlTW9kZWw/P1wiXCIsdC5vc1ZlcnNpb25OdW1lcmljPWUub3NWZXJzaW9uTnVtZXJpYz8/XCIwXCIsdC5kZXZpY2VMYW5ndWFnZT1lLmRldmljZUxhbmd1YWdlPz9cIlwiLHQuc291bmRJc09uPWUuc291bmRJc09uPz8hMSx0LmJ1aWxkTnVtYmVyPWUuYnVpbGROdW1iZXI/P1wiXCIsdC5iYXR0ZXJ5UGVyY2VudD1lLmJhdHRlcnlQZXJjZW50Pz92b2lkIDAsdC5pc0JhdHRlcnlDaGFyZ2luZz1lLmlzQmF0dGVyeUNoYXJnaW5nPz92b2lkIDAsdC5kaXNrVG90YWxTcGFjZUtiPWUuZGlza1RvdGFsU3BhY2VLYj8/dm9pZCAwLHQuZGlza0ZyZWVTcGFjZUtiPWUuZGlza0ZyZWVTcGFjZUtiPz92b2lkIDAsdC5hbmRyb2lkTW9iaWxlU2VydmljZVR5cGU9ZS5hbmRyb2lkTW9iaWxlU2VydmljZVR5cGU/PzAsdC5zeXN0ZW1VcHRpbWVNcz1lLnN5c3RlbVVwdGltZU1zPz92b2lkIDAsdC5pZGZ2PWUuaWRmdj8/bmV3IFVpbnQ4QXJyYXksdC5hdHRBdXRoU3RhdHVzPWUuYXR0QXV0aFN0YXR1cz8/MCx0LmF1ZGlvUGxheWJhY2tWb2x1bWU9ZS5hdWRpb1BsYXliYWNrVm9sdW1lPz92b2lkIDAsdC5zY3JlZW5XaWR0aD1lLnNjcmVlbldpZHRoPz92b2lkIDAsdC5zY3JlZW5IZWlnaHQ9ZS5zY3JlZW5IZWlnaHQ/P3ZvaWQgMCx0fX0sdC5OZXR3b3JrPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLmNvbm5lY3Rpb25UeXBlJiZ0LnVpbnQzMig4KS5pbnQzMihlLmNvbm5lY3Rpb25UeXBlKSxcIlwiIT09ZS5tY2NNbmMmJnQudWludDMyKDE4KS5zdHJpbmcoZS5tY2NNbmMpLDAhPT1lLmNsaWVudElwLmxlbmd0aCYmdC51aW50MzIoMjYpLmJ5dGVzKGUuY2xpZW50SXApLFwiXCIhPT1lLmNhcnJpZXImJnQudWludDMyKDM0KS5zdHJpbmcoZS5jYXJyaWVyKSxcIjBcIiE9PWUua2lsb0J5dGVzUGVyU2Vjb25kJiZ0LnVpbnQzMig0MCkuaW50NjQoZS5raWxvQnl0ZXNQZXJTZWNvbmQpLDAhPT1lLmNlbGx1bGFyTmV0d29ya1R5cGUmJnQudWludDMyKDQ4KS5pbnQzMihlLmNlbGx1bGFyTmV0d29ya1R5cGUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgeS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT1BKCk7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuY29ubmVjdGlvblR5cGU9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMjppLm1jY01uYz1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMzppLmNsaWVudElwPW4uYnl0ZXMoKTticmVhaztjYXNlIDQ6aS5jYXJyaWVyPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA1Omkua2lsb0J5dGVzUGVyU2Vjb25kPUQobi5pbnQ2NCgpKTticmVhaztjYXNlIDY6aS5jZWxsdWxhck5ldHdvcmtUeXBlPW4uaW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9QSgpO3JldHVybiB0LmNvbm5lY3Rpb25UeXBlPWUuY29ubmVjdGlvblR5cGU/PzAsdC5tY2NNbmM9ZS5tY2NNbmM/P1wiXCIsdC5jbGllbnRJcD1lLmNsaWVudElwPz9uZXcgVWludDhBcnJheSx0LmNhcnJpZXI9ZS5jYXJyaWVyPz9cIlwiLHQua2lsb0J5dGVzUGVyU2Vjb25kPWUua2lsb0J5dGVzUGVyU2Vjb25kPz9cIjBcIix0LmNlbGx1bGFyTmV0d29ya1R5cGU9ZS5jZWxsdWxhck5ldHdvcmtUeXBlPz8wLHR9fSx0LkRlYnVnQ29uZmlnPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7ITA9PT1lLmlzVGVzdFVzZXImJnQudWludDMyKDgpLmJvb2woZS5pc1Rlc3RVc2VyKSwhMD09PWUuaXNBdXRvbWF0aW9uVXNlciYmdC51aW50MzIoMTYpLmJvb2woZS5pc0F1dG9tYXRpb25Vc2VyKSwhMD09PWUuc2tpcEludmVudG9yeUNhcHBpbmcmJnQudWludDMyKDI0KS5ib29sKGUuc2tpcEludmVudG9yeUNhcHBpbmcpO2Zvcihjb25zdCBuIG9mIGUudGVzdEdyb3Vwcyl0LnVpbnQzMigzNCkuc3RyaW5nKG4pO3JldHVybiB0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiB5LmRlZmF1bHQuUmVhZGVyP2U6bmV3IHkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2lzVGVzdFVzZXI6ITEsaXNBdXRvbWF0aW9uVXNlcjohMSxza2lwSW52ZW50b3J5Q2FwcGluZzohMSx0ZXN0R3JvdXBzOltdfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5pc1Rlc3RVc2VyPW4uYm9vbCgpO2JyZWFrO2Nhc2UgMjppLmlzQXV0b21hdGlvblVzZXI9bi5ib29sKCk7YnJlYWs7Y2FzZSAzOmkuc2tpcEludmVudG9yeUNhcHBpbmc9bi5ib29sKCk7YnJlYWs7Y2FzZSA0OmkudGVzdEdyb3Vwcy5wdXNoKG4uc3RyaW5nKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17aXNUZXN0VXNlcjohMSxpc0F1dG9tYXRpb25Vc2VyOiExLHNraXBJbnZlbnRvcnlDYXBwaW5nOiExLHRlc3RHcm91cHM6W119O3JldHVybiB0LmlzVGVzdFVzZXI9ZS5pc1Rlc3RVc2VyPz8hMSx0LmlzQXV0b21hdGlvblVzZXI9ZS5pc0F1dG9tYXRpb25Vc2VyPz8hMSx0LnNraXBJbnZlbnRvcnlDYXBwaW5nPWUuc2tpcEludmVudG9yeUNhcHBpbmc/PyExLHQudGVzdEdyb3Vwcz1lLnRlc3RHcm91cHM/Lm1hcCgoZT0+ZSkpfHxbXSx0fX0sdC5BQlRlc3Q9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06eS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtcIlwiIT09ZS5hZExvYWRUZXN0RXhwZXJpbWVudEdyb3VwJiZuLnVpbnQzMigxMCkuc3RyaW5nKGUuYWRMb2FkVGVzdEV4cGVyaW1lbnRHcm91cCksdm9pZCAwIT09ZS5idWRnZXRBYlN0dWR5JiZvLkJ1ZGdldEFiU3R1ZHkuZW5jb2RlKGUuYnVkZ2V0QWJTdHVkeSxuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnNraXBQcmVkaWN0aW9uJiZwLlByZWRpY3Rpb25TdHVkeS5lbmNvZGUoZS5za2lwUHJlZGljdGlvbixuLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnN3aXBlUHJlZGljdGlvbiYmcC5QcmVkaWN0aW9uU3R1ZHkuZW5jb2RlKGUuc3dpcGVQcmVkaWN0aW9uLG4udWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuaW5zdGFsbFByZWRpY3Rpb24mJnAuUHJlZGljdGlvblN0dWR5LmVuY29kZShlLmluc3RhbGxQcmVkaWN0aW9uLG4udWludDMyKDQyKS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuY2xpZW50UmFua2luZ0FiU3R1ZHkmJm0uQ2xpZW50UmFua2luZ1N0dWR5LmVuY29kZShlLmNsaWVudFJhbmtpbmdBYlN0dWR5LG4udWludDMyKDUwKS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUud2Vidmlld1ByZWZldGNoU3R1ZHkmJmguV2Vidmlld1ByZWZldGNoU3R1ZHkuZW5jb2RlKGUud2Vidmlld1ByZWZldGNoU3R1ZHksbi51aW50MzIoNTgpLmZvcmsoKSkubGRlbGltKCksXCJcIiE9PWUuYWJUZXN0VXNlclNlZ21lbnQmJm4udWludDMyKDY2KS5zdHJpbmcoZS5hYlRlc3RVc2VyU2VnbWVudCksXCJcIiE9PWUuYWJUZXN0VXNlclNlZ21lbnQyMCYmbi51aW50MzIoNzQpLnN0cmluZyhlLmFiVGVzdFVzZXJTZWdtZW50MjApLCEwPT09ZS5zdG9yeUFkc0Rpc2FibGVkJiZuLnVpbnQzMig4MCkuYm9vbChlLnN0b3J5QWRzRGlzYWJsZWQpLCEwPT09ZS5kaXNjb3ZlckZlZWRDYXJvdXNlbEFkc0VuYWJsZWQmJm4udWludDMyKDg4KS5ib29sKGUuZGlzY292ZXJGZWVkQ2Fyb3VzZWxBZHNFbmFibGVkKSwwIT09ZS5kaXNjb3ZlckZlZWRDYXJvdXNlbEFkc051bU9yZ2FuaWNUaWxlc0JldHdlZW5BZHMmJm4udWludDMyKDk2KS5pbnQzMihlLmRpc2NvdmVyRmVlZENhcm91c2VsQWRzTnVtT3JnYW5pY1RpbGVzQmV0d2VlbkFkcyksMCE9PWUuZGlzY292ZXJGZWVkQ2Fyb3VzZWxBZHNNaW5GZWVkQWRQb3NpdGlvbkluZGV4JiZuLnVpbnQzMigxMDQpLmludDMyKGUuZGlzY292ZXJGZWVkQ2Fyb3VzZWxBZHNNaW5GZWVkQWRQb3NpdGlvbkluZGV4KSwhMD09PWUudXNlckluQWRzSG9sZG91dCYmbi51aW50MzIoMTEyKS5ib29sKGUudXNlckluQWRzSG9sZG91dCksdm9pZCAwIT09ZS5hZHNlcnZlck9nUm91dGVUb0FwaUd3JiZFLkJvb2xWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUuYWRzZXJ2ZXJPZ1JvdXRlVG9BcGlHd30sbi51aW50MzIoMTIyKS5mb3JrKCkpLmxkZWxpbSgpLCEwPT09ZS5pc0FjcXVpcmVkVXNlciYmbi51aW50MzIoMTI4KS5ib29sKGUuaXNBY3F1aXJlZFVzZXIpLDAhPT1lLmxhdGVuY3lEZWxheU1zJiZuLnVpbnQzMigxMzYpLnVpbnQzMihlLmxhdGVuY3lEZWxheU1zKSx2b2lkIDAhPT1lLm5ld1VzZXJHcmFjZVBlcmlvZERheXNTaW5jZUNyZWF0aW9uJiZFLkludDMyVmFsdWUuZW5jb2RlKHt2YWx1ZTplLm5ld1VzZXJHcmFjZVBlcmlvZERheXNTaW5jZUNyZWF0aW9ufSxuLnVpbnQzMigxNDYpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5kaXNjb3ZlckZlZWRTdG9yeUFkc051bU9yZ2FuaWNUaWxlc0JldHdlZW5BZHMmJkUuSW50MzJWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUuZGlzY292ZXJGZWVkU3RvcnlBZHNOdW1PcmdhbmljVGlsZXNCZXR3ZWVuQWRzfSxuLnVpbnQzMigxNTQpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5kaXNjb3ZlckZlZWRTdG9yeUFkc01pbkZlZWRBZFBvc2l0aW9uSW5kZXgmJkUuSW50MzJWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUuZGlzY292ZXJGZWVkU3RvcnlBZHNNaW5GZWVkQWRQb3NpdGlvbkluZGV4fSxuLnVpbnQzMigxNjIpLmZvcmsoKSkubGRlbGltKCksITA9PT1lLmFyU2hvcHBpbmdFbmFibGVkJiZuLnVpbnQzMigxNjgpLmJvb2woZS5hclNob3BwaW5nRW5hYmxlZCksMCE9PWUud2Vidmlld1ByZWZldGNoVGhyZXNob2xkJiZuLnVpbnQzMigxODEpLmZsb2F0KGUud2Vidmlld1ByZWZldGNoVGhyZXNob2xkKSx2b2lkIDAhPT1lLm9uRGV2aWNlSW52ZW50b3J5Q29uZmlncyYmdi5PbkRldmljZUludmVudG9yeUNvbmZpZ3MuZW5jb2RlKGUub25EZXZpY2VJbnZlbnRvcnlDb25maWdzLG4udWludDMyKDE4NikuZm9yaygpKS5sZGVsaW0oKSwhMD09PWUud2Vidmlld1ByZWZldGNoRGlzYWJsZU92ZXJyaWRlJiZuLnVpbnQzMigxOTIpLmJvb2woZS53ZWJ2aWV3UHJlZmV0Y2hEaXNhYmxlT3ZlcnJpZGUpLCEwPT09ZS5hclNob3BwaW5nUmVtb3RlTGVuc0VuYWJsZWQmJm4udWludDMyKDIwMCkuYm9vbChlLmFyU2hvcHBpbmdSZW1vdGVMZW5zRW5hYmxlZCksMCE9PWUudm9wZXJhVmFyaWFudElkZW50aWZpZXImJm4udWludDMyKDIwOCkuaW50MzIoZS52b3BlcmFWYXJpYW50SWRlbnRpZmllciksXCJcIiE9PWUubG9va3NlcnlTcG9uc29yZWRHZW9CYWNrU3R1ZHlHcm91cCYmbi51aW50MzIoMjE4KS5zdHJpbmcoZS5sb29rc2VyeVNwb25zb3JlZEdlb0JhY2tTdHVkeUdyb3VwKSwhMD09PWUuZGlzYWJsZUJsb2NrV2Vidmlld1ByZWxvYWRpbmcmJm4udWludDMyKDIyNCkuYm9vbChlLmRpc2FibGVCbG9ja1dlYnZpZXdQcmVsb2FkaW5nKSwhMD09PWUuaXNGb3JjZWRFeHRlcm5hbEJyb3dzZXImJm4udWludDMyKDIzMikuYm9vbChlLmlzRm9yY2VkRXh0ZXJuYWxCcm93c2VyKSwhMD09PWUuc2hvdWxkV2Vidmlld1VybEFkZENsaWNrSWQmJm4udWludDMyKDI0MCkuYm9vbChlLnNob3VsZFdlYnZpZXdVcmxBZGRDbGlja0lkKSwhMD09PWUud2Vidmlld0xpZ2h0bmluZ01vZGVTYWZlZ3VhcmRFbmFibGVkJiZuLnVpbnQzMigyNDgpLmJvb2woZS53ZWJ2aWV3TGlnaHRuaW5nTW9kZVNhZmVndWFyZEVuYWJsZWQpLCEwPT09ZS53ZWJ2aWV3Q2xpZW50Q3Jhd2xTYWZlZ3VhcmRFbmFibGVkJiZuLnVpbnQzMigyNTYpLmJvb2woZS53ZWJ2aWV3Q2xpZW50Q3Jhd2xTYWZlZ3VhcmRFbmFibGVkKSwhMD09PWUuc3Rvcmllc1JlbW92ZUludGVyc3RpdGlhbCYmbi51aW50MzIoMjY0KS5ib29sKGUuc3Rvcmllc1JlbW92ZUludGVyc3RpdGlhbCksITA9PT1lLnN0b3JpZXNFbmFibGVUaGluUHJvZ3Jlc3NCYXImJm4udWludDMyKDI3MikuYm9vbChlLnN0b3JpZXNFbmFibGVUaGluUHJvZ3Jlc3NCYXIpLCEwPT09ZS5zdG9yaWVzRW5hYmxlUHJvZ3Jlc3NCYXImJm4udWludDMyKDI4MCkuYm9vbChlLnN0b3JpZXNFbmFibGVQcm9ncmVzc0JhciksITA9PT1lLnNob3VsZERlZXBsaW5rVXJsQWRkQ2xpY2tJZCYmbi51aW50MzIoMjg4KS5ib29sKGUuc2hvdWxkRGVlcGxpbmtVcmxBZGRDbGlja0lkKSwhMD09PWUud2Vidmlld0xpZ2h0bmluZ01vZGVTZXJ2ZXJSZWRpcmVjdFVybEVuYWJsZSYmbi51aW50MzIoMjk2KS5ib29sKGUud2Vidmlld0xpZ2h0bmluZ01vZGVTZXJ2ZXJSZWRpcmVjdFVybEVuYWJsZSksITA9PT1lLndlYnZpZXdFeHRlbmRlZExpZmVjeWNsZVNlcnZlckNvbnRyb2xFbmFibGVkJiZuLnVpbnQzMigzMDQpLmJvb2woZS53ZWJ2aWV3RXh0ZW5kZWRMaWZlY3ljbGVTZXJ2ZXJDb250cm9sRW5hYmxlZCksMCE9PWUubGlnaHRuaW5nTW9kZVNlcnZlckFwcHJhaXNhbFNjb3JlVGhyZXNob2xkJiZuLnVpbnQzMigzMTcpLmZsb2F0KGUubGlnaHRuaW5nTW9kZVNlcnZlckFwcHJhaXNhbFNjb3JlVGhyZXNob2xkKSwhMD09PWUud2Vidmlld0xpZ2h0bmluZ01vZGVOb25Eb3VibGVjbGlja1NlcnZlclJlZGlyZWN0VXJsRW5hYmxlJiZuLnVpbnQzMigzMjApLmJvb2woZS53ZWJ2aWV3TGlnaHRuaW5nTW9kZU5vbkRvdWJsZWNsaWNrU2VydmVyUmVkaXJlY3RVcmxFbmFibGUpLCEwPT09ZS53ZWJ2aWV3TGlnaHRuaW5nTW9kZUphdmFzY3JpcHRSZWRpcmVjdFVybEVuYWJsZSYmbi51aW50MzIoMzI4KS5ib29sKGUud2Vidmlld0xpZ2h0bmluZ01vZGVKYXZhc2NyaXB0UmVkaXJlY3RVcmxFbmFibGUpLCEwPT09ZS5mb3JjZUV4dEJyb3dzZXJBbmRyb2lkTm9uUGl4ZWxTdGFyJiZuLnVpbnQzMigzMzYpLmJvb2woZS5mb3JjZUV4dEJyb3dzZXJBbmRyb2lkTm9uUGl4ZWxTdGFyKTtmb3IoY29uc3QgciBvZiBlLnRyZWF0bWVudERhdGFGb3JBbGxvd2xpc3RlZEFiQ29uc29sZVN0dWRpZXMpdC5BYkNvbnNvbGVTdHVkeVRyZWF0bWVudERhdGEuZW5jb2RlKHIsbi51aW50MzIoMzQ2KS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiBPYmplY3QuZW50cmllcyhlLmR5bmFtaWNDb25maWdzKS5mb3JFYWNoKChlPT57bGV0W3IsaV09ZTt0LkFCVGVzdF9EeW5hbWljQ29uZmlnc0VudHJ5LmVuY29kZSh7a2V5OnIsdmFsdWU6aX0sbi51aW50MzIoMzU0KS5mb3JrKCkpLmxkZWxpbSgpfSkpLCEwPT09ZS5zdG9yeUFkTWFwRXhjbHVkZWQmJm4udWludDMyKDM2MCkuYm9vbChlLnN0b3J5QWRNYXBFeGNsdWRlZCksMCE9PWUuc3RvcnlBZFNlZU1vcmUmJm4udWludDMyKDM2OCkuaW50MzIoZS5zdG9yeUFkU2VlTW9yZSksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgeS5kZWZhdWx0LlJlYWRlcj9lOm5ldyB5LmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBhPXthZExvYWRUZXN0RXhwZXJpbWVudEdyb3VwOlwiXCIsYnVkZ2V0QWJTdHVkeTp2b2lkIDAsc2tpcFByZWRpY3Rpb246dm9pZCAwLHN3aXBlUHJlZGljdGlvbjp2b2lkIDAsaW5zdGFsbFByZWRpY3Rpb246dm9pZCAwLGNsaWVudFJhbmtpbmdBYlN0dWR5OnZvaWQgMCx3ZWJ2aWV3UHJlZmV0Y2hTdHVkeTp2b2lkIDAsYWJUZXN0VXNlclNlZ21lbnQ6XCJcIixhYlRlc3RVc2VyU2VnbWVudDIwOlwiXCIsc3RvcnlBZHNEaXNhYmxlZDohMSxkaXNjb3ZlckZlZWRDYXJvdXNlbEFkc0VuYWJsZWQ6ITEsZGlzY292ZXJGZWVkQ2Fyb3VzZWxBZHNOdW1PcmdhbmljVGlsZXNCZXR3ZWVuQWRzOjAsZGlzY292ZXJGZWVkQ2Fyb3VzZWxBZHNNaW5GZWVkQWRQb3NpdGlvbkluZGV4OjAsdXNlckluQWRzSG9sZG91dDohMSxhZHNlcnZlck9nUm91dGVUb0FwaUd3OnZvaWQgMCxpc0FjcXVpcmVkVXNlcjohMSxsYXRlbmN5RGVsYXlNczowLG5ld1VzZXJHcmFjZVBlcmlvZERheXNTaW5jZUNyZWF0aW9uOnZvaWQgMCxkaXNjb3ZlckZlZWRTdG9yeUFkc051bU9yZ2FuaWNUaWxlc0JldHdlZW5BZHM6dm9pZCAwLGRpc2NvdmVyRmVlZFN0b3J5QWRzTWluRmVlZEFkUG9zaXRpb25JbmRleDp2b2lkIDAsYXJTaG9wcGluZ0VuYWJsZWQ6ITEsd2Vidmlld1ByZWZldGNoVGhyZXNob2xkOjAsb25EZXZpY2VJbnZlbnRvcnlDb25maWdzOnZvaWQgMCx3ZWJ2aWV3UHJlZmV0Y2hEaXNhYmxlT3ZlcnJpZGU6ITEsYXJTaG9wcGluZ1JlbW90ZUxlbnNFbmFibGVkOiExLHZvcGVyYVZhcmlhbnRJZGVudGlmaWVyOjAsbG9va3NlcnlTcG9uc29yZWRHZW9CYWNrU3R1ZHlHcm91cDpcIlwiLGRpc2FibGVCbG9ja1dlYnZpZXdQcmVsb2FkaW5nOiExLGlzRm9yY2VkRXh0ZXJuYWxCcm93c2VyOiExLHNob3VsZFdlYnZpZXdVcmxBZGRDbGlja0lkOiExLHdlYnZpZXdMaWdodG5pbmdNb2RlU2FmZWd1YXJkRW5hYmxlZDohMSx3ZWJ2aWV3Q2xpZW50Q3Jhd2xTYWZlZ3VhcmRFbmFibGVkOiExLHN0b3JpZXNSZW1vdmVJbnRlcnN0aXRpYWw6ITEsc3Rvcmllc0VuYWJsZVRoaW5Qcm9ncmVzc0JhcjohMSxzdG9yaWVzRW5hYmxlUHJvZ3Jlc3NCYXI6ITEsc2hvdWxkRGVlcGxpbmtVcmxBZGRDbGlja0lkOiExLHdlYnZpZXdMaWdodG5pbmdNb2RlU2VydmVyUmVkaXJlY3RVcmxFbmFibGU6ITEsd2Vidmlld0V4dGVuZGVkTGlmZWN5Y2xlU2VydmVyQ29udHJvbEVuYWJsZWQ6ITEsbGlnaHRuaW5nTW9kZVNlcnZlckFwcHJhaXNhbFNjb3JlVGhyZXNob2xkOjAsd2Vidmlld0xpZ2h0bmluZ01vZGVOb25Eb3VibGVjbGlja1NlcnZlclJlZGlyZWN0VXJsRW5hYmxlOiExLHdlYnZpZXdMaWdodG5pbmdNb2RlSmF2YXNjcmlwdFJlZGlyZWN0VXJsRW5hYmxlOiExLGZvcmNlRXh0QnJvd3NlckFuZHJvaWROb25QaXhlbFN0YXI6ITEsdHJlYXRtZW50RGF0YUZvckFsbG93bGlzdGVkQWJDb25zb2xlU3R1ZGllczpbXSxkeW5hbWljQ29uZmlnczp7fSxzdG9yeUFkTWFwRXhjbHVkZWQ6ITEsc3RvcnlBZFNlZU1vcmU6MH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmEuYWRMb2FkVGVzdEV4cGVyaW1lbnRHcm91cD1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMjphLmJ1ZGdldEFiU3R1ZHk9by5CdWRnZXRBYlN0dWR5LmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMzphLnNraXBQcmVkaWN0aW9uPXAuUHJlZGljdGlvblN0dWR5LmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgNDphLnN3aXBlUHJlZGljdGlvbj1wLlByZWRpY3Rpb25TdHVkeS5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDU6YS5pbnN0YWxsUHJlZGljdGlvbj1wLlByZWRpY3Rpb25TdHVkeS5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDY6YS5jbGllbnRSYW5raW5nQWJTdHVkeT1tLkNsaWVudFJhbmtpbmdTdHVkeS5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDc6YS53ZWJ2aWV3UHJlZmV0Y2hTdHVkeT1oLldlYnZpZXdQcmVmZXRjaFN0dWR5LmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgODphLmFiVGVzdFVzZXJTZWdtZW50PXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSA5OmEuYWJUZXN0VXNlclNlZ21lbnQyMD1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMTA6YS5zdG9yeUFkc0Rpc2FibGVkPXIuYm9vbCgpO2JyZWFrO2Nhc2UgMTE6YS5kaXNjb3ZlckZlZWRDYXJvdXNlbEFkc0VuYWJsZWQ9ci5ib29sKCk7YnJlYWs7Y2FzZSAxMjphLmRpc2NvdmVyRmVlZENhcm91c2VsQWRzTnVtT3JnYW5pY1RpbGVzQmV0d2VlbkFkcz1yLmludDMyKCk7YnJlYWs7Y2FzZSAxMzphLmRpc2NvdmVyRmVlZENhcm91c2VsQWRzTWluRmVlZEFkUG9zaXRpb25JbmRleD1yLmludDMyKCk7YnJlYWs7Y2FzZSAxNDphLnVzZXJJbkFkc0hvbGRvdXQ9ci5ib29sKCk7YnJlYWs7Y2FzZSAxNTphLmFkc2VydmVyT2dSb3V0ZVRvQXBpR3c9RS5Cb29sVmFsdWUuZGVjb2RlKHIsci51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSAxNjphLmlzQWNxdWlyZWRVc2VyPXIuYm9vbCgpO2JyZWFrO2Nhc2UgMTc6YS5sYXRlbmN5RGVsYXlNcz1yLnVpbnQzMigpO2JyZWFrO2Nhc2UgMTg6YS5uZXdVc2VyR3JhY2VQZXJpb2REYXlzU2luY2VDcmVhdGlvbj1FLkludDMyVmFsdWUuZGVjb2RlKHIsci51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSAxOTphLmRpc2NvdmVyRmVlZFN0b3J5QWRzTnVtT3JnYW5pY1RpbGVzQmV0d2VlbkFkcz1FLkludDMyVmFsdWUuZGVjb2RlKHIsci51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSAyMDphLmRpc2NvdmVyRmVlZFN0b3J5QWRzTWluRmVlZEFkUG9zaXRpb25JbmRleD1FLkludDMyVmFsdWUuZGVjb2RlKHIsci51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSAyMTphLmFyU2hvcHBpbmdFbmFibGVkPXIuYm9vbCgpO2JyZWFrO2Nhc2UgMjI6YS53ZWJ2aWV3UHJlZmV0Y2hUaHJlc2hvbGQ9ci5mbG9hdCgpO2JyZWFrO2Nhc2UgMjM6YS5vbkRldmljZUludmVudG9yeUNvbmZpZ3M9di5PbkRldmljZUludmVudG9yeUNvbmZpZ3MuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyNDphLndlYnZpZXdQcmVmZXRjaERpc2FibGVPdmVycmlkZT1yLmJvb2woKTticmVhaztjYXNlIDI1OmEuYXJTaG9wcGluZ1JlbW90ZUxlbnNFbmFibGVkPXIuYm9vbCgpO2JyZWFrO2Nhc2UgMjY6YS52b3BlcmFWYXJpYW50SWRlbnRpZmllcj1yLmludDMyKCk7YnJlYWs7Y2FzZSAyNzphLmxvb2tzZXJ5U3BvbnNvcmVkR2VvQmFja1N0dWR5R3JvdXA9ci5zdHJpbmcoKTticmVhaztjYXNlIDI4OmEuZGlzYWJsZUJsb2NrV2Vidmlld1ByZWxvYWRpbmc9ci5ib29sKCk7YnJlYWs7Y2FzZSAyOTphLmlzRm9yY2VkRXh0ZXJuYWxCcm93c2VyPXIuYm9vbCgpO2JyZWFrO2Nhc2UgMzA6YS5zaG91bGRXZWJ2aWV3VXJsQWRkQ2xpY2tJZD1yLmJvb2woKTticmVhaztjYXNlIDMxOmEud2Vidmlld0xpZ2h0bmluZ01vZGVTYWZlZ3VhcmRFbmFibGVkPXIuYm9vbCgpO2JyZWFrO2Nhc2UgMzI6YS53ZWJ2aWV3Q2xpZW50Q3Jhd2xTYWZlZ3VhcmRFbmFibGVkPXIuYm9vbCgpO2JyZWFrO2Nhc2UgMzM6YS5zdG9yaWVzUmVtb3ZlSW50ZXJzdGl0aWFsPXIuYm9vbCgpO2JyZWFrO2Nhc2UgMzQ6YS5zdG9yaWVzRW5hYmxlVGhpblByb2dyZXNzQmFyPXIuYm9vbCgpO2JyZWFrO2Nhc2UgMzU6YS5zdG9yaWVzRW5hYmxlUHJvZ3Jlc3NCYXI9ci5ib29sKCk7YnJlYWs7Y2FzZSAzNjphLnNob3VsZERlZXBsaW5rVXJsQWRkQ2xpY2tJZD1yLmJvb2woKTticmVhaztjYXNlIDM3OmEud2Vidmlld0xpZ2h0bmluZ01vZGVTZXJ2ZXJSZWRpcmVjdFVybEVuYWJsZT1yLmJvb2woKTticmVhaztjYXNlIDM4OmEud2Vidmlld0V4dGVuZGVkTGlmZWN5Y2xlU2VydmVyQ29udHJvbEVuYWJsZWQ9ci5ib29sKCk7YnJlYWs7Y2FzZSAzOTphLmxpZ2h0bmluZ01vZGVTZXJ2ZXJBcHByYWlzYWxTY29yZVRocmVzaG9sZD1yLmZsb2F0KCk7YnJlYWs7Y2FzZSA0MDphLndlYnZpZXdMaWdodG5pbmdNb2RlTm9uRG91YmxlY2xpY2tTZXJ2ZXJSZWRpcmVjdFVybEVuYWJsZT1yLmJvb2woKTticmVhaztjYXNlIDQxOmEud2Vidmlld0xpZ2h0bmluZ01vZGVKYXZhc2NyaXB0UmVkaXJlY3RVcmxFbmFibGU9ci5ib29sKCk7YnJlYWs7Y2FzZSA0MjphLmZvcmNlRXh0QnJvd3NlckFuZHJvaWROb25QaXhlbFN0YXI9ci5ib29sKCk7YnJlYWs7Y2FzZSA0MzphLnRyZWF0bWVudERhdGFGb3JBbGxvd2xpc3RlZEFiQ29uc29sZVN0dWRpZXMucHVzaCh0LkFiQ29uc29sZVN0dWR5VHJlYXRtZW50RGF0YS5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSA0NDpjb25zdCBuPXQuQUJUZXN0X0R5bmFtaWNDb25maWdzRW50cnkuZGVjb2RlKHIsci51aW50MzIoKSk7dm9pZCAwIT09bi52YWx1ZSYmKGEuZHluYW1pY0NvbmZpZ3Nbbi5rZXldPW4udmFsdWUpO2JyZWFrO2Nhc2UgNDU6YS5zdG9yeUFkTWFwRXhjbHVkZWQ9ci5ib29sKCk7YnJlYWs7Y2FzZSA0NjphLnN0b3J5QWRTZWVNb3JlPXIuaW50MzIoKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e2FkTG9hZFRlc3RFeHBlcmltZW50R3JvdXA6XCJcIixidWRnZXRBYlN0dWR5OnZvaWQgMCxza2lwUHJlZGljdGlvbjp2b2lkIDAsc3dpcGVQcmVkaWN0aW9uOnZvaWQgMCxpbnN0YWxsUHJlZGljdGlvbjp2b2lkIDAsY2xpZW50UmFua2luZ0FiU3R1ZHk6dm9pZCAwLHdlYnZpZXdQcmVmZXRjaFN0dWR5OnZvaWQgMCxhYlRlc3RVc2VyU2VnbWVudDpcIlwiLGFiVGVzdFVzZXJTZWdtZW50MjA6XCJcIixzdG9yeUFkc0Rpc2FibGVkOiExLGRpc2NvdmVyRmVlZENhcm91c2VsQWRzRW5hYmxlZDohMSxkaXNjb3ZlckZlZWRDYXJvdXNlbEFkc051bU9yZ2FuaWNUaWxlc0JldHdlZW5BZHM6MCxkaXNjb3ZlckZlZWRDYXJvdXNlbEFkc01pbkZlZWRBZFBvc2l0aW9uSW5kZXg6MCx1c2VySW5BZHNIb2xkb3V0OiExLGFkc2VydmVyT2dSb3V0ZVRvQXBpR3c6dm9pZCAwLGlzQWNxdWlyZWRVc2VyOiExLGxhdGVuY3lEZWxheU1zOjAsbmV3VXNlckdyYWNlUGVyaW9kRGF5c1NpbmNlQ3JlYXRpb246dm9pZCAwLGRpc2NvdmVyRmVlZFN0b3J5QWRzTnVtT3JnYW5pY1RpbGVzQmV0d2VlbkFkczp2b2lkIDAsZGlzY292ZXJGZWVkU3RvcnlBZHNNaW5GZWVkQWRQb3NpdGlvbkluZGV4OnZvaWQgMCxhclNob3BwaW5nRW5hYmxlZDohMSx3ZWJ2aWV3UHJlZmV0Y2hUaHJlc2hvbGQ6MCxvbkRldmljZUludmVudG9yeUNvbmZpZ3M6dm9pZCAwLHdlYnZpZXdQcmVmZXRjaERpc2FibGVPdmVycmlkZTohMSxhclNob3BwaW5nUmVtb3RlTGVuc0VuYWJsZWQ6ITEsdm9wZXJhVmFyaWFudElkZW50aWZpZXI6MCxsb29rc2VyeVNwb25zb3JlZEdlb0JhY2tTdHVkeUdyb3VwOlwiXCIsZGlzYWJsZUJsb2NrV2Vidmlld1ByZWxvYWRpbmc6ITEsaXNGb3JjZWRFeHRlcm5hbEJyb3dzZXI6ITEsc2hvdWxkV2Vidmlld1VybEFkZENsaWNrSWQ6ITEsd2Vidmlld0xpZ2h0bmluZ01vZGVTYWZlZ3VhcmRFbmFibGVkOiExLHdlYnZpZXdDbGllbnRDcmF3bFNhZmVndWFyZEVuYWJsZWQ6ITEsc3Rvcmllc1JlbW92ZUludGVyc3RpdGlhbDohMSxzdG9yaWVzRW5hYmxlVGhpblByb2dyZXNzQmFyOiExLHN0b3JpZXNFbmFibGVQcm9ncmVzc0JhcjohMSxzaG91bGREZWVwbGlua1VybEFkZENsaWNrSWQ6ITEsd2Vidmlld0xpZ2h0bmluZ01vZGVTZXJ2ZXJSZWRpcmVjdFVybEVuYWJsZTohMSx3ZWJ2aWV3RXh0ZW5kZWRMaWZlY3ljbGVTZXJ2ZXJDb250cm9sRW5hYmxlZDohMSxsaWdodG5pbmdNb2RlU2VydmVyQXBwcmFpc2FsU2NvcmVUaHJlc2hvbGQ6MCx3ZWJ2aWV3TGlnaHRuaW5nTW9kZU5vbkRvdWJsZWNsaWNrU2VydmVyUmVkaXJlY3RVcmxFbmFibGU6ITEsd2Vidmlld0xpZ2h0bmluZ01vZGVKYXZhc2NyaXB0UmVkaXJlY3RVcmxFbmFibGU6ITEsZm9yY2VFeHRCcm93c2VyQW5kcm9pZE5vblBpeGVsU3RhcjohMSx0cmVhdG1lbnREYXRhRm9yQWxsb3dsaXN0ZWRBYkNvbnNvbGVTdHVkaWVzOltdLGR5bmFtaWNDb25maWdzOnt9LHN0b3J5QWRNYXBFeGNsdWRlZDohMSxzdG9yeUFkU2VlTW9yZTowfTtyZXR1cm4gbi5hZExvYWRUZXN0RXhwZXJpbWVudEdyb3VwPWUuYWRMb2FkVGVzdEV4cGVyaW1lbnRHcm91cD8/XCJcIixuLmJ1ZGdldEFiU3R1ZHk9dm9pZCAwIT09ZS5idWRnZXRBYlN0dWR5JiZudWxsIT09ZS5idWRnZXRBYlN0dWR5P28uQnVkZ2V0QWJTdHVkeS5mcm9tUGFydGlhbChlLmJ1ZGdldEFiU3R1ZHkpOnZvaWQgMCxuLnNraXBQcmVkaWN0aW9uPXZvaWQgMCE9PWUuc2tpcFByZWRpY3Rpb24mJm51bGwhPT1lLnNraXBQcmVkaWN0aW9uP3AuUHJlZGljdGlvblN0dWR5LmZyb21QYXJ0aWFsKGUuc2tpcFByZWRpY3Rpb24pOnZvaWQgMCxuLnN3aXBlUHJlZGljdGlvbj12b2lkIDAhPT1lLnN3aXBlUHJlZGljdGlvbiYmbnVsbCE9PWUuc3dpcGVQcmVkaWN0aW9uP3AuUHJlZGljdGlvblN0dWR5LmZyb21QYXJ0aWFsKGUuc3dpcGVQcmVkaWN0aW9uKTp2b2lkIDAsbi5pbnN0YWxsUHJlZGljdGlvbj12b2lkIDAhPT1lLmluc3RhbGxQcmVkaWN0aW9uJiZudWxsIT09ZS5pbnN0YWxsUHJlZGljdGlvbj9wLlByZWRpY3Rpb25TdHVkeS5mcm9tUGFydGlhbChlLmluc3RhbGxQcmVkaWN0aW9uKTp2b2lkIDAsbi5jbGllbnRSYW5raW5nQWJTdHVkeT12b2lkIDAhPT1lLmNsaWVudFJhbmtpbmdBYlN0dWR5JiZudWxsIT09ZS5jbGllbnRSYW5raW5nQWJTdHVkeT9tLkNsaWVudFJhbmtpbmdTdHVkeS5mcm9tUGFydGlhbChlLmNsaWVudFJhbmtpbmdBYlN0dWR5KTp2b2lkIDAsbi53ZWJ2aWV3UHJlZmV0Y2hTdHVkeT12b2lkIDAhPT1lLndlYnZpZXdQcmVmZXRjaFN0dWR5JiZudWxsIT09ZS53ZWJ2aWV3UHJlZmV0Y2hTdHVkeT9oLldlYnZpZXdQcmVmZXRjaFN0dWR5LmZyb21QYXJ0aWFsKGUud2Vidmlld1ByZWZldGNoU3R1ZHkpOnZvaWQgMCxuLmFiVGVzdFVzZXJTZWdtZW50PWUuYWJUZXN0VXNlclNlZ21lbnQ/P1wiXCIsbi5hYlRlc3RVc2VyU2VnbWVudDIwPWUuYWJUZXN0VXNlclNlZ21lbnQyMD8/XCJcIixuLnN0b3J5QWRzRGlzYWJsZWQ9ZS5zdG9yeUFkc0Rpc2FibGVkPz8hMSxuLmRpc2NvdmVyRmVlZENhcm91c2VsQWRzRW5hYmxlZD1lLmRpc2NvdmVyRmVlZENhcm91c2VsQWRzRW5hYmxlZD8/ITEsbi5kaXNjb3ZlckZlZWRDYXJvdXNlbEFkc051bU9yZ2FuaWNUaWxlc0JldHdlZW5BZHM9ZS5kaXNjb3ZlckZlZWRDYXJvdXNlbEFkc051bU9yZ2FuaWNUaWxlc0JldHdlZW5BZHM/PzAsbi5kaXNjb3ZlckZlZWRDYXJvdXNlbEFkc01pbkZlZWRBZFBvc2l0aW9uSW5kZXg9ZS5kaXNjb3ZlckZlZWRDYXJvdXNlbEFkc01pbkZlZWRBZFBvc2l0aW9uSW5kZXg/PzAsbi51c2VySW5BZHNIb2xkb3V0PWUudXNlckluQWRzSG9sZG91dD8/ITEsbi5hZHNlcnZlck9nUm91dGVUb0FwaUd3PWUuYWRzZXJ2ZXJPZ1JvdXRlVG9BcGlHdz8/dm9pZCAwLG4uaXNBY3F1aXJlZFVzZXI9ZS5pc0FjcXVpcmVkVXNlcj8/ITEsbi5sYXRlbmN5RGVsYXlNcz1lLmxhdGVuY3lEZWxheU1zPz8wLG4ubmV3VXNlckdyYWNlUGVyaW9kRGF5c1NpbmNlQ3JlYXRpb249ZS5uZXdVc2VyR3JhY2VQZXJpb2REYXlzU2luY2VDcmVhdGlvbj8/dm9pZCAwLG4uZGlzY292ZXJGZWVkU3RvcnlBZHNOdW1PcmdhbmljVGlsZXNCZXR3ZWVuQWRzPWUuZGlzY292ZXJGZWVkU3RvcnlBZHNOdW1PcmdhbmljVGlsZXNCZXR3ZWVuQWRzPz92b2lkIDAsbi5kaXNjb3ZlckZlZWRTdG9yeUFkc01pbkZlZWRBZFBvc2l0aW9uSW5kZXg9ZS5kaXNjb3ZlckZlZWRTdG9yeUFkc01pbkZlZWRBZFBvc2l0aW9uSW5kZXg/P3ZvaWQgMCxuLmFyU2hvcHBpbmdFbmFibGVkPWUuYXJTaG9wcGluZ0VuYWJsZWQ/PyExLG4ud2Vidmlld1ByZWZldGNoVGhyZXNob2xkPWUud2Vidmlld1ByZWZldGNoVGhyZXNob2xkPz8wLG4ub25EZXZpY2VJbnZlbnRvcnlDb25maWdzPXZvaWQgMCE9PWUub25EZXZpY2VJbnZlbnRvcnlDb25maWdzJiZudWxsIT09ZS5vbkRldmljZUludmVudG9yeUNvbmZpZ3M/di5PbkRldmljZUludmVudG9yeUNvbmZpZ3MuZnJvbVBhcnRpYWwoZS5vbkRldmljZUludmVudG9yeUNvbmZpZ3MpOnZvaWQgMCxuLndlYnZpZXdQcmVmZXRjaERpc2FibGVPdmVycmlkZT1lLndlYnZpZXdQcmVmZXRjaERpc2FibGVPdmVycmlkZT8/ITEsbi5hclNob3BwaW5nUmVtb3RlTGVuc0VuYWJsZWQ9ZS5hclNob3BwaW5nUmVtb3RlTGVuc0VuYWJsZWQ/PyExLG4udm9wZXJhVmFyaWFudElkZW50aWZpZXI9ZS52b3BlcmFWYXJpYW50SWRlbnRpZmllcj8/MCxuLmxvb2tzZXJ5U3BvbnNvcmVkR2VvQmFja1N0dWR5R3JvdXA9ZS5sb29rc2VyeVNwb25zb3JlZEdlb0JhY2tTdHVkeUdyb3VwPz9cIlwiLG4uZGlzYWJsZUJsb2NrV2Vidmlld1ByZWxvYWRpbmc9ZS5kaXNhYmxlQmxvY2tXZWJ2aWV3UHJlbG9hZGluZz8/ITEsbi5pc0ZvcmNlZEV4dGVybmFsQnJvd3Nlcj1lLmlzRm9yY2VkRXh0ZXJuYWxCcm93c2VyPz8hMSxuLnNob3VsZFdlYnZpZXdVcmxBZGRDbGlja0lkPWUuc2hvdWxkV2Vidmlld1VybEFkZENsaWNrSWQ/PyExLG4ud2Vidmlld0xpZ2h0bmluZ01vZGVTYWZlZ3VhcmRFbmFibGVkPWUud2Vidmlld0xpZ2h0bmluZ01vZGVTYWZlZ3VhcmRFbmFibGVkPz8hMSxuLndlYnZpZXdDbGllbnRDcmF3bFNhZmVndWFyZEVuYWJsZWQ9ZS53ZWJ2aWV3Q2xpZW50Q3Jhd2xTYWZlZ3VhcmRFbmFibGVkPz8hMSxuLnN0b3JpZXNSZW1vdmVJbnRlcnN0aXRpYWw9ZS5zdG9yaWVzUmVtb3ZlSW50ZXJzdGl0aWFsPz8hMSxuLnN0b3JpZXNFbmFibGVUaGluUHJvZ3Jlc3NCYXI9ZS5zdG9yaWVzRW5hYmxlVGhpblByb2dyZXNzQmFyPz8hMSxuLnN0b3JpZXNFbmFibGVQcm9ncmVzc0Jhcj1lLnN0b3JpZXNFbmFibGVQcm9ncmVzc0Jhcj8/ITEsbi5zaG91bGREZWVwbGlua1VybEFkZENsaWNrSWQ9ZS5zaG91bGREZWVwbGlua1VybEFkZENsaWNrSWQ/PyExLG4ud2Vidmlld0xpZ2h0bmluZ01vZGVTZXJ2ZXJSZWRpcmVjdFVybEVuYWJsZT1lLndlYnZpZXdMaWdodG5pbmdNb2RlU2VydmVyUmVkaXJlY3RVcmxFbmFibGU/PyExLG4ud2Vidmlld0V4dGVuZGVkTGlmZWN5Y2xlU2VydmVyQ29udHJvbEVuYWJsZWQ9ZS53ZWJ2aWV3RXh0ZW5kZWRMaWZlY3ljbGVTZXJ2ZXJDb250cm9sRW5hYmxlZD8/ITEsbi5saWdodG5pbmdNb2RlU2VydmVyQXBwcmFpc2FsU2NvcmVUaHJlc2hvbGQ9ZS5saWdodG5pbmdNb2RlU2VydmVyQXBwcmFpc2FsU2NvcmVUaHJlc2hvbGQ/PzAsbi53ZWJ2aWV3TGlnaHRuaW5nTW9kZU5vbkRvdWJsZWNsaWNrU2VydmVyUmVkaXJlY3RVcmxFbmFibGU9ZS53ZWJ2aWV3TGlnaHRuaW5nTW9kZU5vbkRvdWJsZWNsaWNrU2VydmVyUmVkaXJlY3RVcmxFbmFibGU/PyExLG4ud2Vidmlld0xpZ2h0bmluZ01vZGVKYXZhc2NyaXB0UmVkaXJlY3RVcmxFbmFibGU9ZS53ZWJ2aWV3TGlnaHRuaW5nTW9kZUphdmFzY3JpcHRSZWRpcmVjdFVybEVuYWJsZT8/ITEsbi5mb3JjZUV4dEJyb3dzZXJBbmRyb2lkTm9uUGl4ZWxTdGFyPWUuZm9yY2VFeHRCcm93c2VyQW5kcm9pZE5vblBpeGVsU3Rhcj8/ITEsbi50cmVhdG1lbnREYXRhRm9yQWxsb3dsaXN0ZWRBYkNvbnNvbGVTdHVkaWVzPWUudHJlYXRtZW50RGF0YUZvckFsbG93bGlzdGVkQWJDb25zb2xlU3R1ZGllcz8ubWFwKChlPT50LkFiQ29uc29sZVN0dWR5VHJlYXRtZW50RGF0YS5mcm9tUGFydGlhbChlKSkpfHxbXSxuLmR5bmFtaWNDb25maWdzPU9iamVjdC5lbnRyaWVzKGUuZHluYW1pY0NvbmZpZ3M/P3t9KS5yZWR1Y2UoKChlLHQpPT57bGV0W24scl09dDtyZXR1cm4gdm9pZCAwIT09ciYmKGVbbl09Zy5WYWx1ZS5mcm9tUGFydGlhbChyKSksZX0pLHt9KSxuLnN0b3J5QWRNYXBFeGNsdWRlZD1lLnN0b3J5QWRNYXBFeGNsdWRlZD8/ITEsbi5zdG9yeUFkU2VlTW9yZT1lLnN0b3J5QWRTZWVNb3JlPz8wLG59fSx0LkFCVGVzdF9EeW5hbWljQ29uZmlnc0VudHJ5PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUua2V5JiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUua2V5KSx2b2lkIDAhPT1lLnZhbHVlJiZnLlZhbHVlLmVuY29kZShlLnZhbHVlLHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgeS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17a2V5OlwiXCIsdmFsdWU6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5rZXk9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS52YWx1ZT1nLlZhbHVlLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17a2V5OlwiXCIsdmFsdWU6dm9pZCAwfTtyZXR1cm4gdC5rZXk9ZS5rZXk/P1wiXCIsdC52YWx1ZT12b2lkIDAhPT1lLnZhbHVlJiZudWxsIT09ZS52YWx1ZT9nLlZhbHVlLmZyb21QYXJ0aWFsKGUudmFsdWUpOnZvaWQgMCx0fX0sdC5BYkNvbnNvbGVTdHVkeVRyZWF0bWVudERhdGE9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06eS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUuc2VnbWVudElkJiZ0LnVpbnQzMig4KS5pbnQzMihlLnNlZ21lbnRJZCksMCE9PWUuZXhwZXJpbWVudElkJiZ0LnVpbnQzMigxNikuaW50MzIoZS5leHBlcmltZW50SWQpLFwiXCIhPT1lLmNvZlN0dWR5TmFtZSYmdC51aW50MzIoMjYpLnN0cmluZyhlLmNvZlN0dWR5TmFtZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgeS5kZWZhdWx0LlJlYWRlcj9lOm5ldyB5LmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtzZWdtZW50SWQ6MCxleHBlcmltZW50SWQ6MCxjb2ZTdHVkeU5hbWU6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuc2VnbWVudElkPW4uaW50MzIoKTticmVhaztjYXNlIDI6aS5leHBlcmltZW50SWQ9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMzppLmNvZlN0dWR5TmFtZT1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17c2VnbWVudElkOjAsZXhwZXJpbWVudElkOjAsY29mU3R1ZHlOYW1lOlwiXCJ9O3JldHVybiB0LnNlZ21lbnRJZD1lLnNlZ21lbnRJZD8/MCx0LmV4cGVyaW1lbnRJZD1lLmV4cGVyaW1lbnRJZD8/MCx0LmNvZlN0dWR5TmFtZT1lLmNvZlN0dWR5TmFtZT8/XCJcIix0fX0sdC5TdWJzQnJhbmRTYWZldHk9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06eS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUubW9kZSYmdC51aW50MzIoOCkuaW50MzIoZS5tb2RlKSwhMD09PWUuaXNCcmFuZFNhZmUmJnQudWludDMyKDE2KS5ib29sKGUuaXNCcmFuZFNhZmUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgeS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17bW9kZTowLGlzQnJhbmRTYWZlOiExfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5tb2RlPW4uaW50MzIoKTticmVhaztjYXNlIDI6aS5pc0JyYW5kU2FmZT1uLmJvb2woKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e21vZGU6MCxpc0JyYW5kU2FmZTohMX07cmV0dXJuIHQubW9kZT1lLm1vZGU/PzAsdC5pc0JyYW5kU2FmZT1lLmlzQnJhbmRTYWZlPz8hMSx0fX0sdC5NaXhlckluZm89e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06eS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUuc3RvcnlPZmZzZXQmJm4udWludDMyKDgpLnVpbnQzMihlLnN0b3J5T2Zmc2V0KSxcIlwiIT09ZS52ZXJzaW9uJiZuLnVpbnQzMigxOCkuc3RyaW5nKGUudmVyc2lvbiksMCE9PWUubWluQWRzUG9zJiZuLnVpbnQzMigyNCkudWludDMyKGUubWluQWRzUG9zKSwwIT09ZS5mZWVkVHlwZSYmbi51aW50MzIoMzIpLmludDMyKGUuZmVlZFR5cGUpLHZvaWQgMCE9PWUuc3Vic0JyYW5kU2FmZXR5JiZ0LlN1YnNCcmFuZFNhZmV0eS5lbmNvZGUoZS5zdWJzQnJhbmRTYWZldHksbi51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgeS5kZWZhdWx0LlJlYWRlcj9lOm5ldyB5LmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXtzdG9yeU9mZnNldDowLHZlcnNpb246XCJcIixtaW5BZHNQb3M6MCxmZWVkVHlwZTowLHN1YnNCcmFuZFNhZmV0eTp2b2lkIDB9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLnN0b3J5T2Zmc2V0PXIudWludDMyKCk7YnJlYWs7Y2FzZSAyOm8udmVyc2lvbj1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMzpvLm1pbkFkc1Bvcz1yLnVpbnQzMigpO2JyZWFrO2Nhc2UgNDpvLmZlZWRUeXBlPXIuaW50MzIoKTticmVhaztjYXNlIDU6by5zdWJzQnJhbmRTYWZldHk9dC5TdWJzQnJhbmRTYWZldHkuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtzdG9yeU9mZnNldDowLHZlcnNpb246XCJcIixtaW5BZHNQb3M6MCxmZWVkVHlwZTowLHN1YnNCcmFuZFNhZmV0eTp2b2lkIDB9O3JldHVybiBuLnN0b3J5T2Zmc2V0PWUuc3RvcnlPZmZzZXQ/PzAsbi52ZXJzaW9uPWUudmVyc2lvbj8/XCJcIixuLm1pbkFkc1Bvcz1lLm1pbkFkc1Bvcz8/MCxuLmZlZWRUeXBlPWUuZmVlZFR5cGU/PzAsbi5zdWJzQnJhbmRTYWZldHk9dm9pZCAwIT09ZS5zdWJzQnJhbmRTYWZldHkmJm51bGwhPT1lLnN1YnNCcmFuZFNhZmV0eT90LlN1YnNCcmFuZFNhZmV0eS5mcm9tUGFydGlhbChlLnN1YnNCcmFuZFNhZmV0eSk6dm9pZCAwLG59fSx0LlN0b3J5SXRlbT17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp5LmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpOzAhPT1lLmNvcnB1cyYmbi51aW50MzIoNDgpLmludDMyKGUuY29ycHVzKSxcIjBcIiE9PWUuZnAmJm4udWludDMyKDU2KS51aW50NjQoZS5mcCksITA9PT1lLmlzU3Vic2NyaWJlZCYmbi51aW50MzIoMTYpLmJvb2woZS5pc1N1YnNjcmliZWQpLCEwPT09ZS5pc1Bpbm5lZCYmbi51aW50MzIoMjQpLmJvb2woZS5pc1Bpbm5lZCksITA9PT1lLmlzQnJhbmRTYWZlUXVhbGlmaWVkJiZuLnVpbnQzMigzMikuYm9vbChlLmlzQnJhbmRTYWZlUXVhbGlmaWVkKSwwIT09ZS5maW5hbFNjb3JlJiZuLnVpbnQzMig0MSkuZG91YmxlKGUuZmluYWxTY29yZSk7Zm9yKGNvbnN0IHIgb2YgZS5zY2NUYWdzKXQuU3RvcnlJdGVtX1NjY1RhZ1dlaWdodFBhaXIuZW5jb2RlKHIsbi51aW50MzIoNjYpLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIDAhPT1lLnVzZXJFbmdhZ2VtZW50U2NvcmUmJm4udWludDMyKDc3KS5mbG9hdChlLnVzZXJFbmdhZ2VtZW50U2NvcmUpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIHkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgeS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17Y29ycHVzOjAsZnA6XCIwXCIsaXNTdWJzY3JpYmVkOiExLGlzUGlubmVkOiExLGlzQnJhbmRTYWZlUXVhbGlmaWVkOiExLGZpbmFsU2NvcmU6MCxzY2NUYWdzOltdLHVzZXJFbmdhZ2VtZW50U2NvcmU6MH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSA2Om8uY29ycHVzPXIuaW50MzIoKTticmVhaztjYXNlIDc6by5mcD1EKHIudWludDY0KCkpO2JyZWFrO2Nhc2UgMjpvLmlzU3Vic2NyaWJlZD1yLmJvb2woKTticmVhaztjYXNlIDM6by5pc1Bpbm5lZD1yLmJvb2woKTticmVhaztjYXNlIDQ6by5pc0JyYW5kU2FmZVF1YWxpZmllZD1yLmJvb2woKTticmVhaztjYXNlIDU6by5maW5hbFNjb3JlPXIuZG91YmxlKCk7YnJlYWs7Y2FzZSA4Om8uc2NjVGFncy5wdXNoKHQuU3RvcnlJdGVtX1NjY1RhZ1dlaWdodFBhaXIuZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2Nhc2UgOTpvLnVzZXJFbmdhZ2VtZW50U2NvcmU9ci5mbG9hdCgpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17Y29ycHVzOjAsZnA6XCIwXCIsaXNTdWJzY3JpYmVkOiExLGlzUGlubmVkOiExLGlzQnJhbmRTYWZlUXVhbGlmaWVkOiExLGZpbmFsU2NvcmU6MCxzY2NUYWdzOltdLHVzZXJFbmdhZ2VtZW50U2NvcmU6MH07cmV0dXJuIG4uY29ycHVzPWUuY29ycHVzPz8wLG4uZnA9ZS5mcD8/XCIwXCIsbi5pc1N1YnNjcmliZWQ9ZS5pc1N1YnNjcmliZWQ/PyExLG4uaXNQaW5uZWQ9ZS5pc1Bpbm5lZD8/ITEsbi5pc0JyYW5kU2FmZVF1YWxpZmllZD1lLmlzQnJhbmRTYWZlUXVhbGlmaWVkPz8hMSxuLmZpbmFsU2NvcmU9ZS5maW5hbFNjb3JlPz8wLG4uc2NjVGFncz1lLnNjY1RhZ3M/Lm1hcCgoZT0+dC5TdG9yeUl0ZW1fU2NjVGFnV2VpZ2h0UGFpci5mcm9tUGFydGlhbChlKSkpfHxbXSxuLnVzZXJFbmdhZ2VtZW50U2NvcmU9ZS51c2VyRW5nYWdlbWVudFNjb3JlPz8wLG59fSx0LlN0b3J5SXRlbV9TY2NUYWdXZWlnaHRQYWlyPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLnNjY1RhZyYmdC51aW50MzIoOCkuaW50MzIoZS5zY2NUYWcpLDAhPT1lLndlaWdodCYmdC51aW50MzIoMjEpLmZsb2F0KGUud2VpZ2h0KSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiB5LmRlZmF1bHQuUmVhZGVyP2U6bmV3IHkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3NjY1RhZzowLHdlaWdodDowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5zY2NUYWc9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMjppLndlaWdodD1uLmZsb2F0KCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtzY2NUYWc6MCx3ZWlnaHQ6MH07cmV0dXJuIHQuc2NjVGFnPWUuc2NjVGFnPz8wLHQud2VpZ2h0PWUud2VpZ2h0Pz8wLHR9fSx0LkRpc2NvdmVyUGFnZT17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp5LmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO1wiXCIhPT1lLm1peGVyVmVyc2lvbiYmbi51aW50MzIoMTApLnN0cmluZyhlLm1peGVyVmVyc2lvbiksdm9pZCAwIT09ZS5zdWJzQnJhbmRTYWZldHkmJnQuU3Vic0JyYW5kU2FmZXR5LmVuY29kZShlLnN1YnNCcmFuZFNhZmV0eSxuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKTtmb3IoY29uc3QgciBvZiBlLmZlZWRzKXQuRGlzY292ZXJQYWdlX0ZlZWQuZW5jb2RlKHIsbi51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIHkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgeS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17bWl4ZXJWZXJzaW9uOlwiXCIsc3Vic0JyYW5kU2FmZXR5OnZvaWQgMCxmZWVkczpbXX07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8ubWl4ZXJWZXJzaW9uPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOm8uc3Vic0JyYW5kU2FmZXR5PXQuU3Vic0JyYW5kU2FmZXR5LmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMzpvLmZlZWRzLnB1c2godC5EaXNjb3ZlclBhZ2VfRmVlZC5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXttaXhlclZlcnNpb246XCJcIixzdWJzQnJhbmRTYWZldHk6dm9pZCAwLGZlZWRzOltdfTtyZXR1cm4gbi5taXhlclZlcnNpb249ZS5taXhlclZlcnNpb24/P1wiXCIsbi5zdWJzQnJhbmRTYWZldHk9dm9pZCAwIT09ZS5zdWJzQnJhbmRTYWZldHkmJm51bGwhPT1lLnN1YnNCcmFuZFNhZmV0eT90LlN1YnNCcmFuZFNhZmV0eS5mcm9tUGFydGlhbChlLnN1YnNCcmFuZFNhZmV0eSk6dm9pZCAwLG4uZmVlZHM9ZS5mZWVkcz8ubWFwKChlPT50LkRpc2NvdmVyUGFnZV9GZWVkLmZyb21QYXJ0aWFsKGUpKSl8fFtdLG59fSx0LkRpc2NvdmVyUGFnZV9GZWVkU3R5bGU9e2VuY29kZShlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCl9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgeS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO24uc2tpcFR5cGUoNyZlKX1yZXR1cm57fX0sZnJvbVBhcnRpYWw6ZT0+KHt9KX0sdC5EaXNjb3ZlclBhZ2VfRmVlZD17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp5LmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpOzAhPT1lLnN0b3J5T2Zmc2V0JiZuLnVpbnQzMig4KS51aW50MzIoZS5zdG9yeU9mZnNldCksMCE9PWUuZmVlZFR5cGUmJm4udWludDMyKDE2KS5pbnQzMihlLmZlZWRUeXBlKSwwIT09ZS5mZWVkU3R5bGUmJm4udWludDMyKDMyKS5pbnQzMihlLmZlZWRTdHlsZSksITA9PT1lLmFkc0Rpc2FibGVkJiZuLnVpbnQzMig0MCkuYm9vbChlLmFkc0Rpc2FibGVkKSwwIT09ZS5taW5BZHNQb3MmJm4udWludDMyKDQ4KS51aW50MzIoZS5taW5BZHNQb3MpO2Zvcihjb25zdCB0IG9mIGUuc2NjVGFncyluLnVpbnQzMig1OCkuc3RyaW5nKHQpO2Zvcihjb25zdCByIG9mIGUuc3Rvcmllcyl0LlN0b3J5SXRlbS5lbmNvZGUocixuLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgeS5kZWZhdWx0LlJlYWRlcj9lOm5ldyB5LmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXtzdG9yeU9mZnNldDowLGZlZWRUeXBlOjAsZmVlZFN0eWxlOjAsYWRzRGlzYWJsZWQ6ITEsbWluQWRzUG9zOjAsc2NjVGFnczpbXSxzdG9yaWVzOltdfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5zdG9yeU9mZnNldD1yLnVpbnQzMigpO2JyZWFrO2Nhc2UgMjpvLmZlZWRUeXBlPXIuaW50MzIoKTticmVhaztjYXNlIDQ6by5mZWVkU3R5bGU9ci5pbnQzMigpO2JyZWFrO2Nhc2UgNTpvLmFkc0Rpc2FibGVkPXIuYm9vbCgpO2JyZWFrO2Nhc2UgNjpvLm1pbkFkc1Bvcz1yLnVpbnQzMigpO2JyZWFrO2Nhc2UgNzpvLnNjY1RhZ3MucHVzaChyLnN0cmluZygpKTticmVhaztjYXNlIDM6by5zdG9yaWVzLnB1c2godC5TdG9yeUl0ZW0uZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17c3RvcnlPZmZzZXQ6MCxmZWVkVHlwZTowLGZlZWRTdHlsZTowLGFkc0Rpc2FibGVkOiExLG1pbkFkc1BvczowLHNjY1RhZ3M6W10sc3RvcmllczpbXX07cmV0dXJuIG4uc3RvcnlPZmZzZXQ9ZS5zdG9yeU9mZnNldD8/MCxuLmZlZWRUeXBlPWUuZmVlZFR5cGU/PzAsbi5mZWVkU3R5bGU9ZS5mZWVkU3R5bGU/PzAsbi5hZHNEaXNhYmxlZD1lLmFkc0Rpc2FibGVkPz8hMSxuLm1pbkFkc1Bvcz1lLm1pbkFkc1Bvcz8/MCxuLnNjY1RhZ3M9ZS5zY2NUYWdzPy5tYXAoKGU9PmUpKXx8W10sbi5zdG9yaWVzPWUuc3Rvcmllcz8ubWFwKChlPT50LlN0b3J5SXRlbS5mcm9tUGFydGlhbChlKSkpfHxbXSxufX0sdC5BZFNlcnZlU2VydmljZUNsaWVudEltcGw9Y2xhc3N7cnBjO2NvbnN0cnVjdG9yKGUpe3RoaXMucnBjPWUsdGhpcy5BZFNlcnZlUmVxdWVzdD10aGlzLkFkU2VydmVSZXF1ZXN0LmJpbmQodGhpcyl9QWRTZXJ2ZVJlcXVlc3QoZSxuKXtyZXR1cm4gdGhpcy5ycGMudW5hcnkodC5BZFNlcnZlU2VydmljZUFkU2VydmVSZXF1ZXN0RGVzYyx0LkFkUmVxdWVzdC5mcm9tUGFydGlhbChlKSxuKX19LHQuQWRTZXJ2ZVNlcnZpY2VEZXNjPXtzZXJ2aWNlTmFtZTpcInNuYXBjaGF0LmFkcy5yZXF1ZXN0LnNjaGVtYS5BZFNlcnZlU2VydmljZVwifSx0LkFkU2VydmVTZXJ2aWNlQWRTZXJ2ZVJlcXVlc3REZXNjPXttZXRob2ROYW1lOlwiQWRTZXJ2ZVJlcXVlc3RcIixzZXJ2aWNlOnQuQWRTZXJ2ZVNlcnZpY2VEZXNjLHJlcXVlc3RTdHJlYW06ITEscmVzcG9uc2VTdHJlYW06ITEscmVxdWVzdFR5cGU6e3NlcmlhbGl6ZUJpbmFyeSgpe3JldHVybiB0LkFkUmVxdWVzdC5lbmNvZGUodGhpcykuZmluaXNoKCl9fSxyZXNwb25zZVR5cGU6e2Rlc2VyaWFsaXplQmluYXJ5OmU9Pih7Li4uYS5BZFJlc3BvbnNlLmRlY29kZShlKSx0b09iamVjdCgpe3JldHVybiB0aGlzfX0pfX0sdC5HcnBjV2ViSW1wbD1jbGFzc3tob3N0O29wdGlvbnM7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmhvc3Q9ZSx0aGlzLm9wdGlvbnM9dH11bmFyeShlLHQsbil7Y29uc3Qgcj17Li4udCwuLi5lLnJlcXVlc3RUeXBlfSxvPW4mJnRoaXMub3B0aW9ucy5tZXRhZGF0YT9uZXcgcy5Ccm93c2VySGVhZGVycyh7Li4udGhpcy5vcHRpb25zPy5tZXRhZGF0YS5oZWFkZXJzTWFwLC4uLm4/LmhlYWRlcnNNYXB9KTpufHx0aGlzLm9wdGlvbnMubWV0YWRhdGE7cmV0dXJuIG5ldyBQcm9taXNlKCgodCxuKT0+e2kuZ3JwYy51bmFyeShlLHtyZXF1ZXN0OnIsaG9zdDp0aGlzLmhvc3QsbWV0YWRhdGE6byx0cmFuc3BvcnQ6dGhpcy5vcHRpb25zLnRyYW5zcG9ydCxkZWJ1Zzp0aGlzLm9wdGlvbnMuZGVidWcsb25FbmQ6ZnVuY3Rpb24oZSl7aWYoZS5zdGF0dXM9PT1pLmdycGMuQ29kZS5PSyl0KGUubWVzc2FnZSk7ZWxzZXtjb25zdCB0PW5ldyBQKGUuc3RhdHVzTWVzc2FnZSxlLnN0YXR1cyxlLnRyYWlsZXJzKTtuKHQpfX19KX0pKX19LHkuZGVmYXVsdC51dGlsLkxvbmchPT1jLmRlZmF1bHQmJih5LmRlZmF1bHQudXRpbC5Mb25nPWMuZGVmYXVsdCx5LmRlZmF1bHQuY29uZmlndXJlKCkpO2NsYXNzIFAgZXh0ZW5kcyBFcnJvcntjb2RlO21ldGFkYXRhO2NvbnN0cnVjdG9yKGUsdCxuKXtzdXBlcihlKSx0aGlzLmNvZGU9dCx0aGlzLm1ldGFkYXRhPW59fXQuR3JwY1dlYkVycm9yPVB9LDM3NTc1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkRpZmZlcmVudGlhbFByaXZhY3lQYXJhbWV0ZXJzPXQuT25EZXZpY2VJbmZvPXQuQWRNZXRhZGF0YUNhY2hlQ29uZmlnPXQuQWRQb3NpdGlvbj10LlNLQWROZXR3b3JrQXR0cmlidXRpb249dC5MZW5zUG9zaXRpb249dC5BZFNlcnZlSXRlbT10LkludmVudG9yeVJlc3BvbnNlPXQuQWRSZXNwb25zZT10LlNLQWROZXR3b3JrQXR0cmlidXRpb25fU0tBZE5ldHdvcmtBdHRyaWJ1dGlvblNpZ25hdHVyZUNvbnRlbnRUcmFuc2Zvcm1hdGlvbj12b2lkIDA7Y29uc3QgaT1yKG4oNDE1ODMpKSxvPW4oNTczNjcpLGE9bigxNTc4NCkscz1uKDcxMDM3KSxjPW4oODM2OTUpLGw9cihuKDYyMTAwKSksdT1uKDUzMDU2KTtmdW5jdGlvbiBkKCl7cmV0dXJue2VuY3J5cHRlZFVzZXJUcmFja0RhdGE6bmV3IFVpbnQ4QXJyYXksaW52ZW50b3J5UmVzcG9uc2VzOltdfX1mdW5jdGlvbiBmKCl7cmV0dXJue2Vycm9yQ29kZTowLHJlcXVlc3RJZDpuZXcgVWludDhBcnJheSx0cmFja1VybDpcIlwiLHRyYWNrQW5kR2V0VXJsOlwiXCIsaXRlbXM6W10sd2F0ZXJmYWxsOlwiXCIsanNvblRyYWNrVXJsOlwiXCIscHJvdG9UcmFja1VybDpcIlwiLGJhdGNoVHJhY2tVcmw6XCJcIn19ZnVuY3Rpb24gcCgpe3JldHVybnthZERhdGE6bmV3IFVpbnQ4QXJyYXksZW5jcnlwdGVkQWRUcmFja0RhdGE6bmV3IFVpbnQ4QXJyYXksYWRJZDpuZXcgVWludDhBcnJheSxhZFBvc2l0aW9uOnZvaWQgMCxsZW5zUG9zaXRpb25zOltdLHNlcnZlSXRlbUlkOm5ldyBVaW50OEFycmF5LHZpZXdSZWNlaXB0Om5ldyBVaW50OEFycmF5LGFkUmVuZGVyRGF0YTpuZXcgVWludDhBcnJheSxhZFR5cGU6MCxkZW1hbmRTb3VyY2U6MCxlbGlnaWJsZVRoaXJkUGFydHlBZE5ldHdvcmtUcmFja0luZm86W10scGl4ZWxJZDpuZXcgVWludDhBcnJheSxza0FkTmV0d29ya0F0dHJpYnV0aW9uOnZvaWQgMCxhZE1ldGFkYXRhQ2FjaGVUdGxTZWNzOlwiMFwiLG9yZ2FuaWNWYWx1ZTowLGFkSW5zZXJ0aW9uQ29uZmlnOnZvaWQgMCxzZXJ2ZVRpbWVzdGFtcE1pbGxpczpcIjBcIixhZE1ldGFkYXRhQ2FjaGVDb25maWc6dm9pZCAwLGFkU3dpcGVVcExpa2VseTohMSxvbkRldmljZUluZm86dm9pZCAwLGVuYWJsZUFwcEluc3RhbGxUcmFja1JldmFtcDohMSxzcG9uc29yZWRVbmxvY2thYmxlVHlwZTowLGFkU3F1YWRJZDpuZXcgVWludDhBcnJheSxjYW1wYWlnbklkOm5ldyBVaW50OEFycmF5LGFkQWNjb3VudElkOm5ldyBVaW50OEFycmF5LHN3aXBlUHJvYmFiaWxpdHk6MCxjbGllbnRDcmF3bFJlcXVlc3RzOltdLG9wdGltaXphdGlvbkdvYWw6MCxsZW5zTWl4ZXJNZXRhZGF0YTp2b2lkIDB9fWZ1bmN0aW9uIG0oKXtyZXR1cm57c2tBZE5ldHdvcmtWZXJzaW9uOlwiXCIsc2tBZE5ldHdvcmtDYW1wYWlnbklkZW50aWZpZXI6dm9pZCAwLHNrQWROZXR3b3JrVGltZXN0YW1wTXM6dm9pZCAwLHNrQWROZXR3b3JrTm9uY2U6bmV3IFVpbnQ4QXJyYXksc2tBZE5ldHdvcmtBdHRyaWJ1dGlvblNpZ25hdHVyZTpuZXcgVWludDhBcnJheSxzaWduYXR1cmVDb250ZW50VHJhbnNmb3JtYXRpb246MCxza0FkTmV0d29ya1ZpZXdUaHJvdWdoVmVyc2lvbjpcIlwiLHNrQWROZXR3b3JrVmlld1Rocm91Z2hOb25jZTpuZXcgVWludDhBcnJheSxza0FkTmV0d29ya1ZpZXdUaHJvdWdoQXR0cmlidXRpb25TaWduYXR1cmU6bmV3IFVpbnQ4QXJyYXksc2tBZE5ldHdvcmtTb3VyY2VJZGVudGlmaWVyOnZvaWQgMH19ZnVuY3Rpb24gaCgpe3JldHVybntvbkRldmljZU1hdGNoS2V5Om5ldyBVaW50OEFycmF5LGV2ZW50VHlwZTowLGRwUGFyYW1zOnZvaWQgMCxlbmFibGVTaWRnRXhjbHVzaW9uOiExLGVuYWJsZUNhbk9wZW5VcmxFeGNsdXNpb246ITF9fWZ1bmN0aW9uIHYoZSl7cmV0dXJuIGUudG9TdHJpbmcoKX12YXIgZzsoZz10LlNLQWROZXR3b3JrQXR0cmlidXRpb25fU0tBZE5ldHdvcmtBdHRyaWJ1dGlvblNpZ25hdHVyZUNvbnRlbnRUcmFuc2Zvcm1hdGlvbnx8KHQuU0tBZE5ldHdvcmtBdHRyaWJ1dGlvbl9TS0FkTmV0d29ya0F0dHJpYnV0aW9uU2lnbmF0dXJlQ29udGVudFRyYW5zZm9ybWF0aW9uPXt9KSlbZy5VTlNFVD0wXT1cIlVOU0VUXCIsZ1tnLlVURjhfREVDT0RFPTFdPVwiVVRGOF9ERUNPREVcIixnW2cuQkFTRTY0X0VOQ09ERT0yXT1cIkJBU0U2NF9FTkNPREVcIixnW2cuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLHQuQWRSZXNwb25zZT17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpOzAhPT1lLmVuY3J5cHRlZFVzZXJUcmFja0RhdGEubGVuZ3RoJiZuLnVpbnQzMigxMCkuYnl0ZXMoZS5lbmNyeXB0ZWRVc2VyVHJhY2tEYXRhKTtmb3IoY29uc3QgciBvZiBlLmludmVudG9yeVJlc3BvbnNlcyl0LkludmVudG9yeVJlc3BvbnNlLmVuY29kZShyLG4udWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiBufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBsLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGwuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89ZCgpO2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLmVuY3J5cHRlZFVzZXJUcmFja0RhdGE9ci5ieXRlcygpO2JyZWFrO2Nhc2UgMjpvLmludmVudG9yeVJlc3BvbnNlcy5wdXNoKHQuSW52ZW50b3J5UmVzcG9uc2UuZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj1kKCk7cmV0dXJuIG4uZW5jcnlwdGVkVXNlclRyYWNrRGF0YT1lLmVuY3J5cHRlZFVzZXJUcmFja0RhdGE/P25ldyBVaW50OEFycmF5LG4uaW52ZW50b3J5UmVzcG9uc2VzPWUuaW52ZW50b3J5UmVzcG9uc2VzPy5tYXAoKGU9PnQuSW52ZW50b3J5UmVzcG9uc2UuZnJvbVBhcnRpYWwoZSkpKXx8W10sbn19LHQuSW52ZW50b3J5UmVzcG9uc2U9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bC5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTswIT09ZS5lcnJvckNvZGUmJm4udWludDMyKDgpLmludDMyKGUuZXJyb3JDb2RlKSwwIT09ZS5yZXF1ZXN0SWQubGVuZ3RoJiZuLnVpbnQzMigxOCkuYnl0ZXMoZS5yZXF1ZXN0SWQpLFwiXCIhPT1lLnRyYWNrVXJsJiZuLnVpbnQzMigyNikuc3RyaW5nKGUudHJhY2tVcmwpLFwiXCIhPT1lLnRyYWNrQW5kR2V0VXJsJiZuLnVpbnQzMigzNCkuc3RyaW5nKGUudHJhY2tBbmRHZXRVcmwpO2Zvcihjb25zdCByIG9mIGUuaXRlbXMpdC5BZFNlcnZlSXRlbS5lbmNvZGUocixuLnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm5cIlwiIT09ZS53YXRlcmZhbGwmJm4udWludDMyKDUwKS5zdHJpbmcoZS53YXRlcmZhbGwpLFwiXCIhPT1lLmpzb25UcmFja1VybCYmbi51aW50MzIoNTgpLnN0cmluZyhlLmpzb25UcmFja1VybCksXCJcIiE9PWUucHJvdG9UcmFja1VybCYmbi51aW50MzIoNjYpLnN0cmluZyhlLnByb3RvVHJhY2tVcmwpLFwiXCIhPT1lLmJhdGNoVHJhY2tVcmwmJm4udWludDMyKDc0KS5zdHJpbmcoZS5iYXRjaFRyYWNrVXJsKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBsLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGwuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89ZigpO2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLmVycm9yQ29kZT1yLmludDMyKCk7YnJlYWs7Y2FzZSAyOm8ucmVxdWVzdElkPXIuYnl0ZXMoKTticmVhaztjYXNlIDM6by50cmFja1VybD1yLnN0cmluZygpO2JyZWFrO2Nhc2UgNDpvLnRyYWNrQW5kR2V0VXJsPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSA1Om8uaXRlbXMucHVzaCh0LkFkU2VydmVJdGVtLmRlY29kZShyLHIudWludDMyKCkpKTticmVhaztjYXNlIDY6by53YXRlcmZhbGw9ci5zdHJpbmcoKTticmVhaztjYXNlIDc6by5qc29uVHJhY2tVcmw9ci5zdHJpbmcoKTticmVhaztjYXNlIDg6by5wcm90b1RyYWNrVXJsPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSA5Om8uYmF0Y2hUcmFja1VybD1yLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj1mKCk7cmV0dXJuIG4uZXJyb3JDb2RlPWUuZXJyb3JDb2RlPz8wLG4ucmVxdWVzdElkPWUucmVxdWVzdElkPz9uZXcgVWludDhBcnJheSxuLnRyYWNrVXJsPWUudHJhY2tVcmw/P1wiXCIsbi50cmFja0FuZEdldFVybD1lLnRyYWNrQW5kR2V0VXJsPz9cIlwiLG4uaXRlbXM9ZS5pdGVtcz8ubWFwKChlPT50LkFkU2VydmVJdGVtLmZyb21QYXJ0aWFsKGUpKSl8fFtdLG4ud2F0ZXJmYWxsPWUud2F0ZXJmYWxsPz9cIlwiLG4uanNvblRyYWNrVXJsPWUuanNvblRyYWNrVXJsPz9cIlwiLG4ucHJvdG9UcmFja1VybD1lLnByb3RvVHJhY2tVcmw/P1wiXCIsbi5iYXRjaFRyYWNrVXJsPWUuYmF0Y2hUcmFja1VybD8/XCJcIixufX0sdC5BZFNlcnZlSXRlbT17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpOzAhPT1lLmFkRGF0YS5sZW5ndGgmJm4udWludDMyKDEwKS5ieXRlcyhlLmFkRGF0YSksMCE9PWUuZW5jcnlwdGVkQWRUcmFja0RhdGEubGVuZ3RoJiZuLnVpbnQzMigxOCkuYnl0ZXMoZS5lbmNyeXB0ZWRBZFRyYWNrRGF0YSksMCE9PWUuYWRJZC5sZW5ndGgmJm4udWludDMyKDI2KS5ieXRlcyhlLmFkSWQpLHZvaWQgMCE9PWUuYWRQb3NpdGlvbiYmdC5BZFBvc2l0aW9uLmVuY29kZShlLmFkUG9zaXRpb24sbi51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCk7Zm9yKGNvbnN0IHIgb2YgZS5sZW5zUG9zaXRpb25zKXQuTGVuc1Bvc2l0aW9uLmVuY29kZShyLG4udWludDMyKDIxOCkuZm9yaygpKS5sZGVsaW0oKTswIT09ZS5zZXJ2ZUl0ZW1JZC5sZW5ndGgmJm4udWludDMyKDQyKS5ieXRlcyhlLnNlcnZlSXRlbUlkKSwwIT09ZS52aWV3UmVjZWlwdC5sZW5ndGgmJm4udWludDMyKDUwKS5ieXRlcyhlLnZpZXdSZWNlaXB0KSwwIT09ZS5hZFJlbmRlckRhdGEubGVuZ3RoJiZuLnVpbnQzMig1OCkuYnl0ZXMoZS5hZFJlbmRlckRhdGEpLDAhPT1lLmFkVHlwZSYmbi51aW50MzIoNjQpLmludDMyKGUuYWRUeXBlKSwwIT09ZS5kZW1hbmRTb3VyY2UmJm4udWludDMyKDgwKS5pbnQzMihlLmRlbWFuZFNvdXJjZSk7Zm9yKGNvbnN0IHQgb2YgZS5lbGlnaWJsZVRoaXJkUGFydHlBZE5ldHdvcmtUcmFja0luZm8pby5UaGlyZFBhcnR5QWROZXR3b3JrVHJhY2tJbmZvLmVuY29kZSh0LG4udWludDMyKDkwKS5mb3JrKCkpLmxkZWxpbSgpOzAhPT1lLnBpeGVsSWQubGVuZ3RoJiZuLnVpbnQzMig5OCkuYnl0ZXMoZS5waXhlbElkKSx2b2lkIDAhPT1lLnNrQWROZXR3b3JrQXR0cmlidXRpb24mJnQuU0tBZE5ldHdvcmtBdHRyaWJ1dGlvbi5lbmNvZGUoZS5za0FkTmV0d29ya0F0dHJpYnV0aW9uLG4udWludDMyKDEwNikuZm9yaygpKS5sZGVsaW0oKSxcIjBcIiE9PWUuYWRNZXRhZGF0YUNhY2hlVHRsU2VjcyYmbi51aW50MzIoMTEyKS5pbnQ2NChlLmFkTWV0YWRhdGFDYWNoZVR0bFNlY3MpLDAhPT1lLm9yZ2FuaWNWYWx1ZSYmbi51aW50MzIoMTI1KS5mbG9hdChlLm9yZ2FuaWNWYWx1ZSksdm9pZCAwIT09ZS5hZEluc2VydGlvbkNvbmZpZyYmYS5BZEluc2VydGlvbkNvbmZpZy5lbmNvZGUoZS5hZEluc2VydGlvbkNvbmZpZyxuLnVpbnQzMigxMzApLmZvcmsoKSkubGRlbGltKCksXCIwXCIhPT1lLnNlcnZlVGltZXN0YW1wTWlsbGlzJiZuLnVpbnQzMigxMzYpLmludDY0KGUuc2VydmVUaW1lc3RhbXBNaWxsaXMpLHZvaWQgMCE9PWUuYWRNZXRhZGF0YUNhY2hlQ29uZmlnJiZ0LkFkTWV0YWRhdGFDYWNoZUNvbmZpZy5lbmNvZGUoZS5hZE1ldGFkYXRhQ2FjaGVDb25maWcsbi51aW50MzIoMTQ2KS5mb3JrKCkpLmxkZWxpbSgpLCEwPT09ZS5hZFN3aXBlVXBMaWtlbHkmJm4udWludDMyKDE1MikuYm9vbChlLmFkU3dpcGVVcExpa2VseSksdm9pZCAwIT09ZS5vbkRldmljZUluZm8mJnQuT25EZXZpY2VJbmZvLmVuY29kZShlLm9uRGV2aWNlSW5mbyxuLnVpbnQzMigxNjIpLmZvcmsoKSkubGRlbGltKCksITA9PT1lLmVuYWJsZUFwcEluc3RhbGxUcmFja1JldmFtcCYmbi51aW50MzIoMTY4KS5ib29sKGUuZW5hYmxlQXBwSW5zdGFsbFRyYWNrUmV2YW1wKSwwIT09ZS5zcG9uc29yZWRVbmxvY2thYmxlVHlwZSYmbi51aW50MzIoMTc2KS5pbnQzMihlLnNwb25zb3JlZFVubG9ja2FibGVUeXBlKSwwIT09ZS5hZFNxdWFkSWQubGVuZ3RoJiZuLnVpbnQzMigxODYpLmJ5dGVzKGUuYWRTcXVhZElkKSwwIT09ZS5jYW1wYWlnbklkLmxlbmd0aCYmbi51aW50MzIoMTk0KS5ieXRlcyhlLmNhbXBhaWduSWQpLDAhPT1lLmFkQWNjb3VudElkLmxlbmd0aCYmbi51aW50MzIoMjAyKS5ieXRlcyhlLmFkQWNjb3VudElkKSwwIT09ZS5zd2lwZVByb2JhYmlsaXR5JiZuLnVpbnQzMigyMTMpLmZsb2F0KGUuc3dpcGVQcm9iYWJpbGl0eSk7Zm9yKGNvbnN0IHQgb2YgZS5jbGllbnRDcmF3bFJlcXVlc3RzKXMuQ2xpZW50Q3Jhd2xSZXF1ZXN0LmVuY29kZSh0LG4udWludDMyKDIyNikuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gMCE9PWUub3B0aW1pemF0aW9uR29hbCYmbi51aW50MzIoMjMyKS5pbnQzMihlLm9wdGltaXphdGlvbkdvYWwpLHZvaWQgMCE9PWUubGVuc01peGVyTWV0YWRhdGEmJmMuTGVuc01peGVyTWV0YWRhdGEuZW5jb2RlKGUubGVuc01peGVyTWV0YWRhdGEsbi51aW50MzIoMjQyKS5mb3JrKCkpLmxkZWxpbSgpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGwuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbC5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3QgdT1wKCk7Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOnUuYWREYXRhPXIuYnl0ZXMoKTticmVhaztjYXNlIDI6dS5lbmNyeXB0ZWRBZFRyYWNrRGF0YT1yLmJ5dGVzKCk7YnJlYWs7Y2FzZSAzOnUuYWRJZD1yLmJ5dGVzKCk7YnJlYWs7Y2FzZSA0OnUuYWRQb3NpdGlvbj10LkFkUG9zaXRpb24uZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyNzp1LmxlbnNQb3NpdGlvbnMucHVzaCh0LkxlbnNQb3NpdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSA1OnUuc2VydmVJdGVtSWQ9ci5ieXRlcygpO2JyZWFrO2Nhc2UgNjp1LnZpZXdSZWNlaXB0PXIuYnl0ZXMoKTticmVhaztjYXNlIDc6dS5hZFJlbmRlckRhdGE9ci5ieXRlcygpO2JyZWFrO2Nhc2UgODp1LmFkVHlwZT1yLmludDMyKCk7YnJlYWs7Y2FzZSAxMDp1LmRlbWFuZFNvdXJjZT1yLmludDMyKCk7YnJlYWs7Y2FzZSAxMTp1LmVsaWdpYmxlVGhpcmRQYXJ0eUFkTmV0d29ya1RyYWNrSW5mby5wdXNoKG8uVGhpcmRQYXJ0eUFkTmV0d29ya1RyYWNrSW5mby5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAxMjp1LnBpeGVsSWQ9ci5ieXRlcygpO2JyZWFrO2Nhc2UgMTM6dS5za0FkTmV0d29ya0F0dHJpYnV0aW9uPXQuU0tBZE5ldHdvcmtBdHRyaWJ1dGlvbi5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDE0OnUuYWRNZXRhZGF0YUNhY2hlVHRsU2Vjcz12KHIuaW50NjQoKSk7YnJlYWs7Y2FzZSAxNTp1Lm9yZ2FuaWNWYWx1ZT1yLmZsb2F0KCk7YnJlYWs7Y2FzZSAxNjp1LmFkSW5zZXJ0aW9uQ29uZmlnPWEuQWRJbnNlcnRpb25Db25maWcuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAxNzp1LnNlcnZlVGltZXN0YW1wTWlsbGlzPXYoci5pbnQ2NCgpKTticmVhaztjYXNlIDE4OnUuYWRNZXRhZGF0YUNhY2hlQ29uZmlnPXQuQWRNZXRhZGF0YUNhY2hlQ29uZmlnLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMTk6dS5hZFN3aXBlVXBMaWtlbHk9ci5ib29sKCk7YnJlYWs7Y2FzZSAyMDp1Lm9uRGV2aWNlSW5mbz10Lk9uRGV2aWNlSW5mby5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDIxOnUuZW5hYmxlQXBwSW5zdGFsbFRyYWNrUmV2YW1wPXIuYm9vbCgpO2JyZWFrO2Nhc2UgMjI6dS5zcG9uc29yZWRVbmxvY2thYmxlVHlwZT1yLmludDMyKCk7YnJlYWs7Y2FzZSAyMzp1LmFkU3F1YWRJZD1yLmJ5dGVzKCk7YnJlYWs7Y2FzZSAyNDp1LmNhbXBhaWduSWQ9ci5ieXRlcygpO2JyZWFrO2Nhc2UgMjU6dS5hZEFjY291bnRJZD1yLmJ5dGVzKCk7YnJlYWs7Y2FzZSAyNjp1LnN3aXBlUHJvYmFiaWxpdHk9ci5mbG9hdCgpO2JyZWFrO2Nhc2UgMjg6dS5jbGllbnRDcmF3bFJlcXVlc3RzLnB1c2gocy5DbGllbnRDcmF3bFJlcXVlc3QuZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2Nhc2UgMjk6dS5vcHRpbWl6YXRpb25Hb2FsPXIuaW50MzIoKTticmVhaztjYXNlIDMwOnUubGVuc01peGVyTWV0YWRhdGE9Yy5MZW5zTWl4ZXJNZXRhZGF0YS5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIHV9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49cCgpO3JldHVybiBuLmFkRGF0YT1lLmFkRGF0YT8/bmV3IFVpbnQ4QXJyYXksbi5lbmNyeXB0ZWRBZFRyYWNrRGF0YT1lLmVuY3J5cHRlZEFkVHJhY2tEYXRhPz9uZXcgVWludDhBcnJheSxuLmFkSWQ9ZS5hZElkPz9uZXcgVWludDhBcnJheSxuLmFkUG9zaXRpb249dm9pZCAwIT09ZS5hZFBvc2l0aW9uJiZudWxsIT09ZS5hZFBvc2l0aW9uP3QuQWRQb3NpdGlvbi5mcm9tUGFydGlhbChlLmFkUG9zaXRpb24pOnZvaWQgMCxuLmxlbnNQb3NpdGlvbnM9ZS5sZW5zUG9zaXRpb25zPy5tYXAoKGU9PnQuTGVuc1Bvc2l0aW9uLmZyb21QYXJ0aWFsKGUpKSl8fFtdLG4uc2VydmVJdGVtSWQ9ZS5zZXJ2ZUl0ZW1JZD8/bmV3IFVpbnQ4QXJyYXksbi52aWV3UmVjZWlwdD1lLnZpZXdSZWNlaXB0Pz9uZXcgVWludDhBcnJheSxuLmFkUmVuZGVyRGF0YT1lLmFkUmVuZGVyRGF0YT8/bmV3IFVpbnQ4QXJyYXksbi5hZFR5cGU9ZS5hZFR5cGU/PzAsbi5kZW1hbmRTb3VyY2U9ZS5kZW1hbmRTb3VyY2U/PzAsbi5lbGlnaWJsZVRoaXJkUGFydHlBZE5ldHdvcmtUcmFja0luZm89ZS5lbGlnaWJsZVRoaXJkUGFydHlBZE5ldHdvcmtUcmFja0luZm8/Lm1hcCgoZT0+by5UaGlyZFBhcnR5QWROZXR3b3JrVHJhY2tJbmZvLmZyb21QYXJ0aWFsKGUpKSl8fFtdLG4ucGl4ZWxJZD1lLnBpeGVsSWQ/P25ldyBVaW50OEFycmF5LG4uc2tBZE5ldHdvcmtBdHRyaWJ1dGlvbj12b2lkIDAhPT1lLnNrQWROZXR3b3JrQXR0cmlidXRpb24mJm51bGwhPT1lLnNrQWROZXR3b3JrQXR0cmlidXRpb24/dC5TS0FkTmV0d29ya0F0dHJpYnV0aW9uLmZyb21QYXJ0aWFsKGUuc2tBZE5ldHdvcmtBdHRyaWJ1dGlvbik6dm9pZCAwLG4uYWRNZXRhZGF0YUNhY2hlVHRsU2Vjcz1lLmFkTWV0YWRhdGFDYWNoZVR0bFNlY3M/P1wiMFwiLG4ub3JnYW5pY1ZhbHVlPWUub3JnYW5pY1ZhbHVlPz8wLG4uYWRJbnNlcnRpb25Db25maWc9dm9pZCAwIT09ZS5hZEluc2VydGlvbkNvbmZpZyYmbnVsbCE9PWUuYWRJbnNlcnRpb25Db25maWc/YS5BZEluc2VydGlvbkNvbmZpZy5mcm9tUGFydGlhbChlLmFkSW5zZXJ0aW9uQ29uZmlnKTp2b2lkIDAsbi5zZXJ2ZVRpbWVzdGFtcE1pbGxpcz1lLnNlcnZlVGltZXN0YW1wTWlsbGlzPz9cIjBcIixuLmFkTWV0YWRhdGFDYWNoZUNvbmZpZz12b2lkIDAhPT1lLmFkTWV0YWRhdGFDYWNoZUNvbmZpZyYmbnVsbCE9PWUuYWRNZXRhZGF0YUNhY2hlQ29uZmlnP3QuQWRNZXRhZGF0YUNhY2hlQ29uZmlnLmZyb21QYXJ0aWFsKGUuYWRNZXRhZGF0YUNhY2hlQ29uZmlnKTp2b2lkIDAsbi5hZFN3aXBlVXBMaWtlbHk9ZS5hZFN3aXBlVXBMaWtlbHk/PyExLG4ub25EZXZpY2VJbmZvPXZvaWQgMCE9PWUub25EZXZpY2VJbmZvJiZudWxsIT09ZS5vbkRldmljZUluZm8/dC5PbkRldmljZUluZm8uZnJvbVBhcnRpYWwoZS5vbkRldmljZUluZm8pOnZvaWQgMCxuLmVuYWJsZUFwcEluc3RhbGxUcmFja1JldmFtcD1lLmVuYWJsZUFwcEluc3RhbGxUcmFja1JldmFtcD8/ITEsbi5zcG9uc29yZWRVbmxvY2thYmxlVHlwZT1lLnNwb25zb3JlZFVubG9ja2FibGVUeXBlPz8wLG4uYWRTcXVhZElkPWUuYWRTcXVhZElkPz9uZXcgVWludDhBcnJheSxuLmNhbXBhaWduSWQ9ZS5jYW1wYWlnbklkPz9uZXcgVWludDhBcnJheSxuLmFkQWNjb3VudElkPWUuYWRBY2NvdW50SWQ/P25ldyBVaW50OEFycmF5LG4uc3dpcGVQcm9iYWJpbGl0eT1lLnN3aXBlUHJvYmFiaWxpdHk/PzAsbi5jbGllbnRDcmF3bFJlcXVlc3RzPWUuY2xpZW50Q3Jhd2xSZXF1ZXN0cz8ubWFwKChlPT5zLkNsaWVudENyYXdsUmVxdWVzdC5mcm9tUGFydGlhbChlKSkpfHxbXSxuLm9wdGltaXphdGlvbkdvYWw9ZS5vcHRpbWl6YXRpb25Hb2FsPz8wLG4ubGVuc01peGVyTWV0YWRhdGE9dm9pZCAwIT09ZS5sZW5zTWl4ZXJNZXRhZGF0YSYmbnVsbCE9PWUubGVuc01peGVyTWV0YWRhdGE/Yy5MZW5zTWl4ZXJNZXRhZGF0YS5mcm9tUGFydGlhbChlLmxlbnNNaXhlck1ldGFkYXRhKTp2b2lkIDAsbn19LHQuTGVuc1Bvc2l0aW9uPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmwuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLmNhbWVyYVR5cGUmJnQudWludDMyKDgpLmludDMyKGUuY2FtZXJhVHlwZSksMCE9PWUucG9zaXRpb24mJnQudWludDMyKDE2KS5pbnQzMihlLnBvc2l0aW9uKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBsLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGwuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2NhbWVyYVR5cGU6MCxwb3NpdGlvbjowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5jYW1lcmFUeXBlPW4uaW50MzIoKTticmVhaztjYXNlIDI6aS5wb3NpdGlvbj1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtjYW1lcmFUeXBlOjAscG9zaXRpb246MH07cmV0dXJuIHQuY2FtZXJhVHlwZT1lLmNhbWVyYVR5cGU/PzAsdC5wb3NpdGlvbj1lLnBvc2l0aW9uPz8wLHR9fSx0LlNLQWROZXR3b3JrQXR0cmlidXRpb249e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bC5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5za0FkTmV0d29ya1ZlcnNpb24mJnQudWludDMyKDI2KS5zdHJpbmcoZS5za0FkTmV0d29ya1ZlcnNpb24pLHZvaWQgMCE9PWUuc2tBZE5ldHdvcmtDYW1wYWlnbklkZW50aWZpZXImJnUuSW50MzJWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUuc2tBZE5ldHdvcmtDYW1wYWlnbklkZW50aWZpZXJ9LHQudWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuc2tBZE5ldHdvcmtUaW1lc3RhbXBNcyYmdS5JbnQ2NFZhbHVlLmVuY29kZSh7dmFsdWU6ZS5za0FkTmV0d29ya1RpbWVzdGFtcE1zfSx0LnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS5za0FkTmV0d29ya05vbmNlLmxlbmd0aCYmdC51aW50MzIoNTApLmJ5dGVzKGUuc2tBZE5ldHdvcmtOb25jZSksMCE9PWUuc2tBZE5ldHdvcmtBdHRyaWJ1dGlvblNpZ25hdHVyZS5sZW5ndGgmJnQudWludDMyKDU4KS5ieXRlcyhlLnNrQWROZXR3b3JrQXR0cmlidXRpb25TaWduYXR1cmUpLDAhPT1lLnNpZ25hdHVyZUNvbnRlbnRUcmFuc2Zvcm1hdGlvbiYmdC51aW50MzIoNjQpLmludDMyKGUuc2lnbmF0dXJlQ29udGVudFRyYW5zZm9ybWF0aW9uKSxcIlwiIT09ZS5za0FkTmV0d29ya1ZpZXdUaHJvdWdoVmVyc2lvbiYmdC51aW50MzIoNzQpLnN0cmluZyhlLnNrQWROZXR3b3JrVmlld1Rocm91Z2hWZXJzaW9uKSwwIT09ZS5za0FkTmV0d29ya1ZpZXdUaHJvdWdoTm9uY2UubGVuZ3RoJiZ0LnVpbnQzMig4MikuYnl0ZXMoZS5za0FkTmV0d29ya1ZpZXdUaHJvdWdoTm9uY2UpLDAhPT1lLnNrQWROZXR3b3JrVmlld1Rocm91Z2hBdHRyaWJ1dGlvblNpZ25hdHVyZS5sZW5ndGgmJnQudWludDMyKDkwKS5ieXRlcyhlLnNrQWROZXR3b3JrVmlld1Rocm91Z2hBdHRyaWJ1dGlvblNpZ25hdHVyZSksdm9pZCAwIT09ZS5za0FkTmV0d29ya1NvdXJjZUlkZW50aWZpZXImJnUuSW50MzJWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUuc2tBZE5ldHdvcmtTb3VyY2VJZGVudGlmaWVyfSx0LnVpbnQzMig5OCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBsLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGwuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9bSgpO2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMzppLnNrQWROZXR3b3JrVmVyc2lvbj1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNDppLnNrQWROZXR3b3JrQ2FtcGFpZ25JZGVudGlmaWVyPXUuSW50MzJWYWx1ZS5kZWNvZGUobixuLnVpbnQzMigpKS52YWx1ZTticmVhaztjYXNlIDU6aS5za0FkTmV0d29ya1RpbWVzdGFtcE1zPXUuSW50NjRWYWx1ZS5kZWNvZGUobixuLnVpbnQzMigpKS52YWx1ZTticmVhaztjYXNlIDY6aS5za0FkTmV0d29ya05vbmNlPW4uYnl0ZXMoKTticmVhaztjYXNlIDc6aS5za0FkTmV0d29ya0F0dHJpYnV0aW9uU2lnbmF0dXJlPW4uYnl0ZXMoKTticmVhaztjYXNlIDg6aS5zaWduYXR1cmVDb250ZW50VHJhbnNmb3JtYXRpb249bi5pbnQzMigpO2JyZWFrO2Nhc2UgOTppLnNrQWROZXR3b3JrVmlld1Rocm91Z2hWZXJzaW9uPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAxMDppLnNrQWROZXR3b3JrVmlld1Rocm91Z2hOb25jZT1uLmJ5dGVzKCk7YnJlYWs7Y2FzZSAxMTppLnNrQWROZXR3b3JrVmlld1Rocm91Z2hBdHRyaWJ1dGlvblNpZ25hdHVyZT1uLmJ5dGVzKCk7YnJlYWs7Y2FzZSAxMjppLnNrQWROZXR3b3JrU291cmNlSWRlbnRpZmllcj11LkludDMyVmFsdWUuZGVjb2RlKG4sbi51aW50MzIoKSkudmFsdWU7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PW0oKTtyZXR1cm4gdC5za0FkTmV0d29ya1ZlcnNpb249ZS5za0FkTmV0d29ya1ZlcnNpb24/P1wiXCIsdC5za0FkTmV0d29ya0NhbXBhaWduSWRlbnRpZmllcj1lLnNrQWROZXR3b3JrQ2FtcGFpZ25JZGVudGlmaWVyPz92b2lkIDAsdC5za0FkTmV0d29ya1RpbWVzdGFtcE1zPWUuc2tBZE5ldHdvcmtUaW1lc3RhbXBNcz8/dm9pZCAwLHQuc2tBZE5ldHdvcmtOb25jZT1lLnNrQWROZXR3b3JrTm9uY2U/P25ldyBVaW50OEFycmF5LHQuc2tBZE5ldHdvcmtBdHRyaWJ1dGlvblNpZ25hdHVyZT1lLnNrQWROZXR3b3JrQXR0cmlidXRpb25TaWduYXR1cmU/P25ldyBVaW50OEFycmF5LHQuc2lnbmF0dXJlQ29udGVudFRyYW5zZm9ybWF0aW9uPWUuc2lnbmF0dXJlQ29udGVudFRyYW5zZm9ybWF0aW9uPz8wLHQuc2tBZE5ldHdvcmtWaWV3VGhyb3VnaFZlcnNpb249ZS5za0FkTmV0d29ya1ZpZXdUaHJvdWdoVmVyc2lvbj8/XCJcIix0LnNrQWROZXR3b3JrVmlld1Rocm91Z2hOb25jZT1lLnNrQWROZXR3b3JrVmlld1Rocm91Z2hOb25jZT8/bmV3IFVpbnQ4QXJyYXksdC5za0FkTmV0d29ya1ZpZXdUaHJvdWdoQXR0cmlidXRpb25TaWduYXR1cmU9ZS5za0FkTmV0d29ya1ZpZXdUaHJvdWdoQXR0cmlidXRpb25TaWduYXR1cmU/P25ldyBVaW50OEFycmF5LHQuc2tBZE5ldHdvcmtTb3VyY2VJZGVudGlmaWVyPWUuc2tBZE5ldHdvcmtTb3VyY2VJZGVudGlmaWVyPz92b2lkIDAsdH19LHQuQWRQb3NpdGlvbj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5pbmRleCYmdC51aW50MzIoOCkudWludDMyKGUuaW5kZXgpLDAhPT1lLm51bUJyYW5kU2FmZVNsb3RzJiZ0LnVpbnQzMigxNikudWludDMyKGUubnVtQnJhbmRTYWZlU2xvdHMpLDAhPT1lLmZlZWRUeXBlJiZ0LnVpbnQzMigyNCkuaW50MzIoZS5mZWVkVHlwZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbC5kZWZhdWx0LlJlYWRlcj9lOm5ldyBsLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtpbmRleDowLG51bUJyYW5kU2FmZVNsb3RzOjAsZmVlZFR5cGU6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuaW5kZXg9bi51aW50MzIoKTticmVhaztjYXNlIDI6aS5udW1CcmFuZFNhZmVTbG90cz1uLnVpbnQzMigpO2JyZWFrO2Nhc2UgMzppLmZlZWRUeXBlPW4uaW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2luZGV4OjAsbnVtQnJhbmRTYWZlU2xvdHM6MCxmZWVkVHlwZTowfTtyZXR1cm4gdC5pbmRleD1lLmluZGV4Pz8wLHQubnVtQnJhbmRTYWZlU2xvdHM9ZS5udW1CcmFuZFNhZmVTbG90cz8/MCx0LmZlZWRUeXBlPWUuZmVlZFR5cGU/PzAsdH19LHQuQWRNZXRhZGF0YUNhY2hlQ29uZmlnPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmwuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCIwXCIhPT1lLmFkTWV0YWRhdGFDYWNoZVR0bFNlY3MmJnQudWludDMyKDgpLmludDY0KGUuYWRNZXRhZGF0YUNhY2hlVHRsU2VjcyksXCIwXCIhPT1lLmFkTWV0YWRhdGFCYWNrdXBDYWNoZVR0bFNlY3MmJnQudWludDMyKDE2KS5pbnQ2NChlLmFkTWV0YWRhdGFCYWNrdXBDYWNoZVR0bFNlY3MpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGwuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbC5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17YWRNZXRhZGF0YUNhY2hlVHRsU2VjczpcIjBcIixhZE1ldGFkYXRhQmFja3VwQ2FjaGVUdGxTZWNzOlwiMFwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5hZE1ldGFkYXRhQ2FjaGVUdGxTZWNzPXYobi5pbnQ2NCgpKTticmVhaztjYXNlIDI6aS5hZE1ldGFkYXRhQmFja3VwQ2FjaGVUdGxTZWNzPXYobi5pbnQ2NCgpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2FkTWV0YWRhdGFDYWNoZVR0bFNlY3M6XCIwXCIsYWRNZXRhZGF0YUJhY2t1cENhY2hlVHRsU2VjczpcIjBcIn07cmV0dXJuIHQuYWRNZXRhZGF0YUNhY2hlVHRsU2Vjcz1lLmFkTWV0YWRhdGFDYWNoZVR0bFNlY3M/P1wiMFwiLHQuYWRNZXRhZGF0YUJhY2t1cENhY2hlVHRsU2Vjcz1lLmFkTWV0YWRhdGFCYWNrdXBDYWNoZVR0bFNlY3M/P1wiMFwiLHR9fSx0Lk9uRGV2aWNlSW5mbz17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5vbkRldmljZU1hdGNoS2V5Lmxlbmd0aCYmbi51aW50MzIoMTApLmJ5dGVzKGUub25EZXZpY2VNYXRjaEtleSksMCE9PWUuZXZlbnRUeXBlJiZuLnVpbnQzMigxNikuaW50MzIoZS5ldmVudFR5cGUpLHZvaWQgMCE9PWUuZHBQYXJhbXMmJnQuRGlmZmVyZW50aWFsUHJpdmFjeVBhcmFtZXRlcnMuZW5jb2RlKGUuZHBQYXJhbXMsbi51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCksITA9PT1lLmVuYWJsZVNpZGdFeGNsdXNpb24mJm4udWludDMyKDMyKS5ib29sKGUuZW5hYmxlU2lkZ0V4Y2x1c2lvbiksITA9PT1lLmVuYWJsZUNhbk9wZW5VcmxFeGNsdXNpb24mJm4udWludDMyKDQwKS5ib29sKGUuZW5hYmxlQ2FuT3BlblVybEV4Y2x1c2lvbiksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgbC5kZWZhdWx0LlJlYWRlcj9lOm5ldyBsLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPWgoKTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5vbkRldmljZU1hdGNoS2V5PXIuYnl0ZXMoKTticmVhaztjYXNlIDI6by5ldmVudFR5cGU9ci5pbnQzMigpO2JyZWFrO2Nhc2UgMzpvLmRwUGFyYW1zPXQuRGlmZmVyZW50aWFsUHJpdmFjeVBhcmFtZXRlcnMuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSA0Om8uZW5hYmxlU2lkZ0V4Y2x1c2lvbj1yLmJvb2woKTticmVhaztjYXNlIDU6by5lbmFibGVDYW5PcGVuVXJsRXhjbHVzaW9uPXIuYm9vbCgpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj1oKCk7cmV0dXJuIG4ub25EZXZpY2VNYXRjaEtleT1lLm9uRGV2aWNlTWF0Y2hLZXk/P25ldyBVaW50OEFycmF5LG4uZXZlbnRUeXBlPWUuZXZlbnRUeXBlPz8wLG4uZHBQYXJhbXM9dm9pZCAwIT09ZS5kcFBhcmFtcyYmbnVsbCE9PWUuZHBQYXJhbXM/dC5EaWZmZXJlbnRpYWxQcml2YWN5UGFyYW1ldGVycy5mcm9tUGFydGlhbChlLmRwUGFyYW1zKTp2b2lkIDAsbi5lbmFibGVTaWRnRXhjbHVzaW9uPWUuZW5hYmxlU2lkZ0V4Y2x1c2lvbj8/ITEsbi5lbmFibGVDYW5PcGVuVXJsRXhjbHVzaW9uPWUuZW5hYmxlQ2FuT3BlblVybEV4Y2x1c2lvbj8/ITEsbn19LHQuRGlmZmVyZW50aWFsUHJpdmFjeVBhcmFtZXRlcnM9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bC5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUudE5vaXNlJiZ0LnVpbnQzMigxMykuZmxvYXQoZS50Tm9pc2UpLDAhPT1lLnREcCYmdC51aW50MzIoMjEpLmZsb2F0KGUudERwKSxcIjBcIiE9PWUubWF4TiYmdC51aW50MzIoMjQpLmludDY0KGUubWF4TiksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbC5kZWZhdWx0LlJlYWRlcj9lOm5ldyBsLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXt0Tm9pc2U6MCx0RHA6MCxtYXhOOlwiMFwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS50Tm9pc2U9bi5mbG9hdCgpO2JyZWFrO2Nhc2UgMjppLnREcD1uLmZsb2F0KCk7YnJlYWs7Y2FzZSAzOmkubWF4Tj12KG4uaW50NjQoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt0Tm9pc2U6MCx0RHA6MCxtYXhOOlwiMFwifTtyZXR1cm4gdC50Tm9pc2U9ZS50Tm9pc2U/PzAsdC50RHA9ZS50RHA/PzAsdC5tYXhOPWUubWF4Tj8/XCIwXCIsdH19LGwuZGVmYXVsdC51dGlsLkxvbmchPT1pLmRlZmF1bHQmJihsLmRlZmF1bHQudXRpbC5Mb25nPWkuZGVmYXVsdCxsLmRlZmF1bHQuY29uZmlndXJlKCkpfSw3MTAzNzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DbGllbnRDcmF3bFJlcXVlc3Q9dm9pZCAwO2NvbnN0IGk9cihuKDYyMTAwKSk7dC5DbGllbnRDcmF3bFJlcXVlc3Q9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5jcmF3bFVybCYmdC51aW50MzIoMTApLnN0cmluZyhlLmNyYXdsVXJsKSxcIlwiIT09ZS5jcmVhdGl2ZUlkJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuY3JlYXRpdmVJZCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXtjcmF3bFVybDpcIlwiLGNyZWF0aXZlSWQ6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8uY3Jhd2xVcmw9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6by5jcmVhdGl2ZUlkPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtjcmF3bFVybDpcIlwiLGNyZWF0aXZlSWQ6XCJcIn07cmV0dXJuIHQuY3Jhd2xVcmw9ZS5jcmF3bFVybD8/XCJcIix0LmNyZWF0aXZlSWQ9ZS5jcmVhdGl2ZUlkPz9cIlwiLHR9fX0sOTEzMjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5GcmllbmRVc2VyU3Rvcmllcz10LlNpZ25hbHM9dm9pZCAwO2NvbnN0IGk9cihuKDYyMTAwKSksbz1uKDUzMDU2KTt0LlNpZ25hbHM9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5mdXMmJnQuRnJpZW5kVXNlclN0b3JpZXMuZW5jb2RlKGUuZnVzLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgbz12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3QgYT17ZnVzOnZvaWQgMH07Zm9yKDtyLnBvczxvOyl7Y29uc3QgZT1yLnVpbnQzMigpO2U+Pj4zPT0xP2EuZnVzPXQuRnJpZW5kVXNlclN0b3JpZXMuZGVjb2RlKHIsci51aW50MzIoKSk6ci5za2lwVHlwZSg3JmUpfXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtmdXM6dm9pZCAwfTtyZXR1cm4gbi5mdXM9dm9pZCAwIT09ZS5mdXMmJm51bGwhPT1lLmZ1cz90LkZyaWVuZFVzZXJTdG9yaWVzLmZyb21QYXJ0aWFsKGUuZnVzKTp2b2lkIDAsbn19LHQuRnJpZW5kVXNlclN0b3JpZXM9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5udW1VbnZpZXdlZEZyaWVuZFN0b3JpZXMmJm8uSW50MzJWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUubnVtVW52aWV3ZWRGcmllbmRTdG9yaWVzfSx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGE9e251bVVudmlld2VkRnJpZW5kU3Rvcmllczp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9hLm51bVVudmlld2VkRnJpZW5kU3Rvcmllcz1vLkludDMyVmFsdWUuZGVjb2RlKG4sbi51aW50MzIoKSkudmFsdWU6bi5za2lwVHlwZSg3JmUpfXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtudW1VbnZpZXdlZEZyaWVuZFN0b3JpZXM6dm9pZCAwfTtyZXR1cm4gdC5udW1VbnZpZXdlZEZyaWVuZFN0b3JpZXM9ZS5udW1VbnZpZXdlZEZyaWVuZFN0b3JpZXM/P3ZvaWQgMCx0fX19LDkyMjc2OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNsaWVudE1ham9yQWJUZXN0PXQuRmVhdHVyZUNvbnRleHQ9dm9pZCAwO2NvbnN0IGk9big1MTEzOSksbz1yKG4oNjIxMDApKSxhPW4oNTMwNTYpO3QuRmVhdHVyZUNvbnRleHQ9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTt2b2lkIDAhPT1lLnJlcXVlc3RWb3BlcmFWYXJpYW50JiZhLlN0cmluZ1ZhbHVlLmVuY29kZSh7dmFsdWU6ZS5yZXF1ZXN0Vm9wZXJhVmFyaWFudH0sbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7Zm9yKGNvbnN0IHIgb2YgZS5jbGllbnRNYWpvckFiVGVzdHMpdC5DbGllbnRNYWpvckFiVGVzdC5lbmNvZGUocixuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBzPXtyZXF1ZXN0Vm9wZXJhVmFyaWFudDp2b2lkIDAsY2xpZW50TWFqb3JBYlRlc3RzOltdfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6cy5yZXF1ZXN0Vm9wZXJhVmFyaWFudD1hLlN0cmluZ1ZhbHVlLmRlY29kZShyLHIudWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgMjpzLmNsaWVudE1ham9yQWJUZXN0cy5wdXNoKHQuQ2xpZW50TWFqb3JBYlRlc3QuZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gc30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17cmVxdWVzdFZvcGVyYVZhcmlhbnQ6dm9pZCAwLGNsaWVudE1ham9yQWJUZXN0czpbXX07cmV0dXJuIG4ucmVxdWVzdFZvcGVyYVZhcmlhbnQ9ZS5yZXF1ZXN0Vm9wZXJhVmFyaWFudD8/dm9pZCAwLG4uY2xpZW50TWFqb3JBYlRlc3RzPWUuY2xpZW50TWFqb3JBYlRlc3RzPy5tYXAoKGU9PnQuQ2xpZW50TWFqb3JBYlRlc3QuZnJvbVBhcnRpYWwoZSkpKXx8W10sbn19LHQuQ2xpZW50TWFqb3JBYlRlc3Q9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5uYW1lJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUubmFtZSksdm9pZCAwIT09ZS52YWx1ZSYmaS5WYWx1ZS5lbmNvZGUoZS52YWx1ZSx0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGE9e25hbWU6XCJcIix2YWx1ZTp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLm5hbWU9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6YS52YWx1ZT1pLlZhbHVlLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17bmFtZTpcIlwiLHZhbHVlOnZvaWQgMH07cmV0dXJuIHQubmFtZT1lLm5hbWU/P1wiXCIsdC52YWx1ZT12b2lkIDAhPT1lLnZhbHVlJiZudWxsIT09ZS52YWx1ZT9pLlZhbHVlLmZyb21QYXJ0aWFsKGUudmFsdWUpOnZvaWQgMCx0fX19LDM0MDEwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk9uRGV2aWNlSW52ZW50b3J5Q29uZmlnPXQuT25EZXZpY2VJbnZlbnRvcnlDb25maWdzPXQuT25EZXZpY2VBbm9ueW1pemVkSWQ9dC5PbkRldmljZVJlc3BvbnNlPXQuSW5pdFJlc3BvbnNlPXZvaWQgMDtjb25zdCBpPXIobig0MTU4MykpLG89cihuKDYyMTAwKSksYT1uKDUzMDU2KTtmdW5jdGlvbiBzKCl7cmV0dXJue3Nlc3Npb25JZDpuZXcgVWludDhBcnJheSx0aW1lVG9MaXZlU2Vjb25kczp2b2lkIDAsaW5pdEhvc3RBbmRQYXRoOlwiXCIsc2VydmVIb3N0QW5kUGF0aDpcIlwiLHRyYWNrSG9zdEFuZFBhdGg6XCJcIix0cmFja0FuZEdldEhvc3RBbmRQYXRoOlwiXCIsc2VydmVIb3N0QW5kUGF0aEJhdGNoOlwiXCIsaW5pdEhvc3RBbmRQYXRoVjI6XCJcIix0cmFja0hvc3RBbmRQYXRoVjI6XCJcIixiYXRjaFRyYWNrSG9zdEFuZFBhdGhWMjpcIlwiLHNob3VsZEluaXRpYWxpemVQZXRyYTohMSxzY2VpZDpuZXcgVWludDhBcnJheSxwaXhlbFRva2VuOm5ldyBVaW50OEFycmF5LGVuY3J5cHRlZFVzZXJEYXRhOm5ldyBVaW50OEFycmF5LGluaXRHYXRld2F5SG9zdEFuZFBhdGhWMTpcIlwiLHNob3VsZERpc2FibGVTZXJ2ZVJlcXVlc3Q6ITEsb25EZXZpY2VSZXNwb25zZTp2b2lkIDAsY29udmVyc2lvblByb2ZpbGVIb3N0QW5kUGF0aFYxOlwiXCIsc2hvdWxkU2VuZEdlb0xvY2F0aW9uOiExLGFwcElkT2JmdXNjYXRpb25Ib3N0QW5kUGF0aFYxOlwiXCJ9fWZ1bmN0aW9uIGMoKXtyZXR1cm57ZW5jcnlwdGVkQW5vbnltaXplZElkOm5ldyBVaW50OEFycmF5LGJhdGNoZWRDb252ZXJzaW9uRXZlbnRzRGF0ZVRzTXM6XCIwXCIsZ2VuZXJhdGlvbk51bWJlcjpcIjBcIn19ZnVuY3Rpb24gbChlKXtyZXR1cm4gZS50b1N0cmluZygpfXQuSW5pdFJlc3BvbnNlPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLnNlc3Npb25JZC5sZW5ndGgmJm4udWludDMyKDEwKS5ieXRlcyhlLnNlc3Npb25JZCksdm9pZCAwIT09ZS50aW1lVG9MaXZlU2Vjb25kcyYmYS5JbnQzMlZhbHVlLmVuY29kZSh7dmFsdWU6ZS50aW1lVG9MaXZlU2Vjb25kc30sbi51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksXCJcIiE9PWUuaW5pdEhvc3RBbmRQYXRoJiZuLnVpbnQzMigyNikuc3RyaW5nKGUuaW5pdEhvc3RBbmRQYXRoKSxcIlwiIT09ZS5zZXJ2ZUhvc3RBbmRQYXRoJiZuLnVpbnQzMigzNCkuc3RyaW5nKGUuc2VydmVIb3N0QW5kUGF0aCksXCJcIiE9PWUudHJhY2tIb3N0QW5kUGF0aCYmbi51aW50MzIoNDIpLnN0cmluZyhlLnRyYWNrSG9zdEFuZFBhdGgpLFwiXCIhPT1lLnRyYWNrQW5kR2V0SG9zdEFuZFBhdGgmJm4udWludDMyKDUwKS5zdHJpbmcoZS50cmFja0FuZEdldEhvc3RBbmRQYXRoKSxcIlwiIT09ZS5zZXJ2ZUhvc3RBbmRQYXRoQmF0Y2gmJm4udWludDMyKDU4KS5zdHJpbmcoZS5zZXJ2ZUhvc3RBbmRQYXRoQmF0Y2gpLFwiXCIhPT1lLmluaXRIb3N0QW5kUGF0aFYyJiZuLnVpbnQzMig2Nikuc3RyaW5nKGUuaW5pdEhvc3RBbmRQYXRoVjIpLFwiXCIhPT1lLnRyYWNrSG9zdEFuZFBhdGhWMiYmbi51aW50MzIoNzQpLnN0cmluZyhlLnRyYWNrSG9zdEFuZFBhdGhWMiksXCJcIiE9PWUuYmF0Y2hUcmFja0hvc3RBbmRQYXRoVjImJm4udWludDMyKDgyKS5zdHJpbmcoZS5iYXRjaFRyYWNrSG9zdEFuZFBhdGhWMiksITA9PT1lLnNob3VsZEluaXRpYWxpemVQZXRyYSYmbi51aW50MzIoODgpLmJvb2woZS5zaG91bGRJbml0aWFsaXplUGV0cmEpLDAhPT1lLnNjZWlkLmxlbmd0aCYmbi51aW50MzIoOTgpLmJ5dGVzKGUuc2NlaWQpLDAhPT1lLnBpeGVsVG9rZW4ubGVuZ3RoJiZuLnVpbnQzMigxMDYpLmJ5dGVzKGUucGl4ZWxUb2tlbiksMCE9PWUuZW5jcnlwdGVkVXNlckRhdGEubGVuZ3RoJiZuLnVpbnQzMigxMTQpLmJ5dGVzKGUuZW5jcnlwdGVkVXNlckRhdGEpLFwiXCIhPT1lLmluaXRHYXRld2F5SG9zdEFuZFBhdGhWMSYmbi51aW50MzIoMTIyKS5zdHJpbmcoZS5pbml0R2F0ZXdheUhvc3RBbmRQYXRoVjEpLCEwPT09ZS5zaG91bGREaXNhYmxlU2VydmVSZXF1ZXN0JiZuLnVpbnQzMigxMjgpLmJvb2woZS5zaG91bGREaXNhYmxlU2VydmVSZXF1ZXN0KSx2b2lkIDAhPT1lLm9uRGV2aWNlUmVzcG9uc2UmJnQuT25EZXZpY2VSZXNwb25zZS5lbmNvZGUoZS5vbkRldmljZVJlc3BvbnNlLG4udWludDMyKDEzOCkuZm9yaygpKS5sZGVsaW0oKSxcIlwiIT09ZS5jb252ZXJzaW9uUHJvZmlsZUhvc3RBbmRQYXRoVjEmJm4udWludDMyKDE0Nikuc3RyaW5nKGUuY29udmVyc2lvblByb2ZpbGVIb3N0QW5kUGF0aFYxKSwhMD09PWUuc2hvdWxkU2VuZEdlb0xvY2F0aW9uJiZuLnVpbnQzMigxNTIpLmJvb2woZS5zaG91bGRTZW5kR2VvTG9jYXRpb24pLFwiXCIhPT1lLmFwcElkT2JmdXNjYXRpb25Ib3N0QW5kUGF0aFYxJiZuLnVpbnQzMigxNjIpLnN0cmluZyhlLmFwcElkT2JmdXNjYXRpb25Ib3N0QW5kUGF0aFYxKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGM9cygpO2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpjLnNlc3Npb25JZD1yLmJ5dGVzKCk7YnJlYWs7Y2FzZSAyOmMudGltZVRvTGl2ZVNlY29uZHM9YS5JbnQzMlZhbHVlLmRlY29kZShyLHIudWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgMzpjLmluaXRIb3N0QW5kUGF0aD1yLnN0cmluZygpO2JyZWFrO2Nhc2UgNDpjLnNlcnZlSG9zdEFuZFBhdGg9ci5zdHJpbmcoKTticmVhaztjYXNlIDU6Yy50cmFja0hvc3RBbmRQYXRoPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSA2OmMudHJhY2tBbmRHZXRIb3N0QW5kUGF0aD1yLnN0cmluZygpO2JyZWFrO2Nhc2UgNzpjLnNlcnZlSG9zdEFuZFBhdGhCYXRjaD1yLnN0cmluZygpO2JyZWFrO2Nhc2UgODpjLmluaXRIb3N0QW5kUGF0aFYyPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSA5OmMudHJhY2tIb3N0QW5kUGF0aFYyPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSAxMDpjLmJhdGNoVHJhY2tIb3N0QW5kUGF0aFYyPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSAxMTpjLnNob3VsZEluaXRpYWxpemVQZXRyYT1yLmJvb2woKTticmVhaztjYXNlIDEyOmMuc2NlaWQ9ci5ieXRlcygpO2JyZWFrO2Nhc2UgMTM6Yy5waXhlbFRva2VuPXIuYnl0ZXMoKTticmVhaztjYXNlIDE0OmMuZW5jcnlwdGVkVXNlckRhdGE9ci5ieXRlcygpO2JyZWFrO2Nhc2UgMTU6Yy5pbml0R2F0ZXdheUhvc3RBbmRQYXRoVjE9ci5zdHJpbmcoKTticmVhaztjYXNlIDE2OmMuc2hvdWxkRGlzYWJsZVNlcnZlUmVxdWVzdD1yLmJvb2woKTticmVhaztjYXNlIDE3OmMub25EZXZpY2VSZXNwb25zZT10Lk9uRGV2aWNlUmVzcG9uc2UuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAxODpjLmNvbnZlcnNpb25Qcm9maWxlSG9zdEFuZFBhdGhWMT1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMTk6Yy5zaG91bGRTZW5kR2VvTG9jYXRpb249ci5ib29sKCk7YnJlYWs7Y2FzZSAyMDpjLmFwcElkT2JmdXNjYXRpb25Ib3N0QW5kUGF0aFYxPXIuc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBjfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXMoKTtyZXR1cm4gbi5zZXNzaW9uSWQ9ZS5zZXNzaW9uSWQ/P25ldyBVaW50OEFycmF5LG4udGltZVRvTGl2ZVNlY29uZHM9ZS50aW1lVG9MaXZlU2Vjb25kcz8/dm9pZCAwLG4uaW5pdEhvc3RBbmRQYXRoPWUuaW5pdEhvc3RBbmRQYXRoPz9cIlwiLG4uc2VydmVIb3N0QW5kUGF0aD1lLnNlcnZlSG9zdEFuZFBhdGg/P1wiXCIsbi50cmFja0hvc3RBbmRQYXRoPWUudHJhY2tIb3N0QW5kUGF0aD8/XCJcIixuLnRyYWNrQW5kR2V0SG9zdEFuZFBhdGg9ZS50cmFja0FuZEdldEhvc3RBbmRQYXRoPz9cIlwiLG4uc2VydmVIb3N0QW5kUGF0aEJhdGNoPWUuc2VydmVIb3N0QW5kUGF0aEJhdGNoPz9cIlwiLG4uaW5pdEhvc3RBbmRQYXRoVjI9ZS5pbml0SG9zdEFuZFBhdGhWMj8/XCJcIixuLnRyYWNrSG9zdEFuZFBhdGhWMj1lLnRyYWNrSG9zdEFuZFBhdGhWMj8/XCJcIixuLmJhdGNoVHJhY2tIb3N0QW5kUGF0aFYyPWUuYmF0Y2hUcmFja0hvc3RBbmRQYXRoVjI/P1wiXCIsbi5zaG91bGRJbml0aWFsaXplUGV0cmE9ZS5zaG91bGRJbml0aWFsaXplUGV0cmE/PyExLG4uc2NlaWQ9ZS5zY2VpZD8/bmV3IFVpbnQ4QXJyYXksbi5waXhlbFRva2VuPWUucGl4ZWxUb2tlbj8/bmV3IFVpbnQ4QXJyYXksbi5lbmNyeXB0ZWRVc2VyRGF0YT1lLmVuY3J5cHRlZFVzZXJEYXRhPz9uZXcgVWludDhBcnJheSxuLmluaXRHYXRld2F5SG9zdEFuZFBhdGhWMT1lLmluaXRHYXRld2F5SG9zdEFuZFBhdGhWMT8/XCJcIixuLnNob3VsZERpc2FibGVTZXJ2ZVJlcXVlc3Q9ZS5zaG91bGREaXNhYmxlU2VydmVSZXF1ZXN0Pz8hMSxuLm9uRGV2aWNlUmVzcG9uc2U9dm9pZCAwIT09ZS5vbkRldmljZVJlc3BvbnNlJiZudWxsIT09ZS5vbkRldmljZVJlc3BvbnNlP3QuT25EZXZpY2VSZXNwb25zZS5mcm9tUGFydGlhbChlLm9uRGV2aWNlUmVzcG9uc2UpOnZvaWQgMCxuLmNvbnZlcnNpb25Qcm9maWxlSG9zdEFuZFBhdGhWMT1lLmNvbnZlcnNpb25Qcm9maWxlSG9zdEFuZFBhdGhWMT8/XCJcIixuLnNob3VsZFNlbmRHZW9Mb2NhdGlvbj1lLnNob3VsZFNlbmRHZW9Mb2NhdGlvbj8/ITEsbi5hcHBJZE9iZnVzY2F0aW9uSG9zdEFuZFBhdGhWMT1lLmFwcElkT2JmdXNjYXRpb25Ib3N0QW5kUGF0aFYxPz9cIlwiLG59fSx0Lk9uRGV2aWNlUmVzcG9uc2U9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgciBvZiBlLm9uRGV2aWNlQW5vbnltaXplZElkcyl0Lk9uRGV2aWNlQW5vbnltaXplZElkLmVuY29kZShyLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO3JldHVyblwiMFwiIT09ZS5zZXJ2ZXJMYXN0RmV0Y2hUc01zJiZuLnVpbnQzMigxNikuaW50NjQoZS5zZXJ2ZXJMYXN0RmV0Y2hUc01zKSx2b2lkIDAhPT1lLm9uRGV2aWNlSW52ZW50b3J5Q29uZmlncyYmdC5PbkRldmljZUludmVudG9yeUNvbmZpZ3MuZW5jb2RlKGUub25EZXZpY2VJbnZlbnRvcnlDb25maWdzLG4udWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLFwiXCIhPT1lLmFwcElkU2xjTWFwcGluZ1VybCYmbi51aW50MzIoMzQpLnN0cmluZyhlLmFwcElkU2xjTWFwcGluZ1VybCksMCE9PWUuc2xjRHBOb2lzZSYmbi51aW50MzIoNDUpLmZsb2F0KGUuc2xjRHBOb2lzZSksXCJcIiE9PWUuc2xjRXhwZXJpbWVudE5hbWUmJm4udWludDMyKDUwKS5zdHJpbmcoZS5zbGNFeHBlcmltZW50TmFtZSksMCE9PWUuYWljRHBOb2lzZUJXZWVrbHkmJm4udWludDMyKDYxKS5mbG9hdChlLmFpY0RwTm9pc2VCV2Vla2x5KSwwIT09ZS5haWNEcE5vaXNlVCYmbi51aW50MzIoNjkpLmZsb2F0KGUuYWljRHBOb2lzZVQpLCEwPT09ZS5lbmFibGVDb0luZm9FdmVudCYmbi51aW50MzIoNzIpLmJvb2woZS5lbmFibGVDb0luZm9FdmVudCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBhPXtvbkRldmljZUFub255bWl6ZWRJZHM6W10sc2VydmVyTGFzdEZldGNoVHNNczpcIjBcIixvbkRldmljZUludmVudG9yeUNvbmZpZ3M6dm9pZCAwLGFwcElkU2xjTWFwcGluZ1VybDpcIlwiLHNsY0RwTm9pc2U6MCxzbGNFeHBlcmltZW50TmFtZTpcIlwiLGFpY0RwTm9pc2VCV2Vla2x5OjAsYWljRHBOb2lzZVQ6MCxlbmFibGVDb0luZm9FdmVudDohMX07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmEub25EZXZpY2VBbm9ueW1pemVkSWRzLnB1c2godC5PbkRldmljZUFub255bWl6ZWRJZC5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAyOmEuc2VydmVyTGFzdEZldGNoVHNNcz1sKHIuaW50NjQoKSk7YnJlYWs7Y2FzZSAzOmEub25EZXZpY2VJbnZlbnRvcnlDb25maWdzPXQuT25EZXZpY2VJbnZlbnRvcnlDb25maWdzLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgNDphLmFwcElkU2xjTWFwcGluZ1VybD1yLnN0cmluZygpO2JyZWFrO2Nhc2UgNTphLnNsY0RwTm9pc2U9ci5mbG9hdCgpO2JyZWFrO2Nhc2UgNjphLnNsY0V4cGVyaW1lbnROYW1lPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSA3OmEuYWljRHBOb2lzZUJXZWVrbHk9ci5mbG9hdCgpO2JyZWFrO2Nhc2UgODphLmFpY0RwTm9pc2VUPXIuZmxvYXQoKTticmVhaztjYXNlIDk6YS5lbmFibGVDb0luZm9FdmVudD1yLmJvb2woKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e29uRGV2aWNlQW5vbnltaXplZElkczpbXSxzZXJ2ZXJMYXN0RmV0Y2hUc01zOlwiMFwiLG9uRGV2aWNlSW52ZW50b3J5Q29uZmlnczp2b2lkIDAsYXBwSWRTbGNNYXBwaW5nVXJsOlwiXCIsc2xjRHBOb2lzZTowLHNsY0V4cGVyaW1lbnROYW1lOlwiXCIsYWljRHBOb2lzZUJXZWVrbHk6MCxhaWNEcE5vaXNlVDowLGVuYWJsZUNvSW5mb0V2ZW50OiExfTtyZXR1cm4gbi5vbkRldmljZUFub255bWl6ZWRJZHM9ZS5vbkRldmljZUFub255bWl6ZWRJZHM/Lm1hcCgoZT0+dC5PbkRldmljZUFub255bWl6ZWRJZC5mcm9tUGFydGlhbChlKSkpfHxbXSxuLnNlcnZlckxhc3RGZXRjaFRzTXM9ZS5zZXJ2ZXJMYXN0RmV0Y2hUc01zPz9cIjBcIixuLm9uRGV2aWNlSW52ZW50b3J5Q29uZmlncz12b2lkIDAhPT1lLm9uRGV2aWNlSW52ZW50b3J5Q29uZmlncyYmbnVsbCE9PWUub25EZXZpY2VJbnZlbnRvcnlDb25maWdzP3QuT25EZXZpY2VJbnZlbnRvcnlDb25maWdzLmZyb21QYXJ0aWFsKGUub25EZXZpY2VJbnZlbnRvcnlDb25maWdzKTp2b2lkIDAsbi5hcHBJZFNsY01hcHBpbmdVcmw9ZS5hcHBJZFNsY01hcHBpbmdVcmw/P1wiXCIsbi5zbGNEcE5vaXNlPWUuc2xjRHBOb2lzZT8/MCxuLnNsY0V4cGVyaW1lbnROYW1lPWUuc2xjRXhwZXJpbWVudE5hbWU/P1wiXCIsbi5haWNEcE5vaXNlQldlZWtseT1lLmFpY0RwTm9pc2VCV2Vla2x5Pz8wLG4uYWljRHBOb2lzZVQ9ZS5haWNEcE5vaXNlVD8/MCxuLmVuYWJsZUNvSW5mb0V2ZW50PWUuZW5hYmxlQ29JbmZvRXZlbnQ/PyExLG59fSx0Lk9uRGV2aWNlQW5vbnltaXplZElkPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLmVuY3J5cHRlZEFub255bWl6ZWRJZC5sZW5ndGgmJnQudWludDMyKDEwKS5ieXRlcyhlLmVuY3J5cHRlZEFub255bWl6ZWRJZCksXCIwXCIhPT1lLmJhdGNoZWRDb252ZXJzaW9uRXZlbnRzRGF0ZVRzTXMmJnQudWludDMyKDE2KS5pbnQ2NChlLmJhdGNoZWRDb252ZXJzaW9uRXZlbnRzRGF0ZVRzTXMpLFwiMFwiIT09ZS5nZW5lcmF0aW9uTnVtYmVyJiZ0LnVpbnQzMigyNCkuaW50NjQoZS5nZW5lcmF0aW9uTnVtYmVyKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9YygpO2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmVuY3J5cHRlZEFub255bWl6ZWRJZD1uLmJ5dGVzKCk7YnJlYWs7Y2FzZSAyOmkuYmF0Y2hlZENvbnZlcnNpb25FdmVudHNEYXRlVHNNcz1sKG4uaW50NjQoKSk7YnJlYWs7Y2FzZSAzOmkuZ2VuZXJhdGlvbk51bWJlcj1sKG4uaW50NjQoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PWMoKTtyZXR1cm4gdC5lbmNyeXB0ZWRBbm9ueW1pemVkSWQ9ZS5lbmNyeXB0ZWRBbm9ueW1pemVkSWQ/P25ldyBVaW50OEFycmF5LHQuYmF0Y2hlZENvbnZlcnNpb25FdmVudHNEYXRlVHNNcz1lLmJhdGNoZWRDb252ZXJzaW9uRXZlbnRzRGF0ZVRzTXM/P1wiMFwiLHQuZ2VuZXJhdGlvbk51bWJlcj1lLmdlbmVyYXRpb25OdW1iZXI/P1wiMFwiLHR9fSx0Lk9uRGV2aWNlSW52ZW50b3J5Q29uZmlncz17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO2Zvcihjb25zdCByIG9mIGUub25EZXZpY2VJbnZlbnRvcnlDb25maWdzKXQuT25EZXZpY2VJbnZlbnRvcnlDb25maWcuZW5jb2RlKHIsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3QgYT17b25EZXZpY2VJbnZlbnRvcnlDb25maWdzOltdfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7ZT4+PjM9PTE/YS5vbkRldmljZUludmVudG9yeUNvbmZpZ3MucHVzaCh0Lk9uRGV2aWNlSW52ZW50b3J5Q29uZmlnLmRlY29kZShyLHIudWludDMyKCkpKTpyLnNraXBUeXBlKDcmZSl9cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e29uRGV2aWNlSW52ZW50b3J5Q29uZmlnczpbXX07cmV0dXJuIG4ub25EZXZpY2VJbnZlbnRvcnlDb25maWdzPWUub25EZXZpY2VJbnZlbnRvcnlDb25maWdzPy5tYXAoKGU9PnQuT25EZXZpY2VJbnZlbnRvcnlDb25maWcuZnJvbVBhcnRpYWwoZSkpKXx8W10sbn19LHQuT25EZXZpY2VJbnZlbnRvcnlDb25maWc9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUuc3VwcG9ydGVkSW52ZW50b3J5VHlwZSYmdC51aW50MzIoOCkuaW50MzIoZS5zdXBwb3J0ZWRJbnZlbnRvcnlUeXBlKSwwIT09ZS5tdWx0aUF1Y3Rpb25TaXplJiZ0LnVpbnQzMigxNikuaW50MzIoZS5tdWx0aUF1Y3Rpb25TaXplKSwhMD09PWUub25EZXZpY2VFbmFibGVkJiZ0LnVpbnQzMigyNCkuYm9vbChlLm9uRGV2aWNlRW5hYmxlZCksITA9PT1lLmNhbk9wZW5VcmxFbmFibGVkJiZ0LnVpbnQzMigzMikuYm9vbChlLmNhbk9wZW5VcmxFbmFibGVkKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3N1cHBvcnRlZEludmVudG9yeVR5cGU6MCxtdWx0aUF1Y3Rpb25TaXplOjAsb25EZXZpY2VFbmFibGVkOiExLGNhbk9wZW5VcmxFbmFibGVkOiExfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5zdXBwb3J0ZWRJbnZlbnRvcnlUeXBlPW4uaW50MzIoKTticmVhaztjYXNlIDI6aS5tdWx0aUF1Y3Rpb25TaXplPW4uaW50MzIoKTticmVhaztjYXNlIDM6aS5vbkRldmljZUVuYWJsZWQ9bi5ib29sKCk7YnJlYWs7Y2FzZSA0OmkuY2FuT3BlblVybEVuYWJsZWQ9bi5ib29sKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtzdXBwb3J0ZWRJbnZlbnRvcnlUeXBlOjAsbXVsdGlBdWN0aW9uU2l6ZTowLG9uRGV2aWNlRW5hYmxlZDohMSxjYW5PcGVuVXJsRW5hYmxlZDohMX07cmV0dXJuIHQuc3VwcG9ydGVkSW52ZW50b3J5VHlwZT1lLnN1cHBvcnRlZEludmVudG9yeVR5cGU/PzAsdC5tdWx0aUF1Y3Rpb25TaXplPWUubXVsdGlBdWN0aW9uU2l6ZT8/MCx0Lm9uRGV2aWNlRW5hYmxlZD1lLm9uRGV2aWNlRW5hYmxlZD8/ITEsdC5jYW5PcGVuVXJsRW5hYmxlZD1lLmNhbk9wZW5VcmxFbmFibGVkPz8hMSx0fX0sby5kZWZhdWx0LnV0aWwuTG9uZyE9PWkuZGVmYXVsdCYmKG8uZGVmYXVsdC51dGlsLkxvbmc9aS5kZWZhdWx0LG8uZGVmYXVsdC5jb25maWd1cmUoKSl9LDE0NDI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRGlzcGxheWVkUHJlUm9sbEFkSW5mbz10LkludmVudG9yeVJlcXVlc3REZWJ1Z0ZsYWdzPXQuSW52ZW50b3J5UmVxdWVzdD10LlBldHJhRmVhdHVyZUZsYWdzPXQuRmVhdHVyZUZsYWdzPXQuRGlzY292ZXJDaGFubmVsTWV0YWRhdGE9dC5SZXNwb25zZURhdGFUeXBlPXQuUmVzcG9uc2VEYXRhVHlwZV9FbnVtPXZvaWQgMDtjb25zdCBpPXIobig0MTU4MykpLG89big5MTMyKSxhPW4oOTQyMDcpLHM9cihuKDYyMTAwKSksYz1uKDUzMDU2KTtmdW5jdGlvbiBsKCl7cmV0dXJue2ludmVudG9yeVR5cGU6MCxpbnZlbnRvcnlJZDpcIlwiLGRlYnVnQWRJZDpcIlwiLHBvc2l0aW9uSWQ6dm9pZCAwLG51bUFkc1JlcXVlc3RlZDowLGlzVW5za2lwcGFibGVBZFNsb3Q6ITEscmVzcG9uc2VEYXRhVHlwZTowLGRpc2NvdmVyQ2hhbm5lbE1ldGFkYXRhOnZvaWQgMCxmZWF0dXJlRmxhZ3M6dm9pZCAwLGNsaWVudEludmVudG9yeVJlcXVlc3RJZDpuZXcgVWludDhBcnJheSxwdWJsaXNoZXJTbG90SWQ6bmV3IFVpbnQ4QXJyYXksY2xpZW50RW5nYWdlbWVudFNpZ25hbDp2b2lkIDAsZGVidWdQcm9kdWN0SWQ6XCIwXCIsc2hvdWxkU2tpcFN0b3J5QWRSZXF1ZXN0OiExLGlzUHJlZmV0Y2hSZXF1ZXN0OiExLG1vY2tBZFJlcXVlc3RQYXJhbXM6bmV3IFVpbnQ4QXJyYXksaW52ZW50b3J5U3ViVHlwZTowLGRlYnVnUHJvZHVjdElkczpbXSxpbnZlbnRvcnlSZXF1ZXN0RGVidWdGbGFnczp2b2lkIDAsbnVtYmVyT2ZTdWJDcmVhdGl2ZXM6MCxkaXNwbGF5ZWRQcmVSb2xsQWRJbmZvOnZvaWQgMCxjbGllbnRSZXF1ZXN0SWRzOltdfX1mdW5jdGlvbiB1KCl7cmV0dXJue2FkSWQ6bmV3IFVpbnQ4QXJyYXkscmVxdWVzdElkOm5ldyBVaW50OEFycmF5fX1mdW5jdGlvbiBkKGUpe3JldHVybiBlLnRvU3RyaW5nKCl9dmFyIGY7KGY9dC5SZXNwb25zZURhdGFUeXBlX0VudW18fCh0LlJlc3BvbnNlRGF0YVR5cGVfRW51bT17fSkpW2YuSlNPTj0wXT1cIkpTT05cIixmW2YuUFJPVE89MV09XCJQUk9UT1wiLGZbZi5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsdC5SZXNwb25zZURhdGFUeXBlPXtlbmNvZGUoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpfSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtuLnNraXBUeXBlKDcmZSl9cmV0dXJue319LGZyb21QYXJ0aWFsOmU9Pih7fSl9LHQuRGlzY292ZXJDaGFubmVsTWV0YWRhdGE9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5pbnZlbnRvcnlGdWxseVF1YWxpZmllZCYmdC51aW50MzIoMTApLnN0cmluZyhlLmludmVudG9yeUZ1bGx5UXVhbGlmaWVkKSxcIlwiIT09ZS5jaGFubmVsJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuY2hhbm5lbCksXCJcIiE9PWUuY2hhbm5lbElkJiZ0LnVpbnQzMigyNikuc3RyaW5nKGUuY2hhbm5lbElkKSxcIlwiIT09ZS5wcm9kdWN0VHlwZSYmdC51aW50MzIoMzQpLnN0cmluZyhlLnByb2R1Y3RUeXBlKSxcIlwiIT09ZS5wdWJsaXNoZXImJnQudWludDMyKDQyKS5zdHJpbmcoZS5wdWJsaXNoZXIpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17aW52ZW50b3J5RnVsbHlRdWFsaWZpZWQ6XCJcIixjaGFubmVsOlwiXCIsY2hhbm5lbElkOlwiXCIscHJvZHVjdFR5cGU6XCJcIixwdWJsaXNoZXI6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuaW52ZW50b3J5RnVsbHlRdWFsaWZpZWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS5jaGFubmVsPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmkuY2hhbm5lbElkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA0OmkucHJvZHVjdFR5cGU9bi5zdHJpbmcoKTticmVhaztjYXNlIDU6aS5wdWJsaXNoZXI9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2ludmVudG9yeUZ1bGx5UXVhbGlmaWVkOlwiXCIsY2hhbm5lbDpcIlwiLGNoYW5uZWxJZDpcIlwiLHByb2R1Y3RUeXBlOlwiXCIscHVibGlzaGVyOlwiXCJ9O3JldHVybiB0LmludmVudG9yeUZ1bGx5UXVhbGlmaWVkPWUuaW52ZW50b3J5RnVsbHlRdWFsaWZpZWQ/P1wiXCIsdC5jaGFubmVsPWUuY2hhbm5lbD8/XCJcIix0LmNoYW5uZWxJZD1lLmNoYW5uZWxJZD8/XCJcIix0LnByb2R1Y3RUeXBlPWUucHJvZHVjdFR5cGU/P1wiXCIsdC5wdWJsaXNoZXI9ZS5wdWJsaXNoZXI/P1wiXCIsdH19LHQuRmVhdHVyZUZsYWdzPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7ITA9PT1lLmlzUGV0cmFDYXBhYmxlJiZuLnVpbnQzMig4KS5ib29sKGUuaXNQZXRyYUNhcGFibGUpLCEwPT09ZS5pc0RwYUNhcGFibGUmJm4udWludDMyKDE2KS5ib29sKGUuaXNEcGFDYXBhYmxlKSxuLnVpbnQzMigyNikuZm9yaygpO2Zvcihjb25zdCB0IG9mIGUucHJvdG9DYXBhYmxlQWRUeXBlcyluLmludDMyKHQpO24ubGRlbGltKCksITA9PT1lLmNhblN1cHBvcnRDb2duYWNTa2lwcGFibGVBZHMmJm4udWludDMyKDMyKS5ib29sKGUuY2FuU3VwcG9ydENvZ25hY1NraXBwYWJsZUFkcyksITA9PT1lLmNhblN1cHBvcnRFeHRlbmRlZFBsYXlBZHMmJm4udWludDMyKDQwKS5ib29sKGUuY2FuU3VwcG9ydEV4dGVuZGVkUGxheUFkcyksbi51aW50MzIoNTApLmZvcmsoKTtmb3IoY29uc3QgdCBvZiBlLmRwYUNhcGFibGVBZFR5cGVzKW4uaW50MzIodCk7bi5sZGVsaW0oKSwhMD09PWUuc3RvcnlBZHNJblVzZXJTdG9yaWVzRW5hYmxlZCYmbi51aW50MzIoNTYpLmJvb2woZS5zdG9yeUFkc0luVXNlclN0b3JpZXNFbmFibGVkKSx2b2lkIDAhPT1lLnBldHJhRmVhdHVyZUZsYWdzJiZ0LlBldHJhRmVhdHVyZUZsYWdzLmVuY29kZShlLnBldHJhRmVhdHVyZUZsYWdzLG4udWludDMyKDY2KS5mb3JrKCkpLmxkZWxpbSgpLCEwPT09ZS5jYW5TdXBwb3J0U2hvd3NTa2lwcGFibGVBZHMmJm4udWludDMyKDcyKS5ib29sKGUuY2FuU3VwcG9ydFNob3dzU2tpcHBhYmxlQWRzKSxuLnVpbnQzMig4MikuZm9yaygpO2Zvcihjb25zdCB0IG9mIGUuc3VwcG9ydGVkQWRUeXBlcyluLmludDMyKHQpO24ubGRlbGltKCksMCE9PWUuYWRkaXRpb25hbEZvcm1hdFR5cGUmJm4udWludDMyKDg4KS5pbnQzMihlLmFkZGl0aW9uYWxGb3JtYXRUeXBlKSwhMD09PWUuc3RvcnlBZHNJbkNvbnRlbnRJbnRlcnN0aXRpYWxFbmFibGVkJiZuLnVpbnQzMig5NikuYm9vbChlLnN0b3J5QWRzSW5Db250ZW50SW50ZXJzdGl0aWFsRW5hYmxlZCksITA9PT1lLmNhblN1cHBvcnRDb2xsZWN0aW9uVjImJm4udWludDMyKDEwNCkuYm9vbChlLmNhblN1cHBvcnRDb2xsZWN0aW9uVjIpLFwiXCIhPT1lLm1heFN1cHBvcnRlZFNrQWROZXR3b3JrVmVyc2lvbiYmbi51aW50MzIoMTE0KS5zdHJpbmcoZS5tYXhTdXBwb3J0ZWRTa0FkTmV0d29ya1ZlcnNpb24pLCEwPT09ZS5jYW5TdXBwb3J0Q29sbGVjdGlvbkFwcEluc3RhbGwmJm4udWludDMyKDEyMCkuYm9vbChlLmNhblN1cHBvcnRDb2xsZWN0aW9uQXBwSW5zdGFsbCksITA9PT1lLnRvcHNuYXBQcm9kdWN0c0luU2hvd2Nhc2VBdHRhY2htZW50JiZuLnVpbnQzMigxMjgpLmJvb2woZS50b3BzbmFwUHJvZHVjdHNJblNob3djYXNlQXR0YWNobWVudCksITA9PT1lLmNhblN1cHBvcnRDb2xsZWN0aW9uU2hvd2Nhc2VBdHRhY2htZW50JiZuLnVpbnQzMigxMzYpLmJvb2woZS5jYW5TdXBwb3J0Q29sbGVjdGlvblNob3djYXNlQXR0YWNobWVudCksITA9PT1lLmNhblN1cHBvcnRMZWFkR2VuVjE1JiZuLnVpbnQzMigxNDQpLmJvb2woZS5jYW5TdXBwb3J0TGVhZEdlblYxNSksXCJcIiE9PWUubWF4U3VwcG9ydGVkU2tBZE5ldHdvcmtWaWV3VGhyb3VnaFZlcnNpb24mJm4udWludDMyKDE1NCkuc3RyaW5nKGUubWF4U3VwcG9ydGVkU2tBZE5ldHdvcmtWaWV3VGhyb3VnaFZlcnNpb24pLCEwPT09ZS5jYW5TdXBwb3J0RHBhU3RvcnlBZHMmJm4udWludDMyKDE2MCkuYm9vbChlLmNhblN1cHBvcnREcGFTdG9yeUFkcyksdm9pZCAwIT09ZS5zdXBwb3J0ZWRMZWFkR2VuVmVyc2lvbiYmYy5JbnQzMlZhbHVlLmVuY29kZSh7dmFsdWU6ZS5zdXBwb3J0ZWRMZWFkR2VuVmVyc2lvbn0sbi51aW50MzIoMTcwKS5mb3JrKCkpLmxkZWxpbSgpLCEwPT09ZS5jYW5TdXBwb3J0RGVmYXVsdEJyb3dzZXJEZWVwbGlua0ZhbGxiYWNrJiZuLnVpbnQzMigxNzYpLmJvb2woZS5jYW5TdXBwb3J0RGVmYXVsdEJyb3dzZXJEZWVwbGlua0ZhbGxiYWNrKSxuLnVpbnQzMigxODYpLmZvcmsoKTtmb3IoY29uc3QgdCBvZiBlLmNvbXBvc2VyU3VwcG9ydGVkSXRlbVR5cGVzKW4uaW50MzIodCk7cmV0dXJuIG4ubGRlbGltKCksdm9pZCAwIT09ZS5zdXBwb3J0ZWREcGFDb21wb3NlclRlbXBsYXRlVmVyc2lvbiYmYy5JbnQzMlZhbHVlLmVuY29kZSh7dmFsdWU6ZS5zdXBwb3J0ZWREcGFDb21wb3NlclRlbXBsYXRlVmVyc2lvbn0sbi51aW50MzIoMTk0KS5mb3JrKCkpLmxkZWxpbSgpLCEwPT09ZS5zdXBwb3J0c09yZ2FuaWNTdG9yZSYmbi51aW50MzIoMjAwKS5ib29sKGUuc3VwcG9ydHNPcmdhbmljU3RvcmUpLCEwPT09ZS5tdWx0aUFkUG9kUmVxdWVzdEVuYWJsZWQmJm4udWludDMyKDIwOCkuYm9vbChlLm11bHRpQWRQb2RSZXF1ZXN0RW5hYmxlZCksITA9PT1lLm9mZmVyRGlzY2xhaW1lckVuYWJsZWQmJm4udWludDMyKDIxNikuYm9vbChlLm9mZmVyRGlzY2xhaW1lckVuYWJsZWQpLCEwPT09ZS5jYW5TdXBwb3J0TXVsdGlJbWFnZUNvbXBvc2VyVGVtcGxhdGVzJiZuLnVpbnQzMigyMjQpLmJvb2woZS5jYW5TdXBwb3J0TXVsdGlJbWFnZUNvbXBvc2VyVGVtcGxhdGVzKSwhMD09PWUuY2FuU3VwcG9ydFNrYW5BZHNldHMmJm4udWludDMyKDIzMikuYm9vbChlLmNhblN1cHBvcnRTa2FuQWRzZXRzKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89e2lzUGV0cmFDYXBhYmxlOiExLGlzRHBhQ2FwYWJsZTohMSxwcm90b0NhcGFibGVBZFR5cGVzOltdLGNhblN1cHBvcnRDb2duYWNTa2lwcGFibGVBZHM6ITEsY2FuU3VwcG9ydEV4dGVuZGVkUGxheUFkczohMSxkcGFDYXBhYmxlQWRUeXBlczpbXSxzdG9yeUFkc0luVXNlclN0b3JpZXNFbmFibGVkOiExLHBldHJhRmVhdHVyZUZsYWdzOnZvaWQgMCxjYW5TdXBwb3J0U2hvd3NTa2lwcGFibGVBZHM6ITEsc3VwcG9ydGVkQWRUeXBlczpbXSxhZGRpdGlvbmFsRm9ybWF0VHlwZTowLHN0b3J5QWRzSW5Db250ZW50SW50ZXJzdGl0aWFsRW5hYmxlZDohMSxjYW5TdXBwb3J0Q29sbGVjdGlvblYyOiExLG1heFN1cHBvcnRlZFNrQWROZXR3b3JrVmVyc2lvbjpcIlwiLGNhblN1cHBvcnRDb2xsZWN0aW9uQXBwSW5zdGFsbDohMSx0b3BzbmFwUHJvZHVjdHNJblNob3djYXNlQXR0YWNobWVudDohMSxjYW5TdXBwb3J0Q29sbGVjdGlvblNob3djYXNlQXR0YWNobWVudDohMSxjYW5TdXBwb3J0TGVhZEdlblYxNTohMSxtYXhTdXBwb3J0ZWRTa0FkTmV0d29ya1ZpZXdUaHJvdWdoVmVyc2lvbjpcIlwiLGNhblN1cHBvcnREcGFTdG9yeUFkczohMSxzdXBwb3J0ZWRMZWFkR2VuVmVyc2lvbjp2b2lkIDAsY2FuU3VwcG9ydERlZmF1bHRCcm93c2VyRGVlcGxpbmtGYWxsYmFjazohMSxjb21wb3NlclN1cHBvcnRlZEl0ZW1UeXBlczpbXSxzdXBwb3J0ZWREcGFDb21wb3NlclRlbXBsYXRlVmVyc2lvbjp2b2lkIDAsc3VwcG9ydHNPcmdhbmljU3RvcmU6ITEsbXVsdGlBZFBvZFJlcXVlc3RFbmFibGVkOiExLG9mZmVyRGlzY2xhaW1lckVuYWJsZWQ6ITEsY2FuU3VwcG9ydE11bHRpSW1hZ2VDb21wb3NlclRlbXBsYXRlczohMSxjYW5TdXBwb3J0U2thbkFkc2V0czohMX07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8uaXNQZXRyYUNhcGFibGU9ci5ib29sKCk7YnJlYWs7Y2FzZSAyOm8uaXNEcGFDYXBhYmxlPXIuYm9vbCgpO2JyZWFrO2Nhc2UgMzppZigyPT0oNyZlKSl7Y29uc3QgZT1yLnVpbnQzMigpK3IucG9zO2Zvcig7ci5wb3M8ZTspby5wcm90b0NhcGFibGVBZFR5cGVzLnB1c2goci5pbnQzMigpKX1lbHNlIG8ucHJvdG9DYXBhYmxlQWRUeXBlcy5wdXNoKHIuaW50MzIoKSk7YnJlYWs7Y2FzZSA0Om8uY2FuU3VwcG9ydENvZ25hY1NraXBwYWJsZUFkcz1yLmJvb2woKTticmVhaztjYXNlIDU6by5jYW5TdXBwb3J0RXh0ZW5kZWRQbGF5QWRzPXIuYm9vbCgpO2JyZWFrO2Nhc2UgNjppZigyPT0oNyZlKSl7Y29uc3QgZT1yLnVpbnQzMigpK3IucG9zO2Zvcig7ci5wb3M8ZTspby5kcGFDYXBhYmxlQWRUeXBlcy5wdXNoKHIuaW50MzIoKSl9ZWxzZSBvLmRwYUNhcGFibGVBZFR5cGVzLnB1c2goci5pbnQzMigpKTticmVhaztjYXNlIDc6by5zdG9yeUFkc0luVXNlclN0b3JpZXNFbmFibGVkPXIuYm9vbCgpO2JyZWFrO2Nhc2UgODpvLnBldHJhRmVhdHVyZUZsYWdzPXQuUGV0cmFGZWF0dXJlRmxhZ3MuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSA5Om8uY2FuU3VwcG9ydFNob3dzU2tpcHBhYmxlQWRzPXIuYm9vbCgpO2JyZWFrO2Nhc2UgMTA6aWYoMj09KDcmZSkpe2NvbnN0IGU9ci51aW50MzIoKStyLnBvcztmb3IoO3IucG9zPGU7KW8uc3VwcG9ydGVkQWRUeXBlcy5wdXNoKHIuaW50MzIoKSl9ZWxzZSBvLnN1cHBvcnRlZEFkVHlwZXMucHVzaChyLmludDMyKCkpO2JyZWFrO2Nhc2UgMTE6by5hZGRpdGlvbmFsRm9ybWF0VHlwZT1yLmludDMyKCk7YnJlYWs7Y2FzZSAxMjpvLnN0b3J5QWRzSW5Db250ZW50SW50ZXJzdGl0aWFsRW5hYmxlZD1yLmJvb2woKTticmVhaztjYXNlIDEzOm8uY2FuU3VwcG9ydENvbGxlY3Rpb25WMj1yLmJvb2woKTticmVhaztjYXNlIDE0Om8ubWF4U3VwcG9ydGVkU2tBZE5ldHdvcmtWZXJzaW9uPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSAxNTpvLmNhblN1cHBvcnRDb2xsZWN0aW9uQXBwSW5zdGFsbD1yLmJvb2woKTticmVhaztjYXNlIDE2Om8udG9wc25hcFByb2R1Y3RzSW5TaG93Y2FzZUF0dGFjaG1lbnQ9ci5ib29sKCk7YnJlYWs7Y2FzZSAxNzpvLmNhblN1cHBvcnRDb2xsZWN0aW9uU2hvd2Nhc2VBdHRhY2htZW50PXIuYm9vbCgpO2JyZWFrO2Nhc2UgMTg6by5jYW5TdXBwb3J0TGVhZEdlblYxNT1yLmJvb2woKTticmVhaztjYXNlIDE5Om8ubWF4U3VwcG9ydGVkU2tBZE5ldHdvcmtWaWV3VGhyb3VnaFZlcnNpb249ci5zdHJpbmcoKTticmVhaztjYXNlIDIwOm8uY2FuU3VwcG9ydERwYVN0b3J5QWRzPXIuYm9vbCgpO2JyZWFrO2Nhc2UgMjE6by5zdXBwb3J0ZWRMZWFkR2VuVmVyc2lvbj1jLkludDMyVmFsdWUuZGVjb2RlKHIsci51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSAyMjpvLmNhblN1cHBvcnREZWZhdWx0QnJvd3NlckRlZXBsaW5rRmFsbGJhY2s9ci5ib29sKCk7YnJlYWs7Y2FzZSAyMzppZigyPT0oNyZlKSl7Y29uc3QgZT1yLnVpbnQzMigpK3IucG9zO2Zvcig7ci5wb3M8ZTspby5jb21wb3NlclN1cHBvcnRlZEl0ZW1UeXBlcy5wdXNoKHIuaW50MzIoKSl9ZWxzZSBvLmNvbXBvc2VyU3VwcG9ydGVkSXRlbVR5cGVzLnB1c2goci5pbnQzMigpKTticmVhaztjYXNlIDI0Om8uc3VwcG9ydGVkRHBhQ29tcG9zZXJUZW1wbGF0ZVZlcnNpb249Yy5JbnQzMlZhbHVlLmRlY29kZShyLHIudWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgMjU6by5zdXBwb3J0c09yZ2FuaWNTdG9yZT1yLmJvb2woKTticmVhaztjYXNlIDI2Om8ubXVsdGlBZFBvZFJlcXVlc3RFbmFibGVkPXIuYm9vbCgpO2JyZWFrO2Nhc2UgMjc6by5vZmZlckRpc2NsYWltZXJFbmFibGVkPXIuYm9vbCgpO2JyZWFrO2Nhc2UgMjg6by5jYW5TdXBwb3J0TXVsdGlJbWFnZUNvbXBvc2VyVGVtcGxhdGVzPXIuYm9vbCgpO2JyZWFrO2Nhc2UgMjk6by5jYW5TdXBwb3J0U2thbkFkc2V0cz1yLmJvb2woKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e2lzUGV0cmFDYXBhYmxlOiExLGlzRHBhQ2FwYWJsZTohMSxwcm90b0NhcGFibGVBZFR5cGVzOltdLGNhblN1cHBvcnRDb2duYWNTa2lwcGFibGVBZHM6ITEsY2FuU3VwcG9ydEV4dGVuZGVkUGxheUFkczohMSxkcGFDYXBhYmxlQWRUeXBlczpbXSxzdG9yeUFkc0luVXNlclN0b3JpZXNFbmFibGVkOiExLHBldHJhRmVhdHVyZUZsYWdzOnZvaWQgMCxjYW5TdXBwb3J0U2hvd3NTa2lwcGFibGVBZHM6ITEsc3VwcG9ydGVkQWRUeXBlczpbXSxhZGRpdGlvbmFsRm9ybWF0VHlwZTowLHN0b3J5QWRzSW5Db250ZW50SW50ZXJzdGl0aWFsRW5hYmxlZDohMSxjYW5TdXBwb3J0Q29sbGVjdGlvblYyOiExLG1heFN1cHBvcnRlZFNrQWROZXR3b3JrVmVyc2lvbjpcIlwiLGNhblN1cHBvcnRDb2xsZWN0aW9uQXBwSW5zdGFsbDohMSx0b3BzbmFwUHJvZHVjdHNJblNob3djYXNlQXR0YWNobWVudDohMSxjYW5TdXBwb3J0Q29sbGVjdGlvblNob3djYXNlQXR0YWNobWVudDohMSxjYW5TdXBwb3J0TGVhZEdlblYxNTohMSxtYXhTdXBwb3J0ZWRTa0FkTmV0d29ya1ZpZXdUaHJvdWdoVmVyc2lvbjpcIlwiLGNhblN1cHBvcnREcGFTdG9yeUFkczohMSxzdXBwb3J0ZWRMZWFkR2VuVmVyc2lvbjp2b2lkIDAsY2FuU3VwcG9ydERlZmF1bHRCcm93c2VyRGVlcGxpbmtGYWxsYmFjazohMSxjb21wb3NlclN1cHBvcnRlZEl0ZW1UeXBlczpbXSxzdXBwb3J0ZWREcGFDb21wb3NlclRlbXBsYXRlVmVyc2lvbjp2b2lkIDAsc3VwcG9ydHNPcmdhbmljU3RvcmU6ITEsbXVsdGlBZFBvZFJlcXVlc3RFbmFibGVkOiExLG9mZmVyRGlzY2xhaW1lckVuYWJsZWQ6ITEsY2FuU3VwcG9ydE11bHRpSW1hZ2VDb21wb3NlclRlbXBsYXRlczohMSxjYW5TdXBwb3J0U2thbkFkc2V0czohMX07cmV0dXJuIG4uaXNQZXRyYUNhcGFibGU9ZS5pc1BldHJhQ2FwYWJsZT8/ITEsbi5pc0RwYUNhcGFibGU9ZS5pc0RwYUNhcGFibGU/PyExLG4ucHJvdG9DYXBhYmxlQWRUeXBlcz1lLnByb3RvQ2FwYWJsZUFkVHlwZXM/Lm1hcCgoZT0+ZSkpfHxbXSxuLmNhblN1cHBvcnRDb2duYWNTa2lwcGFibGVBZHM9ZS5jYW5TdXBwb3J0Q29nbmFjU2tpcHBhYmxlQWRzPz8hMSxuLmNhblN1cHBvcnRFeHRlbmRlZFBsYXlBZHM9ZS5jYW5TdXBwb3J0RXh0ZW5kZWRQbGF5QWRzPz8hMSxuLmRwYUNhcGFibGVBZFR5cGVzPWUuZHBhQ2FwYWJsZUFkVHlwZXM/Lm1hcCgoZT0+ZSkpfHxbXSxuLnN0b3J5QWRzSW5Vc2VyU3Rvcmllc0VuYWJsZWQ9ZS5zdG9yeUFkc0luVXNlclN0b3JpZXNFbmFibGVkPz8hMSxuLnBldHJhRmVhdHVyZUZsYWdzPXZvaWQgMCE9PWUucGV0cmFGZWF0dXJlRmxhZ3MmJm51bGwhPT1lLnBldHJhRmVhdHVyZUZsYWdzP3QuUGV0cmFGZWF0dXJlRmxhZ3MuZnJvbVBhcnRpYWwoZS5wZXRyYUZlYXR1cmVGbGFncyk6dm9pZCAwLG4uY2FuU3VwcG9ydFNob3dzU2tpcHBhYmxlQWRzPWUuY2FuU3VwcG9ydFNob3dzU2tpcHBhYmxlQWRzPz8hMSxuLnN1cHBvcnRlZEFkVHlwZXM9ZS5zdXBwb3J0ZWRBZFR5cGVzPy5tYXAoKGU9PmUpKXx8W10sbi5hZGRpdGlvbmFsRm9ybWF0VHlwZT1lLmFkZGl0aW9uYWxGb3JtYXRUeXBlPz8wLG4uc3RvcnlBZHNJbkNvbnRlbnRJbnRlcnN0aXRpYWxFbmFibGVkPWUuc3RvcnlBZHNJbkNvbnRlbnRJbnRlcnN0aXRpYWxFbmFibGVkPz8hMSxuLmNhblN1cHBvcnRDb2xsZWN0aW9uVjI9ZS5jYW5TdXBwb3J0Q29sbGVjdGlvblYyPz8hMSxuLm1heFN1cHBvcnRlZFNrQWROZXR3b3JrVmVyc2lvbj1lLm1heFN1cHBvcnRlZFNrQWROZXR3b3JrVmVyc2lvbj8/XCJcIixuLmNhblN1cHBvcnRDb2xsZWN0aW9uQXBwSW5zdGFsbD1lLmNhblN1cHBvcnRDb2xsZWN0aW9uQXBwSW5zdGFsbD8/ITEsbi50b3BzbmFwUHJvZHVjdHNJblNob3djYXNlQXR0YWNobWVudD1lLnRvcHNuYXBQcm9kdWN0c0luU2hvd2Nhc2VBdHRhY2htZW50Pz8hMSxuLmNhblN1cHBvcnRDb2xsZWN0aW9uU2hvd2Nhc2VBdHRhY2htZW50PWUuY2FuU3VwcG9ydENvbGxlY3Rpb25TaG93Y2FzZUF0dGFjaG1lbnQ/PyExLG4uY2FuU3VwcG9ydExlYWRHZW5WMTU9ZS5jYW5TdXBwb3J0TGVhZEdlblYxNT8/ITEsbi5tYXhTdXBwb3J0ZWRTa0FkTmV0d29ya1ZpZXdUaHJvdWdoVmVyc2lvbj1lLm1heFN1cHBvcnRlZFNrQWROZXR3b3JrVmlld1Rocm91Z2hWZXJzaW9uPz9cIlwiLG4uY2FuU3VwcG9ydERwYVN0b3J5QWRzPWUuY2FuU3VwcG9ydERwYVN0b3J5QWRzPz8hMSxuLnN1cHBvcnRlZExlYWRHZW5WZXJzaW9uPWUuc3VwcG9ydGVkTGVhZEdlblZlcnNpb24/P3ZvaWQgMCxuLmNhblN1cHBvcnREZWZhdWx0QnJvd3NlckRlZXBsaW5rRmFsbGJhY2s9ZS5jYW5TdXBwb3J0RGVmYXVsdEJyb3dzZXJEZWVwbGlua0ZhbGxiYWNrPz8hMSxuLmNvbXBvc2VyU3VwcG9ydGVkSXRlbVR5cGVzPWUuY29tcG9zZXJTdXBwb3J0ZWRJdGVtVHlwZXM/Lm1hcCgoZT0+ZSkpfHxbXSxuLnN1cHBvcnRlZERwYUNvbXBvc2VyVGVtcGxhdGVWZXJzaW9uPWUuc3VwcG9ydGVkRHBhQ29tcG9zZXJUZW1wbGF0ZVZlcnNpb24/P3ZvaWQgMCxuLnN1cHBvcnRzT3JnYW5pY1N0b3JlPWUuc3VwcG9ydHNPcmdhbmljU3RvcmU/PyExLG4ubXVsdGlBZFBvZFJlcXVlc3RFbmFibGVkPWUubXVsdGlBZFBvZFJlcXVlc3RFbmFibGVkPz8hMSxuLm9mZmVyRGlzY2xhaW1lckVuYWJsZWQ9ZS5vZmZlckRpc2NsYWltZXJFbmFibGVkPz8hMSxuLmNhblN1cHBvcnRNdWx0aUltYWdlQ29tcG9zZXJUZW1wbGF0ZXM9ZS5jYW5TdXBwb3J0TXVsdGlJbWFnZUNvbXBvc2VyVGVtcGxhdGVzPz8hMSxuLmNhblN1cHBvcnRTa2FuQWRzZXRzPWUuY2FuU3VwcG9ydFNrYW5BZHNldHM/PyExLG59fSx0LlBldHJhRmVhdHVyZUZsYWdzPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7dC51aW50MzIoMTApLmZvcmsoKTtmb3IoY29uc3QgbiBvZiBlLmNhcGFibGVBZFR5cGVzKXQuaW50MzIobik7dC5sZGVsaW0oKSx0LnVpbnQzMigxOCkuZm9yaygpO2Zvcihjb25zdCBuIG9mIGUuY2FwYWJsZVRvcHNuYXBNZWRpYVR5cGVzKXQuaW50MzIobik7dC5sZGVsaW0oKSx0LnVpbnQzMigyNikuZm9yaygpO2Zvcihjb25zdCBuIG9mIGUuY2FwYWJsZU5hdGl2ZVRlbXBsYXRlVHlwZXMpdC5pbnQzMihuKTtyZXR1cm4gdC5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2NhcGFibGVBZFR5cGVzOltdLGNhcGFibGVUb3BzbmFwTWVkaWFUeXBlczpbXSxjYXBhYmxlTmF0aXZlVGVtcGxhdGVUeXBlczpbXX07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmlmKDI9PSg3JmUpKXtjb25zdCBlPW4udWludDMyKCkrbi5wb3M7Zm9yKDtuLnBvczxlOylpLmNhcGFibGVBZFR5cGVzLnB1c2gobi5pbnQzMigpKX1lbHNlIGkuY2FwYWJsZUFkVHlwZXMucHVzaChuLmludDMyKCkpO2JyZWFrO2Nhc2UgMjppZigyPT0oNyZlKSl7Y29uc3QgZT1uLnVpbnQzMigpK24ucG9zO2Zvcig7bi5wb3M8ZTspaS5jYXBhYmxlVG9wc25hcE1lZGlhVHlwZXMucHVzaChuLmludDMyKCkpfWVsc2UgaS5jYXBhYmxlVG9wc25hcE1lZGlhVHlwZXMucHVzaChuLmludDMyKCkpO2JyZWFrO2Nhc2UgMzppZigyPT0oNyZlKSl7Y29uc3QgZT1uLnVpbnQzMigpK24ucG9zO2Zvcig7bi5wb3M8ZTspaS5jYXBhYmxlTmF0aXZlVGVtcGxhdGVUeXBlcy5wdXNoKG4uaW50MzIoKSl9ZWxzZSBpLmNhcGFibGVOYXRpdmVUZW1wbGF0ZVR5cGVzLnB1c2gobi5pbnQzMigpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2NhcGFibGVBZFR5cGVzOltdLGNhcGFibGVUb3BzbmFwTWVkaWFUeXBlczpbXSxjYXBhYmxlTmF0aXZlVGVtcGxhdGVUeXBlczpbXX07cmV0dXJuIHQuY2FwYWJsZUFkVHlwZXM9ZS5jYXBhYmxlQWRUeXBlcz8ubWFwKChlPT5lKSl8fFtdLHQuY2FwYWJsZVRvcHNuYXBNZWRpYVR5cGVzPWUuY2FwYWJsZVRvcHNuYXBNZWRpYVR5cGVzPy5tYXAoKGU9PmUpKXx8W10sdC5jYXBhYmxlTmF0aXZlVGVtcGxhdGVUeXBlcz1lLmNhcGFibGVOYXRpdmVUZW1wbGF0ZVR5cGVzPy5tYXAoKGU9PmUpKXx8W10sdH19LHQuSW52ZW50b3J5UmVxdWVzdD17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpOzAhPT1lLmludmVudG9yeVR5cGUmJm4udWludDMyKDgpLmludDMyKGUuaW52ZW50b3J5VHlwZSksXCJcIiE9PWUuaW52ZW50b3J5SWQmJm4udWludDMyKDE4KS5zdHJpbmcoZS5pbnZlbnRvcnlJZCksXCJcIiE9PWUuZGVidWdBZElkJiZuLnVpbnQzMigzNCkuc3RyaW5nKGUuZGVidWdBZElkKSx2b2lkIDAhPT1lLnBvc2l0aW9uSWQmJmMuSW50MzJWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUucG9zaXRpb25JZH0sbi51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKCksMCE9PWUubnVtQWRzUmVxdWVzdGVkJiZuLnVpbnQzMig0OCkuaW50MzIoZS5udW1BZHNSZXF1ZXN0ZWQpLCEwPT09ZS5pc1Vuc2tpcHBhYmxlQWRTbG90JiZuLnVpbnQzMig1NikuYm9vbChlLmlzVW5za2lwcGFibGVBZFNsb3QpLDAhPT1lLnJlc3BvbnNlRGF0YVR5cGUmJm4udWludDMyKDY0KS5pbnQzMihlLnJlc3BvbnNlRGF0YVR5cGUpLHZvaWQgMCE9PWUuZGlzY292ZXJDaGFubmVsTWV0YWRhdGEmJnQuRGlzY292ZXJDaGFubmVsTWV0YWRhdGEuZW5jb2RlKGUuZGlzY292ZXJDaGFubmVsTWV0YWRhdGEsbi51aW50MzIoNzQpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5mZWF0dXJlRmxhZ3MmJnQuRmVhdHVyZUZsYWdzLmVuY29kZShlLmZlYXR1cmVGbGFncyxuLnVpbnQzMig4MikuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS5jbGllbnRJbnZlbnRvcnlSZXF1ZXN0SWQubGVuZ3RoJiZuLnVpbnQzMig5MCkuYnl0ZXMoZS5jbGllbnRJbnZlbnRvcnlSZXF1ZXN0SWQpLDAhPT1lLnB1Ymxpc2hlclNsb3RJZC5sZW5ndGgmJm4udWludDMyKDk4KS5ieXRlcyhlLnB1Ymxpc2hlclNsb3RJZCksdm9pZCAwIT09ZS5jbGllbnRFbmdhZ2VtZW50U2lnbmFsJiZvLlNpZ25hbHMuZW5jb2RlKGUuY2xpZW50RW5nYWdlbWVudFNpZ25hbCxuLnVpbnQzMigxMDYpLmZvcmsoKSkubGRlbGltKCksXCIwXCIhPT1lLmRlYnVnUHJvZHVjdElkJiZuLnVpbnQzMigxMjgpLmludDY0KGUuZGVidWdQcm9kdWN0SWQpLCEwPT09ZS5zaG91bGRTa2lwU3RvcnlBZFJlcXVlc3QmJm4udWludDMyKDEzNikuYm9vbChlLnNob3VsZFNraXBTdG9yeUFkUmVxdWVzdCksITA9PT1lLmlzUHJlZmV0Y2hSZXF1ZXN0JiZuLnVpbnQzMigxNDQpLmJvb2woZS5pc1ByZWZldGNoUmVxdWVzdCksMCE9PWUubW9ja0FkUmVxdWVzdFBhcmFtcy5sZW5ndGgmJm4udWludDMyKDE1NCkuYnl0ZXMoZS5tb2NrQWRSZXF1ZXN0UGFyYW1zKSwwIT09ZS5pbnZlbnRvcnlTdWJUeXBlJiZuLnVpbnQzMigxNjApLmludDMyKGUuaW52ZW50b3J5U3ViVHlwZSksbi51aW50MzIoMTcwKS5mb3JrKCk7Zm9yKGNvbnN0IHQgb2YgZS5kZWJ1Z1Byb2R1Y3RJZHMpbi5pbnQ2NCh0KTtuLmxkZWxpbSgpLHZvaWQgMCE9PWUuaW52ZW50b3J5UmVxdWVzdERlYnVnRmxhZ3MmJnQuSW52ZW50b3J5UmVxdWVzdERlYnVnRmxhZ3MuZW5jb2RlKGUuaW52ZW50b3J5UmVxdWVzdERlYnVnRmxhZ3Msbi51aW50MzIoMTc4KS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLm51bWJlck9mU3ViQ3JlYXRpdmVzJiZuLnVpbnQzMigxODQpLmludDMyKGUubnVtYmVyT2ZTdWJDcmVhdGl2ZXMpLHZvaWQgMCE9PWUuZGlzcGxheWVkUHJlUm9sbEFkSW5mbyYmdC5EaXNwbGF5ZWRQcmVSb2xsQWRJbmZvLmVuY29kZShlLmRpc3BsYXllZFByZVJvbGxBZEluZm8sbi51aW50MzIoMTk0KS5mb3JrKCkpLmxkZWxpbSgpO2Zvcihjb25zdCB0IG9mIGUuY2xpZW50UmVxdWVzdElkcyluLnVpbnQzMigyMDIpLmJ5dGVzKHQpO3JldHVybiBufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGE9bCgpO2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLmludmVudG9yeVR5cGU9ci5pbnQzMigpO2JyZWFrO2Nhc2UgMjphLmludmVudG9yeUlkPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSA0OmEuZGVidWdBZElkPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSA1OmEucG9zaXRpb25JZD1jLkludDMyVmFsdWUuZGVjb2RlKHIsci51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSA2OmEubnVtQWRzUmVxdWVzdGVkPXIuaW50MzIoKTticmVhaztjYXNlIDc6YS5pc1Vuc2tpcHBhYmxlQWRTbG90PXIuYm9vbCgpO2JyZWFrO2Nhc2UgODphLnJlc3BvbnNlRGF0YVR5cGU9ci5pbnQzMigpO2JyZWFrO2Nhc2UgOTphLmRpc2NvdmVyQ2hhbm5lbE1ldGFkYXRhPXQuRGlzY292ZXJDaGFubmVsTWV0YWRhdGEuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAxMDphLmZlYXR1cmVGbGFncz10LkZlYXR1cmVGbGFncy5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDExOmEuY2xpZW50SW52ZW50b3J5UmVxdWVzdElkPXIuYnl0ZXMoKTticmVhaztjYXNlIDEyOmEucHVibGlzaGVyU2xvdElkPXIuYnl0ZXMoKTticmVhaztjYXNlIDEzOmEuY2xpZW50RW5nYWdlbWVudFNpZ25hbD1vLlNpZ25hbHMuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAxNjphLmRlYnVnUHJvZHVjdElkPWQoci5pbnQ2NCgpKTticmVhaztjYXNlIDE3OmEuc2hvdWxkU2tpcFN0b3J5QWRSZXF1ZXN0PXIuYm9vbCgpO2JyZWFrO2Nhc2UgMTg6YS5pc1ByZWZldGNoUmVxdWVzdD1yLmJvb2woKTticmVhaztjYXNlIDE5OmEubW9ja0FkUmVxdWVzdFBhcmFtcz1yLmJ5dGVzKCk7YnJlYWs7Y2FzZSAyMDphLmludmVudG9yeVN1YlR5cGU9ci5pbnQzMigpO2JyZWFrO2Nhc2UgMjE6aWYoMj09KDcmZSkpe2NvbnN0IGU9ci51aW50MzIoKStyLnBvcztmb3IoO3IucG9zPGU7KWEuZGVidWdQcm9kdWN0SWRzLnB1c2goZChyLmludDY0KCkpKX1lbHNlIGEuZGVidWdQcm9kdWN0SWRzLnB1c2goZChyLmludDY0KCkpKTticmVhaztjYXNlIDIyOmEuaW52ZW50b3J5UmVxdWVzdERlYnVnRmxhZ3M9dC5JbnZlbnRvcnlSZXF1ZXN0RGVidWdGbGFncy5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDIzOmEubnVtYmVyT2ZTdWJDcmVhdGl2ZXM9ci5pbnQzMigpO2JyZWFrO2Nhc2UgMjQ6YS5kaXNwbGF5ZWRQcmVSb2xsQWRJbmZvPXQuRGlzcGxheWVkUHJlUm9sbEFkSW5mby5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDI1OmEuY2xpZW50UmVxdWVzdElkcy5wdXNoKHIuYnl0ZXMoKSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPWwoKTtyZXR1cm4gbi5pbnZlbnRvcnlUeXBlPWUuaW52ZW50b3J5VHlwZT8/MCxuLmludmVudG9yeUlkPWUuaW52ZW50b3J5SWQ/P1wiXCIsbi5kZWJ1Z0FkSWQ9ZS5kZWJ1Z0FkSWQ/P1wiXCIsbi5wb3NpdGlvbklkPWUucG9zaXRpb25JZD8/dm9pZCAwLG4ubnVtQWRzUmVxdWVzdGVkPWUubnVtQWRzUmVxdWVzdGVkPz8wLG4uaXNVbnNraXBwYWJsZUFkU2xvdD1lLmlzVW5za2lwcGFibGVBZFNsb3Q/PyExLG4ucmVzcG9uc2VEYXRhVHlwZT1lLnJlc3BvbnNlRGF0YVR5cGU/PzAsbi5kaXNjb3ZlckNoYW5uZWxNZXRhZGF0YT12b2lkIDAhPT1lLmRpc2NvdmVyQ2hhbm5lbE1ldGFkYXRhJiZudWxsIT09ZS5kaXNjb3ZlckNoYW5uZWxNZXRhZGF0YT90LkRpc2NvdmVyQ2hhbm5lbE1ldGFkYXRhLmZyb21QYXJ0aWFsKGUuZGlzY292ZXJDaGFubmVsTWV0YWRhdGEpOnZvaWQgMCxuLmZlYXR1cmVGbGFncz12b2lkIDAhPT1lLmZlYXR1cmVGbGFncyYmbnVsbCE9PWUuZmVhdHVyZUZsYWdzP3QuRmVhdHVyZUZsYWdzLmZyb21QYXJ0aWFsKGUuZmVhdHVyZUZsYWdzKTp2b2lkIDAsbi5jbGllbnRJbnZlbnRvcnlSZXF1ZXN0SWQ9ZS5jbGllbnRJbnZlbnRvcnlSZXF1ZXN0SWQ/P25ldyBVaW50OEFycmF5LG4ucHVibGlzaGVyU2xvdElkPWUucHVibGlzaGVyU2xvdElkPz9uZXcgVWludDhBcnJheSxuLmNsaWVudEVuZ2FnZW1lbnRTaWduYWw9dm9pZCAwIT09ZS5jbGllbnRFbmdhZ2VtZW50U2lnbmFsJiZudWxsIT09ZS5jbGllbnRFbmdhZ2VtZW50U2lnbmFsP28uU2lnbmFscy5mcm9tUGFydGlhbChlLmNsaWVudEVuZ2FnZW1lbnRTaWduYWwpOnZvaWQgMCxuLmRlYnVnUHJvZHVjdElkPWUuZGVidWdQcm9kdWN0SWQ/P1wiMFwiLG4uc2hvdWxkU2tpcFN0b3J5QWRSZXF1ZXN0PWUuc2hvdWxkU2tpcFN0b3J5QWRSZXF1ZXN0Pz8hMSxuLmlzUHJlZmV0Y2hSZXF1ZXN0PWUuaXNQcmVmZXRjaFJlcXVlc3Q/PyExLG4ubW9ja0FkUmVxdWVzdFBhcmFtcz1lLm1vY2tBZFJlcXVlc3RQYXJhbXM/P25ldyBVaW50OEFycmF5LG4uaW52ZW50b3J5U3ViVHlwZT1lLmludmVudG9yeVN1YlR5cGU/PzAsbi5kZWJ1Z1Byb2R1Y3RJZHM9ZS5kZWJ1Z1Byb2R1Y3RJZHM/Lm1hcCgoZT0+ZSkpfHxbXSxuLmludmVudG9yeVJlcXVlc3REZWJ1Z0ZsYWdzPXZvaWQgMCE9PWUuaW52ZW50b3J5UmVxdWVzdERlYnVnRmxhZ3MmJm51bGwhPT1lLmludmVudG9yeVJlcXVlc3REZWJ1Z0ZsYWdzP3QuSW52ZW50b3J5UmVxdWVzdERlYnVnRmxhZ3MuZnJvbVBhcnRpYWwoZS5pbnZlbnRvcnlSZXF1ZXN0RGVidWdGbGFncyk6dm9pZCAwLG4ubnVtYmVyT2ZTdWJDcmVhdGl2ZXM9ZS5udW1iZXJPZlN1YkNyZWF0aXZlcz8/MCxuLmRpc3BsYXllZFByZVJvbGxBZEluZm89dm9pZCAwIT09ZS5kaXNwbGF5ZWRQcmVSb2xsQWRJbmZvJiZudWxsIT09ZS5kaXNwbGF5ZWRQcmVSb2xsQWRJbmZvP3QuRGlzcGxheWVkUHJlUm9sbEFkSW5mby5mcm9tUGFydGlhbChlLmRpc3BsYXllZFByZVJvbGxBZEluZm8pOnZvaWQgMCxuLmNsaWVudFJlcXVlc3RJZHM9ZS5jbGllbnRSZXF1ZXN0SWRzPy5tYXAoKGU9PmUpKXx8W10sbn19LHQuSW52ZW50b3J5UmVxdWVzdERlYnVnRmxhZ3M9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTshMD09PWUuZHBhVG9wU25hcER5bmFtaWMmJnQudWludDMyKDgpLmJvb2woZS5kcGFUb3BTbmFwRHluYW1pYyksMCE9PWUuY3JlYXRpdmVFbGVtZW50SW50ZXJhY3Rpb25UeXBlJiZ0LnVpbnQzMigxNikuaW50MzIoZS5jcmVhdGl2ZUVsZW1lbnRJbnRlcmFjdGlvblR5cGUpLDAhPT1lLmNvbGxlY3Rpb25EZWZhdWx0RmFsbGJhY2tJbnRlcmFjdGlvblR5cGUmJnQudWludDMyKDI0KS5pbnQzMihlLmNvbGxlY3Rpb25EZWZhdWx0RmFsbGJhY2tJbnRlcmFjdGlvblR5cGUpLHZvaWQgMCE9PWUuZHBhU3RvcnlBZE1ldGFkYXRhJiZhLkRwYVN0b3J5QWRNZXRhZGF0YS5lbmNvZGUoZS5kcGFTdG9yeUFkTWV0YWRhdGEsdC51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCk7Zm9yKGNvbnN0IG4gb2YgZS5kZWJ1Z1Byb2R1Y3RJZHMpdC51aW50MzIoNDIpLnN0cmluZyhuKTtyZXR1cm4gdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtkcGFUb3BTbmFwRHluYW1pYzohMSxjcmVhdGl2ZUVsZW1lbnRJbnRlcmFjdGlvblR5cGU6MCxjb2xsZWN0aW9uRGVmYXVsdEZhbGxiYWNrSW50ZXJhY3Rpb25UeXBlOjAsZHBhU3RvcnlBZE1ldGFkYXRhOnZvaWQgMCxkZWJ1Z1Byb2R1Y3RJZHM6W119O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmRwYVRvcFNuYXBEeW5hbWljPW4uYm9vbCgpO2JyZWFrO2Nhc2UgMjppLmNyZWF0aXZlRWxlbWVudEludGVyYWN0aW9uVHlwZT1uLmludDMyKCk7YnJlYWs7Y2FzZSAzOmkuY29sbGVjdGlvbkRlZmF1bHRGYWxsYmFja0ludGVyYWN0aW9uVHlwZT1uLmludDMyKCk7YnJlYWs7Y2FzZSA0OmkuZHBhU3RvcnlBZE1ldGFkYXRhPWEuRHBhU3RvcnlBZE1ldGFkYXRhLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgNTppLmRlYnVnUHJvZHVjdElkcy5wdXNoKG4uc3RyaW5nKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17ZHBhVG9wU25hcER5bmFtaWM6ITEsY3JlYXRpdmVFbGVtZW50SW50ZXJhY3Rpb25UeXBlOjAsY29sbGVjdGlvbkRlZmF1bHRGYWxsYmFja0ludGVyYWN0aW9uVHlwZTowLGRwYVN0b3J5QWRNZXRhZGF0YTp2b2lkIDAsZGVidWdQcm9kdWN0SWRzOltdfTtyZXR1cm4gdC5kcGFUb3BTbmFwRHluYW1pYz1lLmRwYVRvcFNuYXBEeW5hbWljPz8hMSx0LmNyZWF0aXZlRWxlbWVudEludGVyYWN0aW9uVHlwZT1lLmNyZWF0aXZlRWxlbWVudEludGVyYWN0aW9uVHlwZT8/MCx0LmNvbGxlY3Rpb25EZWZhdWx0RmFsbGJhY2tJbnRlcmFjdGlvblR5cGU9ZS5jb2xsZWN0aW9uRGVmYXVsdEZhbGxiYWNrSW50ZXJhY3Rpb25UeXBlPz8wLHQuZHBhU3RvcnlBZE1ldGFkYXRhPXZvaWQgMCE9PWUuZHBhU3RvcnlBZE1ldGFkYXRhJiZudWxsIT09ZS5kcGFTdG9yeUFkTWV0YWRhdGE/YS5EcGFTdG9yeUFkTWV0YWRhdGEuZnJvbVBhcnRpYWwoZS5kcGFTdG9yeUFkTWV0YWRhdGEpOnZvaWQgMCx0LmRlYnVnUHJvZHVjdElkcz1lLmRlYnVnUHJvZHVjdElkcz8ubWFwKChlPT5lKSl8fFtdLHR9fSx0LkRpc3BsYXllZFByZVJvbGxBZEluZm89e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUuYWRJZC5sZW5ndGgmJnQudWludDMyKDEwKS5ieXRlcyhlLmFkSWQpLDAhPT1lLnJlcXVlc3RJZC5sZW5ndGgmJnQudWludDMyKDE4KS5ieXRlcyhlLnJlcXVlc3RJZCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXUoKTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5hZElkPW4uYnl0ZXMoKTticmVhaztjYXNlIDI6aS5yZXF1ZXN0SWQ9bi5ieXRlcygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD11KCk7cmV0dXJuIHQuYWRJZD1lLmFkSWQ/P25ldyBVaW50OEFycmF5LHQucmVxdWVzdElkPWUucmVxdWVzdElkPz9uZXcgVWludDhBcnJheSx0fX0scy5kZWZhdWx0LnV0aWwuTG9uZyE9PWkuZGVmYXVsdCYmKHMuZGVmYXVsdC51dGlsLkxvbmc9aS5kZWZhdWx0LHMuZGVmYXVsdC5jb25maWd1cmUoKSl9LDgzNjk1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkxlbnNNaXhlck1ldGFkYXRhPXZvaWQgMDtjb25zdCBpPXIobig0MTU4MykpLG89cihuKDYyMTAwKSk7ZnVuY3Rpb24gYSgpe3JldHVybnttZWRpYVVubG9ja2FibGVJZDpcIjBcIixicmFuZE5hbWU6XCJcIixjcmVhdG9yVXNlcklkOm5ldyBVaW50OEFycmF5LGlzUmVndWxhdGVkQ29udGVudDohMSxjYWxsVG9BY3Rpb246XCJcIixhdHRhY2htZW50VHlwZTowfX10LkxlbnNNaXhlck1ldGFkYXRhPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCIwXCIhPT1lLm1lZGlhVW5sb2NrYWJsZUlkJiZ0LnVpbnQzMig4KS5pbnQ2NChlLm1lZGlhVW5sb2NrYWJsZUlkKSxcIlwiIT09ZS5icmFuZE5hbWUmJnQudWludDMyKDE4KS5zdHJpbmcoZS5icmFuZE5hbWUpLDAhPT1lLmNyZWF0b3JVc2VySWQubGVuZ3RoJiZ0LnVpbnQzMigyNikuYnl0ZXMoZS5jcmVhdG9yVXNlcklkKSwhMD09PWUuaXNSZWd1bGF0ZWRDb250ZW50JiZ0LnVpbnQzMigzMikuYm9vbChlLmlzUmVndWxhdGVkQ29udGVudCksXCJcIiE9PWUuY2FsbFRvQWN0aW9uJiZ0LnVpbnQzMig0Mikuc3RyaW5nKGUuY2FsbFRvQWN0aW9uKSwwIT09ZS5hdHRhY2htZW50VHlwZSYmdC51aW50MzIoNDgpLmludDMyKGUuYXR0YWNobWVudFR5cGUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT1hKCk7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkubWVkaWFVbmxvY2thYmxlSWQ9bi5pbnQ2NCgpLnRvU3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkuYnJhbmROYW1lPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmkuY3JlYXRvclVzZXJJZD1uLmJ5dGVzKCk7YnJlYWs7Y2FzZSA0OmkuaXNSZWd1bGF0ZWRDb250ZW50PW4uYm9vbCgpO2JyZWFrO2Nhc2UgNTppLmNhbGxUb0FjdGlvbj1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNjppLmF0dGFjaG1lbnRUeXBlPW4uaW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9YSgpO3JldHVybiB0Lm1lZGlhVW5sb2NrYWJsZUlkPWUubWVkaWFVbmxvY2thYmxlSWQ/P1wiMFwiLHQuYnJhbmROYW1lPWUuYnJhbmROYW1lPz9cIlwiLHQuY3JlYXRvclVzZXJJZD1lLmNyZWF0b3JVc2VySWQ/P25ldyBVaW50OEFycmF5LHQuaXNSZWd1bGF0ZWRDb250ZW50PWUuaXNSZWd1bGF0ZWRDb250ZW50Pz8hMSx0LmNhbGxUb0FjdGlvbj1lLmNhbGxUb0FjdGlvbj8/XCJcIix0LmF0dGFjaG1lbnRUeXBlPWUuYXR0YWNobWVudFR5cGU/PzAsdH19LG8uZGVmYXVsdC51dGlsLkxvbmchPT1pLmRlZmF1bHQmJihvLmRlZmF1bHQudXRpbC5Mb25nPWkuZGVmYXVsdCxvLmRlZmF1bHQuY29uZmlndXJlKCkpfSw1NzE5NDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5MZW5zVmlld1Nlc3Npb25Db250ZXh0PXQuTGVuc1JhbmtpbmdDb250ZXh0PXQuTGVuc1JhbmtpbmdDb250ZXh0X0NhbWVyYURpcmVjdGlvbj12b2lkIDA7Y29uc3QgaT1yKG4oNjIxMDApKSxvPW4oNTMwNTYpO3ZhciBhOyhhPXQuTGVuc1JhbmtpbmdDb250ZXh0X0NhbWVyYURpcmVjdGlvbnx8KHQuTGVuc1JhbmtpbmdDb250ZXh0X0NhbWVyYURpcmVjdGlvbj17fSkpW2EuQ0FNRVJBX0RJUkVDVElPTl9VTlNFVD0wXT1cIkNBTUVSQV9ESVJFQ1RJT05fVU5TRVRcIixhW2EuRlJPTlQ9MV09XCJGUk9OVFwiLGFbYS5CQUNLPTJdPVwiQkFDS1wiLGFbYS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsdC5MZW5zUmFua2luZ0NvbnRleHQ9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgciBvZiBlLmxlbnNWaWV3U2Vzc2lvbil0LkxlbnNWaWV3U2Vzc2lvbkNvbnRleHQuZW5jb2RlKHIsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIDAhPT1lLmNhbWVyYURpcmVjdGlvbiYmbi51aW50MzIoMTYpLmludDMyKGUuY2FtZXJhRGlyZWN0aW9uKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IG89dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGE9e2xlbnNWaWV3U2Vzc2lvbjpbXSxjYW1lcmFEaXJlY3Rpb246MH07Zm9yKDtyLnBvczxvOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmEubGVuc1ZpZXdTZXNzaW9uLnB1c2godC5MZW5zVmlld1Nlc3Npb25Db250ZXh0LmRlY29kZShyLHIudWludDMyKCkpKTticmVhaztjYXNlIDI6YS5jYW1lcmFEaXJlY3Rpb249ci5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17bGVuc1ZpZXdTZXNzaW9uOltdLGNhbWVyYURpcmVjdGlvbjowfTtyZXR1cm4gbi5sZW5zVmlld1Nlc3Npb249ZS5sZW5zVmlld1Nlc3Npb24/Lm1hcCgoZT0+dC5MZW5zVmlld1Nlc3Npb25Db250ZXh0LmZyb21QYXJ0aWFsKGUpKSl8fFtdLG4uY2FtZXJhRGlyZWN0aW9uPWUuY2FtZXJhRGlyZWN0aW9uPz8wLG59fSx0LkxlbnNWaWV3U2Vzc2lvbkNvbnRleHQ9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5zdGFydFRpbWVzdGFtcE1pbGxpcyYmby5JbnQ2NFZhbHVlLmVuY29kZSh7dmFsdWU6ZS5zdGFydFRpbWVzdGFtcE1pbGxpc30sdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS50b3RhbExlbnNWaWV3VGltZU1pbGxpcyYmby5JbnQ2NFZhbHVlLmVuY29kZSh7dmFsdWU6ZS50b3RhbExlbnNWaWV3VGltZU1pbGxpc30sdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS50b3RhbExlbnNBZFZpZXdUaW1lTWlsbGlzJiZvLkludDY0VmFsdWUuZW5jb2RlKHt2YWx1ZTplLnRvdGFsTGVuc0FkVmlld1RpbWVNaWxsaXN9LHQudWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUudG90YWxMZW5zVmlld0NvdW50JiZvLkludDMyVmFsdWUuZW5jb2RlKHt2YWx1ZTplLnRvdGFsTGVuc1ZpZXdDb3VudH0sdC51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS50b3RhbExlbnNBZFZpZXdDb3VudCYmby5JbnQzMlZhbHVlLmVuY29kZSh7dmFsdWU6ZS50b3RhbExlbnNBZFZpZXdDb3VudH0sdC51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS50b3RhbExlbnNBZFN3aXBlVXBDb3VudCYmby5JbnQzMlZhbHVlLmVuY29kZSh7dmFsdWU6ZS50b3RhbExlbnNBZFN3aXBlVXBDb3VudH0sdC51aW50MzIoNTApLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS50b3RhbExlbnNTd2lwZVVwQ291bnQmJm8uSW50MzJWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUudG90YWxMZW5zU3dpcGVVcENvdW50fSx0LnVpbnQzMig1OCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnRvdGFsTGVuc0FkTG9uZ2Zvcm1WaWV3VGltZU1pbGxpcyYmby5JbnQ2NFZhbHVlLmVuY29kZSh7dmFsdWU6ZS50b3RhbExlbnNBZExvbmdmb3JtVmlld1RpbWVNaWxsaXN9LHQudWludDMyKDY2KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUudG90YWxMZW5zU25hcFRha2VuQ291bnQmJm8uSW50MzJWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUudG90YWxMZW5zU25hcFRha2VuQ291bnR9LHQudWludDMyKDc0KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUudG90YWxBZExlbnNTbmFwVGFrZW5Db3VudCYmby5JbnQzMlZhbHVlLmVuY29kZSh7dmFsdWU6ZS50b3RhbEFkTGVuc1NuYXBUYWtlbkNvdW50fSx0LnVpbnQzMig4MikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnRvdGFsTGVuc1NoYXJlQ291bnQmJm8uSW50MzJWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUudG90YWxMZW5zU2hhcmVDb3VudH0sdC51aW50MzIoOTApLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS50b3RhbEFkTGVuc1NoYXJlQ291bnQmJm8uSW50MzJWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUudG90YWxBZExlbnNTaGFyZUNvdW50fSx0LnVpbnQzMig5OCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnRvdGFsTGVuc1NuYXBTZW5kQ291bnQmJm8uSW50MzJWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUudG90YWxMZW5zU25hcFNlbmRDb3VudH0sdC51aW50MzIoMTA2KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUudG90YWxBZExlbnNTbmFwU2VuZENvdW50JiZvLkludDMyVmFsdWUuZW5jb2RlKHt2YWx1ZTplLnRvdGFsQWRMZW5zU25hcFNlbmRDb3VudH0sdC51aW50MzIoMTE0KS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgYT17c3RhcnRUaW1lc3RhbXBNaWxsaXM6dm9pZCAwLHRvdGFsTGVuc1ZpZXdUaW1lTWlsbGlzOnZvaWQgMCx0b3RhbExlbnNBZFZpZXdUaW1lTWlsbGlzOnZvaWQgMCx0b3RhbExlbnNWaWV3Q291bnQ6dm9pZCAwLHRvdGFsTGVuc0FkVmlld0NvdW50OnZvaWQgMCx0b3RhbExlbnNBZFN3aXBlVXBDb3VudDp2b2lkIDAsdG90YWxMZW5zU3dpcGVVcENvdW50OnZvaWQgMCx0b3RhbExlbnNBZExvbmdmb3JtVmlld1RpbWVNaWxsaXM6dm9pZCAwLHRvdGFsTGVuc1NuYXBUYWtlbkNvdW50OnZvaWQgMCx0b3RhbEFkTGVuc1NuYXBUYWtlbkNvdW50OnZvaWQgMCx0b3RhbExlbnNTaGFyZUNvdW50OnZvaWQgMCx0b3RhbEFkTGVuc1NoYXJlQ291bnQ6dm9pZCAwLHRvdGFsTGVuc1NuYXBTZW5kQ291bnQ6dm9pZCAwLHRvdGFsQWRMZW5zU25hcFNlbmRDb3VudDp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLnN0YXJ0VGltZXN0YW1wTWlsbGlzPW8uSW50NjRWYWx1ZS5kZWNvZGUobixuLnVpbnQzMigpKS52YWx1ZTticmVhaztjYXNlIDI6YS50b3RhbExlbnNWaWV3VGltZU1pbGxpcz1vLkludDY0VmFsdWUuZGVjb2RlKG4sbi51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSAzOmEudG90YWxMZW5zQWRWaWV3VGltZU1pbGxpcz1vLkludDY0VmFsdWUuZGVjb2RlKG4sbi51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSA0OmEudG90YWxMZW5zVmlld0NvdW50PW8uSW50MzJWYWx1ZS5kZWNvZGUobixuLnVpbnQzMigpKS52YWx1ZTticmVhaztjYXNlIDU6YS50b3RhbExlbnNBZFZpZXdDb3VudD1vLkludDMyVmFsdWUuZGVjb2RlKG4sbi51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSA2OmEudG90YWxMZW5zQWRTd2lwZVVwQ291bnQ9by5JbnQzMlZhbHVlLmRlY29kZShuLG4udWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgNzphLnRvdGFsTGVuc1N3aXBlVXBDb3VudD1vLkludDMyVmFsdWUuZGVjb2RlKG4sbi51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSA4OmEudG90YWxMZW5zQWRMb25nZm9ybVZpZXdUaW1lTWlsbGlzPW8uSW50NjRWYWx1ZS5kZWNvZGUobixuLnVpbnQzMigpKS52YWx1ZTticmVhaztjYXNlIDk6YS50b3RhbExlbnNTbmFwVGFrZW5Db3VudD1vLkludDMyVmFsdWUuZGVjb2RlKG4sbi51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSAxMDphLnRvdGFsQWRMZW5zU25hcFRha2VuQ291bnQ9by5JbnQzMlZhbHVlLmRlY29kZShuLG4udWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgMTE6YS50b3RhbExlbnNTaGFyZUNvdW50PW8uSW50MzJWYWx1ZS5kZWNvZGUobixuLnVpbnQzMigpKS52YWx1ZTticmVhaztjYXNlIDEyOmEudG90YWxBZExlbnNTaGFyZUNvdW50PW8uSW50MzJWYWx1ZS5kZWNvZGUobixuLnVpbnQzMigpKS52YWx1ZTticmVhaztjYXNlIDEzOmEudG90YWxMZW5zU25hcFNlbmRDb3VudD1vLkludDMyVmFsdWUuZGVjb2RlKG4sbi51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSAxNDphLnRvdGFsQWRMZW5zU25hcFNlbmRDb3VudD1vLkludDMyVmFsdWUuZGVjb2RlKG4sbi51aW50MzIoKSkudmFsdWU7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtzdGFydFRpbWVzdGFtcE1pbGxpczp2b2lkIDAsdG90YWxMZW5zVmlld1RpbWVNaWxsaXM6dm9pZCAwLHRvdGFsTGVuc0FkVmlld1RpbWVNaWxsaXM6dm9pZCAwLHRvdGFsTGVuc1ZpZXdDb3VudDp2b2lkIDAsdG90YWxMZW5zQWRWaWV3Q291bnQ6dm9pZCAwLHRvdGFsTGVuc0FkU3dpcGVVcENvdW50OnZvaWQgMCx0b3RhbExlbnNTd2lwZVVwQ291bnQ6dm9pZCAwLHRvdGFsTGVuc0FkTG9uZ2Zvcm1WaWV3VGltZU1pbGxpczp2b2lkIDAsdG90YWxMZW5zU25hcFRha2VuQ291bnQ6dm9pZCAwLHRvdGFsQWRMZW5zU25hcFRha2VuQ291bnQ6dm9pZCAwLHRvdGFsTGVuc1NoYXJlQ291bnQ6dm9pZCAwLHRvdGFsQWRMZW5zU2hhcmVDb3VudDp2b2lkIDAsdG90YWxMZW5zU25hcFNlbmRDb3VudDp2b2lkIDAsdG90YWxBZExlbnNTbmFwU2VuZENvdW50OnZvaWQgMH07cmV0dXJuIHQuc3RhcnRUaW1lc3RhbXBNaWxsaXM9ZS5zdGFydFRpbWVzdGFtcE1pbGxpcz8/dm9pZCAwLHQudG90YWxMZW5zVmlld1RpbWVNaWxsaXM9ZS50b3RhbExlbnNWaWV3VGltZU1pbGxpcz8/dm9pZCAwLHQudG90YWxMZW5zQWRWaWV3VGltZU1pbGxpcz1lLnRvdGFsTGVuc0FkVmlld1RpbWVNaWxsaXM/P3ZvaWQgMCx0LnRvdGFsTGVuc1ZpZXdDb3VudD1lLnRvdGFsTGVuc1ZpZXdDb3VudD8/dm9pZCAwLHQudG90YWxMZW5zQWRWaWV3Q291bnQ9ZS50b3RhbExlbnNBZFZpZXdDb3VudD8/dm9pZCAwLHQudG90YWxMZW5zQWRTd2lwZVVwQ291bnQ9ZS50b3RhbExlbnNBZFN3aXBlVXBDb3VudD8/dm9pZCAwLHQudG90YWxMZW5zU3dpcGVVcENvdW50PWUudG90YWxMZW5zU3dpcGVVcENvdW50Pz92b2lkIDAsdC50b3RhbExlbnNBZExvbmdmb3JtVmlld1RpbWVNaWxsaXM9ZS50b3RhbExlbnNBZExvbmdmb3JtVmlld1RpbWVNaWxsaXM/P3ZvaWQgMCx0LnRvdGFsTGVuc1NuYXBUYWtlbkNvdW50PWUudG90YWxMZW5zU25hcFRha2VuQ291bnQ/P3ZvaWQgMCx0LnRvdGFsQWRMZW5zU25hcFRha2VuQ291bnQ9ZS50b3RhbEFkTGVuc1NuYXBUYWtlbkNvdW50Pz92b2lkIDAsdC50b3RhbExlbnNTaGFyZUNvdW50PWUudG90YWxMZW5zU2hhcmVDb3VudD8/dm9pZCAwLHQudG90YWxBZExlbnNTaGFyZUNvdW50PWUudG90YWxBZExlbnNTaGFyZUNvdW50Pz92b2lkIDAsdC50b3RhbExlbnNTbmFwU2VuZENvdW50PWUudG90YWxMZW5zU25hcFNlbmRDb3VudD8/dm9pZCAwLHQudG90YWxBZExlbnNTbmFwU2VuZENvdW50PWUudG90YWxBZExlbnNTbmFwU2VuZENvdW50Pz92b2lkIDAsdH19fSw1NzM2NzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5UaGlyZFBhcnR5QWROZXR3b3JrVHJhY2tJbmZvPXQuUGV0cmFUcmFja0luZm89dm9pZCAwO2NvbnN0IGk9cihuKDYyMTAwKSk7dC5QZXRyYVRyYWNrSW5mbz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnF1ZXJ5SWQmJnQudWludDMyKDEwKS5zdHJpbmcoZS5xdWVyeUlkKSwwIT09ZS5uYXRpdmVUZW1wbGF0ZVR5cGUmJnQudWludDMyKDE2KS5pbnQzMihlLm5hdGl2ZVRlbXBsYXRlVHlwZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXtxdWVyeUlkOlwiXCIsbmF0aXZlVGVtcGxhdGVUeXBlOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLnF1ZXJ5SWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6by5uYXRpdmVUZW1wbGF0ZVR5cGU9bi5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17cXVlcnlJZDpcIlwiLG5hdGl2ZVRlbXBsYXRlVHlwZTowfTtyZXR1cm4gdC5xdWVyeUlkPWUucXVlcnlJZD8/XCJcIix0Lm5hdGl2ZVRlbXBsYXRlVHlwZT1lLm5hdGl2ZVRlbXBsYXRlVHlwZT8/MCx0fX0sdC5UaGlyZFBhcnR5QWROZXR3b3JrVHJhY2tJbmZvPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJwZXRyYVRyYWNrSW5mb1wiPT09ZS50cmFja0luZm8/LiRjYXNlJiZ0LlBldHJhVHJhY2tJbmZvLmVuY29kZShlLnRyYWNrSW5mby5wZXRyYVRyYWNrSW5mbyxuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IG89dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGE9e3RyYWNrSW5mbzp2b2lkIDB9O2Zvcig7ci5wb3M8bzspe2NvbnN0IGU9ci51aW50MzIoKTtlPj4+Mz09MT9hLnRyYWNrSW5mbz17JGNhc2U6XCJwZXRyYVRyYWNrSW5mb1wiLHBldHJhVHJhY2tJbmZvOnQuUGV0cmFUcmFja0luZm8uZGVjb2RlKHIsci51aW50MzIoKSl9OnIuc2tpcFR5cGUoNyZlKX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17dHJhY2tJbmZvOnZvaWQgMH07cmV0dXJuXCJwZXRyYVRyYWNrSW5mb1wiPT09ZS50cmFja0luZm8/LiRjYXNlJiZ2b2lkIDAhPT1lLnRyYWNrSW5mbz8ucGV0cmFUcmFja0luZm8mJm51bGwhPT1lLnRyYWNrSW5mbz8ucGV0cmFUcmFja0luZm8mJihuLnRyYWNrSW5mbz17JGNhc2U6XCJwZXRyYVRyYWNrSW5mb1wiLHBldHJhVHJhY2tJbmZvOnQuUGV0cmFUcmFja0luZm8uZnJvbVBhcnRpYWwoZS50cmFja0luZm8ucGV0cmFUcmFja0luZm8pfSksbn19fSw5NTM5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlJlc291cmNlSW5mbz12b2lkIDA7Y29uc3QgaT1yKG4oNjIxMDApKTt0LlJlc291cmNlSW5mbz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnJlc291cmNlVXJsJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUucmVzb3VyY2VVcmwpLFwiXCIhPT1lLmF0dHJpYnV0ZSYmdC51aW50MzIoMTgpLnN0cmluZyhlLmF0dHJpYnV0ZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXtyZXNvdXJjZVVybDpcIlwiLGF0dHJpYnV0ZTpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5yZXNvdXJjZVVybD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjpvLmF0dHJpYnV0ZT1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17cmVzb3VyY2VVcmw6XCJcIixhdHRyaWJ1dGU6XCJcIn07cmV0dXJuIHQucmVzb3VyY2VVcmw9ZS5yZXNvdXJjZVVybD8/XCJcIix0LmF0dHJpYnV0ZT1lLmF0dHJpYnV0ZT8/XCJcIix0fX19LDU2MDk5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LldlYlZpZXdJbkhvdXNlQ2FjaGU9dm9pZCAwO2NvbnN0IGk9cihuKDYyMTAwKSk7dC5XZWJWaWV3SW5Ib3VzZUNhY2hlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUucGFnZVVybCYmdC51aW50MzIoMTApLnN0cmluZyhlLnBhZ2VVcmwpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17cGFnZVVybDpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/by5wYWdlVXJsPW4uc3RyaW5nKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtwYWdlVXJsOlwiXCJ9O3JldHVybiB0LnBhZ2VVcmw9ZS5wYWdlVXJsPz9cIlwiLHR9fX0sNzk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuV2ViVmlld01ldGFkYXRhPXZvaWQgMDtjb25zdCBpPW4oOTUzOSksbz1uKDU2MDk5KSxhPXIobig2MjEwMCkpLHM9big1MzA1Nik7dC5XZWJWaWV3TWV0YWRhdGE9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtcIlwiIT09ZS5pZCYmdC51aW50MzIoMTApLnN0cmluZyhlLmlkKSxcIlwiIT09ZS5iYXNlVXJsJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuYmFzZVVybCk7Zm9yKGNvbnN0IG4gb2YgZS5nYVNjcmlwdHNVcmxzKXMuU3RyaW5nVmFsdWUuZW5jb2RlKHt2YWx1ZTpufSx0LnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKTt2b2lkIDAhPT1lLnNuYXBQaXhlbFNjcmlwdFVybCYmcy5TdHJpbmdWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUuc25hcFBpeGVsU2NyaXB0VXJsfSx0LnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnJlc291cmNlUHJlZmV0Y2hIaW50c1VybCYmcy5TdHJpbmdWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUucmVzb3VyY2VQcmVmZXRjaEhpbnRzVXJsfSx0LnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKTtmb3IoY29uc3QgbiBvZiBlLnJlbmRlckNyaXRpY2FsUmVzb3VyY2VzKWkuUmVzb3VyY2VJbmZvLmVuY29kZShuLHQudWludDMyKDUwKS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiB2b2lkIDAhPT1lLmluaG91c2VDYWNoZSYmby5XZWJWaWV3SW5Ib3VzZUNhY2hlLmVuY29kZShlLmluaG91c2VDYWNoZSx0LnVpbnQzMig1OCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmhhc1NlcnZlclJlZGlyZWN0JiZzLkJvb2xWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUuaGFzU2VydmVyUmVkaXJlY3R9LHQudWludDMyKDY2KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuc2VydmVyUmVkaXJlY3RSZXNvbHZlZFVybE1hdGNoUHJlZml4JiZzLlN0cmluZ1ZhbHVlLmVuY29kZSh7dmFsdWU6ZS5zZXJ2ZXJSZWRpcmVjdFJlc29sdmVkVXJsTWF0Y2hQcmVmaXh9LHQudWludDMyKDc0KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuZXhwZWN0ZWRTZXJ2ZXJSZWRpcmVjdENvdW50JiZzLkludDY0VmFsdWUuZW5jb2RlKHt2YWx1ZTplLmV4cGVjdGVkU2VydmVyUmVkaXJlY3RDb3VudH0sdC51aW50MzIoODIpLmZvcmsoKSkubGRlbGltKCksXCJcIiE9PWUud2Vidmlld1ByZWZldGNoSGludHNVcmwmJnQudWludDMyKDkwKS5zdHJpbmcoZS53ZWJ2aWV3UHJlZmV0Y2hIaW50c1VybCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBjPXtpZDpcIlwiLGJhc2VVcmw6XCJcIixnYVNjcmlwdHNVcmxzOltdLHNuYXBQaXhlbFNjcmlwdFVybDp2b2lkIDAscmVzb3VyY2VQcmVmZXRjaEhpbnRzVXJsOnZvaWQgMCxyZW5kZXJDcml0aWNhbFJlc291cmNlczpbXSxpbmhvdXNlQ2FjaGU6dm9pZCAwLGhhc1NlcnZlclJlZGlyZWN0OnZvaWQgMCxzZXJ2ZXJSZWRpcmVjdFJlc29sdmVkVXJsTWF0Y2hQcmVmaXg6dm9pZCAwLGV4cGVjdGVkU2VydmVyUmVkaXJlY3RDb3VudDp2b2lkIDAsd2Vidmlld1ByZWZldGNoSGludHNVcmw6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmMuaWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6Yy5iYXNlVXJsPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmMuZ2FTY3JpcHRzVXJscy5wdXNoKHMuU3RyaW5nVmFsdWUuZGVjb2RlKG4sbi51aW50MzIoKSkudmFsdWUpO2JyZWFrO2Nhc2UgNDpjLnNuYXBQaXhlbFNjcmlwdFVybD1zLlN0cmluZ1ZhbHVlLmRlY29kZShuLG4udWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgNTpjLnJlc291cmNlUHJlZmV0Y2hIaW50c1VybD1zLlN0cmluZ1ZhbHVlLmRlY29kZShuLG4udWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgNjpjLnJlbmRlckNyaXRpY2FsUmVzb3VyY2VzLnB1c2goaS5SZXNvdXJjZUluZm8uZGVjb2RlKG4sbi51aW50MzIoKSkpO2JyZWFrO2Nhc2UgNzpjLmluaG91c2VDYWNoZT1vLldlYlZpZXdJbkhvdXNlQ2FjaGUuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSA4OmMuaGFzU2VydmVyUmVkaXJlY3Q9cy5Cb29sVmFsdWUuZGVjb2RlKG4sbi51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSA5OmMuc2VydmVyUmVkaXJlY3RSZXNvbHZlZFVybE1hdGNoUHJlZml4PXMuU3RyaW5nVmFsdWUuZGVjb2RlKG4sbi51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSAxMDpjLmV4cGVjdGVkU2VydmVyUmVkaXJlY3RDb3VudD1zLkludDY0VmFsdWUuZGVjb2RlKG4sbi51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSAxMTpjLndlYnZpZXdQcmVmZXRjaEhpbnRzVXJsPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBjfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtpZDpcIlwiLGJhc2VVcmw6XCJcIixnYVNjcmlwdHNVcmxzOltdLHNuYXBQaXhlbFNjcmlwdFVybDp2b2lkIDAscmVzb3VyY2VQcmVmZXRjaEhpbnRzVXJsOnZvaWQgMCxyZW5kZXJDcml0aWNhbFJlc291cmNlczpbXSxpbmhvdXNlQ2FjaGU6dm9pZCAwLGhhc1NlcnZlclJlZGlyZWN0OnZvaWQgMCxzZXJ2ZXJSZWRpcmVjdFJlc29sdmVkVXJsTWF0Y2hQcmVmaXg6dm9pZCAwLGV4cGVjdGVkU2VydmVyUmVkaXJlY3RDb3VudDp2b2lkIDAsd2Vidmlld1ByZWZldGNoSGludHNVcmw6XCJcIn07cmV0dXJuIHQuaWQ9ZS5pZD8/XCJcIix0LmJhc2VVcmw9ZS5iYXNlVXJsPz9cIlwiLHQuZ2FTY3JpcHRzVXJscz1lLmdhU2NyaXB0c1VybHM/Lm1hcCgoZT0+ZSkpfHxbXSx0LnNuYXBQaXhlbFNjcmlwdFVybD1lLnNuYXBQaXhlbFNjcmlwdFVybD8/dm9pZCAwLHQucmVzb3VyY2VQcmVmZXRjaEhpbnRzVXJsPWUucmVzb3VyY2VQcmVmZXRjaEhpbnRzVXJsPz92b2lkIDAsdC5yZW5kZXJDcml0aWNhbFJlc291cmNlcz1lLnJlbmRlckNyaXRpY2FsUmVzb3VyY2VzPy5tYXAoKGU9PmkuUmVzb3VyY2VJbmZvLmZyb21QYXJ0aWFsKGUpKSl8fFtdLHQuaW5ob3VzZUNhY2hlPXZvaWQgMCE9PWUuaW5ob3VzZUNhY2hlJiZudWxsIT09ZS5pbmhvdXNlQ2FjaGU/by5XZWJWaWV3SW5Ib3VzZUNhY2hlLmZyb21QYXJ0aWFsKGUuaW5ob3VzZUNhY2hlKTp2b2lkIDAsdC5oYXNTZXJ2ZXJSZWRpcmVjdD1lLmhhc1NlcnZlclJlZGlyZWN0Pz92b2lkIDAsdC5zZXJ2ZXJSZWRpcmVjdFJlc29sdmVkVXJsTWF0Y2hQcmVmaXg9ZS5zZXJ2ZXJSZWRpcmVjdFJlc29sdmVkVXJsTWF0Y2hQcmVmaXg/P3ZvaWQgMCx0LmV4cGVjdGVkU2VydmVyUmVkaXJlY3RDb3VudD1lLmV4cGVjdGVkU2VydmVyUmVkaXJlY3RDb3VudD8/dm9pZCAwLHQud2Vidmlld1ByZWZldGNoSGludHNVcmw9ZS53ZWJ2aWV3UHJlZmV0Y2hIaW50c1VybD8/XCJcIix0fX19LDE1MDU5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkdldFRpdkVsaWdpYmlsaXR5RXJyb3I9dC5TbXNFbGlnaWJpbGl0eT10LkVtYWlsRWxpZ2liaWxpdHk9dC5QdXNoRWxpZ2liaWxpdHk9dC5HZXRUaXZFbGlnaWJpbGl0eVJlc3BvbnNlPXQuR2V0VGl2RWxpZ2liaWxpdHlSZXF1ZXN0PXQuR2V0VGl2RWxpZ2liaWxpdHlFcnJvcl9FbnVtPXZvaWQgMDtjb25zdCBpPW4oNTE1OTgpLG89cihuKDYyMTAwKSk7dmFyIGE7KGE9dC5HZXRUaXZFbGlnaWJpbGl0eUVycm9yX0VudW18fCh0LkdldFRpdkVsaWdpYmlsaXR5RXJyb3JfRW51bT17fSkpW2EuVU5TRVQ9MF09XCJVTlNFVFwiLGFbYS5VU0VSX05PVF9GT1VORD0xXT1cIlVTRVJfTk9UX0ZPVU5EXCIsYVthLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0LkdldFRpdkVsaWdpYmlsaXR5UmVxdWVzdD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLnVzZXJJZCYmaS5VVUlELmVuY29kZShlLnVzZXJJZCx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSxcIlwiIT09ZS5pbmVsaWdpYmxlU2Vzc2lvbklkJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuaW5lbGlnaWJsZVNlc3Npb25JZCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBhPXt1c2VySWQ6dm9pZCAwLGluZWxpZ2libGVTZXNzaW9uSWQ6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmEudXNlcklkPWkuVVVJRC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDI6YS5pbmVsaWdpYmxlU2Vzc2lvbklkPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt1c2VySWQ6dm9pZCAwLGluZWxpZ2libGVTZXNzaW9uSWQ6XCJcIn07cmV0dXJuIHQudXNlcklkPXZvaWQgMCE9PWUudXNlcklkJiZudWxsIT09ZS51c2VySWQ/aS5VVUlELmZyb21QYXJ0aWFsKGUudXNlcklkKTp2b2lkIDAsdC5pbmVsaWdpYmxlU2Vzc2lvbklkPWUuaW5lbGlnaWJsZVNlc3Npb25JZD8/XCJcIix0fX0sdC5HZXRUaXZFbGlnaWJpbGl0eVJlc3BvbnNlPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUucHVzaEVsaWdpYmlsaXR5JiZ0LlB1c2hFbGlnaWJpbGl0eS5lbmNvZGUoZS5wdXNoRWxpZ2liaWxpdHksbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5lbWFpbEVsaWdpYmlsaXR5JiZ0LkVtYWlsRWxpZ2liaWxpdHkuZW5jb2RlKGUuZW1haWxFbGlnaWJpbGl0eSxuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnNtc0VsaWdpYmlsaXR5JiZ0LlNtc0VsaWdpYmlsaXR5LmVuY29kZShlLnNtc0VsaWdpYmlsaXR5LG4udWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLmVycm9yJiZuLnVpbnQzMigzMikuaW50MzIoZS5lcnJvciksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBhPXtwdXNoRWxpZ2liaWxpdHk6dm9pZCAwLGVtYWlsRWxpZ2liaWxpdHk6dm9pZCAwLHNtc0VsaWdpYmlsaXR5OnZvaWQgMCxlcnJvcjowfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS5wdXNoRWxpZ2liaWxpdHk9dC5QdXNoRWxpZ2liaWxpdHkuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOmEuZW1haWxFbGlnaWJpbGl0eT10LkVtYWlsRWxpZ2liaWxpdHkuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAzOmEuc21zRWxpZ2liaWxpdHk9dC5TbXNFbGlnaWJpbGl0eS5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDQ6YS5lcnJvcj1yLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtwdXNoRWxpZ2liaWxpdHk6dm9pZCAwLGVtYWlsRWxpZ2liaWxpdHk6dm9pZCAwLHNtc0VsaWdpYmlsaXR5OnZvaWQgMCxlcnJvcjowfTtyZXR1cm4gbi5wdXNoRWxpZ2liaWxpdHk9dm9pZCAwIT09ZS5wdXNoRWxpZ2liaWxpdHkmJm51bGwhPT1lLnB1c2hFbGlnaWJpbGl0eT90LlB1c2hFbGlnaWJpbGl0eS5mcm9tUGFydGlhbChlLnB1c2hFbGlnaWJpbGl0eSk6dm9pZCAwLG4uZW1haWxFbGlnaWJpbGl0eT12b2lkIDAhPT1lLmVtYWlsRWxpZ2liaWxpdHkmJm51bGwhPT1lLmVtYWlsRWxpZ2liaWxpdHk/dC5FbWFpbEVsaWdpYmlsaXR5LmZyb21QYXJ0aWFsKGUuZW1haWxFbGlnaWJpbGl0eSk6dm9pZCAwLG4uc21zRWxpZ2liaWxpdHk9dm9pZCAwIT09ZS5zbXNFbGlnaWJpbGl0eSYmbnVsbCE9PWUuc21zRWxpZ2liaWxpdHk/dC5TbXNFbGlnaWJpbGl0eS5mcm9tUGFydGlhbChlLnNtc0VsaWdpYmlsaXR5KTp2b2lkIDAsbi5lcnJvcj1lLmVycm9yPz8wLG59fSx0LlB1c2hFbGlnaWJpbGl0eT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpOyEwPT09ZS5pc0VsaWdpYmxlJiZ0LnVpbnQzMig4KS5ib29sKGUuaXNFbGlnaWJsZSk7Zm9yKGNvbnN0IG4gb2YgZS5zZXNzaW9uSWRzKXQudWludDMyKDE4KS5zdHJpbmcobik7cmV0dXJuIHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17aXNFbGlnaWJsZTohMSxzZXNzaW9uSWRzOltdfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5pc0VsaWdpYmxlPW4uYm9vbCgpO2JyZWFrO2Nhc2UgMjppLnNlc3Npb25JZHMucHVzaChuLnN0cmluZygpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2lzRWxpZ2libGU6ITEsc2Vzc2lvbklkczpbXX07cmV0dXJuIHQuaXNFbGlnaWJsZT1lLmlzRWxpZ2libGU/PyExLHQuc2Vzc2lvbklkcz1lLnNlc3Npb25JZHM/Lm1hcCgoZT0+ZSkpfHxbXSx0fX0sdC5FbWFpbEVsaWdpYmlsaXR5PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuITA9PT1lLmlzRWxpZ2libGUmJnQudWludDMyKDgpLmJvb2woZS5pc0VsaWdpYmxlKSxcIlwiIT09ZS5lbWFpbCYmdC51aW50MzIoMTgpLnN0cmluZyhlLmVtYWlsKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2lzRWxpZ2libGU6ITEsZW1haWw6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuaXNFbGlnaWJsZT1uLmJvb2woKTticmVhaztjYXNlIDI6aS5lbWFpbD1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17aXNFbGlnaWJsZTohMSxlbWFpbDpcIlwifTtyZXR1cm4gdC5pc0VsaWdpYmxlPWUuaXNFbGlnaWJsZT8/ITEsdC5lbWFpbD1lLmVtYWlsPz9cIlwiLHR9fSx0LlNtc0VsaWdpYmlsaXR5PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuITA9PT1lLmlzRWxpZ2libGUmJnQudWludDMyKDgpLmJvb2woZS5pc0VsaWdpYmxlKSxcIlwiIT09ZS5waG9uZU51bWJlciYmdC51aW50MzIoMTgpLnN0cmluZyhlLnBob25lTnVtYmVyKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2lzRWxpZ2libGU6ITEscGhvbmVOdW1iZXI6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuaXNFbGlnaWJsZT1uLmJvb2woKTticmVhaztjYXNlIDI6aS5waG9uZU51bWJlcj1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17aXNFbGlnaWJsZTohMSxwaG9uZU51bWJlcjpcIlwifTtyZXR1cm4gdC5pc0VsaWdpYmxlPWUuaXNFbGlnaWJsZT8/ITEsdC5waG9uZU51bWJlcj1lLnBob25lTnVtYmVyPz9cIlwiLHR9fSx0LkdldFRpdkVsaWdpYmlsaXR5RXJyb3I9e2VuY29kZShlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCl9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO24uc2tpcFR5cGUoNyZlKX1yZXR1cm57fX0sZnJvbVBhcnRpYWw6ZT0+KHt9KX19LDM1NjY4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkdldFRpdlN0YXR1c0Vycm9yPXQuR2V0VGl2U3RhdHVzUmVzcG9uc2U9dC5HZXRUaXZTdGF0dXNSZXF1ZXN0PXQuR2V0VGl2U3RhdHVzRXJyb3JfRW51bT12b2lkIDA7Y29uc3QgaT1yKG4oNjIxMDApKTt2YXIgbzsobz10LkdldFRpdlN0YXR1c0Vycm9yX0VudW18fCh0LkdldFRpdlN0YXR1c0Vycm9yX0VudW09e30pKVtvLlVOU0VUPTBdPVwiVU5TRVRcIixvW28uVElWX05PVF9GT1VORD0xXT1cIlRJVl9OT1RfRk9VTkRcIixvW28uVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLHQuR2V0VGl2U3RhdHVzUmVxdWVzdD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmJyb2FkY2FzdElkJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUuYnJvYWRjYXN0SWQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17YnJvYWRjYXN0SWQ6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP28uYnJvYWRjYXN0SWQ9bi5zdHJpbmcoKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2Jyb2FkY2FzdElkOlwiXCJ9O3JldHVybiB0LmJyb2FkY2FzdElkPWUuYnJvYWRjYXN0SWQ/P1wiXCIsdH19LHQuR2V0VGl2U3RhdHVzUmVzcG9uc2U9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUuc3RhdHVzJiZ0LnVpbnQzMig4KS5pbnQzMihlLnN0YXR1cyksMCE9PWUuZXJyb3ImJnQudWludDMyKDE2KS5pbnQzMihlLmVycm9yKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e3N0YXR1czowLGVycm9yOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLnN0YXR1cz1uLmludDMyKCk7YnJlYWs7Y2FzZSAyOm8uZXJyb3I9bi5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17c3RhdHVzOjAsZXJyb3I6MH07cmV0dXJuIHQuc3RhdHVzPWUuc3RhdHVzPz8wLHQuZXJyb3I9ZS5lcnJvcj8/MCx0fX0sdC5HZXRUaXZTdGF0dXNFcnJvcj17ZW5jb2RlKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKX0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7bi5za2lwVHlwZSg3JmUpfXJldHVybnt9fSxmcm9tUGFydGlhbDplPT4oe30pfX0sMTEzMDM6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuR3JwY1dlYkVycm9yPXQuR3JwY1dlYkltcGw9dC5UaXZTZXJ2aWNlTG9nVGl2Tm90aWZpY2F0aW9uRGlzcGxheWVkRGVzYz10LlRpdlNlcnZpY2VMb2dUaXZOb3RpZmljYXRpb25SZWNlaXZlZERlc2M9dC5UaXZTZXJ2aWNlR2V0VGl2U3RhdHVzRGVzYz10LlRpdlNlcnZpY2VHZXRUaXZFbGlnaWJpbGl0eURlc2M9dC5UaXZTZXJ2aWNlSW5BcHBBcHByb3ZhbERlc2M9dC5UaXZTZXJ2aWNlVGl2RGVzYz10LlRpdlNlcnZpY2VEZXNjPXQuVGl2U2VydmljZUNsaWVudEltcGw9dC5Mb2dUaXZOb3RpZmljYXRpb25SZWNlaXZlZFJlc3BvbnNlPXQuTG9nVGl2Tm90aWZpY2F0aW9uUmVjZWl2ZWRSZXF1ZXN0PXQuTG9nVGl2Tm90aWZpY2F0aW9uRGlzcGxheWVkUmVzcG9uc2U9dC5Mb2dUaXZOb3RpZmljYXRpb25EaXNwbGF5ZWRSZXF1ZXN0PXQuUGxhdGZvcm1SZXNwb25zZURhdGE9dC5QbGF0Zm9ybVJlcXVlc3REYXRhPXQuVHJhbnNhY3Rpb25Ed2ViRGF0YT10LlRpdlJlc3BvbnNlRHdlYkRhdGE9dC5JbkFwcEFwcHJvdmFsUmVzcG9uc2U9dC5JbkFwcEFwcHJvdmFsUmVxdWVzdD10LlRyYW5zYWN0aW9uRGVzY3JpcHRpb249dC5UaXZSZXNwb25zZT10LlRpdlJlcXVlc3Q9dC5UaXZSZXF1ZXN0SW5mbz10LlRpdlJlcXVlc3REd2ViRGF0YT10LkRldmljZURhdGE9dC5Mb2NhdGlvbkRhdGE9dC5UaXZSZXNwb25zZV9UaXZSZXNwb25zZVN0YXR1cz10LkNoYW5uZWw9dC5UcmFuc2FjdGlvbj12b2lkIDA7Y29uc3QgaT1uKDMzMDM3KSxvPW4oMTUwNTkpLGE9bigzNTY2OCkscz1uKDgyMDg0KSxjPXIobig0MTU4MykpLGw9cihuKDYyMTAwKSk7ZnVuY3Rpb24gdSgpe3JldHVybntkYXRhOm5ldyBVaW50OEFycmF5fX1mdW5jdGlvbiBkKCl7cmV0dXJue2RhdGE6bmV3IFVpbnQ4QXJyYXl9fXZhciBmLHAsbTtmdW5jdGlvbiBoKGUpe3JldHVybiBlLnRvU3RyaW5nKCl9KG09dC5UcmFuc2FjdGlvbnx8KHQuVHJhbnNhY3Rpb249e30pKVttLlVOU0VUPTBdPVwiVU5TRVRcIixtW20uQUNDRVNTX1dFQl9DSEFUPTFdPVwiQUNDRVNTX1dFQl9DSEFUXCIsbVttLkFDQ09VTlRTX0xPR0lOPTJdPVwiQUNDT1VOVFNfTE9HSU5cIixtW20uV0VCX0NIQVRfTE9HSU49M109XCJXRUJfQ0hBVF9MT0dJTlwiLG1bbS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKHA9dC5DaGFubmVsfHwodC5DaGFubmVsPXt9KSlbcC5DSEFOTkVMX1VOU0VUPTBdPVwiQ0hBTk5FTF9VTlNFVFwiLHBbcC5OVUI9MV09XCJOVUJcIixwW3AuUFVTSF9OT1RJRklDQVRJT049Ml09XCJQVVNIX05PVElGSUNBVElPTlwiLHBbcC5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKGY9dC5UaXZSZXNwb25zZV9UaXZSZXNwb25zZVN0YXR1c3x8KHQuVGl2UmVzcG9uc2VfVGl2UmVzcG9uc2VTdGF0dXM9e30pKVtmLlVOU0VUPTBdPVwiVU5TRVRcIixmW2YuQVBQUk9WRUQ9MV09XCJBUFBST1ZFRFwiLGZbZi5ERU5JRUQ9Ml09XCJERU5JRURcIixmW2YuVElNRV9PVVQ9M109XCJUSU1FX09VVFwiLGZbZi5JTlZBTElEX0FQUF9WRVJTSU9OPTRdPVwiSU5WQUxJRF9BUFBfVkVSU0lPTlwiLGZbZi5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsdC5Mb2NhdGlvbkRhdGE9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bC5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5jaXR5JiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUuY2l0eSksXCJcIiE9PWUuY291bnRyeSYmdC51aW50MzIoMTgpLnN0cmluZyhlLmNvdW50cnkpLFwiXCIhPT1lLmlwQWRkcmVzcyYmdC51aW50MzIoMjYpLnN0cmluZyhlLmlwQWRkcmVzcyksMCE9PWUubG9uZ2l0dWRlJiZ0LnVpbnQzMigzMykuZG91YmxlKGUubG9uZ2l0dWRlKSwwIT09ZS5sYXRpdHVkZSYmdC51aW50MzIoNDEpLmRvdWJsZShlLmxhdGl0dWRlKSwwIT09ZS5hc24mJnQudWludDMyKDQ4KS51aW50MzIoZS5hc24pLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGwuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbC5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17Y2l0eTpcIlwiLGNvdW50cnk6XCJcIixpcEFkZHJlc3M6XCJcIixsb25naXR1ZGU6MCxsYXRpdHVkZTowLGFzbjowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5jaXR5PW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkuY291bnRyeT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMzppLmlwQWRkcmVzcz1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNDppLmxvbmdpdHVkZT1uLmRvdWJsZSgpO2JyZWFrO2Nhc2UgNTppLmxhdGl0dWRlPW4uZG91YmxlKCk7YnJlYWs7Y2FzZSA2OmkuYXNuPW4udWludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtjaXR5OlwiXCIsY291bnRyeTpcIlwiLGlwQWRkcmVzczpcIlwiLGxvbmdpdHVkZTowLGxhdGl0dWRlOjAsYXNuOjB9O3JldHVybiB0LmNpdHk9ZS5jaXR5Pz9cIlwiLHQuY291bnRyeT1lLmNvdW50cnk/P1wiXCIsdC5pcEFkZHJlc3M9ZS5pcEFkZHJlc3M/P1wiXCIsdC5sb25naXR1ZGU9ZS5sb25naXR1ZGU/PzAsdC5sYXRpdHVkZT1lLmxhdGl0dWRlPz8wLHQuYXNuPWUuYXNuPz8wLHR9fSx0LkRldmljZURhdGE9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bC5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5kZXZpY2VJZCYmdC51aW50MzIoMTApLnN0cmluZyhlLmRldmljZUlkKSxcIlwiIT09ZS51c2VyQWdlbnQmJnQudWludDMyKDE4KS5zdHJpbmcoZS51c2VyQWdlbnQpLFwiXCIhPT1lLmRldmljZSYmdC51aW50MzIoMjYpLnN0cmluZyhlLmRldmljZSksXCJcIiE9PWUub3MmJnQudWludDMyKDM0KS5zdHJpbmcoZS5vcyksXCJcIiE9PWUuYnJvd3NlciYmdC51aW50MzIoNDIpLnN0cmluZyhlLmJyb3dzZXIpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGwuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbC5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17ZGV2aWNlSWQ6XCJcIix1c2VyQWdlbnQ6XCJcIixkZXZpY2U6XCJcIixvczpcIlwiLGJyb3dzZXI6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuZGV2aWNlSWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS51c2VyQWdlbnQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDM6aS5kZXZpY2U9bi5zdHJpbmcoKTticmVhaztjYXNlIDQ6aS5vcz1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNTppLmJyb3dzZXI9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2RldmljZUlkOlwiXCIsdXNlckFnZW50OlwiXCIsZGV2aWNlOlwiXCIsb3M6XCJcIixicm93c2VyOlwiXCJ9O3JldHVybiB0LmRldmljZUlkPWUuZGV2aWNlSWQ/P1wiXCIsdC51c2VyQWdlbnQ9ZS51c2VyQWdlbnQ/P1wiXCIsdC5kZXZpY2U9ZS5kZXZpY2U/P1wiXCIsdC5vcz1lLm9zPz9cIlwiLHQuYnJvd3Nlcj1lLmJyb3dzZXI/P1wiXCIsdH19LHQuVGl2UmVxdWVzdER3ZWJEYXRhPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmwuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLmRhdGEubGVuZ3RoJiZ0LnVpbnQzMigxMCkuYnl0ZXMoZS5kYXRhKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBsLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGwuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9dSgpO2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLmRhdGE9bi5ieXRlcygpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD11KCk7cmV0dXJuIHQuZGF0YT1lLmRhdGE/P25ldyBVaW50OEFycmF5LHR9fSx0LlRpdlJlcXVlc3RJbmZvPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmwuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUuZHdlYlBsYXRmb3JtRGF0YSYmdC5UaXZSZXF1ZXN0RHdlYkRhdGEuZW5jb2RlKGUuZHdlYlBsYXRmb3JtRGF0YSxuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBsLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGwuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89e2R3ZWJQbGF0Zm9ybURhdGE6dm9pZCAwfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7ZT4+PjM9PTE/by5kd2ViUGxhdGZvcm1EYXRhPXQuVGl2UmVxdWVzdER3ZWJEYXRhLmRlY29kZShyLHIudWludDMyKCkpOnIuc2tpcFR5cGUoNyZlKX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17ZHdlYlBsYXRmb3JtRGF0YTp2b2lkIDB9O3JldHVybiBuLmR3ZWJQbGF0Zm9ybURhdGE9dm9pZCAwIT09ZS5kd2ViUGxhdGZvcm1EYXRhJiZudWxsIT09ZS5kd2ViUGxhdGZvcm1EYXRhP3QuVGl2UmVxdWVzdER3ZWJEYXRhLmZyb21QYXJ0aWFsKGUuZHdlYlBsYXRmb3JtRGF0YSk6dm9pZCAwLG59fSx0LlRpdlJlcXVlc3Q9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bC5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS50cmFuc2FjdGlvbklkJiZuLnVpbnQzMigxMCkuc3RyaW5nKGUudHJhbnNhY3Rpb25JZCksXCJcIiE9PWUudXNlcklkJiZuLnVpbnQzMigxOCkuc3RyaW5nKGUudXNlcklkKSxcIlwiIT09ZS5zZXNzaW9uSWQmJm4udWludDMyKDI2KS5zdHJpbmcoZS5zZXNzaW9uSWQpLFwiMFwiIT09ZS51bml4VGltZU9mUmVxdWVzdCYmbi51aW50MzIoMzIpLnVpbnQ2NChlLnVuaXhUaW1lT2ZSZXF1ZXN0KSxcIjBcIiE9PWUudW5peFRpbWVPZkV4cGlyYXRpb24mJm4udWludDMyKDQwKS51aW50NjQoZS51bml4VGltZU9mRXhwaXJhdGlvbiksdm9pZCAwIT09ZS5sb2NhdGlvbkRhdGEmJnQuTG9jYXRpb25EYXRhLmVuY29kZShlLmxvY2F0aW9uRGF0YSxuLnVpbnQzMig1MCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmRldmljZURhdGEmJnQuRGV2aWNlRGF0YS5lbmNvZGUoZS5kZXZpY2VEYXRhLG4udWludDMyKDU4KS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLnRyYW5zYWN0aW9uJiZuLnVpbnQzMig2NCkuaW50MzIoZS50cmFuc2FjdGlvbiksXCIwXCIhPT1lLnVuaXhDdXJyZW50U2VydmVyVGltZSYmbi51aW50MzIoNzIpLnVpbnQ2NChlLnVuaXhDdXJyZW50U2VydmVyVGltZSksXCJcIiE9PWUuYnJvYWRjYXN0SWQmJm4udWludDMyKDgyKS5zdHJpbmcoZS5icm9hZGNhc3RJZCksdm9pZCAwIT09ZS50cmFuc2FjdGlvbkRlc2NyaXB0aW9uJiZ0LlRyYW5zYWN0aW9uRGVzY3JpcHRpb24uZW5jb2RlKGUudHJhbnNhY3Rpb25EZXNjcmlwdGlvbixuLnVpbnQzMig5MCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnBsYXRmb3JtUmVxdWVzdERhdGEmJnQuUGxhdGZvcm1SZXF1ZXN0RGF0YS5lbmNvZGUoZS5wbGF0Zm9ybVJlcXVlc3REYXRhLG4udWludDMyKDk4KS5mb3JrKCkpLmxkZWxpbSgpLFwiXCIhPT1lLmNoYW5uZWxJZCYmbi51aW50MzIoMTA2KS5zdHJpbmcoZS5jaGFubmVsSWQpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGwuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbC5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17dHJhbnNhY3Rpb25JZDpcIlwiLHVzZXJJZDpcIlwiLHNlc3Npb25JZDpcIlwiLHVuaXhUaW1lT2ZSZXF1ZXN0OlwiMFwiLHVuaXhUaW1lT2ZFeHBpcmF0aW9uOlwiMFwiLGxvY2F0aW9uRGF0YTp2b2lkIDAsZGV2aWNlRGF0YTp2b2lkIDAsdHJhbnNhY3Rpb246MCx1bml4Q3VycmVudFNlcnZlclRpbWU6XCIwXCIsYnJvYWRjYXN0SWQ6XCJcIix0cmFuc2FjdGlvbkRlc2NyaXB0aW9uOnZvaWQgMCxwbGF0Zm9ybVJlcXVlc3REYXRhOnZvaWQgMCxjaGFubmVsSWQ6XCJcIn07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8udHJhbnNhY3Rpb25JZD1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMjpvLnVzZXJJZD1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMzpvLnNlc3Npb25JZD1yLnN0cmluZygpO2JyZWFrO2Nhc2UgNDpvLnVuaXhUaW1lT2ZSZXF1ZXN0PWgoci51aW50NjQoKSk7YnJlYWs7Y2FzZSA1Om8udW5peFRpbWVPZkV4cGlyYXRpb249aChyLnVpbnQ2NCgpKTticmVhaztjYXNlIDY6by5sb2NhdGlvbkRhdGE9dC5Mb2NhdGlvbkRhdGEuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSA3Om8uZGV2aWNlRGF0YT10LkRldmljZURhdGEuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSA4Om8udHJhbnNhY3Rpb249ci5pbnQzMigpO2JyZWFrO2Nhc2UgOTpvLnVuaXhDdXJyZW50U2VydmVyVGltZT1oKHIudWludDY0KCkpO2JyZWFrO2Nhc2UgMTA6by5icm9hZGNhc3RJZD1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMTE6by50cmFuc2FjdGlvbkRlc2NyaXB0aW9uPXQuVHJhbnNhY3Rpb25EZXNjcmlwdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDEyOm8ucGxhdGZvcm1SZXF1ZXN0RGF0YT10LlBsYXRmb3JtUmVxdWVzdERhdGEuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAxMzpvLmNoYW5uZWxJZD1yLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17dHJhbnNhY3Rpb25JZDpcIlwiLHVzZXJJZDpcIlwiLHNlc3Npb25JZDpcIlwiLHVuaXhUaW1lT2ZSZXF1ZXN0OlwiMFwiLHVuaXhUaW1lT2ZFeHBpcmF0aW9uOlwiMFwiLGxvY2F0aW9uRGF0YTp2b2lkIDAsZGV2aWNlRGF0YTp2b2lkIDAsdHJhbnNhY3Rpb246MCx1bml4Q3VycmVudFNlcnZlclRpbWU6XCIwXCIsYnJvYWRjYXN0SWQ6XCJcIix0cmFuc2FjdGlvbkRlc2NyaXB0aW9uOnZvaWQgMCxwbGF0Zm9ybVJlcXVlc3REYXRhOnZvaWQgMCxjaGFubmVsSWQ6XCJcIn07cmV0dXJuIG4udHJhbnNhY3Rpb25JZD1lLnRyYW5zYWN0aW9uSWQ/P1wiXCIsbi51c2VySWQ9ZS51c2VySWQ/P1wiXCIsbi5zZXNzaW9uSWQ9ZS5zZXNzaW9uSWQ/P1wiXCIsbi51bml4VGltZU9mUmVxdWVzdD1lLnVuaXhUaW1lT2ZSZXF1ZXN0Pz9cIjBcIixuLnVuaXhUaW1lT2ZFeHBpcmF0aW9uPWUudW5peFRpbWVPZkV4cGlyYXRpb24/P1wiMFwiLG4ubG9jYXRpb25EYXRhPXZvaWQgMCE9PWUubG9jYXRpb25EYXRhJiZudWxsIT09ZS5sb2NhdGlvbkRhdGE/dC5Mb2NhdGlvbkRhdGEuZnJvbVBhcnRpYWwoZS5sb2NhdGlvbkRhdGEpOnZvaWQgMCxuLmRldmljZURhdGE9dm9pZCAwIT09ZS5kZXZpY2VEYXRhJiZudWxsIT09ZS5kZXZpY2VEYXRhP3QuRGV2aWNlRGF0YS5mcm9tUGFydGlhbChlLmRldmljZURhdGEpOnZvaWQgMCxuLnRyYW5zYWN0aW9uPWUudHJhbnNhY3Rpb24/PzAsbi51bml4Q3VycmVudFNlcnZlclRpbWU9ZS51bml4Q3VycmVudFNlcnZlclRpbWU/P1wiMFwiLG4uYnJvYWRjYXN0SWQ9ZS5icm9hZGNhc3RJZD8/XCJcIixuLnRyYW5zYWN0aW9uRGVzY3JpcHRpb249dm9pZCAwIT09ZS50cmFuc2FjdGlvbkRlc2NyaXB0aW9uJiZudWxsIT09ZS50cmFuc2FjdGlvbkRlc2NyaXB0aW9uP3QuVHJhbnNhY3Rpb25EZXNjcmlwdGlvbi5mcm9tUGFydGlhbChlLnRyYW5zYWN0aW9uRGVzY3JpcHRpb24pOnZvaWQgMCxuLnBsYXRmb3JtUmVxdWVzdERhdGE9dm9pZCAwIT09ZS5wbGF0Zm9ybVJlcXVlc3REYXRhJiZudWxsIT09ZS5wbGF0Zm9ybVJlcXVlc3REYXRhP3QuUGxhdGZvcm1SZXF1ZXN0RGF0YS5mcm9tUGFydGlhbChlLnBsYXRmb3JtUmVxdWVzdERhdGEpOnZvaWQgMCxuLmNoYW5uZWxJZD1lLmNoYW5uZWxJZD8/XCJcIixufX0sdC5UaXZSZXNwb25zZT17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnRyYW5zYWN0aW9uSWQmJm4udWludDMyKDEwKS5zdHJpbmcoZS50cmFuc2FjdGlvbklkKSwwIT09ZS5zdGF0dXMmJm4udWludDMyKDE2KS5pbnQzMihlLnN0YXR1cyksdm9pZCAwIT09ZS5wbGF0Zm9ybVJlc3BvbnNlRGF0YSYmdC5QbGF0Zm9ybVJlc3BvbnNlRGF0YS5lbmNvZGUoZS5wbGF0Zm9ybVJlc3BvbnNlRGF0YSxuLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBsLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGwuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89e3RyYW5zYWN0aW9uSWQ6XCJcIixzdGF0dXM6MCxwbGF0Zm9ybVJlc3BvbnNlRGF0YTp2b2lkIDB9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLnRyYW5zYWN0aW9uSWQ9ci5zdHJpbmcoKTticmVhaztjYXNlIDI6by5zdGF0dXM9ci5pbnQzMigpO2JyZWFrO2Nhc2UgMzpvLnBsYXRmb3JtUmVzcG9uc2VEYXRhPXQuUGxhdGZvcm1SZXNwb25zZURhdGEuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXt0cmFuc2FjdGlvbklkOlwiXCIsc3RhdHVzOjAscGxhdGZvcm1SZXNwb25zZURhdGE6dm9pZCAwfTtyZXR1cm4gbi50cmFuc2FjdGlvbklkPWUudHJhbnNhY3Rpb25JZD8/XCJcIixuLnN0YXR1cz1lLnN0YXR1cz8/MCxuLnBsYXRmb3JtUmVzcG9uc2VEYXRhPXZvaWQgMCE9PWUucGxhdGZvcm1SZXNwb25zZURhdGEmJm51bGwhPT1lLnBsYXRmb3JtUmVzcG9uc2VEYXRhP3QuUGxhdGZvcm1SZXNwb25zZURhdGEuZnJvbVBhcnRpYWwoZS5wbGF0Zm9ybVJlc3BvbnNlRGF0YSk6dm9pZCAwLG59fSx0LlRyYW5zYWN0aW9uRGVzY3JpcHRpb249e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bC5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS50aXRsZSYmdC51aW50MzIoMTApLnN0cmluZyhlLnRpdGxlKSxcIlwiIT09ZS5kZXN0aW5hdGlvbiYmdC51aW50MzIoMTgpLnN0cmluZyhlLmRlc3RpbmF0aW9uKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBsLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGwuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3RpdGxlOlwiXCIsZGVzdGluYXRpb246XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkudGl0bGU9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS5kZXN0aW5hdGlvbj1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dGl0bGU6XCJcIixkZXN0aW5hdGlvbjpcIlwifTtyZXR1cm4gdC50aXRsZT1lLnRpdGxlPz9cIlwiLHQuZGVzdGluYXRpb249ZS5kZXN0aW5hdGlvbj8/XCJcIix0fX0sdC5JbkFwcEFwcHJvdmFsUmVxdWVzdD17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLnJlc3BvbnNlJiZ0LlRpdlJlc3BvbnNlLmVuY29kZShlLnJlc3BvbnNlLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLFwiXCIhPT1lLmJyb2FkY2FzdElkJiZuLnVpbnQzMigxOCkuc3RyaW5nKGUuYnJvYWRjYXN0SWQpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGwuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbC5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17cmVzcG9uc2U6dm9pZCAwLGJyb2FkY2FzdElkOlwiXCJ9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLnJlc3BvbnNlPXQuVGl2UmVzcG9uc2UuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOm8uYnJvYWRjYXN0SWQ9ci5zdHJpbmcoKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e3Jlc3BvbnNlOnZvaWQgMCxicm9hZGNhc3RJZDpcIlwifTtyZXR1cm4gbi5yZXNwb25zZT12b2lkIDAhPT1lLnJlc3BvbnNlJiZudWxsIT09ZS5yZXNwb25zZT90LlRpdlJlc3BvbnNlLmZyb21QYXJ0aWFsKGUucmVzcG9uc2UpOnZvaWQgMCxuLmJyb2FkY2FzdElkPWUuYnJvYWRjYXN0SWQ/P1wiXCIsbn19LHQuSW5BcHBBcHByb3ZhbFJlc3BvbnNlPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmwuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUucmVzcG9uc2UmJnQuVGl2UmVzcG9uc2UuZW5jb2RlKGUucmVzcG9uc2Usbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgbC5kZWZhdWx0LlJlYWRlcj9lOm5ldyBsLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXtyZXNwb25zZTp2b2lkIDB9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtlPj4+Mz09MT9vLnJlc3BvbnNlPXQuVGl2UmVzcG9uc2UuZGVjb2RlKHIsci51aW50MzIoKSk6ci5za2lwVHlwZSg3JmUpfXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtyZXNwb25zZTp2b2lkIDB9O3JldHVybiBuLnJlc3BvbnNlPXZvaWQgMCE9PWUucmVzcG9uc2UmJm51bGwhPT1lLnJlc3BvbnNlP3QuVGl2UmVzcG9uc2UuZnJvbVBhcnRpYWwoZS5yZXNwb25zZSk6dm9pZCAwLG59fSx0LlRpdlJlc3BvbnNlRHdlYkRhdGE9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bC5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUuZGF0YS5sZW5ndGgmJnQudWludDMyKDEwKS5ieXRlcyhlLmRhdGEpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGwuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbC5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT1kKCk7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2kuZGF0YT1uLmJ5dGVzKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PWQoKTtyZXR1cm4gdC5kYXRhPWUuZGF0YT8/bmV3IFVpbnQ4QXJyYXksdH19LHQuVHJhbnNhY3Rpb25Ed2ViRGF0YT17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnRyYW5zYWN0aW9uSWQmJm4udWludDMyKDEwKS5zdHJpbmcoZS50cmFuc2FjdGlvbklkKSxcIlwiIT09ZS5icm9hZGNhc3RJZCYmbi51aW50MzIoMTgpLnN0cmluZyhlLmJyb2FkY2FzdElkKSxcIlwiIT09ZS5hdXRoblNlc3Npb25JZCYmbi51aW50MzIoMjYpLnN0cmluZyhlLmF1dGhuU2Vzc2lvbklkKSx2b2lkIDAhPT1lLmR3ZWJEYXRhJiZ0LlRpdlJlc3BvbnNlRHdlYkRhdGEuZW5jb2RlKGUuZHdlYkRhdGEsbi51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgbC5kZWZhdWx0LlJlYWRlcj9lOm5ldyBsLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXt0cmFuc2FjdGlvbklkOlwiXCIsYnJvYWRjYXN0SWQ6XCJcIixhdXRoblNlc3Npb25JZDpcIlwiLGR3ZWJEYXRhOnZvaWQgMH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8udHJhbnNhY3Rpb25JZD1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMjpvLmJyb2FkY2FzdElkPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOm8uYXV0aG5TZXNzaW9uSWQ9ci5zdHJpbmcoKTticmVhaztjYXNlIDQ6by5kd2ViRGF0YT10LlRpdlJlc3BvbnNlRHdlYkRhdGEuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXt0cmFuc2FjdGlvbklkOlwiXCIsYnJvYWRjYXN0SWQ6XCJcIixhdXRoblNlc3Npb25JZDpcIlwiLGR3ZWJEYXRhOnZvaWQgMH07cmV0dXJuIG4udHJhbnNhY3Rpb25JZD1lLnRyYW5zYWN0aW9uSWQ/P1wiXCIsbi5icm9hZGNhc3RJZD1lLmJyb2FkY2FzdElkPz9cIlwiLG4uYXV0aG5TZXNzaW9uSWQ9ZS5hdXRoblNlc3Npb25JZD8/XCJcIixuLmR3ZWJEYXRhPXZvaWQgMCE9PWUuZHdlYkRhdGEmJm51bGwhPT1lLmR3ZWJEYXRhP3QuVGl2UmVzcG9uc2VEd2ViRGF0YS5mcm9tUGFydGlhbChlLmR3ZWJEYXRhKTp2b2lkIDAsbn19LHQuUGxhdGZvcm1SZXF1ZXN0RGF0YT17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiZHdlYkRhdGFcIj09PWUuZGF0YT8uJGNhc2UmJnQuVGl2UmVxdWVzdER3ZWJEYXRhLmVuY29kZShlLmRhdGEuZHdlYkRhdGEsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgbC5kZWZhdWx0LlJlYWRlcj9lOm5ldyBsLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXtkYXRhOnZvaWQgMH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO2U+Pj4zPT0xP28uZGF0YT17JGNhc2U6XCJkd2ViRGF0YVwiLGR3ZWJEYXRhOnQuVGl2UmVxdWVzdER3ZWJEYXRhLmRlY29kZShyLHIudWludDMyKCkpfTpyLnNraXBUeXBlKDcmZSl9cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e2RhdGE6dm9pZCAwfTtyZXR1cm5cImR3ZWJEYXRhXCI9PT1lLmRhdGE/LiRjYXNlJiZ2b2lkIDAhPT1lLmRhdGE/LmR3ZWJEYXRhJiZudWxsIT09ZS5kYXRhPy5kd2ViRGF0YSYmKG4uZGF0YT17JGNhc2U6XCJkd2ViRGF0YVwiLGR3ZWJEYXRhOnQuVGl2UmVxdWVzdER3ZWJEYXRhLmZyb21QYXJ0aWFsKGUuZGF0YS5kd2ViRGF0YSl9KSxufX0sdC5QbGF0Zm9ybVJlc3BvbnNlRGF0YT17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiZHdlYkRhdGFcIj09PWUuZGF0YT8uJGNhc2UmJnQuVGl2UmVzcG9uc2VEd2ViRGF0YS5lbmNvZGUoZS5kYXRhLmR3ZWJEYXRhLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGwuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbC5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17ZGF0YTp2b2lkIDB9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtlPj4+Mz09MT9vLmRhdGE9eyRjYXNlOlwiZHdlYkRhdGFcIixkd2ViRGF0YTp0LlRpdlJlc3BvbnNlRHdlYkRhdGEuZGVjb2RlKHIsci51aW50MzIoKSl9OnIuc2tpcFR5cGUoNyZlKX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17ZGF0YTp2b2lkIDB9O3JldHVyblwiZHdlYkRhdGFcIj09PWUuZGF0YT8uJGNhc2UmJnZvaWQgMCE9PWUuZGF0YT8uZHdlYkRhdGEmJm51bGwhPT1lLmRhdGE/LmR3ZWJEYXRhJiYobi5kYXRhPXskY2FzZTpcImR3ZWJEYXRhXCIsZHdlYkRhdGE6dC5UaXZSZXNwb25zZUR3ZWJEYXRhLmZyb21QYXJ0aWFsKGUuZGF0YS5kd2ViRGF0YSl9KSxufX0sdC5Mb2dUaXZOb3RpZmljYXRpb25EaXNwbGF5ZWRSZXF1ZXN0PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmwuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUudHJhbnNhY3Rpb25JZCYmdC51aW50MzIoMTApLnN0cmluZyhlLnRyYW5zYWN0aW9uSWQpLFwiXCIhPT1lLmJyb2FkY2FzdElkJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuYnJvYWRjYXN0SWQpLFwiMFwiIT09ZS5jbGllbnRQZXJjZWl2ZWRFbGFwc2VkVGltZU1zJiZ0LnVpbnQzMigyNCkuaW50NjQoZS5jbGllbnRQZXJjZWl2ZWRFbGFwc2VkVGltZU1zKSwwIT09ZS5jaGFubmVsJiZ0LnVpbnQzMigzMikuaW50MzIoZS5jaGFubmVsKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBsLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGwuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3RyYW5zYWN0aW9uSWQ6XCJcIixicm9hZGNhc3RJZDpcIlwiLGNsaWVudFBlcmNlaXZlZEVsYXBzZWRUaW1lTXM6XCIwXCIsY2hhbm5lbDowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS50cmFuc2FjdGlvbklkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkuYnJvYWRjYXN0SWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDM6aS5jbGllbnRQZXJjZWl2ZWRFbGFwc2VkVGltZU1zPWgobi5pbnQ2NCgpKTticmVhaztjYXNlIDQ6aS5jaGFubmVsPW4uaW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3RyYW5zYWN0aW9uSWQ6XCJcIixicm9hZGNhc3RJZDpcIlwiLGNsaWVudFBlcmNlaXZlZEVsYXBzZWRUaW1lTXM6XCIwXCIsY2hhbm5lbDowfTtyZXR1cm4gdC50cmFuc2FjdGlvbklkPWUudHJhbnNhY3Rpb25JZD8/XCJcIix0LmJyb2FkY2FzdElkPWUuYnJvYWRjYXN0SWQ/P1wiXCIsdC5jbGllbnRQZXJjZWl2ZWRFbGFwc2VkVGltZU1zPWUuY2xpZW50UGVyY2VpdmVkRWxhcHNlZFRpbWVNcz8/XCIwXCIsdC5jaGFubmVsPWUuY2hhbm5lbD8/MCx0fX0sdC5Mb2dUaXZOb3RpZmljYXRpb25EaXNwbGF5ZWRSZXNwb25zZT17ZW5jb2RlKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bC5kZWZhdWx0LldyaXRlci5jcmVhdGUoKX0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbC5kZWZhdWx0LlJlYWRlcj9lOm5ldyBsLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7bi5za2lwVHlwZSg3JmUpfXJldHVybnt9fSxmcm9tUGFydGlhbDplPT4oe30pfSx0LkxvZ1Rpdk5vdGlmaWNhdGlvblJlY2VpdmVkUmVxdWVzdD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnRyYW5zYWN0aW9uSWQmJnQudWludDMyKDEwKS5zdHJpbmcoZS50cmFuc2FjdGlvbklkKSxcIlwiIT09ZS5icm9hZGNhc3RJZCYmdC51aW50MzIoMTgpLnN0cmluZyhlLmJyb2FkY2FzdElkKSwwIT09ZS5jaGFubmVsJiZ0LnVpbnQzMigyNCkuaW50MzIoZS5jaGFubmVsKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBsLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGwuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3RyYW5zYWN0aW9uSWQ6XCJcIixicm9hZGNhc3RJZDpcIlwiLGNoYW5uZWw6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkudHJhbnNhY3Rpb25JZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLmJyb2FkY2FzdElkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmkuY2hhbm5lbD1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt0cmFuc2FjdGlvbklkOlwiXCIsYnJvYWRjYXN0SWQ6XCJcIixjaGFubmVsOjB9O3JldHVybiB0LnRyYW5zYWN0aW9uSWQ9ZS50cmFuc2FjdGlvbklkPz9cIlwiLHQuYnJvYWRjYXN0SWQ9ZS5icm9hZGNhc3RJZD8/XCJcIix0LmNoYW5uZWw9ZS5jaGFubmVsPz8wLHR9fSx0LkxvZ1Rpdk5vdGlmaWNhdGlvblJlY2VpdmVkUmVzcG9uc2U9e2VuY29kZShlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmwuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCl9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGwuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbC5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO24uc2tpcFR5cGUoNyZlKX1yZXR1cm57fX0sZnJvbVBhcnRpYWw6ZT0+KHt9KX0sdC5UaXZTZXJ2aWNlQ2xpZW50SW1wbD1jbGFzc3tycGM7Y29uc3RydWN0b3IoZSl7dGhpcy5ycGM9ZSx0aGlzLlRpdj10aGlzLlRpdi5iaW5kKHRoaXMpLHRoaXMuSW5BcHBBcHByb3ZhbD10aGlzLkluQXBwQXBwcm92YWwuYmluZCh0aGlzKSx0aGlzLkdldFRpdkVsaWdpYmlsaXR5PXRoaXMuR2V0VGl2RWxpZ2liaWxpdHkuYmluZCh0aGlzKSx0aGlzLkdldFRpdlN0YXR1cz10aGlzLkdldFRpdlN0YXR1cy5iaW5kKHRoaXMpLHRoaXMuTG9nVGl2Tm90aWZpY2F0aW9uUmVjZWl2ZWQ9dGhpcy5Mb2dUaXZOb3RpZmljYXRpb25SZWNlaXZlZC5iaW5kKHRoaXMpLHRoaXMuTG9nVGl2Tm90aWZpY2F0aW9uRGlzcGxheWVkPXRoaXMuTG9nVGl2Tm90aWZpY2F0aW9uRGlzcGxheWVkLmJpbmQodGhpcyl9VGl2KGUsbil7cmV0dXJuIHRoaXMucnBjLnVuYXJ5KHQuVGl2U2VydmljZVRpdkRlc2MsdC5UaXZSZXF1ZXN0LmZyb21QYXJ0aWFsKGUpLG4pfUluQXBwQXBwcm92YWwoZSxuKXtyZXR1cm4gdGhpcy5ycGMudW5hcnkodC5UaXZTZXJ2aWNlSW5BcHBBcHByb3ZhbERlc2MsdC5JbkFwcEFwcHJvdmFsUmVxdWVzdC5mcm9tUGFydGlhbChlKSxuKX1HZXRUaXZFbGlnaWJpbGl0eShlLG4pe3JldHVybiB0aGlzLnJwYy51bmFyeSh0LlRpdlNlcnZpY2VHZXRUaXZFbGlnaWJpbGl0eURlc2Msby5HZXRUaXZFbGlnaWJpbGl0eVJlcXVlc3QuZnJvbVBhcnRpYWwoZSksbil9R2V0VGl2U3RhdHVzKGUsbil7cmV0dXJuIHRoaXMucnBjLnVuYXJ5KHQuVGl2U2VydmljZUdldFRpdlN0YXR1c0Rlc2MsYS5HZXRUaXZTdGF0dXNSZXF1ZXN0LmZyb21QYXJ0aWFsKGUpLG4pfUxvZ1Rpdk5vdGlmaWNhdGlvblJlY2VpdmVkKGUsbil7cmV0dXJuIHRoaXMucnBjLnVuYXJ5KHQuVGl2U2VydmljZUxvZ1Rpdk5vdGlmaWNhdGlvblJlY2VpdmVkRGVzYyx0LkxvZ1Rpdk5vdGlmaWNhdGlvblJlY2VpdmVkUmVxdWVzdC5mcm9tUGFydGlhbChlKSxuKX1Mb2dUaXZOb3RpZmljYXRpb25EaXNwbGF5ZWQoZSxuKXtyZXR1cm4gdGhpcy5ycGMudW5hcnkodC5UaXZTZXJ2aWNlTG9nVGl2Tm90aWZpY2F0aW9uRGlzcGxheWVkRGVzYyx0LkxvZ1Rpdk5vdGlmaWNhdGlvbkRpc3BsYXllZFJlcXVlc3QuZnJvbVBhcnRpYWwoZSksbil9fSx0LlRpdlNlcnZpY2VEZXNjPXtzZXJ2aWNlTmFtZTpcImNvbS5zbmFwY2hhdC5hdXRoLnByb3RvLnRpdnMuVGl2U2VydmljZVwifSx0LlRpdlNlcnZpY2VUaXZEZXNjPXttZXRob2ROYW1lOlwiVGl2XCIsc2VydmljZTp0LlRpdlNlcnZpY2VEZXNjLHJlcXVlc3RTdHJlYW06ITEscmVzcG9uc2VTdHJlYW06ITEscmVxdWVzdFR5cGU6e3NlcmlhbGl6ZUJpbmFyeSgpe3JldHVybiB0LlRpdlJlcXVlc3QuZW5jb2RlKHRoaXMpLmZpbmlzaCgpfX0scmVzcG9uc2VUeXBlOntkZXNlcmlhbGl6ZUJpbmFyeTplPT4oey4uLnQuVGl2UmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fSx0LlRpdlNlcnZpY2VJbkFwcEFwcHJvdmFsRGVzYz17bWV0aG9kTmFtZTpcIkluQXBwQXBwcm92YWxcIixzZXJ2aWNlOnQuVGl2U2VydmljZURlc2MscmVxdWVzdFN0cmVhbTohMSxyZXNwb25zZVN0cmVhbTohMSxyZXF1ZXN0VHlwZTp7c2VyaWFsaXplQmluYXJ5KCl7cmV0dXJuIHQuSW5BcHBBcHByb3ZhbFJlcXVlc3QuZW5jb2RlKHRoaXMpLmZpbmlzaCgpfX0scmVzcG9uc2VUeXBlOntkZXNlcmlhbGl6ZUJpbmFyeTplPT4oey4uLnQuSW5BcHBBcHByb3ZhbFJlc3BvbnNlLmRlY29kZShlKSx0b09iamVjdCgpe3JldHVybiB0aGlzfX0pfX0sdC5UaXZTZXJ2aWNlR2V0VGl2RWxpZ2liaWxpdHlEZXNjPXttZXRob2ROYW1lOlwiR2V0VGl2RWxpZ2liaWxpdHlcIixzZXJ2aWNlOnQuVGl2U2VydmljZURlc2MscmVxdWVzdFN0cmVhbTohMSxyZXNwb25zZVN0cmVhbTohMSxyZXF1ZXN0VHlwZTp7c2VyaWFsaXplQmluYXJ5KCl7cmV0dXJuIG8uR2V0VGl2RWxpZ2liaWxpdHlSZXF1ZXN0LmVuY29kZSh0aGlzKS5maW5pc2goKX19LHJlc3BvbnNlVHlwZTp7ZGVzZXJpYWxpemVCaW5hcnk6ZT0+KHsuLi5vLkdldFRpdkVsaWdpYmlsaXR5UmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fSx0LlRpdlNlcnZpY2VHZXRUaXZTdGF0dXNEZXNjPXttZXRob2ROYW1lOlwiR2V0VGl2U3RhdHVzXCIsc2VydmljZTp0LlRpdlNlcnZpY2VEZXNjLHJlcXVlc3RTdHJlYW06ITEscmVzcG9uc2VTdHJlYW06ITEscmVxdWVzdFR5cGU6e3NlcmlhbGl6ZUJpbmFyeSgpe3JldHVybiBhLkdldFRpdlN0YXR1c1JlcXVlc3QuZW5jb2RlKHRoaXMpLmZpbmlzaCgpfX0scmVzcG9uc2VUeXBlOntkZXNlcmlhbGl6ZUJpbmFyeTplPT4oey4uLmEuR2V0VGl2U3RhdHVzUmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fSx0LlRpdlNlcnZpY2VMb2dUaXZOb3RpZmljYXRpb25SZWNlaXZlZERlc2M9e21ldGhvZE5hbWU6XCJMb2dUaXZOb3RpZmljYXRpb25SZWNlaXZlZFwiLHNlcnZpY2U6dC5UaXZTZXJ2aWNlRGVzYyxyZXF1ZXN0U3RyZWFtOiExLHJlc3BvbnNlU3RyZWFtOiExLHJlcXVlc3RUeXBlOntzZXJpYWxpemVCaW5hcnkoKXtyZXR1cm4gdC5Mb2dUaXZOb3RpZmljYXRpb25SZWNlaXZlZFJlcXVlc3QuZW5jb2RlKHRoaXMpLmZpbmlzaCgpfX0scmVzcG9uc2VUeXBlOntkZXNlcmlhbGl6ZUJpbmFyeTplPT4oey4uLnQuTG9nVGl2Tm90aWZpY2F0aW9uUmVjZWl2ZWRSZXNwb25zZS5kZWNvZGUoZSksdG9PYmplY3QoKXtyZXR1cm4gdGhpc319KX19LHQuVGl2U2VydmljZUxvZ1Rpdk5vdGlmaWNhdGlvbkRpc3BsYXllZERlc2M9e21ldGhvZE5hbWU6XCJMb2dUaXZOb3RpZmljYXRpb25EaXNwbGF5ZWRcIixzZXJ2aWNlOnQuVGl2U2VydmljZURlc2MscmVxdWVzdFN0cmVhbTohMSxyZXNwb25zZVN0cmVhbTohMSxyZXF1ZXN0VHlwZTp7c2VyaWFsaXplQmluYXJ5KCl7cmV0dXJuIHQuTG9nVGl2Tm90aWZpY2F0aW9uRGlzcGxheWVkUmVxdWVzdC5lbmNvZGUodGhpcykuZmluaXNoKCl9fSxyZXNwb25zZVR5cGU6e2Rlc2VyaWFsaXplQmluYXJ5OmU9Pih7Li4udC5Mb2dUaXZOb3RpZmljYXRpb25EaXNwbGF5ZWRSZXNwb25zZS5kZWNvZGUoZSksdG9PYmplY3QoKXtyZXR1cm4gdGhpc319KX19LHQuR3JwY1dlYkltcGw9Y2xhc3N7aG9zdDtvcHRpb25zO2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5ob3N0PWUsdGhpcy5vcHRpb25zPXR9dW5hcnkoZSx0LG4pe2NvbnN0IHI9ey4uLnQsLi4uZS5yZXF1ZXN0VHlwZX0sbz1uJiZ0aGlzLm9wdGlvbnMubWV0YWRhdGE/bmV3IHMuQnJvd3NlckhlYWRlcnMoey4uLnRoaXMub3B0aW9ucz8ubWV0YWRhdGEuaGVhZGVyc01hcCwuLi5uPy5oZWFkZXJzTWFwfSk6bnx8dGhpcy5vcHRpb25zLm1ldGFkYXRhO3JldHVybiBuZXcgUHJvbWlzZSgoKHQsbik9PntpLmdycGMudW5hcnkoZSx7cmVxdWVzdDpyLGhvc3Q6dGhpcy5ob3N0LG1ldGFkYXRhOm8sdHJhbnNwb3J0OnRoaXMub3B0aW9ucy50cmFuc3BvcnQsZGVidWc6dGhpcy5vcHRpb25zLmRlYnVnLG9uRW5kOmZ1bmN0aW9uKGUpe2lmKGUuc3RhdHVzPT09aS5ncnBjLkNvZGUuT0spdChlLm1lc3NhZ2UpO2Vsc2V7Y29uc3QgdD1uZXcgdihlLnN0YXR1c01lc3NhZ2UsZS5zdGF0dXMsZS50cmFpbGVycyk7bih0KX19fSl9KSl9fSxsLmRlZmF1bHQudXRpbC5Mb25nIT09Yy5kZWZhdWx0JiYobC5kZWZhdWx0LnV0aWwuTG9uZz1jLmRlZmF1bHQsbC5kZWZhdWx0LmNvbmZpZ3VyZSgpKTtjbGFzcyB2IGV4dGVuZHMgRXJyb3J7Y29kZTttZXRhZGF0YTtjb25zdHJ1Y3RvcihlLHQsbil7c3VwZXIoZSksdGhpcy5jb2RlPXQsdGhpcy5tZXRhZGF0YT1ufX10LkdycGNXZWJFcnJvcj12fSwxMzAwMjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Db21wYWN0QXZhdGFySWQ9dm9pZCAwO2NvbnN0IGk9cihuKDQxNTgzKSksbz1yKG4oNjIxMDApKTt0LkNvbXBhY3RBdmF0YXJJZD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiMFwiIT09ZS5pZCYmdC51aW50MzIoOCkudWludDY0KGUuaWQpLDAhPT1lLnZlcnNpb24mJnQudWludDMyKDE2KS51aW50MzIoZS52ZXJzaW9uKSwwIT09ZS5zdHlsZSYmdC51aW50MzIoMjQpLmludDMyKGUuc3R5bGUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17aWQ6XCIwXCIsdmVyc2lvbjowLHN0eWxlOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmlkPW4udWludDY0KCkudG9TdHJpbmcoKTticmVhaztjYXNlIDI6aS52ZXJzaW9uPW4udWludDMyKCk7YnJlYWs7Y2FzZSAzOmkuc3R5bGU9bi5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17aWQ6XCIwXCIsdmVyc2lvbjowLHN0eWxlOjB9O3JldHVybiB0LmlkPWUuaWQ/P1wiMFwiLHQudmVyc2lvbj1lLnZlcnNpb24/PzAsdC5zdHlsZT1lLnN0eWxlPz8wLHR9fSxvLmRlZmF1bHQudXRpbC5Mb25nIT09aS5kZWZhdWx0JiYoby5kZWZhdWx0LnV0aWwuTG9uZz1pLmRlZmF1bHQsby5kZWZhdWx0LmNvbmZpZ3VyZSgpKX0sNTE5MjQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQXBpVmVyc2lvbj12b2lkIDA7Y29uc3QgaT1yKG4oNjIxMDApKTt0LkFwaVZlcnNpb249e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUubWFqb3ImJnQudWludDMyKDgpLmludDMyKGUubWFqb3IpLDAhPT1lLm1pbm9yJiZ0LnVpbnQzMigxNikuaW50MzIoZS5taW5vciksMCE9PWUucGF0Y2gmJnQudWludDMyKDI0KS5pbnQzMihlLnBhdGNoKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e21ham9yOjAsbWlub3I6MCxwYXRjaDowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5tYWpvcj1uLmludDMyKCk7YnJlYWs7Y2FzZSAyOm8ubWlub3I9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMzpvLnBhdGNoPW4uaW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e21ham9yOjAsbWlub3I6MCxwYXRjaDowfTtyZXR1cm4gdC5tYWpvcj1lLm1ham9yPz8wLHQubWlub3I9ZS5taW5vcj8/MCx0LnBhdGNoPWUucGF0Y2g/PzAsdH19fSw3NjkxNDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DYW1lb0JvbHRDb250ZW50T2JqZWN0PXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO2Z1bmN0aW9uIG8oKXtyZXR1cm57Y29udGVudE9iamVjdDpuZXcgVWludDhBcnJheX19dC5DYW1lb0JvbHRDb250ZW50T2JqZWN0PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLmNvbnRlbnRPYmplY3QubGVuZ3RoJiZ0LnVpbnQzMigxMCkuYnl0ZXMoZS5jb250ZW50T2JqZWN0KSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGE9bygpO2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9hLmNvbnRlbnRPYmplY3Q9bi5ieXRlcygpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD1vKCk7cmV0dXJuIHQuY29udGVudE9iamVjdD1lLmNvbnRlbnRPYmplY3Q/P25ldyBVaW50OEFycmF5LHR9fX0sNzMzMjA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2FtZW9TdGFnaW5nQXNzZXRfVGFyZ2V0TGVuc2VzRW50cnk9dC5DYW1lb1N0YWdpbmdBc3NldF9DYW1lb1N0YWdpbmdBc3NldEl0ZW09dC5DYW1lb1N0YWdpbmdBc3NldD12b2lkIDA7Y29uc3QgaT1uKDk1MjE5KSxvPXIobig2MjEwMCkpO3QuQ2FtZW9TdGFnaW5nQXNzZXQ9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgciBvZiBlLmJ1bmRsZUl0ZW1zKXQuQ2FtZW9TdGFnaW5nQXNzZXRfQ2FtZW9TdGFnaW5nQXNzZXRJdGVtLmVuY29kZShyLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO24udWludDMyKDE4KS5mb3JrKCk7Zm9yKGNvbnN0IHQgb2YgZS5nZW5kZXJzKW4uaW50MzIodCk7cmV0dXJuIG4ubGRlbGltKCksXCJzM0dlbmVyYXRlZEFzc2V0UHJldmlld1BhdGhcIj09PWUucHJldmlld0RhdGFSZWZlcmVuY2U/LiRjYXNlJiZuLnVpbnQzMigyNikuc3RyaW5nKGUucHJldmlld0RhdGFSZWZlcmVuY2UuczNHZW5lcmF0ZWRBc3NldFByZXZpZXdQYXRoKSxcImdlbmVyYXRlZEFzc2V0UHJldmlld0NvbnRlbnRVcmxcIj09PWUucHJldmlld0RhdGFSZWZlcmVuY2U/LiRjYXNlJiZuLnVpbnQzMigzNCkuc3RyaW5nKGUucHJldmlld0RhdGFSZWZlcmVuY2UuZ2VuZXJhdGVkQXNzZXRQcmV2aWV3Q29udGVudFVybCksT2JqZWN0LmVudHJpZXMoZS50YXJnZXRMZW5zZXMpLmZvckVhY2goKGU9PntsZXRbcixpXT1lO3QuQ2FtZW9TdGFnaW5nQXNzZXRfVGFyZ2V0TGVuc2VzRW50cnkuZW5jb2RlKHtrZXk6cix2YWx1ZTppfSxuLnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKX0pKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGE9e2J1bmRsZUl0ZW1zOltdLGdlbmRlcnM6W10scHJldmlld0RhdGFSZWZlcmVuY2U6dm9pZCAwLHRhcmdldExlbnNlczp7fX07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmEuYnVuZGxlSXRlbXMucHVzaCh0LkNhbWVvU3RhZ2luZ0Fzc2V0X0NhbWVvU3RhZ2luZ0Fzc2V0SXRlbS5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAyOmlmKDI9PSg3JmUpKXtjb25zdCBlPXIudWludDMyKCkrci5wb3M7Zm9yKDtyLnBvczxlOylhLmdlbmRlcnMucHVzaChyLmludDMyKCkpfWVsc2UgYS5nZW5kZXJzLnB1c2goci5pbnQzMigpKTticmVhaztjYXNlIDM6YS5wcmV2aWV3RGF0YVJlZmVyZW5jZT17JGNhc2U6XCJzM0dlbmVyYXRlZEFzc2V0UHJldmlld1BhdGhcIixzM0dlbmVyYXRlZEFzc2V0UHJldmlld1BhdGg6ci5zdHJpbmcoKX07YnJlYWs7Y2FzZSA0OmEucHJldmlld0RhdGFSZWZlcmVuY2U9eyRjYXNlOlwiZ2VuZXJhdGVkQXNzZXRQcmV2aWV3Q29udGVudFVybFwiLGdlbmVyYXRlZEFzc2V0UHJldmlld0NvbnRlbnRVcmw6ci5zdHJpbmcoKX07YnJlYWs7Y2FzZSA1OmNvbnN0IG49dC5DYW1lb1N0YWdpbmdBc3NldF9UYXJnZXRMZW5zZXNFbnRyeS5kZWNvZGUocixyLnVpbnQzMigpKTt2b2lkIDAhPT1uLnZhbHVlJiYoYS50YXJnZXRMZW5zZXNbbi5rZXldPW4udmFsdWUpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17YnVuZGxlSXRlbXM6W10sZ2VuZGVyczpbXSxwcmV2aWV3RGF0YVJlZmVyZW5jZTp2b2lkIDAsdGFyZ2V0TGVuc2VzOnt9fTtyZXR1cm4gbi5idW5kbGVJdGVtcz1lLmJ1bmRsZUl0ZW1zPy5tYXAoKGU9PnQuQ2FtZW9TdGFnaW5nQXNzZXRfQ2FtZW9TdGFnaW5nQXNzZXRJdGVtLmZyb21QYXJ0aWFsKGUpKSl8fFtdLG4uZ2VuZGVycz1lLmdlbmRlcnM/Lm1hcCgoZT0+ZSkpfHxbXSxcInMzR2VuZXJhdGVkQXNzZXRQcmV2aWV3UGF0aFwiPT09ZS5wcmV2aWV3RGF0YVJlZmVyZW5jZT8uJGNhc2UmJnZvaWQgMCE9PWUucHJldmlld0RhdGFSZWZlcmVuY2U/LnMzR2VuZXJhdGVkQXNzZXRQcmV2aWV3UGF0aCYmbnVsbCE9PWUucHJldmlld0RhdGFSZWZlcmVuY2U/LnMzR2VuZXJhdGVkQXNzZXRQcmV2aWV3UGF0aCYmKG4ucHJldmlld0RhdGFSZWZlcmVuY2U9eyRjYXNlOlwiczNHZW5lcmF0ZWRBc3NldFByZXZpZXdQYXRoXCIsczNHZW5lcmF0ZWRBc3NldFByZXZpZXdQYXRoOmUucHJldmlld0RhdGFSZWZlcmVuY2UuczNHZW5lcmF0ZWRBc3NldFByZXZpZXdQYXRofSksXCJnZW5lcmF0ZWRBc3NldFByZXZpZXdDb250ZW50VXJsXCI9PT1lLnByZXZpZXdEYXRhUmVmZXJlbmNlPy4kY2FzZSYmdm9pZCAwIT09ZS5wcmV2aWV3RGF0YVJlZmVyZW5jZT8uZ2VuZXJhdGVkQXNzZXRQcmV2aWV3Q29udGVudFVybCYmbnVsbCE9PWUucHJldmlld0RhdGFSZWZlcmVuY2U/LmdlbmVyYXRlZEFzc2V0UHJldmlld0NvbnRlbnRVcmwmJihuLnByZXZpZXdEYXRhUmVmZXJlbmNlPXskY2FzZTpcImdlbmVyYXRlZEFzc2V0UHJldmlld0NvbnRlbnRVcmxcIixnZW5lcmF0ZWRBc3NldFByZXZpZXdDb250ZW50VXJsOmUucHJldmlld0RhdGFSZWZlcmVuY2UuZ2VuZXJhdGVkQXNzZXRQcmV2aWV3Q29udGVudFVybH0pLG4udGFyZ2V0TGVuc2VzPU9iamVjdC5lbnRyaWVzKGUudGFyZ2V0TGVuc2VzPz97fSkucmVkdWNlKCgoZSx0KT0+e2xldFtuLHJdPXQ7cmV0dXJuIHZvaWQgMCE9PXImJihlW051bWJlcihuKV09aS5MaXN0T2ZMZW5zZXMuZnJvbVBhcnRpYWwocikpLGV9KSx7fSksbn19LHQuQ2FtZW9TdGFnaW5nQXNzZXRfQ2FtZW9TdGFnaW5nQXNzZXRJdGVtPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLmNvbnRlbnRUeXBlJiZ0LnVpbnQzMig4KS5pbnQzMihlLmNvbnRlbnRUeXBlKSxcInMzRmlsZVBhdGhcIj09PWUuZGF0YVJlZmVyZW5jZT8uJGNhc2UmJnQudWludDMyKDE4KS5zdHJpbmcoZS5kYXRhUmVmZXJlbmNlLnMzRmlsZVBhdGgpLFwiY29udGVudFVybFwiPT09ZS5kYXRhUmVmZXJlbmNlPy4kY2FzZSYmdC51aW50MzIoMjYpLnN0cmluZyhlLmRhdGFSZWZlcmVuY2UuY29udGVudFVybCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtjb250ZW50VHlwZTowLGRhdGFSZWZlcmVuY2U6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5jb250ZW50VHlwZT1uLmludDMyKCk7YnJlYWs7Y2FzZSAyOmkuZGF0YVJlZmVyZW5jZT17JGNhc2U6XCJzM0ZpbGVQYXRoXCIsczNGaWxlUGF0aDpuLnN0cmluZygpfTticmVhaztjYXNlIDM6aS5kYXRhUmVmZXJlbmNlPXskY2FzZTpcImNvbnRlbnRVcmxcIixjb250ZW50VXJsOm4uc3RyaW5nKCl9O2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17Y29udGVudFR5cGU6MCxkYXRhUmVmZXJlbmNlOnZvaWQgMH07cmV0dXJuIHQuY29udGVudFR5cGU9ZS5jb250ZW50VHlwZT8/MCxcInMzRmlsZVBhdGhcIj09PWUuZGF0YVJlZmVyZW5jZT8uJGNhc2UmJnZvaWQgMCE9PWUuZGF0YVJlZmVyZW5jZT8uczNGaWxlUGF0aCYmbnVsbCE9PWUuZGF0YVJlZmVyZW5jZT8uczNGaWxlUGF0aCYmKHQuZGF0YVJlZmVyZW5jZT17JGNhc2U6XCJzM0ZpbGVQYXRoXCIsczNGaWxlUGF0aDplLmRhdGFSZWZlcmVuY2UuczNGaWxlUGF0aH0pLFwiY29udGVudFVybFwiPT09ZS5kYXRhUmVmZXJlbmNlPy4kY2FzZSYmdm9pZCAwIT09ZS5kYXRhUmVmZXJlbmNlPy5jb250ZW50VXJsJiZudWxsIT09ZS5kYXRhUmVmZXJlbmNlPy5jb250ZW50VXJsJiYodC5kYXRhUmVmZXJlbmNlPXskY2FzZTpcImNvbnRlbnRVcmxcIixjb250ZW50VXJsOmUuZGF0YVJlZmVyZW5jZS5jb250ZW50VXJsfSksdH19LHQuQ2FtZW9TdGFnaW5nQXNzZXRfVGFyZ2V0TGVuc2VzRW50cnk9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUua2V5JiZ0LnVpbnQzMig4KS5pbnQzMihlLmtleSksdm9pZCAwIT09ZS52YWx1ZSYmaS5MaXN0T2ZMZW5zZXMuZW5jb2RlKGUudmFsdWUsdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBhPXtrZXk6MCx2YWx1ZTp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLmtleT1uLmludDMyKCk7YnJlYWs7Y2FzZSAyOmEudmFsdWU9aS5MaXN0T2ZMZW5zZXMuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtrZXk6MCx2YWx1ZTp2b2lkIDB9O3JldHVybiB0LmtleT1lLmtleT8/MCx0LnZhbHVlPXZvaWQgMCE9PWUudmFsdWUmJm51bGwhPT1lLnZhbHVlP2kuTGlzdE9mTGVuc2VzLmZyb21QYXJ0aWFsKGUudmFsdWUpOnZvaWQgMCx0fX19LDgzNjU5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNoYXRDYW1lb1Jlc291cmNlPXZvaWQgMDtjb25zdCBpPW4oMTA2NzYpLG89cihuKDYyMTAwKSk7dC5DaGF0Q2FtZW9SZXNvdXJjZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnVybCYmdC51aW50MzIoMTApLnN0cmluZyhlLnVybCksMCE9PWUuZHVyYXRpb24mJnQudWludDMyKDIxKS5mbG9hdChlLmR1cmF0aW9uKSx2b2lkIDAhPT1lLnJlc29sdXRpb24mJmkuUmVzb2x1dGlvbi5lbmNvZGUoZS5yZXNvbHV0aW9uLHQudWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgYT17dXJsOlwiXCIsZHVyYXRpb246MCxyZXNvbHV0aW9uOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmEudXJsPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmEuZHVyYXRpb249bi5mbG9hdCgpO2JyZWFrO2Nhc2UgMzphLnJlc29sdXRpb249aS5SZXNvbHV0aW9uLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dXJsOlwiXCIsZHVyYXRpb246MCxyZXNvbHV0aW9uOnZvaWQgMH07cmV0dXJuIHQudXJsPWUudXJsPz9cIlwiLHQuZHVyYXRpb249ZS5kdXJhdGlvbj8/MCx0LnJlc29sdXRpb249dm9pZCAwIT09ZS5yZXNvbHV0aW9uJiZudWxsIT09ZS5yZXNvbHV0aW9uP2kuUmVzb2x1dGlvbi5mcm9tUGFydGlhbChlLnJlc29sdXRpb24pOnZvaWQgMCx0fX19LDYwOTA1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNoYXRDYW1lb1Jlc291cmNlQ29sbGVjdGlvbl9JdGVtc0VudHJ5PXQuQ2hhdENhbWVvUmVzb3VyY2VDb2xsZWN0aW9uX0N1c3RvbVRleHRQYXJhbWV0ZXJzRW50cnk9dC5DaGF0Q2FtZW9SZXNvdXJjZUNvbGxlY3Rpb249dm9pZCAwO2NvbnN0IGk9bigxNjI3Niksbz1uKDgzNjU5KSxhPW4oMzgxNTkpLHM9cihuKDYyMTAwKSk7dC5DaGF0Q2FtZW9SZXNvdXJjZUNvbGxlY3Rpb249e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoZS5jdXN0b21UZXh0UGFyYW1ldGVycykuZm9yRWFjaCgoZT0+e2xldFtyLGldPWU7dC5DaGF0Q2FtZW9SZXNvdXJjZUNvbGxlY3Rpb25fQ3VzdG9tVGV4dFBhcmFtZXRlcnNFbnRyeS5lbmNvZGUoe2tleTpyLHZhbHVlOml9LG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpfSkpLE9iamVjdC5lbnRyaWVzKGUuaXRlbXMpLmZvckVhY2goKGU9PntsZXRbcixpXT1lO3QuQ2hhdENhbWVvUmVzb3VyY2VDb2xsZWN0aW9uX0l0ZW1zRW50cnkuZW5jb2RlKHtrZXk6cix2YWx1ZTppfSxuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKX0pKSx2b2lkIDAhPT1lLnF1aWNrSWNvblJlc291cmNlJiZhLlF1aWNrSWNvblJlc291cmNlLmVuY29kZShlLnF1aWNrSWNvblJlc291cmNlLG4udWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17Y3VzdG9tVGV4dFBhcmFtZXRlcnM6e30saXRlbXM6e30scXVpY2tJY29uUmVzb3VyY2U6dm9pZCAwfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6Y29uc3Qgbj10LkNoYXRDYW1lb1Jlc291cmNlQ29sbGVjdGlvbl9DdXN0b21UZXh0UGFyYW1ldGVyc0VudHJ5LmRlY29kZShyLHIudWludDMyKCkpO3ZvaWQgMCE9PW4udmFsdWUmJihvLmN1c3RvbVRleHRQYXJhbWV0ZXJzW24ua2V5XT1uLnZhbHVlKTticmVhaztjYXNlIDI6Y29uc3QgaT10LkNoYXRDYW1lb1Jlc291cmNlQ29sbGVjdGlvbl9JdGVtc0VudHJ5LmRlY29kZShyLHIudWludDMyKCkpO3ZvaWQgMCE9PWkudmFsdWUmJihvLml0ZW1zW2kua2V5XT1pLnZhbHVlKTticmVhaztjYXNlIDM6by5xdWlja0ljb25SZXNvdXJjZT1hLlF1aWNrSWNvblJlc291cmNlLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17Y3VzdG9tVGV4dFBhcmFtZXRlcnM6e30saXRlbXM6e30scXVpY2tJY29uUmVzb3VyY2U6dm9pZCAwfTtyZXR1cm4gdC5jdXN0b21UZXh0UGFyYW1ldGVycz1PYmplY3QuZW50cmllcyhlLmN1c3RvbVRleHRQYXJhbWV0ZXJzPz97fSkucmVkdWNlKCgoZSx0KT0+e2xldFtuLHJdPXQ7cmV0dXJuIHZvaWQgMCE9PXImJihlW25dPWkuQ3VzdG9tVGV4dFBhcmFtZXRlcnMuZnJvbVBhcnRpYWwocikpLGV9KSx7fSksdC5pdGVtcz1PYmplY3QuZW50cmllcyhlLml0ZW1zPz97fSkucmVkdWNlKCgoZSx0KT0+e2xldFtuLHJdPXQ7cmV0dXJuIHZvaWQgMCE9PXImJihlW25dPW8uQ2hhdENhbWVvUmVzb3VyY2UuZnJvbVBhcnRpYWwocikpLGV9KSx7fSksdC5xdWlja0ljb25SZXNvdXJjZT12b2lkIDAhPT1lLnF1aWNrSWNvblJlc291cmNlJiZudWxsIT09ZS5xdWlja0ljb25SZXNvdXJjZT9hLlF1aWNrSWNvblJlc291cmNlLmZyb21QYXJ0aWFsKGUucXVpY2tJY29uUmVzb3VyY2UpOnZvaWQgMCx0fX0sdC5DaGF0Q2FtZW9SZXNvdXJjZUNvbGxlY3Rpb25fQ3VzdG9tVGV4dFBhcmFtZXRlcnNFbnRyeT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmtleSYmdC51aW50MzIoMTApLnN0cmluZyhlLmtleSksdm9pZCAwIT09ZS52YWx1ZSYmaS5DdXN0b21UZXh0UGFyYW1ldGVycy5lbmNvZGUoZS52YWx1ZSx0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e2tleTpcIlwiLHZhbHVlOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8ua2V5PW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOm8udmFsdWU9aS5DdXN0b21UZXh0UGFyYW1ldGVycy5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2tleTpcIlwiLHZhbHVlOnZvaWQgMH07cmV0dXJuIHQua2V5PWUua2V5Pz9cIlwiLHQudmFsdWU9dm9pZCAwIT09ZS52YWx1ZSYmbnVsbCE9PWUudmFsdWU/aS5DdXN0b21UZXh0UGFyYW1ldGVycy5mcm9tUGFydGlhbChlLnZhbHVlKTp2b2lkIDAsdH19LHQuQ2hhdENhbWVvUmVzb3VyY2VDb2xsZWN0aW9uX0l0ZW1zRW50cnk9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5rZXkmJnQudWludDMyKDEwKS5zdHJpbmcoZS5rZXkpLHZvaWQgMCE9PWUudmFsdWUmJm8uQ2hhdENhbWVvUmVzb3VyY2UuZW5jb2RlKGUudmFsdWUsdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtrZXk6XCJcIix2YWx1ZTp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmtleT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLnZhbHVlPW8uQ2hhdENhbWVvUmVzb3VyY2UuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtrZXk6XCJcIix2YWx1ZTp2b2lkIDB9O3JldHVybiB0LmtleT1lLmtleT8/XCJcIix0LnZhbHVlPXZvaWQgMCE9PWUudmFsdWUmJm51bGwhPT1lLnZhbHVlP28uQ2hhdENhbWVvUmVzb3VyY2UuZnJvbVBhcnRpYWwoZS52YWx1ZSk6dm9pZCAwLHR9fX0sMTYyNzY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ3VzdG9tVGV4dFBhcmFtZXRlcnNfVGV4dEFyZWE9dC5DdXN0b21UZXh0UGFyYW1ldGVyc19Gb250UmVzb3VyY2U9dC5DdXN0b21UZXh0UGFyYW1ldGVycz12b2lkIDA7Y29uc3QgaT1yKG4oNjIxMDApKTt0LkN1c3RvbVRleHRQYXJhbWV0ZXJzPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7Zm9yKGNvbnN0IHIgb2YgZS5mb250UmVzb3VyY2VzKXQuQ3VzdG9tVGV4dFBhcmFtZXRlcnNfRm9udFJlc291cmNlLmVuY29kZShyLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpOyEwPT09ZS5jYXBpdGFsaXplJiZuLnVpbnQzMigxNikuYm9vbChlLmNhcGl0YWxpemUpLFwiXCIhPT1lLmRlZmF1bHRUZXh0JiZuLnVpbnQzMigyNikuc3RyaW5nKGUuZGVmYXVsdFRleHQpLCEwPT09ZS5kZWZhdWx0VGV4dE9ubHkmJm4udWludDMyKDMyKS5ib29sKGUuZGVmYXVsdFRleHRPbmx5KSwhMD09PWUuaXNVbml2ZXJzYWwmJm4udWludDMyKDQwKS5ib29sKGUuaXNVbml2ZXJzYWwpO2Zvcihjb25zdCByIG9mIGUudGV4dEFyZWFzKXQuQ3VzdG9tVGV4dFBhcmFtZXRlcnNfVGV4dEFyZWEuZW5jb2RlKHIsbi51aW50MzIoNTApLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgbz12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3QgYT17Zm9udFJlc291cmNlczpbXSxjYXBpdGFsaXplOiExLGRlZmF1bHRUZXh0OlwiXCIsZGVmYXVsdFRleHRPbmx5OiExLGlzVW5pdmVyc2FsOiExLHRleHRBcmVhczpbXX07Zm9yKDtyLnBvczxvOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmEuZm9udFJlc291cmNlcy5wdXNoKHQuQ3VzdG9tVGV4dFBhcmFtZXRlcnNfRm9udFJlc291cmNlLmRlY29kZShyLHIudWludDMyKCkpKTticmVhaztjYXNlIDI6YS5jYXBpdGFsaXplPXIuYm9vbCgpO2JyZWFrO2Nhc2UgMzphLmRlZmF1bHRUZXh0PXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSA0OmEuZGVmYXVsdFRleHRPbmx5PXIuYm9vbCgpO2JyZWFrO2Nhc2UgNTphLmlzVW5pdmVyc2FsPXIuYm9vbCgpO2JyZWFrO2Nhc2UgNjphLnRleHRBcmVhcy5wdXNoKHQuQ3VzdG9tVGV4dFBhcmFtZXRlcnNfVGV4dEFyZWEuZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17Zm9udFJlc291cmNlczpbXSxjYXBpdGFsaXplOiExLGRlZmF1bHRUZXh0OlwiXCIsZGVmYXVsdFRleHRPbmx5OiExLGlzVW5pdmVyc2FsOiExLHRleHRBcmVhczpbXX07cmV0dXJuIG4uZm9udFJlc291cmNlcz1lLmZvbnRSZXNvdXJjZXM/Lm1hcCgoZT0+dC5DdXN0b21UZXh0UGFyYW1ldGVyc19Gb250UmVzb3VyY2UuZnJvbVBhcnRpYWwoZSkpKXx8W10sbi5jYXBpdGFsaXplPWUuY2FwaXRhbGl6ZT8/ITEsbi5kZWZhdWx0VGV4dD1lLmRlZmF1bHRUZXh0Pz9cIlwiLG4uZGVmYXVsdFRleHRPbmx5PWUuZGVmYXVsdFRleHRPbmx5Pz8hMSxuLmlzVW5pdmVyc2FsPWUuaXNVbml2ZXJzYWw/PyExLG4udGV4dEFyZWFzPWUudGV4dEFyZWFzPy5tYXAoKGU9PnQuQ3VzdG9tVGV4dFBhcmFtZXRlcnNfVGV4dEFyZWEuZnJvbVBhcnRpYWwoZSkpKXx8W10sbn19LHQuQ3VzdG9tVGV4dFBhcmFtZXRlcnNfRm9udFJlc291cmNlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUubmFtZSYmdC51aW50MzIoMTApLnN0cmluZyhlLm5hbWUpLFwiXCIhPT1lLnVybCYmdC51aW50MzIoMTgpLnN0cmluZyhlLnVybCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXtuYW1lOlwiXCIsdXJsOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLm5hbWU9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6by51cmw9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e25hbWU6XCJcIix1cmw6XCJcIn07cmV0dXJuIHQubmFtZT1lLm5hbWU/P1wiXCIsdC51cmw9ZS51cmw/P1wiXCIsdH19LHQuQ3VzdG9tVGV4dFBhcmFtZXRlcnNfVGV4dEFyZWE9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUubWF4aW11bUhlaWdodCYmdC51aW50MzIoOCkuaW50MzIoZS5tYXhpbXVtSGVpZ2h0KSwwIT09ZS5tYXhpbXVtTGluZUxlbmd0aCYmdC51aW50MzIoMTYpLmludDMyKGUubWF4aW11bUxpbmVMZW5ndGgpLDAhPT1lLm1heGltdW1MaW5lcyYmdC51aW50MzIoMjQpLmludDMyKGUubWF4aW11bUxpbmVzKSwwIT09ZS5tYXhpbXVtV2lkdGgmJnQudWludDMyKDMyKS5pbnQzMihlLm1heGltdW1XaWR0aCksMCE9PWUuc3BsaXRWZXJzaW9uJiZ0LnVpbnQzMig0MCkuaW50MzIoZS5zcGxpdFZlcnNpb24pLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17bWF4aW11bUhlaWdodDowLG1heGltdW1MaW5lTGVuZ3RoOjAsbWF4aW11bUxpbmVzOjAsbWF4aW11bVdpZHRoOjAsc3BsaXRWZXJzaW9uOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLm1heGltdW1IZWlnaHQ9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMjpvLm1heGltdW1MaW5lTGVuZ3RoPW4uaW50MzIoKTticmVhaztjYXNlIDM6by5tYXhpbXVtTGluZXM9bi5pbnQzMigpO2JyZWFrO2Nhc2UgNDpvLm1heGltdW1XaWR0aD1uLmludDMyKCk7YnJlYWs7Y2FzZSA1Om8uc3BsaXRWZXJzaW9uPW4uaW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e21heGltdW1IZWlnaHQ6MCxtYXhpbXVtTGluZUxlbmd0aDowLG1heGltdW1MaW5lczowLG1heGltdW1XaWR0aDowLHNwbGl0VmVyc2lvbjowfTtyZXR1cm4gdC5tYXhpbXVtSGVpZ2h0PWUubWF4aW11bUhlaWdodD8/MCx0Lm1heGltdW1MaW5lTGVuZ3RoPWUubWF4aW11bUxpbmVMZW5ndGg/PzAsdC5tYXhpbXVtTGluZXM9ZS5tYXhpbXVtTGluZXM/PzAsdC5tYXhpbXVtV2lkdGg9ZS5tYXhpbXVtV2lkdGg/PzAsdC5zcGxpdFZlcnNpb249ZS5zcGxpdFZlcnNpb24/PzAsdH19fSw5NTIxOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5MaXN0T2ZMZW5zZXM9dC5MZW5zPXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO2Z1bmN0aW9uIG8oKXtyZXR1cm57aWQ6XCJcIixjb250ZW50T2JqZWN0Om5ldyBVaW50OEFycmF5fX10LkxlbnM9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5pZCYmdC51aW50MzIoMTApLnN0cmluZyhlLmlkKSwwIT09ZS5jb250ZW50T2JqZWN0Lmxlbmd0aCYmdC51aW50MzIoMTgpLmJ5dGVzKGUuY29udGVudE9iamVjdCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBhPW8oKTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS5pZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjphLmNvbnRlbnRPYmplY3Q9bi5ieXRlcygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD1vKCk7cmV0dXJuIHQuaWQ9ZS5pZD8/XCJcIix0LmNvbnRlbnRPYmplY3Q9ZS5jb250ZW50T2JqZWN0Pz9uZXcgVWludDhBcnJheSx0fX0sdC5MaXN0T2ZMZW5zZXM9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgciBvZiBlLmxlbnNlcyl0LkxlbnMuZW5jb2RlKHIsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgbz12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3QgYT17bGVuc2VzOltdfTtmb3IoO3IucG9zPG87KXtjb25zdCBlPXIudWludDMyKCk7ZT4+PjM9PTE/YS5sZW5zZXMucHVzaCh0LkxlbnMuZGVjb2RlKHIsci51aW50MzIoKSkpOnIuc2tpcFR5cGUoNyZlKX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17bGVuc2VzOltdfTtyZXR1cm4gbi5sZW5zZXM9ZS5sZW5zZXM/Lm1hcCgoZT0+dC5MZW5zLmZyb21QYXJ0aWFsKGUpKSl8fFtdLG59fX0sMzgxNTk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuUXVpY2tJY29uUmVzb3VyY2U9dm9pZCAwO2NvbnN0IGk9bigxMDY3Niksbz1yKG4oNjIxMDApKTt0LlF1aWNrSWNvblJlc291cmNlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUudXJsJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUudXJsKSx2b2lkIDAhPT1lLnJlc29sdXRpb24mJmkuUmVzb2x1dGlvbi5lbmNvZGUoZS5yZXNvbHV0aW9uLHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgYT17dXJsOlwiXCIscmVzb2x1dGlvbjp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLnVybD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjphLnJlc29sdXRpb249aS5SZXNvbHV0aW9uLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dXJsOlwiXCIscmVzb2x1dGlvbjp2b2lkIDB9O3JldHVybiB0LnVybD1lLnVybD8/XCJcIix0LnJlc29sdXRpb249dm9pZCAwIT09ZS5yZXNvbHV0aW9uJiZudWxsIT09ZS5yZXNvbHV0aW9uP2kuUmVzb2x1dGlvbi5mcm9tUGFydGlhbChlLnJlc29sdXRpb24pOnZvaWQgMCx0fX19LDEwNjc2OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlJlc29sdXRpb249dm9pZCAwO2NvbnN0IGk9cihuKDYyMTAwKSk7dC5SZXNvbHV0aW9uPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLmhlaWdodCYmdC51aW50MzIoOCkuaW50MzIoZS5oZWlnaHQpLDAhPT1lLndpZHRoJiZ0LnVpbnQzMigxNikuaW50MzIoZS53aWR0aCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXtoZWlnaHQ6MCx3aWR0aDowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5oZWlnaHQ9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMjpvLndpZHRoPW4uaW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2hlaWdodDowLHdpZHRoOjB9O3JldHVybiB0LmhlaWdodD1lLmhlaWdodD8/MCx0LndpZHRoPWUud2lkdGg/PzAsdH19fSwyNzQyMTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DYW1lb1RpbGVTdGFnaW5nPXQuQ2FtZW9TbmFwU3RhZ2luZz10LkNhbWVvU25hcENyZWF0aW9uTW9kZWw9dC5DYW1lb1NuYXBfVGFyZ2V0TGVuc2VzRW50cnk9dC5DYW1lb1NuYXA9dC5DYW1lb1RpbGVDcmVhdGlvbk1vZGVsPXQuQ2FtZW9UaWxlX1RhcmdldExlbnNlc0VudHJ5PXQuQ2FtZW9UaWxlPXQuQ2FtZW9TdG9yaWVzQ29udGVudEtleT12b2lkIDA7Y29uc3QgaT1yKG4oNDE1ODMpKSxvPW4oOTUyMTkpLGE9big3MzMyMCkscz1yKG4oNjIxMDApKTtmdW5jdGlvbiBjKCl7cmV0dXJue2NhbWVvQXNzZXRzQ29udGVudE9iamVjdDpuZXcgVWludDhBcnJheSxnZW5kZXJzOltdLG9uYm9hcmRpbmdJbWFnZTpcIlwiLHN0YXRpY0ltYWdlOlwiXCIsdGFyZ2V0TGVuc2VzOnt9LGZhbGxiYWNrSW1hZ2U6bmV3IFVpbnQ4QXJyYXl9fWZ1bmN0aW9uIGwoKXtyZXR1cm57Y2FtZW9Bc3NldHNDb250ZW50T2JqZWN0Om5ldyBVaW50OEFycmF5LGdlbmRlcnM6W10sdGFyZ2V0TGVuc2VzOnt9fX10LkNhbWVvU3Rvcmllc0NvbnRlbnRLZXk9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIjBcIiE9PWUuaWQmJnQudWludDMyKDgpLmludDY0KGUuaWQpLDAhPT1lLnJldmlzaW9uJiZ0LnVpbnQzMigxNikuaW50MzIoZS5yZXZpc2lvbiksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtpZDpcIjBcIixyZXZpc2lvbjowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5pZD1uLmludDY0KCkudG9TdHJpbmcoKTticmVhaztjYXNlIDI6aS5yZXZpc2lvbj1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtpZDpcIjBcIixyZXZpc2lvbjowfTtyZXR1cm4gdC5pZD1lLmlkPz9cIjBcIix0LnJldmlzaW9uPWUucmV2aXNpb24/PzAsdH19LHQuQ2FtZW9UaWxlPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7MCE9PWUuY2FtZW9Bc3NldHNDb250ZW50T2JqZWN0Lmxlbmd0aCYmbi51aW50MzIoMTApLmJ5dGVzKGUuY2FtZW9Bc3NldHNDb250ZW50T2JqZWN0KSxuLnVpbnQzMigxOCkuZm9yaygpO2Zvcihjb25zdCB0IG9mIGUuZ2VuZGVycyluLmludDMyKHQpO3JldHVybiBuLmxkZWxpbSgpLFwiXCIhPT1lLm9uYm9hcmRpbmdJbWFnZSYmbi51aW50MzIoMjYpLnN0cmluZyhlLm9uYm9hcmRpbmdJbWFnZSksXCJcIiE9PWUuc3RhdGljSW1hZ2UmJm4udWludDMyKDM0KS5zdHJpbmcoZS5zdGF0aWNJbWFnZSksT2JqZWN0LmVudHJpZXMoZS50YXJnZXRMZW5zZXMpLmZvckVhY2goKGU9PntsZXRbcixpXT1lO3QuQ2FtZW9UaWxlX1RhcmdldExlbnNlc0VudHJ5LmVuY29kZSh7a2V5OnIsdmFsdWU6aX0sbi51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKCl9KSksMCE9PWUuZmFsbGJhY2tJbWFnZS5sZW5ndGgmJm4udWludDMyKDUwKS5ieXRlcyhlLmZhbGxiYWNrSW1hZ2UpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz1jKCk7Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8uY2FtZW9Bc3NldHNDb250ZW50T2JqZWN0PXIuYnl0ZXMoKTticmVhaztjYXNlIDI6aWYoMj09KDcmZSkpe2NvbnN0IGU9ci51aW50MzIoKStyLnBvcztmb3IoO3IucG9zPGU7KW8uZ2VuZGVycy5wdXNoKHIuaW50MzIoKSl9ZWxzZSBvLmdlbmRlcnMucHVzaChyLmludDMyKCkpO2JyZWFrO2Nhc2UgMzpvLm9uYm9hcmRpbmdJbWFnZT1yLnN0cmluZygpO2JyZWFrO2Nhc2UgNDpvLnN0YXRpY0ltYWdlPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSA1OmNvbnN0IG49dC5DYW1lb1RpbGVfVGFyZ2V0TGVuc2VzRW50cnkuZGVjb2RlKHIsci51aW50MzIoKSk7dm9pZCAwIT09bi52YWx1ZSYmKG8udGFyZ2V0TGVuc2VzW24ua2V5XT1uLnZhbHVlKTticmVhaztjYXNlIDY6by5mYWxsYmFja0ltYWdlPXIuYnl0ZXMoKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9YygpO3JldHVybiB0LmNhbWVvQXNzZXRzQ29udGVudE9iamVjdD1lLmNhbWVvQXNzZXRzQ29udGVudE9iamVjdD8/bmV3IFVpbnQ4QXJyYXksdC5nZW5kZXJzPWUuZ2VuZGVycz8ubWFwKChlPT5lKSl8fFtdLHQub25ib2FyZGluZ0ltYWdlPWUub25ib2FyZGluZ0ltYWdlPz9cIlwiLHQuc3RhdGljSW1hZ2U9ZS5zdGF0aWNJbWFnZT8/XCJcIix0LnRhcmdldExlbnNlcz1PYmplY3QuZW50cmllcyhlLnRhcmdldExlbnNlcz8/e30pLnJlZHVjZSgoKGUsdCk9PntsZXRbbixyXT10O3JldHVybiB2b2lkIDAhPT1yJiYoZVtOdW1iZXIobildPW8uTGlzdE9mTGVuc2VzLmZyb21QYXJ0aWFsKHIpKSxlfSkse30pLHQuZmFsbGJhY2tJbWFnZT1lLmZhbGxiYWNrSW1hZ2U/P25ldyBVaW50OEFycmF5LHR9fSx0LkNhbWVvVGlsZV9UYXJnZXRMZW5zZXNFbnRyeT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5rZXkmJnQudWludDMyKDgpLmludDMyKGUua2V5KSx2b2lkIDAhPT1lLnZhbHVlJiZvLkxpc3RPZkxlbnNlcy5lbmNvZGUoZS52YWx1ZSx0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2tleTowLHZhbHVlOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkua2V5PW4uaW50MzIoKTticmVhaztjYXNlIDI6aS52YWx1ZT1vLkxpc3RPZkxlbnNlcy5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2tleTowLHZhbHVlOnZvaWQgMH07cmV0dXJuIHQua2V5PWUua2V5Pz8wLHQudmFsdWU9dm9pZCAwIT09ZS52YWx1ZSYmbnVsbCE9PWUudmFsdWU/by5MaXN0T2ZMZW5zZXMuZnJvbVBhcnRpYWwoZS52YWx1ZSk6dm9pZCAwLHR9fSx0LkNhbWVvVGlsZUNyZWF0aW9uTW9kZWw9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5jYW1lb1RpbGUmJnQuQ2FtZW9UaWxlLmVuY29kZShlLmNhbWVvVGlsZSxuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSxcIlwiIT09ZS5nZW5lcmF0ZWRDYW1lb1ByZXZpZXdVcmwmJm4udWludDMyKDE4KS5zdHJpbmcoZS5nZW5lcmF0ZWRDYW1lb1ByZXZpZXdVcmwpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17Y2FtZW9UaWxlOnZvaWQgMCxnZW5lcmF0ZWRDYW1lb1ByZXZpZXdVcmw6XCJcIn07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8uY2FtZW9UaWxlPXQuQ2FtZW9UaWxlLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMjpvLmdlbmVyYXRlZENhbWVvUHJldmlld1VybD1yLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17Y2FtZW9UaWxlOnZvaWQgMCxnZW5lcmF0ZWRDYW1lb1ByZXZpZXdVcmw6XCJcIn07cmV0dXJuIG4uY2FtZW9UaWxlPXZvaWQgMCE9PWUuY2FtZW9UaWxlJiZudWxsIT09ZS5jYW1lb1RpbGU/dC5DYW1lb1RpbGUuZnJvbVBhcnRpYWwoZS5jYW1lb1RpbGUpOnZvaWQgMCxuLmdlbmVyYXRlZENhbWVvUHJldmlld1VybD1lLmdlbmVyYXRlZENhbWVvUHJldmlld1VybD8/XCJcIixufX0sdC5DYW1lb1NuYXA9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTswIT09ZS5jYW1lb0Fzc2V0c0NvbnRlbnRPYmplY3QubGVuZ3RoJiZuLnVpbnQzMigxMCkuYnl0ZXMoZS5jYW1lb0Fzc2V0c0NvbnRlbnRPYmplY3QpLG4udWludDMyKDE4KS5mb3JrKCk7Zm9yKGNvbnN0IHQgb2YgZS5nZW5kZXJzKW4uaW50MzIodCk7cmV0dXJuIG4ubGRlbGltKCksT2JqZWN0LmVudHJpZXMoZS50YXJnZXRMZW5zZXMpLmZvckVhY2goKGU9PntsZXRbcixpXT1lO3QuQ2FtZW9TbmFwX1RhcmdldExlbnNlc0VudHJ5LmVuY29kZSh7a2V5OnIsdmFsdWU6aX0sbi51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCl9KSksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPWwoKTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5jYW1lb0Fzc2V0c0NvbnRlbnRPYmplY3Q9ci5ieXRlcygpO2JyZWFrO2Nhc2UgMjppZigyPT0oNyZlKSl7Y29uc3QgZT1yLnVpbnQzMigpK3IucG9zO2Zvcig7ci5wb3M8ZTspby5nZW5kZXJzLnB1c2goci5pbnQzMigpKX1lbHNlIG8uZ2VuZGVycy5wdXNoKHIuaW50MzIoKSk7YnJlYWs7Y2FzZSAzOmNvbnN0IG49dC5DYW1lb1NuYXBfVGFyZ2V0TGVuc2VzRW50cnkuZGVjb2RlKHIsci51aW50MzIoKSk7dm9pZCAwIT09bi52YWx1ZSYmKG8udGFyZ2V0TGVuc2VzW24ua2V5XT1uLnZhbHVlKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9bCgpO3JldHVybiB0LmNhbWVvQXNzZXRzQ29udGVudE9iamVjdD1lLmNhbWVvQXNzZXRzQ29udGVudE9iamVjdD8/bmV3IFVpbnQ4QXJyYXksdC5nZW5kZXJzPWUuZ2VuZGVycz8ubWFwKChlPT5lKSl8fFtdLHQudGFyZ2V0TGVuc2VzPU9iamVjdC5lbnRyaWVzKGUudGFyZ2V0TGVuc2VzPz97fSkucmVkdWNlKCgoZSx0KT0+e2xldFtuLHJdPXQ7cmV0dXJuIHZvaWQgMCE9PXImJihlW051bWJlcihuKV09by5MaXN0T2ZMZW5zZXMuZnJvbVBhcnRpYWwocikpLGV9KSx7fSksdH19LHQuQ2FtZW9TbmFwX1RhcmdldExlbnNlc0VudHJ5PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLmtleSYmdC51aW50MzIoOCkuaW50MzIoZS5rZXkpLHZvaWQgMCE9PWUudmFsdWUmJm8uTGlzdE9mTGVuc2VzLmVuY29kZShlLnZhbHVlLHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17a2V5OjAsdmFsdWU6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5rZXk9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMjppLnZhbHVlPW8uTGlzdE9mTGVuc2VzLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17a2V5OjAsdmFsdWU6dm9pZCAwfTtyZXR1cm4gdC5rZXk9ZS5rZXk/PzAsdC52YWx1ZT12b2lkIDAhPT1lLnZhbHVlJiZudWxsIT09ZS52YWx1ZT9vLkxpc3RPZkxlbnNlcy5mcm9tUGFydGlhbChlLnZhbHVlKTp2b2lkIDAsdH19LHQuQ2FtZW9TbmFwQ3JlYXRpb25Nb2RlbD17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLmNhbWVvU25hcCYmdC5DYW1lb1NuYXAuZW5jb2RlKGUuY2FtZW9TbmFwLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLFwiXCIhPT1lLmdlbmVyYXRlZENhbWVvUHJldmlld1VybCYmbi51aW50MzIoMTgpLnN0cmluZyhlLmdlbmVyYXRlZENhbWVvUHJldmlld1VybCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXtjYW1lb1NuYXA6dm9pZCAwLGdlbmVyYXRlZENhbWVvUHJldmlld1VybDpcIlwifTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5jYW1lb1NuYXA9dC5DYW1lb1NuYXAuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOm8uZ2VuZXJhdGVkQ2FtZW9QcmV2aWV3VXJsPXIuc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtjYW1lb1NuYXA6dm9pZCAwLGdlbmVyYXRlZENhbWVvUHJldmlld1VybDpcIlwifTtyZXR1cm4gbi5jYW1lb1NuYXA9dm9pZCAwIT09ZS5jYW1lb1NuYXAmJm51bGwhPT1lLmNhbWVvU25hcD90LkNhbWVvU25hcC5mcm9tUGFydGlhbChlLmNhbWVvU25hcCk6dm9pZCAwLG4uZ2VuZXJhdGVkQ2FtZW9QcmV2aWV3VXJsPWUuZ2VuZXJhdGVkQ2FtZW9QcmV2aWV3VXJsPz9cIlwiLG59fSx0LkNhbWVvU25hcFN0YWdpbmc9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5hc3NldE1vZGVsJiZhLkNhbWVvU3RhZ2luZ0Fzc2V0LmVuY29kZShlLmFzc2V0TW9kZWwsdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXthc3NldE1vZGVsOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2kuYXNzZXRNb2RlbD1hLkNhbWVvU3RhZ2luZ0Fzc2V0LmRlY29kZShuLG4udWludDMyKCkpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17YXNzZXRNb2RlbDp2b2lkIDB9O3JldHVybiB0LmFzc2V0TW9kZWw9dm9pZCAwIT09ZS5hc3NldE1vZGVsJiZudWxsIT09ZS5hc3NldE1vZGVsP2EuQ2FtZW9TdGFnaW5nQXNzZXQuZnJvbVBhcnRpYWwoZS5hc3NldE1vZGVsKTp2b2lkIDAsdH19LHQuQ2FtZW9UaWxlU3RhZ2luZz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLmFzc2V0TW9kZWwmJmEuQ2FtZW9TdGFnaW5nQXNzZXQuZW5jb2RlKGUuYXNzZXRNb2RlbCx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSxcInMzT25ib2FyZGluZ0ltYWdlUGF0aFwiPT09ZS5vbmJvYXJkaW5nSW1hZ2VEYXRhUmVmZXJlbmNlPy4kY2FzZSYmdC51aW50MzIoMTgpLnN0cmluZyhlLm9uYm9hcmRpbmdJbWFnZURhdGFSZWZlcmVuY2UuczNPbmJvYXJkaW5nSW1hZ2VQYXRoKSxcIm9uYm9hcmRpbmdJbWFnZUNvbnRlbnRVcmxcIj09PWUub25ib2FyZGluZ0ltYWdlRGF0YVJlZmVyZW5jZT8uJGNhc2UmJnQudWludDMyKDM0KS5zdHJpbmcoZS5vbmJvYXJkaW5nSW1hZ2VEYXRhUmVmZXJlbmNlLm9uYm9hcmRpbmdJbWFnZUNvbnRlbnRVcmwpLFwiczNTdGF0aWNJbWFnZVBhdGhcIj09PWUuc3RhdGljSW1hZ2VEYXRhUmVmZXJlbmNlPy4kY2FzZSYmdC51aW50MzIoMjYpLnN0cmluZyhlLnN0YXRpY0ltYWdlRGF0YVJlZmVyZW5jZS5zM1N0YXRpY0ltYWdlUGF0aCksXCJzdGF0aWNJbWFnZUNvbnRlbnRVcmxcIj09PWUuc3RhdGljSW1hZ2VEYXRhUmVmZXJlbmNlPy4kY2FzZSYmdC51aW50MzIoNDIpLnN0cmluZyhlLnN0YXRpY0ltYWdlRGF0YVJlZmVyZW5jZS5zdGF0aWNJbWFnZUNvbnRlbnRVcmwpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17YXNzZXRNb2RlbDp2b2lkIDAsb25ib2FyZGluZ0ltYWdlRGF0YVJlZmVyZW5jZTp2b2lkIDAsc3RhdGljSW1hZ2VEYXRhUmVmZXJlbmNlOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuYXNzZXRNb2RlbD1hLkNhbWVvU3RhZ2luZ0Fzc2V0LmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMjppLm9uYm9hcmRpbmdJbWFnZURhdGFSZWZlcmVuY2U9eyRjYXNlOlwiczNPbmJvYXJkaW5nSW1hZ2VQYXRoXCIsczNPbmJvYXJkaW5nSW1hZ2VQYXRoOm4uc3RyaW5nKCl9O2JyZWFrO2Nhc2UgNDppLm9uYm9hcmRpbmdJbWFnZURhdGFSZWZlcmVuY2U9eyRjYXNlOlwib25ib2FyZGluZ0ltYWdlQ29udGVudFVybFwiLG9uYm9hcmRpbmdJbWFnZUNvbnRlbnRVcmw6bi5zdHJpbmcoKX07YnJlYWs7Y2FzZSAzOmkuc3RhdGljSW1hZ2VEYXRhUmVmZXJlbmNlPXskY2FzZTpcInMzU3RhdGljSW1hZ2VQYXRoXCIsczNTdGF0aWNJbWFnZVBhdGg6bi5zdHJpbmcoKX07YnJlYWs7Y2FzZSA1Omkuc3RhdGljSW1hZ2VEYXRhUmVmZXJlbmNlPXskY2FzZTpcInN0YXRpY0ltYWdlQ29udGVudFVybFwiLHN0YXRpY0ltYWdlQ29udGVudFVybDpuLnN0cmluZygpfTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2Fzc2V0TW9kZWw6dm9pZCAwLG9uYm9hcmRpbmdJbWFnZURhdGFSZWZlcmVuY2U6dm9pZCAwLHN0YXRpY0ltYWdlRGF0YVJlZmVyZW5jZTp2b2lkIDB9O3JldHVybiB0LmFzc2V0TW9kZWw9dm9pZCAwIT09ZS5hc3NldE1vZGVsJiZudWxsIT09ZS5hc3NldE1vZGVsP2EuQ2FtZW9TdGFnaW5nQXNzZXQuZnJvbVBhcnRpYWwoZS5hc3NldE1vZGVsKTp2b2lkIDAsXCJzM09uYm9hcmRpbmdJbWFnZVBhdGhcIj09PWUub25ib2FyZGluZ0ltYWdlRGF0YVJlZmVyZW5jZT8uJGNhc2UmJnZvaWQgMCE9PWUub25ib2FyZGluZ0ltYWdlRGF0YVJlZmVyZW5jZT8uczNPbmJvYXJkaW5nSW1hZ2VQYXRoJiZudWxsIT09ZS5vbmJvYXJkaW5nSW1hZ2VEYXRhUmVmZXJlbmNlPy5zM09uYm9hcmRpbmdJbWFnZVBhdGgmJih0Lm9uYm9hcmRpbmdJbWFnZURhdGFSZWZlcmVuY2U9eyRjYXNlOlwiczNPbmJvYXJkaW5nSW1hZ2VQYXRoXCIsczNPbmJvYXJkaW5nSW1hZ2VQYXRoOmUub25ib2FyZGluZ0ltYWdlRGF0YVJlZmVyZW5jZS5zM09uYm9hcmRpbmdJbWFnZVBhdGh9KSxcIm9uYm9hcmRpbmdJbWFnZUNvbnRlbnRVcmxcIj09PWUub25ib2FyZGluZ0ltYWdlRGF0YVJlZmVyZW5jZT8uJGNhc2UmJnZvaWQgMCE9PWUub25ib2FyZGluZ0ltYWdlRGF0YVJlZmVyZW5jZT8ub25ib2FyZGluZ0ltYWdlQ29udGVudFVybCYmbnVsbCE9PWUub25ib2FyZGluZ0ltYWdlRGF0YVJlZmVyZW5jZT8ub25ib2FyZGluZ0ltYWdlQ29udGVudFVybCYmKHQub25ib2FyZGluZ0ltYWdlRGF0YVJlZmVyZW5jZT17JGNhc2U6XCJvbmJvYXJkaW5nSW1hZ2VDb250ZW50VXJsXCIsb25ib2FyZGluZ0ltYWdlQ29udGVudFVybDplLm9uYm9hcmRpbmdJbWFnZURhdGFSZWZlcmVuY2Uub25ib2FyZGluZ0ltYWdlQ29udGVudFVybH0pLFwiczNTdGF0aWNJbWFnZVBhdGhcIj09PWUuc3RhdGljSW1hZ2VEYXRhUmVmZXJlbmNlPy4kY2FzZSYmdm9pZCAwIT09ZS5zdGF0aWNJbWFnZURhdGFSZWZlcmVuY2U/LnMzU3RhdGljSW1hZ2VQYXRoJiZudWxsIT09ZS5zdGF0aWNJbWFnZURhdGFSZWZlcmVuY2U/LnMzU3RhdGljSW1hZ2VQYXRoJiYodC5zdGF0aWNJbWFnZURhdGFSZWZlcmVuY2U9eyRjYXNlOlwiczNTdGF0aWNJbWFnZVBhdGhcIixzM1N0YXRpY0ltYWdlUGF0aDplLnN0YXRpY0ltYWdlRGF0YVJlZmVyZW5jZS5zM1N0YXRpY0ltYWdlUGF0aH0pLFwic3RhdGljSW1hZ2VDb250ZW50VXJsXCI9PT1lLnN0YXRpY0ltYWdlRGF0YVJlZmVyZW5jZT8uJGNhc2UmJnZvaWQgMCE9PWUuc3RhdGljSW1hZ2VEYXRhUmVmZXJlbmNlPy5zdGF0aWNJbWFnZUNvbnRlbnRVcmwmJm51bGwhPT1lLnN0YXRpY0ltYWdlRGF0YVJlZmVyZW5jZT8uc3RhdGljSW1hZ2VDb250ZW50VXJsJiYodC5zdGF0aWNJbWFnZURhdGFSZWZlcmVuY2U9eyRjYXNlOlwic3RhdGljSW1hZ2VDb250ZW50VXJsXCIsc3RhdGljSW1hZ2VDb250ZW50VXJsOmUuc3RhdGljSW1hZ2VEYXRhUmVmZXJlbmNlLnN0YXRpY0ltYWdlQ29udGVudFVybH0pLHR9fSxzLmRlZmF1bHQudXRpbC5Mb25nIT09aS5kZWZhdWx0JiYocy5kZWZhdWx0LnV0aWwuTG9uZz1pLmRlZmF1bHQscy5kZWZhdWx0LmNvbmZpZ3VyZSgpKX0sMzY3ODE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuUGFydGlhbFRva2VuPXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO3QuUGFydGlhbFRva2VuPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7dC51aW50MzIoMTApLmZvcmsoKTtmb3IoY29uc3QgbiBvZiBlLnNlcXVlbmNlSWRzKXQuaW50MzIobik7cmV0dXJuIHQubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXtzZXF1ZW5jZUlkczpbXX07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2lmKGU+Pj4zPT0xKWlmKDI9PSg3JmUpKXtjb25zdCBlPW4udWludDMyKCkrbi5wb3M7Zm9yKDtuLnBvczxlOylvLnNlcXVlbmNlSWRzLnB1c2gobi5pbnQzMigpKX1lbHNlIG8uc2VxdWVuY2VJZHMucHVzaChuLmludDMyKCkpO2Vsc2Ugbi5za2lwVHlwZSg3JmUpfXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtzZXF1ZW5jZUlkczpbXX07cmV0dXJuIHQuc2VxdWVuY2VJZHM9ZS5zZXF1ZW5jZUlkcz8ubWFwKChlPT5lKSl8fFtdLHR9fX0sMTk0NDU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuSW1hZ2VTaXplPXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO3QuSW1hZ2VTaXplPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLndpZHRoJiZ0LnVpbnQzMig4KS51aW50MzIoZS53aWR0aCksMCE9PWUuaGVpZ2h0JiZ0LnVpbnQzMigxNikudWludDMyKGUuaGVpZ2h0KSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e3dpZHRoOjAsaGVpZ2h0OjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLndpZHRoPW4udWludDMyKCk7YnJlYWs7Y2FzZSAyOm8uaGVpZ2h0PW4udWludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt3aWR0aDowLGhlaWdodDowfTtyZXR1cm4gdC53aWR0aD1lLndpZHRoPz8wLHQuaGVpZ2h0PWUuaGVpZ2h0Pz8wLHR9fX0sNTExMzk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuVmFsdWU9dC5TdHJpbmdBcnJheT10Lk1hcFJlY29yZHM9dC5NYXBSZWNvcmQ9dm9pZCAwO2NvbnN0IGk9cihuKDQxNTgzKSksbz1yKG4oNjIxMDApKSxhPW4oNDI3OTgpO2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGUudG9TdHJpbmcoKX10Lk1hcFJlY29yZD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmtleSYmdC51aW50MzIoMTApLnN0cmluZyhlLmtleSksXCJcIiE9PWUudmFsdWUmJnQudWludDMyKDE4KS5zdHJpbmcoZS52YWx1ZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtrZXk6XCJcIix2YWx1ZTpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5rZXk9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS52YWx1ZT1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17a2V5OlwiXCIsdmFsdWU6XCJcIn07cmV0dXJuIHQua2V5PWUua2V5Pz9cIlwiLHQudmFsdWU9ZS52YWx1ZT8/XCJcIix0fX0sdC5NYXBSZWNvcmRzPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7Zm9yKGNvbnN0IHIgb2YgZS5yZWNvcmRzKXQuTWFwUmVjb3JkLmVuY29kZShyLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiBufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGE9e3JlY29yZHM6W119O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtlPj4+Mz09MT9hLnJlY29yZHMucHVzaCh0Lk1hcFJlY29yZC5kZWNvZGUocixyLnVpbnQzMigpKSk6ci5za2lwVHlwZSg3JmUpfXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtyZWNvcmRzOltdfTtyZXR1cm4gbi5yZWNvcmRzPWUucmVjb3Jkcz8ubWFwKChlPT50Lk1hcFJlY29yZC5mcm9tUGFydGlhbChlKSkpfHxbXSxufX0sdC5TdHJpbmdBcnJheT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO2Zvcihjb25zdCBuIG9mIGUudmFsdWUpdC51aW50MzIoMTApLnN0cmluZyhuKTtyZXR1cm4gdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXt2YWx1ZTpbXX07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2kudmFsdWUucHVzaChuLnN0cmluZygpKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3ZhbHVlOltdfTtyZXR1cm4gdC52YWx1ZT1lLnZhbHVlPy5tYXAoKGU9PmUpKXx8W10sdH19LHQuVmFsdWU9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cImludFZhbHVlXCI9PT1lLmtpbmQ/LiRjYXNlJiZuLnVpbnQzMig4KS5pbnQzMihlLmtpbmQuaW50VmFsdWUpLFwibG9uZ1ZhbHVlXCI9PT1lLmtpbmQ/LiRjYXNlJiZuLnVpbnQzMigxNikuaW50NjQoZS5raW5kLmxvbmdWYWx1ZSksXCJmbG9hdFZhbHVlXCI9PT1lLmtpbmQ/LiRjYXNlJiZuLnVpbnQzMigyOSkuZmxvYXQoZS5raW5kLmZsb2F0VmFsdWUpLFwiZG91YmxlVmFsdWVcIj09PWUua2luZD8uJGNhc2UmJm4udWludDMyKDczKS5kb3VibGUoZS5raW5kLmRvdWJsZVZhbHVlKSxcImJvb2xWYWx1ZVwiPT09ZS5raW5kPy4kY2FzZSYmbi51aW50MzIoMzIpLmJvb2woZS5raW5kLmJvb2xWYWx1ZSksXCJzdHJpbmdWYWx1ZVwiPT09ZS5raW5kPy4kY2FzZSYmbi51aW50MzIoNDIpLnN0cmluZyhlLmtpbmQuc3RyaW5nVmFsdWUpLFwiYW55VmFsdWVcIj09PWUua2luZD8uJGNhc2UmJmEuQW55LmVuY29kZShlLmtpbmQuYW55VmFsdWUsbi51aW50MzIoNTApLmZvcmsoKSkubGRlbGltKCksXCJtYXBWYWx1ZVwiPT09ZS5raW5kPy4kY2FzZSYmdC5NYXBSZWNvcmRzLmVuY29kZShlLmtpbmQubWFwVmFsdWUsbi51aW50MzIoNTgpLmZvcmsoKSkubGRlbGltKCksXCJpbnRQYWlyVmFsdWVcIj09PWUua2luZD8uJGNhc2UmJm4udWludDMyKDY1KS5maXhlZDY0KGUua2luZC5pbnRQYWlyVmFsdWUpLFwic3RyaW5nQXJyYXlWYWx1ZVwiPT09ZS5raW5kPy4kY2FzZSYmdC5TdHJpbmdBcnJheS5lbmNvZGUoZS5raW5kLnN0cmluZ0FycmF5VmFsdWUsbi51aW50MzIoODIpLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBjPXtraW5kOnZvaWQgMH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmMua2luZD17JGNhc2U6XCJpbnRWYWx1ZVwiLGludFZhbHVlOnIuaW50MzIoKX07YnJlYWs7Y2FzZSAyOmMua2luZD17JGNhc2U6XCJsb25nVmFsdWVcIixsb25nVmFsdWU6cyhyLmludDY0KCkpfTticmVhaztjYXNlIDM6Yy5raW5kPXskY2FzZTpcImZsb2F0VmFsdWVcIixmbG9hdFZhbHVlOnIuZmxvYXQoKX07YnJlYWs7Y2FzZSA5OmMua2luZD17JGNhc2U6XCJkb3VibGVWYWx1ZVwiLGRvdWJsZVZhbHVlOnIuZG91YmxlKCl9O2JyZWFrO2Nhc2UgNDpjLmtpbmQ9eyRjYXNlOlwiYm9vbFZhbHVlXCIsYm9vbFZhbHVlOnIuYm9vbCgpfTticmVhaztjYXNlIDU6Yy5raW5kPXskY2FzZTpcInN0cmluZ1ZhbHVlXCIsc3RyaW5nVmFsdWU6ci5zdHJpbmcoKX07YnJlYWs7Y2FzZSA2OmMua2luZD17JGNhc2U6XCJhbnlWYWx1ZVwiLGFueVZhbHVlOmEuQW55LmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDc6Yy5raW5kPXskY2FzZTpcIm1hcFZhbHVlXCIsbWFwVmFsdWU6dC5NYXBSZWNvcmRzLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDg6Yy5raW5kPXskY2FzZTpcImludFBhaXJWYWx1ZVwiLGludFBhaXJWYWx1ZTpzKHIuZml4ZWQ2NCgpKX07YnJlYWs7Y2FzZSAxMDpjLmtpbmQ9eyRjYXNlOlwic3RyaW5nQXJyYXlWYWx1ZVwiLHN0cmluZ0FycmF5VmFsdWU6dC5TdHJpbmdBcnJheS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBjfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtraW5kOnZvaWQgMH07cmV0dXJuXCJpbnRWYWx1ZVwiPT09ZS5raW5kPy4kY2FzZSYmdm9pZCAwIT09ZS5raW5kPy5pbnRWYWx1ZSYmbnVsbCE9PWUua2luZD8uaW50VmFsdWUmJihuLmtpbmQ9eyRjYXNlOlwiaW50VmFsdWVcIixpbnRWYWx1ZTplLmtpbmQuaW50VmFsdWV9KSxcImxvbmdWYWx1ZVwiPT09ZS5raW5kPy4kY2FzZSYmdm9pZCAwIT09ZS5raW5kPy5sb25nVmFsdWUmJm51bGwhPT1lLmtpbmQ/LmxvbmdWYWx1ZSYmKG4ua2luZD17JGNhc2U6XCJsb25nVmFsdWVcIixsb25nVmFsdWU6ZS5raW5kLmxvbmdWYWx1ZX0pLFwiZmxvYXRWYWx1ZVwiPT09ZS5raW5kPy4kY2FzZSYmdm9pZCAwIT09ZS5raW5kPy5mbG9hdFZhbHVlJiZudWxsIT09ZS5raW5kPy5mbG9hdFZhbHVlJiYobi5raW5kPXskY2FzZTpcImZsb2F0VmFsdWVcIixmbG9hdFZhbHVlOmUua2luZC5mbG9hdFZhbHVlfSksXCJkb3VibGVWYWx1ZVwiPT09ZS5raW5kPy4kY2FzZSYmdm9pZCAwIT09ZS5raW5kPy5kb3VibGVWYWx1ZSYmbnVsbCE9PWUua2luZD8uZG91YmxlVmFsdWUmJihuLmtpbmQ9eyRjYXNlOlwiZG91YmxlVmFsdWVcIixkb3VibGVWYWx1ZTplLmtpbmQuZG91YmxlVmFsdWV9KSxcImJvb2xWYWx1ZVwiPT09ZS5raW5kPy4kY2FzZSYmdm9pZCAwIT09ZS5raW5kPy5ib29sVmFsdWUmJm51bGwhPT1lLmtpbmQ/LmJvb2xWYWx1ZSYmKG4ua2luZD17JGNhc2U6XCJib29sVmFsdWVcIixib29sVmFsdWU6ZS5raW5kLmJvb2xWYWx1ZX0pLFwic3RyaW5nVmFsdWVcIj09PWUua2luZD8uJGNhc2UmJnZvaWQgMCE9PWUua2luZD8uc3RyaW5nVmFsdWUmJm51bGwhPT1lLmtpbmQ/LnN0cmluZ1ZhbHVlJiYobi5raW5kPXskY2FzZTpcInN0cmluZ1ZhbHVlXCIsc3RyaW5nVmFsdWU6ZS5raW5kLnN0cmluZ1ZhbHVlfSksXCJhbnlWYWx1ZVwiPT09ZS5raW5kPy4kY2FzZSYmdm9pZCAwIT09ZS5raW5kPy5hbnlWYWx1ZSYmbnVsbCE9PWUua2luZD8uYW55VmFsdWUmJihuLmtpbmQ9eyRjYXNlOlwiYW55VmFsdWVcIixhbnlWYWx1ZTphLkFueS5mcm9tUGFydGlhbChlLmtpbmQuYW55VmFsdWUpfSksXCJtYXBWYWx1ZVwiPT09ZS5raW5kPy4kY2FzZSYmdm9pZCAwIT09ZS5raW5kPy5tYXBWYWx1ZSYmbnVsbCE9PWUua2luZD8ubWFwVmFsdWUmJihuLmtpbmQ9eyRjYXNlOlwibWFwVmFsdWVcIixtYXBWYWx1ZTp0Lk1hcFJlY29yZHMuZnJvbVBhcnRpYWwoZS5raW5kLm1hcFZhbHVlKX0pLFwiaW50UGFpclZhbHVlXCI9PT1lLmtpbmQ/LiRjYXNlJiZ2b2lkIDAhPT1lLmtpbmQ/LmludFBhaXJWYWx1ZSYmbnVsbCE9PWUua2luZD8uaW50UGFpclZhbHVlJiYobi5raW5kPXskY2FzZTpcImludFBhaXJWYWx1ZVwiLGludFBhaXJWYWx1ZTplLmtpbmQuaW50UGFpclZhbHVlfSksXCJzdHJpbmdBcnJheVZhbHVlXCI9PT1lLmtpbmQ/LiRjYXNlJiZ2b2lkIDAhPT1lLmtpbmQ/LnN0cmluZ0FycmF5VmFsdWUmJm51bGwhPT1lLmtpbmQ/LnN0cmluZ0FycmF5VmFsdWUmJihuLmtpbmQ9eyRjYXNlOlwic3RyaW5nQXJyYXlWYWx1ZVwiLHN0cmluZ0FycmF5VmFsdWU6dC5TdHJpbmdBcnJheS5mcm9tUGFydGlhbChlLmtpbmQuc3RyaW5nQXJyYXlWYWx1ZSl9KSxufX0sby5kZWZhdWx0LnV0aWwuTG9uZyE9PWkuZGVmYXVsdCYmKG8uZGVmYXVsdC51dGlsLkxvbmc9aS5kZWZhdWx0LG8uZGVmYXVsdC5jb25maWd1cmUoKSl9LDQwMzMxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkFzc2V0PXQuQXNzZXRfQXNzZXRUeXBlPXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO3ZhciBvOyhvPXQuQXNzZXRfQXNzZXRUeXBlfHwodC5Bc3NldF9Bc3NldFR5cGU9e30pKVtvLlVOU0VUPTBdPVwiVU5TRVRcIixvW28uQkxPT1BTX1NUSUNLRVI9MV09XCJCTE9PUFNfU1RJQ0tFUlwiLG9bby5NVVNJQz0yXT1cIk1VU0lDXCIsb1tvLlJBV19NRURJQT0zXT1cIlJBV19NRURJQVwiLG9bby5DQU5WQVNfU1RJQ0tFUj00XT1cIkNBTlZBU19TVElDS0VSXCIsb1tvLkJBU0VfTUVESUE9NV09XCJCQVNFX01FRElBXCIsb1tvLk9WRVJMQVk9Nl09XCJPVkVSTEFZXCIsb1tvLkVESVRTPTddPVwiRURJVFNcIixvW28uRklSU1RfRlJBTUU9OF09XCJGSVJTVF9GUkFNRVwiLG9bby5USFVNQk5BSUw9OV09XCJUSFVNQk5BSUxcIixvW28uQ0FNRU89MTBdPVwiQ0FNRU9cIixvW28uV0VCX1RIVU1CTkFJTD0xMV09XCJXRUJfVEhVTUJOQUlMXCIsb1tvLldFQl9NRURJQT0xMl09XCJXRUJfTUVESUFcIixvW28uTEVOU19BU1NFVD0xM109XCJMRU5TX0FTU0VUXCIsb1tvLlZPSUNFT1ZFUj0xNF09XCJWT0lDRU9WRVJcIixvW28uQVZBVEFSX0lNQUdFPTE1XT1cIkFWQVRBUl9JTUFHRVwiLG9bby5TUEVDVEFDTEVTX1NJWERPRj0xNl09XCJTUEVDVEFDTEVTX1NJWERPRlwiLG9bby5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsdC5Bc3NldD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmlkJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUuaWQpLDAhPT1lLnR5cGUmJnQudWludDMyKDE2KS5pbnQzMihlLnR5cGUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17aWQ6XCJcIix0eXBlOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLmlkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOm8udHlwZT1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtpZDpcIlwiLHR5cGU6MH07cmV0dXJuIHQuaWQ9ZS5pZD8/XCJcIix0LnR5cGU9ZS50eXBlPz8wLHR9fX0sODgxNjg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTWVkaWFSZWZlcmVuY2U9dC5WaWRlb0Rlc2NyaXB0aW9uPXQuTWVkaWFSZWZlcmVuY2VfQ2xhaW1CZWhhdmlvcj10LlZpZGVvRGVzY3JpcHRpb25fVmlkZW9QbGF5YmFja1R5cGU9dC5WaWRlb0Rlc2NyaXB0aW9uX01lZGlhUXVhbGl0eVR5cGU9dm9pZCAwO2NvbnN0IGk9cihuKDQxNTgzKSksbz1yKG4oNjIxMDApKTtmdW5jdGlvbiBhKCl7cmV0dXJue21lZGlhTGlzdElkOlwiMFwiLGNsYWltQmVoYXZpb3I6MCx1cmw6XCJcIixjb250ZW50T2JqZWN0Om5ldyBVaW50OEFycmF5LGxvY2FsQ29udGVudEtleTpcIlwiLGxvY2FsQ2FjaGVLZXk6XCJcIix2aWRlb0Rlc2NyaXB0aW9uOnZvaWQgMCxtZWRpYVR5cGU6MH19dmFyIHMsYyxsOyhsPXQuVmlkZW9EZXNjcmlwdGlvbl9NZWRpYVF1YWxpdHlUeXBlfHwodC5WaWRlb0Rlc2NyaXB0aW9uX01lZGlhUXVhbGl0eVR5cGU9e30pKVtsLk1FRElBX1FVQUxJVFlfVFlQRV9VTktOT1dOPTBdPVwiTUVESUFfUVVBTElUWV9UWVBFX1VOS05PV05cIixsW2wuTUVESUFfUVVBTElUWV9UWVBFX0xFVkVMXzE9MTAwXT1cIk1FRElBX1FVQUxJVFlfVFlQRV9MRVZFTF8xXCIsbFtsLk1FRElBX1FVQUxJVFlfVFlQRV9MRVZFTF8yPTIwMF09XCJNRURJQV9RVUFMSVRZX1RZUEVfTEVWRUxfMlwiLGxbbC5NRURJQV9RVUFMSVRZX1RZUEVfTEVWRUxfMz0zMDBdPVwiTUVESUFfUVVBTElUWV9UWVBFX0xFVkVMXzNcIixsW2wuTUVESUFfUVVBTElUWV9UWVBFX0xFVkVMXzQ9NDAwXT1cIk1FRElBX1FVQUxJVFlfVFlQRV9MRVZFTF80XCIsbFtsLk1FRElBX1FVQUxJVFlfVFlQRV9MRVZFTF81PTUwMF09XCJNRURJQV9RVUFMSVRZX1RZUEVfTEVWRUxfNVwiLGxbbC5NRURJQV9RVUFMSVRZX1RZUEVfTEVWRUxfNj02MDBdPVwiTUVESUFfUVVBTElUWV9UWVBFX0xFVkVMXzZcIixsW2wuTUVESUFfUVVBTElUWV9UWVBFX0xFVkVMXzc9NzAwXT1cIk1FRElBX1FVQUxJVFlfVFlQRV9MRVZFTF83XCIsbFtsLk1FRElBX1FVQUxJVFlfVFlQRV9MRVZFTF9NQVg9NWUzXT1cIk1FRElBX1FVQUxJVFlfVFlQRV9MRVZFTF9NQVhcIixsW2wuTUVESUFfUVVBTElUWV9UWVBFX0xFVkVMXzRfNT00NTBdPVwiTUVESUFfUVVBTElUWV9UWVBFX0xFVkVMXzRfNVwiLGxbbC5NRURJQV9RVUFMSVRZX1RZUEVfTEVWRUxfMl8xPTIxMF09XCJNRURJQV9RVUFMSVRZX1RZUEVfTEVWRUxfMl8xXCIsbFtsLk1FRElBX1FVQUxJVFlfVFlQRV9MRVZFTF8yXzI9MjIwXT1cIk1FRElBX1FVQUxJVFlfVFlQRV9MRVZFTF8yXzJcIixsW2wuTUVESUFfUVVBTElUWV9UWVBFX0xFVkVMXzJfNT0yNTBdPVwiTUVESUFfUVVBTElUWV9UWVBFX0xFVkVMXzJfNVwiLGxbbC5NRURJQV9RVUFMSVRZX1RZUEVfTEVWRUxfM18yPTMyMF09XCJNRURJQV9RVUFMSVRZX1RZUEVfTEVWRUxfM18yXCIsbFtsLk1FRElBX1FVQUxJVFlfVFlQRV9MRVZFTF8zXzU9MzUwXT1cIk1FRElBX1FVQUxJVFlfVFlQRV9MRVZFTF8zXzVcIixsW2wuTUVESUFfUVVBTElUWV9UWVBFX0xFVkVMXzJfNz0yNzBdPVwiTUVESUFfUVVBTElUWV9UWVBFX0xFVkVMXzJfN1wiLGxbbC5NRURJQV9RVUFMSVRZX1RZUEVfTEVWRUxfNl81PTY1MF09XCJNRURJQV9RVUFMSVRZX1RZUEVfTEVWRUxfNl81XCIsbFtsLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwoYz10LlZpZGVvRGVzY3JpcHRpb25fVmlkZW9QbGF5YmFja1R5cGV8fCh0LlZpZGVvRGVzY3JpcHRpb25fVmlkZW9QbGF5YmFja1R5cGU9e30pKVtjLlVOS05PV05fVklERU9fUExBWUJBQ0tfVFlQRT0wXT1cIlVOS05PV05fVklERU9fUExBWUJBQ0tfVFlQRVwiLGNbYy5GQVNUU1RBUlRfRElTQUJMRUQ9MV09XCJGQVNUU1RBUlRfRElTQUJMRURcIixjW2MuRkFTVFNUQVJUX0VOQUJMRUQ9Ml09XCJGQVNUU1RBUlRfRU5BQkxFRFwiLGNbYy5IVFRQX1NUUkVBTUlOR19EQVNIPTNdPVwiSFRUUF9TVFJFQU1JTkdfREFTSFwiLGNbYy5IVFRQX1NUUkVBTUlOR19ITFM9NF09XCJIVFRQX1NUUkVBTUlOR19ITFNcIixjW2MuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLChzPXQuTWVkaWFSZWZlcmVuY2VfQ2xhaW1CZWhhdmlvcnx8KHQuTWVkaWFSZWZlcmVuY2VfQ2xhaW1CZWhhdmlvcj17fSkpW3MuQ0FOX0VYVEVORF9NRURJQV9DTEFJTT0wXT1cIkNBTl9FWFRFTkRfTUVESUFfQ0xBSU1cIixzW3MuRE9fTk9UX0NMQUlNPTFdPVwiRE9fTk9UX0NMQUlNXCIsc1tzLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0LlZpZGVvRGVzY3JpcHRpb249e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUubWVkaWFRdWFsaXR5VHlwZSYmdC51aW50MzIoMTYpLmludDMyKGUubWVkaWFRdWFsaXR5VHlwZSksMCE9PWUudmlkZW9QbGF5YmFja1R5cGUmJnQudWludDMyKDgpLmludDMyKGUudmlkZW9QbGF5YmFja1R5cGUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17bWVkaWFRdWFsaXR5VHlwZTowLHZpZGVvUGxheWJhY2tUeXBlOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMjppLm1lZGlhUXVhbGl0eVR5cGU9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMTppLnZpZGVvUGxheWJhY2tUeXBlPW4uaW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e21lZGlhUXVhbGl0eVR5cGU6MCx2aWRlb1BsYXliYWNrVHlwZTowfTtyZXR1cm4gdC5tZWRpYVF1YWxpdHlUeXBlPWUubWVkaWFRdWFsaXR5VHlwZT8/MCx0LnZpZGVvUGxheWJhY2tUeXBlPWUudmlkZW9QbGF5YmFja1R5cGU/PzAsdH19LHQuTWVkaWFSZWZlcmVuY2U9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIjBcIiE9PWUubWVkaWFMaXN0SWQmJm4udWludDMyKDQ4KS5pbnQ2NChlLm1lZGlhTGlzdElkKSwwIT09ZS5jbGFpbUJlaGF2aW9yJiZuLnVpbnQzMig1NikuaW50MzIoZS5jbGFpbUJlaGF2aW9yKSxcIlwiIT09ZS51cmwmJm4udWludDMyKDE4KS5zdHJpbmcoZS51cmwpLDAhPT1lLmNvbnRlbnRPYmplY3QubGVuZ3RoJiZuLnVpbnQzMigyNikuYnl0ZXMoZS5jb250ZW50T2JqZWN0KSxcIlwiIT09ZS5sb2NhbENvbnRlbnRLZXkmJm4udWludDMyKDc0KS5zdHJpbmcoZS5sb2NhbENvbnRlbnRLZXkpLFwiXCIhPT1lLmxvY2FsQ2FjaGVLZXkmJm4udWludDMyKDgyKS5zdHJpbmcoZS5sb2NhbENhY2hlS2V5KSx2b2lkIDAhPT1lLnZpZGVvRGVzY3JpcHRpb24mJnQuVmlkZW9EZXNjcmlwdGlvbi5lbmNvZGUoZS52aWRlb0Rlc2NyaXB0aW9uLG4udWludDMyKDQyKS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLm1lZGlhVHlwZSYmbi51aW50MzIoNjQpLmludDMyKGUubWVkaWFUeXBlKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IHM9YSgpO2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgNjpzLm1lZGlhTGlzdElkPXIuaW50NjQoKS50b1N0cmluZygpO2JyZWFrO2Nhc2UgNzpzLmNsYWltQmVoYXZpb3I9ci5pbnQzMigpO2JyZWFrO2Nhc2UgMjpzLnVybD1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMzpzLmNvbnRlbnRPYmplY3Q9ci5ieXRlcygpO2JyZWFrO2Nhc2UgOTpzLmxvY2FsQ29udGVudEtleT1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMTA6cy5sb2NhbENhY2hlS2V5PXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSA1OnMudmlkZW9EZXNjcmlwdGlvbj10LlZpZGVvRGVzY3JpcHRpb24uZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSA4OnMubWVkaWFUeXBlPXIuaW50MzIoKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIHN9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49YSgpO3JldHVybiBuLm1lZGlhTGlzdElkPWUubWVkaWFMaXN0SWQ/P1wiMFwiLG4uY2xhaW1CZWhhdmlvcj1lLmNsYWltQmVoYXZpb3I/PzAsbi51cmw9ZS51cmw/P1wiXCIsbi5jb250ZW50T2JqZWN0PWUuY29udGVudE9iamVjdD8/bmV3IFVpbnQ4QXJyYXksbi5sb2NhbENvbnRlbnRLZXk9ZS5sb2NhbENvbnRlbnRLZXk/P1wiXCIsbi5sb2NhbENhY2hlS2V5PWUubG9jYWxDYWNoZUtleT8/XCJcIixuLnZpZGVvRGVzY3JpcHRpb249dm9pZCAwIT09ZS52aWRlb0Rlc2NyaXB0aW9uJiZudWxsIT09ZS52aWRlb0Rlc2NyaXB0aW9uP3QuVmlkZW9EZXNjcmlwdGlvbi5mcm9tUGFydGlhbChlLnZpZGVvRGVzY3JpcHRpb24pOnZvaWQgMCxuLm1lZGlhVHlwZT1lLm1lZGlhVHlwZT8/MCxufX0sby5kZWZhdWx0LnV0aWwuTG9uZyE9PWkuZGVmYXVsdCYmKG8uZGVmYXVsdC51dGlsLkxvbmc9aS5kZWZhdWx0LG8uZGVmYXVsdC5jb25maWd1cmUoKSl9LDIxMjk5OihlLHQpPT57dmFyIG4scjt0LkMwPXQuREQ9dm9pZCAwLChyPXQuRER8fCh0LkREPXt9KSlbci5VbmFzc2lnbmVkPTBdPVwiVW5hc3NpZ25lZFwiLHJbci5PdmVybGF5PTFdPVwiT3ZlcmxheVwiLHJbci5JbWFnZT0yXT1cIkltYWdlXCIscltyLlZpZGVvPTNdPVwiVmlkZW9cIixyW3IuQXNzZXRCdW5kbGU9NF09XCJBc3NldEJ1bmRsZVwiLHJbci5BdWRpbz01XT1cIkF1ZGlvXCIscltyLkFuaW1hdGVkSW1hZ2U9Nl09XCJBbmltYXRlZEltYWdlXCIscltyLkZvbnQ9N109XCJGb250XCIscltyLldlYlZpZXdDb250ZW50PThdPVwiV2ViVmlld0NvbnRlbnRcIixyW3IuVmlkZW9Ob0F1ZGlvPTldPVwiVmlkZW9Ob0F1ZGlvXCIscltyLlN1YnRpdGxlcz0xMF09XCJTdWJ0aXRsZXNcIixyW3IuRGF0YUJsb2I9MTFdPVwiRGF0YUJsb2JcIixyW3IuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLChuPXQuQzB8fCh0LkMwPXt9KSlbbi5CaXRtb2ppPTBdPVwiQml0bW9qaVwiLG5bbi5MZW5zSW1hZ2VzPTFdPVwiTGVuc0ltYWdlc1wiLG5bbi5TdGlja2Vycz0yXT1cIlN0aWNrZXJzXCIsbltuLkNoYXRTbmFwPTNdPVwiQ2hhdFNuYXBcIixuW24uRnJpZW5kU3RvcnlTbmFwPTRdPVwiRnJpZW5kU3RvcnlTbmFwXCIsbltuLlRlbXBVbmFzc2lnbmVkPTVdPVwiVGVtcFVuYXNzaWduZWRcIixuW24uRnJpZW5kU3RvcnlUaHVtYm5haWw9Nl09XCJGcmllbmRTdG9yeVRodW1ibmFpbFwiLG5bbi5SZWNvbW1lbmRlZFN0b3J5VGh1bWJuYWlsPTddPVwiUmVjb21tZW5kZWRTdG9yeVRodW1ibmFpbFwiLG5bbi5Db2duYWNJbWFnZXM9OF09XCJDb2duYWNJbWFnZXNcIixuW24uQ29tbWVyY2VJbWFnZXM9OV09XCJDb21tZXJjZUltYWdlc1wiLG5bbi5BZHM9MTBdPVwiQWRzXCIsbltuLkNvbXBvc2VySW1hZ2VzPTExXT1cIkNvbXBvc2VySW1hZ2VzXCIsbltuLkxlbnM9MTJdPVwiTGVuc1wiLG5bbi5PbkRlbWFuZD0xM109XCJPbkRlbWFuZFwiLG5bbi5PbmJvYXJkaW5nPTE0XT1cIk9uYm9hcmRpbmdcIixuW24uQmxvb3BzPTE1XT1cIkJsb29wc1wiLG5bbi5SZWNvbW1lbmRlZFVzZXJTdG9yeVNuYXA9MTZdPVwiUmVjb21tZW5kZWRVc2VyU3RvcnlTbmFwXCIsbltuLkxvY2FsaXphdGlvblN0cmluZ3M9MTddPVwiTG9jYWxpemF0aW9uU3RyaW5nc1wiLG5bbi5NdXNpYz0xOF09XCJNdXNpY1wiLG5bbi5NZW1vcmllc1NuYXA9MTldPVwiTWVtb3JpZXNTbmFwXCIsbltuLlB1Ymxpc2hlclN0b3J5U25hcD0yMF09XCJQdWJsaXNoZXJTdG9yeVNuYXBcIixuW24uR2lwaHlTdGlja2Vycz0yMV09XCJHaXBoeVN0aWNrZXJzXCIsbltuLlVHQ0xlbnNBc3NldHM9MjJdPVwiVUdDTGVuc0Fzc2V0c1wiLG5bbi5GcmllbmRTdG9yeUZpcnN0RnJhbWU9MjNdPVwiRnJpZW5kU3RvcnlGaXJzdEZyYW1lXCIsbltuLlJlY29tbWVuZGVkVXNlclN0b3J5Rmlyc3RGcmFtZT0yNF09XCJSZWNvbW1lbmRlZFVzZXJTdG9yeUZpcnN0RnJhbWVcIixuW24uR2VvZmlsdGVyPTI1XT1cIkdlb2ZpbHRlclwiLG5bbi5NZW1vcmllc1RodW1ibmFpbD0yNl09XCJNZW1vcmllc1RodW1ibmFpbFwiLG5bbi5MZW5zQml0bW9qaT0yN109XCJMZW5zQml0bW9qaVwiLG5bbi5QdWJsaXNoZXJTdG9yeUZpcnN0RnJhbWU9MjhdPVwiUHVibGlzaGVyU3RvcnlGaXJzdEZyYW1lXCIsbltuLk1hcHM9MjldPVwiTWFwc1wiLG5bbi5TbmFwc2hvdHM9MzBdPVwiU25hcHNob3RzXCIsbltuLlN5c3RlbVRlc3RJbWFnZXM9MzFdPVwiU3lzdGVtVGVzdEltYWdlc1wiLG5bbi5TeXN0ZW1UZXN0VmlkZW9zPTMyXT1cIlN5c3RlbVRlc3RWaWRlb3NcIixuW24uQVJCdXNpbmVzcz0zM109XCJBUkJ1c2luZXNzXCIsbltuLlByZXZpZXdTbmFwPTM0XT1cIlByZXZpZXdTbmFwXCIsbltuLlNwZWN0YWNsZXM9MzVdPVwiU3BlY3RhY2xlc1wiLG5bbi5DaGVlcmlvcz0zNl09XCJDaGVlcmlvc1wiLG5bbi5FeHBvcnRlZE1lZGlhU2hhcmU9MzddPVwiRXhwb3J0ZWRNZWRpYVNoYXJlXCIsbltuLkluY2x1c2lvblBhbmVsU3VydmV5PTM4XT1cIkluY2x1c2lvblBhbmVsU3VydmV5XCIsbltuLkNvbW11bml0aWVzPTM5XT1cIkNvbW11bml0aWVzXCIsbltuLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIn0sNTUyMzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5UaW1lUmFuZ2U9dC5Ib3Vycz10LkFkZHJlc3M9dC5WZW51ZU92ZXJyaWRlc19Ib3Vyc0VudHJ5PXQuVmVudWVPdmVycmlkZXM9dC5IdG1sX0lubGluZUh0bWw9dC5IdG1sPXQuU2l6ZTJpPXQuUG9pbnQyZj10Lkdlb0xvY2F0aW9uPXQuSW1hZ2VfSW1hZ2VSZWZlcmVuY2U9dC5JbWFnZV9FbmNyeXB0ZWRJbWFnZT10LkltYWdlX0lubGluZUltYWdlPXQuSW1hZ2U9dC5Hcm91cE1lc3NhZ2VJZGVudGlmaWVyPXQuQ29udGV4dEZpZWxkPXQuSW1hZ2VfSW5saW5lSW1hZ2VfSW1hZ2VUeXBlPXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO2Z1bmN0aW9uIG8oKXtyZXR1cm57aW1hZ2VEYXRhOm5ldyBVaW50OEFycmF5LGltYWdlVHlwZTowfX12YXIgYTsoYT10LkltYWdlX0lubGluZUltYWdlX0ltYWdlVHlwZXx8KHQuSW1hZ2VfSW5saW5lSW1hZ2VfSW1hZ2VUeXBlPXt9KSlbYS5KUEVHPTBdPVwiSlBFR1wiLGFbYS5QTkc9MV09XCJQTkdcIixhW2EuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLHQuQ29udGV4dEZpZWxkPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUubmFtZSYmdC51aW50MzIoMTApLnN0cmluZyhlLm5hbWUpLFwiXCIhPT1lLnZhbHVlJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUudmFsdWUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17bmFtZTpcIlwiLHZhbHVlOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLm5hbWU9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6by52YWx1ZT1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17bmFtZTpcIlwiLHZhbHVlOlwiXCJ9O3JldHVybiB0Lm5hbWU9ZS5uYW1lPz9cIlwiLHQudmFsdWU9ZS52YWx1ZT8/XCJcIix0fX0sdC5Hcm91cE1lc3NhZ2VJZGVudGlmaWVyPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUubWVzc2FnZUlkJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUubWVzc2FnZUlkKSxcIlwiIT09ZS5ncm91cElkJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuZ3JvdXBJZCksXCJcIiE9PWUuc2VuZGVyVXNlcm5hbWUmJnQudWludDMyKDI2KS5zdHJpbmcoZS5zZW5kZXJVc2VybmFtZSksXCJcIiE9PWUuc2VuZGVyVXNlcklkJiZ0LnVpbnQzMigzNCkuc3RyaW5nKGUuc2VuZGVyVXNlcklkKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e21lc3NhZ2VJZDpcIlwiLGdyb3VwSWQ6XCJcIixzZW5kZXJVc2VybmFtZTpcIlwiLHNlbmRlclVzZXJJZDpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5tZXNzYWdlSWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6by5ncm91cElkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOm8uc2VuZGVyVXNlcm5hbWU9bi5zdHJpbmcoKTticmVhaztjYXNlIDQ6by5zZW5kZXJVc2VySWQ9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e21lc3NhZ2VJZDpcIlwiLGdyb3VwSWQ6XCJcIixzZW5kZXJVc2VybmFtZTpcIlwiLHNlbmRlclVzZXJJZDpcIlwifTtyZXR1cm4gdC5tZXNzYWdlSWQ9ZS5tZXNzYWdlSWQ/P1wiXCIsdC5ncm91cElkPWUuZ3JvdXBJZD8/XCJcIix0LnNlbmRlclVzZXJuYW1lPWUuc2VuZGVyVXNlcm5hbWU/P1wiXCIsdC5zZW5kZXJVc2VySWQ9ZS5zZW5kZXJVc2VySWQ/P1wiXCIsdH19LHQuSW1hZ2U9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cImltYWdlVXJsXCI9PT1lLmNvbnRlbnQ/LiRjYXNlJiZuLnVpbnQzMigxMCkuc3RyaW5nKGUuY29udGVudC5pbWFnZVVybCksXCJpbmxpbmVJbWFnZVwiPT09ZS5jb250ZW50Py4kY2FzZSYmdC5JbWFnZV9JbmxpbmVJbWFnZS5lbmNvZGUoZS5jb250ZW50LmlubGluZUltYWdlLG4udWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLFwiaW1hZ2VSZWZlcmVuY2VcIj09PWUuY29udGVudD8uJGNhc2UmJnQuSW1hZ2VfSW1hZ2VSZWZlcmVuY2UuZW5jb2RlKGUuY29udGVudC5pbWFnZVJlZmVyZW5jZSxuLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSxcImVuY3J5cHRlZEltYWdlXCI9PT1lLmNvbnRlbnQ/LiRjYXNlJiZ0LkltYWdlX0VuY3J5cHRlZEltYWdlLmVuY29kZShlLmNvbnRlbnQuZW5jcnlwdGVkSW1hZ2Usbi51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCksMCE9PWUuc2NhbGVGYWN0b3ImJm4udWludDMyKDQ1KS5mbG9hdChlLnNjYWxlRmFjdG9yKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IG89dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGE9e2NvbnRlbnQ6dm9pZCAwLHNjYWxlRmFjdG9yOjB9O2Zvcig7ci5wb3M8bzspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLmNvbnRlbnQ9eyRjYXNlOlwiaW1hZ2VVcmxcIixpbWFnZVVybDpyLnN0cmluZygpfTticmVhaztjYXNlIDI6YS5jb250ZW50PXskY2FzZTpcImlubGluZUltYWdlXCIsaW5saW5lSW1hZ2U6dC5JbWFnZV9JbmxpbmVJbWFnZS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAzOmEuY29udGVudD17JGNhc2U6XCJpbWFnZVJlZmVyZW5jZVwiLGltYWdlUmVmZXJlbmNlOnQuSW1hZ2VfSW1hZ2VSZWZlcmVuY2UuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgNDphLmNvbnRlbnQ9eyRjYXNlOlwiZW5jcnlwdGVkSW1hZ2VcIixlbmNyeXB0ZWRJbWFnZTp0LkltYWdlX0VuY3J5cHRlZEltYWdlLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDU6YS5zY2FsZUZhY3Rvcj1yLmZsb2F0KCk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtjb250ZW50OnZvaWQgMCxzY2FsZUZhY3RvcjowfTtyZXR1cm5cImltYWdlVXJsXCI9PT1lLmNvbnRlbnQ/LiRjYXNlJiZ2b2lkIDAhPT1lLmNvbnRlbnQ/LmltYWdlVXJsJiZudWxsIT09ZS5jb250ZW50Py5pbWFnZVVybCYmKG4uY29udGVudD17JGNhc2U6XCJpbWFnZVVybFwiLGltYWdlVXJsOmUuY29udGVudC5pbWFnZVVybH0pLFwiaW5saW5lSW1hZ2VcIj09PWUuY29udGVudD8uJGNhc2UmJnZvaWQgMCE9PWUuY29udGVudD8uaW5saW5lSW1hZ2UmJm51bGwhPT1lLmNvbnRlbnQ/LmlubGluZUltYWdlJiYobi5jb250ZW50PXskY2FzZTpcImlubGluZUltYWdlXCIsaW5saW5lSW1hZ2U6dC5JbWFnZV9JbmxpbmVJbWFnZS5mcm9tUGFydGlhbChlLmNvbnRlbnQuaW5saW5lSW1hZ2UpfSksXCJpbWFnZVJlZmVyZW5jZVwiPT09ZS5jb250ZW50Py4kY2FzZSYmdm9pZCAwIT09ZS5jb250ZW50Py5pbWFnZVJlZmVyZW5jZSYmbnVsbCE9PWUuY29udGVudD8uaW1hZ2VSZWZlcmVuY2UmJihuLmNvbnRlbnQ9eyRjYXNlOlwiaW1hZ2VSZWZlcmVuY2VcIixpbWFnZVJlZmVyZW5jZTp0LkltYWdlX0ltYWdlUmVmZXJlbmNlLmZyb21QYXJ0aWFsKGUuY29udGVudC5pbWFnZVJlZmVyZW5jZSl9KSxcImVuY3J5cHRlZEltYWdlXCI9PT1lLmNvbnRlbnQ/LiRjYXNlJiZ2b2lkIDAhPT1lLmNvbnRlbnQ/LmVuY3J5cHRlZEltYWdlJiZudWxsIT09ZS5jb250ZW50Py5lbmNyeXB0ZWRJbWFnZSYmKG4uY29udGVudD17JGNhc2U6XCJlbmNyeXB0ZWRJbWFnZVwiLGVuY3J5cHRlZEltYWdlOnQuSW1hZ2VfRW5jcnlwdGVkSW1hZ2UuZnJvbVBhcnRpYWwoZS5jb250ZW50LmVuY3J5cHRlZEltYWdlKX0pLG4uc2NhbGVGYWN0b3I9ZS5zY2FsZUZhY3Rvcj8/MCxufX0sdC5JbWFnZV9JbmxpbmVJbWFnZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5pbWFnZURhdGEubGVuZ3RoJiZ0LnVpbnQzMigxMCkuYnl0ZXMoZS5pbWFnZURhdGEpLDAhPT1lLmltYWdlVHlwZSYmdC51aW50MzIoMTYpLmludDMyKGUuaW1hZ2VUeXBlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGE9bygpO2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLmltYWdlRGF0YT1uLmJ5dGVzKCk7YnJlYWs7Y2FzZSAyOmEuaW1hZ2VUeXBlPW4uaW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9bygpO3JldHVybiB0LmltYWdlRGF0YT1lLmltYWdlRGF0YT8/bmV3IFVpbnQ4QXJyYXksdC5pbWFnZVR5cGU9ZS5pbWFnZVR5cGU/PzAsdH19LHQuSW1hZ2VfRW5jcnlwdGVkSW1hZ2U9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5rZXkmJm4udWludDMyKDE4KS5zdHJpbmcoZS5rZXkpLFwiXCIhPT1lLml2JiZuLnVpbnQzMigyNikuc3RyaW5nKGUuaXYpLFwiaW1hZ2VVcmxcIj09PWUuc291cmNlPy4kY2FzZSYmbi51aW50MzIoMzQpLnN0cmluZyhlLnNvdXJjZS5pbWFnZVVybCksXCJpbmxpbmVJbWFnZVwiPT09ZS5zb3VyY2U/LiRjYXNlJiZ0LkltYWdlX0lubGluZUltYWdlLmVuY29kZShlLnNvdXJjZS5pbmxpbmVJbWFnZSxuLnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IG89dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGE9e2tleTpcIlwiLGl2OlwiXCIsc291cmNlOnZvaWQgMH07Zm9yKDtyLnBvczxvOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAyOmEua2V5PXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmEuaXY9ci5zdHJpbmcoKTticmVhaztjYXNlIDQ6YS5zb3VyY2U9eyRjYXNlOlwiaW1hZ2VVcmxcIixpbWFnZVVybDpyLnN0cmluZygpfTticmVhaztjYXNlIDU6YS5zb3VyY2U9eyRjYXNlOlwiaW5saW5lSW1hZ2VcIixpbmxpbmVJbWFnZTp0LkltYWdlX0lubGluZUltYWdlLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e2tleTpcIlwiLGl2OlwiXCIsc291cmNlOnZvaWQgMH07cmV0dXJuIG4ua2V5PWUua2V5Pz9cIlwiLG4uaXY9ZS5pdj8/XCJcIixcImltYWdlVXJsXCI9PT1lLnNvdXJjZT8uJGNhc2UmJnZvaWQgMCE9PWUuc291cmNlPy5pbWFnZVVybCYmbnVsbCE9PWUuc291cmNlPy5pbWFnZVVybCYmKG4uc291cmNlPXskY2FzZTpcImltYWdlVXJsXCIsaW1hZ2VVcmw6ZS5zb3VyY2UuaW1hZ2VVcmx9KSxcImlubGluZUltYWdlXCI9PT1lLnNvdXJjZT8uJGNhc2UmJnZvaWQgMCE9PWUuc291cmNlPy5pbmxpbmVJbWFnZSYmbnVsbCE9PWUuc291cmNlPy5pbmxpbmVJbWFnZSYmKG4uc291cmNlPXskY2FzZTpcImlubGluZUltYWdlXCIsaW5saW5lSW1hZ2U6dC5JbWFnZV9JbmxpbmVJbWFnZS5mcm9tUGFydGlhbChlLnNvdXJjZS5pbmxpbmVJbWFnZSl9KSxufX0sdC5JbWFnZV9JbWFnZVJlZmVyZW5jZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnJlc291cmNlSWQmJnQudWludDMyKDEwKS5zdHJpbmcoZS5yZXNvdXJjZUlkKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e3Jlc291cmNlSWQ6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP28ucmVzb3VyY2VJZD1uLnN0cmluZygpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17cmVzb3VyY2VJZDpcIlwifTtyZXR1cm4gdC5yZXNvdXJjZUlkPWUucmVzb3VyY2VJZD8/XCJcIix0fX0sdC5HZW9Mb2NhdGlvbj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5sYXQmJnQudWludDMyKDEzKS5mbG9hdChlLmxhdCksMCE9PWUubG5nJiZ0LnVpbnQzMigyMSkuZmxvYXQoZS5sbmcpLDAhPT1lLmFsdGl0dWRlJiZ0LnVpbnQzMigyOSkuZmxvYXQoZS5hbHRpdHVkZSksMCE9PWUucmFkaXVzJiZ0LnVpbnQzMigzNykuZmxvYXQoZS5yYWRpdXMpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17bGF0OjAsbG5nOjAsYWx0aXR1ZGU6MCxyYWRpdXM6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8ubGF0PW4uZmxvYXQoKTticmVhaztjYXNlIDI6by5sbmc9bi5mbG9hdCgpO2JyZWFrO2Nhc2UgMzpvLmFsdGl0dWRlPW4uZmxvYXQoKTticmVhaztjYXNlIDQ6by5yYWRpdXM9bi5mbG9hdCgpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17bGF0OjAsbG5nOjAsYWx0aXR1ZGU6MCxyYWRpdXM6MH07cmV0dXJuIHQubGF0PWUubGF0Pz8wLHQubG5nPWUubG5nPz8wLHQuYWx0aXR1ZGU9ZS5hbHRpdHVkZT8/MCx0LnJhZGl1cz1lLnJhZGl1cz8/MCx0fX0sdC5Qb2ludDJmPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLngmJnQudWludDMyKDEzKS5mbG9hdChlLngpLDAhPT1lLnkmJnQudWludDMyKDIxKS5mbG9hdChlLnkpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17eDowLHk6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8ueD1uLmZsb2F0KCk7YnJlYWs7Y2FzZSAyOm8ueT1uLmZsb2F0KCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt4OjAseTowfTtyZXR1cm4gdC54PWUueD8/MCx0Lnk9ZS55Pz8wLHR9fSx0LlNpemUyaT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5oZWlnaHQmJnQudWludDMyKDgpLnVpbnQzMihlLmhlaWdodCksMCE9PWUud2lkdGgmJnQudWludDMyKDE2KS51aW50MzIoZS53aWR0aCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXtoZWlnaHQ6MCx3aWR0aDowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5oZWlnaHQ9bi51aW50MzIoKTticmVhaztjYXNlIDI6by53aWR0aD1uLnVpbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17aGVpZ2h0OjAsd2lkdGg6MH07cmV0dXJuIHQuaGVpZ2h0PWUuaGVpZ2h0Pz8wLHQud2lkdGg9ZS53aWR0aD8/MCx0fX0sdC5IdG1sPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJ1cmxcIj09PWUuY29udGVudD8uJGNhc2UmJm4udWludDMyKDEwKS5zdHJpbmcoZS5jb250ZW50LnVybCksXCJsb2NhbEh0bWxcIj09PWUuY29udGVudD8uJGNhc2UmJnQuSHRtbF9JbmxpbmVIdG1sLmVuY29kZShlLmNvbnRlbnQubG9jYWxIdG1sLG4udWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgbz12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3QgYT17Y29udGVudDp2b2lkIDB9O2Zvcig7ci5wb3M8bzspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLmNvbnRlbnQ9eyRjYXNlOlwidXJsXCIsdXJsOnIuc3RyaW5nKCl9O2JyZWFrO2Nhc2UgMjphLmNvbnRlbnQ9eyRjYXNlOlwibG9jYWxIdG1sXCIsbG9jYWxIdG1sOnQuSHRtbF9JbmxpbmVIdG1sLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e2NvbnRlbnQ6dm9pZCAwfTtyZXR1cm5cInVybFwiPT09ZS5jb250ZW50Py4kY2FzZSYmdm9pZCAwIT09ZS5jb250ZW50Py51cmwmJm51bGwhPT1lLmNvbnRlbnQ/LnVybCYmKG4uY29udGVudD17JGNhc2U6XCJ1cmxcIix1cmw6ZS5jb250ZW50LnVybH0pLFwibG9jYWxIdG1sXCI9PT1lLmNvbnRlbnQ/LiRjYXNlJiZ2b2lkIDAhPT1lLmNvbnRlbnQ/LmxvY2FsSHRtbCYmbnVsbCE9PWUuY29udGVudD8ubG9jYWxIdG1sJiYobi5jb250ZW50PXskY2FzZTpcImxvY2FsSHRtbFwiLGxvY2FsSHRtbDp0Lkh0bWxfSW5saW5lSHRtbC5mcm9tUGFydGlhbChlLmNvbnRlbnQubG9jYWxIdG1sKX0pLG59fSx0Lkh0bWxfSW5saW5lSHRtbD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmh0bWwmJnQudWludDMyKDEwKS5zdHJpbmcoZS5odG1sKSxcIlwiIT09ZS5iYXNlVXJsJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuYmFzZVVybCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXtodG1sOlwiXCIsYmFzZVVybDpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5odG1sPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOm8uYmFzZVVybD1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17aHRtbDpcIlwiLGJhc2VVcmw6XCJcIn07cmV0dXJuIHQuaHRtbD1lLmh0bWw/P1wiXCIsdC5iYXNlVXJsPWUuYmFzZVVybD8/XCJcIix0fX0sdC5WZW51ZU92ZXJyaWRlcz17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO1wiXCIhPT1lLm5hbWUmJm4udWludDMyKDEwKS5zdHJpbmcoZS5uYW1lKSxcIlwiIT09ZS53ZWJzaXRlVXJsJiZuLnVpbnQzMigxOCkuc3RyaW5nKGUud2Vic2l0ZVVybCksXCJcIiE9PWUucGhvbmVOdW1iZXImJm4udWludDMyKDI2KS5zdHJpbmcoZS5waG9uZU51bWJlciksdm9pZCAwIT09ZS5sb2NhdGlvbiYmdC5HZW9Mb2NhdGlvbi5lbmNvZGUoZS5sb2NhdGlvbixuLnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKTtmb3IoY29uc3QgdCBvZiBlLmNhdGVnb3JpZXMpbi51aW50MzIoNDIpLnN0cmluZyh0KTtyZXR1cm5cIlwiIT09ZS5jYXRlZ29yeURpc3BsYXlOYW1lJiZuLnVpbnQzMig1MCkuc3RyaW5nKGUuY2F0ZWdvcnlEaXNwbGF5TmFtZSksdm9pZCAwIT09ZS5hZGRyZXNzJiZ0LkFkZHJlc3MuZW5jb2RlKGUuYWRkcmVzcyxuLnVpbnQzMig1OCkuZm9yaygpKS5sZGVsaW0oKSxPYmplY3QuZW50cmllcyhlLmhvdXJzKS5mb3JFYWNoKChlPT57bGV0W3IsaV09ZTt0LlZlbnVlT3ZlcnJpZGVzX0hvdXJzRW50cnkuZW5jb2RlKHtrZXk6cix2YWx1ZTppfSxuLnVpbnQzMig2NikuZm9yaygpKS5sZGVsaW0oKX0pKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IG89dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGE9e25hbWU6XCJcIix3ZWJzaXRlVXJsOlwiXCIscGhvbmVOdW1iZXI6XCJcIixsb2NhdGlvbjp2b2lkIDAsY2F0ZWdvcmllczpbXSxjYXRlZ29yeURpc3BsYXlOYW1lOlwiXCIsYWRkcmVzczp2b2lkIDAsaG91cnM6e319O2Zvcig7ci5wb3M8bzspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLm5hbWU9ci5zdHJpbmcoKTticmVhaztjYXNlIDI6YS53ZWJzaXRlVXJsPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmEucGhvbmVOdW1iZXI9ci5zdHJpbmcoKTticmVhaztjYXNlIDQ6YS5sb2NhdGlvbj10Lkdlb0xvY2F0aW9uLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgNTphLmNhdGVnb3JpZXMucHVzaChyLnN0cmluZygpKTticmVhaztjYXNlIDY6YS5jYXRlZ29yeURpc3BsYXlOYW1lPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSA3OmEuYWRkcmVzcz10LkFkZHJlc3MuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSA4OmNvbnN0IG49dC5WZW51ZU92ZXJyaWRlc19Ib3Vyc0VudHJ5LmRlY29kZShyLHIudWludDMyKCkpO3ZvaWQgMCE9PW4udmFsdWUmJihhLmhvdXJzW24ua2V5XT1uLnZhbHVlKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e25hbWU6XCJcIix3ZWJzaXRlVXJsOlwiXCIscGhvbmVOdW1iZXI6XCJcIixsb2NhdGlvbjp2b2lkIDAsY2F0ZWdvcmllczpbXSxjYXRlZ29yeURpc3BsYXlOYW1lOlwiXCIsYWRkcmVzczp2b2lkIDAsaG91cnM6e319O3JldHVybiBuLm5hbWU9ZS5uYW1lPz9cIlwiLG4ud2Vic2l0ZVVybD1lLndlYnNpdGVVcmw/P1wiXCIsbi5waG9uZU51bWJlcj1lLnBob25lTnVtYmVyPz9cIlwiLG4ubG9jYXRpb249dm9pZCAwIT09ZS5sb2NhdGlvbiYmbnVsbCE9PWUubG9jYXRpb24/dC5HZW9Mb2NhdGlvbi5mcm9tUGFydGlhbChlLmxvY2F0aW9uKTp2b2lkIDAsbi5jYXRlZ29yaWVzPWUuY2F0ZWdvcmllcz8ubWFwKChlPT5lKSl8fFtdLG4uY2F0ZWdvcnlEaXNwbGF5TmFtZT1lLmNhdGVnb3J5RGlzcGxheU5hbWU/P1wiXCIsbi5hZGRyZXNzPXZvaWQgMCE9PWUuYWRkcmVzcyYmbnVsbCE9PWUuYWRkcmVzcz90LkFkZHJlc3MuZnJvbVBhcnRpYWwoZS5hZGRyZXNzKTp2b2lkIDAsbi5ob3Vycz1PYmplY3QuZW50cmllcyhlLmhvdXJzPz97fSkucmVkdWNlKCgoZSxuKT0+e2xldFtyLGldPW47cmV0dXJuIHZvaWQgMCE9PWkmJihlW3JdPXQuSG91cnMuZnJvbVBhcnRpYWwoaSkpLGV9KSx7fSksbn19LHQuVmVudWVPdmVycmlkZXNfSG91cnNFbnRyeT17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmtleSYmbi51aW50MzIoMTApLnN0cmluZyhlLmtleSksdm9pZCAwIT09ZS52YWx1ZSYmdC5Ib3Vycy5lbmNvZGUoZS52YWx1ZSxuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IG89dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGE9e2tleTpcIlwiLHZhbHVlOnZvaWQgMH07Zm9yKDtyLnBvczxvOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmEua2V5PXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmEudmFsdWU9dC5Ib3Vycy5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e2tleTpcIlwiLHZhbHVlOnZvaWQgMH07cmV0dXJuIG4ua2V5PWUua2V5Pz9cIlwiLG4udmFsdWU9dm9pZCAwIT09ZS52YWx1ZSYmbnVsbCE9PWUudmFsdWU/dC5Ib3Vycy5mcm9tUGFydGlhbChlLnZhbHVlKTp2b2lkIDAsbn19LHQuQWRkcmVzcz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnN0cmVldCYmdC51aW50MzIoMTApLnN0cmluZyhlLnN0cmVldCksXCJcIiE9PWUucG9zdGFsQ29kZSYmdC51aW50MzIoMTgpLnN0cmluZyhlLnBvc3RhbENvZGUpLFwiXCIhPT1lLmNvdW50cnlDb2RlJiZ0LnVpbnQzMigyNikuc3RyaW5nKGUuY291bnRyeUNvZGUpLFwiXCIhPT1lLmNpdHkmJnQudWludDMyKDM0KS5zdHJpbmcoZS5jaXR5KSxcIlwiIT09ZS5zdGF0ZSYmdC51aW50MzIoNDIpLnN0cmluZyhlLnN0YXRlKSxcIlwiIT09ZS5jb3VudHJ5JiZ0LnVpbnQzMig1MCkuc3RyaW5nKGUuY291bnRyeSksXCJcIiE9PWUudGltZVpvbmUmJnQudWludDMyKDU4KS5zdHJpbmcoZS50aW1lWm9uZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXtzdHJlZXQ6XCJcIixwb3N0YWxDb2RlOlwiXCIsY291bnRyeUNvZGU6XCJcIixjaXR5OlwiXCIsc3RhdGU6XCJcIixjb3VudHJ5OlwiXCIsdGltZVpvbmU6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8uc3RyZWV0PW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOm8ucG9zdGFsQ29kZT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMzpvLmNvdW50cnlDb2RlPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA0Om8uY2l0eT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNTpvLnN0YXRlPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA2Om8uY291bnRyeT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNzpvLnRpbWVab25lPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtzdHJlZXQ6XCJcIixwb3N0YWxDb2RlOlwiXCIsY291bnRyeUNvZGU6XCJcIixjaXR5OlwiXCIsc3RhdGU6XCJcIixjb3VudHJ5OlwiXCIsdGltZVpvbmU6XCJcIn07cmV0dXJuIHQuc3RyZWV0PWUuc3RyZWV0Pz9cIlwiLHQucG9zdGFsQ29kZT1lLnBvc3RhbENvZGU/P1wiXCIsdC5jb3VudHJ5Q29kZT1lLmNvdW50cnlDb2RlPz9cIlwiLHQuY2l0eT1lLmNpdHk/P1wiXCIsdC5zdGF0ZT1lLnN0YXRlPz9cIlwiLHQuY291bnRyeT1lLmNvdW50cnk/P1wiXCIsdC50aW1lWm9uZT1lLnRpbWVab25lPz9cIlwiLHR9fSx0LkhvdXJzPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7Zm9yKGNvbnN0IHIgb2YgZS5yYW5nZXMpdC5UaW1lUmFuZ2UuZW5jb2RlKHIsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgbz12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3QgYT17cmFuZ2VzOltdfTtmb3IoO3IucG9zPG87KXtjb25zdCBlPXIudWludDMyKCk7ZT4+PjM9PTE/YS5yYW5nZXMucHVzaCh0LlRpbWVSYW5nZS5kZWNvZGUocixyLnVpbnQzMigpKSk6ci5za2lwVHlwZSg3JmUpfXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtyYW5nZXM6W119O3JldHVybiBuLnJhbmdlcz1lLnJhbmdlcz8ubWFwKChlPT50LlRpbWVSYW5nZS5mcm9tUGFydGlhbChlKSkpfHxbXSxufX0sdC5UaW1lUmFuZ2U9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUuc3RhcnRUaW1lJiZ0LnVpbnQzMig4KS51aW50MzIoZS5zdGFydFRpbWUpLDAhPT1lLmVuZFRpbWUmJnQudWludDMyKDE2KS51aW50MzIoZS5lbmRUaW1lKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e3N0YXJ0VGltZTowLGVuZFRpbWU6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8uc3RhcnRUaW1lPW4udWludDMyKCk7YnJlYWs7Y2FzZSAyOm8uZW5kVGltZT1uLnVpbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17c3RhcnRUaW1lOjAsZW5kVGltZTowfTtyZXR1cm4gdC5zdGFydFRpbWU9ZS5zdGFydFRpbWU/PzAsdC5lbmRUaW1lPWUuZW5kVGltZT8/MCx0fX19LDY1OTQ3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNvbnRlbnRNZXRhZGF0YT10LkFmZm9yZGFuY2U9dC5Db250ZXh0SGludD10LkNvbnRleHRIaW50X0hpbnQ9dm9pZCAwO2NvbnN0IGk9cihuKDQxNTgzKSksbz1uKDM2NzU2KSxhPW4oNTUyMykscz1yKG4oNjIxMDApKTt2YXIgYzsoYz10LkNvbnRleHRIaW50X0hpbnR8fCh0LkNvbnRleHRIaW50X0hpbnQ9e30pKVtjLkFVVE89MF09XCJBVVRPXCIsY1tjLk9OPTFdPVwiT05cIixjW2MuT0ZGPTJdPVwiT0ZGXCIsY1tjLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0LkNvbnRleHRIaW50PXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7dm9pZCAwIT09ZS5jb250ZXh0Q2xpZW50SW5mbyYmby5Db250ZXh0Q2xpZW50SW5mby5lbmNvZGUoZS5jb250ZXh0Q2xpZW50SW5mbyxuLnVpbnQzMig5MCkuZm9yaygpKS5sZGVsaW0oKSxcInVuZW5jcnlwdGVkQ2xpZW50SW5mb1wiPT09ZS5jbGllbnRJbmZvPy4kY2FzZSYmby5Db250ZXh0Q2xpZW50SW5mby5lbmNvZGUoZS5jbGllbnRJbmZvLnVuZW5jcnlwdGVkQ2xpZW50SW5mbyxuLnVpbnQzMig5OCkuZm9yaygpKS5sZGVsaW0oKSxcImVuY3J5cHRlZENsaWVudEluZm9cIj09PWUuY2xpZW50SW5mbz8uJGNhc2UmJm4udWludDMyKDEwNikuYnl0ZXMoZS5jbGllbnRJbmZvLmVuY3J5cHRlZENsaWVudEluZm8pLDAhPT1lLmhpbnQmJm4udWludDMyKDgpLmludDMyKGUuaGludCksXCIwXCIhPT1lLnRpbWVzdGFtcCYmbi51aW50MzIoMTYpLmludDY0KGUudGltZXN0YW1wKSx2b2lkIDAhPT1lLmFmZm9yZGFuY2UmJnQuQWZmb3JkYW5jZS5lbmNvZGUoZS5hZmZvcmRhbmNlLG4udWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuY29udGVudE1ldGFkYXRhJiZ0LkNvbnRlbnRNZXRhZGF0YS5lbmNvZGUoZS5jb250ZW50TWV0YWRhdGEsbi51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCk7Zm9yKGNvbnN0IHQgb2YgZS5tb3JlQ29udGV4dClhLkNvbnRleHRGaWVsZC5lbmNvZGUodCxuLnVpbnQzMig4MikuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBjPXtjb250ZXh0Q2xpZW50SW5mbzp2b2lkIDAsY2xpZW50SW5mbzp2b2lkIDAsaGludDowLHRpbWVzdGFtcDpcIjBcIixhZmZvcmRhbmNlOnZvaWQgMCxjb250ZW50TWV0YWRhdGE6dm9pZCAwLG1vcmVDb250ZXh0OltdfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDExOmMuY29udGV4dENsaWVudEluZm89by5Db250ZXh0Q2xpZW50SW5mby5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDEyOmMuY2xpZW50SW5mbz17JGNhc2U6XCJ1bmVuY3J5cHRlZENsaWVudEluZm9cIix1bmVuY3J5cHRlZENsaWVudEluZm86by5Db250ZXh0Q2xpZW50SW5mby5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAxMzpjLmNsaWVudEluZm89eyRjYXNlOlwiZW5jcnlwdGVkQ2xpZW50SW5mb1wiLGVuY3J5cHRlZENsaWVudEluZm86ci5ieXRlcygpfTticmVhaztjYXNlIDE6Yy5oaW50PXIuaW50MzIoKTticmVhaztjYXNlIDI6Yy50aW1lc3RhbXA9ci5pbnQ2NCgpLnRvU3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmMuYWZmb3JkYW5jZT10LkFmZm9yZGFuY2UuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSA0OmMuY29udGVudE1ldGFkYXRhPXQuQ29udGVudE1ldGFkYXRhLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMTA6Yy5tb3JlQ29udGV4dC5wdXNoKGEuQ29udGV4dEZpZWxkLmRlY29kZShyLHIudWludDMyKCkpKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIGN9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e2NvbnRleHRDbGllbnRJbmZvOnZvaWQgMCxjbGllbnRJbmZvOnZvaWQgMCxoaW50OjAsdGltZXN0YW1wOlwiMFwiLGFmZm9yZGFuY2U6dm9pZCAwLGNvbnRlbnRNZXRhZGF0YTp2b2lkIDAsbW9yZUNvbnRleHQ6W119O3JldHVybiBuLmNvbnRleHRDbGllbnRJbmZvPXZvaWQgMCE9PWUuY29udGV4dENsaWVudEluZm8mJm51bGwhPT1lLmNvbnRleHRDbGllbnRJbmZvP28uQ29udGV4dENsaWVudEluZm8uZnJvbVBhcnRpYWwoZS5jb250ZXh0Q2xpZW50SW5mbyk6dm9pZCAwLFwidW5lbmNyeXB0ZWRDbGllbnRJbmZvXCI9PT1lLmNsaWVudEluZm8/LiRjYXNlJiZ2b2lkIDAhPT1lLmNsaWVudEluZm8/LnVuZW5jcnlwdGVkQ2xpZW50SW5mbyYmbnVsbCE9PWUuY2xpZW50SW5mbz8udW5lbmNyeXB0ZWRDbGllbnRJbmZvJiYobi5jbGllbnRJbmZvPXskY2FzZTpcInVuZW5jcnlwdGVkQ2xpZW50SW5mb1wiLHVuZW5jcnlwdGVkQ2xpZW50SW5mbzpvLkNvbnRleHRDbGllbnRJbmZvLmZyb21QYXJ0aWFsKGUuY2xpZW50SW5mby51bmVuY3J5cHRlZENsaWVudEluZm8pfSksXCJlbmNyeXB0ZWRDbGllbnRJbmZvXCI9PT1lLmNsaWVudEluZm8/LiRjYXNlJiZ2b2lkIDAhPT1lLmNsaWVudEluZm8/LmVuY3J5cHRlZENsaWVudEluZm8mJm51bGwhPT1lLmNsaWVudEluZm8/LmVuY3J5cHRlZENsaWVudEluZm8mJihuLmNsaWVudEluZm89eyRjYXNlOlwiZW5jcnlwdGVkQ2xpZW50SW5mb1wiLGVuY3J5cHRlZENsaWVudEluZm86ZS5jbGllbnRJbmZvLmVuY3J5cHRlZENsaWVudEluZm99KSxuLmhpbnQ9ZS5oaW50Pz8wLG4udGltZXN0YW1wPWUudGltZXN0YW1wPz9cIjBcIixuLmFmZm9yZGFuY2U9dm9pZCAwIT09ZS5hZmZvcmRhbmNlJiZudWxsIT09ZS5hZmZvcmRhbmNlP3QuQWZmb3JkYW5jZS5mcm9tUGFydGlhbChlLmFmZm9yZGFuY2UpOnZvaWQgMCxuLmNvbnRlbnRNZXRhZGF0YT12b2lkIDAhPT1lLmNvbnRlbnRNZXRhZGF0YSYmbnVsbCE9PWUuY29udGVudE1ldGFkYXRhP3QuQ29udGVudE1ldGFkYXRhLmZyb21QYXJ0aWFsKGUuY29udGVudE1ldGFkYXRhKTp2b2lkIDAsbi5tb3JlQ29udGV4dD1lLm1vcmVDb250ZXh0Py5tYXAoKGU9PmEuQ29udGV4dEZpZWxkLmZyb21QYXJ0aWFsKGUpKSl8fFtdLG59fSx0LkFmZm9yZGFuY2U9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUudGV4dEtleSYmdC51aW50MzIoODgpLnNpbnQzMihlLnRleHRLZXkpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17dGV4dEtleTowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTExP2kudGV4dEtleT1uLnNpbnQzMigpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dGV4dEtleTowfTtyZXR1cm4gdC50ZXh0S2V5PWUudGV4dEtleT8/MCx0fX0sdC5Db250ZW50TWV0YWRhdGE9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgbiBvZiBlLnRhZ2dlZFVzZXJJZHMpdC51aW50MzIoMTcwKS5zdHJpbmcobik7Zm9yKGNvbnN0IG4gb2YgZS50YWdnZWROYW1lcyl0LnVpbnQzMigxNzgpLnN0cmluZyhuKTtyZXR1cm4gdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXt0YWdnZWRVc2VySWRzOltdLHRhZ2dlZE5hbWVzOltdfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDIxOmkudGFnZ2VkVXNlcklkcy5wdXNoKG4uc3RyaW5nKCkpO2JyZWFrO2Nhc2UgMjI6aS50YWdnZWROYW1lcy5wdXNoKG4uc3RyaW5nKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dGFnZ2VkVXNlcklkczpbXSx0YWdnZWROYW1lczpbXX07cmV0dXJuIHQudGFnZ2VkVXNlcklkcz1lLnRhZ2dlZFVzZXJJZHM/Lm1hcCgoZT0+ZSkpfHxbXSx0LnRhZ2dlZE5hbWVzPWUudGFnZ2VkTmFtZXM/Lm1hcCgoZT0+ZSkpfHxbXSx0fX0scy5kZWZhdWx0LnV0aWwuTG9uZyE9PWkuZGVmYXVsdCYmKHMuZGVmYXVsdC51dGlsLkxvbmc9aS5kZWZhdWx0LHMuZGVmYXVsdC5jb25maWd1cmUoKSl9LDM2NzU2OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNvbnRleHRDbGllbnRJbmZvX0JpdG1vamlPdXRmaXRJbmZvPXQuQ29udGV4dENsaWVudEluZm9fU2hvcHBpbmdMZW5zSW5mbz10LkNvbnRleHRDbGllbnRJbmZvX0NhbWVyYUNvbnRleHRJbmZvPXQuQ29udGV4dENsaWVudEluZm9fUXVlc3Rpb25TdGlja2VySW5mbz10LkNvbnRleHRDbGllbnRJbmZvX1BvbGxDb250ZXh0SW5mbz10LkNvbnRleHRDbGllbnRJbmZvX0NvbW1lcmNlSW5mb19TY3JlZW5TaG9wU25hcEVsaWdpYmlsaXR5PXQuQ29udGV4dENsaWVudEluZm9fQ29tbWVyY2VJbmZvX0NvbW1lcmNlU3RvcmVJbmZvPXQuQ29udGV4dENsaWVudEluZm9fQ29tbWVyY2VJbmZvX0NvbW1lcmNlSXRlbUluZm89dC5Db250ZXh0Q2xpZW50SW5mb19Db21tZXJjZUluZm89dC5Db250ZXh0Q2xpZW50SW5mb19SZW1peFNldHRpbmdzSW5mbz10LkNvbnRleHRDbGllbnRJbmZvX1NuYXBLaXRJbmZvPXQuQ29udGV4dENsaWVudEluZm9fUmVtaXhJbmZvX01lbW9yaWVzU291cmNlPXQuQ29udGV4dENsaWVudEluZm9fUmVtaXhJbmZvX1Nwb3RsaWdodFNvdXJjZT10LkNvbnRleHRDbGllbnRJbmZvX1JlbWl4SW5mb19Vc2VyU3RvcnlTb3VyY2U9dC5Db250ZXh0Q2xpZW50SW5mb19SZW1peEluZm89dC5Db250ZXh0Q2xpZW50SW5mb19Bc3Ryb2xvZ3lQcm9maWxlSW5mb19Db21wYXRpYmlsaXR5UHJvZmlsZT10LkNvbnRleHRDbGllbnRJbmZvX0FzdHJvbG9neVByb2ZpbGVJbmZvX1BlcnNvbmFsaXR5UHJvZmlsZT10LkNvbnRleHRDbGllbnRJbmZvX0FzdHJvbG9neVByb2ZpbGVJbmZvPXQuQ29udGV4dENsaWVudEluZm9fSGFzaHRhZz10LkNvbnRleHRDbGllbnRJbmZvX0NyZWF0aXZlVG9vbHNTdGlja2VySW5mb19TdGlja2VyQXR0cmlidXRpb249dC5Db250ZXh0Q2xpZW50SW5mb19DcmVhdGl2ZVRvb2xzU3RpY2tlckluZm89dC5Db250ZXh0Q2xpZW50SW5mb19NdXNpY1RyYWNrSW5mbz10LkNvbnRleHRDbGllbnRJbmZvX0NhbWVvSW5mbz10LkNvbnRleHRDbGllbnRJbmZvX0FwcEluZm89dC5Db250ZXh0Q2xpZW50SW5mb19TbmFwUHJvU3RvcnlSZXBseUZlYXR1cmU9dC5Db250ZXh0Q2xpZW50SW5mb19UYXBwYWJsZUVsZW1lbnRzSW5mb19Tb3VyY2VDbGllbnQ9dC5Db250ZXh0Q2xpZW50SW5mb19UYXBwYWJsZUVsZW1lbnRzSW5mbz10LkNvbnRleHRDbGllbnRJbmZvX1RhcHBhYmxlRWxlbWVudF9BY3Rpb249dC5Db250ZXh0Q2xpZW50SW5mb19UYXBwYWJsZUVsZW1lbnRfQXBwZWFyYW5jZT10LkNvbnRleHRDbGllbnRJbmZvX1RhcHBhYmxlRWxlbWVudF9TaXplPXQuQ29udGV4dENsaWVudEluZm9fVGFwcGFibGVFbGVtZW50X1BvaW50PXQuQ29udGV4dENsaWVudEluZm9fVGFwcGFibGVFbGVtZW50PXQuQ29udGV4dENsaWVudEluZm9fVG9waWNTdGlja2VySW5mbz10LkNvbnRleHRDbGllbnRJbmZvX1ByaXZhdGVTdG9yeUludml0ZUluZm89dC5Db250ZXh0Q2xpZW50SW5mb19TbmFwUmVwbHlSZXF1ZXN0SW5mbz10LkNvbnRleHRDbGllbnRJbmZvX0dyb3VwSW52aXRlSW5mbz10LkNvbnRleHRDbGllbnRJbmZvPXQuQ29udGV4dFFTSUFjdGlvbl9Db250ZXh0UVNJQWN0aW9uVHlwZT10LkNvbW1lbnRzQWN0aW9uX0NvbW1lbnRzSW50ZW50PXQuVHJlbmRpbmdUb3BpY3NBY3Rpb25fQmFkZ2VUeXBlPXQuUmVhZEFjdGlvbl9SZWFkVHlwZT10LkxlbnNBY3Rpb25fQ2FtZXJhTW9kZT10LkNvbnRleHRDbGllbnRJbmZvX1BvbGxDb250ZXh0SW5mb19Qb2xsVHlwZT10LkNvbnRleHRDbGllbnRJbmZvX0NvbW1lcmNlSW5mb19TY3JlZW5TaG9wU25hcEVsaWdpYmlsaXR5X1Byb2Nlc3NpbmdTdGF0dXM9dC5Db250ZXh0Q2xpZW50SW5mb19Db21tZXJjZUluZm9fQ29tbWVyY2VJdGVtVHlwZT10LkNvbnRleHRDbGllbnRJbmZvX0hhc2h0YWdfU291cmNlPXQuQ29udGV4dENsaWVudEluZm9fVGFwcGFibGVFbGVtZW50X1RhcHBhYmxlRWxlbWVudFR5cGU9dC5Db250ZXh0Q2xpZW50SW5mb19Qcml2YXRlU3RvcnlJbnZpdGVJbmZvX1N0b3J5VHlwZT10LkNvbnRleHRDbGllbnRJbmZvX01lbnRpb25Tb3VyY2U9dC5DYXJkRGF0YVR5cGU9dm9pZCAwLHQuQ29tbWVyY2VBY3Rpb25fQ29tbWVyY2VJdGVtRGV0YWlsUGFnZUFjdGlvbj10LkNvbW1lcmNlQWN0aW9uPXQuQ3JlYXRlQXZhdGFyQWN0aW9uPXQuU25hcFByb1NlbGZTZXJ2ZUFjdGlvbj10LkFkQ29sbGVjdGlvbkl0ZW1BY3Rpb25fUG9pbnQ9dC5BZENvbGxlY3Rpb25JdGVtQWN0aW9uPXQuU2hvd0luZm9BY3Rpb249dC5XYXRjaFNwb3RsaWdodEFjdGlvbj10LlRvcGljQWN0aW9uPXQuQXBwUHJvZmlsZUFjdGlvbj10LkxlbnNQcm9maWxlQWN0aW9uPXQuUmVtaXhlc1RvcGljQWN0aW9uPXQuU291bmRQcm9maWxlQWN0aW9uPXQuUmVhZEFjdGlvbj10LkFzdHJvbG9neVByb2ZpbGVBY3Rpb25fRnJpZW5kQ29tcGF0aWJpbGl0eVByb2ZpbGU9dC5Bc3Ryb2xvZ3lQcm9maWxlQWN0aW9uX0ZyaWVuZFBlcnNvbmFsaXR5UHJvZmlsZT10LkFzdHJvbG9neVByb2ZpbGVBY3Rpb25fTXlQZXJzb25hbGl0eVByb2ZpbGU9dC5Bc3Ryb2xvZ3lQcm9maWxlQWN0aW9uPXQuQml0bW9qaVN0aWNrZXJVbmxvY2tBY3Rpb249dC5DcmVhdGl2ZVRvb2xzU3RpY2tlckFjdGlvbj10LkRpc2NvdmVyU3Vic2NyaXB0aW9uQWN0aW9uPXQuTWFudWFsRnJpZW5kU2VsZWN0aW9uQWN0aW9uPXQuRGlzY292ZXJQcmVtaXVtQWN0aW9uPXQuUG9zdFN0b3J5QWN0aW9uPXQuRWRpdEFjdGlvbj10LlNoYXJlQWN0aW9uPXQuUGxhY2VQcm9maWxlQWN0aW9uPXQuTWVtb3JpZXNGYXZvcml0ZUFjdGlvbj10LkJvb3N0QWN0aW9uPXQuQ2FtZW9PbmJvYXJkaW5nQWN0aW9uPXQuTGVuc0FjdGlvbj10LlNuYXBwYWJsZUFjdGlvbj10LlB1YmxpY1Byb2ZpbGVBY3Rpb249dC5Vc2VyUHJvZmlsZUFjdGlvbj10LkdhbWVBY3Rpb249dC5TdG9yeUludml0ZUFjdGlvbj10LlN0b3J5UmVwbHlBY3Rpb249dC5Hcm91cEludml0ZUFjdGlvbj10LkNhcmRzQWN0aW9uPXQuQ2FtZXJhVjJBY3Rpb25fTXVzaWM9dC5DYW1lcmFWMkFjdGlvbj10LkNhbWVyYUFjdGlvbj10LkNoYXRBY3Rpb249dC5TbmFwS2l0SW52aXRlT3BlbkFjdGlvbj10LlNuYXBLaXRJZGVudGl0eVdlYlZpZXdBY3Rpb249dC5TbmFwS2l0QWN0aW9uSW5mbz10LlNob3dTbmFwQWN0aW9uPXQuVXJsQWN0aW9uPXQuQWN0aW9uTWV0cmljPXQuQ29udGV4dENsaWVudEluZm9fU3RvcnlNZW50aW9uUmVwb3N0PXZvaWQgMCx0LkFjdGlvbj10LkZyaWVuZEFkZEFjdGlvbj10LkJpdG1vamlWaWV3T3V0Zml0QWN0aW9uPXQuU2NhbkFjdGlvbj10LkRlZXBsaW5rU3RpY2tlckFjdGlvbj10LkNUSXRlbUFjdGlvbj10LkR3ZWJVcHNlbGxBY3Rpb249dC5PcGVuQ2FtZXJhUm9sbD10Lk9wZW5TZWFyY2hDaGF0VGFiPXQuQ29udGV4dFFTSUFjdGlvbj10LlNhdmVBY3Rpb249dC5Db21tZXJjZU11bHRpTWVyY2hhbnRBY3Rpb249dC5TY3JlZW5zaG9wQWN0aW9uPXQuUXVlc3Rpb25TdGlja2VyQWN0aW9uPXQuQ2hlZXJpb3NBY3Rpb249dC5DYW1lcmFTaG9ydGN1dEFjdGlvbj10LlVuaWZpZWRQdWJsaWNQcm9maWxlQWN0aW9uX1VuaWZpZWRQdWJsaWNQcm9maWxlUm91dGU9dC5VbmlmaWVkUHVibGljUHJvZmlsZUFjdGlvbl9QdWJsaXNoZXJSb3V0ZT10LlVuaWZpZWRQdWJsaWNQcm9maWxlQWN0aW9uPXQuQ29tbWVudHNBY3Rpb249dC5UcmVuZGluZ1RvcGljc0FjdGlvbj10LlJlbWl4QWN0aW9uPXQuUG9sbEFjdGlvbj10LkNvbW1lcmNlQWN0aW9uX0NvbW1lcmNlU3RvcmVBY3Rpb249dm9pZCAwO2NvbnN0IGk9bigxMjg3MCksbz1yKG4oNDE1ODMpKSxhPW4oNTE1OTgpLHM9bigyOTI0NiksYz1uKDYxNzYpLGw9bigzMjA0NSksdT1uKDEyNjY1KSxkPW4oNDkzMTIpLGY9bigzMDg4MSkscD1uKDgwNzI0KSxtPXIobig2MjEwMCkpLGg9bigyOTE5Nyk7ZnVuY3Rpb24gdigpe3JldHVybnt0b3BpY05hbWU6XCJcIix2aWV3aW5nQ29udGV4dEludGVybmFsOm5ldyBVaW50OEFycmF5fX1mdW5jdGlvbiBnKGUpe3JldHVybiBlLnRvU3RyaW5nKCl9dmFyIHksRSxfLEksUyxiLFQsQyxBLFIsayxPLE47KE49dC5DYXJkRGF0YVR5cGV8fCh0LkNhcmREYXRhVHlwZT17fSkpW04uQ2FyZERhdGFUeXBlVW5rbm93bj0wXT1cIkNhcmREYXRhVHlwZVVua25vd25cIixOW04uQ2FyZERhdGFUeXBlQXR0YWNobWVudD0xXT1cIkNhcmREYXRhVHlwZUF0dGFjaG1lbnRcIixOW04uQ2FyZERhdGFUeXBlUGxhY2U9Ml09XCJDYXJkRGF0YVR5cGVQbGFjZVwiLE5bTi5DYXJkRGF0YVR5cGVFZGl0b3JpYWw9M109XCJDYXJkRGF0YVR5cGVFZGl0b3JpYWxcIixOW04uQ2FyZERhdGFUeXBlUmV2aWV3cz00XT1cIkNhcmREYXRhVHlwZVJldmlld3NcIixOW04uQ2FyZERhdGFUeXBlTWVudGlvbj01XT1cIkNhcmREYXRhVHlwZU1lbnRpb25cIixOW04uQ2FyZERhdGFUeXBlQ29tbWVyY2VQcm9kdWN0PTZdPVwiQ2FyZERhdGFUeXBlQ29tbWVyY2VQcm9kdWN0XCIsTltOLkNhcmREYXRhVHlwZUNvbW1lcmNlU3RvcmU9N109XCJDYXJkRGF0YVR5cGVDb21tZXJjZVN0b3JlXCIsTltOLkNhcmREYXRhVHlwZUZpbHRlcj04XT1cIkNhcmREYXRhVHlwZUZpbHRlclwiLE5bTi5DYXJkRGF0YVR5cGVMZW5zPTldPVwiQ2FyZERhdGFUeXBlTGVuc1wiLE5bTi5DYXJkRGF0YVR5cGVMZW5zQ2hhbGxlbmdlPTEwXT1cIkNhcmREYXRhVHlwZUxlbnNDaGFsbGVuZ2VcIixOW04uQ2FyZERhdGFUeXBlU25hcHBhYmxlPTExXT1cIkNhcmREYXRhVHlwZVNuYXBwYWJsZVwiLE5bTi5DYXJkRGF0YVR5cGVNYXBNYXJrZXI9MTJdPVwiQ2FyZERhdGFUeXBlTWFwTWFya2VyXCIsTltOLkNhcmREYXRhVHlwZUFwcEluc3RhbGw9MTNdPVwiQ2FyZERhdGFUeXBlQXBwSW5zdGFsbFwiLE5bTi5DYXJkRGF0YVR5cGVHcm91cEludml0ZT0xNF09XCJDYXJkRGF0YVR5cGVHcm91cEludml0ZVwiLE5bTi5DYXJkRGF0YVR5cGVDb2duYWM9MTVdPVwiQ2FyZERhdGFUeXBlQ29nbmFjXCIsTltOLkNhcmREYXRhVHlwZVNuYXBSZXBseVJlcXVlc3Q9MTZdPVwiQ2FyZERhdGFUeXBlU25hcFJlcGx5UmVxdWVzdFwiLE5bTi5DYXJkRGF0YVR5cGVHZW5lcmljU25hcFJlcGx5UGxhY2Vob2xkZXI9MTddPVwiQ2FyZERhdGFUeXBlR2VuZXJpY1NuYXBSZXBseVBsYWNlaG9sZGVyXCIsTltOLkNhcmREYXRhVHlwZVJlbGF0ZWRTdG9yeT0xOF09XCJDYXJkRGF0YVR5cGVSZWxhdGVkU3RvcnlcIixOW04uQ2FyZERhdGFUeXBlU3RvcnlJbnZpdGU9MTldPVwiQ2FyZERhdGFUeXBlU3RvcnlJbnZpdGVcIixOW04uQ2FyZERhdGFUeXBlUHVibGlzaGVyPTIwXT1cIkNhcmREYXRhVHlwZVB1Ymxpc2hlclwiLE5bTi5DYXJkRGF0YVR5cGVPdXJTdG9yeUNyZWF0b3I9MjFdPVwiQ2FyZERhdGFUeXBlT3VyU3RvcnlDcmVhdG9yXCIsTltOLkNhcmREYXRhVHlwZVRvcGljPTIyXT1cIkNhcmREYXRhVHlwZVRvcGljXCIsTltOLkNhcmREYXRhVHlwZVF1aWNrQWRkQ3JlYXRvcj0yM109XCJDYXJkRGF0YVR5cGVRdWlja0FkZENyZWF0b3JcIixOW04uQ2FyZERhdGFUeXBlTWluaVByb2dyYW09MjRdPVwiQ2FyZERhdGFUeXBlTWluaVByb2dyYW1cIixOW04uQ2FyZERhdGFUeXBlQ2FtZW9PbmJvYXJkaW5nPTI1XT1cIkNhcmREYXRhVHlwZUNhbWVvT25ib2FyZGluZ1wiLE5bTi5DYXJkRGF0YVR5cGVNdXNpYz0yNl09XCJDYXJkRGF0YVR5cGVNdXNpY1wiLE5bTi5DYXJkRGF0YVR5cGVDcmVhdGl2ZVRvb2xzU3RpY2tlcj0yN109XCJDYXJkRGF0YVR5cGVDcmVhdGl2ZVRvb2xzU3RpY2tlclwiLE5bTi5DYXJkRGF0YVR5cGVBc3Ryb2xvZ3lQcm9maWxlPTI4XT1cIkNhcmREYXRhVHlwZUFzdHJvbG9neVByb2ZpbGVcIixOW04uQ2FyZERhdGFUeXBlUmVtaXhVc2VyQXR0cmlidXRpb249MjldPVwiQ2FyZERhdGFUeXBlUmVtaXhVc2VyQXR0cmlidXRpb25cIixOW04uQ2FyZERhdGFUeXBlU25hcEtpdEFwcEF0dHJpYnV0aW9uPTMwXT1cIkNhcmREYXRhVHlwZVNuYXBLaXRBcHBBdHRyaWJ1dGlvblwiLE5bTi5DYXJkRGF0YVR5cGVDcmVhdGVBdmF0YXI9MzFdPVwiQ2FyZERhdGFUeXBlQ3JlYXRlQXZhdGFyXCIsTltOLkNhcmREYXRhVHlwZUJpdG1vamlVbmxvY2tTdGlja2VyPTMyXT1cIkNhcmREYXRhVHlwZUJpdG1vamlVbmxvY2tTdGlja2VyXCIsTltOLkNhcmREYXRhVHlwZUNvbW1lcmNlSXRlbT0zM109XCJDYXJkRGF0YVR5cGVDb21tZXJjZUl0ZW1cIixOW04uQ2FyZERhdGFUeXBlQ29tbWVyY2VTdG9yZVYyPTM0XT1cIkNhcmREYXRhVHlwZUNvbW1lcmNlU3RvcmVWMlwiLE5bTi5DYXJkRGF0YVR5cGVQb2xsPTM1XT1cIkNhcmREYXRhVHlwZVBvbGxcIixOW04uQ2FyZERhdGFUeXBlVGltZWxpbmU9MzZdPVwiQ2FyZERhdGFUeXBlVGltZWxpbmVcIixOW04uQ2FyZERhdGFUeXBlQ2hlZXJpb3M9MzddPVwiQ2FyZERhdGFUeXBlQ2hlZXJpb3NcIixOW04uQ2FyZERhdGFUeXBlSWRlbnRpdHlXZWJWaWV3QXR0YWNobWVudD0zOF09XCJDYXJkRGF0YVR5cGVJZGVudGl0eVdlYlZpZXdBdHRhY2htZW50XCIsTltOLkNhcmREYXRhVHlwZVNuYXBLaXRJbnZpdGU9MzldPVwiQ2FyZERhdGFUeXBlU25hcEtpdEludml0ZVwiLE5bTi5DYXJkRGF0YVR5cGVRdWVzdGlvblN0aWNrZXI9NDBdPVwiQ2FyZERhdGFUeXBlUXVlc3Rpb25TdGlja2VyXCIsTltOLkNhcmREYXRhVHlwZVNjcmVlbnNob3A9NDFdPVwiQ2FyZERhdGFUeXBlU2NyZWVuc2hvcFwiLE5bTi5DYXJkRGF0YVR5cGVEaXJlY3Rvck1vZGU9NDJdPVwiQ2FyZERhdGFUeXBlRGlyZWN0b3JNb2RlXCIsTltOLkNhcmREYXRhVHlwZUR1YWxDYW1lcmE9NDNdPVwiQ2FyZERhdGFUeXBlRHVhbENhbWVyYVwiLE5bTi5DYXJkRGF0YVR5cGVHcmVlblNjcmVlbj00NF09XCJDYXJkRGF0YVR5cGVHcmVlblNjcmVlblwiLE5bTi5DYXJkRGF0YVR5cGVTcGVlZE1vZGU9NDVdPVwiQ2FyZERhdGFUeXBlU3BlZWRNb2RlXCIsTltOLkNhcmREYXRhVHlwZVNob3BwaW5nU3RpY2tlcj00Nl09XCJDYXJkRGF0YVR5cGVTaG9wcGluZ1N0aWNrZXJcIixOW04uQ2FyZERhdGFUeXBlTXVsdGlNZXJjaGFudFRvcGljPTQ3XT1cIkNhcmREYXRhVHlwZU11bHRpTWVyY2hhbnRUb3BpY1wiLE5bTi5DYXJkRGF0YVR5cGVTaG9wcGluZ1N0aWNrZXJDb21tZXJjZUl0ZW09NDhdPVwiQ2FyZERhdGFUeXBlU2hvcHBpbmdTdGlja2VyQ29tbWVyY2VJdGVtXCIsTltOLkNhcmREYXRhVHlwZUNUSXRlbT00OV09XCJDYXJkRGF0YVR5cGVDVEl0ZW1cIixOW04uQ2FyZERhdGFUeXBlRGlzY292ZXJEZWVwbGlua1N0aWNrZXI9NTBdPVwiQ2FyZERhdGFUeXBlRGlzY292ZXJEZWVwbGlua1N0aWNrZXJcIixOW04uQ2FyZERhdGFUeXBlQml0bW9qaU91dGZpdD01MV09XCJDYXJkRGF0YVR5cGVCaXRtb2ppT3V0Zml0XCIsTltOLkNhcmREYXRhVHlwZVZpZXdSZW1peGVzPTUyXT1cIkNhcmREYXRhVHlwZVZpZXdSZW1peGVzXCIsTltOLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwoTz10LkNvbnRleHRDbGllbnRJbmZvX01lbnRpb25Tb3VyY2V8fCh0LkNvbnRleHRDbGllbnRJbmZvX01lbnRpb25Tb3VyY2U9e30pKVtPLkNBUFRJT05fVEFHPTBdPVwiQ0FQVElPTl9UQUdcIixPW08uTUVOVElPTl9TVElDS0VSPTFdPVwiTUVOVElPTl9TVElDS0VSXCIsT1tPLlNOQVBDT0RFX1NUSUNLRVI9Ml09XCJTTkFQQ09ERV9TVElDS0VSXCIsT1tPLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwoaz10LkNvbnRleHRDbGllbnRJbmZvX1ByaXZhdGVTdG9yeUludml0ZUluZm9fU3RvcnlUeXBlfHwodC5Db250ZXh0Q2xpZW50SW5mb19Qcml2YXRlU3RvcnlJbnZpdGVJbmZvX1N0b3J5VHlwZT17fSkpW2suUFJJVkFURT0wXT1cIlBSSVZBVEVcIixrW2suQ1VTVE9NPTFdPVwiQ1VTVE9NXCIsa1trLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwoUj10LkNvbnRleHRDbGllbnRJbmZvX1RhcHBhYmxlRWxlbWVudF9UYXBwYWJsZUVsZW1lbnRUeXBlfHwodC5Db250ZXh0Q2xpZW50SW5mb19UYXBwYWJsZUVsZW1lbnRfVGFwcGFibGVFbGVtZW50VHlwZT17fSkpW1IuVGFwcGFibGVFbGVtZW50VHlwZVVua25vd249MF09XCJUYXBwYWJsZUVsZW1lbnRUeXBlVW5rbm93blwiLFJbUi5UYXBwYWJsZUVsZW1lbnRUeXBlU3RpY2tlcj0xXT1cIlRhcHBhYmxlRWxlbWVudFR5cGVTdGlja2VyXCIsUltSLlRhcHBhYmxlRWxlbWVudFR5cGVDYXB0aW9uPTJdPVwiVGFwcGFibGVFbGVtZW50VHlwZUNhcHRpb25cIixSW1IuVGFwcGFibGVFbGVtZW50VHlwZVBvbGw9M109XCJUYXBwYWJsZUVsZW1lbnRUeXBlUG9sbFwiLFJbUi5UYXBwYWJsZUVsZW1lbnRUeXBlRHluYW1pY1BvbGw9NF09XCJUYXBwYWJsZUVsZW1lbnRUeXBlRHluYW1pY1BvbGxcIixSW1IuVGFwcGFibGVFbGVtZW50VHlwZVF1ZXN0aW9uU3RpY2tlcj01XT1cIlRhcHBhYmxlRWxlbWVudFR5cGVRdWVzdGlvblN0aWNrZXJcIixSW1IuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLChBPXQuQ29udGV4dENsaWVudEluZm9fSGFzaHRhZ19Tb3VyY2V8fCh0LkNvbnRleHRDbGllbnRJbmZvX0hhc2h0YWdfU291cmNlPXt9KSlbQS5VTlNFVD0wXT1cIlVOU0VUXCIsQVtBLkNBUFRJT049MV09XCJDQVBUSU9OXCIsQVtBLlNUSUNLRVI9NF09XCJTVElDS0VSXCIsQVtBLlNFTkRfVE89Ml09XCJTRU5EX1RPXCIsQVtBLlRPUElDX1BBR0U9M109XCJUT1BJQ19QQUdFXCIsQVtBLkNSRUFUSVZFX0tJVF9TRU5EX1RPPTVdPVwiQ1JFQVRJVkVfS0lUX1NFTkRfVE9cIixBW0EuV0VCX1VQTE9BREVSPTZdPVwiV0VCX1VQTE9BREVSXCIsQVtBLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwoQz10LkNvbnRleHRDbGllbnRJbmZvX0NvbW1lcmNlSW5mb19Db21tZXJjZUl0ZW1UeXBlfHwodC5Db250ZXh0Q2xpZW50SW5mb19Db21tZXJjZUluZm9fQ29tbWVyY2VJdGVtVHlwZT17fSkpW0MuVU5LTk9XTj0wXT1cIlVOS05PV05cIixDW0MuQVRUQUNITUVOVF9UT09MPTFdPVwiQVRUQUNITUVOVF9UT09MXCIsQ1tDLlNIT1BQQUJMRV9TVElDS0VSPTJdPVwiU0hPUFBBQkxFX1NUSUNLRVJcIixDW0MuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLChUPXQuQ29udGV4dENsaWVudEluZm9fQ29tbWVyY2VJbmZvX1NjcmVlblNob3BTbmFwRWxpZ2liaWxpdHlfUHJvY2Vzc2luZ1N0YXR1c3x8KHQuQ29udGV4dENsaWVudEluZm9fQ29tbWVyY2VJbmZvX1NjcmVlblNob3BTbmFwRWxpZ2liaWxpdHlfUHJvY2Vzc2luZ1N0YXR1cz17fSkpW1QuVU5LTk9XTj0wXT1cIlVOS05PV05cIixUW1QuU1VDQ0VTUz0xXT1cIlNVQ0NFU1NcIixUW1QuRkFJTD0yXT1cIkZBSUxcIixUW1QuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLChiPXQuQ29udGV4dENsaWVudEluZm9fUG9sbENvbnRleHRJbmZvX1BvbGxUeXBlfHwodC5Db250ZXh0Q2xpZW50SW5mb19Qb2xsQ29udGV4dEluZm9fUG9sbFR5cGU9e30pKVtiLlVOU0VUPTBdPVwiVU5TRVRcIixiW2IuVFdPRF9UUllfT049MV09XCJUV09EX1RSWV9PTlwiLGJbYi5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKFM9dC5MZW5zQWN0aW9uX0NhbWVyYU1vZGV8fCh0LkxlbnNBY3Rpb25fQ2FtZXJhTW9kZT17fSkpW1MuQ2FtZXJhTW9kZUxlbnNPbmx5PTBdPVwiQ2FtZXJhTW9kZUxlbnNPbmx5XCIsU1tTLkNhbWVyYU1vZGVSZXBseUVuYWJsZWQ9MV09XCJDYW1lcmFNb2RlUmVwbHlFbmFibGVkXCIsU1tTLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwoST10LlJlYWRBY3Rpb25fUmVhZFR5cGV8fCh0LlJlYWRBY3Rpb25fUmVhZFR5cGU9e30pKVtJLlJlYWRUeXBlVW5rbm93bj0wXT1cIlJlYWRUeXBlVW5rbm93blwiLElbSS5SZWFkVHlwZU1vcmU9MV09XCJSZWFkVHlwZU1vcmVcIixJW0kuUmVhZFR5cGVMZXNzPTJdPVwiUmVhZFR5cGVMZXNzXCIsSVtJLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwoXz10LlRyZW5kaW5nVG9waWNzQWN0aW9uX0JhZGdlVHlwZXx8KHQuVHJlbmRpbmdUb3BpY3NBY3Rpb25fQmFkZ2VUeXBlPXt9KSlbXy5CYWRnZVR5cGVIYXNodGFnPTBdPVwiQmFkZ2VUeXBlSGFzaHRhZ1wiLF9bXy5CYWRnZVR5cGVMZW5zPTFdPVwiQmFkZ2VUeXBlTGVuc1wiLF9bXy5CYWRnZVR5cGVNdXNpYz0yXT1cIkJhZGdlVHlwZU11c2ljXCIsX1tfLkJhZGdlVHlwZUNoYWxsZW5nZT0zXT1cIkJhZGdlVHlwZUNoYWxsZW5nZVwiLF9bXy5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKEU9dC5Db21tZW50c0FjdGlvbl9Db21tZW50c0ludGVudHx8KHQuQ29tbWVudHNBY3Rpb25fQ29tbWVudHNJbnRlbnQ9e30pKVtFLkNvbW1lbnRzSW50ZW50Vmlldz0wXT1cIkNvbW1lbnRzSW50ZW50Vmlld1wiLEVbRS5Db21tZW50c0ludGVudENvbXBvc2U9MV09XCJDb21tZW50c0ludGVudENvbXBvc2VcIixFW0UuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLCh5PXQuQ29udGV4dFFTSUFjdGlvbl9Db250ZXh0UVNJQWN0aW9uVHlwZXx8KHQuQ29udGV4dFFTSUFjdGlvbl9Db250ZXh0UVNJQWN0aW9uVHlwZT17fSkpW3kuU2hvd1N0aWNrZXJDYXJvdXNlbD0wXT1cIlNob3dTdGlja2VyQ2Fyb3VzZWxcIix5W3kuSGlkZVN0aWNrZXJDYXJvdXNlbD0xXT1cIkhpZGVTdGlja2VyQ2Fyb3VzZWxcIix5W3kuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLHQuQ29udGV4dENsaWVudEluZm89e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgdCBvZiBlLm1lbnRpb25lZFVzZXJuYW1lcyluLnVpbnQzMigxMCkuc3RyaW5nKHQpO2Zvcihjb25zdCB0IG9mIGUubWVudGlvbmVkVXNlcklkcylhLlVVSUQuZW5jb2RlKHQsbi51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCk7Zm9yKGNvbnN0IHIgb2YgZS5ncm91cEludml0ZXMpdC5Db250ZXh0Q2xpZW50SW5mb19Hcm91cEludml0ZUluZm8uZW5jb2RlKHIsbi51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCk7Zm9yKGNvbnN0IHIgb2YgZS5zbmFwUmVwbHlSZXF1ZXN0cyl0LkNvbnRleHRDbGllbnRJbmZvX1NuYXBSZXBseVJlcXVlc3RJbmZvLmVuY29kZShyLG4udWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpO2Zvcihjb25zdCB0IG9mIGUuZ2FtZUlkcylhLlVVSUQuZW5jb2RlKHQsbi51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKCk7Zm9yKGNvbnN0IHIgb2YgZS5zdG9yeUludml0ZXMpdC5Db250ZXh0Q2xpZW50SW5mb19Qcml2YXRlU3RvcnlJbnZpdGVJbmZvLmVuY29kZShyLG4udWludDMyKDUwKS5mb3JrKCkpLmxkZWxpbSgpO1wiMFwiIT09ZS5wdWJsaXNoZXJJZCYmbi51aW50MzIoNTYpLmludDY0KGUucHVibGlzaGVySWQpO2Zvcihjb25zdCByIG9mIGUuYXR0YWNoZWRUb3BpY1N0aWNrZXJzKXQuQ29udGV4dENsaWVudEluZm9fVG9waWNTdGlja2VySW5mby5lbmNvZGUocixuLnVpbnQzMig2NikuZm9yaygpKS5sZGVsaW0oKTtuLnVpbnQzMig3NCkuZm9yaygpO2Zvcihjb25zdCB0IG9mIGUubWVudGlvblNvdXJjZXMpbi5pbnQzMih0KTtuLmxkZWxpbSgpLHZvaWQgMCE9PWUudGFwcGFibGVFbGVtZW50cyYmdC5Db250ZXh0Q2xpZW50SW5mb19UYXBwYWJsZUVsZW1lbnRzSW5mby5lbmNvZGUoZS50YXBwYWJsZUVsZW1lbnRzLG4udWludDMyKDEwNikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnNuYXBQcm9TdG9yeVJlcGx5RmVhdHVyZSYmdC5Db250ZXh0Q2xpZW50SW5mb19TbmFwUHJvU3RvcnlSZXBseUZlYXR1cmUuZW5jb2RlKGUuc25hcFByb1N0b3J5UmVwbHlGZWF0dXJlLG4udWludDMyKDkwKS5mb3JrKCkpLmxkZWxpbSgpO2Zvcihjb25zdCByIG9mIGUuYXBwcyl0LkNvbnRleHRDbGllbnRJbmZvX0FwcEluZm8uZW5jb2RlKHIsbi51aW50MzIoOTgpLmZvcmsoKSkubGRlbGltKCk7Zm9yKGNvbnN0IHIgb2YgZS5jYW1lb3MpdC5Db250ZXh0Q2xpZW50SW5mb19DYW1lb0luZm8uZW5jb2RlKHIsbi51aW50MzIoMTE0KS5mb3JrKCkpLmxkZWxpbSgpO3ZvaWQgMCE9PWUubXVzaWNUcmFjayYmdC5Db250ZXh0Q2xpZW50SW5mb19NdXNpY1RyYWNrSW5mby5lbmNvZGUoZS5tdXNpY1RyYWNrLG4udWludDMyKDEyMikuZm9yaygpKS5sZGVsaW0oKTtmb3IoY29uc3QgciBvZiBlLmxlZ2FjeVRhcHBhYmxlRWxlbWVudHMpdC5Db250ZXh0Q2xpZW50SW5mb19UYXBwYWJsZUVsZW1lbnQuZW5jb2RlKHIsbi51aW50MzIoODIpLmZvcmsoKSkubGRlbGltKCk7Zm9yKGNvbnN0IHIgb2YgZS5jcmVhdGl2ZXRvb2xzU3RpY2tlcnMpdC5Db250ZXh0Q2xpZW50SW5mb19DcmVhdGl2ZVRvb2xzU3RpY2tlckluZm8uZW5jb2RlKHIsbi51aW50MzIoMTMwKS5mb3JrKCkpLmxkZWxpbSgpO2Zvcihjb25zdCByIG9mIGUuaGFzaHRhZ3MpdC5Db250ZXh0Q2xpZW50SW5mb19IYXNodGFnLmVuY29kZShyLG4udWludDMyKDEzOCkuZm9yaygpKS5sZGVsaW0oKTt2b2lkIDAhPT1lLmFzdHJvbG9neVByb2ZpbGVJbmZvJiZ0LkNvbnRleHRDbGllbnRJbmZvX0FzdHJvbG9neVByb2ZpbGVJbmZvLmVuY29kZShlLmFzdHJvbG9neVByb2ZpbGVJbmZvLG4udWludDMyKDE0NikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnJlbWl4SW5mbyYmdC5Db250ZXh0Q2xpZW50SW5mb19SZW1peEluZm8uZW5jb2RlKGUucmVtaXhJbmZvLG4udWludDMyKDE1NCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnNuYXBLaXRJbmZvJiZ0LkNvbnRleHRDbGllbnRJbmZvX1NuYXBLaXRJbmZvLmVuY29kZShlLnNuYXBLaXRJbmZvLG4udWludDMyKDE2MikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnJlbWl4U2V0dGluZ3NJbmZvJiZ0LkNvbnRleHRDbGllbnRJbmZvX1JlbWl4U2V0dGluZ3NJbmZvLmVuY29kZShlLnJlbWl4U2V0dGluZ3NJbmZvLG4udWludDMyKDE3MCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnRpbWVsaW5lJiZzLlRpbWVsaW5lLmVuY29kZShlLnRpbWVsaW5lLG4udWludDMyKDE3OCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmNvbW1lcmNlSW5mbyYmdC5Db250ZXh0Q2xpZW50SW5mb19Db21tZXJjZUluZm8uZW5jb2RlKGUuY29tbWVyY2VJbmZvLG4udWludDMyKDE4NikuZm9yaygpKS5sZGVsaW0oKTtmb3IoY29uc3QgciBvZiBlLnBvbGxJbmZvKXQuQ29udGV4dENsaWVudEluZm9fUG9sbENvbnRleHRJbmZvLmVuY29kZShyLG4udWludDMyKDE5NCkuZm9yaygpKS5sZGVsaW0oKTshMD09PWUuaXNDaGVlcmlvc1ZpZGVvJiZuLnVpbnQzMigyMDApLmJvb2woZS5pc0NoZWVyaW9zVmlkZW8pLHZvaWQgMCE9PWUucXVlc3Rpb25JbmZvJiZ0LkNvbnRleHRDbGllbnRJbmZvX1F1ZXN0aW9uU3RpY2tlckluZm8uZW5jb2RlKGUucXVlc3Rpb25JbmZvLG4udWludDMyKDIxMCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmNhbWVyYUNvbnRleHRJbmZvJiZ0LkNvbnRleHRDbGllbnRJbmZvX0NhbWVyYUNvbnRleHRJbmZvLmVuY29kZShlLmNhbWVyYUNvbnRleHRJbmZvLG4udWludDMyKDIxOCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnNob3BwaW5nTGVuc0luZm8mJnQuQ29udGV4dENsaWVudEluZm9fU2hvcHBpbmdMZW5zSW5mby5lbmNvZGUoZS5zaG9wcGluZ0xlbnNJbmZvLG4udWludDMyKDI1MCkuZm9yaygpKS5sZGVsaW0oKTtmb3IoY29uc3QgdCBvZiBlLmN0SXRlbUluc3RhbmNlKWMuQ1RJdGVtSW5zdGFuY2UuZW5jb2RlKHQsbi51aW50MzIoMjU4KS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiB2b2lkIDAhPT1lLmJpdG1vamlPdXRmaXRJbmZvJiZ0LkNvbnRleHRDbGllbnRJbmZvX0JpdG1vamlPdXRmaXRJbmZvLmVuY29kZShlLmJpdG1vamlPdXRmaXRJbmZvLG4udWludDMyKDI2NikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnN0b3J5TWVudGlvblJlcG9zdCYmdC5Db250ZXh0Q2xpZW50SW5mb19TdG9yeU1lbnRpb25SZXBvc3QuZW5jb2RlKGUuc3RvcnlNZW50aW9uUmVwb3N0LG4udWludDMyKDI3NCkuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBtLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG0uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89e21lbnRpb25lZFVzZXJuYW1lczpbXSxtZW50aW9uZWRVc2VySWRzOltdLGdyb3VwSW52aXRlczpbXSxzbmFwUmVwbHlSZXF1ZXN0czpbXSxnYW1lSWRzOltdLHN0b3J5SW52aXRlczpbXSxwdWJsaXNoZXJJZDpcIjBcIixhdHRhY2hlZFRvcGljU3RpY2tlcnM6W10sbWVudGlvblNvdXJjZXM6W10sdGFwcGFibGVFbGVtZW50czp2b2lkIDAsc25hcFByb1N0b3J5UmVwbHlGZWF0dXJlOnZvaWQgMCxhcHBzOltdLGNhbWVvczpbXSxtdXNpY1RyYWNrOnZvaWQgMCxsZWdhY3lUYXBwYWJsZUVsZW1lbnRzOltdLGNyZWF0aXZldG9vbHNTdGlja2VyczpbXSxoYXNodGFnczpbXSxhc3Ryb2xvZ3lQcm9maWxlSW5mbzp2b2lkIDAscmVtaXhJbmZvOnZvaWQgMCxzbmFwS2l0SW5mbzp2b2lkIDAscmVtaXhTZXR0aW5nc0luZm86dm9pZCAwLHRpbWVsaW5lOnZvaWQgMCxjb21tZXJjZUluZm86dm9pZCAwLHBvbGxJbmZvOltdLGlzQ2hlZXJpb3NWaWRlbzohMSxxdWVzdGlvbkluZm86dm9pZCAwLGNhbWVyYUNvbnRleHRJbmZvOnZvaWQgMCxzaG9wcGluZ0xlbnNJbmZvOnZvaWQgMCxjdEl0ZW1JbnN0YW5jZTpbXSxiaXRtb2ppT3V0Zml0SW5mbzp2b2lkIDAsc3RvcnlNZW50aW9uUmVwb3N0OnZvaWQgMH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8ubWVudGlvbmVkVXNlcm5hbWVzLnB1c2goci5zdHJpbmcoKSk7YnJlYWs7Y2FzZSAyOm8ubWVudGlvbmVkVXNlcklkcy5wdXNoKGEuVVVJRC5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAzOm8uZ3JvdXBJbnZpdGVzLnB1c2godC5Db250ZXh0Q2xpZW50SW5mb19Hcm91cEludml0ZUluZm8uZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2Nhc2UgNDpvLnNuYXBSZXBseVJlcXVlc3RzLnB1c2godC5Db250ZXh0Q2xpZW50SW5mb19TbmFwUmVwbHlSZXF1ZXN0SW5mby5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSA1Om8uZ2FtZUlkcy5wdXNoKGEuVVVJRC5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSA2Om8uc3RvcnlJbnZpdGVzLnB1c2godC5Db250ZXh0Q2xpZW50SW5mb19Qcml2YXRlU3RvcnlJbnZpdGVJbmZvLmRlY29kZShyLHIudWludDMyKCkpKTticmVhaztjYXNlIDc6by5wdWJsaXNoZXJJZD1nKHIuaW50NjQoKSk7YnJlYWs7Y2FzZSA4Om8uYXR0YWNoZWRUb3BpY1N0aWNrZXJzLnB1c2godC5Db250ZXh0Q2xpZW50SW5mb19Ub3BpY1N0aWNrZXJJbmZvLmRlY29kZShyLHIudWludDMyKCkpKTticmVhaztjYXNlIDk6aWYoMj09KDcmZSkpe2NvbnN0IGU9ci51aW50MzIoKStyLnBvcztmb3IoO3IucG9zPGU7KW8ubWVudGlvblNvdXJjZXMucHVzaChyLmludDMyKCkpfWVsc2Ugby5tZW50aW9uU291cmNlcy5wdXNoKHIuaW50MzIoKSk7YnJlYWs7Y2FzZSAxMzpvLnRhcHBhYmxlRWxlbWVudHM9dC5Db250ZXh0Q2xpZW50SW5mb19UYXBwYWJsZUVsZW1lbnRzSW5mby5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDExOm8uc25hcFByb1N0b3J5UmVwbHlGZWF0dXJlPXQuQ29udGV4dENsaWVudEluZm9fU25hcFByb1N0b3J5UmVwbHlGZWF0dXJlLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMTI6by5hcHBzLnB1c2godC5Db250ZXh0Q2xpZW50SW5mb19BcHBJbmZvLmRlY29kZShyLHIudWludDMyKCkpKTticmVhaztjYXNlIDE0Om8uY2FtZW9zLnB1c2godC5Db250ZXh0Q2xpZW50SW5mb19DYW1lb0luZm8uZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2Nhc2UgMTU6by5tdXNpY1RyYWNrPXQuQ29udGV4dENsaWVudEluZm9fTXVzaWNUcmFja0luZm8uZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAxMDpvLmxlZ2FjeVRhcHBhYmxlRWxlbWVudHMucHVzaCh0LkNvbnRleHRDbGllbnRJbmZvX1RhcHBhYmxlRWxlbWVudC5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAxNjpvLmNyZWF0aXZldG9vbHNTdGlja2Vycy5wdXNoKHQuQ29udGV4dENsaWVudEluZm9fQ3JlYXRpdmVUb29sc1N0aWNrZXJJbmZvLmRlY29kZShyLHIudWludDMyKCkpKTticmVhaztjYXNlIDE3Om8uaGFzaHRhZ3MucHVzaCh0LkNvbnRleHRDbGllbnRJbmZvX0hhc2h0YWcuZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2Nhc2UgMTg6by5hc3Ryb2xvZ3lQcm9maWxlSW5mbz10LkNvbnRleHRDbGllbnRJbmZvX0FzdHJvbG9neVByb2ZpbGVJbmZvLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMTk6by5yZW1peEluZm89dC5Db250ZXh0Q2xpZW50SW5mb19SZW1peEluZm8uZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyMDpvLnNuYXBLaXRJbmZvPXQuQ29udGV4dENsaWVudEluZm9fU25hcEtpdEluZm8uZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyMTpvLnJlbWl4U2V0dGluZ3NJbmZvPXQuQ29udGV4dENsaWVudEluZm9fUmVtaXhTZXR0aW5nc0luZm8uZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyMjpvLnRpbWVsaW5lPXMuVGltZWxpbmUuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyMzpvLmNvbW1lcmNlSW5mbz10LkNvbnRleHRDbGllbnRJbmZvX0NvbW1lcmNlSW5mby5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDI0Om8ucG9sbEluZm8ucHVzaCh0LkNvbnRleHRDbGllbnRJbmZvX1BvbGxDb250ZXh0SW5mby5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAyNTpvLmlzQ2hlZXJpb3NWaWRlbz1yLmJvb2woKTticmVhaztjYXNlIDI2Om8ucXVlc3Rpb25JbmZvPXQuQ29udGV4dENsaWVudEluZm9fUXVlc3Rpb25TdGlja2VySW5mby5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDI3Om8uY2FtZXJhQ29udGV4dEluZm89dC5Db250ZXh0Q2xpZW50SW5mb19DYW1lcmFDb250ZXh0SW5mby5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDMxOm8uc2hvcHBpbmdMZW5zSW5mbz10LkNvbnRleHRDbGllbnRJbmZvX1Nob3BwaW5nTGVuc0luZm8uZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAzMjpvLmN0SXRlbUluc3RhbmNlLnB1c2goYy5DVEl0ZW1JbnN0YW5jZS5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAzMzpvLmJpdG1vamlPdXRmaXRJbmZvPXQuQ29udGV4dENsaWVudEluZm9fQml0bW9qaU91dGZpdEluZm8uZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAzNDpvLnN0b3J5TWVudGlvblJlcG9zdD10LkNvbnRleHRDbGllbnRJbmZvX1N0b3J5TWVudGlvblJlcG9zdC5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e21lbnRpb25lZFVzZXJuYW1lczpbXSxtZW50aW9uZWRVc2VySWRzOltdLGdyb3VwSW52aXRlczpbXSxzbmFwUmVwbHlSZXF1ZXN0czpbXSxnYW1lSWRzOltdLHN0b3J5SW52aXRlczpbXSxwdWJsaXNoZXJJZDpcIjBcIixhdHRhY2hlZFRvcGljU3RpY2tlcnM6W10sbWVudGlvblNvdXJjZXM6W10sdGFwcGFibGVFbGVtZW50czp2b2lkIDAsc25hcFByb1N0b3J5UmVwbHlGZWF0dXJlOnZvaWQgMCxhcHBzOltdLGNhbWVvczpbXSxtdXNpY1RyYWNrOnZvaWQgMCxsZWdhY3lUYXBwYWJsZUVsZW1lbnRzOltdLGNyZWF0aXZldG9vbHNTdGlja2VyczpbXSxoYXNodGFnczpbXSxhc3Ryb2xvZ3lQcm9maWxlSW5mbzp2b2lkIDAscmVtaXhJbmZvOnZvaWQgMCxzbmFwS2l0SW5mbzp2b2lkIDAscmVtaXhTZXR0aW5nc0luZm86dm9pZCAwLHRpbWVsaW5lOnZvaWQgMCxjb21tZXJjZUluZm86dm9pZCAwLHBvbGxJbmZvOltdLGlzQ2hlZXJpb3NWaWRlbzohMSxxdWVzdGlvbkluZm86dm9pZCAwLGNhbWVyYUNvbnRleHRJbmZvOnZvaWQgMCxzaG9wcGluZ0xlbnNJbmZvOnZvaWQgMCxjdEl0ZW1JbnN0YW5jZTpbXSxiaXRtb2ppT3V0Zml0SW5mbzp2b2lkIDAsc3RvcnlNZW50aW9uUmVwb3N0OnZvaWQgMH07cmV0dXJuIG4ubWVudGlvbmVkVXNlcm5hbWVzPWUubWVudGlvbmVkVXNlcm5hbWVzPy5tYXAoKGU9PmUpKXx8W10sbi5tZW50aW9uZWRVc2VySWRzPWUubWVudGlvbmVkVXNlcklkcz8ubWFwKChlPT5hLlVVSUQuZnJvbVBhcnRpYWwoZSkpKXx8W10sbi5ncm91cEludml0ZXM9ZS5ncm91cEludml0ZXM/Lm1hcCgoZT0+dC5Db250ZXh0Q2xpZW50SW5mb19Hcm91cEludml0ZUluZm8uZnJvbVBhcnRpYWwoZSkpKXx8W10sbi5zbmFwUmVwbHlSZXF1ZXN0cz1lLnNuYXBSZXBseVJlcXVlc3RzPy5tYXAoKGU9PnQuQ29udGV4dENsaWVudEluZm9fU25hcFJlcGx5UmVxdWVzdEluZm8uZnJvbVBhcnRpYWwoZSkpKXx8W10sbi5nYW1lSWRzPWUuZ2FtZUlkcz8ubWFwKChlPT5hLlVVSUQuZnJvbVBhcnRpYWwoZSkpKXx8W10sbi5zdG9yeUludml0ZXM9ZS5zdG9yeUludml0ZXM/Lm1hcCgoZT0+dC5Db250ZXh0Q2xpZW50SW5mb19Qcml2YXRlU3RvcnlJbnZpdGVJbmZvLmZyb21QYXJ0aWFsKGUpKSl8fFtdLG4ucHVibGlzaGVySWQ9ZS5wdWJsaXNoZXJJZD8/XCIwXCIsbi5hdHRhY2hlZFRvcGljU3RpY2tlcnM9ZS5hdHRhY2hlZFRvcGljU3RpY2tlcnM/Lm1hcCgoZT0+dC5Db250ZXh0Q2xpZW50SW5mb19Ub3BpY1N0aWNrZXJJbmZvLmZyb21QYXJ0aWFsKGUpKSl8fFtdLG4ubWVudGlvblNvdXJjZXM9ZS5tZW50aW9uU291cmNlcz8ubWFwKChlPT5lKSl8fFtdLG4udGFwcGFibGVFbGVtZW50cz12b2lkIDAhPT1lLnRhcHBhYmxlRWxlbWVudHMmJm51bGwhPT1lLnRhcHBhYmxlRWxlbWVudHM/dC5Db250ZXh0Q2xpZW50SW5mb19UYXBwYWJsZUVsZW1lbnRzSW5mby5mcm9tUGFydGlhbChlLnRhcHBhYmxlRWxlbWVudHMpOnZvaWQgMCxuLnNuYXBQcm9TdG9yeVJlcGx5RmVhdHVyZT12b2lkIDAhPT1lLnNuYXBQcm9TdG9yeVJlcGx5RmVhdHVyZSYmbnVsbCE9PWUuc25hcFByb1N0b3J5UmVwbHlGZWF0dXJlP3QuQ29udGV4dENsaWVudEluZm9fU25hcFByb1N0b3J5UmVwbHlGZWF0dXJlLmZyb21QYXJ0aWFsKGUuc25hcFByb1N0b3J5UmVwbHlGZWF0dXJlKTp2b2lkIDAsbi5hcHBzPWUuYXBwcz8ubWFwKChlPT50LkNvbnRleHRDbGllbnRJbmZvX0FwcEluZm8uZnJvbVBhcnRpYWwoZSkpKXx8W10sbi5jYW1lb3M9ZS5jYW1lb3M/Lm1hcCgoZT0+dC5Db250ZXh0Q2xpZW50SW5mb19DYW1lb0luZm8uZnJvbVBhcnRpYWwoZSkpKXx8W10sbi5tdXNpY1RyYWNrPXZvaWQgMCE9PWUubXVzaWNUcmFjayYmbnVsbCE9PWUubXVzaWNUcmFjaz90LkNvbnRleHRDbGllbnRJbmZvX011c2ljVHJhY2tJbmZvLmZyb21QYXJ0aWFsKGUubXVzaWNUcmFjayk6dm9pZCAwLG4ubGVnYWN5VGFwcGFibGVFbGVtZW50cz1lLmxlZ2FjeVRhcHBhYmxlRWxlbWVudHM/Lm1hcCgoZT0+dC5Db250ZXh0Q2xpZW50SW5mb19UYXBwYWJsZUVsZW1lbnQuZnJvbVBhcnRpYWwoZSkpKXx8W10sbi5jcmVhdGl2ZXRvb2xzU3RpY2tlcnM9ZS5jcmVhdGl2ZXRvb2xzU3RpY2tlcnM/Lm1hcCgoZT0+dC5Db250ZXh0Q2xpZW50SW5mb19DcmVhdGl2ZVRvb2xzU3RpY2tlckluZm8uZnJvbVBhcnRpYWwoZSkpKXx8W10sbi5oYXNodGFncz1lLmhhc2h0YWdzPy5tYXAoKGU9PnQuQ29udGV4dENsaWVudEluZm9fSGFzaHRhZy5mcm9tUGFydGlhbChlKSkpfHxbXSxuLmFzdHJvbG9neVByb2ZpbGVJbmZvPXZvaWQgMCE9PWUuYXN0cm9sb2d5UHJvZmlsZUluZm8mJm51bGwhPT1lLmFzdHJvbG9neVByb2ZpbGVJbmZvP3QuQ29udGV4dENsaWVudEluZm9fQXN0cm9sb2d5UHJvZmlsZUluZm8uZnJvbVBhcnRpYWwoZS5hc3Ryb2xvZ3lQcm9maWxlSW5mbyk6dm9pZCAwLG4ucmVtaXhJbmZvPXZvaWQgMCE9PWUucmVtaXhJbmZvJiZudWxsIT09ZS5yZW1peEluZm8/dC5Db250ZXh0Q2xpZW50SW5mb19SZW1peEluZm8uZnJvbVBhcnRpYWwoZS5yZW1peEluZm8pOnZvaWQgMCxuLnNuYXBLaXRJbmZvPXZvaWQgMCE9PWUuc25hcEtpdEluZm8mJm51bGwhPT1lLnNuYXBLaXRJbmZvP3QuQ29udGV4dENsaWVudEluZm9fU25hcEtpdEluZm8uZnJvbVBhcnRpYWwoZS5zbmFwS2l0SW5mbyk6dm9pZCAwLG4ucmVtaXhTZXR0aW5nc0luZm89dm9pZCAwIT09ZS5yZW1peFNldHRpbmdzSW5mbyYmbnVsbCE9PWUucmVtaXhTZXR0aW5nc0luZm8/dC5Db250ZXh0Q2xpZW50SW5mb19SZW1peFNldHRpbmdzSW5mby5mcm9tUGFydGlhbChlLnJlbWl4U2V0dGluZ3NJbmZvKTp2b2lkIDAsbi50aW1lbGluZT12b2lkIDAhPT1lLnRpbWVsaW5lJiZudWxsIT09ZS50aW1lbGluZT9zLlRpbWVsaW5lLmZyb21QYXJ0aWFsKGUudGltZWxpbmUpOnZvaWQgMCxuLmNvbW1lcmNlSW5mbz12b2lkIDAhPT1lLmNvbW1lcmNlSW5mbyYmbnVsbCE9PWUuY29tbWVyY2VJbmZvP3QuQ29udGV4dENsaWVudEluZm9fQ29tbWVyY2VJbmZvLmZyb21QYXJ0aWFsKGUuY29tbWVyY2VJbmZvKTp2b2lkIDAsbi5wb2xsSW5mbz1lLnBvbGxJbmZvPy5tYXAoKGU9PnQuQ29udGV4dENsaWVudEluZm9fUG9sbENvbnRleHRJbmZvLmZyb21QYXJ0aWFsKGUpKSl8fFtdLG4uaXNDaGVlcmlvc1ZpZGVvPWUuaXNDaGVlcmlvc1ZpZGVvPz8hMSxuLnF1ZXN0aW9uSW5mbz12b2lkIDAhPT1lLnF1ZXN0aW9uSW5mbyYmbnVsbCE9PWUucXVlc3Rpb25JbmZvP3QuQ29udGV4dENsaWVudEluZm9fUXVlc3Rpb25TdGlja2VySW5mby5mcm9tUGFydGlhbChlLnF1ZXN0aW9uSW5mbyk6dm9pZCAwLG4uY2FtZXJhQ29udGV4dEluZm89dm9pZCAwIT09ZS5jYW1lcmFDb250ZXh0SW5mbyYmbnVsbCE9PWUuY2FtZXJhQ29udGV4dEluZm8/dC5Db250ZXh0Q2xpZW50SW5mb19DYW1lcmFDb250ZXh0SW5mby5mcm9tUGFydGlhbChlLmNhbWVyYUNvbnRleHRJbmZvKTp2b2lkIDAsbi5zaG9wcGluZ0xlbnNJbmZvPXZvaWQgMCE9PWUuc2hvcHBpbmdMZW5zSW5mbyYmbnVsbCE9PWUuc2hvcHBpbmdMZW5zSW5mbz90LkNvbnRleHRDbGllbnRJbmZvX1Nob3BwaW5nTGVuc0luZm8uZnJvbVBhcnRpYWwoZS5zaG9wcGluZ0xlbnNJbmZvKTp2b2lkIDAsbi5jdEl0ZW1JbnN0YW5jZT1lLmN0SXRlbUluc3RhbmNlPy5tYXAoKGU9PmMuQ1RJdGVtSW5zdGFuY2UuZnJvbVBhcnRpYWwoZSkpKXx8W10sbi5iaXRtb2ppT3V0Zml0SW5mbz12b2lkIDAhPT1lLmJpdG1vamlPdXRmaXRJbmZvJiZudWxsIT09ZS5iaXRtb2ppT3V0Zml0SW5mbz90LkNvbnRleHRDbGllbnRJbmZvX0JpdG1vamlPdXRmaXRJbmZvLmZyb21QYXJ0aWFsKGUuYml0bW9qaU91dGZpdEluZm8pOnZvaWQgMCxuLnN0b3J5TWVudGlvblJlcG9zdD12b2lkIDAhPT1lLnN0b3J5TWVudGlvblJlcG9zdCYmbnVsbCE9PWUuc3RvcnlNZW50aW9uUmVwb3N0P3QuQ29udGV4dENsaWVudEluZm9fU3RvcnlNZW50aW9uUmVwb3N0LmZyb21QYXJ0aWFsKGUuc3RvcnlNZW50aW9uUmVwb3N0KTp2b2lkIDAsbn19LHQuQ29udGV4dENsaWVudEluZm9fR3JvdXBJbnZpdGVJbmZvPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUuZ3JvdXBJZCYmYS5VVUlELmVuY29kZShlLmdyb3VwSWQsdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5ncm91cEludml0ZUlkJiZhLlVVSUQuZW5jb2RlKGUuZ3JvdXBJbnZpdGVJZCx0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSxcIlwiIT09ZS5lbmNyeXB0ZWRHcm91cEludml0ZUlkJiZ0LnVpbnQzMigyNikuc3RyaW5nKGUuZW5jcnlwdGVkR3JvdXBJbnZpdGVJZCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBtLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtncm91cElkOnZvaWQgMCxncm91cEludml0ZUlkOnZvaWQgMCxlbmNyeXB0ZWRHcm91cEludml0ZUlkOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmdyb3VwSWQ9YS5VVUlELmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMjppLmdyb3VwSW52aXRlSWQ9YS5VVUlELmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMzppLmVuY3J5cHRlZEdyb3VwSW52aXRlSWQ9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2dyb3VwSWQ6dm9pZCAwLGdyb3VwSW52aXRlSWQ6dm9pZCAwLGVuY3J5cHRlZEdyb3VwSW52aXRlSWQ6XCJcIn07cmV0dXJuIHQuZ3JvdXBJZD12b2lkIDAhPT1lLmdyb3VwSWQmJm51bGwhPT1lLmdyb3VwSWQ/YS5VVUlELmZyb21QYXJ0aWFsKGUuZ3JvdXBJZCk6dm9pZCAwLHQuZ3JvdXBJbnZpdGVJZD12b2lkIDAhPT1lLmdyb3VwSW52aXRlSWQmJm51bGwhPT1lLmdyb3VwSW52aXRlSWQ/YS5VVUlELmZyb21QYXJ0aWFsKGUuZ3JvdXBJbnZpdGVJZCk6dm9pZCAwLHQuZW5jcnlwdGVkR3JvdXBJbnZpdGVJZD1lLmVuY3J5cHRlZEdyb3VwSW52aXRlSWQ/P1wiXCIsdH19LHQuQ29udGV4dENsaWVudEluZm9fU25hcFJlcGx5UmVxdWVzdEluZm89e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5yZXF1ZXN0VGV4dCYmdC51aW50MzIoMTApLnN0cmluZyhlLnJlcXVlc3RUZXh0KSx2b2lkIDAhPT1lLnJlcXVlc3RJZCYmYS5VVUlELmVuY29kZShlLnJlcXVlc3RJZCx0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnN0b3J5SWQmJmEuVVVJRC5lbmNvZGUoZS5zdG9yeUlkLHQudWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17cmVxdWVzdFRleHQ6XCJcIixyZXF1ZXN0SWQ6dm9pZCAwLHN0b3J5SWQ6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5yZXF1ZXN0VGV4dD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLnJlcXVlc3RJZD1hLlVVSUQuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAzOmkuc3RvcnlJZD1hLlVVSUQuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtyZXF1ZXN0VGV4dDpcIlwiLHJlcXVlc3RJZDp2b2lkIDAsc3RvcnlJZDp2b2lkIDB9O3JldHVybiB0LnJlcXVlc3RUZXh0PWUucmVxdWVzdFRleHQ/P1wiXCIsdC5yZXF1ZXN0SWQ9dm9pZCAwIT09ZS5yZXF1ZXN0SWQmJm51bGwhPT1lLnJlcXVlc3RJZD9hLlVVSUQuZnJvbVBhcnRpYWwoZS5yZXF1ZXN0SWQpOnZvaWQgMCx0LnN0b3J5SWQ9dm9pZCAwIT09ZS5zdG9yeUlkJiZudWxsIT09ZS5zdG9yeUlkP2EuVVVJRC5mcm9tUGFydGlhbChlLnN0b3J5SWQpOnZvaWQgMCx0fX0sdC5Db250ZXh0Q2xpZW50SW5mb19Qcml2YXRlU3RvcnlJbnZpdGVJbmZvPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUuc3RvcnlJZCYmYS5VVUlELmVuY29kZShlLnN0b3J5SWQsdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksXCJcIiE9PWUuc3RvcnlOYW1lJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuc3RvcnlOYW1lKSx2b2lkIDAhPT1lLmludml0ZUlkJiZhLlVVSUQuZW5jb2RlKGUuaW52aXRlSWQsdC51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCksMCE9PWUuc3RvcnlUeXBlJiZ0LnVpbnQzMigzMikuaW50MzIoZS5zdG9yeVR5cGUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17c3RvcnlJZDp2b2lkIDAsc3RvcnlOYW1lOlwiXCIsaW52aXRlSWQ6dm9pZCAwLHN0b3J5VHlwZTowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5zdG9yeUlkPWEuVVVJRC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDI6aS5zdG9yeU5hbWU9bi5zdHJpbmcoKTticmVhaztjYXNlIDM6aS5pbnZpdGVJZD1hLlVVSUQuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSA0Omkuc3RvcnlUeXBlPW4uaW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3N0b3J5SWQ6dm9pZCAwLHN0b3J5TmFtZTpcIlwiLGludml0ZUlkOnZvaWQgMCxzdG9yeVR5cGU6MH07cmV0dXJuIHQuc3RvcnlJZD12b2lkIDAhPT1lLnN0b3J5SWQmJm51bGwhPT1lLnN0b3J5SWQ/YS5VVUlELmZyb21QYXJ0aWFsKGUuc3RvcnlJZCk6dm9pZCAwLHQuc3RvcnlOYW1lPWUuc3RvcnlOYW1lPz9cIlwiLHQuaW52aXRlSWQ9dm9pZCAwIT09ZS5pbnZpdGVJZCYmbnVsbCE9PWUuaW52aXRlSWQ/YS5VVUlELmZyb21QYXJ0aWFsKGUuaW52aXRlSWQpOnZvaWQgMCx0LnN0b3J5VHlwZT1lLnN0b3J5VHlwZT8/MCx0fX0sdC5Db250ZXh0Q2xpZW50SW5mb19Ub3BpY1N0aWNrZXJJbmZvPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUudG9waWNTdGlja2VyJiZsLlRvcGljU3RpY2tlci5lbmNvZGUoZS50b3BpY1N0aWNrZXIsdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBtLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXt0b3BpY1N0aWNrZXI6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/aS50b3BpY1N0aWNrZXI9bC5Ub3BpY1N0aWNrZXIuZGVjb2RlKG4sbi51aW50MzIoKSk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt0b3BpY1N0aWNrZXI6dm9pZCAwfTtyZXR1cm4gdC50b3BpY1N0aWNrZXI9dm9pZCAwIT09ZS50b3BpY1N0aWNrZXImJm51bGwhPT1lLnRvcGljU3RpY2tlcj9sLlRvcGljU3RpY2tlci5mcm9tUGFydGlhbChlLnRvcGljU3RpY2tlcik6dm9pZCAwLHR9fSx0LkNvbnRleHRDbGllbnRJbmZvX1RhcHBhYmxlRWxlbWVudD17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTptLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLmFwcGVhcmFuY2UmJnQuQ29udGV4dENsaWVudEluZm9fVGFwcGFibGVFbGVtZW50X0FwcGVhcmFuY2UuZW5jb2RlKGUuYXBwZWFyYW5jZSxuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmFjdGlvbiYmdC5Db250ZXh0Q2xpZW50SW5mb19UYXBwYWJsZUVsZW1lbnRfQWN0aW9uLmVuY29kZShlLmFjdGlvbixuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS50eXBlJiZuLnVpbnQzMigyNCkuaW50MzIoZS50eXBlKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBtLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG0uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89e2FwcGVhcmFuY2U6dm9pZCAwLGFjdGlvbjp2b2lkIDAsdHlwZTowfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5hcHBlYXJhbmNlPXQuQ29udGV4dENsaWVudEluZm9fVGFwcGFibGVFbGVtZW50X0FwcGVhcmFuY2UuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOm8uYWN0aW9uPXQuQ29udGV4dENsaWVudEluZm9fVGFwcGFibGVFbGVtZW50X0FjdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDM6by50eXBlPXIuaW50MzIoKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e2FwcGVhcmFuY2U6dm9pZCAwLGFjdGlvbjp2b2lkIDAsdHlwZTowfTtyZXR1cm4gbi5hcHBlYXJhbmNlPXZvaWQgMCE9PWUuYXBwZWFyYW5jZSYmbnVsbCE9PWUuYXBwZWFyYW5jZT90LkNvbnRleHRDbGllbnRJbmZvX1RhcHBhYmxlRWxlbWVudF9BcHBlYXJhbmNlLmZyb21QYXJ0aWFsKGUuYXBwZWFyYW5jZSk6dm9pZCAwLG4uYWN0aW9uPXZvaWQgMCE9PWUuYWN0aW9uJiZudWxsIT09ZS5hY3Rpb24/dC5Db250ZXh0Q2xpZW50SW5mb19UYXBwYWJsZUVsZW1lbnRfQWN0aW9uLmZyb21QYXJ0aWFsKGUuYWN0aW9uKTp2b2lkIDAsbi50eXBlPWUudHlwZT8/MCxufX0sdC5Db250ZXh0Q2xpZW50SW5mb19UYXBwYWJsZUVsZW1lbnRfUG9pbnQ9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUueCYmdC51aW50MzIoOSkuZG91YmxlKGUueCksMCE9PWUueSYmdC51aW50MzIoMTcpLmRvdWJsZShlLnkpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17eDowLHk6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkueD1uLmRvdWJsZSgpO2JyZWFrO2Nhc2UgMjppLnk9bi5kb3VibGUoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3g6MCx5OjB9O3JldHVybiB0Lng9ZS54Pz8wLHQueT1lLnk/PzAsdH19LHQuQ29udGV4dENsaWVudEluZm9fVGFwcGFibGVFbGVtZW50X1NpemU9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUud2lkdGgmJnQudWludDMyKDkpLmRvdWJsZShlLndpZHRoKSwwIT09ZS5oZWlnaHQmJnQudWludDMyKDE3KS5kb3VibGUoZS5oZWlnaHQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17d2lkdGg6MCxoZWlnaHQ6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkud2lkdGg9bi5kb3VibGUoKTticmVhaztjYXNlIDI6aS5oZWlnaHQ9bi5kb3VibGUoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3dpZHRoOjAsaGVpZ2h0OjB9O3JldHVybiB0LndpZHRoPWUud2lkdGg/PzAsdC5oZWlnaHQ9ZS5oZWlnaHQ/PzAsdH19LHQuQ29udGV4dENsaWVudEluZm9fVGFwcGFibGVFbGVtZW50X0FwcGVhcmFuY2U9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5jZW50ZXImJnQuQ29udGV4dENsaWVudEluZm9fVGFwcGFibGVFbGVtZW50X1BvaW50LmVuY29kZShlLmNlbnRlcixuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnNpemUmJnQuQ29udGV4dENsaWVudEluZm9fVGFwcGFibGVFbGVtZW50X1NpemUuZW5jb2RlKGUuc2l6ZSxuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS5yb3RhdGlvbiYmbi51aW50MzIoMjUpLmRvdWJsZShlLnJvdGF0aW9uKSwwIT09ZS5jb3JuZXJSYWRpdXMmJm4udWludDMyKDMzKS5kb3VibGUoZS5jb3JuZXJSYWRpdXMpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17Y2VudGVyOnZvaWQgMCxzaXplOnZvaWQgMCxyb3RhdGlvbjowLGNvcm5lclJhZGl1czowfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5jZW50ZXI9dC5Db250ZXh0Q2xpZW50SW5mb19UYXBwYWJsZUVsZW1lbnRfUG9pbnQuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOm8uc2l6ZT10LkNvbnRleHRDbGllbnRJbmZvX1RhcHBhYmxlRWxlbWVudF9TaXplLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMzpvLnJvdGF0aW9uPXIuZG91YmxlKCk7YnJlYWs7Y2FzZSA0Om8uY29ybmVyUmFkaXVzPXIuZG91YmxlKCk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtjZW50ZXI6dm9pZCAwLHNpemU6dm9pZCAwLHJvdGF0aW9uOjAsY29ybmVyUmFkaXVzOjB9O3JldHVybiBuLmNlbnRlcj12b2lkIDAhPT1lLmNlbnRlciYmbnVsbCE9PWUuY2VudGVyP3QuQ29udGV4dENsaWVudEluZm9fVGFwcGFibGVFbGVtZW50X1BvaW50LmZyb21QYXJ0aWFsKGUuY2VudGVyKTp2b2lkIDAsbi5zaXplPXZvaWQgMCE9PWUuc2l6ZSYmbnVsbCE9PWUuc2l6ZT90LkNvbnRleHRDbGllbnRJbmZvX1RhcHBhYmxlRWxlbWVudF9TaXplLmZyb21QYXJ0aWFsKGUuc2l6ZSk6dm9pZCAwLG4ucm90YXRpb249ZS5yb3RhdGlvbj8/MCxuLmNvcm5lclJhZGl1cz1lLmNvcm5lclJhZGl1cz8/MCxufX0sdC5Db250ZXh0Q2xpZW50SW5mb19UYXBwYWJsZUVsZW1lbnRfQWN0aW9uPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUua2V5JiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUua2V5KSwwIT09ZS5jYXJkRGF0YVR5cGUmJnQudWludDMyKDE2KS5pbnQzMihlLmNhcmREYXRhVHlwZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBtLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtrZXk6XCJcIixjYXJkRGF0YVR5cGU6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkua2V5PW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkuY2FyZERhdGFUeXBlPW4uaW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2tleTpcIlwiLGNhcmREYXRhVHlwZTowfTtyZXR1cm4gdC5rZXk9ZS5rZXk/P1wiXCIsdC5jYXJkRGF0YVR5cGU9ZS5jYXJkRGF0YVR5cGU/PzAsdH19LHQuQ29udGV4dENsaWVudEluZm9fVGFwcGFibGVFbGVtZW50c0luZm89e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgciBvZiBlLmVsZW1lbnRzKXQuQ29udGV4dENsaWVudEluZm9fVGFwcGFibGVFbGVtZW50LmVuY29kZShyLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiB2b2lkIDAhPT1lLnNvdXJjZUNsaWVudCYmdC5Db250ZXh0Q2xpZW50SW5mb19UYXBwYWJsZUVsZW1lbnRzSW5mb19Tb3VyY2VDbGllbnQuZW5jb2RlKGUuc291cmNlQ2xpZW50LG4udWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17ZWxlbWVudHM6W10sc291cmNlQ2xpZW50OnZvaWQgMH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8uZWxlbWVudHMucHVzaCh0LkNvbnRleHRDbGllbnRJbmZvX1RhcHBhYmxlRWxlbWVudC5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAyOm8uc291cmNlQ2xpZW50PXQuQ29udGV4dENsaWVudEluZm9fVGFwcGFibGVFbGVtZW50c0luZm9fU291cmNlQ2xpZW50LmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17ZWxlbWVudHM6W10sc291cmNlQ2xpZW50OnZvaWQgMH07cmV0dXJuIG4uZWxlbWVudHM9ZS5lbGVtZW50cz8ubWFwKChlPT50LkNvbnRleHRDbGllbnRJbmZvX1RhcHBhYmxlRWxlbWVudC5mcm9tUGFydGlhbChlKSkpfHxbXSxuLnNvdXJjZUNsaWVudD12b2lkIDAhPT1lLnNvdXJjZUNsaWVudCYmbnVsbCE9PWUuc291cmNlQ2xpZW50P3QuQ29udGV4dENsaWVudEluZm9fVGFwcGFibGVFbGVtZW50c0luZm9fU291cmNlQ2xpZW50LmZyb21QYXJ0aWFsKGUuc291cmNlQ2xpZW50KTp2b2lkIDAsbn19LHQuQ29udGV4dENsaWVudEluZm9fVGFwcGFibGVFbGVtZW50c0luZm9fU291cmNlQ2xpZW50PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLm9zJiZ0LnVpbnQzMig4KS5pbnQzMihlLm9zKSx2b2lkIDAhPT1lLmFwcFZlcnNpb24mJmkuQXBwVmVyc2lvbi5lbmNvZGUoZS5hcHBWZXJzaW9uLHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17b3M6MCxhcHBWZXJzaW9uOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8ub3M9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMjpvLmFwcFZlcnNpb249aS5BcHBWZXJzaW9uLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17b3M6MCxhcHBWZXJzaW9uOnZvaWQgMH07cmV0dXJuIHQub3M9ZS5vcz8/MCx0LmFwcFZlcnNpb249dm9pZCAwIT09ZS5hcHBWZXJzaW9uJiZudWxsIT09ZS5hcHBWZXJzaW9uP2kuQXBwVmVyc2lvbi5mcm9tUGFydGlhbChlLmFwcFZlcnNpb24pOnZvaWQgMCx0fX0sdC5Db250ZXh0Q2xpZW50SW5mb19TbmFwUHJvU3RvcnlSZXBseUZlYXR1cmU9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4hMD09PWUuc3RvcnlSZXBseUVuYWJsZWQmJnQudWludDMyKDgpLmJvb2woZS5zdG9yeVJlcGx5RW5hYmxlZCksITA9PT1lLmdpZnRpbmdFbmFibGVkJiZ0LnVpbnQzMigxNikuYm9vbChlLmdpZnRpbmdFbmFibGVkKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBtLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG0uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3N0b3J5UmVwbHlFbmFibGVkOiExLGdpZnRpbmdFbmFibGVkOiExfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5zdG9yeVJlcGx5RW5hYmxlZD1uLmJvb2woKTticmVhaztjYXNlIDI6aS5naWZ0aW5nRW5hYmxlZD1uLmJvb2woKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3N0b3J5UmVwbHlFbmFibGVkOiExLGdpZnRpbmdFbmFibGVkOiExfTtyZXR1cm4gdC5zdG9yeVJlcGx5RW5hYmxlZD1lLnN0b3J5UmVwbHlFbmFibGVkPz8hMSx0LmdpZnRpbmdFbmFibGVkPWUuZ2lmdGluZ0VuYWJsZWQ/PyExLHR9fSx0LkNvbnRleHRDbGllbnRJbmZvX0FwcEluZm89e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5pZCYmYS5VVUlELmVuY29kZShlLmlkLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLFwiXCIhPT1lLnNoYXJlSW5mbyYmdC51aW50MzIoMTgpLnN0cmluZyhlLnNoYXJlSW5mbyksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBtLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtpZDp2b2lkIDAsc2hhcmVJbmZvOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmlkPWEuVVVJRC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDI6aS5zaGFyZUluZm89bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2lkOnZvaWQgMCxzaGFyZUluZm86XCJcIn07cmV0dXJuIHQuaWQ9dm9pZCAwIT09ZS5pZCYmbnVsbCE9PWUuaWQ/YS5VVUlELmZyb21QYXJ0aWFsKGUuaWQpOnZvaWQgMCx0LnNoYXJlSW5mbz1lLnNoYXJlSW5mbz8/XCJcIix0fX0sdC5Db250ZXh0Q2xpZW50SW5mb19DYW1lb0luZm89e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5pZCYmdC51aW50MzIoMTApLnN0cmluZyhlLmlkKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBtLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG0uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2lkOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLmlkPW4uc3RyaW5nKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtpZDpcIlwifTtyZXR1cm4gdC5pZD1lLmlkPz9cIlwiLHR9fSx0LkNvbnRleHRDbGllbnRJbmZvX011c2ljVHJhY2tJbmZvPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCIwXCIhPT1lLnRyYWNrSWQmJnQudWludDMyKDE2KS51aW50NjQoZS50cmFja0lkKSx2b2lkIDAhPT1lLmNvbnRlbnRSZXN0cmljdGlvbnMmJnUuQ29udGVudFJlc3RyaWN0aW9ucy5lbmNvZGUoZS5jb250ZW50UmVzdHJpY3Rpb25zLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLnR5cGUmJnQudWludDMyKDI0KS5pbnQzMihlLnR5cGUpLDAhPT1lLnN0YXJ0T2Zmc2V0U2Vjb25kcyYmdC51aW50MzIoMzMpLmRvdWJsZShlLnN0YXJ0T2Zmc2V0U2Vjb25kcyksITA9PT1lLmlzU291bmRTeW5jJiZ0LnVpbnQzMig0OCkuYm9vbChlLmlzU291bmRTeW5jKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBtLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG0uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3RyYWNrSWQ6XCIwXCIsY29udGVudFJlc3RyaWN0aW9uczp2b2lkIDAsdHlwZTowLHN0YXJ0T2Zmc2V0U2Vjb25kczowLGlzU291bmRTeW5jOiExfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDI6aS50cmFja0lkPWcobi51aW50NjQoKSk7YnJlYWs7Y2FzZSAxOmkuY29udGVudFJlc3RyaWN0aW9ucz11LkNvbnRlbnRSZXN0cmljdGlvbnMuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAzOmkudHlwZT1uLmludDMyKCk7YnJlYWs7Y2FzZSA0Omkuc3RhcnRPZmZzZXRTZWNvbmRzPW4uZG91YmxlKCk7YnJlYWs7Y2FzZSA2OmkuaXNTb3VuZFN5bmM9bi5ib29sKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt0cmFja0lkOlwiMFwiLGNvbnRlbnRSZXN0cmljdGlvbnM6dm9pZCAwLHR5cGU6MCxzdGFydE9mZnNldFNlY29uZHM6MCxpc1NvdW5kU3luYzohMX07cmV0dXJuIHQudHJhY2tJZD1lLnRyYWNrSWQ/P1wiMFwiLHQuY29udGVudFJlc3RyaWN0aW9ucz12b2lkIDAhPT1lLmNvbnRlbnRSZXN0cmljdGlvbnMmJm51bGwhPT1lLmNvbnRlbnRSZXN0cmljdGlvbnM/dS5Db250ZW50UmVzdHJpY3Rpb25zLmZyb21QYXJ0aWFsKGUuY29udGVudFJlc3RyaWN0aW9ucyk6dm9pZCAwLHQudHlwZT1lLnR5cGU/PzAsdC5zdGFydE9mZnNldFNlY29uZHM9ZS5zdGFydE9mZnNldFNlY29uZHM/PzAsdC5pc1NvdW5kU3luYz1lLmlzU291bmRTeW5jPz8hMSx0fX0sdC5Db250ZXh0Q2xpZW50SW5mb19DcmVhdGl2ZVRvb2xzU3RpY2tlckluZm89e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5wYWNrSWQmJm4udWludDMyKDEwKS5zdHJpbmcoZS5wYWNrSWQpLFwiXCIhPT1lLnN0aWNrZXJJZCYmbi51aW50MzIoMTgpLnN0cmluZyhlLnN0aWNrZXJJZCksXCJcIiE9PWUuc3RpY2tlclR5cGUmJm4udWludDMyKDI2KS5zdHJpbmcoZS5zdGlja2VyVHlwZSksdm9pZCAwIT09ZS5zdGlja2VyQXR0cmlidXRpb24mJnQuQ29udGV4dENsaWVudEluZm9fQ3JlYXRpdmVUb29sc1N0aWNrZXJJbmZvX1N0aWNrZXJBdHRyaWJ1dGlvbi5lbmNvZGUoZS5zdGlja2VyQXR0cmlidXRpb24sbi51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgbS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBtLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXtwYWNrSWQ6XCJcIixzdGlja2VySWQ6XCJcIixzdGlja2VyVHlwZTpcIlwiLHN0aWNrZXJBdHRyaWJ1dGlvbjp2b2lkIDB9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLnBhY2tJZD1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMjpvLnN0aWNrZXJJZD1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMzpvLnN0aWNrZXJUeXBlPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSA0Om8uc3RpY2tlckF0dHJpYnV0aW9uPXQuQ29udGV4dENsaWVudEluZm9fQ3JlYXRpdmVUb29sc1N0aWNrZXJJbmZvX1N0aWNrZXJBdHRyaWJ1dGlvbi5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e3BhY2tJZDpcIlwiLHN0aWNrZXJJZDpcIlwiLHN0aWNrZXJUeXBlOlwiXCIsc3RpY2tlckF0dHJpYnV0aW9uOnZvaWQgMH07cmV0dXJuIG4ucGFja0lkPWUucGFja0lkPz9cIlwiLG4uc3RpY2tlcklkPWUuc3RpY2tlcklkPz9cIlwiLG4uc3RpY2tlclR5cGU9ZS5zdGlja2VyVHlwZT8/XCJcIixuLnN0aWNrZXJBdHRyaWJ1dGlvbj12b2lkIDAhPT1lLnN0aWNrZXJBdHRyaWJ1dGlvbiYmbnVsbCE9PWUuc3RpY2tlckF0dHJpYnV0aW9uP3QuQ29udGV4dENsaWVudEluZm9fQ3JlYXRpdmVUb29sc1N0aWNrZXJJbmZvX1N0aWNrZXJBdHRyaWJ1dGlvbi5mcm9tUGFydGlhbChlLnN0aWNrZXJBdHRyaWJ1dGlvbik6dm9pZCAwLG59fSx0LkNvbnRleHRDbGllbnRJbmZvX0NyZWF0aXZlVG9vbHNTdGlja2VySW5mb19TdGlja2VyQXR0cmlidXRpb249e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cImFwcEluZm9cIj09PWUuYXR0cmlidXRpb24/LiRjYXNlJiZ0LkNvbnRleHRDbGllbnRJbmZvX0FwcEluZm8uZW5jb2RlKGUuYXR0cmlidXRpb24uYXBwSW5mbyxuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSxcInNob3BwaW5nU3RpY2tlclwiPT09ZS5hdHRyaWJ1dGlvbj8uJGNhc2UmJmguU2hvcHBpbmdTdGlja2VyLmVuY29kZShlLmF0dHJpYnV0aW9uLnNob3BwaW5nU3RpY2tlcixuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBtLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG0uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89e2F0dHJpYnV0aW9uOnZvaWQgMH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8uYXR0cmlidXRpb249eyRjYXNlOlwiYXBwSW5mb1wiLGFwcEluZm86dC5Db250ZXh0Q2xpZW50SW5mb19BcHBJbmZvLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDI6by5hdHRyaWJ1dGlvbj17JGNhc2U6XCJzaG9wcGluZ1N0aWNrZXJcIixzaG9wcGluZ1N0aWNrZXI6aC5TaG9wcGluZ1N0aWNrZXIuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17YXR0cmlidXRpb246dm9pZCAwfTtyZXR1cm5cImFwcEluZm9cIj09PWUuYXR0cmlidXRpb24/LiRjYXNlJiZ2b2lkIDAhPT1lLmF0dHJpYnV0aW9uPy5hcHBJbmZvJiZudWxsIT09ZS5hdHRyaWJ1dGlvbj8uYXBwSW5mbyYmKG4uYXR0cmlidXRpb249eyRjYXNlOlwiYXBwSW5mb1wiLGFwcEluZm86dC5Db250ZXh0Q2xpZW50SW5mb19BcHBJbmZvLmZyb21QYXJ0aWFsKGUuYXR0cmlidXRpb24uYXBwSW5mbyl9KSxcInNob3BwaW5nU3RpY2tlclwiPT09ZS5hdHRyaWJ1dGlvbj8uJGNhc2UmJnZvaWQgMCE9PWUuYXR0cmlidXRpb24/LnNob3BwaW5nU3RpY2tlciYmbnVsbCE9PWUuYXR0cmlidXRpb24/LnNob3BwaW5nU3RpY2tlciYmKG4uYXR0cmlidXRpb249eyRjYXNlOlwic2hvcHBpbmdTdGlja2VyXCIsc2hvcHBpbmdTdGlja2VyOmguU2hvcHBpbmdTdGlja2VyLmZyb21QYXJ0aWFsKGUuYXR0cmlidXRpb24uc2hvcHBpbmdTdGlja2VyKX0pLG59fSx0LkNvbnRleHRDbGllbnRJbmZvX0hhc2h0YWc9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS50aXRsZSYmdC51aW50MzIoMTApLnN0cmluZyhlLnRpdGxlKSwhMD09PWUuaXNTZXJ2ZXJTdWdnZXN0ZWQmJnQudWludDMyKDI0KS5ib29sKGUuaXNTZXJ2ZXJTdWdnZXN0ZWQpLDAhPT1lLnNvdXJjZSYmdC51aW50MzIoMTYpLmludDMyKGUuc291cmNlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBtLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG0uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3RpdGxlOlwiXCIsaXNTZXJ2ZXJTdWdnZXN0ZWQ6ITEsc291cmNlOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnRpdGxlPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmkuaXNTZXJ2ZXJTdWdnZXN0ZWQ9bi5ib29sKCk7YnJlYWs7Y2FzZSAyOmkuc291cmNlPW4uaW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3RpdGxlOlwiXCIsaXNTZXJ2ZXJTdWdnZXN0ZWQ6ITEsc291cmNlOjB9O3JldHVybiB0LnRpdGxlPWUudGl0bGU/P1wiXCIsdC5pc1NlcnZlclN1Z2dlc3RlZD1lLmlzU2VydmVyU3VnZ2VzdGVkPz8hMSx0LnNvdXJjZT1lLnNvdXJjZT8/MCx0fX0sdC5Db250ZXh0Q2xpZW50SW5mb19Bc3Ryb2xvZ3lQcm9maWxlSW5mbz17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTptLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwicGVyc29uYWxpdHlQcm9maWxlXCI9PT1lLnByb2ZpbGU/LiRjYXNlJiZ0LkNvbnRleHRDbGllbnRJbmZvX0FzdHJvbG9neVByb2ZpbGVJbmZvX1BlcnNvbmFsaXR5UHJvZmlsZS5lbmNvZGUoZS5wcm9maWxlLnBlcnNvbmFsaXR5UHJvZmlsZSxuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSxcImNvbXBhdGliaWxpdHlQcm9maWxlXCI9PT1lLnByb2ZpbGU/LiRjYXNlJiZ0LkNvbnRleHRDbGllbnRJbmZvX0FzdHJvbG9neVByb2ZpbGVJbmZvX0NvbXBhdGliaWxpdHlQcm9maWxlLmVuY29kZShlLnByb2ZpbGUuY29tcGF0aWJpbGl0eVByb2ZpbGUsbi51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgbS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBtLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXtwcm9maWxlOnZvaWQgMH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8ucHJvZmlsZT17JGNhc2U6XCJwZXJzb25hbGl0eVByb2ZpbGVcIixwZXJzb25hbGl0eVByb2ZpbGU6dC5Db250ZXh0Q2xpZW50SW5mb19Bc3Ryb2xvZ3lQcm9maWxlSW5mb19QZXJzb25hbGl0eVByb2ZpbGUuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMjpvLnByb2ZpbGU9eyRjYXNlOlwiY29tcGF0aWJpbGl0eVByb2ZpbGVcIixjb21wYXRpYmlsaXR5UHJvZmlsZTp0LkNvbnRleHRDbGllbnRJbmZvX0FzdHJvbG9neVByb2ZpbGVJbmZvX0NvbXBhdGliaWxpdHlQcm9maWxlLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e3Byb2ZpbGU6dm9pZCAwfTtyZXR1cm5cInBlcnNvbmFsaXR5UHJvZmlsZVwiPT09ZS5wcm9maWxlPy4kY2FzZSYmdm9pZCAwIT09ZS5wcm9maWxlPy5wZXJzb25hbGl0eVByb2ZpbGUmJm51bGwhPT1lLnByb2ZpbGU/LnBlcnNvbmFsaXR5UHJvZmlsZSYmKG4ucHJvZmlsZT17JGNhc2U6XCJwZXJzb25hbGl0eVByb2ZpbGVcIixwZXJzb25hbGl0eVByb2ZpbGU6dC5Db250ZXh0Q2xpZW50SW5mb19Bc3Ryb2xvZ3lQcm9maWxlSW5mb19QZXJzb25hbGl0eVByb2ZpbGUuZnJvbVBhcnRpYWwoZS5wcm9maWxlLnBlcnNvbmFsaXR5UHJvZmlsZSl9KSxcImNvbXBhdGliaWxpdHlQcm9maWxlXCI9PT1lLnByb2ZpbGU/LiRjYXNlJiZ2b2lkIDAhPT1lLnByb2ZpbGU/LmNvbXBhdGliaWxpdHlQcm9maWxlJiZudWxsIT09ZS5wcm9maWxlPy5jb21wYXRpYmlsaXR5UHJvZmlsZSYmKG4ucHJvZmlsZT17JGNhc2U6XCJjb21wYXRpYmlsaXR5UHJvZmlsZVwiLGNvbXBhdGliaWxpdHlQcm9maWxlOnQuQ29udGV4dENsaWVudEluZm9fQXN0cm9sb2d5UHJvZmlsZUluZm9fQ29tcGF0aWJpbGl0eVByb2ZpbGUuZnJvbVBhcnRpYWwoZS5wcm9maWxlLmNvbXBhdGliaWxpdHlQcm9maWxlKX0pLG59fSx0LkNvbnRleHRDbGllbnRJbmZvX0FzdHJvbG9neVByb2ZpbGVJbmZvX1BlcnNvbmFsaXR5UHJvZmlsZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTptLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLm93bmVyVXNlcklkJiZhLlVVSUQuZW5jb2RlKGUub3duZXJVc2VySWQsdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBtLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtvd25lclVzZXJJZDp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLm93bmVyVXNlcklkPWEuVVVJRC5kZWNvZGUobixuLnVpbnQzMigpKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e293bmVyVXNlcklkOnZvaWQgMH07cmV0dXJuIHQub3duZXJVc2VySWQ9dm9pZCAwIT09ZS5vd25lclVzZXJJZCYmbnVsbCE9PWUub3duZXJVc2VySWQ/YS5VVUlELmZyb21QYXJ0aWFsKGUub3duZXJVc2VySWQpOnZvaWQgMCx0fX0sdC5Db250ZXh0Q2xpZW50SW5mb19Bc3Ryb2xvZ3lQcm9maWxlSW5mb19Db21wYXRpYmlsaXR5UHJvZmlsZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTptLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLnNoYXJpbmdVc2VySWQmJmEuVVVJRC5lbmNvZGUoZS5zaGFyaW5nVXNlcklkLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17c2hhcmluZ1VzZXJJZDp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLnNoYXJpbmdVc2VySWQ9YS5VVUlELmRlY29kZShuLG4udWludDMyKCkpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17c2hhcmluZ1VzZXJJZDp2b2lkIDB9O3JldHVybiB0LnNoYXJpbmdVc2VySWQ9dm9pZCAwIT09ZS5zaGFyaW5nVXNlcklkJiZudWxsIT09ZS5zaGFyaW5nVXNlcklkP2EuVVVJRC5mcm9tUGFydGlhbChlLnNoYXJpbmdVc2VySWQpOnZvaWQgMCx0fX0sdC5Db250ZXh0Q2xpZW50SW5mb19SZW1peEluZm89e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5zb3VyY2VTbmFwSWQmJm4udWludDMyKDEwKS5zdHJpbmcoZS5zb3VyY2VTbmFwSWQpLHZvaWQgMCE9PWUuc291cmNlVXNlcklkJiZhLlVVSUQuZW5jb2RlKGUuc291cmNlVXNlcklkLG4udWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLCEwPT09ZS51c2VyRGlzYWJsZWRNZW50aW9uUmVtaXhpbmcmJm4udWludDMyKDI0KS5ib29sKGUudXNlckRpc2FibGVkTWVudGlvblJlbWl4aW5nKSxcInVzZXJTdG9yeVNvdXJjZVwiPT09ZS5zb3VyY2U/LiRjYXNlJiZ0LkNvbnRleHRDbGllbnRJbmZvX1JlbWl4SW5mb19Vc2VyU3RvcnlTb3VyY2UuZW5jb2RlKGUuc291cmNlLnVzZXJTdG9yeVNvdXJjZSxuLnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKSxcInNwb3RsaWdodFNvdXJjZVwiPT09ZS5zb3VyY2U/LiRjYXNlJiZ0LkNvbnRleHRDbGllbnRJbmZvX1JlbWl4SW5mb19TcG90bGlnaHRTb3VyY2UuZW5jb2RlKGUuc291cmNlLnNwb3RsaWdodFNvdXJjZSxuLnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKSxcIm1lbW9yaWVzU291cmNlXCI9PT1lLnNvdXJjZT8uJGNhc2UmJnQuQ29udGV4dENsaWVudEluZm9fUmVtaXhJbmZvX01lbW9yaWVzU291cmNlLmVuY29kZShlLnNvdXJjZS5tZW1vcmllc1NvdXJjZSxuLnVpbnQzMig1MCkuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBtLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG0uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89e3NvdXJjZVNuYXBJZDpcIlwiLHNvdXJjZVVzZXJJZDp2b2lkIDAsdXNlckRpc2FibGVkTWVudGlvblJlbWl4aW5nOiExLHNvdXJjZTp2b2lkIDB9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLnNvdXJjZVNuYXBJZD1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMjpvLnNvdXJjZVVzZXJJZD1hLlVVSUQuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAzOm8udXNlckRpc2FibGVkTWVudGlvblJlbWl4aW5nPXIuYm9vbCgpO2JyZWFrO2Nhc2UgNDpvLnNvdXJjZT17JGNhc2U6XCJ1c2VyU3RvcnlTb3VyY2VcIix1c2VyU3RvcnlTb3VyY2U6dC5Db250ZXh0Q2xpZW50SW5mb19SZW1peEluZm9fVXNlclN0b3J5U291cmNlLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDU6by5zb3VyY2U9eyRjYXNlOlwic3BvdGxpZ2h0U291cmNlXCIsc3BvdGxpZ2h0U291cmNlOnQuQ29udGV4dENsaWVudEluZm9fUmVtaXhJbmZvX1Nwb3RsaWdodFNvdXJjZS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA2Om8uc291cmNlPXskY2FzZTpcIm1lbW9yaWVzU291cmNlXCIsbWVtb3JpZXNTb3VyY2U6dC5Db250ZXh0Q2xpZW50SW5mb19SZW1peEluZm9fTWVtb3JpZXNTb3VyY2UuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17c291cmNlU25hcElkOlwiXCIsc291cmNlVXNlcklkOnZvaWQgMCx1c2VyRGlzYWJsZWRNZW50aW9uUmVtaXhpbmc6ITEsc291cmNlOnZvaWQgMH07cmV0dXJuIG4uc291cmNlU25hcElkPWUuc291cmNlU25hcElkPz9cIlwiLG4uc291cmNlVXNlcklkPXZvaWQgMCE9PWUuc291cmNlVXNlcklkJiZudWxsIT09ZS5zb3VyY2VVc2VySWQ/YS5VVUlELmZyb21QYXJ0aWFsKGUuc291cmNlVXNlcklkKTp2b2lkIDAsbi51c2VyRGlzYWJsZWRNZW50aW9uUmVtaXhpbmc9ZS51c2VyRGlzYWJsZWRNZW50aW9uUmVtaXhpbmc/PyExLFwidXNlclN0b3J5U291cmNlXCI9PT1lLnNvdXJjZT8uJGNhc2UmJnZvaWQgMCE9PWUuc291cmNlPy51c2VyU3RvcnlTb3VyY2UmJm51bGwhPT1lLnNvdXJjZT8udXNlclN0b3J5U291cmNlJiYobi5zb3VyY2U9eyRjYXNlOlwidXNlclN0b3J5U291cmNlXCIsdXNlclN0b3J5U291cmNlOnQuQ29udGV4dENsaWVudEluZm9fUmVtaXhJbmZvX1VzZXJTdG9yeVNvdXJjZS5mcm9tUGFydGlhbChlLnNvdXJjZS51c2VyU3RvcnlTb3VyY2UpfSksXCJzcG90bGlnaHRTb3VyY2VcIj09PWUuc291cmNlPy4kY2FzZSYmdm9pZCAwIT09ZS5zb3VyY2U/LnNwb3RsaWdodFNvdXJjZSYmbnVsbCE9PWUuc291cmNlPy5zcG90bGlnaHRTb3VyY2UmJihuLnNvdXJjZT17JGNhc2U6XCJzcG90bGlnaHRTb3VyY2VcIixzcG90bGlnaHRTb3VyY2U6dC5Db250ZXh0Q2xpZW50SW5mb19SZW1peEluZm9fU3BvdGxpZ2h0U291cmNlLmZyb21QYXJ0aWFsKGUuc291cmNlLnNwb3RsaWdodFNvdXJjZSl9KSxcIm1lbW9yaWVzU291cmNlXCI9PT1lLnNvdXJjZT8uJGNhc2UmJnZvaWQgMCE9PWUuc291cmNlPy5tZW1vcmllc1NvdXJjZSYmbnVsbCE9PWUuc291cmNlPy5tZW1vcmllc1NvdXJjZSYmKG4uc291cmNlPXskY2FzZTpcIm1lbW9yaWVzU291cmNlXCIsbWVtb3JpZXNTb3VyY2U6dC5Db250ZXh0Q2xpZW50SW5mb19SZW1peEluZm9fTWVtb3JpZXNTb3VyY2UuZnJvbVBhcnRpYWwoZS5zb3VyY2UubWVtb3JpZXNTb3VyY2UpfSksbn19LHQuQ29udGV4dENsaWVudEluZm9fUmVtaXhJbmZvX1VzZXJTdG9yeVNvdXJjZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTptLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLnVzZXJJZCYmYS5VVUlELmVuY29kZShlLnVzZXJJZCx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSxcIlwiIT09ZS5zbmFwSWQmJnQudWludDMyKDE4KS5zdHJpbmcoZS5zbmFwSWQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17dXNlcklkOnZvaWQgMCxzbmFwSWQ6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkudXNlcklkPWEuVVVJRC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDI6aS5zbmFwSWQ9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3VzZXJJZDp2b2lkIDAsc25hcElkOlwiXCJ9O3JldHVybiB0LnVzZXJJZD12b2lkIDAhPT1lLnVzZXJJZCYmbnVsbCE9PWUudXNlcklkP2EuVVVJRC5mcm9tUGFydGlhbChlLnVzZXJJZCk6dm9pZCAwLHQuc25hcElkPWUuc25hcElkPz9cIlwiLHR9fSx0LkNvbnRleHRDbGllbnRJbmZvX1JlbWl4SW5mb19TcG90bGlnaHRTb3VyY2U9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS51c2VySWQmJmEuVVVJRC5lbmNvZGUoZS51c2VySWQsdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksXCJcIiE9PWUuc25hcElkJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuc25hcElkKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBtLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG0uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3VzZXJJZDp2b2lkIDAsc25hcElkOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnVzZXJJZD1hLlVVSUQuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOmkuc25hcElkPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt1c2VySWQ6dm9pZCAwLHNuYXBJZDpcIlwifTtyZXR1cm4gdC51c2VySWQ9dm9pZCAwIT09ZS51c2VySWQmJm51bGwhPT1lLnVzZXJJZD9hLlVVSUQuZnJvbVBhcnRpYWwoZS51c2VySWQpOnZvaWQgMCx0LnNuYXBJZD1lLnNuYXBJZD8/XCJcIix0fX0sdC5Db250ZXh0Q2xpZW50SW5mb19SZW1peEluZm9fTWVtb3JpZXNTb3VyY2U9e2VuY29kZShlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCl9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO24uc2tpcFR5cGUoNyZlKX1yZXR1cm57fX0sZnJvbVBhcnRpYWw6ZT0+KHt9KX0sdC5Db250ZXh0Q2xpZW50SW5mb19TbmFwS2l0SW5mbz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTptLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLm9hdXRoQ2xpZW50SWQmJnQudWludDMyKDEwKS5zdHJpbmcoZS5vYXV0aENsaWVudElkKSxcIlwiIT09ZS5wcm92aWRlZEFwcE5hbWUmJnQudWludDMyKDE4KS5zdHJpbmcoZS5wcm92aWRlZEFwcE5hbWUpLFwiXCIhPT1lLmF0dGFjaG1lbnRVcmwmJnQudWludDMyKDI2KS5zdHJpbmcoZS5hdHRhY2htZW50VXJsKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBtLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG0uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e29hdXRoQ2xpZW50SWQ6XCJcIixwcm92aWRlZEFwcE5hbWU6XCJcIixhdHRhY2htZW50VXJsOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLm9hdXRoQ2xpZW50SWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS5wcm92aWRlZEFwcE5hbWU9bi5zdHJpbmcoKTticmVhaztjYXNlIDM6aS5hdHRhY2htZW50VXJsPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtvYXV0aENsaWVudElkOlwiXCIscHJvdmlkZWRBcHBOYW1lOlwiXCIsYXR0YWNobWVudFVybDpcIlwifTtyZXR1cm4gdC5vYXV0aENsaWVudElkPWUub2F1dGhDbGllbnRJZD8/XCJcIix0LnByb3ZpZGVkQXBwTmFtZT1lLnByb3ZpZGVkQXBwTmFtZT8/XCJcIix0LmF0dGFjaG1lbnRVcmw9ZS5hdHRhY2htZW50VXJsPz9cIlwiLHR9fSx0LkNvbnRleHRDbGllbnRJbmZvX1JlbWl4U2V0dGluZ3NJbmZvPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuITA9PT1lLnVzZXJEaXNhYmxlZE1lbnRpb25SZW1peGluZyYmdC51aW50MzIoOCkuYm9vbChlLnVzZXJEaXNhYmxlZE1lbnRpb25SZW1peGluZyksITA9PT1lLnVzZXJEaXNhYmxlZFJlbWl4aW5nJiZ0LnVpbnQzMigxNikuYm9vbChlLnVzZXJEaXNhYmxlZFJlbWl4aW5nKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBtLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG0uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3VzZXJEaXNhYmxlZE1lbnRpb25SZW1peGluZzohMSx1c2VyRGlzYWJsZWRSZW1peGluZzohMX07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkudXNlckRpc2FibGVkTWVudGlvblJlbWl4aW5nPW4uYm9vbCgpO2JyZWFrO2Nhc2UgMjppLnVzZXJEaXNhYmxlZFJlbWl4aW5nPW4uYm9vbCgpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dXNlckRpc2FibGVkTWVudGlvblJlbWl4aW5nOiExLHVzZXJEaXNhYmxlZFJlbWl4aW5nOiExfTtyZXR1cm4gdC51c2VyRGlzYWJsZWRNZW50aW9uUmVtaXhpbmc9ZS51c2VyRGlzYWJsZWRNZW50aW9uUmVtaXhpbmc/PyExLHQudXNlckRpc2FibGVkUmVtaXhpbmc9ZS51c2VyRGlzYWJsZWRSZW1peGluZz8/ITEsdH19LHQuQ29udGV4dENsaWVudEluZm9fQ29tbWVyY2VJbmZvPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7Zm9yKGNvbnN0IHIgb2YgZS5jb21tZXJjZUl0ZW1JbmZvKXQuQ29udGV4dENsaWVudEluZm9fQ29tbWVyY2VJbmZvX0NvbW1lcmNlSXRlbUluZm8uZW5jb2RlKHIsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7Zm9yKGNvbnN0IHIgb2YgZS5jb21tZXJjZVN0b3JlSW5mbyl0LkNvbnRleHRDbGllbnRJbmZvX0NvbW1lcmNlSW5mb19Db21tZXJjZVN0b3JlSW5mby5lbmNvZGUocixuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gdm9pZCAwIT09ZS5zY3JlZW5zaG9wU25hcEVsaWdpYmlsaXR5JiZ0LkNvbnRleHRDbGllbnRJbmZvX0NvbW1lcmNlSW5mb19TY3JlZW5TaG9wU25hcEVsaWdpYmlsaXR5LmVuY29kZShlLnNjcmVlbnNob3BTbmFwRWxpZ2liaWxpdHksbi51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgbS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBtLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXtjb21tZXJjZUl0ZW1JbmZvOltdLGNvbW1lcmNlU3RvcmVJbmZvOltdLHNjcmVlbnNob3BTbmFwRWxpZ2liaWxpdHk6dm9pZCAwfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5jb21tZXJjZUl0ZW1JbmZvLnB1c2godC5Db250ZXh0Q2xpZW50SW5mb19Db21tZXJjZUluZm9fQ29tbWVyY2VJdGVtSW5mby5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAyOm8uY29tbWVyY2VTdG9yZUluZm8ucHVzaCh0LkNvbnRleHRDbGllbnRJbmZvX0NvbW1lcmNlSW5mb19Db21tZXJjZVN0b3JlSW5mby5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAzOm8uc2NyZWVuc2hvcFNuYXBFbGlnaWJpbGl0eT10LkNvbnRleHRDbGllbnRJbmZvX0NvbW1lcmNlSW5mb19TY3JlZW5TaG9wU25hcEVsaWdpYmlsaXR5LmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17Y29tbWVyY2VJdGVtSW5mbzpbXSxjb21tZXJjZVN0b3JlSW5mbzpbXSxzY3JlZW5zaG9wU25hcEVsaWdpYmlsaXR5OnZvaWQgMH07cmV0dXJuIG4uY29tbWVyY2VJdGVtSW5mbz1lLmNvbW1lcmNlSXRlbUluZm8/Lm1hcCgoZT0+dC5Db250ZXh0Q2xpZW50SW5mb19Db21tZXJjZUluZm9fQ29tbWVyY2VJdGVtSW5mby5mcm9tUGFydGlhbChlKSkpfHxbXSxuLmNvbW1lcmNlU3RvcmVJbmZvPWUuY29tbWVyY2VTdG9yZUluZm8/Lm1hcCgoZT0+dC5Db250ZXh0Q2xpZW50SW5mb19Db21tZXJjZUluZm9fQ29tbWVyY2VTdG9yZUluZm8uZnJvbVBhcnRpYWwoZSkpKXx8W10sbi5zY3JlZW5zaG9wU25hcEVsaWdpYmlsaXR5PXZvaWQgMCE9PWUuc2NyZWVuc2hvcFNuYXBFbGlnaWJpbGl0eSYmbnVsbCE9PWUuc2NyZWVuc2hvcFNuYXBFbGlnaWJpbGl0eT90LkNvbnRleHRDbGllbnRJbmZvX0NvbW1lcmNlSW5mb19TY3JlZW5TaG9wU25hcEVsaWdpYmlsaXR5LmZyb21QYXJ0aWFsKGUuc2NyZWVuc2hvcFNuYXBFbGlnaWJpbGl0eSk6dm9pZCAwLG59fSx0LkNvbnRleHRDbGllbnRJbmZvX0NvbW1lcmNlSW5mb19Db21tZXJjZUl0ZW1JbmZvPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUua2V5JiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUua2V5KSxcIjBcIiE9PWUuc25hcEl0ZW1JZCYmdC51aW50MzIoMTYpLmludDY0KGUuc25hcEl0ZW1JZCksXCJcIiE9PWUuc3RvcmVJZCYmdC51aW50MzIoMjYpLnN0cmluZyhlLnN0b3JlSWQpLDAhPT1lLml0ZW1UeXBlJiZ0LnVpbnQzMigzMikuaW50MzIoZS5pdGVtVHlwZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBtLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtrZXk6XCJcIixzbmFwSXRlbUlkOlwiMFwiLHN0b3JlSWQ6XCJcIixpdGVtVHlwZTowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5rZXk9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS5zbmFwSXRlbUlkPWcobi5pbnQ2NCgpKTticmVhaztjYXNlIDM6aS5zdG9yZUlkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA0OmkuaXRlbVR5cGU9bi5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17a2V5OlwiXCIsc25hcEl0ZW1JZDpcIjBcIixzdG9yZUlkOlwiXCIsaXRlbVR5cGU6MH07cmV0dXJuIHQua2V5PWUua2V5Pz9cIlwiLHQuc25hcEl0ZW1JZD1lLnNuYXBJdGVtSWQ/P1wiMFwiLHQuc3RvcmVJZD1lLnN0b3JlSWQ/P1wiXCIsdC5pdGVtVHlwZT1lLml0ZW1UeXBlPz8wLHR9fSx0LkNvbnRleHRDbGllbnRJbmZvX0NvbW1lcmNlSW5mb19Db21tZXJjZVN0b3JlSW5mbz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTptLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmtleSYmdC51aW50MzIoMTApLnN0cmluZyhlLmtleSksXCJcIiE9PWUuc3RvcmVJZCYmdC51aW50MzIoMTgpLnN0cmluZyhlLnN0b3JlSWQpLFwiXCIhPT1lLmNhdGVnb3J5SWQmJnQudWludDMyKDI2KS5zdHJpbmcoZS5jYXRlZ29yeUlkKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBtLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG0uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2tleTpcIlwiLHN0b3JlSWQ6XCJcIixjYXRlZ29yeUlkOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmtleT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLnN0b3JlSWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDM6aS5jYXRlZ29yeUlkPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtrZXk6XCJcIixzdG9yZUlkOlwiXCIsY2F0ZWdvcnlJZDpcIlwifTtyZXR1cm4gdC5rZXk9ZS5rZXk/P1wiXCIsdC5zdG9yZUlkPWUuc3RvcmVJZD8/XCJcIix0LmNhdGVnb3J5SWQ9ZS5jYXRlZ29yeUlkPz9cIlwiLHR9fSx0LkNvbnRleHRDbGllbnRJbmZvX0NvbW1lcmNlSW5mb19TY3JlZW5TaG9wU25hcEVsaWdpYmlsaXR5PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLnByb2Nlc3NpbmdTdGF0dXMmJnQudWludDMyKDgpLmludDMyKGUucHJvY2Vzc2luZ1N0YXR1cyksdm9pZCAwIT09ZS5zaG9wcGFiaWxpdHlJbmRpY2F0b3ImJmQuU2hvcHBhYmlsaXR5SW5kaWNhdG9yLmVuY29kZShlLnNob3BwYWJpbGl0eUluZGljYXRvcix0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBtLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG0uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3Byb2Nlc3NpbmdTdGF0dXM6MCxzaG9wcGFiaWxpdHlJbmRpY2F0b3I6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5wcm9jZXNzaW5nU3RhdHVzPW4uaW50MzIoKTticmVhaztjYXNlIDI6aS5zaG9wcGFiaWxpdHlJbmRpY2F0b3I9ZC5TaG9wcGFiaWxpdHlJbmRpY2F0b3IuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtwcm9jZXNzaW5nU3RhdHVzOjAsc2hvcHBhYmlsaXR5SW5kaWNhdG9yOnZvaWQgMH07cmV0dXJuIHQucHJvY2Vzc2luZ1N0YXR1cz1lLnByb2Nlc3NpbmdTdGF0dXM/PzAsdC5zaG9wcGFiaWxpdHlJbmRpY2F0b3I9dm9pZCAwIT09ZS5zaG9wcGFiaWxpdHlJbmRpY2F0b3ImJm51bGwhPT1lLnNob3BwYWJpbGl0eUluZGljYXRvcj9kLlNob3BwYWJpbGl0eUluZGljYXRvci5mcm9tUGFydGlhbChlLnNob3BwYWJpbGl0eUluZGljYXRvcik6dm9pZCAwLHR9fSx0LkNvbnRleHRDbGllbnRJbmZvX1BvbGxDb250ZXh0SW5mbz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTptLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnBvbGxJZCYmdC51aW50MzIoMTApLnN0cmluZyhlLnBvbGxJZCksXCJcIiE9PWUudGl0bGUmJnQudWludDMyKDE4KS5zdHJpbmcoZS50aXRsZSksdm9pZCAwIT09ZS5wb2xsSW5mbyYmZi5Qb2xsSW5mby5lbmNvZGUoZS5wb2xsSW5mbyx0LnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS5wb2xsVHlwZSYmdC51aW50MzIoMzIpLmludDMyKGUucG9sbFR5cGUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17cG9sbElkOlwiXCIsdGl0bGU6XCJcIixwb2xsSW5mbzp2b2lkIDAscG9sbFR5cGU6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkucG9sbElkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkudGl0bGU9bi5zdHJpbmcoKTticmVhaztjYXNlIDM6aS5wb2xsSW5mbz1mLlBvbGxJbmZvLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgNDppLnBvbGxUeXBlPW4uaW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3BvbGxJZDpcIlwiLHRpdGxlOlwiXCIscG9sbEluZm86dm9pZCAwLHBvbGxUeXBlOjB9O3JldHVybiB0LnBvbGxJZD1lLnBvbGxJZD8/XCJcIix0LnRpdGxlPWUudGl0bGU/P1wiXCIsdC5wb2xsSW5mbz12b2lkIDAhPT1lLnBvbGxJbmZvJiZudWxsIT09ZS5wb2xsSW5mbz9mLlBvbGxJbmZvLmZyb21QYXJ0aWFsKGUucG9sbEluZm8pOnZvaWQgMCx0LnBvbGxUeXBlPWUucG9sbFR5cGU/PzAsdH19LHQuQ29udGV4dENsaWVudEluZm9fUXVlc3Rpb25TdGlja2VySW5mbz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTptLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnF1ZXN0aW9uJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUucXVlc3Rpb24pLFwiMFwiIT09ZS5xdWVzdGlvbkNyZWF0aW9uVGltZXN0YW1wJiZ0LnVpbnQzMigxNikudWludDY0KGUucXVlc3Rpb25DcmVhdGlvblRpbWVzdGFtcCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBtLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtxdWVzdGlvbjpcIlwiLHF1ZXN0aW9uQ3JlYXRpb25UaW1lc3RhbXA6XCIwXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnF1ZXN0aW9uPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkucXVlc3Rpb25DcmVhdGlvblRpbWVzdGFtcD1nKG4udWludDY0KCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17cXVlc3Rpb246XCJcIixxdWVzdGlvbkNyZWF0aW9uVGltZXN0YW1wOlwiMFwifTtyZXR1cm4gdC5xdWVzdGlvbj1lLnF1ZXN0aW9uPz9cIlwiLHQucXVlc3Rpb25DcmVhdGlvblRpbWVzdGFtcD1lLnF1ZXN0aW9uQ3JlYXRpb25UaW1lc3RhbXA/P1wiMFwiLHR9fSx0LkNvbnRleHRDbGllbnRJbmZvX0NhbWVyYUNvbnRleHRJbmZvPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUuZGlyZWN0b3JNb2RlJiZzLkRpcmVjdG9yTW9kZS5lbmNvZGUoZS5kaXJlY3Rvck1vZGUsdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5kdWFsQ2FtZXJhJiZzLkR1YWxDYW1lcmEuZW5jb2RlKGUuZHVhbENhbWVyYSx0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmdyZWVuU2NyZWVuJiZzLkdyZWVuU2NyZWVuLmVuY29kZShlLmdyZWVuU2NyZWVuLHQudWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuc3BlZWRNb2RlJiZzLlNwZWVkTW9kZS5lbmNvZGUoZS5zcGVlZE1vZGUsdC51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBtLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtkaXJlY3Rvck1vZGU6dm9pZCAwLGR1YWxDYW1lcmE6dm9pZCAwLGdyZWVuU2NyZWVuOnZvaWQgMCxzcGVlZE1vZGU6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5kaXJlY3Rvck1vZGU9cy5EaXJlY3Rvck1vZGUuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOmkuZHVhbENhbWVyYT1zLkR1YWxDYW1lcmEuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAzOmkuZ3JlZW5TY3JlZW49cy5HcmVlblNjcmVlbi5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDQ6aS5zcGVlZE1vZGU9cy5TcGVlZE1vZGUuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtkaXJlY3Rvck1vZGU6dm9pZCAwLGR1YWxDYW1lcmE6dm9pZCAwLGdyZWVuU2NyZWVuOnZvaWQgMCxzcGVlZE1vZGU6dm9pZCAwfTtyZXR1cm4gdC5kaXJlY3Rvck1vZGU9dm9pZCAwIT09ZS5kaXJlY3Rvck1vZGUmJm51bGwhPT1lLmRpcmVjdG9yTW9kZT9zLkRpcmVjdG9yTW9kZS5mcm9tUGFydGlhbChlLmRpcmVjdG9yTW9kZSk6dm9pZCAwLHQuZHVhbENhbWVyYT12b2lkIDAhPT1lLmR1YWxDYW1lcmEmJm51bGwhPT1lLmR1YWxDYW1lcmE/cy5EdWFsQ2FtZXJhLmZyb21QYXJ0aWFsKGUuZHVhbENhbWVyYSk6dm9pZCAwLHQuZ3JlZW5TY3JlZW49dm9pZCAwIT09ZS5ncmVlblNjcmVlbiYmbnVsbCE9PWUuZ3JlZW5TY3JlZW4/cy5HcmVlblNjcmVlbi5mcm9tUGFydGlhbChlLmdyZWVuU2NyZWVuKTp2b2lkIDAsdC5zcGVlZE1vZGU9dm9pZCAwIT09ZS5zcGVlZE1vZGUmJm51bGwhPT1lLnNwZWVkTW9kZT9zLlNwZWVkTW9kZS5mcm9tUGFydGlhbChlLnNwZWVkTW9kZSk6dm9pZCAwLHR9fSx0LkNvbnRleHRDbGllbnRJbmZvX1Nob3BwaW5nTGVuc0luZm89e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgbiBvZiBlLnByb2R1Y3RJZHMpdC51aW50MzIoMTApLnN0cmluZyhuKTtyZXR1cm4gdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBtLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtwcm9kdWN0SWRzOltdfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/aS5wcm9kdWN0SWRzLnB1c2gobi5zdHJpbmcoKSk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtwcm9kdWN0SWRzOltdfTtyZXR1cm4gdC5wcm9kdWN0SWRzPWUucHJvZHVjdElkcz8ubWFwKChlPT5lKSl8fFtdLHR9fSx0LkNvbnRleHRDbGllbnRJbmZvX0JpdG1vamlPdXRmaXRJbmZvPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUuY29zdHVtZU92ZXJyaWRlSWQmJmEuVVVJRC5lbmNvZGUoZS5jb3N0dW1lT3ZlcnJpZGVJZCx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBtLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG0uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2Nvc3R1bWVPdmVycmlkZUlkOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2kuY29zdHVtZU92ZXJyaWRlSWQ9YS5VVUlELmRlY29kZShuLG4udWludDMyKCkpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17Y29zdHVtZU92ZXJyaWRlSWQ6dm9pZCAwfTtyZXR1cm4gdC5jb3N0dW1lT3ZlcnJpZGVJZD12b2lkIDAhPT1lLmNvc3R1bWVPdmVycmlkZUlkJiZudWxsIT09ZS5jb3N0dW1lT3ZlcnJpZGVJZD9hLlVVSUQuZnJvbVBhcnRpYWwoZS5jb3N0dW1lT3ZlcnJpZGVJZCk6dm9pZCAwLHR9fSx0LkNvbnRleHRDbGllbnRJbmZvX1N0b3J5TWVudGlvblJlcG9zdD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTptLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnJlcG9zdFNvdXJjZVNuYXBJZCYmdC51aW50MzIoMTApLnN0cmluZyhlLnJlcG9zdFNvdXJjZVNuYXBJZCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBtLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtyZXBvc3RTb3VyY2VTbmFwSWQ6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2kucmVwb3N0U291cmNlU25hcElkPW4uc3RyaW5nKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtyZXBvc3RTb3VyY2VTbmFwSWQ6XCJcIn07cmV0dXJuIHQucmVwb3N0U291cmNlU25hcElkPWUucmVwb3N0U291cmNlU25hcElkPz9cIlwiLHR9fSx0LkFjdGlvbk1ldHJpYz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTptLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmFjdGlvblR5cGUmJnQudWludDMyKDEwKS5zdHJpbmcoZS5hY3Rpb25UeXBlKSxcIlwiIT09ZS5hY3Rpb25JZCYmdC51aW50MzIoMTgpLnN0cmluZyhlLmFjdGlvbklkKSwwIT09ZS5jYXJkRGF0YVR5cGUmJnQudWludDMyKDI0KS5pbnQzMihlLmNhcmREYXRhVHlwZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBtLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXthY3Rpb25UeXBlOlwiXCIsYWN0aW9uSWQ6XCJcIixjYXJkRGF0YVR5cGU6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuYWN0aW9uVHlwZT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLmFjdGlvbklkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmkuY2FyZERhdGFUeXBlPW4uaW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2FjdGlvblR5cGU6XCJcIixhY3Rpb25JZDpcIlwiLGNhcmREYXRhVHlwZTowfTtyZXR1cm4gdC5hY3Rpb25UeXBlPWUuYWN0aW9uVHlwZT8/XCJcIix0LmFjdGlvbklkPWUuYWN0aW9uSWQ/P1wiXCIsdC5jYXJkRGF0YVR5cGU9ZS5jYXJkRGF0YVR5cGU/PzAsdH19LHQuVXJsQWN0aW9uPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7Zm9yKGNvbnN0IG4gb2YgZS51cmxzKXQudWludDMyKDEwKS5zdHJpbmcobik7cmV0dXJuITA9PT1lLnByZWZlcnNPc0hhbmRsZXImJnQudWludDMyKDE2KS5ib29sKGUucHJlZmVyc09zSGFuZGxlciksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBtLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXt1cmxzOltdLHByZWZlcnNPc0hhbmRsZXI6ITF9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnVybHMucHVzaChuLnN0cmluZygpKTticmVhaztjYXNlIDI6aS5wcmVmZXJzT3NIYW5kbGVyPW4uYm9vbCgpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dXJsczpbXSxwcmVmZXJzT3NIYW5kbGVyOiExfTtyZXR1cm4gdC51cmxzPWUudXJscz8ubWFwKChlPT5lKSl8fFtdLHQucHJlZmVyc09zSGFuZGxlcj1lLnByZWZlcnNPc0hhbmRsZXI/PyExLHR9fSx0LlNob3dTbmFwQWN0aW9uPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUuc25hcElkJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUuc25hcElkKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBtLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG0uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3NuYXBJZDpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/aS5zbmFwSWQ9bi5zdHJpbmcoKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3NuYXBJZDpcIlwifTtyZXR1cm4gdC5zbmFwSWQ9ZS5zbmFwSWQ/P1wiXCIsdH19LHQuU25hcEtpdEFjdGlvbkluZm89e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5zbmFwS2l0QXBwbGljYXRpb25JZCYmdC51aW50MzIoMTApLnN0cmluZyhlLnNuYXBLaXRBcHBsaWNhdGlvbklkKSxcIlwiIT09ZS5vYXV0aENsaWVudElkJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUub2F1dGhDbGllbnRJZCksXCJcIiE9PWUuYXR0YWNobWVudFVybCYmdC51aW50MzIoMjYpLnN0cmluZyhlLmF0dGFjaG1lbnRVcmwpLFwiXCIhPT1lLmFwcE5hbWUmJnQudWludDMyKDM0KS5zdHJpbmcoZS5hcHBOYW1lKSxcIlwiIT09ZS5pY29uVXJsJiZ0LnVpbnQzMig0Mikuc3RyaW5nKGUuaWNvblVybCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBtLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtzbmFwS2l0QXBwbGljYXRpb25JZDpcIlwiLG9hdXRoQ2xpZW50SWQ6XCJcIixhdHRhY2htZW50VXJsOlwiXCIsYXBwTmFtZTpcIlwiLGljb25Vcmw6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuc25hcEtpdEFwcGxpY2F0aW9uSWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS5vYXV0aENsaWVudElkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmkuYXR0YWNobWVudFVybD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNDppLmFwcE5hbWU9bi5zdHJpbmcoKTticmVhaztjYXNlIDU6aS5pY29uVXJsPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtzbmFwS2l0QXBwbGljYXRpb25JZDpcIlwiLG9hdXRoQ2xpZW50SWQ6XCJcIixhdHRhY2htZW50VXJsOlwiXCIsYXBwTmFtZTpcIlwiLGljb25Vcmw6XCJcIn07cmV0dXJuIHQuc25hcEtpdEFwcGxpY2F0aW9uSWQ9ZS5zbmFwS2l0QXBwbGljYXRpb25JZD8/XCJcIix0Lm9hdXRoQ2xpZW50SWQ9ZS5vYXV0aENsaWVudElkPz9cIlwiLHQuYXR0YWNobWVudFVybD1lLmF0dGFjaG1lbnRVcmw/P1wiXCIsdC5hcHBOYW1lPWUuYXBwTmFtZT8/XCJcIix0Lmljb25Vcmw9ZS5pY29uVXJsPz9cIlwiLHR9fSx0LlNuYXBLaXRJZGVudGl0eVdlYlZpZXdBY3Rpb249e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5zbmFwS2l0QXBwbGljYXRpb25JZCYmdC51aW50MzIoMTApLnN0cmluZyhlLnNuYXBLaXRBcHBsaWNhdGlvbklkKSxcIlwiIT09ZS5vYXV0aENsaWVudElkJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUub2F1dGhDbGllbnRJZCksXCJcIiE9PWUuYXR0YWNobWVudFVybCYmdC51aW50MzIoMjYpLnN0cmluZyhlLmF0dGFjaG1lbnRVcmwpLFwiXCIhPT1lLmFwcE5hbWUmJnQudWludDMyKDM0KS5zdHJpbmcoZS5hcHBOYW1lKSxcIlwiIT09ZS5pY29uVXJsJiZ0LnVpbnQzMig0Mikuc3RyaW5nKGUuaWNvblVybCksXCJcIiE9PWUucHJpdmFjeVBvbGljeVVybCYmdC51aW50MzIoNTApLnN0cmluZyhlLnByaXZhY3lQb2xpY3lVcmwpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17c25hcEtpdEFwcGxpY2F0aW9uSWQ6XCJcIixvYXV0aENsaWVudElkOlwiXCIsYXR0YWNobWVudFVybDpcIlwiLGFwcE5hbWU6XCJcIixpY29uVXJsOlwiXCIscHJpdmFjeVBvbGljeVVybDpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5zbmFwS2l0QXBwbGljYXRpb25JZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLm9hdXRoQ2xpZW50SWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDM6aS5hdHRhY2htZW50VXJsPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA0OmkuYXBwTmFtZT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNTppLmljb25Vcmw9bi5zdHJpbmcoKTticmVhaztjYXNlIDY6aS5wcml2YWN5UG9saWN5VXJsPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtzbmFwS2l0QXBwbGljYXRpb25JZDpcIlwiLG9hdXRoQ2xpZW50SWQ6XCJcIixhdHRhY2htZW50VXJsOlwiXCIsYXBwTmFtZTpcIlwiLGljb25Vcmw6XCJcIixwcml2YWN5UG9saWN5VXJsOlwiXCJ9O3JldHVybiB0LnNuYXBLaXRBcHBsaWNhdGlvbklkPWUuc25hcEtpdEFwcGxpY2F0aW9uSWQ/P1wiXCIsdC5vYXV0aENsaWVudElkPWUub2F1dGhDbGllbnRJZD8/XCJcIix0LmF0dGFjaG1lbnRVcmw9ZS5hdHRhY2htZW50VXJsPz9cIlwiLHQuYXBwTmFtZT1lLmFwcE5hbWU/P1wiXCIsdC5pY29uVXJsPWUuaWNvblVybD8/XCJcIix0LnByaXZhY3lQb2xpY3lVcmw9ZS5wcml2YWN5UG9saWN5VXJsPz9cIlwiLHR9fSx0LlNuYXBLaXRJbnZpdGVPcGVuQWN0aW9uPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUuc25hcEtpdEFjdGlvbkluZm8mJnQuU25hcEtpdEFjdGlvbkluZm8uZW5jb2RlKGUuc25hcEtpdEFjdGlvbkluZm8sbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksXCJcIiE9PWUuYW5kcm9pZFBhY2thZ2VOYW1lJiZuLnVpbnQzMigxOCkuc3RyaW5nKGUuYW5kcm9pZFBhY2thZ2VOYW1lKSxcIlwiIT09ZS5hcHBTdG9yZUxpc3RpbmdVcmwmJm4udWludDMyKDI2KS5zdHJpbmcoZS5hcHBTdG9yZUxpc3RpbmdVcmwpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17c25hcEtpdEFjdGlvbkluZm86dm9pZCAwLGFuZHJvaWRQYWNrYWdlTmFtZTpcIlwiLGFwcFN0b3JlTGlzdGluZ1VybDpcIlwifTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5zbmFwS2l0QWN0aW9uSW5mbz10LlNuYXBLaXRBY3Rpb25JbmZvLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMjpvLmFuZHJvaWRQYWNrYWdlTmFtZT1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMzpvLmFwcFN0b3JlTGlzdGluZ1VybD1yLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17c25hcEtpdEFjdGlvbkluZm86dm9pZCAwLGFuZHJvaWRQYWNrYWdlTmFtZTpcIlwiLGFwcFN0b3JlTGlzdGluZ1VybDpcIlwifTtyZXR1cm4gbi5zbmFwS2l0QWN0aW9uSW5mbz12b2lkIDAhPT1lLnNuYXBLaXRBY3Rpb25JbmZvJiZudWxsIT09ZS5zbmFwS2l0QWN0aW9uSW5mbz90LlNuYXBLaXRBY3Rpb25JbmZvLmZyb21QYXJ0aWFsKGUuc25hcEtpdEFjdGlvbkluZm8pOnZvaWQgMCxuLmFuZHJvaWRQYWNrYWdlTmFtZT1lLmFuZHJvaWRQYWNrYWdlTmFtZT8/XCJcIixuLmFwcFN0b3JlTGlzdGluZ1VybD1lLmFwcFN0b3JlTGlzdGluZ1VybD8/XCJcIixufX0sdC5DaGF0QWN0aW9uPXtlbmNvZGUoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTptLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpfSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBtLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG0uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtuLnNraXBUeXBlKDcmZSl9cmV0dXJue319LGZyb21QYXJ0aWFsOmU9Pih7fSl9LHQuQ2FtZXJhQWN0aW9uPXtlbmNvZGUoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTptLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpfSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBtLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG0uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtuLnNraXBUeXBlKDcmZSl9cmV0dXJue319LGZyb21QYXJ0aWFsOmU9Pih7fSl9LHQuQ2FtZXJhVjJBY3Rpb249e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIm11c2ljXCI9PT1lLnRvb2w/LiRjYXNlJiZ0LkNhbWVyYVYyQWN0aW9uX011c2ljLmVuY29kZShlLnRvb2wubXVzaWMsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS50aW1lbGluZSYmcy5UaW1lbGluZS5lbmNvZGUoZS50aW1lbGluZSxuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmRpcmVjdG9yTW9kZSYmcy5EaXJlY3Rvck1vZGUuZW5jb2RlKGUuZGlyZWN0b3JNb2RlLG4udWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuZHVhbENhbWVyYSYmcy5EdWFsQ2FtZXJhLmVuY29kZShlLmR1YWxDYW1lcmEsbi51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5ncmVlblNjcmVlbiYmcy5HcmVlblNjcmVlbi5lbmNvZGUoZS5ncmVlblNjcmVlbixuLnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnNwZWVkTW9kZSYmcy5TcGVlZE1vZGUuZW5jb2RlKGUuc3BlZWRNb2RlLG4udWludDMyKDUwKS5mb3JrKCkpLmxkZWxpbSgpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17dG9vbDp2b2lkIDAsdGltZWxpbmU6dm9pZCAwLGRpcmVjdG9yTW9kZTp2b2lkIDAsZHVhbENhbWVyYTp2b2lkIDAsZ3JlZW5TY3JlZW46dm9pZCAwLHNwZWVkTW9kZTp2b2lkIDB9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLnRvb2w9eyRjYXNlOlwibXVzaWNcIixtdXNpYzp0LkNhbWVyYVYyQWN0aW9uX011c2ljLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDI6by50aW1lbGluZT1zLlRpbWVsaW5lLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMzpvLmRpcmVjdG9yTW9kZT1zLkRpcmVjdG9yTW9kZS5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDQ6by5kdWFsQ2FtZXJhPXMuRHVhbENhbWVyYS5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDU6by5ncmVlblNjcmVlbj1zLkdyZWVuU2NyZWVuLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgNjpvLnNwZWVkTW9kZT1zLlNwZWVkTW9kZS5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e3Rvb2w6dm9pZCAwLHRpbWVsaW5lOnZvaWQgMCxkaXJlY3Rvck1vZGU6dm9pZCAwLGR1YWxDYW1lcmE6dm9pZCAwLGdyZWVuU2NyZWVuOnZvaWQgMCxzcGVlZE1vZGU6dm9pZCAwfTtyZXR1cm5cIm11c2ljXCI9PT1lLnRvb2w/LiRjYXNlJiZ2b2lkIDAhPT1lLnRvb2w/Lm11c2ljJiZudWxsIT09ZS50b29sPy5tdXNpYyYmKG4udG9vbD17JGNhc2U6XCJtdXNpY1wiLG11c2ljOnQuQ2FtZXJhVjJBY3Rpb25fTXVzaWMuZnJvbVBhcnRpYWwoZS50b29sLm11c2ljKX0pLG4udGltZWxpbmU9dm9pZCAwIT09ZS50aW1lbGluZSYmbnVsbCE9PWUudGltZWxpbmU/cy5UaW1lbGluZS5mcm9tUGFydGlhbChlLnRpbWVsaW5lKTp2b2lkIDAsbi5kaXJlY3Rvck1vZGU9dm9pZCAwIT09ZS5kaXJlY3Rvck1vZGUmJm51bGwhPT1lLmRpcmVjdG9yTW9kZT9zLkRpcmVjdG9yTW9kZS5mcm9tUGFydGlhbChlLmRpcmVjdG9yTW9kZSk6dm9pZCAwLG4uZHVhbENhbWVyYT12b2lkIDAhPT1lLmR1YWxDYW1lcmEmJm51bGwhPT1lLmR1YWxDYW1lcmE/cy5EdWFsQ2FtZXJhLmZyb21QYXJ0aWFsKGUuZHVhbENhbWVyYSk6dm9pZCAwLG4uZ3JlZW5TY3JlZW49dm9pZCAwIT09ZS5ncmVlblNjcmVlbiYmbnVsbCE9PWUuZ3JlZW5TY3JlZW4/cy5HcmVlblNjcmVlbi5mcm9tUGFydGlhbChlLmdyZWVuU2NyZWVuKTp2b2lkIDAsbi5zcGVlZE1vZGU9dm9pZCAwIT09ZS5zcGVlZE1vZGUmJm51bGwhPT1lLnNwZWVkTW9kZT9zLlNwZWVkTW9kZS5mcm9tUGFydGlhbChlLnNwZWVkTW9kZSk6dm9pZCAwLG59fSx0LkNhbWVyYVYyQWN0aW9uX011c2ljPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCIwXCIhPT1lLnRyYWNrSWQmJnQudWludDMyKDgpLnVpbnQ2NChlLnRyYWNrSWQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17dHJhY2tJZDpcIjBcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2kudHJhY2tJZD1nKG4udWludDY0KCkpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dHJhY2tJZDpcIjBcIn07cmV0dXJuIHQudHJhY2tJZD1lLnRyYWNrSWQ/P1wiMFwiLHR9fSx0LkNhcmRzQWN0aW9uPXtlbmNvZGUoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTptLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpfSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBtLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG0uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtuLnNraXBUeXBlKDcmZSl9cmV0dXJue319LGZyb21QYXJ0aWFsOmU9Pih7fSl9LHQuR3JvdXBJbnZpdGVBY3Rpb249e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5ncm91cElkJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuZ3JvdXBJZCksXCJcIiE9PWUuaW52aXRlSWQmJnQudWludDMyKDI2KS5zdHJpbmcoZS5pbnZpdGVJZCksXCJcIiE9PWUuZGVlcGxpbmsmJnQudWludDMyKDEwKS5zdHJpbmcoZS5kZWVwbGluayksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBtLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtncm91cElkOlwiXCIsaW52aXRlSWQ6XCJcIixkZWVwbGluazpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDI6aS5ncm91cElkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmkuaW52aXRlSWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDE6aS5kZWVwbGluaz1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17Z3JvdXBJZDpcIlwiLGludml0ZUlkOlwiXCIsZGVlcGxpbms6XCJcIn07cmV0dXJuIHQuZ3JvdXBJZD1lLmdyb3VwSWQ/P1wiXCIsdC5pbnZpdGVJZD1lLmludml0ZUlkPz9cIlwiLHQuZGVlcGxpbms9ZS5kZWVwbGluaz8/XCJcIix0fX0sdC5TdG9yeVJlcGx5QWN0aW9uPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUucmVxdWVzdCYmdC5Db250ZXh0Q2xpZW50SW5mb19TbmFwUmVwbHlSZXF1ZXN0SW5mby5lbmNvZGUoZS5yZXF1ZXN0LG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17cmVxdWVzdDp2b2lkIDB9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtlPj4+Mz09MT9vLnJlcXVlc3Q9dC5Db250ZXh0Q2xpZW50SW5mb19TbmFwUmVwbHlSZXF1ZXN0SW5mby5kZWNvZGUocixyLnVpbnQzMigpKTpyLnNraXBUeXBlKDcmZSl9cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e3JlcXVlc3Q6dm9pZCAwfTtyZXR1cm4gbi5yZXF1ZXN0PXZvaWQgMCE9PWUucmVxdWVzdCYmbnVsbCE9PWUucmVxdWVzdD90LkNvbnRleHRDbGllbnRJbmZvX1NuYXBSZXBseVJlcXVlc3RJbmZvLmZyb21QYXJ0aWFsKGUucmVxdWVzdCk6dm9pZCAwLG59fSx0LlN0b3J5SW52aXRlQWN0aW9uPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUuaW52aXRlJiZ0LkNvbnRleHRDbGllbnRJbmZvX1ByaXZhdGVTdG9yeUludml0ZUluZm8uZW5jb2RlKGUuaW52aXRlLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17aW52aXRlOnZvaWQgMH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO2U+Pj4zPT0xP28uaW52aXRlPXQuQ29udGV4dENsaWVudEluZm9fUHJpdmF0ZVN0b3J5SW52aXRlSW5mby5kZWNvZGUocixyLnVpbnQzMigpKTpyLnNraXBUeXBlKDcmZSl9cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e2ludml0ZTp2b2lkIDB9O3JldHVybiBuLmludml0ZT12b2lkIDAhPT1lLmludml0ZSYmbnVsbCE9PWUuaW52aXRlP3QuQ29udGV4dENsaWVudEluZm9fUHJpdmF0ZVN0b3J5SW52aXRlSW5mby5mcm9tUGFydGlhbChlLmludml0ZSk6dm9pZCAwLG59fSx0LkdhbWVBY3Rpb249e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5nYW1lSWQmJnQudWludDMyKDEwKS5zdHJpbmcoZS5nYW1lSWQpLFwiXCIhPT1lLnRodW1ibmFpbCYmdC51aW50MzIoMTgpLnN0cmluZyhlLnRodW1ibmFpbCksXCJcIiE9PWUudGl0bGUmJnQudWludDMyKDI2KS5zdHJpbmcoZS50aXRsZSksXCJcIiE9PWUubG9hZGluZ0ltYWdlJiZ0LnVpbnQzMigzNCkuc3RyaW5nKGUubG9hZGluZ0ltYWdlKSxcIlwiIT09ZS5jb250ZW50JiZ0LnVpbnQzMig0Mikuc3RyaW5nKGUuY29udGVudCksXCJcIiE9PWUuc2hhcmVJbmZvJiZ0LnVpbnQzMig1MCkuc3RyaW5nKGUuc2hhcmVJbmZvKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBtLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG0uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2dhbWVJZDpcIlwiLHRodW1ibmFpbDpcIlwiLHRpdGxlOlwiXCIsbG9hZGluZ0ltYWdlOlwiXCIsY29udGVudDpcIlwiLHNoYXJlSW5mbzpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5nYW1lSWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS50aHVtYm5haWw9bi5zdHJpbmcoKTticmVhaztjYXNlIDM6aS50aXRsZT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNDppLmxvYWRpbmdJbWFnZT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNTppLmNvbnRlbnQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDY6aS5zaGFyZUluZm89bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2dhbWVJZDpcIlwiLHRodW1ibmFpbDpcIlwiLHRpdGxlOlwiXCIsbG9hZGluZ0ltYWdlOlwiXCIsY29udGVudDpcIlwiLHNoYXJlSW5mbzpcIlwifTtyZXR1cm4gdC5nYW1lSWQ9ZS5nYW1lSWQ/P1wiXCIsdC50aHVtYm5haWw9ZS50aHVtYm5haWw/P1wiXCIsdC50aXRsZT1lLnRpdGxlPz9cIlwiLHQubG9hZGluZ0ltYWdlPWUubG9hZGluZ0ltYWdlPz9cIlwiLHQuY29udGVudD1lLmNvbnRlbnQ/P1wiXCIsdC5zaGFyZUluZm89ZS5zaGFyZUluZm8/P1wiXCIsdH19LHQuVXNlclByb2ZpbGVBY3Rpb249e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS51c2VySWQmJnQudWludDMyKDEwKS5zdHJpbmcoZS51c2VySWQpLFwiXCIhPT1lLnVzZXJuYW1lJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUudXNlcm5hbWUpLFwiXCIhPT1lLmRlZmF1bHREaXNwbGF5TmFtZSYmdC51aW50MzIoMjYpLnN0cmluZyhlLmRlZmF1bHREaXNwbGF5TmFtZSksXCJcIiE9PWUuYml0bW9qaUF2YXRhcklkJiZ0LnVpbnQzMigzNCkuc3RyaW5nKGUuYml0bW9qaUF2YXRhcklkKSxcIlwiIT09ZS5iaXRtb2ppU2VsZmllSWQmJnQudWludDMyKDQyKS5zdHJpbmcoZS5iaXRtb2ppU2VsZmllSWQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17dXNlcklkOlwiXCIsdXNlcm5hbWU6XCJcIixkZWZhdWx0RGlzcGxheU5hbWU6XCJcIixiaXRtb2ppQXZhdGFySWQ6XCJcIixiaXRtb2ppU2VsZmllSWQ6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkudXNlcklkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkudXNlcm5hbWU9bi5zdHJpbmcoKTticmVhaztjYXNlIDM6aS5kZWZhdWx0RGlzcGxheU5hbWU9bi5zdHJpbmcoKTticmVhaztjYXNlIDQ6aS5iaXRtb2ppQXZhdGFySWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDU6aS5iaXRtb2ppU2VsZmllSWQ9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3VzZXJJZDpcIlwiLHVzZXJuYW1lOlwiXCIsZGVmYXVsdERpc3BsYXlOYW1lOlwiXCIsYml0bW9qaUF2YXRhcklkOlwiXCIsYml0bW9qaVNlbGZpZUlkOlwiXCJ9O3JldHVybiB0LnVzZXJJZD1lLnVzZXJJZD8/XCJcIix0LnVzZXJuYW1lPWUudXNlcm5hbWU/P1wiXCIsdC5kZWZhdWx0RGlzcGxheU5hbWU9ZS5kZWZhdWx0RGlzcGxheU5hbWU/P1wiXCIsdC5iaXRtb2ppQXZhdGFySWQ9ZS5iaXRtb2ppQXZhdGFySWQ/P1wiXCIsdC5iaXRtb2ppU2VsZmllSWQ9ZS5iaXRtb2ppU2VsZmllSWQ/P1wiXCIsdH19LHQuUHVibGljUHJvZmlsZUFjdGlvbj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTptLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnByb2ZpbGVJZCYmdC51aW50MzIoMTApLnN0cmluZyhlLnByb2ZpbGVJZCksXCJcIiE9PWUuaG9zdEFjY291bnRVc2VySWQmJnQudWludDMyKDE4KS5zdHJpbmcoZS5ob3N0QWNjb3VudFVzZXJJZCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBtLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtwcm9maWxlSWQ6XCJcIixob3N0QWNjb3VudFVzZXJJZDpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5wcm9maWxlSWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS5ob3N0QWNjb3VudFVzZXJJZD1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17cHJvZmlsZUlkOlwiXCIsaG9zdEFjY291bnRVc2VySWQ6XCJcIn07cmV0dXJuIHQucHJvZmlsZUlkPWUucHJvZmlsZUlkPz9cIlwiLHQuaG9zdEFjY291bnRVc2VySWQ9ZS5ob3N0QWNjb3VudFVzZXJJZD8/XCJcIix0fX0sdC5TbmFwcGFibGVBY3Rpb249e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5sZW5zSWQmJnQudWludDMyKDEwKS5zdHJpbmcoZS5sZW5zSWQpLFwiXCIhPT1lLmxlbnNNZXRhZGF0YSYmdC51aW50MzIoMTgpLnN0cmluZyhlLmxlbnNNZXRhZGF0YSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBtLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtsZW5zSWQ6XCJcIixsZW5zTWV0YWRhdGE6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkubGVuc0lkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkubGVuc01ldGFkYXRhPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtsZW5zSWQ6XCJcIixsZW5zTWV0YWRhdGE6XCJcIn07cmV0dXJuIHQubGVuc0lkPWUubGVuc0lkPz9cIlwiLHQubGVuc01ldGFkYXRhPWUubGVuc01ldGFkYXRhPz9cIlwiLHR9fSx0LkxlbnNBY3Rpb249e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtcIlwiIT09ZS5sZW5zSWQmJnQudWludDMyKDEwKS5zdHJpbmcoZS5sZW5zSWQpLFwiXCIhPT1lLmRlZXBsaW5rJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuZGVlcGxpbmspO2Zvcihjb25zdCBuIG9mIGUuc2hvcHBpbmdMZW5zUHJvZHVjdElkcyl0LnVpbnQzMigyNikuc3RyaW5nKG4pO3JldHVybiAwIT09ZS5jYW1lcmFNb2RlJiZ0LnVpbnQzMigzMikuaW50MzIoZS5jYW1lcmFNb2RlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBtLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG0uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2xlbnNJZDpcIlwiLGRlZXBsaW5rOlwiXCIsc2hvcHBpbmdMZW5zUHJvZHVjdElkczpbXSxjYW1lcmFNb2RlOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmxlbnNJZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLmRlZXBsaW5rPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmkuc2hvcHBpbmdMZW5zUHJvZHVjdElkcy5wdXNoKG4uc3RyaW5nKCkpO2JyZWFrO2Nhc2UgNDppLmNhbWVyYU1vZGU9bi5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17bGVuc0lkOlwiXCIsZGVlcGxpbms6XCJcIixzaG9wcGluZ0xlbnNQcm9kdWN0SWRzOltdLGNhbWVyYU1vZGU6MH07cmV0dXJuIHQubGVuc0lkPWUubGVuc0lkPz9cIlwiLHQuZGVlcGxpbms9ZS5kZWVwbGluaz8/XCJcIix0LnNob3BwaW5nTGVuc1Byb2R1Y3RJZHM9ZS5zaG9wcGluZ0xlbnNQcm9kdWN0SWRzPy5tYXAoKGU9PmUpKXx8W10sdC5jYW1lcmFNb2RlPWUuY2FtZXJhTW9kZT8/MCx0fX0sdC5DYW1lb09uYm9hcmRpbmdBY3Rpb249e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgbiBvZiBlLmNhbWVvSWRzKXQudWludDMyKDEwKS5zdHJpbmcobik7cmV0dXJuIHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17Y2FtZW9JZHM6W119O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLmNhbWVvSWRzLnB1c2gobi5zdHJpbmcoKSk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtjYW1lb0lkczpbXX07cmV0dXJuIHQuY2FtZW9JZHM9ZS5jYW1lb0lkcz8ubWFwKChlPT5lKSl8fFtdLHR9fSx0LkJvb3N0QWN0aW9uPXtlbmNvZGUoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTptLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpfSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBtLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG0uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtuLnNraXBUeXBlKDcmZSl9cmV0dXJue319LGZyb21QYXJ0aWFsOmU9Pih7fSl9LHQuTWVtb3JpZXNGYXZvcml0ZUFjdGlvbj17ZW5jb2RlKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKX0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBtLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7bi5za2lwVHlwZSg3JmUpfXJldHVybnt9fSxmcm9tUGFydGlhbDplPT4oe30pfSx0LlBsYWNlUHJvZmlsZUFjdGlvbj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTptLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnBsYWNlSWQmJnQudWludDMyKDEwKS5zdHJpbmcoZS5wbGFjZUlkKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBtLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG0uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3BsYWNlSWQ6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2kucGxhY2VJZD1uLnN0cmluZygpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17cGxhY2VJZDpcIlwifTtyZXR1cm4gdC5wbGFjZUlkPWUucGxhY2VJZD8/XCJcIix0fX0sdC5TaGFyZUFjdGlvbj17ZW5jb2RlKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKX0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBtLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7bi5za2lwVHlwZSg3JmUpfXJldHVybnt9fSxmcm9tUGFydGlhbDplPT4oe30pfSx0LkVkaXRBY3Rpb249e2VuY29kZShlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCl9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO24uc2tpcFR5cGUoNyZlKX1yZXR1cm57fX0sZnJvbVBhcnRpYWw6ZT0+KHt9KX0sdC5Qb3N0U3RvcnlBY3Rpb249e2VuY29kZShlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCl9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO24uc2tpcFR5cGUoNyZlKX1yZXR1cm57fX0sZnJvbVBhcnRpYWw6ZT0+KHt9KX0sdC5EaXNjb3ZlclByZW1pdW1BY3Rpb249e2VuY29kZShlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCl9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO24uc2tpcFR5cGUoNyZlKX1yZXR1cm57fX0sZnJvbVBhcnRpYWw6ZT0+KHt9KX0sdC5NYW51YWxGcmllbmRTZWxlY3Rpb25BY3Rpb249e2VuY29kZShlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCl9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO24uc2tpcFR5cGUoNyZlKX1yZXR1cm57fX0sZnJvbVBhcnRpYWw6ZT0+KHt9KX0sdC5EaXNjb3ZlclN1YnNjcmlwdGlvbkFjdGlvbj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTptLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwicHVibGlzaGVySWRcIj09PWUuc3Vic2NyaWJlSWQ/LiRjYXNlJiZ0LnVpbnQzMig4KS5pbnQ2NChlLnN1YnNjcmliZUlkLnB1Ymxpc2hlcklkKSxcInVzZXJJZFwiPT09ZS5zdWJzY3JpYmVJZD8uJGNhc2UmJmEuVVVJRC5lbmNvZGUoZS5zdWJzY3JpYmVJZC51c2VySWQsdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBtLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtzdWJzY3JpYmVJZDp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnN1YnNjcmliZUlkPXskY2FzZTpcInB1Ymxpc2hlcklkXCIscHVibGlzaGVySWQ6ZyhuLmludDY0KCkpfTticmVhaztjYXNlIDI6aS5zdWJzY3JpYmVJZD17JGNhc2U6XCJ1c2VySWRcIix1c2VySWQ6YS5VVUlELmRlY29kZShuLG4udWludDMyKCkpfTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3N1YnNjcmliZUlkOnZvaWQgMH07cmV0dXJuXCJwdWJsaXNoZXJJZFwiPT09ZS5zdWJzY3JpYmVJZD8uJGNhc2UmJnZvaWQgMCE9PWUuc3Vic2NyaWJlSWQ/LnB1Ymxpc2hlcklkJiZudWxsIT09ZS5zdWJzY3JpYmVJZD8ucHVibGlzaGVySWQmJih0LnN1YnNjcmliZUlkPXskY2FzZTpcInB1Ymxpc2hlcklkXCIscHVibGlzaGVySWQ6ZS5zdWJzY3JpYmVJZC5wdWJsaXNoZXJJZH0pLFwidXNlcklkXCI9PT1lLnN1YnNjcmliZUlkPy4kY2FzZSYmdm9pZCAwIT09ZS5zdWJzY3JpYmVJZD8udXNlcklkJiZudWxsIT09ZS5zdWJzY3JpYmVJZD8udXNlcklkJiYodC5zdWJzY3JpYmVJZD17JGNhc2U6XCJ1c2VySWRcIix1c2VySWQ6YS5VVUlELmZyb21QYXJ0aWFsKGUuc3Vic2NyaWJlSWQudXNlcklkKX0pLHR9fSx0LkNyZWF0aXZlVG9vbHNTdGlja2VyQWN0aW9uPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUuc3RpY2tlckluZm8mJnQuQ29udGV4dENsaWVudEluZm9fQ3JlYXRpdmVUb29sc1N0aWNrZXJJbmZvLmVuY29kZShlLnN0aWNrZXJJbmZvLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17c3RpY2tlckluZm86dm9pZCAwfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7ZT4+PjM9PTE/by5zdGlja2VySW5mbz10LkNvbnRleHRDbGllbnRJbmZvX0NyZWF0aXZlVG9vbHNTdGlja2VySW5mby5kZWNvZGUocixyLnVpbnQzMigpKTpyLnNraXBUeXBlKDcmZSl9cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e3N0aWNrZXJJbmZvOnZvaWQgMH07cmV0dXJuIG4uc3RpY2tlckluZm89dm9pZCAwIT09ZS5zdGlja2VySW5mbyYmbnVsbCE9PWUuc3RpY2tlckluZm8/dC5Db250ZXh0Q2xpZW50SW5mb19DcmVhdGl2ZVRvb2xzU3RpY2tlckluZm8uZnJvbVBhcnRpYWwoZS5zdGlja2VySW5mbyk6dm9pZCAwLG59fSx0LkJpdG1vamlTdGlja2VyVW5sb2NrQWN0aW9uPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUuY29taWNJZCYmdC51aW50MzIoMTApLnN0cmluZyhlLmNvbWljSWQpLFwiXCIhPT1lLmF2YXRhcklkJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuYXZhdGFySWQpLCEwPT09ZS5pc0FuaW1hdGVkJiZ0LnVpbnQzMigyNCkuYm9vbChlLmlzQW5pbWF0ZWQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17Y29taWNJZDpcIlwiLGF2YXRhcklkOlwiXCIsaXNBbmltYXRlZDohMX07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuY29taWNJZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLmF2YXRhcklkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmkuaXNBbmltYXRlZD1uLmJvb2woKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2NvbWljSWQ6XCJcIixhdmF0YXJJZDpcIlwiLGlzQW5pbWF0ZWQ6ITF9O3JldHVybiB0LmNvbWljSWQ9ZS5jb21pY0lkPz9cIlwiLHQuYXZhdGFySWQ9ZS5hdmF0YXJJZD8/XCJcIix0LmlzQW5pbWF0ZWQ9ZS5pc0FuaW1hdGVkPz8hMSx0fX0sdC5Bc3Ryb2xvZ3lQcm9maWxlQWN0aW9uPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJteVBlcnNvbmFsaXR5UHJvZmlsZVwiPT09ZS5wcm9maWxlPy4kY2FzZSYmdC5Bc3Ryb2xvZ3lQcm9maWxlQWN0aW9uX015UGVyc29uYWxpdHlQcm9maWxlLmVuY29kZShlLnByb2ZpbGUubXlQZXJzb25hbGl0eVByb2ZpbGUsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksXCJmcmllbmRQZXJzb25hbGl0eVByb2ZpbGVcIj09PWUucHJvZmlsZT8uJGNhc2UmJnQuQXN0cm9sb2d5UHJvZmlsZUFjdGlvbl9GcmllbmRQZXJzb25hbGl0eVByb2ZpbGUuZW5jb2RlKGUucHJvZmlsZS5mcmllbmRQZXJzb25hbGl0eVByb2ZpbGUsbi51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksXCJmcmllbmRDb21wYXRpYmlsaXR5UHJvZmlsZVwiPT09ZS5wcm9maWxlPy4kY2FzZSYmdC5Bc3Ryb2xvZ3lQcm9maWxlQWN0aW9uX0ZyaWVuZENvbXBhdGliaWxpdHlQcm9maWxlLmVuY29kZShlLnByb2ZpbGUuZnJpZW5kQ29tcGF0aWJpbGl0eVByb2ZpbGUsbi51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgbS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBtLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXtwcm9maWxlOnZvaWQgMH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8ucHJvZmlsZT17JGNhc2U6XCJteVBlcnNvbmFsaXR5UHJvZmlsZVwiLG15UGVyc29uYWxpdHlQcm9maWxlOnQuQXN0cm9sb2d5UHJvZmlsZUFjdGlvbl9NeVBlcnNvbmFsaXR5UHJvZmlsZS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAyOm8ucHJvZmlsZT17JGNhc2U6XCJmcmllbmRQZXJzb25hbGl0eVByb2ZpbGVcIixmcmllbmRQZXJzb25hbGl0eVByb2ZpbGU6dC5Bc3Ryb2xvZ3lQcm9maWxlQWN0aW9uX0ZyaWVuZFBlcnNvbmFsaXR5UHJvZmlsZS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAzOm8ucHJvZmlsZT17JGNhc2U6XCJmcmllbmRDb21wYXRpYmlsaXR5UHJvZmlsZVwiLGZyaWVuZENvbXBhdGliaWxpdHlQcm9maWxlOnQuQXN0cm9sb2d5UHJvZmlsZUFjdGlvbl9GcmllbmRDb21wYXRpYmlsaXR5UHJvZmlsZS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtwcm9maWxlOnZvaWQgMH07cmV0dXJuXCJteVBlcnNvbmFsaXR5UHJvZmlsZVwiPT09ZS5wcm9maWxlPy4kY2FzZSYmdm9pZCAwIT09ZS5wcm9maWxlPy5teVBlcnNvbmFsaXR5UHJvZmlsZSYmbnVsbCE9PWUucHJvZmlsZT8ubXlQZXJzb25hbGl0eVByb2ZpbGUmJihuLnByb2ZpbGU9eyRjYXNlOlwibXlQZXJzb25hbGl0eVByb2ZpbGVcIixteVBlcnNvbmFsaXR5UHJvZmlsZTp0LkFzdHJvbG9neVByb2ZpbGVBY3Rpb25fTXlQZXJzb25hbGl0eVByb2ZpbGUuZnJvbVBhcnRpYWwoZS5wcm9maWxlLm15UGVyc29uYWxpdHlQcm9maWxlKX0pLFwiZnJpZW5kUGVyc29uYWxpdHlQcm9maWxlXCI9PT1lLnByb2ZpbGU/LiRjYXNlJiZ2b2lkIDAhPT1lLnByb2ZpbGU/LmZyaWVuZFBlcnNvbmFsaXR5UHJvZmlsZSYmbnVsbCE9PWUucHJvZmlsZT8uZnJpZW5kUGVyc29uYWxpdHlQcm9maWxlJiYobi5wcm9maWxlPXskY2FzZTpcImZyaWVuZFBlcnNvbmFsaXR5UHJvZmlsZVwiLGZyaWVuZFBlcnNvbmFsaXR5UHJvZmlsZTp0LkFzdHJvbG9neVByb2ZpbGVBY3Rpb25fRnJpZW5kUGVyc29uYWxpdHlQcm9maWxlLmZyb21QYXJ0aWFsKGUucHJvZmlsZS5mcmllbmRQZXJzb25hbGl0eVByb2ZpbGUpfSksXCJmcmllbmRDb21wYXRpYmlsaXR5UHJvZmlsZVwiPT09ZS5wcm9maWxlPy4kY2FzZSYmdm9pZCAwIT09ZS5wcm9maWxlPy5mcmllbmRDb21wYXRpYmlsaXR5UHJvZmlsZSYmbnVsbCE9PWUucHJvZmlsZT8uZnJpZW5kQ29tcGF0aWJpbGl0eVByb2ZpbGUmJihuLnByb2ZpbGU9eyRjYXNlOlwiZnJpZW5kQ29tcGF0aWJpbGl0eVByb2ZpbGVcIixmcmllbmRDb21wYXRpYmlsaXR5UHJvZmlsZTp0LkFzdHJvbG9neVByb2ZpbGVBY3Rpb25fRnJpZW5kQ29tcGF0aWJpbGl0eVByb2ZpbGUuZnJvbVBhcnRpYWwoZS5wcm9maWxlLmZyaWVuZENvbXBhdGliaWxpdHlQcm9maWxlKX0pLG59fSx0LkFzdHJvbG9neVByb2ZpbGVBY3Rpb25fTXlQZXJzb25hbGl0eVByb2ZpbGU9e2VuY29kZShlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCl9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO24uc2tpcFR5cGUoNyZlKX1yZXR1cm57fX0sZnJvbVBhcnRpYWw6ZT0+KHt9KX0sdC5Bc3Ryb2xvZ3lQcm9maWxlQWN0aW9uX0ZyaWVuZFBlcnNvbmFsaXR5UHJvZmlsZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTptLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLmZyaWVuZFVzZXJJZCYmYS5VVUlELmVuY29kZShlLmZyaWVuZFVzZXJJZCx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBtLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG0uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2ZyaWVuZFVzZXJJZDp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLmZyaWVuZFVzZXJJZD1hLlVVSUQuZGVjb2RlKG4sbi51aW50MzIoKSk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtmcmllbmRVc2VySWQ6dm9pZCAwfTtyZXR1cm4gdC5mcmllbmRVc2VySWQ9dm9pZCAwIT09ZS5mcmllbmRVc2VySWQmJm51bGwhPT1lLmZyaWVuZFVzZXJJZD9hLlVVSUQuZnJvbVBhcnRpYWwoZS5mcmllbmRVc2VySWQpOnZvaWQgMCx0fX0sdC5Bc3Ryb2xvZ3lQcm9maWxlQWN0aW9uX0ZyaWVuZENvbXBhdGliaWxpdHlQcm9maWxlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUuZnJpZW5kVXNlcklkJiZhLlVVSUQuZW5jb2RlKGUuZnJpZW5kVXNlcklkLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17ZnJpZW5kVXNlcklkOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2kuZnJpZW5kVXNlcklkPWEuVVVJRC5kZWNvZGUobixuLnVpbnQzMigpKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2ZyaWVuZFVzZXJJZDp2b2lkIDB9O3JldHVybiB0LmZyaWVuZFVzZXJJZD12b2lkIDAhPT1lLmZyaWVuZFVzZXJJZCYmbnVsbCE9PWUuZnJpZW5kVXNlcklkP2EuVVVJRC5mcm9tUGFydGlhbChlLmZyaWVuZFVzZXJJZCk6dm9pZCAwLHR9fSx0LlJlYWRBY3Rpb249e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUucmVhZFR5cGUmJnQudWludDMyKDgpLmludDMyKGUucmVhZFR5cGUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17cmVhZFR5cGU6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2kucmVhZFR5cGU9bi5pbnQzMigpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17cmVhZFR5cGU6MH07cmV0dXJuIHQucmVhZFR5cGU9ZS5yZWFkVHlwZT8/MCx0fX0sdC5Tb3VuZFByb2ZpbGVBY3Rpb249e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIjBcIiE9PWUuc291bmRJZCYmdC51aW50MzIoOCkudWludDY0KGUuc291bmRJZCksXCJcIiE9PWUudGl0bGUmJnQudWludDMyKDE4KS5zdHJpbmcoZS50aXRsZSksXCJcIiE9PWUuYXJ0aXN0TmFtZSYmdC51aW50MzIoMjYpLnN0cmluZyhlLmFydGlzdE5hbWUpLHZvaWQgMCE9PWUuYWxidW1BcnRNZWRpYSYmcC5FbmNyeXB0ZWRNZWRpYS5lbmNvZGUoZS5hbGJ1bUFydE1lZGlhLHQudWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLnRyYWNrVHlwZSYmdC51aW50MzIoNDApLmludDMyKGUudHJhY2tUeXBlKSxcIlwiIT09ZS5wdWJsaWNQcm9maWxlSWQmJnQudWludDMyKDUwKS5zdHJpbmcoZS5wdWJsaWNQcm9maWxlSWQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17c291bmRJZDpcIjBcIix0aXRsZTpcIlwiLGFydGlzdE5hbWU6XCJcIixhbGJ1bUFydE1lZGlhOnZvaWQgMCx0cmFja1R5cGU6MCxwdWJsaWNQcm9maWxlSWQ6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuc291bmRJZD1nKG4udWludDY0KCkpO2JyZWFrO2Nhc2UgMjppLnRpdGxlPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmkuYXJ0aXN0TmFtZT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNDppLmFsYnVtQXJ0TWVkaWE9cC5FbmNyeXB0ZWRNZWRpYS5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDU6aS50cmFja1R5cGU9bi5pbnQzMigpO2JyZWFrO2Nhc2UgNjppLnB1YmxpY1Byb2ZpbGVJZD1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17c291bmRJZDpcIjBcIix0aXRsZTpcIlwiLGFydGlzdE5hbWU6XCJcIixhbGJ1bUFydE1lZGlhOnZvaWQgMCx0cmFja1R5cGU6MCxwdWJsaWNQcm9maWxlSWQ6XCJcIn07cmV0dXJuIHQuc291bmRJZD1lLnNvdW5kSWQ/P1wiMFwiLHQudGl0bGU9ZS50aXRsZT8/XCJcIix0LmFydGlzdE5hbWU9ZS5hcnRpc3ROYW1lPz9cIlwiLHQuYWxidW1BcnRNZWRpYT12b2lkIDAhPT1lLmFsYnVtQXJ0TWVkaWEmJm51bGwhPT1lLmFsYnVtQXJ0TWVkaWE/cC5FbmNyeXB0ZWRNZWRpYS5mcm9tUGFydGlhbChlLmFsYnVtQXJ0TWVkaWEpOnZvaWQgMCx0LnRyYWNrVHlwZT1lLnRyYWNrVHlwZT8/MCx0LnB1YmxpY1Byb2ZpbGVJZD1lLnB1YmxpY1Byb2ZpbGVJZD8/XCJcIix0fX0sdC5SZW1peGVzVG9waWNBY3Rpb249e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5zb3VyY2VTbmFwSWQmJnQudWludDMyKDEwKS5zdHJpbmcoZS5zb3VyY2VTbmFwSWQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17c291cmNlU25hcElkOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLnNvdXJjZVNuYXBJZD1uLnN0cmluZygpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17c291cmNlU25hcElkOlwiXCJ9O3JldHVybiB0LnNvdXJjZVNuYXBJZD1lLnNvdXJjZVNuYXBJZD8/XCJcIix0fX0sdC5MZW5zUHJvZmlsZUFjdGlvbj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTptLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmxlbnNJZCYmdC51aW50MzIoMTApLnN0cmluZyhlLmxlbnNJZCksXCJcIiE9PWUudGl0bGUmJnQudWludDMyKDE4KS5zdHJpbmcoZS50aXRsZSksXCJcIiE9PWUuaWNvblVybCYmdC51aW50MzIoMjYpLnN0cmluZyhlLmljb25VcmwpLFwiXCIhPT1lLmNyZWF0b3JJZCYmdC51aW50MzIoMzQpLnN0cmluZyhlLmNyZWF0b3JJZCksXCJcIiE9PWUuY3JlYXRvck5hbWUmJnQudWludDMyKDQyKS5zdHJpbmcoZS5jcmVhdG9yTmFtZSksITA9PT1lLmlzT2ZmaWNpYWxDcmVhdG9yJiZ0LnVpbnQzMig0OCkuYm9vbChlLmlzT2ZmaWNpYWxDcmVhdG9yKSwhMD09PWUuaXNCdXNpbmVzc1Byb2ZpbGUmJnQudWludDMyKDY0KS5ib29sKGUuaXNCdXNpbmVzc1Byb2ZpbGUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17bGVuc0lkOlwiXCIsdGl0bGU6XCJcIixpY29uVXJsOlwiXCIsY3JlYXRvcklkOlwiXCIsY3JlYXRvck5hbWU6XCJcIixpc09mZmljaWFsQ3JlYXRvcjohMSxpc0J1c2luZXNzUHJvZmlsZTohMX07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkubGVuc0lkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkudGl0bGU9bi5zdHJpbmcoKTticmVhaztjYXNlIDM6aS5pY29uVXJsPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA0OmkuY3JlYXRvcklkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA1OmkuY3JlYXRvck5hbWU9bi5zdHJpbmcoKTticmVhaztjYXNlIDY6aS5pc09mZmljaWFsQ3JlYXRvcj1uLmJvb2woKTticmVhaztjYXNlIDg6aS5pc0J1c2luZXNzUHJvZmlsZT1uLmJvb2woKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2xlbnNJZDpcIlwiLHRpdGxlOlwiXCIsaWNvblVybDpcIlwiLGNyZWF0b3JJZDpcIlwiLGNyZWF0b3JOYW1lOlwiXCIsaXNPZmZpY2lhbENyZWF0b3I6ITEsaXNCdXNpbmVzc1Byb2ZpbGU6ITF9O3JldHVybiB0LmxlbnNJZD1lLmxlbnNJZD8/XCJcIix0LnRpdGxlPWUudGl0bGU/P1wiXCIsdC5pY29uVXJsPWUuaWNvblVybD8/XCJcIix0LmNyZWF0b3JJZD1lLmNyZWF0b3JJZD8/XCJcIix0LmNyZWF0b3JOYW1lPWUuY3JlYXRvck5hbWU/P1wiXCIsdC5pc09mZmljaWFsQ3JlYXRvcj1lLmlzT2ZmaWNpYWxDcmVhdG9yPz8hMSx0LmlzQnVzaW5lc3NQcm9maWxlPWUuaXNCdXNpbmVzc1Byb2ZpbGU/PyExLHR9fSx0LkFwcFByb2ZpbGVBY3Rpb249e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5hcHBJZCYmdC51aW50MzIoMTApLnN0cmluZyhlLmFwcElkKSxcIlwiIT09ZS5vYXV0aENsaWVudElkJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUub2F1dGhDbGllbnRJZCksXCJcIiE9PWUubmFtZSYmdC51aW50MzIoMjYpLnN0cmluZyhlLm5hbWUpLFwiXCIhPT1lLmljb25VcmwmJnQudWludDMyKDM0KS5zdHJpbmcoZS5pY29uVXJsKSxcIlwiIT09ZS5hbmRyb2lkUGFja2FnZU5hbWUmJnQudWludDMyKDQyKS5zdHJpbmcoZS5hbmRyb2lkUGFja2FnZU5hbWUpLFwiXCIhPT1lLml0dW5lc0FwcElkJiZ0LnVpbnQzMig1MCkuc3RyaW5nKGUuaXR1bmVzQXBwSWQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17YXBwSWQ6XCJcIixvYXV0aENsaWVudElkOlwiXCIsbmFtZTpcIlwiLGljb25Vcmw6XCJcIixhbmRyb2lkUGFja2FnZU5hbWU6XCJcIixpdHVuZXNBcHBJZDpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5hcHBJZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLm9hdXRoQ2xpZW50SWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDM6aS5uYW1lPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA0OmkuaWNvblVybD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNTppLmFuZHJvaWRQYWNrYWdlTmFtZT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNjppLml0dW5lc0FwcElkPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXthcHBJZDpcIlwiLG9hdXRoQ2xpZW50SWQ6XCJcIixuYW1lOlwiXCIsaWNvblVybDpcIlwiLGFuZHJvaWRQYWNrYWdlTmFtZTpcIlwiLGl0dW5lc0FwcElkOlwiXCJ9O3JldHVybiB0LmFwcElkPWUuYXBwSWQ/P1wiXCIsdC5vYXV0aENsaWVudElkPWUub2F1dGhDbGllbnRJZD8/XCJcIix0Lm5hbWU9ZS5uYW1lPz9cIlwiLHQuaWNvblVybD1lLmljb25Vcmw/P1wiXCIsdC5hbmRyb2lkUGFja2FnZU5hbWU9ZS5hbmRyb2lkUGFja2FnZU5hbWU/P1wiXCIsdC5pdHVuZXNBcHBJZD1lLml0dW5lc0FwcElkPz9cIlwiLHR9fSx0LlRvcGljQWN0aW9uPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUudG9waWMmJnQudWludDMyKDEwKS5zdHJpbmcoZS50b3BpYyksXCJcIiE9PWUuZGlzcGxheU5hbWUmJnQudWludDMyKDE4KS5zdHJpbmcoZS5kaXNwbGF5TmFtZSksMCE9PWUudG9waWNTdG9yeVR5cGUmJnQudWludDMyKDI0KS5pbnQzMihlLnRvcGljU3RvcnlUeXBlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBtLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG0uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3RvcGljOlwiXCIsZGlzcGxheU5hbWU6XCJcIix0b3BpY1N0b3J5VHlwZTowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS50b3BpYz1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLmRpc3BsYXlOYW1lPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmkudG9waWNTdG9yeVR5cGU9bi5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dG9waWM6XCJcIixkaXNwbGF5TmFtZTpcIlwiLHRvcGljU3RvcnlUeXBlOjB9O3JldHVybiB0LnRvcGljPWUudG9waWM/P1wiXCIsdC5kaXNwbGF5TmFtZT1lLmRpc3BsYXlOYW1lPz9cIlwiLHQudG9waWNTdG9yeVR5cGU9ZS50b3BpY1N0b3J5VHlwZT8/MCx0fX0sdC5XYXRjaFNwb3RsaWdodEFjdGlvbj17ZW5jb2RlKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKX0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBtLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7bi5za2lwVHlwZSg3JmUpfXJldHVybnt9fSxmcm9tUGFydGlhbDplPT4oe30pfSx0LlNob3dJbmZvQWN0aW9uPXtlbmNvZGUoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTptLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpfSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBtLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG0uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtuLnNraXBUeXBlKDcmZSl9cmV0dXJue319LGZyb21QYXJ0aWFsOmU9Pih7fSl9LHQuQWRDb2xsZWN0aW9uSXRlbUFjdGlvbj17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTptLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiMFwiIT09ZS5pdGVtSW5kZXgmJm4udWludDMyKDgpLmludDY0KGUuaXRlbUluZGV4KSx2b2lkIDAhPT1lLnRhcExvY2F0aW9uJiZ0LkFkQ29sbGVjdGlvbkl0ZW1BY3Rpb25fUG9pbnQuZW5jb2RlKGUudGFwTG9jYXRpb24sbi51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgbS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBtLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXtpdGVtSW5kZXg6XCIwXCIsdGFwTG9jYXRpb246dm9pZCAwfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5pdGVtSW5kZXg9ZyhyLmludDY0KCkpO2JyZWFrO2Nhc2UgMjpvLnRhcExvY2F0aW9uPXQuQWRDb2xsZWN0aW9uSXRlbUFjdGlvbl9Qb2ludC5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e2l0ZW1JbmRleDpcIjBcIix0YXBMb2NhdGlvbjp2b2lkIDB9O3JldHVybiBuLml0ZW1JbmRleD1lLml0ZW1JbmRleD8/XCIwXCIsbi50YXBMb2NhdGlvbj12b2lkIDAhPT1lLnRhcExvY2F0aW9uJiZudWxsIT09ZS50YXBMb2NhdGlvbj90LkFkQ29sbGVjdGlvbkl0ZW1BY3Rpb25fUG9pbnQuZnJvbVBhcnRpYWwoZS50YXBMb2NhdGlvbik6dm9pZCAwLG59fSx0LkFkQ29sbGVjdGlvbkl0ZW1BY3Rpb25fUG9pbnQ9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUueCYmdC51aW50MzIoOSkuZG91YmxlKGUueCksMCE9PWUueSYmdC51aW50MzIoMTcpLmRvdWJsZShlLnkpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17eDowLHk6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkueD1uLmRvdWJsZSgpO2JyZWFrO2Nhc2UgMjppLnk9bi5kb3VibGUoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3g6MCx5OjB9O3JldHVybiB0Lng9ZS54Pz8wLHQueT1lLnk/PzAsdH19LHQuU25hcFByb1NlbGZTZXJ2ZUFjdGlvbj17ZW5jb2RlKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKX0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBtLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7bi5za2lwVHlwZSg3JmUpfXJldHVybnt9fSxmcm9tUGFydGlhbDplPT4oe30pfSx0LkNyZWF0ZUF2YXRhckFjdGlvbj17ZW5jb2RlKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKX0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBtLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7bi5za2lwVHlwZSg3JmUpfXJldHVybnt9fSxmcm9tUGFydGlhbDplPT4oe30pfSx0LkNvbW1lcmNlQWN0aW9uPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJjb21tZXJjZUl0ZW1EZXRhaWxQYWdlQWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnQuQ29tbWVyY2VBY3Rpb25fQ29tbWVyY2VJdGVtRGV0YWlsUGFnZUFjdGlvbi5lbmNvZGUoZS5hY3Rpb24uY29tbWVyY2VJdGVtRGV0YWlsUGFnZUFjdGlvbixuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSxcImNvbW1lcmNlU3RvcmVBY3Rpb25cIj09PWUuYWN0aW9uPy4kY2FzZSYmdC5Db21tZXJjZUFjdGlvbl9Db21tZXJjZVN0b3JlQWN0aW9uLmVuY29kZShlLmFjdGlvbi5jb21tZXJjZVN0b3JlQWN0aW9uLG4udWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17YWN0aW9uOnZvaWQgMH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8uYWN0aW9uPXskY2FzZTpcImNvbW1lcmNlSXRlbURldGFpbFBhZ2VBY3Rpb25cIixjb21tZXJjZUl0ZW1EZXRhaWxQYWdlQWN0aW9uOnQuQ29tbWVyY2VBY3Rpb25fQ29tbWVyY2VJdGVtRGV0YWlsUGFnZUFjdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAyOm8uYWN0aW9uPXskY2FzZTpcImNvbW1lcmNlU3RvcmVBY3Rpb25cIixjb21tZXJjZVN0b3JlQWN0aW9uOnQuQ29tbWVyY2VBY3Rpb25fQ29tbWVyY2VTdG9yZUFjdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXthY3Rpb246dm9pZCAwfTtyZXR1cm5cImNvbW1lcmNlSXRlbURldGFpbFBhZ2VBY3Rpb25cIj09PWUuYWN0aW9uPy4kY2FzZSYmdm9pZCAwIT09ZS5hY3Rpb24/LmNvbW1lcmNlSXRlbURldGFpbFBhZ2VBY3Rpb24mJm51bGwhPT1lLmFjdGlvbj8uY29tbWVyY2VJdGVtRGV0YWlsUGFnZUFjdGlvbiYmKG4uYWN0aW9uPXskY2FzZTpcImNvbW1lcmNlSXRlbURldGFpbFBhZ2VBY3Rpb25cIixjb21tZXJjZUl0ZW1EZXRhaWxQYWdlQWN0aW9uOnQuQ29tbWVyY2VBY3Rpb25fQ29tbWVyY2VJdGVtRGV0YWlsUGFnZUFjdGlvbi5mcm9tUGFydGlhbChlLmFjdGlvbi5jb21tZXJjZUl0ZW1EZXRhaWxQYWdlQWN0aW9uKX0pLFwiY29tbWVyY2VTdG9yZUFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ2b2lkIDAhPT1lLmFjdGlvbj8uY29tbWVyY2VTdG9yZUFjdGlvbiYmbnVsbCE9PWUuYWN0aW9uPy5jb21tZXJjZVN0b3JlQWN0aW9uJiYobi5hY3Rpb249eyRjYXNlOlwiY29tbWVyY2VTdG9yZUFjdGlvblwiLGNvbW1lcmNlU3RvcmVBY3Rpb246dC5Db21tZXJjZUFjdGlvbl9Db21tZXJjZVN0b3JlQWN0aW9uLmZyb21QYXJ0aWFsKGUuYWN0aW9uLmNvbW1lcmNlU3RvcmVBY3Rpb24pfSksbn19LHQuQ29tbWVyY2VBY3Rpb25fQ29tbWVyY2VJdGVtRGV0YWlsUGFnZUFjdGlvbj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTptLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiMFwiIT09ZS5zbmFwSXRlbUlkJiZ0LnVpbnQzMig4KS5pbnQ2NChlLnNuYXBJdGVtSWQpLFwiXCIhPT1lLnN0b3JlSWQmJnQudWludDMyKDE4KS5zdHJpbmcoZS5zdG9yZUlkKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBtLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG0uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3NuYXBJdGVtSWQ6XCIwXCIsc3RvcmVJZDpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5zbmFwSXRlbUlkPWcobi5pbnQ2NCgpKTticmVhaztjYXNlIDI6aS5zdG9yZUlkPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtzbmFwSXRlbUlkOlwiMFwiLHN0b3JlSWQ6XCJcIn07cmV0dXJuIHQuc25hcEl0ZW1JZD1lLnNuYXBJdGVtSWQ/P1wiMFwiLHQuc3RvcmVJZD1lLnN0b3JlSWQ/P1wiXCIsdH19LHQuQ29tbWVyY2VBY3Rpb25fQ29tbWVyY2VTdG9yZUFjdGlvbj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTptLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnN0b3JlSWQmJnQudWludDMyKDEwKS5zdHJpbmcoZS5zdG9yZUlkKSxcIlwiIT09ZS5jYXRlZ29yeUlkJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuY2F0ZWdvcnlJZCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBtLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtzdG9yZUlkOlwiXCIsY2F0ZWdvcnlJZDpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5zdG9yZUlkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkuY2F0ZWdvcnlJZD1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17c3RvcmVJZDpcIlwiLGNhdGVnb3J5SWQ6XCJcIn07cmV0dXJuIHQuc3RvcmVJZD1lLnN0b3JlSWQ/P1wiXCIsdC5jYXRlZ29yeUlkPWUuY2F0ZWdvcnlJZD8/XCJcIix0fX0sdC5Qb2xsQWN0aW9uPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUucG9sbElkJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUucG9sbElkKSx2b2lkIDAhPT1lLnBvbGxJbmZvJiZmLlBvbGxJbmZvLmVuY29kZShlLnBvbGxJbmZvLHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17cG9sbElkOlwiXCIscG9sbEluZm86dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5wb2xsSWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS5wb2xsSW5mbz1mLlBvbGxJbmZvLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17cG9sbElkOlwiXCIscG9sbEluZm86dm9pZCAwfTtyZXR1cm4gdC5wb2xsSWQ9ZS5wb2xsSWQ/P1wiXCIsdC5wb2xsSW5mbz12b2lkIDAhPT1lLnBvbGxJbmZvJiZudWxsIT09ZS5wb2xsSW5mbz9mLlBvbGxJbmZvLmZyb21QYXJ0aWFsKGUucG9sbEluZm8pOnZvaWQgMCx0fX0sdC5SZW1peEFjdGlvbj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTptLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiEwPT09ZS5zZWxlY3RNeVN0b3J5JiZ0LnVpbnQzMig4KS5ib29sKGUuc2VsZWN0TXlTdG9yeSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBtLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtzZWxlY3RNeVN0b3J5OiExfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/aS5zZWxlY3RNeVN0b3J5PW4uYm9vbCgpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17c2VsZWN0TXlTdG9yeTohMX07cmV0dXJuIHQuc2VsZWN0TXlTdG9yeT1lLnNlbGVjdE15U3Rvcnk/PyExLHR9fSx0LlRyZW5kaW5nVG9waWNzQWN0aW9uPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLmJhZGdlVHlwZSYmdC51aW50MzIoOCkuaW50MzIoZS5iYWRnZVR5cGUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17YmFkZ2VUeXBlOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLmJhZGdlVHlwZT1uLmludDMyKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtiYWRnZVR5cGU6MH07cmV0dXJuIHQuYmFkZ2VUeXBlPWUuYmFkZ2VUeXBlPz8wLHR9fSx0LkNvbW1lbnRzQWN0aW9uPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLmludGVudCYmdC51aW50MzIoOCkuaW50MzIoZS5pbnRlbnQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17aW50ZW50OjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLmludGVudD1uLmludDMyKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtpbnRlbnQ6MH07cmV0dXJuIHQuaW50ZW50PWUuaW50ZW50Pz8wLHR9fSx0LlVuaWZpZWRQdWJsaWNQcm9maWxlQWN0aW9uPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJwdWJsaXNoZXJSb3V0ZVwiPT09ZS5yb3V0ZT8uJGNhc2UmJnQuVW5pZmllZFB1YmxpY1Byb2ZpbGVBY3Rpb25fUHVibGlzaGVyUm91dGUuZW5jb2RlKGUucm91dGUucHVibGlzaGVyUm91dGUsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksXCJ1bmlmaWVkUHVibGljUHJvZmlsZVJvdXRlXCI9PT1lLnJvdXRlPy4kY2FzZSYmdC5VbmlmaWVkUHVibGljUHJvZmlsZUFjdGlvbl9VbmlmaWVkUHVibGljUHJvZmlsZVJvdXRlLmVuY29kZShlLnJvdXRlLnVuaWZpZWRQdWJsaWNQcm9maWxlUm91dGUsbi51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgbS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBtLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXtyb3V0ZTp2b2lkIDB9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLnJvdXRlPXskY2FzZTpcInB1Ymxpc2hlclJvdXRlXCIscHVibGlzaGVyUm91dGU6dC5VbmlmaWVkUHVibGljUHJvZmlsZUFjdGlvbl9QdWJsaXNoZXJSb3V0ZS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAyOm8ucm91dGU9eyRjYXNlOlwidW5pZmllZFB1YmxpY1Byb2ZpbGVSb3V0ZVwiLHVuaWZpZWRQdWJsaWNQcm9maWxlUm91dGU6dC5VbmlmaWVkUHVibGljUHJvZmlsZUFjdGlvbl9VbmlmaWVkUHVibGljUHJvZmlsZVJvdXRlLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e3JvdXRlOnZvaWQgMH07cmV0dXJuXCJwdWJsaXNoZXJSb3V0ZVwiPT09ZS5yb3V0ZT8uJGNhc2UmJnZvaWQgMCE9PWUucm91dGU/LnB1Ymxpc2hlclJvdXRlJiZudWxsIT09ZS5yb3V0ZT8ucHVibGlzaGVyUm91dGUmJihuLnJvdXRlPXskY2FzZTpcInB1Ymxpc2hlclJvdXRlXCIscHVibGlzaGVyUm91dGU6dC5VbmlmaWVkUHVibGljUHJvZmlsZUFjdGlvbl9QdWJsaXNoZXJSb3V0ZS5mcm9tUGFydGlhbChlLnJvdXRlLnB1Ymxpc2hlclJvdXRlKX0pLFwidW5pZmllZFB1YmxpY1Byb2ZpbGVSb3V0ZVwiPT09ZS5yb3V0ZT8uJGNhc2UmJnZvaWQgMCE9PWUucm91dGU/LnVuaWZpZWRQdWJsaWNQcm9maWxlUm91dGUmJm51bGwhPT1lLnJvdXRlPy51bmlmaWVkUHVibGljUHJvZmlsZVJvdXRlJiYobi5yb3V0ZT17JGNhc2U6XCJ1bmlmaWVkUHVibGljUHJvZmlsZVJvdXRlXCIsdW5pZmllZFB1YmxpY1Byb2ZpbGVSb3V0ZTp0LlVuaWZpZWRQdWJsaWNQcm9maWxlQWN0aW9uX1VuaWZpZWRQdWJsaWNQcm9maWxlUm91dGUuZnJvbVBhcnRpYWwoZS5yb3V0ZS51bmlmaWVkUHVibGljUHJvZmlsZVJvdXRlKX0pLG59fSx0LlVuaWZpZWRQdWJsaWNQcm9maWxlQWN0aW9uX1B1Ymxpc2hlclJvdXRlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUucHJvZmlsZUlkJiZhLlVVSUQuZW5jb2RlKGUucHJvZmlsZUlkLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuaG9zdEFjY291bnRVc2VySWQmJmEuVVVJRC5lbmNvZGUoZS5ob3N0QWNjb3VudFVzZXJJZCx0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnNob3dJZCYmYS5VVUlELmVuY29kZShlLnNob3dJZCx0LnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBtLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG0uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3Byb2ZpbGVJZDp2b2lkIDAsaG9zdEFjY291bnRVc2VySWQ6dm9pZCAwLHNob3dJZDp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnByb2ZpbGVJZD1hLlVVSUQuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOmkuaG9zdEFjY291bnRVc2VySWQ9YS5VVUlELmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMzppLnNob3dJZD1hLlVVSUQuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtwcm9maWxlSWQ6dm9pZCAwLGhvc3RBY2NvdW50VXNlcklkOnZvaWQgMCxzaG93SWQ6dm9pZCAwfTtyZXR1cm4gdC5wcm9maWxlSWQ9dm9pZCAwIT09ZS5wcm9maWxlSWQmJm51bGwhPT1lLnByb2ZpbGVJZD9hLlVVSUQuZnJvbVBhcnRpYWwoZS5wcm9maWxlSWQpOnZvaWQgMCx0Lmhvc3RBY2NvdW50VXNlcklkPXZvaWQgMCE9PWUuaG9zdEFjY291bnRVc2VySWQmJm51bGwhPT1lLmhvc3RBY2NvdW50VXNlcklkP2EuVVVJRC5mcm9tUGFydGlhbChlLmhvc3RBY2NvdW50VXNlcklkKTp2b2lkIDAsdC5zaG93SWQ9dm9pZCAwIT09ZS5zaG93SWQmJm51bGwhPT1lLnNob3dJZD9hLlVVSUQuZnJvbVBhcnRpYWwoZS5zaG93SWQpOnZvaWQgMCx0fX0sdC5VbmlmaWVkUHVibGljUHJvZmlsZUFjdGlvbl9VbmlmaWVkUHVibGljUHJvZmlsZVJvdXRlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUucHJvZmlsZUlkJiZhLlVVSUQuZW5jb2RlKGUucHJvZmlsZUlkLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuaG9zdEFjY291bnRVc2VySWQmJmEuVVVJRC5lbmNvZGUoZS5ob3N0QWNjb3VudFVzZXJJZCx0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBtLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG0uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3Byb2ZpbGVJZDp2b2lkIDAsaG9zdEFjY291bnRVc2VySWQ6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5wcm9maWxlSWQ9YS5VVUlELmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMjppLmhvc3RBY2NvdW50VXNlcklkPWEuVVVJRC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3Byb2ZpbGVJZDp2b2lkIDAsaG9zdEFjY291bnRVc2VySWQ6dm9pZCAwfTtyZXR1cm4gdC5wcm9maWxlSWQ9dm9pZCAwIT09ZS5wcm9maWxlSWQmJm51bGwhPT1lLnByb2ZpbGVJZD9hLlVVSUQuZnJvbVBhcnRpYWwoZS5wcm9maWxlSWQpOnZvaWQgMCx0Lmhvc3RBY2NvdW50VXNlcklkPXZvaWQgMCE9PWUuaG9zdEFjY291bnRVc2VySWQmJm51bGwhPT1lLmhvc3RBY2NvdW50VXNlcklkP2EuVVVJRC5mcm9tUGFydGlhbChlLmhvc3RBY2NvdW50VXNlcklkKTp2b2lkIDAsdH19LHQuQ2FtZXJhU2hvcnRjdXRBY3Rpb249e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtcIjBcIiE9PWUudHJhY2tJZCYmdC51aW50MzIoOCkudWludDY0KGUudHJhY2tJZCk7Zm9yKGNvbnN0IG4gb2YgZS5sZW5zSWRzKXQudWludDMyKDE4KS5zdHJpbmcobik7cmV0dXJuIHZvaWQgMCE9PWUuZHVhbENhbWVyYSYmcy5EdWFsQ2FtZXJhLmVuY29kZShlLmR1YWxDYW1lcmEsdC51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5ncmVlblNjcmVlbiYmcy5HcmVlblNjcmVlbi5lbmNvZGUoZS5ncmVlblNjcmVlbix0LnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnNwZWVkTW9kZSYmcy5TcGVlZE1vZGUuZW5jb2RlKGUuc3BlZWRNb2RlLHQudWludDMyKDQyKS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17dHJhY2tJZDpcIjBcIixsZW5zSWRzOltdLGR1YWxDYW1lcmE6dm9pZCAwLGdyZWVuU2NyZWVuOnZvaWQgMCxzcGVlZE1vZGU6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS50cmFja0lkPWcobi51aW50NjQoKSk7YnJlYWs7Y2FzZSAyOmkubGVuc0lkcy5wdXNoKG4uc3RyaW5nKCkpO2JyZWFrO2Nhc2UgMzppLmR1YWxDYW1lcmE9cy5EdWFsQ2FtZXJhLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgNDppLmdyZWVuU2NyZWVuPXMuR3JlZW5TY3JlZW4uZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSA1Omkuc3BlZWRNb2RlPXMuU3BlZWRNb2RlLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dHJhY2tJZDpcIjBcIixsZW5zSWRzOltdLGR1YWxDYW1lcmE6dm9pZCAwLGdyZWVuU2NyZWVuOnZvaWQgMCxzcGVlZE1vZGU6dm9pZCAwfTtyZXR1cm4gdC50cmFja0lkPWUudHJhY2tJZD8/XCIwXCIsdC5sZW5zSWRzPWUubGVuc0lkcz8ubWFwKChlPT5lKSl8fFtdLHQuZHVhbENhbWVyYT12b2lkIDAhPT1lLmR1YWxDYW1lcmEmJm51bGwhPT1lLmR1YWxDYW1lcmE/cy5EdWFsQ2FtZXJhLmZyb21QYXJ0aWFsKGUuZHVhbENhbWVyYSk6dm9pZCAwLHQuZ3JlZW5TY3JlZW49dm9pZCAwIT09ZS5ncmVlblNjcmVlbiYmbnVsbCE9PWUuZ3JlZW5TY3JlZW4/cy5HcmVlblNjcmVlbi5mcm9tUGFydGlhbChlLmdyZWVuU2NyZWVuKTp2b2lkIDAsdC5zcGVlZE1vZGU9dm9pZCAwIT09ZS5zcGVlZE1vZGUmJm51bGwhPT1lLnNwZWVkTW9kZT9zLlNwZWVkTW9kZS5mcm9tUGFydGlhbChlLnNwZWVkTW9kZSk6dm9pZCAwLHR9fSx0LkNoZWVyaW9zQWN0aW9uPXtlbmNvZGUoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTptLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpfSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBtLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG0uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtuLnNraXBUeXBlKDcmZSl9cmV0dXJue319LGZyb21QYXJ0aWFsOmU9Pih7fSl9LHQuUXVlc3Rpb25TdGlja2VyQWN0aW9uPXtlbmNvZGUoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTptLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpfSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBtLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG0uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtuLnNraXBUeXBlKDcmZSl9cmV0dXJue319LGZyb21QYXJ0aWFsOmU9Pih7fSl9LHQuU2NyZWVuc2hvcEFjdGlvbj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTptLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnNuYXBJZCYmdC51aW50MzIoMTApLnN0cmluZyhlLnNuYXBJZCksXCJcIiE9PWUuaGVyb0ltYWdlQm9sdENvbnRlbnRVcmwmJnQudWludDMyKDE4KS5zdHJpbmcoZS5oZXJvSW1hZ2VCb2x0Q29udGVudFVybCksXCJcIiE9PWUua2V5JiZ0LnVpbnQzMigyNikuc3RyaW5nKGUua2V5KSxcIlwiIT09ZS5pdiYmdC51aW50MzIoMzQpLnN0cmluZyhlLml2KSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBtLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG0uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3NuYXBJZDpcIlwiLGhlcm9JbWFnZUJvbHRDb250ZW50VXJsOlwiXCIsa2V5OlwiXCIsaXY6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuc25hcElkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkuaGVyb0ltYWdlQm9sdENvbnRlbnRVcmw9bi5zdHJpbmcoKTticmVhaztjYXNlIDM6aS5rZXk9bi5zdHJpbmcoKTticmVhaztjYXNlIDQ6aS5pdj1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17c25hcElkOlwiXCIsaGVyb0ltYWdlQm9sdENvbnRlbnRVcmw6XCJcIixrZXk6XCJcIixpdjpcIlwifTtyZXR1cm4gdC5zbmFwSWQ9ZS5zbmFwSWQ/P1wiXCIsdC5oZXJvSW1hZ2VCb2x0Q29udGVudFVybD1lLmhlcm9JbWFnZUJvbHRDb250ZW50VXJsPz9cIlwiLHQua2V5PWUua2V5Pz9cIlwiLHQuaXY9ZS5pdj8/XCJcIix0fX0sdC5Db21tZXJjZU11bHRpTWVyY2hhbnRBY3Rpb249e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS50b3BpY05hbWUmJnQudWludDMyKDEwKS5zdHJpbmcoZS50b3BpY05hbWUpLDAhPT1lLnZpZXdpbmdDb250ZXh0SW50ZXJuYWwubGVuZ3RoJiZ0LnVpbnQzMigxOCkuYnl0ZXMoZS52aWV3aW5nQ29udGV4dEludGVybmFsKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBtLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG0uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9digpO2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnRvcGljTmFtZT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLnZpZXdpbmdDb250ZXh0SW50ZXJuYWw9bi5ieXRlcygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD12KCk7cmV0dXJuIHQudG9waWNOYW1lPWUudG9waWNOYW1lPz9cIlwiLHQudmlld2luZ0NvbnRleHRJbnRlcm5hbD1lLnZpZXdpbmdDb250ZXh0SW50ZXJuYWw/P25ldyBVaW50OEFycmF5LHR9fSx0LlNhdmVBY3Rpb249e2VuY29kZShlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCl9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO24uc2tpcFR5cGUoNyZlKX1yZXR1cm57fX0sZnJvbVBhcnRpYWw6ZT0+KHt9KX0sdC5Db250ZXh0UVNJQWN0aW9uPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLmNvbnRleHRRc2lBY3Rpb25UeXBlJiZ0LnVpbnQzMig4KS5pbnQzMihlLmNvbnRleHRRc2lBY3Rpb25UeXBlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBtLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG0uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2NvbnRleHRRc2lBY3Rpb25UeXBlOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLmNvbnRleHRRc2lBY3Rpb25UeXBlPW4uaW50MzIoKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2NvbnRleHRRc2lBY3Rpb25UeXBlOjB9O3JldHVybiB0LmNvbnRleHRRc2lBY3Rpb25UeXBlPWUuY29udGV4dFFzaUFjdGlvblR5cGU/PzAsdH19LHQuT3BlblNlYXJjaENoYXRUYWI9e2VuY29kZShlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCl9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO24uc2tpcFR5cGUoNyZlKX1yZXR1cm57fX0sZnJvbVBhcnRpYWw6ZT0+KHt9KX0sdC5PcGVuQ2FtZXJhUm9sbD17ZW5jb2RlKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKX0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBtLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7bi5za2lwVHlwZSg3JmUpfXJldHVybnt9fSxmcm9tUGFydGlhbDplPT4oe30pfSx0LkR3ZWJVcHNlbGxBY3Rpb249e2VuY29kZShlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCl9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO24uc2tpcFR5cGUoNyZlKX1yZXR1cm57fX0sZnJvbVBhcnRpYWw6ZT0+KHt9KX0sdC5DVEl0ZW1BY3Rpb249e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgbiBvZiBlLmN0SXRlbUluc3RhbmNlKWMuQ1RJdGVtSW5zdGFuY2UuZW5jb2RlKG4sdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17Y3RJdGVtSW5zdGFuY2U6W119O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLmN0SXRlbUluc3RhbmNlLnB1c2goYy5DVEl0ZW1JbnN0YW5jZS5kZWNvZGUobixuLnVpbnQzMigpKSk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtjdEl0ZW1JbnN0YW5jZTpbXX07cmV0dXJuIHQuY3RJdGVtSW5zdGFuY2U9ZS5jdEl0ZW1JbnN0YW5jZT8ubWFwKChlPT5jLkNUSXRlbUluc3RhbmNlLmZyb21QYXJ0aWFsKGUpKSl8fFtdLHR9fSx0LkRlZXBsaW5rU3RpY2tlckFjdGlvbj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTptLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmRlZXBsaW5rVXJsJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUuZGVlcGxpbmtVcmwpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17ZGVlcGxpbmtVcmw6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2kuZGVlcGxpbmtVcmw9bi5zdHJpbmcoKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2RlZXBsaW5rVXJsOlwiXCJ9O3JldHVybiB0LmRlZXBsaW5rVXJsPWUuZGVlcGxpbmtVcmw/P1wiXCIsdH19LHQuU2NhbkFjdGlvbj17ZW5jb2RlKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKX0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBtLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7bi5za2lwVHlwZSg3JmUpfXJldHVybnt9fSxmcm9tUGFydGlhbDplPT4oe30pfSx0LkJpdG1vamlWaWV3T3V0Zml0QWN0aW9uPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm0uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUuY29zdHVtZU92ZXJyaWRlSWQmJmEuVVVJRC5lbmNvZGUoZS5jb3N0dW1lT3ZlcnJpZGVJZCx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBtLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG0uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2Nvc3R1bWVPdmVycmlkZUlkOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2kuY29zdHVtZU92ZXJyaWRlSWQ9YS5VVUlELmRlY29kZShuLG4udWludDMyKCkpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17Y29zdHVtZU92ZXJyaWRlSWQ6dm9pZCAwfTtyZXR1cm4gdC5jb3N0dW1lT3ZlcnJpZGVJZD12b2lkIDAhPT1lLmNvc3R1bWVPdmVycmlkZUlkJiZudWxsIT09ZS5jb3N0dW1lT3ZlcnJpZGVJZD9hLlVVSUQuZnJvbVBhcnRpYWwoZS5jb3N0dW1lT3ZlcnJpZGVJZCk6dm9pZCAwLHR9fSx0LkZyaWVuZEFkZEFjdGlvbj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTptLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnVzZXJJZCYmdC51aW50MzIoMTApLnN0cmluZyhlLnVzZXJJZCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBtLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXt1c2VySWQ6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2kudXNlcklkPW4uc3RyaW5nKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt1c2VySWQ6XCJcIn07cmV0dXJuIHQudXNlcklkPWUudXNlcklkPz9cIlwiLHR9fSx0LkFjdGlvbj17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTptLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLm1ldHJpYyYmdC5BY3Rpb25NZXRyaWMuZW5jb2RlKGUubWV0cmljLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLFwidXJsQWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnQuVXJsQWN0aW9uLmVuY29kZShlLmFjdGlvbi51cmxBY3Rpb24sbi51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksXCJjaGF0QWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnQuQ2hhdEFjdGlvbi5lbmNvZGUoZS5hY3Rpb24uY2hhdEFjdGlvbixuLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSxcImNhbWVyYUFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ0LkNhbWVyYUFjdGlvbi5lbmNvZGUoZS5hY3Rpb24uY2FtZXJhQWN0aW9uLG4udWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpLFwiY2FyZHNBY3Rpb25cIj09PWUuYWN0aW9uPy4kY2FzZSYmdC5DYXJkc0FjdGlvbi5lbmNvZGUoZS5hY3Rpb24uY2FyZHNBY3Rpb24sbi51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKCksXCJncm91cEludml0ZUFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ0Lkdyb3VwSW52aXRlQWN0aW9uLmVuY29kZShlLmFjdGlvbi5ncm91cEludml0ZUFjdGlvbixuLnVpbnQzMig1MCkuZm9yaygpKS5sZGVsaW0oKSxcInN0b3J5UmVwbHlBY3Rpb25cIj09PWUuYWN0aW9uPy4kY2FzZSYmdC5TdG9yeVJlcGx5QWN0aW9uLmVuY29kZShlLmFjdGlvbi5zdG9yeVJlcGx5QWN0aW9uLG4udWludDMyKDY2KS5mb3JrKCkpLmxkZWxpbSgpLFwic3RvcnlJbnZpdGVBY3Rpb25cIj09PWUuYWN0aW9uPy4kY2FzZSYmdC5TdG9yeUludml0ZUFjdGlvbi5lbmNvZGUoZS5hY3Rpb24uc3RvcnlJbnZpdGVBY3Rpb24sbi51aW50MzIoNzQpLmZvcmsoKSkubGRlbGltKCksXCJnYW1lQWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnQuR2FtZUFjdGlvbi5lbmNvZGUoZS5hY3Rpb24uZ2FtZUFjdGlvbixuLnVpbnQzMig4MikuZm9yaygpKS5sZGVsaW0oKSxcInVzZXJQcm9maWxlQWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnQuVXNlclByb2ZpbGVBY3Rpb24uZW5jb2RlKGUuYWN0aW9uLnVzZXJQcm9maWxlQWN0aW9uLG4udWludDMyKDkwKS5mb3JrKCkpLmxkZWxpbSgpLFwicHVibGljUHJvZmlsZUFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ0LlB1YmxpY1Byb2ZpbGVBY3Rpb24uZW5jb2RlKGUuYWN0aW9uLnB1YmxpY1Byb2ZpbGVBY3Rpb24sbi51aW50MzIoOTgpLmZvcmsoKSkubGRlbGltKCksXCJzbmFwcGFibGVBY3Rpb25cIj09PWUuYWN0aW9uPy4kY2FzZSYmdC5TbmFwcGFibGVBY3Rpb24uZW5jb2RlKGUuYWN0aW9uLnNuYXBwYWJsZUFjdGlvbixuLnVpbnQzMigxMDYpLmZvcmsoKSkubGRlbGltKCksXCJsZW5zQWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnQuTGVuc0FjdGlvbi5lbmNvZGUoZS5hY3Rpb24ubGVuc0FjdGlvbixuLnVpbnQzMigxMTQpLmZvcmsoKSkubGRlbGltKCksXCJjYW1lb09uYm9hcmRpbmdBY3Rpb25cIj09PWUuYWN0aW9uPy4kY2FzZSYmdC5DYW1lb09uYm9hcmRpbmdBY3Rpb24uZW5jb2RlKGUuYWN0aW9uLmNhbWVvT25ib2FyZGluZ0FjdGlvbixuLnVpbnQzMigxMjIpLmZvcmsoKSkubGRlbGltKCksXCJib29zdEFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ0LkJvb3N0QWN0aW9uLmVuY29kZShlLmFjdGlvbi5ib29zdEFjdGlvbixuLnVpbnQzMigxMzApLmZvcmsoKSkubGRlbGltKCksXCJwbGFjZVByb2ZpbGVBY3Rpb25cIj09PWUuYWN0aW9uPy4kY2FzZSYmdC5QbGFjZVByb2ZpbGVBY3Rpb24uZW5jb2RlKGUuYWN0aW9uLnBsYWNlUHJvZmlsZUFjdGlvbixuLnVpbnQzMigxMzgpLmZvcmsoKSkubGRlbGltKCksXCJzaGFyZUFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ0LlNoYXJlQWN0aW9uLmVuY29kZShlLmFjdGlvbi5zaGFyZUFjdGlvbixuLnVpbnQzMigxNDYpLmZvcmsoKSkubGRlbGltKCksXCJlZGl0QWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnQuRWRpdEFjdGlvbi5lbmNvZGUoZS5hY3Rpb24uZWRpdEFjdGlvbixuLnVpbnQzMigxNTQpLmZvcmsoKSkubGRlbGltKCksXCJjYW1lcmFWMkFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ0LkNhbWVyYVYyQWN0aW9uLmVuY29kZShlLmFjdGlvbi5jYW1lcmFWMkFjdGlvbixuLnVpbnQzMigxNjIpLmZvcmsoKSkubGRlbGltKCksXCJkaXNjb3ZlclByZW1pdW1BY3Rpb25cIj09PWUuYWN0aW9uPy4kY2FzZSYmdC5EaXNjb3ZlclByZW1pdW1BY3Rpb24uZW5jb2RlKGUuYWN0aW9uLmRpc2NvdmVyUHJlbWl1bUFjdGlvbixuLnVpbnQzMigxNzApLmZvcmsoKSkubGRlbGltKCksXCJyZWFkQWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnQuUmVhZEFjdGlvbi5lbmNvZGUoZS5hY3Rpb24ucmVhZEFjdGlvbixuLnVpbnQzMigxNzgpLmZvcmsoKSkubGRlbGltKCksXCJjcmVhdGl2ZXRvb2xzU3RpY2tlckFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ0LkNyZWF0aXZlVG9vbHNTdGlja2VyQWN0aW9uLmVuY29kZShlLmFjdGlvbi5jcmVhdGl2ZXRvb2xzU3RpY2tlckFjdGlvbixuLnVpbnQzMigxODYpLmZvcmsoKSkubGRlbGltKCksXCJhc3Ryb2xvZ3lQcm9maWxlQWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnQuQXN0cm9sb2d5UHJvZmlsZUFjdGlvbi5lbmNvZGUoZS5hY3Rpb24uYXN0cm9sb2d5UHJvZmlsZUFjdGlvbixuLnVpbnQzMigxOTQpLmZvcmsoKSkubGRlbGltKCksXCJ0b3BpY0FjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ0LlRvcGljQWN0aW9uLmVuY29kZShlLmFjdGlvbi50b3BpY0FjdGlvbixuLnVpbnQzMigyMDIpLmZvcmsoKSkubGRlbGltKCksXCJ3YXRjaFNwb3RsaWdodEFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ0LldhdGNoU3BvdGxpZ2h0QWN0aW9uLmVuY29kZShlLmFjdGlvbi53YXRjaFNwb3RsaWdodEFjdGlvbixuLnVpbnQzMigyMTApLmZvcmsoKSkubGRlbGltKCksXCJzaG93SW5mb0FjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ0LlNob3dJbmZvQWN0aW9uLmVuY29kZShlLmFjdGlvbi5zaG93SW5mb0FjdGlvbixuLnVpbnQzMigyMTgpLmZvcmsoKSkubGRlbGltKCksXCJzb3VuZFByb2ZpbGVBY3Rpb25cIj09PWUuYWN0aW9uPy4kY2FzZSYmdC5Tb3VuZFByb2ZpbGVBY3Rpb24uZW5jb2RlKGUuYWN0aW9uLnNvdW5kUHJvZmlsZUFjdGlvbixuLnVpbnQzMigyMjYpLmZvcmsoKSkubGRlbGltKCksXCJhZENvbGxlY3Rpb25JdGVtQWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnQuQWRDb2xsZWN0aW9uSXRlbUFjdGlvbi5lbmNvZGUoZS5hY3Rpb24uYWRDb2xsZWN0aW9uSXRlbUFjdGlvbixuLnVpbnQzMigyMzQpLmZvcmsoKSkubGRlbGltKCksXCJtZW1vcmllc0Zhdm9yaXRlQWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnQuTWVtb3JpZXNGYXZvcml0ZUFjdGlvbi5lbmNvZGUoZS5hY3Rpb24ubWVtb3JpZXNGYXZvcml0ZUFjdGlvbixuLnVpbnQzMigyNDIpLmZvcmsoKSkubGRlbGltKCksXCJzbmFwUHJvU2VsZlNlcnZlQWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnQuU25hcFByb1NlbGZTZXJ2ZUFjdGlvbi5lbmNvZGUoZS5hY3Rpb24uc25hcFByb1NlbGZTZXJ2ZUFjdGlvbixuLnVpbnQzMigyNTApLmZvcmsoKSkubGRlbGltKCksXCJwb3N0U3RvcnlBY3Rpb25cIj09PWUuYWN0aW9uPy4kY2FzZSYmdC5Qb3N0U3RvcnlBY3Rpb24uZW5jb2RlKGUuYWN0aW9uLnBvc3RTdG9yeUFjdGlvbixuLnVpbnQzMigyNTgpLmZvcmsoKSkubGRlbGltKCksXCJsZW5zUHJvZmlsZUFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ0LkxlbnNQcm9maWxlQWN0aW9uLmVuY29kZShlLmFjdGlvbi5sZW5zUHJvZmlsZUFjdGlvbixuLnVpbnQzMigyNjYpLmZvcmsoKSkubGRlbGltKCksXCJhcHBQcm9maWxlQWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnQuQXBwUHJvZmlsZUFjdGlvbi5lbmNvZGUoZS5hY3Rpb24uYXBwUHJvZmlsZUFjdGlvbixuLnVpbnQzMigyNzQpLmZvcmsoKSkubGRlbGltKCksXCJjcmVhdGVBdmF0YXJBY3Rpb25cIj09PWUuYWN0aW9uPy4kY2FzZSYmdC5DcmVhdGVBdmF0YXJBY3Rpb24uZW5jb2RlKGUuYWN0aW9uLmNyZWF0ZUF2YXRhckFjdGlvbixuLnVpbnQzMigyODIpLmZvcmsoKSkubGRlbGltKCksXCJiaXRtb2ppU3RpY2tlckFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ0LkJpdG1vamlTdGlja2VyVW5sb2NrQWN0aW9uLmVuY29kZShlLmFjdGlvbi5iaXRtb2ppU3RpY2tlckFjdGlvbixuLnVpbnQzMigyOTApLmZvcmsoKSkubGRlbGltKCksXCJjb21tZXJjZUFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ0LkNvbW1lcmNlQWN0aW9uLmVuY29kZShlLmFjdGlvbi5jb21tZXJjZUFjdGlvbixuLnVpbnQzMigyOTgpLmZvcmsoKSkubGRlbGltKCksXCJwb2xsQWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnQuUG9sbEFjdGlvbi5lbmNvZGUoZS5hY3Rpb24ucG9sbEFjdGlvbixuLnVpbnQzMigzMDYpLmZvcmsoKSkubGRlbGltKCksXCJyZW1peEFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ0LlJlbWl4QWN0aW9uLmVuY29kZShlLmFjdGlvbi5yZW1peEFjdGlvbixuLnVpbnQzMigzMTQpLmZvcmsoKSkubGRlbGltKCksXCJ0cmVuZGluZ1RvcGljc0FjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ0LlRyZW5kaW5nVG9waWNzQWN0aW9uLmVuY29kZShlLmFjdGlvbi50cmVuZGluZ1RvcGljc0FjdGlvbixuLnVpbnQzMigzMjIpLmZvcmsoKSkubGRlbGltKCksXCJjb21tZW50c0FjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ0LkNvbW1lbnRzQWN0aW9uLmVuY29kZShlLmFjdGlvbi5jb21tZW50c0FjdGlvbixuLnVpbnQzMigzMzApLmZvcmsoKSkubGRlbGltKCksXCJ1bmlmaWVkUHVibGljUHJvZmlsZUFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ0LlVuaWZpZWRQdWJsaWNQcm9maWxlQWN0aW9uLmVuY29kZShlLmFjdGlvbi51bmlmaWVkUHVibGljUHJvZmlsZUFjdGlvbixuLnVpbnQzMigzMzgpLmZvcmsoKSkubGRlbGltKCksXCJjaGVlcmlvc0FjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ0LkNoZWVyaW9zQWN0aW9uLmVuY29kZShlLmFjdGlvbi5jaGVlcmlvc0FjdGlvbixuLnVpbnQzMigzNDYpLmZvcmsoKSkubGRlbGltKCksXCJjYW1lcmFTaG9ydGN1dEFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ0LkNhbWVyYVNob3J0Y3V0QWN0aW9uLmVuY29kZShlLmFjdGlvbi5jYW1lcmFTaG9ydGN1dEFjdGlvbixuLnVpbnQzMigzNTQpLmZvcmsoKSkubGRlbGltKCksXCJzbmFwS2l0SWRlbnRpdHlXZWJWaWV3QWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnQuU25hcEtpdElkZW50aXR5V2ViVmlld0FjdGlvbi5lbmNvZGUoZS5hY3Rpb24uc25hcEtpdElkZW50aXR5V2ViVmlld0FjdGlvbixuLnVpbnQzMigzNjIpLmZvcmsoKSkubGRlbGltKCksXCJkaXNjb3ZlclN1YnNjcmlwdGlvbkFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ0LkRpc2NvdmVyU3Vic2NyaXB0aW9uQWN0aW9uLmVuY29kZShlLmFjdGlvbi5kaXNjb3ZlclN1YnNjcmlwdGlvbkFjdGlvbixuLnVpbnQzMigzNzApLmZvcmsoKSkubGRlbGltKCksXCJtYW51YWxGcmllbmRTZWxlY3Rpb25BY3Rpb25cIj09PWUuYWN0aW9uPy4kY2FzZSYmdC5NYW51YWxGcmllbmRTZWxlY3Rpb25BY3Rpb24uZW5jb2RlKGUuYWN0aW9uLm1hbnVhbEZyaWVuZFNlbGVjdGlvbkFjdGlvbixuLnVpbnQzMigzNzgpLmZvcmsoKSkubGRlbGltKCksXCJzbmFwS2l0SW52aXRlT3BlbkFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ0LlNuYXBLaXRJbnZpdGVPcGVuQWN0aW9uLmVuY29kZShlLmFjdGlvbi5zbmFwS2l0SW52aXRlT3BlbkFjdGlvbixuLnVpbnQzMigzODYpLmZvcmsoKSkubGRlbGltKCksXCJxdWVzdGlvblN0aWNrZXJBY3Rpb25cIj09PWUuYWN0aW9uPy4kY2FzZSYmdC5RdWVzdGlvblN0aWNrZXJBY3Rpb24uZW5jb2RlKGUuYWN0aW9uLnF1ZXN0aW9uU3RpY2tlckFjdGlvbixuLnVpbnQzMigzOTQpLmZvcmsoKSkubGRlbGltKCksXCJzY3JlZW5zaG9wQWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnQuU2NyZWVuc2hvcEFjdGlvbi5lbmNvZGUoZS5hY3Rpb24uc2NyZWVuc2hvcEFjdGlvbixuLnVpbnQzMig0MDIpLmZvcmsoKSkubGRlbGltKCksXCJzYXZlQWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnQuU2F2ZUFjdGlvbi5lbmNvZGUoZS5hY3Rpb24uc2F2ZUFjdGlvbixuLnVpbnQzMig0MTApLmZvcmsoKSkubGRlbGltKCksXCJjb250ZXh0UXNpQWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnQuQ29udGV4dFFTSUFjdGlvbi5lbmNvZGUoZS5hY3Rpb24uY29udGV4dFFzaUFjdGlvbixuLnVpbnQzMig0MTgpLmZvcmsoKSkubGRlbGltKCksXCJvcGVuU2VhcmNoVGFiXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnQuT3BlblNlYXJjaENoYXRUYWIuZW5jb2RlKGUuYWN0aW9uLm9wZW5TZWFyY2hUYWIsbi51aW50MzIoNDI2KS5mb3JrKCkpLmxkZWxpbSgpLFwiY29tbWVyY2VNdWx0aU1lcmNoYW50QWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnQuQ29tbWVyY2VNdWx0aU1lcmNoYW50QWN0aW9uLmVuY29kZShlLmFjdGlvbi5jb21tZXJjZU11bHRpTWVyY2hhbnRBY3Rpb24sbi51aW50MzIoNDM0KS5mb3JrKCkpLmxkZWxpbSgpLFwib3BlbkNhbWVyYVJvbGxcIj09PWUuYWN0aW9uPy4kY2FzZSYmdC5PcGVuQ2FtZXJhUm9sbC5lbmNvZGUoZS5hY3Rpb24ub3BlbkNhbWVyYVJvbGwsbi51aW50MzIoNDQyKS5mb3JrKCkpLmxkZWxpbSgpLFwiZHdlYlVwc2VsbEFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ0LkR3ZWJVcHNlbGxBY3Rpb24uZW5jb2RlKGUuYWN0aW9uLmR3ZWJVcHNlbGxBY3Rpb24sbi51aW50MzIoNDUwKS5mb3JrKCkpLmxkZWxpbSgpLFwiY3RJdGVtQWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnQuQ1RJdGVtQWN0aW9uLmVuY29kZShlLmFjdGlvbi5jdEl0ZW1BY3Rpb24sbi51aW50MzIoNDU4KS5mb3JrKCkpLmxkZWxpbSgpLFwiZGVlcGxpbmtTdGlja2VyQWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnQuRGVlcGxpbmtTdGlja2VyQWN0aW9uLmVuY29kZShlLmFjdGlvbi5kZWVwbGlua1N0aWNrZXJBY3Rpb24sbi51aW50MzIoNDY2KS5mb3JrKCkpLmxkZWxpbSgpLFwic2NhbkFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ0LlNjYW5BY3Rpb24uZW5jb2RlKGUuYWN0aW9uLnNjYW5BY3Rpb24sbi51aW50MzIoNDc0KS5mb3JrKCkpLmxkZWxpbSgpLFwiYml0bW9qaVZpZXdPdXRmaXRBY3Rpb25cIj09PWUuYWN0aW9uPy4kY2FzZSYmdC5CaXRtb2ppVmlld091dGZpdEFjdGlvbi5lbmNvZGUoZS5hY3Rpb24uYml0bW9qaVZpZXdPdXRmaXRBY3Rpb24sbi51aW50MzIoNDgyKS5mb3JrKCkpLmxkZWxpbSgpLFwic2hvd1NuYXBBY3Rpb25cIj09PWUuYWN0aW9uPy4kY2FzZSYmdC5TaG93U25hcEFjdGlvbi5lbmNvZGUoZS5hY3Rpb24uc2hvd1NuYXBBY3Rpb24sbi51aW50MzIoNDkwKS5mb3JrKCkpLmxkZWxpbSgpLFwicmVtaXhlc1RvcGljQWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnQuUmVtaXhlc1RvcGljQWN0aW9uLmVuY29kZShlLmFjdGlvbi5yZW1peGVzVG9waWNBY3Rpb24sbi51aW50MzIoNDk4KS5mb3JrKCkpLmxkZWxpbSgpLFwiZnJpZW5kQWRkQWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnQuRnJpZW5kQWRkQWN0aW9uLmVuY29kZShlLmFjdGlvbi5mcmllbmRBZGRBY3Rpb24sbi51aW50MzIoNTA2KS5mb3JrKCkpLmxkZWxpbSgpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIG0uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17bWV0cmljOnZvaWQgMCxhY3Rpb246dm9pZCAwfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5tZXRyaWM9dC5BY3Rpb25NZXRyaWMuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOm8uYWN0aW9uPXskY2FzZTpcInVybEFjdGlvblwiLHVybEFjdGlvbjp0LlVybEFjdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAzOm8uYWN0aW9uPXskY2FzZTpcImNoYXRBY3Rpb25cIixjaGF0QWN0aW9uOnQuQ2hhdEFjdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA0Om8uYWN0aW9uPXskY2FzZTpcImNhbWVyYUFjdGlvblwiLGNhbWVyYUFjdGlvbjp0LkNhbWVyYUFjdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA1Om8uYWN0aW9uPXskY2FzZTpcImNhcmRzQWN0aW9uXCIsY2FyZHNBY3Rpb246dC5DYXJkc0FjdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA2Om8uYWN0aW9uPXskY2FzZTpcImdyb3VwSW52aXRlQWN0aW9uXCIsZ3JvdXBJbnZpdGVBY3Rpb246dC5Hcm91cEludml0ZUFjdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA4Om8uYWN0aW9uPXskY2FzZTpcInN0b3J5UmVwbHlBY3Rpb25cIixzdG9yeVJlcGx5QWN0aW9uOnQuU3RvcnlSZXBseUFjdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA5Om8uYWN0aW9uPXskY2FzZTpcInN0b3J5SW52aXRlQWN0aW9uXCIsc3RvcnlJbnZpdGVBY3Rpb246dC5TdG9yeUludml0ZUFjdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAxMDpvLmFjdGlvbj17JGNhc2U6XCJnYW1lQWN0aW9uXCIsZ2FtZUFjdGlvbjp0LkdhbWVBY3Rpb24uZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMTE6by5hY3Rpb249eyRjYXNlOlwidXNlclByb2ZpbGVBY3Rpb25cIix1c2VyUHJvZmlsZUFjdGlvbjp0LlVzZXJQcm9maWxlQWN0aW9uLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDEyOm8uYWN0aW9uPXskY2FzZTpcInB1YmxpY1Byb2ZpbGVBY3Rpb25cIixwdWJsaWNQcm9maWxlQWN0aW9uOnQuUHVibGljUHJvZmlsZUFjdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAxMzpvLmFjdGlvbj17JGNhc2U6XCJzbmFwcGFibGVBY3Rpb25cIixzbmFwcGFibGVBY3Rpb246dC5TbmFwcGFibGVBY3Rpb24uZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMTQ6by5hY3Rpb249eyRjYXNlOlwibGVuc0FjdGlvblwiLGxlbnNBY3Rpb246dC5MZW5zQWN0aW9uLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDE1Om8uYWN0aW9uPXskY2FzZTpcImNhbWVvT25ib2FyZGluZ0FjdGlvblwiLGNhbWVvT25ib2FyZGluZ0FjdGlvbjp0LkNhbWVvT25ib2FyZGluZ0FjdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAxNjpvLmFjdGlvbj17JGNhc2U6XCJib29zdEFjdGlvblwiLGJvb3N0QWN0aW9uOnQuQm9vc3RBY3Rpb24uZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMTc6by5hY3Rpb249eyRjYXNlOlwicGxhY2VQcm9maWxlQWN0aW9uXCIscGxhY2VQcm9maWxlQWN0aW9uOnQuUGxhY2VQcm9maWxlQWN0aW9uLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDE4Om8uYWN0aW9uPXskY2FzZTpcInNoYXJlQWN0aW9uXCIsc2hhcmVBY3Rpb246dC5TaGFyZUFjdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAxOTpvLmFjdGlvbj17JGNhc2U6XCJlZGl0QWN0aW9uXCIsZWRpdEFjdGlvbjp0LkVkaXRBY3Rpb24uZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMjA6by5hY3Rpb249eyRjYXNlOlwiY2FtZXJhVjJBY3Rpb25cIixjYW1lcmFWMkFjdGlvbjp0LkNhbWVyYVYyQWN0aW9uLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDIxOm8uYWN0aW9uPXskY2FzZTpcImRpc2NvdmVyUHJlbWl1bUFjdGlvblwiLGRpc2NvdmVyUHJlbWl1bUFjdGlvbjp0LkRpc2NvdmVyUHJlbWl1bUFjdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAyMjpvLmFjdGlvbj17JGNhc2U6XCJyZWFkQWN0aW9uXCIscmVhZEFjdGlvbjp0LlJlYWRBY3Rpb24uZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMjM6by5hY3Rpb249eyRjYXNlOlwiY3JlYXRpdmV0b29sc1N0aWNrZXJBY3Rpb25cIixjcmVhdGl2ZXRvb2xzU3RpY2tlckFjdGlvbjp0LkNyZWF0aXZlVG9vbHNTdGlja2VyQWN0aW9uLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDI0Om8uYWN0aW9uPXskY2FzZTpcImFzdHJvbG9neVByb2ZpbGVBY3Rpb25cIixhc3Ryb2xvZ3lQcm9maWxlQWN0aW9uOnQuQXN0cm9sb2d5UHJvZmlsZUFjdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAyNTpvLmFjdGlvbj17JGNhc2U6XCJ0b3BpY0FjdGlvblwiLHRvcGljQWN0aW9uOnQuVG9waWNBY3Rpb24uZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMjY6by5hY3Rpb249eyRjYXNlOlwid2F0Y2hTcG90bGlnaHRBY3Rpb25cIix3YXRjaFNwb3RsaWdodEFjdGlvbjp0LldhdGNoU3BvdGxpZ2h0QWN0aW9uLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDI3Om8uYWN0aW9uPXskY2FzZTpcInNob3dJbmZvQWN0aW9uXCIsc2hvd0luZm9BY3Rpb246dC5TaG93SW5mb0FjdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAyODpvLmFjdGlvbj17JGNhc2U6XCJzb3VuZFByb2ZpbGVBY3Rpb25cIixzb3VuZFByb2ZpbGVBY3Rpb246dC5Tb3VuZFByb2ZpbGVBY3Rpb24uZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMjk6by5hY3Rpb249eyRjYXNlOlwiYWRDb2xsZWN0aW9uSXRlbUFjdGlvblwiLGFkQ29sbGVjdGlvbkl0ZW1BY3Rpb246dC5BZENvbGxlY3Rpb25JdGVtQWN0aW9uLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDMwOm8uYWN0aW9uPXskY2FzZTpcIm1lbW9yaWVzRmF2b3JpdGVBY3Rpb25cIixtZW1vcmllc0Zhdm9yaXRlQWN0aW9uOnQuTWVtb3JpZXNGYXZvcml0ZUFjdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAzMTpvLmFjdGlvbj17JGNhc2U6XCJzbmFwUHJvU2VsZlNlcnZlQWN0aW9uXCIsc25hcFByb1NlbGZTZXJ2ZUFjdGlvbjp0LlNuYXBQcm9TZWxmU2VydmVBY3Rpb24uZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMzI6by5hY3Rpb249eyRjYXNlOlwicG9zdFN0b3J5QWN0aW9uXCIscG9zdFN0b3J5QWN0aW9uOnQuUG9zdFN0b3J5QWN0aW9uLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDMzOm8uYWN0aW9uPXskY2FzZTpcImxlbnNQcm9maWxlQWN0aW9uXCIsbGVuc1Byb2ZpbGVBY3Rpb246dC5MZW5zUHJvZmlsZUFjdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAzNDpvLmFjdGlvbj17JGNhc2U6XCJhcHBQcm9maWxlQWN0aW9uXCIsYXBwUHJvZmlsZUFjdGlvbjp0LkFwcFByb2ZpbGVBY3Rpb24uZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMzU6by5hY3Rpb249eyRjYXNlOlwiY3JlYXRlQXZhdGFyQWN0aW9uXCIsY3JlYXRlQXZhdGFyQWN0aW9uOnQuQ3JlYXRlQXZhdGFyQWN0aW9uLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDM2Om8uYWN0aW9uPXskY2FzZTpcImJpdG1vamlTdGlja2VyQWN0aW9uXCIsYml0bW9qaVN0aWNrZXJBY3Rpb246dC5CaXRtb2ppU3RpY2tlclVubG9ja0FjdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAzNzpvLmFjdGlvbj17JGNhc2U6XCJjb21tZXJjZUFjdGlvblwiLGNvbW1lcmNlQWN0aW9uOnQuQ29tbWVyY2VBY3Rpb24uZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMzg6by5hY3Rpb249eyRjYXNlOlwicG9sbEFjdGlvblwiLHBvbGxBY3Rpb246dC5Qb2xsQWN0aW9uLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDM5Om8uYWN0aW9uPXskY2FzZTpcInJlbWl4QWN0aW9uXCIscmVtaXhBY3Rpb246dC5SZW1peEFjdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA0MDpvLmFjdGlvbj17JGNhc2U6XCJ0cmVuZGluZ1RvcGljc0FjdGlvblwiLHRyZW5kaW5nVG9waWNzQWN0aW9uOnQuVHJlbmRpbmdUb3BpY3NBY3Rpb24uZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgNDE6by5hY3Rpb249eyRjYXNlOlwiY29tbWVudHNBY3Rpb25cIixjb21tZW50c0FjdGlvbjp0LkNvbW1lbnRzQWN0aW9uLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDQyOm8uYWN0aW9uPXskY2FzZTpcInVuaWZpZWRQdWJsaWNQcm9maWxlQWN0aW9uXCIsdW5pZmllZFB1YmxpY1Byb2ZpbGVBY3Rpb246dC5VbmlmaWVkUHVibGljUHJvZmlsZUFjdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA0MzpvLmFjdGlvbj17JGNhc2U6XCJjaGVlcmlvc0FjdGlvblwiLGNoZWVyaW9zQWN0aW9uOnQuQ2hlZXJpb3NBY3Rpb24uZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgNDQ6by5hY3Rpb249eyRjYXNlOlwiY2FtZXJhU2hvcnRjdXRBY3Rpb25cIixjYW1lcmFTaG9ydGN1dEFjdGlvbjp0LkNhbWVyYVNob3J0Y3V0QWN0aW9uLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDQ1Om8uYWN0aW9uPXskY2FzZTpcInNuYXBLaXRJZGVudGl0eVdlYlZpZXdBY3Rpb25cIixzbmFwS2l0SWRlbnRpdHlXZWJWaWV3QWN0aW9uOnQuU25hcEtpdElkZW50aXR5V2ViVmlld0FjdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA0NjpvLmFjdGlvbj17JGNhc2U6XCJkaXNjb3ZlclN1YnNjcmlwdGlvbkFjdGlvblwiLGRpc2NvdmVyU3Vic2NyaXB0aW9uQWN0aW9uOnQuRGlzY292ZXJTdWJzY3JpcHRpb25BY3Rpb24uZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgNDc6by5hY3Rpb249eyRjYXNlOlwibWFudWFsRnJpZW5kU2VsZWN0aW9uQWN0aW9uXCIsbWFudWFsRnJpZW5kU2VsZWN0aW9uQWN0aW9uOnQuTWFudWFsRnJpZW5kU2VsZWN0aW9uQWN0aW9uLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDQ4Om8uYWN0aW9uPXskY2FzZTpcInNuYXBLaXRJbnZpdGVPcGVuQWN0aW9uXCIsc25hcEtpdEludml0ZU9wZW5BY3Rpb246dC5TbmFwS2l0SW52aXRlT3BlbkFjdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA0OTpvLmFjdGlvbj17JGNhc2U6XCJxdWVzdGlvblN0aWNrZXJBY3Rpb25cIixxdWVzdGlvblN0aWNrZXJBY3Rpb246dC5RdWVzdGlvblN0aWNrZXJBY3Rpb24uZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgNTA6by5hY3Rpb249eyRjYXNlOlwic2NyZWVuc2hvcEFjdGlvblwiLHNjcmVlbnNob3BBY3Rpb246dC5TY3JlZW5zaG9wQWN0aW9uLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDUxOm8uYWN0aW9uPXskY2FzZTpcInNhdmVBY3Rpb25cIixzYXZlQWN0aW9uOnQuU2F2ZUFjdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA1MjpvLmFjdGlvbj17JGNhc2U6XCJjb250ZXh0UXNpQWN0aW9uXCIsY29udGV4dFFzaUFjdGlvbjp0LkNvbnRleHRRU0lBY3Rpb24uZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgNTM6by5hY3Rpb249eyRjYXNlOlwib3BlblNlYXJjaFRhYlwiLG9wZW5TZWFyY2hUYWI6dC5PcGVuU2VhcmNoQ2hhdFRhYi5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA1NDpvLmFjdGlvbj17JGNhc2U6XCJjb21tZXJjZU11bHRpTWVyY2hhbnRBY3Rpb25cIixjb21tZXJjZU11bHRpTWVyY2hhbnRBY3Rpb246dC5Db21tZXJjZU11bHRpTWVyY2hhbnRBY3Rpb24uZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgNTU6by5hY3Rpb249eyRjYXNlOlwib3BlbkNhbWVyYVJvbGxcIixvcGVuQ2FtZXJhUm9sbDp0Lk9wZW5DYW1lcmFSb2xsLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDU2Om8uYWN0aW9uPXskY2FzZTpcImR3ZWJVcHNlbGxBY3Rpb25cIixkd2ViVXBzZWxsQWN0aW9uOnQuRHdlYlVwc2VsbEFjdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA1NzpvLmFjdGlvbj17JGNhc2U6XCJjdEl0ZW1BY3Rpb25cIixjdEl0ZW1BY3Rpb246dC5DVEl0ZW1BY3Rpb24uZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgNTg6by5hY3Rpb249eyRjYXNlOlwiZGVlcGxpbmtTdGlja2VyQWN0aW9uXCIsZGVlcGxpbmtTdGlja2VyQWN0aW9uOnQuRGVlcGxpbmtTdGlja2VyQWN0aW9uLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDU5Om8uYWN0aW9uPXskY2FzZTpcInNjYW5BY3Rpb25cIixzY2FuQWN0aW9uOnQuU2NhbkFjdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA2MDpvLmFjdGlvbj17JGNhc2U6XCJiaXRtb2ppVmlld091dGZpdEFjdGlvblwiLGJpdG1vamlWaWV3T3V0Zml0QWN0aW9uOnQuQml0bW9qaVZpZXdPdXRmaXRBY3Rpb24uZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgNjE6by5hY3Rpb249eyRjYXNlOlwic2hvd1NuYXBBY3Rpb25cIixzaG93U25hcEFjdGlvbjp0LlNob3dTbmFwQWN0aW9uLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDYyOm8uYWN0aW9uPXskY2FzZTpcInJlbWl4ZXNUb3BpY0FjdGlvblwiLHJlbWl4ZXNUb3BpY0FjdGlvbjp0LlJlbWl4ZXNUb3BpY0FjdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA2MzpvLmFjdGlvbj17JGNhc2U6XCJmcmllbmRBZGRBY3Rpb25cIixmcmllbmRBZGRBY3Rpb246dC5GcmllbmRBZGRBY3Rpb24uZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17bWV0cmljOnZvaWQgMCxhY3Rpb246dm9pZCAwfTtyZXR1cm4gbi5tZXRyaWM9dm9pZCAwIT09ZS5tZXRyaWMmJm51bGwhPT1lLm1ldHJpYz90LkFjdGlvbk1ldHJpYy5mcm9tUGFydGlhbChlLm1ldHJpYyk6dm9pZCAwLFwidXJsQWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnZvaWQgMCE9PWUuYWN0aW9uPy51cmxBY3Rpb24mJm51bGwhPT1lLmFjdGlvbj8udXJsQWN0aW9uJiYobi5hY3Rpb249eyRjYXNlOlwidXJsQWN0aW9uXCIsdXJsQWN0aW9uOnQuVXJsQWN0aW9uLmZyb21QYXJ0aWFsKGUuYWN0aW9uLnVybEFjdGlvbil9KSxcImNoYXRBY3Rpb25cIj09PWUuYWN0aW9uPy4kY2FzZSYmdm9pZCAwIT09ZS5hY3Rpb24/LmNoYXRBY3Rpb24mJm51bGwhPT1lLmFjdGlvbj8uY2hhdEFjdGlvbiYmKG4uYWN0aW9uPXskY2FzZTpcImNoYXRBY3Rpb25cIixjaGF0QWN0aW9uOnQuQ2hhdEFjdGlvbi5mcm9tUGFydGlhbChlLmFjdGlvbi5jaGF0QWN0aW9uKX0pLFwiY2FtZXJhQWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnZvaWQgMCE9PWUuYWN0aW9uPy5jYW1lcmFBY3Rpb24mJm51bGwhPT1lLmFjdGlvbj8uY2FtZXJhQWN0aW9uJiYobi5hY3Rpb249eyRjYXNlOlwiY2FtZXJhQWN0aW9uXCIsY2FtZXJhQWN0aW9uOnQuQ2FtZXJhQWN0aW9uLmZyb21QYXJ0aWFsKGUuYWN0aW9uLmNhbWVyYUFjdGlvbil9KSxcImNhcmRzQWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnZvaWQgMCE9PWUuYWN0aW9uPy5jYXJkc0FjdGlvbiYmbnVsbCE9PWUuYWN0aW9uPy5jYXJkc0FjdGlvbiYmKG4uYWN0aW9uPXskY2FzZTpcImNhcmRzQWN0aW9uXCIsY2FyZHNBY3Rpb246dC5DYXJkc0FjdGlvbi5mcm9tUGFydGlhbChlLmFjdGlvbi5jYXJkc0FjdGlvbil9KSxcImdyb3VwSW52aXRlQWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnZvaWQgMCE9PWUuYWN0aW9uPy5ncm91cEludml0ZUFjdGlvbiYmbnVsbCE9PWUuYWN0aW9uPy5ncm91cEludml0ZUFjdGlvbiYmKG4uYWN0aW9uPXskY2FzZTpcImdyb3VwSW52aXRlQWN0aW9uXCIsZ3JvdXBJbnZpdGVBY3Rpb246dC5Hcm91cEludml0ZUFjdGlvbi5mcm9tUGFydGlhbChlLmFjdGlvbi5ncm91cEludml0ZUFjdGlvbil9KSxcInN0b3J5UmVwbHlBY3Rpb25cIj09PWUuYWN0aW9uPy4kY2FzZSYmdm9pZCAwIT09ZS5hY3Rpb24/LnN0b3J5UmVwbHlBY3Rpb24mJm51bGwhPT1lLmFjdGlvbj8uc3RvcnlSZXBseUFjdGlvbiYmKG4uYWN0aW9uPXskY2FzZTpcInN0b3J5UmVwbHlBY3Rpb25cIixzdG9yeVJlcGx5QWN0aW9uOnQuU3RvcnlSZXBseUFjdGlvbi5mcm9tUGFydGlhbChlLmFjdGlvbi5zdG9yeVJlcGx5QWN0aW9uKX0pLFwic3RvcnlJbnZpdGVBY3Rpb25cIj09PWUuYWN0aW9uPy4kY2FzZSYmdm9pZCAwIT09ZS5hY3Rpb24/LnN0b3J5SW52aXRlQWN0aW9uJiZudWxsIT09ZS5hY3Rpb24/LnN0b3J5SW52aXRlQWN0aW9uJiYobi5hY3Rpb249eyRjYXNlOlwic3RvcnlJbnZpdGVBY3Rpb25cIixzdG9yeUludml0ZUFjdGlvbjp0LlN0b3J5SW52aXRlQWN0aW9uLmZyb21QYXJ0aWFsKGUuYWN0aW9uLnN0b3J5SW52aXRlQWN0aW9uKX0pLFwiZ2FtZUFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ2b2lkIDAhPT1lLmFjdGlvbj8uZ2FtZUFjdGlvbiYmbnVsbCE9PWUuYWN0aW9uPy5nYW1lQWN0aW9uJiYobi5hY3Rpb249eyRjYXNlOlwiZ2FtZUFjdGlvblwiLGdhbWVBY3Rpb246dC5HYW1lQWN0aW9uLmZyb21QYXJ0aWFsKGUuYWN0aW9uLmdhbWVBY3Rpb24pfSksXCJ1c2VyUHJvZmlsZUFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ2b2lkIDAhPT1lLmFjdGlvbj8udXNlclByb2ZpbGVBY3Rpb24mJm51bGwhPT1lLmFjdGlvbj8udXNlclByb2ZpbGVBY3Rpb24mJihuLmFjdGlvbj17JGNhc2U6XCJ1c2VyUHJvZmlsZUFjdGlvblwiLHVzZXJQcm9maWxlQWN0aW9uOnQuVXNlclByb2ZpbGVBY3Rpb24uZnJvbVBhcnRpYWwoZS5hY3Rpb24udXNlclByb2ZpbGVBY3Rpb24pfSksXCJwdWJsaWNQcm9maWxlQWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnZvaWQgMCE9PWUuYWN0aW9uPy5wdWJsaWNQcm9maWxlQWN0aW9uJiZudWxsIT09ZS5hY3Rpb24/LnB1YmxpY1Byb2ZpbGVBY3Rpb24mJihuLmFjdGlvbj17JGNhc2U6XCJwdWJsaWNQcm9maWxlQWN0aW9uXCIscHVibGljUHJvZmlsZUFjdGlvbjp0LlB1YmxpY1Byb2ZpbGVBY3Rpb24uZnJvbVBhcnRpYWwoZS5hY3Rpb24ucHVibGljUHJvZmlsZUFjdGlvbil9KSxcInNuYXBwYWJsZUFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ2b2lkIDAhPT1lLmFjdGlvbj8uc25hcHBhYmxlQWN0aW9uJiZudWxsIT09ZS5hY3Rpb24/LnNuYXBwYWJsZUFjdGlvbiYmKG4uYWN0aW9uPXskY2FzZTpcInNuYXBwYWJsZUFjdGlvblwiLHNuYXBwYWJsZUFjdGlvbjp0LlNuYXBwYWJsZUFjdGlvbi5mcm9tUGFydGlhbChlLmFjdGlvbi5zbmFwcGFibGVBY3Rpb24pfSksXCJsZW5zQWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnZvaWQgMCE9PWUuYWN0aW9uPy5sZW5zQWN0aW9uJiZudWxsIT09ZS5hY3Rpb24/LmxlbnNBY3Rpb24mJihuLmFjdGlvbj17JGNhc2U6XCJsZW5zQWN0aW9uXCIsbGVuc0FjdGlvbjp0LkxlbnNBY3Rpb24uZnJvbVBhcnRpYWwoZS5hY3Rpb24ubGVuc0FjdGlvbil9KSxcImNhbWVvT25ib2FyZGluZ0FjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ2b2lkIDAhPT1lLmFjdGlvbj8uY2FtZW9PbmJvYXJkaW5nQWN0aW9uJiZudWxsIT09ZS5hY3Rpb24/LmNhbWVvT25ib2FyZGluZ0FjdGlvbiYmKG4uYWN0aW9uPXskY2FzZTpcImNhbWVvT25ib2FyZGluZ0FjdGlvblwiLGNhbWVvT25ib2FyZGluZ0FjdGlvbjp0LkNhbWVvT25ib2FyZGluZ0FjdGlvbi5mcm9tUGFydGlhbChlLmFjdGlvbi5jYW1lb09uYm9hcmRpbmdBY3Rpb24pfSksXCJib29zdEFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ2b2lkIDAhPT1lLmFjdGlvbj8uYm9vc3RBY3Rpb24mJm51bGwhPT1lLmFjdGlvbj8uYm9vc3RBY3Rpb24mJihuLmFjdGlvbj17JGNhc2U6XCJib29zdEFjdGlvblwiLGJvb3N0QWN0aW9uOnQuQm9vc3RBY3Rpb24uZnJvbVBhcnRpYWwoZS5hY3Rpb24uYm9vc3RBY3Rpb24pfSksXCJwbGFjZVByb2ZpbGVBY3Rpb25cIj09PWUuYWN0aW9uPy4kY2FzZSYmdm9pZCAwIT09ZS5hY3Rpb24/LnBsYWNlUHJvZmlsZUFjdGlvbiYmbnVsbCE9PWUuYWN0aW9uPy5wbGFjZVByb2ZpbGVBY3Rpb24mJihuLmFjdGlvbj17JGNhc2U6XCJwbGFjZVByb2ZpbGVBY3Rpb25cIixwbGFjZVByb2ZpbGVBY3Rpb246dC5QbGFjZVByb2ZpbGVBY3Rpb24uZnJvbVBhcnRpYWwoZS5hY3Rpb24ucGxhY2VQcm9maWxlQWN0aW9uKX0pLFwic2hhcmVBY3Rpb25cIj09PWUuYWN0aW9uPy4kY2FzZSYmdm9pZCAwIT09ZS5hY3Rpb24/LnNoYXJlQWN0aW9uJiZudWxsIT09ZS5hY3Rpb24/LnNoYXJlQWN0aW9uJiYobi5hY3Rpb249eyRjYXNlOlwic2hhcmVBY3Rpb25cIixzaGFyZUFjdGlvbjp0LlNoYXJlQWN0aW9uLmZyb21QYXJ0aWFsKGUuYWN0aW9uLnNoYXJlQWN0aW9uKX0pLFwiZWRpdEFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ2b2lkIDAhPT1lLmFjdGlvbj8uZWRpdEFjdGlvbiYmbnVsbCE9PWUuYWN0aW9uPy5lZGl0QWN0aW9uJiYobi5hY3Rpb249eyRjYXNlOlwiZWRpdEFjdGlvblwiLGVkaXRBY3Rpb246dC5FZGl0QWN0aW9uLmZyb21QYXJ0aWFsKGUuYWN0aW9uLmVkaXRBY3Rpb24pfSksXCJjYW1lcmFWMkFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ2b2lkIDAhPT1lLmFjdGlvbj8uY2FtZXJhVjJBY3Rpb24mJm51bGwhPT1lLmFjdGlvbj8uY2FtZXJhVjJBY3Rpb24mJihuLmFjdGlvbj17JGNhc2U6XCJjYW1lcmFWMkFjdGlvblwiLGNhbWVyYVYyQWN0aW9uOnQuQ2FtZXJhVjJBY3Rpb24uZnJvbVBhcnRpYWwoZS5hY3Rpb24uY2FtZXJhVjJBY3Rpb24pfSksXCJkaXNjb3ZlclByZW1pdW1BY3Rpb25cIj09PWUuYWN0aW9uPy4kY2FzZSYmdm9pZCAwIT09ZS5hY3Rpb24/LmRpc2NvdmVyUHJlbWl1bUFjdGlvbiYmbnVsbCE9PWUuYWN0aW9uPy5kaXNjb3ZlclByZW1pdW1BY3Rpb24mJihuLmFjdGlvbj17JGNhc2U6XCJkaXNjb3ZlclByZW1pdW1BY3Rpb25cIixkaXNjb3ZlclByZW1pdW1BY3Rpb246dC5EaXNjb3ZlclByZW1pdW1BY3Rpb24uZnJvbVBhcnRpYWwoZS5hY3Rpb24uZGlzY292ZXJQcmVtaXVtQWN0aW9uKX0pLFwicmVhZEFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ2b2lkIDAhPT1lLmFjdGlvbj8ucmVhZEFjdGlvbiYmbnVsbCE9PWUuYWN0aW9uPy5yZWFkQWN0aW9uJiYobi5hY3Rpb249eyRjYXNlOlwicmVhZEFjdGlvblwiLHJlYWRBY3Rpb246dC5SZWFkQWN0aW9uLmZyb21QYXJ0aWFsKGUuYWN0aW9uLnJlYWRBY3Rpb24pfSksXCJjcmVhdGl2ZXRvb2xzU3RpY2tlckFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ2b2lkIDAhPT1lLmFjdGlvbj8uY3JlYXRpdmV0b29sc1N0aWNrZXJBY3Rpb24mJm51bGwhPT1lLmFjdGlvbj8uY3JlYXRpdmV0b29sc1N0aWNrZXJBY3Rpb24mJihuLmFjdGlvbj17JGNhc2U6XCJjcmVhdGl2ZXRvb2xzU3RpY2tlckFjdGlvblwiLGNyZWF0aXZldG9vbHNTdGlja2VyQWN0aW9uOnQuQ3JlYXRpdmVUb29sc1N0aWNrZXJBY3Rpb24uZnJvbVBhcnRpYWwoZS5hY3Rpb24uY3JlYXRpdmV0b29sc1N0aWNrZXJBY3Rpb24pfSksXCJhc3Ryb2xvZ3lQcm9maWxlQWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnZvaWQgMCE9PWUuYWN0aW9uPy5hc3Ryb2xvZ3lQcm9maWxlQWN0aW9uJiZudWxsIT09ZS5hY3Rpb24/LmFzdHJvbG9neVByb2ZpbGVBY3Rpb24mJihuLmFjdGlvbj17JGNhc2U6XCJhc3Ryb2xvZ3lQcm9maWxlQWN0aW9uXCIsYXN0cm9sb2d5UHJvZmlsZUFjdGlvbjp0LkFzdHJvbG9neVByb2ZpbGVBY3Rpb24uZnJvbVBhcnRpYWwoZS5hY3Rpb24uYXN0cm9sb2d5UHJvZmlsZUFjdGlvbil9KSxcInRvcGljQWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnZvaWQgMCE9PWUuYWN0aW9uPy50b3BpY0FjdGlvbiYmbnVsbCE9PWUuYWN0aW9uPy50b3BpY0FjdGlvbiYmKG4uYWN0aW9uPXskY2FzZTpcInRvcGljQWN0aW9uXCIsdG9waWNBY3Rpb246dC5Ub3BpY0FjdGlvbi5mcm9tUGFydGlhbChlLmFjdGlvbi50b3BpY0FjdGlvbil9KSxcIndhdGNoU3BvdGxpZ2h0QWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnZvaWQgMCE9PWUuYWN0aW9uPy53YXRjaFNwb3RsaWdodEFjdGlvbiYmbnVsbCE9PWUuYWN0aW9uPy53YXRjaFNwb3RsaWdodEFjdGlvbiYmKG4uYWN0aW9uPXskY2FzZTpcIndhdGNoU3BvdGxpZ2h0QWN0aW9uXCIsd2F0Y2hTcG90bGlnaHRBY3Rpb246dC5XYXRjaFNwb3RsaWdodEFjdGlvbi5mcm9tUGFydGlhbChlLmFjdGlvbi53YXRjaFNwb3RsaWdodEFjdGlvbil9KSxcInNob3dJbmZvQWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnZvaWQgMCE9PWUuYWN0aW9uPy5zaG93SW5mb0FjdGlvbiYmbnVsbCE9PWUuYWN0aW9uPy5zaG93SW5mb0FjdGlvbiYmKG4uYWN0aW9uPXskY2FzZTpcInNob3dJbmZvQWN0aW9uXCIsc2hvd0luZm9BY3Rpb246dC5TaG93SW5mb0FjdGlvbi5mcm9tUGFydGlhbChlLmFjdGlvbi5zaG93SW5mb0FjdGlvbil9KSxcInNvdW5kUHJvZmlsZUFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ2b2lkIDAhPT1lLmFjdGlvbj8uc291bmRQcm9maWxlQWN0aW9uJiZudWxsIT09ZS5hY3Rpb24/LnNvdW5kUHJvZmlsZUFjdGlvbiYmKG4uYWN0aW9uPXskY2FzZTpcInNvdW5kUHJvZmlsZUFjdGlvblwiLHNvdW5kUHJvZmlsZUFjdGlvbjp0LlNvdW5kUHJvZmlsZUFjdGlvbi5mcm9tUGFydGlhbChlLmFjdGlvbi5zb3VuZFByb2ZpbGVBY3Rpb24pfSksXCJhZENvbGxlY3Rpb25JdGVtQWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnZvaWQgMCE9PWUuYWN0aW9uPy5hZENvbGxlY3Rpb25JdGVtQWN0aW9uJiZudWxsIT09ZS5hY3Rpb24/LmFkQ29sbGVjdGlvbkl0ZW1BY3Rpb24mJihuLmFjdGlvbj17JGNhc2U6XCJhZENvbGxlY3Rpb25JdGVtQWN0aW9uXCIsYWRDb2xsZWN0aW9uSXRlbUFjdGlvbjp0LkFkQ29sbGVjdGlvbkl0ZW1BY3Rpb24uZnJvbVBhcnRpYWwoZS5hY3Rpb24uYWRDb2xsZWN0aW9uSXRlbUFjdGlvbil9KSxcIm1lbW9yaWVzRmF2b3JpdGVBY3Rpb25cIj09PWUuYWN0aW9uPy4kY2FzZSYmdm9pZCAwIT09ZS5hY3Rpb24/Lm1lbW9yaWVzRmF2b3JpdGVBY3Rpb24mJm51bGwhPT1lLmFjdGlvbj8ubWVtb3JpZXNGYXZvcml0ZUFjdGlvbiYmKG4uYWN0aW9uPXskY2FzZTpcIm1lbW9yaWVzRmF2b3JpdGVBY3Rpb25cIixtZW1vcmllc0Zhdm9yaXRlQWN0aW9uOnQuTWVtb3JpZXNGYXZvcml0ZUFjdGlvbi5mcm9tUGFydGlhbChlLmFjdGlvbi5tZW1vcmllc0Zhdm9yaXRlQWN0aW9uKX0pLFwic25hcFByb1NlbGZTZXJ2ZUFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ2b2lkIDAhPT1lLmFjdGlvbj8uc25hcFByb1NlbGZTZXJ2ZUFjdGlvbiYmbnVsbCE9PWUuYWN0aW9uPy5zbmFwUHJvU2VsZlNlcnZlQWN0aW9uJiYobi5hY3Rpb249eyRjYXNlOlwic25hcFByb1NlbGZTZXJ2ZUFjdGlvblwiLHNuYXBQcm9TZWxmU2VydmVBY3Rpb246dC5TbmFwUHJvU2VsZlNlcnZlQWN0aW9uLmZyb21QYXJ0aWFsKGUuYWN0aW9uLnNuYXBQcm9TZWxmU2VydmVBY3Rpb24pfSksXCJwb3N0U3RvcnlBY3Rpb25cIj09PWUuYWN0aW9uPy4kY2FzZSYmdm9pZCAwIT09ZS5hY3Rpb24/LnBvc3RTdG9yeUFjdGlvbiYmbnVsbCE9PWUuYWN0aW9uPy5wb3N0U3RvcnlBY3Rpb24mJihuLmFjdGlvbj17JGNhc2U6XCJwb3N0U3RvcnlBY3Rpb25cIixwb3N0U3RvcnlBY3Rpb246dC5Qb3N0U3RvcnlBY3Rpb24uZnJvbVBhcnRpYWwoZS5hY3Rpb24ucG9zdFN0b3J5QWN0aW9uKX0pLFwibGVuc1Byb2ZpbGVBY3Rpb25cIj09PWUuYWN0aW9uPy4kY2FzZSYmdm9pZCAwIT09ZS5hY3Rpb24/LmxlbnNQcm9maWxlQWN0aW9uJiZudWxsIT09ZS5hY3Rpb24/LmxlbnNQcm9maWxlQWN0aW9uJiYobi5hY3Rpb249eyRjYXNlOlwibGVuc1Byb2ZpbGVBY3Rpb25cIixsZW5zUHJvZmlsZUFjdGlvbjp0LkxlbnNQcm9maWxlQWN0aW9uLmZyb21QYXJ0aWFsKGUuYWN0aW9uLmxlbnNQcm9maWxlQWN0aW9uKX0pLFwiYXBwUHJvZmlsZUFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ2b2lkIDAhPT1lLmFjdGlvbj8uYXBwUHJvZmlsZUFjdGlvbiYmbnVsbCE9PWUuYWN0aW9uPy5hcHBQcm9maWxlQWN0aW9uJiYobi5hY3Rpb249eyRjYXNlOlwiYXBwUHJvZmlsZUFjdGlvblwiLGFwcFByb2ZpbGVBY3Rpb246dC5BcHBQcm9maWxlQWN0aW9uLmZyb21QYXJ0aWFsKGUuYWN0aW9uLmFwcFByb2ZpbGVBY3Rpb24pfSksXCJjcmVhdGVBdmF0YXJBY3Rpb25cIj09PWUuYWN0aW9uPy4kY2FzZSYmdm9pZCAwIT09ZS5hY3Rpb24/LmNyZWF0ZUF2YXRhckFjdGlvbiYmbnVsbCE9PWUuYWN0aW9uPy5jcmVhdGVBdmF0YXJBY3Rpb24mJihuLmFjdGlvbj17JGNhc2U6XCJjcmVhdGVBdmF0YXJBY3Rpb25cIixjcmVhdGVBdmF0YXJBY3Rpb246dC5DcmVhdGVBdmF0YXJBY3Rpb24uZnJvbVBhcnRpYWwoZS5hY3Rpb24uY3JlYXRlQXZhdGFyQWN0aW9uKX0pLFwiYml0bW9qaVN0aWNrZXJBY3Rpb25cIj09PWUuYWN0aW9uPy4kY2FzZSYmdm9pZCAwIT09ZS5hY3Rpb24/LmJpdG1vamlTdGlja2VyQWN0aW9uJiZudWxsIT09ZS5hY3Rpb24/LmJpdG1vamlTdGlja2VyQWN0aW9uJiYobi5hY3Rpb249eyRjYXNlOlwiYml0bW9qaVN0aWNrZXJBY3Rpb25cIixiaXRtb2ppU3RpY2tlckFjdGlvbjp0LkJpdG1vamlTdGlja2VyVW5sb2NrQWN0aW9uLmZyb21QYXJ0aWFsKGUuYWN0aW9uLmJpdG1vamlTdGlja2VyQWN0aW9uKX0pLFwiY29tbWVyY2VBY3Rpb25cIj09PWUuYWN0aW9uPy4kY2FzZSYmdm9pZCAwIT09ZS5hY3Rpb24/LmNvbW1lcmNlQWN0aW9uJiZudWxsIT09ZS5hY3Rpb24/LmNvbW1lcmNlQWN0aW9uJiYobi5hY3Rpb249eyRjYXNlOlwiY29tbWVyY2VBY3Rpb25cIixjb21tZXJjZUFjdGlvbjp0LkNvbW1lcmNlQWN0aW9uLmZyb21QYXJ0aWFsKGUuYWN0aW9uLmNvbW1lcmNlQWN0aW9uKX0pLFwicG9sbEFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ2b2lkIDAhPT1lLmFjdGlvbj8ucG9sbEFjdGlvbiYmbnVsbCE9PWUuYWN0aW9uPy5wb2xsQWN0aW9uJiYobi5hY3Rpb249eyRjYXNlOlwicG9sbEFjdGlvblwiLHBvbGxBY3Rpb246dC5Qb2xsQWN0aW9uLmZyb21QYXJ0aWFsKGUuYWN0aW9uLnBvbGxBY3Rpb24pfSksXCJyZW1peEFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ2b2lkIDAhPT1lLmFjdGlvbj8ucmVtaXhBY3Rpb24mJm51bGwhPT1lLmFjdGlvbj8ucmVtaXhBY3Rpb24mJihuLmFjdGlvbj17JGNhc2U6XCJyZW1peEFjdGlvblwiLHJlbWl4QWN0aW9uOnQuUmVtaXhBY3Rpb24uZnJvbVBhcnRpYWwoZS5hY3Rpb24ucmVtaXhBY3Rpb24pfSksXCJ0cmVuZGluZ1RvcGljc0FjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ2b2lkIDAhPT1lLmFjdGlvbj8udHJlbmRpbmdUb3BpY3NBY3Rpb24mJm51bGwhPT1lLmFjdGlvbj8udHJlbmRpbmdUb3BpY3NBY3Rpb24mJihuLmFjdGlvbj17JGNhc2U6XCJ0cmVuZGluZ1RvcGljc0FjdGlvblwiLHRyZW5kaW5nVG9waWNzQWN0aW9uOnQuVHJlbmRpbmdUb3BpY3NBY3Rpb24uZnJvbVBhcnRpYWwoZS5hY3Rpb24udHJlbmRpbmdUb3BpY3NBY3Rpb24pfSksXCJjb21tZW50c0FjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ2b2lkIDAhPT1lLmFjdGlvbj8uY29tbWVudHNBY3Rpb24mJm51bGwhPT1lLmFjdGlvbj8uY29tbWVudHNBY3Rpb24mJihuLmFjdGlvbj17JGNhc2U6XCJjb21tZW50c0FjdGlvblwiLGNvbW1lbnRzQWN0aW9uOnQuQ29tbWVudHNBY3Rpb24uZnJvbVBhcnRpYWwoZS5hY3Rpb24uY29tbWVudHNBY3Rpb24pfSksXCJ1bmlmaWVkUHVibGljUHJvZmlsZUFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ2b2lkIDAhPT1lLmFjdGlvbj8udW5pZmllZFB1YmxpY1Byb2ZpbGVBY3Rpb24mJm51bGwhPT1lLmFjdGlvbj8udW5pZmllZFB1YmxpY1Byb2ZpbGVBY3Rpb24mJihuLmFjdGlvbj17JGNhc2U6XCJ1bmlmaWVkUHVibGljUHJvZmlsZUFjdGlvblwiLHVuaWZpZWRQdWJsaWNQcm9maWxlQWN0aW9uOnQuVW5pZmllZFB1YmxpY1Byb2ZpbGVBY3Rpb24uZnJvbVBhcnRpYWwoZS5hY3Rpb24udW5pZmllZFB1YmxpY1Byb2ZpbGVBY3Rpb24pfSksXCJjaGVlcmlvc0FjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ2b2lkIDAhPT1lLmFjdGlvbj8uY2hlZXJpb3NBY3Rpb24mJm51bGwhPT1lLmFjdGlvbj8uY2hlZXJpb3NBY3Rpb24mJihuLmFjdGlvbj17JGNhc2U6XCJjaGVlcmlvc0FjdGlvblwiLGNoZWVyaW9zQWN0aW9uOnQuQ2hlZXJpb3NBY3Rpb24uZnJvbVBhcnRpYWwoZS5hY3Rpb24uY2hlZXJpb3NBY3Rpb24pfSksXCJjYW1lcmFTaG9ydGN1dEFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ2b2lkIDAhPT1lLmFjdGlvbj8uY2FtZXJhU2hvcnRjdXRBY3Rpb24mJm51bGwhPT1lLmFjdGlvbj8uY2FtZXJhU2hvcnRjdXRBY3Rpb24mJihuLmFjdGlvbj17JGNhc2U6XCJjYW1lcmFTaG9ydGN1dEFjdGlvblwiLGNhbWVyYVNob3J0Y3V0QWN0aW9uOnQuQ2FtZXJhU2hvcnRjdXRBY3Rpb24uZnJvbVBhcnRpYWwoZS5hY3Rpb24uY2FtZXJhU2hvcnRjdXRBY3Rpb24pfSksXCJzbmFwS2l0SWRlbnRpdHlXZWJWaWV3QWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnZvaWQgMCE9PWUuYWN0aW9uPy5zbmFwS2l0SWRlbnRpdHlXZWJWaWV3QWN0aW9uJiZudWxsIT09ZS5hY3Rpb24/LnNuYXBLaXRJZGVudGl0eVdlYlZpZXdBY3Rpb24mJihuLmFjdGlvbj17JGNhc2U6XCJzbmFwS2l0SWRlbnRpdHlXZWJWaWV3QWN0aW9uXCIsc25hcEtpdElkZW50aXR5V2ViVmlld0FjdGlvbjp0LlNuYXBLaXRJZGVudGl0eVdlYlZpZXdBY3Rpb24uZnJvbVBhcnRpYWwoZS5hY3Rpb24uc25hcEtpdElkZW50aXR5V2ViVmlld0FjdGlvbil9KSxcImRpc2NvdmVyU3Vic2NyaXB0aW9uQWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnZvaWQgMCE9PWUuYWN0aW9uPy5kaXNjb3ZlclN1YnNjcmlwdGlvbkFjdGlvbiYmbnVsbCE9PWUuYWN0aW9uPy5kaXNjb3ZlclN1YnNjcmlwdGlvbkFjdGlvbiYmKG4uYWN0aW9uPXskY2FzZTpcImRpc2NvdmVyU3Vic2NyaXB0aW9uQWN0aW9uXCIsZGlzY292ZXJTdWJzY3JpcHRpb25BY3Rpb246dC5EaXNjb3ZlclN1YnNjcmlwdGlvbkFjdGlvbi5mcm9tUGFydGlhbChlLmFjdGlvbi5kaXNjb3ZlclN1YnNjcmlwdGlvbkFjdGlvbil9KSxcIm1hbnVhbEZyaWVuZFNlbGVjdGlvbkFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ2b2lkIDAhPT1lLmFjdGlvbj8ubWFudWFsRnJpZW5kU2VsZWN0aW9uQWN0aW9uJiZudWxsIT09ZS5hY3Rpb24/Lm1hbnVhbEZyaWVuZFNlbGVjdGlvbkFjdGlvbiYmKG4uYWN0aW9uPXskY2FzZTpcIm1hbnVhbEZyaWVuZFNlbGVjdGlvbkFjdGlvblwiLG1hbnVhbEZyaWVuZFNlbGVjdGlvbkFjdGlvbjp0Lk1hbnVhbEZyaWVuZFNlbGVjdGlvbkFjdGlvbi5mcm9tUGFydGlhbChlLmFjdGlvbi5tYW51YWxGcmllbmRTZWxlY3Rpb25BY3Rpb24pfSksXCJzbmFwS2l0SW52aXRlT3BlbkFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ2b2lkIDAhPT1lLmFjdGlvbj8uc25hcEtpdEludml0ZU9wZW5BY3Rpb24mJm51bGwhPT1lLmFjdGlvbj8uc25hcEtpdEludml0ZU9wZW5BY3Rpb24mJihuLmFjdGlvbj17JGNhc2U6XCJzbmFwS2l0SW52aXRlT3BlbkFjdGlvblwiLHNuYXBLaXRJbnZpdGVPcGVuQWN0aW9uOnQuU25hcEtpdEludml0ZU9wZW5BY3Rpb24uZnJvbVBhcnRpYWwoZS5hY3Rpb24uc25hcEtpdEludml0ZU9wZW5BY3Rpb24pfSksXCJxdWVzdGlvblN0aWNrZXJBY3Rpb25cIj09PWUuYWN0aW9uPy4kY2FzZSYmdm9pZCAwIT09ZS5hY3Rpb24/LnF1ZXN0aW9uU3RpY2tlckFjdGlvbiYmbnVsbCE9PWUuYWN0aW9uPy5xdWVzdGlvblN0aWNrZXJBY3Rpb24mJihuLmFjdGlvbj17JGNhc2U6XCJxdWVzdGlvblN0aWNrZXJBY3Rpb25cIixxdWVzdGlvblN0aWNrZXJBY3Rpb246dC5RdWVzdGlvblN0aWNrZXJBY3Rpb24uZnJvbVBhcnRpYWwoZS5hY3Rpb24ucXVlc3Rpb25TdGlja2VyQWN0aW9uKX0pLFwic2NyZWVuc2hvcEFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ2b2lkIDAhPT1lLmFjdGlvbj8uc2NyZWVuc2hvcEFjdGlvbiYmbnVsbCE9PWUuYWN0aW9uPy5zY3JlZW5zaG9wQWN0aW9uJiYobi5hY3Rpb249eyRjYXNlOlwic2NyZWVuc2hvcEFjdGlvblwiLHNjcmVlbnNob3BBY3Rpb246dC5TY3JlZW5zaG9wQWN0aW9uLmZyb21QYXJ0aWFsKGUuYWN0aW9uLnNjcmVlbnNob3BBY3Rpb24pfSksXCJzYXZlQWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnZvaWQgMCE9PWUuYWN0aW9uPy5zYXZlQWN0aW9uJiZudWxsIT09ZS5hY3Rpb24/LnNhdmVBY3Rpb24mJihuLmFjdGlvbj17JGNhc2U6XCJzYXZlQWN0aW9uXCIsc2F2ZUFjdGlvbjp0LlNhdmVBY3Rpb24uZnJvbVBhcnRpYWwoZS5hY3Rpb24uc2F2ZUFjdGlvbil9KSxcImNvbnRleHRRc2lBY3Rpb25cIj09PWUuYWN0aW9uPy4kY2FzZSYmdm9pZCAwIT09ZS5hY3Rpb24/LmNvbnRleHRRc2lBY3Rpb24mJm51bGwhPT1lLmFjdGlvbj8uY29udGV4dFFzaUFjdGlvbiYmKG4uYWN0aW9uPXskY2FzZTpcImNvbnRleHRRc2lBY3Rpb25cIixjb250ZXh0UXNpQWN0aW9uOnQuQ29udGV4dFFTSUFjdGlvbi5mcm9tUGFydGlhbChlLmFjdGlvbi5jb250ZXh0UXNpQWN0aW9uKX0pLFwib3BlblNlYXJjaFRhYlwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ2b2lkIDAhPT1lLmFjdGlvbj8ub3BlblNlYXJjaFRhYiYmbnVsbCE9PWUuYWN0aW9uPy5vcGVuU2VhcmNoVGFiJiYobi5hY3Rpb249eyRjYXNlOlwib3BlblNlYXJjaFRhYlwiLG9wZW5TZWFyY2hUYWI6dC5PcGVuU2VhcmNoQ2hhdFRhYi5mcm9tUGFydGlhbChlLmFjdGlvbi5vcGVuU2VhcmNoVGFiKX0pLFwiY29tbWVyY2VNdWx0aU1lcmNoYW50QWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnZvaWQgMCE9PWUuYWN0aW9uPy5jb21tZXJjZU11bHRpTWVyY2hhbnRBY3Rpb24mJm51bGwhPT1lLmFjdGlvbj8uY29tbWVyY2VNdWx0aU1lcmNoYW50QWN0aW9uJiYobi5hY3Rpb249eyRjYXNlOlwiY29tbWVyY2VNdWx0aU1lcmNoYW50QWN0aW9uXCIsY29tbWVyY2VNdWx0aU1lcmNoYW50QWN0aW9uOnQuQ29tbWVyY2VNdWx0aU1lcmNoYW50QWN0aW9uLmZyb21QYXJ0aWFsKGUuYWN0aW9uLmNvbW1lcmNlTXVsdGlNZXJjaGFudEFjdGlvbil9KSxcIm9wZW5DYW1lcmFSb2xsXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnZvaWQgMCE9PWUuYWN0aW9uPy5vcGVuQ2FtZXJhUm9sbCYmbnVsbCE9PWUuYWN0aW9uPy5vcGVuQ2FtZXJhUm9sbCYmKG4uYWN0aW9uPXskY2FzZTpcIm9wZW5DYW1lcmFSb2xsXCIsb3BlbkNhbWVyYVJvbGw6dC5PcGVuQ2FtZXJhUm9sbC5mcm9tUGFydGlhbChlLmFjdGlvbi5vcGVuQ2FtZXJhUm9sbCl9KSxcImR3ZWJVcHNlbGxBY3Rpb25cIj09PWUuYWN0aW9uPy4kY2FzZSYmdm9pZCAwIT09ZS5hY3Rpb24/LmR3ZWJVcHNlbGxBY3Rpb24mJm51bGwhPT1lLmFjdGlvbj8uZHdlYlVwc2VsbEFjdGlvbiYmKG4uYWN0aW9uPXskY2FzZTpcImR3ZWJVcHNlbGxBY3Rpb25cIixkd2ViVXBzZWxsQWN0aW9uOnQuRHdlYlVwc2VsbEFjdGlvbi5mcm9tUGFydGlhbChlLmFjdGlvbi5kd2ViVXBzZWxsQWN0aW9uKX0pLFwiY3RJdGVtQWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnZvaWQgMCE9PWUuYWN0aW9uPy5jdEl0ZW1BY3Rpb24mJm51bGwhPT1lLmFjdGlvbj8uY3RJdGVtQWN0aW9uJiYobi5hY3Rpb249eyRjYXNlOlwiY3RJdGVtQWN0aW9uXCIsY3RJdGVtQWN0aW9uOnQuQ1RJdGVtQWN0aW9uLmZyb21QYXJ0aWFsKGUuYWN0aW9uLmN0SXRlbUFjdGlvbil9KSxcImRlZXBsaW5rU3RpY2tlckFjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ2b2lkIDAhPT1lLmFjdGlvbj8uZGVlcGxpbmtTdGlja2VyQWN0aW9uJiZudWxsIT09ZS5hY3Rpb24/LmRlZXBsaW5rU3RpY2tlckFjdGlvbiYmKG4uYWN0aW9uPXskY2FzZTpcImRlZXBsaW5rU3RpY2tlckFjdGlvblwiLGRlZXBsaW5rU3RpY2tlckFjdGlvbjp0LkRlZXBsaW5rU3RpY2tlckFjdGlvbi5mcm9tUGFydGlhbChlLmFjdGlvbi5kZWVwbGlua1N0aWNrZXJBY3Rpb24pfSksXCJzY2FuQWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnZvaWQgMCE9PWUuYWN0aW9uPy5zY2FuQWN0aW9uJiZudWxsIT09ZS5hY3Rpb24/LnNjYW5BY3Rpb24mJihuLmFjdGlvbj17JGNhc2U6XCJzY2FuQWN0aW9uXCIsc2NhbkFjdGlvbjp0LlNjYW5BY3Rpb24uZnJvbVBhcnRpYWwoZS5hY3Rpb24uc2NhbkFjdGlvbil9KSxcImJpdG1vamlWaWV3T3V0Zml0QWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnZvaWQgMCE9PWUuYWN0aW9uPy5iaXRtb2ppVmlld091dGZpdEFjdGlvbiYmbnVsbCE9PWUuYWN0aW9uPy5iaXRtb2ppVmlld091dGZpdEFjdGlvbiYmKG4uYWN0aW9uPXskY2FzZTpcImJpdG1vamlWaWV3T3V0Zml0QWN0aW9uXCIsYml0bW9qaVZpZXdPdXRmaXRBY3Rpb246dC5CaXRtb2ppVmlld091dGZpdEFjdGlvbi5mcm9tUGFydGlhbChlLmFjdGlvbi5iaXRtb2ppVmlld091dGZpdEFjdGlvbil9KSxcInNob3dTbmFwQWN0aW9uXCI9PT1lLmFjdGlvbj8uJGNhc2UmJnZvaWQgMCE9PWUuYWN0aW9uPy5zaG93U25hcEFjdGlvbiYmbnVsbCE9PWUuYWN0aW9uPy5zaG93U25hcEFjdGlvbiYmKG4uYWN0aW9uPXskY2FzZTpcInNob3dTbmFwQWN0aW9uXCIsc2hvd1NuYXBBY3Rpb246dC5TaG93U25hcEFjdGlvbi5mcm9tUGFydGlhbChlLmFjdGlvbi5zaG93U25hcEFjdGlvbil9KSxcInJlbWl4ZXNUb3BpY0FjdGlvblwiPT09ZS5hY3Rpb24/LiRjYXNlJiZ2b2lkIDAhPT1lLmFjdGlvbj8ucmVtaXhlc1RvcGljQWN0aW9uJiZudWxsIT09ZS5hY3Rpb24/LnJlbWl4ZXNUb3BpY0FjdGlvbiYmKG4uYWN0aW9uPXskY2FzZTpcInJlbWl4ZXNUb3BpY0FjdGlvblwiLHJlbWl4ZXNUb3BpY0FjdGlvbjp0LlJlbWl4ZXNUb3BpY0FjdGlvbi5mcm9tUGFydGlhbChlLmFjdGlvbi5yZW1peGVzVG9waWNBY3Rpb24pfSksXCJmcmllbmRBZGRBY3Rpb25cIj09PWUuYWN0aW9uPy4kY2FzZSYmdm9pZCAwIT09ZS5hY3Rpb24/LmZyaWVuZEFkZEFjdGlvbiYmbnVsbCE9PWUuYWN0aW9uPy5mcmllbmRBZGRBY3Rpb24mJihuLmFjdGlvbj17JGNhc2U6XCJmcmllbmRBZGRBY3Rpb25cIixmcmllbmRBZGRBY3Rpb246dC5GcmllbmRBZGRBY3Rpb24uZnJvbVBhcnRpYWwoZS5hY3Rpb24uZnJpZW5kQWRkQWN0aW9uKX0pLG59fSxtLmRlZmF1bHQudXRpbC5Mb25nIT09by5kZWZhdWx0JiYobS5kZWZhdWx0LnV0aWwuTG9uZz1vLmRlZmF1bHQsbS5kZWZhdWx0LmNvbmZpZ3VyZSgpKX0sMjkyNDY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuU3BlZWRNb2RlPXQuR3JlZW5TY3JlZW49dC5EdWFsQ2FtZXJhPXQuRGlyZWN0b3JNb2RlPXQuVGltZWxpbmU9dC5TcGVlZE1vZGVfU3BlZWRUeXBlPXQuRHVhbENhbWVyYV9MYXlvdXRUeXBlPXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO3ZhciBvLGE7KGE9dC5EdWFsQ2FtZXJhX0xheW91dFR5cGV8fCh0LkR1YWxDYW1lcmFfTGF5b3V0VHlwZT17fSkpW2EuTEFZT1VUX1RZUEVfVkVSVElDQUxfQVNfVU5TRVQ9MF09XCJMQVlPVVRfVFlQRV9WRVJUSUNBTF9BU19VTlNFVFwiLGFbYS5MQVlPVVRfVFlQRV9IT1JJWk9OVEFMPTFdPVwiTEFZT1VUX1RZUEVfSE9SSVpPTlRBTFwiLGFbYS5MQVlPVVRfVFlQRV9QSUNUVVJFX0lOX1BJQ1RVUkU9Ml09XCJMQVlPVVRfVFlQRV9QSUNUVVJFX0lOX1BJQ1RVUkVcIixhW2EuTEFZT1VUX1RZUEVfQ1VUT1VUPTNdPVwiTEFZT1VUX1RZUEVfQ1VUT1VUXCIsYVthLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwobz10LlNwZWVkTW9kZV9TcGVlZFR5cGV8fCh0LlNwZWVkTW9kZV9TcGVlZFR5cGU9e30pKVtvLlNQRUVEX1RZUEVfU0xPV19BU19VTlNFVD0wXT1cIlNQRUVEX1RZUEVfU0xPV19BU19VTlNFVFwiLG9bby5TUEVFRF9UWVBFX05PUk1BTD0xXT1cIlNQRUVEX1RZUEVfTk9STUFMXCIsb1tvLlNQRUVEX1RZUEVfRkFTVD0yXT1cIlNQRUVEX1RZUEVfRkFTVFwiLG9bby5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsdC5UaW1lbGluZT17ZW5jb2RlKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKX0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7bi5za2lwVHlwZSg3JmUpfXJldHVybnt9fSxmcm9tUGFydGlhbDplPT4oe30pfSx0LkRpcmVjdG9yTW9kZT17ZW5jb2RlKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKX0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7bi5za2lwVHlwZSg3JmUpfXJldHVybnt9fSxmcm9tUGFydGlhbDplPT4oe30pfSx0LkR1YWxDYW1lcmE9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUubGF5b3V0VHlwZSYmdC51aW50MzIoOCkuaW50MzIoZS5sYXlvdXRUeXBlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e2xheW91dFR5cGU6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP28ubGF5b3V0VHlwZT1uLmludDMyKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtsYXlvdXRUeXBlOjB9O3JldHVybiB0LmxheW91dFR5cGU9ZS5sYXlvdXRUeXBlPz8wLHR9fSx0LkdyZWVuU2NyZWVuPXtlbmNvZGUoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpfSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtuLnNraXBUeXBlKDcmZSl9cmV0dXJue319LGZyb21QYXJ0aWFsOmU9Pih7fSl9LHQuU3BlZWRNb2RlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLnNwZWVkVHlwZSYmdC51aW50MzIoOCkuaW50MzIoZS5zcGVlZFR5cGUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17c3BlZWRUeXBlOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9vLnNwZWVkVHlwZT1uLmludDMyKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtzcGVlZFR5cGU6MH07cmV0dXJuIHQuc3BlZWRUeXBlPWUuc3BlZWRUeXBlPz8wLHR9fX0sODA3MjQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRW5jcnlwdGVkTWVkaWE9dm9pZCAwO2NvbnN0IGk9cihuKDYyMTAwKSk7ZnVuY3Rpb24gbygpe3JldHVybntjb250ZW50VXJsOlwiXCIsZW5jS2V5Om5ldyBVaW50OEFycmF5LGVuY0l2Om5ldyBVaW50OEFycmF5fX10LkVuY3J5cHRlZE1lZGlhPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUuY29udGVudFVybCYmdC51aW50MzIoMTApLnN0cmluZyhlLmNvbnRlbnRVcmwpLDAhPT1lLmVuY0tleS5sZW5ndGgmJnQudWludDMyKDE4KS5ieXRlcyhlLmVuY0tleSksMCE9PWUuZW5jSXYubGVuZ3RoJiZ0LnVpbnQzMigyNikuYnl0ZXMoZS5lbmNJdiksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBhPW8oKTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS5jb250ZW50VXJsPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmEuZW5jS2V5PW4uYnl0ZXMoKTticmVhaztjYXNlIDM6YS5lbmNJdj1uLmJ5dGVzKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PW8oKTtyZXR1cm4gdC5jb250ZW50VXJsPWUuY29udGVudFVybD8/XCJcIix0LmVuY0tleT1lLmVuY0tleT8/bmV3IFVpbnQ4QXJyYXksdC5lbmNJdj1lLmVuY0l2Pz9uZXcgVWludDhBcnJheSx0fX19LDEyODcwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkFwcFZlcnNpb25fVmVyc2lvbk51bWJlcj10LkFwcFZlcnNpb249dC5BcHBWZXJzaW9uX0ZsYXZvcj10Lk9zVHlwZT12b2lkIDA7Y29uc3QgaT1yKG4oNjIxMDApKTt2YXIgbyxhOyhhPXQuT3NUeXBlfHwodC5Pc1R5cGU9e30pKVthLlVOS05PV05fT1NfVFlQRT0wXT1cIlVOS05PV05fT1NfVFlQRVwiLGFbYS5PU19JT1M9MV09XCJPU19JT1NcIixhW2EuT1NfQU5EUk9JRD0yXT1cIk9TX0FORFJPSURcIixhW2EuT1NfV0VCPTNdPVwiT1NfV0VCXCIsYVthLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwobz10LkFwcFZlcnNpb25fRmxhdm9yfHwodC5BcHBWZXJzaW9uX0ZsYXZvcj17fSkpW28uVU5LTk9XTj0wXT1cIlVOS05PV05cIixvW28uREVCVUc9MV09XCJERUJVR1wiLG9bby5NQVNURVI9Ml09XCJNQVNURVJcIixvW28uQUxQSEE9M109XCJBTFBIQVwiLG9bby5QUk9EVUNUSU9OPTRdPVwiUFJPRFVDVElPTlwiLG9bby5CRVRBPTVdPVwiQkVUQVwiLG9bby5HT0xEPTZdPVwiR09MRFwiLG9bby5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsdC5BcHBWZXJzaW9uPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUudmVyc2lvbk51bWJlciYmdC5BcHBWZXJzaW9uX1ZlcnNpb25OdW1iZXIuZW5jb2RlKGUudmVyc2lvbk51bWJlcixuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS5mbGF2b3ImJm4udWludDMyKDE2KS5pbnQzMihlLmZsYXZvciksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBvPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBhPXt2ZXJzaW9uTnVtYmVyOnZvaWQgMCxmbGF2b3I6MH07Zm9yKDtyLnBvczxvOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmEudmVyc2lvbk51bWJlcj10LkFwcFZlcnNpb25fVmVyc2lvbk51bWJlci5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDI6YS5mbGF2b3I9ci5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17dmVyc2lvbk51bWJlcjp2b2lkIDAsZmxhdm9yOjB9O3JldHVybiBuLnZlcnNpb25OdW1iZXI9dm9pZCAwIT09ZS52ZXJzaW9uTnVtYmVyJiZudWxsIT09ZS52ZXJzaW9uTnVtYmVyP3QuQXBwVmVyc2lvbl9WZXJzaW9uTnVtYmVyLmZyb21QYXJ0aWFsKGUudmVyc2lvbk51bWJlcik6dm9pZCAwLG4uZmxhdm9yPWUuZmxhdm9yPz8wLG59fSx0LkFwcFZlcnNpb25fVmVyc2lvbk51bWJlcj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5tYWpvciYmdC51aW50MzIoOCkuaW50MzIoZS5tYWpvciksMCE9PWUubWlub3ImJnQudWludDMyKDE2KS5pbnQzMihlLm1pbm9yKSwwIT09ZS5wYXRjaCYmdC51aW50MzIoMjQpLmludDMyKGUucGF0Y2gpLDAhPT1lLmJ1aWxkJiZ0LnVpbnQzMigzMikuaW50MzIoZS5idWlsZCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXttYWpvcjowLG1pbm9yOjAscGF0Y2g6MCxidWlsZDowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5tYWpvcj1uLmludDMyKCk7YnJlYWs7Y2FzZSAyOm8ubWlub3I9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMzpvLnBhdGNoPW4uaW50MzIoKTticmVhaztjYXNlIDQ6by5idWlsZD1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXttYWpvcjowLG1pbm9yOjAscGF0Y2g6MCxidWlsZDowfTtyZXR1cm4gdC5tYWpvcj1lLm1ham9yPz8wLHQubWlub3I9ZS5taW5vcj8/MCx0LnBhdGNoPWUucGF0Y2g/PzAsdC5idWlsZD1lLmJ1aWxkPz8wLHR9fX0sMjU3OTk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ29kZVByb3BlcnRpZXM9dC5Db2RlPXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO3ZhciBvOyhvPXQuQ29kZXx8KHQuQ29kZT17fSkpW28uT0s9MF09XCJPS1wiLG9bby5DQU5DRUxMRUQ9MV09XCJDQU5DRUxMRURcIixvW28uVU5LTk9XTj0yXT1cIlVOS05PV05cIixvW28uSU5WQUxJRF9BUkdVTUVOVD0zXT1cIklOVkFMSURfQVJHVU1FTlRcIixvW28uREVBRExJTkVfRVhDRUVERUQ9NF09XCJERUFETElORV9FWENFRURFRFwiLG9bby5OT1RfRk9VTkQ9NV09XCJOT1RfRk9VTkRcIixvW28uQUxSRUFEWV9FWElTVFM9Nl09XCJBTFJFQURZX0VYSVNUU1wiLG9bby5QRVJNSVNTSU9OX0RFTklFRD03XT1cIlBFUk1JU1NJT05fREVOSUVEXCIsb1tvLlVOQVVUSEVOVElDQVRFRD0xNl09XCJVTkFVVEhFTlRJQ0FURURcIixvW28uUkVTT1VSQ0VfRVhIQVVTVEVEPThdPVwiUkVTT1VSQ0VfRVhIQVVTVEVEXCIsb1tvLkZBSUxFRF9QUkVDT05ESVRJT049OV09XCJGQUlMRURfUFJFQ09ORElUSU9OXCIsb1tvLkFCT1JURUQ9MTBdPVwiQUJPUlRFRFwiLG9bby5PVVRfT0ZfUkFOR0U9MTFdPVwiT1VUX09GX1JBTkdFXCIsb1tvLlVOSU1QTEVNRU5URUQ9MTJdPVwiVU5JTVBMRU1FTlRFRFwiLG9bby5JTlRFUk5BTD0xM109XCJJTlRFUk5BTFwiLG9bby5VTkFWQUlMQUJMRT0xNF09XCJVTkFWQUlMQUJMRVwiLG9bby5EQVRBX0xPU1M9MTVdPVwiREFUQV9MT1NTXCIsb1tvLk5PVF9NT0RJRklFRD0xMDBdPVwiTk9UX01PRElGSUVEXCIsb1tvLkRFQ1JZUFRJT05fRkFJTEVEPTEwMV09XCJERUNSWVBUSU9OX0ZBSUxFRFwiLG9bby5JTlZBTElEX01FRElBPTEwMl09XCJJTlZBTElEX01FRElBXCIsb1tvLklOX1BST0dSRVNTPTIwMF09XCJJTl9QUk9HUkVTU1wiLG9bby5DT05URU5UX1RPT19MQVJHRT0yMDFdPVwiQ09OVEVOVF9UT09fTEFSR0VcIixvW28uVVJMX1BST1RPQ09MX05PVF9TVVBQT1JURUQ9MjAyXT1cIlVSTF9QUk9UT0NPTF9OT1RfU1VQUE9SVEVEXCIsb1tvLlVSTF9DT05URU5UX1RZUEVfTk9UX1dISVRFTElTVEVEPTIwM109XCJVUkxfQ09OVEVOVF9UWVBFX05PVF9XSElURUxJU1RFRFwiLG9bby5VUkxfRE9XTkxPQURfRkFJTFVSRT0yMDRdPVwiVVJMX0RPV05MT0FEX0ZBSUxVUkVcIixvW28uQ0xPVURfU1RPUkFHRV9GQUlMVVJFPTIwNV09XCJDTE9VRF9TVE9SQUdFX0ZBSUxVUkVcIixvW28uVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLHQuQ29kZVByb3BlcnRpZXM9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUuZXJyb3JDb2RlJiZ0LnVpbnQzMig4KS51aW50MzIoZS5lcnJvckNvZGUpLFwiXCIhPT1lLmVycm9yRGVzY3JpcHRpb24mJnQudWludDMyKDE4KS5zdHJpbmcoZS5lcnJvckRlc2NyaXB0aW9uKSwhMD09PWUuaXNSZXRyeWFibGUmJnQudWludDMyKDI0KS5ib29sKGUuaXNSZXRyeWFibGUpLFwiXCIhPT1lLnNvdXJjZSYmdC51aW50MzIoMzQpLnN0cmluZyhlLnNvdXJjZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXtlcnJvckNvZGU6MCxlcnJvckRlc2NyaXB0aW9uOlwiXCIsaXNSZXRyeWFibGU6ITEsc291cmNlOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLmVycm9yQ29kZT1uLnVpbnQzMigpO2JyZWFrO2Nhc2UgMjpvLmVycm9yRGVzY3JpcHRpb249bi5zdHJpbmcoKTticmVhaztjYXNlIDM6by5pc1JldHJ5YWJsZT1uLmJvb2woKTticmVhaztjYXNlIDQ6by5zb3VyY2U9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2Vycm9yQ29kZTowLGVycm9yRGVzY3JpcHRpb246XCJcIixpc1JldHJ5YWJsZTohMSxzb3VyY2U6XCJcIn07cmV0dXJuIHQuZXJyb3JDb2RlPWUuZXJyb3JDb2RlPz8wLHQuZXJyb3JEZXNjcmlwdGlvbj1lLmVycm9yRGVzY3JpcHRpb24/P1wiXCIsdC5pc1JldHJ5YWJsZT1lLmlzUmV0cnlhYmxlPz8hMSx0LnNvdXJjZT1lLnNvdXJjZT8/XCJcIix0fX19LDUxNTk4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlVVSUQ9dm9pZCAwO2NvbnN0IGk9cihuKDQxNTgzKSksbz1yKG4oNjIxMDApKTtmdW5jdGlvbiBhKGUpe3JldHVybiBlLnRvU3RyaW5nKCl9dC5VVUlEPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCIwXCIhPT1lLmhpZ2hCaXRzJiZ0LnVpbnQzMig5KS5maXhlZDY0KGUuaGlnaEJpdHMpLFwiMFwiIT09ZS5sb3dCaXRzJiZ0LnVpbnQzMigxNykuZml4ZWQ2NChlLmxvd0JpdHMpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17aGlnaEJpdHM6XCIwXCIsbG93Qml0czpcIjBcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuaGlnaEJpdHM9YShuLmZpeGVkNjQoKSk7YnJlYWs7Y2FzZSAyOmkubG93Qml0cz1hKG4uZml4ZWQ2NCgpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2hpZ2hCaXRzOlwiMFwiLGxvd0JpdHM6XCIwXCJ9O3JldHVybiB0LmhpZ2hCaXRzPWUuaGlnaEJpdHM/P1wiMFwiLHQubG93Qml0cz1lLmxvd0JpdHM/P1wiMFwiLHR9fSxvLmRlZmF1bHQudXRpbC5Mb25nIT09aS5kZWZhdWx0JiYoby5kZWZhdWx0LnV0aWwuTG9uZz1pLmRlZmF1bHQsby5kZWZhdWx0LmNvbmZpZ3VyZSgpKX0sMTAyODk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQXV0b0NhcHRpb25zPXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO3QuQXV0b0NhcHRpb25zPXtlbmNvZGUoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpfSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtuLnNraXBUeXBlKDcmZSl9cmV0dXJue319LGZyb21QYXJ0aWFsOmU9Pih7fSl9fSwyMjc0NzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5CaXRtb2ppU3RpY2tlcj10LkJpdG1vamlTdGlja2VyX1R5cGU9dm9pZCAwO2NvbnN0IGk9cihuKDYyMTAwKSk7dmFyIG87KG89dC5CaXRtb2ppU3RpY2tlcl9UeXBlfHwodC5CaXRtb2ppU3RpY2tlcl9UeXBlPXt9KSlbby5TT0xPTU9KST0wXT1cIlNPTE9NT0pJXCIsb1tvLkZSSUVORE1PSkk9MV09XCJGUklFTkRNT0pJXCIsb1tvLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0LkJpdG1vamlTdGlja2VyPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUuY29taWNJZCYmdC51aW50MzIoMTApLnN0cmluZyhlLmNvbWljSWQpLDAhPT1lLnR5cGUmJnQudWludDMyKDE2KS5pbnQzMihlLnR5cGUpLCEwPT09ZS5pc0FuaW1hdGVkJiZ0LnVpbnQzMigyNCkuYm9vbChlLmlzQW5pbWF0ZWQpLFwiXCIhPT1lLmFsdFRleHQmJnQudWludDMyKDM0KS5zdHJpbmcoZS5hbHRUZXh0KSwhMD09PWUuaXNDdXN0b21vamkmJnQudWludDMyKDQwKS5ib29sKGUuaXNDdXN0b21vamkpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17Y29taWNJZDpcIlwiLHR5cGU6MCxpc0FuaW1hdGVkOiExLGFsdFRleHQ6XCJcIixpc0N1c3RvbW9qaTohMX07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8uY29taWNJZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjpvLnR5cGU9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMzpvLmlzQW5pbWF0ZWQ9bi5ib29sKCk7YnJlYWs7Y2FzZSA0Om8uYWx0VGV4dD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNTpvLmlzQ3VzdG9tb2ppPW4uYm9vbCgpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17Y29taWNJZDpcIlwiLHR5cGU6MCxpc0FuaW1hdGVkOiExLGFsdFRleHQ6XCJcIixpc0N1c3RvbW9qaTohMX07cmV0dXJuIHQuY29taWNJZD1lLmNvbWljSWQ/P1wiXCIsdC50eXBlPWUudHlwZT8/MCx0LmlzQW5pbWF0ZWQ9ZS5pc0FuaW1hdGVkPz8hMSx0LmFsdFRleHQ9ZS5hbHRUZXh0Pz9cIlwiLHQuaXNDdXN0b21vamk9ZS5pc0N1c3RvbW9qaT8/ITEsdH19fSw4NTY5NDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DYW1lb19UYXJnZXRMZW5zZXNFbnRyeT10LkNhbWVvPXZvaWQgMDtjb25zdCBpPXIobig0MTU4MykpLG89big2NjcyMiksYT1uKDUxOTI0KSxzPW4oMTYyNzYpLGM9big5NTIxOSksbD1yKG4oNjIxMDApKTtmdW5jdGlvbiB1KGUpe3JldHVybiBlLnRvU3RyaW5nKCl9dC5DYW1lbz17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO1wiMFwiIT09ZS5jYW1lb0lkJiZuLnVpbnQzMig4KS5pbnQ2NChlLmNhbWVvSWQpLG4udWludDMyKDE4KS5mb3JrKCk7Zm9yKGNvbnN0IHQgb2YgZS5nZW5kZXJzKW4uaW50MzIodCk7cmV0dXJuIG4ubGRlbGltKCksdm9pZCAwIT09ZS5tZWRpYUNvbnRlbnQmJm8uTWVkaWFDb250ZW50LmVuY29kZShlLm1lZGlhQ29udGVudCxuLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLm1pbmltdW1BcGlWZXJzaW9uJiZhLkFwaVZlcnNpb24uZW5jb2RlKGUubWluaW11bUFwaVZlcnNpb24sbi51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCksXCIwXCIhPT1lLmNsb25lR3JvdXBJZCYmbi51aW50MzIoNDApLmludDY0KGUuY2xvbmVHcm91cElkKSx2b2lkIDAhPT1lLmN1c3RvbVRleHRQYXJhbWV0ZXJzJiZzLkN1c3RvbVRleHRQYXJhbWV0ZXJzLmVuY29kZShlLmN1c3RvbVRleHRQYXJhbWV0ZXJzLG4udWludDMyKDUwKS5mb3JrKCkpLmxkZWxpbSgpLFwiXCIhPT1lLmNhbWVvRXh0ZXJuYWxJZCYmbi51aW50MzIoNTgpLnN0cmluZyhlLmNhbWVvRXh0ZXJuYWxJZCksMCE9PWUuc3RpY2tlclR5cGUmJm4udWludDMyKDY0KS5pbnQzMihlLnN0aWNrZXJUeXBlKSxPYmplY3QuZW50cmllcyhlLnRhcmdldExlbnNlcykuZm9yRWFjaCgoZT0+e2xldFtyLGldPWU7dC5DYW1lb19UYXJnZXRMZW5zZXNFbnRyeS5lbmNvZGUoe2tleTpyLHZhbHVlOml9LG4udWludDMyKDc0KS5mb3JrKCkpLmxkZWxpbSgpfSkpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGwuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbC5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3QgYz17Y2FtZW9JZDpcIjBcIixnZW5kZXJzOltdLG1lZGlhQ29udGVudDp2b2lkIDAsbWluaW11bUFwaVZlcnNpb246dm9pZCAwLGNsb25lR3JvdXBJZDpcIjBcIixjdXN0b21UZXh0UGFyYW1ldGVyczp2b2lkIDAsY2FtZW9FeHRlcm5hbElkOlwiXCIsc3RpY2tlclR5cGU6MCx0YXJnZXRMZW5zZXM6e319O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpjLmNhbWVvSWQ9dShyLmludDY0KCkpO2JyZWFrO2Nhc2UgMjppZigyPT0oNyZlKSl7Y29uc3QgZT1yLnVpbnQzMigpK3IucG9zO2Zvcig7ci5wb3M8ZTspYy5nZW5kZXJzLnB1c2goci5pbnQzMigpKX1lbHNlIGMuZ2VuZGVycy5wdXNoKHIuaW50MzIoKSk7YnJlYWs7Y2FzZSAzOmMubWVkaWFDb250ZW50PW8uTWVkaWFDb250ZW50LmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgNDpjLm1pbmltdW1BcGlWZXJzaW9uPWEuQXBpVmVyc2lvbi5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDU6Yy5jbG9uZUdyb3VwSWQ9dShyLmludDY0KCkpO2JyZWFrO2Nhc2UgNjpjLmN1c3RvbVRleHRQYXJhbWV0ZXJzPXMuQ3VzdG9tVGV4dFBhcmFtZXRlcnMuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSA3OmMuY2FtZW9FeHRlcm5hbElkPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSA4OmMuc3RpY2tlclR5cGU9ci5pbnQzMigpO2JyZWFrO2Nhc2UgOTpjb25zdCBuPXQuQ2FtZW9fVGFyZ2V0TGVuc2VzRW50cnkuZGVjb2RlKHIsci51aW50MzIoKSk7dm9pZCAwIT09bi52YWx1ZSYmKGMudGFyZ2V0TGVuc2VzW24ua2V5XT1uLnZhbHVlKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIGN9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2NhbWVvSWQ6XCIwXCIsZ2VuZGVyczpbXSxtZWRpYUNvbnRlbnQ6dm9pZCAwLG1pbmltdW1BcGlWZXJzaW9uOnZvaWQgMCxjbG9uZUdyb3VwSWQ6XCIwXCIsY3VzdG9tVGV4dFBhcmFtZXRlcnM6dm9pZCAwLGNhbWVvRXh0ZXJuYWxJZDpcIlwiLHN0aWNrZXJUeXBlOjAsdGFyZ2V0TGVuc2VzOnt9fTtyZXR1cm4gdC5jYW1lb0lkPWUuY2FtZW9JZD8/XCIwXCIsdC5nZW5kZXJzPWUuZ2VuZGVycz8ubWFwKChlPT5lKSl8fFtdLHQubWVkaWFDb250ZW50PXZvaWQgMCE9PWUubWVkaWFDb250ZW50JiZudWxsIT09ZS5tZWRpYUNvbnRlbnQ/by5NZWRpYUNvbnRlbnQuZnJvbVBhcnRpYWwoZS5tZWRpYUNvbnRlbnQpOnZvaWQgMCx0Lm1pbmltdW1BcGlWZXJzaW9uPXZvaWQgMCE9PWUubWluaW11bUFwaVZlcnNpb24mJm51bGwhPT1lLm1pbmltdW1BcGlWZXJzaW9uP2EuQXBpVmVyc2lvbi5mcm9tUGFydGlhbChlLm1pbmltdW1BcGlWZXJzaW9uKTp2b2lkIDAsdC5jbG9uZUdyb3VwSWQ9ZS5jbG9uZUdyb3VwSWQ/P1wiMFwiLHQuY3VzdG9tVGV4dFBhcmFtZXRlcnM9dm9pZCAwIT09ZS5jdXN0b21UZXh0UGFyYW1ldGVycyYmbnVsbCE9PWUuY3VzdG9tVGV4dFBhcmFtZXRlcnM/cy5DdXN0b21UZXh0UGFyYW1ldGVycy5mcm9tUGFydGlhbChlLmN1c3RvbVRleHRQYXJhbWV0ZXJzKTp2b2lkIDAsdC5jYW1lb0V4dGVybmFsSWQ9ZS5jYW1lb0V4dGVybmFsSWQ/P1wiXCIsdC5zdGlja2VyVHlwZT1lLnN0aWNrZXJUeXBlPz8wLHQudGFyZ2V0TGVuc2VzPU9iamVjdC5lbnRyaWVzKGUudGFyZ2V0TGVuc2VzPz97fSkucmVkdWNlKCgoZSx0KT0+e2xldFtuLHJdPXQ7cmV0dXJuIHZvaWQgMCE9PXImJihlW051bWJlcihuKV09Yy5MaXN0T2ZMZW5zZXMuZnJvbVBhcnRpYWwocikpLGV9KSx7fSksdH19LHQuQ2FtZW9fVGFyZ2V0TGVuc2VzRW50cnk9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bC5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUua2V5JiZ0LnVpbnQzMig4KS5pbnQzMihlLmtleSksdm9pZCAwIT09ZS52YWx1ZSYmYy5MaXN0T2ZMZW5zZXMuZW5jb2RlKGUudmFsdWUsdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbC5kZWZhdWx0LlJlYWRlcj9lOm5ldyBsLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtrZXk6MCx2YWx1ZTp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmtleT1uLmludDMyKCk7YnJlYWs7Y2FzZSAyOmkudmFsdWU9Yy5MaXN0T2ZMZW5zZXMuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtrZXk6MCx2YWx1ZTp2b2lkIDB9O3JldHVybiB0LmtleT1lLmtleT8/MCx0LnZhbHVlPXZvaWQgMCE9PWUudmFsdWUmJm51bGwhPT1lLnZhbHVlP2MuTGlzdE9mTGVuc2VzLmZyb21QYXJ0aWFsKGUudmFsdWUpOnZvaWQgMCx0fX0sbC5kZWZhdWx0LnV0aWwuTG9uZyE9PWkuZGVmYXVsdCYmKGwuZGVmYXVsdC51dGlsLkxvbmc9aS5kZWZhdWx0LGwuZGVmYXVsdC5jb25maWd1cmUoKSl9LDk1ODM3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNhbWVyYVJvbGxTdGlja2VyPXZvaWQgMDtjb25zdCBpPXIobig0MTU4MykpLG89big2NjcyMiksYT1uKDUxNTk4KSxzPXIobig2MjEwMCkpO3QuQ2FtZXJhUm9sbFN0aWNrZXI9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5lbmNLZXkmJnQudWludDMyKDEwKS5zdHJpbmcoZS5lbmNLZXkpLFwiXCIhPT1lLmVuY0l2JiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuZW5jSXYpLFwiMFwiIT09ZS5jcmVhdGlvblRpbWVTZWNvbmRzJiZ0LnVpbnQzMigyNCkuaW50NjQoZS5jcmVhdGlvblRpbWVTZWNvbmRzKSx2b2lkIDAhPT1lLm1lZGlhQ29udGVudCYmby5NZWRpYUNvbnRlbnQuZW5jb2RlKGUubWVkaWFDb250ZW50LHQudWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuY3JlYXRvcklkJiZhLlVVSUQuZW5jb2RlKGUuY3JlYXRvcklkLHQudWludDMyKDQyKS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLndpZHRoJiZ0LnVpbnQzMig0OCkudWludDMyKGUud2lkdGgpLDAhPT1lLmhlaWdodCYmdC51aW50MzIoNTYpLnVpbnQzMihlLmhlaWdodCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtlbmNLZXk6XCJcIixlbmNJdjpcIlwiLGNyZWF0aW9uVGltZVNlY29uZHM6XCIwXCIsbWVkaWFDb250ZW50OnZvaWQgMCxjcmVhdG9ySWQ6dm9pZCAwLHdpZHRoOjAsaGVpZ2h0OjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmVuY0tleT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLmVuY0l2PW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmkuY3JlYXRpb25UaW1lU2Vjb25kcz1uLmludDY0KCkudG9TdHJpbmcoKTticmVhaztjYXNlIDQ6aS5tZWRpYUNvbnRlbnQ9by5NZWRpYUNvbnRlbnQuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSA1OmkuY3JlYXRvcklkPWEuVVVJRC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDY6aS53aWR0aD1uLnVpbnQzMigpO2JyZWFrO2Nhc2UgNzppLmhlaWdodD1uLnVpbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17ZW5jS2V5OlwiXCIsZW5jSXY6XCJcIixjcmVhdGlvblRpbWVTZWNvbmRzOlwiMFwiLG1lZGlhQ29udGVudDp2b2lkIDAsY3JlYXRvcklkOnZvaWQgMCx3aWR0aDowLGhlaWdodDowfTtyZXR1cm4gdC5lbmNLZXk9ZS5lbmNLZXk/P1wiXCIsdC5lbmNJdj1lLmVuY0l2Pz9cIlwiLHQuY3JlYXRpb25UaW1lU2Vjb25kcz1lLmNyZWF0aW9uVGltZVNlY29uZHM/P1wiMFwiLHQubWVkaWFDb250ZW50PXZvaWQgMCE9PWUubWVkaWFDb250ZW50JiZudWxsIT09ZS5tZWRpYUNvbnRlbnQ/by5NZWRpYUNvbnRlbnQuZnJvbVBhcnRpYWwoZS5tZWRpYUNvbnRlbnQpOnZvaWQgMCx0LmNyZWF0b3JJZD12b2lkIDAhPT1lLmNyZWF0b3JJZCYmbnVsbCE9PWUuY3JlYXRvcklkP2EuVVVJRC5mcm9tUGFydGlhbChlLmNyZWF0b3JJZCk6dm9pZCAwLHQud2lkdGg9ZS53aWR0aD8/MCx0LmhlaWdodD1lLmhlaWdodD8/MCx0fX0scy5kZWZhdWx0LnV0aWwuTG9uZyE9PWkuZGVmYXVsdCYmKHMuZGVmYXVsdC51dGlsLkxvbmc9aS5kZWZhdWx0LHMuZGVmYXVsdC5jb25maWd1cmUoKSl9LDM2Mjk0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNhcHRpb25TdHlsZXM9dC5DYXB0aW9uU3R5bGVfQmFja2dyb3VuZFN0eWxlPXQuQ2FwdGlvblN0eWxlX0ZvbnRTdHlsZT10LkNhcHRpb25TdHlsZV9UZXh0UGFkZGluZz10LkNhcHRpb25TdHlsZV9TaGFkb3c9dC5DYXB0aW9uU3R5bGVfQ29sb3I9dC5DYXB0aW9uU3R5bGU9dC5DYXB0aW9uU3R5bGVfQ29sb3JfQ29sb3JUcmFuc2Zvcm09dC5DYXB0aW9uU3R5bGVfU3R5bGVUeXBlPXQuQ2FwdGlvblN0eWxlX1RleHRBbGlnbj10LkNhcHRpb25TdHlsZV9UZXh0RGVjb3JhdGlvbj10LkNhcHRpb25TdHlsZV9UZXh0VHJhbnNmb3JtPXZvaWQgMDtjb25zdCBpPXIobig0MTU4MykpLG89big2NjcyMiksYT1yKG4oNjIxMDApKSxzPW4oNTMwNTYpO3ZhciBjLGwsdSxkLGY7KGY9dC5DYXB0aW9uU3R5bGVfVGV4dFRyYW5zZm9ybXx8KHQuQ2FwdGlvblN0eWxlX1RleHRUcmFuc2Zvcm09e30pKVtmLlVOS05PV05fVEVYVF9UUkFOU0ZPUk09MF09XCJVTktOT1dOX1RFWFRfVFJBTlNGT1JNXCIsZltmLkNBUElUQUw9MV09XCJDQVBJVEFMXCIsZltmLlVQUEVSPTJdPVwiVVBQRVJcIixmW2YuTE9XRVI9M109XCJMT1dFUlwiLGZbZi5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKGQ9dC5DYXB0aW9uU3R5bGVfVGV4dERlY29yYXRpb258fCh0LkNhcHRpb25TdHlsZV9UZXh0RGVjb3JhdGlvbj17fSkpW2QuVU5LTk9XTl9URVhUX0RFQ09SQVRJT049MF09XCJVTktOT1dOX1RFWFRfREVDT1JBVElPTlwiLGRbZC5PVkVSTElORT0xXT1cIk9WRVJMSU5FXCIsZFtkLkxJTkVfVEhST1VHSD0yXT1cIkxJTkVfVEhST1VHSFwiLGRbZC5VTkRFUkxJTkU9M109XCJVTkRFUkxJTkVcIixkW2QuVU5ERVJMSU5FX09WRVJMSU5FPTRdPVwiVU5ERVJMSU5FX09WRVJMSU5FXCIsZFtkLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwodT10LkNhcHRpb25TdHlsZV9UZXh0QWxpZ258fCh0LkNhcHRpb25TdHlsZV9UZXh0QWxpZ249e30pKVt1LlVOS05PV05fVEVYVF9BTElHTk1FTlQ9MF09XCJVTktOT1dOX1RFWFRfQUxJR05NRU5UXCIsdVt1LkxFRlQ9MV09XCJMRUZUXCIsdVt1LkNFTlRFUj0yXT1cIkNFTlRFUlwiLHVbdS5SSUdIVD0zXT1cIlJJR0hUXCIsdVt1LlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwobD10LkNhcHRpb25TdHlsZV9TdHlsZVR5cGV8fCh0LkNhcHRpb25TdHlsZV9TdHlsZVR5cGU9e30pKVtsLlVOS05PV05fU1RZTEVfVFlQRT0wXT1cIlVOS05PV05fU1RZTEVfVFlQRVwiLGxbbC5PUklHSU5BTD0xXT1cIk9SSUdJTkFMXCIsbFtsLkJBQ0tHUk9VTkRfV09SRD0yXT1cIkJBQ0tHUk9VTkRfV09SRFwiLGxbbC5CQUNLR1JPVU5EX0xJTkU9M109XCJCQUNLR1JPVU5EX0xJTkVcIixsW2wuQkFDS0dST1VORF9FTlRJUkU9NF09XCJCQUNLR1JPVU5EX0VOVElSRVwiLGxbbC5CQUNLR1JPVU5EX0NVU1RPTT01XT1cIkJBQ0tHUk9VTkRfQ1VTVE9NXCIsbFtsLk5PX0JBQ0tHUk9VTkQ9Nl09XCJOT19CQUNLR1JPVU5EXCIsbFtsLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwoYz10LkNhcHRpb25TdHlsZV9Db2xvcl9Db2xvclRyYW5zZm9ybXx8KHQuQ2FwdGlvblN0eWxlX0NvbG9yX0NvbG9yVHJhbnNmb3JtPXt9KSlbYy5VTktOT1dOX0NPTE9SX1RSQU5TRk9STT0wXT1cIlVOS05PV05fQ09MT1JfVFJBTlNGT1JNXCIsY1tjLkVRVUFMPTFdPVwiRVFVQUxcIixjW2MuVU5DSEFOR0VBQkxFPTJdPVwiVU5DSEFOR0VBQkxFXCIsY1tjLkZPTExPVz0zXT1cIkZPTExPV1wiLGNbYy5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsdC5DYXB0aW9uU3R5bGU9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5zdHlsZU5hbWUmJm4udWludDMyKDEwKS5zdHJpbmcoZS5zdHlsZU5hbWUpLFwiXCIhPT1lLmRpc3BsYXlOYW1lJiZuLnVpbnQzMigxOCkuc3RyaW5nKGUuZGlzcGxheU5hbWUpLHZvaWQgMCE9PWUuZm9udFN0eWxlJiZ0LkNhcHRpb25TdHlsZV9Gb250U3R5bGUuZW5jb2RlKGUuZm9udFN0eWxlLG4udWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuYmFja2dyb3VuZFN0eWxlJiZ0LkNhcHRpb25TdHlsZV9CYWNrZ3JvdW5kU3R5bGUuZW5jb2RlKGUuYmFja2dyb3VuZFN0eWxlLG4udWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpLCEwPT09ZS5jb2xvckNoYW5nZWFibGUmJm4udWludDMyKDQwKS5ib29sKGUuY29sb3JDaGFuZ2VhYmxlKSxcIlwiIT09ZS5iYXNlQ29sb3ImJm4udWludDMyKDUwKS5zdHJpbmcoZS5iYXNlQ29sb3IpLCEwPT09ZS5pc1dpZmlPbmx5JiZuLnVpbnQzMig1NikuYm9vbChlLmlzV2lmaU9ubHkpLDAhPT1lLnN0eWxlVHlwZSYmbi51aW50MzIoNjQpLmludDMyKGUuc3R5bGVUeXBlKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89e3N0eWxlTmFtZTpcIlwiLGRpc3BsYXlOYW1lOlwiXCIsZm9udFN0eWxlOnZvaWQgMCxiYWNrZ3JvdW5kU3R5bGU6dm9pZCAwLGNvbG9yQ2hhbmdlYWJsZTohMSxiYXNlQ29sb3I6XCJcIixpc1dpZmlPbmx5OiExLHN0eWxlVHlwZTowfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5zdHlsZU5hbWU9ci5zdHJpbmcoKTticmVhaztjYXNlIDI6by5kaXNwbGF5TmFtZT1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMzpvLmZvbnRTdHlsZT10LkNhcHRpb25TdHlsZV9Gb250U3R5bGUuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSA0Om8uYmFja2dyb3VuZFN0eWxlPXQuQ2FwdGlvblN0eWxlX0JhY2tncm91bmRTdHlsZS5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDU6by5jb2xvckNoYW5nZWFibGU9ci5ib29sKCk7YnJlYWs7Y2FzZSA2Om8uYmFzZUNvbG9yPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSA3Om8uaXNXaWZpT25seT1yLmJvb2woKTticmVhaztjYXNlIDg6by5zdHlsZVR5cGU9ci5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17c3R5bGVOYW1lOlwiXCIsZGlzcGxheU5hbWU6XCJcIixmb250U3R5bGU6dm9pZCAwLGJhY2tncm91bmRTdHlsZTp2b2lkIDAsY29sb3JDaGFuZ2VhYmxlOiExLGJhc2VDb2xvcjpcIlwiLGlzV2lmaU9ubHk6ITEsc3R5bGVUeXBlOjB9O3JldHVybiBuLnN0eWxlTmFtZT1lLnN0eWxlTmFtZT8/XCJcIixuLmRpc3BsYXlOYW1lPWUuZGlzcGxheU5hbWU/P1wiXCIsbi5mb250U3R5bGU9dm9pZCAwIT09ZS5mb250U3R5bGUmJm51bGwhPT1lLmZvbnRTdHlsZT90LkNhcHRpb25TdHlsZV9Gb250U3R5bGUuZnJvbVBhcnRpYWwoZS5mb250U3R5bGUpOnZvaWQgMCxuLmJhY2tncm91bmRTdHlsZT12b2lkIDAhPT1lLmJhY2tncm91bmRTdHlsZSYmbnVsbCE9PWUuYmFja2dyb3VuZFN0eWxlP3QuQ2FwdGlvblN0eWxlX0JhY2tncm91bmRTdHlsZS5mcm9tUGFydGlhbChlLmJhY2tncm91bmRTdHlsZSk6dm9pZCAwLG4uY29sb3JDaGFuZ2VhYmxlPWUuY29sb3JDaGFuZ2VhYmxlPz8hMSxuLmJhc2VDb2xvcj1lLmJhc2VDb2xvcj8/XCJcIixuLmlzV2lmaU9ubHk9ZS5pc1dpZmlPbmx5Pz8hMSxuLnN0eWxlVHlwZT1lLnN0eWxlVHlwZT8/MCxufX0sdC5DYXB0aW9uU3R5bGVfQ29sb3I9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgbiBvZiBlLmNvbG9yKXQudWludDMyKDEwKS5zdHJpbmcobik7Zm9yKGNvbnN0IG4gb2YgZS5jb2xvclN0b3Apcy5GbG9hdFZhbHVlLmVuY29kZSh7dmFsdWU6bn0sdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCk7MCE9PWUuY29sb3JUcmFuc2Zvcm0mJnQudWludDMyKDI0KS5pbnQzMihlLmNvbG9yVHJhbnNmb3JtKSx2b2lkIDAhPT1lLmNvbG9yR3JhZGllbnRBbmdsZURlZ3JlZSYmcy5GbG9hdFZhbHVlLmVuY29kZSh7dmFsdWU6ZS5jb2xvckdyYWRpZW50QW5nbGVEZWdyZWV9LHQudWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpO2Zvcihjb25zdCBuIG9mIGUuY29sb3JUcmFuc2Zvcm1QYXJhbXMpcy5GbG9hdFZhbHVlLmVuY29kZSh7dmFsdWU6bn0sdC51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17Y29sb3I6W10sY29sb3JTdG9wOltdLGNvbG9yVHJhbnNmb3JtOjAsY29sb3JHcmFkaWVudEFuZ2xlRGVncmVlOnZvaWQgMCxjb2xvclRyYW5zZm9ybVBhcmFtczpbXX07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuY29sb3IucHVzaChuLnN0cmluZygpKTticmVhaztjYXNlIDI6aS5jb2xvclN0b3AucHVzaChzLkZsb2F0VmFsdWUuZGVjb2RlKG4sbi51aW50MzIoKSkudmFsdWUpO2JyZWFrO2Nhc2UgMzppLmNvbG9yVHJhbnNmb3JtPW4uaW50MzIoKTticmVhaztjYXNlIDQ6aS5jb2xvckdyYWRpZW50QW5nbGVEZWdyZWU9cy5GbG9hdFZhbHVlLmRlY29kZShuLG4udWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgNTppLmNvbG9yVHJhbnNmb3JtUGFyYW1zLnB1c2gocy5GbG9hdFZhbHVlLmRlY29kZShuLG4udWludDMyKCkpLnZhbHVlKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2NvbG9yOltdLGNvbG9yU3RvcDpbXSxjb2xvclRyYW5zZm9ybTowLGNvbG9yR3JhZGllbnRBbmdsZURlZ3JlZTp2b2lkIDAsY29sb3JUcmFuc2Zvcm1QYXJhbXM6W119O3JldHVybiB0LmNvbG9yPWUuY29sb3I/Lm1hcCgoZT0+ZSkpfHxbXSx0LmNvbG9yU3RvcD1lLmNvbG9yU3RvcD8ubWFwKChlPT5lKSl8fFtdLHQuY29sb3JUcmFuc2Zvcm09ZS5jb2xvclRyYW5zZm9ybT8/MCx0LmNvbG9yR3JhZGllbnRBbmdsZURlZ3JlZT1lLmNvbG9yR3JhZGllbnRBbmdsZURlZ3JlZT8/dm9pZCAwLHQuY29sb3JUcmFuc2Zvcm1QYXJhbXM9ZS5jb2xvclRyYW5zZm9ybVBhcmFtcz8ubWFwKChlPT5lKSl8fFtdLHR9fSx0LkNhcHRpb25TdHlsZV9TaGFkb3c9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5jb2xvciYmdC5DYXB0aW9uU3R5bGVfQ29sb3IuZW5jb2RlKGUuY29sb3Isbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS54JiZzLkZsb2F0VmFsdWUuZW5jb2RlKHt2YWx1ZTplLnh9LG4udWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUueSYmcy5GbG9hdFZhbHVlLmVuY29kZSh7dmFsdWU6ZS55fSxuLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnJhZGl1cyYmcy5GbG9hdFZhbHVlLmVuY29kZSh7dmFsdWU6ZS5yYWRpdXN9LG4udWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17Y29sb3I6dm9pZCAwLHg6dm9pZCAwLHk6dm9pZCAwLHJhZGl1czp2b2lkIDB9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLmNvbG9yPXQuQ2FwdGlvblN0eWxlX0NvbG9yLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMjpvLng9cy5GbG9hdFZhbHVlLmRlY29kZShyLHIudWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgMzpvLnk9cy5GbG9hdFZhbHVlLmRlY29kZShyLHIudWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgNDpvLnJhZGl1cz1zLkZsb2F0VmFsdWUuZGVjb2RlKHIsci51aW50MzIoKSkudmFsdWU7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtjb2xvcjp2b2lkIDAseDp2b2lkIDAseTp2b2lkIDAscmFkaXVzOnZvaWQgMH07cmV0dXJuIG4uY29sb3I9dm9pZCAwIT09ZS5jb2xvciYmbnVsbCE9PWUuY29sb3I/dC5DYXB0aW9uU3R5bGVfQ29sb3IuZnJvbVBhcnRpYWwoZS5jb2xvcik6dm9pZCAwLG4ueD1lLng/P3ZvaWQgMCxuLnk9ZS55Pz92b2lkIDAsbi5yYWRpdXM9ZS5yYWRpdXM/P3ZvaWQgMCxufX0sdC5DYXB0aW9uU3R5bGVfVGV4dFBhZGRpbmc9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS50b3AmJnMuRmxvYXRWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUudG9wfSx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmxlZnQmJnMuRmxvYXRWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUubGVmdH0sdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5yaWdodCYmcy5GbG9hdFZhbHVlLmVuY29kZSh7dmFsdWU6ZS5yaWdodH0sdC51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5ib3R0b20mJnMuRmxvYXRWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUuYm90dG9tfSx0LnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3RvcDp2b2lkIDAsbGVmdDp2b2lkIDAscmlnaHQ6dm9pZCAwLGJvdHRvbTp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnRvcD1zLkZsb2F0VmFsdWUuZGVjb2RlKG4sbi51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSAyOmkubGVmdD1zLkZsb2F0VmFsdWUuZGVjb2RlKG4sbi51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSAzOmkucmlnaHQ9cy5GbG9hdFZhbHVlLmRlY29kZShuLG4udWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgNDppLmJvdHRvbT1zLkZsb2F0VmFsdWUuZGVjb2RlKG4sbi51aW50MzIoKSkudmFsdWU7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt0b3A6dm9pZCAwLGxlZnQ6dm9pZCAwLHJpZ2h0OnZvaWQgMCxib3R0b206dm9pZCAwfTtyZXR1cm4gdC50b3A9ZS50b3A/P3ZvaWQgMCx0LmxlZnQ9ZS5sZWZ0Pz92b2lkIDAsdC5yaWdodD1lLnJpZ2h0Pz92b2lkIDAsdC5ib3R0b209ZS5ib3R0b20/P3ZvaWQgMCx0fX0sdC5DYXB0aW9uU3R5bGVfRm9udFN0eWxlPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7XCJcIiE9PWUuZm9udE5hbWUmJm4udWludDMyKDEwKS5zdHJpbmcoZS5mb250TmFtZSksXCJcIiE9PWUuZm9udFVybCYmbi51aW50MzIoMTgpLnN0cmluZyhlLmZvbnRVcmwpLHZvaWQgMCE9PWUuZm9udENvbG9yJiZ0LkNhcHRpb25TdHlsZV9Db2xvci5lbmNvZGUoZS5mb250Q29sb3Isbi51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5ib3JkZXJDb2xvciYmdC5DYXB0aW9uU3R5bGVfQ29sb3IuZW5jb2RlKGUuYm9yZGVyQ29sb3Isbi51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5sZXR0ZXJTcGFjaW5nJiZzLkZsb2F0VmFsdWUuZW5jb2RlKHt2YWx1ZTplLmxldHRlclNwYWNpbmd9LG4udWludDMyKDQyKS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUubGluZUhlaWdodCYmcy5GbG9hdFZhbHVlLmVuY29kZSh7dmFsdWU6ZS5saW5lSGVpZ2h0fSxuLnVpbnQzMig1MCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmZvbnRTaXplJiZzLkZsb2F0VmFsdWUuZW5jb2RlKHt2YWx1ZTplLmZvbnRTaXplfSxuLnVpbnQzMig1OCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmZvbnRCb3JkZXJXaWR0aCYmcy5GbG9hdFZhbHVlLmVuY29kZSh7dmFsdWU6ZS5mb250Qm9yZGVyV2lkdGh9LG4udWludDMyKDY2KS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLnRleHRUcmFuc2Zvcm0mJm4udWludDMyKDcyKS5pbnQzMihlLnRleHRUcmFuc2Zvcm0pO2Zvcihjb25zdCByIG9mIGUudGV4dFNoYWRvdyl0LkNhcHRpb25TdHlsZV9TaGFkb3cuZW5jb2RlKHIsbi51aW50MzIoODIpLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIDAhPT1lLnRleHREZWNvcmF0aW9uJiZuLnVpbnQzMig4OCkuaW50MzIoZS50ZXh0RGVjb3JhdGlvbiksMCE9PWUudGV4dEFsaWduJiZuLnVpbnQzMig5NikuaW50MzIoZS50ZXh0QWxpZ24pLHZvaWQgMCE9PWUucGFkZGluZyYmdC5DYXB0aW9uU3R5bGVfVGV4dFBhZGRpbmcuZW5jb2RlKGUucGFkZGluZyxuLnVpbnQzMigxMDYpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5taW5Gb250U2l6ZSYmcy5GbG9hdFZhbHVlLmVuY29kZSh7dmFsdWU6ZS5taW5Gb250U2l6ZX0sbi51aW50MzIoMTE0KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUubWF4Rm9udFNpemUmJnMuRmxvYXRWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUubWF4Rm9udFNpemV9LG4udWludDMyKDEyMikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLm1lZGlhQ29udGVudCYmby5NZWRpYUNvbnRlbnQuZW5jb2RlKGUubWVkaWFDb250ZW50LG4udWludDMyKDEzMCkuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGM9e2ZvbnROYW1lOlwiXCIsZm9udFVybDpcIlwiLGZvbnRDb2xvcjp2b2lkIDAsYm9yZGVyQ29sb3I6dm9pZCAwLGxldHRlclNwYWNpbmc6dm9pZCAwLGxpbmVIZWlnaHQ6dm9pZCAwLGZvbnRTaXplOnZvaWQgMCxmb250Qm9yZGVyV2lkdGg6dm9pZCAwLHRleHRUcmFuc2Zvcm06MCx0ZXh0U2hhZG93OltdLHRleHREZWNvcmF0aW9uOjAsdGV4dEFsaWduOjAscGFkZGluZzp2b2lkIDAsbWluRm9udFNpemU6dm9pZCAwLG1heEZvbnRTaXplOnZvaWQgMCxtZWRpYUNvbnRlbnQ6dm9pZCAwfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6Yy5mb250TmFtZT1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMjpjLmZvbnRVcmw9ci5zdHJpbmcoKTticmVhaztjYXNlIDM6Yy5mb250Q29sb3I9dC5DYXB0aW9uU3R5bGVfQ29sb3IuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSA0OmMuYm9yZGVyQ29sb3I9dC5DYXB0aW9uU3R5bGVfQ29sb3IuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSA1OmMubGV0dGVyU3BhY2luZz1zLkZsb2F0VmFsdWUuZGVjb2RlKHIsci51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSA2OmMubGluZUhlaWdodD1zLkZsb2F0VmFsdWUuZGVjb2RlKHIsci51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSA3OmMuZm9udFNpemU9cy5GbG9hdFZhbHVlLmRlY29kZShyLHIudWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgODpjLmZvbnRCb3JkZXJXaWR0aD1zLkZsb2F0VmFsdWUuZGVjb2RlKHIsci51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSA5OmMudGV4dFRyYW5zZm9ybT1yLmludDMyKCk7YnJlYWs7Y2FzZSAxMDpjLnRleHRTaGFkb3cucHVzaCh0LkNhcHRpb25TdHlsZV9TaGFkb3cuZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2Nhc2UgMTE6Yy50ZXh0RGVjb3JhdGlvbj1yLmludDMyKCk7YnJlYWs7Y2FzZSAxMjpjLnRleHRBbGlnbj1yLmludDMyKCk7YnJlYWs7Y2FzZSAxMzpjLnBhZGRpbmc9dC5DYXB0aW9uU3R5bGVfVGV4dFBhZGRpbmcuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAxNDpjLm1pbkZvbnRTaXplPXMuRmxvYXRWYWx1ZS5kZWNvZGUocixyLnVpbnQzMigpKS52YWx1ZTticmVhaztjYXNlIDE1OmMubWF4Rm9udFNpemU9cy5GbG9hdFZhbHVlLmRlY29kZShyLHIudWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgMTY6Yy5tZWRpYUNvbnRlbnQ9by5NZWRpYUNvbnRlbnQuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBjfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtmb250TmFtZTpcIlwiLGZvbnRVcmw6XCJcIixmb250Q29sb3I6dm9pZCAwLGJvcmRlckNvbG9yOnZvaWQgMCxsZXR0ZXJTcGFjaW5nOnZvaWQgMCxsaW5lSGVpZ2h0OnZvaWQgMCxmb250U2l6ZTp2b2lkIDAsZm9udEJvcmRlcldpZHRoOnZvaWQgMCx0ZXh0VHJhbnNmb3JtOjAsdGV4dFNoYWRvdzpbXSx0ZXh0RGVjb3JhdGlvbjowLHRleHRBbGlnbjowLHBhZGRpbmc6dm9pZCAwLG1pbkZvbnRTaXplOnZvaWQgMCxtYXhGb250U2l6ZTp2b2lkIDAsbWVkaWFDb250ZW50OnZvaWQgMH07cmV0dXJuIG4uZm9udE5hbWU9ZS5mb250TmFtZT8/XCJcIixuLmZvbnRVcmw9ZS5mb250VXJsPz9cIlwiLG4uZm9udENvbG9yPXZvaWQgMCE9PWUuZm9udENvbG9yJiZudWxsIT09ZS5mb250Q29sb3I/dC5DYXB0aW9uU3R5bGVfQ29sb3IuZnJvbVBhcnRpYWwoZS5mb250Q29sb3IpOnZvaWQgMCxuLmJvcmRlckNvbG9yPXZvaWQgMCE9PWUuYm9yZGVyQ29sb3ImJm51bGwhPT1lLmJvcmRlckNvbG9yP3QuQ2FwdGlvblN0eWxlX0NvbG9yLmZyb21QYXJ0aWFsKGUuYm9yZGVyQ29sb3IpOnZvaWQgMCxuLmxldHRlclNwYWNpbmc9ZS5sZXR0ZXJTcGFjaW5nPz92b2lkIDAsbi5saW5lSGVpZ2h0PWUubGluZUhlaWdodD8/dm9pZCAwLG4uZm9udFNpemU9ZS5mb250U2l6ZT8/dm9pZCAwLG4uZm9udEJvcmRlcldpZHRoPWUuZm9udEJvcmRlcldpZHRoPz92b2lkIDAsbi50ZXh0VHJhbnNmb3JtPWUudGV4dFRyYW5zZm9ybT8/MCxuLnRleHRTaGFkb3c9ZS50ZXh0U2hhZG93Py5tYXAoKGU9PnQuQ2FwdGlvblN0eWxlX1NoYWRvdy5mcm9tUGFydGlhbChlKSkpfHxbXSxuLnRleHREZWNvcmF0aW9uPWUudGV4dERlY29yYXRpb24/PzAsbi50ZXh0QWxpZ249ZS50ZXh0QWxpZ24/PzAsbi5wYWRkaW5nPXZvaWQgMCE9PWUucGFkZGluZyYmbnVsbCE9PWUucGFkZGluZz90LkNhcHRpb25TdHlsZV9UZXh0UGFkZGluZy5mcm9tUGFydGlhbChlLnBhZGRpbmcpOnZvaWQgMCxuLm1pbkZvbnRTaXplPWUubWluRm9udFNpemU/P3ZvaWQgMCxuLm1heEZvbnRTaXplPWUubWF4Rm9udFNpemU/P3ZvaWQgMCxuLm1lZGlhQ29udGVudD12b2lkIDAhPT1lLm1lZGlhQ29udGVudCYmbnVsbCE9PWUubWVkaWFDb250ZW50P28uTWVkaWFDb250ZW50LmZyb21QYXJ0aWFsKGUubWVkaWFDb250ZW50KTp2b2lkIDAsbn19LHQuQ2FwdGlvblN0eWxlX0JhY2tncm91bmRTdHlsZT17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLmNvbG9yJiZ0LkNhcHRpb25TdHlsZV9Db2xvci5lbmNvZGUoZS5jb2xvcixuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmJveFNoYWRvdyYmdC5DYXB0aW9uU3R5bGVfU2hhZG93LmVuY29kZShlLmJveFNoYWRvdyxuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmJvcmRlclJhZGl1cyYmcy5GbG9hdFZhbHVlLmVuY29kZSh7dmFsdWU6ZS5ib3JkZXJSYWRpdXN9LG4udWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLFwiXCIhPT1lLmJhY2tncm91bmRJbWFnZVVybCYmbi51aW50MzIoMzQpLnN0cmluZyhlLmJhY2tncm91bmRJbWFnZVVybCksITA9PT1lLmlzU3RyZXRjaGFibGUmJm4udWludDMyKDQwKS5ib29sKGUuaXNTdHJldGNoYWJsZSksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXtjb2xvcjp2b2lkIDAsYm94U2hhZG93OnZvaWQgMCxib3JkZXJSYWRpdXM6dm9pZCAwLGJhY2tncm91bmRJbWFnZVVybDpcIlwiLGlzU3RyZXRjaGFibGU6ITF9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLmNvbG9yPXQuQ2FwdGlvblN0eWxlX0NvbG9yLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMjpvLmJveFNoYWRvdz10LkNhcHRpb25TdHlsZV9TaGFkb3cuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAzOm8uYm9yZGVyUmFkaXVzPXMuRmxvYXRWYWx1ZS5kZWNvZGUocixyLnVpbnQzMigpKS52YWx1ZTticmVhaztjYXNlIDQ6by5iYWNrZ3JvdW5kSW1hZ2VVcmw9ci5zdHJpbmcoKTticmVhaztjYXNlIDU6by5pc1N0cmV0Y2hhYmxlPXIuYm9vbCgpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17Y29sb3I6dm9pZCAwLGJveFNoYWRvdzp2b2lkIDAsYm9yZGVyUmFkaXVzOnZvaWQgMCxiYWNrZ3JvdW5kSW1hZ2VVcmw6XCJcIixpc1N0cmV0Y2hhYmxlOiExfTtyZXR1cm4gbi5jb2xvcj12b2lkIDAhPT1lLmNvbG9yJiZudWxsIT09ZS5jb2xvcj90LkNhcHRpb25TdHlsZV9Db2xvci5mcm9tUGFydGlhbChlLmNvbG9yKTp2b2lkIDAsbi5ib3hTaGFkb3c9dm9pZCAwIT09ZS5ib3hTaGFkb3cmJm51bGwhPT1lLmJveFNoYWRvdz90LkNhcHRpb25TdHlsZV9TaGFkb3cuZnJvbVBhcnRpYWwoZS5ib3hTaGFkb3cpOnZvaWQgMCxuLmJvcmRlclJhZGl1cz1lLmJvcmRlclJhZGl1cz8/dm9pZCAwLG4uYmFja2dyb3VuZEltYWdlVXJsPWUuYmFja2dyb3VuZEltYWdlVXJsPz9cIlwiLG4uaXNTdHJldGNoYWJsZT1lLmlzU3RyZXRjaGFibGU/PyExLG59fSx0LkNhcHRpb25TdHlsZXM9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgciBvZiBlLmNhcHRpb25TdHlsZXMpdC5DYXB0aW9uU3R5bGUuZW5jb2RlKHIsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuXCIwXCIhPT1lLmNhcHRpb25TdHlsZUlkJiZuLnVpbnQzMigxNikuaW50NjQoZS5jYXB0aW9uU3R5bGVJZCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXtjYXB0aW9uU3R5bGVzOltdLGNhcHRpb25TdHlsZUlkOlwiMFwifTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5jYXB0aW9uU3R5bGVzLnB1c2godC5DYXB0aW9uU3R5bGUuZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2Nhc2UgMjpvLmNhcHRpb25TdHlsZUlkPXIuaW50NjQoKS50b1N0cmluZygpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17Y2FwdGlvblN0eWxlczpbXSxjYXB0aW9uU3R5bGVJZDpcIjBcIn07cmV0dXJuIG4uY2FwdGlvblN0eWxlcz1lLmNhcHRpb25TdHlsZXM/Lm1hcCgoZT0+dC5DYXB0aW9uU3R5bGUuZnJvbVBhcnRpYWwoZSkpKXx8W10sbi5jYXB0aW9uU3R5bGVJZD1lLmNhcHRpb25TdHlsZUlkPz9cIjBcIixufX0sYS5kZWZhdWx0LnV0aWwuTG9uZyE9PWkuZGVmYXVsdCYmKGEuZGVmYXVsdC51dGlsLkxvbmc9aS5kZWZhdWx0LGEuZGVmYXVsdC5jb25maWd1cmUoKSl9LDY5Njc6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2Fyb3VzZWxHbG9iYWxTY29yZUxpc3Q9dC5DYXJvdXNlbEdsb2JhbFNjb3JlPXQuQ2Fyb3VzZWxTbmFwU291cmNlPXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO3ZhciBvOyhvPXQuQ2Fyb3VzZWxTbmFwU291cmNlfHwodC5DYXJvdXNlbFNuYXBTb3VyY2U9e30pKVtvLkNBUk9VU0VMX1NOQVBfU09VUkNFX1VOU0VUPTBdPVwiQ0FST1VTRUxfU05BUF9TT1VSQ0VfVU5TRVRcIixvW28uUE9TVF9DQVBUVVJFX01BSU5fQ0FNRVJBPTFdPVwiUE9TVF9DQVBUVVJFX01BSU5fQ0FNRVJBXCIsb1tvLlBPU1RfQ0FQVFVSRV9SRVBMWV9DQU1FUkE9Ml09XCJQT1NUX0NBUFRVUkVfUkVQTFlfQ0FNRVJBXCIsb1tvLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0LkNhcm91c2VsR2xvYmFsU2NvcmU9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUuY2Fyb3VzZWxTbmFwU291cmNlJiZ0LnVpbnQzMig4KS5pbnQzMihlLmNhcm91c2VsU25hcFNvdXJjZSksMCE9PWUuZ2xvYmFsU2NvcmUmJnQudWludDMyKDIxKS5mbG9hdChlLmdsb2JhbFNjb3JlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e2Nhcm91c2VsU25hcFNvdXJjZTowLGdsb2JhbFNjb3JlOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLmNhcm91c2VsU25hcFNvdXJjZT1uLmludDMyKCk7YnJlYWs7Y2FzZSAyOm8uZ2xvYmFsU2NvcmU9bi5mbG9hdCgpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17Y2Fyb3VzZWxTbmFwU291cmNlOjAsZ2xvYmFsU2NvcmU6MH07cmV0dXJuIHQuY2Fyb3VzZWxTbmFwU291cmNlPWUuY2Fyb3VzZWxTbmFwU291cmNlPz8wLHQuZ2xvYmFsU2NvcmU9ZS5nbG9iYWxTY29yZT8/MCx0fX0sdC5DYXJvdXNlbEdsb2JhbFNjb3JlTGlzdD17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO2Zvcihjb25zdCByIG9mIGUuY2Fyb3VzZWxHbG9iYWxTY29yZUVudHJ5KXQuQ2Fyb3VzZWxHbG9iYWxTY29yZS5lbmNvZGUocixuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBvPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBhPXtjYXJvdXNlbEdsb2JhbFNjb3JlRW50cnk6W119O2Zvcig7ci5wb3M8bzspe2NvbnN0IGU9ci51aW50MzIoKTtlPj4+Mz09MT9hLmNhcm91c2VsR2xvYmFsU2NvcmVFbnRyeS5wdXNoKHQuQ2Fyb3VzZWxHbG9iYWxTY29yZS5kZWNvZGUocixyLnVpbnQzMigpKSk6ci5za2lwVHlwZSg3JmUpfXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtjYXJvdXNlbEdsb2JhbFNjb3JlRW50cnk6W119O3JldHVybiBuLmNhcm91c2VsR2xvYmFsU2NvcmVFbnRyeT1lLmNhcm91c2VsR2xvYmFsU2NvcmVFbnRyeT8ubWFwKChlPT50LkNhcm91c2VsR2xvYmFsU2NvcmUuZnJvbVBhcnRpYWwoZSkpKXx8W10sbn19fSw3MzQwODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DaGF0Q2FtZW9fVGFyZ2V0TGVuc2VzRW50cnk9dC5DaGF0Q2FtZW9fTG9jYWxpemVkQ2F0ZWdvcmllc0VudHJ5PXQuQ2hhdENhbWVvX1Rlc3RSZXNvdXJjZXNFbnRyeT10LkNoYXRDYW1lbz12b2lkIDA7Y29uc3QgaT1yKG4oNDE1ODMpKSxvPW4oNTE5MjQpLGE9big2MDkwNSkscz1uKDE3MzIxKSxjPW4oOTUyMTkpLGw9cihuKDYyMTAwKSk7dC5DaGF0Q2FtZW89e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bC5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtcIjBcIiE9PWUuY2FtZW9JZCYmbi51aW50MzIoOCkuaW50NjQoZS5jYW1lb0lkKSxcIlwiIT09ZS5jYW1lb0V4dGVybmFsSWQmJm4udWludDMyKDE4KS5zdHJpbmcoZS5jYW1lb0V4dGVybmFsSWQpLHZvaWQgMCE9PWUubWluaW11bUFwaVZlcnNpb24mJm8uQXBpVmVyc2lvbi5lbmNvZGUoZS5taW5pbXVtQXBpVmVyc2lvbixuLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSxuLnVpbnQzMigzNCkuZm9yaygpO2Zvcihjb25zdCB0IG9mIGUuZ2VuZGVycyluLmludDMyKHQpO3JldHVybiBuLmxkZWxpbSgpLHZvaWQgMCE9PWUucmVzb3VyY2VzJiZhLkNoYXRDYW1lb1Jlc291cmNlQ29sbGVjdGlvbi5lbmNvZGUoZS5yZXNvdXJjZXMsbi51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKCksT2JqZWN0LmVudHJpZXMoZS50ZXN0UmVzb3VyY2VzKS5mb3JFYWNoKChlPT57bGV0W3IsaV09ZTt0LkNoYXRDYW1lb19UZXN0UmVzb3VyY2VzRW50cnkuZW5jb2RlKHtrZXk6cix2YWx1ZTppfSxuLnVpbnQzMig1MCkuZm9yaygpKS5sZGVsaW0oKX0pKSx2b2lkIDAhPT1lLmdsb2JhbENhdGVnb3JpZXMmJnMuU3RyaW5nTGlzdFZhbHVlLmVuY29kZShlLmdsb2JhbENhdGVnb3JpZXMsbi51aW50MzIoNTgpLmZvcmsoKSkubGRlbGltKCksT2JqZWN0LmVudHJpZXMoZS5sb2NhbGl6ZWRDYXRlZ29yaWVzKS5mb3JFYWNoKChlPT57bGV0W3IsaV09ZTt0LkNoYXRDYW1lb19Mb2NhbGl6ZWRDYXRlZ29yaWVzRW50cnkuZW5jb2RlKHtrZXk6cix2YWx1ZTppfSxuLnVpbnQzMig2NikuZm9yaygpKS5sZGVsaW0oKX0pKSxPYmplY3QuZW50cmllcyhlLnRhcmdldExlbnNlcykuZm9yRWFjaCgoZT0+e2xldFtyLGldPWU7dC5DaGF0Q2FtZW9fVGFyZ2V0TGVuc2VzRW50cnkuZW5jb2RlKHtrZXk6cix2YWx1ZTppfSxuLnVpbnQzMig3NCkuZm9yaygpKS5sZGVsaW0oKX0pKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBsLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGwuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGM9e2NhbWVvSWQ6XCIwXCIsY2FtZW9FeHRlcm5hbElkOlwiXCIsbWluaW11bUFwaVZlcnNpb246dm9pZCAwLGdlbmRlcnM6W10scmVzb3VyY2VzOnZvaWQgMCx0ZXN0UmVzb3VyY2VzOnt9LGdsb2JhbENhdGVnb3JpZXM6dm9pZCAwLGxvY2FsaXplZENhdGVnb3JpZXM6e30sdGFyZ2V0TGVuc2VzOnt9fTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6Yy5jYW1lb0lkPXIuaW50NjQoKS50b1N0cmluZygpO2JyZWFrO2Nhc2UgMjpjLmNhbWVvRXh0ZXJuYWxJZD1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMzpjLm1pbmltdW1BcGlWZXJzaW9uPW8uQXBpVmVyc2lvbi5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDQ6aWYoMj09KDcmZSkpe2NvbnN0IGU9ci51aW50MzIoKStyLnBvcztmb3IoO3IucG9zPGU7KWMuZ2VuZGVycy5wdXNoKHIuaW50MzIoKSl9ZWxzZSBjLmdlbmRlcnMucHVzaChyLmludDMyKCkpO2JyZWFrO2Nhc2UgNTpjLnJlc291cmNlcz1hLkNoYXRDYW1lb1Jlc291cmNlQ29sbGVjdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDY6Y29uc3Qgbj10LkNoYXRDYW1lb19UZXN0UmVzb3VyY2VzRW50cnkuZGVjb2RlKHIsci51aW50MzIoKSk7dm9pZCAwIT09bi52YWx1ZSYmKGMudGVzdFJlc291cmNlc1tuLmtleV09bi52YWx1ZSk7YnJlYWs7Y2FzZSA3OmMuZ2xvYmFsQ2F0ZWdvcmllcz1zLlN0cmluZ0xpc3RWYWx1ZS5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDg6Y29uc3QgaT10LkNoYXRDYW1lb19Mb2NhbGl6ZWRDYXRlZ29yaWVzRW50cnkuZGVjb2RlKHIsci51aW50MzIoKSk7dm9pZCAwIT09aS52YWx1ZSYmKGMubG9jYWxpemVkQ2F0ZWdvcmllc1tpLmtleV09aS52YWx1ZSk7YnJlYWs7Y2FzZSA5OmNvbnN0IGw9dC5DaGF0Q2FtZW9fVGFyZ2V0TGVuc2VzRW50cnkuZGVjb2RlKHIsci51aW50MzIoKSk7dm9pZCAwIT09bC52YWx1ZSYmKGMudGFyZ2V0TGVuc2VzW2wua2V5XT1sLnZhbHVlKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIGN9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2NhbWVvSWQ6XCIwXCIsY2FtZW9FeHRlcm5hbElkOlwiXCIsbWluaW11bUFwaVZlcnNpb246dm9pZCAwLGdlbmRlcnM6W10scmVzb3VyY2VzOnZvaWQgMCx0ZXN0UmVzb3VyY2VzOnt9LGdsb2JhbENhdGVnb3JpZXM6dm9pZCAwLGxvY2FsaXplZENhdGVnb3JpZXM6e30sdGFyZ2V0TGVuc2VzOnt9fTtyZXR1cm4gdC5jYW1lb0lkPWUuY2FtZW9JZD8/XCIwXCIsdC5jYW1lb0V4dGVybmFsSWQ9ZS5jYW1lb0V4dGVybmFsSWQ/P1wiXCIsdC5taW5pbXVtQXBpVmVyc2lvbj12b2lkIDAhPT1lLm1pbmltdW1BcGlWZXJzaW9uJiZudWxsIT09ZS5taW5pbXVtQXBpVmVyc2lvbj9vLkFwaVZlcnNpb24uZnJvbVBhcnRpYWwoZS5taW5pbXVtQXBpVmVyc2lvbik6dm9pZCAwLHQuZ2VuZGVycz1lLmdlbmRlcnM/Lm1hcCgoZT0+ZSkpfHxbXSx0LnJlc291cmNlcz12b2lkIDAhPT1lLnJlc291cmNlcyYmbnVsbCE9PWUucmVzb3VyY2VzP2EuQ2hhdENhbWVvUmVzb3VyY2VDb2xsZWN0aW9uLmZyb21QYXJ0aWFsKGUucmVzb3VyY2VzKTp2b2lkIDAsdC50ZXN0UmVzb3VyY2VzPU9iamVjdC5lbnRyaWVzKGUudGVzdFJlc291cmNlcz8/e30pLnJlZHVjZSgoKGUsdCk9PntsZXRbbixyXT10O3JldHVybiB2b2lkIDAhPT1yJiYoZVtuXT1hLkNoYXRDYW1lb1Jlc291cmNlQ29sbGVjdGlvbi5mcm9tUGFydGlhbChyKSksZX0pLHt9KSx0Lmdsb2JhbENhdGVnb3JpZXM9dm9pZCAwIT09ZS5nbG9iYWxDYXRlZ29yaWVzJiZudWxsIT09ZS5nbG9iYWxDYXRlZ29yaWVzP3MuU3RyaW5nTGlzdFZhbHVlLmZyb21QYXJ0aWFsKGUuZ2xvYmFsQ2F0ZWdvcmllcyk6dm9pZCAwLHQubG9jYWxpemVkQ2F0ZWdvcmllcz1PYmplY3QuZW50cmllcyhlLmxvY2FsaXplZENhdGVnb3JpZXM/P3t9KS5yZWR1Y2UoKChlLHQpPT57bGV0W24scl09dDtyZXR1cm4gdm9pZCAwIT09ciYmKGVbbl09cy5TdHJpbmdMaXN0VmFsdWUuZnJvbVBhcnRpYWwocikpLGV9KSx7fSksdC50YXJnZXRMZW5zZXM9T2JqZWN0LmVudHJpZXMoZS50YXJnZXRMZW5zZXM/P3t9KS5yZWR1Y2UoKChlLHQpPT57bGV0W24scl09dDtyZXR1cm4gdm9pZCAwIT09ciYmKGVbTnVtYmVyKG4pXT1jLkxpc3RPZkxlbnNlcy5mcm9tUGFydGlhbChyKSksZX0pLHt9KSx0fX0sdC5DaGF0Q2FtZW9fVGVzdFJlc291cmNlc0VudHJ5PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmwuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUua2V5JiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUua2V5KSx2b2lkIDAhPT1lLnZhbHVlJiZhLkNoYXRDYW1lb1Jlc291cmNlQ29sbGVjdGlvbi5lbmNvZGUoZS52YWx1ZSx0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBsLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGwuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2tleTpcIlwiLHZhbHVlOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkua2V5PW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkudmFsdWU9YS5DaGF0Q2FtZW9SZXNvdXJjZUNvbGxlY3Rpb24uZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtrZXk6XCJcIix2YWx1ZTp2b2lkIDB9O3JldHVybiB0LmtleT1lLmtleT8/XCJcIix0LnZhbHVlPXZvaWQgMCE9PWUudmFsdWUmJm51bGwhPT1lLnZhbHVlP2EuQ2hhdENhbWVvUmVzb3VyY2VDb2xsZWN0aW9uLmZyb21QYXJ0aWFsKGUudmFsdWUpOnZvaWQgMCx0fX0sdC5DaGF0Q2FtZW9fTG9jYWxpemVkQ2F0ZWdvcmllc0VudHJ5PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmwuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUua2V5JiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUua2V5KSx2b2lkIDAhPT1lLnZhbHVlJiZzLlN0cmluZ0xpc3RWYWx1ZS5lbmNvZGUoZS52YWx1ZSx0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBsLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGwuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2tleTpcIlwiLHZhbHVlOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkua2V5PW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkudmFsdWU9cy5TdHJpbmdMaXN0VmFsdWUuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtrZXk6XCJcIix2YWx1ZTp2b2lkIDB9O3JldHVybiB0LmtleT1lLmtleT8/XCJcIix0LnZhbHVlPXZvaWQgMCE9PWUudmFsdWUmJm51bGwhPT1lLnZhbHVlP3MuU3RyaW5nTGlzdFZhbHVlLmZyb21QYXJ0aWFsKGUudmFsdWUpOnZvaWQgMCx0fX0sdC5DaGF0Q2FtZW9fVGFyZ2V0TGVuc2VzRW50cnk9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bC5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUua2V5JiZ0LnVpbnQzMig4KS5pbnQzMihlLmtleSksdm9pZCAwIT09ZS52YWx1ZSYmYy5MaXN0T2ZMZW5zZXMuZW5jb2RlKGUudmFsdWUsdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbC5kZWZhdWx0LlJlYWRlcj9lOm5ldyBsLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtrZXk6MCx2YWx1ZTp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmtleT1uLmludDMyKCk7YnJlYWs7Y2FzZSAyOmkudmFsdWU9Yy5MaXN0T2ZMZW5zZXMuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtrZXk6MCx2YWx1ZTp2b2lkIDB9O3JldHVybiB0LmtleT1lLmtleT8/MCx0LnZhbHVlPXZvaWQgMCE9PWUudmFsdWUmJm51bGwhPT1lLnZhbHVlP2MuTGlzdE9mTGVuc2VzLmZyb21QYXJ0aWFsKGUudmFsdWUpOnZvaWQgMCx0fX0sbC5kZWZhdWx0LnV0aWwuTG9uZyE9PWkuZGVmYXVsdCYmKGwuZGVmYXVsdC51dGlsLkxvbmc9aS5kZWZhdWx0LGwuZGVmYXVsdC5jb25maWd1cmUoKSl9LDkzMTE4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNoYXRSZWFjdGlvbkludGVudF9SZWFjdGlvblN0aWNrZXI9dC5DaGF0UmVhY3Rpb25JbnRlbnQ9dC5DaGF0UmVhY3Rpb25JbnRlbnRfSW50ZW50VHlwZT12b2lkIDA7Y29uc3QgaT1uKDIyNzQ3KSxvPW4oNTExMDUpLGE9bigzMTA3OCkscz1uKDg1Njk0KSxjPW4oNDk3OCksbD1yKG4oNjIxMDApKTt2YXIgdTsodT10LkNoYXRSZWFjdGlvbkludGVudF9JbnRlbnRUeXBlfHwodC5DaGF0UmVhY3Rpb25JbnRlbnRfSW50ZW50VHlwZT17fSkpW3UuUkVBQ1RJT05fVU5TRVQ9MF09XCJSRUFDVElPTl9VTlNFVFwiLHVbdS5MT1ZFPTFdPVwiTE9WRVwiLHVbdS5MQVVHSF9DUlk9Ml09XCJMQVVHSF9DUllcIix1W3UuRklSRT0zXT1cIkZJUkVcIix1W3UuVEhVTUJTX1VQPTRdPVwiVEhVTUJTX1VQXCIsdVt1LlRIVU1CU19ET1dOPTVdPVwiVEhVTUJTX0RPV05cIix1W3UuU0FEX0NSWT02XT1cIlNBRF9DUllcIix1W3UuV09XPTddPVwiV09XXCIsdVt1LlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0LkNoYXRSZWFjdGlvbkludGVudD17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO2Zvcihjb25zdCByIG9mIGUucmVhY3Rpb25zKXQuQ2hhdFJlYWN0aW9uSW50ZW50X1JlYWN0aW9uU3RpY2tlci5lbmNvZGUocixuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gMCE9PWUuaW50ZW50VHlwZSYmbi51aW50MzIoMTYpLmludDMyKGUuaW50ZW50VHlwZSksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgbC5kZWZhdWx0LlJlYWRlcj9lOm5ldyBsLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXtyZWFjdGlvbnM6W10saW50ZW50VHlwZTowfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5yZWFjdGlvbnMucHVzaCh0LkNoYXRSZWFjdGlvbkludGVudF9SZWFjdGlvblN0aWNrZXIuZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2Nhc2UgMjpvLmludGVudFR5cGU9ci5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17cmVhY3Rpb25zOltdLGludGVudFR5cGU6MH07cmV0dXJuIG4ucmVhY3Rpb25zPWUucmVhY3Rpb25zPy5tYXAoKGU9PnQuQ2hhdFJlYWN0aW9uSW50ZW50X1JlYWN0aW9uU3RpY2tlci5mcm9tUGFydGlhbChlKSkpfHxbXSxuLmludGVudFR5cGU9ZS5pbnRlbnRUeXBlPz8wLG59fSx0LkNoYXRSZWFjdGlvbkludGVudF9SZWFjdGlvblN0aWNrZXI9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bC5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cImJpdG1vamlcIj09PWUuc3RpY2tlcj8uJGNhc2UmJmkuQml0bW9qaVN0aWNrZXIuZW5jb2RlKGUuc3RpY2tlci5iaXRtb2ppLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLFwiZW1vamlcIj09PWUuc3RpY2tlcj8uJGNhc2UmJm8uRW1vamkuZW5jb2RlKGUuc3RpY2tlci5lbW9qaSx0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSxcInNuYXBTdGlja2VyXCI9PT1lLnN0aWNrZXI/LiRjYXNlJiZhLlNuYXBTdGlja2VyLmVuY29kZShlLnN0aWNrZXIuc25hcFN0aWNrZXIsdC51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCksXCJjYW1lb1wiPT09ZS5zdGlja2VyPy4kY2FzZSYmcy5DYW1lby5lbmNvZGUoZS5zdGlja2VyLmNhbWVvLHQudWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpLFwiY3VzdG9tU3RpY2tlclwiPT09ZS5zdGlja2VyPy4kY2FzZSYmYy5DdXN0b21TdGlja2VyLmVuY29kZShlLnN0aWNrZXIuY3VzdG9tU3RpY2tlcix0LnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBsLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGwuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IHU9e3N0aWNrZXI6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6dS5zdGlja2VyPXskY2FzZTpcImJpdG1vamlcIixiaXRtb2ppOmkuQml0bW9qaVN0aWNrZXIuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMjp1LnN0aWNrZXI9eyRjYXNlOlwiZW1vamlcIixlbW9qaTpvLkVtb2ppLmRlY29kZShuLG4udWludDMyKCkpfTticmVhaztjYXNlIDM6dS5zdGlja2VyPXskY2FzZTpcInNuYXBTdGlja2VyXCIsc25hcFN0aWNrZXI6YS5TbmFwU3RpY2tlci5kZWNvZGUobixuLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA0OnUuc3RpY2tlcj17JGNhc2U6XCJjYW1lb1wiLGNhbWVvOnMuQ2FtZW8uZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgNTp1LnN0aWNrZXI9eyRjYXNlOlwiY3VzdG9tU3RpY2tlclwiLGN1c3RvbVN0aWNrZXI6Yy5DdXN0b21TdGlja2VyLmRlY29kZShuLG4udWludDMyKCkpfTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIHV9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3N0aWNrZXI6dm9pZCAwfTtyZXR1cm5cImJpdG1vamlcIj09PWUuc3RpY2tlcj8uJGNhc2UmJnZvaWQgMCE9PWUuc3RpY2tlcj8uYml0bW9qaSYmbnVsbCE9PWUuc3RpY2tlcj8uYml0bW9qaSYmKHQuc3RpY2tlcj17JGNhc2U6XCJiaXRtb2ppXCIsYml0bW9qaTppLkJpdG1vamlTdGlja2VyLmZyb21QYXJ0aWFsKGUuc3RpY2tlci5iaXRtb2ppKX0pLFwiZW1vamlcIj09PWUuc3RpY2tlcj8uJGNhc2UmJnZvaWQgMCE9PWUuc3RpY2tlcj8uZW1vamkmJm51bGwhPT1lLnN0aWNrZXI/LmVtb2ppJiYodC5zdGlja2VyPXskY2FzZTpcImVtb2ppXCIsZW1vamk6by5FbW9qaS5mcm9tUGFydGlhbChlLnN0aWNrZXIuZW1vamkpfSksXCJzbmFwU3RpY2tlclwiPT09ZS5zdGlja2VyPy4kY2FzZSYmdm9pZCAwIT09ZS5zdGlja2VyPy5zbmFwU3RpY2tlciYmbnVsbCE9PWUuc3RpY2tlcj8uc25hcFN0aWNrZXImJih0LnN0aWNrZXI9eyRjYXNlOlwic25hcFN0aWNrZXJcIixzbmFwU3RpY2tlcjphLlNuYXBTdGlja2VyLmZyb21QYXJ0aWFsKGUuc3RpY2tlci5zbmFwU3RpY2tlcil9KSxcImNhbWVvXCI9PT1lLnN0aWNrZXI/LiRjYXNlJiZ2b2lkIDAhPT1lLnN0aWNrZXI/LmNhbWVvJiZudWxsIT09ZS5zdGlja2VyPy5jYW1lbyYmKHQuc3RpY2tlcj17JGNhc2U6XCJjYW1lb1wiLGNhbWVvOnMuQ2FtZW8uZnJvbVBhcnRpYWwoZS5zdGlja2VyLmNhbWVvKX0pLFwiY3VzdG9tU3RpY2tlclwiPT09ZS5zdGlja2VyPy4kY2FzZSYmdm9pZCAwIT09ZS5zdGlja2VyPy5jdXN0b21TdGlja2VyJiZudWxsIT09ZS5zdGlja2VyPy5jdXN0b21TdGlja2VyJiYodC5zdGlja2VyPXskY2FzZTpcImN1c3RvbVN0aWNrZXJcIixjdXN0b21TdGlja2VyOmMuQ3VzdG9tU3RpY2tlci5mcm9tUGFydGlhbChlLnN0aWNrZXIuY3VzdG9tU3RpY2tlcil9KSx0fX19LDE0NjU4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNvbXBvc2l0ZUlkPXQuQ29tcG9zaXRlSWRfVHlwZT12b2lkIDA7Y29uc3QgaT1yKG4oNDE1ODMpKSxvPXIobig2MjEwMCkpO3ZhciBhOyhhPXQuQ29tcG9zaXRlSWRfVHlwZXx8KHQuQ29tcG9zaXRlSWRfVHlwZT17fSkpW2EuVU5TRVQ9MF09XCJVTlNFVFwiLGFbYS5TTkFQX1NUSUNLRVI9MV09XCJTTkFQX1NUSUNLRVJcIixhW2EuQklUTU9KSV9TVElDS0VSPTJdPVwiQklUTU9KSV9TVElDS0VSXCIsYVthLkNVU1RPTV9TVElDS0VSPTNdPVwiQ1VTVE9NX1NUSUNLRVJcIixhW2EuRU1PSkk9NF09XCJFTU9KSVwiLGFbYS5HSVBIWT01XT1cIkdJUEhZXCIsYVthLk1VU0lDX1NUSUNLRVI9MTldPVwiTVVTSUNfU1RJQ0tFUlwiLGFbYS5DQU1FTz0yMF09XCJDQU1FT1wiLGFbYS5NRU1PUklFUz0yMV09XCJNRU1PUklFU1wiLGFbYS5TVElDS0VSX1BBQ0s9MjJdPVwiU1RJQ0tFUl9QQUNLXCIsYVthLlRBUkdFVEVEX0lURU09MjNdPVwiVEFSR0VURURfSVRFTVwiLGFbYS5JTkZPX1NUSUNLRVI9MjVdPVwiSU5GT19TVElDS0VSXCIsYVthLkNBUFRJT05fU1RZTEU9MjZdPVwiQ0FQVElPTl9TVFlMRVwiLGFbYS5NVVNJQ19UUkFDSz0yN109XCJNVVNJQ19UUkFDS1wiLGFbYS5DSEFUX0NBTUVPPTI4XT1cIkNIQVRfQ0FNRU9cIixhW2EuU0VSVkVSX0NBTUVPPTI5XT1cIlNFUlZFUl9DQU1FT1wiLGFbYS5HRllDQVQ9MzBdPVwiR0ZZQ0FUXCIsYVthLkNVU1RPTV9TVElDS0VSX1BBQ0s9MzFdPVwiQ1VTVE9NX1NUSUNLRVJfUEFDS1wiLGFbYS5DSEFUX1JFQUNUSU9OPTMyXT1cIkNIQVRfUkVBQ1RJT05cIixhW2EuRklMVEVSPTMzXT1cIkZJTFRFUlwiLGFbYS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsdC5Db21wb3NpdGVJZD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiMFwiIT09ZS5pZCYmdC51aW50MzIoOCkudWludDY0KGUuaWQpLDAhPT1lLnR5cGUmJnQudWludDMyKDE2KS5pbnQzMihlLnR5cGUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17aWQ6XCIwXCIsdHlwZTowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5pZD1uLnVpbnQ2NCgpLnRvU3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkudHlwZT1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtpZDpcIjBcIix0eXBlOjB9O3JldHVybiB0LmlkPWUuaWQ/P1wiMFwiLHQudHlwZT1lLnR5cGU/PzAsdH19LG8uZGVmYXVsdC51dGlsLkxvbmchPT1pLmRlZmF1bHQmJihvLmRlZmF1bHQudXRpbC5Mb25nPWkuZGVmYXVsdCxvLmRlZmF1bHQuY29uZmlndXJlKCkpfSwxMjY2NTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Db250ZW50UmVzdHJpY3Rpb25zX0NvdW50cnlMaXN0PXQuQ29udGVudFJlc3RyaWN0aW9ucz12b2lkIDA7Y29uc3QgaT1yKG4oNjIxMDApKTt0LkNvbnRlbnRSZXN0cmljdGlvbnM9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cImNvdW50cnlCbG9ja2xpc3RcIj09PWUuY291bnRyeVJlc3RyaWN0aW9uPy4kY2FzZSYmdC5Db250ZW50UmVzdHJpY3Rpb25zX0NvdW50cnlMaXN0LmVuY29kZShlLmNvdW50cnlSZXN0cmljdGlvbi5jb3VudHJ5QmxvY2tsaXN0LG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLFwiY291bnRyeUFsbG93bGlzdFwiPT09ZS5jb3VudHJ5UmVzdHJpY3Rpb24/LiRjYXNlJiZ0LkNvbnRlbnRSZXN0cmljdGlvbnNfQ291bnRyeUxpc3QuZW5jb2RlKGUuY291bnRyeVJlc3RyaWN0aW9uLmNvdW50cnlBbGxvd2xpc3Qsbi51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBvPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBhPXtjb3VudHJ5UmVzdHJpY3Rpb246dm9pZCAwfTtmb3IoO3IucG9zPG87KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS5jb3VudHJ5UmVzdHJpY3Rpb249eyRjYXNlOlwiY291bnRyeUJsb2NrbGlzdFwiLGNvdW50cnlCbG9ja2xpc3Q6dC5Db250ZW50UmVzdHJpY3Rpb25zX0NvdW50cnlMaXN0LmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDI6YS5jb3VudHJ5UmVzdHJpY3Rpb249eyRjYXNlOlwiY291bnRyeUFsbG93bGlzdFwiLGNvdW50cnlBbGxvd2xpc3Q6dC5Db250ZW50UmVzdHJpY3Rpb25zX0NvdW50cnlMaXN0LmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e2NvdW50cnlSZXN0cmljdGlvbjp2b2lkIDB9O3JldHVyblwiY291bnRyeUJsb2NrbGlzdFwiPT09ZS5jb3VudHJ5UmVzdHJpY3Rpb24/LiRjYXNlJiZ2b2lkIDAhPT1lLmNvdW50cnlSZXN0cmljdGlvbj8uY291bnRyeUJsb2NrbGlzdCYmbnVsbCE9PWUuY291bnRyeVJlc3RyaWN0aW9uPy5jb3VudHJ5QmxvY2tsaXN0JiYobi5jb3VudHJ5UmVzdHJpY3Rpb249eyRjYXNlOlwiY291bnRyeUJsb2NrbGlzdFwiLGNvdW50cnlCbG9ja2xpc3Q6dC5Db250ZW50UmVzdHJpY3Rpb25zX0NvdW50cnlMaXN0LmZyb21QYXJ0aWFsKGUuY291bnRyeVJlc3RyaWN0aW9uLmNvdW50cnlCbG9ja2xpc3QpfSksXCJjb3VudHJ5QWxsb3dsaXN0XCI9PT1lLmNvdW50cnlSZXN0cmljdGlvbj8uJGNhc2UmJnZvaWQgMCE9PWUuY291bnRyeVJlc3RyaWN0aW9uPy5jb3VudHJ5QWxsb3dsaXN0JiZudWxsIT09ZS5jb3VudHJ5UmVzdHJpY3Rpb24/LmNvdW50cnlBbGxvd2xpc3QmJihuLmNvdW50cnlSZXN0cmljdGlvbj17JGNhc2U6XCJjb3VudHJ5QWxsb3dsaXN0XCIsY291bnRyeUFsbG93bGlzdDp0LkNvbnRlbnRSZXN0cmljdGlvbnNfQ291bnRyeUxpc3QuZnJvbVBhcnRpYWwoZS5jb3VudHJ5UmVzdHJpY3Rpb24uY291bnRyeUFsbG93bGlzdCl9KSxufX0sdC5Db250ZW50UmVzdHJpY3Rpb25zX0NvdW50cnlMaXN0PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7dC51aW50MzIoMTApLmZvcmsoKTtmb3IoY29uc3QgbiBvZiBlLmNvdW50cnlDb2Rlcyl0LnVpbnQzMihuKTtyZXR1cm4gdC5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e2NvdW50cnlDb2RlczpbXX07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2lmKGU+Pj4zPT0xKWlmKDI9PSg3JmUpKXtjb25zdCBlPW4udWludDMyKCkrbi5wb3M7Zm9yKDtuLnBvczxlOylvLmNvdW50cnlDb2Rlcy5wdXNoKG4udWludDMyKCkpfWVsc2Ugby5jb3VudHJ5Q29kZXMucHVzaChuLnVpbnQzMigpKTtlbHNlIG4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17Y291bnRyeUNvZGVzOltdfTtyZXR1cm4gdC5jb3VudHJ5Q29kZXM9ZS5jb3VudHJ5Q29kZXM/Lm1hcCgoZT0+ZSkpfHxbXSx0fX19LDE3MzI2OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNUQ29uZmlnPXQuQ1RDb25maWdfVGFyZ2V0PXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO3ZhciBvOyhvPXQuQ1RDb25maWdfVGFyZ2V0fHwodC5DVENvbmZpZ19UYXJnZXQ9e30pKVtvLkNIQVQ9MF09XCJDSEFUXCIsb1tvLlBSRVZJRVc9MV09XCJQUkVWSUVXXCIsb1tvLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0LkNUQ29uZmlnPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7dC51aW50MzIoMTApLmZvcmsoKTtmb3IoY29uc3QgbiBvZiBlLnRhcmdldHMpdC5pbnQzMihuKTt0LmxkZWxpbSgpO2Zvcihjb25zdCBuIG9mIGUubGFuZ3VhZ2VzKXQudWludDMyKDE4KS5zdHJpbmcobik7cmV0dXJuIHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17dGFyZ2V0czpbXSxsYW5ndWFnZXM6W119O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppZigyPT0oNyZlKSl7Y29uc3QgZT1uLnVpbnQzMigpK24ucG9zO2Zvcig7bi5wb3M8ZTspby50YXJnZXRzLnB1c2gobi5pbnQzMigpKX1lbHNlIG8udGFyZ2V0cy5wdXNoKG4uaW50MzIoKSk7YnJlYWs7Y2FzZSAyOm8ubGFuZ3VhZ2VzLnB1c2gobi5zdHJpbmcoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt0YXJnZXRzOltdLGxhbmd1YWdlczpbXX07cmV0dXJuIHQudGFyZ2V0cz1lLnRhcmdldHM/Lm1hcCgoZT0+ZSkpfHxbXSx0Lmxhbmd1YWdlcz1lLmxhbmd1YWdlcz8ubWFwKChlPT5lKSl8fFtdLHR9fX0sNDk3ODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DdXN0b21TdGlja2VyPXZvaWQgMDtjb25zdCBpPXIobig0MTU4MykpLG89big2NjcyMiksYT1uKDUxNTk4KSxzPXIobig2MjEwMCkpO3QuQ3VzdG9tU3RpY2tlcj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmVuY0tleSYmdC51aW50MzIoMTApLnN0cmluZyhlLmVuY0tleSksXCJcIiE9PWUuZW5jSXYmJnQudWludDMyKDE4KS5zdHJpbmcoZS5lbmNJdiksXCIwXCIhPT1lLmNyZWF0aW9uVGltZVNlY29uZHMmJnQudWludDMyKDI0KS5pbnQ2NChlLmNyZWF0aW9uVGltZVNlY29uZHMpLHZvaWQgMCE9PWUubWVkaWFDb250ZW50JiZvLk1lZGlhQ29udGVudC5lbmNvZGUoZS5tZWRpYUNvbnRlbnQsdC51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5jcmVhdG9ySWQmJmEuVVVJRC5lbmNvZGUoZS5jcmVhdG9ySWQsdC51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKCksMCE9PWUud2lkdGgmJnQudWludDMyKDQ4KS51aW50MzIoZS53aWR0aCksMCE9PWUuaGVpZ2h0JiZ0LnVpbnQzMig1NikudWludDMyKGUuaGVpZ2h0KSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2VuY0tleTpcIlwiLGVuY0l2OlwiXCIsY3JlYXRpb25UaW1lU2Vjb25kczpcIjBcIixtZWRpYUNvbnRlbnQ6dm9pZCAwLGNyZWF0b3JJZDp2b2lkIDAsd2lkdGg6MCxoZWlnaHQ6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuZW5jS2V5PW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkuZW5jSXY9bi5zdHJpbmcoKTticmVhaztjYXNlIDM6aS5jcmVhdGlvblRpbWVTZWNvbmRzPW4uaW50NjQoKS50b1N0cmluZygpO2JyZWFrO2Nhc2UgNDppLm1lZGlhQ29udGVudD1vLk1lZGlhQ29udGVudC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDU6aS5jcmVhdG9ySWQ9YS5VVUlELmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgNjppLndpZHRoPW4udWludDMyKCk7YnJlYWs7Y2FzZSA3OmkuaGVpZ2h0PW4udWludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtlbmNLZXk6XCJcIixlbmNJdjpcIlwiLGNyZWF0aW9uVGltZVNlY29uZHM6XCIwXCIsbWVkaWFDb250ZW50OnZvaWQgMCxjcmVhdG9ySWQ6dm9pZCAwLHdpZHRoOjAsaGVpZ2h0OjB9O3JldHVybiB0LmVuY0tleT1lLmVuY0tleT8/XCJcIix0LmVuY0l2PWUuZW5jSXY/P1wiXCIsdC5jcmVhdGlvblRpbWVTZWNvbmRzPWUuY3JlYXRpb25UaW1lU2Vjb25kcz8/XCIwXCIsdC5tZWRpYUNvbnRlbnQ9dm9pZCAwIT09ZS5tZWRpYUNvbnRlbnQmJm51bGwhPT1lLm1lZGlhQ29udGVudD9vLk1lZGlhQ29udGVudC5mcm9tUGFydGlhbChlLm1lZGlhQ29udGVudCk6dm9pZCAwLHQuY3JlYXRvcklkPXZvaWQgMCE9PWUuY3JlYXRvcklkJiZudWxsIT09ZS5jcmVhdG9ySWQ/YS5VVUlELmZyb21QYXJ0aWFsKGUuY3JlYXRvcklkKTp2b2lkIDAsdC53aWR0aD1lLndpZHRoPz8wLHQuaGVpZ2h0PWUuaGVpZ2h0Pz8wLHR9fSxzLmRlZmF1bHQudXRpbC5Mb25nIT09aS5kZWZhdWx0JiYocy5kZWZhdWx0LnV0aWwuTG9uZz1pLmRlZmF1bHQscy5kZWZhdWx0LmNvbmZpZ3VyZSgpKX0sMTk0NzU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ3VzdG9tU3RpY2tlclBhY2s9dC5DdXN0b21TdGlja2VyUGFja0VudHJ5PXZvaWQgMDtjb25zdCBpPXIobig0MTU4MykpLG89big0OTc4KSxhPXIobig2MjEwMCkpO2Z1bmN0aW9uIHMoKXtyZXR1cm57c3RpY2tlcklkOm5ldyBVaW50OEFycmF5LG9yZGVyV2VpZ2h0OlwiMFwiLGN1c3RvbVN0aWNrZXI6dm9pZCAwfX10LkN1c3RvbVN0aWNrZXJQYWNrRW50cnk9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUuc3RpY2tlcklkLmxlbmd0aCYmdC51aW50MzIoMTApLmJ5dGVzKGUuc3RpY2tlcklkKSxcIjBcIiE9PWUub3JkZXJXZWlnaHQmJnQudWludDMyKDE2KS5pbnQ2NChlLm9yZGVyV2VpZ2h0KSx2b2lkIDAhPT1lLmN1c3RvbVN0aWNrZXImJm8uQ3VzdG9tU3RpY2tlci5lbmNvZGUoZS5jdXN0b21TdGlja2VyLHQudWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT1zKCk7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuc3RpY2tlcklkPW4uYnl0ZXMoKTticmVhaztjYXNlIDI6aS5vcmRlcldlaWdodD1uLmludDY0KCkudG9TdHJpbmcoKTticmVhaztjYXNlIDM6aS5jdXN0b21TdGlja2VyPW8uQ3VzdG9tU3RpY2tlci5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9cygpO3JldHVybiB0LnN0aWNrZXJJZD1lLnN0aWNrZXJJZD8/bmV3IFVpbnQ4QXJyYXksdC5vcmRlcldlaWdodD1lLm9yZGVyV2VpZ2h0Pz9cIjBcIix0LmN1c3RvbVN0aWNrZXI9dm9pZCAwIT09ZS5jdXN0b21TdGlja2VyJiZudWxsIT09ZS5jdXN0b21TdGlja2VyP28uQ3VzdG9tU3RpY2tlci5mcm9tUGFydGlhbChlLmN1c3RvbVN0aWNrZXIpOnZvaWQgMCx0fX0sdC5DdXN0b21TdGlja2VyUGFjaz17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO2Zvcihjb25zdCByIG9mIGUuZW50cmllcyl0LkN1c3RvbVN0aWNrZXJQYWNrRW50cnkuZW5jb2RlKHIsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17ZW50cmllczpbXX07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO2U+Pj4zPT0xP28uZW50cmllcy5wdXNoKHQuQ3VzdG9tU3RpY2tlclBhY2tFbnRyeS5kZWNvZGUocixyLnVpbnQzMigpKSk6ci5za2lwVHlwZSg3JmUpfXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtlbnRyaWVzOltdfTtyZXR1cm4gbi5lbnRyaWVzPWUuZW50cmllcz8ubWFwKChlPT50LkN1c3RvbVN0aWNrZXJQYWNrRW50cnkuZnJvbVBhcnRpYWwoZSkpKXx8W10sbn19LGEuZGVmYXVsdC51dGlsLkxvbmchPT1pLmRlZmF1bHQmJihhLmRlZmF1bHQudXRpbC5Mb25nPWkuZGVmYXVsdCxhLmRlZmF1bHQuY29uZmlndXJlKCkpfSw5NjQ3MjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5EcmF3aW5nPXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO3QuRHJhd2luZz17ZW5jb2RlKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKX0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7bi5za2lwVHlwZSg3JmUpfXJldHVybnt9fSxmcm9tUGFydGlhbDplPT4oe30pfX0sNTExMDU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRW1vamlUb0RyYXc9dC5FbW9qaT12b2lkIDA7Y29uc3QgaT1yKG4oNjIxMDApKTt0LkVtb2ppPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUudW5pY29kZSYmdC51aW50MzIoMTApLnN0cmluZyhlLnVuaWNvZGUpLFwiXCIhPT1lLmhleCYmdC51aW50MzIoMTgpLnN0cmluZyhlLmhleCksXCJcIiE9PWUuZXNjYXBlZFN0cmluZyYmdC51aW50MzIoMjYpLnN0cmluZyhlLmVzY2FwZWRTdHJpbmcpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17dW5pY29kZTpcIlwiLGhleDpcIlwiLGVzY2FwZWRTdHJpbmc6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8udW5pY29kZT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjpvLmhleD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMzpvLmVzY2FwZWRTdHJpbmc9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3VuaWNvZGU6XCJcIixoZXg6XCJcIixlc2NhcGVkU3RyaW5nOlwiXCJ9O3JldHVybiB0LnVuaWNvZGU9ZS51bmljb2RlPz9cIlwiLHQuaGV4PWUuaGV4Pz9cIlwiLHQuZXNjYXBlZFN0cmluZz1lLmVzY2FwZWRTdHJpbmc/P1wiXCIsdH19LHQuRW1vamlUb0RyYXc9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgbiBvZiBlLmVtb2ppcyl0LnVpbnQzMigxMCkuc3RyaW5nKG4pO3JldHVybiB0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e2Vtb2ppczpbXX07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP28uZW1vamlzLnB1c2gobi5zdHJpbmcoKSk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtlbW9qaXM6W119O3JldHVybiB0LmVtb2ppcz1lLmVtb2ppcz8ubWFwKChlPT5lKSl8fFtdLHR9fX0sMjU3Mzk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRW5jcnlwdGVkTWVkaWE9dC5FbmNyeXB0aW9uVHlwZT12b2lkIDA7Y29uc3QgaT1yKG4oNjIxMDApKTtmdW5jdGlvbiBvKCl7cmV0dXJue2NvbnRlbnRVcmw6XCJcIixlbmNLZXk6bmV3IFVpbnQ4QXJyYXksZW5jSXY6bmV3IFVpbnQ4QXJyYXksaXNQZXJtYW5lbnRDb250ZW50VXJsOiExLGVuY1R5cGU6MH19dmFyIGE7KGE9dC5FbmNyeXB0aW9uVHlwZXx8KHQuRW5jcnlwdGlvblR5cGU9e30pKVthLkVOQ1JZUFRJT05fVFlQRV9VTlNFVD0wXT1cIkVOQ1JZUFRJT05fVFlQRV9VTlNFVFwiLGFbYS5BRVNfR0NNPTFdPVwiQUVTX0dDTVwiLGFbYS5BRVNfQ0JDPTJdPVwiQUVTX0NCQ1wiLGFbYS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsdC5FbmNyeXB0ZWRNZWRpYT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmNvbnRlbnRVcmwmJnQudWludDMyKDEwKS5zdHJpbmcoZS5jb250ZW50VXJsKSwwIT09ZS5lbmNLZXkubGVuZ3RoJiZ0LnVpbnQzMigxOCkuYnl0ZXMoZS5lbmNLZXkpLDAhPT1lLmVuY0l2Lmxlbmd0aCYmdC51aW50MzIoMjYpLmJ5dGVzKGUuZW5jSXYpLCEwPT09ZS5pc1Blcm1hbmVudENvbnRlbnRVcmwmJnQudWludDMyKDMyKS5ib29sKGUuaXNQZXJtYW5lbnRDb250ZW50VXJsKSwwIT09ZS5lbmNUeXBlJiZ0LnVpbnQzMig0MCkuaW50MzIoZS5lbmNUeXBlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGE9bygpO2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLmNvbnRlbnRVcmw9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6YS5lbmNLZXk9bi5ieXRlcygpO2JyZWFrO2Nhc2UgMzphLmVuY0l2PW4uYnl0ZXMoKTticmVhaztjYXNlIDQ6YS5pc1Blcm1hbmVudENvbnRlbnRVcmw9bi5ib29sKCk7YnJlYWs7Y2FzZSA1OmEuZW5jVHlwZT1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PW8oKTtyZXR1cm4gdC5jb250ZW50VXJsPWUuY29udGVudFVybD8/XCJcIix0LmVuY0tleT1lLmVuY0tleT8/bmV3IFVpbnQ4QXJyYXksdC5lbmNJdj1lLmVuY0l2Pz9uZXcgVWludDhBcnJheSx0LmlzUGVybWFuZW50Q29udGVudFVybD1lLmlzUGVybWFuZW50Q29udGVudFVybD8/ITEsdC5lbmNUeXBlPWUuZW5jVHlwZT8/MCx0fX19LDc5MDM3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkZpbHRlcl9DbGllbnRPcmRlcmluZ0luZm89dC5GaWx0ZXJfQXR0YWNobWVudF9Mb25nRm9ybVZpZGVvPXQuRmlsdGVyX0F0dGFjaG1lbnQ9dC5GaWx0ZXJfQXVkaW89dC5GaWx0ZXJfU3BvbnNvcmVkVHJhY2tJbmZvPXQuRmlsdGVyX1Nwb25zb3JlZFNsdWc9dC5GaWx0ZXJfU3BvbnNvcmVkRmlsdGVySW5mb19UcmFja0luZm89dC5GaWx0ZXJfU3BvbnNvcmVkRmlsdGVySW5mbz10LkZpbHRlcl9EeW5hbWljRmlsdGVySW5mb19Db250ZXh0X1RpbWVDb21wb25lbnQ9dC5GaWx0ZXJfRHluYW1pY0ZpbHRlckluZm9fQ29udGV4dF9EZWVwbGlua1Byb3BlcnRpZXNFbnRyeT10LkZpbHRlcl9EeW5hbWljRmlsdGVySW5mb19Db250ZXh0PXQuRmlsdGVyX0R5bmFtaWNGaWx0ZXJJbmZvX0NvbnRlbnRTZXR0aW5ncz10LkZpbHRlcl9EeW5hbWljRmlsdGVySW5mb19Db250ZW50X0NvbXBhbmlvbkNyZWF0aXZlSW5mb19SYXRpbmdTdGlja2VyPXQuRmlsdGVyX0R5bmFtaWNGaWx0ZXJJbmZvX0NvbnRlbnRfQ29tcGFuaW9uQ3JlYXRpdmVJbmZvPXQuRmlsdGVyX0R5bmFtaWNGaWx0ZXJJbmZvX0NvbnRlbnRfRGlzcGxheVBhcmFtZXRlcnNfRHluYW1pY0NvdW50ZG93bj10LkZpbHRlcl9EeW5hbWljRmlsdGVySW5mb19Db250ZW50X0Rpc3BsYXlQYXJhbWV0ZXJzX0R5bmFtaWNUZXh0PXQuRmlsdGVyX0R5bmFtaWNGaWx0ZXJJbmZvX0NvbnRlbnRfRGlzcGxheVBhcmFtZXRlcnNfVGV4dFNoYWRvdz10LkZpbHRlcl9EeW5hbWljRmlsdGVySW5mb19Db250ZW50X0Rpc3BsYXlQYXJhbWV0ZXJzPXQuRmlsdGVyX0R5bmFtaWNGaWx0ZXJJbmZvX0NvbnRlbnRfTGF5b3V0UGFyYW1ldGVycz10LkZpbHRlcl9EeW5hbWljRmlsdGVySW5mb19Db250ZW50PXQuRmlsdGVyX0R5bmFtaWNGaWx0ZXJJbmZvPXQuRmlsdGVyX0JpdG1vamlGaWx0ZXJJbmZvPXQuRmlsdGVyX0ZyYW1lRmlsdGVySW5mbz10LkZpbHRlcl9GcmllbmRGaWx0ZXJJbmZvPXQuRmlsdGVyX0NsaWVudFRhcmdldGluZ0luZm9fR2VvZmVuY2U9dC5GaWx0ZXJfQ2xpZW50VGFyZ2V0aW5nSW5mbz10LkZpbHRlcl9NZWRpYV9VcmxQYXJhbXNFbnRyeT10LkZpbHRlcl9NZWRpYT10LkZpbHRlcj10LkZpbHRlclJlcXVlc3Q9dC5GaWx0ZXJfQ2xpZW50R2VuZXJhdGVkRmlsdGVyX01vdGlvbkZpbHRlcl9UeXBlPXQuRmlsdGVyX0NsaWVudEdlbmVyYXRlZEZpbHRlcl9Db2xvckZpbHRlcl9UeXBlPXQuRmlsdGVyX1RvYXN0TWVzc2FnZV9Qb3NpdGlvbj10LkZpbHRlcl9BclNlZ21lbnRhdGlvbkluZm9fU2t5RmlsdGVyX1N0eWxlPXQuRmlsdGVyX0FyU2VnbWVudGF0aW9uSW5mb19Ta3lGaWx0ZXJfU2t5VHlwZT10LkZpbHRlcl9DbGllbnRSZW5kZXJpbmdJbmZvX1Bvc2l0aW9uPXQuRmlsdGVyX0NsaWVudFJlbmRlcmluZ0luZm9fU2NhbGU9dC5GaWx0ZXJfQXR0YWNobWVudF9Mb25nRm9ybVZpZGVvX1BsYXRmb3JtPXQuRmlsdGVyX1Nwb25zb3JlZFNsdWdfUG9zaXRpb249dC5GaWx0ZXJfRHluYW1pY0ZpbHRlckluZm9fQ29udGV4dF9UaW1lQ29tcG9uZW50X1RpbWVVbml0PXQuRmlsdGVyX0R5bmFtaWNGaWx0ZXJJbmZvX0NvbnRlbnRfRGlzcGxheVBhcmFtZXRlcnNfRHluYW1pY0NvdW50ZG93bl9UYXJnZXREYXRldGltZURpcmVjdGlvbj10LkZpbHRlcl9EeW5hbWljRmlsdGVySW5mb19Db250ZW50X0Rpc3BsYXlQYXJhbWV0ZXJzX0R5bmFtaWNUZXh0X0NhcGl0YWxpemF0aW9uPXQuRmlsdGVyX0R5bmFtaWNGaWx0ZXJJbmZvX0NvbnRlbnRfRGlzcGxheVBhcmFtZXRlcnNfRmFsbGJhY2tNZXRob2Q9dC5GaWx0ZXJfRHluYW1pY0ZpbHRlckluZm9fQ29udGVudF9EaXNwbGF5UGFyYW1ldGVyc19UZXh0QWxpZ25tZW50PXQuRmlsdGVyX0R5bmFtaWNGaWx0ZXJJbmZvX0NvbnRlbnRfVHlwZT10LkZpbHRlcl9GcmllbmRGaWx0ZXJJbmZvX1RyaWdnZXJDb250ZXh0PXQuRmlsdGVyX0ZyaWVuZEZpbHRlckluZm9fRnJpZW5kQ29udGV4dD10LkZpbHRlcl9DbGllbnRUYXJnZXRpbmdJbmZvX01lZGlhVHlwZUNvbnRleHQ9dC5GaWx0ZXJfQ2xpZW50VGFyZ2V0aW5nSW5mb19DYW1lcmFDb250ZXh0PXQuRmlsdGVyX0F1dG9TdGFja0ZpbHRlclR5cGU9dm9pZCAwLHQuRmlsdGVyX0NsaWVudEdlbmVyYXRlZEZpbHRlcl9Nb3Rpb25GaWx0ZXI9dC5GaWx0ZXJfQ2xpZW50R2VuZXJhdGVkRmlsdGVyX0NvbG9yRmlsdGVyPXQuRmlsdGVyX0NsaWVudEdlbmVyYXRlZEZpbHRlcj10LkZpbHRlcl9Ub2FzdE1lc3NhZ2U9dC5GaWx0ZXJfVG9vbHRpcD10LkZpbHRlcl9BclNlZ21lbnRhdGlvbkluZm9fUG9ydHJhaXRGaWx0ZXI9dC5GaWx0ZXJfQXJTZWdtZW50YXRpb25JbmZvX1NreUZpbHRlcj10LkZpbHRlcl9BclNlZ21lbnRhdGlvbkluZm89dC5GaWx0ZXJfQ2xpZW50UmVuZGVyaW5nSW5mbz10LkZpbHRlcl9DbGllbnRPcmRlcmluZ0luZm9fQ2Fyb3VzZWxHcm91cEluZm89dm9pZCAwO2NvbnN0IGk9cihuKDQxNTgzKSksbz1uKDQxOTkzKSxhPW4oNjY3MjIpLHM9bigxOTQ0NSksYz1uKDY0OTIyKSxsPW4oNjk2NyksdT1yKG4oNjIxMDApKSxkPW4oODM0NjIpLGY9bigzNDYwMykscD1uKDg4NzA4KTtmdW5jdGlvbiBtKCl7cmV0dXJue2ZpbHRlcklkOlwiMFwiLG1lZGlhOnZvaWQgMCxjbGllbnRUYXJnZXRpbmdJbmZvOnZvaWQgMCxmcmllbmRGaWx0ZXJJbmZvOnZvaWQgMCxmcmFtZUZpbHRlckluZm86dm9pZCAwLGJpdG1vamlGaWx0ZXJJbmZvOnZvaWQgMCxkeW5hbWljRmlsdGVySW5mbzp2b2lkIDAsc3BvbnNvcmVkRmlsdGVySW5mbzp2b2lkIDAsaXNTcG9uc29yZWQ6ITEsc3BvbnNvcmVkU2x1Zzp2b2lkIDAsc3BvbnNvcmVkVHJhY2tJbmZvOnZvaWQgMCxhdWRpbzp2b2lkIDAsYXR0YWNobWVudDp2b2lkIDAsY2xpZW50T3JkZXJpbmdJbmZvOnZvaWQgMCxjbGllbnRSZW5kZXJpbmdJbmZvOnZvaWQgMCxjbGllbnRDYWNoZVR0bE1pbnV0ZXM6XCIwXCIsYXV0b1N0YWNrRmlsdGVyVHlwZTowLGFyU2VnbWVudGF0aW9uSW5mbzp2b2lkIDAsdG9vbHRpcDp2b2lkIDAsdG9hc3RNZXNzYWdlOnZvaWQgMCxlbmNHZW9EYXRhOm5ldyBVaW50OEFycmF5LGNsaWVudEdlbkZpbHRlcjp2b2lkIDB9fWZ1bmN0aW9uIGgoKXtyZXR1cm57YWRTZXJ2ZVJlcXVlc3RJZDpcIlwiLHJhd0FkRGF0YTpuZXcgVWludDhBcnJheSxza2lwVHJhY2tpbmc6ITEsZW5jcnlwdGVkU3BvbnNvcmVkVW5sb2NrYWJsZVRhcmdldGluZ0luZm9EYXRhOm5ldyBVaW50OEFycmF5LHJhbmtpbmdJZDpcIlwiLHJhbmtpbmdEYXRhOm5ldyBVaW50OEFycmF5LGVuY3J5cHRlZFVzZXJUcmFja0RhdGE6bmV3IFVpbnQ4QXJyYXksc2tBZE5ldHdvcmtBdHRyaWJ1dGlvbjpuZXcgVWludDhBcnJheSxhZElkOm5ldyBVaW50OEFycmF5fX1mdW5jdGlvbiB2KCl7cmV0dXJue2FkU2VydmVSZXF1ZXN0SWQ6XCJcIixyYXdBZERhdGE6bmV3IFVpbnQ4QXJyYXksc2tpcFRyYWNraW5nOiExLGVuY3J5cHRlZFNwb25zb3JlZFVubG9ja2FibGVUYXJnZXRpbmdJbmZvRGF0YTpuZXcgVWludDhBcnJheSxyYW5raW5nSWQ6XCJcIixyYW5raW5nRGF0YTpuZXcgVWludDhBcnJheSxlbmNyeXB0ZWRVc2VyVHJhY2tEYXRhOm5ldyBVaW50OEFycmF5LHNrQWROZXR3b3JrQXR0cmlidXRpb246bmV3IFVpbnQ4QXJyYXksYWRJZDpuZXcgVWludDhBcnJheX19ZnVuY3Rpb24gZyhlKXtyZXR1cm4gZS50b1N0cmluZygpfXZhciB5LEUsXyxJLFMsYixULEMsQSxSLGssTyxOLHcsRCxQLE0sTCxVLHg7KHg9dC5GaWx0ZXJfQXV0b1N0YWNrRmlsdGVyVHlwZXx8KHQuRmlsdGVyX0F1dG9TdGFja0ZpbHRlclR5cGU9e30pKVt4LkFVVE9fU1RBQ0tfVU5TRVQ9MF09XCJBVVRPX1NUQUNLX1VOU0VUXCIseFt4LlVORklMVEVSRUQ9MV09XCJVTkZJTFRFUkVEXCIseFt4LklOU1RBU05BUD0yXT1cIklOU1RBU05BUFwiLHhbeC5NSVNTX0VUSUtBVEU9M109XCJNSVNTX0VUSUtBVEVcIix4W3guR1JFWVNDQUxFPTRdPVwiR1JFWVNDQUxFXCIseFt4LlNNT09USElORz01XT1cIlNNT09USElOR1wiLHhbeC5TS1lfREFZTElHSFQ9Nl09XCJTS1lfREFZTElHSFRcIix4W3guU0tZX1NVTlNFVD03XT1cIlNLWV9TVU5TRVRcIix4W3guU0tZX05JR0hUPThdPVwiU0tZX05JR0hUXCIseFt4LlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwoVT10LkZpbHRlcl9DbGllbnRUYXJnZXRpbmdJbmZvX0NhbWVyYUNvbnRleHR8fCh0LkZpbHRlcl9DbGllbnRUYXJnZXRpbmdJbmZvX0NhbWVyYUNvbnRleHQ9e30pKVtVLkNBTUVSQV9DT05URVhUX1VOU0VUPTBdPVwiQ0FNRVJBX0NPTlRFWFRfVU5TRVRcIixVW1UuRlJPTlRfRkFDSU5HPTFdPVwiRlJPTlRfRkFDSU5HXCIsVVtVLlJFQVJfRkFDSU5HPTJdPVwiUkVBUl9GQUNJTkdcIixVW1UuTUlYRURfRkFDSU5HPTNdPVwiTUlYRURfRkFDSU5HXCIsVVtVLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwoTD10LkZpbHRlcl9DbGllbnRUYXJnZXRpbmdJbmZvX01lZGlhVHlwZUNvbnRleHR8fCh0LkZpbHRlcl9DbGllbnRUYXJnZXRpbmdJbmZvX01lZGlhVHlwZUNvbnRleHQ9e30pKVtMLk1FRElBX1RZUEVfQ09OVEVYVF9VTlNFVD0wXT1cIk1FRElBX1RZUEVfQ09OVEVYVF9VTlNFVFwiLExbTC5JTUFHRT0xXT1cIklNQUdFXCIsTFtMLlZJREVPPTJdPVwiVklERU9cIixMW0wuVklERU9fTk9fU09VTkQ9M109XCJWSURFT19OT19TT1VORFwiLExbTC5WSURFT19TT1VORF9MQUdVTkE9NF09XCJWSURFT19TT1VORF9MQUdVTkFcIixMW0wuVklERU9fTk9fU09VTkRfTEFHVU5BPTVdPVwiVklERU9fTk9fU09VTkRfTEFHVU5BXCIsTFtMLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwoTT10LkZpbHRlcl9GcmllbmRGaWx0ZXJJbmZvX0ZyaWVuZENvbnRleHR8fCh0LkZpbHRlcl9GcmllbmRGaWx0ZXJJbmZvX0ZyaWVuZENvbnRleHQ9e30pKVtNLkZSSUVORF9DT05URVhUX1VOU0VUPTBdPVwiRlJJRU5EX0NPTlRFWFRfVU5TRVRcIixNW00uQklSVEhEQVk9MV09XCJCSVJUSERBWVwiLE1bTS5ORVdfRlJJRU5EPTJdPVwiTkVXX0ZSSUVORFwiLE1bTS5CRUNPTUVfQkZGPTNdPVwiQkVDT01FX0JGRlwiLE1bTS5CRUNPTUVfU0JGRj00XT1cIkJFQ09NRV9TQkZGXCIsTVtNLkJGRj01XT1cIkJGRlwiLE1bTS5TQkZGPTZdPVwiU0JGRlwiLE1bTS5BTllfRlJJRU5EPTddPVwiQU5ZX0ZSSUVORFwiLE1bTS5TTUlSSz04XT1cIlNNSVJLXCIsTVtNLkJFU1RJRVM9OV09XCJCRVNUSUVTXCIsTVtNLk1VVFVBTF9CRVNUSUVTPTEwXT1cIk1VVFVBTF9CRVNUSUVTXCIsTVtNLkJGPTExXT1cIkJGXCIsTVtNLk1VVFVBTF9CRj0xMl09XCJNVVRVQUxfQkZcIixNW00uU05BUF9TVFJFQUs9MTNdPVwiU05BUF9TVFJFQUtcIixNW00uU1RSRUFLX0hPVVJHTEFTUz0xNF09XCJTVFJFQUtfSE9VUkdMQVNTXCIsTVtNLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwoUD10LkZpbHRlcl9GcmllbmRGaWx0ZXJJbmZvX1RyaWdnZXJDb250ZXh0fHwodC5GaWx0ZXJfRnJpZW5kRmlsdGVySW5mb19UcmlnZ2VyQ29udGV4dD17fSkpW1AuVFJJR0dFUl9DT05URVhUX1VOU0VUPTBdPVwiVFJJR0dFUl9DT05URVhUX1VOU0VUXCIsUFtQLk9QRU5fQ0FNRVJBPTFdPVwiT1BFTl9DQU1FUkFcIixQW1AuT05FX1RPX09ORV9DSEFUPTJdPVwiT05FX1RPX09ORV9DSEFUXCIsUFtQLkdST1VQX0NIQVQ9M109XCJHUk9VUF9DSEFUXCIsUFtQLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwoRD10LkZpbHRlcl9EeW5hbWljRmlsdGVySW5mb19Db250ZW50X1R5cGV8fCh0LkZpbHRlcl9EeW5hbWljRmlsdGVySW5mb19Db250ZW50X1R5cGU9e30pKVtELlVOU0VUPTBdPVwiVU5TRVRcIixEW0QuVEVYVD0xXT1cIlRFWFRcIixEW0QuSU1BR0U9Ml09XCJJTUFHRVwiLERbRC5TTUFSVF9GSUxURVI9M109XCJTTUFSVF9GSUxURVJcIixEW0QuQ09NUEFOSU9OX0NSRUFUSVZFPTRdPVwiQ09NUEFOSU9OX0NSRUFUSVZFXCIsRFtELlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwodz10LkZpbHRlcl9EeW5hbWljRmlsdGVySW5mb19Db250ZW50X0Rpc3BsYXlQYXJhbWV0ZXJzX1RleHRBbGlnbm1lbnR8fCh0LkZpbHRlcl9EeW5hbWljRmlsdGVySW5mb19Db250ZW50X0Rpc3BsYXlQYXJhbWV0ZXJzX1RleHRBbGlnbm1lbnQ9e30pKVt3LlRFWFRfQUxJR05NRU5UX1VOU0VUPTBdPVwiVEVYVF9BTElHTk1FTlRfVU5TRVRcIix3W3cuTEVGVD0xXT1cIkxFRlRcIix3W3cuQ0VOVEVSPTJdPVwiQ0VOVEVSXCIsd1t3LlJJR0hUPTNdPVwiUklHSFRcIix3W3cuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLChOPXQuRmlsdGVyX0R5bmFtaWNGaWx0ZXJJbmZvX0NvbnRlbnRfRGlzcGxheVBhcmFtZXRlcnNfRmFsbGJhY2tNZXRob2R8fCh0LkZpbHRlcl9EeW5hbWljRmlsdGVySW5mb19Db250ZW50X0Rpc3BsYXlQYXJhbWV0ZXJzX0ZhbGxiYWNrTWV0aG9kPXt9KSlbTi5GQUxMQkFDS19NRVRIT0RfVU5TRVQ9MF09XCJGQUxMQkFDS19NRVRIT0RfVU5TRVRcIixOW04uRkFMTEJBQ0tfVEVYVD0xXT1cIkZBTExCQUNLX1RFWFRcIixOW04uVFJVTkNBVElPTj0yXT1cIlRSVU5DQVRJT05cIixOW04uQ0FST1VTRUxfUkVNT1ZBTD0zXT1cIkNBUk9VU0VMX1JFTU9WQUxcIixOW04uVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLChPPXQuRmlsdGVyX0R5bmFtaWNGaWx0ZXJJbmZvX0NvbnRlbnRfRGlzcGxheVBhcmFtZXRlcnNfRHluYW1pY1RleHRfQ2FwaXRhbGl6YXRpb258fCh0LkZpbHRlcl9EeW5hbWljRmlsdGVySW5mb19Db250ZW50X0Rpc3BsYXlQYXJhbWV0ZXJzX0R5bmFtaWNUZXh0X0NhcGl0YWxpemF0aW9uPXt9KSlbTy5DQVBJVEFMSVpBVElPTl9VTlNFVD0wXT1cIkNBUElUQUxJWkFUSU9OX1VOU0VUXCIsT1tPLlVQUEVSPTFdPVwiVVBQRVJcIixPW08uTE9XRVI9Ml09XCJMT1dFUlwiLE9bTy5NSVhFRD0zXT1cIk1JWEVEXCIsT1tPLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwoaz10LkZpbHRlcl9EeW5hbWljRmlsdGVySW5mb19Db250ZW50X0Rpc3BsYXlQYXJhbWV0ZXJzX0R5bmFtaWNDb3VudGRvd25fVGFyZ2V0RGF0ZXRpbWVEaXJlY3Rpb258fCh0LkZpbHRlcl9EeW5hbWljRmlsdGVySW5mb19Db250ZW50X0Rpc3BsYXlQYXJhbWV0ZXJzX0R5bmFtaWNDb3VudGRvd25fVGFyZ2V0RGF0ZXRpbWVEaXJlY3Rpb249e30pKVtrLlRBUkdFVF9EQVRFVElNRV9ESVJFQ1RJT05fVU5TRVQ9MF09XCJUQVJHRVRfREFURVRJTUVfRElSRUNUSU9OX1VOU0VUXCIsa1trLkZVVFVSRT0xXT1cIkZVVFVSRVwiLGtbay5QQVNUPTJdPVwiUEFTVFwiLGtbay5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKFI9dC5GaWx0ZXJfRHluYW1pY0ZpbHRlckluZm9fQ29udGV4dF9UaW1lQ29tcG9uZW50X1RpbWVVbml0fHwodC5GaWx0ZXJfRHluYW1pY0ZpbHRlckluZm9fQ29udGV4dF9UaW1lQ29tcG9uZW50X1RpbWVVbml0PXt9KSlbUi5VTlNFVD0wXT1cIlVOU0VUXCIsUltSLllFQVI9MV09XCJZRUFSXCIsUltSLk1PTlRIPTJdPVwiTU9OVEhcIixSW1IuREFZPTNdPVwiREFZXCIsUltSLkhPVVI9NF09XCJIT1VSXCIsUltSLk1JTlVURT01XT1cIk1JTlVURVwiLFJbUi5TRUNPTkQ9Nl09XCJTRUNPTkRcIixSW1IuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLChBPXQuRmlsdGVyX1Nwb25zb3JlZFNsdWdfUG9zaXRpb258fCh0LkZpbHRlcl9TcG9uc29yZWRTbHVnX1Bvc2l0aW9uPXt9KSlbQS5QT1NJVElPTl9VTlNFVD0wXT1cIlBPU0lUSU9OX1VOU0VUXCIsQVtBLlRPUF9MRUZUPTFdPVwiVE9QX0xFRlRcIixBW0EuVE9QX0NFTlRFUj0yXT1cIlRPUF9DRU5URVJcIixBW0EuVE9QX1JJR0hUPTNdPVwiVE9QX1JJR0hUXCIsQVtBLkJPVFRPTV9MRUZUPTRdPVwiQk9UVE9NX0xFRlRcIixBW0EuQk9UVE9NX0NFTlRFUj01XT1cIkJPVFRPTV9DRU5URVJcIixBW0EuQk9UVE9NX1JJR0hUPTZdPVwiQk9UVE9NX1JJR0hUXCIsQVtBLk1JRERMRV9MRUZUPTddPVwiTUlERExFX0xFRlRcIixBW0EuTUlERExFX0NFTlRFUj04XT1cIk1JRERMRV9DRU5URVJcIixBW0EuTUlERExFX1JJR0hUPTldPVwiTUlERExFX1JJR0hUXCIsQVtBLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwoQz10LkZpbHRlcl9BdHRhY2htZW50X0xvbmdGb3JtVmlkZW9fUGxhdGZvcm18fCh0LkZpbHRlcl9BdHRhY2htZW50X0xvbmdGb3JtVmlkZW9fUGxhdGZvcm09e30pKVtDLlVOU0VUPTBdPVwiVU5TRVRcIixDW0MuQlJJR0hUQ09WRT0xXT1cIkJSSUdIVENPVkVcIixDW0MuU05BUENIQVQ9Ml09XCJTTkFQQ0hBVFwiLENbQy5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKFQ9dC5GaWx0ZXJfQ2xpZW50UmVuZGVyaW5nSW5mb19TY2FsZXx8KHQuRmlsdGVyX0NsaWVudFJlbmRlcmluZ0luZm9fU2NhbGU9e30pKVtULlNDQUxFX1VOU0VUPTBdPVwiU0NBTEVfVU5TRVRcIixUW1QuU0NBTEVfVE9fRklMTD0xXT1cIlNDQUxFX1RPX0ZJTExcIixUW1QuQVNQRUNUX0ZJVD0yXT1cIkFTUEVDVF9GSVRcIixUW1QuQVNQRUNUX0ZJTEw9M109XCJBU1BFQ1RfRklMTFwiLFRbVC5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKGI9dC5GaWx0ZXJfQ2xpZW50UmVuZGVyaW5nSW5mb19Qb3NpdGlvbnx8KHQuRmlsdGVyX0NsaWVudFJlbmRlcmluZ0luZm9fUG9zaXRpb249e30pKVtiLlBPU0lUSU9OX1VOU0VUPTBdPVwiUE9TSVRJT05fVU5TRVRcIixiW2IuVE9QPTFdPVwiVE9QXCIsYltiLkJPVFRPTT0yXT1cIkJPVFRPTVwiLGJbYi5MRUZUPTNdPVwiTEVGVFwiLGJbYi5SSUdIVD00XT1cIlJJR0hUXCIsYltiLlRPUF9MRUZUPTVdPVwiVE9QX0xFRlRcIixiW2IuVE9QX1JJR0hUPTZdPVwiVE9QX1JJR0hUXCIsYltiLkJPVFRPTV9MRUZUPTddPVwiQk9UVE9NX0xFRlRcIixiW2IuQk9UVE9NX1JJR0hUPThdPVwiQk9UVE9NX1JJR0hUXCIsYltiLkNFTlRFUj05XT1cIkNFTlRFUlwiLGJbYi5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKFM9dC5GaWx0ZXJfQXJTZWdtZW50YXRpb25JbmZvX1NreUZpbHRlcl9Ta3lUeXBlfHwodC5GaWx0ZXJfQXJTZWdtZW50YXRpb25JbmZvX1NreUZpbHRlcl9Ta3lUeXBlPXt9KSlbUy5TS1lfVFlQRV9VTlNFVD0wXT1cIlNLWV9UWVBFX1VOU0VUXCIsU1tTLkRBWVRJTUU9MV09XCJEQVlUSU1FXCIsU1tTLlNVTlNFVD0yXT1cIlNVTlNFVFwiLFNbUy5OSUdIVFRJTUU9M109XCJOSUdIVFRJTUVcIixTW1MuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLChJPXQuRmlsdGVyX0FyU2VnbWVudGF0aW9uSW5mb19Ta3lGaWx0ZXJfU3R5bGV8fCh0LkZpbHRlcl9BclNlZ21lbnRhdGlvbkluZm9fU2t5RmlsdGVyX1N0eWxlPXt9KSlbSS5TVFlMRV9VTlNFVD0wXT1cIlNUWUxFX1VOU0VUXCIsSVtJLlJFR1VMQVI9MV09XCJSRUdVTEFSXCIsSVtJLkNBUlRPT049Ml09XCJDQVJUT09OXCIsSVtJLkFVR01FTlRFRD0zXT1cIkFVR01FTlRFRFwiLElbSS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKF89dC5GaWx0ZXJfVG9hc3RNZXNzYWdlX1Bvc2l0aW9ufHwodC5GaWx0ZXJfVG9hc3RNZXNzYWdlX1Bvc2l0aW9uPXt9KSlbXy5QT1NJVElPTl9VTlNFVD0wXT1cIlBPU0lUSU9OX1VOU0VUXCIsX1tfLlRPUD0xXT1cIlRPUFwiLF9bXy5NSURETEU9Ml09XCJNSURETEVcIixfW18uQk9UVE9NPTNdPVwiQk9UVE9NXCIsX1tfLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwoRT10LkZpbHRlcl9DbGllbnRHZW5lcmF0ZWRGaWx0ZXJfQ29sb3JGaWx0ZXJfVHlwZXx8KHQuRmlsdGVyX0NsaWVudEdlbmVyYXRlZEZpbHRlcl9Db2xvckZpbHRlcl9UeXBlPXt9KSlbRS5VTlNFVD0wXT1cIlVOU0VUXCIsRVtFLlNNT09USElORz0xXT1cIlNNT09USElOR1wiLEVbRS5JTlNUQVNOQVA9Ml09XCJJTlNUQVNOQVBcIixFW0UuTUlTU19FVElLQVRFPTNdPVwiTUlTU19FVElLQVRFXCIsRVtFLkdSRVlTQ0FMRT00XT1cIkdSRVlTQ0FMRVwiLEVbRS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKHk9dC5GaWx0ZXJfQ2xpZW50R2VuZXJhdGVkRmlsdGVyX01vdGlvbkZpbHRlcl9UeXBlfHwodC5GaWx0ZXJfQ2xpZW50R2VuZXJhdGVkRmlsdGVyX01vdGlvbkZpbHRlcl9UeXBlPXt9KSlbeS5VTlNFVD0wXT1cIlVOU0VUXCIseVt5LlNMT1c9MV09XCJTTE9XXCIseVt5LkZBU1Q9Ml09XCJGQVNUXCIseVt5LlNVUEVSRkFTVD0zXT1cIlNVUEVSRkFTVFwiLHlbeS5SRVZFUlNFPTRdPVwiUkVWRVJTRVwiLHlbeS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsdC5GaWx0ZXJSZXF1ZXN0PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnUuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7dm9pZCAwIT09ZS5hZFJlcXVlc3QmJm8uQWRSZXF1ZXN0LmVuY29kZShlLmFkUmVxdWVzdCx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx0LnVpbnQzMigxOCkuZm9yaygpO2Zvcihjb25zdCBuIG9mIGUuZGVidWdGaWx0ZXJJZHMpdC51aW50NjQobik7cmV0dXJuIHQubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgdS5kZWZhdWx0LlJlYWRlcj9lOm5ldyB1LmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXthZFJlcXVlc3Q6dm9pZCAwLGRlYnVnRmlsdGVySWRzOltdfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5hZFJlcXVlc3Q9by5BZFJlcXVlc3QuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOmlmKDI9PSg3JmUpKXtjb25zdCBlPW4udWludDMyKCkrbi5wb3M7Zm9yKDtuLnBvczxlOylpLmRlYnVnRmlsdGVySWRzLnB1c2goZyhuLnVpbnQ2NCgpKSl9ZWxzZSBpLmRlYnVnRmlsdGVySWRzLnB1c2goZyhuLnVpbnQ2NCgpKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXthZFJlcXVlc3Q6dm9pZCAwLGRlYnVnRmlsdGVySWRzOltdfTtyZXR1cm4gdC5hZFJlcXVlc3Q9dm9pZCAwIT09ZS5hZFJlcXVlc3QmJm51bGwhPT1lLmFkUmVxdWVzdD9vLkFkUmVxdWVzdC5mcm9tUGFydGlhbChlLmFkUmVxdWVzdCk6dm9pZCAwLHQuZGVidWdGaWx0ZXJJZHM9ZS5kZWJ1Z0ZpbHRlcklkcz8ubWFwKChlPT5lKSl8fFtdLHR9fSx0LkZpbHRlcj17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp1LmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiMFwiIT09ZS5maWx0ZXJJZCYmbi51aW50MzIoOCkudWludDY0KGUuZmlsdGVySWQpLHZvaWQgMCE9PWUubWVkaWEmJnQuRmlsdGVyX01lZGlhLmVuY29kZShlLm1lZGlhLG4udWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuY2xpZW50VGFyZ2V0aW5nSW5mbyYmdC5GaWx0ZXJfQ2xpZW50VGFyZ2V0aW5nSW5mby5lbmNvZGUoZS5jbGllbnRUYXJnZXRpbmdJbmZvLG4udWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuZnJpZW5kRmlsdGVySW5mbyYmdC5GaWx0ZXJfRnJpZW5kRmlsdGVySW5mby5lbmNvZGUoZS5mcmllbmRGaWx0ZXJJbmZvLG4udWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuZnJhbWVGaWx0ZXJJbmZvJiZ0LkZpbHRlcl9GcmFtZUZpbHRlckluZm8uZW5jb2RlKGUuZnJhbWVGaWx0ZXJJbmZvLG4udWludDMyKDQyKS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuYml0bW9qaUZpbHRlckluZm8mJnQuRmlsdGVyX0JpdG1vamlGaWx0ZXJJbmZvLmVuY29kZShlLmJpdG1vamlGaWx0ZXJJbmZvLG4udWludDMyKDUwKS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuZHluYW1pY0ZpbHRlckluZm8mJnQuRmlsdGVyX0R5bmFtaWNGaWx0ZXJJbmZvLmVuY29kZShlLmR5bmFtaWNGaWx0ZXJJbmZvLG4udWludDMyKDU4KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuc3BvbnNvcmVkRmlsdGVySW5mbyYmdC5GaWx0ZXJfU3BvbnNvcmVkRmlsdGVySW5mby5lbmNvZGUoZS5zcG9uc29yZWRGaWx0ZXJJbmZvLG4udWludDMyKDY2KS5mb3JrKCkpLmxkZWxpbSgpLCEwPT09ZS5pc1Nwb25zb3JlZCYmbi51aW50MzIoMTQ0KS5ib29sKGUuaXNTcG9uc29yZWQpLHZvaWQgMCE9PWUuc3BvbnNvcmVkU2x1ZyYmdC5GaWx0ZXJfU3BvbnNvcmVkU2x1Zy5lbmNvZGUoZS5zcG9uc29yZWRTbHVnLG4udWludDMyKDE1NCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnNwb25zb3JlZFRyYWNrSW5mbyYmdC5GaWx0ZXJfU3BvbnNvcmVkVHJhY2tJbmZvLmVuY29kZShlLnNwb25zb3JlZFRyYWNrSW5mbyxuLnVpbnQzMigxNjIpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5hdWRpbyYmdC5GaWx0ZXJfQXVkaW8uZW5jb2RlKGUuYXVkaW8sbi51aW50MzIoNzQpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5hdHRhY2htZW50JiZ0LkZpbHRlcl9BdHRhY2htZW50LmVuY29kZShlLmF0dGFjaG1lbnQsbi51aW50MzIoODIpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5jbGllbnRPcmRlcmluZ0luZm8mJnQuRmlsdGVyX0NsaWVudE9yZGVyaW5nSW5mby5lbmNvZGUoZS5jbGllbnRPcmRlcmluZ0luZm8sbi51aW50MzIoOTApLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5jbGllbnRSZW5kZXJpbmdJbmZvJiZ0LkZpbHRlcl9DbGllbnRSZW5kZXJpbmdJbmZvLmVuY29kZShlLmNsaWVudFJlbmRlcmluZ0luZm8sbi51aW50MzIoOTgpLmZvcmsoKSkubGRlbGltKCksXCIwXCIhPT1lLmNsaWVudENhY2hlVHRsTWludXRlcyYmbi51aW50MzIoMTA0KS5pbnQ2NChlLmNsaWVudENhY2hlVHRsTWludXRlcyksMCE9PWUuYXV0b1N0YWNrRmlsdGVyVHlwZSYmbi51aW50MzIoMTEyKS5pbnQzMihlLmF1dG9TdGFja0ZpbHRlclR5cGUpLHZvaWQgMCE9PWUuYXJTZWdtZW50YXRpb25JbmZvJiZ0LkZpbHRlcl9BclNlZ21lbnRhdGlvbkluZm8uZW5jb2RlKGUuYXJTZWdtZW50YXRpb25JbmZvLG4udWludDMyKDEyMikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnRvb2x0aXAmJnQuRmlsdGVyX1Rvb2x0aXAuZW5jb2RlKGUudG9vbHRpcCxuLnVpbnQzMigxMzApLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS50b2FzdE1lc3NhZ2UmJnQuRmlsdGVyX1RvYXN0TWVzc2FnZS5lbmNvZGUoZS50b2FzdE1lc3NhZ2Usbi51aW50MzIoMTM4KS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLmVuY0dlb0RhdGEubGVuZ3RoJiZuLnVpbnQzMigxNzApLmJ5dGVzKGUuZW5jR2VvRGF0YSksdm9pZCAwIT09ZS5jbGllbnRHZW5GaWx0ZXImJnQuRmlsdGVyX0NsaWVudEdlbmVyYXRlZEZpbHRlci5lbmNvZGUoZS5jbGllbnRHZW5GaWx0ZXIsbi51aW50MzIoMTc4KS5mb3JrKCkpLmxkZWxpbSgpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIHUuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgdS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz1tKCk7Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8uZmlsdGVySWQ9ZyhyLnVpbnQ2NCgpKTticmVhaztjYXNlIDI6by5tZWRpYT10LkZpbHRlcl9NZWRpYS5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDM6by5jbGllbnRUYXJnZXRpbmdJbmZvPXQuRmlsdGVyX0NsaWVudFRhcmdldGluZ0luZm8uZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSA0Om8uZnJpZW5kRmlsdGVySW5mbz10LkZpbHRlcl9GcmllbmRGaWx0ZXJJbmZvLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgNTpvLmZyYW1lRmlsdGVySW5mbz10LkZpbHRlcl9GcmFtZUZpbHRlckluZm8uZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSA2Om8uYml0bW9qaUZpbHRlckluZm89dC5GaWx0ZXJfQml0bW9qaUZpbHRlckluZm8uZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSA3Om8uZHluYW1pY0ZpbHRlckluZm89dC5GaWx0ZXJfRHluYW1pY0ZpbHRlckluZm8uZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSA4Om8uc3BvbnNvcmVkRmlsdGVySW5mbz10LkZpbHRlcl9TcG9uc29yZWRGaWx0ZXJJbmZvLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMTg6by5pc1Nwb25zb3JlZD1yLmJvb2woKTticmVhaztjYXNlIDE5Om8uc3BvbnNvcmVkU2x1Zz10LkZpbHRlcl9TcG9uc29yZWRTbHVnLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMjA6by5zcG9uc29yZWRUcmFja0luZm89dC5GaWx0ZXJfU3BvbnNvcmVkVHJhY2tJbmZvLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgOTpvLmF1ZGlvPXQuRmlsdGVyX0F1ZGlvLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMTA6by5hdHRhY2htZW50PXQuRmlsdGVyX0F0dGFjaG1lbnQuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAxMTpvLmNsaWVudE9yZGVyaW5nSW5mbz10LkZpbHRlcl9DbGllbnRPcmRlcmluZ0luZm8uZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAxMjpvLmNsaWVudFJlbmRlcmluZ0luZm89dC5GaWx0ZXJfQ2xpZW50UmVuZGVyaW5nSW5mby5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDEzOm8uY2xpZW50Q2FjaGVUdGxNaW51dGVzPWcoci5pbnQ2NCgpKTticmVhaztjYXNlIDE0Om8uYXV0b1N0YWNrRmlsdGVyVHlwZT1yLmludDMyKCk7YnJlYWs7Y2FzZSAxNTpvLmFyU2VnbWVudGF0aW9uSW5mbz10LkZpbHRlcl9BclNlZ21lbnRhdGlvbkluZm8uZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAxNjpvLnRvb2x0aXA9dC5GaWx0ZXJfVG9vbHRpcC5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDE3Om8udG9hc3RNZXNzYWdlPXQuRmlsdGVyX1RvYXN0TWVzc2FnZS5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDIxOm8uZW5jR2VvRGF0YT1yLmJ5dGVzKCk7YnJlYWs7Y2FzZSAyMjpvLmNsaWVudEdlbkZpbHRlcj10LkZpbHRlcl9DbGllbnRHZW5lcmF0ZWRGaWx0ZXIuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPW0oKTtyZXR1cm4gbi5maWx0ZXJJZD1lLmZpbHRlcklkPz9cIjBcIixuLm1lZGlhPXZvaWQgMCE9PWUubWVkaWEmJm51bGwhPT1lLm1lZGlhP3QuRmlsdGVyX01lZGlhLmZyb21QYXJ0aWFsKGUubWVkaWEpOnZvaWQgMCxuLmNsaWVudFRhcmdldGluZ0luZm89dm9pZCAwIT09ZS5jbGllbnRUYXJnZXRpbmdJbmZvJiZudWxsIT09ZS5jbGllbnRUYXJnZXRpbmdJbmZvP3QuRmlsdGVyX0NsaWVudFRhcmdldGluZ0luZm8uZnJvbVBhcnRpYWwoZS5jbGllbnRUYXJnZXRpbmdJbmZvKTp2b2lkIDAsbi5mcmllbmRGaWx0ZXJJbmZvPXZvaWQgMCE9PWUuZnJpZW5kRmlsdGVySW5mbyYmbnVsbCE9PWUuZnJpZW5kRmlsdGVySW5mbz90LkZpbHRlcl9GcmllbmRGaWx0ZXJJbmZvLmZyb21QYXJ0aWFsKGUuZnJpZW5kRmlsdGVySW5mbyk6dm9pZCAwLG4uZnJhbWVGaWx0ZXJJbmZvPXZvaWQgMCE9PWUuZnJhbWVGaWx0ZXJJbmZvJiZudWxsIT09ZS5mcmFtZUZpbHRlckluZm8/dC5GaWx0ZXJfRnJhbWVGaWx0ZXJJbmZvLmZyb21QYXJ0aWFsKGUuZnJhbWVGaWx0ZXJJbmZvKTp2b2lkIDAsbi5iaXRtb2ppRmlsdGVySW5mbz12b2lkIDAhPT1lLmJpdG1vamlGaWx0ZXJJbmZvJiZudWxsIT09ZS5iaXRtb2ppRmlsdGVySW5mbz90LkZpbHRlcl9CaXRtb2ppRmlsdGVySW5mby5mcm9tUGFydGlhbChlLmJpdG1vamlGaWx0ZXJJbmZvKTp2b2lkIDAsbi5keW5hbWljRmlsdGVySW5mbz12b2lkIDAhPT1lLmR5bmFtaWNGaWx0ZXJJbmZvJiZudWxsIT09ZS5keW5hbWljRmlsdGVySW5mbz90LkZpbHRlcl9EeW5hbWljRmlsdGVySW5mby5mcm9tUGFydGlhbChlLmR5bmFtaWNGaWx0ZXJJbmZvKTp2b2lkIDAsbi5zcG9uc29yZWRGaWx0ZXJJbmZvPXZvaWQgMCE9PWUuc3BvbnNvcmVkRmlsdGVySW5mbyYmbnVsbCE9PWUuc3BvbnNvcmVkRmlsdGVySW5mbz90LkZpbHRlcl9TcG9uc29yZWRGaWx0ZXJJbmZvLmZyb21QYXJ0aWFsKGUuc3BvbnNvcmVkRmlsdGVySW5mbyk6dm9pZCAwLG4uaXNTcG9uc29yZWQ9ZS5pc1Nwb25zb3JlZD8/ITEsbi5zcG9uc29yZWRTbHVnPXZvaWQgMCE9PWUuc3BvbnNvcmVkU2x1ZyYmbnVsbCE9PWUuc3BvbnNvcmVkU2x1Zz90LkZpbHRlcl9TcG9uc29yZWRTbHVnLmZyb21QYXJ0aWFsKGUuc3BvbnNvcmVkU2x1Zyk6dm9pZCAwLG4uc3BvbnNvcmVkVHJhY2tJbmZvPXZvaWQgMCE9PWUuc3BvbnNvcmVkVHJhY2tJbmZvJiZudWxsIT09ZS5zcG9uc29yZWRUcmFja0luZm8/dC5GaWx0ZXJfU3BvbnNvcmVkVHJhY2tJbmZvLmZyb21QYXJ0aWFsKGUuc3BvbnNvcmVkVHJhY2tJbmZvKTp2b2lkIDAsbi5hdWRpbz12b2lkIDAhPT1lLmF1ZGlvJiZudWxsIT09ZS5hdWRpbz90LkZpbHRlcl9BdWRpby5mcm9tUGFydGlhbChlLmF1ZGlvKTp2b2lkIDAsbi5hdHRhY2htZW50PXZvaWQgMCE9PWUuYXR0YWNobWVudCYmbnVsbCE9PWUuYXR0YWNobWVudD90LkZpbHRlcl9BdHRhY2htZW50LmZyb21QYXJ0aWFsKGUuYXR0YWNobWVudCk6dm9pZCAwLG4uY2xpZW50T3JkZXJpbmdJbmZvPXZvaWQgMCE9PWUuY2xpZW50T3JkZXJpbmdJbmZvJiZudWxsIT09ZS5jbGllbnRPcmRlcmluZ0luZm8/dC5GaWx0ZXJfQ2xpZW50T3JkZXJpbmdJbmZvLmZyb21QYXJ0aWFsKGUuY2xpZW50T3JkZXJpbmdJbmZvKTp2b2lkIDAsbi5jbGllbnRSZW5kZXJpbmdJbmZvPXZvaWQgMCE9PWUuY2xpZW50UmVuZGVyaW5nSW5mbyYmbnVsbCE9PWUuY2xpZW50UmVuZGVyaW5nSW5mbz90LkZpbHRlcl9DbGllbnRSZW5kZXJpbmdJbmZvLmZyb21QYXJ0aWFsKGUuY2xpZW50UmVuZGVyaW5nSW5mbyk6dm9pZCAwLG4uY2xpZW50Q2FjaGVUdGxNaW51dGVzPWUuY2xpZW50Q2FjaGVUdGxNaW51dGVzPz9cIjBcIixuLmF1dG9TdGFja0ZpbHRlclR5cGU9ZS5hdXRvU3RhY2tGaWx0ZXJUeXBlPz8wLG4uYXJTZWdtZW50YXRpb25JbmZvPXZvaWQgMCE9PWUuYXJTZWdtZW50YXRpb25JbmZvJiZudWxsIT09ZS5hclNlZ21lbnRhdGlvbkluZm8/dC5GaWx0ZXJfQXJTZWdtZW50YXRpb25JbmZvLmZyb21QYXJ0aWFsKGUuYXJTZWdtZW50YXRpb25JbmZvKTp2b2lkIDAsbi50b29sdGlwPXZvaWQgMCE9PWUudG9vbHRpcCYmbnVsbCE9PWUudG9vbHRpcD90LkZpbHRlcl9Ub29sdGlwLmZyb21QYXJ0aWFsKGUudG9vbHRpcCk6dm9pZCAwLG4udG9hc3RNZXNzYWdlPXZvaWQgMCE9PWUudG9hc3RNZXNzYWdlJiZudWxsIT09ZS50b2FzdE1lc3NhZ2U/dC5GaWx0ZXJfVG9hc3RNZXNzYWdlLmZyb21QYXJ0aWFsKGUudG9hc3RNZXNzYWdlKTp2b2lkIDAsbi5lbmNHZW9EYXRhPWUuZW5jR2VvRGF0YT8/bmV3IFVpbnQ4QXJyYXksbi5jbGllbnRHZW5GaWx0ZXI9dm9pZCAwIT09ZS5jbGllbnRHZW5GaWx0ZXImJm51bGwhPT1lLmNsaWVudEdlbkZpbHRlcj90LkZpbHRlcl9DbGllbnRHZW5lcmF0ZWRGaWx0ZXIuZnJvbVBhcnRpYWwoZS5jbGllbnRHZW5GaWx0ZXIpOnZvaWQgMCxufX0sdC5GaWx0ZXJfTWVkaWE9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5tZWRpYUNvbnRlbnQmJmEuTWVkaWFDb250ZW50LmVuY29kZShlLm1lZGlhQ29udGVudCxuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnNpemUmJnMuSW1hZ2VTaXplLmVuY29kZShlLnNpemUsbi51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksT2JqZWN0LmVudHJpZXMoZS51cmxQYXJhbXMpLmZvckVhY2goKGU9PntsZXRbcixpXT1lO3QuRmlsdGVyX01lZGlhX1VybFBhcmFtc0VudHJ5LmVuY29kZSh7a2V5OnIsdmFsdWU6aX0sbi51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCl9KSksITA9PT1lLmlzQW5pbWF0ZWQmJm4udWludDMyKDMyKS5ib29sKGUuaXNBbmltYXRlZCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgdS5kZWZhdWx0LlJlYWRlcj9lOm5ldyB1LmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXttZWRpYUNvbnRlbnQ6dm9pZCAwLHNpemU6dm9pZCAwLHVybFBhcmFtczp7fSxpc0FuaW1hdGVkOiExfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5tZWRpYUNvbnRlbnQ9YS5NZWRpYUNvbnRlbnQuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOm8uc2l6ZT1zLkltYWdlU2l6ZS5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDM6Y29uc3Qgbj10LkZpbHRlcl9NZWRpYV9VcmxQYXJhbXNFbnRyeS5kZWNvZGUocixyLnVpbnQzMigpKTt2b2lkIDAhPT1uLnZhbHVlJiYoby51cmxQYXJhbXNbbi5rZXldPW4udmFsdWUpO2JyZWFrO2Nhc2UgNDpvLmlzQW5pbWF0ZWQ9ci5ib29sKCk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXttZWRpYUNvbnRlbnQ6dm9pZCAwLHNpemU6dm9pZCAwLHVybFBhcmFtczp7fSxpc0FuaW1hdGVkOiExfTtyZXR1cm4gdC5tZWRpYUNvbnRlbnQ9dm9pZCAwIT09ZS5tZWRpYUNvbnRlbnQmJm51bGwhPT1lLm1lZGlhQ29udGVudD9hLk1lZGlhQ29udGVudC5mcm9tUGFydGlhbChlLm1lZGlhQ29udGVudCk6dm9pZCAwLHQuc2l6ZT12b2lkIDAhPT1lLnNpemUmJm51bGwhPT1lLnNpemU/cy5JbWFnZVNpemUuZnJvbVBhcnRpYWwoZS5zaXplKTp2b2lkIDAsdC51cmxQYXJhbXM9T2JqZWN0LmVudHJpZXMoZS51cmxQYXJhbXM/P3t9KS5yZWR1Y2UoKChlLHQpPT57bGV0W24scl09dDtyZXR1cm4gdm9pZCAwIT09ciYmKGVbbl09U3RyaW5nKHIpKSxlfSkse30pLHQuaXNBbmltYXRlZD1lLmlzQW5pbWF0ZWQ/PyExLHR9fSx0LkZpbHRlcl9NZWRpYV9VcmxQYXJhbXNFbnRyeT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp1LmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmtleSYmdC51aW50MzIoMTApLnN0cmluZyhlLmtleSksXCJcIiE9PWUudmFsdWUmJnQudWludDMyKDE4KS5zdHJpbmcoZS52YWx1ZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgdS5kZWZhdWx0LlJlYWRlcj9lOm5ldyB1LmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtrZXk6XCJcIix2YWx1ZTpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5rZXk9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS52YWx1ZT1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17a2V5OlwiXCIsdmFsdWU6XCJcIn07cmV0dXJuIHQua2V5PWUua2V5Pz9cIlwiLHQudmFsdWU9ZS52YWx1ZT8/XCJcIix0fX0sdC5GaWx0ZXJfQ2xpZW50VGFyZ2V0aW5nSW5mbz17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp1LmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO24udWludDMyKDEwKS5mb3JrKCk7Zm9yKGNvbnN0IHQgb2YgZS5jYW1lcmFDb250ZXh0cyluLmludDMyKHQpO24ubGRlbGltKCksbi51aW50MzIoMTgpLmZvcmsoKTtmb3IoY29uc3QgdCBvZiBlLm1lZGlhVHlwZUNvbnRleHRzKW4uaW50MzIodCk7bi5sZGVsaW0oKSxuLnVpbnQzMigyNikuZm9yaygpO2Zvcihjb25zdCB0IG9mIGUuYWN0aW9ubW9qaUNvbnRleHRzKW4uaW50NjQodCk7bi5sZGVsaW0oKTtmb3IoY29uc3QgdCBvZiBlLnZpc3VhbENvbnRleHRzKW4udWludDMyKDM0KS5zdHJpbmcodCk7cmV0dXJuIHZvaWQgMCE9PWUuZ2VvZmVuY2UmJnQuRmlsdGVyX0NsaWVudFRhcmdldGluZ0luZm9fR2VvZmVuY2UuZW5jb2RlKGUuZ2VvZmVuY2Usbi51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgdS5kZWZhdWx0LlJlYWRlcj9lOm5ldyB1LmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXtjYW1lcmFDb250ZXh0czpbXSxtZWRpYVR5cGVDb250ZXh0czpbXSxhY3Rpb25tb2ppQ29udGV4dHM6W10sdmlzdWFsQ29udGV4dHM6W10sZ2VvZmVuY2U6dm9pZCAwfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aWYoMj09KDcmZSkpe2NvbnN0IGU9ci51aW50MzIoKStyLnBvcztmb3IoO3IucG9zPGU7KW8uY2FtZXJhQ29udGV4dHMucHVzaChyLmludDMyKCkpfWVsc2Ugby5jYW1lcmFDb250ZXh0cy5wdXNoKHIuaW50MzIoKSk7YnJlYWs7Y2FzZSAyOmlmKDI9PSg3JmUpKXtjb25zdCBlPXIudWludDMyKCkrci5wb3M7Zm9yKDtyLnBvczxlOylvLm1lZGlhVHlwZUNvbnRleHRzLnB1c2goci5pbnQzMigpKX1lbHNlIG8ubWVkaWFUeXBlQ29udGV4dHMucHVzaChyLmludDMyKCkpO2JyZWFrO2Nhc2UgMzppZigyPT0oNyZlKSl7Y29uc3QgZT1yLnVpbnQzMigpK3IucG9zO2Zvcig7ci5wb3M8ZTspby5hY3Rpb25tb2ppQ29udGV4dHMucHVzaChnKHIuaW50NjQoKSkpfWVsc2Ugby5hY3Rpb25tb2ppQ29udGV4dHMucHVzaChnKHIuaW50NjQoKSkpO2JyZWFrO2Nhc2UgNDpvLnZpc3VhbENvbnRleHRzLnB1c2goci5zdHJpbmcoKSk7YnJlYWs7Y2FzZSA1Om8uZ2VvZmVuY2U9dC5GaWx0ZXJfQ2xpZW50VGFyZ2V0aW5nSW5mb19HZW9mZW5jZS5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e2NhbWVyYUNvbnRleHRzOltdLG1lZGlhVHlwZUNvbnRleHRzOltdLGFjdGlvbm1vamlDb250ZXh0czpbXSx2aXN1YWxDb250ZXh0czpbXSxnZW9mZW5jZTp2b2lkIDB9O3JldHVybiBuLmNhbWVyYUNvbnRleHRzPWUuY2FtZXJhQ29udGV4dHM/Lm1hcCgoZT0+ZSkpfHxbXSxuLm1lZGlhVHlwZUNvbnRleHRzPWUubWVkaWFUeXBlQ29udGV4dHM/Lm1hcCgoZT0+ZSkpfHxbXSxuLmFjdGlvbm1vamlDb250ZXh0cz1lLmFjdGlvbm1vamlDb250ZXh0cz8ubWFwKChlPT5lKSl8fFtdLG4udmlzdWFsQ29udGV4dHM9ZS52aXN1YWxDb250ZXh0cz8ubWFwKChlPT5lKSl8fFtdLG4uZ2VvZmVuY2U9dm9pZCAwIT09ZS5nZW9mZW5jZSYmbnVsbCE9PWUuZ2VvZmVuY2U/dC5GaWx0ZXJfQ2xpZW50VGFyZ2V0aW5nSW5mb19HZW9mZW5jZS5mcm9tUGFydGlhbChlLmdlb2ZlbmNlKTp2b2lkIDAsbn19LHQuRmlsdGVyX0NsaWVudFRhcmdldGluZ0luZm9fR2VvZmVuY2U9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtcIlwiIT09ZS5pZCYmdC51aW50MzIoMTApLnN0cmluZyhlLmlkKTtmb3IoY29uc3QgbiBvZiBlLmdlb21ldHJ5KWMuR2VvbWV0cnkuZW5jb2RlKG4sdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHUuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgdS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17aWQ6XCJcIixnZW9tZXRyeTpbXX07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuaWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS5nZW9tZXRyeS5wdXNoKGMuR2VvbWV0cnkuZGVjb2RlKG4sbi51aW50MzIoKSkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17aWQ6XCJcIixnZW9tZXRyeTpbXX07cmV0dXJuIHQuaWQ9ZS5pZD8/XCJcIix0Lmdlb21ldHJ5PWUuZ2VvbWV0cnk/Lm1hcCgoZT0+Yy5HZW9tZXRyeS5mcm9tUGFydGlhbChlKSkpfHxbXSx0fX0sdC5GaWx0ZXJfRnJpZW5kRmlsdGVySW5mbz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp1LmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3QudWludDMyKDEwKS5mb3JrKCk7Zm9yKGNvbnN0IG4gb2YgZS5mcmllbmRDb250ZXh0cyl0LmludDMyKG4pO3QubGRlbGltKCksdC51aW50MzIoMTgpLmZvcmsoKTtmb3IoY29uc3QgbiBvZiBlLnRyaWdnZXJDb250ZXh0cyl0LmludDMyKG4pO3JldHVybiB0LmxkZWxpbSgpLCEwPT09ZS51c2VzRnJpZW5kbW9qaSYmdC51aW50MzIoMjQpLmJvb2woZS51c2VzRnJpZW5kbW9qaSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgdS5kZWZhdWx0LlJlYWRlcj9lOm5ldyB1LmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtmcmllbmRDb250ZXh0czpbXSx0cmlnZ2VyQ29udGV4dHM6W10sdXNlc0ZyaWVuZG1vamk6ITF9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppZigyPT0oNyZlKSl7Y29uc3QgZT1uLnVpbnQzMigpK24ucG9zO2Zvcig7bi5wb3M8ZTspaS5mcmllbmRDb250ZXh0cy5wdXNoKG4uaW50MzIoKSl9ZWxzZSBpLmZyaWVuZENvbnRleHRzLnB1c2gobi5pbnQzMigpKTticmVhaztjYXNlIDI6aWYoMj09KDcmZSkpe2NvbnN0IGU9bi51aW50MzIoKStuLnBvcztmb3IoO24ucG9zPGU7KWkudHJpZ2dlckNvbnRleHRzLnB1c2gobi5pbnQzMigpKX1lbHNlIGkudHJpZ2dlckNvbnRleHRzLnB1c2gobi5pbnQzMigpKTticmVhaztjYXNlIDM6aS51c2VzRnJpZW5kbW9qaT1uLmJvb2woKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2ZyaWVuZENvbnRleHRzOltdLHRyaWdnZXJDb250ZXh0czpbXSx1c2VzRnJpZW5kbW9qaTohMX07cmV0dXJuIHQuZnJpZW5kQ29udGV4dHM9ZS5mcmllbmRDb250ZXh0cz8ubWFwKChlPT5lKSl8fFtdLHQudHJpZ2dlckNvbnRleHRzPWUudHJpZ2dlckNvbnRleHRzPy5tYXAoKGU9PmUpKXx8W10sdC51c2VzRnJpZW5kbW9qaT1lLnVzZXNGcmllbmRtb2ppPz8hMSx0fX0sdC5GaWx0ZXJfRnJhbWVGaWx0ZXJJbmZvPXtlbmNvZGUoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp1LmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpfSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiB1LmRlZmF1bHQuUmVhZGVyP2U6bmV3IHUuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtuLnNraXBUeXBlKDcmZSl9cmV0dXJue319LGZyb21QYXJ0aWFsOmU9Pih7fSl9LHQuRmlsdGVyX0JpdG1vamlGaWx0ZXJJbmZvPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnUuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUuY29taWNJZCYmdC51aW50MzIoMTApLnN0cmluZyhlLmNvbWljSWQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHUuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgdS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17Y29taWNJZDpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/aS5jb21pY0lkPW4uc3RyaW5nKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtjb21pY0lkOlwiXCJ9O3JldHVybiB0LmNvbWljSWQ9ZS5jb21pY0lkPz9cIlwiLHR9fSx0LkZpbHRlcl9EeW5hbWljRmlsdGVySW5mbz17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp1LmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO2Zvcihjb25zdCByIG9mIGUuY29udGVudCl0LkZpbHRlcl9EeW5hbWljRmlsdGVySW5mb19Db250ZW50LmVuY29kZShyLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiB2b2lkIDAhPT1lLmNvbnRlbnRTZXR0aW5ncyYmdC5GaWx0ZXJfRHluYW1pY0ZpbHRlckluZm9fQ29udGVudFNldHRpbmdzLmVuY29kZShlLmNvbnRlbnRTZXR0aW5ncyxuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmNvbnRleHQmJnQuRmlsdGVyX0R5bmFtaWNGaWx0ZXJJbmZvX0NvbnRleHQuZW5jb2RlKGUuY29udGV4dCxuLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiB1LmRlZmF1bHQuUmVhZGVyP2U6bmV3IHUuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89e2NvbnRlbnQ6W10sY29udGVudFNldHRpbmdzOnZvaWQgMCxjb250ZXh0OnZvaWQgMH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8uY29udGVudC5wdXNoKHQuRmlsdGVyX0R5bmFtaWNGaWx0ZXJJbmZvX0NvbnRlbnQuZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2Nhc2UgMjpvLmNvbnRlbnRTZXR0aW5ncz10LkZpbHRlcl9EeW5hbWljRmlsdGVySW5mb19Db250ZW50U2V0dGluZ3MuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAzOm8uY29udGV4dD10LkZpbHRlcl9EeW5hbWljRmlsdGVySW5mb19Db250ZXh0LmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17Y29udGVudDpbXSxjb250ZW50U2V0dGluZ3M6dm9pZCAwLGNvbnRleHQ6dm9pZCAwfTtyZXR1cm4gbi5jb250ZW50PWUuY29udGVudD8ubWFwKChlPT50LkZpbHRlcl9EeW5hbWljRmlsdGVySW5mb19Db250ZW50LmZyb21QYXJ0aWFsKGUpKSl8fFtdLG4uY29udGVudFNldHRpbmdzPXZvaWQgMCE9PWUuY29udGVudFNldHRpbmdzJiZudWxsIT09ZS5jb250ZW50U2V0dGluZ3M/dC5GaWx0ZXJfRHluYW1pY0ZpbHRlckluZm9fQ29udGVudFNldHRpbmdzLmZyb21QYXJ0aWFsKGUuY29udGVudFNldHRpbmdzKTp2b2lkIDAsbi5jb250ZXh0PXZvaWQgMCE9PWUuY29udGV4dCYmbnVsbCE9PWUuY29udGV4dD90LkZpbHRlcl9EeW5hbWljRmlsdGVySW5mb19Db250ZXh0LmZyb21QYXJ0aWFsKGUuY29udGV4dCk6dm9pZCAwLG59fSx0LkZpbHRlcl9EeW5hbWljRmlsdGVySW5mb19Db250ZW50PXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnUuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLnR5cGUmJm4udWludDMyKDgpLmludDMyKGUudHlwZSksXCJcIiE9PWUuc291cmNlJiZuLnVpbnQzMigxOCkuc3RyaW5nKGUuc291cmNlKSwwIT09ZS5yZWZyZXNoSW50ZXJ2YWxTZWMmJm4udWludDMyKDI0KS51aW50MzIoZS5yZWZyZXNoSW50ZXJ2YWxTZWMpLHZvaWQgMCE9PWUubGF5b3V0UGFyYW1ldGVycyYmdC5GaWx0ZXJfRHluYW1pY0ZpbHRlckluZm9fQ29udGVudF9MYXlvdXRQYXJhbWV0ZXJzLmVuY29kZShlLmxheW91dFBhcmFtZXRlcnMsbi51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5kaXNwbGF5UGFyYW1ldGVycyYmdC5GaWx0ZXJfRHluYW1pY0ZpbHRlckluZm9fQ29udGVudF9EaXNwbGF5UGFyYW1ldGVycy5lbmNvZGUoZS5kaXNwbGF5UGFyYW1ldGVycyxuLnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmNvbXBhbmlvbkNyZWF0aXZlSW5mbyYmdC5GaWx0ZXJfRHluYW1pY0ZpbHRlckluZm9fQ29udGVudF9Db21wYW5pb25DcmVhdGl2ZUluZm8uZW5jb2RlKGUuY29tcGFuaW9uQ3JlYXRpdmVJbmZvLG4udWludDMyKDUwKS5mb3JrKCkpLmxkZWxpbSgpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIHUuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgdS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17dHlwZTowLHNvdXJjZTpcIlwiLHJlZnJlc2hJbnRlcnZhbFNlYzowLGxheW91dFBhcmFtZXRlcnM6dm9pZCAwLGRpc3BsYXlQYXJhbWV0ZXJzOnZvaWQgMCxjb21wYW5pb25DcmVhdGl2ZUluZm86dm9pZCAwfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by50eXBlPXIuaW50MzIoKTticmVhaztjYXNlIDI6by5zb3VyY2U9ci5zdHJpbmcoKTticmVhaztjYXNlIDM6by5yZWZyZXNoSW50ZXJ2YWxTZWM9ci51aW50MzIoKTticmVhaztjYXNlIDQ6by5sYXlvdXRQYXJhbWV0ZXJzPXQuRmlsdGVyX0R5bmFtaWNGaWx0ZXJJbmZvX0NvbnRlbnRfTGF5b3V0UGFyYW1ldGVycy5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDU6by5kaXNwbGF5UGFyYW1ldGVycz10LkZpbHRlcl9EeW5hbWljRmlsdGVySW5mb19Db250ZW50X0Rpc3BsYXlQYXJhbWV0ZXJzLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgNjpvLmNvbXBhbmlvbkNyZWF0aXZlSW5mbz10LkZpbHRlcl9EeW5hbWljRmlsdGVySW5mb19Db250ZW50X0NvbXBhbmlvbkNyZWF0aXZlSW5mby5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e3R5cGU6MCxzb3VyY2U6XCJcIixyZWZyZXNoSW50ZXJ2YWxTZWM6MCxsYXlvdXRQYXJhbWV0ZXJzOnZvaWQgMCxkaXNwbGF5UGFyYW1ldGVyczp2b2lkIDAsY29tcGFuaW9uQ3JlYXRpdmVJbmZvOnZvaWQgMH07cmV0dXJuIG4udHlwZT1lLnR5cGU/PzAsbi5zb3VyY2U9ZS5zb3VyY2U/P1wiXCIsbi5yZWZyZXNoSW50ZXJ2YWxTZWM9ZS5yZWZyZXNoSW50ZXJ2YWxTZWM/PzAsbi5sYXlvdXRQYXJhbWV0ZXJzPXZvaWQgMCE9PWUubGF5b3V0UGFyYW1ldGVycyYmbnVsbCE9PWUubGF5b3V0UGFyYW1ldGVycz90LkZpbHRlcl9EeW5hbWljRmlsdGVySW5mb19Db250ZW50X0xheW91dFBhcmFtZXRlcnMuZnJvbVBhcnRpYWwoZS5sYXlvdXRQYXJhbWV0ZXJzKTp2b2lkIDAsbi5kaXNwbGF5UGFyYW1ldGVycz12b2lkIDAhPT1lLmRpc3BsYXlQYXJhbWV0ZXJzJiZudWxsIT09ZS5kaXNwbGF5UGFyYW1ldGVycz90LkZpbHRlcl9EeW5hbWljRmlsdGVySW5mb19Db250ZW50X0Rpc3BsYXlQYXJhbWV0ZXJzLmZyb21QYXJ0aWFsKGUuZGlzcGxheVBhcmFtZXRlcnMpOnZvaWQgMCxuLmNvbXBhbmlvbkNyZWF0aXZlSW5mbz12b2lkIDAhPT1lLmNvbXBhbmlvbkNyZWF0aXZlSW5mbyYmbnVsbCE9PWUuY29tcGFuaW9uQ3JlYXRpdmVJbmZvP3QuRmlsdGVyX0R5bmFtaWNGaWx0ZXJJbmZvX0NvbnRlbnRfQ29tcGFuaW9uQ3JlYXRpdmVJbmZvLmZyb21QYXJ0aWFsKGUuY29tcGFuaW9uQ3JlYXRpdmVJbmZvKTp2b2lkIDAsbn19LHQuRmlsdGVyX0R5bmFtaWNGaWx0ZXJJbmZvX0NvbnRlbnRfTGF5b3V0UGFyYW1ldGVycz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp1LmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS54T2Zmc2V0JiZ0LnVpbnQzMigxMykuZmxvYXQoZS54T2Zmc2V0KSwwIT09ZS55T2Zmc2V0JiZ0LnVpbnQzMigyMSkuZmxvYXQoZS55T2Zmc2V0KSwwIT09ZS53aWR0aCYmdC51aW50MzIoMjkpLmZsb2F0KGUud2lkdGgpLDAhPT1lLmhlaWdodCYmdC51aW50MzIoMzcpLmZsb2F0KGUuaGVpZ2h0KSwwIT09ZS5yb3RhdGlvbiYmdC51aW50MzIoNDUpLmZsb2F0KGUucm90YXRpb24pLDAhPT1lLnpJbmRleCYmdC51aW50MzIoNDgpLmludDMyKGUuekluZGV4KSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiB1LmRlZmF1bHQuUmVhZGVyP2U6bmV3IHUuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3hPZmZzZXQ6MCx5T2Zmc2V0OjAsd2lkdGg6MCxoZWlnaHQ6MCxyb3RhdGlvbjowLHpJbmRleDowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS54T2Zmc2V0PW4uZmxvYXQoKTticmVhaztjYXNlIDI6aS55T2Zmc2V0PW4uZmxvYXQoKTticmVhaztjYXNlIDM6aS53aWR0aD1uLmZsb2F0KCk7YnJlYWs7Y2FzZSA0OmkuaGVpZ2h0PW4uZmxvYXQoKTticmVhaztjYXNlIDU6aS5yb3RhdGlvbj1uLmZsb2F0KCk7YnJlYWs7Y2FzZSA2OmkuekluZGV4PW4uaW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3hPZmZzZXQ6MCx5T2Zmc2V0OjAsd2lkdGg6MCxoZWlnaHQ6MCxyb3RhdGlvbjowLHpJbmRleDowfTtyZXR1cm4gdC54T2Zmc2V0PWUueE9mZnNldD8/MCx0LnlPZmZzZXQ9ZS55T2Zmc2V0Pz8wLHQud2lkdGg9ZS53aWR0aD8/MCx0LmhlaWdodD1lLmhlaWdodD8/MCx0LnJvdGF0aW9uPWUucm90YXRpb24/PzAsdC56SW5kZXg9ZS56SW5kZXg/PzAsdH19LHQuRmlsdGVyX0R5bmFtaWNGaWx0ZXJJbmZvX0NvbnRlbnRfRGlzcGxheVBhcmFtZXRlcnM9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5mb250JiZuLnVpbnQzMigxMCkuc3RyaW5nKGUuZm9udCksMCE9PWUuZm9udFNpemUmJm4udWludDMyKDE2KS5pbnQzMihlLmZvbnRTaXplKSwwIT09ZS5tYXhSZXNpemFibGVGb250U2l6ZSYmbi51aW50MzIoMjQpLmludDMyKGUubWF4UmVzaXphYmxlRm9udFNpemUpLFwiXCIhPT1lLnRleHRDb2xvciYmbi51aW50MzIoMzQpLnN0cmluZyhlLnRleHRDb2xvciksMCE9PWUudGV4dEFscGhhJiZuLnVpbnQzMig0NSkuZmxvYXQoZS50ZXh0QWxwaGEpLDAhPT1lLnRleHRBbGlnbm1lbnQmJm4udWludDMyKDQ4KS5pbnQzMihlLnRleHRBbGlnbm1lbnQpLHZvaWQgMCE9PWUudGV4dFNoYWRvdyYmdC5GaWx0ZXJfRHluYW1pY0ZpbHRlckluZm9fQ29udGVudF9EaXNwbGF5UGFyYW1ldGVyc19UZXh0U2hhZG93LmVuY29kZShlLnRleHRTaGFkb3csbi51aW50MzIoNTgpLmZvcmsoKSkubGRlbGltKCksXCJzdGF0aWNUZXh0XCI9PT1lLnRleHQ/LiRjYXNlJiZuLnVpbnQzMig2Nikuc3RyaW5nKGUudGV4dC5zdGF0aWNUZXh0KSxcImR5bmFtaWNUZXh0XCI9PT1lLnRleHQ/LiRjYXNlJiZ0LkZpbHRlcl9EeW5hbWljRmlsdGVySW5mb19Db250ZW50X0Rpc3BsYXlQYXJhbWV0ZXJzX0R5bmFtaWNUZXh0LmVuY29kZShlLnRleHQuZHluYW1pY1RleHQsbi51aW50MzIoNzQpLmZvcmsoKSkubGRlbGltKCksXCJcIiE9PWUuZmFsbGJhY2tUZXh0JiZuLnVpbnQzMig4Mikuc3RyaW5nKGUuZmFsbGJhY2tUZXh0KSwwIT09ZS5mYWxsYmFja01ldGhvZCYmbi51aW50MzIoOTYpLmludDMyKGUuZmFsbGJhY2tNZXRob2QpLHZvaWQgMCE9PWUuZHluYW1pY0NvdW50ZG93biYmdC5GaWx0ZXJfRHluYW1pY0ZpbHRlckluZm9fQ29udGVudF9EaXNwbGF5UGFyYW1ldGVyc19EeW5hbWljQ291bnRkb3duLmVuY29kZShlLmR5bmFtaWNDb3VudGRvd24sbi51aW50MzIoOTApLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgdS5kZWZhdWx0LlJlYWRlcj9lOm5ldyB1LmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXtmb250OlwiXCIsZm9udFNpemU6MCxtYXhSZXNpemFibGVGb250U2l6ZTowLHRleHRDb2xvcjpcIlwiLHRleHRBbHBoYTowLHRleHRBbGlnbm1lbnQ6MCx0ZXh0U2hhZG93OnZvaWQgMCx0ZXh0OnZvaWQgMCxmYWxsYmFja1RleHQ6XCJcIixmYWxsYmFja01ldGhvZDowLGR5bmFtaWNDb3VudGRvd246dm9pZCAwfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5mb250PXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOm8uZm9udFNpemU9ci5pbnQzMigpO2JyZWFrO2Nhc2UgMzpvLm1heFJlc2l6YWJsZUZvbnRTaXplPXIuaW50MzIoKTticmVhaztjYXNlIDQ6by50ZXh0Q29sb3I9ci5zdHJpbmcoKTticmVhaztjYXNlIDU6by50ZXh0QWxwaGE9ci5mbG9hdCgpO2JyZWFrO2Nhc2UgNjpvLnRleHRBbGlnbm1lbnQ9ci5pbnQzMigpO2JyZWFrO2Nhc2UgNzpvLnRleHRTaGFkb3c9dC5GaWx0ZXJfRHluYW1pY0ZpbHRlckluZm9fQ29udGVudF9EaXNwbGF5UGFyYW1ldGVyc19UZXh0U2hhZG93LmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgODpvLnRleHQ9eyRjYXNlOlwic3RhdGljVGV4dFwiLHN0YXRpY1RleHQ6ci5zdHJpbmcoKX07YnJlYWs7Y2FzZSA5Om8udGV4dD17JGNhc2U6XCJkeW5hbWljVGV4dFwiLGR5bmFtaWNUZXh0OnQuRmlsdGVyX0R5bmFtaWNGaWx0ZXJJbmZvX0NvbnRlbnRfRGlzcGxheVBhcmFtZXRlcnNfRHluYW1pY1RleHQuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMTA6by5mYWxsYmFja1RleHQ9ci5zdHJpbmcoKTticmVhaztjYXNlIDEyOm8uZmFsbGJhY2tNZXRob2Q9ci5pbnQzMigpO2JyZWFrO2Nhc2UgMTE6by5keW5hbWljQ291bnRkb3duPXQuRmlsdGVyX0R5bmFtaWNGaWx0ZXJJbmZvX0NvbnRlbnRfRGlzcGxheVBhcmFtZXRlcnNfRHluYW1pY0NvdW50ZG93bi5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e2ZvbnQ6XCJcIixmb250U2l6ZTowLG1heFJlc2l6YWJsZUZvbnRTaXplOjAsdGV4dENvbG9yOlwiXCIsdGV4dEFscGhhOjAsdGV4dEFsaWdubWVudDowLHRleHRTaGFkb3c6dm9pZCAwLHRleHQ6dm9pZCAwLGZhbGxiYWNrVGV4dDpcIlwiLGZhbGxiYWNrTWV0aG9kOjAsZHluYW1pY0NvdW50ZG93bjp2b2lkIDB9O3JldHVybiBuLmZvbnQ9ZS5mb250Pz9cIlwiLG4uZm9udFNpemU9ZS5mb250U2l6ZT8/MCxuLm1heFJlc2l6YWJsZUZvbnRTaXplPWUubWF4UmVzaXphYmxlRm9udFNpemU/PzAsbi50ZXh0Q29sb3I9ZS50ZXh0Q29sb3I/P1wiXCIsbi50ZXh0QWxwaGE9ZS50ZXh0QWxwaGE/PzAsbi50ZXh0QWxpZ25tZW50PWUudGV4dEFsaWdubWVudD8/MCxuLnRleHRTaGFkb3c9dm9pZCAwIT09ZS50ZXh0U2hhZG93JiZudWxsIT09ZS50ZXh0U2hhZG93P3QuRmlsdGVyX0R5bmFtaWNGaWx0ZXJJbmZvX0NvbnRlbnRfRGlzcGxheVBhcmFtZXRlcnNfVGV4dFNoYWRvdy5mcm9tUGFydGlhbChlLnRleHRTaGFkb3cpOnZvaWQgMCxcInN0YXRpY1RleHRcIj09PWUudGV4dD8uJGNhc2UmJnZvaWQgMCE9PWUudGV4dD8uc3RhdGljVGV4dCYmbnVsbCE9PWUudGV4dD8uc3RhdGljVGV4dCYmKG4udGV4dD17JGNhc2U6XCJzdGF0aWNUZXh0XCIsc3RhdGljVGV4dDplLnRleHQuc3RhdGljVGV4dH0pLFwiZHluYW1pY1RleHRcIj09PWUudGV4dD8uJGNhc2UmJnZvaWQgMCE9PWUudGV4dD8uZHluYW1pY1RleHQmJm51bGwhPT1lLnRleHQ/LmR5bmFtaWNUZXh0JiYobi50ZXh0PXskY2FzZTpcImR5bmFtaWNUZXh0XCIsZHluYW1pY1RleHQ6dC5GaWx0ZXJfRHluYW1pY0ZpbHRlckluZm9fQ29udGVudF9EaXNwbGF5UGFyYW1ldGVyc19EeW5hbWljVGV4dC5mcm9tUGFydGlhbChlLnRleHQuZHluYW1pY1RleHQpfSksbi5mYWxsYmFja1RleHQ9ZS5mYWxsYmFja1RleHQ/P1wiXCIsbi5mYWxsYmFja01ldGhvZD1lLmZhbGxiYWNrTWV0aG9kPz8wLG4uZHluYW1pY0NvdW50ZG93bj12b2lkIDAhPT1lLmR5bmFtaWNDb3VudGRvd24mJm51bGwhPT1lLmR5bmFtaWNDb3VudGRvd24/dC5GaWx0ZXJfRHluYW1pY0ZpbHRlckluZm9fQ29udGVudF9EaXNwbGF5UGFyYW1ldGVyc19EeW5hbWljQ291bnRkb3duLmZyb21QYXJ0aWFsKGUuZHluYW1pY0NvdW50ZG93bik6dm9pZCAwLG59fSx0LkZpbHRlcl9EeW5hbWljRmlsdGVySW5mb19Db250ZW50X0Rpc3BsYXlQYXJhbWV0ZXJzX1RleHRTaGFkb3c9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5jb2xvciYmdC51aW50MzIoMTApLnN0cmluZyhlLmNvbG9yKSwwIT09ZS5zaGFkb3dPZmZzZXRYJiZ0LnVpbnQzMigxNikuaW50MzIoZS5zaGFkb3dPZmZzZXRYKSwwIT09ZS5zaGFkb3dPZmZzZXRZJiZ0LnVpbnQzMigyNCkuaW50MzIoZS5zaGFkb3dPZmZzZXRZKSwwIT09ZS5ibHVyUmFkaXVzJiZ0LnVpbnQzMigzNykuZmxvYXQoZS5ibHVyUmFkaXVzKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiB1LmRlZmF1bHQuUmVhZGVyP2U6bmV3IHUuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2NvbG9yOlwiXCIsc2hhZG93T2Zmc2V0WDowLHNoYWRvd09mZnNldFk6MCxibHVyUmFkaXVzOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmNvbG9yPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkuc2hhZG93T2Zmc2V0WD1uLmludDMyKCk7YnJlYWs7Y2FzZSAzOmkuc2hhZG93T2Zmc2V0WT1uLmludDMyKCk7YnJlYWs7Y2FzZSA0OmkuYmx1clJhZGl1cz1uLmZsb2F0KCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtjb2xvcjpcIlwiLHNoYWRvd09mZnNldFg6MCxzaGFkb3dPZmZzZXRZOjAsYmx1clJhZGl1czowfTtyZXR1cm4gdC5jb2xvcj1lLmNvbG9yPz9cIlwiLHQuc2hhZG93T2Zmc2V0WD1lLnNoYWRvd09mZnNldFg/PzAsdC5zaGFkb3dPZmZzZXRZPWUuc2hhZG93T2Zmc2V0WT8/MCx0LmJsdXJSYWRpdXM9ZS5ibHVyUmFkaXVzPz8wLHR9fSx0LkZpbHRlcl9EeW5hbWljRmlsdGVySW5mb19Db250ZW50X0Rpc3BsYXlQYXJhbWV0ZXJzX0R5bmFtaWNUZXh0PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnUuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUudGV4dCYmdC51aW50MzIoMTApLnN0cmluZyhlLnRleHQpLDAhPT1lLmNhcGl0YWxpemF0aW9uJiZ0LnVpbnQzMigxNikuaW50MzIoZS5jYXBpdGFsaXphdGlvbiksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgdS5kZWZhdWx0LlJlYWRlcj9lOm5ldyB1LmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXt0ZXh0OlwiXCIsY2FwaXRhbGl6YXRpb246MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkudGV4dD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLmNhcGl0YWxpemF0aW9uPW4uaW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3RleHQ6XCJcIixjYXBpdGFsaXphdGlvbjowfTtyZXR1cm4gdC50ZXh0PWUudGV4dD8/XCJcIix0LmNhcGl0YWxpemF0aW9uPWUuY2FwaXRhbGl6YXRpb24/PzAsdH19LHQuRmlsdGVyX0R5bmFtaWNGaWx0ZXJJbmZvX0NvbnRlbnRfRGlzcGxheVBhcmFtZXRlcnNfRHluYW1pY0NvdW50ZG93bj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp1LmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnRhcmdldERhdGV0aW1lJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUudGFyZ2V0RGF0ZXRpbWUpLDAhPT1lLnRhcmdldERhdGV0aW1lRGlyZWN0aW9uJiZ0LnVpbnQzMigxNikuaW50MzIoZS50YXJnZXREYXRldGltZURpcmVjdGlvbiksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgdS5kZWZhdWx0LlJlYWRlcj9lOm5ldyB1LmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXt0YXJnZXREYXRldGltZTpcIlwiLHRhcmdldERhdGV0aW1lRGlyZWN0aW9uOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnRhcmdldERhdGV0aW1lPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkudGFyZ2V0RGF0ZXRpbWVEaXJlY3Rpb249bi5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dGFyZ2V0RGF0ZXRpbWU6XCJcIix0YXJnZXREYXRldGltZURpcmVjdGlvbjowfTtyZXR1cm4gdC50YXJnZXREYXRldGltZT1lLnRhcmdldERhdGV0aW1lPz9cIlwiLHQudGFyZ2V0RGF0ZXRpbWVEaXJlY3Rpb249ZS50YXJnZXREYXRldGltZURpcmVjdGlvbj8/MCx0fX0sdC5GaWx0ZXJfRHluYW1pY0ZpbHRlckluZm9fQ29udGVudF9Db21wYW5pb25DcmVhdGl2ZUluZm89e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4hMD09PWUubW92YWJsZSYmbi51aW50MzIoOCkuYm9vbChlLm1vdmFibGUpLCEwPT09ZS5tb2RpZmlhYmxlJiZuLnVpbnQzMigxNikuYm9vbChlLm1vZGlmaWFibGUpLFwicmF0aW5nU3RpY2tlclwiPT09ZS5jb250ZW50Py4kY2FzZSYmdC5GaWx0ZXJfRHluYW1pY0ZpbHRlckluZm9fQ29udGVudF9Db21wYW5pb25DcmVhdGl2ZUluZm9fUmF0aW5nU3RpY2tlci5lbmNvZGUoZS5jb250ZW50LnJhdGluZ1N0aWNrZXIsbi51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgdS5kZWZhdWx0LlJlYWRlcj9lOm5ldyB1LmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXttb3ZhYmxlOiExLG1vZGlmaWFibGU6ITEsY29udGVudDp2b2lkIDB9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLm1vdmFibGU9ci5ib29sKCk7YnJlYWs7Y2FzZSAyOm8ubW9kaWZpYWJsZT1yLmJvb2woKTticmVhaztjYXNlIDM6by5jb250ZW50PXskY2FzZTpcInJhdGluZ1N0aWNrZXJcIixyYXRpbmdTdGlja2VyOnQuRmlsdGVyX0R5bmFtaWNGaWx0ZXJJbmZvX0NvbnRlbnRfQ29tcGFuaW9uQ3JlYXRpdmVJbmZvX1JhdGluZ1N0aWNrZXIuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17bW92YWJsZTohMSxtb2RpZmlhYmxlOiExLGNvbnRlbnQ6dm9pZCAwfTtyZXR1cm4gbi5tb3ZhYmxlPWUubW92YWJsZT8/ITEsbi5tb2RpZmlhYmxlPWUubW9kaWZpYWJsZT8/ITEsXCJyYXRpbmdTdGlja2VyXCI9PT1lLmNvbnRlbnQ/LiRjYXNlJiZ2b2lkIDAhPT1lLmNvbnRlbnQ/LnJhdGluZ1N0aWNrZXImJm51bGwhPT1lLmNvbnRlbnQ/LnJhdGluZ1N0aWNrZXImJihuLmNvbnRlbnQ9eyRjYXNlOlwicmF0aW5nU3RpY2tlclwiLHJhdGluZ1N0aWNrZXI6dC5GaWx0ZXJfRHluYW1pY0ZpbHRlckluZm9fQ29udGVudF9Db21wYW5pb25DcmVhdGl2ZUluZm9fUmF0aW5nU3RpY2tlci5mcm9tUGFydGlhbChlLmNvbnRlbnQucmF0aW5nU3RpY2tlcil9KSxufX0sdC5GaWx0ZXJfRHluYW1pY0ZpbHRlckluZm9fQ29udGVudF9Db21wYW5pb25DcmVhdGl2ZUluZm9fUmF0aW5nU3RpY2tlcj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp1LmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnVuc2VsZWN0ZWRTdGF0ZUFzc2V0VXJsJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUudW5zZWxlY3RlZFN0YXRlQXNzZXRVcmwpLFwiXCIhPT1lLnNlbGVjdGVkU3RhdGVBc3NldFVybCYmdC51aW50MzIoMTgpLnN0cmluZyhlLnNlbGVjdGVkU3RhdGVBc3NldFVybCksMCE9PWUuaW5pdGlhbFJhdGluZyYmdC51aW50MzIoMjQpLmludDMyKGUuaW5pdGlhbFJhdGluZyksMCE9PWUubWF4UmF0aW5nJiZ0LnVpbnQzMigzMikuaW50MzIoZS5tYXhSYXRpbmcpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHUuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgdS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17dW5zZWxlY3RlZFN0YXRlQXNzZXRVcmw6XCJcIixzZWxlY3RlZFN0YXRlQXNzZXRVcmw6XCJcIixpbml0aWFsUmF0aW5nOjAsbWF4UmF0aW5nOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnVuc2VsZWN0ZWRTdGF0ZUFzc2V0VXJsPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkuc2VsZWN0ZWRTdGF0ZUFzc2V0VXJsPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmkuaW5pdGlhbFJhdGluZz1uLmludDMyKCk7YnJlYWs7Y2FzZSA0OmkubWF4UmF0aW5nPW4uaW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3Vuc2VsZWN0ZWRTdGF0ZUFzc2V0VXJsOlwiXCIsc2VsZWN0ZWRTdGF0ZUFzc2V0VXJsOlwiXCIsaW5pdGlhbFJhdGluZzowLG1heFJhdGluZzowfTtyZXR1cm4gdC51bnNlbGVjdGVkU3RhdGVBc3NldFVybD1lLnVuc2VsZWN0ZWRTdGF0ZUFzc2V0VXJsPz9cIlwiLHQuc2VsZWN0ZWRTdGF0ZUFzc2V0VXJsPWUuc2VsZWN0ZWRTdGF0ZUFzc2V0VXJsPz9cIlwiLHQuaW5pdGlhbFJhdGluZz1lLmluaXRpYWxSYXRpbmc/PzAsdC5tYXhSYXRpbmc9ZS5tYXhSYXRpbmc/PzAsdH19LHQuRmlsdGVyX0R5bmFtaWNGaWx0ZXJJbmZvX0NvbnRlbnRTZXR0aW5ncz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp1LmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiEwPT09ZS5yZWZyZXNoYWJsZSYmdC51aW50MzIoOCkuYm9vbChlLnJlZnJlc2hhYmxlKSwwIT09ZS5yZWZyZXNoTWVzc2FnZVhQb3J0cmFpdCYmdC51aW50MzIoMjEpLmZsb2F0KGUucmVmcmVzaE1lc3NhZ2VYUG9ydHJhaXQpLDAhPT1lLnJlZnJlc2hNZXNzYWdlWVBvcnRyYWl0JiZ0LnVpbnQzMigyOSkuZmxvYXQoZS5yZWZyZXNoTWVzc2FnZVlQb3J0cmFpdCksMCE9PWUucmVmcmVzaE1lc3NhZ2VYTGFuZHNjYXBlJiZ0LnVpbnQzMigzNykuZmxvYXQoZS5yZWZyZXNoTWVzc2FnZVhMYW5kc2NhcGUpLDAhPT1lLnJlZnJlc2hNZXNzYWdlWUxhbmRzY2FwZSYmdC51aW50MzIoNDUpLmZsb2F0KGUucmVmcmVzaE1lc3NhZ2VZTGFuZHNjYXBlKSxcIlwiIT09ZS5yZWZyZXNoSGludCYmdC51aW50MzIoNTApLnN0cmluZyhlLnJlZnJlc2hIaW50KSxcIlwiIT09ZS51cGRhdGluZ01lc3NhZ2UmJnQudWludDMyKDU4KS5zdHJpbmcoZS51cGRhdGluZ01lc3NhZ2UpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHUuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgdS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17cmVmcmVzaGFibGU6ITEscmVmcmVzaE1lc3NhZ2VYUG9ydHJhaXQ6MCxyZWZyZXNoTWVzc2FnZVlQb3J0cmFpdDowLHJlZnJlc2hNZXNzYWdlWExhbmRzY2FwZTowLHJlZnJlc2hNZXNzYWdlWUxhbmRzY2FwZTowLHJlZnJlc2hIaW50OlwiXCIsdXBkYXRpbmdNZXNzYWdlOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnJlZnJlc2hhYmxlPW4uYm9vbCgpO2JyZWFrO2Nhc2UgMjppLnJlZnJlc2hNZXNzYWdlWFBvcnRyYWl0PW4uZmxvYXQoKTticmVhaztjYXNlIDM6aS5yZWZyZXNoTWVzc2FnZVlQb3J0cmFpdD1uLmZsb2F0KCk7YnJlYWs7Y2FzZSA0OmkucmVmcmVzaE1lc3NhZ2VYTGFuZHNjYXBlPW4uZmxvYXQoKTticmVhaztjYXNlIDU6aS5yZWZyZXNoTWVzc2FnZVlMYW5kc2NhcGU9bi5mbG9hdCgpO2JyZWFrO2Nhc2UgNjppLnJlZnJlc2hIaW50PW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA3OmkudXBkYXRpbmdNZXNzYWdlPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtyZWZyZXNoYWJsZTohMSxyZWZyZXNoTWVzc2FnZVhQb3J0cmFpdDowLHJlZnJlc2hNZXNzYWdlWVBvcnRyYWl0OjAscmVmcmVzaE1lc3NhZ2VYTGFuZHNjYXBlOjAscmVmcmVzaE1lc3NhZ2VZTGFuZHNjYXBlOjAscmVmcmVzaEhpbnQ6XCJcIix1cGRhdGluZ01lc3NhZ2U6XCJcIn07cmV0dXJuIHQucmVmcmVzaGFibGU9ZS5yZWZyZXNoYWJsZT8/ITEsdC5yZWZyZXNoTWVzc2FnZVhQb3J0cmFpdD1lLnJlZnJlc2hNZXNzYWdlWFBvcnRyYWl0Pz8wLHQucmVmcmVzaE1lc3NhZ2VZUG9ydHJhaXQ9ZS5yZWZyZXNoTWVzc2FnZVlQb3J0cmFpdD8/MCx0LnJlZnJlc2hNZXNzYWdlWExhbmRzY2FwZT1lLnJlZnJlc2hNZXNzYWdlWExhbmRzY2FwZT8/MCx0LnJlZnJlc2hNZXNzYWdlWUxhbmRzY2FwZT1lLnJlZnJlc2hNZXNzYWdlWUxhbmRzY2FwZT8/MCx0LnJlZnJlc2hIaW50PWUucmVmcmVzaEhpbnQ/P1wiXCIsdC51cGRhdGluZ01lc3NhZ2U9ZS51cGRhdGluZ01lc3NhZ2U/P1wiXCIsdH19LHQuRmlsdGVyX0R5bmFtaWNGaWx0ZXJJbmZvX0NvbnRleHQ9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtPYmplY3QuZW50cmllcyhlLmRlZXBsaW5rUHJvcGVydGllcykuZm9yRWFjaCgoZT0+e2xldFtyLGldPWU7dC5GaWx0ZXJfRHluYW1pY0ZpbHRlckluZm9fQ29udGV4dF9EZWVwbGlua1Byb3BlcnRpZXNFbnRyeS5lbmNvZGUoe2tleTpyLHZhbHVlOml9LG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpfSkpO2Zvcihjb25zdCByIG9mIGUucmVsYXRpdmVUaW1lQ29tcG9uZW50cyl0LkZpbHRlcl9EeW5hbWljRmlsdGVySW5mb19Db250ZXh0X1RpbWVDb21wb25lbnQuZW5jb2RlKHIsbi51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIHUuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgdS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17ZGVlcGxpbmtQcm9wZXJ0aWVzOnt9LHJlbGF0aXZlVGltZUNvbXBvbmVudHM6W119O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpjb25zdCBuPXQuRmlsdGVyX0R5bmFtaWNGaWx0ZXJJbmZvX0NvbnRleHRfRGVlcGxpbmtQcm9wZXJ0aWVzRW50cnkuZGVjb2RlKHIsci51aW50MzIoKSk7dm9pZCAwIT09bi52YWx1ZSYmKG8uZGVlcGxpbmtQcm9wZXJ0aWVzW24ua2V5XT1uLnZhbHVlKTticmVhaztjYXNlIDI6by5yZWxhdGl2ZVRpbWVDb21wb25lbnRzLnB1c2godC5GaWx0ZXJfRHluYW1pY0ZpbHRlckluZm9fQ29udGV4dF9UaW1lQ29tcG9uZW50LmRlY29kZShyLHIudWludDMyKCkpKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e2RlZXBsaW5rUHJvcGVydGllczp7fSxyZWxhdGl2ZVRpbWVDb21wb25lbnRzOltdfTtyZXR1cm4gbi5kZWVwbGlua1Byb3BlcnRpZXM9T2JqZWN0LmVudHJpZXMoZS5kZWVwbGlua1Byb3BlcnRpZXM/P3t9KS5yZWR1Y2UoKChlLHQpPT57bGV0W24scl09dDtyZXR1cm4gdm9pZCAwIT09ciYmKGVbbl09U3RyaW5nKHIpKSxlfSkse30pLG4ucmVsYXRpdmVUaW1lQ29tcG9uZW50cz1lLnJlbGF0aXZlVGltZUNvbXBvbmVudHM/Lm1hcCgoZT0+dC5GaWx0ZXJfRHluYW1pY0ZpbHRlckluZm9fQ29udGV4dF9UaW1lQ29tcG9uZW50LmZyb21QYXJ0aWFsKGUpKSl8fFtdLG59fSx0LkZpbHRlcl9EeW5hbWljRmlsdGVySW5mb19Db250ZXh0X0RlZXBsaW5rUHJvcGVydGllc0VudHJ5PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnUuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUua2V5JiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUua2V5KSxcIlwiIT09ZS52YWx1ZSYmdC51aW50MzIoMTgpLnN0cmluZyhlLnZhbHVlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiB1LmRlZmF1bHQuUmVhZGVyP2U6bmV3IHUuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2tleTpcIlwiLHZhbHVlOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmtleT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLnZhbHVlPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtrZXk6XCJcIix2YWx1ZTpcIlwifTtyZXR1cm4gdC5rZXk9ZS5rZXk/P1wiXCIsdC52YWx1ZT1lLnZhbHVlPz9cIlwiLHR9fSx0LkZpbHRlcl9EeW5hbWljRmlsdGVySW5mb19Db250ZXh0X1RpbWVDb21wb25lbnQ9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUudGltZVVuaXQmJnQudWludDMyKDgpLmludDMyKGUudGltZVVuaXQpLFwiXCIhPT1lLnNpbmd1bGFyTmFtZSYmdC51aW50MzIoMTgpLnN0cmluZyhlLnNpbmd1bGFyTmFtZSksXCJcIiE9PWUucGx1cmFsTmFtZSYmdC51aW50MzIoMjYpLnN0cmluZyhlLnBsdXJhbE5hbWUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHUuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgdS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17dGltZVVuaXQ6MCxzaW5ndWxhck5hbWU6XCJcIixwbHVyYWxOYW1lOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnRpbWVVbml0PW4uaW50MzIoKTticmVhaztjYXNlIDI6aS5zaW5ndWxhck5hbWU9bi5zdHJpbmcoKTticmVhaztjYXNlIDM6aS5wbHVyYWxOYW1lPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt0aW1lVW5pdDowLHNpbmd1bGFyTmFtZTpcIlwiLHBsdXJhbE5hbWU6XCJcIn07cmV0dXJuIHQudGltZVVuaXQ9ZS50aW1lVW5pdD8/MCx0LnNpbmd1bGFyTmFtZT1lLnNpbmd1bGFyTmFtZT8/XCJcIix0LnBsdXJhbE5hbWU9ZS5wbHVyYWxOYW1lPz9cIlwiLHR9fSx0LkZpbHRlcl9TcG9uc29yZWRGaWx0ZXJJbmZvPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnUuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUuc3BvbnNvcmVkU2x1ZyYmdC5GaWx0ZXJfU3BvbnNvcmVkU2x1Zy5lbmNvZGUoZS5zcG9uc29yZWRTbHVnLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUudHJhY2tJbmZvJiZ0LkZpbHRlcl9TcG9uc29yZWRGaWx0ZXJJbmZvX1RyYWNrSW5mby5lbmNvZGUoZS50cmFja0luZm8sbi51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgdS5kZWZhdWx0LlJlYWRlcj9lOm5ldyB1LmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXtzcG9uc29yZWRTbHVnOnZvaWQgMCx0cmFja0luZm86dm9pZCAwfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5zcG9uc29yZWRTbHVnPXQuRmlsdGVyX1Nwb25zb3JlZFNsdWcuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOm8udHJhY2tJbmZvPXQuRmlsdGVyX1Nwb25zb3JlZEZpbHRlckluZm9fVHJhY2tJbmZvLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17c3BvbnNvcmVkU2x1Zzp2b2lkIDAsdHJhY2tJbmZvOnZvaWQgMH07cmV0dXJuIG4uc3BvbnNvcmVkU2x1Zz12b2lkIDAhPT1lLnNwb25zb3JlZFNsdWcmJm51bGwhPT1lLnNwb25zb3JlZFNsdWc/dC5GaWx0ZXJfU3BvbnNvcmVkU2x1Zy5mcm9tUGFydGlhbChlLnNwb25zb3JlZFNsdWcpOnZvaWQgMCxuLnRyYWNrSW5mbz12b2lkIDAhPT1lLnRyYWNrSW5mbyYmbnVsbCE9PWUudHJhY2tJbmZvP3QuRmlsdGVyX1Nwb25zb3JlZEZpbHRlckluZm9fVHJhY2tJbmZvLmZyb21QYXJ0aWFsKGUudHJhY2tJbmZvKTp2b2lkIDAsbn19LHQuRmlsdGVyX1Nwb25zb3JlZEZpbHRlckluZm9fVHJhY2tJbmZvPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnUuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUuYWRTZXJ2ZVJlcXVlc3RJZCYmdC51aW50MzIoMTApLnN0cmluZyhlLmFkU2VydmVSZXF1ZXN0SWQpLDAhPT1lLnJhd0FkRGF0YS5sZW5ndGgmJnQudWludDMyKDE4KS5ieXRlcyhlLnJhd0FkRGF0YSksITA9PT1lLnNraXBUcmFja2luZyYmdC51aW50MzIoMjQpLmJvb2woZS5za2lwVHJhY2tpbmcpLDAhPT1lLmVuY3J5cHRlZFNwb25zb3JlZFVubG9ja2FibGVUYXJnZXRpbmdJbmZvRGF0YS5sZW5ndGgmJnQudWludDMyKDM0KS5ieXRlcyhlLmVuY3J5cHRlZFNwb25zb3JlZFVubG9ja2FibGVUYXJnZXRpbmdJbmZvRGF0YSksXCJcIiE9PWUucmFua2luZ0lkJiZ0LnVpbnQzMig0Mikuc3RyaW5nKGUucmFua2luZ0lkKSwwIT09ZS5yYW5raW5nRGF0YS5sZW5ndGgmJnQudWludDMyKDUwKS5ieXRlcyhlLnJhbmtpbmdEYXRhKSwwIT09ZS5lbmNyeXB0ZWRVc2VyVHJhY2tEYXRhLmxlbmd0aCYmdC51aW50MzIoNTgpLmJ5dGVzKGUuZW5jcnlwdGVkVXNlclRyYWNrRGF0YSksMCE9PWUuc2tBZE5ldHdvcmtBdHRyaWJ1dGlvbi5sZW5ndGgmJnQudWludDMyKDY2KS5ieXRlcyhlLnNrQWROZXR3b3JrQXR0cmlidXRpb24pLDAhPT1lLmFkSWQubGVuZ3RoJiZ0LnVpbnQzMig3NCkuYnl0ZXMoZS5hZElkKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiB1LmRlZmF1bHQuUmVhZGVyP2U6bmV3IHUuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9aCgpO2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmFkU2VydmVSZXF1ZXN0SWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS5yYXdBZERhdGE9bi5ieXRlcygpO2JyZWFrO2Nhc2UgMzppLnNraXBUcmFja2luZz1uLmJvb2woKTticmVhaztjYXNlIDQ6aS5lbmNyeXB0ZWRTcG9uc29yZWRVbmxvY2thYmxlVGFyZ2V0aW5nSW5mb0RhdGE9bi5ieXRlcygpO2JyZWFrO2Nhc2UgNTppLnJhbmtpbmdJZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNjppLnJhbmtpbmdEYXRhPW4uYnl0ZXMoKTticmVhaztjYXNlIDc6aS5lbmNyeXB0ZWRVc2VyVHJhY2tEYXRhPW4uYnl0ZXMoKTticmVhaztjYXNlIDg6aS5za0FkTmV0d29ya0F0dHJpYnV0aW9uPW4uYnl0ZXMoKTticmVhaztjYXNlIDk6aS5hZElkPW4uYnl0ZXMoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9aCgpO3JldHVybiB0LmFkU2VydmVSZXF1ZXN0SWQ9ZS5hZFNlcnZlUmVxdWVzdElkPz9cIlwiLHQucmF3QWREYXRhPWUucmF3QWREYXRhPz9uZXcgVWludDhBcnJheSx0LnNraXBUcmFja2luZz1lLnNraXBUcmFja2luZz8/ITEsdC5lbmNyeXB0ZWRTcG9uc29yZWRVbmxvY2thYmxlVGFyZ2V0aW5nSW5mb0RhdGE9ZS5lbmNyeXB0ZWRTcG9uc29yZWRVbmxvY2thYmxlVGFyZ2V0aW5nSW5mb0RhdGE/P25ldyBVaW50OEFycmF5LHQucmFua2luZ0lkPWUucmFua2luZ0lkPz9cIlwiLHQucmFua2luZ0RhdGE9ZS5yYW5raW5nRGF0YT8/bmV3IFVpbnQ4QXJyYXksdC5lbmNyeXB0ZWRVc2VyVHJhY2tEYXRhPWUuZW5jcnlwdGVkVXNlclRyYWNrRGF0YT8/bmV3IFVpbnQ4QXJyYXksdC5za0FkTmV0d29ya0F0dHJpYnV0aW9uPWUuc2tBZE5ldHdvcmtBdHRyaWJ1dGlvbj8/bmV3IFVpbnQ4QXJyYXksdC5hZElkPWUuYWRJZD8/bmV3IFVpbnQ4QXJyYXksdH19LHQuRmlsdGVyX1Nwb25zb3JlZFNsdWc9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS50ZXh0JiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUudGV4dCksMCE9PWUudGltZUJlZm9yZUZhZGVvdXRNcyYmdC51aW50MzIoMTYpLnVpbnQzMihlLnRpbWVCZWZvcmVGYWRlb3V0TXMpLDAhPT1lLnBvc2l0aW9uJiZ0LnVpbnQzMigyNCkuaW50MzIoZS5wb3NpdGlvbiksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgdS5kZWZhdWx0LlJlYWRlcj9lOm5ldyB1LmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXt0ZXh0OlwiXCIsdGltZUJlZm9yZUZhZGVvdXRNczowLHBvc2l0aW9uOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnRleHQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS50aW1lQmVmb3JlRmFkZW91dE1zPW4udWludDMyKCk7YnJlYWs7Y2FzZSAzOmkucG9zaXRpb249bi5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dGV4dDpcIlwiLHRpbWVCZWZvcmVGYWRlb3V0TXM6MCxwb3NpdGlvbjowfTtyZXR1cm4gdC50ZXh0PWUudGV4dD8/XCJcIix0LnRpbWVCZWZvcmVGYWRlb3V0TXM9ZS50aW1lQmVmb3JlRmFkZW91dE1zPz8wLHQucG9zaXRpb249ZS5wb3NpdGlvbj8/MCx0fX0sdC5GaWx0ZXJfU3BvbnNvcmVkVHJhY2tJbmZvPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnUuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUuYWRTZXJ2ZVJlcXVlc3RJZCYmdC51aW50MzIoMTApLnN0cmluZyhlLmFkU2VydmVSZXF1ZXN0SWQpLDAhPT1lLnJhd0FkRGF0YS5sZW5ndGgmJnQudWludDMyKDE4KS5ieXRlcyhlLnJhd0FkRGF0YSksITA9PT1lLnNraXBUcmFja2luZyYmdC51aW50MzIoMjQpLmJvb2woZS5za2lwVHJhY2tpbmcpLDAhPT1lLmVuY3J5cHRlZFNwb25zb3JlZFVubG9ja2FibGVUYXJnZXRpbmdJbmZvRGF0YS5sZW5ndGgmJnQudWludDMyKDM0KS5ieXRlcyhlLmVuY3J5cHRlZFNwb25zb3JlZFVubG9ja2FibGVUYXJnZXRpbmdJbmZvRGF0YSksXCJcIiE9PWUucmFua2luZ0lkJiZ0LnVpbnQzMig0Mikuc3RyaW5nKGUucmFua2luZ0lkKSwwIT09ZS5yYW5raW5nRGF0YS5sZW5ndGgmJnQudWludDMyKDUwKS5ieXRlcyhlLnJhbmtpbmdEYXRhKSwwIT09ZS5lbmNyeXB0ZWRVc2VyVHJhY2tEYXRhLmxlbmd0aCYmdC51aW50MzIoNTgpLmJ5dGVzKGUuZW5jcnlwdGVkVXNlclRyYWNrRGF0YSksMCE9PWUuc2tBZE5ldHdvcmtBdHRyaWJ1dGlvbi5sZW5ndGgmJnQudWludDMyKDY2KS5ieXRlcyhlLnNrQWROZXR3b3JrQXR0cmlidXRpb24pLDAhPT1lLmFkSWQubGVuZ3RoJiZ0LnVpbnQzMig3NCkuYnl0ZXMoZS5hZElkKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiB1LmRlZmF1bHQuUmVhZGVyP2U6bmV3IHUuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9digpO2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmFkU2VydmVSZXF1ZXN0SWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS5yYXdBZERhdGE9bi5ieXRlcygpO2JyZWFrO2Nhc2UgMzppLnNraXBUcmFja2luZz1uLmJvb2woKTticmVhaztjYXNlIDQ6aS5lbmNyeXB0ZWRTcG9uc29yZWRVbmxvY2thYmxlVGFyZ2V0aW5nSW5mb0RhdGE9bi5ieXRlcygpO2JyZWFrO2Nhc2UgNTppLnJhbmtpbmdJZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNjppLnJhbmtpbmdEYXRhPW4uYnl0ZXMoKTticmVhaztjYXNlIDc6aS5lbmNyeXB0ZWRVc2VyVHJhY2tEYXRhPW4uYnl0ZXMoKTticmVhaztjYXNlIDg6aS5za0FkTmV0d29ya0F0dHJpYnV0aW9uPW4uYnl0ZXMoKTticmVhaztjYXNlIDk6aS5hZElkPW4uYnl0ZXMoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9digpO3JldHVybiB0LmFkU2VydmVSZXF1ZXN0SWQ9ZS5hZFNlcnZlUmVxdWVzdElkPz9cIlwiLHQucmF3QWREYXRhPWUucmF3QWREYXRhPz9uZXcgVWludDhBcnJheSx0LnNraXBUcmFja2luZz1lLnNraXBUcmFja2luZz8/ITEsdC5lbmNyeXB0ZWRTcG9uc29yZWRVbmxvY2thYmxlVGFyZ2V0aW5nSW5mb0RhdGE9ZS5lbmNyeXB0ZWRTcG9uc29yZWRVbmxvY2thYmxlVGFyZ2V0aW5nSW5mb0RhdGE/P25ldyBVaW50OEFycmF5LHQucmFua2luZ0lkPWUucmFua2luZ0lkPz9cIlwiLHQucmFua2luZ0RhdGE9ZS5yYW5raW5nRGF0YT8/bmV3IFVpbnQ4QXJyYXksdC5lbmNyeXB0ZWRVc2VyVHJhY2tEYXRhPWUuZW5jcnlwdGVkVXNlclRyYWNrRGF0YT8/bmV3IFVpbnQ4QXJyYXksdC5za0FkTmV0d29ya0F0dHJpYnV0aW9uPWUuc2tBZE5ldHdvcmtBdHRyaWJ1dGlvbj8/bmV3IFVpbnQ4QXJyYXksdC5hZElkPWUuYWRJZD8/bmV3IFVpbnQ4QXJyYXksdH19LHQuRmlsdGVyX0F1ZGlvPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnUuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUudXJsJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUudXJsKSwhMD09PWUuaXNMb29waW5nJiZ0LnVpbnQzMigxNikuYm9vbChlLmlzTG9vcGluZyksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgdS5kZWZhdWx0LlJlYWRlcj9lOm5ldyB1LmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXt1cmw6XCJcIixpc0xvb3Bpbmc6ITF9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnVybD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLmlzTG9vcGluZz1uLmJvb2woKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3VybDpcIlwiLGlzTG9vcGluZzohMX07cmV0dXJuIHQudXJsPWUudXJsPz9cIlwiLHQuaXNMb29waW5nPWUuaXNMb29waW5nPz8hMSx0fX0sdC5GaWx0ZXJfQXR0YWNobWVudD17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp1LmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmN0YVRleHQmJm4udWludDMyKDEwKS5zdHJpbmcoZS5jdGFUZXh0KSxcImxvbmdGb3JtVmlkZW9cIj09PWUuY29udGVudD8uJGNhc2UmJnQuRmlsdGVyX0F0dGFjaG1lbnRfTG9uZ0Zvcm1WaWRlby5lbmNvZGUoZS5jb250ZW50LmxvbmdGb3JtVmlkZW8sbi51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksXCJ3ZWJWaWV3XCI9PT1lLmNvbnRlbnQ/LiRjYXNlJiZkLldlYlZpZXdBdHRhY2htZW50LmVuY29kZShlLmNvbnRlbnQud2ViVmlldyxuLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSxcImFwcEluc3RhbGxcIj09PWUuY29udGVudD8uJGNhc2UmJmYuQXBwSW5zdGFsbC5lbmNvZGUoZS5jb250ZW50LmFwcEluc3RhbGwsbi51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCksXCJkZWVwTGlua1wiPT09ZS5jb250ZW50Py4kY2FzZSYmcC5EZWVwbGluay5lbmNvZGUoZS5jb250ZW50LmRlZXBMaW5rLG4udWludDMyKDQyKS5mb3JrKCkpLmxkZWxpbSgpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIHUuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgdS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17Y3RhVGV4dDpcIlwiLGNvbnRlbnQ6dm9pZCAwfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5jdGFUZXh0PXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOm8uY29udGVudD17JGNhc2U6XCJsb25nRm9ybVZpZGVvXCIsbG9uZ0Zvcm1WaWRlbzp0LkZpbHRlcl9BdHRhY2htZW50X0xvbmdGb3JtVmlkZW8uZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMzpvLmNvbnRlbnQ9eyRjYXNlOlwid2ViVmlld1wiLHdlYlZpZXc6ZC5XZWJWaWV3QXR0YWNobWVudC5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA0Om8uY29udGVudD17JGNhc2U6XCJhcHBJbnN0YWxsXCIsYXBwSW5zdGFsbDpmLkFwcEluc3RhbGwuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgNTpvLmNvbnRlbnQ9eyRjYXNlOlwiZGVlcExpbmtcIixkZWVwTGluazpwLkRlZXBsaW5rLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e2N0YVRleHQ6XCJcIixjb250ZW50OnZvaWQgMH07cmV0dXJuIG4uY3RhVGV4dD1lLmN0YVRleHQ/P1wiXCIsXCJsb25nRm9ybVZpZGVvXCI9PT1lLmNvbnRlbnQ/LiRjYXNlJiZ2b2lkIDAhPT1lLmNvbnRlbnQ/LmxvbmdGb3JtVmlkZW8mJm51bGwhPT1lLmNvbnRlbnQ/LmxvbmdGb3JtVmlkZW8mJihuLmNvbnRlbnQ9eyRjYXNlOlwibG9uZ0Zvcm1WaWRlb1wiLGxvbmdGb3JtVmlkZW86dC5GaWx0ZXJfQXR0YWNobWVudF9Mb25nRm9ybVZpZGVvLmZyb21QYXJ0aWFsKGUuY29udGVudC5sb25nRm9ybVZpZGVvKX0pLFwid2ViVmlld1wiPT09ZS5jb250ZW50Py4kY2FzZSYmdm9pZCAwIT09ZS5jb250ZW50Py53ZWJWaWV3JiZudWxsIT09ZS5jb250ZW50Py53ZWJWaWV3JiYobi5jb250ZW50PXskY2FzZTpcIndlYlZpZXdcIix3ZWJWaWV3OmQuV2ViVmlld0F0dGFjaG1lbnQuZnJvbVBhcnRpYWwoZS5jb250ZW50LndlYlZpZXcpfSksXCJhcHBJbnN0YWxsXCI9PT1lLmNvbnRlbnQ/LiRjYXNlJiZ2b2lkIDAhPT1lLmNvbnRlbnQ/LmFwcEluc3RhbGwmJm51bGwhPT1lLmNvbnRlbnQ/LmFwcEluc3RhbGwmJihuLmNvbnRlbnQ9eyRjYXNlOlwiYXBwSW5zdGFsbFwiLGFwcEluc3RhbGw6Zi5BcHBJbnN0YWxsLmZyb21QYXJ0aWFsKGUuY29udGVudC5hcHBJbnN0YWxsKX0pLFwiZGVlcExpbmtcIj09PWUuY29udGVudD8uJGNhc2UmJnZvaWQgMCE9PWUuY29udGVudD8uZGVlcExpbmsmJm51bGwhPT1lLmNvbnRlbnQ/LmRlZXBMaW5rJiYobi5jb250ZW50PXskY2FzZTpcImRlZXBMaW5rXCIsZGVlcExpbms6cC5EZWVwbGluay5mcm9tUGFydGlhbChlLmNvbnRlbnQuZGVlcExpbmspfSksbn19LHQuRmlsdGVyX0F0dGFjaG1lbnRfTG9uZ0Zvcm1WaWRlbz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp1LmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnZpZGVvSWQmJnQudWludDMyKDEwKS5zdHJpbmcoZS52aWRlb0lkKSwwIT09ZS5wbGF0Zm9ybSYmdC51aW50MzIoMTYpLmludDMyKGUucGxhdGZvcm0pLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHUuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgdS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17dmlkZW9JZDpcIlwiLHBsYXRmb3JtOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnZpZGVvSWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS5wbGF0Zm9ybT1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt2aWRlb0lkOlwiXCIscGxhdGZvcm06MH07cmV0dXJuIHQudmlkZW9JZD1lLnZpZGVvSWQ/P1wiXCIsdC5wbGF0Zm9ybT1lLnBsYXRmb3JtPz8wLHR9fSx0LkZpbHRlcl9DbGllbnRPcmRlcmluZ0luZm89e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5jYXJvdXNlbEdyb3VwSW5mbyYmdC5GaWx0ZXJfQ2xpZW50T3JkZXJpbmdJbmZvX0Nhcm91c2VsR3JvdXBJbmZvLmVuY29kZShlLmNhcm91c2VsR3JvdXBJbmZvLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLCEwPT09ZS5ndWFyYW50ZWVEZWxpdmVyeSYmbi51aW50MzIoMTYpLmJvb2woZS5ndWFyYW50ZWVEZWxpdmVyeSksMCE9PWUucHJpb3JpdHkmJm4udWludDMyKDI0KS5pbnQzMihlLnByaW9yaXR5KSx2b2lkIDAhPT1lLmNhcm91c2VsR2xvYmFsU2NvcmVMaXN0JiZsLkNhcm91c2VsR2xvYmFsU2NvcmVMaXN0LmVuY29kZShlLmNhcm91c2VsR2xvYmFsU2NvcmVMaXN0LG4udWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIHUuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgdS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17Y2Fyb3VzZWxHcm91cEluZm86dm9pZCAwLGd1YXJhbnRlZURlbGl2ZXJ5OiExLHByaW9yaXR5OjAsY2Fyb3VzZWxHbG9iYWxTY29yZUxpc3Q6dm9pZCAwfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5jYXJvdXNlbEdyb3VwSW5mbz10LkZpbHRlcl9DbGllbnRPcmRlcmluZ0luZm9fQ2Fyb3VzZWxHcm91cEluZm8uZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOm8uZ3VhcmFudGVlRGVsaXZlcnk9ci5ib29sKCk7YnJlYWs7Y2FzZSAzOm8ucHJpb3JpdHk9ci5pbnQzMigpO2JyZWFrO2Nhc2UgNDpvLmNhcm91c2VsR2xvYmFsU2NvcmVMaXN0PWwuQ2Fyb3VzZWxHbG9iYWxTY29yZUxpc3QuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtjYXJvdXNlbEdyb3VwSW5mbzp2b2lkIDAsZ3VhcmFudGVlRGVsaXZlcnk6ITEscHJpb3JpdHk6MCxjYXJvdXNlbEdsb2JhbFNjb3JlTGlzdDp2b2lkIDB9O3JldHVybiBuLmNhcm91c2VsR3JvdXBJbmZvPXZvaWQgMCE9PWUuY2Fyb3VzZWxHcm91cEluZm8mJm51bGwhPT1lLmNhcm91c2VsR3JvdXBJbmZvP3QuRmlsdGVyX0NsaWVudE9yZGVyaW5nSW5mb19DYXJvdXNlbEdyb3VwSW5mby5mcm9tUGFydGlhbChlLmNhcm91c2VsR3JvdXBJbmZvKTp2b2lkIDAsbi5ndWFyYW50ZWVEZWxpdmVyeT1lLmd1YXJhbnRlZURlbGl2ZXJ5Pz8hMSxuLnByaW9yaXR5PWUucHJpb3JpdHk/PzAsbi5jYXJvdXNlbEdsb2JhbFNjb3JlTGlzdD12b2lkIDAhPT1lLmNhcm91c2VsR2xvYmFsU2NvcmVMaXN0JiZudWxsIT09ZS5jYXJvdXNlbEdsb2JhbFNjb3JlTGlzdD9sLkNhcm91c2VsR2xvYmFsU2NvcmVMaXN0LmZyb21QYXJ0aWFsKGUuY2Fyb3VzZWxHbG9iYWxTY29yZUxpc3QpOnZvaWQgMCxufX0sdC5GaWx0ZXJfQ2xpZW50T3JkZXJpbmdJbmZvX0Nhcm91c2VsR3JvdXBJbmZvPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnUuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUuZ3JvdXBOYW1lJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUuZ3JvdXBOYW1lKSwwIT09ZS5jYXJvdXNlbFNjb3JlJiZ0LnVpbnQzMigyMSkuZmxvYXQoZS5jYXJvdXNlbFNjb3JlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiB1LmRlZmF1bHQuUmVhZGVyP2U6bmV3IHUuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2dyb3VwTmFtZTpcIlwiLGNhcm91c2VsU2NvcmU6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuZ3JvdXBOYW1lPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkuY2Fyb3VzZWxTY29yZT1uLmZsb2F0KCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtncm91cE5hbWU6XCJcIixjYXJvdXNlbFNjb3JlOjB9O3JldHVybiB0Lmdyb3VwTmFtZT1lLmdyb3VwTmFtZT8/XCJcIix0LmNhcm91c2VsU2NvcmU9ZS5jYXJvdXNlbFNjb3JlPz8wLHR9fSx0LkZpbHRlcl9DbGllbnRSZW5kZXJpbmdJbmZvPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnUuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLnNjYWxlJiZ0LnVpbnQzMig4KS5pbnQzMihlLnNjYWxlKSwwIT09ZS5wb3NpdGlvbiYmdC51aW50MzIoMTYpLmludDMyKGUucG9zaXRpb24pLCEwPT09ZS5iZWxvd0RyYXdpbmdMYXllciYmdC51aW50MzIoMjQpLmJvb2woZS5iZWxvd0RyYXdpbmdMYXllciksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgdS5kZWZhdWx0LlJlYWRlcj9lOm5ldyB1LmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtzY2FsZTowLHBvc2l0aW9uOjAsYmVsb3dEcmF3aW5nTGF5ZXI6ITF9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnNjYWxlPW4uaW50MzIoKTticmVhaztjYXNlIDI6aS5wb3NpdGlvbj1uLmludDMyKCk7YnJlYWs7Y2FzZSAzOmkuYmVsb3dEcmF3aW5nTGF5ZXI9bi5ib29sKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtzY2FsZTowLHBvc2l0aW9uOjAsYmVsb3dEcmF3aW5nTGF5ZXI6ITF9O3JldHVybiB0LnNjYWxlPWUuc2NhbGU/PzAsdC5wb3NpdGlvbj1lLnBvc2l0aW9uPz8wLHQuYmVsb3dEcmF3aW5nTGF5ZXI9ZS5iZWxvd0RyYXdpbmdMYXllcj8/ITEsdH19LHQuRmlsdGVyX0FyU2VnbWVudGF0aW9uSW5mbz17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp1LmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiEwPT09ZS5zaG91bGREaXNwbGF5V2l0aG91dFNlZ21lbnRhdGlvbk1hdGNoJiZuLnVpbnQzMig4KS5ib29sKGUuc2hvdWxkRGlzcGxheVdpdGhvdXRTZWdtZW50YXRpb25NYXRjaCksITA9PT1lLmlzQmFzaWMmJm4udWludDMyKDE2KS5ib29sKGUuaXNCYXNpYyksXCJza3lGaWx0ZXJcIj09PWUuZmlsdGVyPy4kY2FzZSYmdC5GaWx0ZXJfQXJTZWdtZW50YXRpb25JbmZvX1NreUZpbHRlci5lbmNvZGUoZS5maWx0ZXIuc2t5RmlsdGVyLG4udWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLFwicG9ydHJhaXRGaWx0ZXJcIj09PWUuZmlsdGVyPy4kY2FzZSYmdC5GaWx0ZXJfQXJTZWdtZW50YXRpb25JbmZvX1BvcnRyYWl0RmlsdGVyLmVuY29kZShlLmZpbHRlci5wb3J0cmFpdEZpbHRlcixuLnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiB1LmRlZmF1bHQuUmVhZGVyP2U6bmV3IHUuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89e3Nob3VsZERpc3BsYXlXaXRob3V0U2VnbWVudGF0aW9uTWF0Y2g6ITEsaXNCYXNpYzohMSxmaWx0ZXI6dm9pZCAwfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5zaG91bGREaXNwbGF5V2l0aG91dFNlZ21lbnRhdGlvbk1hdGNoPXIuYm9vbCgpO2JyZWFrO2Nhc2UgMjpvLmlzQmFzaWM9ci5ib29sKCk7YnJlYWs7Y2FzZSAzOm8uZmlsdGVyPXskY2FzZTpcInNreUZpbHRlclwiLHNreUZpbHRlcjp0LkZpbHRlcl9BclNlZ21lbnRhdGlvbkluZm9fU2t5RmlsdGVyLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDQ6by5maWx0ZXI9eyRjYXNlOlwicG9ydHJhaXRGaWx0ZXJcIixwb3J0cmFpdEZpbHRlcjp0LkZpbHRlcl9BclNlZ21lbnRhdGlvbkluZm9fUG9ydHJhaXRGaWx0ZXIuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17c2hvdWxkRGlzcGxheVdpdGhvdXRTZWdtZW50YXRpb25NYXRjaDohMSxpc0Jhc2ljOiExLGZpbHRlcjp2b2lkIDB9O3JldHVybiBuLnNob3VsZERpc3BsYXlXaXRob3V0U2VnbWVudGF0aW9uTWF0Y2g9ZS5zaG91bGREaXNwbGF5V2l0aG91dFNlZ21lbnRhdGlvbk1hdGNoPz8hMSxuLmlzQmFzaWM9ZS5pc0Jhc2ljPz8hMSxcInNreUZpbHRlclwiPT09ZS5maWx0ZXI/LiRjYXNlJiZ2b2lkIDAhPT1lLmZpbHRlcj8uc2t5RmlsdGVyJiZudWxsIT09ZS5maWx0ZXI/LnNreUZpbHRlciYmKG4uZmlsdGVyPXskY2FzZTpcInNreUZpbHRlclwiLHNreUZpbHRlcjp0LkZpbHRlcl9BclNlZ21lbnRhdGlvbkluZm9fU2t5RmlsdGVyLmZyb21QYXJ0aWFsKGUuZmlsdGVyLnNreUZpbHRlcil9KSxcInBvcnRyYWl0RmlsdGVyXCI9PT1lLmZpbHRlcj8uJGNhc2UmJnZvaWQgMCE9PWUuZmlsdGVyPy5wb3J0cmFpdEZpbHRlciYmbnVsbCE9PWUuZmlsdGVyPy5wb3J0cmFpdEZpbHRlciYmKG4uZmlsdGVyPXskY2FzZTpcInBvcnRyYWl0RmlsdGVyXCIscG9ydHJhaXRGaWx0ZXI6dC5GaWx0ZXJfQXJTZWdtZW50YXRpb25JbmZvX1BvcnRyYWl0RmlsdGVyLmZyb21QYXJ0aWFsKGUuZmlsdGVyLnBvcnRyYWl0RmlsdGVyKX0pLG59fSx0LkZpbHRlcl9BclNlZ21lbnRhdGlvbkluZm9fU2t5RmlsdGVyPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnUuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLnNreVR5cGUmJnQudWludDMyKDgpLmludDMyKGUuc2t5VHlwZSksMCE9PWUuc3R5bGUmJnQudWludDMyKDE2KS5pbnQzMihlLnN0eWxlKSxcIlwiIT09ZS5yZXBsYWNlbWVudFNreVVybCYmdC51aW50MzIoMjYpLnN0cmluZyhlLnJlcGxhY2VtZW50U2t5VXJsKSxcIlwiIT09ZS5ibGltcFVybCYmdC51aW50MzIoMzQpLnN0cmluZyhlLmJsaW1wVXJsKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiB1LmRlZmF1bHQuUmVhZGVyP2U6bmV3IHUuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3NreVR5cGU6MCxzdHlsZTowLHJlcGxhY2VtZW50U2t5VXJsOlwiXCIsYmxpbXBVcmw6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuc2t5VHlwZT1uLmludDMyKCk7YnJlYWs7Y2FzZSAyOmkuc3R5bGU9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMzppLnJlcGxhY2VtZW50U2t5VXJsPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA0OmkuYmxpbXBVcmw9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3NreVR5cGU6MCxzdHlsZTowLHJlcGxhY2VtZW50U2t5VXJsOlwiXCIsYmxpbXBVcmw6XCJcIn07cmV0dXJuIHQuc2t5VHlwZT1lLnNreVR5cGU/PzAsdC5zdHlsZT1lLnN0eWxlPz8wLHQucmVwbGFjZW1lbnRTa3lVcmw9ZS5yZXBsYWNlbWVudFNreVVybD8/XCJcIix0LmJsaW1wVXJsPWUuYmxpbXBVcmw/P1wiXCIsdH19LHQuRmlsdGVyX0FyU2VnbWVudGF0aW9uSW5mb19Qb3J0cmFpdEZpbHRlcj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp1LmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnVybCYmdC51aW50MzIoMTApLnN0cmluZyhlLnVybCksITA9PT1lLmJva2VoJiZ0LnVpbnQzMigxNikuYm9vbChlLmJva2VoKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiB1LmRlZmF1bHQuUmVhZGVyP2U6bmV3IHUuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3VybDpcIlwiLGJva2VoOiExfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS51cmw9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS5ib2tlaD1uLmJvb2woKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3VybDpcIlwiLGJva2VoOiExfTtyZXR1cm4gdC51cmw9ZS51cmw/P1wiXCIsdC5ib2tlaD1lLmJva2VoPz8hMSx0fX0sdC5GaWx0ZXJfVG9vbHRpcD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp1LmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmxvY2FsaXplZE1lc3NhZ2UmJnQudWludDMyKDEwKS5zdHJpbmcoZS5sb2NhbGl6ZWRNZXNzYWdlKSwwIT09ZS5jb29sRG93blBlcmlvZE1pbnV0ZXMmJnQudWludDMyKDE2KS5pbnQzMihlLmNvb2xEb3duUGVyaW9kTWludXRlcyksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgdS5kZWZhdWx0LlJlYWRlcj9lOm5ldyB1LmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtsb2NhbGl6ZWRNZXNzYWdlOlwiXCIsY29vbERvd25QZXJpb2RNaW51dGVzOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmxvY2FsaXplZE1lc3NhZ2U9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS5jb29sRG93blBlcmlvZE1pbnV0ZXM9bi5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17bG9jYWxpemVkTWVzc2FnZTpcIlwiLGNvb2xEb3duUGVyaW9kTWludXRlczowfTtyZXR1cm4gdC5sb2NhbGl6ZWRNZXNzYWdlPWUubG9jYWxpemVkTWVzc2FnZT8/XCJcIix0LmNvb2xEb3duUGVyaW9kTWludXRlcz1lLmNvb2xEb3duUGVyaW9kTWludXRlcz8/MCx0fX0sdC5GaWx0ZXJfVG9hc3RNZXNzYWdlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnUuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUubWVzc2FnZSYmdC51aW50MzIoMTApLnN0cmluZyhlLm1lc3NhZ2UpLDAhPT1lLnBvc2l0aW9uJiZ0LnVpbnQzMigxNikuaW50MzIoZS5wb3NpdGlvbiksMCE9PWUuZmFkZUluVGltZU1zJiZ0LnVpbnQzMigyNCkuaW50MzIoZS5mYWRlSW5UaW1lTXMpLDAhPT1lLm9uU2NyZWVuVGltZU1zJiZ0LnVpbnQzMigzMikuaW50MzIoZS5vblNjcmVlblRpbWVNcyksMCE9PWUuZmFkZU91dFRpbWVNcyYmdC51aW50MzIoNDApLmludDMyKGUuZmFkZU91dFRpbWVNcyksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgdS5kZWZhdWx0LlJlYWRlcj9lOm5ldyB1LmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXttZXNzYWdlOlwiXCIscG9zaXRpb246MCxmYWRlSW5UaW1lTXM6MCxvblNjcmVlblRpbWVNczowLGZhZGVPdXRUaW1lTXM6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkubWVzc2FnZT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLnBvc2l0aW9uPW4uaW50MzIoKTticmVhaztjYXNlIDM6aS5mYWRlSW5UaW1lTXM9bi5pbnQzMigpO2JyZWFrO2Nhc2UgNDppLm9uU2NyZWVuVGltZU1zPW4uaW50MzIoKTticmVhaztjYXNlIDU6aS5mYWRlT3V0VGltZU1zPW4uaW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e21lc3NhZ2U6XCJcIixwb3NpdGlvbjowLGZhZGVJblRpbWVNczowLG9uU2NyZWVuVGltZU1zOjAsZmFkZU91dFRpbWVNczowfTtyZXR1cm4gdC5tZXNzYWdlPWUubWVzc2FnZT8/XCJcIix0LnBvc2l0aW9uPWUucG9zaXRpb24/PzAsdC5mYWRlSW5UaW1lTXM9ZS5mYWRlSW5UaW1lTXM/PzAsdC5vblNjcmVlblRpbWVNcz1lLm9uU2NyZWVuVGltZU1zPz8wLHQuZmFkZU91dFRpbWVNcz1lLmZhZGVPdXRUaW1lTXM/PzAsdH19LHQuRmlsdGVyX0NsaWVudEdlbmVyYXRlZEZpbHRlcj17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp1LmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiY29sb3JGaWx0ZXJcIj09PWUuY29udGVudD8uJGNhc2UmJnQuRmlsdGVyX0NsaWVudEdlbmVyYXRlZEZpbHRlcl9Db2xvckZpbHRlci5lbmNvZGUoZS5jb250ZW50LmNvbG9yRmlsdGVyLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLFwibW90aW9uRmlsdGVyXCI9PT1lLmNvbnRlbnQ/LiRjYXNlJiZ0LkZpbHRlcl9DbGllbnRHZW5lcmF0ZWRGaWx0ZXJfTW90aW9uRmlsdGVyLmVuY29kZShlLmNvbnRlbnQubW90aW9uRmlsdGVyLG4udWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIHUuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgdS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17Y29udGVudDp2b2lkIDB9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLmNvbnRlbnQ9eyRjYXNlOlwiY29sb3JGaWx0ZXJcIixjb2xvckZpbHRlcjp0LkZpbHRlcl9DbGllbnRHZW5lcmF0ZWRGaWx0ZXJfQ29sb3JGaWx0ZXIuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMjpvLmNvbnRlbnQ9eyRjYXNlOlwibW90aW9uRmlsdGVyXCIsbW90aW9uRmlsdGVyOnQuRmlsdGVyX0NsaWVudEdlbmVyYXRlZEZpbHRlcl9Nb3Rpb25GaWx0ZXIuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17Y29udGVudDp2b2lkIDB9O3JldHVyblwiY29sb3JGaWx0ZXJcIj09PWUuY29udGVudD8uJGNhc2UmJnZvaWQgMCE9PWUuY29udGVudD8uY29sb3JGaWx0ZXImJm51bGwhPT1lLmNvbnRlbnQ/LmNvbG9yRmlsdGVyJiYobi5jb250ZW50PXskY2FzZTpcImNvbG9yRmlsdGVyXCIsY29sb3JGaWx0ZXI6dC5GaWx0ZXJfQ2xpZW50R2VuZXJhdGVkRmlsdGVyX0NvbG9yRmlsdGVyLmZyb21QYXJ0aWFsKGUuY29udGVudC5jb2xvckZpbHRlcil9KSxcIm1vdGlvbkZpbHRlclwiPT09ZS5jb250ZW50Py4kY2FzZSYmdm9pZCAwIT09ZS5jb250ZW50Py5tb3Rpb25GaWx0ZXImJm51bGwhPT1lLmNvbnRlbnQ/Lm1vdGlvbkZpbHRlciYmKG4uY29udGVudD17JGNhc2U6XCJtb3Rpb25GaWx0ZXJcIixtb3Rpb25GaWx0ZXI6dC5GaWx0ZXJfQ2xpZW50R2VuZXJhdGVkRmlsdGVyX01vdGlvbkZpbHRlci5mcm9tUGFydGlhbChlLmNvbnRlbnQubW90aW9uRmlsdGVyKX0pLG59fSx0LkZpbHRlcl9DbGllbnRHZW5lcmF0ZWRGaWx0ZXJfQ29sb3JGaWx0ZXI9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUudHlwZSYmdC51aW50MzIoOCkuaW50MzIoZS50eXBlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiB1LmRlZmF1bHQuUmVhZGVyP2U6bmV3IHUuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3R5cGU6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2kudHlwZT1uLmludDMyKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt0eXBlOjB9O3JldHVybiB0LnR5cGU9ZS50eXBlPz8wLHR9fSx0LkZpbHRlcl9DbGllbnRHZW5lcmF0ZWRGaWx0ZXJfTW90aW9uRmlsdGVyPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnUuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLnR5cGUmJnQudWludDMyKDgpLmludDMyKGUudHlwZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgdS5kZWZhdWx0LlJlYWRlcj9lOm5ldyB1LmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXt0eXBlOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLnR5cGU9bi5pbnQzMigpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dHlwZTowfTtyZXR1cm4gdC50eXBlPWUudHlwZT8/MCx0fX0sdS5kZWZhdWx0LnV0aWwuTG9uZyE9PWkuZGVmYXVsdCYmKHUuZGVmYXVsdC51dGlsLkxvbmc9aS5kZWZhdWx0LHUuZGVmYXVsdC5jb25maWd1cmUoKSl9LDY4NDcxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkdmeWNhdF9NZWRpYUFzc2V0PXQuR2Z5Y2F0PXQuR2Z5Y2F0X0NvbnRlbnRUeXBlPXQuR2Z5Y2F0X0ZpbGVGb3JtYXQ9dm9pZCAwO2NvbnN0IGk9cihuKDQxNTgzKSksbz1uKDY2NzIyKSxhPXIobig2MjEwMCkpO2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGUudG9TdHJpbmcoKX12YXIgYyxsOyhsPXQuR2Z5Y2F0X0ZpbGVGb3JtYXR8fCh0LkdmeWNhdF9GaWxlRm9ybWF0PXt9KSlbbC5GT1JNQVRfVU5TRVQ9MF09XCJGT1JNQVRfVU5TRVRcIixsW2wuSlBHPTFdPVwiSlBHXCIsbFtsLlBORz0yXT1cIlBOR1wiLGxbbC5NQVhfMU1CX0dJRj0zXT1cIk1BWF8xTUJfR0lGXCIsbFtsLk1BWF81TUJfR0lGPTRdPVwiTUFYXzVNQl9HSUZcIixsW2wuV0VCUD01XT1cIldFQlBcIixsW2wuTU9CSUxFX01QND02XT1cIk1PQklMRV9NUDRcIixsW2wuTVA0PTddPVwiTVA0XCIsbFtsLkdJRl9GT1JNQVQ9OF09XCJHSUZfRk9STUFUXCIsbFtsLlBPU1RFUj05XT1cIlBPU1RFUlwiLGxbbC5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKGM9dC5HZnljYXRfQ29udGVudFR5cGV8fCh0LkdmeWNhdF9Db250ZW50VHlwZT17fSkpW2MuQ09OVEVOVF9VTlNFVD0wXT1cIkNPTlRFTlRfVU5TRVRcIixjW2MuU1RJQ0tFUj0xXT1cIlNUSUNLRVJcIixjW2MuR0lGPTJdPVwiR0lGXCIsY1tjLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0LkdmeWNhdD17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO1wiXCIhPT1lLmdmeWNhdElkJiZuLnVpbnQzMigxMCkuc3RyaW5nKGUuZ2Z5Y2F0SWQpLFwiXCIhPT1lLnRpdGxlJiZuLnVpbnQzMigxOCkuc3RyaW5nKGUudGl0bGUpLFwiXCIhPT1lLmRlc2NyaXB0aW9uJiZuLnVpbnQzMigyNikuc3RyaW5nKGUuZGVzY3JpcHRpb24pO2Zvcihjb25zdCByIG9mIGUubWVkaWFBc3NldHMpdC5HZnljYXRfTWVkaWFBc3NldC5lbmNvZGUocixuLnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKTtmb3IoY29uc3QgdCBvZiBlLnRhZ3Mpbi51aW50MzIoNDIpLnN0cmluZyh0KTswIT09ZS5jb250ZW50VHlwZSYmbi51aW50MzIoNDgpLmludDMyKGUuY29udGVudFR5cGUpLCEwPT09ZS5oYXNBdWRpbyYmbi51aW50MzIoNTYpLmJvb2woZS5oYXNBdWRpbyksXCIwXCIhPT1lLnZpZXdDb3VudCYmbi51aW50MzIoNjQpLnVpbnQ2NChlLnZpZXdDb3VudCksXCIwXCIhPT1lLmxpa2VzJiZuLnVpbnQzMig3MikudWludDY0KGUubGlrZXMpLCEwPT09ZS5wdWJsaXNoZWQmJm4udWludDMyKDgwKS5ib29sKGUucHVibGlzaGVkKSwhMD09PWUudXNlck5zZncmJm4udWludDMyKDg4KS5ib29sKGUudXNlck5zZncpO2Zvcihjb25zdCB0IG9mIGUuY2F0ZWdvcmllcyluLnVpbnQzMig5OCkuc3RyaW5nKHQpO3JldHVyblwiMFwiIT09ZS5mcmFtZUNvdW50JiZuLnVpbnQzMigxMDQpLnVpbnQ2NChlLmZyYW1lQ291bnQpLDAhPT1lLmZyYW1lUmF0ZSYmbi51aW50MzIoMTE3KS5mbG9hdChlLmZyYW1lUmF0ZSksXCJcIiE9PWUuYXZnQ29sb3ImJm4udWludDMyKDEyMikuc3RyaW5nKGUuYXZnQ29sb3IpLFwiXCIhPT1lLnNsdWdzJiZuLnVpbnQzMigxMzApLnN0cmluZyhlLnNsdWdzKSxcIlwiIT09ZS5jcmVhdG9yR2Z5Y2F0VXNlcm5hbWUmJm4udWludDMyKDEzOCkuc3RyaW5nKGUuY3JlYXRvckdmeWNhdFVzZXJuYW1lKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89e2dmeWNhdElkOlwiXCIsdGl0bGU6XCJcIixkZXNjcmlwdGlvbjpcIlwiLG1lZGlhQXNzZXRzOltdLHRhZ3M6W10sY29udGVudFR5cGU6MCxoYXNBdWRpbzohMSx2aWV3Q291bnQ6XCIwXCIsbGlrZXM6XCIwXCIscHVibGlzaGVkOiExLHVzZXJOc2Z3OiExLGNhdGVnb3JpZXM6W10sZnJhbWVDb3VudDpcIjBcIixmcmFtZVJhdGU6MCxhdmdDb2xvcjpcIlwiLHNsdWdzOlwiXCIsY3JlYXRvckdmeWNhdFVzZXJuYW1lOlwiXCJ9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLmdmeWNhdElkPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOm8udGl0bGU9ci5zdHJpbmcoKTticmVhaztjYXNlIDM6by5kZXNjcmlwdGlvbj1yLnN0cmluZygpO2JyZWFrO2Nhc2UgNDpvLm1lZGlhQXNzZXRzLnB1c2godC5HZnljYXRfTWVkaWFBc3NldC5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSA1Om8udGFncy5wdXNoKHIuc3RyaW5nKCkpO2JyZWFrO2Nhc2UgNjpvLmNvbnRlbnRUeXBlPXIuaW50MzIoKTticmVhaztjYXNlIDc6by5oYXNBdWRpbz1yLmJvb2woKTticmVhaztjYXNlIDg6by52aWV3Q291bnQ9cyhyLnVpbnQ2NCgpKTticmVhaztjYXNlIDk6by5saWtlcz1zKHIudWludDY0KCkpO2JyZWFrO2Nhc2UgMTA6by5wdWJsaXNoZWQ9ci5ib29sKCk7YnJlYWs7Y2FzZSAxMTpvLnVzZXJOc2Z3PXIuYm9vbCgpO2JyZWFrO2Nhc2UgMTI6by5jYXRlZ29yaWVzLnB1c2goci5zdHJpbmcoKSk7YnJlYWs7Y2FzZSAxMzpvLmZyYW1lQ291bnQ9cyhyLnVpbnQ2NCgpKTticmVhaztjYXNlIDE0Om8uZnJhbWVSYXRlPXIuZmxvYXQoKTticmVhaztjYXNlIDE1Om8uYXZnQ29sb3I9ci5zdHJpbmcoKTticmVhaztjYXNlIDE2Om8uc2x1Z3M9ci5zdHJpbmcoKTticmVhaztjYXNlIDE3Om8uY3JlYXRvckdmeWNhdFVzZXJuYW1lPXIuc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtnZnljYXRJZDpcIlwiLHRpdGxlOlwiXCIsZGVzY3JpcHRpb246XCJcIixtZWRpYUFzc2V0czpbXSx0YWdzOltdLGNvbnRlbnRUeXBlOjAsaGFzQXVkaW86ITEsdmlld0NvdW50OlwiMFwiLGxpa2VzOlwiMFwiLHB1Ymxpc2hlZDohMSx1c2VyTnNmdzohMSxjYXRlZ29yaWVzOltdLGZyYW1lQ291bnQ6XCIwXCIsZnJhbWVSYXRlOjAsYXZnQ29sb3I6XCJcIixzbHVnczpcIlwiLGNyZWF0b3JHZnljYXRVc2VybmFtZTpcIlwifTtyZXR1cm4gbi5nZnljYXRJZD1lLmdmeWNhdElkPz9cIlwiLG4udGl0bGU9ZS50aXRsZT8/XCJcIixuLmRlc2NyaXB0aW9uPWUuZGVzY3JpcHRpb24/P1wiXCIsbi5tZWRpYUFzc2V0cz1lLm1lZGlhQXNzZXRzPy5tYXAoKGU9PnQuR2Z5Y2F0X01lZGlhQXNzZXQuZnJvbVBhcnRpYWwoZSkpKXx8W10sbi50YWdzPWUudGFncz8ubWFwKChlPT5lKSl8fFtdLG4uY29udGVudFR5cGU9ZS5jb250ZW50VHlwZT8/MCxuLmhhc0F1ZGlvPWUuaGFzQXVkaW8/PyExLG4udmlld0NvdW50PWUudmlld0NvdW50Pz9cIjBcIixuLmxpa2VzPWUubGlrZXM/P1wiMFwiLG4ucHVibGlzaGVkPWUucHVibGlzaGVkPz8hMSxuLnVzZXJOc2Z3PWUudXNlck5zZnc/PyExLG4uY2F0ZWdvcmllcz1lLmNhdGVnb3JpZXM/Lm1hcCgoZT0+ZSkpfHxbXSxuLmZyYW1lQ291bnQ9ZS5mcmFtZUNvdW50Pz9cIjBcIixuLmZyYW1lUmF0ZT1lLmZyYW1lUmF0ZT8/MCxuLmF2Z0NvbG9yPWUuYXZnQ29sb3I/P1wiXCIsbi5zbHVncz1lLnNsdWdzPz9cIlwiLG4uY3JlYXRvckdmeWNhdFVzZXJuYW1lPWUuY3JlYXRvckdmeWNhdFVzZXJuYW1lPz9cIlwiLG59fSx0LkdmeWNhdF9NZWRpYUFzc2V0PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLmZvcm1hdCYmdC51aW50MzIoOCkuaW50MzIoZS5mb3JtYXQpLHZvaWQgMCE9PWUubWVkaWFDb250ZW50JiZvLk1lZGlhQ29udGVudC5lbmNvZGUoZS5tZWRpYUNvbnRlbnQsdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksMCE9PWUud2lkdGgmJnQudWludDMyKDI0KS51aW50MzIoZS53aWR0aCksMCE9PWUuaGVpZ2h0JiZ0LnVpbnQzMigzMikudWludDMyKGUuaGVpZ2h0KSxcIjBcIiE9PWUuc2l6ZSYmdC51aW50MzIoNDApLnVpbnQ2NChlLnNpemUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17Zm9ybWF0OjAsbWVkaWFDb250ZW50OnZvaWQgMCx3aWR0aDowLGhlaWdodDowLHNpemU6XCIwXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmZvcm1hdD1uLmludDMyKCk7YnJlYWs7Y2FzZSAyOmkubWVkaWFDb250ZW50PW8uTWVkaWFDb250ZW50LmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMzppLndpZHRoPW4udWludDMyKCk7YnJlYWs7Y2FzZSA0OmkuaGVpZ2h0PW4udWludDMyKCk7YnJlYWs7Y2FzZSA1Omkuc2l6ZT1zKG4udWludDY0KCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17Zm9ybWF0OjAsbWVkaWFDb250ZW50OnZvaWQgMCx3aWR0aDowLGhlaWdodDowLHNpemU6XCIwXCJ9O3JldHVybiB0LmZvcm1hdD1lLmZvcm1hdD8/MCx0Lm1lZGlhQ29udGVudD12b2lkIDAhPT1lLm1lZGlhQ29udGVudCYmbnVsbCE9PWUubWVkaWFDb250ZW50P28uTWVkaWFDb250ZW50LmZyb21QYXJ0aWFsKGUubWVkaWFDb250ZW50KTp2b2lkIDAsdC53aWR0aD1lLndpZHRoPz8wLHQuaGVpZ2h0PWUuaGVpZ2h0Pz8wLHQuc2l6ZT1lLnNpemU/P1wiMFwiLHR9fSxhLmRlZmF1bHQudXRpbC5Mb25nIT09aS5kZWZhdWx0JiYoYS5kZWZhdWx0LnV0aWwuTG9uZz1pLmRlZmF1bHQsYS5kZWZhdWx0LmNvbmZpZ3VyZSgpKX0sODE0NDk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuR2lwaHk9dm9pZCAwO2NvbnN0IGk9big2NjcyMiksbz1yKG4oNjIxMDApKTt0LkdpcGh5PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUuZ2lwaHlJZCYmdC51aW50MzIoMTApLnN0cmluZyhlLmdpcGh5SWQpLHZvaWQgMCE9PWUubWVkaWFDb250ZW50JiZpLk1lZGlhQ29udGVudC5lbmNvZGUoZS5tZWRpYUNvbnRlbnQsdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBhPXtnaXBoeUlkOlwiXCIsbWVkaWFDb250ZW50OnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmEuZ2lwaHlJZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjphLm1lZGlhQ29udGVudD1pLk1lZGlhQ29udGVudC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2dpcGh5SWQ6XCJcIixtZWRpYUNvbnRlbnQ6dm9pZCAwfTtyZXR1cm4gdC5naXBoeUlkPWUuZ2lwaHlJZD8/XCJcIix0Lm1lZGlhQ29udGVudD12b2lkIDAhPT1lLm1lZGlhQ29udGVudCYmbnVsbCE9PWUubWVkaWFDb250ZW50P2kuTWVkaWFDb250ZW50LmZyb21QYXJ0aWFsKGUubWVkaWFDb250ZW50KTp2b2lkIDAsdH19fSw5NDE0MDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5JbmZvU3RpY2tlcj10LkluZm9TdGlja2VyX1R5cGU9dm9pZCAwO2NvbnN0IGk9cihuKDYyMTAwKSk7dmFyIG87KG89dC5JbmZvU3RpY2tlcl9UeXBlfHwodC5JbmZvU3RpY2tlcl9UeXBlPXt9KSlbby5VTlNFVD0wXT1cIlVOU0VUXCIsb1tvLkFMVElUVURFPTFdPVwiQUxUSVRVREVcIixvW28uQkFUVEVSWT0yXT1cIkJBVFRFUllcIixvW28uREFURV9USU1FPTNdPVwiREFURV9USU1FXCIsb1tvLkVWRU5UPTRdPVwiRVZFTlRcIixvW28uR0lGPTVdPVwiR0lGXCIsb1tvLkdST1VQX0lOVklURT02XT1cIkdST1VQX0lOVklURVwiLG9bby5WRU5VRT03XT1cIlZFTlVFXCIsb1tvLk1FTlRJT049OF09XCJNRU5USU9OXCIsb1tvLlNOQVBDT0RFPTldPVwiU05BUENPREVcIixvW28uU05BUF9SRVFVRVNUPTEwXT1cIlNOQVBfUkVRVUVTVFwiLG9bby5TUEVFRD0xMV09XCJTUEVFRFwiLG9bby5TVE9SWT0xMl09XCJTVE9SWVwiLG9bby5UT1BJQz0xM109XCJUT1BJQ1wiLG9bby5XRUFUSEVSPTE0XT1cIldFQVRIRVJcIixvW28uUE9MTD0xNV09XCJQT0xMXCIsb1tvLkNPTU1FUkNFPTE2XT1cIkNPTU1FUkNFXCIsb1tvLkNBTUVSQV9ST0xMPTE3XT1cIkNBTUVSQV9ST0xMXCIsb1tvLlFVRVNUSU9OPTE4XT1cIlFVRVNUSU9OXCIsb1tvLlNPVU5EUz0xOV09XCJTT1VORFNcIixvW28uRElTQ09WRVJfREVFUExJTks9MjBdPVwiRElTQ09WRVJfREVFUExJTktcIixvW28uQVRUQUNITUVOVD0yMV09XCJBVFRBQ0hNRU5UXCIsb1tvLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0LkluZm9TdGlja2VyPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLnR5cGUmJnQudWludDMyKDgpLmludDMyKGUudHlwZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXt0eXBlOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9vLnR5cGU9bi5pbnQzMigpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dHlwZTowfTtyZXR1cm4gdC50eXBlPWUudHlwZT8/MCx0fX19LDI0ODEyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkxlbnM9dC5MZW5zX0xlbnNUeXBlPXZvaWQgMDtjb25zdCBpPXIobig0MTU4MykpLG89cihuKDYyMTAwKSk7dmFyIGE7KGE9dC5MZW5zX0xlbnNUeXBlfHwodC5MZW5zX0xlbnNUeXBlPXt9KSlbYS5VTktOT1dOX1RZUEVfVU5TRVQ9MF09XCJVTktOT1dOX1RZUEVfVU5TRVRcIixhW2EuUkVUT1VDSD0xXT1cIlJFVE9VQ0hcIixhW2EuRU5IQU5DRT0yXT1cIkVOSEFOQ0VcIixhW2EuTUFHSUNfRVJBU0VSPTNdPVwiTUFHSUNfRVJBU0VSXCIsYVthLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0LkxlbnM9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIjBcIiE9PWUubGVuc0lkJiZ0LnVpbnQzMig4KS5pbnQ2NChlLmxlbnNJZCksITA9PT1lLmhhc1VpRWxlbWVudHMmJnQudWludDMyKDE2KS5ib29sKGUuaGFzVWlFbGVtZW50cyksMCE9PWUubGVuc1R5cGUmJnQudWludDMyKDI0KS5pbnQzMihlLmxlbnNUeXBlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2xlbnNJZDpcIjBcIixoYXNVaUVsZW1lbnRzOiExLGxlbnNUeXBlOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmxlbnNJZD1uLmludDY0KCkudG9TdHJpbmcoKTticmVhaztjYXNlIDI6aS5oYXNVaUVsZW1lbnRzPW4uYm9vbCgpO2JyZWFrO2Nhc2UgMzppLmxlbnNUeXBlPW4uaW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2xlbnNJZDpcIjBcIixoYXNVaUVsZW1lbnRzOiExLGxlbnNUeXBlOjB9O3JldHVybiB0LmxlbnNJZD1lLmxlbnNJZD8/XCIwXCIsdC5oYXNVaUVsZW1lbnRzPWUuaGFzVWlFbGVtZW50cz8/ITEsdC5sZW5zVHlwZT1lLmxlbnNUeXBlPz8wLHR9fSxvLmRlZmF1bHQudXRpbC5Mb25nIT09aS5kZWZhdWx0JiYoby5kZWZhdWx0LnV0aWwuTG9uZz1pLmRlZmF1bHQsby5kZWZhdWx0LmNvbmZpZ3VyZSgpKX0sNjg4Nzc6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTG90dGllPXZvaWQgMDtjb25zdCBpPW4oNjY3MjIpLG89cihuKDYyMTAwKSk7dC5Mb3R0aWU9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5tZWRpYUNvbnRlbnQmJmkuTWVkaWFDb250ZW50LmVuY29kZShlLm1lZGlhQ29udGVudCx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGE9e21lZGlhQ29udGVudDp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9hLm1lZGlhQ29udGVudD1pLk1lZGlhQ29udGVudC5kZWNvZGUobixuLnVpbnQzMigpKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e21lZGlhQ29udGVudDp2b2lkIDB9O3JldHVybiB0Lm1lZGlhQ29udGVudD12b2lkIDAhPT1lLm1lZGlhQ29udGVudCYmbnVsbCE9PWUubWVkaWFDb250ZW50P2kuTWVkaWFDb250ZW50LmZyb21QYXJ0aWFsKGUubWVkaWFDb250ZW50KTp2b2lkIDAsdH19fSw2NjcyMjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5NZWRpYUNvbnRlbnQ9dm9pZCAwO2NvbnN0IGk9cihuKDYyMTAwKSk7ZnVuY3Rpb24gbygpe3JldHVybnt0aHVtYm5haWxVcmw6XCJcIixjb250ZW50VXJsOlwiXCIsdGh1bWJuYWlsQm9sdE9iamVjdDpuZXcgVWludDhBcnJheSxjb250ZW50Qm9sdE9iamVjdDpuZXcgVWludDhBcnJheX19dC5NZWRpYUNvbnRlbnQ9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS50aHVtYm5haWxVcmwmJnQudWludDMyKDEwKS5zdHJpbmcoZS50aHVtYm5haWxVcmwpLFwiXCIhPT1lLmNvbnRlbnRVcmwmJnQudWludDMyKDE4KS5zdHJpbmcoZS5jb250ZW50VXJsKSwwIT09ZS50aHVtYm5haWxCb2x0T2JqZWN0Lmxlbmd0aCYmdC51aW50MzIoMjYpLmJ5dGVzKGUudGh1bWJuYWlsQm9sdE9iamVjdCksMCE9PWUuY29udGVudEJvbHRPYmplY3QubGVuZ3RoJiZ0LnVpbnQzMigzNCkuYnl0ZXMoZS5jb250ZW50Qm9sdE9iamVjdCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBhPW8oKTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS50aHVtYm5haWxVcmw9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6YS5jb250ZW50VXJsPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmEudGh1bWJuYWlsQm9sdE9iamVjdD1uLmJ5dGVzKCk7YnJlYWs7Y2FzZSA0OmEuY29udGVudEJvbHRPYmplY3Q9bi5ieXRlcygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD1vKCk7cmV0dXJuIHQudGh1bWJuYWlsVXJsPWUudGh1bWJuYWlsVXJsPz9cIlwiLHQuY29udGVudFVybD1lLmNvbnRlbnRVcmw/P1wiXCIsdC50aHVtYm5haWxCb2x0T2JqZWN0PWUudGh1bWJuYWlsQm9sdE9iamVjdD8/bmV3IFVpbnQ4QXJyYXksdC5jb250ZW50Qm9sdE9iamVjdD1lLmNvbnRlbnRCb2x0T2JqZWN0Pz9uZXcgVWludDhBcnJheSx0fX19LDQ1NTE4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk1pbmlBcHBNZXRhZGF0YT12b2lkIDA7Y29uc3QgaT1yKG4oNjIxMDApKTt0Lk1pbmlBcHBNZXRhZGF0YT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLm1pbmlBcHBJZCYmdC51aW50MzIoMTApLnN0cmluZyhlLm1pbmlBcHBJZCksXCJcIiE9PWUubWluaUFwcFNoYXJlSW5mbyYmdC51aW50MzIoMTgpLnN0cmluZyhlLm1pbmlBcHBTaGFyZUluZm8pLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17bWluaUFwcElkOlwiXCIsbWluaUFwcFNoYXJlSW5mbzpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5taW5pQXBwSWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6by5taW5pQXBwU2hhcmVJbmZvPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXttaW5pQXBwSWQ6XCJcIixtaW5pQXBwU2hhcmVJbmZvOlwiXCJ9O3JldHVybiB0Lm1pbmlBcHBJZD1lLm1pbmlBcHBJZD8/XCJcIix0Lm1pbmlBcHBTaGFyZUluZm89ZS5taW5pQXBwU2hhcmVJbmZvPz9cIlwiLHR9fX0sMTM1MTQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTXVzaWNBcnRpc3Q9dm9pZCAwO2NvbnN0IGk9cihuKDQxNTgzKSksbz1uKDI1NzM5KSxhPXIobig2MjEwMCkpO3QuTXVzaWNBcnRpc3Q9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIjBcIiE9PWUuYXJ0aXN0SWQmJnQudWludDMyKDgpLnVpbnQ2NChlLmFydGlzdElkKSxcIlwiIT09ZS5uYW1lJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUubmFtZSksdm9pZCAwIT09ZS5lbmNyeXB0ZWRBcnRpc3RBcnQmJm8uRW5jcnlwdGVkTWVkaWEuZW5jb2RlKGUuZW5jcnlwdGVkQXJ0aXN0QXJ0LHQudWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17YXJ0aXN0SWQ6XCIwXCIsbmFtZTpcIlwiLGVuY3J5cHRlZEFydGlzdEFydDp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmFydGlzdElkPW4udWludDY0KCkudG9TdHJpbmcoKTticmVhaztjYXNlIDI6aS5uYW1lPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmkuZW5jcnlwdGVkQXJ0aXN0QXJ0PW8uRW5jcnlwdGVkTWVkaWEuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXthcnRpc3RJZDpcIjBcIixuYW1lOlwiXCIsZW5jcnlwdGVkQXJ0aXN0QXJ0OnZvaWQgMH07cmV0dXJuIHQuYXJ0aXN0SWQ9ZS5hcnRpc3RJZD8/XCIwXCIsdC5uYW1lPWUubmFtZT8/XCJcIix0LmVuY3J5cHRlZEFydGlzdEFydD12b2lkIDAhPT1lLmVuY3J5cHRlZEFydGlzdEFydCYmbnVsbCE9PWUuZW5jcnlwdGVkQXJ0aXN0QXJ0P28uRW5jcnlwdGVkTWVkaWEuZnJvbVBhcnRpYWwoZS5lbmNyeXB0ZWRBcnRpc3RBcnQpOnZvaWQgMCx0fX0sYS5kZWZhdWx0LnV0aWwuTG9uZyE9PWkuZGVmYXVsdCYmKGEuZGVmYXVsdC51dGlsLkxvbmc9aS5kZWZhdWx0LGEuZGVmYXVsdC5jb25maWd1cmUoKSl9LDM5OTcxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk11c2ljVHJhY2s9dC5NdXNpY1RyYWNrVHlwZT12b2lkIDA7Y29uc3QgaT1yKG4oNDE1ODMpKSxvPW4oMTI2NjUpLGE9bigyNTczOSkscz1yKG4oNjIxMDApKTtmdW5jdGlvbiBjKGUpe3JldHVybiBlLnRvU3RyaW5nKCl9dmFyIGw7KGw9dC5NdXNpY1RyYWNrVHlwZXx8KHQuTXVzaWNUcmFja1R5cGU9e30pKVtsLlRSQUNLX1RZUEVfVU5TRVQ9MF09XCJUUkFDS19UWVBFX1VOU0VUXCIsbFtsLkxJQ0VOU0VEPTFdPVwiTElDRU5TRURcIixsW2wuQ1VTVE9NX1NPVU5EPTJdPVwiQ1VTVE9NX1NPVU5EXCIsbFtsLlNQT1RMSUdIVF9PUklHSU5BTF9TT1VORD0zXT1cIlNQT1RMSUdIVF9PUklHSU5BTF9TT1VORFwiLGxbbC5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsdC5NdXNpY1RyYWNrPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCIwXCIhPT1lLnRyYWNrSWQmJnQudWludDMyKDgpLnVpbnQ2NChlLnRyYWNrSWQpLFwiXCIhPT1lLnRpdGxlJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUudGl0bGUpLFwiXCIhPT1lLmFsYnVtTmFtZSYmdC51aW50MzIoMjYpLnN0cmluZyhlLmFsYnVtTmFtZSksXCJcIiE9PWUuYXJ0aXN0TmFtZSYmdC51aW50MzIoMzQpLnN0cmluZyhlLmFydGlzdE5hbWUpLFwiMFwiIT09ZS5kdXJhdGlvblNlYyYmdC51aW50MzIoNTYpLnVpbnQ2NChlLmR1cmF0aW9uU2VjKSx2b2lkIDAhPT1lLmNvbnRlbnRSZXN0cmljdGlvbnMmJm8uQ29udGVudFJlc3RyaWN0aW9ucy5lbmNvZGUoZS5jb250ZW50UmVzdHJpY3Rpb25zLHQudWludDMyKDY2KS5mb3JrKCkpLmxkZWxpbSgpLFwiXCIhPT1lLmV4dGVybmFsU2VydmljZVVybCYmdC51aW50MzIoNzQpLnN0cmluZyhlLmV4dGVybmFsU2VydmljZVVybCksdm9pZCAwIT09ZS5lbmNyeXB0ZWRBbGJ1bUFydCYmYS5FbmNyeXB0ZWRNZWRpYS5lbmNvZGUoZS5lbmNyeXB0ZWRBbGJ1bUFydCx0LnVpbnQzMig4MikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmVuY3J5cHRlZEF1ZGlvVHJhY2smJmEuRW5jcnlwdGVkTWVkaWEuZW5jb2RlKGUuZW5jcnlwdGVkQXVkaW9UcmFjayx0LnVpbnQzMig5MCkuZm9yaygpKS5sZGVsaW0oKSwhMD09PWUuaXNFeHBsaWNpdCYmdC51aW50MzIoOTYpLmJvb2woZS5pc0V4cGxpY2l0KSwwIT09ZS5zdGFydE9mZnNldE1zJiZ0LnVpbnQzMigxMDQpLnVpbnQzMihlLnN0YXJ0T2Zmc2V0TXMpLDAhPT1lLnRyYWNrVHlwZSYmdC51aW50MzIoMTEyKS5pbnQzMihlLnRyYWNrVHlwZSksXCJcIiE9PWUucmVsZWFzZURhdGUmJnQudWludDMyKDEzMCkuc3RyaW5nKGUucmVsZWFzZURhdGUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17dHJhY2tJZDpcIjBcIix0aXRsZTpcIlwiLGFsYnVtTmFtZTpcIlwiLGFydGlzdE5hbWU6XCJcIixkdXJhdGlvblNlYzpcIjBcIixjb250ZW50UmVzdHJpY3Rpb25zOnZvaWQgMCxleHRlcm5hbFNlcnZpY2VVcmw6XCJcIixlbmNyeXB0ZWRBbGJ1bUFydDp2b2lkIDAsZW5jcnlwdGVkQXVkaW9UcmFjazp2b2lkIDAsaXNFeHBsaWNpdDohMSxzdGFydE9mZnNldE1zOjAsdHJhY2tUeXBlOjAscmVsZWFzZURhdGU6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkudHJhY2tJZD1jKG4udWludDY0KCkpO2JyZWFrO2Nhc2UgMjppLnRpdGxlPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmkuYWxidW1OYW1lPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA0OmkuYXJ0aXN0TmFtZT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNzppLmR1cmF0aW9uU2VjPWMobi51aW50NjQoKSk7YnJlYWs7Y2FzZSA4OmkuY29udGVudFJlc3RyaWN0aW9ucz1vLkNvbnRlbnRSZXN0cmljdGlvbnMuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSA5OmkuZXh0ZXJuYWxTZXJ2aWNlVXJsPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAxMDppLmVuY3J5cHRlZEFsYnVtQXJ0PWEuRW5jcnlwdGVkTWVkaWEuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAxMTppLmVuY3J5cHRlZEF1ZGlvVHJhY2s9YS5FbmNyeXB0ZWRNZWRpYS5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDEyOmkuaXNFeHBsaWNpdD1uLmJvb2woKTticmVhaztjYXNlIDEzOmkuc3RhcnRPZmZzZXRNcz1uLnVpbnQzMigpO2JyZWFrO2Nhc2UgMTQ6aS50cmFja1R5cGU9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMTY6aS5yZWxlYXNlRGF0ZT1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dHJhY2tJZDpcIjBcIix0aXRsZTpcIlwiLGFsYnVtTmFtZTpcIlwiLGFydGlzdE5hbWU6XCJcIixkdXJhdGlvblNlYzpcIjBcIixjb250ZW50UmVzdHJpY3Rpb25zOnZvaWQgMCxleHRlcm5hbFNlcnZpY2VVcmw6XCJcIixlbmNyeXB0ZWRBbGJ1bUFydDp2b2lkIDAsZW5jcnlwdGVkQXVkaW9UcmFjazp2b2lkIDAsaXNFeHBsaWNpdDohMSxzdGFydE9mZnNldE1zOjAsdHJhY2tUeXBlOjAscmVsZWFzZURhdGU6XCJcIn07cmV0dXJuIHQudHJhY2tJZD1lLnRyYWNrSWQ/P1wiMFwiLHQudGl0bGU9ZS50aXRsZT8/XCJcIix0LmFsYnVtTmFtZT1lLmFsYnVtTmFtZT8/XCJcIix0LmFydGlzdE5hbWU9ZS5hcnRpc3ROYW1lPz9cIlwiLHQuZHVyYXRpb25TZWM9ZS5kdXJhdGlvblNlYz8/XCIwXCIsdC5jb250ZW50UmVzdHJpY3Rpb25zPXZvaWQgMCE9PWUuY29udGVudFJlc3RyaWN0aW9ucyYmbnVsbCE9PWUuY29udGVudFJlc3RyaWN0aW9ucz9vLkNvbnRlbnRSZXN0cmljdGlvbnMuZnJvbVBhcnRpYWwoZS5jb250ZW50UmVzdHJpY3Rpb25zKTp2b2lkIDAsdC5leHRlcm5hbFNlcnZpY2VVcmw9ZS5leHRlcm5hbFNlcnZpY2VVcmw/P1wiXCIsdC5lbmNyeXB0ZWRBbGJ1bUFydD12b2lkIDAhPT1lLmVuY3J5cHRlZEFsYnVtQXJ0JiZudWxsIT09ZS5lbmNyeXB0ZWRBbGJ1bUFydD9hLkVuY3J5cHRlZE1lZGlhLmZyb21QYXJ0aWFsKGUuZW5jcnlwdGVkQWxidW1BcnQpOnZvaWQgMCx0LmVuY3J5cHRlZEF1ZGlvVHJhY2s9dm9pZCAwIT09ZS5lbmNyeXB0ZWRBdWRpb1RyYWNrJiZudWxsIT09ZS5lbmNyeXB0ZWRBdWRpb1RyYWNrP2EuRW5jcnlwdGVkTWVkaWEuZnJvbVBhcnRpYWwoZS5lbmNyeXB0ZWRBdWRpb1RyYWNrKTp2b2lkIDAsdC5pc0V4cGxpY2l0PWUuaXNFeHBsaWNpdD8/ITEsdC5zdGFydE9mZnNldE1zPWUuc3RhcnRPZmZzZXRNcz8/MCx0LnRyYWNrVHlwZT1lLnRyYWNrVHlwZT8/MCx0LnJlbGVhc2VEYXRlPWUucmVsZWFzZURhdGU/P1wiXCIsdH19LHMuZGVmYXVsdC51dGlsLkxvbmchPT1pLmRlZmF1bHQmJihzLmRlZmF1bHQudXRpbC5Mb25nPWkuZGVmYXVsdCxzLmRlZmF1bHQuY29uZmlndXJlKCkpfSwxNTg2OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlByb3h5SXRlbT10LlByb3h5U291cmNlPXQuUHJveHlTb3VyY2VFbnVtPXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO3ZhciBvOyhvPXQuUHJveHlTb3VyY2VFbnVtfHwodC5Qcm94eVNvdXJjZUVudW09e30pKVtvLlBST1hZX1NPVVJDRV9VTlNFVD0wXT1cIlBST1hZX1NPVVJDRV9VTlNFVFwiLG9bby5QUk9YWV9TT1VSQ0VfQ09MT1I9MV09XCJQUk9YWV9TT1VSQ0VfQ09MT1JcIixvW28uUFJPWFlfU09VUkNFX01PVElPTj0yXT1cIlBST1hZX1NPVVJDRV9NT1RJT05cIixvW28uUFJPWFlfU09VUkNFX1VDT19DT0xPUj0zXT1cIlBST1hZX1NPVVJDRV9VQ09fQ09MT1JcIixvW28uUFJPWFlfU09VUkNFX1VDT19BUj00XT1cIlBST1hZX1NPVVJDRV9VQ09fQVJcIixvW28uUFJPWFlfU09VUkNFX1ZFTlVFPTVdPVwiUFJPWFlfU09VUkNFX1ZFTlVFXCIsb1tvLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0LlByb3h5U291cmNlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJlbnVtXCI9PT1lLnNvdXJjZT8uJGNhc2UmJnQudWludDMyKDgpLmludDMyKGUuc291cmNlLmVudW0pLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17c291cmNlOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP28uc291cmNlPXskY2FzZTpcImVudW1cIixlbnVtOm4uaW50MzIoKX06bi5za2lwVHlwZSg3JmUpfXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtzb3VyY2U6dm9pZCAwfTtyZXR1cm5cImVudW1cIj09PWUuc291cmNlPy4kY2FzZSYmdm9pZCAwIT09ZS5zb3VyY2U/LmVudW0mJm51bGwhPT1lLnNvdXJjZT8uZW51bSYmKHQuc291cmNlPXskY2FzZTpcImVudW1cIixlbnVtOmUuc291cmNlLmVudW19KSx0fX0sdC5Qcm94eUl0ZW09e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5zb3VyY2UmJnQuUHJveHlTb3VyY2UuZW5jb2RlKGUuc291cmNlLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgbz12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3QgYT17c291cmNlOnZvaWQgMH07Zm9yKDtyLnBvczxvOyl7Y29uc3QgZT1yLnVpbnQzMigpO2U+Pj4zPT0xP2Euc291cmNlPXQuUHJveHlTb3VyY2UuZGVjb2RlKHIsci51aW50MzIoKSk6ci5za2lwVHlwZSg3JmUpfXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtzb3VyY2U6dm9pZCAwfTtyZXR1cm4gbi5zb3VyY2U9dm9pZCAwIT09ZS5zb3VyY2UmJm51bGwhPT1lLnNvdXJjZT90LlByb3h5U291cmNlLmZyb21QYXJ0aWFsKGUuc291cmNlKTp2b2lkIDAsbn19fSwzNzE2MjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5TZXJ2ZXJDYW1lb19UYXJnZXRMZW5zZXNFbnRyeT10LlNlcnZlckNhbWVvX0N1c3RvbVRleHRQYXJhbWV0ZXJzQ29sbGVjdGlvbkVudHJ5PXQuU2VydmVyQ2FtZW89dm9pZCAwO2NvbnN0IGk9cihuKDQxNTgzKSksbz1uKDY2NzIyKSxhPW4oNTE5MjQpLHM9bigxNjI3NiksYz1uKDk1MjE5KSxsPXIobig2MjEwMCkpO2Z1bmN0aW9uIHUoZSl7cmV0dXJuIGUudG9TdHJpbmcoKX10LlNlcnZlckNhbWVvPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmwuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7XCIwXCIhPT1lLmNhbWVvSWQmJm4udWludDMyKDgpLmludDY0KGUuY2FtZW9JZCksbi51aW50MzIoMTgpLmZvcmsoKTtmb3IoY29uc3QgdCBvZiBlLmdlbmRlcnMpbi5pbnQzMih0KTtyZXR1cm4gbi5sZGVsaW0oKSx2b2lkIDAhPT1lLm1lZGlhQ29udGVudCYmby5NZWRpYUNvbnRlbnQuZW5jb2RlKGUubWVkaWFDb250ZW50LG4udWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUubWluaW11bUFwaVZlcnNpb24mJmEuQXBpVmVyc2lvbi5lbmNvZGUoZS5taW5pbXVtQXBpVmVyc2lvbixuLnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKSxcIjBcIiE9PWUuY2xvbmVHcm91cElkJiZuLnVpbnQzMig0MCkuaW50NjQoZS5jbG9uZUdyb3VwSWQpLE9iamVjdC5lbnRyaWVzKGUuY3VzdG9tVGV4dFBhcmFtZXRlcnNDb2xsZWN0aW9uKS5mb3JFYWNoKChlPT57bGV0W3IsaV09ZTt0LlNlcnZlckNhbWVvX0N1c3RvbVRleHRQYXJhbWV0ZXJzQ29sbGVjdGlvbkVudHJ5LmVuY29kZSh7a2V5OnIsdmFsdWU6aX0sbi51aW50MzIoNTApLmZvcmsoKSkubGRlbGltKCl9KSksMCE9PWUuc3RpY2tlclR5cGUmJm4udWludDMyKDU2KS5pbnQzMihlLnN0aWNrZXJUeXBlKSxPYmplY3QuZW50cmllcyhlLnRhcmdldExlbnNlcykuZm9yRWFjaCgoZT0+e2xldFtyLGldPWU7dC5TZXJ2ZXJDYW1lb19UYXJnZXRMZW5zZXNFbnRyeS5lbmNvZGUoe2tleTpyLHZhbHVlOml9LG4udWludDMyKDY2KS5mb3JrKCkpLmxkZWxpbSgpfSkpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGwuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbC5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgcz17Y2FtZW9JZDpcIjBcIixnZW5kZXJzOltdLG1lZGlhQ29udGVudDp2b2lkIDAsbWluaW11bUFwaVZlcnNpb246dm9pZCAwLGNsb25lR3JvdXBJZDpcIjBcIixjdXN0b21UZXh0UGFyYW1ldGVyc0NvbGxlY3Rpb246e30sc3RpY2tlclR5cGU6MCx0YXJnZXRMZW5zZXM6e319O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpzLmNhbWVvSWQ9dShyLmludDY0KCkpO2JyZWFrO2Nhc2UgMjppZigyPT0oNyZlKSl7Y29uc3QgZT1yLnVpbnQzMigpK3IucG9zO2Zvcig7ci5wb3M8ZTspcy5nZW5kZXJzLnB1c2goci5pbnQzMigpKX1lbHNlIHMuZ2VuZGVycy5wdXNoKHIuaW50MzIoKSk7YnJlYWs7Y2FzZSAzOnMubWVkaWFDb250ZW50PW8uTWVkaWFDb250ZW50LmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgNDpzLm1pbmltdW1BcGlWZXJzaW9uPWEuQXBpVmVyc2lvbi5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDU6cy5jbG9uZUdyb3VwSWQ9dShyLmludDY0KCkpO2JyZWFrO2Nhc2UgNjpjb25zdCBuPXQuU2VydmVyQ2FtZW9fQ3VzdG9tVGV4dFBhcmFtZXRlcnNDb2xsZWN0aW9uRW50cnkuZGVjb2RlKHIsci51aW50MzIoKSk7dm9pZCAwIT09bi52YWx1ZSYmKHMuY3VzdG9tVGV4dFBhcmFtZXRlcnNDb2xsZWN0aW9uW24ua2V5XT1uLnZhbHVlKTticmVhaztjYXNlIDc6cy5zdGlja2VyVHlwZT1yLmludDMyKCk7YnJlYWs7Y2FzZSA4OmNvbnN0IGk9dC5TZXJ2ZXJDYW1lb19UYXJnZXRMZW5zZXNFbnRyeS5kZWNvZGUocixyLnVpbnQzMigpKTt2b2lkIDAhPT1pLnZhbHVlJiYocy50YXJnZXRMZW5zZXNbaS5rZXldPWkudmFsdWUpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gc30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17Y2FtZW9JZDpcIjBcIixnZW5kZXJzOltdLG1lZGlhQ29udGVudDp2b2lkIDAsbWluaW11bUFwaVZlcnNpb246dm9pZCAwLGNsb25lR3JvdXBJZDpcIjBcIixjdXN0b21UZXh0UGFyYW1ldGVyc0NvbGxlY3Rpb246e30sc3RpY2tlclR5cGU6MCx0YXJnZXRMZW5zZXM6e319O3JldHVybiB0LmNhbWVvSWQ9ZS5jYW1lb0lkPz9cIjBcIix0LmdlbmRlcnM9ZS5nZW5kZXJzPy5tYXAoKGU9PmUpKXx8W10sdC5tZWRpYUNvbnRlbnQ9dm9pZCAwIT09ZS5tZWRpYUNvbnRlbnQmJm51bGwhPT1lLm1lZGlhQ29udGVudD9vLk1lZGlhQ29udGVudC5mcm9tUGFydGlhbChlLm1lZGlhQ29udGVudCk6dm9pZCAwLHQubWluaW11bUFwaVZlcnNpb249dm9pZCAwIT09ZS5taW5pbXVtQXBpVmVyc2lvbiYmbnVsbCE9PWUubWluaW11bUFwaVZlcnNpb24/YS5BcGlWZXJzaW9uLmZyb21QYXJ0aWFsKGUubWluaW11bUFwaVZlcnNpb24pOnZvaWQgMCx0LmNsb25lR3JvdXBJZD1lLmNsb25lR3JvdXBJZD8/XCIwXCIsdC5jdXN0b21UZXh0UGFyYW1ldGVyc0NvbGxlY3Rpb249T2JqZWN0LmVudHJpZXMoZS5jdXN0b21UZXh0UGFyYW1ldGVyc0NvbGxlY3Rpb24/P3t9KS5yZWR1Y2UoKChlLHQpPT57bGV0W24scl09dDtyZXR1cm4gdm9pZCAwIT09ciYmKGVbbl09cy5DdXN0b21UZXh0UGFyYW1ldGVycy5mcm9tUGFydGlhbChyKSksZX0pLHt9KSx0LnN0aWNrZXJUeXBlPWUuc3RpY2tlclR5cGU/PzAsdC50YXJnZXRMZW5zZXM9T2JqZWN0LmVudHJpZXMoZS50YXJnZXRMZW5zZXM/P3t9KS5yZWR1Y2UoKChlLHQpPT57bGV0W24scl09dDtyZXR1cm4gdm9pZCAwIT09ciYmKGVbTnVtYmVyKG4pXT1jLkxpc3RPZkxlbnNlcy5mcm9tUGFydGlhbChyKSksZX0pLHt9KSx0fX0sdC5TZXJ2ZXJDYW1lb19DdXN0b21UZXh0UGFyYW1ldGVyc0NvbGxlY3Rpb25FbnRyeT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmtleSYmdC51aW50MzIoMTApLnN0cmluZyhlLmtleSksdm9pZCAwIT09ZS52YWx1ZSYmcy5DdXN0b21UZXh0UGFyYW1ldGVycy5lbmNvZGUoZS52YWx1ZSx0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBsLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGwuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2tleTpcIlwiLHZhbHVlOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkua2V5PW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkudmFsdWU9cy5DdXN0b21UZXh0UGFyYW1ldGVycy5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2tleTpcIlwiLHZhbHVlOnZvaWQgMH07cmV0dXJuIHQua2V5PWUua2V5Pz9cIlwiLHQudmFsdWU9dm9pZCAwIT09ZS52YWx1ZSYmbnVsbCE9PWUudmFsdWU/cy5DdXN0b21UZXh0UGFyYW1ldGVycy5mcm9tUGFydGlhbChlLnZhbHVlKTp2b2lkIDAsdH19LHQuU2VydmVyQ2FtZW9fVGFyZ2V0TGVuc2VzRW50cnk9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bC5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUua2V5JiZ0LnVpbnQzMig4KS5pbnQzMihlLmtleSksdm9pZCAwIT09ZS52YWx1ZSYmYy5MaXN0T2ZMZW5zZXMuZW5jb2RlKGUudmFsdWUsdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbC5kZWZhdWx0LlJlYWRlcj9lOm5ldyBsLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtrZXk6MCx2YWx1ZTp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmtleT1uLmludDMyKCk7YnJlYWs7Y2FzZSAyOmkudmFsdWU9Yy5MaXN0T2ZMZW5zZXMuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtrZXk6MCx2YWx1ZTp2b2lkIDB9O3JldHVybiB0LmtleT1lLmtleT8/MCx0LnZhbHVlPXZvaWQgMCE9PWUudmFsdWUmJm51bGwhPT1lLnZhbHVlP2MuTGlzdE9mTGVuc2VzLmZyb21QYXJ0aWFsKGUudmFsdWUpOnZvaWQgMCx0fX0sbC5kZWZhdWx0LnV0aWwuTG9uZyE9PWkuZGVmYXVsdCYmKGwuZGVmYXVsdC51dGlsLkxvbmc9aS5kZWZhdWx0LGwuZGVmYXVsdC5jb25maWd1cmUoKSl9LDI5MTk3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlNob3BwaW5nU3RpY2tlcj12b2lkIDA7Y29uc3QgaT1yKG4oNDE1ODMpKSxvPW4oNTE1OTgpLGE9big2NjcyMikscz1yKG4oNjIxMDApKTt0LlNob3BwaW5nU3RpY2tlcj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiMFwiIT09ZS5zbmFwSXRlbUlkJiZ0LnVpbnQzMig4KS51aW50NjQoZS5zbmFwSXRlbUlkKSx2b2lkIDAhPT1lLnN0b3JlSWQmJm8uVVVJRC5lbmNvZGUoZS5zdG9yZUlkLHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLFwiXCIhPT1lLnN0aWNrZXJUaXRsZSYmdC51aW50MzIoMjYpLnN0cmluZyhlLnN0aWNrZXJUaXRsZSksdm9pZCAwIT09ZS5tZWRpYUNvbnRlbnQmJmEuTWVkaWFDb250ZW50LmVuY29kZShlLm1lZGlhQ29udGVudCx0LnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3NuYXBJdGVtSWQ6XCIwXCIsc3RvcmVJZDp2b2lkIDAsc3RpY2tlclRpdGxlOlwiXCIsbWVkaWFDb250ZW50OnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuc25hcEl0ZW1JZD1uLnVpbnQ2NCgpLnRvU3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkuc3RvcmVJZD1vLlVVSUQuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAzOmkuc3RpY2tlclRpdGxlPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA0OmkubWVkaWFDb250ZW50PWEuTWVkaWFDb250ZW50LmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17c25hcEl0ZW1JZDpcIjBcIixzdG9yZUlkOnZvaWQgMCxzdGlja2VyVGl0bGU6XCJcIixtZWRpYUNvbnRlbnQ6dm9pZCAwfTtyZXR1cm4gdC5zbmFwSXRlbUlkPWUuc25hcEl0ZW1JZD8/XCIwXCIsdC5zdG9yZUlkPXZvaWQgMCE9PWUuc3RvcmVJZCYmbnVsbCE9PWUuc3RvcmVJZD9vLlVVSUQuZnJvbVBhcnRpYWwoZS5zdG9yZUlkKTp2b2lkIDAsdC5zdGlja2VyVGl0bGU9ZS5zdGlja2VyVGl0bGU/P1wiXCIsdC5tZWRpYUNvbnRlbnQ9dm9pZCAwIT09ZS5tZWRpYUNvbnRlbnQmJm51bGwhPT1lLm1lZGlhQ29udGVudD9hLk1lZGlhQ29udGVudC5mcm9tUGFydGlhbChlLm1lZGlhQ29udGVudCk6dm9pZCAwLHR9fSxzLmRlZmF1bHQudXRpbC5Mb25nIT09aS5kZWZhdWx0JiYocy5kZWZhdWx0LnV0aWwuTG9uZz1pLmRlZmF1bHQscy5kZWZhdWx0LmNvbmZpZ3VyZSgpKX0sMzEwNzg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuU25hcFN0aWNrZXJfRGlzcGxheU5hbWVCeUxvY2FsZUVudHJ5PXQuU25hcFN0aWNrZXI9dm9pZCAwO2NvbnN0IGk9big2NjcyMiksbz1uKDQ1NTE4KSxhPXIobig2MjEwMCkpO3QuU25hcFN0aWNrZXI9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5uYW1lJiZuLnVpbnQzMigxOCkuc3RyaW5nKGUubmFtZSksITA9PT1lLmlzQW5pbWF0ZWQmJm4udWludDMyKDI0KS5ib29sKGUuaXNBbmltYXRlZCksdm9pZCAwIT09ZS5tZWRpYUNvbnRlbnQmJmkuTWVkaWFDb250ZW50LmVuY29kZShlLm1lZGlhQ29udGVudCxuLnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLm1pbmlBcHBNZXRhZGF0YSYmby5NaW5pQXBwTWV0YWRhdGEuZW5jb2RlKGUubWluaUFwcE1ldGFkYXRhLG4udWludDMyKDQyKS5mb3JrKCkpLmxkZWxpbSgpLE9iamVjdC5lbnRyaWVzKGUuZGlzcGxheU5hbWVCeUxvY2FsZSkuZm9yRWFjaCgoZT0+e2xldFtyLGldPWU7dC5TbmFwU3RpY2tlcl9EaXNwbGF5TmFtZUJ5TG9jYWxlRW50cnkuZW5jb2RlKHtrZXk6cix2YWx1ZTppfSxuLnVpbnQzMig1MCkuZm9yaygpKS5sZGVsaW0oKX0pKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHM9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGM9e25hbWU6XCJcIixpc0FuaW1hdGVkOiExLG1lZGlhQ29udGVudDp2b2lkIDAsbWluaUFwcE1ldGFkYXRhOnZvaWQgMCxkaXNwbGF5TmFtZUJ5TG9jYWxlOnt9fTtmb3IoO3IucG9zPHM7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDI6Yy5uYW1lPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmMuaXNBbmltYXRlZD1yLmJvb2woKTticmVhaztjYXNlIDQ6Yy5tZWRpYUNvbnRlbnQ9aS5NZWRpYUNvbnRlbnQuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSA1OmMubWluaUFwcE1ldGFkYXRhPW8uTWluaUFwcE1ldGFkYXRhLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgNjpjb25zdCBuPXQuU25hcFN0aWNrZXJfRGlzcGxheU5hbWVCeUxvY2FsZUVudHJ5LmRlY29kZShyLHIudWludDMyKCkpO3ZvaWQgMCE9PW4udmFsdWUmJihjLmRpc3BsYXlOYW1lQnlMb2NhbGVbbi5rZXldPW4udmFsdWUpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gY30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17bmFtZTpcIlwiLGlzQW5pbWF0ZWQ6ITEsbWVkaWFDb250ZW50OnZvaWQgMCxtaW5pQXBwTWV0YWRhdGE6dm9pZCAwLGRpc3BsYXlOYW1lQnlMb2NhbGU6e319O3JldHVybiB0Lm5hbWU9ZS5uYW1lPz9cIlwiLHQuaXNBbmltYXRlZD1lLmlzQW5pbWF0ZWQ/PyExLHQubWVkaWFDb250ZW50PXZvaWQgMCE9PWUubWVkaWFDb250ZW50JiZudWxsIT09ZS5tZWRpYUNvbnRlbnQ/aS5NZWRpYUNvbnRlbnQuZnJvbVBhcnRpYWwoZS5tZWRpYUNvbnRlbnQpOnZvaWQgMCx0Lm1pbmlBcHBNZXRhZGF0YT12b2lkIDAhPT1lLm1pbmlBcHBNZXRhZGF0YSYmbnVsbCE9PWUubWluaUFwcE1ldGFkYXRhP28uTWluaUFwcE1ldGFkYXRhLmZyb21QYXJ0aWFsKGUubWluaUFwcE1ldGFkYXRhKTp2b2lkIDAsdC5kaXNwbGF5TmFtZUJ5TG9jYWxlPU9iamVjdC5lbnRyaWVzKGUuZGlzcGxheU5hbWVCeUxvY2FsZT8/e30pLnJlZHVjZSgoKGUsdCk9PntsZXRbbixyXT10O3JldHVybiB2b2lkIDAhPT1yJiYoZVtuXT1TdHJpbmcocikpLGV9KSx7fSksdH19LHQuU25hcFN0aWNrZXJfRGlzcGxheU5hbWVCeUxvY2FsZUVudHJ5PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUua2V5JiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUua2V5KSxcIlwiIT09ZS52YWx1ZSYmdC51aW50MzIoMTgpLnN0cmluZyhlLnZhbHVlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2tleTpcIlwiLHZhbHVlOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmtleT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLnZhbHVlPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtrZXk6XCJcIix2YWx1ZTpcIlwifTtyZXR1cm4gdC5rZXk9ZS5rZXk/P1wiXCIsdC52YWx1ZT1lLnZhbHVlPz9cIlwiLHR9fX0sNTY1NzU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuU3RpY2tlclBhY2tfU3RpY2tlckVudGl0eT10LlN0aWNrZXJQYWNrPXQuU3RpY2tlclBhY2tfVHlwZT12b2lkIDA7Y29uc3QgaT1yKG4oNDE1ODMpKSxvPXIobig2MjEwMCkpLGE9bigzMTA3OCk7ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZS50b1N0cmluZygpfXZhciBjOyhjPXQuU3RpY2tlclBhY2tfVHlwZXx8KHQuU3RpY2tlclBhY2tfVHlwZT17fSkpW2MuVU5TRVQ9MF09XCJVTlNFVFwiLGNbYy5TTkFQX1NUSUNLRVI9MV09XCJTTkFQX1NUSUNLRVJcIixjW2MuQklUTU9KSV9TVElDS0VSPTJdPVwiQklUTU9KSV9TVElDS0VSXCIsY1tjLkNBTUVPX1NUSUNLRVI9M109XCJDQU1FT19TVElDS0VSXCIsY1tjLkdFT19TVElDS0VSPTRdPVwiR0VPX1NUSUNLRVJcIixjW2MuR0ZZQ0FUX1NUSUNLRVI9NV09XCJHRllDQVRfU1RJQ0tFUlwiLGNbYy5TSE9QUElOR19TVElDS0VSPTZdPVwiU0hPUFBJTkdfU1RJQ0tFUlwiLGNbYy5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsdC5TdGlja2VyUGFjaz17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO1wiXCIhPT1lLm5hbWUmJm4udWludDMyKDEwKS5zdHJpbmcoZS5uYW1lKSxcIjBcIiE9PWUudmVyc2lvbiYmbi51aW50MzIoMTYpLmludDY0KGUudmVyc2lvbiksXCIwXCIhPT1lLnByaW9yaXR5JiZuLnVpbnQzMigyNCkuaW50NjQoZS5wcmlvcml0eSksITA9PT1lLmlzVGVzdFBhY2smJm4udWludDMyKDMyKS5ib29sKGUuaXNUZXN0UGFjayksbi51aW50MzIoNDIpLmZvcmsoKTtmb3IoY29uc3QgdCBvZiBlLmN0SWRzKW4udWludDY0KHQpO24ubGRlbGltKCk7Zm9yKGNvbnN0IHIgb2YgZS5zdGlja2Vycyl0LlN0aWNrZXJQYWNrX1N0aWNrZXJFbnRpdHkuZW5jb2RlKHIsbi51aW50MzIoNTApLmZvcmsoKSkubGRlbGltKCk7ITA9PT1lLmlzU2VhcmNoYWJsZSYmbi51aW50MzIoNTYpLmJvb2woZS5pc1NlYXJjaGFibGUpLCEwPT09ZS5pc0FjdGl2ZSYmbi51aW50MzIoNjQpLmJvb2woZS5pc0FjdGl2ZSksMCE9PWUudHlwZSYmbi51aW50MzIoNzIpLmludDMyKGUudHlwZSk7Zm9yKGNvbnN0IHQgb2YgZS5jdHBJZHMpbi51aW50MzIoODIpLmJ5dGVzKHQpO3JldHVyblwiMFwiIT09ZS5kaXNwbGF5Q291bnQmJm4udWludDMyKDg4KS51aW50NjQoZS5kaXNwbGF5Q291bnQpLFwiXCIhPT1lLmxvY2FsaXplZE5hbWUmJm4udWludDMyKDk4KS5zdHJpbmcoZS5sb2NhbGl6ZWROYW1lKSxcIjBcIiE9PWUuY29sb3ImJm4udWludDMyKDEwNCkuaW50NjQoZS5jb2xvciksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBhPXtuYW1lOlwiXCIsdmVyc2lvbjpcIjBcIixwcmlvcml0eTpcIjBcIixpc1Rlc3RQYWNrOiExLGN0SWRzOltdLHN0aWNrZXJzOltdLGlzU2VhcmNoYWJsZTohMSxpc0FjdGl2ZTohMSx0eXBlOjAsY3RwSWRzOltdLGRpc3BsYXlDb3VudDpcIjBcIixsb2NhbGl6ZWROYW1lOlwiXCIsY29sb3I6XCIwXCJ9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLm5hbWU9ci5zdHJpbmcoKTticmVhaztjYXNlIDI6YS52ZXJzaW9uPXMoci5pbnQ2NCgpKTticmVhaztjYXNlIDM6YS5wcmlvcml0eT1zKHIuaW50NjQoKSk7YnJlYWs7Y2FzZSA0OmEuaXNUZXN0UGFjaz1yLmJvb2woKTticmVhaztjYXNlIDU6aWYoMj09KDcmZSkpe2NvbnN0IGU9ci51aW50MzIoKStyLnBvcztmb3IoO3IucG9zPGU7KWEuY3RJZHMucHVzaChzKHIudWludDY0KCkpKX1lbHNlIGEuY3RJZHMucHVzaChzKHIudWludDY0KCkpKTticmVhaztjYXNlIDY6YS5zdGlja2Vycy5wdXNoKHQuU3RpY2tlclBhY2tfU3RpY2tlckVudGl0eS5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSA3OmEuaXNTZWFyY2hhYmxlPXIuYm9vbCgpO2JyZWFrO2Nhc2UgODphLmlzQWN0aXZlPXIuYm9vbCgpO2JyZWFrO2Nhc2UgOTphLnR5cGU9ci5pbnQzMigpO2JyZWFrO2Nhc2UgMTA6YS5jdHBJZHMucHVzaChyLmJ5dGVzKCkpO2JyZWFrO2Nhc2UgMTE6YS5kaXNwbGF5Q291bnQ9cyhyLnVpbnQ2NCgpKTticmVhaztjYXNlIDEyOmEubG9jYWxpemVkTmFtZT1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMTM6YS5jb2xvcj1zKHIuaW50NjQoKSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtuYW1lOlwiXCIsdmVyc2lvbjpcIjBcIixwcmlvcml0eTpcIjBcIixpc1Rlc3RQYWNrOiExLGN0SWRzOltdLHN0aWNrZXJzOltdLGlzU2VhcmNoYWJsZTohMSxpc0FjdGl2ZTohMSx0eXBlOjAsY3RwSWRzOltdLGRpc3BsYXlDb3VudDpcIjBcIixsb2NhbGl6ZWROYW1lOlwiXCIsY29sb3I6XCIwXCJ9O3JldHVybiBuLm5hbWU9ZS5uYW1lPz9cIlwiLG4udmVyc2lvbj1lLnZlcnNpb24/P1wiMFwiLG4ucHJpb3JpdHk9ZS5wcmlvcml0eT8/XCIwXCIsbi5pc1Rlc3RQYWNrPWUuaXNUZXN0UGFjaz8/ITEsbi5jdElkcz1lLmN0SWRzPy5tYXAoKGU9PmUpKXx8W10sbi5zdGlja2Vycz1lLnN0aWNrZXJzPy5tYXAoKGU9PnQuU3RpY2tlclBhY2tfU3RpY2tlckVudGl0eS5mcm9tUGFydGlhbChlKSkpfHxbXSxuLmlzU2VhcmNoYWJsZT1lLmlzU2VhcmNoYWJsZT8/ITEsbi5pc0FjdGl2ZT1lLmlzQWN0aXZlPz8hMSxuLnR5cGU9ZS50eXBlPz8wLG4uY3RwSWRzPWUuY3RwSWRzPy5tYXAoKGU9PmUpKXx8W10sbi5kaXNwbGF5Q291bnQ9ZS5kaXNwbGF5Q291bnQ/P1wiMFwiLG4ubG9jYWxpemVkTmFtZT1lLmxvY2FsaXplZE5hbWU/P1wiXCIsbi5jb2xvcj1lLmNvbG9yPz9cIjBcIixufX0sdC5TdGlja2VyUGFja19TdGlja2VyRW50aXR5PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJzbmFwU3RpY2tlckVudGl0eVwiPT09ZS5lbnRpdHk/LiRjYXNlJiZhLlNuYXBTdGlja2VyLmVuY29kZShlLmVudGl0eS5zbmFwU3RpY2tlckVudGl0eSx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2VudGl0eTp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLmVudGl0eT17JGNhc2U6XCJzbmFwU3RpY2tlckVudGl0eVwiLHNuYXBTdGlja2VyRW50aXR5OmEuU25hcFN0aWNrZXIuZGVjb2RlKG4sbi51aW50MzIoKSl9Om4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17ZW50aXR5OnZvaWQgMH07cmV0dXJuXCJzbmFwU3RpY2tlckVudGl0eVwiPT09ZS5lbnRpdHk/LiRjYXNlJiZ2b2lkIDAhPT1lLmVudGl0eT8uc25hcFN0aWNrZXJFbnRpdHkmJm51bGwhPT1lLmVudGl0eT8uc25hcFN0aWNrZXJFbnRpdHkmJih0LmVudGl0eT17JGNhc2U6XCJzbmFwU3RpY2tlckVudGl0eVwiLHNuYXBTdGlja2VyRW50aXR5OmEuU25hcFN0aWNrZXIuZnJvbVBhcnRpYWwoZS5lbnRpdHkuc25hcFN0aWNrZXJFbnRpdHkpfSksdH19LG8uZGVmYXVsdC51dGlsLkxvbmchPT1pLmRlZmF1bHQmJihvLmRlZmF1bHQudXRpbC5Mb25nPWkuZGVmYXVsdCxvLmRlZmF1bHQuY29uZmlndXJlKCkpfSw2ODUxNTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5UZW1wbGF0ZT12b2lkIDA7Y29uc3QgaT1yKG4oNDE1ODMpKSxvPW4oMjU3MzkpLGE9cihuKDYyMTAwKSk7ZnVuY3Rpb24gcygpe3JldHVybnt0ZW1wbGF0ZUlkOlwiXCIsZW5jcnlwdGVkUHJldmlld1ZpZGVvOnZvaWQgMCxzZXJpYWxpemVkU25hcERvYzpuZXcgVWludDhBcnJheSxjcmVhdGlvblRpbWVzdGFtcDpcIjBcIn19dC5UZW1wbGF0ZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnRlbXBsYXRlSWQmJnQudWludDMyKDEwKS5zdHJpbmcoZS50ZW1wbGF0ZUlkKSx2b2lkIDAhPT1lLmVuY3J5cHRlZFByZXZpZXdWaWRlbyYmby5FbmNyeXB0ZWRNZWRpYS5lbmNvZGUoZS5lbmNyeXB0ZWRQcmV2aWV3VmlkZW8sdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksMCE9PWUuc2VyaWFsaXplZFNuYXBEb2MubGVuZ3RoJiZ0LnVpbnQzMigyNikuYnl0ZXMoZS5zZXJpYWxpemVkU25hcERvYyksXCIwXCIhPT1lLmNyZWF0aW9uVGltZXN0YW1wJiZ0LnVpbnQzMigzMikudWludDY0KGUuY3JlYXRpb25UaW1lc3RhbXApLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT1zKCk7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkudGVtcGxhdGVJZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLmVuY3J5cHRlZFByZXZpZXdWaWRlbz1vLkVuY3J5cHRlZE1lZGlhLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMzppLnNlcmlhbGl6ZWRTbmFwRG9jPW4uYnl0ZXMoKTticmVhaztjYXNlIDQ6aS5jcmVhdGlvblRpbWVzdGFtcD1uLnVpbnQ2NCgpLnRvU3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXMoKTtyZXR1cm4gdC50ZW1wbGF0ZUlkPWUudGVtcGxhdGVJZD8/XCJcIix0LmVuY3J5cHRlZFByZXZpZXdWaWRlbz12b2lkIDAhPT1lLmVuY3J5cHRlZFByZXZpZXdWaWRlbyYmbnVsbCE9PWUuZW5jcnlwdGVkUHJldmlld1ZpZGVvP28uRW5jcnlwdGVkTWVkaWEuZnJvbVBhcnRpYWwoZS5lbmNyeXB0ZWRQcmV2aWV3VmlkZW8pOnZvaWQgMCx0LnNlcmlhbGl6ZWRTbmFwRG9jPWUuc2VyaWFsaXplZFNuYXBEb2M/P25ldyBVaW50OEFycmF5LHQuY3JlYXRpb25UaW1lc3RhbXA9ZS5jcmVhdGlvblRpbWVzdGFtcD8/XCIwXCIsdH19LGEuZGVmYXVsdC51dGlsLkxvbmchPT1pLmRlZmF1bHQmJihhLmRlZmF1bHQudXRpbC5Mb25nPWkuZGVmYXVsdCxhLmRlZmF1bHQuY29uZmlndXJlKCkpfSwxMzc1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNUSXRlbUV4dGVybmFsSUQ9dC5FeHRlcm5hbEtleT10LkNUSXRlbV9Bc3NvY2lhdGVkSWQ9dC5DVEl0ZW1fRW50aXR5PXQuQ1RJdGVtPXQuQ1RJdGVtX0Fzc29jaWF0ZWRJZF9Db3JwdXM9dC5DVEl0ZW1fVHlwZT12b2lkIDA7Y29uc3QgaT1yKG4oNDE1ODMpKSxvPW4oMTQ2NTgpLGE9bigxNzMyNikscz1yKG4oNjIxMDApKSxjPW4oMzEwNzgpLGw9bigyMjc0NyksdT1uKDQ5NzgpLGQ9big1MTEwNSksZj1uKDgxNDQ5KSxwPW4oODU2OTQpLG09bigzOTk3MSksaD1uKDU2NTc1KSx2PW4oOTQxNDApLGc9bigzNjI5NCkseT1uKDczNDA4KSxFPW4oNjg0NzEpLF89bigzNzE2MiksST1uKDkzMTE4KSxTPW4oNzkwMzcpLGI9bigxOTQ3NSksVD1uKDI5MTk3KSxDPW4oMTM1MTQpLEE9big5NjQ3MiksUj1uKDY4ODc3KSxrPW4oMTAyODkpLE89bigxNTg2KSxOPW4oOTU4MzcpLHc9bigyNDgxMiksRD1uKDY4NTE1KSxQPW4oOTI3NjIpO2Z1bmN0aW9uIE0oKXtyZXR1cm57aWQ6bmV3IFVpbnQ4QXJyYXksbGVnYWN5Q29tcG9zaXRlSWQ6dm9pZCAwLGVudGl0eTp2b2lkIDAsY29uZmlnOnZvaWQgMCxjdElkOlwiMFwiLGFzc29jaWF0ZWRJZHM6W10sc3luY1NlbnNpdGl2aXR5OjB9fWZ1bmN0aW9uIEwoZSl7cmV0dXJuIGUudG9TdHJpbmcoKX12YXIgVSx4Oyh4PXQuQ1RJdGVtX1R5cGV8fCh0LkNUSXRlbV9UeXBlPXt9KSlbeC5VTlNFVD0wXT1cIlVOU0VUXCIseFt4LlNOQVBfU1RJQ0tFUj0xXT1cIlNOQVBfU1RJQ0tFUlwiLHhbeC5CSVRNT0pJX1NUSUNLRVI9Ml09XCJCSVRNT0pJX1NUSUNLRVJcIix4W3guQ1VTVE9NX1NUSUNLRVI9M109XCJDVVNUT01fU1RJQ0tFUlwiLHhbeC5FTU9KST00XT1cIkVNT0pJXCIseFt4LkdJUEhZPTVdPVwiR0lQSFlcIix4W3guTVVTSUNfU1RJQ0tFUj0xOV09XCJNVVNJQ19TVElDS0VSXCIseFt4LkNBTUVPPTIwXT1cIkNBTUVPXCIseFt4Lk1FTU9SSUVTPTIxXT1cIk1FTU9SSUVTXCIseFt4LlNUSUNLRVJfUEFDSz0yMl09XCJTVElDS0VSX1BBQ0tcIix4W3guVEFSR0VURURfSVRFTT0yM109XCJUQVJHRVRFRF9JVEVNXCIseFt4LklORk9fU1RJQ0tFUj0yNV09XCJJTkZPX1NUSUNLRVJcIix4W3guQ0FQVElPTl9TVFlMRT0yNl09XCJDQVBUSU9OX1NUWUxFXCIseFt4Lk1VU0lDX1RSQUNLPTI3XT1cIk1VU0lDX1RSQUNLXCIseFt4LkNIQVRfQ0FNRU89MjhdPVwiQ0hBVF9DQU1FT1wiLHhbeC5TRVJWRVJfQ0FNRU89MjldPVwiU0VSVkVSX0NBTUVPXCIseFt4LkdGWUNBVD0zMF09XCJHRllDQVRcIix4W3guQ1VTVE9NX1NUSUNLRVJfUEFDSz0zMV09XCJDVVNUT01fU1RJQ0tFUl9QQUNLXCIseFt4LkNIQVRfUkVBQ1RJT049MzJdPVwiQ0hBVF9SRUFDVElPTlwiLHhbeC5GSUxURVI9MzNdPVwiRklMVEVSXCIseFt4LlNIT1BQSU5HX1NUSUNLRVI9MzRdPVwiU0hPUFBJTkdfU1RJQ0tFUlwiLHhbeC5NVVNJQ19BUlRJU1Q9MzVdPVwiTVVTSUNfQVJUSVNUXCIseFt4LkRSQVdJTkc9MzZdPVwiRFJBV0lOR1wiLHhbeC5MT1RUSUU9MzddPVwiTE9UVElFXCIseFt4LkFVVE9fQ0FQVElPTlM9MzhdPVwiQVVUT19DQVBUSU9OU1wiLHhbeC5QUk9YWV9JVEVNPTM5XT1cIlBST1hZX0lURU1cIix4W3guQ0FNRVJBX1JPTExfU1RJQ0tFUj00MF09XCJDQU1FUkFfUk9MTF9TVElDS0VSXCIseFt4LkxFTlM9NDFdPVwiTEVOU1wiLHhbeC5URU1QTEFURT00Ml09XCJURU1QTEFURVwiLHhbeC5MRU5TX1NOQVBDSEFUPTQzXT1cIkxFTlNfU05BUENIQVRcIix4W3guVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLChVPXQuQ1RJdGVtX0Fzc29jaWF0ZWRJZF9Db3JwdXN8fCh0LkNUSXRlbV9Bc3NvY2lhdGVkSWRfQ29ycHVzPXt9KSlbVS5DT1JQVVNfVU5TRVQ9MF09XCJDT1JQVVNfVU5TRVRcIixVW1UuVVJMPTFdPVwiVVJMXCIsVVtVLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0LkNUSXRlbT17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpOzAhPT1lLmlkLmxlbmd0aCYmbi51aW50MzIoNTApLmJ5dGVzKGUuaWQpLHZvaWQgMCE9PWUubGVnYWN5Q29tcG9zaXRlSWQmJm8uQ29tcG9zaXRlSWQuZW5jb2RlKGUubGVnYWN5Q29tcG9zaXRlSWQsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5lbnRpdHkmJnQuQ1RJdGVtX0VudGl0eS5lbmNvZGUoZS5lbnRpdHksbi51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5jb25maWcmJmEuQ1RDb25maWcuZW5jb2RlKGUuY29uZmlnLG4udWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLFwiMFwiIT09ZS5jdElkJiZuLnVpbnQzMigzMikudWludDY0KGUuY3RJZCk7Zm9yKGNvbnN0IHIgb2YgZS5hc3NvY2lhdGVkSWRzKXQuQ1RJdGVtX0Fzc29jaWF0ZWRJZC5lbmNvZGUocixuLnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gMCE9PWUuc3luY1NlbnNpdGl2aXR5JiZuLnVpbnQzMig1NikuaW50MzIoZS5zeW5jU2Vuc2l0aXZpdHkpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3QgYz1NKCk7Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSA2OmMuaWQ9ci5ieXRlcygpO2JyZWFrO2Nhc2UgMTpjLmxlZ2FjeUNvbXBvc2l0ZUlkPW8uQ29tcG9zaXRlSWQuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOmMuZW50aXR5PXQuQ1RJdGVtX0VudGl0eS5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDM6Yy5jb25maWc9YS5DVENvbmZpZy5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDQ6Yy5jdElkPUwoci51aW50NjQoKSk7YnJlYWs7Y2FzZSA1OmMuYXNzb2NpYXRlZElkcy5wdXNoKHQuQ1RJdGVtX0Fzc29jaWF0ZWRJZC5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSA3OmMuc3luY1NlbnNpdGl2aXR5PXIuaW50MzIoKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIGN9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49TSgpO3JldHVybiBuLmlkPWUuaWQ/P25ldyBVaW50OEFycmF5LG4ubGVnYWN5Q29tcG9zaXRlSWQ9dm9pZCAwIT09ZS5sZWdhY3lDb21wb3NpdGVJZCYmbnVsbCE9PWUubGVnYWN5Q29tcG9zaXRlSWQ/by5Db21wb3NpdGVJZC5mcm9tUGFydGlhbChlLmxlZ2FjeUNvbXBvc2l0ZUlkKTp2b2lkIDAsbi5lbnRpdHk9dm9pZCAwIT09ZS5lbnRpdHkmJm51bGwhPT1lLmVudGl0eT90LkNUSXRlbV9FbnRpdHkuZnJvbVBhcnRpYWwoZS5lbnRpdHkpOnZvaWQgMCxuLmNvbmZpZz12b2lkIDAhPT1lLmNvbmZpZyYmbnVsbCE9PWUuY29uZmlnP2EuQ1RDb25maWcuZnJvbVBhcnRpYWwoZS5jb25maWcpOnZvaWQgMCxuLmN0SWQ9ZS5jdElkPz9cIjBcIixuLmFzc29jaWF0ZWRJZHM9ZS5hc3NvY2lhdGVkSWRzPy5tYXAoKGU9PnQuQ1RJdGVtX0Fzc29jaWF0ZWRJZC5mcm9tUGFydGlhbChlKSkpfHxbXSxuLnN5bmNTZW5zaXRpdml0eT1lLnN5bmNTZW5zaXRpdml0eT8/MCxufX0sdC5DVEl0ZW1fRW50aXR5PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJzbmFwU3RpY2tlclwiPT09ZS5lbnRpdHlPbmVvZj8uJGNhc2UmJmMuU25hcFN0aWNrZXIuZW5jb2RlKGUuZW50aXR5T25lb2Yuc25hcFN0aWNrZXIsdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksXCJiaXRtb2ppU3RpY2tlclwiPT09ZS5lbnRpdHlPbmVvZj8uJGNhc2UmJmwuQml0bW9qaVN0aWNrZXIuZW5jb2RlKGUuZW50aXR5T25lb2YuYml0bW9qaVN0aWNrZXIsdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksXCJjdXN0b21TdGlja2VyXCI9PT1lLmVudGl0eU9uZW9mPy4kY2FzZSYmdS5DdXN0b21TdGlja2VyLmVuY29kZShlLmVudGl0eU9uZW9mLmN1c3RvbVN0aWNrZXIsdC51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCksXCJlbW9qaVwiPT09ZS5lbnRpdHlPbmVvZj8uJGNhc2UmJmQuRW1vamkuZW5jb2RlKGUuZW50aXR5T25lb2YuZW1vamksdC51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCksXCJnaXBoeVwiPT09ZS5lbnRpdHlPbmVvZj8uJGNhc2UmJmYuR2lwaHkuZW5jb2RlKGUuZW50aXR5T25lb2YuZ2lwaHksdC51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKCksXCJjYW1lb1wiPT09ZS5lbnRpdHlPbmVvZj8uJGNhc2UmJnAuQ2FtZW8uZW5jb2RlKGUuZW50aXR5T25lb2YuY2FtZW8sdC51aW50MzIoNTApLmZvcmsoKSkubGRlbGltKCksXCJtdXNpY1RyYWNrXCI9PT1lLmVudGl0eU9uZW9mPy4kY2FzZSYmbS5NdXNpY1RyYWNrLmVuY29kZShlLmVudGl0eU9uZW9mLm11c2ljVHJhY2ssdC51aW50MzIoNTgpLmZvcmsoKSkubGRlbGltKCksXCJzdGlja2VyUGFja1wiPT09ZS5lbnRpdHlPbmVvZj8uJGNhc2UmJmguU3RpY2tlclBhY2suZW5jb2RlKGUuZW50aXR5T25lb2Yuc3RpY2tlclBhY2ssdC51aW50MzIoNjYpLmZvcmsoKSkubGRlbGltKCksXCJpbmZvU3RpY2tlclwiPT09ZS5lbnRpdHlPbmVvZj8uJGNhc2UmJnYuSW5mb1N0aWNrZXIuZW5jb2RlKGUuZW50aXR5T25lb2YuaW5mb1N0aWNrZXIsdC51aW50MzIoNzQpLmZvcmsoKSkubGRlbGltKCksXCJjYXB0aW9uU3R5bGVzXCI9PT1lLmVudGl0eU9uZW9mPy4kY2FzZSYmZy5DYXB0aW9uU3R5bGVzLmVuY29kZShlLmVudGl0eU9uZW9mLmNhcHRpb25TdHlsZXMsdC51aW50MzIoOTApLmZvcmsoKSkubGRlbGltKCksXCJjaGF0Q2FtZW9cIj09PWUuZW50aXR5T25lb2Y/LiRjYXNlJiZ5LkNoYXRDYW1lby5lbmNvZGUoZS5lbnRpdHlPbmVvZi5jaGF0Q2FtZW8sdC51aW50MzIoOTgpLmZvcmsoKSkubGRlbGltKCksXCJnZnljYXRcIj09PWUuZW50aXR5T25lb2Y/LiRjYXNlJiZFLkdmeWNhdC5lbmNvZGUoZS5lbnRpdHlPbmVvZi5nZnljYXQsdC51aW50MzIoMTA2KS5mb3JrKCkpLmxkZWxpbSgpLFwic2VydmVyQ2FtZW9cIj09PWUuZW50aXR5T25lb2Y/LiRjYXNlJiZfLlNlcnZlckNhbWVvLmVuY29kZShlLmVudGl0eU9uZW9mLnNlcnZlckNhbWVvLHQudWludDMyKDExNCkuZm9yaygpKS5sZGVsaW0oKSxcImNoYXRSZWFjdGlvblwiPT09ZS5lbnRpdHlPbmVvZj8uJGNhc2UmJkkuQ2hhdFJlYWN0aW9uSW50ZW50LmVuY29kZShlLmVudGl0eU9uZW9mLmNoYXRSZWFjdGlvbix0LnVpbnQzMigxMjIpLmZvcmsoKSkubGRlbGltKCksXCJmaWx0ZXJcIj09PWUuZW50aXR5T25lb2Y/LiRjYXNlJiZTLkZpbHRlci5lbmNvZGUoZS5lbnRpdHlPbmVvZi5maWx0ZXIsdC51aW50MzIoMTMwKS5mb3JrKCkpLmxkZWxpbSgpLFwiY3VzdG9tU3RpY2tlclBhY2tcIj09PWUuZW50aXR5T25lb2Y/LiRjYXNlJiZiLkN1c3RvbVN0aWNrZXJQYWNrLmVuY29kZShlLmVudGl0eU9uZW9mLmN1c3RvbVN0aWNrZXJQYWNrLHQudWludDMyKDEzOCkuZm9yaygpKS5sZGVsaW0oKSxcInNob3BwaW5nU3RpY2tlclwiPT09ZS5lbnRpdHlPbmVvZj8uJGNhc2UmJlQuU2hvcHBpbmdTdGlja2VyLmVuY29kZShlLmVudGl0eU9uZW9mLnNob3BwaW5nU3RpY2tlcix0LnVpbnQzMigxNDYpLmZvcmsoKSkubGRlbGltKCksXCJtdXNpY0FydGlzdFwiPT09ZS5lbnRpdHlPbmVvZj8uJGNhc2UmJkMuTXVzaWNBcnRpc3QuZW5jb2RlKGUuZW50aXR5T25lb2YubXVzaWNBcnRpc3QsdC51aW50MzIoMTU0KS5mb3JrKCkpLmxkZWxpbSgpLFwiZHJhd2luZ1wiPT09ZS5lbnRpdHlPbmVvZj8uJGNhc2UmJkEuRHJhd2luZy5lbmNvZGUoZS5lbnRpdHlPbmVvZi5kcmF3aW5nLHQudWludDMyKDE2MikuZm9yaygpKS5sZGVsaW0oKSxcImxvdHRpZVwiPT09ZS5lbnRpdHlPbmVvZj8uJGNhc2UmJlIuTG90dGllLmVuY29kZShlLmVudGl0eU9uZW9mLmxvdHRpZSx0LnVpbnQzMigxNzApLmZvcmsoKSkubGRlbGltKCksXCJhdXRvQ2FwdGlvbnNcIj09PWUuZW50aXR5T25lb2Y/LiRjYXNlJiZrLkF1dG9DYXB0aW9ucy5lbmNvZGUoZS5lbnRpdHlPbmVvZi5hdXRvQ2FwdGlvbnMsdC51aW50MzIoMTc4KS5mb3JrKCkpLmxkZWxpbSgpLFwicHJveHlJdGVtXCI9PT1lLmVudGl0eU9uZW9mPy4kY2FzZSYmTy5Qcm94eUl0ZW0uZW5jb2RlKGUuZW50aXR5T25lb2YucHJveHlJdGVtLHQudWludDMyKDE4NikuZm9yaygpKS5sZGVsaW0oKSxcImNhbWVyYVJvbGxTdGlja2VyXCI9PT1lLmVudGl0eU9uZW9mPy4kY2FzZSYmTi5DYW1lcmFSb2xsU3RpY2tlci5lbmNvZGUoZS5lbnRpdHlPbmVvZi5jYW1lcmFSb2xsU3RpY2tlcix0LnVpbnQzMigxOTQpLmZvcmsoKSkubGRlbGltKCksXCJsZW5zXCI9PT1lLmVudGl0eU9uZW9mPy4kY2FzZSYmdy5MZW5zLmVuY29kZShlLmVudGl0eU9uZW9mLmxlbnMsdC51aW50MzIoMjAyKS5mb3JrKCkpLmxkZWxpbSgpLFwidGVtcGxhdGVcIj09PWUuZW50aXR5T25lb2Y/LiRjYXNlJiZELlRlbXBsYXRlLmVuY29kZShlLmVudGl0eU9uZW9mLnRlbXBsYXRlLHQudWludDMyKDIxMCkuZm9yaygpKS5sZGVsaW0oKSxcImxlbnNTbmFwY2hhdFwiPT09ZS5lbnRpdHlPbmVvZj8uJGNhc2UmJlAuTGVuc1NuYXBjaGF0LmVuY29kZShlLmVudGl0eU9uZW9mLmxlbnNTbmFwY2hhdCx0LnVpbnQzMigyMTgpLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtlbnRpdHlPbmVvZjp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmVudGl0eU9uZW9mPXskY2FzZTpcInNuYXBTdGlja2VyXCIsc25hcFN0aWNrZXI6Yy5TbmFwU3RpY2tlci5kZWNvZGUobixuLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAyOmkuZW50aXR5T25lb2Y9eyRjYXNlOlwiYml0bW9qaVN0aWNrZXJcIixiaXRtb2ppU3RpY2tlcjpsLkJpdG1vamlTdGlja2VyLmRlY29kZShuLG4udWludDMyKCkpfTticmVhaztjYXNlIDM6aS5lbnRpdHlPbmVvZj17JGNhc2U6XCJjdXN0b21TdGlja2VyXCIsY3VzdG9tU3RpY2tlcjp1LkN1c3RvbVN0aWNrZXIuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgNDppLmVudGl0eU9uZW9mPXskY2FzZTpcImVtb2ppXCIsZW1vamk6ZC5FbW9qaS5kZWNvZGUobixuLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA1OmkuZW50aXR5T25lb2Y9eyRjYXNlOlwiZ2lwaHlcIixnaXBoeTpmLkdpcGh5LmRlY29kZShuLG4udWludDMyKCkpfTticmVhaztjYXNlIDY6aS5lbnRpdHlPbmVvZj17JGNhc2U6XCJjYW1lb1wiLGNhbWVvOnAuQ2FtZW8uZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgNzppLmVudGl0eU9uZW9mPXskY2FzZTpcIm11c2ljVHJhY2tcIixtdXNpY1RyYWNrOm0uTXVzaWNUcmFjay5kZWNvZGUobixuLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA4OmkuZW50aXR5T25lb2Y9eyRjYXNlOlwic3RpY2tlclBhY2tcIixzdGlja2VyUGFjazpoLlN0aWNrZXJQYWNrLmRlY29kZShuLG4udWludDMyKCkpfTticmVhaztjYXNlIDk6aS5lbnRpdHlPbmVvZj17JGNhc2U6XCJpbmZvU3RpY2tlclwiLGluZm9TdGlja2VyOnYuSW5mb1N0aWNrZXIuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMTE6aS5lbnRpdHlPbmVvZj17JGNhc2U6XCJjYXB0aW9uU3R5bGVzXCIsY2FwdGlvblN0eWxlczpnLkNhcHRpb25TdHlsZXMuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMTI6aS5lbnRpdHlPbmVvZj17JGNhc2U6XCJjaGF0Q2FtZW9cIixjaGF0Q2FtZW86eS5DaGF0Q2FtZW8uZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMTM6aS5lbnRpdHlPbmVvZj17JGNhc2U6XCJnZnljYXRcIixnZnljYXQ6RS5HZnljYXQuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMTQ6aS5lbnRpdHlPbmVvZj17JGNhc2U6XCJzZXJ2ZXJDYW1lb1wiLHNlcnZlckNhbWVvOl8uU2VydmVyQ2FtZW8uZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMTU6aS5lbnRpdHlPbmVvZj17JGNhc2U6XCJjaGF0UmVhY3Rpb25cIixjaGF0UmVhY3Rpb246SS5DaGF0UmVhY3Rpb25JbnRlbnQuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMTY6aS5lbnRpdHlPbmVvZj17JGNhc2U6XCJmaWx0ZXJcIixmaWx0ZXI6Uy5GaWx0ZXIuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMTc6aS5lbnRpdHlPbmVvZj17JGNhc2U6XCJjdXN0b21TdGlja2VyUGFja1wiLGN1c3RvbVN0aWNrZXJQYWNrOmIuQ3VzdG9tU3RpY2tlclBhY2suZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMTg6aS5lbnRpdHlPbmVvZj17JGNhc2U6XCJzaG9wcGluZ1N0aWNrZXJcIixzaG9wcGluZ1N0aWNrZXI6VC5TaG9wcGluZ1N0aWNrZXIuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMTk6aS5lbnRpdHlPbmVvZj17JGNhc2U6XCJtdXNpY0FydGlzdFwiLG11c2ljQXJ0aXN0OkMuTXVzaWNBcnRpc3QuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMjA6aS5lbnRpdHlPbmVvZj17JGNhc2U6XCJkcmF3aW5nXCIsZHJhd2luZzpBLkRyYXdpbmcuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMjE6aS5lbnRpdHlPbmVvZj17JGNhc2U6XCJsb3R0aWVcIixsb3R0aWU6Ui5Mb3R0aWUuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMjI6aS5lbnRpdHlPbmVvZj17JGNhc2U6XCJhdXRvQ2FwdGlvbnNcIixhdXRvQ2FwdGlvbnM6ay5BdXRvQ2FwdGlvbnMuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMjM6aS5lbnRpdHlPbmVvZj17JGNhc2U6XCJwcm94eUl0ZW1cIixwcm94eUl0ZW06Ty5Qcm94eUl0ZW0uZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMjQ6aS5lbnRpdHlPbmVvZj17JGNhc2U6XCJjYW1lcmFSb2xsU3RpY2tlclwiLGNhbWVyYVJvbGxTdGlja2VyOk4uQ2FtZXJhUm9sbFN0aWNrZXIuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMjU6aS5lbnRpdHlPbmVvZj17JGNhc2U6XCJsZW5zXCIsbGVuczp3LkxlbnMuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMjY6aS5lbnRpdHlPbmVvZj17JGNhc2U6XCJ0ZW1wbGF0ZVwiLHRlbXBsYXRlOkQuVGVtcGxhdGUuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMjc6aS5lbnRpdHlPbmVvZj17JGNhc2U6XCJsZW5zU25hcGNoYXRcIixsZW5zU25hcGNoYXQ6UC5MZW5zU25hcGNoYXQuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17ZW50aXR5T25lb2Y6dm9pZCAwfTtyZXR1cm5cInNuYXBTdGlja2VyXCI9PT1lLmVudGl0eU9uZW9mPy4kY2FzZSYmdm9pZCAwIT09ZS5lbnRpdHlPbmVvZj8uc25hcFN0aWNrZXImJm51bGwhPT1lLmVudGl0eU9uZW9mPy5zbmFwU3RpY2tlciYmKHQuZW50aXR5T25lb2Y9eyRjYXNlOlwic25hcFN0aWNrZXJcIixzbmFwU3RpY2tlcjpjLlNuYXBTdGlja2VyLmZyb21QYXJ0aWFsKGUuZW50aXR5T25lb2Yuc25hcFN0aWNrZXIpfSksXCJiaXRtb2ppU3RpY2tlclwiPT09ZS5lbnRpdHlPbmVvZj8uJGNhc2UmJnZvaWQgMCE9PWUuZW50aXR5T25lb2Y/LmJpdG1vamlTdGlja2VyJiZudWxsIT09ZS5lbnRpdHlPbmVvZj8uYml0bW9qaVN0aWNrZXImJih0LmVudGl0eU9uZW9mPXskY2FzZTpcImJpdG1vamlTdGlja2VyXCIsYml0bW9qaVN0aWNrZXI6bC5CaXRtb2ppU3RpY2tlci5mcm9tUGFydGlhbChlLmVudGl0eU9uZW9mLmJpdG1vamlTdGlja2VyKX0pLFwiY3VzdG9tU3RpY2tlclwiPT09ZS5lbnRpdHlPbmVvZj8uJGNhc2UmJnZvaWQgMCE9PWUuZW50aXR5T25lb2Y/LmN1c3RvbVN0aWNrZXImJm51bGwhPT1lLmVudGl0eU9uZW9mPy5jdXN0b21TdGlja2VyJiYodC5lbnRpdHlPbmVvZj17JGNhc2U6XCJjdXN0b21TdGlja2VyXCIsY3VzdG9tU3RpY2tlcjp1LkN1c3RvbVN0aWNrZXIuZnJvbVBhcnRpYWwoZS5lbnRpdHlPbmVvZi5jdXN0b21TdGlja2VyKX0pLFwiZW1vamlcIj09PWUuZW50aXR5T25lb2Y/LiRjYXNlJiZ2b2lkIDAhPT1lLmVudGl0eU9uZW9mPy5lbW9qaSYmbnVsbCE9PWUuZW50aXR5T25lb2Y/LmVtb2ppJiYodC5lbnRpdHlPbmVvZj17JGNhc2U6XCJlbW9qaVwiLGVtb2ppOmQuRW1vamkuZnJvbVBhcnRpYWwoZS5lbnRpdHlPbmVvZi5lbW9qaSl9KSxcImdpcGh5XCI9PT1lLmVudGl0eU9uZW9mPy4kY2FzZSYmdm9pZCAwIT09ZS5lbnRpdHlPbmVvZj8uZ2lwaHkmJm51bGwhPT1lLmVudGl0eU9uZW9mPy5naXBoeSYmKHQuZW50aXR5T25lb2Y9eyRjYXNlOlwiZ2lwaHlcIixnaXBoeTpmLkdpcGh5LmZyb21QYXJ0aWFsKGUuZW50aXR5T25lb2YuZ2lwaHkpfSksXCJjYW1lb1wiPT09ZS5lbnRpdHlPbmVvZj8uJGNhc2UmJnZvaWQgMCE9PWUuZW50aXR5T25lb2Y/LmNhbWVvJiZudWxsIT09ZS5lbnRpdHlPbmVvZj8uY2FtZW8mJih0LmVudGl0eU9uZW9mPXskY2FzZTpcImNhbWVvXCIsY2FtZW86cC5DYW1lby5mcm9tUGFydGlhbChlLmVudGl0eU9uZW9mLmNhbWVvKX0pLFwibXVzaWNUcmFja1wiPT09ZS5lbnRpdHlPbmVvZj8uJGNhc2UmJnZvaWQgMCE9PWUuZW50aXR5T25lb2Y/Lm11c2ljVHJhY2smJm51bGwhPT1lLmVudGl0eU9uZW9mPy5tdXNpY1RyYWNrJiYodC5lbnRpdHlPbmVvZj17JGNhc2U6XCJtdXNpY1RyYWNrXCIsbXVzaWNUcmFjazptLk11c2ljVHJhY2suZnJvbVBhcnRpYWwoZS5lbnRpdHlPbmVvZi5tdXNpY1RyYWNrKX0pLFwic3RpY2tlclBhY2tcIj09PWUuZW50aXR5T25lb2Y/LiRjYXNlJiZ2b2lkIDAhPT1lLmVudGl0eU9uZW9mPy5zdGlja2VyUGFjayYmbnVsbCE9PWUuZW50aXR5T25lb2Y/LnN0aWNrZXJQYWNrJiYodC5lbnRpdHlPbmVvZj17JGNhc2U6XCJzdGlja2VyUGFja1wiLHN0aWNrZXJQYWNrOmguU3RpY2tlclBhY2suZnJvbVBhcnRpYWwoZS5lbnRpdHlPbmVvZi5zdGlja2VyUGFjayl9KSxcImluZm9TdGlja2VyXCI9PT1lLmVudGl0eU9uZW9mPy4kY2FzZSYmdm9pZCAwIT09ZS5lbnRpdHlPbmVvZj8uaW5mb1N0aWNrZXImJm51bGwhPT1lLmVudGl0eU9uZW9mPy5pbmZvU3RpY2tlciYmKHQuZW50aXR5T25lb2Y9eyRjYXNlOlwiaW5mb1N0aWNrZXJcIixpbmZvU3RpY2tlcjp2LkluZm9TdGlja2VyLmZyb21QYXJ0aWFsKGUuZW50aXR5T25lb2YuaW5mb1N0aWNrZXIpfSksXCJjYXB0aW9uU3R5bGVzXCI9PT1lLmVudGl0eU9uZW9mPy4kY2FzZSYmdm9pZCAwIT09ZS5lbnRpdHlPbmVvZj8uY2FwdGlvblN0eWxlcyYmbnVsbCE9PWUuZW50aXR5T25lb2Y/LmNhcHRpb25TdHlsZXMmJih0LmVudGl0eU9uZW9mPXskY2FzZTpcImNhcHRpb25TdHlsZXNcIixjYXB0aW9uU3R5bGVzOmcuQ2FwdGlvblN0eWxlcy5mcm9tUGFydGlhbChlLmVudGl0eU9uZW9mLmNhcHRpb25TdHlsZXMpfSksXCJjaGF0Q2FtZW9cIj09PWUuZW50aXR5T25lb2Y/LiRjYXNlJiZ2b2lkIDAhPT1lLmVudGl0eU9uZW9mPy5jaGF0Q2FtZW8mJm51bGwhPT1lLmVudGl0eU9uZW9mPy5jaGF0Q2FtZW8mJih0LmVudGl0eU9uZW9mPXskY2FzZTpcImNoYXRDYW1lb1wiLGNoYXRDYW1lbzp5LkNoYXRDYW1lby5mcm9tUGFydGlhbChlLmVudGl0eU9uZW9mLmNoYXRDYW1lbyl9KSxcImdmeWNhdFwiPT09ZS5lbnRpdHlPbmVvZj8uJGNhc2UmJnZvaWQgMCE9PWUuZW50aXR5T25lb2Y/LmdmeWNhdCYmbnVsbCE9PWUuZW50aXR5T25lb2Y/LmdmeWNhdCYmKHQuZW50aXR5T25lb2Y9eyRjYXNlOlwiZ2Z5Y2F0XCIsZ2Z5Y2F0OkUuR2Z5Y2F0LmZyb21QYXJ0aWFsKGUuZW50aXR5T25lb2YuZ2Z5Y2F0KX0pLFwic2VydmVyQ2FtZW9cIj09PWUuZW50aXR5T25lb2Y/LiRjYXNlJiZ2b2lkIDAhPT1lLmVudGl0eU9uZW9mPy5zZXJ2ZXJDYW1lbyYmbnVsbCE9PWUuZW50aXR5T25lb2Y/LnNlcnZlckNhbWVvJiYodC5lbnRpdHlPbmVvZj17JGNhc2U6XCJzZXJ2ZXJDYW1lb1wiLHNlcnZlckNhbWVvOl8uU2VydmVyQ2FtZW8uZnJvbVBhcnRpYWwoZS5lbnRpdHlPbmVvZi5zZXJ2ZXJDYW1lbyl9KSxcImNoYXRSZWFjdGlvblwiPT09ZS5lbnRpdHlPbmVvZj8uJGNhc2UmJnZvaWQgMCE9PWUuZW50aXR5T25lb2Y/LmNoYXRSZWFjdGlvbiYmbnVsbCE9PWUuZW50aXR5T25lb2Y/LmNoYXRSZWFjdGlvbiYmKHQuZW50aXR5T25lb2Y9eyRjYXNlOlwiY2hhdFJlYWN0aW9uXCIsY2hhdFJlYWN0aW9uOkkuQ2hhdFJlYWN0aW9uSW50ZW50LmZyb21QYXJ0aWFsKGUuZW50aXR5T25lb2YuY2hhdFJlYWN0aW9uKX0pLFwiZmlsdGVyXCI9PT1lLmVudGl0eU9uZW9mPy4kY2FzZSYmdm9pZCAwIT09ZS5lbnRpdHlPbmVvZj8uZmlsdGVyJiZudWxsIT09ZS5lbnRpdHlPbmVvZj8uZmlsdGVyJiYodC5lbnRpdHlPbmVvZj17JGNhc2U6XCJmaWx0ZXJcIixmaWx0ZXI6Uy5GaWx0ZXIuZnJvbVBhcnRpYWwoZS5lbnRpdHlPbmVvZi5maWx0ZXIpfSksXCJjdXN0b21TdGlja2VyUGFja1wiPT09ZS5lbnRpdHlPbmVvZj8uJGNhc2UmJnZvaWQgMCE9PWUuZW50aXR5T25lb2Y/LmN1c3RvbVN0aWNrZXJQYWNrJiZudWxsIT09ZS5lbnRpdHlPbmVvZj8uY3VzdG9tU3RpY2tlclBhY2smJih0LmVudGl0eU9uZW9mPXskY2FzZTpcImN1c3RvbVN0aWNrZXJQYWNrXCIsY3VzdG9tU3RpY2tlclBhY2s6Yi5DdXN0b21TdGlja2VyUGFjay5mcm9tUGFydGlhbChlLmVudGl0eU9uZW9mLmN1c3RvbVN0aWNrZXJQYWNrKX0pLFwic2hvcHBpbmdTdGlja2VyXCI9PT1lLmVudGl0eU9uZW9mPy4kY2FzZSYmdm9pZCAwIT09ZS5lbnRpdHlPbmVvZj8uc2hvcHBpbmdTdGlja2VyJiZudWxsIT09ZS5lbnRpdHlPbmVvZj8uc2hvcHBpbmdTdGlja2VyJiYodC5lbnRpdHlPbmVvZj17JGNhc2U6XCJzaG9wcGluZ1N0aWNrZXJcIixzaG9wcGluZ1N0aWNrZXI6VC5TaG9wcGluZ1N0aWNrZXIuZnJvbVBhcnRpYWwoZS5lbnRpdHlPbmVvZi5zaG9wcGluZ1N0aWNrZXIpfSksXCJtdXNpY0FydGlzdFwiPT09ZS5lbnRpdHlPbmVvZj8uJGNhc2UmJnZvaWQgMCE9PWUuZW50aXR5T25lb2Y/Lm11c2ljQXJ0aXN0JiZudWxsIT09ZS5lbnRpdHlPbmVvZj8ubXVzaWNBcnRpc3QmJih0LmVudGl0eU9uZW9mPXskY2FzZTpcIm11c2ljQXJ0aXN0XCIsbXVzaWNBcnRpc3Q6Qy5NdXNpY0FydGlzdC5mcm9tUGFydGlhbChlLmVudGl0eU9uZW9mLm11c2ljQXJ0aXN0KX0pLFwiZHJhd2luZ1wiPT09ZS5lbnRpdHlPbmVvZj8uJGNhc2UmJnZvaWQgMCE9PWUuZW50aXR5T25lb2Y/LmRyYXdpbmcmJm51bGwhPT1lLmVudGl0eU9uZW9mPy5kcmF3aW5nJiYodC5lbnRpdHlPbmVvZj17JGNhc2U6XCJkcmF3aW5nXCIsZHJhd2luZzpBLkRyYXdpbmcuZnJvbVBhcnRpYWwoZS5lbnRpdHlPbmVvZi5kcmF3aW5nKX0pLFwibG90dGllXCI9PT1lLmVudGl0eU9uZW9mPy4kY2FzZSYmdm9pZCAwIT09ZS5lbnRpdHlPbmVvZj8ubG90dGllJiZudWxsIT09ZS5lbnRpdHlPbmVvZj8ubG90dGllJiYodC5lbnRpdHlPbmVvZj17JGNhc2U6XCJsb3R0aWVcIixsb3R0aWU6Ui5Mb3R0aWUuZnJvbVBhcnRpYWwoZS5lbnRpdHlPbmVvZi5sb3R0aWUpfSksXCJhdXRvQ2FwdGlvbnNcIj09PWUuZW50aXR5T25lb2Y/LiRjYXNlJiZ2b2lkIDAhPT1lLmVudGl0eU9uZW9mPy5hdXRvQ2FwdGlvbnMmJm51bGwhPT1lLmVudGl0eU9uZW9mPy5hdXRvQ2FwdGlvbnMmJih0LmVudGl0eU9uZW9mPXskY2FzZTpcImF1dG9DYXB0aW9uc1wiLGF1dG9DYXB0aW9uczprLkF1dG9DYXB0aW9ucy5mcm9tUGFydGlhbChlLmVudGl0eU9uZW9mLmF1dG9DYXB0aW9ucyl9KSxcInByb3h5SXRlbVwiPT09ZS5lbnRpdHlPbmVvZj8uJGNhc2UmJnZvaWQgMCE9PWUuZW50aXR5T25lb2Y/LnByb3h5SXRlbSYmbnVsbCE9PWUuZW50aXR5T25lb2Y/LnByb3h5SXRlbSYmKHQuZW50aXR5T25lb2Y9eyRjYXNlOlwicHJveHlJdGVtXCIscHJveHlJdGVtOk8uUHJveHlJdGVtLmZyb21QYXJ0aWFsKGUuZW50aXR5T25lb2YucHJveHlJdGVtKX0pLFwiY2FtZXJhUm9sbFN0aWNrZXJcIj09PWUuZW50aXR5T25lb2Y/LiRjYXNlJiZ2b2lkIDAhPT1lLmVudGl0eU9uZW9mPy5jYW1lcmFSb2xsU3RpY2tlciYmbnVsbCE9PWUuZW50aXR5T25lb2Y/LmNhbWVyYVJvbGxTdGlja2VyJiYodC5lbnRpdHlPbmVvZj17JGNhc2U6XCJjYW1lcmFSb2xsU3RpY2tlclwiLGNhbWVyYVJvbGxTdGlja2VyOk4uQ2FtZXJhUm9sbFN0aWNrZXIuZnJvbVBhcnRpYWwoZS5lbnRpdHlPbmVvZi5jYW1lcmFSb2xsU3RpY2tlcil9KSxcImxlbnNcIj09PWUuZW50aXR5T25lb2Y/LiRjYXNlJiZ2b2lkIDAhPT1lLmVudGl0eU9uZW9mPy5sZW5zJiZudWxsIT09ZS5lbnRpdHlPbmVvZj8ubGVucyYmKHQuZW50aXR5T25lb2Y9eyRjYXNlOlwibGVuc1wiLGxlbnM6dy5MZW5zLmZyb21QYXJ0aWFsKGUuZW50aXR5T25lb2YubGVucyl9KSxcInRlbXBsYXRlXCI9PT1lLmVudGl0eU9uZW9mPy4kY2FzZSYmdm9pZCAwIT09ZS5lbnRpdHlPbmVvZj8udGVtcGxhdGUmJm51bGwhPT1lLmVudGl0eU9uZW9mPy50ZW1wbGF0ZSYmKHQuZW50aXR5T25lb2Y9eyRjYXNlOlwidGVtcGxhdGVcIix0ZW1wbGF0ZTpELlRlbXBsYXRlLmZyb21QYXJ0aWFsKGUuZW50aXR5T25lb2YudGVtcGxhdGUpfSksXCJsZW5zU25hcGNoYXRcIj09PWUuZW50aXR5T25lb2Y/LiRjYXNlJiZ2b2lkIDAhPT1lLmVudGl0eU9uZW9mPy5sZW5zU25hcGNoYXQmJm51bGwhPT1lLmVudGl0eU9uZW9mPy5sZW5zU25hcGNoYXQmJih0LmVudGl0eU9uZW9mPXskY2FzZTpcImxlbnNTbmFwY2hhdFwiLGxlbnNTbmFwY2hhdDpQLkxlbnNTbmFwY2hhdC5mcm9tUGFydGlhbChlLmVudGl0eU9uZW9mLmxlbnNTbmFwY2hhdCl9KSx0fX0sdC5DVEl0ZW1fQXNzb2NpYXRlZElkPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLmNvcnB1cyYmdC51aW50MzIoOCkuaW50MzIoZS5jb3JwdXMpLFwiXCIhPT1lLmlkJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuaWQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17Y29ycHVzOjAsaWQ6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuY29ycHVzPW4uaW50MzIoKTticmVhaztjYXNlIDI6aS5pZD1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17Y29ycHVzOjAsaWQ6XCJcIn07cmV0dXJuIHQuY29ycHVzPWUuY29ycHVzPz8wLHQuaWQ9ZS5pZD8/XCJcIix0fX0sdC5FeHRlcm5hbEtleT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5pdGVtVHlwZSYmdC51aW50MzIoOCkuaW50MzIoZS5pdGVtVHlwZSksXCJcIiE9PWUuaWQmJnQudWludDMyKDE4KS5zdHJpbmcoZS5pZCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtpdGVtVHlwZTowLGlkOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLml0ZW1UeXBlPW4uaW50MzIoKTticmVhaztjYXNlIDI6aS5pZD1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17aXRlbVR5cGU6MCxpZDpcIlwifTtyZXR1cm4gdC5pdGVtVHlwZT1lLml0ZW1UeXBlPz8wLHQuaWQ9ZS5pZD8/XCJcIix0fX0sdC5DVEl0ZW1FeHRlcm5hbElEPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJiaXRtb2ppQ29taWNJZFwiPT09ZS5pZE9uZW9mPy4kY2FzZSYmdC51aW50MzIoMTApLnN0cmluZyhlLmlkT25lb2YuYml0bW9qaUNvbWljSWQpLFwic3RpY2tlck5hbWVcIj09PWUuaWRPbmVvZj8uJGNhc2UmJnQudWludDMyKDE4KS5zdHJpbmcoZS5pZE9uZW9mLnN0aWNrZXJOYW1lKSxcImN1c3RvbVN0aWNrZXJJZFwiPT09ZS5pZE9uZW9mPy4kY2FzZSYmdC51aW50MzIoMjYpLnN0cmluZyhlLmlkT25lb2YuY3VzdG9tU3RpY2tlcklkKSxcImVtb2ppVW5pY29kZVwiPT09ZS5pZE9uZW9mPy4kY2FzZSYmdC51aW50MzIoMzQpLnN0cmluZyhlLmlkT25lb2YuZW1vamlVbmljb2RlKSxcImVtb2ppSGV4XCI9PT1lLmlkT25lb2Y/LiRjYXNlJiZ0LnVpbnQzMig3NCkuc3RyaW5nKGUuaWRPbmVvZi5lbW9qaUhleCksXCJnaXBoeUlkXCI9PT1lLmlkT25lb2Y/LiRjYXNlJiZ0LnVpbnQzMig0Mikuc3RyaW5nKGUuaWRPbmVvZi5naXBoeUlkKSxcImNhbWVvSWRcIj09PWUuaWRPbmVvZj8uJGNhc2UmJnQudWludDMyKDQ4KS5pbnQ2NChlLmlkT25lb2YuY2FtZW9JZCksXCJjYW1lb0V4dGVybmFsSWRcIj09PWUuaWRPbmVvZj8uJGNhc2UmJnQudWludDMyKDY2KS5zdHJpbmcoZS5pZE9uZW9mLmNhbWVvRXh0ZXJuYWxJZCksXCJzdGlja2VyUGFja05hbWVcIj09PWUuaWRPbmVvZj8uJGNhc2UmJnQudWludDMyKDU4KS5zdHJpbmcoZS5pZE9uZW9mLnN0aWNrZXJQYWNrTmFtZSksXCJpbmZvU3RpY2tlcklkXCI9PT1lLmlkT25lb2Y/LiRjYXNlJiZ0LnVpbnQzMig4Mikuc3RyaW5nKGUuaWRPbmVvZi5pbmZvU3RpY2tlcklkKSxcInRhcmdldGVkSXRlbUlkXCI9PT1lLmlkT25lb2Y/LiRjYXNlJiZ0LnVpbnQzMig5MCkuc3RyaW5nKGUuaWRPbmVvZi50YXJnZXRlZEl0ZW1JZCksXCJjYXB0aW9uU3R5bGVJZFwiPT09ZS5pZE9uZW9mPy4kY2FzZSYmdC51aW50MzIoOTYpLmludDY0KGUuaWRPbmVvZi5jYXB0aW9uU3R5bGVJZCksXCJtdXNpY1RyYWNrSWRcIj09PWUuaWRPbmVvZj8uJGNhc2UmJnQudWludDMyKDEwNCkudWludDY0KGUuaWRPbmVvZi5tdXNpY1RyYWNrSWQpLFwiZW1vamlFc2NhcGVkSWRcIj09PWUuaWRPbmVvZj8uJGNhc2UmJnQudWludDMyKDExNCkuc3RyaW5nKGUuaWRPbmVvZi5lbW9qaUVzY2FwZWRJZCksXCJjaGF0Q2FtZW9FeHRlcm5hbElkXCI9PT1lLmlkT25lb2Y/LiRjYXNlJiZ0LnVpbnQzMigxMjIpLnN0cmluZyhlLmlkT25lb2YuY2hhdENhbWVvRXh0ZXJuYWxJZCksXCJjaGF0Q2FtZW9JZFwiPT09ZS5pZE9uZW9mPy4kY2FzZSYmdC51aW50MzIoMTI4KS5pbnQ2NChlLmlkT25lb2YuY2hhdENhbWVvSWQpLFwiZ2Z5Y2F0SWRcIj09PWUuaWRPbmVvZj8uJGNhc2UmJnQudWludDMyKDEzOCkuc3RyaW5nKGUuaWRPbmVvZi5nZnljYXRJZCksXCJzZXJ2ZXJDYW1lb0lkXCI9PT1lLmlkT25lb2Y/LiRjYXNlJiZ0LnVpbnQzMigxNDQpLmludDY0KGUuaWRPbmVvZi5zZXJ2ZXJDYW1lb0lkKSxcImNoYXRSZWFjdGlvbklkXCI9PT1lLmlkT25lb2Y/LiRjYXNlJiZ0LnVpbnQzMigxNTQpLnN0cmluZyhlLmlkT25lb2YuY2hhdFJlYWN0aW9uSWQpLFwiZmlsdGVySWRcIj09PWUuaWRPbmVvZj8uJGNhc2UmJnQudWludDMyKDE2MCkudWludDY0KGUuaWRPbmVvZi5maWx0ZXJJZCksXCJwcm94eUlkXCI9PT1lLmlkT25lb2Y/LiRjYXNlJiZ0LnVpbnQzMigxNzApLnN0cmluZyhlLmlkT25lb2YucHJveHlJZCksXCJjYW1lcmFSb2xsU3RpY2tlcklkXCI9PT1lLmlkT25lb2Y/LiRjYXNlJiZ0LnVpbnQzMigxNzgpLnN0cmluZyhlLmlkT25lb2YuY2FtZXJhUm9sbFN0aWNrZXJJZCksXCJ0ZW1wbGF0ZUlkXCI9PT1lLmlkT25lb2Y/LiRjYXNlJiZ0LnVpbnQzMigxODYpLnN0cmluZyhlLmlkT25lb2YudGVtcGxhdGVJZCksXCJsZW5zU25hcGNoYXRJZFwiPT09ZS5pZE9uZW9mPy4kY2FzZSYmdC51aW50MzIoMTkyKS5pbnQ2NChlLmlkT25lb2YubGVuc1NuYXBjaGF0SWQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17aWRPbmVvZjp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmlkT25lb2Y9eyRjYXNlOlwiYml0bW9qaUNvbWljSWRcIixiaXRtb2ppQ29taWNJZDpuLnN0cmluZygpfTticmVhaztjYXNlIDI6aS5pZE9uZW9mPXskY2FzZTpcInN0aWNrZXJOYW1lXCIsc3RpY2tlck5hbWU6bi5zdHJpbmcoKX07YnJlYWs7Y2FzZSAzOmkuaWRPbmVvZj17JGNhc2U6XCJjdXN0b21TdGlja2VySWRcIixjdXN0b21TdGlja2VySWQ6bi5zdHJpbmcoKX07YnJlYWs7Y2FzZSA0OmkuaWRPbmVvZj17JGNhc2U6XCJlbW9qaVVuaWNvZGVcIixlbW9qaVVuaWNvZGU6bi5zdHJpbmcoKX07YnJlYWs7Y2FzZSA5OmkuaWRPbmVvZj17JGNhc2U6XCJlbW9qaUhleFwiLGVtb2ppSGV4Om4uc3RyaW5nKCl9O2JyZWFrO2Nhc2UgNTppLmlkT25lb2Y9eyRjYXNlOlwiZ2lwaHlJZFwiLGdpcGh5SWQ6bi5zdHJpbmcoKX07YnJlYWs7Y2FzZSA2OmkuaWRPbmVvZj17JGNhc2U6XCJjYW1lb0lkXCIsY2FtZW9JZDpMKG4uaW50NjQoKSl9O2JyZWFrO2Nhc2UgODppLmlkT25lb2Y9eyRjYXNlOlwiY2FtZW9FeHRlcm5hbElkXCIsY2FtZW9FeHRlcm5hbElkOm4uc3RyaW5nKCl9O2JyZWFrO2Nhc2UgNzppLmlkT25lb2Y9eyRjYXNlOlwic3RpY2tlclBhY2tOYW1lXCIsc3RpY2tlclBhY2tOYW1lOm4uc3RyaW5nKCl9O2JyZWFrO2Nhc2UgMTA6aS5pZE9uZW9mPXskY2FzZTpcImluZm9TdGlja2VySWRcIixpbmZvU3RpY2tlcklkOm4uc3RyaW5nKCl9O2JyZWFrO2Nhc2UgMTE6aS5pZE9uZW9mPXskY2FzZTpcInRhcmdldGVkSXRlbUlkXCIsdGFyZ2V0ZWRJdGVtSWQ6bi5zdHJpbmcoKX07YnJlYWs7Y2FzZSAxMjppLmlkT25lb2Y9eyRjYXNlOlwiY2FwdGlvblN0eWxlSWRcIixjYXB0aW9uU3R5bGVJZDpMKG4uaW50NjQoKSl9O2JyZWFrO2Nhc2UgMTM6aS5pZE9uZW9mPXskY2FzZTpcIm11c2ljVHJhY2tJZFwiLG11c2ljVHJhY2tJZDpMKG4udWludDY0KCkpfTticmVhaztjYXNlIDE0OmkuaWRPbmVvZj17JGNhc2U6XCJlbW9qaUVzY2FwZWRJZFwiLGVtb2ppRXNjYXBlZElkOm4uc3RyaW5nKCl9O2JyZWFrO2Nhc2UgMTU6aS5pZE9uZW9mPXskY2FzZTpcImNoYXRDYW1lb0V4dGVybmFsSWRcIixjaGF0Q2FtZW9FeHRlcm5hbElkOm4uc3RyaW5nKCl9O2JyZWFrO2Nhc2UgMTY6aS5pZE9uZW9mPXskY2FzZTpcImNoYXRDYW1lb0lkXCIsY2hhdENhbWVvSWQ6TChuLmludDY0KCkpfTticmVhaztjYXNlIDE3OmkuaWRPbmVvZj17JGNhc2U6XCJnZnljYXRJZFwiLGdmeWNhdElkOm4uc3RyaW5nKCl9O2JyZWFrO2Nhc2UgMTg6aS5pZE9uZW9mPXskY2FzZTpcInNlcnZlckNhbWVvSWRcIixzZXJ2ZXJDYW1lb0lkOkwobi5pbnQ2NCgpKX07YnJlYWs7Y2FzZSAxOTppLmlkT25lb2Y9eyRjYXNlOlwiY2hhdFJlYWN0aW9uSWRcIixjaGF0UmVhY3Rpb25JZDpuLnN0cmluZygpfTticmVhaztjYXNlIDIwOmkuaWRPbmVvZj17JGNhc2U6XCJmaWx0ZXJJZFwiLGZpbHRlcklkOkwobi51aW50NjQoKSl9O2JyZWFrO2Nhc2UgMjE6aS5pZE9uZW9mPXskY2FzZTpcInByb3h5SWRcIixwcm94eUlkOm4uc3RyaW5nKCl9O2JyZWFrO2Nhc2UgMjI6aS5pZE9uZW9mPXskY2FzZTpcImNhbWVyYVJvbGxTdGlja2VySWRcIixjYW1lcmFSb2xsU3RpY2tlcklkOm4uc3RyaW5nKCl9O2JyZWFrO2Nhc2UgMjM6aS5pZE9uZW9mPXskY2FzZTpcInRlbXBsYXRlSWRcIix0ZW1wbGF0ZUlkOm4uc3RyaW5nKCl9O2JyZWFrO2Nhc2UgMjQ6aS5pZE9uZW9mPXskY2FzZTpcImxlbnNTbmFwY2hhdElkXCIsbGVuc1NuYXBjaGF0SWQ6TChuLmludDY0KCkpfTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2lkT25lb2Y6dm9pZCAwfTtyZXR1cm5cImJpdG1vamlDb21pY0lkXCI9PT1lLmlkT25lb2Y/LiRjYXNlJiZ2b2lkIDAhPT1lLmlkT25lb2Y/LmJpdG1vamlDb21pY0lkJiZudWxsIT09ZS5pZE9uZW9mPy5iaXRtb2ppQ29taWNJZCYmKHQuaWRPbmVvZj17JGNhc2U6XCJiaXRtb2ppQ29taWNJZFwiLGJpdG1vamlDb21pY0lkOmUuaWRPbmVvZi5iaXRtb2ppQ29taWNJZH0pLFwic3RpY2tlck5hbWVcIj09PWUuaWRPbmVvZj8uJGNhc2UmJnZvaWQgMCE9PWUuaWRPbmVvZj8uc3RpY2tlck5hbWUmJm51bGwhPT1lLmlkT25lb2Y/LnN0aWNrZXJOYW1lJiYodC5pZE9uZW9mPXskY2FzZTpcInN0aWNrZXJOYW1lXCIsc3RpY2tlck5hbWU6ZS5pZE9uZW9mLnN0aWNrZXJOYW1lfSksXCJjdXN0b21TdGlja2VySWRcIj09PWUuaWRPbmVvZj8uJGNhc2UmJnZvaWQgMCE9PWUuaWRPbmVvZj8uY3VzdG9tU3RpY2tlcklkJiZudWxsIT09ZS5pZE9uZW9mPy5jdXN0b21TdGlja2VySWQmJih0LmlkT25lb2Y9eyRjYXNlOlwiY3VzdG9tU3RpY2tlcklkXCIsY3VzdG9tU3RpY2tlcklkOmUuaWRPbmVvZi5jdXN0b21TdGlja2VySWR9KSxcImVtb2ppVW5pY29kZVwiPT09ZS5pZE9uZW9mPy4kY2FzZSYmdm9pZCAwIT09ZS5pZE9uZW9mPy5lbW9qaVVuaWNvZGUmJm51bGwhPT1lLmlkT25lb2Y/LmVtb2ppVW5pY29kZSYmKHQuaWRPbmVvZj17JGNhc2U6XCJlbW9qaVVuaWNvZGVcIixlbW9qaVVuaWNvZGU6ZS5pZE9uZW9mLmVtb2ppVW5pY29kZX0pLFwiZW1vamlIZXhcIj09PWUuaWRPbmVvZj8uJGNhc2UmJnZvaWQgMCE9PWUuaWRPbmVvZj8uZW1vamlIZXgmJm51bGwhPT1lLmlkT25lb2Y/LmVtb2ppSGV4JiYodC5pZE9uZW9mPXskY2FzZTpcImVtb2ppSGV4XCIsZW1vamlIZXg6ZS5pZE9uZW9mLmVtb2ppSGV4fSksXCJnaXBoeUlkXCI9PT1lLmlkT25lb2Y/LiRjYXNlJiZ2b2lkIDAhPT1lLmlkT25lb2Y/LmdpcGh5SWQmJm51bGwhPT1lLmlkT25lb2Y/LmdpcGh5SWQmJih0LmlkT25lb2Y9eyRjYXNlOlwiZ2lwaHlJZFwiLGdpcGh5SWQ6ZS5pZE9uZW9mLmdpcGh5SWR9KSxcImNhbWVvSWRcIj09PWUuaWRPbmVvZj8uJGNhc2UmJnZvaWQgMCE9PWUuaWRPbmVvZj8uY2FtZW9JZCYmbnVsbCE9PWUuaWRPbmVvZj8uY2FtZW9JZCYmKHQuaWRPbmVvZj17JGNhc2U6XCJjYW1lb0lkXCIsY2FtZW9JZDplLmlkT25lb2YuY2FtZW9JZH0pLFwiY2FtZW9FeHRlcm5hbElkXCI9PT1lLmlkT25lb2Y/LiRjYXNlJiZ2b2lkIDAhPT1lLmlkT25lb2Y/LmNhbWVvRXh0ZXJuYWxJZCYmbnVsbCE9PWUuaWRPbmVvZj8uY2FtZW9FeHRlcm5hbElkJiYodC5pZE9uZW9mPXskY2FzZTpcImNhbWVvRXh0ZXJuYWxJZFwiLGNhbWVvRXh0ZXJuYWxJZDplLmlkT25lb2YuY2FtZW9FeHRlcm5hbElkfSksXCJzdGlja2VyUGFja05hbWVcIj09PWUuaWRPbmVvZj8uJGNhc2UmJnZvaWQgMCE9PWUuaWRPbmVvZj8uc3RpY2tlclBhY2tOYW1lJiZudWxsIT09ZS5pZE9uZW9mPy5zdGlja2VyUGFja05hbWUmJih0LmlkT25lb2Y9eyRjYXNlOlwic3RpY2tlclBhY2tOYW1lXCIsc3RpY2tlclBhY2tOYW1lOmUuaWRPbmVvZi5zdGlja2VyUGFja05hbWV9KSxcImluZm9TdGlja2VySWRcIj09PWUuaWRPbmVvZj8uJGNhc2UmJnZvaWQgMCE9PWUuaWRPbmVvZj8uaW5mb1N0aWNrZXJJZCYmbnVsbCE9PWUuaWRPbmVvZj8uaW5mb1N0aWNrZXJJZCYmKHQuaWRPbmVvZj17JGNhc2U6XCJpbmZvU3RpY2tlcklkXCIsaW5mb1N0aWNrZXJJZDplLmlkT25lb2YuaW5mb1N0aWNrZXJJZH0pLFwidGFyZ2V0ZWRJdGVtSWRcIj09PWUuaWRPbmVvZj8uJGNhc2UmJnZvaWQgMCE9PWUuaWRPbmVvZj8udGFyZ2V0ZWRJdGVtSWQmJm51bGwhPT1lLmlkT25lb2Y/LnRhcmdldGVkSXRlbUlkJiYodC5pZE9uZW9mPXskY2FzZTpcInRhcmdldGVkSXRlbUlkXCIsdGFyZ2V0ZWRJdGVtSWQ6ZS5pZE9uZW9mLnRhcmdldGVkSXRlbUlkfSksXCJjYXB0aW9uU3R5bGVJZFwiPT09ZS5pZE9uZW9mPy4kY2FzZSYmdm9pZCAwIT09ZS5pZE9uZW9mPy5jYXB0aW9uU3R5bGVJZCYmbnVsbCE9PWUuaWRPbmVvZj8uY2FwdGlvblN0eWxlSWQmJih0LmlkT25lb2Y9eyRjYXNlOlwiY2FwdGlvblN0eWxlSWRcIixjYXB0aW9uU3R5bGVJZDplLmlkT25lb2YuY2FwdGlvblN0eWxlSWR9KSxcIm11c2ljVHJhY2tJZFwiPT09ZS5pZE9uZW9mPy4kY2FzZSYmdm9pZCAwIT09ZS5pZE9uZW9mPy5tdXNpY1RyYWNrSWQmJm51bGwhPT1lLmlkT25lb2Y/Lm11c2ljVHJhY2tJZCYmKHQuaWRPbmVvZj17JGNhc2U6XCJtdXNpY1RyYWNrSWRcIixtdXNpY1RyYWNrSWQ6ZS5pZE9uZW9mLm11c2ljVHJhY2tJZH0pLFwiZW1vamlFc2NhcGVkSWRcIj09PWUuaWRPbmVvZj8uJGNhc2UmJnZvaWQgMCE9PWUuaWRPbmVvZj8uZW1vamlFc2NhcGVkSWQmJm51bGwhPT1lLmlkT25lb2Y/LmVtb2ppRXNjYXBlZElkJiYodC5pZE9uZW9mPXskY2FzZTpcImVtb2ppRXNjYXBlZElkXCIsZW1vamlFc2NhcGVkSWQ6ZS5pZE9uZW9mLmVtb2ppRXNjYXBlZElkfSksXCJjaGF0Q2FtZW9FeHRlcm5hbElkXCI9PT1lLmlkT25lb2Y/LiRjYXNlJiZ2b2lkIDAhPT1lLmlkT25lb2Y/LmNoYXRDYW1lb0V4dGVybmFsSWQmJm51bGwhPT1lLmlkT25lb2Y/LmNoYXRDYW1lb0V4dGVybmFsSWQmJih0LmlkT25lb2Y9eyRjYXNlOlwiY2hhdENhbWVvRXh0ZXJuYWxJZFwiLGNoYXRDYW1lb0V4dGVybmFsSWQ6ZS5pZE9uZW9mLmNoYXRDYW1lb0V4dGVybmFsSWR9KSxcImNoYXRDYW1lb0lkXCI9PT1lLmlkT25lb2Y/LiRjYXNlJiZ2b2lkIDAhPT1lLmlkT25lb2Y/LmNoYXRDYW1lb0lkJiZudWxsIT09ZS5pZE9uZW9mPy5jaGF0Q2FtZW9JZCYmKHQuaWRPbmVvZj17JGNhc2U6XCJjaGF0Q2FtZW9JZFwiLGNoYXRDYW1lb0lkOmUuaWRPbmVvZi5jaGF0Q2FtZW9JZH0pLFwiZ2Z5Y2F0SWRcIj09PWUuaWRPbmVvZj8uJGNhc2UmJnZvaWQgMCE9PWUuaWRPbmVvZj8uZ2Z5Y2F0SWQmJm51bGwhPT1lLmlkT25lb2Y/LmdmeWNhdElkJiYodC5pZE9uZW9mPXskY2FzZTpcImdmeWNhdElkXCIsZ2Z5Y2F0SWQ6ZS5pZE9uZW9mLmdmeWNhdElkfSksXCJzZXJ2ZXJDYW1lb0lkXCI9PT1lLmlkT25lb2Y/LiRjYXNlJiZ2b2lkIDAhPT1lLmlkT25lb2Y/LnNlcnZlckNhbWVvSWQmJm51bGwhPT1lLmlkT25lb2Y/LnNlcnZlckNhbWVvSWQmJih0LmlkT25lb2Y9eyRjYXNlOlwic2VydmVyQ2FtZW9JZFwiLHNlcnZlckNhbWVvSWQ6ZS5pZE9uZW9mLnNlcnZlckNhbWVvSWR9KSxcImNoYXRSZWFjdGlvbklkXCI9PT1lLmlkT25lb2Y/LiRjYXNlJiZ2b2lkIDAhPT1lLmlkT25lb2Y/LmNoYXRSZWFjdGlvbklkJiZudWxsIT09ZS5pZE9uZW9mPy5jaGF0UmVhY3Rpb25JZCYmKHQuaWRPbmVvZj17JGNhc2U6XCJjaGF0UmVhY3Rpb25JZFwiLGNoYXRSZWFjdGlvbklkOmUuaWRPbmVvZi5jaGF0UmVhY3Rpb25JZH0pLFwiZmlsdGVySWRcIj09PWUuaWRPbmVvZj8uJGNhc2UmJnZvaWQgMCE9PWUuaWRPbmVvZj8uZmlsdGVySWQmJm51bGwhPT1lLmlkT25lb2Y/LmZpbHRlcklkJiYodC5pZE9uZW9mPXskY2FzZTpcImZpbHRlcklkXCIsZmlsdGVySWQ6ZS5pZE9uZW9mLmZpbHRlcklkfSksXCJwcm94eUlkXCI9PT1lLmlkT25lb2Y/LiRjYXNlJiZ2b2lkIDAhPT1lLmlkT25lb2Y/LnByb3h5SWQmJm51bGwhPT1lLmlkT25lb2Y/LnByb3h5SWQmJih0LmlkT25lb2Y9eyRjYXNlOlwicHJveHlJZFwiLHByb3h5SWQ6ZS5pZE9uZW9mLnByb3h5SWR9KSxcImNhbWVyYVJvbGxTdGlja2VySWRcIj09PWUuaWRPbmVvZj8uJGNhc2UmJnZvaWQgMCE9PWUuaWRPbmVvZj8uY2FtZXJhUm9sbFN0aWNrZXJJZCYmbnVsbCE9PWUuaWRPbmVvZj8uY2FtZXJhUm9sbFN0aWNrZXJJZCYmKHQuaWRPbmVvZj17JGNhc2U6XCJjYW1lcmFSb2xsU3RpY2tlcklkXCIsY2FtZXJhUm9sbFN0aWNrZXJJZDplLmlkT25lb2YuY2FtZXJhUm9sbFN0aWNrZXJJZH0pLFwidGVtcGxhdGVJZFwiPT09ZS5pZE9uZW9mPy4kY2FzZSYmdm9pZCAwIT09ZS5pZE9uZW9mPy50ZW1wbGF0ZUlkJiZudWxsIT09ZS5pZE9uZW9mPy50ZW1wbGF0ZUlkJiYodC5pZE9uZW9mPXskY2FzZTpcInRlbXBsYXRlSWRcIix0ZW1wbGF0ZUlkOmUuaWRPbmVvZi50ZW1wbGF0ZUlkfSksXCJsZW5zU25hcGNoYXRJZFwiPT09ZS5pZE9uZW9mPy4kY2FzZSYmdm9pZCAwIT09ZS5pZE9uZW9mPy5sZW5zU25hcGNoYXRJZCYmbnVsbCE9PWUuaWRPbmVvZj8ubGVuc1NuYXBjaGF0SWQmJih0LmlkT25lb2Y9eyRjYXNlOlwibGVuc1NuYXBjaGF0SWRcIixsZW5zU25hcGNoYXRJZDplLmlkT25lb2YubGVuc1NuYXBjaGF0SWR9KSx0fX0scy5kZWZhdWx0LnV0aWwuTG9uZyE9PWkuZGVmYXVsdCYmKHMuZGVmYXVsdC51dGlsLkxvbmc9aS5kZWZhdWx0LHMuZGVmYXVsdC5jb25maWd1cmUoKSl9LDg4OTEyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkJydXNoPXZvaWQgMDtjb25zdCBpPW4oNzg5ODcpLG89bigzNDQ0OCksYT1yKG4oNjIxMDApKTt0LkJydXNoPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJzdHlsZVwiPT09ZS5icnVzaD8uJGNhc2UmJmkuU3R5bGVCcnVzaC5lbmNvZGUoZS5icnVzaC5zdHlsZSx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSxcImNoYXJcIj09PWUuYnJ1c2g/LiRjYXNlJiZvLkNoYXJCcnVzaC5lbmNvZGUoZS5icnVzaC5jaGFyLHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLndpZHRoJiZ0LnVpbnQzMigyNCkudWludDMyKGUud2lkdGgpLDAhPT1lLmJydXNoSW5kZXgmJnQudWludDMyKDMyKS51aW50MzIoZS5icnVzaEluZGV4KSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IHM9e2JydXNoOnZvaWQgMCx3aWR0aDowLGJydXNoSW5kZXg6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOnMuYnJ1c2g9eyRjYXNlOlwic3R5bGVcIixzdHlsZTppLlN0eWxlQnJ1c2guZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMjpzLmJydXNoPXskY2FzZTpcImNoYXJcIixjaGFyOm8uQ2hhckJydXNoLmRlY29kZShuLG4udWludDMyKCkpfTticmVhaztjYXNlIDM6cy53aWR0aD1uLnVpbnQzMigpO2JyZWFrO2Nhc2UgNDpzLmJydXNoSW5kZXg9bi51aW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIHN9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2JydXNoOnZvaWQgMCx3aWR0aDowLGJydXNoSW5kZXg6MH07cmV0dXJuXCJzdHlsZVwiPT09ZS5icnVzaD8uJGNhc2UmJnZvaWQgMCE9PWUuYnJ1c2g/LnN0eWxlJiZudWxsIT09ZS5icnVzaD8uc3R5bGUmJih0LmJydXNoPXskY2FzZTpcInN0eWxlXCIsc3R5bGU6aS5TdHlsZUJydXNoLmZyb21QYXJ0aWFsKGUuYnJ1c2guc3R5bGUpfSksXCJjaGFyXCI9PT1lLmJydXNoPy4kY2FzZSYmdm9pZCAwIT09ZS5icnVzaD8uY2hhciYmbnVsbCE9PWUuYnJ1c2g/LmNoYXImJih0LmJydXNoPXskY2FzZTpcImNoYXJcIixjaGFyOm8uQ2hhckJydXNoLmZyb21QYXJ0aWFsKGUuYnJ1c2guY2hhcil9KSx0LndpZHRoPWUud2lkdGg/PzAsdC5icnVzaEluZGV4PWUuYnJ1c2hJbmRleD8/MCx0fX19LDM0NDQ4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNoYXJCcnVzaD12b2lkIDA7Y29uc3QgaT1yKG4oNjIxMDApKTt0LkNoYXJCcnVzaD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmNoYXImJnQudWludDMyKDEwKS5zdHJpbmcoZS5jaGFyKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e2NoYXI6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP28uY2hhcj1uLnN0cmluZygpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17Y2hhcjpcIlwifTtyZXR1cm4gdC5jaGFyPWUuY2hhcj8/XCJcIix0fX19LDg5NDExOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkRyYXdpbmdzPXZvaWQgMDtjb25zdCBpPW4oODg5MTIpLG89cihuKDYyMTAwKSk7dC5EcmF3aW5ncz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO2Zvcihjb25zdCBuIG9mIGUuYnJ1c2hlcylpLkJydXNoLmVuY29kZShuLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiB0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGE9e2JydXNoZXM6W119O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9hLmJydXNoZXMucHVzaChpLkJydXNoLmRlY29kZShuLG4udWludDMyKCkpKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2JydXNoZXM6W119O3JldHVybiB0LmJydXNoZXM9ZS5icnVzaGVzPy5tYXAoKGU9PmkuQnJ1c2guZnJvbVBhcnRpYWwoZSkpKXx8W10sdH19fSw3ODk4NzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5TdHlsZUJydXNoPXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO3QuU3R5bGVCcnVzaD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5jb2xvciYmdC51aW50MzIoOCkudWludDMyKGUuY29sb3IpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17Y29sb3I6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP28uY29sb3I9bi51aW50MzIoKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2NvbG9yOjB9O3JldHVybiB0LmNvbG9yPWUuY29sb3I/PzAsdH19fSw4NDM4MTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5BdHRhY2htZW50U3RpY2tlck1ldGFkYXRhPXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO3QuQXR0YWNobWVudFN0aWNrZXJNZXRhZGF0YT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmF0dGFjaG1lbnRVcmwmJnQudWludDMyKDEwKS5zdHJpbmcoZS5hdHRhY2htZW50VXJsKSxcIlwiIT09ZS5zaG9ydGVuZWRVcmwmJnQudWludDMyKDE4KS5zdHJpbmcoZS5zaG9ydGVuZWRVcmwpLFwiXCIhPT1lLnRpdGxlJiZ0LnVpbnQzMigyNikuc3RyaW5nKGUudGl0bGUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17YXR0YWNobWVudFVybDpcIlwiLHNob3J0ZW5lZFVybDpcIlwiLHRpdGxlOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLmF0dGFjaG1lbnRVcmw9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6by5zaG9ydGVuZWRVcmw9bi5zdHJpbmcoKTticmVhaztjYXNlIDM6by50aXRsZT1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17YXR0YWNobWVudFVybDpcIlwiLHNob3J0ZW5lZFVybDpcIlwiLHRpdGxlOlwiXCJ9O3JldHVybiB0LmF0dGFjaG1lbnRVcmw9ZS5hdHRhY2htZW50VXJsPz9cIlwiLHQuc2hvcnRlbmVkVXJsPWUuc2hvcnRlbmVkVXJsPz9cIlwiLHQudGl0bGU9ZS50aXRsZT8/XCJcIix0fX19LDE1ODAxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkF1dG9DYXB0aW9uc01ldGFkYXRhPXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO3QuQXV0b0NhcHRpb25zTWV0YWRhdGE9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgbiBvZiBlLnBocmFzZXMpdC51aW50MzIoMTApLnN0cmluZyhuKTt0LnVpbnQzMigxOCkuZm9yaygpO2Zvcihjb25zdCBuIG9mIGUudGltZXN0YW1wcyl0LnVpbnQzMihuKTtyZXR1cm4gdC5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e3BocmFzZXM6W10sdGltZXN0YW1wczpbXX07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8ucGhyYXNlcy5wdXNoKG4uc3RyaW5nKCkpO2JyZWFrO2Nhc2UgMjppZigyPT0oNyZlKSl7Y29uc3QgZT1uLnVpbnQzMigpK24ucG9zO2Zvcig7bi5wb3M8ZTspby50aW1lc3RhbXBzLnB1c2gobi51aW50MzIoKSl9ZWxzZSBvLnRpbWVzdGFtcHMucHVzaChuLnVpbnQzMigpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3BocmFzZXM6W10sdGltZXN0YW1wczpbXX07cmV0dXJuIHQucGhyYXNlcz1lLnBocmFzZXM/Lm1hcCgoZT0+ZSkpfHxbXSx0LnRpbWVzdGFtcHM9ZS50aW1lc3RhbXBzPy5tYXAoKGU9PmUpKXx8W10sdH19fSwzNjkzMDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5CaXRtb2ppU3RpY2tlck1ldGFkYXRhPXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO3QuQml0bW9qaVN0aWNrZXJNZXRhZGF0YT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmF2YXRhcklkJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUuYXZhdGFySWQpLFwiXCIhPT1lLmZyaWVuZEF2YXRhcklkJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuZnJpZW5kQXZhdGFySWQpLFwiXCIhPT1lLmN1c3RvbVRleHQmJnQudWludDMyKDI2KS5zdHJpbmcoZS5jdXN0b21UZXh0KSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e2F2YXRhcklkOlwiXCIsZnJpZW5kQXZhdGFySWQ6XCJcIixjdXN0b21UZXh0OlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLmF2YXRhcklkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOm8uZnJpZW5kQXZhdGFySWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDM6by5jdXN0b21UZXh0PW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXthdmF0YXJJZDpcIlwiLGZyaWVuZEF2YXRhcklkOlwiXCIsY3VzdG9tVGV4dDpcIlwifTtyZXR1cm4gdC5hdmF0YXJJZD1lLmF2YXRhcklkPz9cIlwiLHQuZnJpZW5kQXZhdGFySWQ9ZS5mcmllbmRBdmF0YXJJZD8/XCJcIix0LmN1c3RvbVRleHQ9ZS5jdXN0b21UZXh0Pz9cIlwiLHR9fX0sOTg0ODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DYW1lb1N0aWNrZXJNZXRhZGF0YT12b2lkIDA7Y29uc3QgaT1yKG4oNjIxMDApKTt0LkNhbWVvU3RpY2tlck1ldGFkYXRhPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUuY3VzdG9tVGV4dCYmdC51aW50MzIoMTApLnN0cmluZyhlLmN1c3RvbVRleHQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17Y3VzdG9tVGV4dDpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/by5jdXN0b21UZXh0PW4uc3RyaW5nKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtjdXN0b21UZXh0OlwiXCJ9O3JldHVybiB0LmN1c3RvbVRleHQ9ZS5jdXN0b21UZXh0Pz9cIlwiLHR9fX0sMzY0MDU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2FtZXJhUm9sbFN0aWNrZXJNZXRhZGF0YT10LkNhbWVyYVJvbGxTdGlja2VyTWV0YWRhdGFfU2hhcGU9dm9pZCAwO2NvbnN0IGk9cihuKDYyMTAwKSk7dmFyIG87KG89dC5DYW1lcmFSb2xsU3RpY2tlck1ldGFkYXRhX1NoYXBlfHwodC5DYW1lcmFSb2xsU3RpY2tlck1ldGFkYXRhX1NoYXBlPXt9KSlbby5TSEFQRV9VTlNQRUNJRklFRD0wXT1cIlNIQVBFX1VOU1BFQ0lGSUVEXCIsb1tvLlJPVU5ERURfUkVDVD0xXT1cIlJPVU5ERURfUkVDVFwiLG9bby5DSVJDTEU9Ml09XCJDSVJDTEVcIixvW28uU1FVQVJFPTNdPVwiU1FVQVJFXCIsb1tvLk9SSUdJTkFMX0FTUEVDVF9SQVRJTz00XT1cIk9SSUdJTkFMX0FTUEVDVF9SQVRJT1wiLG9bby5GT1JDRURfUE9SVFJBSVQ9NV09XCJGT1JDRURfUE9SVFJBSVRcIixvW28uRk9SQ0VEX0xBTkRTQ0FQRT02XT1cIkZPUkNFRF9MQU5EU0NBUEVcIixvW28uVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLHQuQ2FtZXJhUm9sbFN0aWNrZXJNZXRhZGF0YT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5zaGFwZSYmdC51aW50MzIoOCkuaW50MzIoZS5zaGFwZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXtzaGFwZTowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/by5zaGFwZT1uLmludDMyKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtzaGFwZTowfTtyZXR1cm4gdC5zaGFwZT1lLnNoYXBlPz8wLHR9fX0sNDM2ODk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2FwdGlvblN0eWxlTWV0YWRhdGE9dm9pZCAwO2NvbnN0IGk9big1MTU5OCksbz1yKG4oNjIxMDApKTt0LkNhcHRpb25TdHlsZU1ldGFkYXRhPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7XCJcIiE9PWUudGV4dCYmdC51aW50MzIoMTApLnN0cmluZyhlLnRleHQpLDAhPT1lLmVkaXRpbmdGb250U2l6ZSYmdC51aW50MzIoMTYpLmludDMyKGUuZWRpdGluZ0ZvbnRTaXplKTtmb3IoY29uc3QgbiBvZiBlLnBsYWNlSWRzKWkuVVVJRC5lbmNvZGUobix0LnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBhPXt0ZXh0OlwiXCIsZWRpdGluZ0ZvbnRTaXplOjAscGxhY2VJZHM6W119O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLnRleHQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6YS5lZGl0aW5nRm9udFNpemU9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMzphLnBsYWNlSWRzLnB1c2goaS5VVUlELmRlY29kZShuLG4udWludDMyKCkpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3RleHQ6XCJcIixlZGl0aW5nRm9udFNpemU6MCxwbGFjZUlkczpbXX07cmV0dXJuIHQudGV4dD1lLnRleHQ/P1wiXCIsdC5lZGl0aW5nRm9udFNpemU9ZS5lZGl0aW5nRm9udFNpemU/PzAsdC5wbGFjZUlkcz1lLnBsYWNlSWRzPy5tYXAoKGU9PmkuVVVJRC5mcm9tUGFydGlhbChlKSkpfHxbXSx0fX19LDYxNzY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ1RJdGVtSW5zdGFuY2VfTWV0YWRhdGE9dC5DVEl0ZW1JbnN0YW5jZT12b2lkIDA7Y29uc3QgaT1uKDEzNzUpLG89bigzNjkzMCksYT1uKDQzNjg5KSxzPW4oOTg3NjUpLGM9bigyODg4MiksbD1uKDQ5NDkxKSx1PW4oMTU4MDEpLGQ9big5ODQ4KSxmPW4oODQzODEpLHA9big1NjE4MCksbT1uKDM2NDA1KSxoPW4oMjU0MzApLHY9big0NDUzNyksZz1yKG4oNjIxMDApKTtmdW5jdGlvbiB5KCl7cmV0dXJue2N0cElkOm5ldyBVaW50OEFycmF5LGl0ZW06dm9pZCAwLG1ldGFkYXRhOnZvaWQgMH19dC5DVEl0ZW1JbnN0YW5jZT17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpnLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5jdHBJZC5sZW5ndGgmJm4udWludDMyKDEwKS5ieXRlcyhlLmN0cElkKSx2b2lkIDAhPT1lLml0ZW0mJmkuQ1RJdGVtLmVuY29kZShlLml0ZW0sbi51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5tZXRhZGF0YSYmdC5DVEl0ZW1JbnN0YW5jZV9NZXRhZGF0YS5lbmNvZGUoZS5tZXRhZGF0YSxuLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBnLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGcuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IG89dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGE9eSgpO2Zvcig7ci5wb3M8bzspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLmN0cElkPXIuYnl0ZXMoKTticmVhaztjYXNlIDI6YS5pdGVtPWkuQ1RJdGVtLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMzphLm1ldGFkYXRhPXQuQ1RJdGVtSW5zdGFuY2VfTWV0YWRhdGEuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXkoKTtyZXR1cm4gbi5jdHBJZD1lLmN0cElkPz9uZXcgVWludDhBcnJheSxuLml0ZW09dm9pZCAwIT09ZS5pdGVtJiZudWxsIT09ZS5pdGVtP2kuQ1RJdGVtLmZyb21QYXJ0aWFsKGUuaXRlbSk6dm9pZCAwLG4ubWV0YWRhdGE9dm9pZCAwIT09ZS5tZXRhZGF0YSYmbnVsbCE9PWUubWV0YWRhdGE/dC5DVEl0ZW1JbnN0YW5jZV9NZXRhZGF0YS5mcm9tUGFydGlhbChlLm1ldGFkYXRhKTp2b2lkIDAsbn19LHQuQ1RJdGVtSW5zdGFuY2VfTWV0YWRhdGE9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Zy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cImJpdG1vamlTdGlja2VyTWV0YWRhdGFcIj09PWUubWV0YWRhdGFUeXBlPy4kY2FzZSYmby5CaXRtb2ppU3RpY2tlck1ldGFkYXRhLmVuY29kZShlLm1ldGFkYXRhVHlwZS5iaXRtb2ppU3RpY2tlck1ldGFkYXRhLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLFwiY2FwdGlvblN0eWxlTWV0YWRhdGFcIj09PWUubWV0YWRhdGFUeXBlPy4kY2FzZSYmYS5DYXB0aW9uU3R5bGVNZXRhZGF0YS5lbmNvZGUoZS5tZXRhZGF0YVR5cGUuY2FwdGlvblN0eWxlTWV0YWRhdGEsdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksXCJpbmZvU3RpY2tlck1ldGFkYXRhXCI9PT1lLm1ldGFkYXRhVHlwZT8uJGNhc2UmJnMuSW5mb1N0aWNrZXJNZXRhZGF0YS5lbmNvZGUoZS5tZXRhZGF0YVR5cGUuaW5mb1N0aWNrZXJNZXRhZGF0YSx0LnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSxcImZpbHRlck1ldGFkYXRhXCI9PT1lLm1ldGFkYXRhVHlwZT8uJGNhc2UmJmMuRmlsdGVyTWV0YWRhdGEuZW5jb2RlKGUubWV0YWRhdGFUeXBlLmZpbHRlck1ldGFkYXRhLHQudWludDMyKDU4KS5mb3JrKCkpLmxkZWxpbSgpLFwiZHJhd2luZ01ldGFkYXRhXCI9PT1lLm1ldGFkYXRhVHlwZT8uJGNhc2UmJmwuRHJhd2luZ01ldGFkYXRhLmVuY29kZShlLm1ldGFkYXRhVHlwZS5kcmF3aW5nTWV0YWRhdGEsdC51aW50MzIoNjYpLmZvcmsoKSkubGRlbGltKCksXCJhdXRvQ2FwdGlvbnNNZXRhZGF0YVwiPT09ZS5tZXRhZGF0YVR5cGU/LiRjYXNlJiZ1LkF1dG9DYXB0aW9uc01ldGFkYXRhLmVuY29kZShlLm1ldGFkYXRhVHlwZS5hdXRvQ2FwdGlvbnNNZXRhZGF0YSx0LnVpbnQzMig3NCkuZm9yaygpKS5sZGVsaW0oKSxcImNhbWVvU3RpY2tlck1ldGFkYXRhXCI9PT1lLm1ldGFkYXRhVHlwZT8uJGNhc2UmJmQuQ2FtZW9TdGlja2VyTWV0YWRhdGEuZW5jb2RlKGUubWV0YWRhdGFUeXBlLmNhbWVvU3RpY2tlck1ldGFkYXRhLHQudWludDMyKDgyKS5mb3JrKCkpLmxkZWxpbSgpLFwiYXR0YWNobWVudFN0aWNrZXJNZXRhZGF0YVwiPT09ZS5tZXRhZGF0YVR5cGU/LiRjYXNlJiZmLkF0dGFjaG1lbnRTdGlja2VyTWV0YWRhdGEuZW5jb2RlKGUubWV0YWRhdGFUeXBlLmF0dGFjaG1lbnRTdGlja2VyTWV0YWRhdGEsdC51aW50MzIoOTApLmZvcmsoKSkubGRlbGltKCksXCJlbW9qaVN0aWNrZXJNZXRhZGF0YVwiPT09ZS5tZXRhZGF0YVR5cGU/LiRjYXNlJiZwLkVtb2ppU3RpY2tlck1ldGFkYXRhLmVuY29kZShlLm1ldGFkYXRhVHlwZS5lbW9qaVN0aWNrZXJNZXRhZGF0YSx0LnVpbnQzMig5OCkuZm9yaygpKS5sZGVsaW0oKSxcImNhbWVyYVJvbGxTdGlja2VyTWV0YWRhdGFcIj09PWUubWV0YWRhdGFUeXBlPy4kY2FzZSYmbS5DYW1lcmFSb2xsU3RpY2tlck1ldGFkYXRhLmVuY29kZShlLm1ldGFkYXRhVHlwZS5jYW1lcmFSb2xsU3RpY2tlck1ldGFkYXRhLHQudWludDMyKDEwNikuZm9yaygpKS5sZGVsaW0oKSxcImxlbnNUb29sTWV0YWRhdGFcIj09PWUubWV0YWRhdGFUeXBlPy4kY2FzZSYmaC5MZW5zVG9vbE1ldGFkYXRhLmVuY29kZShlLm1ldGFkYXRhVHlwZS5sZW5zVG9vbE1ldGFkYXRhLHQudWludDMyKDExNCkuZm9yaygpKS5sZGVsaW0oKSxcImxlZ2FjeUVkaXRzQmxvYlwiPT09ZS5tZXRhZGF0YVR5cGU/LiRjYXNlJiZ2Lk1lZGlhTWV0YWRhdGEuZW5jb2RlKGUubWV0YWRhdGFUeXBlLmxlZ2FjeUVkaXRzQmxvYix0LnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKSxcImxlZ2FjeUVkaXRzSnNvblwiPT09ZS5tZXRhZGF0YVR5cGU/LiRjYXNlJiZ0LnVpbnQzMig1MCkuYnl0ZXMoZS5tZXRhZGF0YVR5cGUubGVnYWN5RWRpdHNKc29uKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBnLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGcuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e21ldGFkYXRhVHlwZTp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLm1ldGFkYXRhVHlwZT17JGNhc2U6XCJiaXRtb2ppU3RpY2tlck1ldGFkYXRhXCIsYml0bW9qaVN0aWNrZXJNZXRhZGF0YTpvLkJpdG1vamlTdGlja2VyTWV0YWRhdGEuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMjppLm1ldGFkYXRhVHlwZT17JGNhc2U6XCJjYXB0aW9uU3R5bGVNZXRhZGF0YVwiLGNhcHRpb25TdHlsZU1ldGFkYXRhOmEuQ2FwdGlvblN0eWxlTWV0YWRhdGEuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMzppLm1ldGFkYXRhVHlwZT17JGNhc2U6XCJpbmZvU3RpY2tlck1ldGFkYXRhXCIsaW5mb1N0aWNrZXJNZXRhZGF0YTpzLkluZm9TdGlja2VyTWV0YWRhdGEuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgNzppLm1ldGFkYXRhVHlwZT17JGNhc2U6XCJmaWx0ZXJNZXRhZGF0YVwiLGZpbHRlck1ldGFkYXRhOmMuRmlsdGVyTWV0YWRhdGEuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgODppLm1ldGFkYXRhVHlwZT17JGNhc2U6XCJkcmF3aW5nTWV0YWRhdGFcIixkcmF3aW5nTWV0YWRhdGE6bC5EcmF3aW5nTWV0YWRhdGEuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgOTppLm1ldGFkYXRhVHlwZT17JGNhc2U6XCJhdXRvQ2FwdGlvbnNNZXRhZGF0YVwiLGF1dG9DYXB0aW9uc01ldGFkYXRhOnUuQXV0b0NhcHRpb25zTWV0YWRhdGEuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMTA6aS5tZXRhZGF0YVR5cGU9eyRjYXNlOlwiY2FtZW9TdGlja2VyTWV0YWRhdGFcIixjYW1lb1N0aWNrZXJNZXRhZGF0YTpkLkNhbWVvU3RpY2tlck1ldGFkYXRhLmRlY29kZShuLG4udWludDMyKCkpfTticmVhaztjYXNlIDExOmkubWV0YWRhdGFUeXBlPXskY2FzZTpcImF0dGFjaG1lbnRTdGlja2VyTWV0YWRhdGFcIixhdHRhY2htZW50U3RpY2tlck1ldGFkYXRhOmYuQXR0YWNobWVudFN0aWNrZXJNZXRhZGF0YS5kZWNvZGUobixuLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAxMjppLm1ldGFkYXRhVHlwZT17JGNhc2U6XCJlbW9qaVN0aWNrZXJNZXRhZGF0YVwiLGVtb2ppU3RpY2tlck1ldGFkYXRhOnAuRW1vamlTdGlja2VyTWV0YWRhdGEuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMTM6aS5tZXRhZGF0YVR5cGU9eyRjYXNlOlwiY2FtZXJhUm9sbFN0aWNrZXJNZXRhZGF0YVwiLGNhbWVyYVJvbGxTdGlja2VyTWV0YWRhdGE6bS5DYW1lcmFSb2xsU3RpY2tlck1ldGFkYXRhLmRlY29kZShuLG4udWludDMyKCkpfTticmVhaztjYXNlIDE0OmkubWV0YWRhdGFUeXBlPXskY2FzZTpcImxlbnNUb29sTWV0YWRhdGFcIixsZW5zVG9vbE1ldGFkYXRhOmguTGVuc1Rvb2xNZXRhZGF0YS5kZWNvZGUobixuLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA1OmkubWV0YWRhdGFUeXBlPXskY2FzZTpcImxlZ2FjeUVkaXRzQmxvYlwiLGxlZ2FjeUVkaXRzQmxvYjp2Lk1lZGlhTWV0YWRhdGEuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgNjppLm1ldGFkYXRhVHlwZT17JGNhc2U6XCJsZWdhY3lFZGl0c0pzb25cIixsZWdhY3lFZGl0c0pzb246bi5ieXRlcygpfTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e21ldGFkYXRhVHlwZTp2b2lkIDB9O3JldHVyblwiYml0bW9qaVN0aWNrZXJNZXRhZGF0YVwiPT09ZS5tZXRhZGF0YVR5cGU/LiRjYXNlJiZ2b2lkIDAhPT1lLm1ldGFkYXRhVHlwZT8uYml0bW9qaVN0aWNrZXJNZXRhZGF0YSYmbnVsbCE9PWUubWV0YWRhdGFUeXBlPy5iaXRtb2ppU3RpY2tlck1ldGFkYXRhJiYodC5tZXRhZGF0YVR5cGU9eyRjYXNlOlwiYml0bW9qaVN0aWNrZXJNZXRhZGF0YVwiLGJpdG1vamlTdGlja2VyTWV0YWRhdGE6by5CaXRtb2ppU3RpY2tlck1ldGFkYXRhLmZyb21QYXJ0aWFsKGUubWV0YWRhdGFUeXBlLmJpdG1vamlTdGlja2VyTWV0YWRhdGEpfSksXCJjYXB0aW9uU3R5bGVNZXRhZGF0YVwiPT09ZS5tZXRhZGF0YVR5cGU/LiRjYXNlJiZ2b2lkIDAhPT1lLm1ldGFkYXRhVHlwZT8uY2FwdGlvblN0eWxlTWV0YWRhdGEmJm51bGwhPT1lLm1ldGFkYXRhVHlwZT8uY2FwdGlvblN0eWxlTWV0YWRhdGEmJih0Lm1ldGFkYXRhVHlwZT17JGNhc2U6XCJjYXB0aW9uU3R5bGVNZXRhZGF0YVwiLGNhcHRpb25TdHlsZU1ldGFkYXRhOmEuQ2FwdGlvblN0eWxlTWV0YWRhdGEuZnJvbVBhcnRpYWwoZS5tZXRhZGF0YVR5cGUuY2FwdGlvblN0eWxlTWV0YWRhdGEpfSksXCJpbmZvU3RpY2tlck1ldGFkYXRhXCI9PT1lLm1ldGFkYXRhVHlwZT8uJGNhc2UmJnZvaWQgMCE9PWUubWV0YWRhdGFUeXBlPy5pbmZvU3RpY2tlck1ldGFkYXRhJiZudWxsIT09ZS5tZXRhZGF0YVR5cGU/LmluZm9TdGlja2VyTWV0YWRhdGEmJih0Lm1ldGFkYXRhVHlwZT17JGNhc2U6XCJpbmZvU3RpY2tlck1ldGFkYXRhXCIsaW5mb1N0aWNrZXJNZXRhZGF0YTpzLkluZm9TdGlja2VyTWV0YWRhdGEuZnJvbVBhcnRpYWwoZS5tZXRhZGF0YVR5cGUuaW5mb1N0aWNrZXJNZXRhZGF0YSl9KSxcImZpbHRlck1ldGFkYXRhXCI9PT1lLm1ldGFkYXRhVHlwZT8uJGNhc2UmJnZvaWQgMCE9PWUubWV0YWRhdGFUeXBlPy5maWx0ZXJNZXRhZGF0YSYmbnVsbCE9PWUubWV0YWRhdGFUeXBlPy5maWx0ZXJNZXRhZGF0YSYmKHQubWV0YWRhdGFUeXBlPXskY2FzZTpcImZpbHRlck1ldGFkYXRhXCIsZmlsdGVyTWV0YWRhdGE6Yy5GaWx0ZXJNZXRhZGF0YS5mcm9tUGFydGlhbChlLm1ldGFkYXRhVHlwZS5maWx0ZXJNZXRhZGF0YSl9KSxcImRyYXdpbmdNZXRhZGF0YVwiPT09ZS5tZXRhZGF0YVR5cGU/LiRjYXNlJiZ2b2lkIDAhPT1lLm1ldGFkYXRhVHlwZT8uZHJhd2luZ01ldGFkYXRhJiZudWxsIT09ZS5tZXRhZGF0YVR5cGU/LmRyYXdpbmdNZXRhZGF0YSYmKHQubWV0YWRhdGFUeXBlPXskY2FzZTpcImRyYXdpbmdNZXRhZGF0YVwiLGRyYXdpbmdNZXRhZGF0YTpsLkRyYXdpbmdNZXRhZGF0YS5mcm9tUGFydGlhbChlLm1ldGFkYXRhVHlwZS5kcmF3aW5nTWV0YWRhdGEpfSksXCJhdXRvQ2FwdGlvbnNNZXRhZGF0YVwiPT09ZS5tZXRhZGF0YVR5cGU/LiRjYXNlJiZ2b2lkIDAhPT1lLm1ldGFkYXRhVHlwZT8uYXV0b0NhcHRpb25zTWV0YWRhdGEmJm51bGwhPT1lLm1ldGFkYXRhVHlwZT8uYXV0b0NhcHRpb25zTWV0YWRhdGEmJih0Lm1ldGFkYXRhVHlwZT17JGNhc2U6XCJhdXRvQ2FwdGlvbnNNZXRhZGF0YVwiLGF1dG9DYXB0aW9uc01ldGFkYXRhOnUuQXV0b0NhcHRpb25zTWV0YWRhdGEuZnJvbVBhcnRpYWwoZS5tZXRhZGF0YVR5cGUuYXV0b0NhcHRpb25zTWV0YWRhdGEpfSksXCJjYW1lb1N0aWNrZXJNZXRhZGF0YVwiPT09ZS5tZXRhZGF0YVR5cGU/LiRjYXNlJiZ2b2lkIDAhPT1lLm1ldGFkYXRhVHlwZT8uY2FtZW9TdGlja2VyTWV0YWRhdGEmJm51bGwhPT1lLm1ldGFkYXRhVHlwZT8uY2FtZW9TdGlja2VyTWV0YWRhdGEmJih0Lm1ldGFkYXRhVHlwZT17JGNhc2U6XCJjYW1lb1N0aWNrZXJNZXRhZGF0YVwiLGNhbWVvU3RpY2tlck1ldGFkYXRhOmQuQ2FtZW9TdGlja2VyTWV0YWRhdGEuZnJvbVBhcnRpYWwoZS5tZXRhZGF0YVR5cGUuY2FtZW9TdGlja2VyTWV0YWRhdGEpfSksXCJhdHRhY2htZW50U3RpY2tlck1ldGFkYXRhXCI9PT1lLm1ldGFkYXRhVHlwZT8uJGNhc2UmJnZvaWQgMCE9PWUubWV0YWRhdGFUeXBlPy5hdHRhY2htZW50U3RpY2tlck1ldGFkYXRhJiZudWxsIT09ZS5tZXRhZGF0YVR5cGU/LmF0dGFjaG1lbnRTdGlja2VyTWV0YWRhdGEmJih0Lm1ldGFkYXRhVHlwZT17JGNhc2U6XCJhdHRhY2htZW50U3RpY2tlck1ldGFkYXRhXCIsYXR0YWNobWVudFN0aWNrZXJNZXRhZGF0YTpmLkF0dGFjaG1lbnRTdGlja2VyTWV0YWRhdGEuZnJvbVBhcnRpYWwoZS5tZXRhZGF0YVR5cGUuYXR0YWNobWVudFN0aWNrZXJNZXRhZGF0YSl9KSxcImVtb2ppU3RpY2tlck1ldGFkYXRhXCI9PT1lLm1ldGFkYXRhVHlwZT8uJGNhc2UmJnZvaWQgMCE9PWUubWV0YWRhdGFUeXBlPy5lbW9qaVN0aWNrZXJNZXRhZGF0YSYmbnVsbCE9PWUubWV0YWRhdGFUeXBlPy5lbW9qaVN0aWNrZXJNZXRhZGF0YSYmKHQubWV0YWRhdGFUeXBlPXskY2FzZTpcImVtb2ppU3RpY2tlck1ldGFkYXRhXCIsZW1vamlTdGlja2VyTWV0YWRhdGE6cC5FbW9qaVN0aWNrZXJNZXRhZGF0YS5mcm9tUGFydGlhbChlLm1ldGFkYXRhVHlwZS5lbW9qaVN0aWNrZXJNZXRhZGF0YSl9KSxcImNhbWVyYVJvbGxTdGlja2VyTWV0YWRhdGFcIj09PWUubWV0YWRhdGFUeXBlPy4kY2FzZSYmdm9pZCAwIT09ZS5tZXRhZGF0YVR5cGU/LmNhbWVyYVJvbGxTdGlja2VyTWV0YWRhdGEmJm51bGwhPT1lLm1ldGFkYXRhVHlwZT8uY2FtZXJhUm9sbFN0aWNrZXJNZXRhZGF0YSYmKHQubWV0YWRhdGFUeXBlPXskY2FzZTpcImNhbWVyYVJvbGxTdGlja2VyTWV0YWRhdGFcIixjYW1lcmFSb2xsU3RpY2tlck1ldGFkYXRhOm0uQ2FtZXJhUm9sbFN0aWNrZXJNZXRhZGF0YS5mcm9tUGFydGlhbChlLm1ldGFkYXRhVHlwZS5jYW1lcmFSb2xsU3RpY2tlck1ldGFkYXRhKX0pLFwibGVuc1Rvb2xNZXRhZGF0YVwiPT09ZS5tZXRhZGF0YVR5cGU/LiRjYXNlJiZ2b2lkIDAhPT1lLm1ldGFkYXRhVHlwZT8ubGVuc1Rvb2xNZXRhZGF0YSYmbnVsbCE9PWUubWV0YWRhdGFUeXBlPy5sZW5zVG9vbE1ldGFkYXRhJiYodC5tZXRhZGF0YVR5cGU9eyRjYXNlOlwibGVuc1Rvb2xNZXRhZGF0YVwiLGxlbnNUb29sTWV0YWRhdGE6aC5MZW5zVG9vbE1ldGFkYXRhLmZyb21QYXJ0aWFsKGUubWV0YWRhdGFUeXBlLmxlbnNUb29sTWV0YWRhdGEpfSksXCJsZWdhY3lFZGl0c0Jsb2JcIj09PWUubWV0YWRhdGFUeXBlPy4kY2FzZSYmdm9pZCAwIT09ZS5tZXRhZGF0YVR5cGU/LmxlZ2FjeUVkaXRzQmxvYiYmbnVsbCE9PWUubWV0YWRhdGFUeXBlPy5sZWdhY3lFZGl0c0Jsb2ImJih0Lm1ldGFkYXRhVHlwZT17JGNhc2U6XCJsZWdhY3lFZGl0c0Jsb2JcIixsZWdhY3lFZGl0c0Jsb2I6di5NZWRpYU1ldGFkYXRhLmZyb21QYXJ0aWFsKGUubWV0YWRhdGFUeXBlLmxlZ2FjeUVkaXRzQmxvYil9KSxcImxlZ2FjeUVkaXRzSnNvblwiPT09ZS5tZXRhZGF0YVR5cGU/LiRjYXNlJiZ2b2lkIDAhPT1lLm1ldGFkYXRhVHlwZT8ubGVnYWN5RWRpdHNKc29uJiZudWxsIT09ZS5tZXRhZGF0YVR5cGU/LmxlZ2FjeUVkaXRzSnNvbiYmKHQubWV0YWRhdGFUeXBlPXskY2FzZTpcImxlZ2FjeUVkaXRzSnNvblwiLGxlZ2FjeUVkaXRzSnNvbjplLm1ldGFkYXRhVHlwZS5sZWdhY3lFZGl0c0pzb259KSx0fX19LDQ5NDkxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkRyYXdpbmdNZXRhZGF0YT12b2lkIDA7Y29uc3QgaT1uKDk5MDczKSxvPXIobig2MjEwMCkpO3QuRHJhd2luZ01ldGFkYXRhPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLmJydXNoJiZ0LnVpbnQzMig4KS51aW50MzIoZS5icnVzaCksdm9pZCAwIT09ZS5wYXRocyYmaS5QYXRocy5lbmNvZGUoZS5wYXRocyx0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGE9e2JydXNoOjAscGF0aHM6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS5icnVzaD1uLnVpbnQzMigpO2JyZWFrO2Nhc2UgMjphLnBhdGhzPWkuUGF0aHMuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXticnVzaDowLHBhdGhzOnZvaWQgMH07cmV0dXJuIHQuYnJ1c2g9ZS5icnVzaD8/MCx0LnBhdGhzPXZvaWQgMCE9PWUucGF0aHMmJm51bGwhPT1lLnBhdGhzP2kuUGF0aHMuZnJvbVBhcnRpYWwoZS5wYXRocyk6dm9pZCAwLHR9fX0sNTYxODA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRW1vamlTdGlja2VyTWV0YWRhdGE9dC5FbW9qaVN0aWNrZXJNZXRhZGF0YV9Ta2luVG9uZT12b2lkIDA7Y29uc3QgaT1yKG4oNjIxMDApKTt2YXIgbzsobz10LkVtb2ppU3RpY2tlck1ldGFkYXRhX1NraW5Ub25lfHwodC5FbW9qaVN0aWNrZXJNZXRhZGF0YV9Ta2luVG9uZT17fSkpW28uU0tJTlRPTkVfVU5TUEVDSUZJRUQ9MF09XCJTS0lOVE9ORV9VTlNQRUNJRklFRFwiLG9bby5ERUZBVUxUPTFdPVwiREVGQVVMVFwiLG9bby5MSUdIVD0yXT1cIkxJR0hUXCIsb1tvLk1FRElVTV9MSUdIVD0zXT1cIk1FRElVTV9MSUdIVFwiLG9bby5NRURJVU09NF09XCJNRURJVU1cIixvW28uTUVESVVNX0RBUks9NV09XCJNRURJVU1fREFSS1wiLG9bby5EQVJLPTZdPVwiREFSS1wiLG9bby5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsdC5FbW9qaVN0aWNrZXJNZXRhZGF0YT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5za2luVG9uZSYmdC51aW50MzIoOCkuaW50MzIoZS5za2luVG9uZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXtza2luVG9uZTowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/by5za2luVG9uZT1uLmludDMyKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtza2luVG9uZTowfTtyZXR1cm4gdC5za2luVG9uZT1lLnNraW5Ub25lPz8wLHR9fX0sMjg4ODI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRmlsdGVyTWV0YWRhdGE9dm9pZCAwO2NvbnN0IGk9big1MTU5OCksbz1yKG4oNjIxMDApKTt0LkZpbHRlck1ldGFkYXRhPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUucGxhY2VJZCYmaS5VVUlELmVuY29kZShlLnBsYWNlSWQsdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBhPXtwbGFjZUlkOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2EucGxhY2VJZD1pLlVVSUQuZGVjb2RlKG4sbi51aW50MzIoKSk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtwbGFjZUlkOnZvaWQgMH07cmV0dXJuIHQucGxhY2VJZD12b2lkIDAhPT1lLnBsYWNlSWQmJm51bGwhPT1lLnBsYWNlSWQ/aS5VVUlELmZyb21QYXJ0aWFsKGUucGxhY2VJZCk6dm9pZCAwLHR9fX0sOTI1ODI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQWx0aXR1ZGVTdGlja2VyTWV0YWRhdGE9dC5BbHRpdHVkZVN0aWNrZXJNZXRhZGF0YV9NZWFzdXJlbWVudFVuaXQ9dC5BbHRpdHVkZVN0aWNrZXJNZXRhZGF0YV9UeXBlPXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO3ZhciBvLGE7KGE9dC5BbHRpdHVkZVN0aWNrZXJNZXRhZGF0YV9UeXBlfHwodC5BbHRpdHVkZVN0aWNrZXJNZXRhZGF0YV9UeXBlPXt9KSlbYS5UWVBFX1VOU1BFQ0lGSUVEPTBdPVwiVFlQRV9VTlNQRUNJRklFRFwiLGFbYS5URVhUPTFdPVwiVEVYVFwiLGFbYS5HQVVHRT0yXT1cIkdBVUdFXCIsYVthLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwobz10LkFsdGl0dWRlU3RpY2tlck1ldGFkYXRhX01lYXN1cmVtZW50VW5pdHx8KHQuQWx0aXR1ZGVTdGlja2VyTWV0YWRhdGFfTWVhc3VyZW1lbnRVbml0PXt9KSlbby5NRUFTVVJFTUVOVF9VTklUX1VOU1BFQ0lGSUVEPTBdPVwiTUVBU1VSRU1FTlRfVU5JVF9VTlNQRUNJRklFRFwiLG9bby5NRVRFUlM9MV09XCJNRVRFUlNcIixvW28uRkVFVD0yXT1cIkZFRVRcIixvW28uVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLHQuQWx0aXR1ZGVTdGlja2VyTWV0YWRhdGE9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUudHlwZSYmdC51aW50MzIoOCkuaW50MzIoZS50eXBlKSwwIT09ZS5tZWFzdXJlbWVudFVuaXQmJnQudWludDMyKDE2KS5pbnQzMihlLm1lYXN1cmVtZW50VW5pdCksMCE9PWUuYWx0aXR1ZGUmJnQudWludDMyKDI0KS5zaW50MzIoZS5hbHRpdHVkZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXt0eXBlOjAsbWVhc3VyZW1lbnRVbml0OjAsYWx0aXR1ZGU6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8udHlwZT1uLmludDMyKCk7YnJlYWs7Y2FzZSAyOm8ubWVhc3VyZW1lbnRVbml0PW4uaW50MzIoKTticmVhaztjYXNlIDM6by5hbHRpdHVkZT1uLnNpbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dHlwZTowLG1lYXN1cmVtZW50VW5pdDowLGFsdGl0dWRlOjB9O3JldHVybiB0LnR5cGU9ZS50eXBlPz8wLHQubWVhc3VyZW1lbnRVbml0PWUubWVhc3VyZW1lbnRVbml0Pz8wLHQuYWx0aXR1ZGU9ZS5hbHRpdHVkZT8/MCx0fX19LDI2Nzg2OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkJhdHRlcnlTdGlja2VyTWV0YWRhdGE9dC5CYXR0ZXJ5U3RpY2tlck1ldGFkYXRhX0xldmVsPXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO3ZhciBvOyhvPXQuQmF0dGVyeVN0aWNrZXJNZXRhZGF0YV9MZXZlbHx8KHQuQmF0dGVyeVN0aWNrZXJNZXRhZGF0YV9MZXZlbD17fSkpW28uTEVWRUxfVU5TUEVDSUZJRUQ9MF09XCJMRVZFTF9VTlNQRUNJRklFRFwiLG9bby5FTVBUWT0xXT1cIkVNUFRZXCIsb1tvLkZVTEw9Ml09XCJGVUxMXCIsb1tvLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0LkJhdHRlcnlTdGlja2VyTWV0YWRhdGE9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUubGV2ZWwmJnQudWludDMyKDgpLmludDMyKGUubGV2ZWwpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17bGV2ZWw6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP28ubGV2ZWw9bi5pbnQzMigpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17bGV2ZWw6MH07cmV0dXJuIHQubGV2ZWw9ZS5sZXZlbD8/MCx0fX19LDQ3MDkxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkRhdGVUaW1lU3RpY2tlck1ldGFkYXRhPXQuRGF0ZVRpbWVTdGlja2VyTWV0YWRhdGFfVHlwZT12b2lkIDA7Y29uc3QgaT1yKG4oNDE1ODMpKSxvPXIobig2MjEwMCkpO3ZhciBhOyhhPXQuRGF0ZVRpbWVTdGlja2VyTWV0YWRhdGFfVHlwZXx8KHQuRGF0ZVRpbWVTdGlja2VyTWV0YWRhdGFfVHlwZT17fSkpW2EuVFlQRV9VTlNQRUNJRklFRD0wXT1cIlRZUEVfVU5TUEVDSUZJRURcIixhW2EuTlVNRVJJQz0xXT1cIk5VTUVSSUNcIixhW2EuQUxQSEFOVU1FUklDPTJdPVwiQUxQSEFOVU1FUklDXCIsYVthLlRJTUU9M109XCJUSU1FXCIsYVthLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0LkRhdGVUaW1lU3RpY2tlck1ldGFkYXRhPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLnR5cGUmJnQudWludDMyKDgpLmludDMyKGUudHlwZSksXCIwXCIhPT1lLnRpbWUmJnQudWludDMyKDE2KS5pbnQ2NChlLnRpbWUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17dHlwZTowLHRpbWU6XCIwXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnR5cGU9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMjppLnRpbWU9bi5pbnQ2NCgpLnRvU3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt0eXBlOjAsdGltZTpcIjBcIn07cmV0dXJuIHQudHlwZT1lLnR5cGU/PzAsdC50aW1lPWUudGltZT8/XCIwXCIsdH19LG8uZGVmYXVsdC51dGlsLkxvbmchPT1pLmRlZmF1bHQmJihvLmRlZmF1bHQudXRpbC5Mb25nPWkuZGVmYXVsdCxvLmRlZmF1bHQuY29uZmlndXJlKCkpfSw0MTEzNjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5NZW50aW9uU3RpY2tlck1ldGFkYXRhPXQuTWVudGlvblN0aWNrZXJNZXRhZGF0YV9UeXBlPXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO3ZhciBvOyhvPXQuTWVudGlvblN0aWNrZXJNZXRhZGF0YV9UeXBlfHwodC5NZW50aW9uU3RpY2tlck1ldGFkYXRhX1R5cGU9e30pKVtvLlRZUEVfVU5TUEVDSUZJRUQ9MF09XCJUWVBFX1VOU1BFQ0lGSUVEXCIsb1tvLkxJR0hUPTFdPVwiTElHSFRcIixvW28uREFSSz0yXT1cIkRBUktcIixvW28uUkFJTkJPVz0zXT1cIlJBSU5CT1dcIixvW28uVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLHQuTWVudGlvblN0aWNrZXJNZXRhZGF0YT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS50eXBlJiZ0LnVpbnQzMig4KS5pbnQzMihlLnR5cGUpLFwiXCIhPT1lLnVzZXJuYW1lJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUudXNlcm5hbWUpLFwiXCIhPT1lLmRpc3BsYXlOYW1lJiZ0LnVpbnQzMigyNikuc3RyaW5nKGUuZGlzcGxheU5hbWUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17dHlwZTowLHVzZXJuYW1lOlwiXCIsZGlzcGxheU5hbWU6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8udHlwZT1uLmludDMyKCk7YnJlYWs7Y2FzZSAyOm8udXNlcm5hbWU9bi5zdHJpbmcoKTticmVhaztjYXNlIDM6by5kaXNwbGF5TmFtZT1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dHlwZTowLHVzZXJuYW1lOlwiXCIsZGlzcGxheU5hbWU6XCJcIn07cmV0dXJuIHQudHlwZT1lLnR5cGU/PzAsdC51c2VybmFtZT1lLnVzZXJuYW1lPz9cIlwiLHQuZGlzcGxheU5hbWU9ZS5kaXNwbGF5TmFtZT8/XCJcIix0fX19LDY5ODk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTXVzaWNTdGlja2VyTWV0YWRhdGE9dC5NdXNpY1N0aWNrZXJNZXRhZGF0YV9TdGlja2VyVHlwZT12b2lkIDA7Y29uc3QgaT1yKG4oNDE1ODMpKSxvPXIobig2MjEwMCkpO3ZhciBhOyhhPXQuTXVzaWNTdGlja2VyTWV0YWRhdGFfU3RpY2tlclR5cGV8fCh0Lk11c2ljU3RpY2tlck1ldGFkYXRhX1N0aWNrZXJUeXBlPXt9KSlbYS5VTlNFVD0wXT1cIlVOU0VUXCIsYVthLldBVkVGT1JNPTFdPVwiV0FWRUZPUk1cIixhW2EuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLHQuTXVzaWNTdGlja2VyTWV0YWRhdGE9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUuc3RpY2tlclR5cGUmJnQudWludDMyKDgpLmludDMyKGUuc3RpY2tlclR5cGUpLFwiMFwiIT09ZS50cmFja0lkJiZ0LnVpbnQzMigxNikudWludDY0KGUudHJhY2tJZCksXCJcIiE9PWUudGl0bGUmJnQudWludDMyKDI2KS5zdHJpbmcoZS50aXRsZSksXCJcIiE9PWUuYXJ0aXN0TmFtZSYmdC51aW50MzIoMzQpLnN0cmluZyhlLmFydGlzdE5hbWUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17c3RpY2tlclR5cGU6MCx0cmFja0lkOlwiMFwiLHRpdGxlOlwiXCIsYXJ0aXN0TmFtZTpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5zdGlja2VyVHlwZT1uLmludDMyKCk7YnJlYWs7Y2FzZSAyOmkudHJhY2tJZD1uLnVpbnQ2NCgpLnRvU3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmkudGl0bGU9bi5zdHJpbmcoKTticmVhaztjYXNlIDQ6aS5hcnRpc3ROYW1lPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtzdGlja2VyVHlwZTowLHRyYWNrSWQ6XCIwXCIsdGl0bGU6XCJcIixhcnRpc3ROYW1lOlwiXCJ9O3JldHVybiB0LnN0aWNrZXJUeXBlPWUuc3RpY2tlclR5cGU/PzAsdC50cmFja0lkPWUudHJhY2tJZD8/XCIwXCIsdC50aXRsZT1lLnRpdGxlPz9cIlwiLHQuYXJ0aXN0TmFtZT1lLmFydGlzdE5hbWU/P1wiXCIsdH19LG8uZGVmYXVsdC51dGlsLkxvbmchPT1pLmRlZmF1bHQmJihvLmRlZmF1bHQudXRpbC5Mb25nPWkuZGVmYXVsdCxvLmRlZmF1bHQuY29uZmlndXJlKCkpfSwxNDIwMTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Qb2xsU3RpY2tlck1ldGFkYXRhPXZvaWQgMDtjb25zdCBpPW4oMzA4ODEpLG89cihuKDYyMTAwKSk7dC5Qb2xsU3RpY2tlck1ldGFkYXRhPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuITA9PT1lLmlzRHluYW1pYyYmdC51aW50MzIoOCkuYm9vbChlLmlzRHluYW1pYyksdm9pZCAwIT09ZS5wb2xsSW5mbyYmaS5Qb2xsSW5mby5lbmNvZGUoZS5wb2xsSW5mbyx0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGE9e2lzRHluYW1pYzohMSxwb2xsSW5mbzp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLmlzRHluYW1pYz1uLmJvb2woKTticmVhaztjYXNlIDI6YS5wb2xsSW5mbz1pLlBvbGxJbmZvLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17aXNEeW5hbWljOiExLHBvbGxJbmZvOnZvaWQgMH07cmV0dXJuIHQuaXNEeW5hbWljPWUuaXNEeW5hbWljPz8hMSx0LnBvbGxJbmZvPXZvaWQgMCE9PWUucG9sbEluZm8mJm51bGwhPT1lLnBvbGxJbmZvP2kuUG9sbEluZm8uZnJvbVBhcnRpYWwoZS5wb2xsSW5mbyk6dm9pZCAwLHR9fX0sOTg0MDE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuU25hcGNvZGVTdGlja2VyTWV0YWRhdGE9dm9pZCAwO2NvbnN0IGk9cihuKDYyMTAwKSk7dC5TbmFwY29kZVN0aWNrZXJNZXRhZGF0YT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiEwPT09ZS53aXRoVXNlclRhZyYmdC51aW50MzIoOCkuYm9vbChlLndpdGhVc2VyVGFnKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e3dpdGhVc2VyVGFnOiExfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/by53aXRoVXNlclRhZz1uLmJvb2woKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3dpdGhVc2VyVGFnOiExfTtyZXR1cm4gdC53aXRoVXNlclRhZz1lLndpdGhVc2VyVGFnPz8hMSx0fX19LDg5OTA2OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlN0b3J5SW52aXRlU3RpY2tlck1ldGFkYXRhPXQuU3RvcnlJbnZpdGVTdGlja2VyTWV0YWRhdGFfVHlwZT12b2lkIDA7Y29uc3QgaT1yKG4oNjIxMDApKTt2YXIgbzsobz10LlN0b3J5SW52aXRlU3RpY2tlck1ldGFkYXRhX1R5cGV8fCh0LlN0b3J5SW52aXRlU3RpY2tlck1ldGFkYXRhX1R5cGU9e30pKVtvLlRZUEVfVU5TUEVDSUZJRUQ9MF09XCJUWVBFX1VOU1BFQ0lGSUVEXCIsb1tvLkNVU1RPTT0xXT1cIkNVU1RPTVwiLG9bby5QUklWQVRFPTJdPVwiUFJJVkFURVwiLG9bby5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsdC5TdG9yeUludml0ZVN0aWNrZXJNZXRhZGF0YT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS50eXBlJiZ0LnVpbnQzMig4KS5pbnQzMihlLnR5cGUpLFwiXCIhPT1lLmludml0ZUlkJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuaW52aXRlSWQpLFwiXCIhPT1lLnN0b3J5TmFtZSYmdC51aW50MzIoMjYpLnN0cmluZyhlLnN0b3J5TmFtZSksXCJcIiE9PWUuc3RvcnlJZCYmdC51aW50MzIoMzQpLnN0cmluZyhlLnN0b3J5SWQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17dHlwZTowLGludml0ZUlkOlwiXCIsc3RvcnlOYW1lOlwiXCIsc3RvcnlJZDpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by50eXBlPW4uaW50MzIoKTticmVhaztjYXNlIDI6by5pbnZpdGVJZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMzpvLnN0b3J5TmFtZT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNDpvLnN0b3J5SWQ9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3R5cGU6MCxpbnZpdGVJZDpcIlwiLHN0b3J5TmFtZTpcIlwiLHN0b3J5SWQ6XCJcIn07cmV0dXJuIHQudHlwZT1lLnR5cGU/PzAsdC5pbnZpdGVJZD1lLmludml0ZUlkPz9cIlwiLHQuc3RvcnlOYW1lPWUuc3RvcnlOYW1lPz9cIlwiLHQuc3RvcnlJZD1lLnN0b3J5SWQ/P1wiXCIsdH19fSw0OTM4NzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5XZWF0aGVyU3RpY2tlck1ldGFkYXRhX0RhaWx5Rm9yZWNhc3Q9dC5XZWF0aGVyU3RpY2tlck1ldGFkYXRhX0hvdXJseUZvcmVjYXN0PXQuV2VhdGhlclN0aWNrZXJNZXRhZGF0YT10LldlYXRoZXJTdGlja2VyTWV0YWRhdGFfTWVhc3VyZW1lbnRTeXN0ZW09dC5XZWF0aGVyU3RpY2tlck1ldGFkYXRhX1R5cGU9dm9pZCAwO2NvbnN0IGk9cihuKDYyMTAwKSk7dmFyIG8sYTsoYT10LldlYXRoZXJTdGlja2VyTWV0YWRhdGFfVHlwZXx8KHQuV2VhdGhlclN0aWNrZXJNZXRhZGF0YV9UeXBlPXt9KSlbYS5UWVBFX1VOU1BFQ0lGSUVEPTBdPVwiVFlQRV9VTlNQRUNJRklFRFwiLGFbYS5DVVJSRU5UX1dFQVRIRVI9MV09XCJDVVJSRU5UX1dFQVRIRVJcIixhW2EuREFJTFlfRk9SRUNBU1Q9Ml09XCJEQUlMWV9GT1JFQ0FTVFwiLGFbYS5IT1VSTFlfRk9SRUNBU1Q9M109XCJIT1VSTFlfRk9SRUNBU1RcIixhW2EuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLChvPXQuV2VhdGhlclN0aWNrZXJNZXRhZGF0YV9NZWFzdXJlbWVudFN5c3RlbXx8KHQuV2VhdGhlclN0aWNrZXJNZXRhZGF0YV9NZWFzdXJlbWVudFN5c3RlbT17fSkpW28uTUVBU1VSRU1FTlRfU1lTVEVNX1VOU1BFQ0lGSUVEPTBdPVwiTUVBU1VSRU1FTlRfU1lTVEVNX1VOU1BFQ0lGSUVEXCIsb1tvLk1FVFJJQz0xXT1cIk1FVFJJQ1wiLG9bby5JTVBFUklBTD0yXT1cIklNUEVSSUFMXCIsb1tvLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0LldlYXRoZXJTdGlja2VyTWV0YWRhdGE9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTswIT09ZS50eXBlJiZuLnVpbnQzMig4KS5pbnQzMihlLnR5cGUpLDAhPT1lLmNlbHNpdXMmJm4udWludDMyKDI0KS5zaW50MzIoZS5jZWxzaXVzKSwwIT09ZS5tZWFzdXJlbWVudFN5c3RlbSYmbi51aW50MzIoMzIpLmludDMyKGUubWVhc3VyZW1lbnRTeXN0ZW0pLFwiXCIhPT1lLmxvY2F0aW9uTmFtZSYmbi51aW50MzIoNDIpLnN0cmluZyhlLmxvY2F0aW9uTmFtZSk7Zm9yKGNvbnN0IHIgb2YgZS5ob3VybHlGb3JlY2FzdCl0LldlYXRoZXJTdGlja2VyTWV0YWRhdGFfSG91cmx5Rm9yZWNhc3QuZW5jb2RlKHIsbi51aW50MzIoNTApLmZvcmsoKSkubGRlbGltKCk7Zm9yKGNvbnN0IHIgb2YgZS5kYWlseUZvcmVjYXN0KXQuV2VhdGhlclN0aWNrZXJNZXRhZGF0YV9EYWlseUZvcmVjYXN0LmVuY29kZShyLG4udWludDMyKDU4KS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiBufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IG89dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGE9e3R5cGU6MCxjZWxzaXVzOjAsbWVhc3VyZW1lbnRTeXN0ZW06MCxsb2NhdGlvbk5hbWU6XCJcIixob3VybHlGb3JlY2FzdDpbXSxkYWlseUZvcmVjYXN0OltdfTtmb3IoO3IucG9zPG87KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS50eXBlPXIuaW50MzIoKTticmVhaztjYXNlIDM6YS5jZWxzaXVzPXIuc2ludDMyKCk7YnJlYWs7Y2FzZSA0OmEubWVhc3VyZW1lbnRTeXN0ZW09ci5pbnQzMigpO2JyZWFrO2Nhc2UgNTphLmxvY2F0aW9uTmFtZT1yLnN0cmluZygpO2JyZWFrO2Nhc2UgNjphLmhvdXJseUZvcmVjYXN0LnB1c2godC5XZWF0aGVyU3RpY2tlck1ldGFkYXRhX0hvdXJseUZvcmVjYXN0LmRlY29kZShyLHIudWludDMyKCkpKTticmVhaztjYXNlIDc6YS5kYWlseUZvcmVjYXN0LnB1c2godC5XZWF0aGVyU3RpY2tlck1ldGFkYXRhX0RhaWx5Rm9yZWNhc3QuZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17dHlwZTowLGNlbHNpdXM6MCxtZWFzdXJlbWVudFN5c3RlbTowLGxvY2F0aW9uTmFtZTpcIlwiLGhvdXJseUZvcmVjYXN0OltdLGRhaWx5Rm9yZWNhc3Q6W119O3JldHVybiBuLnR5cGU9ZS50eXBlPz8wLG4uY2Vsc2l1cz1lLmNlbHNpdXM/PzAsbi5tZWFzdXJlbWVudFN5c3RlbT1lLm1lYXN1cmVtZW50U3lzdGVtPz8wLG4ubG9jYXRpb25OYW1lPWUubG9jYXRpb25OYW1lPz9cIlwiLG4uaG91cmx5Rm9yZWNhc3Q9ZS5ob3VybHlGb3JlY2FzdD8ubWFwKChlPT50LldlYXRoZXJTdGlja2VyTWV0YWRhdGFfSG91cmx5Rm9yZWNhc3QuZnJvbVBhcnRpYWwoZSkpKXx8W10sbi5kYWlseUZvcmVjYXN0PWUuZGFpbHlGb3JlY2FzdD8ubWFwKChlPT50LldlYXRoZXJTdGlja2VyTWV0YWRhdGFfRGFpbHlGb3JlY2FzdC5mcm9tUGFydGlhbChlKSkpfHxbXSxufX0sdC5XZWF0aGVyU3RpY2tlck1ldGFkYXRhX0hvdXJseUZvcmVjYXN0PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLmNlbHNpdXMmJnQudWludDMyKDE2KS5zaW50MzIoZS5jZWxzaXVzKSxcIlwiIT09ZS53ZWF0aGVyQ29uZGl0aW9uJiZ0LnVpbnQzMigyNikuc3RyaW5nKGUud2VhdGhlckNvbmRpdGlvbiksXCJcIiE9PWUuZGlzcGxheVRpbWUmJnQudWludDMyKDM0KS5zdHJpbmcoZS5kaXNwbGF5VGltZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXtjZWxzaXVzOjAsd2VhdGhlckNvbmRpdGlvbjpcIlwiLGRpc3BsYXlUaW1lOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMjpvLmNlbHNpdXM9bi5zaW50MzIoKTticmVhaztjYXNlIDM6by53ZWF0aGVyQ29uZGl0aW9uPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA0Om8uZGlzcGxheVRpbWU9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2NlbHNpdXM6MCx3ZWF0aGVyQ29uZGl0aW9uOlwiXCIsZGlzcGxheVRpbWU6XCJcIn07cmV0dXJuIHQuY2Vsc2l1cz1lLmNlbHNpdXM/PzAsdC53ZWF0aGVyQ29uZGl0aW9uPWUud2VhdGhlckNvbmRpdGlvbj8/XCJcIix0LmRpc3BsYXlUaW1lPWUuZGlzcGxheVRpbWU/P1wiXCIsdH19LHQuV2VhdGhlclN0aWNrZXJNZXRhZGF0YV9EYWlseUZvcmVjYXN0PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLm1pblRlbXBlcmF0dXJlSW5DZWxzaXVzJiZ0LnVpbnQzMigyNCkuc2ludDMyKGUubWluVGVtcGVyYXR1cmVJbkNlbHNpdXMpLDAhPT1lLm1heFRlbXBlcmF0dXJlSW5DZWxzaXVzJiZ0LnVpbnQzMigzMikuc2ludDMyKGUubWF4VGVtcGVyYXR1cmVJbkNlbHNpdXMpLFwiXCIhPT1lLndlYXRoZXJDb25kaXRpb24mJnQudWludDMyKDQyKS5zdHJpbmcoZS53ZWF0aGVyQ29uZGl0aW9uKSxcIlwiIT09ZS5kaXNwbGF5VGltZSYmdC51aW50MzIoNTApLnN0cmluZyhlLmRpc3BsYXlUaW1lKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e21pblRlbXBlcmF0dXJlSW5DZWxzaXVzOjAsbWF4VGVtcGVyYXR1cmVJbkNlbHNpdXM6MCx3ZWF0aGVyQ29uZGl0aW9uOlwiXCIsZGlzcGxheVRpbWU6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAzOm8ubWluVGVtcGVyYXR1cmVJbkNlbHNpdXM9bi5zaW50MzIoKTticmVhaztjYXNlIDQ6by5tYXhUZW1wZXJhdHVyZUluQ2Vsc2l1cz1uLnNpbnQzMigpO2JyZWFrO2Nhc2UgNTpvLndlYXRoZXJDb25kaXRpb249bi5zdHJpbmcoKTticmVhaztjYXNlIDY6by5kaXNwbGF5VGltZT1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17bWluVGVtcGVyYXR1cmVJbkNlbHNpdXM6MCxtYXhUZW1wZXJhdHVyZUluQ2Vsc2l1czowLHdlYXRoZXJDb25kaXRpb246XCJcIixkaXNwbGF5VGltZTpcIlwifTtyZXR1cm4gdC5taW5UZW1wZXJhdHVyZUluQ2Vsc2l1cz1lLm1pblRlbXBlcmF0dXJlSW5DZWxzaXVzPz8wLHQubWF4VGVtcGVyYXR1cmVJbkNlbHNpdXM9ZS5tYXhUZW1wZXJhdHVyZUluQ2Vsc2l1cz8/MCx0LndlYXRoZXJDb25kaXRpb249ZS53ZWF0aGVyQ29uZGl0aW9uPz9cIlwiLHQuZGlzcGxheVRpbWU9ZS5kaXNwbGF5VGltZT8/XCJcIix0fX19LDk4NzY1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkluZm9TdGlja2VyTWV0YWRhdGE9dm9pZCAwO2NvbnN0IGk9big2ODYzKSxvPW4oOTQwMzYpLGE9big0OTM4Nykscz1uKDQ3MDkxKSxjPW4oOTI1ODIpLGw9big0MTEzNiksdT1uKDk4NDAxKSxkPW4oODk5MDYpLGY9bigxNDIwMSkscD1uKDI2Nzg2KSxtPW4oNjk4OSksaD1yKG4oNjIxMDApKTt0LkluZm9TdGlja2VyTWV0YWRhdGE9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aC5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cInBsYWNlU3RpY2tlck1ldGFkYXRhXCI9PT1lLmluZm9TdGlja2VyTWV0YWRhdGFUeXBlPy4kY2FzZSYmaS5QbGFjZVN0aWNrZXJNZXRhZGF0YS5lbmNvZGUoZS5pbmZvU3RpY2tlck1ldGFkYXRhVHlwZS5wbGFjZVN0aWNrZXJNZXRhZGF0YSx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSxcInF1ZXN0aW9uU3RpY2tlck1ldGFkYXRhXCI9PT1lLmluZm9TdGlja2VyTWV0YWRhdGFUeXBlPy4kY2FzZSYmby5RdWVzdGlvblN0aWNrZXJNZXRhZGF0YS5lbmNvZGUoZS5pbmZvU3RpY2tlck1ldGFkYXRhVHlwZS5xdWVzdGlvblN0aWNrZXJNZXRhZGF0YSx0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSxcIndlYXRoZXJTdGlja2VyTWV0YWRhdGFcIj09PWUuaW5mb1N0aWNrZXJNZXRhZGF0YVR5cGU/LiRjYXNlJiZhLldlYXRoZXJTdGlja2VyTWV0YWRhdGEuZW5jb2RlKGUuaW5mb1N0aWNrZXJNZXRhZGF0YVR5cGUud2VhdGhlclN0aWNrZXJNZXRhZGF0YSx0LnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSxcImRhdGVUaW1lU3RpY2tlck1ldGFkYXRhXCI9PT1lLmluZm9TdGlja2VyTWV0YWRhdGFUeXBlPy4kY2FzZSYmcy5EYXRlVGltZVN0aWNrZXJNZXRhZGF0YS5lbmNvZGUoZS5pbmZvU3RpY2tlck1ldGFkYXRhVHlwZS5kYXRlVGltZVN0aWNrZXJNZXRhZGF0YSx0LnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKSxcImFsdGl0dWRlU3RpY2tlck1ldGFkYXRhXCI9PT1lLmluZm9TdGlja2VyTWV0YWRhdGFUeXBlPy4kY2FzZSYmYy5BbHRpdHVkZVN0aWNrZXJNZXRhZGF0YS5lbmNvZGUoZS5pbmZvU3RpY2tlck1ldGFkYXRhVHlwZS5hbHRpdHVkZVN0aWNrZXJNZXRhZGF0YSx0LnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKSxcIm1lbnRpb25TdGlja2VyTWV0YWRhdGFcIj09PWUuaW5mb1N0aWNrZXJNZXRhZGF0YVR5cGU/LiRjYXNlJiZsLk1lbnRpb25TdGlja2VyTWV0YWRhdGEuZW5jb2RlKGUuaW5mb1N0aWNrZXJNZXRhZGF0YVR5cGUubWVudGlvblN0aWNrZXJNZXRhZGF0YSx0LnVpbnQzMig1MCkuZm9yaygpKS5sZGVsaW0oKSxcInNuYXBjb2RlU3RpY2tlck1ldGFkYXRhXCI9PT1lLmluZm9TdGlja2VyTWV0YWRhdGFUeXBlPy4kY2FzZSYmdS5TbmFwY29kZVN0aWNrZXJNZXRhZGF0YS5lbmNvZGUoZS5pbmZvU3RpY2tlck1ldGFkYXRhVHlwZS5zbmFwY29kZVN0aWNrZXJNZXRhZGF0YSx0LnVpbnQzMig1OCkuZm9yaygpKS5sZGVsaW0oKSxcInN0b3J5SW52aXRlU3RpY2tlck1ldGFkYXRhXCI9PT1lLmluZm9TdGlja2VyTWV0YWRhdGFUeXBlPy4kY2FzZSYmZC5TdG9yeUludml0ZVN0aWNrZXJNZXRhZGF0YS5lbmNvZGUoZS5pbmZvU3RpY2tlck1ldGFkYXRhVHlwZS5zdG9yeUludml0ZVN0aWNrZXJNZXRhZGF0YSx0LnVpbnQzMig2NikuZm9yaygpKS5sZGVsaW0oKSxcInBvbGxTdGlja2VyTWV0YWRhdGFcIj09PWUuaW5mb1N0aWNrZXJNZXRhZGF0YVR5cGU/LiRjYXNlJiZmLlBvbGxTdGlja2VyTWV0YWRhdGEuZW5jb2RlKGUuaW5mb1N0aWNrZXJNZXRhZGF0YVR5cGUucG9sbFN0aWNrZXJNZXRhZGF0YSx0LnVpbnQzMig3NCkuZm9yaygpKS5sZGVsaW0oKSxcImJhdHRlcnlTdGlja2VyTWV0YWRhdGFcIj09PWUuaW5mb1N0aWNrZXJNZXRhZGF0YVR5cGU/LiRjYXNlJiZwLkJhdHRlcnlTdGlja2VyTWV0YWRhdGEuZW5jb2RlKGUuaW5mb1N0aWNrZXJNZXRhZGF0YVR5cGUuYmF0dGVyeVN0aWNrZXJNZXRhZGF0YSx0LnVpbnQzMig4MikuZm9yaygpKS5sZGVsaW0oKSxcIm11c2ljU3RpY2tlck1ldGFkYXRhXCI9PT1lLmluZm9TdGlja2VyTWV0YWRhdGFUeXBlPy4kY2FzZSYmbS5NdXNpY1N0aWNrZXJNZXRhZGF0YS5lbmNvZGUoZS5pbmZvU3RpY2tlck1ldGFkYXRhVHlwZS5tdXNpY1N0aWNrZXJNZXRhZGF0YSx0LnVpbnQzMig5MCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBoLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGguZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IHY9e2luZm9TdGlja2VyTWV0YWRhdGFUeXBlOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOnYuaW5mb1N0aWNrZXJNZXRhZGF0YVR5cGU9eyRjYXNlOlwicGxhY2VTdGlja2VyTWV0YWRhdGFcIixwbGFjZVN0aWNrZXJNZXRhZGF0YTppLlBsYWNlU3RpY2tlck1ldGFkYXRhLmRlY29kZShuLG4udWludDMyKCkpfTticmVhaztjYXNlIDI6di5pbmZvU3RpY2tlck1ldGFkYXRhVHlwZT17JGNhc2U6XCJxdWVzdGlvblN0aWNrZXJNZXRhZGF0YVwiLHF1ZXN0aW9uU3RpY2tlck1ldGFkYXRhOm8uUXVlc3Rpb25TdGlja2VyTWV0YWRhdGEuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMzp2LmluZm9TdGlja2VyTWV0YWRhdGFUeXBlPXskY2FzZTpcIndlYXRoZXJTdGlja2VyTWV0YWRhdGFcIix3ZWF0aGVyU3RpY2tlck1ldGFkYXRhOmEuV2VhdGhlclN0aWNrZXJNZXRhZGF0YS5kZWNvZGUobixuLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA0OnYuaW5mb1N0aWNrZXJNZXRhZGF0YVR5cGU9eyRjYXNlOlwiZGF0ZVRpbWVTdGlja2VyTWV0YWRhdGFcIixkYXRlVGltZVN0aWNrZXJNZXRhZGF0YTpzLkRhdGVUaW1lU3RpY2tlck1ldGFkYXRhLmRlY29kZShuLG4udWludDMyKCkpfTticmVhaztjYXNlIDU6di5pbmZvU3RpY2tlck1ldGFkYXRhVHlwZT17JGNhc2U6XCJhbHRpdHVkZVN0aWNrZXJNZXRhZGF0YVwiLGFsdGl0dWRlU3RpY2tlck1ldGFkYXRhOmMuQWx0aXR1ZGVTdGlja2VyTWV0YWRhdGEuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgNjp2LmluZm9TdGlja2VyTWV0YWRhdGFUeXBlPXskY2FzZTpcIm1lbnRpb25TdGlja2VyTWV0YWRhdGFcIixtZW50aW9uU3RpY2tlck1ldGFkYXRhOmwuTWVudGlvblN0aWNrZXJNZXRhZGF0YS5kZWNvZGUobixuLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA3OnYuaW5mb1N0aWNrZXJNZXRhZGF0YVR5cGU9eyRjYXNlOlwic25hcGNvZGVTdGlja2VyTWV0YWRhdGFcIixzbmFwY29kZVN0aWNrZXJNZXRhZGF0YTp1LlNuYXBjb2RlU3RpY2tlck1ldGFkYXRhLmRlY29kZShuLG4udWludDMyKCkpfTticmVhaztjYXNlIDg6di5pbmZvU3RpY2tlck1ldGFkYXRhVHlwZT17JGNhc2U6XCJzdG9yeUludml0ZVN0aWNrZXJNZXRhZGF0YVwiLHN0b3J5SW52aXRlU3RpY2tlck1ldGFkYXRhOmQuU3RvcnlJbnZpdGVTdGlja2VyTWV0YWRhdGEuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgOTp2LmluZm9TdGlja2VyTWV0YWRhdGFUeXBlPXskY2FzZTpcInBvbGxTdGlja2VyTWV0YWRhdGFcIixwb2xsU3RpY2tlck1ldGFkYXRhOmYuUG9sbFN0aWNrZXJNZXRhZGF0YS5kZWNvZGUobixuLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAxMDp2LmluZm9TdGlja2VyTWV0YWRhdGFUeXBlPXskY2FzZTpcImJhdHRlcnlTdGlja2VyTWV0YWRhdGFcIixiYXR0ZXJ5U3RpY2tlck1ldGFkYXRhOnAuQmF0dGVyeVN0aWNrZXJNZXRhZGF0YS5kZWNvZGUobixuLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAxMTp2LmluZm9TdGlja2VyTWV0YWRhdGFUeXBlPXskY2FzZTpcIm11c2ljU3RpY2tlck1ldGFkYXRhXCIsbXVzaWNTdGlja2VyTWV0YWRhdGE6bS5NdXNpY1N0aWNrZXJNZXRhZGF0YS5kZWNvZGUobixuLnVpbnQzMigpKX07YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiB2fSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtpbmZvU3RpY2tlck1ldGFkYXRhVHlwZTp2b2lkIDB9O3JldHVyblwicGxhY2VTdGlja2VyTWV0YWRhdGFcIj09PWUuaW5mb1N0aWNrZXJNZXRhZGF0YVR5cGU/LiRjYXNlJiZ2b2lkIDAhPT1lLmluZm9TdGlja2VyTWV0YWRhdGFUeXBlPy5wbGFjZVN0aWNrZXJNZXRhZGF0YSYmbnVsbCE9PWUuaW5mb1N0aWNrZXJNZXRhZGF0YVR5cGU/LnBsYWNlU3RpY2tlck1ldGFkYXRhJiYodC5pbmZvU3RpY2tlck1ldGFkYXRhVHlwZT17JGNhc2U6XCJwbGFjZVN0aWNrZXJNZXRhZGF0YVwiLHBsYWNlU3RpY2tlck1ldGFkYXRhOmkuUGxhY2VTdGlja2VyTWV0YWRhdGEuZnJvbVBhcnRpYWwoZS5pbmZvU3RpY2tlck1ldGFkYXRhVHlwZS5wbGFjZVN0aWNrZXJNZXRhZGF0YSl9KSxcInF1ZXN0aW9uU3RpY2tlck1ldGFkYXRhXCI9PT1lLmluZm9TdGlja2VyTWV0YWRhdGFUeXBlPy4kY2FzZSYmdm9pZCAwIT09ZS5pbmZvU3RpY2tlck1ldGFkYXRhVHlwZT8ucXVlc3Rpb25TdGlja2VyTWV0YWRhdGEmJm51bGwhPT1lLmluZm9TdGlja2VyTWV0YWRhdGFUeXBlPy5xdWVzdGlvblN0aWNrZXJNZXRhZGF0YSYmKHQuaW5mb1N0aWNrZXJNZXRhZGF0YVR5cGU9eyRjYXNlOlwicXVlc3Rpb25TdGlja2VyTWV0YWRhdGFcIixxdWVzdGlvblN0aWNrZXJNZXRhZGF0YTpvLlF1ZXN0aW9uU3RpY2tlck1ldGFkYXRhLmZyb21QYXJ0aWFsKGUuaW5mb1N0aWNrZXJNZXRhZGF0YVR5cGUucXVlc3Rpb25TdGlja2VyTWV0YWRhdGEpfSksXCJ3ZWF0aGVyU3RpY2tlck1ldGFkYXRhXCI9PT1lLmluZm9TdGlja2VyTWV0YWRhdGFUeXBlPy4kY2FzZSYmdm9pZCAwIT09ZS5pbmZvU3RpY2tlck1ldGFkYXRhVHlwZT8ud2VhdGhlclN0aWNrZXJNZXRhZGF0YSYmbnVsbCE9PWUuaW5mb1N0aWNrZXJNZXRhZGF0YVR5cGU/LndlYXRoZXJTdGlja2VyTWV0YWRhdGEmJih0LmluZm9TdGlja2VyTWV0YWRhdGFUeXBlPXskY2FzZTpcIndlYXRoZXJTdGlja2VyTWV0YWRhdGFcIix3ZWF0aGVyU3RpY2tlck1ldGFkYXRhOmEuV2VhdGhlclN0aWNrZXJNZXRhZGF0YS5mcm9tUGFydGlhbChlLmluZm9TdGlja2VyTWV0YWRhdGFUeXBlLndlYXRoZXJTdGlja2VyTWV0YWRhdGEpfSksXCJkYXRlVGltZVN0aWNrZXJNZXRhZGF0YVwiPT09ZS5pbmZvU3RpY2tlck1ldGFkYXRhVHlwZT8uJGNhc2UmJnZvaWQgMCE9PWUuaW5mb1N0aWNrZXJNZXRhZGF0YVR5cGU/LmRhdGVUaW1lU3RpY2tlck1ldGFkYXRhJiZudWxsIT09ZS5pbmZvU3RpY2tlck1ldGFkYXRhVHlwZT8uZGF0ZVRpbWVTdGlja2VyTWV0YWRhdGEmJih0LmluZm9TdGlja2VyTWV0YWRhdGFUeXBlPXskY2FzZTpcImRhdGVUaW1lU3RpY2tlck1ldGFkYXRhXCIsZGF0ZVRpbWVTdGlja2VyTWV0YWRhdGE6cy5EYXRlVGltZVN0aWNrZXJNZXRhZGF0YS5mcm9tUGFydGlhbChlLmluZm9TdGlja2VyTWV0YWRhdGFUeXBlLmRhdGVUaW1lU3RpY2tlck1ldGFkYXRhKX0pLFwiYWx0aXR1ZGVTdGlja2VyTWV0YWRhdGFcIj09PWUuaW5mb1N0aWNrZXJNZXRhZGF0YVR5cGU/LiRjYXNlJiZ2b2lkIDAhPT1lLmluZm9TdGlja2VyTWV0YWRhdGFUeXBlPy5hbHRpdHVkZVN0aWNrZXJNZXRhZGF0YSYmbnVsbCE9PWUuaW5mb1N0aWNrZXJNZXRhZGF0YVR5cGU/LmFsdGl0dWRlU3RpY2tlck1ldGFkYXRhJiYodC5pbmZvU3RpY2tlck1ldGFkYXRhVHlwZT17JGNhc2U6XCJhbHRpdHVkZVN0aWNrZXJNZXRhZGF0YVwiLGFsdGl0dWRlU3RpY2tlck1ldGFkYXRhOmMuQWx0aXR1ZGVTdGlja2VyTWV0YWRhdGEuZnJvbVBhcnRpYWwoZS5pbmZvU3RpY2tlck1ldGFkYXRhVHlwZS5hbHRpdHVkZVN0aWNrZXJNZXRhZGF0YSl9KSxcIm1lbnRpb25TdGlja2VyTWV0YWRhdGFcIj09PWUuaW5mb1N0aWNrZXJNZXRhZGF0YVR5cGU/LiRjYXNlJiZ2b2lkIDAhPT1lLmluZm9TdGlja2VyTWV0YWRhdGFUeXBlPy5tZW50aW9uU3RpY2tlck1ldGFkYXRhJiZudWxsIT09ZS5pbmZvU3RpY2tlck1ldGFkYXRhVHlwZT8ubWVudGlvblN0aWNrZXJNZXRhZGF0YSYmKHQuaW5mb1N0aWNrZXJNZXRhZGF0YVR5cGU9eyRjYXNlOlwibWVudGlvblN0aWNrZXJNZXRhZGF0YVwiLG1lbnRpb25TdGlja2VyTWV0YWRhdGE6bC5NZW50aW9uU3RpY2tlck1ldGFkYXRhLmZyb21QYXJ0aWFsKGUuaW5mb1N0aWNrZXJNZXRhZGF0YVR5cGUubWVudGlvblN0aWNrZXJNZXRhZGF0YSl9KSxcInNuYXBjb2RlU3RpY2tlck1ldGFkYXRhXCI9PT1lLmluZm9TdGlja2VyTWV0YWRhdGFUeXBlPy4kY2FzZSYmdm9pZCAwIT09ZS5pbmZvU3RpY2tlck1ldGFkYXRhVHlwZT8uc25hcGNvZGVTdGlja2VyTWV0YWRhdGEmJm51bGwhPT1lLmluZm9TdGlja2VyTWV0YWRhdGFUeXBlPy5zbmFwY29kZVN0aWNrZXJNZXRhZGF0YSYmKHQuaW5mb1N0aWNrZXJNZXRhZGF0YVR5cGU9eyRjYXNlOlwic25hcGNvZGVTdGlja2VyTWV0YWRhdGFcIixzbmFwY29kZVN0aWNrZXJNZXRhZGF0YTp1LlNuYXBjb2RlU3RpY2tlck1ldGFkYXRhLmZyb21QYXJ0aWFsKGUuaW5mb1N0aWNrZXJNZXRhZGF0YVR5cGUuc25hcGNvZGVTdGlja2VyTWV0YWRhdGEpfSksXCJzdG9yeUludml0ZVN0aWNrZXJNZXRhZGF0YVwiPT09ZS5pbmZvU3RpY2tlck1ldGFkYXRhVHlwZT8uJGNhc2UmJnZvaWQgMCE9PWUuaW5mb1N0aWNrZXJNZXRhZGF0YVR5cGU/LnN0b3J5SW52aXRlU3RpY2tlck1ldGFkYXRhJiZudWxsIT09ZS5pbmZvU3RpY2tlck1ldGFkYXRhVHlwZT8uc3RvcnlJbnZpdGVTdGlja2VyTWV0YWRhdGEmJih0LmluZm9TdGlja2VyTWV0YWRhdGFUeXBlPXskY2FzZTpcInN0b3J5SW52aXRlU3RpY2tlck1ldGFkYXRhXCIsc3RvcnlJbnZpdGVTdGlja2VyTWV0YWRhdGE6ZC5TdG9yeUludml0ZVN0aWNrZXJNZXRhZGF0YS5mcm9tUGFydGlhbChlLmluZm9TdGlja2VyTWV0YWRhdGFUeXBlLnN0b3J5SW52aXRlU3RpY2tlck1ldGFkYXRhKX0pLFwicG9sbFN0aWNrZXJNZXRhZGF0YVwiPT09ZS5pbmZvU3RpY2tlck1ldGFkYXRhVHlwZT8uJGNhc2UmJnZvaWQgMCE9PWUuaW5mb1N0aWNrZXJNZXRhZGF0YVR5cGU/LnBvbGxTdGlja2VyTWV0YWRhdGEmJm51bGwhPT1lLmluZm9TdGlja2VyTWV0YWRhdGFUeXBlPy5wb2xsU3RpY2tlck1ldGFkYXRhJiYodC5pbmZvU3RpY2tlck1ldGFkYXRhVHlwZT17JGNhc2U6XCJwb2xsU3RpY2tlck1ldGFkYXRhXCIscG9sbFN0aWNrZXJNZXRhZGF0YTpmLlBvbGxTdGlja2VyTWV0YWRhdGEuZnJvbVBhcnRpYWwoZS5pbmZvU3RpY2tlck1ldGFkYXRhVHlwZS5wb2xsU3RpY2tlck1ldGFkYXRhKX0pLFwiYmF0dGVyeVN0aWNrZXJNZXRhZGF0YVwiPT09ZS5pbmZvU3RpY2tlck1ldGFkYXRhVHlwZT8uJGNhc2UmJnZvaWQgMCE9PWUuaW5mb1N0aWNrZXJNZXRhZGF0YVR5cGU/LmJhdHRlcnlTdGlja2VyTWV0YWRhdGEmJm51bGwhPT1lLmluZm9TdGlja2VyTWV0YWRhdGFUeXBlPy5iYXR0ZXJ5U3RpY2tlck1ldGFkYXRhJiYodC5pbmZvU3RpY2tlck1ldGFkYXRhVHlwZT17JGNhc2U6XCJiYXR0ZXJ5U3RpY2tlck1ldGFkYXRhXCIsYmF0dGVyeVN0aWNrZXJNZXRhZGF0YTpwLkJhdHRlcnlTdGlja2VyTWV0YWRhdGEuZnJvbVBhcnRpYWwoZS5pbmZvU3RpY2tlck1ldGFkYXRhVHlwZS5iYXR0ZXJ5U3RpY2tlck1ldGFkYXRhKX0pLFwibXVzaWNTdGlja2VyTWV0YWRhdGFcIj09PWUuaW5mb1N0aWNrZXJNZXRhZGF0YVR5cGU/LiRjYXNlJiZ2b2lkIDAhPT1lLmluZm9TdGlja2VyTWV0YWRhdGFUeXBlPy5tdXNpY1N0aWNrZXJNZXRhZGF0YSYmbnVsbCE9PWUuaW5mb1N0aWNrZXJNZXRhZGF0YVR5cGU/Lm11c2ljU3RpY2tlck1ldGFkYXRhJiYodC5pbmZvU3RpY2tlck1ldGFkYXRhVHlwZT17JGNhc2U6XCJtdXNpY1N0aWNrZXJNZXRhZGF0YVwiLG11c2ljU3RpY2tlck1ldGFkYXRhOm0uTXVzaWNTdGlja2VyTWV0YWRhdGEuZnJvbVBhcnRpYWwoZS5pbmZvU3RpY2tlck1ldGFkYXRhVHlwZS5tdXNpY1N0aWNrZXJNZXRhZGF0YSl9KSx0fX19LDI1NDMwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkxlbnNUb29sTWV0YWRhdGE9dm9pZCAwO2NvbnN0IGk9cihuKDYyMTAwKSk7dC5MZW5zVG9vbE1ldGFkYXRhPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuITA9PT1lLmlzRnJvbVRvb2xiYXImJnQudWludDMyKDgpLmJvb2woZS5pc0Zyb21Ub29sYmFyKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e2lzRnJvbVRvb2xiYXI6ITF9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9vLmlzRnJvbVRvb2xiYXI9bi5ib29sKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtpc0Zyb21Ub29sYmFyOiExfTtyZXR1cm4gdC5pc0Zyb21Ub29sYmFyPWUuaXNGcm9tVG9vbGJhcj8/ITEsdH19fSw2ODYzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlBsYWNlU3RpY2tlck1ldGFkYXRhPXQuUGxhY2VTdGlja2VyTWV0YWRhdGFfVHlwZT12b2lkIDA7Y29uc3QgaT1uKDUxNTk4KSxvPXIobig2MjEwMCkpO3ZhciBhOyhhPXQuUGxhY2VTdGlja2VyTWV0YWRhdGFfVHlwZXx8KHQuUGxhY2VTdGlja2VyTWV0YWRhdGFfVHlwZT17fSkpW2EuVFlQRV9VTlNQRUNJRklFRD0wXT1cIlRZUEVfVU5TUEVDSUZJRURcIixhW2EuTElHSFQ9MV09XCJMSUdIVFwiLGFbYS5EQVJLPTJdPVwiREFSS1wiLGFbYS5SQUlOQk9XPTNdPVwiUkFJTkJPV1wiLGFbYS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsdC5QbGFjZVN0aWNrZXJNZXRhZGF0YT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLnBsYWNlSWQmJmkuVVVJRC5lbmNvZGUoZS5wbGFjZUlkLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLnR5cGUmJnQudWludDMyKDE2KS5pbnQzMihlLnR5cGUpLFwiXCIhPT1lLm5hbWUmJnQudWludDMyKDI2KS5zdHJpbmcoZS5uYW1lKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGE9e3BsYWNlSWQ6dm9pZCAwLHR5cGU6MCxuYW1lOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLnBsYWNlSWQ9aS5VVUlELmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMjphLnR5cGU9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMzphLm5hbWU9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3BsYWNlSWQ6dm9pZCAwLHR5cGU6MCxuYW1lOlwiXCJ9O3JldHVybiB0LnBsYWNlSWQ9dm9pZCAwIT09ZS5wbGFjZUlkJiZudWxsIT09ZS5wbGFjZUlkP2kuVVVJRC5mcm9tUGFydGlhbChlLnBsYWNlSWQpOnZvaWQgMCx0LnR5cGU9ZS50eXBlPz8wLHQubmFtZT1lLm5hbWU/P1wiXCIsdH19fSw5NDAzNjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5RdWVzdGlvblN0aWNrZXJNZXRhZGF0YT12b2lkIDA7Y29uc3QgaT1yKG4oNjIxMDApKTt0LlF1ZXN0aW9uU3RpY2tlck1ldGFkYXRhPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUucXVlc3Rpb25UZXh0JiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUucXVlc3Rpb25UZXh0KSxcIlwiIT09ZS5hbnN3ZXJUZXh0JiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuYW5zd2VyVGV4dCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXtxdWVzdGlvblRleHQ6XCJcIixhbnN3ZXJUZXh0OlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLnF1ZXN0aW9uVGV4dD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjpvLmFuc3dlclRleHQ9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3F1ZXN0aW9uVGV4dDpcIlwiLGFuc3dlclRleHQ6XCJcIn07cmV0dXJuIHQucXVlc3Rpb25UZXh0PWUucXVlc3Rpb25UZXh0Pz9cIlwiLHQuYW5zd2VyVGV4dD1lLmFuc3dlclRleHQ/P1wiXCIsdH19fSw2NDkyMjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5HZW9tZXRyeT10LkNpcmNsZT10LlJlY3Q9dC5NdWx0aVBvbHlnb249dC5Qb2x5Z29uPXQuTGluZWFyUmluZz10LkxpbmVTdHJpbmc9dC5Qb2ludD10LlVuaXQ9dm9pZCAwO2NvbnN0IGk9cihuKDYyMTAwKSk7dmFyIG87KG89dC5Vbml0fHwodC5Vbml0PXt9KSlbby5VTktOT1dOX1VOSVQ9MF09XCJVTktOT1dOX1VOSVRcIixvW28uTUVURVJTPTFdPVwiTUVURVJTXCIsb1tvLktJTE9NRVRFUlM9Ml09XCJLSUxPTUVURVJTXCIsb1tvLkZFRVQ9M109XCJGRUVUXCIsb1tvLk1JTEVTPTRdPVwiTUlMRVNcIixvW28uVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLHQuUG9pbnQ9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUubGF0JiZ0LnVpbnQzMig5KS5kb3VibGUoZS5sYXQpLDAhPT1lLmxuZyYmdC51aW50MzIoMTcpLmRvdWJsZShlLmxuZyksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXtsYXQ6MCxsbmc6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8ubGF0PW4uZG91YmxlKCk7YnJlYWs7Y2FzZSAyOm8ubG5nPW4uZG91YmxlKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtsYXQ6MCxsbmc6MH07cmV0dXJuIHQubGF0PWUubGF0Pz8wLHQubG5nPWUubG5nPz8wLHR9fSx0LkxpbmVTdHJpbmc9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgciBvZiBlLnBvaW50cyl0LlBvaW50LmVuY29kZShyLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiBufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IG89dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGE9e3BvaW50czpbXX07Zm9yKDtyLnBvczxvOyl7Y29uc3QgZT1yLnVpbnQzMigpO2U+Pj4zPT0xP2EucG9pbnRzLnB1c2godC5Qb2ludC5kZWNvZGUocixyLnVpbnQzMigpKSk6ci5za2lwVHlwZSg3JmUpfXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtwb2ludHM6W119O3JldHVybiBuLnBvaW50cz1lLnBvaW50cz8ubWFwKChlPT50LlBvaW50LmZyb21QYXJ0aWFsKGUpKSl8fFtdLG59fSx0LkxpbmVhclJpbmc9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgciBvZiBlLnBvaW50cyl0LlBvaW50LmVuY29kZShyLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiBufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IG89dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGE9e3BvaW50czpbXX07Zm9yKDtyLnBvczxvOyl7Y29uc3QgZT1yLnVpbnQzMigpO2U+Pj4zPT0xP2EucG9pbnRzLnB1c2godC5Qb2ludC5kZWNvZGUocixyLnVpbnQzMigpKSk6ci5za2lwVHlwZSg3JmUpfXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtwb2ludHM6W119O3JldHVybiBuLnBvaW50cz1lLnBvaW50cz8ubWFwKChlPT50LlBvaW50LmZyb21QYXJ0aWFsKGUpKSl8fFtdLG59fSx0LlBvbHlnb249e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgciBvZiBlLnJpbmdzKXQuTGluZWFyUmluZy5lbmNvZGUocixuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBvPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBhPXtyaW5nczpbXX07Zm9yKDtyLnBvczxvOyl7Y29uc3QgZT1yLnVpbnQzMigpO2U+Pj4zPT0xP2EucmluZ3MucHVzaCh0LkxpbmVhclJpbmcuZGVjb2RlKHIsci51aW50MzIoKSkpOnIuc2tpcFR5cGUoNyZlKX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17cmluZ3M6W119O3JldHVybiBuLnJpbmdzPWUucmluZ3M/Lm1hcCgoZT0+dC5MaW5lYXJSaW5nLmZyb21QYXJ0aWFsKGUpKSl8fFtdLG59fSx0Lk11bHRpUG9seWdvbj17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO2Zvcihjb25zdCByIG9mIGUucG9seWdvbnMpdC5Qb2x5Z29uLmVuY29kZShyLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiBufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IG89dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGE9e3BvbHlnb25zOltdfTtmb3IoO3IucG9zPG87KXtjb25zdCBlPXIudWludDMyKCk7ZT4+PjM9PTE/YS5wb2x5Z29ucy5wdXNoKHQuUG9seWdvbi5kZWNvZGUocixyLnVpbnQzMigpKSk6ci5za2lwVHlwZSg3JmUpfXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtwb2x5Z29uczpbXX07cmV0dXJuIG4ucG9seWdvbnM9ZS5wb2x5Z29ucz8ubWFwKChlPT50LlBvbHlnb24uZnJvbVBhcnRpYWwoZSkpKXx8W10sbn19LHQuUmVjdD17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLnAxJiZ0LlBvaW50LmVuY29kZShlLnAxLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUucDImJnQuUG9pbnQuZW5jb2RlKGUucDIsbi51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBvPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBhPXtwMTp2b2lkIDAscDI6dm9pZCAwfTtmb3IoO3IucG9zPG87KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS5wMT10LlBvaW50LmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMjphLnAyPXQuUG9pbnQuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtwMTp2b2lkIDAscDI6dm9pZCAwfTtyZXR1cm4gbi5wMT12b2lkIDAhPT1lLnAxJiZudWxsIT09ZS5wMT90LlBvaW50LmZyb21QYXJ0aWFsKGUucDEpOnZvaWQgMCxuLnAyPXZvaWQgMCE9PWUucDImJm51bGwhPT1lLnAyP3QuUG9pbnQuZnJvbVBhcnRpYWwoZS5wMik6dm9pZCAwLG59fSx0LkNpcmNsZT17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLnBvaW50JiZ0LlBvaW50LmVuY29kZShlLnBvaW50LG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLnJhZGl1cyYmbi51aW50MzIoMTcpLmRvdWJsZShlLnJhZGl1cyksMCE9PWUudW5pdCYmbi51aW50MzIoMjQpLmludDMyKGUudW5pdCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBvPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBhPXtwb2ludDp2b2lkIDAscmFkaXVzOjAsdW5pdDowfTtmb3IoO3IucG9zPG87KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS5wb2ludD10LlBvaW50LmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMjphLnJhZGl1cz1yLmRvdWJsZSgpO2JyZWFrO2Nhc2UgMzphLnVuaXQ9ci5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17cG9pbnQ6dm9pZCAwLHJhZGl1czowLHVuaXQ6MH07cmV0dXJuIG4ucG9pbnQ9dm9pZCAwIT09ZS5wb2ludCYmbnVsbCE9PWUucG9pbnQ/dC5Qb2ludC5mcm9tUGFydGlhbChlLnBvaW50KTp2b2lkIDAsbi5yYWRpdXM9ZS5yYWRpdXM/PzAsbi51bml0PWUudW5pdD8/MCxufX0sdC5HZW9tZXRyeT17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwicG9pbnRcIj09PWUuZ2VvVmFsdWU/LiRjYXNlJiZ0LlBvaW50LmVuY29kZShlLmdlb1ZhbHVlLnBvaW50LG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLFwibGluZVN0cmluZ1wiPT09ZS5nZW9WYWx1ZT8uJGNhc2UmJnQuTGluZVN0cmluZy5lbmNvZGUoZS5nZW9WYWx1ZS5saW5lU3RyaW5nLG4udWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLFwibGluZWFyUmluZ1wiPT09ZS5nZW9WYWx1ZT8uJGNhc2UmJnQuTGluZWFyUmluZy5lbmNvZGUoZS5nZW9WYWx1ZS5saW5lYXJSaW5nLG4udWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLFwicG9seWdvblwiPT09ZS5nZW9WYWx1ZT8uJGNhc2UmJnQuUG9seWdvbi5lbmNvZGUoZS5nZW9WYWx1ZS5wb2x5Z29uLG4udWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpLFwibXVsdGlwb2x5Z29uXCI9PT1lLmdlb1ZhbHVlPy4kY2FzZSYmdC5NdWx0aVBvbHlnb24uZW5jb2RlKGUuZ2VvVmFsdWUubXVsdGlwb2x5Z29uLG4udWludDMyKDQyKS5mb3JrKCkpLmxkZWxpbSgpLFwicmVjdFwiPT09ZS5nZW9WYWx1ZT8uJGNhc2UmJnQuUmVjdC5lbmNvZGUoZS5nZW9WYWx1ZS5yZWN0LG4udWludDMyKDUwKS5mb3JrKCkpLmxkZWxpbSgpLFwiY2lyY2xlXCI9PT1lLmdlb1ZhbHVlPy4kY2FzZSYmdC5DaXJjbGUuZW5jb2RlKGUuZ2VvVmFsdWUuY2lyY2xlLG4udWludDMyKDU4KS5mb3JrKCkpLmxkZWxpbSgpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgbz12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3QgYT17Z2VvVmFsdWU6dm9pZCAwfTtmb3IoO3IucG9zPG87KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS5nZW9WYWx1ZT17JGNhc2U6XCJwb2ludFwiLHBvaW50OnQuUG9pbnQuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMjphLmdlb1ZhbHVlPXskY2FzZTpcImxpbmVTdHJpbmdcIixsaW5lU3RyaW5nOnQuTGluZVN0cmluZy5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAzOmEuZ2VvVmFsdWU9eyRjYXNlOlwibGluZWFyUmluZ1wiLGxpbmVhclJpbmc6dC5MaW5lYXJSaW5nLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDQ6YS5nZW9WYWx1ZT17JGNhc2U6XCJwb2x5Z29uXCIscG9seWdvbjp0LlBvbHlnb24uZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgNTphLmdlb1ZhbHVlPXskY2FzZTpcIm11bHRpcG9seWdvblwiLG11bHRpcG9seWdvbjp0Lk11bHRpUG9seWdvbi5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA2OmEuZ2VvVmFsdWU9eyRjYXNlOlwicmVjdFwiLHJlY3Q6dC5SZWN0LmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDc6YS5nZW9WYWx1ZT17JGNhc2U6XCJjaXJjbGVcIixjaXJjbGU6dC5DaXJjbGUuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17Z2VvVmFsdWU6dm9pZCAwfTtyZXR1cm5cInBvaW50XCI9PT1lLmdlb1ZhbHVlPy4kY2FzZSYmdm9pZCAwIT09ZS5nZW9WYWx1ZT8ucG9pbnQmJm51bGwhPT1lLmdlb1ZhbHVlPy5wb2ludCYmKG4uZ2VvVmFsdWU9eyRjYXNlOlwicG9pbnRcIixwb2ludDp0LlBvaW50LmZyb21QYXJ0aWFsKGUuZ2VvVmFsdWUucG9pbnQpfSksXCJsaW5lU3RyaW5nXCI9PT1lLmdlb1ZhbHVlPy4kY2FzZSYmdm9pZCAwIT09ZS5nZW9WYWx1ZT8ubGluZVN0cmluZyYmbnVsbCE9PWUuZ2VvVmFsdWU/LmxpbmVTdHJpbmcmJihuLmdlb1ZhbHVlPXskY2FzZTpcImxpbmVTdHJpbmdcIixsaW5lU3RyaW5nOnQuTGluZVN0cmluZy5mcm9tUGFydGlhbChlLmdlb1ZhbHVlLmxpbmVTdHJpbmcpfSksXCJsaW5lYXJSaW5nXCI9PT1lLmdlb1ZhbHVlPy4kY2FzZSYmdm9pZCAwIT09ZS5nZW9WYWx1ZT8ubGluZWFyUmluZyYmbnVsbCE9PWUuZ2VvVmFsdWU/LmxpbmVhclJpbmcmJihuLmdlb1ZhbHVlPXskY2FzZTpcImxpbmVhclJpbmdcIixsaW5lYXJSaW5nOnQuTGluZWFyUmluZy5mcm9tUGFydGlhbChlLmdlb1ZhbHVlLmxpbmVhclJpbmcpfSksXCJwb2x5Z29uXCI9PT1lLmdlb1ZhbHVlPy4kY2FzZSYmdm9pZCAwIT09ZS5nZW9WYWx1ZT8ucG9seWdvbiYmbnVsbCE9PWUuZ2VvVmFsdWU/LnBvbHlnb24mJihuLmdlb1ZhbHVlPXskY2FzZTpcInBvbHlnb25cIixwb2x5Z29uOnQuUG9seWdvbi5mcm9tUGFydGlhbChlLmdlb1ZhbHVlLnBvbHlnb24pfSksXCJtdWx0aXBvbHlnb25cIj09PWUuZ2VvVmFsdWU/LiRjYXNlJiZ2b2lkIDAhPT1lLmdlb1ZhbHVlPy5tdWx0aXBvbHlnb24mJm51bGwhPT1lLmdlb1ZhbHVlPy5tdWx0aXBvbHlnb24mJihuLmdlb1ZhbHVlPXskY2FzZTpcIm11bHRpcG9seWdvblwiLG11bHRpcG9seWdvbjp0Lk11bHRpUG9seWdvbi5mcm9tUGFydGlhbChlLmdlb1ZhbHVlLm11bHRpcG9seWdvbil9KSxcInJlY3RcIj09PWUuZ2VvVmFsdWU/LiRjYXNlJiZ2b2lkIDAhPT1lLmdlb1ZhbHVlPy5yZWN0JiZudWxsIT09ZS5nZW9WYWx1ZT8ucmVjdCYmKG4uZ2VvVmFsdWU9eyRjYXNlOlwicmVjdFwiLHJlY3Q6dC5SZWN0LmZyb21QYXJ0aWFsKGUuZ2VvVmFsdWUucmVjdCl9KSxcImNpcmNsZVwiPT09ZS5nZW9WYWx1ZT8uJGNhc2UmJnZvaWQgMCE9PWUuZ2VvVmFsdWU/LmNpcmNsZSYmbnVsbCE9PWUuZ2VvVmFsdWU/LmNpcmNsZSYmKG4uZ2VvVmFsdWU9eyRjYXNlOlwiY2lyY2xlXCIsY2lyY2xlOnQuQ2lyY2xlLmZyb21QYXJ0aWFsKGUuZ2VvVmFsdWUuY2lyY2xlKX0pLG59fX0sNDI3OTg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQW55PXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO2Z1bmN0aW9uIG8oKXtyZXR1cm57dHlwZVVybDpcIlwiLHZhbHVlOm5ldyBVaW50OEFycmF5fX10LkFueT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnR5cGVVcmwmJnQudWludDMyKDEwKS5zdHJpbmcoZS50eXBlVXJsKSwwIT09ZS52YWx1ZS5sZW5ndGgmJnQudWludDMyKDE4KS5ieXRlcyhlLnZhbHVlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGE9bygpO2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLnR5cGVVcmw9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6YS52YWx1ZT1uLmJ5dGVzKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PW8oKTtyZXR1cm4gdC50eXBlVXJsPWUudHlwZVVybD8/XCJcIix0LnZhbHVlPWUudmFsdWU/P25ldyBVaW50OEFycmF5LHR9fX0sMjc5Mjg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRHVyYXRpb249dm9pZCAwO2NvbnN0IGk9cihuKDQxNTgzKSksbz1yKG4oNjIxMDApKTt0LkR1cmF0aW9uPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCIwXCIhPT1lLnNlY29uZHMmJnQudWludDMyKDgpLmludDY0KGUuc2Vjb25kcyksMCE9PWUubmFub3MmJnQudWludDMyKDE2KS5pbnQzMihlLm5hbm9zKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3NlY29uZHM6XCIwXCIsbmFub3M6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuc2Vjb25kcz1uLmludDY0KCkudG9TdHJpbmcoKTticmVhaztjYXNlIDI6aS5uYW5vcz1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtzZWNvbmRzOlwiMFwiLG5hbm9zOjB9O3JldHVybiB0LnNlY29uZHM9ZS5zZWNvbmRzPz9cIjBcIix0Lm5hbm9zPWUubmFub3M/PzAsdH19LG8uZGVmYXVsdC51dGlsLkxvbmchPT1pLmRlZmF1bHQmJihvLmRlZmF1bHQudXRpbC5Mb25nPWkuZGVmYXVsdCxvLmRlZmF1bHQuY29uZmlndXJlKCkpfSw4MTQ0NTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5FbXB0eT12b2lkIDA7Y29uc3QgaT1yKG4oNjIxMDApKTt0LkVtcHR5PXtlbmNvZGUoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpfSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtuLnNraXBUeXBlKDcmZSl9cmV0dXJue319LGZyb21QYXJ0aWFsOmU9Pih7fSl9fSwyNDUyODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5UaW1lc3RhbXA9dm9pZCAwO2NvbnN0IGk9cihuKDQxNTgzKSksbz1yKG4oNjIxMDApKTt0LlRpbWVzdGFtcD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiMFwiIT09ZS5zZWNvbmRzJiZ0LnVpbnQzMig4KS5pbnQ2NChlLnNlY29uZHMpLDAhPT1lLm5hbm9zJiZ0LnVpbnQzMigxNikuaW50MzIoZS5uYW5vcyksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtzZWNvbmRzOlwiMFwiLG5hbm9zOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnNlY29uZHM9bi5pbnQ2NCgpLnRvU3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkubmFub3M9bi5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17c2Vjb25kczpcIjBcIixuYW5vczowfTtyZXR1cm4gdC5zZWNvbmRzPWUuc2Vjb25kcz8/XCIwXCIsdC5uYW5vcz1lLm5hbm9zPz8wLHR9fSxvLmRlZmF1bHQudXRpbC5Mb25nIT09aS5kZWZhdWx0JiYoby5kZWZhdWx0LnV0aWwuTG9uZz1pLmRlZmF1bHQsby5kZWZhdWx0LmNvbmZpZ3VyZSgpKX0sNTMwNTY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQnl0ZXNWYWx1ZT10LlN0cmluZ1ZhbHVlPXQuQm9vbFZhbHVlPXQuVUludDMyVmFsdWU9dC5JbnQzMlZhbHVlPXQuVUludDY0VmFsdWU9dC5JbnQ2NFZhbHVlPXQuRmxvYXRWYWx1ZT10LkRvdWJsZVZhbHVlPXZvaWQgMDtjb25zdCBpPXIobig0MTU4MykpLG89cihuKDYyMTAwKSk7ZnVuY3Rpb24gYSgpe3JldHVybnt2YWx1ZTpuZXcgVWludDhBcnJheX19ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZS50b1N0cmluZygpfXQuRG91YmxlVmFsdWU9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUudmFsdWUmJnQudWludDMyKDkpLmRvdWJsZShlLnZhbHVlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3ZhbHVlOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLnZhbHVlPW4uZG91YmxlKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt2YWx1ZTowfTtyZXR1cm4gdC52YWx1ZT1lLnZhbHVlPz8wLHR9fSx0LkZsb2F0VmFsdWU9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUudmFsdWUmJnQudWludDMyKDEzKS5mbG9hdChlLnZhbHVlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3ZhbHVlOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLnZhbHVlPW4uZmxvYXQoKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3ZhbHVlOjB9O3JldHVybiB0LnZhbHVlPWUudmFsdWU/PzAsdH19LHQuSW50NjRWYWx1ZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiMFwiIT09ZS52YWx1ZSYmdC51aW50MzIoOCkuaW50NjQoZS52YWx1ZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXt2YWx1ZTpcIjBcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2kudmFsdWU9cyhuLmludDY0KCkpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dmFsdWU6XCIwXCJ9O3JldHVybiB0LnZhbHVlPWUudmFsdWU/P1wiMFwiLHR9fSx0LlVJbnQ2NFZhbHVlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCIwXCIhPT1lLnZhbHVlJiZ0LnVpbnQzMig4KS51aW50NjQoZS52YWx1ZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXt2YWx1ZTpcIjBcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2kudmFsdWU9cyhuLnVpbnQ2NCgpKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3ZhbHVlOlwiMFwifTtyZXR1cm4gdC52YWx1ZT1lLnZhbHVlPz9cIjBcIix0fX0sdC5JbnQzMlZhbHVlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLnZhbHVlJiZ0LnVpbnQzMig4KS5pbnQzMihlLnZhbHVlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3ZhbHVlOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLnZhbHVlPW4uaW50MzIoKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3ZhbHVlOjB9O3JldHVybiB0LnZhbHVlPWUudmFsdWU/PzAsdH19LHQuVUludDMyVmFsdWU9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUudmFsdWUmJnQudWludDMyKDgpLnVpbnQzMihlLnZhbHVlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3ZhbHVlOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLnZhbHVlPW4udWludDMyKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt2YWx1ZTowfTtyZXR1cm4gdC52YWx1ZT1lLnZhbHVlPz8wLHR9fSx0LkJvb2xWYWx1ZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiEwPT09ZS52YWx1ZSYmdC51aW50MzIoOCkuYm9vbChlLnZhbHVlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3ZhbHVlOiExfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/aS52YWx1ZT1uLmJvb2woKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3ZhbHVlOiExfTtyZXR1cm4gdC52YWx1ZT1lLnZhbHVlPz8hMSx0fX0sdC5TdHJpbmdWYWx1ZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnZhbHVlJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUudmFsdWUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17dmFsdWU6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2kudmFsdWU9bi5zdHJpbmcoKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3ZhbHVlOlwiXCJ9O3JldHVybiB0LnZhbHVlPWUudmFsdWU/P1wiXCIsdH19LHQuQnl0ZXNWYWx1ZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS52YWx1ZS5sZW5ndGgmJnQudWludDMyKDEwKS5ieXRlcyhlLnZhbHVlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9YSgpO2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLnZhbHVlPW4uYnl0ZXMoKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9YSgpO3JldHVybiB0LnZhbHVlPWUudmFsdWU/P25ldyBVaW50OEFycmF5LHR9fSxvLmRlZmF1bHQudXRpbC5Mb25nIT09aS5kZWZhdWx0JiYoby5kZWZhdWx0LnV0aWwuTG9uZz1pLmRlZmF1bHQsby5kZWZhdWx0LmNvbmZpZ3VyZSgpKX0sMjEzMTE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuR3JpZFByb3BlcnRpZXM9dm9pZCAwO2NvbnN0IGk9cihuKDYyMTAwKSk7dC5HcmlkUHJvcGVydGllcz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS53aWR0aCYmdC51aW50MzIoOCkudWludDMyKGUud2lkdGgpLDAhPT1lLmhlaWdodCYmdC51aW50MzIoMTYpLnVpbnQzMihlLmhlaWdodCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXt3aWR0aDowLGhlaWdodDowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by53aWR0aD1uLnVpbnQzMigpO2JyZWFrO2Nhc2UgMjpvLmhlaWdodD1uLnVpbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17d2lkdGg6MCxoZWlnaHQ6MH07cmV0dXJuIHQud2lkdGg9ZS53aWR0aD8/MCx0LmhlaWdodD1lLmhlaWdodD8/MCx0fX19LDk5MDczOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlBhdGhzPXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO3QuUGF0aHM9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTt0LnVpbnQzMigxMCkuZm9yaygpO2Zvcihjb25zdCBuIG9mIGUuZGVsdGFMZW5ndGhzKXQudWludDMyKG4pO3QubGRlbGltKCksdC51aW50MzIoMTgpLmZvcmsoKTtmb3IoY29uc3QgbiBvZiBlLnhWYWx1ZXMpdC5zaW50MzIobik7dC5sZGVsaW0oKSx0LnVpbnQzMigyNikuZm9yaygpO2Zvcihjb25zdCBuIG9mIGUueVZhbHVlcyl0LnNpbnQzMihuKTtyZXR1cm4gdC5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e2RlbHRhTGVuZ3RoczpbXSx4VmFsdWVzOltdLHlWYWx1ZXM6W119O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppZigyPT0oNyZlKSl7Y29uc3QgZT1uLnVpbnQzMigpK24ucG9zO2Zvcig7bi5wb3M8ZTspby5kZWx0YUxlbmd0aHMucHVzaChuLnVpbnQzMigpKX1lbHNlIG8uZGVsdGFMZW5ndGhzLnB1c2gobi51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOmlmKDI9PSg3JmUpKXtjb25zdCBlPW4udWludDMyKCkrbi5wb3M7Zm9yKDtuLnBvczxlOylvLnhWYWx1ZXMucHVzaChuLnNpbnQzMigpKX1lbHNlIG8ueFZhbHVlcy5wdXNoKG4uc2ludDMyKCkpO2JyZWFrO2Nhc2UgMzppZigyPT0oNyZlKSl7Y29uc3QgZT1uLnVpbnQzMigpK24ucG9zO2Zvcig7bi5wb3M8ZTspby55VmFsdWVzLnB1c2gobi5zaW50MzIoKSl9ZWxzZSBvLnlWYWx1ZXMucHVzaChuLnNpbnQzMigpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2RlbHRhTGVuZ3RoczpbXSx4VmFsdWVzOltdLHlWYWx1ZXM6W119O3JldHVybiB0LmRlbHRhTGVuZ3Rocz1lLmRlbHRhTGVuZ3Rocz8ubWFwKChlPT5lKSl8fFtdLHQueFZhbHVlcz1lLnhWYWx1ZXM/Lm1hcCgoZT0+ZSkpfHxbXSx0LnlWYWx1ZXM9ZS55VmFsdWVzPy5tYXAoKGU9PmUpKXx8W10sdH19fSw1NjE5MzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5UaW1lZnJhbWU9dm9pZCAwO2NvbnN0IGk9cihuKDQxNTgzKSksbz1yKG4oNjIxMDApKTtmdW5jdGlvbiBhKGUpe3JldHVybiBlLnRvU3RyaW5nKCl9dC5UaW1lZnJhbWU9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIjBcIiE9PWUuc3RhcnRUaW1lJiZ0LnVpbnQzMig4KS51aW50NjQoZS5zdGFydFRpbWUpLFwiMFwiIT09ZS5kdXJhdGlvbiYmdC51aW50MzIoMTYpLnVpbnQ2NChlLmR1cmF0aW9uKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3N0YXJ0VGltZTpcIjBcIixkdXJhdGlvbjpcIjBcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuc3RhcnRUaW1lPWEobi51aW50NjQoKSk7YnJlYWs7Y2FzZSAyOmkuZHVyYXRpb249YShuLnVpbnQ2NCgpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3N0YXJ0VGltZTpcIjBcIixkdXJhdGlvbjpcIjBcIn07cmV0dXJuIHQuc3RhcnRUaW1lPWUuc3RhcnRUaW1lPz9cIjBcIix0LmR1cmF0aW9uPWUuZHVyYXRpb24/P1wiMFwiLHR9fSxvLmRlZmF1bHQudXRpbC5Mb25nIT09aS5kZWZhdWx0JiYoby5kZWZhdWx0LnV0aWwuTG9uZz1pLmRlZmF1bHQsby5kZWZhdWx0LmNvbmZpZ3VyZSgpKX0sMzA5MDk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuVHJhbnNmb3Jtcz12b2lkIDA7Y29uc3QgaT1yKG4oNjIxMDApKTt0LlRyYW5zZm9ybXM9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTt0LnVpbnQzMigxMCkuZm9yaygpO2Zvcihjb25zdCBuIG9mIGUuc2NhbGVzKXQuc2ludDMyKG4pO3QubGRlbGltKCksdC51aW50MzIoMTgpLmZvcmsoKTtmb3IoY29uc3QgbiBvZiBlLnhDZW50ZXJzKXQuc2ludDMyKG4pO3QubGRlbGltKCksdC51aW50MzIoMjYpLmZvcmsoKTtmb3IoY29uc3QgbiBvZiBlLnlDZW50ZXJzKXQuc2ludDMyKG4pO3QubGRlbGltKCksdC51aW50MzIoMzQpLmZvcmsoKTtmb3IoY29uc3QgbiBvZiBlLnJvdGF0aW9ucyl0LnNpbnQzMihuKTt0LmxkZWxpbSgpLHQudWludDMyKDQyKS5mb3JrKCk7Zm9yKGNvbnN0IG4gb2YgZS50aW1lc3RhbXBzKXQudWludDMyKG4pO3JldHVybiB0LmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17c2NhbGVzOltdLHhDZW50ZXJzOltdLHlDZW50ZXJzOltdLHJvdGF0aW9uczpbXSx0aW1lc3RhbXBzOltdfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aWYoMj09KDcmZSkpe2NvbnN0IGU9bi51aW50MzIoKStuLnBvcztmb3IoO24ucG9zPGU7KW8uc2NhbGVzLnB1c2gobi5zaW50MzIoKSl9ZWxzZSBvLnNjYWxlcy5wdXNoKG4uc2ludDMyKCkpO2JyZWFrO2Nhc2UgMjppZigyPT0oNyZlKSl7Y29uc3QgZT1uLnVpbnQzMigpK24ucG9zO2Zvcig7bi5wb3M8ZTspby54Q2VudGVycy5wdXNoKG4uc2ludDMyKCkpfWVsc2Ugby54Q2VudGVycy5wdXNoKG4uc2ludDMyKCkpO2JyZWFrO2Nhc2UgMzppZigyPT0oNyZlKSl7Y29uc3QgZT1uLnVpbnQzMigpK24ucG9zO2Zvcig7bi5wb3M8ZTspby55Q2VudGVycy5wdXNoKG4uc2ludDMyKCkpfWVsc2Ugby55Q2VudGVycy5wdXNoKG4uc2ludDMyKCkpO2JyZWFrO2Nhc2UgNDppZigyPT0oNyZlKSl7Y29uc3QgZT1uLnVpbnQzMigpK24ucG9zO2Zvcig7bi5wb3M8ZTspby5yb3RhdGlvbnMucHVzaChuLnNpbnQzMigpKX1lbHNlIG8ucm90YXRpb25zLnB1c2gobi5zaW50MzIoKSk7YnJlYWs7Y2FzZSA1OmlmKDI9PSg3JmUpKXtjb25zdCBlPW4udWludDMyKCkrbi5wb3M7Zm9yKDtuLnBvczxlOylvLnRpbWVzdGFtcHMucHVzaChuLnVpbnQzMigpKX1lbHNlIG8udGltZXN0YW1wcy5wdXNoKG4udWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17c2NhbGVzOltdLHhDZW50ZXJzOltdLHlDZW50ZXJzOltdLHJvdGF0aW9uczpbXSx0aW1lc3RhbXBzOltdfTtyZXR1cm4gdC5zY2FsZXM9ZS5zY2FsZXM/Lm1hcCgoZT0+ZSkpfHxbXSx0LnhDZW50ZXJzPWUueENlbnRlcnM/Lm1hcCgoZT0+ZSkpfHxbXSx0LnlDZW50ZXJzPWUueUNlbnRlcnM/Lm1hcCgoZT0+ZSkpfHxbXSx0LnJvdGF0aW9ucz1lLnJvdGF0aW9ucz8ubWFwKChlPT5lKSl8fFtdLHQudGltZXN0YW1wcz1lLnRpbWVzdGFtcHM/Lm1hcCgoZT0+ZSkpfHxbXSx0fX19LDk1NDI0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlJpY2hTdG9yeURlZXBMaW5rQXR0YWNobWVudD10LkFwcEluc3RhbGxBdHRhY2htZW50PXQuV2ViVmlld0F0dGFjaG1lbnQ9dC5Mb25nRm9ybVZpZGVvQXR0YWNobWVudD10LkF0dGFjaG1lbnQ9dC5SaWNoU3RvcnlEZWVwTGlua0F0dGFjaG1lbnRfRGVlcExpbmtGYWxsYmFja1R5cGU9dC5SaWNoU3RvcnlEZWVwTGlua0F0dGFjaG1lbnRfVGFwTGlua0FjdGlvblRleHQ9dC5Mb25nRm9ybVZpZGVvQXR0YWNobWVudF9WaWRlb1BsYXRmb3JtPXZvaWQgMDtjb25zdCBpPXIobig0MTU4MykpLG89cihuKDYyMTAwKSk7dmFyIGEscyxjOyhjPXQuTG9uZ0Zvcm1WaWRlb0F0dGFjaG1lbnRfVmlkZW9QbGF0Zm9ybXx8KHQuTG9uZ0Zvcm1WaWRlb0F0dGFjaG1lbnRfVmlkZW9QbGF0Zm9ybT17fSkpW2MuUExBVEZPUk1fVU5TRVQ9MF09XCJQTEFURk9STV9VTlNFVFwiLGNbYy5CUklHSFRDT1ZFPTFdPVwiQlJJR0hUQ09WRVwiLGNbYy5TTkFQQ0hBVD0yXT1cIlNOQVBDSEFUXCIsY1tjLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwocz10LlJpY2hTdG9yeURlZXBMaW5rQXR0YWNobWVudF9UYXBMaW5rQWN0aW9uVGV4dHx8KHQuUmljaFN0b3J5RGVlcExpbmtBdHRhY2htZW50X1RhcExpbmtBY3Rpb25UZXh0PXt9KSlbcy5UQVBfVE9fTElOS19VTlNFVD0wXT1cIlRBUF9UT19MSU5LX1VOU0VUXCIsc1tzLlRBUF9UT19PUEVOPTFdPVwiVEFQX1RPX09QRU5cIixzW3MuVEFQX1RPX1VOTE9DSz0yXT1cIlRBUF9UT19VTkxPQ0tcIixzW3MuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLChhPXQuUmljaFN0b3J5RGVlcExpbmtBdHRhY2htZW50X0RlZXBMaW5rRmFsbGJhY2tUeXBlfHwodC5SaWNoU3RvcnlEZWVwTGlua0F0dGFjaG1lbnRfRGVlcExpbmtGYWxsYmFja1R5cGU9e30pKVthLkRFRVBfTElOS19GQUxMQkFDS19VTlNFVD0wXT1cIkRFRVBfTElOS19GQUxMQkFDS19VTlNFVFwiLGFbYS5BUFBfSU5TVEFMTD0xXT1cIkFQUF9JTlNUQUxMXCIsYVthLldFQl9TSVRFPTJdPVwiV0VCX1NJVEVcIixhW2EuRVhURVJOQUxfQlJPV1NFUj0zXT1cIkVYVEVSTkFMX0JST1dTRVJcIixhW2EuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLHQuQXR0YWNobWVudD17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5jdGFUZXh0JiZuLnVpbnQzMigxNikuaW50MzIoZS5jdGFUZXh0KSxcIlwiIT09ZS5sb2NhbGl6ZWRDdGFUZXh0JiZuLnVpbnQzMigyNikuc3RyaW5nKGUubG9jYWxpemVkQ3RhVGV4dCksXCJsb25nRm9ybVZpZGVvXCI9PT1lLmF0dGFjaG1lbnQ/LiRjYXNlJiZ0LkxvbmdGb3JtVmlkZW9BdHRhY2htZW50LmVuY29kZShlLmF0dGFjaG1lbnQubG9uZ0Zvcm1WaWRlbyxuLnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKSxcIndlYlZpZXdcIj09PWUuYXR0YWNobWVudD8uJGNhc2UmJnQuV2ViVmlld0F0dGFjaG1lbnQuZW5jb2RlKGUuYXR0YWNobWVudC53ZWJWaWV3LG4udWludDMyKDQyKS5mb3JrKCkpLmxkZWxpbSgpLFwiYXBwSW5zdGFsbFwiPT09ZS5hdHRhY2htZW50Py4kY2FzZSYmdC5BcHBJbnN0YWxsQXR0YWNobWVudC5lbmNvZGUoZS5hdHRhY2htZW50LmFwcEluc3RhbGwsbi51aW50MzIoNTApLmZvcmsoKSkubGRlbGltKCksXCJkZWVwTGlua1wiPT09ZS5hdHRhY2htZW50Py4kY2FzZSYmdC5SaWNoU3RvcnlEZWVwTGlua0F0dGFjaG1lbnQuZW5jb2RlKGUuYXR0YWNobWVudC5kZWVwTGluayxuLnVpbnQzMig1OCkuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGE9e2N0YVRleHQ6MCxsb2NhbGl6ZWRDdGFUZXh0OlwiXCIsYXR0YWNobWVudDp2b2lkIDB9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMjphLmN0YVRleHQ9ci5pbnQzMigpO2JyZWFrO2Nhc2UgMzphLmxvY2FsaXplZEN0YVRleHQ9ci5zdHJpbmcoKTticmVhaztjYXNlIDQ6YS5hdHRhY2htZW50PXskY2FzZTpcImxvbmdGb3JtVmlkZW9cIixsb25nRm9ybVZpZGVvOnQuTG9uZ0Zvcm1WaWRlb0F0dGFjaG1lbnQuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgNTphLmF0dGFjaG1lbnQ9eyRjYXNlOlwid2ViVmlld1wiLHdlYlZpZXc6dC5XZWJWaWV3QXR0YWNobWVudC5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA2OmEuYXR0YWNobWVudD17JGNhc2U6XCJhcHBJbnN0YWxsXCIsYXBwSW5zdGFsbDp0LkFwcEluc3RhbGxBdHRhY2htZW50LmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDc6YS5hdHRhY2htZW50PXskY2FzZTpcImRlZXBMaW5rXCIsZGVlcExpbms6dC5SaWNoU3RvcnlEZWVwTGlua0F0dGFjaG1lbnQuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17Y3RhVGV4dDowLGxvY2FsaXplZEN0YVRleHQ6XCJcIixhdHRhY2htZW50OnZvaWQgMH07cmV0dXJuIG4uY3RhVGV4dD1lLmN0YVRleHQ/PzAsbi5sb2NhbGl6ZWRDdGFUZXh0PWUubG9jYWxpemVkQ3RhVGV4dD8/XCJcIixcImxvbmdGb3JtVmlkZW9cIj09PWUuYXR0YWNobWVudD8uJGNhc2UmJnZvaWQgMCE9PWUuYXR0YWNobWVudD8ubG9uZ0Zvcm1WaWRlbyYmbnVsbCE9PWUuYXR0YWNobWVudD8ubG9uZ0Zvcm1WaWRlbyYmKG4uYXR0YWNobWVudD17JGNhc2U6XCJsb25nRm9ybVZpZGVvXCIsbG9uZ0Zvcm1WaWRlbzp0LkxvbmdGb3JtVmlkZW9BdHRhY2htZW50LmZyb21QYXJ0aWFsKGUuYXR0YWNobWVudC5sb25nRm9ybVZpZGVvKX0pLFwid2ViVmlld1wiPT09ZS5hdHRhY2htZW50Py4kY2FzZSYmdm9pZCAwIT09ZS5hdHRhY2htZW50Py53ZWJWaWV3JiZudWxsIT09ZS5hdHRhY2htZW50Py53ZWJWaWV3JiYobi5hdHRhY2htZW50PXskY2FzZTpcIndlYlZpZXdcIix3ZWJWaWV3OnQuV2ViVmlld0F0dGFjaG1lbnQuZnJvbVBhcnRpYWwoZS5hdHRhY2htZW50LndlYlZpZXcpfSksXCJhcHBJbnN0YWxsXCI9PT1lLmF0dGFjaG1lbnQ/LiRjYXNlJiZ2b2lkIDAhPT1lLmF0dGFjaG1lbnQ/LmFwcEluc3RhbGwmJm51bGwhPT1lLmF0dGFjaG1lbnQ/LmFwcEluc3RhbGwmJihuLmF0dGFjaG1lbnQ9eyRjYXNlOlwiYXBwSW5zdGFsbFwiLGFwcEluc3RhbGw6dC5BcHBJbnN0YWxsQXR0YWNobWVudC5mcm9tUGFydGlhbChlLmF0dGFjaG1lbnQuYXBwSW5zdGFsbCl9KSxcImRlZXBMaW5rXCI9PT1lLmF0dGFjaG1lbnQ/LiRjYXNlJiZ2b2lkIDAhPT1lLmF0dGFjaG1lbnQ/LmRlZXBMaW5rJiZudWxsIT09ZS5hdHRhY2htZW50Py5kZWVwTGluayYmKG4uYXR0YWNobWVudD17JGNhc2U6XCJkZWVwTGlua1wiLGRlZXBMaW5rOnQuUmljaFN0b3J5RGVlcExpbmtBdHRhY2htZW50LmZyb21QYXJ0aWFsKGUuYXR0YWNobWVudC5kZWVwTGluayl9KSxufX0sdC5Mb25nRm9ybVZpZGVvQXR0YWNobWVudD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnZpZGVvSWQmJnQudWludDMyKDEwKS5zdHJpbmcoZS52aWRlb0lkKSwwIT09ZS52aWRlb1BsYXRmb3JtJiZ0LnVpbnQzMigxNikuaW50MzIoZS52aWRlb1BsYXRmb3JtKSxcIlwiIT09ZS52aWRlb1VybCYmdC51aW50MzIoMjYpLnN0cmluZyhlLnZpZGVvVXJsKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3ZpZGVvSWQ6XCJcIix2aWRlb1BsYXRmb3JtOjAsdmlkZW9Vcmw6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkudmlkZW9JZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLnZpZGVvUGxhdGZvcm09bi5pbnQzMigpO2JyZWFrO2Nhc2UgMzppLnZpZGVvVXJsPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt2aWRlb0lkOlwiXCIsdmlkZW9QbGF0Zm9ybTowLHZpZGVvVXJsOlwiXCJ9O3JldHVybiB0LnZpZGVvSWQ9ZS52aWRlb0lkPz9cIlwiLHQudmlkZW9QbGF0Zm9ybT1lLnZpZGVvUGxhdGZvcm0/PzAsdC52aWRlb1VybD1lLnZpZGVvVXJsPz9cIlwiLHR9fSx0LldlYlZpZXdBdHRhY2htZW50PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUud2ViVmlld1VybCYmdC51aW50MzIoMTApLnN0cmluZyhlLndlYlZpZXdVcmwpLCEwPT09ZS5zaG91bGRBdXRvRmlsbCYmdC51aW50MzIoMTYpLmJvb2woZS5zaG91bGRBdXRvRmlsbCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXt3ZWJWaWV3VXJsOlwiXCIsc2hvdWxkQXV0b0ZpbGw6ITF9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLndlYlZpZXdVcmw9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS5zaG91bGRBdXRvRmlsbD1uLmJvb2woKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3dlYlZpZXdVcmw6XCJcIixzaG91bGRBdXRvRmlsbDohMX07cmV0dXJuIHQud2ViVmlld1VybD1lLndlYlZpZXdVcmw/P1wiXCIsdC5zaG91bGRBdXRvRmlsbD1lLnNob3VsZEF1dG9GaWxsPz8hMSx0fX0sdC5BcHBJbnN0YWxsQXR0YWNobWVudD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmFwcE5hbWUmJnQudWludDMyKDEwKS5zdHJpbmcoZS5hcHBOYW1lKSxcIlwiIT09ZS5pb3NBcHBJZCYmdC51aW50MzIoMTgpLnN0cmluZyhlLmlvc0FwcElkKSxcIlwiIT09ZS5hbmRyb2lkQXBwVXJsJiZ0LnVpbnQzMigyNikuc3RyaW5nKGUuYW5kcm9pZEFwcFVybCksXCJcIiE9PWUuYXBwSWNvblVybCYmdC51aW50MzIoMzQpLnN0cmluZyhlLmFwcEljb25VcmwpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17YXBwTmFtZTpcIlwiLGlvc0FwcElkOlwiXCIsYW5kcm9pZEFwcFVybDpcIlwiLGFwcEljb25Vcmw6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuYXBwTmFtZT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLmlvc0FwcElkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmkuYW5kcm9pZEFwcFVybD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNDppLmFwcEljb25Vcmw9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2FwcE5hbWU6XCJcIixpb3NBcHBJZDpcIlwiLGFuZHJvaWRBcHBVcmw6XCJcIixhcHBJY29uVXJsOlwiXCJ9O3JldHVybiB0LmFwcE5hbWU9ZS5hcHBOYW1lPz9cIlwiLHQuaW9zQXBwSWQ9ZS5pb3NBcHBJZD8/XCJcIix0LmFuZHJvaWRBcHBVcmw9ZS5hbmRyb2lkQXBwVXJsPz9cIlwiLHQuYXBwSWNvblVybD1lLmFwcEljb25Vcmw/P1wiXCIsdH19LHQuUmljaFN0b3J5RGVlcExpbmtBdHRhY2htZW50PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUudXJpJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUudXJpKSwhMD09PWUuaW5BcHBNb2RlJiZ0LnVpbnQzMigxNikuYm9vbChlLmluQXBwTW9kZSksXCJcIiE9PWUuYXBwVGl0bGUmJnQudWludDMyKDI2KS5zdHJpbmcoZS5hcHBUaXRsZSksXCJcIiE9PWUuaW5BcHBCYWNrZ3JvdW5kJiZ0LnVpbnQzMigzNCkuc3RyaW5nKGUuaW5BcHBCYWNrZ3JvdW5kKSxcIlwiIT09ZS5pb3NBcHBJY29uJiZ0LnVpbnQzMig0Mikuc3RyaW5nKGUuaW9zQXBwSWNvbiksXCIwXCIhPT1lLmlvc0FwcElkJiZ0LnVpbnQzMig0OCkuaW50NjQoZS5pb3NBcHBJZCksXCJcIiE9PWUuYW5kcm9pZEFwcEljb24mJnQudWludDMyKDU4KS5zdHJpbmcoZS5hbmRyb2lkQXBwSWNvbiksXCJcIiE9PWUuYW5kcm9pZFBhY2thZ2VJZCYmdC51aW50MzIoNjYpLnN0cmluZyhlLmFuZHJvaWRQYWNrYWdlSWQpLDAhPT1lLnRhcExpbmtBY3Rpb25UZXh0JiZ0LnVpbnQzMig3MikuaW50MzIoZS50YXBMaW5rQWN0aW9uVGV4dCksXCJcIiE9PWUuZGVlcExpbmtXZWJGYWxsYmFja1VybCYmdC51aW50MzIoODIpLnN0cmluZyhlLmRlZXBMaW5rV2ViRmFsbGJhY2tVcmwpLDAhPT1lLmRlZXBMaW5rRmFsbGJhY2tUeXBlJiZ0LnVpbnQzMig4OCkuaW50MzIoZS5kZWVwTGlua0ZhbGxiYWNrVHlwZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXt1cmk6XCJcIixpbkFwcE1vZGU6ITEsYXBwVGl0bGU6XCJcIixpbkFwcEJhY2tncm91bmQ6XCJcIixpb3NBcHBJY29uOlwiXCIsaW9zQXBwSWQ6XCIwXCIsYW5kcm9pZEFwcEljb246XCJcIixhbmRyb2lkUGFja2FnZUlkOlwiXCIsdGFwTGlua0FjdGlvblRleHQ6MCxkZWVwTGlua1dlYkZhbGxiYWNrVXJsOlwiXCIsZGVlcExpbmtGYWxsYmFja1R5cGU6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkudXJpPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkuaW5BcHBNb2RlPW4uYm9vbCgpO2JyZWFrO2Nhc2UgMzppLmFwcFRpdGxlPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA0OmkuaW5BcHBCYWNrZ3JvdW5kPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA1OmkuaW9zQXBwSWNvbj1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNjppLmlvc0FwcElkPW4uaW50NjQoKS50b1N0cmluZygpO2JyZWFrO2Nhc2UgNzppLmFuZHJvaWRBcHBJY29uPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA4OmkuYW5kcm9pZFBhY2thZ2VJZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgOTppLnRhcExpbmtBY3Rpb25UZXh0PW4uaW50MzIoKTticmVhaztjYXNlIDEwOmkuZGVlcExpbmtXZWJGYWxsYmFja1VybD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMTE6aS5kZWVwTGlua0ZhbGxiYWNrVHlwZT1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt1cmk6XCJcIixpbkFwcE1vZGU6ITEsYXBwVGl0bGU6XCJcIixpbkFwcEJhY2tncm91bmQ6XCJcIixpb3NBcHBJY29uOlwiXCIsaW9zQXBwSWQ6XCIwXCIsYW5kcm9pZEFwcEljb246XCJcIixhbmRyb2lkUGFja2FnZUlkOlwiXCIsdGFwTGlua0FjdGlvblRleHQ6MCxkZWVwTGlua1dlYkZhbGxiYWNrVXJsOlwiXCIsZGVlcExpbmtGYWxsYmFja1R5cGU6MH07cmV0dXJuIHQudXJpPWUudXJpPz9cIlwiLHQuaW5BcHBNb2RlPWUuaW5BcHBNb2RlPz8hMSx0LmFwcFRpdGxlPWUuYXBwVGl0bGU/P1wiXCIsdC5pbkFwcEJhY2tncm91bmQ9ZS5pbkFwcEJhY2tncm91bmQ/P1wiXCIsdC5pb3NBcHBJY29uPWUuaW9zQXBwSWNvbj8/XCJcIix0Lmlvc0FwcElkPWUuaW9zQXBwSWQ/P1wiMFwiLHQuYW5kcm9pZEFwcEljb249ZS5hbmRyb2lkQXBwSWNvbj8/XCJcIix0LmFuZHJvaWRQYWNrYWdlSWQ9ZS5hbmRyb2lkUGFja2FnZUlkPz9cIlwiLHQudGFwTGlua0FjdGlvblRleHQ9ZS50YXBMaW5rQWN0aW9uVGV4dD8/MCx0LmRlZXBMaW5rV2ViRmFsbGJhY2tVcmw9ZS5kZWVwTGlua1dlYkZhbGxiYWNrVXJsPz9cIlwiLHQuZGVlcExpbmtGYWxsYmFja1R5cGU9ZS5kZWVwTGlua0ZhbGxiYWNrVHlwZT8/MCx0fX0sby5kZWZhdWx0LnV0aWwuTG9uZyE9PWkuZGVmYXVsdCYmKG8uZGVmYXVsdC51dGlsLkxvbmc9aS5kZWZhdWx0LG8uZGVmYXVsdC5jb25maWd1cmUoKSl9LDUwMjM0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlNIQTI1Nj12b2lkIDA7Y29uc3QgaT1yKG4oNjIxMDApKTtmdW5jdGlvbiBvKCl7cmV0dXJue2RhdGE6bmV3IFVpbnQ4QXJyYXl9fXQuU0hBMjU2PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLmRhdGEubGVuZ3RoJiZ0LnVpbnQzMigxMCkuYnl0ZXMoZS5kYXRhKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGE9bygpO2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9hLmRhdGE9bi5ieXRlcygpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD1vKCk7cmV0dXJuIHQuZGF0YT1lLmRhdGE/P25ldyBVaW50OEFycmF5LHR9fX0sNTc5NjY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQXBwbGljYWJsZUNvbnRleHQ9dC5BcHBsaWNhYmxlQ29udGV4dF9DYW1lcmFDb250ZXh0PXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO3ZhciBvOyhvPXQuQXBwbGljYWJsZUNvbnRleHRfQ2FtZXJhQ29udGV4dHx8KHQuQXBwbGljYWJsZUNvbnRleHRfQ2FtZXJhQ29udGV4dD17fSkpW28uQ0FNRVJBX0NPTlRFWFRfVU5TRVQ9MF09XCJDQU1FUkFfQ09OVEVYVF9VTlNFVFwiLG9bby5GUk9OVF9GQUNJTkc9MV09XCJGUk9OVF9GQUNJTkdcIixvW28uUkVBUl9GQUNJTkc9Ml09XCJSRUFSX0ZBQ0lOR1wiLG9bby5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsdC5BcHBsaWNhYmxlQ29udGV4dD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3QudWludDMyKDEwKS5mb3JrKCk7Zm9yKGNvbnN0IG4gb2YgZS5jYW1lcmFDb250ZXh0KXQuaW50MzIobik7dC5sZGVsaW0oKSx0LnVpbnQzMigxOCkuZm9yaygpO2Zvcihjb25zdCBuIG9mIGUubGVuc0FwcGxpY2FibGVDb250ZXh0cyl0LmludDMyKG4pO3JldHVybiB0LmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17Y2FtZXJhQ29udGV4dDpbXSxsZW5zQXBwbGljYWJsZUNvbnRleHRzOltdfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aWYoMj09KDcmZSkpe2NvbnN0IGU9bi51aW50MzIoKStuLnBvcztmb3IoO24ucG9zPGU7KW8uY2FtZXJhQ29udGV4dC5wdXNoKG4uaW50MzIoKSl9ZWxzZSBvLmNhbWVyYUNvbnRleHQucHVzaChuLmludDMyKCkpO2JyZWFrO2Nhc2UgMjppZigyPT0oNyZlKSl7Y29uc3QgZT1uLnVpbnQzMigpK24ucG9zO2Zvcig7bi5wb3M8ZTspby5sZW5zQXBwbGljYWJsZUNvbnRleHRzLnB1c2gobi5pbnQzMigpKX1lbHNlIG8ubGVuc0FwcGxpY2FibGVDb250ZXh0cy5wdXNoKG4uaW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtjYW1lcmFDb250ZXh0OltdLGxlbnNBcHBsaWNhYmxlQ29udGV4dHM6W119O3JldHVybiB0LmNhbWVyYUNvbnRleHQ9ZS5jYW1lcmFDb250ZXh0Py5tYXAoKGU9PmUpKXx8W10sdC5sZW5zQXBwbGljYWJsZUNvbnRleHRzPWUubGVuc0FwcGxpY2FibGVDb250ZXh0cz8ubWFwKChlPT5lKSl8fFtdLHR9fX0sMTQ0NjE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2Fyb3VzZWxQb3NpdGlvbj10LkNhcm91c2VsUG9zaXRpb25fQ2Fyb3VzZWxTaWRlPXZvaWQgMDtjb25zdCBpPW4oNjk2Nyksbz1yKG4oNjIxMDApKTt2YXIgYTsoYT10LkNhcm91c2VsUG9zaXRpb25fQ2Fyb3VzZWxTaWRlfHwodC5DYXJvdXNlbFBvc2l0aW9uX0Nhcm91c2VsU2lkZT17fSkpW2EuU0lERV9VTlNFVD0wXT1cIlNJREVfVU5TRVRcIixhW2EuTEVGVD0xXT1cIkxFRlRcIixhW2EuUklHSFQ9Ml09XCJSSUdIVFwiLGFbYS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsdC5DYXJvdXNlbFBvc2l0aW9uPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLnNpZGUmJnQudWludDMyKDgpLmludDMyKGUuc2lkZSksMCE9PWUucHJpb3JpdHkmJnQudWludDMyKDE2KS5pbnQzMihlLnByaW9yaXR5KSwwIT09ZS5hYnNvbHV0ZVBvc2l0aW9uJiZ0LnVpbnQzMigzMikuaW50MzIoZS5hYnNvbHV0ZVBvc2l0aW9uKSxcIlwiIT09ZS5jYXJvdXNlbEdyb3VwTmFtZSYmdC51aW50MzIoNDIpLnN0cmluZyhlLmNhcm91c2VsR3JvdXBOYW1lKSwwIT09ZS5jYXJvdXNlbFNjb3JlJiZ0LnVpbnQzMig1MykuZmxvYXQoZS5jYXJvdXNlbFNjb3JlKSx2b2lkIDAhPT1lLmNhcm91c2VsR2xvYmFsU2NvcmVMaXN0JiZpLkNhcm91c2VsR2xvYmFsU2NvcmVMaXN0LmVuY29kZShlLmNhcm91c2VsR2xvYmFsU2NvcmVMaXN0LHQudWludDMyKDU4KS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgYT17c2lkZTowLHByaW9yaXR5OjAsYWJzb2x1dGVQb3NpdGlvbjowLGNhcm91c2VsR3JvdXBOYW1lOlwiXCIsY2Fyb3VzZWxTY29yZTowLGNhcm91c2VsR2xvYmFsU2NvcmVMaXN0OnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmEuc2lkZT1uLmludDMyKCk7YnJlYWs7Y2FzZSAyOmEucHJpb3JpdHk9bi5pbnQzMigpO2JyZWFrO2Nhc2UgNDphLmFic29sdXRlUG9zaXRpb249bi5pbnQzMigpO2JyZWFrO2Nhc2UgNTphLmNhcm91c2VsR3JvdXBOYW1lPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA2OmEuY2Fyb3VzZWxTY29yZT1uLmZsb2F0KCk7YnJlYWs7Y2FzZSA3OmEuY2Fyb3VzZWxHbG9iYWxTY29yZUxpc3Q9aS5DYXJvdXNlbEdsb2JhbFNjb3JlTGlzdC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3NpZGU6MCxwcmlvcml0eTowLGFic29sdXRlUG9zaXRpb246MCxjYXJvdXNlbEdyb3VwTmFtZTpcIlwiLGNhcm91c2VsU2NvcmU6MCxjYXJvdXNlbEdsb2JhbFNjb3JlTGlzdDp2b2lkIDB9O3JldHVybiB0LnNpZGU9ZS5zaWRlPz8wLHQucHJpb3JpdHk9ZS5wcmlvcml0eT8/MCx0LmFic29sdXRlUG9zaXRpb249ZS5hYnNvbHV0ZVBvc2l0aW9uPz8wLHQuY2Fyb3VzZWxHcm91cE5hbWU9ZS5jYXJvdXNlbEdyb3VwTmFtZT8/XCJcIix0LmNhcm91c2VsU2NvcmU9ZS5jYXJvdXNlbFNjb3JlPz8wLHQuY2Fyb3VzZWxHbG9iYWxTY29yZUxpc3Q9dm9pZCAwIT09ZS5jYXJvdXNlbEdsb2JhbFNjb3JlTGlzdCYmbnVsbCE9PWUuY2Fyb3VzZWxHbG9iYWxTY29yZUxpc3Q/aS5DYXJvdXNlbEdsb2JhbFNjb3JlTGlzdC5mcm9tUGFydGlhbChlLmNhcm91c2VsR2xvYmFsU2NvcmVMaXN0KTp2b2lkIDAsdH19fSw5NjU2MjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Db25uZWN0ZWRMZW5zSW5mbz12b2lkIDA7Y29uc3QgaT1uKDUxNTk4KSxvPXIobig2MjEwMCkpO3QuQ29ubmVjdGVkTGVuc0luZm89e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5hcHBJZCYmaS5VVUlELmVuY29kZShlLmFwcElkLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgYT17YXBwSWQ6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/YS5hcHBJZD1pLlVVSUQuZGVjb2RlKG4sbi51aW50MzIoKSk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXthcHBJZDp2b2lkIDB9O3JldHVybiB0LmFwcElkPXZvaWQgMCE9PWUuYXBwSWQmJm51bGwhPT1lLmFwcElkP2kuVVVJRC5mcm9tUGFydGlhbChlLmFwcElkKTp2b2lkIDAsdH19fSwyMDQwNDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5MZW5zQ3JlYXRvcj12b2lkIDA7Y29uc3QgaT1uKDUxNTk4KSxvPXIobig2MjEwMCkpO3QuTGVuc0NyZWF0b3I9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5pZCYmaS5VVUlELmVuY29kZShlLmlkLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLFwiXCIhPT1lLmRpc3BsYXlOYW1lJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuZGlzcGxheU5hbWUpLHZvaWQgMCE9PWUuc25hcFByb1Byb2ZpbGVJZCYmaS5VVUlELmVuY29kZShlLnNuYXBQcm9Qcm9maWxlSWQsdC51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCksITA9PT1lLmRlYWN0aXZhdGVkJiZ0LnVpbnQzMigzMikuYm9vbChlLmRlYWN0aXZhdGVkKSwhMD09PWUub2ZmaWNpYWxMZW5zQ3JlYXRvciYmdC51aW50MzIoNDApLmJvb2woZS5vZmZpY2lhbExlbnNDcmVhdG9yKSwhMD09PWUuY29tbXVuaXR5JiZ0LnVpbnQzMig0OCkuYm9vbChlLmNvbW11bml0eSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBhPXtpZDp2b2lkIDAsZGlzcGxheU5hbWU6XCJcIixzbmFwUHJvUHJvZmlsZUlkOnZvaWQgMCxkZWFjdGl2YXRlZDohMSxvZmZpY2lhbExlbnNDcmVhdG9yOiExLGNvbW11bml0eTohMX07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmEuaWQ9aS5VVUlELmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMjphLmRpc3BsYXlOYW1lPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmEuc25hcFByb1Byb2ZpbGVJZD1pLlVVSUQuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSA0OmEuZGVhY3RpdmF0ZWQ9bi5ib29sKCk7YnJlYWs7Y2FzZSA1OmEub2ZmaWNpYWxMZW5zQ3JlYXRvcj1uLmJvb2woKTticmVhaztjYXNlIDY6YS5jb21tdW5pdHk9bi5ib29sKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtpZDp2b2lkIDAsZGlzcGxheU5hbWU6XCJcIixzbmFwUHJvUHJvZmlsZUlkOnZvaWQgMCxkZWFjdGl2YXRlZDohMSxvZmZpY2lhbExlbnNDcmVhdG9yOiExLGNvbW11bml0eTohMX07cmV0dXJuIHQuaWQ9dm9pZCAwIT09ZS5pZCYmbnVsbCE9PWUuaWQ/aS5VVUlELmZyb21QYXJ0aWFsKGUuaWQpOnZvaWQgMCx0LmRpc3BsYXlOYW1lPWUuZGlzcGxheU5hbWU/P1wiXCIsdC5zbmFwUHJvUHJvZmlsZUlkPXZvaWQgMCE9PWUuc25hcFByb1Byb2ZpbGVJZCYmbnVsbCE9PWUuc25hcFByb1Byb2ZpbGVJZD9pLlVVSUQuZnJvbVBhcnRpYWwoZS5zbmFwUHJvUHJvZmlsZUlkKTp2b2lkIDAsdC5kZWFjdGl2YXRlZD1lLmRlYWN0aXZhdGVkPz8hMSx0Lm9mZmljaWFsTGVuc0NyZWF0b3I9ZS5vZmZpY2lhbExlbnNDcmVhdG9yPz8hMSx0LmNvbW11bml0eT1lLmNvbW11bml0eT8/ITEsdH19fSw5OTA1NzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5EZWJ1Z0luZm89dm9pZCAwO2NvbnN0IGk9cihuKDYyMTAwKSk7dC5EZWJ1Z0luZm89e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5kZWJ1Z0NvZGUmJnQudWludDMyKDEwKS5zdHJpbmcoZS5kZWJ1Z0NvZGUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17ZGVidWdDb2RlOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9vLmRlYnVnQ29kZT1uLnN0cmluZygpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17ZGVidWdDb2RlOlwiXCJ9O3JldHVybiB0LmRlYnVnQ29kZT1lLmRlYnVnQ29kZT8/XCJcIix0fX19LDUyMTkwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkhpbnRfSGludERhdGE9dC5IaW50PXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO3QuSGludD17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO1wiXCIhPT1lLmhpbnRJZCYmbi51aW50MzIoMTApLnN0cmluZyhlLmhpbnRJZCk7Zm9yKGNvbnN0IHIgb2YgZS5hZGRpdGlvbmFsSGludHMpdC5IaW50X0hpbnREYXRhLmVuY29kZShyLG4udWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiBufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IG89dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGE9e2hpbnRJZDpcIlwiLGFkZGl0aW9uYWxIaW50czpbXX07Zm9yKDtyLnBvczxvOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmEuaGludElkPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmEuYWRkaXRpb25hbEhpbnRzLnB1c2godC5IaW50X0hpbnREYXRhLmRlY29kZShyLHIudWludDMyKCkpKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e2hpbnRJZDpcIlwiLGFkZGl0aW9uYWxIaW50czpbXX07cmV0dXJuIG4uaGludElkPWUuaGludElkPz9cIlwiLG4uYWRkaXRpb25hbEhpbnRzPWUuYWRkaXRpb25hbEhpbnRzPy5tYXAoKGU9PnQuSGludF9IaW50RGF0YS5mcm9tUGFydGlhbChlKSkpfHxbXSxufX0sdC5IaW50X0hpbnREYXRhPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUuaWQmJnQudWludDMyKDEwKS5zdHJpbmcoZS5pZCksXCJcIiE9PWUudHJhbnNsYXRpb24mJnQudWludDMyKDE4KS5zdHJpbmcoZS50cmFuc2xhdGlvbiksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXtpZDpcIlwiLHRyYW5zbGF0aW9uOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLmlkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOm8udHJhbnNsYXRpb249bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2lkOlwiXCIsdHJhbnNsYXRpb246XCJcIn07cmV0dXJuIHQuaWQ9ZS5pZD8/XCJcIix0LnRyYW5zbGF0aW9uPWUudHJhbnNsYXRpb24/P1wiXCIsdH19fSwzNTI1MzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5MZW5zPXQuTGVuc19BcGlMZXZlbD10LkxlbnNfQWN0aXZhdGlvbkNhbWVyYT12b2lkIDA7Y29uc3QgaT1yKG4oNDE1ODMpKSxvPW4oMzgyMDQpLGE9big5OTI4NCkscz1uKDU3OTY2KSxjPXIobig2MjEwMCkpO2Z1bmN0aW9uIGwoZSl7cmV0dXJuIGUudG9TdHJpbmcoKX12YXIgdSxkOyhkPXQuTGVuc19BY3RpdmF0aW9uQ2FtZXJhfHwodC5MZW5zX0FjdGl2YXRpb25DYW1lcmE9e30pKVtkLkFDVElWQVRJT05fTEVWRUxfVU5TRVQ9MF09XCJBQ1RJVkFUSU9OX0xFVkVMX1VOU0VUXCIsZFtkLkZST05UPTFdPVwiRlJPTlRcIixkW2QuUkVBUj0yXT1cIlJFQVJcIixkW2QuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLCh1PXQuTGVuc19BcGlMZXZlbHx8KHQuTGVuc19BcGlMZXZlbD17fSkpW3UuQVBJX0xFVkVMX1VOU0VUPTBdPVwiQVBJX0xFVkVMX1VOU0VUXCIsdVt1LlBVQkxJQz0xXT1cIlBVQkxJQ1wiLHVbdS5QUklWQVRFPTJdPVwiUFJJVkFURVwiLHVbdS5ERVY9M109XCJERVZcIix1W3UuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLHQuTGVucz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpjLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO1wiMFwiIT09ZS5pZCYmdC51aW50MzIoOCkuaW50NjQoZS5pZCksXCJcIiE9PWUuaWNvblVybCYmdC51aW50MzIoNDIpLnN0cmluZyhlLmljb25VcmwpLFwiXCIhPT1lLm5hbWUmJnQudWludDMyKDUwKS5zdHJpbmcoZS5uYW1lKTtmb3IoY29uc3QgbiBvZiBlLnJlc291cmNlcylvLkxlbnNSZXNvdXJjZS5lbmNvZGUobix0LnVpbnQzMig1OCkuZm9yaygpKS5sZGVsaW0oKTtmb3IoY29uc3QgbiBvZiBlLmFzc2V0cylhLkxlbnNBc3NldC5lbmNvZGUobix0LnVpbnQzMig2NikuZm9yaygpKS5sZGVsaW0oKTt2b2lkIDAhPT1lLmFwcGxpY2FibGVDb250ZXh0JiZzLkFwcGxpY2FibGVDb250ZXh0LmVuY29kZShlLmFwcGxpY2FibGVDb250ZXh0LHQudWludDMyKDc0KS5mb3JrKCkpLmxkZWxpbSgpLFwiMFwiIT09ZS5kZW1vU3RhcnREYXRlJiZ0LnVpbnQzMig4OCkuaW50NjQoZS5kZW1vU3RhcnREYXRlKSxcIlwiIT09ZS5iaXRtb2ppQ29taWNJZCYmdC51aW50MzIoOTgpLnN0cmluZyhlLmJpdG1vamlDb21pY0lkKSwwIT09ZS5hY3RpdmF0aW9uQ2FtZXJhJiZ0LnVpbnQzMigxMDQpLmludDMyKGUuYWN0aXZhdGlvbkNhbWVyYSksdC51aW50MzIoMTIyKS5mb3JrKCk7Zm9yKGNvbnN0IG4gb2YgZS5kZXNjcmlwdG9ycyl0LmludDMyKG4pO3JldHVybiB0LmxkZWxpbSgpLCEwPT09ZS5zdHVkaW9QcmV2aWV3JiZ0LnVpbnQzMigxMjgpLmJvb2woZS5zdHVkaW9QcmV2aWV3KSwwIT09ZS5hcGlMZXZlbCYmdC51aW50MzIoMTM2KS5pbnQzMihlLmFwaUxldmVsKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBjLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2lkOlwiMFwiLGljb25Vcmw6XCJcIixuYW1lOlwiXCIscmVzb3VyY2VzOltdLGFzc2V0czpbXSxhcHBsaWNhYmxlQ29udGV4dDp2b2lkIDAsZGVtb1N0YXJ0RGF0ZTpcIjBcIixiaXRtb2ppQ29taWNJZDpcIlwiLGFjdGl2YXRpb25DYW1lcmE6MCxkZXNjcmlwdG9yczpbXSxzdHVkaW9QcmV2aWV3OiExLGFwaUxldmVsOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmlkPWwobi5pbnQ2NCgpKTticmVhaztjYXNlIDU6aS5pY29uVXJsPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA2OmkubmFtZT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNzppLnJlc291cmNlcy5wdXNoKG8uTGVuc1Jlc291cmNlLmRlY29kZShuLG4udWludDMyKCkpKTticmVhaztjYXNlIDg6aS5hc3NldHMucHVzaChhLkxlbnNBc3NldC5kZWNvZGUobixuLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSA5OmkuYXBwbGljYWJsZUNvbnRleHQ9cy5BcHBsaWNhYmxlQ29udGV4dC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDExOmkuZGVtb1N0YXJ0RGF0ZT1sKG4uaW50NjQoKSk7YnJlYWs7Y2FzZSAxMjppLmJpdG1vamlDb21pY0lkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAxMzppLmFjdGl2YXRpb25DYW1lcmE9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMTU6aWYoMj09KDcmZSkpe2NvbnN0IGU9bi51aW50MzIoKStuLnBvcztmb3IoO24ucG9zPGU7KWkuZGVzY3JpcHRvcnMucHVzaChuLmludDMyKCkpfWVsc2UgaS5kZXNjcmlwdG9ycy5wdXNoKG4uaW50MzIoKSk7YnJlYWs7Y2FzZSAxNjppLnN0dWRpb1ByZXZpZXc9bi5ib29sKCk7YnJlYWs7Y2FzZSAxNzppLmFwaUxldmVsPW4uaW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2lkOlwiMFwiLGljb25Vcmw6XCJcIixuYW1lOlwiXCIscmVzb3VyY2VzOltdLGFzc2V0czpbXSxhcHBsaWNhYmxlQ29udGV4dDp2b2lkIDAsZGVtb1N0YXJ0RGF0ZTpcIjBcIixiaXRtb2ppQ29taWNJZDpcIlwiLGFjdGl2YXRpb25DYW1lcmE6MCxkZXNjcmlwdG9yczpbXSxzdHVkaW9QcmV2aWV3OiExLGFwaUxldmVsOjB9O3JldHVybiB0LmlkPWUuaWQ/P1wiMFwiLHQuaWNvblVybD1lLmljb25Vcmw/P1wiXCIsdC5uYW1lPWUubmFtZT8/XCJcIix0LnJlc291cmNlcz1lLnJlc291cmNlcz8ubWFwKChlPT5vLkxlbnNSZXNvdXJjZS5mcm9tUGFydGlhbChlKSkpfHxbXSx0LmFzc2V0cz1lLmFzc2V0cz8ubWFwKChlPT5hLkxlbnNBc3NldC5mcm9tUGFydGlhbChlKSkpfHxbXSx0LmFwcGxpY2FibGVDb250ZXh0PXZvaWQgMCE9PWUuYXBwbGljYWJsZUNvbnRleHQmJm51bGwhPT1lLmFwcGxpY2FibGVDb250ZXh0P3MuQXBwbGljYWJsZUNvbnRleHQuZnJvbVBhcnRpYWwoZS5hcHBsaWNhYmxlQ29udGV4dCk6dm9pZCAwLHQuZGVtb1N0YXJ0RGF0ZT1lLmRlbW9TdGFydERhdGU/P1wiMFwiLHQuYml0bW9qaUNvbWljSWQ9ZS5iaXRtb2ppQ29taWNJZD8/XCJcIix0LmFjdGl2YXRpb25DYW1lcmE9ZS5hY3RpdmF0aW9uQ2FtZXJhPz8wLHQuZGVzY3JpcHRvcnM9ZS5kZXNjcmlwdG9ycz8ubWFwKChlPT5lKSl8fFtdLHQuc3R1ZGlvUHJldmlldz1lLnN0dWRpb1ByZXZpZXc/PyExLHQuYXBpTGV2ZWw9ZS5hcGlMZXZlbD8/MCx0fX0sYy5kZWZhdWx0LnV0aWwuTG9uZyE9PWkuZGVmYXVsdCYmKGMuZGVmYXVsdC51dGlsLkxvbmc9aS5kZWZhdWx0LGMuZGVmYXVsdC5jb25maWd1cmUoKSl9LDk5Mjg0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkxlbnNBc3NldFN0b3JhZ2VPcHRpb249dC5MZW5zQXNzZXQ9dC5MZW5zQXNzZXRTdG9yYWdlT3B0aW9uX0Fzc2V0Rm9ybWF0PXQuTGVuc0Fzc2V0X1JlcXVlc3RUaW1pbmc9dC5MZW5zQXNzZXRfQXNzZXRUeXBlPXZvaWQgMDtjb25zdCBpPXIobig0MTU4MykpLG89big1MDIzNCksYT1yKG4oNjIxMDApKTt2YXIgcyxjLGw7KGw9dC5MZW5zQXNzZXRfQXNzZXRUeXBlfHwodC5MZW5zQXNzZXRfQXNzZXRUeXBlPXt9KSlbbC5UWVBFX1VOU0VUPTBdPVwiVFlQRV9VTlNFVFwiLGxbbC5BU1NFVD0xXT1cIkFTU0VUXCIsbFtsLkJJVE1PSkk9Ml09XCJCSVRNT0pJXCIsbFtsLkJJVE1PSklfTElTVD0zXT1cIkJJVE1PSklfTElTVFwiLGxbbC5CSVRNT0pJXzNfRD00XT1cIkJJVE1PSklfM19EXCIsbFtsLkFWQVRBUl9BU1NFVD01XT1cIkFWQVRBUl9BU1NFVFwiLGxbbC5GUklFTkRNT0pJXzNfRD02XT1cIkZSSUVORE1PSklfM19EXCIsbFtsLkZSSUVORE1PSklfQVZBVEFSX0FTU0VUPTddPVwiRlJJRU5ETU9KSV9BVkFUQVJfQVNTRVRcIixsW2wuREVWSUNFX0RFUEVOREVOVF9BU1NFVD04XT1cIkRFVklDRV9ERVBFTkRFTlRfQVNTRVRcIixsW2wuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLChjPXQuTGVuc0Fzc2V0X1JlcXVlc3RUaW1pbmd8fCh0LkxlbnNBc3NldF9SZXF1ZXN0VGltaW5nPXt9KSlbYy5VTlNFVD0wXT1cIlVOU0VUXCIsY1tjLlBSRUxPQUQ9MV09XCJQUkVMT0FEXCIsY1tjLk9OX0RFTUFORD0yXT1cIk9OX0RFTUFORFwiLGNbYy5SRVFVSVJFRD0zXT1cIlJFUVVJUkVEXCIsY1tjLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwocz10LkxlbnNBc3NldFN0b3JhZ2VPcHRpb25fQXNzZXRGb3JtYXR8fCh0LkxlbnNBc3NldFN0b3JhZ2VPcHRpb25fQXNzZXRGb3JtYXQ9e30pKVtzLlVOU0VUPTBdPVwiVU5TRVRcIixzW3MuTE5TPTFdPVwiTE5TXCIsc1tzLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0LkxlbnNBc3NldD17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpOzAhPT1lLnR5cGUmJm4udWludDMyKDgpLmludDMyKGUudHlwZSksXCJpbnRJZFwiPT09ZS5pZD8uJGNhc2UmJm4udWludDMyKDE2KS5pbnQ2NChlLmlkLmludElkKSxcInN0cmluZ0lkXCI9PT1lLmlkPy4kY2FzZSYmbi51aW50MzIoMjYpLnN0cmluZyhlLmlkLnN0cmluZ0lkKSwwIT09ZS5yZXF1ZXN0VGltaW5nJiZuLnVpbnQzMigzMikuaW50MzIoZS5yZXF1ZXN0VGltaW5nKTtmb3IoY29uc3QgciBvZiBlLnN0b3JhZ2VPcHRpb25zKXQuTGVuc0Fzc2V0U3RvcmFnZU9wdGlvbi5lbmNvZGUocixuLnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKTtuLnVpbnQzMig1MCkuZm9yaygpO2Zvcihjb25zdCB0IG9mIGUuZGVzY3JpcHRvcnMpbi5pbnQzMih0KTtyZXR1cm4gbi5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89e3R5cGU6MCxpZDp2b2lkIDAscmVxdWVzdFRpbWluZzowLHN0b3JhZ2VPcHRpb25zOltdLGRlc2NyaXB0b3JzOltdfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by50eXBlPXIuaW50MzIoKTticmVhaztjYXNlIDI6by5pZD17JGNhc2U6XCJpbnRJZFwiLGludElkOihzPXIuaW50NjQoKSxzLnRvU3RyaW5nKCkpfTticmVhaztjYXNlIDM6by5pZD17JGNhc2U6XCJzdHJpbmdJZFwiLHN0cmluZ0lkOnIuc3RyaW5nKCl9O2JyZWFrO2Nhc2UgNDpvLnJlcXVlc3RUaW1pbmc9ci5pbnQzMigpO2JyZWFrO2Nhc2UgNTpvLnN0b3JhZ2VPcHRpb25zLnB1c2godC5MZW5zQXNzZXRTdG9yYWdlT3B0aW9uLmRlY29kZShyLHIudWludDMyKCkpKTticmVhaztjYXNlIDY6aWYoMj09KDcmZSkpe2NvbnN0IGU9ci51aW50MzIoKStyLnBvcztmb3IoO3IucG9zPGU7KW8uZGVzY3JpcHRvcnMucHVzaChyLmludDMyKCkpfWVsc2Ugby5kZXNjcmlwdG9ycy5wdXNoKHIuaW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXZhciBzO3JldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXt0eXBlOjAsaWQ6dm9pZCAwLHJlcXVlc3RUaW1pbmc6MCxzdG9yYWdlT3B0aW9uczpbXSxkZXNjcmlwdG9yczpbXX07cmV0dXJuIG4udHlwZT1lLnR5cGU/PzAsXCJpbnRJZFwiPT09ZS5pZD8uJGNhc2UmJnZvaWQgMCE9PWUuaWQ/LmludElkJiZudWxsIT09ZS5pZD8uaW50SWQmJihuLmlkPXskY2FzZTpcImludElkXCIsaW50SWQ6ZS5pZC5pbnRJZH0pLFwic3RyaW5nSWRcIj09PWUuaWQ/LiRjYXNlJiZ2b2lkIDAhPT1lLmlkPy5zdHJpbmdJZCYmbnVsbCE9PWUuaWQ/LnN0cmluZ0lkJiYobi5pZD17JGNhc2U6XCJzdHJpbmdJZFwiLHN0cmluZ0lkOmUuaWQuc3RyaW5nSWR9KSxuLnJlcXVlc3RUaW1pbmc9ZS5yZXF1ZXN0VGltaW5nPz8wLG4uc3RvcmFnZU9wdGlvbnM9ZS5zdG9yYWdlT3B0aW9ucz8ubWFwKChlPT50LkxlbnNBc3NldFN0b3JhZ2VPcHRpb24uZnJvbVBhcnRpYWwoZSkpKXx8W10sbi5kZXNjcmlwdG9ycz1lLmRlc2NyaXB0b3JzPy5tYXAoKGU9PmUpKXx8W10sbn19LHQuTGVuc0Fzc2V0U3RvcmFnZU9wdGlvbj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5mb3JtYXQmJnQudWludDMyKDgpLmludDMyKGUuZm9ybWF0KSxcIlwiIT09ZS5maWxlVXJsJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuZmlsZVVybCksdm9pZCAwIT09ZS5jaGVja3N1bSYmby5TSEEyNTYuZW5jb2RlKGUuY2hlY2tzdW0sdC51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtmb3JtYXQ6MCxmaWxlVXJsOlwiXCIsY2hlY2tzdW06dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5mb3JtYXQ9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMjppLmZpbGVVcmw9bi5zdHJpbmcoKTticmVhaztjYXNlIDM6aS5jaGVja3N1bT1vLlNIQTI1Ni5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2Zvcm1hdDowLGZpbGVVcmw6XCJcIixjaGVja3N1bTp2b2lkIDB9O3JldHVybiB0LmZvcm1hdD1lLmZvcm1hdD8/MCx0LmZpbGVVcmw9ZS5maWxlVXJsPz9cIlwiLHQuY2hlY2tzdW09dm9pZCAwIT09ZS5jaGVja3N1bSYmbnVsbCE9PWUuY2hlY2tzdW0/by5TSEEyNTYuZnJvbVBhcnRpYWwoZS5jaGVja3N1bSk6dm9pZCAwLHR9fSxhLmRlZmF1bHQudXRpbC5Mb25nIT09aS5kZWZhdWx0JiYoYS5kZWZhdWx0LnV0aWwuTG9uZz1pLmRlZmF1bHQsYS5kZWZhdWx0LmNvbmZpZ3VyZSgpKX0sMzgyMDQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTGVuc1Jlc291cmNlPXQuTGVuc1Jlc291cmNlX1Jlc291cmNlRm9ybWF0PXZvaWQgMDtjb25zdCBpPW4oNTAyMzQpLG89cihuKDYyMTAwKSk7dmFyIGE7KGE9dC5MZW5zUmVzb3VyY2VfUmVzb3VyY2VGb3JtYXR8fCh0LkxlbnNSZXNvdXJjZV9SZXNvdXJjZUZvcm1hdD17fSkpW2EuVU5TRVQ9MF09XCJVTlNFVFwiLGFbYS5MTlM9MV09XCJMTlNcIixhW2EuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLHQuTGVuc1Jlc291cmNlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLmZvcm1hdCYmdC51aW50MzIoOCkuaW50MzIoZS5mb3JtYXQpLFwiXCIhPT1lLmZpbGVVcmwmJnQudWludDMyKDE4KS5zdHJpbmcoZS5maWxlVXJsKSx2b2lkIDAhPT1lLmNoZWNrc3VtJiZpLlNIQTI1Ni5lbmNvZGUoZS5jaGVja3N1bSx0LnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGE9e2Zvcm1hdDowLGZpbGVVcmw6XCJcIixjaGVja3N1bTp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLmZvcm1hdD1uLmludDMyKCk7YnJlYWs7Y2FzZSAyOmEuZmlsZVVybD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMzphLmNoZWNrc3VtPWkuU0hBMjU2LmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17Zm9ybWF0OjAsZmlsZVVybDpcIlwiLGNoZWNrc3VtOnZvaWQgMH07cmV0dXJuIHQuZm9ybWF0PWUuZm9ybWF0Pz8wLHQuZmlsZVVybD1lLmZpbGVVcmw/P1wiXCIsdC5jaGVja3N1bT12b2lkIDAhPT1lLmNoZWNrc3VtJiZudWxsIT09ZS5jaGVja3N1bT9pLlNIQTI1Ni5mcm9tUGFydGlhbChlLmNoZWNrc3VtKTp2b2lkIDAsdH19fSw5Mjc2MjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5MZW5zU25hcGNoYXQ9dm9pZCAwO2NvbnN0IGk9cihuKDQxNTgzKSksbz1uKDM1MjUzKSxhPW4oNTIxOTApLHM9bigxNDQ2MSksYz1uKDIwNDA0KSxsPW4oNjE5MjApLHU9big5NTQyNCksZD1uKDk2NTYyKSxmPW4oMzA1NzIpLHA9big5OTA1NyksbT1uKDMyNDQ2KSxoPW4oNzk5MTYpLHY9cihuKDYyMTAwKSk7ZnVuY3Rpb24gZygpe3JldHVybntsZW5zOnZvaWQgMCxoaW50OnZvaWQgMCxjYXJvdXNlbFBvc2l0aW9uOnZvaWQgMCxjcmVhdG9yOnZvaWQgMCxzcG9uc29yZWRJbmZvOnZvaWQgMCxhdHRhY2htZW50OnZvaWQgMCxsZW5zQ29sbGVjdGlvbklkOlwiMFwiLGNvbm5lY3RlZExlbnNJbmZvOnZvaWQgMCxzaG9wcGluZ0xlbnNNZXRhZGF0YTpuZXcgVWludDhBcnJheSxtdXNpY1RyYWNrTWV0YWRhdGE6W10sZGVidWdJbmZvOnZvaWQgMCx0cmFja2luZ0luZm86dm9pZCAwLHJlbW90ZUFwaUluZm86dm9pZCAwLGFkUmVuZGVyRGF0YUJ5dGVzOm5ldyBVaW50OEFycmF5fX10LkxlbnNTbmFwY2hhdD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp2LmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3ZvaWQgMCE9PWUubGVucyYmby5MZW5zLmVuY29kZShlLmxlbnMsdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5oaW50JiZhLkhpbnQuZW5jb2RlKGUuaGludCx0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmNhcm91c2VsUG9zaXRpb24mJnMuQ2Fyb3VzZWxQb3NpdGlvbi5lbmNvZGUoZS5jYXJvdXNlbFBvc2l0aW9uLHQudWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuY3JlYXRvciYmYy5MZW5zQ3JlYXRvci5lbmNvZGUoZS5jcmVhdG9yLHQudWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuc3BvbnNvcmVkSW5mbyYmbC5TcG9uc29yZWRJbmZvLmVuY29kZShlLnNwb25zb3JlZEluZm8sdC51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5hdHRhY2htZW50JiZ1LkF0dGFjaG1lbnQuZW5jb2RlKGUuYXR0YWNobWVudCx0LnVpbnQzMig1MCkuZm9yaygpKS5sZGVsaW0oKSxcIjBcIiE9PWUubGVuc0NvbGxlY3Rpb25JZCYmdC51aW50MzIoNTYpLmludDY0KGUubGVuc0NvbGxlY3Rpb25JZCksdm9pZCAwIT09ZS5jb25uZWN0ZWRMZW5zSW5mbyYmZC5Db25uZWN0ZWRMZW5zSW5mby5lbmNvZGUoZS5jb25uZWN0ZWRMZW5zSW5mbyx0LnVpbnQzMig2NikuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS5zaG9wcGluZ0xlbnNNZXRhZGF0YS5sZW5ndGgmJnQudWludDMyKDc0KS5ieXRlcyhlLnNob3BwaW5nTGVuc01ldGFkYXRhKTtmb3IoY29uc3QgbiBvZiBlLm11c2ljVHJhY2tNZXRhZGF0YSlmLk11c2ljVHJhY2tNZXRhZGF0YS5lbmNvZGUobix0LnVpbnQzMig4MikuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gdm9pZCAwIT09ZS5kZWJ1Z0luZm8mJnAuRGVidWdJbmZvLmVuY29kZShlLmRlYnVnSW5mbyx0LnVpbnQzMig5MCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnRyYWNraW5nSW5mbyYmbS5UcmFja2luZ0luZm8uZW5jb2RlKGUudHJhY2tpbmdJbmZvLHQudWludDMyKDk4KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUucmVtb3RlQXBpSW5mbyYmaC5SZW1vdGVBcGlJbmZvLmVuY29kZShlLnJlbW90ZUFwaUluZm8sdC51aW50MzIoMTA2KS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLmFkUmVuZGVyRGF0YUJ5dGVzLmxlbmd0aCYmdC51aW50MzIoMTE0KS5ieXRlcyhlLmFkUmVuZGVyRGF0YUJ5dGVzKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiB2LmRlZmF1bHQuUmVhZGVyP2U6bmV3IHYuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9ZygpO2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmxlbnM9by5MZW5zLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMjppLmhpbnQ9YS5IaW50LmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMzppLmNhcm91c2VsUG9zaXRpb249cy5DYXJvdXNlbFBvc2l0aW9uLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgNDppLmNyZWF0b3I9Yy5MZW5zQ3JlYXRvci5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDU6aS5zcG9uc29yZWRJbmZvPWwuU3BvbnNvcmVkSW5mby5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDY6aS5hdHRhY2htZW50PXUuQXR0YWNobWVudC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDc6aS5sZW5zQ29sbGVjdGlvbklkPW4uaW50NjQoKS50b1N0cmluZygpO2JyZWFrO2Nhc2UgODppLmNvbm5lY3RlZExlbnNJbmZvPWQuQ29ubmVjdGVkTGVuc0luZm8uZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSA5Omkuc2hvcHBpbmdMZW5zTWV0YWRhdGE9bi5ieXRlcygpO2JyZWFrO2Nhc2UgMTA6aS5tdXNpY1RyYWNrTWV0YWRhdGEucHVzaChmLk11c2ljVHJhY2tNZXRhZGF0YS5kZWNvZGUobixuLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAxMTppLmRlYnVnSW5mbz1wLkRlYnVnSW5mby5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDEyOmkudHJhY2tpbmdJbmZvPW0uVHJhY2tpbmdJbmZvLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMTM6aS5yZW1vdGVBcGlJbmZvPWguUmVtb3RlQXBpSW5mby5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDE0OmkuYWRSZW5kZXJEYXRhQnl0ZXM9bi5ieXRlcygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD1nKCk7cmV0dXJuIHQubGVucz12b2lkIDAhPT1lLmxlbnMmJm51bGwhPT1lLmxlbnM/by5MZW5zLmZyb21QYXJ0aWFsKGUubGVucyk6dm9pZCAwLHQuaGludD12b2lkIDAhPT1lLmhpbnQmJm51bGwhPT1lLmhpbnQ/YS5IaW50LmZyb21QYXJ0aWFsKGUuaGludCk6dm9pZCAwLHQuY2Fyb3VzZWxQb3NpdGlvbj12b2lkIDAhPT1lLmNhcm91c2VsUG9zaXRpb24mJm51bGwhPT1lLmNhcm91c2VsUG9zaXRpb24/cy5DYXJvdXNlbFBvc2l0aW9uLmZyb21QYXJ0aWFsKGUuY2Fyb3VzZWxQb3NpdGlvbik6dm9pZCAwLHQuY3JlYXRvcj12b2lkIDAhPT1lLmNyZWF0b3ImJm51bGwhPT1lLmNyZWF0b3I/Yy5MZW5zQ3JlYXRvci5mcm9tUGFydGlhbChlLmNyZWF0b3IpOnZvaWQgMCx0LnNwb25zb3JlZEluZm89dm9pZCAwIT09ZS5zcG9uc29yZWRJbmZvJiZudWxsIT09ZS5zcG9uc29yZWRJbmZvP2wuU3BvbnNvcmVkSW5mby5mcm9tUGFydGlhbChlLnNwb25zb3JlZEluZm8pOnZvaWQgMCx0LmF0dGFjaG1lbnQ9dm9pZCAwIT09ZS5hdHRhY2htZW50JiZudWxsIT09ZS5hdHRhY2htZW50P3UuQXR0YWNobWVudC5mcm9tUGFydGlhbChlLmF0dGFjaG1lbnQpOnZvaWQgMCx0LmxlbnNDb2xsZWN0aW9uSWQ9ZS5sZW5zQ29sbGVjdGlvbklkPz9cIjBcIix0LmNvbm5lY3RlZExlbnNJbmZvPXZvaWQgMCE9PWUuY29ubmVjdGVkTGVuc0luZm8mJm51bGwhPT1lLmNvbm5lY3RlZExlbnNJbmZvP2QuQ29ubmVjdGVkTGVuc0luZm8uZnJvbVBhcnRpYWwoZS5jb25uZWN0ZWRMZW5zSW5mbyk6dm9pZCAwLHQuc2hvcHBpbmdMZW5zTWV0YWRhdGE9ZS5zaG9wcGluZ0xlbnNNZXRhZGF0YT8/bmV3IFVpbnQ4QXJyYXksdC5tdXNpY1RyYWNrTWV0YWRhdGE9ZS5tdXNpY1RyYWNrTWV0YWRhdGE/Lm1hcCgoZT0+Zi5NdXNpY1RyYWNrTWV0YWRhdGEuZnJvbVBhcnRpYWwoZSkpKXx8W10sdC5kZWJ1Z0luZm89dm9pZCAwIT09ZS5kZWJ1Z0luZm8mJm51bGwhPT1lLmRlYnVnSW5mbz9wLkRlYnVnSW5mby5mcm9tUGFydGlhbChlLmRlYnVnSW5mbyk6dm9pZCAwLHQudHJhY2tpbmdJbmZvPXZvaWQgMCE9PWUudHJhY2tpbmdJbmZvJiZudWxsIT09ZS50cmFja2luZ0luZm8/bS5UcmFja2luZ0luZm8uZnJvbVBhcnRpYWwoZS50cmFja2luZ0luZm8pOnZvaWQgMCx0LnJlbW90ZUFwaUluZm89dm9pZCAwIT09ZS5yZW1vdGVBcGlJbmZvJiZudWxsIT09ZS5yZW1vdGVBcGlJbmZvP2guUmVtb3RlQXBpSW5mby5mcm9tUGFydGlhbChlLnJlbW90ZUFwaUluZm8pOnZvaWQgMCx0LmFkUmVuZGVyRGF0YUJ5dGVzPWUuYWRSZW5kZXJEYXRhQnl0ZXM/P25ldyBVaW50OEFycmF5LHR9fSx2LmRlZmF1bHQudXRpbC5Mb25nIT09aS5kZWZhdWx0JiYodi5kZWZhdWx0LnV0aWwuTG9uZz1pLmRlZmF1bHQsdi5kZWZhdWx0LmNvbmZpZ3VyZSgpKX0sMzA1NzI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTXVzaWNUcmFja01ldGFkYXRhPXZvaWQgMDtjb25zdCBpPXIobig0MTU4MykpLG89bigxMjY2NSksYT1yKG4oNjIxMDApKTt0Lk11c2ljVHJhY2tNZXRhZGF0YT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiMFwiIT09ZS50cmFja0lkJiZ0LnVpbnQzMig4KS51aW50NjQoZS50cmFja0lkKSx2b2lkIDAhPT1lLmNvbnRlbnRSZXN0cmljdGlvbnMmJm8uQ29udGVudFJlc3RyaWN0aW9ucy5lbmNvZGUoZS5jb250ZW50UmVzdHJpY3Rpb25zLHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17dHJhY2tJZDpcIjBcIixjb250ZW50UmVzdHJpY3Rpb25zOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkudHJhY2tJZD1uLnVpbnQ2NCgpLnRvU3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkuY29udGVudFJlc3RyaWN0aW9ucz1vLkNvbnRlbnRSZXN0cmljdGlvbnMuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt0cmFja0lkOlwiMFwiLGNvbnRlbnRSZXN0cmljdGlvbnM6dm9pZCAwfTtyZXR1cm4gdC50cmFja0lkPWUudHJhY2tJZD8/XCIwXCIsdC5jb250ZW50UmVzdHJpY3Rpb25zPXZvaWQgMCE9PWUuY29udGVudFJlc3RyaWN0aW9ucyYmbnVsbCE9PWUuY29udGVudFJlc3RyaWN0aW9ucz9vLkNvbnRlbnRSZXN0cmljdGlvbnMuZnJvbVBhcnRpYWwoZS5jb250ZW50UmVzdHJpY3Rpb25zKTp2b2lkIDAsdH19LGEuZGVmYXVsdC51dGlsLkxvbmchPT1pLmRlZmF1bHQmJihhLmRlZmF1bHQudXRpbC5Mb25nPWkuZGVmYXVsdCxhLmRlZmF1bHQuY29uZmlndXJlKCkpfSw3OTkxNjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5SZW1vdGVBcGlJbmZvPXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO3QuUmVtb3RlQXBpSW5mbz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO2Zvcihjb25zdCBuIG9mIGUucmVtb3RlQXBpU3BlY0lkcyl0LnVpbnQzMigxMCkuc3RyaW5nKG4pO3JldHVybiB0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e3JlbW90ZUFwaVNwZWNJZHM6W119O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9vLnJlbW90ZUFwaVNwZWNJZHMucHVzaChuLnN0cmluZygpKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3JlbW90ZUFwaVNwZWNJZHM6W119O3JldHVybiB0LnJlbW90ZUFwaVNwZWNJZHM9ZS5yZW1vdGVBcGlTcGVjSWRzPy5tYXAoKGU9PmUpKXx8W10sdH19fSw2MTkyMDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5TcG9uc29yZWRJbmZvPXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO3QuU3BvbnNvcmVkSW5mbz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiEwPT09ZS5zcG9uc29yZWQmJnQudWludDMyKDgpLmJvb2woZS5zcG9uc29yZWQpLFwiXCIhPT1lLnNsdWdUZXh0JiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuc2x1Z1RleHQpLDAhPT1lLnNwb25zb3JlZFR5cGUmJnQudWludDMyKDI0KS5pbnQzMihlLnNwb25zb3JlZFR5cGUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17c3BvbnNvcmVkOiExLHNsdWdUZXh0OlwiXCIsc3BvbnNvcmVkVHlwZTowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5zcG9uc29yZWQ9bi5ib29sKCk7YnJlYWs7Y2FzZSAyOm8uc2x1Z1RleHQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDM6by5zcG9uc29yZWRUeXBlPW4uaW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3Nwb25zb3JlZDohMSxzbHVnVGV4dDpcIlwiLHNwb25zb3JlZFR5cGU6MH07cmV0dXJuIHQuc3BvbnNvcmVkPWUuc3BvbnNvcmVkPz8hMSx0LnNsdWdUZXh0PWUuc2x1Z1RleHQ/P1wiXCIsdC5zcG9uc29yZWRUeXBlPWUuc3BvbnNvcmVkVHlwZT8/MCx0fX19LDMyNDQ2OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlRyYWNraW5nSW5mbz12b2lkIDA7Y29uc3QgaT1yKG4oNDE1ODMpKSxvPW4oNjE0MzcpLGE9cihuKDYyMTAwKSk7ZnVuY3Rpb24gcygpe3JldHVybntlbmNHZW9EYXRhOlwiXCIsc25hcEluZm86dm9pZCAwLGFkU2VydmVSZXF1ZXN0SWQ6XCJcIixyYXdBZERhdGE6XCJcIixza2lwVHJhY2s6ITEsZW5jcnlwdGVkU3BvbnNvcmVkVW5sb2NrYWJsZVRhcmdldGluZ0luZm9EYXRhOlwiXCIsYWRUcmFja1VybDpcIlwiLHJhbmtpbmdJZDpcIlwiLHJhbmtpbmdEYXRhOlwiXCIscmFua2VkOiExLGVuY3J5cHRlZFVzZXJUcmFja0RhdGE6XCJcIixhZElkOm5ldyBVaW50OEFycmF5LGFkU2VydmVUaW1lc3RhbXBNaWxsaXM6XCIwXCIsYWRTZXJ2ZUl0ZW1JZDpuZXcgVWludDhBcnJheSxjYXJvdXNlbExlbnNTb3VyY2U6MH19dC5UcmFja2luZ0luZm89e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5lbmNHZW9EYXRhJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUuZW5jR2VvRGF0YSksdm9pZCAwIT09ZS5zbmFwSW5mbyYmby5VbmxvY2thYmxlc1NuYXBJbmZvLmVuY29kZShlLnNuYXBJbmZvLHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLFwiXCIhPT1lLmFkU2VydmVSZXF1ZXN0SWQmJnQudWludDMyKDI2KS5zdHJpbmcoZS5hZFNlcnZlUmVxdWVzdElkKSxcIlwiIT09ZS5yYXdBZERhdGEmJnQudWludDMyKDM0KS5zdHJpbmcoZS5yYXdBZERhdGEpLCEwPT09ZS5za2lwVHJhY2smJnQudWludDMyKDQwKS5ib29sKGUuc2tpcFRyYWNrKSxcIlwiIT09ZS5lbmNyeXB0ZWRTcG9uc29yZWRVbmxvY2thYmxlVGFyZ2V0aW5nSW5mb0RhdGEmJnQudWludDMyKDUwKS5zdHJpbmcoZS5lbmNyeXB0ZWRTcG9uc29yZWRVbmxvY2thYmxlVGFyZ2V0aW5nSW5mb0RhdGEpLFwiXCIhPT1lLmFkVHJhY2tVcmwmJnQudWludDMyKDU4KS5zdHJpbmcoZS5hZFRyYWNrVXJsKSxcIlwiIT09ZS5yYW5raW5nSWQmJnQudWludDMyKDY2KS5zdHJpbmcoZS5yYW5raW5nSWQpLFwiXCIhPT1lLnJhbmtpbmdEYXRhJiZ0LnVpbnQzMig3NCkuc3RyaW5nKGUucmFua2luZ0RhdGEpLCEwPT09ZS5yYW5rZWQmJnQudWludDMyKDgwKS5ib29sKGUucmFua2VkKSxcIlwiIT09ZS5lbmNyeXB0ZWRVc2VyVHJhY2tEYXRhJiZ0LnVpbnQzMig5MCkuc3RyaW5nKGUuZW5jcnlwdGVkVXNlclRyYWNrRGF0YSksMCE9PWUuYWRJZC5sZW5ndGgmJnQudWludDMyKDk4KS5ieXRlcyhlLmFkSWQpLFwiMFwiIT09ZS5hZFNlcnZlVGltZXN0YW1wTWlsbGlzJiZ0LnVpbnQzMigxMDQpLmludDY0KGUuYWRTZXJ2ZVRpbWVzdGFtcE1pbGxpcyksMCE9PWUuYWRTZXJ2ZUl0ZW1JZC5sZW5ndGgmJnQudWludDMyKDExNCkuYnl0ZXMoZS5hZFNlcnZlSXRlbUlkKSwwIT09ZS5jYXJvdXNlbExlbnNTb3VyY2UmJnQudWludDMyKDEyMCkuaW50MzIoZS5jYXJvdXNlbExlbnNTb3VyY2UpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT1zKCk7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuZW5jR2VvRGF0YT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLnNuYXBJbmZvPW8uVW5sb2NrYWJsZXNTbmFwSW5mby5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDM6aS5hZFNlcnZlUmVxdWVzdElkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA0OmkucmF3QWREYXRhPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA1Omkuc2tpcFRyYWNrPW4uYm9vbCgpO2JyZWFrO2Nhc2UgNjppLmVuY3J5cHRlZFNwb25zb3JlZFVubG9ja2FibGVUYXJnZXRpbmdJbmZvRGF0YT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNzppLmFkVHJhY2tVcmw9bi5zdHJpbmcoKTticmVhaztjYXNlIDg6aS5yYW5raW5nSWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDk6aS5yYW5raW5nRGF0YT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMTA6aS5yYW5rZWQ9bi5ib29sKCk7YnJlYWs7Y2FzZSAxMTppLmVuY3J5cHRlZFVzZXJUcmFja0RhdGE9bi5zdHJpbmcoKTticmVhaztjYXNlIDEyOmkuYWRJZD1uLmJ5dGVzKCk7YnJlYWs7Y2FzZSAxMzppLmFkU2VydmVUaW1lc3RhbXBNaWxsaXM9bi5pbnQ2NCgpLnRvU3RyaW5nKCk7YnJlYWs7Y2FzZSAxNDppLmFkU2VydmVJdGVtSWQ9bi5ieXRlcygpO2JyZWFrO2Nhc2UgMTU6aS5jYXJvdXNlbExlbnNTb3VyY2U9bi5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD1zKCk7cmV0dXJuIHQuZW5jR2VvRGF0YT1lLmVuY0dlb0RhdGE/P1wiXCIsdC5zbmFwSW5mbz12b2lkIDAhPT1lLnNuYXBJbmZvJiZudWxsIT09ZS5zbmFwSW5mbz9vLlVubG9ja2FibGVzU25hcEluZm8uZnJvbVBhcnRpYWwoZS5zbmFwSW5mbyk6dm9pZCAwLHQuYWRTZXJ2ZVJlcXVlc3RJZD1lLmFkU2VydmVSZXF1ZXN0SWQ/P1wiXCIsdC5yYXdBZERhdGE9ZS5yYXdBZERhdGE/P1wiXCIsdC5za2lwVHJhY2s9ZS5za2lwVHJhY2s/PyExLHQuZW5jcnlwdGVkU3BvbnNvcmVkVW5sb2NrYWJsZVRhcmdldGluZ0luZm9EYXRhPWUuZW5jcnlwdGVkU3BvbnNvcmVkVW5sb2NrYWJsZVRhcmdldGluZ0luZm9EYXRhPz9cIlwiLHQuYWRUcmFja1VybD1lLmFkVHJhY2tVcmw/P1wiXCIsdC5yYW5raW5nSWQ9ZS5yYW5raW5nSWQ/P1wiXCIsdC5yYW5raW5nRGF0YT1lLnJhbmtpbmdEYXRhPz9cIlwiLHQucmFua2VkPWUucmFua2VkPz8hMSx0LmVuY3J5cHRlZFVzZXJUcmFja0RhdGE9ZS5lbmNyeXB0ZWRVc2VyVHJhY2tEYXRhPz9cIlwiLHQuYWRJZD1lLmFkSWQ/P25ldyBVaW50OEFycmF5LHQuYWRTZXJ2ZVRpbWVzdGFtcE1pbGxpcz1lLmFkU2VydmVUaW1lc3RhbXBNaWxsaXM/P1wiMFwiLHQuYWRTZXJ2ZUl0ZW1JZD1lLmFkU2VydmVJdGVtSWQ/P25ldyBVaW50OEFycmF5LHQuY2Fyb3VzZWxMZW5zU291cmNlPWUuY2Fyb3VzZWxMZW5zU291cmNlPz8wLHR9fSxhLmRlZmF1bHQudXRpbC5Mb25nIT09aS5kZWZhdWx0JiYoYS5kZWZhdWx0LnV0aWwuTG9uZz1pLmRlZmF1bHQsYS5kZWZhdWx0LmNvbmZpZ3VyZSgpKX0sMTE2NjQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuU25hcHBhYmxlRW5jcnlwdGVkS2V5PXQuR2V0U25hcHBhYmxlUmVzcG9uc2U9dC5HZXRTbmFwcGFibGVSZXF1ZXN0PXQuUHV0U25hcHBhYmxlUmVzcG9uc2U9dC5QdXRTbmFwcGFibGVSZXF1ZXN0PXQuU25hcHBhYmxlPXQuU25hcHBhYmxlTWVzc2FnZT10LlVzZXNDYW1lcmFSb2xsPXQuU25hcDNERGF0YT10LlNuYXBwYWJsZU1lZGlhPXQuU2Vzc2lvbkRhdGFfUGxheWVyRGF0YUVudHJ5PXQuU2Vzc2lvbkRhdGE9dC5QbGF5ZXJEYXRhX1N0b3JlRW50cnk9dC5QbGF5ZXJEYXRhPXQuRW5jcnlwdGlvbkRhdGFfSXZTdG9yZUVudHJ5PXQuRW5jcnlwdGlvbkRhdGE9dC5TbmFwcGFibGVNZXNzYWdlX1JlcGx5VHlwZT10LkVuY3J5cHRpb25EYXRhX0VuY3J5cHRpb25TY2hlbWU9dm9pZCAwO2NvbnN0IGk9cihuKDQxNTgzKSksbz1yKG4oNjIxMDApKTtmdW5jdGlvbiBhKCl7cmV0dXJue2tleTpuZXcgVWludDhBcnJheSxpdlN0b3JlOnt9LGlzS2V5U2VydmVyRW5jcnlwdGVkOiExLGlzS2V5RTJlRW5jcnlwdGVkOiExLGVuY3J5cHRpb25TY2hlbWU6MH19ZnVuY3Rpb24gcygpe3JldHVybntrZXk6XCJcIix2YWx1ZTpuZXcgVWludDhBcnJheX19ZnVuY3Rpb24gYygpe3JldHVybntzdG9yZTp7fSxzZXJpYWxpemVkU3RvcmU6bmV3IFVpbnQ4QXJyYXl9fWZ1bmN0aW9uIGwoKXtyZXR1cm57ZW5jcnlwdGVkS2V5Om5ldyBVaW50OEFycmF5LGVuY3J5cHRpb25LZXlJZDpcIlwiLGVuY3J5cHRpb25LZXlJdjpuZXcgVWludDhBcnJheX19ZnVuY3Rpb24gdShlKXtyZXR1cm4gZS50b1N0cmluZygpfXZhciBkLGY7KGY9dC5FbmNyeXB0aW9uRGF0YV9FbmNyeXB0aW9uU2NoZW1lfHwodC5FbmNyeXB0aW9uRGF0YV9FbmNyeXB0aW9uU2NoZW1lPXt9KSlbZi5OT1RfQVBQTElDQUJMRT0wXT1cIk5PVF9BUFBMSUNBQkxFXCIsZltmLlNQT09LRVk9MV09XCJTUE9PS0VZXCIsZltmLlJFR0lTVFJZPTJdPVwiUkVHSVNUUllcIixmW2YuRklERUxJVVM9M109XCJGSURFTElVU1wiLGZbZi5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKGQ9dC5TbmFwcGFibGVNZXNzYWdlX1JlcGx5VHlwZXx8KHQuU25hcHBhYmxlTWVzc2FnZV9SZXBseVR5cGU9e30pKVtkLk5PVF9BUFBMSUNBQkxFPTBdPVwiTk9UX0FQUExJQ0FCTEVcIixkW2QuQ09OVEVYVD0xXT1cIkNPTlRFWFRcIixkW2QuSU5URVJTVElUSUFMPTJdPVwiSU5URVJTVElUSUFMXCIsZFtkLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0LkVuY3J5cHRpb25EYXRhPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLmtleS5sZW5ndGgmJm4udWludDMyKDEwKS5ieXRlcyhlLmtleSksT2JqZWN0LmVudHJpZXMoZS5pdlN0b3JlKS5mb3JFYWNoKChlPT57bGV0W3IsaV09ZTt0LkVuY3J5cHRpb25EYXRhX0l2U3RvcmVFbnRyeS5lbmNvZGUoe2tleTpyLHZhbHVlOml9LG4udWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpfSkpLCEwPT09ZS5pc0tleVNlcnZlckVuY3J5cHRlZCYmbi51aW50MzIoMjQpLmJvb2woZS5pc0tleVNlcnZlckVuY3J5cHRlZCksITA9PT1lLmlzS2V5RTJlRW5jcnlwdGVkJiZuLnVpbnQzMigzMikuYm9vbChlLmlzS2V5RTJlRW5jcnlwdGVkKSwwIT09ZS5lbmNyeXB0aW9uU2NoZW1lJiZuLnVpbnQzMig0MCkuaW50MzIoZS5lbmNyeXB0aW9uU2NoZW1lKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IHM9YSgpO2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpzLmtleT1yLmJ5dGVzKCk7YnJlYWs7Y2FzZSAyOmNvbnN0IG49dC5FbmNyeXB0aW9uRGF0YV9JdlN0b3JlRW50cnkuZGVjb2RlKHIsci51aW50MzIoKSk7dm9pZCAwIT09bi52YWx1ZSYmKHMuaXZTdG9yZVtuLmtleV09bi52YWx1ZSk7YnJlYWs7Y2FzZSAzOnMuaXNLZXlTZXJ2ZXJFbmNyeXB0ZWQ9ci5ib29sKCk7YnJlYWs7Y2FzZSA0OnMuaXNLZXlFMmVFbmNyeXB0ZWQ9ci5ib29sKCk7YnJlYWs7Y2FzZSA1OnMuZW5jcnlwdGlvblNjaGVtZT1yLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBzfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PWEoKTtyZXR1cm4gdC5rZXk9ZS5rZXk/P25ldyBVaW50OEFycmF5LHQuaXZTdG9yZT1PYmplY3QuZW50cmllcyhlLml2U3RvcmU/P3t9KS5yZWR1Y2UoKChlLHQpPT57bGV0W24scl09dDtyZXR1cm4gdm9pZCAwIT09ciYmKGVbbl09ciksZX0pLHt9KSx0LmlzS2V5U2VydmVyRW5jcnlwdGVkPWUuaXNLZXlTZXJ2ZXJFbmNyeXB0ZWQ/PyExLHQuaXNLZXlFMmVFbmNyeXB0ZWQ9ZS5pc0tleUUyZUVuY3J5cHRlZD8/ITEsdC5lbmNyeXB0aW9uU2NoZW1lPWUuZW5jcnlwdGlvblNjaGVtZT8/MCx0fX0sdC5FbmNyeXB0aW9uRGF0YV9JdlN0b3JlRW50cnk9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5rZXkmJnQudWludDMyKDEwKS5zdHJpbmcoZS5rZXkpLDAhPT1lLnZhbHVlLmxlbmd0aCYmdC51aW50MzIoMTgpLmJ5dGVzKGUudmFsdWUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT1zKCk7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkua2V5PW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkudmFsdWU9bi5ieXRlcygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD1zKCk7cmV0dXJuIHQua2V5PWUua2V5Pz9cIlwiLHQudmFsdWU9ZS52YWx1ZT8/bmV3IFVpbnQ4QXJyYXksdH19LHQuUGxheWVyRGF0YT17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiBPYmplY3QuZW50cmllcyhlLnN0b3JlKS5mb3JFYWNoKChlPT57bGV0W3IsaV09ZTt0LlBsYXllckRhdGFfU3RvcmVFbnRyeS5lbmNvZGUoe2tleTpyLHZhbHVlOml9LG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpfSkpLDAhPT1lLnNlcmlhbGl6ZWRTdG9yZS5sZW5ndGgmJm4udWludDMyKDE4KS5ieXRlcyhlLnNlcmlhbGl6ZWRTdG9yZSksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBhPWMoKTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6Y29uc3Qgbj10LlBsYXllckRhdGFfU3RvcmVFbnRyeS5kZWNvZGUocixyLnVpbnQzMigpKTt2b2lkIDAhPT1uLnZhbHVlJiYoYS5zdG9yZVtuLmtleV09bi52YWx1ZSk7YnJlYWs7Y2FzZSAyOmEuc2VyaWFsaXplZFN0b3JlPXIuYnl0ZXMoKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9YygpO3JldHVybiB0LnN0b3JlPU9iamVjdC5lbnRyaWVzKGUuc3RvcmU/P3t9KS5yZWR1Y2UoKChlLHQpPT57bGV0W24scl09dDtyZXR1cm4gdm9pZCAwIT09ciYmKGVbbl09U3RyaW5nKHIpKSxlfSkse30pLHQuc2VyaWFsaXplZFN0b3JlPWUuc2VyaWFsaXplZFN0b3JlPz9uZXcgVWludDhBcnJheSx0fX0sdC5QbGF5ZXJEYXRhX1N0b3JlRW50cnk9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5rZXkmJnQudWludDMyKDEwKS5zdHJpbmcoZS5rZXkpLFwiXCIhPT1lLnZhbHVlJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUudmFsdWUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17a2V5OlwiXCIsdmFsdWU6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkua2V5PW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkudmFsdWU9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2tleTpcIlwiLHZhbHVlOlwiXCJ9O3JldHVybiB0LmtleT1lLmtleT8/XCJcIix0LnZhbHVlPWUudmFsdWU/P1wiXCIsdH19LHQuU2Vzc2lvbkRhdGE9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoZS5wbGF5ZXJEYXRhKS5mb3JFYWNoKChlPT57bGV0W3IsaV09ZTt0LlNlc3Npb25EYXRhX1BsYXllckRhdGFFbnRyeS5lbmNvZGUoe2tleTpyLHZhbHVlOml9LG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpfSkpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3QgYT17cGxheWVyRGF0YTp7fX07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO2lmKGU+Pj4zPT0xKXtjb25zdCBlPXQuU2Vzc2lvbkRhdGFfUGxheWVyRGF0YUVudHJ5LmRlY29kZShyLHIudWludDMyKCkpO3ZvaWQgMCE9PWUudmFsdWUmJihhLnBsYXllckRhdGFbZS5rZXldPWUudmFsdWUpfWVsc2Ugci5za2lwVHlwZSg3JmUpfXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtwbGF5ZXJEYXRhOnt9fTtyZXR1cm4gbi5wbGF5ZXJEYXRhPU9iamVjdC5lbnRyaWVzKGUucGxheWVyRGF0YT8/e30pLnJlZHVjZSgoKGUsbik9PntsZXRbcixpXT1uO3JldHVybiB2b2lkIDAhPT1pJiYoZVtyXT10LlBsYXllckRhdGEuZnJvbVBhcnRpYWwoaSkpLGV9KSx7fSksbn19LHQuU2Vzc2lvbkRhdGFfUGxheWVyRGF0YUVudHJ5PXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUua2V5JiZuLnVpbnQzMigxMCkuc3RyaW5nKGUua2V5KSx2b2lkIDAhPT1lLnZhbHVlJiZ0LlBsYXllckRhdGEuZW5jb2RlKGUudmFsdWUsbi51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBhPXtrZXk6XCJcIix2YWx1ZTp2b2lkIDB9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLmtleT1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMjphLnZhbHVlPXQuUGxheWVyRGF0YS5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e2tleTpcIlwiLHZhbHVlOnZvaWQgMH07cmV0dXJuIG4ua2V5PWUua2V5Pz9cIlwiLG4udmFsdWU9dm9pZCAwIT09ZS52YWx1ZSYmbnVsbCE9PWUudmFsdWU/dC5QbGF5ZXJEYXRhLmZyb21QYXJ0aWFsKGUudmFsdWUpOnZvaWQgMCxufX0sdC5TbmFwcGFibGVNZWRpYT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnNlc3Npb25JZCYmdC51aW50MzIoMTApLnN0cmluZyhlLnNlc3Npb25JZCksXCJcIiE9PWUucGxheWVySWQmJnQudWludDMyKDE4KS5zdHJpbmcoZS5wbGF5ZXJJZCksXCJcIiE9PWUudXJsJiZ0LnVpbnQzMigyNikuc3RyaW5nKGUudXJsKSxcIlwiIT09ZS5rZXkmJnQudWludDMyKDM0KS5zdHJpbmcoZS5rZXkpLFwiMFwiIT09ZS5jcmVhdGVkVGltZSYmdC51aW50MzIoNDApLmludDY0KGUuY3JlYXRlZFRpbWUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17c2Vzc2lvbklkOlwiXCIscGxheWVySWQ6XCJcIix1cmw6XCJcIixrZXk6XCJcIixjcmVhdGVkVGltZTpcIjBcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuc2Vzc2lvbklkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkucGxheWVySWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDM6aS51cmw9bi5zdHJpbmcoKTticmVhaztjYXNlIDQ6aS5rZXk9bi5zdHJpbmcoKTticmVhaztjYXNlIDU6aS5jcmVhdGVkVGltZT11KG4uaW50NjQoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtzZXNzaW9uSWQ6XCJcIixwbGF5ZXJJZDpcIlwiLHVybDpcIlwiLGtleTpcIlwiLGNyZWF0ZWRUaW1lOlwiMFwifTtyZXR1cm4gdC5zZXNzaW9uSWQ9ZS5zZXNzaW9uSWQ/P1wiXCIsdC5wbGF5ZXJJZD1lLnBsYXllcklkPz9cIlwiLHQudXJsPWUudXJsPz9cIlwiLHQua2V5PWUua2V5Pz9cIlwiLHQuY3JlYXRlZFRpbWU9ZS5jcmVhdGVkVGltZT8/XCIwXCIsdH19LHQuU25hcDNERGF0YT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiEwPT09ZS5hbGxvd1ppcHBlZE1lZGlhJiZ0LnVpbnQzMig4KS5ib29sKGUuYWxsb3daaXBwZWRNZWRpYSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXthbGxvd1ppcHBlZE1lZGlhOiExfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/aS5hbGxvd1ppcHBlZE1lZGlhPW4uYm9vbCgpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17YWxsb3daaXBwZWRNZWRpYTohMX07cmV0dXJuIHQuYWxsb3daaXBwZWRNZWRpYT1lLmFsbG93WmlwcGVkTWVkaWE/PyExLHR9fSx0LlVzZXNDYW1lcmFSb2xsPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuITA9PT1lLnVzZXNDYW1lcmFSb2xsJiZ0LnVpbnQzMig4KS5ib29sKGUudXNlc0NhbWVyYVJvbGwpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17dXNlc0NhbWVyYVJvbGw6ITF9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLnVzZXNDYW1lcmFSb2xsPW4uYm9vbCgpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dXNlc0NhbWVyYVJvbGw6ITF9O3JldHVybiB0LnVzZXNDYW1lcmFSb2xsPWUudXNlc0NhbWVyYVJvbGw/PyExLHR9fSx0LlNuYXBwYWJsZU1lc3NhZ2U9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTt2b2lkIDAhPT1lLnNuYXBwYWJsZSYmdC5TbmFwcGFibGUuZW5jb2RlKGUuc25hcHBhYmxlLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO2Zvcihjb25zdCByIG9mIGUubWVkaWEpdC5TbmFwcGFibGVNZWRpYS5lbmNvZGUocixuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKTtcIlwiIT09ZS5lZmZlY3RJZCYmbi51aW50MzIoMjYpLnN0cmluZyhlLmVmZmVjdElkKTtmb3IoY29uc3QgdCBvZiBlLnVzZXJJZHMpbi51aW50MzIoMzQpLnN0cmluZyh0KTtyZXR1cm4gMCE9PWUuZm9jdXNQb2ludFgmJm4udWludDMyKDQ1KS5mbG9hdChlLmZvY3VzUG9pbnRYKSwwIT09ZS5mb2N1c1BvaW50WSYmbi51aW50MzIoNTMpLmZsb2F0KGUuZm9jdXNQb2ludFkpLDAhPT1lLmZvY3VzUG9pbnRXaWR0aCYmbi51aW50MzIoNjEpLmZsb2F0KGUuZm9jdXNQb2ludFdpZHRoKSwwIT09ZS5yZXBseVR5cGUmJm4udWludDMyKDY0KS5pbnQzMihlLnJlcGx5VHlwZSksdm9pZCAwIT09ZS5zbmFwM2REYXRhJiZ0LlNuYXAzRERhdGEuZW5jb2RlKGUuc25hcDNkRGF0YSxuLnVpbnQzMig3NCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnVzZXNDYW1lcmFSb2xsRGF0YSYmdC5Vc2VzQ2FtZXJhUm9sbC5lbmNvZGUoZS51c2VzQ2FtZXJhUm9sbERhdGEsbi51aW50MzIoODIpLmZvcmsoKSkubGRlbGltKCksXCJcIiE9PWUuYXNzZXRCYXRjaElkJiZuLnVpbnQzMig0MDAyKS5zdHJpbmcoZS5hc3NldEJhdGNoSWQpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3QgYT17c25hcHBhYmxlOnZvaWQgMCxtZWRpYTpbXSxlZmZlY3RJZDpcIlwiLHVzZXJJZHM6W10sZm9jdXNQb2ludFg6MCxmb2N1c1BvaW50WTowLGZvY3VzUG9pbnRXaWR0aDowLHJlcGx5VHlwZTowLHNuYXAzZERhdGE6dm9pZCAwLHVzZXNDYW1lcmFSb2xsRGF0YTp2b2lkIDAsYXNzZXRCYXRjaElkOlwiXCJ9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLnNuYXBwYWJsZT10LlNuYXBwYWJsZS5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDI6YS5tZWRpYS5wdXNoKHQuU25hcHBhYmxlTWVkaWEuZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2Nhc2UgMzphLmVmZmVjdElkPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSA0OmEudXNlcklkcy5wdXNoKHIuc3RyaW5nKCkpO2JyZWFrO2Nhc2UgNTphLmZvY3VzUG9pbnRYPXIuZmxvYXQoKTticmVhaztjYXNlIDY6YS5mb2N1c1BvaW50WT1yLmZsb2F0KCk7YnJlYWs7Y2FzZSA3OmEuZm9jdXNQb2ludFdpZHRoPXIuZmxvYXQoKTticmVhaztjYXNlIDg6YS5yZXBseVR5cGU9ci5pbnQzMigpO2JyZWFrO2Nhc2UgOTphLnNuYXAzZERhdGE9dC5TbmFwM0REYXRhLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMTA6YS51c2VzQ2FtZXJhUm9sbERhdGE9dC5Vc2VzQ2FtZXJhUm9sbC5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDUwMDphLmFzc2V0QmF0Y2hJZD1yLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17c25hcHBhYmxlOnZvaWQgMCxtZWRpYTpbXSxlZmZlY3RJZDpcIlwiLHVzZXJJZHM6W10sZm9jdXNQb2ludFg6MCxmb2N1c1BvaW50WTowLGZvY3VzUG9pbnRXaWR0aDowLHJlcGx5VHlwZTowLHNuYXAzZERhdGE6dm9pZCAwLHVzZXNDYW1lcmFSb2xsRGF0YTp2b2lkIDAsYXNzZXRCYXRjaElkOlwiXCJ9O3JldHVybiBuLnNuYXBwYWJsZT12b2lkIDAhPT1lLnNuYXBwYWJsZSYmbnVsbCE9PWUuc25hcHBhYmxlP3QuU25hcHBhYmxlLmZyb21QYXJ0aWFsKGUuc25hcHBhYmxlKTp2b2lkIDAsbi5tZWRpYT1lLm1lZGlhPy5tYXAoKGU9PnQuU25hcHBhYmxlTWVkaWEuZnJvbVBhcnRpYWwoZSkpKXx8W10sbi5lZmZlY3RJZD1lLmVmZmVjdElkPz9cIlwiLG4udXNlcklkcz1lLnVzZXJJZHM/Lm1hcCgoZT0+ZSkpfHxbXSxuLmZvY3VzUG9pbnRYPWUuZm9jdXNQb2ludFg/PzAsbi5mb2N1c1BvaW50WT1lLmZvY3VzUG9pbnRZPz8wLG4uZm9jdXNQb2ludFdpZHRoPWUuZm9jdXNQb2ludFdpZHRoPz8wLG4ucmVwbHlUeXBlPWUucmVwbHlUeXBlPz8wLG4uc25hcDNkRGF0YT12b2lkIDAhPT1lLnNuYXAzZERhdGEmJm51bGwhPT1lLnNuYXAzZERhdGE/dC5TbmFwM0REYXRhLmZyb21QYXJ0aWFsKGUuc25hcDNkRGF0YSk6dm9pZCAwLG4udXNlc0NhbWVyYVJvbGxEYXRhPXZvaWQgMCE9PWUudXNlc0NhbWVyYVJvbGxEYXRhJiZudWxsIT09ZS51c2VzQ2FtZXJhUm9sbERhdGE/dC5Vc2VzQ2FtZXJhUm9sbC5mcm9tUGFydGlhbChlLnVzZXNDYW1lcmFSb2xsRGF0YSk6dm9pZCAwLG4uYXNzZXRCYXRjaElkPWUuYXNzZXRCYXRjaElkPz9cIlwiLG59fSx0LlNuYXBwYWJsZT17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmlkJiZuLnVpbnQzMigxMCkuc3RyaW5nKGUuaWQpLFwiXCIhPT1lLnNlc3Npb25JZCYmbi51aW50MzIoMTgpLnN0cmluZyhlLnNlc3Npb25JZCksXCJcIiE9PWUucGxheWVySWQmJm4udWludDMyKDI2KS5zdHJpbmcoZS5wbGF5ZXJJZCksdm9pZCAwIT09ZS5zZXNzaW9uRGF0YSYmdC5TZXNzaW9uRGF0YS5lbmNvZGUoZS5zZXNzaW9uRGF0YSxuLnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKSxcIjBcIiE9PWUuY3JlYXRlZFRpbWUmJm4udWludDMyKDQwKS5pbnQ2NChlLmNyZWF0ZWRUaW1lKSxcIjBcIiE9PWUuZXhwaXJlVGltZSYmbi51aW50MzIoNDgpLmludDY0KGUuZXhwaXJlVGltZSksMCE9PWUudmVyc2lvbiYmbi51aW50MzIoNTYpLmludDMyKGUudmVyc2lvbiksdm9pZCAwIT09ZS5lbmNyeXB0aW9uRGF0YSYmdC5FbmNyeXB0aW9uRGF0YS5lbmNvZGUoZS5lbmNyeXB0aW9uRGF0YSxuLnVpbnQzMig2NikuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS5zZXNzaW9uRGVwdGgmJm4udWludDMyKDcyKS5pbnQzMihlLnNlc3Npb25EZXB0aCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBhPXtpZDpcIlwiLHNlc3Npb25JZDpcIlwiLHBsYXllcklkOlwiXCIsc2Vzc2lvbkRhdGE6dm9pZCAwLGNyZWF0ZWRUaW1lOlwiMFwiLGV4cGlyZVRpbWU6XCIwXCIsdmVyc2lvbjowLGVuY3J5cHRpb25EYXRhOnZvaWQgMCxzZXNzaW9uRGVwdGg6MH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmEuaWQ9ci5zdHJpbmcoKTticmVhaztjYXNlIDI6YS5zZXNzaW9uSWQ9ci5zdHJpbmcoKTticmVhaztjYXNlIDM6YS5wbGF5ZXJJZD1yLnN0cmluZygpO2JyZWFrO2Nhc2UgNDphLnNlc3Npb25EYXRhPXQuU2Vzc2lvbkRhdGEuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSA1OmEuY3JlYXRlZFRpbWU9dShyLmludDY0KCkpO2JyZWFrO2Nhc2UgNjphLmV4cGlyZVRpbWU9dShyLmludDY0KCkpO2JyZWFrO2Nhc2UgNzphLnZlcnNpb249ci5pbnQzMigpO2JyZWFrO2Nhc2UgODphLmVuY3J5cHRpb25EYXRhPXQuRW5jcnlwdGlvbkRhdGEuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSA5OmEuc2Vzc2lvbkRlcHRoPXIuaW50MzIoKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e2lkOlwiXCIsc2Vzc2lvbklkOlwiXCIscGxheWVySWQ6XCJcIixzZXNzaW9uRGF0YTp2b2lkIDAsY3JlYXRlZFRpbWU6XCIwXCIsZXhwaXJlVGltZTpcIjBcIix2ZXJzaW9uOjAsZW5jcnlwdGlvbkRhdGE6dm9pZCAwLHNlc3Npb25EZXB0aDowfTtyZXR1cm4gbi5pZD1lLmlkPz9cIlwiLG4uc2Vzc2lvbklkPWUuc2Vzc2lvbklkPz9cIlwiLG4ucGxheWVySWQ9ZS5wbGF5ZXJJZD8/XCJcIixuLnNlc3Npb25EYXRhPXZvaWQgMCE9PWUuc2Vzc2lvbkRhdGEmJm51bGwhPT1lLnNlc3Npb25EYXRhP3QuU2Vzc2lvbkRhdGEuZnJvbVBhcnRpYWwoZS5zZXNzaW9uRGF0YSk6dm9pZCAwLG4uY3JlYXRlZFRpbWU9ZS5jcmVhdGVkVGltZT8/XCIwXCIsbi5leHBpcmVUaW1lPWUuZXhwaXJlVGltZT8/XCIwXCIsbi52ZXJzaW9uPWUudmVyc2lvbj8/MCxuLmVuY3J5cHRpb25EYXRhPXZvaWQgMCE9PWUuZW5jcnlwdGlvbkRhdGEmJm51bGwhPT1lLmVuY3J5cHRpb25EYXRhP3QuRW5jcnlwdGlvbkRhdGEuZnJvbVBhcnRpYWwoZS5lbmNyeXB0aW9uRGF0YSk6dm9pZCAwLG4uc2Vzc2lvbkRlcHRoPWUuc2Vzc2lvbkRlcHRoPz8wLG59fSx0LlB1dFNuYXBwYWJsZVJlcXVlc3Q9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTt2b2lkIDAhPT1lLnNuYXBwYWJsZSYmdC5TbmFwcGFibGUuZW5jb2RlKGUuc25hcHBhYmxlLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO2Zvcihjb25zdCByIG9mIGUubWVkaWEpdC5TbmFwcGFibGVNZWRpYS5lbmNvZGUocixuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBhPXtzbmFwcGFibGU6dm9pZCAwLG1lZGlhOltdfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS5zbmFwcGFibGU9dC5TbmFwcGFibGUuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOmEubWVkaWEucHVzaCh0LlNuYXBwYWJsZU1lZGlhLmRlY29kZShyLHIudWludDMyKCkpKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e3NuYXBwYWJsZTp2b2lkIDAsbWVkaWE6W119O3JldHVybiBuLnNuYXBwYWJsZT12b2lkIDAhPT1lLnNuYXBwYWJsZSYmbnVsbCE9PWUuc25hcHBhYmxlP3QuU25hcHBhYmxlLmZyb21QYXJ0aWFsKGUuc25hcHBhYmxlKTp2b2lkIDAsbi5tZWRpYT1lLm1lZGlhPy5tYXAoKGU9PnQuU25hcHBhYmxlTWVkaWEuZnJvbVBhcnRpYWwoZSkpKXx8W10sbn19LHQuUHV0U25hcHBhYmxlUmVzcG9uc2U9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5pZCYmdC51aW50MzIoMTApLnN0cmluZyhlLmlkKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2lkOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLmlkPW4uc3RyaW5nKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtpZDpcIlwifTtyZXR1cm4gdC5pZD1lLmlkPz9cIlwiLHR9fSx0LkdldFNuYXBwYWJsZVJlcXVlc3Q9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5pZCYmdC51aW50MzIoMTApLnN0cmluZyhlLmlkKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2lkOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLmlkPW4uc3RyaW5nKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtpZDpcIlwifTtyZXR1cm4gdC5pZD1lLmlkPz9cIlwiLHR9fSx0LkdldFNuYXBwYWJsZVJlc3BvbnNlPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7dm9pZCAwIT09ZS5kYXRhJiZ0LlNuYXBwYWJsZS5lbmNvZGUoZS5kYXRhLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO2Zvcihjb25zdCByIG9mIGUubWVkaWEpdC5TbmFwcGFibGVNZWRpYS5lbmNvZGUocixuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBhPXtkYXRhOnZvaWQgMCxtZWRpYTpbXX07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmEuZGF0YT10LlNuYXBwYWJsZS5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDI6YS5tZWRpYS5wdXNoKHQuU25hcHBhYmxlTWVkaWEuZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17ZGF0YTp2b2lkIDAsbWVkaWE6W119O3JldHVybiBuLmRhdGE9dm9pZCAwIT09ZS5kYXRhJiZudWxsIT09ZS5kYXRhP3QuU25hcHBhYmxlLmZyb21QYXJ0aWFsKGUuZGF0YSk6dm9pZCAwLG4ubWVkaWE9ZS5tZWRpYT8ubWFwKChlPT50LlNuYXBwYWJsZU1lZGlhLmZyb21QYXJ0aWFsKGUpKSl8fFtdLG59fSx0LlNuYXBwYWJsZUVuY3J5cHRlZEtleT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5lbmNyeXB0ZWRLZXkubGVuZ3RoJiZ0LnVpbnQzMigxMCkuYnl0ZXMoZS5lbmNyeXB0ZWRLZXkpLFwiXCIhPT1lLmVuY3J5cHRpb25LZXlJZCYmdC51aW50MzIoMTgpLnN0cmluZyhlLmVuY3J5cHRpb25LZXlJZCksMCE9PWUuZW5jcnlwdGlvbktleUl2Lmxlbmd0aCYmdC51aW50MzIoMjYpLmJ5dGVzKGUuZW5jcnlwdGlvbktleUl2KSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9bCgpO2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmVuY3J5cHRlZEtleT1uLmJ5dGVzKCk7YnJlYWs7Y2FzZSAyOmkuZW5jcnlwdGlvbktleUlkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmkuZW5jcnlwdGlvbktleUl2PW4uYnl0ZXMoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9bCgpO3JldHVybiB0LmVuY3J5cHRlZEtleT1lLmVuY3J5cHRlZEtleT8/bmV3IFVpbnQ4QXJyYXksdC5lbmNyeXB0aW9uS2V5SWQ9ZS5lbmNyeXB0aW9uS2V5SWQ/P1wiXCIsdC5lbmNyeXB0aW9uS2V5SXY9ZS5lbmNyeXB0aW9uS2V5SXY/P25ldyBVaW50OEFycmF5LHR9fSxvLmRlZmF1bHQudXRpbC5Mb25nIT09aS5kZWZhdWx0JiYoby5kZWZhdWx0LnV0aWwuTG9uZz1pLmRlZmF1bHQsby5kZWZhdWx0LmNvbmZpZ3VyZSgpKX0sNjk1MjU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQXVkaW9UcmFja1ZvbHVtZT10LlJlbmRlckVmZmVjdD12b2lkIDA7Y29uc3QgaT1yKG4oNjIxMDApKTt0LlJlbmRlckVmZmVjdD17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiYXVkaW9UcmFja1ZvbHVtZVwiPT09ZS5lZmZlY3RUeXBlPy4kY2FzZSYmdC5BdWRpb1RyYWNrVm9sdW1lLmVuY29kZShlLmVmZmVjdFR5cGUuYXVkaW9UcmFja1ZvbHVtZSxuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IG89dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGE9e2VmZmVjdFR5cGU6dm9pZCAwfTtmb3IoO3IucG9zPG87KXtjb25zdCBlPXIudWludDMyKCk7ZT4+PjM9PTE/YS5lZmZlY3RUeXBlPXskY2FzZTpcImF1ZGlvVHJhY2tWb2x1bWVcIixhdWRpb1RyYWNrVm9sdW1lOnQuQXVkaW9UcmFja1ZvbHVtZS5kZWNvZGUocixyLnVpbnQzMigpKX06ci5za2lwVHlwZSg3JmUpfXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtlZmZlY3RUeXBlOnZvaWQgMH07cmV0dXJuXCJhdWRpb1RyYWNrVm9sdW1lXCI9PT1lLmVmZmVjdFR5cGU/LiRjYXNlJiZ2b2lkIDAhPT1lLmVmZmVjdFR5cGU/LmF1ZGlvVHJhY2tWb2x1bWUmJm51bGwhPT1lLmVmZmVjdFR5cGU/LmF1ZGlvVHJhY2tWb2x1bWUmJihuLmVmZmVjdFR5cGU9eyRjYXNlOlwiYXVkaW9UcmFja1ZvbHVtZVwiLGF1ZGlvVHJhY2tWb2x1bWU6dC5BdWRpb1RyYWNrVm9sdW1lLmZyb21QYXJ0aWFsKGUuZWZmZWN0VHlwZS5hdWRpb1RyYWNrVm9sdW1lKX0pLG59fSx0LkF1ZGlvVHJhY2tWb2x1bWU9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUudm9sdW1lJiZ0LnVpbnQzMig5KS5kb3VibGUoZS52b2x1bWUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17dm9sdW1lOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9vLnZvbHVtZT1uLmRvdWJsZSgpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dm9sdW1lOjB9O3JldHVybiB0LnZvbHVtZT1lLnZvbHVtZT8/MCx0fX19LDE0MjU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRGVza3RvcFdlYkRldmljZUluZm89dC5PU0luZm89dC5PU0luZm9fT3NUeXBlPXZvaWQgMDtjb25zdCBpPW4oMTI4NzApLG89cihuKDYyMTAwKSk7dmFyIGE7KGE9dC5PU0luZm9fT3NUeXBlfHwodC5PU0luZm9fT3NUeXBlPXt9KSlbYS5VTlNFVD0wXT1cIlVOU0VUXCIsYVthLklPUz0xXT1cIklPU1wiLGFbYS5BTkRST0lEPTJdPVwiQU5EUk9JRFwiLGFbYS5XSU5ET1dTPTNdPVwiV0lORE9XU1wiLGFbYS5NQUNfT1NfWD00XT1cIk1BQ19PU19YXCIsYVthLkxJTlVYPTVdPVwiTElOVVhcIixhW2EuQ0hST01FX09TPTZdPVwiQ0hST01FX09TXCIsYVthLk9TX1RZUEVfT1RIRVI9N109XCJPU19UWVBFX09USEVSXCIsYVthLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0Lk9TSW5mbz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5vc1R5cGUmJnQudWludDMyKDgpLmludDMyKGUub3NUeXBlKSxcIlwiIT09ZS5vc1ZlcnNpb24mJnQudWludDMyKDE4KS5zdHJpbmcoZS5vc1ZlcnNpb24pLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17b3NUeXBlOjAsb3NWZXJzaW9uOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLm9zVHlwZT1uLmludDMyKCk7YnJlYWs7Y2FzZSAyOmkub3NWZXJzaW9uPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtvc1R5cGU6MCxvc1ZlcnNpb246XCJcIn07cmV0dXJuIHQub3NUeXBlPWUub3NUeXBlPz8wLHQub3NWZXJzaW9uPWUub3NWZXJzaW9uPz9cIlwiLHR9fSx0LkRlc2t0b3BXZWJEZXZpY2VJbmZvPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUuc25hcGNoYXRBcHBWZXJzaW9uJiZpLkFwcFZlcnNpb24uZW5jb2RlKGUuc25hcGNoYXRBcHBWZXJzaW9uLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUub3NJbmZvJiZ0Lk9TSW5mby5lbmNvZGUoZS5vc0luZm8sbi51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksXCJcIiE9PWUuYnVuZGxlVGFnJiZuLnVpbnQzMigyNikuc3RyaW5nKGUuYnVuZGxlVGFnKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGE9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IHM9e3NuYXBjaGF0QXBwVmVyc2lvbjp2b2lkIDAsb3NJbmZvOnZvaWQgMCxidW5kbGVUYWc6XCJcIn07Zm9yKDtyLnBvczxhOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOnMuc25hcGNoYXRBcHBWZXJzaW9uPWkuQXBwVmVyc2lvbi5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDI6cy5vc0luZm89dC5PU0luZm8uZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAzOnMuYnVuZGxlVGFnPXIuc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBzfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtzbmFwY2hhdEFwcFZlcnNpb246dm9pZCAwLG9zSW5mbzp2b2lkIDAsYnVuZGxlVGFnOlwiXCJ9O3JldHVybiBuLnNuYXBjaGF0QXBwVmVyc2lvbj12b2lkIDAhPT1lLnNuYXBjaGF0QXBwVmVyc2lvbiYmbnVsbCE9PWUuc25hcGNoYXRBcHBWZXJzaW9uP2kuQXBwVmVyc2lvbi5mcm9tUGFydGlhbChlLnNuYXBjaGF0QXBwVmVyc2lvbik6dm9pZCAwLG4ub3NJbmZvPXZvaWQgMCE9PWUub3NJbmZvJiZudWxsIT09ZS5vc0luZm8/dC5PU0luZm8uZnJvbVBhcnRpYWwoZS5vc0luZm8pOnZvaWQgMCxuLmJ1bmRsZVRhZz1lLmJ1bmRsZVRhZz8/XCJcIixufX19LDI0MTM1OihlLHQpPT57dmFyIG47dC50PXZvaWQgMCwobj10LnR8fCh0LnQ9e30pKVtuLlNOQVBDSEFUPTBdPVwiU05BUENIQVRcIixuW24uQklUTU9KST0xXT1cIkJJVE1PSklcIixuW24uV0VCPTJdPVwiV0VCXCIsbltuLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIn0sNDg4NTk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuU2FtcGxlUmVhc29ucz10LkFkZFBlbmRpbmdSZXNlbmRzUmVzcG9uc2U9dC5BZGRQZW5kaW5nUmVzZW5kc1JlcXVlc3Q9dC5QZW5kaW5nUmVzZW5kPXQuQWNrTm90aWZpY2F0aW9uUmVzcG9uc2U9dC5BY2tOb3RpZmljYXRpb25SZXF1ZXN0PXQuUHVzaE5vdGlmaWNhdGlvblJlcXVlc3RfU2VhbGVkRW52ZWxvcGVDb250ZW50RW50cnk9dC5QdXNoTm90aWZpY2F0aW9uUmVxdWVzdF9EZXByZWNhdGVkUGF5bG9hZEVudHJ5PXQuUHVzaE5vdGlmaWNhdGlvblJlcXVlc3Q9dC5CaW5hcnlQYXlsb2FkPXQuRGljdGlvbmFyeVBheWxvYWRfRGF0YUVudHJ5PXQuRGljdGlvbmFyeVBheWxvYWQ9dC5BbGVydD10Lklvc05vdGlmaWNhdGlvbkNvbmZpZz10LkNhdGVnb3J5PXQuVm9JUD10LkFuZHJvaWROb3RpZmljYXRpb25Db25maWc9dC5EcnlSdW49dC5HZW5lcmFsTm90aWZpY2F0aW9uQ29uZmlnPXQuTGVnYWN5VHlwZU5hbWU9dC5QdXNoTm90aWZpY2F0aW9uQ29uZmlnPXQuTm90aWZpY2F0aW9uVFRMPXQuUHVzaE5vdGlmaWNhdGlvbkhlYWRlcj10LlRyYWNraW5nU2V0dGluZ19UcmFja2luZ0RhdGFFbnRyeT10LlRyYWNraW5nU2V0dGluZz10LlNlbmRQdXNoQXN5bmNSZXNwb25zZT10LlNlbmRQdXNoUmVzcG9uc2U9dC5QdXNoTm90aWZpY2F0aW9uUmVzdWx0PXQuQWRkUGVuZGluZ1Jlc2VuZHNSZXNwb25zZV9TdGF0dXNDb2RlPXQuQWNrTm90aWZpY2F0aW9uUmVzcG9uc2VfU3RhdHVzQ29kZT10LkFja05vdGlmaWNhdGlvblJlcXVlc3RfQWNrRXZlbnQ9dC5TZW5kUHVzaEFzeW5jUmVzcG9uc2VfU3RhdHVzQ29kZT10LlNlbmRQdXNoUmVzcG9uc2VfU3RhdHVzQ29kZT10LlB1c2hOb3RpZmljYXRpb25SZXN1bHRfU3RhdHVzQ29kZT10LlRhcmdldFNjcmVlbj10LkxhdW5jaEltYWdlPXQuU291bmQ9dC5QdXNoUHJpb3JpdHk9dC5Ob3RpZmljYXRpb25Qcm92aWRlcj12b2lkIDA7Y29uc3QgaT1yKG4oNDE1ODMpKSxvPW4oMzgxNDApLGE9cihuKDYyMTAwKSkscz1uKDUzMDU2KTtmdW5jdGlvbiBjKCl7cmV0dXJue2RhdGE6bmV3IFVpbnQ4QXJyYXl9fWZ1bmN0aW9uIGwoKXtyZXR1cm57aGVhZGVyOnZvaWQgMCx0dGxJblNlY29uZHM6MCxwYXlsb2FkOm5ldyBVaW50OEFycmF5LGRlcHJlY2F0ZWRQYXlsb2FkOnt9LHNlYWxlZEVudmVsb3BlQ29udGVudDp7fSxpc1YyOiExLHB1c2hOb3RpZmljYXRpb25Db25maWdPdmVycmlkZTp2b2lkIDAsc3lzdGVtQWxlcnQ6dm9pZCAwLGluQXBwQWxlcnQ6dm9pZCAwLHBheWxvYWRzOnZvaWQgMH19ZnVuY3Rpb24gdShlKXtyZXR1cm4gZS50b1N0cmluZygpfXZhciBkLGYscCxtLGgsdixnLHksRSxfLEk7KEk9dC5Ob3RpZmljYXRpb25Qcm92aWRlcnx8KHQuTm90aWZpY2F0aW9uUHJvdmlkZXI9e30pKVtJLlVOU0VUPTBdPVwiVU5TRVRcIixJW0kuQVBOU19TSU1QTEU9MV09XCJBUE5TX1NJTVBMRVwiLElbSS5BUE5TX1NJTEVOVD0yXT1cIkFQTlNfU0lMRU5UXCIsSVtJLkFQTlNfQ09OVEVOVF9BVkFJTEFCTEU9M109XCJBUE5TX0NPTlRFTlRfQVZBSUxBQkxFXCIsSVtJLlZPSVA9NF09XCJWT0lQXCIsSVtJLlNOU19WT0lQPTVdPVwiU05TX1ZPSVBcIixJW0kuU05TX0FQTlM9Nl09XCJTTlNfQVBOU1wiLElbSS5HQ009N109XCJHQ01cIixJW0kuRkNNPThdPVwiRkNNXCIsSVtJLk1PQ0s9OV09XCJNT0NLXCIsSVtJLlNOU19GQ009MTBdPVwiU05TX0ZDTVwiLElbSS5ITVM9MTFdPVwiSE1TXCIsSVtJLldFQl9QVVNIPTEyXT1cIldFQl9QVVNIXCIsSVtJLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwoXz10LlB1c2hQcmlvcml0eXx8KHQuUHVzaFByaW9yaXR5PXt9KSlbXy5VTlNFVF9QUklPUklUWT0wXT1cIlVOU0VUX1BSSU9SSVRZXCIsX1tfLk5PUk1BTD0xXT1cIk5PUk1BTFwiLF9bXy5ISUdIPTJdPVwiSElHSFwiLF9bXy5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKEU9dC5Tb3VuZHx8KHQuU291bmQ9e30pKVtFLlVOU0VUX1NPVU5EPTBdPVwiVU5TRVRfU09VTkRcIixFW0UuREVGQVVMVF9TT1VORD0xXT1cIkRFRkFVTFRfU09VTkRcIixFW0UuUklOR19GVUxMPTJdPVwiUklOR19GVUxMXCIsRVtFLlJJTkdfQkZGPTNdPVwiUklOR19CRkZcIixFW0UuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLCh5PXQuTGF1bmNoSW1hZ2V8fCh0LkxhdW5jaEltYWdlPXt9KSlbeS5VTlNFVF9JTUFHRT0wXT1cIlVOU0VUX0lNQUdFXCIseVt5LlNQTEFTSF9GRUVEPTFdPVwiU1BMQVNIX0ZFRURcIix5W3kuU1BMQVNIX0NIQVQ9Ml09XCJTUExBU0hfQ0hBVFwiLHlbeS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKGc9dC5UYXJnZXRTY3JlZW58fCh0LlRhcmdldFNjcmVlbj17fSkpW2cuVU5TRVRfVEFSR0VUX1NDUkVFTj0wXT1cIlVOU0VUX1RBUkdFVF9TQ1JFRU5cIixnW2cuQ1VSUkVOVD0xXT1cIkNVUlJFTlRcIixnW2cuQ0hBVF9GRUVEPTJdPVwiQ0hBVF9GRUVEXCIsZ1tnLkNIQVRfV0lORE9XPTNdPVwiQ0hBVF9XSU5ET1dcIixnW2cuQ0FNRVJBPTRdPVwiQ0FNRVJBXCIsZ1tnLk1ZX0ZSSUVORFM9NV09XCJNWV9GUklFTkRTXCIsZ1tnLkFERF9GUklFTkRTPTZdPVwiQUREX0ZSSUVORFNcIixnW2cuUVVJQ0tfQUREPTddPVwiUVVJQ0tfQUREXCIsZ1tnLk1FTU9SSUVTX0xBR1VOQT04XT1cIk1FTU9SSUVTX0xBR1VOQVwiLGdbZy5TTkFQX0FEU19QT1JUQUw9OV09XCJTTkFQX0FEU19QT1JUQUxcIixnW2cuT05fREVNQU5EX0dFT0ZJTFRFUj0xMF09XCJPTl9ERU1BTkRfR0VPRklMVEVSXCIsZ1tnLk1FTU9SSUVTX0JBQ0tVUD0xMV09XCJNRU1PUklFU19CQUNLVVBcIixnW2cuTE9DQVRJT05fU0hBUklOR19TRVRUSU5HUz0xMl09XCJMT0NBVElPTl9TSEFSSU5HX1NFVFRJTkdTXCIsZ1tnLk1BUD0xM109XCJNQVBcIixnW2cuTU9NRU5UUz0xNF09XCJNT01FTlRTXCIsZ1tnLkRGPTE1XT1cIkRGXCIsZ1tnLk1PTUVOVFNfU1VCU0NSSUJFPTE2XT1cIk1PTUVOVFNfU1VCU0NSSUJFXCIsZ1tnLk1FTU9SSUVTX1NBVkVEX1RBQj0xN109XCJNRU1PUklFU19TQVZFRF9UQUJcIixnW2cuTUVNT1JJRVNfQUxMX1RBQj0xOF09XCJNRU1PUklFU19BTExfVEFCXCIsZ1tnLlNUT1JZX01BTkFHRU1FTlRfUEFHRT0xOV09XCJTVE9SWV9NQU5BR0VNRU5UX1BBR0VcIixnW2cuUFJPRklMRT0yMF09XCJQUk9GSUxFXCIsZ1tnLlNIQVJFRF9TVE9SWV9QUk9GSUxFPTIxXT1cIlNIQVJFRF9TVE9SWV9QUk9GSUxFXCIsZ1tnLkJJVE1PSklfQ1JFQVRJT05fU0NSRUVOPTIyXT1cIkJJVE1PSklfQ1JFQVRJT05fU0NSRUVOXCIsZ1tnLkZJTkRfRlJJRU5EUz0yM109XCJGSU5EX0ZSSUVORFNcIixnW2cuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLCh2PXQuUHVzaE5vdGlmaWNhdGlvblJlc3VsdF9TdGF0dXNDb2RlfHwodC5QdXNoTm90aWZpY2F0aW9uUmVzdWx0X1N0YXR1c0NvZGU9e30pKVt2LlVOS05PV049MF09XCJVTktOT1dOXCIsdlt2Lk9LPTFdPVwiT0tcIix2W3YuSU5WQUxJRF9QQVlMT0FEPTJdPVwiSU5WQUxJRF9QQVlMT0FEXCIsdlt2LkRFVklDRV9UT0tFTl9VTkFWQUlMQUJMRT0zXT1cIkRFVklDRV9UT0tFTl9VTkFWQUlMQUJMRVwiLHZbdi5VTlJFR0lTVEVSRUQ9NF09XCJVTlJFR0lTVEVSRURcIix2W3YuVVNFUl9OT1RJRklDQVRJT05fRElTQUJMRUQ9NV09XCJVU0VSX05PVElGSUNBVElPTl9ESVNBQkxFRFwiLHZbdi5TRVJWSUNFX1JBVEVfTElNSVRFRD02XT1cIlNFUlZJQ0VfUkFURV9MSU1JVEVEXCIsdlt2LlJFQ0lQSUVOVF9SQVRFX0xJTUlURUQ9N109XCJSRUNJUElFTlRfUkFURV9MSU1JVEVEXCIsdlt2LlBST1ZJREVSX1RSQU5TSUVOVF9FUlJPUj04XT1cIlBST1ZJREVSX1RSQU5TSUVOVF9FUlJPUlwiLHZbdi5JTlRFUk5BTF9GQUlMVVJFPTldPVwiSU5URVJOQUxfRkFJTFVSRVwiLHZbdi5JTlZBTElEX1JFUVVFU1Q9MTBdPVwiSU5WQUxJRF9SRVFVRVNUXCIsdlt2LlBSSVZBQ1lfU0VUVElOR19SRUpFQ1RFRD0xMV09XCJQUklWQUNZX1NFVFRJTkdfUkVKRUNURURcIix2W3YuQkFEX0RFVklDRV9UT0tFTj0xMl09XCJCQURfREVWSUNFX1RPS0VOXCIsdlt2LlJFSkVDVEVEX0JZX1BST1ZJREVSPTEzXT1cIlJFSkVDVEVEX0JZX1BST1ZJREVSXCIsdlt2LlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwoaD10LlNlbmRQdXNoUmVzcG9uc2VfU3RhdHVzQ29kZXx8KHQuU2VuZFB1c2hSZXNwb25zZV9TdGF0dXNDb2RlPXt9KSlbaC5VTktOT1dOPTBdPVwiVU5LTk9XTlwiLGhbaC5PSz0xXT1cIk9LXCIsaFtoLk9LX1VTRVJfTk9UX1JFQUNIQUJMRT0yXT1cIk9LX1VTRVJfTk9UX1JFQUNIQUJMRVwiLGhbaC5PS19QUklWQUNZX1NFVFRJTkdfUkVKRUNURUQ9M109XCJPS19QUklWQUNZX1NFVFRJTkdfUkVKRUNURURcIixoW2guSU5WQUxJRF9SRVFVRVNUPTEwMV09XCJJTlZBTElEX1JFUVVFU1RcIixoW2guSU5URVJOQUxfRVJST1I9MTAyXT1cIklOVEVSTkFMX0VSUk9SXCIsaFtoLlBST1ZJREVSX1RIUk9UVExFRD0yMDFdPVwiUFJPVklERVJfVEhST1RUTEVEXCIsaFtoLlBST1ZJREVSX1JFSkVDVEVEPTIwMl09XCJQUk9WSURFUl9SRUpFQ1RFRFwiLGhbaC5QUk9WSURFUl9VTkFWQUlMQUJMRT0yMDNdPVwiUFJPVklERVJfVU5BVkFJTEFCTEVcIixoW2guVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLChtPXQuU2VuZFB1c2hBc3luY1Jlc3BvbnNlX1N0YXR1c0NvZGV8fCh0LlNlbmRQdXNoQXN5bmNSZXNwb25zZV9TdGF0dXNDb2RlPXt9KSlbbS5VTktOT1dOPTBdPVwiVU5LTk9XTlwiLG1bbS5SRUNFSVZFRD0xXT1cIlJFQ0VJVkVEXCIsbVttLklOVkFMSURfUkVRVUVTVD0yXT1cIklOVkFMSURfUkVRVUVTVFwiLG1bbS5USFJPVFRMRUQ9M109XCJUSFJPVFRMRURcIixtW20uU0VSVklDRV9VTkFWQUlMQUJMRT00XT1cIlNFUlZJQ0VfVU5BVkFJTEFCTEVcIixtW20uSU5URVJOQUxfRVJST1I9NV09XCJJTlRFUk5BTF9FUlJPUlwiLG1bbS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKHA9dC5BY2tOb3RpZmljYXRpb25SZXF1ZXN0X0Fja0V2ZW50fHwodC5BY2tOb3RpZmljYXRpb25SZXF1ZXN0X0Fja0V2ZW50PXt9KSlbcC5SRUNFSVZFRD0wXT1cIlJFQ0VJVkVEXCIscFtwLkRJU1BMQVlFRD0xXT1cIkRJU1BMQVlFRFwiLHBbcC5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKGY9dC5BY2tOb3RpZmljYXRpb25SZXNwb25zZV9TdGF0dXNDb2RlfHwodC5BY2tOb3RpZmljYXRpb25SZXNwb25zZV9TdGF0dXNDb2RlPXt9KSlbZi5VTktOT1dOPTBdPVwiVU5LTk9XTlwiLGZbZi5PSz0xXT1cIk9LXCIsZltmLklOVkFMSURfUkVRVUVTVD0yXT1cIklOVkFMSURfUkVRVUVTVFwiLGZbZi5JTlRFUk5BTF9GQUlMVVJFPTNdPVwiSU5URVJOQUxfRkFJTFVSRVwiLGZbZi5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKGQ9dC5BZGRQZW5kaW5nUmVzZW5kc1Jlc3BvbnNlX1N0YXR1c0NvZGV8fCh0LkFkZFBlbmRpbmdSZXNlbmRzUmVzcG9uc2VfU3RhdHVzQ29kZT17fSkpW2QuVU5LTk9XTj0wXT1cIlVOS05PV05cIixkW2QuT0s9MV09XCJPS1wiLGRbZC5USFJPVFRMRUQ9Ml09XCJUSFJPVFRMRURcIixkW2QuSU5URVJOQUxfRkFJTFVSRT0zXT1cIklOVEVSTkFMX0ZBSUxVUkVcIixkW2QuU0VSVklDRV9VTkFWQUlMQUJMRT00XT1cIlNFUlZJQ0VfVU5BVkFJTEFCTEVcIixkW2QuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLHQuUHVzaE5vdGlmaWNhdGlvblJlc3VsdD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLnB1c2hOb3RpZmljYXRpb25JZCYmby5VVUlELmVuY29kZShlLnB1c2hOb3RpZmljYXRpb25JZCx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS5zdGF0dXMmJnQudWludDMyKDE2KS5pbnQzMihlLnN0YXR1cyksMCE9PWUubm90aWZpY2F0aW9uUHJvdmlkZXImJnQudWludDMyKDI0KS5pbnQzMihlLm5vdGlmaWNhdGlvblByb3ZpZGVyKSwhMD09PWUuaXNSZXRyeWFibGUmJnQudWludDMyKDMyKS5ib29sKGUuaXNSZXRyeWFibGUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17cHVzaE5vdGlmaWNhdGlvbklkOnZvaWQgMCxzdGF0dXM6MCxub3RpZmljYXRpb25Qcm92aWRlcjowLGlzUmV0cnlhYmxlOiExfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5wdXNoTm90aWZpY2F0aW9uSWQ9by5VVUlELmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMjppLnN0YXR1cz1uLmludDMyKCk7YnJlYWs7Y2FzZSAzOmkubm90aWZpY2F0aW9uUHJvdmlkZXI9bi5pbnQzMigpO2JyZWFrO2Nhc2UgNDppLmlzUmV0cnlhYmxlPW4uYm9vbCgpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17cHVzaE5vdGlmaWNhdGlvbklkOnZvaWQgMCxzdGF0dXM6MCxub3RpZmljYXRpb25Qcm92aWRlcjowLGlzUmV0cnlhYmxlOiExfTtyZXR1cm4gdC5wdXNoTm90aWZpY2F0aW9uSWQ9dm9pZCAwIT09ZS5wdXNoTm90aWZpY2F0aW9uSWQmJm51bGwhPT1lLnB1c2hOb3RpZmljYXRpb25JZD9vLlVVSUQuZnJvbVBhcnRpYWwoZS5wdXNoTm90aWZpY2F0aW9uSWQpOnZvaWQgMCx0LnN0YXR1cz1lLnN0YXR1cz8/MCx0Lm5vdGlmaWNhdGlvblByb3ZpZGVyPWUubm90aWZpY2F0aW9uUHJvdmlkZXI/PzAsdC5pc1JldHJ5YWJsZT1lLmlzUmV0cnlhYmxlPz8hMSx0fX0sdC5TZW5kUHVzaFJlc3BvbnNlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUucHVzaE5vdGlmaWNhdGlvbklkJiZvLlVVSUQuZW5jb2RlKGUucHVzaE5vdGlmaWNhdGlvbklkLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLnN0YXR1cyYmdC51aW50MzIoMTYpLmludDMyKGUuc3RhdHVzKSxcIlwiIT09ZS5lcnJvckNvZGUmJnQudWludDMyKDI2KS5zdHJpbmcoZS5lcnJvckNvZGUpLCEwPT09ZS5pc1JldHJ5YWJsZSYmdC51aW50MzIoMzIpLmJvb2woZS5pc1JldHJ5YWJsZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtwdXNoTm90aWZpY2F0aW9uSWQ6dm9pZCAwLHN0YXR1czowLGVycm9yQ29kZTpcIlwiLGlzUmV0cnlhYmxlOiExfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5wdXNoTm90aWZpY2F0aW9uSWQ9by5VVUlELmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMjppLnN0YXR1cz1uLmludDMyKCk7YnJlYWs7Y2FzZSAzOmkuZXJyb3JDb2RlPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA0OmkuaXNSZXRyeWFibGU9bi5ib29sKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtwdXNoTm90aWZpY2F0aW9uSWQ6dm9pZCAwLHN0YXR1czowLGVycm9yQ29kZTpcIlwiLGlzUmV0cnlhYmxlOiExfTtyZXR1cm4gdC5wdXNoTm90aWZpY2F0aW9uSWQ9dm9pZCAwIT09ZS5wdXNoTm90aWZpY2F0aW9uSWQmJm51bGwhPT1lLnB1c2hOb3RpZmljYXRpb25JZD9vLlVVSUQuZnJvbVBhcnRpYWwoZS5wdXNoTm90aWZpY2F0aW9uSWQpOnZvaWQgMCx0LnN0YXR1cz1lLnN0YXR1cz8/MCx0LmVycm9yQ29kZT1lLmVycm9yQ29kZT8/XCJcIix0LmlzUmV0cnlhYmxlPWUuaXNSZXRyeWFibGU/PyExLHR9fSx0LlNlbmRQdXNoQXN5bmNSZXNwb25zZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLnB1c2hOb3RpZmljYXRpb25JZCYmby5VVUlELmVuY29kZShlLnB1c2hOb3RpZmljYXRpb25JZCx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS5zdGF0dXMmJnQudWludDMyKDE2KS5pbnQzMihlLnN0YXR1cyksITA9PT1lLmlzUmV0cnlhYmxlJiZ0LnVpbnQzMigyNCkuYm9vbChlLmlzUmV0cnlhYmxlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3B1c2hOb3RpZmljYXRpb25JZDp2b2lkIDAsc3RhdHVzOjAsaXNSZXRyeWFibGU6ITF9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnB1c2hOb3RpZmljYXRpb25JZD1vLlVVSUQuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOmkuc3RhdHVzPW4uaW50MzIoKTticmVhaztjYXNlIDM6aS5pc1JldHJ5YWJsZT1uLmJvb2woKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3B1c2hOb3RpZmljYXRpb25JZDp2b2lkIDAsc3RhdHVzOjAsaXNSZXRyeWFibGU6ITF9O3JldHVybiB0LnB1c2hOb3RpZmljYXRpb25JZD12b2lkIDAhPT1lLnB1c2hOb3RpZmljYXRpb25JZCYmbnVsbCE9PWUucHVzaE5vdGlmaWNhdGlvbklkP28uVVVJRC5mcm9tUGFydGlhbChlLnB1c2hOb3RpZmljYXRpb25JZCk6dm9pZCAwLHQuc3RhdHVzPWUuc3RhdHVzPz8wLHQuaXNSZXRyeWFibGU9ZS5pc1JldHJ5YWJsZT8/ITEsdH19LHQuVHJhY2tpbmdTZXR0aW5nPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuITA9PT1lLnRyYWNraW5nRGlzcGxheSYmbi51aW50MzIoOCkuYm9vbChlLnRyYWNraW5nRGlzcGxheSksITA9PT1lLnRyYWNraW5nRGVsaXZlcnkmJm4udWludDMyKDE2KS5ib29sKGUudHJhY2tpbmdEZWxpdmVyeSksT2JqZWN0LmVudHJpZXMoZS50cmFja2luZ0RhdGEpLmZvckVhY2goKGU9PntsZXRbcixpXT1lO3QuVHJhY2tpbmdTZXR0aW5nX1RyYWNraW5nRGF0YUVudHJ5LmVuY29kZSh7a2V5OnIsdmFsdWU6aX0sbi51aW50MzIoODIpLmZvcmsoKSkubGRlbGltKCl9KSksXCJcIiE9PWUuZGlzcGxheVRva2VuJiZuLnVpbnQzMig5MCkuc3RyaW5nKGUuZGlzcGxheVRva2VuKSxcIlwiIT09ZS5kZWxpdmVyeVRva2VuJiZuLnVpbnQzMig5OCkuc3RyaW5nKGUuZGVsaXZlcnlUb2tlbiksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXt0cmFja2luZ0Rpc3BsYXk6ITEsdHJhY2tpbmdEZWxpdmVyeTohMSx0cmFja2luZ0RhdGE6e30sZGlzcGxheVRva2VuOlwiXCIsZGVsaXZlcnlUb2tlbjpcIlwifTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by50cmFja2luZ0Rpc3BsYXk9ci5ib29sKCk7YnJlYWs7Y2FzZSAyOm8udHJhY2tpbmdEZWxpdmVyeT1yLmJvb2woKTticmVhaztjYXNlIDEwOmNvbnN0IG49dC5UcmFja2luZ1NldHRpbmdfVHJhY2tpbmdEYXRhRW50cnkuZGVjb2RlKHIsci51aW50MzIoKSk7dm9pZCAwIT09bi52YWx1ZSYmKG8udHJhY2tpbmdEYXRhW24ua2V5XT1uLnZhbHVlKTticmVhaztjYXNlIDExOm8uZGlzcGxheVRva2VuPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSAxMjpvLmRlbGl2ZXJ5VG9rZW49ci5zdHJpbmcoKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3RyYWNraW5nRGlzcGxheTohMSx0cmFja2luZ0RlbGl2ZXJ5OiExLHRyYWNraW5nRGF0YTp7fSxkaXNwbGF5VG9rZW46XCJcIixkZWxpdmVyeVRva2VuOlwiXCJ9O3JldHVybiB0LnRyYWNraW5nRGlzcGxheT1lLnRyYWNraW5nRGlzcGxheT8/ITEsdC50cmFja2luZ0RlbGl2ZXJ5PWUudHJhY2tpbmdEZWxpdmVyeT8/ITEsdC50cmFja2luZ0RhdGE9T2JqZWN0LmVudHJpZXMoZS50cmFja2luZ0RhdGE/P3t9KS5yZWR1Y2UoKChlLHQpPT57bGV0W24scl09dDtyZXR1cm4gdm9pZCAwIT09ciYmKGVbbl09U3RyaW5nKHIpKSxlfSkse30pLHQuZGlzcGxheVRva2VuPWUuZGlzcGxheVRva2VuPz9cIlwiLHQuZGVsaXZlcnlUb2tlbj1lLmRlbGl2ZXJ5VG9rZW4/P1wiXCIsdH19LHQuVHJhY2tpbmdTZXR0aW5nX1RyYWNraW5nRGF0YUVudHJ5PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUua2V5JiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUua2V5KSxcIlwiIT09ZS52YWx1ZSYmdC51aW50MzIoMTgpLnN0cmluZyhlLnZhbHVlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2tleTpcIlwiLHZhbHVlOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmtleT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLnZhbHVlPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtrZXk6XCJcIix2YWx1ZTpcIlwifTtyZXR1cm4gdC5rZXk9ZS5rZXk/P1wiXCIsdC52YWx1ZT1lLnZhbHVlPz9cIlwiLHR9fSx0LlB1c2hOb3RpZmljYXRpb25IZWFkZXI9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5yZWNpcGllbnRVc2VySWQmJm8uVVVJRC5lbmNvZGUoZS5yZWNpcGllbnRVc2VySWQsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksMCE9PWUucHVzaE5vdGlmaWNhdGlvblR5cGUmJm4udWludDMyKDE2KS5pbnQzMihlLnB1c2hOb3RpZmljYXRpb25UeXBlKSxcIlwiIT09ZS5ub3RpZmljYXRpb25LZXkmJm4udWludDMyKDI2KS5zdHJpbmcoZS5ub3RpZmljYXRpb25LZXkpLFwiXCIhPT1lLm5vdGlmaWNhdGlvblJldm9rZUtleSYmbi51aW50MzIoMzQpLnN0cmluZyhlLm5vdGlmaWNhdGlvblJldm9rZUtleSksMCE9PWUuc2VuZGVyT3JpZ2luJiZuLnVpbnQzMig3MikuaW50MzIoZS5zZW5kZXJPcmlnaW4pLCEwPT09ZS5mcm9tU2NoZWR1bGVyJiZuLnVpbnQzMig4MCkuYm9vbChlLmZyb21TY2hlZHVsZXIpLHZvaWQgMCE9PWUudHJhY2tpbmdTZXR0aW5nJiZ0LlRyYWNraW5nU2V0dGluZy5lbmNvZGUoZS50cmFja2luZ1NldHRpbmcsbi51aW50MzIoOTApLmZvcmsoKSkubGRlbGltKCksMCE9PWUubG9nZ2luZ1NhbXBsZVJhdGUmJm4udWludDMyKDEwMSkuZmxvYXQoZS5sb2dnaW5nU2FtcGxlUmF0ZSksXCJcIiE9PWUuY29udGVudElkZW50aWZpZXImJm4udWludDMyKDEwNikuc3RyaW5nKGUuY29udGVudElkZW50aWZpZXIpLCEwPT09ZS5lbmZvcmNlTm90aWZpY2F0aW9uUHJpdmFjeSYmbi51aW50MzIoMTEyKS5ib29sKGUuZW5mb3JjZU5vdGlmaWNhdGlvblByaXZhY3kpLHZvaWQgMCE9PWUuc2FtcGxlUmVhc29ucyYmdC5TYW1wbGVSZWFzb25zLmVuY29kZShlLnNhbXBsZVJlYXNvbnMsbi51aW50MzIoMTIyKS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLmFwcElkJiZuLnVpbnQzMigxMjgpLmludDMyKGUuYXBwSWQpLFwiMFwiIT09ZS5zZW50VGltZSYmbi51aW50MzIoNDApLmludDY0KGUuc2VudFRpbWUpLFwiXCIhPT1lLmRlbGl2ZXJ5VHJhY2tpbmdUb2tlbiYmbi51aW50MzIoNTApLnN0cmluZyhlLmRlbGl2ZXJ5VHJhY2tpbmdUb2tlbiksMCE9PWUubm90aWZpY2F0aW9uUHJvdmlkZXImJm4udWludDMyKDU2KS5pbnQzMihlLm5vdGlmaWNhdGlvblByb3ZpZGVyKSxcIlwiIT09ZS5jb2xsYXBzZUlkJiZuLnVpbnQzMig2Nikuc3RyaW5nKGUuY29sbGFwc2VJZCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBzPXtyZWNpcGllbnRVc2VySWQ6dm9pZCAwLHB1c2hOb3RpZmljYXRpb25UeXBlOjAsbm90aWZpY2F0aW9uS2V5OlwiXCIsbm90aWZpY2F0aW9uUmV2b2tlS2V5OlwiXCIsc2VuZGVyT3JpZ2luOjAsZnJvbVNjaGVkdWxlcjohMSx0cmFja2luZ1NldHRpbmc6dm9pZCAwLGxvZ2dpbmdTYW1wbGVSYXRlOjAsY29udGVudElkZW50aWZpZXI6XCJcIixlbmZvcmNlTm90aWZpY2F0aW9uUHJpdmFjeTohMSxzYW1wbGVSZWFzb25zOnZvaWQgMCxhcHBJZDowLHNlbnRUaW1lOlwiMFwiLGRlbGl2ZXJ5VHJhY2tpbmdUb2tlbjpcIlwiLG5vdGlmaWNhdGlvblByb3ZpZGVyOjAsY29sbGFwc2VJZDpcIlwifTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6cy5yZWNpcGllbnRVc2VySWQ9by5VVUlELmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMjpzLnB1c2hOb3RpZmljYXRpb25UeXBlPXIuaW50MzIoKTticmVhaztjYXNlIDM6cy5ub3RpZmljYXRpb25LZXk9ci5zdHJpbmcoKTticmVhaztjYXNlIDQ6cy5ub3RpZmljYXRpb25SZXZva2VLZXk9ci5zdHJpbmcoKTticmVhaztjYXNlIDk6cy5zZW5kZXJPcmlnaW49ci5pbnQzMigpO2JyZWFrO2Nhc2UgMTA6cy5mcm9tU2NoZWR1bGVyPXIuYm9vbCgpO2JyZWFrO2Nhc2UgMTE6cy50cmFja2luZ1NldHRpbmc9dC5UcmFja2luZ1NldHRpbmcuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAxMjpzLmxvZ2dpbmdTYW1wbGVSYXRlPXIuZmxvYXQoKTticmVhaztjYXNlIDEzOnMuY29udGVudElkZW50aWZpZXI9ci5zdHJpbmcoKTticmVhaztjYXNlIDE0OnMuZW5mb3JjZU5vdGlmaWNhdGlvblByaXZhY3k9ci5ib29sKCk7YnJlYWs7Y2FzZSAxNTpzLnNhbXBsZVJlYXNvbnM9dC5TYW1wbGVSZWFzb25zLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMTY6cy5hcHBJZD1yLmludDMyKCk7YnJlYWs7Y2FzZSA1OnMuc2VudFRpbWU9dShyLmludDY0KCkpO2JyZWFrO2Nhc2UgNjpzLmRlbGl2ZXJ5VHJhY2tpbmdUb2tlbj1yLnN0cmluZygpO2JyZWFrO2Nhc2UgNzpzLm5vdGlmaWNhdGlvblByb3ZpZGVyPXIuaW50MzIoKTticmVhaztjYXNlIDg6cy5jb2xsYXBzZUlkPXIuc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBzfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtyZWNpcGllbnRVc2VySWQ6dm9pZCAwLHB1c2hOb3RpZmljYXRpb25UeXBlOjAsbm90aWZpY2F0aW9uS2V5OlwiXCIsbm90aWZpY2F0aW9uUmV2b2tlS2V5OlwiXCIsc2VuZGVyT3JpZ2luOjAsZnJvbVNjaGVkdWxlcjohMSx0cmFja2luZ1NldHRpbmc6dm9pZCAwLGxvZ2dpbmdTYW1wbGVSYXRlOjAsY29udGVudElkZW50aWZpZXI6XCJcIixlbmZvcmNlTm90aWZpY2F0aW9uUHJpdmFjeTohMSxzYW1wbGVSZWFzb25zOnZvaWQgMCxhcHBJZDowLHNlbnRUaW1lOlwiMFwiLGRlbGl2ZXJ5VHJhY2tpbmdUb2tlbjpcIlwiLG5vdGlmaWNhdGlvblByb3ZpZGVyOjAsY29sbGFwc2VJZDpcIlwifTtyZXR1cm4gbi5yZWNpcGllbnRVc2VySWQ9dm9pZCAwIT09ZS5yZWNpcGllbnRVc2VySWQmJm51bGwhPT1lLnJlY2lwaWVudFVzZXJJZD9vLlVVSUQuZnJvbVBhcnRpYWwoZS5yZWNpcGllbnRVc2VySWQpOnZvaWQgMCxuLnB1c2hOb3RpZmljYXRpb25UeXBlPWUucHVzaE5vdGlmaWNhdGlvblR5cGU/PzAsbi5ub3RpZmljYXRpb25LZXk9ZS5ub3RpZmljYXRpb25LZXk/P1wiXCIsbi5ub3RpZmljYXRpb25SZXZva2VLZXk9ZS5ub3RpZmljYXRpb25SZXZva2VLZXk/P1wiXCIsbi5zZW5kZXJPcmlnaW49ZS5zZW5kZXJPcmlnaW4/PzAsbi5mcm9tU2NoZWR1bGVyPWUuZnJvbVNjaGVkdWxlcj8/ITEsbi50cmFja2luZ1NldHRpbmc9dm9pZCAwIT09ZS50cmFja2luZ1NldHRpbmcmJm51bGwhPT1lLnRyYWNraW5nU2V0dGluZz90LlRyYWNraW5nU2V0dGluZy5mcm9tUGFydGlhbChlLnRyYWNraW5nU2V0dGluZyk6dm9pZCAwLG4ubG9nZ2luZ1NhbXBsZVJhdGU9ZS5sb2dnaW5nU2FtcGxlUmF0ZT8/MCxuLmNvbnRlbnRJZGVudGlmaWVyPWUuY29udGVudElkZW50aWZpZXI/P1wiXCIsbi5lbmZvcmNlTm90aWZpY2F0aW9uUHJpdmFjeT1lLmVuZm9yY2VOb3RpZmljYXRpb25Qcml2YWN5Pz8hMSxuLnNhbXBsZVJlYXNvbnM9dm9pZCAwIT09ZS5zYW1wbGVSZWFzb25zJiZudWxsIT09ZS5zYW1wbGVSZWFzb25zP3QuU2FtcGxlUmVhc29ucy5mcm9tUGFydGlhbChlLnNhbXBsZVJlYXNvbnMpOnZvaWQgMCxuLmFwcElkPWUuYXBwSWQ/PzAsbi5zZW50VGltZT1lLnNlbnRUaW1lPz9cIjBcIixuLmRlbGl2ZXJ5VHJhY2tpbmdUb2tlbj1lLmRlbGl2ZXJ5VHJhY2tpbmdUb2tlbj8/XCJcIixuLm5vdGlmaWNhdGlvblByb3ZpZGVyPWUubm90aWZpY2F0aW9uUHJvdmlkZXI/PzAsbi5jb2xsYXBzZUlkPWUuY29sbGFwc2VJZD8/XCJcIixufX0sdC5Ob3RpZmljYXRpb25UVEw9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUudHRsSW5TZWMmJnQudWludDMyKDgpLnVpbnQzMihlLnR0bEluU2VjKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3R0bEluU2VjOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLnR0bEluU2VjPW4udWludDMyKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt0dGxJblNlYzowfTtyZXR1cm4gdC50dGxJblNlYz1lLnR0bEluU2VjPz8wLHR9fSx0LlB1c2hOb3RpZmljYXRpb25Db25maWc9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5nZW5lcmFsTm90aWZpY2F0aW9uQ29uZmlnJiZ0LkdlbmVyYWxOb3RpZmljYXRpb25Db25maWcuZW5jb2RlKGUuZ2VuZXJhbE5vdGlmaWNhdGlvbkNvbmZpZyxuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmFuZHJvaWROb3RpZmljYXRpb25Db25maWcmJnQuQW5kcm9pZE5vdGlmaWNhdGlvbkNvbmZpZy5lbmNvZGUoZS5hbmRyb2lkTm90aWZpY2F0aW9uQ29uZmlnLG4udWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuaW9zTm90aWZpY2F0aW9uQ29uZmlnJiZ0Lklvc05vdGlmaWNhdGlvbkNvbmZpZy5lbmNvZGUoZS5pb3NOb3RpZmljYXRpb25Db25maWcsbi51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXtnZW5lcmFsTm90aWZpY2F0aW9uQ29uZmlnOnZvaWQgMCxhbmRyb2lkTm90aWZpY2F0aW9uQ29uZmlnOnZvaWQgMCxpb3NOb3RpZmljYXRpb25Db25maWc6dm9pZCAwfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5nZW5lcmFsTm90aWZpY2F0aW9uQ29uZmlnPXQuR2VuZXJhbE5vdGlmaWNhdGlvbkNvbmZpZy5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDI6by5hbmRyb2lkTm90aWZpY2F0aW9uQ29uZmlnPXQuQW5kcm9pZE5vdGlmaWNhdGlvbkNvbmZpZy5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDM6by5pb3NOb3RpZmljYXRpb25Db25maWc9dC5Jb3NOb3RpZmljYXRpb25Db25maWcuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtnZW5lcmFsTm90aWZpY2F0aW9uQ29uZmlnOnZvaWQgMCxhbmRyb2lkTm90aWZpY2F0aW9uQ29uZmlnOnZvaWQgMCxpb3NOb3RpZmljYXRpb25Db25maWc6dm9pZCAwfTtyZXR1cm4gbi5nZW5lcmFsTm90aWZpY2F0aW9uQ29uZmlnPXZvaWQgMCE9PWUuZ2VuZXJhbE5vdGlmaWNhdGlvbkNvbmZpZyYmbnVsbCE9PWUuZ2VuZXJhbE5vdGlmaWNhdGlvbkNvbmZpZz90LkdlbmVyYWxOb3RpZmljYXRpb25Db25maWcuZnJvbVBhcnRpYWwoZS5nZW5lcmFsTm90aWZpY2F0aW9uQ29uZmlnKTp2b2lkIDAsbi5hbmRyb2lkTm90aWZpY2F0aW9uQ29uZmlnPXZvaWQgMCE9PWUuYW5kcm9pZE5vdGlmaWNhdGlvbkNvbmZpZyYmbnVsbCE9PWUuYW5kcm9pZE5vdGlmaWNhdGlvbkNvbmZpZz90LkFuZHJvaWROb3RpZmljYXRpb25Db25maWcuZnJvbVBhcnRpYWwoZS5hbmRyb2lkTm90aWZpY2F0aW9uQ29uZmlnKTp2b2lkIDAsbi5pb3NOb3RpZmljYXRpb25Db25maWc9dm9pZCAwIT09ZS5pb3NOb3RpZmljYXRpb25Db25maWcmJm51bGwhPT1lLmlvc05vdGlmaWNhdGlvbkNvbmZpZz90Lklvc05vdGlmaWNhdGlvbkNvbmZpZy5mcm9tUGFydGlhbChlLmlvc05vdGlmaWNhdGlvbkNvbmZpZyk6dm9pZCAwLG59fSx0LkxlZ2FjeVR5cGVOYW1lPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUubmFtZSYmdC51aW50MzIoMTApLnN0cmluZyhlLm5hbWUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17bmFtZTpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/aS5uYW1lPW4uc3RyaW5nKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtuYW1lOlwiXCJ9O3JldHVybiB0Lm5hbWU9ZS5uYW1lPz9cIlwiLHR9fSx0LkdlbmVyYWxOb3RpZmljYXRpb25Db25maWc9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS50dGxJblNlYyYmdC5Ob3RpZmljYXRpb25UVEwuZW5jb2RlKGUudHRsSW5TZWMsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksMCE9PWUucHVzaFByaW9yaXR5JiZuLnVpbnQzMigxNikuaW50MzIoZS5wdXNoUHJpb3JpdHkpLDAhPT1lLnNvdW5kJiZuLnVpbnQzMigyNCkuaW50MzIoZS5zb3VuZCksdm9pZCAwIT09ZS5sZWdhY3lUeXBlTmFtZSYmdC5MZWdhY3lUeXBlTmFtZS5lbmNvZGUoZS5sZWdhY3lUeXBlTmFtZSxuLnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89e3R0bEluU2VjOnZvaWQgMCxwdXNoUHJpb3JpdHk6MCxzb3VuZDowLGxlZ2FjeVR5cGVOYW1lOnZvaWQgMH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8udHRsSW5TZWM9dC5Ob3RpZmljYXRpb25UVEwuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOm8ucHVzaFByaW9yaXR5PXIuaW50MzIoKTticmVhaztjYXNlIDM6by5zb3VuZD1yLmludDMyKCk7YnJlYWs7Y2FzZSA0Om8ubGVnYWN5VHlwZU5hbWU9dC5MZWdhY3lUeXBlTmFtZS5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e3R0bEluU2VjOnZvaWQgMCxwdXNoUHJpb3JpdHk6MCxzb3VuZDowLGxlZ2FjeVR5cGVOYW1lOnZvaWQgMH07cmV0dXJuIG4udHRsSW5TZWM9dm9pZCAwIT09ZS50dGxJblNlYyYmbnVsbCE9PWUudHRsSW5TZWM/dC5Ob3RpZmljYXRpb25UVEwuZnJvbVBhcnRpYWwoZS50dGxJblNlYyk6dm9pZCAwLG4ucHVzaFByaW9yaXR5PWUucHVzaFByaW9yaXR5Pz8wLG4uc291bmQ9ZS5zb3VuZD8/MCxuLmxlZ2FjeVR5cGVOYW1lPXZvaWQgMCE9PWUubGVnYWN5VHlwZU5hbWUmJm51bGwhPT1lLmxlZ2FjeVR5cGVOYW1lP3QuTGVnYWN5VHlwZU5hbWUuZnJvbVBhcnRpYWwoZS5sZWdhY3lUeXBlTmFtZSk6dm9pZCAwLG59fSx0LkRyeVJ1bj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiEwPT09ZS5lbmFibGVkJiZ0LnVpbnQzMig4KS5ib29sKGUuZW5hYmxlZCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtlbmFibGVkOiExfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/aS5lbmFibGVkPW4uYm9vbCgpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17ZW5hYmxlZDohMX07cmV0dXJuIHQuZW5hYmxlZD1lLmVuYWJsZWQ/PyExLHR9fSx0LkFuZHJvaWROb3RpZmljYXRpb25Db25maWc9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5kcnlSdW4mJnQuRHJ5UnVuLmVuY29kZShlLmRyeVJ1bixuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS5ub3RpZmljYXRpb25Qcm92aWRlciYmbi51aW50MzIoMTYpLmludDMyKGUubm90aWZpY2F0aW9uUHJvdmlkZXIpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17ZHJ5UnVuOnZvaWQgMCxub3RpZmljYXRpb25Qcm92aWRlcjowfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5kcnlSdW49dC5EcnlSdW4uZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOm8ubm90aWZpY2F0aW9uUHJvdmlkZXI9ci5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17ZHJ5UnVuOnZvaWQgMCxub3RpZmljYXRpb25Qcm92aWRlcjowfTtyZXR1cm4gbi5kcnlSdW49dm9pZCAwIT09ZS5kcnlSdW4mJm51bGwhPT1lLmRyeVJ1bj90LkRyeVJ1bi5mcm9tUGFydGlhbChlLmRyeVJ1bik6dm9pZCAwLG4ubm90aWZpY2F0aW9uUHJvdmlkZXI9ZS5ub3RpZmljYXRpb25Qcm92aWRlcj8/MCxufX0sdC5Wb0lQPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuITA9PT1lLmVuYWJsZWQmJnQudWludDMyKDgpLmJvb2woZS5lbmFibGVkKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2VuYWJsZWQ6ITF9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLmVuYWJsZWQ9bi5ib29sKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtlbmFibGVkOiExfTtyZXR1cm4gdC5lbmFibGVkPWUuZW5hYmxlZD8/ITEsdH19LHQuQ2F0ZWdvcnk9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5uYW1lJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUubmFtZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtuYW1lOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLm5hbWU9bi5zdHJpbmcoKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e25hbWU6XCJcIn07cmV0dXJuIHQubmFtZT1lLm5hbWU/P1wiXCIsdH19LHQuSW9zTm90aWZpY2F0aW9uQ29uZmlnPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUudm9pcCYmdC5Wb0lQLmVuY29kZShlLnZvaXAsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksMCE9PWUubGF1bmNoSW1hZ2UmJm4udWludDMyKDE2KS5pbnQzMihlLmxhdW5jaEltYWdlKSwwIT09ZS50YXJnZXRTY3JlZW4mJm4udWludDMyKDI0KS5pbnQzMihlLnRhcmdldFNjcmVlbiksdm9pZCAwIT09ZS5jYXRlZ29yeSYmdC5DYXRlZ29yeS5lbmNvZGUoZS5jYXRlZ29yeSxuLnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS5ub3RpZmljYXRpb25Qcm92aWRlciYmbi51aW50MzIoNDApLmludDMyKGUubm90aWZpY2F0aW9uUHJvdmlkZXIpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17dm9pcDp2b2lkIDAsbGF1bmNoSW1hZ2U6MCx0YXJnZXRTY3JlZW46MCxjYXRlZ29yeTp2b2lkIDAsbm90aWZpY2F0aW9uUHJvdmlkZXI6MH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8udm9pcD10LlZvSVAuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOm8ubGF1bmNoSW1hZ2U9ci5pbnQzMigpO2JyZWFrO2Nhc2UgMzpvLnRhcmdldFNjcmVlbj1yLmludDMyKCk7YnJlYWs7Y2FzZSA0Om8uY2F0ZWdvcnk9dC5DYXRlZ29yeS5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDU6by5ub3RpZmljYXRpb25Qcm92aWRlcj1yLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXt2b2lwOnZvaWQgMCxsYXVuY2hJbWFnZTowLHRhcmdldFNjcmVlbjowLGNhdGVnb3J5OnZvaWQgMCxub3RpZmljYXRpb25Qcm92aWRlcjowfTtyZXR1cm4gbi52b2lwPXZvaWQgMCE9PWUudm9pcCYmbnVsbCE9PWUudm9pcD90LlZvSVAuZnJvbVBhcnRpYWwoZS52b2lwKTp2b2lkIDAsbi5sYXVuY2hJbWFnZT1lLmxhdW5jaEltYWdlPz8wLG4udGFyZ2V0U2NyZWVuPWUudGFyZ2V0U2NyZWVuPz8wLG4uY2F0ZWdvcnk9dm9pZCAwIT09ZS5jYXRlZ29yeSYmbnVsbCE9PWUuY2F0ZWdvcnk/dC5DYXRlZ29yeS5mcm9tUGFydGlhbChlLmNhdGVnb3J5KTp2b2lkIDAsbi5ub3RpZmljYXRpb25Qcm92aWRlcj1lLm5vdGlmaWNhdGlvblByb3ZpZGVyPz8wLG59fSx0LkFsZXJ0PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUudGl0bGUmJnQudWludDMyKDEwKS5zdHJpbmcoZS50aXRsZSksXCJcIiE9PWUuYm9keSYmdC51aW50MzIoMTgpLnN0cmluZyhlLmJvZHkpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17dGl0bGU6XCJcIixib2R5OlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnRpdGxlPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkuYm9keT1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dGl0bGU6XCJcIixib2R5OlwiXCJ9O3JldHVybiB0LnRpdGxlPWUudGl0bGU/P1wiXCIsdC5ib2R5PWUuYm9keT8/XCJcIix0fX0sdC5EaWN0aW9uYXJ5UGF5bG9hZD17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiBPYmplY3QuZW50cmllcyhlLmRhdGEpLmZvckVhY2goKGU9PntsZXRbcixpXT1lO3QuRGljdGlvbmFyeVBheWxvYWRfRGF0YUVudHJ5LmVuY29kZSh7a2V5OnIsdmFsdWU6aX0sbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCl9KSksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXtkYXRhOnt9fTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7aWYoZT4+PjM9PTEpe2NvbnN0IGU9dC5EaWN0aW9uYXJ5UGF5bG9hZF9EYXRhRW50cnkuZGVjb2RlKHIsci51aW50MzIoKSk7dm9pZCAwIT09ZS52YWx1ZSYmKG8uZGF0YVtlLmtleV09ZS52YWx1ZSl9ZWxzZSByLnNraXBUeXBlKDcmZSl9cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2RhdGE6e319O3JldHVybiB0LmRhdGE9T2JqZWN0LmVudHJpZXMoZS5kYXRhPz97fSkucmVkdWNlKCgoZSx0KT0+e2xldFtuLHJdPXQ7cmV0dXJuIHZvaWQgMCE9PXImJihlW25dPVN0cmluZyhyKSksZX0pLHt9KSx0fX0sdC5EaWN0aW9uYXJ5UGF5bG9hZF9EYXRhRW50cnk9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5rZXkmJnQudWludDMyKDEwKS5zdHJpbmcoZS5rZXkpLFwiXCIhPT1lLnZhbHVlJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUudmFsdWUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17a2V5OlwiXCIsdmFsdWU6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkua2V5PW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkudmFsdWU9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2tleTpcIlwiLHZhbHVlOlwiXCJ9O3JldHVybiB0LmtleT1lLmtleT8/XCJcIix0LnZhbHVlPWUudmFsdWU/P1wiXCIsdH19LHQuQmluYXJ5UGF5bG9hZD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5kYXRhLmxlbmd0aCYmdC51aW50MzIoMTApLmJ5dGVzKGUuZGF0YSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPWMoKTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/aS5kYXRhPW4uYnl0ZXMoKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9YygpO3JldHVybiB0LmRhdGE9ZS5kYXRhPz9uZXcgVWludDhBcnJheSx0fX0sdC5QdXNoTm90aWZpY2F0aW9uUmVxdWVzdD17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLmhlYWRlciYmdC5QdXNoTm90aWZpY2F0aW9uSGVhZGVyLmVuY29kZShlLmhlYWRlcixuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS50dGxJblNlY29uZHMmJm4udWludDMyKDE2KS51aW50MzIoZS50dGxJblNlY29uZHMpLDAhPT1lLnBheWxvYWQubGVuZ3RoJiZuLnVpbnQzMigyNikuYnl0ZXMoZS5wYXlsb2FkKSxPYmplY3QuZW50cmllcyhlLmRlcHJlY2F0ZWRQYXlsb2FkKS5mb3JFYWNoKChlPT57bGV0W3IsaV09ZTt0LlB1c2hOb3RpZmljYXRpb25SZXF1ZXN0X0RlcHJlY2F0ZWRQYXlsb2FkRW50cnkuZW5jb2RlKHtrZXk6cix2YWx1ZTppfSxuLnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKX0pKSxPYmplY3QuZW50cmllcyhlLnNlYWxlZEVudmVsb3BlQ29udGVudCkuZm9yRWFjaCgoZT0+e2xldFtyLGldPWU7dC5QdXNoTm90aWZpY2F0aW9uUmVxdWVzdF9TZWFsZWRFbnZlbG9wZUNvbnRlbnRFbnRyeS5lbmNvZGUoe2tleTpyLHZhbHVlOml9LG4udWludDMyKDQyKS5mb3JrKCkpLmxkZWxpbSgpfSkpLCEwPT09ZS5pc1YyJiZuLnVpbnQzMigxNjApLmJvb2woZS5pc1YyKSx2b2lkIDAhPT1lLnB1c2hOb3RpZmljYXRpb25Db25maWdPdmVycmlkZSYmdC5QdXNoTm90aWZpY2F0aW9uQ29uZmlnLmVuY29kZShlLnB1c2hOb3RpZmljYXRpb25Db25maWdPdmVycmlkZSxuLnVpbnQzMigyMDIpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5zeXN0ZW1BbGVydCYmdC5BbGVydC5lbmNvZGUoZS5zeXN0ZW1BbGVydCxuLnVpbnQzMigyMTApLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5pbkFwcEFsZXJ0JiZ0LkFsZXJ0LmVuY29kZShlLmluQXBwQWxlcnQsbi51aW50MzIoMjE4KS5mb3JrKCkpLmxkZWxpbSgpLFwiYnl0ZVBheWxvYWRcIj09PWUucGF5bG9hZHM/LiRjYXNlJiZ0LkJpbmFyeVBheWxvYWQuZW5jb2RlKGUucGF5bG9hZHMuYnl0ZVBheWxvYWQsbi51aW50MzIoMjI2KS5mb3JrKCkpLmxkZWxpbSgpLFwiZGljdGlvbmFyeVBheWxvYWRcIj09PWUucGF5bG9hZHM/LiRjYXNlJiZ0LkRpY3Rpb25hcnlQYXlsb2FkLmVuY29kZShlLnBheWxvYWRzLmRpY3Rpb25hcnlQYXlsb2FkLG4udWludDMyKDIzNCkuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89bCgpO2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLmhlYWRlcj10LlB1c2hOb3RpZmljYXRpb25IZWFkZXIuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOm8udHRsSW5TZWNvbmRzPXIudWludDMyKCk7YnJlYWs7Y2FzZSAzOm8ucGF5bG9hZD1yLmJ5dGVzKCk7YnJlYWs7Y2FzZSA0OmNvbnN0IG49dC5QdXNoTm90aWZpY2F0aW9uUmVxdWVzdF9EZXByZWNhdGVkUGF5bG9hZEVudHJ5LmRlY29kZShyLHIudWludDMyKCkpO3ZvaWQgMCE9PW4udmFsdWUmJihvLmRlcHJlY2F0ZWRQYXlsb2FkW24ua2V5XT1uLnZhbHVlKTticmVhaztjYXNlIDU6Y29uc3QgaT10LlB1c2hOb3RpZmljYXRpb25SZXF1ZXN0X1NlYWxlZEVudmVsb3BlQ29udGVudEVudHJ5LmRlY29kZShyLHIudWludDMyKCkpO3ZvaWQgMCE9PWkudmFsdWUmJihvLnNlYWxlZEVudmVsb3BlQ29udGVudFtpLmtleV09aS52YWx1ZSk7YnJlYWs7Y2FzZSAyMDpvLmlzVjI9ci5ib29sKCk7YnJlYWs7Y2FzZSAyNTpvLnB1c2hOb3RpZmljYXRpb25Db25maWdPdmVycmlkZT10LlB1c2hOb3RpZmljYXRpb25Db25maWcuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyNjpvLnN5c3RlbUFsZXJ0PXQuQWxlcnQuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyNzpvLmluQXBwQWxlcnQ9dC5BbGVydC5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDI4Om8ucGF5bG9hZHM9eyRjYXNlOlwiYnl0ZVBheWxvYWRcIixieXRlUGF5bG9hZDp0LkJpbmFyeVBheWxvYWQuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMjk6by5wYXlsb2Fkcz17JGNhc2U6XCJkaWN0aW9uYXJ5UGF5bG9hZFwiLGRpY3Rpb25hcnlQYXlsb2FkOnQuRGljdGlvbmFyeVBheWxvYWQuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj1sKCk7cmV0dXJuIG4uaGVhZGVyPXZvaWQgMCE9PWUuaGVhZGVyJiZudWxsIT09ZS5oZWFkZXI/dC5QdXNoTm90aWZpY2F0aW9uSGVhZGVyLmZyb21QYXJ0aWFsKGUuaGVhZGVyKTp2b2lkIDAsbi50dGxJblNlY29uZHM9ZS50dGxJblNlY29uZHM/PzAsbi5wYXlsb2FkPWUucGF5bG9hZD8/bmV3IFVpbnQ4QXJyYXksbi5kZXByZWNhdGVkUGF5bG9hZD1PYmplY3QuZW50cmllcyhlLmRlcHJlY2F0ZWRQYXlsb2FkPz97fSkucmVkdWNlKCgoZSx0KT0+e2xldFtuLHJdPXQ7cmV0dXJuIHZvaWQgMCE9PXImJihlW25dPVN0cmluZyhyKSksZX0pLHt9KSxuLnNlYWxlZEVudmVsb3BlQ29udGVudD1PYmplY3QuZW50cmllcyhlLnNlYWxlZEVudmVsb3BlQ29udGVudD8/e30pLnJlZHVjZSgoKGUsdCk9PntsZXRbbixyXT10O3JldHVybiB2b2lkIDAhPT1yJiYoZVtuXT1TdHJpbmcocikpLGV9KSx7fSksbi5pc1YyPWUuaXNWMj8/ITEsbi5wdXNoTm90aWZpY2F0aW9uQ29uZmlnT3ZlcnJpZGU9dm9pZCAwIT09ZS5wdXNoTm90aWZpY2F0aW9uQ29uZmlnT3ZlcnJpZGUmJm51bGwhPT1lLnB1c2hOb3RpZmljYXRpb25Db25maWdPdmVycmlkZT90LlB1c2hOb3RpZmljYXRpb25Db25maWcuZnJvbVBhcnRpYWwoZS5wdXNoTm90aWZpY2F0aW9uQ29uZmlnT3ZlcnJpZGUpOnZvaWQgMCxuLnN5c3RlbUFsZXJ0PXZvaWQgMCE9PWUuc3lzdGVtQWxlcnQmJm51bGwhPT1lLnN5c3RlbUFsZXJ0P3QuQWxlcnQuZnJvbVBhcnRpYWwoZS5zeXN0ZW1BbGVydCk6dm9pZCAwLG4uaW5BcHBBbGVydD12b2lkIDAhPT1lLmluQXBwQWxlcnQmJm51bGwhPT1lLmluQXBwQWxlcnQ/dC5BbGVydC5mcm9tUGFydGlhbChlLmluQXBwQWxlcnQpOnZvaWQgMCxcImJ5dGVQYXlsb2FkXCI9PT1lLnBheWxvYWRzPy4kY2FzZSYmdm9pZCAwIT09ZS5wYXlsb2Fkcz8uYnl0ZVBheWxvYWQmJm51bGwhPT1lLnBheWxvYWRzPy5ieXRlUGF5bG9hZCYmKG4ucGF5bG9hZHM9eyRjYXNlOlwiYnl0ZVBheWxvYWRcIixieXRlUGF5bG9hZDp0LkJpbmFyeVBheWxvYWQuZnJvbVBhcnRpYWwoZS5wYXlsb2Fkcy5ieXRlUGF5bG9hZCl9KSxcImRpY3Rpb25hcnlQYXlsb2FkXCI9PT1lLnBheWxvYWRzPy4kY2FzZSYmdm9pZCAwIT09ZS5wYXlsb2Fkcz8uZGljdGlvbmFyeVBheWxvYWQmJm51bGwhPT1lLnBheWxvYWRzPy5kaWN0aW9uYXJ5UGF5bG9hZCYmKG4ucGF5bG9hZHM9eyRjYXNlOlwiZGljdGlvbmFyeVBheWxvYWRcIixkaWN0aW9uYXJ5UGF5bG9hZDp0LkRpY3Rpb25hcnlQYXlsb2FkLmZyb21QYXJ0aWFsKGUucGF5bG9hZHMuZGljdGlvbmFyeVBheWxvYWQpfSksbn19LHQuUHVzaE5vdGlmaWNhdGlvblJlcXVlc3RfRGVwcmVjYXRlZFBheWxvYWRFbnRyeT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmtleSYmdC51aW50MzIoMTApLnN0cmluZyhlLmtleSksXCJcIiE9PWUudmFsdWUmJnQudWludDMyKDE4KS5zdHJpbmcoZS52YWx1ZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtrZXk6XCJcIix2YWx1ZTpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5rZXk9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS52YWx1ZT1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17a2V5OlwiXCIsdmFsdWU6XCJcIn07cmV0dXJuIHQua2V5PWUua2V5Pz9cIlwiLHQudmFsdWU9ZS52YWx1ZT8/XCJcIix0fX0sdC5QdXNoTm90aWZpY2F0aW9uUmVxdWVzdF9TZWFsZWRFbnZlbG9wZUNvbnRlbnRFbnRyeT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmtleSYmdC51aW50MzIoMTApLnN0cmluZyhlLmtleSksXCJcIiE9PWUudmFsdWUmJnQudWludDMyKDE4KS5zdHJpbmcoZS52YWx1ZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtrZXk6XCJcIix2YWx1ZTpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5rZXk9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS52YWx1ZT1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17a2V5OlwiXCIsdmFsdWU6XCJcIn07cmV0dXJuIHQua2V5PWUua2V5Pz9cIlwiLHQudmFsdWU9ZS52YWx1ZT8/XCJcIix0fX0sdC5BY2tOb3RpZmljYXRpb25SZXF1ZXN0PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUubm90aWZpY2F0aW9uSUQmJnQudWludDMyKDgyKS5zdHJpbmcoZS5ub3RpZmljYXRpb25JRCksXCJcIiE9PWUuc2VuZGVyVXNlck5hbWUmJnQudWludDMyKDE2Mikuc3RyaW5nKGUuc2VuZGVyVXNlck5hbWUpLFwiMFwiIT09ZS5zZW50VGltZXN0YW1wJiZ0LnVpbnQzMigyNDApLmludDY0KGUuc2VudFRpbWVzdGFtcCksXCIwXCIhPT1lLmFja1RpbWVzdGFtcCYmdC51aW50MzIoMzIwKS5pbnQ2NChlLmFja1RpbWVzdGFtcCksdm9pZCAwIT09ZS5pbkJhY2tncm91bmQmJnMuQm9vbFZhbHVlLmVuY29kZSh7dmFsdWU6ZS5pbkJhY2tncm91bmR9LHQudWludDMyKDQwMikuZm9yaygpKS5sZGVsaW0oKSxcIlwiIT09ZS5wdXNoVHlwZSYmdC51aW50MzIoNDgyKS5zdHJpbmcoZS5wdXNoVHlwZSksXCJcIiE9PWUudHJhY2tpbmdEYXRhJiZ0LnVpbnQzMig1NjIpLnN0cmluZyhlLnRyYWNraW5nRGF0YSksXCJcIiE9PWUudXNlckFnZW50JiZ0LnVpbnQzMig2NDIpLnN0cmluZyhlLnVzZXJBZ2VudCksdm9pZCAwIT09ZS5zeXN0ZW1Ob3RpZmljYXRpb25FbmFibGVkJiZzLkJvb2xWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUuc3lzdGVtTm90aWZpY2F0aW9uRW5hYmxlZH0sdC51aW50MzIoNzIyKS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuZnJvbUV4dGVuc2lvbiYmcy5Cb29sVmFsdWUuZW5jb2RlKHt2YWx1ZTplLmZyb21FeHRlbnNpb259LHQudWludDMyKDgwMikuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS5hY2tFdmVudE5hbWUmJnQudWludDMyKDg4MCkuaW50MzIoZS5hY2tFdmVudE5hbWUpLFwiMFwiIT09ZS5kaXNwbGF5RGVsYXlMYXRlbmN5TWlsbGlzJiZ0LnVpbnQzMig5NjApLmludDY0KGUuZGlzcGxheURlbGF5TGF0ZW5jeU1pbGxpcyksXCJcIiE9PWUuZGlzcGxheURlbGF5UmVhc29uJiZ0LnVpbnQzMigxMDQyKS5zdHJpbmcoZS5kaXNwbGF5RGVsYXlSZWFzb24pLHZvaWQgMCE9PWUubG9nZ2VkT3V0RGlzcGxheWVkJiZzLkJvb2xWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUubG9nZ2VkT3V0RGlzcGxheWVkfSx0LnVpbnQzMigxMTIyKS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17bm90aWZpY2F0aW9uSUQ6XCJcIixzZW5kZXJVc2VyTmFtZTpcIlwiLHNlbnRUaW1lc3RhbXA6XCIwXCIsYWNrVGltZXN0YW1wOlwiMFwiLGluQmFja2dyb3VuZDp2b2lkIDAscHVzaFR5cGU6XCJcIix0cmFja2luZ0RhdGE6XCJcIix1c2VyQWdlbnQ6XCJcIixzeXN0ZW1Ob3RpZmljYXRpb25FbmFibGVkOnZvaWQgMCxmcm9tRXh0ZW5zaW9uOnZvaWQgMCxhY2tFdmVudE5hbWU6MCxkaXNwbGF5RGVsYXlMYXRlbmN5TWlsbGlzOlwiMFwiLGRpc3BsYXlEZWxheVJlYXNvbjpcIlwiLGxvZ2dlZE91dERpc3BsYXllZDp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTA6aS5ub3RpZmljYXRpb25JRD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjA6aS5zZW5kZXJVc2VyTmFtZT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMzA6aS5zZW50VGltZXN0YW1wPXUobi5pbnQ2NCgpKTticmVhaztjYXNlIDQwOmkuYWNrVGltZXN0YW1wPXUobi5pbnQ2NCgpKTticmVhaztjYXNlIDUwOmkuaW5CYWNrZ3JvdW5kPXMuQm9vbFZhbHVlLmRlY29kZShuLG4udWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgNjA6aS5wdXNoVHlwZT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNzA6aS50cmFja2luZ0RhdGE9bi5zdHJpbmcoKTticmVhaztjYXNlIDgwOmkudXNlckFnZW50PW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA5MDppLnN5c3RlbU5vdGlmaWNhdGlvbkVuYWJsZWQ9cy5Cb29sVmFsdWUuZGVjb2RlKG4sbi51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSAxMDA6aS5mcm9tRXh0ZW5zaW9uPXMuQm9vbFZhbHVlLmRlY29kZShuLG4udWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgMTEwOmkuYWNrRXZlbnROYW1lPW4uaW50MzIoKTticmVhaztjYXNlIDEyMDppLmRpc3BsYXlEZWxheUxhdGVuY3lNaWxsaXM9dShuLmludDY0KCkpO2JyZWFrO2Nhc2UgMTMwOmkuZGlzcGxheURlbGF5UmVhc29uPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAxNDA6aS5sb2dnZWRPdXREaXNwbGF5ZWQ9cy5Cb29sVmFsdWUuZGVjb2RlKG4sbi51aW50MzIoKSkudmFsdWU7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtub3RpZmljYXRpb25JRDpcIlwiLHNlbmRlclVzZXJOYW1lOlwiXCIsc2VudFRpbWVzdGFtcDpcIjBcIixhY2tUaW1lc3RhbXA6XCIwXCIsaW5CYWNrZ3JvdW5kOnZvaWQgMCxwdXNoVHlwZTpcIlwiLHRyYWNraW5nRGF0YTpcIlwiLHVzZXJBZ2VudDpcIlwiLHN5c3RlbU5vdGlmaWNhdGlvbkVuYWJsZWQ6dm9pZCAwLGZyb21FeHRlbnNpb246dm9pZCAwLGFja0V2ZW50TmFtZTowLGRpc3BsYXlEZWxheUxhdGVuY3lNaWxsaXM6XCIwXCIsZGlzcGxheURlbGF5UmVhc29uOlwiXCIsbG9nZ2VkT3V0RGlzcGxheWVkOnZvaWQgMH07cmV0dXJuIHQubm90aWZpY2F0aW9uSUQ9ZS5ub3RpZmljYXRpb25JRD8/XCJcIix0LnNlbmRlclVzZXJOYW1lPWUuc2VuZGVyVXNlck5hbWU/P1wiXCIsdC5zZW50VGltZXN0YW1wPWUuc2VudFRpbWVzdGFtcD8/XCIwXCIsdC5hY2tUaW1lc3RhbXA9ZS5hY2tUaW1lc3RhbXA/P1wiMFwiLHQuaW5CYWNrZ3JvdW5kPWUuaW5CYWNrZ3JvdW5kPz92b2lkIDAsdC5wdXNoVHlwZT1lLnB1c2hUeXBlPz9cIlwiLHQudHJhY2tpbmdEYXRhPWUudHJhY2tpbmdEYXRhPz9cIlwiLHQudXNlckFnZW50PWUudXNlckFnZW50Pz9cIlwiLHQuc3lzdGVtTm90aWZpY2F0aW9uRW5hYmxlZD1lLnN5c3RlbU5vdGlmaWNhdGlvbkVuYWJsZWQ/P3ZvaWQgMCx0LmZyb21FeHRlbnNpb249ZS5mcm9tRXh0ZW5zaW9uPz92b2lkIDAsdC5hY2tFdmVudE5hbWU9ZS5hY2tFdmVudE5hbWU/PzAsdC5kaXNwbGF5RGVsYXlMYXRlbmN5TWlsbGlzPWUuZGlzcGxheURlbGF5TGF0ZW5jeU1pbGxpcz8/XCIwXCIsdC5kaXNwbGF5RGVsYXlSZWFzb249ZS5kaXNwbGF5RGVsYXlSZWFzb24/P1wiXCIsdC5sb2dnZWRPdXREaXNwbGF5ZWQ9ZS5sb2dnZWRPdXREaXNwbGF5ZWQ/P3ZvaWQgMCx0fX0sdC5BY2tOb3RpZmljYXRpb25SZXNwb25zZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5zdGF0dXNDb2RlJiZ0LnVpbnQzMig4KS5pbnQzMihlLnN0YXR1c0NvZGUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17c3RhdHVzQ29kZTowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/aS5zdGF0dXNDb2RlPW4uaW50MzIoKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3N0YXR1c0NvZGU6MH07cmV0dXJuIHQuc3RhdHVzQ29kZT1lLnN0YXR1c0NvZGU/PzAsdH19LHQuUGVuZGluZ1Jlc2VuZD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmtleSYmdC51aW50MzIoMTApLnN0cmluZyhlLmtleSksXCIwXCIhPT1lLnRpbWVUb1NlbmQmJnQudWludDMyKDE2KS5pbnQ2NChlLnRpbWVUb1NlbmQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17a2V5OlwiXCIsdGltZVRvU2VuZDpcIjBcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkua2V5PW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkudGltZVRvU2VuZD11KG4uaW50NjQoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtrZXk6XCJcIix0aW1lVG9TZW5kOlwiMFwifTtyZXR1cm4gdC5rZXk9ZS5rZXk/P1wiXCIsdC50aW1lVG9TZW5kPWUudGltZVRvU2VuZD8/XCIwXCIsdH19LHQuQWRkUGVuZGluZ1Jlc2VuZHNSZXF1ZXN0PXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7Zm9yKGNvbnN0IHIgb2YgZS5wZW5kaW5nUmVzZW5kcyl0LlBlbmRpbmdSZXNlbmQuZW5jb2RlKHIsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17cGVuZGluZ1Jlc2VuZHM6W119O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtlPj4+Mz09MT9vLnBlbmRpbmdSZXNlbmRzLnB1c2godC5QZW5kaW5nUmVzZW5kLmRlY29kZShyLHIudWludDMyKCkpKTpyLnNraXBUeXBlKDcmZSl9cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e3BlbmRpbmdSZXNlbmRzOltdfTtyZXR1cm4gbi5wZW5kaW5nUmVzZW5kcz1lLnBlbmRpbmdSZXNlbmRzPy5tYXAoKGU9PnQuUGVuZGluZ1Jlc2VuZC5mcm9tUGFydGlhbChlKSkpfHxbXSxufX0sdC5BZGRQZW5kaW5nUmVzZW5kc1Jlc3BvbnNlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLnN0YXR1c0NvZGUmJnQudWludDMyKDgpLmludDMyKGUuc3RhdHVzQ29kZSksITA9PT1lLmlzUmV0cnlhYmxlJiZ0LnVpbnQzMigxNikuYm9vbChlLmlzUmV0cnlhYmxlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3N0YXR1c0NvZGU6MCxpc1JldHJ5YWJsZTohMX07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuc3RhdHVzQ29kZT1uLmludDMyKCk7YnJlYWs7Y2FzZSAyOmkuaXNSZXRyeWFibGU9bi5ib29sKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtzdGF0dXNDb2RlOjAsaXNSZXRyeWFibGU6ITF9O3JldHVybiB0LnN0YXR1c0NvZGU9ZS5zdGF0dXNDb2RlPz8wLHQuaXNSZXRyeWFibGU9ZS5pc1JldHJ5YWJsZT8/ITEsdH19LHQuU2FtcGxlUmVhc29ucz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiEwPT09ZS5zZW5kZXImJnQudWludDMyKDgpLmJvb2woZS5zZW5kZXIpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17c2VuZGVyOiExfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/aS5zZW5kZXI9bi5ib29sKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtzZW5kZXI6ITF9O3JldHVybiB0LnNlbmRlcj1lLnNlbmRlcj8/ITEsdH19LGEuZGVmYXVsdC51dGlsLkxvbmchPT1pLmRlZmF1bHQmJihhLmRlZmF1bHQudXRpbC5Mb25nPWkuZGVmYXVsdCxhLmRlZmF1bHQuY29uZmlndXJlKCkpfSw1NzExNDooZSx0LG4pPT57dC4keT10LnpqPXQuRV89dC5yQz10LkxzPXQuSXM9dC5COD12b2lkIDAsbigzMzAzNyk7Y29uc3Qgcj1uKDQ4ODU5KTtuKDgyMDg0KSx0LkI4PWNsYXNze3JwYztjb25zdHJ1Y3RvcihlKXt0aGlzLnJwYz1lLHRoaXMuU2VuZFB1c2hOb3RpZmljYXRpb25Ub1VzZXI9dGhpcy5TZW5kUHVzaE5vdGlmaWNhdGlvblRvVXNlci5iaW5kKHRoaXMpLHRoaXMuU2VuZFB1c2g9dGhpcy5TZW5kUHVzaC5iaW5kKHRoaXMpLHRoaXMuU2VuZFB1c2hBc3luYz10aGlzLlNlbmRQdXNoQXN5bmMuYmluZCh0aGlzKSx0aGlzLkFja05vdGlmaWNhdGlvbj10aGlzLkFja05vdGlmaWNhdGlvbi5iaW5kKHRoaXMpLHRoaXMuQWRkUGVuZGluZ1Jlc2VuZHM9dGhpcy5BZGRQZW5kaW5nUmVzZW5kcy5iaW5kKHRoaXMpfVNlbmRQdXNoTm90aWZpY2F0aW9uVG9Vc2VyKGUsbil7cmV0dXJuIHRoaXMucnBjLnVuYXJ5KHQuTHMsci5QdXNoTm90aWZpY2F0aW9uUmVxdWVzdC5mcm9tUGFydGlhbChlKSxuKX1TZW5kUHVzaChlLG4pe3JldHVybiB0aGlzLnJwYy51bmFyeSh0LnJDLHIuUHVzaE5vdGlmaWNhdGlvblJlcXVlc3QuZnJvbVBhcnRpYWwoZSksbil9U2VuZFB1c2hBc3luYyhlLG4pe3JldHVybiB0aGlzLnJwYy51bmFyeSh0LkVfLHIuUHVzaE5vdGlmaWNhdGlvblJlcXVlc3QuZnJvbVBhcnRpYWwoZSksbil9QWNrTm90aWZpY2F0aW9uKGUsbil7cmV0dXJuIHRoaXMucnBjLnVuYXJ5KHQuemosci5BY2tOb3RpZmljYXRpb25SZXF1ZXN0LmZyb21QYXJ0aWFsKGUpLG4pfUFkZFBlbmRpbmdSZXNlbmRzKGUsbil7cmV0dXJuIHRoaXMucnBjLnVuYXJ5KHQuJHksci5BZGRQZW5kaW5nUmVzZW5kc1JlcXVlc3QuZnJvbVBhcnRpYWwoZSksbil9fSx0LklzPXtzZXJ2aWNlTmFtZTpcInNuYXBjaGF0Lm5vdGlmaWNhdGlvbi5QdXNoTm90aWZpY2F0aW9uU2VydmljZVwifSx0LkxzPXttZXRob2ROYW1lOlwiU2VuZFB1c2hOb3RpZmljYXRpb25Ub1VzZXJcIixzZXJ2aWNlOnQuSXMscmVxdWVzdFN0cmVhbTohMSxyZXNwb25zZVN0cmVhbTohMSxyZXF1ZXN0VHlwZTp7c2VyaWFsaXplQmluYXJ5KCl7cmV0dXJuIHIuUHVzaE5vdGlmaWNhdGlvblJlcXVlc3QuZW5jb2RlKHRoaXMpLmZpbmlzaCgpfX0scmVzcG9uc2VUeXBlOntkZXNlcmlhbGl6ZUJpbmFyeTplPT4oey4uLnIuUHVzaE5vdGlmaWNhdGlvblJlc3VsdC5kZWNvZGUoZSksdG9PYmplY3QoKXtyZXR1cm4gdGhpc319KX19LHQuckM9e21ldGhvZE5hbWU6XCJTZW5kUHVzaFwiLHNlcnZpY2U6dC5JcyxyZXF1ZXN0U3RyZWFtOiExLHJlc3BvbnNlU3RyZWFtOiExLHJlcXVlc3RUeXBlOntzZXJpYWxpemVCaW5hcnkoKXtyZXR1cm4gci5QdXNoTm90aWZpY2F0aW9uUmVxdWVzdC5lbmNvZGUodGhpcykuZmluaXNoKCl9fSxyZXNwb25zZVR5cGU6e2Rlc2VyaWFsaXplQmluYXJ5OmU9Pih7Li4uci5TZW5kUHVzaFJlc3BvbnNlLmRlY29kZShlKSx0b09iamVjdCgpe3JldHVybiB0aGlzfX0pfX0sdC5FXz17bWV0aG9kTmFtZTpcIlNlbmRQdXNoQXN5bmNcIixzZXJ2aWNlOnQuSXMscmVxdWVzdFN0cmVhbTohMSxyZXNwb25zZVN0cmVhbTohMSxyZXF1ZXN0VHlwZTp7c2VyaWFsaXplQmluYXJ5KCl7cmV0dXJuIHIuUHVzaE5vdGlmaWNhdGlvblJlcXVlc3QuZW5jb2RlKHRoaXMpLmZpbmlzaCgpfX0scmVzcG9uc2VUeXBlOntkZXNlcmlhbGl6ZUJpbmFyeTplPT4oey4uLnIuU2VuZFB1c2hBc3luY1Jlc3BvbnNlLmRlY29kZShlKSx0b09iamVjdCgpe3JldHVybiB0aGlzfX0pfX0sdC56aj17bWV0aG9kTmFtZTpcIkFja05vdGlmaWNhdGlvblwiLHNlcnZpY2U6dC5JcyxyZXF1ZXN0U3RyZWFtOiExLHJlc3BvbnNlU3RyZWFtOiExLHJlcXVlc3RUeXBlOntzZXJpYWxpemVCaW5hcnkoKXtyZXR1cm4gci5BY2tOb3RpZmljYXRpb25SZXF1ZXN0LmVuY29kZSh0aGlzKS5maW5pc2goKX19LHJlc3BvbnNlVHlwZTp7ZGVzZXJpYWxpemVCaW5hcnk6ZT0+KHsuLi5yLkFja05vdGlmaWNhdGlvblJlc3BvbnNlLmRlY29kZShlKSx0b09iamVjdCgpe3JldHVybiB0aGlzfX0pfX0sdC4keT17bWV0aG9kTmFtZTpcIkFkZFBlbmRpbmdSZXNlbmRzXCIsc2VydmljZTp0LklzLHJlcXVlc3RTdHJlYW06ITEscmVzcG9uc2VTdHJlYW06ITEscmVxdWVzdFR5cGU6e3NlcmlhbGl6ZUJpbmFyeSgpe3JldHVybiByLkFkZFBlbmRpbmdSZXNlbmRzUmVxdWVzdC5lbmNvZGUodGhpcykuZmluaXNoKCl9fSxyZXNwb25zZVR5cGU6e2Rlc2VyaWFsaXplQmluYXJ5OmU9Pih7Li4uci5BZGRQZW5kaW5nUmVzZW5kc1Jlc3BvbnNlLmRlY29kZShlKSx0b09iamVjdCgpe3JldHVybiB0aGlzfX0pfX07Y2xhc3MgaSBleHRlbmRzIEVycm9ye2NvZGU7bWV0YWRhdGE7Y29uc3RydWN0b3IoZSx0LG4pe3N1cGVyKGUpLHRoaXMuY29kZT10LHRoaXMubWV0YWRhdGE9bn19fSwxNDkyNjooZSx0KT0+e3ZhciBuO3QuVD12b2lkIDAsKG49dC5UfHwodC5UPXt9KSlbbi5VTktOT1dOX1RZUEU9MF09XCJVTktOT1dOX1RZUEVcIixuW24uQVJST1lPX0NPTlZFUlNBVElPTl9VUERBVEU9MTAwXT1cIkFSUk9ZT19DT05WRVJTQVRJT05fVVBEQVRFXCIsbltuLkNIQVQ9MjAxXT1cIkNIQVRcIixuW24uQ0hBVF9TQ1JFRU5TSE9UPTIwMl09XCJDSEFUX1NDUkVFTlNIT1RcIixuW24uQ0hBVF9TQ1JFRU5fUkVDT1JERUQ9MjAzXT1cIkNIQVRfU0NSRUVOX1JFQ09SREVEXCIsbltuLkNIQVRfQ0FNRVJBX1JPTExfU0FWRT0yMDRdPVwiQ0hBVF9DQU1FUkFfUk9MTF9TQVZFXCIsbltuLkNIQVRfTUVOVElPTj0yMDVdPVwiQ0hBVF9NRU5USU9OXCIsbltuLkNIQVRfUkVQTFk9MjA2XT1cIkNIQVRfUkVQTFlcIixuW24uQ0hBVF9SRUFDVElPTj0yMDddPVwiQ0hBVF9SRUFDVElPTlwiLG5bbi5UWVBJTkc9MjEwXT1cIlRZUElOR1wiLG5bbi5HUk9VUF9UWVBJTkc9MjExXT1cIkdST1VQX1RZUElOR1wiLG5bbi5TTkFQPTIyMF09XCJTTkFQXCIsbltuLlNOQVBfU0NSRUVOU0hPVD0yMjFdPVwiU05BUF9TQ1JFRU5TSE9UXCIsbltuLlNOQVBfU0NSRUVOX1JFQ09SREVEPTIyMl09XCJTTkFQX1NDUkVFTl9SRUNPUkRFRFwiLG5bbi5TTkFQX1JFUExBWT0yMjNdPVwiU05BUF9SRVBMQVlcIixuW24uU05BUF9TQVZFPTIyNF09XCJTTkFQX1NBVkVcIixuW24uR1JPVVBfQ0hBVD0yMzBdPVwiR1JPVVBfQ0hBVFwiLG5bbi5HUk9VUF9DSEFUX1NDUkVFTlNIT1Q9MjMxXT1cIkdST1VQX0NIQVRfU0NSRUVOU0hPVFwiLG5bbi5HUk9VUF9DSEFUX1NDUkVFTl9SRUNPUkRFRD0yMzJdPVwiR1JPVVBfQ0hBVF9TQ1JFRU5fUkVDT1JERURcIixuW24uR1JPVVBfQ0hBVF9DQU1FUkFfUk9MTF9TQVZFPTIzM109XCJHUk9VUF9DSEFUX0NBTUVSQV9ST0xMX1NBVkVcIixuW24uR1JPVVBfQ0hBVF9NRU5USU9OPTIzNF09XCJHUk9VUF9DSEFUX01FTlRJT05cIixuW24uR1JPVVBfQ0hBVF9SRVBMWT0yMzVdPVwiR1JPVVBfQ0hBVF9SRVBMWVwiLG5bbi5HUk9VUF9ZT1VSX0NIQVRfUkVBQ1RJT049MjM2XT1cIkdST1VQX1lPVVJfQ0hBVF9SRUFDVElPTlwiLG5bbi5HUk9VUF9PVEhFUl9DSEFUX1JFQUNUSU9OPTIzN109XCJHUk9VUF9PVEhFUl9DSEFUX1JFQUNUSU9OXCIsbltuLkdST1VQX1NOQVA9MjQwXT1cIkdST1VQX1NOQVBcIixuW24uR1JPVVBfU05BUF9TQ1JFRU5TSE9UPTI0MV09XCJHUk9VUF9TTkFQX1NDUkVFTlNIT1RcIixuW24uR1JPVVBfU05BUF9TQ1JFRU5fUkVDT1JERUQ9MjQyXT1cIkdST1VQX1NOQVBfU0NSRUVOX1JFQ09SREVEXCIsbltuLkdST1VQX1NOQVBfUkVQTEFZPTI0M109XCJHUk9VUF9TTkFQX1JFUExBWVwiLG5bbi5HUk9VUF9TTkFQX1NBVkU9MjQ0XT1cIkdST1VQX1NOQVBfU0FWRVwiLG5bbi5HUk9VUF9SRU5BTUU9MjUwXT1cIkdST1VQX1JFTkFNRVwiLG5bbi5HUk9VUF9BRERfUEFSVElDSVBBTlQ9MjUxXT1cIkdST1VQX0FERF9QQVJUSUNJUEFOVFwiLG5bbi5HUk9VUF9BRERfUEFSVElDSVBBTlRfTk9OX0ZSSUVORD0yNTJdPVwiR1JPVVBfQUREX1BBUlRJQ0lQQU5UX05PTl9GUklFTkRcIixuW24uR1JPVVBfQURERURfWU9VPTI1M109XCJHUk9VUF9BRERFRF9ZT1VcIixuW24uR1JPVVBfQUREX1BBUlRJQ0lQQU5UX0JZX0lOVklURT0yNTRdPVwiR1JPVVBfQUREX1BBUlRJQ0lQQU5UX0JZX0lOVklURVwiLG5bbi5HUk9VUF9BRERfUEFSVElDSVBBTlRfQllfSU5WSVRFX0pPSU5FUl9JU19GT0xMT1dFUj0yNTVdPVwiR1JPVVBfQUREX1BBUlRJQ0lQQU5UX0JZX0lOVklURV9KT0lORVJfSVNfRk9MTE9XRVJcIixuW24uR1JPVVBfQUREX1BBUlRJQ0lQQU5UX0JZX0lOVklURV9JTlZJVEVSX0lTX0ZPTExPV0VSPTI1Nl09XCJHUk9VUF9BRERfUEFSVElDSVBBTlRfQllfSU5WSVRFX0lOVklURVJfSVNfRk9MTE9XRVJcIixuW24uR1JPVVBfQUREX1BBUlRJQ0lQQU5UX0JZX0lOVklURV9JTlZJVEVSX0FORF9KT0lORVJfQVJFX0ZPTExPV0VSUz0yNTddPVwiR1JPVVBfQUREX1BBUlRJQ0lQQU5UX0JZX0lOVklURV9JTlZJVEVSX0FORF9KT0lORVJfQVJFX0ZPTExPV0VSU1wiLG5bbi5HUk9VUF9JTlZJVEVfQUNDRVBURURfQllfUkVDSVBJRU5UPTI1OF09XCJHUk9VUF9JTlZJVEVfQUNDRVBURURfQllfUkVDSVBJRU5UXCIsbltuLkdST1VQX0lOVklURV9BQ0NFUFRFRF9CWV9GT0xMT1dFUl9SRUNJUElFTlQ9MjU5XT1cIkdST1VQX0lOVklURV9BQ0NFUFRFRF9CWV9GT0xMT1dFUl9SRUNJUElFTlRcIixuW24uSEFQUEVOSU5HX05PV19ORVdTPTEyMDBdPVwiSEFQUEVOSU5HX05PV19ORVdTXCIsbltuLkNSRUFUT1JfVFJFTkRJTkdfTEVOU0VTPTEyMTBdPVwiQ1JFQVRPUl9UUkVORElOR19MRU5TRVNcIixuW24uT1VSX1NUT1JZX1ZJRVdfQ09VTlQ9MTIyMF09XCJPVVJfU1RPUllfVklFV19DT1VOVFwiLG5bbi5PVVJfU1RPUllfUkVQTFlfQ09VTlQ9MTIyMV09XCJPVVJfU1RPUllfUkVQTFlfQ09VTlRcIixuW24uRkVFRD0xMjMwXT1cIkZFRURcIixuW24uVEFMS19JTklUSUFURURfQVVESU89MTI1MF09XCJUQUxLX0lOSVRJQVRFRF9BVURJT1wiLG5bbi5UQUxLX0FCQU5ET05FRF9BVURJTz0xMjUxXT1cIlRBTEtfQUJBTkRPTkVEX0FVRElPXCIsbltuLlRBTEtfSU5JVElBVEVEX1ZJREVPPTEyNTJdPVwiVEFMS19JTklUSUFURURfVklERU9cIixuW24uVEFMS19BQkFORE9ORURfVklERU89MTI1M109XCJUQUxLX0FCQU5ET05FRF9WSURFT1wiLG5bbi5UQUxLX0dST1VQX0lOSVRJQVRFRF9BVURJTz0xMjcwXT1cIlRBTEtfR1JPVVBfSU5JVElBVEVEX0FVRElPXCIsbltuLlRBTEtfR1JPVVBfQUJBTkRPTkVEX0FVRElPPTEyNzFdPVwiVEFMS19HUk9VUF9BQkFORE9ORURfQVVESU9cIixuW24uVEFMS19HUk9VUF9JTklUSUFURURfVklERU89MTI3Ml09XCJUQUxLX0dST1VQX0lOSVRJQVRFRF9WSURFT1wiLG5bbi5UQUxLX0dST1VQX0FCQU5ET05FRF9WSURFTz0xMjczXT1cIlRBTEtfR1JPVVBfQUJBTkRPTkVEX1ZJREVPXCIsbltuLlRBTEtfR1JPVVBfQ0FMTF9VUERBVEVEX0FVRElPPTEyNzRdPVwiVEFMS19HUk9VUF9DQUxMX1VQREFURURfQVVESU9cIixuW24uVEFMS19HUk9VUF9DQUxMX1VQREFURURfVklERU89MTI3NV09XCJUQUxLX0dST1VQX0NBTExfVVBEQVRFRF9WSURFT1wiLG5bbi5NQVBfTElWRV9MT0NBVElPTj0xNTAwXT1cIk1BUF9MSVZFX0xPQ0FUSU9OXCIsbltuLk1BUF9MSVZFX0xPQ0FUSU9OX0xPV19CQVRURVJZX0FMRVJUPTE1MDFdPVwiTUFQX0xJVkVfTE9DQVRJT05fTE9XX0JBVFRFUllfQUxFUlRcIixuW24uU1RPUllfT1BUX0lOPTE1MTBdPVwiU1RPUllfT1BUX0lOXCIsbltuLkNBTlZBU19DVVNUT01fVVBEQVRFPTE1MjBdPVwiQ0FOVkFTX0NVU1RPTV9VUERBVEVcIixuW24uU1BPVExJR0hUX1BBWU9VVD0xNTMwXT1cIlNQT1RMSUdIVF9QQVlPVVRcIixuW24uQ09HTkFDX0lOSVRJQVRFX0lOVklURT0xNTQwXT1cIkNPR05BQ19JTklUSUFURV9JTlZJVEVcIixuW24uQ09HTkFDX09QRU49MTU0MV09XCJDT0dOQUNfT1BFTlwiLG5bbi5DT0dOQUNfTEFVTkNIPTE1NDJdPVwiQ09HTkFDX0xBVU5DSFwiLG5bbi5DT0dOQUNfVEVSTUlOQVRFPTE1NDNdPVwiQ09HTkFDX1RFUk1JTkFURVwiLG5bbi5DT0dOQUNfQUJBTkRPTl9JTlZJVEU9MTU0NF09XCJDT0dOQUNfQUJBTkRPTl9JTlZJVEVcIixuW24uUEFZTUVOVFNfUEFZT1VUX1BBWUVFX1VQREFURT0xNTYwXT1cIlBBWU1FTlRTX1BBWU9VVF9QQVlFRV9VUERBVEVcIixuW24uQ1JZU1RBTF9FWFBJUkFUSU9OPTE1NjFdPVwiQ1JZU1RBTF9FWFBJUkFUSU9OXCIsbltuLlNIQVJFRF9TVE9SWV9NRU1CRVJfQURERUQ9MTU3MF09XCJTSEFSRURfU1RPUllfTUVNQkVSX0FEREVEXCIsbltuLlNIQVJFRF9TVE9SWV9TTkFQX0RFTEVURUQ9MTU3MV09XCJTSEFSRURfU1RPUllfU05BUF9ERUxFVEVEXCIsbltuLkdJRlRJTkdfRkFOX1VQREFURT0xNTgwXT1cIkdJRlRJTkdfRkFOX1VQREFURVwiLG5bbi5TTkFQVE9LRU5TX0dJRlRTSE9QX1JFRlVORD0xNTkwXT1cIlNOQVBUT0tFTlNfR0lGVFNIT1BfUkVGVU5EXCIsbltuLlRJVl9XRUJfQ0hBVD0xNjAwXT1cIlRJVl9XRUJfQ0hBVFwiLG5bbi5GSURFTElVU19NRVNIX1JFVFJZPTE3MDBdPVwiRklERUxJVVNfTUVTSF9SRVRSWVwiLG5bbi5BRERfRlJJRU5EPTJlM109XCJBRERfRlJJRU5EXCIsbltuLkFWQUlMQUJMRV9GUklFTkRfU1VHR0VTVElPTlM9MjAwMV09XCJBVkFJTEFCTEVfRlJJRU5EX1NVR0dFU1RJT05TXCIsbltuLkJJVE1PSklfQ1JFQVRJT049MjAwMl09XCJCSVRNT0pJX0NSRUFUSU9OXCIsbltuLkNPTlRBQ1RfU1lOQ19SRU1JTkRFUj0yMDAzXT1cIkNPTlRBQ1RfU1lOQ19SRU1JTkRFUlwiLG5bbi5FTUFJTF9WRVJJRklFRD0yMDA0XT1cIkVNQUlMX1ZFUklGSUVEXCIsbltuLkRJU0NPVkVSX1NUT1JJRVM9MjAwNV09XCJESVNDT1ZFUl9TVE9SSUVTXCIsbltuLkZFVENIX1NVR0dFU1RFRF9GUklFTkRTPTIwMDZdPVwiRkVUQ0hfU1VHR0VTVEVEX0ZSSUVORFNcIixuW24uRlJJRU5EX0JJVE1PSkk9MjAwN109XCJGUklFTkRfQklUTU9KSVwiLG5bbi5NRU1PUklFU19GTEFTSEJBQ0tfU1RPUlk9MjAwOV09XCJNRU1PUklFU19GTEFTSEJBQ0tfU1RPUllcIixuW24uUEVORElOR19GUklFTkRfUkVRVUVTVF9SRU1JTkRFUj0yMDEwXT1cIlBFTkRJTkdfRlJJRU5EX1JFUVVFU1RfUkVNSU5ERVJcIixuW24uUElORz0yMDExXT1cIlBJTkdcIixuW24uUkVDRU5UTFlfSk9JTkVEX1NVR0dFU1RJT049MjAxMl09XCJSRUNFTlRMWV9KT0lORURfU1VHR0VTVElPTlwiLG5bbi5TVE9SSUVTPTIwMTNdPVwiU1RPUklFU1wiLG5bbi5TVUJTQ1JJUFRJT05fU1RPUklFUz0yMDE0XT1cIlNVQlNDUklQVElPTl9TVE9SSUVTXCIsbltuLlRSWV9MRU5TRVM9MjAxNV09XCJUUllfTEVOU0VTXCIsbltuLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIn0sNjM5NTE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuUHVzaE5vdGlmaWNhdGlvbkRhdGE9dC5WZXJzaW9uPXQuRGV2aWNlVmVyc2lvbkluZm89dC5Ub2tlbkRlbGV0aW9uSW5mbz10LlB1c2hOb3RpZmljYXRpb25FbmNyeXB0aW9uRGF0YT10LlBOREdldFJlc3BvbnNlPXQuU25zQXJuVXBkYXRlUmVzcG9uc2U9dC5TbnNBcm5VcGRhdGVSZXF1ZXN0PXQuVG9rZW5EYXRhPXQuU2Vzc2lvbkRhdGE9dC5Ub2tlbnM9dC5EZXZpY2VUb2tlbj10LlJlZ2lzdGVyRGV2aWNlUmVzcG9uc2U9dC5SZWdpc3RlckRldmljZVJlcXVlc3Q9dC5EZWxldGVVc2VyUmVzcG9uc2U9dC5DbGVhckRldmljZVRva2VuUmVzcG9uc2U9dC5DbGVhckRldmljZVRva2VuUmVxdWVzdD10LkRldmljZVRva2VuVXBkYXRlUmVzcG9uc2U9dC5EZXZpY2VUb2tlblVwZGF0ZVJlcXVlc3Q9dC5HZXRUb2tlblN0YXRlUmVzcG9uc2U9dC5HZXRUb2tlblN0YXRlUmVxdWVzdD10LkdldE5vdGlmaWNhdGlvblNldHRpbmdSZXNwb25zZT10LkdldE5vdGlmaWNhdGlvblNldHRpbmdSZXF1ZXN0PXQuTm90aWZpY2F0aW9uU2V0dGluZ1VwZGF0ZVJlc3BvbnNlPXQuTm90aWZpY2F0aW9uU2V0dGluZ1VwZGF0ZVJlcXVlc3Q9dC5EZXZpY2VUb2tlbl9EZXZpY2VUb2tlblR5cGU9dC5HZXRUb2tlblN0YXRlUmVzcG9uc2VfVG9rZW5TdGF0ZT10LlB1c2hOb3RpZmljYXRpb25EYXRhUHJvcGVydHk9dC5Ub2tlbkRlbGV0aW9uUmVhc29uPXQuUmVsZWFzZVR5cGU9dC5EZXZpY2VUeXBlPXQuRW5jcnlwdGlvblR5cGU9dC5TdGF0dXNDb2RlPXQuTm90aWZpY2F0aW9uU2V0dGluZz10Lk5vdGlmaWNhdGlvblByaXZhY3lTZXR0aW5nPXZvaWQgMDtjb25zdCBpPXIobig0MTU4MykpLG89bigzODE0MCksYT1yKG4oNjIxMDApKTtmdW5jdGlvbiBzKGUpe3JldHVybiBlLnRvU3RyaW5nKCl9dmFyIGMsbCx1LGQsZixwLG0saCx2LGc7KGc9dC5Ob3RpZmljYXRpb25Qcml2YWN5U2V0dGluZ3x8KHQuTm90aWZpY2F0aW9uUHJpdmFjeVNldHRpbmc9e30pKVtnLlVOS05PV05fUFJJVkFDWT0wXT1cIlVOS05PV05fUFJJVkFDWVwiLGdbZy5FVkVSWU9ORT0xXT1cIkVWRVJZT05FXCIsZ1tnLkZSSUVORFM9Ml09XCJGUklFTkRTXCIsZ1tnLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwodj10Lk5vdGlmaWNhdGlvblNldHRpbmd8fCh0Lk5vdGlmaWNhdGlvblNldHRpbmc9e30pKVt2LlVOS05PV05fU0VUVElORz0wXT1cIlVOS05PV05fU0VUVElOR1wiLHZbdi5TRVRUSU5HX1RSVUU9MV09XCJTRVRUSU5HX1RSVUVcIix2W3YuU0VUVElOR19GQUxTRT0yXT1cIlNFVFRJTkdfRkFMU0VcIix2W3YuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLChoPXQuU3RhdHVzQ29kZXx8KHQuU3RhdHVzQ29kZT17fSkpW2guVU5LTk9XTl9TVEFUVVM9MF09XCJVTktOT1dOX1NUQVRVU1wiLGhbaC5PSz0xXT1cIk9LXCIsaFtoLklOVkFMSURfUkVRVUVTVD0yXT1cIklOVkFMSURfUkVRVUVTVFwiLGhbaC5QRVJTSVNURU5DRV9FUlJPUj0zXT1cIlBFUlNJU1RFTkNFX0VSUk9SXCIsaFtoLk5PVF9BVVRIT1JJWkVEPTRdPVwiTk9UX0FVVEhPUklaRURcIixoW2guTk9ORV9FWElTVElOR19VU0VSPTVdPVwiTk9ORV9FWElTVElOR19VU0VSXCIsaFtoLklOVEVSTkFMX0ZBSUxVUkU9OV09XCJJTlRFUk5BTF9GQUlMVVJFXCIsaFtoLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwobT10LkVuY3J5cHRpb25UeXBlfHwodC5FbmNyeXB0aW9uVHlwZT17fSkpW20uVU5LTk9XTl9FTkNSWVBUSU9OX1RZUEU9MF09XCJVTktOT1dOX0VOQ1JZUFRJT05fVFlQRVwiLG1bbS5OT19FTkNSWVBUSU9OPTFdPVwiTk9fRU5DUllQVElPTlwiLG1bbS5FTkNSWVBUSU9OX1YxPTJdPVwiRU5DUllQVElPTl9WMVwiLG1bbS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKHA9dC5EZXZpY2VUeXBlfHwodC5EZXZpY2VUeXBlPXt9KSlbcC5OT05FPTBdPVwiTk9ORVwiLHBbcC5JT1M9MV09XCJJT1NcIixwW3AuQU5EUk9JRD0yXT1cIkFORFJPSURcIixwW3AuVEVTVF9JT1M9M109XCJURVNUX0lPU1wiLHBbcC5URVNUX0FORFJPSUQ9NF09XCJURVNUX0FORFJPSURcIixwW3AuQU5EUk9JRF9ITVM9NV09XCJBTkRST0lEX0hNU1wiLHBbcC5JT1NfQklUTU9KST02XT1cIklPU19CSVRNT0pJXCIscFtwLkFORFJPSURfQklUTU9KST03XT1cIkFORFJPSURfQklUTU9KSVwiLHBbcC5ERVNLVE9QX1dFQj04XT1cIkRFU0tUT1BfV0VCXCIscFtwLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwoZj10LlJlbGVhc2VUeXBlfHwodC5SZWxlYXNlVHlwZT17fSkpW2YuVU5LTk9XTl9SRUxFQVNFPTBdPVwiVU5LTk9XTl9SRUxFQVNFXCIsZltmLlBST0RVQ1RJT049MV09XCJQUk9EVUNUSU9OXCIsZltmLk1BU1RFUj0yXT1cIk1BU1RFUlwiLGZbZi5BTFBIQT0zXT1cIkFMUEhBXCIsZltmLkJFVEE9NF09XCJCRVRBXCIsZltmLkRFQlVHPTVdPVwiREVCVUdcIixmW2YuUFJPVE9UWVBJTkc9Nl09XCJQUk9UT1RZUElOR1wiLGZbZi5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKGQ9dC5Ub2tlbkRlbGV0aW9uUmVhc29ufHwodC5Ub2tlbkRlbGV0aW9uUmVhc29uPXt9KSlbZC5VTktOT1dOPTBdPVwiVU5LTk9XTlwiLGRbZC5VU0VSX0xPR0lOPTFdPVwiVVNFUl9MT0dJTlwiLGRbZC5VU0VSX0xPR09VVD0yXT1cIlVTRVJfTE9HT1VUXCIsZFtkLlVTRVJfVU5JTlNUQUxMPTNdPVwiVVNFUl9VTklOU1RBTExcIixkW2QuUFVSR0VfRVZFTlQ9NF09XCJQVVJHRV9FVkVOVFwiLGRbZC5UT0tFTl9JTlZBTElEPTVdPVwiVE9LRU5fSU5WQUxJRFwiLGRbZC5TRVNTSU9OX0VYUElSRUQ9Nl09XCJTRVNTSU9OX0VYUElSRURcIixkW2QuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLCh1PXQuUHVzaE5vdGlmaWNhdGlvbkRhdGFQcm9wZXJ0eXx8KHQuUHVzaE5vdGlmaWNhdGlvbkRhdGFQcm9wZXJ0eT17fSkpW3UuRU5BQkxFRF9TRVRUSU5HPTBdPVwiRU5BQkxFRF9TRVRUSU5HXCIsdVt1LlNPVU5EX1NFVFRJTkc9MV09XCJTT1VORF9TRVRUSU5HXCIsdVt1LlJJTkdfU09VTkRfU0VUVElORz0yXT1cIlJJTkdfU09VTkRfU0VUVElOR1wiLHVbdS5QUklWQUNZX1NFVFRJTkc9M109XCJQUklWQUNZX1NFVFRJTkdcIix1W3UuREVWSUNFX1RPS0VOPTRdPVwiREVWSUNFX1RPS0VOXCIsdVt1LkRFVklDRV9WT0lQX1RPS0VOPTVdPVwiREVWSUNFX1ZPSVBfVE9LRU5cIix1W3UuQklUTU9KSV9TRVRUSU5HPTZdPVwiQklUTU9KSV9TRVRUSU5HXCIsdVt1LldFQl9QVVNIX1NFVFRJTkc9N109XCJXRUJfUFVTSF9TRVRUSU5HXCIsdVt1LlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwobD10LkdldFRva2VuU3RhdGVSZXNwb25zZV9Ub2tlblN0YXRlfHwodC5HZXRUb2tlblN0YXRlUmVzcG9uc2VfVG9rZW5TdGF0ZT17fSkpW2wuVU5LTk9XTj0wXT1cIlVOS05PV05cIixsW2wuUkVHSVNURVJFRD0xXT1cIlJFR0lTVEVSRURcIixsW2wuTk9fVE9LRU49Ml09XCJOT19UT0tFTlwiLGxbbC5TT0ZUX0RFTEVURUQ9M109XCJTT0ZUX0RFTEVURURcIixsW2wuTk9fVVNFUj00XT1cIk5PX1VTRVJcIixsW2wuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLChjPXQuRGV2aWNlVG9rZW5fRGV2aWNlVG9rZW5UeXBlfHwodC5EZXZpY2VUb2tlbl9EZXZpY2VUb2tlblR5cGU9e30pKVtjLlVOS05PV049MF09XCJVTktOT1dOXCIsY1tjLkFQTlM9MV09XCJBUE5TXCIsY1tjLkZDTT0yXT1cIkZDTVwiLGNbYy5ITVM9M109XCJITVNcIixjW2MuVk9JUD00XT1cIlZPSVBcIixjW2MuV0VCPTVdPVwiV0VCXCIsY1tjLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0Lk5vdGlmaWNhdGlvblNldHRpbmdVcGRhdGVSZXF1ZXN0PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUudXNlcklkJiZvLlVVSUQuZW5jb2RlKGUudXNlcklkLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLFwic291bmRcIj09PWUuc2V0dGluZ1VwZGF0ZT8uJGNhc2UmJnQudWludDMyKDE2KS5pbnQzMihlLnNldHRpbmdVcGRhdGUuc291bmQpLFwicmluZ2luZ1NvdW5kXCI9PT1lLnNldHRpbmdVcGRhdGU/LiRjYXNlJiZ0LnVpbnQzMigyNCkuaW50MzIoZS5zZXR0aW5nVXBkYXRlLnJpbmdpbmdTb3VuZCksXCJlbmFibGVkXCI9PT1lLnNldHRpbmdVcGRhdGU/LiRjYXNlJiZ0LnVpbnQzMigzMikuaW50MzIoZS5zZXR0aW5nVXBkYXRlLmVuYWJsZWQpLFwicHJpdmFjeVwiPT09ZS5zZXR0aW5nVXBkYXRlPy4kY2FzZSYmdC51aW50MzIoNDApLmludDMyKGUuc2V0dGluZ1VwZGF0ZS5wcml2YWN5KSxcImJpdG1vamlcIj09PWUuc2V0dGluZ1VwZGF0ZT8uJGNhc2UmJnQudWludDMyKDQ4KS5pbnQzMihlLnNldHRpbmdVcGRhdGUuYml0bW9qaSksXCJ3ZWJQdXNoRW5hYmxlZFwiPT09ZS5zZXR0aW5nVXBkYXRlPy4kY2FzZSYmdC51aW50MzIoNTYpLmludDMyKGUuc2V0dGluZ1VwZGF0ZS53ZWJQdXNoRW5hYmxlZCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXt1c2VySWQ6dm9pZCAwLHNldHRpbmdVcGRhdGU6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS51c2VySWQ9by5VVUlELmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMjppLnNldHRpbmdVcGRhdGU9eyRjYXNlOlwic291bmRcIixzb3VuZDpuLmludDMyKCl9O2JyZWFrO2Nhc2UgMzppLnNldHRpbmdVcGRhdGU9eyRjYXNlOlwicmluZ2luZ1NvdW5kXCIscmluZ2luZ1NvdW5kOm4uaW50MzIoKX07YnJlYWs7Y2FzZSA0Omkuc2V0dGluZ1VwZGF0ZT17JGNhc2U6XCJlbmFibGVkXCIsZW5hYmxlZDpuLmludDMyKCl9O2JyZWFrO2Nhc2UgNTppLnNldHRpbmdVcGRhdGU9eyRjYXNlOlwicHJpdmFjeVwiLHByaXZhY3k6bi5pbnQzMigpfTticmVhaztjYXNlIDY6aS5zZXR0aW5nVXBkYXRlPXskY2FzZTpcImJpdG1vamlcIixiaXRtb2ppOm4uaW50MzIoKX07YnJlYWs7Y2FzZSA3Omkuc2V0dGluZ1VwZGF0ZT17JGNhc2U6XCJ3ZWJQdXNoRW5hYmxlZFwiLHdlYlB1c2hFbmFibGVkOm4uaW50MzIoKX07YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt1c2VySWQ6dm9pZCAwLHNldHRpbmdVcGRhdGU6dm9pZCAwfTtyZXR1cm4gdC51c2VySWQ9dm9pZCAwIT09ZS51c2VySWQmJm51bGwhPT1lLnVzZXJJZD9vLlVVSUQuZnJvbVBhcnRpYWwoZS51c2VySWQpOnZvaWQgMCxcInNvdW5kXCI9PT1lLnNldHRpbmdVcGRhdGU/LiRjYXNlJiZ2b2lkIDAhPT1lLnNldHRpbmdVcGRhdGU/LnNvdW5kJiZudWxsIT09ZS5zZXR0aW5nVXBkYXRlPy5zb3VuZCYmKHQuc2V0dGluZ1VwZGF0ZT17JGNhc2U6XCJzb3VuZFwiLHNvdW5kOmUuc2V0dGluZ1VwZGF0ZS5zb3VuZH0pLFwicmluZ2luZ1NvdW5kXCI9PT1lLnNldHRpbmdVcGRhdGU/LiRjYXNlJiZ2b2lkIDAhPT1lLnNldHRpbmdVcGRhdGU/LnJpbmdpbmdTb3VuZCYmbnVsbCE9PWUuc2V0dGluZ1VwZGF0ZT8ucmluZ2luZ1NvdW5kJiYodC5zZXR0aW5nVXBkYXRlPXskY2FzZTpcInJpbmdpbmdTb3VuZFwiLHJpbmdpbmdTb3VuZDplLnNldHRpbmdVcGRhdGUucmluZ2luZ1NvdW5kfSksXCJlbmFibGVkXCI9PT1lLnNldHRpbmdVcGRhdGU/LiRjYXNlJiZ2b2lkIDAhPT1lLnNldHRpbmdVcGRhdGU/LmVuYWJsZWQmJm51bGwhPT1lLnNldHRpbmdVcGRhdGU/LmVuYWJsZWQmJih0LnNldHRpbmdVcGRhdGU9eyRjYXNlOlwiZW5hYmxlZFwiLGVuYWJsZWQ6ZS5zZXR0aW5nVXBkYXRlLmVuYWJsZWR9KSxcInByaXZhY3lcIj09PWUuc2V0dGluZ1VwZGF0ZT8uJGNhc2UmJnZvaWQgMCE9PWUuc2V0dGluZ1VwZGF0ZT8ucHJpdmFjeSYmbnVsbCE9PWUuc2V0dGluZ1VwZGF0ZT8ucHJpdmFjeSYmKHQuc2V0dGluZ1VwZGF0ZT17JGNhc2U6XCJwcml2YWN5XCIscHJpdmFjeTplLnNldHRpbmdVcGRhdGUucHJpdmFjeX0pLFwiYml0bW9qaVwiPT09ZS5zZXR0aW5nVXBkYXRlPy4kY2FzZSYmdm9pZCAwIT09ZS5zZXR0aW5nVXBkYXRlPy5iaXRtb2ppJiZudWxsIT09ZS5zZXR0aW5nVXBkYXRlPy5iaXRtb2ppJiYodC5zZXR0aW5nVXBkYXRlPXskY2FzZTpcImJpdG1vamlcIixiaXRtb2ppOmUuc2V0dGluZ1VwZGF0ZS5iaXRtb2ppfSksXCJ3ZWJQdXNoRW5hYmxlZFwiPT09ZS5zZXR0aW5nVXBkYXRlPy4kY2FzZSYmdm9pZCAwIT09ZS5zZXR0aW5nVXBkYXRlPy53ZWJQdXNoRW5hYmxlZCYmbnVsbCE9PWUuc2V0dGluZ1VwZGF0ZT8ud2ViUHVzaEVuYWJsZWQmJih0LnNldHRpbmdVcGRhdGU9eyRjYXNlOlwid2ViUHVzaEVuYWJsZWRcIix3ZWJQdXNoRW5hYmxlZDplLnNldHRpbmdVcGRhdGUud2ViUHVzaEVuYWJsZWR9KSx0fX0sdC5Ob3RpZmljYXRpb25TZXR0aW5nVXBkYXRlUmVzcG9uc2U9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUuc3RhdHVzQ29kZSYmdC51aW50MzIoOCkuaW50MzIoZS5zdGF0dXNDb2RlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3N0YXR1c0NvZGU6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2kuc3RhdHVzQ29kZT1uLmludDMyKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtzdGF0dXNDb2RlOjB9O3JldHVybiB0LnN0YXR1c0NvZGU9ZS5zdGF0dXNDb2RlPz8wLHR9fSx0LkdldE5vdGlmaWNhdGlvblNldHRpbmdSZXF1ZXN0PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUudXNlcklkJiZvLlVVSUQuZW5jb2RlKGUudXNlcklkLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLnNldHRpbmdDaG9pY2UmJnQudWludDMyKDE2KS5pbnQzMihlLnNldHRpbmdDaG9pY2UpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17dXNlcklkOnZvaWQgMCxzZXR0aW5nQ2hvaWNlOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnVzZXJJZD1vLlVVSUQuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOmkuc2V0dGluZ0Nob2ljZT1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt1c2VySWQ6dm9pZCAwLHNldHRpbmdDaG9pY2U6MH07cmV0dXJuIHQudXNlcklkPXZvaWQgMCE9PWUudXNlcklkJiZudWxsIT09ZS51c2VySWQ/by5VVUlELmZyb21QYXJ0aWFsKGUudXNlcklkKTp2b2lkIDAsdC5zZXR0aW5nQ2hvaWNlPWUuc2V0dGluZ0Nob2ljZT8/MCx0fX0sdC5HZXROb3RpZmljYXRpb25TZXR0aW5nUmVzcG9uc2U9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIm5vdGlmaWNhdGlvblNldHRpbmdcIj09PWUubm90aWZpY2F0aW9uU2V0dGluZ1Jlc3BvbnNlPy4kY2FzZSYmdC51aW50MzIoOCkuaW50MzIoZS5ub3RpZmljYXRpb25TZXR0aW5nUmVzcG9uc2Uubm90aWZpY2F0aW9uU2V0dGluZyksXCJwcml2YWN5U2V0dGluZ1wiPT09ZS5ub3RpZmljYXRpb25TZXR0aW5nUmVzcG9uc2U/LiRjYXNlJiZ0LnVpbnQzMigxNikuaW50MzIoZS5ub3RpZmljYXRpb25TZXR0aW5nUmVzcG9uc2UucHJpdmFjeVNldHRpbmcpLDAhPT1lLnN0YXR1c0NvZGUmJnQudWludDMyKDI0KS5pbnQzMihlLnN0YXR1c0NvZGUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17bm90aWZpY2F0aW9uU2V0dGluZ1Jlc3BvbnNlOnZvaWQgMCxzdGF0dXNDb2RlOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLm5vdGlmaWNhdGlvblNldHRpbmdSZXNwb25zZT17JGNhc2U6XCJub3RpZmljYXRpb25TZXR0aW5nXCIsbm90aWZpY2F0aW9uU2V0dGluZzpuLmludDMyKCl9O2JyZWFrO2Nhc2UgMjppLm5vdGlmaWNhdGlvblNldHRpbmdSZXNwb25zZT17JGNhc2U6XCJwcml2YWN5U2V0dGluZ1wiLHByaXZhY3lTZXR0aW5nOm4uaW50MzIoKX07YnJlYWs7Y2FzZSAzOmkuc3RhdHVzQ29kZT1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtub3RpZmljYXRpb25TZXR0aW5nUmVzcG9uc2U6dm9pZCAwLHN0YXR1c0NvZGU6MH07cmV0dXJuXCJub3RpZmljYXRpb25TZXR0aW5nXCI9PT1lLm5vdGlmaWNhdGlvblNldHRpbmdSZXNwb25zZT8uJGNhc2UmJnZvaWQgMCE9PWUubm90aWZpY2F0aW9uU2V0dGluZ1Jlc3BvbnNlPy5ub3RpZmljYXRpb25TZXR0aW5nJiZudWxsIT09ZS5ub3RpZmljYXRpb25TZXR0aW5nUmVzcG9uc2U/Lm5vdGlmaWNhdGlvblNldHRpbmcmJih0Lm5vdGlmaWNhdGlvblNldHRpbmdSZXNwb25zZT17JGNhc2U6XCJub3RpZmljYXRpb25TZXR0aW5nXCIsbm90aWZpY2F0aW9uU2V0dGluZzplLm5vdGlmaWNhdGlvblNldHRpbmdSZXNwb25zZS5ub3RpZmljYXRpb25TZXR0aW5nfSksXCJwcml2YWN5U2V0dGluZ1wiPT09ZS5ub3RpZmljYXRpb25TZXR0aW5nUmVzcG9uc2U/LiRjYXNlJiZ2b2lkIDAhPT1lLm5vdGlmaWNhdGlvblNldHRpbmdSZXNwb25zZT8ucHJpdmFjeVNldHRpbmcmJm51bGwhPT1lLm5vdGlmaWNhdGlvblNldHRpbmdSZXNwb25zZT8ucHJpdmFjeVNldHRpbmcmJih0Lm5vdGlmaWNhdGlvblNldHRpbmdSZXNwb25zZT17JGNhc2U6XCJwcml2YWN5U2V0dGluZ1wiLHByaXZhY3lTZXR0aW5nOmUubm90aWZpY2F0aW9uU2V0dGluZ1Jlc3BvbnNlLnByaXZhY3lTZXR0aW5nfSksdC5zdGF0dXNDb2RlPWUuc3RhdHVzQ29kZT8/MCx0fX0sdC5HZXRUb2tlblN0YXRlUmVxdWVzdD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLnVzZXJJZCYmby5VVUlELmVuY29kZShlLnVzZXJJZCx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3VzZXJJZDp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLnVzZXJJZD1vLlVVSUQuZGVjb2RlKG4sbi51aW50MzIoKSk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt1c2VySWQ6dm9pZCAwfTtyZXR1cm4gdC51c2VySWQ9dm9pZCAwIT09ZS51c2VySWQmJm51bGwhPT1lLnVzZXJJZD9vLlVVSUQuZnJvbVBhcnRpYWwoZS51c2VySWQpOnZvaWQgMCx0fX0sdC5HZXRUb2tlblN0YXRlUmVzcG9uc2U9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUuZGV2aWNlVG9rZW5TdGF0ZSYmdC51aW50MzIoOCkuaW50MzIoZS5kZXZpY2VUb2tlblN0YXRlKSwwIT09ZS50b2tlbkRlbGV0aW9uUmVhc29uJiZ0LnVpbnQzMigxNikuaW50MzIoZS50b2tlbkRlbGV0aW9uUmVhc29uKSwwIT09ZS5kZXZpY2VUeXBlJiZ0LnVpbnQzMigyNCkuaW50MzIoZS5kZXZpY2VUeXBlKSwwIT09ZS5yZWxlYXNlVHlwZSYmdC51aW50MzIoMzIpLmludDMyKGUucmVsZWFzZVR5cGUpLDAhPT1lLnN0YXR1c0NvZGUmJnQudWludDMyKDQwKS5pbnQzMihlLnN0YXR1c0NvZGUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17ZGV2aWNlVG9rZW5TdGF0ZTowLHRva2VuRGVsZXRpb25SZWFzb246MCxkZXZpY2VUeXBlOjAscmVsZWFzZVR5cGU6MCxzdGF0dXNDb2RlOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmRldmljZVRva2VuU3RhdGU9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMjppLnRva2VuRGVsZXRpb25SZWFzb249bi5pbnQzMigpO2JyZWFrO2Nhc2UgMzppLmRldmljZVR5cGU9bi5pbnQzMigpO2JyZWFrO2Nhc2UgNDppLnJlbGVhc2VUeXBlPW4uaW50MzIoKTticmVhaztjYXNlIDU6aS5zdGF0dXNDb2RlPW4uaW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2RldmljZVRva2VuU3RhdGU6MCx0b2tlbkRlbGV0aW9uUmVhc29uOjAsZGV2aWNlVHlwZTowLHJlbGVhc2VUeXBlOjAsc3RhdHVzQ29kZTowfTtyZXR1cm4gdC5kZXZpY2VUb2tlblN0YXRlPWUuZGV2aWNlVG9rZW5TdGF0ZT8/MCx0LnRva2VuRGVsZXRpb25SZWFzb249ZS50b2tlbkRlbGV0aW9uUmVhc29uPz8wLHQuZGV2aWNlVHlwZT1lLmRldmljZVR5cGU/PzAsdC5yZWxlYXNlVHlwZT1lLnJlbGVhc2VUeXBlPz8wLHQuc3RhdHVzQ29kZT1lLnN0YXR1c0NvZGU/PzAsdH19LHQuRGV2aWNlVG9rZW5VcGRhdGVSZXF1ZXN0PXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUudXNlcklkJiZvLlVVSUQuZW5jb2RlKGUudXNlcklkLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLFwiXCIhPT1lLmRldmljZVRva2VuJiZuLnVpbnQzMigxOCkuc3RyaW5nKGUuZGV2aWNlVG9rZW4pLFwiXCIhPT1lLmRldmljZVZvaXBUb2tlbiYmbi51aW50MzIoMjYpLnN0cmluZyhlLmRldmljZVZvaXBUb2tlbiksMCE9PWUuZGV2aWNlVHlwZSYmbi51aW50MzIoMzIpLmludDMyKGUuZGV2aWNlVHlwZSksMCE9PWUucmVsZWFzZVR5cGUmJm4udWludDMyKDQwKS5pbnQzMihlLnJlbGVhc2VUeXBlKSx2b2lkIDAhPT1lLnB1c2hOb3RpZmljYXRpb25FbmNyeXB0aW9uRGF0YSYmdC5QdXNoTm90aWZpY2F0aW9uRW5jcnlwdGlvbkRhdGEuZW5jb2RlKGUucHVzaE5vdGlmaWNhdGlvbkVuY3J5cHRpb25EYXRhLG4udWludDMyKDUwKS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLmFwcElkJiZuLnVpbnQzMig1NikuaW50MzIoZS5hcHBJZCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBzPXt1c2VySWQ6dm9pZCAwLGRldmljZVRva2VuOlwiXCIsZGV2aWNlVm9pcFRva2VuOlwiXCIsZGV2aWNlVHlwZTowLHJlbGVhc2VUeXBlOjAscHVzaE5vdGlmaWNhdGlvbkVuY3J5cHRpb25EYXRhOnZvaWQgMCxhcHBJZDowfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6cy51c2VySWQ9by5VVUlELmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMjpzLmRldmljZVRva2VuPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOnMuZGV2aWNlVm9pcFRva2VuPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSA0OnMuZGV2aWNlVHlwZT1yLmludDMyKCk7YnJlYWs7Y2FzZSA1OnMucmVsZWFzZVR5cGU9ci5pbnQzMigpO2JyZWFrO2Nhc2UgNjpzLnB1c2hOb3RpZmljYXRpb25FbmNyeXB0aW9uRGF0YT10LlB1c2hOb3RpZmljYXRpb25FbmNyeXB0aW9uRGF0YS5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDc6cy5hcHBJZD1yLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBzfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXt1c2VySWQ6dm9pZCAwLGRldmljZVRva2VuOlwiXCIsZGV2aWNlVm9pcFRva2VuOlwiXCIsZGV2aWNlVHlwZTowLHJlbGVhc2VUeXBlOjAscHVzaE5vdGlmaWNhdGlvbkVuY3J5cHRpb25EYXRhOnZvaWQgMCxhcHBJZDowfTtyZXR1cm4gbi51c2VySWQ9dm9pZCAwIT09ZS51c2VySWQmJm51bGwhPT1lLnVzZXJJZD9vLlVVSUQuZnJvbVBhcnRpYWwoZS51c2VySWQpOnZvaWQgMCxuLmRldmljZVRva2VuPWUuZGV2aWNlVG9rZW4/P1wiXCIsbi5kZXZpY2VWb2lwVG9rZW49ZS5kZXZpY2VWb2lwVG9rZW4/P1wiXCIsbi5kZXZpY2VUeXBlPWUuZGV2aWNlVHlwZT8/MCxuLnJlbGVhc2VUeXBlPWUucmVsZWFzZVR5cGU/PzAsbi5wdXNoTm90aWZpY2F0aW9uRW5jcnlwdGlvbkRhdGE9dm9pZCAwIT09ZS5wdXNoTm90aWZpY2F0aW9uRW5jcnlwdGlvbkRhdGEmJm51bGwhPT1lLnB1c2hOb3RpZmljYXRpb25FbmNyeXB0aW9uRGF0YT90LlB1c2hOb3RpZmljYXRpb25FbmNyeXB0aW9uRGF0YS5mcm9tUGFydGlhbChlLnB1c2hOb3RpZmljYXRpb25FbmNyeXB0aW9uRGF0YSk6dm9pZCAwLG4uYXBwSWQ9ZS5hcHBJZD8/MCxufX0sdC5EZXZpY2VUb2tlblVwZGF0ZVJlc3BvbnNlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLnN0YXR1c0NvZGUmJnQudWludDMyKDgpLmludDMyKGUuc3RhdHVzQ29kZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtzdGF0dXNDb2RlOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLnN0YXR1c0NvZGU9bi5pbnQzMigpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17c3RhdHVzQ29kZTowfTtyZXR1cm4gdC5zdGF0dXNDb2RlPWUuc3RhdHVzQ29kZT8/MCx0fX0sdC5DbGVhckRldmljZVRva2VuUmVxdWVzdD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLnVzZXJJZCYmby5VVUlELmVuY29kZShlLnVzZXJJZCx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS5yZWFzb24mJnQudWludDMyKDI0KS5pbnQzMihlLnJlYXNvbiksMCE9PWUuZGV2aWNlVHlwZSYmdC51aW50MzIoMzIpLmludDMyKGUuZGV2aWNlVHlwZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXt1c2VySWQ6dm9pZCAwLHJlYXNvbjowLGRldmljZVR5cGU6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkudXNlcklkPW8uVVVJRC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDM6aS5yZWFzb249bi5pbnQzMigpO2JyZWFrO2Nhc2UgNDppLmRldmljZVR5cGU9bi5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dXNlcklkOnZvaWQgMCxyZWFzb246MCxkZXZpY2VUeXBlOjB9O3JldHVybiB0LnVzZXJJZD12b2lkIDAhPT1lLnVzZXJJZCYmbnVsbCE9PWUudXNlcklkP28uVVVJRC5mcm9tUGFydGlhbChlLnVzZXJJZCk6dm9pZCAwLHQucmVhc29uPWUucmVhc29uPz8wLHQuZGV2aWNlVHlwZT1lLmRldmljZVR5cGU/PzAsdH19LHQuQ2xlYXJEZXZpY2VUb2tlblJlc3BvbnNlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLnN0YXR1c0NvZGUmJnQudWludDMyKDgpLmludDMyKGUuc3RhdHVzQ29kZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtzdGF0dXNDb2RlOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLnN0YXR1c0NvZGU9bi5pbnQzMigpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17c3RhdHVzQ29kZTowfTtyZXR1cm4gdC5zdGF0dXNDb2RlPWUuc3RhdHVzQ29kZT8/MCx0fX0sdC5EZWxldGVVc2VyUmVzcG9uc2U9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUuc3RhdHVzQ29kZSYmdC51aW50MzIoOCkuaW50MzIoZS5zdGF0dXNDb2RlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3N0YXR1c0NvZGU6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2kuc3RhdHVzQ29kZT1uLmludDMyKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtzdGF0dXNDb2RlOjB9O3JldHVybiB0LnN0YXR1c0NvZGU9ZS5zdGF0dXNDb2RlPz8wLHR9fSx0LlJlZ2lzdGVyRGV2aWNlUmVxdWVzdD17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLnVzZXJJZCYmby5VVUlELmVuY29kZShlLnVzZXJJZCxuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmRldmljZVRva2VuJiZ0LkRldmljZVRva2VuLmVuY29kZShlLmRldmljZVRva2VuLG4udWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLmRldmljZVR5cGUmJm4udWludDMyKDI0KS5pbnQzMihlLmRldmljZVR5cGUpLDAhPT1lLnJlbGVhc2VUeXBlJiZuLnVpbnQzMigzMikuaW50MzIoZS5yZWxlYXNlVHlwZSksdm9pZCAwIT09ZS5lbmNyeXB0aW9uRGF0YSYmdC5QdXNoTm90aWZpY2F0aW9uRW5jcnlwdGlvbkRhdGEuZW5jb2RlKGUuZW5jcnlwdGlvbkRhdGEsbi51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKCksMCE9PWUuYXBwSWQmJm4udWludDMyKDQ4KS5pbnQzMihlLmFwcElkKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IHM9e3VzZXJJZDp2b2lkIDAsZGV2aWNlVG9rZW46dm9pZCAwLGRldmljZVR5cGU6MCxyZWxlYXNlVHlwZTowLGVuY3J5cHRpb25EYXRhOnZvaWQgMCxhcHBJZDowfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6cy51c2VySWQ9by5VVUlELmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMjpzLmRldmljZVRva2VuPXQuRGV2aWNlVG9rZW4uZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAzOnMuZGV2aWNlVHlwZT1yLmludDMyKCk7YnJlYWs7Y2FzZSA0OnMucmVsZWFzZVR5cGU9ci5pbnQzMigpO2JyZWFrO2Nhc2UgNTpzLmVuY3J5cHRpb25EYXRhPXQuUHVzaE5vdGlmaWNhdGlvbkVuY3J5cHRpb25EYXRhLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgNjpzLmFwcElkPXIuaW50MzIoKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIHN9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e3VzZXJJZDp2b2lkIDAsZGV2aWNlVG9rZW46dm9pZCAwLGRldmljZVR5cGU6MCxyZWxlYXNlVHlwZTowLGVuY3J5cHRpb25EYXRhOnZvaWQgMCxhcHBJZDowfTtyZXR1cm4gbi51c2VySWQ9dm9pZCAwIT09ZS51c2VySWQmJm51bGwhPT1lLnVzZXJJZD9vLlVVSUQuZnJvbVBhcnRpYWwoZS51c2VySWQpOnZvaWQgMCxuLmRldmljZVRva2VuPXZvaWQgMCE9PWUuZGV2aWNlVG9rZW4mJm51bGwhPT1lLmRldmljZVRva2VuP3QuRGV2aWNlVG9rZW4uZnJvbVBhcnRpYWwoZS5kZXZpY2VUb2tlbik6dm9pZCAwLG4uZGV2aWNlVHlwZT1lLmRldmljZVR5cGU/PzAsbi5yZWxlYXNlVHlwZT1lLnJlbGVhc2VUeXBlPz8wLG4uZW5jcnlwdGlvbkRhdGE9dm9pZCAwIT09ZS5lbmNyeXB0aW9uRGF0YSYmbnVsbCE9PWUuZW5jcnlwdGlvbkRhdGE/dC5QdXNoTm90aWZpY2F0aW9uRW5jcnlwdGlvbkRhdGEuZnJvbVBhcnRpYWwoZS5lbmNyeXB0aW9uRGF0YSk6dm9pZCAwLG4uYXBwSWQ9ZS5hcHBJZD8/MCxufX0sdC5SZWdpc3RlckRldmljZVJlc3BvbnNlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLnN0YXR1c0NvZGUmJnQudWludDMyKDgpLmludDMyKGUuc3RhdHVzQ29kZSksITA9PT1lLmlzUmV0cnlhYmxlJiZ0LnVpbnQzMigxNikuYm9vbChlLmlzUmV0cnlhYmxlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3N0YXR1c0NvZGU6MCxpc1JldHJ5YWJsZTohMX07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuc3RhdHVzQ29kZT1uLmludDMyKCk7YnJlYWs7Y2FzZSAyOmkuaXNSZXRyeWFibGU9bi5ib29sKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtzdGF0dXNDb2RlOjAsaXNSZXRyeWFibGU6ITF9O3JldHVybiB0LnN0YXR1c0NvZGU9ZS5zdGF0dXNDb2RlPz8wLHQuaXNSZXRyeWFibGU9ZS5pc1JldHJ5YWJsZT8/ITEsdH19LHQuRGV2aWNlVG9rZW49e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS50b2tlbiYmbi51aW50MzIoMTApLnN0cmluZyhlLnRva2VuKSwwIT09ZS50b2tlblR5cGUmJm4udWludDMyKDE2KS5pbnQzMihlLnRva2VuVHlwZSksXCIwXCIhPT1lLnVwZGF0ZVRpbWVzdGFtcCYmbi51aW50MzIoMjQpLmludDY0KGUudXBkYXRlVGltZXN0YW1wKSx2b2lkIDAhPT1lLnRva2VuRGVsZXRpb25JbmZvJiZ0LlRva2VuRGVsZXRpb25JbmZvLmVuY29kZShlLnRva2VuRGVsZXRpb25JbmZvLG4udWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17dG9rZW46XCJcIix0b2tlblR5cGU6MCx1cGRhdGVUaW1lc3RhbXA6XCIwXCIsdG9rZW5EZWxldGlvbkluZm86dm9pZCAwfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by50b2tlbj1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMjpvLnRva2VuVHlwZT1yLmludDMyKCk7YnJlYWs7Y2FzZSAzOm8udXBkYXRlVGltZXN0YW1wPXMoci5pbnQ2NCgpKTticmVhaztjYXNlIDQ6by50b2tlbkRlbGV0aW9uSW5mbz10LlRva2VuRGVsZXRpb25JbmZvLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17dG9rZW46XCJcIix0b2tlblR5cGU6MCx1cGRhdGVUaW1lc3RhbXA6XCIwXCIsdG9rZW5EZWxldGlvbkluZm86dm9pZCAwfTtyZXR1cm4gbi50b2tlbj1lLnRva2VuPz9cIlwiLG4udG9rZW5UeXBlPWUudG9rZW5UeXBlPz8wLG4udXBkYXRlVGltZXN0YW1wPWUudXBkYXRlVGltZXN0YW1wPz9cIjBcIixuLnRva2VuRGVsZXRpb25JbmZvPXZvaWQgMCE9PWUudG9rZW5EZWxldGlvbkluZm8mJm51bGwhPT1lLnRva2VuRGVsZXRpb25JbmZvP3QuVG9rZW5EZWxldGlvbkluZm8uZnJvbVBhcnRpYWwoZS50b2tlbkRlbGV0aW9uSW5mbyk6dm9pZCAwLG59fSx0LlRva2Vucz17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO2Zvcihjb25zdCByIG9mIGUudG9rZW5zKXQuRGV2aWNlVG9rZW4uZW5jb2RlKHIsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17dG9rZW5zOltdfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7ZT4+PjM9PTE/by50b2tlbnMucHVzaCh0LkRldmljZVRva2VuLmRlY29kZShyLHIudWludDMyKCkpKTpyLnNraXBUeXBlKDcmZSl9cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e3Rva2VuczpbXX07cmV0dXJuIG4udG9rZW5zPWUudG9rZW5zPy5tYXAoKGU9PnQuRGV2aWNlVG9rZW4uZnJvbVBhcnRpYWwoZSkpKXx8W10sbn19LHQuU2Vzc2lvbkRhdGE9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5zZXNzaW9uSWQmJm4udWludDMyKDEwKS5zdHJpbmcoZS5zZXNzaW9uSWQpLDAhPT1lLnR5cGUmJm4udWludDMyKDE2KS5pbnQzMihlLnR5cGUpLHZvaWQgMCE9PWUudG9rZW5EYXRhJiZ0LlRva2VuRGF0YS5lbmNvZGUoZS50b2tlbkRhdGEsbi51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXtzZXNzaW9uSWQ6XCJcIix0eXBlOjAsdG9rZW5EYXRhOnZvaWQgMH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8uc2Vzc2lvbklkPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOm8udHlwZT1yLmludDMyKCk7YnJlYWs7Y2FzZSAzOm8udG9rZW5EYXRhPXQuVG9rZW5EYXRhLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17c2Vzc2lvbklkOlwiXCIsdHlwZTowLHRva2VuRGF0YTp2b2lkIDB9O3JldHVybiBuLnNlc3Npb25JZD1lLnNlc3Npb25JZD8/XCJcIixuLnR5cGU9ZS50eXBlPz8wLG4udG9rZW5EYXRhPXZvaWQgMCE9PWUudG9rZW5EYXRhJiZudWxsIT09ZS50b2tlbkRhdGE/dC5Ub2tlbkRhdGEuZnJvbVBhcnRpYWwoZS50b2tlbkRhdGEpOnZvaWQgMCxufX0sdC5Ub2tlbkRhdGE9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS50b2tlbiYmbi51aW50MzIoMTApLnN0cmluZyhlLnRva2VuKSxcIlwiIT09ZS52b2lwVG9rZW4mJm4udWludDMyKDE4KS5zdHJpbmcoZS52b2lwVG9rZW4pLHZvaWQgMCE9PWUudG9rZW5EZWxldGlvbkluZm8mJnQuVG9rZW5EZWxldGlvbkluZm8uZW5jb2RlKGUudG9rZW5EZWxldGlvbkluZm8sbi51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXt0b2tlbjpcIlwiLHZvaXBUb2tlbjpcIlwiLHRva2VuRGVsZXRpb25JbmZvOnZvaWQgMH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8udG9rZW49ci5zdHJpbmcoKTticmVhaztjYXNlIDI6by52b2lwVG9rZW49ci5zdHJpbmcoKTticmVhaztjYXNlIDM6by50b2tlbkRlbGV0aW9uSW5mbz10LlRva2VuRGVsZXRpb25JbmZvLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17dG9rZW46XCJcIix2b2lwVG9rZW46XCJcIix0b2tlbkRlbGV0aW9uSW5mbzp2b2lkIDB9O3JldHVybiBuLnRva2VuPWUudG9rZW4/P1wiXCIsbi52b2lwVG9rZW49ZS52b2lwVG9rZW4/P1wiXCIsbi50b2tlbkRlbGV0aW9uSW5mbz12b2lkIDAhPT1lLnRva2VuRGVsZXRpb25JbmZvJiZudWxsIT09ZS50b2tlbkRlbGV0aW9uSW5mbz90LlRva2VuRGVsZXRpb25JbmZvLmZyb21QYXJ0aWFsKGUudG9rZW5EZWxldGlvbkluZm8pOnZvaWQgMCxufX0sdC5TbnNBcm5VcGRhdGVSZXF1ZXN0PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUudXNlcklkJiZvLlVVSUQuZW5jb2RlKGUudXNlcklkLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLFwiYXJuXCI9PT1lLnNuc0Fybj8uJGNhc2UmJnQudWludDMyKDE4KS5zdHJpbmcoZS5zbnNBcm4uYXJuKSxcInZvaXBBcm5cIj09PWUuc25zQXJuPy4kY2FzZSYmdC51aW50MzIoMjYpLnN0cmluZyhlLnNuc0Fybi52b2lwQXJuKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3VzZXJJZDp2b2lkIDAsc25zQXJuOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkudXNlcklkPW8uVVVJRC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDI6aS5zbnNBcm49eyRjYXNlOlwiYXJuXCIsYXJuOm4uc3RyaW5nKCl9O2JyZWFrO2Nhc2UgMzppLnNuc0Fybj17JGNhc2U6XCJ2b2lwQXJuXCIsdm9pcEFybjpuLnN0cmluZygpfTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3VzZXJJZDp2b2lkIDAsc25zQXJuOnZvaWQgMH07cmV0dXJuIHQudXNlcklkPXZvaWQgMCE9PWUudXNlcklkJiZudWxsIT09ZS51c2VySWQ/by5VVUlELmZyb21QYXJ0aWFsKGUudXNlcklkKTp2b2lkIDAsXCJhcm5cIj09PWUuc25zQXJuPy4kY2FzZSYmdm9pZCAwIT09ZS5zbnNBcm4/LmFybiYmbnVsbCE9PWUuc25zQXJuPy5hcm4mJih0LnNuc0Fybj17JGNhc2U6XCJhcm5cIixhcm46ZS5zbnNBcm4uYXJufSksXCJ2b2lwQXJuXCI9PT1lLnNuc0Fybj8uJGNhc2UmJnZvaWQgMCE9PWUuc25zQXJuPy52b2lwQXJuJiZudWxsIT09ZS5zbnNBcm4/LnZvaXBBcm4mJih0LnNuc0Fybj17JGNhc2U6XCJ2b2lwQXJuXCIsdm9pcEFybjplLnNuc0Fybi52b2lwQXJufSksdH19LHQuU25zQXJuVXBkYXRlUmVzcG9uc2U9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUuc3RhdHVzQ29kZSYmdC51aW50MzIoOCkuaW50MzIoZS5zdGF0dXNDb2RlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3N0YXR1c0NvZGU6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2kuc3RhdHVzQ29kZT1uLmludDMyKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtzdGF0dXNDb2RlOjB9O3JldHVybiB0LnN0YXR1c0NvZGU9ZS5zdGF0dXNDb2RlPz8wLHR9fSx0LlBOREdldFJlc3BvbnNlPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLnN0YXR1c0NvZGUmJm4udWludDMyKDgpLmludDMyKGUuc3RhdHVzQ29kZSksdm9pZCAwIT09ZS5wdXNoTm90aWZpY2F0aW9uRGF0YSYmdC5QdXNoTm90aWZpY2F0aW9uRGF0YS5lbmNvZGUoZS5wdXNoTm90aWZpY2F0aW9uRGF0YSxuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89e3N0YXR1c0NvZGU6MCxwdXNoTm90aWZpY2F0aW9uRGF0YTp2b2lkIDB9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLnN0YXR1c0NvZGU9ci5pbnQzMigpO2JyZWFrO2Nhc2UgMjpvLnB1c2hOb3RpZmljYXRpb25EYXRhPXQuUHVzaE5vdGlmaWNhdGlvbkRhdGEuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtzdGF0dXNDb2RlOjAscHVzaE5vdGlmaWNhdGlvbkRhdGE6dm9pZCAwfTtyZXR1cm4gbi5zdGF0dXNDb2RlPWUuc3RhdHVzQ29kZT8/MCxuLnB1c2hOb3RpZmljYXRpb25EYXRhPXZvaWQgMCE9PWUucHVzaE5vdGlmaWNhdGlvbkRhdGEmJm51bGwhPT1lLnB1c2hOb3RpZmljYXRpb25EYXRhP3QuUHVzaE5vdGlmaWNhdGlvbkRhdGEuZnJvbVBhcnRpYWwoZS5wdXNoTm90aWZpY2F0aW9uRGF0YSk6dm9pZCAwLG59fSx0LlB1c2hOb3RpZmljYXRpb25FbmNyeXB0aW9uRGF0YT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmVuY3J5cHRpb25TZWNyZXQmJnQudWludDMyKDEwKS5zdHJpbmcoZS5lbmNyeXB0aW9uU2VjcmV0KSwwIT09ZS5lbmNyeXB0aW9uVHlwZSYmdC51aW50MzIoMTYpLmludDMyKGUuZW5jcnlwdGlvblR5cGUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17ZW5jcnlwdGlvblNlY3JldDpcIlwiLGVuY3J5cHRpb25UeXBlOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmVuY3J5cHRpb25TZWNyZXQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS5lbmNyeXB0aW9uVHlwZT1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtlbmNyeXB0aW9uU2VjcmV0OlwiXCIsZW5jcnlwdGlvblR5cGU6MH07cmV0dXJuIHQuZW5jcnlwdGlvblNlY3JldD1lLmVuY3J5cHRpb25TZWNyZXQ/P1wiXCIsdC5lbmNyeXB0aW9uVHlwZT1lLmVuY3J5cHRpb25UeXBlPz8wLHR9fSx0LlRva2VuRGVsZXRpb25JbmZvPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCIwXCIhPT1lLmRlbGV0aW9uVGltZSYmdC51aW50MzIoOCkuaW50NjQoZS5kZWxldGlvblRpbWUpLDAhPT1lLnJlYXNvbiYmdC51aW50MzIoMTYpLmludDMyKGUucmVhc29uKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2RlbGV0aW9uVGltZTpcIjBcIixyZWFzb246MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuZGVsZXRpb25UaW1lPXMobi5pbnQ2NCgpKTticmVhaztjYXNlIDI6aS5yZWFzb249bi5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17ZGVsZXRpb25UaW1lOlwiMFwiLHJlYXNvbjowfTtyZXR1cm4gdC5kZWxldGlvblRpbWU9ZS5kZWxldGlvblRpbWU/P1wiMFwiLHQucmVhc29uPWUucmVhc29uPz8wLHR9fSx0LkRldmljZVZlcnNpb25JbmZvPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUuYXBwVmVyc2lvbiYmdC5WZXJzaW9uLmVuY29kZShlLmFwcFZlcnNpb24sbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5vc1ZlcnNpb24mJnQuVmVyc2lvbi5lbmNvZGUoZS5vc1ZlcnNpb24sbi51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXthcHBWZXJzaW9uOnZvaWQgMCxvc1ZlcnNpb246dm9pZCAwfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5hcHBWZXJzaW9uPXQuVmVyc2lvbi5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDI6by5vc1ZlcnNpb249dC5WZXJzaW9uLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17YXBwVmVyc2lvbjp2b2lkIDAsb3NWZXJzaW9uOnZvaWQgMH07cmV0dXJuIG4uYXBwVmVyc2lvbj12b2lkIDAhPT1lLmFwcFZlcnNpb24mJm51bGwhPT1lLmFwcFZlcnNpb24/dC5WZXJzaW9uLmZyb21QYXJ0aWFsKGUuYXBwVmVyc2lvbik6dm9pZCAwLG4ub3NWZXJzaW9uPXZvaWQgMCE9PWUub3NWZXJzaW9uJiZudWxsIT09ZS5vc1ZlcnNpb24/dC5WZXJzaW9uLmZyb21QYXJ0aWFsKGUub3NWZXJzaW9uKTp2b2lkIDAsbn19LHQuVmVyc2lvbj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5tYWpvciYmdC51aW50MzIoOCkudWludDMyKGUubWFqb3IpLDAhPT1lLm1pbm9yJiZ0LnVpbnQzMigxNikudWludDMyKGUubWlub3IpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17bWFqb3I6MCxtaW5vcjowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5tYWpvcj1uLnVpbnQzMigpO2JyZWFrO2Nhc2UgMjppLm1pbm9yPW4udWludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXttYWpvcjowLG1pbm9yOjB9O3JldHVybiB0Lm1ham9yPWUubWFqb3I/PzAsdC5taW5vcj1lLm1pbm9yPz8wLHR9fSx0LlB1c2hOb3RpZmljYXRpb25EYXRhPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7dm9pZCAwIT09ZS51c2VySWQmJm8uVVVJRC5lbmNvZGUoZS51c2VySWQsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksXCJcIiE9PWUuZGV2aWNlVG9rZW4mJm4udWludDMyKDE4KS5zdHJpbmcoZS5kZXZpY2VUb2tlbiksXCJcIiE9PWUuZGV2aWNlVm9pcFRva2VuJiZuLnVpbnQzMigyNikuc3RyaW5nKGUuZGV2aWNlVm9pcFRva2VuKSwwIT09ZS5kZXZpY2VUeXBlJiZuLnVpbnQzMigzMikuaW50MzIoZS5kZXZpY2VUeXBlKSwwIT09ZS5yZWxlYXNlVHlwZSYmbi51aW50MzIoNDApLmludDMyKGUucmVsZWFzZVR5cGUpLDAhPT1lLnNvdW5kJiZuLnVpbnQzMig0OCkuaW50MzIoZS5zb3VuZCksMCE9PWUucmluZ2luZ1NvdW5kJiZuLnVpbnQzMig1NikuaW50MzIoZS5yaW5naW5nU291bmQpLDAhPT1lLmVuYWJsZWQmJm4udWludDMyKDY0KS5pbnQzMihlLmVuYWJsZWQpLDAhPT1lLnByaXZhY3kmJm4udWludDMyKDcyKS5pbnQzMihlLnByaXZhY3kpLFwiXCIhPT1lLnNuc0FybiYmbi51aW50MzIoODIpLnN0cmluZyhlLnNuc0FybiksXCJcIiE9PWUuc25zVm9pcEFybiYmbi51aW50MzIoOTApLnN0cmluZyhlLnNuc1ZvaXBBcm4pLHZvaWQgMCE9PWUucHVzaE5vdGlmaWNhdGlvbkVuY3J5cHRpb25EYXRhJiZ0LlB1c2hOb3RpZmljYXRpb25FbmNyeXB0aW9uRGF0YS5lbmNvZGUoZS5wdXNoTm90aWZpY2F0aW9uRW5jcnlwdGlvbkRhdGEsbi51aW50MzIoOTgpLmZvcmsoKSkubGRlbGltKCksMCE9PWUuYXBwSWQmJm4udWludDMyKDEwNCkuaW50MzIoZS5hcHBJZCksdm9pZCAwIT09ZS50b2tlbkRlbGV0aW9uSW5mbyYmdC5Ub2tlbkRlbGV0aW9uSW5mby5lbmNvZGUoZS50b2tlbkRlbGV0aW9uSW5mbyxuLnVpbnQzMigxMTQpLmZvcmsoKSkubGRlbGltKCksMCE9PWUuYml0bW9qaSYmbi51aW50MzIoMTIwKS5pbnQzMihlLmJpdG1vamkpLHZvaWQgMCE9PWUudG9rZW5zJiZ0LlRva2Vucy5lbmNvZGUoZS50b2tlbnMsbi51aW50MzIoMTMwKS5mb3JrKCkpLmxkZWxpbSgpO2Zvcihjb25zdCByIG9mIGUud2ViU2Vzc2lvbnMpdC5TZXNzaW9uRGF0YS5lbmNvZGUocixuLnVpbnQzMigxMzgpLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIHZvaWQgMCE9PWUuZGV2aWNlVmVyc2lvbkluZm8mJnQuRGV2aWNlVmVyc2lvbkluZm8uZW5jb2RlKGUuZGV2aWNlVmVyc2lvbkluZm8sbi51aW50MzIoMTQ2KS5mb3JrKCkpLmxkZWxpbSgpLCEwPT09ZS5oYXNXZWJTZXNzaW9ucyYmbi51aW50MzIoMTUyKS5ib29sKGUuaGFzV2ViU2Vzc2lvbnMpLDAhPT1lLndlYlB1c2hFbmFibGVkJiZuLnVpbnQzMigxNjApLmludDMyKGUud2ViUHVzaEVuYWJsZWQpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgcz17dXNlcklkOnZvaWQgMCxkZXZpY2VUb2tlbjpcIlwiLGRldmljZVZvaXBUb2tlbjpcIlwiLGRldmljZVR5cGU6MCxyZWxlYXNlVHlwZTowLHNvdW5kOjAscmluZ2luZ1NvdW5kOjAsZW5hYmxlZDowLHByaXZhY3k6MCxzbnNBcm46XCJcIixzbnNWb2lwQXJuOlwiXCIscHVzaE5vdGlmaWNhdGlvbkVuY3J5cHRpb25EYXRhOnZvaWQgMCxhcHBJZDowLHRva2VuRGVsZXRpb25JbmZvOnZvaWQgMCxiaXRtb2ppOjAsdG9rZW5zOnZvaWQgMCx3ZWJTZXNzaW9uczpbXSxkZXZpY2VWZXJzaW9uSW5mbzp2b2lkIDAsaGFzV2ViU2Vzc2lvbnM6ITEsd2ViUHVzaEVuYWJsZWQ6MH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOnMudXNlcklkPW8uVVVJRC5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDI6cy5kZXZpY2VUb2tlbj1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMzpzLmRldmljZVZvaXBUb2tlbj1yLnN0cmluZygpO2JyZWFrO2Nhc2UgNDpzLmRldmljZVR5cGU9ci5pbnQzMigpO2JyZWFrO2Nhc2UgNTpzLnJlbGVhc2VUeXBlPXIuaW50MzIoKTticmVhaztjYXNlIDY6cy5zb3VuZD1yLmludDMyKCk7YnJlYWs7Y2FzZSA3OnMucmluZ2luZ1NvdW5kPXIuaW50MzIoKTticmVhaztjYXNlIDg6cy5lbmFibGVkPXIuaW50MzIoKTticmVhaztjYXNlIDk6cy5wcml2YWN5PXIuaW50MzIoKTticmVhaztjYXNlIDEwOnMuc25zQXJuPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSAxMTpzLnNuc1ZvaXBBcm49ci5zdHJpbmcoKTticmVhaztjYXNlIDEyOnMucHVzaE5vdGlmaWNhdGlvbkVuY3J5cHRpb25EYXRhPXQuUHVzaE5vdGlmaWNhdGlvbkVuY3J5cHRpb25EYXRhLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMTM6cy5hcHBJZD1yLmludDMyKCk7YnJlYWs7Y2FzZSAxNDpzLnRva2VuRGVsZXRpb25JbmZvPXQuVG9rZW5EZWxldGlvbkluZm8uZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAxNTpzLmJpdG1vamk9ci5pbnQzMigpO2JyZWFrO2Nhc2UgMTY6cy50b2tlbnM9dC5Ub2tlbnMuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAxNzpzLndlYlNlc3Npb25zLnB1c2godC5TZXNzaW9uRGF0YS5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAxODpzLmRldmljZVZlcnNpb25JbmZvPXQuRGV2aWNlVmVyc2lvbkluZm8uZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAxOTpzLmhhc1dlYlNlc3Npb25zPXIuYm9vbCgpO2JyZWFrO2Nhc2UgMjA6cy53ZWJQdXNoRW5hYmxlZD1yLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBzfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXt1c2VySWQ6dm9pZCAwLGRldmljZVRva2VuOlwiXCIsZGV2aWNlVm9pcFRva2VuOlwiXCIsZGV2aWNlVHlwZTowLHJlbGVhc2VUeXBlOjAsc291bmQ6MCxyaW5naW5nU291bmQ6MCxlbmFibGVkOjAscHJpdmFjeTowLHNuc0FybjpcIlwiLHNuc1ZvaXBBcm46XCJcIixwdXNoTm90aWZpY2F0aW9uRW5jcnlwdGlvbkRhdGE6dm9pZCAwLGFwcElkOjAsdG9rZW5EZWxldGlvbkluZm86dm9pZCAwLGJpdG1vamk6MCx0b2tlbnM6dm9pZCAwLHdlYlNlc3Npb25zOltdLGRldmljZVZlcnNpb25JbmZvOnZvaWQgMCxoYXNXZWJTZXNzaW9uczohMSx3ZWJQdXNoRW5hYmxlZDowfTtyZXR1cm4gbi51c2VySWQ9dm9pZCAwIT09ZS51c2VySWQmJm51bGwhPT1lLnVzZXJJZD9vLlVVSUQuZnJvbVBhcnRpYWwoZS51c2VySWQpOnZvaWQgMCxuLmRldmljZVRva2VuPWUuZGV2aWNlVG9rZW4/P1wiXCIsbi5kZXZpY2VWb2lwVG9rZW49ZS5kZXZpY2VWb2lwVG9rZW4/P1wiXCIsbi5kZXZpY2VUeXBlPWUuZGV2aWNlVHlwZT8/MCxuLnJlbGVhc2VUeXBlPWUucmVsZWFzZVR5cGU/PzAsbi5zb3VuZD1lLnNvdW5kPz8wLG4ucmluZ2luZ1NvdW5kPWUucmluZ2luZ1NvdW5kPz8wLG4uZW5hYmxlZD1lLmVuYWJsZWQ/PzAsbi5wcml2YWN5PWUucHJpdmFjeT8/MCxuLnNuc0Fybj1lLnNuc0Fybj8/XCJcIixuLnNuc1ZvaXBBcm49ZS5zbnNWb2lwQXJuPz9cIlwiLG4ucHVzaE5vdGlmaWNhdGlvbkVuY3J5cHRpb25EYXRhPXZvaWQgMCE9PWUucHVzaE5vdGlmaWNhdGlvbkVuY3J5cHRpb25EYXRhJiZudWxsIT09ZS5wdXNoTm90aWZpY2F0aW9uRW5jcnlwdGlvbkRhdGE/dC5QdXNoTm90aWZpY2F0aW9uRW5jcnlwdGlvbkRhdGEuZnJvbVBhcnRpYWwoZS5wdXNoTm90aWZpY2F0aW9uRW5jcnlwdGlvbkRhdGEpOnZvaWQgMCxuLmFwcElkPWUuYXBwSWQ/PzAsbi50b2tlbkRlbGV0aW9uSW5mbz12b2lkIDAhPT1lLnRva2VuRGVsZXRpb25JbmZvJiZudWxsIT09ZS50b2tlbkRlbGV0aW9uSW5mbz90LlRva2VuRGVsZXRpb25JbmZvLmZyb21QYXJ0aWFsKGUudG9rZW5EZWxldGlvbkluZm8pOnZvaWQgMCxuLmJpdG1vamk9ZS5iaXRtb2ppPz8wLG4udG9rZW5zPXZvaWQgMCE9PWUudG9rZW5zJiZudWxsIT09ZS50b2tlbnM/dC5Ub2tlbnMuZnJvbVBhcnRpYWwoZS50b2tlbnMpOnZvaWQgMCxuLndlYlNlc3Npb25zPWUud2ViU2Vzc2lvbnM/Lm1hcCgoZT0+dC5TZXNzaW9uRGF0YS5mcm9tUGFydGlhbChlKSkpfHxbXSxuLmRldmljZVZlcnNpb25JbmZvPXZvaWQgMCE9PWUuZGV2aWNlVmVyc2lvbkluZm8mJm51bGwhPT1lLmRldmljZVZlcnNpb25JbmZvP3QuRGV2aWNlVmVyc2lvbkluZm8uZnJvbVBhcnRpYWwoZS5kZXZpY2VWZXJzaW9uSW5mbyk6dm9pZCAwLG4uaGFzV2ViU2Vzc2lvbnM9ZS5oYXNXZWJTZXNzaW9ucz8/ITEsbi53ZWJQdXNoRW5hYmxlZD1lLndlYlB1c2hFbmFibGVkPz8wLG59fSxhLmRlZmF1bHQudXRpbC5Mb25nIT09aS5kZWZhdWx0JiYoYS5kZWZhdWx0LnV0aWwuTG9uZz1pLmRlZmF1bHQsYS5kZWZhdWx0LmNvbmZpZ3VyZSgpKX0sNTY0NTE6KGUsdCxuKT0+e3QuTDc9dC5Fdz10Lk9lPXQuaXI9dC5ETD10LmsxPXQuUEU9dC5kTz10LnpWPXQucUQ9dC50Wj12b2lkIDAsbigzMzAzNyk7Y29uc3Qgcj1uKDYzOTUxKSxpPW4oMzgxNDApO24oODIwODQpLHQudFo9Y2xhc3N7cnBjO2NvbnN0cnVjdG9yKGUpe3RoaXMucnBjPWUsdGhpcy5VcGRhdGVOb3RpZmljYXRpb25TZXR0aW5nPXRoaXMuVXBkYXRlTm90aWZpY2F0aW9uU2V0dGluZy5iaW5kKHRoaXMpLHRoaXMuVXBkYXRlRGV2aWNlVG9rZW49dGhpcy5VcGRhdGVEZXZpY2VUb2tlbi5iaW5kKHRoaXMpLHRoaXMuQ2xlYXJEZXZpY2VUb2tlbj10aGlzLkNsZWFyRGV2aWNlVG9rZW4uYmluZCh0aGlzKSx0aGlzLlVwZGF0ZVNuc0Fybj10aGlzLlVwZGF0ZVNuc0Fybi5iaW5kKHRoaXMpLHRoaXMuR2V0UHVzaE5vdGlmaWNhdGlvbkRhdGE9dGhpcy5HZXRQdXNoTm90aWZpY2F0aW9uRGF0YS5iaW5kKHRoaXMpLHRoaXMuR2V0Tm90aWZpY2F0aW9uU2V0dGluZz10aGlzLkdldE5vdGlmaWNhdGlvblNldHRpbmcuYmluZCh0aGlzKSx0aGlzLkdldFRva2VuU3RhdGU9dGhpcy5HZXRUb2tlblN0YXRlLmJpbmQodGhpcyksdGhpcy5EZWxldGVVc2VyPXRoaXMuRGVsZXRlVXNlci5iaW5kKHRoaXMpLHRoaXMuUmVnaXN0ZXJEZXZpY2U9dGhpcy5SZWdpc3RlckRldmljZS5iaW5kKHRoaXMpfVVwZGF0ZU5vdGlmaWNhdGlvblNldHRpbmcoZSxuKXtyZXR1cm4gdGhpcy5ycGMudW5hcnkodC56VixyLk5vdGlmaWNhdGlvblNldHRpbmdVcGRhdGVSZXF1ZXN0LmZyb21QYXJ0aWFsKGUpLG4pfVVwZGF0ZURldmljZVRva2VuKGUsbil7cmV0dXJuIHRoaXMucnBjLnVuYXJ5KHQuZE8sci5EZXZpY2VUb2tlblVwZGF0ZVJlcXVlc3QuZnJvbVBhcnRpYWwoZSksbil9Q2xlYXJEZXZpY2VUb2tlbihlLG4pe3JldHVybiB0aGlzLnJwYy51bmFyeSh0LlBFLHIuQ2xlYXJEZXZpY2VUb2tlblJlcXVlc3QuZnJvbVBhcnRpYWwoZSksbil9VXBkYXRlU25zQXJuKGUsbil7cmV0dXJuIHRoaXMucnBjLnVuYXJ5KHQuazEsci5TbnNBcm5VcGRhdGVSZXF1ZXN0LmZyb21QYXJ0aWFsKGUpLG4pfUdldFB1c2hOb3RpZmljYXRpb25EYXRhKGUsbil7cmV0dXJuIHRoaXMucnBjLnVuYXJ5KHQuREwsaS5VVUlELmZyb21QYXJ0aWFsKGUpLG4pfUdldE5vdGlmaWNhdGlvblNldHRpbmcoZSxuKXtyZXR1cm4gdGhpcy5ycGMudW5hcnkodC5pcixyLkdldE5vdGlmaWNhdGlvblNldHRpbmdSZXF1ZXN0LmZyb21QYXJ0aWFsKGUpLG4pfUdldFRva2VuU3RhdGUoZSxuKXtyZXR1cm4gdGhpcy5ycGMudW5hcnkodC5PZSxyLkdldFRva2VuU3RhdGVSZXF1ZXN0LmZyb21QYXJ0aWFsKGUpLG4pfURlbGV0ZVVzZXIoZSxuKXtyZXR1cm4gdGhpcy5ycGMudW5hcnkodC5FdyxpLlVVSUQuZnJvbVBhcnRpYWwoZSksbil9UmVnaXN0ZXJEZXZpY2UoZSxuKXtyZXR1cm4gdGhpcy5ycGMudW5hcnkodC5MNyxyLlJlZ2lzdGVyRGV2aWNlUmVxdWVzdC5mcm9tUGFydGlhbChlKSxuKX19LHQucUQ9e3NlcnZpY2VOYW1lOlwic25hcGNoYXQubm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvbmRhdGEuUHVzaE5vdGlmaWNhdGlvbkRhdGFSZWdpc3RyeVNlcnZpY2VcIn0sdC56Vj17bWV0aG9kTmFtZTpcIlVwZGF0ZU5vdGlmaWNhdGlvblNldHRpbmdcIixzZXJ2aWNlOnQucUQscmVxdWVzdFN0cmVhbTohMSxyZXNwb25zZVN0cmVhbTohMSxyZXF1ZXN0VHlwZTp7c2VyaWFsaXplQmluYXJ5KCl7cmV0dXJuIHIuTm90aWZpY2F0aW9uU2V0dGluZ1VwZGF0ZVJlcXVlc3QuZW5jb2RlKHRoaXMpLmZpbmlzaCgpfX0scmVzcG9uc2VUeXBlOntkZXNlcmlhbGl6ZUJpbmFyeTplPT4oey4uLnIuTm90aWZpY2F0aW9uU2V0dGluZ1VwZGF0ZVJlc3BvbnNlLmRlY29kZShlKSx0b09iamVjdCgpe3JldHVybiB0aGlzfX0pfX0sdC5kTz17bWV0aG9kTmFtZTpcIlVwZGF0ZURldmljZVRva2VuXCIsc2VydmljZTp0LnFELHJlcXVlc3RTdHJlYW06ITEscmVzcG9uc2VTdHJlYW06ITEscmVxdWVzdFR5cGU6e3NlcmlhbGl6ZUJpbmFyeSgpe3JldHVybiByLkRldmljZVRva2VuVXBkYXRlUmVxdWVzdC5lbmNvZGUodGhpcykuZmluaXNoKCl9fSxyZXNwb25zZVR5cGU6e2Rlc2VyaWFsaXplQmluYXJ5OmU9Pih7Li4uci5EZXZpY2VUb2tlblVwZGF0ZVJlc3BvbnNlLmRlY29kZShlKSx0b09iamVjdCgpe3JldHVybiB0aGlzfX0pfX0sdC5QRT17bWV0aG9kTmFtZTpcIkNsZWFyRGV2aWNlVG9rZW5cIixzZXJ2aWNlOnQucUQscmVxdWVzdFN0cmVhbTohMSxyZXNwb25zZVN0cmVhbTohMSxyZXF1ZXN0VHlwZTp7c2VyaWFsaXplQmluYXJ5KCl7cmV0dXJuIHIuQ2xlYXJEZXZpY2VUb2tlblJlcXVlc3QuZW5jb2RlKHRoaXMpLmZpbmlzaCgpfX0scmVzcG9uc2VUeXBlOntkZXNlcmlhbGl6ZUJpbmFyeTplPT4oey4uLnIuQ2xlYXJEZXZpY2VUb2tlblJlc3BvbnNlLmRlY29kZShlKSx0b09iamVjdCgpe3JldHVybiB0aGlzfX0pfX0sdC5rMT17bWV0aG9kTmFtZTpcIlVwZGF0ZVNuc0FyblwiLHNlcnZpY2U6dC5xRCxyZXF1ZXN0U3RyZWFtOiExLHJlc3BvbnNlU3RyZWFtOiExLHJlcXVlc3RUeXBlOntzZXJpYWxpemVCaW5hcnkoKXtyZXR1cm4gci5TbnNBcm5VcGRhdGVSZXF1ZXN0LmVuY29kZSh0aGlzKS5maW5pc2goKX19LHJlc3BvbnNlVHlwZTp7ZGVzZXJpYWxpemVCaW5hcnk6ZT0+KHsuLi5yLlNuc0FyblVwZGF0ZVJlc3BvbnNlLmRlY29kZShlKSx0b09iamVjdCgpe3JldHVybiB0aGlzfX0pfX0sdC5ETD17bWV0aG9kTmFtZTpcIkdldFB1c2hOb3RpZmljYXRpb25EYXRhXCIsc2VydmljZTp0LnFELHJlcXVlc3RTdHJlYW06ITEscmVzcG9uc2VTdHJlYW06ITEscmVxdWVzdFR5cGU6e3NlcmlhbGl6ZUJpbmFyeSgpe3JldHVybiBpLlVVSUQuZW5jb2RlKHRoaXMpLmZpbmlzaCgpfX0scmVzcG9uc2VUeXBlOntkZXNlcmlhbGl6ZUJpbmFyeTplPT4oey4uLnIuUE5ER2V0UmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fSx0LmlyPXttZXRob2ROYW1lOlwiR2V0Tm90aWZpY2F0aW9uU2V0dGluZ1wiLHNlcnZpY2U6dC5xRCxyZXF1ZXN0U3RyZWFtOiExLHJlc3BvbnNlU3RyZWFtOiExLHJlcXVlc3RUeXBlOntzZXJpYWxpemVCaW5hcnkoKXtyZXR1cm4gci5HZXROb3RpZmljYXRpb25TZXR0aW5nUmVxdWVzdC5lbmNvZGUodGhpcykuZmluaXNoKCl9fSxyZXNwb25zZVR5cGU6e2Rlc2VyaWFsaXplQmluYXJ5OmU9Pih7Li4uci5HZXROb3RpZmljYXRpb25TZXR0aW5nUmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fSx0Lk9lPXttZXRob2ROYW1lOlwiR2V0VG9rZW5TdGF0ZVwiLHNlcnZpY2U6dC5xRCxyZXF1ZXN0U3RyZWFtOiExLHJlc3BvbnNlU3RyZWFtOiExLHJlcXVlc3RUeXBlOntzZXJpYWxpemVCaW5hcnkoKXtyZXR1cm4gci5HZXRUb2tlblN0YXRlUmVxdWVzdC5lbmNvZGUodGhpcykuZmluaXNoKCl9fSxyZXNwb25zZVR5cGU6e2Rlc2VyaWFsaXplQmluYXJ5OmU9Pih7Li4uci5HZXRUb2tlblN0YXRlUmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fSx0LkV3PXttZXRob2ROYW1lOlwiRGVsZXRlVXNlclwiLHNlcnZpY2U6dC5xRCxyZXF1ZXN0U3RyZWFtOiExLHJlc3BvbnNlU3RyZWFtOiExLHJlcXVlc3RUeXBlOntzZXJpYWxpemVCaW5hcnkoKXtyZXR1cm4gaS5VVUlELmVuY29kZSh0aGlzKS5maW5pc2goKX19LHJlc3BvbnNlVHlwZTp7ZGVzZXJpYWxpemVCaW5hcnk6ZT0+KHsuLi5yLkRlbGV0ZVVzZXJSZXNwb25zZS5kZWNvZGUoZSksdG9PYmplY3QoKXtyZXR1cm4gdGhpc319KX19LHQuTDc9e21ldGhvZE5hbWU6XCJSZWdpc3RlckRldmljZVwiLHNlcnZpY2U6dC5xRCxyZXF1ZXN0U3RyZWFtOiExLHJlc3BvbnNlU3RyZWFtOiExLHJlcXVlc3RUeXBlOntzZXJpYWxpemVCaW5hcnkoKXtyZXR1cm4gci5SZWdpc3RlckRldmljZVJlcXVlc3QuZW5jb2RlKHRoaXMpLmZpbmlzaCgpfX0scmVzcG9uc2VUeXBlOntkZXNlcmlhbGl6ZUJpbmFyeTplPT4oey4uLnIuUmVnaXN0ZXJEZXZpY2VSZXNwb25zZS5kZWNvZGUoZSksdG9PYmplY3QoKXtyZXR1cm4gdGhpc319KX19O2NsYXNzIG8gZXh0ZW5kcyBFcnJvcntjb2RlO21ldGFkYXRhO2NvbnN0cnVjdG9yKGUsdCxuKXtzdXBlcihlKSx0aGlzLmNvZGU9dCx0aGlzLm1ldGFkYXRhPW59fX0sMzgxNDA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuVVVJRD12b2lkIDA7Y29uc3QgaT1yKG4oNjIxMDApKTtmdW5jdGlvbiBvKCl7cmV0dXJue2lkOm5ldyBVaW50OEFycmF5fX10LlVVSUQ9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUuaWQubGVuZ3RoJiZ0LnVpbnQzMigxMCkuYnl0ZXMoZS5pZCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBhPW8oKTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/YS5pZD1uLmJ5dGVzKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PW8oKTtyZXR1cm4gdC5pZD1lLmlkPz9uZXcgVWludDhBcnJheSx0fX19LDQ5MzEyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkdycGNXZWJFcnJvcj10LkdycGNXZWJJbXBsPXQuU2NyZWVuc2hvcFNlcnZpY2VTbmFwU2hvcHBhYmxlRGVzYz10LlNjcmVlbnNob3BTZXJ2aWNlU2hvcHBhYmlsaXR5VmVyc2lvbkRlc2M9dC5TY3JlZW5zaG9wU2VydmljZVNob3BwYWJsZURlc2M9dC5TY3JlZW5zaG9wU2VydmljZVNob3djYXNlRGVzYz10LlNjcmVlbnNob3BTZXJ2aWNlRGVzYz10LlNjcmVlbnNob3BTZXJ2aWNlQ2xpZW50SW1wbD10LlNjcmVlbnNob3BTaG93Y2FzZUNvbnRleHRXaXRoQm91bmRpbmdQb2x5PXQuTm9ybWFsaXplZEJvdW5kaW5nUG9seT10Lk5vcm1hbGl6ZWRWZXJ0ZXg9dC5UcmVhdG1lbnRUb1Nob3BwYWJpbGl0eT10LlNob3BwYWJpbGl0eUluZGljYXRvcj10LlNuYXBTaG9wcGFibGVSZXNwb25zZT10LkRlY3J5cHRpb25LZXk9dC5TbmFwSm9pbmVyVmlkZW9EYXRhPXQuU25hcEpvaW5lckltYWdlRGF0YT10LlNuYXBTaG9wcGFibGVSZXF1ZXN0PXQuU2hvcHBhYmlsaXR5VmVyc2lvblJlc3BvbnNlPXQuU2hvcHBhYmlsaXR5VmVyc2lvblJlcXVlc3Q9dC5TaG9wcGFibGVSZXNwb25zZT10LlNob3BwYWJsZUNhdGVnb3JpZXNSZXNwb25zZT10LlNob3BwYWJsZVJlcXVlc3Q9dC5TaG93Y2FzZVJlc3BvbnNlPXQuU2hvd2Nhc2VDT0ZDb25maWc9dC5TaG93Y2FzZUNvbnRleHQ9dC5TaG93Y2FzZVJlcXVlc3Q9dC5TbmFwTWVkaWFUeXBlPXQuU25hcFN0b3J5VHlwZT10LkNvbG9yPXQuUGF0dGVybj10LlByb2R1Y3RDYXRlZ29yeT12b2lkIDA7Y29uc3QgaT1uKDMzMDM3KSxvPW4oODIwODQpLGE9big1MTEzOSkscz1yKG4oNjIxMDApKTtmdW5jdGlvbiBjKCl7cmV0dXJue2J5dGVzOm5ldyBVaW50OEFycmF5LGJvdW5kaW5nQm94ZXM6W10sbXVsdGlwbGVJdGVtczpbXX19ZnVuY3Rpb24gbCgpe3JldHVybntieXRlczpuZXcgVWludDhBcnJheSxib3VuZGluZ0JveDp2b2lkIDB9fXZhciB1LGQsZixwLG07KG09dC5Qcm9kdWN0Q2F0ZWdvcnl8fCh0LlByb2R1Y3RDYXRlZ29yeT17fSkpW20uUFJPRFVDVF9DQVRFR09SWV9VTlNFVD0wXT1cIlBST0RVQ1RfQ0FURUdPUllfVU5TRVRcIixtW20uUFJPRFVDVF9DQVRFR09SWV9UT1A9MV09XCJQUk9EVUNUX0NBVEVHT1JZX1RPUFwiLG1bbS5QUk9EVUNUX0NBVEVHT1JZX1NLSVJUPTJdPVwiUFJPRFVDVF9DQVRFR09SWV9TS0lSVFwiLG1bbS5QUk9EVUNUX0NBVEVHT1JZX1BBTlRTPTNdPVwiUFJPRFVDVF9DQVRFR09SWV9QQU5UU1wiLG1bbS5QUk9EVUNUX0NBVEVHT1JZX0RSRVNTPTRdPVwiUFJPRFVDVF9DQVRFR09SWV9EUkVTU1wiLG1bbS5QUk9EVUNUX0NBVEVHT1JZX1NIT1JUUz01XT1cIlBST0RVQ1RfQ0FURUdPUllfU0hPUlRTXCIsbVttLlBST0RVQ1RfQ0FURUdPUllfT1VURVJXRUFSPTZdPVwiUFJPRFVDVF9DQVRFR09SWV9PVVRFUldFQVJcIixtW20uUFJPRFVDVF9DQVRFR09SWV9KVU1QU1VJVD03XT1cIlBST0RVQ1RfQ0FURUdPUllfSlVNUFNVSVRcIixtW20uVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLChwPXQuUGF0dGVybnx8KHQuUGF0dGVybj17fSkpW3AuUEFUVEVSTl9VTlNFVD0wXT1cIlBBVFRFUk5fVU5TRVRcIixwW3AuUEFUVEVSTl9QTEFJRD0xXT1cIlBBVFRFUk5fUExBSURcIixwW3AuUEFUVEVSTl9MT0dPPTJdPVwiUEFUVEVSTl9MT0dPXCIscFtwLlBBVFRFUk5fU1RSSVBFPTNdPVwiUEFUVEVSTl9TVFJJUEVcIixwW3AuUEFUVEVSTl9QTEFJTj00XT1cIlBBVFRFUk5fUExBSU5cIixwW3AuUEFUVEVSTl9GTE9SQUw9NV09XCJQQVRURVJOX0ZMT1JBTFwiLHBbcC5QQVRURVJOX1RJRV9EWUU9Nl09XCJQQVRURVJOX1RJRV9EWUVcIixwW3AuUEFUVEVSTl9MRU9QQVJEPTddPVwiUEFUVEVSTl9MRU9QQVJEXCIscFtwLlBBVFRFUk5fRkxPV0VSPThdPVwiUEFUVEVSTl9GTE9XRVJcIixwW3AuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLChmPXQuQ29sb3J8fCh0LkNvbG9yPXt9KSlbZi5DT0xPUl9VTlNFVD0wXT1cIkNPTE9SX1VOU0VUXCIsZltmLkNPTE9SX0JMQUNLPTFdPVwiQ09MT1JfQkxBQ0tcIixmW2YuQ09MT1JfV0hJVEU9Ml09XCJDT0xPUl9XSElURVwiLGZbZi5DT0xPUl9CTFVFPTNdPVwiQ09MT1JfQkxVRVwiLGZbZi5DT0xPUl9SRUQ9NF09XCJDT0xPUl9SRURcIixmW2YuQ09MT1JfUElOSz01XT1cIkNPTE9SX1BJTktcIixmW2YuQ09MT1JfR09MRD02XT1cIkNPTE9SX0dPTERcIixmW2YuQ09MT1JfR1JFRU49N109XCJDT0xPUl9HUkVFTlwiLGZbZi5DT0xPUl9ZRUxMT1c9OF09XCJDT0xPUl9ZRUxMT1dcIixmW2YuQ09MT1JfR1JFWT05XT1cIkNPTE9SX0dSRVlcIixmW2YuQ09MT1JfQlVSR1VORFk9MTBdPVwiQ09MT1JfQlVSR1VORFlcIixmW2YuQ09MT1JfT1JBTkdFPTExXT1cIkNPTE9SX09SQU5HRVwiLGZbZi5DT0xPUl9QVVJQTEU9MTJdPVwiQ09MT1JfUFVSUExFXCIsZltmLkNPTE9SX01FVEFMTElDPTEzXT1cIkNPTE9SX01FVEFMTElDXCIsZltmLkNPTE9SX0tIQUtJPTE0XT1cIkNPTE9SX0tIQUtJXCIsZltmLkNPTE9SX0JST1dOPTE1XT1cIkNPTE9SX0JST1dOXCIsZltmLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwoZD10LlNuYXBTdG9yeVR5cGV8fCh0LlNuYXBTdG9yeVR5cGU9e30pKVtkLlNUT1JZX1RZUEVfVU5TRVQ9MF09XCJTVE9SWV9UWVBFX1VOU0VUXCIsZFtkLlNUT1JZX1RZUEVfU05BUFBSTz0xXT1cIlNUT1JZX1RZUEVfU05BUFBST1wiLGRbZC5TVE9SWV9UWVBFX01ZUFVCTElDPTJdPVwiU1RPUllfVFlQRV9NWVBVQkxJQ1wiLGRbZC5TVE9SWV9UWVBFX1NQT1RMSUdIVD0zXT1cIlNUT1JZX1RZUEVfU1BPVExJR0hUXCIsZFtkLlNUT1JZX1RZUEVfT1VSPTRdPVwiU1RPUllfVFlQRV9PVVJcIixkW2QuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLCh1PXQuU25hcE1lZGlhVHlwZXx8KHQuU25hcE1lZGlhVHlwZT17fSkpW3UuTUVESUFfVFlQRV9VTlNFVD0wXT1cIk1FRElBX1RZUEVfVU5TRVRcIix1W3UuTUVESUFfVFlQRV9JTUFHRT0xXT1cIk1FRElBX1RZUEVfSU1BR0VcIix1W3UuTUVESUFfVFlQRV9WSURFTz0yXT1cIk1FRElBX1RZUEVfVklERU9cIix1W3UuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLHQuU2hvd2Nhc2VSZXF1ZXN0PXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUucmVxSWQmJm4udWludDMyKDEwKS5zdHJpbmcoZS5yZXFJZCksXCJpbWFnZUJ5dGVzXCI9PT1lLmltYWdlPy4kY2FzZSYmbi51aW50MzIoMTgpLmJ5dGVzKGUuaW1hZ2UuaW1hZ2VCeXRlcyksXCJzbmFwSWRcIj09PWUuaW1hZ2U/LiRjYXNlJiZuLnVpbnQzMig0Mikuc3RyaW5nKGUuaW1hZ2Uuc25hcElkKSxcImltYWdlVXJsXCI9PT1lLmltYWdlPy4kY2FzZSYmbi51aW50MzIoNTApLnN0cmluZyhlLmltYWdlLmltYWdlVXJsKSwhMD09PWUucmV0dXJuQm91bmRpbmdCb3hlcyYmbi51aW50MzIoMjQpLmJvb2woZS5yZXR1cm5Cb3VuZGluZ0JveGVzKSx2b2lkIDAhPT1lLmNvbnRleHQmJnQuU2hvd2Nhc2VDb250ZXh0LmVuY29kZShlLmNvbnRleHQsbi51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXtyZXFJZDpcIlwiLGltYWdlOnZvaWQgMCxyZXR1cm5Cb3VuZGluZ0JveGVzOiExLGNvbnRleHQ6dm9pZCAwfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5yZXFJZD1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMjpvLmltYWdlPXskY2FzZTpcImltYWdlQnl0ZXNcIixpbWFnZUJ5dGVzOnIuYnl0ZXMoKX07YnJlYWs7Y2FzZSA1Om8uaW1hZ2U9eyRjYXNlOlwic25hcElkXCIsc25hcElkOnIuc3RyaW5nKCl9O2JyZWFrO2Nhc2UgNjpvLmltYWdlPXskY2FzZTpcImltYWdlVXJsXCIsaW1hZ2VVcmw6ci5zdHJpbmcoKX07YnJlYWs7Y2FzZSAzOm8ucmV0dXJuQm91bmRpbmdCb3hlcz1yLmJvb2woKTticmVhaztjYXNlIDQ6by5jb250ZXh0PXQuU2hvd2Nhc2VDb250ZXh0LmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17cmVxSWQ6XCJcIixpbWFnZTp2b2lkIDAscmV0dXJuQm91bmRpbmdCb3hlczohMSxjb250ZXh0OnZvaWQgMH07cmV0dXJuIG4ucmVxSWQ9ZS5yZXFJZD8/XCJcIixcImltYWdlQnl0ZXNcIj09PWUuaW1hZ2U/LiRjYXNlJiZ2b2lkIDAhPT1lLmltYWdlPy5pbWFnZUJ5dGVzJiZudWxsIT09ZS5pbWFnZT8uaW1hZ2VCeXRlcyYmKG4uaW1hZ2U9eyRjYXNlOlwiaW1hZ2VCeXRlc1wiLGltYWdlQnl0ZXM6ZS5pbWFnZS5pbWFnZUJ5dGVzfSksXCJzbmFwSWRcIj09PWUuaW1hZ2U/LiRjYXNlJiZ2b2lkIDAhPT1lLmltYWdlPy5zbmFwSWQmJm51bGwhPT1lLmltYWdlPy5zbmFwSWQmJihuLmltYWdlPXskY2FzZTpcInNuYXBJZFwiLHNuYXBJZDplLmltYWdlLnNuYXBJZH0pLFwiaW1hZ2VVcmxcIj09PWUuaW1hZ2U/LiRjYXNlJiZ2b2lkIDAhPT1lLmltYWdlPy5pbWFnZVVybCYmbnVsbCE9PWUuaW1hZ2U/LmltYWdlVXJsJiYobi5pbWFnZT17JGNhc2U6XCJpbWFnZVVybFwiLGltYWdlVXJsOmUuaW1hZ2UuaW1hZ2VVcmx9KSxuLnJldHVybkJvdW5kaW5nQm94ZXM9ZS5yZXR1cm5Cb3VuZGluZ0JveGVzPz8hMSxuLmNvbnRleHQ9dm9pZCAwIT09ZS5jb250ZXh0JiZudWxsIT09ZS5jb250ZXh0P3QuU2hvd2Nhc2VDb250ZXh0LmZyb21QYXJ0aWFsKGUuY29udGV4dCk6dm9pZCAwLG59fSx0LlNob3djYXNlQ29udGV4dD17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO2Zvcihjb25zdCByIG9mIGUuZXhwZXJpbWVudHMpdC5TaG93Y2FzZUNPRkNvbmZpZy5lbmNvZGUocixuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXtleHBlcmltZW50czpbXX07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO2U+Pj4zPT0xP28uZXhwZXJpbWVudHMucHVzaCh0LlNob3djYXNlQ09GQ29uZmlnLmRlY29kZShyLHIudWludDMyKCkpKTpyLnNraXBUeXBlKDcmZSl9cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e2V4cGVyaW1lbnRzOltdfTtyZXR1cm4gbi5leHBlcmltZW50cz1lLmV4cGVyaW1lbnRzPy5tYXAoKGU9PnQuU2hvd2Nhc2VDT0ZDb25maWcuZnJvbVBhcnRpYWwoZSkpKXx8W10sbn19LHQuU2hvd2Nhc2VDT0ZDb25maWc9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5uYW1lJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUubmFtZSksdm9pZCAwIT09ZS52YWx1ZSYmYS5WYWx1ZS5lbmNvZGUoZS52YWx1ZSx0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e25hbWU6XCJcIix2YWx1ZTp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLm5hbWU9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS52YWx1ZT1hLlZhbHVlLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17bmFtZTpcIlwiLHZhbHVlOnZvaWQgMH07cmV0dXJuIHQubmFtZT1lLm5hbWU/P1wiXCIsdC52YWx1ZT12b2lkIDAhPT1lLnZhbHVlJiZudWxsIT09ZS52YWx1ZT9hLlZhbHVlLmZyb21QYXJ0aWFsKGUudmFsdWUpOnZvaWQgMCx0fX0sdC5TaG93Y2FzZVJlc3BvbnNlPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7MCE9PWUuYnl0ZXMubGVuZ3RoJiZuLnVpbnQzMigxMCkuYnl0ZXMoZS5ieXRlcyk7Zm9yKGNvbnN0IHIgb2YgZS5ib3VuZGluZ0JveGVzKXQuTm9ybWFsaXplZEJvdW5kaW5nUG9seS5lbmNvZGUocixuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKTtmb3IoY29uc3QgciBvZiBlLm11bHRpcGxlSXRlbXMpdC5TY3JlZW5zaG9wU2hvd2Nhc2VDb250ZXh0V2l0aEJvdW5kaW5nUG9seS5lbmNvZGUocixuLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPWMoKTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5ieXRlcz1yLmJ5dGVzKCk7YnJlYWs7Y2FzZSAyOm8uYm91bmRpbmdCb3hlcy5wdXNoKHQuTm9ybWFsaXplZEJvdW5kaW5nUG9seS5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAzOm8ubXVsdGlwbGVJdGVtcy5wdXNoKHQuU2NyZWVuc2hvcFNob3djYXNlQ29udGV4dFdpdGhCb3VuZGluZ1BvbHkuZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj1jKCk7cmV0dXJuIG4uYnl0ZXM9ZS5ieXRlcz8/bmV3IFVpbnQ4QXJyYXksbi5ib3VuZGluZ0JveGVzPWUuYm91bmRpbmdCb3hlcz8ubWFwKChlPT50Lk5vcm1hbGl6ZWRCb3VuZGluZ1BvbHkuZnJvbVBhcnRpYWwoZSkpKXx8W10sbi5tdWx0aXBsZUl0ZW1zPWUubXVsdGlwbGVJdGVtcz8ubWFwKChlPT50LlNjcmVlbnNob3BTaG93Y2FzZUNvbnRleHRXaXRoQm91bmRpbmdQb2x5LmZyb21QYXJ0aWFsKGUpKSl8fFtdLG59fSx0LlNob3BwYWJsZVJlcXVlc3Q9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtcIlwiIT09ZS5yZXFJZCYmdC51aW50MzIoMTApLnN0cmluZyhlLnJlcUlkKTtmb3IoY29uc3QgbiBvZiBlLmltYWdlcyl0LnVpbnQzMigxOCkuYnl0ZXMobik7cmV0dXJuIDAhPT1lLnNob3BwYWJpbGl0eVZlcnNpb24mJnQudWludDMyKDI0KS51aW50MzIoZS5zaG9wcGFiaWxpdHlWZXJzaW9uKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3JlcUlkOlwiXCIsaW1hZ2VzOltdLHNob3BwYWJpbGl0eVZlcnNpb246MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkucmVxSWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS5pbWFnZXMucHVzaChuLmJ5dGVzKCkpO2JyZWFrO2Nhc2UgMzppLnNob3BwYWJpbGl0eVZlcnNpb249bi51aW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3JlcUlkOlwiXCIsaW1hZ2VzOltdLHNob3BwYWJpbGl0eVZlcnNpb246MH07cmV0dXJuIHQucmVxSWQ9ZS5yZXFJZD8/XCJcIix0LmltYWdlcz1lLmltYWdlcz8ubWFwKChlPT5lKSl8fFtdLHQuc2hvcHBhYmlsaXR5VmVyc2lvbj1lLnNob3BwYWJpbGl0eVZlcnNpb24/PzAsdH19LHQuU2hvcHBhYmxlQ2F0ZWdvcmllc1Jlc3BvbnNlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7ITA9PT1lLmlzU2hvcHBhYmxlJiZ0LnVpbnQzMig4KS5ib29sKGUuaXNTaG9wcGFibGUpLHQudWludDMyKDE4KS5mb3JrKCk7Zm9yKGNvbnN0IG4gb2YgZS5jYXRlZ29yaWVzKXQudWludDMyKG4pO3QubGRlbGltKCksdC51aW50MzIoMjYpLmZvcmsoKTtmb3IoY29uc3QgbiBvZiBlLnBhdHRlcm5zKXQudWludDMyKG4pO3QubGRlbGltKCksdC51aW50MzIoMzQpLmZvcmsoKTtmb3IoY29uc3QgbiBvZiBlLmNvbG9ycyl0LnVpbnQzMihuKTtyZXR1cm4gdC5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2lzU2hvcHBhYmxlOiExLGNhdGVnb3JpZXM6W10scGF0dGVybnM6W10sY29sb3JzOltdfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5pc1Nob3BwYWJsZT1uLmJvb2woKTticmVhaztjYXNlIDI6aWYoMj09KDcmZSkpe2NvbnN0IGU9bi51aW50MzIoKStuLnBvcztmb3IoO24ucG9zPGU7KWkuY2F0ZWdvcmllcy5wdXNoKG4udWludDMyKCkpfWVsc2UgaS5jYXRlZ29yaWVzLnB1c2gobi51aW50MzIoKSk7YnJlYWs7Y2FzZSAzOmlmKDI9PSg3JmUpKXtjb25zdCBlPW4udWludDMyKCkrbi5wb3M7Zm9yKDtuLnBvczxlOylpLnBhdHRlcm5zLnB1c2gobi51aW50MzIoKSl9ZWxzZSBpLnBhdHRlcm5zLnB1c2gobi51aW50MzIoKSk7YnJlYWs7Y2FzZSA0OmlmKDI9PSg3JmUpKXtjb25zdCBlPW4udWludDMyKCkrbi5wb3M7Zm9yKDtuLnBvczxlOylpLmNvbG9ycy5wdXNoKG4udWludDMyKCkpfWVsc2UgaS5jb2xvcnMucHVzaChuLnVpbnQzMigpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2lzU2hvcHBhYmxlOiExLGNhdGVnb3JpZXM6W10scGF0dGVybnM6W10sY29sb3JzOltdfTtyZXR1cm4gdC5pc1Nob3BwYWJsZT1lLmlzU2hvcHBhYmxlPz8hMSx0LmNhdGVnb3JpZXM9ZS5jYXRlZ29yaWVzPy5tYXAoKGU9PmUpKXx8W10sdC5wYXR0ZXJucz1lLnBhdHRlcm5zPy5tYXAoKGU9PmUpKXx8W10sdC5jb2xvcnM9ZS5jb2xvcnM/Lm1hcCgoZT0+ZSkpfHxbXSx0fX0sdC5TaG9wcGFibGVSZXNwb25zZT17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO24udWludDMyKDEwKS5mb3JrKCk7Zm9yKGNvbnN0IHQgb2YgZS5pc1Nob3BwYWJsZSluLmJvb2wodCk7bi5sZGVsaW0oKTtmb3IoY29uc3QgciBvZiBlLnNob3BwYWJsZUNhdGVnb3JpZXNSZXNwb25zZXMpdC5TaG9wcGFibGVDYXRlZ29yaWVzUmVzcG9uc2UuZW5jb2RlKHIsbi51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17aXNTaG9wcGFibGU6W10sc2hvcHBhYmxlQ2F0ZWdvcmllc1Jlc3BvbnNlczpbXX07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmlmKDI9PSg3JmUpKXtjb25zdCBlPXIudWludDMyKCkrci5wb3M7Zm9yKDtyLnBvczxlOylvLmlzU2hvcHBhYmxlLnB1c2goci5ib29sKCkpfWVsc2Ugby5pc1Nob3BwYWJsZS5wdXNoKHIuYm9vbCgpKTticmVhaztjYXNlIDI6by5zaG9wcGFibGVDYXRlZ29yaWVzUmVzcG9uc2VzLnB1c2godC5TaG9wcGFibGVDYXRlZ29yaWVzUmVzcG9uc2UuZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17aXNTaG9wcGFibGU6W10sc2hvcHBhYmxlQ2F0ZWdvcmllc1Jlc3BvbnNlczpbXX07cmV0dXJuIG4uaXNTaG9wcGFibGU9ZS5pc1Nob3BwYWJsZT8ubWFwKChlPT5lKSl8fFtdLG4uc2hvcHBhYmxlQ2F0ZWdvcmllc1Jlc3BvbnNlcz1lLnNob3BwYWJsZUNhdGVnb3JpZXNSZXNwb25zZXM/Lm1hcCgoZT0+dC5TaG9wcGFibGVDYXRlZ29yaWVzUmVzcG9uc2UuZnJvbVBhcnRpYWwoZSkpKXx8W10sbn19LHQuU2hvcHBhYmlsaXR5VmVyc2lvblJlcXVlc3Q9e2VuY29kZShlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCl9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO24uc2tpcFR5cGUoNyZlKX1yZXR1cm57fX0sZnJvbVBhcnRpYWw6ZT0+KHt9KX0sdC5TaG9wcGFiaWxpdHlWZXJzaW9uUmVzcG9uc2U9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUudmVyc2lvbiYmdC51aW50MzIoOCkudWludDMyKGUudmVyc2lvbiksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXt2ZXJzaW9uOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLnZlcnNpb249bi51aW50MzIoKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3ZlcnNpb246MH07cmV0dXJuIHQudmVyc2lvbj1lLnZlcnNpb24/PzAsdH19LHQuU25hcFNob3BwYWJsZVJlcXVlc3Q9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5pbWFnZVVybCYmbi51aW50MzIoMTApLnN0cmluZyhlLmltYWdlVXJsKSxcIlwiIT09ZS5zbmFwSWQmJm4udWludDMyKDE4KS5zdHJpbmcoZS5zbmFwSWQpLFwiaW1hZ2VcIj09PWUubWVkaWFVcmw/LiRjYXNlJiZuLnVpbnQzMigyNikuc3RyaW5nKGUubWVkaWFVcmwuaW1hZ2UpLFwidmlkZW9EYXRhXCI9PT1lLm1lZGlhVXJsPy4kY2FzZSYmdC5TbmFwSm9pbmVyVmlkZW9EYXRhLmVuY29kZShlLm1lZGlhVXJsLnZpZGVvRGF0YSxuLnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKSxcImltYWdlRGF0YVwiPT09ZS5tZWRpYVVybD8uJGNhc2UmJnQuU25hcEpvaW5lckltYWdlRGF0YS5lbmNvZGUoZS5tZWRpYVVybC5pbWFnZURhdGEsbi51aW50MzIoNTApLmZvcmsoKSkubGRlbGltKCksMCE9PWUuc25hcFN0b3J5VHlwZSYmbi51aW50MzIoNTYpLmludDMyKGUuc25hcFN0b3J5VHlwZSksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXtpbWFnZVVybDpcIlwiLHNuYXBJZDpcIlwiLG1lZGlhVXJsOnZvaWQgMCxzbmFwU3RvcnlUeXBlOjB9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLmltYWdlVXJsPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOm8uc25hcElkPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOm8ubWVkaWFVcmw9eyRjYXNlOlwiaW1hZ2VcIixpbWFnZTpyLnN0cmluZygpfTticmVhaztjYXNlIDU6by5tZWRpYVVybD17JGNhc2U6XCJ2aWRlb0RhdGFcIix2aWRlb0RhdGE6dC5TbmFwSm9pbmVyVmlkZW9EYXRhLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDY6by5tZWRpYVVybD17JGNhc2U6XCJpbWFnZURhdGFcIixpbWFnZURhdGE6dC5TbmFwSm9pbmVySW1hZ2VEYXRhLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDc6by5zbmFwU3RvcnlUeXBlPXIuaW50MzIoKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e2ltYWdlVXJsOlwiXCIsc25hcElkOlwiXCIsbWVkaWFVcmw6dm9pZCAwLHNuYXBTdG9yeVR5cGU6MH07cmV0dXJuIG4uaW1hZ2VVcmw9ZS5pbWFnZVVybD8/XCJcIixuLnNuYXBJZD1lLnNuYXBJZD8/XCJcIixcImltYWdlXCI9PT1lLm1lZGlhVXJsPy4kY2FzZSYmdm9pZCAwIT09ZS5tZWRpYVVybD8uaW1hZ2UmJm51bGwhPT1lLm1lZGlhVXJsPy5pbWFnZSYmKG4ubWVkaWFVcmw9eyRjYXNlOlwiaW1hZ2VcIixpbWFnZTplLm1lZGlhVXJsLmltYWdlfSksXCJ2aWRlb0RhdGFcIj09PWUubWVkaWFVcmw/LiRjYXNlJiZ2b2lkIDAhPT1lLm1lZGlhVXJsPy52aWRlb0RhdGEmJm51bGwhPT1lLm1lZGlhVXJsPy52aWRlb0RhdGEmJihuLm1lZGlhVXJsPXskY2FzZTpcInZpZGVvRGF0YVwiLHZpZGVvRGF0YTp0LlNuYXBKb2luZXJWaWRlb0RhdGEuZnJvbVBhcnRpYWwoZS5tZWRpYVVybC52aWRlb0RhdGEpfSksXCJpbWFnZURhdGFcIj09PWUubWVkaWFVcmw/LiRjYXNlJiZ2b2lkIDAhPT1lLm1lZGlhVXJsPy5pbWFnZURhdGEmJm51bGwhPT1lLm1lZGlhVXJsPy5pbWFnZURhdGEmJihuLm1lZGlhVXJsPXskY2FzZTpcImltYWdlRGF0YVwiLGltYWdlRGF0YTp0LlNuYXBKb2luZXJJbWFnZURhdGEuZnJvbVBhcnRpYWwoZS5tZWRpYVVybC5pbWFnZURhdGEpfSksbi5zbmFwU3RvcnlUeXBlPWUuc25hcFN0b3J5VHlwZT8/MCxufX0sdC5TbmFwSm9pbmVySW1hZ2VEYXRhPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUuaW1hZ2VVcmwmJm4udWludDMyKDEwKS5zdHJpbmcoZS5pbWFnZVVybCksdm9pZCAwIT09ZS5kZWNyeXB0aW9uS2V5JiZ0LkRlY3J5cHRpb25LZXkuZW5jb2RlKGUuZGVjcnlwdGlvbktleSxuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89e2ltYWdlVXJsOlwiXCIsZGVjcnlwdGlvbktleTp2b2lkIDB9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLmltYWdlVXJsPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOm8uZGVjcnlwdGlvbktleT10LkRlY3J5cHRpb25LZXkuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtpbWFnZVVybDpcIlwiLGRlY3J5cHRpb25LZXk6dm9pZCAwfTtyZXR1cm4gbi5pbWFnZVVybD1lLmltYWdlVXJsPz9cIlwiLG4uZGVjcnlwdGlvbktleT12b2lkIDAhPT1lLmRlY3J5cHRpb25LZXkmJm51bGwhPT1lLmRlY3J5cHRpb25LZXk/dC5EZWNyeXB0aW9uS2V5LmZyb21QYXJ0aWFsKGUuZGVjcnlwdGlvbktleSk6dm9pZCAwLG59fSx0LlNuYXBKb2luZXJWaWRlb0RhdGE9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgdCBvZiBlLmZyYW1lVXJscyluLnVpbnQzMigxMCkuc3RyaW5nKHQpO3JldHVyblwiXCIhPT1lLnZpZGVvVXJsJiZuLnVpbnQzMigxOCkuc3RyaW5nKGUudmlkZW9VcmwpLHZvaWQgMCE9PWUuZGVjcnlwdGlvbktleSYmdC5EZWNyeXB0aW9uS2V5LmVuY29kZShlLmRlY3J5cHRpb25LZXksbi51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXtmcmFtZVVybHM6W10sdmlkZW9Vcmw6XCJcIixkZWNyeXB0aW9uS2V5OnZvaWQgMH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8uZnJhbWVVcmxzLnB1c2goci5zdHJpbmcoKSk7YnJlYWs7Y2FzZSAyOm8udmlkZW9Vcmw9ci5zdHJpbmcoKTticmVhaztjYXNlIDM6by5kZWNyeXB0aW9uS2V5PXQuRGVjcnlwdGlvbktleS5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e2ZyYW1lVXJsczpbXSx2aWRlb1VybDpcIlwiLGRlY3J5cHRpb25LZXk6dm9pZCAwfTtyZXR1cm4gbi5mcmFtZVVybHM9ZS5mcmFtZVVybHM/Lm1hcCgoZT0+ZSkpfHxbXSxuLnZpZGVvVXJsPWUudmlkZW9Vcmw/P1wiXCIsbi5kZWNyeXB0aW9uS2V5PXZvaWQgMCE9PWUuZGVjcnlwdGlvbktleSYmbnVsbCE9PWUuZGVjcnlwdGlvbktleT90LkRlY3J5cHRpb25LZXkuZnJvbVBhcnRpYWwoZS5kZWNyeXB0aW9uS2V5KTp2b2lkIDAsbn19LHQuRGVjcnlwdGlvbktleT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmtleSYmdC51aW50MzIoMTApLnN0cmluZyhlLmtleSksXCJcIiE9PWUuaXYmJnQudWludDMyKDE4KS5zdHJpbmcoZS5pdiksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtrZXk6XCJcIixpdjpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5rZXk9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS5pdj1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17a2V5OlwiXCIsaXY6XCJcIn07cmV0dXJuIHQua2V5PWUua2V5Pz9cIlwiLHQuaXY9ZS5pdj8/XCJcIix0fX0sdC5TbmFwU2hvcHBhYmxlUmVzcG9uc2U9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5zaG9wcGFiaWxpdHlJbmRpY2F0b3ImJnQuU2hvcHBhYmlsaXR5SW5kaWNhdG9yLmVuY29kZShlLnNob3BwYWJpbGl0eUluZGljYXRvcixuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS5zbmFwTWVkaWFUeXBlJiZuLnVpbnQzMigxNikuaW50MzIoZS5zbmFwTWVkaWFUeXBlKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89e3Nob3BwYWJpbGl0eUluZGljYXRvcjp2b2lkIDAsc25hcE1lZGlhVHlwZTowfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5zaG9wcGFiaWxpdHlJbmRpY2F0b3I9dC5TaG9wcGFiaWxpdHlJbmRpY2F0b3IuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOm8uc25hcE1lZGlhVHlwZT1yLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtzaG9wcGFiaWxpdHlJbmRpY2F0b3I6dm9pZCAwLHNuYXBNZWRpYVR5cGU6MH07cmV0dXJuIG4uc2hvcHBhYmlsaXR5SW5kaWNhdG9yPXZvaWQgMCE9PWUuc2hvcHBhYmlsaXR5SW5kaWNhdG9yJiZudWxsIT09ZS5zaG9wcGFiaWxpdHlJbmRpY2F0b3I/dC5TaG9wcGFiaWxpdHlJbmRpY2F0b3IuZnJvbVBhcnRpYWwoZS5zaG9wcGFiaWxpdHlJbmRpY2F0b3IpOnZvaWQgMCxuLnNuYXBNZWRpYVR5cGU9ZS5zbmFwTWVkaWFUeXBlPz8wLG59fSx0LlNob3BwYWJpbGl0eUluZGljYXRvcj17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO2Zvcihjb25zdCByIG9mIGUudHJlYXRtZW50VG9TaG9wcGFiaWxpdHkpdC5UcmVhdG1lbnRUb1Nob3BwYWJpbGl0eS5lbmNvZGUocixuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTshMD09PWUuZGVmYXVsdFNob3BwYWJpbGl0eSYmbi51aW50MzIoMTYpLmJvb2woZS5kZWZhdWx0U2hvcHBhYmlsaXR5KTtmb3IoY29uc3QgdCBvZiBlLmRlZmF1bHRTaG9wcGFibGVGcmFtZXMpbi51aW50MzIoMjYpLnN0cmluZyh0KTswIT09ZS5zbmFwTWVkaWFUeXBlJiZuLnVpbnQzMigzMikuaW50MzIoZS5zbmFwTWVkaWFUeXBlKTtmb3IoY29uc3QgdCBvZiBlLmJvbHREZWZhdWx0U2hvcHBhYmxlRnJhbWVzKW4udWludDMyKDQyKS5zdHJpbmcodCk7cmV0dXJuIG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17dHJlYXRtZW50VG9TaG9wcGFiaWxpdHk6W10sZGVmYXVsdFNob3BwYWJpbGl0eTohMSxkZWZhdWx0U2hvcHBhYmxlRnJhbWVzOltdLHNuYXBNZWRpYVR5cGU6MCxib2x0RGVmYXVsdFNob3BwYWJsZUZyYW1lczpbXX07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8udHJlYXRtZW50VG9TaG9wcGFiaWxpdHkucHVzaCh0LlRyZWF0bWVudFRvU2hvcHBhYmlsaXR5LmRlY29kZShyLHIudWludDMyKCkpKTticmVhaztjYXNlIDI6by5kZWZhdWx0U2hvcHBhYmlsaXR5PXIuYm9vbCgpO2JyZWFrO2Nhc2UgMzpvLmRlZmF1bHRTaG9wcGFibGVGcmFtZXMucHVzaChyLnN0cmluZygpKTticmVhaztjYXNlIDQ6by5zbmFwTWVkaWFUeXBlPXIuaW50MzIoKTticmVhaztjYXNlIDU6by5ib2x0RGVmYXVsdFNob3BwYWJsZUZyYW1lcy5wdXNoKHIuc3RyaW5nKCkpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17dHJlYXRtZW50VG9TaG9wcGFiaWxpdHk6W10sZGVmYXVsdFNob3BwYWJpbGl0eTohMSxkZWZhdWx0U2hvcHBhYmxlRnJhbWVzOltdLHNuYXBNZWRpYVR5cGU6MCxib2x0RGVmYXVsdFNob3BwYWJsZUZyYW1lczpbXX07cmV0dXJuIG4udHJlYXRtZW50VG9TaG9wcGFiaWxpdHk9ZS50cmVhdG1lbnRUb1Nob3BwYWJpbGl0eT8ubWFwKChlPT50LlRyZWF0bWVudFRvU2hvcHBhYmlsaXR5LmZyb21QYXJ0aWFsKGUpKSl8fFtdLG4uZGVmYXVsdFNob3BwYWJpbGl0eT1lLmRlZmF1bHRTaG9wcGFiaWxpdHk/PyExLG4uZGVmYXVsdFNob3BwYWJsZUZyYW1lcz1lLmRlZmF1bHRTaG9wcGFibGVGcmFtZXM/Lm1hcCgoZT0+ZSkpfHxbXSxuLnNuYXBNZWRpYVR5cGU9ZS5zbmFwTWVkaWFUeXBlPz8wLG4uYm9sdERlZmF1bHRTaG9wcGFibGVGcmFtZXM9ZS5ib2x0RGVmYXVsdFNob3BwYWJsZUZyYW1lcz8ubWFwKChlPT5lKSl8fFtdLG59fSx0LlRyZWF0bWVudFRvU2hvcHBhYmlsaXR5PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7XCJcIiE9PWUudHJlYXRtZW50SWQmJnQudWludDMyKDEwKS5zdHJpbmcoZS50cmVhdG1lbnRJZCksITA9PT1lLnNob3BwYWJpbGl0eSYmdC51aW50MzIoMTYpLmJvb2woZS5zaG9wcGFiaWxpdHkpO2Zvcihjb25zdCBuIG9mIGUuc2hvcHBhYmxlRnJhbWVzKXQudWludDMyKDI2KS5zdHJpbmcobik7Zm9yKGNvbnN0IG4gb2YgZS5ib2x0U2hvcHBhYmxlRnJhbWVzKXQudWludDMyKDM0KS5zdHJpbmcobik7cmV0dXJuIHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17dHJlYXRtZW50SWQ6XCJcIixzaG9wcGFiaWxpdHk6ITEsc2hvcHBhYmxlRnJhbWVzOltdLGJvbHRTaG9wcGFibGVGcmFtZXM6W119O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnRyZWF0bWVudElkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkuc2hvcHBhYmlsaXR5PW4uYm9vbCgpO2JyZWFrO2Nhc2UgMzppLnNob3BwYWJsZUZyYW1lcy5wdXNoKG4uc3RyaW5nKCkpO2JyZWFrO2Nhc2UgNDppLmJvbHRTaG9wcGFibGVGcmFtZXMucHVzaChuLnN0cmluZygpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3RyZWF0bWVudElkOlwiXCIsc2hvcHBhYmlsaXR5OiExLHNob3BwYWJsZUZyYW1lczpbXSxib2x0U2hvcHBhYmxlRnJhbWVzOltdfTtyZXR1cm4gdC50cmVhdG1lbnRJZD1lLnRyZWF0bWVudElkPz9cIlwiLHQuc2hvcHBhYmlsaXR5PWUuc2hvcHBhYmlsaXR5Pz8hMSx0LnNob3BwYWJsZUZyYW1lcz1lLnNob3BwYWJsZUZyYW1lcz8ubWFwKChlPT5lKSl8fFtdLHQuYm9sdFNob3BwYWJsZUZyYW1lcz1lLmJvbHRTaG9wcGFibGVGcmFtZXM/Lm1hcCgoZT0+ZSkpfHxbXSx0fX0sdC5Ob3JtYWxpemVkVmVydGV4PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLngmJnQudWludDMyKDEzKS5mbG9hdChlLngpLDAhPT1lLnkmJnQudWludDMyKDIxKS5mbG9hdChlLnkpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17eDowLHk6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkueD1uLmZsb2F0KCk7YnJlYWs7Y2FzZSAyOmkueT1uLmZsb2F0KCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt4OjAseTowfTtyZXR1cm4gdC54PWUueD8/MCx0Lnk9ZS55Pz8wLHR9fSx0Lk5vcm1hbGl6ZWRCb3VuZGluZ1BvbHk9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgciBvZiBlLm5vcm1hbGl6ZWRWZXJ0aWNlcyl0Lk5vcm1hbGl6ZWRWZXJ0ZXguZW5jb2RlKHIsbi51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17bm9ybWFsaXplZFZlcnRpY2VzOltdfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7ZT4+PjM9PTI/by5ub3JtYWxpemVkVmVydGljZXMucHVzaCh0Lk5vcm1hbGl6ZWRWZXJ0ZXguZGVjb2RlKHIsci51aW50MzIoKSkpOnIuc2tpcFR5cGUoNyZlKX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17bm9ybWFsaXplZFZlcnRpY2VzOltdfTtyZXR1cm4gbi5ub3JtYWxpemVkVmVydGljZXM9ZS5ub3JtYWxpemVkVmVydGljZXM/Lm1hcCgoZT0+dC5Ob3JtYWxpemVkVmVydGV4LmZyb21QYXJ0aWFsKGUpKSl8fFtdLG59fSx0LlNjcmVlbnNob3BTaG93Y2FzZUNvbnRleHRXaXRoQm91bmRpbmdQb2x5PXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLmJ5dGVzLmxlbmd0aCYmbi51aW50MzIoMTApLmJ5dGVzKGUuYnl0ZXMpLHZvaWQgMCE9PWUuYm91bmRpbmdCb3gmJnQuTm9ybWFsaXplZEJvdW5kaW5nUG9seS5lbmNvZGUoZS5ib3VuZGluZ0JveCxuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89bCgpO2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLmJ5dGVzPXIuYnl0ZXMoKTticmVhaztjYXNlIDI6by5ib3VuZGluZ0JveD10Lk5vcm1hbGl6ZWRCb3VuZGluZ1BvbHkuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPWwoKTtyZXR1cm4gbi5ieXRlcz1lLmJ5dGVzPz9uZXcgVWludDhBcnJheSxuLmJvdW5kaW5nQm94PXZvaWQgMCE9PWUuYm91bmRpbmdCb3gmJm51bGwhPT1lLmJvdW5kaW5nQm94P3QuTm9ybWFsaXplZEJvdW5kaW5nUG9seS5mcm9tUGFydGlhbChlLmJvdW5kaW5nQm94KTp2b2lkIDAsbn19LHQuU2NyZWVuc2hvcFNlcnZpY2VDbGllbnRJbXBsPWNsYXNze3JwYztjb25zdHJ1Y3RvcihlKXt0aGlzLnJwYz1lLHRoaXMuU2hvd2Nhc2U9dGhpcy5TaG93Y2FzZS5iaW5kKHRoaXMpLHRoaXMuU2hvcHBhYmxlPXRoaXMuU2hvcHBhYmxlLmJpbmQodGhpcyksdGhpcy5TaG9wcGFiaWxpdHlWZXJzaW9uPXRoaXMuU2hvcHBhYmlsaXR5VmVyc2lvbi5iaW5kKHRoaXMpLHRoaXMuU25hcFNob3BwYWJsZT10aGlzLlNuYXBTaG9wcGFibGUuYmluZCh0aGlzKX1TaG93Y2FzZShlLG4pe3JldHVybiB0aGlzLnJwYy51bmFyeSh0LlNjcmVlbnNob3BTZXJ2aWNlU2hvd2Nhc2VEZXNjLHQuU2hvd2Nhc2VSZXF1ZXN0LmZyb21QYXJ0aWFsKGUpLG4pfVNob3BwYWJsZShlLG4pe3JldHVybiB0aGlzLnJwYy51bmFyeSh0LlNjcmVlbnNob3BTZXJ2aWNlU2hvcHBhYmxlRGVzYyx0LlNob3BwYWJsZVJlcXVlc3QuZnJvbVBhcnRpYWwoZSksbil9U2hvcHBhYmlsaXR5VmVyc2lvbihlLG4pe3JldHVybiB0aGlzLnJwYy51bmFyeSh0LlNjcmVlbnNob3BTZXJ2aWNlU2hvcHBhYmlsaXR5VmVyc2lvbkRlc2MsdC5TaG9wcGFiaWxpdHlWZXJzaW9uUmVxdWVzdC5mcm9tUGFydGlhbChlKSxuKX1TbmFwU2hvcHBhYmxlKGUsbil7cmV0dXJuIHRoaXMucnBjLnVuYXJ5KHQuU2NyZWVuc2hvcFNlcnZpY2VTbmFwU2hvcHBhYmxlRGVzYyx0LlNuYXBTaG9wcGFibGVSZXF1ZXN0LmZyb21QYXJ0aWFsKGUpLG4pfX0sdC5TY3JlZW5zaG9wU2VydmljZURlc2M9e3NlcnZpY2VOYW1lOlwic25hcGNoYXQucGVyY2VwdGlvbi5zaG93Y2FzZS5zY3JlZW5zaG9wLlNjcmVlbnNob3BTZXJ2aWNlXCJ9LHQuU2NyZWVuc2hvcFNlcnZpY2VTaG93Y2FzZURlc2M9e21ldGhvZE5hbWU6XCJTaG93Y2FzZVwiLHNlcnZpY2U6dC5TY3JlZW5zaG9wU2VydmljZURlc2MscmVxdWVzdFN0cmVhbTohMSxyZXNwb25zZVN0cmVhbTohMSxyZXF1ZXN0VHlwZTp7c2VyaWFsaXplQmluYXJ5KCl7cmV0dXJuIHQuU2hvd2Nhc2VSZXF1ZXN0LmVuY29kZSh0aGlzKS5maW5pc2goKX19LHJlc3BvbnNlVHlwZTp7ZGVzZXJpYWxpemVCaW5hcnk6ZT0+KHsuLi50LlNob3djYXNlUmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fSx0LlNjcmVlbnNob3BTZXJ2aWNlU2hvcHBhYmxlRGVzYz17bWV0aG9kTmFtZTpcIlNob3BwYWJsZVwiLHNlcnZpY2U6dC5TY3JlZW5zaG9wU2VydmljZURlc2MscmVxdWVzdFN0cmVhbTohMSxyZXNwb25zZVN0cmVhbTohMSxyZXF1ZXN0VHlwZTp7c2VyaWFsaXplQmluYXJ5KCl7cmV0dXJuIHQuU2hvcHBhYmxlUmVxdWVzdC5lbmNvZGUodGhpcykuZmluaXNoKCl9fSxyZXNwb25zZVR5cGU6e2Rlc2VyaWFsaXplQmluYXJ5OmU9Pih7Li4udC5TaG9wcGFibGVSZXNwb25zZS5kZWNvZGUoZSksdG9PYmplY3QoKXtyZXR1cm4gdGhpc319KX19LHQuU2NyZWVuc2hvcFNlcnZpY2VTaG9wcGFiaWxpdHlWZXJzaW9uRGVzYz17bWV0aG9kTmFtZTpcIlNob3BwYWJpbGl0eVZlcnNpb25cIixzZXJ2aWNlOnQuU2NyZWVuc2hvcFNlcnZpY2VEZXNjLHJlcXVlc3RTdHJlYW06ITEscmVzcG9uc2VTdHJlYW06ITEscmVxdWVzdFR5cGU6e3NlcmlhbGl6ZUJpbmFyeSgpe3JldHVybiB0LlNob3BwYWJpbGl0eVZlcnNpb25SZXF1ZXN0LmVuY29kZSh0aGlzKS5maW5pc2goKX19LHJlc3BvbnNlVHlwZTp7ZGVzZXJpYWxpemVCaW5hcnk6ZT0+KHsuLi50LlNob3BwYWJpbGl0eVZlcnNpb25SZXNwb25zZS5kZWNvZGUoZSksdG9PYmplY3QoKXtyZXR1cm4gdGhpc319KX19LHQuU2NyZWVuc2hvcFNlcnZpY2VTbmFwU2hvcHBhYmxlRGVzYz17bWV0aG9kTmFtZTpcIlNuYXBTaG9wcGFibGVcIixzZXJ2aWNlOnQuU2NyZWVuc2hvcFNlcnZpY2VEZXNjLHJlcXVlc3RTdHJlYW06ITEscmVzcG9uc2VTdHJlYW06ITEscmVxdWVzdFR5cGU6e3NlcmlhbGl6ZUJpbmFyeSgpe3JldHVybiB0LlNuYXBTaG9wcGFibGVSZXF1ZXN0LmVuY29kZSh0aGlzKS5maW5pc2goKX19LHJlc3BvbnNlVHlwZTp7ZGVzZXJpYWxpemVCaW5hcnk6ZT0+KHsuLi50LlNuYXBTaG9wcGFibGVSZXNwb25zZS5kZWNvZGUoZSksdG9PYmplY3QoKXtyZXR1cm4gdGhpc319KX19LHQuR3JwY1dlYkltcGw9Y2xhc3N7aG9zdDtvcHRpb25zO2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5ob3N0PWUsdGhpcy5vcHRpb25zPXR9dW5hcnkoZSx0LG4pe2NvbnN0IHI9ey4uLnQsLi4uZS5yZXF1ZXN0VHlwZX0sYT1uJiZ0aGlzLm9wdGlvbnMubWV0YWRhdGE/bmV3IG8uQnJvd3NlckhlYWRlcnMoey4uLnRoaXMub3B0aW9ucz8ubWV0YWRhdGEuaGVhZGVyc01hcCwuLi5uPy5oZWFkZXJzTWFwfSk6bnx8dGhpcy5vcHRpb25zLm1ldGFkYXRhO3JldHVybiBuZXcgUHJvbWlzZSgoKHQsbik9PntpLmdycGMudW5hcnkoZSx7cmVxdWVzdDpyLGhvc3Q6dGhpcy5ob3N0LG1ldGFkYXRhOmEsdHJhbnNwb3J0OnRoaXMub3B0aW9ucy50cmFuc3BvcnQsZGVidWc6dGhpcy5vcHRpb25zLmRlYnVnLG9uRW5kOmZ1bmN0aW9uKGUpe2lmKGUuc3RhdHVzPT09aS5ncnBjLkNvZGUuT0spdChlLm1lc3NhZ2UpO2Vsc2V7Y29uc3QgdD1uZXcgaChlLnN0YXR1c01lc3NhZ2UsZS5zdGF0dXMsZS50cmFpbGVycyk7bih0KX19fSl9KSl9fTtjbGFzcyBoIGV4dGVuZHMgRXJyb3J7Y29kZTttZXRhZGF0YTtjb25zdHJ1Y3RvcihlLHQsbil7c3VwZXIoZSksdGhpcy5jb2RlPXQsdGhpcy5tZXRhZGF0YT1ufX10LkdycGNXZWJFcnJvcj1ofSwzMDg4MTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Qb2xsSW5mbz10LlRleHRQb2xsSXRlbT10LlRleHRQb2xsT3B0aW9ucz12b2lkIDA7Y29uc3QgaT1yKG4oNDE1ODMpKSxvPXIobig2MjEwMCkpO3QuVGV4dFBvbGxPcHRpb25zPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7Zm9yKGNvbnN0IHIgb2YgZS5pdGVtcyl0LlRleHRQb2xsSXRlbS5lbmNvZGUocixuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4hMD09PWUuaXNFbW9qaU9ubHkmJm4udWludDMyKDE2KS5ib29sKGUuaXNFbW9qaU9ubHkpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3QgYT17aXRlbXM6W10saXNFbW9qaU9ubHk6ITF9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLml0ZW1zLnB1c2godC5UZXh0UG9sbEl0ZW0uZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2Nhc2UgMjphLmlzRW1vamlPbmx5PXIuYm9vbCgpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17aXRlbXM6W10saXNFbW9qaU9ubHk6ITF9O3JldHVybiBuLml0ZW1zPWUuaXRlbXM/Lm1hcCgoZT0+dC5UZXh0UG9sbEl0ZW0uZnJvbVBhcnRpYWwoZSkpKXx8W10sbi5pc0Vtb2ppT25seT1lLmlzRW1vamlPbmx5Pz8hMSxufX0sdC5UZXh0UG9sbEl0ZW09e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUub3B0aW9uSWQmJnQudWludDMyKDgpLnVpbnQzMihlLm9wdGlvbklkKSxcIlwiIT09ZS5sYWJlbCYmdC51aW50MzIoMTgpLnN0cmluZyhlLmxhYmVsKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e29wdGlvbklkOjAsbGFiZWw6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkub3B0aW9uSWQ9bi51aW50MzIoKTticmVhaztjYXNlIDI6aS5sYWJlbD1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17b3B0aW9uSWQ6MCxsYWJlbDpcIlwifTtyZXR1cm4gdC5vcHRpb25JZD1lLm9wdGlvbklkPz8wLHQubGFiZWw9ZS5sYWJlbD8/XCJcIix0fX0sdC5Qb2xsSW5mbz17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnBvbGxJZCYmbi51aW50MzIoMTApLnN0cmluZyhlLnBvbGxJZCksXCJcIiE9PWUudGl0bGUmJm4udWludDMyKDE4KS5zdHJpbmcoZS50aXRsZSksXCJ0ZXh0UG9sbE9wdGlvbnNcIj09PWUucG9sbE9wdGlvbnM/LiRjYXNlJiZ0LlRleHRQb2xsT3B0aW9ucy5lbmNvZGUoZS5wb2xsT3B0aW9ucy50ZXh0UG9sbE9wdGlvbnMsbi51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCksXCIwXCIhPT1lLnZvdGluZ0VuZFRpbWUmJm4udWludDMyKDMyKS51aW50NjQoZS52b3RpbmdFbmRUaW1lKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGE9e3BvbGxJZDpcIlwiLHRpdGxlOlwiXCIscG9sbE9wdGlvbnM6dm9pZCAwLHZvdGluZ0VuZFRpbWU6XCIwXCJ9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLnBvbGxJZD1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMjphLnRpdGxlPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmEucG9sbE9wdGlvbnM9eyRjYXNlOlwidGV4dFBvbGxPcHRpb25zXCIsdGV4dFBvbGxPcHRpb25zOnQuVGV4dFBvbGxPcHRpb25zLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDQ6YS52b3RpbmdFbmRUaW1lPXIudWludDY0KCkudG9TdHJpbmcoKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e3BvbGxJZDpcIlwiLHRpdGxlOlwiXCIscG9sbE9wdGlvbnM6dm9pZCAwLHZvdGluZ0VuZFRpbWU6XCIwXCJ9O3JldHVybiBuLnBvbGxJZD1lLnBvbGxJZD8/XCJcIixuLnRpdGxlPWUudGl0bGU/P1wiXCIsXCJ0ZXh0UG9sbE9wdGlvbnNcIj09PWUucG9sbE9wdGlvbnM/LiRjYXNlJiZ2b2lkIDAhPT1lLnBvbGxPcHRpb25zPy50ZXh0UG9sbE9wdGlvbnMmJm51bGwhPT1lLnBvbGxPcHRpb25zPy50ZXh0UG9sbE9wdGlvbnMmJihuLnBvbGxPcHRpb25zPXskY2FzZTpcInRleHRQb2xsT3B0aW9uc1wiLHRleHRQb2xsT3B0aW9uczp0LlRleHRQb2xsT3B0aW9ucy5mcm9tUGFydGlhbChlLnBvbGxPcHRpb25zLnRleHRQb2xsT3B0aW9ucyl9KSxuLnZvdGluZ0VuZFRpbWU9ZS52b3RpbmdFbmRUaW1lPz9cIjBcIixufX0sby5kZWZhdWx0LnV0aWwuTG9uZyE9PWkuZGVmYXVsdCYmKG8uZGVmYXVsdC51dGlsLkxvbmc9aS5kZWZhdWx0LG8uZGVmYXVsdC5jb25maWd1cmUoKSl9LDE3MzIxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkludDY0TGlzdFZhbHVlPXQuSW50MzJMaXN0VmFsdWU9dC5TdHJpbmdMaXN0VmFsdWU9dm9pZCAwO2NvbnN0IGk9cihuKDQxNTgzKSksbz1yKG4oNjIxMDApKTtmdW5jdGlvbiBhKGUpe3JldHVybiBlLnRvU3RyaW5nKCl9dC5TdHJpbmdMaXN0VmFsdWU9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgbiBvZiBlLnZhbHVlKXQudWludDMyKDEwKS5zdHJpbmcobik7cmV0dXJuIHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17dmFsdWU6W119O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLnZhbHVlLnB1c2gobi5zdHJpbmcoKSk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt2YWx1ZTpbXX07cmV0dXJuIHQudmFsdWU9ZS52YWx1ZT8ubWFwKChlPT5lKSl8fFtdLHR9fSx0LkludDMyTGlzdFZhbHVlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7dC51aW50MzIoMTApLmZvcmsoKTtmb3IoY29uc3QgbiBvZiBlLnZhbHVlKXQuaW50MzIobik7cmV0dXJuIHQubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXt2YWx1ZTpbXX07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2lmKGU+Pj4zPT0xKWlmKDI9PSg3JmUpKXtjb25zdCBlPW4udWludDMyKCkrbi5wb3M7Zm9yKDtuLnBvczxlOylpLnZhbHVlLnB1c2gobi5pbnQzMigpKX1lbHNlIGkudmFsdWUucHVzaChuLmludDMyKCkpO2Vsc2Ugbi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt2YWx1ZTpbXX07cmV0dXJuIHQudmFsdWU9ZS52YWx1ZT8ubWFwKChlPT5lKSl8fFtdLHR9fSx0LkludDY0TGlzdFZhbHVlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7dC51aW50MzIoMTApLmZvcmsoKTtmb3IoY29uc3QgbiBvZiBlLnZhbHVlKXQuaW50NjQobik7cmV0dXJuIHQubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXt2YWx1ZTpbXX07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2lmKGU+Pj4zPT0xKWlmKDI9PSg3JmUpKXtjb25zdCBlPW4udWludDMyKCkrbi5wb3M7Zm9yKDtuLnBvczxlOylpLnZhbHVlLnB1c2goYShuLmludDY0KCkpKX1lbHNlIGkudmFsdWUucHVzaChhKG4uaW50NjQoKSkpO2Vsc2Ugbi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt2YWx1ZTpbXX07cmV0dXJuIHQudmFsdWU9ZS52YWx1ZT8ubWFwKChlPT5lKSl8fFtdLHR9fSxvLmRlZmF1bHQudXRpbC5Mb25nIT09aS5kZWZhdWx0JiYoby5kZWZhdWx0LnV0aWwuTG9uZz1pLmRlZmF1bHQsby5kZWZhdWx0LmNvbmZpZ3VyZSgpKX0sNzE5MTQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQXNzZXRHcm91cD12b2lkIDA7Y29uc3QgaT1uKDgyMjk3KSxvPXIobig2MjEwMCkpO3QuQXNzZXRHcm91cD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLnJvb3RDb250ZW50RGVzY3JpcHRvciYmaS5Db250ZW50RGVzY3JpcHRvci5lbmNvZGUoZS5yb290Q29udGVudERlc2NyaXB0b3IsdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksXCJcIiE9PWUub2JqZWN0UmVsYXRpdmVQYXRoJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUub2JqZWN0UmVsYXRpdmVQYXRoKSwwIT09ZS5vYmplY3RSZWxhdGl2ZVBhdGhMZW5ndGgmJnQudWludDMyKDI0KS51aW50MzIoZS5vYmplY3RSZWxhdGl2ZVBhdGhMZW5ndGgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgYT17cm9vdENvbnRlbnREZXNjcmlwdG9yOnZvaWQgMCxvYmplY3RSZWxhdGl2ZVBhdGg6XCJcIixvYmplY3RSZWxhdGl2ZVBhdGhMZW5ndGg6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmEucm9vdENvbnRlbnREZXNjcmlwdG9yPWkuQ29udGVudERlc2NyaXB0b3IuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOmEub2JqZWN0UmVsYXRpdmVQYXRoPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmEub2JqZWN0UmVsYXRpdmVQYXRoTGVuZ3RoPW4udWludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtyb290Q29udGVudERlc2NyaXB0b3I6dm9pZCAwLG9iamVjdFJlbGF0aXZlUGF0aDpcIlwiLG9iamVjdFJlbGF0aXZlUGF0aExlbmd0aDowfTtyZXR1cm4gdC5yb290Q29udGVudERlc2NyaXB0b3I9dm9pZCAwIT09ZS5yb290Q29udGVudERlc2NyaXB0b3ImJm51bGwhPT1lLnJvb3RDb250ZW50RGVzY3JpcHRvcj9pLkNvbnRlbnREZXNjcmlwdG9yLmZyb21QYXJ0aWFsKGUucm9vdENvbnRlbnREZXNjcmlwdG9yKTp2b2lkIDAsdC5vYmplY3RSZWxhdGl2ZVBhdGg9ZS5vYmplY3RSZWxhdGl2ZVBhdGg/P1wiXCIsdC5vYmplY3RSZWxhdGl2ZVBhdGhMZW5ndGg9ZS5vYmplY3RSZWxhdGl2ZVBhdGhMZW5ndGg/PzAsdH19fSw2MDY4MzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Bc3luY05vdGlmaWNhdGlvbj12b2lkIDA7Y29uc3QgaT1uKDk4OTU2KSxvPW4oNTg0NTEpLGE9cihuKDYyMTAwKSk7dC5Bc3luY05vdGlmaWNhdGlvbj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwic3FzQ2FsbGJhY2tcIj09PWUuY2FsbGJhY2s/LiRjYXNlJiZpLlNxc0NhbGxiYWNrLmVuY29kZShlLmNhbGxiYWNrLnNxc0NhbGxiYWNrLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLFwicHViU3ViQ2FsbGJhY2tcIj09PWUuY2FsbGJhY2s/LiRjYXNlJiZvLlB1YlN1YkNhbGxiYWNrLmVuY29kZShlLmNhbGxiYWNrLnB1YlN1YkNhbGxiYWNrLHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLCEwPT09ZS5leHBlZGl0ZU5vdGlmaWNhdGlvbnMmJnQudWludDMyKDI0KS5ib29sKGUuZXhwZWRpdGVOb3RpZmljYXRpb25zKSwhMD09PWUuaW5jbHVkZU1lZGlhT3B0aW1pemF0aW9uRGV0YWlscyYmdC51aW50MzIoMzIpLmJvb2woZS5pbmNsdWRlTWVkaWFPcHRpbWl6YXRpb25EZXRhaWxzKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IHM9e2NhbGxiYWNrOnZvaWQgMCxleHBlZGl0ZU5vdGlmaWNhdGlvbnM6ITEsaW5jbHVkZU1lZGlhT3B0aW1pemF0aW9uRGV0YWlsczohMX07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOnMuY2FsbGJhY2s9eyRjYXNlOlwic3FzQ2FsbGJhY2tcIixzcXNDYWxsYmFjazppLlNxc0NhbGxiYWNrLmRlY29kZShuLG4udWludDMyKCkpfTticmVhaztjYXNlIDI6cy5jYWxsYmFjaz17JGNhc2U6XCJwdWJTdWJDYWxsYmFja1wiLHB1YlN1YkNhbGxiYWNrOm8uUHViU3ViQ2FsbGJhY2suZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMzpzLmV4cGVkaXRlTm90aWZpY2F0aW9ucz1uLmJvb2woKTticmVhaztjYXNlIDQ6cy5pbmNsdWRlTWVkaWFPcHRpbWl6YXRpb25EZXRhaWxzPW4uYm9vbCgpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gc30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17Y2FsbGJhY2s6dm9pZCAwLGV4cGVkaXRlTm90aWZpY2F0aW9uczohMSxpbmNsdWRlTWVkaWFPcHRpbWl6YXRpb25EZXRhaWxzOiExfTtyZXR1cm5cInNxc0NhbGxiYWNrXCI9PT1lLmNhbGxiYWNrPy4kY2FzZSYmdm9pZCAwIT09ZS5jYWxsYmFjaz8uc3FzQ2FsbGJhY2smJm51bGwhPT1lLmNhbGxiYWNrPy5zcXNDYWxsYmFjayYmKHQuY2FsbGJhY2s9eyRjYXNlOlwic3FzQ2FsbGJhY2tcIixzcXNDYWxsYmFjazppLlNxc0NhbGxiYWNrLmZyb21QYXJ0aWFsKGUuY2FsbGJhY2suc3FzQ2FsbGJhY2spfSksXCJwdWJTdWJDYWxsYmFja1wiPT09ZS5jYWxsYmFjaz8uJGNhc2UmJnZvaWQgMCE9PWUuY2FsbGJhY2s/LnB1YlN1YkNhbGxiYWNrJiZudWxsIT09ZS5jYWxsYmFjaz8ucHViU3ViQ2FsbGJhY2smJih0LmNhbGxiYWNrPXskY2FzZTpcInB1YlN1YkNhbGxiYWNrXCIscHViU3ViQ2FsbGJhY2s6by5QdWJTdWJDYWxsYmFjay5mcm9tUGFydGlhbChlLmNhbGxiYWNrLnB1YlN1YkNhbGxiYWNrKX0pLHQuZXhwZWRpdGVOb3RpZmljYXRpb25zPWUuZXhwZWRpdGVOb3RpZmljYXRpb25zPz8hMSx0LmluY2x1ZGVNZWRpYU9wdGltaXphdGlvbkRldGFpbHM9ZS5pbmNsdWRlTWVkaWFPcHRpbWl6YXRpb25EZXRhaWxzPz8hMSx0fX19LDE2NDMxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkJ1Y2tldExvY2F0aW9uPXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO3QuQnVja2V0TG9jYXRpb249e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5nY3NMb2NhdGlvbiYmdC51aW50MzIoMTApLnN0cmluZyhlLmdjc0xvY2F0aW9uKSxcIlwiIT09ZS5zM0xvY2F0aW9uJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuczNMb2NhdGlvbiksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXtnY3NMb2NhdGlvbjpcIlwiLHMzTG9jYXRpb246XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8uZ2NzTG9jYXRpb249bi5zdHJpbmcoKTticmVhaztjYXNlIDI6by5zM0xvY2F0aW9uPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtnY3NMb2NhdGlvbjpcIlwiLHMzTG9jYXRpb246XCJcIn07cmV0dXJuIHQuZ2NzTG9jYXRpb249ZS5nY3NMb2NhdGlvbj8/XCJcIix0LnMzTG9jYXRpb249ZS5zM0xvY2F0aW9uPz9cIlwiLHR9fX0sODIyOTc6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ29udGVudERlc2NyaXB0b3I9dC5BcHBsaWNhdGlvblZlcnNpb249dC5VSW50NjRWYWx1ZT12b2lkIDA7Y29uc3QgaT1uKDI0NTI4KSxvPXIobig0MTU4MykpLGE9cihuKDYyMTAwKSk7ZnVuY3Rpb24gcyhlKXtyZXR1cm57c2Vjb25kczpNYXRoLnRydW5jKGUuZ2V0VGltZSgpLzFlMykudG9TdHJpbmcoKSxuYW5vczplLmdldFRpbWUoKSUxZTMqMWU2fX1mdW5jdGlvbiBjKGUpe2xldCB0PTFlMypOdW1iZXIoZS5zZWNvbmRzKTtyZXR1cm4gdCs9ZS5uYW5vcy8xZTYsbmV3IERhdGUodCl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gZS50b1N0cmluZygpfXQuVUludDY0VmFsdWU9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIjBcIiE9PWUudmFsdWUmJnQudWludDMyKDgpLnVpbnQ2NChlLnZhbHVlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3ZhbHVlOlwiMFwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/aS52YWx1ZT1sKG4udWludDY0KCkpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dmFsdWU6XCIwXCJ9O3JldHVybiB0LnZhbHVlPWUudmFsdWU/P1wiMFwiLHR9fSx0LkFwcGxpY2F0aW9uVmVyc2lvbj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5hcHBsaWNhYmxlVmVyc2lvbk1ham9yJiZ0LnVpbnQzMig4KS5pbnQzMihlLmFwcGxpY2FibGVWZXJzaW9uTWFqb3IpLDAhPT1lLmFwcGxpY2FibGVWZXJzaW9uTWlub3ImJnQudWludDMyKDE2KS5pbnQzMihlLmFwcGxpY2FibGVWZXJzaW9uTWlub3IpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17YXBwbGljYWJsZVZlcnNpb25NYWpvcjowLGFwcGxpY2FibGVWZXJzaW9uTWlub3I6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuYXBwbGljYWJsZVZlcnNpb25NYWpvcj1uLmludDMyKCk7YnJlYWs7Y2FzZSAyOmkuYXBwbGljYWJsZVZlcnNpb25NaW5vcj1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXthcHBsaWNhYmxlVmVyc2lvbk1ham9yOjAsYXBwbGljYWJsZVZlcnNpb25NaW5vcjowfTtyZXR1cm4gdC5hcHBsaWNhYmxlVmVyc2lvbk1ham9yPWUuYXBwbGljYWJsZVZlcnNpb25NYWpvcj8/MCx0LmFwcGxpY2FibGVWZXJzaW9uTWlub3I9ZS5hcHBsaWNhYmxlVmVyc2lvbk1pbm9yPz8wLHR9fSx0LkNvbnRlbnREZXNjcmlwdG9yPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7dm9pZCAwIT09ZS5taW5pbXVtU3VwcG9ydGVkQXBwbGljYXRpb25WZXJzaW9uJiZ0LkFwcGxpY2F0aW9uVmVyc2lvbi5lbmNvZGUoZS5taW5pbXVtU3VwcG9ydGVkQXBwbGljYXRpb25WZXJzaW9uLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLFwiXCIhPT1lLmNvbnRlbnRJZCYmbi51aW50MzIoMTgpLnN0cmluZyhlLmNvbnRlbnRJZCk7Zm9yKGNvbnN0IHQgb2YgZS5jb250ZW50UGF0aFBhcnRzKW4udWludDMyKDI2KS5zdHJpbmcodCk7dm9pZCAwIT09ZS5jb250ZW50RXhwaXJ5VGltZSYmaS5UaW1lc3RhbXAuZW5jb2RlKHMoZS5jb250ZW50RXhwaXJ5VGltZSksbi51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5jb250ZW50RGVzY3JpcHRvckV4cGlyeVRpbWUmJmkuVGltZXN0YW1wLmVuY29kZShzKGUuY29udGVudERlc2NyaXB0b3JFeHBpcnlUaW1lKSxuLnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKSxuLnVpbnQzMig1MCkuZm9yaygpO2Zvcihjb25zdCB0IG9mIGUucmVhZHlMb2NhdGlvbklkcyluLnVpbnQ2NCh0KTtuLmxkZWxpbSgpLG4udWludDMyKDU4KS5mb3JrKCk7Zm9yKGNvbnN0IHQgb2YgZS5mdXR1cmVMb2NhdGlvbklkcyluLnVpbnQ2NCh0KTtyZXR1cm4gbi5sZGVsaW0oKSx2b2lkIDAhPT1lLmZ1dHVyZUxvY2F0aW9uc1JlYWR5VGltZSYmaS5UaW1lc3RhbXAuZW5jb2RlKHMoZS5mdXR1cmVMb2NhdGlvbnNSZWFkeVRpbWUpLG4udWludDMyKDY2KS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLmNsYWltSWQmJm4udWludDMyKDcyKS51aW50MzIoZS5jbGFpbUlkKSwwIT09ZS51c2VDYXNlJiZuLnVpbnQzMig4MCkudWludDMyKGUudXNlQ2FzZSksdm9pZCAwIT09ZS5jb250ZW50TGVuZ3RoJiZ0LlVJbnQ2NFZhbHVlLmVuY29kZShlLmNvbnRlbnRMZW5ndGgsbi51aW50MzIoOTApLmZvcmsoKSkubGRlbGltKCksMCE9PWUuaG9zdFBhdHRlcm5WZXJzaW9uJiZuLnVpbnQzMig5NikudWludDMyKGUuaG9zdFBhdHRlcm5WZXJzaW9uKSwwIT09ZS5ib2x0Q2RuRXhwZXJpbWVudGF0aW9uSWQmJm4udWludDMyKDEwNCkudWludDMyKGUuYm9sdENkbkV4cGVyaW1lbnRhdGlvbklkKSwwIT09ZS5hdHRyaWJ1dGVzJiZuLnVpbnQzMigxMTIpLnVpbnQzMihlLmF0dHJpYnV0ZXMpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgbz12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgcz17bWluaW11bVN1cHBvcnRlZEFwcGxpY2F0aW9uVmVyc2lvbjp2b2lkIDAsY29udGVudElkOlwiXCIsY29udGVudFBhdGhQYXJ0czpbXSxjb250ZW50RXhwaXJ5VGltZTp2b2lkIDAsY29udGVudERlc2NyaXB0b3JFeHBpcnlUaW1lOnZvaWQgMCxyZWFkeUxvY2F0aW9uSWRzOltdLGZ1dHVyZUxvY2F0aW9uSWRzOltdLGZ1dHVyZUxvY2F0aW9uc1JlYWR5VGltZTp2b2lkIDAsY2xhaW1JZDowLHVzZUNhc2U6MCxjb250ZW50TGVuZ3RoOnZvaWQgMCxob3N0UGF0dGVyblZlcnNpb246MCxib2x0Q2RuRXhwZXJpbWVudGF0aW9uSWQ6MCxhdHRyaWJ1dGVzOjB9O2Zvcig7ci5wb3M8bzspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpzLm1pbmltdW1TdXBwb3J0ZWRBcHBsaWNhdGlvblZlcnNpb249dC5BcHBsaWNhdGlvblZlcnNpb24uZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOnMuY29udGVudElkPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOnMuY29udGVudFBhdGhQYXJ0cy5wdXNoKHIuc3RyaW5nKCkpO2JyZWFrO2Nhc2UgNDpzLmNvbnRlbnRFeHBpcnlUaW1lPWMoaS5UaW1lc3RhbXAuZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2Nhc2UgNTpzLmNvbnRlbnREZXNjcmlwdG9yRXhwaXJ5VGltZT1jKGkuVGltZXN0YW1wLmRlY29kZShyLHIudWludDMyKCkpKTticmVhaztjYXNlIDY6aWYoMj09KDcmZSkpe2NvbnN0IGU9ci51aW50MzIoKStyLnBvcztmb3IoO3IucG9zPGU7KXMucmVhZHlMb2NhdGlvbklkcy5wdXNoKGwoci51aW50NjQoKSkpfWVsc2Ugcy5yZWFkeUxvY2F0aW9uSWRzLnB1c2gobChyLnVpbnQ2NCgpKSk7YnJlYWs7Y2FzZSA3OmlmKDI9PSg3JmUpKXtjb25zdCBlPXIudWludDMyKCkrci5wb3M7Zm9yKDtyLnBvczxlOylzLmZ1dHVyZUxvY2F0aW9uSWRzLnB1c2gobChyLnVpbnQ2NCgpKSl9ZWxzZSBzLmZ1dHVyZUxvY2F0aW9uSWRzLnB1c2gobChyLnVpbnQ2NCgpKSk7YnJlYWs7Y2FzZSA4OnMuZnV0dXJlTG9jYXRpb25zUmVhZHlUaW1lPWMoaS5UaW1lc3RhbXAuZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2Nhc2UgOTpzLmNsYWltSWQ9ci51aW50MzIoKTticmVhaztjYXNlIDEwOnMudXNlQ2FzZT1yLnVpbnQzMigpO2JyZWFrO2Nhc2UgMTE6cy5jb250ZW50TGVuZ3RoPXQuVUludDY0VmFsdWUuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAxMjpzLmhvc3RQYXR0ZXJuVmVyc2lvbj1yLnVpbnQzMigpO2JyZWFrO2Nhc2UgMTM6cy5ib2x0Q2RuRXhwZXJpbWVudGF0aW9uSWQ9ci51aW50MzIoKTticmVhaztjYXNlIDE0OnMuYXR0cmlidXRlcz1yLnVpbnQzMigpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gc30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17bWluaW11bVN1cHBvcnRlZEFwcGxpY2F0aW9uVmVyc2lvbjp2b2lkIDAsY29udGVudElkOlwiXCIsY29udGVudFBhdGhQYXJ0czpbXSxjb250ZW50RXhwaXJ5VGltZTp2b2lkIDAsY29udGVudERlc2NyaXB0b3JFeHBpcnlUaW1lOnZvaWQgMCxyZWFkeUxvY2F0aW9uSWRzOltdLGZ1dHVyZUxvY2F0aW9uSWRzOltdLGZ1dHVyZUxvY2F0aW9uc1JlYWR5VGltZTp2b2lkIDAsY2xhaW1JZDowLHVzZUNhc2U6MCxjb250ZW50TGVuZ3RoOnZvaWQgMCxob3N0UGF0dGVyblZlcnNpb246MCxib2x0Q2RuRXhwZXJpbWVudGF0aW9uSWQ6MCxhdHRyaWJ1dGVzOjB9O3JldHVybiBuLm1pbmltdW1TdXBwb3J0ZWRBcHBsaWNhdGlvblZlcnNpb249dm9pZCAwIT09ZS5taW5pbXVtU3VwcG9ydGVkQXBwbGljYXRpb25WZXJzaW9uJiZudWxsIT09ZS5taW5pbXVtU3VwcG9ydGVkQXBwbGljYXRpb25WZXJzaW9uP3QuQXBwbGljYXRpb25WZXJzaW9uLmZyb21QYXJ0aWFsKGUubWluaW11bVN1cHBvcnRlZEFwcGxpY2F0aW9uVmVyc2lvbik6dm9pZCAwLG4uY29udGVudElkPWUuY29udGVudElkPz9cIlwiLG4uY29udGVudFBhdGhQYXJ0cz1lLmNvbnRlbnRQYXRoUGFydHM/Lm1hcCgoZT0+ZSkpfHxbXSxuLmNvbnRlbnRFeHBpcnlUaW1lPWUuY29udGVudEV4cGlyeVRpbWU/P3ZvaWQgMCxuLmNvbnRlbnREZXNjcmlwdG9yRXhwaXJ5VGltZT1lLmNvbnRlbnREZXNjcmlwdG9yRXhwaXJ5VGltZT8/dm9pZCAwLG4ucmVhZHlMb2NhdGlvbklkcz1lLnJlYWR5TG9jYXRpb25JZHM/Lm1hcCgoZT0+ZSkpfHxbXSxuLmZ1dHVyZUxvY2F0aW9uSWRzPWUuZnV0dXJlTG9jYXRpb25JZHM/Lm1hcCgoZT0+ZSkpfHxbXSxuLmZ1dHVyZUxvY2F0aW9uc1JlYWR5VGltZT1lLmZ1dHVyZUxvY2F0aW9uc1JlYWR5VGltZT8/dm9pZCAwLG4uY2xhaW1JZD1lLmNsYWltSWQ/PzAsbi51c2VDYXNlPWUudXNlQ2FzZT8/MCxuLmNvbnRlbnRMZW5ndGg9dm9pZCAwIT09ZS5jb250ZW50TGVuZ3RoJiZudWxsIT09ZS5jb250ZW50TGVuZ3RoP3QuVUludDY0VmFsdWUuZnJvbVBhcnRpYWwoZS5jb250ZW50TGVuZ3RoKTp2b2lkIDAsbi5ob3N0UGF0dGVyblZlcnNpb249ZS5ob3N0UGF0dGVyblZlcnNpb24/PzAsbi5ib2x0Q2RuRXhwZXJpbWVudGF0aW9uSWQ9ZS5ib2x0Q2RuRXhwZXJpbWVudGF0aW9uSWQ/PzAsbi5hdHRyaWJ1dGVzPWUuYXR0cmlidXRlcz8/MCxufX0sYS5kZWZhdWx0LnV0aWwuTG9uZyE9PW8uZGVmYXVsdCYmKGEuZGVmYXVsdC51dGlsLkxvbmc9by5kZWZhdWx0LGEuZGVmYXVsdC5jb25maWd1cmUoKSl9LDQ0MTU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ29udGVudE9iamVjdD12b2lkIDA7Y29uc3QgaT1uKDgyMjk3KSxvPW4oNzQ5ODQpLGE9big3MTkxNCkscz1yKG4oNjIxMDApKTtmdW5jdGlvbiBjKCl7cmV0dXJue2NvbnRlbnRPYmplY3RJZDpuZXcgVWludDhBcnJheSxjb250ZW50OnZvaWQgMCxjb250ZW50UmVmZXJlbmNlRXhwaXJ5VGltZTowfX10LkNvbnRlbnRPYmplY3Q9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUuY29udGVudE9iamVjdElkLmxlbmd0aCYmdC51aW50MzIoMTApLmJ5dGVzKGUuY29udGVudE9iamVjdElkKSxcImNvbnRlbnREZXNjcmlwdG9yXCI9PT1lLmNvbnRlbnQ/LiRjYXNlJiZpLkNvbnRlbnREZXNjcmlwdG9yLmVuY29kZShlLmNvbnRlbnQuY29udGVudERlc2NyaXB0b3IsdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksXCJtZWRpYUJ1bmRsZVwiPT09ZS5jb250ZW50Py4kY2FzZSYmby5NZWRpYUJ1bmRsZS5lbmNvZGUoZS5jb250ZW50Lm1lZGlhQnVuZGxlLHQudWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLFwiYXNzZXRHcm91cFwiPT09ZS5jb250ZW50Py4kY2FzZSYmYS5Bc3NldEdyb3VwLmVuY29kZShlLmNvbnRlbnQuYXNzZXRHcm91cCx0LnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS5jb250ZW50UmVmZXJlbmNlRXhwaXJ5VGltZSYmdC51aW50MzIoNDApLmludDMyKGUuY29udGVudFJlZmVyZW5jZUV4cGlyeVRpbWUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgbD1jKCk7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmwuY29udGVudE9iamVjdElkPW4uYnl0ZXMoKTticmVhaztjYXNlIDI6bC5jb250ZW50PXskY2FzZTpcImNvbnRlbnREZXNjcmlwdG9yXCIsY29udGVudERlc2NyaXB0b3I6aS5Db250ZW50RGVzY3JpcHRvci5kZWNvZGUobixuLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAzOmwuY29udGVudD17JGNhc2U6XCJtZWRpYUJ1bmRsZVwiLG1lZGlhQnVuZGxlOm8uTWVkaWFCdW5kbGUuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgNDpsLmNvbnRlbnQ9eyRjYXNlOlwiYXNzZXRHcm91cFwiLGFzc2V0R3JvdXA6YS5Bc3NldEdyb3VwLmRlY29kZShuLG4udWludDMyKCkpfTticmVhaztjYXNlIDU6bC5jb250ZW50UmVmZXJlbmNlRXhwaXJ5VGltZT1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBsfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PWMoKTtyZXR1cm4gdC5jb250ZW50T2JqZWN0SWQ9ZS5jb250ZW50T2JqZWN0SWQ/P25ldyBVaW50OEFycmF5LFwiY29udGVudERlc2NyaXB0b3JcIj09PWUuY29udGVudD8uJGNhc2UmJnZvaWQgMCE9PWUuY29udGVudD8uY29udGVudERlc2NyaXB0b3ImJm51bGwhPT1lLmNvbnRlbnQ/LmNvbnRlbnREZXNjcmlwdG9yJiYodC5jb250ZW50PXskY2FzZTpcImNvbnRlbnREZXNjcmlwdG9yXCIsY29udGVudERlc2NyaXB0b3I6aS5Db250ZW50RGVzY3JpcHRvci5mcm9tUGFydGlhbChlLmNvbnRlbnQuY29udGVudERlc2NyaXB0b3IpfSksXCJtZWRpYUJ1bmRsZVwiPT09ZS5jb250ZW50Py4kY2FzZSYmdm9pZCAwIT09ZS5jb250ZW50Py5tZWRpYUJ1bmRsZSYmbnVsbCE9PWUuY29udGVudD8ubWVkaWFCdW5kbGUmJih0LmNvbnRlbnQ9eyRjYXNlOlwibWVkaWFCdW5kbGVcIixtZWRpYUJ1bmRsZTpvLk1lZGlhQnVuZGxlLmZyb21QYXJ0aWFsKGUuY29udGVudC5tZWRpYUJ1bmRsZSl9KSxcImFzc2V0R3JvdXBcIj09PWUuY29udGVudD8uJGNhc2UmJnZvaWQgMCE9PWUuY29udGVudD8uYXNzZXRHcm91cCYmbnVsbCE9PWUuY29udGVudD8uYXNzZXRHcm91cCYmKHQuY29udGVudD17JGNhc2U6XCJhc3NldEdyb3VwXCIsYXNzZXRHcm91cDphLkFzc2V0R3JvdXAuZnJvbVBhcnRpYWwoZS5jb250ZW50LmFzc2V0R3JvdXApfSksdC5jb250ZW50UmVmZXJlbmNlRXhwaXJ5VGltZT1lLmNvbnRlbnRSZWZlcmVuY2VFeHBpcnlUaW1lPz8wLHR9fX0sOTc2Mjk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRGVsaXZlcnlQYXRoPXZvaWQgMDtjb25zdCBpPXIobig0MTU4MykpLG89cihuKDYyMTAwKSk7ZnVuY3Rpb24gYShlKXtyZXR1cm4gZS50b1N0cmluZygpfXQuRGVsaXZlcnlQYXRoPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJwcm92aWRlcklkXCI9PT1lLmlkPy4kY2FzZSYmdC51aW50MzIoOCkuaW50NjQoZS5pZC5wcm92aWRlcklkKSxcImNkbklkXCI9PT1lLmlkPy4kY2FzZSYmdC51aW50MzIoMTYpLmludDY0KGUuaWQuY2RuSWQpLFwiMFwiIT09ZS5sb2NhdGlvbklkJiZ0LnVpbnQzMigyNCkuaW50NjQoZS5sb2NhdGlvbklkKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2lkOnZvaWQgMCxsb2NhdGlvbklkOlwiMFwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5pZD17JGNhc2U6XCJwcm92aWRlcklkXCIscHJvdmlkZXJJZDphKG4uaW50NjQoKSl9O2JyZWFrO2Nhc2UgMjppLmlkPXskY2FzZTpcImNkbklkXCIsY2RuSWQ6YShuLmludDY0KCkpfTticmVhaztjYXNlIDM6aS5sb2NhdGlvbklkPWEobi5pbnQ2NCgpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2lkOnZvaWQgMCxsb2NhdGlvbklkOlwiMFwifTtyZXR1cm5cInByb3ZpZGVySWRcIj09PWUuaWQ/LiRjYXNlJiZ2b2lkIDAhPT1lLmlkPy5wcm92aWRlcklkJiZudWxsIT09ZS5pZD8ucHJvdmlkZXJJZCYmKHQuaWQ9eyRjYXNlOlwicHJvdmlkZXJJZFwiLHByb3ZpZGVySWQ6ZS5pZC5wcm92aWRlcklkfSksXCJjZG5JZFwiPT09ZS5pZD8uJGNhc2UmJnZvaWQgMCE9PWUuaWQ/LmNkbklkJiZudWxsIT09ZS5pZD8uY2RuSWQmJih0LmlkPXskY2FzZTpcImNkbklkXCIsY2RuSWQ6ZS5pZC5jZG5JZH0pLHQubG9jYXRpb25JZD1lLmxvY2F0aW9uSWQ/P1wiMFwiLHR9fSxvLmRlZmF1bHQudXRpbC5Mb25nIT09aS5kZWZhdWx0JiYoby5kZWZhdWx0LnV0aWwuTG9uZz1pLmRlZmF1bHQsby5kZWZhdWx0LmNvbmZpZ3VyZSgpKX0sODY1MDc6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTWVkaWFfVXJsSGVhZGVyc0VudHJ5PXQuTWVkaWE9dm9pZCAwO2NvbnN0IGk9cihuKDQxNTgzKSksbz1uKDQ0MTUpLGE9bigyNzkyOCkscz1yKG4oNjIxMDApKSxjPW4oMTY0MzEpO2Z1bmN0aW9uIGwoKXtyZXR1cm57a2V5Om5ldyBVaW50OEFycmF5LGl2Om5ldyBVaW50OEFycmF5LG1lZGlhTG9jYXRpb246dm9pZCAwLGNvbnRlbnRPYmplY3Q6dm9pZCAwLHZhbGlkRHVyYXRpb25BZnRlclN1Y2Nlc3NmdWxVcGxvYWQ6dm9pZCAwLGNvbnRlbnRMZW5ndGg6XCIwXCIsdXJsSGVhZGVyczp7fSxkaXNjYXJkZWQ6ITF9fXQuTWVkaWE9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUua2V5Lmxlbmd0aCYmbi51aW50MzIoMTApLmJ5dGVzKGUua2V5KSwwIT09ZS5pdi5sZW5ndGgmJm4udWludDMyKDE4KS5ieXRlcyhlLml2KSxcImJ1Y2tldExvY2F0aW9uXCI9PT1lLm1lZGlhTG9jYXRpb24/LiRjYXNlJiZjLkJ1Y2tldExvY2F0aW9uLmVuY29kZShlLm1lZGlhTG9jYXRpb24uYnVja2V0TG9jYXRpb24sbi51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCksXCJ1cmxMb2NhdGlvblwiPT09ZS5tZWRpYUxvY2F0aW9uPy4kY2FzZSYmbi51aW50MzIoMzQpLnN0cmluZyhlLm1lZGlhTG9jYXRpb24udXJsTG9jYXRpb24pLHZvaWQgMCE9PWUuY29udGVudE9iamVjdCYmby5Db250ZW50T2JqZWN0LmVuY29kZShlLmNvbnRlbnRPYmplY3Qsbi51aW50MzIoODIpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS52YWxpZER1cmF0aW9uQWZ0ZXJTdWNjZXNzZnVsVXBsb2FkJiZhLkR1cmF0aW9uLmVuY29kZShlLnZhbGlkRHVyYXRpb25BZnRlclN1Y2Nlc3NmdWxVcGxvYWQsbi51aW50MzIoOTApLmZvcmsoKSkubGRlbGltKCksXCIwXCIhPT1lLmNvbnRlbnRMZW5ndGgmJm4udWludDMyKDk2KS51aW50NjQoZS5jb250ZW50TGVuZ3RoKSxPYmplY3QuZW50cmllcyhlLnVybEhlYWRlcnMpLmZvckVhY2goKGU9PntsZXRbcixpXT1lO3QuTWVkaWFfVXJsSGVhZGVyc0VudHJ5LmVuY29kZSh7a2V5OnIsdmFsdWU6aX0sbi51aW50MzIoMTA2KS5mb3JrKCkpLmxkZWxpbSgpfSkpLCEwPT09ZS5kaXNjYXJkZWQmJm4udWludDMyKDE2MCkuYm9vbChlLmRpc2NhcmRlZCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCB1PWwoKTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6dS5rZXk9ci5ieXRlcygpO2JyZWFrO2Nhc2UgMjp1Lml2PXIuYnl0ZXMoKTticmVhaztjYXNlIDM6dS5tZWRpYUxvY2F0aW9uPXskY2FzZTpcImJ1Y2tldExvY2F0aW9uXCIsYnVja2V0TG9jYXRpb246Yy5CdWNrZXRMb2NhdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA0OnUubWVkaWFMb2NhdGlvbj17JGNhc2U6XCJ1cmxMb2NhdGlvblwiLHVybExvY2F0aW9uOnIuc3RyaW5nKCl9O2JyZWFrO2Nhc2UgMTA6dS5jb250ZW50T2JqZWN0PW8uQ29udGVudE9iamVjdC5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDExOnUudmFsaWREdXJhdGlvbkFmdGVyU3VjY2Vzc2Z1bFVwbG9hZD1hLkR1cmF0aW9uLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMTI6dS5jb250ZW50TGVuZ3RoPXIudWludDY0KCkudG9TdHJpbmcoKTticmVhaztjYXNlIDEzOmNvbnN0IG49dC5NZWRpYV9VcmxIZWFkZXJzRW50cnkuZGVjb2RlKHIsci51aW50MzIoKSk7dm9pZCAwIT09bi52YWx1ZSYmKHUudXJsSGVhZGVyc1tuLmtleV09bi52YWx1ZSk7YnJlYWs7Y2FzZSAyMDp1LmRpc2NhcmRlZD1yLmJvb2woKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIHV9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9bCgpO3JldHVybiB0LmtleT1lLmtleT8/bmV3IFVpbnQ4QXJyYXksdC5pdj1lLml2Pz9uZXcgVWludDhBcnJheSxcImJ1Y2tldExvY2F0aW9uXCI9PT1lLm1lZGlhTG9jYXRpb24/LiRjYXNlJiZ2b2lkIDAhPT1lLm1lZGlhTG9jYXRpb24/LmJ1Y2tldExvY2F0aW9uJiZudWxsIT09ZS5tZWRpYUxvY2F0aW9uPy5idWNrZXRMb2NhdGlvbiYmKHQubWVkaWFMb2NhdGlvbj17JGNhc2U6XCJidWNrZXRMb2NhdGlvblwiLGJ1Y2tldExvY2F0aW9uOmMuQnVja2V0TG9jYXRpb24uZnJvbVBhcnRpYWwoZS5tZWRpYUxvY2F0aW9uLmJ1Y2tldExvY2F0aW9uKX0pLFwidXJsTG9jYXRpb25cIj09PWUubWVkaWFMb2NhdGlvbj8uJGNhc2UmJnZvaWQgMCE9PWUubWVkaWFMb2NhdGlvbj8udXJsTG9jYXRpb24mJm51bGwhPT1lLm1lZGlhTG9jYXRpb24/LnVybExvY2F0aW9uJiYodC5tZWRpYUxvY2F0aW9uPXskY2FzZTpcInVybExvY2F0aW9uXCIsdXJsTG9jYXRpb246ZS5tZWRpYUxvY2F0aW9uLnVybExvY2F0aW9ufSksdC5jb250ZW50T2JqZWN0PXZvaWQgMCE9PWUuY29udGVudE9iamVjdCYmbnVsbCE9PWUuY29udGVudE9iamVjdD9vLkNvbnRlbnRPYmplY3QuZnJvbVBhcnRpYWwoZS5jb250ZW50T2JqZWN0KTp2b2lkIDAsdC52YWxpZER1cmF0aW9uQWZ0ZXJTdWNjZXNzZnVsVXBsb2FkPXZvaWQgMCE9PWUudmFsaWREdXJhdGlvbkFmdGVyU3VjY2Vzc2Z1bFVwbG9hZCYmbnVsbCE9PWUudmFsaWREdXJhdGlvbkFmdGVyU3VjY2Vzc2Z1bFVwbG9hZD9hLkR1cmF0aW9uLmZyb21QYXJ0aWFsKGUudmFsaWREdXJhdGlvbkFmdGVyU3VjY2Vzc2Z1bFVwbG9hZCk6dm9pZCAwLHQuY29udGVudExlbmd0aD1lLmNvbnRlbnRMZW5ndGg/P1wiMFwiLHQudXJsSGVhZGVycz1PYmplY3QuZW50cmllcyhlLnVybEhlYWRlcnM/P3t9KS5yZWR1Y2UoKChlLHQpPT57bGV0W24scl09dDtyZXR1cm4gdm9pZCAwIT09ciYmKGVbbl09U3RyaW5nKHIpKSxlfSkse30pLHQuZGlzY2FyZGVkPWUuZGlzY2FyZGVkPz8hMSx0fX0sdC5NZWRpYV9VcmxIZWFkZXJzRW50cnk9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5rZXkmJnQudWludDMyKDEwKS5zdHJpbmcoZS5rZXkpLFwiXCIhPT1lLnZhbHVlJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUudmFsdWUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17a2V5OlwiXCIsdmFsdWU6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkua2V5PW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkudmFsdWU9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2tleTpcIlwiLHZhbHVlOlwiXCJ9O3JldHVybiB0LmtleT1lLmtleT8/XCJcIix0LnZhbHVlPWUudmFsdWU/P1wiXCIsdH19LHMuZGVmYXVsdC51dGlsLkxvbmchPT1pLmRlZmF1bHQmJihzLmRlZmF1bHQudXRpbC5Mb25nPWkuZGVmYXVsdCxzLmRlZmF1bHQuY29uZmlndXJlKCkpfSw3NDk4NDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5NZWRpYUJ1bmRsZT10Lk1lZGlhQnVuZGxlX01lZGlhQnVuZGxlU3RhdHVzPXZvaWQgMDtjb25zdCBpPW4oODIyOTcpLG89bigyNTEyKSxhPXIobig2MjEwMCkpO3ZhciBzOyhzPXQuTWVkaWFCdW5kbGVfTWVkaWFCdW5kbGVTdGF0dXN8fCh0Lk1lZGlhQnVuZGxlX01lZGlhQnVuZGxlU3RhdHVzPXt9KSlbcy5GSU5JU0hFRF9TVUNDRVNTPTBdPVwiRklOSVNIRURfU1VDQ0VTU1wiLHNbcy5GSU5JU0hFRF9QQVJUSUFMX1NVQ0NFU1M9MV09XCJGSU5JU0hFRF9QQVJUSUFMX1NVQ0NFU1NcIixzW3MuQlJPS0VOPTJdPVwiQlJPS0VOXCIsc1tzLklOX1BST0dSRVNTPTNdPVwiSU5fUFJPR1JFU1NcIixzW3MuQlJPS0VOX1dST05HX1pJUFBFRD0xMDBdPVwiQlJPS0VOX1dST05HX1pJUFBFRFwiLHNbcy5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsdC5NZWRpYUJ1bmRsZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO1wiXCIhPT1lLm1lZGlhQnVuZGxlSWQmJnQudWludDMyKDEwKS5zdHJpbmcoZS5tZWRpYUJ1bmRsZUlkKSwhMD09PWUubm90Q29uc3VtYWJsZSYmdC51aW50MzIoMTYpLmJvb2woZS5ub3RDb25zdW1hYmxlKSx2b2lkIDAhPT1lLmJhc2VDb250ZW50RGVzY3JpcHRvciYmaS5Db250ZW50RGVzY3JpcHRvci5lbmNvZGUoZS5iYXNlQ29udGVudERlc2NyaXB0b3IsdC51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCksMCE9PWUuZmVhdHVyZUNvbnRlbnRUeXBlJiZ0LnVpbnQzMig4MCkuaW50MzIoZS5mZWF0dXJlQ29udGVudFR5cGUpLFwiXCIhPT1lLmNvZkNvbmZpZ3VyYXRpb25LZXkmJnQudWludDMyKDkwKS5zdHJpbmcoZS5jb2ZDb25maWd1cmF0aW9uS2V5KTtmb3IoY29uc3QgbiBvZiBlLm1lZGlhVmFyaWFudHMpby5NZWRpYVZhcmlhbnQuZW5jb2RlKG4sdC51aW50MzIoMTYyKS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiB2b2lkIDAhPT1lLmd1YXJhbnRlZWRDb250ZW50RGVzY3JpcHRvciYmaS5Db250ZW50RGVzY3JpcHRvci5lbmNvZGUoZS5ndWFyYW50ZWVkQ29udGVudERlc2NyaXB0b3IsdC51aW50MzIoMjQyKS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLnN0YXR1cyYmdC51aW50MzIoMzIwKS5pbnQzMihlLnN0YXR1cyksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBzPXttZWRpYUJ1bmRsZUlkOlwiXCIsbm90Q29uc3VtYWJsZTohMSxiYXNlQ29udGVudERlc2NyaXB0b3I6dm9pZCAwLGZlYXR1cmVDb250ZW50VHlwZTowLGNvZkNvbmZpZ3VyYXRpb25LZXk6XCJcIixtZWRpYVZhcmlhbnRzOltdLGd1YXJhbnRlZWRDb250ZW50RGVzY3JpcHRvcjp2b2lkIDAsc3RhdHVzOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpzLm1lZGlhQnVuZGxlSWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6cy5ub3RDb25zdW1hYmxlPW4uYm9vbCgpO2JyZWFrO2Nhc2UgMzpzLmJhc2VDb250ZW50RGVzY3JpcHRvcj1pLkNvbnRlbnREZXNjcmlwdG9yLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMTA6cy5mZWF0dXJlQ29udGVudFR5cGU9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMTE6cy5jb2ZDb25maWd1cmF0aW9uS2V5PW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyMDpzLm1lZGlhVmFyaWFudHMucHVzaChvLk1lZGlhVmFyaWFudC5kZWNvZGUobixuLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAzMDpzLmd1YXJhbnRlZWRDb250ZW50RGVzY3JpcHRvcj1pLkNvbnRlbnREZXNjcmlwdG9yLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgNDA6cy5zdGF0dXM9bi5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gc30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17bWVkaWFCdW5kbGVJZDpcIlwiLG5vdENvbnN1bWFibGU6ITEsYmFzZUNvbnRlbnREZXNjcmlwdG9yOnZvaWQgMCxmZWF0dXJlQ29udGVudFR5cGU6MCxjb2ZDb25maWd1cmF0aW9uS2V5OlwiXCIsbWVkaWFWYXJpYW50czpbXSxndWFyYW50ZWVkQ29udGVudERlc2NyaXB0b3I6dm9pZCAwLHN0YXR1czowfTtyZXR1cm4gdC5tZWRpYUJ1bmRsZUlkPWUubWVkaWFCdW5kbGVJZD8/XCJcIix0Lm5vdENvbnN1bWFibGU9ZS5ub3RDb25zdW1hYmxlPz8hMSx0LmJhc2VDb250ZW50RGVzY3JpcHRvcj12b2lkIDAhPT1lLmJhc2VDb250ZW50RGVzY3JpcHRvciYmbnVsbCE9PWUuYmFzZUNvbnRlbnREZXNjcmlwdG9yP2kuQ29udGVudERlc2NyaXB0b3IuZnJvbVBhcnRpYWwoZS5iYXNlQ29udGVudERlc2NyaXB0b3IpOnZvaWQgMCx0LmZlYXR1cmVDb250ZW50VHlwZT1lLmZlYXR1cmVDb250ZW50VHlwZT8/MCx0LmNvZkNvbmZpZ3VyYXRpb25LZXk9ZS5jb2ZDb25maWd1cmF0aW9uS2V5Pz9cIlwiLHQubWVkaWFWYXJpYW50cz1lLm1lZGlhVmFyaWFudHM/Lm1hcCgoZT0+by5NZWRpYVZhcmlhbnQuZnJvbVBhcnRpYWwoZSkpKXx8W10sdC5ndWFyYW50ZWVkQ29udGVudERlc2NyaXB0b3I9dm9pZCAwIT09ZS5ndWFyYW50ZWVkQ29udGVudERlc2NyaXB0b3ImJm51bGwhPT1lLmd1YXJhbnRlZWRDb250ZW50RGVzY3JpcHRvcj9pLkNvbnRlbnREZXNjcmlwdG9yLmZyb21QYXJ0aWFsKGUuZ3VhcmFudGVlZENvbnRlbnREZXNjcmlwdG9yKTp2b2lkIDAsdC5zdGF0dXM9ZS5zdGF0dXM/PzAsdH19fSw1NTg4ODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5NZWRpYUJ1bmRsZUNhbGxiYWNrPXQuTWVkaWFCdW5kbGVDYWxsYmFja01lc3NhZ2U9dC5NZWRpYUJ1bmRsZUNhbGxiYWNrTWVzc2FnZVNldD12b2lkIDA7Y29uc3QgaT1uKDQ0MTUpLG89big1ODQ1MSksYT1uKDk4OTU2KSxzPXIobig2MjEwMCkpO2Z1bmN0aW9uIGMoKXtyZXR1cm57Y29udGVudE9iamVjdDp2b2lkIDAscGFzc3Rocm91Z2hEYXRhOm5ldyBVaW50OEFycmF5fX10Lk1lZGlhQnVuZGxlQ2FsbGJhY2tNZXNzYWdlU2V0PXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7Zm9yKGNvbnN0IHIgb2YgZS5tZXNzYWdlcyl0Lk1lZGlhQnVuZGxlQ2FsbGJhY2tNZXNzYWdlLmVuY29kZShyLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiBufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89e21lc3NhZ2VzOltdfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7ZT4+PjM9PTE/by5tZXNzYWdlcy5wdXNoKHQuTWVkaWFCdW5kbGVDYWxsYmFja01lc3NhZ2UuZGVjb2RlKHIsci51aW50MzIoKSkpOnIuc2tpcFR5cGUoNyZlKX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17bWVzc2FnZXM6W119O3JldHVybiBuLm1lc3NhZ2VzPWUubWVzc2FnZXM/Lm1hcCgoZT0+dC5NZWRpYUJ1bmRsZUNhbGxiYWNrTWVzc2FnZS5mcm9tUGFydGlhbChlKSkpfHxbXSxufX0sdC5NZWRpYUJ1bmRsZUNhbGxiYWNrTWVzc2FnZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLmNvbnRlbnRPYmplY3QmJmkuQ29udGVudE9iamVjdC5lbmNvZGUoZS5jb250ZW50T2JqZWN0LHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLnBhc3N0aHJvdWdoRGF0YS5sZW5ndGgmJnQudWludDMyKDE4KS5ieXRlcyhlLnBhc3N0aHJvdWdoRGF0YSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPWMoKTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5jb250ZW50T2JqZWN0PWkuQ29udGVudE9iamVjdC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDI6by5wYXNzdGhyb3VnaERhdGE9bi5ieXRlcygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD1jKCk7cmV0dXJuIHQuY29udGVudE9iamVjdD12b2lkIDAhPT1lLmNvbnRlbnRPYmplY3QmJm51bGwhPT1lLmNvbnRlbnRPYmplY3Q/aS5Db250ZW50T2JqZWN0LmZyb21QYXJ0aWFsKGUuY29udGVudE9iamVjdCk6dm9pZCAwLHQucGFzc3Rocm91Z2hEYXRhPWUucGFzc3Rocm91Z2hEYXRhPz9uZXcgVWludDhBcnJheSx0fX0sdC5NZWRpYUJ1bmRsZUNhbGxiYWNrPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJwdWJTdWJDYWxsYmFja1wiPT09ZS5jYWxsYmFjaz8uJGNhc2UmJm8uUHViU3ViQ2FsbGJhY2suZW5jb2RlKGUuY2FsbGJhY2sucHViU3ViQ2FsbGJhY2ssdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksXCJzcXNDYWxsYmFja1wiPT09ZS5jYWxsYmFjaz8uJGNhc2UmJmEuU3FzQ2FsbGJhY2suZW5jb2RlKGUuY2FsbGJhY2suc3FzQ2FsbGJhY2ssdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtjYWxsYmFjazp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmNhbGxiYWNrPXskY2FzZTpcInB1YlN1YkNhbGxiYWNrXCIscHViU3ViQ2FsbGJhY2s6by5QdWJTdWJDYWxsYmFjay5kZWNvZGUobixuLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAyOmkuY2FsbGJhY2s9eyRjYXNlOlwic3FzQ2FsbGJhY2tcIixzcXNDYWxsYmFjazphLlNxc0NhbGxiYWNrLmRlY29kZShuLG4udWludDMyKCkpfTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2NhbGxiYWNrOnZvaWQgMH07cmV0dXJuXCJwdWJTdWJDYWxsYmFja1wiPT09ZS5jYWxsYmFjaz8uJGNhc2UmJnZvaWQgMCE9PWUuY2FsbGJhY2s/LnB1YlN1YkNhbGxiYWNrJiZudWxsIT09ZS5jYWxsYmFjaz8ucHViU3ViQ2FsbGJhY2smJih0LmNhbGxiYWNrPXskY2FzZTpcInB1YlN1YkNhbGxiYWNrXCIscHViU3ViQ2FsbGJhY2s6by5QdWJTdWJDYWxsYmFjay5mcm9tUGFydGlhbChlLmNhbGxiYWNrLnB1YlN1YkNhbGxiYWNrKX0pLFwic3FzQ2FsbGJhY2tcIj09PWUuY2FsbGJhY2s/LiRjYXNlJiZ2b2lkIDAhPT1lLmNhbGxiYWNrPy5zcXNDYWxsYmFjayYmbnVsbCE9PWUuY2FsbGJhY2s/LnNxc0NhbGxiYWNrJiYodC5jYWxsYmFjaz17JGNhc2U6XCJzcXNDYWxsYmFja1wiLHNxc0NhbGxiYWNrOmEuU3FzQ2FsbGJhY2suZnJvbVBhcnRpYWwoZS5jYWxsYmFjay5zcXNDYWxsYmFjayl9KSx0fX19LDc5NTM2OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk1lZGlhQ2FwdHVyZUNvbnRleHQ9dC5EZXZpY2VJbmZvPXQuQW5pbWF0ZWRTbmFwVHlwZT10Lk1lZGlhSW5wdXQ9dC5QbGF0Zm9ybT10Lk1lZGlhUXVhbGl0eUxldmVsPXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO3ZhciBvLGEscyxjOyhjPXQuTWVkaWFRdWFsaXR5TGV2ZWx8fCh0Lk1lZGlhUXVhbGl0eUxldmVsPXt9KSlbYy5MRVZFTF9OT05FPTBdPVwiTEVWRUxfTk9ORVwiLGNbYy5MRVZFTF8xPTEwMF09XCJMRVZFTF8xXCIsY1tjLkxFVkVMXzI9MjAwXT1cIkxFVkVMXzJcIixjW2MuTEVWRUxfMz0zMDBdPVwiTEVWRUxfM1wiLGNbYy5MRVZFTF80PTQwMF09XCJMRVZFTF80XCIsY1tjLkxFVkVMXzU9NTAwXT1cIkxFVkVMXzVcIixjW2MuTEVWRUxfNj02MDBdPVwiTEVWRUxfNlwiLGNbYy5MRVZFTF83PTcwMF09XCJMRVZFTF83XCIsY1tjLkxFVkVMX01BWD01ZTNdPVwiTEVWRUxfTUFYXCIsY1tjLkxFVkVMXzRfNT00NTBdPVwiTEVWRUxfNF81XCIsY1tjLkxFVkVMXzJfMT0yMTBdPVwiTEVWRUxfMl8xXCIsY1tjLkxFVkVMXzJfMj0yMjBdPVwiTEVWRUxfMl8yXCIsY1tjLkxFVkVMXzJfNT0yNTBdPVwiTEVWRUxfMl81XCIsY1tjLkxFVkVMXzNfMj0zMjBdPVwiTEVWRUxfM18yXCIsY1tjLkxFVkVMXzNfNT0zNTBdPVwiTEVWRUxfM181XCIsY1tjLkxFVkVMXzJfNz0yNzBdPVwiTEVWRUxfMl83XCIsY1tjLkxFVkVMXzZfNT02NTBdPVwiTEVWRUxfNl81XCIsY1tjLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwocz10LlBsYXRmb3JtfHwodC5QbGF0Zm9ybT17fSkpW3MuVU5LTk9XTl9QTEFURk9STT0wXT1cIlVOS05PV05fUExBVEZPUk1cIixzW3MuQU5EUk9JRD0xXT1cIkFORFJPSURcIixzW3MuSU9TPTJdPVwiSU9TXCIsc1tzLlRFU1RJTkc9M109XCJURVNUSU5HXCIsc1tzLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwoYT10Lk1lZGlhSW5wdXR8fCh0Lk1lZGlhSW5wdXQ9e30pKVthLlVOS05PV05fTUVESUFfSU5QVVQ9MF09XCJVTktOT1dOX01FRElBX0lOUFVUXCIsYVthLkZST05UX0ZBQ0lOR19DQU1FUkE9MV09XCJGUk9OVF9GQUNJTkdfQ0FNRVJBXCIsYVthLlJFQVJfRkFDSU5HX0NBTUVSQT0yXT1cIlJFQVJfRkFDSU5HX0NBTUVSQVwiLGFbYS5DQU1FUkFfUk9MTD0zXT1cIkNBTUVSQV9ST0xMXCIsYVthLlNQRUNUQUNMRVNfTUVESUE9NF09XCJTUEVDVEFDTEVTX01FRElBXCIsYVthLk1FTU9SSUVTPTVdPVwiTUVNT1JJRVNcIixhW2EuQ0hFRVJJT1M9Nl09XCJDSEVFUklPU1wiLGFbYS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKG89dC5BbmltYXRlZFNuYXBUeXBlfHwodC5BbmltYXRlZFNuYXBUeXBlPXt9KSlbby5VTktOT1dOX0FOSU1BVEVEX1NOQVBfVFlQRT0wXT1cIlVOS05PV05fQU5JTUFURURfU05BUF9UWVBFXCIsb1tvLklNQUdFX1dJVEhfQU5JTUFURUQ9MV09XCJJTUFHRV9XSVRIX0FOSU1BVEVEXCIsb1tvLklNQUdFX1dJVEhPVVRfQU5JTUFURUQ9Ml09XCJJTUFHRV9XSVRIT1VUX0FOSU1BVEVEXCIsb1tvLlZJREVPX1dJVEhfQU5JTUFURUQ9M109XCJWSURFT19XSVRIX0FOSU1BVEVEXCIsb1tvLlZJREVPX1dJVEhPVVRfQU5JTUFURUQ9NF09XCJWSURFT19XSVRIT1VUX0FOSU1BVEVEXCIsb1tvLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0LkRldmljZUluZm89e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS51c2VyQWdlbnQmJnQudWludDMyKDEwKS5zdHJpbmcoZS51c2VyQWdlbnQpLDAhPT1lLnBsYXRmb3JtJiZ0LnVpbnQzMigxNikuaW50MzIoZS5wbGF0Zm9ybSksMCE9PWUuZGV2aWNlQ2x1c3RlciYmdC51aW50MzIoMjQpLmludDMyKGUuZGV2aWNlQ2x1c3RlciksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXt1c2VyQWdlbnQ6XCJcIixwbGF0Zm9ybTowLGRldmljZUNsdXN0ZXI6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8udXNlckFnZW50PW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOm8ucGxhdGZvcm09bi5pbnQzMigpO2JyZWFrO2Nhc2UgMzpvLmRldmljZUNsdXN0ZXI9bi5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dXNlckFnZW50OlwiXCIscGxhdGZvcm06MCxkZXZpY2VDbHVzdGVyOjB9O3JldHVybiB0LnVzZXJBZ2VudD1lLnVzZXJBZ2VudD8/XCJcIix0LnBsYXRmb3JtPWUucGxhdGZvcm0/PzAsdC5kZXZpY2VDbHVzdGVyPWUuZGV2aWNlQ2x1c3Rlcj8/MCx0fX0sdC5NZWRpYUNhcHR1cmVDb250ZXh0PXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLm1lZGlhSW5wdXQmJm4udWludDMyKDgpLmludDMyKGUubWVkaWFJbnB1dCksMCE9PWUuYW5pbWF0ZWRTbmFwVHlwZSYmbi51aW50MzIoMTYpLmludDMyKGUuYW5pbWF0ZWRTbmFwVHlwZSksMCE9PWUubWVkaWFRdWFsaXR5TGV2ZWwmJm4udWludDMyKDgwKS5pbnQzMihlLm1lZGlhUXVhbGl0eUxldmVsKSx2b2lkIDAhPT1lLmRldmljZUluZm8mJnQuRGV2aWNlSW5mby5lbmNvZGUoZS5kZXZpY2VJbmZvLG4udWludDMyKDE2MikuZm9yaygpKS5sZGVsaW0oKSxcIlwiIT09ZS5hdHRyaWJ1dGlvbiYmbi51aW50MzIoMTcwKS5zdHJpbmcoZS5hdHRyaWJ1dGlvbiksITA9PT1lLmlzWmlwcGVkJiZuLnVpbnQzMigxNzYpLmJvb2woZS5pc1ppcHBlZCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBvPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBhPXttZWRpYUlucHV0OjAsYW5pbWF0ZWRTbmFwVHlwZTowLG1lZGlhUXVhbGl0eUxldmVsOjAsZGV2aWNlSW5mbzp2b2lkIDAsYXR0cmlidXRpb246XCJcIixpc1ppcHBlZDohMX07Zm9yKDtyLnBvczxvOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmEubWVkaWFJbnB1dD1yLmludDMyKCk7YnJlYWs7Y2FzZSAyOmEuYW5pbWF0ZWRTbmFwVHlwZT1yLmludDMyKCk7YnJlYWs7Y2FzZSAxMDphLm1lZGlhUXVhbGl0eUxldmVsPXIuaW50MzIoKTticmVhaztjYXNlIDIwOmEuZGV2aWNlSW5mbz10LkRldmljZUluZm8uZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyMTphLmF0dHJpYnV0aW9uPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSAyMjphLmlzWmlwcGVkPXIuYm9vbCgpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17bWVkaWFJbnB1dDowLGFuaW1hdGVkU25hcFR5cGU6MCxtZWRpYVF1YWxpdHlMZXZlbDowLGRldmljZUluZm86dm9pZCAwLGF0dHJpYnV0aW9uOlwiXCIsaXNaaXBwZWQ6ITF9O3JldHVybiBuLm1lZGlhSW5wdXQ9ZS5tZWRpYUlucHV0Pz8wLG4uYW5pbWF0ZWRTbmFwVHlwZT1lLmFuaW1hdGVkU25hcFR5cGU/PzAsbi5tZWRpYVF1YWxpdHlMZXZlbD1lLm1lZGlhUXVhbGl0eUxldmVsPz8wLG4uZGV2aWNlSW5mbz12b2lkIDAhPT1lLmRldmljZUluZm8mJm51bGwhPT1lLmRldmljZUluZm8/dC5EZXZpY2VJbmZvLmZyb21QYXJ0aWFsKGUuZGV2aWNlSW5mbyk6dm9pZCAwLG4uYXR0cmlidXRpb249ZS5hdHRyaWJ1dGlvbj8/XCJcIixuLmlzWmlwcGVkPWUuaXNaaXBwZWQ/PyExLG59fX0sMjUxMjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5IbHNWb2RTdHJlYW1pbmc9dC5Db250ZW50RGVzY3JpcHRvck92ZXJyaWRlPXQuTWVkaWFWYXJpYW50PXQuQ29udGVudERlc2NyaXB0b3JPdmVycmlkZV9TdGFuZGFyZEV4dGVuc2lvbj10Lk1lZGlhVmFyaWFudF9NZWRpYVZhcmlhbnRTdGF0dXM9dm9pZCAwO2NvbnN0IGk9big2MTg4KSxvPW4oODIyOTcpLGE9big4MTQ0NSkscz1yKG4oNjIxMDApKTt2YXIgYyxsOyhsPXQuTWVkaWFWYXJpYW50X01lZGlhVmFyaWFudFN0YXR1c3x8KHQuTWVkaWFWYXJpYW50X01lZGlhVmFyaWFudFN0YXR1cz17fSkpW2wuTk9UX1NFVD0wXT1cIk5PVF9TRVRcIixsW2wuTUVESUFfQ09OVkVSU0lPTl9GSU5JU0hFRD0xXT1cIk1FRElBX0NPTlZFUlNJT05fRklOSVNIRURcIixsW2wuTUVESUFfQ09OVkVSU0lPTl9GQUlMRUQ9Ml09XCJNRURJQV9DT05WRVJTSU9OX0ZBSUxFRFwiLGxbbC5CT0xUX0NMQUlNX0ZBSUxFRD0zXT1cIkJPTFRfQ0xBSU1fRkFJTEVEXCIsbFtsLkJPTFRfSU5HRVNUSU9OX1BST0NFU1NJTkc9NF09XCJCT0xUX0lOR0VTVElPTl9QUk9DRVNTSU5HXCIsbFtsLkJPTFRfSU5HRVNUSU9OX0ZBSUxFRD01XT1cIkJPTFRfSU5HRVNUSU9OX0ZBSUxFRFwiLGxbbC5QUk9DRVNTSU5HPTZdPVwiUFJPQ0VTU0lOR1wiLGxbbC5GRVRDSF9VUExPQURfTE9DQVRJT05fRkFJTEVEPTddPVwiRkVUQ0hfVVBMT0FEX0xPQ0FUSU9OX0ZBSUxFRFwiLGxbbC5JTlRFUk5BTF9FUlJPUj04XT1cIklOVEVSTkFMX0VSUk9SXCIsbFtsLkNBTkNFTExFRD05XT1cIkNBTkNFTExFRFwiLGxbbC5DT01QTEVURUQ9MTBdPVwiQ09NUExFVEVEXCIsbFtsLk5PVF9QUk9EVUNFRD0xMV09XCJOT1RfUFJPRFVDRURcIixsW2wuUExBTk5FRF9SRU1PVkVEPTEyXT1cIlBMQU5ORURfUkVNT1ZFRFwiLGxbbC5ERUxFVEVEPTk5XT1cIkRFTEVURURcIixsW2wuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLChjPXQuQ29udGVudERlc2NyaXB0b3JPdmVycmlkZV9TdGFuZGFyZEV4dGVuc2lvbnx8KHQuQ29udGVudERlc2NyaXB0b3JPdmVycmlkZV9TdGFuZGFyZEV4dGVuc2lvbj17fSkpW2MuVU5LTk9XTj0wXT1cIlVOS05PV05cIixjW2MuV0VCUD0xXT1cIldFQlBcIixjW2MuUE5HPTJdPVwiUE5HXCIsY1tjLkpQRz0zXT1cIkpQR1wiLGNbYy5HSUY9NF09XCJHSUZcIixjW2MuSUNPPTVdPVwiSUNPXCIsY1tjLlNWRz02XT1cIlNWR1wiLGNbYy5IRUlGPTddPVwiSEVJRlwiLGNbYy5IRUlDPThdPVwiSEVJQ1wiLGNbYy5USUZGPTldPVwiVElGRlwiLGNbYy5CTVA9MTBdPVwiQk1QXCIsY1tjLk1QND0yMF09XCJNUDRcIixjW2MuTTNVOD0yMV09XCJNM1U4XCIsY1tjLk1QRD0yMl09XCJNUERcIixjW2MuVFM9MjNdPVwiVFNcIixjW2MuR0lGVj0yNF09XCJHSUZWXCIsY1tjLk1PVj0yNV09XCJNT1ZcIixjW2MuV0VCTT0yNl09XCJXRUJNXCIsY1tjLkZMVj0yN109XCJGTFZcIixjW2MuQVZJPTI4XT1cIkFWSVwiLGNbYy5NS1Y9MjldPVwiTUtWXCIsY1tjLlpJUD00MF09XCJaSVBcIixjW2MuR1o9NDFdPVwiR1pcIixjW2MuVEFSPTQyXT1cIlRBUlwiLGNbYy5SQVI9NDNdPVwiUkFSXCIsY1tjLlRBUl9HWj00NF09XCJUQVJfR1pcIixjW2MuVlRUPTYwXT1cIlZUVFwiLGNbYy5XRUJWVFQ9NjFdPVwiV0VCVlRUXCIsY1tjLlNSVD02Ml09XCJTUlRcIixjW2MuU1VCPTYzXT1cIlNVQlwiLGNbYy5TQlY9NjRdPVwiU0JWXCIsY1tjLk1QMz04MF09XCJNUDNcIixjW2MuQUFDPTgxXT1cIkFBQ1wiLGNbYy5XQVY9ODJdPVwiV0FWXCIsY1tjLk00QT04M109XCJNNEFcIixjW2MuR0xCPTEwMF09XCJHTEJcIixjW2MuS1RYPTEwMV09XCJLVFhcIixjW2MuR0xTTD0xMDJdPVwiR0xTTFwiLGNbYy5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsdC5NZWRpYVZhcmlhbnQ9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUudmFyaWFudE5hbWUmJm4udWludDMyKDgpLmludDMyKGUudmFyaWFudE5hbWUpLHZvaWQgMCE9PWUubWV0YWRhdGEmJmkuTWVkaWFWYXJpYW50TWV0YWRhdGEuZW5jb2RlKGUubWV0YWRhdGEsbi51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksMCE9PWUuc3RhdHVzJiZuLnVpbnQzMigyNCkuaW50MzIoZS5zdGF0dXMpLFwib3ZlcnJpZGVDb250ZW50RGVzY3JpcHRvclwiPT09ZS52YXJpYW50Q29udGVudD8uJGNhc2UmJnQuQ29udGVudERlc2NyaXB0b3JPdmVycmlkZS5lbmNvZGUoZS52YXJpYW50Q29udGVudC5vdmVycmlkZUNvbnRlbnREZXNjcmlwdG9yLG4udWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpLFwiY29udGVudERlc2NyaXB0b3JcIj09PWUudmFyaWFudENvbnRlbnQ/LiRjYXNlJiZvLkNvbnRlbnREZXNjcmlwdG9yLmVuY29kZShlLnZhcmlhbnRDb250ZW50LmNvbnRlbnREZXNjcmlwdG9yLG4udWludDMyKDgyKS5mb3JrKCkpLmxkZWxpbSgpLFwiaGxzVm9kU3RyZWFtaW5nXCI9PT1lLnZhcmlhbnRDb250ZW50Py4kY2FzZSYmdC5IbHNWb2RTdHJlYW1pbmcuZW5jb2RlKGUudmFyaWFudENvbnRlbnQuaGxzVm9kU3RyZWFtaW5nLG4udWludDMyKDkwKS5mb3JrKCkpLmxkZWxpbSgpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgYT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3QgYz17dmFyaWFudE5hbWU6MCxtZXRhZGF0YTp2b2lkIDAsc3RhdHVzOjAsdmFyaWFudENvbnRlbnQ6dm9pZCAwfTtmb3IoO3IucG9zPGE7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6Yy52YXJpYW50TmFtZT1yLmludDMyKCk7YnJlYWs7Y2FzZSAyOmMubWV0YWRhdGE9aS5NZWRpYVZhcmlhbnRNZXRhZGF0YS5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDM6Yy5zdGF0dXM9ci5pbnQzMigpO2JyZWFrO2Nhc2UgNDpjLnZhcmlhbnRDb250ZW50PXskY2FzZTpcIm92ZXJyaWRlQ29udGVudERlc2NyaXB0b3JcIixvdmVycmlkZUNvbnRlbnREZXNjcmlwdG9yOnQuQ29udGVudERlc2NyaXB0b3JPdmVycmlkZS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAxMDpjLnZhcmlhbnRDb250ZW50PXskY2FzZTpcImNvbnRlbnREZXNjcmlwdG9yXCIsY29udGVudERlc2NyaXB0b3I6by5Db250ZW50RGVzY3JpcHRvci5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAxMTpjLnZhcmlhbnRDb250ZW50PXskY2FzZTpcImhsc1ZvZFN0cmVhbWluZ1wiLGhsc1ZvZFN0cmVhbWluZzp0Lkhsc1ZvZFN0cmVhbWluZy5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBjfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXt2YXJpYW50TmFtZTowLG1ldGFkYXRhOnZvaWQgMCxzdGF0dXM6MCx2YXJpYW50Q29udGVudDp2b2lkIDB9O3JldHVybiBuLnZhcmlhbnROYW1lPWUudmFyaWFudE5hbWU/PzAsbi5tZXRhZGF0YT12b2lkIDAhPT1lLm1ldGFkYXRhJiZudWxsIT09ZS5tZXRhZGF0YT9pLk1lZGlhVmFyaWFudE1ldGFkYXRhLmZyb21QYXJ0aWFsKGUubWV0YWRhdGEpOnZvaWQgMCxuLnN0YXR1cz1lLnN0YXR1cz8/MCxcIm92ZXJyaWRlQ29udGVudERlc2NyaXB0b3JcIj09PWUudmFyaWFudENvbnRlbnQ/LiRjYXNlJiZ2b2lkIDAhPT1lLnZhcmlhbnRDb250ZW50Py5vdmVycmlkZUNvbnRlbnREZXNjcmlwdG9yJiZudWxsIT09ZS52YXJpYW50Q29udGVudD8ub3ZlcnJpZGVDb250ZW50RGVzY3JpcHRvciYmKG4udmFyaWFudENvbnRlbnQ9eyRjYXNlOlwib3ZlcnJpZGVDb250ZW50RGVzY3JpcHRvclwiLG92ZXJyaWRlQ29udGVudERlc2NyaXB0b3I6dC5Db250ZW50RGVzY3JpcHRvck92ZXJyaWRlLmZyb21QYXJ0aWFsKGUudmFyaWFudENvbnRlbnQub3ZlcnJpZGVDb250ZW50RGVzY3JpcHRvcil9KSxcImNvbnRlbnREZXNjcmlwdG9yXCI9PT1lLnZhcmlhbnRDb250ZW50Py4kY2FzZSYmdm9pZCAwIT09ZS52YXJpYW50Q29udGVudD8uY29udGVudERlc2NyaXB0b3ImJm51bGwhPT1lLnZhcmlhbnRDb250ZW50Py5jb250ZW50RGVzY3JpcHRvciYmKG4udmFyaWFudENvbnRlbnQ9eyRjYXNlOlwiY29udGVudERlc2NyaXB0b3JcIixjb250ZW50RGVzY3JpcHRvcjpvLkNvbnRlbnREZXNjcmlwdG9yLmZyb21QYXJ0aWFsKGUudmFyaWFudENvbnRlbnQuY29udGVudERlc2NyaXB0b3IpfSksXCJobHNWb2RTdHJlYW1pbmdcIj09PWUudmFyaWFudENvbnRlbnQ/LiRjYXNlJiZ2b2lkIDAhPT1lLnZhcmlhbnRDb250ZW50Py5obHNWb2RTdHJlYW1pbmcmJm51bGwhPT1lLnZhcmlhbnRDb250ZW50Py5obHNWb2RTdHJlYW1pbmcmJihuLnZhcmlhbnRDb250ZW50PXskY2FzZTpcImhsc1ZvZFN0cmVhbWluZ1wiLGhsc1ZvZFN0cmVhbWluZzp0Lkhsc1ZvZFN0cmVhbWluZy5mcm9tUGFydGlhbChlLnZhcmlhbnRDb250ZW50Lmhsc1ZvZFN0cmVhbWluZyl9KSxufX0sdC5Db250ZW50RGVzY3JpcHRvck92ZXJyaWRlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUuY29udGVudERlc2NyaXB0b3ImJm8uQ29udGVudERlc2NyaXB0b3IuZW5jb2RlKGUuY29udGVudERlc2NyaXB0b3IsdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksXCJ1c2VWYXJpYW50TmFtZVwiPT09ZS5maWxlU3VmZml4Py4kY2FzZSYmYS5FbXB0eS5lbmNvZGUoZS5maWxlU3VmZml4LnVzZVZhcmlhbnROYW1lLHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLFwidXNlQ3VzdG9tU3VmZml4XCI9PT1lLmZpbGVTdWZmaXg/LiRjYXNlJiZ0LnVpbnQzMigyNikuc3RyaW5nKGUuZmlsZVN1ZmZpeC51c2VDdXN0b21TdWZmaXgpLFwidXNlU3RhbmRhcmRFeHRlbnNpb25cIj09PWUuZmlsZUV4dGVuc2lvbj8uJGNhc2UmJnQudWludDMyKDMyKS5pbnQzMihlLmZpbGVFeHRlbnNpb24udXNlU3RhbmRhcmRFeHRlbnNpb24pLFwidXNlQ3VzdG9tRXh0ZW5zaW9uXCI9PT1lLmZpbGVFeHRlbnNpb24/LiRjYXNlJiZ0LnVpbnQzMig0Mikuc3RyaW5nKGUuZmlsZUV4dGVuc2lvbi51c2VDdXN0b21FeHRlbnNpb24pLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17Y29udGVudERlc2NyaXB0b3I6dm9pZCAwLGZpbGVTdWZmaXg6dm9pZCAwLGZpbGVFeHRlbnNpb246dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5jb250ZW50RGVzY3JpcHRvcj1vLkNvbnRlbnREZXNjcmlwdG9yLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMjppLmZpbGVTdWZmaXg9eyRjYXNlOlwidXNlVmFyaWFudE5hbWVcIix1c2VWYXJpYW50TmFtZTphLkVtcHR5LmRlY29kZShuLG4udWludDMyKCkpfTticmVhaztjYXNlIDM6aS5maWxlU3VmZml4PXskY2FzZTpcInVzZUN1c3RvbVN1ZmZpeFwiLHVzZUN1c3RvbVN1ZmZpeDpuLnN0cmluZygpfTticmVhaztjYXNlIDQ6aS5maWxlRXh0ZW5zaW9uPXskY2FzZTpcInVzZVN0YW5kYXJkRXh0ZW5zaW9uXCIsdXNlU3RhbmRhcmRFeHRlbnNpb246bi5pbnQzMigpfTticmVhaztjYXNlIDU6aS5maWxlRXh0ZW5zaW9uPXskY2FzZTpcInVzZUN1c3RvbUV4dGVuc2lvblwiLHVzZUN1c3RvbUV4dGVuc2lvbjpuLnN0cmluZygpfTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2NvbnRlbnREZXNjcmlwdG9yOnZvaWQgMCxmaWxlU3VmZml4OnZvaWQgMCxmaWxlRXh0ZW5zaW9uOnZvaWQgMH07cmV0dXJuIHQuY29udGVudERlc2NyaXB0b3I9dm9pZCAwIT09ZS5jb250ZW50RGVzY3JpcHRvciYmbnVsbCE9PWUuY29udGVudERlc2NyaXB0b3I/by5Db250ZW50RGVzY3JpcHRvci5mcm9tUGFydGlhbChlLmNvbnRlbnREZXNjcmlwdG9yKTp2b2lkIDAsXCJ1c2VWYXJpYW50TmFtZVwiPT09ZS5maWxlU3VmZml4Py4kY2FzZSYmdm9pZCAwIT09ZS5maWxlU3VmZml4Py51c2VWYXJpYW50TmFtZSYmbnVsbCE9PWUuZmlsZVN1ZmZpeD8udXNlVmFyaWFudE5hbWUmJih0LmZpbGVTdWZmaXg9eyRjYXNlOlwidXNlVmFyaWFudE5hbWVcIix1c2VWYXJpYW50TmFtZTphLkVtcHR5LmZyb21QYXJ0aWFsKGUuZmlsZVN1ZmZpeC51c2VWYXJpYW50TmFtZSl9KSxcInVzZUN1c3RvbVN1ZmZpeFwiPT09ZS5maWxlU3VmZml4Py4kY2FzZSYmdm9pZCAwIT09ZS5maWxlU3VmZml4Py51c2VDdXN0b21TdWZmaXgmJm51bGwhPT1lLmZpbGVTdWZmaXg/LnVzZUN1c3RvbVN1ZmZpeCYmKHQuZmlsZVN1ZmZpeD17JGNhc2U6XCJ1c2VDdXN0b21TdWZmaXhcIix1c2VDdXN0b21TdWZmaXg6ZS5maWxlU3VmZml4LnVzZUN1c3RvbVN1ZmZpeH0pLFwidXNlU3RhbmRhcmRFeHRlbnNpb25cIj09PWUuZmlsZUV4dGVuc2lvbj8uJGNhc2UmJnZvaWQgMCE9PWUuZmlsZUV4dGVuc2lvbj8udXNlU3RhbmRhcmRFeHRlbnNpb24mJm51bGwhPT1lLmZpbGVFeHRlbnNpb24/LnVzZVN0YW5kYXJkRXh0ZW5zaW9uJiYodC5maWxlRXh0ZW5zaW9uPXskY2FzZTpcInVzZVN0YW5kYXJkRXh0ZW5zaW9uXCIsdXNlU3RhbmRhcmRFeHRlbnNpb246ZS5maWxlRXh0ZW5zaW9uLnVzZVN0YW5kYXJkRXh0ZW5zaW9ufSksXCJ1c2VDdXN0b21FeHRlbnNpb25cIj09PWUuZmlsZUV4dGVuc2lvbj8uJGNhc2UmJnZvaWQgMCE9PWUuZmlsZUV4dGVuc2lvbj8udXNlQ3VzdG9tRXh0ZW5zaW9uJiZudWxsIT09ZS5maWxlRXh0ZW5zaW9uPy51c2VDdXN0b21FeHRlbnNpb24mJih0LmZpbGVFeHRlbnNpb249eyRjYXNlOlwidXNlQ3VzdG9tRXh0ZW5zaW9uXCIsdXNlQ3VzdG9tRXh0ZW5zaW9uOmUuZmlsZUV4dGVuc2lvbi51c2VDdXN0b21FeHRlbnNpb259KSx0fX0sdC5IbHNWb2RTdHJlYW1pbmc9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5tYXN0ZXJNYW5pZmVzdCYmby5Db250ZW50RGVzY3JpcHRvci5lbmNvZGUoZS5tYXN0ZXJNYW5pZmVzdCx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e21hc3Rlck1hbmlmZXN0OnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2kubWFzdGVyTWFuaWZlc3Q9by5Db250ZW50RGVzY3JpcHRvci5kZWNvZGUobixuLnVpbnQzMigpKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e21hc3Rlck1hbmlmZXN0OnZvaWQgMH07cmV0dXJuIHQubWFzdGVyTWFuaWZlc3Q9dm9pZCAwIT09ZS5tYXN0ZXJNYW5pZmVzdCYmbnVsbCE9PWUubWFzdGVyTWFuaWZlc3Q/by5Db250ZW50RGVzY3JpcHRvci5mcm9tUGFydGlhbChlLm1hc3Rlck1hbmlmZXN0KTp2b2lkIDAsdH19fSw2MTg4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkltYWdlTWV0YWRhdGE9dC5WaWRlb01ldGFkYXRhX1NlZWtQb2ludD10LlZpZGVvTWV0YWRhdGFfUHJlZmV0Y2hIaW50PXQuVmlkZW9NZXRhZGF0YT10Lk1lZGlhVmFyaWFudE1ldGFkYXRhPXQuSW1hZ2VNZXRhZGF0YV9JbWFnZUZvcm1hdD10LlZpZGVvTWV0YWRhdGFfVmlkZW9Gb3JtYXQ9dm9pZCAwO2NvbnN0IGk9cihuKDQxNTgzKSksbz1yKG4oNjIxMDApKTtmdW5jdGlvbiBhKGUpe3JldHVybiBlLnRvU3RyaW5nKCl9dmFyIHMsYzsoYz10LlZpZGVvTWV0YWRhdGFfVmlkZW9Gb3JtYXR8fCh0LlZpZGVvTWV0YWRhdGFfVmlkZW9Gb3JtYXQ9e30pKVtjLlVOS05PV049MF09XCJVTktOT1dOXCIsY1tjLkFWQz0xXT1cIkFWQ1wiLGNbYy5IRVZDPTJdPVwiSEVWQ1wiLGNbYy5WUDk9M109XCJWUDlcIixjW2MuQVYxPTRdPVwiQVYxXCIsY1tjLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwocz10LkltYWdlTWV0YWRhdGFfSW1hZ2VGb3JtYXR8fCh0LkltYWdlTWV0YWRhdGFfSW1hZ2VGb3JtYXQ9e30pKVtzLlVOS05PV049MF09XCJVTktOT1dOXCIsc1tzLkpQRUc9MV09XCJKUEVHXCIsc1tzLldFQlA9Ml09XCJXRUJQXCIsc1tzLlBORz0zXT1cIlBOR1wiLHNbcy5HSUY9NF09XCJHSUZcIixzW3MuQVZJRj01XT1cIkFWSUZcIixzW3MuSEVJRj02XT1cIkhFSUZcIixzW3MuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLHQuTWVkaWFWYXJpYW50TWV0YWRhdGE9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cInZpZGVvTWV0YWRhdGFcIj09PWUubWV0YWRhdGE/LiRjYXNlJiZ0LlZpZGVvTWV0YWRhdGEuZW5jb2RlKGUubWV0YWRhdGEudmlkZW9NZXRhZGF0YSxuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSxcImltYWdlTWV0YWRhdGFcIj09PWUubWV0YWRhdGE/LiRjYXNlJiZ0LkltYWdlTWV0YWRhdGEuZW5jb2RlKGUubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YSxuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGE9e21ldGFkYXRhOnZvaWQgMH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmEubWV0YWRhdGE9eyRjYXNlOlwidmlkZW9NZXRhZGF0YVwiLHZpZGVvTWV0YWRhdGE6dC5WaWRlb01ldGFkYXRhLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDI6YS5tZXRhZGF0YT17JGNhc2U6XCJpbWFnZU1ldGFkYXRhXCIsaW1hZ2VNZXRhZGF0YTp0LkltYWdlTWV0YWRhdGEuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17bWV0YWRhdGE6dm9pZCAwfTtyZXR1cm5cInZpZGVvTWV0YWRhdGFcIj09PWUubWV0YWRhdGE/LiRjYXNlJiZ2b2lkIDAhPT1lLm1ldGFkYXRhPy52aWRlb01ldGFkYXRhJiZudWxsIT09ZS5tZXRhZGF0YT8udmlkZW9NZXRhZGF0YSYmKG4ubWV0YWRhdGE9eyRjYXNlOlwidmlkZW9NZXRhZGF0YVwiLHZpZGVvTWV0YWRhdGE6dC5WaWRlb01ldGFkYXRhLmZyb21QYXJ0aWFsKGUubWV0YWRhdGEudmlkZW9NZXRhZGF0YSl9KSxcImltYWdlTWV0YWRhdGFcIj09PWUubWV0YWRhdGE/LiRjYXNlJiZ2b2lkIDAhPT1lLm1ldGFkYXRhPy5pbWFnZU1ldGFkYXRhJiZudWxsIT09ZS5tZXRhZGF0YT8uaW1hZ2VNZXRhZGF0YSYmKG4ubWV0YWRhdGE9eyRjYXNlOlwiaW1hZ2VNZXRhZGF0YVwiLGltYWdlTWV0YWRhdGE6dC5JbWFnZU1ldGFkYXRhLmZyb21QYXJ0aWFsKGUubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YSl9KSxufX0sdC5WaWRlb01ldGFkYXRhPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7XCIwXCIhPT1lLnNpemVCeXRlcyYmbi51aW50MzIoOCkudWludDY0KGUuc2l6ZUJ5dGVzKSwwIT09ZS5zc2ltJiZuLnVpbnQzMigyMSkuZmxvYXQoZS5zc2ltKSwwIT09ZS5wc25yJiZuLnVpbnQzMigyOSkuZmxvYXQoZS5wc25yKSwhMD09PWUuZmFzdHN0YXJ0JiZuLnVpbnQzMigzMikuYm9vbChlLmZhc3RzdGFydCksMCE9PWUudm1hZiYmbi51aW50MzIoNDUpLmZsb2F0KGUudm1hZiksMCE9PWUud2lkdGgmJm4udWludDMyKDQ4KS51aW50MzIoZS53aWR0aCksMCE9PWUuaGVpZ2h0JiZuLnVpbnQzMig1NikudWludDMyKGUuaGVpZ2h0KSwwIT09ZS52aWRlb0Zvcm1hdCYmbi51aW50MzIoNjQpLmludDMyKGUudmlkZW9Gb3JtYXQpLHZvaWQgMCE9PWUucHJlZmV0Y2hIaW50JiZ0LlZpZGVvTWV0YWRhdGFfUHJlZmV0Y2hIaW50LmVuY29kZShlLnByZWZldGNoSGludCxuLnVpbnQzMig3NCkuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS5sZW5ndGhNcyYmbi51aW50MzIoODApLnVpbnQzMihlLmxlbmd0aE1zKTtmb3IoY29uc3QgciBvZiBlLnNlZWtQb2ludHMpdC5WaWRlb01ldGFkYXRhX1NlZWtQb2ludC5lbmNvZGUocixuLnVpbnQzMig5MCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBzPXtzaXplQnl0ZXM6XCIwXCIsc3NpbTowLHBzbnI6MCxmYXN0c3RhcnQ6ITEsdm1hZjowLHdpZHRoOjAsaGVpZ2h0OjAsdmlkZW9Gb3JtYXQ6MCxwcmVmZXRjaEhpbnQ6dm9pZCAwLGxlbmd0aE1zOjAsc2Vla1BvaW50czpbXX07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOnMuc2l6ZUJ5dGVzPWEoci51aW50NjQoKSk7YnJlYWs7Y2FzZSAyOnMuc3NpbT1yLmZsb2F0KCk7YnJlYWs7Y2FzZSAzOnMucHNucj1yLmZsb2F0KCk7YnJlYWs7Y2FzZSA0OnMuZmFzdHN0YXJ0PXIuYm9vbCgpO2JyZWFrO2Nhc2UgNTpzLnZtYWY9ci5mbG9hdCgpO2JyZWFrO2Nhc2UgNjpzLndpZHRoPXIudWludDMyKCk7YnJlYWs7Y2FzZSA3OnMuaGVpZ2h0PXIudWludDMyKCk7YnJlYWs7Y2FzZSA4OnMudmlkZW9Gb3JtYXQ9ci5pbnQzMigpO2JyZWFrO2Nhc2UgOTpzLnByZWZldGNoSGludD10LlZpZGVvTWV0YWRhdGFfUHJlZmV0Y2hIaW50LmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMTA6cy5sZW5ndGhNcz1yLnVpbnQzMigpO2JyZWFrO2Nhc2UgMTE6cy5zZWVrUG9pbnRzLnB1c2godC5WaWRlb01ldGFkYXRhX1NlZWtQb2ludC5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBzfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtzaXplQnl0ZXM6XCIwXCIsc3NpbTowLHBzbnI6MCxmYXN0c3RhcnQ6ITEsdm1hZjowLHdpZHRoOjAsaGVpZ2h0OjAsdmlkZW9Gb3JtYXQ6MCxwcmVmZXRjaEhpbnQ6dm9pZCAwLGxlbmd0aE1zOjAsc2Vla1BvaW50czpbXX07cmV0dXJuIG4uc2l6ZUJ5dGVzPWUuc2l6ZUJ5dGVzPz9cIjBcIixuLnNzaW09ZS5zc2ltPz8wLG4ucHNucj1lLnBzbnI/PzAsbi5mYXN0c3RhcnQ9ZS5mYXN0c3RhcnQ/PyExLG4udm1hZj1lLnZtYWY/PzAsbi53aWR0aD1lLndpZHRoPz8wLG4uaGVpZ2h0PWUuaGVpZ2h0Pz8wLG4udmlkZW9Gb3JtYXQ9ZS52aWRlb0Zvcm1hdD8/MCxuLnByZWZldGNoSGludD12b2lkIDAhPT1lLnByZWZldGNoSGludCYmbnVsbCE9PWUucHJlZmV0Y2hIaW50P3QuVmlkZW9NZXRhZGF0YV9QcmVmZXRjaEhpbnQuZnJvbVBhcnRpYWwoZS5wcmVmZXRjaEhpbnQpOnZvaWQgMCxuLmxlbmd0aE1zPWUubGVuZ3RoTXM/PzAsbi5zZWVrUG9pbnRzPWUuc2Vla1BvaW50cz8ubWFwKChlPT50LlZpZGVvTWV0YWRhdGFfU2Vla1BvaW50LmZyb21QYXJ0aWFsKGUpKSl8fFtdLG59fSx0LlZpZGVvTWV0YWRhdGFfUHJlZmV0Y2hIaW50PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7dC51aW50MzIoMTApLmZvcmsoKTtmb3IoY29uc3QgbiBvZiBlLmtiUGVyVGltZVdpbmRvdyl0LnVpbnQzMihuKTtyZXR1cm4gdC5sZGVsaW0oKSwwIT09ZS50aW1lV2luZG93TXMmJnQudWludDMyKDE2KS51aW50MzIoZS50aW1lV2luZG93TXMpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17a2JQZXJUaW1lV2luZG93OltdLHRpbWVXaW5kb3dNczowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aWYoMj09KDcmZSkpe2NvbnN0IGU9bi51aW50MzIoKStuLnBvcztmb3IoO24ucG9zPGU7KWkua2JQZXJUaW1lV2luZG93LnB1c2gobi51aW50MzIoKSl9ZWxzZSBpLmtiUGVyVGltZVdpbmRvdy5wdXNoKG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMjppLnRpbWVXaW5kb3dNcz1uLnVpbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17a2JQZXJUaW1lV2luZG93OltdLHRpbWVXaW5kb3dNczowfTtyZXR1cm4gdC5rYlBlclRpbWVXaW5kb3c9ZS5rYlBlclRpbWVXaW5kb3c/Lm1hcCgoZT0+ZSkpfHxbXSx0LnRpbWVXaW5kb3dNcz1lLnRpbWVXaW5kb3dNcz8/MCx0fX0sdC5WaWRlb01ldGFkYXRhX1NlZWtQb2ludD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS50aW1lT2Zmc2V0TXMmJnQudWludDMyKDgpLnVpbnQzMihlLnRpbWVPZmZzZXRNcyksMCE9PWUuYnl0ZU9mZnNldCYmdC51aW50MzIoMTYpLnVpbnQzMihlLmJ5dGVPZmZzZXQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17dGltZU9mZnNldE1zOjAsYnl0ZU9mZnNldDowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS50aW1lT2Zmc2V0TXM9bi51aW50MzIoKTticmVhaztjYXNlIDI6aS5ieXRlT2Zmc2V0PW4udWludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt0aW1lT2Zmc2V0TXM6MCxieXRlT2Zmc2V0OjB9O3JldHVybiB0LnRpbWVPZmZzZXRNcz1lLnRpbWVPZmZzZXRNcz8/MCx0LmJ5dGVPZmZzZXQ9ZS5ieXRlT2Zmc2V0Pz8wLHR9fSx0LkltYWdlTWV0YWRhdGE9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIjBcIiE9PWUuc2l6ZUJ5dGVzJiZ0LnVpbnQzMig4KS51aW50NjQoZS5zaXplQnl0ZXMpLDAhPT1lLndpZHRoJiZ0LnVpbnQzMigxNikudWludDMyKGUud2lkdGgpLDAhPT1lLmhlaWdodCYmdC51aW50MzIoMjQpLnVpbnQzMihlLmhlaWdodCksMCE9PWUuaW1hZ2VGb3JtYXQmJnQudWludDMyKDMyKS5pbnQzMihlLmltYWdlRm9ybWF0KSwwIT09ZS5zcmNXaWR0aCYmdC51aW50MzIoNDApLnVpbnQzMihlLnNyY1dpZHRoKSwwIT09ZS5zcmNIZWlnaHQmJnQudWludDMyKDQ4KS51aW50MzIoZS5zcmNIZWlnaHQpLDAhPT1lLnNyY0ltYWdlRm9ybWF0JiZ0LnVpbnQzMig1NikuaW50MzIoZS5zcmNJbWFnZUZvcm1hdCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtzaXplQnl0ZXM6XCIwXCIsd2lkdGg6MCxoZWlnaHQ6MCxpbWFnZUZvcm1hdDowLHNyY1dpZHRoOjAsc3JjSGVpZ2h0OjAsc3JjSW1hZ2VGb3JtYXQ6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuc2l6ZUJ5dGVzPWEobi51aW50NjQoKSk7YnJlYWs7Y2FzZSAyOmkud2lkdGg9bi51aW50MzIoKTticmVhaztjYXNlIDM6aS5oZWlnaHQ9bi51aW50MzIoKTticmVhaztjYXNlIDQ6aS5pbWFnZUZvcm1hdD1uLmludDMyKCk7YnJlYWs7Y2FzZSA1Omkuc3JjV2lkdGg9bi51aW50MzIoKTticmVhaztjYXNlIDY6aS5zcmNIZWlnaHQ9bi51aW50MzIoKTticmVhaztjYXNlIDc6aS5zcmNJbWFnZUZvcm1hdD1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtzaXplQnl0ZXM6XCIwXCIsd2lkdGg6MCxoZWlnaHQ6MCxpbWFnZUZvcm1hdDowLHNyY1dpZHRoOjAsc3JjSGVpZ2h0OjAsc3JjSW1hZ2VGb3JtYXQ6MH07cmV0dXJuIHQuc2l6ZUJ5dGVzPWUuc2l6ZUJ5dGVzPz9cIjBcIix0LndpZHRoPWUud2lkdGg/PzAsdC5oZWlnaHQ9ZS5oZWlnaHQ/PzAsdC5pbWFnZUZvcm1hdD1lLmltYWdlRm9ybWF0Pz8wLHQuc3JjV2lkdGg9ZS5zcmNXaWR0aD8/MCx0LnNyY0hlaWdodD1lLnNyY0hlaWdodD8/MCx0LnNyY0ltYWdlRm9ybWF0PWUuc3JjSW1hZ2VGb3JtYXQ/PzAsdH19LG8uZGVmYXVsdC51dGlsLkxvbmchPT1pLmRlZmF1bHQmJihvLmRlZmF1bHQudXRpbC5Mb25nPWkuZGVmYXVsdCxvLmRlZmF1bHQuY29uZmlndXJlKCkpfSwzMzU3OTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5OZXR3b3JrTWFwcGluZz10LkxvY2F0aW9uPXQuRGVsaXZlcnlOZXR3b3JrPXZvaWQgMDtjb25zdCBpPXIobig0MTU4MykpLG89big5NzYyOSksYT1yKG4oNjIxMDApKTtmdW5jdGlvbiBzKGUpe3JldHVybiBlLnRvU3RyaW5nKCl9dC5EZWxpdmVyeU5ldHdvcms9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtcInByb3ZpZGVySWRcIj09PWUuaWQ/LiRjYXNlJiZ0LnVpbnQzMig4KS5pbnQ2NChlLmlkLnByb3ZpZGVySWQpLFwiY2RuSWRcIj09PWUuaWQ/LiRjYXNlJiZ0LnVpbnQzMigxNikuaW50NjQoZS5pZC5jZG5JZCksXCJcIiE9PWUuaG9zdFBhdHRlcm4mJnQudWludDMyKDI2KS5zdHJpbmcoZS5ob3N0UGF0dGVybik7Zm9yKGNvbnN0IG4gb2YgZS5ob3N0UGF0dGVybnMpdC51aW50MzIoMzQpLnN0cmluZyhuKTtyZXR1cm4hMD09PWUuaXNYdCYmdC51aW50MzIoNDApLmJvb2woZS5pc1h0KSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2lkOnZvaWQgMCxob3N0UGF0dGVybjpcIlwiLGhvc3RQYXR0ZXJuczpbXSxpc1h0OiExfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5pZD17JGNhc2U6XCJwcm92aWRlcklkXCIscHJvdmlkZXJJZDpzKG4uaW50NjQoKSl9O2JyZWFrO2Nhc2UgMjppLmlkPXskY2FzZTpcImNkbklkXCIsY2RuSWQ6cyhuLmludDY0KCkpfTticmVhaztjYXNlIDM6aS5ob3N0UGF0dGVybj1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNDppLmhvc3RQYXR0ZXJucy5wdXNoKG4uc3RyaW5nKCkpO2JyZWFrO2Nhc2UgNTppLmlzWHQ9bi5ib29sKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtpZDp2b2lkIDAsaG9zdFBhdHRlcm46XCJcIixob3N0UGF0dGVybnM6W10saXNYdDohMX07cmV0dXJuXCJwcm92aWRlcklkXCI9PT1lLmlkPy4kY2FzZSYmdm9pZCAwIT09ZS5pZD8ucHJvdmlkZXJJZCYmbnVsbCE9PWUuaWQ/LnByb3ZpZGVySWQmJih0LmlkPXskY2FzZTpcInByb3ZpZGVySWRcIixwcm92aWRlcklkOmUuaWQucHJvdmlkZXJJZH0pLFwiY2RuSWRcIj09PWUuaWQ/LiRjYXNlJiZ2b2lkIDAhPT1lLmlkPy5jZG5JZCYmbnVsbCE9PWUuaWQ/LmNkbklkJiYodC5pZD17JGNhc2U6XCJjZG5JZFwiLGNkbklkOmUuaWQuY2RuSWR9KSx0Lmhvc3RQYXR0ZXJuPWUuaG9zdFBhdHRlcm4/P1wiXCIsdC5ob3N0UGF0dGVybnM9ZS5ob3N0UGF0dGVybnM/Lm1hcCgoZT0+ZSkpfHxbXSx0LmlzWHQ9ZS5pc1h0Pz8hMSx0fX0sdC5Mb2NhdGlvbj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO1wiMFwiIT09ZS5sb2NhdGlvbklkJiZ0LnVpbnQzMig4KS5pbnQ2NChlLmxvY2F0aW9uSWQpLFwiXCIhPT1lLm5hbWUmJnQudWludDMyKDE4KS5zdHJpbmcoZS5uYW1lKSxcIlwiIT09ZS5yZWdpb24mJnQudWludDMyKDI2KS5zdHJpbmcoZS5yZWdpb24pLFwiMFwiIT09ZS5wcm92aWRlcklkJiZ0LnVpbnQzMigzMikuaW50NjQoZS5wcm92aWRlcklkKSxcIlwiIT09ZS5wYXRoUGF0dGVybiYmdC51aW50MzIoNDIpLnN0cmluZyhlLnBhdGhQYXR0ZXJuKTtmb3IoY29uc3QgbiBvZiBlLmhvc3RQYXJ0cyl0LnVpbnQzMig1MCkuc3RyaW5nKG4pO3JldHVybiB0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2xvY2F0aW9uSWQ6XCIwXCIsbmFtZTpcIlwiLHJlZ2lvbjpcIlwiLHByb3ZpZGVySWQ6XCIwXCIscGF0aFBhdHRlcm46XCJcIixob3N0UGFydHM6W119O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmxvY2F0aW9uSWQ9cyhuLmludDY0KCkpO2JyZWFrO2Nhc2UgMjppLm5hbWU9bi5zdHJpbmcoKTticmVhaztjYXNlIDM6aS5yZWdpb249bi5zdHJpbmcoKTticmVhaztjYXNlIDQ6aS5wcm92aWRlcklkPXMobi5pbnQ2NCgpKTticmVhaztjYXNlIDU6aS5wYXRoUGF0dGVybj1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNjppLmhvc3RQYXJ0cy5wdXNoKG4uc3RyaW5nKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17bG9jYXRpb25JZDpcIjBcIixuYW1lOlwiXCIscmVnaW9uOlwiXCIscHJvdmlkZXJJZDpcIjBcIixwYXRoUGF0dGVybjpcIlwiLGhvc3RQYXJ0czpbXX07cmV0dXJuIHQubG9jYXRpb25JZD1lLmxvY2F0aW9uSWQ/P1wiMFwiLHQubmFtZT1lLm5hbWU/P1wiXCIsdC5yZWdpb249ZS5yZWdpb24/P1wiXCIsdC5wcm92aWRlcklkPWUucHJvdmlkZXJJZD8/XCIwXCIsdC5wYXRoUGF0dGVybj1lLnBhdGhQYXR0ZXJuPz9cIlwiLHQuaG9zdFBhcnRzPWUuaG9zdFBhcnRzPy5tYXAoKGU9PmUpKXx8W10sdH19LHQuTmV0d29ya01hcHBpbmc9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgciBvZiBlLmRlbGl2ZXJ5TmV0d29ya3MpdC5EZWxpdmVyeU5ldHdvcmsuZW5jb2RlKHIsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7Zm9yKGNvbnN0IHIgb2YgZS5sb2NhdGlvbnMpdC5Mb2NhdGlvbi5lbmNvZGUocixuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKTtmb3IoY29uc3QgdCBvZiBlLmRlbGl2ZXJ5UGF0aHMpby5EZWxpdmVyeVBhdGguZW5jb2RlKHQsbi51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuXCIwXCIhPT1lLnZlcnNpb24mJm4udWludDMyKDMyKS51aW50NjQoZS52ZXJzaW9uKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGM9e2RlbGl2ZXJ5TmV0d29ya3M6W10sbG9jYXRpb25zOltdLGRlbGl2ZXJ5UGF0aHM6W10sdmVyc2lvbjpcIjBcIn07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmMuZGVsaXZlcnlOZXR3b3Jrcy5wdXNoKHQuRGVsaXZlcnlOZXR3b3JrLmRlY29kZShyLHIudWludDMyKCkpKTticmVhaztjYXNlIDI6Yy5sb2NhdGlvbnMucHVzaCh0LkxvY2F0aW9uLmRlY29kZShyLHIudWludDMyKCkpKTticmVhaztjYXNlIDM6Yy5kZWxpdmVyeVBhdGhzLnB1c2goby5EZWxpdmVyeVBhdGguZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2Nhc2UgNDpjLnZlcnNpb249cyhyLnVpbnQ2NCgpKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIGN9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e2RlbGl2ZXJ5TmV0d29ya3M6W10sbG9jYXRpb25zOltdLGRlbGl2ZXJ5UGF0aHM6W10sdmVyc2lvbjpcIjBcIn07cmV0dXJuIG4uZGVsaXZlcnlOZXR3b3Jrcz1lLmRlbGl2ZXJ5TmV0d29ya3M/Lm1hcCgoZT0+dC5EZWxpdmVyeU5ldHdvcmsuZnJvbVBhcnRpYWwoZSkpKXx8W10sbi5sb2NhdGlvbnM9ZS5sb2NhdGlvbnM/Lm1hcCgoZT0+dC5Mb2NhdGlvbi5mcm9tUGFydGlhbChlKSkpfHxbXSxuLmRlbGl2ZXJ5UGF0aHM9ZS5kZWxpdmVyeVBhdGhzPy5tYXAoKGU9Pm8uRGVsaXZlcnlQYXRoLmZyb21QYXJ0aWFsKGUpKSl8fFtdLG4udmVyc2lvbj1lLnZlcnNpb24/P1wiMFwiLG59fSxhLmRlZmF1bHQudXRpbC5Mb25nIT09aS5kZWZhdWx0JiYoYS5kZWZhdWx0LnV0aWwuTG9uZz1pLmRlZmF1bHQsYS5kZWZhdWx0LmNvbmZpZ3VyZSgpKX0sOTc5NDk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQWJyTWVkaWE9dC5BYnJWb2RPdXRwdXRNZWRpYV9XZWJ0dFN1YnRpdGxlc0VudHJ5PXQuQWJyVm9kT3V0cHV0TWVkaWFfVmlkZW9NZWRpYXNFbnRyeT10LkFiclZvZE91dHB1dE1lZGlhPXQuSGxzTWVkaWE9dC5IbHNWb2RPdXRwdXRNZWRpYV9XZWJ0dFN1YnRpdGxlc0VudHJ5PXQuSGxzVm9kT3V0cHV0TWVkaWFfVmlkZW9NZWRpYXNFbnRyeT10Lkhsc1ZvZE91dHB1dE1lZGlhPXQuVmlkZW9PdXRwdXRNZWRpYT10LlZpZGVvU2VnbWVudD10LlZpZGVvT3V0cHV0U2VnbWVudHM9dC5PdXRwdXRNZWRpYT12b2lkIDA7Y29uc3QgaT1uKDg2NTA3KSxvPW4oMzQ4NTcpLGE9cihuKDYyMTAwKSk7ZnVuY3Rpb24gcygpe3JldHVybntvdXRwdXRUeXBlOnZvaWQgMCxrZXk6bmV3IFVpbnQ4QXJyYXksaXY6bmV3IFVpbnQ4QXJyYXl9fXQuT3V0cHV0TWVkaWE9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIm91dHB1dE1lZGlhXCI9PT1lLm91dHB1dFR5cGU/LiRjYXNlJiZpLk1lZGlhLmVuY29kZShlLm91dHB1dFR5cGUub3V0cHV0TWVkaWEsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksXCJvdXRwdXRVbmFyY2hpdmVkTWVkaWFcIj09PWUub3V0cHV0VHlwZT8uJGNhc2UmJm8uVW5hcmNoaXZlZE1lZGlhLmVuY29kZShlLm91dHB1dFR5cGUub3V0cHV0VW5hcmNoaXZlZE1lZGlhLG4udWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLFwib3V0cHV0QnVybnRpbk1lZGlhXCI9PT1lLm91dHB1dFR5cGU/LiRjYXNlJiZpLk1lZGlhLmVuY29kZShlLm91dHB1dFR5cGUub3V0cHV0QnVybnRpbk1lZGlhLG4udWludDMyKDU4KS5mb3JrKCkpLmxkZWxpbSgpLFwiaGxzVm9kT3V0cHV0TWVkaWFcIj09PWUub3V0cHV0VHlwZT8uJGNhc2UmJnQuSGxzVm9kT3V0cHV0TWVkaWEuZW5jb2RlKGUub3V0cHV0VHlwZS5obHNWb2RPdXRwdXRNZWRpYSxuLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSxcInZpZGVvT3V0cHV0TWVkaWFcIj09PWUub3V0cHV0VHlwZT8uJGNhc2UmJnQuVmlkZW9PdXRwdXRNZWRpYS5lbmNvZGUoZS5vdXRwdXRUeXBlLnZpZGVvT3V0cHV0TWVkaWEsbi51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCksXCJ2aWRlb091dHB1dFNlZ21lbnRzXCI9PT1lLm91dHB1dFR5cGU/LiRjYXNlJiZ0LlZpZGVvT3V0cHV0U2VnbWVudHMuZW5jb2RlKGUub3V0cHV0VHlwZS52aWRlb091dHB1dFNlZ21lbnRzLG4udWludDMyKDQyKS5mb3JrKCkpLmxkZWxpbSgpLFwiYWJyVm9kT3V0cHV0TWVkaWFcIj09PWUub3V0cHV0VHlwZT8uJGNhc2UmJnQuQWJyVm9kT3V0cHV0TWVkaWEuZW5jb2RlKGUub3V0cHV0VHlwZS5hYnJWb2RPdXRwdXRNZWRpYSxuLnVpbnQzMig1MCkuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS5rZXkubGVuZ3RoJiZuLnVpbnQzMig4MikuYnl0ZXMoZS5rZXkpLDAhPT1lLml2Lmxlbmd0aCYmbi51aW50MzIoOTApLmJ5dGVzKGUuaXYpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgYz12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3QgbD1zKCk7Zm9yKDtyLnBvczxjOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmwub3V0cHV0VHlwZT17JGNhc2U6XCJvdXRwdXRNZWRpYVwiLG91dHB1dE1lZGlhOmkuTWVkaWEuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMjpsLm91dHB1dFR5cGU9eyRjYXNlOlwib3V0cHV0VW5hcmNoaXZlZE1lZGlhXCIsb3V0cHV0VW5hcmNoaXZlZE1lZGlhOm8uVW5hcmNoaXZlZE1lZGlhLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDc6bC5vdXRwdXRUeXBlPXskY2FzZTpcIm91dHB1dEJ1cm50aW5NZWRpYVwiLG91dHB1dEJ1cm50aW5NZWRpYTppLk1lZGlhLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDM6bC5vdXRwdXRUeXBlPXskY2FzZTpcImhsc1ZvZE91dHB1dE1lZGlhXCIsaGxzVm9kT3V0cHV0TWVkaWE6dC5IbHNWb2RPdXRwdXRNZWRpYS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA0Omwub3V0cHV0VHlwZT17JGNhc2U6XCJ2aWRlb091dHB1dE1lZGlhXCIsdmlkZW9PdXRwdXRNZWRpYTp0LlZpZGVvT3V0cHV0TWVkaWEuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgNTpsLm91dHB1dFR5cGU9eyRjYXNlOlwidmlkZW9PdXRwdXRTZWdtZW50c1wiLHZpZGVvT3V0cHV0U2VnbWVudHM6dC5WaWRlb091dHB1dFNlZ21lbnRzLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDY6bC5vdXRwdXRUeXBlPXskY2FzZTpcImFiclZvZE91dHB1dE1lZGlhXCIsYWJyVm9kT3V0cHV0TWVkaWE6dC5BYnJWb2RPdXRwdXRNZWRpYS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAxMDpsLmtleT1yLmJ5dGVzKCk7YnJlYWs7Y2FzZSAxMTpsLml2PXIuYnl0ZXMoKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIGx9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49cygpO3JldHVyblwib3V0cHV0TWVkaWFcIj09PWUub3V0cHV0VHlwZT8uJGNhc2UmJnZvaWQgMCE9PWUub3V0cHV0VHlwZT8ub3V0cHV0TWVkaWEmJm51bGwhPT1lLm91dHB1dFR5cGU/Lm91dHB1dE1lZGlhJiYobi5vdXRwdXRUeXBlPXskY2FzZTpcIm91dHB1dE1lZGlhXCIsb3V0cHV0TWVkaWE6aS5NZWRpYS5mcm9tUGFydGlhbChlLm91dHB1dFR5cGUub3V0cHV0TWVkaWEpfSksXCJvdXRwdXRVbmFyY2hpdmVkTWVkaWFcIj09PWUub3V0cHV0VHlwZT8uJGNhc2UmJnZvaWQgMCE9PWUub3V0cHV0VHlwZT8ub3V0cHV0VW5hcmNoaXZlZE1lZGlhJiZudWxsIT09ZS5vdXRwdXRUeXBlPy5vdXRwdXRVbmFyY2hpdmVkTWVkaWEmJihuLm91dHB1dFR5cGU9eyRjYXNlOlwib3V0cHV0VW5hcmNoaXZlZE1lZGlhXCIsb3V0cHV0VW5hcmNoaXZlZE1lZGlhOm8uVW5hcmNoaXZlZE1lZGlhLmZyb21QYXJ0aWFsKGUub3V0cHV0VHlwZS5vdXRwdXRVbmFyY2hpdmVkTWVkaWEpfSksXCJvdXRwdXRCdXJudGluTWVkaWFcIj09PWUub3V0cHV0VHlwZT8uJGNhc2UmJnZvaWQgMCE9PWUub3V0cHV0VHlwZT8ub3V0cHV0QnVybnRpbk1lZGlhJiZudWxsIT09ZS5vdXRwdXRUeXBlPy5vdXRwdXRCdXJudGluTWVkaWEmJihuLm91dHB1dFR5cGU9eyRjYXNlOlwib3V0cHV0QnVybnRpbk1lZGlhXCIsb3V0cHV0QnVybnRpbk1lZGlhOmkuTWVkaWEuZnJvbVBhcnRpYWwoZS5vdXRwdXRUeXBlLm91dHB1dEJ1cm50aW5NZWRpYSl9KSxcImhsc1ZvZE91dHB1dE1lZGlhXCI9PT1lLm91dHB1dFR5cGU/LiRjYXNlJiZ2b2lkIDAhPT1lLm91dHB1dFR5cGU/Lmhsc1ZvZE91dHB1dE1lZGlhJiZudWxsIT09ZS5vdXRwdXRUeXBlPy5obHNWb2RPdXRwdXRNZWRpYSYmKG4ub3V0cHV0VHlwZT17JGNhc2U6XCJobHNWb2RPdXRwdXRNZWRpYVwiLGhsc1ZvZE91dHB1dE1lZGlhOnQuSGxzVm9kT3V0cHV0TWVkaWEuZnJvbVBhcnRpYWwoZS5vdXRwdXRUeXBlLmhsc1ZvZE91dHB1dE1lZGlhKX0pLFwidmlkZW9PdXRwdXRNZWRpYVwiPT09ZS5vdXRwdXRUeXBlPy4kY2FzZSYmdm9pZCAwIT09ZS5vdXRwdXRUeXBlPy52aWRlb091dHB1dE1lZGlhJiZudWxsIT09ZS5vdXRwdXRUeXBlPy52aWRlb091dHB1dE1lZGlhJiYobi5vdXRwdXRUeXBlPXskY2FzZTpcInZpZGVvT3V0cHV0TWVkaWFcIix2aWRlb091dHB1dE1lZGlhOnQuVmlkZW9PdXRwdXRNZWRpYS5mcm9tUGFydGlhbChlLm91dHB1dFR5cGUudmlkZW9PdXRwdXRNZWRpYSl9KSxcInZpZGVvT3V0cHV0U2VnbWVudHNcIj09PWUub3V0cHV0VHlwZT8uJGNhc2UmJnZvaWQgMCE9PWUub3V0cHV0VHlwZT8udmlkZW9PdXRwdXRTZWdtZW50cyYmbnVsbCE9PWUub3V0cHV0VHlwZT8udmlkZW9PdXRwdXRTZWdtZW50cyYmKG4ub3V0cHV0VHlwZT17JGNhc2U6XCJ2aWRlb091dHB1dFNlZ21lbnRzXCIsdmlkZW9PdXRwdXRTZWdtZW50czp0LlZpZGVvT3V0cHV0U2VnbWVudHMuZnJvbVBhcnRpYWwoZS5vdXRwdXRUeXBlLnZpZGVvT3V0cHV0U2VnbWVudHMpfSksXCJhYnJWb2RPdXRwdXRNZWRpYVwiPT09ZS5vdXRwdXRUeXBlPy4kY2FzZSYmdm9pZCAwIT09ZS5vdXRwdXRUeXBlPy5hYnJWb2RPdXRwdXRNZWRpYSYmbnVsbCE9PWUub3V0cHV0VHlwZT8uYWJyVm9kT3V0cHV0TWVkaWEmJihuLm91dHB1dFR5cGU9eyRjYXNlOlwiYWJyVm9kT3V0cHV0TWVkaWFcIixhYnJWb2RPdXRwdXRNZWRpYTp0LkFiclZvZE91dHB1dE1lZGlhLmZyb21QYXJ0aWFsKGUub3V0cHV0VHlwZS5hYnJWb2RPdXRwdXRNZWRpYSl9KSxuLmtleT1lLmtleT8/bmV3IFVpbnQ4QXJyYXksbi5pdj1lLml2Pz9uZXcgVWludDhBcnJheSxufX0sdC5WaWRlb091dHB1dFNlZ21lbnRzPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7Zm9yKGNvbnN0IHIgb2YgZS52aWRlb1NlZ21lbnRzKXQuVmlkZW9TZWdtZW50LmVuY29kZShyLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiBufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89e3ZpZGVvU2VnbWVudHM6W119O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtlPj4+Mz09MT9vLnZpZGVvU2VnbWVudHMucHVzaCh0LlZpZGVvU2VnbWVudC5kZWNvZGUocixyLnVpbnQzMigpKSk6ci5za2lwVHlwZSg3JmUpfXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXt2aWRlb1NlZ21lbnRzOltdfTtyZXR1cm4gbi52aWRlb1NlZ21lbnRzPWUudmlkZW9TZWdtZW50cz8ubWFwKChlPT50LlZpZGVvU2VnbWVudC5mcm9tUGFydGlhbChlKSkpfHxbXSxufX0sdC5WaWRlb1NlZ21lbnQ9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS52aWRlb1NlZ21lbnQmJmkuTWVkaWEuZW5jb2RlKGUudmlkZW9TZWdtZW50LHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLFwiXCIhPT1lLm1lZGlhQnVuZGxlSWQmJnQudWludDMyKDE4KS5zdHJpbmcoZS5tZWRpYUJ1bmRsZUlkKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e3ZpZGVvU2VnbWVudDp2b2lkIDAsbWVkaWFCdW5kbGVJZDpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by52aWRlb1NlZ21lbnQ9aS5NZWRpYS5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDI6by5tZWRpYUJ1bmRsZUlkPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt2aWRlb1NlZ21lbnQ6dm9pZCAwLG1lZGlhQnVuZGxlSWQ6XCJcIn07cmV0dXJuIHQudmlkZW9TZWdtZW50PXZvaWQgMCE9PWUudmlkZW9TZWdtZW50JiZudWxsIT09ZS52aWRlb1NlZ21lbnQ/aS5NZWRpYS5mcm9tUGFydGlhbChlLnZpZGVvU2VnbWVudCk6dm9pZCAwLHQubWVkaWFCdW5kbGVJZD1lLm1lZGlhQnVuZGxlSWQ/P1wiXCIsdH19LHQuVmlkZW9PdXRwdXRNZWRpYT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLnZpZGVvTWVkaWEmJmkuTWVkaWEuZW5jb2RlKGUudmlkZW9NZWRpYSx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmZpcnN0RnJhbWVNZWRpYSYmaS5NZWRpYS5lbmNvZGUoZS5maXJzdEZyYW1lTWVkaWEsdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXt2aWRlb01lZGlhOnZvaWQgMCxmaXJzdEZyYW1lTWVkaWE6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by52aWRlb01lZGlhPWkuTWVkaWEuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOm8uZmlyc3RGcmFtZU1lZGlhPWkuTWVkaWEuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt2aWRlb01lZGlhOnZvaWQgMCxmaXJzdEZyYW1lTWVkaWE6dm9pZCAwfTtyZXR1cm4gdC52aWRlb01lZGlhPXZvaWQgMCE9PWUudmlkZW9NZWRpYSYmbnVsbCE9PWUudmlkZW9NZWRpYT9pLk1lZGlhLmZyb21QYXJ0aWFsKGUudmlkZW9NZWRpYSk6dm9pZCAwLHQuZmlyc3RGcmFtZU1lZGlhPXZvaWQgMCE9PWUuZmlyc3RGcmFtZU1lZGlhJiZudWxsIT09ZS5maXJzdEZyYW1lTWVkaWE/aS5NZWRpYS5mcm9tUGFydGlhbChlLmZpcnN0RnJhbWVNZWRpYSk6dm9pZCAwLHR9fSx0Lkhsc1ZvZE91dHB1dE1lZGlhPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUubWFpbk1hbmlmZXN0JiZpLk1lZGlhLmVuY29kZShlLm1haW5NYW5pZmVzdCxuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSxPYmplY3QuZW50cmllcyhlLnZpZGVvTWVkaWFzKS5mb3JFYWNoKChlPT57bGV0W3IsaV09ZTt0Lkhsc1ZvZE91dHB1dE1lZGlhX1ZpZGVvTWVkaWFzRW50cnkuZW5jb2RlKHtrZXk6cix2YWx1ZTppfSxuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKX0pKSx2b2lkIDAhPT1lLmF1ZGlvTWVkaWEmJnQuSGxzTWVkaWEuZW5jb2RlKGUuYXVkaW9NZWRpYSxuLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSxPYmplY3QuZW50cmllcyhlLndlYnR0U3VidGl0bGVzKS5mb3JFYWNoKChlPT57bGV0W3IsaV09ZTt0Lkhsc1ZvZE91dHB1dE1lZGlhX1dlYnR0U3VidGl0bGVzRW50cnkuZW5jb2RlKHtrZXk6cix2YWx1ZTppfSxuLnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKX0pKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IG89dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IHM9e21haW5NYW5pZmVzdDp2b2lkIDAsdmlkZW9NZWRpYXM6e30sYXVkaW9NZWRpYTp2b2lkIDAsd2VidHRTdWJ0aXRsZXM6e319O2Zvcig7ci5wb3M8bzspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpzLm1haW5NYW5pZmVzdD1pLk1lZGlhLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMjpjb25zdCBuPXQuSGxzVm9kT3V0cHV0TWVkaWFfVmlkZW9NZWRpYXNFbnRyeS5kZWNvZGUocixyLnVpbnQzMigpKTt2b2lkIDAhPT1uLnZhbHVlJiYocy52aWRlb01lZGlhc1tuLmtleV09bi52YWx1ZSk7YnJlYWs7Y2FzZSAzOnMuYXVkaW9NZWRpYT10Lkhsc01lZGlhLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgNDpjb25zdCBvPXQuSGxzVm9kT3V0cHV0TWVkaWFfV2VidHRTdWJ0aXRsZXNFbnRyeS5kZWNvZGUocixyLnVpbnQzMigpKTt2b2lkIDAhPT1vLnZhbHVlJiYocy53ZWJ0dFN1YnRpdGxlc1tvLmtleV09by52YWx1ZSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBzfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXttYWluTWFuaWZlc3Q6dm9pZCAwLHZpZGVvTWVkaWFzOnt9LGF1ZGlvTWVkaWE6dm9pZCAwLHdlYnR0U3VidGl0bGVzOnt9fTtyZXR1cm4gbi5tYWluTWFuaWZlc3Q9dm9pZCAwIT09ZS5tYWluTWFuaWZlc3QmJm51bGwhPT1lLm1haW5NYW5pZmVzdD9pLk1lZGlhLmZyb21QYXJ0aWFsKGUubWFpbk1hbmlmZXN0KTp2b2lkIDAsbi52aWRlb01lZGlhcz1PYmplY3QuZW50cmllcyhlLnZpZGVvTWVkaWFzPz97fSkucmVkdWNlKCgoZSxuKT0+e2xldFtyLGldPW47cmV0dXJuIHZvaWQgMCE9PWkmJihlW3JdPXQuSGxzTWVkaWEuZnJvbVBhcnRpYWwoaSkpLGV9KSx7fSksbi5hdWRpb01lZGlhPXZvaWQgMCE9PWUuYXVkaW9NZWRpYSYmbnVsbCE9PWUuYXVkaW9NZWRpYT90Lkhsc01lZGlhLmZyb21QYXJ0aWFsKGUuYXVkaW9NZWRpYSk6dm9pZCAwLG4ud2VidHRTdWJ0aXRsZXM9T2JqZWN0LmVudHJpZXMoZS53ZWJ0dFN1YnRpdGxlcz8/e30pLnJlZHVjZSgoKGUsbik9PntsZXRbcixpXT1uO3JldHVybiB2b2lkIDAhPT1pJiYoZVtyXT10Lkhsc01lZGlhLmZyb21QYXJ0aWFsKGkpKSxlfSkse30pLG59fSx0Lkhsc1ZvZE91dHB1dE1lZGlhX1ZpZGVvTWVkaWFzRW50cnk9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5rZXkmJm4udWludDMyKDEwKS5zdHJpbmcoZS5rZXkpLHZvaWQgMCE9PWUudmFsdWUmJnQuSGxzTWVkaWEuZW5jb2RlKGUudmFsdWUsbi51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXtrZXk6XCJcIix2YWx1ZTp2b2lkIDB9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLmtleT1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMjpvLnZhbHVlPXQuSGxzTWVkaWEuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtrZXk6XCJcIix2YWx1ZTp2b2lkIDB9O3JldHVybiBuLmtleT1lLmtleT8/XCJcIixuLnZhbHVlPXZvaWQgMCE9PWUudmFsdWUmJm51bGwhPT1lLnZhbHVlP3QuSGxzTWVkaWEuZnJvbVBhcnRpYWwoZS52YWx1ZSk6dm9pZCAwLG59fSx0Lkhsc1ZvZE91dHB1dE1lZGlhX1dlYnR0U3VidGl0bGVzRW50cnk9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5rZXkmJm4udWludDMyKDEwKS5zdHJpbmcoZS5rZXkpLHZvaWQgMCE9PWUudmFsdWUmJnQuSGxzTWVkaWEuZW5jb2RlKGUudmFsdWUsbi51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXtrZXk6XCJcIix2YWx1ZTp2b2lkIDB9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLmtleT1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMjpvLnZhbHVlPXQuSGxzTWVkaWEuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtrZXk6XCJcIix2YWx1ZTp2b2lkIDB9O3JldHVybiBuLmtleT1lLmtleT8/XCJcIixuLnZhbHVlPXZvaWQgMCE9PWUudmFsdWUmJm51bGwhPT1lLnZhbHVlP3QuSGxzTWVkaWEuZnJvbVBhcnRpYWwoZS52YWx1ZSk6dm9pZCAwLG59fSx0Lkhsc01lZGlhPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUubWFuaWZlc3QmJmkuTWVkaWEuZW5jb2RlKGUubWFuaWZlc3QsdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5tZWRpYSYmaS5NZWRpYS5lbmNvZGUoZS5tZWRpYSx0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e21hbmlmZXN0OnZvaWQgMCxtZWRpYTp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLm1hbmlmZXN0PWkuTWVkaWEuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOm8ubWVkaWE9aS5NZWRpYS5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e21hbmlmZXN0OnZvaWQgMCxtZWRpYTp2b2lkIDB9O3JldHVybiB0Lm1hbmlmZXN0PXZvaWQgMCE9PWUubWFuaWZlc3QmJm51bGwhPT1lLm1hbmlmZXN0P2kuTWVkaWEuZnJvbVBhcnRpYWwoZS5tYW5pZmVzdCk6dm9pZCAwLHQubWVkaWE9dm9pZCAwIT09ZS5tZWRpYSYmbnVsbCE9PWUubWVkaWE/aS5NZWRpYS5mcm9tUGFydGlhbChlLm1lZGlhKTp2b2lkIDAsdH19LHQuQWJyVm9kT3V0cHV0TWVkaWE9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5tYWluTWFuaWZlc3QmJmkuTWVkaWEuZW5jb2RlKGUubWFpbk1hbmlmZXN0LG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLE9iamVjdC5lbnRyaWVzKGUudmlkZW9NZWRpYXMpLmZvckVhY2goKGU9PntsZXRbcixpXT1lO3QuQWJyVm9kT3V0cHV0TWVkaWFfVmlkZW9NZWRpYXNFbnRyeS5lbmNvZGUoe2tleTpyLHZhbHVlOml9LG4udWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpfSkpLHZvaWQgMCE9PWUuYXVkaW9NZWRpYSYmdC5BYnJNZWRpYS5lbmNvZGUoZS5hdWRpb01lZGlhLG4udWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLE9iamVjdC5lbnRyaWVzKGUud2VidHRTdWJ0aXRsZXMpLmZvckVhY2goKGU9PntsZXRbcixpXT1lO3QuQWJyVm9kT3V0cHV0TWVkaWFfV2VidHRTdWJ0aXRsZXNFbnRyeS5lbmNvZGUoe2tleTpyLHZhbHVlOml9LG4udWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpfSkpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgbz12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgcz17bWFpbk1hbmlmZXN0OnZvaWQgMCx2aWRlb01lZGlhczp7fSxhdWRpb01lZGlhOnZvaWQgMCx3ZWJ0dFN1YnRpdGxlczp7fX07Zm9yKDtyLnBvczxvOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOnMubWFpbk1hbmlmZXN0PWkuTWVkaWEuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOmNvbnN0IG49dC5BYnJWb2RPdXRwdXRNZWRpYV9WaWRlb01lZGlhc0VudHJ5LmRlY29kZShyLHIudWludDMyKCkpO3ZvaWQgMCE9PW4udmFsdWUmJihzLnZpZGVvTWVkaWFzW24ua2V5XT1uLnZhbHVlKTticmVhaztjYXNlIDM6cy5hdWRpb01lZGlhPXQuQWJyTWVkaWEuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSA0OmNvbnN0IG89dC5BYnJWb2RPdXRwdXRNZWRpYV9XZWJ0dFN1YnRpdGxlc0VudHJ5LmRlY29kZShyLHIudWludDMyKCkpO3ZvaWQgMCE9PW8udmFsdWUmJihzLndlYnR0U3VidGl0bGVzW28ua2V5XT1vLnZhbHVlKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIHN9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e21haW5NYW5pZmVzdDp2b2lkIDAsdmlkZW9NZWRpYXM6e30sYXVkaW9NZWRpYTp2b2lkIDAsd2VidHRTdWJ0aXRsZXM6e319O3JldHVybiBuLm1haW5NYW5pZmVzdD12b2lkIDAhPT1lLm1haW5NYW5pZmVzdCYmbnVsbCE9PWUubWFpbk1hbmlmZXN0P2kuTWVkaWEuZnJvbVBhcnRpYWwoZS5tYWluTWFuaWZlc3QpOnZvaWQgMCxuLnZpZGVvTWVkaWFzPU9iamVjdC5lbnRyaWVzKGUudmlkZW9NZWRpYXM/P3t9KS5yZWR1Y2UoKChlLG4pPT57bGV0W3IsaV09bjtyZXR1cm4gdm9pZCAwIT09aSYmKGVbcl09dC5BYnJNZWRpYS5mcm9tUGFydGlhbChpKSksZX0pLHt9KSxuLmF1ZGlvTWVkaWE9dm9pZCAwIT09ZS5hdWRpb01lZGlhJiZudWxsIT09ZS5hdWRpb01lZGlhP3QuQWJyTWVkaWEuZnJvbVBhcnRpYWwoZS5hdWRpb01lZGlhKTp2b2lkIDAsbi53ZWJ0dFN1YnRpdGxlcz1PYmplY3QuZW50cmllcyhlLndlYnR0U3VidGl0bGVzPz97fSkucmVkdWNlKCgoZSxuKT0+e2xldFtyLGldPW47cmV0dXJuIHZvaWQgMCE9PWkmJihlW3JdPXQuQWJyTWVkaWEuZnJvbVBhcnRpYWwoaSkpLGV9KSx7fSksbn19LHQuQWJyVm9kT3V0cHV0TWVkaWFfVmlkZW9NZWRpYXNFbnRyeT17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmtleSYmbi51aW50MzIoMTApLnN0cmluZyhlLmtleSksdm9pZCAwIT09ZS52YWx1ZSYmdC5BYnJNZWRpYS5lbmNvZGUoZS52YWx1ZSxuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89e2tleTpcIlwiLHZhbHVlOnZvaWQgMH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8ua2V5PXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOm8udmFsdWU9dC5BYnJNZWRpYS5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e2tleTpcIlwiLHZhbHVlOnZvaWQgMH07cmV0dXJuIG4ua2V5PWUua2V5Pz9cIlwiLG4udmFsdWU9dm9pZCAwIT09ZS52YWx1ZSYmbnVsbCE9PWUudmFsdWU/dC5BYnJNZWRpYS5mcm9tUGFydGlhbChlLnZhbHVlKTp2b2lkIDAsbn19LHQuQWJyVm9kT3V0cHV0TWVkaWFfV2VidHRTdWJ0aXRsZXNFbnRyeT17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmtleSYmbi51aW50MzIoMTApLnN0cmluZyhlLmtleSksdm9pZCAwIT09ZS52YWx1ZSYmdC5BYnJNZWRpYS5lbmNvZGUoZS52YWx1ZSxuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89e2tleTpcIlwiLHZhbHVlOnZvaWQgMH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8ua2V5PXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOm8udmFsdWU9dC5BYnJNZWRpYS5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e2tleTpcIlwiLHZhbHVlOnZvaWQgMH07cmV0dXJuIG4ua2V5PWUua2V5Pz9cIlwiLG4udmFsdWU9dm9pZCAwIT09ZS52YWx1ZSYmbnVsbCE9PWUudmFsdWU/dC5BYnJNZWRpYS5mcm9tUGFydGlhbChlLnZhbHVlKTp2b2lkIDAsbn19LHQuQWJyTWVkaWE9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5obHNNYW5pZmVzdCYmaS5NZWRpYS5lbmNvZGUoZS5obHNNYW5pZmVzdCx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLm1lZGlhJiZpLk1lZGlhLmVuY29kZShlLm1lZGlhLHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17aGxzTWFuaWZlc3Q6dm9pZCAwLG1lZGlhOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8uaGxzTWFuaWZlc3Q9aS5NZWRpYS5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDI6by5tZWRpYT1pLk1lZGlhLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17aGxzTWFuaWZlc3Q6dm9pZCAwLG1lZGlhOnZvaWQgMH07cmV0dXJuIHQuaGxzTWFuaWZlc3Q9dm9pZCAwIT09ZS5obHNNYW5pZmVzdCYmbnVsbCE9PWUuaGxzTWFuaWZlc3Q/aS5NZWRpYS5mcm9tUGFydGlhbChlLmhsc01hbmlmZXN0KTp2b2lkIDAsdC5tZWRpYT12b2lkIDAhPT1lLm1lZGlhJiZudWxsIT09ZS5tZWRpYT9pLk1lZGlhLmZyb21QYXJ0aWFsKGUubWVkaWEpOnZvaWQgMCx0fX19LDU4NDUxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlB1YlN1YkNhbGxiYWNrPXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO3QuUHViU3ViQ2FsbGJhY2s9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5wcm9qZWN0SWQmJnQudWludDMyKDEwKS5zdHJpbmcoZS5wcm9qZWN0SWQpLFwiXCIhPT1lLnRvcGljSWQmJnQudWludDMyKDE4KS5zdHJpbmcoZS50b3BpY0lkKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e3Byb2plY3RJZDpcIlwiLHRvcGljSWQ6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8ucHJvamVjdElkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOm8udG9waWNJZD1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17cHJvamVjdElkOlwiXCIsdG9waWNJZDpcIlwifTtyZXR1cm4gdC5wcm9qZWN0SWQ9ZS5wcm9qZWN0SWQ/P1wiXCIsdC50b3BpY0lkPWUudG9waWNJZD8/XCJcIix0fX19LDE4ODkzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlJlcGxpY2F0aW9uUG9saWN5PXQuRnJpZW5kUmVwbGljYXRpb25Qb2xpY3k9dC5Db21iaW5lZFJlcGxpY2F0aW9uUG9saWN5PXQuQWxsUHJvdmlkZXJzUmVwbGljYXRpb25Qb2xpY3k9dC5Ob1JlcGxpY2F0aW9uUG9saWN5PXQuQm9sdERlZmF1bHRQb2xpY3k9dC5TdHJpbmdSZWdpb25zUG9saWN5PXQuQ291bnRyaWVzUG9saWN5X0NvdW50cnlFeHBlY3RlZERvd25sb2Fkc0VudHJ5PXQuQ291bnRyaWVzUG9saWN5PXZvaWQgMDtjb25zdCBpPXIobig0MTU4MykpLG89cihuKDYyMTAwKSk7dC5Db3VudHJpZXNQb2xpY3k9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoZS5jb3VudHJ5RXhwZWN0ZWREb3dubG9hZHMpLmZvckVhY2goKGU9PntsZXRbcixpXT1lO3QuQ291bnRyaWVzUG9saWN5X0NvdW50cnlFeHBlY3RlZERvd25sb2Fkc0VudHJ5LmVuY29kZSh7a2V5OnIsdmFsdWU6aX0sbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCl9KSksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBhPXtjb3VudHJ5RXhwZWN0ZWREb3dubG9hZHM6e319O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtpZihlPj4+Mz09MSl7Y29uc3QgZT10LkNvdW50cmllc1BvbGljeV9Db3VudHJ5RXhwZWN0ZWREb3dubG9hZHNFbnRyeS5kZWNvZGUocixyLnVpbnQzMigpKTt2b2lkIDAhPT1lLnZhbHVlJiYoYS5jb3VudHJ5RXhwZWN0ZWREb3dubG9hZHNbZS5rZXldPWUudmFsdWUpfWVsc2Ugci5za2lwVHlwZSg3JmUpfXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtjb3VudHJ5RXhwZWN0ZWREb3dubG9hZHM6e319O3JldHVybiB0LmNvdW50cnlFeHBlY3RlZERvd25sb2Fkcz1PYmplY3QuZW50cmllcyhlLmNvdW50cnlFeHBlY3RlZERvd25sb2Fkcz8/e30pLnJlZHVjZSgoKGUsdCk9PntsZXRbbixyXT10O3JldHVybiB2b2lkIDAhPT1yJiYoZVtuXT1TdHJpbmcocikpLGV9KSx7fSksdH19LHQuQ291bnRyaWVzUG9saWN5X0NvdW50cnlFeHBlY3RlZERvd25sb2Fkc0VudHJ5PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUua2V5JiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUua2V5KSxcIjBcIiE9PWUudmFsdWUmJnQudWludDMyKDE2KS51aW50NjQoZS52YWx1ZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtrZXk6XCJcIix2YWx1ZTpcIjBcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkua2V5PW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkudmFsdWU9bi51aW50NjQoKS50b1N0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17a2V5OlwiXCIsdmFsdWU6XCIwXCJ9O3JldHVybiB0LmtleT1lLmtleT8/XCJcIix0LnZhbHVlPWUudmFsdWU/P1wiMFwiLHR9fSx0LlN0cmluZ1JlZ2lvbnNQb2xpY3k9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgbiBvZiBlLnN0cmluZ1JlZ2lvbil0LnVpbnQzMigxOCkuc3RyaW5nKG4pO3JldHVybiB0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3N0cmluZ1JlZ2lvbjpbXX07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0yP2kuc3RyaW5nUmVnaW9uLnB1c2gobi5zdHJpbmcoKSk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtzdHJpbmdSZWdpb246W119O3JldHVybiB0LnN0cmluZ1JlZ2lvbj1lLnN0cmluZ1JlZ2lvbj8ubWFwKChlPT5lKSl8fFtdLHR9fSx0LkJvbHREZWZhdWx0UG9saWN5PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLm51bWJlck9mUmVwbGljYXMmJnQudWludDMyKDgpLnVpbnQzMihlLm51bWJlck9mUmVwbGljYXMpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17bnVtYmVyT2ZSZXBsaWNhczowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/aS5udW1iZXJPZlJlcGxpY2FzPW4udWludDMyKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtudW1iZXJPZlJlcGxpY2FzOjB9O3JldHVybiB0Lm51bWJlck9mUmVwbGljYXM9ZS5udW1iZXJPZlJlcGxpY2FzPz8wLHR9fSx0Lk5vUmVwbGljYXRpb25Qb2xpY3k9e2VuY29kZShlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCl9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO24uc2tpcFR5cGUoNyZlKX1yZXR1cm57fX0sZnJvbVBhcnRpYWw6ZT0+KHt9KX0sdC5BbGxQcm92aWRlcnNSZXBsaWNhdGlvblBvbGljeT17ZW5jb2RlKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKX0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7bi5za2lwVHlwZSg3JmUpfXJldHVybnt9fSxmcm9tUGFydGlhbDplPT4oe30pfSx0LkNvbWJpbmVkUmVwbGljYXRpb25Qb2xpY3k9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgciBvZiBlLnBvbGljaWVzKXQuUmVwbGljYXRpb25Qb2xpY3kuZW5jb2RlKHIsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3QgYT17cG9saWNpZXM6W119O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtlPj4+Mz09MT9hLnBvbGljaWVzLnB1c2godC5SZXBsaWNhdGlvblBvbGljeS5kZWNvZGUocixyLnVpbnQzMigpKSk6ci5za2lwVHlwZSg3JmUpfXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtwb2xpY2llczpbXX07cmV0dXJuIG4ucG9saWNpZXM9ZS5wb2xpY2llcz8ubWFwKChlPT50LlJlcGxpY2F0aW9uUG9saWN5LmZyb21QYXJ0aWFsKGUpKSl8fFtdLG59fSx0LkZyaWVuZFJlcGxpY2F0aW9uUG9saWN5PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUudXNlcklkJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUudXNlcklkKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3VzZXJJZDpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/aS51c2VySWQ9bi5zdHJpbmcoKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3VzZXJJZDpcIlwifTtyZXR1cm4gdC51c2VySWQ9ZS51c2VySWQ/P1wiXCIsdH19LHQuUmVwbGljYXRpb25Qb2xpY3k9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cImNvdW50cmllc1BvbGljeVwiPT09ZS5Qb2xpY3lPcHRpb25zPy4kY2FzZSYmdC5Db3VudHJpZXNQb2xpY3kuZW5jb2RlKGUuUG9saWN5T3B0aW9ucy5jb3VudHJpZXNQb2xpY3ksbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksXCJib2x0RGVmYXVsdFBvbGljeVwiPT09ZS5Qb2xpY3lPcHRpb25zPy4kY2FzZSYmdC5Cb2x0RGVmYXVsdFBvbGljeS5lbmNvZGUoZS5Qb2xpY3lPcHRpb25zLmJvbHREZWZhdWx0UG9saWN5LG4udWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLFwibm9SZXBsaWNhdGlvblBvbGljeVwiPT09ZS5Qb2xpY3lPcHRpb25zPy4kY2FzZSYmdC5Ob1JlcGxpY2F0aW9uUG9saWN5LmVuY29kZShlLlBvbGljeU9wdGlvbnMubm9SZXBsaWNhdGlvblBvbGljeSxuLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSxcImFsbFByb3ZpZGVyc1JlcGxpY2F0aW9uUG9saWN5XCI9PT1lLlBvbGljeU9wdGlvbnM/LiRjYXNlJiZ0LkFsbFByb3ZpZGVyc1JlcGxpY2F0aW9uUG9saWN5LmVuY29kZShlLlBvbGljeU9wdGlvbnMuYWxsUHJvdmlkZXJzUmVwbGljYXRpb25Qb2xpY3ksbi51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCksXCJmcmllbmRSZXBsaWNhdGlvblBvbGljeVwiPT09ZS5Qb2xpY3lPcHRpb25zPy4kY2FzZSYmdC5GcmllbmRSZXBsaWNhdGlvblBvbGljeS5lbmNvZGUoZS5Qb2xpY3lPcHRpb25zLmZyaWVuZFJlcGxpY2F0aW9uUG9saWN5LG4udWludDMyKDQyKS5mb3JrKCkpLmxkZWxpbSgpLFwic3RyaW5nUmVnaW9uc1BvbGljeVwiPT09ZS5Qb2xpY3lPcHRpb25zPy4kY2FzZSYmdC5TdHJpbmdSZWdpb25zUG9saWN5LmVuY29kZShlLlBvbGljeU9wdGlvbnMuc3RyaW5nUmVnaW9uc1BvbGljeSxuLnVpbnQzMig3OTQpLmZvcmsoKSkubGRlbGltKCksXCJjb21iaW5lZFJlcGxpY2F0aW9uUG9saWN5XCI9PT1lLlBvbGljeU9wdGlvbnM/LiRjYXNlJiZ0LkNvbWJpbmVkUmVwbGljYXRpb25Qb2xpY3kuZW5jb2RlKGUuUG9saWN5T3B0aW9ucy5jb21iaW5lZFJlcGxpY2F0aW9uUG9saWN5LG4udWludDMyKDgwMikuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGE9e1BvbGljeU9wdGlvbnM6dm9pZCAwfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS5Qb2xpY3lPcHRpb25zPXskY2FzZTpcImNvdW50cmllc1BvbGljeVwiLGNvdW50cmllc1BvbGljeTp0LkNvdW50cmllc1BvbGljeS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAyOmEuUG9saWN5T3B0aW9ucz17JGNhc2U6XCJib2x0RGVmYXVsdFBvbGljeVwiLGJvbHREZWZhdWx0UG9saWN5OnQuQm9sdERlZmF1bHRQb2xpY3kuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMzphLlBvbGljeU9wdGlvbnM9eyRjYXNlOlwibm9SZXBsaWNhdGlvblBvbGljeVwiLG5vUmVwbGljYXRpb25Qb2xpY3k6dC5Ob1JlcGxpY2F0aW9uUG9saWN5LmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDQ6YS5Qb2xpY3lPcHRpb25zPXskY2FzZTpcImFsbFByb3ZpZGVyc1JlcGxpY2F0aW9uUG9saWN5XCIsYWxsUHJvdmlkZXJzUmVwbGljYXRpb25Qb2xpY3k6dC5BbGxQcm92aWRlcnNSZXBsaWNhdGlvblBvbGljeS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA1OmEuUG9saWN5T3B0aW9ucz17JGNhc2U6XCJmcmllbmRSZXBsaWNhdGlvblBvbGljeVwiLGZyaWVuZFJlcGxpY2F0aW9uUG9saWN5OnQuRnJpZW5kUmVwbGljYXRpb25Qb2xpY3kuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgOTk6YS5Qb2xpY3lPcHRpb25zPXskY2FzZTpcInN0cmluZ1JlZ2lvbnNQb2xpY3lcIixzdHJpbmdSZWdpb25zUG9saWN5OnQuU3RyaW5nUmVnaW9uc1BvbGljeS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAxMDA6YS5Qb2xpY3lPcHRpb25zPXskY2FzZTpcImNvbWJpbmVkUmVwbGljYXRpb25Qb2xpY3lcIixjb21iaW5lZFJlcGxpY2F0aW9uUG9saWN5OnQuQ29tYmluZWRSZXBsaWNhdGlvblBvbGljeS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtQb2xpY3lPcHRpb25zOnZvaWQgMH07cmV0dXJuXCJjb3VudHJpZXNQb2xpY3lcIj09PWUuUG9saWN5T3B0aW9ucz8uJGNhc2UmJnZvaWQgMCE9PWUuUG9saWN5T3B0aW9ucz8uY291bnRyaWVzUG9saWN5JiZudWxsIT09ZS5Qb2xpY3lPcHRpb25zPy5jb3VudHJpZXNQb2xpY3kmJihuLlBvbGljeU9wdGlvbnM9eyRjYXNlOlwiY291bnRyaWVzUG9saWN5XCIsY291bnRyaWVzUG9saWN5OnQuQ291bnRyaWVzUG9saWN5LmZyb21QYXJ0aWFsKGUuUG9saWN5T3B0aW9ucy5jb3VudHJpZXNQb2xpY3kpfSksXCJib2x0RGVmYXVsdFBvbGljeVwiPT09ZS5Qb2xpY3lPcHRpb25zPy4kY2FzZSYmdm9pZCAwIT09ZS5Qb2xpY3lPcHRpb25zPy5ib2x0RGVmYXVsdFBvbGljeSYmbnVsbCE9PWUuUG9saWN5T3B0aW9ucz8uYm9sdERlZmF1bHRQb2xpY3kmJihuLlBvbGljeU9wdGlvbnM9eyRjYXNlOlwiYm9sdERlZmF1bHRQb2xpY3lcIixib2x0RGVmYXVsdFBvbGljeTp0LkJvbHREZWZhdWx0UG9saWN5LmZyb21QYXJ0aWFsKGUuUG9saWN5T3B0aW9ucy5ib2x0RGVmYXVsdFBvbGljeSl9KSxcIm5vUmVwbGljYXRpb25Qb2xpY3lcIj09PWUuUG9saWN5T3B0aW9ucz8uJGNhc2UmJnZvaWQgMCE9PWUuUG9saWN5T3B0aW9ucz8ubm9SZXBsaWNhdGlvblBvbGljeSYmbnVsbCE9PWUuUG9saWN5T3B0aW9ucz8ubm9SZXBsaWNhdGlvblBvbGljeSYmKG4uUG9saWN5T3B0aW9ucz17JGNhc2U6XCJub1JlcGxpY2F0aW9uUG9saWN5XCIsbm9SZXBsaWNhdGlvblBvbGljeTp0Lk5vUmVwbGljYXRpb25Qb2xpY3kuZnJvbVBhcnRpYWwoZS5Qb2xpY3lPcHRpb25zLm5vUmVwbGljYXRpb25Qb2xpY3kpfSksXCJhbGxQcm92aWRlcnNSZXBsaWNhdGlvblBvbGljeVwiPT09ZS5Qb2xpY3lPcHRpb25zPy4kY2FzZSYmdm9pZCAwIT09ZS5Qb2xpY3lPcHRpb25zPy5hbGxQcm92aWRlcnNSZXBsaWNhdGlvblBvbGljeSYmbnVsbCE9PWUuUG9saWN5T3B0aW9ucz8uYWxsUHJvdmlkZXJzUmVwbGljYXRpb25Qb2xpY3kmJihuLlBvbGljeU9wdGlvbnM9eyRjYXNlOlwiYWxsUHJvdmlkZXJzUmVwbGljYXRpb25Qb2xpY3lcIixhbGxQcm92aWRlcnNSZXBsaWNhdGlvblBvbGljeTp0LkFsbFByb3ZpZGVyc1JlcGxpY2F0aW9uUG9saWN5LmZyb21QYXJ0aWFsKGUuUG9saWN5T3B0aW9ucy5hbGxQcm92aWRlcnNSZXBsaWNhdGlvblBvbGljeSl9KSxcImZyaWVuZFJlcGxpY2F0aW9uUG9saWN5XCI9PT1lLlBvbGljeU9wdGlvbnM/LiRjYXNlJiZ2b2lkIDAhPT1lLlBvbGljeU9wdGlvbnM/LmZyaWVuZFJlcGxpY2F0aW9uUG9saWN5JiZudWxsIT09ZS5Qb2xpY3lPcHRpb25zPy5mcmllbmRSZXBsaWNhdGlvblBvbGljeSYmKG4uUG9saWN5T3B0aW9ucz17JGNhc2U6XCJmcmllbmRSZXBsaWNhdGlvblBvbGljeVwiLGZyaWVuZFJlcGxpY2F0aW9uUG9saWN5OnQuRnJpZW5kUmVwbGljYXRpb25Qb2xpY3kuZnJvbVBhcnRpYWwoZS5Qb2xpY3lPcHRpb25zLmZyaWVuZFJlcGxpY2F0aW9uUG9saWN5KX0pLFwic3RyaW5nUmVnaW9uc1BvbGljeVwiPT09ZS5Qb2xpY3lPcHRpb25zPy4kY2FzZSYmdm9pZCAwIT09ZS5Qb2xpY3lPcHRpb25zPy5zdHJpbmdSZWdpb25zUG9saWN5JiZudWxsIT09ZS5Qb2xpY3lPcHRpb25zPy5zdHJpbmdSZWdpb25zUG9saWN5JiYobi5Qb2xpY3lPcHRpb25zPXskY2FzZTpcInN0cmluZ1JlZ2lvbnNQb2xpY3lcIixzdHJpbmdSZWdpb25zUG9saWN5OnQuU3RyaW5nUmVnaW9uc1BvbGljeS5mcm9tUGFydGlhbChlLlBvbGljeU9wdGlvbnMuc3RyaW5nUmVnaW9uc1BvbGljeSl9KSxcImNvbWJpbmVkUmVwbGljYXRpb25Qb2xpY3lcIj09PWUuUG9saWN5T3B0aW9ucz8uJGNhc2UmJnZvaWQgMCE9PWUuUG9saWN5T3B0aW9ucz8uY29tYmluZWRSZXBsaWNhdGlvblBvbGljeSYmbnVsbCE9PWUuUG9saWN5T3B0aW9ucz8uY29tYmluZWRSZXBsaWNhdGlvblBvbGljeSYmKG4uUG9saWN5T3B0aW9ucz17JGNhc2U6XCJjb21iaW5lZFJlcGxpY2F0aW9uUG9saWN5XCIsY29tYmluZWRSZXBsaWNhdGlvblBvbGljeTp0LkNvbWJpbmVkUmVwbGljYXRpb25Qb2xpY3kuZnJvbVBhcnRpYWwoZS5Qb2xpY3lPcHRpb25zLmNvbWJpbmVkUmVwbGljYXRpb25Qb2xpY3kpfSksbn19LG8uZGVmYXVsdC51dGlsLkxvbmchPT1pLmRlZmF1bHQmJihvLmRlZmF1bHQudXRpbC5Mb25nPWkuZGVmYXVsdCxvLmRlZmF1bHQuY29uZmlndXJlKCkpfSw5ODk1NjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5TcXNDYWxsYmFjaz12b2lkIDA7Y29uc3QgaT1yKG4oNjIxMDApKTt0LlNxc0NhbGxiYWNrPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUuc3FzVXJsJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUuc3FzVXJsKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e3Nxc1VybDpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/by5zcXNVcmw9bi5zdHJpbmcoKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3Nxc1VybDpcIlwifTtyZXR1cm4gdC5zcXNVcmw9ZS5zcXNVcmw/P1wiXCIsdH19fSw5OTcyNjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5TdG9yYWdlQ2xhc3NQb2xpY3k9dC5TdG9yYWdlUG9saWN5PXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO3QuU3RvcmFnZVBvbGljeT17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwic3RvcmFnZUNsYXNzUG9saWN5XCI9PT1lLlBvbGljeU9wdGlvbnM/LiRjYXNlJiZ0LlN0b3JhZ2VDbGFzc1BvbGljeS5lbmNvZGUoZS5Qb2xpY3lPcHRpb25zLnN0b3JhZ2VDbGFzc1BvbGljeSxuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IG89dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGE9e1BvbGljeU9wdGlvbnM6dm9pZCAwfTtmb3IoO3IucG9zPG87KXtjb25zdCBlPXIudWludDMyKCk7ZT4+PjM9PTE/YS5Qb2xpY3lPcHRpb25zPXskY2FzZTpcInN0b3JhZ2VDbGFzc1BvbGljeVwiLHN0b3JhZ2VDbGFzc1BvbGljeTp0LlN0b3JhZ2VDbGFzc1BvbGljeS5kZWNvZGUocixyLnVpbnQzMigpKX06ci5za2lwVHlwZSg3JmUpfXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtQb2xpY3lPcHRpb25zOnZvaWQgMH07cmV0dXJuXCJzdG9yYWdlQ2xhc3NQb2xpY3lcIj09PWUuUG9saWN5T3B0aW9ucz8uJGNhc2UmJnZvaWQgMCE9PWUuUG9saWN5T3B0aW9ucz8uc3RvcmFnZUNsYXNzUG9saWN5JiZudWxsIT09ZS5Qb2xpY3lPcHRpb25zPy5zdG9yYWdlQ2xhc3NQb2xpY3kmJihuLlBvbGljeU9wdGlvbnM9eyRjYXNlOlwic3RvcmFnZUNsYXNzUG9saWN5XCIsc3RvcmFnZUNsYXNzUG9saWN5OnQuU3RvcmFnZUNsYXNzUG9saWN5LmZyb21QYXJ0aWFsKGUuUG9saWN5T3B0aW9ucy5zdG9yYWdlQ2xhc3NQb2xpY3kpfSksbn19LHQuU3RvcmFnZUNsYXNzUG9saWN5PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUuc3RvcmFnZUNsYXNzJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUuc3RvcmFnZUNsYXNzKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e3N0b3JhZ2VDbGFzczpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/by5zdG9yYWdlQ2xhc3M9bi5zdHJpbmcoKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3N0b3JhZ2VDbGFzczpcIlwifTtyZXR1cm4gdC5zdG9yYWdlQ2xhc3M9ZS5zdG9yYWdlQ2xhc3M/P1wiXCIsdH19fSwzNDg1NzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5VbmFyY2hpdmVkTWVkaWE9dm9pZCAwO2NvbnN0IGk9big4NjUwNyksbz1yKG4oNjIxMDApKTt0LlVuYXJjaGl2ZWRNZWRpYT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLmFyY2hpdmVkTWVkaWEmJmkuTWVkaWEuZW5jb2RlKGUuYXJjaGl2ZWRNZWRpYSx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnZpZGVvTWVkaWEmJmkuTWVkaWEuZW5jb2RlKGUudmlkZW9NZWRpYSx0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLm92ZXJsYXlNZWRpYSYmaS5NZWRpYS5lbmNvZGUoZS5vdmVybGF5TWVkaWEsdC51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS52aWRlb1dpdGhPdmVybGF5QnVybnRpbk1lZGlhJiZpLk1lZGlhLmVuY29kZShlLnZpZGVvV2l0aE92ZXJsYXlCdXJudGluTWVkaWEsdC51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5maXJzdEZyYW1lTWVkaWEmJmkuTWVkaWEuZW5jb2RlKGUuZmlyc3RGcmFtZU1lZGlhLHQudWludDMyKDQyKS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuZmlyc3RGcmFtZVZpZGVvT25seSYmaS5NZWRpYS5lbmNvZGUoZS5maXJzdEZyYW1lVmlkZW9Pbmx5LHQudWludDMyKDUwKS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgYT17YXJjaGl2ZWRNZWRpYTp2b2lkIDAsdmlkZW9NZWRpYTp2b2lkIDAsb3ZlcmxheU1lZGlhOnZvaWQgMCx2aWRlb1dpdGhPdmVybGF5QnVybnRpbk1lZGlhOnZvaWQgMCxmaXJzdEZyYW1lTWVkaWE6dm9pZCAwLGZpcnN0RnJhbWVWaWRlb09ubHk6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS5hcmNoaXZlZE1lZGlhPWkuTWVkaWEuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOmEudmlkZW9NZWRpYT1pLk1lZGlhLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMzphLm92ZXJsYXlNZWRpYT1pLk1lZGlhLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgNDphLnZpZGVvV2l0aE92ZXJsYXlCdXJudGluTWVkaWE9aS5NZWRpYS5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDU6YS5maXJzdEZyYW1lTWVkaWE9aS5NZWRpYS5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDY6YS5maXJzdEZyYW1lVmlkZW9Pbmx5PWkuTWVkaWEuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXthcmNoaXZlZE1lZGlhOnZvaWQgMCx2aWRlb01lZGlhOnZvaWQgMCxvdmVybGF5TWVkaWE6dm9pZCAwLHZpZGVvV2l0aE92ZXJsYXlCdXJudGluTWVkaWE6dm9pZCAwLGZpcnN0RnJhbWVNZWRpYTp2b2lkIDAsZmlyc3RGcmFtZVZpZGVvT25seTp2b2lkIDB9O3JldHVybiB0LmFyY2hpdmVkTWVkaWE9dm9pZCAwIT09ZS5hcmNoaXZlZE1lZGlhJiZudWxsIT09ZS5hcmNoaXZlZE1lZGlhP2kuTWVkaWEuZnJvbVBhcnRpYWwoZS5hcmNoaXZlZE1lZGlhKTp2b2lkIDAsdC52aWRlb01lZGlhPXZvaWQgMCE9PWUudmlkZW9NZWRpYSYmbnVsbCE9PWUudmlkZW9NZWRpYT9pLk1lZGlhLmZyb21QYXJ0aWFsKGUudmlkZW9NZWRpYSk6dm9pZCAwLHQub3ZlcmxheU1lZGlhPXZvaWQgMCE9PWUub3ZlcmxheU1lZGlhJiZudWxsIT09ZS5vdmVybGF5TWVkaWE/aS5NZWRpYS5mcm9tUGFydGlhbChlLm92ZXJsYXlNZWRpYSk6dm9pZCAwLHQudmlkZW9XaXRoT3ZlcmxheUJ1cm50aW5NZWRpYT12b2lkIDAhPT1lLnZpZGVvV2l0aE92ZXJsYXlCdXJudGluTWVkaWEmJm51bGwhPT1lLnZpZGVvV2l0aE92ZXJsYXlCdXJudGluTWVkaWE/aS5NZWRpYS5mcm9tUGFydGlhbChlLnZpZGVvV2l0aE92ZXJsYXlCdXJudGluTWVkaWEpOnZvaWQgMCx0LmZpcnN0RnJhbWVNZWRpYT12b2lkIDAhPT1lLmZpcnN0RnJhbWVNZWRpYSYmbnVsbCE9PWUuZmlyc3RGcmFtZU1lZGlhP2kuTWVkaWEuZnJvbVBhcnRpYWwoZS5maXJzdEZyYW1lTWVkaWEpOnZvaWQgMCx0LmZpcnN0RnJhbWVWaWRlb09ubHk9dm9pZCAwIT09ZS5maXJzdEZyYW1lVmlkZW9Pbmx5JiZudWxsIT09ZS5maXJzdEZyYW1lVmlkZW9Pbmx5P2kuTWVkaWEuZnJvbVBhcnRpYWwoZS5maXJzdEZyYW1lVmlkZW9Pbmx5KTp2b2lkIDAsdH19fSw2MzE3MjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Db21wb3NpdGVTdG9yeUlkPXZvaWQgMDtjb25zdCBpPXIobig0MTU4MykpLG89cihuKDYyMTAwKSk7dC5Db21wb3NpdGVTdG9yeUlkPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLmNvcnB1cyYmdC51aW50MzIoOCkuaW50MzIoZS5jb3JwdXMpLFwiXCIhPT1lLmlkJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuaWQpLFwiMFwiIT09ZS52ZXJzaW9uJiZ0LnVpbnQzMigyNCkuaW50NjQoZS52ZXJzaW9uKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2NvcnB1czowLGlkOlwiXCIsdmVyc2lvbjpcIjBcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuY29ycHVzPW4uaW50MzIoKTticmVhaztjYXNlIDI6aS5pZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMzppLnZlcnNpb249bi5pbnQ2NCgpLnRvU3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtjb3JwdXM6MCxpZDpcIlwiLHZlcnNpb246XCIwXCJ9O3JldHVybiB0LmNvcnB1cz1lLmNvcnB1cz8/MCx0LmlkPWUuaWQ/P1wiXCIsdC52ZXJzaW9uPWUudmVyc2lvbj8/XCIwXCIsdH19LG8uZGVmYXVsdC51dGlsLkxvbmchPT1pLmRlZmF1bHQmJihvLmRlZmF1bHQudXRpbC5Mb25nPWkuZGVmYXVsdCxvLmRlZmF1bHQuY29uZmlndXJlKCkpfSwzNzY3MjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5HaWZ0SW5mbz12b2lkIDA7Y29uc3QgaT1uKDk3ODA0KSxvPXIobig2MjEwMCkpO3QuR2lmdEluZm89e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5vcmRlclJlZmVyZW5jZUlkJiZpLlVVSUQuZW5jb2RlKGUub3JkZXJSZWZlcmVuY2VJZCx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmdpZnRJZCYmaS5VVUlELmVuY29kZShlLmdpZnRJZCx0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGE9e29yZGVyUmVmZXJlbmNlSWQ6dm9pZCAwLGdpZnRJZDp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLm9yZGVyUmVmZXJlbmNlSWQ9aS5VVUlELmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMjphLmdpZnRJZD1pLlVVSUQuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtvcmRlclJlZmVyZW5jZUlkOnZvaWQgMCxnaWZ0SWQ6dm9pZCAwfTtyZXR1cm4gdC5vcmRlclJlZmVyZW5jZUlkPXZvaWQgMCE9PWUub3JkZXJSZWZlcmVuY2VJZCYmbnVsbCE9PWUub3JkZXJSZWZlcmVuY2VJZD9pLlVVSUQuZnJvbVBhcnRpYWwoZS5vcmRlclJlZmVyZW5jZUlkKTp2b2lkIDAsdC5naWZ0SWQ9dm9pZCAwIT09ZS5naWZ0SWQmJm51bGwhPT1lLmdpZnRJZD9pLlVVSUQuZnJvbVBhcnRpYWwoZS5naWZ0SWQpOnZvaWQgMCx0fX19LDEwNDgxOihlLHQpPT57dmFyIG47dC51PXZvaWQgMCwobj10LnV8fCh0LnU9e30pKVtuLkNIQU5HRV9PUklHSU5fVU5TRVQ9MF09XCJDSEFOR0VfT1JJR0lOX1VOU0VUXCIsbltuLkNIQU5HRV9PUklHSU5fR1JPVVBfSU5WSVRFX1NUSUNLRVI9MV09XCJDSEFOR0VfT1JJR0lOX0dST1VQX0lOVklURV9TVElDS0VSXCIsbltuLkNIQU5HRV9PUklHSU5fR1JPVVBfSU5WSVRFX0xJTks9Ml09XCJDSEFOR0VfT1JJR0lOX0dST1VQX0lOVklURV9MSU5LXCIsbltuLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIn0sMTE4Nzk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuSGlnaFdhdGVybWFyaz10LkR5bmFtaWNDb252ZXJzYXRpb25SZXRlbnRpb25Qb2xpY3k9dC5Db252ZXJzYXRpb25SZXRlbnRpb25Qb2xpY3k9dC5IaWdoV2F0ZXJtYXJrX0hpZ2hXYXRlcm1hcmtUeXBlPXQuQ29udGVudFNlbmRlckxlYXZlUG9saWN5PXQuQ29udGVudFJlYWRSZWxlYXNlUG9saWN5PXZvaWQgMDtjb25zdCBpPXIobig0MTU4MykpLG89cihuKDYyMTAwKSk7ZnVuY3Rpb24gYShlKXtyZXR1cm4gZS50b1N0cmluZygpfXZhciBzLGMsbDsobD10LkNvbnRlbnRSZWFkUmVsZWFzZVBvbGljeXx8KHQuQ29udGVudFJlYWRSZWxlYXNlUG9saWN5PXt9KSlbbC5ISUdIX1dBVEVSX01BUks9MF09XCJISUdIX1dBVEVSX01BUktcIixsW2wuUEVSX01FU1NBR0U9MV09XCJQRVJfTUVTU0FHRVwiLGxbbC5TTkFQPTJdPVwiU05BUFwiLGxbbC5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKGM9dC5Db250ZW50U2VuZGVyTGVhdmVQb2xpY3l8fCh0LkNvbnRlbnRTZW5kZXJMZWF2ZVBvbGljeT17fSkpW2MuUkVNT1ZFPTBdPVwiUkVNT1ZFXCIsY1tjLktFRVA9MV09XCJLRUVQXCIsY1tjLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwocz10LkhpZ2hXYXRlcm1hcmtfSGlnaFdhdGVybWFya1R5cGV8fCh0LkhpZ2hXYXRlcm1hcmtfSGlnaFdhdGVybWFya1R5cGU9e30pKVtzLlJFQUQ9MF09XCJSRUFEXCIsc1tzLlJFTEVBU0U9MV09XCJSRUxFQVNFXCIsc1tzLlNOQVBfUkVMRUFTRT0yXT1cIlNOQVBfUkVMRUFTRVwiLHNbcy5SRUFDVElPTj0zXT1cIlJFQUNUSU9OXCIsc1tzLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0LkNvbnZlcnNhdGlvblJldGVudGlvblBvbGljeT17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiZHluYW1pY1wiPT09ZS5yZXRlbnRpb25Qb2xpY3k/LiRjYXNlJiZ0LkR5bmFtaWNDb252ZXJzYXRpb25SZXRlbnRpb25Qb2xpY3kuZW5jb2RlKGUucmV0ZW50aW9uUG9saWN5LmR5bmFtaWMsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBhPXtyZXRlbnRpb25Qb2xpY3k6dm9pZCAwfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7ZT4+PjM9PTE/YS5yZXRlbnRpb25Qb2xpY3k9eyRjYXNlOlwiZHluYW1pY1wiLGR5bmFtaWM6dC5EeW5hbWljQ29udmVyc2F0aW9uUmV0ZW50aW9uUG9saWN5LmRlY29kZShyLHIudWludDMyKCkpfTpyLnNraXBUeXBlKDcmZSl9cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e3JldGVudGlvblBvbGljeTp2b2lkIDB9O3JldHVyblwiZHluYW1pY1wiPT09ZS5yZXRlbnRpb25Qb2xpY3k/LiRjYXNlJiZ2b2lkIDAhPT1lLnJldGVudGlvblBvbGljeT8uZHluYW1pYyYmbnVsbCE9PWUucmV0ZW50aW9uUG9saWN5Py5keW5hbWljJiYobi5yZXRlbnRpb25Qb2xpY3k9eyRjYXNlOlwiZHluYW1pY1wiLGR5bmFtaWM6dC5EeW5hbWljQ29udmVyc2F0aW9uUmV0ZW50aW9uUG9saWN5LmZyb21QYXJ0aWFsKGUucmV0ZW50aW9uUG9saWN5LmR5bmFtaWMpfSksbn19LHQuRHluYW1pY0NvbnZlcnNhdGlvblJldGVudGlvblBvbGljeT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiEwPT09ZS5zZW5kUmVhZE1lc3NhZ2VzJiZ0LnVpbnQzMig4KS5ib29sKGUuc2VuZFJlYWRNZXNzYWdlcyksITA9PT1lLnNlbmRSZWxlYXNlTWVzc2FnZXMmJnQudWludDMyKDE2KS5ib29sKGUuc2VuZFJlbGVhc2VNZXNzYWdlcyksXCIwXCIhPT1lLnVucmVhZFJldGVudGlvblRpbWVTZWNvbmRzJiZ0LnVpbnQzMigyNCkuaW50NjQoZS51bnJlYWRSZXRlbnRpb25UaW1lU2Vjb25kcyksXCIwXCIhPT1lLnJlYWRSZXRlbnRpb25UaW1lU2Vjb25kcyYmdC51aW50MzIoMzIpLmludDY0KGUucmVhZFJldGVudGlvblRpbWVTZWNvbmRzKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3NlbmRSZWFkTWVzc2FnZXM6ITEsc2VuZFJlbGVhc2VNZXNzYWdlczohMSx1bnJlYWRSZXRlbnRpb25UaW1lU2Vjb25kczpcIjBcIixyZWFkUmV0ZW50aW9uVGltZVNlY29uZHM6XCIwXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnNlbmRSZWFkTWVzc2FnZXM9bi5ib29sKCk7YnJlYWs7Y2FzZSAyOmkuc2VuZFJlbGVhc2VNZXNzYWdlcz1uLmJvb2woKTticmVhaztjYXNlIDM6aS51bnJlYWRSZXRlbnRpb25UaW1lU2Vjb25kcz1hKG4uaW50NjQoKSk7YnJlYWs7Y2FzZSA0OmkucmVhZFJldGVudGlvblRpbWVTZWNvbmRzPWEobi5pbnQ2NCgpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3NlbmRSZWFkTWVzc2FnZXM6ITEsc2VuZFJlbGVhc2VNZXNzYWdlczohMSx1bnJlYWRSZXRlbnRpb25UaW1lU2Vjb25kczpcIjBcIixyZWFkUmV0ZW50aW9uVGltZVNlY29uZHM6XCIwXCJ9O3JldHVybiB0LnNlbmRSZWFkTWVzc2FnZXM9ZS5zZW5kUmVhZE1lc3NhZ2VzPz8hMSx0LnNlbmRSZWxlYXNlTWVzc2FnZXM9ZS5zZW5kUmVsZWFzZU1lc3NhZ2VzPz8hMSx0LnVucmVhZFJldGVudGlvblRpbWVTZWNvbmRzPWUudW5yZWFkUmV0ZW50aW9uVGltZVNlY29uZHM/P1wiMFwiLHQucmVhZFJldGVudGlvblRpbWVTZWNvbmRzPWUucmVhZFJldGVudGlvblRpbWVTZWNvbmRzPz9cIjBcIix0fX0sdC5IaWdoV2F0ZXJtYXJrPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLmhpZ2hXYXRlcm1hcmtUeXBlJiZ0LnVpbnQzMig4KS5pbnQzMihlLmhpZ2hXYXRlcm1hcmtUeXBlKSxcIm1lc3NhZ2VJZFwiPT09ZS53YXRlcm1hcmtUb2tlbj8uJGNhc2UmJnQudWludDMyKDE2KS51aW50NjQoZS53YXRlcm1hcmtUb2tlbi5tZXNzYWdlSWQpLFwiY29udmVyc2F0aW9uVmVyc2lvblwiPT09ZS53YXRlcm1hcmtUb2tlbj8uJGNhc2UmJnQudWludDMyKDI0KS51aW50NjQoZS53YXRlcm1hcmtUb2tlbi5jb252ZXJzYXRpb25WZXJzaW9uKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2hpZ2hXYXRlcm1hcmtUeXBlOjAsd2F0ZXJtYXJrVG9rZW46dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5oaWdoV2F0ZXJtYXJrVHlwZT1uLmludDMyKCk7YnJlYWs7Y2FzZSAyOmkud2F0ZXJtYXJrVG9rZW49eyRjYXNlOlwibWVzc2FnZUlkXCIsbWVzc2FnZUlkOmEobi51aW50NjQoKSl9O2JyZWFrO2Nhc2UgMzppLndhdGVybWFya1Rva2VuPXskY2FzZTpcImNvbnZlcnNhdGlvblZlcnNpb25cIixjb252ZXJzYXRpb25WZXJzaW9uOmEobi51aW50NjQoKSl9O2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17aGlnaFdhdGVybWFya1R5cGU6MCx3YXRlcm1hcmtUb2tlbjp2b2lkIDB9O3JldHVybiB0LmhpZ2hXYXRlcm1hcmtUeXBlPWUuaGlnaFdhdGVybWFya1R5cGU/PzAsXCJtZXNzYWdlSWRcIj09PWUud2F0ZXJtYXJrVG9rZW4/LiRjYXNlJiZ2b2lkIDAhPT1lLndhdGVybWFya1Rva2VuPy5tZXNzYWdlSWQmJm51bGwhPT1lLndhdGVybWFya1Rva2VuPy5tZXNzYWdlSWQmJih0LndhdGVybWFya1Rva2VuPXskY2FzZTpcIm1lc3NhZ2VJZFwiLG1lc3NhZ2VJZDplLndhdGVybWFya1Rva2VuLm1lc3NhZ2VJZH0pLFwiY29udmVyc2F0aW9uVmVyc2lvblwiPT09ZS53YXRlcm1hcmtUb2tlbj8uJGNhc2UmJnZvaWQgMCE9PWUud2F0ZXJtYXJrVG9rZW4/LmNvbnZlcnNhdGlvblZlcnNpb24mJm51bGwhPT1lLndhdGVybWFya1Rva2VuPy5jb252ZXJzYXRpb25WZXJzaW9uJiYodC53YXRlcm1hcmtUb2tlbj17JGNhc2U6XCJjb252ZXJzYXRpb25WZXJzaW9uXCIsY29udmVyc2F0aW9uVmVyc2lvbjplLndhdGVybWFya1Rva2VuLmNvbnZlcnNhdGlvblZlcnNpb259KSx0fX0sby5kZWZhdWx0LnV0aWwuTG9uZyE9PWkuZGVmYXVsdCYmKG8uZGVmYXVsdC51dGlsLkxvbmc9aS5kZWZhdWx0LG8uZGVmYXVsdC5jb25maWd1cmUoKSl9LDkxODIwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlNuYXBTdG9yeUlkPXZvaWQgMDtjb25zdCBpPW4oNjMxNzIpLG89cihuKDYyMTAwKSk7dC5TbmFwU3RvcnlJZD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLmNvbXBvc2l0ZVN0b3J5SWQmJmkuQ29tcG9zaXRlU3RvcnlJZC5lbmNvZGUoZS5jb21wb3NpdGVTdG9yeUlkLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLFwiXCIhPT1lLmxlZ2FjeVN0b3J5SWQmJnQudWludDMyKDE4KS5zdHJpbmcoZS5sZWdhY3lTdG9yeUlkKSxcIlwiIT09ZS5wb3N0ZXJPd25lcklkJiZ0LnVpbnQzMigyNikuc3RyaW5nKGUucG9zdGVyT3duZXJJZCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBhPXtjb21wb3NpdGVTdG9yeUlkOnZvaWQgMCxsZWdhY3lTdG9yeUlkOlwiXCIscG9zdGVyT3duZXJJZDpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS5jb21wb3NpdGVTdG9yeUlkPWkuQ29tcG9zaXRlU3RvcnlJZC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDI6YS5sZWdhY3lTdG9yeUlkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmEucG9zdGVyT3duZXJJZD1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17Y29tcG9zaXRlU3RvcnlJZDp2b2lkIDAsbGVnYWN5U3RvcnlJZDpcIlwiLHBvc3Rlck93bmVySWQ6XCJcIn07cmV0dXJuIHQuY29tcG9zaXRlU3RvcnlJZD12b2lkIDAhPT1lLmNvbXBvc2l0ZVN0b3J5SWQmJm51bGwhPT1lLmNvbXBvc2l0ZVN0b3J5SWQ/aS5Db21wb3NpdGVTdG9yeUlkLmZyb21QYXJ0aWFsKGUuY29tcG9zaXRlU3RvcnlJZCk6dm9pZCAwLHQubGVnYWN5U3RvcnlJZD1lLmxlZ2FjeVN0b3J5SWQ/P1wiXCIsdC5wb3N0ZXJPd25lcklkPWUucG9zdGVyT3duZXJJZD8/XCJcIix0fX19LDk3ODA0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlVVSUQ9dm9pZCAwO2NvbnN0IGk9cihuKDYyMTAwKSk7ZnVuY3Rpb24gbygpe3JldHVybntpZDpuZXcgVWludDhBcnJheX19dC5VVUlEPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLmlkLmxlbmd0aCYmdC51aW50MzIoMTApLmJ5dGVzKGUuaWQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgYT1vKCk7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2EuaWQ9bi5ieXRlcygpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD1vKCk7cmV0dXJuIHQuaWQ9ZS5pZD8/bmV3IFVpbnQ4QXJyYXksdH19fSwxNjc3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNvbnRlbnRzPXZvaWQgMDtjb25zdCBpPW4oNzc0Miksbz1uKDY5ODc1KSxhPW4oMTk1OSkscz1uKDYxNzYpLGM9cihuKDYyMTAwKSk7dC5Db250ZW50cz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpjLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwidGV4dFwiPT09ZS5jb250ZW50Py4kY2FzZSYmaS5UZXh0LmVuY29kZShlLmNvbnRlbnQudGV4dCx0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSxcImV4dGVybmFsTWVkaWFcIj09PWUuY29udGVudD8uJGNhc2UmJmkuRXh0ZXJuYWxNZWRpYS5lbmNvZGUoZS5jb250ZW50LmV4dGVybmFsTWVkaWEsdC51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCksXCJzdGlja2VyXCI9PT1lLmNvbnRlbnQ/LiRjYXNlJiZpLlN0aWNrZXIuZW5jb2RlKGUuY29udGVudC5zdGlja2VyLHQudWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpLFwic2hhcmVcIj09PWUuY29udGVudD8uJGNhc2UmJmkuU2hhcmUuZW5jb2RlKGUuY29udGVudC5zaGFyZSx0LnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKSxcIm5vdGVcIj09PWUuY29udGVudD8uJGNhc2UmJmkuTm90ZS5lbmNvZGUoZS5jb250ZW50Lm5vdGUsdC51aW50MzIoNTApLmZvcmsoKSkubGRlbGltKCksXCJzbmFwUmVwbHlcIj09PWUuY29udGVudD8uJGNhc2UmJmkuU25hcFJlcGx5LmVuY29kZShlLmNvbnRlbnQuc25hcFJlcGx5LHQudWludDMyKDU4KS5mb3JrKCkpLmxkZWxpbSgpLFwic3RhdHVzTWVzc2FnZVwiPT09ZS5jb250ZW50Py4kY2FzZSYmby5TdGF0dXNNZXNzYWdlLmVuY29kZShlLmNvbnRlbnQuc3RhdHVzTWVzc2FnZSx0LnVpbnQzMig2NikuZm9yaygpKS5sZGVsaW0oKSxcImxvY2F0aW9uXCI9PT1lLmNvbnRlbnQ/LiRjYXNlJiZpLkxvY2F0aW9uLmVuY29kZShlLmNvbnRlbnQubG9jYXRpb24sdC51aW50MzIoNzQpLmZvcmsoKSkubGRlbGltKCksXCJzbmFwZG9jXCI9PT1lLmNvbnRlbnQ/LiRjYXNlJiZhLlNuYXBEb2MuZW5jb2RlKGUuY29udGVudC5zbmFwZG9jLHQudWludDMyKDkwKS5mb3JrKCkpLmxkZWxpbSgpLFwiY2FudmFzQXBwXCI9PT1lLmNvbnRlbnQ/LiRjYXNlJiZpLkNhbnZhc0FwcC5lbmNvZGUoZS5jb250ZW50LmNhbnZhc0FwcCx0LnVpbnQzMig5OCkuZm9yaygpKS5sZGVsaW0oKSxcImxpdmVMb2NhdGlvblNoYXJlXCI9PT1lLmNvbnRlbnQ/LiRjYXNlJiZpLkxpdmVMb2NhdGlvblNoYXJlLmVuY29kZShlLmNvbnRlbnQubGl2ZUxvY2F0aW9uU2hhcmUsdC51aW50MzIoMTA2KS5mb3JrKCkpLmxkZWxpbSgpLFwiY3JlYXRpdmVUb29sSXRlbVwiPT09ZS5jb250ZW50Py4kY2FzZSYmcy5DVEl0ZW1JbnN0YW5jZS5lbmNvZGUoZS5jb250ZW50LmNyZWF0aXZlVG9vbEl0ZW0sdC51aW50MzIoMTE0KS5mb3JrKCkpLmxkZWxpbSgpLFwiZmFtaWx5Q2VudGVySW52aXRlXCI9PT1lLmNvbnRlbnQ/LiRjYXNlJiZpLkZhbWlseUNlbnRlckludml0ZS5lbmNvZGUoZS5jb250ZW50LmZhbWlseUNlbnRlckludml0ZSx0LnVpbnQzMigxMjIpLmZvcmsoKSkubGRlbGltKCksXCJub25QYXJ0aWNpcGFudEJvdFJlc3BvbnNlXCI9PT1lLmNvbnRlbnQ/LiRjYXNlJiZpLk5vblBhcnRpY2lwYW50Qm90UmVzcG9uc2UuZW5jb2RlKGUuY29udGVudC5ub25QYXJ0aWNpcGFudEJvdFJlc3BvbnNlLHQudWludDMyKDEzMCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBjLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGw9e2NvbnRlbnQ6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDI6bC5jb250ZW50PXskY2FzZTpcInRleHRcIix0ZXh0OmkuVGV4dC5kZWNvZGUobixuLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAzOmwuY29udGVudD17JGNhc2U6XCJleHRlcm5hbE1lZGlhXCIsZXh0ZXJuYWxNZWRpYTppLkV4dGVybmFsTWVkaWEuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgNDpsLmNvbnRlbnQ9eyRjYXNlOlwic3RpY2tlclwiLHN0aWNrZXI6aS5TdGlja2VyLmRlY29kZShuLG4udWludDMyKCkpfTticmVhaztjYXNlIDU6bC5jb250ZW50PXskY2FzZTpcInNoYXJlXCIsc2hhcmU6aS5TaGFyZS5kZWNvZGUobixuLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA2OmwuY29udGVudD17JGNhc2U6XCJub3RlXCIsbm90ZTppLk5vdGUuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgNzpsLmNvbnRlbnQ9eyRjYXNlOlwic25hcFJlcGx5XCIsc25hcFJlcGx5OmkuU25hcFJlcGx5LmRlY29kZShuLG4udWludDMyKCkpfTticmVhaztjYXNlIDg6bC5jb250ZW50PXskY2FzZTpcInN0YXR1c01lc3NhZ2VcIixzdGF0dXNNZXNzYWdlOm8uU3RhdHVzTWVzc2FnZS5kZWNvZGUobixuLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA5OmwuY29udGVudD17JGNhc2U6XCJsb2NhdGlvblwiLGxvY2F0aW9uOmkuTG9jYXRpb24uZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMTE6bC5jb250ZW50PXskY2FzZTpcInNuYXBkb2NcIixzbmFwZG9jOmEuU25hcERvYy5kZWNvZGUobixuLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAxMjpsLmNvbnRlbnQ9eyRjYXNlOlwiY2FudmFzQXBwXCIsY2FudmFzQXBwOmkuQ2FudmFzQXBwLmRlY29kZShuLG4udWludDMyKCkpfTticmVhaztjYXNlIDEzOmwuY29udGVudD17JGNhc2U6XCJsaXZlTG9jYXRpb25TaGFyZVwiLGxpdmVMb2NhdGlvblNoYXJlOmkuTGl2ZUxvY2F0aW9uU2hhcmUuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMTQ6bC5jb250ZW50PXskY2FzZTpcImNyZWF0aXZlVG9vbEl0ZW1cIixjcmVhdGl2ZVRvb2xJdGVtOnMuQ1RJdGVtSW5zdGFuY2UuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMTU6bC5jb250ZW50PXskY2FzZTpcImZhbWlseUNlbnRlckludml0ZVwiLGZhbWlseUNlbnRlckludml0ZTppLkZhbWlseUNlbnRlckludml0ZS5kZWNvZGUobixuLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAxNjpsLmNvbnRlbnQ9eyRjYXNlOlwibm9uUGFydGljaXBhbnRCb3RSZXNwb25zZVwiLG5vblBhcnRpY2lwYW50Qm90UmVzcG9uc2U6aS5Ob25QYXJ0aWNpcGFudEJvdFJlc3BvbnNlLmRlY29kZShuLG4udWludDMyKCkpfTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGx9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2NvbnRlbnQ6dm9pZCAwfTtyZXR1cm5cInRleHRcIj09PWUuY29udGVudD8uJGNhc2UmJnZvaWQgMCE9PWUuY29udGVudD8udGV4dCYmbnVsbCE9PWUuY29udGVudD8udGV4dCYmKHQuY29udGVudD17JGNhc2U6XCJ0ZXh0XCIsdGV4dDppLlRleHQuZnJvbVBhcnRpYWwoZS5jb250ZW50LnRleHQpfSksXCJleHRlcm5hbE1lZGlhXCI9PT1lLmNvbnRlbnQ/LiRjYXNlJiZ2b2lkIDAhPT1lLmNvbnRlbnQ/LmV4dGVybmFsTWVkaWEmJm51bGwhPT1lLmNvbnRlbnQ/LmV4dGVybmFsTWVkaWEmJih0LmNvbnRlbnQ9eyRjYXNlOlwiZXh0ZXJuYWxNZWRpYVwiLGV4dGVybmFsTWVkaWE6aS5FeHRlcm5hbE1lZGlhLmZyb21QYXJ0aWFsKGUuY29udGVudC5leHRlcm5hbE1lZGlhKX0pLFwic3RpY2tlclwiPT09ZS5jb250ZW50Py4kY2FzZSYmdm9pZCAwIT09ZS5jb250ZW50Py5zdGlja2VyJiZudWxsIT09ZS5jb250ZW50Py5zdGlja2VyJiYodC5jb250ZW50PXskY2FzZTpcInN0aWNrZXJcIixzdGlja2VyOmkuU3RpY2tlci5mcm9tUGFydGlhbChlLmNvbnRlbnQuc3RpY2tlcil9KSxcInNoYXJlXCI9PT1lLmNvbnRlbnQ/LiRjYXNlJiZ2b2lkIDAhPT1lLmNvbnRlbnQ/LnNoYXJlJiZudWxsIT09ZS5jb250ZW50Py5zaGFyZSYmKHQuY29udGVudD17JGNhc2U6XCJzaGFyZVwiLHNoYXJlOmkuU2hhcmUuZnJvbVBhcnRpYWwoZS5jb250ZW50LnNoYXJlKX0pLFwibm90ZVwiPT09ZS5jb250ZW50Py4kY2FzZSYmdm9pZCAwIT09ZS5jb250ZW50Py5ub3RlJiZudWxsIT09ZS5jb250ZW50Py5ub3RlJiYodC5jb250ZW50PXskY2FzZTpcIm5vdGVcIixub3RlOmkuTm90ZS5mcm9tUGFydGlhbChlLmNvbnRlbnQubm90ZSl9KSxcInNuYXBSZXBseVwiPT09ZS5jb250ZW50Py4kY2FzZSYmdm9pZCAwIT09ZS5jb250ZW50Py5zbmFwUmVwbHkmJm51bGwhPT1lLmNvbnRlbnQ/LnNuYXBSZXBseSYmKHQuY29udGVudD17JGNhc2U6XCJzbmFwUmVwbHlcIixzbmFwUmVwbHk6aS5TbmFwUmVwbHkuZnJvbVBhcnRpYWwoZS5jb250ZW50LnNuYXBSZXBseSl9KSxcInN0YXR1c01lc3NhZ2VcIj09PWUuY29udGVudD8uJGNhc2UmJnZvaWQgMCE9PWUuY29udGVudD8uc3RhdHVzTWVzc2FnZSYmbnVsbCE9PWUuY29udGVudD8uc3RhdHVzTWVzc2FnZSYmKHQuY29udGVudD17JGNhc2U6XCJzdGF0dXNNZXNzYWdlXCIsc3RhdHVzTWVzc2FnZTpvLlN0YXR1c01lc3NhZ2UuZnJvbVBhcnRpYWwoZS5jb250ZW50LnN0YXR1c01lc3NhZ2UpfSksXCJsb2NhdGlvblwiPT09ZS5jb250ZW50Py4kY2FzZSYmdm9pZCAwIT09ZS5jb250ZW50Py5sb2NhdGlvbiYmbnVsbCE9PWUuY29udGVudD8ubG9jYXRpb24mJih0LmNvbnRlbnQ9eyRjYXNlOlwibG9jYXRpb25cIixsb2NhdGlvbjppLkxvY2F0aW9uLmZyb21QYXJ0aWFsKGUuY29udGVudC5sb2NhdGlvbil9KSxcInNuYXBkb2NcIj09PWUuY29udGVudD8uJGNhc2UmJnZvaWQgMCE9PWUuY29udGVudD8uc25hcGRvYyYmbnVsbCE9PWUuY29udGVudD8uc25hcGRvYyYmKHQuY29udGVudD17JGNhc2U6XCJzbmFwZG9jXCIsc25hcGRvYzphLlNuYXBEb2MuZnJvbVBhcnRpYWwoZS5jb250ZW50LnNuYXBkb2MpfSksXCJjYW52YXNBcHBcIj09PWUuY29udGVudD8uJGNhc2UmJnZvaWQgMCE9PWUuY29udGVudD8uY2FudmFzQXBwJiZudWxsIT09ZS5jb250ZW50Py5jYW52YXNBcHAmJih0LmNvbnRlbnQ9eyRjYXNlOlwiY2FudmFzQXBwXCIsY2FudmFzQXBwOmkuQ2FudmFzQXBwLmZyb21QYXJ0aWFsKGUuY29udGVudC5jYW52YXNBcHApfSksXCJsaXZlTG9jYXRpb25TaGFyZVwiPT09ZS5jb250ZW50Py4kY2FzZSYmdm9pZCAwIT09ZS5jb250ZW50Py5saXZlTG9jYXRpb25TaGFyZSYmbnVsbCE9PWUuY29udGVudD8ubGl2ZUxvY2F0aW9uU2hhcmUmJih0LmNvbnRlbnQ9eyRjYXNlOlwibGl2ZUxvY2F0aW9uU2hhcmVcIixsaXZlTG9jYXRpb25TaGFyZTppLkxpdmVMb2NhdGlvblNoYXJlLmZyb21QYXJ0aWFsKGUuY29udGVudC5saXZlTG9jYXRpb25TaGFyZSl9KSxcImNyZWF0aXZlVG9vbEl0ZW1cIj09PWUuY29udGVudD8uJGNhc2UmJnZvaWQgMCE9PWUuY29udGVudD8uY3JlYXRpdmVUb29sSXRlbSYmbnVsbCE9PWUuY29udGVudD8uY3JlYXRpdmVUb29sSXRlbSYmKHQuY29udGVudD17JGNhc2U6XCJjcmVhdGl2ZVRvb2xJdGVtXCIsY3JlYXRpdmVUb29sSXRlbTpzLkNUSXRlbUluc3RhbmNlLmZyb21QYXJ0aWFsKGUuY29udGVudC5jcmVhdGl2ZVRvb2xJdGVtKX0pLFwiZmFtaWx5Q2VudGVySW52aXRlXCI9PT1lLmNvbnRlbnQ/LiRjYXNlJiZ2b2lkIDAhPT1lLmNvbnRlbnQ/LmZhbWlseUNlbnRlckludml0ZSYmbnVsbCE9PWUuY29udGVudD8uZmFtaWx5Q2VudGVySW52aXRlJiYodC5jb250ZW50PXskY2FzZTpcImZhbWlseUNlbnRlckludml0ZVwiLGZhbWlseUNlbnRlckludml0ZTppLkZhbWlseUNlbnRlckludml0ZS5mcm9tUGFydGlhbChlLmNvbnRlbnQuZmFtaWx5Q2VudGVySW52aXRlKX0pLFwibm9uUGFydGljaXBhbnRCb3RSZXNwb25zZVwiPT09ZS5jb250ZW50Py4kY2FzZSYmdm9pZCAwIT09ZS5jb250ZW50Py5ub25QYXJ0aWNpcGFudEJvdFJlc3BvbnNlJiZudWxsIT09ZS5jb250ZW50Py5ub25QYXJ0aWNpcGFudEJvdFJlc3BvbnNlJiYodC5jb250ZW50PXskY2FzZTpcIm5vblBhcnRpY2lwYW50Qm90UmVzcG9uc2VcIixub25QYXJ0aWNpcGFudEJvdFJlc3BvbnNlOmkuTm9uUGFydGljaXBhbnRCb3RSZXNwb25zZS5mcm9tUGFydGlhbChlLmNvbnRlbnQubm9uUGFydGljaXBhbnRCb3RSZXNwb25zZSl9KSx0fX19LDk2NDU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTGVnYWN5U2hhemFtU2hhcmU9dC5MZWdhY3lEaXNjb3ZlclNoYXJlPXZvaWQgMDtjb25zdCBpPW4oOTU3MjEpLG89cihuKDYyMTAwKSk7dC5MZWdhY3lEaXNjb3ZlclNoYXJlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUubWVkaWEmJmkuTWVkaWFNZXRhZGF0YS5lbmNvZGUoZS5tZWRpYSx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGE9e21lZGlhOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2EubWVkaWE9aS5NZWRpYU1ldGFkYXRhLmRlY29kZShuLG4udWludDMyKCkpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17bWVkaWE6dm9pZCAwfTtyZXR1cm4gdC5tZWRpYT12b2lkIDAhPT1lLm1lZGlhJiZudWxsIT09ZS5tZWRpYT9pLk1lZGlhTWV0YWRhdGEuZnJvbVBhcnRpYWwoZS5tZWRpYSk6dm9pZCAwLHR9fSx0LkxlZ2FjeVNoYXphbVNoYXJlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUuYXR0YWNoZWRVcmwmJnQudWludDMyKDEwKS5zdHJpbmcoZS5hdHRhY2hlZFVybCksdm9pZCAwIT09ZS5tZWRpYSYmaS5NZWRpYU1ldGFkYXRhLmVuY29kZShlLm1lZGlhLHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgYT17YXR0YWNoZWRVcmw6XCJcIixtZWRpYTp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLmF0dGFjaGVkVXJsPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmEubWVkaWE9aS5NZWRpYU1ldGFkYXRhLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17YXR0YWNoZWRVcmw6XCJcIixtZWRpYTp2b2lkIDB9O3JldHVybiB0LmF0dGFjaGVkVXJsPWUuYXR0YWNoZWRVcmw/P1wiXCIsdC5tZWRpYT12b2lkIDAhPT1lLm1lZGlhJiZudWxsIT09ZS5tZWRpYT9pLk1lZGlhTWV0YWRhdGEuZnJvbVBhcnRpYWwoZS5tZWRpYSk6dm9pZCAwLHR9fX0sOTU3MjE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTWVkaWFNZXRhZGF0YV9MZWdhY3lEaXJlY3REb3dubG9hZFVybD10Lk1lZGlhTWV0YWRhdGFfTWVkaWFEaW1lbnNpb25zPXQuTWVkaWFNZXRhZGF0YV9NZWRpYUVuY3J5cHRpb25JbmZvPXQuTWVkaWFNZXRhZGF0YT10LkR1cmF0aW9uPXQuTWVkaWFNZXRhZGF0YV9MZWdhY3lEaXJlY3REb3dubG9hZFVybF9NZWRpYVVybFR5cGU9dC5NZWRpYU1ldGFkYXRhX09yaWVudGF0aW9uPXQuTWVkaWFNZXRhZGF0YV9NZWRpYVR5cGU9dm9pZCAwO2NvbnN0IGk9cihuKDQxNTgzKSksbz1yKG4oNjIxMDApKSxhPW4oODE0NDUpO2Z1bmN0aW9uIHMoKXtyZXR1cm57a2V5Om5ldyBVaW50OEFycmF5LGl2Om5ldyBVaW50OEFycmF5fX12YXIgYyxsLHU7KHU9dC5NZWRpYU1ldGFkYXRhX01lZGlhVHlwZXx8KHQuTWVkaWFNZXRhZGF0YV9NZWRpYVR5cGU9e30pKVt1LklNQUdFPTBdPVwiSU1BR0VcIix1W3UuVklERU89MV09XCJWSURFT1wiLHVbdS5TUEVDVEFDTEVTX1ZJREVPPTJdPVwiU1BFQ1RBQ0xFU19WSURFT1wiLHVbdS5HSUY9M109XCJHSUZcIix1W3UuQVVESU89NF09XCJBVURJT1wiLHVbdS5TUEVDVEFDTEVTX0lNQUdFPTVdPVwiU1BFQ1RBQ0xFU19JTUFHRVwiLHVbdS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKGw9dC5NZWRpYU1ldGFkYXRhX09yaWVudGF0aW9ufHwodC5NZWRpYU1ldGFkYXRhX09yaWVudGF0aW9uPXt9KSlbbC5WRVJUSUNBTD0wXT1cIlZFUlRJQ0FMXCIsbFtsLkhPUklaT05UQUw9MV09XCJIT1JJWk9OVEFMXCIsbFtsLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwoYz10Lk1lZGlhTWV0YWRhdGFfTGVnYWN5RGlyZWN0RG93bmxvYWRVcmxfTWVkaWFVcmxUeXBlfHwodC5NZWRpYU1ldGFkYXRhX0xlZ2FjeURpcmVjdERvd25sb2FkVXJsX01lZGlhVXJsVHlwZT17fSkpW2MuR0NTPTBdPVwiR0NTXCIsY1tjLlMzPTFdPVwiUzNcIixjW2MuVU5SRUNPR05JWkVEX1ZBTFVFPTJdPVwiVU5SRUNPR05JWkVEX1ZBTFVFXCIsY1tjLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0LkR1cmF0aW9uPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJpbmZpbml0ZVwiPT09ZS5kaXNwbGF5RHVyYXRpb24/LiRjYXNlJiZhLkVtcHR5LmVuY29kZShlLmRpc3BsYXlEdXJhdGlvbi5pbmZpbml0ZSx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSxcInBsYXlPbmNlXCI9PT1lLmRpc3BsYXlEdXJhdGlvbj8uJGNhc2UmJmEuRW1wdHkuZW5jb2RlKGUuZGlzcGxheUR1cmF0aW9uLnBsYXlPbmNlLHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLFwiZHVyYXRpb25TZWNvbmRzXCI9PT1lLmRpc3BsYXlEdXJhdGlvbj8uJGNhc2UmJnQudWludDMyKDI0KS51aW50MzIoZS5kaXNwbGF5RHVyYXRpb24uZHVyYXRpb25TZWNvbmRzKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2Rpc3BsYXlEdXJhdGlvbjp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmRpc3BsYXlEdXJhdGlvbj17JGNhc2U6XCJpbmZpbml0ZVwiLGluZmluaXRlOmEuRW1wdHkuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMjppLmRpc3BsYXlEdXJhdGlvbj17JGNhc2U6XCJwbGF5T25jZVwiLHBsYXlPbmNlOmEuRW1wdHkuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMzppLmRpc3BsYXlEdXJhdGlvbj17JGNhc2U6XCJkdXJhdGlvblNlY29uZHNcIixkdXJhdGlvblNlY29uZHM6bi51aW50MzIoKX07YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtkaXNwbGF5RHVyYXRpb246dm9pZCAwfTtyZXR1cm5cImluZmluaXRlXCI9PT1lLmRpc3BsYXlEdXJhdGlvbj8uJGNhc2UmJnZvaWQgMCE9PWUuZGlzcGxheUR1cmF0aW9uPy5pbmZpbml0ZSYmbnVsbCE9PWUuZGlzcGxheUR1cmF0aW9uPy5pbmZpbml0ZSYmKHQuZGlzcGxheUR1cmF0aW9uPXskY2FzZTpcImluZmluaXRlXCIsaW5maW5pdGU6YS5FbXB0eS5mcm9tUGFydGlhbChlLmRpc3BsYXlEdXJhdGlvbi5pbmZpbml0ZSl9KSxcInBsYXlPbmNlXCI9PT1lLmRpc3BsYXlEdXJhdGlvbj8uJGNhc2UmJnZvaWQgMCE9PWUuZGlzcGxheUR1cmF0aW9uPy5wbGF5T25jZSYmbnVsbCE9PWUuZGlzcGxheUR1cmF0aW9uPy5wbGF5T25jZSYmKHQuZGlzcGxheUR1cmF0aW9uPXskY2FzZTpcInBsYXlPbmNlXCIscGxheU9uY2U6YS5FbXB0eS5mcm9tUGFydGlhbChlLmRpc3BsYXlEdXJhdGlvbi5wbGF5T25jZSl9KSxcImR1cmF0aW9uU2Vjb25kc1wiPT09ZS5kaXNwbGF5RHVyYXRpb24/LiRjYXNlJiZ2b2lkIDAhPT1lLmRpc3BsYXlEdXJhdGlvbj8uZHVyYXRpb25TZWNvbmRzJiZudWxsIT09ZS5kaXNwbGF5RHVyYXRpb24/LmR1cmF0aW9uU2Vjb25kcyYmKHQuZGlzcGxheUR1cmF0aW9uPXskY2FzZTpcImR1cmF0aW9uU2Vjb25kc1wiLGR1cmF0aW9uU2Vjb25kczplLmRpc3BsYXlEdXJhdGlvbi5kdXJhdGlvblNlY29uZHN9KSx0fX0sdC5NZWRpYU1ldGFkYXRhPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLnR5cGUmJm4udWludDMyKDE2KS5pbnQzMihlLnR5cGUpLDAhPT1lLm9yaWVudGF0aW9uJiZuLnVpbnQzMigyNCkuaW50MzIoZS5vcmllbnRhdGlvbiksdm9pZCAwIT09ZS5lbmNyeXB0aW9uSW5mbyYmdC5NZWRpYU1ldGFkYXRhX01lZGlhRW5jcnlwdGlvbkluZm8uZW5jb2RlKGUuZW5jcnlwdGlvbkluZm8sbi51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5kaW1lbnNpb25zJiZ0Lk1lZGlhTWV0YWRhdGFfTWVkaWFEaW1lbnNpb25zLmVuY29kZShlLmRpbWVuc2lvbnMsbi51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKCksXCJzb3VyY2VNZWRpYUlkXCI9PT1lLnNvdXJjZU1lZGlhPy4kY2FzZSYmbi51aW50MzIoNTApLnN0cmluZyhlLnNvdXJjZU1lZGlhLnNvdXJjZU1lZGlhSWQpLFwiY29udGVudE9iamVjdEluZGV4XCI9PT1lLnNvdXJjZU1lZGlhPy4kY2FzZSYmbi51aW50MzIoNTYpLnVpbnQzMihlLnNvdXJjZU1lZGlhLmNvbnRlbnRPYmplY3RJbmRleCksITA9PT1lLmhhc1NvdW5kJiZuLnVpbnQzMig2NCkuYm9vbChlLmhhc1NvdW5kKSwhMD09PWUuemlwcGVkJiZuLnVpbnQzMig3MikuYm9vbChlLnppcHBlZCksITA9PT1lLmZyb250RmFjaW5nJiZuLnVpbnQzMig4MCkuYm9vbChlLmZyb250RmFjaW5nKSx2b2lkIDAhPT1lLmxlZ2FjeURpcmVjdERvd25sb2FkVXJsJiZ0Lk1lZGlhTWV0YWRhdGFfTGVnYWN5RGlyZWN0RG93bmxvYWRVcmwuZW5jb2RlKGUubGVnYWN5RGlyZWN0RG93bmxvYWRVcmwsbi51aW50MzIoOTApLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5kdXJhdGlvbiYmdC5EdXJhdGlvbi5lbmNvZGUoZS5kdXJhdGlvbixuLnVpbnQzMig5OCkuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS5tZWRpYUR1cmF0aW9uTXMmJm4udWludDMyKDEwNCkudWludDMyKGUubWVkaWFEdXJhdGlvbk1zKSwhMD09PWUuY29udGFpbnNBbmltYXRlZFN0aWNrZXJzJiZuLnVpbnQzMigxMTIpLmJvb2woZS5jb250YWluc0FuaW1hdGVkU3RpY2tlcnMpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3QgYT17dHlwZTowLG9yaWVudGF0aW9uOjAsZW5jcnlwdGlvbkluZm86dm9pZCAwLGRpbWVuc2lvbnM6dm9pZCAwLHNvdXJjZU1lZGlhOnZvaWQgMCxoYXNTb3VuZDohMSx6aXBwZWQ6ITEsZnJvbnRGYWNpbmc6ITEsbGVnYWN5RGlyZWN0RG93bmxvYWRVcmw6dm9pZCAwLGR1cmF0aW9uOnZvaWQgMCxtZWRpYUR1cmF0aW9uTXM6MCxjb250YWluc0FuaW1hdGVkU3RpY2tlcnM6ITF9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMjphLnR5cGU9ci5pbnQzMigpO2JyZWFrO2Nhc2UgMzphLm9yaWVudGF0aW9uPXIuaW50MzIoKTticmVhaztjYXNlIDQ6YS5lbmNyeXB0aW9uSW5mbz10Lk1lZGlhTWV0YWRhdGFfTWVkaWFFbmNyeXB0aW9uSW5mby5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDU6YS5kaW1lbnNpb25zPXQuTWVkaWFNZXRhZGF0YV9NZWRpYURpbWVuc2lvbnMuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSA2OmEuc291cmNlTWVkaWE9eyRjYXNlOlwic291cmNlTWVkaWFJZFwiLHNvdXJjZU1lZGlhSWQ6ci5zdHJpbmcoKX07YnJlYWs7Y2FzZSA3OmEuc291cmNlTWVkaWE9eyRjYXNlOlwiY29udGVudE9iamVjdEluZGV4XCIsY29udGVudE9iamVjdEluZGV4OnIudWludDMyKCl9O2JyZWFrO2Nhc2UgODphLmhhc1NvdW5kPXIuYm9vbCgpO2JyZWFrO2Nhc2UgOTphLnppcHBlZD1yLmJvb2woKTticmVhaztjYXNlIDEwOmEuZnJvbnRGYWNpbmc9ci5ib29sKCk7YnJlYWs7Y2FzZSAxMTphLmxlZ2FjeURpcmVjdERvd25sb2FkVXJsPXQuTWVkaWFNZXRhZGF0YV9MZWdhY3lEaXJlY3REb3dubG9hZFVybC5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDEyOmEuZHVyYXRpb249dC5EdXJhdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDEzOmEubWVkaWFEdXJhdGlvbk1zPXIudWludDMyKCk7YnJlYWs7Y2FzZSAxNDphLmNvbnRhaW5zQW5pbWF0ZWRTdGlja2Vycz1yLmJvb2woKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e3R5cGU6MCxvcmllbnRhdGlvbjowLGVuY3J5cHRpb25JbmZvOnZvaWQgMCxkaW1lbnNpb25zOnZvaWQgMCxzb3VyY2VNZWRpYTp2b2lkIDAsaGFzU291bmQ6ITEsemlwcGVkOiExLGZyb250RmFjaW5nOiExLGxlZ2FjeURpcmVjdERvd25sb2FkVXJsOnZvaWQgMCxkdXJhdGlvbjp2b2lkIDAsbWVkaWFEdXJhdGlvbk1zOjAsY29udGFpbnNBbmltYXRlZFN0aWNrZXJzOiExfTtyZXR1cm4gbi50eXBlPWUudHlwZT8/MCxuLm9yaWVudGF0aW9uPWUub3JpZW50YXRpb24/PzAsbi5lbmNyeXB0aW9uSW5mbz12b2lkIDAhPT1lLmVuY3J5cHRpb25JbmZvJiZudWxsIT09ZS5lbmNyeXB0aW9uSW5mbz90Lk1lZGlhTWV0YWRhdGFfTWVkaWFFbmNyeXB0aW9uSW5mby5mcm9tUGFydGlhbChlLmVuY3J5cHRpb25JbmZvKTp2b2lkIDAsbi5kaW1lbnNpb25zPXZvaWQgMCE9PWUuZGltZW5zaW9ucyYmbnVsbCE9PWUuZGltZW5zaW9ucz90Lk1lZGlhTWV0YWRhdGFfTWVkaWFEaW1lbnNpb25zLmZyb21QYXJ0aWFsKGUuZGltZW5zaW9ucyk6dm9pZCAwLFwic291cmNlTWVkaWFJZFwiPT09ZS5zb3VyY2VNZWRpYT8uJGNhc2UmJnZvaWQgMCE9PWUuc291cmNlTWVkaWE/LnNvdXJjZU1lZGlhSWQmJm51bGwhPT1lLnNvdXJjZU1lZGlhPy5zb3VyY2VNZWRpYUlkJiYobi5zb3VyY2VNZWRpYT17JGNhc2U6XCJzb3VyY2VNZWRpYUlkXCIsc291cmNlTWVkaWFJZDplLnNvdXJjZU1lZGlhLnNvdXJjZU1lZGlhSWR9KSxcImNvbnRlbnRPYmplY3RJbmRleFwiPT09ZS5zb3VyY2VNZWRpYT8uJGNhc2UmJnZvaWQgMCE9PWUuc291cmNlTWVkaWE/LmNvbnRlbnRPYmplY3RJbmRleCYmbnVsbCE9PWUuc291cmNlTWVkaWE/LmNvbnRlbnRPYmplY3RJbmRleCYmKG4uc291cmNlTWVkaWE9eyRjYXNlOlwiY29udGVudE9iamVjdEluZGV4XCIsY29udGVudE9iamVjdEluZGV4OmUuc291cmNlTWVkaWEuY29udGVudE9iamVjdEluZGV4fSksbi5oYXNTb3VuZD1lLmhhc1NvdW5kPz8hMSxuLnppcHBlZD1lLnppcHBlZD8/ITEsbi5mcm9udEZhY2luZz1lLmZyb250RmFjaW5nPz8hMSxuLmxlZ2FjeURpcmVjdERvd25sb2FkVXJsPXZvaWQgMCE9PWUubGVnYWN5RGlyZWN0RG93bmxvYWRVcmwmJm51bGwhPT1lLmxlZ2FjeURpcmVjdERvd25sb2FkVXJsP3QuTWVkaWFNZXRhZGF0YV9MZWdhY3lEaXJlY3REb3dubG9hZFVybC5mcm9tUGFydGlhbChlLmxlZ2FjeURpcmVjdERvd25sb2FkVXJsKTp2b2lkIDAsbi5kdXJhdGlvbj12b2lkIDAhPT1lLmR1cmF0aW9uJiZudWxsIT09ZS5kdXJhdGlvbj90LkR1cmF0aW9uLmZyb21QYXJ0aWFsKGUuZHVyYXRpb24pOnZvaWQgMCxuLm1lZGlhRHVyYXRpb25Ncz1lLm1lZGlhRHVyYXRpb25Ncz8/MCxuLmNvbnRhaW5zQW5pbWF0ZWRTdGlja2Vycz1lLmNvbnRhaW5zQW5pbWF0ZWRTdGlja2Vycz8/ITEsbn19LHQuTWVkaWFNZXRhZGF0YV9NZWRpYUVuY3J5cHRpb25JbmZvPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLmtleS5sZW5ndGgmJnQudWludDMyKDEwKS5ieXRlcyhlLmtleSksMCE9PWUuaXYubGVuZ3RoJiZ0LnVpbnQzMigxOCkuYnl0ZXMoZS5pdiksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXMoKTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5rZXk9bi5ieXRlcygpO2JyZWFrO2Nhc2UgMjppLml2PW4uYnl0ZXMoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9cygpO3JldHVybiB0LmtleT1lLmtleT8/bmV3IFVpbnQ4QXJyYXksdC5pdj1lLml2Pz9uZXcgVWludDhBcnJheSx0fX0sdC5NZWRpYU1ldGFkYXRhX01lZGlhRGltZW5zaW9ucz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS53aWR0aCYmdC51aW50MzIoOCkudWludDMyKGUud2lkdGgpLDAhPT1lLmhlaWdodCYmdC51aW50MzIoMTYpLnVpbnQzMihlLmhlaWdodCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXt3aWR0aDowLGhlaWdodDowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS53aWR0aD1uLnVpbnQzMigpO2JyZWFrO2Nhc2UgMjppLmhlaWdodD1uLnVpbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17d2lkdGg6MCxoZWlnaHQ6MH07cmV0dXJuIHQud2lkdGg9ZS53aWR0aD8/MCx0LmhlaWdodD1lLmhlaWdodD8/MCx0fX0sdC5NZWRpYU1ldGFkYXRhX0xlZ2FjeURpcmVjdERvd25sb2FkVXJsPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUudXJsJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUudXJsKSxcIjBcIiE9PWUuZXhwaXJ5U2Vjb25kcyYmdC51aW50MzIoMTYpLnVpbnQ2NChlLmV4cGlyeVNlY29uZHMpLDAhPT1lLnR5cGUmJnQudWludDMyKDI0KS5pbnQzMihlLnR5cGUpLFwiXCIhPT1lLnJlZ2lvbiYmdC51aW50MzIoMzQpLnN0cmluZyhlLnJlZ2lvbiksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXt1cmw6XCJcIixleHBpcnlTZWNvbmRzOlwiMFwiLHR5cGU6MCxyZWdpb246XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkudXJsPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkuZXhwaXJ5U2Vjb25kcz1uLnVpbnQ2NCgpLnRvU3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmkudHlwZT1uLmludDMyKCk7YnJlYWs7Y2FzZSA0OmkucmVnaW9uPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt1cmw6XCJcIixleHBpcnlTZWNvbmRzOlwiMFwiLHR5cGU6MCxyZWdpb246XCJcIn07cmV0dXJuIHQudXJsPWUudXJsPz9cIlwiLHQuZXhwaXJ5U2Vjb25kcz1lLmV4cGlyeVNlY29uZHM/P1wiMFwiLHQudHlwZT1lLnR5cGU/PzAsdC5yZWdpb249ZS5yZWdpb24/P1wiXCIsdH19LG8uZGVmYXVsdC51dGlsLkxvbmchPT1pLmRlZmF1bHQmJihvLmRlZmF1bHQudXRpbC5Mb25nPWkuZGVmYXVsdCxvLmRlZmF1bHQuY29uZmlndXJlKCkpfSw3NzQyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkZhbWlseUNlbnRlckludml0ZT10LkxlZ2FjeUFkU2hhcmU9dC5DYW52YXNBcHBTaGFyZUltYWdlQ2FyZD10LkNhbnZhc0FwcFNoYXJlQ2FyZD10LkNhbnZhc0FwcD10Lk1hcERyb3A9dC5MaXZlTG9jYXRpb25TaGFyZT10LkxvY2F0aW9uQ29vcmRpbmF0ZXM9dC5Mb2NhdGlvblJlcXVlc3Q9dC5Mb2NhdGlvbj10LlNuYXBQcm9TbmFwUmVwbHlJbmZvPXQuU25hcFJlcGx5PXQuU2F2ZWRTdG9yeT10LlZpZGVvTm90ZT10LkF1ZGlvTm90ZT10Lk5vdGU9dC5CaXRtb2ppT3V0Zml0U2hhcmU9dC5TdG9yeVNoYXJlTWVkaWFJbmZvPXQuU3RvcnlTaGFyZUluZm89dC5TbmFwUHJvU2F2ZWRTdG9yeVNoYXJlPXQuU25hcFByb1NuYXBTaGFyZT10LlNuYXBQcm9Qcm9maWxlU2hhcmU9dC5Vc2VyU2hhcmU9dC5EaXNjb3ZlclNoYXJlPXQuTWVtb3JpZXNTdG9yeT10LlNwb3RsaWdodFN0b3J5U2hhcmU9dC5TdG9yeVNoYXJlPXQuU2VhcmNoU2hhcmVTbmFwPXQuU2VhcmNoU2hhcmU9dC5TaGF6YW1TaGFyZT10Lk1hcFNoYXJlU3Rvcnk9dC5NYXBTaGFyZT10LkdhbWVTY29yZVNoYXJlPXQuU2hhcmU9dC5DdXN0b21TdGlja2VyPXQuSW5jbHVkZWRTdGlja2VyPXQuU3RpY2tlcj10LkV4dGVybmFsTWVkaWE9dC5NZW50aW9uQXR0cmlidXRlPXQuVGV4dFVybEF0dHJpYnV0ZT10LlRleHRNZWRpYUF0dHJpYnV0ZT10LlRleHRGb3JtYXRBdHRyaWJ1dGU9dC5UZXh0QXR0cmlidXRlPXQuUmFuZ2U9dC5UZXh0PXQuQmxvb3BzU3RvcnlTaGFyZV9CbG9vcHNTZWxmaWVQb3NpdGlvbj10LlNwb3RsaWdodFN0b3J5U2hhcmVfU291cmNlPXQuSW5jbHVkZWRTdGlja2VyX0luY2x1ZGVkU3RpY2tlclR5cGU9dC5UZXh0TWVkaWFBdHRyaWJ1dGVfVGV4dE1lZGlhQXR0cmlidXRlVHlwZT10LlRleHRGb3JtYXRBdHRyaWJ1dGVfVGV4dEZvcm1hdEF0dHJpYnV0ZVR5cGU9dm9pZCAwLHQuTm9uUGFydGljaXBhbnRCb3RSZXNwb25zZT10LlRleHRBZEl0ZW09dC5UZXh0QWRTaGFyZT10LkJsb29wc1N0b3J5U2hhcmU9dC5QbGFjZVNoYXJlPXQuU25hcEtpdEludml0ZVNoYXJlPXZvaWQgMDtjb25zdCBpPXIobig0MTU4MykpLG89big5NzgwNCksYT1uKDE5NTkpLHM9big5NTcyMSksYz1uKDYzMTcyKSxsPW4oMTMwMDIpLHU9big5MTgyMCksZD1uKDM3NjcyKSxmPXIobig2MjEwMCkpLHA9big5NjQ1KTtmdW5jdGlvbiBtKCl7cmV0dXJue2NvbnRlbnRFbnZlbG9wZTpuZXcgVWludDhBcnJheX19ZnVuY3Rpb24gaChlKXtyZXR1cm4gZS50b1N0cmluZygpfXZhciB2LGcseSxFLF87KF89dC5UZXh0Rm9ybWF0QXR0cmlidXRlX1RleHRGb3JtYXRBdHRyaWJ1dGVUeXBlfHwodC5UZXh0Rm9ybWF0QXR0cmlidXRlX1RleHRGb3JtYXRBdHRyaWJ1dGVUeXBlPXt9KSlbXy5CT0xEPTBdPVwiQk9MRFwiLF9bXy5JVEFMSUNTPTFdPVwiSVRBTElDU1wiLF9bXy5VTkRFUkxJTkU9Ml09XCJVTkRFUkxJTkVcIixfW18uVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLChFPXQuVGV4dE1lZGlhQXR0cmlidXRlX1RleHRNZWRpYUF0dHJpYnV0ZVR5cGV8fCh0LlRleHRNZWRpYUF0dHJpYnV0ZV9UZXh0TWVkaWFBdHRyaWJ1dGVUeXBlPXt9KSlbRS5BRERSRVNTPTBdPVwiQUREUkVTU1wiLEVbRS5QSE9ORT0xXT1cIlBIT05FXCIsRVtFLkVNQUlMPTJdPVwiRU1BSUxcIixFW0UuTUVOVElPTj0zXT1cIk1FTlRJT05cIixFW0UuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLCh5PXQuSW5jbHVkZWRTdGlja2VyX0luY2x1ZGVkU3RpY2tlclR5cGV8fCh0LkluY2x1ZGVkU3RpY2tlcl9JbmNsdWRlZFN0aWNrZXJUeXBlPXt9KSlbeS5TTkFQQ0hBVD0wXT1cIlNOQVBDSEFUXCIseVt5LkJJVE1PSkk9MV09XCJCSVRNT0pJXCIseVt5LkdFT1NUSUNLRVI9Ml09XCJHRU9TVElDS0VSXCIseVt5LkVNT0pJPTNdPVwiRU1PSklcIix5W3kuQklUTU9KSV9MRU5TPTRdPVwiQklUTU9KSV9MRU5TXCIseVt5LlVOTE9DS0FCTEVfU1RJQ0tFUj01XT1cIlVOTE9DS0FCTEVfU1RJQ0tFUlwiLHlbeS5HSVBIWT02XT1cIkdJUEhZXCIseVt5LlNOQVBfQ09OTkVDVD03XT1cIlNOQVBfQ09OTkVDVFwiLHlbeS5HQU1FX1NOSVBQRVQ9OF09XCJHQU1FX1NOSVBQRVRcIix5W3kuR0ZZQ0FUPTldPVwiR0ZZQ0FUXCIseVt5LlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwoZz10LlNwb3RsaWdodFN0b3J5U2hhcmVfU291cmNlfHwodC5TcG90bGlnaHRTdG9yeVNoYXJlX1NvdXJjZT17fSkpW2cuVU5TRVQ9MF09XCJVTlNFVFwiLGdbZy5TUE9UTElHSFRfRkVFRD0xXT1cIlNQT1RMSUdIVF9GRUVEXCIsZ1tnLlRPUElDX1BBR0U9Ml09XCJUT1BJQ19QQUdFXCIsZ1tnLlNUT1JZX01BTkFHRU1FTlRfU1BPVExJR0hUPTNdPVwiU1RPUllfTUFOQUdFTUVOVF9TUE9UTElHSFRcIixnW2cuU1RPUllfTUFOQUdFTUVOVF9TTkFQX01BUD00XT1cIlNUT1JZX01BTkFHRU1FTlRfU05BUF9NQVBcIixnW2cuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLCh2PXQuQmxvb3BzU3RvcnlTaGFyZV9CbG9vcHNTZWxmaWVQb3NpdGlvbnx8KHQuQmxvb3BzU3RvcnlTaGFyZV9CbG9vcHNTZWxmaWVQb3NpdGlvbj17fSkpW3YuUE9TSVRJT05fVU5TRVQ9MF09XCJQT1NJVElPTl9VTlNFVFwiLHZbdi5GSVJTVD0xXT1cIkZJUlNUXCIsdlt2LlNFQ09ORD0yXT1cIlNFQ09ORFwiLHZbdi5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsdC5UZXh0PXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmYuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7XCJcIiE9PWUudGV4dCYmbi51aW50MzIoMTApLnN0cmluZyhlLnRleHQpO2Zvcihjb25zdCByIG9mIGUuYXR0cmlidXRlcyl0LlRleHRBdHRyaWJ1dGUuZW5jb2RlKHIsbi51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGYuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgZi5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17dGV4dDpcIlwiLGF0dHJpYnV0ZXM6W119O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLnRleHQ9ci5zdHJpbmcoKTticmVhaztjYXNlIDI6by5hdHRyaWJ1dGVzLnB1c2godC5UZXh0QXR0cmlidXRlLmRlY29kZShyLHIudWludDMyKCkpKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e3RleHQ6XCJcIixhdHRyaWJ1dGVzOltdfTtyZXR1cm4gbi50ZXh0PWUudGV4dD8/XCJcIixuLmF0dHJpYnV0ZXM9ZS5hdHRyaWJ1dGVzPy5tYXAoKGU9PnQuVGV4dEF0dHJpYnV0ZS5mcm9tUGFydGlhbChlKSkpfHxbXSxufX0sdC5SYW5nZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpmLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5sb2NhdGlvbiYmdC51aW50MzIoOCkudWludDMyKGUubG9jYXRpb24pLDAhPT1lLmxlbmd0aCYmdC51aW50MzIoMTYpLnVpbnQzMihlLmxlbmd0aCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgZi5kZWZhdWx0LlJlYWRlcj9lOm5ldyBmLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtsb2NhdGlvbjowLGxlbmd0aDowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5sb2NhdGlvbj1uLnVpbnQzMigpO2JyZWFrO2Nhc2UgMjppLmxlbmd0aD1uLnVpbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17bG9jYXRpb246MCxsZW5ndGg6MH07cmV0dXJuIHQubG9jYXRpb249ZS5sb2NhdGlvbj8/MCx0Lmxlbmd0aD1lLmxlbmd0aD8/MCx0fX0sdC5UZXh0QXR0cmlidXRlPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmYuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUucmFuZ2UmJnQuUmFuZ2UuZW5jb2RlKGUucmFuZ2Usbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksXCJmb3JtYXRBdHRyaWJ1dGVcIj09PWUuYXR0cmlidXRlPy4kY2FzZSYmdC5UZXh0Rm9ybWF0QXR0cmlidXRlLmVuY29kZShlLmF0dHJpYnV0ZS5mb3JtYXRBdHRyaWJ1dGUsbi51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksXCJtZWRpYUF0dHJpYnV0ZVwiPT09ZS5hdHRyaWJ1dGU/LiRjYXNlJiZ0LlRleHRNZWRpYUF0dHJpYnV0ZS5lbmNvZGUoZS5hdHRyaWJ1dGUubWVkaWFBdHRyaWJ1dGUsbi51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCksXCJ1cmxBdHRyaWJ1dGVcIj09PWUuYXR0cmlidXRlPy4kY2FzZSYmdC5UZXh0VXJsQXR0cmlidXRlLmVuY29kZShlLmF0dHJpYnV0ZS51cmxBdHRyaWJ1dGUsbi51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCksXCJtZW50aW9uXCI9PT1lLmF0dHJpYnV0ZT8uJGNhc2UmJnQuTWVudGlvbkF0dHJpYnV0ZS5lbmNvZGUoZS5hdHRyaWJ1dGUubWVudGlvbixuLnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBmLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGYuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89e3JhbmdlOnZvaWQgMCxhdHRyaWJ1dGU6dm9pZCAwfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5yYW5nZT10LlJhbmdlLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMjpvLmF0dHJpYnV0ZT17JGNhc2U6XCJmb3JtYXRBdHRyaWJ1dGVcIixmb3JtYXRBdHRyaWJ1dGU6dC5UZXh0Rm9ybWF0QXR0cmlidXRlLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDM6by5hdHRyaWJ1dGU9eyRjYXNlOlwibWVkaWFBdHRyaWJ1dGVcIixtZWRpYUF0dHJpYnV0ZTp0LlRleHRNZWRpYUF0dHJpYnV0ZS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA0Om8uYXR0cmlidXRlPXskY2FzZTpcInVybEF0dHJpYnV0ZVwiLHVybEF0dHJpYnV0ZTp0LlRleHRVcmxBdHRyaWJ1dGUuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgNTpvLmF0dHJpYnV0ZT17JGNhc2U6XCJtZW50aW9uXCIsbWVudGlvbjp0Lk1lbnRpb25BdHRyaWJ1dGUuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17cmFuZ2U6dm9pZCAwLGF0dHJpYnV0ZTp2b2lkIDB9O3JldHVybiBuLnJhbmdlPXZvaWQgMCE9PWUucmFuZ2UmJm51bGwhPT1lLnJhbmdlP3QuUmFuZ2UuZnJvbVBhcnRpYWwoZS5yYW5nZSk6dm9pZCAwLFwiZm9ybWF0QXR0cmlidXRlXCI9PT1lLmF0dHJpYnV0ZT8uJGNhc2UmJnZvaWQgMCE9PWUuYXR0cmlidXRlPy5mb3JtYXRBdHRyaWJ1dGUmJm51bGwhPT1lLmF0dHJpYnV0ZT8uZm9ybWF0QXR0cmlidXRlJiYobi5hdHRyaWJ1dGU9eyRjYXNlOlwiZm9ybWF0QXR0cmlidXRlXCIsZm9ybWF0QXR0cmlidXRlOnQuVGV4dEZvcm1hdEF0dHJpYnV0ZS5mcm9tUGFydGlhbChlLmF0dHJpYnV0ZS5mb3JtYXRBdHRyaWJ1dGUpfSksXCJtZWRpYUF0dHJpYnV0ZVwiPT09ZS5hdHRyaWJ1dGU/LiRjYXNlJiZ2b2lkIDAhPT1lLmF0dHJpYnV0ZT8ubWVkaWFBdHRyaWJ1dGUmJm51bGwhPT1lLmF0dHJpYnV0ZT8ubWVkaWFBdHRyaWJ1dGUmJihuLmF0dHJpYnV0ZT17JGNhc2U6XCJtZWRpYUF0dHJpYnV0ZVwiLG1lZGlhQXR0cmlidXRlOnQuVGV4dE1lZGlhQXR0cmlidXRlLmZyb21QYXJ0aWFsKGUuYXR0cmlidXRlLm1lZGlhQXR0cmlidXRlKX0pLFwidXJsQXR0cmlidXRlXCI9PT1lLmF0dHJpYnV0ZT8uJGNhc2UmJnZvaWQgMCE9PWUuYXR0cmlidXRlPy51cmxBdHRyaWJ1dGUmJm51bGwhPT1lLmF0dHJpYnV0ZT8udXJsQXR0cmlidXRlJiYobi5hdHRyaWJ1dGU9eyRjYXNlOlwidXJsQXR0cmlidXRlXCIsdXJsQXR0cmlidXRlOnQuVGV4dFVybEF0dHJpYnV0ZS5mcm9tUGFydGlhbChlLmF0dHJpYnV0ZS51cmxBdHRyaWJ1dGUpfSksXCJtZW50aW9uXCI9PT1lLmF0dHJpYnV0ZT8uJGNhc2UmJnZvaWQgMCE9PWUuYXR0cmlidXRlPy5tZW50aW9uJiZudWxsIT09ZS5hdHRyaWJ1dGU/Lm1lbnRpb24mJihuLmF0dHJpYnV0ZT17JGNhc2U6XCJtZW50aW9uXCIsbWVudGlvbjp0Lk1lbnRpb25BdHRyaWJ1dGUuZnJvbVBhcnRpYWwoZS5hdHRyaWJ1dGUubWVudGlvbil9KSxufX0sdC5UZXh0Rm9ybWF0QXR0cmlidXRlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmYuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLnRleHRGb3JtYXRBdHRyaWJ1dGVUeXBlJiZ0LnVpbnQzMigxNikuaW50MzIoZS50ZXh0Rm9ybWF0QXR0cmlidXRlVHlwZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgZi5kZWZhdWx0LlJlYWRlcj9lOm5ldyBmLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXt0ZXh0Rm9ybWF0QXR0cmlidXRlVHlwZTowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTI/aS50ZXh0Rm9ybWF0QXR0cmlidXRlVHlwZT1uLmludDMyKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt0ZXh0Rm9ybWF0QXR0cmlidXRlVHlwZTowfTtyZXR1cm4gdC50ZXh0Rm9ybWF0QXR0cmlidXRlVHlwZT1lLnRleHRGb3JtYXRBdHRyaWJ1dGVUeXBlPz8wLHR9fSx0LlRleHRNZWRpYUF0dHJpYnV0ZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpmLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS50ZXh0TWVkaWFBdHRyaWJ1dGVUeXBlJiZ0LnVpbnQzMigxNikuaW50MzIoZS50ZXh0TWVkaWFBdHRyaWJ1dGVUeXBlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBmLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGYuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3RleHRNZWRpYUF0dHJpYnV0ZVR5cGU6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0yP2kudGV4dE1lZGlhQXR0cmlidXRlVHlwZT1uLmludDMyKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt0ZXh0TWVkaWFBdHRyaWJ1dGVUeXBlOjB9O3JldHVybiB0LnRleHRNZWRpYUF0dHJpYnV0ZVR5cGU9ZS50ZXh0TWVkaWFBdHRyaWJ1dGVUeXBlPz8wLHR9fSx0LlRleHRVcmxBdHRyaWJ1dGU9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Zi5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS51cmwmJnQudWludDMyKDE4KS5zdHJpbmcoZS51cmwpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGYuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgZi5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17dXJsOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09Mj9pLnVybD1uLnN0cmluZygpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dXJsOlwiXCJ9O3JldHVybiB0LnVybD1lLnVybD8/XCJcIix0fX0sdC5NZW50aW9uQXR0cmlidXRlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmYuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUudXNlcklkJiZvLlVVSUQuZW5jb2RlKGUudXNlcklkLHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGYuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgZi5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17dXNlcklkOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0yP2kudXNlcklkPW8uVVVJRC5kZWNvZGUobixuLnVpbnQzMigpKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3VzZXJJZDp2b2lkIDB9O3JldHVybiB0LnVzZXJJZD12b2lkIDAhPT1lLnVzZXJJZCYmbnVsbCE9PWUudXNlcklkP28uVVVJRC5mcm9tUGFydGlhbChlLnVzZXJJZCk6dm9pZCAwLHR9fSx0LkV4dGVybmFsTWVkaWE9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Zi5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgbiBvZiBlLnNuYXBkb2MpYS5TbmFwRG9jLmVuY29kZShuLHQudWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiB0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBmLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGYuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3NuYXBkb2M6W119O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09Mz9pLnNuYXBkb2MucHVzaChhLlNuYXBEb2MuZGVjb2RlKG4sbi51aW50MzIoKSkpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17c25hcGRvYzpbXX07cmV0dXJuIHQuc25hcGRvYz1lLnNuYXBkb2M/Lm1hcCgoZT0+YS5TbmFwRG9jLmZyb21QYXJ0aWFsKGUpKSl8fFtdLHR9fSx0LlN0aWNrZXI9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Zi5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cImluY2x1ZGVkXCI9PT1lLnN0aWNrZXI/LiRjYXNlJiZ0LkluY2x1ZGVkU3RpY2tlci5lbmNvZGUoZS5zdGlja2VyLmluY2x1ZGVkLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLFwiY3VzdG9tXCI9PT1lLnN0aWNrZXI/LiRjYXNlJiZ0LkN1c3RvbVN0aWNrZXIuZW5jb2RlKGUuc3RpY2tlci5jdXN0b20sbi51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksXCJlbW9qaVwiPT09ZS5zdGlja2VyPy4kY2FzZSYmbi51aW50MzIoMjYpLnN0cmluZyhlLnN0aWNrZXIuZW1vamkpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGYuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgZi5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17c3RpY2tlcjp2b2lkIDB9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLnN0aWNrZXI9eyRjYXNlOlwiaW5jbHVkZWRcIixpbmNsdWRlZDp0LkluY2x1ZGVkU3RpY2tlci5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAyOm8uc3RpY2tlcj17JGNhc2U6XCJjdXN0b21cIixjdXN0b206dC5DdXN0b21TdGlja2VyLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDM6by5zdGlja2VyPXskY2FzZTpcImVtb2ppXCIsZW1vamk6ci5zdHJpbmcoKX07YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtzdGlja2VyOnZvaWQgMH07cmV0dXJuXCJpbmNsdWRlZFwiPT09ZS5zdGlja2VyPy4kY2FzZSYmdm9pZCAwIT09ZS5zdGlja2VyPy5pbmNsdWRlZCYmbnVsbCE9PWUuc3RpY2tlcj8uaW5jbHVkZWQmJihuLnN0aWNrZXI9eyRjYXNlOlwiaW5jbHVkZWRcIixpbmNsdWRlZDp0LkluY2x1ZGVkU3RpY2tlci5mcm9tUGFydGlhbChlLnN0aWNrZXIuaW5jbHVkZWQpfSksXCJjdXN0b21cIj09PWUuc3RpY2tlcj8uJGNhc2UmJnZvaWQgMCE9PWUuc3RpY2tlcj8uY3VzdG9tJiZudWxsIT09ZS5zdGlja2VyPy5jdXN0b20mJihuLnN0aWNrZXI9eyRjYXNlOlwiY3VzdG9tXCIsY3VzdG9tOnQuQ3VzdG9tU3RpY2tlci5mcm9tUGFydGlhbChlLnN0aWNrZXIuY3VzdG9tKX0pLFwiZW1vamlcIj09PWUuc3RpY2tlcj8uJGNhc2UmJnZvaWQgMCE9PWUuc3RpY2tlcj8uZW1vamkmJm51bGwhPT1lLnN0aWNrZXI/LmVtb2ppJiYobi5zdGlja2VyPXskY2FzZTpcImVtb2ppXCIsZW1vamk6ZS5zdGlja2VyLmVtb2ppfSksbn19LHQuSW5jbHVkZWRTdGlja2VyPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmYuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUucGFja0lkJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUucGFja0lkKSxcIlwiIT09ZS5zdGlja2VySWQmJnQudWludDMyKDE4KS5zdHJpbmcoZS5zdGlja2VySWQpLCEwPT09ZS5hbmltYXRlZCYmdC51aW50MzIoMjQpLmJvb2woZS5hbmltYXRlZCksXCJcIiE9PWUuZ2lwaHlTb3VyY2VVcmwmJnQudWludDMyKDM0KS5zdHJpbmcoZS5naXBoeVNvdXJjZVVybCksMCE9PWUuc3RpY2tlclR5cGUmJnQudWludDMyKDQwKS5pbnQzMihlLnN0aWNrZXJUeXBlKSxcIlwiIT09ZS5oaWdoUmVzVXJpJiZ0LnVpbnQzMig1MCkuc3RyaW5nKGUuaGlnaFJlc1VyaSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgZi5kZWZhdWx0LlJlYWRlcj9lOm5ldyBmLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtwYWNrSWQ6XCJcIixzdGlja2VySWQ6XCJcIixhbmltYXRlZDohMSxnaXBoeVNvdXJjZVVybDpcIlwiLHN0aWNrZXJUeXBlOjAsaGlnaFJlc1VyaTpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5wYWNrSWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS5zdGlja2VySWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDM6aS5hbmltYXRlZD1uLmJvb2woKTticmVhaztjYXNlIDQ6aS5naXBoeVNvdXJjZVVybD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNTppLnN0aWNrZXJUeXBlPW4uaW50MzIoKTticmVhaztjYXNlIDY6aS5oaWdoUmVzVXJpPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtwYWNrSWQ6XCJcIixzdGlja2VySWQ6XCJcIixhbmltYXRlZDohMSxnaXBoeVNvdXJjZVVybDpcIlwiLHN0aWNrZXJUeXBlOjAsaGlnaFJlc1VyaTpcIlwifTtyZXR1cm4gdC5wYWNrSWQ9ZS5wYWNrSWQ/P1wiXCIsdC5zdGlja2VySWQ9ZS5zdGlja2VySWQ/P1wiXCIsdC5hbmltYXRlZD1lLmFuaW1hdGVkPz8hMSx0LmdpcGh5U291cmNlVXJsPWUuZ2lwaHlTb3VyY2VVcmw/P1wiXCIsdC5zdGlja2VyVHlwZT1lLnN0aWNrZXJUeXBlPz8wLHQuaGlnaFJlc1VyaT1lLmhpZ2hSZXNVcmk/P1wiXCIsdH19LHQuQ3VzdG9tU3RpY2tlcj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpmLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLnN0aWNrZXImJnMuTWVkaWFNZXRhZGF0YS5lbmNvZGUoZS5zdGlja2VyLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGYuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgZi5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17c3RpY2tlcjp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLnN0aWNrZXI9cy5NZWRpYU1ldGFkYXRhLmRlY29kZShuLG4udWludDMyKCkpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17c3RpY2tlcjp2b2lkIDB9O3JldHVybiB0LnN0aWNrZXI9dm9pZCAwIT09ZS5zdGlja2VyJiZudWxsIT09ZS5zdGlja2VyP3MuTWVkaWFNZXRhZGF0YS5mcm9tUGFydGlhbChlLnN0aWNrZXIpOnZvaWQgMCx0fX0sdC5TaGFyZT17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpmLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwibWFwXCI9PT1lLnNoYXJlPy4kY2FzZSYmdC5NYXBTaGFyZS5lbmNvZGUoZS5zaGFyZS5tYXAsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksXCJzaGF6YW1cIj09PWUuc2hhcmU/LiRjYXNlJiZ0LlNoYXphbVNoYXJlLmVuY29kZShlLnNoYXJlLnNoYXphbSxuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSxcInNlYXJjaFwiPT09ZS5zaGFyZT8uJGNhc2UmJnQuU2VhcmNoU2hhcmUuZW5jb2RlKGUuc2hhcmUuc2VhcmNoLG4udWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLFwiZGlzY292ZXJcIj09PWUuc2hhcmU/LiRjYXNlJiZ0LkRpc2NvdmVyU2hhcmUuZW5jb2RlKGUuc2hhcmUuZGlzY292ZXIsbi51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCksXCJzdG9yeVwiPT09ZS5zaGFyZT8uJGNhc2UmJnQuU3RvcnlTaGFyZS5lbmNvZGUoZS5zaGFyZS5zdG9yeSxuLnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKSxcInNlYXJjaFNuYXBcIj09PWUuc2hhcmU/LiRjYXNlJiZ0LlNlYXJjaFNoYXJlU25hcC5lbmNvZGUoZS5zaGFyZS5zZWFyY2hTbmFwLG4udWludDMyKDUwKS5mb3JrKCkpLmxkZWxpbSgpLFwidXNlclwiPT09ZS5zaGFyZT8uJGNhc2UmJnQuVXNlclNoYXJlLmVuY29kZShlLnNoYXJlLnVzZXIsbi51aW50MzIoNTgpLmZvcmsoKSkubGRlbGltKCksXCJsZWdhY3lEaXNjb3ZlclwiPT09ZS5zaGFyZT8uJGNhc2UmJnAuTGVnYWN5RGlzY292ZXJTaGFyZS5lbmNvZGUoZS5zaGFyZS5sZWdhY3lEaXNjb3ZlcixuLnVpbnQzMig2NikuZm9yaygpKS5sZGVsaW0oKSxcImxlZ2FjeVNoYXphbVwiPT09ZS5zaGFyZT8uJGNhc2UmJnAuTGVnYWN5U2hhemFtU2hhcmUuZW5jb2RlKGUuc2hhcmUubGVnYWN5U2hhemFtLG4udWludDMyKDc0KS5mb3JrKCkpLmxkZWxpbSgpLFwibWFwU3RvcnlcIj09PWUuc2hhcmU/LiRjYXNlJiZ0Lk1hcFNoYXJlU3RvcnkuZW5jb2RlKGUuc2hhcmUubWFwU3Rvcnksbi51aW50MzIoODIpLmZvcmsoKSkubGRlbGltKCksXCJtZW1vcmllc1N0b3J5XCI9PT1lLnNoYXJlPy4kY2FzZSYmdC5NZW1vcmllc1N0b3J5LmVuY29kZShlLnNoYXJlLm1lbW9yaWVzU3Rvcnksbi51aW50MzIoOTApLmZvcmsoKSkubGRlbGltKCksXCJnYW1lU2NvcmVcIj09PWUuc2hhcmU/LiRjYXNlJiZ0LkdhbWVTY29yZVNoYXJlLmVuY29kZShlLnNoYXJlLmdhbWVTY29yZSxuLnVpbnQzMig5OCkuZm9yaygpKS5sZGVsaW0oKSxcInNuYXBQcm9Qcm9maWxlXCI9PT1lLnNoYXJlPy4kY2FzZSYmdC5TbmFwUHJvUHJvZmlsZVNoYXJlLmVuY29kZShlLnNoYXJlLnNuYXBQcm9Qcm9maWxlLG4udWludDMyKDEwNikuZm9yaygpKS5sZGVsaW0oKSxcInNuYXBQcm9TbmFwXCI9PT1lLnNoYXJlPy4kY2FzZSYmdC5TbmFwUHJvU25hcFNoYXJlLmVuY29kZShlLnNoYXJlLnNuYXBQcm9TbmFwLG4udWludDMyKDExNCkuZm9yaygpKS5sZGVsaW0oKSxcImxlZ2FjeUFkXCI9PT1lLnNoYXJlPy4kY2FzZSYmdC5MZWdhY3lBZFNoYXJlLmVuY29kZShlLnNoYXJlLmxlZ2FjeUFkLG4udWludDMyKDEyMikuZm9yaygpKS5sZGVsaW0oKSxcInNwb3RsaWdodFN0b3J5U2hhcmVcIj09PWUuc2hhcmU/LiRjYXNlJiZ0LlNwb3RsaWdodFN0b3J5U2hhcmUuZW5jb2RlKGUuc2hhcmUuc3BvdGxpZ2h0U3RvcnlTaGFyZSxuLnVpbnQzMigxMzApLmZvcmsoKSkubGRlbGltKCksXCJiaXRtb2ppT3V0Zml0U2hhcmVcIj09PWUuc2hhcmU/LiRjYXNlJiZ0LkJpdG1vamlPdXRmaXRTaGFyZS5lbmNvZGUoZS5zaGFyZS5iaXRtb2ppT3V0Zml0U2hhcmUsbi51aW50MzIoMTM4KS5mb3JrKCkpLmxkZWxpbSgpLFwibWFwRHJvcFNoYXJlXCI9PT1lLnNoYXJlPy4kY2FzZSYmdC5NYXBEcm9wLmVuY29kZShlLnNoYXJlLm1hcERyb3BTaGFyZSxuLnVpbnQzMigxNDYpLmZvcmsoKSkubGRlbGltKCksXCJzbmFwS2l0SW52aXRlU2hhcmVcIj09PWUuc2hhcmU/LiRjYXNlJiZ0LlNuYXBLaXRJbnZpdGVTaGFyZS5lbmNvZGUoZS5zaGFyZS5zbmFwS2l0SW52aXRlU2hhcmUsbi51aW50MzIoMTU0KS5mb3JrKCkpLmxkZWxpbSgpLFwicGxhY2VTaGFyZVwiPT09ZS5zaGFyZT8uJGNhc2UmJnQuUGxhY2VTaGFyZS5lbmNvZGUoZS5zaGFyZS5wbGFjZVNoYXJlLG4udWludDMyKDE2MikuZm9yaygpKS5sZGVsaW0oKSxcInNuYXBQcm9TYXZlZFN0b3J5XCI9PT1lLnNoYXJlPy4kY2FzZSYmdC5TbmFwUHJvU2F2ZWRTdG9yeVNoYXJlLmVuY29kZShlLnNoYXJlLnNuYXBQcm9TYXZlZFN0b3J5LG4udWludDMyKDE3MCkuZm9yaygpKS5sZGVsaW0oKSxcImJsb29wc1N0b3J5U2hhcmVcIj09PWUuc2hhcmU/LiRjYXNlJiZ0LkJsb29wc1N0b3J5U2hhcmUuZW5jb2RlKGUuc2hhcmUuYmxvb3BzU3RvcnlTaGFyZSxuLnVpbnQzMigxNzgpLmZvcmsoKSkubGRlbGltKCksXCJ0ZXh0QWRTaGFyZVwiPT09ZS5zaGFyZT8uJGNhc2UmJnQuVGV4dEFkU2hhcmUuZW5jb2RlKGUuc2hhcmUudGV4dEFkU2hhcmUsbi51aW50MzIoMTg2KS5mb3JrKCkpLmxkZWxpbSgpLFwic2F2ZWRTdG9yeVwiPT09ZS5zaGFyZT8uJGNhc2UmJnQuU2F2ZWRTdG9yeS5lbmNvZGUoZS5zaGFyZS5zYXZlZFN0b3J5LG4udWludDMyKDE5NCkuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBmLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGYuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89e3NoYXJlOnZvaWQgMH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8uc2hhcmU9eyRjYXNlOlwibWFwXCIsbWFwOnQuTWFwU2hhcmUuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMjpvLnNoYXJlPXskY2FzZTpcInNoYXphbVwiLHNoYXphbTp0LlNoYXphbVNoYXJlLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDM6by5zaGFyZT17JGNhc2U6XCJzZWFyY2hcIixzZWFyY2g6dC5TZWFyY2hTaGFyZS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA0Om8uc2hhcmU9eyRjYXNlOlwiZGlzY292ZXJcIixkaXNjb3Zlcjp0LkRpc2NvdmVyU2hhcmUuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgNTpvLnNoYXJlPXskY2FzZTpcInN0b3J5XCIsc3Rvcnk6dC5TdG9yeVNoYXJlLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDY6by5zaGFyZT17JGNhc2U6XCJzZWFyY2hTbmFwXCIsc2VhcmNoU25hcDp0LlNlYXJjaFNoYXJlU25hcC5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA3Om8uc2hhcmU9eyRjYXNlOlwidXNlclwiLHVzZXI6dC5Vc2VyU2hhcmUuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgODpvLnNoYXJlPXskY2FzZTpcImxlZ2FjeURpc2NvdmVyXCIsbGVnYWN5RGlzY292ZXI6cC5MZWdhY3lEaXNjb3ZlclNoYXJlLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDk6by5zaGFyZT17JGNhc2U6XCJsZWdhY3lTaGF6YW1cIixsZWdhY3lTaGF6YW06cC5MZWdhY3lTaGF6YW1TaGFyZS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAxMDpvLnNoYXJlPXskY2FzZTpcIm1hcFN0b3J5XCIsbWFwU3Rvcnk6dC5NYXBTaGFyZVN0b3J5LmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDExOm8uc2hhcmU9eyRjYXNlOlwibWVtb3JpZXNTdG9yeVwiLG1lbW9yaWVzU3Rvcnk6dC5NZW1vcmllc1N0b3J5LmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDEyOm8uc2hhcmU9eyRjYXNlOlwiZ2FtZVNjb3JlXCIsZ2FtZVNjb3JlOnQuR2FtZVNjb3JlU2hhcmUuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMTM6by5zaGFyZT17JGNhc2U6XCJzbmFwUHJvUHJvZmlsZVwiLHNuYXBQcm9Qcm9maWxlOnQuU25hcFByb1Byb2ZpbGVTaGFyZS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAxNDpvLnNoYXJlPXskY2FzZTpcInNuYXBQcm9TbmFwXCIsc25hcFByb1NuYXA6dC5TbmFwUHJvU25hcFNoYXJlLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDE1Om8uc2hhcmU9eyRjYXNlOlwibGVnYWN5QWRcIixsZWdhY3lBZDp0LkxlZ2FjeUFkU2hhcmUuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMTY6by5zaGFyZT17JGNhc2U6XCJzcG90bGlnaHRTdG9yeVNoYXJlXCIsc3BvdGxpZ2h0U3RvcnlTaGFyZTp0LlNwb3RsaWdodFN0b3J5U2hhcmUuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMTc6by5zaGFyZT17JGNhc2U6XCJiaXRtb2ppT3V0Zml0U2hhcmVcIixiaXRtb2ppT3V0Zml0U2hhcmU6dC5CaXRtb2ppT3V0Zml0U2hhcmUuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMTg6by5zaGFyZT17JGNhc2U6XCJtYXBEcm9wU2hhcmVcIixtYXBEcm9wU2hhcmU6dC5NYXBEcm9wLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDE5Om8uc2hhcmU9eyRjYXNlOlwic25hcEtpdEludml0ZVNoYXJlXCIsc25hcEtpdEludml0ZVNoYXJlOnQuU25hcEtpdEludml0ZVNoYXJlLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDIwOm8uc2hhcmU9eyRjYXNlOlwicGxhY2VTaGFyZVwiLHBsYWNlU2hhcmU6dC5QbGFjZVNoYXJlLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDIxOm8uc2hhcmU9eyRjYXNlOlwic25hcFByb1NhdmVkU3RvcnlcIixzbmFwUHJvU2F2ZWRTdG9yeTp0LlNuYXBQcm9TYXZlZFN0b3J5U2hhcmUuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMjI6by5zaGFyZT17JGNhc2U6XCJibG9vcHNTdG9yeVNoYXJlXCIsYmxvb3BzU3RvcnlTaGFyZTp0LkJsb29wc1N0b3J5U2hhcmUuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMjM6by5zaGFyZT17JGNhc2U6XCJ0ZXh0QWRTaGFyZVwiLHRleHRBZFNoYXJlOnQuVGV4dEFkU2hhcmUuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMjQ6by5zaGFyZT17JGNhc2U6XCJzYXZlZFN0b3J5XCIsc2F2ZWRTdG9yeTp0LlNhdmVkU3RvcnkuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17c2hhcmU6dm9pZCAwfTtyZXR1cm5cIm1hcFwiPT09ZS5zaGFyZT8uJGNhc2UmJnZvaWQgMCE9PWUuc2hhcmU/Lm1hcCYmbnVsbCE9PWUuc2hhcmU/Lm1hcCYmKG4uc2hhcmU9eyRjYXNlOlwibWFwXCIsbWFwOnQuTWFwU2hhcmUuZnJvbVBhcnRpYWwoZS5zaGFyZS5tYXApfSksXCJzaGF6YW1cIj09PWUuc2hhcmU/LiRjYXNlJiZ2b2lkIDAhPT1lLnNoYXJlPy5zaGF6YW0mJm51bGwhPT1lLnNoYXJlPy5zaGF6YW0mJihuLnNoYXJlPXskY2FzZTpcInNoYXphbVwiLHNoYXphbTp0LlNoYXphbVNoYXJlLmZyb21QYXJ0aWFsKGUuc2hhcmUuc2hhemFtKX0pLFwic2VhcmNoXCI9PT1lLnNoYXJlPy4kY2FzZSYmdm9pZCAwIT09ZS5zaGFyZT8uc2VhcmNoJiZudWxsIT09ZS5zaGFyZT8uc2VhcmNoJiYobi5zaGFyZT17JGNhc2U6XCJzZWFyY2hcIixzZWFyY2g6dC5TZWFyY2hTaGFyZS5mcm9tUGFydGlhbChlLnNoYXJlLnNlYXJjaCl9KSxcImRpc2NvdmVyXCI9PT1lLnNoYXJlPy4kY2FzZSYmdm9pZCAwIT09ZS5zaGFyZT8uZGlzY292ZXImJm51bGwhPT1lLnNoYXJlPy5kaXNjb3ZlciYmKG4uc2hhcmU9eyRjYXNlOlwiZGlzY292ZXJcIixkaXNjb3Zlcjp0LkRpc2NvdmVyU2hhcmUuZnJvbVBhcnRpYWwoZS5zaGFyZS5kaXNjb3Zlcil9KSxcInN0b3J5XCI9PT1lLnNoYXJlPy4kY2FzZSYmdm9pZCAwIT09ZS5zaGFyZT8uc3RvcnkmJm51bGwhPT1lLnNoYXJlPy5zdG9yeSYmKG4uc2hhcmU9eyRjYXNlOlwic3RvcnlcIixzdG9yeTp0LlN0b3J5U2hhcmUuZnJvbVBhcnRpYWwoZS5zaGFyZS5zdG9yeSl9KSxcInNlYXJjaFNuYXBcIj09PWUuc2hhcmU/LiRjYXNlJiZ2b2lkIDAhPT1lLnNoYXJlPy5zZWFyY2hTbmFwJiZudWxsIT09ZS5zaGFyZT8uc2VhcmNoU25hcCYmKG4uc2hhcmU9eyRjYXNlOlwic2VhcmNoU25hcFwiLHNlYXJjaFNuYXA6dC5TZWFyY2hTaGFyZVNuYXAuZnJvbVBhcnRpYWwoZS5zaGFyZS5zZWFyY2hTbmFwKX0pLFwidXNlclwiPT09ZS5zaGFyZT8uJGNhc2UmJnZvaWQgMCE9PWUuc2hhcmU/LnVzZXImJm51bGwhPT1lLnNoYXJlPy51c2VyJiYobi5zaGFyZT17JGNhc2U6XCJ1c2VyXCIsdXNlcjp0LlVzZXJTaGFyZS5mcm9tUGFydGlhbChlLnNoYXJlLnVzZXIpfSksXCJsZWdhY3lEaXNjb3ZlclwiPT09ZS5zaGFyZT8uJGNhc2UmJnZvaWQgMCE9PWUuc2hhcmU/LmxlZ2FjeURpc2NvdmVyJiZudWxsIT09ZS5zaGFyZT8ubGVnYWN5RGlzY292ZXImJihuLnNoYXJlPXskY2FzZTpcImxlZ2FjeURpc2NvdmVyXCIsbGVnYWN5RGlzY292ZXI6cC5MZWdhY3lEaXNjb3ZlclNoYXJlLmZyb21QYXJ0aWFsKGUuc2hhcmUubGVnYWN5RGlzY292ZXIpfSksXCJsZWdhY3lTaGF6YW1cIj09PWUuc2hhcmU/LiRjYXNlJiZ2b2lkIDAhPT1lLnNoYXJlPy5sZWdhY3lTaGF6YW0mJm51bGwhPT1lLnNoYXJlPy5sZWdhY3lTaGF6YW0mJihuLnNoYXJlPXskY2FzZTpcImxlZ2FjeVNoYXphbVwiLGxlZ2FjeVNoYXphbTpwLkxlZ2FjeVNoYXphbVNoYXJlLmZyb21QYXJ0aWFsKGUuc2hhcmUubGVnYWN5U2hhemFtKX0pLFwibWFwU3RvcnlcIj09PWUuc2hhcmU/LiRjYXNlJiZ2b2lkIDAhPT1lLnNoYXJlPy5tYXBTdG9yeSYmbnVsbCE9PWUuc2hhcmU/Lm1hcFN0b3J5JiYobi5zaGFyZT17JGNhc2U6XCJtYXBTdG9yeVwiLG1hcFN0b3J5OnQuTWFwU2hhcmVTdG9yeS5mcm9tUGFydGlhbChlLnNoYXJlLm1hcFN0b3J5KX0pLFwibWVtb3JpZXNTdG9yeVwiPT09ZS5zaGFyZT8uJGNhc2UmJnZvaWQgMCE9PWUuc2hhcmU/Lm1lbW9yaWVzU3RvcnkmJm51bGwhPT1lLnNoYXJlPy5tZW1vcmllc1N0b3J5JiYobi5zaGFyZT17JGNhc2U6XCJtZW1vcmllc1N0b3J5XCIsbWVtb3JpZXNTdG9yeTp0Lk1lbW9yaWVzU3RvcnkuZnJvbVBhcnRpYWwoZS5zaGFyZS5tZW1vcmllc1N0b3J5KX0pLFwiZ2FtZVNjb3JlXCI9PT1lLnNoYXJlPy4kY2FzZSYmdm9pZCAwIT09ZS5zaGFyZT8uZ2FtZVNjb3JlJiZudWxsIT09ZS5zaGFyZT8uZ2FtZVNjb3JlJiYobi5zaGFyZT17JGNhc2U6XCJnYW1lU2NvcmVcIixnYW1lU2NvcmU6dC5HYW1lU2NvcmVTaGFyZS5mcm9tUGFydGlhbChlLnNoYXJlLmdhbWVTY29yZSl9KSxcInNuYXBQcm9Qcm9maWxlXCI9PT1lLnNoYXJlPy4kY2FzZSYmdm9pZCAwIT09ZS5zaGFyZT8uc25hcFByb1Byb2ZpbGUmJm51bGwhPT1lLnNoYXJlPy5zbmFwUHJvUHJvZmlsZSYmKG4uc2hhcmU9eyRjYXNlOlwic25hcFByb1Byb2ZpbGVcIixzbmFwUHJvUHJvZmlsZTp0LlNuYXBQcm9Qcm9maWxlU2hhcmUuZnJvbVBhcnRpYWwoZS5zaGFyZS5zbmFwUHJvUHJvZmlsZSl9KSxcInNuYXBQcm9TbmFwXCI9PT1lLnNoYXJlPy4kY2FzZSYmdm9pZCAwIT09ZS5zaGFyZT8uc25hcFByb1NuYXAmJm51bGwhPT1lLnNoYXJlPy5zbmFwUHJvU25hcCYmKG4uc2hhcmU9eyRjYXNlOlwic25hcFByb1NuYXBcIixzbmFwUHJvU25hcDp0LlNuYXBQcm9TbmFwU2hhcmUuZnJvbVBhcnRpYWwoZS5zaGFyZS5zbmFwUHJvU25hcCl9KSxcImxlZ2FjeUFkXCI9PT1lLnNoYXJlPy4kY2FzZSYmdm9pZCAwIT09ZS5zaGFyZT8ubGVnYWN5QWQmJm51bGwhPT1lLnNoYXJlPy5sZWdhY3lBZCYmKG4uc2hhcmU9eyRjYXNlOlwibGVnYWN5QWRcIixsZWdhY3lBZDp0LkxlZ2FjeUFkU2hhcmUuZnJvbVBhcnRpYWwoZS5zaGFyZS5sZWdhY3lBZCl9KSxcInNwb3RsaWdodFN0b3J5U2hhcmVcIj09PWUuc2hhcmU/LiRjYXNlJiZ2b2lkIDAhPT1lLnNoYXJlPy5zcG90bGlnaHRTdG9yeVNoYXJlJiZudWxsIT09ZS5zaGFyZT8uc3BvdGxpZ2h0U3RvcnlTaGFyZSYmKG4uc2hhcmU9eyRjYXNlOlwic3BvdGxpZ2h0U3RvcnlTaGFyZVwiLHNwb3RsaWdodFN0b3J5U2hhcmU6dC5TcG90bGlnaHRTdG9yeVNoYXJlLmZyb21QYXJ0aWFsKGUuc2hhcmUuc3BvdGxpZ2h0U3RvcnlTaGFyZSl9KSxcImJpdG1vamlPdXRmaXRTaGFyZVwiPT09ZS5zaGFyZT8uJGNhc2UmJnZvaWQgMCE9PWUuc2hhcmU/LmJpdG1vamlPdXRmaXRTaGFyZSYmbnVsbCE9PWUuc2hhcmU/LmJpdG1vamlPdXRmaXRTaGFyZSYmKG4uc2hhcmU9eyRjYXNlOlwiYml0bW9qaU91dGZpdFNoYXJlXCIsYml0bW9qaU91dGZpdFNoYXJlOnQuQml0bW9qaU91dGZpdFNoYXJlLmZyb21QYXJ0aWFsKGUuc2hhcmUuYml0bW9qaU91dGZpdFNoYXJlKX0pLFwibWFwRHJvcFNoYXJlXCI9PT1lLnNoYXJlPy4kY2FzZSYmdm9pZCAwIT09ZS5zaGFyZT8ubWFwRHJvcFNoYXJlJiZudWxsIT09ZS5zaGFyZT8ubWFwRHJvcFNoYXJlJiYobi5zaGFyZT17JGNhc2U6XCJtYXBEcm9wU2hhcmVcIixtYXBEcm9wU2hhcmU6dC5NYXBEcm9wLmZyb21QYXJ0aWFsKGUuc2hhcmUubWFwRHJvcFNoYXJlKX0pLFwic25hcEtpdEludml0ZVNoYXJlXCI9PT1lLnNoYXJlPy4kY2FzZSYmdm9pZCAwIT09ZS5zaGFyZT8uc25hcEtpdEludml0ZVNoYXJlJiZudWxsIT09ZS5zaGFyZT8uc25hcEtpdEludml0ZVNoYXJlJiYobi5zaGFyZT17JGNhc2U6XCJzbmFwS2l0SW52aXRlU2hhcmVcIixzbmFwS2l0SW52aXRlU2hhcmU6dC5TbmFwS2l0SW52aXRlU2hhcmUuZnJvbVBhcnRpYWwoZS5zaGFyZS5zbmFwS2l0SW52aXRlU2hhcmUpfSksXCJwbGFjZVNoYXJlXCI9PT1lLnNoYXJlPy4kY2FzZSYmdm9pZCAwIT09ZS5zaGFyZT8ucGxhY2VTaGFyZSYmbnVsbCE9PWUuc2hhcmU/LnBsYWNlU2hhcmUmJihuLnNoYXJlPXskY2FzZTpcInBsYWNlU2hhcmVcIixwbGFjZVNoYXJlOnQuUGxhY2VTaGFyZS5mcm9tUGFydGlhbChlLnNoYXJlLnBsYWNlU2hhcmUpfSksXCJzbmFwUHJvU2F2ZWRTdG9yeVwiPT09ZS5zaGFyZT8uJGNhc2UmJnZvaWQgMCE9PWUuc2hhcmU/LnNuYXBQcm9TYXZlZFN0b3J5JiZudWxsIT09ZS5zaGFyZT8uc25hcFByb1NhdmVkU3RvcnkmJihuLnNoYXJlPXskY2FzZTpcInNuYXBQcm9TYXZlZFN0b3J5XCIsc25hcFByb1NhdmVkU3Rvcnk6dC5TbmFwUHJvU2F2ZWRTdG9yeVNoYXJlLmZyb21QYXJ0aWFsKGUuc2hhcmUuc25hcFByb1NhdmVkU3RvcnkpfSksXCJibG9vcHNTdG9yeVNoYXJlXCI9PT1lLnNoYXJlPy4kY2FzZSYmdm9pZCAwIT09ZS5zaGFyZT8uYmxvb3BzU3RvcnlTaGFyZSYmbnVsbCE9PWUuc2hhcmU/LmJsb29wc1N0b3J5U2hhcmUmJihuLnNoYXJlPXskY2FzZTpcImJsb29wc1N0b3J5U2hhcmVcIixibG9vcHNTdG9yeVNoYXJlOnQuQmxvb3BzU3RvcnlTaGFyZS5mcm9tUGFydGlhbChlLnNoYXJlLmJsb29wc1N0b3J5U2hhcmUpfSksXCJ0ZXh0QWRTaGFyZVwiPT09ZS5zaGFyZT8uJGNhc2UmJnZvaWQgMCE9PWUuc2hhcmU/LnRleHRBZFNoYXJlJiZudWxsIT09ZS5zaGFyZT8udGV4dEFkU2hhcmUmJihuLnNoYXJlPXskY2FzZTpcInRleHRBZFNoYXJlXCIsdGV4dEFkU2hhcmU6dC5UZXh0QWRTaGFyZS5mcm9tUGFydGlhbChlLnNoYXJlLnRleHRBZFNoYXJlKX0pLFwic2F2ZWRTdG9yeVwiPT09ZS5zaGFyZT8uJGNhc2UmJnZvaWQgMCE9PWUuc2hhcmU/LnNhdmVkU3RvcnkmJm51bGwhPT1lLnNoYXJlPy5zYXZlZFN0b3J5JiYobi5zaGFyZT17JGNhc2U6XCJzYXZlZFN0b3J5XCIsc2F2ZWRTdG9yeTp0LlNhdmVkU3RvcnkuZnJvbVBhcnRpYWwoZS5zaGFyZS5zYXZlZFN0b3J5KX0pLG59fSx0LkdhbWVTY29yZVNoYXJlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmYuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUuYXBwSWQmJm8uVVVJRC5lbmNvZGUoZS5hcHBJZCx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmxlYWRlcmJvYXJkSWQmJm8uVVVJRC5lbmNvZGUoZS5sZWFkZXJib2FyZElkLHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLFwiMFwiIT09ZS5udW1lcmljU2NvcmUmJnQudWludDMyKDI0KS5pbnQ2NChlLm51bWVyaWNTY29yZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgZi5kZWZhdWx0LlJlYWRlcj9lOm5ldyBmLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXthcHBJZDp2b2lkIDAsbGVhZGVyYm9hcmRJZDp2b2lkIDAsbnVtZXJpY1Njb3JlOlwiMFwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5hcHBJZD1vLlVVSUQuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOmkubGVhZGVyYm9hcmRJZD1vLlVVSUQuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAzOmkubnVtZXJpY1Njb3JlPWgobi5pbnQ2NCgpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2FwcElkOnZvaWQgMCxsZWFkZXJib2FyZElkOnZvaWQgMCxudW1lcmljU2NvcmU6XCIwXCJ9O3JldHVybiB0LmFwcElkPXZvaWQgMCE9PWUuYXBwSWQmJm51bGwhPT1lLmFwcElkP28uVVVJRC5mcm9tUGFydGlhbChlLmFwcElkKTp2b2lkIDAsdC5sZWFkZXJib2FyZElkPXZvaWQgMCE9PWUubGVhZGVyYm9hcmRJZCYmbnVsbCE9PWUubGVhZGVyYm9hcmRJZD9vLlVVSUQuZnJvbVBhcnRpYWwoZS5sZWFkZXJib2FyZElkKTp2b2lkIDAsdC5udW1lcmljU2NvcmU9ZS5udW1lcmljU2NvcmU/P1wiMFwiLHR9fSx0Lk1hcFNoYXJlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmYuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUuc3RvcnlJZCYmdC51aW50MzIoMTApLnN0cmluZyhlLnN0b3J5SWQpLFwiXCIhPT1lLm1lZGlhVHlwZSYmdC51aW50MzIoMTgpLnN0cmluZyhlLm1lZGlhVHlwZSksXCJcIiE9PWUucG9pSWQmJnQudWludDMyKDI2KS5zdHJpbmcoZS5wb2lJZCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgZi5kZWZhdWx0LlJlYWRlcj9lOm5ldyBmLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtzdG9yeUlkOlwiXCIsbWVkaWFUeXBlOlwiXCIscG9pSWQ6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuc3RvcnlJZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLm1lZGlhVHlwZT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMzppLnBvaUlkPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtzdG9yeUlkOlwiXCIsbWVkaWFUeXBlOlwiXCIscG9pSWQ6XCJcIn07cmV0dXJuIHQuc3RvcnlJZD1lLnN0b3J5SWQ/P1wiXCIsdC5tZWRpYVR5cGU9ZS5tZWRpYVR5cGU/P1wiXCIsdC5wb2lJZD1lLnBvaUlkPz9cIlwiLHR9fSx0Lk1hcFNoYXJlU3Rvcnk9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Zi5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5wb2lJZCYmdC51aW50MzIoMTApLnN0cmluZyhlLnBvaUlkKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBmLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGYuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3BvaUlkOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLnBvaUlkPW4uc3RyaW5nKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtwb2lJZDpcIlwifTtyZXR1cm4gdC5wb2lJZD1lLnBvaUlkPz9cIlwiLHR9fSx0LlNoYXphbVNoYXJlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmYuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUuYXR0YWNoZWRVcmwmJnQudWludDMyKDEwKS5zdHJpbmcoZS5hdHRhY2hlZFVybCksXCJcIiE9PWUuYXJ0aXN0QXJ0VXJsJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuYXJ0aXN0QXJ0VXJsKSxcIlwiIT09ZS50aXRsZSYmdC51aW50MzIoMjYpLnN0cmluZyhlLnRpdGxlKSxcIlwiIT09ZS5hcnRpc3QmJnQudWludDMyKDM0KS5zdHJpbmcoZS5hcnRpc3QpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGYuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgZi5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17YXR0YWNoZWRVcmw6XCJcIixhcnRpc3RBcnRVcmw6XCJcIix0aXRsZTpcIlwiLGFydGlzdDpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5hdHRhY2hlZFVybD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLmFydGlzdEFydFVybD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMzppLnRpdGxlPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA0OmkuYXJ0aXN0PW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXthdHRhY2hlZFVybDpcIlwiLGFydGlzdEFydFVybDpcIlwiLHRpdGxlOlwiXCIsYXJ0aXN0OlwiXCJ9O3JldHVybiB0LmF0dGFjaGVkVXJsPWUuYXR0YWNoZWRVcmw/P1wiXCIsdC5hcnRpc3RBcnRVcmw9ZS5hcnRpc3RBcnRVcmw/P1wiXCIsdC50aXRsZT1lLnRpdGxlPz9cIlwiLHQuYXJ0aXN0PWUuYXJ0aXN0Pz9cIlwiLHR9fSx0LlNlYXJjaFNoYXJlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmYuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUuZHluYW1pY1N0b3J5SWQmJnQudWludDMyKDEwKS5zdHJpbmcoZS5keW5hbWljU3RvcnlJZCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgZi5kZWZhdWx0LlJlYWRlcj9lOm5ldyBmLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtkeW5hbWljU3RvcnlJZDpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/aS5keW5hbWljU3RvcnlJZD1uLnN0cmluZygpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17ZHluYW1pY1N0b3J5SWQ6XCJcIn07cmV0dXJuIHQuZHluYW1pY1N0b3J5SWQ9ZS5keW5hbWljU3RvcnlJZD8/XCJcIix0fX0sdC5TZWFyY2hTaGFyZVNuYXA9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Zi5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5keW5hbWljU3RvcnlJZCYmdC51aW50MzIoMTApLnN0cmluZyhlLmR5bmFtaWNTdG9yeUlkKSxcIlwiIT09ZS5tZWRpYVR5cGUmJnQudWludDMyKDE4KS5zdHJpbmcoZS5tZWRpYVR5cGUpLFwiXCIhPT1lLnNuYXBJZCYmdC51aW50MzIoMjYpLnN0cmluZyhlLnNuYXBJZCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgZi5kZWZhdWx0LlJlYWRlcj9lOm5ldyBmLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtkeW5hbWljU3RvcnlJZDpcIlwiLG1lZGlhVHlwZTpcIlwiLHNuYXBJZDpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5keW5hbWljU3RvcnlJZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLm1lZGlhVHlwZT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMzppLnNuYXBJZD1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17ZHluYW1pY1N0b3J5SWQ6XCJcIixtZWRpYVR5cGU6XCJcIixzbmFwSWQ6XCJcIn07cmV0dXJuIHQuZHluYW1pY1N0b3J5SWQ9ZS5keW5hbWljU3RvcnlJZD8/XCJcIix0Lm1lZGlhVHlwZT1lLm1lZGlhVHlwZT8/XCJcIix0LnNuYXBJZD1lLnNuYXBJZD8/XCJcIix0fX0sdC5TdG9yeVNoYXJlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmYuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUuc3RvcnlJZCYmdC51aW50MzIoMTApLnN0cmluZyhlLnN0b3J5SWQpLFwiXCIhPT1lLm1lZGlhVHlwZSYmdC51aW50MzIoMTgpLnN0cmluZyhlLm1lZGlhVHlwZSksITA9PT1lLmlzVXNlclRhZ2dlZCYmdC51aW50MzIoMjQpLmJvb2woZS5pc1VzZXJUYWdnZWQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGYuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgZi5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17c3RvcnlJZDpcIlwiLG1lZGlhVHlwZTpcIlwiLGlzVXNlclRhZ2dlZDohMX07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuc3RvcnlJZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLm1lZGlhVHlwZT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMzppLmlzVXNlclRhZ2dlZD1uLmJvb2woKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3N0b3J5SWQ6XCJcIixtZWRpYVR5cGU6XCJcIixpc1VzZXJUYWdnZWQ6ITF9O3JldHVybiB0LnN0b3J5SWQ9ZS5zdG9yeUlkPz9cIlwiLHQubWVkaWFUeXBlPWUubWVkaWFUeXBlPz9cIlwiLHQuaXNVc2VyVGFnZ2VkPWUuaXNVc2VyVGFnZ2VkPz8hMSx0fX0sdC5TcG90bGlnaHRTdG9yeVNoYXJlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmYuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUuY29tcG9zaXRlU3RvcnlJZCYmYy5Db21wb3NpdGVTdG9yeUlkLmVuY29kZShlLmNvbXBvc2l0ZVN0b3J5SWQsdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksMCE9PWUuc291cmNlJiZ0LnVpbnQzMigxNikuaW50MzIoZS5zb3VyY2UpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGYuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgZi5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17Y29tcG9zaXRlU3RvcnlJZDp2b2lkIDAsc291cmNlOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmNvbXBvc2l0ZVN0b3J5SWQ9Yy5Db21wb3NpdGVTdG9yeUlkLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMjppLnNvdXJjZT1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtjb21wb3NpdGVTdG9yeUlkOnZvaWQgMCxzb3VyY2U6MH07cmV0dXJuIHQuY29tcG9zaXRlU3RvcnlJZD12b2lkIDAhPT1lLmNvbXBvc2l0ZVN0b3J5SWQmJm51bGwhPT1lLmNvbXBvc2l0ZVN0b3J5SWQ/Yy5Db21wb3NpdGVTdG9yeUlkLmZyb21QYXJ0aWFsKGUuY29tcG9zaXRlU3RvcnlJZCk6dm9pZCAwLHQuc291cmNlPWUuc291cmNlPz8wLHR9fSx0Lk1lbW9yaWVzU3Rvcnk9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Zi5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtcIlwiIT09ZS5zdG9yeVRpdGxlJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuc3RvcnlUaXRsZSk7Zm9yKGNvbnN0IG4gb2YgZS5zbmFwZG9jKWEuU25hcERvYy5lbmNvZGUobix0LnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgZi5kZWZhdWx0LlJlYWRlcj9lOm5ldyBmLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtzdG9yeVRpdGxlOlwiXCIsc25hcGRvYzpbXX07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAyOmkuc3RvcnlUaXRsZT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMzppLnNuYXBkb2MucHVzaChhLlNuYXBEb2MuZGVjb2RlKG4sbi51aW50MzIoKSkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17c3RvcnlUaXRsZTpcIlwiLHNuYXBkb2M6W119O3JldHVybiB0LnN0b3J5VGl0bGU9ZS5zdG9yeVRpdGxlPz9cIlwiLHQuc25hcGRvYz1lLnNuYXBkb2M/Lm1hcCgoZT0+YS5TbmFwRG9jLmZyb21QYXJ0aWFsKGUpKSl8fFtdLHR9fSx0LkRpc2NvdmVyU2hhcmU9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Zi5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5hcnRpY2xlSWQmJnQudWludDMyKDEwKS5zdHJpbmcoZS5hcnRpY2xlSWQpLFwiXCIhPT1lLmVkaXRpb25JZCYmdC51aW50MzIoMTgpLnN0cmluZyhlLmVkaXRpb25JZCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgZi5kZWZhdWx0LlJlYWRlcj9lOm5ldyBmLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXthcnRpY2xlSWQ6XCJcIixlZGl0aW9uSWQ6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuYXJ0aWNsZUlkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkuZWRpdGlvbklkPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXthcnRpY2xlSWQ6XCJcIixlZGl0aW9uSWQ6XCJcIn07cmV0dXJuIHQuYXJ0aWNsZUlkPWUuYXJ0aWNsZUlkPz9cIlwiLHQuZWRpdGlvbklkPWUuZWRpdGlvbklkPz9cIlwiLHR9fSx0LlVzZXJTaGFyZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpmLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLnVzZXJJZCYmby5VVUlELmVuY29kZShlLnVzZXJJZCx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBmLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGYuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3VzZXJJZDp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLnVzZXJJZD1vLlVVSUQuZGVjb2RlKG4sbi51aW50MzIoKSk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt1c2VySWQ6dm9pZCAwfTtyZXR1cm4gdC51c2VySWQ9dm9pZCAwIT09ZS51c2VySWQmJm51bGwhPT1lLnVzZXJJZD9vLlVVSUQuZnJvbVBhcnRpYWwoZS51c2VySWQpOnZvaWQgMCx0fX0sdC5TbmFwUHJvUHJvZmlsZVNoYXJlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmYuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUucHJvZmlsZUlkJiZvLlVVSUQuZW5jb2RlKGUucHJvZmlsZUlkLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGYuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgZi5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17cHJvZmlsZUlkOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2kucHJvZmlsZUlkPW8uVVVJRC5kZWNvZGUobixuLnVpbnQzMigpKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3Byb2ZpbGVJZDp2b2lkIDB9O3JldHVybiB0LnByb2ZpbGVJZD12b2lkIDAhPT1lLnByb2ZpbGVJZCYmbnVsbCE9PWUucHJvZmlsZUlkP28uVVVJRC5mcm9tUGFydGlhbChlLnByb2ZpbGVJZCk6dm9pZCAwLHR9fSx0LlNuYXBQcm9TbmFwU2hhcmU9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Zi5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5wcm9maWxlSWQmJm8uVVVJRC5lbmNvZGUoZS5wcm9maWxlSWQsdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksXCJcIiE9PWUuc25hcElkJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuc25hcElkKSwhMD09PWUuaXNVc2VyUXVvdGVkJiZ0LnVpbnQzMigyNCkuYm9vbChlLmlzVXNlclF1b3RlZCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgZi5kZWZhdWx0LlJlYWRlcj9lOm5ldyBmLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtwcm9maWxlSWQ6dm9pZCAwLHNuYXBJZDpcIlwiLGlzVXNlclF1b3RlZDohMX07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkucHJvZmlsZUlkPW8uVVVJRC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDI6aS5zbmFwSWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDM6aS5pc1VzZXJRdW90ZWQ9bi5ib29sKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtwcm9maWxlSWQ6dm9pZCAwLHNuYXBJZDpcIlwiLGlzVXNlclF1b3RlZDohMX07cmV0dXJuIHQucHJvZmlsZUlkPXZvaWQgMCE9PWUucHJvZmlsZUlkJiZudWxsIT09ZS5wcm9maWxlSWQ/by5VVUlELmZyb21QYXJ0aWFsKGUucHJvZmlsZUlkKTp2b2lkIDAsdC5zbmFwSWQ9ZS5zbmFwSWQ/P1wiXCIsdC5pc1VzZXJRdW90ZWQ9ZS5pc1VzZXJRdW90ZWQ/PyExLHR9fSx0LlNuYXBQcm9TYXZlZFN0b3J5U2hhcmU9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Zi5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5zdG9yeSYmdC5TdG9yeVNoYXJlSW5mby5lbmNvZGUoZS5zdG9yeSxuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnByb2ZpbGVJZCYmby5VVUlELmVuY29kZShlLnByb2ZpbGVJZCxuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBmLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGYuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGE9e3N0b3J5OnZvaWQgMCxwcm9maWxlSWQ6dm9pZCAwfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS5zdG9yeT10LlN0b3J5U2hhcmVJbmZvLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMjphLnByb2ZpbGVJZD1vLlVVSUQuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtzdG9yeTp2b2lkIDAscHJvZmlsZUlkOnZvaWQgMH07cmV0dXJuIG4uc3Rvcnk9dm9pZCAwIT09ZS5zdG9yeSYmbnVsbCE9PWUuc3Rvcnk/dC5TdG9yeVNoYXJlSW5mby5mcm9tUGFydGlhbChlLnN0b3J5KTp2b2lkIDAsbi5wcm9maWxlSWQ9dm9pZCAwIT09ZS5wcm9maWxlSWQmJm51bGwhPT1lLnByb2ZpbGVJZD9vLlVVSUQuZnJvbVBhcnRpYWwoZS5wcm9maWxlSWQpOnZvaWQgMCxufX0sdC5TdG9yeVNoYXJlSW5mbz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpmLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLmNvbXBvc2l0ZVN0b3J5SWQmJmMuQ29tcG9zaXRlU3RvcnlJZC5lbmNvZGUoZS5jb21wb3NpdGVTdG9yeUlkLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuc25hcElkJiZvLlVVSUQuZW5jb2RlKGUuc25hcElkLHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGYuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgZi5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17Y29tcG9zaXRlU3RvcnlJZDp2b2lkIDAsc25hcElkOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuY29tcG9zaXRlU3RvcnlJZD1jLkNvbXBvc2l0ZVN0b3J5SWQuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOmkuc25hcElkPW8uVVVJRC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2NvbXBvc2l0ZVN0b3J5SWQ6dm9pZCAwLHNuYXBJZDp2b2lkIDB9O3JldHVybiB0LmNvbXBvc2l0ZVN0b3J5SWQ9dm9pZCAwIT09ZS5jb21wb3NpdGVTdG9yeUlkJiZudWxsIT09ZS5jb21wb3NpdGVTdG9yeUlkP2MuQ29tcG9zaXRlU3RvcnlJZC5mcm9tUGFydGlhbChlLmNvbXBvc2l0ZVN0b3J5SWQpOnZvaWQgMCx0LnNuYXBJZD12b2lkIDAhPT1lLnNuYXBJZCYmbnVsbCE9PWUuc25hcElkP28uVVVJRC5mcm9tUGFydGlhbChlLnNuYXBJZCk6dm9pZCAwLHR9fSx0LlN0b3J5U2hhcmVNZWRpYUluZm89e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Zi5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5tZWRpYSYmcy5NZWRpYU1ldGFkYXRhLmVuY29kZShlLm1lZGlhLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGYuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgZi5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17bWVkaWE6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/aS5tZWRpYT1zLk1lZGlhTWV0YWRhdGEuZGVjb2RlKG4sbi51aW50MzIoKSk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXttZWRpYTp2b2lkIDB9O3JldHVybiB0Lm1lZGlhPXZvaWQgMCE9PWUubWVkaWEmJm51bGwhPT1lLm1lZGlhP3MuTWVkaWFNZXRhZGF0YS5mcm9tUGFydGlhbChlLm1lZGlhKTp2b2lkIDAsdH19LHQuQml0bW9qaU91dGZpdFNoYXJlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmYuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUuY29zdHVtZU92ZXJyaWRlSWQmJm8uVVVJRC5lbmNvZGUoZS5jb3N0dW1lT3ZlcnJpZGVJZCx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmF2YXRhcklkJiZsLkNvbXBhY3RBdmF0YXJJZC5lbmNvZGUoZS5hdmF0YXJJZCx0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnNuYXBkb2MmJmEuU25hcERvYy5lbmNvZGUoZS5zbmFwZG9jLHQudWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGYuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgZi5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17Y29zdHVtZU92ZXJyaWRlSWQ6dm9pZCAwLGF2YXRhcklkOnZvaWQgMCxzbmFwZG9jOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuY29zdHVtZU92ZXJyaWRlSWQ9by5VVUlELmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMjppLmF2YXRhcklkPWwuQ29tcGFjdEF2YXRhcklkLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMzppLnNuYXBkb2M9YS5TbmFwRG9jLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17Y29zdHVtZU92ZXJyaWRlSWQ6dm9pZCAwLGF2YXRhcklkOnZvaWQgMCxzbmFwZG9jOnZvaWQgMH07cmV0dXJuIHQuY29zdHVtZU92ZXJyaWRlSWQ9dm9pZCAwIT09ZS5jb3N0dW1lT3ZlcnJpZGVJZCYmbnVsbCE9PWUuY29zdHVtZU92ZXJyaWRlSWQ/by5VVUlELmZyb21QYXJ0aWFsKGUuY29zdHVtZU92ZXJyaWRlSWQpOnZvaWQgMCx0LmF2YXRhcklkPXZvaWQgMCE9PWUuYXZhdGFySWQmJm51bGwhPT1lLmF2YXRhcklkP2wuQ29tcGFjdEF2YXRhcklkLmZyb21QYXJ0aWFsKGUuYXZhdGFySWQpOnZvaWQgMCx0LnNuYXBkb2M9dm9pZCAwIT09ZS5zbmFwZG9jJiZudWxsIT09ZS5zbmFwZG9jP2EuU25hcERvYy5mcm9tUGFydGlhbChlLnNuYXBkb2MpOnZvaWQgMCx0fX0sdC5Ob3RlPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmYuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJhdWRpb1wiPT09ZS5ub3RlPy4kY2FzZSYmdC5BdWRpb05vdGUuZW5jb2RlKGUubm90ZS5hdWRpbyxuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSxcInZpZGVvXCI9PT1lLm5vdGU/LiRjYXNlJiZ0LlZpZGVvTm90ZS5lbmNvZGUoZS5ub3RlLnZpZGVvLG4udWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGYuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgZi5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17bm90ZTp2b2lkIDB9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLm5vdGU9eyRjYXNlOlwiYXVkaW9cIixhdWRpbzp0LkF1ZGlvTm90ZS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAyOm8ubm90ZT17JGNhc2U6XCJ2aWRlb1wiLHZpZGVvOnQuVmlkZW9Ob3RlLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e25vdGU6dm9pZCAwfTtyZXR1cm5cImF1ZGlvXCI9PT1lLm5vdGU/LiRjYXNlJiZ2b2lkIDAhPT1lLm5vdGU/LmF1ZGlvJiZudWxsIT09ZS5ub3RlPy5hdWRpbyYmKG4ubm90ZT17JGNhc2U6XCJhdWRpb1wiLGF1ZGlvOnQuQXVkaW9Ob3RlLmZyb21QYXJ0aWFsKGUubm90ZS5hdWRpbyl9KSxcInZpZGVvXCI9PT1lLm5vdGU/LiRjYXNlJiZ2b2lkIDAhPT1lLm5vdGU/LnZpZGVvJiZudWxsIT09ZS5ub3RlPy52aWRlbyYmKG4ubm90ZT17JGNhc2U6XCJ2aWRlb1wiLHZpZGVvOnQuVmlkZW9Ob3RlLmZyb21QYXJ0aWFsKGUubm90ZS52aWRlbyl9KSxufX0sdC5BdWRpb05vdGU9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Zi5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5ub3RlJiZzLk1lZGlhTWV0YWRhdGEuZW5jb2RlKGUubm90ZSx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSxcIlwiIT09ZS51c2VyTG9jYWxlJiZ0LnVpbnQzMigyNikuc3RyaW5nKGUudXNlckxvY2FsZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgZi5kZWZhdWx0LlJlYWRlcj9lOm5ldyBmLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtub3RlOnZvaWQgMCx1c2VyTG9jYWxlOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLm5vdGU9cy5NZWRpYU1ldGFkYXRhLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMzppLnVzZXJMb2NhbGU9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e25vdGU6dm9pZCAwLHVzZXJMb2NhbGU6XCJcIn07cmV0dXJuIHQubm90ZT12b2lkIDAhPT1lLm5vdGUmJm51bGwhPT1lLm5vdGU/cy5NZWRpYU1ldGFkYXRhLmZyb21QYXJ0aWFsKGUubm90ZSk6dm9pZCAwLHQudXNlckxvY2FsZT1lLnVzZXJMb2NhbGU/P1wiXCIsdH19LHQuVmlkZW9Ob3RlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmYuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUubm90ZSYmcy5NZWRpYU1ldGFkYXRhLmVuY29kZShlLm5vdGUsdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgZi5kZWZhdWx0LlJlYWRlcj9lOm5ldyBmLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtub3RlOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2kubm90ZT1zLk1lZGlhTWV0YWRhdGEuZGVjb2RlKG4sbi51aW50MzIoKSk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtub3RlOnZvaWQgMH07cmV0dXJuIHQubm90ZT12b2lkIDAhPT1lLm5vdGUmJm51bGwhPT1lLm5vdGU/cy5NZWRpYU1ldGFkYXRhLmZyb21QYXJ0aWFsKGUubm90ZSk6dm9pZCAwLHR9fSx0LlNhdmVkU3Rvcnk9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Zi5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5zdG9yeUNyZWF0b3JJZCYmby5VVUlELmVuY29kZShlLnN0b3J5Q3JlYXRvcklkLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuc3RvcnlTbmFwZG9jJiZhLlNuYXBEb2MuZW5jb2RlKGUuc3RvcnlTbmFwZG9jLHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuc25hcFN0b3J5SWQmJnUuU25hcFN0b3J5SWQuZW5jb2RlKGUuc25hcFN0b3J5SWQsdC51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgZi5kZWZhdWx0LlJlYWRlcj9lOm5ldyBmLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtzdG9yeUNyZWF0b3JJZDp2b2lkIDAsc3RvcnlTbmFwZG9jOnZvaWQgMCxzbmFwU3RvcnlJZDp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnN0b3J5Q3JlYXRvcklkPW8uVVVJRC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDI6aS5zdG9yeVNuYXBkb2M9YS5TbmFwRG9jLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMzppLnNuYXBTdG9yeUlkPXUuU25hcFN0b3J5SWQuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtzdG9yeUNyZWF0b3JJZDp2b2lkIDAsc3RvcnlTbmFwZG9jOnZvaWQgMCxzbmFwU3RvcnlJZDp2b2lkIDB9O3JldHVybiB0LnN0b3J5Q3JlYXRvcklkPXZvaWQgMCE9PWUuc3RvcnlDcmVhdG9ySWQmJm51bGwhPT1lLnN0b3J5Q3JlYXRvcklkP28uVVVJRC5mcm9tUGFydGlhbChlLnN0b3J5Q3JlYXRvcklkKTp2b2lkIDAsdC5zdG9yeVNuYXBkb2M9dm9pZCAwIT09ZS5zdG9yeVNuYXBkb2MmJm51bGwhPT1lLnN0b3J5U25hcGRvYz9hLlNuYXBEb2MuZnJvbVBhcnRpYWwoZS5zdG9yeVNuYXBkb2MpOnZvaWQgMCx0LnNuYXBTdG9yeUlkPXZvaWQgMCE9PWUuc25hcFN0b3J5SWQmJm51bGwhPT1lLnNuYXBTdG9yeUlkP3UuU25hcFN0b3J5SWQuZnJvbVBhcnRpYWwoZS5zbmFwU3RvcnlJZCk6dm9pZCAwLHR9fSx0LlNuYXBSZXBseT17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpmLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwib3JpZ2luYWxTbmFwZG9jXCI9PT1lLm9yaWdpbmFsQ29udGVudD8uJGNhc2UmJmEuU25hcERvYy5lbmNvZGUoZS5vcmlnaW5hbENvbnRlbnQub3JpZ2luYWxTbmFwZG9jLG4udWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLFwicmVwbHlUZXh0XCI9PT1lLnJlcGx5Q29udGVudD8uJGNhc2UmJnQuVGV4dC5lbmNvZGUoZS5yZXBseUNvbnRlbnQucmVwbHlUZXh0LG4udWludDMyKDkwKS5mb3JrKCkpLmxkZWxpbSgpLFwicmVwbHlFeHRlcm5hbE1lZGlhXCI9PT1lLnJlcGx5Q29udGVudD8uJGNhc2UmJnQuRXh0ZXJuYWxNZWRpYS5lbmNvZGUoZS5yZXBseUNvbnRlbnQucmVwbHlFeHRlcm5hbE1lZGlhLG4udWludDMyKDk4KS5mb3JrKCkpLmxkZWxpbSgpLFwicmVwbHlTdGlja2VyXCI9PT1lLnJlcGx5Q29udGVudD8uJGNhc2UmJnQuU3RpY2tlci5lbmNvZGUoZS5yZXBseUNvbnRlbnQucmVwbHlTdGlja2VyLG4udWludDMyKDEwNikuZm9yaygpKS5sZGVsaW0oKSxcInJlcGx5U2hhcmVcIj09PWUucmVwbHlDb250ZW50Py4kY2FzZSYmdC5TaGFyZS5lbmNvZGUoZS5yZXBseUNvbnRlbnQucmVwbHlTaGFyZSxuLnVpbnQzMigxMTQpLmZvcmsoKSkubGRlbGltKCksXCJyZXBseU5vdGVcIj09PWUucmVwbHlDb250ZW50Py4kY2FzZSYmdC5Ob3RlLmVuY29kZShlLnJlcGx5Q29udGVudC5yZXBseU5vdGUsbi51aW50MzIoMTIyKS5mb3JrKCkpLmxkZWxpbSgpLFwicmVwbHlTbmFwZG9jXCI9PT1lLnJlcGx5Q29udGVudD8uJGNhc2UmJmEuU25hcERvYy5lbmNvZGUoZS5yZXBseUNvbnRlbnQucmVwbHlTbmFwZG9jLG4udWludDMyKDEzOCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnNuYXBQcm9TbmFwUmVwbHlJbmZvJiZ0LlNuYXBQcm9TbmFwUmVwbHlJbmZvLmVuY29kZShlLnNuYXBQcm9TbmFwUmVwbHlJbmZvLG4udWludDMyKDE0NikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmdpZnRJbmZvJiZkLkdpZnRJbmZvLmVuY29kZShlLmdpZnRJbmZvLG4udWludDMyKDE2MikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnNuYXBTdG9yeUlkJiZ1LlNuYXBTdG9yeUlkLmVuY29kZShlLnNuYXBTdG9yeUlkLG4udWludDMyKDE1NCkuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBmLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGYuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89e29yaWdpbmFsQ29udGVudDp2b2lkIDAscmVwbHlDb250ZW50OnZvaWQgMCxzbmFwUHJvU25hcFJlcGx5SW5mbzp2b2lkIDAsZ2lmdEluZm86dm9pZCAwLHNuYXBTdG9yeUlkOnZvaWQgMH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAzOm8ub3JpZ2luYWxDb250ZW50PXskY2FzZTpcIm9yaWdpbmFsU25hcGRvY1wiLG9yaWdpbmFsU25hcGRvYzphLlNuYXBEb2MuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMTE6by5yZXBseUNvbnRlbnQ9eyRjYXNlOlwicmVwbHlUZXh0XCIscmVwbHlUZXh0OnQuVGV4dC5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAxMjpvLnJlcGx5Q29udGVudD17JGNhc2U6XCJyZXBseUV4dGVybmFsTWVkaWFcIixyZXBseUV4dGVybmFsTWVkaWE6dC5FeHRlcm5hbE1lZGlhLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDEzOm8ucmVwbHlDb250ZW50PXskY2FzZTpcInJlcGx5U3RpY2tlclwiLHJlcGx5U3RpY2tlcjp0LlN0aWNrZXIuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMTQ6by5yZXBseUNvbnRlbnQ9eyRjYXNlOlwicmVwbHlTaGFyZVwiLHJlcGx5U2hhcmU6dC5TaGFyZS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAxNTpvLnJlcGx5Q29udGVudD17JGNhc2U6XCJyZXBseU5vdGVcIixyZXBseU5vdGU6dC5Ob3RlLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDE3Om8ucmVwbHlDb250ZW50PXskY2FzZTpcInJlcGx5U25hcGRvY1wiLHJlcGx5U25hcGRvYzphLlNuYXBEb2MuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMTg6by5zbmFwUHJvU25hcFJlcGx5SW5mbz10LlNuYXBQcm9TbmFwUmVwbHlJbmZvLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMjA6by5naWZ0SW5mbz1kLkdpZnRJbmZvLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMTk6by5zbmFwU3RvcnlJZD11LlNuYXBTdG9yeUlkLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17b3JpZ2luYWxDb250ZW50OnZvaWQgMCxyZXBseUNvbnRlbnQ6dm9pZCAwLHNuYXBQcm9TbmFwUmVwbHlJbmZvOnZvaWQgMCxnaWZ0SW5mbzp2b2lkIDAsc25hcFN0b3J5SWQ6dm9pZCAwfTtyZXR1cm5cIm9yaWdpbmFsU25hcGRvY1wiPT09ZS5vcmlnaW5hbENvbnRlbnQ/LiRjYXNlJiZ2b2lkIDAhPT1lLm9yaWdpbmFsQ29udGVudD8ub3JpZ2luYWxTbmFwZG9jJiZudWxsIT09ZS5vcmlnaW5hbENvbnRlbnQ/Lm9yaWdpbmFsU25hcGRvYyYmKG4ub3JpZ2luYWxDb250ZW50PXskY2FzZTpcIm9yaWdpbmFsU25hcGRvY1wiLG9yaWdpbmFsU25hcGRvYzphLlNuYXBEb2MuZnJvbVBhcnRpYWwoZS5vcmlnaW5hbENvbnRlbnQub3JpZ2luYWxTbmFwZG9jKX0pLFwicmVwbHlUZXh0XCI9PT1lLnJlcGx5Q29udGVudD8uJGNhc2UmJnZvaWQgMCE9PWUucmVwbHlDb250ZW50Py5yZXBseVRleHQmJm51bGwhPT1lLnJlcGx5Q29udGVudD8ucmVwbHlUZXh0JiYobi5yZXBseUNvbnRlbnQ9eyRjYXNlOlwicmVwbHlUZXh0XCIscmVwbHlUZXh0OnQuVGV4dC5mcm9tUGFydGlhbChlLnJlcGx5Q29udGVudC5yZXBseVRleHQpfSksXCJyZXBseUV4dGVybmFsTWVkaWFcIj09PWUucmVwbHlDb250ZW50Py4kY2FzZSYmdm9pZCAwIT09ZS5yZXBseUNvbnRlbnQ/LnJlcGx5RXh0ZXJuYWxNZWRpYSYmbnVsbCE9PWUucmVwbHlDb250ZW50Py5yZXBseUV4dGVybmFsTWVkaWEmJihuLnJlcGx5Q29udGVudD17JGNhc2U6XCJyZXBseUV4dGVybmFsTWVkaWFcIixyZXBseUV4dGVybmFsTWVkaWE6dC5FeHRlcm5hbE1lZGlhLmZyb21QYXJ0aWFsKGUucmVwbHlDb250ZW50LnJlcGx5RXh0ZXJuYWxNZWRpYSl9KSxcInJlcGx5U3RpY2tlclwiPT09ZS5yZXBseUNvbnRlbnQ/LiRjYXNlJiZ2b2lkIDAhPT1lLnJlcGx5Q29udGVudD8ucmVwbHlTdGlja2VyJiZudWxsIT09ZS5yZXBseUNvbnRlbnQ/LnJlcGx5U3RpY2tlciYmKG4ucmVwbHlDb250ZW50PXskY2FzZTpcInJlcGx5U3RpY2tlclwiLHJlcGx5U3RpY2tlcjp0LlN0aWNrZXIuZnJvbVBhcnRpYWwoZS5yZXBseUNvbnRlbnQucmVwbHlTdGlja2VyKX0pLFwicmVwbHlTaGFyZVwiPT09ZS5yZXBseUNvbnRlbnQ/LiRjYXNlJiZ2b2lkIDAhPT1lLnJlcGx5Q29udGVudD8ucmVwbHlTaGFyZSYmbnVsbCE9PWUucmVwbHlDb250ZW50Py5yZXBseVNoYXJlJiYobi5yZXBseUNvbnRlbnQ9eyRjYXNlOlwicmVwbHlTaGFyZVwiLHJlcGx5U2hhcmU6dC5TaGFyZS5mcm9tUGFydGlhbChlLnJlcGx5Q29udGVudC5yZXBseVNoYXJlKX0pLFwicmVwbHlOb3RlXCI9PT1lLnJlcGx5Q29udGVudD8uJGNhc2UmJnZvaWQgMCE9PWUucmVwbHlDb250ZW50Py5yZXBseU5vdGUmJm51bGwhPT1lLnJlcGx5Q29udGVudD8ucmVwbHlOb3RlJiYobi5yZXBseUNvbnRlbnQ9eyRjYXNlOlwicmVwbHlOb3RlXCIscmVwbHlOb3RlOnQuTm90ZS5mcm9tUGFydGlhbChlLnJlcGx5Q29udGVudC5yZXBseU5vdGUpfSksXCJyZXBseVNuYXBkb2NcIj09PWUucmVwbHlDb250ZW50Py4kY2FzZSYmdm9pZCAwIT09ZS5yZXBseUNvbnRlbnQ/LnJlcGx5U25hcGRvYyYmbnVsbCE9PWUucmVwbHlDb250ZW50Py5yZXBseVNuYXBkb2MmJihuLnJlcGx5Q29udGVudD17JGNhc2U6XCJyZXBseVNuYXBkb2NcIixyZXBseVNuYXBkb2M6YS5TbmFwRG9jLmZyb21QYXJ0aWFsKGUucmVwbHlDb250ZW50LnJlcGx5U25hcGRvYyl9KSxuLnNuYXBQcm9TbmFwUmVwbHlJbmZvPXZvaWQgMCE9PWUuc25hcFByb1NuYXBSZXBseUluZm8mJm51bGwhPT1lLnNuYXBQcm9TbmFwUmVwbHlJbmZvP3QuU25hcFByb1NuYXBSZXBseUluZm8uZnJvbVBhcnRpYWwoZS5zbmFwUHJvU25hcFJlcGx5SW5mbyk6dm9pZCAwLG4uZ2lmdEluZm89dm9pZCAwIT09ZS5naWZ0SW5mbyYmbnVsbCE9PWUuZ2lmdEluZm8/ZC5HaWZ0SW5mby5mcm9tUGFydGlhbChlLmdpZnRJbmZvKTp2b2lkIDAsbi5zbmFwU3RvcnlJZD12b2lkIDAhPT1lLnNuYXBTdG9yeUlkJiZudWxsIT09ZS5zbmFwU3RvcnlJZD91LlNuYXBTdG9yeUlkLmZyb21QYXJ0aWFsKGUuc25hcFN0b3J5SWQpOnZvaWQgMCxufX0sdC5TbmFwUHJvU25hcFJlcGx5SW5mbz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpmLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiEwPT09ZS5yZXBseURpc2NsYWltZXJTZWVuJiZ0LnVpbnQzMig4KS5ib29sKGUucmVwbHlEaXNjbGFpbWVyU2VlbiksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgZi5kZWZhdWx0LlJlYWRlcj9lOm5ldyBmLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtyZXBseURpc2NsYWltZXJTZWVuOiExfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/aS5yZXBseURpc2NsYWltZXJTZWVuPW4uYm9vbCgpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17cmVwbHlEaXNjbGFpbWVyU2VlbjohMX07cmV0dXJuIHQucmVwbHlEaXNjbGFpbWVyU2Vlbj1lLnJlcGx5RGlzY2xhaW1lclNlZW4/PyExLHR9fSx0LkxvY2F0aW9uPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmYuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJyZXF1ZXN0XCI9PT1lLmxvY2F0aW9uPy4kY2FzZSYmdC5Mb2NhdGlvblJlcXVlc3QuZW5jb2RlKGUubG9jYXRpb24ucmVxdWVzdCxuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSxcImNvb3JkaW5hdGVzXCI9PT1lLmxvY2F0aW9uPy4kY2FzZSYmdC5Mb2NhdGlvbkNvb3JkaW5hdGVzLmVuY29kZShlLmxvY2F0aW9uLmNvb3JkaW5hdGVzLG4udWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGYuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgZi5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17bG9jYXRpb246dm9pZCAwfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5sb2NhdGlvbj17JGNhc2U6XCJyZXF1ZXN0XCIscmVxdWVzdDp0LkxvY2F0aW9uUmVxdWVzdC5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAyOm8ubG9jYXRpb249eyRjYXNlOlwiY29vcmRpbmF0ZXNcIixjb29yZGluYXRlczp0LkxvY2F0aW9uQ29vcmRpbmF0ZXMuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17bG9jYXRpb246dm9pZCAwfTtyZXR1cm5cInJlcXVlc3RcIj09PWUubG9jYXRpb24/LiRjYXNlJiZ2b2lkIDAhPT1lLmxvY2F0aW9uPy5yZXF1ZXN0JiZudWxsIT09ZS5sb2NhdGlvbj8ucmVxdWVzdCYmKG4ubG9jYXRpb249eyRjYXNlOlwicmVxdWVzdFwiLHJlcXVlc3Q6dC5Mb2NhdGlvblJlcXVlc3QuZnJvbVBhcnRpYWwoZS5sb2NhdGlvbi5yZXF1ZXN0KX0pLFwiY29vcmRpbmF0ZXNcIj09PWUubG9jYXRpb24/LiRjYXNlJiZ2b2lkIDAhPT1lLmxvY2F0aW9uPy5jb29yZGluYXRlcyYmbnVsbCE9PWUubG9jYXRpb24/LmNvb3JkaW5hdGVzJiYobi5sb2NhdGlvbj17JGNhc2U6XCJjb29yZGluYXRlc1wiLGNvb3JkaW5hdGVzOnQuTG9jYXRpb25Db29yZGluYXRlcy5mcm9tUGFydGlhbChlLmxvY2F0aW9uLmNvb3JkaW5hdGVzKX0pLG59fSx0LkxvY2F0aW9uUmVxdWVzdD17ZW5jb2RlKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Zi5kZWZhdWx0LldyaXRlci5jcmVhdGUoKX0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgZi5kZWZhdWx0LlJlYWRlcj9lOm5ldyBmLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7bi5za2lwVHlwZSg3JmUpfXJldHVybnt9fSxmcm9tUGFydGlhbDplPT4oe30pfSx0LkxvY2F0aW9uQ29vcmRpbmF0ZXM9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Zi5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUubGF0aXR1ZGUmJnQudWludDMyKDkpLmRvdWJsZShlLmxhdGl0dWRlKSwwIT09ZS5sb25naXR1ZGUmJnQudWludDMyKDE3KS5kb3VibGUoZS5sb25naXR1ZGUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGYuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgZi5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17bGF0aXR1ZGU6MCxsb25naXR1ZGU6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkubGF0aXR1ZGU9bi5kb3VibGUoKTticmVhaztjYXNlIDI6aS5sb25naXR1ZGU9bi5kb3VibGUoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2xhdGl0dWRlOjAsbG9uZ2l0dWRlOjB9O3JldHVybiB0LmxhdGl0dWRlPWUubGF0aXR1ZGU/PzAsdC5sb25naXR1ZGU9ZS5sb25naXR1ZGU/PzAsdH19LHQuTGl2ZUxvY2F0aW9uU2hhcmU9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Zi5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5zZXNzaW9uSWQmJm8uVVVJRC5lbmNvZGUoZS5zZXNzaW9uSWQsdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksMCE9PWUubGF0aXR1ZGUmJnQudWludDMyKDE3KS5kb3VibGUoZS5sYXRpdHVkZSksMCE9PWUubG9uZ2l0dWRlJiZ0LnVpbnQzMigyNSkuZG91YmxlKGUubG9uZ2l0dWRlKSxcIjBcIiE9PWUuZXhwaXJlVGltZU1zJiZ0LnVpbnQzMigzMikudWludDY0KGUuZXhwaXJlVGltZU1zKSxcIjBcIiE9PWUuaW5pdGlhbER1cmF0aW9uTXMmJnQudWludDMyKDQwKS51aW50NjQoZS5pbml0aWFsRHVyYXRpb25NcyksITA9PT1lLmlzTGl2ZVNlc3Npb25JbmRlZmluaXRlJiZ0LnVpbnQzMig0OCkuYm9vbChlLmlzTGl2ZVNlc3Npb25JbmRlZmluaXRlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBmLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGYuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3Nlc3Npb25JZDp2b2lkIDAsbGF0aXR1ZGU6MCxsb25naXR1ZGU6MCxleHBpcmVUaW1lTXM6XCIwXCIsaW5pdGlhbER1cmF0aW9uTXM6XCIwXCIsaXNMaXZlU2Vzc2lvbkluZGVmaW5pdGU6ITF9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnNlc3Npb25JZD1vLlVVSUQuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOmkubGF0aXR1ZGU9bi5kb3VibGUoKTticmVhaztjYXNlIDM6aS5sb25naXR1ZGU9bi5kb3VibGUoKTticmVhaztjYXNlIDQ6aS5leHBpcmVUaW1lTXM9aChuLnVpbnQ2NCgpKTticmVhaztjYXNlIDU6aS5pbml0aWFsRHVyYXRpb25Ncz1oKG4udWludDY0KCkpO2JyZWFrO2Nhc2UgNjppLmlzTGl2ZVNlc3Npb25JbmRlZmluaXRlPW4uYm9vbCgpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17c2Vzc2lvbklkOnZvaWQgMCxsYXRpdHVkZTowLGxvbmdpdHVkZTowLGV4cGlyZVRpbWVNczpcIjBcIixpbml0aWFsRHVyYXRpb25NczpcIjBcIixpc0xpdmVTZXNzaW9uSW5kZWZpbml0ZTohMX07cmV0dXJuIHQuc2Vzc2lvbklkPXZvaWQgMCE9PWUuc2Vzc2lvbklkJiZudWxsIT09ZS5zZXNzaW9uSWQ/by5VVUlELmZyb21QYXJ0aWFsKGUuc2Vzc2lvbklkKTp2b2lkIDAsdC5sYXRpdHVkZT1lLmxhdGl0dWRlPz8wLHQubG9uZ2l0dWRlPWUubG9uZ2l0dWRlPz8wLHQuZXhwaXJlVGltZU1zPWUuZXhwaXJlVGltZU1zPz9cIjBcIix0LmluaXRpYWxEdXJhdGlvbk1zPWUuaW5pdGlhbER1cmF0aW9uTXM/P1wiMFwiLHQuaXNMaXZlU2Vzc2lvbkluZGVmaW5pdGU9ZS5pc0xpdmVTZXNzaW9uSW5kZWZpbml0ZT8/ITEsdH19LHQuTWFwRHJvcD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpmLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5sYXRpdHVkZSYmdC51aW50MzIoOSkuZG91YmxlKGUubGF0aXR1ZGUpLDAhPT1lLmxvbmdpdHVkZSYmdC51aW50MzIoMTcpLmRvdWJsZShlLmxvbmdpdHVkZSksXCIwXCIhPT1lLmNyZWF0ZVRpbWVNcyYmdC51aW50MzIoMjQpLnVpbnQ2NChlLmNyZWF0ZVRpbWVNcyksdm9pZCAwIT09ZS5waW5DcmVhdG9ySWQmJm8uVVVJRC5lbmNvZGUoZS5waW5DcmVhdG9ySWQsdC51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5waW5JZCYmby5VVUlELmVuY29kZShlLnBpbklkLHQudWludDMyKDQyKS5mb3JrKCkpLmxkZWxpbSgpLFwiXCIhPT1lLnBpblRpdGxlJiZ0LnVpbnQzMig1MCkuc3RyaW5nKGUucGluVGl0bGUpLCEwPT09ZS5kb05vdFBlcnNpc3QmJnQudWludDMyKDU2KS5ib29sKGUuZG9Ob3RQZXJzaXN0KSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBmLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGYuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2xhdGl0dWRlOjAsbG9uZ2l0dWRlOjAsY3JlYXRlVGltZU1zOlwiMFwiLHBpbkNyZWF0b3JJZDp2b2lkIDAscGluSWQ6dm9pZCAwLHBpblRpdGxlOlwiXCIsZG9Ob3RQZXJzaXN0OiExfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5sYXRpdHVkZT1uLmRvdWJsZSgpO2JyZWFrO2Nhc2UgMjppLmxvbmdpdHVkZT1uLmRvdWJsZSgpO2JyZWFrO2Nhc2UgMzppLmNyZWF0ZVRpbWVNcz1oKG4udWludDY0KCkpO2JyZWFrO2Nhc2UgNDppLnBpbkNyZWF0b3JJZD1vLlVVSUQuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSA1OmkucGluSWQ9by5VVUlELmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgNjppLnBpblRpdGxlPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA3OmkuZG9Ob3RQZXJzaXN0PW4uYm9vbCgpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17bGF0aXR1ZGU6MCxsb25naXR1ZGU6MCxjcmVhdGVUaW1lTXM6XCIwXCIscGluQ3JlYXRvcklkOnZvaWQgMCxwaW5JZDp2b2lkIDAscGluVGl0bGU6XCJcIixkb05vdFBlcnNpc3Q6ITF9O3JldHVybiB0LmxhdGl0dWRlPWUubGF0aXR1ZGU/PzAsdC5sb25naXR1ZGU9ZS5sb25naXR1ZGU/PzAsdC5jcmVhdGVUaW1lTXM9ZS5jcmVhdGVUaW1lTXM/P1wiMFwiLHQucGluQ3JlYXRvcklkPXZvaWQgMCE9PWUucGluQ3JlYXRvcklkJiZudWxsIT09ZS5waW5DcmVhdG9ySWQ/by5VVUlELmZyb21QYXJ0aWFsKGUucGluQ3JlYXRvcklkKTp2b2lkIDAsdC5waW5JZD12b2lkIDAhPT1lLnBpbklkJiZudWxsIT09ZS5waW5JZD9vLlVVSUQuZnJvbVBhcnRpYWwoZS5waW5JZCk6dm9pZCAwLHQucGluVGl0bGU9ZS5waW5UaXRsZT8/XCJcIix0LmRvTm90UGVyc2lzdD1lLmRvTm90UGVyc2lzdD8/ITEsdH19LHQuQ2FudmFzQXBwPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmYuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUuYXBwSWQmJm8uVVVJRC5lbmNvZGUoZS5hcHBJZCxuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSxcIlwiIT09ZS5kZWVwbGlua1BheWxvYWQmJm4udWludDMyKDE4KS5zdHJpbmcoZS5kZWVwbGlua1BheWxvYWQpLHZvaWQgMCE9PWUuZGVmYXVsdENhcmQmJnQuQ2FudmFzQXBwU2hhcmVDYXJkLmVuY29kZShlLmRlZmF1bHRDYXJkLG4udWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuaW1hZ2VDYXJkJiZ0LkNhbnZhc0FwcFNoYXJlSW1hZ2VDYXJkLmVuY29kZShlLmltYWdlQ2FyZCxuLnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBmLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGYuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGE9e2FwcElkOnZvaWQgMCxkZWVwbGlua1BheWxvYWQ6XCJcIixkZWZhdWx0Q2FyZDp2b2lkIDAsaW1hZ2VDYXJkOnZvaWQgMH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmEuYXBwSWQ9by5VVUlELmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMjphLmRlZXBsaW5rUGF5bG9hZD1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMzphLmRlZmF1bHRDYXJkPXQuQ2FudmFzQXBwU2hhcmVDYXJkLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgNDphLmltYWdlQ2FyZD10LkNhbnZhc0FwcFNoYXJlSW1hZ2VDYXJkLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17YXBwSWQ6dm9pZCAwLGRlZXBsaW5rUGF5bG9hZDpcIlwiLGRlZmF1bHRDYXJkOnZvaWQgMCxpbWFnZUNhcmQ6dm9pZCAwfTtyZXR1cm4gbi5hcHBJZD12b2lkIDAhPT1lLmFwcElkJiZudWxsIT09ZS5hcHBJZD9vLlVVSUQuZnJvbVBhcnRpYWwoZS5hcHBJZCk6dm9pZCAwLG4uZGVlcGxpbmtQYXlsb2FkPWUuZGVlcGxpbmtQYXlsb2FkPz9cIlwiLG4uZGVmYXVsdENhcmQ9dm9pZCAwIT09ZS5kZWZhdWx0Q2FyZCYmbnVsbCE9PWUuZGVmYXVsdENhcmQ/dC5DYW52YXNBcHBTaGFyZUNhcmQuZnJvbVBhcnRpYWwoZS5kZWZhdWx0Q2FyZCk6dm9pZCAwLG4uaW1hZ2VDYXJkPXZvaWQgMCE9PWUuaW1hZ2VDYXJkJiZudWxsIT09ZS5pbWFnZUNhcmQ/dC5DYW52YXNBcHBTaGFyZUltYWdlQ2FyZC5mcm9tUGFydGlhbChlLmltYWdlQ2FyZCk6dm9pZCAwLG59fSx0LkNhbnZhc0FwcFNoYXJlQ2FyZD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpmLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnByaW1hcnlJbWFnZVVybCYmdC51aW50MzIoMTApLnN0cmluZyhlLnByaW1hcnlJbWFnZVVybCksXCJcIiE9PWUuaGVhZGxpbmUmJnQudWludDMyKDE4KS5zdHJpbmcoZS5oZWFkbGluZSksXCJcIiE9PWUuZGVzY3JpcHRpb24mJnQudWludDMyKDI2KS5zdHJpbmcoZS5kZXNjcmlwdGlvbiksXCJcIiE9PWUuYWN0aW9uQ3RhJiZ0LnVpbnQzMigzNCkuc3RyaW5nKGUuYWN0aW9uQ3RhKSx2b2lkIDAhPT1lLnByaW1hcnlJbWFnZU1ldGFkYXRhJiZzLk1lZGlhTWV0YWRhdGEuZW5jb2RlKGUucHJpbWFyeUltYWdlTWV0YWRhdGEsdC51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgZi5kZWZhdWx0LlJlYWRlcj9lOm5ldyBmLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtwcmltYXJ5SW1hZ2VVcmw6XCJcIixoZWFkbGluZTpcIlwiLGRlc2NyaXB0aW9uOlwiXCIsYWN0aW9uQ3RhOlwiXCIscHJpbWFyeUltYWdlTWV0YWRhdGE6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5wcmltYXJ5SW1hZ2VVcmw9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS5oZWFkbGluZT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMzppLmRlc2NyaXB0aW9uPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA0OmkuYWN0aW9uQ3RhPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA1OmkucHJpbWFyeUltYWdlTWV0YWRhdGE9cy5NZWRpYU1ldGFkYXRhLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17cHJpbWFyeUltYWdlVXJsOlwiXCIsaGVhZGxpbmU6XCJcIixkZXNjcmlwdGlvbjpcIlwiLGFjdGlvbkN0YTpcIlwiLHByaW1hcnlJbWFnZU1ldGFkYXRhOnZvaWQgMH07cmV0dXJuIHQucHJpbWFyeUltYWdlVXJsPWUucHJpbWFyeUltYWdlVXJsPz9cIlwiLHQuaGVhZGxpbmU9ZS5oZWFkbGluZT8/XCJcIix0LmRlc2NyaXB0aW9uPWUuZGVzY3JpcHRpb24/P1wiXCIsdC5hY3Rpb25DdGE9ZS5hY3Rpb25DdGE/P1wiXCIsdC5wcmltYXJ5SW1hZ2VNZXRhZGF0YT12b2lkIDAhPT1lLnByaW1hcnlJbWFnZU1ldGFkYXRhJiZudWxsIT09ZS5wcmltYXJ5SW1hZ2VNZXRhZGF0YT9zLk1lZGlhTWV0YWRhdGEuZnJvbVBhcnRpYWwoZS5wcmltYXJ5SW1hZ2VNZXRhZGF0YSk6dm9pZCAwLHR9fSx0LkNhbnZhc0FwcFNoYXJlSW1hZ2VDYXJkPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmYuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUucHJpbWFyeUltYWdlVXJsJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUucHJpbWFyeUltYWdlVXJsKSx2b2lkIDAhPT1lLnByaW1hcnlJbWFnZU1ldGFkYXRhJiZzLk1lZGlhTWV0YWRhdGEuZW5jb2RlKGUucHJpbWFyeUltYWdlTWV0YWRhdGEsdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksXCJcIiE9PWUuYWN0aW9uQ3RhJiZ0LnVpbnQzMigyNikuc3RyaW5nKGUuYWN0aW9uQ3RhKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBmLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGYuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3ByaW1hcnlJbWFnZVVybDpcIlwiLHByaW1hcnlJbWFnZU1ldGFkYXRhOnZvaWQgMCxhY3Rpb25DdGE6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkucHJpbWFyeUltYWdlVXJsPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkucHJpbWFyeUltYWdlTWV0YWRhdGE9cy5NZWRpYU1ldGFkYXRhLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMzppLmFjdGlvbkN0YT1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17cHJpbWFyeUltYWdlVXJsOlwiXCIscHJpbWFyeUltYWdlTWV0YWRhdGE6dm9pZCAwLGFjdGlvbkN0YTpcIlwifTtyZXR1cm4gdC5wcmltYXJ5SW1hZ2VVcmw9ZS5wcmltYXJ5SW1hZ2VVcmw/P1wiXCIsdC5wcmltYXJ5SW1hZ2VNZXRhZGF0YT12b2lkIDAhPT1lLnByaW1hcnlJbWFnZU1ldGFkYXRhJiZudWxsIT09ZS5wcmltYXJ5SW1hZ2VNZXRhZGF0YT9zLk1lZGlhTWV0YWRhdGEuZnJvbVBhcnRpYWwoZS5wcmltYXJ5SW1hZ2VNZXRhZGF0YSk6dm9pZCAwLHQuYWN0aW9uQ3RhPWUuYWN0aW9uQ3RhPz9cIlwiLHR9fSx0LkxlZ2FjeUFkU2hhcmU9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Zi5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5tZWRpYSYmcy5NZWRpYU1ldGFkYXRhLmVuY29kZShlLm1lZGlhLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGYuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgZi5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17bWVkaWE6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/aS5tZWRpYT1zLk1lZGlhTWV0YWRhdGEuZGVjb2RlKG4sbi51aW50MzIoKSk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXttZWRpYTp2b2lkIDB9O3JldHVybiB0Lm1lZGlhPXZvaWQgMCE9PWUubWVkaWEmJm51bGwhPT1lLm1lZGlhP3MuTWVkaWFNZXRhZGF0YS5mcm9tUGFydGlhbChlLm1lZGlhKTp2b2lkIDAsdH19LHQuRmFtaWx5Q2VudGVySW52aXRlPXtlbmNvZGUoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpmLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpfSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBmLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGYuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtuLnNraXBUeXBlKDcmZSl9cmV0dXJue319LGZyb21QYXJ0aWFsOmU9Pih7fSl9LHQuU25hcEtpdEludml0ZVNoYXJlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmYuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUuYXBwSWQmJm8uVVVJRC5lbmNvZGUoZS5hcHBJZCx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnN0aWNrZXJNZWRpYU1ldGFkYXRhJiZzLk1lZGlhTWV0YWRhdGEuZW5jb2RlKGUuc3RpY2tlck1lZGlhTWV0YWRhdGEsdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksXCJcIiE9PWUuaW52aXRlVXJpJiZ0LnVpbnQzMigyNikuc3RyaW5nKGUuaW52aXRlVXJpKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBmLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGYuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2FwcElkOnZvaWQgMCxzdGlja2VyTWVkaWFNZXRhZGF0YTp2b2lkIDAsaW52aXRlVXJpOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmFwcElkPW8uVVVJRC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDI6aS5zdGlja2VyTWVkaWFNZXRhZGF0YT1zLk1lZGlhTWV0YWRhdGEuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAzOmkuaW52aXRlVXJpPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXthcHBJZDp2b2lkIDAsc3RpY2tlck1lZGlhTWV0YWRhdGE6dm9pZCAwLGludml0ZVVyaTpcIlwifTtyZXR1cm4gdC5hcHBJZD12b2lkIDAhPT1lLmFwcElkJiZudWxsIT09ZS5hcHBJZD9vLlVVSUQuZnJvbVBhcnRpYWwoZS5hcHBJZCk6dm9pZCAwLHQuc3RpY2tlck1lZGlhTWV0YWRhdGE9dm9pZCAwIT09ZS5zdGlja2VyTWVkaWFNZXRhZGF0YSYmbnVsbCE9PWUuc3RpY2tlck1lZGlhTWV0YWRhdGE/cy5NZWRpYU1ldGFkYXRhLmZyb21QYXJ0aWFsKGUuc3RpY2tlck1lZGlhTWV0YWRhdGEpOnZvaWQgMCx0Lmludml0ZVVyaT1lLmludml0ZVVyaT8/XCJcIix0fX0sdC5QbGFjZVNoYXJlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmYuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUucGxhY2VJZCYmby5VVUlELmVuY29kZShlLnBsYWNlSWQsdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgZi5kZWZhdWx0LlJlYWRlcj9lOm5ldyBmLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtwbGFjZUlkOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2kucGxhY2VJZD1vLlVVSUQuZGVjb2RlKG4sbi51aW50MzIoKSk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtwbGFjZUlkOnZvaWQgMH07cmV0dXJuIHQucGxhY2VJZD12b2lkIDAhPT1lLnBsYWNlSWQmJm51bGwhPT1lLnBsYWNlSWQ/by5VVUlELmZyb21QYXJ0aWFsKGUucGxhY2VJZCk6dm9pZCAwLHR9fSx0LkJsb29wc1N0b3J5U2hhcmU9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Zi5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5zdG9yeSYmdC5TdG9yeVNoYXJlSW5mby5lbmNvZGUoZS5zdG9yeSxuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnByZXZpZXcmJnQuU3RvcnlTaGFyZU1lZGlhSW5mby5lbmNvZGUoZS5wcmV2aWV3LG4udWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLnJlY2lwaWVudEJsb29wc1NlbGZpZVBvc2l0aW9uJiZuLnVpbnQzMigyNCkuaW50MzIoZS5yZWNpcGllbnRCbG9vcHNTZWxmaWVQb3NpdGlvbiksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgZi5kZWZhdWx0LlJlYWRlcj9lOm5ldyBmLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXtzdG9yeTp2b2lkIDAscHJldmlldzp2b2lkIDAscmVjaXBpZW50Qmxvb3BzU2VsZmllUG9zaXRpb246MH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8uc3Rvcnk9dC5TdG9yeVNoYXJlSW5mby5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDI6by5wcmV2aWV3PXQuU3RvcnlTaGFyZU1lZGlhSW5mby5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDM6by5yZWNpcGllbnRCbG9vcHNTZWxmaWVQb3NpdGlvbj1yLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtzdG9yeTp2b2lkIDAscHJldmlldzp2b2lkIDAscmVjaXBpZW50Qmxvb3BzU2VsZmllUG9zaXRpb246MH07cmV0dXJuIG4uc3Rvcnk9dm9pZCAwIT09ZS5zdG9yeSYmbnVsbCE9PWUuc3Rvcnk/dC5TdG9yeVNoYXJlSW5mby5mcm9tUGFydGlhbChlLnN0b3J5KTp2b2lkIDAsbi5wcmV2aWV3PXZvaWQgMCE9PWUucHJldmlldyYmbnVsbCE9PWUucHJldmlldz90LlN0b3J5U2hhcmVNZWRpYUluZm8uZnJvbVBhcnRpYWwoZS5wcmV2aWV3KTp2b2lkIDAsbi5yZWNpcGllbnRCbG9vcHNTZWxmaWVQb3NpdGlvbj1lLnJlY2lwaWVudEJsb29wc1NlbGZpZVBvc2l0aW9uPz8wLG59fSx0LlRleHRBZFNoYXJlPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmYuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7Zm9yKGNvbnN0IHIgb2YgZS5pdGVtcyl0LlRleHRBZEl0ZW0uZW5jb2RlKHIsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuXCJcIiE9PWUuZGlzcGxheVF1ZXJ5JiZuLnVpbnQzMigxOCkuc3RyaW5nKGUuZGlzcGxheVF1ZXJ5KSxcIlwiIT09ZS5wYXJ0bmVyJiZuLnVpbnQzMigyNikuc3RyaW5nKGUucGFydG5lciksXCJcIiE9PWUucGFydG5lclJlcXVlc3RJZCYmbi51aW50MzIoMzQpLnN0cmluZyhlLnBhcnRuZXJSZXF1ZXN0SWQpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGYuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgZi5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17aXRlbXM6W10sZGlzcGxheVF1ZXJ5OlwiXCIscGFydG5lcjpcIlwiLHBhcnRuZXJSZXF1ZXN0SWQ6XCJcIn07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8uaXRlbXMucHVzaCh0LlRleHRBZEl0ZW0uZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2Nhc2UgMjpvLmRpc3BsYXlRdWVyeT1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMzpvLnBhcnRuZXI9ci5zdHJpbmcoKTticmVhaztjYXNlIDQ6by5wYXJ0bmVyUmVxdWVzdElkPXIuc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtpdGVtczpbXSxkaXNwbGF5UXVlcnk6XCJcIixwYXJ0bmVyOlwiXCIscGFydG5lclJlcXVlc3RJZDpcIlwifTtyZXR1cm4gbi5pdGVtcz1lLml0ZW1zPy5tYXAoKGU9PnQuVGV4dEFkSXRlbS5mcm9tUGFydGlhbChlKSkpfHxbXSxuLmRpc3BsYXlRdWVyeT1lLmRpc3BsYXlRdWVyeT8/XCJcIixuLnBhcnRuZXI9ZS5wYXJ0bmVyPz9cIlwiLG4ucGFydG5lclJlcXVlc3RJZD1lLnBhcnRuZXJSZXF1ZXN0SWQ/P1wiXCIsbn19LHQuVGV4dEFkSXRlbT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpmLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnRpdGxlJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUudGl0bGUpLFwiXCIhPT1lLmRpc3BsYXlVcmwmJnQudWludDMyKDE4KS5zdHJpbmcoZS5kaXNwbGF5VXJsKSxcIlwiIT09ZS5kaXNwbGF5RG9tYWluJiZ0LnVpbnQzMigyNikuc3RyaW5nKGUuZGlzcGxheURvbWFpbiksXCJcIiE9PWUuYWJzdHJhY3QmJnQudWludDMyKDM0KS5zdHJpbmcoZS5hYnN0cmFjdCksXCJcIiE9PWUuZGVzdGluYXRpb25VcmwmJnQudWludDMyKDQyKS5zdHJpbmcoZS5kZXN0aW5hdGlvblVybCksXCJcIiE9PWUuYWRJZCYmdC51aW50MzIoNTApLnN0cmluZyhlLmFkSWQpLFwiXCIhPT1lLmltcHJlc3Npb25JZCYmdC51aW50MzIoNTgpLnN0cmluZyhlLmltcHJlc3Npb25JZCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgZi5kZWZhdWx0LlJlYWRlcj9lOm5ldyBmLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXt0aXRsZTpcIlwiLGRpc3BsYXlVcmw6XCJcIixkaXNwbGF5RG9tYWluOlwiXCIsYWJzdHJhY3Q6XCJcIixkZXN0aW5hdGlvblVybDpcIlwiLGFkSWQ6XCJcIixpbXByZXNzaW9uSWQ6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkudGl0bGU9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS5kaXNwbGF5VXJsPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmkuZGlzcGxheURvbWFpbj1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNDppLmFic3RyYWN0PW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA1OmkuZGVzdGluYXRpb25Vcmw9bi5zdHJpbmcoKTticmVhaztjYXNlIDY6aS5hZElkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA3OmkuaW1wcmVzc2lvbklkPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt0aXRsZTpcIlwiLGRpc3BsYXlVcmw6XCJcIixkaXNwbGF5RG9tYWluOlwiXCIsYWJzdHJhY3Q6XCJcIixkZXN0aW5hdGlvblVybDpcIlwiLGFkSWQ6XCJcIixpbXByZXNzaW9uSWQ6XCJcIn07cmV0dXJuIHQudGl0bGU9ZS50aXRsZT8/XCJcIix0LmRpc3BsYXlVcmw9ZS5kaXNwbGF5VXJsPz9cIlwiLHQuZGlzcGxheURvbWFpbj1lLmRpc3BsYXlEb21haW4/P1wiXCIsdC5hYnN0cmFjdD1lLmFic3RyYWN0Pz9cIlwiLHQuZGVzdGluYXRpb25Vcmw9ZS5kZXN0aW5hdGlvblVybD8/XCJcIix0LmFkSWQ9ZS5hZElkPz9cIlwiLHQuaW1wcmVzc2lvbklkPWUuaW1wcmVzc2lvbklkPz9cIlwiLHR9fSx0Lk5vblBhcnRpY2lwYW50Qm90UmVzcG9uc2U9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Zi5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUuY29udGVudEVudmVsb3BlLmxlbmd0aCYmdC51aW50MzIoMTApLmJ5dGVzKGUuY29udGVudEVudmVsb3BlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBmLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGYuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9bSgpO2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLmNvbnRlbnRFbnZlbG9wZT1uLmJ5dGVzKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PW0oKTtyZXR1cm4gdC5jb250ZW50RW52ZWxvcGU9ZS5jb250ZW50RW52ZWxvcGU/P25ldyBVaW50OEFycmF5LHR9fSxmLmRlZmF1bHQudXRpbC5Mb25nIT09aS5kZWZhdWx0JiYoZi5kZWZhdWx0LnV0aWwuTG9uZz1pLmRlZmF1bHQsZi5kZWZhdWx0LmNvbmZpZ3VyZSgpKX0sNjk4NzU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTGl2ZUxvY2F0aW9uR3JvdXBTaGFyZVN0YXR1c01lc3NhZ2U9dC5NZXJsaW5XZWxjb21lU3RhdHVzTWVzc2FnZT10LlN0cmVha1N0YXR1c01lc3NhZ2U9dC5QbHVzR2lmdFN0YXR1c01lc3NhZ2U9dC5VcGRhdGVDaGF0V2FsbHBhcGVyU3RhdHVzTWVzc2FnZT10LlF1b3RlUmVwbHlTaGFyZVN0YXR1c01lc3NhZ2U9dC5EV2ViVXBzZWxsU3RhdHVzTWVzc2FnZT10LkxlYXZlRmFtaWx5Q2VudGVyU3RhdHVzTWVzc2FnZT10LkFjY2VwdEZhbWlseUNlbnRlckludml0ZVN0YXR1c01lc3NhZ2U9dC5Jbk15Q29udGFjdHNTdGF0dXNNZXNzYWdlPXQuTGl2ZUxvY2F0aW9uU2hhcmVUZXJtaW5hdGVkU3RhdHVzTWVzc2FnZT10LkNhbnZhc0N1c3RvbVVwZGF0ZVN0YXR1c01lc3NhZ2U9dC5DYW52YXNDdXN0b21VcGRhdGVJbmZvPXQuR3JvdXBJbnZpdGVTdGlja2VySm9pblRleHRQcm9tcHRTdGF0dXNNZXNzYWdlPXQuSW52aXRlTGlua1N0YXR1c01lc3NhZ2U9dC5HYW1lQ2xvc2VkU3RhdHVzTWVzc2FnZT10LkNoYW5nZUNvbnZlcnNhdGlvblJldGVudGlvblBvbGljeVN0YXR1c01lc3NhZ2U9dC5NZWRpYVR5cGVUb0NvdW50PXQuU2F2ZVRvQ2FtZXJhUm9sbFN0YXR1c01lc3NhZ2U9dC5Hcm91cENoYXRDcmVhdGVkU3RhdHVzTWVzc2FnZT10Lk1lc3NhZ2VFcmFzZVN0YXR1c01lc3NhZ2U9dC5OYW1lQ2hhbmdlU3RhdHVzTWVzc2FnZT10LkNhbGxpbmdTdGF0dXNNZXNzYWdlPXQuUGFydGljaXBhbnRDaGFuZ2VTdGF0dXNNZXNzYWdlX0VudHJ5PXQuUGFydGljaXBhbnRDaGFuZ2VTdGF0dXNNZXNzYWdlPXQuU2NyZWVuQ2FwdHVyZVN0YXR1c01lc3NhZ2U9dC5TdGF0dXNNZXNzYWdlPXQuU3RyZWFrU3RhdHVzTWVzc2FnZV9TdHJlYWtTdGF0dXM9dC5JbnZpdGVMaW5rU3RhdHVzTWVzc2FnZV9JbnZpdGVMaW5rU3RhdHVzPXQuQ2hhbmdlQ29udmVyc2F0aW9uUmV0ZW50aW9uUG9saWN5U3RhdHVzTWVzc2FnZV9EaXNwbGF5VHlwZT10Lk1lZGlhVHlwZVRvQ291bnRfTWVkaWFUeXBlPXQuTWVzc2FnZUVyYXNlU3RhdHVzTWVzc2FnZV9NZXNzYWdlVHlwZT10LkNhbGxpbmdTdGF0dXNNZXNzYWdlX0NhbGxUeXBlPXQuQ2FsbGluZ1N0YXR1c01lc3NhZ2VfQ2FsbFN0YXR1cz10LlBhcnRpY2lwYW50Q2hhbmdlU3RhdHVzTWVzc2FnZV9FbnRyeV9MZWF2ZVJlYXNvbj10LlBhcnRpY2lwYW50Q2hhbmdlU3RhdHVzTWVzc2FnZV9FbnRyeV9TdGF0dXNDaGFuZ2U9dC5TY3JlZW5DYXB0dXJlU3RhdHVzTWVzc2FnZV9DYXB0dXJpbmdVc2VySW5mbz10LlNjcmVlbkNhcHR1cmVTdGF0dXNNZXNzYWdlX0NhcHR1cmVTb3VyY2U9dC5TY3JlZW5DYXB0dXJlU3RhdHVzTWVzc2FnZV9DYXB0dXJlVHlwZT12b2lkIDA7Y29uc3QgaT1yKG4oNDE1ODMpKSxvPW4oOTc4MDQpLGE9bigxMTg3OSkscz1yKG4oNjIxMDApKTtmdW5jdGlvbiBjKGUpe3JldHVybiBlLnRvU3RyaW5nKCl9dmFyIGwsdSxkLGYscCxtLGgsdixnLHksRSxfOyhfPXQuU2NyZWVuQ2FwdHVyZVN0YXR1c01lc3NhZ2VfQ2FwdHVyZVR5cGV8fCh0LlNjcmVlbkNhcHR1cmVTdGF0dXNNZXNzYWdlX0NhcHR1cmVUeXBlPXt9KSlbXy5TQ1JFRU5fU0hPVD0wXT1cIlNDUkVFTl9TSE9UXCIsX1tfLlNDUkVFTl9SRUNPUkQ9MV09XCJTQ1JFRU5fUkVDT1JEXCIsX1tfLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwoRT10LlNjcmVlbkNhcHR1cmVTdGF0dXNNZXNzYWdlX0NhcHR1cmVTb3VyY2V8fCh0LlNjcmVlbkNhcHR1cmVTdGF0dXNNZXNzYWdlX0NhcHR1cmVTb3VyY2U9e30pKVtFLkNPTlZFUlNBVElPTj0wXT1cIkNPTlZFUlNBVElPTlwiLEVbRS5GUklFTkRTSElQX1BST0ZJTEU9MV09XCJGUklFTkRTSElQX1BST0ZJTEVcIixFW0UuR1JPVVBfUFJPRklMRT0yXT1cIkdST1VQX1BST0ZJTEVcIixFW0UuQ0FMTD0zXT1cIkNBTExcIixFW0UuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLCh5PXQuU2NyZWVuQ2FwdHVyZVN0YXR1c01lc3NhZ2VfQ2FwdHVyaW5nVXNlckluZm98fCh0LlNjcmVlbkNhcHR1cmVTdGF0dXNNZXNzYWdlX0NhcHR1cmluZ1VzZXJJbmZvPXt9KSlbeS5VTlNFVD0wXT1cIlVOU0VUXCIseVt5LkNVUlJFTlRfR1JPVVBfTUVNQkVSPTFdPVwiQ1VSUkVOVF9HUk9VUF9NRU1CRVJcIix5W3kuS0lDS0VEX0dST1VQX01FTUJFUj0yXT1cIktJQ0tFRF9HUk9VUF9NRU1CRVJcIix5W3kuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLChnPXQuUGFydGljaXBhbnRDaGFuZ2VTdGF0dXNNZXNzYWdlX0VudHJ5X1N0YXR1c0NoYW5nZXx8KHQuUGFydGljaXBhbnRDaGFuZ2VTdGF0dXNNZXNzYWdlX0VudHJ5X1N0YXR1c0NoYW5nZT17fSkpW2cuQURERUQ9MF09XCJBRERFRFwiLGdbZy5DUkVBVEVEPTFdPVwiQ1JFQVRFRFwiLGdbZy5MRUZUPTJdPVwiTEVGVFwiLGdbZy5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKHY9dC5QYXJ0aWNpcGFudENoYW5nZVN0YXR1c01lc3NhZ2VfRW50cnlfTGVhdmVSZWFzb258fCh0LlBhcnRpY2lwYW50Q2hhbmdlU3RhdHVzTWVzc2FnZV9FbnRyeV9MZWF2ZVJlYXNvbj17fSkpW3YuTEVBVkVfUkVBU09OX1VOU0VUPTBdPVwiTEVBVkVfUkVBU09OX1VOU0VUXCIsdlt2LkxFQVZFX1JFQVNPTl9TRUxGX0lOSVRJQVRFRD0xXT1cIkxFQVZFX1JFQVNPTl9TRUxGX0lOSVRJQVRFRFwiLHZbdi5MRUFWRV9SRUFTT05fS0lDS0VEPTJdPVwiTEVBVkVfUkVBU09OX0tJQ0tFRFwiLHZbdi5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKGg9dC5DYWxsaW5nU3RhdHVzTWVzc2FnZV9DYWxsU3RhdHVzfHwodC5DYWxsaW5nU3RhdHVzTWVzc2FnZV9DYWxsU3RhdHVzPXt9KSlbaC5TVEFSVEVEPTBdPVwiU1RBUlRFRFwiLGhbaC5FTkRFRD0xXT1cIkVOREVEXCIsaFtoLkxFRlQ9Ml09XCJMRUZUXCIsaFtoLkpPSU5FRD0zXT1cIkpPSU5FRFwiLGhbaC5NSVNTRUQ9NF09XCJNSVNTRURcIixoW2guVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLChtPXQuQ2FsbGluZ1N0YXR1c01lc3NhZ2VfQ2FsbFR5cGV8fCh0LkNhbGxpbmdTdGF0dXNNZXNzYWdlX0NhbGxUeXBlPXt9KSlbbS5BVURJTz0wXT1cIkFVRElPXCIsbVttLlZJREVPPTFdPVwiVklERU9cIixtW20uVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLChwPXQuTWVzc2FnZUVyYXNlU3RhdHVzTWVzc2FnZV9NZXNzYWdlVHlwZXx8KHQuTWVzc2FnZUVyYXNlU3RhdHVzTWVzc2FnZV9NZXNzYWdlVHlwZT17fSkpW3AuVU5TRVQ9MF09XCJVTlNFVFwiLHBbcC5DSEFUPTFdPVwiQ0hBVFwiLHBbcC5TTkFQPTJdPVwiU05BUFwiLHBbcC5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKGY9dC5NZWRpYVR5cGVUb0NvdW50X01lZGlhVHlwZXx8KHQuTWVkaWFUeXBlVG9Db3VudF9NZWRpYVR5cGU9e30pKVtmLlVOS05PV049MF09XCJVTktOT1dOXCIsZltmLklNQUdFPTFdPVwiSU1BR0VcIixmW2YuVklERU89Ml09XCJWSURFT1wiLGZbZi5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKGQ9dC5DaGFuZ2VDb252ZXJzYXRpb25SZXRlbnRpb25Qb2xpY3lTdGF0dXNNZXNzYWdlX0Rpc3BsYXlUeXBlfHwodC5DaGFuZ2VDb252ZXJzYXRpb25SZXRlbnRpb25Qb2xpY3lTdGF0dXNNZXNzYWdlX0Rpc3BsYXlUeXBlPXt9KSlbZC5ESVNQTEFZX1RZUEVfVU5TRVQ9MF09XCJESVNQTEFZX1RZUEVfVU5TRVRcIixkW2QuRElTUExBWV9UWVBFX1BFUk1BTkVOVF9VU0VSX0lOSVRJQVRFRD0xXT1cIkRJU1BMQVlfVFlQRV9QRVJNQU5FTlRfVVNFUl9JTklUSUFURURcIixkW2QuRElTUExBWV9UWVBFX1BFUk1BTkVOVF9TWVNURU09Ml09XCJESVNQTEFZX1RZUEVfUEVSTUFORU5UX1NZU1RFTVwiLGRbZC5ESVNQTEFZX1RZUEVfVE9HR0xFQUJMRT0zXT1cIkRJU1BMQVlfVFlQRV9UT0dHTEVBQkxFXCIsZFtkLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwodT10Lkludml0ZUxpbmtTdGF0dXNNZXNzYWdlX0ludml0ZUxpbmtTdGF0dXN8fCh0Lkludml0ZUxpbmtTdGF0dXNNZXNzYWdlX0ludml0ZUxpbmtTdGF0dXM9e30pKVt1LklOVklURV9MSU5LX1NUQVRVU19VTlNFVD0wXT1cIklOVklURV9MSU5LX1NUQVRVU19VTlNFVFwiLHVbdS5JTlZJVEVfTElOS19TVEFUVVNfQ1JFQVRFRD0xXT1cIklOVklURV9MSU5LX1NUQVRVU19DUkVBVEVEXCIsdVt1LklOVklURV9MSU5LX1NUQVRVU19ERUxFVEVEPTJdPVwiSU5WSVRFX0xJTktfU1RBVFVTX0RFTEVURURcIix1W3UuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLChsPXQuU3RyZWFrU3RhdHVzTWVzc2FnZV9TdHJlYWtTdGF0dXN8fCh0LlN0cmVha1N0YXR1c01lc3NhZ2VfU3RyZWFrU3RhdHVzPXt9KSlbbC5TVFJFQUtfU1RBVFVTX1VOU0VUPTBdPVwiU1RSRUFLX1NUQVRVU19VTlNFVFwiLGxbbC5TVFJFQUtfU1RBVFVTX1NUQVJUPTFdPVwiU1RSRUFLX1NUQVRVU19TVEFSVFwiLGxbbC5TVFJFQUtfU1RBVFVTX0VORD0yXT1cIlNUUkVBS19TVEFUVVNfRU5EXCIsbFtsLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0LlN0YXR1c01lc3NhZ2U9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cInNjcmVlbkNhcHR1cmVcIj09PWUuc3RhdHVzPy4kY2FzZSYmdC5TY3JlZW5DYXB0dXJlU3RhdHVzTWVzc2FnZS5lbmNvZGUoZS5zdGF0dXMuc2NyZWVuQ2FwdHVyZSxuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSxcImNhbGxpbmdTdGF0dXNcIj09PWUuc3RhdHVzPy4kY2FzZSYmdC5DYWxsaW5nU3RhdHVzTWVzc2FnZS5lbmNvZGUoZS5zdGF0dXMuY2FsbGluZ1N0YXR1cyxuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSxcInBhcnRpY2lwYW50Q2hhbmdlXCI9PT1lLnN0YXR1cz8uJGNhc2UmJnQuUGFydGljaXBhbnRDaGFuZ2VTdGF0dXNNZXNzYWdlLmVuY29kZShlLnN0YXR1cy5wYXJ0aWNpcGFudENoYW5nZSxuLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSxcIm5hbWVTdGF0dXNDaGFuZ2VcIj09PWUuc3RhdHVzPy4kY2FzZSYmdC5OYW1lQ2hhbmdlU3RhdHVzTWVzc2FnZS5lbmNvZGUoZS5zdGF0dXMubmFtZVN0YXR1c0NoYW5nZSxuLnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKSxcIm1lc3NhZ2VFcmFzZVwiPT09ZS5zdGF0dXM/LiRjYXNlJiZ0Lk1lc3NhZ2VFcmFzZVN0YXR1c01lc3NhZ2UuZW5jb2RlKGUuc3RhdHVzLm1lc3NhZ2VFcmFzZSxuLnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKSxcImdyb3VwQ2hhdENyZWF0ZWRcIj09PWUuc3RhdHVzPy4kY2FzZSYmdC5Hcm91cENoYXRDcmVhdGVkU3RhdHVzTWVzc2FnZS5lbmNvZGUoZS5zdGF0dXMuZ3JvdXBDaGF0Q3JlYXRlZCxuLnVpbnQzMig1MCkuZm9yaygpKS5sZGVsaW0oKSxcInNhdmVUb0NhbWVyYVJvbGxcIj09PWUuc3RhdHVzPy4kY2FzZSYmdC5TYXZlVG9DYW1lcmFSb2xsU3RhdHVzTWVzc2FnZS5lbmNvZGUoZS5zdGF0dXMuc2F2ZVRvQ2FtZXJhUm9sbCxuLnVpbnQzMig1OCkuZm9yaygpKS5sZGVsaW0oKSxcImNoYW5nZUNvbnZlcnNhdGlvblJldGVudGlvblBvbGljeVwiPT09ZS5zdGF0dXM/LiRjYXNlJiZ0LkNoYW5nZUNvbnZlcnNhdGlvblJldGVudGlvblBvbGljeVN0YXR1c01lc3NhZ2UuZW5jb2RlKGUuc3RhdHVzLmNoYW5nZUNvbnZlcnNhdGlvblJldGVudGlvblBvbGljeSxuLnVpbnQzMig2NikuZm9yaygpKS5sZGVsaW0oKSxcImdhbWVDbG9zZWRcIj09PWUuc3RhdHVzPy4kY2FzZSYmdC5HYW1lQ2xvc2VkU3RhdHVzTWVzc2FnZS5lbmNvZGUoZS5zdGF0dXMuZ2FtZUNsb3NlZCxuLnVpbnQzMig3NCkuZm9yaygpKS5sZGVsaW0oKSxcImludml0ZUxpbmtcIj09PWUuc3RhdHVzPy4kY2FzZSYmdC5JbnZpdGVMaW5rU3RhdHVzTWVzc2FnZS5lbmNvZGUoZS5zdGF0dXMuaW52aXRlTGluayxuLnVpbnQzMig4MikuZm9yaygpKS5sZGVsaW0oKSxcImdyb3VwSW52aXRlU3RpY2tlckpvaW5UZXh0UHJvbXB0XCI9PT1lLnN0YXR1cz8uJGNhc2UmJnQuR3JvdXBJbnZpdGVTdGlja2VySm9pblRleHRQcm9tcHRTdGF0dXNNZXNzYWdlLmVuY29kZShlLnN0YXR1cy5ncm91cEludml0ZVN0aWNrZXJKb2luVGV4dFByb21wdCxuLnVpbnQzMig5MCkuZm9yaygpKS5sZGVsaW0oKSxcImNhbnZhc1VwZGF0ZVwiPT09ZS5zdGF0dXM/LiRjYXNlJiZ0LkNhbnZhc0N1c3RvbVVwZGF0ZVN0YXR1c01lc3NhZ2UuZW5jb2RlKGUuc3RhdHVzLmNhbnZhc1VwZGF0ZSxuLnVpbnQzMig5OCkuZm9yaygpKS5sZGVsaW0oKSxcImxpdmVMb2NhdGlvblRlcm1pbmF0ZWRcIj09PWUuc3RhdHVzPy4kY2FzZSYmdC5MaXZlTG9jYXRpb25TaGFyZVRlcm1pbmF0ZWRTdGF0dXNNZXNzYWdlLmVuY29kZShlLnN0YXR1cy5saXZlTG9jYXRpb25UZXJtaW5hdGVkLG4udWludDMyKDEwNikuZm9yaygpKS5sZGVsaW0oKSxcImluTXlDb250YWN0c1wiPT09ZS5zdGF0dXM/LiRjYXNlJiZ0LkluTXlDb250YWN0c1N0YXR1c01lc3NhZ2UuZW5jb2RlKGUuc3RhdHVzLmluTXlDb250YWN0cyxuLnVpbnQzMigxMTQpLmZvcmsoKSkubGRlbGltKCksXCJhY2NlcHRGYW1pbHlDZW50ZXJJbnZpdGVcIj09PWUuc3RhdHVzPy4kY2FzZSYmdC5BY2NlcHRGYW1pbHlDZW50ZXJJbnZpdGVTdGF0dXNNZXNzYWdlLmVuY29kZShlLnN0YXR1cy5hY2NlcHRGYW1pbHlDZW50ZXJJbnZpdGUsbi51aW50MzIoMTIyKS5mb3JrKCkpLmxkZWxpbSgpLFwibGVhdmVGYW1pbHlDZW50ZXJcIj09PWUuc3RhdHVzPy4kY2FzZSYmdC5MZWF2ZUZhbWlseUNlbnRlclN0YXR1c01lc3NhZ2UuZW5jb2RlKGUuc3RhdHVzLmxlYXZlRmFtaWx5Q2VudGVyLG4udWludDMyKDEzMCkuZm9yaygpKS5sZGVsaW0oKSxcImR3ZWJVcHNlbGxcIj09PWUuc3RhdHVzPy4kY2FzZSYmdC5EV2ViVXBzZWxsU3RhdHVzTWVzc2FnZS5lbmNvZGUoZS5zdGF0dXMuZHdlYlVwc2VsbCxuLnVpbnQzMigxMzgpLmZvcmsoKSkubGRlbGltKCksXCJxdW90ZVJlcGx5U2hhcmVcIj09PWUuc3RhdHVzPy4kY2FzZSYmdC5RdW90ZVJlcGx5U2hhcmVTdGF0dXNNZXNzYWdlLmVuY29kZShlLnN0YXR1cy5xdW90ZVJlcGx5U2hhcmUsbi51aW50MzIoMTQ2KS5mb3JrKCkpLmxkZWxpbSgpLFwidXBkYXRlQ2hhdFdhbGxwYXBlclN0YXR1c01lc3NhZ2VcIj09PWUuc3RhdHVzPy4kY2FzZSYmdC5VcGRhdGVDaGF0V2FsbHBhcGVyU3RhdHVzTWVzc2FnZS5lbmNvZGUoZS5zdGF0dXMudXBkYXRlQ2hhdFdhbGxwYXBlclN0YXR1c01lc3NhZ2Usbi51aW50MzIoMTU0KS5mb3JrKCkpLmxkZWxpbSgpLFwicGx1c0dpZnRcIj09PWUuc3RhdHVzPy4kY2FzZSYmdC5QbHVzR2lmdFN0YXR1c01lc3NhZ2UuZW5jb2RlKGUuc3RhdHVzLnBsdXNHaWZ0LG4udWludDMyKDE2MikuZm9yaygpKS5sZGVsaW0oKSxcInN0cmVha1wiPT09ZS5zdGF0dXM/LiRjYXNlJiZ0LlN0cmVha1N0YXR1c01lc3NhZ2UuZW5jb2RlKGUuc3RhdHVzLnN0cmVhayxuLnVpbnQzMigxNzApLmZvcmsoKSkubGRlbGltKCksXCJtZXJsaW5XZWxjb21lXCI9PT1lLnN0YXR1cz8uJGNhc2UmJnQuTWVybGluV2VsY29tZVN0YXR1c01lc3NhZ2UuZW5jb2RlKGUuc3RhdHVzLm1lcmxpbldlbGNvbWUsbi51aW50MzIoMTc4KS5mb3JrKCkpLmxkZWxpbSgpLFwibGl2ZUxvY2F0aW9uR3JvdXBNZXNzYWdlXCI9PT1lLnN0YXR1cz8uJGNhc2UmJnQuTGl2ZUxvY2F0aW9uR3JvdXBTaGFyZVN0YXR1c01lc3NhZ2UuZW5jb2RlKGUuc3RhdHVzLmxpdmVMb2NhdGlvbkdyb3VwTWVzc2FnZSxuLnVpbnQzMigxODYpLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXtzdGF0dXM6dm9pZCAwfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5zdGF0dXM9eyRjYXNlOlwic2NyZWVuQ2FwdHVyZVwiLHNjcmVlbkNhcHR1cmU6dC5TY3JlZW5DYXB0dXJlU3RhdHVzTWVzc2FnZS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAyOm8uc3RhdHVzPXskY2FzZTpcImNhbGxpbmdTdGF0dXNcIixjYWxsaW5nU3RhdHVzOnQuQ2FsbGluZ1N0YXR1c01lc3NhZ2UuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMzpvLnN0YXR1cz17JGNhc2U6XCJwYXJ0aWNpcGFudENoYW5nZVwiLHBhcnRpY2lwYW50Q2hhbmdlOnQuUGFydGljaXBhbnRDaGFuZ2VTdGF0dXNNZXNzYWdlLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDQ6by5zdGF0dXM9eyRjYXNlOlwibmFtZVN0YXR1c0NoYW5nZVwiLG5hbWVTdGF0dXNDaGFuZ2U6dC5OYW1lQ2hhbmdlU3RhdHVzTWVzc2FnZS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA1Om8uc3RhdHVzPXskY2FzZTpcIm1lc3NhZ2VFcmFzZVwiLG1lc3NhZ2VFcmFzZTp0Lk1lc3NhZ2VFcmFzZVN0YXR1c01lc3NhZ2UuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgNjpvLnN0YXR1cz17JGNhc2U6XCJncm91cENoYXRDcmVhdGVkXCIsZ3JvdXBDaGF0Q3JlYXRlZDp0Lkdyb3VwQ2hhdENyZWF0ZWRTdGF0dXNNZXNzYWdlLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDc6by5zdGF0dXM9eyRjYXNlOlwic2F2ZVRvQ2FtZXJhUm9sbFwiLHNhdmVUb0NhbWVyYVJvbGw6dC5TYXZlVG9DYW1lcmFSb2xsU3RhdHVzTWVzc2FnZS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA4Om8uc3RhdHVzPXskY2FzZTpcImNoYW5nZUNvbnZlcnNhdGlvblJldGVudGlvblBvbGljeVwiLGNoYW5nZUNvbnZlcnNhdGlvblJldGVudGlvblBvbGljeTp0LkNoYW5nZUNvbnZlcnNhdGlvblJldGVudGlvblBvbGljeVN0YXR1c01lc3NhZ2UuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgOTpvLnN0YXR1cz17JGNhc2U6XCJnYW1lQ2xvc2VkXCIsZ2FtZUNsb3NlZDp0LkdhbWVDbG9zZWRTdGF0dXNNZXNzYWdlLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDEwOm8uc3RhdHVzPXskY2FzZTpcImludml0ZUxpbmtcIixpbnZpdGVMaW5rOnQuSW52aXRlTGlua1N0YXR1c01lc3NhZ2UuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMTE6by5zdGF0dXM9eyRjYXNlOlwiZ3JvdXBJbnZpdGVTdGlja2VySm9pblRleHRQcm9tcHRcIixncm91cEludml0ZVN0aWNrZXJKb2luVGV4dFByb21wdDp0Lkdyb3VwSW52aXRlU3RpY2tlckpvaW5UZXh0UHJvbXB0U3RhdHVzTWVzc2FnZS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAxMjpvLnN0YXR1cz17JGNhc2U6XCJjYW52YXNVcGRhdGVcIixjYW52YXNVcGRhdGU6dC5DYW52YXNDdXN0b21VcGRhdGVTdGF0dXNNZXNzYWdlLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDEzOm8uc3RhdHVzPXskY2FzZTpcImxpdmVMb2NhdGlvblRlcm1pbmF0ZWRcIixsaXZlTG9jYXRpb25UZXJtaW5hdGVkOnQuTGl2ZUxvY2F0aW9uU2hhcmVUZXJtaW5hdGVkU3RhdHVzTWVzc2FnZS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAxNDpvLnN0YXR1cz17JGNhc2U6XCJpbk15Q29udGFjdHNcIixpbk15Q29udGFjdHM6dC5Jbk15Q29udGFjdHNTdGF0dXNNZXNzYWdlLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDE1Om8uc3RhdHVzPXskY2FzZTpcImFjY2VwdEZhbWlseUNlbnRlckludml0ZVwiLGFjY2VwdEZhbWlseUNlbnRlckludml0ZTp0LkFjY2VwdEZhbWlseUNlbnRlckludml0ZVN0YXR1c01lc3NhZ2UuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMTY6by5zdGF0dXM9eyRjYXNlOlwibGVhdmVGYW1pbHlDZW50ZXJcIixsZWF2ZUZhbWlseUNlbnRlcjp0LkxlYXZlRmFtaWx5Q2VudGVyU3RhdHVzTWVzc2FnZS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAxNzpvLnN0YXR1cz17JGNhc2U6XCJkd2ViVXBzZWxsXCIsZHdlYlVwc2VsbDp0LkRXZWJVcHNlbGxTdGF0dXNNZXNzYWdlLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDE4Om8uc3RhdHVzPXskY2FzZTpcInF1b3RlUmVwbHlTaGFyZVwiLHF1b3RlUmVwbHlTaGFyZTp0LlF1b3RlUmVwbHlTaGFyZVN0YXR1c01lc3NhZ2UuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMTk6by5zdGF0dXM9eyRjYXNlOlwidXBkYXRlQ2hhdFdhbGxwYXBlclN0YXR1c01lc3NhZ2VcIix1cGRhdGVDaGF0V2FsbHBhcGVyU3RhdHVzTWVzc2FnZTp0LlVwZGF0ZUNoYXRXYWxscGFwZXJTdGF0dXNNZXNzYWdlLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDIwOm8uc3RhdHVzPXskY2FzZTpcInBsdXNHaWZ0XCIscGx1c0dpZnQ6dC5QbHVzR2lmdFN0YXR1c01lc3NhZ2UuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMjE6by5zdGF0dXM9eyRjYXNlOlwic3RyZWFrXCIsc3RyZWFrOnQuU3RyZWFrU3RhdHVzTWVzc2FnZS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAyMjpvLnN0YXR1cz17JGNhc2U6XCJtZXJsaW5XZWxjb21lXCIsbWVybGluV2VsY29tZTp0Lk1lcmxpbldlbGNvbWVTdGF0dXNNZXNzYWdlLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDIzOm8uc3RhdHVzPXskY2FzZTpcImxpdmVMb2NhdGlvbkdyb3VwTWVzc2FnZVwiLGxpdmVMb2NhdGlvbkdyb3VwTWVzc2FnZTp0LkxpdmVMb2NhdGlvbkdyb3VwU2hhcmVTdGF0dXNNZXNzYWdlLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e3N0YXR1czp2b2lkIDB9O3JldHVyblwic2NyZWVuQ2FwdHVyZVwiPT09ZS5zdGF0dXM/LiRjYXNlJiZ2b2lkIDAhPT1lLnN0YXR1cz8uc2NyZWVuQ2FwdHVyZSYmbnVsbCE9PWUuc3RhdHVzPy5zY3JlZW5DYXB0dXJlJiYobi5zdGF0dXM9eyRjYXNlOlwic2NyZWVuQ2FwdHVyZVwiLHNjcmVlbkNhcHR1cmU6dC5TY3JlZW5DYXB0dXJlU3RhdHVzTWVzc2FnZS5mcm9tUGFydGlhbChlLnN0YXR1cy5zY3JlZW5DYXB0dXJlKX0pLFwiY2FsbGluZ1N0YXR1c1wiPT09ZS5zdGF0dXM/LiRjYXNlJiZ2b2lkIDAhPT1lLnN0YXR1cz8uY2FsbGluZ1N0YXR1cyYmbnVsbCE9PWUuc3RhdHVzPy5jYWxsaW5nU3RhdHVzJiYobi5zdGF0dXM9eyRjYXNlOlwiY2FsbGluZ1N0YXR1c1wiLGNhbGxpbmdTdGF0dXM6dC5DYWxsaW5nU3RhdHVzTWVzc2FnZS5mcm9tUGFydGlhbChlLnN0YXR1cy5jYWxsaW5nU3RhdHVzKX0pLFwicGFydGljaXBhbnRDaGFuZ2VcIj09PWUuc3RhdHVzPy4kY2FzZSYmdm9pZCAwIT09ZS5zdGF0dXM/LnBhcnRpY2lwYW50Q2hhbmdlJiZudWxsIT09ZS5zdGF0dXM/LnBhcnRpY2lwYW50Q2hhbmdlJiYobi5zdGF0dXM9eyRjYXNlOlwicGFydGljaXBhbnRDaGFuZ2VcIixwYXJ0aWNpcGFudENoYW5nZTp0LlBhcnRpY2lwYW50Q2hhbmdlU3RhdHVzTWVzc2FnZS5mcm9tUGFydGlhbChlLnN0YXR1cy5wYXJ0aWNpcGFudENoYW5nZSl9KSxcIm5hbWVTdGF0dXNDaGFuZ2VcIj09PWUuc3RhdHVzPy4kY2FzZSYmdm9pZCAwIT09ZS5zdGF0dXM/Lm5hbWVTdGF0dXNDaGFuZ2UmJm51bGwhPT1lLnN0YXR1cz8ubmFtZVN0YXR1c0NoYW5nZSYmKG4uc3RhdHVzPXskY2FzZTpcIm5hbWVTdGF0dXNDaGFuZ2VcIixuYW1lU3RhdHVzQ2hhbmdlOnQuTmFtZUNoYW5nZVN0YXR1c01lc3NhZ2UuZnJvbVBhcnRpYWwoZS5zdGF0dXMubmFtZVN0YXR1c0NoYW5nZSl9KSxcIm1lc3NhZ2VFcmFzZVwiPT09ZS5zdGF0dXM/LiRjYXNlJiZ2b2lkIDAhPT1lLnN0YXR1cz8ubWVzc2FnZUVyYXNlJiZudWxsIT09ZS5zdGF0dXM/Lm1lc3NhZ2VFcmFzZSYmKG4uc3RhdHVzPXskY2FzZTpcIm1lc3NhZ2VFcmFzZVwiLG1lc3NhZ2VFcmFzZTp0Lk1lc3NhZ2VFcmFzZVN0YXR1c01lc3NhZ2UuZnJvbVBhcnRpYWwoZS5zdGF0dXMubWVzc2FnZUVyYXNlKX0pLFwiZ3JvdXBDaGF0Q3JlYXRlZFwiPT09ZS5zdGF0dXM/LiRjYXNlJiZ2b2lkIDAhPT1lLnN0YXR1cz8uZ3JvdXBDaGF0Q3JlYXRlZCYmbnVsbCE9PWUuc3RhdHVzPy5ncm91cENoYXRDcmVhdGVkJiYobi5zdGF0dXM9eyRjYXNlOlwiZ3JvdXBDaGF0Q3JlYXRlZFwiLGdyb3VwQ2hhdENyZWF0ZWQ6dC5Hcm91cENoYXRDcmVhdGVkU3RhdHVzTWVzc2FnZS5mcm9tUGFydGlhbChlLnN0YXR1cy5ncm91cENoYXRDcmVhdGVkKX0pLFwic2F2ZVRvQ2FtZXJhUm9sbFwiPT09ZS5zdGF0dXM/LiRjYXNlJiZ2b2lkIDAhPT1lLnN0YXR1cz8uc2F2ZVRvQ2FtZXJhUm9sbCYmbnVsbCE9PWUuc3RhdHVzPy5zYXZlVG9DYW1lcmFSb2xsJiYobi5zdGF0dXM9eyRjYXNlOlwic2F2ZVRvQ2FtZXJhUm9sbFwiLHNhdmVUb0NhbWVyYVJvbGw6dC5TYXZlVG9DYW1lcmFSb2xsU3RhdHVzTWVzc2FnZS5mcm9tUGFydGlhbChlLnN0YXR1cy5zYXZlVG9DYW1lcmFSb2xsKX0pLFwiY2hhbmdlQ29udmVyc2F0aW9uUmV0ZW50aW9uUG9saWN5XCI9PT1lLnN0YXR1cz8uJGNhc2UmJnZvaWQgMCE9PWUuc3RhdHVzPy5jaGFuZ2VDb252ZXJzYXRpb25SZXRlbnRpb25Qb2xpY3kmJm51bGwhPT1lLnN0YXR1cz8uY2hhbmdlQ29udmVyc2F0aW9uUmV0ZW50aW9uUG9saWN5JiYobi5zdGF0dXM9eyRjYXNlOlwiY2hhbmdlQ29udmVyc2F0aW9uUmV0ZW50aW9uUG9saWN5XCIsY2hhbmdlQ29udmVyc2F0aW9uUmV0ZW50aW9uUG9saWN5OnQuQ2hhbmdlQ29udmVyc2F0aW9uUmV0ZW50aW9uUG9saWN5U3RhdHVzTWVzc2FnZS5mcm9tUGFydGlhbChlLnN0YXR1cy5jaGFuZ2VDb252ZXJzYXRpb25SZXRlbnRpb25Qb2xpY3kpfSksXCJnYW1lQ2xvc2VkXCI9PT1lLnN0YXR1cz8uJGNhc2UmJnZvaWQgMCE9PWUuc3RhdHVzPy5nYW1lQ2xvc2VkJiZudWxsIT09ZS5zdGF0dXM/LmdhbWVDbG9zZWQmJihuLnN0YXR1cz17JGNhc2U6XCJnYW1lQ2xvc2VkXCIsZ2FtZUNsb3NlZDp0LkdhbWVDbG9zZWRTdGF0dXNNZXNzYWdlLmZyb21QYXJ0aWFsKGUuc3RhdHVzLmdhbWVDbG9zZWQpfSksXCJpbnZpdGVMaW5rXCI9PT1lLnN0YXR1cz8uJGNhc2UmJnZvaWQgMCE9PWUuc3RhdHVzPy5pbnZpdGVMaW5rJiZudWxsIT09ZS5zdGF0dXM/Lmludml0ZUxpbmsmJihuLnN0YXR1cz17JGNhc2U6XCJpbnZpdGVMaW5rXCIsaW52aXRlTGluazp0Lkludml0ZUxpbmtTdGF0dXNNZXNzYWdlLmZyb21QYXJ0aWFsKGUuc3RhdHVzLmludml0ZUxpbmspfSksXCJncm91cEludml0ZVN0aWNrZXJKb2luVGV4dFByb21wdFwiPT09ZS5zdGF0dXM/LiRjYXNlJiZ2b2lkIDAhPT1lLnN0YXR1cz8uZ3JvdXBJbnZpdGVTdGlja2VySm9pblRleHRQcm9tcHQmJm51bGwhPT1lLnN0YXR1cz8uZ3JvdXBJbnZpdGVTdGlja2VySm9pblRleHRQcm9tcHQmJihuLnN0YXR1cz17JGNhc2U6XCJncm91cEludml0ZVN0aWNrZXJKb2luVGV4dFByb21wdFwiLGdyb3VwSW52aXRlU3RpY2tlckpvaW5UZXh0UHJvbXB0OnQuR3JvdXBJbnZpdGVTdGlja2VySm9pblRleHRQcm9tcHRTdGF0dXNNZXNzYWdlLmZyb21QYXJ0aWFsKGUuc3RhdHVzLmdyb3VwSW52aXRlU3RpY2tlckpvaW5UZXh0UHJvbXB0KX0pLFwiY2FudmFzVXBkYXRlXCI9PT1lLnN0YXR1cz8uJGNhc2UmJnZvaWQgMCE9PWUuc3RhdHVzPy5jYW52YXNVcGRhdGUmJm51bGwhPT1lLnN0YXR1cz8uY2FudmFzVXBkYXRlJiYobi5zdGF0dXM9eyRjYXNlOlwiY2FudmFzVXBkYXRlXCIsY2FudmFzVXBkYXRlOnQuQ2FudmFzQ3VzdG9tVXBkYXRlU3RhdHVzTWVzc2FnZS5mcm9tUGFydGlhbChlLnN0YXR1cy5jYW52YXNVcGRhdGUpfSksXCJsaXZlTG9jYXRpb25UZXJtaW5hdGVkXCI9PT1lLnN0YXR1cz8uJGNhc2UmJnZvaWQgMCE9PWUuc3RhdHVzPy5saXZlTG9jYXRpb25UZXJtaW5hdGVkJiZudWxsIT09ZS5zdGF0dXM/LmxpdmVMb2NhdGlvblRlcm1pbmF0ZWQmJihuLnN0YXR1cz17JGNhc2U6XCJsaXZlTG9jYXRpb25UZXJtaW5hdGVkXCIsbGl2ZUxvY2F0aW9uVGVybWluYXRlZDp0LkxpdmVMb2NhdGlvblNoYXJlVGVybWluYXRlZFN0YXR1c01lc3NhZ2UuZnJvbVBhcnRpYWwoZS5zdGF0dXMubGl2ZUxvY2F0aW9uVGVybWluYXRlZCl9KSxcImluTXlDb250YWN0c1wiPT09ZS5zdGF0dXM/LiRjYXNlJiZ2b2lkIDAhPT1lLnN0YXR1cz8uaW5NeUNvbnRhY3RzJiZudWxsIT09ZS5zdGF0dXM/LmluTXlDb250YWN0cyYmKG4uc3RhdHVzPXskY2FzZTpcImluTXlDb250YWN0c1wiLGluTXlDb250YWN0czp0LkluTXlDb250YWN0c1N0YXR1c01lc3NhZ2UuZnJvbVBhcnRpYWwoZS5zdGF0dXMuaW5NeUNvbnRhY3RzKX0pLFwiYWNjZXB0RmFtaWx5Q2VudGVySW52aXRlXCI9PT1lLnN0YXR1cz8uJGNhc2UmJnZvaWQgMCE9PWUuc3RhdHVzPy5hY2NlcHRGYW1pbHlDZW50ZXJJbnZpdGUmJm51bGwhPT1lLnN0YXR1cz8uYWNjZXB0RmFtaWx5Q2VudGVySW52aXRlJiYobi5zdGF0dXM9eyRjYXNlOlwiYWNjZXB0RmFtaWx5Q2VudGVySW52aXRlXCIsYWNjZXB0RmFtaWx5Q2VudGVySW52aXRlOnQuQWNjZXB0RmFtaWx5Q2VudGVySW52aXRlU3RhdHVzTWVzc2FnZS5mcm9tUGFydGlhbChlLnN0YXR1cy5hY2NlcHRGYW1pbHlDZW50ZXJJbnZpdGUpfSksXCJsZWF2ZUZhbWlseUNlbnRlclwiPT09ZS5zdGF0dXM/LiRjYXNlJiZ2b2lkIDAhPT1lLnN0YXR1cz8ubGVhdmVGYW1pbHlDZW50ZXImJm51bGwhPT1lLnN0YXR1cz8ubGVhdmVGYW1pbHlDZW50ZXImJihuLnN0YXR1cz17JGNhc2U6XCJsZWF2ZUZhbWlseUNlbnRlclwiLGxlYXZlRmFtaWx5Q2VudGVyOnQuTGVhdmVGYW1pbHlDZW50ZXJTdGF0dXNNZXNzYWdlLmZyb21QYXJ0aWFsKGUuc3RhdHVzLmxlYXZlRmFtaWx5Q2VudGVyKX0pLFwiZHdlYlVwc2VsbFwiPT09ZS5zdGF0dXM/LiRjYXNlJiZ2b2lkIDAhPT1lLnN0YXR1cz8uZHdlYlVwc2VsbCYmbnVsbCE9PWUuc3RhdHVzPy5kd2ViVXBzZWxsJiYobi5zdGF0dXM9eyRjYXNlOlwiZHdlYlVwc2VsbFwiLGR3ZWJVcHNlbGw6dC5EV2ViVXBzZWxsU3RhdHVzTWVzc2FnZS5mcm9tUGFydGlhbChlLnN0YXR1cy5kd2ViVXBzZWxsKX0pLFwicXVvdGVSZXBseVNoYXJlXCI9PT1lLnN0YXR1cz8uJGNhc2UmJnZvaWQgMCE9PWUuc3RhdHVzPy5xdW90ZVJlcGx5U2hhcmUmJm51bGwhPT1lLnN0YXR1cz8ucXVvdGVSZXBseVNoYXJlJiYobi5zdGF0dXM9eyRjYXNlOlwicXVvdGVSZXBseVNoYXJlXCIscXVvdGVSZXBseVNoYXJlOnQuUXVvdGVSZXBseVNoYXJlU3RhdHVzTWVzc2FnZS5mcm9tUGFydGlhbChlLnN0YXR1cy5xdW90ZVJlcGx5U2hhcmUpfSksXCJ1cGRhdGVDaGF0V2FsbHBhcGVyU3RhdHVzTWVzc2FnZVwiPT09ZS5zdGF0dXM/LiRjYXNlJiZ2b2lkIDAhPT1lLnN0YXR1cz8udXBkYXRlQ2hhdFdhbGxwYXBlclN0YXR1c01lc3NhZ2UmJm51bGwhPT1lLnN0YXR1cz8udXBkYXRlQ2hhdFdhbGxwYXBlclN0YXR1c01lc3NhZ2UmJihuLnN0YXR1cz17JGNhc2U6XCJ1cGRhdGVDaGF0V2FsbHBhcGVyU3RhdHVzTWVzc2FnZVwiLHVwZGF0ZUNoYXRXYWxscGFwZXJTdGF0dXNNZXNzYWdlOnQuVXBkYXRlQ2hhdFdhbGxwYXBlclN0YXR1c01lc3NhZ2UuZnJvbVBhcnRpYWwoZS5zdGF0dXMudXBkYXRlQ2hhdFdhbGxwYXBlclN0YXR1c01lc3NhZ2UpfSksXCJwbHVzR2lmdFwiPT09ZS5zdGF0dXM/LiRjYXNlJiZ2b2lkIDAhPT1lLnN0YXR1cz8ucGx1c0dpZnQmJm51bGwhPT1lLnN0YXR1cz8ucGx1c0dpZnQmJihuLnN0YXR1cz17JGNhc2U6XCJwbHVzR2lmdFwiLHBsdXNHaWZ0OnQuUGx1c0dpZnRTdGF0dXNNZXNzYWdlLmZyb21QYXJ0aWFsKGUuc3RhdHVzLnBsdXNHaWZ0KX0pLFwic3RyZWFrXCI9PT1lLnN0YXR1cz8uJGNhc2UmJnZvaWQgMCE9PWUuc3RhdHVzPy5zdHJlYWsmJm51bGwhPT1lLnN0YXR1cz8uc3RyZWFrJiYobi5zdGF0dXM9eyRjYXNlOlwic3RyZWFrXCIsc3RyZWFrOnQuU3RyZWFrU3RhdHVzTWVzc2FnZS5mcm9tUGFydGlhbChlLnN0YXR1cy5zdHJlYWspfSksXCJtZXJsaW5XZWxjb21lXCI9PT1lLnN0YXR1cz8uJGNhc2UmJnZvaWQgMCE9PWUuc3RhdHVzPy5tZXJsaW5XZWxjb21lJiZudWxsIT09ZS5zdGF0dXM/Lm1lcmxpbldlbGNvbWUmJihuLnN0YXR1cz17JGNhc2U6XCJtZXJsaW5XZWxjb21lXCIsbWVybGluV2VsY29tZTp0Lk1lcmxpbldlbGNvbWVTdGF0dXNNZXNzYWdlLmZyb21QYXJ0aWFsKGUuc3RhdHVzLm1lcmxpbldlbGNvbWUpfSksXCJsaXZlTG9jYXRpb25Hcm91cE1lc3NhZ2VcIj09PWUuc3RhdHVzPy4kY2FzZSYmdm9pZCAwIT09ZS5zdGF0dXM/LmxpdmVMb2NhdGlvbkdyb3VwTWVzc2FnZSYmbnVsbCE9PWUuc3RhdHVzPy5saXZlTG9jYXRpb25Hcm91cE1lc3NhZ2UmJihuLnN0YXR1cz17JGNhc2U6XCJsaXZlTG9jYXRpb25Hcm91cE1lc3NhZ2VcIixsaXZlTG9jYXRpb25Hcm91cE1lc3NhZ2U6dC5MaXZlTG9jYXRpb25Hcm91cFNoYXJlU3RhdHVzTWVzc2FnZS5mcm9tUGFydGlhbChlLnN0YXR1cy5saXZlTG9jYXRpb25Hcm91cE1lc3NhZ2UpfSksbn19LHQuU2NyZWVuQ2FwdHVyZVN0YXR1c01lc3NhZ2U9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5jYXB0dXJpbmdVc2VyJiZvLlVVSUQuZW5jb2RlKGUuY2FwdHVyaW5nVXNlcix0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS5jYXB0dXJlVHlwZSYmdC51aW50MzIoMTYpLmludDMyKGUuY2FwdHVyZVR5cGUpLDAhPT1lLmNhcHR1cmVTb3VyY2UmJnQudWludDMyKDI0KS5pbnQzMihlLmNhcHR1cmVTb3VyY2UpLDAhPT1lLmNhcHR1cmluZ1VzZXJJbmZvJiZ0LnVpbnQzMigzMikuaW50MzIoZS5jYXB0dXJpbmdVc2VySW5mbyksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtjYXB0dXJpbmdVc2VyOnZvaWQgMCxjYXB0dXJlVHlwZTowLGNhcHR1cmVTb3VyY2U6MCxjYXB0dXJpbmdVc2VySW5mbzowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5jYXB0dXJpbmdVc2VyPW8uVVVJRC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDI6aS5jYXB0dXJlVHlwZT1uLmludDMyKCk7YnJlYWs7Y2FzZSAzOmkuY2FwdHVyZVNvdXJjZT1uLmludDMyKCk7YnJlYWs7Y2FzZSA0OmkuY2FwdHVyaW5nVXNlckluZm89bi5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17Y2FwdHVyaW5nVXNlcjp2b2lkIDAsY2FwdHVyZVR5cGU6MCxjYXB0dXJlU291cmNlOjAsY2FwdHVyaW5nVXNlckluZm86MH07cmV0dXJuIHQuY2FwdHVyaW5nVXNlcj12b2lkIDAhPT1lLmNhcHR1cmluZ1VzZXImJm51bGwhPT1lLmNhcHR1cmluZ1VzZXI/by5VVUlELmZyb21QYXJ0aWFsKGUuY2FwdHVyaW5nVXNlcik6dm9pZCAwLHQuY2FwdHVyZVR5cGU9ZS5jYXB0dXJlVHlwZT8/MCx0LmNhcHR1cmVTb3VyY2U9ZS5jYXB0dXJlU291cmNlPz8wLHQuY2FwdHVyaW5nVXNlckluZm89ZS5jYXB0dXJpbmdVc2VySW5mbz8/MCx0fX0sdC5QYXJ0aWNpcGFudENoYW5nZVN0YXR1c01lc3NhZ2U9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgciBvZiBlLnN0YXR1c0NoYW5nZXMpdC5QYXJ0aWNpcGFudENoYW5nZVN0YXR1c01lc3NhZ2VfRW50cnkuZW5jb2RlKHIsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIHZvaWQgMCE9PWUuaW5pdGlhdGluZ1VzZXJEZXByZWNhdGVkJiZvLlVVSUQuZW5jb2RlKGUuaW5pdGlhdGluZ1VzZXJEZXByZWNhdGVkLG4udWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuaW5pdGlhdGluZ1VzZXImJm8uVVVJRC5lbmNvZGUoZS5pbml0aWF0aW5nVXNlcixuLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGE9e3N0YXR1c0NoYW5nZXM6W10saW5pdGlhdGluZ1VzZXJEZXByZWNhdGVkOnZvaWQgMCxpbml0aWF0aW5nVXNlcjp2b2lkIDB9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLnN0YXR1c0NoYW5nZXMucHVzaCh0LlBhcnRpY2lwYW50Q2hhbmdlU3RhdHVzTWVzc2FnZV9FbnRyeS5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAyOmEuaW5pdGlhdGluZ1VzZXJEZXByZWNhdGVkPW8uVVVJRC5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDM6YS5pbml0aWF0aW5nVXNlcj1vLlVVSUQuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtzdGF0dXNDaGFuZ2VzOltdLGluaXRpYXRpbmdVc2VyRGVwcmVjYXRlZDp2b2lkIDAsaW5pdGlhdGluZ1VzZXI6dm9pZCAwfTtyZXR1cm4gbi5zdGF0dXNDaGFuZ2VzPWUuc3RhdHVzQ2hhbmdlcz8ubWFwKChlPT50LlBhcnRpY2lwYW50Q2hhbmdlU3RhdHVzTWVzc2FnZV9FbnRyeS5mcm9tUGFydGlhbChlKSkpfHxbXSxuLmluaXRpYXRpbmdVc2VyRGVwcmVjYXRlZD12b2lkIDAhPT1lLmluaXRpYXRpbmdVc2VyRGVwcmVjYXRlZCYmbnVsbCE9PWUuaW5pdGlhdGluZ1VzZXJEZXByZWNhdGVkP28uVVVJRC5mcm9tUGFydGlhbChlLmluaXRpYXRpbmdVc2VyRGVwcmVjYXRlZCk6dm9pZCAwLG4uaW5pdGlhdGluZ1VzZXI9dm9pZCAwIT09ZS5pbml0aWF0aW5nVXNlciYmbnVsbCE9PWUuaW5pdGlhdGluZ1VzZXI/by5VVUlELmZyb21QYXJ0aWFsKGUuaW5pdGlhdGluZ1VzZXIpOnZvaWQgMCxufX0sdC5QYXJ0aWNpcGFudENoYW5nZVN0YXR1c01lc3NhZ2VfRW50cnk9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5hZmZlY3RlZFVzZXImJm8uVVVJRC5lbmNvZGUoZS5hZmZlY3RlZFVzZXIsdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksMCE9PWUuc3RhdHVzQ2hhbmdlJiZ0LnVpbnQzMigxNikuaW50MzIoZS5zdGF0dXNDaGFuZ2UpLDAhPT1lLmNoYW5nZU9yaWdpbiYmdC51aW50MzIoMjQpLmludDMyKGUuY2hhbmdlT3JpZ2luKSwwIT09ZS5sZWF2ZVJlYXNvbiYmdC51aW50MzIoMzIpLmludDMyKGUubGVhdmVSZWFzb24pLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17YWZmZWN0ZWRVc2VyOnZvaWQgMCxzdGF0dXNDaGFuZ2U6MCxjaGFuZ2VPcmlnaW46MCxsZWF2ZVJlYXNvbjowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5hZmZlY3RlZFVzZXI9by5VVUlELmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMjppLnN0YXR1c0NoYW5nZT1uLmludDMyKCk7YnJlYWs7Y2FzZSAzOmkuY2hhbmdlT3JpZ2luPW4uaW50MzIoKTticmVhaztjYXNlIDQ6aS5sZWF2ZVJlYXNvbj1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXthZmZlY3RlZFVzZXI6dm9pZCAwLHN0YXR1c0NoYW5nZTowLGNoYW5nZU9yaWdpbjowLGxlYXZlUmVhc29uOjB9O3JldHVybiB0LmFmZmVjdGVkVXNlcj12b2lkIDAhPT1lLmFmZmVjdGVkVXNlciYmbnVsbCE9PWUuYWZmZWN0ZWRVc2VyP28uVVVJRC5mcm9tUGFydGlhbChlLmFmZmVjdGVkVXNlcik6dm9pZCAwLHQuc3RhdHVzQ2hhbmdlPWUuc3RhdHVzQ2hhbmdlPz8wLHQuY2hhbmdlT3JpZ2luPWUuY2hhbmdlT3JpZ2luPz8wLHQubGVhdmVSZWFzb249ZS5sZWF2ZVJlYXNvbj8/MCx0fX0sdC5DYWxsaW5nU3RhdHVzTWVzc2FnZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpOzAhPT1lLmNhbGxTdGF0dXMmJnQudWludDMyKDgpLmludDMyKGUuY2FsbFN0YXR1cyksMCE9PWUuY2FsbFR5cGUmJnQudWludDMyKDE2KS5pbnQzMihlLmNhbGxUeXBlKSx2b2lkIDAhPT1lLnVzZXJJZCYmby5VVUlELmVuY29kZShlLnVzZXJJZCx0LnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS5jYWxsRHVyYXRpb24mJnQudWludDMyKDMyKS51aW50MzIoZS5jYWxsRHVyYXRpb24pO2Zvcihjb25zdCBuIG9mIGUucGFydGljaXBhbnRzKW8uVVVJRC5lbmNvZGUobix0LnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtjYWxsU3RhdHVzOjAsY2FsbFR5cGU6MCx1c2VySWQ6dm9pZCAwLGNhbGxEdXJhdGlvbjowLHBhcnRpY2lwYW50czpbXX07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuY2FsbFN0YXR1cz1uLmludDMyKCk7YnJlYWs7Y2FzZSAyOmkuY2FsbFR5cGU9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMzppLnVzZXJJZD1vLlVVSUQuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSA0OmkuY2FsbER1cmF0aW9uPW4udWludDMyKCk7YnJlYWs7Y2FzZSA1OmkucGFydGljaXBhbnRzLnB1c2goby5VVUlELmRlY29kZShuLG4udWludDMyKCkpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2NhbGxTdGF0dXM6MCxjYWxsVHlwZTowLHVzZXJJZDp2b2lkIDAsY2FsbER1cmF0aW9uOjAscGFydGljaXBhbnRzOltdfTtyZXR1cm4gdC5jYWxsU3RhdHVzPWUuY2FsbFN0YXR1cz8/MCx0LmNhbGxUeXBlPWUuY2FsbFR5cGU/PzAsdC51c2VySWQ9dm9pZCAwIT09ZS51c2VySWQmJm51bGwhPT1lLnVzZXJJZD9vLlVVSUQuZnJvbVBhcnRpYWwoZS51c2VySWQpOnZvaWQgMCx0LmNhbGxEdXJhdGlvbj1lLmNhbGxEdXJhdGlvbj8/MCx0LnBhcnRpY2lwYW50cz1lLnBhcnRpY2lwYW50cz8ubWFwKChlPT5vLlVVSUQuZnJvbVBhcnRpYWwoZSkpKXx8W10sdH19LHQuTmFtZUNoYW5nZVN0YXR1c01lc3NhZ2U9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5pbml0aWF0aW5nVXNlcklkJiZvLlVVSUQuZW5jb2RlKGUuaW5pdGlhdGluZ1VzZXJJZCx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSxcIlwiIT09ZS5vbGROYW1lJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUub2xkTmFtZSksXCJcIiE9PWUubmV3TmFtZSYmdC51aW50MzIoMjYpLnN0cmluZyhlLm5ld05hbWUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17aW5pdGlhdGluZ1VzZXJJZDp2b2lkIDAsb2xkTmFtZTpcIlwiLG5ld05hbWU6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuaW5pdGlhdGluZ1VzZXJJZD1vLlVVSUQuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOmkub2xkTmFtZT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMzppLm5ld05hbWU9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2luaXRpYXRpbmdVc2VySWQ6dm9pZCAwLG9sZE5hbWU6XCJcIixuZXdOYW1lOlwiXCJ9O3JldHVybiB0LmluaXRpYXRpbmdVc2VySWQ9dm9pZCAwIT09ZS5pbml0aWF0aW5nVXNlcklkJiZudWxsIT09ZS5pbml0aWF0aW5nVXNlcklkP28uVVVJRC5mcm9tUGFydGlhbChlLmluaXRpYXRpbmdVc2VySWQpOnZvaWQgMCx0Lm9sZE5hbWU9ZS5vbGROYW1lPz9cIlwiLHQubmV3TmFtZT1lLm5ld05hbWU/P1wiXCIsdH19LHQuTWVzc2FnZUVyYXNlU3RhdHVzTWVzc2FnZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLnVzZXJJZCYmby5VVUlELmVuY29kZShlLnVzZXJJZCx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS5tZXNzYWdlVHlwZSYmdC51aW50MzIoMTYpLmludDMyKGUubWVzc2FnZVR5cGUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17dXNlcklkOnZvaWQgMCxtZXNzYWdlVHlwZTowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS51c2VySWQ9by5VVUlELmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMjppLm1lc3NhZ2VUeXBlPW4uaW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3VzZXJJZDp2b2lkIDAsbWVzc2FnZVR5cGU6MH07cmV0dXJuIHQudXNlcklkPXZvaWQgMCE9PWUudXNlcklkJiZudWxsIT09ZS51c2VySWQ/by5VVUlELmZyb21QYXJ0aWFsKGUudXNlcklkKTp2b2lkIDAsdC5tZXNzYWdlVHlwZT1lLm1lc3NhZ2VUeXBlPz8wLHR9fSx0Lkdyb3VwQ2hhdENyZWF0ZWRTdGF0dXNNZXNzYWdlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7dm9pZCAwIT09ZS5pbml0aWF0aW5nVXNlciYmby5VVUlELmVuY29kZShlLmluaXRpYXRpbmdVc2VyLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO2Zvcihjb25zdCBuIG9mIGUucGFydGljaXBhbnRzKW8uVVVJRC5lbmNvZGUobix0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm5cIlwiIT09ZS5ncm91cENoYXROYW1lJiZ0LnVpbnQzMigyNikuc3RyaW5nKGUuZ3JvdXBDaGF0TmFtZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtpbml0aWF0aW5nVXNlcjp2b2lkIDAscGFydGljaXBhbnRzOltdLGdyb3VwQ2hhdE5hbWU6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuaW5pdGlhdGluZ1VzZXI9by5VVUlELmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMjppLnBhcnRpY2lwYW50cy5wdXNoKG8uVVVJRC5kZWNvZGUobixuLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAzOmkuZ3JvdXBDaGF0TmFtZT1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17aW5pdGlhdGluZ1VzZXI6dm9pZCAwLHBhcnRpY2lwYW50czpbXSxncm91cENoYXROYW1lOlwiXCJ9O3JldHVybiB0LmluaXRpYXRpbmdVc2VyPXZvaWQgMCE9PWUuaW5pdGlhdGluZ1VzZXImJm51bGwhPT1lLmluaXRpYXRpbmdVc2VyP28uVVVJRC5mcm9tUGFydGlhbChlLmluaXRpYXRpbmdVc2VyKTp2b2lkIDAsdC5wYXJ0aWNpcGFudHM9ZS5wYXJ0aWNpcGFudHM/Lm1hcCgoZT0+by5VVUlELmZyb21QYXJ0aWFsKGUpKSl8fFtdLHQuZ3JvdXBDaGF0TmFtZT1lLmdyb3VwQ2hhdE5hbWU/P1wiXCIsdH19LHQuU2F2ZVRvQ2FtZXJhUm9sbFN0YXR1c01lc3NhZ2U9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTt2b2lkIDAhPT1lLnVzZXJJZCYmby5VVUlELmVuY29kZShlLnVzZXJJZCxuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSxcIjBcIiE9PWUubWVzc2FnZUlkJiZuLnVpbnQzMigxNikudWludDY0KGUubWVzc2FnZUlkKTtmb3IoY29uc3QgciBvZiBlLm1lZGlhVHlwZVRvQ291bnQpdC5NZWRpYVR5cGVUb0NvdW50LmVuY29kZShyLG4udWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiBufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGE9e3VzZXJJZDp2b2lkIDAsbWVzc2FnZUlkOlwiMFwiLG1lZGlhVHlwZVRvQ291bnQ6W119O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLnVzZXJJZD1vLlVVSUQuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOmEubWVzc2FnZUlkPWMoci51aW50NjQoKSk7YnJlYWs7Y2FzZSAzOmEubWVkaWFUeXBlVG9Db3VudC5wdXNoKHQuTWVkaWFUeXBlVG9Db3VudC5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXt1c2VySWQ6dm9pZCAwLG1lc3NhZ2VJZDpcIjBcIixtZWRpYVR5cGVUb0NvdW50OltdfTtyZXR1cm4gbi51c2VySWQ9dm9pZCAwIT09ZS51c2VySWQmJm51bGwhPT1lLnVzZXJJZD9vLlVVSUQuZnJvbVBhcnRpYWwoZS51c2VySWQpOnZvaWQgMCxuLm1lc3NhZ2VJZD1lLm1lc3NhZ2VJZD8/XCIwXCIsbi5tZWRpYVR5cGVUb0NvdW50PWUubWVkaWFUeXBlVG9Db3VudD8ubWFwKChlPT50Lk1lZGlhVHlwZVRvQ291bnQuZnJvbVBhcnRpYWwoZSkpKXx8W10sbn19LHQuTWVkaWFUeXBlVG9Db3VudD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5tZWRpYVR5cGUmJnQudWludDMyKDgpLmludDMyKGUubWVkaWFUeXBlKSxcIjBcIiE9PWUuY291bnQmJnQudWludDMyKDE2KS51aW50NjQoZS5jb3VudCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXttZWRpYVR5cGU6MCxjb3VudDpcIjBcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkubWVkaWFUeXBlPW4uaW50MzIoKTticmVhaztjYXNlIDI6aS5jb3VudD1jKG4udWludDY0KCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17bWVkaWFUeXBlOjAsY291bnQ6XCIwXCJ9O3JldHVybiB0Lm1lZGlhVHlwZT1lLm1lZGlhVHlwZT8/MCx0LmNvdW50PWUuY291bnQ/P1wiMFwiLHR9fSx0LkNoYW5nZUNvbnZlcnNhdGlvblJldGVudGlvblBvbGljeVN0YXR1c01lc3NhZ2U9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5pbml0aWF0aW5nVXNlcklkJiZvLlVVSUQuZW5jb2RlKGUuaW5pdGlhdGluZ1VzZXJJZCx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLm5ld1JldGVudGlvblBvbGljeSYmYS5Db252ZXJzYXRpb25SZXRlbnRpb25Qb2xpY3kuZW5jb2RlKGUubmV3UmV0ZW50aW9uUG9saWN5LHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLmRpc3BsYXlUeXBlJiZ0LnVpbnQzMigyNCkuaW50MzIoZS5kaXNwbGF5VHlwZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtpbml0aWF0aW5nVXNlcklkOnZvaWQgMCxuZXdSZXRlbnRpb25Qb2xpY3k6dm9pZCAwLGRpc3BsYXlUeXBlOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmluaXRpYXRpbmdVc2VySWQ9by5VVUlELmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMjppLm5ld1JldGVudGlvblBvbGljeT1hLkNvbnZlcnNhdGlvblJldGVudGlvblBvbGljeS5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDM6aS5kaXNwbGF5VHlwZT1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtpbml0aWF0aW5nVXNlcklkOnZvaWQgMCxuZXdSZXRlbnRpb25Qb2xpY3k6dm9pZCAwLGRpc3BsYXlUeXBlOjB9O3JldHVybiB0LmluaXRpYXRpbmdVc2VySWQ9dm9pZCAwIT09ZS5pbml0aWF0aW5nVXNlcklkJiZudWxsIT09ZS5pbml0aWF0aW5nVXNlcklkP28uVVVJRC5mcm9tUGFydGlhbChlLmluaXRpYXRpbmdVc2VySWQpOnZvaWQgMCx0Lm5ld1JldGVudGlvblBvbGljeT12b2lkIDAhPT1lLm5ld1JldGVudGlvblBvbGljeSYmbnVsbCE9PWUubmV3UmV0ZW50aW9uUG9saWN5P2EuQ29udmVyc2F0aW9uUmV0ZW50aW9uUG9saWN5LmZyb21QYXJ0aWFsKGUubmV3UmV0ZW50aW9uUG9saWN5KTp2b2lkIDAsdC5kaXNwbGF5VHlwZT1lLmRpc3BsYXlUeXBlPz8wLHR9fSx0LkdhbWVDbG9zZWRTdGF0dXNNZXNzYWdlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7XCJcIiE9PWUuYXBwSWQmJnQudWludDMyKDEwKS5zdHJpbmcoZS5hcHBJZCk7Zm9yKGNvbnN0IG4gb2YgZS5wYXJ0aWNpcGFudHMpby5VVUlELmVuY29kZShuLHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiB0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2FwcElkOlwiXCIscGFydGljaXBhbnRzOltdfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5hcHBJZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLnBhcnRpY2lwYW50cy5wdXNoKG8uVVVJRC5kZWNvZGUobixuLnVpbnQzMigpKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXthcHBJZDpcIlwiLHBhcnRpY2lwYW50czpbXX07cmV0dXJuIHQuYXBwSWQ9ZS5hcHBJZD8/XCJcIix0LnBhcnRpY2lwYW50cz1lLnBhcnRpY2lwYW50cz8ubWFwKChlPT5vLlVVSUQuZnJvbVBhcnRpYWwoZSkpKXx8W10sdH19LHQuSW52aXRlTGlua1N0YXR1c01lc3NhZ2U9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5pbml0aWF0aW5nVXNlcklkJiZvLlVVSUQuZW5jb2RlKGUuaW5pdGlhdGluZ1VzZXJJZCx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS5pbnZpdGVMaW5rU3RhdHVzJiZ0LnVpbnQzMigxNikuaW50MzIoZS5pbnZpdGVMaW5rU3RhdHVzKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2luaXRpYXRpbmdVc2VySWQ6dm9pZCAwLGludml0ZUxpbmtTdGF0dXM6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuaW5pdGlhdGluZ1VzZXJJZD1vLlVVSUQuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOmkuaW52aXRlTGlua1N0YXR1cz1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtpbml0aWF0aW5nVXNlcklkOnZvaWQgMCxpbnZpdGVMaW5rU3RhdHVzOjB9O3JldHVybiB0LmluaXRpYXRpbmdVc2VySWQ9dm9pZCAwIT09ZS5pbml0aWF0aW5nVXNlcklkJiZudWxsIT09ZS5pbml0aWF0aW5nVXNlcklkP28uVVVJRC5mcm9tUGFydGlhbChlLmluaXRpYXRpbmdVc2VySWQpOnZvaWQgMCx0Lmludml0ZUxpbmtTdGF0dXM9ZS5pbnZpdGVMaW5rU3RhdHVzPz8wLHR9fSx0Lkdyb3VwSW52aXRlU3RpY2tlckpvaW5UZXh0UHJvbXB0U3RhdHVzTWVzc2FnZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLmludml0ZUdyb3VwSWQmJm8uVVVJRC5lbmNvZGUoZS5pbnZpdGVHcm91cElkLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLFwiXCIhPT1lLmludml0ZUdyb3VwTmFtZSYmdC51aW50MzIoMTgpLnN0cmluZyhlLmludml0ZUdyb3VwTmFtZSksdm9pZCAwIT09ZS5pbnZpdGVJZCYmby5VVUlELmVuY29kZShlLmludml0ZUlkLHQudWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17aW52aXRlR3JvdXBJZDp2b2lkIDAsaW52aXRlR3JvdXBOYW1lOlwiXCIsaW52aXRlSWQ6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5pbnZpdGVHcm91cElkPW8uVVVJRC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDI6aS5pbnZpdGVHcm91cE5hbWU9bi5zdHJpbmcoKTticmVhaztjYXNlIDM6aS5pbnZpdGVJZD1vLlVVSUQuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtpbnZpdGVHcm91cElkOnZvaWQgMCxpbnZpdGVHcm91cE5hbWU6XCJcIixpbnZpdGVJZDp2b2lkIDB9O3JldHVybiB0Lmludml0ZUdyb3VwSWQ9dm9pZCAwIT09ZS5pbnZpdGVHcm91cElkJiZudWxsIT09ZS5pbnZpdGVHcm91cElkP28uVVVJRC5mcm9tUGFydGlhbChlLmludml0ZUdyb3VwSWQpOnZvaWQgMCx0Lmludml0ZUdyb3VwTmFtZT1lLmludml0ZUdyb3VwTmFtZT8/XCJcIix0Lmludml0ZUlkPXZvaWQgMCE9PWUuaW52aXRlSWQmJm51bGwhPT1lLmludml0ZUlkP28uVVVJRC5mcm9tUGFydGlhbChlLmludml0ZUlkKTp2b2lkIDAsdH19LHQuQ2FudmFzQ3VzdG9tVXBkYXRlSW5mbz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnBhdGgmJnQudWludDMyKDEwKS5zdHJpbmcoZS5wYXRoKSxcIlwiIT09ZS5wYXlsb2FkJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUucGF5bG9hZCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtwYXRoOlwiXCIscGF5bG9hZDpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5wYXRoPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkucGF5bG9hZD1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17cGF0aDpcIlwiLHBheWxvYWQ6XCJcIn07cmV0dXJuIHQucGF0aD1lLnBhdGg/P1wiXCIsdC5wYXlsb2FkPWUucGF5bG9hZD8/XCJcIix0fX0sdC5DYW52YXNDdXN0b21VcGRhdGVTdGF0dXNNZXNzYWdlPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7dm9pZCAwIT09ZS5hcHBJZCYmby5VVUlELmVuY29kZShlLmFwcElkLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO2Zvcihjb25zdCB0IG9mIGUubWVkaWFVc2VySWRzKW8uVVVJRC5lbmNvZGUodCxuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm5cIlwiIT09ZS50ZXh0Q29udGVudCYmbi51aW50MzIoMjYpLnN0cmluZyhlLnRleHRDb250ZW50KSx2b2lkIDAhPT1lLnVwZGF0ZUluZm8mJnQuQ2FudmFzQ3VzdG9tVXBkYXRlSW5mby5lbmNvZGUoZS51cGRhdGVJbmZvLG4udWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3QgYT17YXBwSWQ6dm9pZCAwLG1lZGlhVXNlcklkczpbXSx0ZXh0Q29udGVudDpcIlwiLHVwZGF0ZUluZm86dm9pZCAwfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS5hcHBJZD1vLlVVSUQuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOmEubWVkaWFVc2VySWRzLnB1c2goby5VVUlELmRlY29kZShyLHIudWludDMyKCkpKTticmVhaztjYXNlIDM6YS50ZXh0Q29udGVudD1yLnN0cmluZygpO2JyZWFrO2Nhc2UgNDphLnVwZGF0ZUluZm89dC5DYW52YXNDdXN0b21VcGRhdGVJbmZvLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17YXBwSWQ6dm9pZCAwLG1lZGlhVXNlcklkczpbXSx0ZXh0Q29udGVudDpcIlwiLHVwZGF0ZUluZm86dm9pZCAwfTtyZXR1cm4gbi5hcHBJZD12b2lkIDAhPT1lLmFwcElkJiZudWxsIT09ZS5hcHBJZD9vLlVVSUQuZnJvbVBhcnRpYWwoZS5hcHBJZCk6dm9pZCAwLG4ubWVkaWFVc2VySWRzPWUubWVkaWFVc2VySWRzPy5tYXAoKGU9Pm8uVVVJRC5mcm9tUGFydGlhbChlKSkpfHxbXSxuLnRleHRDb250ZW50PWUudGV4dENvbnRlbnQ/P1wiXCIsbi51cGRhdGVJbmZvPXZvaWQgMCE9PWUudXBkYXRlSW5mbyYmbnVsbCE9PWUudXBkYXRlSW5mbz90LkNhbnZhc0N1c3RvbVVwZGF0ZUluZm8uZnJvbVBhcnRpYWwoZS51cGRhdGVJbmZvKTp2b2lkIDAsbn19LHQuTGl2ZUxvY2F0aW9uU2hhcmVUZXJtaW5hdGVkU3RhdHVzTWVzc2FnZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLmluaXRpYXRpbmdVc2VySWQmJm8uVVVJRC5lbmNvZGUoZS5pbml0aWF0aW5nVXNlcklkLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLnRlcm1pbmF0ZVJlYXNvbiYmdC51aW50MzIoMTYpLmludDMyKGUudGVybWluYXRlUmVhc29uKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2luaXRpYXRpbmdVc2VySWQ6dm9pZCAwLHRlcm1pbmF0ZVJlYXNvbjowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5pbml0aWF0aW5nVXNlcklkPW8uVVVJRC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDI6aS50ZXJtaW5hdGVSZWFzb249bi5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17aW5pdGlhdGluZ1VzZXJJZDp2b2lkIDAsdGVybWluYXRlUmVhc29uOjB9O3JldHVybiB0LmluaXRpYXRpbmdVc2VySWQ9dm9pZCAwIT09ZS5pbml0aWF0aW5nVXNlcklkJiZudWxsIT09ZS5pbml0aWF0aW5nVXNlcklkP28uVVVJRC5mcm9tUGFydGlhbChlLmluaXRpYXRpbmdVc2VySWQpOnZvaWQgMCx0LnRlcm1pbmF0ZVJlYXNvbj1lLnRlcm1pbmF0ZVJlYXNvbj8/MCx0fX0sdC5Jbk15Q29udGFjdHNTdGF0dXNNZXNzYWdlPXtlbmNvZGUoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpfSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtuLnNraXBUeXBlKDcmZSl9cmV0dXJue319LGZyb21QYXJ0aWFsOmU9Pih7fSl9LHQuQWNjZXB0RmFtaWx5Q2VudGVySW52aXRlU3RhdHVzTWVzc2FnZT17ZW5jb2RlKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKX0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7bi5za2lwVHlwZSg3JmUpfXJldHVybnt9fSxmcm9tUGFydGlhbDplPT4oe30pfSx0LkxlYXZlRmFtaWx5Q2VudGVyU3RhdHVzTWVzc2FnZT17ZW5jb2RlKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKX0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7bi5za2lwVHlwZSg3JmUpfXJldHVybnt9fSxmcm9tUGFydGlhbDplPT4oe30pfSx0LkRXZWJVcHNlbGxTdGF0dXNNZXNzYWdlPXtlbmNvZGUoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpfSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtuLnNraXBUeXBlKDcmZSl9cmV0dXJue319LGZyb21QYXJ0aWFsOmU9Pih7fSl9LHQuUXVvdGVSZXBseVNoYXJlU3RhdHVzTWVzc2FnZT17ZW5jb2RlKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKX0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7bi5za2lwVHlwZSg3JmUpfXJldHVybnt9fSxmcm9tUGFydGlhbDplPT4oe30pfSx0LlVwZGF0ZUNoYXRXYWxscGFwZXJTdGF0dXNNZXNzYWdlPXtlbmNvZGUoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpfSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtuLnNraXBUeXBlKDcmZSl9cmV0dXJue319LGZyb21QYXJ0aWFsOmU9Pih7fSl9LHQuUGx1c0dpZnRTdGF0dXNNZXNzYWdlPXtlbmNvZGUoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpfSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtuLnNraXBUeXBlKDcmZSl9cmV0dXJue319LGZyb21QYXJ0aWFsOmU9Pih7fSl9LHQuU3RyZWFrU3RhdHVzTWVzc2FnZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5zdHJlYWtTdGF0dXMmJnQudWludDMyKDgpLmludDMyKGUuc3RyZWFrU3RhdHVzKSwwIT09ZS5zdHJlYWtDb3VudCYmdC51aW50MzIoMTYpLnVpbnQzMihlLnN0cmVha0NvdW50KSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3N0cmVha1N0YXR1czowLHN0cmVha0NvdW50OjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnN0cmVha1N0YXR1cz1uLmludDMyKCk7YnJlYWs7Y2FzZSAyOmkuc3RyZWFrQ291bnQ9bi51aW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3N0cmVha1N0YXR1czowLHN0cmVha0NvdW50OjB9O3JldHVybiB0LnN0cmVha1N0YXR1cz1lLnN0cmVha1N0YXR1cz8/MCx0LnN0cmVha0NvdW50PWUuc3RyZWFrQ291bnQ/PzAsdH19LHQuTWVybGluV2VsY29tZVN0YXR1c01lc3NhZ2U9e2VuY29kZShlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCl9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO24uc2tpcFR5cGUoNyZlKX1yZXR1cm57fX0sZnJvbVBhcnRpYWw6ZT0+KHt9KX0sdC5MaXZlTG9jYXRpb25Hcm91cFNoYXJlU3RhdHVzTWVzc2FnZT17ZW5jb2RlKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKX0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7bi5za2lwVHlwZSg3JmUpfXJldHVybnt9fSxmcm9tUGFydGlhbDplPT4oe30pfSxzLmRlZmF1bHQudXRpbC5Mb25nIT09aS5kZWZhdWx0JiYocy5kZWZhdWx0LnV0aWwuTG9uZz1pLmRlZmF1bHQscy5kZWZhdWx0LmNvbmZpZ3VyZSgpKX0sNzUzNjg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQXVkaW9Ob3RlTWV0YWRhdGE9dC5UcmFuc2NyaXB0aW9ucz10LlN0YXR1c0dlbmVyaWNDaGF0PXQuU3RhdHVzSW5NeUNvbnRhY3RzRGlzcGxheUluZm89dC5TdGF0dXNHcm91cENoYXRDcmVhdGVkRGlzcGxheUluZm89dC5TdGF0dXNTYXZlVG9DYW1lcmFSb2xsRGlzcGxheUluZm89dC5TdGF0dXNOYW1lQ2hhbmdlRGlzcGxheUluZm89dC5TdGF0dXNQYXJ0aWNpcGFudEtpY2tEaXNwbGF5SW5mbz10LlN0YXR1c1BhcnRpY2lwYW50QWRkRGlzcGxheUluZm89dC5TdGF0dXNDYWxsaW5nU3RhdHVzRGlzcGxheUluZm89dC5TdGF0dXNTY3JlZW5DYXB0dXJlRGlzcGxheUluZm89dC5TdGF0dXNNZXNzYWdlRGlzcGxheUluZm89dC5TaGFyZVNhdmVkU3RvcnlEaXNwbGF5SW5mbz10LkV4dGVybmFsTWVkaWFHaWZ0RGlzcGxheUluZm89dC5FeHRlcm5hbE1lZGlhRGVmYXVsdERpc3BsYXlJbmZvPXQuU2hhcmVEaXNwbGF5SW5mbz10LkV4dGVybmFsTWVkaWFEaXNwbGF5SW5mbz10LlNuYXBEaXNwbGF5SW5mbz10LkNsZWFyVGV4dEVlbEtleUVuY3J5cHRpb249dC5DbGVhclRleHRNZWRpYUtleUVuY3J5cHRpb249dC5GaWRlbGl1c1JlY2lwaWVudEluZm89dC5GaWRlbGl1c0VuY3J5cHRpb249dC5Db252ZXJzYXRpb25FbnZlbG9wZUVuY3J5cHRpb25WMT10LkVlbEVuY3J5cHRpb249dC5FbnZlbG9wZUVuY3J5cHRpb249dC5UcmFuc2NyaXB0aW9uSW5mbz10LlRodW1ibmFpbEluZm89dC5TaGFyZU1ldGFkYXRhPXQuU25hcFJlcGx5TWV0YWRhdGE9dC5Db250ZW50RW52ZWxvcGVfQm90TWVudGlvblJlc3BvbnNlTWV0YWRhdGE9dC5Db250ZW50RW52ZWxvcGVfRmVlZERpc3BsYXlJbmZvPXQuQ29udGVudEVudmVsb3BlX1RodW1ibmFpbHM9dC5Db250ZW50RW52ZWxvcGVfRGlzcGxheUluZm89dC5Db250ZW50RW52ZWxvcGVfTWVkaWFSZWZlcmVuY2VMaXN0PXQuQ29udGVudEVudmVsb3BlX1JlbW90ZU1lZGlhSW5mbz10LkNvbnRlbnRFbnZlbG9wZT10LkNvbnRlbnRFbnZlbG9wZV9SZW1vdGVNZWRpYUluZm9fTWVkaWFUeXBlPXQuQ29udGVudEVudmVsb3BlX1NhdmVQb2xpY3k9dC5Db250ZW50RW52ZWxvcGVfQ29udGVudFR5cGU9dC5TdG9yeU1lZGlhU3RhdGU9dm9pZCAwO2NvbnN0IGk9cihuKDQxNTgzKSksbz1uKDg4MTY4KSxhPW4oOTc4MDQpLHM9bigzODczMSksYz1yKG4oNjIxMDApKSxsPW4oODE0NDUpO2Z1bmN0aW9uIHUoKXtyZXR1cm57bWVkaWFJbmZvOltdLGNvbnRlbnRUeXBlOjAsZW5jcnlwdGlvbjp2b2lkIDAsY29udGVudHM6bmV3IFVpbnQ4QXJyYXksbWVkaWFSZWZlcmVuY2VMaXN0czpbXSxkaXNwbGF5SW5mbzp2b2lkIDAsc2F2ZVBvbGljeTowLHRodW1ibmFpbHM6dm9pZCAwLGZlZWREaXNwbGF5SW5mbzp2b2lkIDAsbWVzc2FnZVR5cGVNZXRhZGF0YTp2b2lkIDAsYm90TWVudGlvblJlc3BvbnNlTWV0YWRhdGE6dm9pZCAwfX1mdW5jdGlvbiBkKCl7cmV0dXJue2Nla0l2Om5ldyBVaW50OEFycmF5LG5vbmNlOm5ldyBVaW50OEFycmF5LHNlbmRlclB1YmxpY0tleTpuZXcgVWludDhBcnJheSxzZW5kZXJWZXJzaW9uOjAsY2VrOm5ldyBVaW50OEFycmF5fX1mdW5jdGlvbiBmKCl7cmV0dXJue2l2Om5ldyBVaW50OEFycmF5LG5vbmNlOm5ldyBVaW50OEFycmF5fX1mdW5jdGlvbiBwKCl7cmV0dXJue3NuYXBLZXk6bmV3IFVpbnQ4QXJyYXksc25hcEl2Om5ldyBVaW50OEFycmF5LHJldHJpZWQ6ITEsdmVyc2lvbjowLHNlbmRlck91dEJldGE6bmV3IFVpbnQ4QXJyYXksZmlkZWxpdXNSZWNpcGllbnRJbmZvOltdfX1mdW5jdGlvbiBtKCl7cmV0dXJue3JlY2lwaWVudEtleTpuZXcgVWludDhBcnJheSxuYTpuZXcgVWludDhBcnJheSxwaGk6bmV3IFVpbnQ4QXJyYXksdGFnOm5ldyBVaW50OEFycmF5LHNlbmRlclVzZXJJZDp2b2lkIDAscmVjaXBpZW50VXNlcklkOnZvaWQgMCxyZWNpcGllbnRWZXJzaW9uOjB9fWZ1bmN0aW9uIGgoKXtyZXR1cm57bWVkaWFLZXk6bmV3IFVpbnQ4QXJyYXksbWVkaWFJdjpuZXcgVWludDhBcnJheX19ZnVuY3Rpb24gdigpe3JldHVybntjZWtJdjpuZXcgVWludDhBcnJheSxjZWs6bmV3IFVpbnQ4QXJyYXl9fXZhciBnLHksRSxfOyhfPXQuU3RvcnlNZWRpYVN0YXRlfHwodC5TdG9yeU1lZGlhU3RhdGU9e30pKVtfLlVOU0VUPTBdPVwiVU5TRVRcIixfW18uUFJFU0VOVD0xXT1cIlBSRVNFTlRcIixfW18uREVMRVRFREJZUE9TVEVSPTJdPVwiREVMRVRFREJZUE9TVEVSXCIsX1tfLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwoRT10LkNvbnRlbnRFbnZlbG9wZV9Db250ZW50VHlwZXx8KHQuQ29udGVudEVudmVsb3BlX0NvbnRlbnRUeXBlPXt9KSlbRS5TTkFQPTBdPVwiU05BUFwiLEVbRS5DSEFUPTFdPVwiQ0hBVFwiLEVbRS5FWFRFUk5BTF9NRURJQT0yXT1cIkVYVEVSTkFMX01FRElBXCIsRVtFLlNIQVJFPTNdPVwiU0hBUkVcIixFW0UuTk9URT00XT1cIk5PVEVcIixFW0UuU1RJQ0tFUj01XT1cIlNUSUNLRVJcIixFW0UuU1RBVFVTPTZdPVwiU1RBVFVTXCIsRVtFLkxPQ0FUSU9OPThdPVwiTE9DQVRJT05cIixFW0UuU1RBVFVTX1NBVkVfVE9fQ0FNRVJBX1JPTEw9OV09XCJTVEFUVVNfU0FWRV9UT19DQU1FUkFfUk9MTFwiLEVbRS5TVEFUVVNfQ09OVkVSU0FUSU9OX0NBUFRVUkVfU0NSRUVOU0hPVD0xMF09XCJTVEFUVVNfQ09OVkVSU0FUSU9OX0NBUFRVUkVfU0NSRUVOU0hPVFwiLEVbRS5TVEFUVVNfQ09OVkVSU0FUSU9OX0NBUFRVUkVfUkVDT1JEPTExXT1cIlNUQVRVU19DT05WRVJTQVRJT05fQ0FQVFVSRV9SRUNPUkRcIixFW0UuU1RBVFVTX0NBTExfTUlTU0VEX1ZJREVPPTEyXT1cIlNUQVRVU19DQUxMX01JU1NFRF9WSURFT1wiLEVbRS5TVEFUVVNfQ0FMTF9NSVNTRURfQVVESU89MTNdPVwiU1RBVFVTX0NBTExfTUlTU0VEX0FVRElPXCIsRVtFLlNUQVRVU19JTlZJVEVfTElOS19DSEFOR0U9MTRdPVwiU1RBVFVTX0lOVklURV9MSU5LX0NIQU5HRVwiLEVbRS5DQU5WQVNfQVBQPTE1XT1cIkNBTlZBU19BUFBcIixFW0UuTElWRV9MT0NBVElPTl9TSEFSRT0xNl09XCJMSVZFX0xPQ0FUSU9OX1NIQVJFXCIsRVtFLkNSRUFUSVZFX1RPT0xfSVRFTT0xN109XCJDUkVBVElWRV9UT09MX0lURU1cIixFW0UuRkFNSUxZX0NFTlRFUl9JTlZJVEU9MThdPVwiRkFNSUxZX0NFTlRFUl9JTlZJVEVcIixFW0UuRkFNSUxZX0NFTlRFUl9BQ0NFUFQ9MTldPVwiRkFNSUxZX0NFTlRFUl9BQ0NFUFRcIixFW0UuRkFNSUxZX0NFTlRFUl9MRUFWRT0yMF09XCJGQU1JTFlfQ0VOVEVSX0xFQVZFXCIsRVtFLlNOQVBfTk9UX1ZJRVdBQkxFPTIxXT1cIlNOQVBfTk9UX1ZJRVdBQkxFXCIsRVtFLlNUQVRVU19QTFVTX0dJRlQ9MjJdPVwiU1RBVFVTX1BMVVNfR0lGVFwiLEVbRS5OT05fUEFSVElDSVBBTlRfQk9UX1JFU1BPTlNFPTIzXT1cIk5PTl9QQVJUSUNJUEFOVF9CT1RfUkVTUE9OU0VcIixFW0UuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLCh5PXQuQ29udGVudEVudmVsb3BlX1NhdmVQb2xpY3l8fCh0LkNvbnRlbnRFbnZlbG9wZV9TYXZlUG9saWN5PXt9KSlbeS5VTlNFVD0wXT1cIlVOU0VUXCIseVt5LlBST0hJQklURUQ9MV09XCJQUk9ISUJJVEVEXCIseVt5LkxJRkVUSU1FPTJdPVwiTElGRVRJTUVcIix5W3kuVklFV19TRVNTSU9OPTNdPVwiVklFV19TRVNTSU9OXCIseVt5LlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwoZz10LkNvbnRlbnRFbnZlbG9wZV9SZW1vdGVNZWRpYUluZm9fTWVkaWFUeXBlfHwodC5Db250ZW50RW52ZWxvcGVfUmVtb3RlTWVkaWFJbmZvX01lZGlhVHlwZT17fSkpW2cuVU5LTk9XTj0wXT1cIlVOS05PV05cIixnW2cuSU1BR0U9MV09XCJJTUFHRVwiLGdbZy5WSURFTz0yXT1cIlZJREVPXCIsZ1tnLkdJRj0zXT1cIkdJRlwiLGdbZy5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsdC5Db250ZW50RW52ZWxvcGU9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Yy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgciBvZiBlLm1lZGlhSW5mbyl0LkNvbnRlbnRFbnZlbG9wZV9SZW1vdGVNZWRpYUluZm8uZW5jb2RlKHIsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7MCE9PWUuY29udGVudFR5cGUmJm4udWludDMyKDE2KS5pbnQzMihlLmNvbnRlbnRUeXBlKSx2b2lkIDAhPT1lLmVuY3J5cHRpb24mJnQuRW52ZWxvcGVFbmNyeXB0aW9uLmVuY29kZShlLmVuY3J5cHRpb24sbi51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCksMCE9PWUuY29udGVudHMubGVuZ3RoJiZuLnVpbnQzMigzNCkuYnl0ZXMoZS5jb250ZW50cyk7Zm9yKGNvbnN0IHIgb2YgZS5tZWRpYVJlZmVyZW5jZUxpc3RzKXQuQ29udGVudEVudmVsb3BlX01lZGlhUmVmZXJlbmNlTGlzdC5lbmNvZGUocixuLnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gdm9pZCAwIT09ZS5kaXNwbGF5SW5mbyYmdC5Db250ZW50RW52ZWxvcGVfRGlzcGxheUluZm8uZW5jb2RlKGUuZGlzcGxheUluZm8sbi51aW50MzIoNTApLmZvcmsoKSkubGRlbGltKCksMCE9PWUuc2F2ZVBvbGljeSYmbi51aW50MzIoNTYpLmludDMyKGUuc2F2ZVBvbGljeSksdm9pZCAwIT09ZS50aHVtYm5haWxzJiZ0LkNvbnRlbnRFbnZlbG9wZV9UaHVtYm5haWxzLmVuY29kZShlLnRodW1ibmFpbHMsbi51aW50MzIoNjYpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5mZWVkRGlzcGxheUluZm8mJnQuQ29udGVudEVudmVsb3BlX0ZlZWREaXNwbGF5SW5mby5lbmNvZGUoZS5mZWVkRGlzcGxheUluZm8sbi51aW50MzIoNzQpLmZvcmsoKSkubGRlbGltKCksXCJhdWRpb05vdGVNZXRhZGF0YVwiPT09ZS5tZXNzYWdlVHlwZU1ldGFkYXRhPy4kY2FzZSYmdC5BdWRpb05vdGVNZXRhZGF0YS5lbmNvZGUoZS5tZXNzYWdlVHlwZU1ldGFkYXRhLmF1ZGlvTm90ZU1ldGFkYXRhLG4udWludDMyKDkwKS5mb3JrKCkpLmxkZWxpbSgpLFwic25hcFJlcGx5TWV0YWRhdGFcIj09PWUubWVzc2FnZVR5cGVNZXRhZGF0YT8uJGNhc2UmJnQuU25hcFJlcGx5TWV0YWRhdGEuZW5jb2RlKGUubWVzc2FnZVR5cGVNZXRhZGF0YS5zbmFwUmVwbHlNZXRhZGF0YSxuLnVpbnQzMigxMDYpLmZvcmsoKSkubGRlbGltKCksXCJzaGFyZU1ldGFkYXRhXCI9PT1lLm1lc3NhZ2VUeXBlTWV0YWRhdGE/LiRjYXNlJiZ0LlNoYXJlTWV0YWRhdGEuZW5jb2RlKGUubWVzc2FnZVR5cGVNZXRhZGF0YS5zaGFyZU1ldGFkYXRhLG4udWludDMyKDExNCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmJvdE1lbnRpb25SZXNwb25zZU1ldGFkYXRhJiZ0LkNvbnRlbnRFbnZlbG9wZV9Cb3RNZW50aW9uUmVzcG9uc2VNZXRhZGF0YS5lbmNvZGUoZS5ib3RNZW50aW9uUmVzcG9uc2VNZXRhZGF0YSxuLnVpbnQzMig5OCkuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBjLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89dSgpO2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLm1lZGlhSW5mby5wdXNoKHQuQ29udGVudEVudmVsb3BlX1JlbW90ZU1lZGlhSW5mby5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAyOm8uY29udGVudFR5cGU9ci5pbnQzMigpO2JyZWFrO2Nhc2UgMzpvLmVuY3J5cHRpb249dC5FbnZlbG9wZUVuY3J5cHRpb24uZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSA0Om8uY29udGVudHM9ci5ieXRlcygpO2JyZWFrO2Nhc2UgNTpvLm1lZGlhUmVmZXJlbmNlTGlzdHMucHVzaCh0LkNvbnRlbnRFbnZlbG9wZV9NZWRpYVJlZmVyZW5jZUxpc3QuZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2Nhc2UgNjpvLmRpc3BsYXlJbmZvPXQuQ29udGVudEVudmVsb3BlX0Rpc3BsYXlJbmZvLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgNzpvLnNhdmVQb2xpY3k9ci5pbnQzMigpO2JyZWFrO2Nhc2UgODpvLnRodW1ibmFpbHM9dC5Db250ZW50RW52ZWxvcGVfVGh1bWJuYWlscy5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDk6by5mZWVkRGlzcGxheUluZm89dC5Db250ZW50RW52ZWxvcGVfRmVlZERpc3BsYXlJbmZvLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMTE6by5tZXNzYWdlVHlwZU1ldGFkYXRhPXskY2FzZTpcImF1ZGlvTm90ZU1ldGFkYXRhXCIsYXVkaW9Ob3RlTWV0YWRhdGE6dC5BdWRpb05vdGVNZXRhZGF0YS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAxMzpvLm1lc3NhZ2VUeXBlTWV0YWRhdGE9eyRjYXNlOlwic25hcFJlcGx5TWV0YWRhdGFcIixzbmFwUmVwbHlNZXRhZGF0YTp0LlNuYXBSZXBseU1ldGFkYXRhLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDE0Om8ubWVzc2FnZVR5cGVNZXRhZGF0YT17JGNhc2U6XCJzaGFyZU1ldGFkYXRhXCIsc2hhcmVNZXRhZGF0YTp0LlNoYXJlTWV0YWRhdGEuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMTI6by5ib3RNZW50aW9uUmVzcG9uc2VNZXRhZGF0YT10LkNvbnRlbnRFbnZlbG9wZV9Cb3RNZW50aW9uUmVzcG9uc2VNZXRhZGF0YS5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49dSgpO3JldHVybiBuLm1lZGlhSW5mbz1lLm1lZGlhSW5mbz8ubWFwKChlPT50LkNvbnRlbnRFbnZlbG9wZV9SZW1vdGVNZWRpYUluZm8uZnJvbVBhcnRpYWwoZSkpKXx8W10sbi5jb250ZW50VHlwZT1lLmNvbnRlbnRUeXBlPz8wLG4uZW5jcnlwdGlvbj12b2lkIDAhPT1lLmVuY3J5cHRpb24mJm51bGwhPT1lLmVuY3J5cHRpb24/dC5FbnZlbG9wZUVuY3J5cHRpb24uZnJvbVBhcnRpYWwoZS5lbmNyeXB0aW9uKTp2b2lkIDAsbi5jb250ZW50cz1lLmNvbnRlbnRzPz9uZXcgVWludDhBcnJheSxuLm1lZGlhUmVmZXJlbmNlTGlzdHM9ZS5tZWRpYVJlZmVyZW5jZUxpc3RzPy5tYXAoKGU9PnQuQ29udGVudEVudmVsb3BlX01lZGlhUmVmZXJlbmNlTGlzdC5mcm9tUGFydGlhbChlKSkpfHxbXSxuLmRpc3BsYXlJbmZvPXZvaWQgMCE9PWUuZGlzcGxheUluZm8mJm51bGwhPT1lLmRpc3BsYXlJbmZvP3QuQ29udGVudEVudmVsb3BlX0Rpc3BsYXlJbmZvLmZyb21QYXJ0aWFsKGUuZGlzcGxheUluZm8pOnZvaWQgMCxuLnNhdmVQb2xpY3k9ZS5zYXZlUG9saWN5Pz8wLG4udGh1bWJuYWlscz12b2lkIDAhPT1lLnRodW1ibmFpbHMmJm51bGwhPT1lLnRodW1ibmFpbHM/dC5Db250ZW50RW52ZWxvcGVfVGh1bWJuYWlscy5mcm9tUGFydGlhbChlLnRodW1ibmFpbHMpOnZvaWQgMCxuLmZlZWREaXNwbGF5SW5mbz12b2lkIDAhPT1lLmZlZWREaXNwbGF5SW5mbyYmbnVsbCE9PWUuZmVlZERpc3BsYXlJbmZvP3QuQ29udGVudEVudmVsb3BlX0ZlZWREaXNwbGF5SW5mby5mcm9tUGFydGlhbChlLmZlZWREaXNwbGF5SW5mbyk6dm9pZCAwLFwiYXVkaW9Ob3RlTWV0YWRhdGFcIj09PWUubWVzc2FnZVR5cGVNZXRhZGF0YT8uJGNhc2UmJnZvaWQgMCE9PWUubWVzc2FnZVR5cGVNZXRhZGF0YT8uYXVkaW9Ob3RlTWV0YWRhdGEmJm51bGwhPT1lLm1lc3NhZ2VUeXBlTWV0YWRhdGE/LmF1ZGlvTm90ZU1ldGFkYXRhJiYobi5tZXNzYWdlVHlwZU1ldGFkYXRhPXskY2FzZTpcImF1ZGlvTm90ZU1ldGFkYXRhXCIsYXVkaW9Ob3RlTWV0YWRhdGE6dC5BdWRpb05vdGVNZXRhZGF0YS5mcm9tUGFydGlhbChlLm1lc3NhZ2VUeXBlTWV0YWRhdGEuYXVkaW9Ob3RlTWV0YWRhdGEpfSksXCJzbmFwUmVwbHlNZXRhZGF0YVwiPT09ZS5tZXNzYWdlVHlwZU1ldGFkYXRhPy4kY2FzZSYmdm9pZCAwIT09ZS5tZXNzYWdlVHlwZU1ldGFkYXRhPy5zbmFwUmVwbHlNZXRhZGF0YSYmbnVsbCE9PWUubWVzc2FnZVR5cGVNZXRhZGF0YT8uc25hcFJlcGx5TWV0YWRhdGEmJihuLm1lc3NhZ2VUeXBlTWV0YWRhdGE9eyRjYXNlOlwic25hcFJlcGx5TWV0YWRhdGFcIixzbmFwUmVwbHlNZXRhZGF0YTp0LlNuYXBSZXBseU1ldGFkYXRhLmZyb21QYXJ0aWFsKGUubWVzc2FnZVR5cGVNZXRhZGF0YS5zbmFwUmVwbHlNZXRhZGF0YSl9KSxcInNoYXJlTWV0YWRhdGFcIj09PWUubWVzc2FnZVR5cGVNZXRhZGF0YT8uJGNhc2UmJnZvaWQgMCE9PWUubWVzc2FnZVR5cGVNZXRhZGF0YT8uc2hhcmVNZXRhZGF0YSYmbnVsbCE9PWUubWVzc2FnZVR5cGVNZXRhZGF0YT8uc2hhcmVNZXRhZGF0YSYmKG4ubWVzc2FnZVR5cGVNZXRhZGF0YT17JGNhc2U6XCJzaGFyZU1ldGFkYXRhXCIsc2hhcmVNZXRhZGF0YTp0LlNoYXJlTWV0YWRhdGEuZnJvbVBhcnRpYWwoZS5tZXNzYWdlVHlwZU1ldGFkYXRhLnNoYXJlTWV0YWRhdGEpfSksbi5ib3RNZW50aW9uUmVzcG9uc2VNZXRhZGF0YT12b2lkIDAhPT1lLmJvdE1lbnRpb25SZXNwb25zZU1ldGFkYXRhJiZudWxsIT09ZS5ib3RNZW50aW9uUmVzcG9uc2VNZXRhZGF0YT90LkNvbnRlbnRFbnZlbG9wZV9Cb3RNZW50aW9uUmVzcG9uc2VNZXRhZGF0YS5mcm9tUGFydGlhbChlLmJvdE1lbnRpb25SZXNwb25zZU1ldGFkYXRhKTp2b2lkIDAsbn19LHQuQ29udGVudEVudmVsb3BlX1JlbW90ZU1lZGlhSW5mbz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpjLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiY29udGVudE9iamVjdFwiPT09ZS5tZWRpYUluZm8/LiRjYXNlJiZ0LnVpbnQzMigxMCkuYnl0ZXMoZS5tZWRpYUluZm8uY29udGVudE9iamVjdCksXCJsZWdhY3lNZWRpYUlkXCI9PT1lLm1lZGlhSW5mbz8uJGNhc2UmJnQudWludDMyKDE4KS5zdHJpbmcoZS5tZWRpYUluZm8ubGVnYWN5TWVkaWFJZCksXCJjb250ZW50VXJsXCI9PT1lLm1lZGlhSW5mbz8uJGNhc2UmJnQudWludDMyKDQyKS5zdHJpbmcoZS5tZWRpYUluZm8uY29udGVudFVybCksMCE9PWUubWVkaWFUeXBlJiZ0LnVpbnQzMigyNCkuaW50MzIoZS5tZWRpYVR5cGUpLCEwPT09ZS5oYXNBdWRpbyYmdC51aW50MzIoMzIpLmJvb2woZS5oYXNBdWRpbyksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBjLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXttZWRpYUluZm86dm9pZCAwLG1lZGlhVHlwZTowLGhhc0F1ZGlvOiExfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5tZWRpYUluZm89eyRjYXNlOlwiY29udGVudE9iamVjdFwiLGNvbnRlbnRPYmplY3Q6bi5ieXRlcygpfTticmVhaztjYXNlIDI6aS5tZWRpYUluZm89eyRjYXNlOlwibGVnYWN5TWVkaWFJZFwiLGxlZ2FjeU1lZGlhSWQ6bi5zdHJpbmcoKX07YnJlYWs7Y2FzZSA1OmkubWVkaWFJbmZvPXskY2FzZTpcImNvbnRlbnRVcmxcIixjb250ZW50VXJsOm4uc3RyaW5nKCl9O2JyZWFrO2Nhc2UgMzppLm1lZGlhVHlwZT1uLmludDMyKCk7YnJlYWs7Y2FzZSA0OmkuaGFzQXVkaW89bi5ib29sKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXttZWRpYUluZm86dm9pZCAwLG1lZGlhVHlwZTowLGhhc0F1ZGlvOiExfTtyZXR1cm5cImNvbnRlbnRPYmplY3RcIj09PWUubWVkaWFJbmZvPy4kY2FzZSYmdm9pZCAwIT09ZS5tZWRpYUluZm8/LmNvbnRlbnRPYmplY3QmJm51bGwhPT1lLm1lZGlhSW5mbz8uY29udGVudE9iamVjdCYmKHQubWVkaWFJbmZvPXskY2FzZTpcImNvbnRlbnRPYmplY3RcIixjb250ZW50T2JqZWN0OmUubWVkaWFJbmZvLmNvbnRlbnRPYmplY3R9KSxcImxlZ2FjeU1lZGlhSWRcIj09PWUubWVkaWFJbmZvPy4kY2FzZSYmdm9pZCAwIT09ZS5tZWRpYUluZm8/LmxlZ2FjeU1lZGlhSWQmJm51bGwhPT1lLm1lZGlhSW5mbz8ubGVnYWN5TWVkaWFJZCYmKHQubWVkaWFJbmZvPXskY2FzZTpcImxlZ2FjeU1lZGlhSWRcIixsZWdhY3lNZWRpYUlkOmUubWVkaWFJbmZvLmxlZ2FjeU1lZGlhSWR9KSxcImNvbnRlbnRVcmxcIj09PWUubWVkaWFJbmZvPy4kY2FzZSYmdm9pZCAwIT09ZS5tZWRpYUluZm8/LmNvbnRlbnRVcmwmJm51bGwhPT1lLm1lZGlhSW5mbz8uY29udGVudFVybCYmKHQubWVkaWFJbmZvPXskY2FzZTpcImNvbnRlbnRVcmxcIixjb250ZW50VXJsOmUubWVkaWFJbmZvLmNvbnRlbnRVcmx9KSx0Lm1lZGlhVHlwZT1lLm1lZGlhVHlwZT8/MCx0Lmhhc0F1ZGlvPWUuaGFzQXVkaW8/PyExLHR9fSx0LkNvbnRlbnRFbnZlbG9wZV9NZWRpYVJlZmVyZW5jZUxpc3Q9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Yy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgbiBvZiBlLm1lZGlhUmVmZXJlbmNlKW8uTWVkaWFSZWZlcmVuY2UuZW5jb2RlKG4sdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17bWVkaWFSZWZlcmVuY2U6W119O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLm1lZGlhUmVmZXJlbmNlLnB1c2goby5NZWRpYVJlZmVyZW5jZS5kZWNvZGUobixuLnVpbnQzMigpKSk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXttZWRpYVJlZmVyZW5jZTpbXX07cmV0dXJuIHQubWVkaWFSZWZlcmVuY2U9ZS5tZWRpYVJlZmVyZW5jZT8ubWFwKChlPT5vLk1lZGlhUmVmZXJlbmNlLmZyb21QYXJ0aWFsKGUpKSl8fFtdLHR9fSx0LkNvbnRlbnRFbnZlbG9wZV9EaXNwbGF5SW5mbz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpjLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiEwPT09ZS5oYXNBdWRpbyYmdC51aW50MzIoOCkuYm9vbChlLmhhc0F1ZGlvKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBjLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2hhc0F1ZGlvOiExfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/aS5oYXNBdWRpbz1uLmJvb2woKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2hhc0F1ZGlvOiExfTtyZXR1cm4gdC5oYXNBdWRpbz1lLmhhc0F1ZGlvPz8hMSx0fX0sdC5Db250ZW50RW52ZWxvcGVfVGh1bWJuYWlscz17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpjLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO2Zvcihjb25zdCByIG9mIGUudGh1bWJuYWlscyl0LlRodW1ibmFpbEluZm8uZW5jb2RlKHIsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17dGh1bWJuYWlsczpbXX07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO2U+Pj4zPT0xP28udGh1bWJuYWlscy5wdXNoKHQuVGh1bWJuYWlsSW5mby5kZWNvZGUocixyLnVpbnQzMigpKSk6ci5za2lwVHlwZSg3JmUpfXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXt0aHVtYm5haWxzOltdfTtyZXR1cm4gbi50aHVtYm5haWxzPWUudGh1bWJuYWlscz8ubWFwKChlPT50LlRodW1ibmFpbEluZm8uZnJvbVBhcnRpYWwoZSkpKXx8W10sbn19LHQuQ29udGVudEVudmVsb3BlX0ZlZWREaXNwbGF5SW5mbz17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpjLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwic25hcERpc3BsYXlJbmZvXCI9PT1lLmZlZWREaXNwbGF5SW5mbz8uJGNhc2UmJnQuU25hcERpc3BsYXlJbmZvLmVuY29kZShlLmZlZWREaXNwbGF5SW5mby5zbmFwRGlzcGxheUluZm8sbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksXCJzdGF0dXNNZXNzYWdlRGlzcGxheUluZm9cIj09PWUuZmVlZERpc3BsYXlJbmZvPy4kY2FzZSYmdC5TdGF0dXNNZXNzYWdlRGlzcGxheUluZm8uZW5jb2RlKGUuZmVlZERpc3BsYXlJbmZvLnN0YXR1c01lc3NhZ2VEaXNwbGF5SW5mbyxuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSxcImV4dGVybmFsTWVkaWFEaXNwbGF5SW5mb1wiPT09ZS5mZWVkRGlzcGxheUluZm8/LiRjYXNlJiZ0LkV4dGVybmFsTWVkaWFEaXNwbGF5SW5mby5lbmNvZGUoZS5mZWVkRGlzcGxheUluZm8uZXh0ZXJuYWxNZWRpYURpc3BsYXlJbmZvLG4udWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLFwic2hhcmVEaXNwbGF5SW5mb1wiPT09ZS5mZWVkRGlzcGxheUluZm8/LiRjYXNlJiZ0LlNoYXJlRGlzcGxheUluZm8uZW5jb2RlKGUuZmVlZERpc3BsYXlJbmZvLnNoYXJlRGlzcGxheUluZm8sbi51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgYy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBjLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXtmZWVkRGlzcGxheUluZm86dm9pZCAwfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5mZWVkRGlzcGxheUluZm89eyRjYXNlOlwic25hcERpc3BsYXlJbmZvXCIsc25hcERpc3BsYXlJbmZvOnQuU25hcERpc3BsYXlJbmZvLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDI6by5mZWVkRGlzcGxheUluZm89eyRjYXNlOlwic3RhdHVzTWVzc2FnZURpc3BsYXlJbmZvXCIsc3RhdHVzTWVzc2FnZURpc3BsYXlJbmZvOnQuU3RhdHVzTWVzc2FnZURpc3BsYXlJbmZvLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDM6by5mZWVkRGlzcGxheUluZm89eyRjYXNlOlwiZXh0ZXJuYWxNZWRpYURpc3BsYXlJbmZvXCIsZXh0ZXJuYWxNZWRpYURpc3BsYXlJbmZvOnQuRXh0ZXJuYWxNZWRpYURpc3BsYXlJbmZvLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDQ6by5mZWVkRGlzcGxheUluZm89eyRjYXNlOlwic2hhcmVEaXNwbGF5SW5mb1wiLHNoYXJlRGlzcGxheUluZm86dC5TaGFyZURpc3BsYXlJbmZvLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e2ZlZWREaXNwbGF5SW5mbzp2b2lkIDB9O3JldHVyblwic25hcERpc3BsYXlJbmZvXCI9PT1lLmZlZWREaXNwbGF5SW5mbz8uJGNhc2UmJnZvaWQgMCE9PWUuZmVlZERpc3BsYXlJbmZvPy5zbmFwRGlzcGxheUluZm8mJm51bGwhPT1lLmZlZWREaXNwbGF5SW5mbz8uc25hcERpc3BsYXlJbmZvJiYobi5mZWVkRGlzcGxheUluZm89eyRjYXNlOlwic25hcERpc3BsYXlJbmZvXCIsc25hcERpc3BsYXlJbmZvOnQuU25hcERpc3BsYXlJbmZvLmZyb21QYXJ0aWFsKGUuZmVlZERpc3BsYXlJbmZvLnNuYXBEaXNwbGF5SW5mbyl9KSxcInN0YXR1c01lc3NhZ2VEaXNwbGF5SW5mb1wiPT09ZS5mZWVkRGlzcGxheUluZm8/LiRjYXNlJiZ2b2lkIDAhPT1lLmZlZWREaXNwbGF5SW5mbz8uc3RhdHVzTWVzc2FnZURpc3BsYXlJbmZvJiZudWxsIT09ZS5mZWVkRGlzcGxheUluZm8/LnN0YXR1c01lc3NhZ2VEaXNwbGF5SW5mbyYmKG4uZmVlZERpc3BsYXlJbmZvPXskY2FzZTpcInN0YXR1c01lc3NhZ2VEaXNwbGF5SW5mb1wiLHN0YXR1c01lc3NhZ2VEaXNwbGF5SW5mbzp0LlN0YXR1c01lc3NhZ2VEaXNwbGF5SW5mby5mcm9tUGFydGlhbChlLmZlZWREaXNwbGF5SW5mby5zdGF0dXNNZXNzYWdlRGlzcGxheUluZm8pfSksXCJleHRlcm5hbE1lZGlhRGlzcGxheUluZm9cIj09PWUuZmVlZERpc3BsYXlJbmZvPy4kY2FzZSYmdm9pZCAwIT09ZS5mZWVkRGlzcGxheUluZm8/LmV4dGVybmFsTWVkaWFEaXNwbGF5SW5mbyYmbnVsbCE9PWUuZmVlZERpc3BsYXlJbmZvPy5leHRlcm5hbE1lZGlhRGlzcGxheUluZm8mJihuLmZlZWREaXNwbGF5SW5mbz17JGNhc2U6XCJleHRlcm5hbE1lZGlhRGlzcGxheUluZm9cIixleHRlcm5hbE1lZGlhRGlzcGxheUluZm86dC5FeHRlcm5hbE1lZGlhRGlzcGxheUluZm8uZnJvbVBhcnRpYWwoZS5mZWVkRGlzcGxheUluZm8uZXh0ZXJuYWxNZWRpYURpc3BsYXlJbmZvKX0pLFwic2hhcmVEaXNwbGF5SW5mb1wiPT09ZS5mZWVkRGlzcGxheUluZm8/LiRjYXNlJiZ2b2lkIDAhPT1lLmZlZWREaXNwbGF5SW5mbz8uc2hhcmVEaXNwbGF5SW5mbyYmbnVsbCE9PWUuZmVlZERpc3BsYXlJbmZvPy5zaGFyZURpc3BsYXlJbmZvJiYobi5mZWVkRGlzcGxheUluZm89eyRjYXNlOlwic2hhcmVEaXNwbGF5SW5mb1wiLHNoYXJlRGlzcGxheUluZm86dC5TaGFyZURpc3BsYXlJbmZvLmZyb21QYXJ0aWFsKGUuZmVlZERpc3BsYXlJbmZvLnNoYXJlRGlzcGxheUluZm8pfSksbn19LHQuQ29udGVudEVudmVsb3BlX0JvdE1lbnRpb25SZXNwb25zZU1ldGFkYXRhPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUucmVxdWVzdGVySWQmJmEuVVVJRC5lbmNvZGUoZS5yZXF1ZXN0ZXJJZCx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSxcIjBcIiE9PWUucmVxdWVzdE1lc3NhZ2VJZCYmdC51aW50MzIoMTYpLnVpbnQ2NChlLnJlcXVlc3RNZXNzYWdlSWQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17cmVxdWVzdGVySWQ6dm9pZCAwLHJlcXVlc3RNZXNzYWdlSWQ6XCIwXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnJlcXVlc3RlcklkPWEuVVVJRC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDI6aS5yZXF1ZXN0TWVzc2FnZUlkPW4udWludDY0KCkudG9TdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3JlcXVlc3RlcklkOnZvaWQgMCxyZXF1ZXN0TWVzc2FnZUlkOlwiMFwifTtyZXR1cm4gdC5yZXF1ZXN0ZXJJZD12b2lkIDAhPT1lLnJlcXVlc3RlcklkJiZudWxsIT09ZS5yZXF1ZXN0ZXJJZD9hLlVVSUQuZnJvbVBhcnRpYWwoZS5yZXF1ZXN0ZXJJZCk6dm9pZCAwLHQucmVxdWVzdE1lc3NhZ2VJZD1lLnJlcXVlc3RNZXNzYWdlSWQ/P1wiMFwiLHR9fSx0LlNuYXBSZXBseU1ldGFkYXRhPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLnN0b3J5TWVkaWFTdGF0ZSYmdC51aW50MzIoOCkuaW50MzIoZS5zdG9yeU1lZGlhU3RhdGUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17c3RvcnlNZWRpYVN0YXRlOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLnN0b3J5TWVkaWFTdGF0ZT1uLmludDMyKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtzdG9yeU1lZGlhU3RhdGU6MH07cmV0dXJuIHQuc3RvcnlNZWRpYVN0YXRlPWUuc3RvcnlNZWRpYVN0YXRlPz8wLHR9fSx0LlNoYXJlTWV0YWRhdGE9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Yy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUuc3RvcnlNZWRpYVN0YXRlJiZ0LnVpbnQzMig4KS5pbnQzMihlLnN0b3J5TWVkaWFTdGF0ZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBjLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtzdG9yeU1lZGlhU3RhdGU6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2kuc3RvcnlNZWRpYVN0YXRlPW4uaW50MzIoKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3N0b3J5TWVkaWFTdGF0ZTowfTtyZXR1cm4gdC5zdG9yeU1lZGlhU3RhdGU9ZS5zdG9yeU1lZGlhU3RhdGU/PzAsdH19LHQuVGh1bWJuYWlsSW5mbz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpjLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLm1lZGlhSWQmJnMuTWVkaWFJZC5lbmNvZGUoZS5tZWRpYUlkLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLm1lZGlhUmVmZXJlbmNlTGlzdEluZGV4JiZ0LnVpbnQzMigxNikudWludDMyKGUubWVkaWFSZWZlcmVuY2VMaXN0SW5kZXgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17bWVkaWFJZDp2b2lkIDAsbWVkaWFSZWZlcmVuY2VMaXN0SW5kZXg6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkubWVkaWFJZD1zLk1lZGlhSWQuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOmkubWVkaWFSZWZlcmVuY2VMaXN0SW5kZXg9bi51aW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e21lZGlhSWQ6dm9pZCAwLG1lZGlhUmVmZXJlbmNlTGlzdEluZGV4OjB9O3JldHVybiB0Lm1lZGlhSWQ9dm9pZCAwIT09ZS5tZWRpYUlkJiZudWxsIT09ZS5tZWRpYUlkP3MuTWVkaWFJZC5mcm9tUGFydGlhbChlLm1lZGlhSWQpOnZvaWQgMCx0Lm1lZGlhUmVmZXJlbmNlTGlzdEluZGV4PWUubWVkaWFSZWZlcmVuY2VMaXN0SW5kZXg/PzAsdH19LHQuVHJhbnNjcmlwdGlvbkluZm89e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Yy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5tZWRpYUlkJiZzLk1lZGlhSWQuZW5jb2RlKGUubWVkaWFJZCx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS5tZWRpYVJlZmVyZW5jZUxpc3RJbmRleCYmdC51aW50MzIoMTYpLnVpbnQzMihlLm1lZGlhUmVmZXJlbmNlTGlzdEluZGV4KSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBjLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e21lZGlhSWQ6dm9pZCAwLG1lZGlhUmVmZXJlbmNlTGlzdEluZGV4OjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLm1lZGlhSWQ9cy5NZWRpYUlkLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMjppLm1lZGlhUmVmZXJlbmNlTGlzdEluZGV4PW4udWludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXttZWRpYUlkOnZvaWQgMCxtZWRpYVJlZmVyZW5jZUxpc3RJbmRleDowfTtyZXR1cm4gdC5tZWRpYUlkPXZvaWQgMCE9PWUubWVkaWFJZCYmbnVsbCE9PWUubWVkaWFJZD9zLk1lZGlhSWQuZnJvbVBhcnRpYWwoZS5tZWRpYUlkKTp2b2lkIDAsdC5tZWRpYVJlZmVyZW5jZUxpc3RJbmRleD1lLm1lZGlhUmVmZXJlbmNlTGlzdEluZGV4Pz8wLHR9fSx0LkVudmVsb3BlRW5jcnlwdGlvbj17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpjLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwibm9uZVwiPT09ZS5lbmNyeXB0aW9uPy4kY2FzZSYmbC5FbXB0eS5lbmNvZGUoZS5lbmNyeXB0aW9uLm5vbmUsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksXCJjb252ZXJzYXRpb25WMVwiPT09ZS5lbmNyeXB0aW9uPy4kY2FzZSYmdC5Db252ZXJzYXRpb25FbnZlbG9wZUVuY3J5cHRpb25WMS5lbmNvZGUoZS5lbmNyeXB0aW9uLmNvbnZlcnNhdGlvblYxLG4udWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLFwiZmlkZWxpdXNcIj09PWUuZW5jcnlwdGlvbj8uJGNhc2UmJnQuRmlkZWxpdXNFbmNyeXB0aW9uLmVuY29kZShlLmVuY3J5cHRpb24uZmlkZWxpdXMsbi51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCksXCJjbGVhclRleHRNZWRpYUtleVwiPT09ZS5lbmNyeXB0aW9uPy4kY2FzZSYmdC5DbGVhclRleHRNZWRpYUtleUVuY3J5cHRpb24uZW5jb2RlKGUuZW5jcnlwdGlvbi5jbGVhclRleHRNZWRpYUtleSxuLnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKSxcImVlbFwiPT09ZS5lbmNyeXB0aW9uPy4kY2FzZSYmdC5FZWxFbmNyeXB0aW9uLmVuY29kZShlLmVuY3J5cHRpb24uZWVsLG4udWludDMyKDQyKS5mb3JrKCkpLmxkZWxpbSgpLFwiY2xlYXJUZXh0RWVsS2V5XCI9PT1lLmVuY3J5cHRpb24/LiRjYXNlJiZ0LkNsZWFyVGV4dEVlbEtleUVuY3J5cHRpb24uZW5jb2RlKGUuZW5jcnlwdGlvbi5jbGVhclRleHRFZWxLZXksbi51aW50MzIoNTApLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgYy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBjLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXtlbmNyeXB0aW9uOnZvaWQgMH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8uZW5jcnlwdGlvbj17JGNhc2U6XCJub25lXCIsbm9uZTpsLkVtcHR5LmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDI6by5lbmNyeXB0aW9uPXskY2FzZTpcImNvbnZlcnNhdGlvblYxXCIsY29udmVyc2F0aW9uVjE6dC5Db252ZXJzYXRpb25FbnZlbG9wZUVuY3J5cHRpb25WMS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAzOm8uZW5jcnlwdGlvbj17JGNhc2U6XCJmaWRlbGl1c1wiLGZpZGVsaXVzOnQuRmlkZWxpdXNFbmNyeXB0aW9uLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDQ6by5lbmNyeXB0aW9uPXskY2FzZTpcImNsZWFyVGV4dE1lZGlhS2V5XCIsY2xlYXJUZXh0TWVkaWFLZXk6dC5DbGVhclRleHRNZWRpYUtleUVuY3J5cHRpb24uZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgNTpvLmVuY3J5cHRpb249eyRjYXNlOlwiZWVsXCIsZWVsOnQuRWVsRW5jcnlwdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA2Om8uZW5jcnlwdGlvbj17JGNhc2U6XCJjbGVhclRleHRFZWxLZXlcIixjbGVhclRleHRFZWxLZXk6dC5DbGVhclRleHRFZWxLZXlFbmNyeXB0aW9uLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e2VuY3J5cHRpb246dm9pZCAwfTtyZXR1cm5cIm5vbmVcIj09PWUuZW5jcnlwdGlvbj8uJGNhc2UmJnZvaWQgMCE9PWUuZW5jcnlwdGlvbj8ubm9uZSYmbnVsbCE9PWUuZW5jcnlwdGlvbj8ubm9uZSYmKG4uZW5jcnlwdGlvbj17JGNhc2U6XCJub25lXCIsbm9uZTpsLkVtcHR5LmZyb21QYXJ0aWFsKGUuZW5jcnlwdGlvbi5ub25lKX0pLFwiY29udmVyc2F0aW9uVjFcIj09PWUuZW5jcnlwdGlvbj8uJGNhc2UmJnZvaWQgMCE9PWUuZW5jcnlwdGlvbj8uY29udmVyc2F0aW9uVjEmJm51bGwhPT1lLmVuY3J5cHRpb24/LmNvbnZlcnNhdGlvblYxJiYobi5lbmNyeXB0aW9uPXskY2FzZTpcImNvbnZlcnNhdGlvblYxXCIsY29udmVyc2F0aW9uVjE6dC5Db252ZXJzYXRpb25FbnZlbG9wZUVuY3J5cHRpb25WMS5mcm9tUGFydGlhbChlLmVuY3J5cHRpb24uY29udmVyc2F0aW9uVjEpfSksXCJmaWRlbGl1c1wiPT09ZS5lbmNyeXB0aW9uPy4kY2FzZSYmdm9pZCAwIT09ZS5lbmNyeXB0aW9uPy5maWRlbGl1cyYmbnVsbCE9PWUuZW5jcnlwdGlvbj8uZmlkZWxpdXMmJihuLmVuY3J5cHRpb249eyRjYXNlOlwiZmlkZWxpdXNcIixmaWRlbGl1czp0LkZpZGVsaXVzRW5jcnlwdGlvbi5mcm9tUGFydGlhbChlLmVuY3J5cHRpb24uZmlkZWxpdXMpfSksXCJjbGVhclRleHRNZWRpYUtleVwiPT09ZS5lbmNyeXB0aW9uPy4kY2FzZSYmdm9pZCAwIT09ZS5lbmNyeXB0aW9uPy5jbGVhclRleHRNZWRpYUtleSYmbnVsbCE9PWUuZW5jcnlwdGlvbj8uY2xlYXJUZXh0TWVkaWFLZXkmJihuLmVuY3J5cHRpb249eyRjYXNlOlwiY2xlYXJUZXh0TWVkaWFLZXlcIixjbGVhclRleHRNZWRpYUtleTp0LkNsZWFyVGV4dE1lZGlhS2V5RW5jcnlwdGlvbi5mcm9tUGFydGlhbChlLmVuY3J5cHRpb24uY2xlYXJUZXh0TWVkaWFLZXkpfSksXCJlZWxcIj09PWUuZW5jcnlwdGlvbj8uJGNhc2UmJnZvaWQgMCE9PWUuZW5jcnlwdGlvbj8uZWVsJiZudWxsIT09ZS5lbmNyeXB0aW9uPy5lZWwmJihuLmVuY3J5cHRpb249eyRjYXNlOlwiZWVsXCIsZWVsOnQuRWVsRW5jcnlwdGlvbi5mcm9tUGFydGlhbChlLmVuY3J5cHRpb24uZWVsKX0pLFwiY2xlYXJUZXh0RWVsS2V5XCI9PT1lLmVuY3J5cHRpb24/LiRjYXNlJiZ2b2lkIDAhPT1lLmVuY3J5cHRpb24/LmNsZWFyVGV4dEVlbEtleSYmbnVsbCE9PWUuZW5jcnlwdGlvbj8uY2xlYXJUZXh0RWVsS2V5JiYobi5lbmNyeXB0aW9uPXskY2FzZTpcImNsZWFyVGV4dEVlbEtleVwiLGNsZWFyVGV4dEVlbEtleTp0LkNsZWFyVGV4dEVlbEtleUVuY3J5cHRpb24uZnJvbVBhcnRpYWwoZS5lbmNyeXB0aW9uLmNsZWFyVGV4dEVlbEtleSl9KSxufX0sdC5FZWxFbmNyeXB0aW9uPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLmNla0l2Lmxlbmd0aCYmdC51aW50MzIoMTApLmJ5dGVzKGUuY2VrSXYpLDAhPT1lLm5vbmNlLmxlbmd0aCYmdC51aW50MzIoMTgpLmJ5dGVzKGUubm9uY2UpLDAhPT1lLnNlbmRlclB1YmxpY0tleS5sZW5ndGgmJnQudWludDMyKDI2KS5ieXRlcyhlLnNlbmRlclB1YmxpY0tleSksMCE9PWUuc2VuZGVyVmVyc2lvbiYmdC51aW50MzIoMzIpLmludDMyKGUuc2VuZGVyVmVyc2lvbiksMCE9PWUuY2VrLmxlbmd0aCYmdC51aW50MzIoMTMwKS5ieXRlcyhlLmNlayksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBjLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPWQoKTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5jZWtJdj1uLmJ5dGVzKCk7YnJlYWs7Y2FzZSAyOmkubm9uY2U9bi5ieXRlcygpO2JyZWFrO2Nhc2UgMzppLnNlbmRlclB1YmxpY0tleT1uLmJ5dGVzKCk7YnJlYWs7Y2FzZSA0Omkuc2VuZGVyVmVyc2lvbj1uLmludDMyKCk7YnJlYWs7Y2FzZSAxNjppLmNlaz1uLmJ5dGVzKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PWQoKTtyZXR1cm4gdC5jZWtJdj1lLmNla0l2Pz9uZXcgVWludDhBcnJheSx0Lm5vbmNlPWUubm9uY2U/P25ldyBVaW50OEFycmF5LHQuc2VuZGVyUHVibGljS2V5PWUuc2VuZGVyUHVibGljS2V5Pz9uZXcgVWludDhBcnJheSx0LnNlbmRlclZlcnNpb249ZS5zZW5kZXJWZXJzaW9uPz8wLHQuY2VrPWUuY2VrPz9uZXcgVWludDhBcnJheSx0fX0sdC5Db252ZXJzYXRpb25FbnZlbG9wZUVuY3J5cHRpb25WMT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpjLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5pdi5sZW5ndGgmJnQudWludDMyKDEwKS5ieXRlcyhlLml2KSwwIT09ZS5ub25jZS5sZW5ndGgmJnQudWludDMyKDE4KS5ieXRlcyhlLm5vbmNlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBjLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9ZigpO2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLml2PW4uYnl0ZXMoKTticmVhaztjYXNlIDI6aS5ub25jZT1uLmJ5dGVzKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PWYoKTtyZXR1cm4gdC5pdj1lLml2Pz9uZXcgVWludDhBcnJheSx0Lm5vbmNlPWUubm9uY2U/P25ldyBVaW50OEFycmF5LHR9fSx0LkZpZGVsaXVzRW5jcnlwdGlvbj17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpjLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpOzAhPT1lLnNuYXBLZXkubGVuZ3RoJiZuLnVpbnQzMigxMCkuYnl0ZXMoZS5zbmFwS2V5KSwwIT09ZS5zbmFwSXYubGVuZ3RoJiZuLnVpbnQzMigxOCkuYnl0ZXMoZS5zbmFwSXYpLCEwPT09ZS5yZXRyaWVkJiZuLnVpbnQzMigyNCkuYm9vbChlLnJldHJpZWQpLDAhPT1lLnZlcnNpb24mJm4udWludDMyKDMyKS51aW50MzIoZS52ZXJzaW9uKSwwIT09ZS5zZW5kZXJPdXRCZXRhLmxlbmd0aCYmbi51aW50MzIoNDIpLmJ5dGVzKGUuc2VuZGVyT3V0QmV0YSk7Zm9yKGNvbnN0IHIgb2YgZS5maWRlbGl1c1JlY2lwaWVudEluZm8pdC5GaWRlbGl1c1JlY2lwaWVudEluZm8uZW5jb2RlKHIsbi51aW50MzIoNTApLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz1wKCk7Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8uc25hcEtleT1yLmJ5dGVzKCk7YnJlYWs7Y2FzZSAyOm8uc25hcEl2PXIuYnl0ZXMoKTticmVhaztjYXNlIDM6by5yZXRyaWVkPXIuYm9vbCgpO2JyZWFrO2Nhc2UgNDpvLnZlcnNpb249ci51aW50MzIoKTticmVhaztjYXNlIDU6by5zZW5kZXJPdXRCZXRhPXIuYnl0ZXMoKTticmVhaztjYXNlIDY6by5maWRlbGl1c1JlY2lwaWVudEluZm8ucHVzaCh0LkZpZGVsaXVzUmVjaXBpZW50SW5mby5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXAoKTtyZXR1cm4gbi5zbmFwS2V5PWUuc25hcEtleT8/bmV3IFVpbnQ4QXJyYXksbi5zbmFwSXY9ZS5zbmFwSXY/P25ldyBVaW50OEFycmF5LG4ucmV0cmllZD1lLnJldHJpZWQ/PyExLG4udmVyc2lvbj1lLnZlcnNpb24/PzAsbi5zZW5kZXJPdXRCZXRhPWUuc2VuZGVyT3V0QmV0YT8/bmV3IFVpbnQ4QXJyYXksbi5maWRlbGl1c1JlY2lwaWVudEluZm89ZS5maWRlbGl1c1JlY2lwaWVudEluZm8/Lm1hcCgoZT0+dC5GaWRlbGl1c1JlY2lwaWVudEluZm8uZnJvbVBhcnRpYWwoZSkpKXx8W10sbn19LHQuRmlkZWxpdXNSZWNpcGllbnRJbmZvPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLnJlY2lwaWVudEtleS5sZW5ndGgmJnQudWludDMyKDEwKS5ieXRlcyhlLnJlY2lwaWVudEtleSksMCE9PWUubmEubGVuZ3RoJiZ0LnVpbnQzMigxOCkuYnl0ZXMoZS5uYSksMCE9PWUucGhpLmxlbmd0aCYmdC51aW50MzIoMjYpLmJ5dGVzKGUucGhpKSwwIT09ZS50YWcubGVuZ3RoJiZ0LnVpbnQzMigzNCkuYnl0ZXMoZS50YWcpLHZvaWQgMCE9PWUuc2VuZGVyVXNlcklkJiZhLlVVSUQuZW5jb2RlKGUuc2VuZGVyVXNlcklkLHQudWludDMyKDQyKS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUucmVjaXBpZW50VXNlcklkJiZhLlVVSUQuZW5jb2RlKGUucmVjaXBpZW50VXNlcklkLHQudWludDMyKDUwKS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLnJlY2lwaWVudFZlcnNpb24mJnQudWludDMyKDU2KS51aW50MzIoZS5yZWNpcGllbnRWZXJzaW9uKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBjLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9bSgpO2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnJlY2lwaWVudEtleT1uLmJ5dGVzKCk7YnJlYWs7Y2FzZSAyOmkubmE9bi5ieXRlcygpO2JyZWFrO2Nhc2UgMzppLnBoaT1uLmJ5dGVzKCk7YnJlYWs7Y2FzZSA0OmkudGFnPW4uYnl0ZXMoKTticmVhaztjYXNlIDU6aS5zZW5kZXJVc2VySWQ9YS5VVUlELmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgNjppLnJlY2lwaWVudFVzZXJJZD1hLlVVSUQuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSA3OmkucmVjaXBpZW50VmVyc2lvbj1uLnVpbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD1tKCk7cmV0dXJuIHQucmVjaXBpZW50S2V5PWUucmVjaXBpZW50S2V5Pz9uZXcgVWludDhBcnJheSx0Lm5hPWUubmE/P25ldyBVaW50OEFycmF5LHQucGhpPWUucGhpPz9uZXcgVWludDhBcnJheSx0LnRhZz1lLnRhZz8/bmV3IFVpbnQ4QXJyYXksdC5zZW5kZXJVc2VySWQ9dm9pZCAwIT09ZS5zZW5kZXJVc2VySWQmJm51bGwhPT1lLnNlbmRlclVzZXJJZD9hLlVVSUQuZnJvbVBhcnRpYWwoZS5zZW5kZXJVc2VySWQpOnZvaWQgMCx0LnJlY2lwaWVudFVzZXJJZD12b2lkIDAhPT1lLnJlY2lwaWVudFVzZXJJZCYmbnVsbCE9PWUucmVjaXBpZW50VXNlcklkP2EuVVVJRC5mcm9tUGFydGlhbChlLnJlY2lwaWVudFVzZXJJZCk6dm9pZCAwLHQucmVjaXBpZW50VmVyc2lvbj1lLnJlY2lwaWVudFZlcnNpb24/PzAsdH19LHQuQ2xlYXJUZXh0TWVkaWFLZXlFbmNyeXB0aW9uPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLm1lZGlhS2V5Lmxlbmd0aCYmdC51aW50MzIoMTApLmJ5dGVzKGUubWVkaWFLZXkpLDAhPT1lLm1lZGlhSXYubGVuZ3RoJiZ0LnVpbnQzMigxOCkuYnl0ZXMoZS5tZWRpYUl2KSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBjLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9aCgpO2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLm1lZGlhS2V5PW4uYnl0ZXMoKTticmVhaztjYXNlIDI6aS5tZWRpYUl2PW4uYnl0ZXMoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9aCgpO3JldHVybiB0Lm1lZGlhS2V5PWUubWVkaWFLZXk/P25ldyBVaW50OEFycmF5LHQubWVkaWFJdj1lLm1lZGlhSXY/P25ldyBVaW50OEFycmF5LHR9fSx0LkNsZWFyVGV4dEVlbEtleUVuY3J5cHRpb249e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Yy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUuY2VrSXYubGVuZ3RoJiZ0LnVpbnQzMigxMCkuYnl0ZXMoZS5jZWtJdiksMCE9PWUuY2VrLmxlbmd0aCYmdC51aW50MzIoMTgpLmJ5dGVzKGUuY2VrKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBjLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9digpO2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmNla0l2PW4uYnl0ZXMoKTticmVhaztjYXNlIDI6aS5jZWs9bi5ieXRlcygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD12KCk7cmV0dXJuIHQuY2VrSXY9ZS5jZWtJdj8/bmV3IFVpbnQ4QXJyYXksdC5jZWs9ZS5jZWs/P25ldyBVaW50OEFycmF5LHR9fSx0LlNuYXBEaXNwbGF5SW5mbz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpjLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiEwPT09ZS5oYXNBdWRpbyYmdC51aW50MzIoOCkuYm9vbChlLmhhc0F1ZGlvKSwhMD09PWUubm90Vmlld2FibGUmJnQudWludDMyKDE2KS5ib29sKGUubm90Vmlld2FibGUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17aGFzQXVkaW86ITEsbm90Vmlld2FibGU6ITF9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmhhc0F1ZGlvPW4uYm9vbCgpO2JyZWFrO2Nhc2UgMjppLm5vdFZpZXdhYmxlPW4uYm9vbCgpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17aGFzQXVkaW86ITEsbm90Vmlld2FibGU6ITF9O3JldHVybiB0Lmhhc0F1ZGlvPWUuaGFzQXVkaW8/PyExLHQubm90Vmlld2FibGU9ZS5ub3RWaWV3YWJsZT8/ITEsdH19LHQuRXh0ZXJuYWxNZWRpYURpc3BsYXlJbmZvPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJkZWZhdWx0XCI9PT1lLm1lZGlhPy4kY2FzZSYmdC5FeHRlcm5hbE1lZGlhRGVmYXVsdERpc3BsYXlJbmZvLmVuY29kZShlLm1lZGlhLmRlZmF1bHQsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksXCJnaWZ0XCI9PT1lLm1lZGlhPy4kY2FzZSYmdC5FeHRlcm5hbE1lZGlhR2lmdERpc3BsYXlJbmZvLmVuY29kZShlLm1lZGlhLmdpZnQsbi51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgYy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBjLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXttZWRpYTp2b2lkIDB9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLm1lZGlhPXskY2FzZTpcImRlZmF1bHRcIixkZWZhdWx0OnQuRXh0ZXJuYWxNZWRpYURlZmF1bHREaXNwbGF5SW5mby5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAyOm8ubWVkaWE9eyRjYXNlOlwiZ2lmdFwiLGdpZnQ6dC5FeHRlcm5hbE1lZGlhR2lmdERpc3BsYXlJbmZvLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e21lZGlhOnZvaWQgMH07cmV0dXJuXCJkZWZhdWx0XCI9PT1lLm1lZGlhPy4kY2FzZSYmdm9pZCAwIT09ZS5tZWRpYT8uZGVmYXVsdCYmbnVsbCE9PWUubWVkaWE/LmRlZmF1bHQmJihuLm1lZGlhPXskY2FzZTpcImRlZmF1bHRcIixkZWZhdWx0OnQuRXh0ZXJuYWxNZWRpYURlZmF1bHREaXNwbGF5SW5mby5mcm9tUGFydGlhbChlLm1lZGlhLmRlZmF1bHQpfSksXCJnaWZ0XCI9PT1lLm1lZGlhPy4kY2FzZSYmdm9pZCAwIT09ZS5tZWRpYT8uZ2lmdCYmbnVsbCE9PWUubWVkaWE/LmdpZnQmJihuLm1lZGlhPXskY2FzZTpcImdpZnRcIixnaWZ0OnQuRXh0ZXJuYWxNZWRpYUdpZnREaXNwbGF5SW5mby5mcm9tUGFydGlhbChlLm1lZGlhLmdpZnQpfSksbn19LHQuU2hhcmVEaXNwbGF5SW5mbz17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpjLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwic2F2ZWRTdG9yeVwiPT09ZS5zaGFyZT8uJGNhc2UmJnQuU2hhcmVTYXZlZFN0b3J5RGlzcGxheUluZm8uZW5jb2RlKGUuc2hhcmUuc2F2ZWRTdG9yeSxuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBjLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89e3NoYXJlOnZvaWQgMH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO2U+Pj4zPT0xP28uc2hhcmU9eyRjYXNlOlwic2F2ZWRTdG9yeVwiLHNhdmVkU3Rvcnk6dC5TaGFyZVNhdmVkU3RvcnlEaXNwbGF5SW5mby5kZWNvZGUocixyLnVpbnQzMigpKX06ci5za2lwVHlwZSg3JmUpfXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtzaGFyZTp2b2lkIDB9O3JldHVyblwic2F2ZWRTdG9yeVwiPT09ZS5zaGFyZT8uJGNhc2UmJnZvaWQgMCE9PWUuc2hhcmU/LnNhdmVkU3RvcnkmJm51bGwhPT1lLnNoYXJlPy5zYXZlZFN0b3J5JiYobi5zaGFyZT17JGNhc2U6XCJzYXZlZFN0b3J5XCIsc2F2ZWRTdG9yeTp0LlNoYXJlU2F2ZWRTdG9yeURpc3BsYXlJbmZvLmZyb21QYXJ0aWFsKGUuc2hhcmUuc2F2ZWRTdG9yeSl9KSxufX0sdC5FeHRlcm5hbE1lZGlhRGVmYXVsdERpc3BsYXlJbmZvPXtlbmNvZGUoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpjLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpfSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBjLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtuLnNraXBUeXBlKDcmZSl9cmV0dXJue319LGZyb21QYXJ0aWFsOmU9Pih7fSl9LHQuRXh0ZXJuYWxNZWRpYUdpZnREaXNwbGF5SW5mbz17ZW5jb2RlKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Yy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKX0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBjLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7bi5za2lwVHlwZSg3JmUpfXJldHVybnt9fSxmcm9tUGFydGlhbDplPT4oe30pfSx0LlNoYXJlU2F2ZWRTdG9yeURpc3BsYXlJbmZvPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuITA9PT1lLmhhc0F1ZGlvJiZ0LnVpbnQzMig4KS5ib29sKGUuaGFzQXVkaW8pLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17aGFzQXVkaW86ITF9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLmhhc0F1ZGlvPW4uYm9vbCgpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17aGFzQXVkaW86ITF9O3JldHVybiB0Lmhhc0F1ZGlvPWUuaGFzQXVkaW8/PyExLHR9fSx0LlN0YXR1c01lc3NhZ2VEaXNwbGF5SW5mbz17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpjLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwic2NyZWVuQ2FwdHVyZVwiPT09ZS5zdGF0dXM/LiRjYXNlJiZ0LlN0YXR1c1NjcmVlbkNhcHR1cmVEaXNwbGF5SW5mby5lbmNvZGUoZS5zdGF0dXMuc2NyZWVuQ2FwdHVyZSxuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSxcImNhbGxpbmdTdGF0dXNcIj09PWUuc3RhdHVzPy4kY2FzZSYmdC5TdGF0dXNDYWxsaW5nU3RhdHVzRGlzcGxheUluZm8uZW5jb2RlKGUuc3RhdHVzLmNhbGxpbmdTdGF0dXMsbi51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksXCJjaGFuZ2VQYXJ0aWNpcGFudFwiPT09ZS5zdGF0dXM/LiRjYXNlJiZ0LlN0YXR1c1BhcnRpY2lwYW50QWRkRGlzcGxheUluZm8uZW5jb2RlKGUuc3RhdHVzLmNoYW5nZVBhcnRpY2lwYW50LG4udWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLFwibmFtZUNoYW5nZVwiPT09ZS5zdGF0dXM/LiRjYXNlJiZ0LlN0YXR1c05hbWVDaGFuZ2VEaXNwbGF5SW5mby5lbmNvZGUoZS5zdGF0dXMubmFtZUNoYW5nZSxuLnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKSxcInNhdmVUb0NhbWVyYVJvbGxcIj09PWUuc3RhdHVzPy4kY2FzZSYmdC5TdGF0dXNTYXZlVG9DYW1lcmFSb2xsRGlzcGxheUluZm8uZW5jb2RlKGUuc3RhdHVzLnNhdmVUb0NhbWVyYVJvbGwsbi51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKCksXCJpbk15Q29udGFjdHNcIj09PWUuc3RhdHVzPy4kY2FzZSYmdC5TdGF0dXNJbk15Q29udGFjdHNEaXNwbGF5SW5mby5lbmNvZGUoZS5zdGF0dXMuaW5NeUNvbnRhY3RzLG4udWludDMyKDUwKS5mb3JrKCkpLmxkZWxpbSgpLFwiZ2VuZXJpY0NoYXRcIj09PWUuc3RhdHVzPy4kY2FzZSYmdC5TdGF0dXNHZW5lcmljQ2hhdC5lbmNvZGUoZS5zdGF0dXMuZ2VuZXJpY0NoYXQsbi51aW50MzIoNTgpLmZvcmsoKSkubGRlbGltKCksXCJraWNrUGFydGljaXBhbnRcIj09PWUuc3RhdHVzPy4kY2FzZSYmdC5TdGF0dXNQYXJ0aWNpcGFudEtpY2tEaXNwbGF5SW5mby5lbmNvZGUoZS5zdGF0dXMua2lja1BhcnRpY2lwYW50LG4udWludDMyKDY2KS5mb3JrKCkpLmxkZWxpbSgpLFwiZ3JvdXBDcmVhdGVkXCI9PT1lLnN0YXR1cz8uJGNhc2UmJnQuU3RhdHVzR3JvdXBDaGF0Q3JlYXRlZERpc3BsYXlJbmZvLmVuY29kZShlLnN0YXR1cy5ncm91cENyZWF0ZWQsbi51aW50MzIoNzQpLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgYy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBjLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXtzdGF0dXM6dm9pZCAwfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5zdGF0dXM9eyRjYXNlOlwic2NyZWVuQ2FwdHVyZVwiLHNjcmVlbkNhcHR1cmU6dC5TdGF0dXNTY3JlZW5DYXB0dXJlRGlzcGxheUluZm8uZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMjpvLnN0YXR1cz17JGNhc2U6XCJjYWxsaW5nU3RhdHVzXCIsY2FsbGluZ1N0YXR1czp0LlN0YXR1c0NhbGxpbmdTdGF0dXNEaXNwbGF5SW5mby5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAzOm8uc3RhdHVzPXskY2FzZTpcImNoYW5nZVBhcnRpY2lwYW50XCIsY2hhbmdlUGFydGljaXBhbnQ6dC5TdGF0dXNQYXJ0aWNpcGFudEFkZERpc3BsYXlJbmZvLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDQ6by5zdGF0dXM9eyRjYXNlOlwibmFtZUNoYW5nZVwiLG5hbWVDaGFuZ2U6dC5TdGF0dXNOYW1lQ2hhbmdlRGlzcGxheUluZm8uZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgNTpvLnN0YXR1cz17JGNhc2U6XCJzYXZlVG9DYW1lcmFSb2xsXCIsc2F2ZVRvQ2FtZXJhUm9sbDp0LlN0YXR1c1NhdmVUb0NhbWVyYVJvbGxEaXNwbGF5SW5mby5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA2Om8uc3RhdHVzPXskY2FzZTpcImluTXlDb250YWN0c1wiLGluTXlDb250YWN0czp0LlN0YXR1c0luTXlDb250YWN0c0Rpc3BsYXlJbmZvLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDc6by5zdGF0dXM9eyRjYXNlOlwiZ2VuZXJpY0NoYXRcIixnZW5lcmljQ2hhdDp0LlN0YXR1c0dlbmVyaWNDaGF0LmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDg6by5zdGF0dXM9eyRjYXNlOlwia2lja1BhcnRpY2lwYW50XCIsa2lja1BhcnRpY2lwYW50OnQuU3RhdHVzUGFydGljaXBhbnRLaWNrRGlzcGxheUluZm8uZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgOTpvLnN0YXR1cz17JGNhc2U6XCJncm91cENyZWF0ZWRcIixncm91cENyZWF0ZWQ6dC5TdGF0dXNHcm91cENoYXRDcmVhdGVkRGlzcGxheUluZm8uZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17c3RhdHVzOnZvaWQgMH07cmV0dXJuXCJzY3JlZW5DYXB0dXJlXCI9PT1lLnN0YXR1cz8uJGNhc2UmJnZvaWQgMCE9PWUuc3RhdHVzPy5zY3JlZW5DYXB0dXJlJiZudWxsIT09ZS5zdGF0dXM/LnNjcmVlbkNhcHR1cmUmJihuLnN0YXR1cz17JGNhc2U6XCJzY3JlZW5DYXB0dXJlXCIsc2NyZWVuQ2FwdHVyZTp0LlN0YXR1c1NjcmVlbkNhcHR1cmVEaXNwbGF5SW5mby5mcm9tUGFydGlhbChlLnN0YXR1cy5zY3JlZW5DYXB0dXJlKX0pLFwiY2FsbGluZ1N0YXR1c1wiPT09ZS5zdGF0dXM/LiRjYXNlJiZ2b2lkIDAhPT1lLnN0YXR1cz8uY2FsbGluZ1N0YXR1cyYmbnVsbCE9PWUuc3RhdHVzPy5jYWxsaW5nU3RhdHVzJiYobi5zdGF0dXM9eyRjYXNlOlwiY2FsbGluZ1N0YXR1c1wiLGNhbGxpbmdTdGF0dXM6dC5TdGF0dXNDYWxsaW5nU3RhdHVzRGlzcGxheUluZm8uZnJvbVBhcnRpYWwoZS5zdGF0dXMuY2FsbGluZ1N0YXR1cyl9KSxcImNoYW5nZVBhcnRpY2lwYW50XCI9PT1lLnN0YXR1cz8uJGNhc2UmJnZvaWQgMCE9PWUuc3RhdHVzPy5jaGFuZ2VQYXJ0aWNpcGFudCYmbnVsbCE9PWUuc3RhdHVzPy5jaGFuZ2VQYXJ0aWNpcGFudCYmKG4uc3RhdHVzPXskY2FzZTpcImNoYW5nZVBhcnRpY2lwYW50XCIsY2hhbmdlUGFydGljaXBhbnQ6dC5TdGF0dXNQYXJ0aWNpcGFudEFkZERpc3BsYXlJbmZvLmZyb21QYXJ0aWFsKGUuc3RhdHVzLmNoYW5nZVBhcnRpY2lwYW50KX0pLFwibmFtZUNoYW5nZVwiPT09ZS5zdGF0dXM/LiRjYXNlJiZ2b2lkIDAhPT1lLnN0YXR1cz8ubmFtZUNoYW5nZSYmbnVsbCE9PWUuc3RhdHVzPy5uYW1lQ2hhbmdlJiYobi5zdGF0dXM9eyRjYXNlOlwibmFtZUNoYW5nZVwiLG5hbWVDaGFuZ2U6dC5TdGF0dXNOYW1lQ2hhbmdlRGlzcGxheUluZm8uZnJvbVBhcnRpYWwoZS5zdGF0dXMubmFtZUNoYW5nZSl9KSxcInNhdmVUb0NhbWVyYVJvbGxcIj09PWUuc3RhdHVzPy4kY2FzZSYmdm9pZCAwIT09ZS5zdGF0dXM/LnNhdmVUb0NhbWVyYVJvbGwmJm51bGwhPT1lLnN0YXR1cz8uc2F2ZVRvQ2FtZXJhUm9sbCYmKG4uc3RhdHVzPXskY2FzZTpcInNhdmVUb0NhbWVyYVJvbGxcIixzYXZlVG9DYW1lcmFSb2xsOnQuU3RhdHVzU2F2ZVRvQ2FtZXJhUm9sbERpc3BsYXlJbmZvLmZyb21QYXJ0aWFsKGUuc3RhdHVzLnNhdmVUb0NhbWVyYVJvbGwpfSksXCJpbk15Q29udGFjdHNcIj09PWUuc3RhdHVzPy4kY2FzZSYmdm9pZCAwIT09ZS5zdGF0dXM/LmluTXlDb250YWN0cyYmbnVsbCE9PWUuc3RhdHVzPy5pbk15Q29udGFjdHMmJihuLnN0YXR1cz17JGNhc2U6XCJpbk15Q29udGFjdHNcIixpbk15Q29udGFjdHM6dC5TdGF0dXNJbk15Q29udGFjdHNEaXNwbGF5SW5mby5mcm9tUGFydGlhbChlLnN0YXR1cy5pbk15Q29udGFjdHMpfSksXCJnZW5lcmljQ2hhdFwiPT09ZS5zdGF0dXM/LiRjYXNlJiZ2b2lkIDAhPT1lLnN0YXR1cz8uZ2VuZXJpY0NoYXQmJm51bGwhPT1lLnN0YXR1cz8uZ2VuZXJpY0NoYXQmJihuLnN0YXR1cz17JGNhc2U6XCJnZW5lcmljQ2hhdFwiLGdlbmVyaWNDaGF0OnQuU3RhdHVzR2VuZXJpY0NoYXQuZnJvbVBhcnRpYWwoZS5zdGF0dXMuZ2VuZXJpY0NoYXQpfSksXCJraWNrUGFydGljaXBhbnRcIj09PWUuc3RhdHVzPy4kY2FzZSYmdm9pZCAwIT09ZS5zdGF0dXM/LmtpY2tQYXJ0aWNpcGFudCYmbnVsbCE9PWUuc3RhdHVzPy5raWNrUGFydGljaXBhbnQmJihuLnN0YXR1cz17JGNhc2U6XCJraWNrUGFydGljaXBhbnRcIixraWNrUGFydGljaXBhbnQ6dC5TdGF0dXNQYXJ0aWNpcGFudEtpY2tEaXNwbGF5SW5mby5mcm9tUGFydGlhbChlLnN0YXR1cy5raWNrUGFydGljaXBhbnQpfSksXCJncm91cENyZWF0ZWRcIj09PWUuc3RhdHVzPy4kY2FzZSYmdm9pZCAwIT09ZS5zdGF0dXM/Lmdyb3VwQ3JlYXRlZCYmbnVsbCE9PWUuc3RhdHVzPy5ncm91cENyZWF0ZWQmJihuLnN0YXR1cz17JGNhc2U6XCJncm91cENyZWF0ZWRcIixncm91cENyZWF0ZWQ6dC5TdGF0dXNHcm91cENoYXRDcmVhdGVkRGlzcGxheUluZm8uZnJvbVBhcnRpYWwoZS5zdGF0dXMuZ3JvdXBDcmVhdGVkKX0pLG59fSx0LlN0YXR1c1NjcmVlbkNhcHR1cmVEaXNwbGF5SW5mbz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpjLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5jYXB0dXJlVHlwZSYmdC51aW50MzIoOCkuaW50MzIoZS5jYXB0dXJlVHlwZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBjLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtjYXB0dXJlVHlwZTowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/aS5jYXB0dXJlVHlwZT1uLmludDMyKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtjYXB0dXJlVHlwZTowfTtyZXR1cm4gdC5jYXB0dXJlVHlwZT1lLmNhcHR1cmVUeXBlPz8wLHR9fSx0LlN0YXR1c0NhbGxpbmdTdGF0dXNEaXNwbGF5SW5mbz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpjLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5jYWxsU3RhdHVzJiZ0LnVpbnQzMig4KS5pbnQzMihlLmNhbGxTdGF0dXMpLDAhPT1lLmNhbGxUeXBlJiZ0LnVpbnQzMigxNikuaW50MzIoZS5jYWxsVHlwZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBjLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtjYWxsU3RhdHVzOjAsY2FsbFR5cGU6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuY2FsbFN0YXR1cz1uLmludDMyKCk7YnJlYWs7Y2FzZSAyOmkuY2FsbFR5cGU9bi5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17Y2FsbFN0YXR1czowLGNhbGxUeXBlOjB9O3JldHVybiB0LmNhbGxTdGF0dXM9ZS5jYWxsU3RhdHVzPz8wLHQuY2FsbFR5cGU9ZS5jYWxsVHlwZT8/MCx0fX0sdC5TdGF0dXNQYXJ0aWNpcGFudEFkZERpc3BsYXlJbmZvPXtlbmNvZGUoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpjLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpfSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBjLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtuLnNraXBUeXBlKDcmZSl9cmV0dXJue319LGZyb21QYXJ0aWFsOmU9Pih7fSl9LHQuU3RhdHVzUGFydGljaXBhbnRLaWNrRGlzcGxheUluZm89e2VuY29kZShlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCl9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO24uc2tpcFR5cGUoNyZlKX1yZXR1cm57fX0sZnJvbVBhcnRpYWw6ZT0+KHt9KX0sdC5TdGF0dXNOYW1lQ2hhbmdlRGlzcGxheUluZm89e2VuY29kZShlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCl9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO24uc2tpcFR5cGUoNyZlKX1yZXR1cm57fX0sZnJvbVBhcnRpYWw6ZT0+KHt9KX0sdC5TdGF0dXNTYXZlVG9DYW1lcmFSb2xsRGlzcGxheUluZm89e2VuY29kZShlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCl9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO24uc2tpcFR5cGUoNyZlKX1yZXR1cm57fX0sZnJvbVBhcnRpYWw6ZT0+KHt9KX0sdC5TdGF0dXNHcm91cENoYXRDcmVhdGVkRGlzcGxheUluZm89e2VuY29kZShlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCl9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO24uc2tpcFR5cGUoNyZlKX1yZXR1cm57fX0sZnJvbVBhcnRpYWw6ZT0+KHt9KX0sdC5TdGF0dXNJbk15Q29udGFjdHNEaXNwbGF5SW5mbz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpjLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLnJlY2VudGx5Sm9pbmVkVXNlcklkJiZhLlVVSUQuZW5jb2RlKGUucmVjZW50bHlKb2luZWRVc2VySWQsdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBjLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtyZWNlbnRseUpvaW5lZFVzZXJJZDp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLnJlY2VudGx5Sm9pbmVkVXNlcklkPWEuVVVJRC5kZWNvZGUobixuLnVpbnQzMigpKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3JlY2VudGx5Sm9pbmVkVXNlcklkOnZvaWQgMH07cmV0dXJuIHQucmVjZW50bHlKb2luZWRVc2VySWQ9dm9pZCAwIT09ZS5yZWNlbnRseUpvaW5lZFVzZXJJZCYmbnVsbCE9PWUucmVjZW50bHlKb2luZWRVc2VySWQ/YS5VVUlELmZyb21QYXJ0aWFsKGUucmVjZW50bHlKb2luZWRVc2VySWQpOnZvaWQgMCx0fX0sdC5TdGF0dXNHZW5lcmljQ2hhdD17ZW5jb2RlKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Yy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKX0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBjLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7bi5za2lwVHlwZSg3JmUpfXJldHVybnt9fSxmcm9tUGFydGlhbDplPT4oe30pfSx0LlRyYW5zY3JpcHRpb25zPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7Zm9yKGNvbnN0IHIgb2YgZS50cmFuc2NyaXB0aW9ucyl0LlRyYW5zY3JpcHRpb25JbmZvLmVuY29kZShyLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiBufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBjLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89e3RyYW5zY3JpcHRpb25zOltdfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7ZT4+PjM9PTE/by50cmFuc2NyaXB0aW9ucy5wdXNoKHQuVHJhbnNjcmlwdGlvbkluZm8uZGVjb2RlKHIsci51aW50MzIoKSkpOnIuc2tpcFR5cGUoNyZlKX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17dHJhbnNjcmlwdGlvbnM6W119O3JldHVybiBuLnRyYW5zY3JpcHRpb25zPWUudHJhbnNjcmlwdGlvbnM/Lm1hcCgoZT0+dC5UcmFuc2NyaXB0aW9uSW5mby5mcm9tUGFydGlhbChlKSkpfHxbXSxufX0sdC5BdWRpb05vdGVNZXRhZGF0YT17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpjLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiEwPT09ZS5hbGxvd3NUcmFuc2NyaXB0aW9uJiZuLnVpbnQzMig4KS5ib29sKGUuYWxsb3dzVHJhbnNjcmlwdGlvbiksdm9pZCAwIT09ZS50cmFuc2NyaXB0aW9ucyYmdC5UcmFuc2NyaXB0aW9ucy5lbmNvZGUoZS50cmFuc2NyaXB0aW9ucyxuLnVpbnQzMig4MikuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBjLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89e2FsbG93c1RyYW5zY3JpcHRpb246ITEsdHJhbnNjcmlwdGlvbnM6dm9pZCAwfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5hbGxvd3NUcmFuc2NyaXB0aW9uPXIuYm9vbCgpO2JyZWFrO2Nhc2UgMTA6by50cmFuc2NyaXB0aW9ucz10LlRyYW5zY3JpcHRpb25zLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17YWxsb3dzVHJhbnNjcmlwdGlvbjohMSx0cmFuc2NyaXB0aW9uczp2b2lkIDB9O3JldHVybiBuLmFsbG93c1RyYW5zY3JpcHRpb249ZS5hbGxvd3NUcmFuc2NyaXB0aW9uPz8hMSxuLnRyYW5zY3JpcHRpb25zPXZvaWQgMCE9PWUudHJhbnNjcmlwdGlvbnMmJm51bGwhPT1lLnRyYW5zY3JpcHRpb25zP3QuVHJhbnNjcmlwdGlvbnMuZnJvbVBhcnRpYWwoZS50cmFuc2NyaXB0aW9ucyk6dm9pZCAwLG59fSxjLmRlZmF1bHQudXRpbC5Mb25nIT09aS5kZWZhdWx0JiYoYy5kZWZhdWx0LnV0aWwuTG9uZz1pLmRlZmF1bHQsYy5kZWZhdWx0LmNvbmZpZ3VyZSgpKX0sODUwMzg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTWVkaWFCdW5kbGVFeHRyYU1ldGFkYXRhPXQuTWVkaWFWYXJpYW50RW50aXR5PXQuTWVkaWFWYXJpYW50RW50aXR5X0NyZWF0aW9uU291cmNlPXZvaWQgMDtjb25zdCBpPXIobig0MTU4MykpLG89bigyNTEyKSxhPW4oOTc5NDkpLHM9bigyMzk3KSxjPW4oNjU3NjQpLGw9big2NDQ5KSx1PW4oNTU4ODgpLGQ9big2MDY4MyksZj1yKG4oNjIxMDApKSxwPW4oNTMwNTYpO2Z1bmN0aW9uIG0oKXtyZXR1cm57ZXhjbHVkZVNvdXJjZTohMSxhbHdheXNJbmNsdWRlU291cmNlOiExLGlzU291cmNlTWVkaWFaaXBwZWQ6ITEsaXNVbmVuY3J5cHRlZE91dHB1dDp2b2lkIDAsY2FsbGJhY2s6dm9pZCAwLGNhbGxiYWNrUGFzc3Rocm91Z2hEYXRhOm5ldyBVaW50OEFycmF5LGFzeW5jTm90aWZpY2F0aW9uOnZvaWQgMCxleHBlZGl0ZU5vdGlmaWNhdGlvbnM6ITEsYXN5bmNOb3RpZmljYXRpb25JbmNsdWRlTWVkaWFPcHRpbWl6YXRpb25EZXRhaWxzOiExLGFzeW5jQ2FsbGJhY2tDb3VudGVyOjAscmV0dXJuQ29udGVudFVybERlZmF1bHRWYXJpYW50TWV0YWRhdGE6ITEsZmVhdHVyZUNvbnRlbnRUeXBlOjAsY29mQ29uZmlndXJhdGlvbktleTpcIlwiLHVzZUNhc2U6MCxleHRlcm5hbElkOlwiXCIsY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbjowLG1lZGlhQnVuZGxlSWRDb3BpZWRGcm9tOlwiXCIsbmVlZEZvbGxvd1VwQ2hlY2s6ITEscmVxdWVzdEluaXRUaW1lTWlsbGlzOlwiMFwiLHB1Ymxpc2hlcklkOlwiXCIsYmFzZUNvbnRlbnRJZDpcIlwifX1mdW5jdGlvbiBoKGUpe3JldHVybiBlLnRvU3RyaW5nKCl9dmFyIHY7KHY9dC5NZWRpYVZhcmlhbnRFbnRpdHlfQ3JlYXRpb25Tb3VyY2V8fCh0Lk1lZGlhVmFyaWFudEVudGl0eV9DcmVhdGlvblNvdXJjZT17fSkpW3YuVU5LTk9XTj0wXT1cIlVOS05PV05cIix2W3YuTkVXX01FRElBX0NPTlZFUlNJT049MV09XCJORVdfTUVESUFfQ09OVkVSU0lPTlwiLHZbdi5SRVVTRV9FWElTVElOR19WQVJJQU5UPTJdPVwiUkVVU0VfRVhJU1RJTkdfVkFSSUFOVFwiLHZbdi5DT1BZPTNdPVwiQ09QWVwiLHZbdi5GRUFUVVJFX1ZFTkRFRD00XT1cIkZFQVRVUkVfVkVOREVEXCIsdlt2LlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0Lk1lZGlhVmFyaWFudEVudGl0eT17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpmLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3ZvaWQgMCE9PWUubWVkaWFWYXJpYW50JiZvLk1lZGlhVmFyaWFudC5lbmNvZGUoZS5tZWRpYVZhcmlhbnQsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksITA9PT1lLnJlcXVpcmVkJiZuLnVpbnQzMigxNikuYm9vbChlLnJlcXVpcmVkKSxcIlwiIT09ZS5tZWRpYUJ1bmRsZUlkJiZuLnVpbnQzMigyNikuc3RyaW5nKGUubWVkaWFCdW5kbGVJZCksdm9pZCAwIT09ZS5leHRyYU1ldGFkYXRhJiZ0Lk1lZGlhQnVuZGxlRXh0cmFNZXRhZGF0YS5lbmNvZGUoZS5leHRyYU1ldGFkYXRhLG4udWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuYWJyVm9kT3V0cHV0TWVkaWEmJmEuQWJyVm9kT3V0cHV0TWVkaWEuZW5jb2RlKGUuYWJyVm9kT3V0cHV0TWVkaWEsbi51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKCksXCJcIiE9PWUucHJpbWFyeUNvbnRlbnRVcmwmJm4udWludDMyKDUwKS5zdHJpbmcoZS5wcmltYXJ5Q29udGVudFVybCksXCIwXCIhPT1lLmNvbnRlbnRFeHBpcnlUaW1lTWlsbGlzJiZuLnVpbnQzMig1NikudWludDY0KGUuY29udGVudEV4cGlyeVRpbWVNaWxsaXMpLFwiMFwiIT09ZS5jcmVhdGlvblRpbWVNaWxsaXMmJm4udWludDMyKDY0KS51aW50NjQoZS5jcmVhdGlvblRpbWVNaWxsaXMpLFwiMFwiIT09ZS5sYXN0VXBkYXRlZFRpbWVNaWxsaXMmJm4udWludDMyKDcyKS51aW50NjQoZS5sYXN0VXBkYXRlZFRpbWVNaWxsaXMpLDAhPT1lLm1lZGlhQ29udmVyc2lvbkNvZGUmJm4udWludDMyKDgwKS5pbnQzMihlLm1lZGlhQ29udmVyc2lvbkNvZGUpLHZvaWQgMCE9PWUuY2xhaW1Qb2xpY3kmJnMuQ2xhaW1Qb2xpY3kuZW5jb2RlKGUuY2xhaW1Qb2xpY3ksbi51aW50MzIoOTApLmZvcmsoKSkubGRlbGltKCksMCE9PWUuY3JlYXRpb25Tb3VyY2UmJm4udWludDMyKDk2KS5pbnQzMihlLmNyZWF0aW9uU291cmNlKSwwIT09ZS51c2VDYXNlJiZuLnVpbnQzMigxMDQpLnVpbnQzMihlLnVzZUNhc2UpLCEwPT09ZS5va1JlcXVpcmVkTm90UHJvZHVjZWQmJm4udWludDMyKDExMikuYm9vbChlLm9rUmVxdWlyZWROb3RQcm9kdWNlZCksXCJcIiE9PWUub3B0aW1pc3RpY0NvbnRlbnRJZCYmbi51aW50MzIoMTIyKS5zdHJpbmcoZS5vcHRpbWlzdGljQ29udGVudElkKSxuLnVpbnQzMigxMzApLmZvcmsoKTtmb3IoY29uc3QgdCBvZiBlLm9wdGltaXN0aWNSZWFkeUxvY2F0aW9uSWRzKW4udWludDY0KHQpO24ubGRlbGltKCksdm9pZCAwIT09ZS5vcHRpbWlzdGljUHJlY2xhaW1lZFVwbG9hZExvY2F0aW9uJiZjLlVwbG9hZExvY2F0aW9uLmVuY29kZShlLm9wdGltaXN0aWNQcmVjbGFpbWVkVXBsb2FkTG9jYXRpb24sbi51aW50MzIoMTM4KS5mb3JrKCkpLmxkZWxpbSgpLFwiMFwiIT09ZS52ZXJzaW9uJiZuLnVpbnQzMigxNDQpLnVpbnQ2NChlLnZlcnNpb24pLFwiXCIhPT1lLmVycm9yTWVzc2FnZSYmbi51aW50MzIoMTU0KS5zdHJpbmcoZS5lcnJvck1lc3NhZ2UpLCEwPT09ZS51c2VWYXJpYW50TnVtYmVyQXNLZXkmJm4udWludDMyKDE2MCkuYm9vbChlLnVzZVZhcmlhbnROdW1iZXJBc0tleSk7Zm9yKGNvbnN0IHQgb2YgZS5jbGFpbVBvbGljeVVwZGF0ZXMpbC5VcGRhdGVDbGFpbVBvbGljeS5lbmNvZGUodCxuLnVpbnQzMigxNzApLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIDAhPT1lLmNvbnRlbnRSZWZlcmVuY2VFeHBpcnlUaW1lJiZuLnVpbnQzMigxNzYpLmludDMyKGUuY29udGVudFJlZmVyZW5jZUV4cGlyeVRpbWUpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGYuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgZi5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3QgdT17bWVkaWFWYXJpYW50OnZvaWQgMCxyZXF1aXJlZDohMSxtZWRpYUJ1bmRsZUlkOlwiXCIsZXh0cmFNZXRhZGF0YTp2b2lkIDAsYWJyVm9kT3V0cHV0TWVkaWE6dm9pZCAwLHByaW1hcnlDb250ZW50VXJsOlwiXCIsY29udGVudEV4cGlyeVRpbWVNaWxsaXM6XCIwXCIsY3JlYXRpb25UaW1lTWlsbGlzOlwiMFwiLGxhc3RVcGRhdGVkVGltZU1pbGxpczpcIjBcIixtZWRpYUNvbnZlcnNpb25Db2RlOjAsY2xhaW1Qb2xpY3k6dm9pZCAwLGNyZWF0aW9uU291cmNlOjAsdXNlQ2FzZTowLG9rUmVxdWlyZWROb3RQcm9kdWNlZDohMSxvcHRpbWlzdGljQ29udGVudElkOlwiXCIsb3B0aW1pc3RpY1JlYWR5TG9jYXRpb25JZHM6W10sb3B0aW1pc3RpY1ByZWNsYWltZWRVcGxvYWRMb2NhdGlvbjp2b2lkIDAsdmVyc2lvbjpcIjBcIixlcnJvck1lc3NhZ2U6XCJcIix1c2VWYXJpYW50TnVtYmVyQXNLZXk6ITEsY2xhaW1Qb2xpY3lVcGRhdGVzOltdLGNvbnRlbnRSZWZlcmVuY2VFeHBpcnlUaW1lOjB9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTp1Lm1lZGlhVmFyaWFudD1vLk1lZGlhVmFyaWFudC5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDI6dS5yZXF1aXJlZD1yLmJvb2woKTticmVhaztjYXNlIDM6dS5tZWRpYUJ1bmRsZUlkPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSA0OnUuZXh0cmFNZXRhZGF0YT10Lk1lZGlhQnVuZGxlRXh0cmFNZXRhZGF0YS5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDU6dS5hYnJWb2RPdXRwdXRNZWRpYT1hLkFiclZvZE91dHB1dE1lZGlhLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgNjp1LnByaW1hcnlDb250ZW50VXJsPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSA3OnUuY29udGVudEV4cGlyeVRpbWVNaWxsaXM9aChyLnVpbnQ2NCgpKTticmVhaztjYXNlIDg6dS5jcmVhdGlvblRpbWVNaWxsaXM9aChyLnVpbnQ2NCgpKTticmVhaztjYXNlIDk6dS5sYXN0VXBkYXRlZFRpbWVNaWxsaXM9aChyLnVpbnQ2NCgpKTticmVhaztjYXNlIDEwOnUubWVkaWFDb252ZXJzaW9uQ29kZT1yLmludDMyKCk7YnJlYWs7Y2FzZSAxMTp1LmNsYWltUG9saWN5PXMuQ2xhaW1Qb2xpY3kuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAxMjp1LmNyZWF0aW9uU291cmNlPXIuaW50MzIoKTticmVhaztjYXNlIDEzOnUudXNlQ2FzZT1yLnVpbnQzMigpO2JyZWFrO2Nhc2UgMTQ6dS5va1JlcXVpcmVkTm90UHJvZHVjZWQ9ci5ib29sKCk7YnJlYWs7Y2FzZSAxNTp1Lm9wdGltaXN0aWNDb250ZW50SWQ9ci5zdHJpbmcoKTticmVhaztjYXNlIDE2OmlmKDI9PSg3JmUpKXtjb25zdCBlPXIudWludDMyKCkrci5wb3M7Zm9yKDtyLnBvczxlOyl1Lm9wdGltaXN0aWNSZWFkeUxvY2F0aW9uSWRzLnB1c2goaChyLnVpbnQ2NCgpKSl9ZWxzZSB1Lm9wdGltaXN0aWNSZWFkeUxvY2F0aW9uSWRzLnB1c2goaChyLnVpbnQ2NCgpKSk7YnJlYWs7Y2FzZSAxNzp1Lm9wdGltaXN0aWNQcmVjbGFpbWVkVXBsb2FkTG9jYXRpb249Yy5VcGxvYWRMb2NhdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDE4OnUudmVyc2lvbj1oKHIudWludDY0KCkpO2JyZWFrO2Nhc2UgMTk6dS5lcnJvck1lc3NhZ2U9ci5zdHJpbmcoKTticmVhaztjYXNlIDIwOnUudXNlVmFyaWFudE51bWJlckFzS2V5PXIuYm9vbCgpO2JyZWFrO2Nhc2UgMjE6dS5jbGFpbVBvbGljeVVwZGF0ZXMucHVzaChsLlVwZGF0ZUNsYWltUG9saWN5LmRlY29kZShyLHIudWludDMyKCkpKTticmVhaztjYXNlIDIyOnUuY29udGVudFJlZmVyZW5jZUV4cGlyeVRpbWU9ci5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gdX0sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17bWVkaWFWYXJpYW50OnZvaWQgMCxyZXF1aXJlZDohMSxtZWRpYUJ1bmRsZUlkOlwiXCIsZXh0cmFNZXRhZGF0YTp2b2lkIDAsYWJyVm9kT3V0cHV0TWVkaWE6dm9pZCAwLHByaW1hcnlDb250ZW50VXJsOlwiXCIsY29udGVudEV4cGlyeVRpbWVNaWxsaXM6XCIwXCIsY3JlYXRpb25UaW1lTWlsbGlzOlwiMFwiLGxhc3RVcGRhdGVkVGltZU1pbGxpczpcIjBcIixtZWRpYUNvbnZlcnNpb25Db2RlOjAsY2xhaW1Qb2xpY3k6dm9pZCAwLGNyZWF0aW9uU291cmNlOjAsdXNlQ2FzZTowLG9rUmVxdWlyZWROb3RQcm9kdWNlZDohMSxvcHRpbWlzdGljQ29udGVudElkOlwiXCIsb3B0aW1pc3RpY1JlYWR5TG9jYXRpb25JZHM6W10sb3B0aW1pc3RpY1ByZWNsYWltZWRVcGxvYWRMb2NhdGlvbjp2b2lkIDAsdmVyc2lvbjpcIjBcIixlcnJvck1lc3NhZ2U6XCJcIix1c2VWYXJpYW50TnVtYmVyQXNLZXk6ITEsY2xhaW1Qb2xpY3lVcGRhdGVzOltdLGNvbnRlbnRSZWZlcmVuY2VFeHBpcnlUaW1lOjB9O3JldHVybiBuLm1lZGlhVmFyaWFudD12b2lkIDAhPT1lLm1lZGlhVmFyaWFudCYmbnVsbCE9PWUubWVkaWFWYXJpYW50P28uTWVkaWFWYXJpYW50LmZyb21QYXJ0aWFsKGUubWVkaWFWYXJpYW50KTp2b2lkIDAsbi5yZXF1aXJlZD1lLnJlcXVpcmVkPz8hMSxuLm1lZGlhQnVuZGxlSWQ9ZS5tZWRpYUJ1bmRsZUlkPz9cIlwiLG4uZXh0cmFNZXRhZGF0YT12b2lkIDAhPT1lLmV4dHJhTWV0YWRhdGEmJm51bGwhPT1lLmV4dHJhTWV0YWRhdGE/dC5NZWRpYUJ1bmRsZUV4dHJhTWV0YWRhdGEuZnJvbVBhcnRpYWwoZS5leHRyYU1ldGFkYXRhKTp2b2lkIDAsbi5hYnJWb2RPdXRwdXRNZWRpYT12b2lkIDAhPT1lLmFiclZvZE91dHB1dE1lZGlhJiZudWxsIT09ZS5hYnJWb2RPdXRwdXRNZWRpYT9hLkFiclZvZE91dHB1dE1lZGlhLmZyb21QYXJ0aWFsKGUuYWJyVm9kT3V0cHV0TWVkaWEpOnZvaWQgMCxuLnByaW1hcnlDb250ZW50VXJsPWUucHJpbWFyeUNvbnRlbnRVcmw/P1wiXCIsbi5jb250ZW50RXhwaXJ5VGltZU1pbGxpcz1lLmNvbnRlbnRFeHBpcnlUaW1lTWlsbGlzPz9cIjBcIixuLmNyZWF0aW9uVGltZU1pbGxpcz1lLmNyZWF0aW9uVGltZU1pbGxpcz8/XCIwXCIsbi5sYXN0VXBkYXRlZFRpbWVNaWxsaXM9ZS5sYXN0VXBkYXRlZFRpbWVNaWxsaXM/P1wiMFwiLG4ubWVkaWFDb252ZXJzaW9uQ29kZT1lLm1lZGlhQ29udmVyc2lvbkNvZGU/PzAsbi5jbGFpbVBvbGljeT12b2lkIDAhPT1lLmNsYWltUG9saWN5JiZudWxsIT09ZS5jbGFpbVBvbGljeT9zLkNsYWltUG9saWN5LmZyb21QYXJ0aWFsKGUuY2xhaW1Qb2xpY3kpOnZvaWQgMCxuLmNyZWF0aW9uU291cmNlPWUuY3JlYXRpb25Tb3VyY2U/PzAsbi51c2VDYXNlPWUudXNlQ2FzZT8/MCxuLm9rUmVxdWlyZWROb3RQcm9kdWNlZD1lLm9rUmVxdWlyZWROb3RQcm9kdWNlZD8/ITEsbi5vcHRpbWlzdGljQ29udGVudElkPWUub3B0aW1pc3RpY0NvbnRlbnRJZD8/XCJcIixuLm9wdGltaXN0aWNSZWFkeUxvY2F0aW9uSWRzPWUub3B0aW1pc3RpY1JlYWR5TG9jYXRpb25JZHM/Lm1hcCgoZT0+ZSkpfHxbXSxuLm9wdGltaXN0aWNQcmVjbGFpbWVkVXBsb2FkTG9jYXRpb249dm9pZCAwIT09ZS5vcHRpbWlzdGljUHJlY2xhaW1lZFVwbG9hZExvY2F0aW9uJiZudWxsIT09ZS5vcHRpbWlzdGljUHJlY2xhaW1lZFVwbG9hZExvY2F0aW9uP2MuVXBsb2FkTG9jYXRpb24uZnJvbVBhcnRpYWwoZS5vcHRpbWlzdGljUHJlY2xhaW1lZFVwbG9hZExvY2F0aW9uKTp2b2lkIDAsbi52ZXJzaW9uPWUudmVyc2lvbj8/XCIwXCIsbi5lcnJvck1lc3NhZ2U9ZS5lcnJvck1lc3NhZ2U/P1wiXCIsbi51c2VWYXJpYW50TnVtYmVyQXNLZXk9ZS51c2VWYXJpYW50TnVtYmVyQXNLZXk/PyExLG4uY2xhaW1Qb2xpY3lVcGRhdGVzPWUuY2xhaW1Qb2xpY3lVcGRhdGVzPy5tYXAoKGU9PmwuVXBkYXRlQ2xhaW1Qb2xpY3kuZnJvbVBhcnRpYWwoZSkpKXx8W10sbi5jb250ZW50UmVmZXJlbmNlRXhwaXJ5VGltZT1lLmNvbnRlbnRSZWZlcmVuY2VFeHBpcnlUaW1lPz8wLG59fSx0Lk1lZGlhQnVuZGxlRXh0cmFNZXRhZGF0YT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpmLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiEwPT09ZS5leGNsdWRlU291cmNlJiZ0LnVpbnQzMig4KS5ib29sKGUuZXhjbHVkZVNvdXJjZSksITA9PT1lLmFsd2F5c0luY2x1ZGVTb3VyY2UmJnQudWludDMyKDE2KS5ib29sKGUuYWx3YXlzSW5jbHVkZVNvdXJjZSksITA9PT1lLmlzU291cmNlTWVkaWFaaXBwZWQmJnQudWludDMyKDI0KS5ib29sKGUuaXNTb3VyY2VNZWRpYVppcHBlZCksdm9pZCAwIT09ZS5pc1VuZW5jcnlwdGVkT3V0cHV0JiZwLkJvb2xWYWx1ZS5lbmNvZGUoe3ZhbHVlOmUuaXNVbmVuY3J5cHRlZE91dHB1dH0sdC51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5jYWxsYmFjayYmdS5NZWRpYUJ1bmRsZUNhbGxiYWNrLmVuY29kZShlLmNhbGxiYWNrLHQudWludDMyKDgyKS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLmNhbGxiYWNrUGFzc3Rocm91Z2hEYXRhLmxlbmd0aCYmdC51aW50MzIoOTApLmJ5dGVzKGUuY2FsbGJhY2tQYXNzdGhyb3VnaERhdGEpLHZvaWQgMCE9PWUuYXN5bmNOb3RpZmljYXRpb24mJmQuQXN5bmNOb3RpZmljYXRpb24uZW5jb2RlKGUuYXN5bmNOb3RpZmljYXRpb24sdC51aW50MzIoOTgpLmZvcmsoKSkubGRlbGltKCksITA9PT1lLmV4cGVkaXRlTm90aWZpY2F0aW9ucyYmdC51aW50MzIoMTA0KS5ib29sKGUuZXhwZWRpdGVOb3RpZmljYXRpb25zKSwhMD09PWUuYXN5bmNOb3RpZmljYXRpb25JbmNsdWRlTWVkaWFPcHRpbWl6YXRpb25EZXRhaWxzJiZ0LnVpbnQzMigxMTIpLmJvb2woZS5hc3luY05vdGlmaWNhdGlvbkluY2x1ZGVNZWRpYU9wdGltaXphdGlvbkRldGFpbHMpLDAhPT1lLmFzeW5jQ2FsbGJhY2tDb3VudGVyJiZ0LnVpbnQzMigxMjApLnVpbnQzMihlLmFzeW5jQ2FsbGJhY2tDb3VudGVyKSwhMD09PWUucmV0dXJuQ29udGVudFVybERlZmF1bHRWYXJpYW50TWV0YWRhdGEmJnQudWludDMyKDEyOCkuYm9vbChlLnJldHVybkNvbnRlbnRVcmxEZWZhdWx0VmFyaWFudE1ldGFkYXRhKSwwIT09ZS5mZWF0dXJlQ29udGVudFR5cGUmJnQudWludDMyKDE2MCkuaW50MzIoZS5mZWF0dXJlQ29udGVudFR5cGUpLFwiXCIhPT1lLmNvZkNvbmZpZ3VyYXRpb25LZXkmJnQudWludDMyKDE3MCkuc3RyaW5nKGUuY29mQ29uZmlndXJhdGlvbktleSksMCE9PWUudXNlQ2FzZSYmdC51aW50MzIoMjQwKS51aW50MzIoZS51c2VDYXNlKSxcIlwiIT09ZS5leHRlcm5hbElkJiZ0LnVpbnQzMigyNTApLnN0cmluZyhlLmV4dGVybmFsSWQpLDAhPT1lLmNvbnRlbnRSZWZlcmVuY2VSZXN1bHRPcHRpb24mJnQudWludDMyKDI1NikudWludDMyKGUuY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbiksXCJcIiE9PWUubWVkaWFCdW5kbGVJZENvcGllZEZyb20mJnQudWludDMyKDI2Nikuc3RyaW5nKGUubWVkaWFCdW5kbGVJZENvcGllZEZyb20pLCEwPT09ZS5uZWVkRm9sbG93VXBDaGVjayYmdC51aW50MzIoMjcyKS5ib29sKGUubmVlZEZvbGxvd1VwQ2hlY2spLFwiMFwiIT09ZS5yZXF1ZXN0SW5pdFRpbWVNaWxsaXMmJnQudWludDMyKDI4MCkudWludDY0KGUucmVxdWVzdEluaXRUaW1lTWlsbGlzKSxcIlwiIT09ZS5wdWJsaXNoZXJJZCYmdC51aW50MzIoMjkwKS5zdHJpbmcoZS5wdWJsaXNoZXJJZCksXCJcIiE9PWUuYmFzZUNvbnRlbnRJZCYmdC51aW50MzIoMjk4KS5zdHJpbmcoZS5iYXNlQ29udGVudElkKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBmLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGYuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9bSgpO2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmV4Y2x1ZGVTb3VyY2U9bi5ib29sKCk7YnJlYWs7Y2FzZSAyOmkuYWx3YXlzSW5jbHVkZVNvdXJjZT1uLmJvb2woKTticmVhaztjYXNlIDM6aS5pc1NvdXJjZU1lZGlhWmlwcGVkPW4uYm9vbCgpO2JyZWFrO2Nhc2UgNDppLmlzVW5lbmNyeXB0ZWRPdXRwdXQ9cC5Cb29sVmFsdWUuZGVjb2RlKG4sbi51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSAxMDppLmNhbGxiYWNrPXUuTWVkaWFCdW5kbGVDYWxsYmFjay5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDExOmkuY2FsbGJhY2tQYXNzdGhyb3VnaERhdGE9bi5ieXRlcygpO2JyZWFrO2Nhc2UgMTI6aS5hc3luY05vdGlmaWNhdGlvbj1kLkFzeW5jTm90aWZpY2F0aW9uLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMTM6aS5leHBlZGl0ZU5vdGlmaWNhdGlvbnM9bi5ib29sKCk7YnJlYWs7Y2FzZSAxNDppLmFzeW5jTm90aWZpY2F0aW9uSW5jbHVkZU1lZGlhT3B0aW1pemF0aW9uRGV0YWlscz1uLmJvb2woKTticmVhaztjYXNlIDE1OmkuYXN5bmNDYWxsYmFja0NvdW50ZXI9bi51aW50MzIoKTticmVhaztjYXNlIDE2OmkucmV0dXJuQ29udGVudFVybERlZmF1bHRWYXJpYW50TWV0YWRhdGE9bi5ib29sKCk7YnJlYWs7Y2FzZSAyMDppLmZlYXR1cmVDb250ZW50VHlwZT1uLmludDMyKCk7YnJlYWs7Y2FzZSAyMTppLmNvZkNvbmZpZ3VyYXRpb25LZXk9bi5zdHJpbmcoKTticmVhaztjYXNlIDMwOmkudXNlQ2FzZT1uLnVpbnQzMigpO2JyZWFrO2Nhc2UgMzE6aS5leHRlcm5hbElkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAzMjppLmNvbnRlbnRSZWZlcmVuY2VSZXN1bHRPcHRpb249bi51aW50MzIoKTticmVhaztjYXNlIDMzOmkubWVkaWFCdW5kbGVJZENvcGllZEZyb209bi5zdHJpbmcoKTticmVhaztjYXNlIDM0OmkubmVlZEZvbGxvd1VwQ2hlY2s9bi5ib29sKCk7YnJlYWs7Y2FzZSAzNTppLnJlcXVlc3RJbml0VGltZU1pbGxpcz1oKG4udWludDY0KCkpO2JyZWFrO2Nhc2UgMzY6aS5wdWJsaXNoZXJJZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMzc6aS5iYXNlQ29udGVudElkPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PW0oKTtyZXR1cm4gdC5leGNsdWRlU291cmNlPWUuZXhjbHVkZVNvdXJjZT8/ITEsdC5hbHdheXNJbmNsdWRlU291cmNlPWUuYWx3YXlzSW5jbHVkZVNvdXJjZT8/ITEsdC5pc1NvdXJjZU1lZGlhWmlwcGVkPWUuaXNTb3VyY2VNZWRpYVppcHBlZD8/ITEsdC5pc1VuZW5jcnlwdGVkT3V0cHV0PWUuaXNVbmVuY3J5cHRlZE91dHB1dD8/dm9pZCAwLHQuY2FsbGJhY2s9dm9pZCAwIT09ZS5jYWxsYmFjayYmbnVsbCE9PWUuY2FsbGJhY2s/dS5NZWRpYUJ1bmRsZUNhbGxiYWNrLmZyb21QYXJ0aWFsKGUuY2FsbGJhY2spOnZvaWQgMCx0LmNhbGxiYWNrUGFzc3Rocm91Z2hEYXRhPWUuY2FsbGJhY2tQYXNzdGhyb3VnaERhdGE/P25ldyBVaW50OEFycmF5LHQuYXN5bmNOb3RpZmljYXRpb249dm9pZCAwIT09ZS5hc3luY05vdGlmaWNhdGlvbiYmbnVsbCE9PWUuYXN5bmNOb3RpZmljYXRpb24/ZC5Bc3luY05vdGlmaWNhdGlvbi5mcm9tUGFydGlhbChlLmFzeW5jTm90aWZpY2F0aW9uKTp2b2lkIDAsdC5leHBlZGl0ZU5vdGlmaWNhdGlvbnM9ZS5leHBlZGl0ZU5vdGlmaWNhdGlvbnM/PyExLHQuYXN5bmNOb3RpZmljYXRpb25JbmNsdWRlTWVkaWFPcHRpbWl6YXRpb25EZXRhaWxzPWUuYXN5bmNOb3RpZmljYXRpb25JbmNsdWRlTWVkaWFPcHRpbWl6YXRpb25EZXRhaWxzPz8hMSx0LmFzeW5jQ2FsbGJhY2tDb3VudGVyPWUuYXN5bmNDYWxsYmFja0NvdW50ZXI/PzAsdC5yZXR1cm5Db250ZW50VXJsRGVmYXVsdFZhcmlhbnRNZXRhZGF0YT1lLnJldHVybkNvbnRlbnRVcmxEZWZhdWx0VmFyaWFudE1ldGFkYXRhPz8hMSx0LmZlYXR1cmVDb250ZW50VHlwZT1lLmZlYXR1cmVDb250ZW50VHlwZT8/MCx0LmNvZkNvbmZpZ3VyYXRpb25LZXk9ZS5jb2ZDb25maWd1cmF0aW9uS2V5Pz9cIlwiLHQudXNlQ2FzZT1lLnVzZUNhc2U/PzAsdC5leHRlcm5hbElkPWUuZXh0ZXJuYWxJZD8/XCJcIix0LmNvbnRlbnRSZWZlcmVuY2VSZXN1bHRPcHRpb249ZS5jb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uPz8wLHQubWVkaWFCdW5kbGVJZENvcGllZEZyb209ZS5tZWRpYUJ1bmRsZUlkQ29waWVkRnJvbT8/XCJcIix0Lm5lZWRGb2xsb3dVcENoZWNrPWUubmVlZEZvbGxvd1VwQ2hlY2s/PyExLHQucmVxdWVzdEluaXRUaW1lTWlsbGlzPWUucmVxdWVzdEluaXRUaW1lTWlsbGlzPz9cIjBcIix0LnB1Ymxpc2hlcklkPWUucHVibGlzaGVySWQ/P1wiXCIsdC5iYXNlQ29udGVudElkPWUuYmFzZUNvbnRlbnRJZD8/XCJcIix0fX0sZi5kZWZhdWx0LnV0aWwuTG9uZyE9PWkuZGVmYXVsdCYmKGYuZGVmYXVsdC51dGlsLkxvbmc9aS5kZWZhdWx0LGYuZGVmYXVsdC5jb25maWd1cmUoKSl9LDMwMzI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2xhaW09dm9pZCAwO2NvbnN0IGk9bigyMzk3KSxvPW4oNTI4MjUpLGE9cihuKDYyMTAwKSk7dC5DbGFpbT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS51c2VDYXNlJiZ0LnVpbnQzMig4KS51aW50MzIoZS51c2VDYXNlKSxcIlwiIT09ZS5leHRlcm5hbElkJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuZXh0ZXJuYWxJZCksdm9pZCAwIT09ZS5jbGFpbVBvbGljeSYmaS5DbGFpbVBvbGljeS5lbmNvZGUoZS5jbGFpbVBvbGljeSx0LnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLm1lZGlhT3B0aW1pemF0aW9uUHJvcGVydGllcyYmby5NZWRpYU9wdGltaXphdGlvblByb3BlcnRpZXMuZW5jb2RlKGUubWVkaWFPcHRpbWl6YXRpb25Qcm9wZXJ0aWVzLHQudWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpLCEwPT09ZS5hbGxvd1JlY2xhaW0mJnQudWludDMyKDQwKS5ib29sKGUuYWxsb3dSZWNsYWltKSwhMD09PWUuc2VuZEFzeW5jTm90aWZpY2F0aW9uT25GYWlsdXJlJiZ0LnVpbnQzMig0OCkuYm9vbChlLnNlbmRBc3luY05vdGlmaWNhdGlvbk9uRmFpbHVyZSksMCE9PWUuY2xhaW1TdGFnZSYmdC51aW50MzIoNTYpLmludDMyKGUuY2xhaW1TdGFnZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBzPXt1c2VDYXNlOjAsZXh0ZXJuYWxJZDpcIlwiLGNsYWltUG9saWN5OnZvaWQgMCxtZWRpYU9wdGltaXphdGlvblByb3BlcnRpZXM6dm9pZCAwLGFsbG93UmVjbGFpbTohMSxzZW5kQXN5bmNOb3RpZmljYXRpb25PbkZhaWx1cmU6ITEsY2xhaW1TdGFnZTowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6cy51c2VDYXNlPW4udWludDMyKCk7YnJlYWs7Y2FzZSAyOnMuZXh0ZXJuYWxJZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMzpzLmNsYWltUG9saWN5PWkuQ2xhaW1Qb2xpY3kuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSA0OnMubWVkaWFPcHRpbWl6YXRpb25Qcm9wZXJ0aWVzPW8uTWVkaWFPcHRpbWl6YXRpb25Qcm9wZXJ0aWVzLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgNTpzLmFsbG93UmVjbGFpbT1uLmJvb2woKTticmVhaztjYXNlIDY6cy5zZW5kQXN5bmNOb3RpZmljYXRpb25PbkZhaWx1cmU9bi5ib29sKCk7YnJlYWs7Y2FzZSA3OnMuY2xhaW1TdGFnZT1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBzfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt1c2VDYXNlOjAsZXh0ZXJuYWxJZDpcIlwiLGNsYWltUG9saWN5OnZvaWQgMCxtZWRpYU9wdGltaXphdGlvblByb3BlcnRpZXM6dm9pZCAwLGFsbG93UmVjbGFpbTohMSxzZW5kQXN5bmNOb3RpZmljYXRpb25PbkZhaWx1cmU6ITEsY2xhaW1TdGFnZTowfTtyZXR1cm4gdC51c2VDYXNlPWUudXNlQ2FzZT8/MCx0LmV4dGVybmFsSWQ9ZS5leHRlcm5hbElkPz9cIlwiLHQuY2xhaW1Qb2xpY3k9dm9pZCAwIT09ZS5jbGFpbVBvbGljeSYmbnVsbCE9PWUuY2xhaW1Qb2xpY3k/aS5DbGFpbVBvbGljeS5mcm9tUGFydGlhbChlLmNsYWltUG9saWN5KTp2b2lkIDAsdC5tZWRpYU9wdGltaXphdGlvblByb3BlcnRpZXM9dm9pZCAwIT09ZS5tZWRpYU9wdGltaXphdGlvblByb3BlcnRpZXMmJm51bGwhPT1lLm1lZGlhT3B0aW1pemF0aW9uUHJvcGVydGllcz9vLk1lZGlhT3B0aW1pemF0aW9uUHJvcGVydGllcy5mcm9tUGFydGlhbChlLm1lZGlhT3B0aW1pemF0aW9uUHJvcGVydGllcyk6dm9pZCAwLHQuYWxsb3dSZWNsYWltPWUuYWxsb3dSZWNsYWltPz8hMSx0LnNlbmRBc3luY05vdGlmaWNhdGlvbk9uRmFpbHVyZT1lLnNlbmRBc3luY05vdGlmaWNhdGlvbk9uRmFpbHVyZT8/ITEsdC5jbGFpbVN0YWdlPWUuY2xhaW1TdGFnZT8/MCx0fX19LDExMTY1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNsYWltQ29udGVudFJlc3BvbnNlPXQuQ2xhaW1Db250ZW50UmVxdWVzdD12b2lkIDA7Y29uc3QgaT1uKDE3MzcpLG89bigzNDU4NSksYT1yKG4oNjIxMDApKTt0LkNsYWltQ29udGVudFJlcXVlc3Q9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cInVwbG9hZFVybFwiPT09ZS5jb250ZW50UmVmZXJlbmNlPy4kY2FzZSYmdC51aW50MzIoMTApLnN0cmluZyhlLmNvbnRlbnRSZWZlcmVuY2UudXBsb2FkVXJsKSxcImNvbnRlbnRVcmxcIj09PWUuY29udGVudFJlZmVyZW5jZT8uJGNhc2UmJnQudWludDMyKDE4KS5zdHJpbmcoZS5jb250ZW50UmVmZXJlbmNlLmNvbnRlbnRVcmwpLFwiY29udGVudE9iamVjdFwiPT09ZS5jb250ZW50UmVmZXJlbmNlPy4kY2FzZSYmdC51aW50MzIoMjYpLmJ5dGVzKGUuY29udGVudFJlZmVyZW5jZS5jb250ZW50T2JqZWN0KSx2b2lkIDAhPT1lLnJlcXVlc3QmJmkuTmV3Q29udGVudFJlcXVlc3QuZW5jb2RlKGUucmVxdWVzdCx0LnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e2NvbnRlbnRSZWZlcmVuY2U6dm9pZCAwLHJlcXVlc3Q6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5jb250ZW50UmVmZXJlbmNlPXskY2FzZTpcInVwbG9hZFVybFwiLHVwbG9hZFVybDpuLnN0cmluZygpfTticmVhaztjYXNlIDI6by5jb250ZW50UmVmZXJlbmNlPXskY2FzZTpcImNvbnRlbnRVcmxcIixjb250ZW50VXJsOm4uc3RyaW5nKCl9O2JyZWFrO2Nhc2UgMzpvLmNvbnRlbnRSZWZlcmVuY2U9eyRjYXNlOlwiY29udGVudE9iamVjdFwiLGNvbnRlbnRPYmplY3Q6bi5ieXRlcygpfTticmVhaztjYXNlIDQ6by5yZXF1ZXN0PWkuTmV3Q29udGVudFJlcXVlc3QuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtjb250ZW50UmVmZXJlbmNlOnZvaWQgMCxyZXF1ZXN0OnZvaWQgMH07cmV0dXJuXCJ1cGxvYWRVcmxcIj09PWUuY29udGVudFJlZmVyZW5jZT8uJGNhc2UmJnZvaWQgMCE9PWUuY29udGVudFJlZmVyZW5jZT8udXBsb2FkVXJsJiZudWxsIT09ZS5jb250ZW50UmVmZXJlbmNlPy51cGxvYWRVcmwmJih0LmNvbnRlbnRSZWZlcmVuY2U9eyRjYXNlOlwidXBsb2FkVXJsXCIsdXBsb2FkVXJsOmUuY29udGVudFJlZmVyZW5jZS51cGxvYWRVcmx9KSxcImNvbnRlbnRVcmxcIj09PWUuY29udGVudFJlZmVyZW5jZT8uJGNhc2UmJnZvaWQgMCE9PWUuY29udGVudFJlZmVyZW5jZT8uY29udGVudFVybCYmbnVsbCE9PWUuY29udGVudFJlZmVyZW5jZT8uY29udGVudFVybCYmKHQuY29udGVudFJlZmVyZW5jZT17JGNhc2U6XCJjb250ZW50VXJsXCIsY29udGVudFVybDplLmNvbnRlbnRSZWZlcmVuY2UuY29udGVudFVybH0pLFwiY29udGVudE9iamVjdFwiPT09ZS5jb250ZW50UmVmZXJlbmNlPy4kY2FzZSYmdm9pZCAwIT09ZS5jb250ZW50UmVmZXJlbmNlPy5jb250ZW50T2JqZWN0JiZudWxsIT09ZS5jb250ZW50UmVmZXJlbmNlPy5jb250ZW50T2JqZWN0JiYodC5jb250ZW50UmVmZXJlbmNlPXskY2FzZTpcImNvbnRlbnRPYmplY3RcIixjb250ZW50T2JqZWN0OmUuY29udGVudFJlZmVyZW5jZS5jb250ZW50T2JqZWN0fSksdC5yZXF1ZXN0PXZvaWQgMCE9PWUucmVxdWVzdCYmbnVsbCE9PWUucmVxdWVzdD9pLk5ld0NvbnRlbnRSZXF1ZXN0LmZyb21QYXJ0aWFsKGUucmVxdWVzdCk6dm9pZCAwLHR9fSx0LkNsYWltQ29udGVudFJlc3BvbnNlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7Zm9yKGNvbnN0IG4gb2YgZS5yZXN1bHRzKW8uQ29udGVudFJlZmVyZW5jZVJlc3VsdC5lbmNvZGUobix0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtyZXN1bHRzOltdfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/aS5yZXN1bHRzLnB1c2goby5Db250ZW50UmVmZXJlbmNlUmVzdWx0LmRlY29kZShuLG4udWludDMyKCkpKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3Jlc3VsdHM6W119O3JldHVybiB0LnJlc3VsdHM9ZS5yZXN1bHRzPy5tYXAoKGU9Pm8uQ29udGVudFJlZmVyZW5jZVJlc3VsdC5mcm9tUGFydGlhbChlKSkpfHxbXSx0fX19LDIzOTc6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2xhaW1Qb2xpY3k9dm9pZCAwO2NvbnN0IGk9bigyNDUyOCksbz1yKG4oNDE1ODMpKSxhPW4oMTg4OTMpLHM9big5OTcyNiksYz1yKG4oNjIxMDApKTtmdW5jdGlvbiBsKGUpe2xldCB0PTFlMypOdW1iZXIoZS5zZWNvbmRzKTtyZXR1cm4gdCs9ZS5uYW5vcy8xZTYsbmV3IERhdGUodCl9dC5DbGFpbVBvbGljeT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpjLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLmV4cGlyYXRpb24mJmkuVGltZXN0YW1wLmVuY29kZSgobj1lLmV4cGlyYXRpb24se3NlY29uZHM6TWF0aC50cnVuYyhuLmdldFRpbWUoKS8xZTMpLnRvU3RyaW5nKCksbmFub3M6bi5nZXRUaW1lKCklMWUzKjFlNn0pLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUucmVwbGljYXRpb24mJmEuUmVwbGljYXRpb25Qb2xpY3kuZW5jb2RlKGUucmVwbGljYXRpb24sdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksXCIwXCIhPT1lLmNkblR0bFNlY29uZHMmJnQudWludDMyKDI0KS51aW50NjQoZS5jZG5UdGxTZWNvbmRzKSx2b2lkIDAhPT1lLnN0b3JhZ2VQb2xpY3kmJnMuU3RvcmFnZVBvbGljeS5lbmNvZGUoZS5zdG9yYWdlUG9saWN5LHQudWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpLHQ7dmFyIG59LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17ZXhwaXJhdGlvbjp2b2lkIDAscmVwbGljYXRpb246dm9pZCAwLGNkblR0bFNlY29uZHM6XCIwXCIsc3RvcmFnZVBvbGljeTp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLmV4cGlyYXRpb249bChpLlRpbWVzdGFtcC5kZWNvZGUobixuLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAyOm8ucmVwbGljYXRpb249YS5SZXBsaWNhdGlvblBvbGljeS5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDM6by5jZG5UdGxTZWNvbmRzPW4udWludDY0KCkudG9TdHJpbmcoKTticmVhaztjYXNlIDQ6by5zdG9yYWdlUG9saWN5PXMuU3RvcmFnZVBvbGljeS5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2V4cGlyYXRpb246dm9pZCAwLHJlcGxpY2F0aW9uOnZvaWQgMCxjZG5UdGxTZWNvbmRzOlwiMFwiLHN0b3JhZ2VQb2xpY3k6dm9pZCAwfTtyZXR1cm4gdC5leHBpcmF0aW9uPWUuZXhwaXJhdGlvbj8/dm9pZCAwLHQucmVwbGljYXRpb249dm9pZCAwIT09ZS5yZXBsaWNhdGlvbiYmbnVsbCE9PWUucmVwbGljYXRpb24/YS5SZXBsaWNhdGlvblBvbGljeS5mcm9tUGFydGlhbChlLnJlcGxpY2F0aW9uKTp2b2lkIDAsdC5jZG5UdGxTZWNvbmRzPWUuY2RuVHRsU2Vjb25kcz8/XCIwXCIsdC5zdG9yYWdlUG9saWN5PXZvaWQgMCE9PWUuc3RvcmFnZVBvbGljeSYmbnVsbCE9PWUuc3RvcmFnZVBvbGljeT9zLlN0b3JhZ2VQb2xpY3kuZnJvbVBhcnRpYWwoZS5zdG9yYWdlUG9saWN5KTp2b2lkIDAsdH19LGMuZGVmYXVsdC51dGlsLkxvbmchPT1vLmRlZmF1bHQmJihjLmRlZmF1bHQudXRpbC5Mb25nPW8uZGVmYXVsdCxjLmRlZmF1bHQuY29uZmlndXJlKCkpfSwzNDYyMzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DbGFpbVJlbGF0ZWRDb250ZW50c1Jlc3BvbnNlPXQuUmVsYXRlZENvbnRlbnRSZWZlcmVuY2U9dC5DbGFpbVJlbGF0ZWRDb250ZW50c1JlcXVlc3Q9dm9pZCAwO2NvbnN0IGk9bigyMzk3KSxvPW4oNjA2ODMpLGE9bigzNDU4NSkscz1yKG4oNjIxMDApKTt0LkNsYWltUmVsYXRlZENvbnRlbnRzUmVxdWVzdD17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpOzAhPT1lLnVzZUNhc2UmJm4udWludDMyKDgpLnVpbnQzMihlLnVzZUNhc2UpLFwiXCIhPT1lLmV4dGVybmFsSWQmJm4udWludDMyKDE4KS5zdHJpbmcoZS5leHRlcm5hbElkKSx2b2lkIDAhPT1lLmNsYWltUG9saWN5JiZpLkNsYWltUG9saWN5LmVuY29kZShlLmNsYWltUG9saWN5LG4udWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLmZlYXR1cmVDb250ZW50VHlwZSYmbi51aW50MzIoMzIpLmludDMyKGUuZmVhdHVyZUNvbnRlbnRUeXBlKSwwIT09ZS5jb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uJiZuLnVpbnQzMig0MCkuaW50MzIoZS5jb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uKSx2b2lkIDAhPT1lLmFzeW5jTm90aWZpY2F0aW9uJiZvLkFzeW5jTm90aWZpY2F0aW9uLmVuY29kZShlLmFzeW5jTm90aWZpY2F0aW9uLG4udWludDMyKDUwKS5mb3JrKCkpLmxkZWxpbSgpO2Zvcihjb25zdCByIG9mIGUucmVsYXRlZENvbnRlbnRSZWZlcmVuY2VzKXQuUmVsYXRlZENvbnRlbnRSZWZlcmVuY2UuZW5jb2RlKHIsbi51aW50MzIoNTgpLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgYT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3QgYz17dXNlQ2FzZTowLGV4dGVybmFsSWQ6XCJcIixjbGFpbVBvbGljeTp2b2lkIDAsZmVhdHVyZUNvbnRlbnRUeXBlOjAsY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbjowLGFzeW5jTm90aWZpY2F0aW9uOnZvaWQgMCxyZWxhdGVkQ29udGVudFJlZmVyZW5jZXM6W119O2Zvcig7ci5wb3M8YTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpjLnVzZUNhc2U9ci51aW50MzIoKTticmVhaztjYXNlIDI6Yy5leHRlcm5hbElkPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmMuY2xhaW1Qb2xpY3k9aS5DbGFpbVBvbGljeS5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDQ6Yy5mZWF0dXJlQ29udGVudFR5cGU9ci5pbnQzMigpO2JyZWFrO2Nhc2UgNTpjLmNvbnRlbnRSZWZlcmVuY2VSZXN1bHRPcHRpb249ci5pbnQzMigpO2JyZWFrO2Nhc2UgNjpjLmFzeW5jTm90aWZpY2F0aW9uPW8uQXN5bmNOb3RpZmljYXRpb24uZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSA3OmMucmVsYXRlZENvbnRlbnRSZWZlcmVuY2VzLnB1c2godC5SZWxhdGVkQ29udGVudFJlZmVyZW5jZS5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBjfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXt1c2VDYXNlOjAsZXh0ZXJuYWxJZDpcIlwiLGNsYWltUG9saWN5OnZvaWQgMCxmZWF0dXJlQ29udGVudFR5cGU6MCxjb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uOjAsYXN5bmNOb3RpZmljYXRpb246dm9pZCAwLHJlbGF0ZWRDb250ZW50UmVmZXJlbmNlczpbXX07cmV0dXJuIG4udXNlQ2FzZT1lLnVzZUNhc2U/PzAsbi5leHRlcm5hbElkPWUuZXh0ZXJuYWxJZD8/XCJcIixuLmNsYWltUG9saWN5PXZvaWQgMCE9PWUuY2xhaW1Qb2xpY3kmJm51bGwhPT1lLmNsYWltUG9saWN5P2kuQ2xhaW1Qb2xpY3kuZnJvbVBhcnRpYWwoZS5jbGFpbVBvbGljeSk6dm9pZCAwLG4uZmVhdHVyZUNvbnRlbnRUeXBlPWUuZmVhdHVyZUNvbnRlbnRUeXBlPz8wLG4uY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbj1lLmNvbnRlbnRSZWZlcmVuY2VSZXN1bHRPcHRpb24/PzAsbi5hc3luY05vdGlmaWNhdGlvbj12b2lkIDAhPT1lLmFzeW5jTm90aWZpY2F0aW9uJiZudWxsIT09ZS5hc3luY05vdGlmaWNhdGlvbj9vLkFzeW5jTm90aWZpY2F0aW9uLmZyb21QYXJ0aWFsKGUuYXN5bmNOb3RpZmljYXRpb24pOnZvaWQgMCxuLnJlbGF0ZWRDb250ZW50UmVmZXJlbmNlcz1lLnJlbGF0ZWRDb250ZW50UmVmZXJlbmNlcz8ubWFwKChlPT50LlJlbGF0ZWRDb250ZW50UmVmZXJlbmNlLmZyb21QYXJ0aWFsKGUpKSl8fFtdLG59fSx0LlJlbGF0ZWRDb250ZW50UmVmZXJlbmNlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJ1cGxvYWRVcmxcIj09PWUuY29udGVudFJlZmVyZW5jZT8uJGNhc2UmJnQudWludDMyKDEwKS5zdHJpbmcoZS5jb250ZW50UmVmZXJlbmNlLnVwbG9hZFVybCksXCJjb250ZW50VXJsXCI9PT1lLmNvbnRlbnRSZWZlcmVuY2U/LiRjYXNlJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuY29udGVudFJlZmVyZW5jZS5jb250ZW50VXJsKSxcImNvbnRlbnRPYmplY3RcIj09PWUuY29udGVudFJlZmVyZW5jZT8uJGNhc2UmJnQudWludDMyKDI2KS5ieXRlcyhlLmNvbnRlbnRSZWZlcmVuY2UuY29udGVudE9iamVjdCksMCE9PWUubWVkaWFWYXJpYW50TmFtZSYmdC51aW50MzIoMzIpLmludDMyKGUubWVkaWFWYXJpYW50TmFtZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtjb250ZW50UmVmZXJlbmNlOnZvaWQgMCxtZWRpYVZhcmlhbnROYW1lOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmNvbnRlbnRSZWZlcmVuY2U9eyRjYXNlOlwidXBsb2FkVXJsXCIsdXBsb2FkVXJsOm4uc3RyaW5nKCl9O2JyZWFrO2Nhc2UgMjppLmNvbnRlbnRSZWZlcmVuY2U9eyRjYXNlOlwiY29udGVudFVybFwiLGNvbnRlbnRVcmw6bi5zdHJpbmcoKX07YnJlYWs7Y2FzZSAzOmkuY29udGVudFJlZmVyZW5jZT17JGNhc2U6XCJjb250ZW50T2JqZWN0XCIsY29udGVudE9iamVjdDpuLmJ5dGVzKCl9O2JyZWFrO2Nhc2UgNDppLm1lZGlhVmFyaWFudE5hbWU9bi5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17Y29udGVudFJlZmVyZW5jZTp2b2lkIDAsbWVkaWFWYXJpYW50TmFtZTowfTtyZXR1cm5cInVwbG9hZFVybFwiPT09ZS5jb250ZW50UmVmZXJlbmNlPy4kY2FzZSYmdm9pZCAwIT09ZS5jb250ZW50UmVmZXJlbmNlPy51cGxvYWRVcmwmJm51bGwhPT1lLmNvbnRlbnRSZWZlcmVuY2U/LnVwbG9hZFVybCYmKHQuY29udGVudFJlZmVyZW5jZT17JGNhc2U6XCJ1cGxvYWRVcmxcIix1cGxvYWRVcmw6ZS5jb250ZW50UmVmZXJlbmNlLnVwbG9hZFVybH0pLFwiY29udGVudFVybFwiPT09ZS5jb250ZW50UmVmZXJlbmNlPy4kY2FzZSYmdm9pZCAwIT09ZS5jb250ZW50UmVmZXJlbmNlPy5jb250ZW50VXJsJiZudWxsIT09ZS5jb250ZW50UmVmZXJlbmNlPy5jb250ZW50VXJsJiYodC5jb250ZW50UmVmZXJlbmNlPXskY2FzZTpcImNvbnRlbnRVcmxcIixjb250ZW50VXJsOmUuY29udGVudFJlZmVyZW5jZS5jb250ZW50VXJsfSksXCJjb250ZW50T2JqZWN0XCI9PT1lLmNvbnRlbnRSZWZlcmVuY2U/LiRjYXNlJiZ2b2lkIDAhPT1lLmNvbnRlbnRSZWZlcmVuY2U/LmNvbnRlbnRPYmplY3QmJm51bGwhPT1lLmNvbnRlbnRSZWZlcmVuY2U/LmNvbnRlbnRPYmplY3QmJih0LmNvbnRlbnRSZWZlcmVuY2U9eyRjYXNlOlwiY29udGVudE9iamVjdFwiLGNvbnRlbnRPYmplY3Q6ZS5jb250ZW50UmVmZXJlbmNlLmNvbnRlbnRPYmplY3R9KSx0Lm1lZGlhVmFyaWFudE5hbWU9ZS5tZWRpYVZhcmlhbnROYW1lPz8wLHR9fSx0LkNsYWltUmVsYXRlZENvbnRlbnRzUmVzcG9uc2U9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5yZXN1bHQmJmEuQ29udGVudFJlZmVyZW5jZVJlc3VsdC5lbmNvZGUoZS5yZXN1bHQsdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtyZXN1bHQ6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/aS5yZXN1bHQ9YS5Db250ZW50UmVmZXJlbmNlUmVzdWx0LmRlY29kZShuLG4udWludDMyKCkpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17cmVzdWx0OnZvaWQgMH07cmV0dXJuIHQucmVzdWx0PXZvaWQgMCE9PWUucmVzdWx0JiZudWxsIT09ZS5yZXN1bHQ/YS5Db250ZW50UmVmZXJlbmNlUmVzdWx0LmZyb21QYXJ0aWFsKGUucmVzdWx0KTp2b2lkIDAsdH19fSw4NjAzNDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Db21iaW5lQ29udGVudFJlZmVyZW5jZT10LkNvbWJpbmVDb250ZW50c1Jlc3BvbnNlPXQuQ29tYmluZUNvbnRlbnRzUmVxdWVzdD12b2lkIDA7Y29uc3QgaT1uKDIzOTcpLG89big2MDY4MyksYT1uKDM0NTg1KSxzPW4oMzY4NTEpLGM9bigzMDk2OSksbD1yKG4oNjIxMDApKTt0LkNvbWJpbmVDb250ZW50c1JlcXVlc3Q9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bC5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTswIT09ZS51c2VDYXNlJiZuLnVpbnQzMig4KS51aW50MzIoZS51c2VDYXNlKSxcIlwiIT09ZS5leHRlcm5hbElkJiZuLnVpbnQzMigxOCkuc3RyaW5nKGUuZXh0ZXJuYWxJZCksdm9pZCAwIT09ZS5jbGFpbVBvbGljeSYmaS5DbGFpbVBvbGljeS5lbmNvZGUoZS5jbGFpbVBvbGljeSxuLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS5mZWF0dXJlQ29udGVudFR5cGUmJm4udWludDMyKDMyKS5pbnQzMihlLmZlYXR1cmVDb250ZW50VHlwZSksMCE9PWUuY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbiYmbi51aW50MzIoNDApLmludDMyKGUuY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbiksdm9pZCAwIT09ZS5hc3luY05vdGlmaWNhdGlvbiYmby5Bc3luY05vdGlmaWNhdGlvbi5lbmNvZGUoZS5hc3luY05vdGlmaWNhdGlvbixuLnVpbnQzMig1MCkuZm9yaygpKS5sZGVsaW0oKTtmb3IoY29uc3QgciBvZiBlLmNvbnRlbnRSZWZlcmVuY2VzKXQuQ29tYmluZUNvbnRlbnRSZWZlcmVuY2UuZW5jb2RlKHIsbi51aW50MzIoNTgpLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGwuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbC5kZWZhdWx0LlJlYWRlcihlKTtsZXQgYT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgcz17dXNlQ2FzZTowLGV4dGVybmFsSWQ6XCJcIixjbGFpbVBvbGljeTp2b2lkIDAsZmVhdHVyZUNvbnRlbnRUeXBlOjAsY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbjowLGFzeW5jTm90aWZpY2F0aW9uOnZvaWQgMCxjb250ZW50UmVmZXJlbmNlczpbXX07Zm9yKDtyLnBvczxhOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOnMudXNlQ2FzZT1yLnVpbnQzMigpO2JyZWFrO2Nhc2UgMjpzLmV4dGVybmFsSWQ9ci5zdHJpbmcoKTticmVhaztjYXNlIDM6cy5jbGFpbVBvbGljeT1pLkNsYWltUG9saWN5LmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgNDpzLmZlYXR1cmVDb250ZW50VHlwZT1yLmludDMyKCk7YnJlYWs7Y2FzZSA1OnMuY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbj1yLmludDMyKCk7YnJlYWs7Y2FzZSA2OnMuYXN5bmNOb3RpZmljYXRpb249by5Bc3luY05vdGlmaWNhdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDc6cy5jb250ZW50UmVmZXJlbmNlcy5wdXNoKHQuQ29tYmluZUNvbnRlbnRSZWZlcmVuY2UuZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gc30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17dXNlQ2FzZTowLGV4dGVybmFsSWQ6XCJcIixjbGFpbVBvbGljeTp2b2lkIDAsZmVhdHVyZUNvbnRlbnRUeXBlOjAsY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbjowLGFzeW5jTm90aWZpY2F0aW9uOnZvaWQgMCxjb250ZW50UmVmZXJlbmNlczpbXX07cmV0dXJuIG4udXNlQ2FzZT1lLnVzZUNhc2U/PzAsbi5leHRlcm5hbElkPWUuZXh0ZXJuYWxJZD8/XCJcIixuLmNsYWltUG9saWN5PXZvaWQgMCE9PWUuY2xhaW1Qb2xpY3kmJm51bGwhPT1lLmNsYWltUG9saWN5P2kuQ2xhaW1Qb2xpY3kuZnJvbVBhcnRpYWwoZS5jbGFpbVBvbGljeSk6dm9pZCAwLG4uZmVhdHVyZUNvbnRlbnRUeXBlPWUuZmVhdHVyZUNvbnRlbnRUeXBlPz8wLG4uY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbj1lLmNvbnRlbnRSZWZlcmVuY2VSZXN1bHRPcHRpb24/PzAsbi5hc3luY05vdGlmaWNhdGlvbj12b2lkIDAhPT1lLmFzeW5jTm90aWZpY2F0aW9uJiZudWxsIT09ZS5hc3luY05vdGlmaWNhdGlvbj9vLkFzeW5jTm90aWZpY2F0aW9uLmZyb21QYXJ0aWFsKGUuYXN5bmNOb3RpZmljYXRpb24pOnZvaWQgMCxuLmNvbnRlbnRSZWZlcmVuY2VzPWUuY29udGVudFJlZmVyZW5jZXM/Lm1hcCgoZT0+dC5Db21iaW5lQ29udGVudFJlZmVyZW5jZS5mcm9tUGFydGlhbChlKSkpfHxbXSxufX0sdC5Db21iaW5lQ29udGVudHNSZXNwb25zZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLnJlc3VsdCYmYS5Db250ZW50UmVmZXJlbmNlUmVzdWx0LmVuY29kZShlLnJlc3VsdCx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBsLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGwuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3Jlc3VsdDp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLnJlc3VsdD1hLkNvbnRlbnRSZWZlcmVuY2VSZXN1bHQuZGVjb2RlKG4sbi51aW50MzIoKSk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtyZXN1bHQ6dm9pZCAwfTtyZXR1cm4gdC5yZXN1bHQ9dm9pZCAwIT09ZS5yZXN1bHQmJm51bGwhPT1lLnJlc3VsdD9hLkNvbnRlbnRSZWZlcmVuY2VSZXN1bHQuZnJvbVBhcnRpYWwoZS5yZXN1bHQpOnZvaWQgMCx0fX0sdC5Db21iaW5lQ29udGVudFJlZmVyZW5jZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLmNvbnRlbnRSZWZlcmVuY2UmJnMuQ29udGVudFJlZmVyZW5jZS5lbmNvZGUoZS5jb250ZW50UmVmZXJlbmNlLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUubWVkaWFQcm9wZXJ0aWVzJiZjLk1lZGlhUHJvcGVydGllcy5lbmNvZGUoZS5tZWRpYVByb3BlcnRpZXMsdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbC5kZWZhdWx0LlJlYWRlcj9lOm5ldyBsLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtjb250ZW50UmVmZXJlbmNlOnZvaWQgMCxtZWRpYVByb3BlcnRpZXM6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5jb250ZW50UmVmZXJlbmNlPXMuQ29udGVudFJlZmVyZW5jZS5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDI6aS5tZWRpYVByb3BlcnRpZXM9Yy5NZWRpYVByb3BlcnRpZXMuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtjb250ZW50UmVmZXJlbmNlOnZvaWQgMCxtZWRpYVByb3BlcnRpZXM6dm9pZCAwfTtyZXR1cm4gdC5jb250ZW50UmVmZXJlbmNlPXZvaWQgMCE9PWUuY29udGVudFJlZmVyZW5jZSYmbnVsbCE9PWUuY29udGVudFJlZmVyZW5jZT9zLkNvbnRlbnRSZWZlcmVuY2UuZnJvbVBhcnRpYWwoZS5jb250ZW50UmVmZXJlbmNlKTp2b2lkIDAsdC5tZWRpYVByb3BlcnRpZXM9dm9pZCAwIT09ZS5tZWRpYVByb3BlcnRpZXMmJm51bGwhPT1lLm1lZGlhUHJvcGVydGllcz9jLk1lZGlhUHJvcGVydGllcy5mcm9tUGFydGlhbChlLm1lZGlhUHJvcGVydGllcyk6dm9pZCAwLHR9fX0sMzY4NTE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ29udGVudFJlZmVyZW5jZT12b2lkIDA7Y29uc3QgaT1yKG4oNjIxMDApKTt0LkNvbnRlbnRSZWZlcmVuY2U9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cImNvbnRlbnRVcmxcIj09PWUuY29udGVudFJlZmVyZW5jZT8uJGNhc2UmJnQudWludDMyKDEwKS5zdHJpbmcoZS5jb250ZW50UmVmZXJlbmNlLmNvbnRlbnRVcmwpLFwiY29udGVudE9iamVjdFwiPT09ZS5jb250ZW50UmVmZXJlbmNlPy4kY2FzZSYmdC51aW50MzIoMTgpLmJ5dGVzKGUuY29udGVudFJlZmVyZW5jZS5jb250ZW50T2JqZWN0KSxcIlwiIT09ZS5jbGFpbUV4dGVybmFsSWQmJnQudWludDMyKDI2KS5zdHJpbmcoZS5jbGFpbUV4dGVybmFsSWQpLCEwPT09ZS5wcmVmZXJVc2luZ0NsYWltRXh0ZXJuYWxJZCYmdC51aW50MzIoMzIpLmJvb2woZS5wcmVmZXJVc2luZ0NsYWltRXh0ZXJuYWxJZCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXtjb250ZW50UmVmZXJlbmNlOnZvaWQgMCxjbGFpbUV4dGVybmFsSWQ6XCJcIixwcmVmZXJVc2luZ0NsYWltRXh0ZXJuYWxJZDohMX07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8uY29udGVudFJlZmVyZW5jZT17JGNhc2U6XCJjb250ZW50VXJsXCIsY29udGVudFVybDpuLnN0cmluZygpfTticmVhaztjYXNlIDI6by5jb250ZW50UmVmZXJlbmNlPXskY2FzZTpcImNvbnRlbnRPYmplY3RcIixjb250ZW50T2JqZWN0Om4uYnl0ZXMoKX07YnJlYWs7Y2FzZSAzOm8uY2xhaW1FeHRlcm5hbElkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA0Om8ucHJlZmVyVXNpbmdDbGFpbUV4dGVybmFsSWQ9bi5ib29sKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtjb250ZW50UmVmZXJlbmNlOnZvaWQgMCxjbGFpbUV4dGVybmFsSWQ6XCJcIixwcmVmZXJVc2luZ0NsYWltRXh0ZXJuYWxJZDohMX07cmV0dXJuXCJjb250ZW50VXJsXCI9PT1lLmNvbnRlbnRSZWZlcmVuY2U/LiRjYXNlJiZ2b2lkIDAhPT1lLmNvbnRlbnRSZWZlcmVuY2U/LmNvbnRlbnRVcmwmJm51bGwhPT1lLmNvbnRlbnRSZWZlcmVuY2U/LmNvbnRlbnRVcmwmJih0LmNvbnRlbnRSZWZlcmVuY2U9eyRjYXNlOlwiY29udGVudFVybFwiLGNvbnRlbnRVcmw6ZS5jb250ZW50UmVmZXJlbmNlLmNvbnRlbnRVcmx9KSxcImNvbnRlbnRPYmplY3RcIj09PWUuY29udGVudFJlZmVyZW5jZT8uJGNhc2UmJnZvaWQgMCE9PWUuY29udGVudFJlZmVyZW5jZT8uY29udGVudE9iamVjdCYmbnVsbCE9PWUuY29udGVudFJlZmVyZW5jZT8uY29udGVudE9iamVjdCYmKHQuY29udGVudFJlZmVyZW5jZT17JGNhc2U6XCJjb250ZW50T2JqZWN0XCIsY29udGVudE9iamVjdDplLmNvbnRlbnRSZWZlcmVuY2UuY29udGVudE9iamVjdH0pLHQuY2xhaW1FeHRlcm5hbElkPWUuY2xhaW1FeHRlcm5hbElkPz9cIlwiLHQucHJlZmVyVXNpbmdDbGFpbUV4dGVybmFsSWQ9ZS5wcmVmZXJVc2luZ0NsYWltRXh0ZXJuYWxJZD8/ITEsdH19fSwzNDU4NTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Db250ZW50UmVmZXJlbmNlUmVzdWx0PXZvaWQgMDtjb25zdCBpPW4oMjU3OTkpLG89cihuKDQxNTgzKSksYT1uKDYxODgpLHM9cihuKDYyMTAwKSk7ZnVuY3Rpb24gYygpe3JldHVybntzdGF0dXNDb2RlOjAsY29udGVudFVybDpcIlwiLGNvbnRlbnRPYmplY3Q6bmV3IFVpbnQ4QXJyYXksc3RhdHVzQ29kZVByb3BlcnRpZXM6dm9pZCAwLHZlcnNpb246XCIwXCIsY29udGVudFVybFdpdGhNZWRpYU9wdGltaXphdGlvbkRlZmF1bHRWYXJpYW50TWV0YWRhdGE6dm9pZCAwfX10LkNvbnRlbnRSZWZlcmVuY2VSZXN1bHQ9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUuc3RhdHVzQ29kZSYmdC51aW50MzIoOCkuaW50MzIoZS5zdGF0dXNDb2RlKSxcIlwiIT09ZS5jb250ZW50VXJsJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuY29udGVudFVybCksMCE9PWUuY29udGVudE9iamVjdC5sZW5ndGgmJnQudWludDMyKDI2KS5ieXRlcyhlLmNvbnRlbnRPYmplY3QpLHZvaWQgMCE9PWUuc3RhdHVzQ29kZVByb3BlcnRpZXMmJmkuQ29kZVByb3BlcnRpZXMuZW5jb2RlKGUuc3RhdHVzQ29kZVByb3BlcnRpZXMsdC51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCksXCIwXCIhPT1lLnZlcnNpb24mJnQudWludDMyKDQwKS51aW50NjQoZS52ZXJzaW9uKSx2b2lkIDAhPT1lLmNvbnRlbnRVcmxXaXRoTWVkaWFPcHRpbWl6YXRpb25EZWZhdWx0VmFyaWFudE1ldGFkYXRhJiZhLk1lZGlhVmFyaWFudE1ldGFkYXRhLmVuY29kZShlLmNvbnRlbnRVcmxXaXRoTWVkaWFPcHRpbWl6YXRpb25EZWZhdWx0VmFyaWFudE1ldGFkYXRhLHQudWludDMyKDUwKS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz1jKCk7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8uc3RhdHVzQ29kZT1uLmludDMyKCk7YnJlYWs7Y2FzZSAyOm8uY29udGVudFVybD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMzpvLmNvbnRlbnRPYmplY3Q9bi5ieXRlcygpO2JyZWFrO2Nhc2UgNDpvLnN0YXR1c0NvZGVQcm9wZXJ0aWVzPWkuQ29kZVByb3BlcnRpZXMuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSA1Om8udmVyc2lvbj1uLnVpbnQ2NCgpLnRvU3RyaW5nKCk7YnJlYWs7Y2FzZSA2Om8uY29udGVudFVybFdpdGhNZWRpYU9wdGltaXphdGlvbkRlZmF1bHRWYXJpYW50TWV0YWRhdGE9YS5NZWRpYVZhcmlhbnRNZXRhZGF0YS5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9YygpO3JldHVybiB0LnN0YXR1c0NvZGU9ZS5zdGF0dXNDb2RlPz8wLHQuY29udGVudFVybD1lLmNvbnRlbnRVcmw/P1wiXCIsdC5jb250ZW50T2JqZWN0PWUuY29udGVudE9iamVjdD8/bmV3IFVpbnQ4QXJyYXksdC5zdGF0dXNDb2RlUHJvcGVydGllcz12b2lkIDAhPT1lLnN0YXR1c0NvZGVQcm9wZXJ0aWVzJiZudWxsIT09ZS5zdGF0dXNDb2RlUHJvcGVydGllcz9pLkNvZGVQcm9wZXJ0aWVzLmZyb21QYXJ0aWFsKGUuc3RhdHVzQ29kZVByb3BlcnRpZXMpOnZvaWQgMCx0LnZlcnNpb249ZS52ZXJzaW9uPz9cIjBcIix0LmNvbnRlbnRVcmxXaXRoTWVkaWFPcHRpbWl6YXRpb25EZWZhdWx0VmFyaWFudE1ldGFkYXRhPXZvaWQgMCE9PWUuY29udGVudFVybFdpdGhNZWRpYU9wdGltaXphdGlvbkRlZmF1bHRWYXJpYW50TWV0YWRhdGEmJm51bGwhPT1lLmNvbnRlbnRVcmxXaXRoTWVkaWFPcHRpbWl6YXRpb25EZWZhdWx0VmFyaWFudE1ldGFkYXRhP2EuTWVkaWFWYXJpYW50TWV0YWRhdGEuZnJvbVBhcnRpYWwoZS5jb250ZW50VXJsV2l0aE1lZGlhT3B0aW1pemF0aW9uRGVmYXVsdFZhcmlhbnRNZXRhZGF0YSk6dm9pZCAwLHR9fSxzLmRlZmF1bHQudXRpbC5Mb25nIT09by5kZWZhdWx0JiYocy5kZWZhdWx0LnV0aWwuTG9uZz1vLmRlZmF1bHQscy5kZWZhdWx0LmNvbmZpZ3VyZSgpKX0sODQ0MjU6KGUsdCk9Pnt2YXIgbjt0Lks9dm9pZCAwLChuPXQuS3x8KHQuSz17fSkpW24uQ09OVEVOVF9VUkxfT05MWT0wXT1cIkNPTlRFTlRfVVJMX09OTFlcIixuW24uQ09OVEVOVF9PQkpFQ1RfT05MWT0xXT1cIkNPTlRFTlRfT0JKRUNUX09OTFlcIixuW24uQ09OVEVOVF9VUkxfQU5EX09CSkVDVD0yXT1cIkNPTlRFTlRfVVJMX0FORF9PQkpFQ1RcIixuW24uVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwifSwyNDYzMjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Db3B5Q29udGVudFJlc3BvbnNlPXQuQ29weUNvbnRlbnRSZXF1ZXN0PXZvaWQgMDtjb25zdCBpPW4oMzY4NTEpLG89bigyMzk3KSxhPW4oNjA2ODMpLHM9bigzNDU4NSksYz1yKG4oNjIxMDApKTt0LkNvcHlDb250ZW50UmVxdWVzdD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpjLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLnNvdXJjZUNvbnRlbnRSZWZlcmVuY2UmJmkuQ29udGVudFJlZmVyZW5jZS5lbmNvZGUoZS5zb3VyY2VDb250ZW50UmVmZXJlbmNlLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLnVzZUNhc2UmJnQudWludDMyKDE2KS51aW50MzIoZS51c2VDYXNlKSxcIlwiIT09ZS5leHRlcm5hbElkJiZ0LnVpbnQzMigyNikuc3RyaW5nKGUuZXh0ZXJuYWxJZCksdm9pZCAwIT09ZS5jbGFpbVBvbGljeSYmby5DbGFpbVBvbGljeS5lbmNvZGUoZS5jbGFpbVBvbGljeSx0LnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS5jb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uJiZ0LnVpbnQzMig0MCkuaW50MzIoZS5jb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uKSx2b2lkIDAhPT1lLmFzeW5jTm90aWZpY2F0aW9uJiZhLkFzeW5jTm90aWZpY2F0aW9uLmVuY29kZShlLmFzeW5jTm90aWZpY2F0aW9uLHQudWludDMyKDUwKS5mb3JrKCkpLmxkZWxpbSgpLFwiY29udGVudElkU3VmZml4XCI9PT1lLnRhcmdldENvbnRlbnQ/LiRjYXNlJiZ0LnVpbnQzMig1OCkuc3RyaW5nKGUudGFyZ2V0Q29udGVudC5jb250ZW50SWRTdWZmaXgpLFwiY29udGVudElkXCI9PT1lLnRhcmdldENvbnRlbnQ/LiRjYXNlJiZ0LnVpbnQzMig2Nikuc3RyaW5nKGUudGFyZ2V0Q29udGVudC5jb250ZW50SWQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgcz17c291cmNlQ29udGVudFJlZmVyZW5jZTp2b2lkIDAsdXNlQ2FzZTowLGV4dGVybmFsSWQ6XCJcIixjbGFpbVBvbGljeTp2b2lkIDAsY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbjowLGFzeW5jTm90aWZpY2F0aW9uOnZvaWQgMCx0YXJnZXRDb250ZW50OnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOnMuc291cmNlQ29udGVudFJlZmVyZW5jZT1pLkNvbnRlbnRSZWZlcmVuY2UuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOnMudXNlQ2FzZT1uLnVpbnQzMigpO2JyZWFrO2Nhc2UgMzpzLmV4dGVybmFsSWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDQ6cy5jbGFpbVBvbGljeT1vLkNsYWltUG9saWN5LmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgNTpzLmNvbnRlbnRSZWZlcmVuY2VSZXN1bHRPcHRpb249bi5pbnQzMigpO2JyZWFrO2Nhc2UgNjpzLmFzeW5jTm90aWZpY2F0aW9uPWEuQXN5bmNOb3RpZmljYXRpb24uZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSA3OnMudGFyZ2V0Q29udGVudD17JGNhc2U6XCJjb250ZW50SWRTdWZmaXhcIixjb250ZW50SWRTdWZmaXg6bi5zdHJpbmcoKX07YnJlYWs7Y2FzZSA4OnMudGFyZ2V0Q29udGVudD17JGNhc2U6XCJjb250ZW50SWRcIixjb250ZW50SWQ6bi5zdHJpbmcoKX07YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBzfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtzb3VyY2VDb250ZW50UmVmZXJlbmNlOnZvaWQgMCx1c2VDYXNlOjAsZXh0ZXJuYWxJZDpcIlwiLGNsYWltUG9saWN5OnZvaWQgMCxjb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uOjAsYXN5bmNOb3RpZmljYXRpb246dm9pZCAwLHRhcmdldENvbnRlbnQ6dm9pZCAwfTtyZXR1cm4gdC5zb3VyY2VDb250ZW50UmVmZXJlbmNlPXZvaWQgMCE9PWUuc291cmNlQ29udGVudFJlZmVyZW5jZSYmbnVsbCE9PWUuc291cmNlQ29udGVudFJlZmVyZW5jZT9pLkNvbnRlbnRSZWZlcmVuY2UuZnJvbVBhcnRpYWwoZS5zb3VyY2VDb250ZW50UmVmZXJlbmNlKTp2b2lkIDAsdC51c2VDYXNlPWUudXNlQ2FzZT8/MCx0LmV4dGVybmFsSWQ9ZS5leHRlcm5hbElkPz9cIlwiLHQuY2xhaW1Qb2xpY3k9dm9pZCAwIT09ZS5jbGFpbVBvbGljeSYmbnVsbCE9PWUuY2xhaW1Qb2xpY3k/by5DbGFpbVBvbGljeS5mcm9tUGFydGlhbChlLmNsYWltUG9saWN5KTp2b2lkIDAsdC5jb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uPWUuY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbj8/MCx0LmFzeW5jTm90aWZpY2F0aW9uPXZvaWQgMCE9PWUuYXN5bmNOb3RpZmljYXRpb24mJm51bGwhPT1lLmFzeW5jTm90aWZpY2F0aW9uP2EuQXN5bmNOb3RpZmljYXRpb24uZnJvbVBhcnRpYWwoZS5hc3luY05vdGlmaWNhdGlvbik6dm9pZCAwLFwiY29udGVudElkU3VmZml4XCI9PT1lLnRhcmdldENvbnRlbnQ/LiRjYXNlJiZ2b2lkIDAhPT1lLnRhcmdldENvbnRlbnQ/LmNvbnRlbnRJZFN1ZmZpeCYmbnVsbCE9PWUudGFyZ2V0Q29udGVudD8uY29udGVudElkU3VmZml4JiYodC50YXJnZXRDb250ZW50PXskY2FzZTpcImNvbnRlbnRJZFN1ZmZpeFwiLGNvbnRlbnRJZFN1ZmZpeDplLnRhcmdldENvbnRlbnQuY29udGVudElkU3VmZml4fSksXCJjb250ZW50SWRcIj09PWUudGFyZ2V0Q29udGVudD8uJGNhc2UmJnZvaWQgMCE9PWUudGFyZ2V0Q29udGVudD8uY29udGVudElkJiZudWxsIT09ZS50YXJnZXRDb250ZW50Py5jb250ZW50SWQmJih0LnRhcmdldENvbnRlbnQ9eyRjYXNlOlwiY29udGVudElkXCIsY29udGVudElkOmUudGFyZ2V0Q29udGVudC5jb250ZW50SWR9KSx0fX0sdC5Db3B5Q29udGVudFJlc3BvbnNlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUucmVzdWx0JiZzLkNvbnRlbnRSZWZlcmVuY2VSZXN1bHQuZW5jb2RlKGUucmVzdWx0LHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17cmVzdWx0OnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2kucmVzdWx0PXMuQ29udGVudFJlZmVyZW5jZVJlc3VsdC5kZWNvZGUobixuLnVpbnQzMigpKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3Jlc3VsdDp2b2lkIDB9O3JldHVybiB0LnJlc3VsdD12b2lkIDAhPT1lLnJlc3VsdCYmbnVsbCE9PWUucmVzdWx0P3MuQ29udGVudFJlZmVyZW5jZVJlc3VsdC5mcm9tUGFydGlhbChlLnJlc3VsdCk6dm9pZCAwLHR9fX0sMjQ2OTc6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ29udGVudEFuYWx5c2lzT2JqZWN0X0NvdW50ZXJzQnlDbGFpbVN0YXRlRW50cnk9dC5Db250ZW50QW5hbHlzaXNPYmplY3RfQ291bnRlcnNCeUNsYWltVXNlQ2FzZUVudHJ5PXQuQ29udGVudEFuYWx5c2lzT2JqZWN0PXQuSW5nZXN0aW9uT2JqZWN0PXQuQ2xhaW1PYmplY3Q9dC5SZXBsaWNhT2JqZWN0PXQuRGVidWdJbmdlc3Rpb25SZXN1bHQ9dC5EZWJ1Z01lZGlhQnVuZGxlUmVzdWx0PXQuRGVidWdTaW5nbGVDb250ZW50UmVzdWx0PXQuRGVidWdDb250ZW50UmVzcG9uc2U9dC5EZWJ1Z0NvbnRlbnRSZXF1ZXN0PXZvaWQgMDtjb25zdCBpPW4oMjQ1MjgpLG89cihuKDQxNTgzKSksYT1uKDg1MDM4KSxzPXIobig2MjEwMCkpLGM9bigzNjg1MSk7ZnVuY3Rpb24gbChlKXtyZXR1cm57c2Vjb25kczpNYXRoLnRydW5jKGUuZ2V0VGltZSgpLzFlMykudG9TdHJpbmcoKSxuYW5vczplLmdldFRpbWUoKSUxZTMqMWU2fX1mdW5jdGlvbiB1KGUpe2xldCB0PTFlMypOdW1iZXIoZS5zZWNvbmRzKTtyZXR1cm4gdCs9ZS5uYW5vcy8xZTYsbmV3IERhdGUodCl9ZnVuY3Rpb24gZChlKXtyZXR1cm4gZS50b1N0cmluZygpfXQuRGVidWdDb250ZW50UmVxdWVzdD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiY29udGVudElkXCI9PT1lLmlucHV0Py4kY2FzZSYmdC51aW50MzIoMTApLnN0cmluZyhlLmlucHV0LmNvbnRlbnRJZCksXCJjb250ZW50UmVmZXJlbmNlXCI9PT1lLmlucHV0Py4kY2FzZSYmYy5Db250ZW50UmVmZXJlbmNlLmVuY29kZShlLmlucHV0LmNvbnRlbnRSZWZlcmVuY2UsdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksXCJpbmdlc3Rpb25JZFwiPT09ZS5pbnB1dD8uJGNhc2UmJnQudWludDMyKDI2KS5zdHJpbmcoZS5pbnB1dC5pbmdlc3Rpb25JZCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtpbnB1dDp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmlucHV0PXskY2FzZTpcImNvbnRlbnRJZFwiLGNvbnRlbnRJZDpuLnN0cmluZygpfTticmVhaztjYXNlIDI6aS5pbnB1dD17JGNhc2U6XCJjb250ZW50UmVmZXJlbmNlXCIsY29udGVudFJlZmVyZW5jZTpjLkNvbnRlbnRSZWZlcmVuY2UuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMzppLmlucHV0PXskY2FzZTpcImluZ2VzdGlvbklkXCIsaW5nZXN0aW9uSWQ6bi5zdHJpbmcoKX07YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtpbnB1dDp2b2lkIDB9O3JldHVyblwiY29udGVudElkXCI9PT1lLmlucHV0Py4kY2FzZSYmdm9pZCAwIT09ZS5pbnB1dD8uY29udGVudElkJiZudWxsIT09ZS5pbnB1dD8uY29udGVudElkJiYodC5pbnB1dD17JGNhc2U6XCJjb250ZW50SWRcIixjb250ZW50SWQ6ZS5pbnB1dC5jb250ZW50SWR9KSxcImNvbnRlbnRSZWZlcmVuY2VcIj09PWUuaW5wdXQ/LiRjYXNlJiZ2b2lkIDAhPT1lLmlucHV0Py5jb250ZW50UmVmZXJlbmNlJiZudWxsIT09ZS5pbnB1dD8uY29udGVudFJlZmVyZW5jZSYmKHQuaW5wdXQ9eyRjYXNlOlwiY29udGVudFJlZmVyZW5jZVwiLGNvbnRlbnRSZWZlcmVuY2U6Yy5Db250ZW50UmVmZXJlbmNlLmZyb21QYXJ0aWFsKGUuaW5wdXQuY29udGVudFJlZmVyZW5jZSl9KSxcImluZ2VzdGlvbklkXCI9PT1lLmlucHV0Py4kY2FzZSYmdm9pZCAwIT09ZS5pbnB1dD8uaW5nZXN0aW9uSWQmJm51bGwhPT1lLmlucHV0Py5pbmdlc3Rpb25JZCYmKHQuaW5wdXQ9eyRjYXNlOlwiaW5nZXN0aW9uSWRcIixpbmdlc3Rpb25JZDplLmlucHV0LmluZ2VzdGlvbklkfSksdH19LHQuRGVidWdDb250ZW50UmVzcG9uc2U9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cInNpbmdsZUNvbnRlbnRSZXN1bHRcIj09PWUucmVzdWx0Py4kY2FzZSYmdC5EZWJ1Z1NpbmdsZUNvbnRlbnRSZXN1bHQuZW5jb2RlKGUucmVzdWx0LnNpbmdsZUNvbnRlbnRSZXN1bHQsbi51aW50MzIoODIpLmZvcmsoKSkubGRlbGltKCksXCJtZWRpYUJ1bmRsZVJlc3VsdFwiPT09ZS5yZXN1bHQ/LiRjYXNlJiZ0LkRlYnVnTWVkaWFCdW5kbGVSZXN1bHQuZW5jb2RlKGUucmVzdWx0Lm1lZGlhQnVuZGxlUmVzdWx0LG4udWludDMyKDkwKS5mb3JrKCkpLmxkZWxpbSgpLFwiaW5nZXN0aW9uUmVzdWx0XCI9PT1lLnJlc3VsdD8uJGNhc2UmJnQuRGVidWdJbmdlc3Rpb25SZXN1bHQuZW5jb2RlKGUucmVzdWx0LmluZ2VzdGlvblJlc3VsdCxuLnVpbnQzMig5OCkuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89e3Jlc3VsdDp2b2lkIDB9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTA6by5yZXN1bHQ9eyRjYXNlOlwic2luZ2xlQ29udGVudFJlc3VsdFwiLHNpbmdsZUNvbnRlbnRSZXN1bHQ6dC5EZWJ1Z1NpbmdsZUNvbnRlbnRSZXN1bHQuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMTE6by5yZXN1bHQ9eyRjYXNlOlwibWVkaWFCdW5kbGVSZXN1bHRcIixtZWRpYUJ1bmRsZVJlc3VsdDp0LkRlYnVnTWVkaWFCdW5kbGVSZXN1bHQuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMTI6by5yZXN1bHQ9eyRjYXNlOlwiaW5nZXN0aW9uUmVzdWx0XCIsaW5nZXN0aW9uUmVzdWx0OnQuRGVidWdJbmdlc3Rpb25SZXN1bHQuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17cmVzdWx0OnZvaWQgMH07cmV0dXJuXCJzaW5nbGVDb250ZW50UmVzdWx0XCI9PT1lLnJlc3VsdD8uJGNhc2UmJnZvaWQgMCE9PWUucmVzdWx0Py5zaW5nbGVDb250ZW50UmVzdWx0JiZudWxsIT09ZS5yZXN1bHQ/LnNpbmdsZUNvbnRlbnRSZXN1bHQmJihuLnJlc3VsdD17JGNhc2U6XCJzaW5nbGVDb250ZW50UmVzdWx0XCIsc2luZ2xlQ29udGVudFJlc3VsdDp0LkRlYnVnU2luZ2xlQ29udGVudFJlc3VsdC5mcm9tUGFydGlhbChlLnJlc3VsdC5zaW5nbGVDb250ZW50UmVzdWx0KX0pLFwibWVkaWFCdW5kbGVSZXN1bHRcIj09PWUucmVzdWx0Py4kY2FzZSYmdm9pZCAwIT09ZS5yZXN1bHQ/Lm1lZGlhQnVuZGxlUmVzdWx0JiZudWxsIT09ZS5yZXN1bHQ/Lm1lZGlhQnVuZGxlUmVzdWx0JiYobi5yZXN1bHQ9eyRjYXNlOlwibWVkaWFCdW5kbGVSZXN1bHRcIixtZWRpYUJ1bmRsZVJlc3VsdDp0LkRlYnVnTWVkaWFCdW5kbGVSZXN1bHQuZnJvbVBhcnRpYWwoZS5yZXN1bHQubWVkaWFCdW5kbGVSZXN1bHQpfSksXCJpbmdlc3Rpb25SZXN1bHRcIj09PWUucmVzdWx0Py4kY2FzZSYmdm9pZCAwIT09ZS5yZXN1bHQ/LmluZ2VzdGlvblJlc3VsdCYmbnVsbCE9PWUucmVzdWx0Py5pbmdlc3Rpb25SZXN1bHQmJihuLnJlc3VsdD17JGNhc2U6XCJpbmdlc3Rpb25SZXN1bHRcIixpbmdlc3Rpb25SZXN1bHQ6dC5EZWJ1Z0luZ2VzdGlvblJlc3VsdC5mcm9tUGFydGlhbChlLnJlc3VsdC5pbmdlc3Rpb25SZXN1bHQpfSksbn19LHQuRGVidWdTaW5nbGVDb250ZW50UmVzdWx0PXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7XCJcIiE9PWUuY29udGVudElkJiZuLnVpbnQzMigxMCkuc3RyaW5nKGUuY29udGVudElkKTtmb3IoY29uc3QgciBvZiBlLnJlcGxpY2FzKXQuUmVwbGljYU9iamVjdC5lbmNvZGUocixuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKTtmb3IoY29uc3QgciBvZiBlLmNsYWltcyl0LkNsYWltT2JqZWN0LmVuY29kZShyLG4udWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiB2b2lkIDAhPT1lLnN5c3RlbUNsYWltJiZ0LkNsYWltT2JqZWN0LmVuY29kZShlLnN5c3RlbUNsYWltLG4udWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuY29udGVudEFuYWx5c2lzJiZ0LkNvbnRlbnRBbmFseXNpc09iamVjdC5lbmNvZGUoZS5jb250ZW50QW5hbHlzaXMsbi51aW50MzIoODIpLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXtjb250ZW50SWQ6XCJcIixyZXBsaWNhczpbXSxjbGFpbXM6W10sc3lzdGVtQ2xhaW06dm9pZCAwLGNvbnRlbnRBbmFseXNpczp2b2lkIDB9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLmNvbnRlbnRJZD1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMjpvLnJlcGxpY2FzLnB1c2godC5SZXBsaWNhT2JqZWN0LmRlY29kZShyLHIudWludDMyKCkpKTticmVhaztjYXNlIDM6by5jbGFpbXMucHVzaCh0LkNsYWltT2JqZWN0LmRlY29kZShyLHIudWludDMyKCkpKTticmVhaztjYXNlIDQ6by5zeXN0ZW1DbGFpbT10LkNsYWltT2JqZWN0LmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMTA6by5jb250ZW50QW5hbHlzaXM9dC5Db250ZW50QW5hbHlzaXNPYmplY3QuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtjb250ZW50SWQ6XCJcIixyZXBsaWNhczpbXSxjbGFpbXM6W10sc3lzdGVtQ2xhaW06dm9pZCAwLGNvbnRlbnRBbmFseXNpczp2b2lkIDB9O3JldHVybiBuLmNvbnRlbnRJZD1lLmNvbnRlbnRJZD8/XCJcIixuLnJlcGxpY2FzPWUucmVwbGljYXM/Lm1hcCgoZT0+dC5SZXBsaWNhT2JqZWN0LmZyb21QYXJ0aWFsKGUpKSl8fFtdLG4uY2xhaW1zPWUuY2xhaW1zPy5tYXAoKGU9PnQuQ2xhaW1PYmplY3QuZnJvbVBhcnRpYWwoZSkpKXx8W10sbi5zeXN0ZW1DbGFpbT12b2lkIDAhPT1lLnN5c3RlbUNsYWltJiZudWxsIT09ZS5zeXN0ZW1DbGFpbT90LkNsYWltT2JqZWN0LmZyb21QYXJ0aWFsKGUuc3lzdGVtQ2xhaW0pOnZvaWQgMCxuLmNvbnRlbnRBbmFseXNpcz12b2lkIDAhPT1lLmNvbnRlbnRBbmFseXNpcyYmbnVsbCE9PWUuY29udGVudEFuYWx5c2lzP3QuQ29udGVudEFuYWx5c2lzT2JqZWN0LmZyb21QYXJ0aWFsKGUuY29udGVudEFuYWx5c2lzKTp2b2lkIDAsbn19LHQuRGVidWdNZWRpYUJ1bmRsZVJlc3VsdD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO1wiXCIhPT1lLm1lZGlhQnVuZGxlSWQmJnQudWludDMyKDEwKS5zdHJpbmcoZS5tZWRpYUJ1bmRsZUlkKSxcIlwiIT09ZS5tZWRpYUJ1bmRsZVN0YXR1cyYmdC51aW50MzIoMTgpLnN0cmluZyhlLm1lZGlhQnVuZGxlU3RhdHVzKSx2b2lkIDAhPT1lLm1lZGlhQnVuZGxlTWV0YWRhdGEmJmEuTWVkaWFCdW5kbGVFeHRyYU1ldGFkYXRhLmVuY29kZShlLm1lZGlhQnVuZGxlTWV0YWRhdGEsdC51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCk7Zm9yKGNvbnN0IG4gb2YgZS5tZWRpYVZhcmlhbnRzKWEuTWVkaWFWYXJpYW50RW50aXR5LmVuY29kZShuLHQudWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiB0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e21lZGlhQnVuZGxlSWQ6XCJcIixtZWRpYUJ1bmRsZVN0YXR1czpcIlwiLG1lZGlhQnVuZGxlTWV0YWRhdGE6dm9pZCAwLG1lZGlhVmFyaWFudHM6W119O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLm1lZGlhQnVuZGxlSWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS5tZWRpYUJ1bmRsZVN0YXR1cz1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMzppLm1lZGlhQnVuZGxlTWV0YWRhdGE9YS5NZWRpYUJ1bmRsZUV4dHJhTWV0YWRhdGEuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSA0OmkubWVkaWFWYXJpYW50cy5wdXNoKGEuTWVkaWFWYXJpYW50RW50aXR5LmRlY29kZShuLG4udWludDMyKCkpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e21lZGlhQnVuZGxlSWQ6XCJcIixtZWRpYUJ1bmRsZVN0YXR1czpcIlwiLG1lZGlhQnVuZGxlTWV0YWRhdGE6dm9pZCAwLG1lZGlhVmFyaWFudHM6W119O3JldHVybiB0Lm1lZGlhQnVuZGxlSWQ9ZS5tZWRpYUJ1bmRsZUlkPz9cIlwiLHQubWVkaWFCdW5kbGVTdGF0dXM9ZS5tZWRpYUJ1bmRsZVN0YXR1cz8/XCJcIix0Lm1lZGlhQnVuZGxlTWV0YWRhdGE9dm9pZCAwIT09ZS5tZWRpYUJ1bmRsZU1ldGFkYXRhJiZudWxsIT09ZS5tZWRpYUJ1bmRsZU1ldGFkYXRhP2EuTWVkaWFCdW5kbGVFeHRyYU1ldGFkYXRhLmZyb21QYXJ0aWFsKGUubWVkaWFCdW5kbGVNZXRhZGF0YSk6dm9pZCAwLHQubWVkaWFWYXJpYW50cz1lLm1lZGlhVmFyaWFudHM/Lm1hcCgoZT0+YS5NZWRpYVZhcmlhbnRFbnRpdHkuZnJvbVBhcnRpYWwoZSkpKXx8W10sdH19LHQuRGVidWdJbmdlc3Rpb25SZXN1bHQ9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5pbmdlc3Rpb25PYmplY3QmJnQuSW5nZXN0aW9uT2JqZWN0LmVuY29kZShlLmluZ2VzdGlvbk9iamVjdCxuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89e2luZ2VzdGlvbk9iamVjdDp2b2lkIDB9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtlPj4+Mz09MT9vLmluZ2VzdGlvbk9iamVjdD10LkluZ2VzdGlvbk9iamVjdC5kZWNvZGUocixyLnVpbnQzMigpKTpyLnNraXBUeXBlKDcmZSl9cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e2luZ2VzdGlvbk9iamVjdDp2b2lkIDB9O3JldHVybiBuLmluZ2VzdGlvbk9iamVjdD12b2lkIDAhPT1lLmluZ2VzdGlvbk9iamVjdCYmbnVsbCE9PWUuaW5nZXN0aW9uT2JqZWN0P3QuSW5nZXN0aW9uT2JqZWN0LmZyb21QYXJ0aWFsKGUuaW5nZXN0aW9uT2JqZWN0KTp2b2lkIDAsbn19LHQuUmVwbGljYU9iamVjdD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnJlcGxpY2FJZCYmdC51aW50MzIoMTApLnN0cmluZyhlLnJlcGxpY2FJZCksXCJcIiE9PWUuc3RvcmFnZUNsYXNzJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuc3RvcmFnZUNsYXNzKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3JlcGxpY2FJZDpcIlwiLHN0b3JhZ2VDbGFzczpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5yZXBsaWNhSWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS5zdG9yYWdlQ2xhc3M9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3JlcGxpY2FJZDpcIlwiLHN0b3JhZ2VDbGFzczpcIlwifTtyZXR1cm4gdC5yZXBsaWNhSWQ9ZS5yZXBsaWNhSWQ/P1wiXCIsdC5zdG9yYWdlQ2xhc3M9ZS5zdG9yYWdlQ2xhc3M/P1wiXCIsdH19LHQuQ2xhaW1PYmplY3Q9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTswIT09ZS5pZCYmdC51aW50MzIoOCkudWludDMyKGUuaWQpLFwiXCIhPT1lLnVzZUNhc2UmJnQudWludDMyKDE4KS5zdHJpbmcoZS51c2VDYXNlKSxcIlwiIT09ZS5leHRlcm5hbElkJiZ0LnVpbnQzMigyNikuc3RyaW5nKGUuZXh0ZXJuYWxJZCksdm9pZCAwIT09ZS5leHBpcmF0aW9uJiZpLlRpbWVzdGFtcC5lbmNvZGUobChlLmV4cGlyYXRpb24pLHQudWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpO2Zvcihjb25zdCBuIG9mIGUucmVhZHlCdWNrZXRzKXQudWludDMyKDQyKS5zdHJpbmcobik7Zm9yKGNvbnN0IG4gb2YgZS5mdXR1cmVCdWNrZXRzKXQudWludDMyKDUwKS5zdHJpbmcobik7cmV0dXJuXCJcIiE9PWUuc3RhdGUmJnQudWludDMyKDU4KS5zdHJpbmcoZS5zdGF0ZSksdm9pZCAwIT09ZS5zdGF0ZVRpbWVzdGFtcCYmaS5UaW1lc3RhbXAuZW5jb2RlKGwoZS5zdGF0ZVRpbWVzdGFtcCksdC51aW50MzIoNjYpLmZvcmsoKSkubGRlbGltKCksXCIwXCIhPT1lLmNkblR0bFNlY29uZHMmJnQudWludDMyKDcyKS51aW50NjQoZS5jZG5UdGxTZWNvbmRzKSxcIlwiIT09ZS5jb250ZW50VXJsJiZ0LnVpbnQzMig4Mikuc3RyaW5nKGUuY29udGVudFVybCksITA9PT1lLmlzQ3VycmVudGx5QWN0aXZlJiZ0LnVpbnQzMig4OCkuYm9vbChlLmlzQ3VycmVudGx5QWN0aXZlKSwhMD09PWUuaXNQcm92aXNpb25hbENsYWltJiZ0LnVpbnQzMig5NikuYm9vbChlLmlzUHJvdmlzaW9uYWxDbGFpbSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXtpZDowLHVzZUNhc2U6XCJcIixleHRlcm5hbElkOlwiXCIsZXhwaXJhdGlvbjp2b2lkIDAscmVhZHlCdWNrZXRzOltdLGZ1dHVyZUJ1Y2tldHM6W10sc3RhdGU6XCJcIixzdGF0ZVRpbWVzdGFtcDp2b2lkIDAsY2RuVHRsU2Vjb25kczpcIjBcIixjb250ZW50VXJsOlwiXCIsaXNDdXJyZW50bHlBY3RpdmU6ITEsaXNQcm92aXNpb25hbENsYWltOiExfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5pZD1uLnVpbnQzMigpO2JyZWFrO2Nhc2UgMjpvLnVzZUNhc2U9bi5zdHJpbmcoKTticmVhaztjYXNlIDM6by5leHRlcm5hbElkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA0Om8uZXhwaXJhdGlvbj11KGkuVGltZXN0YW1wLmRlY29kZShuLG4udWludDMyKCkpKTticmVhaztjYXNlIDU6by5yZWFkeUJ1Y2tldHMucHVzaChuLnN0cmluZygpKTticmVhaztjYXNlIDY6by5mdXR1cmVCdWNrZXRzLnB1c2gobi5zdHJpbmcoKSk7YnJlYWs7Y2FzZSA3Om8uc3RhdGU9bi5zdHJpbmcoKTticmVhaztjYXNlIDg6by5zdGF0ZVRpbWVzdGFtcD11KGkuVGltZXN0YW1wLmRlY29kZShuLG4udWludDMyKCkpKTticmVhaztjYXNlIDk6by5jZG5UdGxTZWNvbmRzPWQobi51aW50NjQoKSk7YnJlYWs7Y2FzZSAxMDpvLmNvbnRlbnRVcmw9bi5zdHJpbmcoKTticmVhaztjYXNlIDExOm8uaXNDdXJyZW50bHlBY3RpdmU9bi5ib29sKCk7YnJlYWs7Y2FzZSAxMjpvLmlzUHJvdmlzaW9uYWxDbGFpbT1uLmJvb2woKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2lkOjAsdXNlQ2FzZTpcIlwiLGV4dGVybmFsSWQ6XCJcIixleHBpcmF0aW9uOnZvaWQgMCxyZWFkeUJ1Y2tldHM6W10sZnV0dXJlQnVja2V0czpbXSxzdGF0ZTpcIlwiLHN0YXRlVGltZXN0YW1wOnZvaWQgMCxjZG5UdGxTZWNvbmRzOlwiMFwiLGNvbnRlbnRVcmw6XCJcIixpc0N1cnJlbnRseUFjdGl2ZTohMSxpc1Byb3Zpc2lvbmFsQ2xhaW06ITF9O3JldHVybiB0LmlkPWUuaWQ/PzAsdC51c2VDYXNlPWUudXNlQ2FzZT8/XCJcIix0LmV4dGVybmFsSWQ9ZS5leHRlcm5hbElkPz9cIlwiLHQuZXhwaXJhdGlvbj1lLmV4cGlyYXRpb24/P3ZvaWQgMCx0LnJlYWR5QnVja2V0cz1lLnJlYWR5QnVja2V0cz8ubWFwKChlPT5lKSl8fFtdLHQuZnV0dXJlQnVja2V0cz1lLmZ1dHVyZUJ1Y2tldHM/Lm1hcCgoZT0+ZSkpfHxbXSx0LnN0YXRlPWUuc3RhdGU/P1wiXCIsdC5zdGF0ZVRpbWVzdGFtcD1lLnN0YXRlVGltZXN0YW1wPz92b2lkIDAsdC5jZG5UdGxTZWNvbmRzPWUuY2RuVHRsU2Vjb25kcz8/XCIwXCIsdC5jb250ZW50VXJsPWUuY29udGVudFVybD8/XCJcIix0LmlzQ3VycmVudGx5QWN0aXZlPWUuaXNDdXJyZW50bHlBY3RpdmU/PyExLHQuaXNQcm92aXNpb25hbENsYWltPWUuaXNQcm92aXNpb25hbENsYWltPz8hMSx0fX0sdC5Jbmdlc3Rpb25PYmplY3Q9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5pbmdlc3Rpb25JZCYmdC51aW50MzIoMTApLnN0cmluZyhlLmluZ2VzdGlvbklkKSxcIlwiIT09ZS51c2VDYXNlJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUudXNlQ2FzZSksXCJcIiE9PWUuZXh0ZXJuYWxJZCYmdC51aW50MzIoMjYpLnN0cmluZyhlLmV4dGVybmFsSWQpLFwiXCIhPT1lLmNvbnRlbnRJZEZvckFzc2V0R3JvdXBDb250ZW50JiZ0LnVpbnQzMigzNCkuc3RyaW5nKGUuY29udGVudElkRm9yQXNzZXRHcm91cENvbnRlbnQpLFwiXCIhPT1lLm1lZGlhQnVuZGxlSWQmJnQudWludDMyKDgyKS5zdHJpbmcoZS5tZWRpYUJ1bmRsZUlkKSxcIlwiIT09ZS5jb250ZW50U2hhMjU2Q2hlY2tzdW0mJnQudWludDMyKDkwKS5zdHJpbmcoZS5jb250ZW50U2hhMjU2Q2hlY2tzdW0pLFwiXCIhPT1lLmNvbnRlbnRUeXBlJiZ0LnVpbnQzMig5OCkuc3RyaW5nKGUuY29udGVudFR5cGUpLFwiMFwiIT09ZS5zdGF0dXNDb2RlJiZ0LnVpbnQzMigxMDQpLnVpbnQ2NChlLnN0YXR1c0NvZGUpLFwiXCIhPT1lLmluZ2VzdGlvblN0YXRlJiZ0LnVpbnQzMigxMTQpLnN0cmluZyhlLmluZ2VzdGlvblN0YXRlKSx2b2lkIDAhPT1lLmxvY2tFeHBpcmF0aW9uJiZpLlRpbWVzdGFtcC5lbmNvZGUobChlLmxvY2tFeHBpcmF0aW9uKSx0LnVpbnQzMigxMjIpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS50aW1lVG9MaXZlJiZpLlRpbWVzdGFtcC5lbmNvZGUobChlLnRpbWVUb0xpdmUpLHQudWludDMyKDEzMCkuZm9yaygpKS5sZGVsaW0oKSxcIjBcIiE9PWUudmVyc2lvbiYmdC51aW50MzIoMTM2KS51aW50NjQoZS52ZXJzaW9uKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e2luZ2VzdGlvbklkOlwiXCIsdXNlQ2FzZTpcIlwiLGV4dGVybmFsSWQ6XCJcIixjb250ZW50SWRGb3JBc3NldEdyb3VwQ29udGVudDpcIlwiLG1lZGlhQnVuZGxlSWQ6XCJcIixjb250ZW50U2hhMjU2Q2hlY2tzdW06XCJcIixjb250ZW50VHlwZTpcIlwiLHN0YXR1c0NvZGU6XCIwXCIsaW5nZXN0aW9uU3RhdGU6XCJcIixsb2NrRXhwaXJhdGlvbjp2b2lkIDAsdGltZVRvTGl2ZTp2b2lkIDAsdmVyc2lvbjpcIjBcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8uaW5nZXN0aW9uSWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6by51c2VDYXNlPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOm8uZXh0ZXJuYWxJZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNDpvLmNvbnRlbnRJZEZvckFzc2V0R3JvdXBDb250ZW50PW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAxMDpvLm1lZGlhQnVuZGxlSWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDExOm8uY29udGVudFNoYTI1NkNoZWNrc3VtPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAxMjpvLmNvbnRlbnRUeXBlPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAxMzpvLnN0YXR1c0NvZGU9ZChuLnVpbnQ2NCgpKTticmVhaztjYXNlIDE0Om8uaW5nZXN0aW9uU3RhdGU9bi5zdHJpbmcoKTticmVhaztjYXNlIDE1Om8ubG9ja0V4cGlyYXRpb249dShpLlRpbWVzdGFtcC5kZWNvZGUobixuLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAxNjpvLnRpbWVUb0xpdmU9dShpLlRpbWVzdGFtcC5kZWNvZGUobixuLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAxNzpvLnZlcnNpb249ZChuLnVpbnQ2NCgpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2luZ2VzdGlvbklkOlwiXCIsdXNlQ2FzZTpcIlwiLGV4dGVybmFsSWQ6XCJcIixjb250ZW50SWRGb3JBc3NldEdyb3VwQ29udGVudDpcIlwiLG1lZGlhQnVuZGxlSWQ6XCJcIixjb250ZW50U2hhMjU2Q2hlY2tzdW06XCJcIixjb250ZW50VHlwZTpcIlwiLHN0YXR1c0NvZGU6XCIwXCIsaW5nZXN0aW9uU3RhdGU6XCJcIixsb2NrRXhwaXJhdGlvbjp2b2lkIDAsdGltZVRvTGl2ZTp2b2lkIDAsdmVyc2lvbjpcIjBcIn07cmV0dXJuIHQuaW5nZXN0aW9uSWQ9ZS5pbmdlc3Rpb25JZD8/XCJcIix0LnVzZUNhc2U9ZS51c2VDYXNlPz9cIlwiLHQuZXh0ZXJuYWxJZD1lLmV4dGVybmFsSWQ/P1wiXCIsdC5jb250ZW50SWRGb3JBc3NldEdyb3VwQ29udGVudD1lLmNvbnRlbnRJZEZvckFzc2V0R3JvdXBDb250ZW50Pz9cIlwiLHQubWVkaWFCdW5kbGVJZD1lLm1lZGlhQnVuZGxlSWQ/P1wiXCIsdC5jb250ZW50U2hhMjU2Q2hlY2tzdW09ZS5jb250ZW50U2hhMjU2Q2hlY2tzdW0/P1wiXCIsdC5jb250ZW50VHlwZT1lLmNvbnRlbnRUeXBlPz9cIlwiLHQuc3RhdHVzQ29kZT1lLnN0YXR1c0NvZGU/P1wiMFwiLHQuaW5nZXN0aW9uU3RhdGU9ZS5pbmdlc3Rpb25TdGF0ZT8/XCJcIix0LmxvY2tFeHBpcmF0aW9uPWUubG9ja0V4cGlyYXRpb24/P3ZvaWQgMCx0LnRpbWVUb0xpdmU9ZS50aW1lVG9MaXZlPz92b2lkIDAsdC52ZXJzaW9uPWUudmVyc2lvbj8/XCIwXCIsdH19LHQuQ29udGVudEFuYWx5c2lzT2JqZWN0PXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIE9iamVjdC5lbnRyaWVzKGUuY291bnRlcnNCeUNsYWltVXNlQ2FzZSkuZm9yRWFjaCgoZT0+e2xldFtyLGldPWU7dC5Db250ZW50QW5hbHlzaXNPYmplY3RfQ291bnRlcnNCeUNsYWltVXNlQ2FzZUVudHJ5LmVuY29kZSh7a2V5OnIsdmFsdWU6aX0sbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCl9KSksT2JqZWN0LmVudHJpZXMoZS5jb3VudGVyc0J5Q2xhaW1TdGF0ZSkuZm9yRWFjaCgoZT0+e2xldFtyLGldPWU7dC5Db250ZW50QW5hbHlzaXNPYmplY3RfQ291bnRlcnNCeUNsYWltU3RhdGVFbnRyeS5lbmNvZGUoe2tleTpyLHZhbHVlOml9LG4udWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpfSkpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17Y291bnRlcnNCeUNsYWltVXNlQ2FzZTp7fSxjb3VudGVyc0J5Q2xhaW1TdGF0ZTp7fX07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmNvbnN0IG49dC5Db250ZW50QW5hbHlzaXNPYmplY3RfQ291bnRlcnNCeUNsYWltVXNlQ2FzZUVudHJ5LmRlY29kZShyLHIudWludDMyKCkpO3ZvaWQgMCE9PW4udmFsdWUmJihvLmNvdW50ZXJzQnlDbGFpbVVzZUNhc2Vbbi5rZXldPW4udmFsdWUpO2JyZWFrO2Nhc2UgMjpjb25zdCBpPXQuQ29udGVudEFuYWx5c2lzT2JqZWN0X0NvdW50ZXJzQnlDbGFpbVN0YXRlRW50cnkuZGVjb2RlKHIsci51aW50MzIoKSk7dm9pZCAwIT09aS52YWx1ZSYmKG8uY291bnRlcnNCeUNsYWltU3RhdGVbaS5rZXldPWkudmFsdWUpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17Y291bnRlcnNCeUNsYWltVXNlQ2FzZTp7fSxjb3VudGVyc0J5Q2xhaW1TdGF0ZTp7fX07cmV0dXJuIHQuY291bnRlcnNCeUNsYWltVXNlQ2FzZT1PYmplY3QuZW50cmllcyhlLmNvdW50ZXJzQnlDbGFpbVVzZUNhc2U/P3t9KS5yZWR1Y2UoKChlLHQpPT57bGV0W24scl09dDtyZXR1cm4gdm9pZCAwIT09ciYmKGVbbl09TnVtYmVyKHIpKSxlfSkse30pLHQuY291bnRlcnNCeUNsYWltU3RhdGU9T2JqZWN0LmVudHJpZXMoZS5jb3VudGVyc0J5Q2xhaW1TdGF0ZT8/e30pLnJlZHVjZSgoKGUsdCk9PntsZXRbbixyXT10O3JldHVybiB2b2lkIDAhPT1yJiYoZVtuXT1OdW1iZXIocikpLGV9KSx7fSksdH19LHQuQ29udGVudEFuYWx5c2lzT2JqZWN0X0NvdW50ZXJzQnlDbGFpbVVzZUNhc2VFbnRyeT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmtleSYmdC51aW50MzIoMTApLnN0cmluZyhlLmtleSksMCE9PWUudmFsdWUmJnQudWludDMyKDE2KS51aW50MzIoZS52YWx1ZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtrZXk6XCJcIix2YWx1ZTowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5rZXk9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS52YWx1ZT1uLnVpbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17a2V5OlwiXCIsdmFsdWU6MH07cmV0dXJuIHQua2V5PWUua2V5Pz9cIlwiLHQudmFsdWU9ZS52YWx1ZT8/MCx0fX0sdC5Db250ZW50QW5hbHlzaXNPYmplY3RfQ291bnRlcnNCeUNsYWltU3RhdGVFbnRyeT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmtleSYmdC51aW50MzIoMTApLnN0cmluZyhlLmtleSksMCE9PWUudmFsdWUmJnQudWludDMyKDE2KS51aW50MzIoZS52YWx1ZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtrZXk6XCJcIix2YWx1ZTowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5rZXk9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS52YWx1ZT1uLnVpbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17a2V5OlwiXCIsdmFsdWU6MH07cmV0dXJuIHQua2V5PWUua2V5Pz9cIlwiLHQudmFsdWU9ZS52YWx1ZT8/MCx0fX0scy5kZWZhdWx0LnV0aWwuTG9uZyE9PW8uZGVmYXVsdCYmKHMuZGVmYXVsdC51dGlsLkxvbmc9by5kZWZhdWx0LHMuZGVmYXVsdC5jb25maWd1cmUoKSl9LDExNTc0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkV4dGVybmFsQ29udGVudERhdGE9dm9pZCAwO2NvbnN0IGk9cihuKDYyMTAwKSk7ZnVuY3Rpb24gbygpe3JldHVybntjb250ZW50Qnl0ZXM6bmV3IFVpbnQ4QXJyYXksY29udGVudFR5cGU6XCJcIn19dC5FeHRlcm5hbENvbnRlbnREYXRhPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLmNvbnRlbnRCeXRlcy5sZW5ndGgmJnQudWludDMyKDEwKS5ieXRlcyhlLmNvbnRlbnRCeXRlcyksXCJcIiE9PWUuY29udGVudFR5cGUmJnQudWludDMyKDE4KS5zdHJpbmcoZS5jb250ZW50VHlwZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBhPW8oKTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS5jb250ZW50Qnl0ZXM9bi5ieXRlcygpO2JyZWFrO2Nhc2UgMjphLmNvbnRlbnRUeXBlPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PW8oKTtyZXR1cm4gdC5jb250ZW50Qnl0ZXM9ZS5jb250ZW50Qnl0ZXM/P25ldyBVaW50OEFycmF5LHQuY29udGVudFR5cGU9ZS5jb250ZW50VHlwZT8/XCJcIix0fX19LDIxODc4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkV4dGVybmFsQ29udGVudFJlZmVyZW5jZT12b2lkIDA7Y29uc3QgaT1yKG4oNjIxMDApKTt0LkV4dGVybmFsQ29udGVudFJlZmVyZW5jZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5zdG9yYWdlUHJvdmlkZXImJnQudWludDMyKDgpLmludDMyKGUuc3RvcmFnZVByb3ZpZGVyKSwwIT09ZS5zdG9yYWdlUmVnaW9uJiZ0LnVpbnQzMigxNikuaW50MzIoZS5zdG9yYWdlUmVnaW9uKSxcIlwiIT09ZS5idWNrZXROYW1lJiZ0LnVpbnQzMigyNikuc3RyaW5nKGUuYnVja2V0TmFtZSksXCJcIiE9PWUub2JqZWN0UGF0aCYmdC51aW50MzIoMzQpLnN0cmluZyhlLm9iamVjdFBhdGgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17c3RvcmFnZVByb3ZpZGVyOjAsc3RvcmFnZVJlZ2lvbjowLGJ1Y2tldE5hbWU6XCJcIixvYmplY3RQYXRoOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLnN0b3JhZ2VQcm92aWRlcj1uLmludDMyKCk7YnJlYWs7Y2FzZSAyOm8uc3RvcmFnZVJlZ2lvbj1uLmludDMyKCk7YnJlYWs7Y2FzZSAzOm8uYnVja2V0TmFtZT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNDpvLm9iamVjdFBhdGg9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3N0b3JhZ2VQcm92aWRlcjowLHN0b3JhZ2VSZWdpb246MCxidWNrZXROYW1lOlwiXCIsb2JqZWN0UGF0aDpcIlwifTtyZXR1cm4gdC5zdG9yYWdlUHJvdmlkZXI9ZS5zdG9yYWdlUHJvdmlkZXI/PzAsdC5zdG9yYWdlUmVnaW9uPWUuc3RvcmFnZVJlZ2lvbj8/MCx0LmJ1Y2tldE5hbWU9ZS5idWNrZXROYW1lPz9cIlwiLHQub2JqZWN0UGF0aD1lLm9iamVjdFBhdGg/P1wiXCIsdH19fSwxODQ1MzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Bc3NldEdyb3VwQ2xhaW1SZXN1bHQ9dC5HZXRBc3NldEdyb3VwSW5nZXN0aW9uU3RhdHVzUmVzcG9uc2U9dC5HZXRBc3NldEdyb3VwSW5nZXN0aW9uU3RhdHVzUmVxdWVzdD12b2lkIDA7Y29uc3QgaT1uKDM0NTg1KSxvPXIobig2MjEwMCkpO3QuR2V0QXNzZXRHcm91cEluZ2VzdGlvblN0YXR1c1JlcXVlc3Q9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5leHRlcm5hbEFzc2V0R3JvdXBJZCYmdC51aW50MzIoMTApLnN0cmluZyhlLmV4dGVybmFsQXNzZXRHcm91cElkKSwwIT09ZS5jb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uJiZ0LnVpbnQzMigxNikuaW50MzIoZS5jb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2V4dGVybmFsQXNzZXRHcm91cElkOlwiXCIsY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbjowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5leHRlcm5hbEFzc2V0R3JvdXBJZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLmNvbnRlbnRSZWZlcmVuY2VSZXN1bHRPcHRpb249bi5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17ZXh0ZXJuYWxBc3NldEdyb3VwSWQ6XCJcIixjb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uOjB9O3JldHVybiB0LmV4dGVybmFsQXNzZXRHcm91cElkPWUuZXh0ZXJuYWxBc3NldEdyb3VwSWQ/P1wiXCIsdC5jb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uPWUuY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbj8/MCx0fX0sdC5HZXRBc3NldEdyb3VwSW5nZXN0aW9uU3RhdHVzUmVzcG9uc2U9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgciBvZiBlLnJlc3VsdHMpdC5Bc3NldEdyb3VwQ2xhaW1SZXN1bHQuZW5jb2RlKHIsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3QgYT17cmVzdWx0czpbXX07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO2U+Pj4zPT0xP2EucmVzdWx0cy5wdXNoKHQuQXNzZXRHcm91cENsYWltUmVzdWx0LmRlY29kZShyLHIudWludDMyKCkpKTpyLnNraXBUeXBlKDcmZSl9cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e3Jlc3VsdHM6W119O3JldHVybiBuLnJlc3VsdHM9ZS5yZXN1bHRzPy5tYXAoKGU9PnQuQXNzZXRHcm91cENsYWltUmVzdWx0LmZyb21QYXJ0aWFsKGUpKSl8fFtdLG59fSx0LkFzc2V0R3JvdXBDbGFpbVJlc3VsdD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS51c2VDYXNlJiZ0LnVpbnQzMig4KS51aW50MzIoZS51c2VDYXNlKSxcIlwiIT09ZS5leHRlcm5hbElkJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuZXh0ZXJuYWxJZCksdm9pZCAwIT09ZS5yZXN1bHQmJmkuQ29udGVudFJlZmVyZW5jZVJlc3VsdC5lbmNvZGUoZS5yZXN1bHQsdC51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBhPXt1c2VDYXNlOjAsZXh0ZXJuYWxJZDpcIlwiLHJlc3VsdDp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLnVzZUNhc2U9bi51aW50MzIoKTticmVhaztjYXNlIDI6YS5leHRlcm5hbElkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmEucmVzdWx0PWkuQ29udGVudFJlZmVyZW5jZVJlc3VsdC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3VzZUNhc2U6MCxleHRlcm5hbElkOlwiXCIscmVzdWx0OnZvaWQgMH07cmV0dXJuIHQudXNlQ2FzZT1lLnVzZUNhc2U/PzAsdC5leHRlcm5hbElkPWUuZXh0ZXJuYWxJZD8/XCJcIix0LnJlc3VsdD12b2lkIDAhPT1lLnJlc3VsdCYmbnVsbCE9PWUucmVzdWx0P2kuQ29udGVudFJlZmVyZW5jZVJlc3VsdC5mcm9tUGFydGlhbChlLnJlc3VsdCk6dm9pZCAwLHR9fX0sNzM3NzQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuR2V0Q29udGVudEluZ2VzdGlvblN0YXR1c1Jlc3BvbnNlPXQuR2V0Q29udGVudEluZ2VzdGlvblN0YXR1c1JlcXVlc3Q9dm9pZCAwO2NvbnN0IGk9bigzNDU4NSksbz1yKG4oNjIxMDApKTt0LkdldENvbnRlbnRJbmdlc3Rpb25TdGF0dXNSZXF1ZXN0PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLnVzZUNhc2UmJnQudWludDMyKDgpLnVpbnQzMihlLnVzZUNhc2UpLFwiXCIhPT1lLmV4dGVybmFsSWQmJnQudWludDMyKDE4KS5zdHJpbmcoZS5leHRlcm5hbElkKSwwIT09ZS5jb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uJiZ0LnVpbnQzMigyNCkuaW50MzIoZS5jb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3VzZUNhc2U6MCxleHRlcm5hbElkOlwiXCIsY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbjowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS51c2VDYXNlPW4udWludDMyKCk7YnJlYWs7Y2FzZSAyOmkuZXh0ZXJuYWxJZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMzppLmNvbnRlbnRSZWZlcmVuY2VSZXN1bHRPcHRpb249bi5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dXNlQ2FzZTowLGV4dGVybmFsSWQ6XCJcIixjb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uOjB9O3JldHVybiB0LnVzZUNhc2U9ZS51c2VDYXNlPz8wLHQuZXh0ZXJuYWxJZD1lLmV4dGVybmFsSWQ/P1wiXCIsdC5jb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uPWUuY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbj8/MCx0fX0sdC5HZXRDb250ZW50SW5nZXN0aW9uU3RhdHVzUmVzcG9uc2U9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4hMD09PWUuaXNJbmdlc3Rpb25Db21wbGV0ZWQmJnQudWludDMyKDgpLmJvb2woZS5pc0luZ2VzdGlvbkNvbXBsZXRlZCksdm9pZCAwIT09ZS5yZXN1bHQmJmkuQ29udGVudFJlZmVyZW5jZVJlc3VsdC5lbmNvZGUoZS5yZXN1bHQsdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBhPXtpc0luZ2VzdGlvbkNvbXBsZXRlZDohMSxyZXN1bHQ6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS5pc0luZ2VzdGlvbkNvbXBsZXRlZD1uLmJvb2woKTticmVhaztjYXNlIDI6YS5yZXN1bHQ9aS5Db250ZW50UmVmZXJlbmNlUmVzdWx0LmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17aXNJbmdlc3Rpb25Db21wbGV0ZWQ6ITEscmVzdWx0OnZvaWQgMH07cmV0dXJuIHQuaXNJbmdlc3Rpb25Db21wbGV0ZWQ9ZS5pc0luZ2VzdGlvbkNvbXBsZXRlZD8/ITEsdC5yZXN1bHQ9dm9pZCAwIT09ZS5yZXN1bHQmJm51bGwhPT1lLnJlc3VsdD9pLkNvbnRlbnRSZWZlcmVuY2VSZXN1bHQuZnJvbVBhcnRpYWwoZS5yZXN1bHQpOnZvaWQgMCx0fX19LDY3NDYxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkdldENvbnRlbnRSZWZlcmVuY2VzUmVzcG9uc2U9dC5HZXRDb250ZW50UmVmZXJlbmNlc1JlcXVlc3Q9dm9pZCAwO2NvbnN0IGk9bigzNjg1MSksbz1uKDYwNjgzKSxhPW4oMzQ1ODUpLHM9cihuKDYyMTAwKSk7dC5HZXRDb250ZW50UmVmZXJlbmNlc1JlcXVlc3Q9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgbiBvZiBlLmNvbnRlbnRSZWZlcmVuY2VzKWkuQ29udGVudFJlZmVyZW5jZS5lbmNvZGUobix0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gMCE9PWUuY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbiYmdC51aW50MzIoMTYpLmludDMyKGUuY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbiksITA9PT1lLmFsbG93VW5jbGFpbWVkVXBsb2FkTG9jYXRpb25Db250ZW50UmVmZXJlbmNlcyYmdC51aW50MzIoMjQpLmJvb2woZS5hbGxvd1VuY2xhaW1lZFVwbG9hZExvY2F0aW9uQ29udGVudFJlZmVyZW5jZXMpLCEwPT09ZS5yZXR1cm5Db250ZW50VXJsV2l0aE1lZGlhT3B0aW1pemF0aW9uRGVmYXVsdFZhcmlhbnRNZXRhZGF0YSYmdC51aW50MzIoMzIpLmJvb2woZS5yZXR1cm5Db250ZW50VXJsV2l0aE1lZGlhT3B0aW1pemF0aW9uRGVmYXVsdFZhcmlhbnRNZXRhZGF0YSksITA9PT1lLnNlbmRNZWRpYU9wdGltaXphdGlvbkNhbGxiYWNrJiZ0LnVpbnQzMig3OTIpLmJvb2woZS5zZW5kTWVkaWFPcHRpbWl6YXRpb25DYWxsYmFjayksdm9pZCAwIT09ZS5zZW5kTWVkaWFPcHRpbWl6YXRpb25DYWxsYmFja0FzeW5jTm90aWZpY2F0aW9uJiZvLkFzeW5jTm90aWZpY2F0aW9uLmVuY29kZShlLnNlbmRNZWRpYU9wdGltaXphdGlvbkNhbGxiYWNrQXN5bmNOb3RpZmljYXRpb24sdC51aW50MzIoODAyKS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgYT17Y29udGVudFJlZmVyZW5jZXM6W10sY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbjowLGFsbG93VW5jbGFpbWVkVXBsb2FkTG9jYXRpb25Db250ZW50UmVmZXJlbmNlczohMSxyZXR1cm5Db250ZW50VXJsV2l0aE1lZGlhT3B0aW1pemF0aW9uRGVmYXVsdFZhcmlhbnRNZXRhZGF0YTohMSxzZW5kTWVkaWFPcHRpbWl6YXRpb25DYWxsYmFjazohMSxzZW5kTWVkaWFPcHRpbWl6YXRpb25DYWxsYmFja0FzeW5jTm90aWZpY2F0aW9uOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmEuY29udGVudFJlZmVyZW5jZXMucHVzaChpLkNvbnRlbnRSZWZlcmVuY2UuZGVjb2RlKG4sbi51aW50MzIoKSkpO2JyZWFrO2Nhc2UgMjphLmNvbnRlbnRSZWZlcmVuY2VSZXN1bHRPcHRpb249bi5pbnQzMigpO2JyZWFrO2Nhc2UgMzphLmFsbG93VW5jbGFpbWVkVXBsb2FkTG9jYXRpb25Db250ZW50UmVmZXJlbmNlcz1uLmJvb2woKTticmVhaztjYXNlIDQ6YS5yZXR1cm5Db250ZW50VXJsV2l0aE1lZGlhT3B0aW1pemF0aW9uRGVmYXVsdFZhcmlhbnRNZXRhZGF0YT1uLmJvb2woKTticmVhaztjYXNlIDk5OmEuc2VuZE1lZGlhT3B0aW1pemF0aW9uQ2FsbGJhY2s9bi5ib29sKCk7YnJlYWs7Y2FzZSAxMDA6YS5zZW5kTWVkaWFPcHRpbWl6YXRpb25DYWxsYmFja0FzeW5jTm90aWZpY2F0aW9uPW8uQXN5bmNOb3RpZmljYXRpb24uZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtjb250ZW50UmVmZXJlbmNlczpbXSxjb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uOjAsYWxsb3dVbmNsYWltZWRVcGxvYWRMb2NhdGlvbkNvbnRlbnRSZWZlcmVuY2VzOiExLHJldHVybkNvbnRlbnRVcmxXaXRoTWVkaWFPcHRpbWl6YXRpb25EZWZhdWx0VmFyaWFudE1ldGFkYXRhOiExLHNlbmRNZWRpYU9wdGltaXphdGlvbkNhbGxiYWNrOiExLHNlbmRNZWRpYU9wdGltaXphdGlvbkNhbGxiYWNrQXN5bmNOb3RpZmljYXRpb246dm9pZCAwfTtyZXR1cm4gdC5jb250ZW50UmVmZXJlbmNlcz1lLmNvbnRlbnRSZWZlcmVuY2VzPy5tYXAoKGU9PmkuQ29udGVudFJlZmVyZW5jZS5mcm9tUGFydGlhbChlKSkpfHxbXSx0LmNvbnRlbnRSZWZlcmVuY2VSZXN1bHRPcHRpb249ZS5jb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uPz8wLHQuYWxsb3dVbmNsYWltZWRVcGxvYWRMb2NhdGlvbkNvbnRlbnRSZWZlcmVuY2VzPWUuYWxsb3dVbmNsYWltZWRVcGxvYWRMb2NhdGlvbkNvbnRlbnRSZWZlcmVuY2VzPz8hMSx0LnJldHVybkNvbnRlbnRVcmxXaXRoTWVkaWFPcHRpbWl6YXRpb25EZWZhdWx0VmFyaWFudE1ldGFkYXRhPWUucmV0dXJuQ29udGVudFVybFdpdGhNZWRpYU9wdGltaXphdGlvbkRlZmF1bHRWYXJpYW50TWV0YWRhdGE/PyExLHQuc2VuZE1lZGlhT3B0aW1pemF0aW9uQ2FsbGJhY2s9ZS5zZW5kTWVkaWFPcHRpbWl6YXRpb25DYWxsYmFjaz8/ITEsdC5zZW5kTWVkaWFPcHRpbWl6YXRpb25DYWxsYmFja0FzeW5jTm90aWZpY2F0aW9uPXZvaWQgMCE9PWUuc2VuZE1lZGlhT3B0aW1pemF0aW9uQ2FsbGJhY2tBc3luY05vdGlmaWNhdGlvbiYmbnVsbCE9PWUuc2VuZE1lZGlhT3B0aW1pemF0aW9uQ2FsbGJhY2tBc3luY05vdGlmaWNhdGlvbj9vLkFzeW5jTm90aWZpY2F0aW9uLmZyb21QYXJ0aWFsKGUuc2VuZE1lZGlhT3B0aW1pemF0aW9uQ2FsbGJhY2tBc3luY05vdGlmaWNhdGlvbik6dm9pZCAwLHR9fSx0LkdldENvbnRlbnRSZWZlcmVuY2VzUmVzcG9uc2U9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgbiBvZiBlLnJlc3VsdHMpYS5Db250ZW50UmVmZXJlbmNlUmVzdWx0LmVuY29kZShuLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiB0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3Jlc3VsdHM6W119O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLnJlc3VsdHMucHVzaChhLkNvbnRlbnRSZWZlcmVuY2VSZXN1bHQuZGVjb2RlKG4sbi51aW50MzIoKSkpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17cmVzdWx0czpbXX07cmV0dXJuIHQucmVzdWx0cz1lLnJlc3VsdHM/Lm1hcCgoZT0+YS5Db250ZW50UmVmZXJlbmNlUmVzdWx0LmZyb21QYXJ0aWFsKGUpKSl8fFtdLHR9fX0sNzQyNDI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuR2V0TmV0d29ya01hcHBpbmdSZXNwb25zZT10LkdldE5ldHdvcmtNYXBwaW5nUmVxdWVzdD12b2lkIDA7Y29uc3QgaT1uKDMzNTc5KSxvPXIobig2MjEwMCkpO3QuR2V0TmV0d29ya01hcHBpbmdSZXF1ZXN0PXtlbmNvZGUoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpfSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtuLnNraXBUeXBlKDcmZSl9cmV0dXJue319LGZyb21QYXJ0aWFsOmU9Pih7fSl9LHQuR2V0TmV0d29ya01hcHBpbmdSZXNwb25zZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLm1hcHBpbmcmJmkuTmV0d29ya01hcHBpbmcuZW5jb2RlKGUubWFwcGluZyx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGE9e21hcHBpbmc6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/YS5tYXBwaW5nPWkuTmV0d29ya01hcHBpbmcuZGVjb2RlKG4sbi51aW50MzIoKSk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXttYXBwaW5nOnZvaWQgMH07cmV0dXJuIHQubWFwcGluZz12b2lkIDAhPT1lLm1hcHBpbmcmJm51bGwhPT1lLm1hcHBpbmc/aS5OZXR3b3JrTWFwcGluZy5mcm9tUGFydGlhbChlLm1hcHBpbmcpOnZvaWQgMCx0fX19LDI4MzM0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlByZWNsYWltZWRVcGxvYWRMb2NhdGlvbj10LkdldFByZWNsYWltZWRVcGxvYWRMb2NhdGlvbnNSZXNwb25zZT10LkdldFByZWNsYWltZWRVcGxvYWRMb2NhdGlvbnNSZXF1ZXN0PXZvaWQgMDtjb25zdCBpPW4oMjQ1MjgpLG89bigzNDU4NSksYT1yKG4oNjIxMDApKTtmdW5jdGlvbiBzKGUpe2xldCB0PTFlMypOdW1iZXIoZS5zZWNvbmRzKTtyZXR1cm4gdCs9ZS5uYW5vcy8xZTYsbmV3IERhdGUodCl9dC5HZXRQcmVjbGFpbWVkVXBsb2FkTG9jYXRpb25zUmVxdWVzdD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS51c2VDYXNlJiZ0LnVpbnQzMig4KS51aW50MzIoZS51c2VDYXNlKSwwIT09ZS5iYXRjaFNpemUmJnQudWludDMyKDE2KS51aW50MzIoZS5iYXRjaFNpemUpLHZvaWQgMCE9PWUuZXhwaXJhdGlvbiYmaS5UaW1lc3RhbXAuZW5jb2RlKChuPWUuZXhwaXJhdGlvbix7c2Vjb25kczpNYXRoLnRydW5jKG4uZ2V0VGltZSgpLzFlMykudG9TdHJpbmcoKSxuYW5vczpuLmdldFRpbWUoKSUxZTMqMWU2fSksdC51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCksMCE9PWUuY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbiYmdC51aW50MzIoMzIpLmludDMyKGUuY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbiksdDt2YXIgbn0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXt1c2VDYXNlOjAsYmF0Y2hTaXplOjAsZXhwaXJhdGlvbjp2b2lkIDAsY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbjowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by51c2VDYXNlPW4udWludDMyKCk7YnJlYWs7Y2FzZSAyOm8uYmF0Y2hTaXplPW4udWludDMyKCk7YnJlYWs7Y2FzZSAzOm8uZXhwaXJhdGlvbj1zKGkuVGltZXN0YW1wLmRlY29kZShuLG4udWludDMyKCkpKTticmVhaztjYXNlIDQ6by5jb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uPW4uaW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3VzZUNhc2U6MCxiYXRjaFNpemU6MCxleHBpcmF0aW9uOnZvaWQgMCxjb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uOjB9O3JldHVybiB0LnVzZUNhc2U9ZS51c2VDYXNlPz8wLHQuYmF0Y2hTaXplPWUuYmF0Y2hTaXplPz8wLHQuZXhwaXJhdGlvbj1lLmV4cGlyYXRpb24/P3ZvaWQgMCx0LmNvbnRlbnRSZWZlcmVuY2VSZXN1bHRPcHRpb249ZS5jb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uPz8wLHR9fSx0LkdldFByZWNsYWltZWRVcGxvYWRMb2NhdGlvbnNSZXNwb25zZT17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO2Zvcihjb25zdCByIG9mIGUudXBsb2FkTG9jYXRpb25zKXQuUHJlY2xhaW1lZFVwbG9hZExvY2F0aW9uLmVuY29kZShyLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiBufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89e3VwbG9hZExvY2F0aW9uczpbXX07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO2U+Pj4zPT0xP28udXBsb2FkTG9jYXRpb25zLnB1c2godC5QcmVjbGFpbWVkVXBsb2FkTG9jYXRpb24uZGVjb2RlKHIsci51aW50MzIoKSkpOnIuc2tpcFR5cGUoNyZlKX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17dXBsb2FkTG9jYXRpb25zOltdfTtyZXR1cm4gbi51cGxvYWRMb2NhdGlvbnM9ZS51cGxvYWRMb2NhdGlvbnM/Lm1hcCgoZT0+dC5QcmVjbGFpbWVkVXBsb2FkTG9jYXRpb24uZnJvbVBhcnRpYWwoZSkpKXx8W10sbn19LHQuUHJlY2xhaW1lZFVwbG9hZExvY2F0aW9uPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUuYnVja2V0JiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUuYnVja2V0KSxcIlwiIT09ZS5wYXRoJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUucGF0aCksdm9pZCAwIT09ZS5jb250ZW50UmVmZXJlbmNlJiZvLkNvbnRlbnRSZWZlcmVuY2VSZXN1bHQuZW5jb2RlKGUuY29udGVudFJlZmVyZW5jZSx0LnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2J1Y2tldDpcIlwiLHBhdGg6XCJcIixjb250ZW50UmVmZXJlbmNlOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuYnVja2V0PW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkucGF0aD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMzppLmNvbnRlbnRSZWZlcmVuY2U9by5Db250ZW50UmVmZXJlbmNlUmVzdWx0LmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17YnVja2V0OlwiXCIscGF0aDpcIlwiLGNvbnRlbnRSZWZlcmVuY2U6dm9pZCAwfTtyZXR1cm4gdC5idWNrZXQ9ZS5idWNrZXQ/P1wiXCIsdC5wYXRoPWUucGF0aD8/XCJcIix0LmNvbnRlbnRSZWZlcmVuY2U9dm9pZCAwIT09ZS5jb250ZW50UmVmZXJlbmNlJiZudWxsIT09ZS5jb250ZW50UmVmZXJlbmNlP28uQ29udGVudFJlZmVyZW5jZVJlc3VsdC5mcm9tUGFydGlhbChlLmNvbnRlbnRSZWZlcmVuY2UpOnZvaWQgMCx0fX19LDc3MjA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuVXNlckNvbnRleHQ9dC5VcGxvYWRDb2ZDb25maWc9dC5HZXRVcGxvYWRMb2NhdGlvbnNSZXNwb25zZT10LkdldFVwbG9hZExvY2F0aW9uc1JlcXVlc3RfVXJsSGVhZGVyc0VudHJ5PXQuR2V0VXBsb2FkTG9jYXRpb25zUmVxdWVzdD12b2lkIDA7Y29uc3QgaT1yKG4oNDE1ODMpKSxvPW4oMzAzMiksYT1uKDk5NzI2KSxzPW4oNjU3NjQpLGM9cihuKDYyMTAwKSk7ZnVuY3Rpb24gbCgpe3JldHVybnt1c2VyQ29udGV4dDp2b2lkIDAsYmF0Y2hTaXplOjAsc3RvcmFnZVByb3ZpZGVyOjAsc3RvcmFnZVJlZ2lvbjowLGNsYWltOnZvaWQgMCxjb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uOjAsc3VmZml4RXh0ZW5zaW9uczpbXSx1cGxvYWRVcmxUeXBlczpbXSx1cmxIZWFkZXJzOnt9LHNraXBDZG5Gb3JVcGxvYWRVcmw6ITEsdXBsb2FkQ29mQ29uZmlnOm5ldyBVaW50OEFycmF5LHN0b3JhZ2VQb2xpY3k6dm9pZCAwLHVwbG9hZFVybEV4cGlyYXRpb25Ib3VyczowLG11bHRpcGFydE51bVBhcnRzOjAsd2l0aE1lc3NhZ2luZ1Byb3Zpc2lvbmFsUHJlY2xhaW06ITEsdXNlWmVyb1JhdGluZ0RvbWFpbkZvckdjc0xvY2F0aW9uczohMSxleHBlcmltZW50S2V5OlwiXCJ9fWZ1bmN0aW9uIHUoZSl7cmV0dXJuIGUudG9TdHJpbmcoKX10LkdldFVwbG9hZExvY2F0aW9uc1JlcXVlc3Q9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Yy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTt2b2lkIDAhPT1lLnVzZXJDb250ZXh0JiZ0LlVzZXJDb250ZXh0LmVuY29kZShlLnVzZXJDb250ZXh0LG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLmJhdGNoU2l6ZSYmbi51aW50MzIoMTYpLnVpbnQzMihlLmJhdGNoU2l6ZSksMCE9PWUuc3RvcmFnZVByb3ZpZGVyJiZuLnVpbnQzMigyNCkuaW50MzIoZS5zdG9yYWdlUHJvdmlkZXIpLDAhPT1lLnN0b3JhZ2VSZWdpb24mJm4udWludDMyKDQ4KS5pbnQzMihlLnN0b3JhZ2VSZWdpb24pLHZvaWQgMCE9PWUuY2xhaW0mJm8uQ2xhaW0uZW5jb2RlKGUuY2xhaW0sbi51aW50MzIoNjYpLmZvcmsoKSkubGRlbGltKCksMCE9PWUuY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbiYmbi51aW50MzIoMzIpLmludDMyKGUuY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbik7Zm9yKGNvbnN0IHQgb2YgZS5zdWZmaXhFeHRlbnNpb25zKW4udWludDMyKDQyKS5zdHJpbmcodCk7bi51aW50MzIoNTgpLmZvcmsoKTtmb3IoY29uc3QgdCBvZiBlLnVwbG9hZFVybFR5cGVzKW4uaW50MzIodCk7cmV0dXJuIG4ubGRlbGltKCksT2JqZWN0LmVudHJpZXMoZS51cmxIZWFkZXJzKS5mb3JFYWNoKChlPT57bGV0W3IsaV09ZTt0LkdldFVwbG9hZExvY2F0aW9uc1JlcXVlc3RfVXJsSGVhZGVyc0VudHJ5LmVuY29kZSh7a2V5OnIsdmFsdWU6aX0sbi51aW50MzIoNzQpLmZvcmsoKSkubGRlbGltKCl9KSksITA9PT1lLnNraXBDZG5Gb3JVcGxvYWRVcmwmJm4udWludDMyKDgwKS5ib29sKGUuc2tpcENkbkZvclVwbG9hZFVybCksMCE9PWUudXBsb2FkQ29mQ29uZmlnLmxlbmd0aCYmbi51aW50MzIoOTApLmJ5dGVzKGUudXBsb2FkQ29mQ29uZmlnKSx2b2lkIDAhPT1lLnN0b3JhZ2VQb2xpY3kmJmEuU3RvcmFnZVBvbGljeS5lbmNvZGUoZS5zdG9yYWdlUG9saWN5LG4udWludDMyKDk4KS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLnVwbG9hZFVybEV4cGlyYXRpb25Ib3VycyYmbi51aW50MzIoMTA0KS51aW50MzIoZS51cGxvYWRVcmxFeHBpcmF0aW9uSG91cnMpLDAhPT1lLm11bHRpcGFydE51bVBhcnRzJiZuLnVpbnQzMigxMTIpLnVpbnQzMihlLm11bHRpcGFydE51bVBhcnRzKSwhMD09PWUud2l0aE1lc3NhZ2luZ1Byb3Zpc2lvbmFsUHJlY2xhaW0mJm4udWludDMyKDEyMCkuYm9vbChlLndpdGhNZXNzYWdpbmdQcm92aXNpb25hbFByZWNsYWltKSwhMD09PWUudXNlWmVyb1JhdGluZ0RvbWFpbkZvckdjc0xvY2F0aW9ucyYmbi51aW50MzIoMTI4KS5ib29sKGUudXNlWmVyb1JhdGluZ0RvbWFpbkZvckdjc0xvY2F0aW9ucyksXCJcIiE9PWUuZXhwZXJpbWVudEtleSYmbi51aW50MzIoMTM4KS5zdHJpbmcoZS5leHBlcmltZW50S2V5KSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBjLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IHM9bCgpO2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpzLnVzZXJDb250ZXh0PXQuVXNlckNvbnRleHQuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOnMuYmF0Y2hTaXplPXIudWludDMyKCk7YnJlYWs7Y2FzZSAzOnMuc3RvcmFnZVByb3ZpZGVyPXIuaW50MzIoKTticmVhaztjYXNlIDY6cy5zdG9yYWdlUmVnaW9uPXIuaW50MzIoKTticmVhaztjYXNlIDg6cy5jbGFpbT1vLkNsYWltLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgNDpzLmNvbnRlbnRSZWZlcmVuY2VSZXN1bHRPcHRpb249ci5pbnQzMigpO2JyZWFrO2Nhc2UgNTpzLnN1ZmZpeEV4dGVuc2lvbnMucHVzaChyLnN0cmluZygpKTticmVhaztjYXNlIDc6aWYoMj09KDcmZSkpe2NvbnN0IGU9ci51aW50MzIoKStyLnBvcztmb3IoO3IucG9zPGU7KXMudXBsb2FkVXJsVHlwZXMucHVzaChyLmludDMyKCkpfWVsc2Ugcy51cGxvYWRVcmxUeXBlcy5wdXNoKHIuaW50MzIoKSk7YnJlYWs7Y2FzZSA5OmNvbnN0IG49dC5HZXRVcGxvYWRMb2NhdGlvbnNSZXF1ZXN0X1VybEhlYWRlcnNFbnRyeS5kZWNvZGUocixyLnVpbnQzMigpKTt2b2lkIDAhPT1uLnZhbHVlJiYocy51cmxIZWFkZXJzW24ua2V5XT1uLnZhbHVlKTticmVhaztjYXNlIDEwOnMuc2tpcENkbkZvclVwbG9hZFVybD1yLmJvb2woKTticmVhaztjYXNlIDExOnMudXBsb2FkQ29mQ29uZmlnPXIuYnl0ZXMoKTticmVhaztjYXNlIDEyOnMuc3RvcmFnZVBvbGljeT1hLlN0b3JhZ2VQb2xpY3kuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAxMzpzLnVwbG9hZFVybEV4cGlyYXRpb25Ib3Vycz1yLnVpbnQzMigpO2JyZWFrO2Nhc2UgMTQ6cy5tdWx0aXBhcnROdW1QYXJ0cz1yLnVpbnQzMigpO2JyZWFrO2Nhc2UgMTU6cy53aXRoTWVzc2FnaW5nUHJvdmlzaW9uYWxQcmVjbGFpbT1yLmJvb2woKTticmVhaztjYXNlIDE2OnMudXNlWmVyb1JhdGluZ0RvbWFpbkZvckdjc0xvY2F0aW9ucz1yLmJvb2woKTticmVhaztjYXNlIDE3OnMuZXhwZXJpbWVudEtleT1yLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gc30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj1sKCk7cmV0dXJuIG4udXNlckNvbnRleHQ9dm9pZCAwIT09ZS51c2VyQ29udGV4dCYmbnVsbCE9PWUudXNlckNvbnRleHQ/dC5Vc2VyQ29udGV4dC5mcm9tUGFydGlhbChlLnVzZXJDb250ZXh0KTp2b2lkIDAsbi5iYXRjaFNpemU9ZS5iYXRjaFNpemU/PzAsbi5zdG9yYWdlUHJvdmlkZXI9ZS5zdG9yYWdlUHJvdmlkZXI/PzAsbi5zdG9yYWdlUmVnaW9uPWUuc3RvcmFnZVJlZ2lvbj8/MCxuLmNsYWltPXZvaWQgMCE9PWUuY2xhaW0mJm51bGwhPT1lLmNsYWltP28uQ2xhaW0uZnJvbVBhcnRpYWwoZS5jbGFpbSk6dm9pZCAwLG4uY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbj1lLmNvbnRlbnRSZWZlcmVuY2VSZXN1bHRPcHRpb24/PzAsbi5zdWZmaXhFeHRlbnNpb25zPWUuc3VmZml4RXh0ZW5zaW9ucz8ubWFwKChlPT5lKSl8fFtdLG4udXBsb2FkVXJsVHlwZXM9ZS51cGxvYWRVcmxUeXBlcz8ubWFwKChlPT5lKSl8fFtdLG4udXJsSGVhZGVycz1PYmplY3QuZW50cmllcyhlLnVybEhlYWRlcnM/P3t9KS5yZWR1Y2UoKChlLHQpPT57bGV0W24scl09dDtyZXR1cm4gdm9pZCAwIT09ciYmKGVbbl09U3RyaW5nKHIpKSxlfSkse30pLG4uc2tpcENkbkZvclVwbG9hZFVybD1lLnNraXBDZG5Gb3JVcGxvYWRVcmw/PyExLG4udXBsb2FkQ29mQ29uZmlnPWUudXBsb2FkQ29mQ29uZmlnPz9uZXcgVWludDhBcnJheSxuLnN0b3JhZ2VQb2xpY3k9dm9pZCAwIT09ZS5zdG9yYWdlUG9saWN5JiZudWxsIT09ZS5zdG9yYWdlUG9saWN5P2EuU3RvcmFnZVBvbGljeS5mcm9tUGFydGlhbChlLnN0b3JhZ2VQb2xpY3kpOnZvaWQgMCxuLnVwbG9hZFVybEV4cGlyYXRpb25Ib3Vycz1lLnVwbG9hZFVybEV4cGlyYXRpb25Ib3Vycz8/MCxuLm11bHRpcGFydE51bVBhcnRzPWUubXVsdGlwYXJ0TnVtUGFydHM/PzAsbi53aXRoTWVzc2FnaW5nUHJvdmlzaW9uYWxQcmVjbGFpbT1lLndpdGhNZXNzYWdpbmdQcm92aXNpb25hbFByZWNsYWltPz8hMSxuLnVzZVplcm9SYXRpbmdEb21haW5Gb3JHY3NMb2NhdGlvbnM9ZS51c2VaZXJvUmF0aW5nRG9tYWluRm9yR2NzTG9jYXRpb25zPz8hMSxuLmV4cGVyaW1lbnRLZXk9ZS5leHBlcmltZW50S2V5Pz9cIlwiLG59fSx0LkdldFVwbG9hZExvY2F0aW9uc1JlcXVlc3RfVXJsSGVhZGVyc0VudHJ5PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUua2V5JiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUua2V5KSxcIlwiIT09ZS52YWx1ZSYmdC51aW50MzIoMTgpLnN0cmluZyhlLnZhbHVlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBjLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2tleTpcIlwiLHZhbHVlOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmtleT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLnZhbHVlPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtrZXk6XCJcIix2YWx1ZTpcIlwifTtyZXR1cm4gdC5rZXk9ZS5rZXk/P1wiXCIsdC52YWx1ZT1lLnZhbHVlPz9cIlwiLHR9fSx0LkdldFVwbG9hZExvY2F0aW9uc1Jlc3BvbnNlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7Zm9yKGNvbnN0IG4gb2YgZS51cGxvYWRMb2NhdGlvbnMpcy5VcGxvYWRMb2NhdGlvbi5lbmNvZGUobix0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBjLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXt1cGxvYWRMb2NhdGlvbnM6W119O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLnVwbG9hZExvY2F0aW9ucy5wdXNoKHMuVXBsb2FkTG9jYXRpb24uZGVjb2RlKG4sbi51aW50MzIoKSkpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dXBsb2FkTG9jYXRpb25zOltdfTtyZXR1cm4gdC51cGxvYWRMb2NhdGlvbnM9ZS51cGxvYWRMb2NhdGlvbnM/Lm1hcCgoZT0+cy5VcGxvYWRMb2NhdGlvbi5mcm9tUGFydGlhbChlKSkpfHxbXSx0fX0sdC5VcGxvYWRDb2ZDb25maWc9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Yy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUubnVtVXBsb2FkVXJscyYmdC51aW50MzIoOCkudWludDMyKGUubnVtVXBsb2FkVXJscyksXCIwXCIhPT1lLnN0b3JhZ2VSZWdpb25JZCYmdC51aW50MzIoMTYpLmludDY0KGUuc3RvcmFnZVJlZ2lvbklkKSwwIT09ZS51cGxvYWRVcmxFeHBpcmF0aW9uSG91cnMmJnQudWludDMyKDI0KS51aW50MzIoZS51cGxvYWRVcmxFeHBpcmF0aW9uSG91cnMpLFwiMFwiIT09ZS5nY3NSZXN1bWFibGVTdG9yYWdlUmVnaW9uSWQmJnQudWludDMyKDMyKS5pbnQ2NChlLmdjc1Jlc3VtYWJsZVN0b3JhZ2VSZWdpb25JZCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBjLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtudW1VcGxvYWRVcmxzOjAsc3RvcmFnZVJlZ2lvbklkOlwiMFwiLHVwbG9hZFVybEV4cGlyYXRpb25Ib3VyczowLGdjc1Jlc3VtYWJsZVN0b3JhZ2VSZWdpb25JZDpcIjBcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkubnVtVXBsb2FkVXJscz1uLnVpbnQzMigpO2JyZWFrO2Nhc2UgMjppLnN0b3JhZ2VSZWdpb25JZD11KG4uaW50NjQoKSk7YnJlYWs7Y2FzZSAzOmkudXBsb2FkVXJsRXhwaXJhdGlvbkhvdXJzPW4udWludDMyKCk7YnJlYWs7Y2FzZSA0OmkuZ2NzUmVzdW1hYmxlU3RvcmFnZVJlZ2lvbklkPXUobi5pbnQ2NCgpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e251bVVwbG9hZFVybHM6MCxzdG9yYWdlUmVnaW9uSWQ6XCIwXCIsdXBsb2FkVXJsRXhwaXJhdGlvbkhvdXJzOjAsZ2NzUmVzdW1hYmxlU3RvcmFnZVJlZ2lvbklkOlwiMFwifTtyZXR1cm4gdC5udW1VcGxvYWRVcmxzPWUubnVtVXBsb2FkVXJscz8/MCx0LnN0b3JhZ2VSZWdpb25JZD1lLnN0b3JhZ2VSZWdpb25JZD8/XCIwXCIsdC51cGxvYWRVcmxFeHBpcmF0aW9uSG91cnM9ZS51cGxvYWRVcmxFeHBpcmF0aW9uSG91cnM/PzAsdC5nY3NSZXN1bWFibGVTdG9yYWdlUmVnaW9uSWQ9ZS5nY3NSZXN1bWFibGVTdG9yYWdlUmVnaW9uSWQ/P1wiMFwiLHR9fSx0LlVzZXJDb250ZXh0PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUudXNlckNvdW50cnkmJnQudWludDMyKDEwKS5zdHJpbmcoZS51c2VyQ291bnRyeSksXCJcIiE9PWUudXNlcklwJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUudXNlcklwKSxcIlwiIT09ZS51c2VySWQmJnQudWludDMyKDI2KS5zdHJpbmcoZS51c2VySWQpLFwiXCIhPT1lLnVzZXJSZWdpb24mJnQudWludDMyKDM0KS5zdHJpbmcoZS51c2VyUmVnaW9uKSxcIlwiIT09ZS5hcHBWZXJzaW9uJiZ0LnVpbnQzMig4Mikuc3RyaW5nKGUuYXBwVmVyc2lvbiksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBjLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXt1c2VyQ291bnRyeTpcIlwiLHVzZXJJcDpcIlwiLHVzZXJJZDpcIlwiLHVzZXJSZWdpb246XCJcIixhcHBWZXJzaW9uOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnVzZXJDb3VudHJ5PW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkudXNlcklwPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmkudXNlcklkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA0OmkudXNlclJlZ2lvbj1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMTA6aS5hcHBWZXJzaW9uPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt1c2VyQ291bnRyeTpcIlwiLHVzZXJJcDpcIlwiLHVzZXJJZDpcIlwiLHVzZXJSZWdpb246XCJcIixhcHBWZXJzaW9uOlwiXCJ9O3JldHVybiB0LnVzZXJDb3VudHJ5PWUudXNlckNvdW50cnk/P1wiXCIsdC51c2VySXA9ZS51c2VySXA/P1wiXCIsdC51c2VySWQ9ZS51c2VySWQ/P1wiXCIsdC51c2VyUmVnaW9uPWUudXNlclJlZ2lvbj8/XCJcIix0LmFwcFZlcnNpb249ZS5hcHBWZXJzaW9uPz9cIlwiLHR9fSxjLmRlZmF1bHQudXRpbC5Mb25nIT09aS5kZWZhdWx0JiYoYy5kZWZhdWx0LnV0aWwuTG9uZz1pLmRlZmF1bHQsYy5kZWZhdWx0LmNvbmZpZ3VyZSgpKX0sMzI4MTY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuVXBsb2FkTG9jYXRpb25DYWNoZVZhbHVlPXQuVXBsb2FkTG9jYXRpb25GZXRjaFZhbHVlPXQuVXBsb2FkTG9jYXRpb25DYWNoZUNvbmZpZz10LlVwbG9hZExvY2F0aW9uQ2FjaGVLZXk9dC5VcGxvYWRMb2NhdGlvbnNCeUtleVJlc3BvbnNlPXQuR2V0VXBsb2FkTG9jYXRpb25zQnlLZXlSZXNwb25zZT10LlVwbG9hZExvY2F0aW9uc0J5S2V5UmVxdWVzdD10LkdldFVwbG9hZExvY2F0aW9uc0J5S2V5UmVxdWVzdD12b2lkIDA7Y29uc3QgaT1yKG4oNDE1ODMpKSxvPW4oNjU3NjQpLGE9big5OTcyNikscz1yKG4oNjIxMDApKTtmdW5jdGlvbiBjKCl7cmV0dXJue3VwbG9hZExvY2F0aW9uQ2FjaGVLZXk6bmV3IFVpbnQ4QXJyYXksYmF0Y2hTaXplOjB9fWZ1bmN0aW9uIGwoKXtyZXR1cm57c3RhdHVzQ29kZTowLHVwbG9hZExvY2F0aW9uQ2FjaGVLZXk6bmV3IFVpbnQ4QXJyYXksdXBsb2FkTG9jYXRpb25zOltdfX1mdW5jdGlvbiB1KCl7cmV0dXJue3VwbG9hZExvY2F0aW9uQ2FjaGVLZXk6bmV3IFVpbnQ4QXJyYXksbWluQ2FjaGVEZXB0aDowLGRlc2lyZWRDYWNoZURlcHRoOjAsZXhwaXJhdGlvbkJ1ZmZlckhvdXJzOjAsY2FjaGVBdHRyaWJ1dGlvbjpcIlwiLG11bHRpcGFydE1pbkNodW5rU2l6ZUJ5dGVzOjB9fXQuR2V0VXBsb2FkTG9jYXRpb25zQnlLZXlSZXF1ZXN0PXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7MCE9PWUuY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbiYmbi51aW50MzIoOCkuaW50MzIoZS5jb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uKTtmb3IoY29uc3QgciBvZiBlLnJlcXVlc3RzKXQuVXBsb2FkTG9jYXRpb25zQnlLZXlSZXF1ZXN0LmVuY29kZShyLG4udWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiBufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89e2NvbnRlbnRSZWZlcmVuY2VSZXN1bHRPcHRpb246MCxyZXF1ZXN0czpbXX07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8uY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbj1yLmludDMyKCk7YnJlYWs7Y2FzZSAyOm8ucmVxdWVzdHMucHVzaCh0LlVwbG9hZExvY2F0aW9uc0J5S2V5UmVxdWVzdC5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtjb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uOjAscmVxdWVzdHM6W119O3JldHVybiBuLmNvbnRlbnRSZWZlcmVuY2VSZXN1bHRPcHRpb249ZS5jb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uPz8wLG4ucmVxdWVzdHM9ZS5yZXF1ZXN0cz8ubWFwKChlPT50LlVwbG9hZExvY2F0aW9uc0J5S2V5UmVxdWVzdC5mcm9tUGFydGlhbChlKSkpfHxbXSxufX0sdC5VcGxvYWRMb2NhdGlvbnNCeUtleVJlcXVlc3Q9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUudXBsb2FkTG9jYXRpb25DYWNoZUtleS5sZW5ndGgmJnQudWludDMyKDEwKS5ieXRlcyhlLnVwbG9hZExvY2F0aW9uQ2FjaGVLZXkpLDAhPT1lLmJhdGNoU2l6ZSYmdC51aW50MzIoMTYpLnVpbnQzMihlLmJhdGNoU2l6ZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPWMoKTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS51cGxvYWRMb2NhdGlvbkNhY2hlS2V5PW4uYnl0ZXMoKTticmVhaztjYXNlIDI6aS5iYXRjaFNpemU9bi51aW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9YygpO3JldHVybiB0LnVwbG9hZExvY2F0aW9uQ2FjaGVLZXk9ZS51cGxvYWRMb2NhdGlvbkNhY2hlS2V5Pz9uZXcgVWludDhBcnJheSx0LmJhdGNoU2l6ZT1lLmJhdGNoU2l6ZT8/MCx0fX0sdC5HZXRVcGxvYWRMb2NhdGlvbnNCeUtleVJlc3BvbnNlPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7Zm9yKGNvbnN0IHIgb2YgZS5yZXNwb25zZXMpdC5VcGxvYWRMb2NhdGlvbnNCeUtleVJlc3BvbnNlLmVuY29kZShyLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiBufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89e3Jlc3BvbnNlczpbXX07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO2U+Pj4zPT0xP28ucmVzcG9uc2VzLnB1c2godC5VcGxvYWRMb2NhdGlvbnNCeUtleVJlc3BvbnNlLmRlY29kZShyLHIudWludDMyKCkpKTpyLnNraXBUeXBlKDcmZSl9cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e3Jlc3BvbnNlczpbXX07cmV0dXJuIG4ucmVzcG9uc2VzPWUucmVzcG9uc2VzPy5tYXAoKGU9PnQuVXBsb2FkTG9jYXRpb25zQnlLZXlSZXNwb25zZS5mcm9tUGFydGlhbChlKSkpfHxbXSxufX0sdC5VcGxvYWRMb2NhdGlvbnNCeUtleVJlc3BvbnNlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7MCE9PWUuc3RhdHVzQ29kZSYmdC51aW50MzIoOCkuaW50MzIoZS5zdGF0dXNDb2RlKSwwIT09ZS51cGxvYWRMb2NhdGlvbkNhY2hlS2V5Lmxlbmd0aCYmdC51aW50MzIoMTgpLmJ5dGVzKGUudXBsb2FkTG9jYXRpb25DYWNoZUtleSk7Zm9yKGNvbnN0IG4gb2YgZS51cGxvYWRMb2NhdGlvbnMpby5VcGxvYWRMb2NhdGlvbi5lbmNvZGUobix0LnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPWwoKTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5zdGF0dXNDb2RlPW4uaW50MzIoKTticmVhaztjYXNlIDI6aS51cGxvYWRMb2NhdGlvbkNhY2hlS2V5PW4uYnl0ZXMoKTticmVhaztjYXNlIDM6aS51cGxvYWRMb2NhdGlvbnMucHVzaChvLlVwbG9hZExvY2F0aW9uLmRlY29kZShuLG4udWludDMyKCkpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9bCgpO3JldHVybiB0LnN0YXR1c0NvZGU9ZS5zdGF0dXNDb2RlPz8wLHQudXBsb2FkTG9jYXRpb25DYWNoZUtleT1lLnVwbG9hZExvY2F0aW9uQ2FjaGVLZXk/P25ldyBVaW50OEFycmF5LHQudXBsb2FkTG9jYXRpb25zPWUudXBsb2FkTG9jYXRpb25zPy5tYXAoKGU9Pm8uVXBsb2FkTG9jYXRpb24uZnJvbVBhcnRpYWwoZSkpKXx8W10sdH19LHQuVXBsb2FkTG9jYXRpb25DYWNoZUtleT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiMFwiIT09ZS5zdG9yYWdlUmVnaW9uSWQmJnQudWludDMyKDgpLmludDY0KGUuc3RvcmFnZVJlZ2lvbklkKSwwIT09ZS51cGxvYWRVcmxUeXBlJiZ0LnVpbnQzMigxNikuaW50MzIoZS51cGxvYWRVcmxUeXBlKSx2b2lkIDAhPT1lLnN0b3JhZ2VQb2xpY3kmJmEuU3RvcmFnZVBvbGljeS5lbmNvZGUoZS5zdG9yYWdlUG9saWN5LHQudWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLnVwbG9hZFVybEV4cGlyYXRpb25Ib3VycyYmdC51aW50MzIoMzIpLnVpbnQzMihlLnVwbG9hZFVybEV4cGlyYXRpb25Ib3VycyksITA9PT1lLnNraXBDZG5Gb3JVcGxvYWRVcmwmJnQudWludDMyKDQwKS5ib29sKGUuc2tpcENkbkZvclVwbG9hZFVybCksMCE9PWUubXVsdGlwYXJ0TWF4TnVtQ2h1bmtzJiZ0LnVpbnQzMig0OCkudWludDMyKGUubXVsdGlwYXJ0TWF4TnVtQ2h1bmtzKSxcIlwiIT09ZS5zYWx0JiZ0LnVpbnQzMig1OCkuc3RyaW5nKGUuc2FsdCksITA9PT1lLndpdGhNZXNzYWdpbmdQcm92aXNpb25hbFByZWNsYWltJiZ0LnVpbnQzMig2NCkuYm9vbChlLndpdGhNZXNzYWdpbmdQcm92aXNpb25hbFByZWNsYWltKSxcIlwiIT09ZS5leHBlcmltZW50S2V5JiZ0LnVpbnQzMig3NCkuc3RyaW5nKGUuZXhwZXJpbWVudEtleSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtzdG9yYWdlUmVnaW9uSWQ6XCIwXCIsdXBsb2FkVXJsVHlwZTowLHN0b3JhZ2VQb2xpY3k6dm9pZCAwLHVwbG9hZFVybEV4cGlyYXRpb25Ib3VyczowLHNraXBDZG5Gb3JVcGxvYWRVcmw6ITEsbXVsdGlwYXJ0TWF4TnVtQ2h1bmtzOjAsc2FsdDpcIlwiLHdpdGhNZXNzYWdpbmdQcm92aXNpb25hbFByZWNsYWltOiExLGV4cGVyaW1lbnRLZXk6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuc3RvcmFnZVJlZ2lvbklkPW4uaW50NjQoKS50b1N0cmluZygpO2JyZWFrO2Nhc2UgMjppLnVwbG9hZFVybFR5cGU9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMzppLnN0b3JhZ2VQb2xpY3k9YS5TdG9yYWdlUG9saWN5LmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgNDppLnVwbG9hZFVybEV4cGlyYXRpb25Ib3Vycz1uLnVpbnQzMigpO2JyZWFrO2Nhc2UgNTppLnNraXBDZG5Gb3JVcGxvYWRVcmw9bi5ib29sKCk7YnJlYWs7Y2FzZSA2OmkubXVsdGlwYXJ0TWF4TnVtQ2h1bmtzPW4udWludDMyKCk7YnJlYWs7Y2FzZSA3Omkuc2FsdD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgODppLndpdGhNZXNzYWdpbmdQcm92aXNpb25hbFByZWNsYWltPW4uYm9vbCgpO2JyZWFrO2Nhc2UgOTppLmV4cGVyaW1lbnRLZXk9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3N0b3JhZ2VSZWdpb25JZDpcIjBcIix1cGxvYWRVcmxUeXBlOjAsc3RvcmFnZVBvbGljeTp2b2lkIDAsdXBsb2FkVXJsRXhwaXJhdGlvbkhvdXJzOjAsc2tpcENkbkZvclVwbG9hZFVybDohMSxtdWx0aXBhcnRNYXhOdW1DaHVua3M6MCxzYWx0OlwiXCIsd2l0aE1lc3NhZ2luZ1Byb3Zpc2lvbmFsUHJlY2xhaW06ITEsZXhwZXJpbWVudEtleTpcIlwifTtyZXR1cm4gdC5zdG9yYWdlUmVnaW9uSWQ9ZS5zdG9yYWdlUmVnaW9uSWQ/P1wiMFwiLHQudXBsb2FkVXJsVHlwZT1lLnVwbG9hZFVybFR5cGU/PzAsdC5zdG9yYWdlUG9saWN5PXZvaWQgMCE9PWUuc3RvcmFnZVBvbGljeSYmbnVsbCE9PWUuc3RvcmFnZVBvbGljeT9hLlN0b3JhZ2VQb2xpY3kuZnJvbVBhcnRpYWwoZS5zdG9yYWdlUG9saWN5KTp2b2lkIDAsdC51cGxvYWRVcmxFeHBpcmF0aW9uSG91cnM9ZS51cGxvYWRVcmxFeHBpcmF0aW9uSG91cnM/PzAsdC5za2lwQ2RuRm9yVXBsb2FkVXJsPWUuc2tpcENkbkZvclVwbG9hZFVybD8/ITEsdC5tdWx0aXBhcnRNYXhOdW1DaHVua3M9ZS5tdWx0aXBhcnRNYXhOdW1DaHVua3M/PzAsdC5zYWx0PWUuc2FsdD8/XCJcIix0LndpdGhNZXNzYWdpbmdQcm92aXNpb25hbFByZWNsYWltPWUud2l0aE1lc3NhZ2luZ1Byb3Zpc2lvbmFsUHJlY2xhaW0/PyExLHQuZXhwZXJpbWVudEtleT1lLmV4cGVyaW1lbnRLZXk/P1wiXCIsdH19LHQuVXBsb2FkTG9jYXRpb25DYWNoZUNvbmZpZz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS51cGxvYWRMb2NhdGlvbkNhY2hlS2V5Lmxlbmd0aCYmdC51aW50MzIoMTApLmJ5dGVzKGUudXBsb2FkTG9jYXRpb25DYWNoZUtleSksMCE9PWUubWluQ2FjaGVEZXB0aCYmdC51aW50MzIoMTYpLnVpbnQzMihlLm1pbkNhY2hlRGVwdGgpLDAhPT1lLmRlc2lyZWRDYWNoZURlcHRoJiZ0LnVpbnQzMigyNCkudWludDMyKGUuZGVzaXJlZENhY2hlRGVwdGgpLDAhPT1lLmV4cGlyYXRpb25CdWZmZXJIb3VycyYmdC51aW50MzIoMzIpLnVpbnQzMihlLmV4cGlyYXRpb25CdWZmZXJIb3VycyksXCJcIiE9PWUuY2FjaGVBdHRyaWJ1dGlvbiYmdC51aW50MzIoNDIpLnN0cmluZyhlLmNhY2hlQXR0cmlidXRpb24pLDAhPT1lLm11bHRpcGFydE1pbkNodW5rU2l6ZUJ5dGVzJiZ0LnVpbnQzMig0OCkudWludDMyKGUubXVsdGlwYXJ0TWluQ2h1bmtTaXplQnl0ZXMpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT11KCk7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkudXBsb2FkTG9jYXRpb25DYWNoZUtleT1uLmJ5dGVzKCk7YnJlYWs7Y2FzZSAyOmkubWluQ2FjaGVEZXB0aD1uLnVpbnQzMigpO2JyZWFrO2Nhc2UgMzppLmRlc2lyZWRDYWNoZURlcHRoPW4udWludDMyKCk7YnJlYWs7Y2FzZSA0OmkuZXhwaXJhdGlvbkJ1ZmZlckhvdXJzPW4udWludDMyKCk7YnJlYWs7Y2FzZSA1OmkuY2FjaGVBdHRyaWJ1dGlvbj1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNjppLm11bHRpcGFydE1pbkNodW5rU2l6ZUJ5dGVzPW4udWludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXUoKTtyZXR1cm4gdC51cGxvYWRMb2NhdGlvbkNhY2hlS2V5PWUudXBsb2FkTG9jYXRpb25DYWNoZUtleT8/bmV3IFVpbnQ4QXJyYXksdC5taW5DYWNoZURlcHRoPWUubWluQ2FjaGVEZXB0aD8/MCx0LmRlc2lyZWRDYWNoZURlcHRoPWUuZGVzaXJlZENhY2hlRGVwdGg/PzAsdC5leHBpcmF0aW9uQnVmZmVySG91cnM9ZS5leHBpcmF0aW9uQnVmZmVySG91cnM/PzAsdC5jYWNoZUF0dHJpYnV0aW9uPWUuY2FjaGVBdHRyaWJ1dGlvbj8/XCJcIix0Lm11bHRpcGFydE1pbkNodW5rU2l6ZUJ5dGVzPWUubXVsdGlwYXJ0TWluQ2h1bmtTaXplQnl0ZXM/PzAsdH19LHQuVXBsb2FkTG9jYXRpb25GZXRjaFZhbHVlPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7Zm9yKGNvbnN0IHIgb2YgZS5jb25maWdzKXQuVXBsb2FkTG9jYXRpb25DYWNoZUNvbmZpZy5lbmNvZGUocixuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXtjb25maWdzOltdfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7ZT4+PjM9PTE/by5jb25maWdzLnB1c2godC5VcGxvYWRMb2NhdGlvbkNhY2hlQ29uZmlnLmRlY29kZShyLHIudWludDMyKCkpKTpyLnNraXBUeXBlKDcmZSl9cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e2NvbmZpZ3M6W119O3JldHVybiBuLmNvbmZpZ3M9ZS5jb25maWdzPy5tYXAoKGU9PnQuVXBsb2FkTG9jYXRpb25DYWNoZUNvbmZpZy5mcm9tUGFydGlhbChlKSkpfHxbXSxufX0sdC5VcGxvYWRMb2NhdGlvbkNhY2hlVmFsdWU9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5jb25maWcmJnQuVXBsb2FkTG9jYXRpb25DYWNoZUNvbmZpZy5lbmNvZGUoZS5jb25maWcsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXtjb25maWc6dm9pZCAwfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7ZT4+PjM9PTE/by5jb25maWc9dC5VcGxvYWRMb2NhdGlvbkNhY2hlQ29uZmlnLmRlY29kZShyLHIudWludDMyKCkpOnIuc2tpcFR5cGUoNyZlKX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17Y29uZmlnOnZvaWQgMH07cmV0dXJuIG4uY29uZmlnPXZvaWQgMCE9PWUuY29uZmlnJiZudWxsIT09ZS5jb25maWc/dC5VcGxvYWRMb2NhdGlvbkNhY2hlQ29uZmlnLmZyb21QYXJ0aWFsKGUuY29uZmlnKTp2b2lkIDAsbn19LHMuZGVmYXVsdC51dGlsLkxvbmchPT1pLmRlZmF1bHQmJihzLmRlZmF1bHQudXRpbC5Mb25nPWkuZGVmYXVsdCxzLmRlZmF1bHQuY29uZmlndXJlKCkpfSw4ODM3ODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Jbmdlc3RBc3NldEdyb3VwUmVzcG9uc2U9dC5FeHRlcm5hbEFzc2V0R3JvdXBNYXBwaW5nX0V4dGVybmFsVXJsQnlPYmplY3RSZWxhdGl2ZVBhdGhFbnRyeT10LkV4dGVybmFsQXNzZXRHcm91cE1hcHBpbmc9dC5FeHRlcm5hbEFzc2V0R3JvdXBVcmw9dC5Jbmdlc3RBc3NldEdyb3VwUmVxdWVzdD12b2lkIDA7Y29uc3QgaT1uKDE3MzcpLG89cihuKDYyMTAwKSk7dC5Jbmdlc3RBc3NldEdyb3VwUmVxdWVzdD17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiZXh0ZXJuYWxVcmxcIj09PWUuZXh0ZXJuYWxSZWZlcmVuY2U/LiRjYXNlJiZ0LkV4dGVybmFsQXNzZXRHcm91cFVybC5lbmNvZGUoZS5leHRlcm5hbFJlZmVyZW5jZS5leHRlcm5hbFVybCxuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSxcImV4dGVybmFsQXNzZXRHcm91cE1hcHBpbmdcIj09PWUuZXh0ZXJuYWxSZWZlcmVuY2U/LiRjYXNlJiZ0LkV4dGVybmFsQXNzZXRHcm91cE1hcHBpbmcuZW5jb2RlKGUuZXh0ZXJuYWxSZWZlcmVuY2UuZXh0ZXJuYWxBc3NldEdyb3VwTWFwcGluZyxuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSxcImV4dGVybmFsWmlwVXJsXCI9PT1lLmV4dGVybmFsUmVmZXJlbmNlPy4kY2FzZSYmbi51aW50MzIoMjYpLnN0cmluZyhlLmV4dGVybmFsUmVmZXJlbmNlLmV4dGVybmFsWmlwVXJsKSxcIlwiIT09ZS5vYmplY3RJbmRleFJlbGF0aXZlUGF0aCYmbi51aW50MzIoMzQpLnN0cmluZyhlLm9iamVjdEluZGV4UmVsYXRpdmVQYXRoKSx2b2lkIDAhPT1lLnJlcXVlc3QmJmkuTmV3Q29udGVudFJlcXVlc3QuZW5jb2RlKGUucmVxdWVzdCxuLnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKSxcIlwiIT09ZS5leHRlcm5hbEFzc2V0R3JvdXBJZCYmbi51aW50MzIoNTApLnN0cmluZyhlLmV4dGVybmFsQXNzZXRHcm91cElkKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGE9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IHM9e2V4dGVybmFsUmVmZXJlbmNlOnZvaWQgMCxvYmplY3RJbmRleFJlbGF0aXZlUGF0aDpcIlwiLHJlcXVlc3Q6dm9pZCAwLGV4dGVybmFsQXNzZXRHcm91cElkOlwiXCJ9O2Zvcig7ci5wb3M8YTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpzLmV4dGVybmFsUmVmZXJlbmNlPXskY2FzZTpcImV4dGVybmFsVXJsXCIsZXh0ZXJuYWxVcmw6dC5FeHRlcm5hbEFzc2V0R3JvdXBVcmwuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMjpzLmV4dGVybmFsUmVmZXJlbmNlPXskY2FzZTpcImV4dGVybmFsQXNzZXRHcm91cE1hcHBpbmdcIixleHRlcm5hbEFzc2V0R3JvdXBNYXBwaW5nOnQuRXh0ZXJuYWxBc3NldEdyb3VwTWFwcGluZy5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAzOnMuZXh0ZXJuYWxSZWZlcmVuY2U9eyRjYXNlOlwiZXh0ZXJuYWxaaXBVcmxcIixleHRlcm5hbFppcFVybDpyLnN0cmluZygpfTticmVhaztjYXNlIDQ6cy5vYmplY3RJbmRleFJlbGF0aXZlUGF0aD1yLnN0cmluZygpO2JyZWFrO2Nhc2UgNTpzLnJlcXVlc3Q9aS5OZXdDb250ZW50UmVxdWVzdC5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDY6cy5leHRlcm5hbEFzc2V0R3JvdXBJZD1yLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gc30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17ZXh0ZXJuYWxSZWZlcmVuY2U6dm9pZCAwLG9iamVjdEluZGV4UmVsYXRpdmVQYXRoOlwiXCIscmVxdWVzdDp2b2lkIDAsZXh0ZXJuYWxBc3NldEdyb3VwSWQ6XCJcIn07cmV0dXJuXCJleHRlcm5hbFVybFwiPT09ZS5leHRlcm5hbFJlZmVyZW5jZT8uJGNhc2UmJnZvaWQgMCE9PWUuZXh0ZXJuYWxSZWZlcmVuY2U/LmV4dGVybmFsVXJsJiZudWxsIT09ZS5leHRlcm5hbFJlZmVyZW5jZT8uZXh0ZXJuYWxVcmwmJihuLmV4dGVybmFsUmVmZXJlbmNlPXskY2FzZTpcImV4dGVybmFsVXJsXCIsZXh0ZXJuYWxVcmw6dC5FeHRlcm5hbEFzc2V0R3JvdXBVcmwuZnJvbVBhcnRpYWwoZS5leHRlcm5hbFJlZmVyZW5jZS5leHRlcm5hbFVybCl9KSxcImV4dGVybmFsQXNzZXRHcm91cE1hcHBpbmdcIj09PWUuZXh0ZXJuYWxSZWZlcmVuY2U/LiRjYXNlJiZ2b2lkIDAhPT1lLmV4dGVybmFsUmVmZXJlbmNlPy5leHRlcm5hbEFzc2V0R3JvdXBNYXBwaW5nJiZudWxsIT09ZS5leHRlcm5hbFJlZmVyZW5jZT8uZXh0ZXJuYWxBc3NldEdyb3VwTWFwcGluZyYmKG4uZXh0ZXJuYWxSZWZlcmVuY2U9eyRjYXNlOlwiZXh0ZXJuYWxBc3NldEdyb3VwTWFwcGluZ1wiLGV4dGVybmFsQXNzZXRHcm91cE1hcHBpbmc6dC5FeHRlcm5hbEFzc2V0R3JvdXBNYXBwaW5nLmZyb21QYXJ0aWFsKGUuZXh0ZXJuYWxSZWZlcmVuY2UuZXh0ZXJuYWxBc3NldEdyb3VwTWFwcGluZyl9KSxcImV4dGVybmFsWmlwVXJsXCI9PT1lLmV4dGVybmFsUmVmZXJlbmNlPy4kY2FzZSYmdm9pZCAwIT09ZS5leHRlcm5hbFJlZmVyZW5jZT8uZXh0ZXJuYWxaaXBVcmwmJm51bGwhPT1lLmV4dGVybmFsUmVmZXJlbmNlPy5leHRlcm5hbFppcFVybCYmKG4uZXh0ZXJuYWxSZWZlcmVuY2U9eyRjYXNlOlwiZXh0ZXJuYWxaaXBVcmxcIixleHRlcm5hbFppcFVybDplLmV4dGVybmFsUmVmZXJlbmNlLmV4dGVybmFsWmlwVXJsfSksbi5vYmplY3RJbmRleFJlbGF0aXZlUGF0aD1lLm9iamVjdEluZGV4UmVsYXRpdmVQYXRoPz9cIlwiLG4ucmVxdWVzdD12b2lkIDAhPT1lLnJlcXVlc3QmJm51bGwhPT1lLnJlcXVlc3Q/aS5OZXdDb250ZW50UmVxdWVzdC5mcm9tUGFydGlhbChlLnJlcXVlc3QpOnZvaWQgMCxuLmV4dGVybmFsQXNzZXRHcm91cElkPWUuZXh0ZXJuYWxBc3NldEdyb3VwSWQ/P1wiXCIsbn19LHQuRXh0ZXJuYWxBc3NldEdyb3VwVXJsPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7XCJcIiE9PWUuZXh0ZXJuYWxBc3NldEdyb3VwVXJsJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUuZXh0ZXJuYWxBc3NldEdyb3VwVXJsKTtmb3IoY29uc3QgbiBvZiBlLm9iamVjdFJlbGF0aXZlUGF0aHMpdC51aW50MzIoMTgpLnN0cmluZyhuKTtyZXR1cm4gdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtleHRlcm5hbEFzc2V0R3JvdXBVcmw6XCJcIixvYmplY3RSZWxhdGl2ZVBhdGhzOltdfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5leHRlcm5hbEFzc2V0R3JvdXBVcmw9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS5vYmplY3RSZWxhdGl2ZVBhdGhzLnB1c2gobi5zdHJpbmcoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtleHRlcm5hbEFzc2V0R3JvdXBVcmw6XCJcIixvYmplY3RSZWxhdGl2ZVBhdGhzOltdfTtyZXR1cm4gdC5leHRlcm5hbEFzc2V0R3JvdXBVcmw9ZS5leHRlcm5hbEFzc2V0R3JvdXBVcmw/P1wiXCIsdC5vYmplY3RSZWxhdGl2ZVBhdGhzPWUub2JqZWN0UmVsYXRpdmVQYXRocz8ubWFwKChlPT5lKSl8fFtdLHR9fSx0LkV4dGVybmFsQXNzZXRHcm91cE1hcHBpbmc9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoZS5leHRlcm5hbFVybEJ5T2JqZWN0UmVsYXRpdmVQYXRoKS5mb3JFYWNoKChlPT57bGV0W3IsaV09ZTt0LkV4dGVybmFsQXNzZXRHcm91cE1hcHBpbmdfRXh0ZXJuYWxVcmxCeU9iamVjdFJlbGF0aXZlUGF0aEVudHJ5LmVuY29kZSh7a2V5OnIsdmFsdWU6aX0sbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCl9KSksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBhPXtleHRlcm5hbFVybEJ5T2JqZWN0UmVsYXRpdmVQYXRoOnt9fTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7aWYoZT4+PjM9PTEpe2NvbnN0IGU9dC5FeHRlcm5hbEFzc2V0R3JvdXBNYXBwaW5nX0V4dGVybmFsVXJsQnlPYmplY3RSZWxhdGl2ZVBhdGhFbnRyeS5kZWNvZGUocixyLnVpbnQzMigpKTt2b2lkIDAhPT1lLnZhbHVlJiYoYS5leHRlcm5hbFVybEJ5T2JqZWN0UmVsYXRpdmVQYXRoW2Uua2V5XT1lLnZhbHVlKX1lbHNlIHIuc2tpcFR5cGUoNyZlKX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17ZXh0ZXJuYWxVcmxCeU9iamVjdFJlbGF0aXZlUGF0aDp7fX07cmV0dXJuIHQuZXh0ZXJuYWxVcmxCeU9iamVjdFJlbGF0aXZlUGF0aD1PYmplY3QuZW50cmllcyhlLmV4dGVybmFsVXJsQnlPYmplY3RSZWxhdGl2ZVBhdGg/P3t9KS5yZWR1Y2UoKChlLHQpPT57bGV0W24scl09dDtyZXR1cm4gdm9pZCAwIT09ciYmKGVbbl09U3RyaW5nKHIpKSxlfSkse30pLHR9fSx0LkV4dGVybmFsQXNzZXRHcm91cE1hcHBpbmdfRXh0ZXJuYWxVcmxCeU9iamVjdFJlbGF0aXZlUGF0aEVudHJ5PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUua2V5JiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUua2V5KSxcIlwiIT09ZS52YWx1ZSYmdC51aW50MzIoMTgpLnN0cmluZyhlLnZhbHVlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2tleTpcIlwiLHZhbHVlOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmtleT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLnZhbHVlPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtrZXk6XCJcIix2YWx1ZTpcIlwifTtyZXR1cm4gdC5rZXk9ZS5rZXk/P1wiXCIsdC52YWx1ZT1lLnZhbHVlPz9cIlwiLHR9fSx0LkluZ2VzdEFzc2V0R3JvdXBSZXNwb25zZT17ZW5jb2RlKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKX0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7bi5za2lwVHlwZSg3JmUpfXJldHVybnt9fSxmcm9tUGFydGlhbDplPT4oe30pfX0sNjUyMzM6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuSW5nZXN0Q29udGVudFJlcXVlc3Q9dC5CYXRjaEluZ2VzdENvbnRlbnRSZXNwb25zZT10LkJhdGNoSW5nZXN0Q29udGVudFJlcXVlc3Q9dm9pZCAwO2NvbnN0IGk9bigxNzM3KSxvPW4oMjE4NzgpLGE9bigxMTU3NCkscz1yKG4oNjIxMDApKTt0LkJhdGNoSW5nZXN0Q29udGVudFJlcXVlc3Q9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgciBvZiBlLnJlcXVlc3RzKXQuSW5nZXN0Q29udGVudFJlcXVlc3QuZW5jb2RlKHIsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17cmVxdWVzdHM6W119O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtlPj4+Mz09MT9vLnJlcXVlc3RzLnB1c2godC5Jbmdlc3RDb250ZW50UmVxdWVzdC5kZWNvZGUocixyLnVpbnQzMigpKSk6ci5za2lwVHlwZSg3JmUpfXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtyZXF1ZXN0czpbXX07cmV0dXJuIG4ucmVxdWVzdHM9ZS5yZXF1ZXN0cz8ubWFwKChlPT50LkluZ2VzdENvbnRlbnRSZXF1ZXN0LmZyb21QYXJ0aWFsKGUpKSl8fFtdLG59fSx0LkJhdGNoSW5nZXN0Q29udGVudFJlc3BvbnNlPXtlbmNvZGUoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpfSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtuLnNraXBUeXBlKDcmZSl9cmV0dXJue319LGZyb21QYXJ0aWFsOmU9Pih7fSl9LHQuSW5nZXN0Q29udGVudFJlcXVlc3Q9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cImV4dGVybmFsQ29udGVudFJlZmVyZW5jZVwiPT09ZS5leHRlcm5hbFJlZmVyZW5jZT8uJGNhc2UmJm8uRXh0ZXJuYWxDb250ZW50UmVmZXJlbmNlLmVuY29kZShlLmV4dGVybmFsUmVmZXJlbmNlLmV4dGVybmFsQ29udGVudFJlZmVyZW5jZSx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSxcImV4dGVybmFsVXJsXCI9PT1lLmV4dGVybmFsUmVmZXJlbmNlPy4kY2FzZSYmdC51aW50MzIoMTgpLnN0cmluZyhlLmV4dGVybmFsUmVmZXJlbmNlLmV4dGVybmFsVXJsKSxcImV4dGVybmFsQ29udGVudERhdGFcIj09PWUuZXh0ZXJuYWxSZWZlcmVuY2U/LiRjYXNlJiZhLkV4dGVybmFsQ29udGVudERhdGEuZW5jb2RlKGUuZXh0ZXJuYWxSZWZlcmVuY2UuZXh0ZXJuYWxDb250ZW50RGF0YSx0LnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnJlcXVlc3QmJmkuTmV3Q29udGVudFJlcXVlc3QuZW5jb2RlKGUucmVxdWVzdCx0LnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSwhMD09PWUuaXNNbHNCYWNrZmlsbCYmdC51aW50MzIoMzIpLmJvb2woZS5pc01sc0JhY2tmaWxsKSwhMD09PWUuc2hvdWxkUmV0dXJuQ2hlY2tzdW0mJnQudWludDMyKDQ4KS5ib29sKGUuc2hvdWxkUmV0dXJuQ2hlY2tzdW0pLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgYz17ZXh0ZXJuYWxSZWZlcmVuY2U6dm9pZCAwLHJlcXVlc3Q6dm9pZCAwLGlzTWxzQmFja2ZpbGw6ITEsc2hvdWxkUmV0dXJuQ2hlY2tzdW06ITF9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpjLmV4dGVybmFsUmVmZXJlbmNlPXskY2FzZTpcImV4dGVybmFsQ29udGVudFJlZmVyZW5jZVwiLGV4dGVybmFsQ29udGVudFJlZmVyZW5jZTpvLkV4dGVybmFsQ29udGVudFJlZmVyZW5jZS5kZWNvZGUobixuLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAyOmMuZXh0ZXJuYWxSZWZlcmVuY2U9eyRjYXNlOlwiZXh0ZXJuYWxVcmxcIixleHRlcm5hbFVybDpuLnN0cmluZygpfTticmVhaztjYXNlIDU6Yy5leHRlcm5hbFJlZmVyZW5jZT17JGNhc2U6XCJleHRlcm5hbENvbnRlbnREYXRhXCIsZXh0ZXJuYWxDb250ZW50RGF0YTphLkV4dGVybmFsQ29udGVudERhdGEuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMzpjLnJlcXVlc3Q9aS5OZXdDb250ZW50UmVxdWVzdC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDQ6Yy5pc01sc0JhY2tmaWxsPW4uYm9vbCgpO2JyZWFrO2Nhc2UgNjpjLnNob3VsZFJldHVybkNoZWNrc3VtPW4uYm9vbCgpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gY30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17ZXh0ZXJuYWxSZWZlcmVuY2U6dm9pZCAwLHJlcXVlc3Q6dm9pZCAwLGlzTWxzQmFja2ZpbGw6ITEsc2hvdWxkUmV0dXJuQ2hlY2tzdW06ITF9O3JldHVyblwiZXh0ZXJuYWxDb250ZW50UmVmZXJlbmNlXCI9PT1lLmV4dGVybmFsUmVmZXJlbmNlPy4kY2FzZSYmdm9pZCAwIT09ZS5leHRlcm5hbFJlZmVyZW5jZT8uZXh0ZXJuYWxDb250ZW50UmVmZXJlbmNlJiZudWxsIT09ZS5leHRlcm5hbFJlZmVyZW5jZT8uZXh0ZXJuYWxDb250ZW50UmVmZXJlbmNlJiYodC5leHRlcm5hbFJlZmVyZW5jZT17JGNhc2U6XCJleHRlcm5hbENvbnRlbnRSZWZlcmVuY2VcIixleHRlcm5hbENvbnRlbnRSZWZlcmVuY2U6by5FeHRlcm5hbENvbnRlbnRSZWZlcmVuY2UuZnJvbVBhcnRpYWwoZS5leHRlcm5hbFJlZmVyZW5jZS5leHRlcm5hbENvbnRlbnRSZWZlcmVuY2UpfSksXCJleHRlcm5hbFVybFwiPT09ZS5leHRlcm5hbFJlZmVyZW5jZT8uJGNhc2UmJnZvaWQgMCE9PWUuZXh0ZXJuYWxSZWZlcmVuY2U/LmV4dGVybmFsVXJsJiZudWxsIT09ZS5leHRlcm5hbFJlZmVyZW5jZT8uZXh0ZXJuYWxVcmwmJih0LmV4dGVybmFsUmVmZXJlbmNlPXskY2FzZTpcImV4dGVybmFsVXJsXCIsZXh0ZXJuYWxVcmw6ZS5leHRlcm5hbFJlZmVyZW5jZS5leHRlcm5hbFVybH0pLFwiZXh0ZXJuYWxDb250ZW50RGF0YVwiPT09ZS5leHRlcm5hbFJlZmVyZW5jZT8uJGNhc2UmJnZvaWQgMCE9PWUuZXh0ZXJuYWxSZWZlcmVuY2U/LmV4dGVybmFsQ29udGVudERhdGEmJm51bGwhPT1lLmV4dGVybmFsUmVmZXJlbmNlPy5leHRlcm5hbENvbnRlbnREYXRhJiYodC5leHRlcm5hbFJlZmVyZW5jZT17JGNhc2U6XCJleHRlcm5hbENvbnRlbnREYXRhXCIsZXh0ZXJuYWxDb250ZW50RGF0YTphLkV4dGVybmFsQ29udGVudERhdGEuZnJvbVBhcnRpYWwoZS5leHRlcm5hbFJlZmVyZW5jZS5leHRlcm5hbENvbnRlbnREYXRhKX0pLHQucmVxdWVzdD12b2lkIDAhPT1lLnJlcXVlc3QmJm51bGwhPT1lLnJlcXVlc3Q/aS5OZXdDb250ZW50UmVxdWVzdC5mcm9tUGFydGlhbChlLnJlcXVlc3QpOnZvaWQgMCx0LmlzTWxzQmFja2ZpbGw9ZS5pc01sc0JhY2tmaWxsPz8hMSx0LnNob3VsZFJldHVybkNoZWNrc3VtPWUuc2hvdWxkUmV0dXJuQ2hlY2tzdW0/PyExLHR9fX0sODI4MjooZSx0LG4pPT57dC5QND10LnFWPXQuYkU9dC5Ycj10LnNXPXQuWXU9dC5ERT10LnkzPXQuckg9dC5vTz10LnRWPXQuTnk9dC5Iej10LnZHPXQuaEs9dC4kZD10LlMkPXQuVz10LlZ5PXQua1M9dC5qVD10LndMPXQuSjA9dm9pZCAwLG4oMzMwMzcpO2NvbnN0IHI9bigxMTE2NSksaT1uKDY1MjMzKSxvPW4oNzM3NzQpLGE9big2NzQ2MSkscz1uKDI0NjMyKSxjPW4oNjkzODUpLGw9bigzMTkzMCksdT1uKDc3MjApLGQ9bigzMjgxNiksZj1uKDY3MCkscD1uKDc0MjQyKSxtPW4oMjgzMzQpLGg9bigyODkzNyksdj1uKDM4Njc0KSxnPW4oNDU3NjMpLHk9bigzNDYyMyksRT1uKDg2MDM0KSxfPW4oODgzNzgpLEk9big4ODA2MCksUz1uKDE4NDUzKSxiPW4oMjQ2OTcpO24oODIwODQpLHQuSjA9Y2xhc3N7cnBjO2NvbnN0cnVjdG9yKGUpe3RoaXMucnBjPWUsdGhpcy5jbGFpbUNvbnRlbnQ9dGhpcy5jbGFpbUNvbnRlbnQuYmluZCh0aGlzKSx0aGlzLmJhdGNoSW5nZXN0Q29udGVudD10aGlzLmJhdGNoSW5nZXN0Q29udGVudC5iaW5kKHRoaXMpLHRoaXMuZ2V0Q29udGVudEluZ2VzdGlvblN0YXR1cz10aGlzLmdldENvbnRlbnRJbmdlc3Rpb25TdGF0dXMuYmluZCh0aGlzKSx0aGlzLmdldENvbnRlbnRSZWZlcmVuY2VzPXRoaXMuZ2V0Q29udGVudFJlZmVyZW5jZXMuYmluZCh0aGlzKSx0aGlzLmNvcHlDb250ZW50PXRoaXMuY29weUNvbnRlbnQuYmluZCh0aGlzKSx0aGlzLnVuY2xhaW1Db250ZW50cz10aGlzLnVuY2xhaW1Db250ZW50cy5iaW5kKHRoaXMpLHRoaXMudGFrZWRvd25Db250ZW50PXRoaXMudGFrZWRvd25Db250ZW50LmJpbmQodGhpcyksdGhpcy5nZXRVcGxvYWRMb2NhdGlvbnM9dGhpcy5nZXRVcGxvYWRMb2NhdGlvbnMuYmluZCh0aGlzKSx0aGlzLmdldFVwbG9hZExvY2F0aW9uc0J5S2V5PXRoaXMuZ2V0VXBsb2FkTG9jYXRpb25zQnlLZXkuYmluZCh0aGlzKSx0aGlzLnJlZnJlc2hVcGxvYWRMb2NhdGlvbj10aGlzLnJlZnJlc2hVcGxvYWRMb2NhdGlvbi5iaW5kKHRoaXMpLHRoaXMuZ2V0TmV0d29ya01hcHBpbmc9dGhpcy5nZXROZXR3b3JrTWFwcGluZy5iaW5kKHRoaXMpLHRoaXMuZ2V0UHJlY2xhaW1lZFVwbG9hZExvY2F0aW9ucz10aGlzLmdldFByZWNsYWltZWRVcGxvYWRMb2NhdGlvbnMuYmluZCh0aGlzKSx0aGlzLnVwZGF0ZUNsYWltPXRoaXMudXBkYXRlQ2xhaW0uYmluZCh0aGlzKSx0aGlzLnVwZGF0ZUNvbnRlbnRFeHBpcnk9dGhpcy51cGRhdGVDb250ZW50RXhwaXJ5LmJpbmQodGhpcyksdGhpcy5yZXNvbHZlQ29udGVudE9iamVjdHM9dGhpcy5yZXNvbHZlQ29udGVudE9iamVjdHMuYmluZCh0aGlzKSx0aGlzLmNsYWltUmVsYXRlZENvbnRlbnRzPXRoaXMuY2xhaW1SZWxhdGVkQ29udGVudHMuYmluZCh0aGlzKSx0aGlzLmNvbWJpbmVDb250ZW50cz10aGlzLmNvbWJpbmVDb250ZW50cy5iaW5kKHRoaXMpLHRoaXMuaW5nZXN0QXNzZXRHcm91cD10aGlzLmluZ2VzdEFzc2V0R3JvdXAuYmluZCh0aGlzKSx0aGlzLnVuY2xhaW1Bc3NldEdyb3VwPXRoaXMudW5jbGFpbUFzc2V0R3JvdXAuYmluZCh0aGlzKSx0aGlzLmdldEFzc2V0R3JvdXBJbmdlc3Rpb25TdGF0dXM9dGhpcy5nZXRBc3NldEdyb3VwSW5nZXN0aW9uU3RhdHVzLmJpbmQodGhpcyksdGhpcy5kZWJ1Z0NvbnRlbnQ9dGhpcy5kZWJ1Z0NvbnRlbnQuYmluZCh0aGlzKX1jbGFpbUNvbnRlbnQoZSxuKXtyZXR1cm4gdGhpcy5ycGMudW5hcnkodC5qVCxyLkNsYWltQ29udGVudFJlcXVlc3QuZnJvbVBhcnRpYWwoZSksbil9YmF0Y2hJbmdlc3RDb250ZW50KGUsbil7cmV0dXJuIHRoaXMucnBjLnVuYXJ5KHQua1MsaS5CYXRjaEluZ2VzdENvbnRlbnRSZXF1ZXN0LmZyb21QYXJ0aWFsKGUpLG4pfWdldENvbnRlbnRJbmdlc3Rpb25TdGF0dXMoZSxuKXtyZXR1cm4gdGhpcy5ycGMudW5hcnkodC5WeSxvLkdldENvbnRlbnRJbmdlc3Rpb25TdGF0dXNSZXF1ZXN0LmZyb21QYXJ0aWFsKGUpLG4pfWdldENvbnRlbnRSZWZlcmVuY2VzKGUsbil7cmV0dXJuIHRoaXMucnBjLnVuYXJ5KHQuVyxhLkdldENvbnRlbnRSZWZlcmVuY2VzUmVxdWVzdC5mcm9tUGFydGlhbChlKSxuKX1jb3B5Q29udGVudChlLG4pe3JldHVybiB0aGlzLnJwYy51bmFyeSh0LlMkLHMuQ29weUNvbnRlbnRSZXF1ZXN0LmZyb21QYXJ0aWFsKGUpLG4pfXVuY2xhaW1Db250ZW50cyhlLG4pe3JldHVybiB0aGlzLnJwYy51bmFyeSh0LiRkLGMuVW5jbGFpbUNvbnRlbnRzUmVxdWVzdC5mcm9tUGFydGlhbChlKSxuKX10YWtlZG93bkNvbnRlbnQoZSxuKXtyZXR1cm4gdGhpcy5ycGMudW5hcnkodC5oSyxsLlRha2Vkb3duQ29udGVudFJlcXVlc3QuZnJvbVBhcnRpYWwoZSksbil9Z2V0VXBsb2FkTG9jYXRpb25zKGUsbil7cmV0dXJuIHRoaXMucnBjLnVuYXJ5KHQudkcsdS5HZXRVcGxvYWRMb2NhdGlvbnNSZXF1ZXN0LmZyb21QYXJ0aWFsKGUpLG4pfWdldFVwbG9hZExvY2F0aW9uc0J5S2V5KGUsbil7cmV0dXJuIHRoaXMucnBjLnVuYXJ5KHQuSHosZC5HZXRVcGxvYWRMb2NhdGlvbnNCeUtleVJlcXVlc3QuZnJvbVBhcnRpYWwoZSksbil9cmVmcmVzaFVwbG9hZExvY2F0aW9uKGUsbil7cmV0dXJuIHRoaXMucnBjLnVuYXJ5KHQuTnksZi5SZWZyZXNoVXBsb2FkTG9jYXRpb25SZXF1ZXN0LmZyb21QYXJ0aWFsKGUpLG4pfWdldE5ldHdvcmtNYXBwaW5nKGUsbil7cmV0dXJuIHRoaXMucnBjLnVuYXJ5KHQudFYscC5HZXROZXR3b3JrTWFwcGluZ1JlcXVlc3QuZnJvbVBhcnRpYWwoZSksbil9Z2V0UHJlY2xhaW1lZFVwbG9hZExvY2F0aW9ucyhlLG4pe3JldHVybiB0aGlzLnJwYy51bmFyeSh0Lm9PLG0uR2V0UHJlY2xhaW1lZFVwbG9hZExvY2F0aW9uc1JlcXVlc3QuZnJvbVBhcnRpYWwoZSksbil9dXBkYXRlQ2xhaW0oZSxuKXtyZXR1cm4gdGhpcy5ycGMudW5hcnkodC5ySCxoLlVwZGF0ZUNsYWltUmVxdWVzdC5mcm9tUGFydGlhbChlKSxuKX11cGRhdGVDb250ZW50RXhwaXJ5KGUsbil7cmV0dXJuIHRoaXMucnBjLnVuYXJ5KHQueTMsdi5VcGRhdGVDb250ZW50RXhwaXJ5UmVxdWVzdC5mcm9tUGFydGlhbChlKSxuKX1yZXNvbHZlQ29udGVudE9iamVjdHMoZSxuKXtyZXR1cm4gdGhpcy5ycGMudW5hcnkodC5ERSxnLlJlc29sdmVDb250ZW50T2JqZWN0c1JlcXVlc3QuZnJvbVBhcnRpYWwoZSksbil9Y2xhaW1SZWxhdGVkQ29udGVudHMoZSxuKXtyZXR1cm4gdGhpcy5ycGMudW5hcnkodC5ZdSx5LkNsYWltUmVsYXRlZENvbnRlbnRzUmVxdWVzdC5mcm9tUGFydGlhbChlKSxuKX1jb21iaW5lQ29udGVudHMoZSxuKXtyZXR1cm4gdGhpcy5ycGMudW5hcnkodC5zVyxFLkNvbWJpbmVDb250ZW50c1JlcXVlc3QuZnJvbVBhcnRpYWwoZSksbil9aW5nZXN0QXNzZXRHcm91cChlLG4pe3JldHVybiB0aGlzLnJwYy51bmFyeSh0LlhyLF8uSW5nZXN0QXNzZXRHcm91cFJlcXVlc3QuZnJvbVBhcnRpYWwoZSksbil9dW5jbGFpbUFzc2V0R3JvdXAoZSxuKXtyZXR1cm4gdGhpcy5ycGMudW5hcnkodC5iRSxJLlVuY2xhaW1Bc3NldEdyb3VwUmVxdWVzdC5mcm9tUGFydGlhbChlKSxuKX1nZXRBc3NldEdyb3VwSW5nZXN0aW9uU3RhdHVzKGUsbil7cmV0dXJuIHRoaXMucnBjLnVuYXJ5KHQucVYsUy5HZXRBc3NldEdyb3VwSW5nZXN0aW9uU3RhdHVzUmVxdWVzdC5mcm9tUGFydGlhbChlKSxuKX1kZWJ1Z0NvbnRlbnQoZSxuKXtyZXR1cm4gdGhpcy5ycGMudW5hcnkodC5QNCxiLkRlYnVnQ29udGVudFJlcXVlc3QuZnJvbVBhcnRpYWwoZSksbil9fSx0LndMPXtzZXJ2aWNlTmFtZTpcInNuYXBjaGF0LmNvbnRlbnQudjIuTWVkaWFEZWxpdmVyeVNlcnZpY2VcIn0sdC5qVD17bWV0aG9kTmFtZTpcImNsYWltQ29udGVudFwiLHNlcnZpY2U6dC53TCxyZXF1ZXN0U3RyZWFtOiExLHJlc3BvbnNlU3RyZWFtOiExLHJlcXVlc3RUeXBlOntzZXJpYWxpemVCaW5hcnkoKXtyZXR1cm4gci5DbGFpbUNvbnRlbnRSZXF1ZXN0LmVuY29kZSh0aGlzKS5maW5pc2goKX19LHJlc3BvbnNlVHlwZTp7ZGVzZXJpYWxpemVCaW5hcnk6ZT0+KHsuLi5yLkNsYWltQ29udGVudFJlc3BvbnNlLmRlY29kZShlKSx0b09iamVjdCgpe3JldHVybiB0aGlzfX0pfX0sdC5rUz17bWV0aG9kTmFtZTpcImJhdGNoSW5nZXN0Q29udGVudFwiLHNlcnZpY2U6dC53TCxyZXF1ZXN0U3RyZWFtOiExLHJlc3BvbnNlU3RyZWFtOiExLHJlcXVlc3RUeXBlOntzZXJpYWxpemVCaW5hcnkoKXtyZXR1cm4gaS5CYXRjaEluZ2VzdENvbnRlbnRSZXF1ZXN0LmVuY29kZSh0aGlzKS5maW5pc2goKX19LHJlc3BvbnNlVHlwZTp7ZGVzZXJpYWxpemVCaW5hcnk6ZT0+KHsuLi5pLkJhdGNoSW5nZXN0Q29udGVudFJlc3BvbnNlLmRlY29kZShlKSx0b09iamVjdCgpe3JldHVybiB0aGlzfX0pfX0sdC5WeT17bWV0aG9kTmFtZTpcImdldENvbnRlbnRJbmdlc3Rpb25TdGF0dXNcIixzZXJ2aWNlOnQud0wscmVxdWVzdFN0cmVhbTohMSxyZXNwb25zZVN0cmVhbTohMSxyZXF1ZXN0VHlwZTp7c2VyaWFsaXplQmluYXJ5KCl7cmV0dXJuIG8uR2V0Q29udGVudEluZ2VzdGlvblN0YXR1c1JlcXVlc3QuZW5jb2RlKHRoaXMpLmZpbmlzaCgpfX0scmVzcG9uc2VUeXBlOntkZXNlcmlhbGl6ZUJpbmFyeTplPT4oey4uLm8uR2V0Q29udGVudEluZ2VzdGlvblN0YXR1c1Jlc3BvbnNlLmRlY29kZShlKSx0b09iamVjdCgpe3JldHVybiB0aGlzfX0pfX0sdC5XPXttZXRob2ROYW1lOlwiZ2V0Q29udGVudFJlZmVyZW5jZXNcIixzZXJ2aWNlOnQud0wscmVxdWVzdFN0cmVhbTohMSxyZXNwb25zZVN0cmVhbTohMSxyZXF1ZXN0VHlwZTp7c2VyaWFsaXplQmluYXJ5KCl7cmV0dXJuIGEuR2V0Q29udGVudFJlZmVyZW5jZXNSZXF1ZXN0LmVuY29kZSh0aGlzKS5maW5pc2goKX19LHJlc3BvbnNlVHlwZTp7ZGVzZXJpYWxpemVCaW5hcnk6ZT0+KHsuLi5hLkdldENvbnRlbnRSZWZlcmVuY2VzUmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fSx0LlMkPXttZXRob2ROYW1lOlwiY29weUNvbnRlbnRcIixzZXJ2aWNlOnQud0wscmVxdWVzdFN0cmVhbTohMSxyZXNwb25zZVN0cmVhbTohMSxyZXF1ZXN0VHlwZTp7c2VyaWFsaXplQmluYXJ5KCl7cmV0dXJuIHMuQ29weUNvbnRlbnRSZXF1ZXN0LmVuY29kZSh0aGlzKS5maW5pc2goKX19LHJlc3BvbnNlVHlwZTp7ZGVzZXJpYWxpemVCaW5hcnk6ZT0+KHsuLi5zLkNvcHlDb250ZW50UmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fSx0LiRkPXttZXRob2ROYW1lOlwidW5jbGFpbUNvbnRlbnRzXCIsc2VydmljZTp0LndMLHJlcXVlc3RTdHJlYW06ITEscmVzcG9uc2VTdHJlYW06ITEscmVxdWVzdFR5cGU6e3NlcmlhbGl6ZUJpbmFyeSgpe3JldHVybiBjLlVuY2xhaW1Db250ZW50c1JlcXVlc3QuZW5jb2RlKHRoaXMpLmZpbmlzaCgpfX0scmVzcG9uc2VUeXBlOntkZXNlcmlhbGl6ZUJpbmFyeTplPT4oey4uLmMuVW5jbGFpbUNvbnRlbnRzUmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fSx0LmhLPXttZXRob2ROYW1lOlwidGFrZWRvd25Db250ZW50XCIsc2VydmljZTp0LndMLHJlcXVlc3RTdHJlYW06ITEscmVzcG9uc2VTdHJlYW06ITEscmVxdWVzdFR5cGU6e3NlcmlhbGl6ZUJpbmFyeSgpe3JldHVybiBsLlRha2Vkb3duQ29udGVudFJlcXVlc3QuZW5jb2RlKHRoaXMpLmZpbmlzaCgpfX0scmVzcG9uc2VUeXBlOntkZXNlcmlhbGl6ZUJpbmFyeTplPT4oey4uLmwuVGFrZWRvd25Db250ZW50UmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fSx0LnZHPXttZXRob2ROYW1lOlwiZ2V0VXBsb2FkTG9jYXRpb25zXCIsc2VydmljZTp0LndMLHJlcXVlc3RTdHJlYW06ITEscmVzcG9uc2VTdHJlYW06ITEscmVxdWVzdFR5cGU6e3NlcmlhbGl6ZUJpbmFyeSgpe3JldHVybiB1LkdldFVwbG9hZExvY2F0aW9uc1JlcXVlc3QuZW5jb2RlKHRoaXMpLmZpbmlzaCgpfX0scmVzcG9uc2VUeXBlOntkZXNlcmlhbGl6ZUJpbmFyeTplPT4oey4uLnUuR2V0VXBsb2FkTG9jYXRpb25zUmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fSx0Lkh6PXttZXRob2ROYW1lOlwiZ2V0VXBsb2FkTG9jYXRpb25zQnlLZXlcIixzZXJ2aWNlOnQud0wscmVxdWVzdFN0cmVhbTohMSxyZXNwb25zZVN0cmVhbTohMSxyZXF1ZXN0VHlwZTp7c2VyaWFsaXplQmluYXJ5KCl7cmV0dXJuIGQuR2V0VXBsb2FkTG9jYXRpb25zQnlLZXlSZXF1ZXN0LmVuY29kZSh0aGlzKS5maW5pc2goKX19LHJlc3BvbnNlVHlwZTp7ZGVzZXJpYWxpemVCaW5hcnk6ZT0+KHsuLi5kLkdldFVwbG9hZExvY2F0aW9uc0J5S2V5UmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fSx0Lk55PXttZXRob2ROYW1lOlwicmVmcmVzaFVwbG9hZExvY2F0aW9uXCIsc2VydmljZTp0LndMLHJlcXVlc3RTdHJlYW06ITEscmVzcG9uc2VTdHJlYW06ITEscmVxdWVzdFR5cGU6e3NlcmlhbGl6ZUJpbmFyeSgpe3JldHVybiBmLlJlZnJlc2hVcGxvYWRMb2NhdGlvblJlcXVlc3QuZW5jb2RlKHRoaXMpLmZpbmlzaCgpfX0scmVzcG9uc2VUeXBlOntkZXNlcmlhbGl6ZUJpbmFyeTplPT4oey4uLmYuUmVmcmVzaFVwbG9hZExvY2F0aW9uUmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fSx0LnRWPXttZXRob2ROYW1lOlwiZ2V0TmV0d29ya01hcHBpbmdcIixzZXJ2aWNlOnQud0wscmVxdWVzdFN0cmVhbTohMSxyZXNwb25zZVN0cmVhbTohMSxyZXF1ZXN0VHlwZTp7c2VyaWFsaXplQmluYXJ5KCl7cmV0dXJuIHAuR2V0TmV0d29ya01hcHBpbmdSZXF1ZXN0LmVuY29kZSh0aGlzKS5maW5pc2goKX19LHJlc3BvbnNlVHlwZTp7ZGVzZXJpYWxpemVCaW5hcnk6ZT0+KHsuLi5wLkdldE5ldHdvcmtNYXBwaW5nUmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fSx0Lm9PPXttZXRob2ROYW1lOlwiZ2V0UHJlY2xhaW1lZFVwbG9hZExvY2F0aW9uc1wiLHNlcnZpY2U6dC53TCxyZXF1ZXN0U3RyZWFtOiExLHJlc3BvbnNlU3RyZWFtOiExLHJlcXVlc3RUeXBlOntzZXJpYWxpemVCaW5hcnkoKXtyZXR1cm4gbS5HZXRQcmVjbGFpbWVkVXBsb2FkTG9jYXRpb25zUmVxdWVzdC5lbmNvZGUodGhpcykuZmluaXNoKCl9fSxyZXNwb25zZVR5cGU6e2Rlc2VyaWFsaXplQmluYXJ5OmU9Pih7Li4ubS5HZXRQcmVjbGFpbWVkVXBsb2FkTG9jYXRpb25zUmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fSx0LnJIPXttZXRob2ROYW1lOlwidXBkYXRlQ2xhaW1cIixzZXJ2aWNlOnQud0wscmVxdWVzdFN0cmVhbTohMSxyZXNwb25zZVN0cmVhbTohMSxyZXF1ZXN0VHlwZTp7c2VyaWFsaXplQmluYXJ5KCl7cmV0dXJuIGguVXBkYXRlQ2xhaW1SZXF1ZXN0LmVuY29kZSh0aGlzKS5maW5pc2goKX19LHJlc3BvbnNlVHlwZTp7ZGVzZXJpYWxpemVCaW5hcnk6ZT0+KHsuLi5oLlVwZGF0ZUNsYWltUmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fSx0LnkzPXttZXRob2ROYW1lOlwidXBkYXRlQ29udGVudEV4cGlyeVwiLHNlcnZpY2U6dC53TCxyZXF1ZXN0U3RyZWFtOiExLHJlc3BvbnNlU3RyZWFtOiExLHJlcXVlc3RUeXBlOntzZXJpYWxpemVCaW5hcnkoKXtyZXR1cm4gdi5VcGRhdGVDb250ZW50RXhwaXJ5UmVxdWVzdC5lbmNvZGUodGhpcykuZmluaXNoKCl9fSxyZXNwb25zZVR5cGU6e2Rlc2VyaWFsaXplQmluYXJ5OmU9Pih7Li4udi5VcGRhdGVDb250ZW50RXhwaXJ5UmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fSx0LkRFPXttZXRob2ROYW1lOlwicmVzb2x2ZUNvbnRlbnRPYmplY3RzXCIsc2VydmljZTp0LndMLHJlcXVlc3RTdHJlYW06ITEscmVzcG9uc2VTdHJlYW06ITEscmVxdWVzdFR5cGU6e3NlcmlhbGl6ZUJpbmFyeSgpe3JldHVybiBnLlJlc29sdmVDb250ZW50T2JqZWN0c1JlcXVlc3QuZW5jb2RlKHRoaXMpLmZpbmlzaCgpfX0scmVzcG9uc2VUeXBlOntkZXNlcmlhbGl6ZUJpbmFyeTplPT4oey4uLmcuUmVzb2x2ZUNvbnRlbnRPYmplY3RzUmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fSx0Lll1PXttZXRob2ROYW1lOlwiY2xhaW1SZWxhdGVkQ29udGVudHNcIixzZXJ2aWNlOnQud0wscmVxdWVzdFN0cmVhbTohMSxyZXNwb25zZVN0cmVhbTohMSxyZXF1ZXN0VHlwZTp7c2VyaWFsaXplQmluYXJ5KCl7cmV0dXJuIHkuQ2xhaW1SZWxhdGVkQ29udGVudHNSZXF1ZXN0LmVuY29kZSh0aGlzKS5maW5pc2goKX19LHJlc3BvbnNlVHlwZTp7ZGVzZXJpYWxpemVCaW5hcnk6ZT0+KHsuLi55LkNsYWltUmVsYXRlZENvbnRlbnRzUmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fSx0LnNXPXttZXRob2ROYW1lOlwiY29tYmluZUNvbnRlbnRzXCIsc2VydmljZTp0LndMLHJlcXVlc3RTdHJlYW06ITEscmVzcG9uc2VTdHJlYW06ITEscmVxdWVzdFR5cGU6e3NlcmlhbGl6ZUJpbmFyeSgpe3JldHVybiBFLkNvbWJpbmVDb250ZW50c1JlcXVlc3QuZW5jb2RlKHRoaXMpLmZpbmlzaCgpfX0scmVzcG9uc2VUeXBlOntkZXNlcmlhbGl6ZUJpbmFyeTplPT4oey4uLkUuQ29tYmluZUNvbnRlbnRzUmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fSx0LlhyPXttZXRob2ROYW1lOlwiaW5nZXN0QXNzZXRHcm91cFwiLHNlcnZpY2U6dC53TCxyZXF1ZXN0U3RyZWFtOiExLHJlc3BvbnNlU3RyZWFtOiExLHJlcXVlc3RUeXBlOntzZXJpYWxpemVCaW5hcnkoKXtyZXR1cm4gXy5Jbmdlc3RBc3NldEdyb3VwUmVxdWVzdC5lbmNvZGUodGhpcykuZmluaXNoKCl9fSxyZXNwb25zZVR5cGU6e2Rlc2VyaWFsaXplQmluYXJ5OmU9Pih7Li4uXy5Jbmdlc3RBc3NldEdyb3VwUmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fSx0LmJFPXttZXRob2ROYW1lOlwidW5jbGFpbUFzc2V0R3JvdXBcIixzZXJ2aWNlOnQud0wscmVxdWVzdFN0cmVhbTohMSxyZXNwb25zZVN0cmVhbTohMSxyZXF1ZXN0VHlwZTp7c2VyaWFsaXplQmluYXJ5KCl7cmV0dXJuIEkuVW5jbGFpbUFzc2V0R3JvdXBSZXF1ZXN0LmVuY29kZSh0aGlzKS5maW5pc2goKX19LHJlc3BvbnNlVHlwZTp7ZGVzZXJpYWxpemVCaW5hcnk6ZT0+KHsuLi5JLlVuY2xhaW1Bc3NldEdyb3VwUmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fSx0LnFWPXttZXRob2ROYW1lOlwiZ2V0QXNzZXRHcm91cEluZ2VzdGlvblN0YXR1c1wiLHNlcnZpY2U6dC53TCxyZXF1ZXN0U3RyZWFtOiExLHJlc3BvbnNlU3RyZWFtOiExLHJlcXVlc3RUeXBlOntzZXJpYWxpemVCaW5hcnkoKXtyZXR1cm4gUy5HZXRBc3NldEdyb3VwSW5nZXN0aW9uU3RhdHVzUmVxdWVzdC5lbmNvZGUodGhpcykuZmluaXNoKCl9fSxyZXNwb25zZVR5cGU6e2Rlc2VyaWFsaXplQmluYXJ5OmU9Pih7Li4uUy5HZXRBc3NldEdyb3VwSW5nZXN0aW9uU3RhdHVzUmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fSx0LlA0PXttZXRob2ROYW1lOlwiZGVidWdDb250ZW50XCIsc2VydmljZTp0LndMLHJlcXVlc3RTdHJlYW06ITEscmVzcG9uc2VTdHJlYW06ITEscmVxdWVzdFR5cGU6e3NlcmlhbGl6ZUJpbmFyeSgpe3JldHVybiBiLkRlYnVnQ29udGVudFJlcXVlc3QuZW5jb2RlKHRoaXMpLmZpbmlzaCgpfX0scmVzcG9uc2VUeXBlOntkZXNlcmlhbGl6ZUJpbmFyeTplPT4oey4uLmIuRGVidWdDb250ZW50UmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fTtjbGFzcyBUIGV4dGVuZHMgRXJyb3J7Y29kZTttZXRhZGF0YTtjb25zdHJ1Y3RvcihlLHQsbil7c3VwZXIoZSksdGhpcy5jb2RlPXQsdGhpcy5tZXRhZGF0YT1ufX19LDUyODI1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk1lZGlhT3B0aW1pemF0aW9uUHJvcGVydGllcz12b2lkIDA7Y29uc3QgaT1uKDIzOTcpLG89bigzODM5NyksYT1yKG4oNjIxMDApKTt0Lk1lZGlhT3B0aW1pemF0aW9uUHJvcGVydGllcz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpOzAhPT1lLmZlYXR1cmVDb250ZW50VHlwZSYmdC51aW50MzIoOCkuaW50MzIoZS5mZWF0dXJlQ29udGVudFR5cGUpLCEwPT09ZS5leGNsdWRlU291cmNlJiZ0LnVpbnQzMigxNikuYm9vbChlLmV4Y2x1ZGVTb3VyY2UpLHZvaWQgMCE9PWUuY2xhaW1Qb2xpY3lPdmVycmlkZSYmaS5DbGFpbVBvbGljeS5lbmNvZGUoZS5jbGFpbVBvbGljeU92ZXJyaWRlLHQudWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpO2Zvcihjb25zdCBuIG9mIGUudmFyaWFudFByb3BlcnRpZXMpby5WYXJpYW50UHJvcGVydGllcy5lbmNvZGUobix0LnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4hMD09PWUuZm9yY2VUcmFuc2NvZGUmJnQudWludDMyKDQwKS5ib29sKGUuZm9yY2VUcmFuc2NvZGUpLFwiXCIhPT1lLmRlYnVnSW5mbyYmdC51aW50MzIoNTApLnN0cmluZyhlLmRlYnVnSW5mbyksITA9PT1lLmFzeW5jTm90aWZpY2F0aW9uSW5jbHVkZU1lZGlhT3B0aW1pemF0aW9uRGV0YWlscyYmdC51aW50MzIoNTYpLmJvb2woZS5hc3luY05vdGlmaWNhdGlvbkluY2x1ZGVNZWRpYU9wdGltaXphdGlvbkRldGFpbHMpLCEwPT09ZS5hbHdheXNJbmNsdWRlU291cmNlJiZ0LnVpbnQzMig2NCkuYm9vbChlLmFsd2F5c0luY2x1ZGVTb3VyY2UpLCEwPT09ZS5hc3luY0V4cGVkaXRlTm90aWZpY2F0aW9ucyYmdC51aW50MzIoNzIpLmJvb2woZS5hc3luY0V4cGVkaXRlTm90aWZpY2F0aW9ucyksITA9PT1lLmJlc3RFZmZvcnQmJnQudWludDMyKDgwKS5ib29sKGUuYmVzdEVmZm9ydCksITA9PT1lLnVuZW5jcnlwdGVkT3V0cHV0JiZ0LnVpbnQzMig4OCkuYm9vbChlLnVuZW5jcnlwdGVkT3V0cHV0KSxcIlwiIT09ZS5vdXRwdXRLZXkmJnQudWludDMyKDk4KS5zdHJpbmcoZS5vdXRwdXRLZXkpLFwiXCIhPT1lLm91dHB1dEl2JiZ0LnVpbnQzMigxMDYpLnN0cmluZyhlLm91dHB1dEl2KSwhMD09PWUucmV0dXJuQ29udGVudFVybERlZmF1bHRWYXJpYW50TWV0YWRhdGEmJnQudWludDMyKDExMikuYm9vbChlLnJldHVybkNvbnRlbnRVcmxEZWZhdWx0VmFyaWFudE1ldGFkYXRhKSx2b2lkIDAhPT1lLnZvZFN0cmVhbWluZ1Byb3BlcnRpZXMmJm8uVm9kU3RyZWFtaW5nUHJvcGVydGllcy5lbmNvZGUoZS52b2RTdHJlYW1pbmdQcm9wZXJ0aWVzLHQudWludDMyKDE2MikuZm9yaygpKS5sZGVsaW0oKSwhMD09PWUubmVlZEZvbGxvd1VwQ2hlY2smJnQudWludDMyKDc5MikuYm9vbChlLm5lZWRGb2xsb3dVcENoZWNrKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IHM9e2ZlYXR1cmVDb250ZW50VHlwZTowLGV4Y2x1ZGVTb3VyY2U6ITEsY2xhaW1Qb2xpY3lPdmVycmlkZTp2b2lkIDAsdmFyaWFudFByb3BlcnRpZXM6W10sZm9yY2VUcmFuc2NvZGU6ITEsZGVidWdJbmZvOlwiXCIsYXN5bmNOb3RpZmljYXRpb25JbmNsdWRlTWVkaWFPcHRpbWl6YXRpb25EZXRhaWxzOiExLGFsd2F5c0luY2x1ZGVTb3VyY2U6ITEsYXN5bmNFeHBlZGl0ZU5vdGlmaWNhdGlvbnM6ITEsYmVzdEVmZm9ydDohMSx1bmVuY3J5cHRlZE91dHB1dDohMSxvdXRwdXRLZXk6XCJcIixvdXRwdXRJdjpcIlwiLHJldHVybkNvbnRlbnRVcmxEZWZhdWx0VmFyaWFudE1ldGFkYXRhOiExLHZvZFN0cmVhbWluZ1Byb3BlcnRpZXM6dm9pZCAwLG5lZWRGb2xsb3dVcENoZWNrOiExfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6cy5mZWF0dXJlQ29udGVudFR5cGU9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMjpzLmV4Y2x1ZGVTb3VyY2U9bi5ib29sKCk7YnJlYWs7Y2FzZSAzOnMuY2xhaW1Qb2xpY3lPdmVycmlkZT1pLkNsYWltUG9saWN5LmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgNDpzLnZhcmlhbnRQcm9wZXJ0aWVzLnB1c2goby5WYXJpYW50UHJvcGVydGllcy5kZWNvZGUobixuLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSA1OnMuZm9yY2VUcmFuc2NvZGU9bi5ib29sKCk7YnJlYWs7Y2FzZSA2OnMuZGVidWdJbmZvPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA3OnMuYXN5bmNOb3RpZmljYXRpb25JbmNsdWRlTWVkaWFPcHRpbWl6YXRpb25EZXRhaWxzPW4uYm9vbCgpO2JyZWFrO2Nhc2UgODpzLmFsd2F5c0luY2x1ZGVTb3VyY2U9bi5ib29sKCk7YnJlYWs7Y2FzZSA5OnMuYXN5bmNFeHBlZGl0ZU5vdGlmaWNhdGlvbnM9bi5ib29sKCk7YnJlYWs7Y2FzZSAxMDpzLmJlc3RFZmZvcnQ9bi5ib29sKCk7YnJlYWs7Y2FzZSAxMTpzLnVuZW5jcnlwdGVkT3V0cHV0PW4uYm9vbCgpO2JyZWFrO2Nhc2UgMTI6cy5vdXRwdXRLZXk9bi5zdHJpbmcoKTticmVhaztjYXNlIDEzOnMub3V0cHV0SXY9bi5zdHJpbmcoKTticmVhaztjYXNlIDE0OnMucmV0dXJuQ29udGVudFVybERlZmF1bHRWYXJpYW50TWV0YWRhdGE9bi5ib29sKCk7YnJlYWs7Y2FzZSAyMDpzLnZvZFN0cmVhbWluZ1Byb3BlcnRpZXM9by5Wb2RTdHJlYW1pbmdQcm9wZXJ0aWVzLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgOTk6cy5uZWVkRm9sbG93VXBDaGVjaz1uLmJvb2woKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIHN9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2ZlYXR1cmVDb250ZW50VHlwZTowLGV4Y2x1ZGVTb3VyY2U6ITEsY2xhaW1Qb2xpY3lPdmVycmlkZTp2b2lkIDAsdmFyaWFudFByb3BlcnRpZXM6W10sZm9yY2VUcmFuc2NvZGU6ITEsZGVidWdJbmZvOlwiXCIsYXN5bmNOb3RpZmljYXRpb25JbmNsdWRlTWVkaWFPcHRpbWl6YXRpb25EZXRhaWxzOiExLGFsd2F5c0luY2x1ZGVTb3VyY2U6ITEsYXN5bmNFeHBlZGl0ZU5vdGlmaWNhdGlvbnM6ITEsYmVzdEVmZm9ydDohMSx1bmVuY3J5cHRlZE91dHB1dDohMSxvdXRwdXRLZXk6XCJcIixvdXRwdXRJdjpcIlwiLHJldHVybkNvbnRlbnRVcmxEZWZhdWx0VmFyaWFudE1ldGFkYXRhOiExLHZvZFN0cmVhbWluZ1Byb3BlcnRpZXM6dm9pZCAwLG5lZWRGb2xsb3dVcENoZWNrOiExfTtyZXR1cm4gdC5mZWF0dXJlQ29udGVudFR5cGU9ZS5mZWF0dXJlQ29udGVudFR5cGU/PzAsdC5leGNsdWRlU291cmNlPWUuZXhjbHVkZVNvdXJjZT8/ITEsdC5jbGFpbVBvbGljeU92ZXJyaWRlPXZvaWQgMCE9PWUuY2xhaW1Qb2xpY3lPdmVycmlkZSYmbnVsbCE9PWUuY2xhaW1Qb2xpY3lPdmVycmlkZT9pLkNsYWltUG9saWN5LmZyb21QYXJ0aWFsKGUuY2xhaW1Qb2xpY3lPdmVycmlkZSk6dm9pZCAwLHQudmFyaWFudFByb3BlcnRpZXM9ZS52YXJpYW50UHJvcGVydGllcz8ubWFwKChlPT5vLlZhcmlhbnRQcm9wZXJ0aWVzLmZyb21QYXJ0aWFsKGUpKSl8fFtdLHQuZm9yY2VUcmFuc2NvZGU9ZS5mb3JjZVRyYW5zY29kZT8/ITEsdC5kZWJ1Z0luZm89ZS5kZWJ1Z0luZm8/P1wiXCIsdC5hc3luY05vdGlmaWNhdGlvbkluY2x1ZGVNZWRpYU9wdGltaXphdGlvbkRldGFpbHM9ZS5hc3luY05vdGlmaWNhdGlvbkluY2x1ZGVNZWRpYU9wdGltaXphdGlvbkRldGFpbHM/PyExLHQuYWx3YXlzSW5jbHVkZVNvdXJjZT1lLmFsd2F5c0luY2x1ZGVTb3VyY2U/PyExLHQuYXN5bmNFeHBlZGl0ZU5vdGlmaWNhdGlvbnM9ZS5hc3luY0V4cGVkaXRlTm90aWZpY2F0aW9ucz8/ITEsdC5iZXN0RWZmb3J0PWUuYmVzdEVmZm9ydD8/ITEsdC51bmVuY3J5cHRlZE91dHB1dD1lLnVuZW5jcnlwdGVkT3V0cHV0Pz8hMSx0Lm91dHB1dEtleT1lLm91dHB1dEtleT8/XCJcIix0Lm91dHB1dEl2PWUub3V0cHV0SXY/P1wiXCIsdC5yZXR1cm5Db250ZW50VXJsRGVmYXVsdFZhcmlhbnRNZXRhZGF0YT1lLnJldHVybkNvbnRlbnRVcmxEZWZhdWx0VmFyaWFudE1ldGFkYXRhPz8hMSx0LnZvZFN0cmVhbWluZ1Byb3BlcnRpZXM9dm9pZCAwIT09ZS52b2RTdHJlYW1pbmdQcm9wZXJ0aWVzJiZudWxsIT09ZS52b2RTdHJlYW1pbmdQcm9wZXJ0aWVzP28uVm9kU3RyZWFtaW5nUHJvcGVydGllcy5mcm9tUGFydGlhbChlLnZvZFN0cmVhbWluZ1Byb3BlcnRpZXMpOnZvaWQgMCx0Lm5lZWRGb2xsb3dVcENoZWNrPWUubmVlZEZvbGxvd1VwQ2hlY2s/PyExLHR9fX0sMzA5Njk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTWVkaWFQcm9wZXJ0aWVzPXZvaWQgMDtjb25zdCBpPW4oNzk1MzYpLG89cihuKDYyMTAwKSk7dC5NZWRpYVByb3BlcnRpZXM9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5rZXkmJnQudWludDMyKDEwKS5zdHJpbmcoZS5rZXkpLFwiXCIhPT1lLml2JiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuaXYpLHZvaWQgMCE9PWUuY2FwdHVyZUNvbnRleHQmJmkuTWVkaWFDYXB0dXJlQ29udGV4dC5lbmNvZGUoZS5jYXB0dXJlQ29udGV4dCx0LnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSxcIlwiIT09ZS5wdWJsaXNoZXJJZCYmdC51aW50MzIoMzQpLnN0cmluZyhlLnB1Ymxpc2hlcklkKSxcIlwiIT09ZS5wdWJsaXNoZXJDb250ZW50SWQmJnQudWludDMyKDQyKS5zdHJpbmcoZS5wdWJsaXNoZXJDb250ZW50SWQpLCEwPT09ZS5pc1B1Ymxpc2hlckVtcGxveWVlJiZ0LnVpbnQzMig0OCkuYm9vbChlLmlzUHVibGlzaGVyRW1wbG95ZWUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgYT17a2V5OlwiXCIsaXY6XCJcIixjYXB0dXJlQ29udGV4dDp2b2lkIDAscHVibGlzaGVySWQ6XCJcIixwdWJsaXNoZXJDb250ZW50SWQ6XCJcIixpc1B1Ymxpc2hlckVtcGxveWVlOiExfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS5rZXk9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6YS5pdj1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMzphLmNhcHR1cmVDb250ZXh0PWkuTWVkaWFDYXB0dXJlQ29udGV4dC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDQ6YS5wdWJsaXNoZXJJZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNTphLnB1Ymxpc2hlckNvbnRlbnRJZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNjphLmlzUHVibGlzaGVyRW1wbG95ZWU9bi5ib29sKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtrZXk6XCJcIixpdjpcIlwiLGNhcHR1cmVDb250ZXh0OnZvaWQgMCxwdWJsaXNoZXJJZDpcIlwiLHB1Ymxpc2hlckNvbnRlbnRJZDpcIlwiLGlzUHVibGlzaGVyRW1wbG95ZWU6ITF9O3JldHVybiB0LmtleT1lLmtleT8/XCJcIix0Lml2PWUuaXY/P1wiXCIsdC5jYXB0dXJlQ29udGV4dD12b2lkIDAhPT1lLmNhcHR1cmVDb250ZXh0JiZudWxsIT09ZS5jYXB0dXJlQ29udGV4dD9pLk1lZGlhQ2FwdHVyZUNvbnRleHQuZnJvbVBhcnRpYWwoZS5jYXB0dXJlQ29udGV4dCk6dm9pZCAwLHQucHVibGlzaGVySWQ9ZS5wdWJsaXNoZXJJZD8/XCJcIix0LnB1Ymxpc2hlckNvbnRlbnRJZD1lLnB1Ymxpc2hlckNvbnRlbnRJZD8/XCJcIix0LmlzUHVibGlzaGVyRW1wbG95ZWU9ZS5pc1B1Ymxpc2hlckVtcGxveWVlPz8hMSx0fX19LDE3Mzc6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTmV3Q29udGVudFJlcXVlc3Q9dm9pZCAwO2NvbnN0IGk9bigzMDk2OSksbz1uKDMwMzIpLGE9big2MDY4Mykscz1yKG4oNjIxMDApKTt0Lk5ld0NvbnRlbnRSZXF1ZXN0PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7dm9pZCAwIT09ZS5tZWRpYVByb3BlcnRpZXMmJmkuTWVkaWFQcm9wZXJ0aWVzLmVuY29kZShlLm1lZGlhUHJvcGVydGllcyx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtmb3IoY29uc3QgbiBvZiBlLmNsYWltcylvLkNsYWltLmVuY29kZShuLHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiAwIT09ZS5jb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uJiZ0LnVpbnQzMigyNCkuaW50MzIoZS5jb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uKSx2b2lkIDAhPT1lLmFzeW5jTm90aWZpY2F0aW9uJiZhLkFzeW5jTm90aWZpY2F0aW9uLmVuY29kZShlLmFzeW5jTm90aWZpY2F0aW9uLHQudWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLmFsbG93ZWRTaXplTGltaXRJbkJ5dGVzJiZ0LnVpbnQzMig0MCkuaW50MzIoZS5hbGxvd2VkU2l6ZUxpbWl0SW5CeXRlcyksITA9PT1lLmFzeW5jQ2xhaW0mJnQudWludDMyKDc5MikuYm9vbChlLmFzeW5jQ2xhaW0pLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgYz17bWVkaWFQcm9wZXJ0aWVzOnZvaWQgMCxjbGFpbXM6W10sY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbjowLGFzeW5jTm90aWZpY2F0aW9uOnZvaWQgMCxhbGxvd2VkU2l6ZUxpbWl0SW5CeXRlczowLGFzeW5jQ2xhaW06ITF9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpjLm1lZGlhUHJvcGVydGllcz1pLk1lZGlhUHJvcGVydGllcy5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDI6Yy5jbGFpbXMucHVzaChvLkNsYWltLmRlY29kZShuLG4udWludDMyKCkpKTticmVhaztjYXNlIDM6Yy5jb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uPW4uaW50MzIoKTticmVhaztjYXNlIDQ6Yy5hc3luY05vdGlmaWNhdGlvbj1hLkFzeW5jTm90aWZpY2F0aW9uLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgNTpjLmFsbG93ZWRTaXplTGltaXRJbkJ5dGVzPW4uaW50MzIoKTticmVhaztjYXNlIDk5OmMuYXN5bmNDbGFpbT1uLmJvb2woKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGN9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e21lZGlhUHJvcGVydGllczp2b2lkIDAsY2xhaW1zOltdLGNvbnRlbnRSZWZlcmVuY2VSZXN1bHRPcHRpb246MCxhc3luY05vdGlmaWNhdGlvbjp2b2lkIDAsYWxsb3dlZFNpemVMaW1pdEluQnl0ZXM6MCxhc3luY0NsYWltOiExfTtyZXR1cm4gdC5tZWRpYVByb3BlcnRpZXM9dm9pZCAwIT09ZS5tZWRpYVByb3BlcnRpZXMmJm51bGwhPT1lLm1lZGlhUHJvcGVydGllcz9pLk1lZGlhUHJvcGVydGllcy5mcm9tUGFydGlhbChlLm1lZGlhUHJvcGVydGllcyk6dm9pZCAwLHQuY2xhaW1zPWUuY2xhaW1zPy5tYXAoKGU9Pm8uQ2xhaW0uZnJvbVBhcnRpYWwoZSkpKXx8W10sdC5jb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uPWUuY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbj8/MCx0LmFzeW5jTm90aWZpY2F0aW9uPXZvaWQgMCE9PWUuYXN5bmNOb3RpZmljYXRpb24mJm51bGwhPT1lLmFzeW5jTm90aWZpY2F0aW9uP2EuQXN5bmNOb3RpZmljYXRpb24uZnJvbVBhcnRpYWwoZS5hc3luY05vdGlmaWNhdGlvbik6dm9pZCAwLHQuYWxsb3dlZFNpemVMaW1pdEluQnl0ZXM9ZS5hbGxvd2VkU2l6ZUxpbWl0SW5CeXRlcz8/MCx0LmFzeW5jQ2xhaW09ZS5hc3luY0NsYWltPz8hMSx0fX19LDY3MDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5SZWZyZXNoVXBsb2FkTG9jYXRpb25SZXNwb25zZT10LlJlZnJlc2hVcGxvYWRMb2NhdGlvblJlcXVlc3RfVXJsSGVhZGVyc0VudHJ5PXQuUmVmcmVzaFVwbG9hZExvY2F0aW9uUmVxdWVzdD12b2lkIDA7Y29uc3QgaT1uKDM2ODUxKSxvPW4oOTk3MjYpLGE9big2NTc2NCkscz1yKG4oNjIxMDApKTt0LlJlZnJlc2hVcGxvYWRMb2NhdGlvblJlcXVlc3Q9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5jb250ZW50UmVmZXJlbmNlJiZpLkNvbnRlbnRSZWZlcmVuY2UuZW5jb2RlKGUuY29udGVudFJlZmVyZW5jZSxuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnN0b3JhZ2VQb2xpY3kmJm8uU3RvcmFnZVBvbGljeS5lbmNvZGUoZS5zdG9yYWdlUG9saWN5LG4udWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLE9iamVjdC5lbnRyaWVzKGUudXJsSGVhZGVycykuZm9yRWFjaCgoZT0+e2xldFtyLGldPWU7dC5SZWZyZXNoVXBsb2FkTG9jYXRpb25SZXF1ZXN0X1VybEhlYWRlcnNFbnRyeS5lbmNvZGUoe2tleTpyLHZhbHVlOml9LG4udWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpfSkpLDAhPT1lLmNvbnRlbnRSZWZlcmVuY2VSZXN1bHRPcHRpb24mJm4udWludDMyKDMyKS5pbnQzMihlLmNvbnRlbnRSZWZlcmVuY2VSZXN1bHRPcHRpb24pLCEwPT09ZS5za2lwQ2RuRm9yVXBsb2FkVXJsJiZuLnVpbnQzMig0MCkuYm9vbChlLnNraXBDZG5Gb3JVcGxvYWRVcmwpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgYT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3QgYz17Y29udGVudFJlZmVyZW5jZTp2b2lkIDAsc3RvcmFnZVBvbGljeTp2b2lkIDAsdXJsSGVhZGVyczp7fSxjb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uOjAsc2tpcENkbkZvclVwbG9hZFVybDohMX07Zm9yKDtyLnBvczxhOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmMuY29udGVudFJlZmVyZW5jZT1pLkNvbnRlbnRSZWZlcmVuY2UuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOmMuc3RvcmFnZVBvbGljeT1vLlN0b3JhZ2VQb2xpY3kuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAzOmNvbnN0IG49dC5SZWZyZXNoVXBsb2FkTG9jYXRpb25SZXF1ZXN0X1VybEhlYWRlcnNFbnRyeS5kZWNvZGUocixyLnVpbnQzMigpKTt2b2lkIDAhPT1uLnZhbHVlJiYoYy51cmxIZWFkZXJzW24ua2V5XT1uLnZhbHVlKTticmVhaztjYXNlIDQ6Yy5jb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uPXIuaW50MzIoKTticmVhaztjYXNlIDU6Yy5za2lwQ2RuRm9yVXBsb2FkVXJsPXIuYm9vbCgpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gY30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17Y29udGVudFJlZmVyZW5jZTp2b2lkIDAsc3RvcmFnZVBvbGljeTp2b2lkIDAsdXJsSGVhZGVyczp7fSxjb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uOjAsc2tpcENkbkZvclVwbG9hZFVybDohMX07cmV0dXJuIHQuY29udGVudFJlZmVyZW5jZT12b2lkIDAhPT1lLmNvbnRlbnRSZWZlcmVuY2UmJm51bGwhPT1lLmNvbnRlbnRSZWZlcmVuY2U/aS5Db250ZW50UmVmZXJlbmNlLmZyb21QYXJ0aWFsKGUuY29udGVudFJlZmVyZW5jZSk6dm9pZCAwLHQuc3RvcmFnZVBvbGljeT12b2lkIDAhPT1lLnN0b3JhZ2VQb2xpY3kmJm51bGwhPT1lLnN0b3JhZ2VQb2xpY3k/by5TdG9yYWdlUG9saWN5LmZyb21QYXJ0aWFsKGUuc3RvcmFnZVBvbGljeSk6dm9pZCAwLHQudXJsSGVhZGVycz1PYmplY3QuZW50cmllcyhlLnVybEhlYWRlcnM/P3t9KS5yZWR1Y2UoKChlLHQpPT57bGV0W24scl09dDtyZXR1cm4gdm9pZCAwIT09ciYmKGVbbl09U3RyaW5nKHIpKSxlfSkse30pLHQuY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbj1lLmNvbnRlbnRSZWZlcmVuY2VSZXN1bHRPcHRpb24/PzAsdC5za2lwQ2RuRm9yVXBsb2FkVXJsPWUuc2tpcENkbkZvclVwbG9hZFVybD8/ITEsdH19LHQuUmVmcmVzaFVwbG9hZExvY2F0aW9uUmVxdWVzdF9VcmxIZWFkZXJzRW50cnk9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5rZXkmJnQudWludDMyKDEwKS5zdHJpbmcoZS5rZXkpLFwiXCIhPT1lLnZhbHVlJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUudmFsdWUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17a2V5OlwiXCIsdmFsdWU6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkua2V5PW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkudmFsdWU9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2tleTpcIlwiLHZhbHVlOlwiXCJ9O3JldHVybiB0LmtleT1lLmtleT8/XCJcIix0LnZhbHVlPWUudmFsdWU/P1wiXCIsdH19LHQuUmVmcmVzaFVwbG9hZExvY2F0aW9uUmVzcG9uc2U9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS51cGxvYWRMb2NhdGlvbiYmYS5VcGxvYWRMb2NhdGlvbi5lbmNvZGUoZS51cGxvYWRMb2NhdGlvbix0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3VwbG9hZExvY2F0aW9uOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2kudXBsb2FkTG9jYXRpb249YS5VcGxvYWRMb2NhdGlvbi5kZWNvZGUobixuLnVpbnQzMigpKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3VwbG9hZExvY2F0aW9uOnZvaWQgMH07cmV0dXJuIHQudXBsb2FkTG9jYXRpb249dm9pZCAwIT09ZS51cGxvYWRMb2NhdGlvbiYmbnVsbCE9PWUudXBsb2FkTG9jYXRpb24/YS5VcGxvYWRMb2NhdGlvbi5mcm9tUGFydGlhbChlLnVwbG9hZExvY2F0aW9uKTp2b2lkIDAsdH19fSw0NTc2MzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5SZXNvbHZlQ29udGVudE9iamVjdEVycm9yPXQuUmVzb2x2ZWRVcmw9dC5SZXNvbHZlZENvbnRlbnQ9dC5SZXNvbHZlZENvbnRlbnRPYmplY3Q9dC5SZXNvbHZlQ29udGVudE9iamVjdFJlc3BvbnNlPXQuUmVzb2x2ZUNvbnRlbnRPYmplY3RzUmVzcG9uc2U9dC5DaXJjdW1zdGFuY2U9dC5SZXNvbHZlQ29udGVudE9iamVjdFJlcXVlc3Q9dC5SZXNvbHZlQ29udGVudE9iamVjdHNSZXF1ZXN0PXZvaWQgMDtjb25zdCBpPXIobig0MTU4MykpLG89big0NDE1KSxhPXIobig2MjEwMCkpO2Z1bmN0aW9uIHMoKXtyZXR1cm57cmVzb2x2ZWRDb250ZW50czpbXSxyZWZyZXNoZWRDb250ZW50T2JqZWN0OnZvaWQgMCxyZWZyZXNoZWRWMkNvbnRlbnRVcmw6XCJcIixyZWZyZXNoZWRWMkNvbnRlbnRPYmplY3Q6bmV3IFVpbnQ4QXJyYXl9fWZ1bmN0aW9uIGMoZSl7cmV0dXJuIGUudG9TdHJpbmcoKX10LlJlc29sdmVDb250ZW50T2JqZWN0c1JlcXVlc3Q9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgciBvZiBlLnJlcXVlc3RzKXQuUmVzb2x2ZUNvbnRlbnRPYmplY3RSZXF1ZXN0LmVuY29kZShyLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiB2b2lkIDAhPT1lLmNpcmN1bXN0YW5jZSYmdC5DaXJjdW1zdGFuY2UuZW5jb2RlKGUuY2lyY3Vtc3RhbmNlLG4udWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLCEwPT09ZS5uZXZlclJlZnJlc2gmJm4udWludDMyKDI0KS5ib29sKGUubmV2ZXJSZWZyZXNoKSwhMD09PWUuYWx3YXlzSW5jbHVkZVNvdXJjZSYmbi51aW50MzIoMzIpLmJvb2woZS5hbHdheXNJbmNsdWRlU291cmNlKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89e3JlcXVlc3RzOltdLGNpcmN1bXN0YW5jZTp2b2lkIDAsbmV2ZXJSZWZyZXNoOiExLGFsd2F5c0luY2x1ZGVTb3VyY2U6ITF9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLnJlcXVlc3RzLnB1c2godC5SZXNvbHZlQ29udGVudE9iamVjdFJlcXVlc3QuZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2Nhc2UgMjpvLmNpcmN1bXN0YW5jZT10LkNpcmN1bXN0YW5jZS5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDM6by5uZXZlclJlZnJlc2g9ci5ib29sKCk7YnJlYWs7Y2FzZSA0Om8uYWx3YXlzSW5jbHVkZVNvdXJjZT1yLmJvb2woKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e3JlcXVlc3RzOltdLGNpcmN1bXN0YW5jZTp2b2lkIDAsbmV2ZXJSZWZyZXNoOiExLGFsd2F5c0luY2x1ZGVTb3VyY2U6ITF9O3JldHVybiBuLnJlcXVlc3RzPWUucmVxdWVzdHM/Lm1hcCgoZT0+dC5SZXNvbHZlQ29udGVudE9iamVjdFJlcXVlc3QuZnJvbVBhcnRpYWwoZSkpKXx8W10sbi5jaXJjdW1zdGFuY2U9dm9pZCAwIT09ZS5jaXJjdW1zdGFuY2UmJm51bGwhPT1lLmNpcmN1bXN0YW5jZT90LkNpcmN1bXN0YW5jZS5mcm9tUGFydGlhbChlLmNpcmN1bXN0YW5jZSk6dm9pZCAwLG4ubmV2ZXJSZWZyZXNoPWUubmV2ZXJSZWZyZXNoPz8hMSxuLmFsd2F5c0luY2x1ZGVTb3VyY2U9ZS5hbHdheXNJbmNsdWRlU291cmNlPz8hMSxufX0sdC5SZXNvbHZlQ29udGVudE9iamVjdFJlcXVlc3Q9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cImNvbnRlbnRPYmplY3RcIj09PWUucmVmZXJlbmNlPy4kY2FzZSYmby5Db250ZW50T2JqZWN0LmVuY29kZShlLnJlZmVyZW5jZS5jb250ZW50T2JqZWN0LHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLFwidjJDb250ZW50VXJsXCI9PT1lLnJlZmVyZW5jZT8uJGNhc2UmJnQudWludDMyKDE4KS5zdHJpbmcoZS5yZWZlcmVuY2UudjJDb250ZW50VXJsKSxcInYyQ29udGVudE9iamVjdFwiPT09ZS5yZWZlcmVuY2U/LiRjYXNlJiZ0LnVpbnQzMigyNikuYnl0ZXMoZS5yZWZlcmVuY2UudjJDb250ZW50T2JqZWN0KSxcIlwiIT09ZS5jbGFpbUV4dGVybmFsSWQmJnQudWludDMyKDM0KS5zdHJpbmcoZS5jbGFpbUV4dGVybmFsSWQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17cmVmZXJlbmNlOnZvaWQgMCxjbGFpbUV4dGVybmFsSWQ6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkucmVmZXJlbmNlPXskY2FzZTpcImNvbnRlbnRPYmplY3RcIixjb250ZW50T2JqZWN0Om8uQ29udGVudE9iamVjdC5kZWNvZGUobixuLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAyOmkucmVmZXJlbmNlPXskY2FzZTpcInYyQ29udGVudFVybFwiLHYyQ29udGVudFVybDpuLnN0cmluZygpfTticmVhaztjYXNlIDM6aS5yZWZlcmVuY2U9eyRjYXNlOlwidjJDb250ZW50T2JqZWN0XCIsdjJDb250ZW50T2JqZWN0Om4uYnl0ZXMoKX07YnJlYWs7Y2FzZSA0OmkuY2xhaW1FeHRlcm5hbElkPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtyZWZlcmVuY2U6dm9pZCAwLGNsYWltRXh0ZXJuYWxJZDpcIlwifTtyZXR1cm5cImNvbnRlbnRPYmplY3RcIj09PWUucmVmZXJlbmNlPy4kY2FzZSYmdm9pZCAwIT09ZS5yZWZlcmVuY2U/LmNvbnRlbnRPYmplY3QmJm51bGwhPT1lLnJlZmVyZW5jZT8uY29udGVudE9iamVjdCYmKHQucmVmZXJlbmNlPXskY2FzZTpcImNvbnRlbnRPYmplY3RcIixjb250ZW50T2JqZWN0Om8uQ29udGVudE9iamVjdC5mcm9tUGFydGlhbChlLnJlZmVyZW5jZS5jb250ZW50T2JqZWN0KX0pLFwidjJDb250ZW50VXJsXCI9PT1lLnJlZmVyZW5jZT8uJGNhc2UmJnZvaWQgMCE9PWUucmVmZXJlbmNlPy52MkNvbnRlbnRVcmwmJm51bGwhPT1lLnJlZmVyZW5jZT8udjJDb250ZW50VXJsJiYodC5yZWZlcmVuY2U9eyRjYXNlOlwidjJDb250ZW50VXJsXCIsdjJDb250ZW50VXJsOmUucmVmZXJlbmNlLnYyQ29udGVudFVybH0pLFwidjJDb250ZW50T2JqZWN0XCI9PT1lLnJlZmVyZW5jZT8uJGNhc2UmJnZvaWQgMCE9PWUucmVmZXJlbmNlPy52MkNvbnRlbnRPYmplY3QmJm51bGwhPT1lLnJlZmVyZW5jZT8udjJDb250ZW50T2JqZWN0JiYodC5yZWZlcmVuY2U9eyRjYXNlOlwidjJDb250ZW50T2JqZWN0XCIsdjJDb250ZW50T2JqZWN0OmUucmVmZXJlbmNlLnYyQ29udGVudE9iamVjdH0pLHQuY2xhaW1FeHRlcm5hbElkPWUuY2xhaW1FeHRlcm5hbElkPz9cIlwiLHR9fSx0LkNpcmN1bXN0YW5jZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmNvdW50cnlDb2RlJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUuY291bnRyeUNvZGUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17Y291bnRyeUNvZGU6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2kuY291bnRyeUNvZGU9bi5zdHJpbmcoKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2NvdW50cnlDb2RlOlwiXCJ9O3JldHVybiB0LmNvdW50cnlDb2RlPWUuY291bnRyeUNvZGU/P1wiXCIsdH19LHQuUmVzb2x2ZUNvbnRlbnRPYmplY3RzUmVzcG9uc2U9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgciBvZiBlLnJlc3BvbnNlcyl0LlJlc29sdmVDb250ZW50T2JqZWN0UmVzcG9uc2UuZW5jb2RlKHIsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17cmVzcG9uc2VzOltdfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7ZT4+PjM9PTE/by5yZXNwb25zZXMucHVzaCh0LlJlc29sdmVDb250ZW50T2JqZWN0UmVzcG9uc2UuZGVjb2RlKHIsci51aW50MzIoKSkpOnIuc2tpcFR5cGUoNyZlKX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17cmVzcG9uc2VzOltdfTtyZXR1cm4gbi5yZXNwb25zZXM9ZS5yZXNwb25zZXM/Lm1hcCgoZT0+dC5SZXNvbHZlQ29udGVudE9iamVjdFJlc3BvbnNlLmZyb21QYXJ0aWFsKGUpKSl8fFtdLG59fSx0LlJlc29sdmVDb250ZW50T2JqZWN0UmVzcG9uc2U9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cInJlc29sdmVkQ29udGVudE9iamVjdFwiPT09ZS5yZXN1bHQ/LiRjYXNlJiZ0LlJlc29sdmVkQ29udGVudE9iamVjdC5lbmNvZGUoZS5yZXN1bHQucmVzb2x2ZWRDb250ZW50T2JqZWN0LG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLFwicmVzb2x2ZUNvbnRlbnRPYmplY3RFcnJvclwiPT09ZS5yZXN1bHQ/LiRjYXNlJiZ0LlJlc29sdmVDb250ZW50T2JqZWN0RXJyb3IuZW5jb2RlKGUucmVzdWx0LnJlc29sdmVDb250ZW50T2JqZWN0RXJyb3Isbi51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXtyZXN1bHQ6dm9pZCAwfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5yZXN1bHQ9eyRjYXNlOlwicmVzb2x2ZWRDb250ZW50T2JqZWN0XCIscmVzb2x2ZWRDb250ZW50T2JqZWN0OnQuUmVzb2x2ZWRDb250ZW50T2JqZWN0LmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDI6by5yZXN1bHQ9eyRjYXNlOlwicmVzb2x2ZUNvbnRlbnRPYmplY3RFcnJvclwiLHJlc29sdmVDb250ZW50T2JqZWN0RXJyb3I6dC5SZXNvbHZlQ29udGVudE9iamVjdEVycm9yLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e3Jlc3VsdDp2b2lkIDB9O3JldHVyblwicmVzb2x2ZWRDb250ZW50T2JqZWN0XCI9PT1lLnJlc3VsdD8uJGNhc2UmJnZvaWQgMCE9PWUucmVzdWx0Py5yZXNvbHZlZENvbnRlbnRPYmplY3QmJm51bGwhPT1lLnJlc3VsdD8ucmVzb2x2ZWRDb250ZW50T2JqZWN0JiYobi5yZXN1bHQ9eyRjYXNlOlwicmVzb2x2ZWRDb250ZW50T2JqZWN0XCIscmVzb2x2ZWRDb250ZW50T2JqZWN0OnQuUmVzb2x2ZWRDb250ZW50T2JqZWN0LmZyb21QYXJ0aWFsKGUucmVzdWx0LnJlc29sdmVkQ29udGVudE9iamVjdCl9KSxcInJlc29sdmVDb250ZW50T2JqZWN0RXJyb3JcIj09PWUucmVzdWx0Py4kY2FzZSYmdm9pZCAwIT09ZS5yZXN1bHQ/LnJlc29sdmVDb250ZW50T2JqZWN0RXJyb3ImJm51bGwhPT1lLnJlc3VsdD8ucmVzb2x2ZUNvbnRlbnRPYmplY3RFcnJvciYmKG4ucmVzdWx0PXskY2FzZTpcInJlc29sdmVDb250ZW50T2JqZWN0RXJyb3JcIixyZXNvbHZlQ29udGVudE9iamVjdEVycm9yOnQuUmVzb2x2ZUNvbnRlbnRPYmplY3RFcnJvci5mcm9tUGFydGlhbChlLnJlc3VsdC5yZXNvbHZlQ29udGVudE9iamVjdEVycm9yKX0pLG59fSx0LlJlc29sdmVkQ29udGVudE9iamVjdD17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO2Zvcihjb25zdCByIG9mIGUucmVzb2x2ZWRDb250ZW50cyl0LlJlc29sdmVkQ29udGVudC5lbmNvZGUocixuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gdm9pZCAwIT09ZS5yZWZyZXNoZWRDb250ZW50T2JqZWN0JiZvLkNvbnRlbnRPYmplY3QuZW5jb2RlKGUucmVmcmVzaGVkQ29udGVudE9iamVjdCxuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSxcIlwiIT09ZS5yZWZyZXNoZWRWMkNvbnRlbnRVcmwmJm4udWludDMyKDI2KS5zdHJpbmcoZS5yZWZyZXNoZWRWMkNvbnRlbnRVcmwpLDAhPT1lLnJlZnJlc2hlZFYyQ29udGVudE9iamVjdC5sZW5ndGgmJm4udWludDMyKDM0KS5ieXRlcyhlLnJlZnJlc2hlZFYyQ29udGVudE9iamVjdCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBjPXMoKTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6Yy5yZXNvbHZlZENvbnRlbnRzLnB1c2godC5SZXNvbHZlZENvbnRlbnQuZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2Nhc2UgMjpjLnJlZnJlc2hlZENvbnRlbnRPYmplY3Q9by5Db250ZW50T2JqZWN0LmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMzpjLnJlZnJlc2hlZFYyQ29udGVudFVybD1yLnN0cmluZygpO2JyZWFrO2Nhc2UgNDpjLnJlZnJlc2hlZFYyQ29udGVudE9iamVjdD1yLmJ5dGVzKCk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBjfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXMoKTtyZXR1cm4gbi5yZXNvbHZlZENvbnRlbnRzPWUucmVzb2x2ZWRDb250ZW50cz8ubWFwKChlPT50LlJlc29sdmVkQ29udGVudC5mcm9tUGFydGlhbChlKSkpfHxbXSxuLnJlZnJlc2hlZENvbnRlbnRPYmplY3Q9dm9pZCAwIT09ZS5yZWZyZXNoZWRDb250ZW50T2JqZWN0JiZudWxsIT09ZS5yZWZyZXNoZWRDb250ZW50T2JqZWN0P28uQ29udGVudE9iamVjdC5mcm9tUGFydGlhbChlLnJlZnJlc2hlZENvbnRlbnRPYmplY3QpOnZvaWQgMCxuLnJlZnJlc2hlZFYyQ29udGVudFVybD1lLnJlZnJlc2hlZFYyQ29udGVudFVybD8/XCJcIixuLnJlZnJlc2hlZFYyQ29udGVudE9iamVjdD1lLnJlZnJlc2hlZFYyQ29udGVudE9iamVjdD8/bmV3IFVpbnQ4QXJyYXksbn19LHQuUmVzb2x2ZWRDb250ZW50PXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7Zm9yKGNvbnN0IHIgb2YgZS5yZXNvbHZlZFVybHMpdC5SZXNvbHZlZFVybC5lbmNvZGUocixuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm5cIlwiIT09ZS5yZXNvbHZlZFVybHNLZXkmJm4udWludDMyKDE4KS5zdHJpbmcoZS5yZXNvbHZlZFVybHNLZXkpLDAhPT1lLm1lZGlhVmFyaWFudE5hbWUmJm4udWludDMyKDI0KS5pbnQzMihlLm1lZGlhVmFyaWFudE5hbWUpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17cmVzb2x2ZWRVcmxzOltdLHJlc29sdmVkVXJsc0tleTpcIlwiLG1lZGlhVmFyaWFudE5hbWU6MH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8ucmVzb2x2ZWRVcmxzLnB1c2godC5SZXNvbHZlZFVybC5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAyOm8ucmVzb2x2ZWRVcmxzS2V5PXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOm8ubWVkaWFWYXJpYW50TmFtZT1yLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtyZXNvbHZlZFVybHM6W10scmVzb2x2ZWRVcmxzS2V5OlwiXCIsbWVkaWFWYXJpYW50TmFtZTowfTtyZXR1cm4gbi5yZXNvbHZlZFVybHM9ZS5yZXNvbHZlZFVybHM/Lm1hcCgoZT0+dC5SZXNvbHZlZFVybC5mcm9tUGFydGlhbChlKSkpfHxbXSxuLnJlc29sdmVkVXJsc0tleT1lLnJlc29sdmVkVXJsc0tleT8/XCJcIixuLm1lZGlhVmFyaWFudE5hbWU9ZS5tZWRpYVZhcmlhbnROYW1lPz8wLG59fSx0LlJlc29sdmVkVXJsPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUudXJsJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUudXJsKSxcIjBcIiE9PWUucHJvdmlkZXJJZCYmdC51aW50MzIoMTYpLnVpbnQ2NChlLnByb3ZpZGVySWQpLFwiXCIhPT1lLnN0b3JhZ2VSZWdpb24mJnQudWludDMyKDI2KS5zdHJpbmcoZS5zdG9yYWdlUmVnaW9uKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3VybDpcIlwiLHByb3ZpZGVySWQ6XCIwXCIsc3RvcmFnZVJlZ2lvbjpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS51cmw9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS5wcm92aWRlcklkPWMobi51aW50NjQoKSk7YnJlYWs7Y2FzZSAzOmkuc3RvcmFnZVJlZ2lvbj1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dXJsOlwiXCIscHJvdmlkZXJJZDpcIjBcIixzdG9yYWdlUmVnaW9uOlwiXCJ9O3JldHVybiB0LnVybD1lLnVybD8/XCJcIix0LnByb3ZpZGVySWQ9ZS5wcm92aWRlcklkPz9cIjBcIix0LnN0b3JhZ2VSZWdpb249ZS5zdG9yYWdlUmVnaW9uPz9cIlwiLHR9fSx0LlJlc29sdmVDb250ZW50T2JqZWN0RXJyb3I9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5tZXNzYWdlJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUubWVzc2FnZSksXCIwXCIhPT1lLmNvZGUmJnQudWludDMyKDE2KS5pbnQ2NChlLmNvZGUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17bWVzc2FnZTpcIlwiLGNvZGU6XCIwXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLm1lc3NhZ2U9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS5jb2RlPWMobi5pbnQ2NCgpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e21lc3NhZ2U6XCJcIixjb2RlOlwiMFwifTtyZXR1cm4gdC5tZXNzYWdlPWUubWVzc2FnZT8/XCJcIix0LmNvZGU9ZS5jb2RlPz9cIjBcIix0fX0sYS5kZWZhdWx0LnV0aWwuTG9uZyE9PWkuZGVmYXVsdCYmKGEuZGVmYXVsdC51dGlsLkxvbmc9aS5kZWZhdWx0LGEuZGVmYXVsdC5jb25maWd1cmUoKSl9LDMxOTMwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlRha2Vkb3duQ29udGVudEFzeW5jUmVzdWx0PXQuVGFrZWRvd25Db250ZW50UmVzcG9uc2U9dC5UYWtlZG93bkNvbnRlbnRSZXF1ZXN0PXZvaWQgMDtjb25zdCBpPW4oMjU3OTkpLG89bigzNjg1MSksYT1uKDYwNjgzKSxzPXIobig2MjEwMCkpO3QuVGFrZWRvd25Db250ZW50UmVxdWVzdD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLmNvbnRlbnRSZWZlcmVuY2UmJm8uQ29udGVudFJlZmVyZW5jZS5lbmNvZGUoZS5jb250ZW50UmVmZXJlbmNlLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuYXN5bmNOb3RpZmljYXRpb24mJmEuQXN5bmNOb3RpZmljYXRpb24uZW5jb2RlKGUuYXN5bmNOb3RpZmljYXRpb24sdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtjb250ZW50UmVmZXJlbmNlOnZvaWQgMCxhc3luY05vdGlmaWNhdGlvbjp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmNvbnRlbnRSZWZlcmVuY2U9by5Db250ZW50UmVmZXJlbmNlLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMjppLmFzeW5jTm90aWZpY2F0aW9uPWEuQXN5bmNOb3RpZmljYXRpb24uZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtjb250ZW50UmVmZXJlbmNlOnZvaWQgMCxhc3luY05vdGlmaWNhdGlvbjp2b2lkIDB9O3JldHVybiB0LmNvbnRlbnRSZWZlcmVuY2U9dm9pZCAwIT09ZS5jb250ZW50UmVmZXJlbmNlJiZudWxsIT09ZS5jb250ZW50UmVmZXJlbmNlP28uQ29udGVudFJlZmVyZW5jZS5mcm9tUGFydGlhbChlLmNvbnRlbnRSZWZlcmVuY2UpOnZvaWQgMCx0LmFzeW5jTm90aWZpY2F0aW9uPXZvaWQgMCE9PWUuYXN5bmNOb3RpZmljYXRpb24mJm51bGwhPT1lLmFzeW5jTm90aWZpY2F0aW9uP2EuQXN5bmNOb3RpZmljYXRpb24uZnJvbVBhcnRpYWwoZS5hc3luY05vdGlmaWNhdGlvbik6dm9pZCAwLHR9fSx0LlRha2Vkb3duQ29udGVudFJlc3BvbnNlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLnN0YXR1c0NvZGUmJnQudWludDMyKDgpLmludDMyKGUuc3RhdHVzQ29kZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtzdGF0dXNDb2RlOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLnN0YXR1c0NvZGU9bi5pbnQzMigpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17c3RhdHVzQ29kZTowfTtyZXR1cm4gdC5zdGF0dXNDb2RlPWUuc3RhdHVzQ29kZT8/MCx0fX0sdC5UYWtlZG93bkNvbnRlbnRBc3luY1Jlc3VsdD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLmNvbnRlbnRSZWZlcmVuY2UmJm8uQ29udGVudFJlZmVyZW5jZS5lbmNvZGUoZS5jb250ZW50UmVmZXJlbmNlLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLnN0YXR1c0NvZGUmJnQudWludDMyKDE2KS5pbnQzMihlLnN0YXR1c0NvZGUpLHZvaWQgMCE9PWUuc3RhdHVzQ29kZVByb3BlcnRpZXMmJmkuQ29kZVByb3BlcnRpZXMuZW5jb2RlKGUuc3RhdHVzQ29kZVByb3BlcnRpZXMsdC51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBhPXtjb250ZW50UmVmZXJlbmNlOnZvaWQgMCxzdGF0dXNDb2RlOjAsc3RhdHVzQ29kZVByb3BlcnRpZXM6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS5jb250ZW50UmVmZXJlbmNlPW8uQ29udGVudFJlZmVyZW5jZS5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDI6YS5zdGF0dXNDb2RlPW4uaW50MzIoKTticmVhaztjYXNlIDQ6YS5zdGF0dXNDb2RlUHJvcGVydGllcz1pLkNvZGVQcm9wZXJ0aWVzLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17Y29udGVudFJlZmVyZW5jZTp2b2lkIDAsc3RhdHVzQ29kZTowLHN0YXR1c0NvZGVQcm9wZXJ0aWVzOnZvaWQgMH07cmV0dXJuIHQuY29udGVudFJlZmVyZW5jZT12b2lkIDAhPT1lLmNvbnRlbnRSZWZlcmVuY2UmJm51bGwhPT1lLmNvbnRlbnRSZWZlcmVuY2U/by5Db250ZW50UmVmZXJlbmNlLmZyb21QYXJ0aWFsKGUuY29udGVudFJlZmVyZW5jZSk6dm9pZCAwLHQuc3RhdHVzQ29kZT1lLnN0YXR1c0NvZGU/PzAsdC5zdGF0dXNDb2RlUHJvcGVydGllcz12b2lkIDAhPT1lLnN0YXR1c0NvZGVQcm9wZXJ0aWVzJiZudWxsIT09ZS5zdGF0dXNDb2RlUHJvcGVydGllcz9pLkNvZGVQcm9wZXJ0aWVzLmZyb21QYXJ0aWFsKGUuc3RhdHVzQ29kZVByb3BlcnRpZXMpOnZvaWQgMCx0fX19LDg4MDYwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlVuY2xhaW1Bc3NldEdyb3VwUmVzcG9uc2U9dC5VbmNsYWltQXNzZXRHcm91cFJlcXVlc3Q9dm9pZCAwO2NvbnN0IGk9bigzNjg1MSksbz1yKG4oNjIxMDApKTt0LlVuY2xhaW1Bc3NldEdyb3VwUmVxdWVzdD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLmNvbnRlbnRSZWZlcmVuY2UmJmkuQ29udGVudFJlZmVyZW5jZS5lbmNvZGUoZS5jb250ZW50UmVmZXJlbmNlLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgYT17Y29udGVudFJlZmVyZW5jZTp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9hLmNvbnRlbnRSZWZlcmVuY2U9aS5Db250ZW50UmVmZXJlbmNlLmRlY29kZShuLG4udWludDMyKCkpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17Y29udGVudFJlZmVyZW5jZTp2b2lkIDB9O3JldHVybiB0LmNvbnRlbnRSZWZlcmVuY2U9dm9pZCAwIT09ZS5jb250ZW50UmVmZXJlbmNlJiZudWxsIT09ZS5jb250ZW50UmVmZXJlbmNlP2kuQ29udGVudFJlZmVyZW5jZS5mcm9tUGFydGlhbChlLmNvbnRlbnRSZWZlcmVuY2UpOnZvaWQgMCx0fX0sdC5VbmNsYWltQXNzZXRHcm91cFJlc3BvbnNlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLnJlc3VsdCYmdC51aW50MzIoOCkuaW50MzIoZS5yZXN1bHQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17cmVzdWx0OjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLnJlc3VsdD1uLmludDMyKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtyZXN1bHQ6MH07cmV0dXJuIHQucmVzdWx0PWUucmVzdWx0Pz8wLHR9fX0sNjkzODU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQm9vbFZhbHVlPXQuVW5jbGFpbUNvbnRlbnRSZXN1bHQ9dC5VbmNsYWltQ29udGVudHNSZXNwb25zZT10LlVuY2xhaW1Db250ZW50c1JlcXVlc3Q9dm9pZCAwO2NvbnN0IGk9bigzNjg1MSksbz1yKG4oNjIxMDApKTt0LlVuY2xhaW1Db250ZW50c1JlcXVlc3Q9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgbiBvZiBlLmNvbnRlbnRSZWZlcmVuY2VzKWkuQ29udGVudFJlZmVyZW5jZS5lbmNvZGUobix0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4hMD09PWUucmV0dXJuSGFzUmVtYWluaW5nQ2xhaW1zJiZ0LnVpbnQzMigxNikuYm9vbChlLnJldHVybkhhc1JlbWFpbmluZ0NsYWltcyksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBhPXtjb250ZW50UmVmZXJlbmNlczpbXSxyZXR1cm5IYXNSZW1haW5pbmdDbGFpbXM6ITF9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLmNvbnRlbnRSZWZlcmVuY2VzLnB1c2goaS5Db250ZW50UmVmZXJlbmNlLmRlY29kZShuLG4udWludDMyKCkpKTticmVhaztjYXNlIDI6YS5yZXR1cm5IYXNSZW1haW5pbmdDbGFpbXM9bi5ib29sKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtjb250ZW50UmVmZXJlbmNlczpbXSxyZXR1cm5IYXNSZW1haW5pbmdDbGFpbXM6ITF9O3JldHVybiB0LmNvbnRlbnRSZWZlcmVuY2VzPWUuY29udGVudFJlZmVyZW5jZXM/Lm1hcCgoZT0+aS5Db250ZW50UmVmZXJlbmNlLmZyb21QYXJ0aWFsKGUpKSl8fFtdLHQucmV0dXJuSGFzUmVtYWluaW5nQ2xhaW1zPWUucmV0dXJuSGFzUmVtYWluaW5nQ2xhaW1zPz8hMSx0fX0sdC5VbmNsYWltQ29udGVudHNSZXNwb25zZT17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO24udWludDMyKDEwKS5mb3JrKCk7Zm9yKGNvbnN0IHQgb2YgZS5yZXN1bHRzKW4uaW50MzIodCk7bi5sZGVsaW0oKTtmb3IoY29uc3QgciBvZiBlLnVuY2xhaW1SZXN1bHRzKXQuVW5jbGFpbUNvbnRlbnRSZXN1bHQuZW5jb2RlKHIsbi51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3QgYT17cmVzdWx0czpbXSx1bmNsYWltUmVzdWx0czpbXX07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmlmKDI9PSg3JmUpKXtjb25zdCBlPXIudWludDMyKCkrci5wb3M7Zm9yKDtyLnBvczxlOylhLnJlc3VsdHMucHVzaChyLmludDMyKCkpfWVsc2UgYS5yZXN1bHRzLnB1c2goci5pbnQzMigpKTticmVhaztjYXNlIDI6YS51bmNsYWltUmVzdWx0cy5wdXNoKHQuVW5jbGFpbUNvbnRlbnRSZXN1bHQuZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17cmVzdWx0czpbXSx1bmNsYWltUmVzdWx0czpbXX07cmV0dXJuIG4ucmVzdWx0cz1lLnJlc3VsdHM/Lm1hcCgoZT0+ZSkpfHxbXSxuLnVuY2xhaW1SZXN1bHRzPWUudW5jbGFpbVJlc3VsdHM/Lm1hcCgoZT0+dC5VbmNsYWltQ29udGVudFJlc3VsdC5mcm9tUGFydGlhbChlKSkpfHxbXSxufX0sdC5VbmNsYWltQ29udGVudFJlc3VsdD17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLmhhc1JlbWFpbmluZ0NsYWltcyYmdC5Cb29sVmFsdWUuZW5jb2RlKGUuaGFzUmVtYWluaW5nQ2xhaW1zLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3QgYT17aGFzUmVtYWluaW5nQ2xhaW1zOnZvaWQgMH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO2U+Pj4zPT0xP2EuaGFzUmVtYWluaW5nQ2xhaW1zPXQuQm9vbFZhbHVlLmRlY29kZShyLHIudWludDMyKCkpOnIuc2tpcFR5cGUoNyZlKX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17aGFzUmVtYWluaW5nQ2xhaW1zOnZvaWQgMH07cmV0dXJuIG4uaGFzUmVtYWluaW5nQ2xhaW1zPXZvaWQgMCE9PWUuaGFzUmVtYWluaW5nQ2xhaW1zJiZudWxsIT09ZS5oYXNSZW1haW5pbmdDbGFpbXM/dC5Cb29sVmFsdWUuZnJvbVBhcnRpYWwoZS5oYXNSZW1haW5pbmdDbGFpbXMpOnZvaWQgMCxufX0sdC5Cb29sVmFsdWU9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4hMD09PWUudmFsdWUmJnQudWludDMyKDgpLmJvb2woZS52YWx1ZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXt2YWx1ZTohMX07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2kudmFsdWU9bi5ib29sKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt2YWx1ZTohMX07cmV0dXJuIHQudmFsdWU9ZS52YWx1ZT8/ITEsdH19fSwyODkzNzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5VcGRhdGVNZWRpYU9wdGltaXphdGlvblByb3BlcnRpZXM9dC5BZGRpdGlvbmFsVmFyaWFudHM9dC5VcGRhdGVDbGFpbVJlc3BvbnNlPXQuVXBkYXRlQ2xhaW1SZXF1ZXN0PXZvaWQgMDtjb25zdCBpPW4oMzY4NTEpLG89big2NDQ5KSxhPW4oMzQ1ODUpLHM9bigzMDk2OSksYz1uKDM4Mzk3KSxsPXIobig2MjEwMCkpO3QuVXBkYXRlQ2xhaW1SZXF1ZXN0PXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmwuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUuY29udGVudFJlZmVyZW5jZSYmaS5Db250ZW50UmVmZXJlbmNlLmVuY29kZShlLmNvbnRlbnRSZWZlcmVuY2Usbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS51cGRhdGVDbGFpbVBvbGljeSYmby5VcGRhdGVDbGFpbVBvbGljeS5lbmNvZGUoZS51cGRhdGVDbGFpbVBvbGljeSxuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnVwZGF0ZU1lZGlhT3B0aW1pemF0aW9uUHJvcGVydGllcyYmdC5VcGRhdGVNZWRpYU9wdGltaXphdGlvblByb3BlcnRpZXMuZW5jb2RlKGUudXBkYXRlTWVkaWFPcHRpbWl6YXRpb25Qcm9wZXJ0aWVzLG4udWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLmNvbnRlbnRSZWZlcmVuY2VSZXN1bHRPcHRpb24mJm4udWludDMyKDMyKS5pbnQzMihlLmNvbnRlbnRSZWZlcmVuY2VSZXN1bHRPcHRpb24pLDAhPT1lLmNsYWltU3RhZ2UmJm4udWludDMyKDQwKS5pbnQzMihlLmNsYWltU3RhZ2UpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGwuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbC5kZWZhdWx0LlJlYWRlcihlKTtsZXQgYT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgcz17Y29udGVudFJlZmVyZW5jZTp2b2lkIDAsdXBkYXRlQ2xhaW1Qb2xpY3k6dm9pZCAwLHVwZGF0ZU1lZGlhT3B0aW1pemF0aW9uUHJvcGVydGllczp2b2lkIDAsY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbjowLGNsYWltU3RhZ2U6MH07Zm9yKDtyLnBvczxhOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOnMuY29udGVudFJlZmVyZW5jZT1pLkNvbnRlbnRSZWZlcmVuY2UuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOnMudXBkYXRlQ2xhaW1Qb2xpY3k9by5VcGRhdGVDbGFpbVBvbGljeS5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDM6cy51cGRhdGVNZWRpYU9wdGltaXphdGlvblByb3BlcnRpZXM9dC5VcGRhdGVNZWRpYU9wdGltaXphdGlvblByb3BlcnRpZXMuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSA0OnMuY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbj1yLmludDMyKCk7YnJlYWs7Y2FzZSA1OnMuY2xhaW1TdGFnZT1yLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBzfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtjb250ZW50UmVmZXJlbmNlOnZvaWQgMCx1cGRhdGVDbGFpbVBvbGljeTp2b2lkIDAsdXBkYXRlTWVkaWFPcHRpbWl6YXRpb25Qcm9wZXJ0aWVzOnZvaWQgMCxjb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uOjAsY2xhaW1TdGFnZTowfTtyZXR1cm4gbi5jb250ZW50UmVmZXJlbmNlPXZvaWQgMCE9PWUuY29udGVudFJlZmVyZW5jZSYmbnVsbCE9PWUuY29udGVudFJlZmVyZW5jZT9pLkNvbnRlbnRSZWZlcmVuY2UuZnJvbVBhcnRpYWwoZS5jb250ZW50UmVmZXJlbmNlKTp2b2lkIDAsbi51cGRhdGVDbGFpbVBvbGljeT12b2lkIDAhPT1lLnVwZGF0ZUNsYWltUG9saWN5JiZudWxsIT09ZS51cGRhdGVDbGFpbVBvbGljeT9vLlVwZGF0ZUNsYWltUG9saWN5LmZyb21QYXJ0aWFsKGUudXBkYXRlQ2xhaW1Qb2xpY3kpOnZvaWQgMCxuLnVwZGF0ZU1lZGlhT3B0aW1pemF0aW9uUHJvcGVydGllcz12b2lkIDAhPT1lLnVwZGF0ZU1lZGlhT3B0aW1pemF0aW9uUHJvcGVydGllcyYmbnVsbCE9PWUudXBkYXRlTWVkaWFPcHRpbWl6YXRpb25Qcm9wZXJ0aWVzP3QuVXBkYXRlTWVkaWFPcHRpbWl6YXRpb25Qcm9wZXJ0aWVzLmZyb21QYXJ0aWFsKGUudXBkYXRlTWVkaWFPcHRpbWl6YXRpb25Qcm9wZXJ0aWVzKTp2b2lkIDAsbi5jb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uPWUuY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbj8/MCxuLmNsYWltU3RhZ2U9ZS5jbGFpbVN0YWdlPz8wLG59fSx0LlVwZGF0ZUNsYWltUmVzcG9uc2U9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bC5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5yZXN1bHQmJmEuQ29udGVudFJlZmVyZW5jZVJlc3VsdC5lbmNvZGUoZS5yZXN1bHQsdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbC5kZWZhdWx0LlJlYWRlcj9lOm5ldyBsLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtyZXN1bHQ6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/aS5yZXN1bHQ9YS5Db250ZW50UmVmZXJlbmNlUmVzdWx0LmRlY29kZShuLG4udWludDMyKCkpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17cmVzdWx0OnZvaWQgMH07cmV0dXJuIHQucmVzdWx0PXZvaWQgMCE9PWUucmVzdWx0JiZudWxsIT09ZS5yZXN1bHQ/YS5Db250ZW50UmVmZXJlbmNlUmVzdWx0LmZyb21QYXJ0aWFsKGUucmVzdWx0KTp2b2lkIDAsdH19LHQuQWRkaXRpb25hbFZhcmlhbnRzPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmwuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7dm9pZCAwIT09ZS5zb3VyY2VNZWRpYVByb3BlcnRpZXMmJnMuTWVkaWFQcm9wZXJ0aWVzLmVuY29kZShlLnNvdXJjZU1lZGlhUHJvcGVydGllcyx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtmb3IoY29uc3QgbiBvZiBlLmFkZGl0aW9uYWxWYXJpYW50UHJvcGVydGllcyljLlZhcmlhbnRQcm9wZXJ0aWVzLmVuY29kZShuLHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiEwPT09ZS51bmVuY3J5cHRlZE91dHB1dCYmdC51aW50MzIoMjQpLmJvb2woZS51bmVuY3J5cHRlZE91dHB1dCksXCJcIiE9PWUub3V0cHV0S2V5JiZ0LnVpbnQzMigzNCkuc3RyaW5nKGUub3V0cHV0S2V5KSxcIlwiIT09ZS5vdXRwdXRJdiYmdC51aW50MzIoNDIpLnN0cmluZyhlLm91dHB1dEl2KSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBsLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGwuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3NvdXJjZU1lZGlhUHJvcGVydGllczp2b2lkIDAsYWRkaXRpb25hbFZhcmlhbnRQcm9wZXJ0aWVzOltdLHVuZW5jcnlwdGVkT3V0cHV0OiExLG91dHB1dEtleTpcIlwiLG91dHB1dEl2OlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnNvdXJjZU1lZGlhUHJvcGVydGllcz1zLk1lZGlhUHJvcGVydGllcy5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDI6aS5hZGRpdGlvbmFsVmFyaWFudFByb3BlcnRpZXMucHVzaChjLlZhcmlhbnRQcm9wZXJ0aWVzLmRlY29kZShuLG4udWludDMyKCkpKTticmVhaztjYXNlIDM6aS51bmVuY3J5cHRlZE91dHB1dD1uLmJvb2woKTticmVhaztjYXNlIDQ6aS5vdXRwdXRLZXk9bi5zdHJpbmcoKTticmVhaztjYXNlIDU6aS5vdXRwdXRJdj1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17c291cmNlTWVkaWFQcm9wZXJ0aWVzOnZvaWQgMCxhZGRpdGlvbmFsVmFyaWFudFByb3BlcnRpZXM6W10sdW5lbmNyeXB0ZWRPdXRwdXQ6ITEsb3V0cHV0S2V5OlwiXCIsb3V0cHV0SXY6XCJcIn07cmV0dXJuIHQuc291cmNlTWVkaWFQcm9wZXJ0aWVzPXZvaWQgMCE9PWUuc291cmNlTWVkaWFQcm9wZXJ0aWVzJiZudWxsIT09ZS5zb3VyY2VNZWRpYVByb3BlcnRpZXM/cy5NZWRpYVByb3BlcnRpZXMuZnJvbVBhcnRpYWwoZS5zb3VyY2VNZWRpYVByb3BlcnRpZXMpOnZvaWQgMCx0LmFkZGl0aW9uYWxWYXJpYW50UHJvcGVydGllcz1lLmFkZGl0aW9uYWxWYXJpYW50UHJvcGVydGllcz8ubWFwKChlPT5jLlZhcmlhbnRQcm9wZXJ0aWVzLmZyb21QYXJ0aWFsKGUpKSl8fFtdLHQudW5lbmNyeXB0ZWRPdXRwdXQ9ZS51bmVuY3J5cHRlZE91dHB1dD8/ITEsdC5vdXRwdXRLZXk9ZS5vdXRwdXRLZXk/P1wiXCIsdC5vdXRwdXRJdj1lLm91dHB1dEl2Pz9cIlwiLHR9fSx0LlVwZGF0ZU1lZGlhT3B0aW1pemF0aW9uUHJvcGVydGllcz17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLnVwZGF0ZUNsYWltUG9saWN5T3ZlcnJpZGUmJm8uVXBkYXRlQ2xhaW1Qb2xpY3kuZW5jb2RlKGUudXBkYXRlQ2xhaW1Qb2xpY3lPdmVycmlkZSxuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmFkZGl0aW9uYWxWYXJpYW50cyYmdC5BZGRpdGlvbmFsVmFyaWFudHMuZW5jb2RlKGUuYWRkaXRpb25hbFZhcmlhbnRzLG4udWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGwuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgbC5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3QgYT17dXBkYXRlQ2xhaW1Qb2xpY3lPdmVycmlkZTp2b2lkIDAsYWRkaXRpb25hbFZhcmlhbnRzOnZvaWQgMH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmEudXBkYXRlQ2xhaW1Qb2xpY3lPdmVycmlkZT1vLlVwZGF0ZUNsYWltUG9saWN5LmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMjphLmFkZGl0aW9uYWxWYXJpYW50cz10LkFkZGl0aW9uYWxWYXJpYW50cy5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e3VwZGF0ZUNsYWltUG9saWN5T3ZlcnJpZGU6dm9pZCAwLGFkZGl0aW9uYWxWYXJpYW50czp2b2lkIDB9O3JldHVybiBuLnVwZGF0ZUNsYWltUG9saWN5T3ZlcnJpZGU9dm9pZCAwIT09ZS51cGRhdGVDbGFpbVBvbGljeU92ZXJyaWRlJiZudWxsIT09ZS51cGRhdGVDbGFpbVBvbGljeU92ZXJyaWRlP28uVXBkYXRlQ2xhaW1Qb2xpY3kuZnJvbVBhcnRpYWwoZS51cGRhdGVDbGFpbVBvbGljeU92ZXJyaWRlKTp2b2lkIDAsbi5hZGRpdGlvbmFsVmFyaWFudHM9dm9pZCAwIT09ZS5hZGRpdGlvbmFsVmFyaWFudHMmJm51bGwhPT1lLmFkZGl0aW9uYWxWYXJpYW50cz90LkFkZGl0aW9uYWxWYXJpYW50cy5mcm9tUGFydGlhbChlLmFkZGl0aW9uYWxWYXJpYW50cyk6dm9pZCAwLG59fX0sNjQ0OTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5VcGRhdGVDbGFpbVBvbGljeT10LkV4dGVuZGVkRXhwaXJhdGlvbj12b2lkIDA7Y29uc3QgaT1uKDI0NTI4KSxvPW4oMTg4OTMpLGE9cihuKDYyMTAwKSk7ZnVuY3Rpb24gcyhlKXtsZXQgdD0xZTMqTnVtYmVyKGUuc2Vjb25kcyk7cmV0dXJuIHQrPWUubmFub3MvMWU2LG5ldyBEYXRlKHQpfXQuRXh0ZW5kZWRFeHBpcmF0aW9uPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUuZXhwaXJhdGlvbiYmaS5UaW1lc3RhbXAuZW5jb2RlKChuPWUuZXhwaXJhdGlvbix7c2Vjb25kczpNYXRoLnRydW5jKG4uZ2V0VGltZSgpLzFlMykudG9TdHJpbmcoKSxuYW5vczpuLmdldFRpbWUoKSUxZTMqMWU2fSksdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksdDt2YXIgbn0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXtleHBpcmF0aW9uOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP28uZXhwaXJhdGlvbj1zKGkuVGltZXN0YW1wLmRlY29kZShuLG4udWludDMyKCkpKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2V4cGlyYXRpb246dm9pZCAwfTtyZXR1cm4gdC5leHBpcmF0aW9uPWUuZXhwaXJhdGlvbj8/dm9pZCAwLHR9fSx0LlVwZGF0ZUNsYWltUG9saWN5PXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUuZXh0ZW5kZWRFeHBpcmF0aW9uJiZ0LkV4dGVuZGVkRXhwaXJhdGlvbi5lbmNvZGUoZS5leHRlbmRlZEV4cGlyYXRpb24sbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5hZGRpdGlvbmFsUmVwbGljYXRpb25Qb2xpY3kmJm8uUmVwbGljYXRpb25Qb2xpY3kuZW5jb2RlKGUuYWRkaXRpb25hbFJlcGxpY2F0aW9uUG9saWN5LG4udWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgcz17ZXh0ZW5kZWRFeHBpcmF0aW9uOnZvaWQgMCxhZGRpdGlvbmFsUmVwbGljYXRpb25Qb2xpY3k6dm9pZCAwfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6cy5leHRlbmRlZEV4cGlyYXRpb249dC5FeHRlbmRlZEV4cGlyYXRpb24uZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOnMuYWRkaXRpb25hbFJlcGxpY2F0aW9uUG9saWN5PW8uUmVwbGljYXRpb25Qb2xpY3kuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBzfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtleHRlbmRlZEV4cGlyYXRpb246dm9pZCAwLGFkZGl0aW9uYWxSZXBsaWNhdGlvblBvbGljeTp2b2lkIDB9O3JldHVybiBuLmV4dGVuZGVkRXhwaXJhdGlvbj12b2lkIDAhPT1lLmV4dGVuZGVkRXhwaXJhdGlvbiYmbnVsbCE9PWUuZXh0ZW5kZWRFeHBpcmF0aW9uP3QuRXh0ZW5kZWRFeHBpcmF0aW9uLmZyb21QYXJ0aWFsKGUuZXh0ZW5kZWRFeHBpcmF0aW9uKTp2b2lkIDAsbi5hZGRpdGlvbmFsUmVwbGljYXRpb25Qb2xpY3k9dm9pZCAwIT09ZS5hZGRpdGlvbmFsUmVwbGljYXRpb25Qb2xpY3kmJm51bGwhPT1lLmFkZGl0aW9uYWxSZXBsaWNhdGlvblBvbGljeT9vLlJlcGxpY2F0aW9uUG9saWN5LmZyb21QYXJ0aWFsKGUuYWRkaXRpb25hbFJlcGxpY2F0aW9uUG9saWN5KTp2b2lkIDAsbn19fSwzODY3NDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5VcGRhdGVDb250ZW50RXhwaXJ5UmVzcG9uc2U9dC5VcGRhdGVDb250ZW50RXhwaXJ5UmVxdWVzdD12b2lkIDA7Y29uc3QgaT1uKDI0NTI4KSxvPW4oMzY4NTEpLGE9bigzNDU4NSkscz1yKG4oNjIxMDApKTtmdW5jdGlvbiBjKGUpe2xldCB0PTFlMypOdW1iZXIoZS5zZWNvbmRzKTtyZXR1cm4gdCs9ZS5uYW5vcy8xZTYsbmV3IERhdGUodCl9dC5VcGRhdGVDb250ZW50RXhwaXJ5UmVxdWVzdD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLmNvbnRlbnRSZWZlcmVuY2UmJm8uQ29udGVudFJlZmVyZW5jZS5lbmNvZGUoZS5jb250ZW50UmVmZXJlbmNlLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuZXhwaXJhdGlvbiYmaS5UaW1lc3RhbXAuZW5jb2RlKChuPWUuZXhwaXJhdGlvbix7c2Vjb25kczpNYXRoLnRydW5jKG4uZ2V0VGltZSgpLzFlMykudG9TdHJpbmcoKSxuYW5vczpuLmdldFRpbWUoKSUxZTMqMWU2fSksdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksMCE9PWUuY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbiYmdC51aW50MzIoMjQpLmludDMyKGUuY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbiksdDt2YXIgbn0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBhPXtjb250ZW50UmVmZXJlbmNlOnZvaWQgMCxleHBpcmF0aW9uOnZvaWQgMCxjb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLmNvbnRlbnRSZWZlcmVuY2U9by5Db250ZW50UmVmZXJlbmNlLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMjphLmV4cGlyYXRpb249YyhpLlRpbWVzdGFtcC5kZWNvZGUobixuLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAzOmEuY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbj1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtjb250ZW50UmVmZXJlbmNlOnZvaWQgMCxleHBpcmF0aW9uOnZvaWQgMCxjb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uOjB9O3JldHVybiB0LmNvbnRlbnRSZWZlcmVuY2U9dm9pZCAwIT09ZS5jb250ZW50UmVmZXJlbmNlJiZudWxsIT09ZS5jb250ZW50UmVmZXJlbmNlP28uQ29udGVudFJlZmVyZW5jZS5mcm9tUGFydGlhbChlLmNvbnRlbnRSZWZlcmVuY2UpOnZvaWQgMCx0LmV4cGlyYXRpb249ZS5leHBpcmF0aW9uPz92b2lkIDAsdC5jb250ZW50UmVmZXJlbmNlUmVzdWx0T3B0aW9uPWUuY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbj8/MCx0fX0sdC5VcGRhdGVDb250ZW50RXhwaXJ5UmVzcG9uc2U9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5yZXN1bHQmJmEuQ29udGVudFJlZmVyZW5jZVJlc3VsdC5lbmNvZGUoZS5yZXN1bHQsdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtyZXN1bHQ6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/aS5yZXN1bHQ9YS5Db250ZW50UmVmZXJlbmNlUmVzdWx0LmRlY29kZShuLG4udWludDMyKCkpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17cmVzdWx0OnZvaWQgMH07cmV0dXJuIHQucmVzdWx0PXZvaWQgMCE9PWUucmVzdWx0JiZudWxsIT09ZS5yZXN1bHQ/YS5Db250ZW50UmVmZXJlbmNlUmVzdWx0LmZyb21QYXJ0aWFsKGUucmVzdWx0KTp2b2lkIDAsdH19fSw2NTc2NDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5VcGxvYWRMb2NhdGlvbl9VcmxIZWFkZXJzRW50cnk9dC5VcGxvYWRMb2NhdGlvbj12b2lkIDA7Y29uc3QgaT1uKDI0NTI4KSxvPW4oMjc5MjgpLGE9bigzNDU4NSkscz1yKG4oNjIxMDApKTtmdW5jdGlvbiBjKGUpe2xldCB0PTFlMypOdW1iZXIoZS5zZWNvbmRzKTtyZXR1cm4gdCs9ZS5uYW5vcy8xZTYsbmV3IERhdGUodCl9dC5VcGxvYWRMb2NhdGlvbj17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpzLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3ZhciByO1wiXCIhPT1lLnVwbG9hZFVybCYmbi51aW50MzIoMTApLnN0cmluZyhlLnVwbG9hZFVybCksdm9pZCAwIT09ZS51cGxvYWRVcmxFeHBpcnlUaW1lJiZpLlRpbWVzdGFtcC5lbmNvZGUoKHI9ZS51cGxvYWRVcmxFeHBpcnlUaW1lLHtzZWNvbmRzOk1hdGgudHJ1bmMoci5nZXRUaW1lKCkvMWUzKS50b1N0cmluZygpLG5hbm9zOnIuZ2V0VGltZSgpJTFlMyoxZTZ9KSxuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnZhbGlkRHVyYXRpb25BZnRlclN1Y2Nlc3NmdWxVcGxvYWQmJm8uRHVyYXRpb24uZW5jb2RlKGUudmFsaWREdXJhdGlvbkFmdGVyU3VjY2Vzc2Z1bFVwbG9hZCxuLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmNvbnRlbnRSZWZlcmVuY2UmJmEuQ29udGVudFJlZmVyZW5jZVJlc3VsdC5lbmNvZGUoZS5jb250ZW50UmVmZXJlbmNlLG4udWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLnVwbG9hZFVybFR5cGUmJm4udWludDMyKDQwKS5pbnQzMihlLnVwbG9hZFVybFR5cGUpLE9iamVjdC5lbnRyaWVzKGUudXJsSGVhZGVycykuZm9yRWFjaCgoZT0+e2xldFtyLGldPWU7dC5VcGxvYWRMb2NhdGlvbl9VcmxIZWFkZXJzRW50cnkuZW5jb2RlKHtrZXk6cix2YWx1ZTppfSxuLnVpbnQzMig1MCkuZm9yaygpKS5sZGVsaW0oKX0pKSxcIlwiIT09ZS5tdWx0aXBhcnRVcGxvYWRVcmxUZW1wbGF0ZSYmbi51aW50MzIoNTgpLnN0cmluZyhlLm11bHRpcGFydFVwbG9hZFVybFRlbXBsYXRlKTtmb3IoY29uc3QgdCBvZiBlLm11bHRpcGFydFVwbG9hZFVybFNpZ25hdHVyZXMpbi51aW50MzIoNjYpLnN0cmluZyh0KTtyZXR1cm5cIlwiIT09ZS5tdWx0aXBhcnRDb21wbGV0aW9uVXJsJiZuLnVpbnQzMig3NCkuc3RyaW5nKGUubXVsdGlwYXJ0Q29tcGxldGlvblVybCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2Ygcy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBzLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBsPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCB1PXt1cGxvYWRVcmw6XCJcIix1cGxvYWRVcmxFeHBpcnlUaW1lOnZvaWQgMCx2YWxpZER1cmF0aW9uQWZ0ZXJTdWNjZXNzZnVsVXBsb2FkOnZvaWQgMCxjb250ZW50UmVmZXJlbmNlOnZvaWQgMCx1cGxvYWRVcmxUeXBlOjAsdXJsSGVhZGVyczp7fSxtdWx0aXBhcnRVcGxvYWRVcmxUZW1wbGF0ZTpcIlwiLG11bHRpcGFydFVwbG9hZFVybFNpZ25hdHVyZXM6W10sbXVsdGlwYXJ0Q29tcGxldGlvblVybDpcIlwifTtmb3IoO3IucG9zPGw7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6dS51cGxvYWRVcmw9ci5zdHJpbmcoKTticmVhaztjYXNlIDI6dS51cGxvYWRVcmxFeHBpcnlUaW1lPWMoaS5UaW1lc3RhbXAuZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2Nhc2UgMzp1LnZhbGlkRHVyYXRpb25BZnRlclN1Y2Nlc3NmdWxVcGxvYWQ9by5EdXJhdGlvbi5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDQ6dS5jb250ZW50UmVmZXJlbmNlPWEuQ29udGVudFJlZmVyZW5jZVJlc3VsdC5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDU6dS51cGxvYWRVcmxUeXBlPXIuaW50MzIoKTticmVhaztjYXNlIDY6Y29uc3Qgbj10LlVwbG9hZExvY2F0aW9uX1VybEhlYWRlcnNFbnRyeS5kZWNvZGUocixyLnVpbnQzMigpKTt2b2lkIDAhPT1uLnZhbHVlJiYodS51cmxIZWFkZXJzW24ua2V5XT1uLnZhbHVlKTticmVhaztjYXNlIDc6dS5tdWx0aXBhcnRVcGxvYWRVcmxUZW1wbGF0ZT1yLnN0cmluZygpO2JyZWFrO2Nhc2UgODp1Lm11bHRpcGFydFVwbG9hZFVybFNpZ25hdHVyZXMucHVzaChyLnN0cmluZygpKTticmVhaztjYXNlIDk6dS5tdWx0aXBhcnRDb21wbGV0aW9uVXJsPXIuc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiB1fSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt1cGxvYWRVcmw6XCJcIix1cGxvYWRVcmxFeHBpcnlUaW1lOnZvaWQgMCx2YWxpZER1cmF0aW9uQWZ0ZXJTdWNjZXNzZnVsVXBsb2FkOnZvaWQgMCxjb250ZW50UmVmZXJlbmNlOnZvaWQgMCx1cGxvYWRVcmxUeXBlOjAsdXJsSGVhZGVyczp7fSxtdWx0aXBhcnRVcGxvYWRVcmxUZW1wbGF0ZTpcIlwiLG11bHRpcGFydFVwbG9hZFVybFNpZ25hdHVyZXM6W10sbXVsdGlwYXJ0Q29tcGxldGlvblVybDpcIlwifTtyZXR1cm4gdC51cGxvYWRVcmw9ZS51cGxvYWRVcmw/P1wiXCIsdC51cGxvYWRVcmxFeHBpcnlUaW1lPWUudXBsb2FkVXJsRXhwaXJ5VGltZT8/dm9pZCAwLHQudmFsaWREdXJhdGlvbkFmdGVyU3VjY2Vzc2Z1bFVwbG9hZD12b2lkIDAhPT1lLnZhbGlkRHVyYXRpb25BZnRlclN1Y2Nlc3NmdWxVcGxvYWQmJm51bGwhPT1lLnZhbGlkRHVyYXRpb25BZnRlclN1Y2Nlc3NmdWxVcGxvYWQ/by5EdXJhdGlvbi5mcm9tUGFydGlhbChlLnZhbGlkRHVyYXRpb25BZnRlclN1Y2Nlc3NmdWxVcGxvYWQpOnZvaWQgMCx0LmNvbnRlbnRSZWZlcmVuY2U9dm9pZCAwIT09ZS5jb250ZW50UmVmZXJlbmNlJiZudWxsIT09ZS5jb250ZW50UmVmZXJlbmNlP2EuQ29udGVudFJlZmVyZW5jZVJlc3VsdC5mcm9tUGFydGlhbChlLmNvbnRlbnRSZWZlcmVuY2UpOnZvaWQgMCx0LnVwbG9hZFVybFR5cGU9ZS51cGxvYWRVcmxUeXBlPz8wLHQudXJsSGVhZGVycz1PYmplY3QuZW50cmllcyhlLnVybEhlYWRlcnM/P3t9KS5yZWR1Y2UoKChlLHQpPT57bGV0W24scl09dDtyZXR1cm4gdm9pZCAwIT09ciYmKGVbbl09U3RyaW5nKHIpKSxlfSkse30pLHQubXVsdGlwYXJ0VXBsb2FkVXJsVGVtcGxhdGU9ZS5tdWx0aXBhcnRVcGxvYWRVcmxUZW1wbGF0ZT8/XCJcIix0Lm11bHRpcGFydFVwbG9hZFVybFNpZ25hdHVyZXM9ZS5tdWx0aXBhcnRVcGxvYWRVcmxTaWduYXR1cmVzPy5tYXAoKGU9PmUpKXx8W10sdC5tdWx0aXBhcnRDb21wbGV0aW9uVXJsPWUubXVsdGlwYXJ0Q29tcGxldGlvblVybD8/XCJcIix0fX0sdC5VcGxvYWRMb2NhdGlvbl9VcmxIZWFkZXJzRW50cnk9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5rZXkmJnQudWludDMyKDEwKS5zdHJpbmcoZS5rZXkpLFwiXCIhPT1lLnZhbHVlJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUudmFsdWUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17a2V5OlwiXCIsdmFsdWU6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkua2V5PW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkudmFsdWU9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2tleTpcIlwiLHZhbHVlOlwiXCJ9O3JldHVybiB0LmtleT1lLmtleT8/XCJcIix0LnZhbHVlPWUudmFsdWU/P1wiXCIsdH19fSwzOTcwMDooZSx0KT0+e3ZhciBuO3QuSz12b2lkIDAsKG49dC5LfHwodC5LPXt9KSlbbi5ESVJFQ1Q9MF09XCJESVJFQ1RcIixuW24uUkVTVU1BQkxFPTFdPVwiUkVTVU1BQkxFXCIsbltuLk1VTFRJUEFSVD0yXT1cIk1VTFRJUEFSVFwiLG5bbi5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCJ9LDM4Mzk3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlN1YnRpdGxlUHJvcGVydGllcz10Lk1lZGlhVHJhbnNmb3JtYXRpb25Qcm9wZXJ0aWVzPXQuU2VnbWVudFRpbWVQcm9wZXJ0aWVzPXQuU2VnbWVudEZyYW1lUHJvcGVydGllcz10LlZpZGVvUHJvcGVydGllcz10LlZvZFN0cmVhbWluZ1Byb3BlcnRpZXM9dC5WYXJpYW50UHJvcGVydGllcz10LlZhcmlhbnRQcm9wZXJ0aWVzX1ZhcmlhbnRSZXF1aXJlZG5lc3M9dC5BdWRpb05vcm1hbGl6YXRpb25Qcm9wZXJ0aWVzPXZvaWQgMDtjb25zdCBpPXIobig0MTU4MykpLG89cihuKDYyMTAwKSksYT1uKDIxODc4KTtmdW5jdGlvbiBzKGUpe3JldHVybiBlLnRvU3RyaW5nKCl9dmFyIGMsbDsobD10LkF1ZGlvTm9ybWFsaXphdGlvblByb3BlcnRpZXN8fCh0LkF1ZGlvTm9ybWFsaXphdGlvblByb3BlcnRpZXM9e30pKVtsLk5PVF9TRVQ9MF09XCJOT1RfU0VUXCIsbFtsLkZPUkNFX0FVRElPX05PUk1BTElaQVRJT049MV09XCJGT1JDRV9BVURJT19OT1JNQUxJWkFUSU9OXCIsbFtsLlNLSVBfQVVESU9fTk9STUFMSVpBVElPTj0yXT1cIlNLSVBfQVVESU9fTk9STUFMSVpBVElPTlwiLGxbbC5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKGM9dC5WYXJpYW50UHJvcGVydGllc19WYXJpYW50UmVxdWlyZWRuZXNzfHwodC5WYXJpYW50UHJvcGVydGllc19WYXJpYW50UmVxdWlyZWRuZXNzPXt9KSlbYy5PUFRJT05BTD0wXT1cIk9QVElPTkFMXCIsY1tjLkNPUkVfRVhQRVJJRU5DRT0xMF09XCJDT1JFX0VYUEVSSUVOQ0VcIixjW2MuUkVRVUlSRUQ9MjBdPVwiUkVRVUlSRURcIixjW2MuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLHQuVmFyaWFudFByb3BlcnRpZXM9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUubWVkaWFWYXJpYW50TmFtZSYmbi51aW50MzIoOCkuaW50MzIoZS5tZWRpYVZhcmlhbnROYW1lKSwhMD09PWUucmVxdWlyZWQmJm4udWludDMyKDE2KS5ib29sKGUucmVxdWlyZWQpLDAhPT1lLnZhcmlhbnRSZXF1aXJlZG5lc3MmJm4udWludDMyKDExMikuaW50MzIoZS52YXJpYW50UmVxdWlyZWRuZXNzKSwhMD09PWUudW5lbmNyeXB0ZWRPdXRwdXQmJm4udWludDMyKDI0KS5ib29sKGUudW5lbmNyeXB0ZWRPdXRwdXQpLFwiXCIhPT1lLm91dHB1dEtleSYmbi51aW50MzIoMzQpLnN0cmluZyhlLm91dHB1dEtleSksXCJcIiE9PWUub3V0cHV0SXYmJm4udWludDMyKDQyKS5zdHJpbmcoZS5vdXRwdXRJdiksdm9pZCAwIT09ZS52b2RTdHJlYW1pbmdQcm9wZXJ0aWVzJiZ0LlZvZFN0cmVhbWluZ1Byb3BlcnRpZXMuZW5jb2RlKGUudm9kU3RyZWFtaW5nUHJvcGVydGllcyxuLnVpbnQzMig4MikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnZpZGVvUHJvcGVydGllcyYmdC5WaWRlb1Byb3BlcnRpZXMuZW5jb2RlKGUudmlkZW9Qcm9wZXJ0aWVzLG4udWludDMyKDkwKS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUubWVkaWFUcmFuc2Zvcm1hdGlvblByb3BlcnRpZXMmJnQuTWVkaWFUcmFuc2Zvcm1hdGlvblByb3BlcnRpZXMuZW5jb2RlKGUubWVkaWFUcmFuc2Zvcm1hdGlvblByb3BlcnRpZXMsbi51aW50MzIoMTA2KS5mb3JrKCkpLmxkZWxpbSgpLCEwPT09ZS5pbmNsdWRlQmVmb3JlQ29tcGxldGVkJiZuLnVpbnQzMig5NikuYm9vbChlLmluY2x1ZGVCZWZvcmVDb21wbGV0ZWQpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3QgYT17bWVkaWFWYXJpYW50TmFtZTowLHJlcXVpcmVkOiExLHZhcmlhbnRSZXF1aXJlZG5lc3M6MCx1bmVuY3J5cHRlZE91dHB1dDohMSxvdXRwdXRLZXk6XCJcIixvdXRwdXRJdjpcIlwiLHZvZFN0cmVhbWluZ1Byb3BlcnRpZXM6dm9pZCAwLHZpZGVvUHJvcGVydGllczp2b2lkIDAsbWVkaWFUcmFuc2Zvcm1hdGlvblByb3BlcnRpZXM6dm9pZCAwLGluY2x1ZGVCZWZvcmVDb21wbGV0ZWQ6ITF9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLm1lZGlhVmFyaWFudE5hbWU9ci5pbnQzMigpO2JyZWFrO2Nhc2UgMjphLnJlcXVpcmVkPXIuYm9vbCgpO2JyZWFrO2Nhc2UgMTQ6YS52YXJpYW50UmVxdWlyZWRuZXNzPXIuaW50MzIoKTticmVhaztjYXNlIDM6YS51bmVuY3J5cHRlZE91dHB1dD1yLmJvb2woKTticmVhaztjYXNlIDQ6YS5vdXRwdXRLZXk9ci5zdHJpbmcoKTticmVhaztjYXNlIDU6YS5vdXRwdXRJdj1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMTA6YS52b2RTdHJlYW1pbmdQcm9wZXJ0aWVzPXQuVm9kU3RyZWFtaW5nUHJvcGVydGllcy5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDExOmEudmlkZW9Qcm9wZXJ0aWVzPXQuVmlkZW9Qcm9wZXJ0aWVzLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMTM6YS5tZWRpYVRyYW5zZm9ybWF0aW9uUHJvcGVydGllcz10Lk1lZGlhVHJhbnNmb3JtYXRpb25Qcm9wZXJ0aWVzLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMTI6YS5pbmNsdWRlQmVmb3JlQ29tcGxldGVkPXIuYm9vbCgpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17bWVkaWFWYXJpYW50TmFtZTowLHJlcXVpcmVkOiExLHZhcmlhbnRSZXF1aXJlZG5lc3M6MCx1bmVuY3J5cHRlZE91dHB1dDohMSxvdXRwdXRLZXk6XCJcIixvdXRwdXRJdjpcIlwiLHZvZFN0cmVhbWluZ1Byb3BlcnRpZXM6dm9pZCAwLHZpZGVvUHJvcGVydGllczp2b2lkIDAsbWVkaWFUcmFuc2Zvcm1hdGlvblByb3BlcnRpZXM6dm9pZCAwLGluY2x1ZGVCZWZvcmVDb21wbGV0ZWQ6ITF9O3JldHVybiBuLm1lZGlhVmFyaWFudE5hbWU9ZS5tZWRpYVZhcmlhbnROYW1lPz8wLG4ucmVxdWlyZWQ9ZS5yZXF1aXJlZD8/ITEsbi52YXJpYW50UmVxdWlyZWRuZXNzPWUudmFyaWFudFJlcXVpcmVkbmVzcz8/MCxuLnVuZW5jcnlwdGVkT3V0cHV0PWUudW5lbmNyeXB0ZWRPdXRwdXQ/PyExLG4ub3V0cHV0S2V5PWUub3V0cHV0S2V5Pz9cIlwiLG4ub3V0cHV0SXY9ZS5vdXRwdXRJdj8/XCJcIixuLnZvZFN0cmVhbWluZ1Byb3BlcnRpZXM9dm9pZCAwIT09ZS52b2RTdHJlYW1pbmdQcm9wZXJ0aWVzJiZudWxsIT09ZS52b2RTdHJlYW1pbmdQcm9wZXJ0aWVzP3QuVm9kU3RyZWFtaW5nUHJvcGVydGllcy5mcm9tUGFydGlhbChlLnZvZFN0cmVhbWluZ1Byb3BlcnRpZXMpOnZvaWQgMCxuLnZpZGVvUHJvcGVydGllcz12b2lkIDAhPT1lLnZpZGVvUHJvcGVydGllcyYmbnVsbCE9PWUudmlkZW9Qcm9wZXJ0aWVzP3QuVmlkZW9Qcm9wZXJ0aWVzLmZyb21QYXJ0aWFsKGUudmlkZW9Qcm9wZXJ0aWVzKTp2b2lkIDAsbi5tZWRpYVRyYW5zZm9ybWF0aW9uUHJvcGVydGllcz12b2lkIDAhPT1lLm1lZGlhVHJhbnNmb3JtYXRpb25Qcm9wZXJ0aWVzJiZudWxsIT09ZS5tZWRpYVRyYW5zZm9ybWF0aW9uUHJvcGVydGllcz90Lk1lZGlhVHJhbnNmb3JtYXRpb25Qcm9wZXJ0aWVzLmZyb21QYXJ0aWFsKGUubWVkaWFUcmFuc2Zvcm1hdGlvblByb3BlcnRpZXMpOnZvaWQgMCxuLmluY2x1ZGVCZWZvcmVDb21wbGV0ZWQ9ZS5pbmNsdWRlQmVmb3JlQ29tcGxldGVkPz8hMSxufX0sdC5Wb2RTdHJlYW1pbmdQcm9wZXJ0aWVzPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7Zm9yKGNvbnN0IHIgb2YgZS53ZWJ2dHRTdWJ0aXRsZXMpdC5TdWJ0aXRsZVByb3BlcnRpZXMuZW5jb2RlKHIsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3QgYT17d2VidnR0U3VidGl0bGVzOltdfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7ZT4+PjM9PTE/YS53ZWJ2dHRTdWJ0aXRsZXMucHVzaCh0LlN1YnRpdGxlUHJvcGVydGllcy5kZWNvZGUocixyLnVpbnQzMigpKSk6ci5za2lwVHlwZSg3JmUpfXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXt3ZWJ2dHRTdWJ0aXRsZXM6W119O3JldHVybiBuLndlYnZ0dFN1YnRpdGxlcz1lLndlYnZ0dFN1YnRpdGxlcz8ubWFwKChlPT50LlN1YnRpdGxlUHJvcGVydGllcy5mcm9tUGFydGlhbChlKSkpfHxbXSxufX0sdC5WaWRlb1Byb3BlcnRpZXM9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4hMD09PWUuY2FsY3VsYXRlVm1hZiYmbi51aW50MzIoOCkuYm9vbChlLmNhbGN1bGF0ZVZtYWYpLFwic2VnbWVudEZyYW1lUHJvcGVydGllc1wiPT09ZS5zZWdtZW50UHJvcGVydGllcz8uJGNhc2UmJnQuU2VnbWVudEZyYW1lUHJvcGVydGllcy5lbmNvZGUoZS5zZWdtZW50UHJvcGVydGllcy5zZWdtZW50RnJhbWVQcm9wZXJ0aWVzLG4udWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLFwic2VnbWVudFRpbWVQcm9wZXJ0aWVzXCI9PT1lLnNlZ21lbnRQcm9wZXJ0aWVzPy4kY2FzZSYmdC5TZWdtZW50VGltZVByb3BlcnRpZXMuZW5jb2RlKGUuc2VnbWVudFByb3BlcnRpZXMuc2VnbWVudFRpbWVQcm9wZXJ0aWVzLG4udWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLmF1ZGlvTm9ybWFsaXphdGlvblByb3BlcnRpZXMmJm4udWludDMyKDMyKS5pbnQzMihlLmF1ZGlvTm9ybWFsaXphdGlvblByb3BlcnRpZXMpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3QgYT17Y2FsY3VsYXRlVm1hZjohMSxzZWdtZW50UHJvcGVydGllczp2b2lkIDAsYXVkaW9Ob3JtYWxpemF0aW9uUHJvcGVydGllczowfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS5jYWxjdWxhdGVWbWFmPXIuYm9vbCgpO2JyZWFrO2Nhc2UgMjphLnNlZ21lbnRQcm9wZXJ0aWVzPXskY2FzZTpcInNlZ21lbnRGcmFtZVByb3BlcnRpZXNcIixzZWdtZW50RnJhbWVQcm9wZXJ0aWVzOnQuU2VnbWVudEZyYW1lUHJvcGVydGllcy5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAzOmEuc2VnbWVudFByb3BlcnRpZXM9eyRjYXNlOlwic2VnbWVudFRpbWVQcm9wZXJ0aWVzXCIsc2VnbWVudFRpbWVQcm9wZXJ0aWVzOnQuU2VnbWVudFRpbWVQcm9wZXJ0aWVzLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDQ6YS5hdWRpb05vcm1hbGl6YXRpb25Qcm9wZXJ0aWVzPXIuaW50MzIoKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e2NhbGN1bGF0ZVZtYWY6ITEsc2VnbWVudFByb3BlcnRpZXM6dm9pZCAwLGF1ZGlvTm9ybWFsaXphdGlvblByb3BlcnRpZXM6MH07cmV0dXJuIG4uY2FsY3VsYXRlVm1hZj1lLmNhbGN1bGF0ZVZtYWY/PyExLFwic2VnbWVudEZyYW1lUHJvcGVydGllc1wiPT09ZS5zZWdtZW50UHJvcGVydGllcz8uJGNhc2UmJnZvaWQgMCE9PWUuc2VnbWVudFByb3BlcnRpZXM/LnNlZ21lbnRGcmFtZVByb3BlcnRpZXMmJm51bGwhPT1lLnNlZ21lbnRQcm9wZXJ0aWVzPy5zZWdtZW50RnJhbWVQcm9wZXJ0aWVzJiYobi5zZWdtZW50UHJvcGVydGllcz17JGNhc2U6XCJzZWdtZW50RnJhbWVQcm9wZXJ0aWVzXCIsc2VnbWVudEZyYW1lUHJvcGVydGllczp0LlNlZ21lbnRGcmFtZVByb3BlcnRpZXMuZnJvbVBhcnRpYWwoZS5zZWdtZW50UHJvcGVydGllcy5zZWdtZW50RnJhbWVQcm9wZXJ0aWVzKX0pLFwic2VnbWVudFRpbWVQcm9wZXJ0aWVzXCI9PT1lLnNlZ21lbnRQcm9wZXJ0aWVzPy4kY2FzZSYmdm9pZCAwIT09ZS5zZWdtZW50UHJvcGVydGllcz8uc2VnbWVudFRpbWVQcm9wZXJ0aWVzJiZudWxsIT09ZS5zZWdtZW50UHJvcGVydGllcz8uc2VnbWVudFRpbWVQcm9wZXJ0aWVzJiYobi5zZWdtZW50UHJvcGVydGllcz17JGNhc2U6XCJzZWdtZW50VGltZVByb3BlcnRpZXNcIixzZWdtZW50VGltZVByb3BlcnRpZXM6dC5TZWdtZW50VGltZVByb3BlcnRpZXMuZnJvbVBhcnRpYWwoZS5zZWdtZW50UHJvcGVydGllcy5zZWdtZW50VGltZVByb3BlcnRpZXMpfSksbi5hdWRpb05vcm1hbGl6YXRpb25Qcm9wZXJ0aWVzPWUuYXVkaW9Ob3JtYWxpemF0aW9uUHJvcGVydGllcz8/MCxufX0sdC5TZWdtZW50RnJhbWVQcm9wZXJ0aWVzPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLnN0YXJ0RnJhbWUmJnQudWludDMyKDgpLnVpbnQzMihlLnN0YXJ0RnJhbWUpLDAhPT1lLmVuZEZyYW1lJiZ0LnVpbnQzMigxNikudWludDMyKGUuZW5kRnJhbWUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17c3RhcnRGcmFtZTowLGVuZEZyYW1lOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnN0YXJ0RnJhbWU9bi51aW50MzIoKTticmVhaztjYXNlIDI6aS5lbmRGcmFtZT1uLnVpbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17c3RhcnRGcmFtZTowLGVuZEZyYW1lOjB9O3JldHVybiB0LnN0YXJ0RnJhbWU9ZS5zdGFydEZyYW1lPz8wLHQuZW5kRnJhbWU9ZS5lbmRGcmFtZT8/MCx0fX0sdC5TZWdtZW50VGltZVByb3BlcnRpZXM9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIjBcIiE9PWUuc3RhcnRNaWxsaXMmJnQudWludDMyKDgpLnVpbnQ2NChlLnN0YXJ0TWlsbGlzKSxcIjBcIiE9PWUuZW5kTWlsbGlzJiZ0LnVpbnQzMigxNikudWludDY0KGUuZW5kTWlsbGlzKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3N0YXJ0TWlsbGlzOlwiMFwiLGVuZE1pbGxpczpcIjBcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuc3RhcnRNaWxsaXM9cyhuLnVpbnQ2NCgpKTticmVhaztjYXNlIDI6aS5lbmRNaWxsaXM9cyhuLnVpbnQ2NCgpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3N0YXJ0TWlsbGlzOlwiMFwiLGVuZE1pbGxpczpcIjBcIn07cmV0dXJuIHQuc3RhcnRNaWxsaXM9ZS5zdGFydE1pbGxpcz8/XCIwXCIsdC5lbmRNaWxsaXM9ZS5lbmRNaWxsaXM/P1wiMFwiLHR9fSx0Lk1lZGlhVHJhbnNmb3JtYXRpb25Qcm9wZXJ0aWVzPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLnNvdXJjZVgmJnQudWludDMyKDgpLnVpbnQzMihlLnNvdXJjZVgpLDAhPT1lLnNvdXJjZVkmJnQudWludDMyKDE2KS51aW50MzIoZS5zb3VyY2VZKSwwIT09ZS5zb3VyY2VXaWR0aCYmdC51aW50MzIoMjQpLnVpbnQzMihlLnNvdXJjZVdpZHRoKSwwIT09ZS5zb3VyY2VIZWlnaHQmJnQudWludDMyKDMyKS51aW50MzIoZS5zb3VyY2VIZWlnaHQpLDAhPT1lLm91dHB1dFdpZHRoJiZ0LnVpbnQzMig0MCkudWludDMyKGUub3V0cHV0V2lkdGgpLDAhPT1lLm91dHB1dEhlaWdodCYmdC51aW50MzIoNDgpLnVpbnQzMihlLm91dHB1dEhlaWdodCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtzb3VyY2VYOjAsc291cmNlWTowLHNvdXJjZVdpZHRoOjAsc291cmNlSGVpZ2h0OjAsb3V0cHV0V2lkdGg6MCxvdXRwdXRIZWlnaHQ6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuc291cmNlWD1uLnVpbnQzMigpO2JyZWFrO2Nhc2UgMjppLnNvdXJjZVk9bi51aW50MzIoKTticmVhaztjYXNlIDM6aS5zb3VyY2VXaWR0aD1uLnVpbnQzMigpO2JyZWFrO2Nhc2UgNDppLnNvdXJjZUhlaWdodD1uLnVpbnQzMigpO2JyZWFrO2Nhc2UgNTppLm91dHB1dFdpZHRoPW4udWludDMyKCk7YnJlYWs7Y2FzZSA2Omkub3V0cHV0SGVpZ2h0PW4udWludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtzb3VyY2VYOjAsc291cmNlWTowLHNvdXJjZVdpZHRoOjAsc291cmNlSGVpZ2h0OjAsb3V0cHV0V2lkdGg6MCxvdXRwdXRIZWlnaHQ6MH07cmV0dXJuIHQuc291cmNlWD1lLnNvdXJjZVg/PzAsdC5zb3VyY2VZPWUuc291cmNlWT8/MCx0LnNvdXJjZVdpZHRoPWUuc291cmNlV2lkdGg/PzAsdC5zb3VyY2VIZWlnaHQ9ZS5zb3VyY2VIZWlnaHQ/PzAsdC5vdXRwdXRXaWR0aD1lLm91dHB1dFdpZHRoPz8wLHQub3V0cHV0SGVpZ2h0PWUub3V0cHV0SGVpZ2h0Pz8wLHR9fSx0LlN1YnRpdGxlUHJvcGVydGllcz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmxhbmd1YWdlJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUubGFuZ3VhZ2UpLFwiZXh0ZXJuYWxDb250ZW50UmVmZXJlbmNlXCI9PT1lLmV4dGVybmFsUmVmZXJlbmNlPy4kY2FzZSYmYS5FeHRlcm5hbENvbnRlbnRSZWZlcmVuY2UuZW5jb2RlKGUuZXh0ZXJuYWxSZWZlcmVuY2UuZXh0ZXJuYWxDb250ZW50UmVmZXJlbmNlLHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLFwiZXh0ZXJuYWxVcmxcIj09PWUuZXh0ZXJuYWxSZWZlcmVuY2U/LiRjYXNlJiZ0LnVpbnQzMigyNikuc3RyaW5nKGUuZXh0ZXJuYWxSZWZlcmVuY2UuZXh0ZXJuYWxVcmwpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17bGFuZ3VhZ2U6XCJcIixleHRlcm5hbFJlZmVyZW5jZTp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmxhbmd1YWdlPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkuZXh0ZXJuYWxSZWZlcmVuY2U9eyRjYXNlOlwiZXh0ZXJuYWxDb250ZW50UmVmZXJlbmNlXCIsZXh0ZXJuYWxDb250ZW50UmVmZXJlbmNlOmEuRXh0ZXJuYWxDb250ZW50UmVmZXJlbmNlLmRlY29kZShuLG4udWludDMyKCkpfTticmVhaztjYXNlIDM6aS5leHRlcm5hbFJlZmVyZW5jZT17JGNhc2U6XCJleHRlcm5hbFVybFwiLGV4dGVybmFsVXJsOm4uc3RyaW5nKCl9O2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17bGFuZ3VhZ2U6XCJcIixleHRlcm5hbFJlZmVyZW5jZTp2b2lkIDB9O3JldHVybiB0Lmxhbmd1YWdlPWUubGFuZ3VhZ2U/P1wiXCIsXCJleHRlcm5hbENvbnRlbnRSZWZlcmVuY2VcIj09PWUuZXh0ZXJuYWxSZWZlcmVuY2U/LiRjYXNlJiZ2b2lkIDAhPT1lLmV4dGVybmFsUmVmZXJlbmNlPy5leHRlcm5hbENvbnRlbnRSZWZlcmVuY2UmJm51bGwhPT1lLmV4dGVybmFsUmVmZXJlbmNlPy5leHRlcm5hbENvbnRlbnRSZWZlcmVuY2UmJih0LmV4dGVybmFsUmVmZXJlbmNlPXskY2FzZTpcImV4dGVybmFsQ29udGVudFJlZmVyZW5jZVwiLGV4dGVybmFsQ29udGVudFJlZmVyZW5jZTphLkV4dGVybmFsQ29udGVudFJlZmVyZW5jZS5mcm9tUGFydGlhbChlLmV4dGVybmFsUmVmZXJlbmNlLmV4dGVybmFsQ29udGVudFJlZmVyZW5jZSl9KSxcImV4dGVybmFsVXJsXCI9PT1lLmV4dGVybmFsUmVmZXJlbmNlPy4kY2FzZSYmdm9pZCAwIT09ZS5leHRlcm5hbFJlZmVyZW5jZT8uZXh0ZXJuYWxVcmwmJm51bGwhPT1lLmV4dGVybmFsUmVmZXJlbmNlPy5leHRlcm5hbFVybCYmKHQuZXh0ZXJuYWxSZWZlcmVuY2U9eyRjYXNlOlwiZXh0ZXJuYWxVcmxcIixleHRlcm5hbFVybDplLmV4dGVybmFsUmVmZXJlbmNlLmV4dGVybmFsVXJsfSksdH19LG8uZGVmYXVsdC51dGlsLkxvbmchPT1pLmRlZmF1bHQmJihvLmRlZmF1bHQudXRpbC5Mb25nPWkuZGVmYXVsdCxvLmRlZmF1bHQuY29uZmlndXJlKCkpfSw5MTA4ODooZSx0LG4pPT57dC5XSD10LlBkPXQuSl89dC5EcT10LkROPXQuV249dC5FMj10LnlaPXQuelI9dC5vRD10LndNPXQuYWI9dm9pZCAwLG4oMzMwMzcpO2NvbnN0IHI9bigzMTg2MCksaT1uKDI2NzcpLG89big2NjEwOCksYT1uKDI3MTYwKSxzPW4oOTU1NzcpO24oODIwODQpLHQuYWI9Y2xhc3N7cnBjO2NvbnN0cnVjdG9yKGUpe3RoaXMucnBjPWUsdGhpcy5DcmVhdGVMaXN0cz10aGlzLkNyZWF0ZUxpc3RzLmJpbmQodGhpcyksdGhpcy5GZXRjaExpc3RzPXRoaXMuRmV0Y2hMaXN0cy5iaW5kKHRoaXMpLHRoaXMuVXBkYXRlTGlzdHM9dGhpcy5VcGRhdGVMaXN0cy5iaW5kKHRoaXMpLHRoaXMuRGVsZXRlTGlzdHM9dGhpcy5EZWxldGVMaXN0cy5iaW5kKHRoaXMpLHRoaXMuQ3JlYXRlTGlzdFN0b3J5PXRoaXMuQ3JlYXRlTGlzdFN0b3J5LmJpbmQodGhpcyksdGhpcy5DcmVhdGVMaXN0c0luZ3Jlc3NHYXRld2F5PXRoaXMuQ3JlYXRlTGlzdHNJbmdyZXNzR2F0ZXdheS5iaW5kKHRoaXMpLHRoaXMuRmV0Y2hMaXN0c0luZ3Jlc3NHYXRld2F5PXRoaXMuRmV0Y2hMaXN0c0luZ3Jlc3NHYXRld2F5LmJpbmQodGhpcyksdGhpcy5EZWxldGVMaXN0c0luZ3Jlc3NHYXRld2F5PXRoaXMuRGVsZXRlTGlzdHNJbmdyZXNzR2F0ZXdheS5iaW5kKHRoaXMpLHRoaXMuQ3JlYXRlTGlzdFN0b3J5SW5ncmVzc0dhdGV3YXk9dGhpcy5DcmVhdGVMaXN0U3RvcnlJbmdyZXNzR2F0ZXdheS5iaW5kKHRoaXMpLHRoaXMuVXBkYXRlTGlzdHNJbmdyZXNzR2F0ZXdheT10aGlzLlVwZGF0ZUxpc3RzSW5ncmVzc0dhdGV3YXkuYmluZCh0aGlzKX1DcmVhdGVMaXN0cyhlLG4pe3JldHVybiB0aGlzLnJwYy51bmFyeSh0Lm9ELHIuTGlzdHNDcmVhdGVSZXF1ZXN0LmZyb21QYXJ0aWFsKGUpLG4pfUZldGNoTGlzdHMoZSxuKXtyZXR1cm4gdGhpcy5ycGMudW5hcnkodC56UixpLkxpc3RzRmV0Y2hSZXF1ZXN0LmZyb21QYXJ0aWFsKGUpLG4pfVVwZGF0ZUxpc3RzKGUsbil7cmV0dXJuIHRoaXMucnBjLnVuYXJ5KHQueVosby5MaXN0c1VwZGF0ZVJlcXVlc3QuZnJvbVBhcnRpYWwoZSksbil9RGVsZXRlTGlzdHMoZSxuKXtyZXR1cm4gdGhpcy5ycGMudW5hcnkodC5FMixhLkxpc3RzRGVsZXRlUmVxdWVzdC5mcm9tUGFydGlhbChlKSxuKX1DcmVhdGVMaXN0U3RvcnkoZSxuKXtyZXR1cm4gdGhpcy5ycGMudW5hcnkodC5XbixzLkxpc3RDcmVhdGVTdG9yeVJlcXVlc3QuZnJvbVBhcnRpYWwoZSksbil9Q3JlYXRlTGlzdHNJbmdyZXNzR2F0ZXdheShlLG4pe3JldHVybiB0aGlzLnJwYy51bmFyeSh0LkROLHIuTGlzdHNDcmVhdGVJbmdyZXNzR2F0ZXdheVJlcXVlc3QuZnJvbVBhcnRpYWwoZSksbil9RmV0Y2hMaXN0c0luZ3Jlc3NHYXRld2F5KGUsbil7cmV0dXJuIHRoaXMucnBjLnVuYXJ5KHQuRHEsaS5MaXN0c0ZldGNoSW5ncmVzc0dhdGV3YXlSZXF1ZXN0LmZyb21QYXJ0aWFsKGUpLG4pfURlbGV0ZUxpc3RzSW5ncmVzc0dhdGV3YXkoZSxuKXtyZXR1cm4gdGhpcy5ycGMudW5hcnkodC5KXyxhLkxpc3RzRGVsZXRlSW5ncmVzc0dhdGV3YXlSZXF1ZXN0LmZyb21QYXJ0aWFsKGUpLG4pfUNyZWF0ZUxpc3RTdG9yeUluZ3Jlc3NHYXRld2F5KGUsbil7cmV0dXJuIHRoaXMucnBjLnVuYXJ5KHQuUGQscy5MaXN0Q3JlYXRlU3RvcnlJbmdyZXNzR2F0ZXdheVJlcXVlc3QuZnJvbVBhcnRpYWwoZSksbil9VXBkYXRlTGlzdHNJbmdyZXNzR2F0ZXdheShlLG4pe3JldHVybiB0aGlzLnJwYy51bmFyeSh0LldILG8uTGlzdHNVcGRhdGVJbmdyZXNzR2F0ZXdheVJlcXVlc3QuZnJvbVBhcnRpYWwoZSksbil9fSx0LndNPXtzZXJ2aWNlTmFtZTpcInNuYXBjaGF0Lmxpc3RzLmFwaS5MaXN0c1wifSx0Lm9EPXttZXRob2ROYW1lOlwiQ3JlYXRlTGlzdHNcIixzZXJ2aWNlOnQud00scmVxdWVzdFN0cmVhbTohMSxyZXNwb25zZVN0cmVhbTohMSxyZXF1ZXN0VHlwZTp7c2VyaWFsaXplQmluYXJ5KCl7cmV0dXJuIHIuTGlzdHNDcmVhdGVSZXF1ZXN0LmVuY29kZSh0aGlzKS5maW5pc2goKX19LHJlc3BvbnNlVHlwZTp7ZGVzZXJpYWxpemVCaW5hcnk6ZT0+KHsuLi5yLkxpc3RzQ3JlYXRlUmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fSx0LnpSPXttZXRob2ROYW1lOlwiRmV0Y2hMaXN0c1wiLHNlcnZpY2U6dC53TSxyZXF1ZXN0U3RyZWFtOiExLHJlc3BvbnNlU3RyZWFtOiExLHJlcXVlc3RUeXBlOntzZXJpYWxpemVCaW5hcnkoKXtyZXR1cm4gaS5MaXN0c0ZldGNoUmVxdWVzdC5lbmNvZGUodGhpcykuZmluaXNoKCl9fSxyZXNwb25zZVR5cGU6e2Rlc2VyaWFsaXplQmluYXJ5OmU9Pih7Li4uaS5MaXN0c0ZldGNoUmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fSx0LnlaPXttZXRob2ROYW1lOlwiVXBkYXRlTGlzdHNcIixzZXJ2aWNlOnQud00scmVxdWVzdFN0cmVhbTohMSxyZXNwb25zZVN0cmVhbTohMSxyZXF1ZXN0VHlwZTp7c2VyaWFsaXplQmluYXJ5KCl7cmV0dXJuIG8uTGlzdHNVcGRhdGVSZXF1ZXN0LmVuY29kZSh0aGlzKS5maW5pc2goKX19LHJlc3BvbnNlVHlwZTp7ZGVzZXJpYWxpemVCaW5hcnk6ZT0+KHsuLi5vLkxpc3RzVXBkYXRlUmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fSx0LkUyPXttZXRob2ROYW1lOlwiRGVsZXRlTGlzdHNcIixzZXJ2aWNlOnQud00scmVxdWVzdFN0cmVhbTohMSxyZXNwb25zZVN0cmVhbTohMSxyZXF1ZXN0VHlwZTp7c2VyaWFsaXplQmluYXJ5KCl7cmV0dXJuIGEuTGlzdHNEZWxldGVSZXF1ZXN0LmVuY29kZSh0aGlzKS5maW5pc2goKX19LHJlc3BvbnNlVHlwZTp7ZGVzZXJpYWxpemVCaW5hcnk6ZT0+KHsuLi5hLkxpc3RzRGVsZXRlUmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fSx0LlduPXttZXRob2ROYW1lOlwiQ3JlYXRlTGlzdFN0b3J5XCIsc2VydmljZTp0LndNLHJlcXVlc3RTdHJlYW06ITEscmVzcG9uc2VTdHJlYW06ITEscmVxdWVzdFR5cGU6e3NlcmlhbGl6ZUJpbmFyeSgpe3JldHVybiBzLkxpc3RDcmVhdGVTdG9yeVJlcXVlc3QuZW5jb2RlKHRoaXMpLmZpbmlzaCgpfX0scmVzcG9uc2VUeXBlOntkZXNlcmlhbGl6ZUJpbmFyeTplPT4oey4uLnMuTGlzdENyZWF0ZVN0b3J5UmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fSx0LkROPXttZXRob2ROYW1lOlwiQ3JlYXRlTGlzdHNJbmdyZXNzR2F0ZXdheVwiLHNlcnZpY2U6dC53TSxyZXF1ZXN0U3RyZWFtOiExLHJlc3BvbnNlU3RyZWFtOiExLHJlcXVlc3RUeXBlOntzZXJpYWxpemVCaW5hcnkoKXtyZXR1cm4gci5MaXN0c0NyZWF0ZUluZ3Jlc3NHYXRld2F5UmVxdWVzdC5lbmNvZGUodGhpcykuZmluaXNoKCl9fSxyZXNwb25zZVR5cGU6e2Rlc2VyaWFsaXplQmluYXJ5OmU9Pih7Li4uci5MaXN0c0NyZWF0ZUluZ3Jlc3NHYXRld2F5UmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fSx0LkRxPXttZXRob2ROYW1lOlwiRmV0Y2hMaXN0c0luZ3Jlc3NHYXRld2F5XCIsc2VydmljZTp0LndNLHJlcXVlc3RTdHJlYW06ITEscmVzcG9uc2VTdHJlYW06ITEscmVxdWVzdFR5cGU6e3NlcmlhbGl6ZUJpbmFyeSgpe3JldHVybiBpLkxpc3RzRmV0Y2hJbmdyZXNzR2F0ZXdheVJlcXVlc3QuZW5jb2RlKHRoaXMpLmZpbmlzaCgpfX0scmVzcG9uc2VUeXBlOntkZXNlcmlhbGl6ZUJpbmFyeTplPT4oey4uLmkuTGlzdHNGZXRjaEluZ3Jlc3NHYXRld2F5UmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fSx0LkpfPXttZXRob2ROYW1lOlwiRGVsZXRlTGlzdHNJbmdyZXNzR2F0ZXdheVwiLHNlcnZpY2U6dC53TSxyZXF1ZXN0U3RyZWFtOiExLHJlc3BvbnNlU3RyZWFtOiExLHJlcXVlc3RUeXBlOntzZXJpYWxpemVCaW5hcnkoKXtyZXR1cm4gYS5MaXN0c0RlbGV0ZUluZ3Jlc3NHYXRld2F5UmVxdWVzdC5lbmNvZGUodGhpcykuZmluaXNoKCl9fSxyZXNwb25zZVR5cGU6e2Rlc2VyaWFsaXplQmluYXJ5OmU9Pih7Li4uYS5MaXN0c0RlbGV0ZUluZ3Jlc3NHYXRld2F5UmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fSx0LlBkPXttZXRob2ROYW1lOlwiQ3JlYXRlTGlzdFN0b3J5SW5ncmVzc0dhdGV3YXlcIixzZXJ2aWNlOnQud00scmVxdWVzdFN0cmVhbTohMSxyZXNwb25zZVN0cmVhbTohMSxyZXF1ZXN0VHlwZTp7c2VyaWFsaXplQmluYXJ5KCl7cmV0dXJuIHMuTGlzdENyZWF0ZVN0b3J5SW5ncmVzc0dhdGV3YXlSZXF1ZXN0LmVuY29kZSh0aGlzKS5maW5pc2goKX19LHJlc3BvbnNlVHlwZTp7ZGVzZXJpYWxpemVCaW5hcnk6ZT0+KHsuLi5zLkxpc3RDcmVhdGVTdG9yeUluZ3Jlc3NHYXRld2F5UmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fSx0LldIPXttZXRob2ROYW1lOlwiVXBkYXRlTGlzdHNJbmdyZXNzR2F0ZXdheVwiLHNlcnZpY2U6dC53TSxyZXF1ZXN0U3RyZWFtOiExLHJlc3BvbnNlU3RyZWFtOiExLHJlcXVlc3RUeXBlOntzZXJpYWxpemVCaW5hcnkoKXtyZXR1cm4gby5MaXN0c1VwZGF0ZUluZ3Jlc3NHYXRld2F5UmVxdWVzdC5lbmNvZGUodGhpcykuZmluaXNoKCl9fSxyZXNwb25zZVR5cGU6e2Rlc2VyaWFsaXplQmluYXJ5OmU9Pih7Li4uby5MaXN0c1VwZGF0ZUluZ3Jlc3NHYXRld2F5UmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fTtjbGFzcyBjIGV4dGVuZHMgRXJyb3J7Y29kZTttZXRhZGF0YTtjb25zdHJ1Y3RvcihlLHQsbil7c3VwZXIoZSksdGhpcy5jb2RlPXQsdGhpcy5tZXRhZGF0YT1ufX19LDMxODYwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lkxpc3RzQ3JlYXRlSW5ncmVzc0dhdGV3YXlSZXNwb25zZT10Lkxpc3RzQ3JlYXRlUmVzcG9uc2U9dC5MaXN0c0NyZWF0ZUluZ3Jlc3NHYXRld2F5UmVxdWVzdD10Lkxpc3RzQ3JlYXRlUmVxdWVzdD12b2lkIDA7Y29uc3QgaT1uKDU3MjM0KSxvPW4oNTE1OTgpLGE9cihuKDYyMTAwKSk7dC5MaXN0c0NyZWF0ZVJlcXVlc3Q9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgbiBvZiBlLmxpc3RzKWkuUmVjaXBpZW50TGlzdC5lbmNvZGUobix0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4hMD09PWUuaXNQcmVwb3B1bGF0aW9uJiZ0LnVpbnQzMigxNikuYm9vbChlLmlzUHJlcG9wdWxhdGlvbiksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXtsaXN0czpbXSxpc1ByZXBvcHVsYXRpb246ITF9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLmxpc3RzLnB1c2goaS5SZWNpcGllbnRMaXN0LmRlY29kZShuLG4udWludDMyKCkpKTticmVhaztjYXNlIDI6by5pc1ByZXBvcHVsYXRpb249bi5ib29sKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtsaXN0czpbXSxpc1ByZXBvcHVsYXRpb246ITF9O3JldHVybiB0Lmxpc3RzPWUubGlzdHM/Lm1hcCgoZT0+aS5SZWNpcGllbnRMaXN0LmZyb21QYXJ0aWFsKGUpKSl8fFtdLHQuaXNQcmVwb3B1bGF0aW9uPWUuaXNQcmVwb3B1bGF0aW9uPz8hMSx0fX0sdC5MaXN0c0NyZWF0ZUluZ3Jlc3NHYXRld2F5UmVxdWVzdD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO2Zvcihjb25zdCBuIG9mIGUubGlzdHMpaS5SZWNpcGllbnRMaXN0LmVuY29kZShuLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiEwPT09ZS5pc1ByZXBvcHVsYXRpb24mJnQudWludDMyKDE2KS5ib29sKGUuaXNQcmVwb3B1bGF0aW9uKSx2b2lkIDAhPT1lLnVzZXJJZCYmby5VVUlELmVuY29kZShlLnVzZXJJZCx0LnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IHM9e2xpc3RzOltdLGlzUHJlcG9wdWxhdGlvbjohMSx1c2VySWQ6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6cy5saXN0cy5wdXNoKGkuUmVjaXBpZW50TGlzdC5kZWNvZGUobixuLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAyOnMuaXNQcmVwb3B1bGF0aW9uPW4uYm9vbCgpO2JyZWFrO2Nhc2UgMzpzLnVzZXJJZD1vLlVVSUQuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBzfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtsaXN0czpbXSxpc1ByZXBvcHVsYXRpb246ITEsdXNlcklkOnZvaWQgMH07cmV0dXJuIHQubGlzdHM9ZS5saXN0cz8ubWFwKChlPT5pLlJlY2lwaWVudExpc3QuZnJvbVBhcnRpYWwoZSkpKXx8W10sdC5pc1ByZXBvcHVsYXRpb249ZS5pc1ByZXBvcHVsYXRpb24/PyExLHQudXNlcklkPXZvaWQgMCE9PWUudXNlcklkJiZudWxsIT09ZS51c2VySWQ/by5VVUlELmZyb21QYXJ0aWFsKGUudXNlcklkKTp2b2lkIDAsdH19LHQuTGlzdHNDcmVhdGVSZXNwb25zZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO2Zvcihjb25zdCBuIG9mIGUubGlzdHMpaS5SZWNpcGllbnRMaXN0LmVuY29kZShuLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiAwIT09ZS5lcnJvclR5cGUmJnQudWludDMyKDE2KS5pbnQzMihlLmVycm9yVHlwZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXtsaXN0czpbXSxlcnJvclR5cGU6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8ubGlzdHMucHVzaChpLlJlY2lwaWVudExpc3QuZGVjb2RlKG4sbi51aW50MzIoKSkpO2JyZWFrO2Nhc2UgMjpvLmVycm9yVHlwZT1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtsaXN0czpbXSxlcnJvclR5cGU6MH07cmV0dXJuIHQubGlzdHM9ZS5saXN0cz8ubWFwKChlPT5pLlJlY2lwaWVudExpc3QuZnJvbVBhcnRpYWwoZSkpKXx8W10sdC5lcnJvclR5cGU9ZS5lcnJvclR5cGU/PzAsdH19LHQuTGlzdHNDcmVhdGVJbmdyZXNzR2F0ZXdheVJlc3BvbnNlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7Zm9yKGNvbnN0IG4gb2YgZS5saXN0cylpLlJlY2lwaWVudExpc3QuZW5jb2RlKG4sdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIDAhPT1lLmVycm9yVHlwZSYmdC51aW50MzIoMTYpLmludDMyKGUuZXJyb3JUeXBlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e2xpc3RzOltdLGVycm9yVHlwZTowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5saXN0cy5wdXNoKGkuUmVjaXBpZW50TGlzdC5kZWNvZGUobixuLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAyOm8uZXJyb3JUeXBlPW4uaW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2xpc3RzOltdLGVycm9yVHlwZTowfTtyZXR1cm4gdC5saXN0cz1lLmxpc3RzPy5tYXAoKGU9PmkuUmVjaXBpZW50TGlzdC5mcm9tUGFydGlhbChlKSkpfHxbXSx0LmVycm9yVHlwZT1lLmVycm9yVHlwZT8/MCx0fX19LDI3MTYwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lkxpc3RzRGVsZXRlSW5ncmVzc0dhdGV3YXlSZXNwb25zZT10Lkxpc3RzRGVsZXRlUmVzcG9uc2U9dC5MaXN0c0RlbGV0ZUluZ3Jlc3NHYXRld2F5UmVxdWVzdD10Lkxpc3RzRGVsZXRlUmVxdWVzdD12b2lkIDA7Y29uc3QgaT1uKDUxNTk4KSxvPXIobig2MjEwMCkpO3QuTGlzdHNEZWxldGVSZXF1ZXN0PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7Zm9yKGNvbnN0IG4gb2YgZS5saXN0SWRzKWkuVVVJRC5lbmNvZGUobix0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBhPXtsaXN0SWRzOltdfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/YS5saXN0SWRzLnB1c2goaS5VVUlELmRlY29kZShuLG4udWludDMyKCkpKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2xpc3RJZHM6W119O3JldHVybiB0Lmxpc3RJZHM9ZS5saXN0SWRzPy5tYXAoKGU9PmkuVVVJRC5mcm9tUGFydGlhbChlKSkpfHxbXSx0fX0sdC5MaXN0c0RlbGV0ZUluZ3Jlc3NHYXRld2F5UmVxdWVzdD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO2Zvcihjb25zdCBuIG9mIGUubGlzdElkcylpLlVVSUQuZW5jb2RlKG4sdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIHZvaWQgMCE9PWUudXNlcklkJiZpLlVVSUQuZW5jb2RlKGUudXNlcklkLHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgYT17bGlzdElkczpbXSx1c2VySWQ6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS5saXN0SWRzLnB1c2goaS5VVUlELmRlY29kZShuLG4udWludDMyKCkpKTticmVhaztjYXNlIDI6YS51c2VySWQ9aS5VVUlELmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17bGlzdElkczpbXSx1c2VySWQ6dm9pZCAwfTtyZXR1cm4gdC5saXN0SWRzPWUubGlzdElkcz8ubWFwKChlPT5pLlVVSUQuZnJvbVBhcnRpYWwoZSkpKXx8W10sdC51c2VySWQ9dm9pZCAwIT09ZS51c2VySWQmJm51bGwhPT1lLnVzZXJJZD9pLlVVSUQuZnJvbVBhcnRpYWwoZS51c2VySWQpOnZvaWQgMCx0fX0sdC5MaXN0c0RlbGV0ZVJlc3BvbnNlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7Zm9yKGNvbnN0IG4gb2YgZS5saXN0SWRzKWkuVVVJRC5lbmNvZGUobix0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gMCE9PWUuZXJyb3JUeXBlJiZ0LnVpbnQzMigxNikuaW50MzIoZS5lcnJvclR5cGUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgYT17bGlzdElkczpbXSxlcnJvclR5cGU6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmEubGlzdElkcy5wdXNoKGkuVVVJRC5kZWNvZGUobixuLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAyOmEuZXJyb3JUeXBlPW4uaW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2xpc3RJZHM6W10sZXJyb3JUeXBlOjB9O3JldHVybiB0Lmxpc3RJZHM9ZS5saXN0SWRzPy5tYXAoKGU9PmkuVVVJRC5mcm9tUGFydGlhbChlKSkpfHxbXSx0LmVycm9yVHlwZT1lLmVycm9yVHlwZT8/MCx0fX0sdC5MaXN0c0RlbGV0ZUluZ3Jlc3NHYXRld2F5UmVzcG9uc2U9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgbiBvZiBlLmxpc3RJZHMpaS5VVUlELmVuY29kZShuLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiAwIT09ZS5lcnJvclR5cGUmJnQudWludDMyKDE2KS5pbnQzMihlLmVycm9yVHlwZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBhPXtsaXN0SWRzOltdLGVycm9yVHlwZTowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS5saXN0SWRzLnB1c2goaS5VVUlELmRlY29kZShuLG4udWludDMyKCkpKTticmVhaztjYXNlIDI6YS5lcnJvclR5cGU9bi5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17bGlzdElkczpbXSxlcnJvclR5cGU6MH07cmV0dXJuIHQubGlzdElkcz1lLmxpc3RJZHM/Lm1hcCgoZT0+aS5VVUlELmZyb21QYXJ0aWFsKGUpKSl8fFtdLHQuZXJyb3JUeXBlPWUuZXJyb3JUeXBlPz8wLHR9fX0sMjY3NzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5MaXN0c0ZldGNoSW5ncmVzc0dhdGV3YXlSZXNwb25zZT10Lkxpc3RzRmV0Y2hSZXNwb25zZT10Lkxpc3RzRmV0Y2hJbmdyZXNzR2F0ZXdheVJlcXVlc3Q9dC5MaXN0c0ZldGNoUmVxdWVzdD12b2lkIDA7Y29uc3QgaT1uKDU3MjM0KSxvPW4oNTE1OTgpLGE9cihuKDYyMTAwKSk7dC5MaXN0c0ZldGNoUmVxdWVzdD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO2Zvcihjb25zdCBuIG9mIGUubGlzdElkcylvLlVVSUQuZW5jb2RlKG4sdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17bGlzdElkczpbXX07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2kubGlzdElkcy5wdXNoKG8uVVVJRC5kZWNvZGUobixuLnVpbnQzMigpKSk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtsaXN0SWRzOltdfTtyZXR1cm4gdC5saXN0SWRzPWUubGlzdElkcz8ubWFwKChlPT5vLlVVSUQuZnJvbVBhcnRpYWwoZSkpKXx8W10sdH19LHQuTGlzdHNGZXRjaEluZ3Jlc3NHYXRld2F5UmVxdWVzdD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO2Zvcihjb25zdCBuIG9mIGUubGlzdElkcylvLlVVSUQuZW5jb2RlKG4sdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIHZvaWQgMCE9PWUudXNlcklkJiZvLlVVSUQuZW5jb2RlKGUudXNlcklkLHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17bGlzdElkczpbXSx1c2VySWQ6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5saXN0SWRzLnB1c2goby5VVUlELmRlY29kZShuLG4udWludDMyKCkpKTticmVhaztjYXNlIDI6aS51c2VySWQ9by5VVUlELmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17bGlzdElkczpbXSx1c2VySWQ6dm9pZCAwfTtyZXR1cm4gdC5saXN0SWRzPWUubGlzdElkcz8ubWFwKChlPT5vLlVVSUQuZnJvbVBhcnRpYWwoZSkpKXx8W10sdC51c2VySWQ9dm9pZCAwIT09ZS51c2VySWQmJm51bGwhPT1lLnVzZXJJZD9vLlVVSUQuZnJvbVBhcnRpYWwoZS51c2VySWQpOnZvaWQgMCx0fX0sdC5MaXN0c0ZldGNoUmVzcG9uc2U9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgbiBvZiBlLmxpc3RzKWkuUmVjaXBpZW50TGlzdC5lbmNvZGUobix0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4hMD09PWUuaGFzUHJlcG9wdWxhdGVkJiZ0LnVpbnQzMigxNikuYm9vbChlLmhhc1ByZXBvcHVsYXRlZCksMCE9PWUuZXJyb3JUeXBlJiZ0LnVpbnQzMigyNCkuaW50MzIoZS5lcnJvclR5cGUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17bGlzdHM6W10saGFzUHJlcG9wdWxhdGVkOiExLGVycm9yVHlwZTowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5saXN0cy5wdXNoKGkuUmVjaXBpZW50TGlzdC5kZWNvZGUobixuLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAyOm8uaGFzUHJlcG9wdWxhdGVkPW4uYm9vbCgpO2JyZWFrO2Nhc2UgMzpvLmVycm9yVHlwZT1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtsaXN0czpbXSxoYXNQcmVwb3B1bGF0ZWQ6ITEsZXJyb3JUeXBlOjB9O3JldHVybiB0Lmxpc3RzPWUubGlzdHM/Lm1hcCgoZT0+aS5SZWNpcGllbnRMaXN0LmZyb21QYXJ0aWFsKGUpKSl8fFtdLHQuaGFzUHJlcG9wdWxhdGVkPWUuaGFzUHJlcG9wdWxhdGVkPz8hMSx0LmVycm9yVHlwZT1lLmVycm9yVHlwZT8/MCx0fX0sdC5MaXN0c0ZldGNoSW5ncmVzc0dhdGV3YXlSZXNwb25zZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO2Zvcihjb25zdCBuIG9mIGUubGlzdHMpaS5SZWNpcGllbnRMaXN0LmVuY29kZShuLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiEwPT09ZS5oYXNQcmVwb3B1bGF0ZWQmJnQudWludDMyKDE2KS5ib29sKGUuaGFzUHJlcG9wdWxhdGVkKSwwIT09ZS5lcnJvclR5cGUmJnQudWludDMyKDI0KS5pbnQzMihlLmVycm9yVHlwZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXtsaXN0czpbXSxoYXNQcmVwb3B1bGF0ZWQ6ITEsZXJyb3JUeXBlOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLmxpc3RzLnB1c2goaS5SZWNpcGllbnRMaXN0LmRlY29kZShuLG4udWludDMyKCkpKTticmVhaztjYXNlIDI6by5oYXNQcmVwb3B1bGF0ZWQ9bi5ib29sKCk7YnJlYWs7Y2FzZSAzOm8uZXJyb3JUeXBlPW4uaW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2xpc3RzOltdLGhhc1ByZXBvcHVsYXRlZDohMSxlcnJvclR5cGU6MH07cmV0dXJuIHQubGlzdHM9ZS5saXN0cz8ubWFwKChlPT5pLlJlY2lwaWVudExpc3QuZnJvbVBhcnRpYWwoZSkpKXx8W10sdC5oYXNQcmVwb3B1bGF0ZWQ9ZS5oYXNQcmVwb3B1bGF0ZWQ/PyExLHQuZXJyb3JUeXBlPWUuZXJyb3JUeXBlPz8wLHR9fX0sNTcyMzQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuUmVjaXBpZW50TGlzdD10LlJlY2lwaWVudExpc3RJdGVtPXQuUmVjaXBpZW50TGlzdEl0ZW1fUmVjaXBpZW50VHlwZT10Lkxpc3RzRXJyb3JUeXBlPXZvaWQgMDtjb25zdCBpPXIobig0MTU4MykpLG89big1MTU5OCksYT1yKG4oNjIxMDApKTt2YXIgcyxjOyhjPXQuTGlzdHNFcnJvclR5cGV8fCh0Lkxpc3RzRXJyb3JUeXBlPXt9KSlbYy5MSVNUU19FUlJPUl9UWVBFX1VOU0VUPTBdPVwiTElTVFNfRVJST1JfVFlQRV9VTlNFVFwiLGNbYy5MSVNUU19FUlJPUl9UWVBFX01BWF9TQVZFRF9MSVNUX0NPVU5UPTFdPVwiTElTVFNfRVJST1JfVFlQRV9NQVhfU0FWRURfTElTVF9DT1VOVFwiLGNbYy5MSVNUU19FUlJPUl9UWVBFX01BWF9SRUNJUElFTlRfQ09VTlQ9Ml09XCJMSVNUU19FUlJPUl9UWVBFX01BWF9SRUNJUElFTlRfQ09VTlRcIixjW2MuTElTVFNfRVJST1JfVFlQRV9OQU1FX0lOX1VTRT0zXT1cIkxJU1RTX0VSUk9SX1RZUEVfTkFNRV9JTl9VU0VcIixjW2MuTElTVFNfRVJST1JfVFlQRV9OT1RfRk9VTkQ9NF09XCJMSVNUU19FUlJPUl9UWVBFX05PVF9GT1VORFwiLGNbYy5MSVNUU19FUlJPUl9UWVBFX0lOVEVSTkFMPTVdPVwiTElTVFNfRVJST1JfVFlQRV9JTlRFUk5BTFwiLGNbYy5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKHM9dC5SZWNpcGllbnRMaXN0SXRlbV9SZWNpcGllbnRUeXBlfHwodC5SZWNpcGllbnRMaXN0SXRlbV9SZWNpcGllbnRUeXBlPXt9KSlbcy5SRUNJUElFTlRfVFlQRV9VTlNFVD0wXT1cIlJFQ0lQSUVOVF9UWVBFX1VOU0VUXCIsc1tzLlJFQ0lQSUVOVF9UWVBFX1NOQVBDSEFUVEVSPTFdPVwiUkVDSVBJRU5UX1RZUEVfU05BUENIQVRURVJcIixzW3MuUkVDSVBJRU5UX1RZUEVfR1JPVVA9Ml09XCJSRUNJUElFTlRfVFlQRV9HUk9VUFwiLHNbcy5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsdC5SZWNpcGllbnRMaXN0SXRlbT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLnJlY2lwaWVudElkJiZvLlVVSUQuZW5jb2RlKGUucmVjaXBpZW50SWQsdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksMCE9PWUucmVjaXBpZW50VHlwZSYmdC51aW50MzIoMTYpLmludDMyKGUucmVjaXBpZW50VHlwZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtyZWNpcGllbnRJZDp2b2lkIDAscmVjaXBpZW50VHlwZTowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5yZWNpcGllbnRJZD1vLlVVSUQuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOmkucmVjaXBpZW50VHlwZT1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtyZWNpcGllbnRJZDp2b2lkIDAscmVjaXBpZW50VHlwZTowfTtyZXR1cm4gdC5yZWNpcGllbnRJZD12b2lkIDAhPT1lLnJlY2lwaWVudElkJiZudWxsIT09ZS5yZWNpcGllbnRJZD9vLlVVSUQuZnJvbVBhcnRpYWwoZS5yZWNpcGllbnRJZCk6dm9pZCAwLHQucmVjaXBpZW50VHlwZT1lLnJlY2lwaWVudFR5cGU/PzAsdH19LHQuUmVjaXBpZW50TGlzdD17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3ZvaWQgMCE9PWUubGlzdElkJiZvLlVVSUQuZW5jb2RlKGUubGlzdElkLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO2Zvcihjb25zdCByIG9mIGUubGlzdEl0ZW1zKXQuUmVjaXBpZW50TGlzdEl0ZW0uZW5jb2RlKHIsbi51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuXCJcIiE9PWUubmFtZSYmbi51aW50MzIoMjYpLnN0cmluZyhlLm5hbWUpLFwiMFwiIT09ZS5jcmVhdGlvblRpbWUmJm4udWludDMyKDMyKS5pbnQ2NChlLmNyZWF0aW9uVGltZSksMCE9PWUucmFuayYmbi51aW50MzIoNDApLmludDMyKGUucmFuayksXCJcIiE9PWUuZGVzY3JpcHRpdmVUaXRsZSYmbi51aW50MzIoNTApLnN0cmluZyhlLmRlc2NyaXB0aXZlVGl0bGUpLHZvaWQgMCE9PWUuZ3JvdXBTdG9yeUlkJiZvLlVVSUQuZW5jb2RlKGUuZ3JvdXBTdG9yeUlkLG4udWludDMyKDU4KS5mb3JrKCkpLmxkZWxpbSgpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgcz17bGlzdElkOnZvaWQgMCxsaXN0SXRlbXM6W10sbmFtZTpcIlwiLGNyZWF0aW9uVGltZTpcIjBcIixyYW5rOjAsZGVzY3JpcHRpdmVUaXRsZTpcIlwiLGdyb3VwU3RvcnlJZDp2b2lkIDB9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpzLmxpc3RJZD1vLlVVSUQuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOnMubGlzdEl0ZW1zLnB1c2godC5SZWNpcGllbnRMaXN0SXRlbS5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAzOnMubmFtZT1yLnN0cmluZygpO2JyZWFrO2Nhc2UgNDpzLmNyZWF0aW9uVGltZT1yLmludDY0KCkudG9TdHJpbmcoKTticmVhaztjYXNlIDU6cy5yYW5rPXIuaW50MzIoKTticmVhaztjYXNlIDY6cy5kZXNjcmlwdGl2ZVRpdGxlPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSA3OnMuZ3JvdXBTdG9yeUlkPW8uVVVJRC5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIHN9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e2xpc3RJZDp2b2lkIDAsbGlzdEl0ZW1zOltdLG5hbWU6XCJcIixjcmVhdGlvblRpbWU6XCIwXCIscmFuazowLGRlc2NyaXB0aXZlVGl0bGU6XCJcIixncm91cFN0b3J5SWQ6dm9pZCAwfTtyZXR1cm4gbi5saXN0SWQ9dm9pZCAwIT09ZS5saXN0SWQmJm51bGwhPT1lLmxpc3RJZD9vLlVVSUQuZnJvbVBhcnRpYWwoZS5saXN0SWQpOnZvaWQgMCxuLmxpc3RJdGVtcz1lLmxpc3RJdGVtcz8ubWFwKChlPT50LlJlY2lwaWVudExpc3RJdGVtLmZyb21QYXJ0aWFsKGUpKSl8fFtdLG4ubmFtZT1lLm5hbWU/P1wiXCIsbi5jcmVhdGlvblRpbWU9ZS5jcmVhdGlvblRpbWU/P1wiMFwiLG4ucmFuaz1lLnJhbms/PzAsbi5kZXNjcmlwdGl2ZVRpdGxlPWUuZGVzY3JpcHRpdmVUaXRsZT8/XCJcIixuLmdyb3VwU3RvcnlJZD12b2lkIDAhPT1lLmdyb3VwU3RvcnlJZCYmbnVsbCE9PWUuZ3JvdXBTdG9yeUlkP28uVVVJRC5mcm9tUGFydGlhbChlLmdyb3VwU3RvcnlJZCk6dm9pZCAwLG59fSxhLmRlZmF1bHQudXRpbC5Mb25nIT09aS5kZWZhdWx0JiYoYS5kZWZhdWx0LnV0aWwuTG9uZz1pLmRlZmF1bHQsYS5kZWZhdWx0LmNvbmZpZ3VyZSgpKX0sOTU1Nzc6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTGlzdENyZWF0ZVN0b3J5SW5ncmVzc0dhdGV3YXlSZXNwb25zZT10Lkxpc3RDcmVhdGVTdG9yeUluZ3Jlc3NHYXRld2F5UmVxdWVzdD10Lkxpc3RDcmVhdGVTdG9yeVJlc3BvbnNlPXQuTGlzdENyZWF0ZVN0b3J5UmVxdWVzdD12b2lkIDA7Y29uc3QgaT1uKDUxNTk4KSxvPXIobig2MjEwMCkpO3QuTGlzdENyZWF0ZVN0b3J5UmVxdWVzdD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLmxpc3RJZCYmaS5VVUlELmVuY29kZShlLmxpc3RJZCx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGE9e2xpc3RJZDp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9hLmxpc3RJZD1pLlVVSUQuZGVjb2RlKG4sbi51aW50MzIoKSk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtsaXN0SWQ6dm9pZCAwfTtyZXR1cm4gdC5saXN0SWQ9dm9pZCAwIT09ZS5saXN0SWQmJm51bGwhPT1lLmxpc3RJZD9pLlVVSUQuZnJvbVBhcnRpYWwoZS5saXN0SWQpOnZvaWQgMCx0fX0sdC5MaXN0Q3JlYXRlU3RvcnlSZXNwb25zZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLmdyb3VwU3RvcnlJZCYmaS5VVUlELmVuY29kZShlLmdyb3VwU3RvcnlJZCx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmxpc3RJZCYmaS5VVUlELmVuY29kZShlLmxpc3RJZCx0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS5lcnJvclR5cGUmJnQudWludDMyKDI0KS5pbnQzMihlLmVycm9yVHlwZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBhPXtncm91cFN0b3J5SWQ6dm9pZCAwLGxpc3RJZDp2b2lkIDAsZXJyb3JUeXBlOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLmdyb3VwU3RvcnlJZD1pLlVVSUQuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOmEubGlzdElkPWkuVVVJRC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDM6YS5lcnJvclR5cGU9bi5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17Z3JvdXBTdG9yeUlkOnZvaWQgMCxsaXN0SWQ6dm9pZCAwLGVycm9yVHlwZTowfTtyZXR1cm4gdC5ncm91cFN0b3J5SWQ9dm9pZCAwIT09ZS5ncm91cFN0b3J5SWQmJm51bGwhPT1lLmdyb3VwU3RvcnlJZD9pLlVVSUQuZnJvbVBhcnRpYWwoZS5ncm91cFN0b3J5SWQpOnZvaWQgMCx0Lmxpc3RJZD12b2lkIDAhPT1lLmxpc3RJZCYmbnVsbCE9PWUubGlzdElkP2kuVVVJRC5mcm9tUGFydGlhbChlLmxpc3RJZCk6dm9pZCAwLHQuZXJyb3JUeXBlPWUuZXJyb3JUeXBlPz8wLHR9fSx0Lkxpc3RDcmVhdGVTdG9yeUluZ3Jlc3NHYXRld2F5UmVxdWVzdD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLmxpc3RJZCYmaS5VVUlELmVuY29kZShlLmxpc3RJZCx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnVzZXJJZCYmaS5VVUlELmVuY29kZShlLnVzZXJJZCx0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGE9e2xpc3RJZDp2b2lkIDAsdXNlcklkOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmEubGlzdElkPWkuVVVJRC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDI6YS51c2VySWQ9aS5VVUlELmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17bGlzdElkOnZvaWQgMCx1c2VySWQ6dm9pZCAwfTtyZXR1cm4gdC5saXN0SWQ9dm9pZCAwIT09ZS5saXN0SWQmJm51bGwhPT1lLmxpc3RJZD9pLlVVSUQuZnJvbVBhcnRpYWwoZS5saXN0SWQpOnZvaWQgMCx0LnVzZXJJZD12b2lkIDAhPT1lLnVzZXJJZCYmbnVsbCE9PWUudXNlcklkP2kuVVVJRC5mcm9tUGFydGlhbChlLnVzZXJJZCk6dm9pZCAwLHR9fSx0Lkxpc3RDcmVhdGVTdG9yeUluZ3Jlc3NHYXRld2F5UmVzcG9uc2U9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5ncm91cFN0b3J5SWQmJmkuVVVJRC5lbmNvZGUoZS5ncm91cFN0b3J5SWQsdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5saXN0SWQmJmkuVVVJRC5lbmNvZGUoZS5saXN0SWQsdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksMCE9PWUuZXJyb3JUeXBlJiZ0LnVpbnQzMigyNCkuaW50MzIoZS5lcnJvclR5cGUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgYT17Z3JvdXBTdG9yeUlkOnZvaWQgMCxsaXN0SWQ6dm9pZCAwLGVycm9yVHlwZTowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS5ncm91cFN0b3J5SWQ9aS5VVUlELmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMjphLmxpc3RJZD1pLlVVSUQuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAzOmEuZXJyb3JUeXBlPW4uaW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2dyb3VwU3RvcnlJZDp2b2lkIDAsbGlzdElkOnZvaWQgMCxlcnJvclR5cGU6MH07cmV0dXJuIHQuZ3JvdXBTdG9yeUlkPXZvaWQgMCE9PWUuZ3JvdXBTdG9yeUlkJiZudWxsIT09ZS5ncm91cFN0b3J5SWQ/aS5VVUlELmZyb21QYXJ0aWFsKGUuZ3JvdXBTdG9yeUlkKTp2b2lkIDAsdC5saXN0SWQ9dm9pZCAwIT09ZS5saXN0SWQmJm51bGwhPT1lLmxpc3RJZD9pLlVVSUQuZnJvbVBhcnRpYWwoZS5saXN0SWQpOnZvaWQgMCx0LmVycm9yVHlwZT1lLmVycm9yVHlwZT8/MCx0fX19LDY2MTA4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lkxpc3RzVXBkYXRlSW5ncmVzc0dhdGV3YXlSZXNwb25zZT10Lkxpc3RzVXBkYXRlSW5ncmVzc0dhdGV3YXlSZXF1ZXN0PXQuTGlzdHNVcGRhdGVSZXNwb25zZT10Lkxpc3RzVXBkYXRlUmVxdWVzdD12b2lkIDA7Y29uc3QgaT1uKDU3MjM0KSxvPW4oNTE1OTgpLGE9cihuKDYyMTAwKSk7dC5MaXN0c1VwZGF0ZVJlcXVlc3Q9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgbiBvZiBlLmxpc3RzKWkuUmVjaXBpZW50TGlzdC5lbmNvZGUobix0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXtsaXN0czpbXX07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP28ubGlzdHMucHVzaChpLlJlY2lwaWVudExpc3QuZGVjb2RlKG4sbi51aW50MzIoKSkpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17bGlzdHM6W119O3JldHVybiB0Lmxpc3RzPWUubGlzdHM/Lm1hcCgoZT0+aS5SZWNpcGllbnRMaXN0LmZyb21QYXJ0aWFsKGUpKSl8fFtdLHR9fSx0Lkxpc3RzVXBkYXRlUmVzcG9uc2U9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgbiBvZiBlLmxpc3RzKWkuUmVjaXBpZW50TGlzdC5lbmNvZGUobix0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gMCE9PWUuZXJyb3JUeXBlJiZ0LnVpbnQzMigxNikuaW50MzIoZS5lcnJvclR5cGUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17bGlzdHM6W10sZXJyb3JUeXBlOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLmxpc3RzLnB1c2goaS5SZWNpcGllbnRMaXN0LmRlY29kZShuLG4udWludDMyKCkpKTticmVhaztjYXNlIDI6by5lcnJvclR5cGU9bi5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17bGlzdHM6W10sZXJyb3JUeXBlOjB9O3JldHVybiB0Lmxpc3RzPWUubGlzdHM/Lm1hcCgoZT0+aS5SZWNpcGllbnRMaXN0LmZyb21QYXJ0aWFsKGUpKSl8fFtdLHQuZXJyb3JUeXBlPWUuZXJyb3JUeXBlPz8wLHR9fSx0Lkxpc3RzVXBkYXRlSW5ncmVzc0dhdGV3YXlSZXF1ZXN0PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7Zm9yKGNvbnN0IG4gb2YgZS5saXN0cylpLlJlY2lwaWVudExpc3QuZW5jb2RlKG4sdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIHZvaWQgMCE9PWUudXNlcklkJiZvLlVVSUQuZW5jb2RlKGUudXNlcklkLHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgcz17bGlzdHM6W10sdXNlcklkOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOnMubGlzdHMucHVzaChpLlJlY2lwaWVudExpc3QuZGVjb2RlKG4sbi51aW50MzIoKSkpO2JyZWFrO2Nhc2UgMjpzLnVzZXJJZD1vLlVVSUQuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBzfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtsaXN0czpbXSx1c2VySWQ6dm9pZCAwfTtyZXR1cm4gdC5saXN0cz1lLmxpc3RzPy5tYXAoKGU9PmkuUmVjaXBpZW50TGlzdC5mcm9tUGFydGlhbChlKSkpfHxbXSx0LnVzZXJJZD12b2lkIDAhPT1lLnVzZXJJZCYmbnVsbCE9PWUudXNlcklkP28uVVVJRC5mcm9tUGFydGlhbChlLnVzZXJJZCk6dm9pZCAwLHR9fSx0Lkxpc3RzVXBkYXRlSW5ncmVzc0dhdGV3YXlSZXNwb25zZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO2Zvcihjb25zdCBuIG9mIGUubGlzdHMpaS5SZWNpcGllbnRMaXN0LmVuY29kZShuLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiAwIT09ZS5lcnJvclR5cGUmJnQudWludDMyKDE2KS5pbnQzMihlLmVycm9yVHlwZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXtsaXN0czpbXSxlcnJvclR5cGU6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8ubGlzdHMucHVzaChpLlJlY2lwaWVudExpc3QuZGVjb2RlKG4sbi51aW50MzIoKSkpO2JyZWFrO2Nhc2UgMjpvLmVycm9yVHlwZT1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtsaXN0czpbXSxlcnJvclR5cGU6MH07cmV0dXJuIHQubGlzdHM9ZS5saXN0cz8ubWFwKChlPT5pLlJlY2lwaWVudExpc3QuZnJvbVBhcnRpYWwoZSkpKXx8W10sdC5lcnJvclR5cGU9ZS5lcnJvclR5cGU/PzAsdH19fSwxMTE1NzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5BZFBsYWNlbWVudF9UaW1lQmFzZWRBZFBsYWNlbWVudHM9dC5BZFBsYWNlbWVudF9BZFBsYWNlbWVudFN0cmF0ZWd5PXQuQWRQbGFjZW1lbnRfVGltZUJhc2VkQWQ9dC5BZFBsYWNlbWVudD12b2lkIDA7Y29uc3QgaT1yKG4oNjIxMDApKTt0LkFkUGxhY2VtZW50PXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUudGltZUJhc2VkQWRQbGFjZW1lbnRzJiZ0LkFkUGxhY2VtZW50X1RpbWVCYXNlZEFkUGxhY2VtZW50cy5lbmNvZGUoZS50aW1lQmFzZWRBZFBsYWNlbWVudHMsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBvPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBhPXt0aW1lQmFzZWRBZFBsYWNlbWVudHM6dm9pZCAwfTtmb3IoO3IucG9zPG87KXtjb25zdCBlPXIudWludDMyKCk7ZT4+PjM9PTE/YS50aW1lQmFzZWRBZFBsYWNlbWVudHM9dC5BZFBsYWNlbWVudF9UaW1lQmFzZWRBZFBsYWNlbWVudHMuZGVjb2RlKHIsci51aW50MzIoKSk6ci5za2lwVHlwZSg3JmUpfXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXt0aW1lQmFzZWRBZFBsYWNlbWVudHM6dm9pZCAwfTtyZXR1cm4gbi50aW1lQmFzZWRBZFBsYWNlbWVudHM9dm9pZCAwIT09ZS50aW1lQmFzZWRBZFBsYWNlbWVudHMmJm51bGwhPT1lLnRpbWVCYXNlZEFkUGxhY2VtZW50cz90LkFkUGxhY2VtZW50X1RpbWVCYXNlZEFkUGxhY2VtZW50cy5mcm9tUGFydGlhbChlLnRpbWVCYXNlZEFkUGxhY2VtZW50cyk6dm9pZCAwLG59fSx0LkFkUGxhY2VtZW50X1RpbWVCYXNlZEFkPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLmFkUGxhY2VtZW50VGltZVNlYyYmdC51aW50MzIoMTMpLmZsb2F0KGUuYWRQbGFjZW1lbnRUaW1lU2VjKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e2FkUGxhY2VtZW50VGltZVNlYzowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/by5hZFBsYWNlbWVudFRpbWVTZWM9bi5mbG9hdCgpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17YWRQbGFjZW1lbnRUaW1lU2VjOjB9O3JldHVybiB0LmFkUGxhY2VtZW50VGltZVNlYz1lLmFkUGxhY2VtZW50VGltZVNlYz8/MCx0fX0sdC5BZFBsYWNlbWVudF9BZFBsYWNlbWVudFN0cmF0ZWd5PXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7XCJcIiE9PWUuc3RyYXRlZ3kmJm4udWludDMyKDEwKS5zdHJpbmcoZS5zdHJhdGVneSk7Zm9yKGNvbnN0IHIgb2YgZS50aW1lQmFzZWRBZHMpdC5BZFBsYWNlbWVudF9UaW1lQmFzZWRBZC5lbmNvZGUocixuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBvPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBhPXtzdHJhdGVneTpcIlwiLHRpbWVCYXNlZEFkczpbXX07Zm9yKDtyLnBvczxvOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmEuc3RyYXRlZ3k9ci5zdHJpbmcoKTticmVhaztjYXNlIDI6YS50aW1lQmFzZWRBZHMucHVzaCh0LkFkUGxhY2VtZW50X1RpbWVCYXNlZEFkLmRlY29kZShyLHIudWludDMyKCkpKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e3N0cmF0ZWd5OlwiXCIsdGltZUJhc2VkQWRzOltdfTtyZXR1cm4gbi5zdHJhdGVneT1lLnN0cmF0ZWd5Pz9cIlwiLG4udGltZUJhc2VkQWRzPWUudGltZUJhc2VkQWRzPy5tYXAoKGU9PnQuQWRQbGFjZW1lbnRfVGltZUJhc2VkQWQuZnJvbVBhcnRpYWwoZSkpKXx8W10sbn19LHQuQWRQbGFjZW1lbnRfVGltZUJhc2VkQWRQbGFjZW1lbnRzPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7Zm9yKGNvbnN0IHIgb2YgZS5hZFBsYWNlbWVudFN0cmF0ZWd5KXQuQWRQbGFjZW1lbnRfQWRQbGFjZW1lbnRTdHJhdGVneS5lbmNvZGUocixuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBvPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBhPXthZFBsYWNlbWVudFN0cmF0ZWd5OltdfTtmb3IoO3IucG9zPG87KXtjb25zdCBlPXIudWludDMyKCk7ZT4+PjM9PTE/YS5hZFBsYWNlbWVudFN0cmF0ZWd5LnB1c2godC5BZFBsYWNlbWVudF9BZFBsYWNlbWVudFN0cmF0ZWd5LmRlY29kZShyLHIudWludDMyKCkpKTpyLnNraXBUeXBlKDcmZSl9cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e2FkUGxhY2VtZW50U3RyYXRlZ3k6W119O3JldHVybiBuLmFkUGxhY2VtZW50U3RyYXRlZ3k9ZS5hZFBsYWNlbWVudFN0cmF0ZWd5Py5tYXAoKGU9PnQuQWRQbGFjZW1lbnRfQWRQbGFjZW1lbnRTdHJhdGVneS5mcm9tUGFydGlhbChlKSkpfHxbXSxufX19LDQ1NDI0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkFkc1RyYWNraW5nPXZvaWQgMDtjb25zdCBpPW4oMzc1NzUpLG89cihuKDYyMTAwKSk7dC5BZHNUcmFja2luZz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLnNrQWROZXR3b3JrQXR0cmlidXRpb24mJmkuU0tBZE5ldHdvcmtBdHRyaWJ1dGlvbi5lbmNvZGUoZS5za0FkTmV0d29ya0F0dHJpYnV0aW9uLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLFwiXCIhPT1lLmlvc0FwcElkJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuaW9zQXBwSWQpLFwiXCIhPT1lLmFkSWQmJnQudWludDMyKDI2KS5zdHJpbmcoZS5hZElkKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGE9e3NrQWROZXR3b3JrQXR0cmlidXRpb246dm9pZCAwLGlvc0FwcElkOlwiXCIsYWRJZDpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS5za0FkTmV0d29ya0F0dHJpYnV0aW9uPWkuU0tBZE5ldHdvcmtBdHRyaWJ1dGlvbi5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDI6YS5pb3NBcHBJZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMzphLmFkSWQ9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3NrQWROZXR3b3JrQXR0cmlidXRpb246dm9pZCAwLGlvc0FwcElkOlwiXCIsYWRJZDpcIlwifTtyZXR1cm4gdC5za0FkTmV0d29ya0F0dHJpYnV0aW9uPXZvaWQgMCE9PWUuc2tBZE5ldHdvcmtBdHRyaWJ1dGlvbiYmbnVsbCE9PWUuc2tBZE5ldHdvcmtBdHRyaWJ1dGlvbj9pLlNLQWROZXR3b3JrQXR0cmlidXRpb24uZnJvbVBhcnRpYWwoZS5za0FkTmV0d29ya0F0dHJpYnV0aW9uKTp2b2lkIDAsdC5pb3NBcHBJZD1lLmlvc0FwcElkPz9cIlwiLHQuYWRJZD1lLmFkSWQ/P1wiXCIsdH19fSw0ODgzODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5BcHBEZWVwTGlua19XZWJGYWxsYmFjaz10LkFwcERlZXBMaW5rPXZvaWQgMDtjb25zdCBpPW4oNjE1NTIpLG89cihuKDYyMTAwKSk7dC5BcHBEZWVwTGluaz17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnVyaSYmbi51aW50MzIoMTApLnN0cmluZyhlLnVyaSksXCJhcHBJbnN0YWxsXCI9PT1lLmZhbGxiYWNrPy4kY2FzZSYmaS5BcHBJbnN0YWxsLmVuY29kZShlLmZhbGxiYWNrLmFwcEluc3RhbGwsbi51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCksXCJ3ZWJGYWxsYmFja1wiPT09ZS5mYWxsYmFjaz8uJGNhc2UmJnQuQXBwRGVlcExpbmtfV2ViRmFsbGJhY2suZW5jb2RlKGUuZmFsbGJhY2sud2ViRmFsbGJhY2ssbi51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKCksXCJcIiE9PWUuaWQmJm4udWludDMyKDUwKS5zdHJpbmcoZS5pZCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBhPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBzPXt1cmk6XCJcIixmYWxsYmFjazp2b2lkIDAsaWQ6XCJcIn07Zm9yKDtyLnBvczxhOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOnMudXJpPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSA0OnMuZmFsbGJhY2s9eyRjYXNlOlwiYXBwSW5zdGFsbFwiLGFwcEluc3RhbGw6aS5BcHBJbnN0YWxsLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDU6cy5mYWxsYmFjaz17JGNhc2U6XCJ3ZWJGYWxsYmFja1wiLHdlYkZhbGxiYWNrOnQuQXBwRGVlcExpbmtfV2ViRmFsbGJhY2suZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgNjpzLmlkPXIuc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBzfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXt1cmk6XCJcIixmYWxsYmFjazp2b2lkIDAsaWQ6XCJcIn07cmV0dXJuIG4udXJpPWUudXJpPz9cIlwiLFwiYXBwSW5zdGFsbFwiPT09ZS5mYWxsYmFjaz8uJGNhc2UmJnZvaWQgMCE9PWUuZmFsbGJhY2s/LmFwcEluc3RhbGwmJm51bGwhPT1lLmZhbGxiYWNrPy5hcHBJbnN0YWxsJiYobi5mYWxsYmFjaz17JGNhc2U6XCJhcHBJbnN0YWxsXCIsYXBwSW5zdGFsbDppLkFwcEluc3RhbGwuZnJvbVBhcnRpYWwoZS5mYWxsYmFjay5hcHBJbnN0YWxsKX0pLFwid2ViRmFsbGJhY2tcIj09PWUuZmFsbGJhY2s/LiRjYXNlJiZ2b2lkIDAhPT1lLmZhbGxiYWNrPy53ZWJGYWxsYmFjayYmbnVsbCE9PWUuZmFsbGJhY2s/LndlYkZhbGxiYWNrJiYobi5mYWxsYmFjaz17JGNhc2U6XCJ3ZWJGYWxsYmFja1wiLHdlYkZhbGxiYWNrOnQuQXBwRGVlcExpbmtfV2ViRmFsbGJhY2suZnJvbVBhcnRpYWwoZS5mYWxsYmFjay53ZWJGYWxsYmFjayl9KSxuLmlkPWUuaWQ/P1wiXCIsbn19LHQuQXBwRGVlcExpbmtfV2ViRmFsbGJhY2s9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS51cmwmJnQudWludDMyKDEwKS5zdHJpbmcoZS51cmwpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17dXJsOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLnVybD1uLnN0cmluZygpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dXJsOlwiXCJ9O3JldHVybiB0LnVybD1lLnVybD8/XCJcIix0fX19LDYxNTUyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkFwcEluc3RhbGxfQXBwSW5mb19TdG9yZVBhcmFtc0VudHJ5PXQuQXBwSW5zdGFsbF9BcHBJbmZvPXQuQXBwSW5zdGFsbD12b2lkIDA7Y29uc3QgaT1yKG4oNjIxMDApKTtmdW5jdGlvbiBvKCl7cmV0dXJue2FwcElkOlwiXCIsc3RvcmVQYXJhbXM6e30sYXBwSWNvbjpcIlwiLGNvbnRlbnRPYmplY3Q6bmV3IFVpbnQ4QXJyYXl9fXQuQXBwSW5zdGFsbD17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmFwcFRpdGxlJiZuLnVpbnQzMigxMCkuc3RyaW5nKGUuYXBwVGl0bGUpLHZvaWQgMCE9PWUuaW9zSW5mbyYmdC5BcHBJbnN0YWxsX0FwcEluZm8uZW5jb2RlKGUuaW9zSW5mbyxuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmFuZHJvaWRJbmZvJiZ0LkFwcEluc3RhbGxfQXBwSW5mby5lbmNvZGUoZS5hbmRyb2lkSW5mbyxuLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSxcIlwiIT09ZS5pZCYmbi51aW50MzIoMzQpLnN0cmluZyhlLmlkKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IG89dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGE9e2FwcFRpdGxlOlwiXCIsaW9zSW5mbzp2b2lkIDAsYW5kcm9pZEluZm86dm9pZCAwLGlkOlwiXCJ9O2Zvcig7ci5wb3M8bzspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLmFwcFRpdGxlPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmEuaW9zSW5mbz10LkFwcEluc3RhbGxfQXBwSW5mby5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDM6YS5hbmRyb2lkSW5mbz10LkFwcEluc3RhbGxfQXBwSW5mby5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDQ6YS5pZD1yLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17YXBwVGl0bGU6XCJcIixpb3NJbmZvOnZvaWQgMCxhbmRyb2lkSW5mbzp2b2lkIDAsaWQ6XCJcIn07cmV0dXJuIG4uYXBwVGl0bGU9ZS5hcHBUaXRsZT8/XCJcIixuLmlvc0luZm89dm9pZCAwIT09ZS5pb3NJbmZvJiZudWxsIT09ZS5pb3NJbmZvP3QuQXBwSW5zdGFsbF9BcHBJbmZvLmZyb21QYXJ0aWFsKGUuaW9zSW5mbyk6dm9pZCAwLG4uYW5kcm9pZEluZm89dm9pZCAwIT09ZS5hbmRyb2lkSW5mbyYmbnVsbCE9PWUuYW5kcm9pZEluZm8/dC5BcHBJbnN0YWxsX0FwcEluZm8uZnJvbVBhcnRpYWwoZS5hbmRyb2lkSW5mbyk6dm9pZCAwLG4uaWQ9ZS5pZD8/XCJcIixufX0sdC5BcHBJbnN0YWxsX0FwcEluZm89e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5hcHBJZCYmbi51aW50MzIoMTApLnN0cmluZyhlLmFwcElkKSxPYmplY3QuZW50cmllcyhlLnN0b3JlUGFyYW1zKS5mb3JFYWNoKChlPT57bGV0W3IsaV09ZTt0LkFwcEluc3RhbGxfQXBwSW5mb19TdG9yZVBhcmFtc0VudHJ5LmVuY29kZSh7a2V5OnIsdmFsdWU6aX0sbi51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCl9KSksXCJcIiE9PWUuYXBwSWNvbiYmbi51aW50MzIoMjYpLnN0cmluZyhlLmFwcEljb24pLDAhPT1lLmNvbnRlbnRPYmplY3QubGVuZ3RoJiZuLnVpbnQzMigzNCkuYnl0ZXMoZS5jb250ZW50T2JqZWN0KSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGE9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IHM9bygpO2Zvcig7ci5wb3M8YTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpzLmFwcElkPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmNvbnN0IG49dC5BcHBJbnN0YWxsX0FwcEluZm9fU3RvcmVQYXJhbXNFbnRyeS5kZWNvZGUocixyLnVpbnQzMigpKTt2b2lkIDAhPT1uLnZhbHVlJiYocy5zdG9yZVBhcmFtc1tuLmtleV09bi52YWx1ZSk7YnJlYWs7Y2FzZSAzOnMuYXBwSWNvbj1yLnN0cmluZygpO2JyZWFrO2Nhc2UgNDpzLmNvbnRlbnRPYmplY3Q9ci5ieXRlcygpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gc30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD1vKCk7cmV0dXJuIHQuYXBwSWQ9ZS5hcHBJZD8/XCJcIix0LnN0b3JlUGFyYW1zPU9iamVjdC5lbnRyaWVzKGUuc3RvcmVQYXJhbXM/P3t9KS5yZWR1Y2UoKChlLHQpPT57bGV0W24scl09dDtyZXR1cm4gdm9pZCAwIT09ciYmKGVbbl09U3RyaW5nKHIpKSxlfSkse30pLHQuYXBwSWNvbj1lLmFwcEljb24/P1wiXCIsdC5jb250ZW50T2JqZWN0PWUuY29udGVudE9iamVjdD8/bmV3IFVpbnQ4QXJyYXksdH19LHQuQXBwSW5zdGFsbF9BcHBJbmZvX1N0b3JlUGFyYW1zRW50cnk9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5rZXkmJnQudWludDMyKDEwKS5zdHJpbmcoZS5rZXkpLFwiXCIhPT1lLnZhbHVlJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUudmFsdWUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17a2V5OlwiXCIsdmFsdWU6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8ua2V5PW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOm8udmFsdWU9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2tleTpcIlwiLHZhbHVlOlwiXCJ9O3JldHVybiB0LmtleT1lLmtleT8/XCJcIix0LnZhbHVlPWUudmFsdWU/P1wiXCIsdH19fSwyNTMxOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5BcnRpY2xlPXZvaWQgMDtjb25zdCBpPW4oOTY2OTcpLG89cihuKDYyMTAwKSk7dC5BcnRpY2xlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7XCJcIiE9PWUuZWRpdG9ySHRtbCYmdC51aW50MzIoMTApLnN0cmluZyhlLmVkaXRvckh0bWwpO2Zvcihjb25zdCBuIG9mIGUudmlkZW9zKWkuTG9uZ2Zvcm1WaWRlby5lbmNvZGUobix0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKTtcIlwiIT09ZS5pZCYmdC51aW50MzIoMjYpLnN0cmluZyhlLmlkKTtmb3IoY29uc3QgbiBvZiBlLmltYWdlQ29udGVudE9iamVjdHMpdC51aW50MzIoMzQpLmJ5dGVzKG4pO3JldHVybiB0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGE9e2VkaXRvckh0bWw6XCJcIix2aWRlb3M6W10saWQ6XCJcIixpbWFnZUNvbnRlbnRPYmplY3RzOltdfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS5lZGl0b3JIdG1sPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmEudmlkZW9zLnB1c2goaS5Mb25nZm9ybVZpZGVvLmRlY29kZShuLG4udWludDMyKCkpKTticmVhaztjYXNlIDM6YS5pZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNDphLmltYWdlQ29udGVudE9iamVjdHMucHVzaChuLmJ5dGVzKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17ZWRpdG9ySHRtbDpcIlwiLHZpZGVvczpbXSxpZDpcIlwiLGltYWdlQ29udGVudE9iamVjdHM6W119O3JldHVybiB0LmVkaXRvckh0bWw9ZS5lZGl0b3JIdG1sPz9cIlwiLHQudmlkZW9zPWUudmlkZW9zPy5tYXAoKGU9PmkuTG9uZ2Zvcm1WaWRlby5mcm9tUGFydGlhbChlKSkpfHxbXSx0LmlkPWUuaWQ/P1wiXCIsdC5pbWFnZUNvbnRlbnRPYmplY3RzPWUuaW1hZ2VDb250ZW50T2JqZWN0cz8ubWFwKChlPT5lKSl8fFtdLHR9fX0sMTc1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkF0dGFjaG1lbnRzX0F0dGFjaG1lbnQ9dC5BdHRhY2htZW50cz12b2lkIDA7Y29uc3QgaT1uKDMyMzkyKSxvPW4oODY5OTYpLGE9big3OTk5NSkscz1uKDM4OTQxKSxjPW4oOTE0MjUpLGw9big0ODgzOCksdT1uKDYxNTUyKSxkPW4oNDY5MjIpLGY9big5NjY5NykscD1uKDgzNTE4KSxtPW4oNDg4MTEpLGg9big3MzcyOSksdj1uKDg3OTAwKSxnPW4oNjMyODQpLHk9cihuKDYyMTAwKSk7dC5BdHRhY2htZW50cz17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp5LmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO2Zvcihjb25zdCByIG9mIGUuYXR0YWNobWVudHMpdC5BdHRhY2htZW50c19BdHRhY2htZW50LmVuY29kZShyLG4udWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpO3JldHVyblwiXCIhPT1lLmN1c3RvbUNhbGxUb0FjdGlvbiYmbi51aW50MzIoNDIpLnN0cmluZyhlLmN1c3RvbUNhbGxUb0FjdGlvbiksdm9pZCAwIT09ZS5keW5hbWljQXR0YWNobWVudFJlbmRlcmluZ0luZm8mJmkuRHluYW1pY0F0dGFjaG1lbnRSZW5kZXJpbmdJbmZvLmVuY29kZShlLmR5bmFtaWNBdHRhY2htZW50UmVuZGVyaW5nSW5mbyxuLnVpbnQzMig1MCkuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiB5LmRlZmF1bHQuUmVhZGVyP2U6bmV3IHkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IG89dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGE9e2F0dGFjaG1lbnRzOltdLGN1c3RvbUNhbGxUb0FjdGlvbjpcIlwiLGR5bmFtaWNBdHRhY2htZW50UmVuZGVyaW5nSW5mbzp2b2lkIDB9O2Zvcig7ci5wb3M8bzspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgNDphLmF0dGFjaG1lbnRzLnB1c2godC5BdHRhY2htZW50c19BdHRhY2htZW50LmRlY29kZShyLHIudWludDMyKCkpKTticmVhaztjYXNlIDU6YS5jdXN0b21DYWxsVG9BY3Rpb249ci5zdHJpbmcoKTticmVhaztjYXNlIDY6YS5keW5hbWljQXR0YWNobWVudFJlbmRlcmluZ0luZm89aS5EeW5hbWljQXR0YWNobWVudFJlbmRlcmluZ0luZm8uZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXthdHRhY2htZW50czpbXSxjdXN0b21DYWxsVG9BY3Rpb246XCJcIixkeW5hbWljQXR0YWNobWVudFJlbmRlcmluZ0luZm86dm9pZCAwfTtyZXR1cm4gbi5hdHRhY2htZW50cz1lLmF0dGFjaG1lbnRzPy5tYXAoKGU9PnQuQXR0YWNobWVudHNfQXR0YWNobWVudC5mcm9tUGFydGlhbChlKSkpfHxbXSxuLmN1c3RvbUNhbGxUb0FjdGlvbj1lLmN1c3RvbUNhbGxUb0FjdGlvbj8/XCJcIixuLmR5bmFtaWNBdHRhY2htZW50UmVuZGVyaW5nSW5mbz12b2lkIDAhPT1lLmR5bmFtaWNBdHRhY2htZW50UmVuZGVyaW5nSW5mbyYmbnVsbCE9PWUuZHluYW1pY0F0dGFjaG1lbnRSZW5kZXJpbmdJbmZvP2kuRHluYW1pY0F0dGFjaG1lbnRSZW5kZXJpbmdJbmZvLmZyb21QYXJ0aWFsKGUuZHluYW1pY0F0dGFjaG1lbnRSZW5kZXJpbmdJbmZvKTp2b2lkIDAsbn19LHQuQXR0YWNobWVudHNfQXR0YWNobWVudD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp5LmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiY29udGV4dFwiPT09ZS5hdHRhY2htZW50Py4kY2FzZSYmby5Db250ZXh0LmVuY29kZShlLmF0dGFjaG1lbnQuY29udGV4dCx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSxcImdhbWVBdHRhY2htZW50XCI9PT1lLmF0dGFjaG1lbnQ/LiRjYXNlJiZhLkdhbWVBdHRhY2htZW50LmVuY29kZShlLmF0dGFjaG1lbnQuZ2FtZUF0dGFjaG1lbnQsdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksXCJ3ZWJQYWdlXCI9PT1lLmF0dGFjaG1lbnQ/LiRjYXNlJiZzLldlYlBhZ2UuZW5jb2RlKGUuYXR0YWNobWVudC53ZWJQYWdlLHQudWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLFwiY2FtZXJhQXR0YWNobWVudFwiPT09ZS5hdHRhY2htZW50Py4kY2FzZSYmYy5DYW1lcmFBdHRhY2htZW50LmVuY29kZShlLmF0dGFjaG1lbnQuY2FtZXJhQXR0YWNobWVudCx0LnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKSxcImFwcERlZXBMaW5rXCI9PT1lLmF0dGFjaG1lbnQ/LiRjYXNlJiZsLkFwcERlZXBMaW5rLmVuY29kZShlLmF0dGFjaG1lbnQuYXBwRGVlcExpbmssdC51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKCksXCJhcHBJbnN0YWxsXCI9PT1lLmF0dGFjaG1lbnQ/LiRjYXNlJiZ1LkFwcEluc3RhbGwuZW5jb2RlKGUuYXR0YWNobWVudC5hcHBJbnN0YWxsLHQudWludDMyKDUwKS5mb3JrKCkpLmxkZWxpbSgpLFwiY29tbWVyY2VcIj09PWUuYXR0YWNobWVudD8uJGNhc2UmJmQuQ29tbWVyY2UuZW5jb2RlKGUuYXR0YWNobWVudC5jb21tZXJjZSx0LnVpbnQzMig1OCkuZm9yaygpKS5sZGVsaW0oKSxcImxvbmdmb3JtVmlkZW9cIj09PWUuYXR0YWNobWVudD8uJGNhc2UmJmYuTG9uZ2Zvcm1WaWRlby5lbmNvZGUoZS5hdHRhY2htZW50Lmxvbmdmb3JtVmlkZW8sdC51aW50MzIoNjYpLmZvcmsoKSkubGRlbGltKCksXCJub3RpZmljYXRpb25TZXR0aW5nc1wiPT09ZS5hdHRhY2htZW50Py4kY2FzZSYmcC5Ob3RpZmljYXRpb25TZXR0aW5ncy5lbmNvZGUoZS5hdHRhY2htZW50Lm5vdGlmaWNhdGlvblNldHRpbmdzLHQudWludDMyKDc0KS5mb3JrKCkpLmxkZWxpbSgpLFwic3Vic2NyaXB0aW9uXCI9PT1lLmF0dGFjaG1lbnQ/LiRjYXNlJiZtLlN1YnNjcmlwdGlvbi5lbmNvZGUoZS5hdHRhY2htZW50LnN1YnNjcmlwdGlvbix0LnVpbnQzMig4MikuZm9yaygpKS5sZGVsaW0oKSxcInNuYXBQcm9TdG9yeVJlcGx5UXVvdGVcIj09PWUuYXR0YWNobWVudD8uJGNhc2UmJmguU25hcFByb1N0b3J5UmVwbHlRdW90ZS5lbmNvZGUoZS5hdHRhY2htZW50LnNuYXBQcm9TdG9yeVJlcGx5UXVvdGUsdC51aW50MzIoOTApLmZvcmsoKSkubGRlbGltKCksXCJwbGFjZU1ldGFkYXRhXCI9PT1lLmF0dGFjaG1lbnQ/LiRjYXNlJiZ2LlBsYWNlTWV0YWRhdGEuZW5jb2RlKGUuYXR0YWNobWVudC5wbGFjZU1ldGFkYXRhLHQudWludDMyKDk4KS5mb3JrKCkpLmxkZWxpbSgpLFwicXVlc3Rpb25TdGlja2VyUmVwbHlRdW90ZVwiPT09ZS5hdHRhY2htZW50Py4kY2FzZSYmZy5RdWVzdGlvblN0aWNrZXJSZXBseVF1b3RlLmVuY29kZShlLmF0dGFjaG1lbnQucXVlc3Rpb25TdGlja2VyUmVwbHlRdW90ZSx0LnVpbnQzMigxMDYpLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgeS5kZWZhdWx0LlJlYWRlcj9lOm5ldyB5LmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXthdHRhY2htZW50OnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuYXR0YWNobWVudD17JGNhc2U6XCJjb250ZXh0XCIsY29udGV4dDpvLkNvbnRleHQuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMjppLmF0dGFjaG1lbnQ9eyRjYXNlOlwiZ2FtZUF0dGFjaG1lbnRcIixnYW1lQXR0YWNobWVudDphLkdhbWVBdHRhY2htZW50LmRlY29kZShuLG4udWludDMyKCkpfTticmVhaztjYXNlIDM6aS5hdHRhY2htZW50PXskY2FzZTpcIndlYlBhZ2VcIix3ZWJQYWdlOnMuV2ViUGFnZS5kZWNvZGUobixuLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA0OmkuYXR0YWNobWVudD17JGNhc2U6XCJjYW1lcmFBdHRhY2htZW50XCIsY2FtZXJhQXR0YWNobWVudDpjLkNhbWVyYUF0dGFjaG1lbnQuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgNTppLmF0dGFjaG1lbnQ9eyRjYXNlOlwiYXBwRGVlcExpbmtcIixhcHBEZWVwTGluazpsLkFwcERlZXBMaW5rLmRlY29kZShuLG4udWludDMyKCkpfTticmVhaztjYXNlIDY6aS5hdHRhY2htZW50PXskY2FzZTpcImFwcEluc3RhbGxcIixhcHBJbnN0YWxsOnUuQXBwSW5zdGFsbC5kZWNvZGUobixuLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA3OmkuYXR0YWNobWVudD17JGNhc2U6XCJjb21tZXJjZVwiLGNvbW1lcmNlOmQuQ29tbWVyY2UuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgODppLmF0dGFjaG1lbnQ9eyRjYXNlOlwibG9uZ2Zvcm1WaWRlb1wiLGxvbmdmb3JtVmlkZW86Zi5Mb25nZm9ybVZpZGVvLmRlY29kZShuLG4udWludDMyKCkpfTticmVhaztjYXNlIDk6aS5hdHRhY2htZW50PXskY2FzZTpcIm5vdGlmaWNhdGlvblNldHRpbmdzXCIsbm90aWZpY2F0aW9uU2V0dGluZ3M6cC5Ob3RpZmljYXRpb25TZXR0aW5ncy5kZWNvZGUobixuLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAxMDppLmF0dGFjaG1lbnQ9eyRjYXNlOlwic3Vic2NyaXB0aW9uXCIsc3Vic2NyaXB0aW9uOm0uU3Vic2NyaXB0aW9uLmRlY29kZShuLG4udWludDMyKCkpfTticmVhaztjYXNlIDExOmkuYXR0YWNobWVudD17JGNhc2U6XCJzbmFwUHJvU3RvcnlSZXBseVF1b3RlXCIsc25hcFByb1N0b3J5UmVwbHlRdW90ZTpoLlNuYXBQcm9TdG9yeVJlcGx5UXVvdGUuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMTI6aS5hdHRhY2htZW50PXskY2FzZTpcInBsYWNlTWV0YWRhdGFcIixwbGFjZU1ldGFkYXRhOnYuUGxhY2VNZXRhZGF0YS5kZWNvZGUobixuLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAxMzppLmF0dGFjaG1lbnQ9eyRjYXNlOlwicXVlc3Rpb25TdGlja2VyUmVwbHlRdW90ZVwiLHF1ZXN0aW9uU3RpY2tlclJlcGx5UXVvdGU6Zy5RdWVzdGlvblN0aWNrZXJSZXBseVF1b3RlLmRlY29kZShuLG4udWludDMyKCkpfTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2F0dGFjaG1lbnQ6dm9pZCAwfTtyZXR1cm5cImNvbnRleHRcIj09PWUuYXR0YWNobWVudD8uJGNhc2UmJnZvaWQgMCE9PWUuYXR0YWNobWVudD8uY29udGV4dCYmbnVsbCE9PWUuYXR0YWNobWVudD8uY29udGV4dCYmKHQuYXR0YWNobWVudD17JGNhc2U6XCJjb250ZXh0XCIsY29udGV4dDpvLkNvbnRleHQuZnJvbVBhcnRpYWwoZS5hdHRhY2htZW50LmNvbnRleHQpfSksXCJnYW1lQXR0YWNobWVudFwiPT09ZS5hdHRhY2htZW50Py4kY2FzZSYmdm9pZCAwIT09ZS5hdHRhY2htZW50Py5nYW1lQXR0YWNobWVudCYmbnVsbCE9PWUuYXR0YWNobWVudD8uZ2FtZUF0dGFjaG1lbnQmJih0LmF0dGFjaG1lbnQ9eyRjYXNlOlwiZ2FtZUF0dGFjaG1lbnRcIixnYW1lQXR0YWNobWVudDphLkdhbWVBdHRhY2htZW50LmZyb21QYXJ0aWFsKGUuYXR0YWNobWVudC5nYW1lQXR0YWNobWVudCl9KSxcIndlYlBhZ2VcIj09PWUuYXR0YWNobWVudD8uJGNhc2UmJnZvaWQgMCE9PWUuYXR0YWNobWVudD8ud2ViUGFnZSYmbnVsbCE9PWUuYXR0YWNobWVudD8ud2ViUGFnZSYmKHQuYXR0YWNobWVudD17JGNhc2U6XCJ3ZWJQYWdlXCIsd2ViUGFnZTpzLldlYlBhZ2UuZnJvbVBhcnRpYWwoZS5hdHRhY2htZW50LndlYlBhZ2UpfSksXCJjYW1lcmFBdHRhY2htZW50XCI9PT1lLmF0dGFjaG1lbnQ/LiRjYXNlJiZ2b2lkIDAhPT1lLmF0dGFjaG1lbnQ/LmNhbWVyYUF0dGFjaG1lbnQmJm51bGwhPT1lLmF0dGFjaG1lbnQ/LmNhbWVyYUF0dGFjaG1lbnQmJih0LmF0dGFjaG1lbnQ9eyRjYXNlOlwiY2FtZXJhQXR0YWNobWVudFwiLGNhbWVyYUF0dGFjaG1lbnQ6Yy5DYW1lcmFBdHRhY2htZW50LmZyb21QYXJ0aWFsKGUuYXR0YWNobWVudC5jYW1lcmFBdHRhY2htZW50KX0pLFwiYXBwRGVlcExpbmtcIj09PWUuYXR0YWNobWVudD8uJGNhc2UmJnZvaWQgMCE9PWUuYXR0YWNobWVudD8uYXBwRGVlcExpbmsmJm51bGwhPT1lLmF0dGFjaG1lbnQ/LmFwcERlZXBMaW5rJiYodC5hdHRhY2htZW50PXskY2FzZTpcImFwcERlZXBMaW5rXCIsYXBwRGVlcExpbms6bC5BcHBEZWVwTGluay5mcm9tUGFydGlhbChlLmF0dGFjaG1lbnQuYXBwRGVlcExpbmspfSksXCJhcHBJbnN0YWxsXCI9PT1lLmF0dGFjaG1lbnQ/LiRjYXNlJiZ2b2lkIDAhPT1lLmF0dGFjaG1lbnQ/LmFwcEluc3RhbGwmJm51bGwhPT1lLmF0dGFjaG1lbnQ/LmFwcEluc3RhbGwmJih0LmF0dGFjaG1lbnQ9eyRjYXNlOlwiYXBwSW5zdGFsbFwiLGFwcEluc3RhbGw6dS5BcHBJbnN0YWxsLmZyb21QYXJ0aWFsKGUuYXR0YWNobWVudC5hcHBJbnN0YWxsKX0pLFwiY29tbWVyY2VcIj09PWUuYXR0YWNobWVudD8uJGNhc2UmJnZvaWQgMCE9PWUuYXR0YWNobWVudD8uY29tbWVyY2UmJm51bGwhPT1lLmF0dGFjaG1lbnQ/LmNvbW1lcmNlJiYodC5hdHRhY2htZW50PXskY2FzZTpcImNvbW1lcmNlXCIsY29tbWVyY2U6ZC5Db21tZXJjZS5mcm9tUGFydGlhbChlLmF0dGFjaG1lbnQuY29tbWVyY2UpfSksXCJsb25nZm9ybVZpZGVvXCI9PT1lLmF0dGFjaG1lbnQ/LiRjYXNlJiZ2b2lkIDAhPT1lLmF0dGFjaG1lbnQ/Lmxvbmdmb3JtVmlkZW8mJm51bGwhPT1lLmF0dGFjaG1lbnQ/Lmxvbmdmb3JtVmlkZW8mJih0LmF0dGFjaG1lbnQ9eyRjYXNlOlwibG9uZ2Zvcm1WaWRlb1wiLGxvbmdmb3JtVmlkZW86Zi5Mb25nZm9ybVZpZGVvLmZyb21QYXJ0aWFsKGUuYXR0YWNobWVudC5sb25nZm9ybVZpZGVvKX0pLFwibm90aWZpY2F0aW9uU2V0dGluZ3NcIj09PWUuYXR0YWNobWVudD8uJGNhc2UmJnZvaWQgMCE9PWUuYXR0YWNobWVudD8ubm90aWZpY2F0aW9uU2V0dGluZ3MmJm51bGwhPT1lLmF0dGFjaG1lbnQ/Lm5vdGlmaWNhdGlvblNldHRpbmdzJiYodC5hdHRhY2htZW50PXskY2FzZTpcIm5vdGlmaWNhdGlvblNldHRpbmdzXCIsbm90aWZpY2F0aW9uU2V0dGluZ3M6cC5Ob3RpZmljYXRpb25TZXR0aW5ncy5mcm9tUGFydGlhbChlLmF0dGFjaG1lbnQubm90aWZpY2F0aW9uU2V0dGluZ3MpfSksXCJzdWJzY3JpcHRpb25cIj09PWUuYXR0YWNobWVudD8uJGNhc2UmJnZvaWQgMCE9PWUuYXR0YWNobWVudD8uc3Vic2NyaXB0aW9uJiZudWxsIT09ZS5hdHRhY2htZW50Py5zdWJzY3JpcHRpb24mJih0LmF0dGFjaG1lbnQ9eyRjYXNlOlwic3Vic2NyaXB0aW9uXCIsc3Vic2NyaXB0aW9uOm0uU3Vic2NyaXB0aW9uLmZyb21QYXJ0aWFsKGUuYXR0YWNobWVudC5zdWJzY3JpcHRpb24pfSksXCJzbmFwUHJvU3RvcnlSZXBseVF1b3RlXCI9PT1lLmF0dGFjaG1lbnQ/LiRjYXNlJiZ2b2lkIDAhPT1lLmF0dGFjaG1lbnQ/LnNuYXBQcm9TdG9yeVJlcGx5UXVvdGUmJm51bGwhPT1lLmF0dGFjaG1lbnQ/LnNuYXBQcm9TdG9yeVJlcGx5UXVvdGUmJih0LmF0dGFjaG1lbnQ9eyRjYXNlOlwic25hcFByb1N0b3J5UmVwbHlRdW90ZVwiLHNuYXBQcm9TdG9yeVJlcGx5UXVvdGU6aC5TbmFwUHJvU3RvcnlSZXBseVF1b3RlLmZyb21QYXJ0aWFsKGUuYXR0YWNobWVudC5zbmFwUHJvU3RvcnlSZXBseVF1b3RlKX0pLFwicGxhY2VNZXRhZGF0YVwiPT09ZS5hdHRhY2htZW50Py4kY2FzZSYmdm9pZCAwIT09ZS5hdHRhY2htZW50Py5wbGFjZU1ldGFkYXRhJiZudWxsIT09ZS5hdHRhY2htZW50Py5wbGFjZU1ldGFkYXRhJiYodC5hdHRhY2htZW50PXskY2FzZTpcInBsYWNlTWV0YWRhdGFcIixwbGFjZU1ldGFkYXRhOnYuUGxhY2VNZXRhZGF0YS5mcm9tUGFydGlhbChlLmF0dGFjaG1lbnQucGxhY2VNZXRhZGF0YSl9KSxcInF1ZXN0aW9uU3RpY2tlclJlcGx5UXVvdGVcIj09PWUuYXR0YWNobWVudD8uJGNhc2UmJnZvaWQgMCE9PWUuYXR0YWNobWVudD8ucXVlc3Rpb25TdGlja2VyUmVwbHlRdW90ZSYmbnVsbCE9PWUuYXR0YWNobWVudD8ucXVlc3Rpb25TdGlja2VyUmVwbHlRdW90ZSYmKHQuYXR0YWNobWVudD17JGNhc2U6XCJxdWVzdGlvblN0aWNrZXJSZXBseVF1b3RlXCIscXVlc3Rpb25TdGlja2VyUmVwbHlRdW90ZTpnLlF1ZXN0aW9uU3RpY2tlclJlcGx5UXVvdGUuZnJvbVBhcnRpYWwoZS5hdHRhY2htZW50LnF1ZXN0aW9uU3RpY2tlclJlcGx5UXVvdGUpfSksdH19fSw3NDQ3NjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5BdHRyaWJ1dGlvbj12b2lkIDA7Y29uc3QgaT1uKDQzOTUwKSxvPXIobig2MjEwMCkpO3QuQXR0cmlidXRpb249e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS51c2VySWQmJnQudWludDMyKDEwKS5zdHJpbmcoZS51c2VySWQpLFwiXCIhPT1lLnVzZXJuYW1lJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUudXNlcm5hbWUpLHZvaWQgMCE9PWUuc3BvbnNvciYmaS5TcG9uc29yLmVuY29kZShlLnNwb25zb3IsdC51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBhPXt1c2VySWQ6XCJcIix1c2VybmFtZTpcIlwiLHNwb25zb3I6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS51c2VySWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6YS51c2VybmFtZT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMzphLnNwb25zb3I9aS5TcG9uc29yLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dXNlcklkOlwiXCIsdXNlcm5hbWU6XCJcIixzcG9uc29yOnZvaWQgMH07cmV0dXJuIHQudXNlcklkPWUudXNlcklkPz9cIlwiLHQudXNlcm5hbWU9ZS51c2VybmFtZT8/XCJcIix0LnNwb25zb3I9dm9pZCAwIT09ZS5zcG9uc29yJiZudWxsIT09ZS5zcG9uc29yP2kuU3BvbnNvci5mcm9tUGFydGlhbChlLnNwb25zb3IpOnZvaWQgMCx0fX19LDU2NTYyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNhbWVvTWV0YWRhdGFfVGFyZ2V0TGVuc2VzRW50cnk9dC5DYW1lb01ldGFkYXRhPXZvaWQgMDtjb25zdCBpPW4oOTUyMTkpLG89big3NjkxNCksYT1yKG4oNjIxMDApKTt0LkNhbWVvTWV0YWRhdGE9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtuLnVpbnQzMigxMCkuZm9yaygpO2Zvcihjb25zdCB0IG9mIGUuZ2VuZGVycyluLmludDMyKHQpO3JldHVybiBuLmxkZWxpbSgpLE9iamVjdC5lbnRyaWVzKGUudGFyZ2V0TGVuc2VzKS5mb3JFYWNoKChlPT57bGV0W3IsaV09ZTt0LkNhbWVvTWV0YWRhdGFfVGFyZ2V0TGVuc2VzRW50cnkuZW5jb2RlKHtrZXk6cix2YWx1ZTppfSxuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKX0pKSx2b2lkIDAhPT1lLmFzc2V0JiZvLkNhbWVvQm9sdENvbnRlbnRPYmplY3QuZW5jb2RlKGUuYXNzZXQsbi51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBzPXtnZW5kZXJzOltdLHRhcmdldExlbnNlczp7fSxhc3NldDp2b2lkIDB9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppZigyPT0oNyZlKSl7Y29uc3QgZT1yLnVpbnQzMigpK3IucG9zO2Zvcig7ci5wb3M8ZTspcy5nZW5kZXJzLnB1c2goci5pbnQzMigpKX1lbHNlIHMuZ2VuZGVycy5wdXNoKHIuaW50MzIoKSk7YnJlYWs7Y2FzZSAyOmNvbnN0IG49dC5DYW1lb01ldGFkYXRhX1RhcmdldExlbnNlc0VudHJ5LmRlY29kZShyLHIudWludDMyKCkpO3ZvaWQgMCE9PW4udmFsdWUmJihzLnRhcmdldExlbnNlc1tuLmtleV09bi52YWx1ZSk7YnJlYWs7Y2FzZSAzOnMuYXNzZXQ9by5DYW1lb0JvbHRDb250ZW50T2JqZWN0LmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gc30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17Z2VuZGVyczpbXSx0YXJnZXRMZW5zZXM6e30sYXNzZXQ6dm9pZCAwfTtyZXR1cm4gdC5nZW5kZXJzPWUuZ2VuZGVycz8ubWFwKChlPT5lKSl8fFtdLHQudGFyZ2V0TGVuc2VzPU9iamVjdC5lbnRyaWVzKGUudGFyZ2V0TGVuc2VzPz97fSkucmVkdWNlKCgoZSx0KT0+e2xldFtuLHJdPXQ7cmV0dXJuIHZvaWQgMCE9PXImJihlW051bWJlcihuKV09aS5MaXN0T2ZMZW5zZXMuZnJvbVBhcnRpYWwocikpLGV9KSx7fSksdC5hc3NldD12b2lkIDAhPT1lLmFzc2V0JiZudWxsIT09ZS5hc3NldD9vLkNhbWVvQm9sdENvbnRlbnRPYmplY3QuZnJvbVBhcnRpYWwoZS5hc3NldCk6dm9pZCAwLHR9fSx0LkNhbWVvTWV0YWRhdGFfVGFyZ2V0TGVuc2VzRW50cnk9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUua2V5JiZ0LnVpbnQzMig4KS5pbnQzMihlLmtleSksdm9pZCAwIT09ZS52YWx1ZSYmaS5MaXN0T2ZMZW5zZXMuZW5jb2RlKGUudmFsdWUsdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXtrZXk6MCx2YWx1ZTp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLmtleT1uLmludDMyKCk7YnJlYWs7Y2FzZSAyOm8udmFsdWU9aS5MaXN0T2ZMZW5zZXMuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtrZXk6MCx2YWx1ZTp2b2lkIDB9O3JldHVybiB0LmtleT1lLmtleT8/MCx0LnZhbHVlPXZvaWQgMCE9PWUudmFsdWUmJm51bGwhPT1lLnZhbHVlP2kuTGlzdE9mTGVuc2VzLmZyb21QYXJ0aWFsKGUudmFsdWUpOnZvaWQgMCx0fX19LDkxNDI1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNhbWVyYUF0dGFjaG1lbnQ9dC5DYW1lcmFBdHRhY2htZW50X1NlbmRUb0JlaGF2aW9yPXZvaWQgMDtjb25zdCBpPW4oODgyOSksbz1yKG4oNjIxMDApKTt2YXIgYTsoYT10LkNhbWVyYUF0dGFjaG1lbnRfU2VuZFRvQmVoYXZpb3J8fCh0LkNhbWVyYUF0dGFjaG1lbnRfU2VuZFRvQmVoYXZpb3I9e30pKVthLkRFRkFVTFRfU0VORF9UTz0wXT1cIkRFRkFVTFRfU0VORF9UT1wiLGFbYS5PVVJfU1RPUlk9MV09XCJPVVJfU1RPUllcIixhW2EuU1BPVExJR0hUPTJdPVwiU1BPVExJR0hUXCIsYVthLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0LkNhbWVyYUF0dGFjaG1lbnQ9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5jYXJvdXNlbCYmaS5MZW5zQ2Fyb3VzZWwuZW5jb2RlKGUuY2Fyb3VzZWwsdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksMCE9PWUuc2VuZFRvQmVoYXZpb3ImJnQudWludDMyKDE2KS5pbnQzMihlLnNlbmRUb0JlaGF2aW9yKSxcIlwiIT09ZS5pZCYmdC51aW50MzIoMjYpLnN0cmluZyhlLmlkKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGE9e2Nhcm91c2VsOnZvaWQgMCxzZW5kVG9CZWhhdmlvcjowLGlkOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLmNhcm91c2VsPWkuTGVuc0Nhcm91c2VsLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMjphLnNlbmRUb0JlaGF2aW9yPW4uaW50MzIoKTticmVhaztjYXNlIDM6YS5pZD1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17Y2Fyb3VzZWw6dm9pZCAwLHNlbmRUb0JlaGF2aW9yOjAsaWQ6XCJcIn07cmV0dXJuIHQuY2Fyb3VzZWw9dm9pZCAwIT09ZS5jYXJvdXNlbCYmbnVsbCE9PWUuY2Fyb3VzZWw/aS5MZW5zQ2Fyb3VzZWwuZnJvbVBhcnRpYWwoZS5jYXJvdXNlbCk6dm9pZCAwLHQuc2VuZFRvQmVoYXZpb3I9ZS5zZW5kVG9CZWhhdmlvcj8/MCx0LmlkPWUuaWQ/P1wiXCIsdH19fSw0NjUxMzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DYXB0aW9uPXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO3QuQ2FwdGlvbj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnRleHQmJnQudWludDMyKDEwKS5zdHJpbmcoZS50ZXh0KSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e3RleHQ6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP28udGV4dD1uLnN0cmluZygpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dGV4dDpcIlwifTtyZXR1cm4gdC50ZXh0PWUudGV4dD8/XCJcIix0fX19LDQ1OTQ4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNhcHR1cmVDaGFyYWN0ZXJpc3RpY3M9dm9pZCAwO2NvbnN0IGk9cihuKDYyMTAwKSk7dC5DYXB0dXJlQ2hhcmFjdGVyaXN0aWNzPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuITA9PT1lLmZsYXNoT24mJnQudWludDMyKDgpLmJvb2woZS5mbGFzaE9uKSwhMD09PWUuZnJvbnRGYWNpbmcmJnQudWludDMyKDE2KS5ib29sKGUuZnJvbnRGYWNpbmcpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17Zmxhc2hPbjohMSxmcm9udEZhY2luZzohMX07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8uZmxhc2hPbj1uLmJvb2woKTticmVhaztjYXNlIDI6by5mcm9udEZhY2luZz1uLmJvb2woKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2ZsYXNoT246ITEsZnJvbnRGYWNpbmc6ITF9O3JldHVybiB0LmZsYXNoT249ZS5mbGFzaE9uPz8hMSx0LmZyb250RmFjaW5nPWUuZnJvbnRGYWNpbmc/PyExLHR9fX0sNDY5MjI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ29tbWVyY2VfU3RvcmU9dC5Db21tZXJjZV9Qcm9kdWN0PXQuQ29tbWVyY2VfSXRlbT10LkNvbW1lcmNlPXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO3QuQ29tbWVyY2U9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgciBvZiBlLml0ZW1zKXQuQ29tbWVyY2VfSXRlbS5lbmNvZGUocixuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm5cIlwiIT09ZS5pZCYmbi51aW50MzIoMTgpLnN0cmluZyhlLmlkKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IG89dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGE9e2l0ZW1zOltdLGlkOlwiXCJ9O2Zvcig7ci5wb3M8bzspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLml0ZW1zLnB1c2godC5Db21tZXJjZV9JdGVtLmRlY29kZShyLHIudWludDMyKCkpKTticmVhaztjYXNlIDI6YS5pZD1yLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17aXRlbXM6W10saWQ6XCJcIn07cmV0dXJuIG4uaXRlbXM9ZS5pdGVtcz8ubWFwKChlPT50LkNvbW1lcmNlX0l0ZW0uZnJvbVBhcnRpYWwoZSkpKXx8W10sbi5pZD1lLmlkPz9cIlwiLG59fSx0LkNvbW1lcmNlX0l0ZW09e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cInByb2R1Y3RcIj09PWUuaXRlbT8uJGNhc2UmJnQuQ29tbWVyY2VfUHJvZHVjdC5lbmNvZGUoZS5pdGVtLnByb2R1Y3Qsbi51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksXCJzdG9yZVwiPT09ZS5pdGVtPy4kY2FzZSYmdC5Db21tZXJjZV9TdG9yZS5lbmNvZGUoZS5pdGVtLnN0b3JlLG4udWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgbz12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3QgYT17aXRlbTp2b2lkIDB9O2Zvcig7ci5wb3M8bzspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMjphLml0ZW09eyRjYXNlOlwicHJvZHVjdFwiLHByb2R1Y3Q6dC5Db21tZXJjZV9Qcm9kdWN0LmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDM6YS5pdGVtPXskY2FzZTpcInN0b3JlXCIsc3RvcmU6dC5Db21tZXJjZV9TdG9yZS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtpdGVtOnZvaWQgMH07cmV0dXJuXCJwcm9kdWN0XCI9PT1lLml0ZW0/LiRjYXNlJiZ2b2lkIDAhPT1lLml0ZW0/LnByb2R1Y3QmJm51bGwhPT1lLml0ZW0/LnByb2R1Y3QmJihuLml0ZW09eyRjYXNlOlwicHJvZHVjdFwiLHByb2R1Y3Q6dC5Db21tZXJjZV9Qcm9kdWN0LmZyb21QYXJ0aWFsKGUuaXRlbS5wcm9kdWN0KX0pLFwic3RvcmVcIj09PWUuaXRlbT8uJGNhc2UmJnZvaWQgMCE9PWUuaXRlbT8uc3RvcmUmJm51bGwhPT1lLml0ZW0/LnN0b3JlJiYobi5pdGVtPXskY2FzZTpcInN0b3JlXCIsc3RvcmU6dC5Db21tZXJjZV9TdG9yZS5mcm9tUGFydGlhbChlLml0ZW0uc3RvcmUpfSksbn19LHQuQ29tbWVyY2VfUHJvZHVjdD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmlkJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUuaWQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17aWQ6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP28uaWQ9bi5zdHJpbmcoKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2lkOlwiXCJ9O3JldHVybiB0LmlkPWUuaWQ/P1wiXCIsdH19LHQuQ29tbWVyY2VfU3RvcmU9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5pZCYmdC51aW50MzIoMTApLnN0cmluZyhlLmlkKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e2lkOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9vLmlkPW4uc3RyaW5nKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtpZDpcIlwifTtyZXR1cm4gdC5pZD1lLmlkPz9cIlwiLHR9fX0sODY5OTY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ29udGV4dD12b2lkIDA7Y29uc3QgaT1uKDY1OTQ3KSxvPW4oMzY3NTYpLGE9cihuKDYyMTAwKSk7dC5Db250ZXh0PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmEuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUudmVudWVJZCYmdC51aW50MzIoMTApLnN0cmluZyhlLnZlbnVlSWQpLHZvaWQgMCE9PWUuY29udGV4dEhpbnQmJmkuQ29udGV4dEhpbnQuZW5jb2RlKGUuY29udGV4dEhpbnQsdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5jb250ZXh0Q2xpZW50SW5mbyYmby5Db250ZXh0Q2xpZW50SW5mby5lbmNvZGUoZS5jb250ZXh0Q2xpZW50SW5mbyx0LnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IHM9e3ZlbnVlSWQ6XCJcIixjb250ZXh0SGludDp2b2lkIDAsY29udGV4dENsaWVudEluZm86dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6cy52ZW51ZUlkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOnMuY29udGV4dEhpbnQ9aS5Db250ZXh0SGludC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDM6cy5jb250ZXh0Q2xpZW50SW5mbz1vLkNvbnRleHRDbGllbnRJbmZvLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gc30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dmVudWVJZDpcIlwiLGNvbnRleHRIaW50OnZvaWQgMCxjb250ZXh0Q2xpZW50SW5mbzp2b2lkIDB9O3JldHVybiB0LnZlbnVlSWQ9ZS52ZW51ZUlkPz9cIlwiLHQuY29udGV4dEhpbnQ9dm9pZCAwIT09ZS5jb250ZXh0SGludCYmbnVsbCE9PWUuY29udGV4dEhpbnQ/aS5Db250ZXh0SGludC5mcm9tUGFydGlhbChlLmNvbnRleHRIaW50KTp2b2lkIDAsdC5jb250ZXh0Q2xpZW50SW5mbz12b2lkIDAhPT1lLmNvbnRleHRDbGllbnRJbmZvJiZudWxsIT09ZS5jb250ZXh0Q2xpZW50SW5mbz9vLkNvbnRleHRDbGllbnRJbmZvLmZyb21QYXJ0aWFsKGUuY29udGV4dENsaWVudEluZm8pOnZvaWQgMCx0fX19LDg4ODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DcmVhdGl2ZUVkaXRUYWc9dC5GZWF0dXJlVGFnPXQuQ3JlYXRpdmVFZGl0VGFnX0NyZWF0aXZlVG9vbEZlYXR1cmU9dC5GZWF0dXJlVGFnX0NyZWF0aXZlVG9vbEZlYXR1cmU9dm9pZCAwO2NvbnN0IGk9cihuKDYyMTAwKSk7dmFyIG8sYTsoYT10LkZlYXR1cmVUYWdfQ3JlYXRpdmVUb29sRmVhdHVyZXx8KHQuRmVhdHVyZVRhZ19DcmVhdGl2ZVRvb2xGZWF0dXJlPXt9KSlbYS5VTlNFVD0wXT1cIlVOU0VUXCIsYVthLk1VU0lDPTFdPVwiTVVTSUNcIixhW2EuVk9JQ0VPVkVSPTJdPVwiVk9JQ0VPVkVSXCIsYVthLk1FRElBX1RFTVBMQVRFPTNdPVwiTUVESUFfVEVNUExBVEVcIixhW2EuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLChvPXQuQ3JlYXRpdmVFZGl0VGFnX0NyZWF0aXZlVG9vbEZlYXR1cmV8fCh0LkNyZWF0aXZlRWRpdFRhZ19DcmVhdGl2ZVRvb2xGZWF0dXJlPXt9KSlbby5VTlNFVD0wXT1cIlVOU0VUXCIsb1tvLk1VU0lDPTFdPVwiTVVTSUNcIixvW28uVk9JQ0VPVkVSPTJdPVwiVk9JQ0VPVkVSXCIsb1tvLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0LkZlYXR1cmVUYWc9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUudGFnSWQmJnQudWludDMyKDgpLnVpbnQzMihlLnRhZ0lkKSwwIT09ZS5jcmVhdGl2ZVRvb2xGZWF0dXJlJiZ0LnVpbnQzMigxNikuaW50MzIoZS5jcmVhdGl2ZVRvb2xGZWF0dXJlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e3RhZ0lkOjAsY3JlYXRpdmVUb29sRmVhdHVyZTowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by50YWdJZD1uLnVpbnQzMigpO2JyZWFrO2Nhc2UgMjpvLmNyZWF0aXZlVG9vbEZlYXR1cmU9bi5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dGFnSWQ6MCxjcmVhdGl2ZVRvb2xGZWF0dXJlOjB9O3JldHVybiB0LnRhZ0lkPWUudGFnSWQ/PzAsdC5jcmVhdGl2ZVRvb2xGZWF0dXJlPWUuY3JlYXRpdmVUb29sRmVhdHVyZT8/MCx0fX0sdC5DcmVhdGl2ZUVkaXRUYWc9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgciBvZiBlLmZlYXR1cmVUYWdzKXQuRmVhdHVyZVRhZy5lbmNvZGUocixuLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKTtuLnVpbnQzMigxMCkuZm9yaygpO2Zvcihjb25zdCB0IG9mIGUuY3JlYXRpdmVUb29sRmVhdHVyZXMpbi5pbnQzMih0KTtyZXR1cm4gbi5sZGVsaW0oKSwwIT09ZS51bmlxdWVJZCYmbi51aW50MzIoMTYpLnVpbnQzMihlLnVuaXF1ZUlkKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IG89dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGE9e2ZlYXR1cmVUYWdzOltdLGNyZWF0aXZlVG9vbEZlYXR1cmVzOltdLHVuaXF1ZUlkOjB9O2Zvcig7ci5wb3M8bzspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMzphLmZlYXR1cmVUYWdzLnB1c2godC5GZWF0dXJlVGFnLmRlY29kZShyLHIudWludDMyKCkpKTticmVhaztjYXNlIDE6aWYoMj09KDcmZSkpe2NvbnN0IGU9ci51aW50MzIoKStyLnBvcztmb3IoO3IucG9zPGU7KWEuY3JlYXRpdmVUb29sRmVhdHVyZXMucHVzaChyLmludDMyKCkpfWVsc2UgYS5jcmVhdGl2ZVRvb2xGZWF0dXJlcy5wdXNoKHIuaW50MzIoKSk7YnJlYWs7Y2FzZSAyOmEudW5pcXVlSWQ9ci51aW50MzIoKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e2ZlYXR1cmVUYWdzOltdLGNyZWF0aXZlVG9vbEZlYXR1cmVzOltdLHVuaXF1ZUlkOjB9O3JldHVybiBuLmZlYXR1cmVUYWdzPWUuZmVhdHVyZVRhZ3M/Lm1hcCgoZT0+dC5GZWF0dXJlVGFnLmZyb21QYXJ0aWFsKGUpKSl8fFtdLG4uY3JlYXRpdmVUb29sRmVhdHVyZXM9ZS5jcmVhdGl2ZVRvb2xGZWF0dXJlcz8ubWFwKChlPT5lKSl8fFtdLG4udW5pcXVlSWQ9ZS51bmlxdWVJZD8/MCxufX19LDQ2OTUwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNyZWF0aXZlS2l0U291cmNlQXBwPXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO3QuQ3JlYXRpdmVLaXRTb3VyY2VBcHA9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5vYXV0aENsaWVudElkJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUub2F1dGhDbGllbnRJZCksXCJcIiE9PWUuZGlzcGxheU5hbWUmJnQudWludDMyKDE4KS5zdHJpbmcoZS5kaXNwbGF5TmFtZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXtvYXV0aENsaWVudElkOlwiXCIsZGlzcGxheU5hbWU6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8ub2F1dGhDbGllbnRJZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjpvLmRpc3BsYXlOYW1lPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtvYXV0aENsaWVudElkOlwiXCIsZGlzcGxheU5hbWU6XCJcIn07cmV0dXJuIHQub2F1dGhDbGllbnRJZD1lLm9hdXRoQ2xpZW50SWQ/P1wiXCIsdC5kaXNwbGF5TmFtZT1lLmRpc3BsYXlOYW1lPz9cIlwiLHR9fX0sOTc4MzQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ3JlYXRpdmVUb29sc0FuYWx5dGljcz12b2lkIDA7Y29uc3QgaT1yKG4oNjIxMDApKTt0LkNyZWF0aXZlVG9vbHNBbmFseXRpY3M9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4hMD09PWUuY29udGFpbnNBbmltYXRlZFN0aWNrZXJzJiZ0LnVpbnQzMig4KS5ib29sKGUuY29udGFpbnNBbmltYXRlZFN0aWNrZXJzKSwhMD09PWUuaXNJbWFnZVdpdGhBbmltYXRlZFN0aWNrZXImJnQudWludDMyKDE2KS5ib29sKGUuaXNJbWFnZVdpdGhBbmltYXRlZFN0aWNrZXIpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17Y29udGFpbnNBbmltYXRlZFN0aWNrZXJzOiExLGlzSW1hZ2VXaXRoQW5pbWF0ZWRTdGlja2VyOiExfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5jb250YWluc0FuaW1hdGVkU3RpY2tlcnM9bi5ib29sKCk7YnJlYWs7Y2FzZSAyOm8uaXNJbWFnZVdpdGhBbmltYXRlZFN0aWNrZXI9bi5ib29sKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtjb250YWluc0FuaW1hdGVkU3RpY2tlcnM6ITEsaXNJbWFnZVdpdGhBbmltYXRlZFN0aWNrZXI6ITF9O3JldHVybiB0LmNvbnRhaW5zQW5pbWF0ZWRTdGlja2Vycz1lLmNvbnRhaW5zQW5pbWF0ZWRTdGlja2Vycz8/ITEsdC5pc0ltYWdlV2l0aEFuaW1hdGVkU3RpY2tlcj1lLmlzSW1hZ2VXaXRoQW5pbWF0ZWRTdGlja2VyPz8hMSx0fX19LDMyMzkyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkR5bmFtaWNBdHRhY2htZW50UmVuZGVyaW5nSW5mbz12b2lkIDA7Y29uc3QgaT1uKDI1MzE5KSxvPW4oNzgxNzcpLGE9cihuKDYyMTAwKSk7dC5EeW5hbWljQXR0YWNobWVudFJlbmRlcmluZ0luZm89e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5hcnRpY2xlJiZpLkFydGljbGUuZW5jb2RlKGUuYXJ0aWNsZSx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnBvbGwmJm8uUG9sbC5lbmNvZGUoZS5wb2xsLHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGEuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgcz17YXJ0aWNsZTp2b2lkIDAscG9sbDp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpzLmFydGljbGU9aS5BcnRpY2xlLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMjpzLnBvbGw9by5Qb2xsLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gc30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17YXJ0aWNsZTp2b2lkIDAscG9sbDp2b2lkIDB9O3JldHVybiB0LmFydGljbGU9dm9pZCAwIT09ZS5hcnRpY2xlJiZudWxsIT09ZS5hcnRpY2xlP2kuQXJ0aWNsZS5mcm9tUGFydGlhbChlLmFydGljbGUpOnZvaWQgMCx0LnBvbGw9dm9pZCAwIT09ZS5wb2xsJiZudWxsIT09ZS5wb2xsP28uUG9sbC5mcm9tUGFydGlhbChlLnBvbGwpOnZvaWQgMCx0fX19LDIwODk5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkVkaXRDYXBhYmlsaXRpZXM9dm9pZCAwO2NvbnN0IGk9cihuKDYyMTAwKSk7dC5FZGl0Q2FwYWJpbGl0aWVzPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuITA9PT1lLmNhbm5vdERlbGV0ZSYmdC51aW50MzIoOCkuYm9vbChlLmNhbm5vdERlbGV0ZSksITA9PT1lLmNhbm5vdFJlcGxhY2UmJnQudWludDMyKDE2KS5ib29sKGUuY2Fubm90UmVwbGFjZSksITA9PT1lLmNhbm5vdE1vdmUmJnQudWludDMyKDI0KS5ib29sKGUuY2Fubm90TW92ZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXtjYW5ub3REZWxldGU6ITEsY2Fubm90UmVwbGFjZTohMSxjYW5ub3RNb3ZlOiExfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5jYW5ub3REZWxldGU9bi5ib29sKCk7YnJlYWs7Y2FzZSAyOm8uY2Fubm90UmVwbGFjZT1uLmJvb2woKTticmVhaztjYXNlIDM6by5jYW5ub3RNb3ZlPW4uYm9vbCgpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17Y2Fubm90RGVsZXRlOiExLGNhbm5vdFJlcGxhY2U6ITEsY2Fubm90TW92ZTohMX07cmV0dXJuIHQuY2Fubm90RGVsZXRlPWUuY2Fubm90RGVsZXRlPz8hMSx0LmNhbm5vdFJlcGxhY2U9ZS5jYW5ub3RSZXBsYWNlPz8hMSx0LmNhbm5vdE1vdmU9ZS5jYW5ub3RNb3ZlPz8hMSx0fX19LDc5OTk1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkdhbWVBdHRhY2htZW50PXZvaWQgMDtjb25zdCBpPW4oNTE1OTgpLG89cihuKDYyMTAwKSk7dC5HYW1lQXR0YWNobWVudD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLmlkJiZpLlVVSUQuZW5jb2RlKGUuaWQsdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksXCJcIiE9PWUuZGlzcGxheU5hbWUmJnQudWludDMyKDE4KS5zdHJpbmcoZS5kaXNwbGF5TmFtZSksXCJcIiE9PWUuY29udGVudFVybCYmdC51aW50MzIoMjYpLnN0cmluZyhlLmNvbnRlbnRVcmwpLFwiXCIhPT1lLmljb25JbWFnZVVybCYmdC51aW50MzIoMzQpLnN0cmluZyhlLmljb25JbWFnZVVybCksXCJcIiE9PWUubG9hZGluZ1BhZ2VJbWFnZVVybCYmdC51aW50MzIoNDIpLnN0cmluZyhlLmxvYWRpbmdQYWdlSW1hZ2VVcmwpLFwiXCIhPT1lLmxvZ29VcmwmJnQudWludDMyKDUwKS5zdHJpbmcoZS5sb2dvVXJsKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGE9e2lkOnZvaWQgMCxkaXNwbGF5TmFtZTpcIlwiLGNvbnRlbnRVcmw6XCJcIixpY29uSW1hZ2VVcmw6XCJcIixsb2FkaW5nUGFnZUltYWdlVXJsOlwiXCIsbG9nb1VybDpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS5pZD1pLlVVSUQuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOmEuZGlzcGxheU5hbWU9bi5zdHJpbmcoKTticmVhaztjYXNlIDM6YS5jb250ZW50VXJsPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA0OmEuaWNvbkltYWdlVXJsPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA1OmEubG9hZGluZ1BhZ2VJbWFnZVVybD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNjphLmxvZ29Vcmw9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2lkOnZvaWQgMCxkaXNwbGF5TmFtZTpcIlwiLGNvbnRlbnRVcmw6XCJcIixpY29uSW1hZ2VVcmw6XCJcIixsb2FkaW5nUGFnZUltYWdlVXJsOlwiXCIsbG9nb1VybDpcIlwifTtyZXR1cm4gdC5pZD12b2lkIDAhPT1lLmlkJiZudWxsIT09ZS5pZD9pLlVVSUQuZnJvbVBhcnRpYWwoZS5pZCk6dm9pZCAwLHQuZGlzcGxheU5hbWU9ZS5kaXNwbGF5TmFtZT8/XCJcIix0LmNvbnRlbnRVcmw9ZS5jb250ZW50VXJsPz9cIlwiLHQuaWNvbkltYWdlVXJsPWUuaWNvbkltYWdlVXJsPz9cIlwiLHQubG9hZGluZ1BhZ2VJbWFnZVVybD1lLmxvYWRpbmdQYWdlSW1hZ2VVcmw/P1wiXCIsdC5sb2dvVXJsPWUubG9nb1VybD8/XCJcIix0fX19LDIzMTg3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkdlbmVyYXRlZENhbWVvPXQuR2VuZXJhdGVkQ2FtZW9fQ29udGVudFR5cGU9dC5HZW5lcmF0ZWRDYW1lb19Tb3VyY2U9dm9pZCAwO2NvbnN0IGk9cihuKDQxNTgzKSksbz1yKG4oNjIxMDApKTtmdW5jdGlvbiBhKGUpe3JldHVybiBlLnRvU3RyaW5nKCl9dmFyIHMsYzsoYz10LkdlbmVyYXRlZENhbWVvX1NvdXJjZXx8KHQuR2VuZXJhdGVkQ2FtZW9fU291cmNlPXt9KSlbYy5VTktOT1dOPTBdPVwiVU5LTk9XTlwiLGNbYy5DSEFUPTFdPVwiQ0hBVFwiLGNbYy5ESVNDT1ZFUj0yXT1cIkRJU0NPVkVSXCIsY1tjLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwocz10LkdlbmVyYXRlZENhbWVvX0NvbnRlbnRUeXBlfHwodC5HZW5lcmF0ZWRDYW1lb19Db250ZW50VHlwZT17fSkpW3MuTEVOUz0wXT1cIkxFTlNcIixzW3MuQ0hBVF9TVElDS0VSPTFdPVwiQ0hBVF9TVElDS0VSXCIsc1tzLlBSRVZJRVdfU1RJQ0tFUj0yXT1cIlBSRVZJRVdfU1RJQ0tFUlwiLHNbcy5DQU1FT1NfU1RPUklFUz0zXT1cIkNBTUVPU19TVE9SSUVTXCIsc1tzLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0LkdlbmVyYXRlZENhbWVvPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLnNvdXJjZSYmdC51aW50MzIoOCkuaW50MzIoZS5zb3VyY2UpLFwiY2hhdENhbWVvSWRcIj09PWUuaWQ/LiRjYXNlJiZ0LnVpbnQzMigxNikuaW50NjQoZS5pZC5jaGF0Q2FtZW9JZCksXCJzdGlja2VyQ2FtZW9JZFwiPT09ZS5pZD8uJGNhc2UmJnQudWludDMyKDI0KS5pbnQ2NChlLmlkLnN0aWNrZXJDYW1lb0lkKSwwIT09ZS5jb250ZW50VHlwZSYmdC51aW50MzIoMzIpLmludDMyKGUuY29udGVudFR5cGUpLDAhPT1lLnBlcnNvbkNvdW50JiZ0LnVpbnQzMig0MCkuaW50MzIoZS5wZXJzb25Db3VudCksITA9PT1lLmlzT25lRnJpZW5kQ2FtZW8mJnQudWludDMyKDQ4KS5ib29sKGUuaXNPbmVGcmllbmRDYW1lbyksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtzb3VyY2U6MCxpZDp2b2lkIDAsY29udGVudFR5cGU6MCxwZXJzb25Db3VudDowLGlzT25lRnJpZW5kQ2FtZW86ITF9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnNvdXJjZT1uLmludDMyKCk7YnJlYWs7Y2FzZSAyOmkuaWQ9eyRjYXNlOlwiY2hhdENhbWVvSWRcIixjaGF0Q2FtZW9JZDphKG4uaW50NjQoKSl9O2JyZWFrO2Nhc2UgMzppLmlkPXskY2FzZTpcInN0aWNrZXJDYW1lb0lkXCIsc3RpY2tlckNhbWVvSWQ6YShuLmludDY0KCkpfTticmVhaztjYXNlIDQ6aS5jb250ZW50VHlwZT1uLmludDMyKCk7YnJlYWs7Y2FzZSA1OmkucGVyc29uQ291bnQ9bi5pbnQzMigpO2JyZWFrO2Nhc2UgNjppLmlzT25lRnJpZW5kQ2FtZW89bi5ib29sKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtzb3VyY2U6MCxpZDp2b2lkIDAsY29udGVudFR5cGU6MCxwZXJzb25Db3VudDowLGlzT25lRnJpZW5kQ2FtZW86ITF9O3JldHVybiB0LnNvdXJjZT1lLnNvdXJjZT8/MCxcImNoYXRDYW1lb0lkXCI9PT1lLmlkPy4kY2FzZSYmdm9pZCAwIT09ZS5pZD8uY2hhdENhbWVvSWQmJm51bGwhPT1lLmlkPy5jaGF0Q2FtZW9JZCYmKHQuaWQ9eyRjYXNlOlwiY2hhdENhbWVvSWRcIixjaGF0Q2FtZW9JZDplLmlkLmNoYXRDYW1lb0lkfSksXCJzdGlja2VyQ2FtZW9JZFwiPT09ZS5pZD8uJGNhc2UmJnZvaWQgMCE9PWUuaWQ/LnN0aWNrZXJDYW1lb0lkJiZudWxsIT09ZS5pZD8uc3RpY2tlckNhbWVvSWQmJih0LmlkPXskY2FzZTpcInN0aWNrZXJDYW1lb0lkXCIsc3RpY2tlckNhbWVvSWQ6ZS5pZC5zdGlja2VyQ2FtZW9JZH0pLHQuY29udGVudFR5cGU9ZS5jb250ZW50VHlwZT8/MCx0LnBlcnNvbkNvdW50PWUucGVyc29uQ291bnQ/PzAsdC5pc09uZUZyaWVuZENhbWVvPWUuaXNPbmVGcmllbmRDYW1lbz8/ITEsdH19LG8uZGVmYXVsdC51dGlsLkxvbmchPT1pLmRlZmF1bHQmJihvLmRlZmF1bHQudXRpbC5Mb25nPWkuZGVmYXVsdCxvLmRlZmF1bHQuY29uZmlndXJlKCkpfSwxNjcxNDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5MYXllckNvbXBvc2l0aW9uPXQuVHJhY2s9dC5UcmFja1NlZ21lbnQ9dC5UcmFja19UcmFja1R5cGU9dm9pZCAwO2NvbnN0IGk9big3MjU2KSxvPW4oNTYxOTMpLGE9bigxNjI0NSkscz1uKDg4OCksYz1yKG4oNjIxMDApKTt2YXIgbDsobD10LlRyYWNrX1RyYWNrVHlwZXx8KHQuVHJhY2tfVHJhY2tUeXBlPXt9KSlbbC5VTlNFVD0wXT1cIlVOU0VUXCIsbFtsLkFVRElPX1ZJREVPPTFdPVwiQVVESU9fVklERU9cIixsW2wuQVVESU89Ml09XCJBVURJT1wiLGxbbC5WSURFTz0zXT1cIlZJREVPXCIsbFtsLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0LlRyYWNrU2VnbWVudD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpjLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3QudWludDMyKDEwKS5mb3JrKCk7Zm9yKGNvbnN0IG4gb2YgZS5wbGF5YmFja0xheWVycyl0LnVpbnQzMihuKTtyZXR1cm4gdC5sZGVsaW0oKSx2b2lkIDAhPT1lLnN5bmNUaW1lTXMmJmkuVGltZUluc3RhbnQuZW5jb2RlKGUuc3luY1RpbWVNcyx0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS50cmFja1NlZ21lbnRJbmRleCYmdC51aW50MzIoMjQpLnVpbnQzMihlLnRyYWNrU2VnbWVudEluZGV4KSx2b2lkIDAhPT1lLnRyaW0mJm8uVGltZWZyYW1lLmVuY29kZShlLnRyaW0sdC51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5wbGF5YmFja1NwZWVkTXVsdGlwbGllciYmYS5QbGF5YmFja1NwZWVkTXVsdGlwbGllci5lbmNvZGUoZS5wbGF5YmFja1NwZWVkTXVsdGlwbGllcix0LnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmNyZWF0aXZlRWRpdFRhZyYmcy5DcmVhdGl2ZUVkaXRUYWcuZW5jb2RlKGUuY3JlYXRpdmVFZGl0VGFnLHQudWludDMyKDUwKS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgbD17cGxheWJhY2tMYXllcnM6W10sc3luY1RpbWVNczp2b2lkIDAsdHJhY2tTZWdtZW50SW5kZXg6MCx0cmltOnZvaWQgMCxwbGF5YmFja1NwZWVkTXVsdGlwbGllcjp2b2lkIDAsY3JlYXRpdmVFZGl0VGFnOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmlmKDI9PSg3JmUpKXtjb25zdCBlPW4udWludDMyKCkrbi5wb3M7Zm9yKDtuLnBvczxlOylsLnBsYXliYWNrTGF5ZXJzLnB1c2gobi51aW50MzIoKSl9ZWxzZSBsLnBsYXliYWNrTGF5ZXJzLnB1c2gobi51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOmwuc3luY1RpbWVNcz1pLlRpbWVJbnN0YW50LmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMzpsLnRyYWNrU2VnbWVudEluZGV4PW4udWludDMyKCk7YnJlYWs7Y2FzZSA0OmwudHJpbT1vLlRpbWVmcmFtZS5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDU6bC5wbGF5YmFja1NwZWVkTXVsdGlwbGllcj1hLlBsYXliYWNrU3BlZWRNdWx0aXBsaWVyLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgNjpsLmNyZWF0aXZlRWRpdFRhZz1zLkNyZWF0aXZlRWRpdFRhZy5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGx9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3BsYXliYWNrTGF5ZXJzOltdLHN5bmNUaW1lTXM6dm9pZCAwLHRyYWNrU2VnbWVudEluZGV4OjAsdHJpbTp2b2lkIDAscGxheWJhY2tTcGVlZE11bHRpcGxpZXI6dm9pZCAwLGNyZWF0aXZlRWRpdFRhZzp2b2lkIDB9O3JldHVybiB0LnBsYXliYWNrTGF5ZXJzPWUucGxheWJhY2tMYXllcnM/Lm1hcCgoZT0+ZSkpfHxbXSx0LnN5bmNUaW1lTXM9dm9pZCAwIT09ZS5zeW5jVGltZU1zJiZudWxsIT09ZS5zeW5jVGltZU1zP2kuVGltZUluc3RhbnQuZnJvbVBhcnRpYWwoZS5zeW5jVGltZU1zKTp2b2lkIDAsdC50cmFja1NlZ21lbnRJbmRleD1lLnRyYWNrU2VnbWVudEluZGV4Pz8wLHQudHJpbT12b2lkIDAhPT1lLnRyaW0mJm51bGwhPT1lLnRyaW0/by5UaW1lZnJhbWUuZnJvbVBhcnRpYWwoZS50cmltKTp2b2lkIDAsdC5wbGF5YmFja1NwZWVkTXVsdGlwbGllcj12b2lkIDAhPT1lLnBsYXliYWNrU3BlZWRNdWx0aXBsaWVyJiZudWxsIT09ZS5wbGF5YmFja1NwZWVkTXVsdGlwbGllcj9hLlBsYXliYWNrU3BlZWRNdWx0aXBsaWVyLmZyb21QYXJ0aWFsKGUucGxheWJhY2tTcGVlZE11bHRpcGxpZXIpOnZvaWQgMCx0LmNyZWF0aXZlRWRpdFRhZz12b2lkIDAhPT1lLmNyZWF0aXZlRWRpdFRhZyYmbnVsbCE9PWUuY3JlYXRpdmVFZGl0VGFnP3MuQ3JlYXRpdmVFZGl0VGFnLmZyb21QYXJ0aWFsKGUuY3JlYXRpdmVFZGl0VGFnKTp2b2lkIDAsdH19LHQuVHJhY2s9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Yy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgciBvZiBlLnRyYWNrU2VnbWVudHMpdC5UcmFja1NlZ21lbnQuZW5jb2RlKHIsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIDAhPT1lLnRyYWNrVHlwZSYmbi51aW50MzIoMTYpLmludDMyKGUudHJhY2tUeXBlKSwwIT09ZS50cmFja0luZGV4JiZuLnVpbnQzMigyNCkudWludDMyKGUudHJhY2tJbmRleCksITA9PT1lLmlzR2xvYmFsVHJhY2smJm4udWludDMyKDMyKS5ib29sKGUuaXNHbG9iYWxUcmFjayksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgYy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBjLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBvPXt0cmFja1NlZ21lbnRzOltdLHRyYWNrVHlwZTowLHRyYWNrSW5kZXg6MCxpc0dsb2JhbFRyYWNrOiExfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by50cmFja1NlZ21lbnRzLnB1c2godC5UcmFja1NlZ21lbnQuZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2Nhc2UgMjpvLnRyYWNrVHlwZT1yLmludDMyKCk7YnJlYWs7Y2FzZSAzOm8udHJhY2tJbmRleD1yLnVpbnQzMigpO2JyZWFrO2Nhc2UgNDpvLmlzR2xvYmFsVHJhY2s9ci5ib29sKCk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXt0cmFja1NlZ21lbnRzOltdLHRyYWNrVHlwZTowLHRyYWNrSW5kZXg6MCxpc0dsb2JhbFRyYWNrOiExfTtyZXR1cm4gbi50cmFja1NlZ21lbnRzPWUudHJhY2tTZWdtZW50cz8ubWFwKChlPT50LlRyYWNrU2VnbWVudC5mcm9tUGFydGlhbChlKSkpfHxbXSxuLnRyYWNrVHlwZT1lLnRyYWNrVHlwZT8/MCxuLnRyYWNrSW5kZXg9ZS50cmFja0luZGV4Pz8wLG4uaXNHbG9iYWxUcmFjaz1lLmlzR2xvYmFsVHJhY2s/PyExLG59fSx0LkxheWVyQ29tcG9zaXRpb249e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Yy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgciBvZiBlLnRyYWNrcyl0LlRyYWNrLmVuY29kZShyLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiAwIT09ZS50cmFja0luZGV4Q291bnRlciYmbi51aW50MzIoMzIpLnVpbnQzMihlLnRyYWNrSW5kZXhDb3VudGVyKSwwIT09ZS50cmFja1NlZ21lbnRJbmRleENvdW50ZXImJm4udWludDMyKDQwKS51aW50MzIoZS50cmFja1NlZ21lbnRJbmRleENvdW50ZXIpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17dHJhY2tzOltdLHRyYWNrSW5kZXhDb3VudGVyOjAsdHJhY2tTZWdtZW50SW5kZXhDb3VudGVyOjB9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLnRyYWNrcy5wdXNoKHQuVHJhY2suZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2Nhc2UgNDpvLnRyYWNrSW5kZXhDb3VudGVyPXIudWludDMyKCk7YnJlYWs7Y2FzZSA1Om8udHJhY2tTZWdtZW50SW5kZXhDb3VudGVyPXIudWludDMyKCk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXt0cmFja3M6W10sdHJhY2tJbmRleENvdW50ZXI6MCx0cmFja1NlZ21lbnRJbmRleENvdW50ZXI6MH07cmV0dXJuIG4udHJhY2tzPWUudHJhY2tzPy5tYXAoKGU9PnQuVHJhY2suZnJvbVBhcnRpYWwoZSkpKXx8W10sbi50cmFja0luZGV4Q291bnRlcj1lLnRyYWNrSW5kZXhDb3VudGVyPz8wLG4udHJhY2tTZWdtZW50SW5kZXhDb3VudGVyPWUudHJhY2tTZWdtZW50SW5kZXhDb3VudGVyPz8wLG59fX0sMTUxNzY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTGVnYWN5TXVsdGlzbmFwPXZvaWQgMDtjb25zdCBpPW4oNTE1OTgpLG89cihuKDYyMTAwKSk7dC5MZWdhY3lNdWx0aXNuYXA9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUucHJldmlld0luZGV4JiZ0LnVpbnQzMig4KS51aW50MzIoZS5wcmV2aWV3SW5kZXgpLDAhPT1lLnByZXZpZXdDb3VudCYmdC51aW50MzIoMTYpLnVpbnQzMihlLnByZXZpZXdDb3VudCksMCE9PWUub3V0cHV0SW5kZXgmJnQudWludDMyKDI0KS51aW50MzIoZS5vdXRwdXRJbmRleCksMCE9PWUub3V0cHV0Q291bnQmJnQudWludDMyKDMyKS51aW50MzIoZS5vdXRwdXRDb3VudCksITA9PT1lLmlzVHJpbW1lZCYmdC51aW50MzIoNDApLmJvb2woZS5pc1RyaW1tZWQpLHZvaWQgMCE9PWUuYnVuZGxlSWQmJmkuVVVJRC5lbmNvZGUoZS5idW5kbGVJZCx0LnVpbnQzMig1MCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGE9e3ByZXZpZXdJbmRleDowLHByZXZpZXdDb3VudDowLG91dHB1dEluZGV4OjAsb3V0cHV0Q291bnQ6MCxpc1RyaW1tZWQ6ITEsYnVuZGxlSWQ6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS5wcmV2aWV3SW5kZXg9bi51aW50MzIoKTticmVhaztjYXNlIDI6YS5wcmV2aWV3Q291bnQ9bi51aW50MzIoKTticmVhaztjYXNlIDM6YS5vdXRwdXRJbmRleD1uLnVpbnQzMigpO2JyZWFrO2Nhc2UgNDphLm91dHB1dENvdW50PW4udWludDMyKCk7YnJlYWs7Y2FzZSA1OmEuaXNUcmltbWVkPW4uYm9vbCgpO2JyZWFrO2Nhc2UgNjphLmJ1bmRsZUlkPWkuVVVJRC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3ByZXZpZXdJbmRleDowLHByZXZpZXdDb3VudDowLG91dHB1dEluZGV4OjAsb3V0cHV0Q291bnQ6MCxpc1RyaW1tZWQ6ITEsYnVuZGxlSWQ6dm9pZCAwfTtyZXR1cm4gdC5wcmV2aWV3SW5kZXg9ZS5wcmV2aWV3SW5kZXg/PzAsdC5wcmV2aWV3Q291bnQ9ZS5wcmV2aWV3Q291bnQ/PzAsdC5vdXRwdXRJbmRleD1lLm91dHB1dEluZGV4Pz8wLHQub3V0cHV0Q291bnQ9ZS5vdXRwdXRDb3VudD8/MCx0LmlzVHJpbW1lZD1lLmlzVHJpbW1lZD8/ITEsdC5idW5kbGVJZD12b2lkIDAhPT1lLmJ1bmRsZUlkJiZudWxsIT09ZS5idW5kbGVJZD9pLlVVSUQuZnJvbVBhcnRpYWwoZS5idW5kbGVJZCk6dm9pZCAwLHR9fX0sMTY1OTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5MZW5zPXZvaWQgMDtjb25zdCBpPXIobig0MTU4MykpLG89bigxMTY2NCksYT1yKG4oNjIxMDApKTt0LkxlbnM9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIjBcIiE9PWUuaWQmJnQudWludDMyKDgpLmludDY0KGUuaWQpLHZvaWQgMCE9PWUuc25hcHBhYmxlJiZvLlNuYXBwYWJsZU1lc3NhZ2UuZW5jb2RlKGUuc25hcHBhYmxlLHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLFwiXCIhPT1lLnJhbmtpbmdJZCYmdC51aW50MzIoMjYpLnN0cmluZyhlLnJhbmtpbmdJZCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtpZDpcIjBcIixzbmFwcGFibGU6dm9pZCAwLHJhbmtpbmdJZDpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5pZD1uLmludDY0KCkudG9TdHJpbmcoKTticmVhaztjYXNlIDI6aS5zbmFwcGFibGU9by5TbmFwcGFibGVNZXNzYWdlLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMzppLnJhbmtpbmdJZD1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17aWQ6XCIwXCIsc25hcHBhYmxlOnZvaWQgMCxyYW5raW5nSWQ6XCJcIn07cmV0dXJuIHQuaWQ9ZS5pZD8/XCIwXCIsdC5zbmFwcGFibGU9dm9pZCAwIT09ZS5zbmFwcGFibGUmJm51bGwhPT1lLnNuYXBwYWJsZT9vLlNuYXBwYWJsZU1lc3NhZ2UuZnJvbVBhcnRpYWwoZS5zbmFwcGFibGUpOnZvaWQgMCx0LnJhbmtpbmdJZD1lLnJhbmtpbmdJZD8/XCJcIix0fX0sYS5kZWZhdWx0LnV0aWwuTG9uZyE9PWkuZGVmYXVsdCYmKGEuZGVmYXVsdC51dGlsLkxvbmc9aS5kZWZhdWx0LGEuZGVmYXVsdC5jb25maWd1cmUoKSl9LDg4Mjk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTGVuc0Nhcm91c2VsX0xlbnNTY2FuY29kZT10LkxlbnNDYXJvdXNlbD12b2lkIDA7Y29uc3QgaT1yKG4oNjIxMDApKTt0LkxlbnNDYXJvdXNlbD17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO2Zvcihjb25zdCByIG9mIGUubGVuc2VzKXQuTGVuc0Nhcm91c2VsX0xlbnNTY2FuY29kZS5lbmNvZGUocixuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm5cIlwiIT09ZS5pZCYmbi51aW50MzIoMTgpLnN0cmluZyhlLmlkKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IG89dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGE9e2xlbnNlczpbXSxpZDpcIlwifTtmb3IoO3IucG9zPG87KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS5sZW5zZXMucHVzaCh0LkxlbnNDYXJvdXNlbF9MZW5zU2NhbmNvZGUuZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2Nhc2UgMjphLmlkPXIuc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtsZW5zZXM6W10saWQ6XCJcIn07cmV0dXJuIG4ubGVuc2VzPWUubGVuc2VzPy5tYXAoKGU9PnQuTGVuc0Nhcm91c2VsX0xlbnNTY2FuY29kZS5mcm9tUGFydGlhbChlKSkpfHxbXSxuLmlkPWUuaWQ/P1wiXCIsbn19LHQuTGVuc0Nhcm91c2VsX0xlbnNTY2FuY29kZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmxlbnNTY2FuY29kZUlkJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUubGVuc1NjYW5jb2RlSWQpLDAhPT1lLnNjYW5jb2RlVmVyc2lvbiYmdC51aW50MzIoMTYpLmludDMyKGUuc2NhbmNvZGVWZXJzaW9uKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e2xlbnNTY2FuY29kZUlkOlwiXCIsc2NhbmNvZGVWZXJzaW9uOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLmxlbnNTY2FuY29kZUlkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOm8uc2NhbmNvZGVWZXJzaW9uPW4uaW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2xlbnNTY2FuY29kZUlkOlwiXCIsc2NhbmNvZGVWZXJzaW9uOjB9O3JldHVybiB0LmxlbnNTY2FuY29kZUlkPWUubGVuc1NjYW5jb2RlSWQ/P1wiXCIsdC5zY2FuY29kZVZlcnNpb249ZS5zY2FuY29kZVZlcnNpb24/PzAsdH19fSw1MzQzNTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Mb2NhdGlvbj12b2lkIDA7Y29uc3QgaT1yKG4oNjIxMDApKTt0LkxvY2F0aW9uPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLmFsdGl0dWRlJiZ0LnVpbnQzMig5KS5kb3VibGUoZS5hbHRpdHVkZSksMCE9PWUuaG9yaXpvbnRhbEFjY3VyYWN5JiZ0LnVpbnQzMigxNykuZG91YmxlKGUuaG9yaXpvbnRhbEFjY3VyYWN5KSwwIT09ZS5sYXRpdHVkZSYmdC51aW50MzIoMjUpLmRvdWJsZShlLmxhdGl0dWRlKSwwIT09ZS5sb25naXR1ZGUmJnQudWludDMyKDMzKS5kb3VibGUoZS5sb25naXR1ZGUpLDAhPT1lLnNwZWVkJiZ0LnVpbnQzMig0MSkuZG91YmxlKGUuc3BlZWQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17YWx0aXR1ZGU6MCxob3Jpem9udGFsQWNjdXJhY3k6MCxsYXRpdHVkZTowLGxvbmdpdHVkZTowLHNwZWVkOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLmFsdGl0dWRlPW4uZG91YmxlKCk7YnJlYWs7Y2FzZSAyOm8uaG9yaXpvbnRhbEFjY3VyYWN5PW4uZG91YmxlKCk7YnJlYWs7Y2FzZSAzOm8ubGF0aXR1ZGU9bi5kb3VibGUoKTticmVhaztjYXNlIDQ6by5sb25naXR1ZGU9bi5kb3VibGUoKTticmVhaztjYXNlIDU6by5zcGVlZD1uLmRvdWJsZSgpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17YWx0aXR1ZGU6MCxob3Jpem9udGFsQWNjdXJhY3k6MCxsYXRpdHVkZTowLGxvbmdpdHVkZTowLHNwZWVkOjB9O3JldHVybiB0LmFsdGl0dWRlPWUuYWx0aXR1ZGU/PzAsdC5ob3Jpem9udGFsQWNjdXJhY3k9ZS5ob3Jpem9udGFsQWNjdXJhY3k/PzAsdC5sYXRpdHVkZT1lLmxhdGl0dWRlPz8wLHQubG9uZ2l0dWRlPWUubG9uZ2l0dWRlPz8wLHQuc3BlZWQ9ZS5zcGVlZD8/MCx0fX19LDk2Njk3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lkxvbmdmb3JtVmlkZW89dm9pZCAwO2NvbnN0IGk9cihuKDQxNTgzKSksbz1uKDg4MTY4KSxhPW4oMzg3MzEpLHM9cihuKDYyMTAwKSk7dC5Mb25nZm9ybVZpZGVvPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUuaWQmJnQudWludDMyKDE4KS5zdHJpbmcoZS5pZCksXCJcIiE9PWUucnNwVmlkZW9JZCYmdC51aW50MzIoMTMwKS5zdHJpbmcoZS5yc3BWaWRlb0lkKSxcIjBcIiE9PWUucnNwVmlkZW9GaXJzdEZyYW1lQXNzZXRJZCYmdC51aW50MzIoMTM2KS5pbnQ2NChlLnJzcFZpZGVvRmlyc3RGcmFtZUFzc2V0SWQpLFwiXCIhPT1lLm1hbmlmZXN0VXJsJiZ0LnVpbnQzMigxNDYpLnN0cmluZyhlLm1hbmlmZXN0VXJsKSxcIlwiIT09ZS5wcmV2aWV3VXJsJiZ0LnVpbnQzMigxNTQpLnN0cmluZyhlLnByZXZpZXdVcmwpLFwiXCIhPT1lLnRodW1ibmFpbFVybCYmdC51aW50MzIoMTYyKS5zdHJpbmcoZS50aHVtYm5haWxVcmwpLFwiXCIhPT1lLnBvc3RlclVybCYmdC51aW50MzIoMTcwKS5zdHJpbmcoZS5wb3N0ZXJVcmwpLCEwPT09ZS5oYXNDYXB0aW9ucyYmdC51aW50MzIoMTc2KS5ib29sKGUuaGFzQ2FwdGlvbnMpLHZvaWQgMCE9PWUudmlkZW9NZWRpYSYmby5NZWRpYVJlZmVyZW5jZS5lbmNvZGUoZS52aWRlb01lZGlhLHQudWludDMyKDE4NikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnZpZGVvTWVkaWFJZCYmYS5NZWRpYUlkLmVuY29kZShlLnZpZGVvTWVkaWFJZCx0LnVpbnQzMigyMDIpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5wbGFjZWhvbGRlckltYWdlJiZvLk1lZGlhUmVmZXJlbmNlLmVuY29kZShlLnBsYWNlaG9sZGVySW1hZ2UsdC51aW50MzIoMTk0KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUucGxhY2Vob2xkZXJJbWFnZUlkJiZhLk1lZGlhSWQuZW5jb2RlKGUucGxhY2Vob2xkZXJJbWFnZUlkLHQudWludDMyKDIxMCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBzLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2lkOlwiXCIscnNwVmlkZW9JZDpcIlwiLHJzcFZpZGVvRmlyc3RGcmFtZUFzc2V0SWQ6XCIwXCIsbWFuaWZlc3RVcmw6XCJcIixwcmV2aWV3VXJsOlwiXCIsdGh1bWJuYWlsVXJsOlwiXCIscG9zdGVyVXJsOlwiXCIsaGFzQ2FwdGlvbnM6ITEsdmlkZW9NZWRpYTp2b2lkIDAsdmlkZW9NZWRpYUlkOnZvaWQgMCxwbGFjZWhvbGRlckltYWdlOnZvaWQgMCxwbGFjZWhvbGRlckltYWdlSWQ6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDI6aS5pZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMTY6aS5yc3BWaWRlb0lkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAxNzppLnJzcFZpZGVvRmlyc3RGcmFtZUFzc2V0SWQ9bi5pbnQ2NCgpLnRvU3RyaW5nKCk7YnJlYWs7Y2FzZSAxODppLm1hbmlmZXN0VXJsPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAxOTppLnByZXZpZXdVcmw9bi5zdHJpbmcoKTticmVhaztjYXNlIDIwOmkudGh1bWJuYWlsVXJsPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyMTppLnBvc3RlclVybD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjI6aS5oYXNDYXB0aW9ucz1uLmJvb2woKTticmVhaztjYXNlIDIzOmkudmlkZW9NZWRpYT1vLk1lZGlhUmVmZXJlbmNlLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMjU6aS52aWRlb01lZGlhSWQ9YS5NZWRpYUlkLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMjQ6aS5wbGFjZWhvbGRlckltYWdlPW8uTWVkaWFSZWZlcmVuY2UuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAyNjppLnBsYWNlaG9sZGVySW1hZ2VJZD1hLk1lZGlhSWQuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtpZDpcIlwiLHJzcFZpZGVvSWQ6XCJcIixyc3BWaWRlb0ZpcnN0RnJhbWVBc3NldElkOlwiMFwiLG1hbmlmZXN0VXJsOlwiXCIscHJldmlld1VybDpcIlwiLHRodW1ibmFpbFVybDpcIlwiLHBvc3RlclVybDpcIlwiLGhhc0NhcHRpb25zOiExLHZpZGVvTWVkaWE6dm9pZCAwLHZpZGVvTWVkaWFJZDp2b2lkIDAscGxhY2Vob2xkZXJJbWFnZTp2b2lkIDAscGxhY2Vob2xkZXJJbWFnZUlkOnZvaWQgMH07cmV0dXJuIHQuaWQ9ZS5pZD8/XCJcIix0LnJzcFZpZGVvSWQ9ZS5yc3BWaWRlb0lkPz9cIlwiLHQucnNwVmlkZW9GaXJzdEZyYW1lQXNzZXRJZD1lLnJzcFZpZGVvRmlyc3RGcmFtZUFzc2V0SWQ/P1wiMFwiLHQubWFuaWZlc3RVcmw9ZS5tYW5pZmVzdFVybD8/XCJcIix0LnByZXZpZXdVcmw9ZS5wcmV2aWV3VXJsPz9cIlwiLHQudGh1bWJuYWlsVXJsPWUudGh1bWJuYWlsVXJsPz9cIlwiLHQucG9zdGVyVXJsPWUucG9zdGVyVXJsPz9cIlwiLHQuaGFzQ2FwdGlvbnM9ZS5oYXNDYXB0aW9ucz8/ITEsdC52aWRlb01lZGlhPXZvaWQgMCE9PWUudmlkZW9NZWRpYSYmbnVsbCE9PWUudmlkZW9NZWRpYT9vLk1lZGlhUmVmZXJlbmNlLmZyb21QYXJ0aWFsKGUudmlkZW9NZWRpYSk6dm9pZCAwLHQudmlkZW9NZWRpYUlkPXZvaWQgMCE9PWUudmlkZW9NZWRpYUlkJiZudWxsIT09ZS52aWRlb01lZGlhSWQ/YS5NZWRpYUlkLmZyb21QYXJ0aWFsKGUudmlkZW9NZWRpYUlkKTp2b2lkIDAsdC5wbGFjZWhvbGRlckltYWdlPXZvaWQgMCE9PWUucGxhY2Vob2xkZXJJbWFnZSYmbnVsbCE9PWUucGxhY2Vob2xkZXJJbWFnZT9vLk1lZGlhUmVmZXJlbmNlLmZyb21QYXJ0aWFsKGUucGxhY2Vob2xkZXJJbWFnZSk6dm9pZCAwLHQucGxhY2Vob2xkZXJJbWFnZUlkPXZvaWQgMCE9PWUucGxhY2Vob2xkZXJJbWFnZUlkJiZudWxsIT09ZS5wbGFjZWhvbGRlckltYWdlSWQ/YS5NZWRpYUlkLmZyb21QYXJ0aWFsKGUucGxhY2Vob2xkZXJJbWFnZUlkKTp2b2lkIDAsdH19LHMuZGVmYXVsdC51dGlsLkxvbmchPT1pLmRlZmF1bHQmJihzLmRlZmF1bHQudXRpbC5Mb25nPWkuZGVmYXVsdCxzLmRlZmF1bHQuY29uZmlndXJlKCkpfSw0NDUzNzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5NZWRpYU1ldGFkYXRhX0xlZ2FjeU1lZGlhU291cmNlX0xlZ2FjeURpcmVjdERvd25sb2FkVXJsPXQuTWVkaWFNZXRhZGF0YV9MZWdhY3lNZWRpYVNvdXJjZT10Lk1lZGlhTWV0YWRhdGFfTWVkaWFFbmNyeXB0aW9uSW5mbz10Lk1lZGlhTWV0YWRhdGFfTWVkaWFEaW1lbnNpb25zPXQuTWVkaWFNZXRhZGF0YT10LlZpZGVvTWV0YWRhdGE9dC5JbWFnZU1ldGFkYXRhPXQuQXVkaW9NZXRhZGF0YT10Lk1lZGlhTWV0YWRhdGFfTGVnYWN5TWVkaWFTb3VyY2VfTGVnYWN5RGlyZWN0RG93bmxvYWRVcmxfTWVkaWFVcmxUeXBlPXQuTWVkaWFNZXRhZGF0YV9NZWRpYVR5cGU9dC5NZWRpYU1ldGFkYXRhX0Rpc3BsYXlPcmllbnRhdGlvbj10Lk1lZGlhTWV0YWRhdGFfT3JpZW50YXRpb249dm9pZCAwO2NvbnN0IGk9cihuKDQxNTgzKSksbz1uKDM4NzMxKSxhPW4oNDU5NDgpLHM9big4ODE2OCksYz1yKG4oNjIxMDApKTtmdW5jdGlvbiBsKCl7cmV0dXJue2tleTpuZXcgVWludDhBcnJheSxpdjpuZXcgVWludDhBcnJheX19dmFyIHUsZCxmLHA7KHA9dC5NZWRpYU1ldGFkYXRhX09yaWVudGF0aW9ufHwodC5NZWRpYU1ldGFkYXRhX09yaWVudGF0aW9uPXt9KSlbcC5WRVJUSUNBTD0wXT1cIlZFUlRJQ0FMXCIscFtwLkhPUklaT05UQUw9MV09XCJIT1JJWk9OVEFMXCIscFtwLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwoZj10Lk1lZGlhTWV0YWRhdGFfRGlzcGxheU9yaWVudGF0aW9ufHwodC5NZWRpYU1ldGFkYXRhX0Rpc3BsYXlPcmllbnRhdGlvbj17fSkpW2YuVU5TRVQ9MF09XCJVTlNFVFwiLGZbZi5VUD0xXT1cIlVQXCIsZltmLkRPV049Ml09XCJET1dOXCIsZltmLkxFRlQ9M109XCJMRUZUXCIsZltmLlJJR0hUPTRdPVwiUklHSFRcIixmW2YuVVBfTUlSUk9SRUQ9NV09XCJVUF9NSVJST1JFRFwiLGZbZi5ET1dOX01JUlJPUkVEPTZdPVwiRE9XTl9NSVJST1JFRFwiLGZbZi5MRUZUX01JUlJPUkVEPTddPVwiTEVGVF9NSVJST1JFRFwiLGZbZi5SSUdIVF9NSVJST1JFRD04XT1cIlJJR0hUX01JUlJPUkVEXCIsZltmLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwoZD10Lk1lZGlhTWV0YWRhdGFfTWVkaWFUeXBlfHwodC5NZWRpYU1ldGFkYXRhX01lZGlhVHlwZT17fSkpW2QuSU1BR0U9MF09XCJJTUFHRVwiLGRbZC5WSURFTz0xXT1cIlZJREVPXCIsZFtkLkdJRj0yXT1cIkdJRlwiLGRbZC5BVURJTz0zXT1cIkFVRElPXCIsZFtkLlVOS05PV049NF09XCJVTktOT1dOXCIsZFtkLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwodT10Lk1lZGlhTWV0YWRhdGFfTGVnYWN5TWVkaWFTb3VyY2VfTGVnYWN5RGlyZWN0RG93bmxvYWRVcmxfTWVkaWFVcmxUeXBlfHwodC5NZWRpYU1ldGFkYXRhX0xlZ2FjeU1lZGlhU291cmNlX0xlZ2FjeURpcmVjdERvd25sb2FkVXJsX01lZGlhVXJsVHlwZT17fSkpW3UuR0NTPTBdPVwiR0NTXCIsdVt1LlMzPTFdPVwiUzNcIix1W3UuVU5SRUNPR05JWkVEX1ZBTFVFPTJdPVwiVU5SRUNPR05JWkVEX1ZBTFVFXCIsdVt1LlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0LkF1ZGlvTWV0YWRhdGE9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Yy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUuY29kZWNGb3JtYXQmJnQudWludDMyKDgpLmludDMyKGUuY29kZWNGb3JtYXQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17Y29kZWNGb3JtYXQ6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2kuY29kZWNGb3JtYXQ9bi5pbnQzMigpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17Y29kZWNGb3JtYXQ6MH07cmV0dXJuIHQuY29kZWNGb3JtYXQ9ZS5jb2RlY0Zvcm1hdD8/MCx0fX0sdC5JbWFnZU1ldGFkYXRhPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLmNvZGVjRm9ybWF0JiZ0LnVpbnQzMig4KS5pbnQzMihlLmNvZGVjRm9ybWF0KSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBjLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2NvZGVjRm9ybWF0OjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLmNvZGVjRm9ybWF0PW4uaW50MzIoKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2NvZGVjRm9ybWF0OjB9O3JldHVybiB0LmNvZGVjRm9ybWF0PWUuY29kZWNGb3JtYXQ/PzAsdH19LHQuVmlkZW9NZXRhZGF0YT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpjLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5jb2RlY0Zvcm1hdCYmdC51aW50MzIoOCkuaW50MzIoZS5jb2RlY0Zvcm1hdCksMCE9PWUuY29udGFpbmVyRm9ybWF0JiZ0LnVpbnQzMigxNikuaW50MzIoZS5jb250YWluZXJGb3JtYXQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17Y29kZWNGb3JtYXQ6MCxjb250YWluZXJGb3JtYXQ6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuY29kZWNGb3JtYXQ9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMjppLmNvbnRhaW5lckZvcm1hdD1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtjb2RlY0Zvcm1hdDowLGNvbnRhaW5lckZvcm1hdDowfTtyZXR1cm4gdC5jb2RlY0Zvcm1hdD1lLmNvZGVjRm9ybWF0Pz8wLHQuY29udGFpbmVyRm9ybWF0PWUuY29udGFpbmVyRm9ybWF0Pz8wLHR9fSx0Lk1lZGlhTWV0YWRhdGE9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Yy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUub3JpZW50YXRpb24mJm4udWludDMyKDI0KS5pbnQzMihlLm9yaWVudGF0aW9uKSx2b2lkIDAhPT1lLmRpbWVuc2lvbnMmJnQuTWVkaWFNZXRhZGF0YV9NZWRpYURpbWVuc2lvbnMuZW5jb2RlKGUuZGltZW5zaW9ucyxuLnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS5tZWRpYUR1cmF0aW9uTXMmJm4udWludDMyKDEyMCkudWludDMyKGUubWVkaWFEdXJhdGlvbk1zKSx2b2lkIDAhPT1lLm1lZGlhSWQmJm8uTWVkaWFJZC5lbmNvZGUoZS5tZWRpYUlkLG4udWludDMyKDE0NikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmVuY3J5cHRpb25JbmZvVjEmJnQuTWVkaWFNZXRhZGF0YV9NZWRpYUVuY3J5cHRpb25JbmZvLmVuY29kZShlLmVuY3J5cHRpb25JbmZvVjEsbi51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5lbmNyeXB0aW9uSW5mb1YyJiZ0Lk1lZGlhTWV0YWRhdGFfTWVkaWFFbmNyeXB0aW9uSW5mby5lbmNvZGUoZS5lbmNyeXB0aW9uSW5mb1YyLG4udWludDMyKDE1NCkuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS5hc3NldFR5cGUmJm4udWludDMyKDE2MCkuaW50MzIoZS5hc3NldFR5cGUpLHZvaWQgMCE9PWUuY2FwdHVyZUNoYXJhY3RlcmlzdGljcyYmYS5DYXB0dXJlQ2hhcmFjdGVyaXN0aWNzLmVuY29kZShlLmNhcHR1cmVDaGFyYWN0ZXJpc3RpY3Msbi51aW50MzIoMTcwKS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLmRpc3BsYXlPcmllbnRhdGlvbiYmbi51aW50MzIoMTc2KS5pbnQzMihlLmRpc3BsYXlPcmllbnRhdGlvbiksdm9pZCAwIT09ZS5hdWRpbyYmdC5BdWRpb01ldGFkYXRhLmVuY29kZShlLmF1ZGlvLG4udWludDMyKDE4NikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmltYWdlJiZ0LkltYWdlTWV0YWRhdGEuZW5jb2RlKGUuaW1hZ2Usbi51aW50MzIoMTk0KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUudmlkZW8mJnQuVmlkZW9NZXRhZGF0YS5lbmNvZGUoZS52aWRlbyxuLnVpbnQzMigyMDIpLmZvcmsoKSkubGRlbGltKCksMCE9PWUudHlwZSYmbi51aW50MzIoMTYpLmludDMyKGUudHlwZSksXCJsZWdhY3lNZWRpYVNvdXJjZVwiPT09ZS5zb3VyY2VNZWRpYT8uJGNhc2UmJnQuTWVkaWFNZXRhZGF0YV9MZWdhY3lNZWRpYVNvdXJjZS5lbmNvZGUoZS5zb3VyY2VNZWRpYS5sZWdhY3lNZWRpYVNvdXJjZSxuLnVpbnQzMig1MCkuZm9yaygpKS5sZGVsaW0oKSxcImNvbnRlbnREZXNjcmlwdG9yXCI9PT1lLnNvdXJjZU1lZGlhPy4kY2FzZSYmbi51aW50MzIoNTgpLmJ5dGVzKGUuc291cmNlTWVkaWEuY29udGVudERlc2NyaXB0b3IpLFwiXCIhPT1lLm1lZGlhVXJsJiZuLnVpbnQzMig3NCkuc3RyaW5nKGUubWVkaWFVcmwpLCEwPT09ZS5oYXNTb3VuZCYmbi51aW50MzIoOTYpLmJvb2woZS5oYXNTb3VuZCksITA9PT1lLnppcHBlZCYmbi51aW50MzIoMTA0KS5ib29sKGUuemlwcGVkKSwhMD09PWUuZnJvbnRGYWNpbmcmJm4udWludDMyKDExMikuYm9vbChlLmZyb250RmFjaW5nKSx2b2lkIDAhPT1lLm1lZGlhUmVmZXJlbmNlJiZzLk1lZGlhUmVmZXJlbmNlLmVuY29kZShlLm1lZGlhUmVmZXJlbmNlLG4udWludDMyKDEzOCkuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBjLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGw9e29yaWVudGF0aW9uOjAsZGltZW5zaW9uczp2b2lkIDAsbWVkaWFEdXJhdGlvbk1zOjAsbWVkaWFJZDp2b2lkIDAsZW5jcnlwdGlvbkluZm9WMTp2b2lkIDAsZW5jcnlwdGlvbkluZm9WMjp2b2lkIDAsYXNzZXRUeXBlOjAsY2FwdHVyZUNoYXJhY3RlcmlzdGljczp2b2lkIDAsZGlzcGxheU9yaWVudGF0aW9uOjAsYXVkaW86dm9pZCAwLGltYWdlOnZvaWQgMCx2aWRlbzp2b2lkIDAsdHlwZTowLHNvdXJjZU1lZGlhOnZvaWQgMCxtZWRpYVVybDpcIlwiLGhhc1NvdW5kOiExLHppcHBlZDohMSxmcm9udEZhY2luZzohMSxtZWRpYVJlZmVyZW5jZTp2b2lkIDB9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMzpsLm9yaWVudGF0aW9uPXIuaW50MzIoKTticmVhaztjYXNlIDU6bC5kaW1lbnNpb25zPXQuTWVkaWFNZXRhZGF0YV9NZWRpYURpbWVuc2lvbnMuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAxNTpsLm1lZGlhRHVyYXRpb25Ncz1yLnVpbnQzMigpO2JyZWFrO2Nhc2UgMTg6bC5tZWRpYUlkPW8uTWVkaWFJZC5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDQ6bC5lbmNyeXB0aW9uSW5mb1YxPXQuTWVkaWFNZXRhZGF0YV9NZWRpYUVuY3J5cHRpb25JbmZvLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMTk6bC5lbmNyeXB0aW9uSW5mb1YyPXQuTWVkaWFNZXRhZGF0YV9NZWRpYUVuY3J5cHRpb25JbmZvLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMjA6bC5hc3NldFR5cGU9ci5pbnQzMigpO2JyZWFrO2Nhc2UgMjE6bC5jYXB0dXJlQ2hhcmFjdGVyaXN0aWNzPWEuQ2FwdHVyZUNoYXJhY3RlcmlzdGljcy5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDIyOmwuZGlzcGxheU9yaWVudGF0aW9uPXIuaW50MzIoKTticmVhaztjYXNlIDIzOmwuYXVkaW89dC5BdWRpb01ldGFkYXRhLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMjQ6bC5pbWFnZT10LkltYWdlTWV0YWRhdGEuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyNTpsLnZpZGVvPXQuVmlkZW9NZXRhZGF0YS5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDI6bC50eXBlPXIuaW50MzIoKTticmVhaztjYXNlIDY6bC5zb3VyY2VNZWRpYT17JGNhc2U6XCJsZWdhY3lNZWRpYVNvdXJjZVwiLGxlZ2FjeU1lZGlhU291cmNlOnQuTWVkaWFNZXRhZGF0YV9MZWdhY3lNZWRpYVNvdXJjZS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA3Omwuc291cmNlTWVkaWE9eyRjYXNlOlwiY29udGVudERlc2NyaXB0b3JcIixjb250ZW50RGVzY3JpcHRvcjpyLmJ5dGVzKCl9O2JyZWFrO2Nhc2UgOTpsLm1lZGlhVXJsPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSAxMjpsLmhhc1NvdW5kPXIuYm9vbCgpO2JyZWFrO2Nhc2UgMTM6bC56aXBwZWQ9ci5ib29sKCk7YnJlYWs7Y2FzZSAxNDpsLmZyb250RmFjaW5nPXIuYm9vbCgpO2JyZWFrO2Nhc2UgMTc6bC5tZWRpYVJlZmVyZW5jZT1zLk1lZGlhUmVmZXJlbmNlLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gbH0sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17b3JpZW50YXRpb246MCxkaW1lbnNpb25zOnZvaWQgMCxtZWRpYUR1cmF0aW9uTXM6MCxtZWRpYUlkOnZvaWQgMCxlbmNyeXB0aW9uSW5mb1YxOnZvaWQgMCxlbmNyeXB0aW9uSW5mb1YyOnZvaWQgMCxhc3NldFR5cGU6MCxjYXB0dXJlQ2hhcmFjdGVyaXN0aWNzOnZvaWQgMCxkaXNwbGF5T3JpZW50YXRpb246MCxhdWRpbzp2b2lkIDAsaW1hZ2U6dm9pZCAwLHZpZGVvOnZvaWQgMCx0eXBlOjAsc291cmNlTWVkaWE6dm9pZCAwLG1lZGlhVXJsOlwiXCIsaGFzU291bmQ6ITEsemlwcGVkOiExLGZyb250RmFjaW5nOiExLG1lZGlhUmVmZXJlbmNlOnZvaWQgMH07cmV0dXJuIG4ub3JpZW50YXRpb249ZS5vcmllbnRhdGlvbj8/MCxuLmRpbWVuc2lvbnM9dm9pZCAwIT09ZS5kaW1lbnNpb25zJiZudWxsIT09ZS5kaW1lbnNpb25zP3QuTWVkaWFNZXRhZGF0YV9NZWRpYURpbWVuc2lvbnMuZnJvbVBhcnRpYWwoZS5kaW1lbnNpb25zKTp2b2lkIDAsbi5tZWRpYUR1cmF0aW9uTXM9ZS5tZWRpYUR1cmF0aW9uTXM/PzAsbi5tZWRpYUlkPXZvaWQgMCE9PWUubWVkaWFJZCYmbnVsbCE9PWUubWVkaWFJZD9vLk1lZGlhSWQuZnJvbVBhcnRpYWwoZS5tZWRpYUlkKTp2b2lkIDAsbi5lbmNyeXB0aW9uSW5mb1YxPXZvaWQgMCE9PWUuZW5jcnlwdGlvbkluZm9WMSYmbnVsbCE9PWUuZW5jcnlwdGlvbkluZm9WMT90Lk1lZGlhTWV0YWRhdGFfTWVkaWFFbmNyeXB0aW9uSW5mby5mcm9tUGFydGlhbChlLmVuY3J5cHRpb25JbmZvVjEpOnZvaWQgMCxuLmVuY3J5cHRpb25JbmZvVjI9dm9pZCAwIT09ZS5lbmNyeXB0aW9uSW5mb1YyJiZudWxsIT09ZS5lbmNyeXB0aW9uSW5mb1YyP3QuTWVkaWFNZXRhZGF0YV9NZWRpYUVuY3J5cHRpb25JbmZvLmZyb21QYXJ0aWFsKGUuZW5jcnlwdGlvbkluZm9WMik6dm9pZCAwLG4uYXNzZXRUeXBlPWUuYXNzZXRUeXBlPz8wLG4uY2FwdHVyZUNoYXJhY3RlcmlzdGljcz12b2lkIDAhPT1lLmNhcHR1cmVDaGFyYWN0ZXJpc3RpY3MmJm51bGwhPT1lLmNhcHR1cmVDaGFyYWN0ZXJpc3RpY3M/YS5DYXB0dXJlQ2hhcmFjdGVyaXN0aWNzLmZyb21QYXJ0aWFsKGUuY2FwdHVyZUNoYXJhY3RlcmlzdGljcyk6dm9pZCAwLG4uZGlzcGxheU9yaWVudGF0aW9uPWUuZGlzcGxheU9yaWVudGF0aW9uPz8wLG4uYXVkaW89dm9pZCAwIT09ZS5hdWRpbyYmbnVsbCE9PWUuYXVkaW8/dC5BdWRpb01ldGFkYXRhLmZyb21QYXJ0aWFsKGUuYXVkaW8pOnZvaWQgMCxuLmltYWdlPXZvaWQgMCE9PWUuaW1hZ2UmJm51bGwhPT1lLmltYWdlP3QuSW1hZ2VNZXRhZGF0YS5mcm9tUGFydGlhbChlLmltYWdlKTp2b2lkIDAsbi52aWRlbz12b2lkIDAhPT1lLnZpZGVvJiZudWxsIT09ZS52aWRlbz90LlZpZGVvTWV0YWRhdGEuZnJvbVBhcnRpYWwoZS52aWRlbyk6dm9pZCAwLG4udHlwZT1lLnR5cGU/PzAsXCJsZWdhY3lNZWRpYVNvdXJjZVwiPT09ZS5zb3VyY2VNZWRpYT8uJGNhc2UmJnZvaWQgMCE9PWUuc291cmNlTWVkaWE/LmxlZ2FjeU1lZGlhU291cmNlJiZudWxsIT09ZS5zb3VyY2VNZWRpYT8ubGVnYWN5TWVkaWFTb3VyY2UmJihuLnNvdXJjZU1lZGlhPXskY2FzZTpcImxlZ2FjeU1lZGlhU291cmNlXCIsbGVnYWN5TWVkaWFTb3VyY2U6dC5NZWRpYU1ldGFkYXRhX0xlZ2FjeU1lZGlhU291cmNlLmZyb21QYXJ0aWFsKGUuc291cmNlTWVkaWEubGVnYWN5TWVkaWFTb3VyY2UpfSksXCJjb250ZW50RGVzY3JpcHRvclwiPT09ZS5zb3VyY2VNZWRpYT8uJGNhc2UmJnZvaWQgMCE9PWUuc291cmNlTWVkaWE/LmNvbnRlbnREZXNjcmlwdG9yJiZudWxsIT09ZS5zb3VyY2VNZWRpYT8uY29udGVudERlc2NyaXB0b3ImJihuLnNvdXJjZU1lZGlhPXskY2FzZTpcImNvbnRlbnREZXNjcmlwdG9yXCIsY29udGVudERlc2NyaXB0b3I6ZS5zb3VyY2VNZWRpYS5jb250ZW50RGVzY3JpcHRvcn0pLG4ubWVkaWFVcmw9ZS5tZWRpYVVybD8/XCJcIixuLmhhc1NvdW5kPWUuaGFzU291bmQ/PyExLG4uemlwcGVkPWUuemlwcGVkPz8hMSxuLmZyb250RmFjaW5nPWUuZnJvbnRGYWNpbmc/PyExLG4ubWVkaWFSZWZlcmVuY2U9dm9pZCAwIT09ZS5tZWRpYVJlZmVyZW5jZSYmbnVsbCE9PWUubWVkaWFSZWZlcmVuY2U/cy5NZWRpYVJlZmVyZW5jZS5mcm9tUGFydGlhbChlLm1lZGlhUmVmZXJlbmNlKTp2b2lkIDAsbn19LHQuTWVkaWFNZXRhZGF0YV9NZWRpYURpbWVuc2lvbnM9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Yy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUud2lkdGgmJnQudWludDMyKDgpLnVpbnQzMihlLndpZHRoKSwwIT09ZS5oZWlnaHQmJnQudWludDMyKDE2KS51aW50MzIoZS5oZWlnaHQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17d2lkdGg6MCxoZWlnaHQ6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkud2lkdGg9bi51aW50MzIoKTticmVhaztjYXNlIDI6aS5oZWlnaHQ9bi51aW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3dpZHRoOjAsaGVpZ2h0OjB9O3JldHVybiB0LndpZHRoPWUud2lkdGg/PzAsdC5oZWlnaHQ9ZS5oZWlnaHQ/PzAsdH19LHQuTWVkaWFNZXRhZGF0YV9NZWRpYUVuY3J5cHRpb25JbmZvPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLmtleS5sZW5ndGgmJnQudWludDMyKDEwKS5ieXRlcyhlLmtleSksMCE9PWUuaXYubGVuZ3RoJiZ0LnVpbnQzMigxOCkuYnl0ZXMoZS5pdiksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBjLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPWwoKTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5rZXk9bi5ieXRlcygpO2JyZWFrO2Nhc2UgMjppLml2PW4uYnl0ZXMoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9bCgpO3JldHVybiB0LmtleT1lLmtleT8/bmV3IFVpbnQ4QXJyYXksdC5pdj1lLml2Pz9uZXcgVWludDhBcnJheSx0fX0sdC5NZWRpYU1ldGFkYXRhX0xlZ2FjeU1lZGlhU291cmNlPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUuc291cmNlTWVkaWFJZCYmbi51aW50MzIoMTApLnN0cmluZyhlLnNvdXJjZU1lZGlhSWQpLHZvaWQgMCE9PWUuZGlyZWN0RG93bmxvYWRVcmwmJnQuTWVkaWFNZXRhZGF0YV9MZWdhY3lNZWRpYVNvdXJjZV9MZWdhY3lEaXJlY3REb3dubG9hZFVybC5lbmNvZGUoZS5kaXJlY3REb3dubG9hZFVybCxuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBjLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89e3NvdXJjZU1lZGlhSWQ6XCJcIixkaXJlY3REb3dubG9hZFVybDp2b2lkIDB9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLnNvdXJjZU1lZGlhSWQ9ci5zdHJpbmcoKTticmVhaztjYXNlIDI6by5kaXJlY3REb3dubG9hZFVybD10Lk1lZGlhTWV0YWRhdGFfTGVnYWN5TWVkaWFTb3VyY2VfTGVnYWN5RGlyZWN0RG93bmxvYWRVcmwuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtzb3VyY2VNZWRpYUlkOlwiXCIsZGlyZWN0RG93bmxvYWRVcmw6dm9pZCAwfTtyZXR1cm4gbi5zb3VyY2VNZWRpYUlkPWUuc291cmNlTWVkaWFJZD8/XCJcIixuLmRpcmVjdERvd25sb2FkVXJsPXZvaWQgMCE9PWUuZGlyZWN0RG93bmxvYWRVcmwmJm51bGwhPT1lLmRpcmVjdERvd25sb2FkVXJsP3QuTWVkaWFNZXRhZGF0YV9MZWdhY3lNZWRpYVNvdXJjZV9MZWdhY3lEaXJlY3REb3dubG9hZFVybC5mcm9tUGFydGlhbChlLmRpcmVjdERvd25sb2FkVXJsKTp2b2lkIDAsbn19LHQuTWVkaWFNZXRhZGF0YV9MZWdhY3lNZWRpYVNvdXJjZV9MZWdhY3lEaXJlY3REb3dubG9hZFVybD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpjLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnVybCYmdC51aW50MzIoMTApLnN0cmluZyhlLnVybCksXCIwXCIhPT1lLmV4cGlyeVNlY29uZHMmJnQudWludDMyKDE2KS51aW50NjQoZS5leHBpcnlTZWNvbmRzKSwwIT09ZS50eXBlJiZ0LnVpbnQzMigyNCkuaW50MzIoZS50eXBlKSxcIlwiIT09ZS5yZWdpb24mJnQudWludDMyKDM0KS5zdHJpbmcoZS5yZWdpb24pLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17dXJsOlwiXCIsZXhwaXJ5U2Vjb25kczpcIjBcIix0eXBlOjAscmVnaW9uOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnVybD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLmV4cGlyeVNlY29uZHM9bi51aW50NjQoKS50b1N0cmluZygpO2JyZWFrO2Nhc2UgMzppLnR5cGU9bi5pbnQzMigpO2JyZWFrO2Nhc2UgNDppLnJlZ2lvbj1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dXJsOlwiXCIsZXhwaXJ5U2Vjb25kczpcIjBcIix0eXBlOjAscmVnaW9uOlwiXCJ9O3JldHVybiB0LnVybD1lLnVybD8/XCJcIix0LmV4cGlyeVNlY29uZHM9ZS5leHBpcnlTZWNvbmRzPz9cIjBcIix0LnR5cGU9ZS50eXBlPz8wLHQucmVnaW9uPWUucmVnaW9uPz9cIlwiLHR9fSxjLmRlZmF1bHQudXRpbC5Mb25nIT09aS5kZWZhdWx0JiYoYy5kZWZhdWx0LnV0aWwuTG9uZz1pLmRlZmF1bHQsYy5kZWZhdWx0LmNvbmZpZ3VyZSgpKX0sMTk3MjQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTWVkaWFFZmZlY3RzPXZvaWQgMDtjb25zdCBpPXIobig0MTU4MykpLG89bigxNjcxNCksYT1uKDIyNTgyKSxzPXIobig2MjEwMCkpO3QuTWVkaWFFZmZlY3RzPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUubGF5ZXJDb21wb3NpdGlvbiYmby5MYXllckNvbXBvc2l0aW9uLmVuY29kZShlLmxheWVyQ29tcG9zaXRpb24sdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5yZW5kZXJFZmZlY3RTY2VuZXMmJmEuUmVuZGVyRWZmZWN0U2NlbmVzLmVuY29kZShlLnJlbmRlckVmZmVjdFNjZW5lcyx0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSxcIjBcIiE9PWUubWVkaWFFZmZlY3RDYXBhYmlsdGllcyYmdC51aW50MzIoMjQpLnVpbnQ2NChlLm1lZGlhRWZmZWN0Q2FwYWJpbHRpZXMpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgcy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17bGF5ZXJDb21wb3NpdGlvbjp2b2lkIDAscmVuZGVyRWZmZWN0U2NlbmVzOnZvaWQgMCxtZWRpYUVmZmVjdENhcGFiaWx0aWVzOlwiMFwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5sYXllckNvbXBvc2l0aW9uPW8uTGF5ZXJDb21wb3NpdGlvbi5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDI6aS5yZW5kZXJFZmZlY3RTY2VuZXM9YS5SZW5kZXJFZmZlY3RTY2VuZXMuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAzOmkubWVkaWFFZmZlY3RDYXBhYmlsdGllcz1uLnVpbnQ2NCgpLnRvU3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtsYXllckNvbXBvc2l0aW9uOnZvaWQgMCxyZW5kZXJFZmZlY3RTY2VuZXM6dm9pZCAwLG1lZGlhRWZmZWN0Q2FwYWJpbHRpZXM6XCIwXCJ9O3JldHVybiB0LmxheWVyQ29tcG9zaXRpb249dm9pZCAwIT09ZS5sYXllckNvbXBvc2l0aW9uJiZudWxsIT09ZS5sYXllckNvbXBvc2l0aW9uP28uTGF5ZXJDb21wb3NpdGlvbi5mcm9tUGFydGlhbChlLmxheWVyQ29tcG9zaXRpb24pOnZvaWQgMCx0LnJlbmRlckVmZmVjdFNjZW5lcz12b2lkIDAhPT1lLnJlbmRlckVmZmVjdFNjZW5lcyYmbnVsbCE9PWUucmVuZGVyRWZmZWN0U2NlbmVzP2EuUmVuZGVyRWZmZWN0U2NlbmVzLmZyb21QYXJ0aWFsKGUucmVuZGVyRWZmZWN0U2NlbmVzKTp2b2lkIDAsdC5tZWRpYUVmZmVjdENhcGFiaWx0aWVzPWUubWVkaWFFZmZlY3RDYXBhYmlsdGllcz8/XCIwXCIsdH19LHMuZGVmYXVsdC51dGlsLkxvbmchPT1pLmRlZmF1bHQmJihzLmRlZmF1bHQudXRpbC5Mb25nPWkuZGVmYXVsdCxzLmRlZmF1bHQuY29uZmlndXJlKCkpfSwzODczMTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5NZWRpYUlkPXZvaWQgMDtjb25zdCBpPXIobig0MTU4MykpLG89cihuKDYyMTAwKSk7dC5NZWRpYUlkPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCIwXCIhPT1lLm1lZGlhTGlzdElkJiZ0LnVpbnQzMig4KS5pbnQ2NChlLm1lZGlhTGlzdElkKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e21lZGlhTGlzdElkOlwiMFwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/aS5tZWRpYUxpc3RJZD1uLmludDY0KCkudG9TdHJpbmcoKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e21lZGlhTGlzdElkOlwiMFwifTtyZXR1cm4gdC5tZWRpYUxpc3RJZD1lLm1lZGlhTGlzdElkPz9cIjBcIix0fX0sby5kZWZhdWx0LnV0aWwuTG9uZyE9PWkuZGVmYXVsdCYmKG8uZGVmYXVsdC51dGlsLkxvbmc9aS5kZWZhdWx0LG8uZGVmYXVsdC5jb25maWd1cmUoKSl9LDgzNTE4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk5vdGlmaWNhdGlvblNldHRpbmdzPXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO3QuTm90aWZpY2F0aW9uU2V0dGluZ3M9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5uYW1lc3BhY2UmJnQudWludDMyKDEwKS5zdHJpbmcoZS5uYW1lc3BhY2UpLFwiXCIhPT1lLmlkJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuaWQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17bmFtZXNwYWNlOlwiXCIsaWQ6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8ubmFtZXNwYWNlPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOm8uaWQ9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e25hbWVzcGFjZTpcIlwiLGlkOlwiXCJ9O3JldHVybiB0Lm5hbWVzcGFjZT1lLm5hbWVzcGFjZT8/XCJcIix0LmlkPWUuaWQ/P1wiXCIsdH19fSwzNDEyNjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Pd25lcl9JRD10Lk93bmVyPXQuT3duZXJfSURfT3duZXJOYW1lc3BhY2U9dm9pZCAwO2NvbnN0IGk9cihuKDYyMTAwKSk7dmFyIG87KG89dC5Pd25lcl9JRF9Pd25lck5hbWVzcGFjZXx8KHQuT3duZXJfSURfT3duZXJOYW1lc3BhY2U9e30pKVtvLlVOU0VUPTBdPVwiVU5TRVRcIixvW28uRElTQ09WRVJfUFVCTElTSEVSPTFdPVwiRElTQ09WRVJfUFVCTElTSEVSXCIsb1tvLkJVU0lORVNTX0FDQ09VTlQ9Ml09XCJCVVNJTkVTU19BQ0NPVU5UXCIsb1tvLkJVU0lORVNTX1BST0ZJTEU9M109XCJCVVNJTkVTU19QUk9GSUxFXCIsb1tvLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0Lk93bmVyPXtlbmNvZGUoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpfSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtuLnNraXBUeXBlKDcmZSl9cmV0dXJue319LGZyb21QYXJ0aWFsOmU9Pih7fSl9LHQuT3duZXJfSUQ9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUubmFtZXNwYWNlJiZ0LnVpbnQzMig4KS5pbnQzMihlLm5hbWVzcGFjZSksXCJcIiE9PWUuaWQmJnQudWludDMyKDE4KS5zdHJpbmcoZS5pZCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXtuYW1lc3BhY2U6MCxpZDpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5uYW1lc3BhY2U9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMjpvLmlkPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtuYW1lc3BhY2U6MCxpZDpcIlwifTtyZXR1cm4gdC5uYW1lc3BhY2U9ZS5uYW1lc3BhY2U/PzAsdC5pZD1lLmlkPz9cIlwiLHR9fX0sNzg3OTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5QYWNrYWdpbmdfT3ZlcmxheT10LlBhY2thZ2luZ19QYWNrYWdlZFZpZGVvPXQuUGFja2FnaW5nX1BhY2thZ2VkSW1hZ2U9dC5QYWNrYWdpbmc9dC5QYWNrYWdpbmdfUGFja2FnZWRWaWRlb19WaWRlb01vZGU9dC5QYWNrYWdpbmdfRG9ja2luZz10LlBhY2thZ2luZ19QYWNrYWdlRm9ybWF0PXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO3ZhciBvLGEsczsocz10LlBhY2thZ2luZ19QYWNrYWdlRm9ybWF0fHwodC5QYWNrYWdpbmdfUGFja2FnZUZvcm1hdD17fSkpW3MuVU5LTk9XTj0wXT1cIlVOS05PV05cIixzW3MuUklDSF9TTkFQX1pJUD0xXT1cIlJJQ0hfU05BUF9aSVBcIixzW3MuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLChhPXQuUGFja2FnaW5nX0RvY2tpbmd8fCh0LlBhY2thZ2luZ19Eb2NraW5nPXt9KSlbYS5ET0NLSU5HX0NFTlRFUj0wXT1cIkRPQ0tJTkdfQ0VOVEVSXCIsYVthLkRPQ0tJTkdfVE9QPTFdPVwiRE9DS0lOR19UT1BcIixhW2EuRE9DS0lOR19CT1RUT009Ml09XCJET0NLSU5HX0JPVFRPTVwiLGFbYS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKG89dC5QYWNrYWdpbmdfUGFja2FnZWRWaWRlb19WaWRlb01vZGV8fCh0LlBhY2thZ2luZ19QYWNrYWdlZFZpZGVvX1ZpZGVvTW9kZT17fSkpW28uVklERU9fTU9ERV9VTlNFVD0wXT1cIlZJREVPX01PREVfVU5TRVRcIixvW28uVklERU9fTU9ERV9MT09QSU5HPTFdPVwiVklERU9fTU9ERV9MT09QSU5HXCIsb1tvLlZJREVPX01PREVfT05DRT0yXT1cIlZJREVPX01PREVfT05DRVwiLG9bby5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsdC5QYWNrYWdpbmc9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06aS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTswIT09ZS5wYWNrYWdlRm9ybWF0JiZuLnVpbnQzMig4KS5pbnQzMihlLnBhY2thZ2VGb3JtYXQpLFwiXCIhPT1lLnBhY2thZ2VVcmwmJm4udWludDMyKDE4KS5zdHJpbmcoZS5wYWNrYWdlVXJsKSx2b2lkIDAhPT1lLnBhY2thZ2VkSW1hZ2UmJnQuUGFja2FnaW5nX1BhY2thZ2VkSW1hZ2UuZW5jb2RlKGUucGFja2FnZWRJbWFnZSxuLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnBhY2thZ2VkVmlkZW8mJnQuUGFja2FnaW5nX1BhY2thZ2VkVmlkZW8uZW5jb2RlKGUucGFja2FnZWRWaWRlbyxuLnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLm92ZXJsYXkmJnQuUGFja2FnaW5nX092ZXJsYXkuZW5jb2RlKGUub3ZlcmxheSxuLnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKSxcIlwiIT09ZS5sYXRlc3RQYWNrYWdlSWQmJm4udWludDMyKDUwKS5zdHJpbmcoZS5sYXRlc3RQYWNrYWdlSWQpO2Zvcihjb25zdCB0IG9mIGUubGF0ZXN0UGFja2FnZVZhcmlhbnRzKW4udWludDMyKDU4KS5zdHJpbmcodCk7cmV0dXJuXCJcIiE9PWUubGF0ZXN0SGFzaCYmbi51aW50MzIoNjYpLnN0cmluZyhlLmxhdGVzdEhhc2gpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgbz12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3QgYT17cGFja2FnZUZvcm1hdDowLHBhY2thZ2VVcmw6XCJcIixwYWNrYWdlZEltYWdlOnZvaWQgMCxwYWNrYWdlZFZpZGVvOnZvaWQgMCxvdmVybGF5OnZvaWQgMCxsYXRlc3RQYWNrYWdlSWQ6XCJcIixsYXRlc3RQYWNrYWdlVmFyaWFudHM6W10sbGF0ZXN0SGFzaDpcIlwifTtmb3IoO3IucG9zPG87KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS5wYWNrYWdlRm9ybWF0PXIuaW50MzIoKTticmVhaztjYXNlIDI6YS5wYWNrYWdlVXJsPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmEucGFja2FnZWRJbWFnZT10LlBhY2thZ2luZ19QYWNrYWdlZEltYWdlLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgNDphLnBhY2thZ2VkVmlkZW89dC5QYWNrYWdpbmdfUGFja2FnZWRWaWRlby5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDU6YS5vdmVybGF5PXQuUGFja2FnaW5nX092ZXJsYXkuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSA2OmEubGF0ZXN0UGFja2FnZUlkPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSA3OmEubGF0ZXN0UGFja2FnZVZhcmlhbnRzLnB1c2goci5zdHJpbmcoKSk7YnJlYWs7Y2FzZSA4OmEubGF0ZXN0SGFzaD1yLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17cGFja2FnZUZvcm1hdDowLHBhY2thZ2VVcmw6XCJcIixwYWNrYWdlZEltYWdlOnZvaWQgMCxwYWNrYWdlZFZpZGVvOnZvaWQgMCxvdmVybGF5OnZvaWQgMCxsYXRlc3RQYWNrYWdlSWQ6XCJcIixsYXRlc3RQYWNrYWdlVmFyaWFudHM6W10sbGF0ZXN0SGFzaDpcIlwifTtyZXR1cm4gbi5wYWNrYWdlRm9ybWF0PWUucGFja2FnZUZvcm1hdD8/MCxuLnBhY2thZ2VVcmw9ZS5wYWNrYWdlVXJsPz9cIlwiLG4ucGFja2FnZWRJbWFnZT12b2lkIDAhPT1lLnBhY2thZ2VkSW1hZ2UmJm51bGwhPT1lLnBhY2thZ2VkSW1hZ2U/dC5QYWNrYWdpbmdfUGFja2FnZWRJbWFnZS5mcm9tUGFydGlhbChlLnBhY2thZ2VkSW1hZ2UpOnZvaWQgMCxuLnBhY2thZ2VkVmlkZW89dm9pZCAwIT09ZS5wYWNrYWdlZFZpZGVvJiZudWxsIT09ZS5wYWNrYWdlZFZpZGVvP3QuUGFja2FnaW5nX1BhY2thZ2VkVmlkZW8uZnJvbVBhcnRpYWwoZS5wYWNrYWdlZFZpZGVvKTp2b2lkIDAsbi5vdmVybGF5PXZvaWQgMCE9PWUub3ZlcmxheSYmbnVsbCE9PWUub3ZlcmxheT90LlBhY2thZ2luZ19PdmVybGF5LmZyb21QYXJ0aWFsKGUub3ZlcmxheSk6dm9pZCAwLG4ubGF0ZXN0UGFja2FnZUlkPWUubGF0ZXN0UGFja2FnZUlkPz9cIlwiLG4ubGF0ZXN0UGFja2FnZVZhcmlhbnRzPWUubGF0ZXN0UGFja2FnZVZhcmlhbnRzPy5tYXAoKGU9PmUpKXx8W10sbi5sYXRlc3RIYXNoPWUubGF0ZXN0SGFzaD8/XCJcIixufX0sdC5QYWNrYWdpbmdfUGFja2FnZWRJbWFnZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmZpbGVuYW1lJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUuZmlsZW5hbWUpLDAhPT1lLmRvY2tpbmcmJnQudWludDMyKDE2KS5pbnQzMihlLmRvY2tpbmcpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17ZmlsZW5hbWU6XCJcIixkb2NraW5nOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLmZpbGVuYW1lPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOm8uZG9ja2luZz1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtmaWxlbmFtZTpcIlwiLGRvY2tpbmc6MH07cmV0dXJuIHQuZmlsZW5hbWU9ZS5maWxlbmFtZT8/XCJcIix0LmRvY2tpbmc9ZS5kb2NraW5nPz8wLHR9fSx0LlBhY2thZ2luZ19QYWNrYWdlZFZpZGVvPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUuZmlsZW5hbWUmJnQudWludDMyKDEwKS5zdHJpbmcoZS5maWxlbmFtZSksMCE9PWUudmlkZW9Nb2RlJiZ0LnVpbnQzMigxNikuaW50MzIoZS52aWRlb01vZGUpLFwiXCIhPT1lLnZpZGVvRmlyc3RGcmFtZUZpbGVuYW1lJiZ0LnVpbnQzMigyNikuc3RyaW5nKGUudmlkZW9GaXJzdEZyYW1lRmlsZW5hbWUpLCEwPT09ZS52aWRlb1JvdGF0aW9uRW5hYmxlZCYmdC51aW50MzIoMzIpLmJvb2woZS52aWRlb1JvdGF0aW9uRW5hYmxlZCksMCE9PWUuZG9ja2luZyYmdC51aW50MzIoNDApLmludDMyKGUuZG9ja2luZyksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXtmaWxlbmFtZTpcIlwiLHZpZGVvTW9kZTowLHZpZGVvRmlyc3RGcmFtZUZpbGVuYW1lOlwiXCIsdmlkZW9Sb3RhdGlvbkVuYWJsZWQ6ITEsZG9ja2luZzowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5maWxlbmFtZT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjpvLnZpZGVvTW9kZT1uLmludDMyKCk7YnJlYWs7Y2FzZSAzOm8udmlkZW9GaXJzdEZyYW1lRmlsZW5hbWU9bi5zdHJpbmcoKTticmVhaztjYXNlIDQ6by52aWRlb1JvdGF0aW9uRW5hYmxlZD1uLmJvb2woKTticmVhaztjYXNlIDU6by5kb2NraW5nPW4uaW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2ZpbGVuYW1lOlwiXCIsdmlkZW9Nb2RlOjAsdmlkZW9GaXJzdEZyYW1lRmlsZW5hbWU6XCJcIix2aWRlb1JvdGF0aW9uRW5hYmxlZDohMSxkb2NraW5nOjB9O3JldHVybiB0LmZpbGVuYW1lPWUuZmlsZW5hbWU/P1wiXCIsdC52aWRlb01vZGU9ZS52aWRlb01vZGU/PzAsdC52aWRlb0ZpcnN0RnJhbWVGaWxlbmFtZT1lLnZpZGVvRmlyc3RGcmFtZUZpbGVuYW1lPz9cIlwiLHQudmlkZW9Sb3RhdGlvbkVuYWJsZWQ9ZS52aWRlb1JvdGF0aW9uRW5hYmxlZD8/ITEsdC5kb2NraW5nPWUuZG9ja2luZz8/MCx0fX0sdC5QYWNrYWdpbmdfT3ZlcmxheT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmZpbGVuYW1lJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUuZmlsZW5hbWUpLDAhPT1lLmRvY2tpbmcmJnQudWludDMyKDE2KS5pbnQzMihlLmRvY2tpbmcpLDAhPT1lLnpJbmRleCYmdC51aW50MzIoMjQpLmludDMyKGUuekluZGV4KSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e2ZpbGVuYW1lOlwiXCIsZG9ja2luZzowLHpJbmRleDowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5maWxlbmFtZT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjpvLmRvY2tpbmc9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMzpvLnpJbmRleD1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtmaWxlbmFtZTpcIlwiLGRvY2tpbmc6MCx6SW5kZXg6MH07cmV0dXJuIHQuZmlsZW5hbWU9ZS5maWxlbmFtZT8/XCJcIix0LmRvY2tpbmc9ZS5kb2NraW5nPz8wLHQuekluZGV4PWUuekluZGV4Pz8wLHR9fX0sODk3NzI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuUGVybWl0dGVkVXNlckFjdGlvbnM9dC5QZXJtaXR0ZWRVc2VyQWN0aW9uc19SZXBvcnRPcHRpb249dC5QZXJtaXR0ZWRVc2VyQWN0aW9uc19TaGFyZU9wdGlvbj12b2lkIDA7Y29uc3QgaT1yKG4oNjIxMDApKTt2YXIgbyxhOyhhPXQuUGVybWl0dGVkVXNlckFjdGlvbnNfU2hhcmVPcHRpb258fCh0LlBlcm1pdHRlZFVzZXJBY3Rpb25zX1NoYXJlT3B0aW9uPXt9KSlbYS5OT19TSEFSRT0wXT1cIk5PX1NIQVJFXCIsYVthLlNIQVJFX0FWQUlMQUJMRT0xXT1cIlNIQVJFX0FWQUlMQUJMRVwiLGFbYS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKG89dC5QZXJtaXR0ZWRVc2VyQWN0aW9uc19SZXBvcnRPcHRpb258fCh0LlBlcm1pdHRlZFVzZXJBY3Rpb25zX1JlcG9ydE9wdGlvbj17fSkpW28uUkVQT1JUX09QVElPTl9VTktOT1dOPTBdPVwiUkVQT1JUX09QVElPTl9VTktOT1dOXCIsb1tvLlJFUE9SVF9PUFRJT05fRElTQUJMRUQ9MV09XCJSRVBPUlRfT1BUSU9OX0RJU0FCTEVEXCIsb1tvLlJFUE9SVF9PUFRJT05fRU5BQkxFRD0yXT1cIlJFUE9SVF9PUFRJT05fRU5BQkxFRFwiLG9bby5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsdC5QZXJtaXR0ZWRVc2VyQWN0aW9ucz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5zaGFyZU9wdGlvbiYmdC51aW50MzIoOCkuaW50MzIoZS5zaGFyZU9wdGlvbiksMCE9PWUucmVwb3J0T3B0aW9uJiZ0LnVpbnQzMigxNikuaW50MzIoZS5yZXBvcnRPcHRpb24pLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17c2hhcmVPcHRpb246MCxyZXBvcnRPcHRpb246MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8uc2hhcmVPcHRpb249bi5pbnQzMigpO2JyZWFrO2Nhc2UgMjpvLnJlcG9ydE9wdGlvbj1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtzaGFyZU9wdGlvbjowLHJlcG9ydE9wdGlvbjowfTtyZXR1cm4gdC5zaGFyZU9wdGlvbj1lLnNoYXJlT3B0aW9uPz8wLHQucmVwb3J0T3B0aW9uPWUucmVwb3J0T3B0aW9uPz8wLHR9fX0sODc5MDA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuUGxhY2VNZXRhZGF0YT12b2lkIDA7Y29uc3QgaT1uKDUxNTk4KSxvPXIobig2MjEwMCkpO3QuUGxhY2VNZXRhZGF0YT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLnRhZ2dlZFBsYWNlSWQmJmkuVVVJRC5lbmNvZGUoZS50YWdnZWRQbGFjZUlkLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgYT17dGFnZ2VkUGxhY2VJZDp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9hLnRhZ2dlZFBsYWNlSWQ9aS5VVUlELmRlY29kZShuLG4udWludDMyKCkpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dGFnZ2VkUGxhY2VJZDp2b2lkIDB9O3JldHVybiB0LnRhZ2dlZFBsYWNlSWQ9dm9pZCAwIT09ZS50YWdnZWRQbGFjZUlkJiZudWxsIT09ZS50YWdnZWRQbGFjZUlkP2kuVVVJRC5mcm9tUGFydGlhbChlLnRhZ2dlZFBsYWNlSWQpOnZvaWQgMCx0fX19LDY5MjUxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlBsYXliYWNrPXZvaWQgMDtjb25zdCBpPW4oNzcyMjApLG89big1NzI4NyksYT1uKDEwMDg4KSxzPW4oNDQ1MzcpLGM9bigxOTcyNCksbD1yKG4oNjIxMDApKTt0LlBsYXliYWNrPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmwuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7Zm9yKGNvbnN0IG4gb2YgZS5wbGF5YmFja0xheWVycylpLlBsYXliYWNrTGF5ZXIuZW5jb2RlKG4sdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIHZvaWQgMCE9PWUucGxheWJhY2tDaGFyYWN0ZXJpc3RpY3MmJm8uUGxheWJhY2tDaGFyYWN0ZXJpc3RpY3MuZW5jb2RlKGUucGxheWJhY2tDaGFyYWN0ZXJpc3RpY3MsdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5zdWJ0aXRsZXMmJmEuU3VidGl0bGVzLmVuY29kZShlLnN1YnRpdGxlcyx0LnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmZpcnN0RnJhbWUmJnMuTWVkaWFNZXRhZGF0YS5lbmNvZGUoZS5maXJzdEZyYW1lLHQudWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUubWVkaWFFZmZlY3RzJiZjLk1lZGlhRWZmZWN0cy5lbmNvZGUoZS5tZWRpYUVmZmVjdHMsdC51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKCksMCE9PWUucGxheWJhY2tMYXllckluZGV4Q291bnRlciYmdC51aW50MzIoNDgpLnVpbnQzMihlLnBsYXliYWNrTGF5ZXJJbmRleENvdW50ZXIpLDAhPT1lLmNhcHR1cmVNb2RlJiZ0LnVpbnQzMig1NikuaW50MzIoZS5jYXB0dXJlTW9kZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgbC5kZWZhdWx0LlJlYWRlcj9lOm5ldyBsLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCB1PXtwbGF5YmFja0xheWVyczpbXSxwbGF5YmFja0NoYXJhY3RlcmlzdGljczp2b2lkIDAsc3VidGl0bGVzOnZvaWQgMCxmaXJzdEZyYW1lOnZvaWQgMCxtZWRpYUVmZmVjdHM6dm9pZCAwLHBsYXliYWNrTGF5ZXJJbmRleENvdW50ZXI6MCxjYXB0dXJlTW9kZTowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6dS5wbGF5YmFja0xheWVycy5wdXNoKGkuUGxheWJhY2tMYXllci5kZWNvZGUobixuLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAyOnUucGxheWJhY2tDaGFyYWN0ZXJpc3RpY3M9by5QbGF5YmFja0NoYXJhY3RlcmlzdGljcy5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDM6dS5zdWJ0aXRsZXM9YS5TdWJ0aXRsZXMuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSA0OnUuZmlyc3RGcmFtZT1zLk1lZGlhTWV0YWRhdGEuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSA1OnUubWVkaWFFZmZlY3RzPWMuTWVkaWFFZmZlY3RzLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgNjp1LnBsYXliYWNrTGF5ZXJJbmRleENvdW50ZXI9bi51aW50MzIoKTticmVhaztjYXNlIDc6dS5jYXB0dXJlTW9kZT1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiB1fSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtwbGF5YmFja0xheWVyczpbXSxwbGF5YmFja0NoYXJhY3RlcmlzdGljczp2b2lkIDAsc3VidGl0bGVzOnZvaWQgMCxmaXJzdEZyYW1lOnZvaWQgMCxtZWRpYUVmZmVjdHM6dm9pZCAwLHBsYXliYWNrTGF5ZXJJbmRleENvdW50ZXI6MCxjYXB0dXJlTW9kZTowfTtyZXR1cm4gdC5wbGF5YmFja0xheWVycz1lLnBsYXliYWNrTGF5ZXJzPy5tYXAoKGU9PmkuUGxheWJhY2tMYXllci5mcm9tUGFydGlhbChlKSkpfHxbXSx0LnBsYXliYWNrQ2hhcmFjdGVyaXN0aWNzPXZvaWQgMCE9PWUucGxheWJhY2tDaGFyYWN0ZXJpc3RpY3MmJm51bGwhPT1lLnBsYXliYWNrQ2hhcmFjdGVyaXN0aWNzP28uUGxheWJhY2tDaGFyYWN0ZXJpc3RpY3MuZnJvbVBhcnRpYWwoZS5wbGF5YmFja0NoYXJhY3RlcmlzdGljcyk6dm9pZCAwLHQuc3VidGl0bGVzPXZvaWQgMCE9PWUuc3VidGl0bGVzJiZudWxsIT09ZS5zdWJ0aXRsZXM/YS5TdWJ0aXRsZXMuZnJvbVBhcnRpYWwoZS5zdWJ0aXRsZXMpOnZvaWQgMCx0LmZpcnN0RnJhbWU9dm9pZCAwIT09ZS5maXJzdEZyYW1lJiZudWxsIT09ZS5maXJzdEZyYW1lP3MuTWVkaWFNZXRhZGF0YS5mcm9tUGFydGlhbChlLmZpcnN0RnJhbWUpOnZvaWQgMCx0Lm1lZGlhRWZmZWN0cz12b2lkIDAhPT1lLm1lZGlhRWZmZWN0cyYmbnVsbCE9PWUubWVkaWFFZmZlY3RzP2MuTWVkaWFFZmZlY3RzLmZyb21QYXJ0aWFsKGUubWVkaWFFZmZlY3RzKTp2b2lkIDAsdC5wbGF5YmFja0xheWVySW5kZXhDb3VudGVyPWUucGxheWJhY2tMYXllckluZGV4Q291bnRlcj8/MCx0LmNhcHR1cmVNb2RlPWUuY2FwdHVyZU1vZGU/PzAsdH19fSw1NzI4NzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5TZWVrUG9pbnRNZXRhZGF0YT10LlBsYXliYWNrQ2hhcmFjdGVyaXN0aWNzPXZvaWQgMDtjb25zdCBpPXIobig0MTU4MykpLG89cihuKDYyMTAwKSksYT1uKDgxNDQ1KTtmdW5jdGlvbiBzKGUpe3JldHVybiBlLnRvU3RyaW5nKCl9dC5QbGF5YmFja0NoYXJhY3RlcmlzdGljcz17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO1wiaW5maW5pdGVcIj09PWUuZGlzcGxheUR1cmF0aW9uPy4kY2FzZSYmYS5FbXB0eS5lbmNvZGUoZS5kaXNwbGF5RHVyYXRpb24uaW5maW5pdGUsbi51aW50MzIoNTApLmZvcmsoKSkubGRlbGltKCksXCJwbGF5T25jZVwiPT09ZS5kaXNwbGF5RHVyYXRpb24/LiRjYXNlJiZhLkVtcHR5LmVuY29kZShlLmRpc3BsYXlEdXJhdGlvbi5wbGF5T25jZSxuLnVpbnQzMig1OCkuZm9yaygpKS5sZGVsaW0oKSxcImR1cmF0aW9uU2Vjb25kc1wiPT09ZS5kaXNwbGF5RHVyYXRpb24/LiRjYXNlJiZuLnVpbnQzMig2NCkudWludDMyKGUuZGlzcGxheUR1cmF0aW9uLmR1cmF0aW9uU2Vjb25kcyksITA9PT1lLmhhc1NvdW5kJiZuLnVpbnQzMig0MCkuYm9vbChlLmhhc1NvdW5kKSxuLnVpbnQzMig3NCkuZm9yaygpO2Zvcihjb25zdCB0IG9mIGUuc2Vla1BvaW50c01zKW4uaW50NjQodCk7bi5sZGVsaW0oKTtmb3IoY29uc3QgciBvZiBlLnNlZWtQb2ludHNNZXRhZGF0YSl0LlNlZWtQb2ludE1ldGFkYXRhLmVuY29kZShyLG4udWludDMyKDgyKS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiBufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGM9e2Rpc3BsYXlEdXJhdGlvbjp2b2lkIDAsaGFzU291bmQ6ITEsc2Vla1BvaW50c01zOltdLHNlZWtQb2ludHNNZXRhZGF0YTpbXX07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSA2OmMuZGlzcGxheUR1cmF0aW9uPXskY2FzZTpcImluZmluaXRlXCIsaW5maW5pdGU6YS5FbXB0eS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA3OmMuZGlzcGxheUR1cmF0aW9uPXskY2FzZTpcInBsYXlPbmNlXCIscGxheU9uY2U6YS5FbXB0eS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA4OmMuZGlzcGxheUR1cmF0aW9uPXskY2FzZTpcImR1cmF0aW9uU2Vjb25kc1wiLGR1cmF0aW9uU2Vjb25kczpyLnVpbnQzMigpfTticmVhaztjYXNlIDU6Yy5oYXNTb3VuZD1yLmJvb2woKTticmVhaztjYXNlIDk6aWYoMj09KDcmZSkpe2NvbnN0IGU9ci51aW50MzIoKStyLnBvcztmb3IoO3IucG9zPGU7KWMuc2Vla1BvaW50c01zLnB1c2gocyhyLmludDY0KCkpKX1lbHNlIGMuc2Vla1BvaW50c01zLnB1c2gocyhyLmludDY0KCkpKTticmVhaztjYXNlIDEwOmMuc2Vla1BvaW50c01ldGFkYXRhLnB1c2godC5TZWVrUG9pbnRNZXRhZGF0YS5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBjfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtkaXNwbGF5RHVyYXRpb246dm9pZCAwLGhhc1NvdW5kOiExLHNlZWtQb2ludHNNczpbXSxzZWVrUG9pbnRzTWV0YWRhdGE6W119O3JldHVyblwiaW5maW5pdGVcIj09PWUuZGlzcGxheUR1cmF0aW9uPy4kY2FzZSYmdm9pZCAwIT09ZS5kaXNwbGF5RHVyYXRpb24/LmluZmluaXRlJiZudWxsIT09ZS5kaXNwbGF5RHVyYXRpb24/LmluZmluaXRlJiYobi5kaXNwbGF5RHVyYXRpb249eyRjYXNlOlwiaW5maW5pdGVcIixpbmZpbml0ZTphLkVtcHR5LmZyb21QYXJ0aWFsKGUuZGlzcGxheUR1cmF0aW9uLmluZmluaXRlKX0pLFwicGxheU9uY2VcIj09PWUuZGlzcGxheUR1cmF0aW9uPy4kY2FzZSYmdm9pZCAwIT09ZS5kaXNwbGF5RHVyYXRpb24/LnBsYXlPbmNlJiZudWxsIT09ZS5kaXNwbGF5RHVyYXRpb24/LnBsYXlPbmNlJiYobi5kaXNwbGF5RHVyYXRpb249eyRjYXNlOlwicGxheU9uY2VcIixwbGF5T25jZTphLkVtcHR5LmZyb21QYXJ0aWFsKGUuZGlzcGxheUR1cmF0aW9uLnBsYXlPbmNlKX0pLFwiZHVyYXRpb25TZWNvbmRzXCI9PT1lLmRpc3BsYXlEdXJhdGlvbj8uJGNhc2UmJnZvaWQgMCE9PWUuZGlzcGxheUR1cmF0aW9uPy5kdXJhdGlvblNlY29uZHMmJm51bGwhPT1lLmRpc3BsYXlEdXJhdGlvbj8uZHVyYXRpb25TZWNvbmRzJiYobi5kaXNwbGF5RHVyYXRpb249eyRjYXNlOlwiZHVyYXRpb25TZWNvbmRzXCIsZHVyYXRpb25TZWNvbmRzOmUuZGlzcGxheUR1cmF0aW9uLmR1cmF0aW9uU2Vjb25kc30pLG4uaGFzU291bmQ9ZS5oYXNTb3VuZD8/ITEsbi5zZWVrUG9pbnRzTXM9ZS5zZWVrUG9pbnRzTXM/Lm1hcCgoZT0+ZSkpfHxbXSxuLnNlZWtQb2ludHNNZXRhZGF0YT1lLnNlZWtQb2ludHNNZXRhZGF0YT8ubWFwKChlPT50LlNlZWtQb2ludE1ldGFkYXRhLmZyb21QYXJ0aWFsKGUpKSl8fFtdLG59fSx0LlNlZWtQb2ludE1ldGFkYXRhPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCIwXCIhPT1lLmNoYXB0ZXJJZCYmdC51aW50MzIoOCkuaW50NjQoZS5jaGFwdGVySWQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17Y2hhcHRlcklkOlwiMFwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/aS5jaGFwdGVySWQ9cyhuLmludDY0KCkpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17Y2hhcHRlcklkOlwiMFwifTtyZXR1cm4gdC5jaGFwdGVySWQ9ZS5jaGFwdGVySWQ/P1wiMFwiLHR9fSxvLmRlZmF1bHQudXRpbC5Mb25nIT09aS5kZWZhdWx0JiYoby5kZWZhdWx0LnV0aWwuTG9uZz1pLmRlZmF1bHQsby5kZWZhdWx0LmNvbmZpZ3VyZSgpKX0sNzcyMjA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuUGxheWJhY2tMYXllcj10LkxheWVyUHJvcGVydGllcz12b2lkIDA7Y29uc3QgaT1uKDMwOTA5KSxvPW4oMTYyNDUpLGE9big3MjU2KSxzPW4oODg4KSxjPW4oMjA4OTkpLGw9big0NDUzNyksdT1uKDQ2NTEzKSxkPW4oMzg5NDEpLGY9big2MTc2KSxwPXIobig2MjEwMCkpO3QuTGF5ZXJQcm9wZXJ0aWVzPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnAuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLndpZHRoJiZ0LnVpbnQzMig4OCkudWludDMyKGUud2lkdGgpLDAhPT1lLmhlaWdodCYmdC51aW50MzIoOTYpLnVpbnQzMihlLmhlaWdodCksdm9pZCAwIT09ZS50cmFuc2Zvcm1zJiZpLlRyYW5zZm9ybXMuZW5jb2RlKGUudHJhbnNmb3Jtcyx0LnVpbnQzMigxMDYpLmZvcmsoKSkubGRlbGltKCksMCE9PWUucGxheWJhY2tSYXRlTXVsdGlwbGllciYmdC51aW50MzIoNjkpLmZsb2F0KGUucGxheWJhY2tSYXRlTXVsdGlwbGllciksMCE9PWUuZnJhbWVSYXRlJiZ0LnVpbnQzMig3NykuZmxvYXQoZS5mcmFtZVJhdGUpLHZvaWQgMCE9PWUucGxheWJhY2tTcGVlZE11bHRpcGxpZXImJm8uUGxheWJhY2tTcGVlZE11bHRpcGxpZXIuZW5jb2RlKGUucGxheWJhY2tTcGVlZE11bHRpcGxpZXIsdC51aW50MzIoODIpLmZvcmsoKSkubGRlbGltKCksMCE9PWUucmVsYXRpdmVXaWR0aCYmdC51aW50MzIoMTMpLmZsb2F0KGUucmVsYXRpdmVXaWR0aCksMCE9PWUucmVsYXRpdmVIZWlnaHQmJnQudWludDMyKDIxKS5mbG9hdChlLnJlbGF0aXZlSGVpZ2h0KSwwIT09ZS5jZW50ZXJYJiZ0LnVpbnQzMigyOSkuZmxvYXQoZS5jZW50ZXJYKSwwIT09ZS5jZW50ZXJZJiZ0LnVpbnQzMigzNykuZmxvYXQoZS5jZW50ZXJZKSwwIT09ZS5yb3RhdGlvbkluRGVncmVlcyYmdC51aW50MzIoNDUpLmZsb2F0KGUucm90YXRpb25JbkRlZ3JlZXMpLHZvaWQgMCE9PWUuc3RhcnRUaW1lTXMmJmEuVGltZUluc3RhbnQuZW5jb2RlKGUuc3RhcnRUaW1lTXMsdC51aW50MzIoNTApLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5kdXJhdGlvbk1zJiZhLlRpbWVJbnN0YW50LmVuY29kZShlLmR1cmF0aW9uTXMsdC51aW50MzIoNTgpLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgcC5kZWZhdWx0LlJlYWRlcj9lOm5ldyBwLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBzPXt3aWR0aDowLGhlaWdodDowLHRyYW5zZm9ybXM6dm9pZCAwLHBsYXliYWNrUmF0ZU11bHRpcGxpZXI6MCxmcmFtZVJhdGU6MCxwbGF5YmFja1NwZWVkTXVsdGlwbGllcjp2b2lkIDAscmVsYXRpdmVXaWR0aDowLHJlbGF0aXZlSGVpZ2h0OjAsY2VudGVyWDowLGNlbnRlclk6MCxyb3RhdGlvbkluRGVncmVlczowLHN0YXJ0VGltZU1zOnZvaWQgMCxkdXJhdGlvbk1zOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxMTpzLndpZHRoPW4udWludDMyKCk7YnJlYWs7Y2FzZSAxMjpzLmhlaWdodD1uLnVpbnQzMigpO2JyZWFrO2Nhc2UgMTM6cy50cmFuc2Zvcm1zPWkuVHJhbnNmb3Jtcy5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDg6cy5wbGF5YmFja1JhdGVNdWx0aXBsaWVyPW4uZmxvYXQoKTticmVhaztjYXNlIDk6cy5mcmFtZVJhdGU9bi5mbG9hdCgpO2JyZWFrO2Nhc2UgMTA6cy5wbGF5YmFja1NwZWVkTXVsdGlwbGllcj1vLlBsYXliYWNrU3BlZWRNdWx0aXBsaWVyLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMTpzLnJlbGF0aXZlV2lkdGg9bi5mbG9hdCgpO2JyZWFrO2Nhc2UgMjpzLnJlbGF0aXZlSGVpZ2h0PW4uZmxvYXQoKTticmVhaztjYXNlIDM6cy5jZW50ZXJYPW4uZmxvYXQoKTticmVhaztjYXNlIDQ6cy5jZW50ZXJZPW4uZmxvYXQoKTticmVhaztjYXNlIDU6cy5yb3RhdGlvbkluRGVncmVlcz1uLmZsb2F0KCk7YnJlYWs7Y2FzZSA2OnMuc3RhcnRUaW1lTXM9YS5UaW1lSW5zdGFudC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDc6cy5kdXJhdGlvbk1zPWEuVGltZUluc3RhbnQuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBzfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt3aWR0aDowLGhlaWdodDowLHRyYW5zZm9ybXM6dm9pZCAwLHBsYXliYWNrUmF0ZU11bHRpcGxpZXI6MCxmcmFtZVJhdGU6MCxwbGF5YmFja1NwZWVkTXVsdGlwbGllcjp2b2lkIDAscmVsYXRpdmVXaWR0aDowLHJlbGF0aXZlSGVpZ2h0OjAsY2VudGVyWDowLGNlbnRlclk6MCxyb3RhdGlvbkluRGVncmVlczowLHN0YXJ0VGltZU1zOnZvaWQgMCxkdXJhdGlvbk1zOnZvaWQgMH07cmV0dXJuIHQud2lkdGg9ZS53aWR0aD8/MCx0LmhlaWdodD1lLmhlaWdodD8/MCx0LnRyYW5zZm9ybXM9dm9pZCAwIT09ZS50cmFuc2Zvcm1zJiZudWxsIT09ZS50cmFuc2Zvcm1zP2kuVHJhbnNmb3Jtcy5mcm9tUGFydGlhbChlLnRyYW5zZm9ybXMpOnZvaWQgMCx0LnBsYXliYWNrUmF0ZU11bHRpcGxpZXI9ZS5wbGF5YmFja1JhdGVNdWx0aXBsaWVyPz8wLHQuZnJhbWVSYXRlPWUuZnJhbWVSYXRlPz8wLHQucGxheWJhY2tTcGVlZE11bHRpcGxpZXI9dm9pZCAwIT09ZS5wbGF5YmFja1NwZWVkTXVsdGlwbGllciYmbnVsbCE9PWUucGxheWJhY2tTcGVlZE11bHRpcGxpZXI/by5QbGF5YmFja1NwZWVkTXVsdGlwbGllci5mcm9tUGFydGlhbChlLnBsYXliYWNrU3BlZWRNdWx0aXBsaWVyKTp2b2lkIDAsdC5yZWxhdGl2ZVdpZHRoPWUucmVsYXRpdmVXaWR0aD8/MCx0LnJlbGF0aXZlSGVpZ2h0PWUucmVsYXRpdmVIZWlnaHQ/PzAsdC5jZW50ZXJYPWUuY2VudGVyWD8/MCx0LmNlbnRlclk9ZS5jZW50ZXJZPz8wLHQucm90YXRpb25JbkRlZ3JlZXM9ZS5yb3RhdGlvbkluRGVncmVlcz8/MCx0LnN0YXJ0VGltZU1zPXZvaWQgMCE9PWUuc3RhcnRUaW1lTXMmJm51bGwhPT1lLnN0YXJ0VGltZU1zP2EuVGltZUluc3RhbnQuZnJvbVBhcnRpYWwoZS5zdGFydFRpbWVNcyk6dm9pZCAwLHQuZHVyYXRpb25Ncz12b2lkIDAhPT1lLmR1cmF0aW9uTXMmJm51bGwhPT1lLmR1cmF0aW9uTXM/YS5UaW1lSW5zdGFudC5mcm9tUGFydGlhbChlLmR1cmF0aW9uTXMpOnZvaWQgMCx0fX0sdC5QbGF5YmFja0xheWVyPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnAuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJtZWRpYVwiPT09ZS5sYXllcj8uJGNhc2UmJmwuTWVkaWFNZXRhZGF0YS5lbmNvZGUoZS5sYXllci5tZWRpYSxuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSxcImNhcHRpb25cIj09PWUubGF5ZXI/LiRjYXNlJiZ1LkNhcHRpb24uZW5jb2RlKGUubGF5ZXIuY2FwdGlvbixuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSxcIndlYlBhZ2VcIj09PWUubGF5ZXI/LiRjYXNlJiZkLldlYlBhZ2UuZW5jb2RlKGUubGF5ZXIud2ViUGFnZSxuLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSxcImN0SXRlbVwiPT09ZS5sYXllcj8uJGNhc2UmJmYuQ1RJdGVtSW5zdGFuY2UuZW5jb2RlKGUubGF5ZXIuY3RJdGVtLG4udWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUucHJvcGVydGllcyYmdC5MYXllclByb3BlcnRpZXMuZW5jb2RlKGUucHJvcGVydGllcyxuLnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS5wbGF5YmFja0xheWVySW5kZXgmJm4udWludDMyKDQ4KS51aW50MzIoZS5wbGF5YmFja0xheWVySW5kZXgpLHZvaWQgMCE9PWUuY3JlYXRpdmVFZGl0VGFnJiZzLkNyZWF0aXZlRWRpdFRhZy5lbmNvZGUoZS5jcmVhdGl2ZUVkaXRUYWcsbi51aW50MzIoNTgpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5lZGl0Q2FwYWJpbGl0aWVzJiZjLkVkaXRDYXBhYmlsaXRpZXMuZW5jb2RlKGUuZWRpdENhcGFiaWxpdGllcyxuLnVpbnQzMig2NikuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBwLmRlZmF1bHQuUmVhZGVyP2U6bmV3IHAuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IG89e2xheWVyOnZvaWQgMCxwcm9wZXJ0aWVzOnZvaWQgMCxwbGF5YmFja0xheWVySW5kZXg6MCxjcmVhdGl2ZUVkaXRUYWc6dm9pZCAwLGVkaXRDYXBhYmlsaXRpZXM6dm9pZCAwfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5sYXllcj17JGNhc2U6XCJtZWRpYVwiLG1lZGlhOmwuTWVkaWFNZXRhZGF0YS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAyOm8ubGF5ZXI9eyRjYXNlOlwiY2FwdGlvblwiLGNhcHRpb246dS5DYXB0aW9uLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDM6by5sYXllcj17JGNhc2U6XCJ3ZWJQYWdlXCIsd2ViUGFnZTpkLldlYlBhZ2UuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgNDpvLmxheWVyPXskY2FzZTpcImN0SXRlbVwiLGN0SXRlbTpmLkNUSXRlbUluc3RhbmNlLmRlY29kZShyLHIudWludDMyKCkpfTticmVhaztjYXNlIDU6by5wcm9wZXJ0aWVzPXQuTGF5ZXJQcm9wZXJ0aWVzLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgNjpvLnBsYXliYWNrTGF5ZXJJbmRleD1yLnVpbnQzMigpO2JyZWFrO2Nhc2UgNzpvLmNyZWF0aXZlRWRpdFRhZz1zLkNyZWF0aXZlRWRpdFRhZy5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDg6by5lZGl0Q2FwYWJpbGl0aWVzPWMuRWRpdENhcGFiaWxpdGllcy5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e2xheWVyOnZvaWQgMCxwcm9wZXJ0aWVzOnZvaWQgMCxwbGF5YmFja0xheWVySW5kZXg6MCxjcmVhdGl2ZUVkaXRUYWc6dm9pZCAwLGVkaXRDYXBhYmlsaXRpZXM6dm9pZCAwfTtyZXR1cm5cIm1lZGlhXCI9PT1lLmxheWVyPy4kY2FzZSYmdm9pZCAwIT09ZS5sYXllcj8ubWVkaWEmJm51bGwhPT1lLmxheWVyPy5tZWRpYSYmKG4ubGF5ZXI9eyRjYXNlOlwibWVkaWFcIixtZWRpYTpsLk1lZGlhTWV0YWRhdGEuZnJvbVBhcnRpYWwoZS5sYXllci5tZWRpYSl9KSxcImNhcHRpb25cIj09PWUubGF5ZXI/LiRjYXNlJiZ2b2lkIDAhPT1lLmxheWVyPy5jYXB0aW9uJiZudWxsIT09ZS5sYXllcj8uY2FwdGlvbiYmKG4ubGF5ZXI9eyRjYXNlOlwiY2FwdGlvblwiLGNhcHRpb246dS5DYXB0aW9uLmZyb21QYXJ0aWFsKGUubGF5ZXIuY2FwdGlvbil9KSxcIndlYlBhZ2VcIj09PWUubGF5ZXI/LiRjYXNlJiZ2b2lkIDAhPT1lLmxheWVyPy53ZWJQYWdlJiZudWxsIT09ZS5sYXllcj8ud2ViUGFnZSYmKG4ubGF5ZXI9eyRjYXNlOlwid2ViUGFnZVwiLHdlYlBhZ2U6ZC5XZWJQYWdlLmZyb21QYXJ0aWFsKGUubGF5ZXIud2ViUGFnZSl9KSxcImN0SXRlbVwiPT09ZS5sYXllcj8uJGNhc2UmJnZvaWQgMCE9PWUubGF5ZXI/LmN0SXRlbSYmbnVsbCE9PWUubGF5ZXI/LmN0SXRlbSYmKG4ubGF5ZXI9eyRjYXNlOlwiY3RJdGVtXCIsY3RJdGVtOmYuQ1RJdGVtSW5zdGFuY2UuZnJvbVBhcnRpYWwoZS5sYXllci5jdEl0ZW0pfSksbi5wcm9wZXJ0aWVzPXZvaWQgMCE9PWUucHJvcGVydGllcyYmbnVsbCE9PWUucHJvcGVydGllcz90LkxheWVyUHJvcGVydGllcy5mcm9tUGFydGlhbChlLnByb3BlcnRpZXMpOnZvaWQgMCxuLnBsYXliYWNrTGF5ZXJJbmRleD1lLnBsYXliYWNrTGF5ZXJJbmRleD8/MCxuLmNyZWF0aXZlRWRpdFRhZz12b2lkIDAhPT1lLmNyZWF0aXZlRWRpdFRhZyYmbnVsbCE9PWUuY3JlYXRpdmVFZGl0VGFnP3MuQ3JlYXRpdmVFZGl0VGFnLmZyb21QYXJ0aWFsKGUuY3JlYXRpdmVFZGl0VGFnKTp2b2lkIDAsbi5lZGl0Q2FwYWJpbGl0aWVzPXZvaWQgMCE9PWUuZWRpdENhcGFiaWxpdGllcyYmbnVsbCE9PWUuZWRpdENhcGFiaWxpdGllcz9jLkVkaXRDYXBhYmlsaXRpZXMuZnJvbVBhcnRpYWwoZS5lZGl0Q2FwYWJpbGl0aWVzKTp2b2lkIDAsbn19fSwxNjI0NTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5QbGF5YmFja1NwZWVkTXVsdGlwbGllcj12b2lkIDA7Y29uc3QgaT1uKDgxNDQ1KSxvPXIobig2MjEwMCkpO3QuUGxheWJhY2tTcGVlZE11bHRpcGxpZXI9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUuc3BlZWRNdWx0aXBsaWVyJiZ0LnVpbnQzMigxMykuZmxvYXQoZS5zcGVlZE11bHRpcGxpZXIpLFwiY29uc3RhbnRcIj09PWUuc3BlZWRNdWx0aXBsaWVyQ2hhbmdlVHlwZT8uJGNhc2UmJmkuRW1wdHkuZW5jb2RlKGUuc3BlZWRNdWx0aXBsaWVyQ2hhbmdlVHlwZS5jb25zdGFudCx0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSxcImJlemllckN1cnZlXCI9PT1lLnNwZWVkTXVsdGlwbGllckNoYW5nZVR5cGU/LiRjYXNlJiZpLkVtcHR5LmVuY29kZShlLnNwZWVkTXVsdGlwbGllckNoYW5nZVR5cGUuYmV6aWVyQ3VydmUsdC51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBhPXtzcGVlZE11bHRpcGxpZXI6MCxzcGVlZE11bHRpcGxpZXJDaGFuZ2VUeXBlOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmEuc3BlZWRNdWx0aXBsaWVyPW4uZmxvYXQoKTticmVhaztjYXNlIDI6YS5zcGVlZE11bHRpcGxpZXJDaGFuZ2VUeXBlPXskY2FzZTpcImNvbnN0YW50XCIsY29uc3RhbnQ6aS5FbXB0eS5kZWNvZGUobixuLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAzOmEuc3BlZWRNdWx0aXBsaWVyQ2hhbmdlVHlwZT17JGNhc2U6XCJiZXppZXJDdXJ2ZVwiLGJlemllckN1cnZlOmkuRW1wdHkuZGVjb2RlKG4sbi51aW50MzIoKSl9O2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17c3BlZWRNdWx0aXBsaWVyOjAsc3BlZWRNdWx0aXBsaWVyQ2hhbmdlVHlwZTp2b2lkIDB9O3JldHVybiB0LnNwZWVkTXVsdGlwbGllcj1lLnNwZWVkTXVsdGlwbGllcj8/MCxcImNvbnN0YW50XCI9PT1lLnNwZWVkTXVsdGlwbGllckNoYW5nZVR5cGU/LiRjYXNlJiZ2b2lkIDAhPT1lLnNwZWVkTXVsdGlwbGllckNoYW5nZVR5cGU/LmNvbnN0YW50JiZudWxsIT09ZS5zcGVlZE11bHRpcGxpZXJDaGFuZ2VUeXBlPy5jb25zdGFudCYmKHQuc3BlZWRNdWx0aXBsaWVyQ2hhbmdlVHlwZT17JGNhc2U6XCJjb25zdGFudFwiLGNvbnN0YW50OmkuRW1wdHkuZnJvbVBhcnRpYWwoZS5zcGVlZE11bHRpcGxpZXJDaGFuZ2VUeXBlLmNvbnN0YW50KX0pLFwiYmV6aWVyQ3VydmVcIj09PWUuc3BlZWRNdWx0aXBsaWVyQ2hhbmdlVHlwZT8uJGNhc2UmJnZvaWQgMCE9PWUuc3BlZWRNdWx0aXBsaWVyQ2hhbmdlVHlwZT8uYmV6aWVyQ3VydmUmJm51bGwhPT1lLnNwZWVkTXVsdGlwbGllckNoYW5nZVR5cGU/LmJlemllckN1cnZlJiYodC5zcGVlZE11bHRpcGxpZXJDaGFuZ2VUeXBlPXskY2FzZTpcImJlemllckN1cnZlXCIsYmV6aWVyQ3VydmU6aS5FbXB0eS5mcm9tUGFydGlhbChlLnNwZWVkTXVsdGlwbGllckNoYW5nZVR5cGUuYmV6aWVyQ3VydmUpfSksdH19fSw3ODE3NzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Qb2xsX1BvbGxQYWdlX1BvbGxJdGVtPXQuUG9sbF9Qb2xsUGFnZT10LlBvbGw9dC5QYWdlUHJvcGVydGllcz10LlVwZGF0ZUluZm89dC5FeHBsYW5hdGlvblBhZ2U9dC5FbW9qaVR5cGU9dC5Qb2xsX1BvbGxTdGF0ZT10LlBvbGxfUG9sbFR5cGU9dm9pZCAwO2NvbnN0IGk9cihuKDQxNTgzKSksbz1yKG4oNjIxMDApKSxhPW4oNTMwNTYpO3ZhciBzLGM7KGM9dC5Qb2xsX1BvbGxUeXBlfHwodC5Qb2xsX1BvbGxUeXBlPXt9KSlbYy5VTktOT1dOPTBdPVwiVU5LTk9XTlwiLGNbYy5PUElOSU9OX1BPTEw9MV09XCJPUElOSU9OX1BPTExcIixjW2MuVk9URT0yXT1cIlZPVEVcIixjW2MuT1BFTl9RVUVTVElPTj0zXT1cIk9QRU5fUVVFU1RJT05cIixjW2MuRkFDVFVBTF9RVUVTVElPTj00XT1cIkZBQ1RVQUxfUVVFU1RJT05cIixjW2MuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLChzPXQuUG9sbF9Qb2xsU3RhdGV8fCh0LlBvbGxfUG9sbFN0YXRlPXt9KSlbcy5VTlNFVD0wXT1cIlVOU0VUXCIsc1tzLk9QRU49MV09XCJPUEVOXCIsc1tzLkNMT1NFRD0yXT1cIkNMT1NFRFwiLHNbcy5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsdC5FbW9qaVR5cGU9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5pZCYmdC51aW50MzIoMTApLnN0cmluZyhlLmlkKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2lkOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLmlkPW4uc3RyaW5nKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtpZDpcIlwifTtyZXR1cm4gdC5pZD1lLmlkPz9cIlwiLHR9fSx0LkV4cGxhbmF0aW9uUGFnZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmRlc2NyaXB0aW9uJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUuZGVzY3JpcHRpb24pLFwiXCIhPT1lLmltYWdlQXNzZXRJZCYmdC51aW50MzIoMTgpLnN0cmluZyhlLmltYWdlQXNzZXRJZCksXCJjb250ZW50T2JqZWN0XCI9PT1lLm1lZGlhPy4kY2FzZSYmdC51aW50MzIoMjYpLmJ5dGVzKGUubWVkaWEuY29udGVudE9iamVjdCksXCJ1cmxcIj09PWUubWVkaWE/LiRjYXNlJiZ0LnVpbnQzMigzNCkuc3RyaW5nKGUubWVkaWEudXJsKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2Rlc2NyaXB0aW9uOlwiXCIsaW1hZ2VBc3NldElkOlwiXCIsbWVkaWE6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5kZXNjcmlwdGlvbj1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLmltYWdlQXNzZXRJZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMzppLm1lZGlhPXskY2FzZTpcImNvbnRlbnRPYmplY3RcIixjb250ZW50T2JqZWN0Om4uYnl0ZXMoKX07YnJlYWs7Y2FzZSA0OmkubWVkaWE9eyRjYXNlOlwidXJsXCIsdXJsOm4uc3RyaW5nKCl9O2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17ZGVzY3JpcHRpb246XCJcIixpbWFnZUFzc2V0SWQ6XCJcIixtZWRpYTp2b2lkIDB9O3JldHVybiB0LmRlc2NyaXB0aW9uPWUuZGVzY3JpcHRpb24/P1wiXCIsdC5pbWFnZUFzc2V0SWQ9ZS5pbWFnZUFzc2V0SWQ/P1wiXCIsXCJjb250ZW50T2JqZWN0XCI9PT1lLm1lZGlhPy4kY2FzZSYmdm9pZCAwIT09ZS5tZWRpYT8uY29udGVudE9iamVjdCYmbnVsbCE9PWUubWVkaWE/LmNvbnRlbnRPYmplY3QmJih0Lm1lZGlhPXskY2FzZTpcImNvbnRlbnRPYmplY3RcIixjb250ZW50T2JqZWN0OmUubWVkaWEuY29udGVudE9iamVjdH0pLFwidXJsXCI9PT1lLm1lZGlhPy4kY2FzZSYmdm9pZCAwIT09ZS5tZWRpYT8udXJsJiZudWxsIT09ZS5tZWRpYT8udXJsJiYodC5tZWRpYT17JGNhc2U6XCJ1cmxcIix1cmw6ZS5tZWRpYS51cmx9KSx0fX0sdC5VcGRhdGVJbmZvPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUudXBkYXRlQXBwQnV0dG9uJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUudXBkYXRlQXBwQnV0dG9uKSxcIlwiIT09ZS51cGRhdGVBcHBIZWFkbGluZSYmdC51aW50MzIoMTgpLnN0cmluZyhlLnVwZGF0ZUFwcEhlYWRsaW5lKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3VwZGF0ZUFwcEJ1dHRvbjpcIlwiLHVwZGF0ZUFwcEhlYWRsaW5lOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnVwZGF0ZUFwcEJ1dHRvbj1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLnVwZGF0ZUFwcEhlYWRsaW5lPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt1cGRhdGVBcHBCdXR0b246XCJcIix1cGRhdGVBcHBIZWFkbGluZTpcIlwifTtyZXR1cm4gdC51cGRhdGVBcHBCdXR0b249ZS51cGRhdGVBcHBCdXR0b24/P1wiXCIsdC51cGRhdGVBcHBIZWFkbGluZT1lLnVwZGF0ZUFwcEhlYWRsaW5lPz9cIlwiLHR9fSx0LlBhZ2VQcm9wZXJ0aWVzPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUuYmFja2dyb3VuZENvbG9yJiZuLnVpbnQzMigxMCkuc3RyaW5nKGUuYmFja2dyb3VuZENvbG9yKSxcIlwiIT09ZS5ub3RWb3RlZEhlYWRsaW5lJiZuLnVpbnQzMigxOCkuc3RyaW5nKGUubm90Vm90ZWRIZWFkbGluZSksXCJcIiE9PWUudm90ZWRIZWFkbGluZSYmbi51aW50MzIoMjYpLnN0cmluZyhlLnZvdGVkSGVhZGxpbmUpLFwiXCIhPT1lLmNsb3NlZEhlYWRsaW5lJiZuLnVpbnQzMigzNCkuc3RyaW5nKGUuY2xvc2VkSGVhZGxpbmUpLFwiXCIhPT1lLmhlYWRpbmdUZXh0Q29sb3ImJm4udWludDMyKDQyKS5zdHJpbmcoZS5oZWFkaW5nVGV4dENvbG9yKSxcIlwiIT09ZS5wdWJsaXNoZXJMb2dvJiZuLnVpbnQzMig1MCkuc3RyaW5nKGUucHVibGlzaGVyTG9nbyksXCJwdWJsaXNoZXJXaWRlTG9nb0NvbnRlbnRPYmplY3RcIj09PWUucHVibGlzaGVyTG9nb01lZGlhPy4kY2FzZSYmbi51aW50MzIoNTgpLmJ5dGVzKGUucHVibGlzaGVyTG9nb01lZGlhLnB1Ymxpc2hlcldpZGVMb2dvQ29udGVudE9iamVjdCksXCJwdWJsaXNoZXJXaWRlTG9nb1VybFwiPT09ZS5wdWJsaXNoZXJMb2dvTWVkaWE/LiRjYXNlJiZuLnVpbnQzMigxNjIpLnN0cmluZyhlLnB1Ymxpc2hlckxvZ29NZWRpYS5wdWJsaXNoZXJXaWRlTG9nb1VybCksXCJcIiE9PWUubGF5b3V0JiZuLnVpbnQzMig2Nikuc3RyaW5nKGUubGF5b3V0KSxcIlwiIT09ZS5mb250JiZuLnVpbnQzMig3NCkuc3RyaW5nKGUuZm9udCksXCJcIiE9PWUudm90ZXNDb3VudE1lc3NhZ2UmJm4udWludDMyKDgyKS5zdHJpbmcoZS52b3Rlc0NvdW50TWVzc2FnZSksITA9PT1lLnNob3VsZFNob3dMYWJlbHMmJm4udWludDMyKDg4KS5ib29sKGUuc2hvdWxkU2hvd0xhYmVscyksITA9PT1lLnNob3VsZFNob3dWb3Rlc0NvdW50JiZuLnVpbnQzMig5NikuYm9vbChlLnNob3VsZFNob3dWb3Rlc0NvdW50KSwhMD09PWUuc2hvd0V4cGxhbmF0aW9uU2NyZWVuJiZuLnVpbnQzMigxMDQpLmJvb2woZS5zaG93RXhwbGFuYXRpb25TY3JlZW4pLFwiXCIhPT1lLmJhY2tncm91bmRBc3NldElkJiZuLnVpbnQzMigxMTQpLnN0cmluZyhlLmJhY2tncm91bmRBc3NldElkKSxcImJhY2tncm91bmRJbWFnZUNvbnRlbnRPYmplY3RcIj09PWUuYmFja2dyb3VuZEltYWdlTWVkaWE/LiRjYXNlJiZuLnVpbnQzMigxMjIpLmJ5dGVzKGUuYmFja2dyb3VuZEltYWdlTWVkaWEuYmFja2dyb3VuZEltYWdlQ29udGVudE9iamVjdCksXCJiYWNrZ3JvdW5kSW1hZ2VVcmxcIj09PWUuYmFja2dyb3VuZEltYWdlTWVkaWE/LiRjYXNlJiZuLnVpbnQzMigxNzApLnN0cmluZyhlLmJhY2tncm91bmRJbWFnZU1lZGlhLmJhY2tncm91bmRJbWFnZVVybCksdm9pZCAwIT09ZS5jb3JyZWN0QW5zd2VyJiZhLkludDMyVmFsdWUuZW5jb2RlKHt2YWx1ZTplLmNvcnJlY3RBbnN3ZXJ9LG4udWludDMyKDEzMCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmNvcnJlY3RBbnN3ZXJFbW9qaSYmdC5FbW9qaVR5cGUuZW5jb2RlKGUuY29ycmVjdEFuc3dlckVtb2ppLG4udWludDMyKDEzOCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmluY29ycmVjdEFuc3dlckVtb2ppJiZ0LkVtb2ppVHlwZS5lbmNvZGUoZS5pbmNvcnJlY3RBbnN3ZXJFbW9qaSxuLnVpbnQzMigxNDYpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5leHBsYW5hdGlvblBhZ2UmJnQuRXhwbGFuYXRpb25QYWdlLmVuY29kZShlLmV4cGxhbmF0aW9uUGFnZSxuLnVpbnQzMigxNTQpLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBzPXtiYWNrZ3JvdW5kQ29sb3I6XCJcIixub3RWb3RlZEhlYWRsaW5lOlwiXCIsdm90ZWRIZWFkbGluZTpcIlwiLGNsb3NlZEhlYWRsaW5lOlwiXCIsaGVhZGluZ1RleHRDb2xvcjpcIlwiLHB1Ymxpc2hlckxvZ286XCJcIixwdWJsaXNoZXJMb2dvTWVkaWE6dm9pZCAwLGxheW91dDpcIlwiLGZvbnQ6XCJcIix2b3Rlc0NvdW50TWVzc2FnZTpcIlwiLHNob3VsZFNob3dMYWJlbHM6ITEsc2hvdWxkU2hvd1ZvdGVzQ291bnQ6ITEsc2hvd0V4cGxhbmF0aW9uU2NyZWVuOiExLGJhY2tncm91bmRBc3NldElkOlwiXCIsYmFja2dyb3VuZEltYWdlTWVkaWE6dm9pZCAwLGNvcnJlY3RBbnN3ZXI6dm9pZCAwLGNvcnJlY3RBbnN3ZXJFbW9qaTp2b2lkIDAsaW5jb3JyZWN0QW5zd2VyRW1vamk6dm9pZCAwLGV4cGxhbmF0aW9uUGFnZTp2b2lkIDB9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpzLmJhY2tncm91bmRDb2xvcj1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMjpzLm5vdFZvdGVkSGVhZGxpbmU9ci5zdHJpbmcoKTticmVhaztjYXNlIDM6cy52b3RlZEhlYWRsaW5lPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSA0OnMuY2xvc2VkSGVhZGxpbmU9ci5zdHJpbmcoKTticmVhaztjYXNlIDU6cy5oZWFkaW5nVGV4dENvbG9yPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSA2OnMucHVibGlzaGVyTG9nbz1yLnN0cmluZygpO2JyZWFrO2Nhc2UgNzpzLnB1Ymxpc2hlckxvZ29NZWRpYT17JGNhc2U6XCJwdWJsaXNoZXJXaWRlTG9nb0NvbnRlbnRPYmplY3RcIixwdWJsaXNoZXJXaWRlTG9nb0NvbnRlbnRPYmplY3Q6ci5ieXRlcygpfTticmVhaztjYXNlIDIwOnMucHVibGlzaGVyTG9nb01lZGlhPXskY2FzZTpcInB1Ymxpc2hlcldpZGVMb2dvVXJsXCIscHVibGlzaGVyV2lkZUxvZ29Vcmw6ci5zdHJpbmcoKX07YnJlYWs7Y2FzZSA4OnMubGF5b3V0PXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSA5OnMuZm9udD1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMTA6cy52b3Rlc0NvdW50TWVzc2FnZT1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMTE6cy5zaG91bGRTaG93TGFiZWxzPXIuYm9vbCgpO2JyZWFrO2Nhc2UgMTI6cy5zaG91bGRTaG93Vm90ZXNDb3VudD1yLmJvb2woKTticmVhaztjYXNlIDEzOnMuc2hvd0V4cGxhbmF0aW9uU2NyZWVuPXIuYm9vbCgpO2JyZWFrO2Nhc2UgMTQ6cy5iYWNrZ3JvdW5kQXNzZXRJZD1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMTU6cy5iYWNrZ3JvdW5kSW1hZ2VNZWRpYT17JGNhc2U6XCJiYWNrZ3JvdW5kSW1hZ2VDb250ZW50T2JqZWN0XCIsYmFja2dyb3VuZEltYWdlQ29udGVudE9iamVjdDpyLmJ5dGVzKCl9O2JyZWFrO2Nhc2UgMjE6cy5iYWNrZ3JvdW5kSW1hZ2VNZWRpYT17JGNhc2U6XCJiYWNrZ3JvdW5kSW1hZ2VVcmxcIixiYWNrZ3JvdW5kSW1hZ2VVcmw6ci5zdHJpbmcoKX07YnJlYWs7Y2FzZSAxNjpzLmNvcnJlY3RBbnN3ZXI9YS5JbnQzMlZhbHVlLmRlY29kZShyLHIudWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgMTc6cy5jb3JyZWN0QW5zd2VyRW1vamk9dC5FbW9qaVR5cGUuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAxODpzLmluY29ycmVjdEFuc3dlckVtb2ppPXQuRW1vamlUeXBlLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMTk6cy5leHBsYW5hdGlvblBhZ2U9dC5FeHBsYW5hdGlvblBhZ2UuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBzfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtiYWNrZ3JvdW5kQ29sb3I6XCJcIixub3RWb3RlZEhlYWRsaW5lOlwiXCIsdm90ZWRIZWFkbGluZTpcIlwiLGNsb3NlZEhlYWRsaW5lOlwiXCIsaGVhZGluZ1RleHRDb2xvcjpcIlwiLHB1Ymxpc2hlckxvZ286XCJcIixwdWJsaXNoZXJMb2dvTWVkaWE6dm9pZCAwLGxheW91dDpcIlwiLGZvbnQ6XCJcIix2b3Rlc0NvdW50TWVzc2FnZTpcIlwiLHNob3VsZFNob3dMYWJlbHM6ITEsc2hvdWxkU2hvd1ZvdGVzQ291bnQ6ITEsc2hvd0V4cGxhbmF0aW9uU2NyZWVuOiExLGJhY2tncm91bmRBc3NldElkOlwiXCIsYmFja2dyb3VuZEltYWdlTWVkaWE6dm9pZCAwLGNvcnJlY3RBbnN3ZXI6dm9pZCAwLGNvcnJlY3RBbnN3ZXJFbW9qaTp2b2lkIDAsaW5jb3JyZWN0QW5zd2VyRW1vamk6dm9pZCAwLGV4cGxhbmF0aW9uUGFnZTp2b2lkIDB9O3JldHVybiBuLmJhY2tncm91bmRDb2xvcj1lLmJhY2tncm91bmRDb2xvcj8/XCJcIixuLm5vdFZvdGVkSGVhZGxpbmU9ZS5ub3RWb3RlZEhlYWRsaW5lPz9cIlwiLG4udm90ZWRIZWFkbGluZT1lLnZvdGVkSGVhZGxpbmU/P1wiXCIsbi5jbG9zZWRIZWFkbGluZT1lLmNsb3NlZEhlYWRsaW5lPz9cIlwiLG4uaGVhZGluZ1RleHRDb2xvcj1lLmhlYWRpbmdUZXh0Q29sb3I/P1wiXCIsbi5wdWJsaXNoZXJMb2dvPWUucHVibGlzaGVyTG9nbz8/XCJcIixcInB1Ymxpc2hlcldpZGVMb2dvQ29udGVudE9iamVjdFwiPT09ZS5wdWJsaXNoZXJMb2dvTWVkaWE/LiRjYXNlJiZ2b2lkIDAhPT1lLnB1Ymxpc2hlckxvZ29NZWRpYT8ucHVibGlzaGVyV2lkZUxvZ29Db250ZW50T2JqZWN0JiZudWxsIT09ZS5wdWJsaXNoZXJMb2dvTWVkaWE/LnB1Ymxpc2hlcldpZGVMb2dvQ29udGVudE9iamVjdCYmKG4ucHVibGlzaGVyTG9nb01lZGlhPXskY2FzZTpcInB1Ymxpc2hlcldpZGVMb2dvQ29udGVudE9iamVjdFwiLHB1Ymxpc2hlcldpZGVMb2dvQ29udGVudE9iamVjdDplLnB1Ymxpc2hlckxvZ29NZWRpYS5wdWJsaXNoZXJXaWRlTG9nb0NvbnRlbnRPYmplY3R9KSxcInB1Ymxpc2hlcldpZGVMb2dvVXJsXCI9PT1lLnB1Ymxpc2hlckxvZ29NZWRpYT8uJGNhc2UmJnZvaWQgMCE9PWUucHVibGlzaGVyTG9nb01lZGlhPy5wdWJsaXNoZXJXaWRlTG9nb1VybCYmbnVsbCE9PWUucHVibGlzaGVyTG9nb01lZGlhPy5wdWJsaXNoZXJXaWRlTG9nb1VybCYmKG4ucHVibGlzaGVyTG9nb01lZGlhPXskY2FzZTpcInB1Ymxpc2hlcldpZGVMb2dvVXJsXCIscHVibGlzaGVyV2lkZUxvZ29Vcmw6ZS5wdWJsaXNoZXJMb2dvTWVkaWEucHVibGlzaGVyV2lkZUxvZ29Vcmx9KSxuLmxheW91dD1lLmxheW91dD8/XCJcIixuLmZvbnQ9ZS5mb250Pz9cIlwiLG4udm90ZXNDb3VudE1lc3NhZ2U9ZS52b3Rlc0NvdW50TWVzc2FnZT8/XCJcIixuLnNob3VsZFNob3dMYWJlbHM9ZS5zaG91bGRTaG93TGFiZWxzPz8hMSxuLnNob3VsZFNob3dWb3Rlc0NvdW50PWUuc2hvdWxkU2hvd1ZvdGVzQ291bnQ/PyExLG4uc2hvd0V4cGxhbmF0aW9uU2NyZWVuPWUuc2hvd0V4cGxhbmF0aW9uU2NyZWVuPz8hMSxuLmJhY2tncm91bmRBc3NldElkPWUuYmFja2dyb3VuZEFzc2V0SWQ/P1wiXCIsXCJiYWNrZ3JvdW5kSW1hZ2VDb250ZW50T2JqZWN0XCI9PT1lLmJhY2tncm91bmRJbWFnZU1lZGlhPy4kY2FzZSYmdm9pZCAwIT09ZS5iYWNrZ3JvdW5kSW1hZ2VNZWRpYT8uYmFja2dyb3VuZEltYWdlQ29udGVudE9iamVjdCYmbnVsbCE9PWUuYmFja2dyb3VuZEltYWdlTWVkaWE/LmJhY2tncm91bmRJbWFnZUNvbnRlbnRPYmplY3QmJihuLmJhY2tncm91bmRJbWFnZU1lZGlhPXskY2FzZTpcImJhY2tncm91bmRJbWFnZUNvbnRlbnRPYmplY3RcIixiYWNrZ3JvdW5kSW1hZ2VDb250ZW50T2JqZWN0OmUuYmFja2dyb3VuZEltYWdlTWVkaWEuYmFja2dyb3VuZEltYWdlQ29udGVudE9iamVjdH0pLFwiYmFja2dyb3VuZEltYWdlVXJsXCI9PT1lLmJhY2tncm91bmRJbWFnZU1lZGlhPy4kY2FzZSYmdm9pZCAwIT09ZS5iYWNrZ3JvdW5kSW1hZ2VNZWRpYT8uYmFja2dyb3VuZEltYWdlVXJsJiZudWxsIT09ZS5iYWNrZ3JvdW5kSW1hZ2VNZWRpYT8uYmFja2dyb3VuZEltYWdlVXJsJiYobi5iYWNrZ3JvdW5kSW1hZ2VNZWRpYT17JGNhc2U6XCJiYWNrZ3JvdW5kSW1hZ2VVcmxcIixiYWNrZ3JvdW5kSW1hZ2VVcmw6ZS5iYWNrZ3JvdW5kSW1hZ2VNZWRpYS5iYWNrZ3JvdW5kSW1hZ2VVcmx9KSxuLmNvcnJlY3RBbnN3ZXI9ZS5jb3JyZWN0QW5zd2VyPz92b2lkIDAsbi5jb3JyZWN0QW5zd2VyRW1vamk9dm9pZCAwIT09ZS5jb3JyZWN0QW5zd2VyRW1vamkmJm51bGwhPT1lLmNvcnJlY3RBbnN3ZXJFbW9qaT90LkVtb2ppVHlwZS5mcm9tUGFydGlhbChlLmNvcnJlY3RBbnN3ZXJFbW9qaSk6dm9pZCAwLG4uaW5jb3JyZWN0QW5zd2VyRW1vamk9dm9pZCAwIT09ZS5pbmNvcnJlY3RBbnN3ZXJFbW9qaSYmbnVsbCE9PWUuaW5jb3JyZWN0QW5zd2VyRW1vamk/dC5FbW9qaVR5cGUuZnJvbVBhcnRpYWwoZS5pbmNvcnJlY3RBbnN3ZXJFbW9qaSk6dm9pZCAwLG4uZXhwbGFuYXRpb25QYWdlPXZvaWQgMCE9PWUuZXhwbGFuYXRpb25QYWdlJiZudWxsIT09ZS5leHBsYW5hdGlvblBhZ2U/dC5FeHBsYW5hdGlvblBhZ2UuZnJvbVBhcnRpYWwoZS5leHBsYW5hdGlvblBhZ2UpOnZvaWQgMCxufX0sdC5Qb2xsPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7MCE9PWUucG9sbFR5cGUmJm4udWludDMyKDgpLmludDMyKGUucG9sbFR5cGUpLDAhPT1lLnBvbGxTdGF0ZSYmbi51aW50MzIoMTYpLmludDMyKGUucG9sbFN0YXRlKTtmb3IoY29uc3QgciBvZiBlLnF1ZXN0aW9uUGFnZXMpdC5Qb2xsX1BvbGxQYWdlLmVuY29kZShyLG4udWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiB2b2lkIDAhPT1lLm91dGNvbWVQYWdlJiZ0LlBvbGxfUG9sbFBhZ2UuZW5jb2RlKGUub3V0Y29tZVBhZ2Usbi51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCksXCIwXCIhPT1lLmZpcnN0TGl2ZVRpbWVzdGFtcE1zJiZuLnVpbnQzMig0MCkuaW50NjQoZS5maXJzdExpdmVUaW1lc3RhbXBNcyksMCE9PWUuZHVyYXRpb25JbkRheXMmJm4udWludDMyKDQ4KS51aW50MzIoZS5kdXJhdGlvbkluRGF5cyksXCJcIiE9PWUuZWRpdG9yUHJvcGVydGllcyYmbi51aW50MzIoNTgpLnN0cmluZyhlLmVkaXRvclByb3BlcnRpZXMpLFwiXCIhPT1lLmlkJiZuLnVpbnQzMig2Nikuc3RyaW5nKGUuaWQpLHZvaWQgMCE9PWUudXBkYXRlSW5mbyYmdC5VcGRhdGVJbmZvLmVuY29kZShlLnVwZGF0ZUluZm8sbi51aW50MzIoNzQpLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBhPXtwb2xsVHlwZTowLHBvbGxTdGF0ZTowLHF1ZXN0aW9uUGFnZXM6W10sb3V0Y29tZVBhZ2U6dm9pZCAwLGZpcnN0TGl2ZVRpbWVzdGFtcE1zOlwiMFwiLGR1cmF0aW9uSW5EYXlzOjAsZWRpdG9yUHJvcGVydGllczpcIlwiLGlkOlwiXCIsdXBkYXRlSW5mbzp2b2lkIDB9O2Zvcig7ci5wb3M8aTspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLnBvbGxUeXBlPXIuaW50MzIoKTticmVhaztjYXNlIDI6YS5wb2xsU3RhdGU9ci5pbnQzMigpO2JyZWFrO2Nhc2UgMzphLnF1ZXN0aW9uUGFnZXMucHVzaCh0LlBvbGxfUG9sbFBhZ2UuZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2Nhc2UgNDphLm91dGNvbWVQYWdlPXQuUG9sbF9Qb2xsUGFnZS5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDU6YS5maXJzdExpdmVUaW1lc3RhbXBNcz1yLmludDY0KCkudG9TdHJpbmcoKTticmVhaztjYXNlIDY6YS5kdXJhdGlvbkluRGF5cz1yLnVpbnQzMigpO2JyZWFrO2Nhc2UgNzphLmVkaXRvclByb3BlcnRpZXM9ci5zdHJpbmcoKTticmVhaztjYXNlIDg6YS5pZD1yLnN0cmluZygpO2JyZWFrO2Nhc2UgOTphLnVwZGF0ZUluZm89dC5VcGRhdGVJbmZvLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17cG9sbFR5cGU6MCxwb2xsU3RhdGU6MCxxdWVzdGlvblBhZ2VzOltdLG91dGNvbWVQYWdlOnZvaWQgMCxmaXJzdExpdmVUaW1lc3RhbXBNczpcIjBcIixkdXJhdGlvbkluRGF5czowLGVkaXRvclByb3BlcnRpZXM6XCJcIixpZDpcIlwiLHVwZGF0ZUluZm86dm9pZCAwfTtyZXR1cm4gbi5wb2xsVHlwZT1lLnBvbGxUeXBlPz8wLG4ucG9sbFN0YXRlPWUucG9sbFN0YXRlPz8wLG4ucXVlc3Rpb25QYWdlcz1lLnF1ZXN0aW9uUGFnZXM/Lm1hcCgoZT0+dC5Qb2xsX1BvbGxQYWdlLmZyb21QYXJ0aWFsKGUpKSl8fFtdLG4ub3V0Y29tZVBhZ2U9dm9pZCAwIT09ZS5vdXRjb21lUGFnZSYmbnVsbCE9PWUub3V0Y29tZVBhZ2U/dC5Qb2xsX1BvbGxQYWdlLmZyb21QYXJ0aWFsKGUub3V0Y29tZVBhZ2UpOnZvaWQgMCxuLmZpcnN0TGl2ZVRpbWVzdGFtcE1zPWUuZmlyc3RMaXZlVGltZXN0YW1wTXM/P1wiMFwiLG4uZHVyYXRpb25JbkRheXM9ZS5kdXJhdGlvbkluRGF5cz8/MCxuLmVkaXRvclByb3BlcnRpZXM9ZS5lZGl0b3JQcm9wZXJ0aWVzPz9cIlwiLG4uaWQ9ZS5pZD8/XCJcIixuLnVwZGF0ZUluZm89dm9pZCAwIT09ZS51cGRhdGVJbmZvJiZudWxsIT09ZS51cGRhdGVJbmZvP3QuVXBkYXRlSW5mby5mcm9tUGFydGlhbChlLnVwZGF0ZUluZm8pOnZvaWQgMCxufX0sdC5Qb2xsX1BvbGxQYWdlPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7XCJcIiE9PWUuaWQmJm4udWludDMyKDEwKS5zdHJpbmcoZS5pZCk7Zm9yKGNvbnN0IHIgb2YgZS5pdGVtcyl0LlBvbGxfUG9sbFBhZ2VfUG9sbEl0ZW0uZW5jb2RlKHIsbi51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuXCJcIiE9PWUuZWRpdG9yUHJvcGVydGllcyYmbi51aW50MzIoMjYpLnN0cmluZyhlLmVkaXRvclByb3BlcnRpZXMpLCEwPT09ZS5oaWRlTGFiZWxzJiZuLnVpbnQzMigzMikuYm9vbChlLmhpZGVMYWJlbHMpLHZvaWQgMCE9PWUucGFnZVByb3BlcnRpZXMmJnQuUGFnZVByb3BlcnRpZXMuZW5jb2RlKGUucGFnZVByb3BlcnRpZXMsbi51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBhPXtpZDpcIlwiLGl0ZW1zOltdLGVkaXRvclByb3BlcnRpZXM6XCJcIixoaWRlTGFiZWxzOiExLHBhZ2VQcm9wZXJ0aWVzOnZvaWQgMH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmEuaWQ9ci5zdHJpbmcoKTticmVhaztjYXNlIDI6YS5pdGVtcy5wdXNoKHQuUG9sbF9Qb2xsUGFnZV9Qb2xsSXRlbS5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAzOmEuZWRpdG9yUHJvcGVydGllcz1yLnN0cmluZygpO2JyZWFrO2Nhc2UgNDphLmhpZGVMYWJlbHM9ci5ib29sKCk7YnJlYWs7Y2FzZSA1OmEucGFnZVByb3BlcnRpZXM9dC5QYWdlUHJvcGVydGllcy5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztkZWZhdWx0OnIuc2tpcFR5cGUoNyZlKX19cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e2lkOlwiXCIsaXRlbXM6W10sZWRpdG9yUHJvcGVydGllczpcIlwiLGhpZGVMYWJlbHM6ITEscGFnZVByb3BlcnRpZXM6dm9pZCAwfTtyZXR1cm4gbi5pZD1lLmlkPz9cIlwiLG4uaXRlbXM9ZS5pdGVtcz8ubWFwKChlPT50LlBvbGxfUG9sbFBhZ2VfUG9sbEl0ZW0uZnJvbVBhcnRpYWwoZSkpKXx8W10sbi5lZGl0b3JQcm9wZXJ0aWVzPWUuZWRpdG9yUHJvcGVydGllcz8/XCJcIixuLmhpZGVMYWJlbHM9ZS5oaWRlTGFiZWxzPz8hMSxuLnBhZ2VQcm9wZXJ0aWVzPXZvaWQgMCE9PWUucGFnZVByb3BlcnRpZXMmJm51bGwhPT1lLnBhZ2VQcm9wZXJ0aWVzP3QuUGFnZVByb3BlcnRpZXMuZnJvbVBhcnRpYWwoZS5wYWdlUHJvcGVydGllcyk6dm9pZCAwLG59fSx0LlBvbGxfUG9sbFBhZ2VfUG9sbEl0ZW09e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5yc3BNZWRpYUlkJiZ0LnVpbnQzMig3OTQpLnN0cmluZyhlLnJzcE1lZGlhSWQpLFwiXCIhPT1lLmlkJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUuaWQpLFwiXCIhPT1lLmRlc2NyaXB0aW9uJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuZGVzY3JpcHRpb24pLDAhPT1lLm91dGNvbWVJbmRleCYmdC51aW50MzIoMjQpLnVpbnQzMihlLm91dGNvbWVJbmRleCksXCJjb250ZW50T2JqZWN0XCI9PT1lLm1lZGlhPy4kY2FzZSYmdC51aW50MzIoMzQpLmJ5dGVzKGUubWVkaWEuY29udGVudE9iamVjdCksXCJ1cmxcIj09PWUubWVkaWE/LiRjYXNlJiZ0LnVpbnQzMig0Mikuc3RyaW5nKGUubWVkaWEudXJsKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3JzcE1lZGlhSWQ6XCJcIixpZDpcIlwiLGRlc2NyaXB0aW9uOlwiXCIsb3V0Y29tZUluZGV4OjAsbWVkaWE6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDk5OmkucnNwTWVkaWFJZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMTppLmlkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkuZGVzY3JpcHRpb249bi5zdHJpbmcoKTticmVhaztjYXNlIDM6aS5vdXRjb21lSW5kZXg9bi51aW50MzIoKTticmVhaztjYXNlIDQ6aS5tZWRpYT17JGNhc2U6XCJjb250ZW50T2JqZWN0XCIsY29udGVudE9iamVjdDpuLmJ5dGVzKCl9O2JyZWFrO2Nhc2UgNTppLm1lZGlhPXskY2FzZTpcInVybFwiLHVybDpuLnN0cmluZygpfTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3JzcE1lZGlhSWQ6XCJcIixpZDpcIlwiLGRlc2NyaXB0aW9uOlwiXCIsb3V0Y29tZUluZGV4OjAsbWVkaWE6dm9pZCAwfTtyZXR1cm4gdC5yc3BNZWRpYUlkPWUucnNwTWVkaWFJZD8/XCJcIix0LmlkPWUuaWQ/P1wiXCIsdC5kZXNjcmlwdGlvbj1lLmRlc2NyaXB0aW9uPz9cIlwiLHQub3V0Y29tZUluZGV4PWUub3V0Y29tZUluZGV4Pz8wLFwiY29udGVudE9iamVjdFwiPT09ZS5tZWRpYT8uJGNhc2UmJnZvaWQgMCE9PWUubWVkaWE/LmNvbnRlbnRPYmplY3QmJm51bGwhPT1lLm1lZGlhPy5jb250ZW50T2JqZWN0JiYodC5tZWRpYT17JGNhc2U6XCJjb250ZW50T2JqZWN0XCIsY29udGVudE9iamVjdDplLm1lZGlhLmNvbnRlbnRPYmplY3R9KSxcInVybFwiPT09ZS5tZWRpYT8uJGNhc2UmJnZvaWQgMCE9PWUubWVkaWE/LnVybCYmbnVsbCE9PWUubWVkaWE/LnVybCYmKHQubWVkaWE9eyRjYXNlOlwidXJsXCIsdXJsOmUubWVkaWEudXJsfSksdH19LG8uZGVmYXVsdC51dGlsLkxvbmchPT1pLmRlZmF1bHQmJihvLmRlZmF1bHQudXRpbC5Mb25nPWkuZGVmYXVsdCxvLmRlZmF1bHQuY29uZmlndXJlKCkpfSw3MDMxODpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5TbmFwQWxpYXM9dC5TbmFwS2l0QXR0cmlidXRlcz10LlByb3ZlbmFuY2U9dC5Qcm92ZW5hbmNlX0FwcFNvdXJjZT10LlByb3ZlbmFuY2VfU25hcFNvdXJjZVN5c3RlbT12b2lkIDA7Y29uc3QgaT1uKDM0MTI2KSxvPW4oNTE1OTgpLGE9cihuKDYyMTAwKSk7dmFyIHMsYzsoYz10LlByb3ZlbmFuY2VfU25hcFNvdXJjZVN5c3RlbXx8KHQuUHJvdmVuYW5jZV9TbmFwU291cmNlU3lzdGVtPXt9KSlbYy5VTlNFVD0wXT1cIlVOU0VUXCIsY1tjLlJJQ0hfU05BUF9QTEFURk9STV9BRFM9MV09XCJSSUNIX1NOQVBfUExBVEZPUk1fQURTXCIsY1tjLlJJQ0hfU05BUF9QTEFURk9STV9ESVNDT1ZFUj0yXT1cIlJJQ0hfU05BUF9QTEFURk9STV9ESVNDT1ZFUlwiLGNbYy5TVE9SWV9DUkVBVElPTl9TRVJWSUNFPTNdPVwiU1RPUllfQ1JFQVRJT05fU0VSVklDRVwiLGNbYy5TUE9UTElHSFRfV0VCX1VQTE9BREVSPTRdPVwiU1BPVExJR0hUX1dFQl9VUExPQURFUlwiLGNbYy5TTkFQQ0hBVF9BUFBfQ1JFQVRJVkVfVE9PTFM9NV09XCJTTkFQQ0hBVF9BUFBfQ1JFQVRJVkVfVE9PTFNcIixjW2MuVVNFUl9HRU5FUkFUT1I9Nl09XCJVU0VSX0dFTkVSQVRPUlwiLGNbYy5TTkFQQ0hBVF9XRUJfQVBQPTddPVwiU05BUENIQVRfV0VCX0FQUFwiLGNbYy5TVE9SWV9TVFVESU9fVUdDPThdPVwiU1RPUllfU1RVRElPX1VHQ1wiLGNbYy5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKHM9dC5Qcm92ZW5hbmNlX0FwcFNvdXJjZXx8KHQuUHJvdmVuYW5jZV9BcHBTb3VyY2U9e30pKVtzLkFQUF9TT1VSQ0VfVU5TRVQ9MF09XCJBUFBfU09VUkNFX1VOU0VUXCIsc1tzLkFQUF9TT1VSQ0VfQ0FNRVJBX1JPTEw9MV09XCJBUFBfU09VUkNFX0NBTUVSQV9ST0xMXCIsc1tzLkFQUF9TT1VSQ0VfTUVNT1JJRVM9Ml09XCJBUFBfU09VUkNFX01FTU9SSUVTXCIsc1tzLkFQUF9TT1VSQ0VfQ0hBVD0zXT1cIkFQUF9TT1VSQ0VfQ0hBVFwiLHNbcy5BUFBfU09VUkNFX1BST0ZJTEVfU0FWRURfQ0hBVF9NRURJQT00XT1cIkFQUF9TT1VSQ0VfUFJPRklMRV9TQVZFRF9DSEFUX01FRElBXCIsc1tzLkFQUF9TT1VSQ0VfQ0FNRVJBPTVdPVwiQVBQX1NPVVJDRV9DQU1FUkFcIixzW3MuQVBQX1NPVVJDRV9TTkFQX0tJVD02XT1cIkFQUF9TT1VSQ0VfU05BUF9LSVRcIixzW3MuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLHQuUHJvdmVuYW5jZT17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5zb3VyY2VTeXN0ZW0mJm4udWludDMyKDgpLmludDMyKGUuc291cmNlU3lzdGVtKSxcIlwiIT09ZS5zb3VyY2VJZCYmbi51aW50MzIoMTgpLnN0cmluZyhlLnNvdXJjZUlkKSxcIlwiIT09ZS5zb3VyY2VWZXJzaW9uJiZuLnVpbnQzMigyNikuc3RyaW5nKGUuc291cmNlVmVyc2lvbiksdm9pZCAwIT09ZS5vd25lcklkJiZpLk93bmVyX0lELmVuY29kZShlLm93bmVySWQsbi51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5ob3N0SWQmJm8uVVVJRC5lbmNvZGUoZS5ob3N0SWQsbi51aW50MzIoNTgpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5zbmFwQWxpYXMmJnQuU25hcEFsaWFzLmVuY29kZShlLnNuYXBBbGlhcyxuLnVpbnQzMig2NikuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS5hcHBTb3VyY2UmJm4udWludDMyKDMyKS5pbnQzMihlLmFwcFNvdXJjZSksdm9pZCAwIT09ZS5zbmFwS2l0U291cmNlJiZ0LlNuYXBLaXRBdHRyaWJ1dGVzLmVuY29kZShlLnNuYXBLaXRTb3VyY2Usbi51aW50MzIoNTApLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBzPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBjPXtzb3VyY2VTeXN0ZW06MCxzb3VyY2VJZDpcIlwiLHNvdXJjZVZlcnNpb246XCJcIixvd25lcklkOnZvaWQgMCxob3N0SWQ6dm9pZCAwLHNuYXBBbGlhczp2b2lkIDAsYXBwU291cmNlOjAsc25hcEtpdFNvdXJjZTp2b2lkIDB9O2Zvcig7ci5wb3M8czspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpjLnNvdXJjZVN5c3RlbT1yLmludDMyKCk7YnJlYWs7Y2FzZSAyOmMuc291cmNlSWQ9ci5zdHJpbmcoKTticmVhaztjYXNlIDM6Yy5zb3VyY2VWZXJzaW9uPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSA1OmMub3duZXJJZD1pLk93bmVyX0lELmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgNzpjLmhvc3RJZD1vLlVVSUQuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSA4OmMuc25hcEFsaWFzPXQuU25hcEFsaWFzLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgNDpjLmFwcFNvdXJjZT1yLmludDMyKCk7YnJlYWs7Y2FzZSA2OmMuc25hcEtpdFNvdXJjZT10LlNuYXBLaXRBdHRyaWJ1dGVzLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gY30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17c291cmNlU3lzdGVtOjAsc291cmNlSWQ6XCJcIixzb3VyY2VWZXJzaW9uOlwiXCIsb3duZXJJZDp2b2lkIDAsaG9zdElkOnZvaWQgMCxzbmFwQWxpYXM6dm9pZCAwLGFwcFNvdXJjZTowLHNuYXBLaXRTb3VyY2U6dm9pZCAwfTtyZXR1cm4gbi5zb3VyY2VTeXN0ZW09ZS5zb3VyY2VTeXN0ZW0/PzAsbi5zb3VyY2VJZD1lLnNvdXJjZUlkPz9cIlwiLG4uc291cmNlVmVyc2lvbj1lLnNvdXJjZVZlcnNpb24/P1wiXCIsbi5vd25lcklkPXZvaWQgMCE9PWUub3duZXJJZCYmbnVsbCE9PWUub3duZXJJZD9pLk93bmVyX0lELmZyb21QYXJ0aWFsKGUub3duZXJJZCk6dm9pZCAwLG4uaG9zdElkPXZvaWQgMCE9PWUuaG9zdElkJiZudWxsIT09ZS5ob3N0SWQ/by5VVUlELmZyb21QYXJ0aWFsKGUuaG9zdElkKTp2b2lkIDAsbi5zbmFwQWxpYXM9dm9pZCAwIT09ZS5zbmFwQWxpYXMmJm51bGwhPT1lLnNuYXBBbGlhcz90LlNuYXBBbGlhcy5mcm9tUGFydGlhbChlLnNuYXBBbGlhcyk6dm9pZCAwLG4uYXBwU291cmNlPWUuYXBwU291cmNlPz8wLG4uc25hcEtpdFNvdXJjZT12b2lkIDAhPT1lLnNuYXBLaXRTb3VyY2UmJm51bGwhPT1lLnNuYXBLaXRTb3VyY2U/dC5TbmFwS2l0QXR0cmlidXRlcy5mcm9tUGFydGlhbChlLnNuYXBLaXRTb3VyY2UpOnZvaWQgMCxufX0sdC5TbmFwS2l0QXR0cmlidXRlcz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnNvdXJjZUFwcERpc3BsYXlOYW1lJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUuc291cmNlQXBwRGlzcGxheU5hbWUpLHZvaWQgMCE9PWUuc291cmNlQXBwT2F1dGhDbGllbnRJZCYmby5VVUlELmVuY29kZShlLnNvdXJjZUFwcE9hdXRoQ2xpZW50SWQsdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtzb3VyY2VBcHBEaXNwbGF5TmFtZTpcIlwiLHNvdXJjZUFwcE9hdXRoQ2xpZW50SWQ6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5zb3VyY2VBcHBEaXNwbGF5TmFtZT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLnNvdXJjZUFwcE9hdXRoQ2xpZW50SWQ9by5VVUlELmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17c291cmNlQXBwRGlzcGxheU5hbWU6XCJcIixzb3VyY2VBcHBPYXV0aENsaWVudElkOnZvaWQgMH07cmV0dXJuIHQuc291cmNlQXBwRGlzcGxheU5hbWU9ZS5zb3VyY2VBcHBEaXNwbGF5TmFtZT8/XCJcIix0LnNvdXJjZUFwcE9hdXRoQ2xpZW50SWQ9dm9pZCAwIT09ZS5zb3VyY2VBcHBPYXV0aENsaWVudElkJiZudWxsIT09ZS5zb3VyY2VBcHBPYXV0aENsaWVudElkP28uVVVJRC5mcm9tUGFydGlhbChlLnNvdXJjZUFwcE9hdXRoQ2xpZW50SWQpOnZvaWQgMCx0fX0sdC5TbmFwQWxpYXM9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5vcmlnaW5hbE93bmVyJiZpLk93bmVyX0lELmVuY29kZShlLm9yaWdpbmFsT3duZXIsdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksXCJcIiE9PWUub3JpZ2luYWxTdG9yeUlkJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUub3JpZ2luYWxTdG9yeUlkKSxcIlwiIT09ZS5vcmlnaW5hbFNuYXBJZCYmdC51aW50MzIoMjYpLnN0cmluZyhlLm9yaWdpbmFsU25hcElkKSx2b2lkIDAhPT1lLm9yaWdpbmFsSG9zdElkJiZvLlVVSUQuZW5jb2RlKGUub3JpZ2luYWxIb3N0SWQsdC51aW50MzIoNTgpLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBzPXtvcmlnaW5hbE93bmVyOnZvaWQgMCxvcmlnaW5hbFN0b3J5SWQ6XCJcIixvcmlnaW5hbFNuYXBJZDpcIlwiLG9yaWdpbmFsSG9zdElkOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOnMub3JpZ2luYWxPd25lcj1pLk93bmVyX0lELmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMjpzLm9yaWdpbmFsU3RvcnlJZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMzpzLm9yaWdpbmFsU25hcElkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA3OnMub3JpZ2luYWxIb3N0SWQ9by5VVUlELmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gc30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17b3JpZ2luYWxPd25lcjp2b2lkIDAsb3JpZ2luYWxTdG9yeUlkOlwiXCIsb3JpZ2luYWxTbmFwSWQ6XCJcIixvcmlnaW5hbEhvc3RJZDp2b2lkIDB9O3JldHVybiB0Lm9yaWdpbmFsT3duZXI9dm9pZCAwIT09ZS5vcmlnaW5hbE93bmVyJiZudWxsIT09ZS5vcmlnaW5hbE93bmVyP2kuT3duZXJfSUQuZnJvbVBhcnRpYWwoZS5vcmlnaW5hbE93bmVyKTp2b2lkIDAsdC5vcmlnaW5hbFN0b3J5SWQ9ZS5vcmlnaW5hbFN0b3J5SWQ/P1wiXCIsdC5vcmlnaW5hbFNuYXBJZD1lLm9yaWdpbmFsU25hcElkPz9cIlwiLHQub3JpZ2luYWxIb3N0SWQ9dm9pZCAwIT09ZS5vcmlnaW5hbEhvc3RJZCYmbnVsbCE9PWUub3JpZ2luYWxIb3N0SWQ/by5VVUlELmZyb21QYXJ0aWFsKGUub3JpZ2luYWxIb3N0SWQpOnZvaWQgMCx0fX19LDYzMjg0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlF1ZXN0aW9uU3RpY2tlclJlcGx5UXVvdGU9dm9pZCAwO2NvbnN0IGk9big1MTU5OCksbz1yKG4oNjIxMDApKTt0LlF1ZXN0aW9uU3RpY2tlclJlcGx5UXVvdGU9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS51c2VySWQmJmkuVVVJRC5lbmNvZGUoZS51c2VySWQsdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBhPXt1c2VySWQ6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/YS51c2VySWQ9aS5VVUlELmRlY29kZShuLG4udWludDMyKCkpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dXNlcklkOnZvaWQgMH07cmV0dXJuIHQudXNlcklkPXZvaWQgMCE9PWUudXNlcklkJiZudWxsIT09ZS51c2VySWQ/aS5VVUlELmZyb21QYXJ0aWFsKGUudXNlcklkKTp2b2lkIDAsdH19fSwyMjU4MjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5SZW5kZXJFZmZlY3RTY2VuZXM9dC5SZW5kZXJFZmZlY3RTY2VuZT10LlJlbmRlckVmZmVjdERBRz10LlJlbmRlckVmZmVjdE5vZGVfSW5wdXQ9dC5SZW5kZXJFZmZlY3ROb2RlPXQuUmVuZGVyRWZmZWN0U2NlbmVfU2NlbmVUeXBlPXZvaWQgMDtjb25zdCBpPW4oODg4KSxvPW4oNzI1NiksYT1uKDYxNzYpLHM9big2OTUyNSksYz1yKG4oNjIxMDApKTt2YXIgbDsobD10LlJlbmRlckVmZmVjdFNjZW5lX1NjZW5lVHlwZXx8KHQuUmVuZGVyRWZmZWN0U2NlbmVfU2NlbmVUeXBlPXt9KSlbbC5VTlNFVD0wXT1cIlVOU0VUXCIsbFtsLkFVRElPPTFdPVwiQVVESU9cIixsW2wuVklERU89Ml09XCJWSURFT1wiLGxbbC5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsdC5SZW5kZXJFZmZlY3ROb2RlPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7XCJjdEl0ZW1cIj09PWUuZWZmZWN0Py4kY2FzZSYmYS5DVEl0ZW1JbnN0YW5jZS5lbmNvZGUoZS5lZmZlY3QuY3RJdGVtLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLFwicmVuZGVyRWZmZWN0XCI9PT1lLmVmZmVjdD8uJGNhc2UmJnMuUmVuZGVyRWZmZWN0LmVuY29kZShlLmVmZmVjdC5yZW5kZXJFZmZlY3Qsbi51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKCk7Zm9yKGNvbnN0IHIgb2YgZS5pbnB1dHMpdC5SZW5kZXJFZmZlY3ROb2RlX0lucHV0LmVuY29kZShyLG4udWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpO24udWludDMyKDI2KS5mb3JrKCk7Zm9yKGNvbnN0IHQgb2YgZS5vdXRwdXRJbmRpY2VzKW4udWludDMyKHQpO3JldHVybiBuLmxkZWxpbSgpLHZvaWQgMCE9PWUuY3JlYXRpdmVFZGl0VGFnJiZpLkNyZWF0aXZlRWRpdFRhZy5lbmNvZGUoZS5jcmVhdGl2ZUVkaXRUYWcsbi51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCksbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2YgYy5kZWZhdWx0LlJlYWRlcj9lOm5ldyBjLmRlZmF1bHQuUmVhZGVyKGUpO2xldCBvPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBsPXtlZmZlY3Q6dm9pZCAwLGlucHV0czpbXSxvdXRwdXRJbmRpY2VzOltdLGNyZWF0aXZlRWRpdFRhZzp2b2lkIDB9O2Zvcig7ci5wb3M8bzspe2NvbnN0IGU9ci51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpsLmVmZmVjdD17JGNhc2U6XCJjdEl0ZW1cIixjdEl0ZW06YS5DVEl0ZW1JbnN0YW5jZS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSA1OmwuZWZmZWN0PXskY2FzZTpcInJlbmRlckVmZmVjdFwiLHJlbmRlckVmZmVjdDpzLlJlbmRlckVmZmVjdC5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAyOmwuaW5wdXRzLnB1c2godC5SZW5kZXJFZmZlY3ROb2RlX0lucHV0LmRlY29kZShyLHIudWludDMyKCkpKTticmVhaztjYXNlIDM6aWYoMj09KDcmZSkpe2NvbnN0IGU9ci51aW50MzIoKStyLnBvcztmb3IoO3IucG9zPGU7KWwub3V0cHV0SW5kaWNlcy5wdXNoKHIudWludDMyKCkpfWVsc2UgbC5vdXRwdXRJbmRpY2VzLnB1c2goci51aW50MzIoKSk7YnJlYWs7Y2FzZSA0OmwuY3JlYXRpdmVFZGl0VGFnPWkuQ3JlYXRpdmVFZGl0VGFnLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gbH0sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17ZWZmZWN0OnZvaWQgMCxpbnB1dHM6W10sb3V0cHV0SW5kaWNlczpbXSxjcmVhdGl2ZUVkaXRUYWc6dm9pZCAwfTtyZXR1cm5cImN0SXRlbVwiPT09ZS5lZmZlY3Q/LiRjYXNlJiZ2b2lkIDAhPT1lLmVmZmVjdD8uY3RJdGVtJiZudWxsIT09ZS5lZmZlY3Q/LmN0SXRlbSYmKG4uZWZmZWN0PXskY2FzZTpcImN0SXRlbVwiLGN0SXRlbTphLkNUSXRlbUluc3RhbmNlLmZyb21QYXJ0aWFsKGUuZWZmZWN0LmN0SXRlbSl9KSxcInJlbmRlckVmZmVjdFwiPT09ZS5lZmZlY3Q/LiRjYXNlJiZ2b2lkIDAhPT1lLmVmZmVjdD8ucmVuZGVyRWZmZWN0JiZudWxsIT09ZS5lZmZlY3Q/LnJlbmRlckVmZmVjdCYmKG4uZWZmZWN0PXskY2FzZTpcInJlbmRlckVmZmVjdFwiLHJlbmRlckVmZmVjdDpzLlJlbmRlckVmZmVjdC5mcm9tUGFydGlhbChlLmVmZmVjdC5yZW5kZXJFZmZlY3QpfSksbi5pbnB1dHM9ZS5pbnB1dHM/Lm1hcCgoZT0+dC5SZW5kZXJFZmZlY3ROb2RlX0lucHV0LmZyb21QYXJ0aWFsKGUpKSl8fFtdLG4ub3V0cHV0SW5kaWNlcz1lLm91dHB1dEluZGljZXM/Lm1hcCgoZT0+ZSkpfHxbXSxuLmNyZWF0aXZlRWRpdFRhZz12b2lkIDAhPT1lLmNyZWF0aXZlRWRpdFRhZyYmbnVsbCE9PWUuY3JlYXRpdmVFZGl0VGFnP2kuQ3JlYXRpdmVFZGl0VGFnLmZyb21QYXJ0aWFsKGUuY3JlYXRpdmVFZGl0VGFnKTp2b2lkIDAsbn19LHQuUmVuZGVyRWZmZWN0Tm9kZV9JbnB1dD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpjLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwidHJhY2tJbmRleFwiPT09ZS5pbnB1dFNvdXJjZT8uJGNhc2UmJnQudWludDMyKDY0KS51aW50MzIoZS5pbnB1dFNvdXJjZS50cmFja0luZGV4KSxcInJlbmRlckVmZmVjdE91dHB1dEluZGV4XCI9PT1lLmlucHV0U291cmNlPy4kY2FzZSYmdC51aW50MzIoNzIpLnVpbnQzMihlLmlucHV0U291cmNlLnJlbmRlckVmZmVjdE91dHB1dEluZGV4KSxcInBsYXliYWNrTGF5ZXJJbmRleFwiPT09ZS5pbnB1dFNvdXJjZT8uJGNhc2UmJnQudWludDMyKDgwKS51aW50MzIoZS5pbnB1dFNvdXJjZS5wbGF5YmFja0xheWVySW5kZXgpLFwidHJhY2tTZWdtZW50SW5kZXhcIj09PWUuaW5wdXRTb3VyY2U/LiRjYXNlJiZ0LnVpbnQzMig4OCkudWludDMyKGUuaW5wdXRTb3VyY2UudHJhY2tTZWdtZW50SW5kZXgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17aW5wdXRTb3VyY2U6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDg6aS5pbnB1dFNvdXJjZT17JGNhc2U6XCJ0cmFja0luZGV4XCIsdHJhY2tJbmRleDpuLnVpbnQzMigpfTticmVhaztjYXNlIDk6aS5pbnB1dFNvdXJjZT17JGNhc2U6XCJyZW5kZXJFZmZlY3RPdXRwdXRJbmRleFwiLHJlbmRlckVmZmVjdE91dHB1dEluZGV4Om4udWludDMyKCl9O2JyZWFrO2Nhc2UgMTA6aS5pbnB1dFNvdXJjZT17JGNhc2U6XCJwbGF5YmFja0xheWVySW5kZXhcIixwbGF5YmFja0xheWVySW5kZXg6bi51aW50MzIoKX07YnJlYWs7Y2FzZSAxMTppLmlucHV0U291cmNlPXskY2FzZTpcInRyYWNrU2VnbWVudEluZGV4XCIsdHJhY2tTZWdtZW50SW5kZXg6bi51aW50MzIoKX07YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtpbnB1dFNvdXJjZTp2b2lkIDB9O3JldHVyblwidHJhY2tJbmRleFwiPT09ZS5pbnB1dFNvdXJjZT8uJGNhc2UmJnZvaWQgMCE9PWUuaW5wdXRTb3VyY2U/LnRyYWNrSW5kZXgmJm51bGwhPT1lLmlucHV0U291cmNlPy50cmFja0luZGV4JiYodC5pbnB1dFNvdXJjZT17JGNhc2U6XCJ0cmFja0luZGV4XCIsdHJhY2tJbmRleDplLmlucHV0U291cmNlLnRyYWNrSW5kZXh9KSxcInJlbmRlckVmZmVjdE91dHB1dEluZGV4XCI9PT1lLmlucHV0U291cmNlPy4kY2FzZSYmdm9pZCAwIT09ZS5pbnB1dFNvdXJjZT8ucmVuZGVyRWZmZWN0T3V0cHV0SW5kZXgmJm51bGwhPT1lLmlucHV0U291cmNlPy5yZW5kZXJFZmZlY3RPdXRwdXRJbmRleCYmKHQuaW5wdXRTb3VyY2U9eyRjYXNlOlwicmVuZGVyRWZmZWN0T3V0cHV0SW5kZXhcIixyZW5kZXJFZmZlY3RPdXRwdXRJbmRleDplLmlucHV0U291cmNlLnJlbmRlckVmZmVjdE91dHB1dEluZGV4fSksXCJwbGF5YmFja0xheWVySW5kZXhcIj09PWUuaW5wdXRTb3VyY2U/LiRjYXNlJiZ2b2lkIDAhPT1lLmlucHV0U291cmNlPy5wbGF5YmFja0xheWVySW5kZXgmJm51bGwhPT1lLmlucHV0U291cmNlPy5wbGF5YmFja0xheWVySW5kZXgmJih0LmlucHV0U291cmNlPXskY2FzZTpcInBsYXliYWNrTGF5ZXJJbmRleFwiLHBsYXliYWNrTGF5ZXJJbmRleDplLmlucHV0U291cmNlLnBsYXliYWNrTGF5ZXJJbmRleH0pLFwidHJhY2tTZWdtZW50SW5kZXhcIj09PWUuaW5wdXRTb3VyY2U/LiRjYXNlJiZ2b2lkIDAhPT1lLmlucHV0U291cmNlPy50cmFja1NlZ21lbnRJbmRleCYmbnVsbCE9PWUuaW5wdXRTb3VyY2U/LnRyYWNrU2VnbWVudEluZGV4JiYodC5pbnB1dFNvdXJjZT17JGNhc2U6XCJ0cmFja1NlZ21lbnRJbmRleFwiLHRyYWNrU2VnbWVudEluZGV4OmUuaW5wdXRTb3VyY2UudHJhY2tTZWdtZW50SW5kZXh9KSx0fX0sdC5SZW5kZXJFZmZlY3REQUc9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Yy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgciBvZiBlLnJlbmRlckVmZmVjdE5vZGVzKXQuUmVuZGVyRWZmZWN0Tm9kZS5lbmNvZGUocixuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gdm9pZCAwIT09ZS5zdGFydFRpbWVNcyYmby5UaW1lSW5zdGFudC5lbmNvZGUoZS5zdGFydFRpbWVNcyxuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmR1cmF0aW9uTXMmJm8uVGltZUluc3RhbnQuZW5jb2RlKGUuZHVyYXRpb25NcyxuLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBjLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGMuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGE9e3JlbmRlckVmZmVjdE5vZGVzOltdLHN0YXJ0VGltZU1zOnZvaWQgMCxkdXJhdGlvbk1zOnZvaWQgMH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmEucmVuZGVyRWZmZWN0Tm9kZXMucHVzaCh0LlJlbmRlckVmZmVjdE5vZGUuZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2Nhc2UgMjphLnN0YXJ0VGltZU1zPW8uVGltZUluc3RhbnQuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAzOmEuZHVyYXRpb25Ncz1vLlRpbWVJbnN0YW50LmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17cmVuZGVyRWZmZWN0Tm9kZXM6W10sc3RhcnRUaW1lTXM6dm9pZCAwLGR1cmF0aW9uTXM6dm9pZCAwfTtyZXR1cm4gbi5yZW5kZXJFZmZlY3ROb2Rlcz1lLnJlbmRlckVmZmVjdE5vZGVzPy5tYXAoKGU9PnQuUmVuZGVyRWZmZWN0Tm9kZS5mcm9tUGFydGlhbChlKSkpfHxbXSxuLnN0YXJ0VGltZU1zPXZvaWQgMCE9PWUuc3RhcnRUaW1lTXMmJm51bGwhPT1lLnN0YXJ0VGltZU1zP28uVGltZUluc3RhbnQuZnJvbVBhcnRpYWwoZS5zdGFydFRpbWVNcyk6dm9pZCAwLG4uZHVyYXRpb25Ncz12b2lkIDAhPT1lLmR1cmF0aW9uTXMmJm51bGwhPT1lLmR1cmF0aW9uTXM/by5UaW1lSW5zdGFudC5mcm9tUGFydGlhbChlLmR1cmF0aW9uTXMpOnZvaWQgMCxufX0sdC5SZW5kZXJFZmZlY3RTY2VuZT17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpjLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO2Zvcihjb25zdCByIG9mIGUucmVuZGVyRWZmZWN0RGFncyl0LlJlbmRlckVmZmVjdERBRy5lbmNvZGUocixuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gMCE9PWUuc2NlbmVUeXBlJiZuLnVpbnQzMigxNikuaW50MzIoZS5zY2VuZVR5cGUpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17cmVuZGVyRWZmZWN0RGFnczpbXSxzY2VuZVR5cGU6MH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8ucmVuZGVyRWZmZWN0RGFncy5wdXNoKHQuUmVuZGVyRWZmZWN0REFHLmRlY29kZShyLHIudWludDMyKCkpKTticmVhaztjYXNlIDI6by5zY2VuZVR5cGU9ci5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17cmVuZGVyRWZmZWN0RGFnczpbXSxzY2VuZVR5cGU6MH07cmV0dXJuIG4ucmVuZGVyRWZmZWN0RGFncz1lLnJlbmRlckVmZmVjdERhZ3M/Lm1hcCgoZT0+dC5SZW5kZXJFZmZlY3REQUcuZnJvbVBhcnRpYWwoZSkpKXx8W10sbi5zY2VuZVR5cGU9ZS5zY2VuZVR5cGU/PzAsbn19LHQuUmVuZGVyRWZmZWN0U2NlbmVzPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmMuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7Zm9yKGNvbnN0IHIgb2YgZS5yZW5kZXJFZmZlY3RTY2VuZXMpdC5SZW5kZXJFZmZlY3RTY2VuZS5lbmNvZGUocixuLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gMCE9PWUucmVuZGVyRWZmZWN0T3V0cHV0Q291bnRlciYmbi51aW50MzIoMjQpLnVpbnQzMihlLnJlbmRlckVmZmVjdE91dHB1dENvdW50ZXIpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIGMuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgYy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgbz17cmVuZGVyRWZmZWN0U2NlbmVzOltdLHJlbmRlckVmZmVjdE91dHB1dENvdW50ZXI6MH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOm8ucmVuZGVyRWZmZWN0U2NlbmVzLnB1c2godC5SZW5kZXJFZmZlY3RTY2VuZS5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAzOm8ucmVuZGVyRWZmZWN0T3V0cHV0Q291bnRlcj1yLnVpbnQzMigpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17cmVuZGVyRWZmZWN0U2NlbmVzOltdLHJlbmRlckVmZmVjdE91dHB1dENvdW50ZXI6MH07cmV0dXJuIG4ucmVuZGVyRWZmZWN0U2NlbmVzPWUucmVuZGVyRWZmZWN0U2NlbmVzPy5tYXAoKGU9PnQuUmVuZGVyRWZmZWN0U2NlbmUuZnJvbVBhcnRpYWwoZSkpKXx8W10sbi5yZW5kZXJFZmZlY3RPdXRwdXRDb3VudGVyPWUucmVuZGVyRWZmZWN0T3V0cHV0Q291bnRlcj8/MCxufX19LDE5NTk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuU25hcEVudmVsb3BlPXQuU25hcERvY19JRD10LlNuYXBEb2M9dC5TbmFwRG9jX0lEX05hbWVzcGFjZT12b2lkIDA7Y29uc3QgaT1yKG4oNDE1ODMpKSxvPW4oODgxNjgpLGE9big2OTI1MSkscz1uKDIzNzg1KSxjPW4oODk3NzIpLGw9big4OTg3NSksdT1uKDU5NCksZD1uKDE2NTkpLGY9big0Njk1MCkscD1uKDE3NSksbT1uKDk3ODM0KSxoPW4oMTUxNzYpLHY9big4MTAwNCksZz1uKDc0NDc2KSx5PW4oNDU5NDgpLEU9big3ODc5KSxfPW4oMjMxODcpLEk9big3MDMxOCksUz1uKDQxODcyKSxiPW4oNTY1NjIpLFQ9big1MzQzNSksQz1uKDI1NjQ1KSxBPW4oNDU0MjQpLFI9bigyMTMxMSksaz1uKDg5NDExKSxPPW4oMjc0MjEpLE49bigxMTE1Nyksdz1yKG4oNjIxMDApKTtmdW5jdGlvbiBEKCl7cmV0dXJue2NvbXBvbmVudFR5cGU6dm9pZCAwLGNvbXBvbmVudEJ5dGVzOm5ldyBVaW50OEFycmF5LGVuY3J5cHRlZDohMX19dmFyIFA7KFA9dC5TbmFwRG9jX0lEX05hbWVzcGFjZXx8KHQuU25hcERvY19JRF9OYW1lc3BhY2U9e30pKVtQLlVOU0VUPTBdPVwiVU5TRVRcIixQW1AuUlNQX0RJU0NPVkVSPTFdPVwiUlNQX0RJU0NPVkVSXCIsUFtQLlJTUF9BRFM9Ml09XCJSU1BfQURTXCIsUFtQLk9VUl9TVE9SSUVTPTNdPVwiT1VSX1NUT1JJRVNcIixQW1AuUE9QVUxBUl9TVE9SSUVTPTRdPVwiUE9QVUxBUl9TVE9SSUVTXCIsUFtQLk9GRklDSUFMX1NUT1JJRVM9NV09XCJPRkZJQ0lBTF9TVE9SSUVTXCIsUFtQLlNUT1JZX0NSRUFUSU9OX1NFUlZJQ0U9Nl09XCJTVE9SWV9DUkVBVElPTl9TRVJWSUNFXCIsUFtQLlNUT1JZX0NSRUFUSU9OX1NFUlZJQ0VfQ09NUEFUPTddPVwiU1RPUllfQ1JFQVRJT05fU0VSVklDRV9DT01QQVRcIixQW1AuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLHQuU25hcERvYz17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp3LmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3ZvaWQgMCE9PWUuaWQmJnQuU25hcERvY19JRC5lbmNvZGUoZS5pZCxuLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSxcIjBcIiE9PWUubWVkaWFMaXN0SWRDb3VudGVyJiZuLnVpbnQzMig2NCkuaW50NjQoZS5tZWRpYUxpc3RJZENvdW50ZXIpO2Zvcihjb25zdCB0IG9mIGUubWVkaWFSZWZlcmVuY2VzKW8uTWVkaWFSZWZlcmVuY2UuZW5jb2RlKHQsbi51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCk7dm9pZCAwIT09ZS5wbGF5YmFjayYmYS5QbGF5YmFjay5lbmNvZGUoZS5wbGF5YmFjayxuLnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnRodW1ibmFpbCYmcy5UaHVtYm5haWwuZW5jb2RlKGUudGh1bWJuYWlsLG4udWludDMyKDU4KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUucGVybWl0dGVkVXNlckFjdGlvbnMmJmMuUGVybWl0dGVkVXNlckFjdGlvbnMuZW5jb2RlKGUucGVybWl0dGVkVXNlckFjdGlvbnMsbi51aW50MzIoMTMwKS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUudW5sb2NrYWJsZXMmJmwuVW5sb2NrYWJsZXMuZW5jb2RlKGUudW5sb2NrYWJsZXMsbi51aW50MzIoNzQpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5zcGVjdGFjbGVzJiZ1LlNwZWN0YWNsZXMuZW5jb2RlKGUuc3BlY3RhY2xlcyxuLnVpbnQzMig4MikuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmxlbnMmJmQuTGVucy5lbmNvZGUoZS5sZW5zLG4udWludDMyKDkwKS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuY3JlYXRpdmVLaXRTb3VyY2VBcHAmJmYuQ3JlYXRpdmVLaXRTb3VyY2VBcHAuZW5jb2RlKGUuY3JlYXRpdmVLaXRTb3VyY2VBcHAsbi51aW50MzIoOTgpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5hdHRhY2htZW50cyYmcC5BdHRhY2htZW50cy5lbmNvZGUoZS5hdHRhY2htZW50cyxuLnVpbnQzMigxMDYpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5jcmVhdGl2ZVRvb2xzQW5hbHl0aWNzJiZtLkNyZWF0aXZlVG9vbHNBbmFseXRpY3MuZW5jb2RlKGUuY3JlYXRpdmVUb29sc0FuYWx5dGljcyxuLnVpbnQzMigxMTQpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5sZWdhY3lNdWx0aXNuYXAmJmguTGVnYWN5TXVsdGlzbmFwLmVuY29kZShlLmxlZ2FjeU11bHRpc25hcCxuLnVpbnQzMigxMjIpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS50aW1pbmcmJnYuVGltaW5nLmVuY29kZShlLnRpbWluZyxuLnVpbnQzMigxMzgpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5hdHRyaWJ1dGlvbiYmZy5BdHRyaWJ1dGlvbi5lbmNvZGUoZS5hdHRyaWJ1dGlvbixuLnVpbnQzMigxNDYpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5jYXB0dXJlQ2hhcmFjdGVyaXN0aWNzJiZ5LkNhcHR1cmVDaGFyYWN0ZXJpc3RpY3MuZW5jb2RlKGUuY2FwdHVyZUNoYXJhY3RlcmlzdGljcyxuLnVpbnQzMigxNTQpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5wYWNrYWdpbmcmJkUuUGFja2FnaW5nLmVuY29kZShlLnBhY2thZ2luZyxuLnVpbnQzMigxNjIpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5nZW5lcmF0ZWRDYW1lbyYmXy5HZW5lcmF0ZWRDYW1lby5lbmNvZGUoZS5nZW5lcmF0ZWRDYW1lbyxuLnVpbnQzMigxNzApLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5wcm92ZW5hbmNlJiZJLlByb3ZlbmFuY2UuZW5jb2RlKGUucHJvdmVuYW5jZSxuLnVpbnQzMigxNzgpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS52aWRlb0ludGVydmFsJiZTLlZpZGVvSW50ZXJ2YWwuZW5jb2RlKGUudmlkZW9JbnRlcnZhbCxuLnVpbnQzMigxODYpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5jYW1lbyYmYi5DYW1lb01ldGFkYXRhLmVuY29kZShlLmNhbWVvLG4udWludDMyKDE5NCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmxvY2F0aW9uJiZULkxvY2F0aW9uLmVuY29kZShlLmxvY2F0aW9uLG4udWludDMyKDIwMikuZm9yaygpKS5sZGVsaW0oKTtmb3IoY29uc3QgdCBvZiBlLnN0aWNrZXJNZXRhZGF0YSlDLlN0aWNrZXJNZXRhZGF0YS5lbmNvZGUodCxuLnVpbnQzMigyMTApLmZvcmsoKSkubGRlbGltKCk7dm9pZCAwIT09ZS5hZHNUcmFja2luZyYmQS5BZHNUcmFja2luZy5lbmNvZGUoZS5hZHNUcmFja2luZyxuLnVpbnQzMigyMTgpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5ncmlkUHJvcGVydGllcyYmUi5HcmlkUHJvcGVydGllcy5lbmNvZGUoZS5ncmlkUHJvcGVydGllcyxuLnVpbnQzMigyMjYpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5kcmF3aW5ncyYmay5EcmF3aW5ncy5lbmNvZGUoZS5kcmF3aW5ncyxuLnVpbnQzMigyMzQpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5jYW1lb1RpbGUmJk8uQ2FtZW9UaWxlLmVuY29kZShlLmNhbWVvVGlsZSxuLnVpbnQzMigyNDIpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5hZFBsYWNlbWVudCYmTi5BZFBsYWNlbWVudC5lbmNvZGUoZS5hZFBsYWNlbWVudCxuLnVpbnQzMigyNTApLmZvcmsoKSkubGRlbGltKCk7Zm9yKGNvbnN0IHIgb2YgZS5lbnZlbG9wZSl0LlNuYXBFbnZlbG9wZS5lbmNvZGUocixuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gbn0sZGVjb2RlKGUsbil7Y29uc3Qgcj1lIGluc3RhbmNlb2Ygdy5kZWZhdWx0LlJlYWRlcj9lOm5ldyB3LmRlZmF1bHQuUmVhZGVyKGUpO2xldCBpPXZvaWQgMD09PW4/ci5sZW46ci5wb3Mrbjtjb25zdCBEPXtpZDp2b2lkIDAsbWVkaWFMaXN0SWRDb3VudGVyOlwiMFwiLG1lZGlhUmVmZXJlbmNlczpbXSxwbGF5YmFjazp2b2lkIDAsdGh1bWJuYWlsOnZvaWQgMCxwZXJtaXR0ZWRVc2VyQWN0aW9uczp2b2lkIDAsdW5sb2NrYWJsZXM6dm9pZCAwLHNwZWN0YWNsZXM6dm9pZCAwLGxlbnM6dm9pZCAwLGNyZWF0aXZlS2l0U291cmNlQXBwOnZvaWQgMCxhdHRhY2htZW50czp2b2lkIDAsY3JlYXRpdmVUb29sc0FuYWx5dGljczp2b2lkIDAsbGVnYWN5TXVsdGlzbmFwOnZvaWQgMCx0aW1pbmc6dm9pZCAwLGF0dHJpYnV0aW9uOnZvaWQgMCxjYXB0dXJlQ2hhcmFjdGVyaXN0aWNzOnZvaWQgMCxwYWNrYWdpbmc6dm9pZCAwLGdlbmVyYXRlZENhbWVvOnZvaWQgMCxwcm92ZW5hbmNlOnZvaWQgMCx2aWRlb0ludGVydmFsOnZvaWQgMCxjYW1lbzp2b2lkIDAsbG9jYXRpb246dm9pZCAwLHN0aWNrZXJNZXRhZGF0YTpbXSxhZHNUcmFja2luZzp2b2lkIDAsZ3JpZFByb3BlcnRpZXM6dm9pZCAwLGRyYXdpbmdzOnZvaWQgMCxjYW1lb1RpbGU6dm9pZCAwLGFkUGxhY2VtZW50OnZvaWQgMCxlbnZlbG9wZTpbXX07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAzOkQuaWQ9dC5TbmFwRG9jX0lELmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgODpELm1lZGlhTGlzdElkQ291bnRlcj1yLmludDY0KCkudG9TdHJpbmcoKTticmVhaztjYXNlIDQ6RC5tZWRpYVJlZmVyZW5jZXMucHVzaChvLk1lZGlhUmVmZXJlbmNlLmRlY29kZShyLHIudWludDMyKCkpKTticmVhaztjYXNlIDU6RC5wbGF5YmFjaz1hLlBsYXliYWNrLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgNzpELnRodW1ibmFpbD1zLlRodW1ibmFpbC5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDE2OkQucGVybWl0dGVkVXNlckFjdGlvbnM9Yy5QZXJtaXR0ZWRVc2VyQWN0aW9ucy5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDk6RC51bmxvY2thYmxlcz1sLlVubG9ja2FibGVzLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMTA6RC5zcGVjdGFjbGVzPXUuU3BlY3RhY2xlcy5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDExOkQubGVucz1kLkxlbnMuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAxMjpELmNyZWF0aXZlS2l0U291cmNlQXBwPWYuQ3JlYXRpdmVLaXRTb3VyY2VBcHAuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAxMzpELmF0dGFjaG1lbnRzPXAuQXR0YWNobWVudHMuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAxNDpELmNyZWF0aXZlVG9vbHNBbmFseXRpY3M9bS5DcmVhdGl2ZVRvb2xzQW5hbHl0aWNzLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMTU6RC5sZWdhY3lNdWx0aXNuYXA9aC5MZWdhY3lNdWx0aXNuYXAuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAxNzpELnRpbWluZz12LlRpbWluZy5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDE4OkQuYXR0cmlidXRpb249Zy5BdHRyaWJ1dGlvbi5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDE5OkQuY2FwdHVyZUNoYXJhY3RlcmlzdGljcz15LkNhcHR1cmVDaGFyYWN0ZXJpc3RpY3MuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyMDpELnBhY2thZ2luZz1FLlBhY2thZ2luZy5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDIxOkQuZ2VuZXJhdGVkQ2FtZW89Xy5HZW5lcmF0ZWRDYW1lby5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDIyOkQucHJvdmVuYW5jZT1JLlByb3ZlbmFuY2UuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyMzpELnZpZGVvSW50ZXJ2YWw9Uy5WaWRlb0ludGVydmFsLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMjQ6RC5jYW1lbz1iLkNhbWVvTWV0YWRhdGEuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyNTpELmxvY2F0aW9uPVQuTG9jYXRpb24uZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7Y2FzZSAyNjpELnN0aWNrZXJNZXRhZGF0YS5wdXNoKEMuU3RpY2tlck1ldGFkYXRhLmRlY29kZShyLHIudWludDMyKCkpKTticmVhaztjYXNlIDI3OkQuYWRzVHJhY2tpbmc9QS5BZHNUcmFja2luZy5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDI4OkQuZ3JpZFByb3BlcnRpZXM9Ui5HcmlkUHJvcGVydGllcy5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDI5OkQuZHJhd2luZ3M9ay5EcmF3aW5ncy5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDMwOkQuY2FtZW9UaWxlPU8uQ2FtZW9UaWxlLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMzE6RC5hZFBsYWNlbWVudD1OLkFkUGxhY2VtZW50LmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgMjpELmVudmVsb3BlLnB1c2godC5TbmFwRW52ZWxvcGUuZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2RlZmF1bHQ6ci5za2lwVHlwZSg3JmUpfX1yZXR1cm4gRH0sZnJvbVBhcnRpYWwoZSl7Y29uc3Qgbj17aWQ6dm9pZCAwLG1lZGlhTGlzdElkQ291bnRlcjpcIjBcIixtZWRpYVJlZmVyZW5jZXM6W10scGxheWJhY2s6dm9pZCAwLHRodW1ibmFpbDp2b2lkIDAscGVybWl0dGVkVXNlckFjdGlvbnM6dm9pZCAwLHVubG9ja2FibGVzOnZvaWQgMCxzcGVjdGFjbGVzOnZvaWQgMCxsZW5zOnZvaWQgMCxjcmVhdGl2ZUtpdFNvdXJjZUFwcDp2b2lkIDAsYXR0YWNobWVudHM6dm9pZCAwLGNyZWF0aXZlVG9vbHNBbmFseXRpY3M6dm9pZCAwLGxlZ2FjeU11bHRpc25hcDp2b2lkIDAsdGltaW5nOnZvaWQgMCxhdHRyaWJ1dGlvbjp2b2lkIDAsY2FwdHVyZUNoYXJhY3RlcmlzdGljczp2b2lkIDAscGFja2FnaW5nOnZvaWQgMCxnZW5lcmF0ZWRDYW1lbzp2b2lkIDAscHJvdmVuYW5jZTp2b2lkIDAsdmlkZW9JbnRlcnZhbDp2b2lkIDAsY2FtZW86dm9pZCAwLGxvY2F0aW9uOnZvaWQgMCxzdGlja2VyTWV0YWRhdGE6W10sYWRzVHJhY2tpbmc6dm9pZCAwLGdyaWRQcm9wZXJ0aWVzOnZvaWQgMCxkcmF3aW5nczp2b2lkIDAsY2FtZW9UaWxlOnZvaWQgMCxhZFBsYWNlbWVudDp2b2lkIDAsZW52ZWxvcGU6W119O3JldHVybiBuLmlkPXZvaWQgMCE9PWUuaWQmJm51bGwhPT1lLmlkP3QuU25hcERvY19JRC5mcm9tUGFydGlhbChlLmlkKTp2b2lkIDAsbi5tZWRpYUxpc3RJZENvdW50ZXI9ZS5tZWRpYUxpc3RJZENvdW50ZXI/P1wiMFwiLG4ubWVkaWFSZWZlcmVuY2VzPWUubWVkaWFSZWZlcmVuY2VzPy5tYXAoKGU9Pm8uTWVkaWFSZWZlcmVuY2UuZnJvbVBhcnRpYWwoZSkpKXx8W10sbi5wbGF5YmFjaz12b2lkIDAhPT1lLnBsYXliYWNrJiZudWxsIT09ZS5wbGF5YmFjaz9hLlBsYXliYWNrLmZyb21QYXJ0aWFsKGUucGxheWJhY2spOnZvaWQgMCxuLnRodW1ibmFpbD12b2lkIDAhPT1lLnRodW1ibmFpbCYmbnVsbCE9PWUudGh1bWJuYWlsP3MuVGh1bWJuYWlsLmZyb21QYXJ0aWFsKGUudGh1bWJuYWlsKTp2b2lkIDAsbi5wZXJtaXR0ZWRVc2VyQWN0aW9ucz12b2lkIDAhPT1lLnBlcm1pdHRlZFVzZXJBY3Rpb25zJiZudWxsIT09ZS5wZXJtaXR0ZWRVc2VyQWN0aW9ucz9jLlBlcm1pdHRlZFVzZXJBY3Rpb25zLmZyb21QYXJ0aWFsKGUucGVybWl0dGVkVXNlckFjdGlvbnMpOnZvaWQgMCxuLnVubG9ja2FibGVzPXZvaWQgMCE9PWUudW5sb2NrYWJsZXMmJm51bGwhPT1lLnVubG9ja2FibGVzP2wuVW5sb2NrYWJsZXMuZnJvbVBhcnRpYWwoZS51bmxvY2thYmxlcyk6dm9pZCAwLG4uc3BlY3RhY2xlcz12b2lkIDAhPT1lLnNwZWN0YWNsZXMmJm51bGwhPT1lLnNwZWN0YWNsZXM/dS5TcGVjdGFjbGVzLmZyb21QYXJ0aWFsKGUuc3BlY3RhY2xlcyk6dm9pZCAwLG4ubGVucz12b2lkIDAhPT1lLmxlbnMmJm51bGwhPT1lLmxlbnM/ZC5MZW5zLmZyb21QYXJ0aWFsKGUubGVucyk6dm9pZCAwLG4uY3JlYXRpdmVLaXRTb3VyY2VBcHA9dm9pZCAwIT09ZS5jcmVhdGl2ZUtpdFNvdXJjZUFwcCYmbnVsbCE9PWUuY3JlYXRpdmVLaXRTb3VyY2VBcHA/Zi5DcmVhdGl2ZUtpdFNvdXJjZUFwcC5mcm9tUGFydGlhbChlLmNyZWF0aXZlS2l0U291cmNlQXBwKTp2b2lkIDAsbi5hdHRhY2htZW50cz12b2lkIDAhPT1lLmF0dGFjaG1lbnRzJiZudWxsIT09ZS5hdHRhY2htZW50cz9wLkF0dGFjaG1lbnRzLmZyb21QYXJ0aWFsKGUuYXR0YWNobWVudHMpOnZvaWQgMCxuLmNyZWF0aXZlVG9vbHNBbmFseXRpY3M9dm9pZCAwIT09ZS5jcmVhdGl2ZVRvb2xzQW5hbHl0aWNzJiZudWxsIT09ZS5jcmVhdGl2ZVRvb2xzQW5hbHl0aWNzP20uQ3JlYXRpdmVUb29sc0FuYWx5dGljcy5mcm9tUGFydGlhbChlLmNyZWF0aXZlVG9vbHNBbmFseXRpY3MpOnZvaWQgMCxuLmxlZ2FjeU11bHRpc25hcD12b2lkIDAhPT1lLmxlZ2FjeU11bHRpc25hcCYmbnVsbCE9PWUubGVnYWN5TXVsdGlzbmFwP2guTGVnYWN5TXVsdGlzbmFwLmZyb21QYXJ0aWFsKGUubGVnYWN5TXVsdGlzbmFwKTp2b2lkIDAsbi50aW1pbmc9dm9pZCAwIT09ZS50aW1pbmcmJm51bGwhPT1lLnRpbWluZz92LlRpbWluZy5mcm9tUGFydGlhbChlLnRpbWluZyk6dm9pZCAwLG4uYXR0cmlidXRpb249dm9pZCAwIT09ZS5hdHRyaWJ1dGlvbiYmbnVsbCE9PWUuYXR0cmlidXRpb24/Zy5BdHRyaWJ1dGlvbi5mcm9tUGFydGlhbChlLmF0dHJpYnV0aW9uKTp2b2lkIDAsbi5jYXB0dXJlQ2hhcmFjdGVyaXN0aWNzPXZvaWQgMCE9PWUuY2FwdHVyZUNoYXJhY3RlcmlzdGljcyYmbnVsbCE9PWUuY2FwdHVyZUNoYXJhY3RlcmlzdGljcz95LkNhcHR1cmVDaGFyYWN0ZXJpc3RpY3MuZnJvbVBhcnRpYWwoZS5jYXB0dXJlQ2hhcmFjdGVyaXN0aWNzKTp2b2lkIDAsbi5wYWNrYWdpbmc9dm9pZCAwIT09ZS5wYWNrYWdpbmcmJm51bGwhPT1lLnBhY2thZ2luZz9FLlBhY2thZ2luZy5mcm9tUGFydGlhbChlLnBhY2thZ2luZyk6dm9pZCAwLG4uZ2VuZXJhdGVkQ2FtZW89dm9pZCAwIT09ZS5nZW5lcmF0ZWRDYW1lbyYmbnVsbCE9PWUuZ2VuZXJhdGVkQ2FtZW8/Xy5HZW5lcmF0ZWRDYW1lby5mcm9tUGFydGlhbChlLmdlbmVyYXRlZENhbWVvKTp2b2lkIDAsbi5wcm92ZW5hbmNlPXZvaWQgMCE9PWUucHJvdmVuYW5jZSYmbnVsbCE9PWUucHJvdmVuYW5jZT9JLlByb3ZlbmFuY2UuZnJvbVBhcnRpYWwoZS5wcm92ZW5hbmNlKTp2b2lkIDAsbi52aWRlb0ludGVydmFsPXZvaWQgMCE9PWUudmlkZW9JbnRlcnZhbCYmbnVsbCE9PWUudmlkZW9JbnRlcnZhbD9TLlZpZGVvSW50ZXJ2YWwuZnJvbVBhcnRpYWwoZS52aWRlb0ludGVydmFsKTp2b2lkIDAsbi5jYW1lbz12b2lkIDAhPT1lLmNhbWVvJiZudWxsIT09ZS5jYW1lbz9iLkNhbWVvTWV0YWRhdGEuZnJvbVBhcnRpYWwoZS5jYW1lbyk6dm9pZCAwLG4ubG9jYXRpb249dm9pZCAwIT09ZS5sb2NhdGlvbiYmbnVsbCE9PWUubG9jYXRpb24/VC5Mb2NhdGlvbi5mcm9tUGFydGlhbChlLmxvY2F0aW9uKTp2b2lkIDAsbi5zdGlja2VyTWV0YWRhdGE9ZS5zdGlja2VyTWV0YWRhdGE/Lm1hcCgoZT0+Qy5TdGlja2VyTWV0YWRhdGEuZnJvbVBhcnRpYWwoZSkpKXx8W10sbi5hZHNUcmFja2luZz12b2lkIDAhPT1lLmFkc1RyYWNraW5nJiZudWxsIT09ZS5hZHNUcmFja2luZz9BLkFkc1RyYWNraW5nLmZyb21QYXJ0aWFsKGUuYWRzVHJhY2tpbmcpOnZvaWQgMCxuLmdyaWRQcm9wZXJ0aWVzPXZvaWQgMCE9PWUuZ3JpZFByb3BlcnRpZXMmJm51bGwhPT1lLmdyaWRQcm9wZXJ0aWVzP1IuR3JpZFByb3BlcnRpZXMuZnJvbVBhcnRpYWwoZS5ncmlkUHJvcGVydGllcyk6dm9pZCAwLG4uZHJhd2luZ3M9dm9pZCAwIT09ZS5kcmF3aW5ncyYmbnVsbCE9PWUuZHJhd2luZ3M/ay5EcmF3aW5ncy5mcm9tUGFydGlhbChlLmRyYXdpbmdzKTp2b2lkIDAsbi5jYW1lb1RpbGU9dm9pZCAwIT09ZS5jYW1lb1RpbGUmJm51bGwhPT1lLmNhbWVvVGlsZT9PLkNhbWVvVGlsZS5mcm9tUGFydGlhbChlLmNhbWVvVGlsZSk6dm9pZCAwLG4uYWRQbGFjZW1lbnQ9dm9pZCAwIT09ZS5hZFBsYWNlbWVudCYmbnVsbCE9PWUuYWRQbGFjZW1lbnQ/Ti5BZFBsYWNlbWVudC5mcm9tUGFydGlhbChlLmFkUGxhY2VtZW50KTp2b2lkIDAsbi5lbnZlbG9wZT1lLmVudmVsb3BlPy5tYXAoKGU9PnQuU25hcEVudmVsb3BlLmZyb21QYXJ0aWFsKGUpKSl8fFtdLG59fSx0LlNuYXBEb2NfSUQ9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dy5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUubmFtZXNwYWNlJiZ0LnVpbnQzMig4KS5pbnQzMihlLm5hbWVzcGFjZSksXCJcIiE9PWUuaWQmJnQudWludDMyKDE4KS5zdHJpbmcoZS5pZCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygdy5kZWZhdWx0LlJlYWRlcj9lOm5ldyB3LmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtuYW1lc3BhY2U6MCxpZDpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5uYW1lc3BhY2U9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMjppLmlkPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtuYW1lc3BhY2U6MCxpZDpcIlwifTtyZXR1cm4gdC5uYW1lc3BhY2U9ZS5uYW1lc3BhY2U/PzAsdC5pZD1lLmlkPz9cIlwiLHR9fSx0LlNuYXBFbnZlbG9wZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp3LmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiY29tcG9uZW50VHlwZUlkXCI9PT1lLmNvbXBvbmVudFR5cGU/LiRjYXNlJiZ0LnVpbnQzMig4KS5pbnQzMihlLmNvbXBvbmVudFR5cGUuY29tcG9uZW50VHlwZUlkKSxcImNvbXBvbmVudFR5cGVOYW1lXCI9PT1lLmNvbXBvbmVudFR5cGU/LiRjYXNlJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuY29tcG9uZW50VHlwZS5jb21wb25lbnRUeXBlTmFtZSksMCE9PWUuY29tcG9uZW50Qnl0ZXMubGVuZ3RoJiZ0LnVpbnQzMigyNikuYnl0ZXMoZS5jb21wb25lbnRCeXRlcyksITA9PT1lLmVuY3J5cHRlZCYmdC51aW50MzIoMzIpLmJvb2woZS5lbmNyeXB0ZWQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIHcuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgdy5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT1EKCk7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuY29tcG9uZW50VHlwZT17JGNhc2U6XCJjb21wb25lbnRUeXBlSWRcIixjb21wb25lbnRUeXBlSWQ6bi5pbnQzMigpfTticmVhaztjYXNlIDI6aS5jb21wb25lbnRUeXBlPXskY2FzZTpcImNvbXBvbmVudFR5cGVOYW1lXCIsY29tcG9uZW50VHlwZU5hbWU6bi5zdHJpbmcoKX07YnJlYWs7Y2FzZSAzOmkuY29tcG9uZW50Qnl0ZXM9bi5ieXRlcygpO2JyZWFrO2Nhc2UgNDppLmVuY3J5cHRlZD1uLmJvb2woKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9RCgpO3JldHVyblwiY29tcG9uZW50VHlwZUlkXCI9PT1lLmNvbXBvbmVudFR5cGU/LiRjYXNlJiZ2b2lkIDAhPT1lLmNvbXBvbmVudFR5cGU/LmNvbXBvbmVudFR5cGVJZCYmbnVsbCE9PWUuY29tcG9uZW50VHlwZT8uY29tcG9uZW50VHlwZUlkJiYodC5jb21wb25lbnRUeXBlPXskY2FzZTpcImNvbXBvbmVudFR5cGVJZFwiLGNvbXBvbmVudFR5cGVJZDplLmNvbXBvbmVudFR5cGUuY29tcG9uZW50VHlwZUlkfSksXCJjb21wb25lbnRUeXBlTmFtZVwiPT09ZS5jb21wb25lbnRUeXBlPy4kY2FzZSYmdm9pZCAwIT09ZS5jb21wb25lbnRUeXBlPy5jb21wb25lbnRUeXBlTmFtZSYmbnVsbCE9PWUuY29tcG9uZW50VHlwZT8uY29tcG9uZW50VHlwZU5hbWUmJih0LmNvbXBvbmVudFR5cGU9eyRjYXNlOlwiY29tcG9uZW50VHlwZU5hbWVcIixjb21wb25lbnRUeXBlTmFtZTplLmNvbXBvbmVudFR5cGUuY29tcG9uZW50VHlwZU5hbWV9KSx0LmNvbXBvbmVudEJ5dGVzPWUuY29tcG9uZW50Qnl0ZXM/P25ldyBVaW50OEFycmF5LHQuZW5jcnlwdGVkPWUuZW5jcnlwdGVkPz8hMSx0fX0sdy5kZWZhdWx0LnV0aWwuTG9uZyE9PWkuZGVmYXVsdCYmKHcuZGVmYXVsdC51dGlsLkxvbmc9aS5kZWZhdWx0LHcuZGVmYXVsdC5jb25maWd1cmUoKSl9LDczNzI5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlNuYXBQcm9TdG9yeVJlcGx5UXVvdGU9dm9pZCAwO2NvbnN0IGk9big1MTU5OCksbz1yKG4oNjIxMDApKTt0LlNuYXBQcm9TdG9yeVJlcGx5UXVvdGU9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS51c2VySWQmJmkuVVVJRC5lbmNvZGUoZS51c2VySWQsdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5idXNpbmVzc1Byb2ZpbGVJZCYmaS5VVUlELmVuY29kZShlLmJ1c2luZXNzUHJvZmlsZUlkLHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgYT17dXNlcklkOnZvaWQgMCxidXNpbmVzc1Byb2ZpbGVJZDp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTphLnVzZXJJZD1pLlVVSUQuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOmEuYnVzaW5lc3NQcm9maWxlSWQ9aS5VVUlELmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dXNlcklkOnZvaWQgMCxidXNpbmVzc1Byb2ZpbGVJZDp2b2lkIDB9O3JldHVybiB0LnVzZXJJZD12b2lkIDAhPT1lLnVzZXJJZCYmbnVsbCE9PWUudXNlcklkP2kuVVVJRC5mcm9tUGFydGlhbChlLnVzZXJJZCk6dm9pZCAwLHQuYnVzaW5lc3NQcm9maWxlSWQ9dm9pZCAwIT09ZS5idXNpbmVzc1Byb2ZpbGVJZCYmbnVsbCE9PWUuYnVzaW5lc3NQcm9maWxlSWQ/aS5VVUlELmZyb21QYXJ0aWFsKGUuYnVzaW5lc3NQcm9maWxlSWQpOnZvaWQgMCx0fX19LDU5NDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5TcGVjdGFjbGVzPXQuU3BlY3RhY2xlc19DYW1lcmFNb2RlPXQuU3BlY3RhY2xlc19TcGVjdGFjbGVzVmVyc2lvbj12b2lkIDA7Y29uc3QgaT1yKG4oNjIxMDApKTt2YXIgbyxhOyhhPXQuU3BlY3RhY2xlc19TcGVjdGFjbGVzVmVyc2lvbnx8KHQuU3BlY3RhY2xlc19TcGVjdGFjbGVzVmVyc2lvbj17fSkpW2EuVU5LTk9XTl9WRVJTSU9OPTBdPVwiVU5LTk9XTl9WRVJTSU9OXCIsYVthLlYxPTFdPVwiVjFcIixhW2EuVjI9Ml09XCJWMlwiLGFbYS5WMz0zXT1cIlYzXCIsYVthLlY0PTRdPVwiVjRcIixhW2EuVjU9NV09XCJWNVwiLGFbYS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKG89dC5TcGVjdGFjbGVzX0NhbWVyYU1vZGV8fCh0LlNwZWN0YWNsZXNfQ2FtZXJhTW9kZT17fSkpW28uVU5LTk9XTj0wXT1cIlVOS05PV05cIixvW28uTU9OTz0xXT1cIk1PTk9cIixvW28uU1RFUkVPX1RPUF9CT1RUT009Ml09XCJTVEVSRU9fVE9QX0JPVFRPTVwiLG9bby5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsdC5TcGVjdGFjbGVzPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLnZlcnNpb24mJnQudWludDMyKDgpLmludDMyKGUudmVyc2lvbiksITA9PT1lLnJvdGF0aW9uTG9ja2VkJiZ0LnVpbnQzMigxNikuYm9vbChlLnJvdGF0aW9uTG9ja2VkKSxcIlwiIT09ZS5kZXZpY2VJZCYmdC51aW50MzIoMjYpLnN0cmluZyhlLmRldmljZUlkKSxcIlwiIT09ZS5kZXZpY2VGaXJtd2FyZUluZm8mJnQudWludDMyKDM0KS5zdHJpbmcoZS5kZXZpY2VGaXJtd2FyZUluZm8pLDAhPT1lLmNhbWVyYU1vZGUmJnQudWludDMyKDQwKS5pbnQzMihlLmNhbWVyYU1vZGUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgbz17dmVyc2lvbjowLHJvdGF0aW9uTG9ja2VkOiExLGRldmljZUlkOlwiXCIsZGV2aWNlRmlybXdhcmVJbmZvOlwiXCIsY2FtZXJhTW9kZTowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by52ZXJzaW9uPW4uaW50MzIoKTticmVhaztjYXNlIDI6by5yb3RhdGlvbkxvY2tlZD1uLmJvb2woKTticmVhaztjYXNlIDM6by5kZXZpY2VJZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNDpvLmRldmljZUZpcm13YXJlSW5mbz1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNTpvLmNhbWVyYU1vZGU9bi5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gb30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dmVyc2lvbjowLHJvdGF0aW9uTG9ja2VkOiExLGRldmljZUlkOlwiXCIsZGV2aWNlRmlybXdhcmVJbmZvOlwiXCIsY2FtZXJhTW9kZTowfTtyZXR1cm4gdC52ZXJzaW9uPWUudmVyc2lvbj8/MCx0LnJvdGF0aW9uTG9ja2VkPWUucm90YXRpb25Mb2NrZWQ/PyExLHQuZGV2aWNlSWQ9ZS5kZXZpY2VJZD8/XCJcIix0LmRldmljZUZpcm13YXJlSW5mbz1lLmRldmljZUZpcm13YXJlSW5mbz8/XCJcIix0LmNhbWVyYU1vZGU9ZS5jYW1lcmFNb2RlPz8wLHR9fX0sNDM5NTA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuU3BvbnNvcj12b2lkIDA7Y29uc3QgaT1uKDUxNTk4KSxvPXIobig2MjEwMCkpO3QuU3BvbnNvcj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLnByb2ZpbGVJZCYmaS5VVUlELmVuY29kZShlLnByb2ZpbGVJZCx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSxcIlwiIT09ZS5kaXNwbGF5TmFtZSYmdC51aW50MzIoMTgpLnN0cmluZyhlLmRpc3BsYXlOYW1lKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGE9e3Byb2ZpbGVJZDp2b2lkIDAsZGlzcGxheU5hbWU6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmEucHJvZmlsZUlkPWkuVVVJRC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDI6YS5kaXNwbGF5TmFtZT1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17cHJvZmlsZUlkOnZvaWQgMCxkaXNwbGF5TmFtZTpcIlwifTtyZXR1cm4gdC5wcm9maWxlSWQ9dm9pZCAwIT09ZS5wcm9maWxlSWQmJm51bGwhPT1lLnByb2ZpbGVJZD9pLlVVSUQuZnJvbVBhcnRpYWwoZS5wcm9maWxlSWQpOnZvaWQgMCx0LmRpc3BsYXlOYW1lPWUuZGlzcGxheU5hbWU/P1wiXCIsdH19fSwyNTY0NTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5TdGlja2VyTWV0YWRhdGE9dC5TdGlja2VyTWV0YWRhdGFfU3RpY2tlclR5cGU9dm9pZCAwO2NvbnN0IGk9cihuKDYyMTAwKSk7dmFyIG87KG89dC5TdGlja2VyTWV0YWRhdGFfU3RpY2tlclR5cGV8fCh0LlN0aWNrZXJNZXRhZGF0YV9TdGlja2VyVHlwZT17fSkpW28uU1RJQ0tFUl9UWVBFX1VOS05PV049MF09XCJTVElDS0VSX1RZUEVfVU5LTk9XTlwiLG9bby5TVElDS0VSX1RZUEVfU05BUENIQVQ9MV09XCJTVElDS0VSX1RZUEVfU05BUENIQVRcIixvW28uU1RJQ0tFUl9UWVBFX0JJVE1PSkk9Ml09XCJTVElDS0VSX1RZUEVfQklUTU9KSVwiLG9bby5TVElDS0VSX1RZUEVfR0VPU1RJQ0tFUj0zXT1cIlNUSUNLRVJfVFlQRV9HRU9TVElDS0VSXCIsb1tvLlNUSUNLRVJfVFlQRV9FTU9KST00XT1cIlNUSUNLRVJfVFlQRV9FTU9KSVwiLG9bby5TVElDS0VSX1RZUEVfQ1VTVE9NX1NUSUNLRVI9NV09XCJTVElDS0VSX1RZUEVfQ1VTVE9NX1NUSUNLRVJcIixvW28uU1RJQ0tFUl9UWVBFX0JJVE1PSklfTEVOUz02XT1cIlNUSUNLRVJfVFlQRV9CSVRNT0pJX0xFTlNcIixvW28uU1RJQ0tFUl9UWVBFX1VOTE9DS0FCTEVfU1RJQ0tFUj03XT1cIlNUSUNLRVJfVFlQRV9VTkxPQ0tBQkxFX1NUSUNLRVJcIixvW28uU1RJQ0tFUl9UWVBFX0dJUEhZPThdPVwiU1RJQ0tFUl9UWVBFX0dJUEhZXCIsb1tvLlNUSUNLRVJfVFlQRV9TTkFQX0NPTk5FQ1Q9MTBdPVwiU1RJQ0tFUl9UWVBFX1NOQVBfQ09OTkVDVFwiLG9bby5TVElDS0VSX1RZUEVfR0FNRV9TTklQUEVUPTExXT1cIlNUSUNLRVJfVFlQRV9HQU1FX1NOSVBQRVRcIixvW28uU1RJQ0tFUl9UWVBFX1RPUElDPTEyXT1cIlNUSUNLRVJfVFlQRV9UT1BJQ1wiLG9bby5TVElDS0VSX1RZUEVfQ0FNRU89MTNdPVwiU1RJQ0tFUl9UWVBFX0NBTUVPXCIsb1tvLlNUSUNLRVJfVFlQRV9HRllDQVQ9MTRdPVwiU1RJQ0tFUl9UWVBFX0dGWUNBVFwiLG9bby5TVElDS0VSX1RZUEVfU0hPUFBJTkc9MTVdPVwiU1RJQ0tFUl9UWVBFX1NIT1BQSU5HXCIsb1tvLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0LlN0aWNrZXJNZXRhZGF0YT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnN0aWNrZXJJZCYmdC51aW50MzIoMTApLnN0cmluZyhlLnN0aWNrZXJJZCksMCE9PWUud2lkdGgmJnQudWludDMyKDIxKS5mbG9hdChlLndpZHRoKSwwIT09ZS5oZWlnaHQmJnQudWludDMyKDI5KS5mbG9hdChlLmhlaWdodCksMCE9PWUuY2VudGVyWCYmdC51aW50MzIoMzcpLmZsb2F0KGUuY2VudGVyWCksMCE9PWUuY2VudGVyWSYmdC51aW50MzIoNDUpLmZsb2F0KGUuY2VudGVyWSksMCE9PWUudHlwZSYmdC51aW50MzIoNDgpLmludDMyKGUudHlwZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgaS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBpLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBvPXtzdGlja2VySWQ6XCJcIix3aWR0aDowLGhlaWdodDowLGNlbnRlclg6MCxjZW50ZXJZOjAsdHlwZTowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6by5zdGlja2VySWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6by53aWR0aD1uLmZsb2F0KCk7YnJlYWs7Y2FzZSAzOm8uaGVpZ2h0PW4uZmxvYXQoKTticmVhaztjYXNlIDQ6by5jZW50ZXJYPW4uZmxvYXQoKTticmVhaztjYXNlIDU6by5jZW50ZXJZPW4uZmxvYXQoKTticmVhaztjYXNlIDY6by50eXBlPW4uaW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3N0aWNrZXJJZDpcIlwiLHdpZHRoOjAsaGVpZ2h0OjAsY2VudGVyWDowLGNlbnRlclk6MCx0eXBlOjB9O3JldHVybiB0LnN0aWNrZXJJZD1lLnN0aWNrZXJJZD8/XCJcIix0LndpZHRoPWUud2lkdGg/PzAsdC5oZWlnaHQ9ZS5oZWlnaHQ/PzAsdC5jZW50ZXJYPWUuY2VudGVyWD8/MCx0LmNlbnRlclk9ZS5jZW50ZXJZPz8wLHQudHlwZT1lLnR5cGU/PzAsdH19fSw0ODgxMTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5TdWJzY3JpcHRpb25fQ3VzdG9tU3Vic2NyaWJlX1B1YmxpY1VzZXI9dC5TdWJzY3JpcHRpb25fQ3VzdG9tU3Vic2NyaWJlX1B1Ymxpc2hlcj10LlN1YnNjcmlwdGlvbl9DdXN0b21TdWJzY3JpYmU9dC5TdWJzY3JpcHRpb249dm9pZCAwO2NvbnN0IGk9big4MTQ0NSksbz1yKG4oNjIxMDApKTt0LlN1YnNjcmlwdGlvbj17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwic2VsZlN1YnNjcmliZVwiPT09ZS5zdWJzY3JpcHRpb24/LiRjYXNlJiZpLkVtcHR5LmVuY29kZShlLnN1YnNjcmlwdGlvbi5zZWxmU3Vic2NyaWJlLG4udWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLFwiY3VzdG9tU3Vic2NyaWJlXCI9PT1lLnN1YnNjcmlwdGlvbj8uJGNhc2UmJnQuU3Vic2NyaXB0aW9uX0N1c3RvbVN1YnNjcmliZS5lbmNvZGUoZS5zdWJzY3JpcHRpb24uY3VzdG9tU3Vic2NyaWJlLG4udWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLFwiXCIhPT1lLmlkJiZuLnVpbnQzMigyNikuc3RyaW5nKGUuaWQpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgYT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3Qgcz17c3Vic2NyaXB0aW9uOnZvaWQgMCxpZDpcIlwifTtmb3IoO3IucG9zPGE7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6cy5zdWJzY3JpcHRpb249eyRjYXNlOlwic2VsZlN1YnNjcmliZVwiLHNlbGZTdWJzY3JpYmU6aS5FbXB0eS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7Y2FzZSAyOnMuc3Vic2NyaXB0aW9uPXskY2FzZTpcImN1c3RvbVN1YnNjcmliZVwiLGN1c3RvbVN1YnNjcmliZTp0LlN1YnNjcmlwdGlvbl9DdXN0b21TdWJzY3JpYmUuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMzpzLmlkPXIuc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBzfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtzdWJzY3JpcHRpb246dm9pZCAwLGlkOlwiXCJ9O3JldHVyblwic2VsZlN1YnNjcmliZVwiPT09ZS5zdWJzY3JpcHRpb24/LiRjYXNlJiZ2b2lkIDAhPT1lLnN1YnNjcmlwdGlvbj8uc2VsZlN1YnNjcmliZSYmbnVsbCE9PWUuc3Vic2NyaXB0aW9uPy5zZWxmU3Vic2NyaWJlJiYobi5zdWJzY3JpcHRpb249eyRjYXNlOlwic2VsZlN1YnNjcmliZVwiLHNlbGZTdWJzY3JpYmU6aS5FbXB0eS5mcm9tUGFydGlhbChlLnN1YnNjcmlwdGlvbi5zZWxmU3Vic2NyaWJlKX0pLFwiY3VzdG9tU3Vic2NyaWJlXCI9PT1lLnN1YnNjcmlwdGlvbj8uJGNhc2UmJnZvaWQgMCE9PWUuc3Vic2NyaXB0aW9uPy5jdXN0b21TdWJzY3JpYmUmJm51bGwhPT1lLnN1YnNjcmlwdGlvbj8uY3VzdG9tU3Vic2NyaWJlJiYobi5zdWJzY3JpcHRpb249eyRjYXNlOlwiY3VzdG9tU3Vic2NyaWJlXCIsY3VzdG9tU3Vic2NyaWJlOnQuU3Vic2NyaXB0aW9uX0N1c3RvbVN1YnNjcmliZS5mcm9tUGFydGlhbChlLnN1YnNjcmlwdGlvbi5jdXN0b21TdWJzY3JpYmUpfSksbi5pZD1lLmlkPz9cIlwiLG59fSx0LlN1YnNjcmlwdGlvbl9DdXN0b21TdWJzY3JpYmU9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5kaXNwbGF5TmFtZSYmbi51aW50MzIoMTApLnN0cmluZyhlLmRpc3BsYXlOYW1lKSxcInB1Ymxpc2hlclwiPT09ZS5zdWJqZWN0Py4kY2FzZSYmdC5TdWJzY3JpcHRpb25fQ3VzdG9tU3Vic2NyaWJlX1B1Ymxpc2hlci5lbmNvZGUoZS5zdWJqZWN0LnB1Ymxpc2hlcixuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSxcInB1YmxpY1VzZXJcIj09PWUuc3ViamVjdD8uJGNhc2UmJnQuU3Vic2NyaXB0aW9uX0N1c3RvbVN1YnNjcmliZV9QdWJsaWNVc2VyLmVuY29kZShlLnN1YmplY3QucHVibGljVXNlcixuLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSxcIlwiIT09ZS5wcmltYXJ5Q29sb3ImJm4udWludDMyKDM0KS5zdHJpbmcoZS5wcmltYXJ5Q29sb3IpLFwiXCIhPT1lLnNlY29uZGFyeUNvbG9yJiZuLnVpbnQzMig0Mikuc3RyaW5nKGUuc2Vjb25kYXJ5Q29sb3IpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3QgYT17ZGlzcGxheU5hbWU6XCJcIixzdWJqZWN0OnZvaWQgMCxwcmltYXJ5Q29sb3I6XCJcIixzZWNvbmRhcnlDb2xvcjpcIlwifTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS5kaXNwbGF5TmFtZT1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMjphLnN1YmplY3Q9eyRjYXNlOlwicHVibGlzaGVyXCIscHVibGlzaGVyOnQuU3Vic2NyaXB0aW9uX0N1c3RvbVN1YnNjcmliZV9QdWJsaXNoZXIuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgMzphLnN1YmplY3Q9eyRjYXNlOlwicHVibGljVXNlclwiLHB1YmxpY1VzZXI6dC5TdWJzY3JpcHRpb25fQ3VzdG9tU3Vic2NyaWJlX1B1YmxpY1VzZXIuZGVjb2RlKHIsci51aW50MzIoKSl9O2JyZWFrO2Nhc2UgNDphLnByaW1hcnlDb2xvcj1yLnN0cmluZygpO2JyZWFrO2Nhc2UgNTphLnNlY29uZGFyeUNvbG9yPXIuc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtkaXNwbGF5TmFtZTpcIlwiLHN1YmplY3Q6dm9pZCAwLHByaW1hcnlDb2xvcjpcIlwiLHNlY29uZGFyeUNvbG9yOlwiXCJ9O3JldHVybiBuLmRpc3BsYXlOYW1lPWUuZGlzcGxheU5hbWU/P1wiXCIsXCJwdWJsaXNoZXJcIj09PWUuc3ViamVjdD8uJGNhc2UmJnZvaWQgMCE9PWUuc3ViamVjdD8ucHVibGlzaGVyJiZudWxsIT09ZS5zdWJqZWN0Py5wdWJsaXNoZXImJihuLnN1YmplY3Q9eyRjYXNlOlwicHVibGlzaGVyXCIscHVibGlzaGVyOnQuU3Vic2NyaXB0aW9uX0N1c3RvbVN1YnNjcmliZV9QdWJsaXNoZXIuZnJvbVBhcnRpYWwoZS5zdWJqZWN0LnB1Ymxpc2hlcil9KSxcInB1YmxpY1VzZXJcIj09PWUuc3ViamVjdD8uJGNhc2UmJnZvaWQgMCE9PWUuc3ViamVjdD8ucHVibGljVXNlciYmbnVsbCE9PWUuc3ViamVjdD8ucHVibGljVXNlciYmKG4uc3ViamVjdD17JGNhc2U6XCJwdWJsaWNVc2VyXCIscHVibGljVXNlcjp0LlN1YnNjcmlwdGlvbl9DdXN0b21TdWJzY3JpYmVfUHVibGljVXNlci5mcm9tUGFydGlhbChlLnN1YmplY3QucHVibGljVXNlcil9KSxuLnByaW1hcnlDb2xvcj1lLnByaW1hcnlDb2xvcj8/XCJcIixuLnNlY29uZGFyeUNvbG9yPWUuc2Vjb25kYXJ5Q29sb3I/P1wiXCIsbn19LHQuU3Vic2NyaXB0aW9uX0N1c3RvbVN1YnNjcmliZV9QdWJsaXNoZXI9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5wdWJsaXNoZXJJZCYmdC51aW50MzIoMTApLnN0cmluZyhlLnB1Ymxpc2hlcklkKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3B1Ymxpc2hlcklkOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLnB1Ymxpc2hlcklkPW4uc3RyaW5nKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtwdWJsaXNoZXJJZDpcIlwifTtyZXR1cm4gdC5wdWJsaXNoZXJJZD1lLnB1Ymxpc2hlcklkPz9cIlwiLHR9fSx0LlN1YnNjcmlwdGlvbl9DdXN0b21TdWJzY3JpYmVfUHVibGljVXNlcj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnVzZXJJZCYmdC51aW50MzIoMTgpLnN0cmluZyhlLnVzZXJJZCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXt1c2VySWQ6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0yP2kudXNlcklkPW4uc3RyaW5nKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt1c2VySWQ6XCJcIn07cmV0dXJuIHQudXNlcklkPWUudXNlcklkPz9cIlwiLHR9fX0sMTAwODg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuU3VidGl0bGVzPXQuU3VidGl0bGVCdW5kbGVfU3VidGl0bGU9dC5TdWJ0aXRsZUJ1bmRsZT10LlN1YnRpdGxlc19EaXNwbGF5TW9kZT10LlN1YnRpdGxlQnVuZGxlX1N1YnRpdGxlVHlwZT12b2lkIDA7Y29uc3QgaT1uKDM4NzMxKSxvPXIobig2MjEwMCkpO2Z1bmN0aW9uIGEoKXtyZXR1cm57ZGlzcGxheU1vZGU6MCxtZWRpYUlkOnZvaWQgMCxzdWJ0aXRsZUJ1bmRsZUNvbnRlbnRPYmplY3Q6bmV3IFVpbnQ4QXJyYXl9fXZhciBzLGM7KGM9dC5TdWJ0aXRsZUJ1bmRsZV9TdWJ0aXRsZVR5cGV8fCh0LlN1YnRpdGxlQnVuZGxlX1N1YnRpdGxlVHlwZT17fSkpW2MuU1VCVElUTEVfVFlQRV9VTlNFVD0wXT1cIlNVQlRJVExFX1RZUEVfVU5TRVRcIixjW2MuVlRUX1NVQlRJVExFPTFdPVwiVlRUX1NVQlRJVExFXCIsY1tjLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwocz10LlN1YnRpdGxlc19EaXNwbGF5TW9kZXx8KHQuU3VidGl0bGVzX0Rpc3BsYXlNb2RlPXt9KSlbcy5ESVNQTEFZX01PREVfVU5TRVQ9MF09XCJESVNQTEFZX01PREVfVU5TRVRcIixzW3MuRk9SQ0VfU0hPV19TVUJUSVRMRVM9MV09XCJGT1JDRV9TSE9XX1NVQlRJVExFU1wiLHNbcy5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsdC5TdWJ0aXRsZUJ1bmRsZT17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO2Zvcihjb25zdCByIG9mIGUuc3VidGl0bGVzKXQuU3VidGl0bGVCdW5kbGVfU3VidGl0bGUuZW5jb2RlKHIsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3QgYT17c3VidGl0bGVzOltdfTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7ZT4+PjM9PTE/YS5zdWJ0aXRsZXMucHVzaCh0LlN1YnRpdGxlQnVuZGxlX1N1YnRpdGxlLmRlY29kZShyLHIudWludDMyKCkpKTpyLnNraXBUeXBlKDcmZSl9cmV0dXJuIGF9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IG49e3N1YnRpdGxlczpbXX07cmV0dXJuIG4uc3VidGl0bGVzPWUuc3VidGl0bGVzPy5tYXAoKGU9PnQuU3VidGl0bGVCdW5kbGVfU3VidGl0bGUuZnJvbVBhcnRpYWwoZSkpKXx8W10sbn19LHQuU3VidGl0bGVCdW5kbGVfU3VidGl0bGU9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUubGFuZ3VhZ2UmJnQudWludDMyKDgpLmludDMyKGUubGFuZ3VhZ2UpLFwiXCIhPT1lLmNvbnRlbnQmJnQudWludDMyKDE4KS5zdHJpbmcoZS5jb250ZW50KSwwIT09ZS5zdWJ0aXRsZVR5cGUmJnQudWludDMyKDI0KS5pbnQzMihlLnN1YnRpdGxlVHlwZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtsYW5ndWFnZTowLGNvbnRlbnQ6XCJcIixzdWJ0aXRsZVR5cGU6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkubGFuZ3VhZ2U9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMjppLmNvbnRlbnQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDM6aS5zdWJ0aXRsZVR5cGU9bi5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17bGFuZ3VhZ2U6MCxjb250ZW50OlwiXCIsc3VidGl0bGVUeXBlOjB9O3JldHVybiB0Lmxhbmd1YWdlPWUubGFuZ3VhZ2U/PzAsdC5jb250ZW50PWUuY29udGVudD8/XCJcIix0LnN1YnRpdGxlVHlwZT1lLnN1YnRpdGxlVHlwZT8/MCx0fX0sdC5TdWJ0aXRsZXM9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUuZGlzcGxheU1vZGUmJnQudWludDMyKDE2KS5pbnQzMihlLmRpc3BsYXlNb2RlKSx2b2lkIDAhPT1lLm1lZGlhSWQmJmkuTWVkaWFJZC5lbmNvZGUoZS5tZWRpYUlkLHQudWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLnN1YnRpdGxlQnVuZGxlQ29udGVudE9iamVjdC5sZW5ndGgmJnQudWludDMyKDEwKS5ieXRlcyhlLnN1YnRpdGxlQnVuZGxlQ29udGVudE9iamVjdCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBzPWEoKTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDI6cy5kaXNwbGF5TW9kZT1uLmludDMyKCk7YnJlYWs7Y2FzZSAzOnMubWVkaWFJZD1pLk1lZGlhSWQuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAxOnMuc3VidGl0bGVCdW5kbGVDb250ZW50T2JqZWN0PW4uYnl0ZXMoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIHN9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9YSgpO3JldHVybiB0LmRpc3BsYXlNb2RlPWUuZGlzcGxheU1vZGU/PzAsdC5tZWRpYUlkPXZvaWQgMCE9PWUubWVkaWFJZCYmbnVsbCE9PWUubWVkaWFJZD9pLk1lZGlhSWQuZnJvbVBhcnRpYWwoZS5tZWRpYUlkKTp2b2lkIDAsdC5zdWJ0aXRsZUJ1bmRsZUNvbnRlbnRPYmplY3Q9ZS5zdWJ0aXRsZUJ1bmRsZUNvbnRlbnRPYmplY3Q/P25ldyBVaW50OEFycmF5LHR9fX0sMjM3ODU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuVGh1bWJuYWlsPXZvaWQgMDtjb25zdCBpPW4oMzg3MzEpLG89big4ODE2OCksYT1yKG4oNjIxMDApKTtmdW5jdGlvbiBzKCl7cmV0dXJue3VybDpcIlwiLHRodW1ibmFpbE1lZGlhSWQ6dm9pZCAwLHZpZGVvVGh1bWJuYWlsTWVkaWFJZDp2b2lkIDAsa2V5Om5ldyBVaW50OEFycmF5LGl2Om5ldyBVaW50OEFycmF5LG5lZWRzQXV0aDohMSx0aHVtYm5haWxSZWZlcmVuY2U6dm9pZCAwLHZpZGVvVGh1bWJuYWlsUmVmZXJlbmNlOnZvaWQgMH19dC5UaHVtYm5haWw9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS51cmwmJnQudWludDMyKDEwKS5zdHJpbmcoZS51cmwpLHZvaWQgMCE9PWUudGh1bWJuYWlsTWVkaWFJZCYmaS5NZWRpYUlkLmVuY29kZShlLnRodW1ibmFpbE1lZGlhSWQsdC51aW50MzIoNTApLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS52aWRlb1RodW1ibmFpbE1lZGlhSWQmJmkuTWVkaWFJZC5lbmNvZGUoZS52aWRlb1RodW1ibmFpbE1lZGlhSWQsdC51aW50MzIoNTgpLmZvcmsoKSkubGRlbGltKCksMCE9PWUua2V5Lmxlbmd0aCYmdC51aW50MzIoMTgpLmJ5dGVzKGUua2V5KSwwIT09ZS5pdi5sZW5ndGgmJnQudWludDMyKDI2KS5ieXRlcyhlLml2KSwhMD09PWUubmVlZHNBdXRoJiZ0LnVpbnQzMigzMikuYm9vbChlLm5lZWRzQXV0aCksdm9pZCAwIT09ZS50aHVtYm5haWxSZWZlcmVuY2UmJm8uTWVkaWFSZWZlcmVuY2UuZW5jb2RlKGUudGh1bWJuYWlsUmVmZXJlbmNlLHQudWludDMyKDQyKS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUudmlkZW9UaHVtYm5haWxSZWZlcmVuY2UmJm8uTWVkaWFSZWZlcmVuY2UuZW5jb2RlKGUudmlkZW9UaHVtYm5haWxSZWZlcmVuY2UsdC51aW50MzIoNjYpLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYS5kZWZhdWx0LlJlYWRlcj9lOm5ldyBhLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBjPXMoKTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6Yy51cmw9bi5zdHJpbmcoKTticmVhaztjYXNlIDY6Yy50aHVtYm5haWxNZWRpYUlkPWkuTWVkaWFJZC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDc6Yy52aWRlb1RodW1ibmFpbE1lZGlhSWQ9aS5NZWRpYUlkLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMjpjLmtleT1uLmJ5dGVzKCk7YnJlYWs7Y2FzZSAzOmMuaXY9bi5ieXRlcygpO2JyZWFrO2Nhc2UgNDpjLm5lZWRzQXV0aD1uLmJvb2woKTticmVhaztjYXNlIDU6Yy50aHVtYm5haWxSZWZlcmVuY2U9by5NZWRpYVJlZmVyZW5jZS5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDg6Yy52aWRlb1RodW1ibmFpbFJlZmVyZW5jZT1vLk1lZGlhUmVmZXJlbmNlLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gY30sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD1zKCk7cmV0dXJuIHQudXJsPWUudXJsPz9cIlwiLHQudGh1bWJuYWlsTWVkaWFJZD12b2lkIDAhPT1lLnRodW1ibmFpbE1lZGlhSWQmJm51bGwhPT1lLnRodW1ibmFpbE1lZGlhSWQ/aS5NZWRpYUlkLmZyb21QYXJ0aWFsKGUudGh1bWJuYWlsTWVkaWFJZCk6dm9pZCAwLHQudmlkZW9UaHVtYm5haWxNZWRpYUlkPXZvaWQgMCE9PWUudmlkZW9UaHVtYm5haWxNZWRpYUlkJiZudWxsIT09ZS52aWRlb1RodW1ibmFpbE1lZGlhSWQ/aS5NZWRpYUlkLmZyb21QYXJ0aWFsKGUudmlkZW9UaHVtYm5haWxNZWRpYUlkKTp2b2lkIDAsdC5rZXk9ZS5rZXk/P25ldyBVaW50OEFycmF5LHQuaXY9ZS5pdj8/bmV3IFVpbnQ4QXJyYXksdC5uZWVkc0F1dGg9ZS5uZWVkc0F1dGg/PyExLHQudGh1bWJuYWlsUmVmZXJlbmNlPXZvaWQgMCE9PWUudGh1bWJuYWlsUmVmZXJlbmNlJiZudWxsIT09ZS50aHVtYm5haWxSZWZlcmVuY2U/by5NZWRpYVJlZmVyZW5jZS5mcm9tUGFydGlhbChlLnRodW1ibmFpbFJlZmVyZW5jZSk6dm9pZCAwLHQudmlkZW9UaHVtYm5haWxSZWZlcmVuY2U9dm9pZCAwIT09ZS52aWRlb1RodW1ibmFpbFJlZmVyZW5jZSYmbnVsbCE9PWUudmlkZW9UaHVtYm5haWxSZWZlcmVuY2U/by5NZWRpYVJlZmVyZW5jZS5mcm9tUGFydGlhbChlLnZpZGVvVGh1bWJuYWlsUmVmZXJlbmNlKTp2b2lkIDAsdH19fSw3MjU2OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlRpbWVJbnN0YW50PXZvaWQgMDtjb25zdCBpPXIobig0MTU4MykpLG89cihuKDYyMTAwKSk7dC5UaW1lSW5zdGFudD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiMFwiIT09ZS50aW1lSW5NcyYmdC51aW50MzIoOCkuaW50NjQoZS50aW1lSW5NcyksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXt0aW1lSW5NczpcIjBcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2kudGltZUluTXM9bi5pbnQ2NCgpLnRvU3RyaW5nKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt0aW1lSW5NczpcIjBcIn07cmV0dXJuIHQudGltZUluTXM9ZS50aW1lSW5Ncz8/XCIwXCIsdH19LG8uZGVmYXVsdC51dGlsLkxvbmchPT1pLmRlZmF1bHQmJihvLmRlZmF1bHQudXRpbC5Mb25nPWkuZGVmYXVsdCxvLmRlZmF1bHQuY29uZmlndXJlKCkpfSw4MTAwNDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5UaW1pbmc9dm9pZCAwO2NvbnN0IGk9cihuKDQxNTgzKSksbz1yKG4oNjIxMDApKTtmdW5jdGlvbiBhKGUpe3JldHVybiBlLnRvU3RyaW5nKCl9dC5UaW1pbmc9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUudGltZXN0YW1wU2VjJiZ0LnVpbnQzMig4KS51aW50MzIoZS50aW1lc3RhbXBTZWMpLDAhPT1lLnNlY29uZGFyeVRpbWVzdGFtcFNlYyYmdC51aW50MzIoMTYpLnVpbnQzMihlLnNlY29uZGFyeVRpbWVzdGFtcFNlYyksMCE9PWUucGVuZGluZ0RlbGl2ZXJ5VGltZXN0YW1wU2VjJiZ0LnVpbnQzMigyNCkudWludDMyKGUucGVuZGluZ0RlbGl2ZXJ5VGltZXN0YW1wU2VjKSxcIjBcIiE9PWUuc2VuZFN0YXJ0VGltZXN0YW1wTXMmJnQudWludDMyKDMyKS51aW50NjQoZS5zZW5kU3RhcnRUaW1lc3RhbXBNcyksXCIwXCIhPT1lLmxvY2F0aW9uVGltZXN0YW1wTXMmJnQudWludDMyKDQwKS51aW50NjQoZS5sb2NhdGlvblRpbWVzdGFtcE1zKSxcIjBcIiE9PWUubWVkaWFDYXB0dXJlVGltZXN0YW1wTXMmJnQudWludDMyKDQ4KS51aW50NjQoZS5tZWRpYUNhcHR1cmVUaW1lc3RhbXBNcyksXCIwXCIhPT1lLnNuYXBDcmVhdGVUaW1lc3RhbXBNcyYmdC51aW50MzIoNTYpLnVpbnQ2NChlLnNuYXBDcmVhdGVUaW1lc3RhbXBNcyksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXt0aW1lc3RhbXBTZWM6MCxzZWNvbmRhcnlUaW1lc3RhbXBTZWM6MCxwZW5kaW5nRGVsaXZlcnlUaW1lc3RhbXBTZWM6MCxzZW5kU3RhcnRUaW1lc3RhbXBNczpcIjBcIixsb2NhdGlvblRpbWVzdGFtcE1zOlwiMFwiLG1lZGlhQ2FwdHVyZVRpbWVzdGFtcE1zOlwiMFwiLHNuYXBDcmVhdGVUaW1lc3RhbXBNczpcIjBcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkudGltZXN0YW1wU2VjPW4udWludDMyKCk7YnJlYWs7Y2FzZSAyOmkuc2Vjb25kYXJ5VGltZXN0YW1wU2VjPW4udWludDMyKCk7YnJlYWs7Y2FzZSAzOmkucGVuZGluZ0RlbGl2ZXJ5VGltZXN0YW1wU2VjPW4udWludDMyKCk7YnJlYWs7Y2FzZSA0Omkuc2VuZFN0YXJ0VGltZXN0YW1wTXM9YShuLnVpbnQ2NCgpKTticmVhaztjYXNlIDU6aS5sb2NhdGlvblRpbWVzdGFtcE1zPWEobi51aW50NjQoKSk7YnJlYWs7Y2FzZSA2OmkubWVkaWFDYXB0dXJlVGltZXN0YW1wTXM9YShuLnVpbnQ2NCgpKTticmVhaztjYXNlIDc6aS5zbmFwQ3JlYXRlVGltZXN0YW1wTXM9YShuLnVpbnQ2NCgpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3RpbWVzdGFtcFNlYzowLHNlY29uZGFyeVRpbWVzdGFtcFNlYzowLHBlbmRpbmdEZWxpdmVyeVRpbWVzdGFtcFNlYzowLHNlbmRTdGFydFRpbWVzdGFtcE1zOlwiMFwiLGxvY2F0aW9uVGltZXN0YW1wTXM6XCIwXCIsbWVkaWFDYXB0dXJlVGltZXN0YW1wTXM6XCIwXCIsc25hcENyZWF0ZVRpbWVzdGFtcE1zOlwiMFwifTtyZXR1cm4gdC50aW1lc3RhbXBTZWM9ZS50aW1lc3RhbXBTZWM/PzAsdC5zZWNvbmRhcnlUaW1lc3RhbXBTZWM9ZS5zZWNvbmRhcnlUaW1lc3RhbXBTZWM/PzAsdC5wZW5kaW5nRGVsaXZlcnlUaW1lc3RhbXBTZWM9ZS5wZW5kaW5nRGVsaXZlcnlUaW1lc3RhbXBTZWM/PzAsdC5zZW5kU3RhcnRUaW1lc3RhbXBNcz1lLnNlbmRTdGFydFRpbWVzdGFtcE1zPz9cIjBcIix0LmxvY2F0aW9uVGltZXN0YW1wTXM9ZS5sb2NhdGlvblRpbWVzdGFtcE1zPz9cIjBcIix0Lm1lZGlhQ2FwdHVyZVRpbWVzdGFtcE1zPWUubWVkaWFDYXB0dXJlVGltZXN0YW1wTXM/P1wiMFwiLHQuc25hcENyZWF0ZVRpbWVzdGFtcE1zPWUuc25hcENyZWF0ZVRpbWVzdGFtcE1zPz9cIjBcIix0fX0sby5kZWZhdWx0LnV0aWwuTG9uZyE9PWkuZGVmYXVsdCYmKG8uZGVmYXVsdC51dGlsLkxvbmc9aS5kZWZhdWx0LG8uZGVmYXVsdC5jb25maWd1cmUoKSl9LDg5ODc1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlVubG9ja2FibGVzPXZvaWQgMDtjb25zdCBpPW4oNjE0MzcpLG89cihuKDYyMTAwKSk7ZnVuY3Rpb24gYSgpe3JldHVybnt1bmxvY2thYmxlc1NuYXBJbmZvOnZvaWQgMCxlbmNyeXB0ZWRHZW9EYXRhOm5ldyBVaW50OEFycmF5fX10LlVubG9ja2FibGVzPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUudW5sb2NrYWJsZXNTbmFwSW5mbyYmaS5VbmxvY2thYmxlc1NuYXBJbmZvLmVuY29kZShlLnVubG9ja2FibGVzU25hcEluZm8sdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksMCE9PWUuZW5jcnlwdGVkR2VvRGF0YS5sZW5ndGgmJnQudWludDMyKDE4KS5ieXRlcyhlLmVuY3J5cHRlZEdlb0RhdGEpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3Qgcz1hKCk7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOnMudW5sb2NrYWJsZXNTbmFwSW5mbz1pLlVubG9ja2FibGVzU25hcEluZm8uZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOnMuZW5jcnlwdGVkR2VvRGF0YT1uLmJ5dGVzKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBzfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PWEoKTtyZXR1cm4gdC51bmxvY2thYmxlc1NuYXBJbmZvPXZvaWQgMCE9PWUudW5sb2NrYWJsZXNTbmFwSW5mbyYmbnVsbCE9PWUudW5sb2NrYWJsZXNTbmFwSW5mbz9pLlVubG9ja2FibGVzU25hcEluZm8uZnJvbVBhcnRpYWwoZS51bmxvY2thYmxlc1NuYXBJbmZvKTp2b2lkIDAsdC5lbmNyeXB0ZWRHZW9EYXRhPWUuZW5jcnlwdGVkR2VvRGF0YT8/bmV3IFVpbnQ4QXJyYXksdH19fSw0MTg3MjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5WaWRlb0ludGVydmFsPXQuVmlkZW9JbnRlcnZhbF9Db250ZW50VHlwZT12b2lkIDA7Y29uc3QgaT1yKG4oNDE1ODMpKSxvPXIobig2MjEwMCkpO3ZhciBhOyhhPXQuVmlkZW9JbnRlcnZhbF9Db250ZW50VHlwZXx8KHQuVmlkZW9JbnRlcnZhbF9Db250ZW50VHlwZT17fSkpW2EuVU5TRVQ9MF09XCJVTlNFVFwiLGFbYS5WSURFT19UUkFDSz0xXT1cIlZJREVPX1RSQUNLXCIsYVthLkFEPTJdPVwiQURcIixhW2EuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLHQuVmlkZW9JbnRlcnZhbD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS50cmFja051bWJlciYmdC51aW50MzIoOCkuaW50MzIoZS50cmFja051bWJlciksMCE9PWUudGltZVNjYWxlJiZ0LnVpbnQzMigxNikuaW50MzIoZS50aW1lU2NhbGUpLFwiMFwiIT09ZS5zdGFydFRpbWUmJnQudWludDMyKDI0KS5pbnQ2NChlLnN0YXJ0VGltZSksMCE9PWUuY29udGVudFR5cGUmJnQudWludDMyKDMyKS5pbnQzMihlLmNvbnRlbnRUeXBlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3RyYWNrTnVtYmVyOjAsdGltZVNjYWxlOjAsc3RhcnRUaW1lOlwiMFwiLGNvbnRlbnRUeXBlOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnRyYWNrTnVtYmVyPW4uaW50MzIoKTticmVhaztjYXNlIDI6aS50aW1lU2NhbGU9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMzppLnN0YXJ0VGltZT1uLmludDY0KCkudG9TdHJpbmcoKTticmVhaztjYXNlIDQ6aS5jb250ZW50VHlwZT1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt0cmFja051bWJlcjowLHRpbWVTY2FsZTowLHN0YXJ0VGltZTpcIjBcIixjb250ZW50VHlwZTowfTtyZXR1cm4gdC50cmFja051bWJlcj1lLnRyYWNrTnVtYmVyPz8wLHQudGltZVNjYWxlPWUudGltZVNjYWxlPz8wLHQuc3RhcnRUaW1lPWUuc3RhcnRUaW1lPz9cIjBcIix0LmNvbnRlbnRUeXBlPWUuY29udGVudFR5cGU/PzAsdH19LG8uZGVmYXVsdC51dGlsLkxvbmchPT1pLmRlZmF1bHQmJihvLmRlZmF1bHQudXRpbC5Mb25nPWkuZGVmYXVsdCxvLmRlZmF1bHQuY29uZmlndXJlKCkpfSwzODk0MTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5XZWJQYWdlPXQuV2ViUGFnZV9XZWJ2aWV3VGFyZ2V0PXQuV2ViUGFnZV9GaWxsTW9kZT10LldlYlBhZ2VfU3Vic2NyaXB0aW9uTWV0aG9kPXQuV2ViUGFnZV9TaGFyaW5nQXVkaWVuY2U9dC5XZWJQYWdlX1NoYXJpbmdNZXRob2Q9dC5XZWJQYWdlX0JyaWRnZUNhcGFiaWxpdHk9dC5XZWJQYWdlX1ZpZXdNb2RlPXQuV2ViUGFnZV9QcmVsb2FkTW9kZT10LldlYlBhZ2VfVXJsVHlwZT12b2lkIDA7Y29uc3QgaT1yKG4oNjIxMDApKTt2YXIgbyxhLHMsYyxsLHUsZCxmLHA7KHA9dC5XZWJQYWdlX1VybFR5cGV8fCh0LldlYlBhZ2VfVXJsVHlwZT17fSkpW3AuU1RBTkRBUkQ9MF09XCJTVEFOREFSRFwiLHBbcC5BRkZJTElBVEU9MV09XCJBRkZJTElBVEVcIixwW3AuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLChmPXQuV2ViUGFnZV9QcmVsb2FkTW9kZXx8KHQuV2ViUGFnZV9QcmVsb2FkTW9kZT17fSkpW2YuREVGQVVMVF9QUkVMT0FEX01PREU9MF09XCJERUZBVUxUX1BSRUxPQURfTU9ERVwiLGZbZi5QUkVMT0FEX0FOWVRJTUU9MV09XCJQUkVMT0FEX0FOWVRJTUVcIixmW2YuUFJFTE9BRF9PTl9TTkFQX0xPQUQ9Ml09XCJQUkVMT0FEX09OX1NOQVBfTE9BRFwiLGZbZi5ORVZFUl9QUkVMT0FEPTNdPVwiTkVWRVJfUFJFTE9BRFwiLGZbZi5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKGQ9dC5XZWJQYWdlX1ZpZXdNb2RlfHwodC5XZWJQYWdlX1ZpZXdNb2RlPXt9KSlbZC5ERUZBVUxUX1ZJRVdfTU9ERT0wXT1cIkRFRkFVTFRfVklFV19NT0RFXCIsZFtkLklNTUVSU0lWRT0xXT1cIklNTUVSU0lWRVwiLGRbZC5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKHU9dC5XZWJQYWdlX0JyaWRnZUNhcGFiaWxpdHl8fCh0LldlYlBhZ2VfQnJpZGdlQ2FwYWJpbGl0eT17fSkpW3UuREVGQVVMVF9CUklER0VfQ0FQQUJJTElUWT0wXT1cIkRFRkFVTFRfQlJJREdFX0NBUEFCSUxJVFlcIix1W3UuUEFHRV9WSVNJQklMSVRZPTFdPVwiUEFHRV9WSVNJQklMSVRZXCIsdVt1LklOTElORV9WSURFT1M9Ml09XCJJTkxJTkVfVklERU9TXCIsdVt1LkFVVE9GSUxMPTNdPVwiQVVUT0ZJTExcIix1W3UuU1VCU0NSSVBUSU9OPTRdPVwiU1VCU0NSSVBUSU9OXCIsdVt1LlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwobD10LldlYlBhZ2VfU2hhcmluZ01ldGhvZHx8KHQuV2ViUGFnZV9TaGFyaW5nTWV0aG9kPXt9KSlbbC5ERUZBVUxUX1NIQVJJTkdfTUVUSE9EPTBdPVwiREVGQVVMVF9TSEFSSU5HX01FVEhPRFwiLGxbbC5TSEFSRV9ERUVQX0xJTks9MV09XCJTSEFSRV9ERUVQX0xJTktcIixsW2wuU0hBUkVfREVFUF9MSU5LX1RPUF9TTkFQPTJdPVwiU0hBUkVfREVFUF9MSU5LX1RPUF9TTkFQXCIsbFtsLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwoYz10LldlYlBhZ2VfU2hhcmluZ0F1ZGllbmNlfHwodC5XZWJQYWdlX1NoYXJpbmdBdWRpZW5jZT17fSkpW2MuREVGQVVMVF9TSEFSSU5HX0FVRElFTkNFPTBdPVwiREVGQVVMVF9TSEFSSU5HX0FVRElFTkNFXCIsY1tjLlNIQVJFX1RPX1NOQVBDSEFUX09OTFk9MV09XCJTSEFSRV9UT19TTkFQQ0hBVF9PTkxZXCIsY1tjLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwocz10LldlYlBhZ2VfU3Vic2NyaXB0aW9uTWV0aG9kfHwodC5XZWJQYWdlX1N1YnNjcmlwdGlvbk1ldGhvZD17fSkpW3MuVU5TRVRfU1VCU0NSSVBUSU9OX01FVEhPRD0wXT1cIlVOU0VUX1NVQlNDUklQVElPTl9NRVRIT0RcIixzW3MuU1VCU0NSSVBUSU9OX0ZPT1RFUj0xXT1cIlNVQlNDUklQVElPTl9GT09URVJcIixzW3MuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLChhPXQuV2ViUGFnZV9GaWxsTW9kZXx8KHQuV2ViUGFnZV9GaWxsTW9kZT17fSkpW2EuRlVMTF9TQ1JFRU49MF09XCJGVUxMX1NDUkVFTlwiLGFbYS5TTkFQPTFdPVwiU05BUFwiLGFbYS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsKG89dC5XZWJQYWdlX1dlYnZpZXdUYXJnZXR8fCh0LldlYlBhZ2VfV2Vidmlld1RhcmdldD17fSkpW28uVU5TRVRfV0VCVklFV19UQVJHRVQ9MF09XCJVTlNFVF9XRUJWSUVXX1RBUkdFVFwiLG9bby5XRUJWSUVXX1YyPTFdPVwiV0VCVklFV19WMlwiLG9bby5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsdC5XZWJQYWdlPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7XCJcIiE9PWUudXJsJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUudXJsKSwwIT09ZS51cmxUeXBlJiZ0LnVpbnQzMigxMjgpLmludDMyKGUudXJsVHlwZSksITA9PT1lLmJsb2NrRXh0ZXJuYWxTaGFyaW5nJiZ0LnVpbnQzMigxNikuYm9vbChlLmJsb2NrRXh0ZXJuYWxTaGFyaW5nKSwwIT09ZS5wcmVsb2FkTW9kZSYmdC51aW50MzIoMjQpLmludDMyKGUucHJlbG9hZE1vZGUpLDAhPT1lLnZpZXdNb2RlJiZ0LnVpbnQzMigzMikuaW50MzIoZS52aWV3TW9kZSksdC51aW50MzIoNDIpLmZvcmsoKTtmb3IoY29uc3QgbiBvZiBlLmJyaWRnZUNhcGFiaWxpdGllcyl0LmludDMyKG4pO3QubGRlbGltKCk7Zm9yKGNvbnN0IG4gb2YgZS5hbGxvd2VkV2Vidmlld01hY3Jvcyl0LnVpbnQzMig1MCkuc3RyaW5nKG4pO3JldHVybiEwPT09ZS5hbGxvd1dlYlN0b3JhZ2UmJnQudWludDMyKDU2KS5ib29sKGUuYWxsb3dXZWJTdG9yYWdlKSwwIT09ZS5zaGFyaW5nTWV0aG9kJiZ0LnVpbnQzMig2NCkuaW50MzIoZS5zaGFyaW5nTWV0aG9kKSwwIT09ZS5zaGFyaW5nQXVkaWVuY2UmJnQudWludDMyKDcyKS5pbnQzMihlLnNoYXJpbmdBdWRpZW5jZSksITA9PT1lLmNvbnRyb2xWb2x1bWUmJnQudWludDMyKDgwKS5ib29sKGUuY29udHJvbFZvbHVtZSksMCE9PWUuc3Vic2NyaXB0aW9uTWV0aG9kJiZ0LnVpbnQzMig4OCkuaW50MzIoZS5zdWJzY3JpcHRpb25NZXRob2QpLFwiXCIhPT1lLmlkJiZ0LnVpbnQzMig5OCkuc3RyaW5nKGUuaWQpLDAhPT1lLmR5bmFtaWNVcmxUeXBlJiZ0LnVpbnQzMigxMDQpLmludDMyKGUuZHluYW1pY1VybFR5cGUpLFwiXCIhPT1lLmJhY2tncm91bmRDb2xvciYmdC51aW50MzIoMTE0KS5zdHJpbmcoZS5iYWNrZ3JvdW5kQ29sb3IpLDAhPT1lLmZpbGxNb2RlJiZ0LnVpbnQzMigxMjApLmludDMyKGUuZmlsbE1vZGUpLDAhPT1lLndlYnZpZXdUYXJnZXQmJnQudWludDMyKDEzNikuaW50MzIoZS53ZWJ2aWV3VGFyZ2V0KSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e3VybDpcIlwiLHVybFR5cGU6MCxibG9ja0V4dGVybmFsU2hhcmluZzohMSxwcmVsb2FkTW9kZTowLHZpZXdNb2RlOjAsYnJpZGdlQ2FwYWJpbGl0aWVzOltdLGFsbG93ZWRXZWJ2aWV3TWFjcm9zOltdLGFsbG93V2ViU3RvcmFnZTohMSxzaGFyaW5nTWV0aG9kOjAsc2hhcmluZ0F1ZGllbmNlOjAsY29udHJvbFZvbHVtZTohMSxzdWJzY3JpcHRpb25NZXRob2Q6MCxpZDpcIlwiLGR5bmFtaWNVcmxUeXBlOjAsYmFja2dyb3VuZENvbG9yOlwiXCIsZmlsbE1vZGU6MCx3ZWJ2aWV3VGFyZ2V0OjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTpvLnVybD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMTY6by51cmxUeXBlPW4uaW50MzIoKTticmVhaztjYXNlIDI6by5ibG9ja0V4dGVybmFsU2hhcmluZz1uLmJvb2woKTticmVhaztjYXNlIDM6by5wcmVsb2FkTW9kZT1uLmludDMyKCk7YnJlYWs7Y2FzZSA0Om8udmlld01vZGU9bi5pbnQzMigpO2JyZWFrO2Nhc2UgNTppZigyPT0oNyZlKSl7Y29uc3QgZT1uLnVpbnQzMigpK24ucG9zO2Zvcig7bi5wb3M8ZTspby5icmlkZ2VDYXBhYmlsaXRpZXMucHVzaChuLmludDMyKCkpfWVsc2Ugby5icmlkZ2VDYXBhYmlsaXRpZXMucHVzaChuLmludDMyKCkpO2JyZWFrO2Nhc2UgNjpvLmFsbG93ZWRXZWJ2aWV3TWFjcm9zLnB1c2gobi5zdHJpbmcoKSk7YnJlYWs7Y2FzZSA3Om8uYWxsb3dXZWJTdG9yYWdlPW4uYm9vbCgpO2JyZWFrO2Nhc2UgODpvLnNoYXJpbmdNZXRob2Q9bi5pbnQzMigpO2JyZWFrO2Nhc2UgOTpvLnNoYXJpbmdBdWRpZW5jZT1uLmludDMyKCk7YnJlYWs7Y2FzZSAxMDpvLmNvbnRyb2xWb2x1bWU9bi5ib29sKCk7YnJlYWs7Y2FzZSAxMTpvLnN1YnNjcmlwdGlvbk1ldGhvZD1uLmludDMyKCk7YnJlYWs7Y2FzZSAxMjpvLmlkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAxMzpvLmR5bmFtaWNVcmxUeXBlPW4uaW50MzIoKTticmVhaztjYXNlIDE0Om8uYmFja2dyb3VuZENvbG9yPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAxNTpvLmZpbGxNb2RlPW4uaW50MzIoKTticmVhaztjYXNlIDE3Om8ud2Vidmlld1RhcmdldD1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBvfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt1cmw6XCJcIix1cmxUeXBlOjAsYmxvY2tFeHRlcm5hbFNoYXJpbmc6ITEscHJlbG9hZE1vZGU6MCx2aWV3TW9kZTowLGJyaWRnZUNhcGFiaWxpdGllczpbXSxhbGxvd2VkV2Vidmlld01hY3JvczpbXSxhbGxvd1dlYlN0b3JhZ2U6ITEsc2hhcmluZ01ldGhvZDowLHNoYXJpbmdBdWRpZW5jZTowLGNvbnRyb2xWb2x1bWU6ITEsc3Vic2NyaXB0aW9uTWV0aG9kOjAsaWQ6XCJcIixkeW5hbWljVXJsVHlwZTowLGJhY2tncm91bmRDb2xvcjpcIlwiLGZpbGxNb2RlOjAsd2Vidmlld1RhcmdldDowfTtyZXR1cm4gdC51cmw9ZS51cmw/P1wiXCIsdC51cmxUeXBlPWUudXJsVHlwZT8/MCx0LmJsb2NrRXh0ZXJuYWxTaGFyaW5nPWUuYmxvY2tFeHRlcm5hbFNoYXJpbmc/PyExLHQucHJlbG9hZE1vZGU9ZS5wcmVsb2FkTW9kZT8/MCx0LnZpZXdNb2RlPWUudmlld01vZGU/PzAsdC5icmlkZ2VDYXBhYmlsaXRpZXM9ZS5icmlkZ2VDYXBhYmlsaXRpZXM/Lm1hcCgoZT0+ZSkpfHxbXSx0LmFsbG93ZWRXZWJ2aWV3TWFjcm9zPWUuYWxsb3dlZFdlYnZpZXdNYWNyb3M/Lm1hcCgoZT0+ZSkpfHxbXSx0LmFsbG93V2ViU3RvcmFnZT1lLmFsbG93V2ViU3RvcmFnZT8/ITEsdC5zaGFyaW5nTWV0aG9kPWUuc2hhcmluZ01ldGhvZD8/MCx0LnNoYXJpbmdBdWRpZW5jZT1lLnNoYXJpbmdBdWRpZW5jZT8/MCx0LmNvbnRyb2xWb2x1bWU9ZS5jb250cm9sVm9sdW1lPz8hMSx0LnN1YnNjcmlwdGlvbk1ldGhvZD1lLnN1YnNjcmlwdGlvbk1ldGhvZD8/MCx0LmlkPWUuaWQ/P1wiXCIsdC5keW5hbWljVXJsVHlwZT1lLmR5bmFtaWNVcmxUeXBlPz8wLHQuYmFja2dyb3VuZENvbG9yPWUuYmFja2dyb3VuZENvbG9yPz9cIlwiLHQuZmlsbE1vZGU9ZS5maWxsTW9kZT8/MCx0LndlYnZpZXdUYXJnZXQ9ZS53ZWJ2aWV3VGFyZ2V0Pz8wLHR9fX0sMzIwNDU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuVG9waWNTdGlja2VyTWVtb3JpZXNNb2RlbD10LlRvcGljU3RpY2tlcj12b2lkIDA7Y29uc3QgaT1uKDUxNTk4KSxvPXIobig2MjEwMCkpO3QuVG9waWNTdGlja2VyPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUudG9waWNJZCYmaS5VVUlELmVuY29kZShlLnRvcGljSWQsdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksXCJcIiE9PWUuc3RpY2tlclRleHQmJnQudWludDMyKDE4KS5zdHJpbmcoZS5zdGlja2VyVGV4dCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBhPXt0b3BpY0lkOnZvaWQgMCxzdGlja2VyVGV4dDpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS50b3BpY0lkPWkuVVVJRC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDI6YS5zdGlja2VyVGV4dD1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dG9waWNJZDp2b2lkIDAsc3RpY2tlclRleHQ6XCJcIn07cmV0dXJuIHQudG9waWNJZD12b2lkIDAhPT1lLnRvcGljSWQmJm51bGwhPT1lLnRvcGljSWQ/aS5VVUlELmZyb21QYXJ0aWFsKGUudG9waWNJZCk6dm9pZCAwLHQuc3RpY2tlclRleHQ9ZS5zdGlja2VyVGV4dD8/XCJcIix0fX0sdC5Ub3BpY1N0aWNrZXJNZW1vcmllc01vZGVsPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUudG9waWNJZCYmaS5VVUlELmVuY29kZShlLnRvcGljSWQsdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksXCJcIiE9PWUuc3RpY2tlclRleHQmJnQudWludDMyKDE4KS5zdHJpbmcoZS5zdGlja2VyVGV4dCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBhPXt0b3BpY0lkOnZvaWQgMCxzdGlja2VyVGV4dDpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS50b3BpY0lkPWkuVVVJRC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDI6YS5zdGlja2VyVGV4dD1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17dG9waWNJZDp2b2lkIDAsc3RpY2tlclRleHQ6XCJcIn07cmV0dXJuIHQudG9waWNJZD12b2lkIDAhPT1lLnRvcGljSWQmJm51bGwhPT1lLnRvcGljSWQ/aS5VVUlELmZyb21QYXJ0aWFsKGUudG9waWNJZCk6dm9pZCAwLHQuc3RpY2tlclRleHQ9ZS5zdGlja2VyVGV4dD8/XCJcIix0fX19LDYxNDM3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlVubG9ja2FibGVzU25hcEluZm89dC5TdGlja2VySW5mbz10LkxlbnNJbmZvPXQuRmlsdGVySW5mbz10LlVubG9ja2FibGVzU25hcEluZm9fU25hcFNvdXJjZT12b2lkIDA7Y29uc3QgaT1yKG4oNDE1ODMpKSxvPXIobig2MjEwMCkpO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGUudG9TdHJpbmcoKX12YXIgczsocz10LlVubG9ja2FibGVzU25hcEluZm9fU25hcFNvdXJjZXx8KHQuVW5sb2NrYWJsZXNTbmFwSW5mb19TbmFwU291cmNlPXt9KSlbcy5VTktOT1dOPTBdPVwiVU5LTk9XTlwiLHNbcy5DQU1FUkE9MV09XCJDQU1FUkFcIixzW3MuTUVNT1JZPTJdPVwiTUVNT1JZXCIsc1tzLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIix0LkZpbHRlckluZm89e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06by5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIjBcIiE9PWUudW5sb2NrYWJsZUlkJiZ0LnVpbnQzMig4KS5pbnQ2NChlLnVubG9ja2FibGVJZCksITA9PT1lLmlzVWNvJiZ0LnVpbnQzMigxNikuYm9vbChlLmlzVWNvKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3VubG9ja2FibGVJZDpcIjBcIixpc1VjbzohMX07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkudW5sb2NrYWJsZUlkPWEobi5pbnQ2NCgpKTticmVhaztjYXNlIDI6aS5pc1Vjbz1uLmJvb2woKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3VubG9ja2FibGVJZDpcIjBcIixpc1VjbzohMX07cmV0dXJuIHQudW5sb2NrYWJsZUlkPWUudW5sb2NrYWJsZUlkPz9cIjBcIix0LmlzVWNvPWUuaXNVY28/PyExLHR9fSx0LkxlbnNJbmZvPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCIwXCIhPT1lLnVubG9ja2FibGVJZCYmdC51aW50MzIoOCkuaW50NjQoZS51bmxvY2thYmxlSWQpLFwiMFwiIT09ZS5vcHRpb25JZCYmdC51aW50MzIoMTYpLmludDY0KGUub3B0aW9uSWQpLDAhPT1lLnNvdXJjZSYmdC51aW50MzIoMjQpLmludDMyKGUuc291cmNlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3VubG9ja2FibGVJZDpcIjBcIixvcHRpb25JZDpcIjBcIixzb3VyY2U6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkudW5sb2NrYWJsZUlkPWEobi5pbnQ2NCgpKTticmVhaztjYXNlIDI6aS5vcHRpb25JZD1hKG4uaW50NjQoKSk7YnJlYWs7Y2FzZSAzOmkuc291cmNlPW4uaW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3VubG9ja2FibGVJZDpcIjBcIixvcHRpb25JZDpcIjBcIixzb3VyY2U6MH07cmV0dXJuIHQudW5sb2NrYWJsZUlkPWUudW5sb2NrYWJsZUlkPz9cIjBcIix0Lm9wdGlvbklkPWUub3B0aW9uSWQ/P1wiMFwiLHQuc291cmNlPWUuc291cmNlPz8wLHR9fSx0LlN0aWNrZXJJbmZvPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCIwXCIhPT1lLnVubG9ja2FibGVJZCYmdC51aW50MzIoOCkuaW50NjQoZS51bmxvY2thYmxlSWQpLFwiMFwiIT09ZS5zdGlja2VySWQmJnQudWludDMyKDE2KS5pbnQ2NChlLnN0aWNrZXJJZCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXt1bmxvY2thYmxlSWQ6XCIwXCIsc3RpY2tlcklkOlwiMFwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS51bmxvY2thYmxlSWQ9YShuLmludDY0KCkpO2JyZWFrO2Nhc2UgMjppLnN0aWNrZXJJZD1hKG4uaW50NjQoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt1bmxvY2thYmxlSWQ6XCIwXCIsc3RpY2tlcklkOlwiMFwifTtyZXR1cm4gdC51bmxvY2thYmxlSWQ9ZS51bmxvY2thYmxlSWQ/P1wiMFwiLHQuc3RpY2tlcklkPWUuc3RpY2tlcklkPz9cIjBcIix0fX0sdC5VbmxvY2thYmxlc1NuYXBJbmZvPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7XCJcIiE9PWUuc25hcFNlc3Npb25JZCYmbi51aW50MzIoMTApLnN0cmluZyhlLnNuYXBTZXNzaW9uSWQpO2Zvcihjb25zdCByIG9mIGUuZmlsdGVycyl0LkZpbHRlckluZm8uZW5jb2RlKHIsbi51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCk7Zm9yKGNvbnN0IHIgb2YgZS5sZW5zZXMpdC5MZW5zSW5mby5lbmNvZGUocixuLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKTtmb3IoY29uc3QgciBvZiBlLnN0aWNrZXJzKXQuU3RpY2tlckluZm8uZW5jb2RlKHIsbi51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIDAhPT1lLnNuYXBTb3VyY2UmJm4udWludDMyKDQwKS5pbnQzMihlLnNuYXBTb3VyY2UpLG59LGRlY29kZShlLG4pe2NvbnN0IHI9ZSBpbnN0YW5jZW9mIG8uZGVmYXVsdC5SZWFkZXI/ZTpuZXcgby5kZWZhdWx0LlJlYWRlcihlKTtsZXQgaT12b2lkIDA9PT1uP3IubGVuOnIucG9zK247Y29uc3QgYT17c25hcFNlc3Npb25JZDpcIlwiLGZpbHRlcnM6W10sbGVuc2VzOltdLHN0aWNrZXJzOltdLHNuYXBTb3VyY2U6MH07Zm9yKDtyLnBvczxpOyl7Y29uc3QgZT1yLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmEuc25hcFNlc3Npb25JZD1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMjphLmZpbHRlcnMucHVzaCh0LkZpbHRlckluZm8uZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2Nhc2UgMzphLmxlbnNlcy5wdXNoKHQuTGVuc0luZm8uZGVjb2RlKHIsci51aW50MzIoKSkpO2JyZWFrO2Nhc2UgNDphLnN0aWNrZXJzLnB1c2godC5TdGlja2VySW5mby5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSA1OmEuc25hcFNvdXJjZT1yLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtzbmFwU2Vzc2lvbklkOlwiXCIsZmlsdGVyczpbXSxsZW5zZXM6W10sc3RpY2tlcnM6W10sc25hcFNvdXJjZTowfTtyZXR1cm4gbi5zbmFwU2Vzc2lvbklkPWUuc25hcFNlc3Npb25JZD8/XCJcIixuLmZpbHRlcnM9ZS5maWx0ZXJzPy5tYXAoKGU9PnQuRmlsdGVySW5mby5mcm9tUGFydGlhbChlKSkpfHxbXSxuLmxlbnNlcz1lLmxlbnNlcz8ubWFwKChlPT50LkxlbnNJbmZvLmZyb21QYXJ0aWFsKGUpKSl8fFtdLG4uc3RpY2tlcnM9ZS5zdGlja2Vycz8ubWFwKChlPT50LlN0aWNrZXJJbmZvLmZyb21QYXJ0aWFsKGUpKSl8fFtdLG4uc25hcFNvdXJjZT1lLnNuYXBTb3VyY2U/PzAsbn19LG8uZGVmYXVsdC51dGlsLkxvbmchPT1pLmRlZmF1bHQmJihvLmRlZmF1bHQudXRpbC5Mb25nPWkuZGVmYXVsdCxvLmRlZmF1bHQuY29uZmlndXJlKCkpfSw1NjE2MDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5EZWxldGVQcmV2aWV3UmVzcG9uc2U9dC5EZWxldGVQcmV2aWV3UmVxdWVzdD12b2lkIDA7Y29uc3QgaT1yKG4oNjIxMDApKTt0LkRlbGV0ZVByZXZpZXdSZXF1ZXN0PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkuZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUudXJsJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUudXJsKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IG89e3VybDpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/by51cmw9bi5zdHJpbmcoKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIG99LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e3VybDpcIlwifTtyZXR1cm4gdC51cmw9ZS51cmw/P1wiXCIsdH19LHQuRGVsZXRlUHJldmlld1Jlc3BvbnNlPXtlbmNvZGUoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpfSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtuLnNraXBUeXBlKDcmZSl9cmV0dXJue319LGZyb21QYXJ0aWFsOmU9Pih7fSl9fSw1NTk0MDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5HZXRQcmV2aWV3UmVzcG9uc2U9dC5PcmlnaW5FcnJvcj10LkdldFByZXZpZXdSZXF1ZXN0PXZvaWQgMDtjb25zdCBpPW4oODEwODEpLG89cihuKDYyMTAwKSk7dC5HZXRQcmV2aWV3UmVxdWVzdD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnVybCYmdC51aW50MzIoMTApLnN0cmluZyhlLnVybCksITA9PT1lLndpdGhJbkFwcERlZXBMaW5rcyYmdC51aW50MzIoMTYpLmJvb2woZS53aXRoSW5BcHBEZWVwTGlua3MpLCEwPT09ZS5wYXJzZVN0aWNrZXJTaGFyZU1ldGFkYXRhJiZ0LnVpbnQzMigyNCkuYm9vbChlLnBhcnNlU3RpY2tlclNoYXJlTWV0YWRhdGEpLCEwPT09ZS53aXRoSHRtbCYmdC51aW50MzIoMzIpLmJvb2woZS53aXRoSHRtbCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXt1cmw6XCJcIix3aXRoSW5BcHBEZWVwTGlua3M6ITEscGFyc2VTdGlja2VyU2hhcmVNZXRhZGF0YTohMSx3aXRoSHRtbDohMX07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkudXJsPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkud2l0aEluQXBwRGVlcExpbmtzPW4uYm9vbCgpO2JyZWFrO2Nhc2UgMzppLnBhcnNlU3RpY2tlclNoYXJlTWV0YWRhdGE9bi5ib29sKCk7YnJlYWs7Y2FzZSA0Omkud2l0aEh0bWw9bi5ib29sKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt1cmw6XCJcIix3aXRoSW5BcHBEZWVwTGlua3M6ITEscGFyc2VTdGlja2VyU2hhcmVNZXRhZGF0YTohMSx3aXRoSHRtbDohMX07cmV0dXJuIHQudXJsPWUudXJsPz9cIlwiLHQud2l0aEluQXBwRGVlcExpbmtzPWUud2l0aEluQXBwRGVlcExpbmtzPz8hMSx0LnBhcnNlU3RpY2tlclNoYXJlTWV0YWRhdGE9ZS5wYXJzZVN0aWNrZXJTaGFyZU1ldGFkYXRhPz8hMSx0LndpdGhIdG1sPWUud2l0aEh0bWw/PyExLHR9fSx0Lk9yaWdpbkVycm9yPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuITA9PT1lLnJldHJ5YWJsZSYmdC51aW50MzIoOCkuYm9vbChlLnJldHJ5YWJsZSksMCE9PWUuaHR0cFJlc3BvbnNlQ29kZSYmdC51aW50MzIoMTYpLmludDMyKGUuaHR0cFJlc3BvbnNlQ29kZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2Ygby5kZWZhdWx0LlJlYWRlcj9lOm5ldyBvLmRlZmF1bHQuUmVhZGVyKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtyZXRyeWFibGU6ITEsaHR0cFJlc3BvbnNlQ29kZTowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5yZXRyeWFibGU9bi5ib29sKCk7YnJlYWs7Y2FzZSAyOmkuaHR0cFJlc3BvbnNlQ29kZT1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXtyZXRyeWFibGU6ITEsaHR0cFJlc3BvbnNlQ29kZTowfTtyZXR1cm4gdC5yZXRyeWFibGU9ZS5yZXRyeWFibGU/PyExLHQuaHR0cFJlc3BvbnNlQ29kZT1lLmh0dHBSZXNwb25zZUNvZGU/PzAsdH19LHQuR2V0UHJldmlld1Jlc3BvbnNlPXtlbmNvZGUoZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm8uZGVmYXVsdC5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUucHJldmlldyYmaS5VcmxQcmV2aWV3LmVuY29kZShlLnByZXZpZXcsbi51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCksITA9PT1lLnN1Y2Nlc3MmJm4udWludDMyKDE2KS5ib29sKGUuc3VjY2Vzcyksdm9pZCAwIT09ZS5vcmlnaW5FcnJvciYmdC5PcmlnaW5FcnJvci5lbmNvZGUoZS5vcmlnaW5FcnJvcixuLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBvLmRlZmF1bHQuUmVhZGVyP2U6bmV3IG8uZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGE9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IHM9e3ByZXZpZXc6dm9pZCAwLHN1Y2Nlc3M6ITEsb3JpZ2luRXJyb3I6dm9pZCAwfTtmb3IoO3IucG9zPGE7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6cy5wcmV2aWV3PWkuVXJsUHJldmlldy5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDI6cy5zdWNjZXNzPXIuYm9vbCgpO2JyZWFrO2Nhc2UgMzpzLm9yaWdpbkVycm9yPXQuT3JpZ2luRXJyb3IuZGVjb2RlKHIsci51aW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBzfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtwcmV2aWV3OnZvaWQgMCxzdWNjZXNzOiExLG9yaWdpbkVycm9yOnZvaWQgMH07cmV0dXJuIG4ucHJldmlldz12b2lkIDAhPT1lLnByZXZpZXcmJm51bGwhPT1lLnByZXZpZXc/aS5VcmxQcmV2aWV3LmZyb21QYXJ0aWFsKGUucHJldmlldyk6dm9pZCAwLG4uc3VjY2Vzcz1lLnN1Y2Nlc3M/PyExLG4ub3JpZ2luRXJyb3I9dm9pZCAwIT09ZS5vcmlnaW5FcnJvciYmbnVsbCE9PWUub3JpZ2luRXJyb3I/dC5PcmlnaW5FcnJvci5mcm9tUGFydGlhbChlLm9yaWdpbkVycm9yKTp2b2lkIDAsbn19fSw4MDk3NDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5FbWJlZGRlZE1lZGlhPXQuTWVkaWE9dC5FbWJlZGRlZE1lZGlhX0NvbnRlbnRUeXBlPXZvaWQgMDtjb25zdCBpPXIobig2MjEwMCkpO2Z1bmN0aW9uIG8oKXtyZXR1cm57Y29udGVudFR5cGU6MCxkYXRhOm5ldyBVaW50OEFycmF5fX12YXIgYTsoYT10LkVtYmVkZGVkTWVkaWFfQ29udGVudFR5cGV8fCh0LkVtYmVkZGVkTWVkaWFfQ29udGVudFR5cGU9e30pKVthLlVOS05PV049MF09XCJVTktOT1dOXCIsYVthLkNPTlRFTlRfVFlQRV9KUEVHPTFdPVwiQ09OVEVOVF9UWVBFX0pQRUdcIixhW2EuQ09OVEVOVF9UWVBFX1dFQlA9Ml09XCJDT05URU5UX1RZUEVfV0VCUFwiLGFbYS5DT05URU5UX1RZUEVfR0lGPTNdPVwiQ09OVEVOVF9UWVBFX0dJRlwiLGFbYS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCIsdC5NZWRpYT17ZW5jb2RlKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwidXJsXCI9PT1lLmNvbnRlbnQ/LiRjYXNlJiZuLnVpbnQzMigxMCkuc3RyaW5nKGUuY29udGVudC51cmwpLFwiZW1iZWRkZWRNZWRpYVwiPT09ZS5jb250ZW50Py4kY2FzZSYmdC5FbWJlZGRlZE1lZGlhLmVuY29kZShlLmNvbnRlbnQuZW1iZWRkZWRNZWRpYSxuLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBpLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGkuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IG89dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGE9e2NvbnRlbnQ6dm9pZCAwfTtmb3IoO3IucG9zPG87KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6YS5jb250ZW50PXskY2FzZTpcInVybFwiLHVybDpyLnN0cmluZygpfTticmVhaztjYXNlIDI6YS5jb250ZW50PXskY2FzZTpcImVtYmVkZGVkTWVkaWFcIixlbWJlZGRlZE1lZGlhOnQuRW1iZWRkZWRNZWRpYS5kZWNvZGUocixyLnVpbnQzMigpKX07YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBhfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXtjb250ZW50OnZvaWQgMH07cmV0dXJuXCJ1cmxcIj09PWUuY29udGVudD8uJGNhc2UmJnZvaWQgMCE9PWUuY29udGVudD8udXJsJiZudWxsIT09ZS5jb250ZW50Py51cmwmJihuLmNvbnRlbnQ9eyRjYXNlOlwidXJsXCIsdXJsOmUuY29udGVudC51cmx9KSxcImVtYmVkZGVkTWVkaWFcIj09PWUuY29udGVudD8uJGNhc2UmJnZvaWQgMCE9PWUuY29udGVudD8uZW1iZWRkZWRNZWRpYSYmbnVsbCE9PWUuY29udGVudD8uZW1iZWRkZWRNZWRpYSYmKG4uY29udGVudD17JGNhc2U6XCJlbWJlZGRlZE1lZGlhXCIsZW1iZWRkZWRNZWRpYTp0LkVtYmVkZGVkTWVkaWEuZnJvbVBhcnRpYWwoZS5jb250ZW50LmVtYmVkZGVkTWVkaWEpfSksbn19LHQuRW1iZWRkZWRNZWRpYT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTppLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5jb250ZW50VHlwZSYmdC51aW50MzIoOCkuaW50MzIoZS5jb250ZW50VHlwZSksMCE9PWUuZGF0YS5sZW5ndGgmJnQudWludDMyKDE4KS5ieXRlcyhlLmRhdGEpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGkuZGVmYXVsdC5SZWFkZXI/ZTpuZXcgaS5kZWZhdWx0LlJlYWRlcihlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgYT1vKCk7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmEuY29udGVudFR5cGU9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMjphLmRhdGE9bi5ieXRlcygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gYX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD1vKCk7cmV0dXJuIHQuY29udGVudFR5cGU9ZS5jb250ZW50VHlwZT8/MCx0LmRhdGE9ZS5kYXRhPz9uZXcgVWludDhBcnJheSx0fX19LDEzMzIyOihlLHQsbik9Pnt0LlRvPXQuYWY9dC5taz10LlE1PXZvaWQgMCxuKDMzMDM3KTtjb25zdCByPW4oNTYxNjApLGk9big1NTk0MCk7big4MjA4NCksdC5RNT1jbGFzc3tycGM7Y29uc3RydWN0b3IoZSl7dGhpcy5ycGM9ZSx0aGlzLkRlbGV0ZVByZXZpZXc9dGhpcy5EZWxldGVQcmV2aWV3LmJpbmQodGhpcyksdGhpcy5HZXRQcmV2aWV3PXRoaXMuR2V0UHJldmlldy5iaW5kKHRoaXMpfURlbGV0ZVByZXZpZXcoZSxuKXtyZXR1cm4gdGhpcy5ycGMudW5hcnkodC5hZixyLkRlbGV0ZVByZXZpZXdSZXF1ZXN0LmZyb21QYXJ0aWFsKGUpLG4pfUdldFByZXZpZXcoZSxuKXtyZXR1cm4gdGhpcy5ycGMudW5hcnkodC5UbyxpLkdldFByZXZpZXdSZXF1ZXN0LmZyb21QYXJ0aWFsKGUpLG4pfX0sdC5taz17c2VydmljZU5hbWU6XCJ1cmxfcHJldmlldy5VcmxQcmV2aWV3U2VydmljZVwifSx0LmFmPXttZXRob2ROYW1lOlwiRGVsZXRlUHJldmlld1wiLHNlcnZpY2U6dC5tayxyZXF1ZXN0U3RyZWFtOiExLHJlc3BvbnNlU3RyZWFtOiExLHJlcXVlc3RUeXBlOntzZXJpYWxpemVCaW5hcnkoKXtyZXR1cm4gci5EZWxldGVQcmV2aWV3UmVxdWVzdC5lbmNvZGUodGhpcykuZmluaXNoKCl9fSxyZXNwb25zZVR5cGU6e2Rlc2VyaWFsaXplQmluYXJ5OmU9Pih7Li4uci5EZWxldGVQcmV2aWV3UmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fSx0LlRvPXttZXRob2ROYW1lOlwiR2V0UHJldmlld1wiLHNlcnZpY2U6dC5tayxyZXF1ZXN0U3RyZWFtOiExLHJlc3BvbnNlU3RyZWFtOiExLHJlcXVlc3RUeXBlOntzZXJpYWxpemVCaW5hcnkoKXtyZXR1cm4gaS5HZXRQcmV2aWV3UmVxdWVzdC5lbmNvZGUodGhpcykuZmluaXNoKCl9fSxyZXNwb25zZVR5cGU6e2Rlc2VyaWFsaXplQmluYXJ5OmU9Pih7Li4uaS5HZXRQcmV2aWV3UmVzcG9uc2UuZGVjb2RlKGUpLHRvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fTtjbGFzcyBvIGV4dGVuZHMgRXJyb3J7Y29kZTttZXRhZGF0YTtjb25zdHJ1Y3RvcihlLHQsbil7c3VwZXIoZSksdGhpcy5jb2RlPXQsdGhpcy5tZXRhZGF0YT1ufX19LDgxMDgxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlN0aWNrZXJTaGFyZU1ldGFkYXRhPXQuSW5BcHBEZWVwTGluaz10LlVybFByZXZpZXc9dm9pZCAwO2NvbnN0IGk9cihuKDQxNTgzKSksbz1uKDgwOTc0KSxhPXIobig2MjEwMCkpO2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGUudG9TdHJpbmcoKX10LlVybFByZXZpZXc9e2VuY29kZShlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YS5kZWZhdWx0LldyaXRlci5jcmVhdGUoKTtcIlwiIT09ZS50aXRsZSYmbi51aW50MzIoMTApLnN0cmluZyhlLnRpdGxlKSxcIlwiIT09ZS5zdWJ0aXRsZSYmbi51aW50MzIoMTgpLnN0cmluZyhlLnN1YnRpdGxlKSxcIlwiIT09ZS51cmwmJm4udWludDMyKDI2KS5zdHJpbmcoZS51cmwpLHZvaWQgMCE9PWUuZmF2aWNvbiYmby5NZWRpYS5lbmNvZGUoZS5mYXZpY29uLG4udWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUudGh1bWJuYWlsJiZvLk1lZGlhLmVuY29kZShlLnRodW1ibmFpbCxuLnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS50eXBlJiZuLnVpbnQzMig0OCkuaW50MzIoZS50eXBlKTtmb3IoY29uc3QgciBvZiBlLmRlZXBsaW5rcyl0LkluQXBwRGVlcExpbmsuZW5jb2RlKHIsbi51aW50MzIoNTgpLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIHZvaWQgMCE9PWUuc3RpY2tlclNoYXJlTWV0YWRhdGEmJnQuU3RpY2tlclNoYXJlTWV0YWRhdGEuZW5jb2RlKGUuc3RpY2tlclNoYXJlTWV0YWRhdGEsbi51aW50MzIoNjYpLmZvcmsoKSkubGRlbGltKCksXCIwXCIhPT1lLmludmFsaWRBZnRlck1pbGxpcyYmbi51aW50MzIoNzIpLnVpbnQ2NChlLmludmFsaWRBZnRlck1pbGxpcyksXCJcIiE9PWUuaHRtbCYmbi51aW50MzIoODIpLnN0cmluZyhlLmh0bWwpLFwiMFwiIT09ZS5odG1sSGVpZ2h0JiZuLnVpbnQzMig4OCkudWludDY0KGUuaHRtbEhlaWdodCksXCIwXCIhPT1lLmh0bWxXaWR0aCYmbi51aW50MzIoOTYpLnVpbnQ2NChlLmh0bWxXaWR0aCksXCJcIiE9PWUuaHRtbFRodW1ibmFpbCYmbi51aW50MzIoMTA2KS5zdHJpbmcoZS5odG1sVGh1bWJuYWlsKSxufSxkZWNvZGUoZSxuKXtjb25zdCByPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IGk9dm9pZCAwPT09bj9yLmxlbjpyLnBvcytuO2NvbnN0IGM9e3RpdGxlOlwiXCIsc3VidGl0bGU6XCJcIix1cmw6XCJcIixmYXZpY29uOnZvaWQgMCx0aHVtYm5haWw6dm9pZCAwLHR5cGU6MCxkZWVwbGlua3M6W10sc3RpY2tlclNoYXJlTWV0YWRhdGE6dm9pZCAwLGludmFsaWRBZnRlck1pbGxpczpcIjBcIixodG1sOlwiXCIsaHRtbEhlaWdodDpcIjBcIixodG1sV2lkdGg6XCIwXCIsaHRtbFRodW1ibmFpbDpcIlwifTtmb3IoO3IucG9zPGk7KXtjb25zdCBlPXIudWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6Yy50aXRsZT1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMjpjLnN1YnRpdGxlPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmMudXJsPXIuc3RyaW5nKCk7YnJlYWs7Y2FzZSA0OmMuZmF2aWNvbj1vLk1lZGlhLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgNTpjLnRodW1ibmFpbD1vLk1lZGlhLmRlY29kZShyLHIudWludDMyKCkpO2JyZWFrO2Nhc2UgNjpjLnR5cGU9ci5pbnQzMigpO2JyZWFrO2Nhc2UgNzpjLmRlZXBsaW5rcy5wdXNoKHQuSW5BcHBEZWVwTGluay5kZWNvZGUocixyLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSA4OmMuc3RpY2tlclNoYXJlTWV0YWRhdGE9dC5TdGlja2VyU2hhcmVNZXRhZGF0YS5kZWNvZGUocixyLnVpbnQzMigpKTticmVhaztjYXNlIDk6Yy5pbnZhbGlkQWZ0ZXJNaWxsaXM9cyhyLnVpbnQ2NCgpKTticmVhaztjYXNlIDEwOmMuaHRtbD1yLnN0cmluZygpO2JyZWFrO2Nhc2UgMTE6Yy5odG1sSGVpZ2h0PXMoci51aW50NjQoKSk7YnJlYWs7Y2FzZSAxMjpjLmh0bWxXaWR0aD1zKHIudWludDY0KCkpO2JyZWFrO2Nhc2UgMTM6Yy5odG1sVGh1bWJuYWlsPXIuc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpyLnNraXBUeXBlKDcmZSl9fXJldHVybiBjfSxmcm9tUGFydGlhbChlKXtjb25zdCBuPXt0aXRsZTpcIlwiLHN1YnRpdGxlOlwiXCIsdXJsOlwiXCIsZmF2aWNvbjp2b2lkIDAsdGh1bWJuYWlsOnZvaWQgMCx0eXBlOjAsZGVlcGxpbmtzOltdLHN0aWNrZXJTaGFyZU1ldGFkYXRhOnZvaWQgMCxpbnZhbGlkQWZ0ZXJNaWxsaXM6XCIwXCIsaHRtbDpcIlwiLGh0bWxIZWlnaHQ6XCIwXCIsaHRtbFdpZHRoOlwiMFwiLGh0bWxUaHVtYm5haWw6XCJcIn07cmV0dXJuIG4udGl0bGU9ZS50aXRsZT8/XCJcIixuLnN1YnRpdGxlPWUuc3VidGl0bGU/P1wiXCIsbi51cmw9ZS51cmw/P1wiXCIsbi5mYXZpY29uPXZvaWQgMCE9PWUuZmF2aWNvbiYmbnVsbCE9PWUuZmF2aWNvbj9vLk1lZGlhLmZyb21QYXJ0aWFsKGUuZmF2aWNvbik6dm9pZCAwLG4udGh1bWJuYWlsPXZvaWQgMCE9PWUudGh1bWJuYWlsJiZudWxsIT09ZS50aHVtYm5haWw/by5NZWRpYS5mcm9tUGFydGlhbChlLnRodW1ibmFpbCk6dm9pZCAwLG4udHlwZT1lLnR5cGU/PzAsbi5kZWVwbGlua3M9ZS5kZWVwbGlua3M/Lm1hcCgoZT0+dC5JbkFwcERlZXBMaW5rLmZyb21QYXJ0aWFsKGUpKSl8fFtdLG4uc3RpY2tlclNoYXJlTWV0YWRhdGE9dm9pZCAwIT09ZS5zdGlja2VyU2hhcmVNZXRhZGF0YSYmbnVsbCE9PWUuc3RpY2tlclNoYXJlTWV0YWRhdGE/dC5TdGlja2VyU2hhcmVNZXRhZGF0YS5mcm9tUGFydGlhbChlLnN0aWNrZXJTaGFyZU1ldGFkYXRhKTp2b2lkIDAsbi5pbnZhbGlkQWZ0ZXJNaWxsaXM9ZS5pbnZhbGlkQWZ0ZXJNaWxsaXM/P1wiMFwiLG4uaHRtbD1lLmh0bWw/P1wiXCIsbi5odG1sSGVpZ2h0PWUuaHRtbEhlaWdodD8/XCIwXCIsbi5odG1sV2lkdGg9ZS5odG1sV2lkdGg/P1wiMFwiLG4uaHRtbFRodW1ibmFpbD1lLmh0bWxUaHVtYm5haWw/P1wiXCIsbn19LHQuSW5BcHBEZWVwTGluaz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnRleHQmJnQudWludDMyKDEwKS5zdHJpbmcoZS50ZXh0KSx2b2lkIDAhPT1lLmljb24mJm8uTWVkaWEuZW5jb2RlKGUuaWNvbix0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSxcIlwiIT09ZS5kZWVwTGlua1VybCYmdC51aW50MzIoMjYpLnN0cmluZyhlLmRlZXBMaW5rVXJsKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3RleHQ6XCJcIixpY29uOnZvaWQgMCxkZWVwTGlua1VybDpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS50ZXh0PW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkuaWNvbj1vLk1lZGlhLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMzppLmRlZXBMaW5rVXJsPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PXt0ZXh0OlwiXCIsaWNvbjp2b2lkIDAsZGVlcExpbmtVcmw6XCJcIn07cmV0dXJuIHQudGV4dD1lLnRleHQ/P1wiXCIsdC5pY29uPXZvaWQgMCE9PWUuaWNvbiYmbnVsbCE9PWUuaWNvbj9vLk1lZGlhLmZyb21QYXJ0aWFsKGUuaWNvbik6dm9pZCAwLHQuZGVlcExpbmtVcmw9ZS5kZWVwTGlua1VybD8/XCJcIix0fX0sdC5TdGlja2VyU2hhcmVNZXRhZGF0YT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTphLmRlZmF1bHQuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmFwcElkJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUuYXBwSWQpLFwiXCIhPT1lLnB1Ymxpc2hlcklkJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUucHVibGlzaGVySWQpLHZvaWQgMCE9PWUuc3RpY2tlciYmby5NZWRpYS5lbmNvZGUoZS5zdGlja2VyLHQudWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLCEwPT09ZS5zdXBwcmVzc1N0aWNrZXImJnQudWludDMyKDMyKS5ib29sKGUuc3VwcHJlc3NTdGlja2VyKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBhLmRlZmF1bHQuUmVhZGVyP2U6bmV3IGEuZGVmYXVsdC5SZWFkZXIoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2FwcElkOlwiXCIscHVibGlzaGVySWQ6XCJcIixzdGlja2VyOnZvaWQgMCxzdXBwcmVzc1N0aWNrZXI6ITF9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmFwcElkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkucHVibGlzaGVySWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDM6aS5zdGlja2VyPW8uTWVkaWEuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSA0Omkuc3VwcHJlc3NTdGlja2VyPW4uYm9vbCgpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17YXBwSWQ6XCJcIixwdWJsaXNoZXJJZDpcIlwiLHN0aWNrZXI6dm9pZCAwLHN1cHByZXNzU3RpY2tlcjohMX07cmV0dXJuIHQuYXBwSWQ9ZS5hcHBJZD8/XCJcIix0LnB1Ymxpc2hlcklkPWUucHVibGlzaGVySWQ/P1wiXCIsdC5zdGlja2VyPXZvaWQgMCE9PWUuc3RpY2tlciYmbnVsbCE9PWUuc3RpY2tlcj9vLk1lZGlhLmZyb21QYXJ0aWFsKGUuc3RpY2tlcik6dm9pZCAwLHQuc3VwcHJlc3NTdGlja2VyPWUuc3VwcHJlc3NTdGlja2VyPz8hMSx0fX0sYS5kZWZhdWx0LnV0aWwuTG9uZyE9PWkuZGVmYXVsdCYmKGEuZGVmYXVsdC51dGlsLkxvbmc9aS5kZWZhdWx0LGEuZGVmYXVsdC5jb25maWd1cmUoKSl9LDM2NzExOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO2kmJiEoXCJnZXRcImluIGk/IXQuX19lc01vZHVsZTppLndyaXRhYmxlfHxpLmNvbmZpZ3VyYWJsZSl8fChpPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsaSl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLGk9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLGkobig2NjM5MiksdCl9LDY2MzkyOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUxvY2FsZT12b2lkIDA7Y29uc3Qgcj1uKDY3Mjk0KSxpPW4oMzI1MTIpLG89big3MDE5Nyk7dC51c2VMb2NhbGU9ZnVuY3Rpb24oZSl7Y29uc3R7ZGVmYXVsdExvY2FsZTp0LGRlZmF1bHRNZXNzYWdlczpuLGxvYWRNZXNzYWdlczphLHNraXBSZWRpcmVjdFRvTG9jYWxlVXJsOnN9PWU/P3t9LFtjLGxdPSgwLHIudXNlU3RhdGUpKCgoKT0+KHtsb2NhbGU6KDAsby5nZXRMb2NhbGUpKHQpLG1lc3NhZ2VzOm59KSkpLHU9KDAsci51c2VSZWYpKCEwKTsoMCxyLnVzZUVmZmVjdCkoKCgpPT4odS5jdXJyZW50PSEwLCgpPT57dS5jdXJyZW50PSExfSkpLFtdKTtjb25zdCBkPSgwLHIudXNlQ2FsbGJhY2spKChlPT57bCgodD0+KHsuLi50LGxvY2FsZTplfSkpKSwoMCxpLnByaW50V2FybmluZykoZSksYT8uKGUpLnRoZW4oKGU9Pnt1LmN1cnJlbnQmJmwoKHQ9Pih7Li4udCxtZXNzYWdlczplfSkpKX0pKX0pLFthXSk7cmV0dXJuKDAsci51c2VFZmZlY3QpKCgoKT0+e2QoKDAsby5nZXRMb2NhbGUpKHQpKX0pLFt0LGRdKSx7Li4uYyxjaGFuZ2VMb2NhbGU6KDAsci51c2VDYWxsYmFjaykoKGU9PntzP2QoKDAsby5nZXRMb2NhbGUpKGUpKTpmdW5jdGlvbihlKXtjb25zdCB0PW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpLG49bmV3IFVSTFNlYXJjaFBhcmFtcyh0LnNlYXJjaCk7bi5zZXQoXCJsb2NhbGVcIixlKSx0LnNlYXJjaD1uLnRvU3RyaW5nKCksd2luZG93LmxvY2F0aW9uLnJlcGxhY2UodCl9KGUpfSksW2Qsc10pfX19LDkxMTMyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09ciYmKHI9bik7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pO2kmJiEoXCJnZXRcImluIGk/IXQuX19lc01vZHVsZTppLndyaXRhYmxlfHxpLmNvbmZpZ3VyYWJsZSl8fChpPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsaSl9OmZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPW4pLGVbcl09dFtuXX0pLGk9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8cih0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTGFuZ3VhZ2VEaXJlY3Rpb249dC5Mb2NhbGU9dC5SVExfTE9DQUxFUz10LkFMTF9MT0NBTEVTPXQuREVGQVVMVF9MT0NBTEU9dm9pZCAwLGkobigzNjcxMSksdCk7dmFyIG89big5NjI2Myk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJERUZBVUxUX0xPQ0FMRVwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLkRFRkFVTFRfTE9DQUxFfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiQUxMX0xPQ0FMRVNcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5BTExfTE9DQUxFU319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIlJUTF9MT0NBTEVTXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uUlRMX0xPQ0FMRVN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJMb2NhbGVcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5Mb2NhbGV9fSk7dmFyIGE9big1OTQxNCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJMYW5ndWFnZURpcmVjdGlvblwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLkxhbmd1YWdlRGlyZWN0aW9ufX0pLGkobig3MDE5NyksdCksaShuKDUyMTkzKSx0KSxpKG4oODQzNzEpLHQpfSw5NjI2MzooZSx0KT0+e3ZhciBuLHI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5ERUZBVUxUX0xPQ0FMRT10LlJUTF9MT0NBTEVTPXQuQUxMX0xPQ0FMRVM9dC5MQU5HVUFHRV9UT19ERUZBVUxUX0xPQ0FMRT10LkFMVEVSTkFURV9MT0NBTEVfQ09ERVM9dC5MYW5ndWFnZUNvZGU9dC5Mb2NhbGU9dm9pZCAwLGZ1bmN0aW9uKGUpe2UuYXI9XCJhclwiLGUuYXJBUj1cImFyLUFSXCIsZS5ibkJEPVwiYm4tQkRcIixlLmJuSU49XCJibi1JTlwiLGUuZGFESz1cImRhLURLXCIsZS5kZURFPVwiZGUtREVcIixlLmVsR1I9XCJlbC1HUlwiLGUuZW5HQj1cImVuLUdCXCIsZS5lblVTPVwiZW4tVVNcIixlLmVzPVwiZXNcIixlLmVzQVI9XCJlcy1BUlwiLGUuZXNFUz1cImVzLUVTXCIsZS5lc01YPVwiZXMtTVhcIixlLmZpRkk9XCJmaS1GSVwiLGUuZmlsUEg9XCJmaWwtUEhcIixlLmZyRlI9XCJmci1GUlwiLGUuZ3VJTj1cImd1LUlOXCIsZS5oaUlOPVwiaGktSU5cIixlLmlkSUQ9XCJpZC1JRFwiLGUuaXRJVD1cIml0LUlUXCIsZS5qYUpQPVwiamEtSlBcIixlLmtuSU49XCJrbi1JTlwiLGUua29LUj1cImtvLUtSXCIsZS5tbElOPVwibWwtSU5cIixlLm1ySU49XCJtci1JTlwiLGUubXNNWT1cIm1zLU1ZXCIsZS5uYk5PPVwibmItTk9cIixlLm5sTkw9XCJubC1OTFwiLGUucGE9XCJwYVwiLGUucGxQTD1cInBsLVBMXCIsZS5wdEJSPVwicHQtQlJcIixlLnB0UFQ9XCJwdC1QVFwiLGUucm9STz1cInJvLVJPXCIsZS5ydVJVPVwicnUtUlVcIixlLnN2U0U9XCJzdi1TRVwiLGUudGFJTj1cInRhLUlOXCIsZS50ZUlOPVwidGUtSU5cIixlLnRoVEg9XCJ0aC1USFwiLGUudHJUUj1cInRyLVRSXCIsZS51clBLPVwidXItUEtcIixlLnZpVk49XCJ2aS1WTlwiLGUuemhIYW5zPVwiemgtSGFuc1wiLGUuemhIYW50PVwiemgtSGFudFwiLGUuZW5QTE9DPVwiZW4tUExPQ1wifShuPXQuTG9jYWxlfHwodC5Mb2NhbGU9e30pKSxmdW5jdGlvbihlKXtlLmFyPVwiYXJcIixlLmJuPVwiYm5cIixlLmRhPVwiZGFcIixlLmRlPVwiZGVcIixlLmVsPVwiZWxcIixlLmVuPVwiZW5cIixlLmVzPVwiZXNcIixlLmZpPVwiZmlcIixlLmZpbD1cImZpbFwiLGUuZnI9XCJmclwiLGUuZ3U9XCJndVwiLGUuaGk9XCJoaVwiLGUuaWQ9XCJpZFwiLGUuaXQ9XCJpdFwiLGUuamE9XCJqYVwiLGUua249XCJrblwiLGUua289XCJrb1wiLGUubWw9XCJtbFwiLGUubXI9XCJtclwiLGUubXM9XCJtc1wiLGUubmI9XCJuYlwiLGUubmw9XCJubFwiLGUucGw9XCJwbFwiLGUucHQ9XCJwdFwiLGUucm89XCJyb1wiLGUucnU9XCJydVwiLGUuc3Y9XCJzdlwiLGUudGE9XCJ0YVwiLGUudGU9XCJ0ZVwiLGUudGg9XCJ0aFwiLGUudHI9XCJ0clwiLGUudXI9XCJ1clwiLGUudmk9XCJ2aVwiLGUuemg9XCJ6aFwifShyPXQuTGFuZ3VhZ2VDb2RlfHwodC5MYW5ndWFnZUNvZGU9e30pKSx0LkFMVEVSTkFURV9MT0NBTEVfQ09ERVM9e1tuLnpoSGFudF06W1wiemgtVFdcIl0sW24uemhIYW5zXTpbXCJ6aC1DTlwiXX0sdC5MQU5HVUFHRV9UT19ERUZBVUxUX0xPQ0FMRT17W3IuYXJdOm4uYXJBUixbci5ibl06bi5ibkJELFtyLmRhXTpuLmRhREssW3IuZGVdOm4uZGVERSxbci5lbF06bi5lbEdSLFtyLmVuXTpuLmVuVVMsW3IuZXNdOm4uZXNFUyxbci5maV06bi5maUZJLFtyLmZpbF06bi5maWxQSCxbci5mcl06bi5mckZSLFtyLmd1XTpuLmd1SU4sW3IuaGldOm4uaGlJTixbci5pZF06bi5pZElELFtyLml0XTpuLml0SVQsW3IuamFdOm4uamFKUCxbci5rbl06bi5rbklOLFtyLmtvXTpuLmtvS1IsW3IubWxdOm4ubWxJTixbci5tcl06bi5tcklOLFtyLm1zXTpuLm1zTVksW3IubmJdOm4ubmJOTyxbci5ubF06bi5ubE5MLFtyLnBsXTpuLnBsUEwsW3IucHRdOm4ucHRCUixbci5yb106bi5yb1JPLFtyLnJ1XTpuLnJ1UlUsW3Iuc3ZdOm4uc3ZTRSxbci50YV06bi50YUlOLFtyLnRlXTpuLnRlSU4sW3IudGhdOm4udGhUSCxbci50cl06bi50clRSLFtyLnVyXTpuLnVyUEssW3IudmldOm4udmlWTixbci56aF06bi56aEhhbnN9LHQuQUxMX0xPQ0FMRVM9W24uYXIsbi5hckFSLG4uYm5CRCxuLmJuSU4sbi5kYURLLG4uZGVERSxuLmVsR1Isbi5lbkdCLG4uZW5VUyxuLmVzLG4uZXNBUixuLmVzRVMsbi5lc01YLG4uZmlGSSxuLmZpbFBILG4uZnJGUixuLmd1SU4sbi5oaUlOLG4uaWRJRCxuLml0SVQsbi5qYUpQLG4ua25JTixuLmtvS1Isbi5tbElOLG4ubXJJTixuLm1zTVksbi5uYk5PLG4ubmxOTCxuLnBhLG4ucGxQTCxuLnB0QlIsbi5wdFBULG4ucm9STyxuLnJ1UlUsbi5zdlNFLG4udGFJTixuLnRlSU4sbi50aFRILG4udHJUUixuLnVyUEssbi52aVZOLG4uemhIYW5zLG4uemhIYW50XSx0LlJUTF9MT0NBTEVTPVtuLmFyLG4uYXJBUixuLnVyUEtdLHQuREVGQVVMVF9MT0NBTEU9bi5lblVTfSw1OTQxNDooZSx0KT0+e3ZhciBuO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTGFuZ3VhZ2VEaXJlY3Rpb249dm9pZCAwLChuPXQuTGFuZ3VhZ2VEaXJlY3Rpb258fCh0Lkxhbmd1YWdlRGlyZWN0aW9uPXt9KSkuQVVUTz1cImF1dG9cIixuLkxUUj1cImx0clwiLG4uUlRMPVwicnRsXCJ9LDUyMTkzOihlLHQsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmdldERpcmVjdGlvbkZvckxvY2FsZT10LmdldENvdW50cnlGcm9tTG9jYWxlPXZvaWQgMDtjb25zdCByPW4oOTYyNjMpLGk9big1OTQxNCk7dC5nZXRDb3VudHJ5RnJvbUxvY2FsZT1lPT5lPT09ci5Mb2NhbGUuZW5QTE9DP1wiVVNcIjplPT09ci5Mb2NhbGUucGE/XCJJTlwiOjI9PT1lLmxlbmd0aD9lLnRvVXBwZXJDYXNlKCk6ZT09PXIuTG9jYWxlLnpoSGFuc3x8ZT09PXIuTG9jYWxlLnpoSGFudD9cIkNOXCI6ZS5zcGxpdCgvWy1fXS8pWzFdLHQuZ2V0RGlyZWN0aW9uRm9yTG9jYWxlPWU9PnIuUlRMX0xPQ0FMRVMuaW5jbHVkZXMoZSk/aS5MYW5ndWFnZURpcmVjdGlvbi5SVEw6aS5MYW5ndWFnZURpcmVjdGlvbi5MVFJ9LDcwMTk3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmxvY2FsZXNUb1N0cmluZ0Fycj10LmdldExhbmd1YWdlQ29kZT10LmdldFNlcnZlckxvY2FsZT10LmdldExvY2FsZUZyb21Db29raWU9dC5nZXRMb2NhbGVGcm9tQWNjZXB0TGFuZz10LmdldExvY2FsZT10LmZvcm1hdExvY2FsZT10LlNDX0NPT0tJRV9LRVlfTE9DQUxFPXZvaWQgMDtjb25zdCBpPXIobig4MjQ5NikpLG89cihuKDEwNjQ2KSksYT1yKG4oNzY0ODkpKSxzPW4oOTYyNjMpO3QuU0NfQ09PS0lFX0tFWV9MT0NBTEU9XCJzYy1sYW5ndWFnZVwiO2NvbnN0IGM9L1stX10vLGw9ZT0+e2Zvcihjb25zdCB0IGluIHMuQUxURVJOQVRFX0xPQ0FMRV9DT0RFUylpZihCb29sZWFuKHMuQUxURVJOQVRFX0xPQ0FMRV9DT0RFU1t0XT8uZmluZCgodD0+ZS50b0xvd2VyQ2FzZSgpPT09dC50b0xvd2VyQ2FzZSgpKSkpKXJldHVybiB0fTt0LmZvcm1hdExvY2FsZT1lPT57Y29uc3RbdCxuXT1lLnNwbGl0KGMpLHI9bj9gJHt0fS0ke24udG9VcHBlckNhc2UoKX1gOnQ7bGV0IGk9cy5BTExfTE9DQUxFUy5maW5kKChlPT5lLnRvTG93ZXJDYXNlKCk9PT1yLnRvTG93ZXJDYXNlKCkpKTtyZXR1cm4gaXx8KGk9bChyKSxpfHwodCBpbiBzLkxhbmd1YWdlQ29kZT9zLkxBTkdVQUdFX1RPX0RFRkFVTFRfTE9DQUxFW3RdOm51bGwpKX0sdC5nZXRMb2NhbGU9ZT0+e2NvbnN0IG49ZnVuY3Rpb24oZSl7aWYoZSlyZXR1cm4gZTtjb25zdCBuPVwidW5kZWZpbmVkXCI9PXR5cGVvZiB3aW5kb3c/bnVsbDpuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldChcImxvY2FsZVwiKTtpZihuKXJldHVybiBuO3JldHVybiBvLmRlZmF1bHQuZ2V0KHQuU0NfQ09PS0lFX0tFWV9MT0NBTEUpfHwoKCk9PntpZihcInVuZGVmaW5lZFwiPT10eXBlb2Ygd2luZG93KXJldHVybiBudWxsO2NvbnN0IGU9d2luZG93Lm5hdmlnYXRvcix0PVtcImxhbmd1YWdlXCIsXCJicm93c2VyTGFuZ3VhZ2VcIixcInN5c3RlbUxhbmd1YWdlXCIsXCJ1c2VyTGFuZ3VhZ2VcIl07bGV0IG4scjtpZihBcnJheS5pc0FycmF5KGUubGFuZ3VhZ2VzKSlmb3Iobj0wO248ZS5sYW5ndWFnZXMubGVuZ3RoO24rKylpZihyPWUubGFuZ3VhZ2VzW25dLHI/Lmxlbmd0aClyZXR1cm4gcjtmb3Iobj0wO248dC5sZW5ndGg7bisrKWlmKHI9ZVt0W25dXSxyPy5sZW5ndGgpcmV0dXJuIHI7cmV0dXJuIG51bGx9KSgpfHxzLkRFRkFVTFRfTE9DQUxFfShlKTtyZXR1cm4oMCx0LmZvcm1hdExvY2FsZSkobil8fHMuREVGQVVMVF9MT0NBTEV9LHQuZ2V0TG9jYWxlRnJvbUFjY2VwdExhbmc9ZT0+e2lmKCFlKXJldHVybiBudWxsO2NvbnN0IHQ9aS5kZWZhdWx0LnBhcnNlKGUpO2Zvcihjb25zdCBlIG9mIHQpe2NvbnN0e2NvZGU6dCxyZWdpb246bn09ZSxyPW4/YCR7dH0tJHtufWA6dDtpZihPYmplY3QudmFsdWVzKHMuTG9jYWxlKS5pbmNsdWRlcyhyKSlyZXR1cm4gcjtjb25zdCBpPWwocik7aWYoaSlyZXR1cm4gaTtpZihPYmplY3Qua2V5cyhzLkxhbmd1YWdlQ29kZSkuaW5jbHVkZXMoZS5jb2RlKSlyZXR1cm4gcy5MQU5HVUFHRV9UT19ERUZBVUxUX0xPQ0FMRVtlLmNvZGVdfXJldHVybiBudWxsfSx0LmdldExvY2FsZUZyb21Db29raWU9ZT0+e2NvbnN0IG49YS5kZWZhdWx0LnBhcnNlKGUpO3JldHVybiBuW3QuU0NfQ09PS0lFX0tFWV9MT0NBTEVdPygwLHQuZm9ybWF0TG9jYWxlKShuW3QuU0NfQ09PS0lFX0tFWV9MT0NBTEVdKTp2b2lkIDB9LHQuZ2V0U2VydmVyTG9jYWxlPWU9PntpZighZSlyZXR1cm4gbnVsbDtjb25zdCBuPW5ldyBVUkxTZWFyY2hQYXJhbXMoZS51cmw/LnJlcGxhY2UoL15cXC8uKlxcPy9nLFwiXCIpKS5nZXQoXCJsb2NhbGVcIik7aWYobilyZXR1cm4oMCx0LmZvcm1hdExvY2FsZSkobik7Y29uc3Qgcj0oMCx0LmdldExvY2FsZUZyb21Db29raWUpKGUuaGVhZGVycy5jb29raWV8fFwiXCIpO2lmKHIpcmV0dXJuKDAsdC5mb3JtYXRMb2NhbGUpKHIpO2NvbnN0IGk9KDAsdC5nZXRMb2NhbGVGcm9tQWNjZXB0TGFuZykoZS5oZWFkZXJzW1wiYWNjZXB0LWxhbmd1YWdlXCJdKTtyZXR1cm4gaT8oMCx0LmZvcm1hdExvY2FsZSkoaSk6bnVsbH0sdC5nZXRMYW5ndWFnZUNvZGU9ZnVuY3Rpb24oKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06KDAsdC5nZXRMb2NhbGUpKCk7Y29uc3Rbbl09ZS5zcGxpdChjKTtyZXR1cm4gbn0sdC5sb2NhbGVzVG9TdHJpbmdBcnI9ZT0+T2JqZWN0LnZhbHVlcyhlKS5tYXAoKGU9PmUudG9TdHJpbmcoKSkpfSw4NDM3MTooZSx0LG4pPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5zZXRTQ0xhbmd1YWdlQ29va2llSGVhZGVyPXQuaGFzTG9jYWxlPXZvaWQgMDtjb25zdCByPW4oOTYyNjMpLGk9big3MDE5Nyksbz1uKDc2NDg5KTtmdW5jdGlvbiBhKGUpe2NvbnN0IHQ9bmV3IFVSTChlLnVybD8/XCJcIixcImh0dHBzOi8vd3d3LnNuYXBjaGF0LmNvbVwiKSxuPXQuc2VhcmNoUGFyYW1zLmdldChcImxvY2FsZVwiKSxvPXQucGF0aG5hbWUuc3BsaXQoXCIvXCIpLmZpbHRlcihCb29sZWFuKSxhPXIuQUxMX0xPQ0FMRVMuaW5jbHVkZXMob1swXSk/b1swXTp2b2lkIDAscz0oMCxpLmdldExvY2FsZUZyb21Db29raWUpKGUuaGVhZGVycy5jb29raWU/P1wiXCIpLGM9cz8oMCxpLmZvcm1hdExvY2FsZSkocyk6dm9pZCAwO3JldHVybiBCb29sZWFuKG58fGF8fGMpfXQuaGFzTG9jYWxlPWEsdC5zZXRTQ0xhbmd1YWdlQ29va2llSGVhZGVyPWZ1bmN0aW9uKGUsdCl7aWYoYShlKSlyZXR1cm47Y29uc3Qgbj1lLmhlYWRlcnNbXCJhY2NlcHQtbGFuZ3VhZ2VcIl0/P1wiXCIscz0oMCxpLmdldExvY2FsZUZyb21BY2NlcHRMYW5nKShuKT8/ci5Mb2NhbGUuZW5VUyxjPW5ldyBEYXRlO2Muc2V0RnVsbFllYXIoYy5nZXRGdWxsWWVhcigpKzEpO2NvbnN0IGw9KDAsby5zZXJpYWxpemUpKGkuU0NfQ09PS0lFX0tFWV9MT0NBTEUscyx7ZG9tYWluOlwiLnNuYXBjaGF0LmNvbVwiLGV4cGlyZXM6YyxwYXRoOlwiL1wiLHNlY3VyZTohMCxodHRwT25seTohMX0pO3Quc2V0SGVhZGVyKFwiU2V0LUNvb2tpZVwiLGwpfX0sNzU0OTQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlUGFnZUxvYWRNZXRyaWNzPXZvaWQgMDtjb25zdCBpPXIobig0NTM2MykpLG89big2NzI5NCksYT1uKDgyMTMxKSxzPW4oMjEwOTkpO3QudXNlUGFnZUxvYWRNZXRyaWNzPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj0oMCxvLnVzZVJlZikoe30pO3JldHVybigwLG8udXNlRWZmZWN0KSgoKCk9PntpLmRlZmF1bHQuaXNSZWFkeSgpLGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihuKXt0LmN1cnJlbnRbbi5uYW1lXT1uLnZhbHVlLGZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1lLm5hbWUscj1NYXRoLnJvdW5kKGUudmFsdWUpO2kuZGVmYXVsdC5hZGRUaW1lcih7bWV0cmljc05hbWU6XCJwYWdlX2xvYWRfXCIrbixtaWxsaVNlYzpyLGRpbWVuc2lvbnM6e3BhZ2VJZDp0fX0pfShuLGUpfSgwLGEuZ2V0Q0xTKShuKSwoMCxhLmdldEZJRCkobiksKDAsYS5nZXRGQ1ApKG4pLCgwLGEuZ2V0TENQKShuKSwoMCxhLmdldFRURkIpKG4pfShlLG4pLCgwLHMuc3VwcGxlbWVudFdlYlZpdGFscykoZSx0KX0pKSxufX0sMjEwOTk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuc3VwcGxlbWVudFdlYlZpdGFscz12b2lkIDA7Y29uc3QgaT1yKG4oNDUzNjMpKTtmdW5jdGlvbiBvKGUsdCl7c2V0VGltZW91dCgoKCk9Pntjb25zdHtuYXZpZ2F0aW9uU3RhcnQ6bixsb2FkRXZlbnRTdGFydDpyLGxvYWRFdmVudEVuZDpvLHJlcXVlc3RTdGFydDphLHJlc3BvbnNlU3RhcnQ6cyxyZXNwb25zZUVuZDpjLGRvbUludGVyYWN0aXZlOmwsZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQ6dSxkb21Db250ZW50TG9hZGVkRXZlbnRFbmQ6ZH09d2luZG93LnBlcmZvcm1hbmNlLnRpbWluZyxmPWU9PntpLmRlZmF1bHQuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpgbWlzc2luZ05hdmlnYXRpb25UaW1pbmcuJHtlfWB9KX0scD0obixyKT0+e2NvbnN0IG89YCR7dH0uYnlQYWdlLiR7ZX0uYnlOYXZpZ2F0aW9uLiR7bn1gO2kuZGVmYXVsdC5hZGRUaW1lcih7bWV0cmljc05hbWU6byxtaWxsaVNlYzpyfSl9O3J8fGYoXCJsb2FkRXZlbnRTdGFydFwiKSxvfHxmKFwibG9hZEV2ZW50RW5kXCIpLG58fGYoXCJuYXZpZ2F0aW9uU3RhcnRcIiksYXx8ZihcInJlcXVlc3RTdGFydFwiKSxzfHxmKFwicmVzcG9uc2VTdGFydFwiKSxjfHxmKFwicmVzcG9uc2VFbmRcIiksbHx8ZihcImRvbUludGVyYWN0aXZlXCIpLHV8fGYoXCJkb21Db250ZW50TG9hZGVkRXZlbnRTdGFydFwiKSxkfHxmKFwiZG9tQ29udGVudExvYWRlZEV2ZW50RW5kXCIpLGEmJm4mJnAoXCJuYXZpZ2F0aW9uU3RhcnRUb1JlcXVlc3RTdGFydFwiLGEtbiksYSYmcyYmcChcInJlcXVlc3RTdGFydFRvUmVzcG9uc2VTdGFydFwiLHMtYSkscyYmYyYmcChcInJlc3BvbnNlU3RhcnRUb1Jlc3BvbnNlRW5kXCIsYy1zKSxuJiZjJiZwKFwibmF2aWdhdGlvblN0YXJ0VG9SZXNwb25zZUVuZFwiLGMtbiksbCYmcyYmcChcInJlc3BvbnNlU3RhcnRUb0ludGVyYWN0aXZlXCIsbC1zKSxsJiZuJiZwKFwibmF2aWdhdGlvblN0YXJ0VG9JbnRlcmFjdGl2ZVwiLGwtbiksZCYmdSYmcChcImRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0VG9FbmRcIixkLXUpLHImJm8mJnAoXCJsb2FkRXZlbnRTdGFydFRvRW5kXCIsby1yKSxpLmRlZmF1bHQuZmx1c2goKX0pLDApfXQuc3VwcGxlbWVudFdlYlZpdGFscz1mdW5jdGlvbihlLHQpe1wiY29tcGxldGVcIj09PWRvY3VtZW50LnJlYWR5U3RhdGU/byhlLHQpOndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCgoKT0+e28oZSx0KX0pKX19LDYyOTc5OihlLHQsbik9PntuLmQodCx7WjooKT0+RFd9KTt2YXIgcixpLG89big5MzY1MCksYT1mdW5jdGlvbihlLHQpe3JldHVybiBhPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJihlW25dPXRbbl0pfSxhKGUsdCl9LHM9ZnVuY3Rpb24oKXtyZXR1cm4gcz1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQsbj0xLHI9YXJndW1lbnRzLmxlbmd0aDtuPHI7bisrKWZvcih2YXIgaSBpbiB0PWFyZ3VtZW50c1tuXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxpKSYmKGVbaV09dFtpXSk7cmV0dXJuIGV9LHMuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxjPW4oNzEzNzEpLGw9big1ODgyNiksdT1uKDEyMzQzKSxkPShuKDg2NzkpLG4oNjcyOTQpKSxmPVwidW5kZWZpbmVkXCI9PXR5cGVvZiBfX1NFTlRSWV9ERUJVR19ffHxfX1NFTlRSWV9ERUJVR19fLHA9e2NvbXBvbmVudFN0YWNrOm51bGwsZXJyb3I6bnVsbCxldmVudElkOm51bGx9LG09ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciB0PW51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gdC5zdGF0ZT1wLHQucmVzZXRFcnJvckJvdW5kYXJ5PWZ1bmN0aW9uKCl7dmFyIGU9dC5wcm9wcy5vblJlc2V0LG49dC5zdGF0ZSxyPW4uZXJyb3IsaT1uLmNvbXBvbmVudFN0YWNrLG89bi5ldmVudElkO2UmJmUocixpLG8pLHQuc2V0U3RhdGUocCl9LHR9cmV0dXJuIGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9ZX1hKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KToobi5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IG4pfSh0LGUpLHQucHJvdG90eXBlLmNvbXBvbmVudERpZENhdGNoPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPXQuY29tcG9uZW50U3RhY2ssaT10aGlzLnByb3BzLG89aS5iZWZvcmVDYXB0dXJlLGE9aS5vbkVycm9yLHU9aS5zaG93RGlhbG9nLGY9aS5kaWFsb2dPcHRpb25zOygwLGMuJGUpKChmdW5jdGlvbih0KXtpZihudWxsIT09KHA9ZC52ZXJzaW9uLm1hdGNoKC9eKFteLl0rKS8pKSYmcGFyc2VJbnQocFswXSk+PTE3KXt2YXIgaT1uZXcgRXJyb3IoZS5tZXNzYWdlKTtpLm5hbWU9XCJSZWFjdCBFcnJvckJvdW5kYXJ5IFwiK2kubmFtZSxpLnN0YWNrPXIsZS5jYXVzZT1pfXZhciBwO28mJm8odCxlLHIpO3ZhciBtPSgwLGMuVGIpKGUse2NvbnRleHRzOntyZWFjdDp7Y29tcG9uZW50U3RhY2s6cn19fSk7YSYmYShlLHIsbSksdSYmKDAsbC5qcCkocyhzKHt9LGYpLHtldmVudElkOm19KSksbi5zZXRTdGF0ZSh7ZXJyb3I6ZSxjb21wb25lbnRTdGFjazpyLGV2ZW50SWQ6bX0pfSkpfSx0LnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMub25Nb3VudDtlJiZlKCl9LHQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZSx0PWUuZXJyb3Isbj1lLmNvbXBvbmVudFN0YWNrLHI9ZS5ldmVudElkLGk9dGhpcy5wcm9wcy5vblVubW91bnQ7aSYmaSh0LG4scil9LHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5wcm9wcyxuPXQuZmFsbGJhY2sscj10LmNoaWxkcmVuLGk9dGhpcy5zdGF0ZSxvPWkuZXJyb3IsYT1pLmNvbXBvbmVudFN0YWNrLHM9aS5ldmVudElkO3JldHVybiBvPyhlPVwiZnVuY3Rpb25cIj09dHlwZW9mIG4/bih7ZXJyb3I6byxjb21wb25lbnRTdGFjazphLHJlc2V0RXJyb3I6dGhpcy5yZXNldEVycm9yQm91bmRhcnksZXZlbnRJZDpzfSk6bixkLmlzVmFsaWRFbGVtZW50KGUpP2U6KG4mJmYmJnUua2cud2FybihcImZhbGxiYWNrIGRpZCBub3QgcHJvZHVjZSBhIHZhbGlkIFJlYWN0RWxlbWVudFwiKSxudWxsKSk6XCJmdW5jdGlvblwiPT10eXBlb2Ygcj9yKCk6cn0sdH0oZC5Db21wb25lbnQpLGg9big3NTQ5NCksdj1uKDQ0MDEyKSxnPW4oODkyNTApLHk9bigxMjU5OSk7ZnVuY3Rpb24gRShlKXtsZXR7YmFzZW5hbWU6dCxjaGlsZHJlbjpuLHdpbmRvdzpyfT1lLGk9ZC51c2VSZWYoKTtudWxsPT1pLmN1cnJlbnQmJihpLmN1cnJlbnQ9KDAseS5sWCkoe3dpbmRvdzpyLHY1Q29tcGF0OiEwfSkpO2xldCBvPWkuY3VycmVudCxbYSxzXT1kLnVzZVN0YXRlKHthY3Rpb246by5hY3Rpb24sbG9jYXRpb246by5sb2NhdGlvbn0pO3JldHVybiBkLnVzZUxheW91dEVmZmVjdCgoKCk9Pm8ubGlzdGVuKHMpKSxbb10pLGQuY3JlYXRlRWxlbWVudChnLkYwLHtiYXNlbmFtZTp0LGNoaWxkcmVuOm4sbG9jYXRpb246YS5sb2NhdGlvbixuYXZpZ2F0aW9uVHlwZTphLmFjdGlvbixuYXZpZ2F0b3I6b30pfVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJnZvaWQgMCE9PXdpbmRvdy5kb2N1bWVudCYmd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQsZnVuY3Rpb24oZSl7ZS5Vc2VTY3JvbGxSZXN0b3JhdGlvbj1cInVzZVNjcm9sbFJlc3RvcmF0aW9uXCIsZS5Vc2VTdWJtaXRJbXBsPVwidXNlU3VibWl0SW1wbFwiLGUuVXNlRmV0Y2hlcj1cInVzZUZldGNoZXJcIn0ocnx8KHI9e30pKSxmdW5jdGlvbihlKXtlLlVzZUZldGNoZXJzPVwidXNlRmV0Y2hlcnNcIixlLlVzZVNjcm9sbFJlc3RvcmF0aW9uPVwidXNlU2Nyb2xsUmVzdG9yYXRpb25cIn0oaXx8KGk9e30pKTt2YXIgXz1uKDQ1NTkyKSxJPW4oMzg5NzApLFM9big0NTM2MyksYj1uLm4oUyksVD1uKDk3NzgyKSxDPW4ubihUKSxBPW4oOTExMjkpLFI9bigxMzAzNCksaz1uKDY5NzI5KSxPPW4oNzY1ODApLE49big1NjA4Myksdz1uKDM4NDg0KTtmdW5jdGlvbiBEKGUsdCl7aWYoT2JqZWN0LmlzKGUsdCkpcmV0dXJuITA7aWYoXCJvYmplY3RcIiE9dHlwZW9mIGV8fG51bGw9PT1lfHxcIm9iamVjdFwiIT10eXBlb2YgdHx8bnVsbD09PXQpcmV0dXJuITE7aWYoZSBpbnN0YW5jZW9mIE1hcCYmdCBpbnN0YW5jZW9mIE1hcCl7aWYoZS5zaXplIT09dC5zaXplKXJldHVybiExO2Zvcihjb25zdFtuLHJdb2YgZSlpZighT2JqZWN0LmlzKHIsdC5nZXQobikpKXJldHVybiExO3JldHVybiEwfWlmKGUgaW5zdGFuY2VvZiBTZXQmJnQgaW5zdGFuY2VvZiBTZXQpe2lmKGUuc2l6ZSE9PXQuc2l6ZSlyZXR1cm4hMTtmb3IoY29uc3QgbiBvZiBlKWlmKCF0LmhhcyhuKSlyZXR1cm4hMTtyZXR1cm4hMH1jb25zdCBuPU9iamVjdC5rZXlzKGUpO2lmKG4ubGVuZ3RoIT09T2JqZWN0LmtleXModCkubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgcj0wO3I8bi5sZW5ndGg7cisrKWlmKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuW3JdKXx8IU9iamVjdC5pcyhlW25bcl1dLHRbbltyXV0pKXJldHVybiExO3JldHVybiEwfXZhciBQLE09bigzMTQ0Mik7QygpLmdldExvZ2dlcihcIltDYW1lcmFLaXRMb2FkZXJdXCIpO2NvbnN0IEw9ZT0+W2UuY2FtZXJhS2l0LmNhbWVyYUtpdFNlc3Npb24sZS5jYW1lcmFLaXQuc2V0Q2FtZXJhS2l0U291cmNlLGUuY2FtZXJhS2l0LnN0YXJ0Q2FtZXJhS2l0U2Vzc2lvbixlLmNhbWVyYUtpdC5jbGllbnQsZS5tZWRpYS5sb2NhbC5jYW1lcmFSZWZzLnNpemU+MF07ZnVuY3Rpb24gVSgpe2NvbnN0e2luaXRpYWxpemVDYW1lcmFLaXQ6ZSxkZXN0cm95Q2FtZXJhS2l0OnR9PSgwLGsubykoTS5CMyxEKSxuPSgwLGsubykoUi5hNiksW3IsaSxvLGEsc109KDAsay5vKShMKSxjPSgwLGQudXNlUmVmKSgpLGw9KDAsTy5ycCkoQS5uWik7cmV0dXJuKDAsZC51c2VFZmZlY3QpKCgoKT0+eyhcInNhZmFyaVwiIT09KDAsTi5jMykoKXx8bCkmJmUoKX0pLFtlLGxdKSwoMCxkLnVzZUVmZmVjdCkoKCgpPT57IWMuY3VycmVudCYmYSYmcyYmKG8oKSxiKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcImNhbWVyYV9raXRfc3RhcnRlZF9zZXNzaW9uX2FmdGVyX2NhbWVyYV9pc19vblwifSkpLGMuY3VycmVudD1hfSksW2EscyxvXSksKDAsZC51c2VFZmZlY3QpKCgoKT0+e3ImJm4mJmkobil9KSxbcixuLGldKSwoMCxkLnVzZUVmZmVjdCkoKCgpPT4oKT0+e3QoKX0pLFt0XSksbnVsbH1mdW5jdGlvbiB4KCl7cmV0dXJuIGIoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwiY2FtZXJhS2l0LmxvYWQuZXJyb3JcIn0pLG51bGx9ZnVuY3Rpb24gRigpe3JldHVybiBQfHwoUD0oMCxvLlopKG0se2ZhbGxiYWNrOigwLG8uWikoeCx7fSl9LHZvaWQgMCwoMCxvLlopKFUse30pKSl9dmFyIEI9big5NDg4MSk7Y29uc3QgVj1lPT5lLmxvY2FsU2V0dGluZ3MuaW5pdGlhbGl6ZTtmdW5jdGlvbiBHKCl7Y29uc3QgZT0oMCxrLm8pKFYpO3JldHVybigwLEIuUnEpKGUsW1wibG9jYWxTZXR0aW5nc1dyYXBwZXJcIixlXSksbnVsbH1mdW5jdGlvbiBIKCl7Y29uc3RbZSx0LG5dPSgwLGsubykoKGU9PltlLndhc20ubW9kdWxlLGUubWVzc2FnaW5nLmluaXRpYWxpemVDbGllbnQsZS5tZXNzYWdpbmcuZGVzdHJveUNsaWVudF0pLEQpO3JldHVybiBlJiYoMCxCLlJxKSgoYXN5bmMoKT0+dCgpKSxbXCJtZXNzYWdpbmdDbGllbnRcIixlXSksKDAsZC51c2VFZmZlY3QpKCgoKT0+KCk9PntuKCl9KSxbbl0pLG51bGx9ZnVuY3Rpb24gVygpe2NvbnN0W2UsdCxuXT0oMCxrLm8pKChlPT5bZS53YXNtLm1vZHVsZSxlLnRhbGsuaW5pdGlhbGl6ZUNsaWVudCxlLnRhbGsuZGVzdHJveUNsaWVudF0pLEQpO3JldHVybiBlJiYoMCxCLlJxKSgoYXN5bmMoKT0+dChlLnJlZikpLFtcInRhbGtjb3JlXCIsZV0pLCgwLGQudXNlRWZmZWN0KSgoKCk9PigpPT57bigpfSksW25dKSxudWxsfXZhciBqPW4oNjkwOTMpLFo9big2ODc0Miksej1uKDQ0Nzg1KTtjb25zdCBLPWU9PmUuYXV0aC5mZXRjaFdob2FtaTtmdW5jdGlvbiBZKCl7Y29uc3QgZT0oMCxrLm8pKEkuZGQpLHQ9KDAsay5vKShLKSxuPSgwLGsubykoSS5pRCk7cmV0dXJuIGUmJiFuJiYoMCxCLlJxKSh0LFtcIndob2FtaVwiXSksKDAsZC51c2VFZmZlY3QpKCgoKT0+e2lmKG4pe2NvbnN0IGU9KDAsei5NYykobi5pZCk7e2NvbnN0IGU9YGxvYWQ6JHsoMCxaLkQ0KSgpfWA7KDAsYy5hdikoe2lkOmV9KX0oMCxqLkhiKSgpLnB1cmdlQWxsVXNlckRhdGEoe2V4Y2x1ZGVVc2VyOmV9KX1lbHNlKDAsYy5ZQSkoXCJ1c2VyLmlkXCIsdm9pZCAwKSwoMCxjLllBKShcInVzZXIubmFtZVwiLHZvaWQgMCl9KSxbbl0pLG51bGx9dmFyIHE9big4NTg5Myk7ZnVuY3Rpb24gWChlKXtsZXR7Y2hpbGRyZW46dH09ZTtjb25zdFtuLHIsaSxvXT0oMCxrLm8pKChlPT5bZS53YXNtLmluaXRpYWxpemUsQm9vbGVhbihlLndhc20ubW9kdWxlKSxlLndhc20uZGVzdHJveSxlLndhc20uZmF0YWxFcnJvcl0pLEQpLGE9KDAsay5vKShJLnlLKTtpZihhJiYoMCxCLlJxKSgoYXN5bmMoKT0+bihhKSksW1wid2FzbVwiLGFdKSxvKXRocm93IG5ldyBFcnJvcihcIkVuY291bnRlcmVkIGEgZmF0YWwgZXJyb3JcIik7cmV0dXJuKDAsZC51c2VFZmZlY3QpKCgoKT0+KCk9PntpKCl9KSxbaV0pLHI/KDAscS5qc3gpKHEuRnJhZ21lbnQse2NoaWxkcmVuOnR9KTpudWxsfXZhciBRPW4oODYwMTApO2xldCBKO2NvbnN0ICQ9e2FkQmxvY2tlclRlc3Q6XCJ2OHlHVlwifTtmdW5jdGlvbiBlZSgpe3JldHVybigwLGQudXNlRWZmZWN0KSgoKCk9PnsoYXN5bmMoKT0+e2NvbnN0IGU9YXdhaXQgYXN5bmMgZnVuY3Rpb24oKXtpZih2b2lkIDA9PT1KKXtjb25zdCBlPWZ1bmN0aW9uKCl7Y29uc3QgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFkQmxvY2tUZXN0SWRcIik7cmV0dXJuIWU/LmNsaWVudEhlaWdodH0oKTtKPWU/UHJvbWlzZS5yZXNvbHZlKCEwKTphc3luYyBmdW5jdGlvbigpe3RyeXtjb25zdCBlPWF3YWl0IGZldGNoKCgwLF8uWikoXCJzYWlsdGhydS5qc1wiKSk7cmV0dXJuIWUub2t8fDA9PT0oYXdhaXQgZS50ZXh0KCkpLmxlbmd0aH1jYXRjaHtyZXR1cm4hMH19KCl9cmV0dXJuIEp9KCk7YigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6YGFkYmxvY2tlcl9kZXRlY3RlZC4ke1N0cmluZyhlKX1gfSl9KSgpfSkpLCgwLG8uWikoXCJkaXZcIix7aWQ6XCJhZEJsb2NrVGVzdElkXCIsY2xhc3NOYW1lOigwLFEuWikoXCJiYW5uZXJfYWRcIiwkLmFkQmxvY2tlclRlc3QpLFwiYXJpYS1oaWRkZW5cIjohMH0pfXZhciB0ZT1uKDEyMjgpLG5lPW4oNjM2MzkpLHJlPW4oNDYzMDgpO2Z1bmN0aW9uIGllKGUpe2xldHtvblJlZnJlc2g6dCxpbW1lZGlhdGU6bixpbnRlcnZhbE1zOnIsYmFja2dyb3VuZEludGVydmFsTXM6aSxkaXNhYmxlZDpvPSExfT1lO2NvbnN0IGE9KDAsZC51c2VSZWYpKDApLHM9KDAsZC51c2VSZWYpKCk7KDAsZC51c2VFZmZlY3QpKCgoKT0+e2lmKG8pcmV0dXJuO2NvbnN0IGU9KCk9PmRvY3VtZW50LmhpZGRlbiYmaT9pOnIsYz0oKT0+e2NvbnN0IG49RGF0ZS5ub3coKS1hLmN1cnJlbnQscj1lKCksaT1uPj1yO2kmJihhLmN1cnJlbnQ9RGF0ZS5ub3coKSx0KCkpO2NvbnN0IG89aT9yOnItbjtzLmN1cnJlbnQ9d2luZG93LnNldFRpbWVvdXQoKCgpPT5jKCkpLG8pfSxsPSgpPT57dm9pZCAwIT09cy5jdXJyZW50JiYoY2xlYXJUaW1lb3V0KHMuY3VycmVudCkscy5jdXJyZW50PXZvaWQgMCl9LHU9YyxkPWw7cmV0dXJuIHMuY3VycmVudD13aW5kb3cuc2V0VGltZW91dCgoKCk9PmMoKSksbj8wOmUoKSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsZCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIix1KSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLGQpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwib25saW5lXCIsdSksbCgpfX0pLFtvLGksbixyLHRdKX1jb25zdCBvZT1lPT57Y29uc3R7YXV0aFN0YXRlOnQsaW5pdGlhbGl6ZTpuLHJlZnJlc2hUb2tlbjpyLGhhc0V2ZXJMb2dnZWRJbjppfT1lLmF1dGg7cmV0dXJue2F1dGhTdGF0ZTp0LGluaXRpYWxpemU6bixyZWZyZXNoVG9rZW46cixoYXNFdmVyTG9nZ2VkSW46aX19LGFlPTZlNSxzZT0uMTUqYWUsY2U9YGh0dHBzOi8vJHt0ZS5fdn0vYWNjb3VudHMvc3NvYDtmdW5jdGlvbiBsZShlKXtsZXR7Y2hpbGRyZW46dH09ZTtjb25zdHthdXRoU3RhdGU6bixpbml0aWFsaXplOnIscmVmcmVzaFRva2VuOmksaGFzRXZlckxvZ2dlZEluOm99PSgwLGsubykob2UsRCksYT0oMCxnLlRIKSgpLHM9KDAsZy5zMCkoKSxjPW5ldyBVUkxTZWFyY2hQYXJhbXMoYS5zZWFyY2gpLmdldChcInRpY2tldFwiKSxsPW49PT1yZS5qLkxvZ2dlZE91dCx1PW49PT1yZS5qLkxvZ2dlZEluO3JldHVybigwLEIuUnEpKChhc3luYygpPT5yKGEpKSxbXCJhdXRoSW5pdFwiXSksKDAsZC51c2VFZmZlY3QpKCgoKT0+e2lmKHUpe2NvbnN0IGU9bmV3IFVSTFNlYXJjaFBhcmFtcyhhLnNlYXJjaCk7ZS5kZWxldGUoXCJ0aWNrZXRcIiksZS5kZWxldGUoXCJ0cmFuc2FjdGlvbl9kYXRhXCIpLHMoYS5wYXRobmFtZStcIj9cIitlLnRvU3RyaW5nKCkse3JlcGxhY2U6ITB9KX19KSxbYS5wYXRobmFtZSxjLHUscyxhLnNlYXJjaF0pLGllKHtvblJlZnJlc2g6KDAsZC51c2VDYWxsYmFjaykoKCgpPT57aShcInBlcmlvZGljX3JlZnJlc2hcIikuY2F0Y2goKGU9Pnt9KSl9KSxbaV0pLGltbWVkaWF0ZTohMSxpbnRlcnZhbE1zOmFlK01hdGgucm91bmQoTWF0aC5yYW5kb20oKSpzZSoyLXNlKSxkaXNhYmxlZDpsfSksKDAsZC51c2VFZmZlY3QpKCgoKT0+eyhhc3luYygpPT57bCYmKG98fGIoKS5hZGRUaW1lcih7bWV0cmljc05hbWU6XCJsb2dpbl9wYWdlX3JlZGlyZWN0aW9uX2xhdGVuY3lcIixtaWxsaVNlYzpNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLm5vdygpKX0pLGIoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwidG9va191c2VyX3RvX3NpZ25faW5cIn0pLHdpbmRvdy5sb2NhdGlvbi5ocmVmPWF3YWl0IGFzeW5jIGZ1bmN0aW9uKGUpe2NvbnN0IHQ9bmV3IFVSTChjZSk7dC5zZWFyY2hQYXJhbXMuYXBwZW5kKFwiY2xpZW50X2lkXCIsdGUuQnkpLHQuc2VhcmNoUGFyYW1zLmFwcGVuZChcInJlZmVycmVyXCIsZSk7Y29uc3Qgbj1hd2FpdCgwLG5lLk4pKCk7cmV0dXJuIG4mJnQuc2VhcmNoUGFyYW1zLmFwcGVuZChcInRpdl9yZXF1ZXN0X2luZm9cIixuKSx0LnRvU3RyaW5nKCl9KHdpbmRvdy5sb2NhdGlvbi5ocmVmKSl9KSgpfSksW2wsb10pLHU/KDAscS5qc3gpKHEuRnJhZ21lbnQse2NoaWxkcmVuOnR9KTpudWxsfXZhciB1ZT1uKDU2MjQxKSxkZT1uKDU3MjgxKTtmdW5jdGlvbiBmZSgpe2NvbnN0IGU9KDAsZGUubikodWUuUyksdD0oMCxrLm8pKEkueUspO3JldHVybigwLGQudXNlRWZmZWN0KSgoKCk9Pnt0JiZlKCgwLHouTWMpKHQpKX0pLFtlLHRdKSxudWxsfWNvbnN0IHBlPW4ucCtcImR3Lzc0NzQ0ZDFhNWExMWFhNDJjY2U4LnBuZ1wiO3ZhciBtZT1uKDg2ODk2KSxoZT1uKDUzOTM1KSx2ZT1uKDg2OTUzKSxnZT1uKDg0MTMwKSx5ZT1uKDc2ODc5KTtjb25zdCBFZT1lPT57Y29uc3QgdD0oMCxkLnVzZVJlZikocGVyZm9ybWFuY2Uubm93KCkpO3JldHVybntvbkNvbXBvbmVudExvYWRlZDooMCxkLnVzZUNhbGxiYWNrKSgoKCk9Pntjb25zdCBuPU1hdGguZmxvb3IocGVyZm9ybWFuY2Uubm93KCktdC5jdXJyZW50KTtuPj0wJiZuPDZlNT9iKCkuYWRkVGltZXIoe21ldHJpY3NOYW1lOmBjb21wb25lbnQuJHtlfS5sb2FkX3RpbWVgLG1pbGxpU2VjOm59KTpiKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpgY29tcG9uZW50LiR7ZX0udW5yZWFzb25hYmxlX2xvYWRfdGltZWB9KX0pLFtlLHRdKX19O2Z1bmN0aW9uIF9lKGUsdCl7Y29uc3R7b25Db21wb25lbnRMb2FkZWQ6bn09RWUoZSk7KDAsZC51c2VFZmZlY3QpKCgoKT0+e24oKSxiKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpgY29tcG9uZW50LiR7ZX0uaW1wcmVzc2lvbmB9KSx0Py5zaG91bGRUcmFja0luaXRpYWxSZW5kZXJUaW1lJiZiKCkuYWRkVGltZXIoe21ldHJpY3NOYW1lOmBjb21wb25lbnQuJHtlfS5maXJzdF9sb2FkX3RpbWVgLG1pbGxpU2VjOk1hdGguZmxvb3IocGVyZm9ybWFuY2Uubm93KCkpfSl9KSxbZSxuLHQ/LnNob3VsZFRyYWNrSW5pdGlhbFJlbmRlclRpbWVdKX1jb25zdCBJZT1uZXcgU2V0LFNlPVswLDNlNV07dmFyIGJlPW4oNjgyMzApLFRlPW4oODgwMzcpO2NvbnN0IENlPWU9PmUudXBkYXRlcy5jaGVja0ZvclVwZGF0ZSxBZT1lPT5lLnVwZGF0ZXMudXBkYXRlSW5zdGFsbGVkQW5kV2FpdGluZyxSZT1lPT5lLnVwZGF0ZXMubGF0ZXN0VmVyc2lvbi5mbGF2b3Isa2U9ZT0+ZS51cGRhdGVzLmZsYXZvcklzQ2hhbmdlZCxPZT1lPT57Y29uc3QgdD0oMCx3Ll91KShlKS5zaXplPjAse2lzQ29tcG9zaW5nOm59PSgwLFRlLndDKShlKTtyZXR1cm4gdHx8bn0sTmU9ZT0+QWUoZSkmJiFPZShlKTt2YXIgd2U9big2Mzk4KTtjb25zdCBEZT1lPT57YigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6YHN3LnVwZGF0ZS4ke3dlLktafS5hY2NlcHQuJHtlfS5zdGFydGB9KSxiKCkuZmx1c2goKSwoMCx3ZS5NMSkoZSl9O3ZhciBQZT1uKDU4ODYxKTtjb25zdCBNZT0oMCxkLmNyZWF0ZUNvbnRleHQpKHt0cmFuc2Zvcm1QYWdlUG9pbnQ6ZT0+ZSxpc1N0YXRpYzohMSxyZWR1Y2VkTW90aW9uOlwibmV2ZXJcIn0pLExlPSgwLGQuY3JlYXRlQ29udGV4dCkoe30pLFVlPSgwLGQuY3JlYXRlQ29udGV4dCkobnVsbCkseGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50LEZlPXhlP2QudXNlTGF5b3V0RWZmZWN0OmQudXNlRWZmZWN0LEJlPSgwLGQuY3JlYXRlQ29udGV4dCkoe3N0cmljdDohMX0pO2Z1bmN0aW9uIFZlKGUpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiBlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxcImN1cnJlbnRcIil9ZnVuY3Rpb24gR2UoZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGV8fEFycmF5LmlzQXJyYXkoZSl9ZnVuY3Rpb24gSGUoZSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuc3RhcnR9Y29uc3QgV2U9W1wiaW5pdGlhbFwiLFwiYW5pbWF0ZVwiLFwiZXhpdFwiLFwid2hpbGVIb3ZlclwiLFwid2hpbGVEcmFnXCIsXCJ3aGlsZVRhcFwiLFwid2hpbGVGb2N1c1wiLFwid2hpbGVJblZpZXdcIl07ZnVuY3Rpb24gamUoZSl7cmV0dXJuIEhlKGUuYW5pbWF0ZSl8fFdlLnNvbWUoKHQ9PkdlKGVbdF0pKSl9ZnVuY3Rpb24gWmUoZSl7cmV0dXJuIEJvb2xlYW4oamUoZSl8fGUudmFyaWFudHMpfWZ1bmN0aW9uIHplKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2Uuam9pbihcIiBcIik6ZX1jb25zdCBLZT1lPT4oe2lzRW5hYmxlZDp0PT5lLnNvbWUoKGU9PiEhdFtlXSkpfSksWWU9e21lYXN1cmVMYXlvdXQ6S2UoW1wibGF5b3V0XCIsXCJsYXlvdXRJZFwiLFwiZHJhZ1wiXSksYW5pbWF0aW9uOktlKFtcImFuaW1hdGVcIixcImV4aXRcIixcInZhcmlhbnRzXCIsXCJ3aGlsZUhvdmVyXCIsXCJ3aGlsZVRhcFwiLFwid2hpbGVGb2N1c1wiLFwid2hpbGVEcmFnXCIsXCJ3aGlsZUluVmlld1wiXSksZXhpdDpLZShbXCJleGl0XCJdKSxkcmFnOktlKFtcImRyYWdcIixcImRyYWdDb250cm9sc1wiXSksZm9jdXM6S2UoW1wid2hpbGVGb2N1c1wiXSksaG92ZXI6S2UoW1wid2hpbGVIb3ZlclwiLFwib25Ib3ZlclN0YXJ0XCIsXCJvbkhvdmVyRW5kXCJdKSx0YXA6S2UoW1wid2hpbGVUYXBcIixcIm9uVGFwXCIsXCJvblRhcFN0YXJ0XCIsXCJvblRhcENhbmNlbFwiXSkscGFuOktlKFtcIm9uUGFuXCIsXCJvblBhblN0YXJ0XCIsXCJvblBhblNlc3Npb25TdGFydFwiLFwib25QYW5FbmRcIl0pLGluVmlldzpLZShbXCJ3aGlsZUluVmlld1wiLFwib25WaWV3cG9ydEVudGVyXCIsXCJvblZpZXdwb3J0TGVhdmVcIl0pfTtmdW5jdGlvbiBxZShlKXtjb25zdCB0PSgwLGQudXNlUmVmKShudWxsKTtyZXR1cm4gbnVsbD09PXQuY3VycmVudCYmKHQuY3VycmVudD1lKCkpLHQuY3VycmVudH1jb25zdCBYZT17aGFzQW5pbWF0ZWRTaW5jZVJlc2l6ZTohMCxoYXNFdmVyVXBkYXRlZDohMX07bGV0IFFlPTE7Y29uc3QgSmU9KDAsZC5jcmVhdGVDb250ZXh0KSh7fSk7Y2xhc3MgJGUgZXh0ZW5kcyBkLkNvbXBvbmVudHtnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpe2NvbnN0e3Zpc3VhbEVsZW1lbnQ6ZSxwcm9wczp0fT10aGlzLnByb3BzO3JldHVybiBlJiZlLnNldFByb3BzKHQpLG51bGx9Y29tcG9uZW50RGlkVXBkYXRlKCl7fXJlbmRlcigpe3JldHVybiB0aGlzLnByb3BzLmNoaWxkcmVufX1jb25zdCBldD0oMCxkLmNyZWF0ZUNvbnRleHQpKHt9KSx0dD1TeW1ib2wuZm9yKFwibW90aW9uQ29tcG9uZW50U3ltYm9sXCIpO2Z1bmN0aW9uIG50KHtsYXlvdXRJZDplfSl7Y29uc3QgdD0oMCxkLnVzZUNvbnRleHQpKEplKS5pZDtyZXR1cm4gdCYmdm9pZCAwIT09ZT90K1wiLVwiK2U6ZX1mdW5jdGlvbiBydChlKXtmdW5jdGlvbiB0KHQsbj17fSl7cmV0dXJuIGZ1bmN0aW9uKHtwcmVsb2FkZWRGZWF0dXJlczplLGNyZWF0ZVZpc3VhbEVsZW1lbnQ6dCxwcm9qZWN0aW9uTm9kZUNvbnN0cnVjdG9yOm4sdXNlUmVuZGVyOnIsdXNlVmlzdWFsU3RhdGU6aSxDb21wb25lbnQ6b30pe2UmJmZ1bmN0aW9uKGUpe2Zvcihjb25zdCB0IGluIGUpXCJwcm9qZWN0aW9uTm9kZUNvbnN0cnVjdG9yXCI9PT10P1llLnByb2plY3Rpb25Ob2RlQ29uc3RydWN0b3I9ZVt0XTpZZVt0XS5Db21wb25lbnQ9ZVt0XX0oZSk7Y29uc3QgYT0oMCxkLmZvcndhcmRSZWYpKChmdW5jdGlvbihhLHMpe2NvbnN0IGM9ey4uLigwLGQudXNlQ29udGV4dCkoTWUpLC4uLmEsbGF5b3V0SWQ6bnQoYSl9LHtpc1N0YXRpYzpsfT1jO2xldCB1PW51bGw7Y29uc3QgZj1mdW5jdGlvbihlKXtjb25zdHtpbml0aWFsOnQsYW5pbWF0ZTpufT1mdW5jdGlvbihlLHQpe2lmKGplKGUpKXtjb25zdHtpbml0aWFsOnQsYW5pbWF0ZTpufT1lO3JldHVybntpbml0aWFsOiExPT09dHx8R2UodCk/dDp2b2lkIDAsYW5pbWF0ZTpHZShuKT9uOnZvaWQgMH19cmV0dXJuITEhPT1lLmluaGVyaXQ/dDp7fX0oZSwoMCxkLnVzZUNvbnRleHQpKExlKSk7cmV0dXJuKDAsZC51c2VNZW1vKSgoKCk9Pih7aW5pdGlhbDp0LGFuaW1hdGU6bn0pKSxbemUodCksemUobildKX0oYSkscD1sP3ZvaWQgMDpxZSgoKCk9PntpZihYZS5oYXNFdmVyVXBkYXRlZClyZXR1cm4gUWUrK30pKSxtPWkoYSxsKTtpZighbCYmeGUpe2YudmlzdWFsRWxlbWVudD1mdW5jdGlvbihlLHQsbixyKXtjb25zdCBpPSgwLGQudXNlQ29udGV4dCkoTGUpLnZpc3VhbEVsZW1lbnQsbz0oMCxkLnVzZUNvbnRleHQpKEJlKSxhPSgwLGQudXNlQ29udGV4dCkoVWUpLHM9KDAsZC51c2VDb250ZXh0KShNZSkucmVkdWNlZE1vdGlvbixjPSgwLGQudXNlUmVmKSgpO3I9cnx8by5yZW5kZXJlciwhYy5jdXJyZW50JiZyJiYoYy5jdXJyZW50PXIoZSx7dmlzdWFsU3RhdGU6dCxwYXJlbnQ6aSxwcm9wczpuLHByZXNlbmNlSWQ6YT9hLmlkOnZvaWQgMCxibG9ja0luaXRpYWxBbmltYXRpb246ISFhJiYhMT09PWEuaW5pdGlhbCxyZWR1Y2VkTW90aW9uQ29uZmlnOnN9KSk7Y29uc3QgbD1jLmN1cnJlbnQ7cmV0dXJuIEZlKCgoKT0+e2wmJmwucmVuZGVyKCl9KSksRmUoKCgpPT57bCYmbC5hbmltYXRpb25TdGF0ZSYmbC5hbmltYXRpb25TdGF0ZS5hbmltYXRlQ2hhbmdlcygpfSkpLEZlKCgoKT0+KCk9PmwmJmwubm90aWZ5KFwiVW5tb3VudFwiKSksW10pLGx9KG8sbSxjLHQpO2NvbnN0IHI9KDAsZC51c2VDb250ZXh0KShCZSkuc3RyaWN0LGk9KDAsZC51c2VDb250ZXh0KShldCk7Zi52aXN1YWxFbGVtZW50JiYodT1mLnZpc3VhbEVsZW1lbnQubG9hZEZlYXR1cmVzKGMscixlLHAsbnx8WWUucHJvamVjdGlvbk5vZGVDb25zdHJ1Y3RvcixpKSl9cmV0dXJuIGQuY3JlYXRlRWxlbWVudCgkZSx7dmlzdWFsRWxlbWVudDpmLnZpc3VhbEVsZW1lbnQscHJvcHM6Y30sdSxkLmNyZWF0ZUVsZW1lbnQoTGUuUHJvdmlkZXIse3ZhbHVlOmZ9LHIobyxhLHAsZnVuY3Rpb24oZSx0LG4pe3JldHVybigwLGQudXNlQ2FsbGJhY2spKChyPT57ciYmZS5tb3VudCYmZS5tb3VudChyKSx0JiYocj90Lm1vdW50KHIpOnQudW5tb3VudCgpKSxuJiYoXCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uKHIpOlZlKG4pJiYobi5jdXJyZW50PXIpKX0pLFt0XSl9KG0sZi52aXN1YWxFbGVtZW50LHMpLG0sbCxmLnZpc3VhbEVsZW1lbnQpKSl9KSk7cmV0dXJuIGFbdHRdPW8sYX0oZSh0LG4pKX1pZihcInVuZGVmaW5lZFwiPT10eXBlb2YgUHJveHkpcmV0dXJuIHQ7Y29uc3Qgbj1uZXcgTWFwO3JldHVybiBuZXcgUHJveHkodCx7Z2V0OihlLHIpPT4obi5oYXMocil8fG4uc2V0KHIsdChyKSksbi5nZXQocikpfSl9Y29uc3QgaXQ9W1wiYW5pbWF0ZVwiLFwiY2lyY2xlXCIsXCJkZWZzXCIsXCJkZXNjXCIsXCJlbGxpcHNlXCIsXCJnXCIsXCJpbWFnZVwiLFwibGluZVwiLFwiZmlsdGVyXCIsXCJtYXJrZXJcIixcIm1hc2tcIixcIm1ldGFkYXRhXCIsXCJwYXRoXCIsXCJwYXR0ZXJuXCIsXCJwb2x5Z29uXCIsXCJwb2x5bGluZVwiLFwicmVjdFwiLFwic3RvcFwiLFwic3dpdGNoXCIsXCJzeW1ib2xcIixcInN2Z1wiLFwidGV4dFwiLFwidHNwYW5cIixcInVzZVwiLFwidmlld1wiXTtmdW5jdGlvbiBvdChlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmIWUuaW5jbHVkZXMoXCItXCIpJiYhIShpdC5pbmRleE9mKGUpPi0xfHwvW0EtWl0vLnRlc3QoZSkpfWNvbnN0IGF0PXt9LHN0PVtcInRyYW5zZm9ybVBlcnNwZWN0aXZlXCIsXCJ4XCIsXCJ5XCIsXCJ6XCIsXCJ0cmFuc2xhdGVYXCIsXCJ0cmFuc2xhdGVZXCIsXCJ0cmFuc2xhdGVaXCIsXCJzY2FsZVwiLFwic2NhbGVYXCIsXCJzY2FsZVlcIixcInJvdGF0ZVwiLFwicm90YXRlWFwiLFwicm90YXRlWVwiLFwicm90YXRlWlwiLFwic2tld1wiLFwic2tld1hcIixcInNrZXdZXCJdLGN0PW5ldyBTZXQoc3QpO2Z1bmN0aW9uIGx0KGUse2xheW91dDp0LGxheW91dElkOm59KXtyZXR1cm4gY3QuaGFzKGUpfHxlLnN0YXJ0c1dpdGgoXCJvcmlnaW5cIil8fCh0fHx2b2lkIDAhPT1uKSYmKCEhYXRbZV18fFwib3BhY2l0eVwiPT09ZSl9Y29uc3QgdXQ9ZT0+ISEobnVsbD09ZT92b2lkIDA6ZS5nZXRWZWxvY2l0eSksZHQ9e3g6XCJ0cmFuc2xhdGVYXCIseTpcInRyYW5zbGF0ZVlcIix6OlwidHJhbnNsYXRlWlwiLHRyYW5zZm9ybVBlcnNwZWN0aXZlOlwicGVyc3BlY3RpdmVcIn0sZnQ9KGUsdCk9PnN0LmluZGV4T2YoZSktc3QuaW5kZXhPZih0KTtmdW5jdGlvbiBwdChlKXtyZXR1cm4gZS5zdGFydHNXaXRoKFwiLS1cIil9Y29uc3QgbXQ9KGUsdCk9PnQmJlwibnVtYmVyXCI9PXR5cGVvZiBlP3QudHJhbnNmb3JtKGUpOmUsaHQ9KGUsdCxuKT0+TWF0aC5taW4oTWF0aC5tYXgobixlKSx0KSx2dD17dGVzdDplPT5cIm51bWJlclwiPT10eXBlb2YgZSxwYXJzZTpwYXJzZUZsb2F0LHRyYW5zZm9ybTplPT5lfSxndD17Li4udnQsdHJhbnNmb3JtOmU9Pmh0KDAsMSxlKX0seXQ9ey4uLnZ0LGRlZmF1bHQ6MX0sRXQ9ZT0+TWF0aC5yb3VuZCgxZTUqZSkvMWU1LF90PS8oLSk/KFtcXGRdKlxcLj9bXFxkXSkrL2csSXQ9LygjWzAtOWEtZl17Nn18I1swLTlhLWZdezN9fCMoPzpbMC05YS1mXXsyfSl7Miw0fXwocmdifGhzbClhP1xcKCgtP1tcXGRcXC5dKyU/WyxcXHNdKyl7Mn0oLT9bXFxkXFwuXSslPylcXHMqW1xcLFxcL10/XFxzKltcXGRcXC5dKiU/XFwpKS9naSxTdD0vXigjWzAtOWEtZl17M318Iyg/OlswLTlhLWZdezJ9KXsyLDR9fChyZ2J8aHNsKWE/XFwoKC0/W1xcZFxcLl0rJT9bLFxcc10rKXsyfSgtP1tcXGRcXC5dKyU/KVxccypbXFwsXFwvXT9cXHMqW1xcZFxcLl0qJT9cXCkpJC9pO2Z1bmN0aW9uIGJ0KGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlfWNvbnN0IFR0PWU9Pih7dGVzdDp0PT5idCh0KSYmdC5lbmRzV2l0aChlKSYmMT09PXQuc3BsaXQoXCIgXCIpLmxlbmd0aCxwYXJzZTpwYXJzZUZsb2F0LHRyYW5zZm9ybTp0PT5gJHt0fSR7ZX1gfSksQ3Q9VHQoXCJkZWdcIiksQXQ9VHQoXCIlXCIpLFJ0PVR0KFwicHhcIiksa3Q9VHQoXCJ2aFwiKSxPdD1UdChcInZ3XCIpLE50PXsuLi5BdCxwYXJzZTplPT5BdC5wYXJzZShlKS8xMDAsdHJhbnNmb3JtOmU9PkF0LnRyYW5zZm9ybSgxMDAqZSl9LHd0PXsuLi52dCx0cmFuc2Zvcm06TWF0aC5yb3VuZH0sRHQ9e2JvcmRlcldpZHRoOlJ0LGJvcmRlclRvcFdpZHRoOlJ0LGJvcmRlclJpZ2h0V2lkdGg6UnQsYm9yZGVyQm90dG9tV2lkdGg6UnQsYm9yZGVyTGVmdFdpZHRoOlJ0LGJvcmRlclJhZGl1czpSdCxyYWRpdXM6UnQsYm9yZGVyVG9wTGVmdFJhZGl1czpSdCxib3JkZXJUb3BSaWdodFJhZGl1czpSdCxib3JkZXJCb3R0b21SaWdodFJhZGl1czpSdCxib3JkZXJCb3R0b21MZWZ0UmFkaXVzOlJ0LHdpZHRoOlJ0LG1heFdpZHRoOlJ0LGhlaWdodDpSdCxtYXhIZWlnaHQ6UnQsc2l6ZTpSdCx0b3A6UnQscmlnaHQ6UnQsYm90dG9tOlJ0LGxlZnQ6UnQscGFkZGluZzpSdCxwYWRkaW5nVG9wOlJ0LHBhZGRpbmdSaWdodDpSdCxwYWRkaW5nQm90dG9tOlJ0LHBhZGRpbmdMZWZ0OlJ0LG1hcmdpbjpSdCxtYXJnaW5Ub3A6UnQsbWFyZ2luUmlnaHQ6UnQsbWFyZ2luQm90dG9tOlJ0LG1hcmdpbkxlZnQ6UnQscm90YXRlOkN0LHJvdGF0ZVg6Q3Qscm90YXRlWTpDdCxyb3RhdGVaOkN0LHNjYWxlOnl0LHNjYWxlWDp5dCxzY2FsZVk6eXQsc2NhbGVaOnl0LHNrZXc6Q3Qsc2tld1g6Q3Qsc2tld1k6Q3QsZGlzdGFuY2U6UnQsdHJhbnNsYXRlWDpSdCx0cmFuc2xhdGVZOlJ0LHRyYW5zbGF0ZVo6UnQseDpSdCx5OlJ0LHo6UnQscGVyc3BlY3RpdmU6UnQsdHJhbnNmb3JtUGVyc3BlY3RpdmU6UnQsb3BhY2l0eTpndCxvcmlnaW5YOk50LG9yaWdpblk6TnQsb3JpZ2luWjpSdCx6SW5kZXg6d3QsZmlsbE9wYWNpdHk6Z3Qsc3Ryb2tlT3BhY2l0eTpndCxudW1PY3RhdmVzOnd0fTtmdW5jdGlvbiBQdChlLHQsbixyKXtjb25zdHtzdHlsZTppLHZhcnM6byx0cmFuc2Zvcm06YSx0cmFuc2Zvcm1LZXlzOnMsdHJhbnNmb3JtT3JpZ2luOmN9PWU7cy5sZW5ndGg9MDtsZXQgbD0hMSx1PSExLGQ9ITA7Zm9yKGNvbnN0IGUgaW4gdCl7Y29uc3Qgbj10W2VdO2lmKHB0KGUpKXtvW2VdPW47Y29udGludWV9Y29uc3Qgcj1EdFtlXSxmPW10KG4scik7aWYoY3QuaGFzKGUpKXtpZihsPSEwLGFbZV09ZixzLnB1c2goZSksIWQpY29udGludWU7biE9PShyLmRlZmF1bHR8fDApJiYoZD0hMSl9ZWxzZSBlLnN0YXJ0c1dpdGgoXCJvcmlnaW5cIik/KHU9ITAsY1tlXT1mKTppW2VdPWZ9aWYodC50cmFuc2Zvcm18fChsfHxyP2kudHJhbnNmb3JtPWZ1bmN0aW9uKHt0cmFuc2Zvcm06ZSx0cmFuc2Zvcm1LZXlzOnR9LHtlbmFibGVIYXJkd2FyZUFjY2VsZXJhdGlvbjpuPSEwLGFsbG93VHJhbnNmb3JtTm9uZTpyPSEwfSxpLG8pe2xldCBhPVwiXCI7dC5zb3J0KGZ0KTtmb3IoY29uc3QgbiBvZiB0KWErPWAke2R0W25dfHxufSgke2Vbbl19KSBgO3JldHVybiBuJiYhZS56JiYoYSs9XCJ0cmFuc2xhdGVaKDApXCIpLGE9YS50cmltKCksbz9hPW8oZSxpP1wiXCI6YSk6ciYmaSYmKGE9XCJub25lXCIpLGF9KGUsbixkLHIpOmkudHJhbnNmb3JtJiYoaS50cmFuc2Zvcm09XCJub25lXCIpKSx1KXtjb25zdHtvcmlnaW5YOmU9XCI1MCVcIixvcmlnaW5ZOnQ9XCI1MCVcIixvcmlnaW5aOm49MH09YztpLnRyYW5zZm9ybU9yaWdpbj1gJHtlfSAke3R9ICR7bn1gfX1jb25zdCBNdD0oKT0+KHtzdHlsZTp7fSx0cmFuc2Zvcm06e30sdHJhbnNmb3JtS2V5czpbXSx0cmFuc2Zvcm1PcmlnaW46e30sdmFyczp7fX0pO2Z1bmN0aW9uIEx0KGUsdCxuKXtmb3IoY29uc3QgciBpbiB0KXV0KHRbcl0pfHxsdChyLG4pfHwoZVtyXT10W3JdKX1mdW5jdGlvbiBVdChlLHQsbil7Y29uc3Qgcj17fSxpPWZ1bmN0aW9uKGUsdCxuKXtjb25zdCByPXt9O3JldHVybiBMdChyLGUuc3R5bGV8fHt9LGUpLE9iamVjdC5hc3NpZ24ocixmdW5jdGlvbih7dHJhbnNmb3JtVGVtcGxhdGU6ZX0sdCxuKXtyZXR1cm4oMCxkLnVzZU1lbW8pKCgoKT0+e2NvbnN0IHI9TXQoKTtyZXR1cm4gUHQocix0LHtlbmFibGVIYXJkd2FyZUFjY2VsZXJhdGlvbjohbn0sZSksT2JqZWN0LmFzc2lnbih7fSxyLnZhcnMsci5zdHlsZSl9KSxbdF0pfShlLHQsbikpLGUudHJhbnNmb3JtVmFsdWVzP2UudHJhbnNmb3JtVmFsdWVzKHIpOnJ9KGUsdCxuKTtyZXR1cm4gZS5kcmFnJiYhMSE9PWUuZHJhZ0xpc3RlbmVyJiYoci5kcmFnZ2FibGU9ITEsaS51c2VyU2VsZWN0PWkuV2Via2l0VXNlclNlbGVjdD1pLldlYmtpdFRvdWNoQ2FsbG91dD1cIm5vbmVcIixpLnRvdWNoQWN0aW9uPSEwPT09ZS5kcmFnP1wibm9uZVwiOlwicGFuLVwiKyhcInhcIj09PWUuZHJhZz9cInlcIjpcInhcIikpLHIuc3R5bGU9aSxyfWNvbnN0IHh0PW5ldyBTZXQoW1wiaW5pdGlhbFwiLFwic3R5bGVcIixcInZhbHVlc1wiLFwidmFyaWFudHNcIixcInRyYW5zaXRpb25cIixcInRyYW5zZm9ybVRlbXBsYXRlXCIsXCJ0cmFuc2Zvcm1WYWx1ZXNcIixcImN1c3RvbVwiLFwiaW5oZXJpdFwiLFwibGF5b3V0XCIsXCJsYXlvdXRJZFwiLFwibGF5b3V0RGVwZW5kZW5jeVwiLFwib25MYXlvdXRBbmltYXRpb25TdGFydFwiLFwib25MYXlvdXRBbmltYXRpb25Db21wbGV0ZVwiLFwib25MYXlvdXRNZWFzdXJlXCIsXCJvbkJlZm9yZUxheW91dE1lYXN1cmVcIixcIm9uQW5pbWF0aW9uU3RhcnRcIixcIm9uQW5pbWF0aW9uQ29tcGxldGVcIixcIm9uVXBkYXRlXCIsXCJvbkRyYWdTdGFydFwiLFwib25EcmFnXCIsXCJvbkRyYWdFbmRcIixcIm9uTWVhc3VyZURyYWdDb25zdHJhaW50c1wiLFwib25EaXJlY3Rpb25Mb2NrXCIsXCJvbkRyYWdUcmFuc2l0aW9uRW5kXCIsXCJkcmFnXCIsXCJkcmFnQ29udHJvbHNcIixcImRyYWdMaXN0ZW5lclwiLFwiZHJhZ0NvbnN0cmFpbnRzXCIsXCJkcmFnRGlyZWN0aW9uTG9ja1wiLFwiZHJhZ1NuYXBUb09yaWdpblwiLFwiX2RyYWdYXCIsXCJfZHJhZ1lcIixcImRyYWdFbGFzdGljXCIsXCJkcmFnTW9tZW50dW1cIixcImRyYWdQcm9wYWdhdGlvblwiLFwiZHJhZ1RyYW5zaXRpb25cIixcIm9uSG92ZXJTdGFydFwiLFwib25Ib3ZlckVuZFwiLFwibGF5b3V0U2Nyb2xsXCIsXCJ3aGlsZUluVmlld1wiLFwib25WaWV3cG9ydEVudGVyXCIsXCJvblZpZXdwb3J0TGVhdmVcIixcInZpZXdwb3J0XCIsXCJ3aGlsZVRhcFwiLFwib25UYXBcIixcIm9uVGFwU3RhcnRcIixcIm9uVGFwQ2FuY2VsXCIsXCJhbmltYXRlXCIsXCJleGl0XCIsXCJ2YXJpYW50c1wiLFwid2hpbGVIb3ZlclwiLFwid2hpbGVUYXBcIixcIndoaWxlRm9jdXNcIixcIndoaWxlRHJhZ1wiLFwid2hpbGVJblZpZXdcIixcIm9uUGFuXCIsXCJvblBhblN0YXJ0XCIsXCJvblBhblNlc3Npb25TdGFydFwiLFwib25QYW5FbmRcIl0pO2Z1bmN0aW9uIEZ0KGUpe3JldHVybiB4dC5oYXMoZSl9bGV0IEJ0PWU9PiFGdChlKTt0cnl7KFZ0PXJlcXVpcmUoXCJAZW1vdGlvbi9pcy1wcm9wLXZhbGlkXCIpLmRlZmF1bHQpJiYoQnQ9ZT0+ZS5zdGFydHNXaXRoKFwib25cIik/IUZ0KGUpOlZ0KGUpKX1jYXRjaChlKXt9dmFyIFZ0O2Z1bmN0aW9uIEd0KGUsdCxuKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZT9lOlJ0LnRyYW5zZm9ybSh0K24qZSl9Y29uc3QgSHQ9e29mZnNldDpcInN0cm9rZS1kYXNob2Zmc2V0XCIsYXJyYXk6XCJzdHJva2UtZGFzaGFycmF5XCJ9LFd0PXtvZmZzZXQ6XCJzdHJva2VEYXNob2Zmc2V0XCIsYXJyYXk6XCJzdHJva2VEYXNoYXJyYXlcIn07ZnVuY3Rpb24ganQoZSx7YXR0clg6dCxhdHRyWTpuLG9yaWdpblg6cixvcmlnaW5ZOmkscGF0aExlbmd0aDpvLHBhdGhTcGFjaW5nOmE9MSxwYXRoT2Zmc2V0OnM9MCwuLi5jfSxsLHUsZCl7aWYoUHQoZSxjLGwsZCksdSlyZXR1cm4gdm9pZChlLnN0eWxlLnZpZXdCb3gmJihlLmF0dHJzLnZpZXdCb3g9ZS5zdHlsZS52aWV3Qm94KSk7ZS5hdHRycz1lLnN0eWxlLGUuc3R5bGU9e307Y29uc3R7YXR0cnM6ZixzdHlsZTpwLGRpbWVuc2lvbnM6bX09ZTtmLnRyYW5zZm9ybSYmKG0mJihwLnRyYW5zZm9ybT1mLnRyYW5zZm9ybSksZGVsZXRlIGYudHJhbnNmb3JtKSxtJiYodm9pZCAwIT09cnx8dm9pZCAwIT09aXx8cC50cmFuc2Zvcm0pJiYocC50cmFuc2Zvcm1PcmlnaW49ZnVuY3Rpb24oZSx0LG4pe3JldHVybmAke0d0KHQsZS54LGUud2lkdGgpfSAke0d0KG4sZS55LGUuaGVpZ2h0KX1gfShtLHZvaWQgMCE9PXI/cjouNSx2b2lkIDAhPT1pP2k6LjUpKSx2b2lkIDAhPT10JiYoZi54PXQpLHZvaWQgMCE9PW4mJihmLnk9biksdm9pZCAwIT09byYmZnVuY3Rpb24oZSx0LG49MSxyPTAsaT0hMCl7ZS5wYXRoTGVuZ3RoPTE7Y29uc3Qgbz1pP0h0Old0O2Vbby5vZmZzZXRdPVJ0LnRyYW5zZm9ybSgtcik7Y29uc3QgYT1SdC50cmFuc2Zvcm0odCkscz1SdC50cmFuc2Zvcm0obik7ZVtvLmFycmF5XT1gJHthfSAke3N9YH0oZixvLGEscywhMSl9Y29uc3QgWnQ9KCk9Pih7Li4uTXQoKSxhdHRyczp7fX0pLHp0PWU9Plwic3RyaW5nXCI9PXR5cGVvZiBlJiZcInN2Z1wiPT09ZS50b0xvd2VyQ2FzZSgpO2Z1bmN0aW9uIEt0KGUsdCxuLHIpe2NvbnN0IGk9KDAsZC51c2VNZW1vKSgoKCk9Pntjb25zdCBuPVp0KCk7cmV0dXJuIGp0KG4sdCx7ZW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRpb246ITF9LHp0KHIpLGUudHJhbnNmb3JtVGVtcGxhdGUpLHsuLi5uLmF0dHJzLHN0eWxlOnsuLi5uLnN0eWxlfX19KSxbdF0pO2lmKGUuc3R5bGUpe2NvbnN0IHQ9e307THQodCxlLnN0eWxlLGUpLGkuc3R5bGU9ey4uLnQsLi4uaS5zdHlsZX19cmV0dXJuIGl9ZnVuY3Rpb24gWXQoZT0hMSl7cmV0dXJuKHQsbixyLGkse2xhdGVzdFZhbHVlczpvfSxhKT0+e2NvbnN0IHM9KG90KHQpP0t0OlV0KShuLG8sYSx0KSxjPWZ1bmN0aW9uKGUsdCxuKXtjb25zdCByPXt9O2Zvcihjb25zdCBpIGluIGUpKEJ0KGkpfHwhMD09PW4mJkZ0KGkpfHwhdCYmIUZ0KGkpfHxlLmRyYWdnYWJsZSYmaS5zdGFydHNXaXRoKFwib25EcmFnXCIpKSYmKHJbaV09ZVtpXSk7cmV0dXJuIHJ9KG4sXCJzdHJpbmdcIj09dHlwZW9mIHQsZSksbD17Li4uYywuLi5zLHJlZjppfTtyZXR1cm4gciYmKGxbXCJkYXRhLXByb2plY3Rpb24taWRcIl09ciksKDAsZC5jcmVhdGVFbGVtZW50KSh0LGwpfX1jb25zdCBxdD1lPT5lLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csXCIkMS0kMlwiKS50b0xvd2VyQ2FzZSgpO2Z1bmN0aW9uIFh0KGUse3N0eWxlOnQsdmFyczpufSxyLGkpe09iamVjdC5hc3NpZ24oZS5zdHlsZSx0LGkmJmkuZ2V0UHJvamVjdGlvblN0eWxlcyhyKSk7Zm9yKGNvbnN0IHQgaW4gbillLnN0eWxlLnNldFByb3BlcnR5KHQsblt0XSl9Y29uc3QgUXQ9bmV3IFNldChbXCJiYXNlRnJlcXVlbmN5XCIsXCJkaWZmdXNlQ29uc3RhbnRcIixcImtlcm5lbE1hdHJpeFwiLFwia2VybmVsVW5pdExlbmd0aFwiLFwia2V5U3BsaW5lc1wiLFwia2V5VGltZXNcIixcImxpbWl0aW5nQ29uZUFuZ2xlXCIsXCJtYXJrZXJIZWlnaHRcIixcIm1hcmtlcldpZHRoXCIsXCJudW1PY3RhdmVzXCIsXCJ0YXJnZXRYXCIsXCJ0YXJnZXRZXCIsXCJzdXJmYWNlU2NhbGVcIixcInNwZWN1bGFyQ29uc3RhbnRcIixcInNwZWN1bGFyRXhwb25lbnRcIixcInN0ZERldmlhdGlvblwiLFwidGFibGVWYWx1ZXNcIixcInZpZXdCb3hcIixcImdyYWRpZW50VHJhbnNmb3JtXCIsXCJwYXRoTGVuZ3RoXCIsXCJzdGFydE9mZnNldFwiLFwidGV4dExlbmd0aFwiLFwibGVuZ3RoQWRqdXN0XCJdKTtmdW5jdGlvbiBKdChlLHQsbixyKXtYdChlLHQsdm9pZCAwLHIpO2Zvcihjb25zdCBuIGluIHQuYXR0cnMpZS5zZXRBdHRyaWJ1dGUoUXQuaGFzKG4pP246cXQobiksdC5hdHRyc1tuXSl9ZnVuY3Rpb24gJHQoZSl7Y29uc3R7c3R5bGU6dH09ZSxuPXt9O2Zvcihjb25zdCByIGluIHQpKHV0KHRbcl0pfHxsdChyLGUpKSYmKG5bcl09dFtyXSk7cmV0dXJuIG59ZnVuY3Rpb24gZW4oZSl7Y29uc3QgdD0kdChlKTtmb3IoY29uc3QgbiBpbiBlKXV0KGVbbl0pJiYodFtcInhcIj09PW58fFwieVwiPT09bj9cImF0dHJcIituLnRvVXBwZXJDYXNlKCk6bl09ZVtuXSk7cmV0dXJuIHR9ZnVuY3Rpb24gdG4oZSx0LG4scj17fSxpPXt9KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiYodD10KHZvaWQgMCE9PW4/bjplLmN1c3RvbSxyLGkpKSxcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9ZS52YXJpYW50cyYmZS52YXJpYW50c1t0XSksXCJmdW5jdGlvblwiPT10eXBlb2YgdCYmKHQ9dCh2b2lkIDAhPT1uP246ZS5jdXN0b20scixpKSksdH1jb25zdCBubj1lPT5BcnJheS5pc0FycmF5KGUpLHJuPWU9PkJvb2xlYW4oZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJmUubWl4JiZlLnRvVmFsdWUpLG9uPWU9Pm5uKGUpP2VbZS5sZW5ndGgtMV18fDA6ZTtmdW5jdGlvbiBhbihlKXtjb25zdCB0PXV0KGUpP2UuZ2V0KCk6ZTtyZXR1cm4gcm4odCk/dC50b1ZhbHVlKCk6dH1jb25zdCBzbj1lPT4odCxuKT0+e2NvbnN0IHI9KDAsZC51c2VDb250ZXh0KShMZSksaT0oMCxkLnVzZUNvbnRleHQpKFVlKSxvPSgpPT5mdW5jdGlvbih7c2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzOmUsY3JlYXRlUmVuZGVyU3RhdGU6dCxvbk1vdW50Om59LHIsaSxvKXtjb25zdCBhPXtsYXRlc3RWYWx1ZXM6Y24ocixpLG8sZSkscmVuZGVyU3RhdGU6dCgpfTtyZXR1cm4gbiYmKGEubW91bnQ9ZT0+bihyLGUsYSkpLGF9KGUsdCxyLGkpO3JldHVybiBuP28oKTpxZShvKX07ZnVuY3Rpb24gY24oZSx0LG4scil7Y29uc3QgaT17fSxvPXIoZSk7Zm9yKGNvbnN0IGUgaW4gbylpW2VdPWFuKG9bZV0pO2xldHtpbml0aWFsOmEsYW5pbWF0ZTpzfT1lO2NvbnN0IGM9amUoZSksbD1aZShlKTt0JiZsJiYhYyYmITEhPT1lLmluaGVyaXQmJih2b2lkIDA9PT1hJiYoYT10LmluaXRpYWwpLHZvaWQgMD09PXMmJihzPXQuYW5pbWF0ZSkpO2xldCB1PSEhbiYmITE9PT1uLmluaXRpYWw7dT11fHwhMT09PWE7Y29uc3QgZD11P3M6YTtyZXR1cm4gZCYmXCJib29sZWFuXCIhPXR5cGVvZiBkJiYhSGUoZCkmJihBcnJheS5pc0FycmF5KGQpP2Q6W2RdKS5mb3JFYWNoKCh0PT57Y29uc3Qgbj10bihlLHQpO2lmKCFuKXJldHVybjtjb25zdHt0cmFuc2l0aW9uRW5kOnIsdHJhbnNpdGlvbjpvLC4uLmF9PW47Zm9yKGNvbnN0IGUgaW4gYSl7bGV0IHQ9YVtlXTtBcnJheS5pc0FycmF5KHQpJiYodD10W3U/dC5sZW5ndGgtMTowXSksbnVsbCE9PXQmJihpW2VdPXQpfWZvcihjb25zdCBlIGluIHIpaVtlXT1yW2VdfSkpLGl9Y29uc3QgbG49e3VzZVZpc3VhbFN0YXRlOnNuKHtzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHM6ZW4sY3JlYXRlUmVuZGVyU3RhdGU6WnQsb25Nb3VudDooZSx0LHtyZW5kZXJTdGF0ZTpuLGxhdGVzdFZhbHVlczpyfSk9Pnt0cnl7bi5kaW1lbnNpb25zPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQuZ2V0QkJveD90LmdldEJCb3goKTp0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfWNhdGNoKGUpe24uZGltZW5zaW9ucz17eDowLHk6MCx3aWR0aDowLGhlaWdodDowfX1qdChuLHIse2VuYWJsZUhhcmR3YXJlQWNjZWxlcmF0aW9uOiExfSx6dCh0LnRhZ05hbWUpLGUudHJhbnNmb3JtVGVtcGxhdGUpLEp0KHQsbil9fSl9LHVuPXt1c2VWaXN1YWxTdGF0ZTpzbih7c2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzOiR0LGNyZWF0ZVJlbmRlclN0YXRlOk10fSl9O3ZhciBkbjtmdW5jdGlvbiBmbihlLHQsbixyPXtwYXNzaXZlOiEwfSl7cmV0dXJuIGUuYWRkRXZlbnRMaXN0ZW5lcih0LG4sciksKCk9PmUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4pfWZ1bmN0aW9uIHBuKGUsdCxuLHIpeygwLGQudXNlRWZmZWN0KSgoKCk9Pntjb25zdCBpPWUuY3VycmVudDtpZihuJiZpKXJldHVybiBmbihpLHQsbixyKX0pLFtlLHQsbixyXSl9ZnVuY3Rpb24gbW4oZSl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFBvaW50ZXJFdmVudCYmZSBpbnN0YW5jZW9mIFBvaW50ZXJFdmVudD8hKFwibW91c2VcIiE9PWUucG9pbnRlclR5cGUpOmUgaW5zdGFuY2VvZiBNb3VzZUV2ZW50fWZ1bmN0aW9uIGhuKGUpe3JldHVybiEhZS50b3VjaGVzfSFmdW5jdGlvbihlKXtlLkFuaW1hdGU9XCJhbmltYXRlXCIsZS5Ib3Zlcj1cIndoaWxlSG92ZXJcIixlLlRhcD1cIndoaWxlVGFwXCIsZS5EcmFnPVwid2hpbGVEcmFnXCIsZS5Gb2N1cz1cIndoaWxlRm9jdXNcIixlLkluVmlldz1cIndoaWxlSW5WaWV3XCIsZS5FeGl0PVwiZXhpdFwifShkbnx8KGRuPXt9KSk7Y29uc3Qgdm49e3BhZ2VYOjAscGFnZVk6MH07ZnVuY3Rpb24gZ24oZSx0PVwicGFnZVwiKXtjb25zdCBuPWUudG91Y2hlc1swXXx8ZS5jaGFuZ2VkVG91Y2hlc1swXXx8dm47cmV0dXJue3g6blt0K1wiWFwiXSx5Om5bdCtcIllcIl19fWZ1bmN0aW9uIHluKGUsdD1cInBhZ2VcIil7cmV0dXJue3g6ZVt0K1wiWFwiXSx5OmVbdCtcIllcIl19fWZ1bmN0aW9uIEVuKGUsdD1cInBhZ2VcIil7cmV0dXJue3BvaW50OmhuKGUpP2duKGUsdCk6eW4oZSx0KX19Y29uc3QgX249KGUsdD0hMSk9Pntjb25zdCBuPXQ9PmUodCxFbih0KSk7cmV0dXJuIHQ/KHI9bixlPT57Y29uc3QgdD1lIGluc3RhbmNlb2YgTW91c2VFdmVudDsoIXR8fHQmJjA9PT1lLmJ1dHRvbikmJnIoZSl9KTpuO3ZhciByfSxJbj0oKT0+eGUmJm51bGw9PT13aW5kb3cub25wb2ludGVyZG93bixTbj0oKT0+eGUmJm51bGw9PT13aW5kb3cub250b3VjaHN0YXJ0LGJuPSgpPT54ZSYmbnVsbD09PXdpbmRvdy5vbm1vdXNlZG93bixUbj17cG9pbnRlcmRvd246XCJtb3VzZWRvd25cIixwb2ludGVybW92ZTpcIm1vdXNlbW92ZVwiLHBvaW50ZXJ1cDpcIm1vdXNldXBcIixwb2ludGVyY2FuY2VsOlwibW91c2VjYW5jZWxcIixwb2ludGVyb3ZlcjpcIm1vdXNlb3ZlclwiLHBvaW50ZXJvdXQ6XCJtb3VzZW91dFwiLHBvaW50ZXJlbnRlcjpcIm1vdXNlZW50ZXJcIixwb2ludGVybGVhdmU6XCJtb3VzZWxlYXZlXCJ9LENuPXtwb2ludGVyZG93bjpcInRvdWNoc3RhcnRcIixwb2ludGVybW92ZTpcInRvdWNobW92ZVwiLHBvaW50ZXJ1cDpcInRvdWNoZW5kXCIscG9pbnRlcmNhbmNlbDpcInRvdWNoY2FuY2VsXCJ9O2Z1bmN0aW9uIEFuKGUpe3JldHVybiBJbigpP2U6U24oKT9DbltlXTpibigpP1RuW2VdOmV9ZnVuY3Rpb24gUm4oZSx0LG4scil7cmV0dXJuIGZuKGUsQW4odCksX24obixcInBvaW50ZXJkb3duXCI9PT10KSxyKX1mdW5jdGlvbiBrbihlLHQsbixyKXtyZXR1cm4gcG4oZSxBbih0KSxuJiZfbihuLFwicG9pbnRlcmRvd25cIj09PXQpLHIpfWZ1bmN0aW9uIE9uKGUpe2xldCB0PW51bGw7cmV0dXJuKCk9Pm51bGw9PT10JiYodD1lLCgpPT57dD1udWxsfSl9Y29uc3QgTm49T24oXCJkcmFnSG9yaXpvbnRhbFwiKSx3bj1PbihcImRyYWdWZXJ0aWNhbFwiKTtmdW5jdGlvbiBEbihlKXtsZXQgdD0hMTtpZihcInlcIj09PWUpdD13bigpO2Vsc2UgaWYoXCJ4XCI9PT1lKXQ9Tm4oKTtlbHNle2NvbnN0IGU9Tm4oKSxuPXduKCk7ZSYmbj90PSgpPT57ZSgpLG4oKX06KGUmJmUoKSxuJiZuKCkpfXJldHVybiB0fWZ1bmN0aW9uIFBuKCl7Y29uc3QgZT1EbighMCk7cmV0dXJuIWV8fChlKCksITEpfWZ1bmN0aW9uIE1uKGUsdCxuKXtyZXR1cm4ocixpKT0+e21uKHIpJiYhUG4oKSYmKGUuYW5pbWF0aW9uU3RhdGUmJmUuYW5pbWF0aW9uU3RhdGUuc2V0QWN0aXZlKGRuLkhvdmVyLHQpLG4mJm4ocixpKSl9fWNvbnN0IExuPShlLHQpPT4hIXQmJihlPT09dHx8TG4oZSx0LnBhcmVudEVsZW1lbnQpKTtmdW5jdGlvbiBVbihlKXtyZXR1cm4oMCxkLnVzZUVmZmVjdCkoKCgpPT4oKT0+ZSgpKSxbXSl9Y29uc3QgeG49KGUsdCk9Pm49PnQoZShuKSksRm49KC4uLmUpPT5lLnJlZHVjZSh4biksQm49KFwidW5kZWZpbmVkXCI9PXR5cGVvZiBwcm9jZXNzfHxwcm9jZXNzLmVudixcInByb2R1Y3Rpb25cIiksVm49bmV3IFNldDtmdW5jdGlvbiBHbihlLHQsbil7ZXx8Vm4uaGFzKHQpfHwoY29uc29sZS53YXJuKHQpLG4mJmNvbnNvbGUud2FybihuKSxWbi5hZGQodCkpfWNvbnN0IEhuPW5ldyBXZWFrTWFwLFduPW5ldyBXZWFrTWFwLGpuPWU9Pntjb25zdCB0PUhuLmdldChlLnRhcmdldCk7dCYmdChlKX0sWm49ZT0+e2UuZm9yRWFjaChqbil9LHpuPXtzb21lOjAsYWxsOjF9O2Z1bmN0aW9uIEtuKGUsdCxuLHtyb290OnIsbWFyZ2luOmksYW1vdW50Om89XCJzb21lXCIsb25jZTphfSl7KDAsZC51c2VFZmZlY3QpKCgoKT0+e2lmKCFlfHwhbi5jdXJyZW50KXJldHVybjtjb25zdCBzPXtyb290Om51bGw9PXI/dm9pZCAwOnIuY3VycmVudCxyb290TWFyZ2luOmksdGhyZXNob2xkOlwibnVtYmVyXCI9PXR5cGVvZiBvP286em5bb119O3JldHVybiBmdW5jdGlvbihlLHIsaSl7Y29uc3Qgbz1mdW5jdGlvbih7cm9vdDplLC4uLnR9KXtjb25zdCBuPWV8fGRvY3VtZW50O1duLmhhcyhuKXx8V24uc2V0KG4se30pO2NvbnN0IHI9V24uZ2V0KG4pLGk9SlNPTi5zdHJpbmdpZnkodCk7cmV0dXJuIHJbaV18fChyW2ldPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihabix7cm9vdDplLC4uLnR9KSkscltpXX0ocik7cmV0dXJuIEhuLnNldChlLChlPT57Y29uc3R7aXNJbnRlcnNlY3Rpbmc6cn09ZTtpZih0LmlzSW5WaWV3PT09cilyZXR1cm47aWYodC5pc0luVmlldz1yLGEmJiFyJiZ0Lmhhc0VudGVyZWRWaWV3KXJldHVybjtyJiYodC5oYXNFbnRlcmVkVmlldz0hMCksbi5hbmltYXRpb25TdGF0ZSYmbi5hbmltYXRpb25TdGF0ZS5zZXRBY3RpdmUoZG4uSW5WaWV3LHIpO2NvbnN0IGk9bi5nZXRQcm9wcygpLG89cj9pLm9uVmlld3BvcnRFbnRlcjppLm9uVmlld3BvcnRMZWF2ZTtvJiZvKGUpfSkpLG8ub2JzZXJ2ZShlKSwoKT0+e0huLmRlbGV0ZShlKSxvLnVub2JzZXJ2ZShlKX19KG4uY3VycmVudCxzKX0pLFtlLHIsaSxvXSl9ZnVuY3Rpb24gWW4oZSx0LG4se2ZhbGxiYWNrOnI9ITB9KXsoMCxkLnVzZUVmZmVjdCkoKCgpPT57ZSYmciYmKFwicHJvZHVjdGlvblwiIT09Qm4mJkduKCExLFwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS4gd2hpbGVJblZpZXcgYW5pbWF0aW9ucyB3aWxsIHRyaWdnZXIgb24gbW91bnQuXCIpLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKCk9Pnt0Lmhhc0VudGVyZWRWaWV3PSEwO2NvbnN0e29uVmlld3BvcnRFbnRlcjplfT1uLmdldFByb3BzKCk7ZSYmZShudWxsKSxuLmFuaW1hdGlvblN0YXRlJiZuLmFuaW1hdGlvblN0YXRlLnNldEFjdGl2ZShkbi5JblZpZXcsITApfSkpKX0pLFtlXSl9Y29uc3QgcW49ZT0+dD0+KGUodCksbnVsbCksWG49e2luVmlldzpxbigoZnVuY3Rpb24oe3Zpc3VhbEVsZW1lbnQ6ZSx3aGlsZUluVmlldzp0LG9uVmlld3BvcnRFbnRlcjpuLG9uVmlld3BvcnRMZWF2ZTpyLHZpZXdwb3J0Omk9e319KXtjb25zdCBvPSgwLGQudXNlUmVmKSh7aGFzRW50ZXJlZFZpZXc6ITEsaXNJblZpZXc6ITF9KTtsZXQgYT1Cb29sZWFuKHR8fG58fHIpO2kub25jZSYmby5jdXJyZW50Lmhhc0VudGVyZWRWaWV3JiYoYT0hMSksKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBJbnRlcnNlY3Rpb25PYnNlcnZlcj9ZbjpLbikoYSxvLmN1cnJlbnQsZSxpKX0pKSx0YXA6cW4oKGZ1bmN0aW9uKHtvblRhcDplLG9uVGFwU3RhcnQ6dCxvblRhcENhbmNlbDpuLHdoaWxlVGFwOnIsdmlzdWFsRWxlbWVudDppfSl7Y29uc3Qgbz1lfHx0fHxufHxyLGE9KDAsZC51c2VSZWYpKCExKSxzPSgwLGQudXNlUmVmKShudWxsKSxjPXtwYXNzaXZlOiEodHx8ZXx8bnx8bSl9O2Z1bmN0aW9uIGwoKXtzLmN1cnJlbnQmJnMuY3VycmVudCgpLHMuY3VycmVudD1udWxsfWZ1bmN0aW9uIHUoKXtyZXR1cm4gbCgpLGEuY3VycmVudD0hMSxpLmFuaW1hdGlvblN0YXRlJiZpLmFuaW1hdGlvblN0YXRlLnNldEFjdGl2ZShkbi5UYXAsITEpLCFQbigpfWZ1bmN0aW9uIGYodCxyKXt1KCkmJihMbihpLmN1cnJlbnQsdC50YXJnZXQpP2UmJmUodCxyKTpuJiZuKHQscikpfWZ1bmN0aW9uIHAoZSx0KXt1KCkmJm4mJm4oZSx0KX1mdW5jdGlvbiBtKGUsbil7bCgpLGEuY3VycmVudHx8KGEuY3VycmVudD0hMCxzLmN1cnJlbnQ9Rm4oUm4od2luZG93LFwicG9pbnRlcnVwXCIsZixjKSxSbih3aW5kb3csXCJwb2ludGVyY2FuY2VsXCIscCxjKSksaS5hbmltYXRpb25TdGF0ZSYmaS5hbmltYXRpb25TdGF0ZS5zZXRBY3RpdmUoZG4uVGFwLCEwKSx0JiZ0KGUsbikpfWtuKGksXCJwb2ludGVyZG93blwiLG8/bTp2b2lkIDAsYyksVW4obCl9KSksZm9jdXM6cW4oKGZ1bmN0aW9uKHt3aGlsZUZvY3VzOmUsdmlzdWFsRWxlbWVudDp0fSl7Y29uc3R7YW5pbWF0aW9uU3RhdGU6bn09dDtwbih0LFwiZm9jdXNcIixlPygpPT57biYmbi5zZXRBY3RpdmUoZG4uRm9jdXMsITApfTp2b2lkIDApLHBuKHQsXCJibHVyXCIsZT8oKT0+e24mJm4uc2V0QWN0aXZlKGRuLkZvY3VzLCExKX06dm9pZCAwKX0pKSxob3ZlcjpxbigoZnVuY3Rpb24oe29uSG92ZXJTdGFydDplLG9uSG92ZXJFbmQ6dCx3aGlsZUhvdmVyOm4sdmlzdWFsRWxlbWVudDpyfSl7a24ocixcInBvaW50ZXJlbnRlclwiLGV8fG4/TW4ociwhMCxlKTp2b2lkIDAse3Bhc3NpdmU6IWV9KSxrbihyLFwicG9pbnRlcmxlYXZlXCIsdHx8bj9NbihyLCExLHQpOnZvaWQgMCx7cGFzc2l2ZTohdH0pfSkpfTtmdW5jdGlvbiBRbigpe2NvbnN0IGU9KDAsZC51c2VDb250ZXh0KShVZSk7aWYobnVsbD09PWUpcmV0dXJuWyEwLG51bGxdO2NvbnN0e2lzUHJlc2VudDp0LG9uRXhpdENvbXBsZXRlOm4scmVnaXN0ZXI6cn09ZSxpPSgwLGQudXNlSWQpKCk7cmV0dXJuKDAsZC51c2VFZmZlY3QpKCgoKT0+cihpKSksW10pLCF0JiZuP1shMSwoKT0+biYmbihpKV06WyEwXX1mdW5jdGlvbiBKbihlLHQpe2lmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiExO2NvbnN0IG49dC5sZW5ndGg7aWYobiE9PWUubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgcj0wO3I8bjtyKyspaWYodFtyXSE9PWVbcl0pcmV0dXJuITE7cmV0dXJuITB9Y29uc3QgJG49e2RlbHRhOjAsdGltZXN0YW1wOjB9LGVyPTEvNjAqMWUzLHRyPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBwZXJmb3JtYW5jZT8oKT0+cGVyZm9ybWFuY2Uubm93KCk6KCk9PkRhdGUubm93KCksbnI9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz9lPT53aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpOmU9PnNldFRpbWVvdXQoKCgpPT5lKHRyKCkpKSxlcik7bGV0IHJyPSEwLGlyPSExLG9yPSExO2NvbnN0IGFyPVtcInJlYWRcIixcInVwZGF0ZVwiLFwicHJlUmVuZGVyXCIsXCJyZW5kZXJcIixcInBvc3RSZW5kZXJcIl0sc3I9YXIucmVkdWNlKCgoZSx0KT0+KGVbdF09ZnVuY3Rpb24oZSl7bGV0IHQ9W10sbj1bXSxyPTAsaT0hMSxvPSExO2NvbnN0IGE9bmV3IFdlYWtTZXQscz17c2NoZWR1bGU6KGUsbz0hMSxzPSExKT0+e2NvbnN0IGM9cyYmaSxsPWM/dDpuO3JldHVybiBvJiZhLmFkZChlKSwtMT09PWwuaW5kZXhPZihlKSYmKGwucHVzaChlKSxjJiZpJiYocj10Lmxlbmd0aCkpLGV9LGNhbmNlbDplPT57Y29uc3QgdD1uLmluZGV4T2YoZSk7LTEhPT10JiZuLnNwbGljZSh0LDEpLGEuZGVsZXRlKGUpfSxwcm9jZXNzOmM9PntpZihpKW89ITA7ZWxzZXtpZihpPSEwLFt0LG5dPVtuLHRdLG4ubGVuZ3RoPTAscj10Lmxlbmd0aCxyKWZvcihsZXQgbj0wO248cjtuKyspe2NvbnN0IHI9dFtuXTtyKGMpLGEuaGFzKHIpJiYocy5zY2hlZHVsZShyKSxlKCkpfWk9ITEsbyYmKG89ITEscy5wcm9jZXNzKGMpKX19fTtyZXR1cm4gc30oKCgpPT5pcj0hMCkpLGUpKSx7fSksY3I9YXIucmVkdWNlKCgoZSx0KT0+e2NvbnN0IG49c3JbdF07cmV0dXJuIGVbdF09KGUsdD0hMSxyPSExKT0+KGlyfHxwcigpLG4uc2NoZWR1bGUoZSx0LHIpKSxlfSkse30pLGxyPWFyLnJlZHVjZSgoKGUsdCk9PihlW3RdPXNyW3RdLmNhbmNlbCxlKSkse30pLHVyPWFyLnJlZHVjZSgoKGUsdCk9PihlW3RdPSgpPT5zclt0XS5wcm9jZXNzKCRuKSxlKSkse30pLGRyPWU9PnNyW2VdLnByb2Nlc3MoJG4pLGZyPWU9Pntpcj0hMSwkbi5kZWx0YT1ycj9lcjpNYXRoLm1heChNYXRoLm1pbihlLSRuLnRpbWVzdGFtcCw0MCksMSksJG4udGltZXN0YW1wPWUsb3I9ITAsYXIuZm9yRWFjaChkciksb3I9ITEsaXImJihycj0hMSxucihmcikpfSxwcj0oKT0+e2lyPSEwLHJyPSEwLG9yfHxucihmcil9O2Z1bmN0aW9uIG1yKGUsdCl7LTE9PT1lLmluZGV4T2YodCkmJmUucHVzaCh0KX1mdW5jdGlvbiBocihlLHQpe2NvbnN0IG49ZS5pbmRleE9mKHQpO24+LTEmJmUuc3BsaWNlKG4sMSl9Y2xhc3MgdnJ7Y29uc3RydWN0b3IoKXt0aGlzLnN1YnNjcmlwdGlvbnM9W119YWRkKGUpe3JldHVybiBtcih0aGlzLnN1YnNjcmlwdGlvbnMsZSksKCk9PmhyKHRoaXMuc3Vic2NyaXB0aW9ucyxlKX1ub3RpZnkoZSx0LG4pe2NvbnN0IHI9dGhpcy5zdWJzY3JpcHRpb25zLmxlbmd0aDtpZihyKWlmKDE9PT1yKXRoaXMuc3Vic2NyaXB0aW9uc1swXShlLHQsbik7ZWxzZSBmb3IobGV0IGk9MDtpPHI7aSsrKXtjb25zdCByPXRoaXMuc3Vic2NyaXB0aW9uc1tpXTtyJiZyKGUsdCxuKX19Z2V0U2l6ZSgpe3JldHVybiB0aGlzLnN1YnNjcmlwdGlvbnMubGVuZ3RofWNsZWFyKCl7dGhpcy5zdWJzY3JpcHRpb25zLmxlbmd0aD0wfX1mdW5jdGlvbiBncihlLHQpe3JldHVybiB0P2UqKDFlMy90KTowfWNsYXNzIHlye2NvbnN0cnVjdG9yKGUsdD17fSl7dmFyIG47dGhpcy52ZXJzaW9uPVwiNy4xMC4zXCIsdGhpcy50aW1lRGVsdGE9MCx0aGlzLmxhc3RVcGRhdGVkPTAsdGhpcy5jYW5UcmFja1ZlbG9jaXR5PSExLHRoaXMuZXZlbnRzPXt9LHRoaXMudXBkYXRlQW5kTm90aWZ5PShlLHQ9ITApPT57dGhpcy5wcmV2PXRoaXMuY3VycmVudCx0aGlzLmN1cnJlbnQ9ZTtjb25zdHtkZWx0YTpuLHRpbWVzdGFtcDpyfT0kbjt0aGlzLmxhc3RVcGRhdGVkIT09ciYmKHRoaXMudGltZURlbHRhPW4sdGhpcy5sYXN0VXBkYXRlZD1yLGNyLnBvc3RSZW5kZXIodGhpcy5zY2hlZHVsZVZlbG9jaXR5Q2hlY2spKSx0aGlzLnByZXYhPT10aGlzLmN1cnJlbnQmJnRoaXMuZXZlbnRzLmNoYW5nZSYmdGhpcy5ldmVudHMuY2hhbmdlLm5vdGlmeSh0aGlzLmN1cnJlbnQpLHRoaXMuZXZlbnRzLnZlbG9jaXR5Q2hhbmdlJiZ0aGlzLmV2ZW50cy52ZWxvY2l0eUNoYW5nZS5ub3RpZnkodGhpcy5nZXRWZWxvY2l0eSgpKSx0JiZ0aGlzLmV2ZW50cy5yZW5kZXJSZXF1ZXN0JiZ0aGlzLmV2ZW50cy5yZW5kZXJSZXF1ZXN0Lm5vdGlmeSh0aGlzLmN1cnJlbnQpfSx0aGlzLnNjaGVkdWxlVmVsb2NpdHlDaGVjaz0oKT0+Y3IucG9zdFJlbmRlcih0aGlzLnZlbG9jaXR5Q2hlY2spLHRoaXMudmVsb2NpdHlDaGVjaz0oe3RpbWVzdGFtcDplfSk9PntlIT09dGhpcy5sYXN0VXBkYXRlZCYmKHRoaXMucHJldj10aGlzLmN1cnJlbnQsdGhpcy5ldmVudHMudmVsb2NpdHlDaGFuZ2UmJnRoaXMuZXZlbnRzLnZlbG9jaXR5Q2hhbmdlLm5vdGlmeSh0aGlzLmdldFZlbG9jaXR5KCkpKX0sdGhpcy5oYXNBbmltYXRlZD0hMSx0aGlzLnByZXY9dGhpcy5jdXJyZW50PWUsdGhpcy5jYW5UcmFja1ZlbG9jaXR5PShuPXRoaXMuY3VycmVudCwhaXNOYU4ocGFyc2VGbG9hdChuKSkpLHRoaXMub3duZXI9dC5vd25lcn1vbkNoYW5nZShlKXtyZXR1cm4gdGhpcy5vbihcImNoYW5nZVwiLGUpfW9uKGUsdCl7cmV0dXJuIHRoaXMuZXZlbnRzW2VdfHwodGhpcy5ldmVudHNbZV09bmV3IHZyKSx0aGlzLmV2ZW50c1tlXS5hZGQodCl9Y2xlYXJMaXN0ZW5lcnMoKXtmb3IoY29uc3QgZSBpbiB0aGlzLmV2ZW50cyl0aGlzLmV2ZW50c1tlXS5jbGVhcigpfWF0dGFjaChlKXt0aGlzLnBhc3NpdmVFZmZlY3Q9ZX1zZXQoZSx0PSEwKXt0JiZ0aGlzLnBhc3NpdmVFZmZlY3Q/dGhpcy5wYXNzaXZlRWZmZWN0KGUsdGhpcy51cGRhdGVBbmROb3RpZnkpOnRoaXMudXBkYXRlQW5kTm90aWZ5KGUsdCl9c2V0V2l0aFZlbG9jaXR5KGUsdCxuKXt0aGlzLnNldCh0KSx0aGlzLnByZXY9ZSx0aGlzLnRpbWVEZWx0YT1ufWdldCgpe3JldHVybiB0aGlzLmN1cnJlbnR9Z2V0UHJldmlvdXMoKXtyZXR1cm4gdGhpcy5wcmV2fWdldFZlbG9jaXR5KCl7cmV0dXJuIHRoaXMuY2FuVHJhY2tWZWxvY2l0eT9ncihwYXJzZUZsb2F0KHRoaXMuY3VycmVudCktcGFyc2VGbG9hdCh0aGlzLnByZXYpLHRoaXMudGltZURlbHRhKTowfXN0YXJ0KGUpe3JldHVybiB0aGlzLnN0b3AoKSxuZXcgUHJvbWlzZSgodD0+e3RoaXMuaGFzQW5pbWF0ZWQ9ITAsdGhpcy5zdG9wQW5pbWF0aW9uPWUodCksdGhpcy5ldmVudHMuYW5pbWF0aW9uU3RhcnQmJnRoaXMuZXZlbnRzLmFuaW1hdGlvblN0YXJ0Lm5vdGlmeSgpfSkpLnRoZW4oKCgpPT57dGhpcy5ldmVudHMuYW5pbWF0aW9uQ29tcGxldGUmJnRoaXMuZXZlbnRzLmFuaW1hdGlvbkNvbXBsZXRlLm5vdGlmeSgpLHRoaXMuY2xlYXJBbmltYXRpb24oKX0pKX1zdG9wKCl7dGhpcy5zdG9wQW5pbWF0aW9uJiYodGhpcy5zdG9wQW5pbWF0aW9uKCksdGhpcy5ldmVudHMuYW5pbWF0aW9uQ2FuY2VsJiZ0aGlzLmV2ZW50cy5hbmltYXRpb25DYW5jZWwubm90aWZ5KCkpLHRoaXMuY2xlYXJBbmltYXRpb24oKX1pc0FuaW1hdGluZygpe3JldHVybiEhdGhpcy5zdG9wQW5pbWF0aW9ufWNsZWFyQW5pbWF0aW9uKCl7dGhpcy5zdG9wQW5pbWF0aW9uPW51bGx9ZGVzdHJveSgpe3RoaXMuY2xlYXJMaXN0ZW5lcnMoKSx0aGlzLnN0b3AoKX19ZnVuY3Rpb24gRXIoZSx0KXtyZXR1cm4gbmV3IHlyKGUsdCl9Y29uc3QgX3I9KGUsdCk9Pm49PkJvb2xlYW4oYnQobikmJlN0LnRlc3QobikmJm4uc3RhcnRzV2l0aChlKXx8dCYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sdCkpLElyPShlLHQsbik9PnI9PntpZighYnQocikpcmV0dXJuIHI7Y29uc3RbaSxvLGEsc109ci5tYXRjaChfdCk7cmV0dXJue1tlXTpwYXJzZUZsb2F0KGkpLFt0XTpwYXJzZUZsb2F0KG8pLFtuXTpwYXJzZUZsb2F0KGEpLGFscGhhOnZvaWQgMCE9PXM/cGFyc2VGbG9hdChzKToxfX0sU3I9ey4uLnZ0LHRyYW5zZm9ybTplPT5NYXRoLnJvdW5kKChlPT5odCgwLDI1NSxlKSkoZSkpfSxicj17dGVzdDpfcihcInJnYlwiLFwicmVkXCIpLHBhcnNlOklyKFwicmVkXCIsXCJncmVlblwiLFwiYmx1ZVwiKSx0cmFuc2Zvcm06KHtyZWQ6ZSxncmVlbjp0LGJsdWU6bixhbHBoYTpyPTF9KT0+XCJyZ2JhKFwiK1NyLnRyYW5zZm9ybShlKStcIiwgXCIrU3IudHJhbnNmb3JtKHQpK1wiLCBcIitTci50cmFuc2Zvcm0obikrXCIsIFwiK0V0KGd0LnRyYW5zZm9ybShyKSkrXCIpXCJ9LFRyPXt0ZXN0Ol9yKFwiI1wiKSxwYXJzZTpmdW5jdGlvbihlKXtsZXQgdD1cIlwiLG49XCJcIixyPVwiXCIsaT1cIlwiO3JldHVybiBlLmxlbmd0aD41Pyh0PWUuc3Vic3RyaW5nKDEsMyksbj1lLnN1YnN0cmluZygzLDUpLHI9ZS5zdWJzdHJpbmcoNSw3KSxpPWUuc3Vic3RyaW5nKDcsOSkpOih0PWUuc3Vic3RyaW5nKDEsMiksbj1lLnN1YnN0cmluZygyLDMpLHI9ZS5zdWJzdHJpbmcoMyw0KSxpPWUuc3Vic3RyaW5nKDQsNSksdCs9dCxuKz1uLHIrPXIsaSs9aSkse3JlZDpwYXJzZUludCh0LDE2KSxncmVlbjpwYXJzZUludChuLDE2KSxibHVlOnBhcnNlSW50KHIsMTYpLGFscGhhOmk/cGFyc2VJbnQoaSwxNikvMjU1OjF9fSx0cmFuc2Zvcm06YnIudHJhbnNmb3JtfSxDcj17dGVzdDpfcihcImhzbFwiLFwiaHVlXCIpLHBhcnNlOklyKFwiaHVlXCIsXCJzYXR1cmF0aW9uXCIsXCJsaWdodG5lc3NcIiksdHJhbnNmb3JtOih7aHVlOmUsc2F0dXJhdGlvbjp0LGxpZ2h0bmVzczpuLGFscGhhOnI9MX0pPT5cImhzbGEoXCIrTWF0aC5yb3VuZChlKStcIiwgXCIrQXQudHJhbnNmb3JtKEV0KHQpKStcIiwgXCIrQXQudHJhbnNmb3JtKEV0KG4pKStcIiwgXCIrRXQoZ3QudHJhbnNmb3JtKHIpKStcIilcIn0sQXI9e3Rlc3Q6ZT0+YnIudGVzdChlKXx8VHIudGVzdChlKXx8Q3IudGVzdChlKSxwYXJzZTplPT5ici50ZXN0KGUpP2JyLnBhcnNlKGUpOkNyLnRlc3QoZSk/Q3IucGFyc2UoZSk6VHIucGFyc2UoZSksdHJhbnNmb3JtOmU9PmJ0KGUpP2U6ZS5oYXNPd25Qcm9wZXJ0eShcInJlZFwiKT9ici50cmFuc2Zvcm0oZSk6Q3IudHJhbnNmb3JtKGUpfSxScj1cIiR7Y31cIixrcj1cIiR7bn1cIjtmdW5jdGlvbiBPcihlKXtcIm51bWJlclwiPT10eXBlb2YgZSYmKGU9YCR7ZX1gKTtjb25zdCB0PVtdO2xldCBuPTAscj0wO2NvbnN0IGk9ZS5tYXRjaChJdCk7aSYmKG49aS5sZW5ndGgsZT1lLnJlcGxhY2UoSXQsUnIpLHQucHVzaCguLi5pLm1hcChBci5wYXJzZSkpKTtjb25zdCBvPWUubWF0Y2goX3QpO3JldHVybiBvJiYocj1vLmxlbmd0aCxlPWUucmVwbGFjZShfdCxrciksdC5wdXNoKC4uLm8ubWFwKHZ0LnBhcnNlKSkpLHt2YWx1ZXM6dCxudW1Db2xvcnM6bixudW1OdW1iZXJzOnIsdG9rZW5pc2VkOmV9fWZ1bmN0aW9uIE5yKGUpe3JldHVybiBPcihlKS52YWx1ZXN9ZnVuY3Rpb24gd3IoZSl7Y29uc3R7dmFsdWVzOnQsbnVtQ29sb3JzOm4sdG9rZW5pc2VkOnJ9PU9yKGUpLGk9dC5sZW5ndGg7cmV0dXJuIGU9PntsZXQgdD1yO2ZvcihsZXQgcj0wO3I8aTtyKyspdD10LnJlcGxhY2UocjxuP1JyOmtyLHI8bj9Bci50cmFuc2Zvcm0oZVtyXSk6RXQoZVtyXSkpO3JldHVybiB0fX1jb25zdCBEcj1lPT5cIm51bWJlclwiPT10eXBlb2YgZT8wOmUsUHI9e3Rlc3Q6ZnVuY3Rpb24oZSl7dmFyIHQsbjtyZXR1cm4gaXNOYU4oZSkmJmJ0KGUpJiYoKG51bGw9PT0odD1lLm1hdGNoKF90KSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQubGVuZ3RoKXx8MCkrKChudWxsPT09KG49ZS5tYXRjaChJdCkpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmxlbmd0aCl8fDApPjB9LHBhcnNlOk5yLGNyZWF0ZVRyYW5zZm9ybWVyOndyLGdldEFuaW1hdGFibGVOb25lOmZ1bmN0aW9uKGUpe2NvbnN0IHQ9TnIoZSk7cmV0dXJuIHdyKGUpKHQubWFwKERyKSl9fSxNcj1uZXcgU2V0KFtcImJyaWdodG5lc3NcIixcImNvbnRyYXN0XCIsXCJzYXR1cmF0ZVwiLFwib3BhY2l0eVwiXSk7ZnVuY3Rpb24gTHIoZSl7Y29uc3RbdCxuXT1lLnNsaWNlKDAsLTEpLnNwbGl0KFwiKFwiKTtpZihcImRyb3Atc2hhZG93XCI9PT10KXJldHVybiBlO2NvbnN0W3JdPW4ubWF0Y2goX3QpfHxbXTtpZighcilyZXR1cm4gZTtjb25zdCBpPW4ucmVwbGFjZShyLFwiXCIpO2xldCBvPU1yLmhhcyh0KT8xOjA7cmV0dXJuIHIhPT1uJiYobyo9MTAwKSx0K1wiKFwiK28raStcIilcIn1jb25zdCBVcj0vKFthLXotXSopXFwoLio/XFwpL2cseHI9ey4uLlByLGdldEFuaW1hdGFibGVOb25lOmU9Pntjb25zdCB0PWUubWF0Y2goVXIpO3JldHVybiB0P3QubWFwKExyKS5qb2luKFwiIFwiKTplfX0sRnI9ey4uLkR0LGNvbG9yOkFyLGJhY2tncm91bmRDb2xvcjpBcixvdXRsaW5lQ29sb3I6QXIsZmlsbDpBcixzdHJva2U6QXIsYm9yZGVyQ29sb3I6QXIsYm9yZGVyVG9wQ29sb3I6QXIsYm9yZGVyUmlnaHRDb2xvcjpBcixib3JkZXJCb3R0b21Db2xvcjpBcixib3JkZXJMZWZ0Q29sb3I6QXIsZmlsdGVyOnhyLFdlYmtpdEZpbHRlcjp4cn0sQnI9ZT0+RnJbZV07ZnVuY3Rpb24gVnIoZSx0KXt2YXIgbjtsZXQgcj1CcihlKTtyZXR1cm4gciE9PXhyJiYocj1QciksbnVsbD09PShuPXIuZ2V0QW5pbWF0YWJsZU5vbmUpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmNhbGwocix0KX1jb25zdCBHcj1lPT50PT50LnRlc3QoZSksSHI9W3Z0LFJ0LEF0LEN0LE90LGt0LHt0ZXN0OmU9PlwiYXV0b1wiPT09ZSxwYXJzZTplPT5lfV0sV3I9ZT0+SHIuZmluZChHcihlKSksanI9Wy4uLkhyLEFyLFByXTtmdW5jdGlvbiBacihlLHQsbil7Y29uc3Qgcj1lLmdldFByb3BzKCk7cmV0dXJuIHRuKHIsdCx2b2lkIDAhPT1uP246ci5jdXN0b20sZnVuY3Rpb24oZSl7Y29uc3QgdD17fTtyZXR1cm4gZS52YWx1ZXMuZm9yRWFjaCgoKGUsbik9PnRbbl09ZS5nZXQoKSkpLHR9KGUpLGZ1bmN0aW9uKGUpe2NvbnN0IHQ9e307cmV0dXJuIGUudmFsdWVzLmZvckVhY2goKChlLG4pPT50W25dPWUuZ2V0VmVsb2NpdHkoKSkpLHR9KGUpKX1mdW5jdGlvbiB6cihlLHQsbil7ZS5oYXNWYWx1ZSh0KT9lLmdldFZhbHVlKHQpLnNldChuKTplLmFkZFZhbHVlKHQsRXIobikpfWZ1bmN0aW9uIEtyKGUsdCl7Y29uc3Qgbj1acihlLHQpO2xldHt0cmFuc2l0aW9uRW5kOnI9e30sdHJhbnNpdGlvbjppPXt9LC4uLm99PW4/ZS5tYWtlVGFyZ2V0QW5pbWF0YWJsZShuLCExKTp7fTtvPXsuLi5vLC4uLnJ9O2Zvcihjb25zdCB0IGluIG8penIoZSx0LG9uKG9bdF0pKX1mdW5jdGlvbiBZcihlLHQpe1suLi50XS5yZXZlcnNlKCkuZm9yRWFjaCgobj0+e3ZhciByO2NvbnN0IGk9ZS5nZXRWYXJpYW50KG4pO2kmJktyKGUsaSksbnVsbD09PShyPWUudmFyaWFudENoaWxkcmVuKXx8dm9pZCAwPT09cnx8ci5mb3JFYWNoKChlPT57WXIoZSx0KX0pKX0pKX1mdW5jdGlvbiBxcihlLHQpe2lmKHQpcmV0dXJuKHRbZV18fHQuZGVmYXVsdHx8dCkuZnJvbX1mdW5jdGlvbiBYcihlKXtyZXR1cm4gQm9vbGVhbih1dChlKSYmZS5hZGQpfWNvbnN0IFFyPShlLHQpPT5gJHtlfTogJHt0fWA7ZnVuY3Rpb24gSnIoZSx0KXtjb25zdHtNb3Rpb25BcHBlYXJBbmltYXRpb25zOm59PXdpbmRvdyxyPVFyKGUsY3QuaGFzKHQpP1widHJhbnNmb3JtXCI6dCksaT1uJiZuLmdldChyKTtyZXR1cm4gaT8oY3IucmVuZGVyKCgoKT0+e3RyeXtpLmNhbmNlbCgpLG4uZGVsZXRlKHIpfWNhdGNoKGUpe319KSksaS5jdXJyZW50VGltZXx8MCk6MH1jb25zdCAkcj1cImRhdGEtXCIrcXQoXCJmcmFtZXJBcHBlYXJJZFwiKTt2YXIgZWk9ZnVuY3Rpb24oKXt9O2NvbnN0IHRpPWU9PjFlMyplLG5pPWU9PnQ9PnQ8PS41P2UoMip0KS8yOigyLWUoMiooMS10KSkpLzIscmk9ZT0+dD0+MS1lKDEtdCksaWk9ZT0+ZSplLG9pPXJpKGlpKSxhaT1uaShpaSksc2k9KGUsdCxuKT0+LW4qZStuKnQrZTtmdW5jdGlvbiBjaShlLHQsbil7cmV0dXJuIG48MCYmKG4rPTEpLG4+MSYmKG4tPTEpLG48MS82P2UrNioodC1lKSpuOm48LjU/dDpuPDIvMz9lKyh0LWUpKigyLzMtbikqNjplfWNvbnN0IGxpPShlLHQsbik9Pntjb25zdCByPWUqZTtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgubWF4KDAsbioodCp0LXIpK3IpKX0sdWk9W1RyLGJyLENyXTtmdW5jdGlvbiBkaShlKXtjb25zdCB0PShuPWUsdWkuZmluZCgoZT0+ZS50ZXN0KG4pKSkpO3ZhciBuO2VpKEJvb2xlYW4odCksYCcke2V9JyBpcyBub3QgYW4gYW5pbWF0YWJsZSBjb2xvci4gVXNlIHRoZSBlcXVpdmFsZW50IGNvbG9yIGNvZGUgaW5zdGVhZC5gKTtsZXQgcj10LnBhcnNlKGUpO3JldHVybiB0PT09Q3ImJihyPWZ1bmN0aW9uKHtodWU6ZSxzYXR1cmF0aW9uOnQsbGlnaHRuZXNzOm4sYWxwaGE6cn0pe2UvPTM2MCxuLz0xMDA7bGV0IGk9MCxvPTAsYT0wO2lmKHQvPTEwMCl7Y29uc3Qgcj1uPC41P24qKDErdCk6bit0LW4qdCxzPTIqbi1yO2k9Y2kocyxyLGUrMS8zKSxvPWNpKHMscixlKSxhPWNpKHMscixlLTEvMyl9ZWxzZSBpPW89YT1uO3JldHVybntyZWQ6TWF0aC5yb3VuZCgyNTUqaSksZ3JlZW46TWF0aC5yb3VuZCgyNTUqbyksYmx1ZTpNYXRoLnJvdW5kKDI1NSphKSxhbHBoYTpyfX0ocikpLHJ9Y29uc3QgZmk9KGUsdCk9Pntjb25zdCBuPWRpKGUpLHI9ZGkodCksaT17Li4ubn07cmV0dXJuIGU9PihpLnJlZD1saShuLnJlZCxyLnJlZCxlKSxpLmdyZWVuPWxpKG4uZ3JlZW4sci5ncmVlbixlKSxpLmJsdWU9bGkobi5ibHVlLHIuYmx1ZSxlKSxpLmFscGhhPXNpKG4uYWxwaGEsci5hbHBoYSxlKSxici50cmFuc2Zvcm0oaSkpfTtmdW5jdGlvbiBwaShlLHQpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlP249PnNpKGUsdCxuKTpBci50ZXN0KGUpP2ZpKGUsdCk6dmkoZSx0KX1jb25zdCBtaT0oZSx0KT0+e2NvbnN0IG49Wy4uLmVdLHI9bi5sZW5ndGgsaT1lLm1hcCgoKGUsbik9PnBpKGUsdFtuXSkpKTtyZXR1cm4gZT0+e2ZvcihsZXQgdD0wO3Q8cjt0Kyspblt0XT1pW3RdKGUpO3JldHVybiBufX0saGk9KGUsdCk9Pntjb25zdCBuPXsuLi5lLC4uLnR9LHI9e307Zm9yKGNvbnN0IGkgaW4gbil2b2lkIDAhPT1lW2ldJiZ2b2lkIDAhPT10W2ldJiYocltpXT1waShlW2ldLHRbaV0pKTtyZXR1cm4gZT0+e2Zvcihjb25zdCB0IGluIHIpblt0XT1yW3RdKGUpO3JldHVybiBufX0sdmk9KGUsdCk9Pntjb25zdCBuPVByLmNyZWF0ZVRyYW5zZm9ybWVyKHQpLHI9T3IoZSksaT1Pcih0KTtyZXR1cm4gci5udW1Db2xvcnM9PT1pLm51bUNvbG9ycyYmci5udW1OdW1iZXJzPj1pLm51bU51bWJlcnM/Rm4obWkoci52YWx1ZXMsaS52YWx1ZXMpLG4pOm49PmAke24+MD90OmV9YH0sZ2k9KGUsdCxuKT0+e2NvbnN0IHI9dC1lO3JldHVybiAwPT09cj8xOihuLWUpL3J9LHlpPShlLHQpPT5uPT5zaShlLHQsbik7ZnVuY3Rpb24gRWkoZSx0LHtjbGFtcDpuPSEwLGVhc2U6cixtaXhlcjppfT17fSl7Y29uc3Qgbz1lLmxlbmd0aDtlaShvPT09dC5sZW5ndGgsXCJCb3RoIGlucHV0IGFuZCBvdXRwdXQgcmFuZ2VzIG11c3QgYmUgdGhlIHNhbWUgbGVuZ3RoXCIpLGVpKCFyfHwhQXJyYXkuaXNBcnJheShyKXx8ci5sZW5ndGg9PT1vLTEsXCJBcnJheSBvZiBlYXNpbmcgZnVuY3Rpb25zIG11c3QgYmUgb2YgbGVuZ3RoIGBpbnB1dC5sZW5ndGggLSAxYCwgYXMgaXQgYXBwbGllcyB0byB0aGUgdHJhbnNpdGlvbnMgKipiZXR3ZWVuKiogdGhlIGRlZmluZWQgdmFsdWVzLlwiKSxlWzBdPmVbby0xXSYmKGU9Wy4uLmVdLnJldmVyc2UoKSx0PVsuLi50XS5yZXZlcnNlKCkpO2NvbnN0IGE9ZnVuY3Rpb24oZSx0LG4pe2NvbnN0IHI9W10saT1ufHwoXCJudW1iZXJcIj09dHlwZW9mKG89ZVswXSk/eWk6XCJzdHJpbmdcIj09dHlwZW9mIG8/QXIudGVzdChvKT9maTp2aTpBcnJheS5pc0FycmF5KG8pP21pOlwib2JqZWN0XCI9PXR5cGVvZiBvP2hpOnlpKTt2YXIgbztjb25zdCBhPWUubGVuZ3RoLTE7Zm9yKGxldCBuPTA7bjxhO24rKyl7bGV0IG89aShlW25dLGVbbisxXSk7aWYodCl7Y29uc3QgZT1BcnJheS5pc0FycmF5KHQpP3Rbbl06dDtvPUZuKGUsbyl9ci5wdXNoKG8pfXJldHVybiByfSh0LHIsaSkscz1hLmxlbmd0aCxjPXQ9PntsZXQgbj0wO2lmKHM+MSlmb3IoO248ZS5sZW5ndGgtMiYmISh0PGVbbisxXSk7bisrKTtjb25zdCByPWdpKGVbbl0sZVtuKzFdLHQpO3JldHVybiBhW25dKHIpfTtyZXR1cm4gbj90PT5jKGh0KGVbMF0sZVtvLTFdLHQpKTpjfWNvbnN0IF9pPWU9PmUsSWk9KGUsdCxuKT0+KCgoMS0zKm4rMyp0KSplKygzKm4tNip0KSkqZSszKnQpKmU7ZnVuY3Rpb24gU2koZSx0LG4scil7cmV0dXJuIGU9PT10JiZuPT09cj9faTppPT4wPT09aXx8MT09PWk/aTpJaShmdW5jdGlvbihlLHQsbixyLGkpe2xldCBvLGEscz0wO2Rve2E9dCsobi10KS8yLG89SWkoYSxyLGkpLWUsbz4wP249YTp0PWF9d2hpbGUoTWF0aC5hYnMobyk+MWUtNyYmKytzPDEyKTtyZXR1cm4gYX0oaSwwLDEsZSxuKSx0LHIpfWNvbnN0IGJpPWU9PjEtTWF0aC5zaW4oTWF0aC5hY29zKGUpKSxUaT1yaShiaSksQ2k9bmkoVGkpLEFpPVNpKC4zMywxLjUzLC42OSwuOTkpLFJpPXJpKEFpKSxraT1uaShSaSksT2k9e2xpbmVhcjpfaSxlYXNlSW46aWksZWFzZUluT3V0OmFpLGVhc2VPdXQ6b2ksY2lyY0luOmJpLGNpcmNJbk91dDpDaSxjaXJjT3V0OlRpLGJhY2tJbjpSaSxiYWNrSW5PdXQ6a2ksYmFja091dDpBaSxhbnRpY2lwYXRlOmU9PihlKj0yKTwxPy41KlJpKGUpOi41KigyLU1hdGgucG93KDIsLTEwKihlLTEpKSl9LE5pPWU9PntpZihBcnJheS5pc0FycmF5KGUpKXtlaSg0PT09ZS5sZW5ndGgsXCJDdWJpYyBiZXppZXIgYXJyYXlzIG11c3QgY29udGFpbiBmb3VyIG51bWVyaWNhbCB2YWx1ZXMuXCIpO2NvbnN0W3QsbixyLGldPWU7cmV0dXJuIFNpKHQsbixyLGkpfXJldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlPyhlaSh2b2lkIDAhPT1PaVtlXSxgSW52YWxpZCBlYXNpbmcgdHlwZSAnJHtlfSdgKSxPaVtlXSk6ZX07ZnVuY3Rpb24gd2koZSx0KXtyZXR1cm4gZS5tYXAoKCgpPT50fHxhaSkpLnNwbGljZSgwLGUubGVuZ3RoLTEpfWZ1bmN0aW9uIERpKHtrZXlmcmFtZXM6ZSxlYXNlOnQ9YWksdGltZXM6bixkdXJhdGlvbjpyPTMwMH0pe2U9Wy4uLmVdO2NvbnN0IGk9RGlbMF0sbz0oZT0+QXJyYXkuaXNBcnJheShlKSYmXCJudW1iZXJcIiE9dHlwZW9mIGVbMF0pKHQpP3QubWFwKE5pKTpOaSh0KSxhPXtkb25lOiExLHZhbHVlOml9LHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5tYXAoKGU9PmUqdCkpfShuJiZuLmxlbmd0aD09PURpLmxlbmd0aD9uOmZ1bmN0aW9uKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7cmV0dXJuIGUubWFwKCgoZSxuKT0+MCE9PW4/bi8odC0xKTowKSl9KGUpLHIpO2Z1bmN0aW9uIGMoKXtyZXR1cm4gRWkocyxlLHtlYXNlOkFycmF5LmlzQXJyYXkobyk/bzp3aShlLG8pfSl9bGV0IGw9YygpO3JldHVybntuZXh0OmU9PihhLnZhbHVlPWwoZSksYS5kb25lPWU+PXIsYSksZmxpcFRhcmdldDooKT0+e2UucmV2ZXJzZSgpLGw9YygpfX19Y29uc3QgUGk9LjAwMTtmdW5jdGlvbiBNaShlLHQpe3JldHVybiBlKk1hdGguc3FydCgxLXQqdCl9Y29uc3QgTGk9W1wiZHVyYXRpb25cIixcImJvdW5jZVwiXSxVaT1bXCJzdGlmZm5lc3NcIixcImRhbXBpbmdcIixcIm1hc3NcIl07ZnVuY3Rpb24geGkoZSx0KXtyZXR1cm4gdC5zb21lKCh0PT52b2lkIDAhPT1lW3RdKSl9ZnVuY3Rpb24gRmkoe2tleWZyYW1lczplLHJlc3RTcGVlZDp0PTIscmVzdERlbHRhOm49LjAxLC4uLnJ9KXtsZXQgaT1lWzBdLG89ZVtlLmxlbmd0aC0xXTtjb25zdCBhPXtkb25lOiExLHZhbHVlOml9LHtzdGlmZm5lc3M6cyxkYW1waW5nOmMsbWFzczpsLHZlbG9jaXR5OnUsZHVyYXRpb246ZCxpc1Jlc29sdmVkRnJvbUR1cmF0aW9uOmZ9PWZ1bmN0aW9uKGUpe2xldCB0PXt2ZWxvY2l0eTowLHN0aWZmbmVzczoxMDAsZGFtcGluZzoxMCxtYXNzOjEsaXNSZXNvbHZlZEZyb21EdXJhdGlvbjohMSwuLi5lfTtpZigheGkoZSxVaSkmJnhpKGUsTGkpKXtjb25zdCBuPWZ1bmN0aW9uKHtkdXJhdGlvbjplPTgwMCxib3VuY2U6dD0uMjUsdmVsb2NpdHk6bj0wLG1hc3M6cj0xfSl7bGV0IGksbyxhPTEtdDthPWh0KC4wNSwxLGEpLGU9aHQoLjAxLDEwLGUvMWUzKSxhPDE/KGk9dD0+e2NvbnN0IHI9dCphLGk9ciplLG89ci1uLHM9TWkodCxhKSxjPU1hdGguZXhwKC1pKTtyZXR1cm4gUGktby9zKmN9LG89dD0+e2NvbnN0IHI9dCphKmUsbz1yKm4rbixzPU1hdGgucG93KGEsMikqTWF0aC5wb3codCwyKSplLGM9TWF0aC5leHAoLXIpLGw9TWkoTWF0aC5wb3codCwyKSxhKTtyZXR1cm4oLWkodCkrUGk+MD8tMToxKSooKG8tcykqYykvbH0pOihpPXQ9Pk1hdGguZXhwKC10KmUpKigodC1uKSplKzEpLVBpLG89dD0+TWF0aC5leHAoLXQqZSkqKGUqZSoobi10KSkpO2NvbnN0IHM9ZnVuY3Rpb24oZSx0LG4pe2xldCByPW47Zm9yKGxldCBuPTE7bjwxMjtuKyspci09ZShyKS90KHIpO3JldHVybiByfShpLG8sNS9lKTtpZihlKj0xZTMsaXNOYU4ocykpcmV0dXJue3N0aWZmbmVzczoxMDAsZGFtcGluZzoxMCxkdXJhdGlvbjplfTt7Y29uc3QgdD1NYXRoLnBvdyhzLDIpKnI7cmV0dXJue3N0aWZmbmVzczp0LGRhbXBpbmc6MiphKk1hdGguc3FydChyKnQpLGR1cmF0aW9uOmV9fX0oZSk7dD17Li4udCwuLi5uLHZlbG9jaXR5OjAsbWFzczoxfSx0LmlzUmVzb2x2ZWRGcm9tRHVyYXRpb249ITB9cmV0dXJuIHR9KHIpO2xldCBwPUJpLG09dT8tdS8xZTM6MDtjb25zdCBoPWMvKDIqTWF0aC5zcXJ0KHMqbCkpO2Z1bmN0aW9uIHYoKXtjb25zdCBlPW8taSx0PU1hdGguc3FydChzL2wpLzFlMztpZih2b2lkIDA9PT1uJiYobj1NYXRoLm1pbihNYXRoLmFicyhvLWkpLzEwMCwuNCkpLGg8MSl7Y29uc3Qgbj1NaSh0LGgpO3A9cj0+e2NvbnN0IGk9TWF0aC5leHAoLWgqdCpyKTtyZXR1cm4gby1pKigobStoKnQqZSkvbipNYXRoLnNpbihuKnIpK2UqTWF0aC5jb3MobipyKSl9fWVsc2UgaWYoMT09PWgpcD1uPT5vLU1hdGguZXhwKC10Km4pKihlKyhtK3QqZSkqbik7ZWxzZXtjb25zdCBuPXQqTWF0aC5zcXJ0KGgqaC0xKTtwPXI9Pntjb25zdCBpPU1hdGguZXhwKC1oKnQqciksYT1NYXRoLm1pbihuKnIsMzAwKTtyZXR1cm4gby1pKigobStoKnQqZSkqTWF0aC5zaW5oKGEpK24qZSpNYXRoLmNvc2goYSkpL259fX1yZXR1cm4gdigpLHtuZXh0OmU9Pntjb25zdCByPXAoZSk7aWYoZilhLmRvbmU9ZT49ZDtlbHNle2xldCBpPW07aWYoMCE9PWUpaWYoaDwxKXtjb25zdCB0PU1hdGgubWF4KDAsZS01KTtpPWdyKHItcCh0KSxlLXQpfWVsc2UgaT0wO2NvbnN0IHM9TWF0aC5hYnMoaSk8PXQsYz1NYXRoLmFicyhvLXIpPD1uO2EuZG9uZT1zJiZjfXJldHVybiBhLnZhbHVlPWEuZG9uZT9vOnIsYX0sZmxpcFRhcmdldDooKT0+e209LW0sW2ksb109W28saV0sdigpfX19RmkubmVlZHNJbnRlcnBvbGF0aW9uPShlLHQpPT5cInN0cmluZ1wiPT10eXBlb2YgZXx8XCJzdHJpbmdcIj09dHlwZW9mIHQ7Y29uc3QgQmk9ZT0+MCxWaT17ZGVjYXk6ZnVuY3Rpb24oe2tleWZyYW1lczplPVswXSx2ZWxvY2l0eTp0PTAscG93ZXI6bj0uOCx0aW1lQ29uc3RhbnQ6cj0zNTAscmVzdERlbHRhOmk9LjUsbW9kaWZ5VGFyZ2V0Om99KXtjb25zdCBhPWVbMF0scz17ZG9uZTohMSx2YWx1ZTphfTtsZXQgYz1uKnQ7Y29uc3QgbD1hK2MsdT12b2lkIDA9PT1vP2w6byhsKTtyZXR1cm4gdSE9PWwmJihjPXUtYSkse25leHQ6ZT0+e2NvbnN0IHQ9LWMqTWF0aC5leHAoLWUvcik7cmV0dXJuIHMuZG9uZT0hKHQ+aXx8dDwtaSkscy52YWx1ZT1zLmRvbmU/dTp1K3Qsc30sZmxpcFRhcmdldDooKT0+e319fSxrZXlmcmFtZXM6RGksdHdlZW46RGksc3ByaW5nOkZpfTtmdW5jdGlvbiBHaShlLHQsbj0wKXtyZXR1cm4gZS10LW59Y29uc3QgSGk9ZT0+e2NvbnN0IHQ9KHtkZWx0YTp0fSk9PmUodCk7cmV0dXJue3N0YXJ0OigpPT5jci51cGRhdGUodCwhMCksc3RvcDooKT0+bHIudXBkYXRlKHQpfX07ZnVuY3Rpb24gV2koe2R1cmF0aW9uOmUsZHJpdmVyOnQ9SGksZWxhcHNlZDpuPTAscmVwZWF0OnI9MCxyZXBlYXRUeXBlOmk9XCJsb29wXCIscmVwZWF0RGVsYXk6bz0wLGtleWZyYW1lczphLGF1dG9wbGF5OnM9ITAsb25QbGF5OmMsb25TdG9wOmwsb25Db21wbGV0ZTp1LG9uUmVwZWF0OmQsb25VcGRhdGU6Zix0eXBlOnA9XCJrZXlmcmFtZXNcIiwuLi5tfSl7dmFyIGgsdjtsZXQgZyx5LEUsXz0wLEk9ZSxTPSExLGI9ITA7Y29uc3QgVD1WaVthLmxlbmd0aD4yP1wia2V5ZnJhbWVzXCI6cF0sQz1hWzBdLEE9YVthLmxlbmd0aC0xXTsobnVsbD09PSh2PShoPVQpLm5lZWRzSW50ZXJwb2xhdGlvbil8fHZvaWQgMD09PXY/dm9pZCAwOnYuY2FsbChoLEMsQSkpJiYoRT1FaShbMCwxMDBdLFtDLEFdLHtjbGFtcDohMX0pLGE9WzAsMTAwXSk7Y29uc3QgUj1UKHsuLi5tLGR1cmF0aW9uOmUsa2V5ZnJhbWVzOmF9KTtyZXR1cm4gcyYmKGMmJmMoKSxnPXQoKGZ1bmN0aW9uKGUpe2lmKGJ8fChlPS1lKSxuKz1lLCFTKXtjb25zdCBlPVIubmV4dChNYXRoLm1heCgwLG4pKTt5PWUudmFsdWUsRSYmKHk9RSh5KSksUz1iP2UuZG9uZTpuPD0wfWYmJmYoeSksUyYmKDA9PT1fJiYoST12b2lkIDAhPT1JP0k6biksXzxyP2Z1bmN0aW9uKGUsdCxuLHIpe3JldHVybiByP2U+PXQrbjplPD0tbn0obixJLG8sYikmJihfKyssXCJyZXZlcnNlXCI9PT1pPyhiPV8lMj09MCxuPWZ1bmN0aW9uKGUsdD0wLG49MCxyPSEwKXtyZXR1cm4gcj9HaSh0Ky1lLHQsbik6dC0oZS10KStufShuLEksbyxiKSk6KG49R2kobixJLG8pLFwibWlycm9yXCI9PT1pJiZSLmZsaXBUYXJnZXQoKSksUz0hMSxkJiZkKCkpOihnLnN0b3AoKSx1JiZ1KCkpKX0pKSxnLnN0YXJ0KCkpLHtzdG9wOigpPT57bCYmbCgpLGcuc3RvcCgpfSxzYW1wbGU6ZT0+Ui5uZXh0KE1hdGgubWF4KDAsZSkpfX1jb25zdCBqaT0oW2UsdCxuLHJdKT0+YGN1YmljLWJlemllcigke2V9LCAke3R9LCAke259LCAke3J9KWAsWmk9e2xpbmVhcjpcImxpbmVhclwiLGVhc2U6XCJlYXNlXCIsZWFzZUluOlwiZWFzZS1pblwiLGVhc2VPdXQ6XCJlYXNlLW91dFwiLGVhc2VJbk91dDpcImVhc2UtaW4tb3V0XCIsY2lyY0luOmppKFswLC42NSwuNTUsMV0pLGNpcmNPdXQ6amkoWy41NSwwLDEsLjQ1XSksYmFja0luOmppKFsuMzEsLjAxLC42NiwtLjU5XSksYmFja091dDpqaShbLjMzLDEuNTMsLjY5LC45OV0pfTtmdW5jdGlvbiB6aShlKXtpZihlKXJldHVybiBBcnJheS5pc0FycmF5KGUpP2ppKGUpOlppW2VdfWZ1bmN0aW9uIEtpKGUsdCl7Y29uc3Qgbj1wZXJmb3JtYW5jZS5ub3coKSxyPSh7dGltZXN0YW1wOml9KT0+e2NvbnN0IG89aS1uO28+PXQmJihsci5yZWFkKHIpLGUoby10KSl9O3JldHVybiBjci5yZWFkKHIsITApLCgpPT5sci5yZWFkKHIpfWZ1bmN0aW9uIFlpKHtrZXlmcmFtZXM6ZSxlbGFwc2VkOnQsb25VcGRhdGU6bixvbkNvbXBsZXRlOnJ9KXtjb25zdCBpPSgpPT4obiYmbihlW2UubGVuZ3RoLTFdKSxyJiZyKCksKCk9Pnt9KTtyZXR1cm4gdD9LaShpLC10KTppKCl9Y29uc3QgcWk9KCk9Pih7dHlwZTpcInNwcmluZ1wiLHN0aWZmbmVzczo1MDAsZGFtcGluZzoyNSxyZXN0U3BlZWQ6MTB9KSxYaT1lPT4oe3R5cGU6XCJzcHJpbmdcIixzdGlmZm5lc3M6NTUwLGRhbXBpbmc6MD09PWU/MipNYXRoLnNxcnQoNTUwKTozMCxyZXN0U3BlZWQ6MTB9KSxRaT0oKT0+KHt0eXBlOlwia2V5ZnJhbWVzXCIsZWFzZTpcImxpbmVhclwiLGR1cmF0aW9uOi4zfSksSmk9e3R5cGU6XCJrZXlmcmFtZXNcIixkdXJhdGlvbjouOH0sJGk9e3g6cWkseTpxaSx6OnFpLHJvdGF0ZTpxaSxyb3RhdGVYOnFpLHJvdGF0ZVk6cWkscm90YXRlWjpxaSxzY2FsZVg6WGksc2NhbGVZOlhpLHNjYWxlOlhpLG9wYWNpdHk6UWksYmFja2dyb3VuZENvbG9yOlFpLGNvbG9yOlFpLGRlZmF1bHQ6WGl9LGVvPShlLHtrZXlmcmFtZXM6dH0pPT50Lmxlbmd0aD4yP0ppOigkaVtlXXx8JGkuZGVmYXVsdCkodFsxXSksdG89KGUsdCk9PiEoXCJ6SW5kZXhcIj09PWV8fFwibnVtYmVyXCIhPXR5cGVvZiB0JiYhQXJyYXkuaXNBcnJheSh0KSYmKFwic3RyaW5nXCIhPXR5cGVvZiB0fHwhUHIudGVzdCh0KXx8dC5zdGFydHNXaXRoKFwidXJsKFwiKSkpO2Z1bmN0aW9uIG5vKGUpe3JldHVybiAwPT09ZXx8XCJzdHJpbmdcIj09dHlwZW9mIGUmJjA9PT1wYXJzZUZsb2F0KGUpJiYtMT09PWUuaW5kZXhPZihcIiBcIil9ZnVuY3Rpb24gcm8oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGU/MDpWcihcIlwiLGUpfWZ1bmN0aW9uIGlvKGUsdCl7cmV0dXJuIGVbdF18fGUuZGVmYXVsdHx8ZX1jb25zdCBvbz17d2FhcGk6KCk9Pk9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKEVsZW1lbnQucHJvdG90eXBlLFwiYW5pbWF0ZVwiKX0sYW89e30sc289e307Zm9yKGNvbnN0IGUgaW4gb28pc29bZV09KCk9Pih2b2lkIDA9PT1hb1tlXSYmKGFvW2VdPW9vW2VdKCkpLGFvW2VdKTtjb25zdCBjbz1uZXcgU2V0KFtcIm9wYWNpdHlcIl0pLGxvPShlLHQsbixyPXt9KT0+aT0+e2NvbnN0IG89aW8ocixlKXx8e30sYT1vLmRlbGF5fHxyLmRlbGF5fHwwO2xldHtlbGFwc2VkOnM9MH09cjtzLT10aShhKTtjb25zdCBjPWZ1bmN0aW9uKGUsdCxuLHIpe2NvbnN0IGk9dG8odCxuKTtsZXQgbz12b2lkIDAhPT1yLmZyb20/ci5mcm9tOmUuZ2V0KCk7cmV0dXJuXCJub25lXCI9PT1vJiZpJiZcInN0cmluZ1wiPT10eXBlb2Ygbj9vPVZyKHQsbik6bm8obykmJlwic3RyaW5nXCI9PXR5cGVvZiBuP289cm8obik6IUFycmF5LmlzQXJyYXkobikmJm5vKG4pJiZcInN0cmluZ1wiPT10eXBlb2YgbyYmKG49cm8obykpLEFycmF5LmlzQXJyYXkobik/KG51bGw9PT1uWzBdJiYoblswXT1vKSxuKTpbbyxuXX0odCxlLG4sbyksbD1jWzBdLHU9Y1tjLmxlbmd0aC0xXSxkPXRvKGUsbCksZj10byhlLHUpO2xldCBwPXtrZXlmcmFtZXM6Yyx2ZWxvY2l0eTp0LmdldFZlbG9jaXR5KCksLi4ubyxlbGFwc2VkOnMsb25VcGRhdGU6ZT0+e3Quc2V0KGUpLG8ub25VcGRhdGUmJm8ub25VcGRhdGUoZSl9LG9uQ29tcGxldGU6KCk9PntpKCksby5vbkNvbXBsZXRlJiZvLm9uQ29tcGxldGUoKX19O2lmKCFkfHwhZnx8ITE9PT1vLnR5cGUpcmV0dXJuIFlpKHApO2lmKFwiaW5lcnRpYVwiPT09by50eXBlKXtjb25zdCBlPWZ1bmN0aW9uKHtrZXlmcmFtZXM6ZSx2ZWxvY2l0eTp0PTAsbWluOm4sbWF4OnIscG93ZXI6aT0uOCx0aW1lQ29uc3RhbnQ6bz03NTAsYm91bmNlU3RpZmZuZXNzOmE9NTAwLGJvdW5jZURhbXBpbmc6cz0xMCxyZXN0RGVsdGE6Yz0xLG1vZGlmeVRhcmdldDpsLGRyaXZlcjp1LG9uVXBkYXRlOmQsb25Db21wbGV0ZTpmLG9uU3RvcDpwfSl7Y29uc3QgbT1lWzBdO2xldCBoO2Z1bmN0aW9uIHYoZSl7cmV0dXJuIHZvaWQgMCE9PW4mJmU8bnx8dm9pZCAwIT09ciYmZT5yfWZ1bmN0aW9uIGcoZSl7cmV0dXJuIHZvaWQgMD09PW4/cjp2b2lkIDA9PT1yfHxNYXRoLmFicyhuLWUpPE1hdGguYWJzKHItZSk/bjpyfWZ1bmN0aW9uIHkoZSl7bnVsbD09aHx8aC5zdG9wKCksaD1XaSh7a2V5ZnJhbWVzOlswLDFdLHZlbG9jaXR5OjAsLi4uZSxkcml2ZXI6dSxvblVwZGF0ZTp0PT57dmFyIG47bnVsbD09ZHx8ZCh0KSxudWxsPT09KG49ZS5vblVwZGF0ZSl8fHZvaWQgMD09PW58fG4uY2FsbChlLHQpfSxvbkNvbXBsZXRlOmYsb25TdG9wOnB9KX1mdW5jdGlvbiBFKGUpe3koe3R5cGU6XCJzcHJpbmdcIixzdGlmZm5lc3M6YSxkYW1waW5nOnMscmVzdERlbHRhOmMsLi4uZX0pfWlmKHYobSkpRSh7dmVsb2NpdHk6dCxrZXlmcmFtZXM6W20sZyhtKV19KTtlbHNle2xldCBlPWkqdCttO3ZvaWQgMCE9PWwmJihlPWwoZSkpO2NvbnN0IHI9ZyhlKSxhPXI9PT1uPy0xOjE7bGV0IHMsdTtjb25zdCBkPWU9PntzPXUsdT1lLHQ9Z3IoZS1zLCRuLmRlbHRhKSwoMT09PWEmJmU+cnx8LTE9PT1hJiZlPHIpJiZFKHtrZXlmcmFtZXM6W2Uscl0sdmVsb2NpdHk6dH0pfTt5KHt0eXBlOlwiZGVjYXlcIixrZXlmcmFtZXM6W20sMF0sdmVsb2NpdHk6dCx0aW1lQ29uc3RhbnQ6byxwb3dlcjppLHJlc3REZWx0YTpjLG1vZGlmeVRhcmdldDpsLG9uVXBkYXRlOnYoZSk/ZDp2b2lkIDB9KX1yZXR1cm57c3RvcDooKT0+bnVsbD09aD92b2lkIDA6aC5zdG9wKCl9fShwKTtyZXR1cm4oKT0+ZS5zdG9wKCl9KGZ1bmN0aW9uKHt3aGVuOmUsZGVsYXk6dCxkZWxheUNoaWxkcmVuOm4sc3RhZ2dlckNoaWxkcmVuOnIsc3RhZ2dlckRpcmVjdGlvbjppLHJlcGVhdDpvLHJlcGVhdFR5cGU6YSxyZXBlYXREZWxheTpzLGZyb206YywuLi5sfSl7cmV0dXJuISFPYmplY3Qua2V5cyhsKS5sZW5ndGh9KShvKXx8KHA9ey4uLnAsLi4uZW8oZSxwKX0pLHAuZHVyYXRpb24mJihwLmR1cmF0aW9uPXRpKHAuZHVyYXRpb24pKSxwLnJlcGVhdERlbGF5JiYocC5yZXBlYXREZWxheT10aShwLnJlcGVhdERlbGF5KSk7Y29uc3QgbT10Lm93bmVyLGg9bSYmbS5jdXJyZW50O2lmKHNvLndhYXBpKCkmJmNvLmhhcyhlKSYmIXAucmVwZWF0RGVsYXkmJlwibWlycm9yXCIhPT1wLnJlcGVhdFR5cGUmJjAhPT1wLmRhbXBpbmcmJm0mJmggaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmIW0uZ2V0UHJvcHMoKS5vblVwZGF0ZSlyZXR1cm4gZnVuY3Rpb24oZSx0LHtvblVwZGF0ZTpuLG9uQ29tcGxldGU6ciwuLi5pfSl7bGV0e2tleWZyYW1lczpvLGR1cmF0aW9uOmE9LjMsZWxhcHNlZDpzPTAsZWFzZTpjfT1pO2lmKFwic3ByaW5nXCI9PT1pLnR5cGV8fCEoIShsPWkuZWFzZSl8fEFycmF5LmlzQXJyYXkobCl8fFwic3RyaW5nXCI9PXR5cGVvZiBsJiZaaVtsXSkpe2NvbnN0IGU9V2koaSk7bGV0IHQ9e2RvbmU6ITEsdmFsdWU6b1swXX07Y29uc3Qgbj1bXTtsZXQgcj0wO2Zvcig7IXQuZG9uZTspdD1lLnNhbXBsZShyKSxuLnB1c2godC52YWx1ZSkscis9MTA7bz1uLGE9ci0xMCxjPVwibGluZWFyXCJ9dmFyIGw7Y29uc3QgdT1mdW5jdGlvbihlLHQsbix7ZGVsYXk6cj0wLGR1cmF0aW9uOmkscmVwZWF0Om89MCxyZXBlYXRUeXBlOmE9XCJsb29wXCIsZWFzZTpzLHRpbWVzOmN9PXt9KXtyZXR1cm4gZS5hbmltYXRlKHtbdF06bixvZmZzZXQ6Y30se2RlbGF5OnIsZHVyYXRpb246aSxlYXNpbmc6emkocyksZmlsbDpcImJvdGhcIixpdGVyYXRpb25zOm8rMSxkaXJlY3Rpb246XCJyZXZlcnNlXCI9PT1hP1wiYWx0ZXJuYXRlXCI6XCJub3JtYWxcIn0pfShlLm93bmVyLmN1cnJlbnQsdCxvLHsuLi5pLGRlbGF5Oi1zLGR1cmF0aW9uOmEsZWFzZTpjfSk7cmV0dXJuIHUub25maW5pc2g9KCk9PntlLnNldChvW28ubGVuZ3RoLTFdKSxyJiZyKCl9LCgpPT57Y29uc3R7Y3VycmVudFRpbWU6dH09dTtpZih0KXtjb25zdCBuPVdpKGkpO2Uuc2V0V2l0aFZlbG9jaXR5KG4uc2FtcGxlKHQtMTApLnZhbHVlLG4uc2FtcGxlKHQpLnZhbHVlLDEwKX1jci51cGRhdGUoKCgpPT51LmNhbmNlbCgpKSl9fSh0LGUscCk7e2NvbnN0IGU9V2kocCk7cmV0dXJuKCk9PmUuc3RvcCgpfX07ZnVuY3Rpb24gdW8oZSx0LG49e30pe2xldCByO2lmKGUubm90aWZ5KFwiQW5pbWF0aW9uU3RhcnRcIix0KSxBcnJheS5pc0FycmF5KHQpKXtjb25zdCBpPXQubWFwKCh0PT5mbyhlLHQsbikpKTtyPVByb21pc2UuYWxsKGkpfWVsc2UgaWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpcj1mbyhlLHQsbik7ZWxzZXtjb25zdCBpPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/WnIoZSx0LG4uY3VzdG9tKTp0O3I9cG8oZSxpLG4pfXJldHVybiByLnRoZW4oKCgpPT5lLm5vdGlmeShcIkFuaW1hdGlvbkNvbXBsZXRlXCIsdCkpKX1mdW5jdGlvbiBmbyhlLHQsbj17fSl7dmFyIHI7Y29uc3QgaT1acihlLHQsbi5jdXN0b20pO2xldHt0cmFuc2l0aW9uOm89ZS5nZXREZWZhdWx0VHJhbnNpdGlvbigpfHx7fX09aXx8e307bi50cmFuc2l0aW9uT3ZlcnJpZGUmJihvPW4udHJhbnNpdGlvbk92ZXJyaWRlKTtjb25zdCBhPWk/KCk9PnBvKGUsaSxuKTooKT0+UHJvbWlzZS5yZXNvbHZlKCkscz0obnVsbD09PShyPWUudmFyaWFudENoaWxkcmVuKXx8dm9pZCAwPT09cj92b2lkIDA6ci5zaXplKT8ocj0wKT0+e2NvbnN0e2RlbGF5Q2hpbGRyZW46aT0wLHN0YWdnZXJDaGlsZHJlbjphLHN0YWdnZXJEaXJlY3Rpb246c309bztyZXR1cm4gZnVuY3Rpb24oZSx0LG49MCxyPTAsaT0xLG8pe2NvbnN0IGE9W10scz0oZS52YXJpYW50Q2hpbGRyZW4uc2l6ZS0xKSpyLGM9MT09PWk/KGU9MCk9PmUqcjooZT0wKT0+cy1lKnI7cmV0dXJuIEFycmF5LmZyb20oZS52YXJpYW50Q2hpbGRyZW4pLnNvcnQobW8pLmZvckVhY2goKChlLHIpPT57YS5wdXNoKGZvKGUsdCx7Li4ubyxkZWxheTpuK2Mocil9KS50aGVuKCgoKT0+ZS5ub3RpZnkoXCJBbmltYXRpb25Db21wbGV0ZVwiLHQpKSkpfSkpLFByb21pc2UuYWxsKGEpfShlLHQsaStyLGEscyxuKX06KCk9PlByb21pc2UucmVzb2x2ZSgpLHt3aGVuOmN9PW87aWYoYyl7Y29uc3RbZSx0XT1cImJlZm9yZUNoaWxkcmVuXCI9PT1jP1thLHNdOltzLGFdO3JldHVybiBlKCkudGhlbih0KX1yZXR1cm4gUHJvbWlzZS5hbGwoW2EoKSxzKG4uZGVsYXkpXSl9ZnVuY3Rpb24gcG8oZSx0LHtkZWxheTpuPTAsdHJhbnNpdGlvbk92ZXJyaWRlOnIsdHlwZTppfT17fSl7dmFyIG87bGV0e3RyYW5zaXRpb246YT1lLmdldERlZmF1bHRUcmFuc2l0aW9uKCksdHJhbnNpdGlvbkVuZDpzLC4uLmN9PWUubWFrZVRhcmdldEFuaW1hdGFibGUodCk7Y29uc3QgbD1lLmdldFZhbHVlKFwid2lsbENoYW5nZVwiKTtyJiYoYT1yKTtjb25zdCB1PVtdLGQ9aSYmKG51bGw9PT0obz1lLmFuaW1hdGlvblN0YXRlKXx8dm9pZCAwPT09bz92b2lkIDA6by5nZXRTdGF0ZSgpW2ldKTtmb3IoY29uc3QgdCBpbiBjKXtjb25zdCByPWUuZ2V0VmFsdWUodCksaT1jW3RdO2lmKCFyfHx2b2lkIDA9PT1pfHxkJiZobyhkLHQpKWNvbnRpbnVlO2xldCBvPXtkZWxheTpuLGVsYXBzZWQ6MCwuLi5hfTtpZihlLnNob3VsZFJlZHVjZU1vdGlvbiYmY3QuaGFzKHQpJiYobz17Li4ubyx0eXBlOiExLGRlbGF5OjB9KSwhci5oYXNBbmltYXRlZCl7Y29uc3Qgbj1lLmdldFByb3BzKClbJHJdO24mJihvLmVsYXBzZWQ9SnIobix0KSl9bGV0IHM9ci5zdGFydChsbyh0LHIsaSxvKSk7WHIobCkmJihsLmFkZCh0KSxzPXMudGhlbigoKCk9PmwucmVtb3ZlKHQpKSkpLHUucHVzaChzKX1yZXR1cm4gUHJvbWlzZS5hbGwodSkudGhlbigoKCk9PntzJiZLcihlLHMpfSkpfWZ1bmN0aW9uIG1vKGUsdCl7cmV0dXJuIGUuc29ydE5vZGVQb3NpdGlvbih0KX1mdW5jdGlvbiBobyh7cHJvdGVjdGVkS2V5czplLG5lZWRzQW5pbWF0aW5nOnR9LG4pe2NvbnN0IHI9ZS5oYXNPd25Qcm9wZXJ0eShuKSYmITAhPT10W25dO3JldHVybiB0W25dPSExLHJ9Y29uc3Qgdm89W2RuLkFuaW1hdGUsZG4uSW5WaWV3LGRuLkZvY3VzLGRuLkhvdmVyLGRuLlRhcCxkbi5EcmFnLGRuLkV4aXRdLGdvPVsuLi52b10ucmV2ZXJzZSgpLHlvPXZvLmxlbmd0aDtmdW5jdGlvbiBFbyhlPSExKXtyZXR1cm57aXNBY3RpdmU6ZSxwcm90ZWN0ZWRLZXlzOnt9LG5lZWRzQW5pbWF0aW5nOnt9LHByZXZSZXNvbHZlZFZhbHVlczp7fX19Y29uc3QgX289e2FuaW1hdGlvbjpxbigoKHt2aXN1YWxFbGVtZW50OmUsYW5pbWF0ZTp0fSk9PntlLmFuaW1hdGlvblN0YXRlfHwoZS5hbmltYXRpb25TdGF0ZT1mdW5jdGlvbihlKXtsZXQgdD1mdW5jdGlvbihlKXtyZXR1cm4gdD0+UHJvbWlzZS5hbGwodC5tYXAoKCh7YW5pbWF0aW9uOnQsb3B0aW9uczpufSk9PnVvKGUsdCxuKSkpKX0oZSk7Y29uc3Qgbj17W2RuLkFuaW1hdGVdOkVvKCEwKSxbZG4uSW5WaWV3XTpFbygpLFtkbi5Ib3Zlcl06RW8oKSxbZG4uVGFwXTpFbygpLFtkbi5EcmFnXTpFbygpLFtkbi5Gb2N1c106RW8oKSxbZG4uRXhpdF06RW8oKX07bGV0IHI9ITA7Y29uc3QgaT0odCxuKT0+e2NvbnN0IHI9WnIoZSxuKTtpZihyKXtjb25zdHt0cmFuc2l0aW9uOmUsdHJhbnNpdGlvbkVuZDpuLC4uLml9PXI7dD17Li4udCwuLi5pLC4uLm59fXJldHVybiB0fTtmdW5jdGlvbiBvKG8sYSl7Y29uc3Qgcz1lLmdldFByb3BzKCksYz1lLmdldFZhcmlhbnRDb250ZXh0KCEwKXx8e30sbD1bXSx1PW5ldyBTZXQ7bGV0IGQ9e30sZj0xLzA7Zm9yKGxldCB0PTA7dDx5bzt0Kyspe2NvbnN0IGg9Z29bdF0sdj1uW2hdLGc9dm9pZCAwIT09c1toXT9zW2hdOmNbaF0seT1HZShnKSxFPWg9PT1hP3YuaXNBY3RpdmU6bnVsbDshMT09PUUmJihmPXQpO2xldCBfPWc9PT1jW2hdJiZnIT09c1toXSYmeTtpZihfJiZyJiZlLm1hbnVhbGx5QW5pbWF0ZU9uTW91bnQmJihfPSExKSx2LnByb3RlY3RlZEtleXM9ey4uLmR9LCF2LmlzQWN0aXZlJiZudWxsPT09RXx8IWcmJiF2LnByZXZQcm9wfHxIZShnKXx8XCJib29sZWFuXCI9PXR5cGVvZiBnKWNvbnRpbnVlO2NvbnN0IEk9KHA9di5wcmV2UHJvcCxcInN0cmluZ1wiPT10eXBlb2YobT1nKT9tIT09cDohIUFycmF5LmlzQXJyYXkobSkmJiFKbihtLHApKTtsZXQgUz1JfHxoPT09YSYmdi5pc0FjdGl2ZSYmIV8mJnl8fHQ+ZiYmeTtjb25zdCBiPUFycmF5LmlzQXJyYXkoZyk/ZzpbZ107bGV0IFQ9Yi5yZWR1Y2UoaSx7fSk7ITE9PT1FJiYoVD17fSk7Y29uc3R7cHJldlJlc29sdmVkVmFsdWVzOkM9e319PXYsQT17Li4uQywuLi5UfSxSPWU9PntTPSEwLHUuZGVsZXRlKGUpLHYubmVlZHNBbmltYXRpbmdbZV09ITB9O2Zvcihjb25zdCBlIGluIEEpe2NvbnN0IHQ9VFtlXSxuPUNbZV07ZC5oYXNPd25Qcm9wZXJ0eShlKXx8KHQhPT1uP25uKHQpJiZubihuKT8hSm4odCxuKXx8ST9SKGUpOnYucHJvdGVjdGVkS2V5c1tlXT0hMDp2b2lkIDAhPT10P1IoZSk6dS5hZGQoZSk6dm9pZCAwIT09dCYmdS5oYXMoZSk/UihlKTp2LnByb3RlY3RlZEtleXNbZV09ITApfXYucHJldlByb3A9Zyx2LnByZXZSZXNvbHZlZFZhbHVlcz1ULHYuaXNBY3RpdmUmJihkPXsuLi5kLC4uLlR9KSxyJiZlLmJsb2NrSW5pdGlhbEFuaW1hdGlvbiYmKFM9ITEpLFMmJiFfJiZsLnB1c2goLi4uYi5tYXAoKGU9Pih7YW5pbWF0aW9uOmUsb3B0aW9uczp7dHlwZTpoLC4uLm99fSkpKSl9dmFyIHAsbTtpZih1LnNpemUpe2NvbnN0IHQ9e307dS5mb3JFYWNoKChuPT57Y29uc3Qgcj1lLmdldEJhc2VUYXJnZXQobik7dm9pZCAwIT09ciYmKHRbbl09cil9KSksbC5wdXNoKHthbmltYXRpb246dH0pfWxldCBoPUJvb2xlYW4obC5sZW5ndGgpO3JldHVybiByJiYhMT09PXMuaW5pdGlhbCYmIWUubWFudWFsbHlBbmltYXRlT25Nb3VudCYmKGg9ITEpLHI9ITEsaD90KGwpOlByb21pc2UucmVzb2x2ZSgpfXJldHVybnthbmltYXRlQ2hhbmdlczpvLHNldEFjdGl2ZTpmdW5jdGlvbih0LHIsaSl7dmFyIGE7aWYoblt0XS5pc0FjdGl2ZT09PXIpcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO251bGw9PT0oYT1lLnZhcmlhbnRDaGlsZHJlbil8fHZvaWQgMD09PWF8fGEuZm9yRWFjaCgoZT0+e3ZhciBuO3JldHVybiBudWxsPT09KG49ZS5hbmltYXRpb25TdGF0ZSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uc2V0QWN0aXZlKHQscil9KSksblt0XS5pc0FjdGl2ZT1yO2NvbnN0IHM9byhpLHQpO2Zvcihjb25zdCBlIGluIG4pbltlXS5wcm90ZWN0ZWRLZXlzPXt9O3JldHVybiBzfSxzZXRBbmltYXRlRnVuY3Rpb246ZnVuY3Rpb24obil7dD1uKGUpfSxnZXRTdGF0ZTooKT0+bn19KGUpKSxIZSh0KSYmKDAsZC51c2VFZmZlY3QpKCgoKT0+dC5zdWJzY3JpYmUoZSkpLFt0XSl9KSksZXhpdDpxbigoZT0+e2NvbnN0e2N1c3RvbTp0LHZpc3VhbEVsZW1lbnQ6bn09ZSxbcixpXT1RbigpLG89KDAsZC51c2VDb250ZXh0KShVZSk7KDAsZC51c2VFZmZlY3QpKCgoKT0+e24uaXNQcmVzZW50PXI7Y29uc3QgZT1uLmFuaW1hdGlvblN0YXRlJiZuLmFuaW1hdGlvblN0YXRlLnNldEFjdGl2ZShkbi5FeGl0LCFyLHtjdXN0b206byYmby5jdXN0b218fHR9KTtlJiYhciYmZS50aGVuKGkpfSksW3JdKX0pKX0sSW89KGUsdCk9Pk1hdGguYWJzKGUtdCk7Y2xhc3MgU297Y29uc3RydWN0b3IoZSx0LHt0cmFuc2Zvcm1QYWdlUG9pbnQ6bn09e30pe2lmKHRoaXMuc3RhcnRFdmVudD1udWxsLHRoaXMubGFzdE1vdmVFdmVudD1udWxsLHRoaXMubGFzdE1vdmVFdmVudEluZm89bnVsbCx0aGlzLmhhbmRsZXJzPXt9LHRoaXMudXBkYXRlUG9pbnQ9KCk9PntpZighdGhpcy5sYXN0TW92ZUV2ZW50fHwhdGhpcy5sYXN0TW92ZUV2ZW50SW5mbylyZXR1cm47Y29uc3QgZT1Dbyh0aGlzLmxhc3RNb3ZlRXZlbnRJbmZvLHRoaXMuaGlzdG9yeSksdD1udWxsIT09dGhpcy5zdGFydEV2ZW50LG49ZnVuY3Rpb24oZSx0KXtjb25zdCBuPUlvKGUueCx0LngpLHI9SW8oZS55LHQueSk7cmV0dXJuIE1hdGguc3FydChuKioyK3IqKjIpfShlLm9mZnNldCx7eDowLHk6MH0pPj0zO2lmKCF0JiYhbilyZXR1cm47Y29uc3R7cG9pbnQ6cn09ZSx7dGltZXN0YW1wOml9PSRuO3RoaXMuaGlzdG9yeS5wdXNoKHsuLi5yLHRpbWVzdGFtcDppfSk7Y29uc3R7b25TdGFydDpvLG9uTW92ZTphfT10aGlzLmhhbmRsZXJzO3R8fChvJiZvKHRoaXMubGFzdE1vdmVFdmVudCxlKSx0aGlzLnN0YXJ0RXZlbnQ9dGhpcy5sYXN0TW92ZUV2ZW50KSxhJiZhKHRoaXMubGFzdE1vdmVFdmVudCxlKX0sdGhpcy5oYW5kbGVQb2ludGVyTW92ZT0oZSx0KT0+e3RoaXMubGFzdE1vdmVFdmVudD1lLHRoaXMubGFzdE1vdmVFdmVudEluZm89Ym8odCx0aGlzLnRyYW5zZm9ybVBhZ2VQb2ludCksbW4oZSkmJjA9PT1lLmJ1dHRvbnM/dGhpcy5oYW5kbGVQb2ludGVyVXAoZSx0KTpjci51cGRhdGUodGhpcy51cGRhdGVQb2ludCwhMCl9LHRoaXMuaGFuZGxlUG9pbnRlclVwPShlLHQpPT57dGhpcy5lbmQoKTtjb25zdHtvbkVuZDpuLG9uU2Vzc2lvbkVuZDpyfT10aGlzLmhhbmRsZXJzLGk9Q28oYm8odCx0aGlzLnRyYW5zZm9ybVBhZ2VQb2ludCksdGhpcy5oaXN0b3J5KTt0aGlzLnN0YXJ0RXZlbnQmJm4mJm4oZSxpKSxyJiZyKGUsaSl9LGhuKGUpJiZlLnRvdWNoZXMubGVuZ3RoPjEpcmV0dXJuO3RoaXMuaGFuZGxlcnM9dCx0aGlzLnRyYW5zZm9ybVBhZ2VQb2ludD1uO2NvbnN0IHI9Ym8oRW4oZSksdGhpcy50cmFuc2Zvcm1QYWdlUG9pbnQpLHtwb2ludDppfT1yLHt0aW1lc3RhbXA6b309JG47dGhpcy5oaXN0b3J5PVt7Li4uaSx0aW1lc3RhbXA6b31dO2NvbnN0e29uU2Vzc2lvblN0YXJ0OmF9PXQ7YSYmYShlLENvKHIsdGhpcy5oaXN0b3J5KSksdGhpcy5yZW1vdmVMaXN0ZW5lcnM9Rm4oUm4od2luZG93LFwicG9pbnRlcm1vdmVcIix0aGlzLmhhbmRsZVBvaW50ZXJNb3ZlKSxSbih3aW5kb3csXCJwb2ludGVydXBcIix0aGlzLmhhbmRsZVBvaW50ZXJVcCksUm4od2luZG93LFwicG9pbnRlcmNhbmNlbFwiLHRoaXMuaGFuZGxlUG9pbnRlclVwKSl9dXBkYXRlSGFuZGxlcnMoZSl7dGhpcy5oYW5kbGVycz1lfWVuZCgpe3RoaXMucmVtb3ZlTGlzdGVuZXJzJiZ0aGlzLnJlbW92ZUxpc3RlbmVycygpLGxyLnVwZGF0ZSh0aGlzLnVwZGF0ZVBvaW50KX19ZnVuY3Rpb24gYm8oZSx0KXtyZXR1cm4gdD97cG9pbnQ6dChlLnBvaW50KX06ZX1mdW5jdGlvbiBUbyhlLHQpe3JldHVybnt4OmUueC10LngseTplLnktdC55fX1mdW5jdGlvbiBDbyh7cG9pbnQ6ZX0sdCl7cmV0dXJue3BvaW50OmUsZGVsdGE6VG8oZSxSbyh0KSksb2Zmc2V0OlRvKGUsQW8odCkpLHZlbG9jaXR5OmtvKHQsLjEpfX1mdW5jdGlvbiBBbyhlKXtyZXR1cm4gZVswXX1mdW5jdGlvbiBSbyhlKXtyZXR1cm4gZVtlLmxlbmd0aC0xXX1mdW5jdGlvbiBrbyhlLHQpe2lmKGUubGVuZ3RoPDIpcmV0dXJue3g6MCx5OjB9O2xldCBuPWUubGVuZ3RoLTEscj1udWxsO2NvbnN0IGk9Um8oZSk7Zm9yKDtuPj0wJiYocj1lW25dLCEoaS50aW1lc3RhbXAtci50aW1lc3RhbXA+dGkodCkpKTspbi0tO2lmKCFyKXJldHVybnt4OjAseTowfTtjb25zdCBvPShpLnRpbWVzdGFtcC1yLnRpbWVzdGFtcCkvMWUzO2lmKDA9PT1vKXJldHVybnt4OjAseTowfTtjb25zdCBhPXt4OihpLngtci54KS9vLHk6KGkueS1yLnkpL299O3JldHVybiBhLng9PT0xLzAmJihhLng9MCksYS55PT09MS8wJiYoYS55PTApLGF9ZnVuY3Rpb24gT28oZSl7cmV0dXJuIGUubWF4LWUubWlufWZ1bmN0aW9uIE5vKGUsdD0wLG49LjAxKXtyZXR1cm4gTWF0aC5hYnMoZS10KTw9bn1mdW5jdGlvbiB3byhlLHQsbixyPS41KXtlLm9yaWdpbj1yLGUub3JpZ2luUG9pbnQ9c2kodC5taW4sdC5tYXgsZS5vcmlnaW4pLGUuc2NhbGU9T28obikvT28odCksKE5vKGUuc2NhbGUsMSwxZS00KXx8aXNOYU4oZS5zY2FsZSkpJiYoZS5zY2FsZT0xKSxlLnRyYW5zbGF0ZT1zaShuLm1pbixuLm1heCxlLm9yaWdpbiktZS5vcmlnaW5Qb2ludCwoTm8oZS50cmFuc2xhdGUpfHxpc05hTihlLnRyYW5zbGF0ZSkpJiYoZS50cmFuc2xhdGU9MCl9ZnVuY3Rpb24gRG8oZSx0LG4scil7d28oZS54LHQueCxuLngsbnVsbD09cj92b2lkIDA6ci5vcmlnaW5YKSx3byhlLnksdC55LG4ueSxudWxsPT1yP3ZvaWQgMDpyLm9yaWdpblkpfWZ1bmN0aW9uIFBvKGUsdCxuKXtlLm1pbj1uLm1pbit0Lm1pbixlLm1heD1lLm1pbitPbyh0KX1mdW5jdGlvbiBNbyhlLHQsbil7ZS5taW49dC5taW4tbi5taW4sZS5tYXg9ZS5taW4rT28odCl9ZnVuY3Rpb24gTG8oZSx0LG4pe01vKGUueCx0Lngsbi54KSxNbyhlLnksdC55LG4ueSl9ZnVuY3Rpb24gVW8oZSx0LG4pe3JldHVybnttaW46dm9pZCAwIT09dD9lLm1pbit0OnZvaWQgMCxtYXg6dm9pZCAwIT09bj9lLm1heCtuLShlLm1heC1lLm1pbik6dm9pZCAwfX1mdW5jdGlvbiB4byhlLHQpe2xldCBuPXQubWluLWUubWluLHI9dC5tYXgtZS5tYXg7cmV0dXJuIHQubWF4LXQubWluPGUubWF4LWUubWluJiYoW24scl09W3Isbl0pLHttaW46bixtYXg6cn19Y29uc3QgRm89LjM1O2Z1bmN0aW9uIEJvKGUsdCxuKXtyZXR1cm57bWluOlZvKGUsdCksbWF4OlZvKGUsbil9fWZ1bmN0aW9uIFZvKGUsdCl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGU/ZTplW3RdfHwwfWNvbnN0IEdvPSgpPT4oe3g6e3RyYW5zbGF0ZTowLHNjYWxlOjEsb3JpZ2luOjAsb3JpZ2luUG9pbnQ6MH0seTp7dHJhbnNsYXRlOjAsc2NhbGU6MSxvcmlnaW46MCxvcmlnaW5Qb2ludDowfX0pLEhvPSgpPT4oe3g6e21pbjowLG1heDowfSx5OnttaW46MCxtYXg6MH19KTtmdW5jdGlvbiBXbyhlKXtyZXR1cm5bZShcInhcIiksZShcInlcIildfWZ1bmN0aW9uIGpvKHt0b3A6ZSxsZWZ0OnQscmlnaHQ6bixib3R0b206cn0pe3JldHVybnt4OnttaW46dCxtYXg6bn0seTp7bWluOmUsbWF4OnJ9fX1mdW5jdGlvbiBabyhlKXtyZXR1cm4gdm9pZCAwPT09ZXx8MT09PWV9ZnVuY3Rpb24gem8oe3NjYWxlOmUsc2NhbGVYOnQsc2NhbGVZOm59KXtyZXR1cm4hWm8oZSl8fCFabyh0KXx8IVpvKG4pfWZ1bmN0aW9uIEtvKGUpe3JldHVybiB6byhlKXx8WW8oZSl8fGUuenx8ZS5yb3RhdGV8fGUucm90YXRlWHx8ZS5yb3RhdGVZfWZ1bmN0aW9uIFlvKGUpe3JldHVybiBxbyhlLngpfHxxbyhlLnkpfWZ1bmN0aW9uIHFvKGUpe3JldHVybiBlJiZcIjAlXCIhPT1lfWZ1bmN0aW9uIFhvKGUsdCxuKXtyZXR1cm4gbit0KihlLW4pfWZ1bmN0aW9uIFFvKGUsdCxuLHIsaSl7cmV0dXJuIHZvaWQgMCE9PWkmJihlPVhvKGUsaSxyKSksWG8oZSxuLHIpK3R9ZnVuY3Rpb24gSm8oZSx0PTAsbj0xLHIsaSl7ZS5taW49UW8oZS5taW4sdCxuLHIsaSksZS5tYXg9UW8oZS5tYXgsdCxuLHIsaSl9ZnVuY3Rpb24gJG8oZSx7eDp0LHk6bn0pe0pvKGUueCx0LnRyYW5zbGF0ZSx0LnNjYWxlLHQub3JpZ2luUG9pbnQpLEpvKGUueSxuLnRyYW5zbGF0ZSxuLnNjYWxlLG4ub3JpZ2luUG9pbnQpfWZ1bmN0aW9uIGVhKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpfHxlPjEuMDAwMDAwMDAwMDAwMXx8ZTwuOTk5OTk5OTk5OTk5P2U6MX1mdW5jdGlvbiB0YShlLHQpe2UubWluPWUubWluK3QsZS5tYXg9ZS5tYXgrdH1mdW5jdGlvbiBuYShlLHQsW24scixpXSl7Y29uc3Qgbz12b2lkIDAhPT10W2ldP3RbaV06LjUsYT1zaShlLm1pbixlLm1heCxvKTtKbyhlLHRbbl0sdFtyXSxhLHQuc2NhbGUpfWNvbnN0IHJhPVtcInhcIixcInNjYWxlWFwiLFwib3JpZ2luWFwiXSxpYT1bXCJ5XCIsXCJzY2FsZVlcIixcIm9yaWdpbllcIl07ZnVuY3Rpb24gb2EoZSx0KXtuYShlLngsdCxyYSksbmEoZS55LHQsaWEpfWZ1bmN0aW9uIGFhKGUsdCl7cmV0dXJuIGpvKGZ1bmN0aW9uKGUsdCl7aWYoIXQpcmV0dXJuIGU7Y29uc3Qgbj10KHt4OmUubGVmdCx5OmUudG9wfSkscj10KHt4OmUucmlnaHQseTplLmJvdHRvbX0pO3JldHVybnt0b3A6bi55LGxlZnQ6bi54LGJvdHRvbTpyLnkscmlnaHQ6ci54fX0oZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0KSl9Y29uc3Qgc2E9bmV3IFdlYWtNYXA7Y2xhc3MgY2F7Y29uc3RydWN0b3IoZSl7dGhpcy5vcGVuR2xvYmFsTG9jaz1udWxsLHRoaXMuaXNEcmFnZ2luZz0hMSx0aGlzLmN1cnJlbnREaXJlY3Rpb249bnVsbCx0aGlzLm9yaWdpblBvaW50PXt4OjAseTowfSx0aGlzLmNvbnN0cmFpbnRzPSExLHRoaXMuaGFzTXV0YXRlZENvbnN0cmFpbnRzPSExLHRoaXMuZWxhc3RpYz1IbygpLHRoaXMudmlzdWFsRWxlbWVudD1lfXN0YXJ0KGUse3NuYXBUb0N1cnNvcjp0PSExfT17fSl7ITEhPT10aGlzLnZpc3VhbEVsZW1lbnQuaXNQcmVzZW50JiYodGhpcy5wYW5TZXNzaW9uPW5ldyBTbyhlLHtvblNlc3Npb25TdGFydDplPT57dGhpcy5zdG9wQW5pbWF0aW9uKCksdCYmdGhpcy5zbmFwVG9DdXJzb3IoRW4oZSxcInBhZ2VcIikucG9pbnQpfSxvblN0YXJ0OihlLHQpPT57dmFyIG47Y29uc3R7ZHJhZzpyLGRyYWdQcm9wYWdhdGlvbjppLG9uRHJhZ1N0YXJ0Om99PXRoaXMuZ2V0UHJvcHMoKTsoIXJ8fGl8fCh0aGlzLm9wZW5HbG9iYWxMb2NrJiZ0aGlzLm9wZW5HbG9iYWxMb2NrKCksdGhpcy5vcGVuR2xvYmFsTG9jaz1EbihyKSx0aGlzLm9wZW5HbG9iYWxMb2NrKSkmJih0aGlzLmlzRHJhZ2dpbmc9ITAsdGhpcy5jdXJyZW50RGlyZWN0aW9uPW51bGwsdGhpcy5yZXNvbHZlQ29uc3RyYWludHMoKSx0aGlzLnZpc3VhbEVsZW1lbnQucHJvamVjdGlvbiYmKHRoaXMudmlzdWFsRWxlbWVudC5wcm9qZWN0aW9uLmlzQW5pbWF0aW9uQmxvY2tlZD0hMCx0aGlzLnZpc3VhbEVsZW1lbnQucHJvamVjdGlvbi50YXJnZXQ9dm9pZCAwKSxXbygoZT0+e3ZhciB0LG47bGV0IHI9dGhpcy5nZXRBeGlzTW90aW9uVmFsdWUoZSkuZ2V0KCl8fDA7aWYoQXQudGVzdChyKSl7Y29uc3QgaT1udWxsPT09KG49bnVsbD09PSh0PXRoaXMudmlzdWFsRWxlbWVudC5wcm9qZWN0aW9uKXx8dm9pZCAwPT09dD92b2lkIDA6dC5sYXlvdXQpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmxheW91dEJveFtlXTtpJiYocj1PbyhpKSoocGFyc2VGbG9hdChyKS8xMDApKX10aGlzLm9yaWdpblBvaW50W2VdPXJ9KSksbnVsbD09b3x8byhlLHQpLG51bGw9PT0obj10aGlzLnZpc3VhbEVsZW1lbnQuYW5pbWF0aW9uU3RhdGUpfHx2b2lkIDA9PT1ufHxuLnNldEFjdGl2ZShkbi5EcmFnLCEwKSl9LG9uTW92ZTooZSx0KT0+e2NvbnN0e2RyYWdQcm9wYWdhdGlvbjpuLGRyYWdEaXJlY3Rpb25Mb2NrOnIsb25EaXJlY3Rpb25Mb2NrOmksb25EcmFnOm99PXRoaXMuZ2V0UHJvcHMoKTtpZighbiYmIXRoaXMub3Blbkdsb2JhbExvY2spcmV0dXJuO2NvbnN0e29mZnNldDphfT10O2lmKHImJm51bGw9PT10aGlzLmN1cnJlbnREaXJlY3Rpb24pcmV0dXJuIHRoaXMuY3VycmVudERpcmVjdGlvbj1mdW5jdGlvbihlLHQ9MTApe2xldCBuPW51bGw7cmV0dXJuIE1hdGguYWJzKGUueSk+dD9uPVwieVwiOk1hdGguYWJzKGUueCk+dCYmKG49XCJ4XCIpLG59KGEpLHZvaWQobnVsbCE9PXRoaXMuY3VycmVudERpcmVjdGlvbiYmKG51bGw9PWl8fGkodGhpcy5jdXJyZW50RGlyZWN0aW9uKSkpO3RoaXMudXBkYXRlQXhpcyhcInhcIix0LnBvaW50LGEpLHRoaXMudXBkYXRlQXhpcyhcInlcIix0LnBvaW50LGEpLHRoaXMudmlzdWFsRWxlbWVudC5yZW5kZXIoKSxudWxsPT1vfHxvKGUsdCl9LG9uU2Vzc2lvbkVuZDooZSx0KT0+dGhpcy5zdG9wKGUsdCl9LHt0cmFuc2Zvcm1QYWdlUG9pbnQ6dGhpcy52aXN1YWxFbGVtZW50LmdldFRyYW5zZm9ybVBhZ2VQb2ludCgpfSkpfXN0b3AoZSx0KXtjb25zdCBuPXRoaXMuaXNEcmFnZ2luZztpZih0aGlzLmNhbmNlbCgpLCFuKXJldHVybjtjb25zdHt2ZWxvY2l0eTpyfT10O3RoaXMuc3RhcnRBbmltYXRpb24ocik7Y29uc3R7b25EcmFnRW5kOml9PXRoaXMuZ2V0UHJvcHMoKTtudWxsPT1pfHxpKGUsdCl9Y2FuY2VsKCl7dmFyIGUsdDt0aGlzLmlzRHJhZ2dpbmc9ITEsdGhpcy52aXN1YWxFbGVtZW50LnByb2plY3Rpb24mJih0aGlzLnZpc3VhbEVsZW1lbnQucHJvamVjdGlvbi5pc0FuaW1hdGlvbkJsb2NrZWQ9ITEpLG51bGw9PT0oZT10aGlzLnBhblNlc3Npb24pfHx2b2lkIDA9PT1lfHxlLmVuZCgpLHRoaXMucGFuU2Vzc2lvbj12b2lkIDA7Y29uc3R7ZHJhZ1Byb3BhZ2F0aW9uOm59PXRoaXMuZ2V0UHJvcHMoKTshbiYmdGhpcy5vcGVuR2xvYmFsTG9jayYmKHRoaXMub3Blbkdsb2JhbExvY2soKSx0aGlzLm9wZW5HbG9iYWxMb2NrPW51bGwpLG51bGw9PT0odD10aGlzLnZpc3VhbEVsZW1lbnQuYW5pbWF0aW9uU3RhdGUpfHx2b2lkIDA9PT10fHx0LnNldEFjdGl2ZShkbi5EcmFnLCExKX11cGRhdGVBeGlzKGUsdCxuKXtjb25zdHtkcmFnOnJ9PXRoaXMuZ2V0UHJvcHMoKTtpZighbnx8IWxhKGUscix0aGlzLmN1cnJlbnREaXJlY3Rpb24pKXJldHVybjtjb25zdCBpPXRoaXMuZ2V0QXhpc01vdGlvblZhbHVlKGUpO2xldCBvPXRoaXMub3JpZ2luUG9pbnRbZV0rbltlXTt0aGlzLmNvbnN0cmFpbnRzJiZ0aGlzLmNvbnN0cmFpbnRzW2VdJiYobz1mdW5jdGlvbihlLHttaW46dCxtYXg6bn0scil7cmV0dXJuIHZvaWQgMCE9PXQmJmU8dD9lPXI/c2kodCxlLHIubWluKTpNYXRoLm1heChlLHQpOnZvaWQgMCE9PW4mJmU+biYmKGU9cj9zaShuLGUsci5tYXgpOk1hdGgubWluKGUsbikpLGV9KG8sdGhpcy5jb25zdHJhaW50c1tlXSx0aGlzLmVsYXN0aWNbZV0pKSxpLnNldChvKX1yZXNvbHZlQ29uc3RyYWludHMoKXtjb25zdHtkcmFnQ29uc3RyYWludHM6ZSxkcmFnRWxhc3RpYzp0fT10aGlzLmdldFByb3BzKCkse2xheW91dDpufT10aGlzLnZpc3VhbEVsZW1lbnQucHJvamVjdGlvbnx8e30scj10aGlzLmNvbnN0cmFpbnRzO2UmJlZlKGUpP3RoaXMuY29uc3RyYWludHN8fCh0aGlzLmNvbnN0cmFpbnRzPXRoaXMucmVzb2x2ZVJlZkNvbnN0cmFpbnRzKCkpOnRoaXMuY29uc3RyYWludHM9ISghZXx8IW4pJiZmdW5jdGlvbihlLHt0b3A6dCxsZWZ0Om4sYm90dG9tOnIscmlnaHQ6aX0pe3JldHVybnt4OlVvKGUueCxuLGkpLHk6VW8oZS55LHQscil9fShuLmxheW91dEJveCxlKSx0aGlzLmVsYXN0aWM9ZnVuY3Rpb24oZT1Gbyl7cmV0dXJuITE9PT1lP2U9MDohMD09PWUmJihlPUZvKSx7eDpCbyhlLFwibGVmdFwiLFwicmlnaHRcIikseTpCbyhlLFwidG9wXCIsXCJib3R0b21cIil9fSh0KSxyIT09dGhpcy5jb25zdHJhaW50cyYmbiYmdGhpcy5jb25zdHJhaW50cyYmIXRoaXMuaGFzTXV0YXRlZENvbnN0cmFpbnRzJiZXbygoZT0+e3RoaXMuZ2V0QXhpc01vdGlvblZhbHVlKGUpJiYodGhpcy5jb25zdHJhaW50c1tlXT1mdW5jdGlvbihlLHQpe2NvbnN0IG49e307cmV0dXJuIHZvaWQgMCE9PXQubWluJiYobi5taW49dC5taW4tZS5taW4pLHZvaWQgMCE9PXQubWF4JiYobi5tYXg9dC5tYXgtZS5taW4pLG59KG4ubGF5b3V0Qm94W2VdLHRoaXMuY29uc3RyYWludHNbZV0pKX0pKX1yZXNvbHZlUmVmQ29uc3RyYWludHMoKXtjb25zdHtkcmFnQ29uc3RyYWludHM6ZSxvbk1lYXN1cmVEcmFnQ29uc3RyYWludHM6dH09dGhpcy5nZXRQcm9wcygpO2lmKCFlfHwhVmUoZSkpcmV0dXJuITE7Y29uc3Qgbj1lLmN1cnJlbnQ7ZWkobnVsbCE9PW4sXCJJZiBgZHJhZ0NvbnN0cmFpbnRzYCBpcyBzZXQgYXMgYSBSZWFjdCByZWYsIHRoYXQgcmVmIG11c3QgYmUgcGFzc2VkIHRvIGFub3RoZXIgY29tcG9uZW50J3MgYHJlZmAgcHJvcC5cIik7Y29uc3R7cHJvamVjdGlvbjpyfT10aGlzLnZpc3VhbEVsZW1lbnQ7aWYoIXJ8fCFyLmxheW91dClyZXR1cm4hMTtjb25zdCBpPWZ1bmN0aW9uKGUsdCxuKXtjb25zdCByPWFhKGUsbikse3Njcm9sbDppfT10O3JldHVybiBpJiYodGEoci54LGkub2Zmc2V0LngpLHRhKHIueSxpLm9mZnNldC55KSkscn0obixyLnJvb3QsdGhpcy52aXN1YWxFbGVtZW50LmdldFRyYW5zZm9ybVBhZ2VQb2ludCgpKTtsZXQgbz1mdW5jdGlvbihlLHQpe3JldHVybnt4OnhvKGUueCx0LngpLHk6eG8oZS55LHQueSl9fShyLmxheW91dC5sYXlvdXRCb3gsaSk7aWYodCl7Y29uc3QgZT10KGZ1bmN0aW9uKHt4OmUseTp0fSl7cmV0dXJue3RvcDp0Lm1pbixyaWdodDplLm1heCxib3R0b206dC5tYXgsbGVmdDplLm1pbn19KG8pKTt0aGlzLmhhc011dGF0ZWRDb25zdHJhaW50cz0hIWUsZSYmKG89am8oZSkpfXJldHVybiBvfXN0YXJ0QW5pbWF0aW9uKGUpe2NvbnN0e2RyYWc6dCxkcmFnTW9tZW50dW06bixkcmFnRWxhc3RpYzpyLGRyYWdUcmFuc2l0aW9uOmksZHJhZ1NuYXBUb09yaWdpbjpvLG9uRHJhZ1RyYW5zaXRpb25FbmQ6YX09dGhpcy5nZXRQcm9wcygpLHM9dGhpcy5jb25zdHJhaW50c3x8e30sYz1XbygoYT0+e2lmKCFsYShhLHQsdGhpcy5jdXJyZW50RGlyZWN0aW9uKSlyZXR1cm47bGV0IGM9KG51bGw9PXM/dm9pZCAwOnNbYV0pfHx7fTtvJiYoYz17bWluOjAsbWF4OjB9KTtjb25zdCBsPXI/MjAwOjFlNix1PXI/NDA6MWU3LGQ9e3R5cGU6XCJpbmVydGlhXCIsdmVsb2NpdHk6bj9lW2FdOjAsYm91bmNlU3RpZmZuZXNzOmwsYm91bmNlRGFtcGluZzp1LHRpbWVDb25zdGFudDo3NTAscmVzdERlbHRhOjEscmVzdFNwZWVkOjEwLC4uLmksLi4uY307cmV0dXJuIHRoaXMuc3RhcnRBeGlzVmFsdWVBbmltYXRpb24oYSxkKX0pKTtyZXR1cm4gUHJvbWlzZS5hbGwoYykudGhlbihhKX1zdGFydEF4aXNWYWx1ZUFuaW1hdGlvbihlLHQpe2NvbnN0IG49dGhpcy5nZXRBeGlzTW90aW9uVmFsdWUoZSk7cmV0dXJuIG4uc3RhcnQobG8oZSxuLDAsdCkpfXN0b3BBbmltYXRpb24oKXtXbygoZT0+dGhpcy5nZXRBeGlzTW90aW9uVmFsdWUoZSkuc3RvcCgpKSl9Z2V0QXhpc01vdGlvblZhbHVlKGUpe3ZhciB0O2NvbnN0IG49XCJfZHJhZ1wiK2UudG9VcHBlckNhc2UoKTtyZXR1cm4gdGhpcy52aXN1YWxFbGVtZW50LmdldFByb3BzKClbbl18fHRoaXMudmlzdWFsRWxlbWVudC5nZXRWYWx1ZShlLChudWxsPT09KHQ9dGhpcy52aXN1YWxFbGVtZW50LmdldFByb3BzKCkuaW5pdGlhbCl8fHZvaWQgMD09PXQ/dm9pZCAwOnRbZV0pfHwwKX1zbmFwVG9DdXJzb3IoZSl7V28oKHQ9Pntjb25zdHtkcmFnOm59PXRoaXMuZ2V0UHJvcHMoKTtpZighbGEodCxuLHRoaXMuY3VycmVudERpcmVjdGlvbikpcmV0dXJuO2NvbnN0e3Byb2plY3Rpb246cn09dGhpcy52aXN1YWxFbGVtZW50LGk9dGhpcy5nZXRBeGlzTW90aW9uVmFsdWUodCk7aWYociYmci5sYXlvdXQpe2NvbnN0e21pbjpuLG1heDpvfT1yLmxheW91dC5sYXlvdXRCb3hbdF07aS5zZXQoZVt0XS1zaShuLG8sLjUpKX19KSl9c2NhbGVQb3NpdGlvbldpdGhpbkNvbnN0cmFpbnRzKCl7dmFyIGU7aWYoIXRoaXMudmlzdWFsRWxlbWVudC5jdXJyZW50KXJldHVybjtjb25zdHtkcmFnOnQsZHJhZ0NvbnN0cmFpbnRzOm59PXRoaXMuZ2V0UHJvcHMoKSx7cHJvamVjdGlvbjpyfT10aGlzLnZpc3VhbEVsZW1lbnQ7aWYoIVZlKG4pfHwhcnx8IXRoaXMuY29uc3RyYWludHMpcmV0dXJuO3RoaXMuc3RvcEFuaW1hdGlvbigpO2NvbnN0IGk9e3g6MCx5OjB9O1dvKChlPT57Y29uc3QgdD10aGlzLmdldEF4aXNNb3Rpb25WYWx1ZShlKTtpZih0KXtjb25zdCBuPXQuZ2V0KCk7aVtlXT1mdW5jdGlvbihlLHQpe2xldCBuPS41O2NvbnN0IHI9T28oZSksaT1Pbyh0KTtyZXR1cm4gaT5yP249Z2kodC5taW4sdC5tYXgtcixlLm1pbik6cj5pJiYobj1naShlLm1pbixlLm1heC1pLHQubWluKSksaHQoMCwxLG4pfSh7bWluOm4sbWF4Om59LHRoaXMuY29uc3RyYWludHNbZV0pfX0pKTtjb25zdHt0cmFuc2Zvcm1UZW1wbGF0ZTpvfT10aGlzLnZpc3VhbEVsZW1lbnQuZ2V0UHJvcHMoKTt0aGlzLnZpc3VhbEVsZW1lbnQuY3VycmVudC5zdHlsZS50cmFuc2Zvcm09bz9vKHt9LFwiXCIpOlwibm9uZVwiLG51bGw9PT0oZT1yLnJvb3QpfHx2b2lkIDA9PT1lfHxlLnVwZGF0ZVNjcm9sbCgpLHIudXBkYXRlTGF5b3V0KCksdGhpcy5yZXNvbHZlQ29uc3RyYWludHMoKSxXbygoZT0+e2lmKCFsYShlLHQsbnVsbCkpcmV0dXJuO2NvbnN0IG49dGhpcy5nZXRBeGlzTW90aW9uVmFsdWUoZSkse21pbjpyLG1heDpvfT10aGlzLmNvbnN0cmFpbnRzW2VdO24uc2V0KHNpKHIsbyxpW2VdKSl9KSl9YWRkTGlzdGVuZXJzKCl7dmFyIGU7aWYoIXRoaXMudmlzdWFsRWxlbWVudC5jdXJyZW50KXJldHVybjtzYS5zZXQodGhpcy52aXN1YWxFbGVtZW50LHRoaXMpO2NvbnN0IHQ9Um4odGhpcy52aXN1YWxFbGVtZW50LmN1cnJlbnQsXCJwb2ludGVyZG93blwiLChlPT57Y29uc3R7ZHJhZzp0LGRyYWdMaXN0ZW5lcjpuPSEwfT10aGlzLmdldFByb3BzKCk7dCYmbiYmdGhpcy5zdGFydChlKX0pKSxuPSgpPT57Y29uc3R7ZHJhZ0NvbnN0cmFpbnRzOmV9PXRoaXMuZ2V0UHJvcHMoKTtWZShlKSYmKHRoaXMuY29uc3RyYWludHM9dGhpcy5yZXNvbHZlUmVmQ29uc3RyYWludHMoKSl9LHtwcm9qZWN0aW9uOnJ9PXRoaXMudmlzdWFsRWxlbWVudCxpPXIuYWRkRXZlbnRMaXN0ZW5lcihcIm1lYXN1cmVcIixuKTtyJiYhci5sYXlvdXQmJihudWxsPT09KGU9ci5yb290KXx8dm9pZCAwPT09ZXx8ZS51cGRhdGVTY3JvbGwoKSxyLnVwZGF0ZUxheW91dCgpKSxuKCk7Y29uc3Qgbz1mbih3aW5kb3csXCJyZXNpemVcIiwoKCk9PnRoaXMuc2NhbGVQb3NpdGlvbldpdGhpbkNvbnN0cmFpbnRzKCkpKSxhPXIuYWRkRXZlbnRMaXN0ZW5lcihcImRpZFVwZGF0ZVwiLCgoe2RlbHRhOmUsaGFzTGF5b3V0Q2hhbmdlZDp0fSk9Pnt0aGlzLmlzRHJhZ2dpbmcmJnQmJihXbygodD0+e2NvbnN0IG49dGhpcy5nZXRBeGlzTW90aW9uVmFsdWUodCk7biYmKHRoaXMub3JpZ2luUG9pbnRbdF0rPWVbdF0udHJhbnNsYXRlLG4uc2V0KG4uZ2V0KCkrZVt0XS50cmFuc2xhdGUpKX0pKSx0aGlzLnZpc3VhbEVsZW1lbnQucmVuZGVyKCkpfSkpO3JldHVybigpPT57bygpLHQoKSxpKCksbnVsbD09YXx8YSgpfX1nZXRQcm9wcygpe2NvbnN0IGU9dGhpcy52aXN1YWxFbGVtZW50LmdldFByb3BzKCkse2RyYWc6dD0hMSxkcmFnRGlyZWN0aW9uTG9jazpuPSExLGRyYWdQcm9wYWdhdGlvbjpyPSExLGRyYWdDb25zdHJhaW50czppPSExLGRyYWdFbGFzdGljOm89Rm8sZHJhZ01vbWVudHVtOmE9ITB9PWU7cmV0dXJuey4uLmUsZHJhZzp0LGRyYWdEaXJlY3Rpb25Mb2NrOm4sZHJhZ1Byb3BhZ2F0aW9uOnIsZHJhZ0NvbnN0cmFpbnRzOmksZHJhZ0VsYXN0aWM6byxkcmFnTW9tZW50dW06YX19fWZ1bmN0aW9uIGxhKGUsdCxuKXtyZXR1cm4hKCEwIT09dCYmdCE9PWV8fG51bGwhPT1uJiZuIT09ZSl9Y29uc3QgdWE9e3BhbjpxbigoZnVuY3Rpb24oe29uUGFuOmUsb25QYW5TdGFydDp0LG9uUGFuRW5kOm4sb25QYW5TZXNzaW9uU3RhcnQ6cix2aXN1YWxFbGVtZW50Oml9KXtjb25zdCBvPWV8fHR8fG58fHIsYT0oMCxkLnVzZVJlZikobnVsbCkse3RyYW5zZm9ybVBhZ2VQb2ludDpzfT0oMCxkLnVzZUNvbnRleHQpKE1lKSxjPXtvblNlc3Npb25TdGFydDpyLG9uU3RhcnQ6dCxvbk1vdmU6ZSxvbkVuZDooZSx0KT0+e2EuY3VycmVudD1udWxsLG4mJm4oZSx0KX19OygwLGQudXNlRWZmZWN0KSgoKCk9PntudWxsIT09YS5jdXJyZW50JiZhLmN1cnJlbnQudXBkYXRlSGFuZGxlcnMoYyl9KSksa24oaSxcInBvaW50ZXJkb3duXCIsbyYmZnVuY3Rpb24oZSl7YS5jdXJyZW50PW5ldyBTbyhlLGMse3RyYW5zZm9ybVBhZ2VQb2ludDpzfSl9KSxVbigoKCk9PmEuY3VycmVudCYmYS5jdXJyZW50LmVuZCgpKSl9KSksZHJhZzpxbigoZnVuY3Rpb24oZSl7Y29uc3R7ZHJhZ0NvbnRyb2xzOnQsdmlzdWFsRWxlbWVudDpufT1lLHI9cWUoKCgpPT5uZXcgY2EobikpKTsoMCxkLnVzZUVmZmVjdCkoKCgpPT50JiZ0LnN1YnNjcmliZShyKSksW3IsdF0pLCgwLGQudXNlRWZmZWN0KSgoKCk9PnIuYWRkTGlzdGVuZXJzKCkpLFtyXSl9KSl9O2Z1bmN0aW9uIGRhKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlJiZlLnN0YXJ0c1dpdGgoXCJ2YXIoLS1cIil9Y29uc3QgZmE9L3ZhclxcKCgtLVthLXpBLVowLTktX10rKSw/ID8oW2EtekEtWjAtOSAoKSUjLiwtXSspP1xcKS87ZnVuY3Rpb24gcGEoZSx0LG49MSl7ZWkobjw9NCxgTWF4IENTUyB2YXJpYWJsZSBmYWxsYmFjayBkZXB0aCBkZXRlY3RlZCBpbiBwcm9wZXJ0eSBcIiR7ZX1cIi4gVGhpcyBtYXkgaW5kaWNhdGUgYSBjaXJjdWxhciBmYWxsYmFjayBkZXBlbmRlbmN5LmApO2NvbnN0W3IsaV09ZnVuY3Rpb24oZSl7Y29uc3QgdD1mYS5leGVjKGUpO2lmKCF0KXJldHVyblssXTtjb25zdFssbixyXT10O3JldHVybltuLHJdfShlKTtpZighcilyZXR1cm47Y29uc3Qgbz13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KS5nZXRQcm9wZXJ0eVZhbHVlKHIpO3JldHVybiBvP28udHJpbSgpOmRhKGkpP3BhKGksdCxuKzEpOml9Y29uc3QgbWE9bmV3IFNldChbXCJ3aWR0aFwiLFwiaGVpZ2h0XCIsXCJ0b3BcIixcImxlZnRcIixcInJpZ2h0XCIsXCJib3R0b21cIixcInhcIixcInlcIl0pLGhhPWU9Pm1hLmhhcyhlKSx2YT0oZSx0KT0+e2Uuc2V0KHQsITEpLGUuc2V0KHQpfSxnYT1lPT5lPT09dnR8fGU9PT1SdDt2YXIgeWE7IWZ1bmN0aW9uKGUpe2Uud2lkdGg9XCJ3aWR0aFwiLGUuaGVpZ2h0PVwiaGVpZ2h0XCIsZS5sZWZ0PVwibGVmdFwiLGUucmlnaHQ9XCJyaWdodFwiLGUudG9wPVwidG9wXCIsZS5ib3R0b209XCJib3R0b21cIn0oeWF8fCh5YT17fSkpO2NvbnN0IEVhPShlLHQpPT5wYXJzZUZsb2F0KGUuc3BsaXQoXCIsIFwiKVt0XSksX2E9KGUsdCk9PihuLHt0cmFuc2Zvcm06cn0pPT57aWYoXCJub25lXCI9PT1yfHwhcilyZXR1cm4gMDtjb25zdCBpPXIubWF0Y2goL15tYXRyaXgzZFxcKCguKylcXCkkLyk7aWYoaSlyZXR1cm4gRWEoaVsxXSx0KTt7Y29uc3QgdD1yLm1hdGNoKC9ebWF0cml4XFwoKC4rKVxcKSQvKTtyZXR1cm4gdD9FYSh0WzFdLGUpOjB9fSxJYT1uZXcgU2V0KFtcInhcIixcInlcIixcInpcIl0pLFNhPXN0LmZpbHRlcigoZT0+IUlhLmhhcyhlKSkpLGJhPXt3aWR0aDooe3g6ZX0se3BhZGRpbmdMZWZ0OnQ9XCIwXCIscGFkZGluZ1JpZ2h0Om49XCIwXCJ9KT0+ZS5tYXgtZS5taW4tcGFyc2VGbG9hdCh0KS1wYXJzZUZsb2F0KG4pLGhlaWdodDooe3k6ZX0se3BhZGRpbmdUb3A6dD1cIjBcIixwYWRkaW5nQm90dG9tOm49XCIwXCJ9KT0+ZS5tYXgtZS5taW4tcGFyc2VGbG9hdCh0KS1wYXJzZUZsb2F0KG4pLHRvcDooZSx7dG9wOnR9KT0+cGFyc2VGbG9hdCh0KSxsZWZ0OihlLHtsZWZ0OnR9KT0+cGFyc2VGbG9hdCh0KSxib3R0b206KHt5OmV9LHt0b3A6dH0pPT5wYXJzZUZsb2F0KHQpKyhlLm1heC1lLm1pbikscmlnaHQ6KHt4OmV9LHtsZWZ0OnR9KT0+cGFyc2VGbG9hdCh0KSsoZS5tYXgtZS5taW4pLHg6X2EoNCwxMykseTpfYSg1LDE0KX07Y29uc3QgVGE9e2N1cnJlbnQ6bnVsbH0sQ2E9e2N1cnJlbnQ6ITF9LEFhPU9iamVjdC5rZXlzKFllKSxSYT1BYS5sZW5ndGgsa2E9W1wiQW5pbWF0aW9uU3RhcnRcIixcIkFuaW1hdGlvbkNvbXBsZXRlXCIsXCJVcGRhdGVcIixcIlVubW91bnRcIixcIkJlZm9yZUxheW91dE1lYXN1cmVcIixcIkxheW91dE1lYXN1cmVcIixcIkxheW91dEFuaW1hdGlvblN0YXJ0XCIsXCJMYXlvdXRBbmltYXRpb25Db21wbGV0ZVwiXTtjbGFzcyBPYXtjb25zdHJ1Y3Rvcih7cGFyZW50OmUscHJvcHM6dCxyZWR1Y2VkTW90aW9uQ29uZmlnOm4sdmlzdWFsU3RhdGU6cn0saT17fSl7dGhpcy5jdXJyZW50PW51bGwsdGhpcy5jaGlsZHJlbj1uZXcgU2V0LHRoaXMuaXNWYXJpYW50Tm9kZT0hMSx0aGlzLmlzQ29udHJvbGxpbmdWYXJpYW50cz0hMSx0aGlzLnNob3VsZFJlZHVjZU1vdGlvbj1udWxsLHRoaXMudmFsdWVzPW5ldyBNYXAsdGhpcy5pc1ByZXNlbnQ9ITAsdGhpcy52YWx1ZVN1YnNjcmlwdGlvbnM9bmV3IE1hcCx0aGlzLnByZXZNb3Rpb25WYWx1ZXM9e30sdGhpcy5ldmVudHM9e30sdGhpcy5wcm9wRXZlbnRTdWJzY3JpcHRpb25zPXt9LHRoaXMubm90aWZ5VXBkYXRlPSgpPT50aGlzLm5vdGlmeShcIlVwZGF0ZVwiLHRoaXMubGF0ZXN0VmFsdWVzKSx0aGlzLnJlbmRlcj0oKT0+e3RoaXMuY3VycmVudCYmKHRoaXMudHJpZ2dlckJ1aWxkKCksdGhpcy5yZW5kZXJJbnN0YW5jZSh0aGlzLmN1cnJlbnQsdGhpcy5yZW5kZXJTdGF0ZSx0aGlzLnByb3BzLnN0eWxlLHRoaXMucHJvamVjdGlvbikpfSx0aGlzLnNjaGVkdWxlUmVuZGVyPSgpPT5jci5yZW5kZXIodGhpcy5yZW5kZXIsITEsITApO2NvbnN0e2xhdGVzdFZhbHVlczpvLHJlbmRlclN0YXRlOmF9PXI7dGhpcy5sYXRlc3RWYWx1ZXM9byx0aGlzLmJhc2VUYXJnZXQ9ey4uLm99LHRoaXMuaW5pdGlhbFZhbHVlcz10LmluaXRpYWw/ey4uLm99Ont9LHRoaXMucmVuZGVyU3RhdGU9YSx0aGlzLnBhcmVudD1lLHRoaXMucHJvcHM9dCx0aGlzLmRlcHRoPWU/ZS5kZXB0aCsxOjAsdGhpcy5yZWR1Y2VkTW90aW9uQ29uZmlnPW4sdGhpcy5vcHRpb25zPWksdGhpcy5pc0NvbnRyb2xsaW5nVmFyaWFudHM9amUodCksdGhpcy5pc1ZhcmlhbnROb2RlPVplKHQpLHRoaXMuaXNWYXJpYW50Tm9kZSYmKHRoaXMudmFyaWFudENoaWxkcmVuPW5ldyBTZXQpLHRoaXMubWFudWFsbHlBbmltYXRlT25Nb3VudD1Cb29sZWFuKGUmJmUuY3VycmVudCk7Y29uc3R7d2lsbENoYW5nZTpzLC4uLmN9PXRoaXMuc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzKHQpO2Zvcihjb25zdCBlIGluIGMpe2NvbnN0IHQ9Y1tlXTt2b2lkIDAhPT1vW2VdJiZ1dCh0KSYmKHQuc2V0KG9bZV0sITEpLFhyKHMpJiZzLmFkZChlKSl9fXNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyhlKXtyZXR1cm57fX1tb3VudChlKXt2YXIgdDt0aGlzLmN1cnJlbnQ9ZSx0aGlzLnByb2plY3Rpb24mJnRoaXMucHJvamVjdGlvbi5tb3VudChlKSx0aGlzLnBhcmVudCYmdGhpcy5pc1ZhcmlhbnROb2RlJiYhdGhpcy5pc0NvbnRyb2xsaW5nVmFyaWFudHMmJih0aGlzLnJlbW92ZUZyb21WYXJpYW50VHJlZT1udWxsPT09KHQ9dGhpcy5wYXJlbnQpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmFkZFZhcmlhbnRDaGlsZCh0aGlzKSksdGhpcy52YWx1ZXMuZm9yRWFjaCgoKGUsdCk9PnRoaXMuYmluZFRvTW90aW9uVmFsdWUodCxlKSkpLENhLmN1cnJlbnR8fGZ1bmN0aW9uKCl7aWYoQ2EuY3VycmVudD0hMCx4ZSlpZih3aW5kb3cubWF0Y2hNZWRpYSl7Y29uc3QgZT13aW5kb3cubWF0Y2hNZWRpYShcIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uKVwiKSx0PSgpPT5UYS5jdXJyZW50PWUubWF0Y2hlcztlLmFkZExpc3RlbmVyKHQpLHQoKX1lbHNlIFRhLmN1cnJlbnQ9ITF9KCksdGhpcy5zaG91bGRSZWR1Y2VNb3Rpb249XCJuZXZlclwiIT09dGhpcy5yZWR1Y2VkTW90aW9uQ29uZmlnJiYoXCJhbHdheXNcIj09PXRoaXMucmVkdWNlZE1vdGlvbkNvbmZpZ3x8VGEuY3VycmVudCksdGhpcy5wYXJlbnQmJnRoaXMucGFyZW50LmNoaWxkcmVuLmFkZCh0aGlzKSx0aGlzLnNldFByb3BzKHRoaXMucHJvcHMpfXVubW91bnQoKXt2YXIgZSx0LG47bnVsbD09PShlPXRoaXMucHJvamVjdGlvbil8fHZvaWQgMD09PWV8fGUudW5tb3VudCgpLGxyLnVwZGF0ZSh0aGlzLm5vdGlmeVVwZGF0ZSksbHIucmVuZGVyKHRoaXMucmVuZGVyKSx0aGlzLnZhbHVlU3Vic2NyaXB0aW9ucy5mb3JFYWNoKChlPT5lKCkpKSxudWxsPT09KHQ9dGhpcy5yZW1vdmVGcm9tVmFyaWFudFRyZWUpfHx2b2lkIDA9PT10fHx0LmNhbGwodGhpcyksbnVsbD09PShuPXRoaXMucGFyZW50KXx8dm9pZCAwPT09bnx8bi5jaGlsZHJlbi5kZWxldGUodGhpcyk7Zm9yKGNvbnN0IGUgaW4gdGhpcy5ldmVudHMpdGhpcy5ldmVudHNbZV0uY2xlYXIoKTt0aGlzLmN1cnJlbnQ9bnVsbH1iaW5kVG9Nb3Rpb25WYWx1ZShlLHQpe2NvbnN0IG49Y3QuaGFzKGUpLHI9dC5vbihcImNoYW5nZVwiLCh0PT57dGhpcy5sYXRlc3RWYWx1ZXNbZV09dCx0aGlzLnByb3BzLm9uVXBkYXRlJiZjci51cGRhdGUodGhpcy5ub3RpZnlVcGRhdGUsITEsITApLG4mJnRoaXMucHJvamVjdGlvbiYmKHRoaXMucHJvamVjdGlvbi5pc1RyYW5zZm9ybURpcnR5PSEwKX0pKSxpPXQub24oXCJyZW5kZXJSZXF1ZXN0XCIsdGhpcy5zY2hlZHVsZVJlbmRlcik7dGhpcy52YWx1ZVN1YnNjcmlwdGlvbnMuc2V0KGUsKCgpPT57cigpLGkoKX0pKX1zb3J0Tm9kZVBvc2l0aW9uKGUpe3JldHVybiB0aGlzLmN1cnJlbnQmJnRoaXMuc29ydEluc3RhbmNlTm9kZVBvc2l0aW9uJiZ0aGlzLnR5cGU9PT1lLnR5cGU/dGhpcy5zb3J0SW5zdGFuY2VOb2RlUG9zaXRpb24odGhpcy5jdXJyZW50LGUuY3VycmVudCk6MH1sb2FkRmVhdHVyZXMoZSx0LG4scixpLG8pe2NvbnN0IGE9W107XCJwcm9kdWN0aW9uXCIhPT1CbiYmbiYmdCYmZWkoITEsXCJZb3UgaGF2ZSByZW5kZXJlZCBhIGBtb3Rpb25gIGNvbXBvbmVudCB3aXRoaW4gYSBgTGF6eU1vdGlvbmAgY29tcG9uZW50LiBUaGlzIHdpbGwgYnJlYWsgdHJlZSBzaGFraW5nLiBJbXBvcnQgYW5kIHJlbmRlciBhIGBtYCBjb21wb25lbnQgaW5zdGVhZC5cIik7Zm9yKGxldCB0PTA7dDxSYTt0Kyspe2NvbnN0IG49QWFbdF0se2lzRW5hYmxlZDpyLENvbXBvbmVudDppfT1ZZVtuXTtyKGUpJiZpJiZhLnB1c2goKDAsZC5jcmVhdGVFbGVtZW50KShpLHtrZXk6biwuLi5lLHZpc3VhbEVsZW1lbnQ6dGhpc30pKX1pZighdGhpcy5wcm9qZWN0aW9uJiZpKXt0aGlzLnByb2plY3Rpb249bmV3IGkocix0aGlzLmxhdGVzdFZhbHVlcyx0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQucHJvamVjdGlvbik7Y29uc3R7bGF5b3V0SWQ6dCxsYXlvdXQ6bixkcmFnOmEsZHJhZ0NvbnN0cmFpbnRzOnMsbGF5b3V0U2Nyb2xsOmN9PWU7dGhpcy5wcm9qZWN0aW9uLnNldE9wdGlvbnMoe2xheW91dElkOnQsbGF5b3V0Om4sYWx3YXlzTWVhc3VyZUxheW91dDpCb29sZWFuKGEpfHxzJiZWZShzKSx2aXN1YWxFbGVtZW50OnRoaXMsc2NoZWR1bGVSZW5kZXI6KCk9PnRoaXMuc2NoZWR1bGVSZW5kZXIoKSxhbmltYXRpb25UeXBlOlwic3RyaW5nXCI9PXR5cGVvZiBuP246XCJib3RoXCIsaW5pdGlhbFByb21vdGlvbkNvbmZpZzpvLGxheW91dFNjcm9sbDpjfSl9cmV0dXJuIGF9dHJpZ2dlckJ1aWxkKCl7dGhpcy5idWlsZCh0aGlzLnJlbmRlclN0YXRlLHRoaXMubGF0ZXN0VmFsdWVzLHRoaXMub3B0aW9ucyx0aGlzLnByb3BzKX1tZWFzdXJlVmlld3BvcnRCb3goKXtyZXR1cm4gdGhpcy5jdXJyZW50P3RoaXMubWVhc3VyZUluc3RhbmNlVmlld3BvcnRCb3godGhpcy5jdXJyZW50LHRoaXMucHJvcHMpOkhvKCl9Z2V0U3RhdGljVmFsdWUoZSl7cmV0dXJuIHRoaXMubGF0ZXN0VmFsdWVzW2VdfXNldFN0YXRpY1ZhbHVlKGUsdCl7dGhpcy5sYXRlc3RWYWx1ZXNbZV09dH1tYWtlVGFyZ2V0QW5pbWF0YWJsZShlLHQ9ITApe3JldHVybiB0aGlzLm1ha2VUYXJnZXRBbmltYXRhYmxlRnJvbUluc3RhbmNlKGUsdGhpcy5wcm9wcyx0KX1zZXRQcm9wcyhlKXsoZS50cmFuc2Zvcm1UZW1wbGF0ZXx8dGhpcy5wcm9wcy50cmFuc2Zvcm1UZW1wbGF0ZSkmJnRoaXMuc2NoZWR1bGVSZW5kZXIoKSx0aGlzLnByb3BzPWU7Zm9yKGxldCB0PTA7dDxrYS5sZW5ndGg7dCsrKXtjb25zdCBuPWthW3RdO3RoaXMucHJvcEV2ZW50U3Vic2NyaXB0aW9uc1tuXSYmKHRoaXMucHJvcEV2ZW50U3Vic2NyaXB0aW9uc1tuXSgpLGRlbGV0ZSB0aGlzLnByb3BFdmVudFN1YnNjcmlwdGlvbnNbbl0pO2NvbnN0IHI9ZVtcIm9uXCIrbl07ciYmKHRoaXMucHJvcEV2ZW50U3Vic2NyaXB0aW9uc1tuXT10aGlzLm9uKG4scikpfXRoaXMucHJldk1vdGlvblZhbHVlcz1mdW5jdGlvbihlLHQsbil7Y29uc3R7d2lsbENoYW5nZTpyfT10O2Zvcihjb25zdCBpIGluIHQpe2NvbnN0IG89dFtpXSxhPW5baV07aWYodXQobykpZS5hZGRWYWx1ZShpLG8pLFhyKHIpJiZyLmFkZChpKTtlbHNlIGlmKHV0KGEpKWUuYWRkVmFsdWUoaSxFcihvLHtvd25lcjplfSkpLFhyKHIpJiZyLnJlbW92ZShpKTtlbHNlIGlmKGEhPT1vKWlmKGUuaGFzVmFsdWUoaSkpe2NvbnN0IHQ9ZS5nZXRWYWx1ZShpKTshdC5oYXNBbmltYXRlZCYmdC5zZXQobyl9ZWxzZXtjb25zdCB0PWUuZ2V0U3RhdGljVmFsdWUoaSk7ZS5hZGRWYWx1ZShpLEVyKHZvaWQgMCE9PXQ/dDpvKSl9fWZvcihjb25zdCByIGluIG4pdm9pZCAwPT09dFtyXSYmZS5yZW1vdmVWYWx1ZShyKTtyZXR1cm4gdH0odGhpcyx0aGlzLnNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyhlKSx0aGlzLnByZXZNb3Rpb25WYWx1ZXMpfWdldFByb3BzKCl7cmV0dXJuIHRoaXMucHJvcHN9Z2V0VmFyaWFudChlKXt2YXIgdDtyZXR1cm4gbnVsbD09PSh0PXRoaXMucHJvcHMudmFyaWFudHMpfHx2b2lkIDA9PT10P3ZvaWQgMDp0W2VdfWdldERlZmF1bHRUcmFuc2l0aW9uKCl7cmV0dXJuIHRoaXMucHJvcHMudHJhbnNpdGlvbn1nZXRUcmFuc2Zvcm1QYWdlUG9pbnQoKXtyZXR1cm4gdGhpcy5wcm9wcy50cmFuc2Zvcm1QYWdlUG9pbnR9Z2V0Q2xvc2VzdFZhcmlhbnROb2RlKCl7dmFyIGU7cmV0dXJuIHRoaXMuaXNWYXJpYW50Tm9kZT90aGlzOm51bGw9PT0oZT10aGlzLnBhcmVudCl8fHZvaWQgMD09PWU/dm9pZCAwOmUuZ2V0Q2xvc2VzdFZhcmlhbnROb2RlKCl9Z2V0VmFyaWFudENvbnRleHQoZT0hMSl7dmFyIHQsbjtpZihlKXJldHVybiBudWxsPT09KHQ9dGhpcy5wYXJlbnQpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmdldFZhcmlhbnRDb250ZXh0KCk7aWYoIXRoaXMuaXNDb250cm9sbGluZ1ZhcmlhbnRzKXtjb25zdCBlPShudWxsPT09KG49dGhpcy5wYXJlbnQpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmdldFZhcmlhbnRDb250ZXh0KCkpfHx7fTtyZXR1cm4gdm9pZCAwIT09dGhpcy5wcm9wcy5pbml0aWFsJiYoZS5pbml0aWFsPXRoaXMucHJvcHMuaW5pdGlhbCksZX1jb25zdCByPXt9O2ZvcihsZXQgZT0wO2U8d2E7ZSsrKXtjb25zdCB0PU5hW2VdLG49dGhpcy5wcm9wc1t0XTsoR2Uobil8fCExPT09bikmJihyW3RdPW4pfXJldHVybiByfWFkZFZhcmlhbnRDaGlsZChlKXt2YXIgdDtjb25zdCBuPXRoaXMuZ2V0Q2xvc2VzdFZhcmlhbnROb2RlKCk7aWYobilyZXR1cm4gbnVsbD09PSh0PW4udmFyaWFudENoaWxkcmVuKXx8dm9pZCAwPT09dHx8dC5hZGQoZSksKCk9Pm4udmFyaWFudENoaWxkcmVuLmRlbGV0ZShlKX1hZGRWYWx1ZShlLHQpe3RoaXMuaGFzVmFsdWUoZSkmJnRoaXMucmVtb3ZlVmFsdWUoZSksdGhpcy52YWx1ZXMuc2V0KGUsdCksdGhpcy5sYXRlc3RWYWx1ZXNbZV09dC5nZXQoKSx0aGlzLmJpbmRUb01vdGlvblZhbHVlKGUsdCl9cmVtb3ZlVmFsdWUoZSl7dmFyIHQ7dGhpcy52YWx1ZXMuZGVsZXRlKGUpLG51bGw9PT0odD10aGlzLnZhbHVlU3Vic2NyaXB0aW9ucy5nZXQoZSkpfHx2b2lkIDA9PT10fHx0KCksdGhpcy52YWx1ZVN1YnNjcmlwdGlvbnMuZGVsZXRlKGUpLGRlbGV0ZSB0aGlzLmxhdGVzdFZhbHVlc1tlXSx0aGlzLnJlbW92ZVZhbHVlRnJvbVJlbmRlclN0YXRlKGUsdGhpcy5yZW5kZXJTdGF0ZSl9aGFzVmFsdWUoZSl7cmV0dXJuIHRoaXMudmFsdWVzLmhhcyhlKX1nZXRWYWx1ZShlLHQpe2lmKHRoaXMucHJvcHMudmFsdWVzJiZ0aGlzLnByb3BzLnZhbHVlc1tlXSlyZXR1cm4gdGhpcy5wcm9wcy52YWx1ZXNbZV07bGV0IG49dGhpcy52YWx1ZXMuZ2V0KGUpO3JldHVybiB2b2lkIDA9PT1uJiZ2b2lkIDAhPT10JiYobj1Fcih0LHtvd25lcjp0aGlzfSksdGhpcy5hZGRWYWx1ZShlLG4pKSxufXJlYWRWYWx1ZShlKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5sYXRlc3RWYWx1ZXNbZV0mJnRoaXMuY3VycmVudD90aGlzLnJlYWRWYWx1ZUZyb21JbnN0YW5jZSh0aGlzLmN1cnJlbnQsZSx0aGlzLm9wdGlvbnMpOnRoaXMubGF0ZXN0VmFsdWVzW2VdfXNldEJhc2VUYXJnZXQoZSx0KXt0aGlzLmJhc2VUYXJnZXRbZV09dH1nZXRCYXNlVGFyZ2V0KGUpe3ZhciB0O2NvbnN0e2luaXRpYWw6bn09dGhpcy5wcm9wcyxyPVwic3RyaW5nXCI9PXR5cGVvZiBufHxcIm9iamVjdFwiPT10eXBlb2Ygbj9udWxsPT09KHQ9dG4odGhpcy5wcm9wcyxuKSl8fHZvaWQgMD09PXQ/dm9pZCAwOnRbZV06dm9pZCAwO2lmKG4mJnZvaWQgMCE9PXIpcmV0dXJuIHI7Y29uc3QgaT10aGlzLmdldEJhc2VUYXJnZXRGcm9tUHJvcHModGhpcy5wcm9wcyxlKTtyZXR1cm4gdm9pZCAwPT09aXx8dXQoaSk/dm9pZCAwIT09dGhpcy5pbml0aWFsVmFsdWVzW2VdJiZ2b2lkIDA9PT1yP3ZvaWQgMDp0aGlzLmJhc2VUYXJnZXRbZV06aX1vbihlLHQpe3JldHVybiB0aGlzLmV2ZW50c1tlXXx8KHRoaXMuZXZlbnRzW2VdPW5ldyB2ciksdGhpcy5ldmVudHNbZV0uYWRkKHQpfW5vdGlmeShlLC4uLnQpe3ZhciBuO251bGw9PT0obj10aGlzLmV2ZW50c1tlXSl8fHZvaWQgMD09PW58fG4ubm90aWZ5KC4uLnQpfX1jb25zdCBOYT1bXCJpbml0aWFsXCIsLi4udm9dLHdhPU5hLmxlbmd0aDtjbGFzcyBEYSBleHRlbmRzIE9he3NvcnRJbnN0YW5jZU5vZGVQb3NpdGlvbihlLHQpe3JldHVybiAyJmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCk/MTotMX1nZXRCYXNlVGFyZ2V0RnJvbVByb3BzKGUsdCl7dmFyIG47cmV0dXJuIG51bGw9PT0obj1lLnN0eWxlKXx8dm9pZCAwPT09bj92b2lkIDA6blt0XX1yZW1vdmVWYWx1ZUZyb21SZW5kZXJTdGF0ZShlLHt2YXJzOnQsc3R5bGU6bn0pe2RlbGV0ZSB0W2VdLGRlbGV0ZSBuW2VdfW1ha2VUYXJnZXRBbmltYXRhYmxlRnJvbUluc3RhbmNlKHt0cmFuc2l0aW9uOmUsdHJhbnNpdGlvbkVuZDp0LC4uLm59LHt0cmFuc2Zvcm1WYWx1ZXM6cn0saSl7bGV0IG89ZnVuY3Rpb24oZSx0LG4pe3ZhciByO2NvbnN0IGk9e307Zm9yKGNvbnN0IG8gaW4gZSl7Y29uc3QgZT1xcihvLHQpO2lbb109dm9pZCAwIT09ZT9lOm51bGw9PT0ocj1uLmdldFZhbHVlKG8pKXx8dm9pZCAwPT09cj92b2lkIDA6ci5nZXQoKX1yZXR1cm4gaX0obixlfHx7fSx0aGlzKTtpZihyJiYodCYmKHQ9cih0KSksbiYmKG49cihuKSksbyYmKG89cihvKSkpLGkpeyFmdW5jdGlvbihlLHQsbil7dmFyIHIsaTtjb25zdCBvPU9iamVjdC5rZXlzKHQpLmZpbHRlcigodD0+IWUuaGFzVmFsdWUodCkpKSxhPW8ubGVuZ3RoO2lmKGEpZm9yKGxldCBjPTA7YzxhO2MrKyl7Y29uc3QgYT1vW2NdLGw9dFthXTtsZXQgdT1udWxsO0FycmF5LmlzQXJyYXkobCkmJih1PWxbMF0pLG51bGw9PT11JiYodT1udWxsIT09KGk9bnVsbCE9PShyPW5bYV0pJiZ2b2lkIDAhPT1yP3I6ZS5yZWFkVmFsdWUoYSkpJiZ2b2lkIDAhPT1pP2k6dFthXSksbnVsbCE9dSYmKFwic3RyaW5nXCI9PXR5cGVvZiB1JiYoL15cXC0/XFxkKlxcLj9cXGQrJC8udGVzdCh1KXx8L14wW14uXFxzXSskLy50ZXN0KHUpKT91PXBhcnNlRmxvYXQodSk6KHM9dSwhanIuZmluZChHcihzKSkmJlByLnRlc3QobCkmJih1PVZyKGEsbCkpKSxlLmFkZFZhbHVlKGEsRXIodSx7b3duZXI6ZX0pKSx2b2lkIDA9PT1uW2FdJiYoblthXT11KSxudWxsIT09dSYmZS5zZXRCYXNlVGFyZ2V0KGEsdSkpfXZhciBzfSh0aGlzLG4sbyk7Y29uc3QgZT0oKGUsdCxuLHIpPT57Y29uc3QgaT1mdW5jdGlvbihlLHsuLi50fSxuKXtjb25zdCByPWUuY3VycmVudDtpZighKHIgaW5zdGFuY2VvZiBFbGVtZW50KSlyZXR1cm57dGFyZ2V0OnQsdHJhbnNpdGlvbkVuZDpufTtuJiYobj17Li4ubn0pLGUudmFsdWVzLmZvckVhY2goKGU9Pntjb25zdCB0PWUuZ2V0KCk7aWYoIWRhKHQpKXJldHVybjtjb25zdCBuPXBhKHQscik7biYmZS5zZXQobil9KSk7Zm9yKGNvbnN0IGUgaW4gdCl7Y29uc3QgaT10W2VdO2lmKCFkYShpKSljb250aW51ZTtjb25zdCBvPXBhKGkscik7byYmKHRbZV09byxuJiZ2b2lkIDA9PT1uW2VdJiYobltlXT1pKSl9cmV0dXJue3RhcmdldDp0LHRyYW5zaXRpb25FbmQ6bn19KGUsdCxyKTtyZXR1cm4gZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuKGU9Pk9iamVjdC5rZXlzKGUpLnNvbWUoaGEpKSh0KT8oKGUsdCxuPXt9LHI9e30pPT57dD17Li4udH0scj17Li4ucn07Y29uc3QgaT1PYmplY3Qua2V5cyh0KS5maWx0ZXIoaGEpO2xldCBvPVtdLGE9ITE7Y29uc3Qgcz1bXTtpZihpLmZvckVhY2goKGk9Pntjb25zdCBjPWUuZ2V0VmFsdWUoaSk7aWYoIWUuaGFzVmFsdWUoaSkpcmV0dXJuO2xldCBsPW5baV0sdT1XcihsKTtjb25zdCBkPXRbaV07bGV0IGY7aWYobm4oZCkpe2NvbnN0IGU9ZC5sZW5ndGgsdD1udWxsPT09ZFswXT8xOjA7bD1kW3RdLHU9V3IobCk7Zm9yKGxldCBuPXQ7bjxlO24rKylmP2VpKFdyKGRbbl0pPT09ZixcIkFsbCBrZXlmcmFtZXMgbXVzdCBiZSBvZiB0aGUgc2FtZSB0eXBlXCIpOihmPVdyKGRbbl0pLGVpKGY9PT11fHxnYSh1KSYmZ2EoZiksXCJLZXlmcmFtZXMgbXVzdCBiZSBvZiB0aGUgc2FtZSBkaW1lbnNpb24gYXMgdGhlIGN1cnJlbnQgdmFsdWVcIikpfWVsc2UgZj1XcihkKTtpZih1IT09ZilpZihnYSh1KSYmZ2EoZikpe2NvbnN0IGU9Yy5nZXQoKTtcInN0cmluZ1wiPT10eXBlb2YgZSYmYy5zZXQocGFyc2VGbG9hdChlKSksXCJzdHJpbmdcIj09dHlwZW9mIGQ/dFtpXT1wYXJzZUZsb2F0KGQpOkFycmF5LmlzQXJyYXkoZCkmJmY9PT1SdCYmKHRbaV09ZC5tYXAocGFyc2VGbG9hdCkpfWVsc2UobnVsbD09dT92b2lkIDA6dS50cmFuc2Zvcm0pJiYobnVsbD09Zj92b2lkIDA6Zi50cmFuc2Zvcm0pJiYoMD09PWx8fDA9PT1kKT8wPT09bD9jLnNldChmLnRyYW5zZm9ybShsKSk6dFtpXT11LnRyYW5zZm9ybShkKTooYXx8KG89ZnVuY3Rpb24oZSl7Y29uc3QgdD1bXTtyZXR1cm4gU2EuZm9yRWFjaCgobj0+e2NvbnN0IHI9ZS5nZXRWYWx1ZShuKTt2b2lkIDAhPT1yJiYodC5wdXNoKFtuLHIuZ2V0KCldKSxyLnNldChuLnN0YXJ0c1dpdGgoXCJzY2FsZVwiKT8xOjApKX0pKSx0Lmxlbmd0aCYmZS5yZW5kZXIoKSx0fShlKSxhPSEwKSxzLnB1c2goaSkscltpXT12b2lkIDAhPT1yW2ldP3JbaV06dFtpXSx2YShjLGQpKX0pKSxzLmxlbmd0aCl7Y29uc3Qgbj1zLmluZGV4T2YoXCJoZWlnaHRcIik+PTA/d2luZG93LnBhZ2VZT2Zmc2V0Om51bGwsaT0oKGUsdCxuKT0+e2NvbnN0IHI9dC5tZWFzdXJlVmlld3BvcnRCb3goKSxpPXQuY3VycmVudCxvPWdldENvbXB1dGVkU3R5bGUoaSkse2Rpc3BsYXk6YX09byxzPXt9O1wibm9uZVwiPT09YSYmdC5zZXRTdGF0aWNWYWx1ZShcImRpc3BsYXlcIixlLmRpc3BsYXl8fFwiYmxvY2tcIiksbi5mb3JFYWNoKChlPT57c1tlXT1iYVtlXShyLG8pfSkpLHQucmVuZGVyKCk7Y29uc3QgYz10Lm1lYXN1cmVWaWV3cG9ydEJveCgpO3JldHVybiBuLmZvckVhY2goKG49Pntjb25zdCByPXQuZ2V0VmFsdWUobik7dmEocixzW25dKSxlW25dPWJhW25dKGMsbyl9KSksZX0pKHQsZSxzKTtyZXR1cm4gby5sZW5ndGgmJm8uZm9yRWFjaCgoKFt0LG5dKT0+e2UuZ2V0VmFsdWUodCkuc2V0KG4pfSkpLGUucmVuZGVyKCkseGUmJm51bGwhPT1uJiZ3aW5kb3cuc2Nyb2xsVG8oe3RvcDpufSkse3RhcmdldDppLHRyYW5zaXRpb25FbmQ6cn19cmV0dXJue3RhcmdldDp0LHRyYW5zaXRpb25FbmQ6cn19KShlLHQsbixyKTp7dGFyZ2V0OnQsdHJhbnNpdGlvbkVuZDpyfX0oZSx0PWkudGFyZ2V0LG4scj1pLnRyYW5zaXRpb25FbmQpfSkodGhpcyxuLG8sdCk7dD1lLnRyYW5zaXRpb25FbmQsbj1lLnRhcmdldH1yZXR1cm57dHJhbnNpdGlvbjplLHRyYW5zaXRpb25FbmQ6dCwuLi5ufX19Y2xhc3MgUGEgZXh0ZW5kcyBEYXtyZWFkVmFsdWVGcm9tSW5zdGFuY2UoZSx0KXtpZihjdC5oYXModCkpe2NvbnN0IGU9QnIodCk7cmV0dXJuIGUmJmUuZGVmYXVsdHx8MH17Y29uc3Qgcj0obj1lLHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG4pKSxpPShwdCh0KT9yLmdldFByb3BlcnR5VmFsdWUodCk6clt0XSl8fDA7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGk/aS50cmltKCk6aX12YXIgbn1tZWFzdXJlSW5zdGFuY2VWaWV3cG9ydEJveChlLHt0cmFuc2Zvcm1QYWdlUG9pbnQ6dH0pe3JldHVybiBhYShlLHQpfWJ1aWxkKGUsdCxuLHIpe1B0KGUsdCxuLHIudHJhbnNmb3JtVGVtcGxhdGUpfXNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyhlKXtyZXR1cm4gJHQoZSl9cmVuZGVySW5zdGFuY2UoZSx0LG4scil7WHQoZSx0LG4scil9fWNsYXNzIE1hIGV4dGVuZHMgRGF7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuaXNTVkdUYWc9ITF9Z2V0QmFzZVRhcmdldEZyb21Qcm9wcyhlLHQpe3JldHVybiBlW3RdfXJlYWRWYWx1ZUZyb21JbnN0YW5jZShlLHQpe3ZhciBuO3JldHVybiBjdC5oYXModCk/KG51bGw9PT0obj1Ccih0KSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZGVmYXVsdCl8fDA6KHQ9UXQuaGFzKHQpP3Q6cXQodCksZS5nZXRBdHRyaWJ1dGUodCkpfW1lYXN1cmVJbnN0YW5jZVZpZXdwb3J0Qm94KCl7cmV0dXJuIEhvKCl9c2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzKGUpe3JldHVybiBlbihlKX1idWlsZChlLHQsbixyKXtqdChlLHQsbix0aGlzLmlzU1ZHVGFnLHIudHJhbnNmb3JtVGVtcGxhdGUpfXJlbmRlckluc3RhbmNlKGUsdCxuLHIpe0p0KGUsdCwwLHIpfW1vdW50KGUpe3RoaXMuaXNTVkdUYWc9enQoZS50YWdOYW1lKSxzdXBlci5tb3VudChlKX19Y29uc3QgTGE9KGUsdCk9Pm90KGUpP25ldyBNYSh0LHtlbmFibGVIYXJkd2FyZUFjY2VsZXJhdGlvbjohMX0pOm5ldyBQYSh0LHtlbmFibGVIYXJkd2FyZUFjY2VsZXJhdGlvbjohMH0pO2Z1bmN0aW9uIFVhKGUsdCl7cmV0dXJuIHQubWF4PT09dC5taW4/MDplLyh0Lm1heC10Lm1pbikqMTAwfWNvbnN0IHhhPXtjb3JyZWN0OihlLHQpPT57aWYoIXQudGFyZ2V0KXJldHVybiBlO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXtpZighUnQudGVzdChlKSlyZXR1cm4gZTtlPXBhcnNlRmxvYXQoZSl9cmV0dXJuYCR7VWEoZSx0LnRhcmdldC54KX0lICR7VWEoZSx0LnRhcmdldC55KX0lYH19LEZhPVwiXyRjc3NcIixCYT17Y29ycmVjdDooZSx7dHJlZVNjYWxlOnQscHJvamVjdGlvbkRlbHRhOm59KT0+e2NvbnN0IHI9ZSxpPWUuaW5jbHVkZXMoXCJ2YXIoXCIpLG89W107aSYmKGU9ZS5yZXBsYWNlKGZhLChlPT4oby5wdXNoKGUpLEZhKSkpKTtjb25zdCBhPVByLnBhcnNlKGUpO2lmKGEubGVuZ3RoPjUpcmV0dXJuIHI7Y29uc3Qgcz1Qci5jcmVhdGVUcmFuc2Zvcm1lcihlKSxjPVwibnVtYmVyXCIhPXR5cGVvZiBhWzBdPzE6MCxsPW4ueC5zY2FsZSp0LngsdT1uLnkuc2NhbGUqdC55O2FbMCtjXS89bCxhWzErY10vPXU7Y29uc3QgZD1zaShsLHUsLjUpO1wibnVtYmVyXCI9PXR5cGVvZiBhWzIrY10mJihhWzIrY10vPWQpLFwibnVtYmVyXCI9PXR5cGVvZiBhWzMrY10mJihhWzMrY10vPWQpO2xldCBmPXMoYSk7aWYoaSl7bGV0IGU9MDtmPWYucmVwbGFjZShGYSwoKCk9Pntjb25zdCB0PW9bZV07cmV0dXJuIGUrKyx0fSkpfXJldHVybiBmfX07Y2xhc3MgVmEgZXh0ZW5kcyBkLkNvbXBvbmVudHtjb21wb25lbnREaWRNb3VudCgpe2NvbnN0e3Zpc3VhbEVsZW1lbnQ6ZSxsYXlvdXRHcm91cDp0LHN3aXRjaExheW91dEdyb3VwOm4sbGF5b3V0SWQ6cn09dGhpcy5wcm9wcyx7cHJvamVjdGlvbjppfT1lO3ZhciBvO289R2EsT2JqZWN0LmFzc2lnbihhdCxvKSxpJiYodC5ncm91cCYmdC5ncm91cC5hZGQoaSksbiYmbi5yZWdpc3RlciYmciYmbi5yZWdpc3RlcihpKSxpLnJvb3QuZGlkVXBkYXRlKCksaS5hZGRFdmVudExpc3RlbmVyKFwiYW5pbWF0aW9uQ29tcGxldGVcIiwoKCk9Pnt0aGlzLnNhZmVUb1JlbW92ZSgpfSkpLGkuc2V0T3B0aW9ucyh7Li4uaS5vcHRpb25zLG9uRXhpdENvbXBsZXRlOigpPT50aGlzLnNhZmVUb1JlbW92ZSgpfSkpLFhlLmhhc0V2ZXJVcGRhdGVkPSEwfWdldFNuYXBzaG90QmVmb3JlVXBkYXRlKGUpe2NvbnN0e2xheW91dERlcGVuZGVuY3k6dCx2aXN1YWxFbGVtZW50Om4sZHJhZzpyLGlzUHJlc2VudDppfT10aGlzLnByb3BzLG89bi5wcm9qZWN0aW9uO3JldHVybiBvPyhvLmlzUHJlc2VudD1pLHJ8fGUubGF5b3V0RGVwZW5kZW5jeSE9PXR8fHZvaWQgMD09PXQ/by53aWxsVXBkYXRlKCk6dGhpcy5zYWZlVG9SZW1vdmUoKSxlLmlzUHJlc2VudCE9PWkmJihpP28ucHJvbW90ZSgpOm8ucmVsZWdhdGUoKXx8Y3IucG9zdFJlbmRlcigoKCk9Pnt2YXIgZTsobnVsbD09PShlPW8uZ2V0U3RhY2soKSl8fHZvaWQgMD09PWU/dm9pZCAwOmUubWVtYmVycy5sZW5ndGgpfHx0aGlzLnNhZmVUb1JlbW92ZSgpfSkpKSxudWxsKTpudWxsfWNvbXBvbmVudERpZFVwZGF0ZSgpe2NvbnN0e3Byb2plY3Rpb246ZX09dGhpcy5wcm9wcy52aXN1YWxFbGVtZW50O2UmJihlLnJvb3QuZGlkVXBkYXRlKCksIWUuY3VycmVudEFuaW1hdGlvbiYmZS5pc0xlYWQoKSYmdGhpcy5zYWZlVG9SZW1vdmUoKSl9Y29tcG9uZW50V2lsbFVubW91bnQoKXtjb25zdHt2aXN1YWxFbGVtZW50OmUsbGF5b3V0R3JvdXA6dCxzd2l0Y2hMYXlvdXRHcm91cDpufT10aGlzLnByb3BzLHtwcm9qZWN0aW9uOnJ9PWU7ciYmKHIuc2NoZWR1bGVDaGVja0FmdGVyVW5tb3VudCgpLChudWxsPT10P3ZvaWQgMDp0Lmdyb3VwKSYmdC5ncm91cC5yZW1vdmUociksKG51bGw9PW4/dm9pZCAwOm4uZGVyZWdpc3RlcikmJm4uZGVyZWdpc3RlcihyKSl9c2FmZVRvUmVtb3ZlKCl7Y29uc3R7c2FmZVRvUmVtb3ZlOmV9PXRoaXMucHJvcHM7bnVsbD09ZXx8ZSgpfXJlbmRlcigpe3JldHVybiBudWxsfX1jb25zdCBHYT17Ym9yZGVyUmFkaXVzOnsuLi54YSxhcHBseVRvOltcImJvcmRlclRvcExlZnRSYWRpdXNcIixcImJvcmRlclRvcFJpZ2h0UmFkaXVzXCIsXCJib3JkZXJCb3R0b21MZWZ0UmFkaXVzXCIsXCJib3JkZXJCb3R0b21SaWdodFJhZGl1c1wiXX0sYm9yZGVyVG9wTGVmdFJhZGl1czp4YSxib3JkZXJUb3BSaWdodFJhZGl1czp4YSxib3JkZXJCb3R0b21MZWZ0UmFkaXVzOnhhLGJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzOnhhLGJveFNoYWRvdzpCYX0sSGE9e21lYXN1cmVMYXlvdXQ6ZnVuY3Rpb24oZSl7Y29uc3RbdCxuXT1RbigpLHI9KDAsZC51c2VDb250ZXh0KShKZSk7cmV0dXJuIGQuY3JlYXRlRWxlbWVudChWYSx7Li4uZSxsYXlvdXRHcm91cDpyLHN3aXRjaExheW91dEdyb3VwOigwLGQudXNlQ29udGV4dCkoZXQpLGlzUHJlc2VudDp0LHNhZmVUb1JlbW92ZTpufSl9fSxXYT1bXCJUb3BMZWZ0XCIsXCJUb3BSaWdodFwiLFwiQm90dG9tTGVmdFwiLFwiQm90dG9tUmlnaHRcIl0samE9V2EubGVuZ3RoLFphPWU9Plwic3RyaW5nXCI9PXR5cGVvZiBlP3BhcnNlRmxvYXQoZSk6ZSx6YT1lPT5cIm51bWJlclwiPT10eXBlb2YgZXx8UnQudGVzdChlKTtmdW5jdGlvbiBLYShlLHQpe3JldHVybiB2b2lkIDAhPT1lW3RdP2VbdF06ZS5ib3JkZXJSYWRpdXN9Y29uc3QgWWE9WGEoMCwuNSxUaSkscWE9WGEoLjUsLjk1LF9pKTtmdW5jdGlvbiBYYShlLHQsbil7cmV0dXJuIHI9PnI8ZT8wOnI+dD8xOm4oZ2koZSx0LHIpKX1mdW5jdGlvbiBRYShlLHQpe2UubWluPXQubWluLGUubWF4PXQubWF4fWZ1bmN0aW9uIEphKGUsdCl7UWEoZS54LHQueCksUWEoZS55LHQueSl9ZnVuY3Rpb24gJGEoZSx0LG4scixpKXtyZXR1cm4gZT1YbyhlLT10LDEvbixyKSx2b2lkIDAhPT1pJiYoZT1YbyhlLDEvaSxyKSksZX1mdW5jdGlvbiBlcyhlLHQsW24scixpXSxvLGEpeyFmdW5jdGlvbihlLHQ9MCxuPTEscj0uNSxpLG89ZSxhPWUpe2lmKEF0LnRlc3QodCkmJih0PXBhcnNlRmxvYXQodCksdD1zaShhLm1pbixhLm1heCx0LzEwMCktYS5taW4pLFwibnVtYmVyXCIhPXR5cGVvZiB0KXJldHVybjtsZXQgcz1zaShvLm1pbixvLm1heCxyKTtlPT09byYmKHMtPXQpLGUubWluPSRhKGUubWluLHQsbixzLGkpLGUubWF4PSRhKGUubWF4LHQsbixzLGkpfShlLHRbbl0sdFtyXSx0W2ldLHQuc2NhbGUsbyxhKX1jb25zdCB0cz1bXCJ4XCIsXCJzY2FsZVhcIixcIm9yaWdpblhcIl0sbnM9W1wieVwiLFwic2NhbGVZXCIsXCJvcmlnaW5ZXCJdO2Z1bmN0aW9uIHJzKGUsdCxuLHIpe2VzKGUueCx0LHRzLG51bGw9PW4/dm9pZCAwOm4ueCxudWxsPT1yP3ZvaWQgMDpyLngpLGVzKGUueSx0LG5zLG51bGw9PW4/dm9pZCAwOm4ueSxudWxsPT1yP3ZvaWQgMDpyLnkpfWZ1bmN0aW9uIGlzKGUpe3JldHVybiAwPT09ZS50cmFuc2xhdGUmJjE9PT1lLnNjYWxlfWZ1bmN0aW9uIG9zKGUpe3JldHVybiBpcyhlLngpJiZpcyhlLnkpfWZ1bmN0aW9uIGFzKGUsdCl7cmV0dXJuIGUueC5taW49PT10LngubWluJiZlLngubWF4PT09dC54Lm1heCYmZS55Lm1pbj09PXQueS5taW4mJmUueS5tYXg9PT10LnkubWF4fWZ1bmN0aW9uIHNzKGUpe3JldHVybiBPbyhlLngpL09vKGUueSl9Y2xhc3MgY3N7Y29uc3RydWN0b3IoKXt0aGlzLm1lbWJlcnM9W119YWRkKGUpe21yKHRoaXMubWVtYmVycyxlKSxlLnNjaGVkdWxlUmVuZGVyKCl9cmVtb3ZlKGUpe2lmKGhyKHRoaXMubWVtYmVycyxlKSxlPT09dGhpcy5wcmV2TGVhZCYmKHRoaXMucHJldkxlYWQ9dm9pZCAwKSxlPT09dGhpcy5sZWFkKXtjb25zdCBlPXRoaXMubWVtYmVyc1t0aGlzLm1lbWJlcnMubGVuZ3RoLTFdO2UmJnRoaXMucHJvbW90ZShlKX19cmVsZWdhdGUoZSl7Y29uc3QgdD10aGlzLm1lbWJlcnMuZmluZEluZGV4KCh0PT5lPT09dCkpO2lmKDA9PT10KXJldHVybiExO2xldCBuO2ZvcihsZXQgZT10O2U+PTA7ZS0tKXtjb25zdCB0PXRoaXMubWVtYmVyc1tlXTtpZighMSE9PXQuaXNQcmVzZW50KXtuPXQ7YnJlYWt9fXJldHVybiEhbiYmKHRoaXMucHJvbW90ZShuKSwhMCl9cHJvbW90ZShlLHQpe3ZhciBuO2NvbnN0IHI9dGhpcy5sZWFkO2lmKGUhPT1yJiYodGhpcy5wcmV2TGVhZD1yLHRoaXMubGVhZD1lLGUuc2hvdygpLHIpKXtyLmluc3RhbmNlJiZyLnNjaGVkdWxlUmVuZGVyKCksZS5zY2hlZHVsZVJlbmRlcigpLGUucmVzdW1lRnJvbT1yLHQmJihlLnJlc3VtZUZyb20ucHJlc2VydmVPcGFjaXR5PSEwKSxyLnNuYXBzaG90JiYoZS5zbmFwc2hvdD1yLnNuYXBzaG90LGUuc25hcHNob3QubGF0ZXN0VmFsdWVzPXIuYW5pbWF0aW9uVmFsdWVzfHxyLmxhdGVzdFZhbHVlcyksKG51bGw9PT0obj1lLnJvb3QpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmlzVXBkYXRpbmcpJiYoZS5pc0xheW91dERpcnR5PSEwKTtjb25zdHtjcm9zc2ZhZGU6aX09ZS5vcHRpb25zOyExPT09aSYmci5oaWRlKCl9fWV4aXRBbmltYXRpb25Db21wbGV0ZSgpe3RoaXMubWVtYmVycy5mb3JFYWNoKChlPT57dmFyIHQsbixyLGksbztudWxsPT09KG49KHQ9ZS5vcHRpb25zKS5vbkV4aXRDb21wbGV0ZSl8fHZvaWQgMD09PW58fG4uY2FsbCh0KSxudWxsPT09KG89bnVsbD09PShyPWUucmVzdW1pbmdGcm9tKXx8dm9pZCAwPT09cj92b2lkIDA6KGk9ci5vcHRpb25zKS5vbkV4aXRDb21wbGV0ZSl8fHZvaWQgMD09PW98fG8uY2FsbChpKX0pKX1zY2hlZHVsZVJlbmRlcigpe3RoaXMubWVtYmVycy5mb3JFYWNoKChlPT57ZS5pbnN0YW5jZSYmZS5zY2hlZHVsZVJlbmRlcighMSl9KSl9cmVtb3ZlTGVhZFNuYXBzaG90KCl7dGhpcy5sZWFkJiZ0aGlzLmxlYWQuc25hcHNob3QmJih0aGlzLmxlYWQuc25hcHNob3Q9dm9pZCAwKX19ZnVuY3Rpb24gbHMoZSx0LG4pe2xldCByPVwiXCI7Y29uc3QgaT1lLngudHJhbnNsYXRlL3QueCxvPWUueS50cmFuc2xhdGUvdC55O2lmKChpfHxvKSYmKHI9YHRyYW5zbGF0ZTNkKCR7aX1weCwgJHtvfXB4LCAwKSBgKSwxPT09dC54JiYxPT09dC55fHwocis9YHNjYWxlKCR7MS90Lnh9LCAkezEvdC55fSkgYCksbil7Y29uc3R7cm90YXRlOmUscm90YXRlWDp0LHJvdGF0ZVk6aX09bjtlJiYocis9YHJvdGF0ZSgke2V9ZGVnKSBgKSx0JiYocis9YHJvdGF0ZVgoJHt0fWRlZykgYCksaSYmKHIrPWByb3RhdGVZKCR7aX1kZWcpIGApfWNvbnN0IGE9ZS54LnNjYWxlKnQueCxzPWUueS5zY2FsZSp0Lnk7cmV0dXJuIDE9PT1hJiYxPT09c3x8KHIrPWBzY2FsZSgke2F9LCAke3N9KWApLHJ8fFwibm9uZVwifWNvbnN0IHVzPShlLHQpPT5lLmRlcHRoLXQuZGVwdGg7Y2xhc3MgZHN7Y29uc3RydWN0b3IoKXt0aGlzLmNoaWxkcmVuPVtdLHRoaXMuaXNEaXJ0eT0hMX1hZGQoZSl7bXIodGhpcy5jaGlsZHJlbixlKSx0aGlzLmlzRGlydHk9ITB9cmVtb3ZlKGUpe2hyKHRoaXMuY2hpbGRyZW4sZSksdGhpcy5pc0RpcnR5PSEwfWZvckVhY2goZSl7dGhpcy5pc0RpcnR5JiZ0aGlzLmNoaWxkcmVuLnNvcnQodXMpLHRoaXMuaXNEaXJ0eT0hMSx0aGlzLmNoaWxkcmVuLmZvckVhY2goZSl9fWNvbnN0IGZzPVtcIlwiLFwiWFwiLFwiWVwiLFwiWlwiXTtsZXQgcHM9MDtmdW5jdGlvbiBtcyh7YXR0YWNoUmVzaXplTGlzdGVuZXI6ZSxkZWZhdWx0UGFyZW50OnQsbWVhc3VyZVNjcm9sbDpuLGNoZWNrSXNTY3JvbGxSb290OnIscmVzZXRUcmFuc2Zvcm06aX0pe3JldHVybiBjbGFzc3tjb25zdHJ1Y3RvcihlLG49e30scj0obnVsbD09dD92b2lkIDA6dCgpKSl7dGhpcy5pZD1wcysrLHRoaXMuYW5pbWF0aW9uSWQ9MCx0aGlzLmNoaWxkcmVuPW5ldyBTZXQsdGhpcy5vcHRpb25zPXt9LHRoaXMuaXNUcmVlQW5pbWF0aW5nPSExLHRoaXMuaXNBbmltYXRpb25CbG9ja2VkPSExLHRoaXMuaXNMYXlvdXREaXJ0eT0hMSx0aGlzLmlzVHJhbnNmb3JtRGlydHk9ITEsdGhpcy5pc1Byb2plY3Rpb25EaXJ0eT0hMSx0aGlzLnVwZGF0ZU1hbnVhbGx5QmxvY2tlZD0hMSx0aGlzLnVwZGF0ZUJsb2NrZWRCeVJlc2l6ZT0hMSx0aGlzLmlzVXBkYXRpbmc9ITEsdGhpcy5pc1NWRz0hMSx0aGlzLm5lZWRzUmVzZXQ9ITEsdGhpcy5zaG91bGRSZXNldFRyYW5zZm9ybT0hMSx0aGlzLnRyZWVTY2FsZT17eDoxLHk6MX0sdGhpcy5ldmVudEhhbmRsZXJzPW5ldyBNYXAsdGhpcy5wb3RlbnRpYWxOb2Rlcz1uZXcgTWFwLHRoaXMuY2hlY2tVcGRhdGVGYWlsZWQ9KCk9Pnt0aGlzLmlzVXBkYXRpbmcmJih0aGlzLmlzVXBkYXRpbmc9ITEsdGhpcy5jbGVhckFsbFNuYXBzaG90cygpKX0sdGhpcy51cGRhdGVQcm9qZWN0aW9uPSgpPT57dGhpcy5ub2Rlcy5mb3JFYWNoKGdzKSx0aGlzLm5vZGVzLmZvckVhY2goU3MpLHRoaXMubm9kZXMuZm9yRWFjaChicyl9LHRoaXMuaGFzUHJvamVjdGVkPSExLHRoaXMuaXNWaXNpYmxlPSEwLHRoaXMuYW5pbWF0aW9uUHJvZ3Jlc3M9MCx0aGlzLnNoYXJlZE5vZGVzPW5ldyBNYXAsdGhpcy5lbGVtZW50SWQ9ZSx0aGlzLmxhdGVzdFZhbHVlcz1uLHRoaXMucm9vdD1yP3Iucm9vdHx8cjp0aGlzLHRoaXMucGF0aD1yP1suLi5yLnBhdGgscl06W10sdGhpcy5wYXJlbnQ9cix0aGlzLmRlcHRoPXI/ci5kZXB0aCsxOjAsZSYmdGhpcy5yb290LnJlZ2lzdGVyUG90ZW50aWFsTm9kZShlLHRoaXMpO2ZvcihsZXQgZT0wO2U8dGhpcy5wYXRoLmxlbmd0aDtlKyspdGhpcy5wYXRoW2VdLnNob3VsZFJlc2V0VHJhbnNmb3JtPSEwO3RoaXMucm9vdD09PXRoaXMmJih0aGlzLm5vZGVzPW5ldyBkcyl9YWRkRXZlbnRMaXN0ZW5lcihlLHQpe3JldHVybiB0aGlzLmV2ZW50SGFuZGxlcnMuaGFzKGUpfHx0aGlzLmV2ZW50SGFuZGxlcnMuc2V0KGUsbmV3IHZyKSx0aGlzLmV2ZW50SGFuZGxlcnMuZ2V0KGUpLmFkZCh0KX1ub3RpZnlMaXN0ZW5lcnMoZSwuLi50KXtjb25zdCBuPXRoaXMuZXZlbnRIYW5kbGVycy5nZXQoZSk7bnVsbD09bnx8bi5ub3RpZnkoLi4udCl9aGFzTGlzdGVuZXJzKGUpe3JldHVybiB0aGlzLmV2ZW50SGFuZGxlcnMuaGFzKGUpfXJlZ2lzdGVyUG90ZW50aWFsTm9kZShlLHQpe3RoaXMucG90ZW50aWFsTm9kZXMuc2V0KGUsdCl9bW91bnQodCxuPSExKXt2YXIgcjtpZih0aGlzLmluc3RhbmNlKXJldHVybjt0aGlzLmlzU1ZHPXQgaW5zdGFuY2VvZiBTVkdFbGVtZW50JiZcInN2Z1wiIT09dC50YWdOYW1lLHRoaXMuaW5zdGFuY2U9dDtjb25zdHtsYXlvdXRJZDppLGxheW91dDpvLHZpc3VhbEVsZW1lbnQ6YX09dGhpcy5vcHRpb25zO2lmKGEmJiFhLmN1cnJlbnQmJmEubW91bnQodCksdGhpcy5yb290Lm5vZGVzLmFkZCh0aGlzKSxudWxsPT09KHI9dGhpcy5wYXJlbnQpfHx2b2lkIDA9PT1yfHxyLmNoaWxkcmVuLmFkZCh0aGlzKSx0aGlzLmVsZW1lbnRJZCYmdGhpcy5yb290LnBvdGVudGlhbE5vZGVzLmRlbGV0ZSh0aGlzLmVsZW1lbnRJZCksbiYmKG98fGkpJiYodGhpcy5pc0xheW91dERpcnR5PSEwKSxlKXtsZXQgbjtjb25zdCByPSgpPT50aGlzLnJvb3QudXBkYXRlQmxvY2tlZEJ5UmVzaXplPSExO2UodCwoKCk9Pnt0aGlzLnJvb3QudXBkYXRlQmxvY2tlZEJ5UmVzaXplPSEwLG4mJm4oKSxuPUtpKHIsMjUwKSxYZS5oYXNBbmltYXRlZFNpbmNlUmVzaXplJiYoWGUuaGFzQW5pbWF0ZWRTaW5jZVJlc2l6ZT0hMSx0aGlzLm5vZGVzLmZvckVhY2goSXMpKX0pKX1pJiZ0aGlzLnJvb3QucmVnaXN0ZXJTaGFyZWROb2RlKGksdGhpcyksITEhPT10aGlzLm9wdGlvbnMuYW5pbWF0ZSYmYSYmKGl8fG8pJiZ0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJkaWRVcGRhdGVcIiwoKHtkZWx0YTplLGhhc0xheW91dENoYW5nZWQ6dCxoYXNSZWxhdGl2ZVRhcmdldENoYW5nZWQ6bixsYXlvdXQ6cn0pPT57dmFyIGksbyxzLGMsbDtpZih0aGlzLmlzVHJlZUFuaW1hdGlvbkJsb2NrZWQoKSlyZXR1cm4gdGhpcy50YXJnZXQ9dm9pZCAwLHZvaWQodGhpcy5yZWxhdGl2ZVRhcmdldD12b2lkIDApO2NvbnN0IHU9bnVsbCE9PShvPW51bGwhPT0oaT10aGlzLm9wdGlvbnMudHJhbnNpdGlvbikmJnZvaWQgMCE9PWk/aTphLmdldERlZmF1bHRUcmFuc2l0aW9uKCkpJiZ2b2lkIDAhPT1vP286T3Mse29uTGF5b3V0QW5pbWF0aW9uU3RhcnQ6ZCxvbkxheW91dEFuaW1hdGlvbkNvbXBsZXRlOmZ9PWEuZ2V0UHJvcHMoKSxwPSF0aGlzLnRhcmdldExheW91dHx8IWFzKHRoaXMudGFyZ2V0TGF5b3V0LHIpfHxuLG09IXQmJm47aWYoKG51bGw9PT0ocz10aGlzLnJlc3VtZUZyb20pfHx2b2lkIDA9PT1zP3ZvaWQgMDpzLmluc3RhbmNlKXx8bXx8dCYmKHB8fCF0aGlzLmN1cnJlbnRBbmltYXRpb24pKXt0aGlzLnJlc3VtZUZyb20mJih0aGlzLnJlc3VtaW5nRnJvbT10aGlzLnJlc3VtZUZyb20sdGhpcy5yZXN1bWluZ0Zyb20ucmVzdW1pbmdGcm9tPXZvaWQgMCksdGhpcy5zZXRBbmltYXRpb25PcmlnaW4oZSxtKTtjb25zdCB0PXsuLi5pbyh1LFwibGF5b3V0XCIpLG9uUGxheTpkLG9uQ29tcGxldGU6Zn07YS5zaG91bGRSZWR1Y2VNb3Rpb24mJih0LmRlbGF5PTAsdC50eXBlPSExKSx0aGlzLnN0YXJ0QW5pbWF0aW9uKHQpfWVsc2UgdHx8MCE9PXRoaXMuYW5pbWF0aW9uUHJvZ3Jlc3N8fElzKHRoaXMpLHRoaXMuaXNMZWFkKCkmJihudWxsPT09KGw9KGM9dGhpcy5vcHRpb25zKS5vbkV4aXRDb21wbGV0ZSl8fHZvaWQgMD09PWx8fGwuY2FsbChjKSk7dGhpcy50YXJnZXRMYXlvdXQ9cn0pKX11bm1vdW50KCl7dmFyIGUsdDt0aGlzLm9wdGlvbnMubGF5b3V0SWQmJnRoaXMud2lsbFVwZGF0ZSgpLHRoaXMucm9vdC5ub2Rlcy5yZW1vdmUodGhpcyksbnVsbD09PShlPXRoaXMuZ2V0U3RhY2soKSl8fHZvaWQgMD09PWV8fGUucmVtb3ZlKHRoaXMpLG51bGw9PT0odD10aGlzLnBhcmVudCl8fHZvaWQgMD09PXR8fHQuY2hpbGRyZW4uZGVsZXRlKHRoaXMpLHRoaXMuaW5zdGFuY2U9dm9pZCAwLGxyLnByZVJlbmRlcih0aGlzLnVwZGF0ZVByb2plY3Rpb24pfWJsb2NrVXBkYXRlKCl7dGhpcy51cGRhdGVNYW51YWxseUJsb2NrZWQ9ITB9dW5ibG9ja1VwZGF0ZSgpe3RoaXMudXBkYXRlTWFudWFsbHlCbG9ja2VkPSExfWlzVXBkYXRlQmxvY2tlZCgpe3JldHVybiB0aGlzLnVwZGF0ZU1hbnVhbGx5QmxvY2tlZHx8dGhpcy51cGRhdGVCbG9ja2VkQnlSZXNpemV9aXNUcmVlQW5pbWF0aW9uQmxvY2tlZCgpe3ZhciBlO3JldHVybiB0aGlzLmlzQW5pbWF0aW9uQmxvY2tlZHx8KG51bGw9PT0oZT10aGlzLnBhcmVudCl8fHZvaWQgMD09PWU/dm9pZCAwOmUuaXNUcmVlQW5pbWF0aW9uQmxvY2tlZCgpKXx8ITF9c3RhcnRVcGRhdGUoKXt2YXIgZTt0aGlzLmlzVXBkYXRlQmxvY2tlZCgpfHwodGhpcy5pc1VwZGF0aW5nPSEwLG51bGw9PT0oZT10aGlzLm5vZGVzKXx8dm9pZCAwPT09ZXx8ZS5mb3JFYWNoKFRzKSx0aGlzLmFuaW1hdGlvbklkKyspfXdpbGxVcGRhdGUoZT0hMCl7dmFyIHQsbixyO2lmKHRoaXMucm9vdC5pc1VwZGF0ZUJsb2NrZWQoKSlyZXR1cm4gdm9pZChudWxsPT09KG49KHQ9dGhpcy5vcHRpb25zKS5vbkV4aXRDb21wbGV0ZSl8fHZvaWQgMD09PW58fG4uY2FsbCh0KSk7aWYoIXRoaXMucm9vdC5pc1VwZGF0aW5nJiZ0aGlzLnJvb3Quc3RhcnRVcGRhdGUoKSx0aGlzLmlzTGF5b3V0RGlydHkpcmV0dXJuO3RoaXMuaXNMYXlvdXREaXJ0eT0hMDtmb3IobGV0IGU9MDtlPHRoaXMucGF0aC5sZW5ndGg7ZSsrKXtjb25zdCB0PXRoaXMucGF0aFtlXTt0LnNob3VsZFJlc2V0VHJhbnNmb3JtPSEwLHQudXBkYXRlU2Nyb2xsKFwic25hcHNob3RcIil9Y29uc3R7bGF5b3V0SWQ6aSxsYXlvdXQ6b309dGhpcy5vcHRpb25zO2lmKHZvaWQgMD09PWkmJiFvKXJldHVybjtjb25zdCBhPW51bGw9PT0ocj10aGlzLm9wdGlvbnMudmlzdWFsRWxlbWVudCl8fHZvaWQgMD09PXI/dm9pZCAwOnIuZ2V0UHJvcHMoKS50cmFuc2Zvcm1UZW1wbGF0ZTt0aGlzLnByZXZUcmFuc2Zvcm1UZW1wbGF0ZVZhbHVlPW51bGw9PWE/dm9pZCAwOmEodGhpcy5sYXRlc3RWYWx1ZXMsXCJcIiksdGhpcy51cGRhdGVTbmFwc2hvdCgpLGUmJnRoaXMubm90aWZ5TGlzdGVuZXJzKFwid2lsbFVwZGF0ZVwiKX1kaWRVcGRhdGUoKXtpZih0aGlzLmlzVXBkYXRlQmxvY2tlZCgpKXJldHVybiB0aGlzLnVuYmxvY2tVcGRhdGUoKSx0aGlzLmNsZWFyQWxsU25hcHNob3RzKCksdm9pZCB0aGlzLm5vZGVzLmZvckVhY2goRXMpO3RoaXMuaXNVcGRhdGluZyYmKHRoaXMuaXNVcGRhdGluZz0hMSx0aGlzLnBvdGVudGlhbE5vZGVzLnNpemUmJih0aGlzLnBvdGVudGlhbE5vZGVzLmZvckVhY2goTnMpLHRoaXMucG90ZW50aWFsTm9kZXMuY2xlYXIoKSksdGhpcy5ub2Rlcy5mb3JFYWNoKF9zKSx0aGlzLm5vZGVzLmZvckVhY2goaHMpLHRoaXMubm9kZXMuZm9yRWFjaCh2cyksdGhpcy5jbGVhckFsbFNuYXBzaG90cygpLHVyLnVwZGF0ZSgpLHVyLnByZVJlbmRlcigpLHVyLnJlbmRlcigpKX1jbGVhckFsbFNuYXBzaG90cygpe3RoaXMubm9kZXMuZm9yRWFjaCh5cyksdGhpcy5zaGFyZWROb2Rlcy5mb3JFYWNoKENzKX1zY2hlZHVsZVVwZGF0ZVByb2plY3Rpb24oKXtjci5wcmVSZW5kZXIodGhpcy51cGRhdGVQcm9qZWN0aW9uLCExLCEwKX1zY2hlZHVsZUNoZWNrQWZ0ZXJVbm1vdW50KCl7Y3IucG9zdFJlbmRlcigoKCk9Pnt0aGlzLmlzTGF5b3V0RGlydHk/dGhpcy5yb290LmRpZFVwZGF0ZSgpOnRoaXMucm9vdC5jaGVja1VwZGF0ZUZhaWxlZCgpfSkpfXVwZGF0ZVNuYXBzaG90KCl7IXRoaXMuc25hcHNob3QmJnRoaXMuaW5zdGFuY2UmJih0aGlzLnNuYXBzaG90PXRoaXMubWVhc3VyZSgpKX11cGRhdGVMYXlvdXQoKXt2YXIgZTtpZighdGhpcy5pbnN0YW5jZSlyZXR1cm47aWYodGhpcy51cGRhdGVTY3JvbGwoKSwhKHRoaXMub3B0aW9ucy5hbHdheXNNZWFzdXJlTGF5b3V0JiZ0aGlzLmlzTGVhZCgpfHx0aGlzLmlzTGF5b3V0RGlydHkpKXJldHVybjtpZih0aGlzLnJlc3VtZUZyb20mJiF0aGlzLnJlc3VtZUZyb20uaW5zdGFuY2UpZm9yKGxldCBlPTA7ZTx0aGlzLnBhdGgubGVuZ3RoO2UrKyl0aGlzLnBhdGhbZV0udXBkYXRlU2Nyb2xsKCk7Y29uc3QgdD10aGlzLmxheW91dDt0aGlzLmxheW91dD10aGlzLm1lYXN1cmUoITEpLHRoaXMubGF5b3V0Q29ycmVjdGVkPUhvKCksdGhpcy5pc0xheW91dERpcnR5PSExLHRoaXMucHJvamVjdGlvbkRlbHRhPXZvaWQgMCx0aGlzLm5vdGlmeUxpc3RlbmVycyhcIm1lYXN1cmVcIix0aGlzLmxheW91dC5sYXlvdXRCb3gpLG51bGw9PT0oZT10aGlzLm9wdGlvbnMudmlzdWFsRWxlbWVudCl8fHZvaWQgMD09PWV8fGUubm90aWZ5KFwiTGF5b3V0TWVhc3VyZVwiLHRoaXMubGF5b3V0LmxheW91dEJveCxudWxsPT10P3ZvaWQgMDp0LmxheW91dEJveCl9dXBkYXRlU2Nyb2xsKGU9XCJtZWFzdXJlXCIpe2xldCB0PUJvb2xlYW4odGhpcy5vcHRpb25zLmxheW91dFNjcm9sbCYmdGhpcy5pbnN0YW5jZSk7dGhpcy5zY3JvbGwmJnRoaXMuc2Nyb2xsLmFuaW1hdGlvbklkPT09dGhpcy5yb290LmFuaW1hdGlvbklkJiZ0aGlzLnNjcm9sbC5waGFzZT09PWUmJih0PSExKSx0JiYodGhpcy5zY3JvbGw9e2FuaW1hdGlvbklkOnRoaXMucm9vdC5hbmltYXRpb25JZCxwaGFzZTplLGlzUm9vdDpyKHRoaXMuaW5zdGFuY2UpLG9mZnNldDpuKHRoaXMuaW5zdGFuY2UpfSl9cmVzZXRUcmFuc2Zvcm0oKXt2YXIgZTtpZighaSlyZXR1cm47Y29uc3QgdD10aGlzLmlzTGF5b3V0RGlydHl8fHRoaXMuc2hvdWxkUmVzZXRUcmFuc2Zvcm0sbj10aGlzLnByb2plY3Rpb25EZWx0YSYmIW9zKHRoaXMucHJvamVjdGlvbkRlbHRhKSxyPW51bGw9PT0oZT10aGlzLm9wdGlvbnMudmlzdWFsRWxlbWVudCl8fHZvaWQgMD09PWU/dm9pZCAwOmUuZ2V0UHJvcHMoKS50cmFuc2Zvcm1UZW1wbGF0ZSxvPW51bGw9PXI/dm9pZCAwOnIodGhpcy5sYXRlc3RWYWx1ZXMsXCJcIiksYT1vIT09dGhpcy5wcmV2VHJhbnNmb3JtVGVtcGxhdGVWYWx1ZTt0JiYobnx8S28odGhpcy5sYXRlc3RWYWx1ZXMpfHxhKSYmKGkodGhpcy5pbnN0YW5jZSxvKSx0aGlzLnNob3VsZFJlc2V0VHJhbnNmb3JtPSExLHRoaXMuc2NoZWR1bGVSZW5kZXIoKSl9bWVhc3VyZShlPSEwKXtjb25zdCB0PXRoaXMubWVhc3VyZVBhZ2VCb3goKTtsZXQgbj10aGlzLnJlbW92ZUVsZW1lbnRTY3JvbGwodCk7dmFyIHI7cmV0dXJuIGUmJihuPXRoaXMucmVtb3ZlVHJhbnNmb3JtKG4pKSx3cygocj1uKS54KSx3cyhyLnkpLHthbmltYXRpb25JZDp0aGlzLnJvb3QuYW5pbWF0aW9uSWQsbWVhc3VyZWRCb3g6dCxsYXlvdXRCb3g6bixsYXRlc3RWYWx1ZXM6e30sc291cmNlOnRoaXMuaWR9fW1lYXN1cmVQYWdlQm94KCl7Y29uc3R7dmlzdWFsRWxlbWVudDplfT10aGlzLm9wdGlvbnM7aWYoIWUpcmV0dXJuIEhvKCk7Y29uc3QgdD1lLm1lYXN1cmVWaWV3cG9ydEJveCgpLHtzY3JvbGw6bn09dGhpcy5yb290O3JldHVybiBuJiYodGEodC54LG4ub2Zmc2V0LngpLHRhKHQueSxuLm9mZnNldC55KSksdH1yZW1vdmVFbGVtZW50U2Nyb2xsKGUpe2NvbnN0IHQ9SG8oKTtKYSh0LGUpO2ZvcihsZXQgbj0wO248dGhpcy5wYXRoLmxlbmd0aDtuKyspe2NvbnN0IHI9dGhpcy5wYXRoW25dLHtzY3JvbGw6aSxvcHRpb25zOm99PXI7aWYociE9PXRoaXMucm9vdCYmaSYmby5sYXlvdXRTY3JvbGwpe2lmKGkuaXNSb290KXtKYSh0LGUpO2NvbnN0e3Njcm9sbDpufT10aGlzLnJvb3Q7biYmKHRhKHQueCwtbi5vZmZzZXQueCksdGEodC55LC1uLm9mZnNldC55KSl9dGEodC54LGkub2Zmc2V0LngpLHRhKHQueSxpLm9mZnNldC55KX19cmV0dXJuIHR9YXBwbHlUcmFuc2Zvcm0oZSx0PSExKXtjb25zdCBuPUhvKCk7SmEobixlKTtmb3IobGV0IGU9MDtlPHRoaXMucGF0aC5sZW5ndGg7ZSsrKXtjb25zdCByPXRoaXMucGF0aFtlXTshdCYmci5vcHRpb25zLmxheW91dFNjcm9sbCYmci5zY3JvbGwmJnIhPT1yLnJvb3QmJm9hKG4se3g6LXIuc2Nyb2xsLm9mZnNldC54LHk6LXIuc2Nyb2xsLm9mZnNldC55fSksS28oci5sYXRlc3RWYWx1ZXMpJiZvYShuLHIubGF0ZXN0VmFsdWVzKX1yZXR1cm4gS28odGhpcy5sYXRlc3RWYWx1ZXMpJiZvYShuLHRoaXMubGF0ZXN0VmFsdWVzKSxufXJlbW92ZVRyYW5zZm9ybShlKXt2YXIgdDtjb25zdCBuPUhvKCk7SmEobixlKTtmb3IobGV0IGU9MDtlPHRoaXMucGF0aC5sZW5ndGg7ZSsrKXtjb25zdCByPXRoaXMucGF0aFtlXTtpZighci5pbnN0YW5jZSljb250aW51ZTtpZighS28oci5sYXRlc3RWYWx1ZXMpKWNvbnRpbnVlO3pvKHIubGF0ZXN0VmFsdWVzKSYmci51cGRhdGVTbmFwc2hvdCgpO2NvbnN0IGk9SG8oKTtKYShpLHIubWVhc3VyZVBhZ2VCb3goKSkscnMobixyLmxhdGVzdFZhbHVlcyxudWxsPT09KHQ9ci5zbmFwc2hvdCl8fHZvaWQgMD09PXQ/dm9pZCAwOnQubGF5b3V0Qm94LGkpfXJldHVybiBLbyh0aGlzLmxhdGVzdFZhbHVlcykmJnJzKG4sdGhpcy5sYXRlc3RWYWx1ZXMpLG59c2V0VGFyZ2V0RGVsdGEoZSl7dGhpcy50YXJnZXREZWx0YT1lLHRoaXMuaXNQcm9qZWN0aW9uRGlydHk9ITAsdGhpcy5yb290LnNjaGVkdWxlVXBkYXRlUHJvamVjdGlvbigpfXNldE9wdGlvbnMoZSl7dGhpcy5vcHRpb25zPXsuLi50aGlzLm9wdGlvbnMsLi4uZSxjcm9zc2ZhZGU6dm9pZCAwPT09ZS5jcm9zc2ZhZGV8fGUuY3Jvc3NmYWRlfX1jbGVhck1lYXN1cmVtZW50cygpe3RoaXMuc2Nyb2xsPXZvaWQgMCx0aGlzLmxheW91dD12b2lkIDAsdGhpcy5zbmFwc2hvdD12b2lkIDAsdGhpcy5wcmV2VHJhbnNmb3JtVGVtcGxhdGVWYWx1ZT12b2lkIDAsdGhpcy50YXJnZXREZWx0YT12b2lkIDAsdGhpcy50YXJnZXQ9dm9pZCAwLHRoaXMuaXNMYXlvdXREaXJ0eT0hMX1yZXNvbHZlVGFyZ2V0RGVsdGEoKXt2YXIgZTtjb25zdCB0PXRoaXMuZ2V0TGVhZCgpO2lmKHRoaXMuaXNQcm9qZWN0aW9uRGlydHl8fCh0aGlzLmlzUHJvamVjdGlvbkRpcnR5PXQuaXNQcm9qZWN0aW9uRGlydHkpLHRoaXMuaXNUcmFuc2Zvcm1EaXJ0eXx8KHRoaXMuaXNUcmFuc2Zvcm1EaXJ0eT10LmlzVHJhbnNmb3JtRGlydHkpLCF0aGlzLmlzUHJvamVjdGlvbkRpcnR5JiYhdGhpcy5hdHRlbXB0VG9SZXNvbHZlUmVsYXRpdmVUYXJnZXQpcmV0dXJuO2NvbnN0e2xheW91dDpuLGxheW91dElkOnJ9PXRoaXMub3B0aW9ucztpZih0aGlzLmxheW91dCYmKG58fHIpKXtpZighdGhpcy50YXJnZXREZWx0YSYmIXRoaXMucmVsYXRpdmVUYXJnZXQpe2NvbnN0IGU9dGhpcy5nZXRDbG9zZXN0UHJvamVjdGluZ1BhcmVudCgpO2UmJmUubGF5b3V0Pyh0aGlzLnJlbGF0aXZlUGFyZW50PWUsdGhpcy5yZWxhdGl2ZVRhcmdldD1IbygpLHRoaXMucmVsYXRpdmVUYXJnZXRPcmlnaW49SG8oKSxMbyh0aGlzLnJlbGF0aXZlVGFyZ2V0T3JpZ2luLHRoaXMubGF5b3V0LmxheW91dEJveCxlLmxheW91dC5sYXlvdXRCb3gpLEphKHRoaXMucmVsYXRpdmVUYXJnZXQsdGhpcy5yZWxhdGl2ZVRhcmdldE9yaWdpbikpOnRoaXMucmVsYXRpdmVQYXJlbnQ9dGhpcy5yZWxhdGl2ZVRhcmdldD12b2lkIDB9aWYoKHRoaXMucmVsYXRpdmVUYXJnZXR8fHRoaXMudGFyZ2V0RGVsdGEpJiYodGhpcy50YXJnZXR8fCh0aGlzLnRhcmdldD1IbygpLHRoaXMudGFyZ2V0V2l0aFRyYW5zZm9ybXM9SG8oKSksdGhpcy5yZWxhdGl2ZVRhcmdldCYmdGhpcy5yZWxhdGl2ZVRhcmdldE9yaWdpbiYmKG51bGw9PT0oZT10aGlzLnJlbGF0aXZlUGFyZW50KXx8dm9pZCAwPT09ZT92b2lkIDA6ZS50YXJnZXQpP2Z1bmN0aW9uKGUsdCxuKXtQbyhlLngsdC54LG4ueCksUG8oZS55LHQueSxuLnkpfSh0aGlzLnRhcmdldCx0aGlzLnJlbGF0aXZlVGFyZ2V0LHRoaXMucmVsYXRpdmVQYXJlbnQudGFyZ2V0KTp0aGlzLnRhcmdldERlbHRhPyhCb29sZWFuKHRoaXMucmVzdW1pbmdGcm9tKT90aGlzLnRhcmdldD10aGlzLmFwcGx5VHJhbnNmb3JtKHRoaXMubGF5b3V0LmxheW91dEJveCk6SmEodGhpcy50YXJnZXQsdGhpcy5sYXlvdXQubGF5b3V0Qm94KSwkbyh0aGlzLnRhcmdldCx0aGlzLnRhcmdldERlbHRhKSk6SmEodGhpcy50YXJnZXQsdGhpcy5sYXlvdXQubGF5b3V0Qm94KSx0aGlzLmF0dGVtcHRUb1Jlc29sdmVSZWxhdGl2ZVRhcmdldCkpe3RoaXMuYXR0ZW1wdFRvUmVzb2x2ZVJlbGF0aXZlVGFyZ2V0PSExO2NvbnN0IGU9dGhpcy5nZXRDbG9zZXN0UHJvamVjdGluZ1BhcmVudCgpO2UmJkJvb2xlYW4oZS5yZXN1bWluZ0Zyb20pPT09Qm9vbGVhbih0aGlzLnJlc3VtaW5nRnJvbSkmJiFlLm9wdGlvbnMubGF5b3V0U2Nyb2xsJiZlLnRhcmdldD8odGhpcy5yZWxhdGl2ZVBhcmVudD1lLHRoaXMucmVsYXRpdmVUYXJnZXQ9SG8oKSx0aGlzLnJlbGF0aXZlVGFyZ2V0T3JpZ2luPUhvKCksTG8odGhpcy5yZWxhdGl2ZVRhcmdldE9yaWdpbix0aGlzLnRhcmdldCxlLnRhcmdldCksSmEodGhpcy5yZWxhdGl2ZVRhcmdldCx0aGlzLnJlbGF0aXZlVGFyZ2V0T3JpZ2luKSk6dGhpcy5yZWxhdGl2ZVBhcmVudD10aGlzLnJlbGF0aXZlVGFyZ2V0PXZvaWQgMH19fWdldENsb3Nlc3RQcm9qZWN0aW5nUGFyZW50KCl7aWYodGhpcy5wYXJlbnQmJiF6byh0aGlzLnBhcmVudC5sYXRlc3RWYWx1ZXMpJiYhWW8odGhpcy5wYXJlbnQubGF0ZXN0VmFsdWVzKSlyZXR1cm4odGhpcy5wYXJlbnQucmVsYXRpdmVUYXJnZXR8fHRoaXMucGFyZW50LnRhcmdldERlbHRhKSYmdGhpcy5wYXJlbnQubGF5b3V0P3RoaXMucGFyZW50OnRoaXMucGFyZW50LmdldENsb3Nlc3RQcm9qZWN0aW5nUGFyZW50KCl9Y2FsY1Byb2plY3Rpb24oKXt2YXIgZTtjb25zdHtpc1Byb2plY3Rpb25EaXJ0eTp0LGlzVHJhbnNmb3JtRGlydHk6bn09dGhpczt0aGlzLmlzUHJvamVjdGlvbkRpcnR5PXRoaXMuaXNUcmFuc2Zvcm1EaXJ0eT0hMTtjb25zdCByPXRoaXMuZ2V0TGVhZCgpLGk9Qm9vbGVhbih0aGlzLnJlc3VtaW5nRnJvbSl8fHRoaXMhPT1yO2xldCBvPSEwO2lmKHQmJihvPSExKSxpJiZuJiYobz0hMSksbylyZXR1cm47Y29uc3R7bGF5b3V0OmEsbGF5b3V0SWQ6c309dGhpcy5vcHRpb25zO2lmKHRoaXMuaXNUcmVlQW5pbWF0aW5nPUJvb2xlYW4oKG51bGw9PT0oZT10aGlzLnBhcmVudCl8fHZvaWQgMD09PWU/dm9pZCAwOmUuaXNUcmVlQW5pbWF0aW5nKXx8dGhpcy5jdXJyZW50QW5pbWF0aW9ufHx0aGlzLnBlbmRpbmdBbmltYXRpb24pLHRoaXMuaXNUcmVlQW5pbWF0aW5nfHwodGhpcy50YXJnZXREZWx0YT10aGlzLnJlbGF0aXZlVGFyZ2V0PXZvaWQgMCksIXRoaXMubGF5b3V0fHwhYSYmIXMpcmV0dXJuO0phKHRoaXMubGF5b3V0Q29ycmVjdGVkLHRoaXMubGF5b3V0LmxheW91dEJveCksZnVuY3Rpb24oZSx0LG4scj0hMSl7dmFyIGksbztjb25zdCBhPW4ubGVuZ3RoO2lmKCFhKXJldHVybjtsZXQgcyxjO3QueD10Lnk9MTtmb3IobGV0IGw9MDtsPGE7bCsrKXM9bltsXSxjPXMucHJvamVjdGlvbkRlbHRhLFwiY29udGVudHNcIiE9PShudWxsPT09KG89bnVsbD09PShpPXMuaW5zdGFuY2UpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnN0eWxlKXx8dm9pZCAwPT09bz92b2lkIDA6by5kaXNwbGF5KSYmKHImJnMub3B0aW9ucy5sYXlvdXRTY3JvbGwmJnMuc2Nyb2xsJiZzIT09cy5yb290JiZvYShlLHt4Oi1zLnNjcm9sbC5vZmZzZXQueCx5Oi1zLnNjcm9sbC5vZmZzZXQueX0pLGMmJih0LngqPWMueC5zY2FsZSx0LnkqPWMueS5zY2FsZSwkbyhlLGMpKSxyJiZLbyhzLmxhdGVzdFZhbHVlcykmJm9hKGUscy5sYXRlc3RWYWx1ZXMpKTt0Lng9ZWEodC54KSx0Lnk9ZWEodC55KX0odGhpcy5sYXlvdXRDb3JyZWN0ZWQsdGhpcy50cmVlU2NhbGUsdGhpcy5wYXRoLGkpO2NvbnN0e3RhcmdldDpjfT1yO2lmKCFjKXJldHVybjt0aGlzLnByb2plY3Rpb25EZWx0YXx8KHRoaXMucHJvamVjdGlvbkRlbHRhPUdvKCksdGhpcy5wcm9qZWN0aW9uRGVsdGFXaXRoVHJhbnNmb3JtPUdvKCkpO2NvbnN0IGw9dGhpcy50cmVlU2NhbGUueCx1PXRoaXMudHJlZVNjYWxlLnksZD10aGlzLnByb2plY3Rpb25UcmFuc2Zvcm07RG8odGhpcy5wcm9qZWN0aW9uRGVsdGEsdGhpcy5sYXlvdXRDb3JyZWN0ZWQsYyx0aGlzLmxhdGVzdFZhbHVlcyksdGhpcy5wcm9qZWN0aW9uVHJhbnNmb3JtPWxzKHRoaXMucHJvamVjdGlvbkRlbHRhLHRoaXMudHJlZVNjYWxlKSx0aGlzLnByb2plY3Rpb25UcmFuc2Zvcm09PT1kJiZ0aGlzLnRyZWVTY2FsZS54PT09bCYmdGhpcy50cmVlU2NhbGUueT09PXV8fCh0aGlzLmhhc1Byb2plY3RlZD0hMCx0aGlzLnNjaGVkdWxlUmVuZGVyKCksdGhpcy5ub3RpZnlMaXN0ZW5lcnMoXCJwcm9qZWN0aW9uVXBkYXRlXCIsYykpfWhpZGUoKXt0aGlzLmlzVmlzaWJsZT0hMX1zaG93KCl7dGhpcy5pc1Zpc2libGU9ITB9c2NoZWR1bGVSZW5kZXIoZT0hMCl7dmFyIHQsbixyO251bGw9PT0obj0odD10aGlzLm9wdGlvbnMpLnNjaGVkdWxlUmVuZGVyKXx8dm9pZCAwPT09bnx8bi5jYWxsKHQpLGUmJihudWxsPT09KHI9dGhpcy5nZXRTdGFjaygpKXx8dm9pZCAwPT09cnx8ci5zY2hlZHVsZVJlbmRlcigpKSx0aGlzLnJlc3VtaW5nRnJvbSYmIXRoaXMucmVzdW1pbmdGcm9tLmluc3RhbmNlJiYodGhpcy5yZXN1bWluZ0Zyb209dm9pZCAwKX1zZXRBbmltYXRpb25PcmlnaW4oZSx0PSExKXt2YXIgbixyO2NvbnN0IGk9dGhpcy5zbmFwc2hvdCxvPShudWxsPT1pP3ZvaWQgMDppLmxhdGVzdFZhbHVlcyl8fHt9LGE9ey4uLnRoaXMubGF0ZXN0VmFsdWVzfSxzPUdvKCk7dGhpcy5yZWxhdGl2ZVRhcmdldD10aGlzLnJlbGF0aXZlVGFyZ2V0T3JpZ2luPXZvaWQgMCx0aGlzLmF0dGVtcHRUb1Jlc29sdmVSZWxhdGl2ZVRhcmdldD0hdDtjb25zdCBjPUhvKCksbD0obnVsbD09aT92b2lkIDA6aS5zb3VyY2UpIT09KG51bGw9PT0obj10aGlzLmxheW91dCl8fHZvaWQgMD09PW4/dm9pZCAwOm4uc291cmNlKSx1PSgobnVsbD09PShyPXRoaXMuZ2V0U3RhY2soKSl8fHZvaWQgMD09PXI/dm9pZCAwOnIubWVtYmVycy5sZW5ndGgpfHwwKTw9MSxkPUJvb2xlYW4obCYmIXUmJiEwPT09dGhpcy5vcHRpb25zLmNyb3NzZmFkZSYmIXRoaXMucGF0aC5zb21lKGtzKSk7dGhpcy5hbmltYXRpb25Qcm9ncmVzcz0wLHRoaXMubWl4VGFyZ2V0RGVsdGE9dD0+e3ZhciBuO2NvbnN0IHI9dC8xZTM7dmFyIGksZixwLG07QXMocy54LGUueCxyKSxBcyhzLnksZS55LHIpLHRoaXMuc2V0VGFyZ2V0RGVsdGEocyksdGhpcy5yZWxhdGl2ZVRhcmdldCYmdGhpcy5yZWxhdGl2ZVRhcmdldE9yaWdpbiYmdGhpcy5sYXlvdXQmJihudWxsPT09KG49dGhpcy5yZWxhdGl2ZVBhcmVudCl8fHZvaWQgMD09PW4/dm9pZCAwOm4ubGF5b3V0KSYmKExvKGMsdGhpcy5sYXlvdXQubGF5b3V0Qm94LHRoaXMucmVsYXRpdmVQYXJlbnQubGF5b3V0LmxheW91dEJveCksaT10aGlzLnJlbGF0aXZlVGFyZ2V0LGY9dGhpcy5yZWxhdGl2ZVRhcmdldE9yaWdpbixwPWMsbT1yLFJzKGkueCxmLngscC54LG0pLFJzKGkueSxmLnkscC55LG0pKSxsJiYodGhpcy5hbmltYXRpb25WYWx1ZXM9YSxmdW5jdGlvbihlLHQsbixyLGksbyl7aT8oZS5vcGFjaXR5PXNpKDAsdm9pZCAwIT09bi5vcGFjaXR5P24ub3BhY2l0eToxLFlhKHIpKSxlLm9wYWNpdHlFeGl0PXNpKHZvaWQgMCE9PXQub3BhY2l0eT90Lm9wYWNpdHk6MSwwLHFhKHIpKSk6byYmKGUub3BhY2l0eT1zaSh2b2lkIDAhPT10Lm9wYWNpdHk/dC5vcGFjaXR5OjEsdm9pZCAwIT09bi5vcGFjaXR5P24ub3BhY2l0eToxLHIpKTtmb3IobGV0IGk9MDtpPGphO2krKyl7Y29uc3Qgbz1gYm9yZGVyJHtXYVtpXX1SYWRpdXNgO2xldCBhPUthKHQsbykscz1LYShuLG8pO3ZvaWQgMD09PWEmJnZvaWQgMD09PXN8fChhfHwoYT0wKSxzfHwocz0wKSwwPT09YXx8MD09PXN8fHphKGEpPT09emEocyk/KGVbb109TWF0aC5tYXgoc2koWmEoYSksWmEocyksciksMCksKEF0LnRlc3Qocyl8fEF0LnRlc3QoYSkpJiYoZVtvXSs9XCIlXCIpKTplW29dPXMpfSh0LnJvdGF0ZXx8bi5yb3RhdGUpJiYoZS5yb3RhdGU9c2kodC5yb3RhdGV8fDAsbi5yb3RhdGV8fDAscikpfShhLG8sdGhpcy5sYXRlc3RWYWx1ZXMscixkLHUpKSx0aGlzLnJvb3Quc2NoZWR1bGVVcGRhdGVQcm9qZWN0aW9uKCksdGhpcy5zY2hlZHVsZVJlbmRlcigpLHRoaXMuYW5pbWF0aW9uUHJvZ3Jlc3M9cn0sdGhpcy5taXhUYXJnZXREZWx0YSgwKX1zdGFydEFuaW1hdGlvbihlKXt2YXIgdCxuO3RoaXMubm90aWZ5TGlzdGVuZXJzKFwiYW5pbWF0aW9uU3RhcnRcIiksbnVsbD09PSh0PXRoaXMuY3VycmVudEFuaW1hdGlvbil8fHZvaWQgMD09PXR8fHQuc3RvcCgpLHRoaXMucmVzdW1pbmdGcm9tJiYobnVsbD09PShuPXRoaXMucmVzdW1pbmdGcm9tLmN1cnJlbnRBbmltYXRpb24pfHx2b2lkIDA9PT1ufHxuLnN0b3AoKSksdGhpcy5wZW5kaW5nQW5pbWF0aW9uJiYobHIudXBkYXRlKHRoaXMucGVuZGluZ0FuaW1hdGlvbiksdGhpcy5wZW5kaW5nQW5pbWF0aW9uPXZvaWQgMCksdGhpcy5wZW5kaW5nQW5pbWF0aW9uPWNyLnVwZGF0ZSgoKCk9PntYZS5oYXNBbmltYXRlZFNpbmNlUmVzaXplPSEwLHRoaXMuY3VycmVudEFuaW1hdGlvbj1mdW5jdGlvbihlLHQsbj17fSl7Y29uc3Qgcj11dChlKT9lOkVyKGUpO3JldHVybiByLnN0YXJ0KGxvKFwiXCIscix0LG4pKSx7c3RvcDooKT0+ci5zdG9wKCksaXNBbmltYXRpbmc6KCk9PnIuaXNBbmltYXRpbmcoKX19KDAsMWUzLHsuLi5lLG9uVXBkYXRlOnQ9Pnt2YXIgbjt0aGlzLm1peFRhcmdldERlbHRhKHQpLG51bGw9PT0obj1lLm9uVXBkYXRlKXx8dm9pZCAwPT09bnx8bi5jYWxsKGUsdCl9LG9uQ29tcGxldGU6KCk9Pnt2YXIgdDtudWxsPT09KHQ9ZS5vbkNvbXBsZXRlKXx8dm9pZCAwPT09dHx8dC5jYWxsKGUpLHRoaXMuY29tcGxldGVBbmltYXRpb24oKX19KSx0aGlzLnJlc3VtaW5nRnJvbSYmKHRoaXMucmVzdW1pbmdGcm9tLmN1cnJlbnRBbmltYXRpb249dGhpcy5jdXJyZW50QW5pbWF0aW9uKSx0aGlzLnBlbmRpbmdBbmltYXRpb249dm9pZCAwfSkpfWNvbXBsZXRlQW5pbWF0aW9uKCl7dmFyIGU7dGhpcy5yZXN1bWluZ0Zyb20mJih0aGlzLnJlc3VtaW5nRnJvbS5jdXJyZW50QW5pbWF0aW9uPXZvaWQgMCx0aGlzLnJlc3VtaW5nRnJvbS5wcmVzZXJ2ZU9wYWNpdHk9dm9pZCAwKSxudWxsPT09KGU9dGhpcy5nZXRTdGFjaygpKXx8dm9pZCAwPT09ZXx8ZS5leGl0QW5pbWF0aW9uQ29tcGxldGUoKSx0aGlzLnJlc3VtaW5nRnJvbT10aGlzLmN1cnJlbnRBbmltYXRpb249dGhpcy5hbmltYXRpb25WYWx1ZXM9dm9pZCAwLHRoaXMubm90aWZ5TGlzdGVuZXJzKFwiYW5pbWF0aW9uQ29tcGxldGVcIil9ZmluaXNoQW5pbWF0aW9uKCl7dmFyIGU7dGhpcy5jdXJyZW50QW5pbWF0aW9uJiYobnVsbD09PShlPXRoaXMubWl4VGFyZ2V0RGVsdGEpfHx2b2lkIDA9PT1lfHxlLmNhbGwodGhpcywxZTMpLHRoaXMuY3VycmVudEFuaW1hdGlvbi5zdG9wKCkpLHRoaXMuY29tcGxldGVBbmltYXRpb24oKX1hcHBseVRyYW5zZm9ybXNUb1RhcmdldCgpe2NvbnN0IGU9dGhpcy5nZXRMZWFkKCk7bGV0e3RhcmdldFdpdGhUcmFuc2Zvcm1zOnQsdGFyZ2V0Om4sbGF5b3V0OnIsbGF0ZXN0VmFsdWVzOml9PWU7aWYodCYmbiYmcil7aWYodGhpcyE9PWUmJnRoaXMubGF5b3V0JiZyJiZEcyh0aGlzLm9wdGlvbnMuYW5pbWF0aW9uVHlwZSx0aGlzLmxheW91dC5sYXlvdXRCb3gsci5sYXlvdXRCb3gpKXtuPXRoaXMudGFyZ2V0fHxIbygpO2NvbnN0IHQ9T28odGhpcy5sYXlvdXQubGF5b3V0Qm94LngpO24ueC5taW49ZS50YXJnZXQueC5taW4sbi54Lm1heD1uLngubWluK3Q7Y29uc3Qgcj1Pbyh0aGlzLmxheW91dC5sYXlvdXRCb3gueSk7bi55Lm1pbj1lLnRhcmdldC55Lm1pbixuLnkubWF4PW4ueS5taW4rcn1KYSh0LG4pLG9hKHQsaSksRG8odGhpcy5wcm9qZWN0aW9uRGVsdGFXaXRoVHJhbnNmb3JtLHRoaXMubGF5b3V0Q29ycmVjdGVkLHQsaSl9fXJlZ2lzdGVyU2hhcmVkTm9kZShlLHQpe3ZhciBuLHIsaTt0aGlzLnNoYXJlZE5vZGVzLmhhcyhlKXx8dGhpcy5zaGFyZWROb2Rlcy5zZXQoZSxuZXcgY3MpLHRoaXMuc2hhcmVkTm9kZXMuZ2V0KGUpLmFkZCh0KSx0LnByb21vdGUoe3RyYW5zaXRpb246bnVsbD09PShuPXQub3B0aW9ucy5pbml0aWFsUHJvbW90aW9uQ29uZmlnKXx8dm9pZCAwPT09bj92b2lkIDA6bi50cmFuc2l0aW9uLHByZXNlcnZlRm9sbG93T3BhY2l0eTpudWxsPT09KGk9bnVsbD09PShyPXQub3B0aW9ucy5pbml0aWFsUHJvbW90aW9uQ29uZmlnKXx8dm9pZCAwPT09cj92b2lkIDA6ci5zaG91bGRQcmVzZXJ2ZUZvbGxvd09wYWNpdHkpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLmNhbGwocix0KX0pfWlzTGVhZCgpe2NvbnN0IGU9dGhpcy5nZXRTdGFjaygpO3JldHVybiFlfHxlLmxlYWQ9PT10aGlzfWdldExlYWQoKXt2YXIgZTtjb25zdHtsYXlvdXRJZDp0fT10aGlzLm9wdGlvbnM7cmV0dXJuIHQmJihudWxsPT09KGU9dGhpcy5nZXRTdGFjaygpKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5sZWFkKXx8dGhpc31nZXRQcmV2TGVhZCgpe3ZhciBlO2NvbnN0e2xheW91dElkOnR9PXRoaXMub3B0aW9ucztyZXR1cm4gdD9udWxsPT09KGU9dGhpcy5nZXRTdGFjaygpKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5wcmV2TGVhZDp2b2lkIDB9Z2V0U3RhY2soKXtjb25zdHtsYXlvdXRJZDplfT10aGlzLm9wdGlvbnM7aWYoZSlyZXR1cm4gdGhpcy5yb290LnNoYXJlZE5vZGVzLmdldChlKX1wcm9tb3RlKHtuZWVkc1Jlc2V0OmUsdHJhbnNpdGlvbjp0LHByZXNlcnZlRm9sbG93T3BhY2l0eTpufT17fSl7Y29uc3Qgcj10aGlzLmdldFN0YWNrKCk7ciYmci5wcm9tb3RlKHRoaXMsbiksZSYmKHRoaXMucHJvamVjdGlvbkRlbHRhPXZvaWQgMCx0aGlzLm5lZWRzUmVzZXQ9ITApLHQmJnRoaXMuc2V0T3B0aW9ucyh7dHJhbnNpdGlvbjp0fSl9cmVsZWdhdGUoKXtjb25zdCBlPXRoaXMuZ2V0U3RhY2soKTtyZXR1cm4hIWUmJmUucmVsZWdhdGUodGhpcyl9cmVzZXRSb3RhdGlvbigpe2NvbnN0e3Zpc3VhbEVsZW1lbnQ6ZX09dGhpcy5vcHRpb25zO2lmKCFlKXJldHVybjtsZXQgdD0hMTtjb25zdHtsYXRlc3RWYWx1ZXM6bn09ZTtpZigobi5yb3RhdGV8fG4ucm90YXRlWHx8bi5yb3RhdGVZfHxuLnJvdGF0ZVopJiYodD0hMCksIXQpcmV0dXJuO2NvbnN0IHI9e307Zm9yKGxldCB0PTA7dDxmcy5sZW5ndGg7dCsrKXtjb25zdCBpPVwicm90YXRlXCIrZnNbdF07bltpXSYmKHJbaV09bltpXSxlLnNldFN0YXRpY1ZhbHVlKGksMCkpfW51bGw9PWV8fGUucmVuZGVyKCk7Zm9yKGNvbnN0IHQgaW4gcillLnNldFN0YXRpY1ZhbHVlKHQsclt0XSk7ZS5zY2hlZHVsZVJlbmRlcigpfWdldFByb2plY3Rpb25TdHlsZXMoZT17fSl7dmFyIHQsbixyO2NvbnN0IGk9e307aWYoIXRoaXMuaW5zdGFuY2V8fHRoaXMuaXNTVkcpcmV0dXJuIGk7aWYoIXRoaXMuaXNWaXNpYmxlKXJldHVybnt2aXNpYmlsaXR5OlwiaGlkZGVuXCJ9O2kudmlzaWJpbGl0eT1cIlwiO2NvbnN0IG89bnVsbD09PSh0PXRoaXMub3B0aW9ucy52aXN1YWxFbGVtZW50KXx8dm9pZCAwPT09dD92b2lkIDA6dC5nZXRQcm9wcygpLnRyYW5zZm9ybVRlbXBsYXRlO2lmKHRoaXMubmVlZHNSZXNldClyZXR1cm4gdGhpcy5uZWVkc1Jlc2V0PSExLGkub3BhY2l0eT1cIlwiLGkucG9pbnRlckV2ZW50cz1hbihlLnBvaW50ZXJFdmVudHMpfHxcIlwiLGkudHJhbnNmb3JtPW8/byh0aGlzLmxhdGVzdFZhbHVlcyxcIlwiKTpcIm5vbmVcIixpO2NvbnN0IGE9dGhpcy5nZXRMZWFkKCk7aWYoIXRoaXMucHJvamVjdGlvbkRlbHRhfHwhdGhpcy5sYXlvdXR8fCFhLnRhcmdldCl7Y29uc3QgdD17fTtyZXR1cm4gdGhpcy5vcHRpb25zLmxheW91dElkJiYodC5vcGFjaXR5PXZvaWQgMCE9PXRoaXMubGF0ZXN0VmFsdWVzLm9wYWNpdHk/dGhpcy5sYXRlc3RWYWx1ZXMub3BhY2l0eToxLHQucG9pbnRlckV2ZW50cz1hbihlLnBvaW50ZXJFdmVudHMpfHxcIlwiKSx0aGlzLmhhc1Byb2plY3RlZCYmIUtvKHRoaXMubGF0ZXN0VmFsdWVzKSYmKHQudHJhbnNmb3JtPW8/byh7fSxcIlwiKTpcIm5vbmVcIix0aGlzLmhhc1Byb2plY3RlZD0hMSksdH1jb25zdCBzPWEuYW5pbWF0aW9uVmFsdWVzfHxhLmxhdGVzdFZhbHVlczt0aGlzLmFwcGx5VHJhbnNmb3Jtc1RvVGFyZ2V0KCksaS50cmFuc2Zvcm09bHModGhpcy5wcm9qZWN0aW9uRGVsdGFXaXRoVHJhbnNmb3JtLHRoaXMudHJlZVNjYWxlLHMpLG8mJihpLnRyYW5zZm9ybT1vKHMsaS50cmFuc2Zvcm0pKTtjb25zdHt4OmMseTpsfT10aGlzLnByb2plY3Rpb25EZWx0YTtpLnRyYW5zZm9ybU9yaWdpbj1gJHsxMDAqYy5vcmlnaW59JSAkezEwMCpsLm9yaWdpbn0lIDBgLGEuYW5pbWF0aW9uVmFsdWVzP2kub3BhY2l0eT1hPT09dGhpcz9udWxsIT09KHI9bnVsbCE9PShuPXMub3BhY2l0eSkmJnZvaWQgMCE9PW4/bjp0aGlzLmxhdGVzdFZhbHVlcy5vcGFjaXR5KSYmdm9pZCAwIT09cj9yOjE6dGhpcy5wcmVzZXJ2ZU9wYWNpdHk/dGhpcy5sYXRlc3RWYWx1ZXMub3BhY2l0eTpzLm9wYWNpdHlFeGl0Omkub3BhY2l0eT1hPT09dGhpcz92b2lkIDAhPT1zLm9wYWNpdHk/cy5vcGFjaXR5OlwiXCI6dm9pZCAwIT09cy5vcGFjaXR5RXhpdD9zLm9wYWNpdHlFeGl0OjA7Zm9yKGNvbnN0IGUgaW4gYXQpe2lmKHZvaWQgMD09PXNbZV0pY29udGludWU7Y29uc3R7Y29ycmVjdDp0LGFwcGx5VG86bn09YXRbZV0scj10KHNbZV0sYSk7aWYobil7Y29uc3QgZT1uLmxlbmd0aDtmb3IobGV0IHQ9MDt0PGU7dCsrKWlbblt0XV09cn1lbHNlIGlbZV09cn1yZXR1cm4gdGhpcy5vcHRpb25zLmxheW91dElkJiYoaS5wb2ludGVyRXZlbnRzPWE9PT10aGlzP2FuKGUucG9pbnRlckV2ZW50cyl8fFwiXCI6XCJub25lXCIpLGl9Y2xlYXJTbmFwc2hvdCgpe3RoaXMucmVzdW1lRnJvbT10aGlzLnNuYXBzaG90PXZvaWQgMH1yZXNldFRyZWUoKXt0aGlzLnJvb3Qubm9kZXMuZm9yRWFjaCgoZT0+e3ZhciB0O3JldHVybiBudWxsPT09KHQ9ZS5jdXJyZW50QW5pbWF0aW9uKXx8dm9pZCAwPT09dD92b2lkIDA6dC5zdG9wKCl9KSksdGhpcy5yb290Lm5vZGVzLmZvckVhY2goRXMpLHRoaXMucm9vdC5zaGFyZWROb2Rlcy5jbGVhcigpfX19ZnVuY3Rpb24gaHMoZSl7ZS51cGRhdGVMYXlvdXQoKX1mdW5jdGlvbiB2cyhlKXt2YXIgdCxuLHI7Y29uc3QgaT0obnVsbD09PSh0PWUucmVzdW1lRnJvbSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuc25hcHNob3QpfHxlLnNuYXBzaG90O2lmKGUuaXNMZWFkKCkmJmUubGF5b3V0JiZpJiZlLmhhc0xpc3RlbmVycyhcImRpZFVwZGF0ZVwiKSl7Y29uc3R7bGF5b3V0Qm94OnQsbWVhc3VyZWRCb3g6bn09ZS5sYXlvdXQse2FuaW1hdGlvblR5cGU6cn09ZS5vcHRpb25zLG89aS5zb3VyY2UhPT1lLmxheW91dC5zb3VyY2U7XCJzaXplXCI9PT1yP1dvKChlPT57Y29uc3Qgbj1vP2kubWVhc3VyZWRCb3hbZV06aS5sYXlvdXRCb3hbZV0scj1PbyhuKTtuLm1pbj10W2VdLm1pbixuLm1heD1uLm1pbityfSkpOkRzKHIsaS5sYXlvdXRCb3gsdCkmJldvKChlPT57Y29uc3Qgbj1vP2kubWVhc3VyZWRCb3hbZV06aS5sYXlvdXRCb3hbZV0scj1Pbyh0W2VdKTtuLm1heD1uLm1pbityfSkpO2NvbnN0IGE9R28oKTtEbyhhLHQsaS5sYXlvdXRCb3gpO2NvbnN0IHM9R28oKTtvP0RvKHMsZS5hcHBseVRyYW5zZm9ybShuLCEwKSxpLm1lYXN1cmVkQm94KTpEbyhzLHQsaS5sYXlvdXRCb3gpO2NvbnN0IGM9IW9zKGEpO2xldCBsPSExO2lmKCFlLnJlc3VtZUZyb20pe2NvbnN0IG49ZS5nZXRDbG9zZXN0UHJvamVjdGluZ1BhcmVudCgpO2lmKG4mJiFuLnJlc3VtZUZyb20pe2NvbnN0e3NuYXBzaG90OmUsbGF5b3V0OnJ9PW47aWYoZSYmcil7Y29uc3Qgbj1IbygpO0xvKG4saS5sYXlvdXRCb3gsZS5sYXlvdXRCb3gpO2NvbnN0IG89SG8oKTtMbyhvLHQsci5sYXlvdXRCb3gpLGFzKG4sbyl8fChsPSEwKX19fWUubm90aWZ5TGlzdGVuZXJzKFwiZGlkVXBkYXRlXCIse2xheW91dDp0LHNuYXBzaG90OmksZGVsdGE6cyxsYXlvdXREZWx0YTphLGhhc0xheW91dENoYW5nZWQ6YyxoYXNSZWxhdGl2ZVRhcmdldENoYW5nZWQ6bH0pfWVsc2UgZS5pc0xlYWQoKSYmKG51bGw9PT0ocj0obj1lLm9wdGlvbnMpLm9uRXhpdENvbXBsZXRlKXx8dm9pZCAwPT09cnx8ci5jYWxsKG4pKTtlLm9wdGlvbnMudHJhbnNpdGlvbj12b2lkIDB9ZnVuY3Rpb24gZ3MoZSl7ZS5pc1Byb2plY3Rpb25EaXJ0eXx8KGUuaXNQcm9qZWN0aW9uRGlydHk9Qm9vbGVhbihlLnBhcmVudCYmZS5wYXJlbnQuaXNQcm9qZWN0aW9uRGlydHkpKSxlLmlzVHJhbnNmb3JtRGlydHl8fChlLmlzVHJhbnNmb3JtRGlydHk9Qm9vbGVhbihlLnBhcmVudCYmZS5wYXJlbnQuaXNUcmFuc2Zvcm1EaXJ0eSkpfWZ1bmN0aW9uIHlzKGUpe2UuY2xlYXJTbmFwc2hvdCgpfWZ1bmN0aW9uIEVzKGUpe2UuY2xlYXJNZWFzdXJlbWVudHMoKX1mdW5jdGlvbiBfcyhlKXtjb25zdHt2aXN1YWxFbGVtZW50OnR9PWUub3B0aW9uczsobnVsbD09dD92b2lkIDA6dC5nZXRQcm9wcygpLm9uQmVmb3JlTGF5b3V0TWVhc3VyZSkmJnQubm90aWZ5KFwiQmVmb3JlTGF5b3V0TWVhc3VyZVwiKSxlLnJlc2V0VHJhbnNmb3JtKCl9ZnVuY3Rpb24gSXMoZSl7ZS5maW5pc2hBbmltYXRpb24oKSxlLnRhcmdldERlbHRhPWUucmVsYXRpdmVUYXJnZXQ9ZS50YXJnZXQ9dm9pZCAwfWZ1bmN0aW9uIFNzKGUpe2UucmVzb2x2ZVRhcmdldERlbHRhKCl9ZnVuY3Rpb24gYnMoZSl7ZS5jYWxjUHJvamVjdGlvbigpfWZ1bmN0aW9uIFRzKGUpe2UucmVzZXRSb3RhdGlvbigpfWZ1bmN0aW9uIENzKGUpe2UucmVtb3ZlTGVhZFNuYXBzaG90KCl9ZnVuY3Rpb24gQXMoZSx0LG4pe2UudHJhbnNsYXRlPXNpKHQudHJhbnNsYXRlLDAsbiksZS5zY2FsZT1zaSh0LnNjYWxlLDEsbiksZS5vcmlnaW49dC5vcmlnaW4sZS5vcmlnaW5Qb2ludD10Lm9yaWdpblBvaW50fWZ1bmN0aW9uIFJzKGUsdCxuLHIpe2UubWluPXNpKHQubWluLG4ubWluLHIpLGUubWF4PXNpKHQubWF4LG4ubWF4LHIpfWZ1bmN0aW9uIGtzKGUpe3JldHVybiBlLmFuaW1hdGlvblZhbHVlcyYmdm9pZCAwIT09ZS5hbmltYXRpb25WYWx1ZXMub3BhY2l0eUV4aXR9Y29uc3QgT3M9e2R1cmF0aW9uOi40NSxlYXNlOlsuNCwwLC4xLDFdfTtmdW5jdGlvbiBOcyhlLHQpe2xldCBuPWUucm9vdDtmb3IobGV0IHQ9ZS5wYXRoLmxlbmd0aC0xO3Q+PTA7dC0tKWlmKEJvb2xlYW4oZS5wYXRoW3RdLmluc3RhbmNlKSl7bj1lLnBhdGhbdF07YnJlYWt9Y29uc3Qgcj0obiYmbiE9PWUucm9vdD9uLmluc3RhbmNlOmRvY3VtZW50KS5xdWVyeVNlbGVjdG9yKGBbZGF0YS1wcm9qZWN0aW9uLWlkPVwiJHt0fVwiXWApO3ImJmUubW91bnQociwhMCl9ZnVuY3Rpb24gd3MoZSl7ZS5taW49TWF0aC5yb3VuZChlLm1pbiksZS5tYXg9TWF0aC5yb3VuZChlLm1heCl9ZnVuY3Rpb24gRHMoZSx0LG4pe3JldHVyblwicG9zaXRpb25cIj09PWV8fFwicHJlc2VydmUtYXNwZWN0XCI9PT1lJiYhTm8oc3ModCksc3MobiksLjIpfWNvbnN0IFBzPW1zKHthdHRhY2hSZXNpemVMaXN0ZW5lcjooZSx0KT0+Zm4oZSxcInJlc2l6ZVwiLHQpLG1lYXN1cmVTY3JvbGw6KCk9Pih7eDpkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdHx8ZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0LHk6ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcHx8ZG9jdW1lbnQuYm9keS5zY3JvbGxUb3B9KSxjaGVja0lzU2Nyb2xsUm9vdDooKT0+ITB9KSxNcz17Y3VycmVudDp2b2lkIDB9LExzPW1zKHttZWFzdXJlU2Nyb2xsOmU9Pih7eDplLnNjcm9sbExlZnQseTplLnNjcm9sbFRvcH0pLGRlZmF1bHRQYXJlbnQ6KCk9PntpZighTXMuY3VycmVudCl7Y29uc3QgZT1uZXcgUHMoMCx7fSk7ZS5tb3VudCh3aW5kb3cpLGUuc2V0T3B0aW9ucyh7bGF5b3V0U2Nyb2xsOiEwfSksTXMuY3VycmVudD1lfXJldHVybiBNcy5jdXJyZW50fSxyZXNldFRyYW5zZm9ybTooZSx0KT0+e2Uuc3R5bGUudHJhbnNmb3JtPXZvaWQgMCE9PXQ/dDpcIm5vbmVcIn0sY2hlY2tJc1Njcm9sbFJvb3Q6ZT0+Qm9vbGVhbihcImZpeGVkXCI9PT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKS5wb3NpdGlvbil9KSxVcz17Li4uX28sLi4uWG4sLi4udWEsLi4uSGF9LHhzPXJ0KCgoZSx0KT0+ZnVuY3Rpb24oZSx7Zm9yd2FyZE1vdGlvblByb3BzOnQ9ITF9LG4scixpKXtyZXR1cm57Li4ub3QoZSk/bG46dW4scHJlbG9hZGVkRmVhdHVyZXM6bix1c2VSZW5kZXI6WXQodCksY3JlYXRlVmlzdWFsRWxlbWVudDpyLHByb2plY3Rpb25Ob2RlQ29uc3RydWN0b3I6aSxDb21wb25lbnQ6ZX19KGUsdCxVcyxMYSxMcykpKTt2YXIgRnM9big0NTU3OCksQnM9bi5uKEZzKSxWcz1uKDE2NzcpLEdzPW4oNDU2OTcpLEhzPW4ubihHcyksV3M9big3MDY1NSksanM9bmV3IE1hcChbW1wiYWFjXCIsXCJhdWRpby9hYWNcIl0sW1wiYWJ3XCIsXCJhcHBsaWNhdGlvbi94LWFiaXdvcmRcIl0sW1wiYXJjXCIsXCJhcHBsaWNhdGlvbi94LWZyZWVhcmNcIl0sW1wiYXZpZlwiLFwiaW1hZ2UvYXZpZlwiXSxbXCJhdmlcIixcInZpZGVvL3gtbXN2aWRlb1wiXSxbXCJhendcIixcImFwcGxpY2F0aW9uL3ZuZC5hbWF6b24uZWJvb2tcIl0sW1wiYmluXCIsXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIl0sW1wiYm1wXCIsXCJpbWFnZS9ibXBcIl0sW1wiYnpcIixcImFwcGxpY2F0aW9uL3gtYnppcFwiXSxbXCJiejJcIixcImFwcGxpY2F0aW9uL3gtYnppcDJcIl0sW1wiY2RhXCIsXCJhcHBsaWNhdGlvbi94LWNkZlwiXSxbXCJjc2hcIixcImFwcGxpY2F0aW9uL3gtY3NoXCJdLFtcImNzc1wiLFwidGV4dC9jc3NcIl0sW1wiY3N2XCIsXCJ0ZXh0L2NzdlwiXSxbXCJkb2NcIixcImFwcGxpY2F0aW9uL21zd29yZFwiXSxbXCJkb2N4XCIsXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudFwiXSxbXCJlb3RcIixcImFwcGxpY2F0aW9uL3ZuZC5tcy1mb250b2JqZWN0XCJdLFtcImVwdWJcIixcImFwcGxpY2F0aW9uL2VwdWIremlwXCJdLFtcImd6XCIsXCJhcHBsaWNhdGlvbi9nemlwXCJdLFtcImdpZlwiLFwiaW1hZ2UvZ2lmXCJdLFtcImhlaWNcIixcImltYWdlL2hlaWNcIl0sW1wiaGVpZlwiLFwiaW1hZ2UvaGVpZlwiXSxbXCJodG1cIixcInRleHQvaHRtbFwiXSxbXCJodG1sXCIsXCJ0ZXh0L2h0bWxcIl0sW1wiaWNvXCIsXCJpbWFnZS92bmQubWljcm9zb2Z0Lmljb25cIl0sW1wiaWNzXCIsXCJ0ZXh0L2NhbGVuZGFyXCJdLFtcImphclwiLFwiYXBwbGljYXRpb24vamF2YS1hcmNoaXZlXCJdLFtcImpwZWdcIixcImltYWdlL2pwZWdcIl0sW1wianBnXCIsXCJpbWFnZS9qcGVnXCJdLFtcImpzXCIsXCJ0ZXh0L2phdmFzY3JpcHRcIl0sW1wianNvblwiLFwiYXBwbGljYXRpb24vanNvblwiXSxbXCJqc29ubGRcIixcImFwcGxpY2F0aW9uL2xkK2pzb25cIl0sW1wibWlkXCIsXCJhdWRpby9taWRpXCJdLFtcIm1pZGlcIixcImF1ZGlvL21pZGlcIl0sW1wibWpzXCIsXCJ0ZXh0L2phdmFzY3JpcHRcIl0sW1wibXAzXCIsXCJhdWRpby9tcGVnXCJdLFtcIm1wNFwiLFwidmlkZW8vbXA0XCJdLFtcIm1wZWdcIixcInZpZGVvL21wZWdcIl0sW1wibXBrZ1wiLFwiYXBwbGljYXRpb24vdm5kLmFwcGxlLmluc3RhbGxlcit4bWxcIl0sW1wib2RwXCIsXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnByZXNlbnRhdGlvblwiXSxbXCJvZHNcIixcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXRcIl0sW1wib2R0XCIsXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnRleHRcIl0sW1wib2dhXCIsXCJhdWRpby9vZ2dcIl0sW1wib2d2XCIsXCJ2aWRlby9vZ2dcIl0sW1wib2d4XCIsXCJhcHBsaWNhdGlvbi9vZ2dcIl0sW1wib3B1c1wiLFwiYXVkaW8vb3B1c1wiXSxbXCJvdGZcIixcImZvbnQvb3RmXCJdLFtcInBuZ1wiLFwiaW1hZ2UvcG5nXCJdLFtcInBkZlwiLFwiYXBwbGljYXRpb24vcGRmXCJdLFtcInBocFwiLFwiYXBwbGljYXRpb24veC1odHRwZC1waHBcIl0sW1wicHB0XCIsXCJhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludFwiXSxbXCJwcHR4XCIsXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc2VudGF0aW9uXCJdLFtcInJhclwiLFwiYXBwbGljYXRpb24vdm5kLnJhclwiXSxbXCJydGZcIixcImFwcGxpY2F0aW9uL3J0ZlwiXSxbXCJzaFwiLFwiYXBwbGljYXRpb24veC1zaFwiXSxbXCJzdmdcIixcImltYWdlL3N2Zyt4bWxcIl0sW1wic3dmXCIsXCJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaFwiXSxbXCJ0YXJcIixcImFwcGxpY2F0aW9uL3gtdGFyXCJdLFtcInRpZlwiLFwiaW1hZ2UvdGlmZlwiXSxbXCJ0aWZmXCIsXCJpbWFnZS90aWZmXCJdLFtcInRzXCIsXCJ2aWRlby9tcDJ0XCJdLFtcInR0ZlwiLFwiZm9udC90dGZcIl0sW1widHh0XCIsXCJ0ZXh0L3BsYWluXCJdLFtcInZzZFwiLFwiYXBwbGljYXRpb24vdm5kLnZpc2lvXCJdLFtcIndhdlwiLFwiYXVkaW8vd2F2XCJdLFtcIndlYmFcIixcImF1ZGlvL3dlYm1cIl0sW1wid2VibVwiLFwidmlkZW8vd2VibVwiXSxbXCJ3ZWJwXCIsXCJpbWFnZS93ZWJwXCJdLFtcIndvZmZcIixcImZvbnQvd29mZlwiXSxbXCJ3b2ZmMlwiLFwiZm9udC93b2ZmMlwiXSxbXCJ4aHRtbFwiLFwiYXBwbGljYXRpb24veGh0bWwreG1sXCJdLFtcInhsc1wiLFwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsXCJdLFtcInhsc3hcIixcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0XCJdLFtcInhtbFwiLFwiYXBwbGljYXRpb24veG1sXCJdLFtcInh1bFwiLFwiYXBwbGljYXRpb24vdm5kLm1vemlsbGEueHVsK3htbFwiXSxbXCJ6aXBcIixcImFwcGxpY2F0aW9uL3ppcFwiXSxbXCI3elwiLFwiYXBwbGljYXRpb24veC03ei1jb21wcmVzc2VkXCJdLFtcIm1rdlwiLFwidmlkZW8veC1tYXRyb3NrYVwiXSxbXCJtb3ZcIixcInZpZGVvL3F1aWNrdGltZVwiXSxbXCJtc2dcIixcImFwcGxpY2F0aW9uL3ZuZC5tcy1vdXRsb29rXCJdXSk7ZnVuY3Rpb24gWnMoZSx0KXt2YXIgbj1mdW5jdGlvbihlKXt2YXIgdD1lLm5hbWU7aWYodCYmLTEhPT10Lmxhc3RJbmRleE9mKFwiLlwiKSYmIWUudHlwZSl7dmFyIG49dC5zcGxpdChcIi5cIikucG9wKCkudG9Mb3dlckNhc2UoKSxyPWpzLmdldChuKTtyJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcInR5cGVcIix7dmFsdWU6cix3cml0YWJsZTohMSxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMH0pfXJldHVybiBlfShlKTtpZihcInN0cmluZ1wiIT10eXBlb2Ygbi5wYXRoKXt2YXIgcj1lLndlYmtpdFJlbGF0aXZlUGF0aDtPYmplY3QuZGVmaW5lUHJvcGVydHkobixcInBhdGhcIix7dmFsdWU6XCJzdHJpbmdcIj09dHlwZW9mIHQ/dDpcInN0cmluZ1wiPT10eXBlb2YgciYmci5sZW5ndGg+MD9yOmUubmFtZSx3cml0YWJsZTohMSxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMH0pfXJldHVybiBufXZhciB6cz1bXCIuRFNfU3RvcmVcIixcIlRodW1icy5kYlwiXTtmdW5jdGlvbiBLcyhlKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZSYmbnVsbCE9PWV9ZnVuY3Rpb24gWXMoZSl7cmV0dXJuIEpzKGUudGFyZ2V0LmZpbGVzKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBacyhlKX0pKX1mdW5jdGlvbiBxcyhlKXtyZXR1cm4oMCxXcy5fX2F3YWl0ZXIpKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXtyZXR1cm4oMCxXcy5fX2dlbmVyYXRvcikodGhpcywoZnVuY3Rpb24odCl7c3dpdGNoKHQubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCxQcm9taXNlLmFsbChlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0RmlsZSgpfSkpKV07Y2FzZSAxOnJldHVyblsyLHQuc2VudCgpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIFpzKGUpfSkpXX19KSl9KSl9ZnVuY3Rpb24gWHMoZSx0KXtyZXR1cm4oMCxXcy5fX2F3YWl0ZXIpKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXt2YXIgbjtyZXR1cm4oMCxXcy5fX2dlbmVyYXRvcikodGhpcywoZnVuY3Rpb24ocil7c3dpdGNoKHIubGFiZWwpe2Nhc2UgMDpyZXR1cm4gZS5pdGVtcz8obj1KcyhlLml0ZW1zKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVyblwiZmlsZVwiPT09ZS5raW5kfSkpLFwiZHJvcFwiIT09dD9bMixuXTpbNCxQcm9taXNlLmFsbChuLm1hcCgkcykpXSk6WzMsMl07Y2FzZSAxOnJldHVyblsyLFFzKGVjKHIuc2VudCgpKSldO2Nhc2UgMjpyZXR1cm5bMixRcyhKcyhlLmZpbGVzKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBacyhlKX0pKSldfX0pKX0pKX1mdW5jdGlvbiBRcyhlKXtyZXR1cm4gZS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybi0xPT09enMuaW5kZXhPZihlLm5hbWUpfSkpfWZ1bmN0aW9uIEpzKGUpe2lmKG51bGw9PT1lKXJldHVybltdO2Zvcih2YXIgdD1bXSxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl07dC5wdXNoKHIpfXJldHVybiB0fWZ1bmN0aW9uICRzKGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUud2Via2l0R2V0QXNFbnRyeSlyZXR1cm4gdGMoZSk7dmFyIHQ9ZS53ZWJraXRHZXRBc0VudHJ5KCk7cmV0dXJuIHQmJnQuaXNEaXJlY3Rvcnk/cmModCk6dGMoZSl9ZnVuY3Rpb24gZWMoZSl7cmV0dXJuIGUucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybigwLFdzLl9fc3ByZWFkQXJyYXkpKCgwLFdzLl9fc3ByZWFkQXJyYXkpKFtdLCgwLFdzLl9fcmVhZCkoZSksITEpLCgwLFdzLl9fcmVhZCkoQXJyYXkuaXNBcnJheSh0KT9lYyh0KTpbdF0pLCExKX0pLFtdKX1mdW5jdGlvbiB0YyhlKXt2YXIgdD1lLmdldEFzRmlsZSgpO2lmKCF0KXJldHVybiBQcm9taXNlLnJlamVjdChcIlwiLmNvbmNhdChlLFwiIGlzIG5vdCBhIEZpbGVcIikpO3ZhciBuPVpzKHQpO3JldHVybiBQcm9taXNlLnJlc29sdmUobil9ZnVuY3Rpb24gbmMoZSl7cmV0dXJuKDAsV3MuX19hd2FpdGVyKSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7cmV0dXJuKDAsV3MuX19nZW5lcmF0b3IpKHRoaXMsKGZ1bmN0aW9uKHQpe3JldHVyblsyLGUuaXNEaXJlY3Rvcnk/cmMoZSk6aWMoZSldfSkpfSkpfWZ1bmN0aW9uIHJjKGUpe3ZhciB0PWUuY3JlYXRlUmVhZGVyKCk7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihlLG4pe3ZhciByPVtdOyFmdW5jdGlvbiBpKCl7dmFyIG89dGhpczt0LnJlYWRFbnRyaWVzKChmdW5jdGlvbih0KXtyZXR1cm4oMCxXcy5fX2F3YWl0ZXIpKG8sdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXt2YXIgbyxhLHM7cmV0dXJuKDAsV3MuX19nZW5lcmF0b3IpKHRoaXMsKGZ1bmN0aW9uKGMpe3N3aXRjaChjLmxhYmVsKXtjYXNlIDA6aWYodC5sZW5ndGgpcmV0dXJuWzMsNV07Yy5sYWJlbD0xO2Nhc2UgMTpyZXR1cm4gYy50cnlzLnB1c2goWzEsMywsNF0pLFs0LFByb21pc2UuYWxsKHIpXTtjYXNlIDI6cmV0dXJuIG89Yy5zZW50KCksZShvKSxbMyw0XTtjYXNlIDM6cmV0dXJuIGE9Yy5zZW50KCksbihhKSxbMyw0XTtjYXNlIDQ6cmV0dXJuWzMsNl07Y2FzZSA1OnM9UHJvbWlzZS5hbGwodC5tYXAobmMpKSxyLnB1c2gocyksaSgpLGMubGFiZWw9NjtjYXNlIDY6cmV0dXJuWzJdfX0pKX0pKX0pLChmdW5jdGlvbihlKXtuKGUpfSkpfSgpfSkpfWZ1bmN0aW9uIGljKGUpe3JldHVybigwLFdzLl9fYXdhaXRlcikodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3JldHVybigwLFdzLl9fZ2VuZXJhdG9yKSh0aGlzLChmdW5jdGlvbih0KXtyZXR1cm5bMixuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCxuKXtlLmZpbGUoKGZ1bmN0aW9uKG4pe3ZhciByPVpzKG4sZS5mdWxsUGF0aCk7dChyKX0pLChmdW5jdGlvbihlKXtuKGUpfSkpfSkpXX0pKX0pKX12YXIgb2M9big1ODM2Myk7ZnVuY3Rpb24gYWMoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGZjKGUpfShlKXx8ZnVuY3Rpb24oZSl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lW1wiQEBpdGVyYXRvclwiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oZSl8fGRjKGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIHNjKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBjYyhlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9zYyhPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe2xjKGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpzYyhPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiBsYyhlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gdWMoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIG49bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9bil7dmFyIHIsaSxvPVtdLGE9ITAscz0hMTt0cnl7Zm9yKG49bi5jYWxsKGUpOyEoYT0ocj1uLm5leHQoKSkuZG9uZSkmJihvLnB1c2goci52YWx1ZSksIXR8fG8ubGVuZ3RoIT09dCk7YT0hMCk7fWNhdGNoKGUpe3M9ITAsaT1lfWZpbmFsbHl7dHJ5e2F8fG51bGw9PW4ucmV0dXJufHxuLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX1yZXR1cm4gb319KGUsdCl8fGRjKGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX1mdW5jdGlvbiBkYyhlLHQpe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBmYyhlLHQpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm5cIk9iamVjdFwiPT09biYmZS5jb25zdHJ1Y3RvciYmKG49ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09bnx8XCJTZXRcIj09PW4/QXJyYXkuZnJvbShlKTpcIkFyZ3VtZW50c1wiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qobik/ZmMoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIGZjKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBuPTAscj1uZXcgQXJyYXkodCk7bjx0O24rKylyW25dPWVbbl07cmV0dXJuIHJ9dmFyIHBjPVwiZmlsZS1pbnZhbGlkLXR5cGVcIixtYz1cImZpbGUtdG9vLWxhcmdlXCIsaGM9XCJmaWxlLXRvby1zbWFsbFwiLHZjPVwidG9vLW1hbnktZmlsZXNcIixnYz17RmlsZUludmFsaWRUeXBlOnBjLEZpbGVUb29MYXJnZTptYyxGaWxlVG9vU21hbGw6aGMsVG9vTWFueUZpbGVzOnZjfSx5Yz1mdW5jdGlvbihlKXtlPUFycmF5LmlzQXJyYXkoZSkmJjE9PT1lLmxlbmd0aD9lWzBdOmU7dmFyIHQ9QXJyYXkuaXNBcnJheShlKT9cIm9uZSBvZiBcIi5jb25jYXQoZS5qb2luKFwiLCBcIikpOmU7cmV0dXJue2NvZGU6cGMsbWVzc2FnZTpcIkZpbGUgdHlwZSBtdXN0IGJlIFwiLmNvbmNhdCh0KX19LEVjPWZ1bmN0aW9uKGUpe3JldHVybntjb2RlOm1jLG1lc3NhZ2U6XCJGaWxlIGlzIGxhcmdlciB0aGFuIFwiLmNvbmNhdChlLFwiIFwiKS5jb25jYXQoMT09PWU/XCJieXRlXCI6XCJieXRlc1wiKX19LF9jPWZ1bmN0aW9uKGUpe3JldHVybntjb2RlOmhjLG1lc3NhZ2U6XCJGaWxlIGlzIHNtYWxsZXIgdGhhbiBcIi5jb25jYXQoZSxcIiBcIikuY29uY2F0KDE9PT1lP1wiYnl0ZVwiOlwiYnl0ZXNcIil9fSxJYz17Y29kZTp2YyxtZXNzYWdlOlwiVG9vIG1hbnkgZmlsZXNcIn07ZnVuY3Rpb24gU2MoZSx0KXt2YXIgbj1cImFwcGxpY2F0aW9uL3gtbW96LWZpbGVcIj09PWUudHlwZXx8KDAsb2MuWikoZSx0KTtyZXR1cm5bbixuP251bGw6eWModCldfWZ1bmN0aW9uIGJjKGUsdCxuKXtpZihUYyhlLnNpemUpKWlmKFRjKHQpJiZUYyhuKSl7aWYoZS5zaXplPm4pcmV0dXJuWyExLEVjKG4pXTtpZihlLnNpemU8dClyZXR1cm5bITEsX2ModCldfWVsc2V7aWYoVGModCkmJmUuc2l6ZTx0KXJldHVyblshMSxfYyh0KV07aWYoVGMobikmJmUuc2l6ZT5uKXJldHVyblshMSxFYyhuKV19cmV0dXJuWyEwLG51bGxdfWZ1bmN0aW9uIFRjKGUpe3JldHVybiBudWxsIT1lfWZ1bmN0aW9uIENjKGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGUuaXNQcm9wYWdhdGlvblN0b3BwZWQ/ZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpOnZvaWQgMCE9PWUuY2FuY2VsQnViYmxlJiZlLmNhbmNlbEJ1YmJsZX1mdW5jdGlvbiBBYyhlKXtyZXR1cm4gZS5kYXRhVHJhbnNmZXI/QXJyYXkucHJvdG90eXBlLnNvbWUuY2FsbChlLmRhdGFUcmFuc2Zlci50eXBlcywoZnVuY3Rpb24oZSl7cmV0dXJuXCJGaWxlc1wiPT09ZXx8XCJhcHBsaWNhdGlvbi94LW1vei1maWxlXCI9PT1lfSkpOiEhZS50YXJnZXQmJiEhZS50YXJnZXQuZmlsZXN9ZnVuY3Rpb24gUmMoZSl7ZS5wcmV2ZW50RGVmYXVsdCgpfWZ1bmN0aW9uIGtjKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KG4+MT9uLTE6MCksaT0xO2k8bjtpKyspcltpLTFdPWFyZ3VtZW50c1tpXTtyZXR1cm4gdC5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4hQ2MoZSkmJnQmJnQuYXBwbHkodm9pZCAwLFtlXS5jb25jYXQocikpLENjKGUpfSkpfX1mdW5jdGlvbiBPYyhlKXtyZXR1cm5cImF1ZGlvLypcIj09PWV8fFwidmlkZW8vKlwiPT09ZXx8XCJpbWFnZS8qXCI9PT1lfHxcInRleHQvKlwiPT09ZXx8L1xcdytcXC9bLSsuXFx3XSsvZy50ZXN0KGUpfWZ1bmN0aW9uIE5jKGUpe3JldHVybi9eLipcXC5bXFx3XSskLy50ZXN0KGUpfXZhciB3Yz1bXCJjaGlsZHJlblwiXSxEYz1bXCJvcGVuXCJdLFBjPVtcInJlZktleVwiLFwicm9sZVwiLFwib25LZXlEb3duXCIsXCJvbkZvY3VzXCIsXCJvbkJsdXJcIixcIm9uQ2xpY2tcIixcIm9uRHJhZ0VudGVyXCIsXCJvbkRyYWdPdmVyXCIsXCJvbkRyYWdMZWF2ZVwiLFwib25Ecm9wXCJdLE1jPVtcInJlZktleVwiLFwib25DaGFuZ2VcIixcIm9uQ2xpY2tcIl07ZnVuY3Rpb24gTGMoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIG49bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9bil7dmFyIHIsaSxvPVtdLGE9ITAscz0hMTt0cnl7Zm9yKG49bi5jYWxsKGUpOyEoYT0ocj1uLm5leHQoKSkuZG9uZSkmJihvLnB1c2goci52YWx1ZSksIXR8fG8ubGVuZ3RoIT09dCk7YT0hMCk7fWNhdGNoKGUpe3M9ITAsaT1lfWZpbmFsbHl7dHJ5e2F8fG51bGw9PW4ucmV0dXJufHxuLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX1yZXR1cm4gb319KGUsdCl8fFVjKGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX1mdW5jdGlvbiBVYyhlLHQpe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiB4YyhlLHQpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm5cIk9iamVjdFwiPT09biYmZS5jb25zdHJ1Y3RvciYmKG49ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09bnx8XCJTZXRcIj09PW4/QXJyYXkuZnJvbShlKTpcIkFyZ3VtZW50c1wiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qobik/eGMoZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIHhjKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBuPTAscj1uZXcgQXJyYXkodCk7bjx0O24rKylyW25dPWVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gRmMoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIEJjKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP0ZjKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7VmMoZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOkZjKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIFZjKGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBHYyhlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixpPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLGk9e30sbz1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8by5sZW5ndGg7cisrKW49b1tyXSx0LmluZGV4T2Yobik+PTB8fChpW25dPWVbbl0pO3JldHVybiBpfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPG8ubGVuZ3RoO3IrKyluPW9bcl0sdC5pbmRleE9mKG4pPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxuKSYmKGlbbl09ZVtuXSl9cmV0dXJuIGl9dmFyIEhjPSgwLGQuZm9yd2FyZFJlZikoKGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5jaGlsZHJlbixyPVpjKEdjKGUsd2MpKSxpPXIub3BlbixvPUdjKHIsRGMpO3JldHVybigwLGQudXNlSW1wZXJhdGl2ZUhhbmRsZSkodCwoZnVuY3Rpb24oKXtyZXR1cm57b3BlbjppfX0pLFtpXSksZC5jcmVhdGVFbGVtZW50KGQuRnJhZ21lbnQsbnVsbCxuKEJjKEJjKHt9LG8pLHt9LHtvcGVuOml9KSkpfSkpO0hjLmRpc3BsYXlOYW1lPVwiRHJvcHpvbmVcIjt2YXIgV2M9e2Rpc2FibGVkOiExLGdldEZpbGVzRnJvbUV2ZW50OmZ1bmN0aW9uKGUpe3JldHVybigwLFdzLl9fYXdhaXRlcikodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3JldHVybigwLFdzLl9fZ2VuZXJhdG9yKSh0aGlzLChmdW5jdGlvbih0KXtyZXR1cm4gS3MoZSkmJktzKGUuZGF0YVRyYW5zZmVyKT9bMixYcyhlLmRhdGFUcmFuc2ZlcixlLnR5cGUpXTpLcyhuPWUpJiZLcyhuLnRhcmdldCk/WzIsWXMoZSldOkFycmF5LmlzQXJyYXkoZSkmJmUuZXZlcnkoKGZ1bmN0aW9uKGUpe3JldHVyblwiZ2V0RmlsZVwiaW4gZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5nZXRGaWxlfSkpP1syLHFzKGUpXTpbMixbXV07dmFyIG59KSl9KSl9LG1heFNpemU6MS8wLG1pblNpemU6MCxtdWx0aXBsZTohMCxtYXhGaWxlczowLHByZXZlbnREcm9wT25Eb2N1bWVudDohMCxub0NsaWNrOiExLG5vS2V5Ym9hcmQ6ITEsbm9EcmFnOiExLG5vRHJhZ0V2ZW50c0J1YmJsaW5nOiExLHZhbGlkYXRvcjpudWxsLHVzZUZzQWNjZXNzQXBpOiEwLGF1dG9Gb2N1czohMX07SGMuZGVmYXVsdFByb3BzPVdjLEhjLnByb3BUeXBlcz17Y2hpbGRyZW46SHMoKS5mdW5jLGFjY2VwdDpIcygpLm9iamVjdE9mKEhzKCkuYXJyYXlPZihIcygpLnN0cmluZykpLG11bHRpcGxlOkhzKCkuYm9vbCxwcmV2ZW50RHJvcE9uRG9jdW1lbnQ6SHMoKS5ib29sLG5vQ2xpY2s6SHMoKS5ib29sLG5vS2V5Ym9hcmQ6SHMoKS5ib29sLG5vRHJhZzpIcygpLmJvb2wsbm9EcmFnRXZlbnRzQnViYmxpbmc6SHMoKS5ib29sLG1pblNpemU6SHMoKS5udW1iZXIsbWF4U2l6ZTpIcygpLm51bWJlcixtYXhGaWxlczpIcygpLm51bWJlcixkaXNhYmxlZDpIcygpLmJvb2wsZ2V0RmlsZXNGcm9tRXZlbnQ6SHMoKS5mdW5jLG9uRmlsZURpYWxvZ0NhbmNlbDpIcygpLmZ1bmMsb25GaWxlRGlhbG9nT3BlbjpIcygpLmZ1bmMsdXNlRnNBY2Nlc3NBcGk6SHMoKS5ib29sLGF1dG9Gb2N1czpIcygpLmJvb2wsb25EcmFnRW50ZXI6SHMoKS5mdW5jLG9uRHJhZ0xlYXZlOkhzKCkuZnVuYyxvbkRyYWdPdmVyOkhzKCkuZnVuYyxvbkRyb3A6SHMoKS5mdW5jLG9uRHJvcEFjY2VwdGVkOkhzKCkuZnVuYyxvbkRyb3BSZWplY3RlZDpIcygpLmZ1bmMsb25FcnJvcjpIcygpLmZ1bmMsdmFsaWRhdG9yOkhzKCkuZnVuY307dmFyIGpjPXtpc0ZvY3VzZWQ6ITEsaXNGaWxlRGlhbG9nQWN0aXZlOiExLGlzRHJhZ0FjdGl2ZTohMSxpc0RyYWdBY2NlcHQ6ITEsaXNEcmFnUmVqZWN0OiExLGFjY2VwdGVkRmlsZXM6W10sZmlsZVJlamVjdGlvbnM6W119O2Z1bmN0aW9uIFpjKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9QmMoQmMoe30sV2MpLGUpLG49dC5hY2NlcHQscj10LmRpc2FibGVkLGk9dC5nZXRGaWxlc0Zyb21FdmVudCxvPXQubWF4U2l6ZSxhPXQubWluU2l6ZSxzPXQubXVsdGlwbGUsYz10Lm1heEZpbGVzLGw9dC5vbkRyYWdFbnRlcix1PXQub25EcmFnTGVhdmUsZj10Lm9uRHJhZ092ZXIscD10Lm9uRHJvcCxtPXQub25Ecm9wQWNjZXB0ZWQsaD10Lm9uRHJvcFJlamVjdGVkLHY9dC5vbkZpbGVEaWFsb2dDYW5jZWwsZz10Lm9uRmlsZURpYWxvZ09wZW4seT10LnVzZUZzQWNjZXNzQXBpLEU9dC5hdXRvRm9jdXMsXz10LnByZXZlbnREcm9wT25Eb2N1bWVudCxJPXQubm9DbGljayxTPXQubm9LZXlib2FyZCxiPXQubm9EcmFnLFQ9dC5ub0RyYWdFdmVudHNCdWJibGluZyxDPXQub25FcnJvcixBPXQudmFsaWRhdG9yLFI9KDAsZC51c2VNZW1vKSgoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoVGMoZSkpcmV0dXJuIE9iamVjdC5lbnRyaWVzKGUpLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXt2YXIgbj11Yyh0LDIpLHI9blswXSxpPW5bMV07cmV0dXJuW10uY29uY2F0KGFjKGUpLFtyXSxhYyhpKSl9KSxbXSkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gT2MoZSl8fE5jKGUpfSkpLmpvaW4oXCIsXCIpfShuKX0pLFtuXSksaz0oMCxkLnVzZU1lbW8pKChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gVGMoZSk/W3tkZXNjcmlwdGlvbjpcIkZpbGVzXCIsYWNjZXB0Ok9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoZnVuY3Rpb24oZSl7dmFyIHQ9dWMoZSwyKSxuPXRbMF0scj10WzFdLGk9ITA7cmV0dXJuIE9jKG4pfHwoY29uc29sZS53YXJuKCdTa2lwcGVkIFwiJy5jb25jYXQobiwnXCIgYmVjYXVzZSBpdCBpcyBub3QgYSB2YWxpZCBNSU1FIHR5cGUuIENoZWNrIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvQmFzaWNzX29mX0hUVFAvTUlNRV90eXBlcy9Db21tb25fdHlwZXMgZm9yIGEgbGlzdCBvZiB2YWxpZCBNSU1FIHR5cGVzLicpKSxpPSExKSxBcnJheS5pc0FycmF5KHIpJiZyLmV2ZXJ5KE5jKXx8KGNvbnNvbGUud2FybignU2tpcHBlZCBcIicuY29uY2F0KG4sJ1wiIGJlY2F1c2UgYW4gaW52YWxpZCBmaWxlIGV4dGVuc2lvbiB3YXMgcHJvdmlkZWQuJykpLGk9ITEpLGl9KSkucmVkdWNlKChmdW5jdGlvbihlLHQpe3ZhciBuPXVjKHQsMikscj1uWzBdLGk9blsxXTtyZXR1cm4gY2MoY2Moe30sZSkse30sbGMoe30scixpKSl9KSx7fSl9XTplfShuKX0pLFtuXSksTz0oMCxkLnVzZU1lbW8pKChmdW5jdGlvbigpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGc/ZzpLY30pLFtnXSksTj0oMCxkLnVzZU1lbW8pKChmdW5jdGlvbigpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHY/djpLY30pLFt2XSksdz0oMCxkLnVzZVJlZikobnVsbCksRD0oMCxkLnVzZVJlZikobnVsbCksUD1MYygoMCxkLnVzZVJlZHVjZXIpKHpjLGpjKSwyKSxNPVBbMF0sTD1QWzFdLFU9TS5pc0ZvY3VzZWQseD1NLmlzRmlsZURpYWxvZ0FjdGl2ZSxGPSgwLGQudXNlUmVmKShcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuaXNTZWN1cmVDb250ZXh0JiZ5JiZcInNob3dPcGVuRmlsZVBpY2tlclwiaW4gd2luZG93KSxCPWZ1bmN0aW9uKCl7IUYuY3VycmVudCYmeCYmc2V0VGltZW91dCgoZnVuY3Rpb24oKXtELmN1cnJlbnQmJihELmN1cnJlbnQuZmlsZXMubGVuZ3RofHwoTCh7dHlwZTpcImNsb3NlRGlhbG9nXCJ9KSxOKCkpKX0pLDMwMCl9OygwLGQudXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLEIsITEpLGZ1bmN0aW9uKCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLEIsITEpfX0pLFtELHgsTixGXSk7dmFyIFY9KDAsZC51c2VSZWYpKFtdKSxHPWZ1bmN0aW9uKGUpe3cuY3VycmVudCYmdy5jdXJyZW50LmNvbnRhaW5zKGUudGFyZ2V0KXx8KGUucHJldmVudERlZmF1bHQoKSxWLmN1cnJlbnQ9W10pfTsoMCxkLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7cmV0dXJuIF8mJihkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiZHJhZ292ZXJcIixSYywhMSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImRyb3BcIixHLCExKSksZnVuY3Rpb24oKXtfJiYoZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImRyYWdvdmVyXCIsUmMpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJkcm9wXCIsRykpfX0pLFt3LF9dKSwoMCxkLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7cmV0dXJuIXImJkUmJncuY3VycmVudCYmdy5jdXJyZW50LmZvY3VzKCksZnVuY3Rpb24oKXt9fSksW3csRSxyXSk7dmFyIEg9KDAsZC51c2VDYWxsYmFjaykoKGZ1bmN0aW9uKGUpe0M/QyhlKTpjb25zb2xlLmVycm9yKGUpfSksW0NdKSxXPSgwLGQudXNlQ2FsbGJhY2spKChmdW5jdGlvbihlKXt2YXIgdDtlLnByZXZlbnREZWZhdWx0KCksZS5wZXJzaXN0KCksbmUoZSksVi5jdXJyZW50PVtdLmNvbmNhdChmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiB4YyhlKX0odD1WLmN1cnJlbnQpfHxmdW5jdGlvbihlKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbXCJAQGl0ZXJhdG9yXCJdKXJldHVybiBBcnJheS5mcm9tKGUpfSh0KXx8VWModCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCksW2UudGFyZ2V0XSksQWMoZSkmJlByb21pc2UucmVzb2x2ZShpKGUpKS50aGVuKChmdW5jdGlvbih0KXtpZighQ2MoZSl8fFQpe3ZhciBuPXQubGVuZ3RoLHI9bj4wJiZmdW5jdGlvbihlKXt2YXIgdD1lLmZpbGVzLG49ZS5hY2NlcHQscj1lLm1pblNpemUsaT1lLm1heFNpemUsbz1lLm11bHRpcGxlLGE9ZS5tYXhGaWxlcyxzPWUudmFsaWRhdG9yO3JldHVybiEoIW8mJnQubGVuZ3RoPjF8fG8mJmE+PTEmJnQubGVuZ3RoPmEpJiZ0LmV2ZXJ5KChmdW5jdGlvbihlKXt2YXIgdD11YyhTYyhlLG4pLDEpWzBdLG89dWMoYmMoZSxyLGkpLDEpWzBdLGE9cz9zKGUpOm51bGw7cmV0dXJuIHQmJm8mJiFhfSkpfSh7ZmlsZXM6dCxhY2NlcHQ6UixtaW5TaXplOmEsbWF4U2l6ZTpvLG11bHRpcGxlOnMsbWF4RmlsZXM6Yyx2YWxpZGF0b3I6QX0pO0woe2lzRHJhZ0FjY2VwdDpyLGlzRHJhZ1JlamVjdDpuPjAmJiFyLGlzRHJhZ0FjdGl2ZTohMCx0eXBlOlwic2V0RHJhZ2dlZEZpbGVzXCJ9KSxsJiZsKGUpfX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIEgoZSl9KSl9KSxbaSxsLEgsVCxSLGEsbyxzLGMsQV0pLGo9KDAsZC51c2VDYWxsYmFjaykoKGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSxlLnBlcnNpc3QoKSxuZShlKTt2YXIgdD1BYyhlKTtpZih0JiZlLmRhdGFUcmFuc2Zlcil0cnl7ZS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdD1cImNvcHlcIn1jYXRjaChlKXt9cmV0dXJuIHQmJmYmJmYoZSksITF9KSxbZixUXSksWj0oMCxkLnVzZUNhbGxiYWNrKSgoZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLGUucGVyc2lzdCgpLG5lKGUpO3ZhciB0PVYuY3VycmVudC5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiB3LmN1cnJlbnQmJncuY3VycmVudC5jb250YWlucyhlKX0pKSxuPXQuaW5kZXhPZihlLnRhcmdldCk7LTEhPT1uJiZ0LnNwbGljZShuLDEpLFYuY3VycmVudD10LHQubGVuZ3RoPjB8fChMKHt0eXBlOlwic2V0RHJhZ2dlZEZpbGVzXCIsaXNEcmFnQWN0aXZlOiExLGlzRHJhZ0FjY2VwdDohMSxpc0RyYWdSZWplY3Q6ITF9KSxBYyhlKSYmdSYmdShlKSl9KSxbdyx1LFRdKSx6PSgwLGQudXNlQ2FsbGJhY2spKChmdW5jdGlvbihlLHQpe3ZhciBuPVtdLHI9W107ZS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1MYyhTYyhlLFIpLDIpLGk9dFswXSxzPXRbMV0sYz1MYyhiYyhlLGEsbyksMiksbD1jWzBdLHU9Y1sxXSxkPUE/QShlKTpudWxsO2lmKGkmJmwmJiFkKW4ucHVzaChlKTtlbHNle3ZhciBmPVtzLHVdO2QmJihmPWYuY29uY2F0KGQpKSxyLnB1c2goe2ZpbGU6ZSxlcnJvcnM6Zi5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlfSkpfSl9fSkpLCghcyYmbi5sZW5ndGg+MXx8cyYmYz49MSYmbi5sZW5ndGg+YykmJihuLmZvckVhY2goKGZ1bmN0aW9uKGUpe3IucHVzaCh7ZmlsZTplLGVycm9yczpbSWNdfSl9KSksbi5zcGxpY2UoMCkpLEwoe2FjY2VwdGVkRmlsZXM6bixmaWxlUmVqZWN0aW9uczpyLHR5cGU6XCJzZXRGaWxlc1wifSkscCYmcChuLHIsdCksci5sZW5ndGg+MCYmaCYmaChyLHQpLG4ubGVuZ3RoPjAmJm0mJm0obix0KX0pLFtMLHMsUixhLG8sYyxwLG0saCxBXSksSz0oMCxkLnVzZUNhbGxiYWNrKSgoZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLGUucGVyc2lzdCgpLG5lKGUpLFYuY3VycmVudD1bXSxBYyhlKSYmUHJvbWlzZS5yZXNvbHZlKGkoZSkpLnRoZW4oKGZ1bmN0aW9uKHQpe0NjKGUpJiYhVHx8eih0LGUpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4gSChlKX0pKSxMKHt0eXBlOlwicmVzZXRcIn0pfSksW2kseixILFRdKSxZPSgwLGQudXNlQ2FsbGJhY2spKChmdW5jdGlvbigpe2lmKEYuY3VycmVudCl7TCh7dHlwZTpcIm9wZW5EaWFsb2dcIn0pLE8oKTt2YXIgZT17bXVsdGlwbGU6cyx0eXBlczprfTt3aW5kb3cuc2hvd09wZW5GaWxlUGlja2VyKGUpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBpKGUpfSkpLnRoZW4oKGZ1bmN0aW9uKGUpe3ooZSxudWxsKSxMKHt0eXBlOlwiY2xvc2VEaWFsb2dcIn0pfSkpLmNhdGNoKChmdW5jdGlvbihlKXt2YXIgdDsodD1lKWluc3RhbmNlb2YgRE9NRXhjZXB0aW9uJiYoXCJBYm9ydEVycm9yXCI9PT10Lm5hbWV8fHQuY29kZT09PXQuQUJPUlRfRVJSKT8oTihlKSxMKHt0eXBlOlwiY2xvc2VEaWFsb2dcIn0pKTpmdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbiYmKFwiU2VjdXJpdHlFcnJvclwiPT09ZS5uYW1lfHxlLmNvZGU9PT1lLlNFQ1VSSVRZX0VSUil9KGUpPyhGLmN1cnJlbnQ9ITEsRC5jdXJyZW50PyhELmN1cnJlbnQudmFsdWU9bnVsbCxELmN1cnJlbnQuY2xpY2soKSk6SChuZXcgRXJyb3IoXCJDYW5ub3Qgb3BlbiB0aGUgZmlsZSBwaWNrZXIgYmVjYXVzZSB0aGUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZpbGVfU3lzdGVtX0FjY2Vzc19BUEkgaXMgbm90IHN1cHBvcnRlZCBhbmQgbm8gPGlucHV0PiB3YXMgcHJvdmlkZWQuXCIpKSk6SChlKX0pKX1lbHNlIEQuY3VycmVudCYmKEwoe3R5cGU6XCJvcGVuRGlhbG9nXCJ9KSxPKCksRC5jdXJyZW50LnZhbHVlPW51bGwsRC5jdXJyZW50LmNsaWNrKCkpfSksW0wsTyxOLHkseixILGssc10pLHE9KDAsZC51c2VDYWxsYmFjaykoKGZ1bmN0aW9uKGUpe3cuY3VycmVudCYmdy5jdXJyZW50LmlzRXF1YWxOb2RlKGUudGFyZ2V0KSYmKFwiIFwiIT09ZS5rZXkmJlwiRW50ZXJcIiE9PWUua2V5JiYzMiE9PWUua2V5Q29kZSYmMTMhPT1lLmtleUNvZGV8fChlLnByZXZlbnREZWZhdWx0KCksWSgpKSl9KSxbdyxZXSksWD0oMCxkLnVzZUNhbGxiYWNrKSgoZnVuY3Rpb24oKXtMKHt0eXBlOlwiZm9jdXNcIn0pfSksW10pLFE9KDAsZC51c2VDYWxsYmFjaykoKGZ1bmN0aW9uKCl7TCh7dHlwZTpcImJsdXJcIn0pfSksW10pLEo9KDAsZC51c2VDYWxsYmFjaykoKGZ1bmN0aW9uKCl7SXx8KGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOndpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4tMSE9PWUuaW5kZXhPZihcIk1TSUVcIil8fC0xIT09ZS5pbmRleE9mKFwiVHJpZGVudC9cIil9KGUpfHxmdW5jdGlvbihlKXtyZXR1cm4tMSE9PWUuaW5kZXhPZihcIkVkZ2UvXCIpfShlKX0oKT9zZXRUaW1lb3V0KFksMCk6WSgpKX0pLFtJLFldKSwkPWZ1bmN0aW9uKGUpe3JldHVybiByP251bGw6ZX0sZWU9ZnVuY3Rpb24oZSl7cmV0dXJuIFM/bnVsbDokKGUpfSx0ZT1mdW5jdGlvbihlKXtyZXR1cm4gYj9udWxsOiQoZSl9LG5lPWZ1bmN0aW9uKGUpe1QmJmUuc3RvcFByb3BhZ2F0aW9uKCl9LHJlPSgwLGQudXNlTWVtbykoKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9ZS5yZWZLZXksbj12b2lkIDA9PT10P1wicmVmXCI6dCxpPWUucm9sZSxvPWUub25LZXlEb3duLGE9ZS5vbkZvY3VzLHM9ZS5vbkJsdXIsYz1lLm9uQ2xpY2ssbD1lLm9uRHJhZ0VudGVyLHU9ZS5vbkRyYWdPdmVyLGQ9ZS5vbkRyYWdMZWF2ZSxmPWUub25Ecm9wLHA9R2MoZSxQYyk7cmV0dXJuIEJjKEJjKFZjKHtvbktleURvd246ZWUoa2MobyxxKSksb25Gb2N1czplZShrYyhhLFgpKSxvbkJsdXI6ZWUoa2MocyxRKSksb25DbGljazokKGtjKGMsSikpLG9uRHJhZ0VudGVyOnRlKGtjKGwsVykpLG9uRHJhZ092ZXI6dGUoa2ModSxqKSksb25EcmFnTGVhdmU6dGUoa2MoZCxaKSksb25Ecm9wOnRlKGtjKGYsSykpLHJvbGU6XCJzdHJpbmdcIj09dHlwZW9mIGkmJlwiXCIhPT1pP2k6XCJwcmVzZW50YXRpb25cIn0sbix3KSxyfHxTP3t9Ont0YWJJbmRleDowfSkscCl9fSksW3cscSxYLFEsSixXLGosWixLLFMsYixyXSksaWU9KDAsZC51c2VDYWxsYmFjaykoKGZ1bmN0aW9uKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCl9KSxbXSksb2U9KDAsZC51c2VNZW1vKSgoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sdD1lLnJlZktleSxuPXZvaWQgMD09PXQ/XCJyZWZcIjp0LHI9ZS5vbkNoYW5nZSxpPWUub25DbGljayxvPUdjKGUsTWMpO3JldHVybiBCYyhCYyh7fSxWYyh7YWNjZXB0OlIsbXVsdGlwbGU6cyx0eXBlOlwiZmlsZVwiLHN0eWxlOntkaXNwbGF5Olwibm9uZVwifSxvbkNoYW5nZTokKGtjKHIsSykpLG9uQ2xpY2s6JChrYyhpLGllKSksdGFiSW5kZXg6LTF9LG4sRCkpLG8pfX0pLFtELG4scyxLLHJdKTtyZXR1cm4gQmMoQmMoe30sTSkse30se2lzRm9jdXNlZDpVJiYhcixnZXRSb290UHJvcHM6cmUsZ2V0SW5wdXRQcm9wczpvZSxyb290UmVmOncsaW5wdXRSZWY6RCxvcGVuOiQoWSl9KX1mdW5jdGlvbiB6YyhlLHQpe3N3aXRjaCh0LnR5cGUpe2Nhc2VcImZvY3VzXCI6cmV0dXJuIEJjKEJjKHt9LGUpLHt9LHtpc0ZvY3VzZWQ6ITB9KTtjYXNlXCJibHVyXCI6cmV0dXJuIEJjKEJjKHt9LGUpLHt9LHtpc0ZvY3VzZWQ6ITF9KTtjYXNlXCJvcGVuRGlhbG9nXCI6cmV0dXJuIEJjKEJjKHt9LGpjKSx7fSx7aXNGaWxlRGlhbG9nQWN0aXZlOiEwfSk7Y2FzZVwiY2xvc2VEaWFsb2dcIjpyZXR1cm4gQmMoQmMoe30sZSkse30se2lzRmlsZURpYWxvZ0FjdGl2ZTohMX0pO2Nhc2VcInNldERyYWdnZWRGaWxlc1wiOnJldHVybiBCYyhCYyh7fSxlKSx7fSx7aXNEcmFnQWN0aXZlOnQuaXNEcmFnQWN0aXZlLGlzRHJhZ0FjY2VwdDp0LmlzRHJhZ0FjY2VwdCxpc0RyYWdSZWplY3Q6dC5pc0RyYWdSZWplY3R9KTtjYXNlXCJzZXRGaWxlc1wiOnJldHVybiBCYyhCYyh7fSxlKSx7fSx7YWNjZXB0ZWRGaWxlczp0LmFjY2VwdGVkRmlsZXMsZmlsZVJlamVjdGlvbnM6dC5maWxlUmVqZWN0aW9uc30pO2Nhc2VcInJlc2V0XCI6cmV0dXJuIEJjKHt9LGpjKTtkZWZhdWx0OnJldHVybiBlfX1mdW5jdGlvbiBLYygpe312YXIgWWM9bigzNTAwNykscWM9big3MTYzKTtmdW5jdGlvbiBYYygpe2NvbnN0IGU9KDAsay5vKShJLnlLKTtpZighZSl0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGNvbXBvbmVudCBpcyBtZWFudCB0byBiZSB1c2VkIG9ubHkgd2hlbiBhIGxvZ2dlZCBpbiB1c2VyIGlzIHByZXNlbnRcIik7cmV0dXJuIGV9dmFyIFFjPW4oNDQxMzApLEpjPW4oNzM0NDUpO2NvbnN0ICRjPSgwLEpjLlVlKSgoZT0+KHtzZWFyY2hUZXh0OlwiXCIsc2V0U2VhcmNoVGV4dDp0PT57ZSh7c2VhcmNoVGV4dDp0fSl9fSkpKTt2YXIgZWw9big1MDMzOSksdGw9big1NzQzMiksbmw9bigxODQ0Nikscmw9bi5uKG5sKSxpbD1uKDk4ODIxKTtjb25zdCBvbD1cIm51bWJlcl9vbmVfYmZfZm9yX29uZV95ZWFyXCIsYWw9XCJudW1iZXJfb25lX2JmX2Zvcl9zaXhfbW9udGhzXCIsc2w9XCJudW1iZXJfb25lX2JmX2Zvcl90d29fbW9udGhzXCIsY2w9XCJudW1iZXJfb25lX2JmX2Zvcl90d29fd2Vla3NcIixsbD1cIm51bWJlcl9vbmVfYmZcIix1bD1cIm9uZV9vZl95b3VyX2JmXCIsZGw9XCJ5b3VyX251bWJlcl9vbmVfYmZfaXNfdGhlaXJfbnVtYmVyX29uZV9iZlwiLGZsPVwieW91X3NoYXJlX0JGXCIscGw9bmV3IE1hcChbW29sLDhdLFthbCw3XSxbc2wsNl0sW2NsLDVdLFtsbCw0XSxbdWwsM10sW2RsLDJdLFtmbCwxXV0pLG1sPW5ldyBNYXAoW1tvbCxcIlx1ZDgzZFx1ZGM5ZFwiXSxbYWwsXCJcdWQ4M2RcdWRjOWVcIl0sW3NsLFwiXHVkODNkXHVkYzk1XCJdLFtjbCxcIlx1Mjc2NFx1ZmUwZlwiXSxbbGwsXCJcdWQ4M2RcdWRjOWJcIl0sW3VsLFwiXHVkODNkXHVkZTBhXCJdLFtkbCxcIlx1ZDgzZFx1ZGUyY1wiXSxbZmwsXCJcdWQ4M2RcdWRlMGVcIl1dKTtmdW5jdGlvbiBobChlLHQpe2lmKCFlKXJldHVybjtpZighZS5mcmllbmRtb2ppcylyZXR1cm47bGV0IG47Zm9yKGNvbnN0IHQgb2YgZS5mcmllbmRtb2ppcyl0LmNhdGVnb3J5X25hbWUmJnBsLmhhcyh0LmNhdGVnb3J5X25hbWUpJiYobj8uY2F0ZWdvcnlfbmFtZT8ocGwuZ2V0KHQuY2F0ZWdvcnlfbmFtZSk/PzApPihwbC5nZXQobi5jYXRlZ29yeV9uYW1lKT8/MCkmJihuPXQpOm49dCk7cmV0dXJuIG4/LmNhdGVnb3J5X25hbWUmJm1sLmhhcyhuLmNhdGVnb3J5X25hbWUpP2Z1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2Ugb2w6cmV0dXJue2Vtb2ppOlwiXHVkODNkXHVkYzlkXCIsdGl0bGU6dm9pZCAwfTtjYXNlIGFsOnJldHVybntlbW9qaTpcIlx1ZDgzZFx1ZGM5ZVwiLHRpdGxlOnZvaWQgMH07Y2FzZSBzbDpyZXR1cm57ZW1vamk6XCJcdWQ4M2RcdWRjOTVcIix0aXRsZTp2b2lkIDB9O2Nhc2UgY2w6cmV0dXJue2Vtb2ppOlwiXHUyNzY0XHVmZTBmXCIsdGl0bGU6dm9pZCAwfTtjYXNlIGxsOnJldHVybntlbW9qaTpcIlx1ZDgzZFx1ZGM5YlwiLHRpdGxlOnZvaWQgMH07Y2FzZSB1bDpyZXR1cm57ZW1vamk6XCJcdWQ4M2RcdWRlMGFcIix0aXRsZTp2b2lkIDB9O2Nhc2UgZGw6cmV0dXJue2Vtb2ppOlwiXHVkODNkXHVkZTJjXCIsdGl0bGU6dm9pZCAwfTtjYXNlIGZsOnJldHVybntlbW9qaTpcIlx1ZDgzZFx1ZGUwZVwiLHRpdGxlOnZvaWQgMH07ZGVmYXVsdDpyZXR1cm59fShuLmNhdGVnb3J5X25hbWUpOnZvaWQgMH12YXIgdmw9bigyMzQ5MyksZ2w9bi5uKHZsKTtjb25zdCB5bD17bGVhZGluZzohMSx0cmFpbGluZzohMH07ZnVuY3Rpb24gRWwoZSx0KXtjb25zdHttc1RvV2FpdDpuPTUwMH09dD8/e307KDAsZC51c2VFZmZlY3QpKCgoKT0+e2NvbnN0IHQ9Z2woKShlLG4seWwpLHI9KCk9Pnt0LmNhbmNlbCgpfSxpPSgpPT57XCJoaWRkZW5cIj09PWRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT90KCk6cigpfSxvPSgpPT57ZG9jdW1lbnQuaGFzRm9jdXMoKXx8dCgpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInZpc2liaWxpdHljaGFuZ2VcIixpKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIixvKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsciksKCk9Pntkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLGkpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmx1clwiLG8pLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiZm9jdXNcIixyKX19KSxbZSxuXSl9Y29uc3QgX2w9e2xlYWRpbmc6ITAsdHJhaWxpbmc6ITF9O2Z1bmN0aW9uIElsKGUsdCl7Y29uc3R7cmF0ZUxpbWl0TXM6bj02ZTQsbWluQmFja2dyb3VuZE1zOnI9M2U0fT10Pz97fSxpPSgwLGQudXNlUmVmKSgwKTsoMCxkLnVzZUVmZmVjdCkoKCgpPT57Y29uc3QgdD1nbCgpKGUsbixfbCksbz0oKT0+e3ImJkRhdGUubm93KCktaS5jdXJyZW50PnImJnQoKX0sYT0oKT0+e2RvY3VtZW50Lmhhc0ZvY3VzKCl8fChpLmN1cnJlbnQ9RGF0ZS5ub3coKSl9LHM9KCk9PntcInZpc2libGVcIj09PWRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT9vKCk6YSgpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInZpc2liaWxpdHljaGFuZ2VcIixzKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsbyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsYSksKCk9Pntkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLHMpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiZm9jdXNcIixvKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJsdXJcIixhKX19KSxbZSxuLHJdKX12YXIgU2w9big2MzkyMSksYmw9bigyMDI5Myk7Y29uc3QgVGw9NWUzLENsPWU9Pntjb25zdCB0PSgwLGlsLmopKFNsLm5wLGUpLG49KDAsay5vKShTbC5vTyk7cmV0dXJuKDAsZC51c2VFZmZlY3QpKCgoKT0+eyF0JiZlJiZuKFtlXSl9KSxbZSx0LG5dKSx0fSxBbD1lPT4oZT0+e2NvbnN0IHQ9KDAsay5vKSgoMCxTbC5jbikoZSkpLG49KDAsay5vKShTbC5vTykscj1lLmZpbHRlcigoKGUsbik9PiF0W25dKSk7cmV0dXJuKDAsZC51c2VFZmZlY3QpKCgoKT0+e3IubGVuZ3RoJiZuKHIpfSksZnVuY3Rpb24oZSl7Y29uc3RbdCxuXT0oMCxkLnVzZVN0YXRlKSgwKSxyPSgwLGQudXNlUmVmKSh2b2lkIDApO3JldHVybiB2b2lkIDAhPT1yLmN1cnJlbnQmJnJsKCkoci5jdXJyZW50LGUpfHwobih0KzEpLHIuY3VycmVudD1lKSxbdF19KFtuLHJdKSksdH0pKGUpLm1hcChibC5iMyksUmw9ZnVuY3Rpb24oZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdCBuPUNsKGUpO3JldHVybiB0PygwLGJsLkJSKShuKTooMCxibC5iMykobil9LGtsPWU9Pntjb25zdCB0PUNsKGUpO3JldHVybigwLG1lLlopKCksaGwodCl9LE9sPWU9PmUudXNlci5zeW5jRnJpZW5kcyxObD1lPT5lLnVzZXIuc3luY0ZyaWVuZFJlcXVlc3RzLHdsPSgpPT57Y29uc3QgZT0oMCxrLm8pKE9sKTsoMCxkLnVzZUVmZmVjdCkoKCgpPT57ZSgpfSksW2VdKSxJbChlKX0sRGw9KCk9Pntjb25zdCBlPSgwLE8ucnApKEEuZTEpJiYhMSx0PSgwLGsubykoTmwpLG49KDAsZC51c2VSZWYpKCkscj0oMCxkLnVzZUNhbGxiYWNrKSgoKCk9PntlJiZ2b2lkIDA9PT1uLmN1cnJlbnQmJih0KCksbi5jdXJyZW50PXdpbmRvdy5zZXRJbnRlcnZhbCh0LDFlNCkpfSksW2UsdF0pLGk9KDAsZC51c2VDYWxsYmFjaykoKCgpPT57d2luZG93LmNsZWFySW50ZXJ2YWwobi5jdXJyZW50KSxuLmN1cnJlbnQ9dm9pZCAwfSksW10pOygwLGQudXNlRWZmZWN0KShyLFtyXSksKDAsZC51c2VFZmZlY3QpKCgoKT0+e2V8fGkoKX0pLFtlLGldKSxJbChyLHtyYXRlTGltaXRNczpUbCxtaW5CYWNrZ3JvdW5kTXM6VGx9KSxFbChpLHttc1RvV2FpdDpUbH0pfSxQbD0oZSx0KT0+e2NvbnN0IG49KDAsay5vKSgoMCxTbC5ucCkodCkpO3JldHVybiEoIW58fGUhPT1QZS5pMS5PTkVPTk9ORSkmJigwLGJsLmI3KShuKX0sTWw9KGUsdCk9Pntjb25zdCBuPSgwLGsubykoKDAsU2wubnApKHQpKTtyZXR1cm4hIW4mJmU9PT1QZS5pMS5PTkVPTk9ORSYmKDAsYmwuSTQpKG4pfSxMbD0oKT0+e2NvbnN0IGU9KDAsay5vKShTbC5naSk7cmV0dXJuKDAsay5vKSgoMCxTbC5jbikoZSkpLmZpbHRlcigoZT0+Qm9vbGVhbihlKSkpfSxVbD0oMCxkLmNyZWF0ZUNvbnRleHQpKHtzZXRSZXBseTooKT0+bnVsbCxjbGVhclJlcGx5OigpPT5udWxsLGF3YXk6ITEsc2NyZWVuc2hvdERldGVjdGVkOiExLGZvY3VzTWVzc2FnZUNvbXBvc2VyOigpPT5udWxsfSk7dmFyIHhsPW4oNzI0MjMpLEZsPW4oMTQ5OTgpO2NvbnN0IEJsPWU9Pih7ZW50ZXJDb252ZXJzYXRpb246ZS5tZXNzYWdpbmcuZW50ZXJDb252ZXJzYXRpb24sZXhpdENvbnZlcnNhdGlvbjplLm1lc3NhZ2luZy5leGl0Q29udmVyc2F0aW9uLHBhZ2luYXRlTWVzc2FnZXM6ZS5tZXNzYWdpbmcucGFnaW5hdGVNZXNzYWdlcyxkaXNwbGF5ZWRNZXNzYWdlczplLm1lc3NhZ2luZy5kaXNwbGF5ZWRNZXNzYWdlc30pO2Z1bmN0aW9uIFZsKGUpe3JldHVybigwLGsubykoKDAsZC51c2VDYWxsYmFjaykoKHQ9PntpZihlKXJldHVybigwLFRlLmw1KShlKSh0KX0pLFtlXSkpfWZ1bmN0aW9uIEdsKGUpe3JldHVybigwLGlsLmopKFRlLmZ2LGUpfWZ1bmN0aW9uIEhsKGUpe2NvbnN0IHQ9WGMoKSxuPUNsKGUpLHI9KDAsay5vKSgoMCxTbC5jVikoZSkpLGk9KDAsay5vKShUZS5zYyksbz0oMCxrLm8pKFRlLkQ2KSxhPSgwLGcuczApKCk7cmV0dXJuKDAsZC51c2VNZW1vKSgoKCk9PntpZih0IT09ZSlyZXR1cm4gYXN5bmMoKT0+e2lmKHImJmUmJm4/LnVzZXJfaWQpe2NvbnN0IHI9YXdhaXQgbyhbdCxlXSkscz1yLmdldChuLnVzZXJfaWQpPy5jb252ZXJzYXRpb25JZDtzJiYoaShcIkNIQVRcIiksYSgoMCx4bC5QWikocykpKX1lbHNlIGlmKG4/Lm11dGFibGVfdXNlcm5hbWUpe2NvbnN0IGU9MzUwLHQ9NjAwLHI9d2luZG93LnNjcmVlbi53aWR0aC8yLWUvMixpPXdpbmRvdy5zY3JlZW4uaGVpZ2h0LzItdC8yO3dpbmRvdy5vcGVuKGBodHRwczovL3d3dy5zbmFwY2hhdC5jb20vYWRkLyR7bi5tdXRhYmxlX3VzZXJuYW1lfT9yZWZlcnJlcj13ZWJfY2hhdGAsXCJzbmFwY2hhdC1hZGQtdXNlclwiLGB3aWR0aD0ke2V9LGhlaWdodD0ke3R9LGxlZnQ9JHtyfSx0b3A9JHtpfWApfX19KSxbdCxvLHIsYSxuPy5tdXRhYmxlX3VzZXJuYW1lLG4/LnVzZXJfaWQsZSxpXSl9QygpLmdldExvZ2dlcihcIltGaWxlRHJvcF1cIiksQygpLmdldExvZ2dlcihcIlt1c2VJc0NvbnZlcnNhdGlvbklkVmFsaWRdXCIpO3ZhciBXbD17cGVuZGluZzowLHZhbGlkOjEsaW52YWxpZDoyfTtjb25zdCBqbD0oKT0+e2NvbnN0IGU9KDAsay5vKShUZS5nMik7KDAsZC51c2VFZmZlY3QpKCgoKT0+e2UoKX0pLFtlXSl9O2Z1bmN0aW9uIFpsKGUpe2NvbnN0IHQ9KDAsbWUuWikoKSxuPVZsKGUpLHI9WGMoKSxpPSgwLHRsLmpaKShuKS5maWx0ZXIoKGU9PmUhPT1yKSksbz10LmZvcm1hdExpc3QoQWwoaSkse3R5cGU6XCJjb25qdW5jdGlvblwiLHN0eWxlOlwibmFycm93XCJ9KTtpZihuKXJldHVybigwLHRsLlNMKShuKXx8b31mdW5jdGlvbiB6bCgpe3JldHVybigwLGQudXNlQ29udGV4dCkoVWwpfWNvbnN0IEtsPWU9PltlLnNlYXJjaFRleHQsZS5zZXRTZWFyY2hUZXh0XTtmdW5jdGlvbiBZbCgpe3JldHVybiAkYyhLbCl9ZnVuY3Rpb24gcWwoZSx0KXtyZXR1cm4oMCxpbC5qKShUZS5LOSxlLHQpfWZ1bmN0aW9uIFhsKCl7cmV0dXJuKDAsay5vKShUZS5yVSl9ZnVuY3Rpb24gUWwoZSl7cmV0dXJuKDAsay5vKSgodD0+KDAsVGUuelkpKGUpKHQpKSl9ZnVuY3Rpb24gSmwoZSl7Y29uc3QgdD1WbChlKSxuPSgwLGsubykoSS5oTyk7cmV0dXJuKDAsdGwuZFcpKHQpJiYhbn1mdW5jdGlvbiAkbCgpe2NvbnN0IGU9KDAsay5vKShUZS5MTyk7cmV0dXJuKDAsTy5ycCkoQS51ZCksZX12YXIgZXU9big0MTMxKSx0dT1uKDkzNDkpLG51PW4oNzQ3NzMpLHJ1PW4oMTkxNTgpLGl1PW4oNTE1NzYpLG91PW4oODA2MTQpLGF1PW4oNDA0MzEpO2FzeW5jIGZ1bmN0aW9uIHN1KGUpe2xldCB0O3RyeXtjb25zdCBuPWF3YWl0IG5hdmlnYXRvci5wZXJtaXNzaW9ucy5xdWVyeSh7bmFtZTpcImNhbWVyYVwifSk7XCJvbmNoYW5nZVwiaW4gUGVybWlzc2lvblN0YXR1cy5wcm90b3R5cGUmJmUmJihuLm9uY2hhbmdlPWUpLHQ9bi5zdGF0ZX1jYXRjaChlKXt0cnl7YXdhaXQoMCxvdS5nSikoe3ZpZGVvOiEwfSksdD1cImdyYW50ZWRcIn1jYXRjaChlKXthdS5WLHQ9ZSBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbiYmKFwiTm90QWxsb3dlZEVycm9yXCI9PT1lLm5hbWV8fFwiU2VjdXJpdHlFcnJvclwiPT09ZS5uYW1lKT9cImRlbmllZFwiOlwiZ3JhbnRlZFwifX1yZXR1cm4gdH1mdW5jdGlvbiBjdShlLHQsbil7Y29uc3RbcixpXT0oMCxrLm8pKFIuR3YsRCksbz1sdShlKTsoMCxkLnVzZUVmZmVjdCkoKCgpPT57byYmcihlLHQpfSksW3IsZSx0XSksKDAsZC51c2VFZmZlY3QpKCgoKT0+KCk9PmkoZSx0LG4pKSxbaSxlLHQsbl0pfWZ1bmN0aW9uIGx1KGUpe3JldHVybigwLGlsLmopKFIueTksZSl9ZnVuY3Rpb24gdXUoKXtjb25zdFtlLHRdPSgwLGsubykoUi5CVSk7KDAsZC51c2VFZmZlY3QpKCgoKT0+KGUoKSwoKT0+e3QoKX0pKSxbZSx0XSl9QygpLmdldExvZ2dlcihcIltNZWRpYV1cIik7dmFyIGR1PW4oNjA0OTYpLGZ1PW4oMjg0NDApO2Z1bmN0aW9uIHB1KGUpeygwLGQudXNlRWZmZWN0KSgoKCk9PntmdW5jdGlvbiB0KGUpe2UucHJldmVudERlZmF1bHQoKSxlLnJldHVyblZhbHVlPVwiXCJ9cmV0dXJuIGUmJndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsdCksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLHQpfX0pLFtlXSl9ZnVuY3Rpb24gbXUoKXtyZXR1cm4oMCxrLm8pKHcuT1ApfWZ1bmN0aW9uIGh1KGUpe3JldHVybigwLGlsLmopKHcuWlksZSl9Y29uc3QgdnU9W2V1LlVxLkNBTExJTkcsZXUuVXEuSU5fQ0FMTCxldS5VcS5BTlNXRVJFRF07ZnVuY3Rpb24gZ3UoZSl7cmV0dXJuKDAsaWwuaikody5WNixlKX1mdW5jdGlvbiB5dShlKXtyZXR1cm4oMCxpbC5qKSh3Lm9aLGUpfWZ1bmN0aW9uIEV1KGUpe3JldHVybigwLGlsLmopKHcuRFMsZSl9ZnVuY3Rpb24gX3UoZSl7cmV0dXJuKDAsaWwuaikody5hayxlKX1mdW5jdGlvbiBJdSgpe2NvbnN0W2VdPSgwLGsubykoUi5oOCksdD1sdShkdS5HRi5DYWxsaW5nKSxbbl09KDAsay5vKShSLldEKTtyZXR1cm5bZSx0LG5dfWZ1bmN0aW9uIFN1KGUpe2NvbnN0IHQ9KDAsdGwualopKGUpLG49WGMoKSxyPSgwLGsubykoU2wuc2wpO2lmKDE9PT10Lmxlbmd0aCYmdFswXT09PW4pcmV0dXJuITE7aWYoZS5jb252ZXJzYXRpb25UeXBlPT09UGUuaTEuT05FT05PTkUpe2NvbnN0IGU9dC5maWx0ZXIoKGU9PmUhPT1uKSlbMF07cmV0dXJuIHIuaW5jbHVkZXMoZSl9cmV0dXJuITB9ZnVuY3Rpb24gYnUoZSl7Y29uc3QgdD1YYygpO3JldHVybigwLGlsLmopKHcubzksZSx0KX12YXIgVHU9big0OTk5NSksQ3U9bi5uKFR1KTtmdW5jdGlvbiBBdShlKXtyZXR1cm4oMCxpbC5qKSh0dS52MyxlKX1mdW5jdGlvbiBSdShlKXtyZXR1cm4gZnVuY3Rpb24oZSl7Y29uc3QgdD1bXSxuPWUubWFwKChlPT5bZSwoMCxibC5DRykoZSksKDAsYmwuVFopKGUpXSkpLHI9Q3UoKShuLChlPT5lWzFdKSksaT1DdSgpKG4sKGU9PmVbMl0pKTtmb3IoY29uc3RbZSxvLGFdb2YgbikxPT09cltvXT90LnB1c2gobyk6MT09PWlbYV0/dC5wdXNoKGEpOnQucHVzaChlKTtyZXR1cm4gdH0oQWwoZSkpfXZhciBrdSxPdSxOdT1uKDkxNzE3KTtmdW5jdGlvbiB3dSgpe3JldHVybiB3dT1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LHd1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBEdT1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIix3dSh7dmlld0JveDpcIjAgMCA1MDAgNTAwXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSxrdXx8KGt1PWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIk00MTcuOTMgMzQwLjcxYy02MC42MS0yOS4zNC03MC4yNy03NC42NC03MC43LTc4LS41Mi00LjA3LTEuMTEtNy4yNyAzLjM4LTExLjQxIDQuMzMtNCAyMy41NC0xNS44OSAyOC44Ny0xOS42MSA4LjgxLTYuMTYgMTIuNjktMTIuMzEgOS44My0xOS44Ny0yLTUuMjMtNi44Ny03LjItMTItNy4yYTIyLjMgMjIuMyAwIDAgMC00LjgxLjU0Yy05LjY4IDIuMS0xOS4wOCA2Ljk1LTI0LjUyIDguMjZhOC41NiA4LjU2IDAgMCAxLTIgLjI3Yy0yLjkgMC00LTEuMjktMy43Mi00Ljc4LjY4LTEwLjU4IDIuMTItMzEuMjMuNDUtNTAuNTItMi4yOS0yNi41NC0xMC44NS0zOS42OS0yMS01MS4zMkMzMTYuOCAxMDEuNDMgMjk0IDc3LjIgMjUwIDc3LjJzLTY2Ljc3IDI0LjIzLTcxLjY1IDI5LjhjLTEwLjE4IDExLjYzLTE4LjczIDI0Ljc4LTIxIDUxLjMyLTEuNjcgMTkuMjktLjE3IDM5LjkzLjQ1IDUwLjUyLjIgMy4zMi0uODIgNC43OC0zLjcyIDQuNzhhOC42NCA4LjY0IDAgMCAxLTItLjI3Yy01LjQzLTEuMzEtMTQuODMtNi4xNi0yNC41MS04LjI2YTIyLjMgMjIuMyAwIDAgMC00LjgxLS41NGMtNS4xNSAwLTEwIDItMTIgNy4yLTIuODYgNy41NiAxIDEzLjcxIDkuODQgMTkuODcgNS4zMyAzLjcyIDI0LjU0IDE1LjYgMjguODcgMTkuNjEgNC40OCA0LjE0IDMuOSA3LjM0IDMuMzggMTEuNDEtLjQzIDMuNDEtMTAuMSA0OC43MS03MC43IDc4LTMuNTUgMS43Mi05LjU5IDUuMzYgMS4wNiAxMS4yNCAxNi43MiA5LjI0IDI3Ljg1IDguMjUgMzYuNSAxMy44MiA3LjM0IDQuNzMgMyAxNC45MyA4LjM0IDE4LjYxIDYuNTYgNC41MyAyNS45NS0uMzIgNTEgNy45NSAyMSA2LjkyIDMzLjc2IDI2LjQ3IDcxIDI2LjQ3czUwLjM3LTE5LjY0IDcxLTI2LjQ3YzI1LTguMjcgNDQuNDMtMy40MiA1MS03Ljk1IDUuMzMtMy42OCAxLTEzLjg4IDguMzQtMTguNjEgOC42NS01LjU3IDE5Ljc3LTQuNTggMzYuNS0xMy44MiAxMC42My01LjgxIDQuNTktOS40NSAxLjA0LTExLjE3elwiLGZpbGw6XCIjZmZmXCJ9KSksT3V8fChPdT1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNNDQ0LjMgMzM3LjI2Yy0yLjcyLTcuNC03LjktMTEuMzYtMTMuOC0xNC42NGEzNC41MSAzNC41MSAwIDAgMC0zLTEuNTdjLTEuNzYtLjkxLTMuNTYtMS43OS01LjM1LTIuNzItMTguMzktOS43NS0zMi43NS0yMi4wNS00Mi43MS0zNi42M2E4My4wNiA4My4wNiAwIDAgMS03LjMzLTEzYy0uODUtMi40My0uODEtMy44MS0uMi01LjA3YTguMjUgOC4yNSAwIDAgMSAyLjM1LTIuNDVjMy4xNi0yLjA5IDYuNDItNC4yMSA4LjYzLTUuNjQgMy45NC0yLjU1IDcuMDYtNC41NyA5LjA3LTYgNy41NS01LjI4IDEyLjgzLTEwLjg5IDE2LjEzLTE3LjE2YTM0LjE3IDM0LjE3IDAgMCAwIDEuNjktMjguMzhjLTUtMTMuMTYtMTcuNDMtMjEuMzMtMzIuNDktMjEuMzNhNDQuNzUgNDQuNzUgMCAwIDAtOS40NSAxYy0uODMuMTgtMS42Ni4zNy0yLjQ3LjU4LjE0LTktLjA2LTE4LjUtLjg2LTI3Ljg1LTIuODQtMzIuODctMTQuMzUtNTAuMS0yNi4zNS02My44NEExMDUgMTA1IDAgMCAwIDMxMS4zNyA3MUMyOTMuMTYgNjAuNiAyNzIuNTEgNTUuMzIgMjUwIDU1LjMyUzIwNi45NCA2MC42IDE4OC43MSA3MWExMDQuNjIgMTA0LjYyIDAgMCAwLTI2Ljg0IDIxLjZjLTEyIDEzLjc0LTIzLjUxIDMxLTI2LjM1IDYzLjg0LS44IDkuMzUtMSAxOC45LS44NyAyNy44NS0uODEtLjIxLTEuNjMtLjQtMi40Ni0uNThhNDQuNzUgNDQuNzUgMCAwIDAtOS40NS0xYy0xNS4wNyAwLTI3LjUyIDguMTctMzIuNSAyMS4zM2EzNC4yMSAzNC4yMSAwIDAgMCAxLjY1IDI4LjQxYzMuMzEgNi4yNyA4LjU5IDExLjg4IDE2LjE0IDE3LjE2IDIgMS40IDUuMTMgMy40MiA5LjA3IDYgMi4xMyAxLjM4IDUuMjQgMy40IDguMjkgNS40MmE4LjkgOC45IDAgMCAxIDIuNjYgMi42N2MuNjQgMS4zMS42NiAyLjcyLS4yOSA1LjMyYTgyLjI5IDgyLjI5IDAgMCAxLTcuMjEgMTIuNzNjLTkuNzQgMTQuMjUtMjMuNjggMjYuMzMtNDEuNDggMzYtOS40MyA1LTE5LjIzIDguMzQtMjMuMzcgMTkuNTktMy4xMiA4LjQ5LTEuMDggMTguMTUgNi44NSAyNi4yOWEzOS42MyAzOS42MyAwIDAgMCAxMCA3LjU3IDEwOC4zNSAxMDguMzUgMCAwIDAgMjQuNDcgOS43OSAxNi4xNiAxNi4xNiAwIDAgMSA0Ljk0IDIuMjFjMi44OSAyLjUzIDIuNDggNi4zNCA2LjMzIDExLjkyYTI3LjggMjcuOCAwIDAgMCA3LjI0IDcuMzZjOC4wOCA1LjU4IDE3LjE2IDUuOTMgMjYuNzggNi4zIDguNjkuMzMgMTguNTQuNzEgMjkuNzkgNC40MiA0LjY2IDEuNTQgOS41IDQuNTIgMTUuMTEgOCAxMy40NyA4LjI4IDMxLjkxIDE5LjYxIDYyLjc3IDE5LjYxczQ5LjQzLTExLjM5IDYzLTE5LjdjNS41Ny0zLjQyIDEwLjM4LTYuMzcgMTQuOTEtNy44NyAxMS4yNS0zLjcyIDIxLjEtNC4wOSAyOS43OS00LjQyIDkuNjItLjM3IDE4LjctLjcyIDI2Ljc4LTYuM2EyNy44OSAyNy44OSAwIDAgMCA4LjI0LTljMi43Ny00LjcxIDIuNy04IDUuMy0xMC4zYTE1LjMyIDE1LjMyIDAgMCAxIDQuNjQtMi4xMiAxMDguNzYgMTA4Ljc2IDAgMCAwIDI0LjgtOS44OCAzOSAzOSAwIDAgMCAxMC41LTguMjJsLjEtLjEyYzcuNDQtNy45NiA5LjMxLTE3LjM0IDYuMjYtMjUuNjJ6TTQxNi44NyAzNTJjLTE2LjczIDkuMjQtMjcuODUgOC4yNS0zNi41IDEzLjgyLTcuMzUgNC43My0zIDE0LjkzLTguMzQgMTguNjEtNi41NiA0LjUzLTI1Ljk1LS4zMi01MSA3Ljk1LTIwLjY2IDYuODMtMzMuODQgMjYuNDctNzEgMjYuNDdTMjAwIDM5OS4yNSAxNzkgMzkyLjMzYy0yNS04LjI3LTQ0LjQzLTMuNDItNTEtNy45NS01LjMzLTMuNjgtMS0xMy44OC04LjM0LTE4LjYxLTguNjYtNS41Ny0xOS43OC00LjU4LTM2LjUtMTMuNzctMTAuNjUtNS44OC00LjYxLTkuNTItMS4wNi0xMS4yNCA2MC42LTI5LjM0IDcwLjI3LTc0LjY0IDcwLjctNzggLjUyLTQuMDcgMS4xLTcuMjctMy4zOC0xMS40MS00LjMzLTQtMjMuNTQtMTUuODktMjguODctMTkuNjEtOC44Mi02LjE2LTEyLjctMTIuMzEtOS44NC0xOS44NyAyLTUuMjMgNi44OC03LjIgMTItNy4yYTIyLjMgMjIuMyAwIDAgMSA0LjgxLjU0YzkuNjggMi4xIDE5LjA4IDYuOTUgMjQuNTEgOC4yNmE4LjY0IDguNjQgMCAwIDAgMiAuMjdjMi45IDAgMy45Mi0xLjQ2IDMuNzItNC43OC0uNjItMTAuNTktMi4xMi0zMS4yMy0uNDUtNTAuNTIgMi4yOS0yNi41NCAxMC44NC0zOS42OSAyMS01MS4zMiA0Ljg4LTUuNTkgMjcuODEtMjkuODIgNzEuNjYtMjkuODJzNjYuODQgMjQuMTMgNzEuNzIgMjkuN2MxMC4xNyAxMS42MyAxOC43MyAyNC43OCAyMSA1MS4zMiAxLjY3IDE5LjI5LjIzIDM5Ljk0LS40NSA1MC41Mi0uMjMgMy40OS44MiA0Ljc4IDMuNzIgNC43OGE4LjU2IDguNTYgMCAwIDAgMi0uMjdjNS40NC0xLjMxIDE0Ljg0LTYuMTYgMjQuNTItOC4yNmEyMi4zIDIyLjMgMCAwIDEgNC44MS0uNTRjNS4xNSAwIDEwIDIgMTIgNy4yIDIuODYgNy41Ni0xIDEzLjcxLTkuODMgMTkuODctNS4zMyAzLjcyLTI0LjU0IDE1LjYtMjguODcgMTkuNjEtNC40OSA0LjE0LTMuOSA3LjM0LTMuMzggMTEuNDEuNDMgMy40MSAxMC4wOSA0OC43MSA3MC43IDc4IDMuNTggMS43OSA5LjYyIDUuNDMtMS4wMyAxMS4zNnpcIn0pKSk7dmFyIFB1PW4oODI0OTgpO2Z1bmN0aW9uIE11KGUpe2xldHt1c2VySWQ6dCxpc0NlbnRlcjpuLGNvbnZlcnNhdGlvbklkOnJ9PWU7cmV0dXJuKDAsby5aKShMdSx7dXNlcklkOnQsY29udmVyc2F0aW9uSWQ6cj8/dCxpc0NlbnRlcjpufSl9ZnVuY3Rpb24gTHUoZSl7bGV0e3VzZXJJZDp0LGNvbnZlcnNhdGlvbklkOm4saXNDZW50ZXI6cn09ZTtjb25zdCBpPUdsKG4pLmdldCh0KTtyZXR1cm4oMCxvLlopKFV1LHtmaWxsOmk/P1wiIzg4OFwiLGlzQ2VudGVyOnJ9KX1mdW5jdGlvbiBVdShlKXtsZXR7ZmlsbDp0LGlzQ2VudGVyOm59PWU7Y29uc3Qgcj1uP1wiMCAtNSA5MCA5MFwiOlwiMCAwIDkwIDkwXCI7cmV0dXJuKDAsby5aKShcInN2Z1wiLHt2ZXJzaW9uOlwiMS4xXCIseDpcIjBweFwiLHk6XCIwcHhcIix2aWV3Qm94OnJ9LHZvaWQgMCwoMCxvLlopKFwicGF0aFwiLHtmaWxsOnQsc3Ryb2tlOlwicmdiYSgwLDAsMCwwLjIpXCIsc3Ryb2tlV2lkdGg6MS41LGQ6XCJNNDUsODUuMWMxMC44LDAsMjAuOC0zLjgsMjguNi0xMC4yYy0xLjQtMi4xLTMtMy42LTQuNy01Yy01LjItNC4xLTEyLjYtNS42LTE3LjctNi41bC0wLjItMiBjNy44LTQuNiw5LjctOS41LDEyLjgtMTkuOGwwLjEtMC43YzAsMCwyLjctMS4xLDMuMS02LjFjMC42LTYuOC0yLjItNC44LTIuMi01LjNDNjUuMSwyNiw2NSwyMS40LDY0LDE4Yy0yLjEtNy4zLTkuMi0xMy4xLTE5LTEzLjEgUzI4LjEsMTAuNiwyNiwxOGMtMSwzLjQtMS4xLDgtMC44LDExLjZjMCwwLjUtMi43LTEuNS0yLjIsNS4zYzAuNCw1LDMuMSw2LjEsMy4xLDYuMWwwLjEsMC43YzMuMSwxMC4zLDUsMTUuMiwxMi44LDE5LjhsLTAuMiwyIGMtNSwwLjktMTIuNSwyLjQtMTcuNyw2LjVjLTEuNywxLjQtMy4zLDIuOS00LjcsNUMyNC4yLDgxLjMsMzQuMiw4NS4xLDQ1LDg1LjF6XCJ9KSl9Y29uc3QgeHU9e3Byb2ZpbGVQaWN0dXJlQ29udGFpbmVyOlwibHpLRFdcIixwcm9maWxlUGljdHVyZTpcIkRvemhlXCIsdGVhbVNuYXBjaGF0OlwiTFJ3eW5cIixwcm9maWxlRnJpZW5kbW9qaTpcInVBTGhDXCJ9O3ZhciBGdTtmdW5jdGlvbiBCdShlKXtsZXR7dXNlcklkOnQsc2l6ZTpuLGlzVXNlckJpcnRoZGF5OnI9ITEsYmJzOmk9ITEsY29udmVyc2F0aW9uSWQ6YSxpc0NlbnRlcjpzPSExLGVuYWJsZUZyaWVuZG1vamk6Yz0hMX09ZTsoMCxtZS5aKSgpO2NvbnN0IGw9Q2wodCksdT1obChsKSxkPWw/LnVzZXJfaWQ9PT1QdS5hMjtsZXQgZj0oMCxvLlopKE11LHt1c2VySWQ6dCxjb252ZXJzYXRpb25JZDphLGlzQ2VudGVyOnN9KTtpZihkKWY9KDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6eHUudGVhbVNuYXBjaGF0fSx2b2lkIDAsRnV8fChGdT0oMCxvLlopKER1LHt9KSkpO2Vsc2UgaWYobD8uYml0bW9qaV9hdmF0YXJfaWQmJmwuYml0bW9qaV9zZWxmaWVfaWQpe2NvbnN0IGU9bC5iaXRtb2ppX2F2YXRhcl9pZCx0PXtjb21pY0lkOnI/XCIxMDIyNjQzN1wiOmwuYml0bW9qaV9zZWxmaWVfaWQsYXZhdGFySWQ6ZSxtaW5TY2FsZTpoZS54WS5IQUxGfSxuPWk/KDAsaGUuaE8pKHQpOigwLGhlLnpsKSh0KTtmPSgwLHEuanN4KShcImltZ1wiLHtyb2xlOlwicHJlc2VudGF0aW9uXCIsY2xhc3NOYW1lOnh1LnByb2ZpbGVQaWN0dXJlLC4uLm59KX1jb25zdCBwPXUmJmM7cmV0dXJuKDAsby5aKShcImRpdlwiLHtzdHlsZTp7d2lkdGg6bixoZWlnaHQ6bn0sY2xhc3NOYW1lOnh1LnByb2ZpbGVQaWN0dXJlQ29udGFpbmVyfSx2b2lkIDAsZixwJiYoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTp4dS5wcm9maWxlRnJpZW5kbW9qaSx0aXRsZTp1LnRpdGxlfSx2b2lkIDAsdS5lbW9qaSkpfWNvbnN0IFZ1PXtncm91cDpcIm81V0hpXCIsZ3JvdXAyOlwiYUFaUXZcIixncm91cDM6XCJOU3BVYVwifTtmdW5jdGlvbiBHdShlKXtsZXR7cGFydGljaXBhbnRzOnQsY29udmVyc2F0aW9uSWQ6bixzaXplOnIsaXNVc2VyQmlydGhkYXk6aT0hMSxlbmFibGVGcmllbmRtb2ppOmE9ITF9PWU7Y29uc3Qgcz1YYygpO2lmKHQubGVuZ3RoPD0xKXJldHVybigwLG8uWikoQnUse3VzZXJJZDp0WzBdPz9zLHNpemU6cixjb252ZXJzYXRpb25JZDpuLGlzVXNlckJpcnRoZGF5OmksZW5hYmxlRnJpZW5kbW9qaTphLGlzQ2VudGVyOiEwfSk7Y29uc3QgYz1NYXRoLm1heCgzLHQubGVuZ3RoKSpyO3JldHVybiAzPT09dC5sZW5ndGg/KDAsby5aKShXdSx7cGFydGljaXBhbnRzOnQsY29udmVyc2F0aW9uSWQ6bixzaXplOnIscHJvZmlsZVdpZHRoOmN9KToyPT09dC5sZW5ndGg/KDAsby5aKShIdSx7cGFydGljaXBhbnRzOnQsY29udmVyc2F0aW9uSWQ6bixzaXplOnIscHJvZmlsZVdpZHRoOmN9KTpudWxsfWZ1bmN0aW9uIEh1KGUpe2xldHtwYXJ0aWNpcGFudHM6dCxjb252ZXJzYXRpb25JZDpuLHNpemU6cixwcm9maWxlV2lkdGg6aX09ZTtjb25zdFthLHNdPXQ7cmV0dXJuKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6KDAsUS5aKShWdS5ncm91cCxWdS5ncm91cDIpLHN0eWxlOnt3aWR0aDpyLGhlaWdodDpyfX0sdm9pZCAwLCgwLG8uWikoXCJkaXZcIix7c3R5bGU6e3dpZHRoOml9fSx2b2lkIDAsKDAsby5aKShCdSx7dXNlcklkOnMsYmJzOiEwLHNpemU6Ljgqcixjb252ZXJzYXRpb25JZDpufSwoMCx6Lk1jKShzKSksKDAsby5aKShCdSx7dXNlcklkOmEsYmJzOiEwLHNpemU6MS4yKnIsY29udmVyc2F0aW9uSWQ6bn0sKDAsei5NYykoYSkpKSl9ZnVuY3Rpb24gV3UoZSl7bGV0e3BhcnRpY2lwYW50czp0LGNvbnZlcnNhdGlvbklkOm4sc2l6ZTpyLHByb2ZpbGVXaWR0aDppfT1lO2NvbnN0W2EscyxjXT10O3JldHVybigwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOigwLFEuWikoVnUuZ3JvdXAsVnUuZ3JvdXAzKSxzdHlsZTp7d2lkdGg6cixoZWlnaHQ6cn19LHZvaWQgMCwoMCxvLlopKFwiZGl2XCIse3N0eWxlOnt3aWR0aDppfX0sdm9pZCAwLCgwLG8uWikoQnUse3VzZXJJZDpzLGJiczohMCxzaXplOi44KnIsY29udmVyc2F0aW9uSWQ6bn0sKDAsei5NYykocykpLCgwLG8uWikoQnUse3VzZXJJZDpjLGJiczohMCxzaXplOi44KnIsY29udmVyc2F0aW9uSWQ6bn0sKDAsei5NYykoYykpLCgwLG8uWikoQnUse3VzZXJJZDphLGJiczohMCxzaXplOjEuMipyLGNvbnZlcnNhdGlvbklkOm4saXNDZW50ZXI6ITB9LCgwLHouTWMpKGEpKSkpfWZ1bmN0aW9uIGp1KGUpe2xldHt1c2VySWQ6dH09ZTtjb25zdCBuPVhjKCkscj1SbCh0KSxpPSgwLG1lLlopKCk7cmV0dXJuIHQhPT1uPygwLG8uWikoXCJzcGFuXCIse2RpcjpcImF1dG9cIn0sdm9pZCAwLHIpOigwLG8uWikoXCJzcGFuXCIse2RpcjpcImF1dG9cIn0sdm9pZCAwLGkuZm9ybWF0TWVzc2FnZSh7aWQ6XCIrbVRBYmJcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIk1lXCJ9XX0pKX1DKCkuZ2V0TG9nZ2VyKFwiQXZhdGFyXCIpO2NvbnN0IFp1PXtuYW1lczpcIkZpTHdQXCJ9O2Z1bmN0aW9uIHp1KGUpe2xldHtmZWVkSXRlbTp0fT1lO2NvbnN0IG49WGMoKSxyPSgwLHRsLmpaKSh0KSxpPTE9PT1yLmxlbmd0aD9yOnIuZmlsdGVyKChlPT5lIT09bikpO3JldHVybigwLG8uWikoXCJzcGFuXCIse2NsYXNzTmFtZTpadS5uYW1lcyxkaXI6XCJhdXRvXCJ9LHZvaWQgMCwoMCx0bC5TTCkodCl8fGZ1bmN0aW9uKGUpe3JldHVybigwLHEuanN4KShxLkZyYWdtZW50LHtjaGlsZHJlbjplLm1hcCgoZT0+KDAsby5aKShqdSx7dXNlcklkOmV9LCgwLHouTWMpKGUpKSkpfSl9KGkpKX1jb25zdCBLdT17bmFtZXM6XCJtWVNSOVwifTtmdW5jdGlvbiBZdShlKXtsZXR7ZmVlZEl0ZW06dCxvbkNsaWNrOm59PWU7cmV0dXJuKDAsby5aKShcInNwYW5cIix7Y2xhc3NOYW1lOkt1Lm5hbWVzLG9uQ2xpY2s6bixpZDpgdGl0bGUtJHsoMCx6Lk1jKSh0LmNvbnZlcnNhdGlvbklkKX1gfSx2b2lkIDAsKDAsby5aKSh6dSx7ZmVlZEl0ZW06dH0pKX1jb25zdCBxdT17YXdheTpcInVfZkNEXCIsYXZhdGFyOlwiX21QSHRcIixjb250ZW50OlwiQkhGbGpcIn07dmFyIFh1O2Z1bmN0aW9uIFF1KGUpe2xldHtjb252ZXJzYXRpb246dH09ZTtyZXR1cm4oMCxkLnVzZUVmZmVjdCkoKCgpPT57YigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJteV9haV9qaXRfbm90X2FjY2VwdGVkXCJ9KX0pLFtdKSwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpxdS5hd2F5fSx2b2lkIDAsKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6cXUuY29udGVudH0sdm9pZCAwLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOnF1LmF2YXRhcn0sdm9pZCAwLCgwLG8uWikoR3Use3BhcnRpY2lwYW50czpbUHUubyRdLGNvbnZlcnNhdGlvbklkOnQuY29udmVyc2F0aW9uSWQsc2l6ZTo4MH0pKSwoMCxvLlopKFl1LHtmZWVkSXRlbTp0fSksWHV8fChYdT0oMCxvLlopKFwiaDNcIix7fSx2b2lkIDAsKDAsby5aKSh2Llose2lkOlwiN0c0VXpZXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJPcGVuIG1vYmlsZSB0byBzdGFydCBjaGF0dGluZyB3aXRoIE15QUlcIn1dfSkpKSkpfWNvbnN0IEp1PWU9Pntjb25zdHtpc0xpZ2h0Ym94T3Blbjp0LG9wZW5MaWdodGJveDpuLGNsb3NlTGlnaHRib3g6cn09ZS5saWdodGJveC5tdXRhdG9yO3JldHVybntpc0xpZ2h0Ym94T3Blbjp0LG9wZW5MaWdodGJveDpuLGNsb3NlTGlnaHRib3g6cn19LCR1PWU9Pntjb25zdHtzZWxlY3RlZEluZGV4OnQsbWVzc2FnZUlkOm4sbWVkaWFJbmZvczpyLG5leHQ6aSxwcmV2aW91czpvfT1lLmxpZ2h0Ym94LmRpc3BsYXk7cmV0dXJue3NlbGVjdGVkSW5kZXg6dCxtZXNzYWdlSWQ6bixtZWRpYUluZm9zOnIsbmV4dDppLHByZXZpb3VzOm99fTt2YXIgZWQ9bigxODc1Myk7Y29uc3QgdGQ9KDAsSmMuVWUpKCgwLGVkLm4pKChlPT4oe2xpZ2h0Ym94OnttdXRhdG9yOntpc0xpZ2h0Ym94T3BlbjohMSxvcGVuTGlnaHRib3g6ZnVuY3Rpb24odCxuKXtsZXQgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MDtlKChlPT57ZS5saWdodGJveC5tdXRhdG9yLmlzTGlnaHRib3hPcGVuPUJvb2xlYW4obi5sZW5ndGgpLGUubGlnaHRib3guZGlzcGxheS5tZXNzYWdlSWQ9dCxlLmxpZ2h0Ym94LmRpc3BsYXkubWVkaWFJbmZvcz1uLGUubGlnaHRib3guZGlzcGxheS5zZWxlY3RlZEluZGV4PU1hdGgubWF4KDAsTWF0aC5taW4ocixuLmxlbmd0aC0xKSl9KSl9LGNsb3NlTGlnaHRib3g6KCk9PntlKChlPT57ZS5saWdodGJveC5tdXRhdG9yLmlzTGlnaHRib3hPcGVuPSExLGUubGlnaHRib3guZGlzcGxheS5tZXNzYWdlSWQ9dm9pZCAwLGUubGlnaHRib3guZGlzcGxheS5tZWRpYUluZm9zPXZvaWQgMCxlLmxpZ2h0Ym94LmRpc3BsYXkuc2VsZWN0ZWRJbmRleD0wfSkpfX0sZGlzcGxheTp7c2VsZWN0ZWRJbmRleDowLG1lc3NhZ2VJZDp2b2lkIDAsbWVkaWFJbmZvczp2b2lkIDAsbmV4dDooKT0+e2UoKGU9Pntjb25zdCB0PWUubGlnaHRib3guZGlzcGxheS5tZWRpYUluZm9zLG49dD90Lmxlbmd0aC0xOjAscj1lLmxpZ2h0Ym94LmRpc3BsYXkuc2VsZWN0ZWRJbmRleDtlLmxpZ2h0Ym94LmRpc3BsYXkuc2VsZWN0ZWRJbmRleD1NYXRoLm1pbihyKzEsbil9KSl9LHByZXZpb3VzOigpPT57ZSgoZT0+e2NvbnN0IHQ9ZS5saWdodGJveC5kaXNwbGF5LnNlbGVjdGVkSW5kZXg7ZS5saWdodGJveC5kaXNwbGF5LnNlbGVjdGVkSW5kZXg9TWF0aC5tYXgoMCx0LTEpfSkpfX19fSkpKSk7ZnVuY3Rpb24gbmQoKXtjb25zdHtpc0xpZ2h0Ym94T3BlbjplLG9wZW5MaWdodGJveDp0LGNsb3NlTGlnaHRib3g6bn09dGQoSnUpO3JldHVybntpc0xpZ2h0Ym94T3BlbjplLG9wZW5MaWdodGJveDp0LGNsb3NlTGlnaHRib3g6bn19ZnVuY3Rpb24gcmQoKXtjb25zdHtzZWxlY3RlZEluZGV4OmUsbWVzc2FnZUlkOnQsbWVkaWFJbmZvczpuLG5leHQ6cixwcmV2aW91czppfT10ZCgkdSk7cmV0dXJue3NlbGVjdGVkSW5kZXg6ZSxtZXNzYWdlSWQ6dCxtZWRpYUluZm9zOm4sbmV4dDpyLHByZXZpb3VzOml9fXZhciBpZD1uKDg5NzM0KSxvZD1uLm4oaWQpO2Z1bmN0aW9uIGFkKCl7Y29uc3QgZT0oMCxkLnVzZVJlZikoITEpO3JldHVybiBGZSgoKCk9PihlLmN1cnJlbnQ9ITAsKCk9PntlLmN1cnJlbnQ9ITF9KSksW10pLGV9Y2xhc3Mgc2QgZXh0ZW5kcyBkLkNvbXBvbmVudHtnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShlKXtjb25zdCB0PXRoaXMucHJvcHMuY2hpbGRSZWYuY3VycmVudDtpZih0JiZlLmlzUHJlc2VudCYmIXRoaXMucHJvcHMuaXNQcmVzZW50KXtjb25zdCBlPXRoaXMucHJvcHMuc2l6ZVJlZi5jdXJyZW50O2UuaGVpZ2h0PXQub2Zmc2V0SGVpZ2h0fHwwLGUud2lkdGg9dC5vZmZzZXRXaWR0aHx8MCxlLnRvcD10Lm9mZnNldFRvcCxlLmxlZnQ9dC5vZmZzZXRMZWZ0fXJldHVybiBudWxsfWNvbXBvbmVudERpZFVwZGF0ZSgpe31yZW5kZXIoKXtyZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbn19ZnVuY3Rpb24gY2Qoe2NoaWxkcmVuOmUsaXNQcmVzZW50OnR9KXtjb25zdCBuPSgwLGQudXNlSWQpKCkscj0oMCxkLnVzZVJlZikobnVsbCksaT0oMCxkLnVzZVJlZikoe3dpZHRoOjAsaGVpZ2h0OjAsdG9wOjAsbGVmdDowfSk7cmV0dXJuKDAsZC51c2VJbnNlcnRpb25FZmZlY3QpKCgoKT0+e2NvbnN0e3dpZHRoOmUsaGVpZ2h0Om8sdG9wOmEsbGVmdDpzfT1pLmN1cnJlbnQ7aWYodHx8IXIuY3VycmVudHx8IWV8fCFvKXJldHVybjtyLmN1cnJlbnQuZGF0YXNldC5tb3Rpb25Qb3BJZD1uO2NvbnN0IGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO3JldHVybiBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGMpLGMuc2hlZXQmJmMuc2hlZXQuaW5zZXJ0UnVsZShgXFxuICAgICAgICAgIFtkYXRhLW1vdGlvbi1wb3AtaWQ9XCIke259XCJdIHtcXG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDtcXG4gICAgICAgICAgICB3aWR0aDogJHtlfXB4ICFpbXBvcnRhbnQ7XFxuICAgICAgICAgICAgaGVpZ2h0OiAke299cHggIWltcG9ydGFudDtcXG4gICAgICAgICAgICB0b3A6ICR7YX1weCAhaW1wb3J0YW50O1xcbiAgICAgICAgICAgIGxlZnQ6ICR7c31weCAhaW1wb3J0YW50O1xcbiAgICAgICAgICB9XFxuICAgICAgICBgKSwoKT0+e2RvY3VtZW50LmhlYWQucmVtb3ZlQ2hpbGQoYyl9fSksW3RdKSxkLmNyZWF0ZUVsZW1lbnQoc2Qse2lzUHJlc2VudDp0LGNoaWxkUmVmOnIsc2l6ZVJlZjppfSxkLmNsb25lRWxlbWVudChlLHtyZWY6cn0pKX1jb25zdCBsZD0oe2NoaWxkcmVuOmUsaW5pdGlhbDp0LGlzUHJlc2VudDpuLG9uRXhpdENvbXBsZXRlOnIsY3VzdG9tOmkscHJlc2VuY2VBZmZlY3RzTGF5b3V0Om8sbW9kZTphfSk9Pntjb25zdCBzPXFlKHVkKSxjPSgwLGQudXNlSWQpKCksbD0oMCxkLnVzZU1lbW8pKCgoKT0+KHtpZDpjLGluaXRpYWw6dCxpc1ByZXNlbnQ6bixjdXN0b206aSxvbkV4aXRDb21wbGV0ZTplPT57cy5zZXQoZSwhMCk7Zm9yKGNvbnN0IGUgb2Ygcy52YWx1ZXMoKSlpZighZSlyZXR1cm47ciYmcigpfSxyZWdpc3RlcjplPT4ocy5zZXQoZSwhMSksKCk9PnMuZGVsZXRlKGUpKX0pKSxvP3ZvaWQgMDpbbl0pO3JldHVybigwLGQudXNlTWVtbykoKCgpPT57cy5mb3JFYWNoKCgoZSx0KT0+cy5zZXQodCwhMSkpKX0pLFtuXSksZC51c2VFZmZlY3QoKCgpPT57IW4mJiFzLnNpemUmJnImJnIoKX0pLFtuXSksXCJwb3BMYXlvdXRcIj09PWEmJihlPWQuY3JlYXRlRWxlbWVudChjZCx7aXNQcmVzZW50Om59LGUpKSxkLmNyZWF0ZUVsZW1lbnQoVWUuUHJvdmlkZXIse3ZhbHVlOmx9LGUpfTtmdW5jdGlvbiB1ZCgpe3JldHVybiBuZXcgTWFwfWNvbnN0IGRkPWU9PmUua2V5fHxcIlwiLGZkPSh7Y2hpbGRyZW46ZSxjdXN0b206dCxpbml0aWFsOm49ITAsb25FeGl0Q29tcGxldGU6cixleGl0QmVmb3JlRW50ZXI6aSxwcmVzZW5jZUFmZmVjdHNMYXlvdXQ6bz0hMCxtb2RlOmE9XCJzeW5jXCJ9KT0+e2kmJihhPVwid2FpdFwiLEduKCExLFwiUmVwbGFjZSBleGl0QmVmb3JlRW50ZXIgd2l0aCBtb2RlPSd3YWl0J1wiKSk7bGV0W3NdPWZ1bmN0aW9uKCl7Y29uc3QgZT1hZCgpLFt0LG5dPSgwLGQudXNlU3RhdGUpKDApLHI9KDAsZC51c2VDYWxsYmFjaykoKCgpPT57ZS5jdXJyZW50JiZuKHQrMSl9KSxbdF0pO3JldHVyblsoMCxkLnVzZUNhbGxiYWNrKSgoKCk9PmNyLnBvc3RSZW5kZXIocikpLFtyXSksdF19KCk7Y29uc3QgYz0oMCxkLnVzZUNvbnRleHQpKEplKS5mb3JjZVJlbmRlcjtjJiYocz1jKTtjb25zdCBsPWFkKCksdT1mdW5jdGlvbihlKXtjb25zdCB0PVtdO3JldHVybiBkLkNoaWxkcmVuLmZvckVhY2goZSwoZT0+eygwLGQuaXNWYWxpZEVsZW1lbnQpKGUpJiZ0LnB1c2goZSl9KSksdH0oZSk7bGV0IGY9dTtjb25zdCBwPW5ldyBTZXQsbT0oMCxkLnVzZVJlZikoZiksaD0oMCxkLnVzZVJlZikobmV3IE1hcCkuY3VycmVudCx2PSgwLGQudXNlUmVmKSghMCk7aWYoRmUoKCgpPT57di5jdXJyZW50PSExLGZ1bmN0aW9uKGUsdCl7ZS5mb3JFYWNoKChlPT57Y29uc3Qgbj1kZChlKTt0LnNldChuLGUpfSkpfSh1LGgpLG0uY3VycmVudD1mfSkpLFVuKCgoKT0+e3YuY3VycmVudD0hMCxoLmNsZWFyKCkscC5jbGVhcigpfSkpLHYuY3VycmVudClyZXR1cm4gZC5jcmVhdGVFbGVtZW50KGQuRnJhZ21lbnQsbnVsbCxmLm1hcCgoZT0+ZC5jcmVhdGVFbGVtZW50KGxkLHtrZXk6ZGQoZSksaXNQcmVzZW50OiEwLGluaXRpYWw6ISFuJiZ2b2lkIDAscHJlc2VuY2VBZmZlY3RzTGF5b3V0Om8sbW9kZTphfSxlKSkpKTtmPVsuLi5mXTtjb25zdCBnPW0uY3VycmVudC5tYXAoZGQpLHk9dS5tYXAoZGQpLEU9Zy5sZW5ndGg7Zm9yKGxldCBlPTA7ZTxFO2UrKyl7Y29uc3QgdD1nW2VdOy0xPT09eS5pbmRleE9mKHQpJiZwLmFkZCh0KX1yZXR1cm5cIndhaXRcIj09PWEmJnAuc2l6ZSYmKGY9W10pLHAuZm9yRWFjaCgoZT0+e2lmKC0xIT09eS5pbmRleE9mKGUpKXJldHVybjtjb25zdCBuPWguZ2V0KGUpO2lmKCFuKXJldHVybjtjb25zdCBpPWcuaW5kZXhPZihlKTtmLnNwbGljZShpLDAsZC5jcmVhdGVFbGVtZW50KGxkLHtrZXk6ZGQobiksaXNQcmVzZW50OiExLG9uRXhpdENvbXBsZXRlOigpPT57aC5kZWxldGUoZSkscC5kZWxldGUoZSk7Y29uc3QgdD1tLmN1cnJlbnQuZmluZEluZGV4KCh0PT50LmtleT09PWUpKTtpZihtLmN1cnJlbnQuc3BsaWNlKHQsMSksIXAuc2l6ZSl7aWYobS5jdXJyZW50PXUsITE9PT1sLmN1cnJlbnQpcmV0dXJuO3MoKSxyJiZyKCl9fSxjdXN0b206dCxwcmVzZW5jZUFmZmVjdHNMYXlvdXQ6byxtb2RlOmF9LG4pKX0pKSxmPWYubWFwKChlPT57Y29uc3QgdD1lLmtleTtyZXR1cm4gcC5oYXModCk/ZTpkLmNyZWF0ZUVsZW1lbnQobGQse2tleTpkZChlKSxpc1ByZXNlbnQ6ITAscHJlc2VuY2VBZmZlY3RzTGF5b3V0Om8sbW9kZTphfSxlKX0pKSxcInByb2R1Y3Rpb25cIiE9PUJuJiZcIndhaXRcIj09PWEmJmYubGVuZ3RoPjEmJmNvbnNvbGUud2FybignWW91XFwncmUgYXR0ZW1wdGluZyB0byBhbmltYXRlIG11bHRpcGxlIGNoaWxkcmVuIHdpdGhpbiBBbmltYXRlUHJlc2VuY2UsIGJ1dCBpdHMgbW9kZSBpcyBzZXQgdG8gXCJ3YWl0XCIuIFRoaXMgd2lsbCBsZWFkIHRvIG9kZCB2aXN1YWwgYmVoYXZpb3VyLicpLGQuY3JlYXRlRWxlbWVudChkLkZyYWdtZW50LG51bGwscC5zaXplP2Y6Zi5tYXAoKGU9PigwLGQuY2xvbmVFbGVtZW50KShlKSkpKX07dmFyIHBkPW4oMzIzNTMpLG1kPW4oNjE2ODMpLGhkPW4oOTQwMzApO2NvbnN0IHZkPXttZWRpYUxpc3Q6XCJPbGlfelwiLG1lZGlhV3JhcHBlcjpcIlc3a2FuXCIsbWVkaWE6XCJOSkJEUVwifTt2YXIgZ2Q7ZnVuY3Rpb24geWQoKXtyZXR1cm4geWQ9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSx5ZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y29uc3QgRWQ9ZT0+ZC5jcmVhdGVFbGVtZW50KFwic3ZnXCIseWQoe3dpZHRoOjE0LGhlaWdodDoxNCx2aWV3Qm94OlwiMCAwIDE0IDE0XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLGdkfHwoZ2Q9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwibTkuMTAzIDYuOTcxIDQuMDg5IDQuMDg5YTEuNTU3IDEuNTU3IDAgMCAxLTIuMjAyIDIuMjAxTDYuOTAyIDkuMTc0IDIuODEzIDEzLjI2QTEuNTU3IDEuNTU3IDAgMCAxIC42MTIgMTEuMDZMNC43IDYuOTcuNjEyIDIuODgzQTEuNTU3IDEuNTU3IDAgMSAxIDIuODEzLjY4TDYuOTAyIDQuNzcgMTAuOTkuNjhhMS41NTcgMS41NTcgMCAxIDEgMi4yMDIgMi4yMDJMOS4xMDMgNi45N1pcIixmaWxsOlwiIzE2MTkxQ1wifSkpKTt2YXIgX2Q9big0Mzk4MCk7ZnVuY3Rpb24gSWQoKXtyZXR1cm4gbmF2aWdhdG9yLnBsYXRmb3JtLmluY2x1ZGVzKFwiTWFjXCIpfWNvbnN0IFNkPUlkKCk/XCJtZXRhXCI6XCJjdHJsXCI7ZnVuY3Rpb24gYmQoZSl7cmV0dXJuIGUua2V5Q29tYmluYXRpb25TdHJpbmd9ZnVuY3Rpb24gVGQoZSl7bGV0e2tleUNvbWJpbmF0aW9uOnQsZGVzY3JpcHRpb246bn09ZTtyZXR1cm57a2V5Q29tYmluYXRpb246dCxrZXlDb21iaW5hdGlvblN0cmluZzp0LmpvaW4oXCIrXCIpLGRlc2NyaXB0aW9uOm59fWNvbnN0IENkPXtUb2dnbGVNaWNyb3Bob25lTXV0ZWQ6VGQoe2tleUNvbWJpbmF0aW9uOltcImN0cmxcIixcImRcIl0sZGVzY3JpcHRpb246X2Quc2QuZm9ybWF0TWVzc2FnZSh7aWQ6XCJ2d0xRWk1cIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlRvZ2dsZSBNaWNyb3Bob25lXCJ9XX0pfSksVG9nZ2xlVmlkZW9FbmFibGVkOlRkKHtrZXlDb21iaW5hdGlvbjpbXCJjdHJsXCIsXCJlXCJdLGRlc2NyaXB0aW9uOl9kLnNkLmZvcm1hdE1lc3NhZ2Uoe2lkOlwibjNGbUZBXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJUb2dnbGUgQ2FtZXJhXCJ9XX0pfSksVG9nZ2xlQXNzb2NpYXRlZENoYXQ6VGQoe2tleUNvbWJpbmF0aW9uOklkKCk/W1wiY3RybFwiLFwibWV0YVwiLFwiY1wiXTpbXCJjdHJsXCIsXCJhbHRcIixcImNcIl0sZGVzY3JpcHRpb246X2Quc2QuZm9ybWF0TWVzc2FnZSh7aWQ6XCJuTWRsdHdcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlRvZ2dsZSBDaGF0IGZvciBDYWxsXCJ9XX0pfSksVG9nZ2xlU2VsZlZpZGVvU2l6ZTpUZCh7a2V5Q29tYmluYXRpb246SWQoKT9bXCJjdHJsXCIsXCJtZXRhXCIsXCJtXCJdOltcImN0cmxcIixcImFsdFwiLFwibVwiXSxkZXNjcmlwdGlvbjpfZC5zZC5mb3JtYXRNZXNzYWdlKHtpZDpcImFBUUJHa1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiVG9nZ2xlIFNlbGZpZSBWaWRlb1wifV19KX0pfSxBZD17RGVjbGluZUNhbGw6VGQoe2tleUNvbWJpbmF0aW9uOltcImVzY1wiXSxkZXNjcmlwdGlvbjpfZC5zZC5mb3JtYXRNZXNzYWdlKHtpZDpcInA1bjJWT1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiRGVjbGluZSBJbmNvbWluZyBDYWxsXCJ9XX0pfSksQWNjZXB0Q2FsbDpUZCh7a2V5Q29tYmluYXRpb246W1NkLFwiZW50ZXJcIl0sZGVzY3JpcHRpb246X2Quc2QuZm9ybWF0TWVzc2FnZSh7aWQ6XCJ6TFRaSHhcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkFuc3dlciBJbmNvbWluZyBDYWxsXCJ9XX0pfSl9LFJkPXtDbG9zZUxpZ2h0Ym94OlRkKHtrZXlDb21iaW5hdGlvbjpbXCJlc2NcIl0sZGVzY3JpcHRpb246X2Quc2QuZm9ybWF0TWVzc2FnZSh7aWQ6XCJ2SHNVNnZcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkNsb3NlIExpZ2h0Ym94XCJ9XX0pfSl9LGtkPXtOZXh0TGVuczpUZCh7a2V5Q29tYmluYXRpb246W1wicmlnaHRcIl0sZGVzY3JpcHRpb246X2Quc2QuZm9ybWF0TWVzc2FnZSh7aWQ6XCJEOGVITDBcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIk5leHQgTGVuc1wifV19KX0pLFByZXZMZW5zOlRkKHtrZXlDb21iaW5hdGlvbjpbXCJsZWZ0XCJdLGRlc2NyaXB0aW9uOl9kLnNkLmZvcm1hdE1lc3NhZ2Uoe2lkOlwidjB5KyttXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJQcmV2IExlbnNcIn1dfSl9KX0sT2Q9e1Nob3dIb3RrZXlzSGVscDpUZCh7a2V5Q29tYmluYXRpb246W1NkLFwiL1wiXSxkZXNjcmlwdGlvbjpfZC5zZC5mb3JtYXRNZXNzYWdlKHtpZDpcIm52V243dVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiU2hvdyBIb3RrZXlzIEhlbHBcIn1dfSl9KSxTaG93Q29udmVyc2F0aW9uU3dpdGNoZXI6VGQoe2tleUNvbWJpbmF0aW9uOltTZCxcImtcIl0sZGVzY3JpcHRpb246X2Quc2QuZm9ybWF0TWVzc2FnZSh7aWQ6XCIzUk5DUG1cIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkp1bXAgdG8gYSBjb252ZXJzYXRpb25cIn1dfSl9KSxUb2dnbGVEZXZNb2RlOiExfSxOZD17SW5jb21pbmdDYWxsSG90a2V5czpBZCxBY3RpdmVDYWxsSG90a2V5czpDZCxMaWdodGJveEhvdGtleXM6UmQsTGVuc0Nhcm91c2VsS2V5czprZCxHZW5lcmFsSG90a2V5czpPZH0sd2Q9e211bHRpQnV0dG9uOlwiYkNaRGMgQm5hdXJcIixidXR0b246XCJlS2FMNyBCbmF1clwiLHByaW1hcnk6XCJyZTdORFwiLG5vUGFkZGluZzpcInpVenZ1XCJ9O3ZhciBEZD17UFJJTUFSWTowfTtmdW5jdGlvbiBQZChlKXtjb25zdHtjaGlsZHJlbjp0LG9uQ2xpY2s6bixub1BhZGRpbmc6cixjbGFzc05hbWU6aSx0aXRsZTphLFwiZGF0YS10ZXN0aWRcIjpzLGhvdGtleTpjLGJ1dHRvblR5cGU6bH09ZSx1PWM/YCR7YXx8Yy5kZXNjcmlwdGlvbn0gWyR7YmQoYyl9XWA6YSxkPWM/YmQoYyk6dm9pZCAwLGY9KDAsUS5aKShpLHdkLmJ1dHRvbixyJiZ3ZC5ub1BhZGRpbmcsbD09PURkLlBSSU1BUlkmJndkLnByaW1hcnkpO2lmKHZvaWQgMCE9PWUuaHJlZil7Y29uc3R7aHJlZjpyLHRhcmdldDppLHJlbDphfT1lO3JldHVybigwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOmYsdGl0bGU6dX0sdm9pZCAwLCgwLG8uWikoXCJhXCIse2hyZWY6cix0YXJnZXQ6aSxyZWw6YSxvbkNsaWNrOm4sXCJhcmlhLWtleXNob3J0Y3V0c1wiOmR9LHZvaWQgMCx0KSl9Y29uc3R7c3VibWl0OnAsZGlzYWJsZWQ6bX09ZTtyZXR1cm4oMCxvLlopKFwiYnV0dG9uXCIse2NsYXNzTmFtZTpmLHR5cGU6cD9cInN1Ym1pdFwiOlwiYnV0dG9uXCIsb25DbGljazpuLGRpc2FibGVkOm0sXCJhcmlhLWtleXNob3J0Y3V0c1wiOmQsdGl0bGU6YX0sdm9pZCAwLHQpfWNvbnN0IE1kPSgwLGQuZm9yd2FyZFJlZikoKChlLHQpPT57bGV0e2NsYXNzTmFtZTpuLGNoaWxkcmVuOnIsbm9QYWRkaW5nOmksXCJkYXRhLXRlc3RpZFwiOm8sLi4uYX09ZTtyZXR1cm4oMCxxLmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOigwLFEuWikobix3ZC5tdWx0aUJ1dHRvbixpJiZ3ZC5ub1BhZGRpbmcpLHRhYkluZGV4OjAsLi4uYSxyZWY6dCxjaGlsZHJlbjpyfSl9KSk7TWQuZGlzcGxheU5hbWU9XCJNdWx0aUJ1dHRvblwiO2NvbnN0IExkPXtyZW1vdmVCdXR0b246XCJadldCRVwifTt2YXIgVWQ7ZnVuY3Rpb24geGQoZSl7bGV0e29uQ2xpY2s6dH09ZTtyZXR1cm4oMCxvLlopKFBkLHtjbGFzc05hbWU6TGQucmVtb3ZlQnV0dG9uLG9uQ2xpY2s6dH0sdm9pZCAwLFVkfHwoVWQ9KDAsby5aKShFZCx7fSkpKX1mdW5jdGlvbiBGZChlKXtsZXR7ZmlsZTp0fT1lO2NvbnN0W24scl09KDAsZC51c2VTdGF0ZSkoXCJcIik7cmV0dXJuKDAsZC51c2VFZmZlY3QpKCgoKT0+e2NvbnN0IGU9VVJMLmNyZWF0ZU9iamVjdFVSTCh0KTtyZXR1cm4gcihlKSwoKT0+e2UmJlVSTC5yZXZva2VPYmplY3RVUkwoZSl9fSksW3RdKSx0LnR5cGUuc3RhcnRzV2l0aChcImltYWdlXCIpPygwLG8uWikoXCJpbWdcIix7Y2xhc3NOYW1lOnZkLm1lZGlhLHNyYzpuLGFsdDpcIlBlbmRpbmcgSW1hZ2VcIn0pOnQudHlwZS5zdGFydHNXaXRoKFwidmlkZW9cIik/KDAsby5aKShcInZpZGVvXCIse2NsYXNzTmFtZTp2ZC5tZWRpYSxzcmM6bixtdXRlZDohMCxsb29wOiExLGF1dG9QbGF5OiExLGNvbnRyb2xzOiExfSk6bnVsbH1jb25zdCBCZD0oMCxkLm1lbW8pKEZkKTtmdW5jdGlvbiBWZChlKXtsZXR7bWVkaWFGaWxlczp0LG9uVW5zZWxlY3RGaWxlczpufT1lO3JldHVybiB0Lmxlbmd0aD8oMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTp2ZC5tZWRpYUxpc3R9LHZvaWQgMCwoMCxvLlopKGZkLHt9LHZvaWQgMCx0Lm1hcCgoZT0+KDAsby5aKSh4cy5kaXYse2NsYXNzTmFtZTp2ZC5tZWRpYVdyYXBwZXIsaW5pdGlhbDp7b3BhY2l0eTowfSxhbmltYXRlOntvcGFjaXR5OjF9LGV4aXQ6e29wYWNpdHk6MH0sdHJhbnNpdGlvbjp7ZHVyYXRpb246LjE1fX0sKDAsdGwuRTUpKGUpLCgwLG8uWikoQmQse2ZpbGU6ZX0pLCgwLG8uWikoeGQse29uQ2xpY2s6KCk9Pm4oW2VdKX0pKSkpKSk6bnVsbH12YXIgR2QsSGQ9big0MDQ4OSk7ZnVuY3Rpb24gV2QoKXtjb25zdCBlPSgwLG1lLlopKCkubG9jYWxlLHQ9KDAsTy5ycCkoQS5wdyk7cmV0dXJuXCJsb2NhbGVcIj09PXQ/XCJydGxcIj09PSgwLEhkLmEpKGUpOlwicnRsXCI9PT10fWZ1bmN0aW9uIGpkKCl7cmV0dXJuIFdkKCk/XCJydGxcIjpcImF1dG9cIn1mdW5jdGlvbiBaZCgpe3JldHVybiBaZD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LFpkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCB6ZD1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIixaZCh7d2lkdGg6MTYsaGVpZ2h0OjE2LHZpZXdCb3g6XCIwIDAgMTYgMTZcIixmaWxsOlwiIzNBM0U0MVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksR2R8fChHZD1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMTMuNTM2IDcuMjQ4IDMuMjE4IDIuMDlhLjg0Ljg0IDAgMCAwLTEuMTkyLjk1NmwxLjgwNyA0LjMwMmMuMTc0LjQxNi4xNzQuODg1IDAgMS4zMDJsLTEuODA3IDQuMzAyYS44NC44NCAwIDAgMCAxLjE5Mi45NTZsMTAuMzE4LTUuMTU3YS44NDIuODQyIDAgMCAwIDAtMS41MDRaXCJ9KSkpO3ZhciBLZCxZZDtmdW5jdGlvbiBxZCgpe3JldHVybiBxZD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LHFkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBYZD1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIixxZCh7d2lkdGg6MTYsaGVpZ2h0OjE4LHZpZXdCb3g6XCIwIDAgMTYgMThcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksS2R8fChLZD1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNNy4xNjcgNi4wODNhMS4yNSAxLjI1IDAgMSAxLTIuNSAwIDEuMjUgMS4yNSAwIDAgMSAyLjUgMFpcIn0pKSxZZHx8KFlkPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7Y2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk0uNSAxMy42MXYuMDc4YzAgLjA1Mi4wMDQuMTA0LjAxMy4xNTRhMy43NSAzLjc1IDAgMCAwIDMuNzM3IDMuNDRoNy41YTMuNzUgMy43NSAwIDAgMCAzLjc1LTMuNzVWNC40NjhhMy43NSAzLjc1IDAgMCAwLTMuNzUtMy43NWgtNy41QTMuNzUgMy43NSAwIDAgMCAuNSA0LjQ2OXY5LjE0MVpNNC4yNSAyLjU5NGg3LjVjMS4wMzYgMCAxLjg3NS44NCAxLjg3NSAxLjg3NXYzLjY4NmEzLjMxNyAzLjMxNyAwIDAgMC0xLjYzLS40MDVjLS44NDUgMC0xLjUyLjQzNi0yLjAyMy44OTgtLjUwMy40NjItLjk0NiAxLjA1Ni0xLjMyMiAxLjU3bC0uMTI1LjE3Yy0uMzQ0LjQ3NC0uNjMyLjg2OC0uOTE4IDEuMTY3LS4zMzkuMzUzLS40ODQuMzYyLS40ODQuMzYyLS4xNjggMC0uMjgyLS4wOC0uODQtLjU4OS0uNDc5LS40MzYtMS4yMTgtMS4wNzgtMi40MDktMS4wNzgtLjU1OCAwLTEuMDYyLjExNC0xLjQ5OS4zMlY0LjQ2OWMwLTEuMDM2Ljg0LTEuODc1IDEuODc1LTEuODc1Wm05LjM3NSA4LjU5NGMwIC4wMTIgMCAuMDExLS4wMDMtLjAwNC0uMDA1LS4wMy0uMDItLjEyMi0uMDY3LS4yNjRhMi40NjYgMi40NjYgMCAwIDAtLjI5Mi0uNjA2Yy0uMjYtLjM4Ny0uNjM5LS42ODktMS4yNjctLjY4OS0uMTcgMC0uNDA4LjA4NS0uNzU1LjQwNC0uMzQ4LjMyLS42OTEuNzY3LTEuMDc3IDEuMjk1bC0uMTI2LjE3M2MtLjMzLjQ1Mi0uNjk3Ljk1OC0xLjA3NyAxLjM1NS0uNDEuNDI4LTEuMDI3Ljk0LTEuODM4Ljk0LS45NTYgMC0xLjYyLS42MjQtMS45OTktLjk4YTkuODEgOS44MSAwIDAgMC0uMTA1LS4wOThjLS40MzYtLjM5OC0uNzEyLS41ODktMS4xNDUtLjU4OS0uNTUgMC0uODk3LjIwMS0xLjExOS40NTgtLjIyNC4yNTgtLjM2Mi42MjUtLjM3OCAxLjAyNi4wNCAxIC44NjMgMS43OTcgMS44NzMgMS43OTdoNy41YzEuMDM2IDAgMS44NzUtLjg0IDEuODc1LTEuODc1di0yLjM0NFpcIn0pKSk7dmFyIFFkPXtQb3NpdGl2ZTowLE5lZ2F0aXZlOjEsTmV1dHJhbDoyfTtmdW5jdGlvbiBKZCgpe2NvbnN0W2UsdF09KDAsZC51c2VTdGF0ZSkoW10pLG49KDAsZC51c2VSZWYpKFtdKSxyPSgwLGQudXNlQ2FsbGJhY2spKChlPT57dCgodD0+e2Zvcihjb25zdCB0IG9mIG4uY3VycmVudCl0WzFdPT09ZSYmY2xlYXJUaW1lb3V0KHRbMF0pO3JldHVybiBuLmN1cnJlbnQ9bi5jdXJyZW50LmZpbHRlcigodD0+e2xldFtuLHJdPXQ7cmV0dXJuIHIhPT1lfSkpLHQuZmlsdGVyKCh0PT50LmtleSE9PWUpKX0pKX0pLFtdKSxpPSgwLGQudXNlQ2FsbGJhY2spKChlPT57dCgodD0+Wy4uLnQsZV0pKSxlLnRpbWVvdXQ8MS8wJiZuLmN1cnJlbnQucHVzaChbd2luZG93LnNldFRpbWVvdXQoKCgpPT5yKGUua2V5KSksZS50aW1lb3V0KSxlLmtleV0pfSksW3JdKTtyZXR1cm4oMCxkLnVzZUVmZmVjdCkoKCgpPT4oKT0+e2Zvcihjb25zdCBlIG9mIG4uY3VycmVudCljbGVhclRpbWVvdXQoZVswXSl9KSxbXSkse2FjdGl2ZVRvYXN0czplLHNob3dUb2FzdDppLGhpZGVUb2FzdDpyfX1mdW5jdGlvbiAkZChlKXtjb25zdCB0PSgwLGQudXNlUmVmKShudWxsKTtyZXR1cm4oMCxkLnVzZUVmZmVjdCkoKCgpPT57Y29uc3Qgbj1uPT57Y29uc3Qgcj1uLnRhcmdldDt0LmN1cnJlbnQmJihyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnR8fHIgaW5zdGFuY2VvZiBTVkdQYXRoRWxlbWVudCkmJih0LmN1cnJlbnQ9PT1yfHx0LmN1cnJlbnQuY29udGFpbnMocil8fChlKCksbi5zdG9wUHJvcGFnYXRpb24oKSkpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsbix7Y2FwdHVyZTohMH0pLCgpPT57ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsbix7Y2FwdHVyZTohMH0pfX0pLFtlXSksdH1mdW5jdGlvbiBlZigpe2NvbnN0W2UsdF09KDAsZC51c2VTdGF0ZSkoITEpLG49KDAsZC51c2VSZWYpKHtzaGlmdEtleTohMSxtZXRhS2V5OiExLGN0cmxLZXk6ITF9KSxyPSgpPT57Y29uc3R7c2hpZnRLZXk6ZSxtZXRhS2V5OnIsY3RybEtleTppfT1uLmN1cnJlbnQ7ZSYmKHJ8fGkpfHx0KCExKX0saT0oMCxPLnJwKShBLnJJKTtyZXR1cm4oMCxkLnVzZUVmZmVjdCkoKCgpPT57Y29uc3QgZT1lPT57bi5jdXJyZW50PXtzaGlmdEtleTplLnNoaWZ0S2V5LG1ldGFLZXk6ZS5tZXRhS2V5LGN0cmxLZXk6ZS5jdHJsS2V5fSxyKCl9LG89KCk9PnQoIWkpLGE9dD0+e2UodCksKHQuc2hpZnRLZXkmJih0Lm1ldGFLZXl8fHQuY3RybEtleSl8fFwiUHJpbnRTY3JlZW5cIj09PXQua2V5KSYmbygpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLG8pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGEpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIixlKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLGUpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLG8pLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGEpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIixlKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLGUpfX0pLFtpXSksW2Uscl19ZnVuY3Rpb24gdGYoKXtjb25zdFtlLHRdPSgwLGQudXNlU3RhdGUpKCExKSxuPSgwLE8ucnApKEEuckkpO3JldHVybigwLGQudXNlRWZmZWN0KSgoKCk9Pntjb25zdCBlPSgpPT50KCExKSxyPSgpPT57ZG9jdW1lbnQuaGFzRm9jdXMoKXx8dCghbil9LGk9dD0+e3Quc2hpZnRLZXkmJih0Lm1ldGFLZXl8fHQuYWx0S2V5fHx0LmN0cmxLZXkpfHxcIlByaW50U2NyZWVuXCI9PT10LmtleT9yKCk6XCJUYWJcIj09PXQua2V5JiZlKCl9LG89dD0+e3Quc2hpZnRLZXl8fGUoKX0sYT0oKT0+e2NvbnN0IHQ9d2luZG93LmdldFNlbGVjdGlvbigpO2lmKHQpe2xldCBuPXQuZm9jdXNOb2RlO2Zvcig7bjspe2lmKFwiSU5QVVRcIj09PW4ubm9kZU5hbWV8fG4gaW5zdGFuY2VvZiBFbGVtZW50JiZuLmdldEF0dHJpYnV0ZShcImNvbnRlbnRlZGl0YWJsZVwiKSlyZXR1cm4gdm9pZCBlKCk7bj1uLnBhcmVudE5vZGV9fX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLHIpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIixyKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLHIpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGkpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIixvLCEwKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsZSwhMCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJzZWxlY3Rpb25jaGFuZ2VcIixhLCEwKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmx1clwiLHIpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIixyKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLHIpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGkpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIixvLCEwKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsZSwhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzZWxlY3Rpb25jaGFuZ2VcIixhLCEwKX19KSxbbl0pLGV9ZnVuY3Rpb24gbmYoZSx0KXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MTI7KDAsZC51c2VMYXlvdXRFZmZlY3QpKCgoKT0+e2NvbnN0IHI9ZS5jdXJyZW50O2lmKHIpe2lmKHQpe2NvbnN0IGU9KCk9PntyLnN0eWxlLmZpbHRlcj1gYmx1cigke259cHgpYCxyLnN0eWxlLnBvaW50ZXJFdmVudHM9XCJub25lXCJ9O2UoKTtjb25zdCB0PW5ldyBNdXRhdGlvbk9ic2VydmVyKCgoKT0+e2UoKX0pKTtyZXR1cm4gdC5vYnNlcnZlKHIse2F0dHJpYnV0ZUZpbHRlcjpbXCJzdHlsZVwiXX0pLCgpPT57dC5kaXNjb25uZWN0KCl9fXIuc3R5bGUuZmlsdGVyPVwiXCIsci5zdHlsZS5wb2ludGVyRXZlbnRzPVwiXCJ9fSksW3QsbixlXSl9dmFyIHJmPW4oMTI5MDIpLG9mPW4oNzgyKTtjb25zdCBhZj0oZSx0KT0+e2xldFtuLHJdPVswLDEvMF07Zm9yKGNvbnN0W3QsaV1vZiBlLmVudHJpZXMoKSl7Y29uc3QgZT1pWzFdO2U8ciYmKG49dCxyPWUpfXJldHVybigwLHJmLlpQKShlLChlPT57ZS5zcGxpY2UobiwwLFt0LDFdKSxlLmxlbmd0aD4xOCYmZS5wb3AoKX0pKX07dmFyIHNmO2Z1bmN0aW9uIGNmKCl7cmV0dXJuIGNmPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sY2YuYXBwbHkodGhpcyxhcmd1bWVudHMpfSgwLEpjLlVlKSgpKCgwLG9mLm1XKSgoMCxvZi50SikoKChlLHQpPT4oe2ZyZXFMaXN0OltdLGFkZEVtb2ppOm49Pntjb25zdCByPXQoKS5mcmVxTGlzdCxpPXIuZmluZEluZGV4KChlPT5lWzBdLmxhYmVsPT09bi5sYWJlbCkpO2lmKC0xIT09aSl7Y29uc3QgdD0oMCxyZi5aUCkociwoZT0+e2NvbnN0IHQ9ZVtpXVsxXSsxO2VbaV09W24sdF0sZS5zb3J0KCgoZSx0KT0+dFsxXS1lWzFdKSl9KSk7ZSh7ZnJlcUxpc3Q6dH0pfWVsc2UgZSh7ZnJlcUxpc3Q6YWYocixuKX0pfSxjbGVhcjooKT0+e2Uoe2ZyZXFMaXN0OltdfSl9fSkpLHtuYW1lOlwiZnJlcXVlbnRseS11c2VkLXN0b3JhZ2VcIn0pKSk7Y29uc3QgbGY9ZT0+ZC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsY2Yoe3dpZHRoOjIwLGhlaWdodDoyMSx2aWV3Qm94OlwiMCAwIDIwIDIxXCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLHNmfHwoc2Y9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTQuMTA3IDE2LjM5MkE4LjMzMyA4LjMzMyAwIDEgMCAxNS44OTMgNC42MDcgOC4zMzMgOC4zMzMgMCAwIDAgNC4xMDcgMTYuMzkyWm05LjEzNC05LjEzM2EuODMzLjgzMyAwIDAgMSAwIDEuMTc5TDExLjE3OCAxMC41bDIuMDYzIDIuMDYyYS44MzMuODMzIDAgMCAxLTEuMTc5IDEuMTc5TDEwIDExLjY3OGwtMi4wNjIgMi4wNjNhLjgzMy44MzMgMCAwIDEtMS4xNzktMS4xNzlMOC44MjEgMTAuNSA2Ljc2IDguNDM4YS44MzMuODMzIDAgMCAxIDEuMTc5LTEuMTc5TDEwIDkuMzIxbDIuMDYyLTIuMDYyYS44MzMuODMzIDAgMCAxIDEuMTc5IDBaXCJ9KSkpO3ZhciB1ZjtmdW5jdGlvbiBkZigpe3JldHVybiBkZj1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGRmLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBmZj1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIixkZih7dmlld0JveDpcIjAgMCAxMiAxMlwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksdWZ8fCh1Zj1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNOS40NzUgNy43ODggMTEuMiA5LjU3NmExLjE1IDEuMTUgMCAwIDEtMS42NTMgMS41OTdMNy44NjYgOS40MzJBNC44OTggNC44OTggMCAwIDEgLjM3NSA1LjI3NkMuMzc1IDIuNTY5IDIuNTY3LjM3NSA1LjI3LjM3NWE0Ljg5OCA0Ljg5OCAwIDAgMSA0Ljg5NiA0LjljMCAuOTItLjI1MiAxLjc3OC0uNjkxIDIuNTEzWm0tNC4yMDUuMzQ3YTIuODU3IDIuODU3IDAgMCAwIDIuODU2LTIuODZBMi44NTcgMi44NTcgMCAwIDAgNS4yNyAyLjQxOGEyLjg1NyAyLjg1NyAwIDAgMC0yLjg1NSAyLjg1OUEyLjg1NyAyLjg1NyAwIDAgMCA1LjI3IDguMTM1WlwifSkpKTtmdW5jdGlvbiBwZihlLHQpe3ZhciBuO3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlP3Q/KG51bGwhPT0obj10W2VdKSYmdm9pZCAwIT09bnx8KHRbZV09ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChlKSksZT10W2VdKTplPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSk6ZSBpbnN0YW5jZW9mIEVsZW1lbnQmJihlPVtlXSksQXJyYXkuZnJvbShlfHxbXSl9Y29uc3QgbWY9ZT0+XCJmdW5jdGlvblwiPT10eXBlb2YgZSxoZj17YW55OjAsYWxsOjF9O2Z1bmN0aW9uIHZmKGUse3Jvb3Q6dCxtYXJnaW46bixhbW91bnQ6cixvbmNlOmk9ITF9PXt9KXtjb25zdFtvLGFdPSgwLGQudXNlU3RhdGUpKCExKTtyZXR1cm4oMCxkLnVzZUVmZmVjdCkoKCgpPT57aWYoIWUuY3VycmVudHx8aSYmbylyZXR1cm47Y29uc3Qgcz17cm9vdDp0JiZ0LmN1cnJlbnR8fHZvaWQgMCxtYXJnaW46bixhbW91bnQ6XCJzb21lXCI9PT1yP1wiYW55XCI6cn07cmV0dXJuIGZ1bmN0aW9uKGUsdCx7cm9vdDpuLG1hcmdpbjpyLGFtb3VudDppPVwiYW55XCJ9PXt9KXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIpcmV0dXJuKCk9Pnt9O2NvbnN0IG89cGYoZSksYT1uZXcgV2Vha01hcCxzPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoZT0+e2UuZm9yRWFjaCgoZT0+e2NvbnN0IG49YS5nZXQoZS50YXJnZXQpO2lmKGUuaXNJbnRlcnNlY3RpbmchPT1Cb29sZWFuKG4pKWlmKGUuaXNJbnRlcnNlY3Rpbmcpe2NvbnN0IG49dChlKTttZihuKT9hLnNldChlLnRhcmdldCxuKTpzLnVub2JzZXJ2ZShlLnRhcmdldCl9ZWxzZSBuJiYobihlKSxhLmRlbGV0ZShlLnRhcmdldCkpfSkpfSkse3Jvb3Q6bixyb290TWFyZ2luOnIsdGhyZXNob2xkOlwibnVtYmVyXCI9PXR5cGVvZiBpP2k6aGZbaV19KTtyZXR1cm4gby5mb3JFYWNoKChlPT5zLm9ic2VydmUoZSkpKSwoKT0+cy5kaXNjb25uZWN0KCl9KGUuY3VycmVudCwoKCk9PihhKCEwKSxpP3ZvaWQgMDooKT0+YSghMSkpKSxzKX0pLFt0LGUsbixpXSksb312YXIgZ2Y7ZnVuY3Rpb24geWYoKXtyZXR1cm4geWY9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSx5Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y29uc3QgRWY9ZT0+ZC5jcmVhdGVFbGVtZW50KFwic3ZnXCIseWYoe3dpZHRoOjMyLGhlaWdodDozMix2aWV3Qm94OlwiMCAwIDMyIDMyXCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLGdmfHwoZ2Y9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwiTTE4Ljk0NSAxOC4xNDFjLjA1OC4wMjguMTE3LjA1Ny4xNzguMDg1LjU4My4yNyAxLjI2Mi41ODYgMS43Ni45MjUuMTI2LjA4Ni4yNS4xNzUuMzcuMjY1LjE3Ni4xNTYuMzA1LjI4NS4zODcuMzg3bC4wNDMuMDU4Yy4xNjIuMjM1LjI2MS40OTguMjk2Ljc2OC4wNjIuNDgtLjA4Ljk4LS40MzkgMS4zODNhMi4wNSAyLjA1IDAgMCAxLTEuMTY5LjY0NGMtMS4zMTMuMjM4LTIuODcuMzQ0LTQuMzkuMzQ0LTEuMzQ0IDAtMi43MDItLjA4Mi0zLjg4My0uMjY3YTkuNDEgOS40MSAwIDAgMS0uNjIzLS4xNDZjLTEuMDc2LS4yNzMtMS43MDYtMS4yOTYtMS40MDgtMi4yODMuMDUzLS4xNzcuMTM1LS4zNDUuMjQxLS40OTkuMTA0LS4xNS4yMzEtLjI4Ny4zNzktLjQwNWE3LjU1NSA3LjU1NSAwIDAgMSAyLjE1LTEuMTc0Yy4wNzEtLjAyNS4xNC0uMDUxLjIwNS0uMDc3LjU2NC0uMjI3Ljk0LS40OTcgMS4yMTYtLjc3MWwuMDcyLS4wNzVjLjExOC0uMTI1LjI2LS4zMDkuNDI2LS41NTFsLS40Ny0uMzg2Yy0uMDU3LS4wNTItLjEwOS0uMS0uMTU1LS4xNDYtLjIyMS0uMjE5LS4yNzktLjMxNC0uNDA3LS40ODdhNi4xOCA2LjE4IDAgMCAxLS40MS0uNjQgNi45MTggNi45MTggMCAwIDEtLjU2Ny0xLjMxMiA0Ljk3OCA0Ljk3OCAwIDAgMS0uMjQ2LTEuNDQ1YzAtMS44NDMgMS41NTctMy4zMzYgMy40NzgtMy4zMzYgMS45MiAwIDMuNDc4IDEuNDkzIDMuNDc4IDMuMzM2IDAgMS4yMjEtLjY4NSAyLjk0MS0xLjcwNiAzLjk2Mi0uMDI0LjAyNC0uMDUxLjA1LS4wODEuMDc3YS42NTEuNjUxIDAgMCAwIC4wMi45ODNjLjI5NC4yNDUuNjk0LjUxIDEuMjU1Ljc4M1ptLjc1My0uODYxYTUuMDE3IDUuMDE3IDAgMCAxIDEuMDMyLS41MDVjLjQzNS0uMTUzLjcxMy0uMzQ2LjkxLS41NDNsLjA0Ni0uMDQ3LjAxNy0uMDE5YS40MDIuNDAyIDAgMCAwLS4wNDUtLjU4MiAyLjY0IDIuNjQgMCAwIDEtLjEtLjA5M2MtLjE0Mi0uMTQtLjE3OC0uMjAxLS4yNi0uMzEyYTMuOTcgMy45NyAwIDAgMS0uMjY0LS40MSA0LjQzOCA0LjQzOCAwIDAgMS0uMzYyLS44NCAzLjE4NiAzLjE4NiAwIDAgMS0uMTU4LS45NTdjLjAxNS0uMTEzLjAyNi0uMjI2LjAzMy0uMzM2LjE4MS0xLjAwNSAxLjA5NS0xLjc3IDIuMTk1LTEuNzcgMS4yMyAwIDIuMjI3Ljk1NyAyLjIyNyAyLjEzNyAwIC43ODMtLjQzOCAxLjg4NC0xLjA5MiAyLjUzOGExLjQ1NSAxLjQ1NSAwIDAgMS0uMDUyLjA0OS40MTcuNDE3IDAgMCAwIC4wMTIuNjNjLjIwOS4xNzMuNDk4LjM2MS45MTkuNTU2LjM3My4xNzIuODA4LjM3NSAxLjEyNy41OTIuMDguMDU1LjE2LjExMi4yMzcuMTcuMTM1LjEyLjIyNy4yMTUuMjc1LjI4NWExLjExMSAxLjExMSAwIDAgMS0uMDkyIDEuMzc4Yy0uMTkuMjEzLS40NTQuMzU5LS43NDguNDEyLS43OTUuMTQ0LTEuNzI5LjIxMy0yLjY1MS4yMmEyLjg3NyAyLjg3NyAwIDAgMC0uMzE1LS41OTVjLS4xMzctLjItLjMzNC0uNDA0LS42MDctLjY0NmE5LjQwNSA5LjQwNSAwIDAgMC0uNDgtLjM1Yy0uNDYyLS4zMTQtLjkzMy0uNTU4LTEuODA0LS45NjJaTTkuMDY1IDE5LjgzM2MtLjgwNS0uMDA3LTEuNjEtLjA2LTIuMzE3LS4xN2E2LjAyIDYuMDIgMCAwIDEtLjM5OS0uMDk0Yy0uNjg5LS4xNzUtMS4wOTMtLjgzLS45MDItMS40NjJhMS4xOCAxLjE4IDAgMCAxIC4zOTgtLjU4Yy40MTktLjMzNC45MTktLjU5IDEuMzc3LS43NTIuNDM1LS4xNTMuNzEzLS4zNDYuOTEtLjU0M2EyLjAwOCAyLjAwOCAwIDAgMCAuMDU4LS4wNi40MDcuNDA3IDAgMCAwLS4wNC0uNTg4IDIuNjkxIDIuNjkxIDAgMCAxLS4xLS4wOTNjLS4xNDEtLjE0LS4xNzgtLjIwMS0uMjYtLjMxMmEzLjk1NiAzLjk1NiAwIDAgMS0uMjY0LS40MSA0LjQzOSA0LjQzOSAwIDAgMS0uMzYyLS44NCAzLjE4NyAzLjE4NyAwIDAgMS0uMTU4LS45MjZjMC0xLjE4Ljk5OC0yLjEzNiAyLjIyOC0yLjEzNiAxLjA1OCAwIDEuOTQ0LjcwNyAyLjE3IDEuNjU2LjAwOC4xODQuMDI3LjM3My4wNTYuNTY2LS4wMy43NzUtLjQ2IDEuODIyLTEuMDkxIDIuNDUyYTEuNTM4IDEuNTM4IDAgMCAxLS4wNTIuMDQ5LjQxNy40MTcgMCAwIDAgLjAxMy42M2MuMjA4LjE3My40OTcuMzYxLjkxOC41NTYuMzIuMTQ4LjY4NS4zMTguOTg0LjUtLjguMzEtMS41OC43NDQtMi4yMzIgMS4yNjVhMi45NTQgMi45NTQgMCAwIDAtLjkzNSAxLjI5MlpcIixmaWxsOlwiI2ZmZlwifSkpKTt2YXIgX2Y7Y29uc3QgSWY9ZT0+dm9pZCAwIT09ZS51c2VySWQ7ZnVuY3Rpb24gU2YoZSl7bGV0e2l0ZW1OYW1lOnQsaXNTZWxlY3RlZDpuLGhhbmRsZUNsaWNrOnIsaXNHcm91cDppLHRlc3RJZDphPVwidWkuc2VhcmNoLlBpbGxcIn09ZTtjb25zdCBzPSgwLGQudXNlUmVmKShudWxsKSxjPXZmKHMpO3JldHVybigwLGQudXNlRWZmZWN0KSgoKCk9PntuJiYhYyYmcy5jdXJyZW50Py5zY3JvbGxJbnRvVmlldygpfSksW24sY10pLCgwLGQudXNlRWZmZWN0KSgoKCk9PntzLmN1cnJlbnQ/LnNjcm9sbEludG9WaWV3KCl9KSxbXSksKDAscS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6KDAsUS5aKShcImxLbE94XCIsbiYmXCJRZGVNMlwiLGkmJlwiWkU0YWRcIiksb25DbGljazpyLHJlZjpzLGNoaWxkcmVuOltpJiYoX2Z8fChfZj0oMCxvLlopKEVmLHt9KSkpLHRdfSl9Y29uc3QgYmY9KDAsZC5mb3J3YXJkUmVmKSgoKGUsdCk9PntsZXR7dmFsdWU6bixvbkNoYW5nZTpyLG9uQ2xlYXI6aSx0ZXN0SWQ6YT1cInVpLlNlYXJjaFwiLGF1dG9Gb2N1czpzLHBsYWNlaG9sZGVyOmMsbGVhZGluZ1N0cmluZzpsLGhhbmRsZUFjdGlvbkJ1dHRvbkNsaWNrOnUsYWN0aW9uQnV0dG9uOmYsc3VwcG9ydFBpbGw6cCxzZWxlY3RlZEl0ZW1MaXN0Om0sZGVsZXRlUGlsbDpoLGlzQWN0aW9uRGlzYWJsZWQ6dj0hMSxmb2N1c0hvdGtleTpnfT1lO2NvbnN0IHk9amQoKSxbRSxfXT0oMCxkLnVzZVN0YXRlKSgtMSksST0oMCxkLnVzZVJlZikobnVsbCksUz0oMCxkLnVzZVJlZikobnVsbCksYj1uLmxlbmd0aD4wLFQ9IWImJkJvb2xlYW4oZikmJiF2LEM9KCFmfHwhYikmJiFtPy5sZW5ndGgmJmw7cmV0dXJuKDAscS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJfUzQ0NlwiLHJvbGU6XCJzZWFyY2hib3hcIixyZWY6SSxvbktleURvd246ZT0+e2lmKCFtKXJldHVybjtjb25zdCB0PUU9PT1tLmxlbmd0aC0xO2lmKFwiQmFja3NwYWNlXCI9PT1lLmNvZGUmJi0xIT09RSl7dCYmUy5jdXJyZW50Py5mb2N1cygpO2NvbnN0IGU9bVtFXTtoPy4oZSksdCYmXygtMSl9ZWxzZVwiQXJyb3dMZWZ0XCI9PT1lLmNvZGUmJkU+PTE/XyhFLTEpOlwiQXJyb3dSaWdodFwiPT09ZS5jb2RlJiYodD8oUy5jdXJyZW50Py5mb2N1cygpLF8oLTEpKTpfKEUrMSkpO2Uuc3RvcFByb3BhZ2F0aW9uKCl9LG9uQmx1cjpwP2U9PntlLmN1cnJlbnRUYXJnZXQuY29udGFpbnMoZS5yZWxhdGVkVGFyZ2V0KXx8XygtMSl9OnZvaWQgMCx0YWJJbmRleDotMSxjaGlsZHJlbjpbKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6XCJQT25HVlwifSx2b2lkIDAsKDAsby5aKShmZix7Y2xhc3NOYW1lOlwiRGt4T2xcIn0pLHAmJm0/Lm1hcCgoKGUsdCk9Pntjb25zdCBuPUlmKGUpO3JldHVybigwLG8uWikoU2Yse2l0ZW1OYW1lOmUuaXRlbU5hbWUsaXNTZWxlY3RlZDp0PT09RSxpc0dyb3VwOiFuLGhhbmRsZUNsaWNrOigpPT57Xyh0KX0sdGVzdElkOmAke2F9LlBpbGxgfSxuP2UudXNlcklkOmUuY29udmVyc2F0aW9uSWQpfSkpLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOlwiQzVTdXhcIn0sdm9pZCAwLEMmJigwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOlwiQmtZR1BcIn0sdm9pZCAwLGwpLCgwLHEuanN4KShcImlucHV0XCIse2Rpcjp5LHJlZjplPT57Uy5jdXJyZW50PWUsdCYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dChlKTp0LmN1cnJlbnQ9ZSl9LGF1dG9Gb2N1czpzLGNsYXNzTmFtZTpcImRtc2RpXCIsdHlwZTpcInRleHRcIixyb2xlOlwic2VhcmNoYm94XCIsdmFsdWU6bixvbkNoYW5nZTplPT5yKGUudGFyZ2V0LnZhbHVlKSxwbGFjZWhvbGRlcjpjLG9uS2V5RG93bjplPT57bSYmKG58fFwiQmFja3NwYWNlXCIhPT1lLmNvZGUmJlwiQXJyb3dMZWZ0XCIhPT1lLmNvZGV8fChfKG0ubGVuZ3RoLTEpLEkuY3VycmVudD8uZm9jdXMoKSxlLnN0b3BQcm9wYWdhdGlvbigpKSl9LG9uRm9jdXM6KCk9PnstMSE9PUUmJl8oLTEpfSxzaXplOjE1LHNwZWxsQ2hlY2s6ITEsXCJhcmlhLWtleXNob3J0Y3V0c1wiOmc/YmQoZyk6dm9pZCAwfSksYiYmKDAsby5aKShsZix7Y2xhc3NOYW1lOlwicEc4SnFcIixvbkNsaWNrOigpPT57aSYmaSgpLHIoXCJcIil9fSkpKSxUJiYoMCxvLlopKFwiYnV0dG9uXCIse3R5cGU6XCJidXR0b25cIixvbkNsaWNrOnUsY2xhc3NOYW1lOlwiUHFoQlNcIn0sdm9pZCAwLGYpXX0pfSkpO2JmLmRpc3BsYXlOYW1lPVwiU2VhcmNoXCIsdi5aLHYuWix2Llosdi5aLHYuWixuKDkxMTMyKTt2YXIgVGY9big2MTk5Mik7Y29uc3QgQ2Y9e3VzZXI6XCJ3X1VaN1wifTtmdW5jdGlvbiBBZihlKXtsZXR7dXNlcjp0LG9uQ2xpY2s6bixjb252ZXJzYXRpb25JZDpyfT1lO2NvbnN0IGk9dC51c2VyX2lkLGE9R2wocikuZ2V0KGkpPz9cImluaGVyaXRcIjtyZXR1cm4oMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpDZi51c2VyLG9uQ2xpY2s6KCk9PntuKHQpfX0sdm9pZCAwLCgwLG8uWikoQnUse3VzZXJJZDppLHNpemU6MzIsY29udmVyc2F0aW9uSWQ6cn0pLCgwLG8uWikoXCJkaXZcIix7fSx2b2lkIDAsKDAsby5aKShcImRpdlwiLHt9LHZvaWQgMCx0LmRpc3BsYXlfbmFtZXx8dC5kaXNwbGF5KSwoMCxvLlopKFwiZGl2XCIse3N0eWxlOntjb2xvcjphfX0sdm9pZCAwLHQubXV0YWJsZV91c2VybmFtZSkpKX1jb25zdCBSZj17bWVudGlvbnM6XCJFSDBxbVwiLG1lbnRpb25zV3JhcHBlcjpcIlBrbjFhXCJ9O2Z1bmN0aW9uIGtmKGUpe2xldHt1c2Vyczp0LG9uU2VsZWN0Om4sY29udmVyc2F0aW9uSWQ6cn09ZTtyZXR1cm4gMD09PXQubGVuZ3RoP251bGw6KDAsby5aKShmZCx7fSx2b2lkIDAsKDAsby5aKSh4cy5kaXYse2luaXRpYWw6e29wYWNpdHk6MH0sYW5pbWF0ZTp7b3BhY2l0eToxfSxleGl0OntvcGFjaXR5OjB9LGNsYXNzTmFtZTpSZi5tZW50aW9uc1dyYXBwZXJ9LHZvaWQgMCwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpSZi5tZW50aW9uc30sdm9pZCAwLHQubWFwKChlPT4oMCxvLlopKEFmLHtjb252ZXJzYXRpb25JZDpyLG9uQ2xpY2s6bix1c2VyOmV9LCgwLHouTWMpKGUudXNlcl9pZCkpKSkpKSl9Y29uc3QgT2Y9e2NvbXBvc2VyOlwiZXV5SWJcIixpbnB1dFdyYXBwZXI6XCJzaE1PM1wiLGJvcmRlck91dGxpbmVJbnB1dDpcIkVRSmlfXCIscHJpdmFjeTpcInJrNkpBXCIsaW5wdXRCYXI6XCJmQ21VblwiLHJpZ2h0Q29udGVudDpcIklIVl90XCIsZHJhZ0FuZERyb3BUZXh0OlwiTlRZVXpcIixzZW5kQnRuOlwidjR6ZnJcIixjb21wb3NlckJhcjpcImpoMTNoXCIsZW1vamlQaWNrZXJJY29uOlwiTllvc0pcIix1cGxvYWRJbWFnZUljb246XCJlbEFaaFwiLHNlbmRJY29uOlwiemZRcjZcIn07bGV0IE5mPWZ1bmN0aW9uKGUpe3JldHVybiBlLkNvbnRleHRNZW51PVwiQ29udGV4dE1lbnVcIixlLkFjdGlvbk1lbnU9XCJBY3Rpb25NZW51XCIsZS5MaWdodEJveD1cIkxpZ2h0Qm94XCIsZX0oe30pO2Z1bmN0aW9uIHdmKGUsdCl7YigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6YG1lc3NhZ2VfYWN0aW9uXyR7ZX1gLGRpbWVuc2lvbnM6e2FjdGlvbl9vcmlnaW46dH19KX1mdW5jdGlvbiBEZigpe2NvbnN0IGU9KDAsZC51c2VSZWYpKCEwKTtyZXR1cm4oMCxkLnVzZUVmZmVjdCkoKCgpPT4oZS5jdXJyZW50PSEwLCgpPT57ZS5jdXJyZW50PSExfSkpLFtdKSxlfXZhciBQZixNZjshZnVuY3Rpb24oZSl7ZS5mb3JtYXREYXRlPVwiRm9ybWF0dGVkRGF0ZVwiLGUuZm9ybWF0VGltZT1cIkZvcm1hdHRlZFRpbWVcIixlLmZvcm1hdE51bWJlcj1cIkZvcm1hdHRlZE51bWJlclwiLGUuZm9ybWF0TGlzdD1cIkZvcm1hdHRlZExpc3RcIixlLmZvcm1hdERpc3BsYXlOYW1lPVwiRm9ybWF0dGVkRGlzcGxheU5hbWVcIn0oUGZ8fChQZj17fSkpLGZ1bmN0aW9uKGUpe2UuZm9ybWF0RGF0ZT1cIkZvcm1hdHRlZERhdGVQYXJ0c1wiLGUuZm9ybWF0VGltZT1cIkZvcm1hdHRlZFRpbWVQYXJ0c1wiLGUuZm9ybWF0TnVtYmVyPVwiRm9ybWF0dGVkTnVtYmVyUGFydHNcIixlLmZvcm1hdExpc3Q9XCJGb3JtYXR0ZWRMaXN0UGFydHNcIn0oTWZ8fChNZj17fSkpO3ZhciBMZj1mdW5jdGlvbihlKXt2YXIgdD0oMCxtZS5aKSgpLG49ZS52YWx1ZSxyPWUuY2hpbGRyZW4saT0oMCxXcy5fX3Jlc3QpKGUsW1widmFsdWVcIixcImNoaWxkcmVuXCJdKTtyZXR1cm4gcih0LmZvcm1hdE51bWJlclRvUGFydHMobixpKSl9O2Z1bmN0aW9uIFVmKGUpe3ZhciB0PWZ1bmN0aW9uKHQpe3ZhciBuPSgwLG1lLlopKCkscj10LnZhbHVlLGk9dC5jaGlsZHJlbixvPSgwLFdzLl9fcmVzdCkodCxbXCJ2YWx1ZVwiLFwiY2hpbGRyZW5cIl0pLGE9XCJzdHJpbmdcIj09dHlwZW9mIHI/bmV3IERhdGUocnx8MCk6cjtyZXR1cm4gaShcImZvcm1hdERhdGVcIj09PWU/bi5mb3JtYXREYXRlVG9QYXJ0cyhhLG8pOm4uZm9ybWF0VGltZVRvUGFydHMoYSxvKSl9O3JldHVybiB0LmRpc3BsYXlOYW1lPU1mW2VdLHR9ZnVuY3Rpb24geGYoZSl7dmFyIHQ9ZnVuY3Rpb24odCl7dmFyIG49KDAsbWUuWikoKSxyPXQudmFsdWUsaT10LmNoaWxkcmVuLG89KDAsV3MuX19yZXN0KSh0LFtcInZhbHVlXCIsXCJjaGlsZHJlblwiXSksYT1uW2VdKHIsbyk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgaSlyZXR1cm4gaShhKTt2YXIgcz1uLnRleHRDb21wb25lbnR8fGQuRnJhZ21lbnQ7cmV0dXJuIGQuY3JlYXRlRWxlbWVudChzLG51bGwsYSl9O3JldHVybiB0LmRpc3BsYXlOYW1lPVBmW2VdLHR9TGYuZGlzcGxheU5hbWU9XCJGb3JtYXR0ZWROdW1iZXJQYXJ0c1wiLExmLmRpc3BsYXlOYW1lPVwiRm9ybWF0dGVkTnVtYmVyUGFydHNcIjt2YXIgRmYsQmYsVmY9eGYoXCJmb3JtYXREYXRlXCIpLEdmPSh4ZihcImZvcm1hdFRpbWVcIikseGYoXCJmb3JtYXROdW1iZXJcIikseGYoXCJmb3JtYXRMaXN0XCIpKTtmdW5jdGlvbiBIZigpe3JldHVybiBIZj1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LEhmLmFwcGx5KHRoaXMsYXJndW1lbnRzKX14ZihcImZvcm1hdERpc3BsYXlOYW1lXCIpLFVmKFwiZm9ybWF0RGF0ZVwiKSxVZihcImZvcm1hdFRpbWVcIik7Y29uc3QgV2Y9ZT0+ZC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsSGYoe3dpZHRoOjYwLGhlaWdodDo2NSx2aWV3Qm94OlwiMCAwIDYwIDY1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIseG1sbnNYbGluazpcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIn0sZSksRmZ8fChGZj1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2ZpbGw6XCJ1cmwoI2M3YjkyY2IwNzI4ODMyZGM0MzY4YjVjYTAwNjFlOTMzY2FhOTUxM2JfX2EpXCIsZDpcIk0wIDBoNjB2NjVIMHpcIn0pKSxCZnx8KEJmPWQuY3JlYXRlRWxlbWVudChcImRlZnNcIixudWxsLGQuY3JlYXRlRWxlbWVudChcInBhdHRlcm5cIix7aWQ6XCJjN2I5MmNiMDcyODgzMmRjNDM2OGI1Y2EwMDYxZTkzM2NhYTk1MTNiX19hXCIscGF0dGVybkNvbnRlbnRVbml0czpcIm9iamVjdEJvdW5kaW5nQm94XCIsd2lkdGg6MSxoZWlnaHQ6MX0sZC5jcmVhdGVFbGVtZW50KFwidXNlXCIse3hsaW5rSHJlZjpcIiNjN2I5MmNiMDcyODgzMmRjNDM2OGI1Y2EwMDYxZTkzM2NhYTk1MTNiX19iXCIsdHJhbnNmb3JtOlwic2NhbGUoLjAwNDE3IC4wMDM4NSlcIn0pKSxkLmNyZWF0ZUVsZW1lbnQoXCJpbWFnZVwiLHtpZDpcImM3YjkyY2IwNzI4ODMyZGM0MzY4YjVjYTAwNjFlOTMzY2FhOTUxM2JfX2JcIix3aWR0aDoyNDAsaGVpZ2h0OjI2MCx4bGlua0hyZWY6XCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVBBQUFBRUVDQVlBQUFBV0lia3BBQUJRcDBsRVFWUjRBZXpWYTB4VTZSa0g4Sm9ZMC9SVG16WnB2L1ZUbTdhSjZZZktiV0NHQVpFcUZrVmE3Wnd6dzBYeGZrT3RsMXJyL1lJSXc4d3dNNEREUll2RzJEV2EzYmliamF5N1hyTFpOWEhkM2F6cmdxNklEc2hGeVFiSkptYUYrT3p6Y0REaUNNTU1ERG1BLzEveWo1dGw1ajN2ZWQvM1ArOVBBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE5QmE5NHRUUERWYjNuK010amhreGlpYzFWdlhPajdMNWJGRlpsYm5CRW0zelpjdG41VHNHaXpOR3hwQ3g5SDRmZ0VrbFB5ZC9pakhiKzFzdTJ0eG9wV3dUeHgxbDhWNklVc3Zyb3kyZTdobVdNb3BrWkV3Wlc1NGh6NUpueXJObERqSVh2ZGNEWU55U2dwaVY0ajhhbE5Kc0xvNmR5M1FsU2lsN0V1bVNqalF5bHhpTDUzSzA0ajBTcDVSbXhkczh2MGVwNFkzVlYxalYvaGN1Njc5akZmZjVhSXUzVSsrU2huOWplenU1MU9maUZQY1drMUl5WGU4MUJSaFRNNWY3Zm1aUVhKbXhGdmZ4R0l1N2syOVpta3lKVVR6dGZEc2ZTMVRzOHhia0hQaXAzdXNOTUdvcFdmWnBDWXBqUGgvc2szeGJkWTlsZ2VKeXk4bXd0SW9TVnRZR1RmeXltcjdQam1tWitWMzVuVS9JdThzYTZMMFBBR0V4cXM0L0dDd3VlNnlsdElWdld4cFZWQThaMTlSUzhzNTNLTlZ4aGViV1hLZjVaMjlUWmwwektkZWZrSExyR1ZudlBDZmJYUW9yOGgzNXJvd2hZOG1ZTXJZOFE1NGx6NVJuajNiK3NZcTdsZGZDWWJTNXArdTlMd0JEU3N0elRrMVU3SXZpRk5mbEVSOTJMa3ppeHRPVVduS0o1cDIrU1lzK2ZrVFcrcDZ3eXhtcHlMTmxEaklYbVpQTUxYWVVwVFlvcmsrTlNvbUtXeG5HRFpQcStFVzg2dG9jWjNFMTg0MUw0U1RPNmlIejFqT1U1cnRHLzdqWVF1bzN6M1FyYTZpUk9jcGNaYzR5ZDNtSHNOOWJLZTB3S283L3lOcnB2WC93aGpLcEpiK01WNXlIK0ZicDRsQ29TVmhXU1g4dHJLTUY1NytkRUlVTnBkRHlMcWxGSDVDUjN5MmN0ZUIwRzlUU3cyYlYvaXU5OXhQZUVQM0YzZDkzK0VJOHFNYkZGVFRiZnBIK1h1Y242NTNudXBkdXJDTHZKcmZ6Yk9kSGZlOGNScEdmeXBySzJ1cTl2ekJKcFdUWnB4bFY1eFkrYUYzeGZPaUdqYldVWnU0NFN4bm5Hc2pXMEJ1eGt1UTJFcTI0UjdUdVB0SG1CMFRiL0VRN21vbDJjWGEzRU8zbDdBdkl3WWRFZS9yL0pwLzVMMzkydTEvN2ZqNlBzNnFKS0kvSHpJcGtvVy8zVXViNXU1U3k2MjFlaXhEV3F5L09McVBxMmk1cnJmZCt3eVNTYUhVdVNGQ2NUUndhTHFaY0w2VTVMOUUvcjMwWHNUS3M1SUp0OVdzRlBNUmxMT0FjNWh4cEpTb0tTRW5icTNGd1N0dGZqWWZqSFpEeURxS0tEdTFmSjMrK2dNZlp5U1hmOUVEN3NSanQvQzNYdXlqTmM1Vk1TeW9vbERXVXRVNVM3Wmw2N3p0TWNHYlYvanUrZFMrRWN1ak1xNm9vL2ZobnBONzZJV0xGWGRLbzNaWlMyb0VwNkU4b0JYWU9VbUR2RUFXV0hPVlVQZ3BJaHphMnpHVk4wOGh2YW10OUQ4MDc4UVdaVjFlSFZHUlplOWtEdmM4QlREQnBlYzZwaVlwOW0wbDFQRFVwRGdxV3BEWFZsUEgvcjhoMnV6ZGl4WlZJU2FRd0J4OE9YdURDMXRjTFhEeFlnZHZESzdBdm9MeFZuSnFBVkQvU25yWE5UNVEzZ2h2YWV1YzVaWno1bXBMWEhxUGgxbGYyUVBaQzlrVHZjd0VUUUpKYS9DYytNRGRNU2drRlM5SUtIMldjK2pMaXhYMlJiTDU5OTdTTXZzQ3VnUEs2Qnlsd1JaZ0YvdC9qbDZsOXJJMjdnMzlzbGpTT29NaHYzYVRrMVZVMDNIckxuc2plNkgwK1lKekt6OG1md2dka3ZVa3RlUnJzSUpsejNmUzN5ay9JV3Q4ekpzVWRtRnd1eEliN1JOdjlXcGtQQkJTNEtDRDJ0c2dYdURxZ3ZNY0NDbnlpUHljN3RUTExNemMrSU1vS3A4Z052WlJlZlkwU0YzdURGNW4zaHZkb2creVYzdWNGeHBGVWErR3ZUYXJqUGY2VnAyQ1pVL0F1V1c1MGozbHhoNHVVSTZkUkszZ2VaL2s5b2xWTlJHdnZhNFhmNnRkdXhOMWMrZ0l1dHFQdFpZRTlBZVV0Q3lodzVVZ0xQT0MvNWY4ZjdkRG1rQnZHcmF4OC9qM05LWHlmaHRzSHMycXZtMlV0K28zZTV3YkdnV1NiM1p5a0ZyVnlhS2lrckt1aWhSZjl1aGQzdExlNWxQeGZmRHZ1NUdJZGZxamR4dUVXK1Bqam9XOWcrYmQyd04vazh6NGVjMitMOWtNVDZsd1hmdGhNczlaWFU3QTlTVmFMMm1kWkMxUDFQaitnSXo0RUcva3c5QTU1VUd6RmxGNStsYXoxUGJvWGNLeHVjcm05TjNPcDkzSEpuRzJ2RjdnbVNJRnJCN21CQXd2OElqN09mdjdSV0hvdnRMbFpHM29wdmVKcTN4NEVLWEl2NytHZS9KejhLWHFmSlFqZmoreVZDVmhWMWRySEg1VDA2alhOYTVtbE43WE16eWZOTVVzemxldUVndUxJZENZNG9Jd3FpZ2lDZ3FpSWdQT1FoaE41SzdQODZpdkx5cUU1Qnd4UkhCZzNJcFBpZ0paR2lvRC9iNjE5UEhEMjJmdU1ETXVCOTNsK1QwOENhNisxM3Y5dnZWYVhnenltSlduOEhtTXYvT2pBYlhEKzhSSnp5Um9hcjF6TmxJNGhzbTIrWW9IQWVoUDRmVDJCdFE5Q0ltRXhlU3pVWms1azJvUFJzN1libmNhRUw0YTdyVzdOT2xlTjFRQTFXckh5eFZHeStKU1JzZ1FZd2lGK1ArVHA5NWpMeEJvNm9RUHlnR2dpM09ZU2pZaTd6SnpBaGdUbUpTWVB3N3RrdmRBQ3pUZE1UbVBTQzhkVjM4Rll6d2pwbytUeFhWam5xN0hxc1VpVGU0K1d4UlVSZ2FGbEpBOE5RRHhHZTZ6QmxMMW5tWXZ6c0JKSVpGNUdaTjcrUUdSOWVUL1FrVnRYNEIxNkFyOTNwWVpWbHpTUGhEbmZuL3JaZWI1SHV2MFQ5akxoNmhoRi9GRFdPV3VzZXFnUml0V2pTSk52RzJxKy9jeHRjRGx5bGJra2p3SjBhczdOMThoSEorNkgxOFVDSjEwMUxmQ1dCNU9ZRWxrSWVPU2EvcmJiOFZMWUIrMHdLREdoakR6U1Uxam5yYkhxc01iSVZrd2pqUzAzMUhUSHFMMXdQM3VIdVJpUEl0NUV1aVVQcHJJNUFtODFJREJsNVdYenBySHNmRGtjWTc0d0puSGxHSG44Yk5hNWE2dzZxTEh5T044eDhqalMwRGhJNGJUcEI4aXo3ek1YNFZGSFJRZ3RBRGFWYUFUZXFTUHdkak1GM3ZDQThBTE5sRGY2elJ4Z1V1SXZNTlJYeW1oRlFnVHIvRFZXTFdxY0lpN0lYcjRDa2lqak1HVjNLdlBnUDQ3TXVRaXN1MnhhNE0wNjhtN1NFWml5ckJqd3lqWDlyYWxmcE1OZWxRQkRmUjRyajQxbG5jUEdzcUxHR3BGM3JPY3FPSCtkelR6b2p6dFU1QTJYYStTbEpGNHhUK0MxNU84U0xnSCtlYWEvNDNJb0gvYmVhdzFLUEU0ZUc4ODZqNDFsUVRrb1k0UEc4cSt2Qk9yVmNEMWN3RHpjVHhMejhvR05KV0tCM3pVaDhCckNha0p3dnVsdnVCNjlpbkYrRzJHbzcrTWFKL0dqVVk2SzJKa084bGhJNHJNT3JyK1dNQS8wazRpS0VGRklwcTRCZ1RmcXlMdGVSMkF0Q3dvQXBZbHZ1Q2Zmd1BoWm0yR28vMFRpeGF6ejJWaEdhcFFzUVdGVVh2Sktzdzd5azQ1WExoQlRER3l4UUdBNmhWZGVBcUxJQTZES05iNitMUFVXSnN4Nno2REVEb29WODFqbnRMRWt5a0d4Zkp5amZQazlBdlRSeUh1TmVYZ2JxV0hXUlkyY1dvRTM2TEN1UkRoOXRRSlRsaFFCSG1aSnZBV1NXWkF2cnh3clgrSE9PcStOcFZOT3lwZ2g0eFhMeWdnUTRidm1vWnE4OHF3cVREdCttLzh2NjczVUZlNW43OEg1UkJrVU9aYjlIWjJta1lXV0NheVZXRzFDWWptUjJHbjJKa2htUXJHczNFRVphOGM2dDQxRmlqU2ptNE1pNXFwa283d1M0SGFraEhuQXRUaDhWWUkrQzVQUmM5NFJERnAxbHZsKzZnSTNJcS8yVEFOaVVqSDV0MXNXcnhHUXB4RlRLL0RheTBLQlYxMFNDcnlpMkR5SjNYKy9pUWtCNnlVbG5xQlkrdWRZZVd3UDF2bDlvdXMvOGpYL0lzM0lrbXlRT2c2dTN4Y3lEN2lXa1IvbDh5SFh4ZTEwT2ZOOTFSYkhiNjRLenZSNjJERTRIUzYxZUIwUEl1UGlJdE1DSnp3UW1CSnRoc1J1eDY1ai9QU1ZCaVp4VE80azViTG5XT2Y0aVN3SDczVzJwQWtISi9DdnFaRHhxdVZ3K1NhYmViaTFqUDZrVUNUdjY2SEhJTSt1WXI2MzJqTHBsejlGWitzMS95Z20vZnlIVmVzRlhTVEM2Z204VWtMZzJBZFFpVDFOU0V3ZmN2cWdTMlhGVVJGem1HYUpkWjZmdUpxZ2lGay9VYkVFRXhWTFJVejcrQ1R6WUdzWjkrVWw5QXc1SWdyNU8rOW1NdDliWFNEUHZvKytrU2RFNStzZGZoeFRqdDZ5YXMzcEY0RGx4ZElDeHhQaWRBU21SQllDS2hOcnV1NUxsOHdLeFVteGRDM3JQRDlSTlVteHhKMEFLWnpmKzU1NXFLdmwzWGRaVWw3NmIxT08zbWErdjdwaXpQOFdpYzlJSlk2d1htSXE1Q0lpNW1vSmdWZm9DVXhsRHkwd3ZhWnowaEVZeXMxNHhmS3BySFA5Uk5SWStZclh5SVdYU1RWaGFzd25VT1N3RDdTeHlVc1p0aldIK2Y3cWRBcG5WV0hBc2xUREVoKzVaZlhhOC9LQkJCTUN4eENXRmdIQithYlhtN2JxUzBNUzMzWlNMSHVaZGI0ZjYzS1F4N1NjcUZpYVBwbGN1RDVUNW02RzR2eGQ1bUhtSjlLblJRYmw3Ujk5RXJMMFN1WjdyR3VtSHJ1Tlh2T1BTa3U4NERnbS9mU0gxV3NINUduRXBRTEhGUnNXZUFraE1NL0VZNU54RDFOQ3QwRXlROHJvMUZISzFjMVk1L3l4cmNuSzZNMVRsSXVoejlRWksrRCsrdzNtSWFiVGY4Ui9MMGlHbU5JcjVDZ20vM2FML1Q3cjYrSGFXMlQ0N0VUdThRZXVXYjMyOUFzYVdVMEpIRjJrK1YyakVxZitnV2wrOFpESzBpVGxrbFdzYy81WTFoUlY5RVNwQzZlNGZaM0pQTHl5ekNvTTJaUnBNTUNVY1Y5Y1lyN1ArbjdBaG00eGNnY2hSekRtMHlLcjExZm5Bb3VMeEFJdks2b1JtTEtvRUZDWldNdnRBSWVwSHRIaVlhQ01xaUtUZURqcnZEOVdKZmRZMkc2YU1xcUVBSDFjTm4vSFBMZ3VxWGN4Y01WcG8vTGFKWEhNOTlrZ0QxbEdKZDZNVHpONkYwUGZ5K0lmUEd2Vzl5QVNSeFlhRjVoTzRaQjgwMnU1Smg2RVZLWUlGeWJMbzF1eHp2MWpVeTdLeUErbEx0bzVMQkdLckVxbWdYWDZ2aFI5RmlZYkRleVFqUmxrT3QxbkxsZEQ0WGIySHZvdk9XbjBUZ2JHbm9Kenl0OVdyVStuYThRRGlaY1hhK1RWRjVoT2FyODhFMnZsVk1FNWZLc2hpVGV3enYxalVYSlYrSGpKQy9hS2dlekVOYWFUeHU3OVhQUU1PV0kwcUc5dnlJQTg2OG1SdDNxNm5TNDNLWEh2QmNjeDdzdkxSQ1RMMTFjU3dndU1DMHgvVGllMnNYWGtKRU0wUzZMaG9JeXFJcnpET3YrUGRFMlFMMjNwckl5OFFDWXdoQ3lDNis1a1p1R2MvT3NmR0xBczFXZzRLY08yWlVPZS9lVEpxenVKQjhhZE5ubFBiNjlQaDh1cE8xWkpIRlpnV09CRlpFclB6VGZqc1NGWkVtY3Nra2djZWRiQmU1MHRhdzhlMlNJWEdPdXFYQWdSRVlsV3ZkcDFFY2poMjNKTVRsMzY4MUVmNXpQWjQ4T0dMTDBTYjI5SU55a3huY2FqUHkyRVBNdnlCNDlLdkVSUDRNaENqY0FVTHhOVG1QYUpaa29xYSs2cWlGRFdIanlTNWF5TTZrb3VzRnovUXQzVVVaQW5YMjNZRUdaVVl2U2VmUFFPUDI1V0VKME9sVElYNTZHQ0NESnFkNzdwaDQvUWYwa0tITCs1YXRIalJ5ZHhhSUZoZ1lQTm1NSTBVelJiRWhMZjl2R2MyNUcxRDQ5Y3VTc2pQcE44RVJNUE51akVIYk8zQ0gwV25qQVpQRTM0VG1KcThsL3NoWGxJR2YvdFZmNkJNK2N1MzRnNXhZdHM3a1JXNmt4aUt2QWlIWUhObXNJRW1pMnB6RGtySTdlejl1R1JLbkpoNzdpcklpQmk5a3JJTXl2cVBXalRUcFRCTGlrWHI0ZVpGemJLOEswNWtLVlhNcGZrWWNmbDVCMjhtWkJtOXIzMmkwckI2RThMK2NmVTFOb3FRamlSZUxIZUJLYk12bWpHRk02OHgyZE1JbnRWS2xWb1g5WmVQREpGTHV4WEtZSGwrOUxxTFZpeTlBbzRmRjJDdDFhZFJjK1FJMllIckg5MENpWitmNE81R0k4Uzh1ejdzUCtzMk94cFRIazk5QmplMlp3SnArOUwrYjgzdExZbm1iUUxDOFVUZUg2Qm1UbllkMVpLWUxpcEZuN0Qyb3RIb3NoRmpaV3B3aUVpZkFzVU9YVWJKSGZ5cWp0K2N4VkRObVh3QVRFM1RKUStDMDlnelA4V1FaNVZ4VnlJUnhXM00vZGd0ek1YdmVZZnRmRHVrekY4ZXc0bS9uQkQ4djdWUk9JRkJVS0JJd3JOM0JmSm1HelJWa2hsMEZrVk5ZeTFIdzk5a1lzNkxsY3RnRDZLbnk3V1BqU2tPVk9ULytKZmZ6cHBlNFZZRmh4S3Y4VXBHRVArWHBaUnlWeUF4d1hYMDNmeG4vY3ZXRFNScXlkem1HWXlPM3g5aFY5SGR4S0hQWkNZVHVUd0FndjI5SE1CcERKSUp2RVByUDE0cUl0T1g2bUxreS9kV2FzcE8vNjdheGkyTFllWHo5S0E4Q0VoMDVsT2FhZkRwZVFSdU04ODhJOHI5RkVjdDY4RWJ5YWNRYzhReS90RS8rYU4yRk1ZOFVFZUp2NTRFNHJNS2dUa0FhRkVYdnBmaS9ZU3MwdFM0c1lwYktSa0h1R0hsUjVoMEVWQmtQOWFaTG00NXl2eFpseWFkVUVnREZoNkVzTVNzK0g0elZYSTBpdVloL3RKZzA1VCs4K0xNV1JqQnZvdU9tSDF3enNzTWNlNngrVElKU2pVNGREUG85d2ovRHZXbmp5VVJhWnZQLzNMNGk4c0pzbnExN3h2cE9uRzk0dEtJUzkrR29hVENXMy9XVEgvY3J1UnFjMDZ3STNva0VPRVRyMkRDWWRLTVdwUEFZWnV5Y0xBRmFmUloyR3l5ZjRPMlpodS9YZmpkME1pazFXZUh2TmZaKzNMUTFkS2p3VzdQRHhDb1l1S29QejVvdFVOa0dkVllmS1JXNWh3K0RwcC9qVWVwKzlMTWZYWWJiaWwzWU1zczVKOU9CdXBGZTduSytCNnFoeFRhSjhmOUpqdjh3ODNNUFY0R1MrL3RXdkxmaXVHZmlZMXVReExZdTNMUTFXdXFrWFBrWXU1UTE0MjZLSmF0Smw1UUJwNXN2Rll0ZzM2dWFSWnBabGw3YzFEVStSU3d2VXZpYUxjbDhhOGdZMDg0UnpNZ2xRMkZSNExRbGg3ODFCVXhIUy9KdVJGeXhXOWNyT1dRNUZUeGI2QmpUelo1SkFwUEM5QmFncG5CWGtFMmJEMmgzbTVLUmVPazNyaFZEc1BzbStlRWVSWkZYRDhMQmx2Um01QXR5bWVhTjkzRUZxMWV4Rk5uM29LNUZqVjBQOXY5VnhIL3VldlRsSHp2Ky80K1FuKzcxbWZvYTZRblNuRDZLUUQ2QjhjZzg1anArSFpIbjNSb3UxenNMR3hFZHlGYllzV2FQTkNWM1I0eXc0OUZETXhaTVVPVENJVGp2WCtUYUg2OEdmSktTeFRoZHV4OW9kNWVYbUc3UEgybkFjQlh2T2hUTDNKdkhGUzJPLytHZDJtcXRHOGRWdEJPQzJGL24xM1oyK00zWHVNK1ptc2VzQ3k3K09kbGJ2d2I3dnhhTnFzZWEzdW9uV25ydWpsRzRaSmgzT1luMHNTOGtCNWU0ZENQNmRFNGtUVy9qQXRKK1h5TmtUZ08vb1hvMTYrZzMzVDlCaTVkVCtlNy90MnJZSnFpQmZmSGduNy8zN1AvSXhtaVp0eEQ0T2p0K0RwamwzcS9CNmEyTnFpaTcwem5MNDZ5L3ljK3FoamQ0b0VKdG05NGFDTWI4N2FJMmJsNFJIcUxacStCT1ZYYWN3YnBtWGkvbk40WWVDd2VoRlhuNDdEeHBFcHhERS9zeUZHSngxRW15N2Q2djBlYkd4czBHMktKMXlTcnpFL2N6VmZuNEZVVnVXcUJVNnNQV0pXM3A3QkIyZDRCa01YYjU4SUtESXIyVGNzcXhKOVowZWo2VlBOaklhdFZhdFdzTGNmZy9uejUySGJ0a1RzMzc4UFAvNTR1QnI2Ly9UZjZjL3A3OUhmTjdiZVU4MWJZbURZS2loeTdyTy9nd2U0bmYwTDNTZDc4V0laMjN1SERoMHd6WGtxRmtkSDRZTVAzc2VCQTk4STd1TC8vdTh6dkx0NUkrYk9EY0t3NGNQUW9rVUxvK3MxYjlNV3c5ZnVZWDUrbnN3S1BwdjZlVlY3aE94azdSR1RtcUNJK2RjTXo3bjNmRHpuUUJmMW1vK1pOOHZseERXOE9HaUV3V0MxYk5rU2FpOVBIRHA4QUJVVmR3QlVtQTM5L1lNSHY0V0hwOHBvZ0R1UGNJSnI2azNtZHpIeFFEcmF2dHpENEQ3YnQyK1BzQVdoU0RtWmJORTlVTzdlL1l0LzRKUXFCWm8yYldyd0c5MWRwa09XWHM3OExqeFgvaGY2ZVozdUdYd3RZcnBmRTlZK05YZ1JlV1g2bDBGUkhjaGdIdGhXSGJ0SUJxbE5tOWFJaVZtSzB0SXJGb2RWQ3JyTzBxWFIvTHBTMzN1bWF3OU0vaW1QMlYyTS9laG4vS04xVzhtOXZkVDVKZXpZc1JYbDVXVjFjaGNYTCtiQ3o5OFh0cmEya3Q5N3Z2OWd1UHhleWpRYnlxL1RJSlZaSXZGUTFqNDFlSGw3ekV2U3Y0Z1pmaEZRWkZVeWE1RGpGNmxvMGJhZFpJRFVYaDY0ZHUxeW5ZUlZuNUlyeFpESjNLV24vZk12WXRMQmRLaTRLcU40V0ltaDlleDNIb0p0ODVhaS9UUnIxZ3lSVVl0dzU4N3Rlcm1MOVBRenNQdVBuZVJkL092Vm5uQStYc0pPNFBRNzhKa2VJaEtZREtNbHJIMXE4QXJ3bkZYczV4a0VYYndUa3BnMXgybi9HVWw1bjMyMkhiNzg4dk42Q2FzK2UvZCtRcVp4RzlFZS92bENKemova0EwMVZ5NkpGM2UzVnFoNWF0WnorRUJhM2k1ZHV5QTE5ZmQ2djRlcXFuS3NXcDBnT1kzYmRlOU5KdkYxWmpueFhyb0YrcmtOOEp4OWpMVlBEVnBCWG9FOS9EMW5ReCtQdlVlWk5HWHFUd1g4cE5NUFM4OWVQY0Z4V1EwaXI1Yk1yUE40NVpXWFJYdDVwbXQzS0U0VXdwdjdHOU9yS2F0ai9zYVViMCtpZWF2V291L2IyUTNISDM5Y2I5QzcrUEhIdzJqYjloblJYcDdyUFJEdTU4cVlaRVc5K3lkUmJvbkFGWUhlUWExWWU5VmdOVXNkNkNNbHNQSmthWU0xUXNsekg3SnpmNkZkano2aWtMd3hjRUNEQjFiTDFhdVg4RnJQMTBSNzZqaklEajVaTitETDNhb1hQRS9rNGVtT25VWGZkWFIwUUhsNUdaTzdPSGMrRGM4LzMxNjBwMWNjWGFETXFZU0s5RkJaVGYzblJuWDhNcVN5TzFNOTA1NjFWdzFXZ2VwWjJ3STBMMWMxdm5PWDFKdWtGTnBvRlZmRjQ4RlRDVSt1QXQyY0ZKS1RsMHJFSXJCYUNncnkwS1ZyRjlIZUJ2alBoejkzczg3eHk3bUJyaU1jUk44Yk92UWRsSlg5eWZRdXpweE54YlBQdGhQdGJYRGtHdExEZTN3ZnRkQythdnRNcVpIN2ZwM2x5bWZXWXVqbmx3eWw1YXk5YXJDYXBaNlpRVjRzNkRKajdhNDZFbFVzcVlaN1VIUGxQRjdjWFo0UjZ6NFdUN21PSFZGVW5NODBzRnJPcDU5Qm16WnRCUHRyMHFRSlhEOC9oRm5jOVRwbFpPeGEwVjEwNzk0ZE4yNWNaWDRQbEdQSGZrUExsaTBFKzdOdDFnS1Q5NmVRWHQ1NWdLYXZhaDdhNjNzQ3dRM0xiVm5lWnF4T2duNSsvZFZCaDFsNzFTQVY2QjNVaXJ4V0Zmb1hvUDcwVnl0RnJTVG9TcW9WOVc1MVEybHp2Ym0vcTVuT2xVR1ZVb2dXN2RvTEF0RzhlWE1jVHo3Q1BLeTZmUFhWRjdDeHNSSHM4N251cjJGMjFpWE00YTdVQ1Q3SHpxRDUwNjBGMzNqNjZhZVJrWG1PK2ZsMTJiVnJwK2lSNmRCL01HYmszTUlNN2k4ZTJsdEtUYitsNVRaSGJFTTU5UHIwRjVIQUpOTzNJNmI3TldIdFY3MlhyM3JPWVAzRFV4UkhpL1ZrTlRaUmEwUVZTbnBISUNsRjIxZ2ZudHZ3NVc3eDlQWUlFSVZoOVpxVnpFTXF4Y3laNHIyT2lveEJNSGVwVHVqdEloZXR2MzFISXZOelN5Rlh5RVI3SGJGcUsveTRQM20wL2FYUWZtdjdyNVZiOXlHM1JHemRhYTBrV1pYSzhCeXZnQjZzL2FyM0lnY04wRDk0b0U4d2xEbVZScWFxN2tTOUk1aW9Ha2wxUmEyUjFQZEJVLzI0UHdRb2Z6MlBwazgxRTRSZzBPQzNVRlZWemp5Z1V0eTZkUk12ZFg1SnNOOVd6N1ZIOExsTXpPY0tKTWhIcUJIb3o3Vy82M1A0RnpTeHRSV3NQWExVU055L2Y0LzV1YVVvTGIyQzl1M2JDL2JicHNzcjhNdTZEbi91Sm85K3YvWGw5dUV4VjJ5YVBhSFVIamtWQ0NDWjFjL3hiSzlBZDlaKzFYc0ZxZjBUWjZzRG9FdkFvbmlEc3RhSStyZmVSRFV0S20xbUFNOE5CQkptY3FXWXhWMUhYNDhaZ2dEWTJOZ2c5VlFLODNBYVk4K2UzYUxKTTI3SmNvUnhlVHdMdUF0VzBjOWRPSDF0aWN6bnpxY3hQNjh4dG05UEZOMkYvWnIzK041cW1Va0lKUDJtdlE5NElMWWh1WFVudGlHeDlhZDF3S0k0Nk9kNGxqb3dnYlZmOVY3a3BUcEdKSVl1L3V2ZkYwMVZRN0thRnJXVWIxNU5NNjlodGc3K3AvUFFyR1VyUWZOZFhGMlloOUlVZENMMjd0TmJzTy8yM2Jzamd1T3drTXV4aXBCVHA5R3N4VDhFYXlwVkN1Wm5OVVZGeFIxMDY5Wk5zTzhYK2d6QUhLNkVjQVZCUEZjRmZkY1ZlMmExMkRjTWlFMmxGb3F0THpYTnJINk9pY1Rmc3ZhcjNtdU8ydSttL3NGOVAvcFdRbGJ4Vk5WZWRzMUVsUmFWTm85Q202bHBhZ25tOGx5Ry9mTFZvdGM3SlNXWmVTak5ZZGV1Sk5IZXAzKzVENUZjcGxWTVhMRkN0TjdwdEZUbTV6U0h6VnZlRmUzZDY3c2ZFTXhkNHZ1c1JkdC9UUmFNaTYwL3NmVUhoYTdVTkxQNk9aNmo5czlqN1ZlOVZyQzNmL3M1bW9NSzhOMS96SVNzd3FrNlcwOVdyYWhhU2JYUVpsTG1jY1dFSW9RUVhoa3lYTkQwdHdhOXhUeU01bEpXOWlkYXQyNHQyUDh3Zno4czRjNVp4ZjhNdHhPczljYkFONWlmMFZ4dTM3NkpWayszRXV4L2FOQWN6T2NLZUdpdmFjODF2UzhXaVQxWFIyempFMXRhNnNCREowUTVKaEpYeWIyWE5tUHRXYjFWcU5lTXdjRmV2Z2oyOHRQQkY3Ni9uRE1wYTgxVUxkR1pxb1pGRGVFS3E1c1p5dVVUTGlJNDdUeWEyTm9LbXI1NTgwYm1ZYlFFaFZJdTJQK0x2WHBoR1hmR1lxSXpVbUg3ajM4STFscXpaaFh6ODFtQ3U4eE5zUCtPZmZzaGpQUTVWRUEreVVDK2p0aUZSc1hXbmRqYXpFbEpIWmpDWVo0b3kzNkk4RmIzWU8xWnZkVmNMMzlYZW1oZGdyMzk0SnVhYjFUV3VTSlppM1ZrRll1cWhUWXpqTXZEQXU0Q2o5dk9KRUhES1VWRitYVVNwdExTSzBoTTNBdzNkMWNNSkpPc1Q1L2U2TmV2TDV5Y0ppQStmZ1Z5YzdQcjVEc2ZmL3lSWVA5Tm1qVEJrclRmRU11bFdvVGZKK0s3eU1nNFZ5ZDd6TXc4eDUvWnhkVVpkbmJEZWNhT3RjZThrR0I4KyszWHFLeThXeWZmMmIzN0ErRmRrTWQ1ZmxvYUlqZ080Vnd1RCswN3pRREZ1TmcxRTV2bXk1alVmRWF6U3pCdnVqLzA4eHprRlRpV3RXZjFWaUZlUG1INkI1NDdjeDRDVCtmeGx5TTFXYlV2cFhDcTVrdklXaU1xYlJ4dG9pNEx1UnlNQ2c4WE5QeWxsLzVkNnhDVmw1Y2hhbkVrV3Y2enBVZ0lYWm8yYlFwUFR3OWN2MTVTcSs5ZHVsUWdXdHQvZHlMaXVkOTFPSUVFSTlEZm1SZ1pJbGlqUTRjT3RiNkw3T3gwT0UxME1ub1BsSzR2ZDhHZVBSL1YrbnRTZDZIODhFTXM0cklJMlh6UEtibzVFSXN0bk5pR3ByWFVwQTZlUFU4a2NLalhERi9XbnRWYmtRbThYalNCd3haaHpxa3NQV0hOazFVamFxNUlWTm84RFZtSTVES3I2VDE1c3FEWmpvNE90UW9RbGZHTk53YVlES3d1blRwMXdybnphYlg2N3ZORU50MDFuWmVGWXlWMzNDS0d5S2NKMXFBVHNqWjcrblR2SHJSczJjS2l1M0NYdWRaNkdyL1UrZCtDTmNkRWhHSXhsNEVvZ203dkkzbXBqWXV0R1FEaWFhMHJ0VWJvSW41S3o0dGNLaEk0Mk1zdmhyVm45VmJ6dldiczFUOXdTSFFNZ2srbFYxK1F1YkpxbXlBbGFoUlBCbWxrT3FLNTh6eEx1SFBvMU90MVFiTkRRME9zRGs1WjJaOFlOUGhOaXdLck8rMXljN090L3ZidzRjTUU2NDMyVldBdDl4dldXY0Jydzk4U3JCRVVOTXZxL2V6ZnZ3L05tald6Nmk0VVNqbnUzNzluOWJlZG5DWUkxaHZnN016M1doZmFmNW9GS2JGcnBNNjJRT3A4amRSeHEwUUN6L1h5UzJUdFdiMVZxUGYwUXdUb0VwS3dFaUduenVuSW1rY3VUaXVzMUdUVmw1V0tXaU9yc0hsbnNiU2FNL2huMjJjRXpVNUsybUYxY0h4OHBsc1ZXQzE5Ky9aQlJjVWRxNzR0azdrSjFocnNNZ0VidUo4dG9uUFAveEdza1pBUVo5VmU4dk56MGFaTm0xcmR4YnIxYTZ6dVEzRHdITUZhcnc0WmhCanVOSlp4YVlRemZOKzFHUkJtNDN5MTJJYW10VEdwK2F5K3V3bjZlWjd2UGVOTDFwN1ZXNFY0K3lTTEJGNjNBYUduMGl5U05WcENWbDFSYWZOb0U3VXM1MDRobGtzVkJlZnc0UU5XaGViVTZSVFkyTmpVS3JTVTlldlhXdlg5d0VCL3dUcjlSNytEVGR5UEZ0SHUzNTBFYTJ6Ym5talZYanc5VmJXK2gyZWVlUVkzYjE2ejZ2c3JWOFlKMXVyVS9WV3M0RTd5L2FiUTNsTzBXYWdSV3l2MVdjbHBiWGhTMXdpOVlHZVNsTUMvc3ZhczNvb2NMa01rOEtiM0VKYnl1MGpZcUdwaHpaZFZJK3FwNnViUlJzWnhLVHl4NTQ2SWduTTgrYWhWb1psUnkrbGJQUzFJMkt6NWZsRFFMTUU2L1VZTnhoYnVrRVg4cTlNTGdqV1MzdDloOFQ2dVh5OUI4K2JONitRdU5yMjd3YXE3MkxGam0yQWRlcTRFN2dSUFBQZDdkZjlwRnZURnJubmtoZE5hS0xYaFNSMngrME9Sd0dSSW5XSHRXYjNWQW0vdlBBSjBDZHU2RGVFcHlUcXlwdk9YVm5PQnhtU3RFVlZYVnRvNGJSTlhjc21FNDRoTlBTd0t6ZW5USjYwS1RlY3VuV3NiMlA5bnJ6ekFvcnJTLy84a2E3S2JiRGE3djkxa04yMDNVV01zVVpPWWFGUVFRZXk5WWV5TkRwWWdLb29JU0ZHNkNCYWFWQVhwUlZGUVFaRVp1aWhZVUxpMmFEUnFWT3lpd1B1LzV3eDM1cDViaHBrQnZJbjVuK2Y1UExUaDNIUGY5LzJjcjVJTEY4NXIvZndGbk5UN2JyUStoRkU1V3RFZUFxZW5wN1JiSFNaTm5xaFRMOUM1dVFMN1VjVzQ1eXBLNlZrb2JaR2FMN2FRMVB5azVxZjB1b3drNE00em1uR3BQZXV3dGRaMDhXMGFZT01ZdHhPY1M0L3gwaFVWejZORldFOEJZZm15bGlwbFpVQ05SUGhUUmVCVmViQmRCSDc2OUdHN0RTMWkvLzY5YlJaWWI5b28yRWxsYThYNy8vMlkyQ004SWxUcmMzaDViV3kzT25UdjNyM2RCQTZrWkxDWkpvQ1M0OTc3dDh3QktYV0pVbW9mTGFSV3BmUnBjTjZmQnR4NXBya250V2NkdHRETGNWL1lLU1lVWElyejFhYXJwckw2dDhpS0dvY2FHRWdWWXJaUXgyQnpUVDV2YU9SRmhWb1B6TjI3dDlwVjRMUzBGSzNQTUdPR0NiSEhHTlBwRUVWbGFjVm52YnNUZS9qNmVtbDlEbGRYNTNhcncyZWZmYXFUd0VGQmdjUStuM3pSRFlLb0F0eHpCbVlPR0xFVlVoY3BMM2docVJWSnJWNW8xNXowL3krd1UxdzR1TWdPaXdoYnhoSldPRm1GWkdWQWpVUUVVMGN4Yjc3MUZrZWVaSzBIcHJIeEdYVHExS25kQnZkb1FaN1daekF5TWlUMm1PVXdIMktwZEszb2EvQU5zWWU5dlozVzU5aTgyYi9kNnRDM2IxK2RCTGF5c2lUMjZhbjNMV3lsamloUjlMNkFKN1ZLYkxiVVFrbGR5cEthVEdtM3ZMMUNBb1BVbm5YWWNqUmRkRytkNlNKZ2d3VXVQSWlMd3dncm5LNnR5eHJjSWl1N2dZaHRWRDVzcC9MZ2d5NmZFczBPREF6UWFXaDY5T2plYm9ONzQ4WlZyWi8vV2VmUGlEMXNBKzFoTjVYU1FqTEV0d0w2alBITUVjUWVreVpOMFBvY3VibjcyNjBPTTJmOW9GTXZSbzRrMzJQSTlMR3dnenBFOS9zdzdqbnFQWUl2OVZIbEJjK1ZHczBZbXJYV1V0b3pQd080ODR5UTJyTU9XK3RNRjlJQ0x3UTI2Mm1CUFFxendmdXNYSzJ3NnBKVlNGYlVRTlJJaGhEcUlIeGxOSUJvdHBtNXFVNURZMisvb2wyRzlydiszMm45N1B2Mzc4QnJyNzFHN09PUjZna0pWQkxzb1JJMVp0NmF1Y1FlM2JwOXJ2VlpuajU5Q08rKysyNjcxR0xYcmxpZGV0RzVTMmRpbjZuMkN5R015b1ZRR3RSejlneW9wTTRUa1ZwWWFMR1UzcFNmQnR4NVJranRXWWN0SVlIZDRyYkJwc0lzOEQ5N1ZLMndRdW1xVHRaUVRDN2R6QndJcHc1Z1Jsdk1JSnJkNzl0K09nMU5YVjBOZE9yVXFjMURHeDhmcDBQcVpmUDJDVHNXQk1uVWJxMXdqbDdEMitmV3JlczZYR1oyYmE3RGh4OTlCTStlUGRMNjJlaThmL3JUbjRpOTdNTGRJSUxhcit5NWdodzhCK3FsSnBPYW5kSjhvUlVwN1oyZjhzY1NlTDNaZ252T1p2T0JqWHZjVnZBdXpJQ0Fxb01jWVRWTDF4QWFJVmtScUpFUlZEYnN4T3lESlVHT1JMTlI4Ky9ldmFXVHhJN3IxclpwYUVlT0dnSE56YysxZnE2SHB4dXh6L3NmL2hOU3FWaElvMkswSXJva1NPQkMyYVgxZWVycjc4RC9QdjFmbTJxUm5wNmlVdzhTa3hLSWZWNTc3VFVJTEk2RFNHcXZFdFIzMUg5ZHBlYW1ORnRvdi94RTRNNHpRbXJQT213SkNld1pGUWgraGFtd3VUSmJWTmdkaExDYXljbzBNQXFUQmRGVUpvUldKOEViYjd6UjVoUkVORFkrZy9FVHh1azBzTDM3OUliYnQyL285TnhCZ3dlUkY4RU1BOGlnSW5YaWYxMC9KUGF5dExMUTZVekhqNWZCMy8vK2Q1MXE0ZVRrcU5NekVlaTg3TDArNmZZcHhGTHBtQmdxQS9jOG11NDk2cjhtVXJPRkR0RkFhTCtjT0o2ODY4M21QNVRhczQ0VStEYjNoVGRHQmlnRUxzdlVXbGl1ckpFc1dWRURtV1lxU0lNNG10NkR2eWFhUG5ic0dKMEg2TVdMcDJCdVlhYlZ3Qm9OTTRSNzkyN3I5THdMRjJweHlyRDNjOWhpQ1h1cGNKMllzM1E4c2RkNzc3MEh6NTQ5MHVsczFhZE9RSmV1WFRTdXc1dHZ2Z21CZ1FFNjE3NnBxUUUrK2U4bnhKNWo1bzJIWFZRSzNlZFUzR3NFZXdiRXBXYUU1a3FOVWpxWG5qOWhvVGRuUndrSXZPQ2UxSjUxMktKZjhKSUwvWklxNXNHbU1COElMRXlFTFVWSldndXJrRFdMYmt3bTNhQU1ucXlva2J0b2R0Tk5qYWVTTVF2V3p1VU4wdlhyUCtrOFNJams1RDNRdFpYaC9kZS8vZ1YrL2o0NHVYVjlqcjI5SGJIbm4vL3lCcVJWYjRIOVZJaE9iTi9ueER2bjd2aFluYzlYWDM4SDdPeVd3OXR2djYyMkZvYUdRNkdzdkxoTk5jL2FtOEhiMXlWMlBTUlFTUmltMzd0cE5KRmFLS1hWQ1kxbU5TQXRCTWg1eGhKZmt0cXpEbHR1Wm5QT2JqQ2JDMnk4dG5uQUZsa0NCTW5pSWF4MnZ3YkM4dE9WYVF3ajYrNlc1akhOUk95aEVtbjJ3STVqd2J3VVcrMndxazNEeENUQzRjTzVzSGF0QTB3M21RWlRwa3pHTEYxcUM2bXB5VG9uRzhPdDJ6ZmdyKys4UTV4NytPVHZJWWZheGlOWEE1alBmdG1QdkhqNkQramY1bHJjdVhNVElpTENZTEhwSW1VZGZ2aGhCbmg0dWtGVlZXV2I5MGNNSDI1TW5QdUQvNzRQU1hXN0laRkthR0VQN2pkN0JzU2tqbVZKclkzUS9yc0RnVHZQN21aenFxWDJyTU9XdTluc011NEwrd2F1aDYyeU9FeDRUYVlXd3FKMFZjbktGcGFSRlRVUk5UT0ppb2RrYWpjbWhkb0YzeHIwSVpxUHhQamw1cy90TWxnZHhmTGxTM21Kc3oxOUpSeW10clNKMVQ1emVmdG1acVpKL3I3cXFLZ281VjNDOCt5blF5b1ZTeE9IZTh6MEcvV2VsRHFSSjdYMlF1L0Q0UklRdVlrbk1CMVNoVko3MW1HTGZzRkQzQmYyOWw0SjIyVXhtUENxSkxwWVdYVFJNdW5pWmJRaUxKbXVLbGtUbE0xTHBodUptb21haXBxYlJzVmczR01kZUVOcmFyWlk4c0VVNDhTSkN1alVxUk54M3U4TmVrQStGZEJtRHRiNHdIdi9mcGZZdTB1WEx2RDQ4WDNKMzF1STV1Ym5vS2V2UjV6MzdYZmVndGl5TFpCT1JXT1lQaVBVUzYwUW1pMjFOa0lIYkhjVkVqaERhczg2VXVBRWQvTTV3TVo3dzQrd1F4YU5DYS9ZMVZJb0pHd2FYY1JVRFlRbDA1VXJLd0kxTllPS29vbUVUTXhPNkR1Z0J6RUU2RWJQeXp1b2RuZ2FHaDVEOWFtVGtKS1NDTDUrUHJCcWxUMHNXREFmeG80ZEEvcjBVSDMxVlYvbzA2YzNkT3ZXRFgvUE1HeVlFVXczbVFibTVxYjRmd0lDL0NBdUxocEtTdVZRWC85cnE4LzgrdXV2ZUdjTlRWOE9CWlJmdTdCaXcxVGVoV1pqWTkycVREZHYvZ3pWMVNmZ3lKSER1Q2JoRWFIZzQrTUZEZzZyOEx1aWR6WTJOc0xuUjNWaDZvRnFOV1hLWkRBMVhReXJWNitFb0tCQVNFOVBnUXNYYTZHeDhabmFaNGFGaC9ET09uZjVKTWlpSW5CZkdWQ3ZVYy9GaFk0VFRPazluSlFXRmxvaHM1L1hDdURPczZmNXJGQ3BQZXV3dGRGOFZyQ0grV3hnNCsxb0NhR3lTQWlUUlVCRWNTU1JzdTBqcktxcHFNbDdxWERZUjRWQmNKWVR2UDc2NjhRZ2ZQVFJoM0RyMW5VOEtFMU5EVkJKSjkrMjdjRXdkKzVzK1BMTFh2REdHMi93aHFjOStPZS8va21ueW1Bd3R6Q0RMVnMydzlHamVmRDA2VU44RG1zYks5N25KOHdZQURMS1M0bWMydFFtanAzM2hLNDlQdVE5SnprNUVaL2h3WU83Y1BEZ0FmQ201VVMxNk4vL08zam5uWGM2cEJadnZmMFdEQmpRSHl5dExHQm5aQmpVMUp6R3FZdk9jYkxxT1B6dGIzOGpQdit2Ly93RDBxcURJSnNLeGFEZTdxTjdqUHFzamRRS29YY0pDSzJTbVN1MHI4c1M0TTd6SnZPWkc2VDJyTU9XbS9rY0IrNExleTViQUpHeVVDWHh0WHQ0d2pMU0NnbUxtcEhPU1ZldXJOa1lSWU96cVJEWWo5a0JKbVlqZUFNMGNORDNNRy9lWEhqdi9mYzdaRUExQlYwVy9mcDl3L3Y5Ky8vNU8rUWVYdzlGMUVZbHhaUm5teWlpaWNwWUFtKzgyWWw0MXR1MFRPZ00zSXZ1WmZQeEp4L0R3a1VMNkF2Mkk5N2ZuSUxOSUlmYUJnZW83YmluaXQ2R3NQcXRrRnA3b1hjSkpEU1p6bDRyRnZFRWRqV2JaeW0xWngyMk5wclBuTVVUMkdJT1JCVnVneWpaRG9pV2JZZjRVekdzbE4yRmIwYXhoQlZMVjNiem1JWWVvSnVMR28zSXBUbElCVVAybVFBNmVUNlJkRGkxQVltMExjNFVTaWwzRm01UTFrYlFIbWl2bFM2VEpIOUhiUmd5Nm1zNFRHMkJRMVFRVFREdWFTNjFWZGxudHRUWmhOUk1Ta2ZRYzlPYTBMRTRORWloNldTdVM4Q3p5NTFuTDRzZnhrcnRXWWN0RjdONWd6ek5ad0dYaVAxK1dGNHNjR1VZTGxnYUoyVVZ3a1pxS093TzNEeVZzRnR4Y3hXTkRzSk5aNGpMZDRKMy8vNVhyZFB4ZzQvL0Qvb043QXJHNDc0Q2szbUR3SFNaTVN4Zk53R3padU1VK3V0NHpOSzFZMkdodFNGTW5UMEFqTWYwZ1g3ZmQ0WXUzVDZBdjd6MVo2MEgxbnJGY0NpblhERVZTbHhhNWJnR24xSGdDc1BwTStvaUUzcWZmMy93RCtqVzR3UDRkbUFYTUJyZEJ5YlA3QS96TFlhQTdlclJ5bm9nRmk4eHd2VVlSaityYjcvUDRLUC8vbE9ybEgvdHRkZWdjN2NQWVcvbFJzaW5Oa01lSnBEb3E3RFUyL0ZGems5cGxkRGNoRTZuNTQ1TVp5UnpIT3l1Q0FXaFdYWTBYZFJEYXM4NmJMbWJ6WGwvazhWTVlMT1JKalRKSFdKbHdiQmJ0Z1VTU29KYnBJM0NCVlFKdXhNWFdCTmhEN1kwamlzcmFqSnFlRDRWQUVjb2Z5WEJDVXVnMHh0L0VoeVdQLy9sVGVqNzdXY3cwOVFBbkh4TUlDcHpDUlRVdUVNUnRSR0tLVThhRHloUm9pNFpOOURpYlZBS2lOaDN6QTVDZHkwQVo2OUpNSGZ4SU5Bei9BSkxJSFNPY1pPK2doT1VrNUtUR3JPT1JldWZMNnBlRGIzNmZDeDRobzlwMFl4RzlnUXoyeUd3d1hjS1JDYVp3b0VpZXlnNnN3NWZBT3gzUTZCM1ZzQk9lMFY5VUsyWXVxRWE1bGM3UTBTcURUaDVUNE5aZEsyLzd0OEYzbnBiK0pMN3owZi9nQlRaT2lpZy9PQW9EYnVYcUxmNW9rSUhDYVEwUDZIUmpLRnd5Q0tFSnRNNTdxQXZjR2VacGpISnh1RFBVbnZXb1lzVzlwNlh4US9BWmtlWUE4VExObU1TWkFHUWNUNU1OR1ZiUzFoTmhFVk5SODAvUnZsQUllVU5NaHJmaUlYd3QzZmZ3cmQ3ejc3L0JRdTdVWGlnQ3MrNzgwUVZscFFVbEoxK3h5bG5UQ1ZtUFMzZ2VvNkViTW5XUVU3aGN2QUptZ3JqcDN3Ri8rdjhIaTMzUUtpb1dRTlZsQ09tbWxyYm9Sd3J0NE5odEtqZGUzMEkwMmYyZzRBZEpsQlF2a0w1ZklUUXhjQmNMdWdkSzF2ZW1ZR3BoenJCdVhMTHo3dEJ5QjVMV0dSckJOMTZmWUxsL2V6ei8wQlMvaXFRVTV2b3ZubGhVQTlSTHdzb1g5eGJJYW5GVXBvdE5KcXAvVXFoUXpsQ2sra2NtZVFDM0RtbUJiNGt0Vjhkdm53dFRJcTRMeDdzYXd0N1pINlFLUFBGWkZRSEM2WnNUb3UwMmdqTE5CUTFWeVdzRng0QUZSdHhvaDZqay9VSW5RVDhSRlZKV2lZb3FXcFFGWUt5VTFJeDVPemhWeS9pR2ppRmNWQnltbG90eUJsQlZta0IrYjlpenpuTk9nczZHenFqME5tRjNwRXJ1cUkyU1BEMXJMcUp5VTJLZmVUa2VtVmlGOUdYYWxGTDM5aTk1RXV0bWREc2hGYWxzMEpvb1hUZUVieUNKekFkVHZ1azlxdkRGMzFMaFhKZmZQTzZ4VXA1azJRK2tGb2VnS1hscGl4VFpNMFMxbGVacmx4aG1jYWpaRlVucTVpb1FwTHloMWRJVEw2UWJPbk9VaXN4TlFUMkJPZW9GUzhGN25NVktNNTBsZ1Z6RVFnTHY2WlZ5Ymx5azJJN0UyS3pFN3UwUld3bXJkbFN5d1drNXFZMEtiVDI2YnpGMVlJbnNJL0ZEQytwL1hvWkFsdDdXOHdBTnI3V015R3gwQnRTWkY2UUt0c0VhZktOa0ZNYnJDWmxoWVZGRFJJWDFoTTNXUk5aaFJKVkxFbUZrcE1VbEN0bTZ6S2VwK3pVOENQVUtsbE9VS2NsdFlJbzlrYlBVWGVPMXNWWHlTNGtPYW9UTjhrMUZac3ZOWm5Vak5ERmFsSWFDWTFtaHB2UWFMYnlCZEtaa0xsdUszamJ6QUx1SE5PelBVZHF2enA4QlZoTUcrUnJZUUpzZkdnUzlqbEJ1c3dUTW1UdTlGY1BPSERLbHlVdG1iSUtZZjJ3c0lYdEtLdzZXYmxKS2lRcFcxQk54R1JMcUpCcW1SSUtzMVRKQmN3U1VTN3FpTG85TDdDZXIyQVpjVVlFVzN3aDZkVUpycmpZU0xtNXlWMGxLTFptVXF0U1dqRUh4UUlKaldhSExYUnI2WXhreml6YUJOd1pSbXcwbjlWVGFyODZmUG1ZbTd6amJ6R3QwYzlpT3JDSjNia2NNbVZ1a0NYYkFIdGxyckMvekYxQVdyR1VWZHl5cUVIcWhCV1cxVWxqV1ZzWFZTZ3B1V0lLQzZrUXlsYkpKY3BHQUd1Q3kwcXMyb2hxTC9JWi9ETmN4S2pPeVpXZWVUOVNkSVhrWE1HRjVSWVRlNDB5c1lXazFsWm9kTGtYS1lVV1RtY3htUk5USFlBN3Y3VEE5WTVtVnE5TDdkZExXZjRXMDA5eUN4RHFaWXJGWlhPazFoY1hVcE9VMVZ4WVJicFduSE1DLzZ3UVdMUTlGV1lFWm9GOWJEd2NPYmxCVkZiMW92SWxaUXZLbGxOSVNLNVFWekNXbUo4b0M4eFZIdVlkaU9vNVA3Rmd6blJGNEFMZ1NzOFdYWjNnUXVrdGxOZ0txVmV5cE9ZbXRTNUNJNW5kMWFZem1qMFVHbXlaSXpkYjhBU21ReWxIYXE5ZTJ2S3hNQW5oRm1ETGlwbFkybXlaTSt5WE9jRUJtbnhhS0NGcCtTbTdRZGtjUnRwS0dyYXdxZ2F2aFRKYTNwbGJNbUd3ODFFQ0k3Yzh5QzUySndhSW02aDhVYm1Ta29LeUU1SVJrNVJTSmM0MXlrd0VVL2haS3hiRGRUVm90NWVwNkxtRXBGZThtMEowdHVSOHdibHlpNG10WG1wMDBhcFMyb0dWMHBvSnpVN25FazQ2aThrY1JNOHFiMzR0Snp0TDdkVkxXMXN0Sjg0UHNKd0dYREp6VmtPT2JCMk5JK1RLMXNMaEVrZEJhY3M0MGdxbExMdUJpbHQ2RFc0d2F2VEsyRjA4ZVJtbStXZkIyYm9WaEt4TWFxaGtaWXRLcGlpUzlLY1dTZG1DYWlLbFNySkZjQU96a01jdm1BVUVONm41QkxkYTRhWUE1SjZLNS9DZnZ3aWZUUUc2Q0JhM0tqdFhjaWJKK1hJTGk4MlZXbDFTYXk4ME41MVZNcGVLeUh5bzFBV0VadGZiWXNZb3FiMTZhU3ZhZXNTbm15Mm5BcGM5MFZad2tCYjNrTXdCYzFpMkd1Um5YWG5TTWlsN25KV3k2b1E5UTRPYWk1b2NuaHNvS2k5RFFQcFdVVm1GUlJXV1ZEZ1ZTVEc1RXFwRW02ZmtOalZYWTM2bDVtaUVObnV5ejZLQWZSR29wT2VMVGtwK2pTTzRPckUxbC9wSHBkU3RDOTE2T3F0a2RoV1VPUzF4T1c5dWFZRmYrSmlidkNPMVZ5OTFiYkdjZkpGYmlKMmU4N0cwYkFySzEyb2xMZE1zMURoR1dxYXBoOHRkd01nOWo1RFYwRU1HazdaV0VyOHpjanNFNVZVck9iS0tKeXBYVW5aNkt1UmN3SkpUWEVxMllIZW8yU3htRWR6RnpPd3d1TTlqbjZXMVMwQkljbFFEOXFXbGtsdTkyR0pTWDJ5UldqeWwxU1UwbWM1VkxLSEZaVllsYzdUM0FwN0FRWmFUODZYMjZhV3ZRTXNwNGJ4Q0xKME9oNCt0aER6WktqZ2lzNGVqc2hXWWlsb25VV2xQY2FSRmpXSkxxMmptajFCZFl3L1QvTEo0YWV0U2NCdUNUejBGQTdkanhPK1hoY2VwbFpXYnByOW9JQ2xmVGtaSXZrVDNxQjhJNmdsbUtMbFBtYkNZRGcrMGdQeGZFMkpmOXZQWTV4Q1ducFQ5VjVib3dvS3owNXNVbTB4c3J0Uk1VbXN1dENicHJLbk1wVFhPRUdnOWxTY3dQY3ZycFBicHBTOS9pMm5UQS9ITGsyUWxXbU5wQytSMmNFeitJeFRLbDBQcENYdFJhYmtweTVZVzNjYW9pYWloOWxFeFBIbk5FK3NnOWpKZ2xxWmY1djA5ODZoeks3THlSU1VsRlJhVUwrVU1FUUdud1VPQ3FTOFoxYlBSV1lRdUFMYnc0cUx6NVZZbk5qdXgyVkszbHRKaVFwUHAvQ005STNZNnlaeWJ2WXczcnkwUzk1ZmFwNWUrZk14TjNnbTJuTlJBQTJ4Mis4ekIwaUprOG1XWW9xS2xVRlhyb0pHMFRMT1F0S2g1cUpGaDJmNDhPU2R2cllUb1M4MUtnYU11Tk1Gby8xTHlNejc3NFBJNTAxWmtWYVdwdUtRS1FkbkRyMDdLUjlRVUpZOEpKbU9lVUpPVVBLVW1Lbm1tQSt6L1orL0xQSXQ1TnZ0TTZvUm5pODRXWEN6QlZXSUxTNjFJNnZraVFwc0tKdlJsWGtMejAxbHptVlVpSjI2WkQ5eDVEYktjOUl1am1kWHJVdnNreWRwbU9XRWZ0eURibDA0QldlRlNrTXNWRk1tWFlFNmNYSWFMcTZtMDZCWkdEVHhhdGhZTVhQTUlNWTA4NWJEdHpET2x2QXdlOGpzODBRT1NBaldTVlVoVU1VbEpPU2NUTXFya21xQ2tnUnJmS3MrcGNUcWh5ZDRJOW5uWThuTmxGNWVjbEZ1ZDJHSlNzMU5hazRRV1MyZnRaRmFFeHNsenEvRnNDZ2djSXJWSDBnbHNOV0VCdHlDSTdEMW1VQ3kzaFJLNURaVEtyYUZNYmdVVnhaWlFVMmZIa25hNXFMVE1EWHkreGhhbSsyWHlwSFNUL2NxVGwyRnUxQm5pczNvdVI2Q3NkSW1JckV5aThrVVZrdlFwUjA3MUlvNkZGMHJHRURSU296c2M4cG1xczZpVG55czVLYmc2c2NuRTVrdXRYdWhmcUFVOG9ibnBySjNNZGtSUUlKbVA1bGlEMEt5R1c0MFpJN1ZIa3EwVVcvMi8wVVY0eEMxS3JQdE1MRzI1M0pMR0FpcG9qc3ZONEhTVmRhdlNva2FoaHFIR3JZaU00Y2xyazNKUlZGN0Vqck1OTU5SZFJ2elBnaTFKY0s5dWhscForYUlLUzhvTVAxdk9SZ0VwbTFnMFU2UFVBdFRJTnRHTUVkKy9DYU00aTNyWlNjbUY1U2JGRmtwc0pxbnZLNU5hYzZGdnNvUVdTbWR4bVcyVk1xTVpRNkNnWUdST0RKakRrM2ViNWNTN0NUYUdiMHJ0a2FTTExrUWlYUWdnc0o0RUpZY1gwK0thWTNFcjVhYVlFMFdtUU5VeTB0clFEVkNJaTVyQlNNdXdNOXVISisvVWJTY2crbUt6V29FUjl0bFhlZitia08zS1NWYjFzcElwS2lZb1Y1YVJiWmJ4WmNJWG5TODVXMjV4c2ZsU2k2VzBVRUxmRVJCYVY1a3ZzbVJtVXZuMHFhVjRKcmZTczhsbXUrV0VNS245a1h5Rlc0MFpzOTFxQW5ESkNwbXRFbGUrR0U3S0YySE9uVEJWU291S3o1WVdOZWM2M2FUQ3NwVmc0SnBIQ0dpMFVZN1R0VFY1RWRHWG1tRjhZQVh4L3lNOWN1SDY2Wm1pc29xbEtUZEJwWlpPQ3NHWkJPZUxMUzYxSmtMZnAweVVRcXRMWnpHWnJ3bklqR1pMSVRNUzJRYUxuSis4RUlSbU5NaHkwaENwL1pGOE9acFp2UjVpTmY2bkhWYmpnYzNPRlpQZ1JPRkNMRzJWZkNHY2tzK0gwL0o1Y0tab0xsdzVUMHFMbW9HYWdwcHo0YXc1VFBIZFN5YW9Td0Y0eU85b0pDK0RkMWs5TDRWZFlyWXJCdzROSDF0V2JxSktMYzl2bFdaQ2JIR3B0Ukg2UVl2UWZKbG5haWl6S1JFRVJDclhXVU9jNDJUZ3ptZUkxYmphNVF1V3Z5YTFQNytKRldvMTFwbGJJRVJlL093V2NlZkNHWnF6OHRtWXV1UHpXdEpXSVMxcUJtcktyYnA1WUJjUnd4TnZTZm9scmVSbFdMVHJITEdQbnNzUnFKQ2I4NUpWYWlsKzd6QlNvd3RRRzZHMWsxazhtZEVNM1doSjVaODVxWHo4NEh3UW1zMHdxN0VPVW52em0xbitGdFArVGQ5b0Rkd2l4VHRQd3NLZWtjL0JYMnZrc3pEbjVEUGgydG41Q21ucEpqQU5DY3YwNHNrN0xlUWtSRjlxMWtuZzBQTXZ3TWhUVHV3M095QUZYdFNObG56b1gzWEVoSDVPQ3kyV3pwcktmSWVXbVMweVFpeVZVNzJuQ3FWdkE1cFpxYjM1VFMyNktQRWh1RGhzeGtGWmhvbFMzUFB5SHpDMWNoTzRWRG9kYnRjcGlvK2FJUzllRGdhdWVZUnN4bDVGc09Oc2cwN3lNcXpKdmM2N0ZPSXlYU1FmY0NGZW5EYUd4NlZHVUgvRUFPNGNIS0xrTHMyRFFrTjRVajRNbW1xR1MzN085aEdhbjg2dHlYeWZNaEdRbVovS2pNam5pdVlBZnlieFhNWkk3Y3R2Ym0yem5OZy96SG9zY0VuMW1JQVR0MVkrQStwb2NTbjVOTGlBbVFyWHEweHdFNjdWekllcHZsbUVaSHF1QmJDcCtGNmI1RVhFWEFLWXNyV1N2QmpjRDhITjZtbVNEdlRUeW1Gd08xc2ZMdTdzRDZkOXZvSHlOWDJnMk81TGpUanUxQmZPQnZTREs3dStoM3Y1QnRCNDl2Y2x0VFl5UDZZbWMyVFdMSlZ2MWMyRGZYNFRRV2dtZDFxUC9rcHFYMzZUSzhKNmRGNjQ5UmpnVXBrMXRVWGNxWEJKUGxuNTlYTFJKTGh6ZmdZNFJFYndVbkpaNXBVMnk4dmdYL2tRWHdqcy9SMGpRMTc2NEQ0cE40TExNZC9EU2Jldk5KWlZFMHJzZThNWi8yL2dldHBnZUg3S1dISkIyME5tUm1SR1pwVEtTR2JoVkZhSmZMZEY1THBqMHlGQ1lCYnBHVDBndFNlLzJVWGZiQ09FQkU3M0dJZUZ2U2lmb2hCWFBnbnprM3dDeEtldjRjbHJFbGFGazdPOUJFYVlKZFR5bmxNcXMrcndBWDF4WmpqY1NCOE1WWjVmdDZ1MDZtUStGOVFQNm84TWxWek90c3I4Z3BaWmsxUit3RXBsbk1iblRTQnIwemdRbXNVbzY1RUdVbnZ5bTE3MERTY1hLbHgxMWtRczdSWDVSQ3p1VmZsNHFNeWJEY1BkY3dtcFJuZ1hRK2k1NSswcUx5S2lyaEdNdllxSlo4MEpTSWJHdXRFZE1velBxNDF4MnBhdTdxMlRpUEtsdlpRVUxldWwweDdWbTc2R3Uza0drb3VwcTh5cVZCNHRrTW9UY1NxelJYN1lJdkw1blBHQzh0SVVTTzNIYjM0eEtSeEJNQnBTWE1ZcTViMVdOQTUrTGhvRHk3YnRKRlBScFFBMmxkUzN1N3dNemtkdjhWSTRNOGVoZlFldmRnUmNTeG9FWlJxSVc3VHNTemk2cUFjY012a0NEb3pwQmxsRHUwTEd3QzZRMnE4emo3UnZPK08vN1RYc0NnZkdkb1BEUDNTSFkyWTlvZmpIMWtVKzQvY05QQzQxa2x6SzlrbmxzYnhVUmlJL2JoSDVidFY0U0hYaHpwOUNZSG9PamFUMjQzZXhkbHFQS295MEhnVmN5bmNyeEwxZU5CclNNNWZ6WkxKTW9qcE1Yb2Jwb1ZYRU15ZDU3WVZuNThlMnk3QTlxUmlHVTA5dHNpN3BoZVhiWi93NXBIM1hXVkJXYlVqcjN4bHlKbmFEZ3NVOTFUNjNaR1Z2dUJvL0VGOHdVa3VwSzZUSVkzZ2lQNm9aRDFXSm8yQ253T3pSSEpEYWk5L05vb3VsRjJVOUVyZ2sySStFYThkR3cxWFpXSmk4S1pNUWFaUnZLZXlrR25uQ3hkSGszUVlvdXc5dzdDN0FyaXR0RTlqditFUGV4WkYrWUUyYmgrdGVuZ0dVT1lpbjdwSDVQU0I3eE9jNFNkc3FyUmlaK2wzaDBJenVPTm5Gem9FdW1HZVZ3eVNYc2EycHpCWDVXZDE0dUYxb0RIdFc4ZWVPcGpIV1puaGZxYjM0WFMyNmFNbENFaGVHaklJZDhhNDhpVHprZHdTRks3b0hjQXRVbkh6VTloU2VFM1dXZUxhSmJ3WTAxWTNTZWFCK3pkR0hFbnRoZWZQbjlNQmlkWlMwUXFRUDZBSUhwMzRoS25LNVl4OTRLQnNxdVlqdEtmS2pDa01vM2o1TVNGNkl0aDRSTGJVUHY3c1ZZVFc2SzEyNHA5eGloaTJkQ01NM0hDQUVtcm56dEtoc041cElnVzgydHoyRkEwNDg1bDBnaFVkdGRScWl1NGNOQk9XVjIvYUN2Y05lcnJnOGtRZDJnZnpaM1FVbExsdmQrNVdRR05GdzBoQnVaT3RCaksxZyt0WkhXNC84U0dvZmZwY3IwbnFVRzdlZ1MxYTVFZUxvdVJaQTRNa25vckloWWRrQ0k5b3FNT0tIOEZQRU9leENJN1VlbkNmbFJsQzZpaTl2Z1dsUHlCalVSVko1MldTUC9CemtTM3J4emxteHJnODBWQmxMTG1CYmFEd3pEQjRYRFlaOXpzYUM2UnRqUGVKSHFUMzQzYTY5dGdQZm9ndFlHMk16QWhBUk5tUEJ5SWxNMzRWeE5XcEZxMzVNeW52cWNkdmxSYmpKN3BBWGljc1J1Rms5VGZQaHFSc0pwN3krNWtseFpINFBTUHRPZW1tNVpBenVBb1ZXUFhublBiLzFXOGtsMUpXbWM4UGhTYkVlVkVVTlJhSUNNMmNNc1RiRHF4TnNETitVMm9QZjlZcXhIajQ2enNZWUVBNzJEcnowRGE1K29sYTAzWFRhVmoyaSs5VUFjUHlCNHVmMkVEaUdab1IzTVhHZVhWbXVHZy9QcnpuNlBCbU9McVRsL1ZaNldVVWxIdGdGWkZhY0pGN3hKVHd1TVpSY1JtMXByaDBCVDByMTRaZjlneUZoNlRCZ1pveEY0MjZiWVFPbG52OVhZdEdGakVKRm5iQnVEeUhNbktpekVIMnBHV0lFSUdUai9OeGUyS1JkSk00ejB6OVY0d0dxM2tTbXI5eTJGNlIvMzBWeVNWc2p5NkFyRkMwbkw1NEw0ZjBsRjFJcjZrYkMweko5ZUZnNEdQWTZHUW5KaTlnczlkeS9NbXVuMWFqLzgxcys3eHBiRm9SSDhUMkl2TmdzU0JRTmtudlhaY1gzek0rdDBkcGx3R2J6eWNmQVBkT0ZpdG10RGxCRGxURXZmUStNN3lhNW5KcHlhUG9YeE5rckhQdElMNlVXUER0dUFJK0xCa1BaTmdNeGVXdjMyQmorVmVxNWY2V1cwYnJzeld4UlJ2dVhRampWTEVqUzFXWTQ5UmpnWmpQQUxRQzQwUVJROFlDV2pwWng1d1VXRjBraTFSQWxBQkorZkdBRklYQjB4b1pXQitqdW9TRThnZFA2NnlEVHQ1MXhhbWNON1FyWnd6K0hBMk82d1lGeDNTQm5vakRvYi90SGZRNzdqRC9IU1pveHFBdWtmYXY5Yy9jYWR1V2QvL2twWThuRjFJU0dTb1c4bDFMMXhlUnRqTFV4MXBONjNsKzVOWGg5L21tMktMWnBWeUMwcnBsSDZyVm0rS1ZGWEM0WG53TkVYaENXWG93SXhBVSt6Q1ZnbVhLQkVOaHFhMXlyUTNSN3Z6NHgvRVhMZXJVcVRmcUFMbGk4M0VsZlFON3M3bEJnMmhPS2Z2eVNKNUsyRkMzL0VvNlo5NFQ4T2QzeDN2dUdmZDdxWmJMWGlDOXd3OGxoa3N2WnFyd25obUo1N3h3YURNa3JqQ0RlbHM4dW0ySGVVcy82SzdmMFZtUit3SllFNFY3eUVMYWZieVlJb3dYKzZZV3d2QXdsOVFBaHRjMDhRbXY1bHdFaVRBaEtoVnZSUGVKY1F6Zmt3Wk56NDlRTzBnT1pJVThBbEk2RXNIU3k3cWNUTlc5V2R5aTA2dGxtVWJXQ3ZoZ0t6SHJDd1dsZjRMUmxueXZ0dTg1d1pGNFA0dk5sRHIyaHVYYUU1SUtxNDNtVklaYjNZZUZnT0xCK3FLQzg4VFpHNVVrMkJwMmtudmRYYnVrNUhwekFsc1Jvb3h5Q3p6YkQxaHFTL1RlYTFjcUxRT2tjVGt1NDdad0s3a1dBMkNGRUxaOXROVTB3eFAwWUlYRlY4V0sxdzRTR3ZXeE5INTQ0aFpZOW9XQlJUNXlJeGUyUXJ1MkYzTFlYSEpuZkF5TmYwb3YzOTdvZDMwa3VxQ2J5SXVUK1F5REIxcEJIdksxaGZZcXRmaGVwWi8yVlhJT2M4dTNZZ2t6ZGZoSzJuR2ttQ0tJcHIxY3ZMMFBpbFdaOEFTaXA0VjhHQ0xia2JMYlNCSnh1VXY0OEtiaVNFRGdsZTIyclEvVlQvTUIybGF6RXZqZFVyT3NESjkyK2dpb1BZZERmamp2MWhkSlZ2ZHZ2dVN0N3c1TXlJOGtsMVVUZTB4RjZzTWQyS0lZcjhHNGJveGxTei9rcnUvVFc1M215QlprWmZSWUx4TEQ1ZERPbThvRm1BaWYvMUF5QloxUUlYUVpCSXI5RDJCVTJ3T3FpNThxZjUwYWZJd1RlbHVUVjZtQTFueDhCWi96NmFTMU1wVXRmT0IvOEhWeWxMNEE3QjRmQTA0cGg4T0swc2RhRDNYakdHUC92cndmMDRlcWVRVkM3N1RzNDRkcFg2MHZqOW41OXlTVVY0OFZKQTNoV1BCQnpPWGt3Sk5vYUtBVm1FMjlqRkNEMWpML1NTMy9kd1Mxc1FlYkZuQWUvVTAwOEN1ODBheVJ3WkYweitOT2Y5MmRkQXY2Y0M0RjlNYkR4cUd5RUVTbjFZSHYwc2ZJQ01OdHprUkRZSXlaSW93RkRFbCtKL1Y0MEVaRWcxUnUveHArNWMyaUlUcUpxUGZTbmg4T2QzQ0Z3S1dvQVZEcUxDMzNLK3h0NEtEZVVYRkxSNUswY29wVDNSdFlnU0Y0bUxDL040U1FiZzA1U3ovZ3J2UWF0UFJUTkZtUXVMYkRYeVNhTU4wTlZFeVJjYWwzZ2l3MEF2dFZOQkVLWEFSY2t2T2VKUmhpYmRoK01rdTdSQWo5UlhBSTBab21YZEJLWW9lbmNjTGhMQzNxTlRzS3JDWVB3MTd1SGgwQkRWY2NMcTVhNmtmQ28yQkN1cHd5R3k5RURzTlEvSncrQ0orVkdrZ3VxN3N6UGorc3I1ZjAxZHpDazJ3M0I2Y3NseVhiSXhVVGJvZitSZXI1ZitUWFk4VkFFVzVBNTBlZGg0NGttMkVUalhOYW8vQjRKZmZxUmVvR1RyalR6NVBkaXdiNFEyS3dyZmE2VUY3SDhXSVB5QXBnZlcwc0k3QmZ2TC8wZy93RnByaDBCRGVWNlNubnJEdytFN05YNmtMeGtpQkFQWTYyTmUwbzkyMytJcGU5MDJJOHR5QTlSTmVCeHZBbXpyS0FCWmg5NEJHNFZkRUxTUC92VFF0VTg0WXQ3b3drZy9Xb3piS3hzSW1tUlh3ejBkOHY4SnpBOHVWNHBMOEplM3FDVWZ2ck8wNFRBSWNrYkpSL21QeHJONTRaRFE5bGdwYnozOHdmQ2dUVjZrRUxMS2tCRHN1MlFFVkxQOVI5bTBWS3NaUXN5Y1dzVmJDaHZ3cXlXdjhCQ2pVKy9EM2FGRFVxUlUraWtMYmtIVUY0UGtIdWpHUUpQTllIN2NSSVBFVHhidnFLVW5aRHhnQkNYWVYzSkMzd0JlTktNMjNLQ0VEaHQveHJKQi9xUFJOUFpZZkNzWkJBaGI2NmpIcVF1MGFkbDFXK1JWdlg5YnB0aGk2U2U2VC9VMGx1VFk4SVd4R2lUSEZ6S21qRE9OT3gwbkVnTFo1SDNGQnlMRzhHVi9wc1FqUHl1TEpENDZIZnJTaHJCL1BCVEdKdFdMeWd1WW1SS3ZWSjJkQkVNY1M4a0JDNDlaaW41VUhjZy82KzlNb0Z0OGp6anVGWlZuVHBWVTZXcDJsUk4ycVJkMHRhU3cvR1J6NG5UWExSYUdZZEVvUjEzQ1FTUytITVNrZ0RCZ2JVREZoaHBCeHRWMWEyUTBhNUJVTTZjZHVJakpOQWNEUW1RY2dWR216REdzVUxKQWZoSW5qM3ZaeEpzeHliT3hadWE1eWY5NVJ6Mjk3M2Y2K2YzL2lkVUhDZGlCc1NWNURVOWtOZFhVT0FzM3ZQODJDSGtsUDNDWFJDV2JHc1A2T3Q2cGN3cTZmWXAybS8zMzRZM3lucGdjZVVkU0xQYXBJYk9kQXY3bmYyZC9aKzk3MVZzY1gvU3V1ZjEwdTZCdzJDRnVSTzgxL1oxNnd6dWd4M3M2VHVmQ1BhbUtBOTVieGxWVUxIS3Y3eVlQL0dlNWNjV3RkNTB5VjJTK2J2YllmVXhKelp0TDZTWTd3VWszbGhGVjIyWDJwOWxmdEVsRDNsbkZ4emdQdHpCbnQ0emNXQ3JqL1NROTNxSkNzcXlCTmlQb3ZyS0lXM2tYM1FMZE4vaFBjZVBMWUxldk4xZGxNbnZORUpPclJPeU1TdVBPbUhLZ2M1SEl1KzBRNTFTNjdPRGd5VitVNTJId0FWRlc3Z1BlTkNtYlRJNFdqUWU0ckw4Wjc4S2l0TUZPSkFtd0VHdnNMK1ZhQlZiU1Y3T0NDdkxYM0lYaFdWSnlTM0lxbkZLV1ZyMWFGbzQxV3lEVmRqOExFc09YUVB2TloycVc4Ui8wSU13ZldjVHdOYW9IaVR2eFk5UVhqRnlrTGo5T1p5bTJzUjdkZ2trTjJuWkU4SmF5d1YzV1Y3WjJnSXJVTjRWUjF5WlZkSTlydksrVWRvemNHQ3dKRzVwOEpCMzRkYmQzQWM5Nk5MZnVuV2U0dDQ5cW9KVDI1Vk1VRGlVRmltRi9kei8rLzFYUGUrNUpkd1FjcXN5dkJ0dnp0NXJrRjd0bEtLek91RjNCenZIUmQ1cGg3cWt3NkpmM3JsRjdZUGExMWlWem4vZ2d5aTlaK0xBMWlBTWF0MHVpd28rMjZnY0VOWTd4V2xLUjBtYVlqbnZlU1c4aUZwYStMU1FaMmwzbDBhenZoYVNEVDJRWm5HQUZwTnF0c1BVZzExakt5OWVUMmQxUU1iOWd5SzVyQk9pMzY3MWtIZnV1M3VndCsxbDdrTWZET2s3bndEMnBxaEI0ckxjS0ZXQ2FiWEtyN3lZSHN4MDNyTksrQ0Y2ZGZrTTcrYUwvM01USkJ2dndYS1RBMUl3N0hWV1NRL0VqVkpjOW5sMm5WU3pBMFNyNjRCWVhua1BZamMxZU54ZnZjNEN6ZFVMdUEvK3R6NXRpZUJvMGNDOU9wVlBlUzhVS3FGVXh4cldYNVJYU3JRS0JlOFpKWVpBclRmdDhaWTRvZUE0TERIY2cyVlZqb0c4YWJCTDdUa1NrYWNjNk1UUDIxeUhndGwxS0NRYjdrcUhoZmU5QzNac2xBYk0vcmthZXMvRThSZmgyeFlVMTNreUJzV045Q2x1bDBVRkRma0tKaWlVcENrd1NyZTRmaS9WeXB2MnB3by80VDJiUkFCRTZ5dS9yODR6bi9NV0tRYWJjZjdoTGxoYTZZQWxSc2ZBYTVMUkRxK1gzRUVwdStEbFQ3L3gzYlo3YjhHcit6dGhabkVQTFBJNkNGZ1dGbmRCYlA2eFFmSW12YnNMT285R2V3eWN2U2tLZWsrVHlLTVZsK1h5WGlWVTVTaFFVUDlCaVl2MnBhcS94M3N1aVdHZ3lpeitxYUEzWC9JV1N2MVdEVXdyN0lERkJtemdDb2YwbW1Ud2ZHVlpWR0dIaGVVMktXL2l6MGxHMS8rbEdGM2k5OHMvdmZBckVQNXdaSkM4citWL0NsZXNpWDZIejlhb0JtZHJMSDlSSmxqNnppV0FvMFh6VUhHN3JTcG9ma2NPWlZyL3dkYTFvYndpNzFra1JvZy9pVmswRyt0ZytqODdZSDdwWFVuazRhUmYvdGMrdVFxeDJPcStycy9rN2JCTTlqdUFIc0ZCZFp5SWtRYVh0enc4MC90RkxOaWJvb2Jjci9iZFNqQmxSVUM1MWhVbWEvL3JnNThqTGxWb1paRzhaNUFZSlRHWis1NVg1NWsvOHlXWkZHemtoSzBuSlpsbjc3MEpDNlRHOVMzdW5PSWVtRmwwRFY1NTd4eEUvYkVXL0YwelpkdE91Rm9kSDVpODNxMzhPYmJ5cVplZzczd2lkNkVlU2R1ZWpRZEhjL1JEMjdZL053MUtxTjhnSHhEWFg3QjVpeXJGc0dkNXp4NHhSaVRNSzNoS3JhL2FqSEk1L1lyc0Z2WDZZeENkWHc4eG14dWxhTEJsMVNqNlVKK0xXbXVDN0p3OGFONm1naTZMY2tRQ1AyaGxsZFJHTHBtRHE1bDdUOGVCbzBVRHRnWWhvTDNvcmxaQzY5OFVVQ0ZHRENYdmJXemR1YnpualJnbmhOeEtoWkJudGdZaThYQXpLM2NuRkdaTUJZTW9rMUtWS1lQemY1ZkRuUnJWNkVSMmEyYkhpUmpvUFJQUFhjQmh0eXdlUU03V1dMQWZENnhwKzNPblZnVnRPeFJnV2lFYjJGZi9DUzgxYU1PZjV6MWp4Q01nS3V1d1FxMDNmU3prV2JwSEl5MXIzSG01NzhONzJiOEhveGp1TTVac0dWellJWWVlTVJMWjFjNlJVanRMUW1PYjlaMVA1QzZwaDdEblVOaFRMNEdqT2ZDVzlSYjMzNFZ5c09iSS9PNnJXLzZIbWNkN3BnZ09SQzNkK1V6VUd1TU1RVzkrWDlDYlRxQ1V6aUhGMVp1dlk0c2ZWSytwWEpxVGtmTnJISjRkbUw2aEJzMmNGUTduUHBCRGwwVTVkaUs3TjNUOUE2bFoyL1dkalI5ZnNkdGNvcklEWkVEV1JqVWVMaU4vaHU1cUpiVDlJMkJ4Mlo3dktOWEtmOEI3am9nSndwekZiejhsaUh0L2hxSkdSZWRXVElsZVhUNnRQOWpXQWdyL0kxK2ZLOWRHQ0FZeHZLbFNESU9oWXM0SWc5WnRFZkIxMmZpSTdLdXRXUXN5dWUzSG95WFJKTWxQeGtqaU1kbjlodjBmMytkbzBVaWZaV0dTMnVxRk1WM2pUWU1TVHY5VkJ1Yk1vZmVQQmZmNk9OdHozdk5DQkJHNVNjdWV3T0ZhVkNtR3RsZUpvUkJJNnRhRndhVmRjbXllUnlEeUJFdlBFUlY4OVM4NU5Md1ZEb0h1RitZeTIyTzIxN3kvYnlKSUtVNVZQVjJobFdYam9GMFBkREJONmFIUXZDa2NPb3JrMG1EemxtczhwYjI4V3c0bkNyQnRNd0tXbHJYdURXemRWV3h2ZVgrL3hHUEN4eW54ejZESUszRUFyNXZGRUFnMFZoenM1dnh3K1BJak9keXVVbktYYnJSaHo4Q2VoVDJUTlNQd2ZXREJ2YnRoRk1QWG9NRFA4djQraWNjVTFobzRnS2s0a0JjdE9KVERUVjFlS0p6ZExvUC83cE5EZHpWL0lZY0tXeU5iSzFzelcvdEluaG4zNmt1VVYyU0hJTy92anlBa2NwT1dQWUZET2RXaUN6RmFkWlA2TUREY1ZLZFBnbnFVNG91dDJOQzdJdUJHc1lLcjFPemViQTFzTFd4TmJHMXNqU041TnJZblpsMm95U0RLWnU1SjBUekorL3NpQ0w5VWlCRS9SNUUzWU5wSE9Pd2VPYllxQkpyV2g4SHBiZUZ3OFVNWmRId2loNnNIRkhDelFnbTNUVXJvcVJtK25IZHFWZEpuMlRYWXRkZzEyYlhaUGRpOTJEM0hZdTFzRDdCeDh5dTBzbC95L2w0SVlsaXdWamFLNFRFNHdCOVlkSk91VmJPV0hhZlVaRTZDb3l0RG9HRnRLRFN1ODUwR0RCT1R2WGM4MTRMaVhtSFB6SjZkN1FIdjc0RWdSczJlRk0yVGxXSllqRVVNMllKRDNucEU5eUlFVWZxcWRTKzI0TE50Tm9taEFrbExCRDBvOHc5eDJPZmkwQmRhZFNFWEo0Q0V3eElXVy9ZQ3J2MURmSjFkcHBVL3gzcy9DWUlyVEdpTE9Ha0dOdGtHYk9oeWxLU2pSdmNDVElTd3RiQTFzYlhob1RPVnJaWDNmaEhFaE9kd1d1UnoySEp4S0U0eXBnQlRja1Qzd25ITU43VzYzOEJZaGwyVFhadmQ0LzY5a3RtOTJScDQ3d05CQkIxN1VqVGZMVStMK0xGWkRQa1Z5cWJCOXA2S21Zc1NwajhzVnZIRlJleTkrSms0OWxsMkRYWXQzczlERUFSQkVBUkJFQVJCRUFSQkVBUkJFQVJCRUFSQkVBUkJFQVJCRUFSQkVBUkJFQVJCRUFSQkVBUkJFQVJCRUFSQkVBUkJFQVJCRUFSQkVBUkJFQVJCRUFSQkVBUkJFT1BDL3dGTnBCSUNzb1hGSXdBQUFBQkpSVTVFcmtKZ2dnPT1cIn0pKSkpO3ZhciBqZixaZjtmdW5jdGlvbiB6Zigpe3JldHVybiB6Zj1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LHpmLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBLZj1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIix6Zih7d2lkdGg6NjAsaGVpZ2h0OjY1LHZpZXdCb3g6XCIwIDAgNjAgNjVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIix4bWxuc1hsaW5rOlwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wifSxlKSxqZnx8KGpmPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZmlsbDpcInVybCgjODEyZGI0NjEyOTI2MDA5YTQ2ZmEwZWEyMzIxNGY0ZGZiMjUxNGEyMV9fYSlcIixkOlwiTTAgMGg2MHY2NUgwelwifSkpLFpmfHwoWmY9ZC5jcmVhdGVFbGVtZW50KFwiZGVmc1wiLG51bGwsZC5jcmVhdGVFbGVtZW50KFwicGF0dGVyblwiLHtpZDpcIjgxMmRiNDYxMjkyNjAwOWE0NmZhMGVhMjMyMTRmNGRmYjI1MTRhMjFfX2FcIixwYXR0ZXJuQ29udGVudFVuaXRzOlwib2JqZWN0Qm91bmRpbmdCb3hcIix3aWR0aDoxLGhlaWdodDoxfSxkLmNyZWF0ZUVsZW1lbnQoXCJ1c2VcIix7eGxpbmtIcmVmOlwiIzgxMmRiNDYxMjkyNjAwOWE0NmZhMGVhMjMyMTRmNGRmYjI1MTRhMjFfX2JcIix0cmFuc2Zvcm06XCJzY2FsZSguMDA0MTcgLjAwMzg1KVwifSkpLGQuY3JlYXRlRWxlbWVudChcImltYWdlXCIse2lkOlwiODEyZGI0NjEyOTI2MDA5YTQ2ZmEwZWEyMzIxNGY0ZGZiMjUxNGEyMV9fYlwiLHdpZHRoOjI0MCxoZWlnaHQ6MjYwLHhsaW5rSHJlZjpcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBUEFBQUFFRUNBWUFBQUFXSWJrcEFBQkFoVWxFUVZSNEFleVZUV3djWnhuSDF4N3Z6T3g2dmZhdXgvdGxZVndJcVNsZlZrVlRWU0hwZ1FyaVVKSGlsTGlONjZTa3JrSktTVTJiZ2xvUkJiVnFiUVFJT1BTQXhBRVFRZ2dKRUlpS0M0Z0RCejRFUWdWT2xmaFNoWkFhVUE4VkJhbzBmNTZYN1dCMzkzMW5kM1ptL2RyZS8wLzZuYUpZTzg4OHYza3loQkJDQ0NHRUVFSUlJWVFRUWdnaGhCQkNDQ0dFRUVJSUlZUVFRZ2doaEJCQ0NDR0VFRUlJSVlRUVFnZ2hPd3g0STNQd1I4NkxaK0E3MThOMXNyWi9FeUdrQ3lUYXcrSy9SR3p4bitKUHhNZkZJM0NIOHJaL0p5RkVnd1Q2dzVaNGRmNWIvTEg0Q2JuUWI3WDltd2tocnlKUi9xcUxnRnY5by9oWmlma0FNcGtoMjg5QXlNQWlJVDdkUThCYmZWYjhGRHhuMXZhekVESndTSHhmVFJodzZGWHhSK0lpWENkcis3a0lHUWdrdUMrMnhUaVdCVjZmQTBhenZjYjhuUGl3T0dINytRalowMGhrbjI4THNPd0NkMDRCU3dGd3BBVE1GNEM2QitSaWgveWl1QTdQcWRoK1RrTDJKSkVCdC9xQlNlQ21JakRqeDQxWmhmeUVoRnl5L2J5RTdDbTBBVThaQW02TitZWXhvT0xGQ2ZrZjRrZkVFZHZQVGNpZVFHTDZTbHRvZGE5endGdDlUd25ZbndmeVhZZjhlL2pPemJhZm5aQmRqOFQwZEZ0Z003bDRBWWN1eWxWK1J3RW9acnVKK0tyNFpRbDUwdllNQ05tMVNFVFB0TVdscm1rdkFZZCtNQURlT1FhTWR4WHlYOFdqdHVkQXlLNERtY3lReFBOaVcxVHpoV1FCaDU2UWtLK1h2MVhJZG5PTm54Sjkyek1oWk5jQXo1blZCbld3bUU3QW9ZdVR3SnhjOVZ6SGEvd2IrVTM3Yk0rRmtGMkJCTE9vRFdtaGxHN0FvZXJ2MXIxT0ViOEEzM21mN2RrUXN1T1JXRDdURmxCZVhBcjZFN0R5RHZHR01XQTBHeFh4RlluNHZPMzVFTEtqa1ZCKzNSWlB3K3RmdkZ1OXRRelVPbDdqejhIUEROdWVFeUU3RG5oT1RRSjVwUzJhdDQxdVQ4REtKZkV0bzUwaS9nYjhZZGYydkFqWlVVZ1laN1hCdkh0aSt3SU9QVHdPRkxKUkVYK1BFUk95QlluaXAyMmhqRWxFUzhIMkI2dzhXZ1pLYmxURTMwWTI0OWllR3lIV2dlKzhXWUs0MmhiSi9yeWRlRU52bXdRcW5qbGl6L2s2TXBraDIvTWp4Q29TdzFQYVFHNlpTQmJnMldyeWlJOUx4UFdJaVAyUkw5aWVIeUhXa0N0V2x3aGVhZ3NqY0pQSHR6NE5QTllBemlVTStmWUFtUGFqSXY2WTdUa1NZZ1Yxd2JSUjNGaE1IdkNucHplOUpDSGZVMGtXc2ZrU1h4RVhiTStTa0cwRjNzZytXZnovdEFVeGtRVk9CTW5pWFdrSk9QUkNEVmp1OFc4dVRnS0JhNHI0QlhqT1B0c3pKV1Ria0tYL3JqYUdBMlBKcisrWmlqNWc1V09ONXIvMzhuZVBTY1FUeG9pZmdldmtiYytWa0w0ankzNWNHMEZaNGxnS2tnZjg0YW81WU9XR2VGKzF0Nys5VUFKR3M2YUl2MlI3dG9UMEZYaE9JSXYrTjIwQWg4ZUJrMVB4MUVXMlZvc09PUFNCV204Ukh5eWFBaGFkUmRzekpxUnZ5SkovUjd2NE0zNzhlRTArVXU4dVlPVmFqeEhQNVUwUlg0YnJUTm1lTXlHcEk5ZnB2SGJwQzFuZ1dEbTlnQjl2ZEIrdzh2NXE1NnZlNm9rQXFIaW1pTDlwZTlhRXBBbzg1NUFzOXN2YWhiK3BDQ3hQcGVQZGxYanhLamZFMVVyMFIwRVg4VUlKeUdzRGhqenZFZHN6SnlRVjVQSmVJMHQ5V2J2b3M3bjA0bFdxYXhvM1lLVzYybmZGdlBRcTR2bUM2UW8vQzMvWXRUMTdRaEloOFU3TE12OUZ1K1JsRjdoOXNobE9Vc09BSDYzM0ZyRHl3VnI3QjZGVHhIY0VRT0NhSWw2elBYOUNlZ2JlY0ZtVytIZmE1YzZMUjB2cHhCdDZTbHlmN2oxZzlYOVBkM0hsV3lPK1pjSVU4R1Y0enJqdDkwQkliT0E2NDdMQXZ6UXNObkNvbUc2OHlvOVdlNDgzOUVLdGM4QTYzNUF6Ulh6Ujlyc2dKQmF2eHZ0elk3eHZId1ZXcHRMM1VqMTV3RTlPTnkrNTdnTVJGZkQ3eTBCTys3eC9oKzhVYkw4VFFyb0M3dkJVNU9WOVk2NFpROXJ4M2x0SkhtL28vZFh1TG41cnhITjUweFZlcy8xZUNPbUlMR3BEL0sweDNoa2ZPQmswZ3p1VnNvK21jSDFEUDFuZi9ERGNGY1BiakZmNFQvQXp3N2JmRHlGRzREdjdaVkgvWUl5MzRRRjNCdW1IcTF5VjY3dVJVcnpLZGZGMHhMV1BpdmhhMHhWMmp0bCtSNFJvZ2VmY0tFdjZ2SlY0MDc2K29lZXE1b0NqZ3I2MVpBaDQ1QWUyM3hNaGJjaGlMb292R2VPZDhZR1RRZk9pOWNPemxmVGpWVjZvdmZZanNSTEQxL202V1Z5UkQxM0Q5dnNpNVAvSVVuNzhmNHRwaXZlYW5GeWxQc2Fydk5TSDY2dThXTzk4K1UwQjN6eHV1c0lQMlg1bmhLaHdmZkZyeG5DVjErYWJ5NnlMN3U2VWZLRGFuM2lWVDA0M2YrdXBHSVlCTDh0SHE1alZ6ZVZudHQ4ZEdYQmtDV3ZpTHlMam5TK2tHNnJPMVVvenNuNEZyTHlub3Y4QWRSUHpkYU82MmJ3Q3o2bmJmb2RrUUpFRmZKZjRuREhjbkhpd21Dek1EM1hweFhwLzQxWGVWOVVIM0UzUTc1MHdmZUJXYmI5SE1tQWdreG1DN3p3a3kvZXlNZDZ4YkhOcDQ0YllpdzlXK3grdmNxMjYrVHluWTZnQ1hoR0xXZDJzdm1YN2ZaSUJBdDV3V1pidSs4WndsWUVMSEMvM045clFjeFZnWXh2aVZUNWMyd3hZWjZlUTM1VFh6ZXQ1OVVHMC9WN0pBQURQT1NBTDkrZkllR2Q5WURub0xyNHpDYjFYNG4yaXNUM3hLaCtwUndmY0tlaERSZFBjcnJQOWJrazYvSmU5ZWcrT3FtN3ZBTDdzeWU2ZVRUYjNUZlpDNENYNFlnQ0ZOeElFSkpSTFFjRkFsWUphRGNoRkJFS0FKQVFERWtnTUpKS1VpNHEzS1Y2cVl2SFMwbEtkMnFwTXJTSTAzaGdVcXgyc25kby9hanUwTTIzL3NNalUrdlQ1dWJ1VHZmek8vZktjTU9lWitRNDZzT2Z5L0o3UGVSeFpiRU9BS0xUaW9GMlJoQnZFVEM5TURLNHN6a3B6c2c3VFl5TmVscTRZLzBPa0Z2VHlNaW5BNjZuUDJLMnJ0SERyRnVPQS9abnMxaTMxQXl3cE5SK29YUGJFN01YTHdqNFlQTUJhUUpmNGVEMDhTbjNPYmwyRmhYanJjTGkrbGNVN0pnalFHRFlPVWt0MkVlQmwyUmRQZnFTU1dhc3k2WUN2Q2ZMNitESDFXYnQxbFJVTzFXYk1qNUp3ZzVocGhUaWdGaUdWeXM0b0RWNld2ampuNDZRUjlOUVFyNTgvZ09qeFVwKzVXMWRCUVNDdkVBZnFOZG10VytJSFdGeHFET0w5T3ZJZ0lWNUp3QnBCTHlqbTl6UWdqS0UrZTdlR2VlRWcxV0sra2NYN0t4R2dNV3dOVUNmalRRSG12YXNhMENuQXk4cWtlcnVBK3Z6ZEdzYUZBM1EvNXJJazNDQm1hbUZpS0syRXVwNlR6aGc5WGpuQXFrRWo0TlVWVW9EWFU4K0FXOE93UUJTS2NIaGVsdDI2SlQ2QWhsTHpZU3BsQTZiTElYaFo5c1V6MzBrdlp0YlAzRDd2cFo0RnQ0WlpRVUNZZ29QekQ3SjRSNHNBSzhMV0laWEtSa3hQbkI1dGVucXlBR2RITGVoNGdOZnJvOVR6NE5Zd0tmQjRSdURBTkdOK2xNVmJGMG9NbmRsWU55aWtPUUxRNnpDOExGMHhkUjh5SmN4amc3eCtuNlNlQzdlR1FVRWdyeENINVZWWnVFVStnSVpTWTFnMzZFd0w0dDN2UUx3c25iSGM5OVFEZW1JK3IrL3ZVOCtHV3c0dkVJWEpPQ2pmeU9JZEpRSTBocTJIbXAyTm1PMVJnQUVIUUpYS2pxaHlQOVJnL2swQnIvZm5xZWZETFFjWDRsMkxRL0tESk53Z1ptcEllZVBxeGFtVVhURjZvRXBwanc2OWs5b1BIQTh3NjNQdUdWeWtuaEczSEZnNEdDTG1HZG10Vyt3RGFDZzFEbmFqam16QzlNVHBjYXJKbG9qMHUydkJQSzJRZHc3L1JEMHJiam1zSUpBM0dnZmpFMW04VlNKQVkxZzcySTBHMHBSTUM0SjRlSmpnWlduUzBCODV5QzVndDVRS0FrSTlEc1cveWVLdExRQllaeEhZSm9WMFJBRUdISUJTYmZyaS9QZlVnM2txRi9BMzFEUGpsa01LOGE3Q2diZ2lDYmZBQjdDZ3hCeXdUUnJUak9tSzBZUFVHdmJNYXZxaEJqUDdjT2FleTNucXVYR0x1TURqR1lHRDBDZTdkY04rZ0R2TDlhTnQwcEZOeWJSRUVwdk1LbVFIUjFsMzdaM1J6SGN5Z25saVB1OXMzcWVlSDdjSUMwU3ZINGZnZFZtOFk0TUFxeXVzQTd0SkpoMElZTURpTGZtWHZ3WHdlTFUxMTI2THlMKzdGc3pzSEhMUDUwK29aOGd0b2dLL1VNeSs0TEo0cDRRQTFwc0lkcFBLTkdPNll0YkNaVGxhQS9EUllvQy9xTGZtK3MzSjkxSGJIN2tlUndPOE0zcVNlbzdjSWlnUWhTbzgvTThsNGVaakZoUWJSN3RKWTlqQXQrRFc2bzFiajVmbDFMd0VZSllucnpIMzJ2dmkwdStwQjNQSXh6dXJIZFN6NUpiTmhYaXZ4WVAvWjBtOEpUZ295OHIwb2RVQ2xaZU9LTUNBRFhCWlhyeCtDQy9MeVJubVhyOHpwcTRYYWpDdkRQUFBTc3hiUmoxUGJ0bFlFQkJxOGRBdlNlS3REQUNzQ0p1UHRsa2htekZkTVh2Z3Nod2VEWEI2WVNiZ000c0FEbGFaZDQvMlNPNTc2Z1c5cEpSL1hnRmhJdlZNdVdWVDRXRlB4MFAvTDBtOG8wV0F0UlhxNEJvRm01NVdIUFMrdUgxNFdmNTBXaWJlVko2YllNNzFCMFltUGtwSzc2NFc4NHhDM3BsZHh1UlJ6NVZiTmhTSXdteFp2RFg1QU9zcnJFZTdPU3M3b29saHR4UHYwK01BQmh2NGdFOU1NK2NlUGZITTkydzJpTGs2eUR1M1FlcTVjc3VHd29PZWkvbEJFbTl0Z2Z6R05ZSjJNeSs0Y2JkZ3VtUDJ3bVU1V0FYdzNudytYcFpUODh5NXo4NW80ajEvQ2FjSFdqQnZ3SVI4dkxON2hIcTIzTEs0SUNCTWw5Mjgwd3R0UUJ2SlRCc09kMS9jZnJ3c2JNTks0V1g1Vzl6TUI2cU0zNmNsa3Z2ZVVxQ1Yrbmw3S2Yvc1JHRXA5WHk1WldFaDNodGs4ZFlYcVlkckZHMHFPeER2QUFGY2xtZkd5K05ONWZHeHh1N1RpeCtuTFpHaGJEYUl1UzdFTzcrZlFQU1dVcytZV3hZVmZwMnZ4VU8rSklsM2RwSHhiYXNXTFJ2aXJaanVHQTFjbGtmSEFKeStSUjNnWjhjYnU5ZXVXQ2JnN0dqRlhPSG5uZUZaNmhsenk2SkN2Q1B4Z0wrVHhEdW5TUCsyMVlJMmxiWklZaXRSNFQxUUJmRDJISFY0V1Y2YVpPeCsyNUlmckMwcW9vVDU3bkwrR1lwNXU2am56QzBMQ3Z4Q01SN3U1NUo0NjR1MHc5V0ROcFVIb2dEOVJIQlRPWEdqZXJ3c3gydjEzNnN2bnNETGl4N01Nd3I1NXhnUUpsSFBtbHNtRng1c0h1WnRTYnpUQ3czQTFZQTJsYzRZTFZ5V0Y2N1hocGZsOVRyOTk5c2Rrd2FzQjNNMHdEdkxpOVN6NXBZRmhRZjdsQ1RlMmdMejRNb05IaHZPRnN4RERzRDc5RGlBczdmcUFEeFYvejIzUnhQdm54NjlvRmVHK1djcDV2VlR6NXBiSmhjZWFwTWszcHA4Z0NZRnVFYlJwdEtHNll2VDR6MVNEWEI2b1hhOExDZW02YnZudy9GY3ZFWXcxeGZ4enpNZ1RLS2VON2RNTER6UWVqellLOXpESGlVQ3JLK3dIaTRMMno3N2llR3lIQjROOE5mejllRTFBcmdyQnRBYUdVcUxpc2hCcmhKNWdQK2VldDdjTXJFUWJ5VWU2cjl3OFliOUFHdkM1c0tWR3JhZGlIZkFBWGdQalFKNFo0NSt2RVlBZDBRekFSdkJ2TGFDdjMzRnZIN3FtWFBMcEFLUFp3UWU2Rjl4RHpya0E3aTdYQUd2Z1cyYkNodTgzVEY2dUN3SHFnRGVtbVVNN3krQWI5Uis3MzVNVzBRYXNGYlE4NHY1Z0FQQ0RPcTVjOHVrQWxIWUp2R1ZCbGhVWWh6dVZnVzRMTjBPd3Z2bVRPTjRXVjZ2MDM3L25sZ0NjSGIwWWg0WDVKM3I5eUI2dk5SejU1WUpoVi9pV2p6UXkxeThVMExXd0UwZk1EWjRlK1AwY0ZONDN6QUpyMTdBblZFK1lLMmdXVy9aV1lWOFBNRFBVYytkV3lZVStBVWZIdVo1THQ2UklrQlRObHlWZU5YQWJVa080cjZyRkMvTHExTzBQMGNIQXQ0V0dZb1J6SGVWOGZDeTNFazllMjZaVUhpUW5kd0RMc1N2OXNweTdWdFhMZHdVM2o0SDRYMXJscmw0V1k3WGFudU8vcEdaZUhuUmdubE9FUS92LzRIb0xhT2VQYmNNRm9oQ0RSN21qMXpBQzRxdGc5dWFIRVNuNEQwMEN1RHQyZWJqWlhsNXNyWm42Y1dldEVjUzJhWWlTcGl2eStjQi9vcDY5dHd5b2ZBZzMrSGlIUmZrNHpVRHJ0UHdQdklyZ0ZQenJNSEw4dElrYmMvVEV4c0NuQjA5bU9NQkh1QmoxTFBubHNHQ2dMQ2NpN2ZJQjdBbXJIL3J5c0YxR3Q0bnhnTDh6UUxyOExJOFAxSGJNM1hMQU5hS21mVzdnSFBHWWw0SDlmeTVaYUJBOVByeEVML2xBdjd0WW12Z3RpYUhxdGNoZUkvV0FIeTQwRnE4TE05TzBQWmNleER3OWtobTlJTGVVTUhEeS9LN2RMUG44ZUw5ZTVQemR3SFRUdTFoMkJVMnJaVjdzRlVpUUxNTVhyMXdVM2ozT1FUdmk1TUFCaHVzeDh2Q1BoUmFubTAzQjdBVzBPbUFWNVJMQUJhbUVzNWVFK2VaVmxDYkdEYUZoeGZDaHYwNzkyRHZLbGUvZGRYQ1RlSGQ2eEM4Znp6VkhyaXBQUFZyN1J2NGdVZ2kyMVZFRHZNZFpYekFBV0VrSWVBVG5HZjZsTnJGc0NsczFrN3VvVTdNdDJicnNuVEg2T0VlR2dYdzFpeDc4Ykk4TVZZSDRPZ1E0dlJveFh4YnFjUUd6Z3NSenQ4cC9qTUpOMUhiY0h6aGw3Y0FtM1VwcDNuNW1GVmg4N1p1VzFvNkhZRDNjVVQwM256NzhiSWNxZGIyckYwcHdOblJnRGtGZUhFSkZ6RHhBcmtnOFZFNVJ1M0Q4WVZOMnNKdFhtMUkrOVpWZ3N1eU0wcVA5NW54QUdjVzBlQmxPVHhhMi9OMkkrQ09hR2IwWW5ZbTRQK1VBSHdadDNBWnRSSEhGb2dlTHpicEg3bmJkMDJGdVZ1WGhRMWFQekhlVjI0QUdHeWd3NnNIOEVNY3dIb3hMK0VEQnIvZ281bEJJU3FCTjVXdDFFNGNXOWk4NWR5bVhWK2dIcThhdUN6dG1JZmpkSEFQalFKNGN5WXQzRlFPVkdsNzloN3MyNDVvSWgwS2tjUE1BQzhyNVVNSkNCR2k3WHVyQXVBdnFKMDR0ckE1WjdoTmF3enJ3OHVEdXkyWm5oZ2QzaVBWQUtmbTBjTk5SZXZ6NzAwRG5CNU5tSk9JVjVaTFFha2ptc0ZlQmNBWW9aN2FpdU1LQXQ3eDNHWlZCNVhoYXNYYkdhWERlN1FHNE1PRjlHaU5BTjRuQVZnUDVrMlZVbEJXRWdFK3B3dzQ3eWxxTDQ0cmJNcGhick1XbFdqYnVxMHljTGNsdi9vRFJIai82RGNBZ3czMFlJMEM3a1BBTzZORE1ZS1pJUzd5OFpBY3NYK0pDR1B4dmorckFQdzllRHdqcU0wNHBrRDBlTEVwLzVyVHFCSTgyTTBhOExZcDRHVmh3MmMzM0lOVkFIOStFejFVcVJ5bzB2WSsrN01BWjBjcjVuRkJIcEtMQkV1a1R3WGVSQUxDVEdvM2ppbHN4Z0p1aytwQyt2RnU0MlJQekg2OGo0MEJPRFdQSHFsY0RvL1c5azREbUFlajhvaVZNS2NEbmxza0FVV1lZaDllSVlUMy9JK2NaeWowU1NFZW9IYmptTUxtUGNkdDBqM2w1bXpkZGt4SEpERjRkdUw5ZzJzQlR0OUNEMVFwanlEZ2dUZy9VdSsySzVwQW5CNjlXL20rQ2lra0w5aTRmWHU0enpBTFB5NWhQKy9adnFSMjQ0Z0NqMmNFTnVOU1RvTXFBK1pzM2Zaa2V1UDI0ajAyR1dDd3dUNkVuOXltLzdkSHFxVUJTMlUzQjdBUnpDTkZIcEwveFkvN0JCc1d5RGk4MS8vazNMOEF0Kzk2L0xoTUNmRS9NSDV2RmJVZjhzTG16ZUkyWjBhaE1ienRhV0hid2k2NEI2b0FUczZ3ZDRPZXV3UGdpeFg2Zi8vMHI3VUQ3bzRsK3JwTEFmS0RLaUUzbEVodDRRL0E1eEVzbXorL040RDMrSXg3N3hzUjdsYWNuOXRMcFo1dE5iVWY4c0ltREhDYjAxaHVEdDd0bVAwMmJkOUh4d0M4TzlkZXZKOHRCL2hxSGNDRmUvVmY0OW54MmdIdlRRT2NIcjJRMlRsVitLV2cvTDRscytmeGpNQnJ2OEs5WnpGdTN3MFZpZm5iVkFtUXozMnVGNm45a0JjMjRWeE9ZOHI5NXVCbDZZclpnL2ZKYXdBK3VObGV2Sjh1UytEOUJmQnEvZGM1TmtrNzRENEp3R293UzBGZUtybnBXTG9aT1BQbXp1c0hVWGhCOG42M0ZBL05JRXQxa1BmdnZxWDJRMXJnOTVaaEUzN09hVXh0Z1RKZUpianNpLzRBcHQ5Q3RLbGhQbG9EY0hhUnpYaVhBdnpkZlVPQTJYL3J2ZFpyZGRvQjkyTTZvMFBSQTVtSGVVSytIT0xqaUM1a2VPNEMzaWhlNjMzSis0elBUOHhiT3VENkl2Ni9EUWhSYWtka2hTKy9sTnVVSlNYR3R1NzJaTG90Mkw3WmcveUgxd0VNTnRpTDk1UGJFZXphSWJ5cGZMeEUzL1hldUNrVHBsckVlNktaaUkxZ1RnRm01eDBKeUNIK0RoSGZCYUxIcTIvejV2MGU1cExrOWFONDc2YktvZGxMQVY1ZUp2RTh3bUpxUjJTRkRUakViY3JHQ3VONHpkeStVZ044YkxLOWNGaysvaDJBTDlmazRtVmhXMW5QTmQrZG00RGJuNGE0WDJMcnB2L1pFK01EVm9OWkRqSTcveksvSEdLV3J6R3R1QVNxRk9mTUovaVRjQWRscnhuR2U2NnJTTXhaK2dKaGdCbHEvdS8yVURzaUszejVNemtOaVFXTTQyWHBpbG1ETnBWWGJpREFpeHYyeTFWOHZDem43dEIzM2JPTHNxQmk3d1ppUTMrbXB6OE5lQi8rLys3b1VNeUNuRUlzdjRuVGN4SHpLcVlYMDVhV3ZaZzNNUCt0ZUEyMmVlOExaODViTnVKSzdrZmxKTFVqR3J3ZXp3aDgrU3M1RGFrdE1JNlhiZC85Y2ZQUlV1TDlDUEYrY2E4MFhwYno5K2kvL21QVnVkczJlK05tSkFsOFR6UVRzUkptTFpCYmNPdFZpMm9SNjgrNElNRG15c1JjWmM5ZE91S2FmTjd2djZhMlJMUjloVnB1TTI4dTFvWjNPd2N2R3lBcjRMSWNyeVhBaS9tOFVSNHZ5NFZWK3EvLy9IWDg5KzNQd3B6OWR6MHlpT1V3cTRYY2dabFZDQkMwQUc0QlpuWlI3b3hKSVo1WnlMdk9UOVNXaUFEbk5YS2J1cUxjR0Y2VzNyaTVhRk01TnRrTWpQL1BYcDJBUjFXZGZRRHZRd2lUUkFnN1pNSmFVVlNxRnRzUGFhMElCa2dBb1VyeEU0cFdMWXBnWFlBc1FBalpaeWFJZ0F1eXVGQVJSVzNyM2svYkNpUmhFVVJFQWJXZzdDRGdBcTBMNi9mVjUzem41SjZUZWUrNTc3bjMzRHZEM0lEZTUvay9rNWxKTW5mZWMzN243ejd2ajNUR0s4S2Eyc3Zudk5CTDBiUVM0aXJwOVJBSExCSVB5RmdiMzk2R2tJdlM0b2UzRzIzZFc5cEU5OUlrRzhRQzhLQVdpditYMU1OdlQzNEFEbGtHd1U3WmUyUEVPeVVqL25CWkZ2VWdaTjJReE9QZE9JS1FyYmVyODA4WUN2amQzM2o3bk9WWlZxaXF5TGlMTTh5SW5UREhBdmsyaXU3eXBvUzBiT0llYlZwajR4QVkxU3E2YitDZWNrSThxclhxZjJmNzdja1B3SzlZQnBFUmlBMXZQbDNna21CODRiSXNPSitRdFlNVGozZkRkUVpLTzhCeU52M1crK2ZON3FLSk9HaE9SVkNOK0hSQVpvZjA1QXlqUVFjMEo2VG5PWVIwU1NHa05VWGRQRG1hbGpTZDZPdVgwZmV2b2UxNVZ6dGpuOGo3UnhmeDJMWXF3SGY3N2NrUHdPOWJCdEU5TlRhOExKSE0rTUZsZWJBcklhdHpFbzkzL2E4SitXZ01SVG5XSGVDUGZ1LzlNeGRmb3QvQ01CSGV3aUtuQXpLR1dNNWtrQUlwWW4rSS9lSVZjUm9LdU1KdlQzNEFQbUVaUk85bXNlRmxDeDB2dUN3ek94S3lQTXNIdkVNSitaQkMzRHFPNXc1Rnh1Smh6ZTNsYzErLzBodGdGdEhDY25RaGUwRTgxUUh4NU5PQW1MVzhGZkJTdnowbEZtOGdLUjBaQWlGWjZkN3hzZ1VxRGNhT0ZtN0sxNjVJUEY2V3pUY0JwT1BjWjlOb2I1KzdiZ2doc3pyUjd4NVV4S0dGU3hoaUh5QW5BckVBL09OVURQQXl2MDBsdW4xL2pnSWUzdEk3WHBad1BPQ3lRNEJteVNYKzRIMXZKQ0hieGlzeUxob1RXcW1aUDdyTisrYy8vVk9OeGxYQURnbkFNSEdDM0ZBUVg1Q0dBZDdndDZsRUErNkxBaDdkMm9vM1Z4TXZXelMzWURHNDdPZUh6aVhrcmNHSng3dGhPQWM2UHZhOE84TGJQYXpJMGdCc0E3czhhRFJ4aVV2SWZpR2V5dTlIQlZoR2ZOazVHT0RQL0RhVmFNQTNvb0RIdFBHR2w0VnRFbGROSzdlSlFOMkJrR1ZYSng3dittRkdlMzU4cDE2Y0FIOXdpL2Q3V2RoZGpUUWlQV0lwQllqdElPdTA4VFNYa04wZ1pnblIrdzBGclUyc1F0d25IUU44d205VGlRYWNpd0tlNEJFdlc1aUtZR3h3Ulo3cG1YaThMQi8rWGgrdlZpamlkNjcxZGk5djlBSHpDZXExYndTZ0RpT0lTeExZeHJxSXk4R2VZYjluaDFnQTdvY0MvczV2VTRrR1BOMHloTlRHM3ZHeVJIVFFadHB2eUFlNkVQTFc0TVRqM1RTS2tFLytvQjlkeEp0djhuNVA4ODZURGpwVlhDSXVpV01iMnlHZTZvQzRSRHJ3aTNrTE95SHUzeHdEekJMdzIxVWlBWmRaQnBDZWpPUE4wOERMRmlzV3VDS3ZYcEY0dkJ1R1U1UjN1Z09zRFoyMjhQcGgzdTdyNzMwMW1oY0JIUW1hUVpjNUlRNjZhK040SUpieHNsUUcrUjVEOWg5RWZFMExGZUNPZnJ0S0pPQTVsZ0cwYk9JTkw4djBZR3h3V1I3cGxuaTg2NGNTc25YczZjRXJzdmxHNy9lMzZDZDZzN05EelVCWEJHTnI0MWdRVDVGU0p1MEhlT2dYOEgxbTE4Sy9icWtDZks3ZnJoSUorSEhMQU5vSHJJRHpBZUFDRzhCbEdOS2dCbDd3TzIvMFNUemdMVGNUc3YxdUpIZEY4d2xNZ2x0NFZUWWg5M2ZTbktYTmpCbmlVTkJZcDFKTnhHNGhPeUZtdnhOU2ZBK0J1QkFBVmlFZTFVb0Z1S2ZmcnZ3SDdBVXZXNXpLb0hlNGRlMTdYdUx4Ymh5aHdPczFOdWkzM09UOVBsKzd3dHltVlZnME1VY3lvNUJQUnh0amlBdXhBMTV4Myt3ZThoMFEvd0M0RHZCemxnRjBTc0h4NWp2Z1pZbDRoQnZoajJ5VEpoTHYrcUZHTThZVnNFMFk1SGV1OVg2L1MzNGFuVmRFbmlVRzJ3RnhIV1NhY3FTUjQ0VjRHb2NiY2RvUDRIbEYwTmhqRUhHZWxCOEExd0YrMlRLQWJxa1NZRTI4N0pUVmFvR2dkU094eHpsZENWazNKTEdBUDdpWmtCMzNPdVFlUEF6a3JrbjA4UjUzaUQvOHZmZjdaZk5aZUlFOVNqSGppQXZRQW5PWXBqSm9nQzZEa0YwaVpvL3NRS2lFY0YwYzZ1eHZ4RjVUSWY0QmNCM2dKWllCQkFQVzlsWGhoWURab3JtQksrZjVueVVXNzRiaEJqNUh3SW93dkFlS0NkbWRxd2QrQjRDKzhYcnY5NzFtRUNGenUya2NsQmdPQldoVG80T2YyUUVRcGdseGpCVThaVWpLK2UrRTdkWTVxQWs1MDloVEpzVHR6WWl2VndLKzBHOVhpUVQ4dUdVQTdRTm12RHJ0eTFLc1dwaWd1blhoKzdVREV3dDQ2emlLYWdLUFM3dzdKeHA0RDVZUXNtK3ErNy8vZUR3aDY0ZDZ2L2ZWT1JUeHVab2c1TGtyTUtPQUFlVDZaS3FqYXZ1SVlzM3RFQmZKZ0NYRVExdW9BSGYwMjFVaUFjKzNES0IxRS9kNHA5S1VCbDIyTGxqcytlY25GdS83b3lqQ0NVWjJlTWluRk8raGNwb3lBN0dYUTJETFRiRjlCOWJFYkc1TzdXcUxtYTlEUkk3aTl5T2FtTzBnNis2UGtxQjU3MEhFREhCMmN4eHc4bytTL1hhVlNNQmxsZ0drSjBjQjYrQVZnTXVENm9XSjJPQmw3LzI1VitMd3N1Yjc1SzRvWU4wSXZQc0tPVjZRdlZQY0E5NStEeUViaHNmMlhkWU9KbVR4SmZoY1ZhQWpEZ2VxQ3JJRnFnTmtiSjBqeVA4U255bmZEOXRQazZVOUNGdjQ2blFNOEgvOE5wVm93Tk10UTBodDdMNTlXU3AwTmd1eW9DdzFBeElIbURYZnpvblJ1R25lM2ZsV3ZDd0hTdHdEWnRrMkxqN2Y2ZVZmRURLem94cWw2M1pHV3RteGpUVWEyUTY3L0JtVktzQWM4WlhOTU1ELzl0dFVvZ0huSVVNZ1pHSjdkM2haS3UxYU42akcrMERYQkxidk1BTU9CRnlIV01RT01IMy9ZQmtobjFWUXRDSUE4WjRDL25zQzZBUTl4SnRHRTdKdXNKRzNoL0I0K0c3c0VGelkzUUdudkE0Mm1GVklxK3lhMkE2cDNQQTJyYzQrSTV3WjNYTVk0a3ZQd1FDLzc3ZXBSQU1lZ1FLK3JhMHpYaGx3U0dQVFlJdTIrT0lFQWFZd3R2d093UXVRN2dTUkFYOWFSUEZXSXVHWTYxcDRndnNXM240UEllOWNTOGphUVZISTlmRUErdFZmMGtPeGl4V2lGOHdSTjIzcjhINFlRSFpxYlBFZTNIc3k0dk5UTWNCdittMHF3WUNUK3FDQWIyenRybjBMTThBQ2FjSVZDL1h5TDA0djJ2cDJ1d1p2WHl4eUc3TjIvVHhFc2NxUklPK1p6RkVxWW1wbmtHM2pEYXppWGhsbURMUXU1clgwZDErOG5FTkdtdE1KY3hYV3RBNVFaM1FrWk9sbGhEelNUUTA1ckhzWThOK1phZ000STRBQmZzWnZVNGx1NE80bzRHRXQzZUZsY1lVWExONksvcWNCN1JEenhtY1lObzhtWk5ja2MxREFFNlRua3d5Y240ZVJTSWdQbFhQOEU2MUkwUURRVzI2S3dwWHhZcS9wWUdaemVPMEtRaDd0SGwwWDE1Z2RJTStrY0ovcFNjaXFiT016bjd6WUhtbFlCUm41akVKcEQwTEVhY2krVFdsYzRyY3BQeEIvWnhsRXYzUnZnQ011NExMTTZHQnNzbmkzTGJicHQ5K05BTVl5RVR6UzdDOGk1SXRJTkNoaWtIMkZObUFuMm9TK3YyRUVJVzhOTXJKV1NxeVlWK1VROGxKdlFoYjFJT1QrVGpobUdCa3lmSS85L1JNOWpNT0J0VDM4bk9kKzV0ellZYnRHQm45YkZNUUIzOUVXdzh0eXU5K2UvQUI4MERLSW51ZTR3MXNIMkNWZTl0ckQzVTRQWEhtemI3emVqSFNYVFV5L2wwdlJoczJBNVdDZ2QrZVpXeHpEaXVVVGVzaXNHMFlCRHdaQlFHUGZWUmV5YU9ibFdZUzhURUUvL1ZQYTBCY1E4dENQQ1puVjJjQXBNcWNMSVhPN0dlOC9mYWx4QUN5N212Njl6Zjkrc1RmU3FOTGFoelhiZUhyUTJITXk0cEd0VllCLzViY25Qd0F2dHd6aTNGUWNyeDNnS3VRRVZjRVZZYWQ0UE9EQ2pRMDN1dGo4L3h5cmFGdUhIQ2doNU1zWlBGVkdkQ0FmTERNRDFncHYvYTEzUk8vYkJOa041aUg2bU9PZDE2L0UxN29PTEVRc3RUR0dXQVU0cTdrQ2NGSTd2ejM1QVhpaFpSRHB5ZTdhZDFvR3NoZ09lTm56WjNyR0RsZEd2RmJhL0t6UmROcFdBQkpoN2Z2bGZUd3pwTmhnRm9qM0ZYcEF6TFA1ZDRTc0dSUU5DbHJDSEdzcnh5dHY5bk5lOTdEVXhtRkZHeGNIbzNzUElyNzBIQXp3di8yMjVCZmdmUFEwdTdPZFBsNldzQXU0SWk5ZWZ2cmdpazMrL21nMVlEdlFCMG9KT1h3L3pjeG9MS0NyMUpnWjRsMzVoT3lZNkJ3TThZWVJac1FvNWtIcVZ2WUxjczBBNXowUWx0czRFMjlqRmVCZ0FBTzgzRzlMUGdGT0dvZ0MvdTlXSGdGcjRtWFAvL29yZDNEaHhuU0NLemI4dG5FS3JMa2dBRzdkKzNrRzJDUDNjOFFTWkJObWlGckMvRmtGLy84T2pZdWgzbjRQL1o3MCs2L0pNU0tnV2pBckd0a3Z5T3krbEFlNVpodUw5eUZnZ1hoaWV3d3Z5MHkvTGZrRnVCMDZrTDdwK25qckFhc1dTdkhlMy91NmIxMWR1Q3hyNmYvWWxXdUFyRXN1aU1ES24rOEVxRDh0cG5obmdVREk5MnRBQnBoWmsrK1UydDJTWE9RMWluZ3JQWHhXNTBRUm0rS2lsUzJRVHpOaXU3VVB5MUFWaUZtbUI0MDlCd0dQYXEwQ2ZMM2ZsbnhFM1BpZ1pTQVhwcmtESE5Kc1haamxXZXBOQUZzREl0YUJLemI1ZXlNUnNISUVZQkFHOGNoc25sbXhZOTQzVFFPeElwdC9SeEZuOCtoaVZyU3lEUGwwdGZHTUR2YjdJQ3pROHZmcXdFckFJd2hnbHF2U2NjQ0JScDM5ZHVRbjRGY3RBMGxQMXNkYlJGUHBFaTlMelFCM3Jhc0xsNFZ0OW85dVI1bzN6NHhWenI2cGhQeHJEczlzRzhpekpNaDJvQ25pUFZPOUkzN25Od0N4SFdZVlpERERSRUNlMlJFMEswQUtHMWRHSEVFUVQrUDdEZ0x1bG9vQjN1dTNJYjhCRjZLbjJwZzIrb0FyTlBDR3BmZHFCNnJ4MnJhdUF1NXFHTHJKZDB3Z1pIYytSNHdGYWQ5RGxRQXRqd0F0djY2TG1TSCtnaUxlWFdCL2VLQ2hnTGZmUzcvek5kYnY1eHF5aEJnbW5vaG5kY2IzZ0E1aStGNGgySHNNYjI1N1F0S1FmWnJTK0NtL0Rma0xPSkRVQndXYzAxd1BMMHQ1MEx3QXl1WU40b0E5dGE0Q0xzdTZZUVplT2ZWdzg1Q2Y4K3pCMWplelI4eGZWQm4zSUFORkkwSGVPczc0ZnF1eWpWaStjdzZDR1lNOHlBbzUzbTA4cDZ1Qk5TeXRkeGdnRGt1SXd4QTVmejVWQW54REt3d3Z5NjErRy9JWGNQS1BrdWtRVGxvRzg1TTBmY0JsUVFlODhEMyttZ0NzaFJlQnUwYlJTQ3diYjZBZzgzbVE5dDJKQU41ZlJNaS9IK1I1d0F6V0xtNHdmeDdobjUvclBwdHVpZ0wyQWxsR3JHcmtXQkZEd0dIcDRJYXZoekhJL1BVS3FZRlpMbStLQXc0MDZ1aTNJZDh2T29qbGxzRTBTeVprc2czZ0lwRFNEQnhwV0lHWHBUckxPMTRMM0d4elEyMjVGV2xlaDN3ZUJvQUZZaGVRNitPQW1YMk9WOFRyaDlQdk41QkhoVmtYOG1DSE52WUt1SXNaSTlxNkRvakxFTUJ0bTJDQVAvRGJUb080NkNDbW9xZmI2RmJPN2N0U25LRnUzbnJBbWVZczYyZkY2N1YxNWMyOGJid1pzQnhMTytjYllMOTZTRUxzME1oSFlBTzdhT2JQS25uN3cwemlFYy9oQWNNQmYzSXYvYjUwTmlzSEd0R0J2TVlGWk5qRVh0dDRaa2NjYWtUUnRoamlrbUIwenpHOFk5cmc3WnVTVk9XM25RWnhrVUNqSHVpQWVqZDFCanlkUjBZYUJuamxoV1I1bzArTXJadUQ0T1ViZThmRUtOVGRHdGsvemNBckI4V3NhR2VJMVJZeXgzeW9ncUxNczBhQWhYaGgvamsyQ3RnelpCZHQ3QmJ4akE0S3JFRzhiVEhFUldEUE1jQlhOc01CQjVKNisyMm53VngwSURzdEEycmJ4TGw5QmVCS0FUZlQzTHJ5SWduQXIvMHlOcnd5WElGMzFTQ041cFhDTUgzOU1JN1lGcklDczIxbUcyR1FENVVieldvS2hDeEZ2UGZlYVBwZEJ6aERYaTNQVGdNeWhyZ09zZ2JlZFVQNCttY3FzR29pbmlZQmJoL0FBQi93MjB5RHV1aEFacU9uM0sxdDlBQ1hnOGFOU0hnakVsNzIvTVhMQWQ1QkRuZzFXcGVsbG1idE1BNjJnQ2ZmR2ZUaG1RWmdHTmVRQmVZNTdzSVE3MUtBTlNVZlFLYlExLzNhQ3RnUnNzczJkb3VZZlZhRXIzY0VhVmFzYldYRUZSSmd0dit3ZlpuU2VLN2ZaaHJVUlFKSnZkRkI5VzZxQmp3ZHBDd2p1aUJ5ODhxd1daNjdUSUhYUmV1dWxQQ3lWbG8vZ3BBOUJlYllJV1poWUw5NWhHWXUvWG11RmJNWDBLeVZJZWdqVWlEaWcyVWNaNjQ5WEhqUG45eER2MjhPLzk3OHU5ZnFRTTVXUTRacklSQkR3SFdJaDZnQnI4aUtnb3dneldxTG1MOVhLZ0crdkNrT21PNVh2ODAwdUlzT1pyZGxVSzJhRURMVm9YMVppak9zcDJrWXdnMmFUK2NuTDQ0UDNscXdlVmsyamxLakZZMExmOTVieVBHQ2ZDMGd6OVdEN05qT3NKa1ZMWDJnbERacm5qbktKdWJmWWN1dDlEc1A0T0Z6a0NHN1JWd1AyUVBpTi9xWU1Tb1I4L2REQ09McGZKOHh2QVh0Q1dtZWpBSGU0YmVWQm5tUmxLUUlldHJkME1vZWNERlBwZUtFbGZHeTV3dTZ4NmQ1SVY2MmtkKy9FVFN2UnZzeU9OL01JK1RiZVZiSTlhMzhzRHF1TVF2UUNPUURKVkdnc0hsVmlOblBiMTluUmh3ejVFSFdOb2FJeFNPRytLWGVPRlFWNGhBUGZENE5sTVcxTGZIMlRXbGM1cmVWQm5tUlFOS0Y2TUIra21ZRlBCMEJYQjdFRndyaUZhQWY2T3FNZDFXT1h1dldiMkNhemJkd3dQbDRaTUNmaHluZStTRHpETkFZNUc5Y3RySWphQUVaZ1A1MGV2VGVka21SNzUyOTl2SGQxaG5VZ3NOdHBRdkVxMk5FL094bDZyYkZFSWNreE9VUzRNNHBHTjd2YU5GMDhkdEtnNzNvZ05aYmhwWktNNkVkM3I0UWNFblEycnhpNFVUeml0ZXJNczBuZnp6dzF0QnN1VFhhd1BVdERBTGZZNkFQM3ljQmxtS0wyVVVyYTJPbWlQY1htY0ZpZUdIZSt5Mzk3djJONzIrQjdOREdTc1E1N2hFL2ZoRS9wRFVSaDZTVThMM0Y4TjdhV3RXK3IvdHRwRUZmOUhTN0hSM2MxZW5PZ0l2QmFScVc4QXE0OWFHdkxldW53SnZ0RFMvYnhCK09vVEFuUzFBTHpLME1OLysvWnRzRE5rSEdNRDhTYldiMi9yY0xDRG02a09aUit2TkM0Mi9aZTY0Z1U4UjdDNjBOdkV2Unlqc24wYm5rcUJGRHZJNXQ3SUQ0TFJ2RUQvM1lmR2pMYmV2VXdrVUE4TVZwS3NERC9EYlNvQzhTYU5TVUR1a2J5K0JhTlNHa0VBRU04YktVMjV5NEVkREtEUEFydjRpOWVRWGM2djVSd0h0VmdKR3d4ank2d0lDbkE3a3VFbWIyMnRISENEbjJoRG9NTlB0ZHUzYUdzSS9RZzJYdkZQdm1oZGw4czNrT2FCc1BOTGV4RW5HMmU4UnJhYW95eld1c2FsdXNvY3NCNER2YkVwS0s0dDNodDQ4ejRxS0RtbytlZnRlMnNHL2ZFcHBTRGJ4aHZ0QlBYMnBzbEZVNmVHMWFWMnphNml6ZXdBWDZZYWpxR25NaGIwODNrT2NiZjNmc2owZ1dxU0d6UThNSk1zdmhtZncrODQzWUFkNlZSMmMyaU9PRndkcDRnTG1WSVdSZHhHc2x4Ry8yVmE4MWlsaHE0UkpRRHYvVlZOVytmL0RieGhseGtVQlNEM1NBSFFQT2dGa3FOZkN5ekR0UEQ2OUlEWVNMNEdYWmZBdmQ3Sk5CSEFBTGhQVlpvTi9JN1BlUFAybk9NVlVBN3FOUEdBY0hneXlpUXZ4RlJJMjJEblpCRlBtbW00MTUxTS9Fb1kzamlmZ3Z2WkQxMWtSY0dUVDJFdHRiZDlQMlRVUHhIaUVwamRMOHRuSEdYSFJnLzBBUjM5RFNHWENaZE1MS3A3Rlk0QmtkK09heGE5NEJPTjVxR1M5OVhOSGYyTVFtd0NDN0M4eGhHNyt1UVIrVkVPdGdwcThkLzZNVnNCWm1EdnFiZVdiRUt0QUh5NlI3VjdWd0xwM0hRUE5zYW13UWkvbkdBL0dpSHRZMURtc2lMZ09BZjM2T3FuMkwvRFp4Umwwa0pTa2JIV1RYRkJ3dkJGd2luYkJ5ODlhSHZ2YlhYd0c4MlhwNFJidUkxbVZ3VjJRWmVXKzBSZ09EOXhoZUVSU3hBak1EZVB3cEtRenVZaEFCZWJHQjFnTGNBVEhFdkwvUWFObmR2RzNSNzBYejdraGpEakppdEkzamlIaDJaeXZXaUhTUVk0QlppdmwrR3RlR2tGUVU3MWUwZlZ2NmJlS011K2pnTnFPSVI3V3lCMXhLVXc3d1JpUzhZWTZYdmJma1VtdjcxdU1kZ0RkdmpRSXZ5NGFSZXUwcklob1lpeEx5WXhUZ0VwczhoVVQxK3BNRzRtL21Hdmw2TG9jNzE0ejR5S3pvUGU4QmozSSt2b3NERmdGNG5SRFhJb2hYY2NTcmJCQXZ2MXBDS2pXdUNtNkk3eE5SQ0QzU1ZPMWI0YmVGTS9LaUxUd0NIV2lIQUNGRkV1QVNDVEJMU0dwZWJJRWY2S3JHVzdlNU5QQldBOEJ2RHlkazcyUWplK3pDTnp3RGVmd3hOV0lNTW9OM1lpbk5NOVljZjVwbmlYNk9DY1NQU0prTFlGUEVoOG9VelNzMTh1b2g1cm5JYlJ4dnhIL3BoVFN0QXJFTXVZVGp2YVcxQ3U4UkVraHE0YmVGTS9haUE5eUNEdmJhRnM2QXkwSHJXZ0NEMS8vV3g5ZzBLeVc4TlJMZWFvRzN2N1Y1bC9QSE5VT2pnTzBpSUg4N3p3QXNSd242TVk1WGprQ012U2JoaHMvRnowY2Y1MmpucVRGLzlhQnh6NktKVlczODNtaWpGZUY4Vm9qNXhZaVlBVjROQUxNOGVpRU8xYW1KSzRMRy9wbEcweW1nQWp6RmJ3Tm45RVZiK0RwMHNHMmFFREtsdlQzZ1VzV2lSakxOc0pkY0VtMWZpTGRXd2x2REh6RzhiTU95MUF4VVk1WEQzbVBOZHVKeEl4aGtHZlR4eFlTY2ZJN24yV2hPUEt1QTdTS3MzYitGZ0JITW4xVkk3VHZaMnNqYjd1UnpBWWlySWVLczZDeE5pQWU0Ujh4K3A2cUR1bTNaNnlGRkM1ZndBaGpjWElWM0wwbHBsT2EzZ1RQK29vTjhDeDF3MzJiMmdNdEFDOE1UV1R3WGdHZDFOamJTU2llOFdmWjRsL2NqWkJsOTNKM24zTHdpLzVvZEJhd0QrZVJTQUZpUkV4eTBXOWpIbDFEQTgwRVF6Rjg5Wkc1Z0xMdnl3WHhreFB4UmlSZzA4VW9GNGxVQThVdTlwY1pWdEhBSU5DOXMzMG50Q0VsUHhnRUhrbTcwZSsrZkZSY2Q1Qy9SQWFmUjNObldIakJMSlZoSXVMaDFnUGxyTC9jR0c0ampGWUFGM21vTnZDemI3MVlEbHZObEZZWDJoQlV4aXBuKzNxbm5qWndVc2NQOHZBWjJBSjdsMkNJSnNZeVo1a0N4dFhYbGcybk5OY1pNSUdBbnhEVVE4UUExNHRVQThjSUxFTENLRmc3Qjl1V0FMMGxUdGU5YmZ1LzdzK3FpQS8wek91anpVcDBCbHlzV2x1R044RWFlZjM2MGZaVjQrenZqWmZsZ2pEN2dRNlVHWUJFVjVMbzhSZkgrQmNtZjZkK3kvQW5QQ2QwOGI0RCtkb0VDTWMvaCs4eFl4WGVCcjYyL25zNmluM3ZFdFRMaWdRQnh0aGt4K3g4UmFWMURHb2pyMnBkbVpDc1YzdTlvYWZUMGU4K2ZWUmRwMHFnVEhld3hkT0JEVzFqeFFzRDFMU3cxcjhBclhudWpUN1I5cThXbTZ1OE9MOXUwNzQ0aVpOOWtuaW4yZ05uN0RDZEVyTUo4Y3FrQ3NBcTBDclVEOW1PTDdRRi8vVENIV21CRkxMSnh0REVmR1RHR0dVTmNBeERYSWkyOGlnSis5aklFcWdDTUlCYUEyZDdJYjA5SXF5WXF3QS82dmQvUHlvc090aEFkZUxOa1FpYTBzd2RjTGs1bmpqWE04Y0k4Y1JIZXZrcThWMXZ4dnRtWHRzTlEvUVptK1hZdURsakdmT3A1RHZRRjhQZ0NlSzRaQnZpVWxKTXc5SE9PTHVSTnZBQnY1UDNUekkwclo5UE54anlXZVVSY0F4Q3ZSQkN6bjJkMXRrSU5RY1FJNEhKKzBGK2Nwc0s3bjZhcDMzdjlyTHhJOG8rUzZYQS9SQWZmUGRVWmNBV3l1QkJ3RlgzOWIxZVo4VmFEamJaQ3dtdHFYNDZYaFQzZms0KzByUUx3NFJrVTBhSm9WSWovOTBXYWwvaWpJcWRVZVVFUkJmTGppdzNFcGdESWg4cnNENlVQeG5EQU1TQ3VsUkN2QkloZjZNVVA0cUErNGtxTzk3cVdLcnlFQkpKeS9ON25aL1ZGQjl5TER2bzdkUGc1emUwQmwvTkZoSXRhRDVnMzh1TVhHaHVvMnFsOXBjMHA4SXBzSGFmZndKOFdtUUdqbUJkeHZKbzVaWWZaRGpuLytlU2ZFTUFnbjRmdEQ2aVB4a2Juc296RFhjYm5KbVlJQWE4QUIyYTFoSmdCWm84UThRTmRBV0FGNGhCNFBjVDN3VjN0Q0dtV3JBSzh5Ty85L2IyNFNLRHhESFFCMG1qdWFHc1B1QnllMEFKeFpoUndGYzNyVjJyaTdZZmovUWR0OFEwajZZYWVZbXhxR0JYaW8vTW92RCtxSVo5NmtyNy9DczJyL0ZHVlY2V2ZhVTY5NGlJdjA3eGs1RGo5M0dPUEdwRUJmem5EL2xCaWdBVmU4YmdNUWJ3Y1FReGJXRVpjeTlzWEhyNWhtd2pFRmZTeEtJT1FqZ0VWM2oya1NWSnp2L2YyOStLaXd3N1FiRVlYb20wVFFxWmsyQU11bHhzNEV6UXh6Znp6dkxjdnc4dFNQY0NLMTVJcFVlU0hxd3pBSWhiQVR4SHlmNjlGSTNDNmpSdk1KNVpHQWN1UUQ5K0h3eFhmVFFEMmlyaGFRbHpEOFRMY3N6dWI4VVpBQzRjZ1hQQXoydys5bXFyd2ZrY0NTVmY1dmErL1Z4Y2QrQ1YwOENmUUJia29qWkFTQjhBVkFDODh6VVhZS2U4V0x3VE1zbTA4M3NKWTloZFNORStZRWRkSEFQNnJaaUQwMTd4RFAvbWlGYkNJQ3JESWg3Y1pNL0NDdUJwQlhNdXp0S2RENjJaYUc1aXQvN0FXS3J3czVYN3Y1Ky9sUlJHUFZ5N0tWYzNzQWJOVUluQlpxb0xHS2Y5bVB5dmdaUUN3SGQ2LzA3dzlnc0lVUURVUWZ6VkhBWmhsQ1NIL2VaM21meWhNcDdoRVhnOGR5WEY2ZUJ4L3pJaUI5Ly9iS3hQb3FLbzhqZGVwTEZVaGJJRnNFRWgzSTlCdWpVZ0NFZG5sMkI1eCt0Qk1ud2FscDJmc1liUVZHSHJTRXlLN05Fc1dDTUxCVmhCcEVCcW1aZDlDSUd3YUJoRkhIY1paZEJ3UkJXU1owVG1pb3hnZzRadnY1cjFYZGV2bGJSV0NEK1IrNS96T1MxV3FrdmZ1L2YvdXAvRnBtYlBBNy94VmRDM002eFFqc1VSTUM1c1FFbGZ6dTJVNXNYczExOXpDSnNSQlBTWWRhR0VyYncwQ2dhRGZzM3pUaGh1dzBWYmluNmM1Q3p4TFA2RkxiRmh4dTcyODV2WTF5eXNRQjhCSHY5VmJXS2JZZE5WL1BqMk5NcTJNRWlNd0c3aStTcU5PNHZKT0Y5eGt0L3E4OUwzYU5WR0JaZjU3cnJQQWI0K09YWk5HRWcreGtQZytrOFNtRmw3YVBWYmNFcGNXRm52N20wd2dMY2xPM25NSUJiUDhudUdiT216aFZ0eUkvN0Rjb05RazdmUjFFbmkyTkF4eUF4dHNMbkJ2WDNsUURZRWJyZ000eUk5WUNDeUxiT0xMUlJUenBTZ1JtY1hyWGM1Y3Jyb0tiQTZBaXh1c0JUNDdVN3B2aTJjNzhyUG9PcmhKdkcrd3U4VHI4eHNmc0ZieXpqR3VsSGhTTnBBVHNwUDNNbWRua04venE4SWduUEJEYnNoNXk0MXFRNG5IWlRnTGJKWllGbmhCcmphSThiYXZrRmV3aDUvLytPK3RaYlhpOUZTS3N5Slc0Z2hDMU4wZWtNWGU3VkgwWFRxbTl5OXRBNzU1TVJZaDhLbEpEczlCZ1dzZWpLNkZuY1NSOVRSSkxBc3NycnY0dmZKT2pRVXVzWkZYTUozeWRrMnhreGVVOTNHLzUxWkZDamRrR0RlbTNuS3owcE9Cd2t4cmlXZDdrUGo1YnQ3a05RdThTNWY0elZFYytHSm5aQUUrcjdBUnVKSlVOeE83VFZmemV6cENhclBBWHo3cmZBaWRtS2l2eFlBNEpiWm9ZZkh6NGk1UldaM2ExMEFjekQxVDdlVU5KeTd4ZTE1VkxFS0p4OWx1V29jUVVKVGxMUEFjYVVoS1RheitrVFprZXp5Mjc2NytzZGRqZitzdWNRUzJXKzB5QzRIWmh2WDd5SDZKZlJwMWV6MndwMm5VcmlUTG93Si9XcXExck55NDh1di9mQ0o2ZUZWYkNOeEk0aUhSdzlFczhZbzdySnZYU3VJNStqN210M1NTdHhyaFFLTGZzNnBpRTI3UW9yZ2tubVVTZUk3TnNKUjJCTmJuZTVCWEVuaVhmcTBpTmNQaUVKaWNtMmtoOEFhVHZEYlU3YlBBVG1vUDhsOWNwUWxzU0h4cXNuTUR2L1Z3N09IVjFCWmUxOHVidUFidThoNUZPS0cxM3pPcTRoQUVBa0UyOFJwSGlRc3puUVUyUzJ5MGNIa25ZRXRCck1DN2JkcFhsdGZnNkY5RUJiVWJmbG5pOHhVVWFKVWs4Qis5Q2R4STZIZ3h5VjhyQ2Z6NUFnZDU5U1krY0wrK0JvYkFYaVVlSEcxaHNjNWxIYlYxdDVLM0pHNTVqeU01bU9YM2ZLcDRDSklDU2R5d1N0dk56RWdHSmtnU3o3YVFlSzZOeEJXVWVIdGZsL2JWTWNUZDJVKzdpdmYrYTZ5M0JtNlFtVEpjV0VJSlYyc0ltZXVyeUN0TjRJREZhMUpuOElyMDgvN1lueSt1SkgrZ3dHemYwMU9rKzdQZy9TZjFaKzF2a25pZ3M4U3l3R0o5NStWNGI5K1oyVUNQRms3eWZrQjVjL3llUzVVNGduQ3dCVGR1bisybXBsSGlYMmZZQ3p4SEdwQlNFeFdkdFNHTHAzMkZ4SUs5OXdFZi9aMDNpUVduSjFPZUY2TVMxNjhuTlRxdk5qTVc0dGZ0MGVRVi9HKzUrLzBlSGlFZFdEWVNWMHRYY3d0djQ3ck83eFI3Y0RvSlBJUHlka3R4a3ZjVXdnbGQvSjVIbFNiRVZlSldTY0RvZHNBc0Y0RWJCaWxia3JnakpjN1ZoczFLWUxPNHNzQ0NBdzhBSjRxOFMzeG1HbkJwaFNSeE5YRGxIM1VPOHZWQlNlb21VSGRRcDhZRTM3dThYWlAzcTkrNzMrZUhFMktmM1UxaWN3dHZLWWlWMTZsMUJVV1pRRzdZVGQ1Yi9KNURsYXVJTHZFZTIwMU9JUSsyc1c3aHVXYUpKWUVGWXRnMjlZa09wVHlzNXVhVnFTUTF3emowRTRGUGl1MlI1VGhyU1B4SDhpZUtXNk1MZkVoSEY3citLb25JckhOcERWQzdERGc5SlhvdkozWE1yMThiSHZ1Y1pvbGxnWGViV25oRFBsQ2UwN2h4N1VRZW13RzBUM2FTOTdpUzl6c1NibVlJb1lSTkRwc041S1VDTTdMdFczaXVORWlHd0dMWTVuSG8xdld5Rjlnc2NlVzltc0E3N3RVa1BsbmtMTEhNMmFtVTZVVmQ0azBVOW5BVGVZM2ZQNlFoZnBiZk54Qy91MXpKOWwzTy96dmR2WDNmZmN4YTNpcHBQZXhhZVBXUHRQVjBrOVpnWkJxUTZyQ1g0Y1Qza0J6TThYdnVWSm94Q0FTQzNOaGxqaExuaG9IQ1RIZUJTM1I1eS9SR0x1UHJWWGZHRHFvaHJpeHdwU1R4RHAwRER3QWZGV3B0SEJGaW91bTExTWluSndGZlBhdEx2SVd5dlU2TzZGY3poNXRPL2F0czM1WEF1YWZkNWYzNHQyelJJYkVDZTJsaDhmNlNidG9hR2dlaWs4Q3pTTDlXVHVJS2psRGU5bjdQbThvMUNwdDRPamY1aXUwQXRFNENScVZaUzF4aWJtRmRZaUd3NFBtdW1wUlZOZ0liN0pBRUZsUnorRDhZWjkrOFZ0SjhWc3FHcEdEMW0zWHAzckRoaUEydjJ5UGtyVjFCZWFmYjMxUGszbmpRMUR5a0hVcFc4aHJYbUJhbXZGdnZBUlorVDVkWHdrN2dJaDZzUHdpN3lidU50UFI3eGxTdWNiakpENU1ManNQUU94V1ludTNTd2pvTkF1c3lMK2dNYk15M0Z0ZE80TzE5TlFIZStVczJiTEc3TkEwOEJaeVpBbnl4RUtoYlMvRU9rSC95aUNHM3hlL3ErWGUrWEt3MXZaZjdPRHdpK2h4Mnoyc2NhSWJBYSs4Q3lqdEZEMEVuZ1FYaVFCVUhxN084aXhFSUJQMmVMWlZ2S1d6aTN0ejBrNDVEa1prTWpHbnZUZUpJRzVOeXZsNXhtM1VybWNWdHVMS050aFZvMTROL0Jwd29wRUJQU1JRN2M1WWluNjhBTHEyamdEVVU4UzBiM25TQUxmNDFENEp6VDB0TlA5RWFvM21Gdk1ZemVKRjRCeis3cEpzdWE4ZkdBcHZGRlFkb1hxcWJ1QmU1bDQvN1BVOHFQZ1NoWUFZSFlML0xnQUFGTFlGcFdTNEN5eExycmJ3d0YxamZLenJFbFI0RUZ0ZWQvZlUyZmlwKy9tY1dXL2s1b0hZVFpUNm9pL3UyTmZWSCtMbWQvUHd5SGdJelBEWS9PVkhFZytZaFNWNUo0a29iaVYvbU9sUjBsb1ExQ1d5Vzk1ZnRnUFJrTjNsUFU5NitmcytSaW85QklCRGtJTXdpVnh5SHBSMkhhV1NhdThTR3ZKRTJKa3ZaT2xzTHRPR1dCVzRZL0w2YXVBWkNZSVBxKzRCM0gydWF5QTFNWXFOU3pFL0xnTThXa2tVNnoxRDBPZHJ2NDJsNkllK3g4Y0Rlb2RFRFJ6NklyRnBZZk9hRjd0cWF5SWRjUkdKSllMR3VrM2xRM3UzYXVvTDlQSUN6L0o0Zmxlc2tDQ2NNNUZDY2NoMmNyaW5BMkhSVFkxaEozRUdTbUsvbjVRQi91STJEZjQrcGhXM2tGV3pwbzdIdmZ1RGZ4MXlGeU0zQUp4T0JmeDRkUFhBaUF2ZU5iZUNHRnRibFhYTVhXN2VUdmc2bXhwVVJhemlIL0tRdDBDYkpUZHpMM0t1cDR1RDFlMlpVcnJNZ2xOQ1dBL0tTaDlNZjZOTVNLTTZNU2x6cTBNVGwrZ0NMYXdWRlhuazdHL2tlN3dJYlZBMEUzaHdGSFAvTnR5dnZ2LzBLMkQwNDl0NGlFaHZ5U2hKdnlBTVcveUQySURNM3JpenZvKzJCbkpDWDFqM0dQU3J3ZTA1VXJ2TndTSVp4V002NERsUUwwcjhWTURtcmNRdkhTS3pMS3lORVhuNHJzQ2svVmdpendGdjE2K2Jlc2RjOVF5bnp3OEN4OGRkRzJ1TVRnTGRIYStJMjNFY2ZHNEdOZzRnQ2IrWm5sblNMTnE0aGNLa3NjRWY5d01zR25rd0hmcGppUmR3cjVEa2tCMVA5bmcyVkd5UjZHeS9SaDhkZDVIdlp5Qk96NHBQWTRMa3V3Tm9lalNXUjIxY1dXQ0RFRjJ3azIvc0JyejRFdlBVSThONWp3SW5DK0lVOVdhUjk5NDJmYTRlRC9EOE56QWVNSWZBbWZ1NkY3bndXcVhHTlp5NDFDU3dPT2lIdUhTMjhpQ3Y0QU9HRUFYN1BnOG9OR29wY3dDRTY2bW5ZVXNqZHFjRFlqUGdrbnFjaldua1pSZmhUVDAxbXJ3Skh5QU0yOU5JUW42MGFCT3o3TWVVZUJod2FEcnoyVTRrUlFBMmwzM3MvRzdTL0p1Rm1DK1I3MkdxU1Y5em44N2RvNHNiSXF3c2NXUU5kNEVmYkE3ZW1lQlgzR3pLYmhQeWVBWlViUEFnRWdoeWt4OGs1ajhNSGZDOE0vSGthOEhTSHhoSzdpV3pJdktRcnNPcE9DcG5mV0t3R2dYdWJCTTZQQ3V5R0lienh2VTBXLzZPUndHVGQzY0R5VzRGbmNtUHZQZkpzdXNCRzQ4N0lCb2EzQlRxRXZJb3JxT0xCMmQzdmZWZjVqb1ZEMVJyaGhKa2NzSzg5RDJOcUVwRGZFaGlURHBURUliSDU5U0lLczVSQ3I3d04rSWU3S0dGZTR3WVc3MjJRV3RoUjRMeFlnVGZxQjRKWjRIWDg3RXQzYUlmSmdrNzZmVW4zTGpkdW1kNjJKZVJ2Mm12UExaN2Z1N2ovd2pVZTZ2YytxM3pIdzBITEpBdmpFbG1ReG1IdTE0ckRMY2xzSmJGZEs1dFoyQm40ZlJmZ2hXN0FDb3E5bXFLdDdRRzgzRk9UZEwzT092MXEyY0w1MnUvRm9TRGFYdnlkcGZ4N3ozNGZtSi9qZkc5bEVxSnRuOHdBQnZMNU1wTGprVmJ3SVEvR1gvcTlyeW8zV1JCS3pPTHd6U2ZuNHh4WW9CVmx6a3NGUnJVRHBtWjVGOWlMMkFZVkZQQVp0dWJDWEszQnpZaEduZC9SL3Z1TzR2Sjd2OHNHZnNYNzc4dW1iUmUzdElKakZQZXZFUTRrK3IyWEtqZHhFQTZtY1JDTE9aQ2ZOR0dJTlhKQ2JHZUs4RWdhVUp6cExMS1R3RzYvY3pza25CcDNOb1g5ZFRyd1FHdWdXd3JRb29uUEdrNDh4UFVhaVVBZzZQZmVxYWhFSXBxRWcva3pEbWdWdWRKa21RVnQyZEMzVTVJaHJkalNsSG84eFptVjNUUkJuYVMxKy8yTUxFM1c0VzJCQWg0czN3OERLVmZ4UE9IRUMyUWxRZ2w1ZnUrVGlvcHJFQXJtVXVicEhOcjNyMHJrUm1JbkE5MHBkczlVWUNpYjhDZHRnQkdVN05IMndEZ0tONEZNb256VGJKaENDak8wejQ3aGQzN0s3dzdqM3hqRWc2SkhDNkFMUlcyWjFIejNHMDQ4d25WNEFza0piZnplRXhXVkpvV3RjeWNIZVM1NXQxbGx2bjc1VnpLRDR0N2k5OXFycURScktITVg4Z1FIZkR2NTZqcVFyVG1vSjRmSVJQRjhmcSt4aXNxM0VpUUZramp3Z3puNHZ5T3ZrQXZYZ1l4ZU9VNldzV1Yvd1dkSTkzc3RWVlI4RHdLQklHWElKK00xT1JLUGtOcnJRTll2U0RVcEl5TVJDdWI0dlZZcUtqZE1LRXhYaXZNZ0tTTGxaRHM1VE02UVMrVEtWUXBhUi82UEhDVlZaQkVwSkQ5V3NxcW9YT01nSEVpa2JOMUpQektJRENPL2NHQXdHVUI2STVUWTF1LzdWMUZSVVZGUlVWRlJVVkZSVVZGUlVWRlJVVkZSVVZGUlVWRlJVVkZSVVZGUlVWRlJVVkZSVVZGUlVWRlJVVkZSVVZGUlVWRlJVVkZSVVZGUlVWRlJVVkZSVVZGUlVWRzU2ZlAvOVk5L015WmZIbkFBQUFBQVNVVk9SSzVDWUlJPVwifSkpKSk7dmFyIFlmLHFmO2Z1bmN0aW9uIFhmKCl7cmV0dXJuIFhmPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sWGYuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IFFmPWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLFhmKHt3aWR0aDo2MCxoZWlnaHQ6NjUsdmlld0JveDpcIjAgMCA2MCA2NVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHhtbG5zWGxpbms6XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCJ9LGUpLFlmfHwoWWY9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtmaWxsOlwidXJsKCM1NjBjNTM5MDdhM2U0NDdiM2ZlYzlmNjNiMTQxNTc5NzUzMzgyNmI3X19hKVwiLGQ6XCJNMCAwaDYwdjY1SDB6XCJ9KSkscWZ8fChxZj1kLmNyZWF0ZUVsZW1lbnQoXCJkZWZzXCIsbnVsbCxkLmNyZWF0ZUVsZW1lbnQoXCJwYXR0ZXJuXCIse2lkOlwiNTYwYzUzOTA3YTNlNDQ3YjNmZWM5ZjYzYjE0MTU3OTc1MzM4MjZiN19fYVwiLHBhdHRlcm5Db250ZW50VW5pdHM6XCJvYmplY3RCb3VuZGluZ0JveFwiLHdpZHRoOjEsaGVpZ2h0OjF9LGQuY3JlYXRlRWxlbWVudChcInVzZVwiLHt4bGlua0hyZWY6XCIjNTYwYzUzOTA3YTNlNDQ3YjNmZWM5ZjYzYjE0MTU3OTc1MzM4MjZiN19fYlwiLHRyYW5zZm9ybTpcInNjYWxlKC4wMDQxNyAuMDAzODUpXCJ9KSksZC5jcmVhdGVFbGVtZW50KFwiaW1hZ2VcIix7aWQ6XCI1NjBjNTM5MDdhM2U0NDdiM2ZlYzlmNjNiMTQxNTc5NzUzMzgyNmI3X19iXCIsd2lkdGg6MjQwLGhlaWdodDoyNjAseGxpbmtIcmVmOlwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFQQUFBQUVFQ0FZQUFBQVdJYmtwQUFCSS9rbEVRVlI0QWV6VmEyeFRkUnpHY1VlTTRqdVI4TUkzSmlTK1VCT1NzM1VzdzhrUUJTVWpiQ0JPWUJzYklDUjRtNXJaTlVnR3ltMlFnQXpDSlRybEVra2tVV0NBaUNZR0RJWm80dWt1a0YxZ2MwSEdjQU1HYk4zR3R0TCtmTTdXaEFXNjAzUFcxbitCNTVNOE1VUUtyUDE5ZXg0aElpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlKU3pWMm9qWFE3dGVjd1RTL1VKdVBYTS9IZmVkaUNFTXNML041cGVHMGlOZzYvZmtyMXowUDB3RUZZbzQwNHNhWFlScXdNSzhkYU1EOG1FVnc3Vm9mOWd1M0VDckIwQkQ2MnZDQitoT3IzZ2lpbUlaU25FY3dNYkNWMkdHdU5jS0RockF2N0hmc0N5OVdkMnZPNnl4R24rajBqVWdZaFBJTXR3dlpnRFRFUXFkMjFZVWN3SjZhcGZqK0pvc3A0WXVIUWs3RmlyQ1lHQW96MFdyRlNiSWJicVQyaCt2MG1pZ2pkcVNYZ3FOZGpGNklSVHNVS2gxU3RUcFNhVGNsU3UyV0NuTnZ4a3VucXRxVkl6ZVprT2JNdXFmKzE3bVh4MFlpNUE5dUxwV09QcWY0TWlHekIwWTdDOGpFOTNCZ3FWenFrYm51S1hQaHVzbHorZVpxMC9aa3VIZFd6cGFkcHJ2ZzZja1c2RjRqY0NtKzlMVm5TZVQ1VHJ1c3pwZVhFZExsNFlJcWMvMnFpbkMxT2lrVE0vMktic1hHcVB4Y2lVemhTRGR1TmRRL3JhVnFVSVBVSXAvblk2M0tqZktiMFhjbENvSGxCTnR4WUYxcmNuZGY0Mm5QRmMrNU5oSjBtamQrKzNQL2tEaVBtMDFnV244b1VNM1NYSXc0SG1ZNmRHazZ3RGJ0U3BmVmttdHo2WjQ1SUY1Nm9YWGxEUkdzMzNFQ01QV0V1U05UZXE5bHkvYThNdWJEL2xlRStwWTJuOGpLM1UzdFM5ZWRIRDZueWd2Z1JPTUpzck5yTzhSb0gzM1J3aW5ocTNoQi81L3hBdElGd3c0NDNBc0hhak5uWXJVdnpwT1hYTktuYmxpSzZ5MWJJSG13RE5rYjE1MGtQaVVDNG1WaWQxVU90V3Awb1RZZW1TRmQ5cGtobjdxQm9yY1NyT0ZyVG1PLzk5eGhQNXl1L1RaZmFyUy9hQ2JrYlc2czd0ZEdxUDE5NmdPSEFKdUhRS3F3Y3BSdFBvb1pkcVhLeklrUDhucHlCY0llSzE5WlQxd2pvQTVIZTVTSjlhMFM4bTBSdWI4VjJZcVVtTS83L0Rtd0xYck1SSzhiclYyTEw4R2Q5aUQ5elNVU2Z5djFQNXFhNTBsUTJWU28vVDdRYThrMnMwTzNVSGxmOVdkTUR4RjJvamNWaEhiUnloSldmT2VUUzRhblMyendYd2M0Zk5KdnhEbzZoNXoyRXRoN3g3Ulh4SDhWK2lzNThoN0I5QTdGN04rRHZ4SmRFNzd0aFBaR04rVDI1Y3UyUEdWSlRNc0ZxeUkzWUxOV2ZPOTNuakNjQkRxa0k2dzUxZEdlTGsrVEt5VFR4M2NpK0sxeTc4UTQrZmp3VnZkdWpGNnpsc0E4ZzZpOFI5R29FblQvc2tJMmZ6MU03VytxL1RyVWE4bkhzV2RWM1FQY2hIRTRLVmhzeTNQVkpjdTMwZFBHMzU0aDQ1a2N3WHV4MnFmcDRod3g2QjRJdVFyU0xiVWRzckt2eExXbllQY2xLeE1hWHA2dkNxVDJxK2lib1B1QXUxRWJpWUVvd245bGhuVms3WHE2ZU1zTEZFOWNUaU5jVHdYaU4rY3ZVeHhweVJ4RHpONGg1eGIweER4WHlvSis3c3o1VDZrc25XZ2xaeDE1UWZSOFV3OXhPTFI1SFVtMTJTT1hMRStUeXNkZkUxNVlWQ05jazNzNGc4WFpaak5kWVQ3NklkeXVlZVBzUnlyRVlpTlZLekhneTl4YmFpdGpZemFwWlVyMHgyY3JUT0Y5M09lSlUzd3JGRU9NZ2NCZ2ZZejFtQi9UM25rblMxenhIcENOblVMdzVRZUsxOC9RZEt0NkZkMjBSd25nSCt3aFB1d0xNaFgyS3dJdXdWVmd4dGdrQmJVUHdwZGcrN0h0RWRWUk56TWFYVHQ5YS9MdVhXSTdZai9lczlVU2FWQlFsaEFyNXVPN1V4cWkrRzRvQk9JUlJPSWdqWmdkemR0MTRhYS9NUUxqWndlUDFSRHZld0hvWG1hL3Y3U0JiakwyUHVCRzhkdzBDMzRLNDlpS3lzdjhwNXJLQkw1YWVwWllpTnRiWG10WC9aUmtpNG1Zc1ZmWDlrRUtJTndGSDBEamtrYmcwdWZqRHErSnJtM2NuM2c0TDhYWmFpVGN2Y3ZFR0RkZGszc1dCNVdNckVIWEp3QlBiLzJNVVF6Nkt2NnZrM3BDN2cwUnN2Rjk0MzI2VVowalZxa1N6aUc5am4rZ3VSNXpxV3lMNy9tT3ZUc1BpS3JNOGdEK2pyYTB6NDlMT2g1NXh1clhIMk03WWpqTlZMQWxJRWhKQ1IySTJFcUNBZ2lTazNXMlgxa2dJSmk3Wk5DNVJPNjVSazZoeGlkbmJyY2VPamhxN2V5WktzU2RBSUNGQUNGdXhGVkRGVWxXbno2MEZxdDU2Mzd2VnZYV3JnUGQ1enROUEUrVGU5NXp6dS8rZ0RnN2VpR1ZsTFVmNXhoaXdsS2Q2NE9Zb243NDB2RGFKZUNXREZhbzczRWx0ZjhFRFdpM0ltTWkyMjBRaEhtazNRdDNPbVVKcC9CRitqUDllNjUyYVBDRTQzTmNhQjc0Wnk4bGFpTG9kTTJDa05Tc1FyMFVodk5ZUTRCV05scS91UWN6ckVmTmJibmhLUW5ZY3hQZmM2TDYzQUdLdU9vN09oK0sxVVh5SVRZajRaMXJ2MStSUjhaanlkVC9HUWU5akxZRnBqUjdhdmt3QjZNa2g4TXBOWHczd0tnS1hWbmY1WVA1VVFjaVk5RU9yUElqWmdMbXluakZBNWJQVCtCQ2Z3OUpydldlVFI0V0RYK2VmNEhEL3pCcCsyWVlZNkQrUkN0QnJ4TW9SU045YytlbHJvd0JXQXE5cWNHbDFOOVpteFBlQmNwQkh0bUV2YmhORTdPaktoVlB2SlBJaDdzTkswWHJmSm8rQ0J3ZDZKVllsYStqVjIrSmh1Tmt3aHJjM2hPa2JjWGg5eXZYOGh6Q1pYMFdFbnlpUXh2dncvcXQ1QWJzS2U5MTZaQjZZQ3BpSWg3Rnl0ZDY3eWFQQXdlUzlGb2Q1aW9YM05IN05uWjNaSHJ5MDlNMFJsNzc5Y3RKM3BYakE0UVEzQURGWG1NcjJaeERoUVFYUytBWHMxMG8yWWxlL2wwRlB5V0lvZVRTS2hkaUJzNzlYNi8yYlBFRWNIT0oxV0Uwc3ZNMmZKQVAwR0gzd0d1bnBhOUU0ZmNNVkx4WHk3ZmovTjduVE5LZzBmaDk3OUZ2ZUZPWjZiNjNQZ1BKTnNTekVYQlZvdlllVFI4Yng0RzJtRGRWVW9JT09iK2E1OGZZUWVIdEZwSzhjd0dMU04xTHhCaUQyUXQ2SUVBOEVBZmtQMklOQzNoVG1hcmcxRzQ1dmplTkRYS2oxUGs0ZUNhY29YM2N0SzNsTmhYcm9QcllBNFdhTFNGOEdZRjY4Tk1BeTB6ZVM4QVlBOW9YOEZHSThMQi95OExPOGdMbXltNDFRL1hMQ1pCSkgrc0ZCWGNQQ1c3dzJDbnBMRm5ud2lnR2NTd0RXT0gyMUJpb1hzZXMrZCtHL2IwT1FuOHBEUExJZGUvc2JYc1NPcmh5b2ZYTUdIK0lIdGQ3UHljTnpjRUEvd3pyTndtc3BXK3lQdDRmQTJ5c2lmU1VEbmlEcEt3b3hkNjhIQUJ6dnlrTnMzNDM5dklNSm1KdU5zeWNYYXQ5aUluWmkzYXIxbms0ZXlpbksxLzBURHFlQ0YyOTNkdkNBaGZBS0FoN25lRm1JeVR1T3JFZkloNlFqZG55RVBiMmJDZGlGR09mSWc5aU9sYTcxdms0ZW40TUR1UmpyejB5OHBTVGViQUt2a1k1WERtQXJVVXFrcjlZWWxVNWhidzNlaGFtNlhRYmlBOWpiKzNnUTUySVM4eUsyWWlWb3ZiZVRCMDl4Z2Y1OEhNWSsycUJNaFhyb0xWbmt4aHMwNEdVeUFPY0pBeWFYZXJ3QUZwUEMzaDRNUDRZb0QwdEVqT2x0ZllBSjJJdTQ1dFVFRnVLT29uemRMN1hlM3dsL2NCRFBVdkVXNktENzJIeUVteFZHZ0NkSStrcEtZVzhmN3NFMDNpVUQ4ZjBVd0dPSTdXWWpWTDBZejBKOEVoRmZydlVPVDlpREExakJHQXgwZkozaXdVc0RiQ1FBNTlBQjl4R0FKZUZkRVppK0V3MndsQlFlVGVNdGlQTXppWWp2WXdMbTVqalNrZ1VWVzZheUVQOVBjWUgrZksxM2VjSWRiSHc4MWlCdEtPYytTUWJveWdvL3dGTHhUa1RBcm8vY1F3aHp2d1RFQjdEL2R4S0l4d0J6TmRpWUFhVlBSTE1RUDZmMVBrK29VNVN2K3lrMi9TeHRHUFh2emdUb3pBb0R3SG5CQTlZYW54cUFSU0htZW9VZzdUc2xJUDRRWi9DYlFNQ2ppSE9nNy9nU01CWHFXWWlYYXIzWEUrSVVGK2pQeDJZZm9RMmhlbHM4T0RzTWJyeENnSHNKd0NSZUM0RTNhTUFySnlaZ1dTbnMwN09SRjhRakh0bmhuZ3NETUZmbTcrYXpBRnV3cG1pOTMrUCtZSk1mcHcyZ2ZITXNqRFNsSWR4TUFieVRnTU1mOEVyLzNnMDlqa0EvRllkNCtIbGV3RncxN2t0aUlTN0N1bERySFIrM0I1czdIY3RPTnQ1VXFJZit5a1ZqZU1NQnNJMEFQRkh4S2dHWSt4Z09Qb3hBRDR0RGJGdnJqNWdBN093MlF0WHY0MW1JbjlaNno4ZmxNZVhyTHNYbW5xWTF2ZjNMdVI2OG9RSXNsTDZUZ0JVSDdPcnBmUUNPL1NJUWY0d3p1WnNBN0k5NHVNa0FKWTlGMHdBN3NCSzEzdmR4ZDdDcDIybDRUKzJhQWRDWnFUN2cva25BcWlFV0M5alYxN3NROFlmQ2lPM3Y0OXlXTXdGek0rLytZU0VyaGV1NXdOQjY1OGZOd1lZbVl6bkpSbGRzamdYN3VYUjFBUGNwQzNpa0t4ZjZUaHFnODloaWFEeVFERFd2ejRDS3A2WkMrWk5Ud1l3L2kwVEFRKzNMb1BMWk9OY2RxbDVLZ0RONzVrRDcwWVZncVRMZ3YySGZob05KWVFaZ1Y5Mk9RSGNMSXg1NmpoY3dOL3VHUGJOWmlGL1RldS9IeGNGR1hveFZSemJZVktDRHZyS0ZicnhoQ05qV2xBV3RYOTBDZGJzU29XeERER3RKWEZYMzlxeUlCR3orUHBYM1hpWHJvcUQ2MWVuUS9Ga0tXR295d01sQlZRSXcxKzhCL0cvc3V3UVFmNGEvZng4dllFZEhsdXREU25sL0xqQm1hcjMvRVgrd2ladG95OUcwZnpiQ05ZUVY0QkZ6RHJSK09RK09iNDNqWFd6Zk9ybDlCZ3kyNWtRa1lPZmdyZEQwaDdsZ0t0U0x1bXZwK2hob09QQnJzRFptU3dOc293SG0rcjVTR0xIOVBaem5NaVpncml3Vmk2R29nUHJPVlZnWGFtMGdZZzgyNzVkWWcyUmpLNTZLQlVkclJ0Z0F0alZrUXNQZU9WRDhpRjQwM05vZGlkQmZheGhiNEFnRTdLM2h6dVhRZEhpdUszSEYzci9tdGVuUVc1bUdXT1VtOEhJZnhEdjRFZHVlNEFYTVZjTkhzMW52V3FDMWc0ZzkyTHpQYVUzdExWcmd3YXNpWUlzd1lFdmxVa3pRNmFLWGxrdXFNM3VTd05xUUZaaEFFUXpZV3lPOWVkRHk1WHdvMnhncnVpZVZUMCtEOXU4V2dxTi9oUTllS1lCRkpMSGpJTTR3anhld3ZTMFR5amJFME42eEgrc3FyUzFFM01HbXBkQUdmbnJYREFDeklmU0FmUkQzbjB5SG1sY1NSQzlwNmZvWWFQN3NaaGcyNTQ0dDZUZ0U3QzNuNEsxZ1BwWUtKMTZJRjkyajhzMnhZUDdySWc5ZWlZQzVEMm8vaDNnM0cvSGdaamJnSG5kMS9YVSs2LzEyYSswaG9rN3hLdjE1MkxReXNwSEZhNk5nK014U04yQno2QUdQdEdlN0VsVHNVcDU0UGg0Ni9vTHAwcmQ4RE80RUFPeGJsaG9EMUwwOUMweHI5S0o2VnJYdEpoZzRaWkFCR0djMGdIMjBmOEJJNGIwRTNrREEzRzdVdkhJVDdiMGNXTkZhdTRpWWc4MWFUaHZ1dVUvbWpPRmxwckE2Z0h2TGwwRFp4bGhSUzNqeXRlblFXN0hVZndsdEVnR1BJOFRjWFFaYmN1RE0zbVF3RlFwRDVyQzNmSkVDVGc2cUZNQXV4SGNpMXYxMHhBTy9GUVJzUGJrRWlncW83L1dsMWk0aTRwVGs2MzZFemFvbEcxaTJJUVljcmVraUFETVF5d1dNLzl2ODZWeldVUDNUNDZXYm9LOHF6Yk5vZWZ5QUoxQUsrOTVwcUMwWDZqOU1FdFhQR3Z3UWpuVG0rdU1WQXV4Q2ZDOGlQaHdJMkxaT0VEQlhaOTVMcEg5WVZ1dG1hZTBqN0E4MjZsWmE4OHhmMzR4b00rUUQ3aVlBOXdnRGRuUVpvVzduVE1GRks5OFVDMTNmTHlZV2JSSXdEYkNyOEs3OXB6T2hHajk0UXIydGVISXEyQnF6cEFIdXc3TGVqNGdQRW9EWGl3STgzSlFCeFkvb2FlL3pyZFkrd3ZvVUYralBwNlZ2eFpPeDRHeExWeGN3Z2RodU5rTE5Ld21DQzlid1VSTFl1M0xjUzBVbWhZMUFQQkVCVS9CNnk0a2Z0YmF2NXlPV0tONGVsejRSRFFPbkROSUE5K0ZIZU9CT0FQdXVNY0FERDRnQ3pPMUs0NzdackJTZXFiV1RzRDNZb0V4YTB6cS9td2ZRa1JFeXdJN09iS2g1bVQ4ZHlqYkVRRy81RXA5RlVnRHdlRVRNQTloVjJBZmIyV3c0L253OFArTEhvOEY2SmxNa1hnOWdyaXhZMWdleFZvOTlvSDN4OWhKNFBZQkh6aG1nZUIzMXcvSzUxazdDOW1CemZpQWJWdmtVcG05N2hnL2dERlVCTy9IbnRXL000RjJtYXNROTNKcnR2MGcwd0ZZQ3NJMEFQQkZTV0FSZ3JoeDlLNkQrZzluOEg4Mk5zVERVbkMwZHNLdHlKQUhtcXVsQUV1MDluRmczYW0wbDdBNDJKWUUydEk2djVycnhLZ280bXdCc0hBWGNzRGVKZDRucTM1c0Z6dDVjejhJc0YwQ3NBT0JJUml5RTF3ZXd0MXFQek9QdGYrVXowOERlbFJNU3dFT042V0FxMU5QZTR3MnR2WVRkd2Fic0lSdFZ1ajRhSEMxcElRTnMvbTQrNy9JMEhVejJYeFpCd0NzSXdIbkNnTWRUQ290TTM5SGlQbkRZbzg3dkY3UGd1S3B1NTB3QndMa0VZQkp2RG9IWEdJRFh1enYxNzg2a3ZZUFZsSys3UW1zellYT3dJVC9GR2lJYjFYdzRDZUdtandIdUlBQUxJZTdtUTJ6MFEyeXRTNFBpdFZITXBUbDdPTm05SE1FQ25pZ3BUTHVEU01CYzlaUXU0VVhjOXRXOFFMd3FBQjZvU21XOXcrKzBkaE0yQjV2eE1Oa2cweG85RE5jdkNRNXdsempBVHZ6NWlhMXg3T1E5TU1lekVCVEFnb2hsQUk3MEZKYURkM0FNcjdlNlRLbGdLcURQcFBnUlBWanJEUlM4eXdpOE5NQkdBbkEyRXpDM1E5WGI0bW52VUttMW03QTUySXdxc2tHbmRpUUF0S2VIQkhEeng4bE12S2ZmU2ZUNW9pOVRKb1VIeDNrS0MrRVZTTi9Sd3Q2MUg1M1BuTTJKRitMQnlRRlZHYkQ1NkR6V084UnBiVWZ6ZzAyWVJtdE83dyszK0FCT0p3Qm5LQURZamRoYXU5U1Y5dlFGaVFOSHB6RjR3RXFsY0NRZ1ZpaDlYVDN6OUsveElQc0QyL0pGQ2dFNGx3Qk00czBoOEFvRGRyUVpvR1JkRk8zNXIycnRSL09EVFhpUmJFejVwaGh3dHFXSEJIRDF0bmpxWXBROEZnVkRUUWIzRXZndUJRMndJT0k4ZVNrY2FZakY0SldRdnQ1eVluK3JYMG1nenFsNExjN3BiS2FFOU9VQlRNSHJya3lvM3oyVDl2eU9vb2QxRjJodFNMTlR2RXAvSGphaG1XeE04NkVrTjE0eGdJTkFiRDU2Qy9QTDNuVnNnV2Z3dVFSaW1TbHNVekNGd3hHeFhMd0M2ZXV0NFZZamxENFJUWjFWM1k2WkVnQWJDY0Rab2dCYlNoZlNkeVZmbDZLMUk4ME9YbjRHclNtMjZrVmpnTnNKd0IzS0FIYTBaMExaK2hqcVVPcDNKL29NWGlaZ3RWTTRuQkN6M2srQjlIV1ZxNS9Mb2F0b01mT0QyMXUreEdkR0l0SlhJbUNubWJrdmIybnRTRHZBcTNYUGtBMDVzWFVhb2sxVEhYRHp4OG5VUmFqWU1oWHNIZG4rdy9jRG5Fc0JyR0FLUnhyaVlQQ0tURjh2WUs0YTlpWlI1M1o4YTl6WW5Dd2lBUGNRZ0VtOEJHQ3VHajZjUlh0MmEvRXEvWGxhVzlJS2NCWFprSlpQa2hpQTB3bkFHVElBdXhFUE4yVkE4VnA5d0RCTWhYb1lxRjdxSGpRSldLMFVqbVRFUWVNVm43N2VjdlRrd3ZIbjRxaUl6WDlaSUFEWUtCNHdnWmZiSzB2eFF1cHpzZUswdGhSNnZQbTZLYlJtMktvV1NnY3NNWVViOXN5bURxTDF5TTJlQVFzQkRpS0ZhWWpGQXVaREhFcklmTzhRRkY1aHdGeVByZlhjQnpncVlIN2xUOGFDc3lkSE9IMTdDYndpQVRzN0RGRHlhQlJ0ZHpabzdVbUw5TDJiYkVURkJqMUE2MUlQWUJyaURBS3hkTUJERGVtdXBDV2ZYZnZHZFBkUXZZQnBpUHVrcGpBRHNTMUNFZk05TnhSNFBZQzVYbmNjblUvOUNMZC9jNHN3WUtIMFpRRG02dFRPR2JUbkh0UGFreGFBOTVHTk9MTXpEcUJOQ3VBTXlZQ2I5Z2VtYjluR0dCaHBNZmg4b1hOQ244STJ5cUxMUmF3MFpqbHdXWGdIS1hodExMd3JxSGk5ZGVxZHhJQlpWbXlaNmtsaEVuQnc2ZXN1QTVpL1RhRUJ0aGZsNnk3VDJsVG84QlpFL3gxZXVwMXNoUG1MUkRmZ1VjUWs0SFFSZ05tSTdXMEdLRmtYNWZkTVU0RU9MT1dMZmRMWEI3RkZ4UlJXQXJGWXlISXdpLzI3aXVBVmtiNzlnWUR0WmlOVVBEVTFBRlQzRHd2RnA2OUV3TU1OUzZuSmo3VkFhMWVoQTV5dit4V3RDWU5seVd6QXpCUTJpRTVoODdmekFwN1ovSEd5WjVCR0FySENLUndzWXFVZ0sxVjg3OExFdTFJZVhrcjZlaitlL2RWTHdiUkc3emZUdXJkbUNLU3ZrWTFYQURCWGxWc0NQeHBZVDJydEtuU0FWK3Z1SUJ0UXVWRVA5bFB6Q01CcElnQm5pQVpjKzNxQzN6T3JYNG9IWjdmM1MyeFVOb1g3eGFUd0Nub2l5VVVjQ3NoQ3oxY0U3d3ArdktPQTNUTm8rVk9LMzF4TmhiaExIZG1CNmRzYlhQcDZxK0g5UkJyZy85WGFWU2dCdjBrMjRQUnJNZUE0czJBTU1DMkZPd2pFWnZFcDdPek1ndUsxVWFQUEsza3NHb1liMC8ySHFXb0toeEN4MHBERlBHK1E1MzFwOTZQaHRiTHcwdE4zdFA4NGo1T3ZUL2ZicDk2U3hSTFNWd0pnM0RIenR5azB3SmJpVmZyenRMWVZLc0RsWkFQTzdaa0d6ck9MK0FFelUxZ1lzTDBsdys5NTNkOHZHQnRlajR3VXRnaWxzTXFJeFVLV0MxckszMVlMcjRqMDlRSWVhYzJDc2cweG8vTTFmemMvK1BSbEFMYlZwTklBZ3lsZjl4OWEyMUw5NENVdndzdU9rSmZ2L2lJZW9DV1ZBamhOQk9BTU5tQWZ4RlV2eHJtZTFiaDN0bWRvSk9BZ1U3aVBBamhveEhuOFFLUkNWcko0NGFxSk54QXdONWZlc3NWUVZJQ1FDdlV3Y0RLTlAzMTc1S1d2dDBvZWphSWh6dExhbCtvSEx4a2Q4T1hDcHR1T1RmZkh5MHJoRGdLeFdVb0tHOEJTdWdpY0habitnTVdrY0RDSWFZQ2xJaFpLNDFCQ0ZucVBrT1BOSFowTGg5aGFteFpFK29vRFhMMHRuZ1o0azlhK1FnRTRqN3g0NVNZOURKbG1BclNLQU14TVlXSEE3dklNeVRzNDJTbWNJeEt3RE1UV0lCQ3JoVm5NTTFsd1plRmRMaG52YUZIeEJwbStmb0F6b0hGUElnM3dJYTE5aFFMdzArVEZhN2RGdzFCSklnOWc1VktZQ1ZqVkZGWVNzVVRJY2tGTC9mdHE0dVVGVE1PcmJ2cHl1OVorWkM0TmNJM1d2a0lCK0FCNThjWmRzVEJjT29zT21KYkNIVnFrc0pHZHdwb2dsZ2xaNmVLRGEyUEFaZUVka0lvM1Z5UmVJd1d2bVBTbEFYYnZtc1UwbndaNHBDUmY5eU90amFrTnVJaThlT3ZlcVRCY251UUdMQ21GTTlncDNDa2xoWGtRQzZhdzJvakRFTEpORE53UTQ3V0l3S3RRK25JMWRDcVZCaGhNK2JwcnREYW1OdUJXOHRLZG44ZkxCS3hSQ3JNUTl3V0RlSG1RaUZYR0xBYXRLTGhxNHFVQnpsWThmYmxkYzdabmdHbU5ub1o0anRiR1ZEdkYrZm9MOElKTzh0SjlYOGZEU09XY01jQk14T25hcERBRDhVQmJKbnp6K2EvaDZRMTZ1SDNGdFpDZDhRdElYZkJ6VjZXblhnVjMzM1lkYkZtdmg4Tjdaa0Z6YlpwNHhJcEF6dk5CcHlKWUNsNEgzcTMwL3hmQ3J1MEo4TWpxR3lFdmQ4cG9YN2hha1RNRkhyam5lbmp6bFhnb3c5OXpXSmFwaEZlZDlQWHVXL21tR0JyZ2xWbzdVKzJZVnV2K2xYSmhzUDFmZ2tqQUlVcGhHbUxQWXZTM0dPRHQxK0loSmZsS3VQamk4d0d2SmJxdXUvWlNlUGorWDhHeGIrWUZpVmdxWkFIY1VxRUdvTTBEYTJjT2ZQak9UUHh3WFEyWFhYYWhwTDVjY2NXUFhjai9lR2dPWXM2bDQyVUJsb3UzV3dSZUdtQ2ZYYXQ2TVk0R2VLM1d6dFFEbksvN2IvTENKZXYwTVBqOWRHSEFhcVp3bDNBS04xY3ZnWWZ1dlI0dXZlUUNTY3ZKcWh0dnVCemUzbjRUalBUa0JnODVhTXh5NGE2QXMzVVpzT3FCRytEeXl5OVVwQysvdU9vZjRhWG5wb0sxUFZ0Qytob3BnR2w0czlsNEphWXZ0M2QxYjAybkFYNVphMmVxSGJ4Y0VubmhpZzA2SDhCTFFwUENuWHdwN0kvWTFtYUF4OWZjS0RsdHhkYVVheTZCL2U4bkJvazRSSmc5YUxteXRCbmg0ZC9kQUJkZHBFNWZydjc1UDhEQkR4SkY0SldSdmwxUzA1ZkU2d2JjZ085SEFieEhhMmVxSGROcVhTcDU0Uk5ib3NRRGxwdkNacjRVem1TbWNQSFJGTGorM3k5VlpVSEptcHQ4Slp3NWtjWkFMQlV5QWRvcUY2cy9XbThkMmpNYi91V2ZMdzVKWHd4THJvYnVKb055ZUx2NThJcFBYNjZhRHlYUkFCL1IycGxxQnkrWFIxNjRlbXUwQy9CdzJXd1BZTFZUMk1CT1lSL0V1MTZOVXkxZFdIWEZUeTZFbzMrNm1TZU5mU0JMeHN3Q0x2NzNuZmpNMVEvK1owaDd3dFdVZjdzRXFvb1dCb0UzbTQyM1N5cGVEMkRjdTlZL0p0TUFtN1IycHRxaEFUNzVleC9BTFV0VVNXRmJxeEg2bXBkQjN6bDMyVnB6MkloeHlKc2UvUysxbC9KdjdOVUhXRlJYM2ovd0o5bVNUWFkzMmZyUGx1ZS83KzYrRzZQSkpxSWtSbEVKcUVFRnhkNXIxRVNqTWNXS1hSbWFnTDMzaUYyd3hDNHFpaklEMG51UjNwc0MwdHZNOXozM3pnemNNL2ZPekozR3JKdmM1L2srV1plWnVlZjh6dTl6ZmxyRFhCcVh6amdvRWV1RVBOT01rUFduclhZR3BrLzVwOVhxOHZ2ZnZZS0lrR0U2OGRhVnphTFMvbXlhRnJ3R1R0OUsvdlJsZXU1cGlKTVE0RGhyTzdQWVF6YjNsZWFHcy9lb0FNYzdDQU1XT1lYbEZST1FtZllGcm9SdXdyYUxlN0hrNkJsTTNYRWRuM2c5eE1jU0tTOGpmTzloNlhlbmNlV1JCQzJWVXpzUXU2ODJETzhycjd5TWYvelByOUM3NSsvZ01PRE56Z3g4RTdZMnY4T2YvL1FxZnZLVGx3ejZ6Wi8vN0dWOGY5NnhFN0ZZeUJZQ0xTZnZuenJwSHdhamU1VmNSbS85NzYvUnI4OGYwYi92SDJIei9tL3g5Ny85Q24vOHd5L3d5OWQrYXZEdnZmSDZ6eER6Y0hnSDNKS0MrZGh6YlRmbTdydU1JWjdDNXp5U25QT2N2ZDlqN2FrQUhMNjVIUStqVnVOcDRSenhlTFZNWHlaVlljT0VBR2RiMjVuRkhySzViM2lBOXlvQnQ4UityQVJzd0JRdXpaNkRpL2M5c0RvZ0FDNmJRd1FQVUV4bTc3bUMvT3dGT0hlc1AxNTZTWHNETVg5am12RGJSZDF4OW1oL0pJVzdvTEZzRWowTjFCT2l0ak5ObFpNUkwzWEd2dTE5TUhuODMvSGIzLzVjYjdPKzl1cFBFWEdmTkd2OURBTWdhd0Z0REdyT2Q1Y3Nma2NVc0I1dnY0RnZGdlhBaFZNZkl6OXRMQlIxTTFUcjU2U09tK21veUIyUFI4Rk8yT1gvSWFaTy9EdiszeDkvb2ZNZGYvM0xheWpOSEl0clVnbTVuRU9OUHZOcE82L0QvOEorQW5vVm1zcW1DUUNlb0hQNk1xbVdEUmNDbkd0dFoxMEtPUGZnQjByQU1mYmFBWE1RMStSUHcrbGdiOHpmZjhIb3c5TjJVLyt0Mjc4RW02YmJ2MTZIcjdzTkNsTkdBVFZUT0ptcXpIUE44QkVyTTUxTlUrVVVuRGsyQUk3MmIrcThNUDd5NTFkUmtUZUJBOEJReUhwUTY0enlleWVQRHRBSmlybU1HTFJ4c2hHcXRjM1FIZzVjWGxTMWtkZE13NlBiVHBnMzYxLzQ5YTkrSnZoT3grbnp6WHIyUTcxRHNmNzBkeXhtZWVVa1VkT1hTVzJNeXc4TzhFWnRnSmwwQUJaQW5KYThFSjVuRHhsMTZ3N3lDc2NubXg5M3hORlRKdmc1MjRYZlVZMWlhL003WERsakQwWFZaS0I2U21kTVF0d0ptV25jQkRMRng0MyttMWJJNDBiOVRRc0lVekNMUzBIR09Menh1akNpMy8vK0ZmaDUycUsrZktvQmNHZG9oYXNNWGFmblJSUGh1YTRuZnZQR3p6dmUrNnMvdndVSHlTUEI4eHZzSFVHZHN6R1lKMjY3aFJQQmZxZ3BuS2x6K2lvQk93c0JycmEyTTZzQlZoU1BvZ0FyQ055SXFLWDQ4dEI1Y1RlcFh5Um1CNlJqK1kxQ2VNbWVZVzlLSXdMeTJuR21HTHpzVG03QTNGTVp2Tjk0L1M5djRRK2tPYi9iMnhmeXB3eGNiaXlBV0FVNVBHUVllMkVJWWJsMHhrRTNFQzVtTTRJZU5lTC84OWJ5azUrOGhHKy83SUhxNHNsNjFxUUhyaDY4SGJVanFjd1poODgvL1JkN3lYVjNYYUtCTmh4cjc1WGlXRTZiNERrZnlXckY5dmc2YkF5dHdPS0x1Wmg0SUpHOTBQWDFraE9aeWxzdTdFTkp6bHhCdktnWTl5TmdIdUNDa1IyQXd5T1g0dlA5Ri9VV2VoSTVrSlczaWxtUVFnZW9MNU1PSmxHLzk4WGFlU2pMR0ExVVRTS1pySXc1RUl1WXhtM1YwK0M1d1FZLy85bkxGSnEzL3ZWcnROVk0xdzlHRzJnalVEKzQ1Y1REKzcvLytEVms5NFpaRnE0R1htNHRiMThhaE5HYmpsSG50UzZrek9BelAxa2doMjlrTlJaZHlJSEx0bWlkL1RYSTh4RTJCeDVBV2M2Y0h3SHJBeXpQY1VaNjBnSjhjK1NzenFLT0lFVmZlYXNJaDUrMEdJV1dtM2xubmxDL2ZTM01YWVdYQTdpckVLc2d5KzROeFovLzlDcUY1OFNoL2pTTWVrTXowNkFNK3ZoUDFQdVphVnhUUEVra1dpMXdEY0tyVVVOVmJSY2REcUxPeXorNnhxVHpQMTJrd0xhNFdueCtObFBuWlA3RUt4UjdyK3hBZmRGVUZpOExPRW9ROEZOck83TWs0RzgwTjV5OXg1YkYrMVQyQ2JhYzNnNUhqekN0Ulp4Mk5BVStFVlZzMFlVTzQzSVpFUG9VaUtwVzVueUovcHZZWlN0OUE0ZEZ1d0hQSnBtT1dCZmtXdjJRaTUrTXc3L2YvUTJMaDVuSXh3L2FxUkFJWUtrM2IrVGsvYzVELzlxQmQ4bmlIbERVaVVGckRyamE4VEwxWFhzcWdEcXZyeTduNlVWNnN3SWd6aEZCZXVKT0pSQ29wUytPNWJUQjdYYXh6cWs4Wmtzd2dxVnJnZkt4cUpZTkV3S2NhMjFubGdUOHRSRGcrOWMreHhqZlc0SUZjL0NRNGRNVEdkaVZXSy8xZ0M2V0FrbTFRRUZqWnlLcjlkKytDODVuVWU5eThnNUZmZWtNSldDVEVKc3lqVHNoVitaT3dOQWhmMEY0eURBdE1DeUhtUUhydnE0blZuejdyaDZ3T3RDS2dXc0FYaVpYd3lUVW1UbDZ5ckFsNXJuT2M3NUUraU9qcnJNMzhob0FXWlgyejU4cVZHQlRhQVZHN1l6VkNublpzVk5JdnpsZUNIQ0d0WjFaRXZCczdtYWxLei9DMGszYnRCWnArckZVN0VwcTBBdnhLcG04K2FyRHlhZ0hibGZveDd2aFFUbnZmVHN2N3lad0ozWUN0aGhpTWRPWW5zZzZrV2pEYkN4c2ZiK2xieTIxNW9RN2xhcHBVK1VNak50Nm16cTM0ZjVST0p6Wm92Tzh6NWNvMFRKNG1UNUpyZFBmSTZlTEZHeWZPRzhWbnNoTzduZHhZTTNubW9DanJlM01Zay9NQ3B2eDZvMWVYRFVLNHpaZEZpd01jL1A1UmRYd0NocElEdUhCVXlEdU9aQldwL3l2K204WHlDMzdmWm4rUTJHeU02RU9nN3pDcVhkTzJYR0RUTi9wS3NBV1FHejBOSjdHQjFFbk5qUE1GSkh2RXd1M1ZnZGNIWGpaa0JyTFlsZkJRYU5uSmg1SVpDZW52ck5uZW9pNThNK1ZLUDk5cFV5Sm1VbFVOWEJMNFBJL1VTREhzdXVGdko1UjUrdjFPOWhocE9ydHU5WjJackdIYk80VFpwTjcxM3lCd1pJSHZFSU04cFJoNmJVQ25DeWdEeUpJZFh2bXFHNVBkYklieElIbEppQ3ZIU04zeE5BM3FYY29zaklXQWs4bmNnQ2JFN0hJYWF3WHNpbVlMWkJhQTlFYU9YWFZjRHN6R1lkdmJPZjF6emZmNXh2Y0R3eFliazh4WVliRG5VcitaL2VuTldIcTRXUkJ4Qk0zQnVHbW14TUQrSnkxblZuc0NWbGhiN3RxbmJkZ0FjYnVpY2Z1cEhxcVlNd3QrZWdaa052QUx6SVQ1bStHSHRpQzgxbThkOStTcmxmaVZjZG94S1pNWTBNaFR4TUcxT1ZncDR0YjYzUFRwaTRYTHhONTFSUXNPWGFHT2tjSER4bTJ4anczcUIvT2txVFhDZmNYQS9tbXdFUmVjN2NVUTd3amVIMDAxUDB1L05ZdU8ySnRaeFo1N0Qxa2I1Qk5CZ3ZoL2ZKQ0RwbTZjdDdOK0tSZXVMQk1VdXVVeFRma3NQeWphM2p2OXIrd242Q2RvSW9oaUMwMWpUVWdtNExaV054aWZzdGd0RWJBMVlLWERhbDVUY2xzak50Nm16clBVVHRqU1M4cERPcUxxMlZBZnFQMlhvdXJBUzZVMHQvWm05TElEaDJCZnBhVExMSzJOL1BpZFplK1NUWVZxN2xaNWhiekNIdEtGZVk4bWJwUjFkcUx5U1NIVE9STHBZYmhQVldvZ091T1dPcjkwM1plUjFQcFZHSEE1a1JzMURRMkZyS0JxTTJGMWFKdytYalZpWXhmRGdlTnZscHl0Y0NnM21BUytreC96OTJ0cEw5eklsK096ODVrQ2lGbTRtSHJFLzJTdGUyWmpsY2kvUWZaekJQTkRZN1lIb1BkU1ExVVFTNlRtekM5VG5jaG1keXVNT3h3bUt5NFdVUzluem4wK01SdmdNb0p5bGdFc1FIVFdDZGtjMkMyWUo2TFJNdURhK0RVMWNDcnJ2L21vSVBVMlE3MkNzZkJqR2FEZTRTWnRQcDZMNUlNbDdNYTMxdDF1eGdPSGpJaHhJZnNKTktYclczUUZMeC9GY0k3OFVBaWptVzNVa1c0U1ZEbU51Z3ZJRE9kRFQyWW8rUmRRM3dpcURYNEJlMG5jTWQzQWpZbllvT25zU0dRcHdxRCtVOUdheFRjS1hyaHFsTlhNZ09qL085UTV6djNWSWJCZlJKWUFtU0w2TUhrV2lDb2hQNnVMNUd0MldPcTdIOGhKN0c5dS9RUFFuaG5Iay9EaVh3NXRma2I1VUNlaU1KbDFRUG5Td3dIL09XRkhHb05McjRocUNtWW9RS3NEZkVFSXhBYk1JM0ZRRFlXczdsUjYzcUh2dldaQ2xjWFhzNDVYQXZiUkoweE14RjNKdFFiM0N2QmxmcjdrRWxLclJJODk3czdFK3N4MUM5U0NQRU9hM3MwRUsvc05iTG9HTTJOekR2OUJLZUxGTlNtTDVlSm03eE1tT0lhZWlBSE01b3h5Q3VjV2tmZ1BVK2dZcnd5NWtCczlta3NBRmtVWmoyZ1RZN0lOWWhCYXpCYzdYaVo4NUEvbllUUDlsMml6bm5Hc1ZTRCs0Vkp3bk54L1JqL25QL2RBMmxOY05rYUxZUjR1YlZkaW5wc2ZhSmZJb3NOMHR6QW5KTVpQTHhNa212RkZTdXAxdkNEWUxJd01KdGF4OFJ0TjlGU09ya1RzRGJFbFZvUWk1N0drdzJieGhiQmJBeHdJMyszeGhTNEJreGRBYnpxUk1RdTU4SFpIbGRyY004d1F5Vy9VVnhmaGp3VlJqek1uemVKRlNTanJlMVQ3ME1XNmFaWnhPbEhVM0Nxa0kvM1pvVzRJakc1VW1ZNDNpT1pMYnpwZXpWMEkwRTdqZ1pzTWNUbWhxd0ZzMG1nelFsMnF1NjFWNXR6NnRKNDFlZnk1YUZBNnJ4bkhVOHo2dUtQcUJMWGw1bjF3Rm1CNys5S3FzY25teDlySW41dUw1RjJzN1pSclE5WlhGK3lTRGwzMFdOMnh5RWdyMTJ3U0pIVjRvckVmTTZZUS9qNiszemU5RzBybmFBQ2JFSEVYUUpaRDJoem9hN1JseW1tbzlVSFY4ZlU1ZUpsRWhtM2pEZUY5NlkwR3R3N2dTVkFkb080L3J4V0x2d2JmbEUxY1BTVWFhNG4xbDRpZThYYVZublBRSGZaTDhuaWNyaUxIZXI3R0FmU20zRzZDQjNoYmpEaHVmN2laSkViTHFqRWNMek1wZUdrY1FOZUNuRUh5c2NxWXhIRStpQlBGZ0haRk14VFJJQXpOVk9NUkdzT3VKTzB3bFZHZVVhZjc3OUluZnNYNTdPTUdnRDNLc1VCRHE3cy9BNjMxNW1zdmxQQ3UxQklmSzN0bGZlUVJXM1RYS2gzZUJWT0ZnS24xQ2xTUnIyNTBLZEFmaU1kYm1GeXlBMTR0ZHk0NmJ2MlhobTFGbGUvdTJncW50UUoyQ1RFWnA3R2hrQTJHTFFod0UzNDNlb3VoS3NETDNOT0lSRnJxTE1mN0JXTzczTGFqT29qYVJVZkxMZGZjMG1QWGlqcDdHbDFqelA5ZmxLVlQwOWthQUp1czVkSVA3QzIyWTZITE9aOVpsSFVyUmVZZ3hNRllIT1NzeGx1bUUxS241RWlhQlNGZ2Z1NFdqbDV0VTF2ZlJtek80NHEydUZyVzJtOHFyVG1qSUtpZEt3T3hKYWF4b1pBMW9QWkpOQ1dBQ3NXclFCY0E2WnVhKzVZeUV2R1UzaVp0SmRQd3FUdE42bnpYM1c3MktEKzRmYmREVEpFRW12NXd5YWpIcmhlcnIyL21URDlmeVNyRGM1Ym96VVJSOWhKcEM5YjJ5NzdrTVdFY0JjM1luc01qdWJJRWFBQ3JDdk1KcGtpWFNrbDA3WU11RnlxL0RjWHVkRDBGb3E2K0RzVDZxaGlEZko4aElyc1dSUmNSY2tZcEczdmkrZ1ZOb2h4NjRVVTN6N0lEYkJIK2MwaHFJMXlSbnZCV09NUUd3WFp6SmpOQ1Z2MHUzU3MxeHh3bnluQlZqMGFqdHdUOWtpUWZNQ2VYZXpxWHFoNTdNdzduMVBCbTZrZVlDNTBiVUExdzUyaTNFbDZybGpabzB3dWx0QklkWVZ4NENtcjBnVE1aS2ExN1RKNFhUUVg1aDVXaGVQNTRDVkFIZFdteE9EV0Z5SGMzM3lmVDYzSDdmZ0pvR3lzTWlyQWRiSE9iQVBvU3FMSEIzaXkxdzRGNXh4UWVjOEpkUWtqMGNiQzFrUnNZY2c2TVJ1QjJpeVpiQVJhOFhBVnBMNk42YVBZdXVlZHRFZnk1ajVheituSlBqc053T05SbFQrVHZiaTVmYkEzcFlsR3FnRlUxeFFWZ3pTQTArTkMvVC96ZUxvbTRQeUJIckpYclEwNG1ydW95WWVTY1N3UGJMN1R5SEV0R3hNQ2ZzSUU0R1AzeEZPRnVoTzJwaE93Q25GTHBxdGV3Tm9Tdjc0M1VyZDhoT3lqQTFCMGNSRGJaTFd4TG1qSkdVTWF6MERFV2lHYmd0bWNzRVcrcDhwNHRPMGw0MUdmNUlxS3V3VHJxWStSdHIwdll0ZjBGbjBldWNmdE8rQjJwR0k4bGg0N1RWL2t0MHVNUmhxZ2dWUmZMMnYyUHVOaFoxSVR1VlJrbW9pL3RCcGVlNG5VVVhQNitrYlg0V2d1T3FMR3JCbFRjT3NDZmlTckRRNGVuVVZ5OUFoRFRkNVVHckFLY1lwZkg2TVJhMHVNV3k4a2JMSkYycmErQlBoQUZBWTZvdlRHRUZTRkRVZHR6QWgycXJRVmpUTWZab05CbXlsVmhxR1ZsNUdKbWpFYU5aRXVLTHZsaElLekRzamMzeCtKa2c5TXJ2bXowS0VVWEhYTzMvV2llblBXOFRTTEl4VUsxOFA4ODltYWdIUHNKTktYclRWOUwzSVhNKzFvS283a1FKbGNaWTdxaVJqY2hnRDNDcSttQ2pSdjN5VUNkb3dxTk9LaWk0NVVJMlFjbkkveVJ3SElQYmNPS2RzbklXYVY2YzJsRDNxcS8wZDRzcTgvY3I2elI4RTVSeFJmR295eTIwNTQ5bWc0cWgrN29DN0JGUTFwbzlDY1BZYWRWUEtLaVNMd21CRzNqdDl1TDV1STF2eHhaSDJqOFR4bUpMdm1zdHVmb0lqc0lmZUVQYnV2NU0xOUVMZSt0MWxxRnIvSkVXbTdwdEYxWE5VTDdVVmplWGlaWktVdG9IcGhtSCtrU1VDL0V3RlVLR29Makl0ZEtTMXc1RTloMXk3SE8xQWkvVDE1Y1F0M0llN1NhaHdtaTlRV2MrRFdONzJYWEN1a2lyUHR3aDZnZEl3ZzRzYmtFVlF6SkxnUGdrTGVES0JOR1VVcm1wOFZvQ1kxQktYM0R5TXZjQ1BTOTg1R2dtU0l4V0NMVGR5NjNrankvSkFGa3JybEkyVHN0bU9UZWFBL3NnNFBJSUErWnNOTXVzSkFSNE9TZDFMNTNleGpBOW5mUzkvWmozMEhFK2FkOFFRa2N3Rlpjbi9NNVpteWJSTHlnamFoOG5FUW1zb3oyZk1vdXJtRCtoeXpWeUc4VE9UbDR6SGM1ejdWRC92U1dreWVvdnFRSHRGaGdNbXNnQXhOd0VIV21MNXp1WXR3MlJhRGc5bkFJUzA1ckdkVGg4MkVlKzZwSjFSeHJ0N2ZvQVNzamdaaUJnQzNJV3JTSG5RQzFwSDJ4bW8wRkNYaFdmd05sTnpkeitMT09QZ1pramFQdE9qay9tOU1QTGs0TS9iUFJjR1Z6UVJySUZ0WGVXczlyK2JNLzhkTVllNTNuMGM2QytBZDE1RkZCd09wZnZDT3FERUs2RkVEZ0RJNXBNT0NoNnhHRTNEVFFQZXdYM1kxNEV2Y1JYd1JsSWNEV2VqSVFYV3lsVG1rSjZKd2l3QStZWDhpVlp5RXVNVTBZQTNFcFZjR1VRMlJlZXdyVVlCMVJ0R0NscG9TdGhHcmt1NmdJdndzaW0vdFJQNUZEMlFGZkl1MDNUT1E1T3VLdUEzMlZzZlRGWWx4czBXQ1pBalM5c3hFenBsVktMNjlHMCtqTDZNK1A0NjlDTVhXdFNMaVBQVzdTZDRmUWxHdUJXLzVXRGFiengrZyttSFZuVEt6VEZGOVNBK3ArcDZOeW9MYXh2NU1CWWI1UjJvaUh0MWxlRzE5b2w4aUwzekdYWUJIUkMxWkdMTTRVSkNGWWtuY21vV3B6SjdCQjh4QjNKbzlpalJZTDA2ejlVYnpzM3pURVl1TXZLV092SzhBRFlXSnFNMEtSMVhpYmRLbzUxQWFjZ2hGTjNjUTlCTGtubDJEekNNTHlaU2FnK1F0NDVEb1BaemdINGpZMVgyc0FqSjJ6VWZzMUV6Mkg0TzBYZFBZdGVXY1hZM0NhLzRvdlgrWVROSHpxRTRKSVJkWU1udVJRZEZxbGtzeHlYY2t0WTd5VzBNRXA2NGFMNU9BVzc1VVB5eTZrTmVCOUxDWmtSNFFFYldSdWFlek5BRnY3VExBOWhMcFc5eVhEL1lPeDk0TUJmYVJoZTFUTFZCWExBVjhYMFk3VlJRbjcxQW9Ta1lUc0tOMUlCNkRyRVA5cWNZb3VPemRaWUROMGRqTUZHT2dORC9OUVVOeENra3lhck1qMk5Ta2hxQTYrYTVCcWMwTVo3OWJueGVMeHRKMHRGUVZzdTlnb3BBM1cyV2Z6K0t2VTJjVXY5NFc3VVZqZGVKbGNrKzJtdXFKR2NmVHpUSkY5UUhWRnJXUmxYY3JOUUZMdXd3d2Vaa3I5K1ZqOXlaZ3p4T3cyY3ZKcmd6QU8wa0J2MlFGKzI5TDQvYU5hYUNLTW12M0ZZQUIzSUY0dENEaTJ1amh2QW5UVmxkcGZady9wdU9TU3Q0eWxqcWo0b3VPT3VHcWs1YThrT3FKTWJ2anV3VHByblJsNy91cWVsOGR0Uk9mbUVaTndNKzZFdkJpN3N0bm5uaUMzUVFyTjl2U2dQbGhiWmo1b0pYTjNJZHQ4RW1pTjhPaVZzY011TmM5ZUVZVlpkWHhnRTdBZWhDbmJ2bUlhcERDSzM3V2I5d2ZJemg5WTlmMFJsdithSjF3MWFuSm4wYjF4QkNmeHlZRDdaaWtxdDdWQkxvcVdvNVpxcjVuc2l5eW5lZGpaNW9DRGg0eWFtMEQzR1d2ZHhYZ2pkd1hmMzQrbDcxeHVGa2s2OFE3VTJNejI5T1VtOWpEdVpFMHA3Y21iakhBdjdsV1RCVmsxNldkTkdBZGlLc2ZEYVdiWkhVZnRGUVhXYjE1ZitoUnlKdVI3RCtHT3B1aUlFZjllTXM2NCtJYlF2WEZ6cFEyY1VDMUlOMnIwYmRNbUg3ZVRLYnRnakRodnQ4UUorY1pjZktMcE5abEw1SCt2YXNBYitXK2VNR0ZBdXdrQzlxcFdwaDNva0p3RStwOCtyQ1Z2YVcycG9KM002bW50dzhwaGlSQndXN2NMYm9kSzZQYXNTcEdEdjhVaFZiYzg4NWtVUVc1Y0hjVEh6QUZtVWFjNHRlSGFwU2NNMnVnYUcrMmVoUC9rRlA2NEFSMUpuRnJ5ZlROR3kwYUw1UFA5bCtrK3NJam9vNkhWSTFTa2lESFN0S2JUTCt0SWYyMmtmU2ZWNUlDZnFUdm1QNFc2bGR2OHZldkk5cDE5dnpuQkxZYXJ0cUs4OVlZVGNEdmR4VmdEKzZMNXdmbHMxTlZIUWFucnMxdzg5bWpOaXlRS3NOczh0TlEzWitmUmY2K01WN091d0daVER5WVRCVWsvUEVTb0hpVWFNUTFNbm9LUnkyM3dZTnBqc2c4c1IrdHp5dXQzc3cvcEZSRTNFZjRWOVB4K091ZTFKbVVYSFlVRFZlWk1kaDQ2aWpWRnl1Q0szaFRkQmVCK0ZWNHU5NStuZk93czErWjZPdFhicmFrZ0hJeWZBc1A4RnRkQlhnbDk4V3pUK2RRQzF0cEFHQmpNb3NwUnFxQ2R4TU85WStpQ2xLU01Vc0ptRVU4U2dmaVRzanBPL3RTRFJNMjd6MWM2ZHNOMXgxNklrNnlIRTlqcFlDaTFlb04vdCtZOXFaYTVGMDZpUWN6UnJJMXZ6L3BYZW9zRWpiWm9yMW9qRWk0U3J4TWpsemZRdlhGL0tBOFh1K3NqckZzenpMeFMxWlFUZ1o1aFZQckdpaVJ2ZGxWZ0tkeVh6eitZQXA3dXpEWm1ncXNpN1Y4TWRhU2d1OUtSMGY4NGx1cFlnenplUUI1MGVoT3dMb1FjNlp4ZmJ3TDFUUk1ncDE3c0EybHp0MnhEa2piNzRmbldVbFdiL29YUHVReWZCWVhnWGpQbGJnNXBIZEhqYTkvL0RhaWx0TG5VQkU4UlBUVVphTzZsTy9MM0tqZW1Id29oZW9kSmd2QzJpemFyN05EbFJPWThjSDgxek9HN2xlU0pqdUo5T1d1QXZ3QjkrVk9mbEh3VDBZSFl1OUVXQnd3YzJQdUpJVlh4KzNlVTZvZ1h4NDZUK01WalhnMGNvNE5vQm9uWW5GUFhMWHJSaUZXNTk2RXdVamQ3WTJxeEVqU2pDM1dCL0VpaE5TSnFWZktEazhFanh3b1dOZEhuNzVIblVHS1h4OG95c1JQWFRWZUprVVpuMUs5TWNUbk1YYWxLVHA2WndlWmh2TXRESGlodEszREIyTmxaVWkxSnVDa0xzSExQQU1rMGwrUUZ6WnpGN0FodkpGZG1EcVd2dEc4RXhYWVRncXZ6dHl6T1ZSQjlsM2VSc0M2Q2lNdTFvMjRKWE1rNHRiMnBocm8vc1IzQlJ1Tm0xdkQraUIydzdjb3ZCNkk1bWVsMW9meUg1UzJoaHFVUFFwR25NZEtCSSt3MDFuSFlPY2VWTzJaMUVZN0d3eVhtMUYrZDZuKzJCUmVUL1hQc3NoMnl3NmNhRG5sWSs2NVhFM0F4N3NNc0dvSzMrY3U0UE9nUXZpUmhhbXpsa3hJU3hYakMzS2JiZU1VbjRuTDlsaXFJTkx3SlVDUnF6SmFFV3VIWEhwdEVOVkFVY3RzY0dQUTIzb1JjeE15OFJQRWU3a2gvOHBaMU9XU3ExN1JhblZJWFpXVzZuSUM5alpTZC92ZzRaeXh1R3JYWFZUTnJ2YnZob2pGUGFuYTV4d2RZRFJjNWtKbXN1N0VNYW8vdnJoVTFORTdUQzk1SnlrczFxK2ZocmJDTjZuVEJ2Ty9uYmZGYWdLZTNkV0FsM0lYTU13L0dqNWtLbTRtaTFQbmN3dE5ZZmQ0QmJha29DTWJ3eHVvWWd6eGZJaUczQW1kZ0ZuRXJnWWhWaFNOUXZMbVBsUWp5UmE4anl2OXVobUVtSnNiZzJ3Z1hUZ05TZjRia1AvOWFWU254cUs5cWRicTJFeUpRdDZNaHBJOGxJVUY0OGwzZXhDNWNpSHVqblUwdWs0UHB2NmJxbm5jdXQ1b3pSNmxIVzZaYnJqcTgvdytaQ1BWSTZOMkoxQTl4T1RiQ010TTRSV1Jjc3JGOG52Vm1uamI3Q1hTTjdzVXNMMUU5a2Z5NGhidVFoWmRMU09Jd1laWjZNWTRCV2FGbXJjWVN4KzN3NS9jWXR6TU9adExGV1RaMFZNMFhuMkl0VUN1angyTzZKVTJWRU9GakgvSGFNRGFjc2QxSU1LL21vVkUzM1hJUEhFQVJiY3VvU29wR28ybCtaQzNOVm9kS1ROTm56OUpScm4wTG5LREFwQ3l5d3ZScXhjamRKWXJybi84bnRucWNNdXBPMVZySmhXM2h4ZzlkYmxuV1prMUF3NDBHdmJpNS9ZUk14bm5QVFR2MEZsQWhwamFnOXJHbUwxSm1vQXZkU2xlemhRK3hsMklrMjhVM0tQYjRKMkFqcmlSMjhkY3hmaEMyZ2EvSkJxdlQzdzdodmc4cGdweTQvNGFZY0JHSUM0NFkwODFWTlF5Rzl3YzNOM3NpTFhscWwxMzNIYnVoL3RUaDBQNnhWUkVmRE1Ic1J1WHNvZ3lEdTlBMXVsREtMd2VoT0k3VjFBYWVndFBZMlI2VXg0ZXduNld1U2p5THAxbWY0UDVyVVQvOVloeVcwUXVrOWtJbVR3VU41MCt4TFVCNXIrd0JQZlp2eHNpRnZla2FwMitveThVcFdJbnJqQmNicjQrZkpicWsra0JXYnhoNEI2dndHd3pEWjA1NURLUWtDSEc5YkQ0ZW9VbVhwRHA2MkFWd09URi85U2N3aE1QcDhFckh2QktVSVpaOUFveklKNVBiakl2MVUzR3hGZVZlWUVGVkRHY040ZWdNWGNjVURoU08ySURJTXZ6UnlISjYwT3FzU0srZkovQTZockFQNVE4blBWdnFzYXhxM3VoS1hXa1dlQXFNd3JCRDFkVHZlTG9LY09HOE1hT1hsTDMxcnBZMHhIUEpYZzN4U3J4c2hhSWlmWGh6YnhoUTNMWEtuZzVVOWhEODBhWkYxUUlUN0pnYnRiRktQRFpvemFqaXJGSTJzNFd3U2RSbVk1Q3l4cklJWVJUNzk1N2JyTVNMemNtSXE2UEhZNFl0MTVVZzRWTy83ZlZtLzYvSlhkY2UxQzFaVkoyWTdBZXRPTGhxcyswdFhBc0pteTlSZlhMMkgxSnBLY1VIVDJsN3JIMXBGK1pDV3BNdjM0bGF5ZVRsKzUvOTJnNVJ1eU0xOFRMREw5M3JBcllYaUo3aFN3aVdSUHgvRXNsOENDYjBJd2JtY1lMcFcyaWJqaG02cTZPa3JPM21HWTJSYmJDZVZzc1BYMTk3cUVzMUFsdHFVUEVJeFlKdWVTU0k2L0o3b3pzWWZYbWY5RnpZMUIzUkMybDY1cXh1NTg0dUFiZ1ZlZnEvZldhaUREN2RLNWdqekh3bGtTMGk0TE1mT2JyOEhac0lQQTFlMzVqVkR2RzdFdm12WmRrdFZYeGRpS1dkaU9McWRGYzRLelRlWkNRRFVsaStaQ1pHNHE1NVZZUTBFc2k1UGhXbGFVa3F3aGFkNDBiakltWEtoc2Z0OEJsZXh5dklJR0J5OUFrNjRlbWNEdklNNGVaRHpHSmdpUjlSMStxMGFLVzJlRG00TzVXUi9DaTVtci9ib2o0OG4ycXB2RWJiTkdhNldyQ3hCV0dxNDY4YURTK09CREk2NTFaQkxFWHA4YzBlMjlEckFJckl6djdsTnVyRzJQNWFOa2VKMzIvUnRwTUptK0NFTjdyZGhMcHk5YTIyL0dRQlEwbWFkRmNLSFB6ckNhYmNDZWJVVWVpRWFITkM0VXA1S3BIRFJpMkpZWlhFTGY5QjlFb3MxTUNaaExSSDRwY1p6NWlFeUMzWkl4QS9FWmJxdUVlZjkwVDF3YStiWFVNTDJMQzVyeEgxVEo2cFExcXdvZFpCSzR5eWpNdVRwdUpFYjczZUQwMDVidE0wbzl5MGYwb0VlaGxicDkvZGZNWlB2R05GTUliUzRiZTY5WTJLNFRZV1dnU0QvSUt4NXp6aFZnZjJZNU5NYURpcnJGcGlSYmd6TVJlZUtVY2c3M0RlUVg1YXZkeDFJVFpkK0pWcFRseUFCUjVMbVpGL0R4aUtHTGNlbEdOSjF2d1BxN2FXUi9FaTVRSFU5Nmw4WklVWDNMa296VWpYRzVTNHhmQTJZZVBlT1N1Qkt4NjJDQWFLUlBObmw0UjJvRHhCOU9FNERLUjJidEwvMkJ0cTFvZmNyUDBKb3NzRmxyOEVKL0htSDR5Qjh0QzZuaWIxcGIxajl1dzRQc3l1SkxDQ3YzbWtqMUhCZkdxMHhJOUVDZ1lJWXpZU01qbDF3ZnhtaTlzN251NDBzLzZNRjZFM0IzMURxOSttZnZ0b0NneE4xeGh2RXphVW9jZzhkWkVPTHZmNXZXVW82Y01VNDQ5d1pJN05hUUhGZUw2TkZLT1JkY3FNZTVBQ2h3OFpOcndYckIzbDcxbWJhUDZFYnRMM3lTTERkYXlDU1htelk4eGp0eFNNMC9uWWY2bFVvSzB2Q056QTRzdzlYZ1dpMVpITWJCay9WWWtlZHVpTWF5ZlZzQXM0dGlQalVlc0JYSmV3QUJlRXo2YzhXK3I0L2hQVDdCTEQxN2RVbno3b0QzZlZTUmEwK0F5YVU5M1FsTzRIWXFPOThZMXQyRVl0K215OWo0bFEyZmNnVlRNT0pXTHp5NldVSDA2TDZnWTB3SkluKzVPSk9qRG9hUGZXMGlXMi9wRXYyUnRtNklmTzRuMFpiTG8rU1RQZEVFMkpvTWxEN0JqN2RjZERaQjN3RlluWUNhdGNYb1FHd2haVWVpS2pGMTllYzBZT3UxSHhOcHllMWgzUkMyajY1V3d5Ull0NlNPNkJDNkw5OGxRRm0vVjlUNkljZXVwUExPVkE3Qmd3d0d6OWlnbjRmWVNxWTIxUFJyOWtNWC9sbXhDUWxKcGhtTElGMnc4MkhURHpZa0hwenl3ajM3RUNRNW1RcXlFM0o3bmlsUy9QcnkxUEpqNnJ0V3gvS2ZsbGxOM1JDN3BTZFVwYm0xdk5NUTc2MGRyQnJoTTVKa0ViNFFkNmtQN0lYR2pEZS9jRHE2ZUJ5ZjNlNlZtZ2h0Sk12YUZtcnE2bmdFZXNsZkloaWFUQkpGVUcxaU1mSkp0NURMNEgxSm9aeEtGWnZIajF0aWc1cFlZeEk1S3hHYUMzSlkxQXNrK0gvNDRpWFhoSGRxRGh6ZG1WUzg4anhobTRyUVZCNWVMbDVtK0dWdDc4YzVMbGJOTXI1SmVjeUs1UXRKb1lKOW1rbXdsZmRyYjJ0NHMrdGhKcEMrVGpmWWttYW1hem9kSWpuRnloTVNUWkJZcHhqdWEzeWVGM2l4MEFJbWJlcUgrUVYveklSWURtYVFsM1FWSm5oL3cxdk53SmtIY3ovcUFySm5idzNzZ2FpbGRsNWlWTnFoKzVHUUNXdkZ3bVRPVVAzSHF3SnQveEZZYjNpZlJ5MjNlNFBiWlFJbjBOZEovRHFRUHYyWUdpRWFQTXRsRHNvSmtKUG5zWDYzdDZvVjU0cGJiL0pRVVBFem9JTko4ZTZFeHJKOSt4UEVPbllqTkFMa3AyVmtRc2ZTejkzQzEvOXRXaDJTTkJJOGdlSmZiOENadmRkaFE0OUVhQUpkSmU0WVRDNWRKZVdBZmJYaWJDVjRiYS9mMUQrcUpXV0h6VjFMNEVxRUR5ZDVqcXhjd2l6anVZeURmQU1SNklMT1QySXVQT0h6Uis3anU4TU5DSERMaFhWNGRXTHpzNURVRXJRSFRsZ09YeFp2MlNRZmU2cHQ5RWJ2S1JodmdUNjNkenovSWh4UytIMG1MMEtIa0h4R0h1Q1hXSHNoek1Xd2E2NERjbGprQ3FmNzhtejd5MjU2NFBheTcxV0ZaT2xmN3Y0MUhuNzdIMjMvYzJ0NTRMaHRxbVdtckFaZEpXOHFRRHJ6UDc5a2hibDB2YlhoM1dydVBmOUFQYzN0cU9SaVVuUDVRRk9MbXFJRlE1RHJUaUUyQUxNOGRpY3g5L1hqcmlWcHVnNUR4NzFnZG1hVnljM0IzUkN6dXlkdDMvRVpiTk1RTk56OWFBYmhNV3BNR2RlQ3RmOUFQaWU2MjJ2RGVpMXR1ODFOcjkvQVAvaUVINFMxNFFDdHRVSHF1anpqRWovdERuajJNajloSXlJcENWeFNjSGlqWU9HRnozOE0xKzdldERzNXM2ZGVOdlppaWx2SDNtdUw3SVZyU1hTeU9sazMrQ0xURU9YVGdiWGpZRHlsZXZiWGhUWXRlYnZNYmEvZnVqdzk1b2xmYXZrUU81SnpRUWNVUXhCVkI0aVl4YytqeUowN0NpTVZDMXNEODlNNWd4SzdweFZ0WDVEYzljV2RFRCt2ak16RTNCcjBOMmZ6M0JKRms3dXVIOWp4WDg2RFZCWmRFa2VlQzVxaUJTcnprTEJ2QytpRjFzMWE4WlNUL3RIYmYvdmh3bnBnVk5yOGdoL0pBRUxFYlFYeEJKR0tTdHVUQjJoRWJBYms1eFJrcGZuMjBUdVByRGkvZU5MNXExdzMzSjc0ck9IV1pTN1Awc29QcFlQV2dWVWVlT1JUTkVmMDd6cS9oVVQraytYK2dEVzhkeVlmVzd0Y2ZINEVuZXJuTkcrUndZclZONHZKQThZaGJZdTNaVzkwc2tKa215eHVKZ3RNREJac3FhcWtOSGt4NUYxZjdXeCttaVB4ZmUrVWVGTlY1eHVHeE9tTmJPNDJkZGpyVFRtYjZSNlphTDdCbmIrd0NFZ3dJSXF0cFp6clRTVHVkc2ROcE81UFlURzlaRm5XMEdocGlHbHRpa3laTkd0dllxSFVhYTVLaTlZcEdKUUs2Rnk1eVU1Q0xpc2FvSUFydXNndS92T2NJR1VITzRleXl1OTlHMzJmbStRdUZjNzd2ZmM2TGcwdm5vUEpwdzdqdlVsdGt3YzJUaXlNUFZtZTBpcDNMbEkvdDNmZDI2NmlkTnE5WkxWNC9tU042VGhrTmhpT3VWSXY0MGc2TDdvajlWZWtZYk1uVGpqak1tRytjeUZHR2ZMem5PL2tiQXc3L0lIRkRQcEEvQnhWUEpxdkZnYmEzRmlCMGJtbHNveDEycUMwZkFjK2pvK1A5d0k3NjUwMXF6OWRIWm9tZVQwWUhXaEhMWHR5cWZ4UExCazluNll0WVo4aWhjdzUwYnFOdDdCci8rVTcrMW9BUGZqUVBlekpuQzQrMk5HMFdEbjF2TGlwWHFJZGJWMnlsRDFOdXpLTWRPZU5RY3k3OGxXbWo3cWkzeklhNklxUGFNd2JJeDBYUEpSTUdGUEdYNmRKT3FBMWQrOS9OWVVVY2NHZGdxSFdKL3BCMXhOem56VU5UaVUwMURObnlueVhoNE9OelVib2dqakduenNMK3ZEazQrdVA1eXNkRTdkbDhxNDNvMnBXSndZNWxzUWwyVExoRDdRNE1WQys4NTI1Njl0bFFzMVkxM3R0a3Z1aDVaQ0tBTG00R2VWaHRBRnYrWWtKL3VWMS95QlZwdEkyemdZNmw0WVU4UWN6ZFJ4Zmg5QWFyWnNpbm5xR1lmNXFrYk1NOUM2TWZjMm42YkJ4dzNJbTI2dGNHeldmeEZCclJzUzBEQTJjYzBZOTFUTFNqdG01VitqMTM4dkY3S2ZDdVVuM1dXMlNXNkRsa0pnRnQ0aS9TSlphcURXUERCaU51SHJHSHRZMzlweFpnc0NVdi9JaTFZdTVjaHV1SHMxSC9SKzJRUjZ4ODJvRGpQNW1Qc3UvUHhmNGxjNVNvUzlQMGJkZmRHYk94TC9jN3lzZEFEdmJFazhuS0IyS2l2K21samR1NVBRT0Jaa2QwWTFXSlZ0bTZiZmtJZURQSHZZZUxiNXZoY2FrKzczVzYrMVRSODhkRUFaOVRta1lYdWtWdE1HdCtMK0g2bnBTd0lwWWRxRm1vREZqRUlhc0UzVnVSaTViWFU1Vk5weWZtdTYzNmxRR1Z2elNnNHFreHJqQW9QOU1UNmxqcmlpMjQvTCtGQ0xVNG9oZXJTckNmMnVGQXNENGJ0eXZTN2puM3Z1TjJ0TDVpMG5ybTh4VHZmTkZ6eDBRUnQ4czhoUzYyV0hXN3JKUndhWWNsN0lqbEFaTUhUUjY0U1ljOEp1aUI1bnhjMlp1RjVwZHRjTHZDRDI4eTFqMW53ZmwvWitDV2UzRjhncjNMVUhNdS9GWHA0NTUzN3lFYkdvbzFuNzJXZkZqMHZERXhnaTczRitTQTJnRElYL2ErWS9hd1E1WUhMdFN3aUVLT1VzUmpnZzZlY2VEcXdTeWMyNXlPMmlKejFJUDFyVEhoekY5VGxVM2JYNTBYMTJCSEhEeXpHUDVUQzFUUCtNcE9DM3lyRFZydnNaODI3ME9pWjR5Sk1YVFJXZVExMWUxVEpLRjdiMHI0MjNoVXlGSGN5T000MExnRTNVY1hvV3RYcGhKMVUwa0thcDYxd0xQU3FEcmc4czlxMWx2UStPY1U1ZjljZWk4VDE4cXkwVis3Sks2aDNodHVMZ0x1RE5VemxUK281MTZWMzBzejNoS3Z5emhWOUd3eGNZSXUvQkd5V20wZ3ZDc2xYTmhpeHUwUFV5TU9PVmlmamFIMjJJWThiaEN0RG9UT2pySEZFZmN3TmUxWWlsQlRqdWJHbGIyKzI0cTZaelhEN1NlWGk1NG5SZ0J1cHpTREx2OWZHc09CaHVlTjZObHZpeWhpeFlvMEROUThSbEhseFQza1JIU29MUi9CMDluS0IwN3IzUHFPMjlIK2hoRWVsMmE4clI2blpCUTlSNHhnYUJCK1B2d2xIM2RRUElVU092OWhSbis1UGZLUTVhMU0yeWJZc0VnWll0RWh4ZFVPaDdKdEE5NUhkWjNUMVhjdHFGdXZHYTdzVHZvQWYwWDA3REFKQWczRVBMSmFhMmpxMWt2NGVKZDFVaEdQS0E5enFQRStqcmxkampZWEE5V1p1RjJScHV0TWVzdHNhTmtrbjdWbXZIM3lCMWYwdkRBSmlNY3BUYWZoZUlFTWFvWGN2TkdJbnYyMnFJU3N4T3pPUVBCMEZnWmI4c1NITndtSFdwY2dXSitOZ0ljMmJZWCs5KzgvYmtmblppTjhxNUluMnJvbmFPdk9FajBuVElKRGcySWpHN1dHeWVPUzBQcUtDYjJIb2hleXJMOHlIUU8rVENVRUplZ084V0ZxQlJ0cVhFUmJkaUg4VmVsaHYydC9lU3E2dHBwUXMzYkNjUHZKWjd3dTQxVFJzOEY4UmhqZXhuOGdBNW9oRjBvNDkxcjBRLzdVaWpzYldvNGsyRUJSbjEyTW9iYjgrSWJhN2xEK2JxaUJZcTE5akRac0JqMVhXc1R2SklkN2Fic0pkZXNtREZmMkNHOWRKbUpvZ09ZcVF6VEJvSTFzNUo1OUtiRUplYXlWYWZDZldvQUFiV3M1S25sank5c3cxSlJ6Si9MV3ZEdWhkemhVbFg4dWIxRjUwNGVhYytuLzV5aS9KMGkvYjRCK3Ivemg4RmRHSHVwWSs0N1pjWEdMRVRWcmt2U0UreEc1M08weVR4RTlBOHg5QUEzVEUrUjVIWU9IcGhlTnVQSmZxN0pwNGhKemdpdC8xTnBlaytCYnBXdmpCc2tTMnJvelJkODVjNS9oS1pDK1FNTlZTSGJyQ2JsbXJZVDJOOHpvMlJ1bnJaeEEzanBxUjljMkV4cUxrK0VwMEJYdUVMbVR6bmlXNkh0bTduTm8wTDVHYmlENzlZUXNXMTlzeFBsL21uSGpvRTE0WExHeWo2Szl2TU9Fc3lVR2VGMUowSHMyNUFFeVZmUzlNZzhZYnFmMGRScThGOGplTUlZVnA0dG9NNzlwd2JWU0syNS9LRDY4eVhqalFBcTYzamFpK2NXd281VTM3bDR5WGZROU1nODRIcWMwa3daeEpYa2huSkJsdmFza25IbkpoSzd0VnZUc1MvenRmUE93RFZmZU1hUHRWUWwxNjVMZ0tRZ3JXdGtBdVpXVVJOOGJ3NHpDNTVTbTBXRCtrRHdjYnNnaitsWkxhTnBvUXNkbUN6NTZoNkkrWUVOL3VhQll5Mnk0K3E0WkY5NHlvV1dUZ1lKTnBtQ1RFZUc3ZFpCcjNFN3BtNkx2aVdFbWhJYjEyMlR4OE9CaU1ub0thZHNWR2RIOEp4UGFYcWVndGxoeCtUOVdYSDAvQmQxN2JlZ3RDei95bTBkczZQNi9GZGQzVzNGbHB3VmRXODNvZk5PSXM1c2tORHhuUVBYcVNjVTY0azF5RzVuamRSbW5pcjRUaGdrYnQ4czhoYlpPQmczeHkrU0Z5Y2FzR2JyTGdKcTFFbXJYcWVzdGxNTk1VdUwwRkJoaThSeTk1QTd5Q1hydkdhTFBuMkdpaGhKemdXUWwxNURIeUdBc2c0NmpEV1FKbVVkT0YzM09EQk1YdkFYU2wyamdsNUlieVhMU253QXhUdVFRMlVodUpwZlRsbjFZOURreVRFSkFNWHplVXlEWktZd1Y1Ti9JS3ZLV3dGZ0hoMlBkVHE2U055dzkzMWRGbnhQRGZHYncvczc0T1k5VCtoYkZrMDArUlJhVE84aGpaQk41bmd4RXVFa3ZrNjFrSmZrKytSTHBKTDlMenZNVlNOTkZ2ei9EUEJENG5OSkRGUG8zU0FNcGFmZ0kvZHVaNURUUno4d3dETU13RE1Nd0RNTXdETU13RE1Nd0RNTXdETU13RE1Nd0RNTXdETU13RE1Nd0RNTXdETU13RE1Nd0RNTXdETU13RE1Nd0RNTXdETU13RE1Nd0RNTXdETU13RE1Nd01lY1ROMCsrdEJFWjhvb0FBQUFBU1VWT1JLNUNZSUk9XCJ9KSkpKTt2YXIgSmYsJGY7ZnVuY3Rpb24gZXAoKXtyZXR1cm4gZXA9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxlcC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y29uc3QgdHA9ZT0+ZC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsZXAoe3dpZHRoOjYwLGhlaWdodDo2NSx2aWV3Qm94OlwiMCAwIDYwIDY1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIseG1sbnNYbGluazpcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIn0sZSksSmZ8fChKZj1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2ZpbGw6XCJ1cmwoIzFmYjQ1YzU1MjcyYmVhZGNhZjA0NTZhODBhMTQ4Y2EwNGNlYTk5NmNfX2EpXCIsZDpcIk0wIDBoNjB2NjVIMHpcIn0pKSwkZnx8KCRmPWQuY3JlYXRlRWxlbWVudChcImRlZnNcIixudWxsLGQuY3JlYXRlRWxlbWVudChcInBhdHRlcm5cIix7aWQ6XCIxZmI0NWM1NTI3MmJlYWRjYWYwNDU2YTgwYTE0OGNhMDRjZWE5OTZjX19hXCIscGF0dGVybkNvbnRlbnRVbml0czpcIm9iamVjdEJvdW5kaW5nQm94XCIsd2lkdGg6MSxoZWlnaHQ6MX0sZC5jcmVhdGVFbGVtZW50KFwidXNlXCIse3hsaW5rSHJlZjpcIiMxZmI0NWM1NTI3MmJlYWRjYWYwNDU2YTgwYTE0OGNhMDRjZWE5OTZjX19iXCIsdHJhbnNmb3JtOlwic2NhbGUoLjAwNDE3IC4wMDM4NSlcIn0pKSxkLmNyZWF0ZUVsZW1lbnQoXCJpbWFnZVwiLHtpZDpcIjFmYjQ1YzU1MjcyYmVhZGNhZjA0NTZhODBhMTQ4Y2EwNGNlYTk5NmNfX2JcIix3aWR0aDoyNDAsaGVpZ2h0OjI2MCx4bGlua0hyZWY6XCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVBBQUFBRUVDQVlBQUFBV0lia3BBQUE5akVsRVFWUjRBZXlWZlhTVDVSbkd4K2J4N093NE4zWm9xeFlaRTlHZElUQ2tTYUh0dEVvbmJzbzNRcGtlUUNSbFVENUtWNkRhVXRDTlRhSFFVa3FCVWx0YXZrb0w2blRXNlZESDlvOU5DbE9tVW1CVHExWVJzRUZIdi9LbTNMdWZKMithTkUzZXZLbUJ0OEQxTytjNlkxalM1N21lKzVmN1d3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDSWcxSXViN3RaR20yMnFqelBHY3BOcEk4OFJ1aVRML2loUEhQM2VMclYvTWQ0MCtjMitHKzdtT2V4ck1mWTNtM09lM3owanplUDV2aWZ4enNmem5XL2tOcmpmNjNLQVhVOWQzWkI4ZWxOdDVhQ3ljUWs0TjV6aW5oVU1oNWdLbmdYT1FrOCtaK1ZhazZWYWo3M2lwWWZraStlNFBjTEk0bFJ3YjU4c2U5T25PL3poSE9hOXcxdko3VFJGZm1FYmZFeGlBRU5ZYWFSckdnNUNoeW1yL0JvT2xOMExxYlp5RUl6OGM4VzJqT3dnMzRrNTh0M2pPUnM0eDlZdnNZbmNxY29wemdJVk81UXcydWdkd0VlR0hqbE8zNHFlWGFMZ0NwWkh6REcrUTI0M3VKQXliOWs2K1N4N25jNE03ZGFkZTdYYTQwZDJBTVBCV3BDbUNIM1FGNTJRdkdDNS9lWTAzeDYvcitvN3NZM1JYZXJGR21LN2xNei9DWjdmMWd2NjBjcFRQdVlobC9wSFJuWUVRNFVjYndnOVl3bWtOMTBCWWJ4eEZkZjBUdWtYOGZSZysvekNmZVp6UnZXbGg2eGR6RFo5elBxY2hMSDNlRU91M1QxdDBYTGhGYnVZVWM3OC9OYnBERUFSK3BHSDhXTldjanRBRkhVM3YzVEdPL2hzL2t4ckhwdEtaU2N2Si9wdFZkSDdPTTlTMllDTTVGbThteHhLUklsZlNSTGFRWStrV2FsOWNTT2N0NjZpSmYvNnpjV24wd1YyejZkMDdIdXpKTUI3aU80d3d1a2MvdlU3aHM5V0gydW5iZzVMbytNaUg2T09rZVhScVlnYlpIMWxOelNtNXNpL1JtK3d2VGUxVFpyT3I1MFdGMUpLeW5yNmV0WWJzeVN2cGkvSHA5TW1ZZVhUQ05GMStaaTNMM3dPUnhVenM1NjNjNi9xOTZ1RkhpZWJIS1ExRlhDSFhzV0VUNmRPaytYUnV4aXBxbjU5UGp0Uk41RmlvaG9kSURwT0d1TXJTcmFTa3EvbmRObGN5UklwbHhNL1laejVGSHliT29TTURFL1VPbXBPejBSb1JjNzN4dlpwK3pHZDVWVytuZFRjbjBNbllHWFJtZWhhMXBPYVRzcXk0c3d2Wmk3c2pkMmZjbjZiSXFzd3k0azNFKzZRV1VGdktCbXFhbWtVZjMyT2g5NGRPNEMvZlVhR0lmSUZUYm8wMDlUZTYzNnVlMmdqemQxamVkSDZRcjNSSmUxTWNuWWlaUm1jbVpNZ2hjQ3dvY01WWFhMZThQUlJYRHU2eTdhUXNGeWtoWlVVSk9malBYL0lHT21GTzFqdHdEWHkzK3czck5zcjhxSjVlcmJ3Tmo1dTQwK1JzY2l6Ykp1OHFJKzY5WE8xQWRCR0t6SUZFZHIrUktySjh1L2ticWRXeW5rN3ptNTdnYlcrTGp0Y3Jjak1uMDlZdjVocWo1L2lxaExmRHovZ0JhdlU4MXRIQjk5SG45eStpdHJtNThzRTk0bnJKNnkzdTRpRGk2cFMyTTVuUHV2SzRTQ20xcEJYU1Iwa3BaT3NmcjJkYmJMSkdtSzY5VkwzeTV2OEIvODZxb050MndDL2tIVnFXRkpEeVJLbThsN3hmcGxkOFpSYjlpUCsvZWljNW42NGs1NGI5NUN4NGdaeGJYaUxuMXIrUWN4dW51TVlUOFhlYlh5U2w0SGxTY3F0SldiT2JsT3d5Zm9zaWo4Z0xQQ0tMdEZseTZiT3hxZlR2MjhicUZma3d6OUpRbytmNXFvSTNrNFdMUHgvc2NkNGZPcDdPVHM0a3gyL3pPeDg0NE5idEZIZHplTVQxa1ZZT3VScm5FMlhrekNxajF2UWlsOGczalE0MlpEYSs4NEJMOEtVNG5IL1hmN1RPWW91T280OStPWS9hTXJieUhYYkllOGo3Y0RydjZFL21uSEp5NWgxZ1NWOW1PVG5iYXp3cGVjV1ZaLy9xU2Rtcm5wUy81a3JGM3p3cHFTR0Z2d0NVbkIydTkvT1NXS1NkMzd4cGFoYlZENStrUitKV3Z2dkN1cjRqK3hnOTIxYzB2SW0reDJYdkN2WWc3dzE1a096VHN1VWplaitxNXRaZDRyMTFmY1IxeXh0TTNDN1NkaFhYTGEwYytteXZyQ3luNXJSTmRDeG1hckFoTzhWREZuZXh1dVV2aUFmNGQzeXRkWWFUb3grbUZ2N1NFV2Z1alBzZWJwbXovTWk4dHFxN3RON3l1cVV0OVpKMmg0aVB1RHZWN0Ryb3l1N1hPVy93M3gwa0pmODVjbVNXZEJXWjM3OTlYaDZkUzg2aFk4TW02aEY1WDIyRStUcWo1L3lLcERiS0ZNMEZIOVo2Z0gvOTVGNDZQU0ZEUHByL3JWdWdhK3ZxRmpmSXR0V1NWa1pzcFp3S1YxWlYwT2taV1ZUWFAwRjdVMFNaSjE4RWVSL2x6M1VHK3IxSEJ0NU5aMmM5eVdmY3FVWTljNDZYeVA1a0Z2ZC91dEsvdEw0YnQxUkQzQW9mY2FXOGIzaXloN1AzVFhKV2NyYS9UTXFxY28vSVFtSlY1TE9UVnRBN2c1S0NTZndPOXpIQTZIbS9vdUROTTVTTGJReFV1dldHV1Bvd1lUYTF6czNWa0RmRXJTdkU5WlkzNk1ZTklxNnZ0RUtDVGlFNHEwVjJVZlBTUW5wMzZEaXRBWE55SDdQQ0tPOUMvc3dMZ1g1ZmZleDBhc3ZjVHM0bmQ4bnp5WE42bnp1WXpGdGY4cjl0cGJROUVOZGJYaUZ1cFNxdXpOL0p1ZStRSy96WkNyK0JyOFJ0bHZYVWNQZGpaTDF4bEZiSGpkenhjS1BuL29xQWk0emxRcHNDbGYzMkxmZVMvYUZzK1RqaWtickpteHBFM2pRdmVRTnUzUkRGMVpTMm9wdTBVZzUzbnRyTkc2U0NQaGd6VjJ2QU9saTgyV0dTTitDWFl1T2tkSG1lTG5HZjB5M3o2aUF5NXowbnhlMWdZVHRLWFpIaWxubUpXKzVIM0FyZmpmdDY5NjBiU042cVE5UlIvUThaWjlHTHJuZm1lWEJMM0o2U1IvWnBLM2wyeG1oMWJPZlpHMlgwL0YvV2lBSzV5SzhDbFh4OHhCUnFuYk5Xdjd4Q1hGOTU5VzdkRlY3eTlraGNiV2xsZmkreVI2YmpEM3ZvVlBMaldwdUNON0Y1MmplUTkrRkFtN2Z1NWdTeVcvN0VaOWdyenlIaU9sY1FtUU9KTFA3ZHVtcnF5R2VaQzE0Z1orR2Z5Ym1GTjNOSlRZQ3RlMUJiM3IxdmRwVjNuMGZlamlxWHVCMzdQUkgvUnNuWjBVMWlNVHYxUDUrc0pmRTVzVUNNOXVDeWhJdTdVeGJvcjFqZURwL2NZNUdQRUxxOFJVSGtMZmJJRzJqcitvcWIxUU54ZmFSMWl5S2xXZU5KaytXUFpJdU9EelJnN1p5a2tMdU5NaWVxLzdiYlp4NFptRWpubDI3aTMxMnB4dXM4cXRBOWt0bmRqZnRMVG5URzNTbmNvY0o5S2Z4NXlyb3FGdng1bDloU1hqOWJkMitBcmJ2UHMzVTc1VDN3VDlmL3N0UkNjaVczbW1lanE4VHRsZzNVY05kaldoSTM4U3dPTWRxSHl3b3ViQkFYOTRXL1Fua2ovWis5ZWdHdXFqb1hPRDVqNzUxT3A5T09uU3RCYlgzMFlUdlZ0dW90T1VvVktscTFGQkI1eUVOZWdnSXRRUUtFUE1pQlBNa2JFa1ZJQklSQUFnRVMwZnBxN1d0dTdXM25saUJxdFMzVlVxNjJ0R29URWRDUTVDUzQ3bnJzdGZlMzEvN1dmcHl6VHpiY2U4L01OeXJtN0xEV1hyLzFKKytPWDBFM3Z6NEZ2RTFPdkFHcTZ4dHVVbWdwbWtvd1ZmdkpxV1VOdklvdUIreXJBY3A3SmYxT0Y0cjNDMlBJbWZ4SCtlL2tBLzhlZmpHN1F0NkZRRzdtKzhrdlJiYS9xNDJMa3YxMzVWNVI2NWFmQzd6Ny9PS2xjQS84V2d3cmNQc0xvdElVL3dCOUhqc2JOc1QwTEwzOTNRZEpKdzJEWm8rUGQyWmtYaHExaS9QaVF3L2paK2lHdlk1dDVLRkxSNUx1dS9NdHZIU1N4cnZTRGU5ajNualhBTHhvY2IzZ3VxUGxVeTJublp4ZS9yQWI0aU4wM3o3dHRiZS9IWjc1Y2Zxem5icnk5akM4TmUzODk0blpiLzFkSUdndFpoK1FpeERJWm8xM1dKQUxETWo4UGRCL1Z0RG5OejBqQ2d6aHRodHdNYndHWUY3Z2ZRSXdLL2tBZlE0N0cycUozeDIzM0EzeGkzU1BQeG0xajNQNmMzQlk3R04wbzM2cXcvdmVwSUtod3lzUDBHcWpCZ3l2YTNWYm5kVjFoYnZQRHRlR3RsMUE0dE5CenRhS09abTFnWFJlTWxKM3dObzk5M2Q0ckJiZDI4L2V4QzhJK1h2NDFNZ0pnQm1yTWdxNVJld1pnaGl0TVhzZjdMM2tiUlAvcitFSlhtUVRyZzJ2QWZnSkJUQXI4RDRCZUhBM0xmcWpPT0ozeG1hVGczckVMVkViT2FjL2RJTXFzWTFqdDJMWHhGeUJkNUhBMng4MjNqd01yMUpkQjE1UVhTKzRXRzFSdEIwMnRHZHJIeGRUSjZici9uVzZ3MFVPWnNRV2FmYzJJL1BiOUdmT1l0L3JYbGhCenE0L1lQNE9QdnozcXFBUnpLNlFzU0pyYXJ6RzJGdTJ4enJFK1FaaWR0SFNmeDlzb0g5bkNwTWpQUURLeS9BKytSc240TDBBY012UHlNRG1wL2paa1VIZzU0c2lQbjdyWXJjOVhoaTFrM1B5UXpmbVRycEJIMkdiOW84N3N2akcydkJLd0F6dkVnV3ZCSnk5T1R5OGF3QmVyTHFsQUsrdXVGNXdJVnFJaWVHaTg5R0dKL2o4YmRJSzNRSHJvZk5seDk0T2kzMkMvdmtiMkhmZUd2K2crVncyOG5mWlFQdkJySUdzclhFeHJQRXVaNDM5SUdidmovNy93VWVmdGZBeXVISThBQS91L0NtdCtRRjZqa0NGRGNUSGJweXQyK016OURMOFN0UmV6cW5QYnpOR1hFUTM1bTFzdzQ1OWE0NkJ0OTY4S1JOWWZaY3E5VFh4TmdxOEswTEVXd3p4N3RiZzNldXNyZ091ZjdUbTFEL0ovL21uRzJmb0R0aHZYcnJ3K2d2Zy90SS9LOE4rOWcvWFR5Sm5OeHdReitUelJERE1maUNiTlc2ejE3Z0UxcmhGWElnNnhJVWVpTm1VN3labktkQ2dnQWQzL0lRTVZMYnhLSmlJMlhsN1lBUDU0elVUZEh2OFgvUlMvRmpVYnM2WkQ5MlEvZWdCdTNvODMwaU9GOVpYeFp2bGduZTVDOTdjRlBDV0FMenlZSHBWRnhZWGc0dWhsYmdhakhub2gzejZLL2FRbDc5NEszN0FNbUpaY204N016Sy9RUCtzVC8yWlE1KzdpWndwMm1FK2owOEQrRDNHUmVIQTdBVzVDa0MyMWJoTlUrTWtFZWRKeEFaZzlsN3Bmdzl1ZWM0SnVJTUJmZ0VBL29VTjhPRDI1MG1pY0R0QUxDcmNNNmVTdkhUNWFOMGVMNG5helRueG9SdHhGN1pCaHk4ZlJUNmNVMkhVRitDVmdCbmVKUWplWlFiZWJBUnZqb0YzVlJyeGFxdHJ3SzBKQUZkQmE4N0RUL0U1dWF4ZVY0aVRCek15aHh1WDQrUFl6N3c5SzI0K3g1eGtNTnNnZTljNEpjU3JmU0NtNzNpd1pyL0Fhd0FlYkg5QkFONm5GSGdYQmR3c0FBOXVlWlpmL0dhRkRjVGRFM04xZS95KzNPUC9zNStEdzJLZm9CdHhETnVnZjQ1YmFlQzFBQ2V3K2k3VjFiZUpKRlkwQ2J5TyttNFRMejRmQUdZSEl4bTg1UWhldExvZHp1cXFjR0Z0TldnLzJ2aTBiWTdkdmxCM3dMYlRBeGJEL3QvdnI1dUlQc3NUTXdaWkxiSlo0LzE0amRmSkdvZUlPQmRCWEx5TG5OMzdTd0Q0bDA3QXNzQ1AvWmdNYnZzUkdkandPS2h3Z3poL0Qyd2dSMk16ZFh1OEpXcEQwUUllSGx1TmJjd2IvejZWYjV5anZpcmVMQjFlcEw0bTNxMENiNTRUTHdmTThNWVZ2RVZlZVBmcThicFUxNEw3QkE0WFEvdklNMkkyaVJtbzZ5QXZYWGtMZHJqTzBua0YyOThQQ2g0MXY4OUhQdE1MTXdMWnM4YWhJVzYySXk2QWlMY0p4S3NNeE94OXMvZE8zK3ZaMXA4WjlmVUdQTGoxT1pKWTIreW84Smw1MWVUdzVhT3hQUjZnbCtSVlVUdUtCbTlHNW9WMEE5NVhOK1hGeTI0bVBYTXEvZGVYNFhXcmI0NjRrVTI4dVFqZTFRYmVRaGU4eFFyZU1oL2x4ZkJpMWZXQys4alROclFmYlg3V0hOTDRIT2xhV0tFcmhHT08zanFmZjBlTytTd1ZOSWJaQVZsWFl3Vnh0VS9FSlNwaUFOaEFMQzlhUjRYem5CWG03NS8rT1VlS0FXNm1mNzdqZWF2QVc1NGxBNDFQazM1NnJnVGllclBDYjkvNW9HNVBkMGR0S2FyNkZtTWJjdnkyNzRQNjFsdjFsWUFaM2lVZTlWM2hVZDk4WjMwRjNtWUw3MXFKRjlRM0JMd21YRFlOQ2w0SFhDZGFpTThjK3VlL3YyNmlKOTdPUzI0a2ZlV3QrRE13ekJoa2VORmdOZFloMXBTWTdhTVdjWkdDbUYydXNNSXFZclhDRWpGOTc0UGJLZEs5YW9GL1lpc3dCL3pvc3lSUjJXWlZlS0ZFdko2OCt1VTdkQlgrVXRTZXpvbjYvdTZMM3lGOTk2KzNOczJvYjcrdXZpamdKT3NiUitxcjRwV0E2WUhqZU5jbGlWZFdWOFdMRmRjTkxwaFR1WnM4QWYvbGpvV2V6N0ZoeGlCak5RNERjWm1DMkt4d2kzV2hHaFcyRUFQQStTNFZwcGQ1Z2lGbXRYVUFmdDRCZUdBenJmREtKa2VGdXliazZQYjI0YWhORFhWOWM3Q05lSGZjQ21kOTZTUWNnQlc4eTBCOWx3ZXA3dzVRMzUxSWZZMFNsTmp4aXZvYWVDc1V2TlUrOGNLU1lkWDFDUmZPa2RnMGZYMHZ2b0gwbHU0TTlEeGJrY05FTEMrOENtTVAxeWtWTGdVVkxrWXFIQTlRNFpYaUxMQkxQVUhmLzJBelJkdHFBRzYyQXg3Yytod1piSHFHQTA3VTdyZFhtSjFMT3BvS242SlIrbFRVcm9iazg5S0YxMTlBRi95bW83NVgzVzV1a2cwd3d5c0J5L3BtNmVyYmFOWFhCR3k4ekZUckt3dkI4Ylk1OFZicDhacUE2NUhxYXZBR2dTYm5kTjVtTGVEWGI1NlYxRE05YSt5RnVOWkFYQ01SdTFTNEhLdHdxLzhLNTNsVW1GN3VpY0x0WkhEWFQ2MENiemNBVTd5c3dCTHd3Q00vSkFuNmZST3dnZmlkc2RuNEhtZkU3by9hMXBCODZFMDFBZHVBZDhZdXMvQnl3QTBXWUZ0OU53cThLT0FtQ3pCV1h4V3dXZDltMy9YbGVIWDFaUWRVRnFjT3FXOERBamdrdkhMK09HSXFlc0JPNVd4TTZibXVOUTZDV0ZiWWdiaE5JUFpiNFVKUTRRS0llQnVvTUFLWVh2SUQ3TGtNc1FSczFKY0JIdUNBbitLQUIycjJHUlcyQVBjdHFDT0hMeCtON2ZHdm9yWTFOSUNIeDU1U0YvL3lsYmZ3amJIVjF3Q2MwQUdXZUplQit0SVh4RjZVRm5BK0JMd0RBUGFvcndsWVU5OXFmWDFOdlBYcHg4dm14SVBySFlmcmQxKzVrNUFRbm0wck1RU3NJbFlCMXhtQWE1T3RjSXRWNFRYR3U0b0R3R3FGVGNCYkxjQjAyT1hPendrOUx3TzE3V1N3MlFtWUYzaVRBWGpqazZTZmZnOENadlBtVGZNd3dCL1JPRjBldGE5MDEzY1lYV2hDWGZ4Ym8rYWJtMk1DWHF3QVpuZzVZRjE5RzBWOWJZQ05sNWlMMUZjQ2p2c0FYR1ljcXZJQTlXV0hWd0llSXJ3Y0dYM1dLMSs1dzdhL2Y1OVJFTXF6YlloRHJmQmVVR0VNY0tzRjJLeHdNNml3QXBoWEdBQTJFQXZBVGVaNUdkejh0RHZnaDU4a0F4VjdSRXdBNEZQVGl6SEFiSlpGYlN6ZDlmMkJZOUVYMzBCT3p5ekZBVE84RUhDV0Q4QXJGY0M1R3NDRkFMREV5d0czV0llbUJOWjNqNml2QkZ3SkFiY0R3QUhydXlsY3dHemVuaDAzOTdmemtwRWtVYnMvdEdmN1J1d0ZHSzF3bTZpd0JNd1J0NElLUThBN0FlQWRGdUI4QmZBcUN6QzczRTNBYk9qUGNMeGF3RStRZ1lZRHBKK2VOWDR1SmVMNzE1TlhyN29EQS95THFJMmxHL0N2MUVXL2R2VjQwanUvVmdIY1lBRm1lSDBCYnJJQXkxdFhBczdEQWJNRFlBTmNCQUNYYUFCajllV0FPL1NBR3dCZ2R0QWw0SkRySzJldy9nbnk0bVUzOC8wOU9tWitxTThPV21FTzJFUnM3RkdORHZCZUM3Qlo0UUNBelFwdkU1ZTJEdkJ5QXpBOVB3T2xyUnd3eC92b3MyU2c4V2tCZUNPdDcwTU04T01rc1hhbmlBb0EvTmFvK1JqZy9zNWhtWitLMmxsNjhHWmtYa3dYZUZaZDlKdTNmWi8wTGFqekQzaXBIakI3UVZaOUZjRDVFUEFPQUhpbkhYQXhBRndLQWJmcEFkY0F3SFVhd0ZoOTB3U1l6VnZqbC9MOVBaMjdPVDJBSldJUHdIaUYyOFdsSndGWEtvRExJZURkQUhDTEhYQWNBRjd0RS9BS08yQ09tRmJXck8vbXAwVjlJZURhL2VJOFNzQjAzcDhheHdDekdSZTF0VFFCamkxUUY5dDV5WTJrZTBZSnY5R1NCOXlZWHNDeUJoendYajNnV2dEWXFBNC93UFdndmlyZ1Rla0QzTGV1bGJ4NnpUajY3K0UvRzYwd1c1ZEUzR0NzV1F1NFF3dVlYWksrQUs5eEEvd1lBTHhWRHpoYkFFNndzL0xvTXdiZ3A1eUExM2VRL3BWTk5zRDlORHFITHh1RkFhNk8ybHA2QUErUHRhdUxmZTNxOGVUOU9SWEJBVE84NXpoZ3M3NWVnSTJhcFFQWm1lTG10RHczVk1BU3NTZmdWajNnd2hRQjA3TTBVTDdiRHZoaGl2Y2hXdVo2Q3JpdW5TU0tkdG9CMHpQNytyV1RNY0MvanRwYTZKK1hMcnorQXJxd2JuV3h4MGJmVDA3TnJmei9BcWNKY0RySEUzRDllVlJnZnBZbzRvZWZ0QU5tOWQzUUlRRFg3QlBuRWdBK1BtWVJCcmpuMEVVai9pVnFjNkYrRG1aa2ZnMVpLSGxuY2dFNVBhOHFSY0NiMHd0WUl1YUEyL1NBYXdCZ3RjSTZ3SStjbjRBNVhnbFlya1hpOVFXNFhRdVk3Yk12d0hFM3dOc0E0QzE2d01zQVlIYW00dlE1bXlqZ2pVODZBZGZ1NTkrRGdFOU1Lc0FBRTNiZW96WVhMdURoc2NYcUlnOWZQcHE4TjNzZCtTQW80Q3c5WVBaeVRNQTVDdUE4Q0hnN0FOeHNCMXdFQUpkQXdIdjBnS3NCNEZvTllJbFlsdXA4Qnd6cjZ3S1k0elVCZHdEQSt5M0FGUXJnTWdpNEZRRGVaUWRjQ0FBWCtBUzgzQVV3UFZzRDZ6dnNnTmNEd0lYYlRieHNldWRXa1lNWDM0QUFqazJQMmx6WWdMZXBpL3pETis3bWdEK2NWNDBBcnJjQVM4U2VnQnN0d0dhRkRjQzVPR0NPV0FJMkVSdUFpeldBNlNIamg2MFNJbTRYaDFJSHVCNEFWaXU4NmZ4RDdBQXNMeVdKdDhHdHZoMWl2MURBYlJiZ1VtUHZnd0RPTjk0eEI3eFZEemdiQUdibnlBUk16MWYrTm9IM0lRQ1k0aDJvMlVjU1phMDJ3UDBMNnNqTG43OFZxM0JSMU9iQ0J2eWl1c2kvM0h3ZkI5empCcGlPRGZBU0g0QlhRTUFTTVFKNE5RQWNoNEIzaWNNaUt5d0JjOFFBc0ZwaEUzQ0hDZGhSWVF6d2VWYmhJUFYxQlZ3RkFZdjZDc0N3dnJ1dHk1UmRyR3NoNEdZQUdOWlhBWnhqQVdibnd3S3MxRmNDcG1lTVlSMTQ2QUFacUFlQXF5bmd5amJTLzRPSFRMeHNqbng5SWdhNE5XcHpvWDFldXZENkMraUNldFJGSGgrYkxRRGZWNE1EWHFRQWhoV0dnSmNCd010MWdMZUtsNW9QRVJ1QUN4SEFSUXBnczhKdG9zSVlZRjdoanVRcWZKNGdOdkZ1VXZCNjFiY080SzNSMVhldnFDOEt1TVVDTE9zYkIvVlZBYk1MZXhVQXZGS2NDUUc0RVFmTXdpQWp3YzVMZ3dLNGFpOUpWRkRBOVBzbTRQbDE1TmlOc3pEQS94bTF1OUErQnpNeXIwQVdTUDQ1cGRBQ3pEWkRJbWFBRjFxQSszV0EwUW8zaVFwTHdEa0tZTFhDSnVCbUMvQmFBSmdqaG9EM0NNQitLNndpYmpoL0VYdmlUYVcrRmJLK2JSWmVEcmdWQU41bEIxd0lBQmRBd0tDK3E2ejZzb3Vkbnc4SmVKa0dzSEhXV0lVVEd5amV1bmFTcURFQXI5dERFdm5iYklDUGoxbUVBZjd2cU4yRkNEajJIWFdCaHk0ZFNkNjd0NHk4TjZ2Y0NSaFdXQUtXaUNYZ0xCM2dSZ3V3V1dIalplWWlnR1dGNDBpRml3Tld1RXBmNFdRUW4wdVFVYndTY0JDOFNkVzMxYXF2Q2JnWkFGYnE2d1U0R3dCbTU4Y0V2TkVHbUVFMTYwc3hEMVFhZ05jMkE4QzE1TjJ4MlJqZ3ZxamRoUW40Zm5XQnIzenhOditBNlNRY0ZWWUFMd09BNlV0aUw4c0NyRlE0SHlMZWtWU0ZCV0pOaFRXSVRjRDFDdUJ6R0xIOE8vQy96eU5KbExmT3dGdUw0SFhVZDQvLytzWkJmVlhBN0tLV2w3YkVTNGRkN0daOXM1SDZLb0Q3ZjBEUEhLc3dBMXhOLzFuUkpnQ1h0dEN6V21jQ1BuRjNBUWFZSExwb3hLZWl0aGNPNE9HeHRlcmlYcnQ2bkFCTXAyZGV0UVZZSW1hQU9lSUdxOEkyd0J2RnhxTVZicklxbkdQY3dCSndhQlhlSXlvc0VWY3FpR3Q4SXRhVk9HTElOcmloNFcwWCsrT29iNXVvYnhsVzN4Yi85YzMzVWQvbG9MNHFZRmhmZXQ1NE9GWS9KZ0JYR2ZWbFU5WXE0aktmbnRuN2FzbnBhVVVvWUJxdUs2SzJGeGJnemVyaS92aU5TUUJ3bGRnTXR3b3p3Qkx4RXVPbXpOSUJiaFNBZlZkNHU3UENKdUlXSjJKNTBIaUYyNnlLK0VSc2c0d2hWbXVzUUU0blpsZTRFcS84dTRhQ2Q2L0FXNDdoYlJYN3I5YTNNTm42TnVIMVhZclUxd0RjVC8rTTFYZWcwZ0JjdmxzVW1OYVoxWmNCN3BsWnJnR2MrZldvN1lVRmVKKzZ1RCtObUdZQy9uQ3VCMkNqd2dsZGhkbUw4RnZoVlVpRkMwQ0ZDNUVLRnhtQU9lTGQ0U091VnhCamtHR1JROFFNbjJNK093bTR5ZUlWOVZYd2xoaDdYWXpnalJ0NEN4RzhxZFpYQW1aNEpXQjYvaEpybTBtaW9zMnNMd2RNejU0RWZHWldoUTd3aUtqdGhRWDR4K3JpL256amJOSTlzeFFBcmhXQVVjUU55VlY0dVVlRjg1d1Y1b2pqSVNPdVJoQWJrQ0VBLzVBVnpBcG8zNk9DeGRCaWNMSHFTcnkxQnQ2YUpQQ1d1dURsZ0p2dDlaVjQ4eVZldC9vMitxNXZ3c1FyQVBlejcwREFKYnRvbVIvbWVQdm4xWkErT2lqZzRiRmJvcllYRnVCZnFvczcrcTI1SnVBUDVsU0t6VWlsd2pyRXNzSU94TnZFUzg5M1FieEdRVnhzSUM1SkZuRzdWU1pkalhXUWRaaGhuZUZzUWtiOW1VZVE1OGpmNFFPdXM3b3EzdjBwNEcwUit3N3JxK0tGOWMwRjljMUI2cHVkWEgzNSthT1RLS1Z3eTNmeituTEE3R2NrNExuVi8rc0J2Nnd1N2k4M3plT0EyWnllWFdFQURxbkN5d3pBMlVpRmN3ekFLbUo1SUZZYmdPbGhTUmx4QlVCY0JSQnJhcXlGN0liWkRiV2YwWUZWMGZxQld3dXFXdzNnS25qWlBxV0VkN1dDTncvZ1hhWGdkYXR2bHJPKy9XcDkyZG1qWnpCQm55L3JteWplS2M0bFBiTjlCdURPaTIvQUFIOG5hbnZwQlR4REFENDVhNTBBN0xQQy9WaUZzMXdxckNJMkt5d1JQNVljNG1JTThSNkJlSjJDR0t1eGI4Z0taZ3kwRHJadWROLzNRcXVGNjFIZENsbGRCVzlKbXZDdWRNRnJBcmJqVFVpOGkrMTQrZEQvNW5qWkZHNjMxWmZOaTUrNzJRazRJM1ozMVBiU0MzaDZDUWQ4NHQ1eXZobmVGYTQzTnppQklWN3FnbmhGeUlpTEVNUVNjcm1zOFY2WEdtT1FmV0NXWlZaQnU2RjJnK29DMW9iV0UyNjdIYTVTWFlGM2ozWFJwWW8zM3cvZUpnTnZvemdQYW4yWHVOUjNJUURNemlHYnBmUm5pMmg5NmZjNVhnRDQwS1Vqc1FKL04ycDdZUUYrVVYzYzBaRnpCV0JhNGZjb1lyWVpGbUlBMklFWVZGZ2lsaThDVmpnbzRyeGtFUnVRUzdBYXQ3blgyQzlrZ0JrRnJjTDJPNXJuQkVLckZ0ZFBkU1hlWW9oM1Z4SjR0eGw0dDRyM0tRSFRkOHp4TG5mQm0rV0NWNjB2TzRQc1BNcHpTYzhveE5zM3V4TER5MlpVMVBiQ0F2d2Y2dUwrZk1Nc0FkaW9jTy9jS29GWVZuaStTNFVoWWxoaEZiRjhjZklXWmkrVklWNlpRb25qQVBGYUY4U09HdnVFck1Qc0F0b1Z0Y3VvejdBOVgwVWJHSzZmNnJhSy9Tc0NjRG5lNXZEd1ppdDRsenJ4SmlUZXhTNTRPZUJhY1Q0aDNqbFZwR2Q2S1E0NEkvTnJVZHNMQy9DUDFNVzkvczFwcEh0YXNZbTRaMDRsMzVCK2lIaUJOK0tFaWpnckhZaTNpOE5rUWxZUlM4aXRMalhHSUNlRDJRVzFDM0FVcUFNckJsYUROaWhjdExvdHp1cTY0YzJUZUxlR2l4ZldWOFVMNjN1ZkFOeW5BRDQxSlk0QzdoeVdlV25VOXNJQ3ZFOWQzSkZySjVQdWU0cE13Qi9NcWhBYndnQ3JpT1ZHcW9nWHB4UHhOdXZHbDRqVkdxOXhxYkdFWEpvRVpBZm0vUUJ6dXdXclZqZVB1NHptT3hDckNUWW9XaGU0SlFwY1IzVUZYbmxSOHIwdWNNTzdKVDE0c2ZxNjRPMmJYVVZPVE1oRkFSLzZ0eEgvR3JXOXNBQTNxWXQ3N2F2akJHQ2p3cWZ1TGJjMlJnTG1pT3ZTaTNnRmduaVZOMklPT1E1cUxDRVhCWUhzZ2hrck00YmFCbHNCam83eXM5VUtWaDFZRlcxZ3VLMTJ1SDZySy9IbUluamxCUndFcndRY0JPOTg0eXdpZVB0bVY1SjNibCtLQVg0M2FuZGhBaTVYRi9qS1ZiY0x3QWJpRXpQTHhLWjRJWWFBT1dJQm1MMk00SWdiblloeklPS3RBbkVlUUt5cmNWeXRzUVp5aVhHNHRWVldNU09nTWRRb2NNM292bGVwL0k0S3JMUWF0RUhoU3J5Rkx0WE5sOVhWNDJYdkx6QmVPamE4aXpSNEY3amc1WUFyU2Qrc1N2SzMwZmRqZ0E5SDdTNU13RXZVQlI2K2JCVHBucnJXUWt3cnpHODBnTGhmSXA2ZkRzU2JMY1RMTWNSYkxNUllqUXVVR3FjQzJhdk1EdEFBdFFvN21hbEE2b3FDRFlDV3JkY05ycC9xNWtHNFc2MTNJNnNyOGNvTGVWa2E4V0wxcFhqNzdxMGd4MGJNeEFBZmlOcGRtSUR2UWhaSXVpYkhLZUlpRTNIUHJBcnJka3NXTVIxUHhCS3lncGpYZUNXQXZNcWx4aEx5YWcvSXFXQkdRWHZCVG1MVzJiSDZBb3VpVFFHdXhKdm5VbDBIWHFXNk9yenlMREM0WWVJMUFCKzVaZ0lHZUgzVTdzSURuSkY1RFFiNEgyTlhrTzRwYTAzRXAyZVUwYzJwVEFGeHZSN3hFb0FZMWxnaXpnYUkvZFE0VDYxeEVwQlJ6QjZnYmFqM0FHZ3FjUGVCM3pPaHFsaFJzQUhScnJIUXVzS1ZlSE5kcXJzU1ZGZkZLeTltRG5mbzhQYk5YRWRldVhJTUJqZ3JhbmVoZlRvdnl2dzRYZENndXNpM2Jsa2tBTE9oZ04rZlhpSTJKaG5FRWpKQTNJOGkzdWhFN0tmR09VcU5VNEhzQjdNS1drV053VTVsU3BIbnU0SEYwTHJWMWd0dW5nSjNsUjJ1czdvcDRGMllBdDdaZHJ4bnBwV1NneGZmNEFTY0Vic3RhbmVoZnVpaTNsQVgrZWZNbVJaZ0F6SGZtS0NJMVJvenhJc0FZaFZ5RnFpeGZQbU9HamZhYXl3aHIvS0FuQXBtTDlBMjFBQTJodHZQbENoSTVSUjdnTldXRnFsdHNuQWwzaFV1MVpWNDVZVXM0YXA0NVlVZU1sNDJKNzZYZzlXWEhCeVcrZG1vellVTitIRjFrYi8vNm5qU1BYbU5EWEhQakhKL2lPOUxFZkVTZ05oUGpjT0FyTVBzQ1ZwRnJjR2Q4a0NvQ05aUTBYckFYWW5CYmJURGRhc3VuWDRiWGdVdXhEcy9PYng5OUt6K2ZmUURHT0R1cUwybEEzQ2h1dEREbDQyaWdPTTJ4S2VtbFloTmNrSGNoeUdXa0NIaWhRQXhIUnRpcnhvdlUyb2NHSEpBekg1Qk8yQXJ3QVBQTGoxVUZTc0VHMWZBWW1pVGhNdXJxOExOUnVDNlZWZmlYWVRnbFJlK1g3eXpjTHhzM3JodUNnYjQ1MUY3U3dmZ081R0ZrbmZHNXhpSTR4endlMU9MeEFZRlFseUxJdzVVNDQzMkdrdkkyVDRoKzYyeUEvTjJHMlluYUExcUwrQitSL2ZNdUJNckRqWUEybFRnU3J3bVhEL1ZiYkF1Y2gzZSt3QmVlYlo4NHUyYlhrWmUrZnl0R09EcXFMMkYvdW04S1BNemRHRm4xY1crT2ZvQjBqV3AwSWE0aDI0TWluZzJnbGhDbmc5cUxGK1NTNDM3dldvY0ZtUU1NMVptRmJTQ0dvZXRBRmRIaTFLZFpnZFVCMVpZV0IzWVpOSFNmZlNFSy9GbUpWbGRpVmRlOUxLNmRCelY1WGdyblhobjJQRitPQ21PNFNVSE0yS1RvL2FXbGc5ZDNHdnFZbzljTzVrRGhvaFAzVk1zTmt2ZWVHNkk2ZlRiYWx5WGZJMzlRSFpnYmtvQk0xSm5MV285YkMxMFpMeSthMVZWZzFVSDFnL2FkTU5kRE9DNlZYYytxSzZLZHpiQUt3TUM4VTRYZVB1bWxaRjN4bnhmQXpqejRxaXRwUXZ3UStwaVg3cmkyNlRyN2tJYjR2ZW1yTEZ1T2hYeExJQllyYkdKMkUrTjYrMDFocERsSVFrRVdWTmxCK1l0Q21ZRXRCZHFMWEFGT2pxYTd4UjRRUFVOTmttMEtseTU1enE0ZE94dy9WUzN6am9qRUc1QXZMM1RTa252UGFYazZIWDNZSUNQUk8wc2ZZQXpZbmRoTjlZLzdzeDJJUDd3bmhJTDhReUEySzNHREhHUUdpOEVOVTRac2d0bXJNeFluYldvWFdEN2hlNEYwNEVVd3hvUXJBT3R6OXA2d0UzbzRDWmJYWWwzRnNBcnd3SHhUclB3OWs0dElTOWZNUVlEdkRscVora0UvRW02d0Q1MTBVY3o3eFdBQWVMM3A2emx0eDNmT0QrSWs2bXhoTHpJQTNLeVZWWXd1OVlaSzdRRDlWWUFTUVd1UUhjZDVIdTVDRklIMUszVzM5RUZyS08wT3JUcGhyc0F3RTIydWh4dm1RUHZ5ZS9sWW5nSlBlT1RvM2FXWHNURFk4K3JpLzdkbDI0blhYZXRKbDBUQzIyUXo3QUtUNE9JeTYyYlVTTFcxWmhPdndwNXdSQkE5aXl6QjJnVnRSdHNWK2dlNC9Vc0RLb3ZzR3BsUTBEckI2N0VhOEpOb3JvcTN1a0E3ejBXM3Q0cEplU3ZOODdEQUNjT0Rodng2YWlOcFJ2d1l1em1ldnU3S3d6RXEwM0VKMm1GMmEwbkVKZFppSVBXMkFhNUxoeklRVEZyNjR5QXhsQmpzTFhRZlk3YnM3RGZEN0Y2Z2MxR3dHSm8wd21YVGwrUTZzNkUxUzEzVkZmaTdaMVNURjY3Nms0TThNK2k5cFYrd0JtWmw5S0ZubFVYZjNURVRBRllEZ1hjVFlkdkd0dEFCbmw2OGpXMlFaN3ZFM0xRS21PWWc0QldVUVBZTnR3NjRLbk9DdnM0b1dKWUViQXBvQTBMYmo4R2R3NkFxNnZ1REZCZEI5NWlQcWNuNUdONDJTeU4ydGRRVmZqbjZ1SmZ2bklNNlJxZlQ3b21GRmlJYVkxUFQxNXJSNnlyOFZCRERvSTVFR2d2MkkwS0tDZjBRTE1jQVNvbjJ5ZFdIVmlJZG9rR2JUSzE5WUlMOFpwd2ZWWjNPb0FyOFU2eDhQWk9MaUovamMzRjhKNWxjWXJhMWhCVk9MWUF1OEdPMzdwRUlHWmpJTzZlV0NnMlVDTFcxWGdHUUd5RFhHVzlSQjFraWRrTnNrZVZVY3pKZ0ZaUis4RWQ2bXpXSTFXaHFsaDFsUTFTMmlHRnU4NEcxNjI2RW0vdnBMWGsxUy9jaGdGK0lXcFhRL2JwSEpiNWFicmdIblVUam54dEl1a2FsMjhoTm1wOGV0SWFzWUZUQVdSWTQrbWFHaWNMMlcrVmc1UlpDMXFER29QdEJqek13WDduVXVUdmw2VXByRnRsVTBHTHdMV2gxY0dWZUZXNE14QzRtdXIyVGhKNFQ5eWVqZUZsc3locVYwUDZvUXR1VVRmaDBDVWp5YnQzcnFTSTh5ekVkTG9wWXVzbUxJa0djaERNZnV1c2dyYWhkb0h0QjNtUWNYdCtsZ0xWRDFaZFpTSGFoUnEweWRRMktiZ0Nyd091cHJxOWQ0czVldTFVREcvZndXR3h6MFJ0YW1nQloyU093bTZ5bzkrY1NicStseWNHMVBqMHhMaDlZNmNBeENya0dYNGdoMUJsRlRNRXZVaGZaeE8wRGpVR0d3VytVUUdXN0NEUFhlSVRxb29WQlJzQzJwRGg4dW82NE9MVjVYZ25yaUU5NHdySW9VdEhZb0QzUmUwcHFncS9wbTdHNGN0R2tYK09YUVVRV3pVK3d6YVNiU3lFUEhVSUlRY3BNMXBucE5BQXRTL1lmcEFuTTM1K0gvajdvVmhoWWYyQ3hkQ21VbHMvY0tjRmdHdmc3YjFyRFRrZW00ZmhKVFJHdDBWdEthSUt4eFpqRzNJc05vZDBqYzBWQXlDZm5MQmFiQ3piWUJ2a2t2QWdoNFVaQXkxUS93OTdkUlliMWRuZUFWeEZRcXE2ZkExdFo3eXdtQTlDV0F6WVkvdU1QWGpGQ3paZ2RveHR0Zzl2UU13WERKamxnNlFmRjIxVHFWV2xLbEtYdEUxVU5SZVJXbFc5YUtYbW9oZTV6SXh0MW9TbUxBRU1HTStNYmJESGRrSVQvUFk1czNqT09mTSs3M25mbVRIdjJENlA5TCswNTV6bmVYN240VVBOd2kyQ25EZUcvLzJLaGRSNFdZMVlhV0JwVjFZRTdZekR2WXJDL1g3SCsyU3kvZ3JwVzFKS0EzeTNkMUgrYjhpMkpLVThOdVczb0FGRHhxWmNXMVpHZkhYZFVjUWF5Qk83M2c4MU54N0lqUkhJZ2xjWnc2d0YzUkluYUNOcUhXd05iZ3k0Q1hwcWVQL1BjUTZvWmxpcFlQOUNEellldE1tQ08zMTFEWEExZU5VTXVGcVE2K3M4STl1UjFJSW0vQlg5Q2g4bXZscEFYSGRlQjNsNCs2VlFjeVBObmduSWdwang2MndDbW9XYUJodEZqb0JIZy93dDYvZFl6Mmw4SjA2dzNHZ1R1YmFtY0gvTmhEdTU0MHJ3K3Q1Y1hra0QvSVBuRHd0K1g3WWh1WUR0U2lZMDRsWHNGUzRId09lQ2lJT1FOWWpINmkrSG1td0srYW9KWklHcnpJT1pGN1FSTlEyMkdlNTQwUE9DakFlcUR1eWZ4d2VXRjIyeTRPN0I0UWJ4QXR4SjJMWG5tOXJvMXpmTitiZXkvYVJFUVNQK2p0YWdCL2tIaVc5TDl6UmlYL2dhRDBIVUwyT3c0YnlRaGE2eXdHVVdBWTJpWnNER2NDY0RQTS8vYkVXZXFZV0JOUXoyQnd3c2h2WlFFdEJpY1BkZTFhTmx3UTFlM2N0a2NqdGsyNi9nK202bTRmM0pZeXRZSWR0T1NwVGJwbVJCUTM0ME5xbDNTUW54VnAwaHZwcHpNWkJIdGw2TU5qMVJ5SWxpRmdGdGhwcUZtNFU4bVdtaEFLVWhOVjVXREt2SWxlVkJtOGkxNVlVYnhqdFFlQXk3dnY4czIwMUtGVFRrYjJpTnVwdlRFQUljaVFieTJMWkxvVXVzR2NJMDVBU3VNamZtZUVCanFEV3dkYmd4NENoMndSemppT1paVEtGU3NWTEFZbWliNGtBN0EzRFZUTlJlSk5lWGx0SHd2dmJZbEZXeXphUlV1ZTFLQmpSbTB0aXNuZ3dYZVY1eGl2aXF6OFpBOWdQaWllM1E3UG9yQ1VJV3dOeG93Q3dFbW9HYUJSdEJUc1V1R05yLzQzb09JMVFSckt3cnEwVjdJTWxvTlhCRGFPbHdKN2RDNmk2UmZrY3pkbjAva2UwbEpRc2E4NmUwaHQxWlV3K0F6NFNqaHp4Y2V6N1VmSFVRR09Sa1lHNHdZa2F1TXd1MEVUVU5Ob1piQkhreWd2MytZUk9vck92S0JQdkgraXNyZ2xiNDJyTGhxZ25BbnZWbWJxTGgvZDV0VXhiTHRwS1M1Ylk1ZndZTjh0RVFQM0cxRVYvVkdTcmtsN1VYUWdPSURJU0ZtUXFaRXpQek90TkFjNkttd1k0QmJrRE9nNTAzdFA5NzJQRGJaa2laV05sZ1k2NXNNdERHQ1hleTdpS1pyTDFJN3EzYlRiKytkdWVmeVhhUzBnVU5Pa2xyM1BXc0N1S3I3QXBGQnhsU2M1WUUxTVpIQm1JS09jbVlqYUFQYUVEem9tYmhOa00rVThHZWcvYmNOS2hHck5pRk5RUExnM1pYZ21qRGNDZmhHQXlYbktUamhlUGlzU20vSjl0SVNsZnZvdndGMEtnYnRBYmUyOWhBZkp0UFV5SDdBZkdFT295dGwwTEQ0Y2I4QVIzemJnTm1IdEJjcUZtd05iZ3g0THpZNDRuWjd6VXhvQ0pZNHdZYlFSc0JLNHhXSE83a0Zrak5lWEpyZVJWMmZUdGsrNWdWNWJZcm02QmhVOFlHOW1TNHlFRHhDZUtyT0cyQTNCVkVQQXlJUTBNSkR3aUZ6SG1aV2RkNTcxVTZhTmFWMXFDbXd6YkRqVUJQV2t4K3M1R0MxQXlxRWFzWldOcVYxYUxkaWFBMXU3WmJJMmdSdUdHOC9UbE4yUFh0VTQrTGJCdXpwdUJyOTArMFJ0NWFVVU44NWUrRkVFZXl1V3NhODR1YWM5RUJKWUo1QndPejlqb3pMelNDbWdZYnd4MEQzQUFkQ3hkQ0Jrb0RUaDFRR2xJYVZDWldUckFKb2YwVkY5cGdxcytUMGJKZndwRW9vdUdkZ3FQaWxHMWlWaFUwekFhTkc2RWhmcERUU0x6UWJHOE01TkJWSHF2cERnMnBsZ1lad2J4ZGp6bjJPbi9BQWZxUDlLQ3BWOW9FTmdzNEJUb3RPdndIR0FocGFUQUppbFFRcXlEWWFiVDFETFRiT05FYTRFNVdkNU9KcW03eXpZb3QyUFg5V0xhSFdWbUErQ2l0b1QwWkxqTGdPaDVDSElHc3dleUhqS3VJSThOS0JEUHJPb3VnNW9aOVZROWl2MkFhNGtUSWlobFFGQ3FDVlFRczdjcHlYMXI4MmtiUVRsU2RJeE9WNTBoL1RqT0dkOEJ0VTk2U2JXSFdGalR3djJtTnZibThpbmhMVDBVUmF6R3JpRGQza1FrWVVuQmcyaTh2aHJuT2dGa1VOSGFsamFocHNIVzRlWUJ6NG1jbWp2KzlGME9xZ2NxTGRlZjc1bUNUamxZRHR6SUVWODJMa3M3Z1VhQUN0aXY3WkJ1WTFRVU5YQWFOSEtNMTk5NzZ2WUM0TXd3NUZ2TVFRRllIRmh4Y1pKQk16QmYxbUFWQW02TG1nYTNEVFVFZUE5MkFYampJLzlwREN3T29FYWtPNmdmMHZpUUVsaE50RFk1Mm92SXNtZGlzNWd5NXZid2F1NzcvS252LzUwUUI0blphZ3ozcGhlU0o4b3N3NGs0TjVpamlFVUNzRGk4RW1RTXo2enFiZ3VaRWJZUk53ODFDemdXZk03ei9uL1pzT3dXaHNyRHlncTJqZ09WR3E0VUxxVGhESG1idncvQjZQYmFDUDVDOSszT21vS0gvU1d0MDM1SlNNcmpwQlBHV2RCb2dSekcvcU9pS0RyQXFOTmdZekZyUXRTYlhXUXVhQzdVQWJCWnlNK3pKeUU1R1RKNDNGaW9IVm02d0RMVFZZbWlES1Q5RC9NNDI0a2tycEFPMkszdGs3L3ljS21pb1RmMHEwcHI5OWNwYTRpMStONVNTZHltUU84bG9FUEZaL1dDTm1KblhtUVk2RHRUWXhkYmdGa0wrQmtNSGVrWC9vV0pCUmJFS2d0VmMyY2txTWJUQmxIV1JzWkpUNURwOC9PbDRuWDh2ZTkvblpIbnNTaTAwZUlyVzlQdlplNGwzMDhsUUVNeGpLdUxJVUkyWXc2QW56YTZ6RHZWRmM5UXMyQmp1bU90dGdNNUFIM2VvLy84eUd5ZUdWQXRWQktzcFdNMlZyYUtBTlVFYnlta3lVWHFhL00vS09qcmVOT2NEQVB3N3NuZDl6aFkwOXk5cGpmZWtGNUwrdkNQRTZ6b1JoV3pBN0N2cEpJSHlydEJnTjJ1R1hja0ptb1c2MWd3MUJiWVJOdzI0R2ZTWkRQWXNXeW1odlp2eC9WbFlUY0dhWEZrT3RKSDBaemRnZVA4UDlrdVJ2ZU56dXR3MjUwSm85RmUwQWZSbEZwUG56cllRNGtpMG1DRSt3QnhRaHhvWmNtVG9NYURQVVVGUHNFQ2psMW9EV3dRM2hoekxOc0h3L0UvV2M5VWg3MklHbFlGMU1vSlZCT3cwMmk0VTdVVEplOEVNRmJRUVQxb2hIYkRkMlMxN3YrZEZ1ZTFLRmpSOGhEYUVtMW1WeEZ2WVFYeEZ4L1dRTlpoVnhPUHFnQ1BETGcrRHJtQ0JGa0ROQTF1SG13ZTRBUGk0dy9HN3RjWXdrQnFoQ21HbGdEVzdzZ2phWUlwL1NVYUxUcEJybVNYWTlmMFAyWHM5cndvUTEwUFRwMmpEdVBQMlZqTG83QWhDOWhZZXAyTDJBK1R4MHZkQ2c0NE1ueGMwNjBwclVmUEF4bkNqMEM5UUVDVXpsTi9iSWdCVWg1UUNsWVhWOU1KcXdYYXh3WWJSUmhKd2RaTGJXVlVZM242M1RWa2tlNmZuWGJudHpqOUJCa0x1cjlzWFJCeUpGbk1FdE44RmlDUEQxaTRDQnBvTHRUbHNQVzRPNEtMZ0V3blA3eHVCY2lObFlPVUZXOFlBcTBFN3Z1bFVOSzVUNU83YjJ6RzhyMkNQRk5tN1BDK3JkMUgrQWhqQUY3VEJlTklMeWVPTkIzV0lhYUNIQVBLNE9uVGpJckJBbDJsQW02SG1nWTBnajRWT0FjOEtpczRzM1RxWU1UaE5nV3FRbWtIbHhXb0NWb2ZXRlU1Ulp6RDk2L1pqZUluYnJyVEwzdU41WFc2Yjh5MFl4RDNhY0hveVhPUnB6aEV5V05CT0JwVjJGTE8vNkVSdzhOcGxZSUxHVUxOZ20rSVdRTTZKbjVsRWZzY01xQmxVREd1U3dFNm44RjNpM1hpWWVOSUtNY0FmeTk1ZnE2RGNkbWMyREdPY05xUnJpMHZKZ0tPRkRPYTNSVU1CN1lkckhIQ0ZGeUljSm1nbWFoUFlOTndZY0ZQdzhYd0FPUDRQejdPd2dNWWdaVnhXRHF4Y1lNTm9JeG5PYXlHOThCRkg4SHJnNDc5UTl1NWFGUzVBdkJPR01rVWIxczJsbThsekkrSnB6RkhRZnVmeDZDSkVsZ1FEamFHbXdUYkRqU0hIb01lTDN3d2dsbklrMkh0Z0Z4V0R5c0lxQURZWTU4bGdYc0pzcnkwdXdmQU9lR3hLaHV5ZHRjcFFicnR5QVJrWStYcDVEUmxVRWF2SmF3MkZBdHBmMEJGYUJOcXlVRkFMd2Nad3h3Qm5JQmZCenhPaDN6bk54c2tEbFJlcnExTUliRERLaVdER1lJYTNsbFpnZU1kaFR4eXlkOVVxcE9BU2Y0b2gvbmJsdGloaWJReWcvWENSeHd0UHhpNExDelVQYkRQY1pzaTU0TWNSa2QvamVYNEtVaHdxY2xscFdCR3d3UlNFazMrYzNNbXF4dkJPd1g0MHl0NVJxeGpsdGprWHdxQyt4QkRmZTJjWEdjeHRvVVBXeEErUXg1MG5vc3RDV3lZTXRSRTJMMjRSNURLRFBMZnhIYm1oOG1CbGdOWG03b282REM4QnZCZGs3NmRWSE9XMktXL0J3TDdCQnZuZDZyMWtNT2RZS0xuSFVORCt2RGI5MGlnYTBDelVMTmdZY0FweUx1d3pIT3laWW5EeUlNV2d4b2sxbUx5TzZYejM5ZzRXM2s5azc2VlZBZ1VEeTRMQkRkS0c2VWt2SkkvV05rUVJHNk5CN2M5ckpZSElzaFJvbGdsRGJRYWJCemNQZG9FUEFEYytWNXdvZVlEeVFEWERhZ0NyemVOMzl1QjQwNXovNWJZNUY4cmVTYXNFeTIxWEhEQzhNZHBRZTlLTFNQKzZKaHl4Sm43QUhGQVhCVnNxRERZTk53L3dSTERQUkVTZWwvYStMS2h4WURYbTZacjlMTHg5SHB2eXU3SjMwYW80Q3hCWHdSQmYwWWJibStFaVQ3S2J1UkQ3Y3NLSWpjR1d6d2liaGhzREhpLzJtWXpaYzdLQXNwQUtRS1ZsWU8wQkZ0NjdicHVTSm5zSHJVcXczSGJuQVJqbUZCVnhaakY1dXY1UVlvaXhzSmFXQnB3RlhRUjlJbEU0ZnI5QUVHZ1NvTkx5ZkYwVDhhUVhZbmg5OFBGZUpYdjNyRXBTd1RBN3NDOTFYMllKZVNhRXVEMDVTOGl6OUx6b2s1bDRubXNHZ0pyakxjTHd2b1I1YjVTOWMxWWx1ZUFTWDJZaEh0aHdoQXV4RnpMbVNCTGltUVkvQ3pBSzQ4MXVKajA0M25IQVd5SjcxNnlhb1FMRUgyS0lyeTh1VFgzRTh6d0RiTHl2WUw1MXNuZk1xaGt1R1BSZjQ0akxMTVFwbUFEa1dSQ3ZDOFA3R25KQTltNVo5WVlLdnRTZm9vaVhBT0tOUjdrUmoxcUlaeGh2ZXdodkJvcDNDdVo1U1BaT1dmVUdxM2RSL2dJWSttY1k0aHRMeXJrUnF4bDF0RWxmOUxtWU1mZzRQZ1c4dlV5OFNvZnNmYkpLUW9VUmY1NHN4Qzh0eEVtTjJzOG4yVTBzdkFUd0hwZTlSMVpKTExmTnVSQ1c0Rit3QmJtK3BJd01iRGpDamZpRmhUZ3BHY2x0SmYzckdrbFBlaEVMYjVmcy9iRXFCU3FFMlBudktPTEZwUmJpTjVRQVpJZ1BiN2ZzdmJFcWhTclppTlVMSWh2RGJNdVlvNTM0Y2xySTQ3VUhUUEE2TDhqZUY2dFNzTXdROTJXV2tHZnJEM0VqSHJZUWMyZlUwVWE4MExOSGF4dUl4OEpyVmJ6RmcvaXBBT0loQzdGcFJxQkhhcThlcnRsbjRiVXE4VEpIWEF5SUR3b2diaUdCRklDU2FsRjdvdlltaXJmUXdtdFZjaXFNK0hOc29Yb3pYT1JKZGpNM1lyK0ZXSmN4Unp2eDVZVHdQbGk5aDRWM3ltMVhPbVR2ZzFXenNIb1g1UzhBeEoreEVQZXZhK0pHckM1c0lLOWRPaDdaZWVGb20rN0ovVlc3OGF0cjRiVXEwUW9pVG5QK0k3WmtQZWxGNVBIYVJnc3haNFp6V3pWNGQ3SHd2b1ljbEQxL3ErWkl3VEo5aEMyYkJ4QS9Xck9mRzdFWE11YVlYNGpWajVZL3QyVzZCM2RYMXJQdy9nUnBsajF6cStaWXVlM09EM0hFaGVUaG1uMUNpRWZuQ2VKUlIxdndmU1B2L3UzS2JTeThyNkRQTzJUUDJxbzVXckJjdjJZc0gzbnd6aDRMc1NZanVhMjZkNzd6OHpvVzNuSG9iNFhzR1ZzMXh3dVc3Q3dzMnhTMmlQZFc3ZUpHck9ZbFhDalowSktkUUY0NzhlZTI2Tjd6bStWYkxMeFdwVWE1N2NveFdMclgyRUwrNzhyNmVZdDQxTkZPdkliM3U1MVZ6Y0w3QXZwWklIdW1WczJ6Z3NWcmh2eUlJOTR1aFBqRkhFQThrdHVxZTZmbkc0K1MyOHVxV0hqOWdIZWo3RmxhTlU4TGxxOGVsbkFjVzlBN1A2OFRRcXdDa0kwd25nVHkyb2svdDBYM0xnT0E5OGJTQ2hiZXg5Qy9WYkpuYU5VOEw3ZmRXUUhMK0JKYjFLK3pxdUVTL1dMT0loNTF0Qkd2NFIyZWJUaE1yaTh1WStIOUZ2Qm15WjZkVlZZRnkyMVQ4bUVwL2RqQzNscFdDWWlQY2lNZW5pV0kxWStOOGRtZnJqOUkraktMV1hoN29GOXBzbWRtbFZXNjh0aVYxYkNjOTdERnZiR2tuQXhzT01LTmVDaUZFWTg1Mm9rdnB5WG1tWjlrTjVIZWpFMHN2Rjk4bGFiOHR1eFpXV1VWdGRUTEFrdDZIVnZnYTVrbGNLRU96V3JFTHgxdHhFdDUxa2RyRzBoUGVoR08xKzc4ekcxekxwUTlJNnVzWXBiYnJ2d01GdlpMYkpGN000dmhValVMSUc2UmpsWk5BS0krQyswWnYxdTlqM2hZZU5PY0g4bWVpMVZXY2RkWDl2emZoSXZ6YjloQzk2Uzd5T08xamR5SS9RQW5JQkh2cUtPZCtITG9lTyt2MnMyQ3ExN2V5N0xuWVpWVnd0VzdLSDhCTFBBL1lJdXRYcXlIYS9hblBPS1IzTmJJTS94L2UzVVRFMmZ4QjNEOEg1TG1iM3BvSVBaWkZsaWtMU0RsYmVsbWVSYW9TSXFWMmhwTDJoS2FEVm8ycFNiR2d6ZlBOZEc3QnhNUEhqeDRNaWJHa3pjdmpSZDlkcGNpbElvdFVpa0ZOclRWQWhJTmgrMzRXL1JnSXpOOXRsMFlYcjZmWkk3UE1qT2RiMy8vV1RlcVh6UEZtL1VDN3R1Mi94MkFweUlQK1FQVGhKcDYvcXp2aUhOVGNMTWlYcGFwbS90UFE3ZVhIdytlTk1YN3AwemVNN2J2SGlnSW1VVHZ5S04rcUh2d04ydE81eG54bXhzYTc0UElKYldnK2Z1WmNFS05WL1dZNGwyVTh4NjNmZWRBUWNsRWlzdmpYdFU5L0lsRHA2eEhuUHZOKzRhcE94OGVWS09WM2FaNEZ5VGVpTzI3QmphRVBPNFQ4c2hYZEFGY1AzRENkOFM1Q2JrY0tWekVTNGFwdXhadjh3VTFFdW95eFRzcDU2dTFmY2ZBaHBKSDNpcVAvWjR1aExIblhsSVptWFNiRmZIdnNuNDlNbVQ4TzdOTnI2dmg4azVUdkZlVCsxdExiZDh0c0NrazRqcDU5SGQwUWZ3UU9yWTI4VFk2NGlYNTdtN0xSZVB2enpURVZicXN3eFR2RlRuUFB0dDNDbXdxZWZRVjh2aXY2Y0s0V3ZHaW1wUEo1emZpcFR3ai91MHhVemUzcHV2N1ZTcllybzgzNEg3eGZTRDZqTzI3Qkt6d0hMZEVRdmhPRjhodytRdnFUdU5BUVNOZTlqRjFjMnVxN3B4S0J0c004Y1krU1pkRWkyemZJV0JWMG5IM1NoQmY2MEpKbDNXb21ZWjRRU0wyTTNWemE3S21WeC91My9HK1ovdmVnQzNEYzJKN0pJclBkTUdrZ3UxcStuRC9FMGU4Tm5XUFhQVDEvY1NoVTZaNHMxN0FIYko5WDhDV0pCRi9xSXNuR1d4VHQrck81UjN4ZzhnbFg5OWt3Z2sxWHRWaml2Y1AyZDlaMjNjRWJHa3k0ZDZWV0I3cVFwcXM3ZlVkOGQwV2YxTjNQanlveGlxN1RmSGVsMzExMnI0YllGdVFTWmVRYUxLNm9INnFmdFZYbUg3V1hQTWJhaVRVWllwMzFpdDE2MjNmQ2JDdFNEaTlzbFowWVYwLzhNcFR4enZiTktDR3l6dE44WTU1amh1eWZSZkF0dVFGM0tNUzBhSXVzR3RWTDZ0TU9QRkU4YzQweEZXNnJNTVU3eFhQaVJYYnZnTmdXNU9JR3lXbU9WMW9vNVhIMUh4NE1LOTRiOWVmVjZsZ3V6N2VRT3pMMVA3Vy85cytPN0FqU0ZCVkV0WU5YWEFqb1M0MTMzekJWN3kvSE81VFNWTzhwYkdQMGlYUkl0dG5CbmFVcE9NK0szR2xkZUVObDNlcTJhWUJZN3cvMTU0eGhadWJ2SmR0bnhQWXNieUF1MDlDKzBZWFlMcnNxSnBwaks4Yjc4MmEwNlo0c3hMdmtPM3pBVHVlNThUMlNHeWY2MkpNQmR2VjdmcnpqOFE3Y2ZDa0tkNVYrYjErMitjQ2RvMTBTYlJJd3Z0WUYyVXkyS1p1MWZXcFREaWh4cXQ2VFBHdXlGUS9idnM4d0s0a2svT3lJVTQxRXVveXhic2c4YmJZUGdPd3EwbUViMG1NV1ZQSTY2eHArYTdPOXQ0Qi9HOXRFdmRKbEtzKzR4MU5PbTZaN1QwRCtCZVpxTjBTNStKajR2M1djOXhpMjNzRnNBNkpPQ0tSM2xzMzNvRDdsVXpldmJiM0NNQWdHWENySmRpcFIrT05mWm91aVJiWjNoc0FIMlRhVmtpNG8vL0UrNzd0L1FESWsrZkVpaVhrWHR2N0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQTHpGM3grblhrRkI2MXhBQUFBQUVsRlRrU3VRbUNDXCJ9KSkpKTt2YXIgbnAscnA7ZnVuY3Rpb24gaXAoKXtyZXR1cm4gaXA9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxpcC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y29uc3Qgb3A9ZT0+ZC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsaXAoe3dpZHRoOjYwLGhlaWdodDo2NSx2aWV3Qm94OlwiMCAwIDYwIDY1XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIseG1sbnNYbGluazpcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIn0sZSksbnB8fChucD1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2ZpbGw6XCJ1cmwoIzkxNjViYWRlNzhiNDlmYWExMjRiNDEyNTIwNzg2ZDhjZGQ2ZjBmYmRfX2EpXCIsZDpcIk0wIDBoNjB2NjVIMHpcIn0pKSxycHx8KHJwPWQuY3JlYXRlRWxlbWVudChcImRlZnNcIixudWxsLGQuY3JlYXRlRWxlbWVudChcInBhdHRlcm5cIix7aWQ6XCI5MTY1YmFkZTc4YjQ5ZmFhMTI0YjQxMjUyMDc4NmQ4Y2RkNmYwZmJkX19hXCIscGF0dGVybkNvbnRlbnRVbml0czpcIm9iamVjdEJvdW5kaW5nQm94XCIsd2lkdGg6MSxoZWlnaHQ6MX0sZC5jcmVhdGVFbGVtZW50KFwidXNlXCIse3hsaW5rSHJlZjpcIiM5MTY1YmFkZTc4YjQ5ZmFhMTI0YjQxMjUyMDc4NmQ4Y2RkNmYwZmJkX19iXCIsdHJhbnNmb3JtOlwic2NhbGUoLjAwNDE3IC4wMDM4NSlcIn0pKSxkLmNyZWF0ZUVsZW1lbnQoXCJpbWFnZVwiLHtpZDpcIjkxNjViYWRlNzhiNDlmYWExMjRiNDEyNTIwNzg2ZDhjZGQ2ZjBmYmRfX2JcIix3aWR0aDoyNDAsaGVpZ2h0OjI2MCx4bGlua0hyZWY6XCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVBBQUFBRUVDQVlBQUFBV0lia3BBQUJoMEVsRVFWUjRBZXlWQzNBVVZiN0dMMHB4M2VYdXJoYnBubTRJUVJjRWhDQUU4bUJGaklvQ21abThDRkdXeGFDQ0JFUkI1U0Z2RjFpTUpCQmliZDF5dCs1ZVVkRjF3V1NpZ3FMRnZTc3N1RDRDbTVDWlRCNGtDQ1E4d29TRXpDU1o5L3ozM3pNaG1VejNQRE16blpEelZYMEY2ZWsrZmZxYzczZSsveUFpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlncUxTcEtHajFiS0pDa3FLYld1WEVxL1V5R05PS3FTVWVYNGI3T3pWZEtJSnFXVU9vZi9QNjZTMCsvaS9Xdkw1WktIUzFkTytrK3h2NEdJYU1CSW1jYU9VY25vRnhIU0lvU3dFWUdFM2hqQjdzQnhqcXFTNldVVkdldzlZbjhmRWRGdHAyK1Q3djBGdHVkTENPM3AzZ0xyQldaamhZemFmeloxZUl6WTMweEUxTytsa3RPL3JKQlRPeEN1bGxDQ0t3aXpuUDY4UEptWktQWWFFQkgxU3lsbDlFSUU2YkkvMEZWbURJZmE1ZVBoNHBZRXVGd3dDNjYrTXhldS9WbG05OVgvbmdQMU9UUGhwelVQUWxYbWNGL0hOR1ByNTVXa1JRMFZlejJJaVBxRlZNblVyMVF5dXNncnJQT0cyMEhWZkR3ZmRLZFhnZW42RGdEcjJ6NjZBSXoxMjZEbHl5eW8zL1VRVktaTFBMZXhsRHFIYlp3Zzl0b1FFZlZwL1VzNmZEUTJYclZiYU5Ob2FOaWRDTG9mVjRMTnVOY1BZRDNiMnY0V3dyd0lhbGVNOHdTeXRWd20yWHhycnNkbWp4bjhROGFZeUlxa1lUSDQyNk5kVGhvMnJXVGgyR0ZpcnlVUlVjQXFTWWthcVpMVFQyRGduOE5Rcjc3bDhpUXFXeW1YcEpVbU1aTktueHMveFBtWnMxSTZGdS9SQ0xldEJCcmZrNEhsNXE2Z1FTdG95ejdRbmx3S3RTK005Z1R5R1R4azZ2RmZzNWZXdm9IM2ZZM3JzQjdYWWF6WWUwSVVZdGtVVEJ3b3FEdkZua2NnVXFXeGQxZkk2U1VZMkU4d3VJMmVndTFrQTk3N1hibVUzb0ZlZ0gvcmhPNjdzR0V5bUJvMmh4WmMxMGJ1MkEzWDMzMEMxTWsrZllkUHhtLzl0a3pHSm9pOVYwUWhrcldRR1FvS2RqTVVTNGFJUFJkZlZab2ttVlFoby9hcnBCSEdZQVc5eTdJSXVQNmgzTjZLZ1RmcVhnRHptK2hkRGx0eThMcnY0M1dvWG9IcVJhT0MrbDBJOHBHemNtYUMySHRIRkFKaEM0K0JZdlp6YXlFN1RPeTVlTkxaWkhZa051NkhRWWUyMCtvVUdsci8vcXlmc09ZQ0dGWUJ0RDhOb0gwQ29EVU80T1lVQWNmZ2J6TUFkREtBRG55SGNUMCtuKzkyWE5PMUhWQzNZbnlRSWNZRFQwN3RMRmsycGQ4YzFrUSt5cVpnVXhIaVNpaG14b285RjFkcDhpSUhxZVQwYWd4aGE2amdyVXlUZ083N2xUNkNpMjFxZk0wQjQ4MnBib0Qxd1J6c2JmTndyTFU0WmdIdlBWYnRtM0IrOVFPOHVUYSttNEp6ZlJIYXkxYWpYN05iZXpJYm1nNWxRdjJ1aDZBcWM0UzNOaTRwU3hrZUpmYStFZ1ZaQ0hBTytqcENQRVBzdWR5U09pWGlsMG9wZGRoamM2Wks0TUxXQkF6d1U2QXJlUm1NRjdlQ1ZaZmJaZE8xN2RDdVhBdk5SNTZCK3B4RXFGb1F5V3ZldGg5ZjhnMWU0enBzMmtjRGg5YWR1VEc1SnVjT0I2ZjNtWnZmaEhOTDcrOHgzeXQvbk9OeGpqYmpYZ1I4bVNEOFRtNVV5dWxZc2ZlWEtJZ0NCVE1ZQVQ2Sk5tSWpaNGs5bi9MTXFCSFlGaFh1UWxpN2ZEdzBmNWxsaDlTMzV1d011R2tmYUxGdEwyeU1CWFV5RGRwVHk3MC9aOW1OYlprV2ZIQjVJRC9pYUhlbmQrdHJOK0loeFhSOWQ5WFRJKzNmNFAxYkMwRDd6MlY0QUl4MkI3Rk9KYWVtaFRsamNhYURrU1BFenRadEsyemZTQVJZZ3dhdWtUVi9HbitIR1BNNGs4UktFTjVLb2VEVkxCb0ZMY2VXMkFQcUQ3aENObXQyZXIvUHRBMmc5YUhRdyt0c25SVEEzRDAzelYvbjlWaUREdlU2M3c4cy9SNjQrczRjcUpEeDExSWxqYmg4Wmk0YkZxQXdUOHZSQjhYSTA0QVNucEt6Y0tHdG5SQWZ0aHhpZnhYTzk1YzkvOEJnRE5aSklYZ3Y3WGdZRzNkM3I4SDEyYVlOQ0c5Y2VPSHRjaXlBUHR0K1VObU0rZGlrWTd2V29lblFVM2dkVzlpU2k5N3IwN2UwbmxnS2xXa1NBWWlwWTZIY1Qyc2hNeFJ6OUQ3YVpsTXdVOEtacFFFclhPemRuUUJ6VnVQQzN4K3VkMk9nY29UZ2JUeVE1cmwxdWFic2VCYmJLNm16TVdNNlFaZ0tvRTBFYUV0RklGYmd2Zmsrd3Z1R2lQQTZ1UzNaRG1ycjhSZTYxcUxoRC9jNmZSKzZkYnJqdXpuZ0xlNFB1TGJTVmFCT29YbHJxNVRSQzBPeGw1aWJNWmdmWldlT1BnMVhoZ2E4b0ZneUJCZjhuMDRRdDZEbG9YN3YyZFRoMFJnb3MydkFOSWN5M1lRU2dUYXVRVUFmOHgwSTdVeUVjNHQzZ0kzWXZtMFpmUU5pYnM3R2JWQ2JQYzYrSG5YTEdjL04zZkU3QkRsUDhMdGFqaTRXYU9HSXk5OG5SLzBzdUJsaTVtRm1XbTlseUZiRXhvYzZQMFJPd3RQelhsejRaaWVJTGVnM05IbVJnMEwxVG16Zkk2N2h1cHovbURCZzVsMk8xdkVMaEZrT01IMXA0RnUyN01WbVc0b2dKNGdMTVI0a0xZY2Z0NjlKOVFMS2gvc2ZkbnRRWGRvV3oyOWhPZjFTTVBZUUZNeGd6RWtlMnVhVW5XUGhTeTVSbDBEQkxuVGFoRnMrWWl0aTdnbjJ1OHFra2dtdW9hcFpQQnFzN2JuOEVKbzJZa0NuK3dkQXh5SkhZL3NEYncrUWQyTWpwN3M1R0I0SGFQOHRnT0ZGOU1zTzYxL0FhMXlEeHdjTll0djF5WEFsSndxYUQ0NzJHWG9oaUkzMTIwQ2RUTHRDWEhjbWErd2R2ZGxEbTRLTndueWM0R2VHZVZLOEZBOXc0UWE4THdCeEhaNjBrNFA1SHFXTWZzc1Y0SlpqUy9nZ0dkZGhPS2Y1RjM2dVFRTUYxOVY2bk5QTkdJZmJud0l3Yi9mZTRCellyYjhScWJrVGNJNDdlZk5xMlBNb3I0WExaTXd6cDJaSGpUcTk0SDdLWDVnUjBuVE14UTJCckpScDhpSUhpWjNqQVN0YklmTUwzSVNmQkRaR2oxNFNyUGVvcEZTMWM1aXFmemNLYk1aOGwrYmQ0ais4N1psdTRNcDNOUG10eGpTK2lsN2p1R2Jhak9EdGNRK2wvWjV0ZmpZNGp0ZVdKZzdFMmxrNGgzMDk1cU92WGM4RDJOa3FhWVN1UWhaeFhDbWx0NnRTSkhIdWdMWVdNditGT2RndmtBK0hGZXd6WW1kNHdNdW1ZR2ZnWmxqY2JOSjd1SWxEZXpOK3lWeFc0aHFncSs5SVhRREl3eURPOUxOOVp2QkI1QTRCTzBqZURnSnNXTjFjQjl3dTRRL2NCUUFkaThTQldMK01ONS96cjBaN2hMaUhaZFJGbFl6ZVVwNFJHZUdVaTVtNC8zVnU0UzFtcjBDeFpJalkrU1ZDNFdia2VOaW9LbEF3a3dNZFd5bW5aYTZCMFg2YjNUTnc3Um4raDlhd3F1Y0IwRFl2d0FiRGc4TzR3WHZEbXZBZXcwcUVKZHRoRG43VFZ2NEIwTDRnL0FDM1RzYzU3dTB4aitiREMzMEh1THVaOVFoeW52RWpkaC91dTlWREpqaHZFenUzUkozaVRsTGNrRElQbTlXQlhxYkppeHprNzlncUtiWEdOU2ltYTI4NHRlYkdBQUk3b3hzYzgzYi8yMXVva1EwdjhjRTFiZXM4WEtaNmVEYlcwZnJjZDlpZnczbHBIeE85aFMwM2RvSmFIdUUzeEp5cjVrVkFTNTdFRTd3bWF4SExpcDFiSWlkaHkwN0JqVEY2T1hVL3N4VXh3L3dadHlLWnpuY09SMlVhalFFcjZBNmJkcGIvWWUxWTNBbnZEb1E1SVVnUU9FSE1OWHA3cHVPYVAyUG81am9PRk9QNjhBUE1IV0xPNjRyVy9iQUNtcjk0Qm01KzlTemMvUG81dTVzK2VSb2FkaWRDemJQM2VRWDUwa29hTEFjRmMvQ0oySGtsRWhBbzJFMWVBT1pjYjFPd3MzMGRzenlKM3U4Y2lwcXMrN3BEWm53OXNMQ2FOaUJrdVVGb1hsZGoweHBXQjNhbzNISnJITTV2RTQ2UkdINkl1ZlYwQXRpYkRiV2I0TnBmNUZDMUlNb3R4RFVMS0RDOHg3aGtnSmtsZGxhSkJJUXRQQmczNkRzZklMYWg5MWtMMlo5N0c5TVY0SE9MUjNlSHFDMDFzS0JhOXVDejZlRUh4R2VJRTdDTms4UC9Yc05LejlDYXR3UG9sNkdmNjdaaEZWamJmZythdjJWQTVUeFdFT0xxK1FqeC9pNkk2elI1a1lQRXppcVJHeUhFRTNDVDlENUF6Rm1OYlJ6dmFieHlLZjAvUGNLd0tNb1JKZzVDcnZIOERpbzJuSEd0K0pEMk5ldVh1QUUzSDMvTEJ0QSs0dUg1R0R4d1pvT3BJUXN1Ym80UmhqaVRBdk5IZG9nM2k1MVJkN0lXc1JMTTcwU3g1eUc2Y0pQVytnZ3daek5DbkFQRmtydUV4cXFRVTd1ZGc2Qk9vekZVQlFqaGF3R0dOUjdEK0tqNHdQUWx0ODhYaHRmMEJxN1ZURC9IK3cxb1BwZ0VGVEkreE9lZnAwRi9nSTBTTzUvQ3hjTStqbGxjSS9ZOCtvUkFRZDJKaS9HZEh4QnpyckFwbU9tdVk2bWtFYXRkZzlCOEpBdmFmMHdDNjlYSkFNMVRpSHZqMWtRQXkxNCt2TVlOQUMxeEFZL2IrdGxZVU12NUVDdWw5Q3RpNTFNZ3F6dlJIM1AvRjNzK2ZVWlF6SXpEUmRIM2dQVHprUURmVFBRRXNRWDl0cldRR1hvMm1SMnBrdEg3VkZKSzR4cUNyamJHZ0Z4OFBRcTBYNHdGYU1UZ05CSDM4QTBFVUl2dHFsOE5ZTjZKb09aMjI3d0x3TEFXVy9iM0FzMkwxMjdFOXZyOVRSK01FZHEzRmxVYWU3ZlkrZVJrVTdDak1HK24wUDlBLzB6cytmUTU0YUpzNUVGNi9FRUFkUkxBWnlNRUliWVdzdEM0a2I2SUczM1RIYmhDcm4yZUFkMlg0eERrR09MR2FRQzZ4UWhxSGg5T3J5NUFlR2NGWng3WFl1RGkya2plWHBWTDZkZkZ6eVl6SC9QV2pLNjJGVEgzaUQyZlBpa29sZ3pCQlNybGdYb21FZUQ2RW9CajQzcGNOL3d2QTdVTEtmQUhYRmMzdm4wdndOV1lnZXZyRDJHemJrWjQzM0kwcVg1anR3MmI4Tm9PL0cyUGU0QXRPVGpHektETngxUTZDZFR5bm51a2tsSTFZbVhTV3NnTXhhejlwVE56alFqeXI4WG1wRThMRk14VVhDZ3pEK0xhZElDT2RRRC9TclQvM1pyUGdEckZPNkNWNlJTY3k2TGdmSGFrM1hWTGgwUDFBb1JlNXZpOWZsTVVRTVBVZ2V0cmp3QmNTZkRoUG9TMEtRT2c3V1VBYzI1UGlMbS91ZCtETktlR3JhTjQrMWdtbFV3SWR4WnRDallXczFiVm1jRjJ6R2E4Mkh6MEMrRmk1ZklBL2l3U1Qvcm5BWXpyb2VYZ3pDNEFlY0NtUmNDVlA0eUNWc1Y0TUpjOUNIQnBxckF2VEFWVFNUUllhNmE0djRkWTJQWHhBRGNXWWp1LzJRMnhmaXRland2SytMckREL0QyVlNtalhnaFgvalIvR244SFptNHQydGlaUHh2Q25DNDJGLzFHMWtMMjU3aG81M2tRSHgwRHV1UHBvSmJ6d2VXdU5lNjVEeXhLQlBLbmFjVGg4QVVFdVhrWkFsemdnTGdsT3lqaldtdWllWHVza3ROL0RFZjJvRmdpd2F4OTVaSzk5V0l6MGUrRUo5NWNWNEFONzdOUWxjcUh0enFUaHJZdkpnRFVUU01XdzFma0FPWThCOGdOYzNvLzNvVm9xRjFNOVFSWUdsRVU2c3lCZ3BtRE9XdDB5ZDJmeFdhaDN3b1g3K091aFZTd2NONWxVem5YL0ZZQ3hsT1RBYzdGRW92cGl3aXVlUStBZGsydng3TFZUWUR6SzNsNy9mOGhiTjI3TUdQNzBEWVhlUCtPdncwUm00TitLMnNSeStJaXRuQ0xlV09YaEFkdlZRWU54aE1JYjFVc2NWOXdmU3FBWlM5QTlmVEF4NmlNQll2eWZyandLZy9nYjBLUk1XemRpWml2VWhkd09WZmJpcGhoWWpQUTc0VUx1Y0o2aUlXcWVSRThnTFVISndDb1k0bjdrcHRlQkRpZkZQRHo1aE14WUZXUENqbkFtcnpJUVZETXJNSjg2UVhnYlFFRk8wN3M3TjhXQWdWMTU5VU5rbEpYZUM5dmlRSlF4Z0dVeHpuK0plNGJWczlBZ09XQlBYczJEdlNIb3NGMktSSnFsL0lBUGhxOFVtQkdJS1JmQ1lETDJZSitVdXpjM3pZNmt6WDJEcFdVT3VlOG1aV3BFV0ErR1FPbS80c0I4emN4QUdWeHhMZUJUVjlOQWYybjR3R3VzRkNaM2hOZ3BaVGFINHc4SVp6ejBVMXU0T1g4aXRpWnY2MTBWaXBKZEczZnE5dC9EZGJ2WXFIanJ4UEI4T2xrZ05MNFBtbkxxVmljNTdUUXYrdU0rTi9hNjdVNk9RMDZQcG9JcG4rTUJzTnB4clY5QVEveDEzdVRJeWlXM0kxd0h2QUFMb0NDRGNvaFFlUWtsWXpLZGQxTXc5ZlJZRkJNZ2ZZRDBkQnhZQ0xZdnNjVC9IUjhuN1BsQkI0eWY1c0V0aDlDTno4ckhoS21vMU5GLzliZWZrUEhoOUhRL2tFMFdLc2o0Y1o3RWg3QVNybmt5VUF6WkZPd3N4SFFlby93RnJQZkkrUjNpWjMzL3FaL3MxY2VZRkdkK1JwL1RFdzJiVk0yRGpNRFdFQ3E5QTZpb05nb0Nrb0h1N0hFRmpYWjNlek52ZG1Zelc0MldWTmRUVkdqeWNhb0lFMnhKaVpxWW9tYXhJb2RGQkN4TnhqNm5QZit6eFE0Wjg0NU13TXpNRzUyditkNW40R1pjNzd5LzcrLzd6VTVDT0JEM0VhZW15eUQrbWRmcUQ3M2JsWGp4Z0RnWU5qOXB3T2hsQ28rcU0veEJiTXYxT3J6dCt3azQzL3BvL20wK1ZrN0tQVnU3Um5ZUHRZWGVnRFZTcFJPbHhta2I0KzZmUWw5SG11dmQ5UjVpaWNJektVa3hnUzhWMUdvNkdscnIvL3F4cEVwbnQycGdRM2NabGIvd3c1TnUvcEJ0Y3FiSi9VdVNybjlZZGJUUGdKa2grVnpObjhkckRGbjNXb2ZOSDhUYkxXOU5SVUhhT1p0S1BDMzdybTdVQzFzYmI3d2FlMWh5NUhlVUcxWENOTDNSTHdzdDczZW9kUWRTR0JlTUFFdXF4YUNOOXJXWHY5VmpwOUhPam9iTnZQMk9nVWF0N3RDdGNLYnA3b3ZLZVcrSjJQc3NWek1yakRVMDN3TmEvMnNNbDlEcm4vclB1dS84a1B6RmdMNWh3N01SZTgwYnc1Q0hXdDYzVndkbXFjVDFiUWx3SFI5ZDRlaWNYMkF0aWFmNmVxUzd3N21FcVh2TkprUTRFVEZVSE05MDdMZTRiZTYxRldiQVMrckYyM3Q4MS90b09aRkdEYXo1bXNGbWNRTnFtWFUrT1hlYloraytqV1VScnZEZ2U4N3JwYXRJYWhiNWFPZGM2V1B4Zk94MGw4SStuMXF0TUlIRGJUZnBzSkFBam9FNmgyaHdyWG9mL2I3NXVJZ05PVDRhL2JUZWxiMnd0b1padkhlckttYkgzaHFlblQ5TFRmUjM5bXpOT1lIRXJRKy9GcFErakxuSEhGMXNWd0liNExzUjNQOVFxa2JSMEJlTkJOY1ZnWFhGemwyczdYUGY3V0RHampJc0tHcVhRVHdEbWZVZnVLTjJrKzl0Witjdit1LzlBUHpYWmdXaG5hSStaYVNjbDFBMjN3NnRZSmxvWmp2d2xIL0wxLytuc1cwakNPSlp4cSs4dGZDYTRWOVdWTlhYM2ZWOU9qY1dJWHU4Z2xEQzExT2pmbEJxUC9DajM4T1hSMVVxN3lnTHVtRk8za0tsQ1QwRUFCY01sSVdiY29uVElGQ1FUQ3ViZ2U0ck00eStZb25iZTN4WC9VUUE3aDJwd0xOKzUxUSs3RzNwRlRMZmRHVUh3eDhFd0Y4YTBRN0l0QlNIRXBBRUxpZitvak8xWlFYYkh5TzlvaldhMXdiYUhUdnB0U1lFMmk5L1ZoUlRYbEJxRnJRcDdWUHQvL2hZZklzOWVzOHdKUTY0RTZoQWlkSDloQkwzMCtOK1FNRnNnY0p4T21rbSsyRXR4NEZDaDliKy90WFA0N0Z5WHdNbTNxM1NBNzFxWjZvWGVxajFSS2Z0cjhOOVpFdjZsYjVvMkZORUpweWRjb0pRc1BxSU5TdDlOZjhMdm11VG5YTC9iUVhnUlhGWGhwMUsvMU1yczFWL1NvL3FJdkRyTDRYYTBpOU5aeUE5RUhWdkRhQUx4SE1VbWRSTGFPTGNiY3ptRXA3WEYwaUYwM2VFL0d5a2tPamV6MHU1UTBVS0NNSnhPT1NrRzV3TUFid0RGdDcrNzRhTGVzZG5tUUtsSk5ScUhDMTVyd0gwMXllTVd6c3RZL2t3R1VscGF3WGF2L3AweVZxemc4RnRrZFlYZW9ONFdoa0w1TmwvbHB6YzlkZFNwZlBDbjgwZmhVTTljYndUbG5mS3RyV1g3TlBkczlWYzUxYSsxUTIwVUZRUjlWblhtajZ0aStZY2djMEhGU2diTGFkQUZ3ZHZKV0hreHo3aUhtQ1BPWkNBT1laVGRodktObDN1RXY5L3FXdGVia3ZCeFhtVVZJUnFZQmc3bSt0ZWFtWlZkem1YcHhuQjFRcjBiamRCYlVmK25hSlZCOVJDbS91RDJ6cEhMVVVoRUcxeEkrM1p2MW5nVmFidjNsOUtKaE5FWjJ5OTRZdmdyUTFXdUtEaXBrOVcvdDBPbG1HdXBWZXFNLzFRT1BYTG1nNTFrdHo4VGI4cU1TbGhYYWlxYXVEOTlMSlVUMjhESDNBNUNudHlWc2ZrNXFNd3ZzalhiWS9SMG45ZmthZHAzakMxcXpjdHdPRjhvZXBTR3QweFRwSUlHZTI1Q29ldG1ST2F1aGFYcE9wOFUwbmxHQXVPSkJweU96diszV0pHbFlHQThXUlZsZnptakRVZmlDK3Byb2d3dUw1bVEzOW9WcnNqL3BsUVZiZmUrTVhvYTE3YmR6bWl2S1grWW5LVkNnMXZhclpxc0NWRCsxUU9rMG1DaTBIM3BLZjQ1VE8zUDR6K2NyZUtGQXVJVC9WR3dXWFZja0lvR3lNMU8rTjVNY2dXek55M3c4VXlCNmtZbjNCS2R4VjBsK1pmUHMrSFpudmVMd3MwN0RSbDkvV3BuRHpmaWZVdnV0blZUVnVjU1dnZk1WLys1eHU5dzJSMWxGaEpCcVdCeHZkaTJweEFOUjUvUzFhcDJGWjJ4cjFud1pwMXJWNDcwWHMza040ZTIwNTBndG54L0lCUFpuWXd5aXdQSGdUWkorV3hEMzdSRnNRS09MSU4vbWtacFBnRnZjRUtqS0FhNU5wZjQ1U3o3MWdhemIrYmNiMVJZN2Q2TFpiWmxCQU5lbHIrajZ0UGFuODQ2aGVqOUxOZk4wd2hWVzdGQnFJMlp1LzloMS9xNmorSzA4MGx5aFJ2ODVEOHBuR0ZRUnh3UUE2VDhmVjhsVTRWQjhFbXJVbjFYc0JhUG9pak5hTWJPYzZsSkNmaFFubXEvc3dFTTJyd3p1OGQzVk9mOVQ5TTRpL3h3LzgwSFJNYVRhc1hKMGZKMFB0VW9XS3ZMR2M5RDVwQSttMlNXajErdG9OdURFVnFKa0xiT3NyOWR3VzFwTzI1dUxmYXJBRlE0SHlJNG1DM3RFMWJNajFUendlTURYWDhRUzdsdzBiZnpaYmh1WlRTaTNFbTkxUSs3YS9SYXIvVno5Yy8waUJLKy9KMGZKTGIrUFBMZzZDZWkwbFk5NkFka245VllUbTNZN3NUL1Z1SUJxWGg1cTFMcE5MQ2ZsUnNOSDU2ajRJUXZPcWNNMnpadTE5TFYwSW4xRHEva000VjBPZU8yNnRVYlFMM05KSk10eDVSdzZ6UVJYVHZtQkFOUTlvZUFuNElVRHF1YXZxZktYYzFqejhXdzRkeEorWWFNUVYwbElVS29haFVDNmF6SHVHOTNxRVV2aTB3QVRUN05CeVZndHg4eDRuMUM3eVErM2YvZHV0eGlJUDNNbFQ0dVRJSGppVElRTlRUaW04c3AveDk5Nmk5ejRLUWN1WEJGVHVBRWt4NnlMUi9GazQ2dDRQNnREZXhLUjZKeEQxL3d4R3c5SVFnaW9VVGN2RDBFUnJzR0svcTMwN29GM3oxYjBYU01DSG9HbEZtQVpxalZiU2ZNdENVYjhrV0hONUdLdUR1cVFYTHN5MU13b3NXOXV5S1RKY2UxV09ocFVLeThBdHNnZE9EZ2NhWDlMcXhEQ3BaeG55VmJ5dE9maTNIaWlRUFVoRlhHMW1jMjZUY2trVG1RS0ZJM2VlNHdreVh6SkNyYUV4emsyV29lRW5MY1JNcVFNYUM5eWdlc3NQcXIvNW0xVDlLaSswSE9tTlcxOG9OQWJUejNscnRSenFFNzJnZXRQZnJIbFVCRXdESlZyVFJ3VFR4MW8xTEE1Qi9hSkE4OTcvTjFaam9SdnFmeFNtNzduSnZYSDlYUmZjV3FTQTZsTUYxTGxLeTZEVmE0c1RVSlZKcVR0ZkMrL2xzVnFneFovLzJOYisvMVVNTGNUS29nNDA3RFRwUzlJMHVnUzhTNUxzeG92ZDdxZEc5OENObFhJd0ZUcVFMenFnZWFjekdyN3lSUDJIUGxEOXcwK2p1bmY5VUwvY0MwM0ZicHJVYUR5cVJNVXJ3dVE0a3ltRHVsU0pwbTJ1VVAzVi83K1NFRnRMWExKSDFldkNHbDVmSFFuczlyWU90SHJ0OWdYdVRpZDQ1NUVXQURXenRFQ0xQMytLOUtpdHZmK3JHUVRnWTFUUUh5eHNZczJOTitSTlloQnJ3TXVTNGNZS09acE9hRUVXVlpVU3F0MEtqZW00cVd1b3FqZmttdWNiVm51aWRtRkFwNmhoVlQvVWZlTGRhZk9MU2JYSUQwMWY5NFhxNzM2VzdaMHVSNmJTSHFydkZJSTZuaHhsaCtieURHQnJIK3VBVytRQW5JZ0I2dWZxNEoyblRlQTlBVkx2TkRNRnloQmJlLzVYTjFweWxVOVJjVTlhMnREYmI4cU53c2ZxL0dRWkt2OXNoK3IzZEhySER1Vi90TU9aVkpuUjk3aTZ0VnFoQWI0eklHNVk0NEdXczBvdzV4Mmdlc2V2eXdCdU9kUUh6U1cwN2tVSE5CYTdRdlZXTzlaK2d3WFhBK3FqdlRTWFc5MWVKVTZMMVBQeWgwR0FhaUtCWjI4NXZOdGRnU3RqQ2RnWE9DS0F6OFJKdjFPZy9JdXR2ZjZySFpURURsVGtTa3NiVy91Um9sMHdka1RzSlhFbm55QytyRVRqUmpmVS9qa1F0YTlhcUlXQmFOcm1naGFDcUhTcUROZFh5S0UrMlJPcU4vMHRuOXVFbWdqWXBoTktuRXJ1Z2NwWDdkRHdzL2FDYXZuUkNZMDU3cWhiN0lQYXZ4Q29yd1ZxOVhvQTZ0NzNvd3VzSDVwMzlTWG83VFhnc2hmUDFhVjBpU1lLYTNabXJBTmFybVlDZDhkYUR1L2hTS0QyZVFKMkxoL2dHNU9Balk1Uzd4MUhvZnhoVy92OFZ6MllBb1UvRmZxZW9QZzczSUZpUjdNYnJNNVI0dklmN0V5bXNTbWRIZDhUOTc0ZGh2SlgzSVcvSi9UQXpWVUtyWEVQOTBiZGg3Nm8vYi9BRHFudVkyK29UL1JFL1g0bHpvNlZ0VjRTZHpjb3RCQy83ZGZodVUycElkY0RUSVVTRitiWThjNVcvcklkN2hYVCtoZVVtak5LaXQ2dDJhN0E1Yi9haVlLclAwdnQvbmhLMy9HV0FVd1hIS3JTZ1BxWnBObDhnT3ZuQU4vMWszcTNoU2xRaHRyYTMvOFJnNHFkd0JhYzE0QWl1dUZMaGdCSG8rbUc3V2wydzV2WEtISGxmK1U0bmRLK1JENmZKY1BOei96QjNNNGkwNDJGK2xvNnprL3JMZnBzNVovdDBISkdxVW5qNWgrY1ViZUUwdXFWSU5QNjN5RFVML2RDeTRFK1lDNHBjV09GTUxsT2ppS0lOeXJBbERxZy9oTnY4K1kxVjdSKzAwWTNUZEplZWwwdVdRdDJEMld6WktqNm14MnEzMnRUMVp0MkJMME1wNUpNMUpNdWd6c2JCbXJoWlZVN1h0dlA5b0RMUG4rRTVxaWRyb09YMVN3Q2QwNGJ4TWNIRzV2alhWdjcrajlxb0ZEeGltZ2pqc2NBTlRPQVkvUzVxYmZaQnFEYkZ6VkxGTGp5Q3BsdXFneG4wbVU0bmR5bXN3UnMrVXc3WEZzb0o2Z1UydmUrYzlQQXExVTJtaXFTY2U2NVhxSW1QWjBtdzQzUDVWQmYxS1lTYzZZbm1yYTdvR0cxSnlXekQrcmU4OVZxaVRjYTEzcWdlYmV6QmtvV2VqYmx6ajhuZmNHdzZYVmpsVnp6Yk5PT3ZsQzlIbUF4dkd5aXR4enFBMVFhaDlkU25VNjN4NzNkdzNVMUhOK203Yzdtdzd2YkI3aVd5UUdYQTdBK2hhL1EvRVVPVW5OVXF2TVVUOWphMC85UjQvb2l4MjVVK0h6UmhoeUoxdDY0ZGRTOHMzSEFOMjd0dTgzYm84dUpXdlBWWm1uVVZEa0daYy8zbGpac1NnOVV2eU9IYWhlbFpxVVdab0VvOFZTN0ZiajJzUnpueHNuTWhxSDhqM1pvTHFITG9kd2VqWnRkb2ZxN2YvdkIvWWNmbXI3cEMxeXlSOU1KSlM3TXRlc2tjSlc0c2lRUUxaZFRPWmNnQitMRDRhWnJ2OE1kdURpSytqeGRxL3JuUlFDZXBmV0JFUS9RNVoxaGF6Ly9SNDdtWFB1bnFRRmxvbzA1UEZBTE1YdjdzcmR3VlJwd0lBVFkyTk82QVA4Y1N1Qm10d0tNMmd5b3J5YWovSDg5VEpxWVRjN1NHVEpVL0k5ZHE4cG15WEJxdEFWZ2pPbUJxMHZsYURuRFhpNUtTdEhlYU14ejE2Ujg3YXVCUW1qL0hLajVyWEc5QjFwKzZxMjVRTlFYbExqeHVSeW5rc1hYdURpVDlqeEhocE9qMnJtL2hCNG9lOEVadHdzSGdMbVp4cWxaTmdmZ2NWcUFiMmNBVzUwa0V0ZWJ3QjFKWUU1dGc3Y1ZZcEVVUGhadHJJZmYyOXJILzlFREJZb0lha0tMYUhPT0R0SUJyTHVKMlliV1RnTktxZmw3L0lBTkRwWUQvTFVMeDRpWkdvQTFxa25IcmZYaE9EM1N5dWxGRUZ4K3h3OE5SMFlUN0U1R1FiNzhsbHlUNUd5aWE1S2RnR2JPTzRBNTIxTXIrcHY5VHY5Yi9RRUZybndveCtrVUl5ay9Xd2FtU0E0VXk2RXVsT1B1WWp0VS84a09GelBwNGtsa29XNFRtN0lYRmpqajh2dSt1TE01Q2szbGlXMzEwU2l6clhhcWJHRUszNkhmajlORmZDQVFPQlFNbkJrQzNLVHY2cWFRbnROcG1nSEFCaWw4ZmJ5eFBqTk12akxVMWg3K2p4L1VpTGNsQVRzYjJ3WXZWMnl6NzVFUlN1TzF5Ynk1ZDhjQTN1aklTOTgyc1FtVGhzYjMzVkdWSmRPQVp5bTRGWC95UVAwdlNjQ05jUnFwejBXajZqVTcwNm1jUW9sSmtGMzdTSTdiNnhTNGs2L1Y3Unc1cm4wc1IrV3JkamhEQUpxYTU4b3JkblJlTGJ3ODVaUG0wMjl6RFhRc2hpNnlGS3BEYW1zOXRPTFdLWXNEc1VFS2F6U0JORkdydWtta3lUcnBBVFpNNFJuOFBuL3ZZNngvaGJiMjduOEhEZlY2eGFQVWpGTFJKaFhaQStWakRBQiszcURwZEl1cnlBeFh5RndueVhUNy9TbForNW9IOEM1UEVYalQyOHg2ZklqR3pFMHo3WEJsbkF6bmt0b0g3dWxrR1M3L243TW1jZlhndHVwU0hIQllnUm9DOGR4WW1YV1RucU16ZEFIY2ZWY0VYTDNvRWhEQSs1WXp3WnVzQlZnRE1SZmdkUE5UV0tPSkhJajFBSE5UZUxwQkN1djZmQ0hSYU8rWUFtV0VyYjM3MzZFYjFJeFV5V1p0NnFVMWZHdjZ6akJvK2xTT0dmUUdvZHYrTGhtcWNoUndlakNCRXFFRmU0K1BWdXpmSjZPQU8yazZFd3JUVnlQV3ZJdWNlZWF1bjJHSFc1UHROTWw4SVoyZ250Q21DNU5scUpwbGg1di9ZNGNHRnBwUFNPdGNoUEN5cWs3UkFNeUsrVW1CRzB2bE9KMm1zQnE0SnhObHFIN0JEdW9sdXBTVkF2ZzFZZm95K3diUzJjY1lnZGlhS1R4Tm1NSXEwamFqbC9CUlczdjJ2NE16cmk5eTdFWk5LWkZzMkE1M2JWTTFBQnZjMksxR21OSm1EdTZ0ejBzRG5jRnFzem5HazBqZm1sU05jWm45MGNLRTB1djNkbndZY25UUWNzUXNKMGl2alJVQ2ZKMzJjRmpaQ2pFcjlkVlhjTE40TnM3UDh1MHd1R2ZUWkxqNm9oMmFGK3YyOEtrUmVQTkYwdmRWUjdyOFJ1c0FIc01CT0ZVaWhUTk1wREFIWU5VazgxTDR6QWlqNlV0NjFkYWV0ZmxvWE9mNENBb1VucmJlaDM1UVUrWVpiZHBSU3N6NjV3MmFQVTBrZmFVQUhzY0JXQTl2cGppOCt2UmxkVzhNbUlXOXBDSCtrZ05Fa1JCZ2pVcEhpNmZ3c1Q0OGdKbWJMd05NdmtZTkZVdHhJMzhHS3Y0eUJHY251NkFrUVJ6WU0rTWNVUDQvbnJpMklnSjErMktGYTY4MEF2REhRb0NaemFFY2VNMU40VXdUS2N6cGh5akFuQlN1blVycDYyd0s0REcyOXV0OU1hZ1FvMGpIU0Rta09VeUJNZ1NGOG9kdHN4ZUZrOUdtRlRsUWttVVpBRHhWQ0RCN3k3Y2Fab0l3ZlZWUzZac21TRit0ZWNuRTI4S2xBWDZmRHdXelhBVGdYNGFJQTN6U2d3Y3dyczFwQmRoUXpPMjMwYnhMZ2FidmROcEp3Qi8xNXM5M0xsRzQ5bGRHQUg3TjRDd0xhQS9YNHcwQTVrSXNsY0taNXFkd0hUZUY5YjJiMnRiVDgvR200R1gxRDF0eW84NVZQR3JMOVhtREtWQzRVRUYrNFJTbm5uU1E5REhwZVZJVWt5OS9zaXYyWXJKeFAvZ1pBS3czd0JRTDB6ZERQSDExQm1adUpJTDV2YjA0d0greTQwUHhoUWpBdThMRUFUN2p6d2U0ZXJJa3dMaTNrUDhzcTdOQi9QbCtIaUpZbTFrdkFXOGhhYjdCV1ZiMW8vUFNKVkF6V2dSaVV5bWNaV0VLNjNxNjI5c2NnRmw5VHBlK2p6WDl4NEpKZFdHREpKem1UcVhQMmFRM1NTdElXMGdudEdHbmlPd0tIdG9CanZ3UjJ0Z2lrbHFpV0F6cEltbVQ3cmxKMEtiMU0xYmNRdyt6R25jbFhkZnNhY0wwcld0UCtuSUJUcGRPWHozRVgvbElwL0E2VGdLdkZRTE1iUFFTQi9oOE9CL0lxa3pwQkw3eEJ5SEFwZjM1OCswT0UxNGVSUklBTDVjTHpzR1V4T2dBVHJRd2hjVUFubUFDWU9ybmJYcW15TjVjZ1BXcUpCWG9RR01ESjQwMDJrQmpDTG9KOURtTDlDcnBBOUlxMGpiU2ZsSVpxY2JFT250cGpzRzJadFhvWUFxVTBiVFI4bllXOElyMmNNcC9rZDZsUXo1UDh3eW5UMjlLN3QrWnM2NDZYOW1YM2kwMmE3MURZVHFBcHdvQlZwa0F1SllMc0hucDJ3cndtYUhTQUMvbGdKRXZrc0NybmNRQnZoREZCN0k4U1RxQnI4MFJBbHcrbURjZnM4bVh2KzR5Q1hoWnZXVndoamQ2YytCbGxXUkJDbWR6SUJZRGVCSUhZZzdBcFFudGhiY3JkSTc4UE5yV2JKbzlLQW1mcGsxL2JzVUNOSkFxU0wrUWRocG9qKzQzOCtmYjFJdE1NSTBEOEJRT3dCTTUwaHRuSEFmZ2pxVXZha1pyVE0zOHZZODR3QXZ0K0hBWUFyeU1ZTHMrVmdod3hWQStrR1VqcEFHdW5pb0UrRkljZjc1MUx2eDFWeGtCK0NXRE0yd0xNUUE0MFFqQUhVMWhmVy9FQUtiekhZdXlOYXhjM1NITlE0R2l1NjJaN0JqSWRPdlFBYTdkQjRVVTZtb21wL0htQXR6eDlOV21FUUc4TlVRYzRQbWtEUnc0Vm9wQVhKNGlCUGhTQWgvSTBzSFNBRitlSUFUNGNoSi92aFgyL0RYWFNNRExmcy9aUDdOQUR1WmFMSjF4bElrVVRqYVJ3dVlDUEpFRDhKUzJYaDRaWUh0dkZTb1owbWRNdmtKbWF3WXRIdXA4cFp3T1Uzd2ZGSld2UzhrY2dQVkdtTVF4eUFTT2FmVHBhd3JnVkNNQTZ3eGRGYWVGVlF6aUw5c0FZVmEzUVhUMzcwcGNmZFVldDdjTkVRSjhKWmtQNUxsSWFZQXIwNFFBWDAzanBIbXE4TkpZTHdId1lnT0FsL2NEN2lWb1pYWUtpd0djd1FFNG13T3h2aGNUakFOY2xtQnJiNVZRY0EyME5YZFdIM1N3bWFSYW00T3IxL1VzSWNBcVV3RHI0YzNrbUMyZGs3NTZnSk1ORER1YVoyaG1pWnM0d0lzNUFLK1ZvL3lQOWlpTTZJTXZQWjFhdFdHNEY2cUs0OXVndTViTkIvSk1vRFRBRjBjYUFLemtYd1luNHdRQU14c2tBSDZOdjNmbXAwZ093SVlwUEZvaWhWTTVBS2NMQWE0MUJmQWtEc1Q2WGs0RmpnNEVOanBhN3BGdExzQ1A0Y0N4b2NDM25xYWVieUp3WDBlaC9CRmJzOWFKRUN2YzZhQS9HUzNFcHQ3QUJpc1UzNWoyQm1nYmJSUmd2V0hHdFFOZ3FmUk40Z1A4ZllRb3dNeGZsSzJBblBxOUkxYjNjK0xCeTlYM3MwSlFkMHFYbmtjYzI2QXM4WlFHdUhRb0grQmp2WGtBTXdlaitmQXVrNENYaFhvK1o5OHYyd04zNHRzQXZqZlNBT0FrQ1lCVEpBRE81S1N3SHVCeG5KN29leVFCY04xMG1wditycVIxVGcyaitoRFFCOE1OUkQwNDJCODRSRHBNNXk2aDU4N1N4Vk5PZTduT0p2cDhvUEVsNER6dHQ3aVhLVThkUVlIQ3g5WjhkUkhFOGtmb3dPK1NHTkZpRkRsb2kxcEJqU3lsQmg4WkJPd0pCcmE3V2diMkptckNYbitnak15bG1zWUJlQW9INElsbUFwekJVWm9aQUhQTlRDYTVHUS9tSlhzaHdBc1VZRFlxY09DNW5wTGdjclUyMEFXbmxnd0djOFNaQTJVZmFZRFBEZVFEWE9MT1QrRHZRdmdKdkVvQzRIL0orZnYrbHc4SFhxMXVIUnFPUXd0RHNHdUdQMzZZSFlDVFN5UFJkRG1SVXhORGdOTTZBUEJFYVlEMXFuK2VOSk9qV2FUWlFNTmMwZ3NHSW1nYkZoQzRMOUtGUk8vdENUVGxxeGJTbStUcGgyM05WZGVEWEtBWVFZZS9LbG1jalFUcnNhRzZtL0FQT3RHTmVJZWFjSlZ1M2t2VTVESXl3dWs0dms2TkFNN1FaeW1CV2tHL1Y1TWg3cktRenVBM3RyWGhZZ0JQNEpoRmI2QnNFd0NuU2dBOFdnZ3dHWnhaMWs4QWNQTnNPK3hLN0dVV3ZGd1ZqM0RDdFJ3SExaUkhIS1FCUGh2S0IvaTBEeitCTjNuekUzaTFCTUFmR2dCOGJGQXJ1TlU3Qm1QbkZCOTgyVS84d2puMGZ5RzRleXplQk1BWkhJQ3p6UVI0Q3FlbjJoNnI3enlITzhleVNYUzJlOU01QUpNYTVrZ0FQQi9NdVVSelVyZU1LVkFPc0RWSE5rNWpoWUlLOFozUlFtMmxkTG1RMmdZd2V6dXkwaFZiMklTNXVpYk41SXNIYndjQXJoVURPSjJUdm5xQWt3MEFUdUlEZkcra0Z1QjlBM2dRcUo2WFkwdDQ3emJqMCtkcUl4S0FUTi90bjlrVGpkOVR6WmdjY1lCUCsvTUJQaHZFVCtBY056N0FheVVBWHNpQjkyVjdNRGZpY0RGM0lMWWs5VFB2MHFHOWZqZlJENWUyREtOYXBKZ0o4RmhPVHlZWUJiang4bVFjZUdVQTF2cjNiVjB6SjhRRkovNDVERXpOREIzQUlnbDhleHJ3UTRBcGNGbmx0T1RaUDJWcmZ1NkxnUUxaZzFTUTEwZ3RSb3UySjFDYnZrWUJucXU5V1RrQXErOU9SL1hPTkpTdVNVRGw1dEZvdnNZMmU1b0l3SlBNQkRqVFFvQzFTWVdiOFdCZVZHb2d1RE5WZ2FMZzNsanQ1U3lxcjd5ZGNTdytHcnVpZ3lTZjBXdDltQk5LYzZrVzZqd2h3Q1dlZklEUGgvTVQrUE9lUElDUkp3SHdmQzI4VFRQdGNIS1NFd29IdTV2Y2w1UTJEUGZFNmVWUmFMcVNyS3VuQWNDMTdRTzQ0ZElFYkJycExibmVwcEUrcVA0dVRlY1ZEc1RucUNmRlBVMkJXMCthWm10bTdzdEJoUmxKdW1HMGdHeUJ6NDdpd0R2UEtNQm52NGhIWG45M0RRQjY1UVM3NE55LzRqZ0FUellUNEN3VEFLZm9OTVpBSEhoclJyVUJ6S2J3UjI2b0hxOUFUb0FUYjQ5YzVmcTdvaXFEbnA4K1ZxT3E5SGdVQm50SVBxL1hOK09pY1B2ayszeUFqem54QVM2TGFnUDRXallmWGphQk40akFTNmxjUDBPT1grSWRrZVB2YkhJZjVpb254QlUvL1RrTWQ0OG42bXFiYVNiQWsxb0JWbDBZaXcyeC9jeGFiOCs4Q0hwK0txVXU2UWQvazZsNzZ4UDc1djNqZWk4bi84d3ZESGRKMnBmUTV6RmJNM1BmRFJRcW5LbFl4MHdWRTNzQ0FFcFc2UVNlaVpLbEk0dzI4SWU1WVdpc0dtOEM0SEVXQWp6YUtNQmxpNE94emxjYTNvMGhYcmd6SWJrVlhyMmFwMmJpbDlnQldPdmIxK2daMS9yMXhlRzN4Nk81WnJVVzRDT09mSURMWTlvQUxrL2hBL3lwRU41Ynk1VFlrOWtMYTN6TkIzTjlnQnR5L0Z6TWg5bkhHVHVuK0tOcWF5elZTd2V4R1FEWG5NazBHMTd1Wlg3OER5NVFyNWYyMnIwVjl2aG1aQjloYlgyZHJ4ZUY5SW16TlRQMzNWRG5LUjZud2hXYWhIaHpINkF5WFFody9XeGMycDZzTWU4YUgrTXFIT1NKNmgxSldvQlZYSURIbXdsd1dzY0F2cHVBRXg5R0VBalNlOXN4SUFBTlV6SUU4SExGd3MwK1orcWNHNGI1bzNMN0szeDRXVlhHdFFMTW5CM0pCM2lsRHR5TmNsUzk2NGh2eC9RMnVRNVhHMFA2NFhUaUVNMWwwL2hjQmtwR0RrWVJmZGV1T1ViMHc1a1ZnOUYwTlVQWGgzR2lBTFB3RmczeGJOZmN2UHBFTytIUzI0NDhmNm56bERnK3Z4ZldCVHBMdmtjUU54YUU5aDFnYTJidXUzSDlFNDhIcUlpTFRFTE02c1JRSHNDM0Q0L0QrakJYTFJ6bWlFQS85Rm9rV202TTd4S0ExVGNUOE9NZmc0enU2Y0R3Q0REVHNvM0N5OVg1NUdISUQvSXdlZGFkMlgxUXMwM1pCbkRWcUxZRVBqS01CN0Q2TXpsS0Z6cGc4M0FuODJ0SjJoYnBoL0xVV05IOXM5OVZwTVhobTRIKzdab3pOOHdOUHkzc2o3c25rZ1VBM3ptYWhvSm82YlB2R0JpQVBUR2hacTJ6TTYwUDduMW1qNnNmT0tCNHFIbm56Z25vZThUV3ZOeTNneWxRVGlkSVcweEN2RCtZbWprTGRaWFRLRzI4S0gxZDJxM05JNzF4ODFCS3B3TGNYSjJBblZQOHBQZmg3NEl6U1VQTUJwY3JOdVVPRGU5djhwdzVRWDF4N05WZWFEbElkYXNlMDViQUI2STA0RFl1bHVQRWRFY1VSVGkzcTM3ZkR3ckc5ZXdrcy9kN2M5eG8vRGcwSERuK3J1MWFaOWZVUUZSdEcwazFuMGo5U2tWQmxLZmtzenVqZzlBOE5VdXpIcnUzN1pGR2FzK3BUM3U5czNGQVh3OWJzM0xmRGdJMGlhUXlCWEh6Vm5kOG5Sa2dXdURjQURkVVpzUmozOUF3NDgwTGRFWEo0c0ZnN2xrZjROcHo4ZGlTSkgyNTVBVzVvenB6WklmZzVlcGFkaUsyOXZjMWFicmlvYzY0dkhsRUs4QTFtOEx4OC9oZVdCOXN2b0Z6QTkwMGwwYk54TlFPNzdkK1NqcEtSZzFHVVlobnU2RFpGTytEdlA0ZWtyL3ZwZ3RGVFlsdnVGNTVhaXcyaG5Yc2ttY3ZHOVpMaHQvbmg3aThaR3RPN3V1QlFzVWdndlNlTVlEM1p2ZlJKSmloMWdXNG9DSXRqdFBBT0Ewc1lzL3E5VTFXQUdwT3AxZ040RnVIaHFFb3hsTnl2VTNoM3JneklkbGllUFZpeUxpbkUyTk1ucFBWbnJtaDJEc3ZUSE41bVhwV3IwS0NqWVdPaGM5YWUyWmh1NWdTaSswRC9NemVoNVIraUFrVmhaZTcxa25hdnpuMTBldnJnZjY0TlNrSlA0NElGL3kyUHRqbGExc3pZcE54WUZUdkovSkNYV2JuQnJtOGx4L1NkMWwrYU4vbCtXRXVNemNQZHZHOHZzaXhtMEVTUjBzbDhkRVhlbWxBRmRPNU1VTUZEVlJOU3NPMzBRR1M3N0RLaTNCRDZWZkRDVTdMQUw2OGJZaG1McWwxdm9zT1JNTnpHVllEZ2F2YVNhbjRZVWlJMFhPMlIxdjYrNkEwZVRoYXBtWjF5bjcxdWpFMkNmdUdobEhDdTdaN2ozdnBQY1lJdkx6MG41eU9uMFpFR2wwblA4UWQ1MUxJUTdOb3p0bFpxTXlPRlR5VEUralN1RGZiK3pGYjg5U2xveWpLclIrQld5bFZPTHJWcmhQY0d3b2lYRi9jRXVNYStQTUV0d2NvaVVjUXNFMWNlTXYrNGloWi9HTWpvNDAyOEZSU2pFbVRmRCtUQUt0TTd4REE1ejZQUWs2UTlQd0hZeVBNTnBzbHFzcEl3S1lJN3c2RHUzTlFrR2FPenQ2bjRLS2RuS2JwWVdHb2gxbjczRDg4dkVQMXZETmhESFlQRGhiTXQyOVlHT3FucFduaDFhbDVaZ1p5UlhxNmNhQkx0SzJaNnJMeDQ2aGVqNjRQY1QzSG1wc3RSbzVPeHY3T0MzVzluUi91dXVIbzdENC8zL3JZQVV5QkV0Y1hPMkI5cUF0eWcxMEZPaEFiYmxiemJvOGZnNjBEZlVUbjBHdkRrSDZvMmhJckFuQzZPTUQzUnVQbzJ4R2FmWXZPR2VLS3MyT0dkQ2tNelZNemNTUWhpaTVHTjZOMTF2L1BQcmQvZUJodWpodmQ1ZUFhaWszOEM2a2pzSDJncjJTUERzWkZXTGJPODltNG5KV0FiYlRHNWtodlhNa2VxZmtPTTdONUFMTXAvTzJnQVA3NlduKytiR3V1dW13VWhMdk8xUis4MWVUY3p5Q0QzMFJVT01BRkJmM0Y0ZjFoYUFpWTZlYmZ4R3E2dFgrSkgyQVVZbGFIWGcxRDg3VjBVWUR2WFVqRVQ5L0dZTnZhL25oemdodG11eWxidGNEREVXOTQ5c0t5d0w0b0RQZkFsYXlSTm9QaDdvUms3QndjSkt5OVRnV1Vkb2NUQmtJMUthMWpxVGtsSFVmVEU3QTFOaHBmeElSajVlQTI1UXpwajUwamg2SXNPN0ZEU2NucUtyMjdkMmlvNWhMVTkrV24rUDZXMTRhRmxjVE15SUthcFA5ZkNIQTJqaVZGQ2J4QjRiTGUxbHgxMmNnUGM4a1hTeVZUQUxVK1orVFpid2I1bzNrNnBlU005amV4bXNBcTd1OWxkUDB0bzd4d1kxOEN5bytOeE5JM0E1QWE3NGkrOHNkQnh6Skx2M3YwWWNUMlV1SnZvWDRvU2JjZHlLVXB3N0VoM0xQMVhNV1JYamc5T2daTnoyVzJhNTRiRTFNMW9JNTNjNExITTcvRmd3OTBNNnNPVHp6OEVLTHNaWGdsd0F2Zkp3NXJOOUMxazFKeGhDNmE0Nk9pclZNVFBiQ0dFa25ncXJGeEFsOVFBbGZibXFzdUJOajE0bnFDa0tzRGNlSDRlV1FrZGd6MlIzNlllOXR2b1p6UFVQNDdoczlzamZKQnc5VDB0dUozb0pFTnoyVmczL0N3dG9zaWhIOXB2T1JxRDZmZlBvcHUzYnFaRGEweDlYdjJLYXdjRkliR3FWbGREbkVqbmZWb1FoVEswMkxiRGREUEtiRklkdTZKN2c4K1lKVTZLQjkvRkcrSCsrRldCNVBmSXMwd0F2QXNBODNKUXYzME5INlk2TFFudHJmTTFteDErdmgrZU85bjg4TGNzRjRuL2Q5WEoxRWF2WkNsVWZQc0RGeWJOQXFuVTJPd2QwUW9OZzN3YW4xK3ZjaTdyTmhuVkZOUytjV2ZrZDNocHBhbGpVQlJmMC9raGJ0cDlKS2JQUndlKzQxVnpDb214eWNlMDRDc250YnhQWGVGanFUR0k2R1BmYWZWNFNsSzVqOEhlYU5tU25yWG5jdnM5TlVDekdyVFFLOVdiMmhFSGl3YTZEYlUxbngxK2lpTWRCdk1PN2hPamJQVFd3SG1hYTYyWURYVGtsR1JGWXRmUmtYaTI1Z0FGRVM0dDc3TGduWjcwbWp4SmxnQWNjMmtWSHdaNlFXdnB4ODN5M3hPVGs2SWlSbU16TXhNVEpnd1FhTng0OFloTmpZV1hsNWU2TjY5dThrNUFtVlBhOUxOMXFBS2FrRkF6Zk4yeFlNUGRETjVCanM3R1FaRVJpSTFOYlcxRHF6aTQrUGg1K2VIeHg1N3pLeEV6aHNXZVYvQ3kycjM4R0NCaHdzaTNYNXZhNzQ2Zld5SWRKMXJlUEJOQTcyQitWbGFHWUdZSy9Xc1ROd2lhTXZTaCtQR3hFUnRrYVdhMFVHSVA2TkVmT0toQnlWTjV1RGdnQmRlZUFIYnRtM0Q3ZHUzWVdvME5EUmczNzU5ZUgzaFF2ajYra3JPKy9DREQrRE5NRDh3OTBrYS81UWNDOWVubnBEYzc5TlBQNDJKQkdodWJpNnFxcXBNMXFHNXVSbkhqaDdGaHg5OGdFR0RCaG05RkxKY2UrSHU1RTVJNHhrZGg1ZlZrY1NCQW9BTCs3dXVzalZmblQ3b2tFdnpJdWpBSE8wZUVRUXN5R3lEZUo1NUVHczAyNkRZTTQyQmJGNXptNlptWW5vL0YwbFREUmt5QkZ1M2JBSERNTEJrSEQ1OEdCTW5Uc1JERHowa3VrNlNrMlBubUxjZFdqMmtQeDdwTG42SjlldlhEMTk4dmtwek1Wa3lLaW9xOE1xZlhzWlRUejBsdnM0enY4WHB6RkdkRCs3ekJsNmFKUVJYSS9KaWFlWlFBY0Q1L2QzMjI1cXZUaDhGa2U0NzZhRGc2cGZSQTRBWE03VXlCckV4a0dkWkIyVFZjeGtZMmxNaGFxU2d3RURzM3IwYjFoNW56NTVGUWtLODZKb0JzdC9oK29RVW04RDdacWdmdW5VVHBxTkNMc2ZubjM4T3RWcHQxVHJjdkhFRGMrZk1RZmZ1M1FWclB2dkliM0J3OUlqT0E5ZU0xTlZJNThNckV4T1FIK25PVStFQXQycGI4OVhwbzNDZ1c1bmh3YzlreGJRQnpHcEJWc2RBbnQxZWtMTUY4RVk3eUFUbVlSUHliMzk5dytxR05SeHIxcXpCVTA4K0tWamY1OW1uY0h0U1dwZkMrMTVFb09pRmtwR1JnZHMzYjNacUhRNGVQQWczTnpmQjJrOCszQjBIUmcrM0RiaHorZjZybVo2TWdnSHVBdTFPN1B1SXJSbnJ0UEhOY0pmdUJRUGRtdzBQWFRVeGpnK3dwU0JyWUc0SHlLVEdxWm1JNlNrWG1NYkJ3UUY3OSs3cFZNTnlSMWxaR1h5OXZRVDc2SytVb2Y2NXpDNkJkK1dnY0VIeXNxbjR5Y2NmZDFrZDd0MjdoN1NVRkVFZG52N05RL2dsSmM0MHREUGFBYTBHM0N5endOV0l2Tmc4SndQa1pRSEEyMkpjUEd6TldhZU5QWWw5bFpwREcralc4NG5BUzVuaUVHdEF6clFBWk5PcHpNekl3bGpYM2dLemVIdDVvYUtpb3N0TXF4OTM3OTVGVkZTVVlEK1pMcjNCVE12dVZIaDNKdzdGd3c4K3dGdjNzY2NldytiTm03dThEZ3pEWU1HQ0JZSTZ5QjkvQkJWalI3Y2YyZzZtTFJmY1ZoOVN1R3lNN2lmd2NtR1VlN1N0T2V1MFVUVFlJMWdNWU5XY0ZPQVBtVnI5M2dqSUZxZXllREl2aXZBWG1LUnYzNzY0ZXVWS2w1dFdQMVFxRldKaVlnVDdlaWNpb05QZ3ZUUnVESjU5NURjQ2VIZnMyR0d6T3JEamhSZGVFTlFoeU81M2FKeVdLUTJzWk5JYWdkWXNjTnU4dUgySW44REx4ZEd1NmJibXJQTUFqbklmVmhqbEFZMmlkYUsvVzE3TWFBT1lDN0twVkY3QUFka1l6SE9sWVQ2UU9nSVBQdENOWnc0SEJ3ZWJKSy9odUhmdkhnTDgrWmNMbTQ0L3BjUlpIVjQyMlFjNXlIbHJkZS9lSFVWRlJiWXVneWFKSjArYUtJRDRKVDkzODFKMnRzU0ZiamEwV2FJZTNCVWJpSUlvZDU2S290M24ySnF6VGh2czdkUUtMcWxva0FjMkR1NEh2RXdBL3pGVENIRkhZSjV2UHN5Tk16UGc4Y3lUZ3NRNWZQaXdyVDNiT2k1Y3VJQWV6ejdMMjJPQTdCazBUODJ5S3NBZkRRd1JBUExHRzMreDlmRmJSMk5qSTZLam8zbjc2OWF0Ry9ZbUQ3TWVzUE00d0M0dzRyZVh0SjdjUHlvTVhEOXI1YjdRMXB4MTJ0Z3l4RzBhQ3kxWDI0ZjZBbi9LME9wbG5TeUIrVVVkekdhazg5OGlmQVdtWGJWcWxhMjlLaGpGeGNVYXMzTDMrVThDemxydzNwaVFncWQvOHpCdi9tSERobW1TNzM0YTFkWFZrTnZKZVB2MDcvRU1HRXVCYlFlMFhDLytraElKUXo5dmpQRjh6OWFjZGRyWU1OaHpmdEZnVDlBbmluVDZMamF3RFdCRG1RTnpCNEcrTmkwWmp6L1VuV2VHcEtTa3J2TGkvN05YSG1CUm5Gc2ZmMUFzU0dMNzFDZ2cxaWlvRkpWZGRpbUNJRXVWb2pTTkJXdHNzU1ZHalZnVFFUR2l4aGk3aVMzRkJoRlFhWUpTbFdxQ0xlcU5TWXdsYUN5ZzlEM2Z1d1dZZDJaMm1abmRaVFRKZWU3dldlOTlMdS9NblBQL3ZZZjFmeVpObklpOTZ6dnQyc0xMYVNGYUVYaSs1VURzYk1OMjdlRDMzMy9uKzVOcDY4ZllHT3FsNjJxclhsYmFEY3RBV0JwcGlmd1U1SWhsV1VhOHk4Q3YrZlpNZHdLN21LOUJBSkdMbzIwQVBnbFJzRHlrQ1ptMUpYUW9MTEV4ZjJOQ0s2dEhEeDlDKzdmZnd0NzVDNGZoQUxQR04vSytqUGRZOFhEU0dERFFiNG1kdTM3OWVyNC9WMjE1ZTNsaDd6dWcwOXNnL1NDVSszWmxLS3c4ZXpLV0tqSjViYndUa1BOODJzWHNCTitlNlZMZ3RmSVBkVlYrTVByTkNrQUNod2NEckFocEZMbGVaazJGVmlGMXhmd2c2R3pRQ2d2QjhxVWY4NTNMSm12MTZ0WFlPL2ZyWUFqU1dTaWNzOGNybU1XZXoyd3RzRE43ZE84T3IxNjk0dnRUMWRiVmtoSm8yVUlQZSs4RWZ5ZG1tNVVzS3d0aHlkeVk2SXhsV2M1STgxaStQZE5ablhZMWp6NDlhaEEwNERvSXNzY0tBRllHTnhLdWhJdlFTNVZDTnlIMVVXOHhObnlEdG0zaGNlbGZmT2V5eVhyOCtMSDhYWW52ZmlGZ0ZNRGM4YXFabzU1K0hRMng4eUlpSXZqK1RFWVZIQlNJdlhkQWYyUHR5YnBVVGM3cWM0Z3krVXVZaXp6RDlWbVcvU0taMC9qMlRHY1Y1ellvK3JRYitsQUMyYUZEb1hLMU0xU3Rjc0ZGYmtwb0RhUWUzYTg3TnZ5d3laUDV6aVBqbWpoaEF2YnVNd2YzQTVnM2poTjVJUkxzckZhdFdzR2pody81L2tSR2xaNmVqcjE3Ry8wVzhQZThNVTJMeWtYVzVhVGN5YklZSGdKM3Byb0NPYytJREw0OTAxbkZ1dytLanBNTUJpSTU0NGJKQmE1YzdRU3dLZ2dSVEM4eVJlb1ExVnRhamRRVml3UEJRTDhsTnZ5MDgrZjV6aVBqT252MkxQYnVSb1lHQUI4Z0llZXpaNDJ0QlhhV3U3czczNS9IdUtSU0taaWFtbUx2ZjlSSFJDL3F4eUdheVNvWFZwazdRZzd2ekhBRmNwN2ozQWNWOE8yWmJnVjJsMzFrSXpuajZ3VjJocnJWQVFCcmdoV3NWc0pFYUxMVWFzUk9EWFhHaHQ2dFN4ZW9xNnZUU3FoS1MwdGgvNzU5OFA3Nzc0T3ZyNitjY2VQR1FXUmtKQlFYRldubEdWVlZWV0JvYUloOXc5VkpuZ0FMeDdIR3liZ2JkczVYWDMybGxYZDgrdlFwSERwNEVPYk1tWVAxNGROMTY2Q2dvRUFyejVEVm9rV0xzUGVmUExpM2VrblZpVXJZckhTeTBpRVhtSlRuZVBmQi96S0IzeU1Jdk1hL1VXQTZpRkl6M3RTNDJPc2NCMk5ERHdvSzBqaEl6NTQ5Z3dYejUwT2JObTJ3czhrNDJOdERibTZ1eHMvejhQREF6dDNwWmdPd09KUVZOWXVDd2FCVlMreWNhOWV1YWZSZVpXVmxzR3pweDJEWXpxQlorbkQyN0ZuczNINGQzcUpLcW5Lak1oZFZ6aXBDL2xZcjhuaHJwc3UvUzJEMGdaSFlCM3NnZ2NjMUNseTdkalRBcDBFSzFzbEFqVnFycENtcEdXN3JNV1ltMk5DM2I5K3VVWWhLU2txZ2I5OCthZ05McEZXclZyQjE2MWFObnJsMnpScnN6SGxEK3dOOEZNcUtraWxlMkJtZE9uWFM2SjF1M2JvRmd3Y1BidFkreUM0TWZYMTk3TnkvRi90eGwzUWxZVGtRUkZYRnplbk9GSUVSR1h4N3BrdUIxOFI3REFFaVdTRkRDUUo3TndwTXh6cVMyR3RZaUsyVWUwaVg5dGpBTDE1STV4eWd1M2Z2Z29tSkNlUFExcU9ucHdmNzkrM2ovTnlUSjA5aTU3bWFkZ2Y0T0pRVnB3TWNzRE1jSFIwNXY4K2podytoWDc5K3JQc2drKytISDM3UVNHSXpNek44bnBOYzJFdmFoS2dOUzBTV3UzV05lYnc2ZlFTUTh4enZNVGlOYjg5MFZnbGVRNVlsZUZzQWtjd1FLNmhjNHl5blpwMEh3UHFnUmo0andFWnNOWEszYTQzZjJQZnYzK2NVbkxxNk9oQ0xSS3hEVzAvcjFxMmhzTENBMDdPTGlvcXdzL3AzTWdSWUZzS0s3WkxoMkJsaFlXR2Mza1VxbFlLN1JNSzVEMjNidG9WclY2OXlGdGpmM3g4Nzc1Q2ZzRkZRTnBKaW9nWmhvdEtDTWxreXpRSEllVVlDeC9MdG1lNEU5aGcwai96QkY0SXNGUUt2ZFlicWRXNEFrVUVLSWdpc0o4RlViSkxjNWVINHNOdTBhY001T1B2MjdPRWMybm9jN08wNFBmc2gybmpFY3pvWXRBYjRKSVFWYTBjTXdjNVl2bnc1cDNjNWZ1eVl4bjF3ZG5ibVBJZUZDeGRpWjBXTXNtUzRTWm1MMmdBcGg0V1R4UlNCejNrTk9zeTNaenFyWkIvemlXZDhMSUJJeWxnazhEb25xUHdNOGFrVHdNWkFnQTBrNnFVbWk4MVM3dDhXZTJIRDd0NjlPK2ZnV0ZsWmFSeGNHVVdGaGF5ZlhWTlRRemtId29OWnNkQzJML2IzVVZGUm5QcmdndVRUUmgveTgvTTVQVDh5TWhJN1o0bkR1N2ljNnhoYzhwK3BGeFhMR3lHTGx5YllBam5QNTN5R2JPZmJNNTNWV1o4aDNwUVA5cmVVaTF1NVhpRXhSSTBGMklTa2pTS3dVUWxaN0ExQnJPUytReEs0VjY5ZW5FSno3OTQ5cllSV2hpeUFYSW9pOE1wZ1Zpd1U5Y1ArUGpvNm12VTd2SGp4QXZUMTliWFNoMVVyVjNMcWcreTlpZWNzRlBmVlRGQ1NwUEtNYmFETFhpQmtqQnRPRWZqc2FJdTFmSHVtc3pycmEyRkgvbUFaNVo4NlFHV0VRdUs2S0QrRndPcGdLamRKOERzZmFrZmdsT1FrclFrOGJ0dzQxcytYU3FWVWdkY0VzMktoV0hPQkwxKytwTFUrK1BuNWFVZGd1NzdzQkZVbDZVWUN4THdSY3BnODFvb3FzS2Y1Ykw0OTAxbWxlL2Z2ZjJZMCtraGZuTC9YSW9FamtjQWJSa0J0bENmQTVyRktVS00rVjdLSklWR3FCZjkxaVhZRWpvbUowVnB3ZlgxOVdULy95Wk1uMkJsdFd1a0RyQXRteFNjakJtQm5yT1N3QWRQUzByVFdCMmRuWjA2emlGaS9IanZuUTRmK3pEWW9BMEhWSVkwYUMzUlpUaG85T0lCdnozUld5WkwrYldRZmVjN1BFdVBoSjNaeWVTczNqb0RxS0RlQUxXTWJpU1pCSnpkRHdjcys4OFdHYldob3lDazBjWEZ4V2d2dW1ERmpXRC8vMnJWcjJCbEdieHNBZkJyRWlraUpKWGJHN05teldiOUhSa2FHMXZyZzd1N09hUmFMRmkzQ3p2bFVNcGhlVEphQ3lxblBsaXhyOWJsVDV2QlY1R2lneTNLODUyQVIzNTdwdE03NURubHdMZ0I5TElHN0g0dWdNbXFFbktxb2tRRGJ4aXJZcW1TTENxS2JFSnhtZzdmV2I0a04vTVdMRjZ4RFUxeGNyTFhneWdMSXR1TGo0N0V6Ykh0MlJLc29TTUY2Wmh3SkZHSm5lSHA2c242UHUzZnZhcTBQczJiTjRpUndjR0FnZHM2dXdHSHM1Q1FMdXBrbVV6VFplN0xHQzhnNWxuRkIwdnNkdmgzVGFTV05zY3hOUkI5SzVQcDhRWVBBTXFUYi9BRytHRXRsRzRtbUJLZVIzS3pyVzlqQUMvTHpXWWVtcHFZR09uVG9vSlhnSGo5MmpQWHpOMjdjaUowUmFtMEtzQ0dJRlRselhMQXordlRwdzBrZ1kyTmozdm9nS3dzTEMreWMxRmtqU0dJMklXZTBtdXpVNTR1Y081VEZlNSs0QWpuSGlmNFdML24yUytlVjVEL2tzUHhqeHpSU09ITTRWRzRhMFVEdFZtK0E3V05vR0Vzdk5oUEpsYUw3RHpIQ0JuNWcvejVPd1prK2ZickdvZTNZc1NPVWw1ZXpmblpRVUJCMlRxVG5FSUNvUUZZOFgrc0xlbnA2MkRtbHBhV3MzMlhKUng5cDNJZE9uVHB4NnNQTGx5OUJYMThmTyt0UHRCblZTa21XVTRXZ0t0bXU0TlppWnl6RE1wTEdXUHpFdDE4NnIzUCtGcXZKSDU0OXlSb3FOenNxK0h3RVZHOTFBL2hxaklJZEpMNVVva3J3SmlSZjd6MFlHL2lNR1RNNENYejc5bTB3YU50V28rQkdSa1N3Zm01ZFhSMTA2OUlGM3pxejBkYlpGTWlhL2wzZXdyZmc4ZU9zMytmQmcvdnlpMGlUUGtSSFIzT2FRV0ppSW5hT2NmdTJxcVhjeHVEeXI4OFBYYmErSklCeVdEUkxSQlhZZjhoSnZ2M1NlYVdNSFRJbWNTejZZQUxKUVZid1NpWnZ0RUxpcWkzT0FEdkhOUEpWRTZpU25FYjB0UG1PMk5CTlRFeEFLcFZ5Q3REMjdWOXdEcTJkblIxVVYxZXpmbVptWmlaMlRodjlGbEMrMFE5ZzgxaldUQlAxd2M2YVBIa3lwejRjUFhxVWN4OWNYVjNsbHhLWFdyQmdBWFpXeUZBVDltSnV4OFdrb0NKem1ST0hBem5IaVFFV2EvbjJTK2VWNGpkb1VGS2dGWkI1RW1rSEZWc2RHNUR1R2cyd093Q0JHclpMeVU0MU1KUzg4Z3QvTUd5cmp3MCtOemNYdU5icTFhdFpoMVpnWXdPbHBhV2NuamRuOW16c0xNOUI3d0JzR2N1SjQxTkUyRm15VGZycTFTdE83N1Y1ODJiUTA5TmoxUWVoUUFEUG56L245RHlaOUxMTGwzamUxeE9HcTl5WVRNVnNRRTNXNm5ZRXlKY09PY09wZ1VNQytmWkw1NVVzNmErZkVteFZJV3NBa2QvQ2hWQ3hUU2t3K3EzOXlnTmdUNEJxZGhNaFNNNUE5RkNCTVRiNDkyZk9CRTNxVzdTQk9uWHExR1JnWlFFUEN3dUQ4dkp5VHM4cEt5dUR0OTkrbXhSYUcvcXR3NER5VFg3UXJuVkw3THdEKy9kejdrTnNiQ3gwN2RxVmtieXlQc2kraDJzbEpDUmc1N1hSYndGL2YrNmprWmhZaG5iWG84d1lJWHZQTm5rQ09iL0p3ZFp3UG1EUUFMNzlhcFpLRGJYT1NVRWZuQktpUVBieEpRc0ZVUEdGUXdOVlh6b0Q3RWNOMjBkaUw0RTlEQ0NMampnOVI0d04vMjFEUTNoYytwZEdFc3YrUG56RkN1amJwdzhsckliby9LREFRTWpLeXRMb0dWdWlvN0Z6WmZLOTJEUzZjZXR3WUxMSUZEdlQzTnhjdnQyNDF0T25UMkhkdW5WZ1ptYW1zZzhaR1JtZ2FibTd1Mk5uQnc0ellpL2xib1laMmtQSUhNcmc3NnRkRmRrbFpqaklxcXhnMG9BV2ZMdlZQQUlIV2U2by8vQjZjcWNOZzRydERoalNmYjRBQndJVUlxdGpIenZSYTNmNVE4OU83YkFBeU9UVFZ2MzU1NTlRV0ZnbzU4YU5HMUJUVTZQeG1hOWV2WUllM2J0ajd6elRvVS9URzZjSjhwYzVVMFE3Y3VTSVZ2cnc2TkVqckEvVjFkVmFPVGM3TzV2eXpva0w3ZGtKdVllVUVib01xY2hieVNKN0lPYzNOY1FxbVcrdm1xM1NRaXluVUJvUWFnM2xXKzB4Z1d2M3VBTjg0dy93TllFRGRBUXdFNTBnL05ieGx2aDJhTmNPL3ZqakQ2MEVUQmNsdTJDSTc5dXloUjdjV2l1aDN6b3NrWmgzeGM0Mk5UV0Zzckl5dmorWnRxUlNLZGpaMldIdmEySGNIcVM3R1FpNWoyRSs2dk5FbHpXVXdhd3BBb3JBS2NGVzYvbjJxdGtxeGRmY2pOSUF4UDFQUlZEeEZaSjRCK0pMQjZqYTVRUncwRjgxMzlEQVVQYXlIVDVnMU1rQUM0S2ZueC9mK2FTdHF5VS9ROXUyYmJGM25TSTJwZDhxdTlsemFha1Q2T25wWWVjdm1EK2Y3OCttclFNSERsQzJiOHc4b1daU0hpRGxoaTVYeXN4VjdSa05kTmxORDdYMDV0dXJacXZTVFNaNjUwT3RuNlNPR3dwRWJpd1JRT1ZPZTduRTliL1NnNk1CRHZzcDhWZHdpTUJCaHRBTVpjK1VvWlF3ZklNQzhqcFZSVVVGV0ZoWVlPOW8yRVlmSG16MnBOOHdlN2t4VWRRVGU0Wk02TGk0T0w0L0g2czdkKzVBaC9adlkrOXAzLy8vUU1wV3htOVk1T1lnbnJlSEcwWUJPYmVwb2RaMXVVRURPdkx0VmJQVytWQ3JHSElqc3FjUGc4cmRkbEM1eTE0QmtyaG0veWlBSTM3TU9FeUVSbmFTOEhWZis4R0lnVjJ3UUxScjF3NSt1bktGNzZ3MjFPU0pFeW1Yek5ieFZrMXZISlk4MnVZRjNkcTN3WjdUdVhObnVIMzdOdDh0a05mTGx5OWgrREQ4d20zZHNnVmMrZFNGbll3a0lSdHljcGlVSHhVWnU3YkVFVkxINDdrOVA4NnFrRytmbXIwdVRMQ2VmMzdDTUNEellydFlJZkVlTytXdkE4QzNmbFNPRWpqQ0VUU29tNXRjNVJ1TkdBeFRVMVA0OWRkZitjNHNSRVpHVXVSMUhkUU42Zzc0NFZ0R1M1eVlKNVJ2WHVMekJyejdMangvL3B6WFBraWxVZ2dKRHFiMFltMkFHWTJJekdWa0JERm5LSGZaMHdXVXpLWlBzSTdpMjZkbXJ4US9jN08waWNPZ2dRbUszN3RyQkFwNUNkUWVjZ2Y0em84WjM2cEFqZkJIWmcrbmhFTW04WjA3ZDNnTDdWYzdkbEJrTXVwb0FBKys4R0MvY1Zpd1FOS1AwZ3V4V015YnhESjU1ODZkUzNtbmtZTzZRczBoWCs0eUhsV1RGUlhaZXJIYkM3RE1Lcmt3M3RLVmI1OTRxZlNKUSsvV2kxc3ZjZEY4RzZqY2E2ZGduNEtxQXlNQWp2azI4Z01SUHdYZmsvaU9CV2hvaTczZXBZVEV4TVFFcmhRWE4zdGd3OFBES2ZLMmE5TVNjdGM2S1lKNFdIZlVIdlFGOXlIZEtMMFlhbTBOOSsvZmI5WmVWRmRYdzR6cDA2bVg2Lzhad0tPZEh1b2wvSlpsQnI0ajVhYytWNFNzM2YzTW1VN2dzcUs1Rm0zNGRvbVh1akRCZWd1bElaT0dRZmt1TVZRZVFQTHVWMHFNZnV1Kzh3UTQ3dHZJTVJiOG9FSjZndmgxMy9wQ2dMQUhKU3dkMnJlSEV5ZE9ORXRnbnoxN0JzRkJRWlIza01tYnROU08zYmJSZ0dkN3ZXR2tXUmZLZXhnYkcwTldaa2F6OU9LdlI0OWcxS2hSMUhmbzJCWnViaDdGVEVJMU1zbzV4bzdMY3dVVWdkTW5ERDNKdDBlODFjV3dvUTcxMGhMNWJiMHRWSDR0eHFnK2hMYndLZFRJa3lvNG9RSVcwbGNlOVFIUG9kVHRJOXVHMDZaTmt3dW1xMHBKVG9iZXZYclJ5bnMrM0o3OU50R1FsOS80MEVxc3I2OFBLOFBEb2FxcVNtZTlpSXVMQStNZTFNdlVDTWw3UGRwVkl3bmxIQ2VoS2p1RWZKWHZsd0JkVnRFU21zUzNSN3hWd2FRQkxTNkVEZjhUQVVRS0Z3bWc4aHN4QmVrSnRJVmpSd1BFeVBERk9hVUdGdEpYZmU4RElYYkdsUERJNk5hdEcremFzVU9yNGIxNTh5WUVCNDZsZmQ0N0hkckNwZldPaE1ENk5Tc1ZoM3pBWDlDRDl0MzY5KzhQeDQ4ZGc3cTZPcTMxNG1wSkNmajYrdEkvcjdzaDNONDJpaXFmT2dGcFJLU2dLak9rZk4xWkp3WnlUaTlNR2xhVk42WlBlNzQ5NHJVeUpsbEhVUnFEZUw0YlNYc1FwK1piSjRYQVhJbWhEb1p1ZUZJMDJGV0JBK1dibHk1TTNkOTVCNVl2V3lhWGowdlYxTlRBMlRObllMU1BqM3lqMFQzRHVsZEgrRzJIVzJOSWovRkQ3WGVqWWFuZkFKVzlHR1J1RHB1aW91RGh3NGVjZWlHN0RHTmpUb0c3UkFJdFc5QS93M2xRRjNqOHRUdHorZFNJcUlCZGJtcVBTZURTWEJ0S1JpK0dEVHZOdHorOFYrWjdsc011VHJVQk1yZlgyVUxsSVRIYUFrb08yc2tsbHNaNEFKd2VUYytQYXVBZ2ZNSktJUmgxTktBTlZUMURyYTNob3c4L2hPUEhqOE9OR3pkb3QzTjVlVGtVRmhiQy9uMTdZZEtrU2ZCTzE2NHF6NU9Kc3NDckwxUis3Nk4rY3pRejhVdEYwSzE5RzVYdjNicDFhM0IxR1FrUkVSR1FsSlFFOSs3ZG85M096NTgvaC95OFBOaTFjeWVFaG9aQzU4NmRWWi9ac2dXc0RoNEl0U2NJbDY4bUZ6Z1pkWGxweUpRUGxINHBCcnFNWHB3MGRCemYvcndXbFRGbGVCRzVPYmx6QkZCeEdHM2VJMHFVLzY3K2JnUkFBbXBzUElrNEVxZFpvbUtRVDQ1NHdHeVBYaXEzQXgzdDI3ZHZ3TkRRa1BIZldmZnFBRmtSanFvREYwTUlNZzg4UHVnQk15V21LcmN4R1gxOWZhd1g3UXdNR1BmQ2RrQW5LSW9ld1Y0OE9nbVpFRWNEeWxYdGNWZTR1dHlXSW0vR05Kc1hlZE10Mi9MdHptdFJHV0ZENTlIZGNBKzJvaTE4VkVSQ0RIV3hiZ0JuZkppVDRLT1F2cDZtNUtlNUJLNStPUkpDN0kxWmljeVVBVDBNNGNpQ29WQjd5a2Q5SUxXNWZUU2dlS3NUakJYM1lDd3lHNnpRSlhaOHFRMUkwZWJUU0w0NG1qbkhFeklncDZuY2VFUDVRVHZJbkNHZ2J0K3dZWHY1OXVhMXFid3hmZHBmbkdiemt0eWtvaVZDcVB3ZVNmdWRrbThWdjFYZjJ3T2M5VWI0VURtalE5RFFTNzkxaDhnd2N4aGkrclpHUVcxdm9BOFRuRTNnWXFROXUwM3hHdkh3a0FUV2pqT0RnY1p2YWRTTFR1MWF3YlJScG5BNTJxRUo0UmlLcHluS0xOV2Vjb2IvUlFxQmJybGtUclMwNGR1YjE2b3lwZzdmSjd2cGlHUWcvdDRyVWtoTW9qYldCU0RSaDhvNU5aeGxBSXRCMzlubkF2c1dXTUZVTjFNUURPZ0luUTFiMHdaVXYyVUw2Ti9kRUh5Rjc4RGE4UU1oTlFKZFFqOTZjYmhBZkZRRXVybWh2dHN2ZTBmQ25ubVdNQVgxWXZpN0haR1VxbnRoWnZRV0JJaDZRTVFrYzdpNDBSN3E0cjIxTHA5YTFHVkVtU1BwR1Erb1FBdmowandoa0hPWk9jMG1qMjlmWHJ2S21XVmptVGtUTllmRXRWWEtMZndEQWVWL2x5WjZBaVI3VTBsU1E2STN2ZmhzTGdJMUYwSlZuQmM4UGU3ZXdQT1RIaHBmRkc4cVZUOTZ3dE5qN2dwUUwxNm82b1Vtd3RISXA1b21za0hJVC9VSkI3aTNSUVIwbWN5WkkzeVBiMTlleThxYUpVZ2lOeXZyZlFFOE80aUVQV2FyNEhnajFURU9BS25lQ2xKWWtzeUFKSVl3dlJRMHVTemVSQkkxaEduL2t4bkNNQnQxQ2E3eUpWR3dpQ3B2NWd5YjM1SWwvZlg1ZHVXMXJKelpBZ25kalhkOURSTDJCQUdDeEhWblhRSFN2QnM1cjRKVUJxUm9nV1F0a2ZRR29xMXYxM1FHcVF5aHkwbUtKOHFZQ0I1c0Y2cmF2b3Y1OXVTMXJ1elpndnlzMlVJZ2tqMUhDTThPSTJGUENhSHlwSkw2ZjU4U0lYRTlBQzU0TlUyNkRHK2NOQldjYjRKVURkREdSZkVtb2tuUHpqT0FibzdwTktqSlNIV2NQVlNjRUVMaFJ3S2c1SEMyOEdISktyRUIzNDY4MW5WcHZtMkFURmdNMUx6cjY1REFNVXB4NjMrVi82Nk90d2ZJUUFPNDJBUVhkQURkcGNEa2d1QnlhYndwc1BsbWRiMUwxOUhNVk9TakxzbEZucWw3WDlvQ1hRWnpQeEIreExjZnIzMlZiakxSUXczTHB6UndyaEQrUG9TRS9SRVJTNlUyeVJrZzB3c25neU1YV2FLTGtIR2tOc1VESGg5MWdMdmJoOFBOS0N1NHZzRUNmdGxrQ2IvdkZNQ3o0ODRnVGVQL0hUVVZUU1VaM0pHbVMrUTVlb1cyYjk0aUlVWGduTG4vYlYvR2xUbDl1QnRGWU1SUEs5QVdQaTNFK1ZFSituZmRCVGVBYkUrRUYwNldHakpaa0tGRExtckczOGRHd0pYVlpuQittaEdrVE9tdWtvdzVKbkI3cXpWVUowczBmcWF1WkdxU1RKYW9tbjFEUGp5aEt0NU9ucU5mbzZtNWt3czhSekNEYnkvZXFNcjl3RFlKM1hwQTVzRmVKSEdjVXQ0NEpjcC9WeVdJMFRBOEFISTh1Wkd0Q2k5NnNsaVFxUnNxenJwQjhjcUJhcVdsSS8xOVkvaHpueTAzSWJRRm0vN1J6a0ROekZqTXZTYlpVWjZoRjhkc0lYYytOWE01ODRRbHlaTCsrbnc3OFVaVjNrS2hGV3BjWGM0SHRrQ2tZSWt0dlBwUkFKWHhRbHFxayt3QkxubXFKNWNoT1RvbVd6TWVIUkZCMmd4ajF2SVNLVjVsQnJYcDdxb3ZxYVpFWVlLdSs1akxBbElXNmk2NE5DeUNHK3VSd0I5UXlabHQ0OEczRDI5a1hWcGd1ek4zdnV4V3hQbDFpd2dxejZDbUp3Z2Jmd25VcERzQjVIc3F5RlBEWlJaY1lrR3VEbEdHOXZZMmE1VlNKcjFuQkdmOGVrSzhSMCtJay9TRUJKK2VrQmhzQkNsaDlQLy9uRVc5b1NMRlZmdXk1R29tbDFvdXM0Um0vdEljdDRiTVBQcUdtak1scC9uMjRJMnRyRERyenFpQmo4bE5SV0xEMDJOQ3FEZ25nSXF6Tkp3UlFGMjJDMENoQjBDQkN2S1o0a2xQSGdzdWF4RVUzcHVmVzlDS21CaGlCRDg2OVlhVHcvdlFFaVBxRFdkOFRXaEZ6bHBnQ2hXcHJ0cDlWdzVTcVVUVkhQSlp6Skk0L3p4M3FFeTBsV2ZsSmRxK2hVdEZkUEpXNUM4VTlPSGJnemU2TGkrMG5VSjNNMTVaWVF1dnppb2xwcUV5VVFqU3kyNEFSUjdNS2VSQVFSUGthNWRiMnl5cDhpSWg0eVNtS3NVbEUydmZHeExIR1ZIT3lWN1VDMnF5M0xnTHdvVUNCckNkU1pOemRvZXFGSEZEVm01OVRyOTlVZmFXOEozL043NUtONW5vb1kyYm5vdTJMcG03WDZJYk5CRU5JVW1nK0NWUm1TUkVBUmdGY01VZHAxaUdCM09LbW9rbWd2bkhRUnVLZEVrVGVrQ3NZMi9HOHRaelN0QUh6Z1VhVTg0cldQRXVTUFBkdVYxbWJDVFNGb3puMkRqNzZuVDdCbm4vT2lLRVN6VFpRdi9ibGVLcDV2cDg1LzhmVWZtTGJOKzl0RkQwRWdGRUxpOFN3Wk1UYUJESk5pcXBQSTgyY1RIYUtqKzVNK09LbG1GN1dhamdlZElJT0QvRGlDSnZqQjE3ZVJ1dzZVc3I4Vy83aDJubG5SbExwVzNVekxjbUM4bWJwTWhHZVlJUUNwYmltVkpTbTdmWWRpamZ1ZjlIVmQ2SDRnV1hGNHVCVFBGS0VieVUzYVlwTmlxcFNoY0IvQ3dCdU9wT1Q0a3FKSTNJL3Y1bmR3S1NSbjZTTUw4ZzJLQU1aRzIrQkxJWG1XS1NKVTlHbTlkZUEzbUpFZ2ZoRjhQNWFVWlFsdUtrRldHNEk4RjdqUFdlTkJ0Vjh5UE51U2JYQWN2RjlRM1VQTW5JLzBpOG11KzgvK09xZEpPSkhtcHNFbDNEZjlrc1FwdldSaTFWR2Jab2lHZ1RYNU0wZ1RzOVYzVklpZnBMNUpmdEZwUXRlZHJWVkhONWxaeXk3UU5KNytFU1gxcmFCNlEvcVpHRENicnMyVlVWYzFJeDE1bzhSNmhJdFduZzkzMjJ0UExtZlNUT0taNXFyczkzM3YrUlZiQlkwQjF0NHIvb0duLy9vQWdxMG16a1ZLWWowcWhVWjRrQnJpT0piNkNoWHVmQXRlYW5MTTBKVXFmMndPUTY0MmVzTlhucmlYWHNCU2xoK0NYeHgrSGhxaTgwQnRMb0RKWnpxeTF3d25MdzVLU3RURlE2Z2NzTGw5a040RHZuLytncVhDcjJ6bDlpSjBVQWtZS2xZdmo3dEMxVVhMQlJTM1VPa3ZnbWt2Z1hTU00zT1hCREExaUVyM0ROQUV5cXBBazk0SlJBdS9MV2t6QzZKL2FzOU5uR1VGUGt5dTJ5VXdYWG50M2tSbTJSRXpiL3NuTUNLQTRYQXprL01sQzJ3dmpPOTcraUNwZmFiYUFid0pWVllpaExFallwY1ZXT0NJbUxKTDR0b1hLTEk3OW9BVkw0bnFVNVlrTEpPRDJ5bDA3a2xTRzdHSkluNHR2K3poNUxidkpvMm90YkdxQ2NaVzNSQ0d6dXI5SnRvQ1RDVG9XOGRnZjR6dlcvcG9xbm11c1hmR3lYUmplSWF4RmllSG5lcG1tSnM5VkkvSnJ3VStSQVRLWnpRY1k2azdlZU9MZGUrQmFlaGJid3o2NjBncnpPMUJRNmttWXVnRisyMGN1THNuVGxTcmpJa085Yy82dXFaSVd3SzJyOFhRU1F1YlhWcmttQlpWUm0yWUwwNWlqZXcwWkhWYkVMcEU3RnQySHNpTjQ2Ri9pa1RSOUltbUNFUGZlUDc0YngzZzgyVk9mWlUyYjkyeDRSNUgrc2xQWmpUTjdIUmN2dCt2T2Q1MzlsRlM4WFd4Y3V0WCtKQUl4bDluQjNsNGlaeEpsQ2tGNTM1VDEwWlA3NGZqZ21VZEo3UnJxWFYwbUNkMC9zMlhrcit2SGVEMGJjY29QcVMyTEtqTzhmRmNzelFjeUg4cmUyY0lsSXduZU8vOVZWOUluOUdQa2dsaWtIUStDUEE3Yk1KTDRvZ0xxU2tmd0hrTUNWaUlHWVJBbmVKczBtY0l4ZGIrelpNcXF2dkg2WEhCSHB6VkZRbFUyOXRCOGRzNFhDNWRSc3lDaGFKcDdIZDM3L0sxVEZuOWd0a2crSmh2dUhtVzNpaW9zMlVGdnN4SHNRNjhtWVo0SUpGT3ZZdTlrRWxwRTAzZ2g3Zm1tQ2lQZWVxS0x1bWd0VVpnb3BNeTA5S1lTaUZmUzVRQmYvRnI1eisxOFJDZzFrVytFbnNzRTRORkEvcklkSG1XMWlHZFY1OWdDMzNQZ041QTBKWlFPZUZQUnRWb0hQK1BYRW5uLzMwRkRlUmFXajlvcVQvUElsei9GSnJCQ0t3eFVaSUdaQ3puSzdrNlc3ekZyd25kbi9pbENsbTB6MGlzUHRqeFNob1JXdFFJVGpQR0FoY1ZXMkNLUTNSdkVXeXVvU04weWU1SWs5bWxWZUdRbGV1TUQvKzlxS2Qxa3gwQ1VydTJ6cDV2Y2t4aGF1ckNiTWZ3V0JjSWNMZVRPdFcvT2QxLytLcG9xbm11dWpUWHlhTEc4OWZ4NW1MbkhsUlFIVS9lek1TemhycnVFQ3A0UjFiMzZCdlVrQ2YyTmQvMzcvMzE2NXh6WjFYM0Y4UktpcmtGcE5tNmFKSkJCZVExQ3RDQ2szdnI0djB5VGtqM1ppVkszVWRldkd0cWlGVmR1MHJldktJNG50RUtDd0lFWXBGUStORFVxcEtJOVFTQnRJV3BJUUNnU1NFTjlyNTBXU2tqSWVwVTRoRFNIRWVmanMzTXRBY1dNN3R1UDR4K044cEtNZ1l0K2JlOC8zOC9zeUgyOURPdlNjOEwvTHIvWmk4MW9sdi92SE9hWGxpSSt4emlrUkJQMTB4VVdWQlpMNHdyYlFKZGFuOTR4a25QYXhEbW41b2dRZmdRNklrMklxY05HemlUNzN2N2c3bWJtNCt2UTdMSENyd3YrdXJ1NUdlWFA4N3gzLzMxR2Z5MytQZFQ2SkVLak5rc2JwRXV2TDlEZm5ONXVodXp4MGlmWFRmcUF1TmFaQnJjcWE2aU5RWWNhRW1BcGMvR0s4ei8yL0xoYlp0bTdqWFBCVUNnRjNkR2tIRDRIMnJjdmJzSUwvQWV0Y0VtR2dac3VQcWxiNUNBNDRjQWIvVkcweXRMd3R3TTFTTHJ3MnJvcGRHemR2ZXRKSG9PS2Z4OGRNM2dQbVNUNzMxc2R6TnJZSFdLaXRxeC9FWDJ6bGIrL1YvMVJwV2VidnM4NGpFUUZWQzJjLzRzaVdEdW5DcW5ZRmZIN2lOSzBWNFVaSmVCTDNIRGZCZ1BiVXFJZTJvMHdhSXRIQjFLU1lDUHpSMHhOODdudnl0U1EyclZ1ZkJwNlQ1b0M3dUhtVWc1WU53dDE5K3BtVExxdjVjZFk1SkVhQUkzUG1XTTBtN2RCUTNEdWpEcHE2TnlXNGZzZ1Vsc1Q2ZUNvRjhEYWtqV3FBenl5ZDRpTlN5YS9HUXdFL3V2THExLy9rMStOOTd0dTZiWFpzeFcyYUMzM1ZjdEQzMzNtWWc4Wjh5V2VYUG1PVmo5Um1TZU5ZNTQrSUFqVUxwc2VwTm1XOWxtc0JmK1BNVStEcTd2QWx2bFhCR1VIVEF6Y2FRZjY2V0J6U3dzVXZ4RU5CeXVnSmZQajVSSi83bGI0Y0R6MW5VMk1qYjNNRzlEc3MwSE04K0M3YUMwemdXaWxEb0gxcU52bmRxb1d6SDJHZE95TEthRG5TWDNIQjNrQ0xiOXNpUUhjWkY1bklOVExBdVl5b2g3cHUzUk5ESlg0eEhnNklrNklyTHpjWml1WW5EcmxYMDhhZnhFVGVmblY0Y2J2TE9iaTQzWVM3VWdMS2l3ZjFLbmQrNGhqV1dTTkdDZFVxUDZmWkxUY0RCYUJwclFUZkZFVWc4U0NSbzluSS9mVVpVTGw0OGhDeFBsa3dIZ296SmtaRjNnUG1TVWF6Zi9zZUovNHlFZnJxMGtlNWNlY01LNjQrTjBvNGFGbHZEdHk2dVpaZXpTYTl6RHBmUkF4dzJzVFp1UEFMZ2NMZ3pGUGd5L2Y1eUNTK0kzSTFpdHdZSFpGN2FsUGg1R3NUaHdoMnA0MFBwVTAwR2pSY2NUK1VKMEhSejdCMWZ6djB1bVdMRXFEenVESXE0dW9IWEgrdEpTUng5WEh2VFFIWFNpbVl2RzR0VzVSWTU0cUlJZG95L2tlYVhTa0xFZ3BvZVV1QUc4VmM1Q0xqOUo0V1lNRDVGTGJOeUVMdjBkS2h4anJOcjhSM0dybG9mcUxSeWgvS1NWREFUNEg5cHFsM3A4Q3NDNXNFaCtZbXdjZnpKa0RKTCtNRFh1dllxd25RVVI1OWViMzFhZEJiSlJrSFhDanZydXRURHRvMm1YQVhTbUI1N1VxbG1pVW1zYzRUd1FCSDVzeXhtazFaalVId0JncUlhNFVNVjNaaFU1U1BUR1M5YmZwcVpDUEVFUXVBaDBETDFsbHdOSE44UVBsR09tZnRQd2FQSXkycWJkdFhxMERQQ1Q2czk5VytqNFA2VldLdzF0WGwzYVJteTQreXpoSEJHTTBxemRQc2x2WmdZVG0zVG9TT3dwRkpmRmRtREhQZldRVzhEZWtSU2RGWllZRnE2OVNvaWx2eHh3bHdhUThIMEJ3RmFSdm5RcjlqRG5oT21jTitOemVLT1RqL3pyQ3QyNmxaNVYrd3pnMXhENkZtaVJPd2pVdUNudmpMRldqYklrQlhTWFJFTm1UK3pBUzlWUklNdUZKUm5veXdSTGwrVkFKbi9nd29leVUrSW1uMUpxL09uZ2FYOTNNdzBKZ1J1YlQ0ZHcvVXBVSmZqUXllazN4RTc2RzduSU1yT3psdzVRM1R1cm5LQ2NjeWNRcnJ2QkQzSURVTHBzZXBPZktmc0kyN2dvWEl0VktCeSsrYW9ic3NlaUliVThFWnJhVzNzeTRFbkF0TnF2NkdER2d2RXFCNTZ5eHdySmdPcDE2ZkRNZCtud0RsaStMdnpyRlhFNkR5amNuRzc1czN6NEtyaFdid3FHa1JDK3V0VDhPV3RVRHZhUUY2S2xKRzlOenRlSUEwcmpFUEk2N2xsbWFUbHpneVo0NWxuUlBpSGdmYmVCcTJjZWt3Z1lMNlZSSmMyV1dLdnNpRHhuT0NoOTR6RXZUVktrWkxleHZUSTIvS0NNYmJOTmU0cnk1clg3WGVzR2Jqb0luR3MxMDdtQXpOL3pUcHJScGNYcnR5Mm1tWG5tQ2RDK0krd3AyZk9FYTF5ci9ETm00ZlR1U0cxZjhYdVhUMFJQNTJVL2Q4WmdKUHBRQzlWYUxSMkxwZy9lb2NHSENtWW51bmdiY2gzWkE5NE9EdjljOE51TktNN3htQzRuVjZxeVRqdXZyQkVTMVIvWW5idW9ISGR5Y1BKMjRuN3VEUE5RdW14N0hPQTNHZlVydlkvRU5zNHkwWUtPL3dqU3pEcFIwOGRKWEVTT1Q3YWNvNWFOK1hEQzNyUXhBWFI3VXBIMmc1WWdMci9STVBDR3EyT0FzYm9XeTQ0T25qekpPaGJiT0FUWlBDWGh6R294OW1WOTVMaHNZMTVwREV4WGRjcldaTEN1dDlFdzhvYXBiNGpHYTMxSVlpc2o0TmF5UnNaVFBjS0g1NFpPN0d0blh2VFliUE41ckFtU3VHOUo1UTNGWTFSMzdKblo4NGh2V09pUWVjbWdYVDQxU3IvQUtHemhXcXlGcXVBdWZXU2RoR1BIUWVlZkJrN2k3bG9IMS9NclJ0TW9FclR6Q2VOMFJ4ejZPNHIxUXRuUDBJNjcwU0R4bTZ5SnBOZmxhMUthZENGL24yTk9aTDhOOS9tNkc5SUFWdWxySVhNSkxwUE1MQmwrOXowUG8yRDY3bFlVaDdXMXduaXB2cHlKdzVsdlVlQ2VJN2FyYWtxRFo1RDRhelAxeVpuY3RsYUhsTGhJdmJkYUZOMFBVcGV6bjl6VGVIT2ZocUR3ZGZiT1doOFI4Q09ITWxDUE5adlNodUVZcjd0SDc0c2Q0WlFReEJ6UkxIYTFZbEM0UGFHcTdJZzZkK3RRU2ZieFFNcWQxN1RkRHhFUWMzajhaR1ZQMEF1WDZJZzZ1N1RYRGhYenkwYkRCRDNVb3B2SWIxYmR1TG1rMTUwN0ZFbU1wNlB3UVJFdTc4eERHYVhVN0g0RzdUN0phT2tjZzhlT3BXU2RDMER1VitSOEFtMUFVWDRQSjdQRno5d0FUdS9UeGNMMHlCam8rNWdIUHRJSDV1bjhtUTgvSk9FMXo4RHc5dFd3Um94Y09pYWEwSXJwR0k2aU90cFJPZmZaZWFJLzNVa1RsekxPdDlFRVRFMVA3aHllK3FPZkk4RFBSMmJDTjN0R1MrNThhdVhNTm4zS2xhNWVjY2I1akhzWDd2QkJGMTNKdG54S2xMaFJUVnBtVGhITVBnOXpBWEwvTHBSMmtyVWRvOE5VdFNxR21KaHc3MWJ5bVBhVllwSFNWWWhqSVVHeTNHWHN4QTA0Vi9aNWxtazNNMXEveU05bmZ1Y2Ridmp5RHVPZFNsNWlRVVpEN0tiTU9XM28vU09EVzdwVHVHb3ZiaXZldnhub1g0YzZXV3F6eXZMaE5udVBNVHg3QitOd1J4WDZMTFUvczZuNlJhWlVuTmtWOVM3Y3BpYk1KOEZIMFQvbnN2U2xlR3NwMUI2ZHFDamsxMjZKL0Y3eHpFZzJFTGZuOGQvdjlTdk81djhMcHpIRXVFYWU3Tk0rSllQeTlCRUFSQkVBUkJFQVJCRUFSQkVBUkJFQVJCRUFSQkVBUkJFQVJCRUFSQkVBUkJFQVJCRUFSQkVBUkJFQVJCRUFSQkVBUkJFQVJCRUFSQkVBUkJFQVJCRUFSQkVBUkJFQVR4c1BNL2Z3cUR3TTdOWDVjQUFBQUFTVVZPUks1Q1lJST1cIn0pKSkpO3ZhciBhcCxzcDtmdW5jdGlvbiBjcCgpe3JldHVybiBjcD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGNwLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBscD1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIixjcCh7d2lkdGg6NjAsaGVpZ2h0OjY1LHZpZXdCb3g6XCIwIDAgNjAgNjVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIix4bWxuc1hsaW5rOlwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wifSxlKSxhcHx8KGFwPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZmlsbDpcInVybCgjNzc0ZWI3ZTg5N2NhM2I4MDIyMjgyNzQzMGMxNmM1MWVjYmIxYzg3NV9fYSlcIixkOlwiTTAgMGg2MHY2NUgwelwifSkpLHNwfHwoc3A9ZC5jcmVhdGVFbGVtZW50KFwiZGVmc1wiLG51bGwsZC5jcmVhdGVFbGVtZW50KFwicGF0dGVyblwiLHtpZDpcIjc3NGViN2U4OTdjYTNiODAyMjI4Mjc0MzBjMTZjNTFlY2JiMWM4NzVfX2FcIixwYXR0ZXJuQ29udGVudFVuaXRzOlwib2JqZWN0Qm91bmRpbmdCb3hcIix3aWR0aDoxLGhlaWdodDoxfSxkLmNyZWF0ZUVsZW1lbnQoXCJ1c2VcIix7eGxpbmtIcmVmOlwiIzc3NGViN2U4OTdjYTNiODAyMjI4Mjc0MzBjMTZjNTFlY2JiMWM4NzVfX2JcIix0cmFuc2Zvcm06XCJzY2FsZSguMDA0MTcgLjAwMzg1KVwifSkpLGQuY3JlYXRlRWxlbWVudChcImltYWdlXCIse2lkOlwiNzc0ZWI3ZTg5N2NhM2I4MDIyMjgyNzQzMGMxNmM1MWVjYmIxYzg3NV9fYlwiLHdpZHRoOjI0MCxoZWlnaHQ6MjYwLHhsaW5rSHJlZjpcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBUEFBQUFFRUNBWUFBQUFXSWJrcEFBQTd2RWxFUVZSNEFleVZlM0JVNVJtSHE5WnhyTzMwYkxLNXNrc1NOdG5zSlNFSkpDUWs1SDdaVFVnSUVtNHhrQVFkcDUxMnB2MURhZkRhZ1ZabDFHcXQydEdSVmp1OVRGdWRqc0FJMm5hMHRnUFRZYXJXd1ZwSFFJUmF0ZFl3SUJoQlNINzluZDNFa3MzWmM4N2VjbERmWithWmhKQnNzdC8zUHVmOWdpQUlnaUFJZ2lBSWdpQUlnaUFJZ2lBSWdpQUlnaUFJZ2lBSWdpQUlnaUFJZ2lBSWdpQUlnaUFJZ2lBSWdpQUlnaUFJZ2lBSWdpQUlnaUFJZ2lBSWdpQUlnaUFJZ2lBSWdpQUlnaUFJZ2lBSWdpQUlnaUFJZ2lBSWdpQUlnaUFJZ2lBSUF0bW9LSmRTNVR1SzR1VEhVbHJPenhmUkpnUHIxTzlWZjRhZjUxcjlQZ1RoTXdmRHVtd3lzRzc2TFhvdjNVSDMwVGZvU1lva09rcGZwM3ZvYitoOWRJU3VvcVhYSzhvVlZwK0pJRnh3WEtjb0Z6TVFEMTFIdDlLbjZDRjZMc21CSnNNajlJLzBBWG90cmVKRDVuS3J6MUFRWmcwT2ZEWUh2NC9lUWYrVWdrMDYyNTZsZjZjL1VhUG0reXRSSDBwV243TWdKQVVPOVZkbzcrVFcyay9ITDREb1V1MG8zVTYvclFadDlSMElRa3h3Y0hQcDErblQ5UFFGRUpUVnZrYTMwb2JyRmVWU3ErOUhFR2JBVFdQbmdINk5QcHZNTFh0em1nMzM1R2Jnc1lKczdQQTY4RnhaSHY1V1dZQlhxbDA0V0ZlRWZ6ZTRNZHJpd1lsV0w4WTZmRGdkOEFOZEpkSHRMTUZZdXkva01mN2NHM3lOVjJ0YzJMZXdBTS9OejhOMmp3TS9kK1hnQVVjbU50dlRVcldkSDZNOTlES3I3MDM0SERPaUtKZHdDSHZwRS9STUlvTjlFMFA5c1RNVFR6S2d2Ulg1ZUdOSkVVNjJlZlZqakFnekZaN2kzM0MwM28wWEsrZmhtUkluZnNHNDc4cXhZNU10S1RFZnA5dG8yNGpOZHBIVjl5bDhUdUMyemVYUWJhRnZ4ek80NnZEL2lCdnVkOFZ6UXR2MDNhWmlqSGZPVnFqK09KMytPaDl6MHgvaFEwWjkyUHpXblJ1S2VpU3htTitrbTNtMitWYmZyL0FaaGNQbDRaRDlMSjV0ZTI5dUJuWjZIWGkxeG9XeERsOEtZdlZiN2xpN0YvL2srM3ZLNStBREtpUGVMVDFPZDlIdTZ4VGxZcXZ2WFBnTXdIQ2RrK0dlaTJYTFBqdzNDM3U0b1VaYlBFa00xbVJRd1ZuU1JOQlBldWJnOXN6MGVHSStTTC9COC8reTFUTWdmQXE1WGxFdTVRRGRSTWZNRE53SWZkQ1pHWXIyZ3padkVvSzlRQ0pOVXR4dk5iaXgyKy9FbmRuMldFTitqOTdDa0JXclowTDRsTUNCS2FVdm14bXc3MmVrNCtrU0o5NXJMazR3MmhoRFhWb0dMSzhDVmk0RzFqWUFBODNBWUJzd0hBQTJCSUZydXJTOXVqUDhQVVB0d0xwVzRLb21ZRTA5c0tvMi9IcmQ1WHo5a3BTRy9WWjlFWFo2SGRpU2tSWkx5TWZwWmdsWjBJVkRjZzM5eUdpZ0hwNmJoVmVxWFJqdlRISzAwUWEvcHlJY3F4cXFYcUJHWG0xR1JqN0l3UHNaOTZxNmNOaGRaVW1QK1Z6QWgzL3dEQjh0eU1ZbW0rbVFSK2tJdmR6cVdSRXVJRVpzdG9zNEZIY2JEZEMyL0N3Y3JYY25zRzFqaUhaS2RVc21KY3dFSGVMbXZvb1BrRDQrU0hvV2hEZDF3Qjgyd1ppUE5YdXcyK2ZFWnJ2cHJYeVlEcWozWnZYc0NCWXpHZTlQOVFibTdodzdYcTh0VEU2MHNRNTRaeW13dEN3Y1RXOGxzS0thMjdnV1dGMGZEbXA5R3pBY25KMkl6M2NETi9WQVMvaHY2YTc0Zjh6bkcrTjdQZHZodzE4cjhuRm50dDFzeUgraFpWYlBrR0FoSElEN29nM0lDTjNsZCtLc09tQXhoWnRndEVHTkdJeFVRMWREV3I0b0hOWGFSbUJkNit6RlBkUUJyT0ZEWlJrZk1vR1M2SCtuaWZjK3p1OTdxYklnOU9BMEVmRlplaGY5a3RXekpNd3l2UFJ2Umh1TTc5clQ5TGR1c3NNTkpOR09DRHZuTTZ5RjNONDFqS3lCWWF0YnV6TzhSWFh0MHRZb1p2V2hzWmEvcDVjeEIwdjAvMWFkTTVuZy83L0lrRTF1NUlPMDBlcVpFbVlKWG5ZWlBhTTFETGRscHVNL1RjVW13N1VvMm1tUittSlhmUTExWS9jdEJxNXFNUkd6eWRDMVlsWTNjODhDNC9la3M1SDNsdWRqUzBhYVVjVGo2amJlcUNpWFdUMWZRZ3E1VGxFdTVrWHYweG9DZFVqZWIvRWtMVngxaTR3SGZEakhhRDVXYmZmaE5QMm96WXN4ZXFyVmk1T3RIbnhBajZ2eWR4K2pvODNGMHp6ZTdPSDNldkF4ZnlhdVlJMVVOK1V5YnN6VmpHMndJOEdnSThLZWlsbDkzWlcxUE0vNWNjV3NudGNPandNMzJBeTM4VXZVYmZXY0NTbUNsN3RlNitKdnRObHdwTjRkVjdnSEZoZmlrYmxaZU5DUmlZZm1abUpiWGhZZUxjakdMMTA1SVI4dnpzVVR4WE93M1RzSE8zd083UFk3c1dkQlB2WXVqSkJmMjhlUEwxUVdoTnhmUFErdjBOY1d1M0I0U1JIL3ZpTDhpLzYzeVkwUEdmUkVyS0cybTNScE9iQ0MyM21BMjNrNEdURkhSTjNmQlBSV0dvZXNFZk03RGU3UU9SdEVmSUt1dEhyV2hDUXp1WDBQYUYzNjgyVjU1c0tOR0toejNMQzNwdHVNQmlvaE4zSHJiTWxJdy8wYzNNZmR1YUhJMVpqZm9pZTVuU2ZhWTRnelZnT2xqSzBLV05QQUxSb0lCMzIraVFTdGJtWDFRZEZaR2xQTUUveDhUM2tlYms3VFBmY0pldnVJb2x4aTlkd0pTWUlYMnFOMTJUL0lzV084TTdad3B6ekxnRzlPY2NCYTNwNlpqcWU1eWQrc0s4TGI5VzZjYnZHa0x1THo3VjRBckZvQ3JPK1lHWE84WVE4SHc2L1pPVCtta045dktzYURUc050dkgyam9seGg5ZXdKU1lDWCtXdXRTOTYveUJVOVhKMTRwOXhmTlErM1dCQ3g2bDNaZHJ4WVdZQWpTNHB3dkxsNGRpS2VjbWs1MEZjTERMVHF4enljdXBESCtmSDNKVTVzc3VtZTB3dU1PTnZxK1JNU2dCZjRSVjdraWNqTDNacVZqb2xnYkZ2M0U4OGJwZys0QVhkNUhkaHNUNXYxaUc5S3MrSDVzcnhReE1jYUdYR2JMelhxeFJ4a2RGZldBUDNOeGpFUG13aTViekhQbGZmUjRUY1Y4NEhGaGRpU29YdjJCNmpMNmprVTRvU1h0MGpyWW5mNW5MR0ZhekJJNHh5NFF6V0ZlTWJ2eENONVdmaGV4dXdFZlFNMzBKOG5JejdSbE1LSXpjU3RodGRiQmF4cEJJYUM4Y2M4MkFFc3EyVEVQbE1oSDIvMjRINUhwdDQ1dmNzSGVhblZzeWpFQVMvdldxMUxQVlJiR0QzY25ncCt2ZFIwdktFaEN3MmJqdTM2am5FSVZVODFlWENzb1JpajlPQWlGNTR2bll2SDhyTnhvODJtdTRsZnJwcUhvNHo0VEl2WElEcXZoaW1JV2oyVEhrYlkzeFQvWnU1dkROL0RWTWc2TVovbDkvektsYU1YOFhzUzhhY1FYdHdka1pjNVFzK29RNkVWNzRwcTRKcXU4QUN0NVFCMVYraEU2MDhvMmhucVJLR0d2YlBZZ1UwMjdRRzlPOGVPTit1SzhFNTlrWGFrclFhMnhXS01RWGVXQTZzYnpJVWNHZk5RSUx6VnA1MXQ5SkIzKzV5NkVWTzMxVE1weEFBdmJGdmtSZDZSbFQ0ejNDbjdhb0NydTZZNzBBSXM1eEFGU3BLeWJjMEVHMjFySHFwMjRkWjA3VzI4MitmQWticENmTmhVYkJ4c0lzWWJkbkErc0txZVVjWVI4dXI2eVFlbmNjaDd5L05DRCtrb0VSK2xjNnllUzhFa3ZLeEhJeS94QVVlbWRyenFBQVFaNlhCZ1pzUWI2R0FIQjJrSjBMTmc1akFsTlZyOTdYbVlFZCtnc1ltMzJOTnd1TmFGZDlVdG5NcUFUWWNkTGVReW5tT2orWkNuWWw3WENuVE4xM2hvem96NGhZVUYyR1NMR3ZGTEd4WGxxMWJQcG1BQ3JZQWZtcHVsSGUrVTZyYU5qSGREeEVZWURnTDlUY0NWM05oTEs4SkRGSGUwK3NGcSthemZxVG1jei9qRFcvaGNpOGVhaUdNSnVvdm4xdDhTRHRsc3pFT0I4QU4wUnNRelExWWoxdG5FdS9sL2wxZzluNElCdktodHVnRUhvcml5VGp2Y1R3TFdjSUFiWW5WOU9PcHVEbG1RMjZMZGJ4RHQ1TDlqakVNTjlMYk05Qm1EZVUrT0hVZHFDM0dxc1JobzhTWnV5b0krN3l5VzhZRzVyaU9Ha1BudzdLMHlGZkhlOHJ4b0FhdmVhZlY4Q2did2tyWkdYdHdQY3pPaWg2dXFEb0U2RE1zWGhZZkZLTnhwRzBMRHdVRFk5UjNUVmI4MkZBdzd5SCt2YnVEdkx6VU9ZVEt1bmU0NU00WlMzVGl2Vjd0d3JONmRuSUJURlhoa3pPcURycTl1NXRucG5mV0ttaWdSVHcvNUR5WE9hQUZQMEQ2clovVHp5di9ZcS9Qb3Rzb3pEZUJUVG1mcHpKdzVXaXpaa2lWcjk1YllsaGN0WHJOQlFtbWh5M1E0bEVMK250TnplbnJPTUI0bmdiQVVLS1dRMHRKSnkxS2dRQWRTMGdiYXNoVm9DMTFDZ0xTRXBxU0VoQ1plWThlSm5jM3hybmVlVDdMc3E2dnZYdDByWGZsS2dlK2M1OURHc2l5OTMvdTdqNktEQy9xSytPSytaakhKd3hYbU1yVG8xV3V5Zzd1WVM1WG5ta3NTeXl6Q3lzdTd6Ujd1WXU1QjZ4enZDQ3dQWUMxQUN6Ri9Nb2g1cjFNTytmT3RtRmR0UnNoUEJleFNpRThqUHIzMzlLTWpjWEE1bC9FdWJwSXRTeWE4eWJBRnVhSWxnVXN4M0V1enkwYmtpckFpTEIrRWZkeWwvRTFkQlEyMTZ3UTRGOURDUnY1Y05ERUxKWkJaRTEreWNFOFNkemlIbjIxM1dLVVF2OTV0TUh4YzcxMzk2SWdPTHNhRS9JSjNhYStzZENxREt3eDc3V2NqQ2NoYXdkM0l5ZWZiRk9INFN4Ty9nWDlmWDBFRGJYNmlOVFhhWjdsQXg5dTRnZC9HUE1qc1hqSWdQcjJtbW02MW1LUVFYNi8zdm41MEJBZFAxQnBjeWtHSnk2Sk5SZ1A5SmVSVkJsZVlpeGR5T1JyNXFqWGF3azNtazBIKzhvc3dQUk93YzcvYi9oWVA5YmI2OEpycVBFUkQyRW9nczVsL29YMWhiaGtnWDk0c2V1Q201MURVRjc5N3p0eW1rQnE5OS9hajgzZng1bTFEVGtyaFRXYUx5VWdId2w1bGVDK1d5SWE2eE5QL2l3enpodXpSc3JCbS8xUXpGMnNpUzVET2QxWFJUZWIwTm1FTncvQ3l4UElDV0NGc3JTRi9Hbk81ZGowZmNSSXltejlyYmZIZGlSQS9YK09RMm9sWGU0ekdqK205dngvcWcwdFlpMHhrd2l0czRqMUJsN0xXVFVsTklzSWx1M2dGQURZQ2RKVG9Qem9UcUJuS2F6ZHd3T0xmdm5ReDBaV3JFcSsvckFuTFhNdkZ5c3N1UDc5OWQvcHQxSXVXWVpsZmhkZXV6aUY2Z0paRHpCNldWNitWYitOck1OUDFLMlVSejE1U1E5K3lsVWp0eEZWNjcvQ0g5aXcwcnlUZXpVYWpKT1QvODlyby9OcnE3T0R5SWw1TWhsdVk1TDlMTkt4YzNnNjZxWWZ6SGE0M0dlbXZMUjd0QUdzR1BBdk1Vbk5sZDhBZWpuSEVFcEN2N0pKK0dDOGc3bThQY0dlSUhFSCtTZTlkL3RDZGJvT2hDb00veWNQSkx1cjVXZ2U5MmV5T0w3a1U0bHN0WnRyWDdORVdMaTlxMFFyUXZOdmtrWHdRN1FyWUYvRXVDK0NzUUdzRStiTlJBV0lPNUN0Q0dSSC90Tkl1dFF0ZjFYdWZQMVFIZVA4TlEvOHI3eksyQU94ckRTN3E3UXpFODBhVG03YWFwUkd6ZkxmY1FnZERQblY0dFVRckFlUjNLNXlTZUw5bEs2RWpFWisrZ0ZXRFZvR1pOL05QTnhOdDNNQ0hmQzMrZlVPZExPS0p0ZFYwazluRW0rY1E4Z205OS9wRGN6RHNwM2xMemRwMkQ4QW04Y2JURWFDM1F4NjZ6V3FXUmN5eURTamVDTHBvbWkxYnZ1SEtRRGpWSHFBZnVrb2xQK2N0SlNZNjBPSlp3aHRKSkE0NGwraUJXUzNreTRMQXVwNlArTXF1cFlld0JPVGYxRlZJemZYTGV1LzFoK0t3UWZNdVlKUFJRQWZDWHBwQ2MvWUo4Q1p6cU5WUEQxU1Vaa1RNc2hVUGdwMStPNzBmOHRMOFdyVndzMFBMTXRWVlJhL1VPT2hHczFIeXM3RUdlVHZvWGtRclRNNkE4NFZiYThpWDFnUHhKU0xFQzVBLzFTU0xlQWEvZjZ1RjI4S0hyak1ZTHRKN3Z5L28wMjB3QkREb2M3ekYzbzNtcFBXMThVemhrdnBGZ0pONWVXVUYzVlRDdlVCdWJzWnJuL1RhYUcrRGkwNTFWS3FIcTJEQis4TSsrbm5BTGdzM21ZZnhFT0xoWlpuREF5QnZnTFZDclJWa2h2Z2FEdUtyMXkwQmxvRDhxblFMWDZiM2psL1FCd04raFRmNEhUN2JJdDU0Y0VtemFPTGhya291NHZmUnhrLzRiYlRacUF5eE1GKzNtdWxIbmpMNlZhMlREalI1YUxRdFFIT3JsY09kWFZWRlF4RS92Vlh2b2lmeFBoSnRJSnRmVk5vNWdMMDAyNGtIRE40Lyt5d2o2RndnSnhGdnFPTWp2aUlraTNoeWJUVnQ1VDhzZCtpOTR4ZnN3WEMvd0Z2bXU4cEthQVpZaFhpVGlTR25WMWRSWHdlL2pkOE5lK2t4YnhsZGJ6S3FSaVFNZXhEY0JvamZ0bG5vK3c0clBlb3FTOGtqYU0zdmxWdmorRGNiYy90YkxKdnc5OTZxcjZCZWZINWhwanNBbUxXd1Zza0Y5M0pCWmsxOHJRanhsemd0TEVMOHM2cHkzbXludWcwR285Njdmc0VkRFBYakdPNGgzaUwzdC92VDRLWUVGemVMaXg0VnR6RitMNW1EYUsrbmNhRzNaZEdHK2N5dEpTYmFoZ2NVNzJkMzRtRndKSlFLZUZKcndMS29OY2FjQytSUE5oQnRYSitLK1BJVzNIMk5KT0poN0lERTNQOVQ3MzIvNEE2R3VwRTNiUFlVellSWG1LbTExVFRTbVlwM01XMStPb3JzYm5EUkkrNVN1dEdjZTFObW0xdk1KdnBad0U0ZmhEeDBxTmxEZHdBcjczWFA0L3NMQVo5ckQrUWZjQzZnOHduNVUwMnBnSzllbTJqb2k1TkpoL3kvNVJiZVhQK2c5NzVmY0FkRDNTY2U5RTFZOHZNQXFSUnYvQkxYSlRLMVJnUzVMVDFIV29HNTNrVlBlRzMwelZJejllUVpMWHYvNzlvdDlISjFPZjBOY0pNbyt4Q0dlTE14L1hkdXQ1am9hTEtGOGQ5VCtNelVXWlZkTkFXZEw4Z1pFRjhSU2tWOFdhTXNZdmF3NXR4RkRQSG92Zk1Yek1Fd0k3eUZmMm1GVXpsY0FWNWhwckVVbzUyVjFNY0IzQXNNdmEyK3hid1BKTCt0YzlKT3Y0MjJPeXgwRy9Ea2lwYTl4OE1WVm5xbHhrR0hXandwYmNyZ2p1RXp6T0h6TVJqUG9wRjU3N0Y3cFRPT2wyVTBtZ1BnZk9ET2hEa2ZrUCs5ZlFud2xWMnBkeTVDZkE3dnozc3dJdit0OTk1Zk1BZkR2RmM4NEMxR0k1MWJ3MmxmRlhpRmx6Nkg5enJWVlVtRDdZRUZ1S2w0RnhOTnpXRWcrMlBRUmE4QzBYTlY1ZlFNa1AzSVUwWVB1MHJUOHJpN2xIWUIveS9Sc0h2d0lEalluQW8ybWNHSWowN2pBVEluUW5TbU5jQmR0aWZ3OTVLQUIvSDdlUUdjSytxOFFKWkF2QTczL3NXMUNjQWJOMkF2VnNnaWZnaDN3d0g4cHQ1N2Y4RWNEUE52NGdFL2pxVlZoSGRkWnJ3cHdVSk1ZZG5HT3dNMDFDWkFITTJRaUZ5OFhLakNITVByeHZIUW1HNnZsRVh6a05PYXRtejNsSlVzQW1hWnl2QWV1bUplbFFHelZtMjh2bzdvMnZVSnhKOEpwOSsvQVBHYlFUY1BjS3piWUhEcXZmdEZmekJJTjJlNDlIYVRSMXU4eVNVUUxjY2NsbTJpczVMRzBNekRBRDNRbWp2Y2Z2ejdDSDUzSE84M2dmZWQ3MUFPN3BVcVI5b3NiaklicWJmRnU1aVRFVDlSUjFYdVdSYk1Xa0htSUw2OEJRME13RmV0NGUvQkF1SUp2TjhtbzRHSCtNdDY3My9SSHd6eFNoN2djK3dTODR4WGFua1k2aWtzNEFUZ25VSGJuUUxDTVdFQWsrRTgxUmFnMDhoWi9OdDV2SFlhbVU4dXIxb1VDNmoyMWJsNGl5WUE3S0gra0lkaTdLR2dLbmxDblUvSVVtMHN2TnNyVnlVUVg3SlNGdkY5VGl0dnJzL3B2ZjlGZnpERUc4V0R2Y05xVm85M3JUWjQ0NUZhdGxVS2xsVWxXSEgrdUxKQ0FyQW5KZWRhL1NvQlo0bTdJQ0VMN25kOUhkRzFHOURHb2NUL2wwRDhHbit1azkwR3d5ZjBObERVQjBOOFFEellCeXRLTmNSYlFIQzVTSllnemFESlg2eTBweTNhVnBNeERmQnd5RXZVWHFrOFdxRFdBck9XaUpPUVA5ZUtKdTVhdW5mT2pneGp0cndISTdKZWJ3TkZmVERBWGVLaFB1bXpGUWhlRGVCbVFDdk1TTmhMVDdoTDA1YnNybEp6R21DVzZkYUFPc1JaNDg0U3M5YVFwUkN2VzBGMDliclUrK2ZzeW0wV0V3L3duWG9iS09xREFUNHRIdXFQL2ZiczhhNVJpVGZiMWxVTlZ3WUlFSjJOK3VNbzd3Wlc4VHgrNExSeUFZK0dmZG9BVm9VNkM4elpRRmJjeGd2My9aa0kwYVVOc29pZjlOcDRnUGZvYmFDb0R3YTRRenpVeHowMkhmRnFDVmNhckREVGJRSHFBOGgzZ3k3cVNWOHdlalpnNXdKbW1XM1RxSVcxd0t3YjR1cEVDMThlU3Q4SndjNjgwZURpQVo3dE5oaitSVzhIUlhzd3dPK0poN3JkWVMwOHZMbkNsY0F4QjRDRElXOGM0MC80RFVINzYxM1UyK3poNWdScjRiWks5ZEVVczA2UXhYZDlhWkMvR3d0N005SWU0TTRYV2EyM2c2STlHRjZQZUtDM2xKZ1NlQy9PQWU5cU5YaHphTjBzNGJMTUE5TFFBdDRQbXR4MHM5bVl0bHpiU3MyU2VKT1phUTFraHpoWDFQbUFuQXZpZGJXSlBaQkJmRE4yaXdPNFIyOEhSWHN3dkN0NFQ4V1RuWlhhNDlXeWRYT0FtMnplb1JidklzSm5mUHoyZmFteVBDUGdFVHdFTkFHY0xlaHNJZWVyaVdVUVAxUlJ5cHZ6ai9WMlVMU24yMkFvNHkzdUd3MnV6SUQxd0NzSFY4bXlBd1pyekVFQjN2ZUNMdHBxU20vZlc5RVdSNW80YU5IVzRweVArSWhZRS9PeVhKamxJR3ZWeGpraWZySGF3UU44U0c4SFJYMHd3SGZGUTMwUVQ4cFlQdkZxQ2JkREdWeVc4MUUvOVl0QVB1Q3djdHYzeFlDZGk1V1hBYnpQdkJSZ3VlUURjemFRbHdueGZqd1FPYk9lUi81WmJ3ZEZlekM4YjRpSDJvTWNpdnBvaGwxRUllTlZnSllsaG95SGZXbHQrcXVxY2k3ZU82MW1PdExvVmd5WTVXVElxeDV3THFpMWhyd01pRWZiQTl4NUkwMTZPeWphdzRiSEcrcVAvVGJxYS9QVFdGY2x6UWtoWjQyM1NoMWVEZUN5VEVjRGRLekZtNGIzejNVVmRJUEp5RjJvMTJzY3F2QW1jejdpMHdheEdzekwwY1lhSVo3SC85NXM1TTc4S3IwZEZQWEJBUDhrSHVwV3M1RU9SckQ0UUJ5SDNGbEo4K0lMeWhXdjJ0WlZBWGNXQUU2RVJLMjdBTzF3MEJWdldSN2VSNTNXVkppTnl0T1B6RWI4Ukhob1NDWmZtTE9CdkN5SWExSVFieXNyNGMzOWVyME5GUFhCQURmeWx2aytMUFBocUMrT3VMY1ZrRnQ5Z0J5ZzJkVlYwb0ExdzV0ZDY4NHd1R0VmOVluUUpuTVUyVzYzY1BGKzNXS2l3dzB1VldqRk9kYmtvWmdjNEZ4UmF3WTVReHZuQ2ZFUFhhVzgyZCt2dDRHaVBoamdQeUJIZUV0OW04Vk12Nit2QUdCZlNrYUEraXdXWVk1ZGFqN3hLb0E3ajV4Rjh3Mkh2R2x0S3c1cldONzMzR3cwMEZ1MXpwendKbk1jZjUvVUlsWUxPbHZJZWlJRzRHY0NkdDc4WDlEYlFORWZEUEcvZUl1ZHpQMVkvRDgzdXhPQW82a1pRanVmYUF2RVFjL2c0bU5xOFhhb3hMdlF0R2VBZGdSb0Y5dFdCdTd2YXh6MFRhdFo4dnU5NExjclJ4ck1uQk5vWW9vRWNvTWN6Ukd5SXNTVnk0cjROeXVjdlBtL3JmZitGL1hCQUozSWdCeGdsaDdrUVVEZUczU2xJbzZJNDZWQi9QYzRmallHM0tlQmU2STlRRk5Zbmxrc3pEeGJHaFY0WThnMDN1TmMxRThudzNoZ3RBaWFOZ1BjMTZyTDZaNnlFdG52ZFlQSlNPL1Z1MVFqelpTVHpRdUllU2s0eUhsQ25BSzRtdjdZNE9iZHdhRGVCb3IyWUhqL3lwNkFtZkNLczgxV1FzOEJ4MEdHU1lTM044eEpLRDBEeUZESVJ5TkFPWUxYQ0RPTURPSG4vU0hnYlBHa2c1WEIrMjU5QmUzeWx0SHRGcFBpNy9OQXVVVUZUcGZDdUdrVVRSeVRRcHdONkd3aEZ3amk5M0JmblBsUDZ1MmdLRStQMGZneERHK25XcnpDYkRJYTZGNjdoWFlGN1BSV2c0dU9Lc1RiMjVLTUozTVV3UDNUU2ljOTQ3VmxiRnU1L0tIYWtRWFN6RG1HUnAvRFE0b2lma0Z5QksxbEd5OGo0bDdNZ1RmN2JvUGg3L1gyVUhRSGcvc3FiNWc5Q0d2WDd6dXNxaEhjWURJQ2RBbnRRQU8rVXVPZ3ZXakR3d3liaG5nUDRFSHhXM3krbitKdjNHc3JvYTM0bTJvZk9yeC8vMWFwbVkrd0lmZjA0MzBtOEoxVEVTc0FuUS9JU2hGM2FJOTR1TlV2QmRpZ3Q0ZWlPaGhZQ0lPYjRRM3o1NVhsMU52cWkrZjFoZ3I2RGhvMmw1Wm11YVhFUk52UWp2ZVZXK2t4VnludFJGdiszRytuNTlIY3Y2d3FUMDFsSXMvaTV6czlaZlE0WG45ZnVZWHVBckRyVldJVlA1Z2V3a05wLzhvSzJtN2pmNmMzOE5EUkFxeFVSaHM5TkJkQ0c0ZjlpU2pGbkMxa3ZacFlBdkJZZTBEcWZxeDZteWlhQTd6L2lJSHQ1dzN5WVdCSjRvMG5tc2pyYU5MN25WYko5aXJrYkRFYTZWRjg5bmNBdHpmb3BzRkdOL1UzdUdrVDU3V1BBbmcrQWNmYkdEbmQ3S1ZZRXJFd21UQnJDVmx6eEpsYldBYXdXMjhYUlhNd3JKdDVRN3diRFhra0tzQXJBSnpNWDFzODlEUmE4NjdTRXQxaFpzcWRWalA5REUxL3NONFZoOXNYZE5GNHM0ZGlrUVNXeDRCVi9EdTNtSTNLSU5abmlJTDNHQWptQ1hJQkl4NXIrd2h3VGdmdDY4T3dwdEpheW1Ta2tWWS96V1BJWjdzcTZWaTdQdzF2UEpHbDdHOXkwN09WZHZwK3VZVnV3Ty9yRGJhSFBZUkt6ZlFUZHhtOXZjSVpSNXVJaTA0MGVXZzI3RXRCc3EvR3lYMmZkMnFkeXBCbUcwNGpqK0h6ellSODZaRERXVUxXQy9FcWVjUlNnTEdYUnIxdEZNWEJzSGJ5QnZncWxwYldWQzhGdzU3QlpZeDNCR2lnTlIxdklsN3FEU2R5Tk9TbHZmVVY5QnhBUDFKUmlvWTIwL1Y1Um4wajJ2SmVXd2s5QmJCL3FIWXNObTB5ckhGUE5FdkRZSEEyY2Q3M1YzNTcvdkJtQUgwTW4vc01Xbm1XOTVtMWdzeEQzSlpIeEFMQUo2UUJHL1MyVWZBSGcycEVZdUxoM1FNRXJIbkZnSVdad2tXeHArZEFOQjN2WWtMcE9ZQ0ZmQjF0K0ZKVk9lM3kyZWd4VnlrOTZMREc0VEhrdDF0TWRHc0pQOSt3bUdrYlhyUGRicUZIbk5ZNDFCY0Q5ampXQTNoWTlEYTZFd21tcGg4WmIwNXZYR0VZRUFibUcvajc0bm5zd3Q5WlZzQXltTWZSekpNdFBvb3RCK0pzbTdpTGg1amZ3b1A0M0R6QTF4a01GK250bytBUEJ2VVViM2lIVzd5eWVPTVJYTVowWnlXZGF2UFRNREQzeWVEdGJVbkdJNTFtVHByYzZXbVV5R0xidW1rVXl6NkJ2eGVMOE5FS005N29pWVBaamdlSmVCNlA0d0dUQnF0T25Jb01FYjArUjh3c1EvaU9KL0FkV1VOUDRnRTB4eDVRU2lHM0tvU3NGZUpWZk1RZjRINDRPM2hlYnhzRmY3b05CanNHTlNzZTNnOHFTb0cyUmg2dytDSUVGeFZESm5ISjQ2MStHa0V6OXk4ajNpRmtiR0daWThKbWtzTWI4dE1jR3ExL0FjbkQ1WmEwaFhxNDNLb0NhalpSaWJwQk92MUJOSFZUQXZZNFpuRUczMjBDODVqQ2Q1M0JMT2FqZm9ybEEzRm5Gb2l4UysvZ0ljUUJQS2kzajRJL0dOTC9hTkcrOFVzUlg1VG9JbWR3NGVld0dPTm82T05vNXlHQTdzc0JieDh5aVA5OUhLOFp4K2RsQ3pvWEZqYVBNcmpKbkZ4bzN3UmdLd2V3SlU5d1pVRG5BamtvakhzcGdvY2RtMkYvVTJLT2c1Z2p5ekZrR0hkeGhqVzVLc1FLVzdncnZZVjNyNnpnQWQ2bnQ0K0NQeGpTWHZIZzdpNHJTVzNmMWVyYWw0YzNudVFGSnk5OFlRSG0yd0kwZzB3Qzl3U2E0UnpRbldIQkFnbHpGcG1JSkZwa05pSm9rR2dTckFodVJCbGNsa20wbEJERmZiYjBCbjQwM3NETENWaEZNemNvZ2N4SG5CTEJRN0lQaVlrQmE0VlkxTUxQVjViekFMK2d0NCtDUHQwR1F6bXZmWDlkNjlTOGZhWHdwa1M4S0FDZGxpZ25PZUtkYmZIUlFNTUNoRGlXQ3RwbU5hZk41YW1LVXAwQXEyaGxqUkF6dlBFR1pqTlhncmdqTjhRL2NwZnhBTit2dDVHQ1BoalFOVHpBeDF2OStjWGJrV2U4Q3VHeXpBUHZVSU43RVc0eVcwM0d0TG04NENrckFNQUtJR2RFN0pKRVBBQzRZeUV2elViOXFiTlhoVmdoNEs0bHdOK3hXWGlBZS9RMlV0QUhBOW91SHRvZGFCN1o5bDBsU3BkU3dDcnc4Z0RuQmErZmpqV2t3bVhaWCtQZ0xSUHREdGdMQUc2T2tEbUlCd0QzWkl1WEpsbmpKbWZMZTRCbUF0eWVYUXZIc0VjM2NCNll5T2YxTmxMUUJ3UDZyWGhvVDZCbDh0cSs3Vm0wYng3d3pyTG1yVS9IeS9KTHI0MEwrTkFLcDNKWUt6a3BFTVQ5d0hzY1RYc2FhS2ZaUENJU004NEdjWWQ2eE1mUjlyeDVJOVY2R3lub2d3RWRFdy90MTdYTzdOczNFOTZPTFBDMjVvQTN4TTlrazVmNlpVQjhyNndrYlpudXRKaVVJZVdrRHhsRWhnRnR0QjV0aDR3SjA1Q2FFOGdvY2h6WWhoSDJvQmxFK2xWQzdzZnZIbVB2MStpaDA4MWVtZ0RZbVpCdmFUN0oyU1ZucVFSeEcrZk9jbXpodC9EWk9YZ251dzJHait0dHBHRFBkUWJEUlJqU3ZIaHcrNEx1NVd2ZlpjWWJhL0hUR0w2ZkhJSUR0UTdhWkV4dmd4MU9xMkt3TFAzSUNTQTZGL1RRZktPWHFNbW5QTTNTbVVkbThBQ2FScVk0bWNidno3YjRLQ2IrL21HSmFJRzRQVGZFVDNsc1BNQjc5RFpTMEFkUE53Tm5hSFE0NU0xUCs3Wm5BVGdxQjFnZDN2TllidFppOGcxV1FVODRyTHhsb3IyVjVZcmdEaUJuMFhxeE9OcE15UTB6dFVpRlB3TXVaREZnclJCM2lCRExBTDdEYXViTmZKdmVSZ3I2U0FFZWlQZ1VBRjZHOXRVSTd3d1dmYVJCdm5XVGVhZkdRWnM1N2Z0Tml5a3ozaFZvM0RwWEFxN1NxQUdkRFdRdEViZm1nbGk2aFk5ajMzaDdpSHhXYnlNRmZhUUE5NFY5NlhoWGE5eSttZkMyeXVFTktNSTdqUVVlRFRLNExrVjRqeUwzOEp1QVh2YmF1R0NGR2NYZklUVjRNNEpXQ1ZsTkc0YzFRcXhCQy8rdTFzbWIrUnoyMDZpM2tZSSsxeGtNRjJGUTgrTGh2ZGZzS2J6MmpTaG8zNFhsUE4vc3BSRUd0OTZsR0MvTFkrVldMdDQ3MGI1SEpkQW1NNGlmeFhMRks0bFppemJPRW5GVVM4VDhGcjdQd1ozN2JyMTlGTVhCb0k2SmgvY0dsbGtWNEh6ampXYkdPeGZ5MGFsR0R3MDJMTUJWZ2ZmOUZVNzZibGtKRjI4UHNpZFFMZ2szbVhQNHUxeUVRVUdXRTNJK0VXdll3bWZ4KzV1TUJ0N3N0K2h0b3lnT0JyVkhQTHdkWGh1ZDZnalFQQmR2dFk3dG00cVhvVDJEdGgwT0N0Q3F4THUzcXB4dUx6Rng4YkxjYURMU214a0E5eUh6UVJGV3Rja0ZzaHJFSVFXSXhZQTFSWnphd3J0cm5WS3pyOWZiUmxFY0RPb1I4ZkMrYmJkUWI5UkhmY2hvVzRBbU95dWwyN2RydWZBbUFFOEQ3V21HdGhGb0cxeUpaSUgzS1BLMHE1UTJTY0FWWmpNYTRubDNXU3JjMnFVTXJYRGxobGN0WmpWdHJCWGlQTFh3ZHV3YVorYUg5SFpSTkFmRCtncHZZUStIdlhIRThVUjgxSS8vbmdUbTg2eVpsN0Y5cDdGY1o3QjBvMDBlNmcrNmx0Qks0YTNQalBjdHRPN2RWbk5HdU9JODVTeE5nWnZNOFpVYUExWUNXVTBicHlGV0FEaXZpQk03Y2p6c2s1cjExL1IyVVRTbjIyQm80QTN4NVJySEl0NmxBSFU0a1dIOGJLelZUK2VBZWdxWEUwc0JyQTV2REptTitta1NTM01HRFh1eXhVdkhtajNVRjBUTExpWjN2QWRxbmZSb3VZVjZWTUlWNWljY3hDbUFHMVFrVjhqNVJwd0pjRFEzd00vNjdkd1pZeWVyOUhaUk5LZkhhUHdZaHRZbkh1STJXNGtzNEhoQ3FSbEFodkZVUFlIWGppR25nSEl4a1lYZzV5ZVJVZmJhRmc4TkFtcHZrenVSUmxHRWVKVUFydU1EZmc5d2R6aXR0TVZvbE1XNXhXaWdGOXhsdEJOSTVaQy81TEV0QWE2cG9FSDhkd21tUjBWVWdwYUZyQlBpTEZ0NEJqKzcyY3k5ajlmMU5sRjBCME83bTdlb3I2MXdwZ0lPeXdQdVJYUDJBaVUzemFJazBlWVI3NzVxQnozdXNQNC9lL1VhSEZkNTNnRzhIa0k2ZFdsbno5N3ZaMWNycmFTVnRMcXNmSU5ra3NsTU81MSs2SmNtMDdRem5lbWs3WWVtbmVGRFVkWmdqTUVYekozVUdCekt6VW00R1ZPRG9RSE1MV0JzYnNFeHRsTVNZN0M4a3UvR3RteGtXYktrZmZwLzk2YXpaOTl6OXB5OUhWayt6OHgvYkVtclBhdm5mWDd2azRGWmJyUGU2YkRTYjZNK1NuVUVNOWtSOGRMTlZqNzRaYmdJOWtiOUdieXA5a0FtRS9HUVRyd3FvT3VGdUorVGNvQVh5Z0F2cXMwVy9oQ1hxc0paL0xQUkhpNjdRdE9peUxTOG1hc3cxQWNZVE43MlhjakRheVRnTE5wRHlMdk5YbnJRYlZmZG92a3NSWjdEeGowWXk4TE5KTGRkZDdYNDZCWUZ4QTg0YlFXOExHYzZ4Um9BcmhKeVJZZ2J2SVZ6Z085eDJYaDlQVGRnc2Z5cDBSNHV5MEx6bnVVTjZvTStCdzN5QUMrb0FuQWR0dTl2MjN6MGJOQkpLMjFDV2JRRmhDNDc3V2FiRkdpUEF1QVk4QnlUQUdiNUFKZkJqUW9iL1AwbVR3SHdNRElkQjc1S1VpbGtMWWdUdFVTc3NJV1g2TnZDbitFTUZjN2twMFk3dUd3THpXdEJMdklhKzdEZlNWOHVDR3NBM0xqdGV3ajV1TTFQendWZHROWnUxWXlXNVE2OC9wMkl0N0J4eitBQ1NQZG1VVXdqUjZTSTI0TzBCUnVhOXo0UDRRSkl0UVVLR2VrUUt3T3NCWEl0RWZkelVzOHRMQU84M3VQZzlYTWEyN2ZaYUFlWGRhR0pOeWdOL2QwdUcrMW1lSGlBKzZzQXJBUHY3em9DOUhyRVE0OTVIYlRDS3VoQ3k4S2d2NEd0ZVNnSDl3aTI3amdEMGx1TVlqUWVLdUJsR1FUT05aeExJb25zWnhzOEI1aHQ0WFExZ0ZVaHEyeGpMbUM5aUhWdTRjV1ZiZUg5M1NHbDg5bGs5UHhmOXBVVWhIbG81RXRxQ0c1MzJPalpzSnQyQU5NWERLTmV3QnEzNytmeElIM1E1cU10SVRjOTVMSFRLcHRWTjloODFtRlR2b3VOZTZnekMzY0lHUUhTZEg3Z1pTQ21BV1VvZ3pkUXlDdWltL3ZlYitENzBpMDh5clp3VjdoOEtvS3NGN0VLNEVTZHQ3QUNZSVh0bTBaNmpaNy9PVkVERnN0OE5IT25GaGhMaGV4bWZpTG9vcGVhdmJROTVxZFBBZTl6QmxQRDl2MGNXM1VQVU8xczg5T3IrUDFuUkJkdHdIWmRqVzJYckJCclBzdXhvWC9wZDlMdVZteElCamVYazEwaVRmYUVad2FkaHdGSWpzYUtBUi9BK3l6bFBPZEpmTjVVYTZDUWs0Q3ZDYkJXelBWRXJIY0xMNnBpQ3dQdlB2UmU0YnhlTUhydTUxVGxFUDl2TllCdUVnUzZEUkJYY2JMQ0p0Q05RblZBZVdIditUTnM2N2NpSGpvb1FjdHlITU16TG9XcmdwZEJPUzRGbk51dTl6bHNKYzljNzdRWEFSNUdkQVBXRFZrQmNXOE5FR3Zhd2kxOHhDcUFwNWRFTTVlOXVYMGJWR2lxQlptc05iSmE1MlpjRkk5Z0M3NEp0QWM2Z0tnck9KTWMzREVHdDQ4ejNBcDRXWTdsQWJmTlpLUEhVZkw4dTNBaFNRR3pUSGVHQUxKY0tvQmNDZUpxdC9EQ0tyYXdCUEQ3NkovQ0dUNXQ5S3pQeWNJVy9rZWpjZkt5RkxuWGFhTk5RUmQ5RVBYU1lLY0VyQ1FuNHlKZDdNa1ByMWE4TTRDSFpYaFpOdm1jSlovbmRwc0VjTlNmeVVTSFNNUVFsMHM1ekZvUTk5UWFjYk8rTGJ5NC9CWWV4ZXR2Ulo4NDV6bUJSSXllOVRsWmFPd1dlY05YMkxEdEFzN012NDBDZTR0Vm9BZmNkdG9zdXVpOUZoOGR5SUFWdVdnUHg0TjB0aWRFazBVRHF3R3ZiUHRPeEVNbGVKVUFaelp3RG00K0YyTWFBWmRncmhIaWFyZXdIc0NMeWdOK1B1UldPdDk3alo3ek9WbG83Qjhqby9LRy93S0lVZ3VhTXZtMFc2VFhXMzMwTkE1bm5jZE9xeDFXV2lwVURuVTVvTjdqc3RHamZpZHR3WHYrdXNWTCt6b0FCODlKeFdXUm9CMUNUbldIYUt3M1RPbjhRRXFIVmZQMm5VRnhGaHUwQkRBMjdNODlqcExQdmM1cEt3RThWZ2xnUFlpN2E0eTR2OHdXNWdMV3RvVUhlOEtVNUovNXlRR0xSVEI2MXVka29ibmY0U0hid1VEbEFCZlN6eExPWkRBUnBrK3hCVC9zRE5BYndQMEtFTDdVbkV2RVU4aHIrUDViVVI5OTJPNm5mUUE0aUsyWktrVE1vcFZHQm5nWUc1aWh2ZEFYcHVrRVo2Tkk4Zlpwd1RzRGVBcEFoamw0V2RhNzdDVTllY0p0THdFOHpnQjNoSlJUQ2VUWnRJVTFBcDVjM0p5NWxCVXU3UjhaUGVkenR0RGNwZktHcysxNmNFR1lnM2NHY0VrU2t2U0ZpdE1yaVJRdkIvQVEwQjdIejBld1pjY1RUWlNXRHhzWGIyWGI5NnVPSUJjdnl3cXJVREtJcndaY00zaGJzcGtxQjFnTDVub2pyZ2J3UW0yQVg4UEZyWUIzZTFJUTVoazk1M08yME9ETjhxWS82SFhRK0hVdE5MS2ttVTRzaXREd3dqS0FFNVVCSGtLTzR2K25nUFVjc0k1am1OTFNRZXB2VnNhckY3QnMrMzdkS1NyaTNSWGhEK091Sm04QkxzdGhRTmFNdHl6aUJtNWhPZUIrTFlBVkVBUHZNTTZQWGZxY25vMGpNYU5uZkU0WEdyeFAzdmdYSWg2aWI3Y1daZXE2S0YyOHRvVkdnWHBrY1RPZFhoaWhFNEI5RE52NUNCQVhKWkhOVWVRNGNoSTVEZndqQ3lJMGlvRVp4NUJjd3UrbjVZTWkzd1JxMnpkUitmYTlpSTAzSk1VckE3eko1eXdaeHVXQ1FJY2tlRmxPNGJXNkFhdEJyaVZpTmNDSk1vQVhhQWQ4Q2QrLzIybFQycjRyako3dk9WOW84cGk4OGUvRkFpV0E2VnNzMFd5dWsrVmFXWlprYitaTUZzdVNINEpGbkp0ZUQrQyt5Z0NQTWJ6dHluZ0hvd0c2elNxVURPTWpMbnNSWHBiUjlpQlJUQ3dmcllpN1pJaHJ1WVVUWmJad2hZQ2ZEN21WOE82K3dXSzUydWo1bnRNMVlMSDhHYS81ZTdyRnlnRkw4VllEdUwrR2dITjR6M1dLbEpMamxRSGVGdVFQNUsveGZTbmVJV1JhQzk1eWtHdUp1RmZIRnRZRGVDRWY4S2V4b0JMZWNhVGI2UG1lODRVbWk3d0QrS0l2UFBzQUozUUFsbTJtYVF6NnFZNWdGcS9LOXYweTZxZFZ0dEx0eXpieW9HejdNc0FuOFByanlMRmNqdVF5M09JcjVIRFVsL25aS2J6LzJiWWdqYldMbEc3VUZ0WUR1RjhmNEpONDcrWFcwbDdsTW1EMGJGOFJoVWFIZUFmd1phSk9nS1Y0YXdaWWZmdGV4TkFmamluZ2xRRisxdWZrRHVRTCtINUtCamdGbkVWcDVrVCtHZ24rRVdDdUNIR3RBQ2NxQnp5QnIrOTMyWlh3YmtzS3dqeWpaL3VLS0RRN3dEdUUvYjJoeGdOZVVGdkFVOGhYblNMUVN2Q3FBTjRSOWxDUzA0c1YyREpmTk0vZ0s4SGJyQ0VjeEN6ak1aR1BXUE1XTGdOWWpyZ0dnTlBJVXdHWEV0NGpBeGFMMCtpNXZtSUt6YjZHZHhDNzR5SUhiNk1CUnlvQ25NWVFqd0RBRU51Nm1jMnJBamlIZHcrUTNRS292RjY4aW1HVm92dER4RXU3bXp6MHJ1aW1iZmpaVm16blRWNEhQZWx4ME9OdU96ZlA0R2U3Y0VISUFZKzFpeXBiV0F0Z0R1SzZBbTZtdDlFckJieFR5SGVNbnVrcnJ0RDByK1dIOFZhYlh6dmdhdzBBM0ZjS2VCbzVGdy9SNFk0Y1hJMkE5MklnVjlyNGVObjJmUkZBZis1MjBIODViTFJjQWJtVzNDd0l0TGVwR0xGbXdGMk5BQndwUFFNWjRIMnhBQ1dWLzhhbFJzL3lGVmxvL0tmeXczZ0syK1Z5QVR6Wkc2YXpnRHZNNE1yeGxnSDhTWk9YYnEwQ3BkNXN4bVVnQlR3Umt3Q1dJKzRLelNyQXcranhNa0d4VjV1VGdqRFA2Rm0rSWd2Ti82WDhRTlk2YmJNYWNCckRlS0VuVENlN1JFcDE1dURxQkx3Tmw5Uk5RdVB3c2p6bmRlUUErMmdJZ05OU3ZJMEEzRmNaNE5PNEpGZmFyRXAvRjFzQTF4Zzl4MWRzb2ZrLzVoM01pWVdSV1FVNGpZRWJ3eUNkN3NhMlpXaWwwUW9ZY0g4SFBPdHhRVFVTTHN1TmdvWDJoRDBGd01lamdXSzhzeFR3YUtLSjdsTHUxM0ZFTkhxR3IrZ2FzRmlpdk1ONXM5VnZPT0FwRE5rbzBKNWlhTHNBTVo4S0FBOGlMd1pjdEV5b0djcEo1QVN5RzNrVGVRRjVDa2tyYnQ5bVh3SHdhRnR3MWdPK2lPK3RjOXVWL3Y0eHpNNFNvK2ZYckQvS2JPSGZ5dzlvTFc3ZHFXODFGdkEwTW9ZYi95elFIbzJMTTJEbDBRbjRIV3krMiszV1NxRWVSYlloOXlIL2ppekc0THFRcXpsOVhNTjdqN1UyS3gyTStBcUFEMGQ5bEk2SnN4cndKWHo5a01laDFKTnA1UHRHejYxWnVjSmgzTVE3cUhmYS9YUnVTVE5OTWFnMUJwd0cybkVNeVhtQVBkMEhzTml5S1lZMkh5VzhPZ0R2akhqcGZseEVPckFPNXpicERRRDZQZnpyMXRIRDd5SlQ4dmRjaXZ3bTVDbmF2bCt6N1R1TEFVL2gvNDk2SFdwOXV0N29tVFZMVWhoV0R3NWxRbjVRZDJENEIvdWJLSVVjV3hpaHM0c2pkQUdnTDEzYlF0TWFBS2VCZGhKWXg0RjFkQUYrSDFoUE1heTlJUnJxQWRKdVNlS3lWQWo0RU9DKzNlU2grN1RCVFNNYmtiOUhENEpWOUUvSTRTOTV4bVpBeU9ETkFUNGU5V2Z4eWdGM05nQndvanhnaG5lano2bldzN3VNbmxlek9JV0RlWXgzWUJ1RHJnemdiTUpGR1ZvUXBpUDlzaVRDZERnQm9IM1lxQ3k5a3ZUa0kyWlRLZUN1VXNDZnR3Zm9aZEZOYSt4V3JkdDJEN0trUnIxN252ZU1leDFXR3BUZ0hVSW0yelZzMzA0WjNnWUIxb0IzZzlGemFwWkM0WEFpdkMzTThvamZTVi8wRmVNdFNrS1NQTndHQUQ2RXZOL2lwY2V4NVpZSmdsYTRaNURyc1RXL1VhTysvUXZ2T2NzRUMrME5lNHUyNzJoYmtMOTl5d0dPS3dGdXFobmdxVVJadkU4bUxaYXJqSjVUczFRS2gzU2owZ0d1d21aN3E4MVhQOEJ5eEYxOHhBZUJkaWZRUG9sTDVUYWJaclFzWThpOWlMV0cvZXBBUm5uUGV5M2dLc0JsT2RNYTBJRlhCK0NlNmdFenZFK280OTE2ZzhWeXRkSHphVmFad2tGOUUvbFlEY0x0RGh0dGJmYlFQZ2F1WXNBaHpZQVoySStpUG5veDVLYjFicnVlVFN1RnV4NGIxMS9qWHMxSDl2Q2UrZDh1ZXdFdXk0bW9uOUo1dkhxM2I1Y1NYZzJBcFhnVkFGOUtOTkhESG9jcVhqWVhScyttV1JvTGgrVkREbW5Cd2JieXhxQ0xmb1dOK0ZGSGdQWXpsR3FBZTVVQmY5WVpvSTliL2ZSNnhFTmJnUFV4bjRQdXdtV3hWQjlXYVVhUU5ZRHJybE9mTnZDZXU5b20wSUZtYndIdlVlQ2Qxb1ZYNi9hdEVqRHdqdUhuN0ZJMDhjNnh3cUVGa0wyVndHRWJjbzNEU3Zkak1OWjdIYlJCSWV2dzgzdGNObHBwczlKTlFzVkllZmtEOGgrQWUwMGQrL045M3JQWlpmTlJ5SlBENjZmRHlHUzdBdHhLdG05Y2hyZGJCVzhad0NNOVliclBhVFB4enRYQzRmMEpjaTh5V1VOYzljcDU1QW5rMjBsQm1GZm52b1NRTTd6UHNjWG56TUJsR1VMRzI0UEtjT3U5ZmVXQUpYaFA0RGxyN1ZhMWZqNkpDL0FiUnMrZ1dUVW9IR1luOGl3eU5RdWdTbk1TZVFiNUFUSy9FYjI0d1dLNUdzLzZnUGQ1MW1HYkhjcmhaZm02V3J6VkFsYll2b01kUWJyVktxajE5ZUdreFhLVjBYTm5WbzBMTjNJQWgvdWZ5QTRrYlFEWTA4Z3JTQkpaYU1TUTRibDM4RDdiQ29ENExPSXI0UDJxTmFBZGJnRndEZkVxQU43VDZxZWJCRlc4ZHlZRllaN1JzMlpXblFzSDdVYitBVm1IdkllY3FTSFVzOGd1WkF1eUV2a2hMbzlXb3djTG4rTXZsUzZ1N2FLN2dQZFkxRTlwUFhDMTRLMFdNUEMrSGZGU1Vybm43TzlLR2oxWFpobFlHQUFYc2dqNUFmSnZ5UExjeHJwZklRem5BUEpQeUY4RGFUKzdHSXorTzNpRnorYkFaenZHRy82bnZRNUtSYk40aDVISkRsRWIyZ3hjRHQ0YWI5OUwrUHBwdjFQdHdweGdaMkIwajgweXF5N0ZOajhHZkN0ditPKzJXK2tnMjd6UmJDN0d4UEpvcThXckEvQjUvTTRETHJzYTNoSGtMNHp1c1ZsbTFhMHc0UC9LRy81bGdvWDJSTHdGdkNQdHdlcmc4dkJXc1gySE9rUmFiYk9xNFIxQzRrYjMxeXl6NmxZREZrc0xodndDRDhCclFYY0I3OG5XUU8zaGFzR3JBUGo5WmgvZEtDakNaZmtFOFJyZFg3UE1xbHNsTFphck1PUTdlUUIrNXJKVENtaFpqclFGYUxvQVZKNXcrV2pGcTJIN1R2YUc2Ym1BU3cwdXkvL2dZcHB2ZEgvTk1xdXVoVUgvQ1EvQXJWYUI5cmY0TTNpSGtJbE9qVkMxd3EwUTcvbDRpQjdBeGFJQ040MnNTZ3JDUEtON2E1WlpkUzBNZWlzeXpvT3dQZVFwYk45ek1iR09jTFhqSFk0RmFiWE5xb2IzQXZKM1J2ZlZMTFBxWG14RFlkamY0VUY0d3VPZ1ZGc2dreE5BVTRSUEw5Wks4Y29BNzQzNjZXYXJvSVozUDlKcGRGL05NcXNoaFdIL0VRL0NTaUE1QUN3TTd6QXlHZGNKVkRQY3NESmNHZDUzbTd5VVZJYkw4dktBeGZMblJ2ZlVMTE1hVWhoMkc0YitGQS9EOXJDbnNIM1BkNGoxZzZzUjc5YWdTdzF1R2xtZEZJUjVSdmZVTExNYVZoajZEVHdRajNyc2xHb1BaSElzRnN4aXF4bGFmWGluOFArbmZVNDF2R1BJRDQzdXBWbG1OYlF3OUQzSXRCekVMVmFCOXJmNkM0QW40cUV5RVBWRys5WmxlRGQ2SFdwNGp5TUxqTzZsV1dZMXZERDQ3L0pRdkJaeUEyNHdrOU9kWW0zUnFzSGw0SDNjbzRyMy81Q1EwWDAweTZ5R0Z3Yi9iM2dvN25mYUtCVUxaaktFVE1ueEZhSVJxeGEwTXJnczA3MWxOKzlPeEdKMEg4MHl5NURDOEg4aVI1RkVkclg0Q29EUGRJV1V3WFdycEVkbmVrdXp5ZTlVdzd0MXdHS1piM1FQelRMTGtBS0E3L0ZnYlBRNVNyZHZUd1VncTRETDhtYllvNFozTS9KTm8zdG9sbG1HRlFCc2tjTllKZ2owKzdZQXBUcUNtWnpxRWh1S05wLzkrQXhMVmZCaTgzN0Q2UDZaWlpaaEJRQmVRSmlVNDNqSzd5emdaUmxuMjFlS3E0NW84eG50RHRFcW0xVUo3Ni9Neld2V0ZWOUE4Qk1la0QydC9nTGVJNTFCemVocWtyNG11dFFicGwvNG5FcDRmNE9MWjc3UnZUUExMTU1MR1BiS2dmelVaYU1VME9aek5oNXFDTnA4MG4wUitxREZwNFQzTkJJeXVtOW1tV1Y0QVVLRWgrU1ZzTHNJOEFTMllRRlluZEJtRThua0RDNk10WGFyRXVDL05icHZacGsxS3dvWXJwY0RTU0w3WTRFQzNtRWtEeXNiRHJ5S3NCYWp6V2NDcjkwVzlpamgzV1Iwejh3eWE5WVVRTHdzUjNLZjAwYXBybUEyd0hzeUxwWWdLMDJUaGtRMDVWaVhTTGZ6dCs4RnhHZDB6OHd5YTlZVVFId2xoL0pjMERVREdCbnBEbW5HVjFVU0VmcTZKMHc3V3J4SzIzZTEwZjB5eTZ4WlV3TVdpOGlEc3IzWld3VDRQRkF4WEVXcEVWaHAwc2poZUpBZThUcVV0cS9kNko2WlpkYXNLWUQ0S3g3Z3oyTCtJc0NuMlFaT2xJS3JkZGhGY2JBelNNc0VnUWY0VWFQN1paWlpzNnFBNHNkeUtEZGJoU0s4TE1mallrTUFIOEZ6ZHJaNGVYaFp2bXQwdjh3eWExWVZVS3lSUTduVFlTMEJQSXhRZnlTYk91RzkyTmVVZWRibW9JdUg5MHpTWXJuSzZINlpaZGFzS3NEWUlNZXl6bTB2QWN3eW5jZ0I1a1VQVm9YMytLb25sSG5PQm8vOS85dXJ0OWM0cWdDTzQxUjlxU0RNN0MyN2JuWjNkck5KUTNQYlMxTHJRMEVmUmZSRjBCZjlLeVNzclVsUXdVakVnZ3FDd2V0RDBUeFpVWXVnMVBwZ3RWNG9VZ0tLTFRaSmpmR0NMYTNXcEticzhUZDd5KzdzbVdRdkU4NXM4dnZBRHgvc250MDU4TTNJQW41ZjlWMFJ1UTdDZU1zYWl4blE0bENzTHVDMWJNSSs0RGFYeHk2VnZ1YzVuMGNXOEtUcXV5SnlIZHVBaDJNYks4VjhMUjNmdG9CWE00bktING9uZFYwVzhDT3E3NHJJZFdRQnZ4SzBCRnphSHlrRHNTVkxjekxncExpY2lsZStSeEt2dVh0VjN4V1I2eUNNRjYyeEhBMTRwUUV2WWZreHhDdmJhSk96Zkg1NXBQZ2Q1d2VqMG9ESE5XMU05VjBSdVE3aU9HS041Um12TGhaSDZnTTI5MDhtSVErNGphM2pMVncrL3lmN2dGT3E3NHJJZFJESFk3SmdMZ3hIaXhHWFZ3cHNaY1J3UEdEemp3SURKbW9CNGhpVEJYT21QMXdiY05WVzhjWjBNdUMvMHZISzJmTURFV25BV0VMMVhSRzVEc0xZaTYxYmd6bHVCRzBEL2oyTnQvQ0JwR05iU1JtTkJHeW92aXNpVjBJYzMxcURlU25vc3czWTNKcjVGbllvNEtXcWN4a3dVWk1ReDdRMW1CejI0MUJVTEtaaUc2c0t6WHhyT2hIditsaFB6YmtNbUtoSmlPT2dMSm9QRWlHRWE5UkdYTFdyMllRUWQ3VVJNRDY3YWdaY2RlYjhJQU1tYWtwTzEvY2drSXZXYUtiOUhyRlFDTmk2WW14TDJBMEVXSWk0eFYzSnhrdm5GYytlSDR3eVlLSm1JWkJKV1RpbitzS1NnRGUybkRiRXpjTGJ0TGVsbVordlBvOEJFN1ZnWE5OQ2lHVE5HczVNd0NzV3pNaXFaNG40MTNTOHBZai94ZHU3Y2s3cDdMTURFV25BK0gxKzFYZEU1R29JWlZZV3o0bWVVRzNBa2kwajR2L01pQS8yTnJ5VlRMenVuTy8yMndhc3FiNGZJbGRESkZIWlczakNvNHY1b2VpV0VTOWgxL0JXYlNUZUs2TUo2Um1uKzd1bEFlZDBmWS9xK3lGeVBjUXlJd3ZvNVpCdnk0RExNOStzMXcvMGlIeVQ4WnI3ckM4c0MvaXE2bnNoNmdpSTVRNXNRUmJ4ZS9HZ1dNd1l0ZHNrNUV2NC8zOW1FNFczc2prejNHWEVYZmszbWZxZFNJWmtBWjlYZlM5RUhRUEIzQ2NMT0lkOTNoK1dodWZVNW93dVdjQmZxTDRUb282Q2FGNlZSWHhFMThYWCs3dTNMZURac0Y4VzhESFY5MEhVVVJETlh1eWNMT0lKank2KzJvNklzM0V4N2ZmSUFwNVVmUjlFSFFmaDlHS1g3ZDdFSi9lRkM5RTV0UjlTTVZtODVoNVFmUmRFSFFueEhNSnUySVFsNW95Z3VKaHhKdUNQZSsrVWZVZCtYTk44cXUrQnFHTWhvZ2MzaTNnbTRCWGZERVRhRHZpRkxxL3MvTzlWUHo5UngwTkk5MlBYN1NMT1lXOUVBdUxjY0t5NWNFZUxPOWtmRmpablA2WDYyWWwyQk1SME4vYWJYY1RtbnRBMThWcDNRSndaakZUaTNHcG5oNkppeXF2THpzdGpmYXFmbTJqSFFGQVI3UFJtRVpmM3JOOGozakdDNHN1QmlQZzVhOVNGdTRCOXNpOHNwank2M1JrZnFuNWVvaDBucDJtM0lxN0QyRm9qSVpzN2pEZnowUzV2NGUzOFpqUWdadkhmcDMyZXpUNXpFOHVvZmxhaUhRdUJKYkdQR28yNHlUMnYrdm1JZGdYRWRnOTJ5c0Y0UHgzWHROdFVQeGZScm9Mb1JoSGY2OWpmYmNUN0xyWlg5Yk1RN1ZvSStYWkUrQkQyTnZaTGcrRmV3QjVWL2R1SnlBSmhKckNIc1Fuc0dIYTh0RGxzQ2p2MHVLYmRvdnAzRWhFUkVSRVJFUkVSRVJFUkVSRVJFUkVSRVJFUkVSRVJFUkVSRVJFUkVSRVJFUkVSRVJFUkVSRlIyZjg3cEh4Yk83M2FIUUFBQUFCSlJVNUVya0pnZ2c9PVwifSkpKSk7dmFyIHVwLGRwO2Z1bmN0aW9uIGZwKCl7cmV0dXJuIGZwPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sZnAuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IHBwPWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLGZwKHt3aWR0aDo2MCxoZWlnaHQ6NjUsdmlld0JveDpcIjAgMCA2MCA2NVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHhtbG5zWGxpbms6XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCJ9LGUpLHVwfHwodXA9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtmaWxsOlwidXJsKCM0ODdkMGVjZDdjNzgzNWY0OTc1NGQ5NzU5NzJlYzkwNDBlZDU5ZTg2X19hKVwiLGQ6XCJNMCAwaDYwdjY1SDB6XCJ9KSksZHB8fChkcD1kLmNyZWF0ZUVsZW1lbnQoXCJkZWZzXCIsbnVsbCxkLmNyZWF0ZUVsZW1lbnQoXCJwYXR0ZXJuXCIse2lkOlwiNDg3ZDBlY2Q3Yzc4MzVmNDk3NTRkOTc1OTcyZWM5MDQwZWQ1OWU4Nl9fYVwiLHBhdHRlcm5Db250ZW50VW5pdHM6XCJvYmplY3RCb3VuZGluZ0JveFwiLHdpZHRoOjEsaGVpZ2h0OjF9LGQuY3JlYXRlRWxlbWVudChcInVzZVwiLHt4bGlua0hyZWY6XCIjNDg3ZDBlY2Q3Yzc4MzVmNDk3NTRkOTc1OTcyZWM5MDQwZWQ1OWU4Nl9fYlwiLHRyYW5zZm9ybTpcInNjYWxlKC4wMDQxNyAuMDAzODUpXCJ9KSksZC5jcmVhdGVFbGVtZW50KFwiaW1hZ2VcIix7aWQ6XCI0ODdkMGVjZDdjNzgzNWY0OTc1NGQ5NzU5NzJlYzkwNDBlZDU5ZTg2X19iXCIsd2lkdGg6MjQwLGhlaWdodDoyNjAseGxpbmtIcmVmOlwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFQQUFBQUVFQ0FZQUFBQVdJYmtwQUFCRUdrbEVRVlI0QWV6Vlcyd1VaUi9IOGZmcWZjbnJoZE1pWUxxTEVFRkJpZUVnRW1MRTFDTXRuYUdsQ1ZncDBLNDkwM0tTVXdSU1NFRGFaZHZkN2ZhRWhSaVVTT1FnSjZNWFJoTkFFNDB4VVluR2VLRkNBR09Da1dCMkRtdlF2ODlPTzl2ZDZUTnR0MmllV2ZyN0pMK2JYdTA4eWJmLy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF3S2pna1NYSnEwaHp2RXBXTHRzaXRxZlo1bnRsNlFIMjl6R2lmeDhBMkppQktsbGRiRCt3MFJDN3l2WUIyMTZQa2lYbnlOSmRvbjgvd0tqRXJ1cjB2aGpwTnFhenZjdjJRazZCOUYvUjN3UXdLbmprckdJV1hmUTI0N1h2WjdZdEhsbjZ2K2p2QTdoajljVjc2eCtPTjNsWFBFcFdrZWp2QkxqanNPczQ3Vis0dkU0N2tTTkwyYUsvR2VDT3dhSTY1eFRjMUpJSlZOdzluelovV2t6Tmw4cW85WmNLQ2x6MVVkTlBaZFI0c1lUV2ZpaFQ2ZUVuS2JkeEJ0Mi9iTnh3STc3c1VhVEhSSDgzUU1aajF6ZlBLYlE4LzJ5Sy9GWk5QYkdHeEE3RTFuQjM4SSsxMUtNMzBQWXZsMUZoK3p5YXNtejhVQkdyYkl0RmZ6OUFSbU1SdmM4TFRBN1BwZjFHUGIzR29yWFc0ekJlMEIwM2FtbkZXN2swdWZpZXdTSys1Vkd5bG9wK0E0Q014Szd2K0hoRTlyQm0xVTJpam1ndDdZL1ZEMWk2UWUrNzRxTW50azBmTE9JWTIxT2kzd0lnNDdCd2ZMeW8xcDFYcU50WVBXQzhvSWNWdGRGQUs0L2swc1RDYktlSWI3Qi9KbE5FdndkQVJtSGhITExIOU9DS2U2bERyYVV1b3k0eFhzekRDZG9lOG9ZTGkyblNrckZPRVgvTkl2NmY2RGNCeUJnc21vdjJrUEpiWjFNbmk5WmFsOE9HRzdYOU9tLzhwR2l3Uzl3cStrMEFNZ1lMUnJkSDVEdjFESFVZdFNsTERyb3pqYUNkcm5QTmUzbE9BZi9wVWFSSFJiOExnT3Q1WldrQ0w2TFZIeTJpZHIwbU1Ydk12S2hIRW5SQmVLNVR4T2RGdncyQTYzblpwZU1GdFBXcllvcm8xU2tSSjY5VHIyZUIxdDkyMEpHYk5mUkkxVVJ1eEI1WnloUDlQZ0N1eGtKWnlJdG45K1ZTTTJEN0RodU5kQ29XcHJPeGRqb1RpOUFieHZaQnIvUmdRVnNSYi9wc2lkTVYvbGowK3dDNEdvdGtDUzhlLzYvbEZOYXJxSTFGYSsyUXNjTU0xNzREeGtidWxVNG41dHhkTTV3aW5pZjZqUUJjaXdWU3pnc25xRmFhQVZ0clkwSEdMKzhaOC9MMkx4N3c4ZGkrQVpjNm5hRGpBVGQrVitJVThKdWkzd2pBdFp3Q0RtbVYvZE1ycVZ0ZlB5RGU1SFhwYTh3ckhlRnNxSml0a0Jmc2VJZ1hzSmFqU0hlTGZpY0FWM0s4d0ZwRnlnN29tK21VMFdidXRCR2gwN0ZJU3NDdkc2L1lMbmIxc0lPMlFsNTdRWGE2d2o3Ujd3VGdTazRCdDdKb3JjVURQcWh2VFFSc1h6em9JOFllODFMSGx4eHlPakczUmF0cDZvc1RlQUdmRmYxT0FLN2tGSENMOWxMS2V2Uk5qZ0hIZDh3SVVFaXI3RithTVZzUjV3Zm44QUpXY3dxa01hTGZDc0IxV0J5cmVBSDdmeStqZ09ZekZ3KzRXOTlBSjQxd3lwSURQbW1FekV1ZHZKSEUzSEMrZ0Jjd2VaU3NYTkZ2QmVBNkxJNGlYakM3cjVmU1ByV2NBcXJQWEtlMmJrREE5Z1cxS21wbDRiYmFRazZKV1JzOFp2LzFjcHBZbU0yTGVMdm90d0p3SFJhR3pBdDQ1N1VTTTJCcjdWckRrQUdIdFJyeldsc2JNbWFIeXp5emJoSXY0Tk9pM3dyQWRWZ1l1YnlBdDExYVNzMXFHZm43RnRicTZCMGp4T1ljY0lnRkhOQjg1cEpEVGpmbTV3TXplUUgvS1BxdEFGeUhoZkU0TCtBdDN4ZWJBVnNMcWpWMDNBZ21kc0tNT1RYb29GcHRYdXVBNnV2ZENHTmVmblFCTCtDL3ZJbzBSdlI3QWJpS1Y1Wm04UUorK2R0Q2FvcXVvaWExZHdHMU1pVmcrK0pCaDFqazhZQ1RONUtZNjg3bDh3SW1qeXc5TFBxOUFGeUZCVHlORjh1YUx3cG9iM1JsWXY2b2o0N3ByYjFqd1ZwTGpqaWsxWnJYMnQrM2tjUWNEM2pyTjhYY2dOa1dpbjR2QUZkaEFVL214VkwvZVQ2OUdsMlJDTGc1V3Q0ZnNIMTlNUWUxR2pQZzVJMGs1bDNYbGpzRnZGTDBld0c0aWtlUnh2RmlxVGozSE8xaEFWdnpSeXZvYmIyRmpwcmpoOXlpVmxGVGRCVTFxYjFMSytha2tKdHZsamtGdkY3MGV3RzRpbGVSeHZJRGZwWjJSMHNUQWJlb05XYkE5bGxCSDlVRFpyeld4VFpEVGpQbTVLdDhYMUUyTCtDZG90OExScGUvMmFzVHFLak8rMi9nSituMnZsMU9aaUFTWkVDTTRvSXJhalR1RzZBc013dzdEQWdxSXJMS3ZqTU1xK0JlY2JjeDFpWHRpZS9iTk9uYnQyblRKVTIzcEsxL2sxWVQweVJWWTJOczRzTE12UmY2NzViZi8zY2Y1ZzUzWnA1N0dYVGdjdXI5bmZNOWlTSUQ5M2wrbi9zZDh4T28xNFRRQUc5N1l6MEJMR1IvWHhFVnNKRG4vdFlGblFpZGo0RFlFOHhTa0NlbitkRUFkeXA5WHVxb002WUdVU3ltQVM3NVF5eTBzUm1PSE9USzROdjl1eEhyYmlyZ00vMGRqcmJ1c0VNZUNqT3RsUVhFaytpQTl5dDlYdXFvTTZZR1VTVFRBRmRkaTRkVzF1VEkwYjVxQkx6TEpZT2dUL1ZiU0ZPTEVjdGhIcXFWcDIwY3J3SldSNTJoQmxGVXUwSUppdE9DdVRjTld0aDBlMHh3dksrZUFuZ3dKL0RyUEdEWDBEQjcwc29TRGJ4WDZmTlNSNTB4TllqaWxDdVU2WnNEd0lKd3hUbloxd3pQOWUrRWI1RzRBejdFVlVJYm0rRVVPY3hEdGJJRTRCYWx6MHNkZGNiVUlJcUxybENlYmd5QlppYk5FUjd3NmY1MkF0ZzFBdWg5WEJHMFlsTUxrY1BzU1NzSEdYMW9nT3VWUGk5MTFCa3pvOU5ydm9Jby91a0tKZXA0R0ppWlZCSUNtRW1uNGhXbmk4dUJGb1RlZ25oYlJKQmRNWHZTeXExM00yaDQrUlFwZldicXFETm1SbWZRUk5DZ1pMNnlFcG9RcjVBMk5ndk85bmZET1JKM3ZQemZ0eUJPdnFtRnREZ3kvRmF1djVFc0JkaWs5Sm1wbzg2WUdRVFJUWU5TZHQwQWpVd0tTUk9taTgxRndGMEVzVGdDNkpOOUxhU3BTVnVMRUx0Q2J2R2dsWG5BMi8rZ2x3SzhUdWt6VTBlZE1UTUk0cElya3REY0FHaXdKVHNBODluREZjRVpCTXpuckZNR0lCL2tLc0dNVFMwZ0hnNW1XaXZuL2lLU0NsaW4xOHhTK3N6VVVXZE1ER0tZVGtNUzNqT2JBQmFuaDZ1QzAzMWREc1RpOEpCM3NublkxS2trWm5zOHcweHY1ZlFYbDBzQjlsWDYzTlJSWjB3TWdtaW1JY24rMVdxb3N5V1IxTnR6Z2pNVHdLNFJFRnNZRTJucUprYzh4eXh1WlFGeTdJa0ZOTUNzMG1lbWpqcGpZclFSMmtjUXhQdXVTQ2FaL0tENlhnTGlUWFNrd1pZQzMrenJKRG5kdDBPVUFjVEhFVGZmMGp4Z2NUekJMQVY1UmZ0MEd1QS9LbjF1NnFnekppYlFvQW1udGUvcS9UT2gxcFlnU2lLME10a093SzdoSWU5bGl3bGdjZVF3ZXdKNWJ2RUVHdUFYbEQ0M2RkUVpFOE5qb0FIZWZHRXQxRmdUb01ZMm1GMXNJVHpiMXdHblNOd1JXNWdOMk5SSlVHK1BaNWdIVzlrVnN0bWFCaE1TZkdtQU81UStOM1hVVVh5d2ZVTVF3NzlkZ2N3cUNvUXFhenhVaThKalBzald3a211Z3lBV2h3ZDluRE9UbHE1ekpNbGp6SzZRQmN6RmI4ZlE4UEpKVi9yczFGRkg4VUVJeDJsQUVsNWNoSUNOOXNUYk1TZkNNMXdiQWV3YUh2RXV0Z2dCSjlpVDZERm1kOGdwRHNocEx5MmpBdFlaTk5PVlBqdDExRkYwc0gwbkk0YS91K0lJMmVBSHBaL3FvZElhaHpFNllyRmxVL0VLYWJTbGs1YXVzUTFFRHJPbmtOZnNuVWtEYlBPUDBUeXE5UG1wbzQ2aWd4RE8wdG90K3V3OHFFQzg0dkNZZHpNbHBJRUgwbzVvMngxNEQ3SzE5cFllQ0lFc2dabld5bEtRWitUcGFJQi9xUFRacWFPT29xUFRheGNoaE05Y2NVeEtId2RGTjZPaHZOZEFVdEViUjhMalBNYVpSWUNkMDhiazRMOHgyaE12aVpuZXlrblVWaTY5cHFmaDVkT3M5UG1wbzQ1aTR4K2plUlFSdkU3REVmUHQrVkRXcTdmSDRNZ09acHNrM21OY013SEx0M1FsQXE1MFFIYkdURy9sUkxkV0ZpQ252TGlVQ2xobjBDNVQrZ3pWVVVleFFRQjVOQmpUY3Z5aDVIWU1sQ0plSVR6a2Ftc2lJclhBQ2E2VjVCc2tnNEM3bUlLQnByWU9wTklSTVdaS0s5dmNXMWtNZWJGbENnMXdiNkJCODNtbHoxQWRkUlFaQktBYlFPQU9PT21WeGJDOU45YVJVbnQyTTlzZGVGMXpIR0ZYSWZCeWJHaytCTEliWnM5YVdReTU4aE1qQkNmNTBnQ2ZWL29NMVZGSHNVRUFMOUR3enErZjZJUlhTTDNWaEVoYlNFNDRaUUJ3TjFORVdub2dCaEluekI2MnNpdmt0Qjh0bytFRm5VR2JwZlFacXFPT0lvTUE4bWdvZ2hOOUllZmRjRGU4cFlqd0lGdm5BT3dldm4wVDdFMnRKeEZqOXJ5VjNTRXZNb2ZRQVA5M2dFSHptTkxucUk0Nm96NDZnMllPQXVpbkFZNStMb3phdnAzTU5obThMYVI5QjdHTG94OUdLN3RETHY0d0JvTGlmV2lBWDFUNkhOVlJaOVJIcDljOGhzdi9IZzN2Z3NaSlVITFBIVyt0TlEyT1ljTks0VDNHTlNPOEJDcDhNV1JQV3JsU2hKbUhISE4yUGcwdjZBemFWS1hQVWgxMVJuVzBFZHBIY1BtL1N3TXhPY01QOHE1RnVnSGtvZld3ZGJMdDI4bmtVL0hLWWFhMXNpdmtpbnR4TUcyelB3MXc3L2dZelplVVBrOTExQm5Wd2RacW91RU5qTk5DeWsrWFVORjFNWVd5ZUk5d1RZalA2QkZnK1ZaMmg1ejY0NlhVOXNYMEtIMlc2cWd6cXFQVGF3MjQrUCttZ1ZoOWFBWVZXcU0xVXhZdm54YmI1bUhocFdPbVE1NVROb0dHOXpPZFhqTkQ2Zk5VUjUxUkczN2hjZkZaR3Q3WnBVRlFmRHZHRFZhRk5ZRzBxeHplZld3RmdmY2dnR210ekVQTy9NMEtxZlo5UmNtekhLL1hmTmwrbnVtWU1rd241bG5NQzVpZllWN0h2RW5KNyt4ZlA0ODVqS25DSkFYcU5iUHg4ejZuOUk2b00wWUhsOE1YRitVREdvYkptWDZ3OVdva0JaTWVjVmJLNHVWeFZ5SnliK0NsTlhKWVZUQVZNRDdQK3RFNHQ0Qll6UmQwQnMwQy9KbTVtSDJZSDJHdVkvNHQ4V0o1a1B6TkRuK25UcTlkcFkzUVBxTDAzcWd6QmdhWDhJdTRGTCtrTFUxUXZBOWtZTXZSRUhVd2ViSjQrVFRac3J5T1YwamFhOHVrRnYzaVNDdzMvNW40WXBpQ243OFpjeHh6QWZPUEVZRHFhVDdFN01KMm5xTDBEcW1qNE9BU25KRmFrdGp6ODZsNEdxd1pRK0x0Wm9wR0RPLzJlN0V3dDJJQ3ZYME5tbmp2bkl2bTh3aDJIbjVtSmVhN21Oc0tZcFVMMy9iZnh5eFRlcGZVR2VYQlMyK1JXb3psZTZaUjhWUlpFK0VJWjViRmU0Q3RnYkpldzRnQk5yNjBVR3FaTHp4SSt5TFlFUHlNZk14TEdOc1l3RG5jdktBemFJT1YzaXQxUm1Hd3FiWktMY0s4Mm9sUWZEdkdEUTZQa3NjcGgvY280dWFSanhUZS9CdnJZSkpwSE8zMy9reW4xNjRlSnRqUDRjS3Z4dS9kaS9uVFNLQ2FtUFE0VE0zMmg3a2x3YkNvTmdSV3RJVkN4SjQ1MUt6RXJ5MnVtd0p6Q2liQTVIUy8rLzJaTEdhcjB2dWx6Z2dPTHEwUkwvbGZ0QVVJM1JZQStSK3RwK0xaeFd5WHhjdW4wWlk1WW5qNUxPMmVLclc0cHoxNTl2RXhtaS9oODhmaXZ6K0Z1ZXNWcUhGNGJsc0NZSWw1Q2tRZm13ZW03NitBYmI5ZEQzVTNrNkNOelNCcDV6SkpPcmdOSkR1NExKSXVMaHU2K3JLaHUyOGp5VTdNcnI1TnNMdHZNN1I5a2dsbEYrTEFkSDRGaEhmTkhpN3FjL2lDK3BMU3U2YU9sd2VYZHhsZWJoL3QwaWRuK0VIT3UrRlVPRzIyM0NIeGRqQjVJNG8zOWRXbFVzdDZOMEN2OFpOdldrMDAvcnRuTWZjZUZPelVqZjZ3ckdNYUdMKzFDTGE4SGdFMWYwMEVNNU1LelV3YVdOaDBraFlTRTdSaWFJZzdaUkR6Z0FYRXUvczN3NTcrSEpKZDFrMVE4UE5vV0dXWkNjRUp2cDc4cnE4R3hHb2VVM3JuMVBIUzRDS0g0cVhlb1YzMnhHUmZ5THE0aWdxbndab3hKTjY5YkRtVTl1cEhERy9CemZVd0pmc0pxVVhkSlBHOGMvQnJlekEzSDZSZFp4VUd3dHFlV1pEK3crVlE4Z0dlaHkyWnBKRkpJV2tpU2ZVWXNkRENVb2gzU2lEZTI3OEY5bUYyM3RrRWRSZFR3SGo0YVppY05tUXIvd1pmWGw5V2V2ZlVlY0RCNXRYaFpWNm5YZktFZUI5SWUyMFpGVTYxTlFtT2NHWlp2RDFzSFpUM3hvMW8reTdaTVZWcVFWL1JSbWdmR1h4T3pkZndXUXZ3N3kvY0w5cnBXOGJENnYwendQVFQ1VkQ2a1I1cWJRbVlSS2dqU1lKNnpFZ2hGbHJZRmJIUXdnTGlia1JzdVpJQjlXK21RUFRlK1JCazlKRjdwak5LNzU4NkR6QUJzWnJIOEJMZmttb1k0L2NXVXRHVTl4cmhJRnN2aS9jSTF3UlZpSHdrOFNiL1pJblVZaktJTlpoL1JtemJNUHp6TWY3dmhnczJDRjlnOCt1ZUJNUHpDeUR2M1VoOEhpTW1IbDllOFZCalRZQWFBdGh6eER6ZyswYmNKNEc0M3gzeGpsdlpCREdmd2gvSHdvek5Pc2xueEhOS1Uzb1AxYm1QUWJ4ZnhBdDhWZXBpMTU4Sm82SXA3ZFhEZnJaU0Z1OHh6Z0wxVnRPSTRzMjd2ZzRtWi9oSkxXVStKaFgvL3hmRFJSdWM2QXNMTFpNaDRmdFBROUZIMFZEUkd3Y1YxamlvSkRHT09HSWVNQTB4MzhJMHhId0xpeEh2c3lOdXU3ckJnYmp1UWdyTXpRK1dldWFQZFFiTlY1WGVSM1dHTWY0eG1rZng0cDZYV3VKVlBUTWs0ZXhraW1YeDhySFlObzBvM3UzM1l1R3Bwa2xTQy9sM3pJZkRRVHNCbTViL1BPUDNGa0xoelNqeWtpb2pNVUM1UGU2UTd3K3hXUWF4dUlYRmlCMHQ3SUxZMGNJaXhFSUw3N1p0aG1ZN1lBSHh0S3p4VW1kUXEvUk9xak9Nd1F2Ykw3WE1UN2VGUU1uZEdDcWNkbHZ1a0hnN21meVJ4WXN4ZkdjQkRMZFphWmxaRkFqUjM1NEhlVmNqM1g1R0tZa3paS2sySGg3aVZFbkVyUktJT3lVUTczUkJMTFN3Z0xqakwxa093SHp5ZnhBTmdYSFVzN2dWRUt2NW90SjdxWTRIb3pOb1M2UVdPcXdxR0lvL2phYWlhYkpsRFlsM0QxczI0bmczWFY0RHdVbSs5NDEyWXNyanNQTHJvWkQ5NXFvaGY5Ym9Jelo1akZob1lRR3h1SVg1a0JabXNJWGZHUVRjY2lVVFZsdG1TcDFOc3RLN3FjNFFnM2oxZUZIL29sM2dqQUlkRk55TW9pNXlyVFVWam5MTnNuZ1BzRFZreVVjU2IvSHRHTkthOTl1MmhoZWVnc0piVWNQNm1RK0N1UHBPUEJSZWlZYU52MXdEU2Y5M01jU2VXZ0RoUGJOaGFlczBtRmMrRVNZazBGOUV3WW0rTUczamVKaFhPaEZXdElkQzdQRUZrUDN5R3FpN2x1VFd3bEtJaFJadXZacnBoTGpzTmFOVUMvOGZwZmRUSFpuUjZUVmhlRWtjYldHbWJQU0hyWCtPcEM1d3BUVVJEbk9Oc25qNXIxZmk4bzUwKzY3cW1URXN0RUc0cUF1YkowUEdHeXNlNk9jT2hiamlUaHprL2pFQ2tsNWFEQkdIWjhQQ3hza3dkWk0vQkJsOTd1dGxJNWV3a21ESStuK3JZQWViNVVBc0FCWVFDeTNNSSs3NkpCc0JteHlBK1N3c0Q2RjlOalBlb1BtQzBudXFEbVVRcno5ZTBGOW9DL0ZrK2pqWWRIa05kWEhMY0VsNzJGcFp2SHd6OHcwOTBuaFRmclpFcWpuY0d5ekpGMWJzRDRXY0sydTk5dk1GeEtWM1k2SHdvMmd3dmJvY0lvL1BnWGxWRTJGaTh1TmVoenBVVnJhRk9qV3hFK0wrUWNSNzJCd3d2NVB1MU1McHAxZFFQMU9uMXk1VGVsZlZjWmxBdmVaLzRlVzhUcnV3aVNtUFEvYWJxeVVXVmc5NzJYSlp2SHlhYkJ0R0hHL2V0VWlZbk9FMzVGTHp6N1AyMkN6eTc3MzU4NHR1UlVQTzIrRVFmWFllekt0K2tyd2dSaHNzTFhWL1RuSUFGaVBtVzFoQXpMZXc1ZjBNUkd4eUlLNytiYUxVWjFZcXZhL3F1QXhleWtuYVpRVVpmU0QxNTBzbGw3YUxLUndTYjV0dHk0amo1Uk4rWXJic0lrOUk4SUhWaDJiQXRnL1hlUlh0MWordEE4UDVoUkJXR1V6T1MybXc0a3hLODRQMjNrenBGdTRiYk9IMkd4dnNMV3h5dEhEb3BnRGE1NTVUZWwvVkVZM09vQzJXV29DWTUrZExMbStyTFdkSXZOMU0wYWpnNWJOaTczVDZJc2RwNGVuMkVOanlYcmgzZnRhOVdDaTRFUVdiM3dxSDhDT3pJU1RyQ2UraHc5ODFaSU1maEc0TmdEbkZFMGllcXBrRVN5eFRZV25yTkZqWkZRcXJkODhrV1VNeXk1RjFCK2RDOUpGNUpQcHZQQVhaTDYrQmhvOVNZQWVYUlNLSjJON0NuYmV5Q09BQnhBT0FWelNHMG43UGkwcnZyRHIyUWJ6TDhFTCtUbHVtNVFoQ2Fva2JiWmx3akxQSTR0M0xsa05wcjM3VUFLZSt1dFR0R1dZVTZDRHpkeXU5Qi9mREtNajVRd1NzZXlZTUpwbjg3aHRxU0tZZkxLaC9FdFllbmdWeHp6OEZHMzY1RXZLdnJJZksyMGFvdFNWQW5TMFJrd1QxbUFaYk1ra2prd0pOSktsZ3hqUXphV0JoMDBsYVNFelF4bWFRdEhPWkpCM2NCdWpFT0JEYkFZc1I4eTNNSSs2NnZWRUVlS0NGRFQwTGFiOS9yOUo3cXc2T3pxQVpoNWZ4RjlxQ2hWVUhRL0h0R09vaTExaFQ0Q2hubHNYYnc5WkNXVy9jcU9FVll2emVRcGlScjRPWkNEZnFYQmdVMzRueHl1Y1dmUndOdVpjakllWGxwZmpaZ2NQQ09pSEJGK1pXQmtQRWlkbVErcE9sVUlndmdRbzhtMG9ySHlOVWtjUkROYWJHbWtBQTF4TEF6b2g1d0dMRVBHQm54Q1pvZFVITUF4WWpsbXZocmp2WkRzQkNDNXZPckpSNExzMVhsTjdmaDNyOFl6U1A0a1c4VEx1Y3FadjlZZHVOZGRSRnJzQWxPOFEyeU9JOXpEWGlZaWFNT3Q0UkNiYnV0Zy9XUTg1YkViRDZ3RXdJTXZwNDFyQlpUOENLL2FHUSt1cFNLUHByTkpUaVo1WDI2dkdseHNjQTVaZ0txd1JpbXp0aWNRdWJDVnhFeTVpZ2hjbEF0SHd5Q1Y0eFluRUxkNGhibUtPMzhJN2J6b0ROMk1JNUwwWlNuMCtuMXdRcnZjTVA5ZUFsMU5MYndnYzIvSDRsZFpuNXhmczZXeTJMOXlqWERMWFdWT1hoZVNFbHQyTWc5NTFJMlBqN3RUQ3ZhcUlIVGVzRGl6dW5RUHF2bGtQSlBmZlBjMFhNdDdBcjRqcHJNalRiRUJ5ekJYYXhSYkNmTFlORFhBMGN3NWZpTTMydGNMcXZDODcwZDhGWmttNlM1L3AzT25JTy83eVBLM1JxWVFFeHJZVzdSUzNjK1VrV05MMlQ1b1M0NEVjeDlPZlZhOEtVM3VHSGRuUjY3U0s4aEgvUUxzYnd3bE9TQzcyYktaWEZ5OGRzeTFJY25qZFMvR2tNYkxrVUNkbHZySUdaQllHeWNDZW1QQTdoSjJaRDN2VjFRMzZ1Z0xnYzhUWllUZEJoeThWekxZR0RiQTJlbndWT2NoMk9QTnZYQWFjdzMrenJKRG5kdDRNQWRrVjh6Z1h4UWE3QzBjSUNZcUdGYVlpRkZtNjdtUWtONzZRNkFkNytta0hxdVZjcXZjY1A1UVRFYXI2S2gvOCs3VktXN0pnaXVYaWR6TFloOFhZd2VZckQ4d3JlMndONE4vMVhPTXdxRHBMR0c2ZUY1WHVtd2JZYlE4TXQ3elZDRTc3Y3VwaENPRUN3dHNBSnJoV2U0ZHFjY3BKcnB5RHVkRVBNQXhZakZ2RHlmOTdCYm9JV0JDd2dwclV3UWV6U3dwWnJKZ0s0VWRUQzViODJTajMvYXFWMythRWNQUGdqdEF1Wm5qc2VDbTlGVVpldnliWmhTTHk3bWUyS3cvTkdTdTdHUXU3YmtaRHpWZ1FzYnBzaWlYZEs5aE5nK3ZWeTJjK3FzYVpBTzdQVkFWWWNIcThRZDhUT2dKK1ZhZUZUL2Uxd3ZLOEJEbkRsc0l2ZGhtQXp3Y0ttSStEMFliVndON3NSR3E2a0VzRGlGbFlCajZIUjZiWGhlUENmdVY3R2hIZ2Z5THE0aXJxRTFkWWtPTXFaWmZIeUMxcldhMUFjbnplUzkvNDZndGZ3L0VKSnZMTzNCMEhlZFhyclZtRFR0dG0yUUE5YkozdG1KMFNJditFQjRsTjJ4TS8ydGNOaHJoYXhGb0NGeVlSR0pnV2FTRktobVVrajRRRVBJS2EzY0llNGhia0J3SzBmWjBMOTJ5a093RUlMYi8rNVFlb2NsaXE5encvVmpJL1ZmQmtQL1NydE10YWRua3RkUmg1bEQxc3J1NGlIdVVhb3RDWW9EczhiS2J3WlRmQnV2aGdPVXpmNlV4ZDNWa2tnRk55TW9zQ05oMjZtQ0k1eHpiTG5KWTNZR2ZBelhEdkpRWHdSN0dHM1F3ZVRpemd6b002V1JGS1BhYkFsRThBRGlMRTFYUkMzMkJHTFcxaEFMRzdoSFV3MjFMK2I2Z1JZYU9IOEgwYlRBZXMxczVUZTZZZHE4TkIzMFM1aVR0a0VLTGtiUTEzb0xxWlFkZ0dQY1Jhb3Q2WXJEczhydVJjTHVaY2pDZUNZcy9PcFN6c3BZeHhzdlJycDlyMnR0aHc0T2d5NFVvajUvei9BVnVHNTU0UFpsZ25WK0dLc3NzYmpmK09oeHBZQXRTU0pDRGpSQVZoQTNPU0NlTENGMHgwdExDQjJiV0h6dFhTb1E3eDhYRnQ0MDNmQ3BRRDdLNzNURDgzb0RKbzVlT2ovZEwyRTRFUmZ5TG15bHJyUVRiWU5ReTRmdjdpS3cvTlNDbTVFRWJ4ODVwWUZVNWMyNFFkUE8zMVBhYThlOWpDbDl3Vlh5QUcyQmhzd0h4cXRHVkRlRzRjeFlKdkhRYVdWanhFQjgwSEFpRmxBekFPbXQzQ0taQXNMaUYxYnVQbmpkS2k5bkFLMUZNQjhrcDVaUWp1TGYvakhhQjVWZXE4Zml0RkdhQi9CQTMrTnRwQlI1OEtveTF6Ukd3OUh1Q2JaeGR2RmJGY2NuVGVUKy9aQSsyYS9zUWFDakQ1dVp6V2pRRWRhV3Z3OTNVemhzTUVlWWh0Z0oxTU16YlpzY3M0REw0S0JsMEVaeVFEZ0Nxc1lzYjJGSFlnVEhZakZMZHc0ekJadS9vVEhtMnhQQ3JXRkk3cm0wQUMvcC9SZVB6U0RoNTFPdzhzdlpQR2RHT295NzJIS1pKZXdoNjBsaTZZME9tK2w2RmEwbzMzanppK2t0bS9zK2ZsTzMxTnRUZklJN0ZHdUdmYXdaZEJpMjR3UUV5Vi9oMEhFQmtjTFY3aTBNRUZzYitGYWx4WVdFRGZaRVEvVndrMGZwMEgxNVNTb3dRaUFhUzA4djJRUzdUeGVVbnF2SDRyUnhXcitOeDcyZGJjTGlOTkM1bTlYVUJlcDJiWnhpSVUwNHpJbEtZN09tOW4yd1hvSDREVUhaMUVCYjNrdjNPbDdXbTFiSk0vb0dHZEJ0T1ZndG1VTjYwWEhJeTRUSTNacVlhTkxDeWM0V2xoQTdFa0x0ekltcUx1V0RGV1hFd25nYWdkZzl4YXV1NVFNRXhNZnA1MUhoOUs3L1ZDTXpxQ3RvaTNqMHU2cDFBVXE3elhDRWE1SkZuQ1RiWVBpNEx5ZExaY2lIWUNYdEU5MU82OUo2ZVBjdnFmR21nS0gySHJIdVJ4aUd4QnRLVmp3QmNpZjQvMzhIb010UElCNHNJWGpuRnZZS203aFJJOWIySHdQVy9mZFJLaThsRUFBQzRpbFduakwvNCtrdnN4d3IyS1YzdTMvK0FuVWF6UjQyTGRkRHo4NHlSZnlya1pTRjJnblV5eUx0NVBKVnh5YnQxUDhhWXdETDU5RnpTRnVDenVqUUNjQlRvOVk0eEJibk5kK24wSEU5aFoySURZNkVBKzNoZm5VM1VpQ2lzdnhVSEVwbmdBV0VNdTFjTlRlZVRUQS93clFhM3lVM3UvLytNR0R0dERlbmhFbloxTVhwOWFhS290M0gxdEJGa3RwY041TzRVZFJRd1BlaG9EdmpkN3ZKRzVoZ3RqZXdwWDMwY0oxSHlkRHhUdnhVSDdKU01JREZoREx0WERGaFFRSTNSUkFBL3lHMHJ2OUh6ODZnK1pyZU5DOXJvYy9LV01jRk42S29pN04xOWxxU2J5SHVBWnNndmpSeHZVLzdOVUhkSlBudVFmdzA1N2JudDU3MjNOa1F3aEczbmhoakJmR0E3Q05zYlczWlJ0c3dGUFd0RHpreVE0a0pXa1dXVTJhMGF5Yk5tbWExU1Fsb1UyYnBFMmFCQUo0Z0ExbTJSZ0l5d3VuOTl5ZTI5dm52dStuRVV0NlpjdERlcEdTNTV6L09RbVNQMzNmOHoyLzkvRktOT2Q0ZG9BejkwUTdEVzFzZFJEb0x3bThDUGdieE81czRYYUhMWXpUZXJrUUd2dWswTkFqaFVZTFhqTmcyYlJidVBMdEFvZ3REeUxoeGRsUGU3Nzl2bENUVzBqTjU3K1VUQnlZbmVQbEx2SCs0dXZkMERHMmdUbzBUMFY5aW1zSE9PZUJlS2UraFNrWGdLcVg0OVg3d29oZGIyR1piUXUzVGRyQzdjT0ZZQnFVZ2ZHNEJJdzlFcWkzQkFOdWRBQk0yc0tOWDhvZzc2NEVDSllHdU1LTDg5OG9hMm5QdU45V2tJVDFBOVRnSWRMMk5WeDEzaUw0cEg5MFlxdEx3SGVNVjFOSDVzbGdtSk1CODU5UElRN3VoZy9XZ25hQWZ3dHNZYWx0QzJQRXJTTnlhTG9rQldPL0NBemRJcWhqSW1ZQVd4RlB1NFY3Q2tINWZCWkVsZDArRmR6SnVjb1dCNFRSbm5XL0xMWWtvSmpVZE80TFNjUkIyVDFlNlJMdmZUY2JxQVB6ZEdwNjdBRVh2NytHT0xUY1o1S1p6M1VYYUNDVzJCQmp3RTNYRWN3TFlqQ2NGSUt1U3dDNmJnSG9VUXpkUWd0aXNRM3hkRnU0OUxVY1dLRU5kUmZ1NUh3ZUxHSDlHKzE1OTd0Q2pmM1lzZG5oeFF0QmQ1RkgzTDZQZmIyTmlQZXhpVzFvYUtUVWdYazBJeUk3dkRoVlIvT1pmam4yTU5rVVp2dU91cDhMeHV0Q3J5RTJYa1V3THlDc3B3V2dPYzRIZFJjUE5GMThKdHBKZ00ySTNkdkNHMytiRFVtR01QZXdTbDErdHBQMnZQdFZzY1dzV0ZLanMvZkh6WGo3YmgzYlNCK1loMU9IWURnQ3hrbmJ0dFNwaHlHeVFDajlNUHViNzNVaHlLZTVZUGhLd0J3RWM3MFg0N0FJREZjUXdpR0VjZ0FoUGNNRFZTOEhhdER2MUtEZlUzVnltYWc3ZVF4ZzlXVEFEbHU0enNVV05ud3BBc2t6cTJCWk5kc3R1TEhsUVZEeDVub1FQSlRxNmp2L2c3WndITzI1OTV0Q0RiMmIxT2pLN2p6aTBEd3kwVUhFKzlPYld1cTR2Qkg5SlFFUnNQVFZWY1NCWGRrUlNmdyt4bHpieHdVTlFvZng2UkJDZkcyblhFU2ZEU0owNTNuTWQ5V251R2FrM1FYazYxcGlCc3hoQU5mYUFIK3poUjBCVDk3Q2RWMWlLSGw5TGF6ZUZRdmh5b1Z1d1EyVkJ3TDMvbVJvUGxvSTdTZUtvZjE0TVdTMFJMdjYvdTlwejcxZjFHSWg2L3VvbVVPT0RVNXNEQ1VPNy9ieFRVUzhqMHkwUThPb21Eb3ViMFE3d0NPQ3FUcFdBREdWUWNTQkZmNVg2cFRZUEpFYUcrS3B0N0RlZ2xqN0pSOEtYOG1DMWJ0aklYTGpJcmZRV3BQUkZnMjZqNFVJYlpFNUNIQUhTc05uVW9nc2NYbXRYTnJ6Ny9QRmxnU3NJelZYOGtZYWNYanZuMmdpQW00ZjIwQWRscmVpN3VlNlJNTi9Qb1U0ck9GRkM2SG93R29xaUoyM3NCbXc2a3N1RkwyNUd2SWZXZ0ZKOVdITUJwMEpXcHcwVXlSVXZwY1ByY2VWVE5wUXpJak5nSEdLbmwvdDZ1Ly9RSHYrZmI1UUV4OXpiQ3gra2RxTFBLZkJiUjVURVBIZWZWTlBIWlUzb3pyT2NRbW02bWcreE5Vc0lTTXVYZ2pDbDFaQzlUSHZiK0hxSXdWUWNtQXRDSjVMaGJYNzRpQmV6WVlRMmN6QjRvUkkwY1p0ajJMZ052Y29vTzJrRXJZUGxUZ0J0bTdoRHZUZks5UWh4R3V4eGF3VTJnWjh0Z0lLQXI2SG1qamsyTlNWMnlLSWczdm5lSzBUM3NlLzNnbW1VUmwxVk42SzhZWndXalRLZDdNZ1pJcHR0c0lZQXBKWDBoanM4NG0xL0lzOEtEbTRCc1F2cDBIKzR5c2djMDgwSkRXRk1RZEt5Q3kycTJNaU55eUMvUHRXZ1BvdlBERDF5S0QxbEFKMlhDbUJ2Uk5sY09mRUptanROVzloTStBaUcrQ3RLSnRlelhWMTNhZHBPL0RaWWt0WXFhU21TdDlLSXc3dkl4TWRUb0QzanRkUVIrWE42QzhKM01KVThJdkVhVUZFYkxnTjByWkZNdDlWdkpVQkcvK1VEZVdmNXpsbDB5ZTVVUHorYXZTZFRCQyttQXE4WHlaRDNpTUprTGszR2xKYXdpRmV3NGFJa29WekJrcEttR0lCcEhkRVFkRXJxOEhZS1lGR0RQZTBBclpmSzRFN0prcGhEd29EK090TjBIR215R2tMZDFnUm8vOWVYaDFNK28xeHRJWC9nN1lGbnl6VXZBNm5oa29EUUQzQWRScmN0ckVpSjd5UFRMUkR3NmlZT2lwdlJudU81L1pHWEhOM25FZFFlVHFSSmJkQjVvNFlVUHdxRTdTSEJXRHNrVUREQ1FtMERLQ05PMXdDdXljMk1ya0RaVExnYllNbFRvQW5iMkhGVTVtdWZyT1l0Z1dmTE5TNFB6bzJjN2tobURpNGQ5NnNkUUs4YmF5VU9paHZwN2FQNnpiZzFQWUk2aGpkU1hqUlFrZ3hoVVBCbzRsUWRpQWI5SjBDTUhTTG9LNWJEQTM5VW1pN1hBamJ4NHRneDgwUzJIVnpBeE1yNERzc2dIRjJYTnJBQUc2MUFTNnlBOXo4cFFKQzVZR2tlM2lCdGdXZnE4VmkxZzlSNC83dTJNeTh4NWNUQi9laGlUWTd2QTlNbUtoajhuYU1JeUtvN25JUHIrQ0ZWT293U1FtUkJVSmNkUkNrNzRnQy9qTXBzUEg5YkZBZjQ0RzJTd0E2RkgyM0FPcjZSTkEwS0lYMjRVTFlodUJ1djFuTUJBUGVhVUg4elJZdXRXM2huVmUrQVR4NUMzZFlFRy9yTFlIMDVpalNmVjJnN2NIbkNqVXRrL1NDaS8rYzVUUzRUYU15cCszYlByYUJPaWh2eDNCWjRCYmVpa1ByWVduWklpS2cyS29nQnBISHNVb0RJR3JUSWtoc0NJWE12ZEhBZXpZWmxPOWtRZFhoZkZCMWNrSGR5UU4xRnc0Zk5DaTZYZ0UwREVpZzVib2Myc2NMb1FObDY3aVNBV3hGdkFQRkdmQkdPOEF0eHd1ZEFFL2V3ckpmWkJEdmx5MW0zVTdiaEU4VmFsb1Q2YVZyaDNoT2c3dGpmTFBEOW0yaWpvbEdOR2Q1YmdITzNiK2NPS1RMOWNGUWRTd2ZObjJTQy96blVpQjlWeFRFVkM2ZUZlaFFSU0JFbHkrR0JFTUlyTnErRk5iZUV3ZWNKNU5BOHB0VlVISndEVlFjWHU5MFh6VW9xazRPQTdnVzRkV2RSTnQyQUIzUTE2VFFNaWFIdGpFRnRJMHJFR0FGQTdpREFIaUhCYkFWOFV3QnF3NXdYRDFUSG0wVFBsV29ZUzg1Tm5HWmVnbHhjUGZkMU5rQjNqcFdTaDBUamFpT2M5emF2aEVsQzUwR05FUWVDQlZkNjZCK3hMekpOZWQ0VU51SHJ0ZFZBSlZmNXNPR1A2NEYyZXZwSUg0NWpjRTlPWUlYVWtIeTZpb28vRjBtbEg2WURaVkg4dDA2U1BDMThUM1g5cUdOZTVvTHVnRStHQzRKb1A0YVFqc3FBZE9vRkpySGNHUU00RllMWWd6WXZJV1Z0aTJNQVpzUmw5aHRZUXo0RGdRWUk5NStxY1FHdU5VR3VNZ0dHTWQwV080S2NDbHRFejVWcUdGOWprM011anVHT0xqN0oxcHNlQitlYUtNT2lVYnFyZ25kUXNQN1pUSnhRTE1maUp2eTJucUVXamZFQisxNUhvT3Q5aVNYZ2FmcTVkaUMveC8vdTdxZkM1b3pQTkNjNVRFSGdSYkIxQTN5UVkvK0hoOE9kVmVGWUx3aEpQNVd3NmdZR3BtWUFadHNnR1Uyd0cwMndJVUV3TVYyZ0hkUEFyeDFvSWdCVE5yQ1ZzRGJla3NnUkJaSTZwR0J0Z21mcVNVUzFvOVF3LzdwMkVUQnIxT0lML3lKcjNmWkFPOGVyNlNPaVVhMEF6eTNBQ2ZXaHpvTlo2Z2lFR3JQRmxCL0J2UDdGTmtBTTF1WUFTeGxBTGZZQVZZd2dEc3NnSzJJZDFpMk1BWThlUXRqd0czOVNwZUFyVnQ0SzBwazhXMGt3STIwWGZoTUJZdFp5YVF0c2VIak5VNHZ2R1ZNYWNPTElUZWlVNXYyRU5LSTZnUm5XcnhiUGx0SDNDNFplNktvMy85a3dBMlRBWSthQVp1M3NOeThoUzJBelZ0WWFiZUZYUUhlUGI0Um1vOHJvTGxIOFIxZ1R4ZHFWakVKc09xTTg1YllQcmJKQnZobk40M1VCNUJHNnE0SzNkcStrbGRYa1FZVGxBY3pxVCtEUFdJTVdHd0RiTElCbHBrQmo3a0diRVpjQWpzdGlERmduTzFYU3NEVUk3Y0QzR29EWEdRSE9GUWVTT3BUSFcwWFBsT29XUjJPRFF3clhBRDFJODR2ZTg5NHRRM3d0ckV5NnNOSEk1cXpQTGNBcjN0NHVkTmc0bzJzT3NXaC9neU9XN2pSc29VZEFiZFlBTGZaQUJmYUFFL2V3bzZBMjA0WDJnRW1iV0VNdU9tUWpIaklvV3lrN2NKbkNqWHJDY2NHeG12WXhKZTk3NmFPd2Z2NDF6dVprNXYyOEhrOTZGQ3I2UzV3QzNEbW5taW53WXl0Q29MYVUxejZ6K0VBMkx5RkplWXR6QUNXMmdBelc1Z0JyR0FBZHhBQTc3QUF4dGt4akxldmJGckFlQXZYSE9DU0FZc0QxdEoyNFRPRkd2YXVZd05YYm84Z3Z1eDdiOVl6Z08rOWFhUStlRFNpRytLN2hSY250UzNDYVRDVFRXRlEzVlVBeG1FaDlXZHhCaXcyQXg0MUEyNG1BRFp2WWFWdEM1TUF0L1FyN0FCYkVaTUF5NS9LSUFKbWkxa0xhYnZ3bVVJTk8rVFl3RFgzeFJKZjlvTVRKZ2J3cnZGeTZvTkhJNnBlenB3QTQzL0RuMmtIK05TZnhSNnhQV0NURGJETURIak1OV0F6NGhMWWlkSStwSVFtQmk4WmNLc05jQkVET0tNMW1nVDRQRzBUUGxXb1lZT09UVnovWkFMeFJUODgwY1lBTnFHWFNudm92QjNEVndLMzhUS0EyNTBCcDdTRU01L1ZkT010VFArWkptOWhETGlSQUxqRkFyak5CcmlRQ0xqamloSWFFZHdtU3pCZ0sySVM0TWJEY2doVkxDQUJmcDYyQ1o4cTFMQnh4eVlLZnBWTWZOR1BUblF3b1Qxd05GSjdpanNqd0psN25MZEx2SVp0KzF4OW1rdjltU1lETm05aGlYa0xNNENsQk1BS0JuQ0hCYkFWY2V0RkJUVDBTS2NFYkVYY1prRXNmU0tkaEJkSFNkdUVUeFdwaWRLM1ZoRmY5R01UVytIZW0wYnFBK2Z0MUYyZDJmYkZ5WHM0d2Ftdlljb0ZVSFUwMy9ZZDNTQ2YrclBaQXhhYkFZK2FBWnUzc0J4YU1XSUM0UFliaGRCMFdnYjFQUkltR0xBVnNjbUNtQVRZZEVRQjBXVzNrL0NPTGhHei9wMjJDWjhwdHBqMUV4TGd3dmN5WEFMZU0xNU5mZUJ1OWUyTEkza2xqYmhoQ3QvSnRQdWU3c0t0Z25nYXdHTm13TzBJY090MUJUU2RsVUpkdHhpTUZyeFRBYllpdGdMTzNidmMxZmE5ajdZSm42cGdDWXRGYW1UUkIxa3VBVzhkMjBoOTJMd1p3MWN6Mzc0NFd6NWJCeUZTNTk2dXVTZk82YnVhTXp3d2p0QUdMR0lBTjFvQW0yeUFaUXpnMWhFNU5GMlNndkVVNmttM0NPRVYyUUJiRVRmMFNLY0ZMSDhtd3hYZXI5RkNDYUp0d3FkcU5vQk5vM0xxcUx5NmZmczRzd0tNczF3ZjdOVGJpSktGc09WdjY1eStXM09jQS9wTGdsc0tjTk4xQkhOSURJWlRRdEIxQzVqb1VRemR3bGtCTG53K0MwSmtnYTRBdDlEMjRITTFVOEQ3SjVxcGcvSm05QmY1czhhTFUvQmtJbkZZMS80c3p1WGZxRTV3UURmRUIrT3c5d0VicjZIdGVrRUEydE44MEI3bmc3cUxCNW91UGhOZDE4d0FteEhMbVRRZWxVSGV2Z1JYY0hFT0IwbFlQNkR0d2VkcXBvRHZ1V21nanNwYndZQnFlamh6QWx6K2VSNkVGUzF3Nm0rSVBCQ0szMXM5OWQ5M0ZZQzZud3U2QzN3d1hKbmZ6V3djRmpMWHhOZlduT1ZCYlI4SGF0RHYxZUFEcEpQTEJPTTF4d3hZNndEWVlBRnNSVXdDM05ncEJlV0xXUkJiRVRRVjNsRzJoTFdVdGdXZnJKa0MzajFlU1IyV3Q0SUhleTU0cmNtK2Z4bHhjS1BMRjhQbVQ5ZTVmWjJhN2dJRWpjdmNsM2FRRC9xTENOSlhBcWk3S25UT0ZmTm4rRHNZcWZZY2duZ2F3ZXpsTU5keCtSc01ZSTRaY09mc0FkY2ZrNERzMlhTSXExd3lGVnljdjdNbEFUbTBIZmhzSWNBL0pqVldlVENUT05RdFkwcnFzTHdSdzFYQnZPREZxVGlVQjFHYmJ5Y09jTHlhUFNQRW5zN01BWXZzQU5kK3dnWE8vaVJZdW5IUmRIQnhKdGppZ1BXMERmaDhrWm9yZnp1ZE9pSnFHUkdCNmdSblhtSElYa3VIWUNsNWtDTkxiNFBDdHpPcDQzVUxjSmNac0JteEdiRHVpQkFLZjUwRmFhMUxJVVFXNkE1Y25ENjJtSlZBZS9iOW92Qko2TmhnMFc5UzZVT2lGTTA1bmtkdzVENFk3M0tnOGVCbjM3Y01LZzZ2djJVQTEwNEJXSHVFQjRXdlpFTFd6aGlJS0Y3b0xscHJEaTRScy82VDl0ejdUYUdHWG5Sc012ZTVST3FRYU1Sd1dlQXhISUlYVXFZZDdxVmxpNER6WkNLVWY1RjNTd0ZXZC9LaDdHQU84SjVJaGxSVEJJUXFGc3dVN2VTY1dTeGtmWi8yM1B0Tm9ZYjJPRFk1OStGbDFERjVPOFliUXFqcDRYZ0VodmpsTkdiTHVqdms0V2lyWmU2SkJ2bWJHVkI1Sk4vcmdNdi9sZ2Z5MzJaQTNrTUprR3dLWis1blZsaWw1SDluaTFrUzJuUHZONFVhK2lmSEJtZitOSm82S0s5bVJBUzFmWjdCVzNKd0RZUXBaNyt4TUo2a3hqRElmVEFlSkw5WkJhVWY1Y3pMZlczK05CZUtEcXhtRHBmOHgxZEExcDB4a05nUUNwR2xpK2F5WFpuRVZnU0I4UEZVVUgzSWNiV3REOUNlZTc4cDFNeVhIUnVjMGg1T0g1VVhvejdOOVFqZUtyUTk0MVJMaUVNZVZyaGcxcHN0VkJFSXNWVkJzTUlZQ2lzN0lwbHR2V1pmTERFWmQwUkQyclpJdEVuRFlMa3VHS0kyM3c2aDhzQTVJM1Y2SGdRMWMxczBiSGc5R3hxNlpkRFVJd01UeXByZGNhVHYvd050NFovUW5uMi9LTlRNL1k0TlhxWmVRaDJWdDZJZDRNMFAyQzduZjF2Lzh4VXU4Y3JmeUlDeXYrVEF5cTJSRUN5ZFgwemVDajRJVWswUklIbDJGV2dQQzZDK1J3SU5QVkpvN0RFRHhpbDlMWnY0dDJ4SmdKajI3UHRGb1dZMk93MlljZ0YxV042STdnSi9YdkNxKzdsUWU5SitpMWNjV2c4UkplUU5LL3JWU2p2d3hlK3RocFh0RVJEaUE1Q1hsaTZDekozUklIc3BIZFJmOEtDdVc4ekVpUENTQU5jZmxVQW8yczZFYTkxTmUvYjlvbEFqaTBndlNuT0JTeDJZSjZPL09EOTRNZHo2RVJIVWROdi9PK2VwSkNLQXJIMHhZQndXTVgrakcrS0Q2Z1RIOWplbEgrVkE3b1B4RUZzZFJCMHFFM1NneEZZRlFjYXVhQkE4a3dxYi83Z09kRjBDMEhjTHdOQXRSQkZOQzlqVUk0Zmt1akRTOVQrZ1BmdCtVY0ZpVmdycDVXMzZJcHM2TW85dDNxSDV3WXZ4WVl6R1lhSFRad21HRUtlZWhpa1hRTzFaanZOaGNra0FxbDZPM2Q5di9HQXQ4SjlMZ2ZSZFVReWlZQTl1NXhCNUlNUlVMb2FrcGpCWXN5OFdPRThtZ2ZKM1dWRDFSUUdvdTNnb2ZOQ2dhQkZlWGJjWnNMRlBCSTNucGRCOFVUNHQ0THg3RWtpL2U0bjI3UHRGc2NXc0g2Tm0vc3V4d2JMZnJhSU96UlBSRHM0UDNwcmpDTzhOSVhQTnVxdjJnTGQ4dGc1Q0NPQ3lmaG96NWIzaDYyalA4K3kyc2pVVmg5ZUQ4dDBzRUx5WUNua1BKMERtM2hoWTJSRUppUTJoc0V6TmRwa0VmVEFrTllZeDM4M2NFdzA1OXkrRDlUOWZBVUowbmNLM002SHM0eHlvUG1aNUprdFVuUndVTHFnN01WNGVnMWZYaTlDZUZVUFRaU20walNpZ1k3d1FSUW10VnhUVEFwWStrKzdpOEdEOWlQYjgrMFdoWmc0Nk5uZmRvL0hVc2MxM05HZDU4NE8zaHdOMTE0UzI2eG91Qyt3K2w3eTZpaml3eXQ5bnVuMnZkZGVGb0J2aWcvbzBsL205K2JqdmFaL0xrdHJqWE5EMTg4RTRpTGJzRlRFMGo4aWdaVXdPclNodDR3cG9ILzhHc0dsUU5pM2cwdGR5aVAxQXl5T1M5dXo3UmFGbXZ1UFkzT1NXTU9yZzVpdDRVOWFlNUhvRUw0NytrajNndkVjVG5JWTFWQkdJUHN1ZjB6UG8wVUdoSFVDbys3bWc2dVZBVGZjY25xV3JnTm4wNmxOYzBKempNWWRGM1ZVQjFJOGd0S05vMDQ1S3dEUXFoZVl4SE5lQTYwOUtwZ1ZjY1dBOWVRT0xXY20wWjk4dkNqWHpMc2ZtaGhjdEFPT3drRHErdVFadngvbmFZSGpnOFdaMC9BMUh3RmwzeGpnTmExeE5FUE9aSS80NUgwNGpadHlHS3dMbVBuUVgrS0FiNURQUXJjSC9wci9JWjNxQnY0ZS9UN3BXQXhPeDI0RGJiaFF5ZUtjRFhQMkhndThBZTdMWWtnQTVxY0hseDlaUkJ6anJ3UjRXZ2VZTWIxN2c0dUFON3VwQXc1dHg4bmZUZDBVNTlUS3hQcFQ1RE44VDdkNjR5a3dCTjU2WHVnVzQ4cjM4N3dCN3NsQWpGNU1hTEh3bGxmcFF6U1o0Mjh6WDFtWFFuVVBvUnFiWThsZmNCNHlEdjArN1IxTURscGdCajdrRzNEYXNnTG9la1Z1QXk5N0ljUVU0bXZicyswMmhodlk3Tm5qVnJranFReldUR05BbVZQWE9IMXg4Q09ndlRZL05lRU00TGVBRWZiRGRkZXV1QzZuM3kxM0FMUmJBYldNS0crRDYwMkl3ZExzSFdQTFVLaUxnSldMV2oyblB2ZDhVYXVoVGpnME9MMXFJQnUzVzNCWjJHeGNocSsyYlA3ZzQ2dE5jQnFhNzkxRFQvYzNmcnYxWm5OT3dMaTFiNUhRNDFGMjl0UkM3QzdocFNJTHdDaEZja1EzdlZJQno3MXBPQW55WjlzejdWYUdHRnBOT3lRMS9YVU45c0VpcHV5WUU3WGtlQTJFKzRlSU5idmhxNW9kVzdTbXU3UnFjcDVPSUc2ZjBveHg3eEYwRm9CdmlVKy9sVEFBM1haYUN2bHZnRm1DVEJYQ0NPb1RVanovUW5ubS9xaVZpRmdzMTlYOGRHNTI5ZnhuMXdXSXlJbUpnWWJTcUUvT0wxcm9SNTRKSk84aTNYVXY1YmhZUmNQN2pLNGkvWFh1U2UwdHM0K2tBTnd4S1FJZnd6Z1N3L2pNaGhFZ0RTUDNZUzN2bS9hNVFVejkwYlBUU1RZdWc3b1ozaDhzNGpJYmpLaHFVaTN6UW51TXhBNDYzMVh5alpUWXVPZ3gwRi9qTUFUR1hlNjY3THJSZHMrcG9Qb1FYTDNRYTJwaUt4VkI1Sk4vbHZhajd1V0M0SXJqbEFEZGRsWUMrVHdpNkxzR01BVXVmU1NjZVptd0phejN0ZWZlN1FvMnRJelc3NUtQVkhoMGNERlhWeTRHYTR4eVBRWFhDY29vTCtrdnppd1VmTk5iclo5d1JUUnpjdkVjU3BqOVVVQzkwYUtNYnIzdjM0TVNBR3kyQVRhTlNhTGdxQm4yL0FEUmRmQ2F6QVp5b0N5WDFZVFJJd3ZvQjdYbjN1MW9pWmdXaDV2N1RzZUVaZTZNOE9qalZYa0tMZ2VGdGE3emhHUmo0UUxEK1Z0R0IxVVRBb2ZKQVVMeVY0Zlk5cTA1d1FIT094MXk3enNPZ01lRDY2K2c1Qm9XZzZlV0R1b3VIWXNhcnhYaTd6SGpOZ0VWMmdPc3R3WGl0Z0xlOHM0N1lBNVJmMHA1MXZ5M1UzSU5PUTZjSUJNMEExMk9EbzBYYlpyNFI0MDFlMjhjRjdYbno4QnVIdmJQRlZNYzV0bnRJYVkwZ0RuQjQ4VUtRdjVreCsrZENCNUhtREkvcG0vNGlId3hYRU81clF2UEJOT0xtdmFMdjRRUEI4SldBT2RUdzlXclJ2YXM2Y2JoUTI4bWJNK0RVaGdoWGdMTm96N25mRmxzU3NKSFVkTzV6aVo0ZGZqUlFlSmp3UUdvSHpBT2w3dWN5Q1BFV3dqQkl3WityVDZHQlBzdGovbzdaVk5jOHU2bW0zTUpEZkJ1MjBvOXlJRXk1d09VbTVqeVZOSytIbGkwSWVVMDNPVk1kbERWNDQxc0FxK2NJV1BsU2xpdThuOUdlY2IrdUpTTFdEMUdUcnprMlBtcnpJakJjRTFDRDRVdkJCNDRWaGZERlZGZUR6Q1M1T1J6S1BzN3hET1NaYnZmcEFOdndDaTJBeFhhQUczcWtERjdWaDF5SUtMNk4rTHhzTVV0SWU4Yjl2bENqOTVHYUwza2pqVG9PWDRqK3NzQU9Sc2FlNkNrUjR5MmQrMkE4VkJ4YVR4WHZmQURXZk1LSDJJb2dWOC82QWUzWi9sYlVFakVyR0RYN0g0NHZJRTRWQk1ZYlF1cEFmQ0cxcDdnTWpLcWorUkJiRlRRbFlHc2lTbTZEbkFmaVlmT242eWdDNWtJdEJzemc1VEY0Y1hSdUFDNS9QdzlpdGl4MjlYempiSEZBS08zWi90WVVhdmh6cEJjaGVpV1ZPbzViUGlNaVVKM2dNREQ0ejZXNGhYZHlRaFVMWU5YMnBTQjlMWjA1QUc1RndIVVd3Qml2N29nUUNoNU1oRkQ1QXBmUHhKWUViS0k5MDkrcVlvdFo4YWp4LytmNElwWnVXZ1MxL1J6NlNHN2hhTTd4ekRDT0ZVQnNkZENNQWR0djVZV1F2aXNLaEMrdGhDMmZlVzR6bS9GeUxJRE5lTlVXdkZxTXQ4dU0xd3BZYzVnUEc5NWNDN2wzeDZON3ZHMjY1N2lYOWp4L0t3czEva1hTQzhsOU1CNTBnM3pxVUc3RjFGMFgybERJWGs4bkRuVGExa2dvZURJUndvc1d6Z2h6aURRQTRtcVdRT2FlYU9BOG5RVEszMmRCK1JkNTh3NVk3UUJZZFlnTFplL2xnT2pabGJCMmJ4d3NWd2N6OStMT1BhUE4rMlJBUWNEM2FNL3l0N0tDSmF3bzlCTCs0ZmhTUWdzWHdNWS9aNFB1d25lSW5iYnZXWjROUmRxMlNPZWhSb05mY25BTjgvbm1UM01oNjY0WUNKVUh6bjVMbyt0RmJiNGRWdFNIUXZyT0tNaTVmeGx6T1BDZlR3SHBiOU9oK0wzVlVJcmVWZm5uZWNScyttc3VsSDJVQThwM3NrQ092czk3T2hueTlpZEExdDRZU0c0TWcrZ3R0ek8vTVl0Nyt4ZktQZC9ocFZ6b0pUeEFla0hKcGpCbUNMOURQQ2tqSXFqcE51T3RPTFNlT2VnYys1YlVHTXA4cmpyQnNVSGY5SmRjV0xNdjFuRWovMzk3NVI0VTVYWCs4Y252MTJReW1XbTZ5MVhaaGVXbUlnZ2JMZ0VWa09XeXUreU5KZUFGY1VHUWhXVzVLRVppSmpWL0pHMFRtelRUcEcxc2MybVRhVXlUZEdKajA5alJtbG9hYXpWR2plQUY3NUpZclVvVW5HblNtalRKMCtlOGV3SGNkMkdCM1Qxb25zL01keHpkOWQzM25QTjh6dmRtVGo4MmJ6bnYyU1VRbVZFaVpRY2lkbENsTDZjTEE5ajhNVW5NMG5KQjU1WlMvMnFtNkhEck4yWUluN2RkMWtOYnY5N1IyRDFEMG10ZnVrZG8wMmh6Q0c4Sko1Si9ZNTdCbVFuaFBiZkVNUEJRVm9nZFdPeWlNRmkycThBaGNaK1d1MEM4SThqb0ZEam5rUmtlKzZXb0RJWGwrNHFFejlzSGh2NWYrMVVEMk0rVmd2WFlVQ3RiY0Y4MUx5b2h2VE5XK0g5VFFNNnhjaWJLSUFublBhdUVDTklTNlcxNFFGMWlCNmRjcllBVkJ4MURaenY5elpiWTJqc2s0TXk2YVI1N3hXUVVQc2ZHOWZhTXRrLzAwUHhSNllobjFlMHZodnZlbmd0Rno4NFJuaEcvTklLYnFBbFZFWkJRTGZyN2Ziem5sQmdGbVZHU2lJZjBxZGloRnY1MGpudllHbzlyaEViaExST1BNREhaSHRTK1h3anlNczk5S3RxUTZ0NG5YNTdYZmtVUExlZExoWXZSZW1SSWFKYWFQU29vMzV3RDZ1ZVZrTHMrQ1RJZWpJTmttMHlRSzlvY01tRkJvL0c5RXkyUmtOd3NoOHkxOFpDL2ZqYm9Yc2lBUlp2bmczVzNHbG9QR2FCZ2ZUSUpmRE1pTjBrYVJROGRCOGI4dTJ6M2NGbVBxcUd0WDg5ZHFHQ21IWnZUdGY3S0xmTkU1V0RDdWI3RDVCejNiekNoTCtqQWRsWXJYSlFOaDBkS1BUeDErNHRnNlYvellkSFcrVkQrVmc0WVg4L3ltb3JOYzJISnRqeW8zVlVJMWcvVjBOU2pCVnRQS1RRZjFrSExVVDNZRCtHZm1OWkQrdEVFUHNsN1Bna2Z3SU42UTJ3NDR4YUhROVdPZlBjQU5Sd3FFWWFOdDFqQlN1c2xuWHZ0aHQ5a2lncGN2WE9CK3p2KzJoc21kZXRGSGRqL2djTDFvWGhuVU80VEdyRDJxaDJDOTVSNGxWdzRKM2JoZHF1aHNVY0R0aU5hc0ovVVFmczVBNnp1TDRQT2ErWFFmc1l3UXVBMkZEajNrU1N4OVIza1BadUVEOGlNRWdrZTFobXhBWjFWUHgwc3UxVWpCb1FOMU1vQi9vSUZYT0NMUXdKclg3cEhWT0Q2QThYdTd6U2QwZ1R2L1FZY29yZjFZeTRQcFIzL3Z2S0tBVG9HamJCNjBBVDNENWJCbW1zc1pwVFhEQThNbGtQTEVZZThEb0VOZ3NCWm5mRmk2L3N6Nzlra2ZBUWx6c1FEdXk0MnBDbDJPU3pmVnpSQ1l1dFJ0ZEJRdkNVTGxzQWx6NldKQ254ait6R2hlTDd6S2lGR0ZOamtFUGphY0lITG9lTzhhVVQ3T2dRMlFuS2pUR3g5ci9HZVMySWN5RXhTaTlpUXNxU3RpdkdRV0dpZDAxcWhDWGpMRmhDQkx3MEpYUHB5dXVpK2VGeHN2V3FoSFhrSzNPRVVtTFd2UzJEV3Ztc0d6TmkrK2hFQ3MvWnQ3VGFBNHI1UXNmVTl4bnNtaVhHQ2gvYUVONG1WSFFwUmlWZjBsSUR0N0swbk1sdVBhNDFsYjk0cnVpZEwzczN6dk5ST2FMaEo3R2hmbzZOOTNRSmordzZhb2ZXRUFldzlEbmtkQXJQMk5ZQmxtd3E4bkhrdDcza2t4b20wUkhvYkh0eHZSMnZpMnIyRm5oSzdSTVpHYnJ0ODY0amNjRmd0ckcxcFY3N29mckJtRnRzTDZ6RTF0UFVIZHg5V3VRVTJPUVIydHU4YUp1OHBQVFNqdk1QYjF5V3dka082Nk5wa0pra3k3M2trSmtDVVFYSUhIdUIyYnhJbjIyU3c3RzhGNGhLN0JyaFhEZlp6cFRkOUt6ZWQwanJXZExBRTRxdkNQZllpODZGNDcvdkFMclN6MnFEdEFSTzR3eW13cTMwN0xwdkEzcXNEVzArcDBMNmVBaHNoMVI0dGRzNzk3RExuUFl2RUJNSGI5eTQ4eFBlOFNaeFlFd21MdHM0ZlZXSlhHbzlwd1A1eGFkQWJ5UjlwN3RPNjE1SDEzUVNQZllpcENJV2FQWVdqN3dHS3pDNkMxb3U2QUF2TTVEVUs3YnZxa2hGYVR1bWdDY1ZsOGdydDIrT1ExeVV3YTEvTFZoVjRPZU9OdkdlUW1DVFl4Ti9CZyt6eUpyR2lNaFQwR3pOOWt0aVZoaU5xc0ozV1FzdDViT2RQcHFqUUF3WjhQeDFlUE9vUjc2N2ZtQ0c2RHdWUHAvaSsva01vODBrTk5PT0YxbkpCNTc5MnZvcHRlbEVQOWo1czI2TmFGTmVWWVFKN3RLOEJzaDZJOXlhd2lmZjhFWDdBMmNSYnZVa3NMNVBDL01kbVFkMys0bkdKN0I3b3cycG9Pb0VEL1pGem9EbEp6VVJpMHJLbVpKS0p2V3ZkdmlLSVd4em1zUWV4QzhPZ2V1ZUNDYTFmMkFOc2FPdFJOVFRpUHJEZnQ1M1ZDdnNoRnZhWkVMd0UyVVhRZUZ3RFZyd1VHL0E1MW00MUJ2K3RlNlM4TEhZUmdTdGVuK3ROM3ZOeWsrUmJ2R2VQOEJQWXhIZmdvYjdpVldMTTdDWVpMTjZlTytFaDloam9YaFQ3RklyZHB3WDd1VkpvL2FjTzJwamNBMzZROVNvTzhFV2Q4RndtREJQQTEzZkxlM0syNlBxVkhRcW8vN0RZTCtzZjkzNDU0eEs0cVZ1a2ZYc2M4am9FTm9CbG13b3ZvM0J2NTdtSzk4d1Jma1phSXIwTkQvWlJ6TmZlSkk2NUx4U0tuazBOK0NDemhoUWFDOXVIdFJCcm8xRmJ5OWxXN0ZMdzFxNit4ckpiSlRTdTJQcm5mVzhtckRqSVIrQ2g5dFU0NWRXNjI3ZjVodlkxYjh3R1JXV1lOM2xQeTQyU08zblBHeEVnOElDck1KK04xc2JKTmhrcy9PTThMbTBVakpUOElzM3IydE03WTZGbWoyckt0UzhUdUg1bk1XUS9sQWlqbk4yWE1xTzBpUGVNRVFGR1pwUW84YkJQakNaeGRKa1VjaDZkQVpaZEJkeUY4M2Zxc1dYVE9tSzhyajFoV1FRWVhzMFV2c2VyZlljTFhMTkRCZm1QellhWThwRFI1R1Y1a1Bkc0VVRUNKYjRiRC95Vk1RWUNGSldoVVBCMEN0VHVMZVF1bmo5VHMxc0ZNK3VtamJyMnBJYnBVTFFoRlpaMjVRZEZZSGY3NHArV3Y2aEE4OXc5a05vV001YTByanpPZTZZSUR1REJMOE5jR1d0QTRwYUVnK29uS1ZDelI4VmRQbitsZXVlQ01TVjJ0M0oxQktTdGpJRjdIMDZBdkI4bWdlWkZKWmczWmNPaXJmT0Z5MkNpOGpaZ3kxdDJGa0Q1cGh3bzJaQUcyZXNTSWI0cTNGZHBXYjZpNXYyR2d3TWd3L3plbDRHSlhSZ0d1ZXVUQXRwS3dZemw3eXBJYnBhTlJ4alJSSmVoNU1zaVlGYjlkSmpUR2czSzFRcklXQnNuR21XSEFsTHNja2kwUkVKMGVjaGtmdmN5UnNkN2ZvZ3Bnc3drTmVOQW5QVnBZTTBoa040WkM4YlhzNkQrUURGM0VTZVR1djNGa0l1dHlpU2NyTWhCeW44eEw4bU1rbERlTTBOTU1hWWJKSGZoY0t6RC9NdlhnWXF2Q2hjRXFIaG5MdFFmNUMvaytPUXRFaTZobkVkbWdLSXlsTGVZWStVTHpLOVIzR1RlYzBKTWNYQklJbkZZZm9iNWZEeERsbWlKaEhuZm53bW1ON0pnK1FkRjNBVVZTOVdPUEZBL3I0VDBCK0pBVVRIbHBmMGE4d0htZmp5VGFiem5ncmpKa0pta01UZzhUMk0rSGUvd3haU0h3SnpXYUZqd1ZETG9YODJFNnZjV0JGM1cydmNMb2VMdHVhQitRUW4zcmtzUUxwaEp5TlNOMlljWkNLQ3cvOEVjd0R5TFdSaGxsTnpOZXdhSVc0QW9neVFjQjJvZDV2eGtCalIrYVFRb08ySWc5L0ZaZ2xUbVRkbllpUGxRdDMvaWJjMmFmc203ZWNLejJEUHpua2lDOU01WW1GRVRDZEZsa3hacUVQT2N6Q1RKR0w0ZitIZXAzQ2hKdzg5MG1PV1l0WmoxbUJjd3IySGV3WFI1eVhiTW01aGZZbjZBYWNNWXNXR1RjSjl2NTMzV3hDM01kSlBrZGh5MkNzeWZNRi81czMzaUZvZkJ6T1hUSU1VdVI4a1ZrTEUyVGpTcEsyTmdkcE1NRXFvaklOb2NFb2dXL0J5elJXYVNWcUZRZC9MZWM0SUlDTmdZVVRqb0QySzZBeUJSc1BNWjVnOG9iWDJVVVNMbHZiY0VFVlJrUm1rQ0NyQUcwNFg1WWdvSTZVdE9ZMzZPTWVGbGRCZnZQU1NJS1FISzhHMlV3b2g1Q3JQWDJXNjhaZjBTY3h6ekswd2R2bU1jNzMwaWlKdUNLSVBrZGhRbWpZbURlUkx6dGxPbTZ3RVE5YnF6V2JkZ2ZveXh5VXpTZWRTd0JPRm5VS3IvbHhzbFVaaDBGTTJBYWNHc3cvd0k4eUptRTJiekRYa0w4ekxtR2N6RG1IcE1tZHdreWNIbnlhZnBKZi9IZTEwRVFSQUVRUkFFUVJBRVFSQUVRUkFFUVJBRVFSQUVRUkFFUVJBRVFSQUVRUkFFUVJBRVFSQUVRUkFFUVJBRVFSQUVRUkFFUVJBRVFSQUVRUkFFUVFTSy93RXM4dnpBZVBib3RRQUFBQUJKUlU1RXJrSmdnZz09XCJ9KSkpKSxtcD1uLnArXCJkdy85MGExYTEwOWYzMGI4NTY0Y2M4MS53ZWJwXCIsaHA9bi5wK1wiZHcvMTkzNWI2NWNlNWZmYzIyOTEyYzEud2VicFwiLHZwPW4ucCtcImR3LzZkMzgyYjNmMDU5Y2QwMmRlY2ZlLndlYnBcIixncD1uLnArXCJkdy8zNGNlNGNmNzRhNWE2MWUwYTNhNC53ZWJwXCIseXA9bi5wK1wiZHcvMWJhMGFkMWMzNmEwOWNiMjU5OTIud2VicFwiLEVwPW4ucCtcImR3L2RjOTM4ZWQyNjI4MTZhNGNlNjBhLndlYnBcIixfcD1uLnArXCJkdy81OTRmM2Q5MmQ5ZjNkZmUzMGI0Yy53ZWJwXCIsSXA9e3JlYWN0aW9uQ29udGFpbmVyOlwianV4QXlcIixmYWxsYmFja1JlYWN0aW9uOlwiTnhVUnBcIixlbmxhcmdlT25Ib3ZlcjpcImdfQ0NJXCIsYnV0dG9uOlwiXzhZR01cIixkZWVtcGhhc2l6ZTpcImhXb2VLXCJ9LFNwPXsxOnthbmltYXRlZElkOjIwMDgyNDEyLHN0YXRpY0lkOjIwMDgyMzk2LGRlc2NyaXB0aW9uOntpZDpcIjBJT1I0dlwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiUmVhY3Rpb24gbG92ZSBmcm9tIFwifSx7dHlwZToxLHZhbHVlOlwidXNlckRpc3BsYXlOYW1lXCJ9XX19LDI6e2FuaW1hdGVkSWQ6MjAwODI0NzAsc3RhdGljSWQ6MjAwODIzOTgsZGVzY3JpcHRpb246e2lkOlwicTg3WHRsXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJSZWFjdGlvbiBsYXVnaCBmcm9tIFwifSx7dHlwZToxLHZhbHVlOlwidXNlckRpc3BsYXlOYW1lXCJ9XX19LDM6e2FuaW1hdGVkSWQ6MjAwODI0MTAsc3RhdGljSWQ6MjAwODIzOTUsZGVzY3JpcHRpb246e2lkOlwidWt5KzdkXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJSZWFjdGlvbiBmaXJlIGZyb20gXCJ9LHt0eXBlOjEsdmFsdWU6XCJ1c2VyRGlzcGxheU5hbWVcIn1dfX0sNDp7YW5pbWF0ZWRJZDoyMDA4MjY1OSxzdGF0aWNJZDoyMDA4MjY1NyxkZXNjcmlwdGlvbjp7aWQ6XCJ3QXo5TDVcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlJlYWN0aW9uIHRodW1icy11cCBmcm9tIFwifSx7dHlwZToxLHZhbHVlOlwidXNlckRpc3BsYXlOYW1lXCJ9XX19LDU6e2FuaW1hdGVkSWQ6MjAwODI2NTUsc3RhdGljSWQ6MjAwODI2NTQsZGVzY3JpcHRpb246e2lkOlwiM3g3eWlhXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJSZWFjdGlvbiB0aHVtYnMtZG93biBmcm9tIFwifSx7dHlwZToxLHZhbHVlOlwidXNlckRpc3BsYXlOYW1lXCJ9XX19LDY6e2FuaW1hdGVkSWQ6MjAwODI0ODEsc3RhdGljSWQ6MjAwODI0ODMsZGVzY3JpcHRpb246e2lkOlwiMjM4c1l0XCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJSZWFjdGlvbiBjcnkgZnJvbSBcIn0se3R5cGU6MSx2YWx1ZTpcInVzZXJEaXNwbGF5TmFtZVwifV19fSw3OnthbmltYXRlZElkOjIwMDgyNjYyLHN0YXRpY0lkOjIwMDgyNjYxLGRlc2NyaXB0aW9uOntpZDpcImhPUzZIVFwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiUmVhY3Rpb24gc2hvY2sgZnJvbSBcIn0se3R5cGU6MSx2YWx1ZTpcInVzZXJEaXNwbGF5TmFtZVwifV19fX0sYnA9ezE6KDAsby5aKSh0cCx7fSksMjooMCxvLlopKFFmLHt9KSwzOigwLG8uWikoS2Yse30pLDQ6KDAsby5aKShwcCx7fSksNTooMCxvLlopKGxwLHt9KSw2OigwLG8uWikoV2Yse30pLDc6KDAsby5aKShvcCx7fSl9LFRwPXsxOigwLG8uWikoXCJpbWdcIix7c3JjOmdwLGNsYXNzTmFtZTpJcC5mYWxsYmFja1JlYWN0aW9ufSksMjooMCxvLlopKFwiaW1nXCIse3NyYzp2cCxjbGFzc05hbWU6SXAuZmFsbGJhY2tSZWFjdGlvbn0pLDM6KDAsby5aKShcImltZ1wiLHtzcmM6aHAsY2xhc3NOYW1lOklwLmZhbGxiYWNrUmVhY3Rpb259KSw0OigwLG8uWikoXCJpbWdcIix7c3JjOl9wLGNsYXNzTmFtZTpJcC5mYWxsYmFja1JlYWN0aW9ufSksNTooMCxvLlopKFwiaW1nXCIse3NyYzpFcCxjbGFzc05hbWU6SXAuZmFsbGJhY2tSZWFjdGlvbn0pLDY6KDAsby5aKShcImltZ1wiLHtzcmM6bXAsY2xhc3NOYW1lOklwLmZhbGxiYWNrUmVhY3Rpb259KSw3OigwLG8uWikoXCJpbWdcIix7c3JjOnlwLGNsYXNzTmFtZTpJcC5mYWxsYmFja1JlYWN0aW9ufSl9LENwPTE1LzE2O2Z1bmN0aW9uIEFwKGUpe2xldHtyZWFjdGlvbjp0LGhlaWdodDpuLGRlZW1waGFzaXplOnIsZGlzYWJsZWQ6aSxlbmxhcmdlT25Ib3ZlcjphLG9uQ2xpY2s6cyxzaG91bGRTaG93QW5pbWF0ZWRSZWFjdGlvbnM6Y309ZTtjb25zdCBsPSgwLG1lLlopKCksdT1mdW5jdGlvbihlKXtjb25zdCB0PUNsKGUpO2lmKHQpcmV0dXJuIHQuYml0bW9qaV9hdmF0YXJfaWR9KHQudXNlcklkKSxkPVJsKHQudXNlcklkKSxmPU51bWJlcih0LnJlYWN0aW9uLnJlYWN0aW9uQ29udGVudC5pbnRlbnRpb25UeXBlKTtpZighKGYgaW4gU3ApKXJldHVybiBiKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcIm1lc3NhZ2UucmVhY3Rpb24uUmVhY3Rpb25JdGVtLmludmFsaWRSZWFjdGlvblwifSksbnVsbDtjb25zdCBwPVNwW2ZdLmRlc2NyaXB0aW9uLG09Yz9UcFtmXTpicFtmXSxoPXU/KDAsaGUudWIpKGZ1bmN0aW9uKGUpe3JldHVybmBhbmktJHtTcFtlXS5hbmltYXRlZElkfWB9KGYpLHUudG9TdHJpbmcoKSk6bSx2PVwic3RyaW5nXCI9PXR5cGVvZiBoJiZjO3JldHVybigwLG8uWikoXCJsaVwiLHtjbGFzc05hbWU6KDAsUS5aKShJcC5yZWFjdGlvbkNvbnRhaW5lcixCb29sZWFuKHIpJiZJcC5kZWVtcGhhc2l6ZSl9LHZvaWQgMCwoMCxvLlopKFwiYnV0dG9uXCIse2NsYXNzTmFtZTpJcC5idXR0b24sdHlwZTpcImJ1dHRvblwiLG9uQ2xpY2s6ZT0+e2Uuc3RvcFByb3BhZ2F0aW9uKCkscz8uKHQucmVhY3Rpb24ucmVhY3Rpb25Db250ZW50KX0sZGlzYWJsZWQ6aX0sdm9pZCAwLHY/KDAsby5aKShcImltZ1wiLHtjbGFzc05hbWU6KDAsUS5aKShhJiZJcC5lbmxhcmdlT25Ib3ZlciksaGVpZ2h0Om4sd2lkdGg6bipDcCxzcmM6aCxhbHQ6bC5mb3JtYXRNZXNzYWdlKHAse3VzZXJEaXNwbGF5TmFtZTpkfSl9KTooMCxvLlopKFwiZGl2XCIse3N0eWxlOntoZWlnaHQ6bix3aWR0aDpuKkNwfX0sdm9pZCAwLG0pKSl9Y29uc3QgUnA9e3JlYWN0aW9uU2VsZWN0aW9uTGlzdDpcIkFLb1BEXCIsaG9yaXpvbnRhbDpcIm1jTGNUXCIsdmVydGljYWw6XCJhcEl2V1wifTtmdW5jdGlvbiBrcChlLHQpe3JldHVyblwiYmlnaW50XCI9PXR5cGVvZiBlJiZlPT09dC5yZWFjdGlvbi5yZWFjdGlvbkNvbnRlbnQuaW50ZW50aW9uVHlwZX12YXIgT3A9e0hvcml6b250YWw6MCxWZXJ0aWNhbDoxfTtmdW5jdGlvbiBOcChlKXtsZXR7bWVzc2FnZTp0LG9uRmluaXNoU2VsZWN0aW5nOm4sYWN0aW9uT3JpZ2luOnIsZGlyZWN0aW9uOmk9T3AuSG9yaXpvbnRhbH09ZTtjb25zdCBhPVhjKCk7bGV0IHM7Y29uc3RbYyxsXT0oMCxkLnVzZVN0YXRlKSghMSksdT1EZigpLGY9KDAsay5vKShUZS5IZSkscD0oMCxrLm8pKFRlLnVCKTtmb3IoY29uc3QgZSBvZiB0Lm1ldGFkYXRhLnJlYWN0aW9ucyllLnVzZXJJZD09PWEmJihzPWUucmVhY3Rpb24ucmVhY3Rpb25Db250ZW50LmludGVudGlvblR5cGUpO2NvbnN0IG09KDAsZC51c2VDYWxsYmFjaykoKGFzeW5jIGU9PntsKCEwKTt0cnl7YXdhaXQgZih0LmRlc2NyaXB0b3IuY29udmVyc2F0aW9uSWQsdC5kZXNjcmlwdG9yLm1lc3NhZ2VJZCxlLHttZXRyaWNzTWVzc2FnZVR5cGU6UGUuS3UuTUVESUEsbWV0cmljc01lc3NhZ2VNZWRpYVR5cGU6UGUuY0UuTk9fTUVESUEscmVhY3Rpb25Tb3VyY2U6UGUuencuQUNUSU9OX01FTlV9KSx3ZihcInJlYWN0aW9uXCIscil9Y2F0Y2goZSl7fWZpbmFsbHl7bj8uKCksdS5jdXJyZW50JiZsKCExKX19KSxbdC5kZXNjcmlwdG9yLmNvbnZlcnNhdGlvbklkLHQuZGVzY3JpcHRvci5tZXNzYWdlSWQsdSxmLG4scl0pLGg9KDAsZC51c2VDYWxsYmFjaykoKGFzeW5jKCk9PntsKCEwKTt0cnl7YXdhaXQgcCh0LmRlc2NyaXB0b3IuY29udmVyc2F0aW9uSWQsdC5kZXNjcmlwdG9yLm1lc3NhZ2VJZCl9Y2F0Y2goZSl7fWZpbmFsbHl7bj8uKCksdS5jdXJyZW50JiZsKCExKX19KSxbdC5kZXNjcmlwdG9yLmNvbnZlcnNhdGlvbklkLHQuZGVzY3JpcHRvci5tZXNzYWdlSWQsdSxwLG5dKTtyZXR1cm4oMCxvLlopKFwidWxcIix7Y2xhc3NOYW1lOigwLFEuWikoUnAucmVhY3Rpb25TZWxlY3Rpb25MaXN0LGk9PT1PcC5Ib3Jpem9udGFsJiZScC5ob3Jpem9udGFsLGk9PT1PcC5WZXJ0aWNhbCYmUnAudmVydGljYWwpfSx2b2lkIDAsZnVuY3Rpb24oZSl7cmV0dXJuW3t1c2VySWQ6ZSxyZWFjdGlvbjp7cmVhY3Rpb25Db250ZW50OntpbnRlbnRpb25UeXBlOkJpZ0ludCgxKX0scmVhY3Rpb25JZDp2b2lkIDAsdW5yZWFkOiExfX0se3VzZXJJZDplLHJlYWN0aW9uOntyZWFjdGlvbkNvbnRlbnQ6e2ludGVudGlvblR5cGU6QmlnSW50KDIpfSxyZWFjdGlvbklkOnZvaWQgMCx1bnJlYWQ6ITF9fSx7dXNlcklkOmUscmVhY3Rpb246e3JlYWN0aW9uQ29udGVudDp7aW50ZW50aW9uVHlwZTpCaWdJbnQoMyl9LHJlYWN0aW9uSWQ6dm9pZCAwLHVucmVhZDohMX19LHt1c2VySWQ6ZSxyZWFjdGlvbjp7cmVhY3Rpb25Db250ZW50OntpbnRlbnRpb25UeXBlOkJpZ0ludCg0KX0scmVhY3Rpb25JZDp2b2lkIDAsdW5yZWFkOiExfX0se3VzZXJJZDplLHJlYWN0aW9uOntyZWFjdGlvbkNvbnRlbnQ6e2ludGVudGlvblR5cGU6QmlnSW50KDUpfSxyZWFjdGlvbklkOnZvaWQgMCx1bnJlYWQ6ITF9fSx7dXNlcklkOmUscmVhY3Rpb246e3JlYWN0aW9uQ29udGVudDp7aW50ZW50aW9uVHlwZTpCaWdJbnQoNil9LHJlYWN0aW9uSWQ6dm9pZCAwLHVucmVhZDohMX19LHt1c2VySWQ6ZSxyZWFjdGlvbjp7cmVhY3Rpb25Db250ZW50OntpbnRlbnRpb25UeXBlOkJpZ0ludCg3KX0scmVhY3Rpb25JZDp2b2lkIDAsdW5yZWFkOiExfX1dfShhKS5tYXAoKChlLHQpPT4oMCxvLlopKEFwLHtyZWFjdGlvbjplLGhlaWdodDozMCxkZWVtcGhhc2l6ZTpCb29sZWFuKHMpJiYha3AocyxlKSxkaXNhYmxlZDpjLG9uQ2xpY2s6a3AocyxlKT9oOm0sZW5sYXJnZU9uSG92ZXI6ITAsc2hvdWxkU2hvd0FuaW1hdGVkUmVhY3Rpb25zOiEwfSx0LnRvU3RyaW5nKCkpKSkpfWZ1bmN0aW9uIHdwKGUsdCl7Y29uc3Qgbj1YYygpLHI9ZS5tZXRhZGF0YS5zYXZlZEJ5LmluY2x1ZGVzKG4pLGk9ZS5tZXRhZGF0YS5pc1NhdmVhYmxlJiZlLnN0YXRlPT09UGUuQlEuQ09NTUlUVEVELG89KDAsay5vKShUZS5GRyksYT0oMCxkLnVzZUNhbGxiYWNrKSgoYXN5bmMoKT0+e3RyeXthd2FpdCBvKGUuZGVzY3JpcHRvci5jb252ZXJzYXRpb25JZCxlLmRlc2NyaXB0b3IubWVzc2FnZUlkLHI/UGUuUjYuVU5TQVZFOlBlLlI2LlNBVkUpLHdmKHI/XCJ1bnNhdmVcIjpcInNhdmVcIix0KX1jYXRjaChlKXt9fSksW3IsZS5kZXNjcmlwdG9yLmNvbnZlcnNhdGlvbklkLGUuZGVzY3JpcHRvci5tZXNzYWdlSWQsbyx0XSk7cmV0dXJuW3IsaSxhXX1mdW5jdGlvbiBEcChlLHQsbixyKXtsZXQgaT1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XT9hcmd1bWVudHNbNF06XCJcIjtpZihpKXJldHVybigpPT57d2luZG93Lm5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGkpLHdmKFwiY29weVwiLHIpfTtjb25zdCBvPWUubWVzc2FnZUNvbnRlbnQ7aWYoIW8pcmV0dXJuIHQud2FybihgRGV0ZWN0ZWQgZW1wdHkgbWVzc2FnZSBjb250ZW50cyBpbiAke259YCksbnVsbDtpZihvLmNvbnRlbnRUeXBlIT09UGUuemMuQ0hBVClyZXR1cm4gbnVsbDtjb25zdCBhPSgwLHouJHApKFZzLkNvbnRlbnRzLmRlY29kZShvLmNvbnRlbnQpKTtyZXR1cm5cInRleHRcIiE9PWEuY29udGVudD8uJGNhc2U/KHQud2FybihgRm91bmQgbm9uIHRleHQgY29udGVudCBpbiAke259YCksbnVsbCk6KCk9PntpZihcInRleHRcIj09PWEuY29udGVudD8uJGNhc2Upe2NvbnN0IGU9YS5jb250ZW50LnRleHQudGV4dDt3aW5kb3cubmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoZSksd2YoXCJjb3B5XCIscil9ZWxzZSB0Lndhcm4oYEZvdW5kIG5vbiB0ZXh0IGNvbnRlbnQgaW4gJHtufWApfX1mdW5jdGlvbiBQcChlLHQpe2NvbnN0e3NldFJlcGx5Om4sZm9jdXNNZXNzYWdlQ29tcG9zZXI6cn09emwoKTtyZXR1cm5bZS5tZXNzYWdlQ29udGVudD8uY29udGVudFR5cGU9PT1QZS56Yy5TTkFQJiYwPT09ZS5tZXRhZGF0YS5zYXZlZEJ5Lmxlbmd0aCwoKT0+e24oZSkscigpLHdmKFwicmVwbHlcIix0KX1dfWZ1bmN0aW9uIE1wKGUsdCl7Y29uc3Qgbj1YYygpLHI9ZS5zZW5kZXJJZD09PW4saT0oMCxrLm8pKFRlLkZHKTtyZXR1cm5bciwoMCxkLnVzZUNhbGxiYWNrKSgoYXN5bmMoKT0+e3RyeXthd2FpdCBpKGUuZGVzY3JpcHRvci5jb252ZXJzYXRpb25JZCxlLmRlc2NyaXB0b3IubWVzc2FnZUlkLFBlLlI2LkVSQVNFKSx3ZihcImRlbGV0ZVwiLHQpfWNhdGNoKGUpe319KSxbZS5kZXNjcmlwdG9yLmNvbnZlcnNhdGlvbklkLGUuZGVzY3JpcHRvci5tZXNzYWdlSWQsaSx0XSldfXZhciBMcCxVcD1uKDU4NDM2KTtmdW5jdGlvbiB4cCgpe3JldHVybiB4cD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LHhwLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBGcD1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIix4cCh7d2lkdGg6MjQsaGVpZ2h0OjI0LHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksTHB8fChMcD1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNC42MzggNi4xNjdBMi4zNjIgMi4zNjIgMCAwIDEgNyAzLjgwNGg1YTIuMzYyIDIuMzYyIDAgMCAxIDIuMzYzIDIuMzYzdjIuNjM3SDE3YTIuMzYyIDIuMzYyIDAgMCAxIDIuMzYzIDIuMzYzdjYuNjY2QTIuMzYzIDIuMzYzIDAgMCAxIDE3IDIwLjE5NmgtNWEyLjM2MyAyLjM2MyAwIDAgMS0yLjM2Mi0yLjM2M3YtMi42MzdIN2EyLjM2MyAyLjM2MyAwIDAgMS0yLjM2Mi0yLjM2M1Y2LjE2N1ptNSA3LjYzN3YtMi42MzdBMi4zNjMgMi4zNjMgMCAwIDEgMTIgOC44MDRoLjk3MVY2LjE2N2EuOTcuOTcgMCAwIDAtLjk3LS45NzFIN2EuOTcuOTcgMCAwIDAtLjk3Mi45N3Y2LjY2N2MwIC41MzcuNDM1Ljk3MS45NzEuOTcxaDIuNjM4Wk0xMiAxMC4xOTZhLjk3Ljk3IDAgMCAwLS45Ny45N3YyLjYzOGgzLjQ1N2wtLjQ3OS0uNDc5YS42OTYuNjk2IDAgMCAxIC45ODQtLjk4NGwxLjY2NyAxLjY2N2EuNjk2LjY5NiAwIDAgMSAwIC45ODRsLTEuNjY3IDEuNjY3YS42OTYuNjk2IDAgMCAxLS45ODQtLjk4NGwuNDc5LS40OGgtMy40NTh2Mi42MzhjMCAuNTM3LjQzNS45NzEuOTcxLjk3MWg1YS45Ny45NyAwIDAgMCAuOTctLjk3di02LjY2N2EuOTcuOTcgMCAwIDAtLjk3LS45NzFoLTVaXCIsZmlsbDpcIiM0RTU2NUZcIn0pKSk7dmFyIEJwO2Z1bmN0aW9uIFZwKCl7cmV0dXJuIFZwPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sVnAuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IEdwPWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLFZwKHt3aWR0aDoyNCxoZWlnaHQ6MjQsdmlld0JveDpcIjAgMCAyNCAyNFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSxCcHx8KEJwPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk05Ljc1IDQuNjI0YS42MjYuNjI2IDAgMCAwIDAgMS4yNTJoNC41YS42MjYuNjI2IDAgMSAwIDAtMS4yNTJoLTQuNVpNNiA2Ljg3NGEuNjI2LjYyNiAwIDEgMCAwIDEuMjUyaC44NzR2Ny42MjRhMi44NzYgMi44NzYgMCAwIDAgMi44NzYgMi44NzZoNC41YTIuODc2IDIuODc2IDAgMCAwIDIuODc2LTIuODc2VjguMTI2aC40OTlhLjYyNi42MjYgMCAxIDAgMC0xLjI1Mkg2Wm05Ljg3MyAxLjI1Mkg4LjEyN3Y3LjYyNGMwIC44OTcuNzI3IDEuNjI0IDEuNjI0IDEuNjI0aDQuNWMuODk3IDAgMS42MjMtLjcyNyAxLjYyMy0xLjYyNFY4LjEyNlptLTUuMzczLjk5OGMuMzQ2IDAgLjYyNi4yOC42MjYuNjI2djZhLjYyNi42MjYgMCAxIDEtMS4yNTIgMHYtNmMwLS4zNDYuMjgtLjYyNi42MjYtLjYyNlptMyAwYy4zNDYgMCAuNjI2LjI4LjYyNi42MjZ2NmEuNjI2LjYyNiAwIDEgMS0xLjI1MiAwdi02YzAtLjM0Ni4yOC0uNjI2LjYyNi0uNjI2WlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pKSk7dmFyIEhwO2Z1bmN0aW9uIFdwKCl7cmV0dXJuIFdwPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sV3AuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IGpwPWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLFdwKHt3aWR0aDoyNCxoZWlnaHQ6MjQsdmlld0JveDpcIjAgMCAyNCAyNFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSxIcHx8KEhwPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk0xMiA4Ljg3NWM0LjIwNS40NjcgNS42MTYgMi4yMDUgNS45OTMgNC45MDJsLjAwOS4wNjNhMTAuOTk1IDEwLjk5NSAwIDAgMSAuMDg2Ljk2Yy4wMTcuMzIxLS40MDguNDkyLS42Ni4yOTNhNS43OTcgNS43OTcgMCAwIDAtLjcxMi0uNDg1bC0uMDM2LS4wMmMtLjg0OC0uNDktMS45NTEtLjg4Mi0zLjI4OS0xLjA0NkExMS40MTggMTEuNDE4IDAgMCAwIDEyIDEzLjQ1N3YyLjI3NWEuMzgyLjM4MiAwIDAgMS0uNjE3LjMwMUw1LjkgMTEuNzdhLjc2NC43NjQgMCAwIDEgMC0xLjIwNmw1LjQ4My00LjI2NUEuMzgyLjM4MiAwIDAgMSAxMiA2LjZ2Mi4yNzVabTEuMzkxIDYuMDd2Ljc4OGMwIDEuNDc2LTEuNjk3IDIuMzA2LTIuODYyIDEuNGwtNS40ODMtNC4yNjVhMi4xNTYgMi4xNTYgMCAwIDEgMC0zLjQwM0wxMC41MjkgNS4yYzEuMTY1LS45MDYgMi44NjItLjA3NiAyLjg2MiAxLjR2MS4wNzdjMS45MDguMzY2IDMuMzY2IDEuMDY1IDQuMzg4IDIuMTkzIDEuMjMgMS4zNTcgMS42MDcgMy4wOTUgMS42OTkgNC44NTguMDQ1Ljg3Ni0uNTMzIDEuNDYzLTEuMDcyIDEuNjkzYTEuODE3IDEuODE3IDAgMCAxLTEuODQyLS4yMzhjLS42NTUtLjUxOS0xLjcxNi0xLjAzMS0zLjE3My0xLjIzOFpcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KSkpO3ZhciBacDtmdW5jdGlvbiB6cCgpe3JldHVybiB6cD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LHpwLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBLcD1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIix6cCh7d2lkdGg6MjQsaGVpZ2h0OjI0LHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwiY3VycmVudENvbG9yXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSxacHx8KFpwPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk01LjQ3IDcuNjI3YzAtMS45NzMgMS42MzQtMy41NDUgMy42MTMtMy41NDVoNS44MzRjMS45OCAwIDMuNjEyIDEuNTcyIDMuNjEyIDMuNTQ1djkuOTUzYzAgMS4zNDctMS42MDUgMS45NjYtMi41NSAxLjEwOWwtMi40NTgtMS44Mkg5LjA4MmMtMS45OCAwLTMuNjEyLTEuNTcxLTMuNjEyLTMuNTQ0VjcuNjI3Wm0zLjYxMy0yLjE1M2MtMS4yNDIgMC0yLjIyLjk3OS0yLjIyIDIuMTUzdjUuNjk4YzAgMS4xNzMuOTc4IDIuMTUzIDIuMjIgMi4xNTNoNC44OTdsLjE4NC4xMzYgMi42NzUgMS45OC4wMzguMDI4LjAzMi4wMzJoLjAwMWEuMTI2LjEyNiAwIDAgMCAuMDcuMDM3LjE1Ni4xNTYgMCAwIDAgLjA4Mi0uMDFjLjAzLS4wMTIuMDUtLjAzLjA2LS4wNDRhLjA5LjA5IDAgMCAwIC4wMTUtLjA1N1Y3LjYyN2MwLTEuMTc0LS45NzgtMi4xNTMtMi4yMi0yLjE1M0g5LjA4M1pNMTIgNy4xMzdjLjM4NCAwIC42OTYuMzEyLjY5Ni42OTZ2My43MzdsLjg5NS0uODk1YS42OTYuNjk2IDAgMCAxIC45ODQuOTg0bC0yLjA4MyAyLjA4M2EuNjk2LjY5NiAwIDAgMS0uOTg0IDBsLTIuMDgzLTIuMDgzYS42OTYuNjk2IDAgMCAxIC45ODQtLjk4NGwuODk1Ljg5NVY3LjgzM2MwLS4zODQuMzEyLS42OTYuNjk2LS42OTZaXCJ9KSkpO3ZhciBZcDtmdW5jdGlvbiBxcCgpe3JldHVybiBxcD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LHFwLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBYcD1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIixxcCh7d2lkdGg6MTYsaGVpZ2h0OjE2LHZpZXdCb3g6XCIwIDAgMTYgMTZcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksWXB8fChZcD1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNOC4yNTEgMi42MDVhNS42MyA1LjYzIDAgMCAxIDQuNjAzIDIuODNjMS41NzggMi43NTcuNjkgNi4xOTUtMi4wMzUgNy43NTZhNS43MiA1LjcyIDAgMCAxLTcuODA1LTIuMTIgNS43MjEgNS43MjEgMCAwIDEgLjQ2OC02LjM3NWMuMTY0LS4xODEuMzgyLS4xOTEuNTctLjA2My4xMTguMDc5LjIyMy4yMDcuMzA4LjM1Ni4xNTcuMjc3LjExNS41NC0uMDgyLjc5OGE0LjQzNSA0LjQzNSAwIDAgMC0uMTY3IDQuNjU2IDQuNDEyIDQuNDEyIDAgMCAwIDYuMDI2IDEuNjU0YzIuMTE0LTEuMjEgMi44Mi0zLjg5IDEuNTk5LTYuMDIyLS43ODUtMS4zNzItMi4wMTktMi4xNjItMy40OTQtMi4yMDZsLS4wMSAxLjQ5NWMtLjAyLjM1OC0uNDgzLjM0OS0uODY4LS4wMDZsLTEuODA3LTEuNjZjLS4zMTctLjMwNi0uMzUtLjQ3Ny4wMDUtLjc4N2wxLjgzLTEuNjM1Yy40MTQtLjM0NS44OC0uMzkyLjg2OC4wMDVMOC4yNSAyLjYwNVpcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KSkpO3ZhciBRcDtmdW5jdGlvbiBKcCgpe3JldHVybiBKcD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LEpwLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCAkcD1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIixKcCh7d2lkdGg6MjQsaGVpZ2h0OjI0LHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksUXB8fChRcD1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMTguNzQyIDQuNTc2YS42OTYuNjk2IDAgMCAwLS45ODQtLjk4NGwtLjk5Ljk5YTMuNjUyIDMuNjUyIDAgMCAwLTEuODUxLS41SDkuMDgzYy0xLjk4IDAtMy42MTIgMS41NzItMy42MTIgMy41NDV2NS42OThjMCAuNzI1LjIyIDEuMzk3LjU5OCAxLjk1NWwtLjgxMS44MTJhLjY5Ni42OTYgMCAwIDAgLjk4NC45ODRsMTIuNS0xMi41Wk03LjA4NSAxNC4yNjRsOC42NDMtOC42NDJhMi4yNzggMi4yNzggMCAwIDAtLjgxMS0uMTQ4SDkuMDgzYy0xLjI0MiAwLTIuMjIuOTgtMi4yMiAyLjE1M3Y1LjY5OGMwIC4zMzUuMDguNjU0LjIyMi45NFptMTAuMDUzLTYuNDE3IDEuMjQtMS4yNGMuMDk4LjMyMi4xNTEuNjY1LjE1MSAxLjAyVjE3LjU4YzAgMS4zNDctMS42MDUgMS45NjctMi41NSAxLjExbC0yLjQ1OC0xLjgySDkuMDgzYy0uMjk3IDAtLjU4Ny0uMDM2LS44NjUtLjEwM2wxLjI4OS0xLjI4OUgxMy45OGwuMTg0LjEzNiAyLjY3NSAxLjk4LjAzOC4wMjguMDMyLjAzMmguMDAxYy4wMjYuMDI2LjA1LjAzNC4wNy4wMzhhLjE1Ny4xNTcgMCAwIDAgLjE0Mi0uMDU1LjA5LjA5IDAgMCAwIC4wMTYtLjA1N1Y3Ljg0N1pcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KSkpLGVtPXttZXNzYWdlQWN0aW9uOlwibEY3eGVcIixkZWxldGVBY3Rpb246XCJxT3Z1elwifTt2YXIgdG0sbm0scm0saW0sb20sYW0sc20sY20sbG0sdW0sZG0sZm0scG0sbW07Y29uc3QgaG09QygpLmdldExvZ2dlcihcIkNvbnRleHRNZW51QWN0aW9uc1wiKTtmdW5jdGlvbiB2bShlKXtsZXR7bWVzc2FnZTp0fT1lO2NvbnN0W24scixpXT13cCh0LE5mLkNvbnRleHRNZW51KTtyZXR1cm4gcj8oMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTplbS5tZXNzYWdlQWN0aW9uLG9uQ2xpY2s6aX0sdm9pZCAwLG4/dG18fCh0bT0oMCxvLlopKCRwLHt9KSk6bm18fChubT0oMCxvLlopKEtwLHt9KSksKDAsby5aKShcInNwYW5cIix7fSx2b2lkIDAsbj9ybXx8KHJtPSgwLG8uWikodi5aLHtpZDpcInhndG1zWFwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiVW5zYXZlIGluIENoYXRcIn1dfSkpOmltfHwoaW09KDAsby5aKSh2Llose2lkOlwidkNRTGs5XCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJTYXZlIGluIENoYXRcIn1dfSkpKSk6bnVsbH1mdW5jdGlvbiBnbShlKXtsZXR7bWVzc2FnZTp0LHNlbGVjdGVkVGV4dDpufT1lO2NvbnN0IHI9RHAodCxobSxnbS5uYW1lLE5mLkNvbnRleHRNZW51LG4pO3JldHVybiByPygwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOmVtLm1lc3NhZ2VBY3Rpb24sb25DbGljazpyfSx2b2lkIDAsb218fChvbT0oMCxvLlopKEZwLHt9KSksYW18fChhbT0oMCxvLlopKFwic3BhblwiLHt9LHZvaWQgMCwoMCxvLlopKHYuWix7aWQ6XCJ3ZmNqSXpcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkNvcHkgVGV4dFwifV19KSkpKTpudWxsfWZ1bmN0aW9uIHltKGUpe2xldHttZXNzYWdlOnR9PWU7Y29uc3RbbixyXT1QcCh0LE5mLkNvbnRleHRNZW51KTtyZXR1cm4gbj9udWxsOigwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOmVtLm1lc3NhZ2VBY3Rpb24sb25DbGljazpyfSx2b2lkIDAsc218fChzbT0oMCxvLlopKGpwLHt9KSksY218fChjbT0oMCxvLlopKFwic3BhblwiLHt9LHZvaWQgMCwoMCxvLlopKHYuWix7aWQ6XCJtczFVTytcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlJlcGx5XCJ9XX0pKSkpfWZ1bmN0aW9uIEVtKGUpe2xldHttZXNzYWdlOnR9PWU7Y29uc3RbbixyXT1NcCh0LE5mLkNvbnRleHRNZW51KTtyZXR1cm4gbj8oMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTooMCxRLlopKGVtLm1lc3NhZ2VBY3Rpb24sZW0uZGVsZXRlQWN0aW9uKSxvbkNsaWNrOnJ9LHZvaWQgMCxsbXx8KGxtPSgwLG8uWikoR3Ase30pKSx1bXx8KHVtPSgwLG8uWikoXCJzcGFuXCIse30sdm9pZCAwLCgwLG8uWikodi5aLHtpZDpcIlphelJ5dlwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiRGVsZXRlXCJ9XX0pKSkpOm51bGx9ZnVuY3Rpb24gX20oZSl7bGV0e21lc3NhZ2U6dH09ZTtjb25zdFtuLHJdPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1lLm1ldGFkYXRhLnBsYXlhYmxlU25hcFN0YXRlPT09UGUuRVcuVklFV0VEUkVQTEFZQUJMRSx7cmVxdWVzdGVkUmVwbGF5U25hcEZyb21Db252OnJ9PVhsKCk7cmV0dXJuW24sKDAsZC51c2VDYWxsYmFjaykoKGFzeW5jKCk9Pnt0cnl7YXdhaXQgcihlLmRlc2NyaXB0b3IuY29udmVyc2F0aW9uSWQsZS5kZXNjcmlwdG9yLm1lc3NhZ2VJZCksd2YoXCJyZXF1ZXN0X3JlcGxheVwiLHQpfWNhdGNoKGUpe2IoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwicmVxdWVzdF9yZXBsYXlfc25hcF9mYWlsZWRcIn0pfX0pLFtyLGUuZGVzY3JpcHRvci5jb252ZXJzYXRpb25JZCxlLmRlc2NyaXB0b3IubWVzc2FnZUlkLHRdKV19KHQsTmYuQ29udGV4dE1lbnUpO3JldHVybiBuPygwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOmVtLm1lc3NhZ2VBY3Rpb24sb25DbGljazpyfSx2b2lkIDAsZG18fChkbT0oMCxvLlopKFhwLHt9KSksZm18fChmbT0oMCxvLlopKFwic3BhblwiLHt9LHZvaWQgMCwoMCxvLlopKHYuWix7aWQ6XCJJckU4R1hcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlJlcGxheVwifV19KSkpKTpudWxsfWZ1bmN0aW9uIEltKGUpe2xldHttZXNzYWdlOnR9PWU7Y29uc3Qgbj0oMCxkLnVzZUNhbGxiYWNrKSgoKCk9PkpTT04uc3RyaW5naWZ5KHQsKChlLHQpPT4oMCx6Lks4KSh0KT8oMCx6Lk1jKSh0KTpcImJpZ2ludFwiPT10eXBlb2YgdD9TdHJpbmcodCk6dCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXk/XCJbYnl0ZXNdXCI6dCksMikpLFt0XSk7cmV0dXJuKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6ZW0ubWVzc2FnZUFjdGlvbixvbkNsaWNrOigpPT57Y29uc29sZS5sb2cobigpKX19LHZvaWQgMCxwbXx8KHBtPSgwLG8uWikoVXAuWix7fSkpLG1tfHwobW09KDAsby5aKShcInNwYW5cIix7fSx2b2lkIDAsKDAsby5aKSh2Llose2lkOlwiNTBNdloyXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJJbnNwZWN0IE1lc3NhZ2VcIn1dfSkpKSl9Y29uc3QgU209e2JhY2tncm91bmQ6XCJNT0pDYVwiLGNvbnRleHRNZW51OlwiSXhhQl9cIix0b3BTZWN0aW9uOlwiRFB4a3dcIixib3R0b21TZWN0aW9uOlwiYzZPVjJcIn07dmFyIGJtPXtSRUFDVElPTlM6MCxTQVZFOjEsQ09QWToyLFJFUExZOjMsREVMRVRFOjQsUkVRVUVTVF9SRVBMQVk6NSxERUJVRzo2fTtmdW5jdGlvbiBUbShlKXtsZXR7bWVzc2FnZTp0LGNvb3JkczpuLG9uQ2xvc2U6cixhbGxvd2VkQWN0aW9uczppLHNlbGVjdGVkVGV4dDphPVwiXCJ9PWU7Y29uc3Qgcz0oMCxkLnVzZVJlZikobnVsbCksW2MsbF09KDAsZC51c2VTdGF0ZSkobnVsbCksdT0oMCxkLnVzZUNhbGxiYWNrKSgoZT0+e2UucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpLHIoKX0pLFtyXSk7KDAsZC51c2VFZmZlY3QpKCgoKT0+e2lmKHMuY3VycmVudCl7Y29uc3R7d2lkdGg6ZSxoZWlnaHQ6dH09cy5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCByPW5bMF0saT1uWzFdO2Urcj53aW5kb3cuaW5uZXJXaWR0aCYmKHItPWUpLHQraT53aW5kb3cuaW5uZXJIZWlnaHQmJihpLT10KSxsKHtsZWZ0T2Zmc2V0OnIsdG9wT2Zmc2V0Oml9KX19KSxbbl0pLF9lKFwibWVzc2FnZV9jb250ZXh0X21lbnVcIik7Y29uc3QgZj1pLmluY2x1ZGVzKGJtLlJFQUNUSU9OUyk/WygwLG8uWikoTnAse21lc3NhZ2U6dCxvbkZpbmlzaFNlbGVjdGluZzpyLGFjdGlvbk9yaWdpbjpOZi5Db250ZXh0TWVudX0sXCJjbS1yZWFjdGlvbi1zZWxlY3RvclwiKV06W10scD1bXTtyZXR1cm4gaS5pbmNsdWRlcyhibS5TQVZFKSYmcC5wdXNoKCgwLG8uWikodm0se21lc3NhZ2U6dH0sXCJjbS1zYXZlXCIpKSxpLmluY2x1ZGVzKGJtLlJFUExZKSYmcC5wdXNoKCgwLG8uWikoeW0se21lc3NhZ2U6dH0sXCJjbS1yZXBseVwiKSksaS5pbmNsdWRlcyhibS5DT1BZKSYmcC5wdXNoKCgwLG8uWikoZ20se3NlbGVjdGVkVGV4dDphLG1lc3NhZ2U6dH0sXCJjbS1jb3B5XCIpKSxpLmluY2x1ZGVzKGJtLkRFTEVURSkmJnAucHVzaCgoMCxvLlopKEVtLHttZXNzYWdlOnR9LFwiY20tZGVsZXRlXCIpKSxpLmluY2x1ZGVzKGJtLlJFUVVFU1RfUkVQTEFZKSYmcC5wdXNoKCgwLG8uWikoX20se21lc3NhZ2U6dH0sXCJjbS1yZXBsYXktc25hcFwiKSksaS5pbmNsdWRlcyhibS5ERUJVRykmJnAucHVzaCgoMCxvLlopKEltLHttZXNzYWdlOnR9LFwiY20tZGVidWdcIikpLGYubGVuZ3RofHxwLmxlbmd0aD8oMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpTbS5iYWNrZ3JvdW5kLG9uQ2xpY2s6cixvbkNvbnRleHRNZW51OnV9LHZvaWQgMCwoMCxxLmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpTbS5jb250ZXh0TWVudSxyZWY6cyxzdHlsZTp7bGVmdDpjPy5sZWZ0T2Zmc2V0Pz8wLHRvcDpjPy50b3BPZmZzZXQ/PzAsdmlzaWJpbGl0eTpjP1widmlzaWJsZVwiOlwiaGlkZGVuXCJ9LGNoaWxkcmVuOlsoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpTbS50b3BTZWN0aW9ufSx2b2lkIDAsZiksKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6U20uYm90dG9tU2VjdGlvbn0sdm9pZCAwLHApXX0pKTpudWxsfXZhciBDbT1uKDczOTM1KTtjb25zdCBBbT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInBvcnRhbC1jb250YWluZXJcIik7ZnVuY3Rpb24gUm0oZSl7bGV0e2NoaWxkcmVuOnR9PWU7cmV0dXJuIENtLmNyZWF0ZVBvcnRhbCh0LEFtKX1mdW5jdGlvbiBrbSgpe2xldHtvbk1vdXNlRW50ZXJDYWxsYmFjazplLG9uTW91c2VMZWF2ZUNhbGxiYWNrOnQsb25Gb2N1c0NhbGxiYWNrOm4sb25CbHVyQ2FsbGJhY2s6cn09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2NvbnN0W2ksb109KDAsZC51c2VTdGF0ZSkoITEpLFthLHNdPSgwLGQudXNlU3RhdGUpKCExKSxjPSgwLGQudXNlTWVtbykoKCgpPT4oe29uTW91c2VFbnRlcjp0PT57byghMCksZT8uKHQpfSxvbk1vdXNlTGVhdmU6ZT0+e28oITEpLHQ/LihlKX0sb25Gb2N1czplPT57cyghMCksbj8uKGUpfSxvbkJsdXI6ZT0+e3MoITEpLHI/LihlKX19KSksW2UsdCxuLHJdKTtyZXR1cm57aG92ZXJlZDppfHxhLGhvdmVyUHJvcHM6Y319Y29uc3QgT209e3dyYXBwZXI6XCJnUEFYa1wiLGJ1dHRvbjpcIk5jYVFIXCJ9O2Z1bmN0aW9uIE5tKGUpe2xldHtsYWJlbFRleHQ6dCxjaGlsZHJlbjpuLGRpc2FibGVkOnIsb25DbGljazppLHNldEhvdmVyZWRBY3Rpb25MYWJlbDphfT1lO2NvbnN0e2hvdmVyZWQ6cyxob3ZlclByb3BzOmN9PWttKCk7cmV0dXJuKDAsZC51c2VFZmZlY3QpKCgoKT0+e3MmJmEodCl9KSxbcyxhLHRdKSwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpPbS53cmFwcGVyfSx2b2lkIDAsKDAscS5qc3gpKFwiYnV0dG9uXCIsey4uLmMsdHlwZTpcImJ1dHRvblwiLG9uQ2xpY2s6ZT0+e2Uuc3RvcFByb3BhZ2F0aW9uKCksaSgpfSxkaXNhYmxlZDpyLGNsYXNzTmFtZTpPbS5idXR0b24sY2hpbGRyZW46bn0pKX12YXIgd207ZnVuY3Rpb24gRG0oKXtyZXR1cm4gRG09T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxEbS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y29uc3QgUG09ZT0+ZC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsRG0oe3dpZHRoOjI0LGhlaWdodDoyNCx2aWV3Qm94OlwiMCAwIDI0IDI0XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLHdtfHwod209ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTE5LjMwMiAzLjg3YS42Ny42NyAwIDEgMC0xLjMzOSAwdjEuNTRoLTEuNTRhLjY3LjY3IDAgMCAwIDAgMS4zNGgxLjU0djEuNTRhLjY3LjY3IDAgMCAwIDEuMzQgMFY2Ljc1aDEuNTRhLjY3LjY3IDAgMSAwIDAtMS4zNGgtMS41NFYzLjg3Wm0tNy4yOTguMDY2YzEuMTkgMCAyLjMyLjI1OSAzLjMzNy43MjQtLjM2My4yNzYtLjYxNy42ODktLjY4NSAxLjE2MWE2LjY5OSA2LjY5OSAwIDEgMCAzLjc3IDQuMjQ0IDEuNzk1IDEuNzk1IDAgMCAwIDEuMjkyLS4zNTUgOC4wMzggOC4wMzggMCAxIDEtNy43MTUtNS43NzRabS0zLjcgNi40ODVjMC0uNjY3LjQ3Mi0xLjI4MyAxLjExMS0xLjI4My42MzQgMCAxLjExMi42MTUgMS4xMTIgMS4yODMgMCAuNjY3LS40NzIgMS4yODMtMS4xMTIgMS4yODMtLjY0IDAtMS4xMTEtLjYxNi0xLjExMS0xLjI4M1ptNS4xNzIgMGMwLS42NjcuNDcyLTEuMjgzIDEuMTEyLTEuMjgzLjYzNCAwIDEuMTExLjYxNSAxLjExMSAxLjI4MyAwIC42NjctLjQ3MiAxLjI4My0xLjExMSAxLjI4My0uNjQgMC0xLjExMS0uNjE2LTEuMTExLTEuMjgzWm0uODc0IDMuOTk5YS41NDYuNTQ2IDAgMCAxIC43NzcuNzJsLS4wMDMuMDA1LS4wMjIuMDM4LS4wNDcuMDY2LS4wMDEuMDAyYy0uNjEzLjg0NS0xLjYgMS4zNzUtMy4wNDMgMS4zNzVzLTIuNDgtLjU1Mi0zLjA5LTEuNDMzYS41NDUuNTQ1IDAgMCAxIC43MjktLjc3NSA0LjU1MiA0LjU1MiAwIDAgMCA0LjcuMDAyWlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pKSk7dmFyIE1tO2Z1bmN0aW9uIExtKCl7cmV0dXJuIExtPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sTG0uYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IFVtPWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLExtKHt3aWR0aDoxLGhlaWdodDoxNCx2aWV3Qm94OlwiMCAwIDEgMTRcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLE1tfHwoTW09ZC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLHt3aWR0aDoxLGhlaWdodDoxNCxyeDouNX0pKSkseG09e2FjdGlvbk1lbnU6XCJnRnJ5VVwiLGRpdmlkZXI6XCJ4OUJDQVwifTt2YXIgRm0sQm0sVm0sR20sSG0sV207Y29uc3Qgam09QygpLmdldExvZ2dlcihcIk1lc3NhZ2VBY3Rpb25NZW51XCIpO2Z1bmN0aW9uIFptKGUpe2xldHttZXNzYWdlOnQsc2V0SG92ZXJlZEFjdGlvbkxhYmVsOm59PWU7Y29uc3Qgcj0oMCxtZS5aKSgpLFtpLGEsc109d3AodCxOZi5BY3Rpb25NZW51KTtpZighYSlyZXR1cm4gbnVsbDtjb25zdCBjPXIuZm9ybWF0TWVzc2FnZSh7aWQ6XCI4TElrUE9cIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlNhdmUgaW4gQ2hhdFwifV19KSxsPXIuZm9ybWF0TWVzc2FnZSh7aWQ6XCJNUEFGMDBcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlVuc2F2ZSBpbiBDaGF0XCJ9XX0pO3JldHVybigwLHEuanN4cykocS5GcmFnbWVudCx7Y2hpbGRyZW46WygwLG8uWikoVW0se2NsYXNzTmFtZTp4bS5kaXZpZGVyfSksKDAsby5aKShObSx7b25DbGljazpzLGxhYmVsVGV4dDppP2w6YyxzZXRIb3ZlcmVkQWN0aW9uTGFiZWw6bn0sdm9pZCAwLGk/Rm18fChGbT0oMCxvLlopKCRwLHt9KSk6Qm18fChCbT0oMCxvLlopKEtwLHt9KSkpXX0pfWZ1bmN0aW9uIHptKGUpe2xldHttZXNzYWdlOnQsc2V0SG92ZXJlZEFjdGlvbkxhYmVsOm59PWU7Y29uc3Qgcj0oMCxtZS5aKSgpLFtpLGFdPVBwKHQsTmYuQWN0aW9uTWVudSk7aWYoaSlyZXR1cm4gbnVsbDtpZih0Lm1lc3NhZ2VDb250ZW50Py5jb250ZW50KXRyeXtjb25zdCBlPVZzLkNvbnRlbnRzLmRlY29kZSh0Lm1lc3NhZ2VDb250ZW50LmNvbnRlbnQpO2lmKFwic25hcFJlcGx5XCI9PT1lLmNvbnRlbnQ/LiRjYXNlKXJldHVybiBudWxsfWNhdGNoKGUpe31yZXR1cm4oMCxxLmpzeHMpKHEuRnJhZ21lbnQse2NoaWxkcmVuOlsoMCxvLlopKFVtLHtjbGFzc05hbWU6eG0uZGl2aWRlcn0pLCgwLG8uWikoTm0se29uQ2xpY2s6YSxzZXRIb3ZlcmVkQWN0aW9uTGFiZWw6bixsYWJlbFRleHQ6ci5mb3JtYXRNZXNzYWdlKHtpZDpcImJFR0swQ1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiUmVwbHlcIn1dfSl9LHZvaWQgMCxWbXx8KFZtPSgwLG8uWikoanAse30pKSldfSl9ZnVuY3Rpb24gS20oZSl7bGV0e21lc3NhZ2U6dCxzZXRIb3ZlcmVkQWN0aW9uTGFiZWw6bn09ZTtjb25zdCByPSgwLG1lLlopKCksW2ksYV09TXAodCxOZi5BY3Rpb25NZW51KTtyZXR1cm4gaT8oMCxxLmpzeHMpKHEuRnJhZ21lbnQse2NoaWxkcmVuOlsoMCxvLlopKFVtLHtjbGFzc05hbWU6eG0uZGl2aWRlcn0pLCgwLG8uWikoTm0se29uQ2xpY2s6YSxzZXRIb3ZlcmVkQWN0aW9uTGFiZWw6bixsYWJlbFRleHQ6ci5mb3JtYXRNZXNzYWdlKHtpZDpcIjc3TktmblwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiRGVsZXRlXCJ9XX0pfSx2b2lkIDAsR218fChHbT0oMCxvLlopKEdwLHt9KSkpXX0pOm51bGx9ZnVuY3Rpb24gWW0oZSl7bGV0e21lc3NhZ2U6dCxzZXRIb3ZlcmVkQWN0aW9uTGFiZWw6bn09ZTtjb25zdCByPSgwLG1lLlopKCksaT1EcCh0LGptLFltLm5hbWUsTmYuQWN0aW9uTWVudSk7cmV0dXJuIGk/KDAscS5qc3hzKShxLkZyYWdtZW50LHtjaGlsZHJlbjpbKDAsby5aKShVbSx7Y2xhc3NOYW1lOnhtLmRpdmlkZXJ9KSwoMCxvLlopKE5tLHtvbkNsaWNrOmksc2V0SG92ZXJlZEFjdGlvbkxhYmVsOm4sbGFiZWxUZXh0OnIuZm9ybWF0TWVzc2FnZSh7aWQ6XCIxSDV6SkNcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkNvcHkgVGV4dFwifV19KX0sdm9pZCAwLEhtfHwoSG09KDAsby5aKShGcCx7fSkpKV19KTpudWxsfWZ1bmN0aW9uIHFtKGUpe2xldHttZXNzYWdlOnQsc2hvd2luZ1JlYWN0aW9uUGlja2VyOm4sc2V0U2hvd2luZ1JlYWN0aW9uUGlja2VyOnIsc2V0SG92ZXJlZEFjdGlvbkxhYmVsOmksYWxsb3dlZEFjdGlvbnM6YX09ZTtjb25zdCBzPSgwLG1lLlopKCkse2hvdmVyZWQ6Yyxob3ZlclByb3BzOmx9PWttKCk7KDAsZC51c2VFZmZlY3QpKCgoKT0+e2N8fGkodm9pZCAwKX0pLFtjLGldKTtsZXQgdT1bXTtyZXR1cm4gbj91PVsoMCxvLlopKE5wLHttZXNzYWdlOnQsb25GaW5pc2hTZWxlY3Rpbmc6KCk9PnIoITEpLGFjdGlvbk9yaWdpbjpOZi5BY3Rpb25NZW51fSxcImFtLXJlYWN0aW9uLXNlbGVjdG9yXCIpXTooYS5pbmNsdWRlcyhibS5SRUFDVElPTlMpJiZ1LnB1c2goKDAsby5aKShObSx7b25DbGljazooKT0+e3IoITApLGkodm9pZCAwKX0sbGFiZWxUZXh0OnMuZm9ybWF0TWVzc2FnZSh7aWQ6XCJDWGtma3ZcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlJlYWN0XCJ9XX0pLHNldEhvdmVyZWRBY3Rpb25MYWJlbDppfSxcImFtLXJlYWN0aW9ucy1idXR0b25cIixXbXx8KFdtPSgwLG8uWikoUG0se30pKSkpLGEuaW5jbHVkZXMoYm0uU0FWRSkmJnUucHVzaCgoMCxvLlopKFptLHttZXNzYWdlOnQsc2V0SG92ZXJlZEFjdGlvbkxhYmVsOml9LFwiYW0tc2F2ZVwiKSksYS5pbmNsdWRlcyhibS5SRVBMWSkmJnUucHVzaCgoMCxvLlopKHptLHttZXNzYWdlOnQsc2V0SG92ZXJlZEFjdGlvbkxhYmVsOml9LFwiYW0tcmVwbHlcIikpLGEuaW5jbHVkZXMoYm0uQ09QWSkmJnUucHVzaCgoMCxvLlopKFltLHttZXNzYWdlOnQsc2V0SG92ZXJlZEFjdGlvbkxhYmVsOml9LFwiYW0tY29weVwiKSksYS5pbmNsdWRlcyhibS5ERUxFVEUpJiZ1LnB1c2goKDAsby5aKShLbSx7bWVzc2FnZTp0LHNldEhvdmVyZWRBY3Rpb25MYWJlbDppfSxcImFtLWRlbGV0ZVwiKSkpLHUubGVuZ3RoPygwLHEuanN4KShcImRpdlwiLHsuLi5sLGNsYXNzTmFtZTp4bS5hY3Rpb25NZW51LGNoaWxkcmVuOnV9KTpudWxsfWNvbnN0IFhtPXtzdGF0dXM6XCJpanl4VVwifTtmdW5jdGlvbiBRbShlKXtsZXR7c2VuZGVySWQ6dH09ZTtjb25zdCBuPVhjKCkscj1SbCh0KTtyZXR1cm4gbj09PXQ/KDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6WG0uc3RhdHVzfSx2b2lkIDAsKDAsby5aKSh2Llose2lkOlwiSW9IZnIxXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJZT1UgSU5WSVRFRCBcIn0se3R5cGU6MSx2YWx1ZTpcInVzZXJEaXNwbGF5TmFtZVwifSx7dHlwZTowLHZhbHVlOlwiIFRPIEpPSU4gRkFNSUxZIENFTlRFUlwifV0sdmFsdWVzOnt1c2VyRGlzcGxheU5hbWU6cn19KSk6KDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6WG0uc3RhdHVzfSx2b2lkIDAsKDAsby5aKSh2Llose2lkOlwiN1psWW52XCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjEsdmFsdWU6XCJ1c2VyRGlzcGxheU5hbWVcIn0se3R5cGU6MCx2YWx1ZTpcIiBIQVMgSU5WSVRFRCBZT1UgVE8gRkFNSUxZIENFTlRFUi4gT1BFTiBZT1VSIFBIT05FIFRPIFZJRVcgVEhFIElOVklURS5cIn1dLHZhbHVlczp7dXNlckRpc3BsYXlOYW1lOnJ9fSkpfXZhciBKbT1uKDE5MTQ0KSwkbT1uKDUxMjc4KSxlaD1uKDcyMzU5KTtmdW5jdGlvbiB0aCgpe3JldHVybigwLCRtLm0pKChlPT5lKSl9dmFyIG5oLHJoPW4oODM5MjcpO2Z1bmN0aW9uIGloKCl7cmV0dXJuIGloPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0saWguYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IG9oPWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLGloKHt3aWR0aDoxNixoZWlnaHQ6MjAsdmlld0JveDpcIjAgMCAxNiAyMFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSxuaHx8KG5oPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7b3BhY2l0eTouOSxmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTEzLjg2MiA3LjYzYzEuNjA3Ljk2MiAxLjYwNyAzLjI5MSAwIDQuMjU0TDIuMDM2IDE4Ljk3QTEuMjQgMS4yNCAwIDAgMSAuMTYgMTcuOTA3di0xNi4zQTEuMjQgMS4yNCAwIDAgMSAyLjAzNi41NDNsMTEuODI2IDcuMDg2WlwiLGZpbGw6XCIjZmZmXCJ9KSkpO3ZhciBhaCxzaDtmdW5jdGlvbiBjaCgpe3JldHVybiBjaD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGNoLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBsaD1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIixjaCh7d2lkdGg6MjAsaGVpZ2h0OjIwLHZpZXdCb3g6XCIwIDAgMTIgMTJcIixmaWxsOlwibm9uZVwiLHN0cm9rZTpcImN1cnJlbnRDb2xvclwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksYWh8fChhaD1kLmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIix7Y3g6NixjeTo2LHI6NSxzdHJva2VMaW5lY2FwOlwicm91bmRcIixzdHJva2VEYXNoYXJyYXk6MzEuNDE2fSxkLmNyZWF0ZUVsZW1lbnQoXCJhbmltYXRlVHJhbnNmb3JtXCIse2F0dHJpYnV0ZVR5cGU6XCJ4bWxcIixhdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInJvdGF0ZVwiLGZyb206XCIzNjAgNiA2XCIsdG86XCIwIDYgNlwiLGR1cjpcIjFzXCIsYWRkaXRpdmU6XCJzdW1cIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn0pLGQuY3JlYXRlRWxlbWVudChcImFuaW1hdGVcIix7YXR0cmlidXRlTmFtZTpcInN0cm9rZS1kYXNob2Zmc2V0XCIsYXR0cmlidXRlVHlwZTpcInhtbFwiLGZyb206MzEuNDE2LHRvOjEyLjU2NixkdXI6XCIwLjlzXCIsZmlsbDpcImZyZWV6ZVwifSksZC5jcmVhdGVFbGVtZW50KFwiYW5pbWF0ZVwiLHthdHRyaWJ1dGVOYW1lOlwic3Ryb2tlLXdpZHRoXCIsYXR0cmlidXRlVHlwZTpcInhtbFwiLGZyb206MCx0bzoxLGR1cjpcIjAuNXNcIixmaWxsOlwiZnJlZXplXCJ9KSkpLHNofHwoc2g9ZC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIse2N4OjYsY3k6NixyOjMsc3Ryb2tlTGluZWNhcDpcInJvdW5kXCIsc3Ryb2tlRGFzaGFycmF5OjExLjMxfSxkLmNyZWF0ZUVsZW1lbnQoXCJhbmltYXRlVHJhbnNmb3JtXCIse2F0dHJpYnV0ZVR5cGU6XCJ4bWxcIixhdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInJvdGF0ZVwiLGZyb206XCIwIDYgNlwiLHRvOlwiMzYwIDYgNlwiLGR1cjpcIjFzXCIsYWRkaXRpdmU6XCJzdW1cIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn0pLGQuY3JlYXRlRWxlbWVudChcImFuaW1hdGVcIix7YXR0cmlidXRlTmFtZTpcInN0cm9rZS1kYXNob2Zmc2V0XCIsYXR0cmlidXRlVHlwZTpcInhtbFwiLGZyb206MzEuNDE2LHRvOjEyLjU2NixkdXI6XCIwLjlzXCIsZmlsbDpcImZyZWV6ZVwifSksZC5jcmVhdGVFbGVtZW50KFwiYW5pbWF0ZVwiLHthdHRyaWJ1dGVOYW1lOlwic3Ryb2tlLXdpZHRoXCIsYXR0cmlidXRlVHlwZTpcInhtbFwiLGZyb206MCx0bzoxLGR1cjpcIjAuNXNcIixmaWxsOlwiZnJlZXplXCJ9KSkpKTt2YXIgdWgsZGg7ZnVuY3Rpb24gZmgoKXtyZXR1cm4gZmg9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxmaC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y29uc3QgcGg9ZT0+ZC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsZmgoe3dpZHRoOjE2LGhlaWdodDoxNix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsZmlsbDpcIiMzQTNFNDFcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLHVofHwodWg9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTYuNzY0IDMuNjI0QS45MDYuOTA2IDAgMCAxIDcuMjIgMy41Yy40NjQgMCAuODkxLjM1OC44OTEuODYxdjcuMjc4YzAgLjUwMy0uNDI3Ljg2MS0uODkuODYxYS45MDYuOTA2IDAgMCAxLS40NTctLjEyNGwtMy4wOTctMS43OThIMS44ODljLS40OSAwLS44ODktLjM4NC0uODg5LS44NlY2LjI4MmMwLS40NzUuMzk4LS44Ni44ODktLjg2aDEuNzc4bDMuMDk3LTEuNzk3Wm0tLjQzIDYuNDk3VjUuODc5TDQuMTU4IDcuMTRIMi43Nzh2MS43MmgxLjM4MWwuNDIyLjI0NSAxLjc1MiAxLjAxNlpcIn0pKSxkaHx8KGRoPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIk0xNC44MDUgNi43MzYgMTMuNDk4IDhsMS4zMDcgMS4yNjNjLjI2LjI1Mi4yNi42NiAwIC45MTEtLjEzMS4xMjctLjMuMTktLjQ3Mi4xOWEuNjc0LjY3NCAwIDAgMS0uNDcxLS4xOWwtMS4zMDctMS4yNjItMS4zMDYgMS4yNjJjLS4xMy4xMjctLjMuMTktLjQ3Mi4xOWEuNjc0LjY3NCAwIDAgMS0uNDctLjE5LjYyOS42MjkgMCAwIDEgMC0uOTFMMTEuNjEyIDhsLTEuMzA3LTEuMjY0YS42MjkuNjI5IDAgMCAxIDAtLjkxLjY4My42ODMgMCAwIDEgLjk0MyAwbDEuMzA2IDEuMjYyIDEuMzA3LTEuMjYzYS42ODMuNjgzIDAgMCAxIC45NDMgMGMuMjYuMjUyLjI2LjY2IDAgLjkxMVpcIn0pKSk7dmFyIG1oO2Z1bmN0aW9uIGhoKCl7cmV0dXJuIGhoPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0saGguYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IHZoPWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLGhoKHt3aWR0aDoyMixoZWlnaHQ6MTgsdmlld0JveDpcIjAgMCAyMiAxOFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSxtaHx8KG1oPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIm0xMC42NzggMTQuMTY2LjAwMi0xLjI2N1YzLjQ3MmwtLjI1LjI1TDkuMTk3IDQuOTZ2LjAwMUw3Ljk2MiA2LjJsLS40MDcuNDA4LS4xNTQuMTU1LS4zNDYuMzQ2SDMuMzQyYTIuNzIzIDIuNzIzIDAgMCAwIC4wMDkuMjdjLjAwMy4wNTUuMDA2LjA5OS4wMS4xNHYzLjA4N2MuMDg0LjAwMy4yLjAwNC4zNDUuMDAzLjI5IDAgLjY4Ni0uMDA2IDEuMTYyLS4wMTVhMjAxLjk4IDIwMS45OCAwIDAgMCAxLjM2OS0uMDMzbC4zMjktLjAxaC40OWwuMTA3LjEwOC4yMzkuMjR2LS4wMDFsMy4yNzYgMy4yNjhaTTMuMzYgMTAuNjQydi4xM2MwLS4wNjguMDA2LS4xMDcgMC0uMTNabS0uMTE4LS4wNDFoLS4wMDhsLjAyMS4wMDEtLjAxMy0uMDAxWm0yLjgyMyAyLjMwNC0zLjQyMy4wMTFjLS42NjggMC0xLjIyOS0uMzQ0LTEuNDk0LS45MmExLjY0NyAxLjY0NyAwIDAgMS0uMTUyLS43MjZWNi40MzZhMS42NDYgMS42NDYgMCAwIDEgLjE1Mi0uNzcxYy4yNjUtLjU3NS44MjYtLjkyIDEuNDk0LS45Mkg2LjA1TDEwLjAyNS43OTZsLjA2LS4wNTVjLjEtLjA4NC4yMTYtLjE2MS4zNDctLjIyOS41ODMtLjMwMyAxLjIwNS0uMjk0IDEuNzUuMDQxLjM0Mi4yMTEuNTg0LjUyNy43MjguOTQuMDg3LjI1Mi4xMzEuNTA4LjEzNC43N1YxNS40MWEyLjM5MyAyLjM5MyAwIDAgMS0uMTM0Ljc1N2MtLjE0NC40MTMtLjM4Ni43My0uNzI4Ljk0LS41NDUuMzM1LTEuMTY3LjM0NC0xLjc1LjA0MWExLjg3NCAxLjg3NCAwIDAgMS0uMzU4LS4yMzlsLS4wNi0uMDU1LTMuOTQ5LTMuOTVabTguMzg4LTUuNjNhMS4xODIgMS4xODIgMCAxIDEgMi4xMTItMS4wNjJjLjExNi4yMy4yMzguNTUuMzQ0LjkwNC41MjYgMS43NTIuNDE5IDMuNDYyLS4zMzggNS4wMDZhMS4xODIgMS4xODIgMCAxIDEtMi4xMjQtMS4wNGMuNDg2LS45OTEuNTUtMi4xMTIuMTk4LTMuMjg3YTQuNTUgNC41NSAwIDAgMC0uMTkyLS41MjJabTMuMDkgNS44NTctLjAxOC0uMDEzYzEuMzMzLTIuMDY0IDEuNTEtNC4zOC41NTctNi44NGE4LjQwNyA4LjQwNyAwIDAgMC0uNC0uODg1IDQuNDcxIDQuNDcxIDAgMCAwLS4xNTctLjI3NiAxLjE4MiAxLjE4MiAwIDEgMSAxLjk4Ny0xLjI4M2MuMjUzLjM5Mi41MzEuOTYuNzc1IDEuNTkgMS4yNDEgMy4yMDMuOTYyIDYuMjg1LS44ODUgOS4xMTNsLS4wMjQuMDM3LS4wMzguMDIyYy0uMDY1LjAzNy0uMTczLjA5LS4zMDguMTQzYTIuMDIgMi4wMiAwIDAgMS0uNTYzLjE0LjkyOC45MjggMCAwIDEtLjU5Mi0uMTI2Yy0uNTQtLjM1LS42NjQtMS4wMTQtLjMzMy0xLjYyMVpcIixmaWxsOlwiI2ZmZlwiLHN0cm9rZTpcIiMyQzMxMzdcIixzdHJva2VPcGFjaXR5Oi40MDQsc3Ryb2tlV2lkdGg6LjMyfSkpKTt2YXIgZ2g7ZnVuY3Rpb24geWgoKXtyZXR1cm4geWg9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSx5aC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y29uc3QgRWg9ZT0+ZC5jcmVhdGVFbGVtZW50KFwic3ZnXCIseWgoe3dpZHRoOjE2LGhlaWdodDoxNix2aWV3Qm94OlwiMCAwIDE2IDE2XCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSxnaHx8KGdoPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIk00IDEzLjI1YzAgLjQxNS4zNzMuNzUuODM1Ljc1LjQ2MSAwIC44MzQtLjMzNS44MzQtLjc1VjIuNzVjMC0uNDE1LS4zNzMtLjc1LS44MzQtLjc1QzQuMzczIDIgNCAyLjMzNSA0IDIuNzV2MTAuNVpNMTAuMzMgMTMuMjVjMCAuNDE1LjM3NC43NS44MzUuNzUuNDYyIDAgLjgzNS0uMzM1LjgzNS0uNzVWMi43NWMwLS40MTUtLjM3My0uNzUtLjgzNS0uNzUtLjQ2MSAwLS44MzQuMzM1LS44MzQuNzV2MTAuNVpcIn0pKSk7dmFyIF9oO2Z1bmN0aW9uIEloKCl7cmV0dXJuIEloPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sSWguYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IFNoPWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLEloKHt3aWR0aDoyMSxoZWlnaHQ6MjYsdmlld0JveDpcIjAgMCAyMSAyNlwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSxfaHx8KF9oPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk0xOS41ODYgMTAuOTdjMS4yOTYuNzc3IDEuMjk2IDIuNjU1IDAgMy40MzFMMS42NzggMjUuMTMzYTEgMSAwIDAgMS0xLjUxNC0uODU4VjEuMDk3QTEgMSAwIDAgMSAxLjY3OC4yMzlMMTkuNTg2IDEwLjk3WlwiLGZpbGw6XCIjZmZmXCJ9KSkpO3ZhciBiaD1uKDgxOTA3KSxUaD1uKDQxNjA5KSxDaD1uLm4oVGgpLEFoPW4oMzk2OTMpLFJoPW4ubihBaCk7Y29uc3Qga2g9KCk9Pi9bIyowLTldXFx1RkUwRj9cXHUyMEUzfFtcXHhBOVxceEFFXFx1MjAzQ1xcdTIwNDlcXHUyMTIyXFx1MjEzOVxcdTIxOTQtXFx1MjE5OVxcdTIxQTlcXHUyMUFBXFx1MjMxQVxcdTIzMUJcXHUyMzI4XFx1MjNDRlxcdTIzRUQtXFx1MjNFRlxcdTIzRjFcXHUyM0YyXFx1MjNGOC1cXHUyM0ZBXFx1MjRDMlxcdTI1QUFcXHUyNUFCXFx1MjVCNlxcdTI1QzBcXHUyNUZCXFx1MjVGQ1xcdTI1RkVcXHUyNjAwLVxcdTI2MDRcXHUyNjBFXFx1MjYxMVxcdTI2MTRcXHUyNjE1XFx1MjYxOFxcdTI2MjBcXHUyNjIyXFx1MjYyM1xcdTI2MjZcXHUyNjJBXFx1MjYyRVxcdTI2MkZcXHUyNjM4LVxcdTI2M0FcXHUyNjQwXFx1MjY0MlxcdTI2NDgtXFx1MjY1M1xcdTI2NUZcXHUyNjYwXFx1MjY2M1xcdTI2NjVcXHUyNjY2XFx1MjY2OFxcdTI2N0JcXHUyNjdFXFx1MjY3RlxcdTI2OTJcXHUyNjk0LVxcdTI2OTdcXHUyNjk5XFx1MjY5QlxcdTI2OUNcXHUyNkEwXFx1MjZBN1xcdTI2QUFcXHUyNkIwXFx1MjZCMVxcdTI2QkRcXHUyNkJFXFx1MjZDNFxcdTI2QzhcXHUyNkNGXFx1MjZEMVxcdTI2RDNcXHUyNkU5XFx1MjZGMC1cXHUyNkY1XFx1MjZGN1xcdTI2RjhcXHUyNkZBXFx1MjcwMlxcdTI3MDhcXHUyNzA5XFx1MjcwRlxcdTI3MTJcXHUyNzE0XFx1MjcxNlxcdTI3MURcXHUyNzIxXFx1MjczM1xcdTI3MzRcXHUyNzQ0XFx1Mjc0N1xcdTI3NTdcXHUyNzYzXFx1MjdBMVxcdTI5MzRcXHUyOTM1XFx1MkIwNS1cXHUyQjA3XFx1MkIxQlxcdTJCMUNcXHUyQjU1XFx1MzAzMFxcdTMwM0RcXHUzMjk3XFx1MzI5OV1cXHVGRTBGP3xbXFx1MjYxRFxcdTI3MENcXHUyNzBEXSg/OlxcdUZFMEZ8XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT98W1xcdTI3MEFcXHUyNzBCXSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/fFtcXHUyM0U5LVxcdTIzRUNcXHUyM0YwXFx1MjNGM1xcdTI1RkRcXHUyNjkzXFx1MjZBMVxcdTI2QUJcXHUyNkM1XFx1MjZDRVxcdTI2RDRcXHUyNkVBXFx1MjZGRFxcdTI3MDVcXHUyNzI4XFx1Mjc0Q1xcdTI3NEVcXHUyNzUzLVxcdTI3NTVcXHUyNzk1LVxcdTI3OTdcXHUyN0IwXFx1MjdCRlxcdTJCNTBdfFxcdTI2RjkoPzpcXHVGRTBGfFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFxcdTI3NjRcXHVGRTBGPyg/OlxcdTIwMEQoPzpcXHVEODNEXFx1REQyNXxcXHVEODNFXFx1REU3OSkpP3xcXHVEODNDKD86W1xcdURDMDRcXHVERDcwXFx1REQ3MVxcdUREN0VcXHVERDdGXFx1REUwMlxcdURFMzdcXHVERjIxXFx1REYyNC1cXHVERjJDXFx1REYzNlxcdURGN0RcXHVERjk2XFx1REY5N1xcdURGOTktXFx1REY5QlxcdURGOUVcXHVERjlGXFx1REZDRFxcdURGQ0VcXHVERkQ0LVxcdURGREZcXHVERkY1XFx1REZGN11cXHVGRTBGP3xbXFx1REY4NVxcdURGQzJcXHVERkM3XSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/fFtcXHVERkMzXFx1REZDNFxcdURGQ0FdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98W1xcdURGQ0JcXHVERkNDXSg/OlxcdUZFMEZ8XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98W1xcdURDQ0ZcXHVERDhFXFx1REQ5MS1cXHVERDlBXFx1REUwMVxcdURFMUFcXHVERTJGXFx1REUzMi1cXHVERTM2XFx1REUzOC1cXHVERTNBXFx1REU1MFxcdURFNTFcXHVERjAwLVxcdURGMjBcXHVERjJELVxcdURGMzVcXHVERjM3LVxcdURGN0NcXHVERjdFLVxcdURGODRcXHVERjg2LVxcdURGOTNcXHVERkEwLVxcdURGQzFcXHVERkM1XFx1REZDNlxcdURGQzhcXHVERkM5XFx1REZDRi1cXHVERkQzXFx1REZFMC1cXHVERkYwXFx1REZGOC1cXHVERkZGXXxcXHVEREU2XFx1RDgzQ1tcXHVEREU4LVxcdURERUNcXHVEREVFXFx1RERGMVxcdURERjJcXHVEREY0XFx1RERGNi1cXHVEREZBXFx1RERGQ1xcdURERkRcXHVEREZGXXxcXHVEREU3XFx1RDgzQ1tcXHVEREU2XFx1RERFN1xcdURERTktXFx1RERFRlxcdURERjEtXFx1RERGNFxcdURERjYtXFx1RERGOVxcdURERkJcXHVEREZDXFx1RERGRVxcdURERkZdfFxcdURERThcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFOVxcdURERUItXFx1RERFRVxcdURERjAtXFx1RERGNVxcdURERjdcXHVEREZBLVxcdURERkZdfFxcdURERTlcXHVEODNDW1xcdURERUFcXHVEREVDXFx1RERFRlxcdURERjBcXHVEREYyXFx1RERGNFxcdURERkZdfFxcdURERUFcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFQVxcdURERUNcXHVEREVEXFx1RERGNy1cXHVEREZBXXxcXHVEREVCXFx1RDgzQ1tcXHVEREVFLVxcdURERjBcXHVEREYyXFx1RERGNFxcdURERjddfFxcdURERUNcXHVEODNDW1xcdURERTZcXHVEREU3XFx1RERFOS1cXHVEREVFXFx1RERGMS1cXHVEREYzXFx1RERGNS1cXHVEREZBXFx1RERGQ1xcdURERkVdfFxcdURERURcXHVEODNDW1xcdURERjBcXHVEREYyXFx1RERGM1xcdURERjdcXHVEREY5XFx1RERGQV18XFx1RERFRVxcdUQ4M0NbXFx1RERFOC1cXHVEREVBXFx1RERGMS1cXHVEREY0XFx1RERGNi1cXHVEREY5XXxcXHVEREVGXFx1RDgzQ1tcXHVEREVBXFx1RERGMlxcdURERjRcXHVEREY1XXxcXHVEREYwXFx1RDgzQ1tcXHVEREVBXFx1RERFQy1cXHVEREVFXFx1RERGMlxcdURERjNcXHVEREY1XFx1RERGN1xcdURERkNcXHVEREZFXFx1RERGRl18XFx1RERGMVxcdUQ4M0NbXFx1RERFNi1cXHVEREU4XFx1RERFRVxcdURERjBcXHVEREY3LVxcdURERkJcXHVEREZFXXxcXHVEREYyXFx1RDgzQ1tcXHVEREU2XFx1RERFOC1cXHVEREVEXFx1RERGMC1cXHVEREZGXXxcXHVEREYzXFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERUEtXFx1RERFQ1xcdURERUVcXHVEREYxXFx1RERGNFxcdURERjVcXHVEREY3XFx1RERGQVxcdURERkZdfFxcdURERjRcXHVEODNDXFx1RERGMnxcXHVEREY1XFx1RDgzQ1tcXHVEREU2XFx1RERFQS1cXHVEREVEXFx1RERGMC1cXHVEREYzXFx1RERGNy1cXHVEREY5XFx1RERGQ1xcdURERkVdfFxcdURERjZcXHVEODNDXFx1RERFNnxcXHVEREY3XFx1RDgzQ1tcXHVEREVBXFx1RERGNFxcdURERjhcXHVEREZBXFx1RERGQ118XFx1RERGOFxcdUQ4M0NbXFx1RERFNi1cXHVEREVBXFx1RERFQy1cXHVEREY0XFx1RERGNy1cXHVEREY5XFx1RERGQlxcdURERkQtXFx1RERGRl18XFx1RERGOVxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREU5XFx1RERFQi1cXHVEREVEXFx1RERFRi1cXHVEREY0XFx1RERGN1xcdURERjlcXHVEREZCXFx1RERGQ1xcdURERkZdfFxcdURERkFcXHVEODNDW1xcdURERTZcXHVEREVDXFx1RERGMlxcdURERjNcXHVEREY4XFx1RERGRVxcdURERkZdfFxcdURERkJcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFQVxcdURERUNcXHVEREVFXFx1RERGM1xcdURERkFdfFxcdURERkNcXHVEODNDW1xcdURERUJcXHVEREY4XXxcXHVEREZEXFx1RDgzQ1xcdURERjB8XFx1RERGRVxcdUQ4M0NbXFx1RERFQVxcdURERjldfFxcdURERkZcXHVEODNDW1xcdURERTZcXHVEREYyXFx1RERGQ118XFx1REZGM1xcdUZFMEY/KD86XFx1MjAwRCg/OlxcdTI2QTdcXHVGRTBGP3xcXHVEODNDXFx1REYwOCkpP3xcXHVERkY0KD86XFx1MjAwRFxcdTI2MjBcXHVGRTBGP3xcXHVEQjQwXFx1REM2N1xcdURCNDBcXHVEQzYyXFx1REI0MCg/OlxcdURDNjVcXHVEQjQwXFx1REM2RVxcdURCNDBcXHVEQzY3fFxcdURDNzNcXHVEQjQwXFx1REM2M1xcdURCNDBcXHVEQzc0fFxcdURDNzdcXHVEQjQwXFx1REM2Q1xcdURCNDBcXHVEQzczKVxcdURCNDBcXHVEQzdGKT8pfFxcdUQ4M0QoPzpbXFx1REMwOFxcdURDMjZdKD86XFx1MjAwRFxcdTJCMUIpP3xbXFx1REMzRlxcdURDRkRcXHVERDQ5XFx1REQ0QVxcdURENkZcXHVERDcwXFx1REQ3M1xcdURENzYtXFx1REQ3OVxcdUREODdcXHVERDhBLVxcdUREOERcXHVEREE1XFx1RERBOFxcdUREQjFcXHVEREIyXFx1RERCQ1xcdUREQzItXFx1RERDNFxcdURERDEtXFx1REREM1xcdUREREMtXFx1RERERVxcdURERTFcXHVEREUzXFx1RERFOFxcdURERUZcXHVEREYzXFx1RERGQVxcdURFQ0JcXHVERUNELVxcdURFQ0ZcXHVERUUwLVxcdURFRTVcXHVERUU5XFx1REVGMFxcdURFRjNdXFx1RkUwRj98W1xcdURDNDJcXHVEQzQzXFx1REM0Ni1cXHVEQzUwXFx1REM2NlxcdURDNjdcXHVEQzZCLVxcdURDNkRcXHVEQzcyXFx1REM3NC1cXHVEQzc2XFx1REM3OFxcdURDN0NcXHVEQzgzXFx1REM4NVxcdURDOEZcXHVEQzkxXFx1RENBQVxcdUREN0FcXHVERDk1XFx1REQ5NlxcdURFNENcXHVERTRGXFx1REVDMFxcdURFQ0NdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT98W1xcdURDNkVcXHVEQzcwXFx1REM3MVxcdURDNzNcXHVEQzc3XFx1REM4MVxcdURDODJcXHVEQzg2XFx1REM4N1xcdURFNDUtXFx1REU0N1xcdURFNEJcXHVERTREXFx1REU0RVxcdURFQTNcXHVERUI0LVxcdURFQjZdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98W1xcdURENzRcXHVERDkwXSg/OlxcdUZFMEZ8XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT98W1xcdURDMDAtXFx1REMwN1xcdURDMDktXFx1REMxNFxcdURDMTYtXFx1REMyNVxcdURDMjctXFx1REMzQVxcdURDM0MtXFx1REMzRVxcdURDNDBcXHVEQzQ0XFx1REM0NVxcdURDNTEtXFx1REM2NVxcdURDNkFcXHVEQzc5LVxcdURDN0JcXHVEQzdELVxcdURDODBcXHVEQzg0XFx1REM4OC1cXHVEQzhFXFx1REM5MFxcdURDOTItXFx1RENBOVxcdURDQUItXFx1RENGQ1xcdURDRkYtXFx1REQzRFxcdURENEItXFx1REQ0RVxcdURENTAtXFx1REQ2N1xcdUREQTRcXHVEREZCLVxcdURFMkRcXHVERTJGLVxcdURFMzRcXHVERTM3LVxcdURFNDRcXHVERTQ4LVxcdURFNEFcXHVERTgwLVxcdURFQTJcXHVERUE0LVxcdURFQjNcXHVERUI3LVxcdURFQkZcXHVERUMxLVxcdURFQzVcXHVERUQwLVxcdURFRDJcXHVERUQ1LVxcdURFRDdcXHVERURDLVxcdURFREZcXHVERUVCXFx1REVFQ1xcdURFRjQtXFx1REVGQ1xcdURGRTAtXFx1REZFQlxcdURGRjBdfFxcdURDMTUoPzpcXHUyMDBEXFx1RDgzRVxcdUREQkEpP3xcXHVEQzNCKD86XFx1MjAwRFxcdTI3NDRcXHVGRTBGPyk/fFxcdURDNDFcXHVGRTBGPyg/OlxcdTIwMERcXHVEODNEXFx1RERFOFxcdUZFMEY/KT98XFx1REM2OCg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86XFx1REM4QlxcdTIwMERcXHVEODNEKT9cXHVEQzY4fFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldXFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzY2KD86XFx1MjAwRFxcdUQ4M0RcXHVEQzY2KT98XFx1REM2Nyg/OlxcdTIwMERcXHVEODNEW1xcdURDNjZcXHVEQzY3XSk/KXxbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEQzY2KD86XFx1MjAwRFxcdUQ4M0RcXHVEQzY2KT98XFx1REM2Nyg/OlxcdTIwMERcXHVEODNEW1xcdURDNjZcXHVEQzY3XSk/KXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQyg/OlxcdURGRkIoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF18XFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NbXFx1REZGQy1cXHVERkZGXSkpKT98XFx1REZGQyg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86XFx1REM4QlxcdTIwMERcXHVEODNEKT9cXHVEQzY4XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4XFx1RDgzQ1tcXHVERkZCXFx1REZGRC1cXHVERkZGXSkpKT98XFx1REZGRCg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86XFx1REM4QlxcdTIwMERcXHVEODNEKT9cXHVEQzY4XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4XFx1RDgzQ1tcXHVERkZCXFx1REZGQ1xcdURGRkVcXHVERkZGXSkpKT98XFx1REZGRSg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86XFx1REM4QlxcdTIwMERcXHVEODNEKT9cXHVEQzY4XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4XFx1RDgzQ1tcXHVERkZCLVxcdURGRkRcXHVERkZGXSkpKT98XFx1REZGRig/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86XFx1REM4QlxcdTIwMERcXHVEODNEKT9cXHVEQzY4XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4XFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdKSkpPykpP3xcXHVEQzY5KD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1tcXHVEQzY4XFx1REM2OV18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRCg/OltcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdURDNjYoPzpcXHUyMDBEXFx1RDgzRFxcdURDNjYpP3xcXHVEQzY3KD86XFx1MjAwRFxcdUQ4M0RbXFx1REM2NlxcdURDNjddKT98XFx1REM2OVxcdTIwMERcXHVEODNEKD86XFx1REM2Nig/OlxcdTIwMERcXHVEODNEXFx1REM2Nik/fFxcdURDNjcoPzpcXHUyMDBEXFx1RDgzRFtcXHVEQzY2XFx1REM2N10pPykpfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXxcXHVEODNDKD86XFx1REZGQig/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86W1xcdURDNjhcXHVEQzY5XXxcXHVEQzhCXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldKVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF18XFx1REQxRFxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XVxcdUQ4M0NbXFx1REZGQy1cXHVERkZGXSkpKT98XFx1REZGQyg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86W1xcdURDNjhcXHVEQzY5XXxcXHVEQzhCXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldKVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF18XFx1REQxRFxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XVxcdUQ4M0NbXFx1REZGQlxcdURGRkQtXFx1REZGRl0pKSk/fFxcdURGRkQoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OltcXHVEQzY4XFx1REM2OV18XFx1REM4QlxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XSlcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdfFxcdUREMURcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV1cXHVEODNDW1xcdURGRkJcXHVERkZDXFx1REZGRVxcdURGRkZdKSkpP3xcXHVERkZFKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldfFxcdURDOEJcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldXFx1RDgzQ1tcXHVERkZCLVxcdURGRkRcXHVERkZGXSkpKT98XFx1REZGRig/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86W1xcdURDNjhcXHVEQzY5XXxcXHVEQzhCXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldKVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF18XFx1REQxRFxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XVxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSkpKT8pKT98XFx1REM2Rig/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xcXHVERDc1KD86XFx1RkUwRnxcXHVEODNDW1xcdURGRkItXFx1REZGRl0pPyg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xcXHVERTJFKD86XFx1MjAwRFxcdUQ4M0RcXHVEQ0E4KT98XFx1REUzNSg/OlxcdTIwMERcXHVEODNEXFx1RENBQik/fFxcdURFMzYoPzpcXHUyMDBEXFx1RDgzQ1xcdURGMkJcXHVGRTBGPyk/KXxcXHVEODNFKD86W1xcdUREMENcXHVERDBGXFx1REQxOC1cXHVERDFGXFx1REQzMC1cXHVERDM0XFx1REQzNlxcdURENzdcXHVEREI1XFx1RERCNlxcdUREQkJcXHVEREQyXFx1REREM1xcdURERDVcXHVERUMzLVxcdURFQzVcXHVERUYwXFx1REVGMi1cXHVERUY4XSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/fFtcXHVERDI2XFx1REQzNVxcdUREMzctXFx1REQzOVxcdUREM0RcXHVERDNFXFx1RERCOFxcdUREQjlcXHVERENELVxcdUREQ0ZcXHVEREQ0XFx1RERENi1cXHVEREREXSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFtcXHVERERFXFx1RERERl0oPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98W1xcdUREMERcXHVERDBFXFx1REQxMC1cXHVERDE3XFx1REQyMC1cXHVERDI1XFx1REQyNy1cXHVERDJGXFx1REQzQVxcdUREM0YtXFx1REQ0NVxcdURENDctXFx1REQ3NlxcdURENzgtXFx1RERCNFxcdUREQjdcXHVEREJBXFx1RERCQy1cXHVERENDXFx1REREMFxcdURERTAtXFx1RERGRlxcdURFNzAtXFx1REU3Q1xcdURFODAtXFx1REU4OFxcdURFOTAtXFx1REVCRFxcdURFQkYtXFx1REVDMlxcdURFQ0UtXFx1REVEQlxcdURFRTAtXFx1REVFOF18XFx1REQzQyg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj98XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT98XFx1REREMSg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY4NFxcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF18XFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMSkpfFxcdUQ4M0MoPzpcXHVERkZCKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCk/XFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkMtXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKSkpP3xcXHVERkZDKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCk/XFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY4NFxcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF18XFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSkpKT98XFx1REZGRCg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCXFx1REZGQ1xcdURGRkVcXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGODRcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdfFxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRl0pKSk/fFxcdURGRkUoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKT9cXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZEXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKSkpP3xcXHVERkZGKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCk/XFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRV18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKSkpPykpP3xcXHVERUYxKD86XFx1RDgzQyg/OlxcdURGRkIoPzpcXHUyMDBEXFx1RDgzRVxcdURFRjJcXHVEODNDW1xcdURGRkMtXFx1REZGRl0pP3xcXHVERkZDKD86XFx1MjAwRFxcdUQ4M0VcXHVERUYyXFx1RDgzQ1tcXHVERkZCXFx1REZGRC1cXHVERkZGXSk/fFxcdURGRkQoPzpcXHUyMDBEXFx1RDgzRVxcdURFRjJcXHVEODNDW1xcdURGRkJcXHVERkZDXFx1REZGRVxcdURGRkZdKT98XFx1REZGRSg/OlxcdTIwMERcXHVEODNFXFx1REVGMlxcdUQ4M0NbXFx1REZGQi1cXHVERkZEXFx1REZGRl0pP3xcXHVERkZGKD86XFx1MjAwRFxcdUQ4M0VcXHVERUYyXFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdKT8pKT8pL2c7dmFyIE9oPW4oMjYxMjApLE5oPW4ubihPaCksd2g9bigzNzY2MSksRGg9big2MDg4NSksUGg9big3NjkzMSk7Y29uc3QgTWg9bmV3IHdoLlosTGg9ZnVuY3Rpb24oZSl7bGV0e21heENhY2hlU2l6ZTp0fT17bWF4Q2FjaGVTaXplOjEwMH07Y29uc3Qgbj1uZXcgTWFwO3JldHVybntzZXQ6KGUscik9PntpZihuLnNpemU+PXQpe2NvbnN0IGU9bi5rZXlzKCkubmV4dCgpLnZhbHVlO24uZGVsZXRlKGUpfW4uc2V0KGUscil9LGdldDplPT57Y29uc3QgdD1uLmdldChlKTtyZXR1cm4gdCYmKG4uZGVsZXRlKGUpLG4uc2V0KGUsdCkpLHR9fX0oKTthc3luYyBmdW5jdGlvbiBVaChlKXtyZXR1cm4gTWgucmVzb2x2ZUNvbnRlbnRPYmplY3QoZSl9YXN5bmMgZnVuY3Rpb24geGgoZSx0KXtjb25zdCBuPWF3YWl0IFVoKGUpLHI9TGguZ2V0KG4pO2lmKHIpcmV0dXJuIHI7Y29uc3QgaT1hd2FpdCgwLFBoLlgpKG4pO2lmKDQwMz09PWkuc3RhdHVzKXRocm93IG5ldyBFcnJvcihcIlRoZSBtZWRpYSBoYXMgZXhwaXJlZC5cIik7aWYoMjAwIT09aS5zdGF0dXMpdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZmV0Y2ggdGhlIG1lZGlhLiAoc3RhdHVzIGNvZGU6ICR7aS5zdGF0dXN9KWApO2NvbnN0IG89YXdhaXQgaS5hcnJheUJ1ZmZlcigpO2lmKCF0KXJldHVybiBMaC5zZXQobixvKSxvO2NvbnN0IGE9YXdhaXQoMCxEaC5wNikobyx0KTtyZXR1cm4gTGguc2V0KG4sYSksYX12YXIgRmgsQmgsVmgsR2gsSGg9big0ODkzNCk7ZnVuY3Rpb24gV2goZSl7cmV0dXJuXCJlbmNyeXB0aW9uSW5mb1wiaW4gZX1mdW5jdGlvbiBqaChlKXtjb25zdCB0PW5ldyBVaW50OEFycmF5KGUpO3JldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFt0XSx7dHlwZTpOaCgpKHQpWzBdPy5taW1lfSkpfWFzeW5jIGZ1bmN0aW9uIFpoKGUpe2xldHttZWRpYU1ldGFkYXRhOnQsbWVkaWFSZWZlcmVuY2U6bn09ZTtjb25zdCByPVdoKHQpPygwLEptLk84KSh0LnR5cGUpOigwLEptLnBPKSh0LnR5cGUpLGk9V2godCk/dC5lbmNyeXB0aW9uSW5mbzp0LmVuY3J5cHRpb25JbmZvVjI/P3QuZW5jcnlwdGlvbkluZm9WMSxvPWk/YXdhaXQoMCxEaC5wbykoaS5rZXksaS5pdik6dm9pZCAwLGE9dC5kaW1lbnNpb25zPy5oZWlnaHQscz10LmRpbWVuc2lvbnM/LndpZHRoLGM9bi5jb250ZW50T2JqZWN0Lmxlbmd0aD9hd2FpdCB4aChuLmNvbnRlbnRPYmplY3Qsbyk6bi5sb2NhbENhY2hlS2V5Lmxlbmd0aD9hd2FpdCBhc3luYyBmdW5jdGlvbihlKXtjb25zdCB0PSgwLEhoLkRnKShlKTtpZih0KXJldHVybiB0LmRhdGEuYXJyYXlCdWZmZXIoKTt0aHJvdyBuZXcgRXJyb3IoXCJObyBsb2NhbCBtZWRpYSByZWZlcmVuY2UgZm9yIGtleSBcIitlKX0obi5sb2NhbENhY2hlS2V5KTp2b2lkIDA7aWYoIWMpdGhyb3cgbmV3IEVycm9yKFwiTm8gY29udGVudCBvYmplY3QgYW5kIG5vIGxvY2FsQ2FjaGVLZXlcIik7Y29uc3QgbD1hd2FpdCgwLEptLl9ZKShjKTtpZih0LnppcHBlZCYmIWwpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB6aXBwZWQgbWVkaWFcIik7cmV0dXJuIGw/UmgoKShbbC5tZWRpYUFycmF5QnVmZmVyLGwub3ZlcmxheUFycmF5QnVmZmVyXS5tYXAoKChlLHQpPT5lJiZ7ZGF0YVVybDpqaChlKSxtZWRpYVR5cGU6MD09PXQ/cmguRC5WaWRlbzpyaC5ELkltYWdlLHdpZHRoOnMsaGVpZ2h0OmF9KSkpOlt7ZGF0YVVybDpqaChjKSxtZWRpYVR5cGU6cix3aWR0aDpzLGhlaWdodDphfV19ZnVuY3Rpb24gemgoZSl7aWYoIWV8fGUuY29udGVudFR5cGUhPT1QZS56Yy5FWFRFUk5BTF9NRURJQSlyZXR1cm4hMTtjb25zdCB0PWUucmVtb3RlTWVkaWFSZWZlcmVuY2VzO3JldHVybiEhdCYmISgwPT09dC5sZW5ndGh8fHQubGVuZ3RoPjEpJiZ0WzBdLm1lZGlhUmVmZXJlbmNlcy5zb21lKChlPT5lLm1lZGlhVHlwZT09PVBlLlBfLlZJREVPfHxlLm1lZGlhVHlwZT09PVBlLlBfLlZJREVPX05PX0FVRElPKSl9ZnVuY3Rpb24gS2goZSl7dHJ5e3JldHVybiBuZXcgVVJMKGUpLmhyZWZ9Y2F0Y2h7cmV0dXJuYGh0dHA6Ly8ke2V9YH19ZnVuY3Rpb24gWWgoZSx0KXtyZXR1cm4gQm9vbGVhbighZSYmKHQubWVzc2FnZUNvbnRlbnQ/LnF1b3RlZE1lc3NhZ2U/LmNvbnRlbnR8fHQubWVzc2FnZUNvbnRlbnQ/LnF1b3RlZE1lc3NhZ2U/LnN0YXR1cz09PVBlLkJKLkRFTEVURUQpJiYodC5tZXNzYWdlQ29udGVudC5xdW90ZWRNZXNzYWdlLmNvbnRlbnQ/LmNvbnRlbnRUeXBlIT09UGUuemMuU05BUHx8dC5tZXNzYWdlQ29udGVudC5xdW90ZWRNZXNzYWdlLmNvbnRlbnQuaXNTYXZlZCkpfWZ1bmN0aW9uIHFoKGUsdCl7cmV0dXJuIG49PntuLnN0b3BQcm9wYWdhdGlvbigpLG4udGFyZ2V0LnN0eWxlLmN1cnNvcj1lLHQ/LihuKX19ZnVuY3Rpb24gWGgoZSl7cmV0dXJuIEJvb2xlYW4oZT8uY2FtZW98fGU/LmdlbmVyYXRlZENhbWVvKX1mdW5jdGlvbiBRaChlKXtsZXR7Y2xhc3NOYW1lOnQsbWF4Om4sbWluOnIsY3VycmVudFZhbHVlOml9PWU7cmV0dXJuKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6KDAsUS5aKSh0LFwid0pnUUlcIikscm9sZTpcInNsaWRlclwiLFwiYXJpYS1yZWFkb25seVwiOiEwLFwiYXJpYS12YWx1ZW5vd1wiOmksXCJhcmlhLXZhbHVlbWluXCI6cixcImFyaWEtdmFsdWVtYXhcIjpufSx2b2lkIDAsKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6XCJYbXRxSFwiLHN0eWxlOnt3aWR0aDooaS1yKS9uKjEwMCtcIiVcIn19KSl9Y29uc3QgSmg9KDAsZC5mb3J3YXJkUmVmKSgoKGUsdCk9PntsZXR7Y2xhc3NOYW1lOm4sZnVsbHNjcmVlbjpyLGF1dG9wbGF5OmksbGF5ZXI6YSxvblJlYWR5OnMsb25FcnJvcjpjLG9uQ2xpY2s6bCxvbkxvYWRlZE1ldGFkYXRhOnUsY29udHJvbGxlZE11dGU6Zn09ZTtjb25zdCBwPSgwLGsubykodHUucVIpLHtkYXRhVXJsOm0sd2lkdGg6aCxoZWlnaHQ6dn09YSxnPXIseT1yfHxpLEU9cnx8aSxfPSgwLG1lLlopKCksST0oMCxkLnVzZVJlZikoKSxbUyxiXT0oMCxkLnVzZVN0YXRlKSgheSksW1QsQ109KDAsZC51c2VTdGF0ZSkoIXIpLFtBLFJdPSgwLGQudXNlU3RhdGUpKDApLFtPLE5dPSgwLGQudXNlU3RhdGUpKDApLFt3LERdPSgwLGQudXNlU3RhdGUpKCExKSxQPSgwLGQudXNlUmVmKShudWxsKTsoMCxkLnVzZUVmZmVjdCkoKCgpPT57SS5jdXJyZW50JiYocCYmeT9JLmN1cnJlbnQucGxheSgpLmNhdGNoKChlPT57KDAsYmguVkUpKFwidmlkZW8tcGxheWVyXCIsZSl9KSk6SS5jdXJyZW50LnBhdXNlKCkpfSksW3kscF0pO2NvbnN0IE09KDAsZC51c2VDYWxsYmFjaykoKCgpPT57UC5jdXJyZW50JiYod2luZG93LmNsZWFyVGltZW91dChQLmN1cnJlbnQpLFAuY3VycmVudD1udWxsKX0pLFtQXSksTD0oMCxkLnVzZUNhbGxiYWNrKSgoKCk9PntNKCksUC5jdXJyZW50PXdpbmRvdy5zZXRUaW1lb3V0KCgoKT0+e0QoITEpfSksMmUzKX0pLFtNXSksVT0oMCxkLnVzZUNhbGxiYWNrKSgoKCk9Pnt3fHxEKCEwKSxMKCl9KSxbdyxMXSkseD0oMCxkLnVzZUNhbGxiYWNrKSgoKCk9PnFoKFwiZGVmYXVsdFwiLCgoKT0+e0QoITApLEwoKX0pKSksW0xdKSxGPSgwLGQudXNlQ2FsbGJhY2spKCgoKT0+cWgoXCJwb2ludGVyXCIsKCgpPT57TSgpfSkpKSxbTV0pO3JldHVybigwLGQudXNlRWZmZWN0KSgoKCk9Pntjb25zdCBlPXNldEludGVydmFsKCgoKT0+TihJLmN1cnJlbnQ/LmN1cnJlbnRUaW1lPz8wKSksMWUzLzYwKTtyZXR1cm4oKT0+Y2xlYXJJbnRlcnZhbChlKX0pLFtOLEldKSwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTooMCxRLlopKG4sXCJWX3lKTFwiKSxzdHlsZTpnJiZoJiZ2P3thc3BlY3RSYXRpbzpgJHtofSAvICR7dn1gfTp2b2lkIDAsb25DbGljazpsLG9uTW91c2VPdmVyOnI/cWgoXCJwb2ludGVyXCIsKCgpPT5EKCExKSkpOnZvaWQgMH0sdm9pZCAwLCgwLHEuanN4KShcInZpZGVvXCIse29uTW91c2VNb3ZlOnI/VTp2b2lkIDAsb25Nb3VzZU92ZXI6cj94KCk6dm9pZCAwLHJlZjplPT57SS5jdXJyZW50PWUsdCYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dChlKTp0LmN1cnJlbnQ9ZSl9LG9uRHVyYXRpb25DaGFuZ2U6ZnVuY3Rpb24oKXtSKEkuY3VycmVudD8uZHVyYXRpb24/PzApfSxvbkxvYWRlZE1ldGFkYXRhOnUsY2xhc3NOYW1lOigwLFEuWikoXCJtYkd3QlwiLHImJiF3JiZcImEyTTdFXCIpLGF1dG9QbGF5OnksbXV0ZWQ6dm9pZCAwIT09Zj9mOlQsY29udHJvbHM6ITEsY29udHJvbHNMaXN0Olwibm9kb3dubG9hZFwiLGxvb3A6RSxwbGF5c0lubGluZTohcixzcmM6bSxoZWlnaHQ6dix3aWR0aDpoLG9uQ2FuUGxheTpzLG9uRXJyb3I6YyxvblBsYXk6KCk9PmIoITEpLG9uUGF1c2U6KCk9PmIoITApfSksZyYmKDAscS5qc3hzKShxLkZyYWdtZW50LHtjaGlsZHJlbjpbdyYmKDAsby5aKShcImJ1dHRvblwiLHt0eXBlOlwiYnV0dG9uXCIsY2xhc3NOYW1lOlwiejdmcWhcIixvbkNsaWNrOmU9PntlLnN0b3BQcm9wYWdhdGlvbigpLEkuY3VycmVudD8ucGF1c2VkP0kuY3VycmVudC5wbGF5KCk6SS5jdXJyZW50Py5wYXVzZSgpfSxvbk1vdXNlT3ZlcjpGKCksdGl0bGU6Uz9fLmZvcm1hdE1lc3NhZ2Uoe2lkOlwiR2xjMFUwXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJQbGF5XCJ9XX0pOl8uZm9ybWF0TWVzc2FnZSh7aWQ6XCI3c3hCRDhcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlBhdXNlXCJ9XX0pfSx2b2lkIDAsUz9GaHx8KEZoPSgwLG8uWikoU2gse30pKTpCaHx8KEJoPSgwLG8uWikoRWgse30pKSksdm9pZCAwPT09ZiYmKDAsby5aKShcImJ1dHRvblwiLHt0eXBlOlwiYnV0dG9uXCIsY2xhc3NOYW1lOlwiWXdEeUhcIixvbkNsaWNrOmU9PntlLnN0b3BQcm9wYWdhdGlvbigpLEMoKGU9PiFlKSl9LHRpdGxlOlQ/Xy5mb3JtYXRNZXNzYWdlKHtpZDpcIktvRC9MVVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiVW5tdXRlXCJ9XX0pOl8uZm9ybWF0TWVzc2FnZSh7aWQ6XCJIajFyWCtcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIk11dGVcIn1dfSl9LHZvaWQgMCxUP1ZofHwoVmg9KDAsby5aKShwaCx7fSkpOkdofHwoR2g9KDAsby5aKSh2aCx7fSkpKSwoMCxvLlopKFFoLHtjbGFzc05hbWU6XCJCU01FS1wiLG1heDpBLG1pbjowLGN1cnJlbnRWYWx1ZTpPfSldfSkpfSkpO0poLmRpc3BsYXlOYW1lPVwiVmlkZW9QbGF5ZXJcIjt2YXIgJGg9bigyNzI2MSk7Y29uc3QgZXY9KDAsZC5jcmVhdGVDb250ZXh0KSgwKTtldi5kaXNwbGF5TmFtZT1cIk1lc3NhZ2VMaXN0SGVpZ2h0Q29udGV4dFwiO2xldCB0dj1mdW5jdGlvbihlKXtyZXR1cm4gZVtlLkxpZ2h0Ym94PTBdPVwiTGlnaHRib3hcIixlW2UuQ3VzdG9tU3RpY2tlcj0xXT1cIkN1c3RvbVN0aWNrZXJcIixlW2UuU2luZ2xlQ2hhdE1lZGlhPTJdPVwiU2luZ2xlQ2hhdE1lZGlhXCIsZVtlLk11bHRpcGxlQ2hhdE1lZGlhPTNdPVwiTXVsdGlwbGVDaGF0TWVkaWFcIixlW2UuQ292ZXJDb250YWluZXI9NF09XCJDb3ZlckNvbnRhaW5lclwiLGV9KHt9KTtmdW5jdGlvbiBudihlLHQsbil7Y29uc3Qgcj0oMCxkLnVzZUNvbnRleHQpKGV2KTtpZihlPT09dHYuQ292ZXJDb250YWluZXIpcmV0dXJue2hlaWdodDpcIjEwMCVcIix3aWR0aDpcIjEwMCVcIixhc3BlY3RSYXRpbzpcIjEgLyAyXCJ9O2lmKHZvaWQgMD09PXR8fHZvaWQgMD09PW4pcmV0dXJuO2NvbnN0IGk9bi90O3N3aXRjaChlKXtjYXNlIHR2LkN1c3RvbVN0aWNrZXI6cmV0dXJuIHQmJm4/e2FzcGVjdFJhdGlvOmAke259IC8gJHt0fWAsd2lkdGg6TWF0aC5taW4odCwyMDApKmksbWF4V2lkdGg6XCJtaW4oOTAlLCA0MDBweClcIn06e3dpZHRoOlwiMTUwcHhcIixoZWlnaHQ6XCIxNTBweFwifTtjYXNlIHR2LkxpZ2h0Ym94OnJldHVybjtjYXNlIHR2Lk11bHRpcGxlQ2hhdE1lZGlhOnJldHVybnthc3BlY3RSYXRpbzpgJHtufSAvICR7dH1gLHdpZHRoOk1hdGgubWluKHQsci8zKSppLG1heFdpZHRoOlwibWluKDkwJSwgNDgwcHgpXCIsbWluV2lkdGg6NjAsbWluSGVpZ2h0OjYwLG1heEhlaWdodDpyLzN9O2Nhc2UgdHYuU2luZ2xlQ2hhdE1lZGlhOnJldHVybnthc3BlY3RSYXRpbzpgJHtufSAvICR7dH1gLHdpZHRoOk1hdGgubWluKHQsci8yKSppLG1heFdpZHRoOlwibWluKDkwJSwgNDgwcHgpXCIsbWluV2lkdGg6NjAsbWluSGVpZ2h0OjYwLG1heEhlaWdodDpyLzJ9fX12YXIgcnY9big4ODMwNiksaXY9bi5uKHJ2KTtmdW5jdGlvbiBvdihlLHQpe2NvbnN0W24scl09KDAsZC51c2VTdGF0ZSkoW10pLFtpLG9dPSgwLGQudXNlU3RhdGUpKCEwKSxbYSxzXT0oMCxkLnVzZVN0YXRlKSgpO3JldHVybigwLGQudXNlRWZmZWN0KSgoKCk9PntpZih0fHxuLmxlbmd0aClyZXR1cm47bGV0IGk9KCk9PiExO3JldHVybihhc3luYygpPT57dHJ5e2NvbnN0IHQ9KGF3YWl0KGFzeW5jKCk9PihvKCEwKSxzKHZvaWQgMCksUHJvbWlzZS5hbGwoZS5tYXAoWmgpKSkpKCkpLmZsYXQoKTtpKCl8fHIodCl9Y2F0Y2goZSl7IWkoKSYmZSBpbnN0YW5jZW9mIEVycm9yJiYoQygpLmdldExvZ2dlcihcInVzZU1lZGlhTGF5ZXJzXCIpLmVycm9yKGUpLHMoZSkpfWZpbmFsbHl7aSgpfHxvKCExKX19KSgpLCgpPT57aT0oKT0+ITB9fSksW2UsdCxuXSksW24saSxhXX1mdW5jdGlvbiBhdihlLHQsbil7Y29uc3RbcixpXT0oMCxkLnVzZVN0YXRlKShbXSksbz1yLnJlZHVjZSgoKGUsdCk9PnZvaWQgMD09PWU/dDpNYXRoLm1heCh0LGUpKSxuP1BlLk1rLk1FRElBX05PVF9SRU5ERVJFRDp2b2lkIDApOygwLGQudXNlRWZmZWN0KSgoKCk9PntvPT09UGUuTWsuTUVESUFfU1VDQ0VTU0ZVTExZX1JFTkRFUkVEP2U/LigpOnZvaWQgMCE9PW8mJnQ/LigpfSksW28sdCxlXSk7Y29uc3QgYT0oMCxkLnVzZU1lbW8pKCgoKT0+aXYoKSgoZT0+KCk9PntpKCh0PT5BcnJheS5mcm9tKHtsZW5ndGg6TWF0aC5tYXgoZSsxLHQubGVuZ3RoKX0sKChuLHIpPT5yPT09ZT9QZS5Nay5NRURJQV9OT1RfUkVOREVSRUQ6dFtyXSkpKSl9KSkpLFtdKSxzPSgwLGQudXNlTWVtbykoKCgpPT5pdigpKChlPT4oKT0+e2koKHQ9PkFycmF5LmZyb20oe2xlbmd0aDpNYXRoLm1heChlKzEsdC5sZW5ndGgpfSwoKG4scik9PnI9PT1lP1BlLk1rLk1FRElBX1NVQ0NFU1NGVUxMWV9SRU5ERVJFRDp0W3JdKSkpKX0pKSksW10pO3JldHVybltzLGFdfWNvbnN0IHN2PVwiQnAxYlJcIixjdj1cInI1MTFVXCI7dmFyIGx2LHV2LGR2O2NvbnN0IGZ2PSgwLGQuZm9yd2FyZFJlZikoKChlLHQpPT57bGV0e2xheWVyOm4sYXV0b3BsYXk6cixmdWxsc2NyZWVuOmksb25SZWFkeTpvLG9uRXJyb3I6YSxvbkxvYWRlZE1ldGFkYXRhOnMsbXV0ZTpjfT1lO2NvbnN0e21lZGlhVHlwZTpsLGRhdGFVcmw6dX09bixmPSgwLFEuWikoc3YsaSYmXCJLdktjY1wiKSxbcCxtXT0oMCxkLnVzZVN0YXRlKShcIm9yaWdpbmFsXCIpLFtoLHZdPSgwLGQudXNlU3RhdGUpKHUpLGc9IWZ1bmN0aW9uKCl7Y29uc3QgZT0oMCxrLm8pKFRlLnlUKTtyZXR1cm4oMCxPLnJwKShBLmg2KSx2b2lkIDA9PT1lfHxlfSgpLHk9YXN5bmMoKT0+e2lmKCFpfHxnKXJldHVybiB2b2lkIG8/LigpO2xldCBlO3RyeXtjb25zdCB0PWF3YWl0IGZldGNoKHUpO2U9YXdhaXQgdC5ibG9iKCl9Y2F0Y2h7cmV0dXJuIGIoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwicmVuZGVyX2ltZ19mdWxsc2NyZWVuX2ZldGNoX2RhdGFfdXJsX2ZhaWx1cmVcIn0pLHZvaWQgbz8uKCl9dHJ5e2NvbnN0IHQ9ZS50eXBlO2lmKFwiaW1hZ2UvanBlZ1wiPT09dHx8XCJpbWFnZS9qcGdcIj09PXQpe2NvbnN0e2hhc0dlb0RhdGE6bixqcGVnQmluYXJ5OnJ9PWF3YWl0KDAsJGgub18pKGUsITApO2lmKG4pe2NvbnN0IGU9KDAsJGgucW0pKHIsdCksbj1VUkwuY3JlYXRlT2JqZWN0VVJMKGUpO3YobiksbShcInRyaW1tZWRcIil9fX1maW5hbGx5e28/LigpfX0sRT0oKT0+e2kmJiFnJiZiKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcInJlbmRlcl9pbWdfZnVsbHNjcmVlbl9mYWlsdXJlXCIsZGltZW5zaW9uczp7ZXhpZkRhdGFTdGF0dXM6cH19KSxhPy4oKX07c3dpdGNoKGwpe2Nhc2UgcmguRC5HaWY6Y2FzZSByaC5ELkltYWdlOnJldHVybigwLHEuanN4KShcImltZ1wiLHtyZWY6dCxvbkNsaWNrOmk/ZT0+ZS5zdG9wUHJvcGFnYXRpb24oKTp2b2lkIDAsZHJhZ2dhYmxlOiExLGNsYXNzTmFtZTooMCxRLlopKGYsXCJhbmR6U1wiKSxzcmM6aCxoZWlnaHQ6bi5oZWlnaHQsd2lkdGg6bi53aWR0aCxvbkxvYWQ6eSxvbkVycm9yOkUsbG9hZGluZzpcImxhenlcIixvbk1vdXNlT3ZlcjppP3FoKFwiZGVmYXVsdFwiKTp2b2lkIDB9KTtjYXNlIHJoLkQuQXVkaW86Y2FzZSByaC5ELlZpZGVvOnJldHVybigwLHEuanN4KShKaCx7cmVmOnQsb25DbGljazppP2U9PmUuc3RvcFByb3BhZ2F0aW9uKCk6dm9pZCAwLGNsYXNzTmFtZTpmLG9uUmVhZHk6byxvbkVycm9yOmEsYXV0b3BsYXk6cixmdWxsc2NyZWVuOmksbGF5ZXI6bixvbkxvYWRlZE1ldGFkYXRhOnMsY29udHJvbGxlZE11dGU6Y30pO2RlZmF1bHQ6dGhyb3cgbmV3IFRmLm9mKGBVbnN1cHBvcnRlZCBtZXNzYWdlIG1lZGlhOiAke2x9YCxgbWVkaWFfJHtsLnRvTG9jYWxlTG93ZXJDYXNlKCl9YCl9fSkpO2Z2LmRpc3BsYXlOYW1lPVwiTWVkaWFMYXllckNvbnRlbnRcIjtjb25zdCBwdj0oMCxkLmZvcndhcmRSZWYpKCgoZSx0KT0+e2xldHttZWRpYUluZm9zOm4sYXV0b3BsYXk6cj0hMCxzaG93UGxheU92ZXJsYXk6aT0hMSxvbkNsaWNrOmEsb25SZWFkeTpzLG9uRXJyb3I6YyxzaXppbmdNb2RlOmwsY2xhc3NOYW1lOnUsaXNDYW1lbzpmLG11dGU6cH09ZTtjb25zdCBtPSgwLGQudXNlUmVmKShudWxsKSxoPXZmKG0pLGc9IWgsW3ksRV09ZnVuY3Rpb24oZSl7Y29uc3RbdCxuXT0oMCxkLnVzZVN0YXRlKShlKSxyPSgwLGQudXNlQ2FsbGJhY2spKCh0PT57Y29uc3Qgcj10LnRhcmdldDtsZXQgaT0wO2NvbnN0IG89ZS5tYXAoKGU9Pntjb25zdCB0PWUubWVkaWFNZXRhZGF0YS5kaW1lbnNpb25zO3JldHVybiF0fHx0LmhlaWdodD4wfHxlLm1lZGlhTWV0YWRhdGEuZGltZW5zaW9ucz8ud2lkdGg9PT1yLnZpZGVvV2lkdGgmJmUubWVkaWFNZXRhZGF0YS5kaW1lbnNpb25zLmhlaWdodD09PXIudmlkZW9IZWlnaHQ/ZTooaSsrLHsuLi5lLG1lZGlhTWV0YWRhdGE6ey4uLmUubWVkaWFNZXRhZGF0YSxkaW1lbnNpb25zOnt3aWR0aDpyLnZpZGVvV2lkdGgsaGVpZ2h0OnIudmlkZW9IZWlnaHR9fX0pfSkpO2kmJm4obyl9KSxbZV0pO3JldHVyblt0LHJdfShuKSxbXyxJLFNdPW92KHksZyksW2IsVF09YXYocyxjLFMpLEM9ZnVuY3Rpb24oZSx0KXtjb25zdCBuPWUuZmluZCgoZT0+ZS5tZWRpYU1ldGFkYXRhLmRpbWVuc2lvbnMpKT8ubWVkaWFNZXRhZGF0YS5kaW1lbnNpb25zLHI9bj8uaGVpZ2h0LGk9bj8ud2lkdGg7cmV0dXJuIG52KHQscixpKX0oeSxsKSxBPWw9PT10di5MaWdodGJveCxSPWkmJiFyJiYhQTtyZXR1cm4gSXx8U3x8IWg/KDAscS5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTpjdixyZWY6bSxjaGlsZHJlbjooMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTooMCxRLlopKFwibjl5TXNcIixzdiksc3R5bGU6Q30sdm9pZCAwLFM/bHZ8fChsdj0oMCxvLlopKHYuWix7aWQ6XCJUSzJRaXFcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkZhaWxlZCB0byBsb2FkIHRoZSBtZWRpYVwifV19KSk6aD91dnx8KHV2PSgwLG8uWikobGgse30pKTpudWxsKX0pOigwLHEuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOigwLFEuWikoY3YsdSxmJiZcImxsZTU4XCIpLG9uQ2xpY2s6YSxyb2xlOmE/XCJidXR0b25cIjpcImltZ1wiLHN0eWxlOkMscmVmOm0sb25Nb3VzZU92ZXI6QT9xaChcInBvaW50ZXJcIik6dm9pZCAwLGNoaWxkcmVuOltfLm1hcCgoKGUsbik9PigwLHEuanN4KShmdix7cmVmOnQsbGF5ZXI6ZSxhdXRvcGxheTpyLGZ1bGxzY3JlZW46QSxvbkVycm9yOlQobiksb25SZWFkeTpiKG4pLG9uTG9hZGVkTWV0YWRhdGE6RSxtdXRlOnB9LG4pKSksUiYmKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6XCJoRldfc1wifSx2b2lkIDAsZHZ8fChkdj0oMCxvLlopKG9oLHt9KSkpXX0pfSkpO2Z1bmN0aW9uIG12KGUpe2xldHttZXNzYWdlSWQ6dCxjb252ZXJzYXRpb25JZDpuLHNoYXJlOnIscmVtb3RlTWVkaWFSZWZlcmVuY2VzOml9PWU7aWYoXCJsZWdhY3lEaXNjb3ZlclwiPT09ci5zaGFyZT8uJGNhc2UpcmV0dXJuKDAsby5aKShodix7bWVzc2FnZUlkOnQsY29udmVyc2F0aW9uSWQ6bixsZWdhY3lEaXNjb3ZlcjpyLnNoYXJlLmxlZ2FjeURpc2NvdmVyLHJlbW90ZU1lZGlhUmVmZXJlbmNlczppfSk7dGhyb3cgbmV3IFRmLm9mKHIuc2hhcmU/LiRjYXNlPz9cIlVua25vd24gdHlwZVwiLGBzaGFyZV8ke3Iuc2hhcmU/LiRjYXNlPz9cInVua25vd25cIn1gKX1mdW5jdGlvbiBodihlKXtsZXR7bWVzc2FnZUlkOnQsY29udmVyc2F0aW9uSWQ6bixsZWdhY3lEaXNjb3ZlcjpyLHJlbW90ZU1lZGlhUmVmZXJlbmNlczppfT1lO2NvbnN0IGE9KDAsZC51c2VNZW1vKSgoKCk9Pntjb25zdCBlPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1lLm1lZGlhO2lmKCFuKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbGVnYWN5IGRpc2NvdmVyIHNoYXJlIC0gbm8gbWVkaWEgbWV0YWRhdGFcIik7cmV0dXJue21lZGlhTWV0YWRhdGE6bixtZWRpYVJlZmVyZW5jZTooMCxKbS5xeikodCl9fShyLGk/P1tdKTtyZXR1cm5bZV19KSxbcixpXSkse29wZW5MaWdodGJveDpzfT1uZCgpLHtvcGVuTGlnaHRCb3hWMjpjfT10aCgpLGw9KDAsTy5ycCkoQS55ZikmJiExLHU9KDAsZC51c2VDYWxsYmFjaykoKCgpPT57fSksW24sYSx0LGMscyxsXSk7cmV0dXJuKDAsby5aKShwdix7bWVkaWFJbmZvczphLHNpemluZ01vZGU6dHYuU2luZ2xlQ2hhdE1lZGlhLG9uQ2xpY2s6dX0pfXB2LmRpc3BsYXlOYW1lPVwiTWVkaWFDb250ZW50XCI7Y29uc3QgdnY9e2NvbnRhaW5lcjpcInBqSnYzIEJwMWJSXCIsY3VzdG9tU3RpY2tlckNvbnRhaW5lcjpcIm82MjU3XCIsbWVkaWFTdGFjazpcInJCWUZmIHI1MTFVXCIsY3VzdG9tU3RpY2tlck1lZGlhU3RhY2s6XCJoQ2FBM1wifTtmdW5jdGlvbiBndihlKXtsZXR7Y3JlYXRpdmVUb29sSXRlbTp0fT1lO2NvbnN0IG49dC5pdGVtPy5lbnRpdHk7c3dpdGNoKG4/LmVudGl0eU9uZW9mPy4kY2FzZSl7Y2FzZVwiZ2Z5Y2F0XCI6cmV0dXJuKDAsby5aKSh5dix7Z2Z5Y2F0Om4uZW50aXR5T25lb2YuZ2Z5Y2F0fSk7Y2FzZVwiY3VzdG9tU3RpY2tlclwiOnJldHVybigwLG8uWikoRXYse2N1c3RvbVN0aWNrZXI6bi5lbnRpdHlPbmVvZi5jdXN0b21TdGlja2VyfSl9dGhyb3cgbmV3IFRmLm9mKG4/LmVudGl0eU9uZW9mPy4kY2FzZT8/XCJjdGl0ZW1cIixgY3RpdGVtXyR7bj8uZW50aXR5T25lb2Y/LiRjYXNlPz9cInVua25vd25cIn1gKX1mdW5jdGlvbiB5dihlKXtsZXR7Z2Z5Y2F0OnR9PWU7Y29uc3Qgbj10Lm1lZGlhQXNzZXRzWzBdLHI9bi5tZWRpYUNvbnRlbnQ/LmNvbnRlbnRCb2x0T2JqZWN0LGk9bnYodHYuU2luZ2xlQ2hhdE1lZGlhLG4uaGVpZ2h0LG4ud2lkdGgpO2lmKCFyKXJldHVybiBudWxsO2NvbnN0IGE9KDAsby5aKShcImltZ1wiLHtoZWlnaHQ6bi5oZWlnaHQsd2lkdGg6bi53aWR0aCxjbGFzc05hbWU6dnYuY29udGFpbmVyfSk7cmV0dXJuKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6dnYubWVkaWFTdGFjayxzdHlsZTppfSx2b2lkIDAsKDAsby5aKShtLHtmYWxsYmFjazphfSx2b2lkIDAsKDAsby5aKShkLlN1c3BlbnNlLHtmYWxsYmFjazphfSx2b2lkIDAsKDAsby5aKShfdix7aWQ6dC5nZnljYXRJZCxjb250ZW50T2JqZWN0OnIsaGVpZ2h0Om4uaGVpZ2h0LHdpZHRoOm4ud2lkdGh9KSkpKX1mdW5jdGlvbiBFdihlKXtsZXR7Y3VzdG9tU3RpY2tlcjp0fT1lO2NvbnN0IG49dC5tZWRpYUNvbnRlbnQ/LmNvbnRlbnRCb2x0T2JqZWN0LHI9bnYodHYuQ3VzdG9tU3RpY2tlcix0LmhlaWdodCx0LndpZHRoKTtpZighbilyZXR1cm4gbnVsbDtjb25zdCBpPSgwLG8uWikoXCJpbWdcIix7Y2xhc3NOYW1lOnZ2LmNvbnRhaW5lcn0pO3JldHVybigwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOigwLFEuWikodnYubWVkaWFTdGFjayx2di5jdXN0b21TdGlja2VyTWVkaWFTdGFjayksc3R5bGU6cn0sdm9pZCAwLCgwLG8uWikobSx7ZmFsbGJhY2s6aX0sdm9pZCAwLCgwLG8uWikoZC5TdXNwZW5zZSx7ZmFsbGJhY2s6aX0sdm9pZCAwLCgwLG8uWikoSXYse2VuY0l2OnQuZW5jSXYsZW5jS2V5OnQuZW5jS2V5LGNvbnRlbnRPYmplY3Q6bixoZWlnaHQ6dC5oZWlnaHQsd2lkdGg6dC53aWR0aH0pKSkpfWZ1bmN0aW9uIF92KGUpe2xldHtjb250ZW50T2JqZWN0OnQsaWQ6bixoZWlnaHQ6cix3aWR0aDppfT1lO2NvbnN0IGE9KDAsQi5ScSkoKGFzeW5jKCk9PlVoKHQpKSxbbl0pO3JldHVybigwLG8uWikoXCJpbWdcIix7c3JjOmEsbG9hZGluZzpcImxhenlcIixoZWlnaHQ6cix3aWR0aDppLGNsYXNzTmFtZTp2di5jb250YWluZXJ9KX1mdW5jdGlvbiBJdihlKXtsZXR7Y29udGVudE9iamVjdDp0LGVuY0l2Om4sZW5jS2V5OnIsaGVpZ2h0Omksd2lkdGg6YX09ZTtjb25zdCBzPSgwLEIuUnEpKChhc3luYygpPT57Y29uc3QgZT1hd2FpdCgwLERoLnBvKSgoMCxIaC5ScSkociksKDAsSGguUnEpKG4pKSxpPWF3YWl0IHhoKHQsZSksbz1hd2FpdCgwLEptLl9ZKShpKTtyZXR1cm4gamgobz9vLm1lZGlhQXJyYXlCdWZmZXI6aSl9KSxbcixuXSk7cmV0dXJuKDAsby5aKShcImltZ1wiLHtzcmM6cyxsb2FkaW5nOlwibGF6eVwiLGNsYXNzTmFtZTooMCxRLlopKHZ2LmNvbnRhaW5lcix2di5jdXN0b21TdGlja2VyQ29udGFpbmVyKSx3aWR0aDphfHx2b2lkIDAsaGVpZ2h0Oml8fHZvaWQgMH0pfWNvbnN0IFN2PXtleHRlcm5hbE1lZGlhOlwiRVRfQ1JcIn07ZnVuY3Rpb24gYnYoZSl7bGV0e3NuYXBkb2M6dCxhdXRvcGxheTpuPSEwLHNob3dQbGF5T3ZlcmxheTpyPSExLG9uUmVhZHk6aSxvbkVycm9yOmEsc2l6aW5nTW9kZTpzLG9wZW5MaWdodGJveDpjfT1lO2NvbnN0IGw9KDAsZC51c2VNZW1vKSgoKCk9PlR2KHQpKSxbdF0pLHU9WGgodCksZj0hdTtyZXR1cm4oMCxvLlopKHB2LHttZWRpYUluZm9zOmwsb25SZWFkeTppLG9uRXJyb3I6YSxhdXRvcGxheTpufHx1LHNob3dQbGF5T3ZlcmxheTpyJiYoMCxKbS5CJCkodCksb25DbGljazplPT57ZS5zdG9wUHJvcGFnYXRpb24oKSxmJiZjPy4oKX0sc2l6aW5nTW9kZTpzLGlzQ2FtZW86dX0pfWZ1bmN0aW9uIFR2KGUpe2NvbnN0IHQ9ZS5wbGF5YmFjaz8ucGxheWJhY2tMYXllcnM/P1tdLG49W107Zm9yKGNvbnN0IHIgb2YgdClzd2l0Y2goci5sYXllcj8uJGNhc2Upe2Nhc2VcIm1lZGlhXCI6e2NvbnN0IHQ9ci5sYXllci5tZWRpYSxpPXQubWVkaWFJZD8ubWVkaWFMaXN0SWQ7bGV0IG87aT9vPWUubWVkaWFSZWZlcmVuY2VzLmZpbmQoKGU9PmUubWVkaWFMaXN0SWQ9PT1pKSk6YigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJzbmFwZG9jX21lZGlhX21pc3NpbmdfbGlzdF9pZFwiLGRpbWVuc2lvbnM6e251bV9yZWZlcmVuY2VzOmUubWVkaWFSZWZlcmVuY2VzLmxlbmd0aC50b1N0cmluZygpfX0pLG98fChvPWUubWVkaWFSZWZlcmVuY2VzWzBdKSxuLnB1c2goe21lZGlhTWV0YWRhdGE6dCxtZWRpYVJlZmVyZW5jZTpvfSk7YnJlYWt9fXJldHVybiBufWZ1bmN0aW9uIEN2KGUpe2xldHtzbmFwZG9jczp0LGNvbnZlcnNhdGlvbklkOm4sbWVzc2FnZUlkOnIsYXV0b1BsYXk6aT0hMX09ZTtjb25zdCBhPSgwLGsubykoVGUuV0opLHM9KDAsZC51c2VDYWxsYmFjaykoKCgpPT57YShuLHIsUGUuTWsuTUVESUFfTk9UX1JFTkRFUkVEKX0pLFtuLGEscl0pLGM9KDAsZC51c2VDYWxsYmFjaykoKCgpPT57YShuLHIsUGUuTWsuTUVESUFfU1VDQ0VTU0ZVTExZX1JFTkRFUkVEKX0pLFtuLGEscl0pLFtsLHVdPWF2KGMscyksZj10Lm1hcChUdikse29wZW5MaWdodGJveDpwfT1uZCgpLHtvcGVuTGlnaHRCb3hWMjptfT10aCgpLGg9KDAsTy5ycCkoQS55ZikmJiExLHY9aD9mLm1hcCgoZT0+KHttZXNzYWdlSWQ6cixtZWRpYUluZm9zOmV9KSkpOltdLGc9aSYmMT09PXQubGVuZ3RoO3JldHVybigwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOlN2LmV4dGVybmFsTWVkaWF9LHZvaWQgMCx0Lm1hcCgoKGUsaSk9PigwLG8uWikoXCJkaXZcIix7fSxpLCgwLG8uWikoYnYse3NuYXBkb2M6ZSxhdXRvcGxheTpnLHNob3dQbGF5T3ZlcmxheTohMCxzaXppbmdNb2RlOnQubGVuZ3RoPjE/dHYuTXVsdGlwbGVDaGF0TWVkaWE6dHYuU2luZ2xlQ2hhdE1lZGlhLG9uUmVhZHk6bChpKSxvbkVycm9yOnUoaSksb3BlbkxpZ2h0Ym94OigpPT57aD9tKHttb2RlOmVoLm8uQ2hhdE1lZGlhLG1lZGlhczp2LGNvbnZlcnNhdGlvbklkOm4sc3RhcnRpbmdJbmRleDppfSk6cChyLGYsaSl9fSkpKSkpfWZ1bmN0aW9uIEF2KGUsdCl7cmV0dXJuIGUuc25hcGRvYy5tYXAoKChlLG4pPT5SdihlLHRbbl0pKSl9ZnVuY3Rpb24gUnYoZSx0KXtyZXR1cm4gdD97Li4uZSxtZWRpYVJlZmVyZW5jZXM6dC5tZWRpYVJlZmVyZW5jZXMubWFwKEptLmUpfTplfXZhciBrdixPdjtmdW5jdGlvbiBOdihlKXtsZXR7bm90ZTp0LHJlbW90ZU1lZGlhUmVmZXJlbmNlczpufT1lO2NvbnN0IHI9KDAsZC51c2VNZW1vKSgoKCk9Pntjb25zdCBlPWZ1bmN0aW9uKGUsdCl7aWYoXCJhdWRpb1wiPT09ZS5ub3RlPy4kY2FzZSl7Y29uc3Qgbj1lLm5vdGUuYXVkaW8ubm90ZTtpZighbil0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGF1ZGlvIG5vdGUgLSBubyBtZWRpYSBtZXRhZGF0YVwiKTtyZXR1cm57bWVkaWFNZXRhZGF0YTpuLG1lZGlhUmVmZXJlbmNlOigwLEptLnF6KSh0KX19dGhyb3cgbmV3IFRmLm9mKGUubm90ZT8uJGNhc2U/P1widW5rbm93blwiLGBub3RlXyR7ZS5ub3RlPy4kY2FzZT8/XCJ1bmtub3duXCJ9YCl9KHQsbj8/W10pO3JldHVybltlXX0pLFt0LG5dKSxbaSxhLHNdPW92KHIpO3JldHVybiBhP2t2fHwoa3Y9KDAsby5aKShcImRpdlwiLHt9LHZvaWQgMCxcIkxvYWRpbmcgbWVkaWEuLi5cIikpOnM/T3Z8fChPdj0oMCxvLlopKFwiZGl2XCIse30sdm9pZCAwLCgwLHEuanN4KShxLkZyYWdtZW50LHtjaGlsZHJlbjpcIkZhaWxlZCB0byBsb2FkIHRoZSBtZWRpYVwifSkpKTooMCxvLlopKFwiYXVkaW9cIix7Y29udHJvbHM6ITAsb25Db250ZXh0TWVudTplPT5lLnByZXZlbnREZWZhdWx0KCksY29udHJvbHNMaXN0Olwibm9kb3dubG9hZCBub3BsYXliYWNrcmF0ZVwifSx2b2lkIDAsKDAsby5aKShcInNvdXJjZVwiLHtzcmM6aVswXS5kYXRhVXJsLHR5cGU6XCJhdWRpby93YXZcIn0pKX1jb25zdCB3dj17Y29udGFpbmVyOlwiTnlLTHFcIixyZXBseTpcIkRUYXVjXCIsb3JpZ2luYWw6XCJrZHI4VVwifTt2YXIgRHY9big3NzQyKTtjb25zdCBQdj17c3RpY2tlcjpcInFIVlIxXCIsZW1vamk6XCJPUmttelwifTtmdW5jdGlvbiBNdihlKXtsZXR7c3RpY2tlcjp0LHJlbW90ZU1lZGlhUmVmZXJlbmNlczpufT1lO2NvbnN0IHI9dC5zdGlja2VyPy4kY2FzZTtzd2l0Y2godC5zdGlja2VyPy4kY2FzZSl7Y2FzZVwiaW5jbHVkZWRcIjpyZXR1cm4oMCxvLlopKEx2LHtpbmNsdWRlZFN0aWNrZXI6dC5zdGlja2VyLmluY2x1ZGVkfSk7Y2FzZVwiZW1vamlcIjpyZXR1cm4oMCxvLlopKFwic3BhblwiLHtjbGFzc05hbWU6UHYuZW1vaml9LHZvaWQgMCx0LnN0aWNrZXIuZW1vamkpO2Nhc2VcImN1c3RvbVwiOnJldHVybiBuPygwLG8uWikoVXYse2N1c3RvbVN0aWNrZXI6dC5zdGlja2VyLmN1c3RvbSxyZW1vdGVNZWRpYVJlZmVyZW5jZXM6bn0pOm51bGw7ZGVmYXVsdDp0aHJvdyBuZXcgVGYub2YoXCJzdGlja2VyXCIsYHN0aWNrZXJfJHtyPz9cInVua25vd25cIn1gKX19ZnVuY3Rpb24gTHYoZSl7bGV0e2luY2x1ZGVkU3RpY2tlcjp0fT1lO2lmKHQuc3RpY2tlclR5cGU9PT1Edi5JbmNsdWRlZFN0aWNrZXJfSW5jbHVkZWRTdGlja2VyVHlwZS5CSVRNT0pJKXJldHVybigwLG8uWikoXCJpbWdcIix7Y2xhc3NOYW1lOlB2LnN0aWNrZXIsc3JjOigwLGhlLm1IKSh0LnN0aWNrZXJJZCksc3JjU2V0OmAkeygwLGhlLm1IKSh0LnN0aWNrZXJJZCl9IDF4LCAkeygwLGhlLm1IKSh0LnN0aWNrZXJJZCxoZS54WS5ERUZBVUxUKX0gMnhgfSk7dGhyb3cgbmV3IFRmLm9mKFwiaW5jbHVkZWRTdGlja2VyXCIsYGluY2x1ZGVkX3N0aWNrZXJfJHtEdi5JbmNsdWRlZFN0aWNrZXJfSW5jbHVkZWRTdGlja2VyVHlwZVt0LnN0aWNrZXJUeXBlXX1gKX1mdW5jdGlvbiBVdihlKXtsZXR7Y3VzdG9tU3RpY2tlcjp0LHJlbW90ZU1lZGlhUmVmZXJlbmNlczpufT1lO2NvbnN0IHI9KDAsZC51c2VNZW1vKSgoKCk9Pntjb25zdCBlPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1lLnN0aWNrZXI7aWYoIW4pdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBjdXN0b20gc3RpY2tlciAtIG5vIG1lZGlhIG1ldGFkYXRhXCIpO3JldHVybnttZWRpYU1ldGFkYXRhOm4sbWVkaWFSZWZlcmVuY2U6KDAsSm0ucXopKHQpfX0odCxuKTtyZXR1cm5bZV19KSxbdCxuXSk7cmV0dXJuKDAsby5aKShwdix7bWVkaWFJbmZvczpyLHNpemluZ01vZGU6dHYuQ3VzdG9tU3RpY2tlcn0pfXZhciB4dixGdjtmdW5jdGlvbiBCdigpe3JldHVybiBCdj1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LEJ2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBWdj1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIixCdih7d2lkdGg6MzQsaGVpZ2h0OjM5LHZpZXdCb3g6XCIwIDAgMzQgMzlcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSkseHZ8fCh4dj1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNMzIuMDEyIDE2Ljc1NmMwIDEuODk3LS44NzYgNC4xNTUtMi4zOTEgNi41ODYtMS40OTcgMi40LTMuNTE3IDQuODEtNS41NzQgNi45NzJhODIuODkzIDgyLjg5MyAwIDAgMS01LjY1NiA1LjM3OWMtLjY1LjU2My0xLjIwOCAxLjAzLTEuNjM1IDEuMzgyYTgxLjI3MyA4MS4yNzMgMCAwIDEtMS42MzUtMS4zODMgODIuODYyIDgyLjg2MiAwIDAgMS01LjY1Ni01LjM3OGMtMi4wNTgtMi4xNjMtNC4wNzctNC41NzItNS41NzQtNi45NzItMS41MTYtMi40My0yLjM5MS00LjY4OS0yLjM5MS02LjU4NkMxLjUgOC4zMyA4LjMzIDEuNSAxNi43NTYgMS41YzguNDI1IDAgMTUuMjU2IDYuODMgMTUuMjU2IDE1LjI1NlpcIixzdHJva2U6XCIjNEU1NjVGXCIsc3Ryb2tlV2lkdGg6M30pKSxGdnx8KEZ2PWQuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLHtjeDoxNi43NTYsY3k6MTYuNzU2LHI6NC40NDYsc3Ryb2tlOlwiIzRFNTY1RlwiLHN0cm9rZVdpZHRoOjN9KSkpO3ZhciBHdjtmdW5jdGlvbiBIdigpe3JldHVybiBIdj1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LEh2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBXdj1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIixIdih7d2lkdGg6NDYsaGVpZ2h0OjQ1LHZpZXdCb3g6XCIwIDAgNDYgNDVcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksR3Z8fChHdj1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNMjAuMDU0IDI2LjEwN2ExNy4zODYgMTcuMzg2IDAgMCAxLS4xNDktLjEyM2wtLjExOC0uMTMyYTI0LjkwNCAyNC45MDQgMCAwIDEtMS45ODYtMi41ODdjLS41MzctLjgwOC0xLjA0NS0xLjY5Mi0xLjQwMi0yLjU2LS4zNjItLjg4My0uNTI3LTEuNjQ5LS40ODktMi4yNTYuMDcxLTEuMTQ3LjYzMy0xLjYzOSAxLjU4Mi0yLjQyNWwuMDQ2LS4wMzhjLjQzNC0uMzU5IDEuMDYtLjg3NyAxLjQ4NC0xLjU3Ny40OTgtLjgyNC42NjQtMS43ODcuNDE2LTIuOTEtLjIyNS0xLjAxOC0uNzU1LTIuMDY0LTEuMzM0LTIuOTk4LS41OS0uOTU0LTEuMjk3LTEuODkyLTEuOTYyLTIuNzA3YTQxLjUzMiA0MS41MzIgMCAwIDAtMi41MjMtMi44MTFsLS4wNDEtLjA0MWMtLjcxLS43NTMtMS42Ny0xLjE5Mi0yLjYwNi0xLjM2LS45NDctLjE3LTIuMDA1LS4wODgtMi45MzQuMzY3TDQuNTE0IDMuNjczYy0uNjYxLjMyNC0xLjIyNC44NTMtMS42MzggMS4zOTUtLjQwMi41MjUtLjc1NiAxLjE4My0uOTAyIDEuODgybC0uMDMzLjEzMWMtLjAyOC4xMTUtLjA2NC4yNzUtLjEwNC40OC0uMDguNDA4LS4xNzYuOTktLjI0NCAxLjcyMy0uMTM3IDEuNDY1LS4xNyAzLjUzNi4yMzUgNi4wMTUuODExIDQuOTggMy4zNyAxMS41MyAxMC4yMTMgMTguMDc4IDYuODM1IDYuNTQ0IDEzLjUyMiA4LjkzIDE4LjU2IDkuNjQ4IDIuNTA5LjM1OCA0LjU5Mi4zIDYuMDYzLjE0OGExOC4wMjkgMTguMDI5IDAgMCAwIDEuNzI3LS4yNTkgMTEuNDk3IDExLjQ5NyAwIDAgMCAuNTk1LS4xMzdjLjcwNS0uMTM4IDEuMzY3LS40OSAxLjg5Mi0uODc3LjU0OC0uNDA1IDEuMDg1LS45NSAxLjQyNy0xLjU3OWwxLjY1LTMuMDI5Yy40OTYtLjkxLjYyNC0xLjk2Mi41MDEtMi45MTQtLjEyLS45NC0uNTAzLTEuOTEtMS4xOS0yLjY2MWExMS4wNzIgMTEuMDcyIDAgMCAwLS4yNDctLjI4MiAyNy4yMTYgMjcuMjE2IDAgMCAwLS43MDktLjc2MiAyNi45MzEgMjYuOTMxIDAgMCAwLTIuNDEtMi4yMjNjLS45Ni0uNzc1LTIuMTAzLTEuNTYzLTMuMy0yLjA2Ny0xLjE4LS40OTYtMi42MTUtLjgwMS00LjAxMy0uMjg4LTEuMDcuMzkzLTEuODMuODkzLTIuNDAyIDEuNDc2LS41MDIuNTExLS44MTUgMS4wNS0xLjAyMiAxLjQwNWwtLjA1Ny4wOThjLS4yMjQuMzgtLjMxNy40OTItLjQyOC41NzMtLjA5OC4wNzItLjM1NS4yMTgtMS4wNTIuMjgyLS41My4wNDktMS4yNjQtLjA5Mi0yLjE2Ni0uNDQ4LS44OC0uMzQ3LTEuNzk3LS44NS0yLjY0OC0xLjM4NmEyOC4zOTQgMjguMzk0IDAgMCAxLTIuNzU4LTEuOTg4Wm0tLjIxMy0uMTc3WlwiLHN0cm9rZTpcIiM0RTU2NUZcIixzdHJva2VXaWR0aDozfSkpKSxqdj17YXR0YWNobWVudENhcmQ6XCJaeGZlZFwiLGljb25QcmV2aWV3OlwibG9FanpcIn07ZnVuY3Rpb24gWnYoZSl7bGV0e2ljb246dCxjaGlsZHJlbjpuLG9uQ2xpY2s6cixocmVmOmksdGFyZ2V0OmF9PWU7cmV0dXJuKDAsby5aKShcImFcIix7Y2xhc3NOYW1lOmp2LmF0dGFjaG1lbnRDYXJkLG9uQ2xpY2s6ZT0+e2Uuc3RvcFByb3BhZ2F0aW9uKCksciYmcihlKX0saHJlZjppLHRhcmdldDphLHJlbDpcIm5vb3BlbmVyIG5vcmVmZXJyZXJcIn0sdm9pZCAwLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOmp2Lmljb25QcmV2aWV3fSx2b2lkIDAsdCksKDAsby5aKShcImRpdlwiLHtkaXI6XCJhdXRvXCJ9LHZvaWQgMCxuKSl9Y29uc3QgenY9e21lZGlhQXR0cmlidXRlOlwid3hIVGtcIn07dmFyIEt2LFl2O2Z1bmN0aW9uIHF2KGUpe2xldHttZWRpYVR5cGU6dCx0ZXh0Om4saXNPbmx5OnJ9PWU7cmV0dXJuIHQ9PT1Edi5UZXh0TWVkaWFBdHRyaWJ1dGVfVGV4dE1lZGlhQXR0cmlidXRlVHlwZS5BRERSRVNTJiZyP251bGw6KDAsby5aKShcInNwYW5cIix7Y2xhc3NOYW1lOnp2Lm1lZGlhQXR0cmlidXRlfSx2b2lkIDAsbil9ZnVuY3Rpb24gWHYoZSl7bGV0IHQsbix7bWVkaWFUeXBlOnIsdGV4dDppfT1lLGE9XCIjXCI7c3dpdGNoKHIpe2Nhc2UgRHYuVGV4dE1lZGlhQXR0cmlidXRlX1RleHRNZWRpYUF0dHJpYnV0ZVR5cGUuQUREUkVTUzp0PUt2fHwoS3Y9KDAsby5aKShWdix7fSkpLGE9XCJodHRwczovL3d3dy5nb29nbGUuY29tL21hcHMvc2VhcmNoLz9hcGk9MSZxdWVyeT1cIitlbmNvZGVVUklDb21wb25lbnQoaSksbj1cIl9ibGFua1wiO2JyZWFrO2Nhc2UgRHYuVGV4dE1lZGlhQXR0cmlidXRlX1RleHRNZWRpYUF0dHJpYnV0ZVR5cGUuUEhPTkU6dD1Zdnx8KFl2PSgwLG8uWikoV3Yse30pKSxhPWB0ZWw6JHtlbmNvZGVVUklDb21wb25lbnQoaSl9YDticmVhaztkZWZhdWx0OnJldHVybiBudWxsfXJldHVybigwLG8uWikoWnYse2ljb246dCxocmVmOmEsdGFyZ2V0Om59LHZvaWQgMCxpKX1jb25zdCBRdj17bWVudGlvbjpcIk1rTjZ4XCJ9O2Z1bmN0aW9uIEp2KGUpe2xldHtjb252ZXJzYXRpb25JZDp0LHVzZXJJZDpuLGNoaWxkcmVuOnJ9PWU7Y29uc3QgaT1HbCh0KSxhPUNsKG4pLHM9SGwobik7bGV0IGM7cmV0dXJuIGM9YT8ubXV0YWJsZV91c2VybmFtZT8oMCxxLmpzeHMpKHEuRnJhZ21lbnQse2NoaWxkcmVuOltcIkBcIixhLm11dGFibGVfdXNlcm5hbWVdfSk6ciwoMCxvLlopKFwic3BhblwiLHtvbkNsaWNrOnMscm9sZTpzP1wibGlua1wiOnZvaWQgMCxzdHlsZTp7Y29sb3I6KG4mJmkuZ2V0KG4pKT8/XCJpbmhlcml0XCJ9LGNsYXNzTmFtZTpRdi5tZW50aW9ufSx2b2lkIDAsYyl9Y29uc3QgJHY9e2Vtb2ppOlwiUkxGX0FcIix1cmw6XCJDRnVDMlwiLHRleHQ6XCJvZ24xelwifSxlZz1lPT5lLnVybFByZXZpZXcuZmV0Y2hVcmxQcmV2aWV3O2Z1bmN0aW9uIHRnKGUpe3JldHVybltcInVybFByZXZpZXdcIixlXX12YXIgbmcscmc7ZnVuY3Rpb24gaWcoKXtyZXR1cm4gaWc9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxpZy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y29uc3Qgb2c9ZT0+ZC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsaWcoe3dpZHRoOjI0LGhlaWdodDoyNCx2aWV3Qm94OlwiMCAwIDI0IDI0XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLG5nfHwobmc9ZC5jcmVhdGVFbGVtZW50KFwiZ1wiLHtjbGlwUGF0aDpcInVybCgjZGY3NGE5MDYwNjI2NWRkNjM0YjVjMzRmN2UxNDE3NGMyNjNkZjM5NF9fYSlcIixzdHJva2U6XCIjNEU1NjVGXCIsc3Ryb2tlV2lkdGg6MS42NyxzdHJva2VMaW5lY2FwOlwicm91bmRcIn0sZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwibTUuOTkgOS41MjUtMS43NjggMS43NjhhNiA2IDAgMCAwIDAgOC40ODV2MGE2IDYgMCAwIDAgOC40ODUgMGwxLjc2OC0xLjc2N005LjUyNSA1Ljk5bDEuNzY4LTEuNzY4YTYgNiAwIDAgMSA4LjQ4NSAwdjBhNiA2IDAgMCAxIDAgOC40ODVsLTEuNzY4IDEuNzY4TTguNDY1IDE1LjUzNmw3LjA3LTcuMDcxXCJ9KSkpLHJnfHwocmc9ZC5jcmVhdGVFbGVtZW50KFwiZGVmc1wiLG51bGwsZC5jcmVhdGVFbGVtZW50KFwiY2xpcFBhdGhcIix7aWQ6XCJkZjc0YTkwNjA2MjY1ZGQ2MzRiNWMzNGY3ZTE0MTc0YzI2M2RmMzk0X19hXCJ9LGQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZmlsbDpcIiNmZmZcIixkOlwiTTAgMGgyNHYyNEgwelwifSkpKSkpLGFnPXtpY29uOlwiTHZ0UUlcIixiYWRnZTpcImFkY0VLXCIscHJpbWFyeTpcImVGXzQ4XCIsc2Vjb25kYXJ5OlwiTWFDREpcIixyaWNoUHJldmlldzpcIllVeldwXCIsb2VtYmVkRnJhbWU6XCJmMnJDM1wiLGNsaWNrVG9QbGF5OlwibGxuaHpcIixwbGF5SWNvbjpcIlp2OXJwXCJ9O3ZhciBzZyxjZztmdW5jdGlvbiBsZyhlKXtsZXR7dXJsOnR9PWU7Y29uc3Qgbj0oMCxkLnVzZVJlZikobnVsbCkscj12ZihuLHtvbmNlOiEwfSksaT1mdW5jdGlvbihlKXtjb25zdCB0PSgwLEIuZmopKHRnKGUpKTtyZXR1cm4gQm9vbGVhbih0KX0odCksYT0oMCxvLlopKGZnLHt1cmw6dH0pO3JldHVybigwLHEuanN4KShcImRpdlwiLHtyZWY6bixjaGlsZHJlbjooMCxvLlopKG0se2ZhbGxiYWNrOmF9LHZvaWQgMCwoMCxvLlopKGQuU3VzcGVuc2Use2ZhbGxiYWNrOmF9LHZvaWQgMCxyfHxpPygwLG8uWikoZGcse3VybDp0fSk6YSkpfSl9ZnVuY3Rpb24gdWcoZSl7aWYoXCJ1cmxcIj09PWU/LmNvbnRlbnQ/LiRjYXNlKXJldHVybiBlLmNvbnRlbnQudXJsfWZ1bmN0aW9uIGRnKGUpe2xldHt1cmw6dH09ZTtjb25zdCBuPWZ1bmN0aW9uKGUpe2NvbnN0IHQ9KDAsay5vKShlZyk7cmV0dXJuKDAsQi5ScSkoKGFzeW5jKCk9PnQoZSkpLHRnKGUpKX0odCksW3IsaV09KDAsZC51c2VTdGF0ZSkoITEpLGE9KCgwLE8ucnApKEEuX0YpLCgwLE8ucnApKEEuRU4pLCgwLGQudXNlQ2FsbGJhY2spKCgoKT0+e2koITApfSksW10pKTtpZigoMCxkLnVzZUVmZmVjdCkoKCgpPT57aSghMSl9KSxbdF0pLCFuLnByZXZpZXd8fHIpcmV0dXJuKDAsby5aKShmZyx7dXJsOnR9KTtjb25zdCBzPW4ucHJldmlldy51cmwse3RodW1ibmFpbDpjLGZhdmljb246bH09bi5wcmV2aWV3LHU9dWcoYyksZj11ZyhsKTtsZXQgcDtyZXR1cm4gcD11fHxmPyF1JiZmPygwLG8uWikoXCJpbWdcIix7Y2xhc3NOYW1lOmFnLmljb24sc3JjOmYsYWx0OlwiZmF2aWNvblwiLG9uRXJyb3I6YX0pOigwLHEuanN4cykocS5GcmFnbWVudCx7Y2hpbGRyZW46WygwLG8uWikoXCJpbWdcIix7Y2xhc3NOYW1lOmFnLmljb24sc3JjOnUsYWx0OlwidGh1bWJuYWlsXCIsb25FcnJvcjphfSksZiYmKDAsby5aKShcImltZ1wiLHtjbGFzc05hbWU6YWcuYmFkZ2Usc3JjOmYsYWx0OlwiZmF2aWNvblwiLG9uRXJyb3I6YX0pXX0pOnNnfHwoc2c9KDAsby5aKShvZyx7fSkpLCgwLG8uWikoWnYse2hyZWY6cyx0YXJnZXQ6XCJfYmxhbmtcIixpY29uOnB9LHZvaWQgMCwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTphZy5wcmltYXJ5fSx2b2lkIDAsbi5wcmV2aWV3LnRpdGxlKSwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTphZy5zZWNvbmRhcnl9LHZvaWQgMCxuLnByZXZpZXcuc3VidGl0bGUpKX1mdW5jdGlvbiBmZyhlKXtsZXR7dXJsOnR9PWU7cmV0dXJuKDAsby5aKShadix7aHJlZjp0LHRhcmdldDpcIl9ibGFua1wiLGljb246Y2d8fChjZz0oMCxvLlopKG9nLHt9KSl9LHZvaWQgMCwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTphZy5wcmltYXJ5fSx2b2lkIDAsdCkpfWZ1bmN0aW9uIHBnKGUpe2NvbnN0IHQ9ZS5hdHRyaWJ1dGVzO2lmKDEhPT10Lmxlbmd0aClyZXR1cm4hMTtjb25zdCBuPXRbMF0ucmFuZ2U/Lmxlbmd0aD09PWUudGV4dC5sZW5ndGg7c3dpdGNoKHRbMF0uYXR0cmlidXRlPy4kY2FzZSl7Y2FzZVwidXJsQXR0cmlidXRlXCI6e2NvbnN0IGU9MD09PXRbMF0uYXR0cmlidXRlLnVybEF0dHJpYnV0ZS51cmwubGVuZ3RofHx0WzBdLmF0dHJpYnV0ZS51cmxBdHRyaWJ1dGUudXJsLnN0YXJ0c1dpdGgoXCJtYWlsdG86XCIpO3JldHVybiBuJiYhZX1jYXNlXCJtZWRpYUF0dHJpYnV0ZVwiOnJldHVybiBuO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIG1nKGUpe2xldHt0ZXh0OnQsY29udmVyc2F0aW9uSWQ6bixzZW5kZXJJZDpyLG1lc3NhZ2VJZDppfT1lO2NvbnN0IGE9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF4oPzoke2toKCkuc291cmNlfSkrJGApLnRlc3QoZS5yZXBsYWNlQWxsKC9cXHMvZyxcIlwiKSl9KHQudGV4dCkscz0oMCxkLnVzZU1lbW8pKCgoKT0+Wy4uLnQuYXR0cmlidXRlc10uc29ydCgoKGUsdCk9PihlLnJhbmdlPy5sb2NhdGlvbnx8MCktKHQucmFuZ2U/LmxvY2F0aW9ufHwwKSkpKSxbdC5hdHRyaWJ1dGVzXSksYz1bXSxsPVtdO2lmKDA9PT1zLmxlbmd0aCljLnB1c2goKDAsby5aKShkLkZyYWdtZW50LHt9LDAsdC50ZXh0fHxcIlx1MjAwYlwiKSk7ZWxzZXtsZXQgZT0wO2Zvcihjb25zdCByIG9mIHMpe2NvbnN0IGk9ci5yYW5nZSxhPWk/LmxvY2F0aW9ufHxlLHM9aT8ubGVuZ3RofHwwO3N3aXRjaChjLnB1c2goKDAsby5aKShkLkZyYWdtZW50LHt9LGAke2V9LSR7YX1gLHQudGV4dC5zdWJzdHIoZSxhLWUpKSksci5hdHRyaWJ1dGU/LiRjYXNlKXtjYXNlXCJtZW50aW9uXCI6e2NvbnN0IGU9ci5hdHRyaWJ1dGUubWVudGlvbi51c2VySWQ7ZSYmKDAsei5NYykoZSksYy5wdXNoKCgwLG8uWikoSnYse3VzZXJJZDplLGNvbnZlcnNhdGlvbklkOm59LGAke3IuYXR0cmlidXRlLiRjYXNlfS0ke2F9YCx0LnRleHQuc3Vic3RyKGEscykpKTticmVha31jYXNlXCJ1cmxBdHRyaWJ1dGVcIjp7Y29uc3QgZT1LaChyLmF0dHJpYnV0ZS51cmxBdHRyaWJ1dGUudXJsKTtjLnB1c2goKDAsby5aKShkLkZyYWdtZW50LHt9LGAke3IuYXR0cmlidXRlLiRjYXNlfS0ke2F9YCwoMCxvLlopKFwiYVwiLHtjbGFzc05hbWU6JHYudXJsLHJlbDpcIm5vb3BlbmVyIG5vcmVmZXJyZXJcIixocmVmOmUsdGFyZ2V0OlwiX2JsYW5rXCJ9LHZvaWQgMCx0LnRleHQuc3Vic3RyKGEscykpKSksZS5sZW5ndGg+MCYmIWUuc3RhcnRzV2l0aChcIm1haWx0bzpcIikmJmwucHVzaCgoMCxvLlopKGxnLHt1cmw6ZX0sYCR7ci5hdHRyaWJ1dGUuJGNhc2V9LSR7YX1gKSk7YnJlYWt9Y2FzZVwibWVkaWFBdHRyaWJ1dGVcIjp7Y29uc3QgZT10LnRleHQuc3Vic3RyKGEscyk7Yy5wdXNoKCgwLG8uWikocXYse21lZGlhVHlwZTpyLmF0dHJpYnV0ZS5tZWRpYUF0dHJpYnV0ZS50ZXh0TWVkaWFBdHRyaWJ1dGVUeXBlLGlzT25seTp0LnRleHQubGVuZ3RoPT09YStzJiYwPT09YSx0ZXh0OmV9LGAke3IuYXR0cmlidXRlLiRjYXNlfS0ke2F9YCkpLGwucHVzaCgoMCxvLlopKFh2LHttZWRpYVR5cGU6ci5hdHRyaWJ1dGUubWVkaWFBdHRyaWJ1dGUudGV4dE1lZGlhQXR0cmlidXRlVHlwZSx0ZXh0OmV9LGAke3IuYXR0cmlidXRlLiRjYXNlfS0ke2F9YCkpO2JyZWFrfWRlZmF1bHQ6Yy5wdXNoKCgwLG8uWikoZC5GcmFnbWVudCx7fSxgJHtyLmF0dHJpYnV0ZT8uJGNhc2V8fFwidW5kZWZpbmVkXCJ9LSR7YX1gLHQudGV4dC5zdWJzdHIoYSxzKSkpfWU9YStzfWU8dC50ZXh0Lmxlbmd0aCYmYy5wdXNoKCgwLG8uWikoZC5GcmFnbWVudCx7fSxcImxhc3RcIix0LnRleHQuc3Vic3RyKGUpKSl9Y29uc3QgdT0oMCxvLlopKFwic3BhblwiLHtkaXI6XCJhdXRvXCIsY2xhc3NOYW1lOigwLFEuWikoJHYudGV4dCxhJiYkdi5lbW9qaSl9LHZvaWQgMCxjKTtyZXR1cm4oMCxxLmpzeHMpKHEuRnJhZ21lbnQse2NoaWxkcmVuOlshcGcodCkmJnUsbF19KX1DKCkuZ2V0TG9nZ2VyKFwiW0NoYXRdW01lc3NhZ2VDb250ZW50XVtUZXh0Q29udGVudF1cIik7Y29uc3QgaGc9e2NvbnRhaW5lcjpcIk16cHVZXCIsdGV4dDpcIkFuNjJzXCIsc3VidGV4dDpcImtFMVdXXCJ9O3ZhciB2ZyxnZztmdW5jdGlvbiB5ZyhlKXtsZXR7bWVzc2FnZVR5cGU6dH09ZTtyZXR1cm4oMCxkLnVzZUVmZmVjdCkoKCgpPT57fSksW3RdKSwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpoZy5jb250YWluZXJ9LHZvaWQgMCwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpoZy50ZXh0fSx2b2lkIDAsdmd8fCh2Zz0oMCxvLlopKHYuWix7aWQ6XCJFR0xsTTRcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIk5vdCBTdXBwb3J0ZWQgb24gV2ViXCJ9XX0pKSksKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6aGcuc3VidGV4dH0sdm9pZCAwLGdnfHwoZ2c9KDAsby5aKSh2Llose2lkOlwiOUtuem1zXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJDaGVjayBmcm9tIHlvdXIgcGhvbmUgdG8gc2VlIHdoYXQgd2FzIHNlbnQhXCJ9XX0pKSkpfWZ1bmN0aW9uIEVnKGUpe2xldHtzbmFwUmVwbHk6dCxtZXNzYWdlSWQ6bixjb252ZXJzYXRpb25JZDpyLHJlbW90ZU1lZGlhUmVmZXJlbmNlczppLGlzUHJldmlldzphPSExfT1lO2NvbnN0IHM9KDAsZC51c2VNZW1vKSgoKCk9Plwib3JpZ2luYWxTbmFwZG9jXCI9PT10Lm9yaWdpbmFsQ29udGVudD8uJGNhc2UmJmk/Lmxlbmd0aD9Sdih0Lm9yaWdpbmFsQ29udGVudC5vcmlnaW5hbFNuYXBkb2MsaVswXSk6dm9pZCAwKSxbaSx0XSkse29wZW5MaWdodGJveDpjfT1uZCgpLHtvcGVuTGlnaHRCb3hWMjpsfT10aCgpLHU9KDAsTy5ycCkoQS55ZikmJiExLGY9cz91PygpPT5sKHttb2RlOmVoLm8uQ2hhdE1lZGlhLG1lZGlhczpbe21lc3NhZ2VJZDpuLG1lZGlhSW5mb3M6VHYocyl9XSxzdGFydGluZ0luZGV4OjAsY29udmVyc2F0aW9uSWQ6cn0pOigpPT5jKG4sW1R2KHMpXSk6dm9pZCAwLHA9IVhoKHMpO3JldHVybigwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOnd2LmNvbnRhaW5lcn0sdm9pZCAwLCFhJiZzJiYoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTp3di5vcmlnaW5hbH0sdm9pZCAwLCgwLG8uWikoYnYse3NuYXBkb2M6cyxzaXppbmdNb2RlOnR2LkNvdmVyQ29udGFpbmVyLG9wZW5MaWdodGJveDpmfSkpLHQucmVwbHlDb250ZW50JiYoMCxvLlopKFwiYnV0dG9uXCIse3R5cGU6XCJidXR0b25cIixvbkNsaWNrOmU9PntlLnN0b3BQcm9wYWdhdGlvbigpLHAmJmY/LigpfSxjbGFzc05hbWU6KDAsUS5aKSh3di5yZXBseSx0LnJlcGx5Q29udGVudC4kY2FzZSl9LHZvaWQgMCwoMCxvLlopKF9nLHtjb250ZW50OnQucmVwbHlDb250ZW50LGNvbnZlcnNhdGlvbklkOnIsbWVzc2FnZUlkOm4scmVtb3RlTWVkaWFSZWZlcmVuY2VzOmk/LnNsaWNlKDEpfSkpKX1mdW5jdGlvbiBfZyhlKXtsZXR7Y29udGVudDp0LG1lc3NhZ2VJZDpuLGNvbnZlcnNhdGlvbklkOnIscmVtb3RlTWVkaWFSZWZlcmVuY2VzOml9PWU7c3dpdGNoKHQ/LiRjYXNlKXtjYXNlXCJyZXBseVRleHRcIjpyZXR1cm4oMCxvLlopKG1nLHt0ZXh0OnQucmVwbHlUZXh0LGNvbnZlcnNhdGlvbklkOnJ9KTtjYXNlXCJyZXBseVN0aWNrZXJcIjpyZXR1cm4oMCxvLlopKE12LHtzdGlja2VyOnQucmVwbHlTdGlja2VyLHJlbW90ZU1lZGlhUmVmZXJlbmNlczppfSk7Y2FzZVwicmVwbHlFeHRlcm5hbE1lZGlhXCI6e2NvbnN0IGU9QXYodC5yZXBseUV4dGVybmFsTWVkaWEsaT8/W10pO3JldHVybigwLG8uWikoQ3Yse3NuYXBkb2NzOmUsY29udmVyc2F0aW9uSWQ6cixtZXNzYWdlSWQ6bn0pfWNhc2VcInJlcGx5Tm90ZVwiOnJldHVybigwLG8uWikoTnYse25vdGU6dC5yZXBseU5vdGUscmVtb3RlTWVkaWFSZWZlcmVuY2VzOml9KTtjYXNlXCJyZXBseVNoYXJlXCI6cmV0dXJuKDAsby5aKShtdix7bWVzc2FnZUlkOm4sY29udmVyc2F0aW9uSWQ6cixzaGFyZTp0LnJlcGx5U2hhcmUscmVtb3RlTWVkaWFSZWZlcmVuY2VzOml9KX1yZXR1cm4oMCxvLlopKHlnLHttZXNzYWdlVHlwZTp0Py4kY2FzZT8/XCJVbmtub3duXCJ9KX1DKCkuZ2V0TG9nZ2VyKFwiW1Vua25vd24gTWVzc2FnZV1cIik7dmFyIElnLFNnLGJnLFRnLENnLEFnLFJnLGtnLE9nLE5nLHdnLERnPW4oNjk4NzUpO2Z1bmN0aW9uIFBnKGUpe2xldHtzZW5kZXJJZDp0fT1lO2NvbnN0IG49UmwodCk7cmV0dXJuKDAsby5aKSh2Llose2lkOlwiOHFZNG1EXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJZT1UgQUNDRVBURUQgXCJ9LHt0eXBlOjEsdmFsdWU6XCJwYXJlbnRcIn0se3R5cGU6MCx2YWx1ZTpcIidTIEZBTUlMWSBDRU5URVIgSU5WSVRFXCJ9XSx2YWx1ZXM6e3BhcmVudDpufX0pfWZ1bmN0aW9uIE1nKGUpe2xldHtzZW5kZXJJZDp0fT1lO2NvbnN0IG49WGMoKT09PXQscj1SbCh0KTtyZXR1cm4gbj9JZ3x8KElnPSgwLG8uWikodi5aLHtpZDpcIkFUMERaU1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiWU9VIENIQU5HRUQgVEhFIENIQVQgV0FMTFBBUEVSXCJ9XX0pKTooMCxvLlopKHYuWix7aWQ6XCJMT2pLWmhcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MSx2YWx1ZTpcInNlbmRlclwifSx7dHlwZTowLHZhbHVlOlwiIENIQU5HRUQgVEhFIENIQVQgV0FMTFBBUEVSXCJ9XSx2YWx1ZXM6e3NlbmRlcjpyfX0pfWZ1bmN0aW9uIExnKGUpe2xldHtzZW5kZXJJZDp0fT1lO2NvbnN0IG49WGMoKT09PXQscj1SbCh0KTtyZXR1cm4gbj9TZ3x8KFNnPSgwLG8uWikodi5aLHtpZDpcIlN2UHRaUlwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiWU9VIExFRlQgVEhFIEZBTUlMWSBDRU5URVJcIn1dfSkpOigwLG8uWikodi5aLHtpZDpcIkhWeTB5Y1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZToxLHZhbHVlOlwic2VuZGVyXCJ9LHt0eXBlOjAsdmFsdWU6XCIgTEVGVCBUSEUgRkFNSUxZIENFTlRFUlwifV0sdmFsdWVzOntzZW5kZXI6cn19KX1mdW5jdGlvbiBVZyhlKXtsZXR7dXNlckRpc3BsYXlOYW1lczp0fT1lO3JldHVybiB0Lmxlbmd0aD49NT9iZ3x8KGJnPSgwLG8uWikodi5aLHtpZDpcImJ3RFlENlwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiTk8gT05FIENPVUxEIFRBTEtcIn1dfSkpOigwLG8uWikodi5aLHtpZDpcIk5GWjFnV1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZToxLHZhbHVlOlwidXNlcnNcIn0se3R5cGU6MCx2YWx1ZTpcIiBDT1VMRE4nVCBUQUxLXCJ9XSx2YWx1ZXM6e3VzZXJzOigwLG8uWikoR2Yse3ZhbHVlOnQsdHlwZTpcImNvbmp1bmN0aW9uXCJ9KX19KX1mdW5jdGlvbiB4ZyhlKXtsZXR7Y2FsbGluZ1N0YXR1czp0LGNvbnZlcnNhdGlvbklkOm59PWU7Y29uc3Qgcj1YYygpLGk9VmwobiksYT1pPy5jb252ZXJzYXRpb25UeXBlPT09UGUuaTEuVVNFUkNSRUFURURHUk9VUCxzPWk/LnBhcnRpY2lwYW50cy5tYXAoKGU9PmUucGFydGljaXBhbnRJZCkpLmZpbHRlcigoZT0+ZSE9PXIpKSxjPUFsKHM/P1tdKSxsPVJsKHQudXNlcklkKSx1PXQudXNlcklkPT09cjtpZighaSlyZXR1cm4gbnVsbDtzd2l0Y2godC5jYWxsU3RhdHVzKXtjYXNlIERnLkNhbGxpbmdTdGF0dXNNZXNzYWdlX0NhbGxTdGF0dXMuTUlTU0VEOnJldHVybiB1PygwLG8uWikoVWcse3VzZXJEaXNwbGF5TmFtZXM6Y30pOmE/KDAsby5aKSh2Llose2lkOlwiN3dWTmpqXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjEsdmFsdWU6XCJ1c2VyXCJ9LHt0eXBlOjAsdmFsdWU6XCIgVFJJRUQgVE8gQ0FMTCBUSEUgR1JPVVBcIn1dLHZhbHVlczp7dXNlcjpsfX0pOigwLG8uWikodi5aLHtpZDpcIkdXcitxbFwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZToxLHZhbHVlOlwidXNlclwifSx7dHlwZTowLHZhbHVlOlwiIFRSSUVEIFRPIENBTEwgWU9VXCJ9XSx2YWx1ZXM6e3VzZXI6bH19KTtjYXNlIERnLkNhbGxpbmdTdGF0dXNNZXNzYWdlX0NhbGxTdGF0dXMuTEVGVDpyZXR1cm4gdT9UZ3x8KFRnPSgwLG8uWikodi5aLHtpZDpcIjVjdmthdlwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiWU9VIExFRlQgVEhFIENBTExcIn1dfSkpOigwLG8uWikodi5aLHtpZDpcInBlOFFzZVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZToxLHZhbHVlOlwidXNlclwifSx7dHlwZTowLHZhbHVlOlwiIExFRlQgVEhFIENBTExcIn1dLHZhbHVlczp7dXNlcjpsfX0pO2Nhc2UgRGcuQ2FsbGluZ1N0YXR1c01lc3NhZ2VfQ2FsbFN0YXR1cy5KT0lORUQ6cmV0dXJuIHQudXNlcklkPT09cj9DZ3x8KENnPSgwLG8uWikodi5aLHtpZDpcIjhLOFJSdFwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiWU9VIEpPSU5FRCBUSEUgQ0FMTFwifV19KSk6KDAsby5aKSh2Llose2lkOlwiRlZDcUNRXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjEsdmFsdWU6XCJ1c2VyXCJ9LHt0eXBlOjAsdmFsdWU6XCIgSk9JTkVEIFRIRSBDQUxMXCJ9XSx2YWx1ZXM6e3VzZXI6bH19KTtjYXNlIERnLkNhbGxpbmdTdGF0dXNNZXNzYWdlX0NhbGxTdGF0dXMuRU5ERUQ6cmV0dXJuIEFnfHwoQWc9KDAsby5aKSh2Llose2lkOlwiV05qYkNpXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJDQUxMIEVOREVEXCJ9XX0pKTtjYXNlIERnLkNhbGxpbmdTdGF0dXNNZXNzYWdlX0NhbGxTdGF0dXMuU1RBUlRFRDpjYXNlIERnLkNhbGxpbmdTdGF0dXNNZXNzYWdlX0NhbGxTdGF0dXMuVU5SRUNPR05JWkVEOmRlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIEZnKGUpe2xldHtncm91cENoYXRDcmVhdGVkOnR9PWU7Y29uc3Qgbj1YYygpLHI9dC5pbml0aWF0aW5nVXNlcj09PW4saT1SbCh0LmluaXRpYXRpbmdVc2VyKSxhPXQucGFydGljaXBhbnRzLmZpbHRlcigoZT0+ZSE9PW4pKSxzPUFsKGEpLGM9dC5ncm91cENoYXROYW1lLGw9KDAsby5aKShHZix7dmFsdWU6cyx0eXBlOlwiY29uanVuY3Rpb25cIn0pO2lmKDA9PT1zLmxlbmd0aClyZXR1cm4gYz9SZ3x8KFJnPSgwLG8uWikodi5aLHtpZDpcIjZoMXpHUlwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiWU9VIENSRUFURUQgVEhFIEdST1VQXCJ9XX0pKTooMCxvLlopKHYuWix7aWQ6XCIydG8rUHFcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIllPVSBDUkVBVEVEIFRIRSBHUk9VUCBcIn0se3R5cGU6MSx2YWx1ZTpcImdyb3VwTmFtZVwifV0sdmFsdWVzOntncm91cE5hbWU6Y319KTtpZihyKXJldHVybiBjPygwLG8uWikodi5aLHtpZDpcInJxRlc0ZFwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiWU9VIENSRUFURUQgVEhFIEdST1VQIEFORCBBRERFRCBcIn0se3R5cGU6MSx2YWx1ZTpcInVzZXJzXCJ9XSx2YWx1ZXM6e3VzZXJzOmx9fSk6KDAsby5aKSh2Llose2lkOlwic2d4akFWXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJZT1UgQ1JFQVRFRCBUSEUgR1JPVVAgXCJ9LHt0eXBlOjEsdmFsdWU6XCJncm91cE5hbWVcIn0se3R5cGU6MCx2YWx1ZTpcIiBBTkQgQURERUQgXCJ9LHt0eXBlOjEsdmFsdWU6XCJ1c2Vyc1wifV0sdmFsdWVzOntncm91cE5hbWU6Yyx1c2VyczpsfX0pO3N3aXRjaChzLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBjPygwLG8uWikodi5aLHtpZDpcIjhlNmdVZlwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZToxLHZhbHVlOlwiY3JlYXRvclwifSx7dHlwZTowLHZhbHVlOlwiIENSRUFURUQgVEhFIEdST1VQIEFORCBBRERFRCBZT1VcIn1dLHZhbHVlczp7Y3JlYXRvcjppfX0pOigwLG8uWikodi5aLHtpZDpcIkw0RkZRYlwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZToxLHZhbHVlOlwiY3JlYXRvclwifSx7dHlwZTowLHZhbHVlOlwiIENSRUFURUQgVEhFIEdST1VQIFwifSx7dHlwZToxLHZhbHVlOlwiZ3JvdXBOYW1lXCJ9LHt0eXBlOjAsdmFsdWU6XCIgQU5EIEFEREVEIFlPVVwifV0sdmFsdWVzOntjcmVhdG9yOmksZ3JvdXBOYW1lOmN9fSk7Y2FzZSAxOnJldHVybiBjPygwLG8uWikodi5aLHtpZDpcIkh2V0pDQlwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZToxLHZhbHVlOlwiY3JlYXRvclwifSx7dHlwZTowLHZhbHVlOlwiIENSRUFURUQgVEhFIEdST1VQIEFORCBBRERFRCBZT1UgQU5EIFwifSx7dHlwZToxLHZhbHVlOlwidXNlclwifV0sdmFsdWVzOntjcmVhdG9yOmksdXNlcjpzWzBdfX0pOigwLG8uWikodi5aLHtpZDpcIkQ1OTNGalwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZToxLHZhbHVlOlwiY3JlYXRvclwifSx7dHlwZTowLHZhbHVlOlwiIENSRUFURUQgVEhFIEdST1VQIFwifSx7dHlwZToxLHZhbHVlOlwiZ3JvdXBOYW1lXCJ9LHt0eXBlOjAsdmFsdWU6XCIgQU5EIEFEREVEIFlPVSBBTkQgXCJ9LHt0eXBlOjEsdmFsdWU6XCJ1c2VyXCJ9XSx2YWx1ZXM6e2NyZWF0b3I6aSxncm91cE5hbWU6Yyx1c2VyOnNbMF19fSk7ZGVmYXVsdDpyZXR1cm4gYz8oMCxvLlopKHYuWix7aWQ6XCJFQ2lZWVJcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MSx2YWx1ZTpcImNyZWF0b3JcIn0se3R5cGU6MCx2YWx1ZTpcIiBDUkVBVEVEIFRIRSBHUk9VUCBBTkQgQURERUQgWU9VLCBcIn0se3R5cGU6MSx2YWx1ZTpcInVzZXJzXCJ9XSx2YWx1ZXM6e2NyZWF0b3I6aSx1c2VyczpsfX0pOigwLG8uWikodi5aLHtpZDpcIllqZGlyZlwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZToxLHZhbHVlOlwiY3JlYXRvclwifSx7dHlwZTowLHZhbHVlOlwiIENSRUFURUQgVEhFIEdST1VQIFwifSx7dHlwZToxLHZhbHVlOlwiZ3JvdXBOYW1lXCJ9LHt0eXBlOjAsdmFsdWU6XCIgQU5EIEFEREVEIFlPVSwgXCJ9LHt0eXBlOjEsdmFsdWU6XCJ1c2Vyc1wifV0sdmFsdWVzOntjcmVhdG9yOmksZ3JvdXBOYW1lOmMsdXNlcnM6bH19KX19ZnVuY3Rpb24gQmcoZSl7bGV0e25hbWVTdGF0dXNDaGFuZ2U6dH09ZTtjb25zdHtpbml0aWF0aW5nVXNlcklkOm4sbmV3TmFtZTpyfT10LGk9WGMoKSxhPVJsKG4pO3JldHVybiBuPT09aT8oMCxvLlopKHYuWix7aWQ6XCJzdVdKNEFcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIllPVSBDSEFOR0VEIFRIRSBHUk9VUCBOQU1FIFRPIFwifSx7dHlwZToxLHZhbHVlOlwibmV3TmFtZVwifV0sdmFsdWVzOntuZXdOYW1lOnJ9fSk6KDAsby5aKSh2Llose2lkOlwiQW8xU0wwXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjEsdmFsdWU6XCJhY3Rvck5hbWVcIn0se3R5cGU6MCx2YWx1ZTpcIiBDSEFOR0VEIFRIRSBHUk9VUCBOQU1FIFRPIFwifSx7dHlwZToxLHZhbHVlOlwibmV3TmFtZVwifV0sdmFsdWVzOnthY3Rvck5hbWU6YSxuZXdOYW1lOnJ9fSl9ZnVuY3Rpb24gVmcoZSl7bGV0e2ludml0ZUxpbms6dH09ZTtjb25zdCBuPVhjKCkscj1SbCh0LmluaXRpYXRpbmdVc2VySWQpLGk9bj09PXQuaW5pdGlhdGluZ1VzZXJJZDtzd2l0Y2godC5pbnZpdGVMaW5rU3RhdHVzKXtjYXNlIERnLkludml0ZUxpbmtTdGF0dXNNZXNzYWdlX0ludml0ZUxpbmtTdGF0dXMuSU5WSVRFX0xJTktfU1RBVFVTX0NSRUFURUQ6cmV0dXJuIGk/a2d8fChrZz0oMCxvLlopKHYuWix7aWQ6XCJYa3YreGhcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIllPVSBDUkVBVEVEIEFOIElOVklURSBMSU5LIFRPIFRIRSBHUk9VUFwifV19KSk6KDAsby5aKSh2Llose2lkOlwiNDdvc0dQXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjEsdmFsdWU6XCJ1c2VyXCJ9LHt0eXBlOjAsdmFsdWU6XCIgQ1JFQVRFRCBBTiBJTlZJVEUgTElOSyBUTyBUSEUgR1JPVVBcIn1dLHZhbHVlczp7dXNlcjpyfX0pO2Nhc2UgRGcuSW52aXRlTGlua1N0YXR1c01lc3NhZ2VfSW52aXRlTGlua1N0YXR1cy5JTlZJVEVfTElOS19TVEFUVVNfREVMRVRFRDpyZXR1cm4gaT9PZ3x8KE9nPSgwLG8uWikodi5aLHtpZDpcIlhWdGRzN1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiWU9VIENBTkNFTExFRCBFWElTVElORyBJTlZJVEUgTElOS1MgVE8gVEhFIEdST1VQXCJ9XX0pKTooMCxvLlopKHYuWix7aWQ6XCJsOEFMNlJcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MSx2YWx1ZTpcInVzZXJcIn0se3R5cGU6MCx2YWx1ZTpcIiBDQU5DRUxMRUQgRVhJU1RJTkcgSU5WSVRFIExJTktTIFRPIFRIRSBHUk9VUFwifV0sdmFsdWVzOnt1c2VyOnJ9fSk7Y2FzZSBEZy5JbnZpdGVMaW5rU3RhdHVzTWVzc2FnZV9JbnZpdGVMaW5rU3RhdHVzLklOVklURV9MSU5LX1NUQVRVU19VTlNFVDpjYXNlIERnLkludml0ZUxpbmtTdGF0dXNNZXNzYWdlX0ludml0ZUxpbmtTdGF0dXMuVU5SRUNPR05JWkVEOn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBHZyhlKXtsZXR7bWVzc2FnZUVyYXNlOnR9PWU7Y29uc3Qgbj1YYygpPT09dC51c2VySWQscj1SbCh0LnVzZXJJZCk7c3dpdGNoKHQubWVzc2FnZVR5cGUpe2Nhc2UgRGcuTWVzc2FnZUVyYXNlU3RhdHVzTWVzc2FnZV9NZXNzYWdlVHlwZS5DSEFUOnJldHVybiBuP05nfHwoTmc9KDAsby5aKSh2Llose2lkOlwiN1VRVzlhXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJZT1UgREVMRVRFRCBBIENIQVRcIn1dfSkpOigwLG8uWikodi5aLHtpZDpcIjRWdzF5clwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZToxLHZhbHVlOlwidXNlclwifSx7dHlwZTowLHZhbHVlOlwiIERFTEVURUQgQSBDSEFUXCJ9XSx2YWx1ZXM6e3VzZXI6cn19KTtjYXNlIERnLk1lc3NhZ2VFcmFzZVN0YXR1c01lc3NhZ2VfTWVzc2FnZVR5cGUuU05BUDpyZXR1cm4gbj93Z3x8KHdnPSgwLG8uWikodi5aLHtpZDpcIlVLYU5oTFwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiWU9VIERFTEVURUQgQSBTTkFQXCJ9XX0pKTooMCxvLlopKHYuWix7aWQ6XCJha0t1TDdcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MSx2YWx1ZTpcInVzZXJcIn0se3R5cGU6MCx2YWx1ZTpcIiBERUxFVEVEIEEgU05BUFwifV0sdmFsdWVzOnt1c2VyOnJ9fSk7Y2FzZSBEZy5NZXNzYWdlRXJhc2VTdGF0dXNNZXNzYWdlX01lc3NhZ2VUeXBlLlVOUkVDT0dOSVpFRDpjYXNlIERnLk1lc3NhZ2VFcmFzZVN0YXR1c01lc3NhZ2VfTWVzc2FnZVR5cGUuVU5TRVQ6cmV0dXJuIG51bGx9fXZhciBIZyxXZz1uKDEwNDgxKTtmdW5jdGlvbiBqZyhlKXtsZXR7cGFydGljaXBhbnRDaGFuZ2U6dH09ZTtjb25zdCBuPVhjKCkscj10LnN0YXR1c0NoYW5nZXMubWFwKChlPT5lLmFmZmVjdGVkVXNlcikpLmZpbHRlcigoZT0+dm9pZCAwIT09ZSkpLGk9QWwoci5maWx0ZXIoKGU9PmUhPT1uKSkpLGE9KDAsby5aKShHZix7dmFsdWU6aSx0eXBlOlwiY29uanVuY3Rpb25cIn0pLHM9ci5pbmNsdWRlcyhuKSxjPSgwLHouclMpKHQuaW5pdGlhdGluZ1VzZXIpP3JbMF06dC5pbml0aWF0aW5nVXNlcixsPVJsKGMpO2lmKCFjKXJldHVybiBudWxsO2NvbnN0IHU9Yz09PW4sZD10LnN0YXR1c0NoYW5nZXNbMF0uY2hhbmdlT3JpZ2luO3N3aXRjaCh0LnN0YXR1c0NoYW5nZXNbMF0uc3RhdHVzQ2hhbmdlKXtjYXNlIERnLlBhcnRpY2lwYW50Q2hhbmdlU3RhdHVzTWVzc2FnZV9FbnRyeV9TdGF0dXNDaGFuZ2UuQURERUQ6cmV0dXJuW1dnLnUuQ0hBTkdFX09SSUdJTl9HUk9VUF9JTlZJVEVfTElOSyxXZy51LkNIQU5HRV9PUklHSU5fR1JPVVBfSU5WSVRFX1NUSUNLRVJdLmluY2x1ZGVzKGQpP3U/KDAsby5aKSh2Llose2lkOlwiK3R3UUZ1XCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjEsdmFsdWU6XCJ1c2VyXCJ9LHt0eXBlOjAsdmFsdWU6XCIgQUNDRVBURUQgWU9VUiBJTlZJVEUgVE8gVEhFIEdST1VQXCJ9XSx2YWx1ZXM6e3VzZXI6YX19KTpzPygwLG8uWikodi5aLHtpZDpcInh3VW5NQ1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiWU9VIEFDQ0VQVEVEIFwifSx7dHlwZToxLHZhbHVlOlwiaW52aXRlclwifSx7dHlwZTowLHZhbHVlOlwiJ1MgSU5WSVRFIFRPIFRIRSBHUk9VUFwifV0sdmFsdWVzOntpbnZpdGVyOmx9fSk6KDAsby5aKSh2Llose2lkOlwiNmtJUmNOXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjEsdmFsdWU6XCJ1c2VyXCJ9LHt0eXBlOjAsdmFsdWU6XCIgQUNDRVBURUQgXCJ9LHt0eXBlOjEsdmFsdWU6XCJpbnZpdGVyXCJ9LHt0eXBlOjAsdmFsdWU6XCInUyBJTlZJVEUgVE8gVEhFIEdST1VQXCJ9XSx2YWx1ZXM6e3VzZXI6YSxpbnZpdGVyOmx9fSk6dT8oMCxvLlopKHYuWix7aWQ6XCJMc3B3NFFcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIllPVSBBRERFRCBcIn0se3R5cGU6MSx2YWx1ZTpcInVzZXJcIn0se3R5cGU6MCx2YWx1ZTpcIiBUTyBUSEUgR1JPVVBcIn1dLHZhbHVlczp7dXNlcjphfX0pOnM/aS5sZW5ndGg+MD8oMCxvLlopKHYuWix7aWQ6XCI4NE5hUWRcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MSx2YWx1ZTpcImludml0ZXJcIn0se3R5cGU6MCx2YWx1ZTpcIiBBRERFRCBZT1UsIFwifSx7dHlwZToxLHZhbHVlOlwidXNlcnNcIn0se3R5cGU6MCx2YWx1ZTpcIiBUTyBUSEUgR1JPVVBcIn1dLHZhbHVlczp7dXNlcnM6YSxpbnZpdGVyOmx9fSk6KDAsby5aKSh2Llose2lkOlwibzZ2TTkwXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjEsdmFsdWU6XCJpbnZpdGVyXCJ9LHt0eXBlOjAsdmFsdWU6XCIgQURERUQgWU9VIFRPIFRIRSBHUk9VUFwifV0sdmFsdWVzOntpbnZpdGVyOmx9fSk6KDAsby5aKSh2Llose2lkOlwiWDBqS3k3XCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjEsdmFsdWU6XCJpbnZpdGVyXCJ9LHt0eXBlOjAsdmFsdWU6XCIgQURERUQgXCJ9LHt0eXBlOjEsdmFsdWU6XCJ1c2VyXCJ9LHt0eXBlOjAsdmFsdWU6XCIgVE8gVEhFIEdST1VQXCJ9XSx2YWx1ZXM6e3VzZXI6YSxpbnZpdGVyOmx9fSk7Y2FzZSBEZy5QYXJ0aWNpcGFudENoYW5nZVN0YXR1c01lc3NhZ2VfRW50cnlfU3RhdHVzQ2hhbmdlLkxFRlQ6cmV0dXJuKDAsby5aKSh2Llose2lkOlwiYWc0WGJzXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjEsdmFsdWU6XCJ1c2VyXCJ9LHt0eXBlOjAsdmFsdWU6XCIgTEVGVCBUSEUgR1JPVVBcIn1dLHZhbHVlczp7dXNlcjpsfX0pO2Nhc2UgRGcuUGFydGljaXBhbnRDaGFuZ2VTdGF0dXNNZXNzYWdlX0VudHJ5X1N0YXR1c0NoYW5nZS5DUkVBVEVEOmNhc2UgRGcuUGFydGljaXBhbnRDaGFuZ2VTdGF0dXNNZXNzYWdlX0VudHJ5X1N0YXR1c0NoYW5nZS5VTlJFQ09HTklaRUQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIFpnKGUpe2xldHtjaGFuZ2VSZXRlbnRpb25Qb2xpY3k6dH09ZTtjb25zdCBuPVJsKHQuaW5pdGlhdGluZ1VzZXJJZCkscj1YYygpPT09dC5pbml0aWF0aW5nVXNlcklkLGk9dC5uZXdSZXRlbnRpb25Qb2xpY3k/LnJldGVudGlvblBvbGljeTtpZighaSlyZXR1cm4gbnVsbDtpZihcImR5bmFtaWNcIj09PWkuJGNhc2Upe2NvbnN0IGU9TWF0aC5yb3VuZChOdW1iZXIoaS5keW5hbWljLnJlYWRSZXRlbnRpb25UaW1lU2Vjb25kcykvNjApO2lmKDA9PT1lKXJldHVybiByP0hnfHwoSGc9KDAsby5aKSh2Llose2lkOlwiaDYwQytWXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJZT1UgQ0hBTkdFRCBXSEVOIENIQVRTIEFSRSBTRVQgVE8gREVMRVRFIFRPIElNTUVESUFURUxZIEFGVEVSIFZJRVdJTkdcIn1dfSkpOigwLG8uWikodi5aLHtpZDpcInZuSzhkV1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZToxLHZhbHVlOlwidXNlclwifSx7dHlwZTowLHZhbHVlOlwiIENIQU5HRUQgV0hFTiBDSEFUUyBBUkUgU0VUIFRPIERFTEVURSBUTyBJTU1FRElBVEVMWSBBRlRFUiBWSUVXSU5HXCJ9XSx2YWx1ZXM6e3VzZXI6bn19KTtpZihlPjYwJiZlJTYwPT0wKXtjb25zdCB0PWUvNjA7cmV0dXJuIHI/KDAsby5aKSh2Llose2lkOlwiYU5pOGFsXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJZT1UgQ0hBTkdFRCBXSEVOIENIQVRTIEFSRSBTRVQgVE8gREVMRVRFIFRPIFwifSx7dHlwZToxLHZhbHVlOlwibnVtSG91cnNcIn0se3R5cGU6MCx2YWx1ZTpcIiBIT1VSUyBBRlRFUiBWSUVXSU5HXCJ9XSx2YWx1ZXM6e251bUhvdXJzOnR9fSk6KDAsby5aKSh2Llose2lkOlwiNGZsQmlxXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjEsdmFsdWU6XCJ1c2VyXCJ9LHt0eXBlOjAsdmFsdWU6XCIgQ0hBTkdFRCBXSEVOIENIQVRTIEFSRSBTRVQgVE8gREVMRVRFIFRPIFwifSx7dHlwZToxLHZhbHVlOlwibnVtSG91cnNcIn0se3R5cGU6MCx2YWx1ZTpcIiBIT1VSUyBBRlRFUiBWSUVXSU5HXCJ9XSx2YWx1ZXM6e251bUhvdXJzOnQsdXNlcjpufX0pfXJldHVybiByPygwLG8uWikodi5aLHtpZDpcImY5N3A4dFwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiWU9VIENIQU5HRUQgV0hFTiBDSEFUUyBBUkUgU0VUIFRPIERFTEVURSBUTyBcIn0se3R5cGU6MSx2YWx1ZTpcIm51bU1pbnNcIn0se3R5cGU6MCx2YWx1ZTpcIiBNSU5VVEVTIEFGVEVSIFZJRVdJTkdcIn1dLHZhbHVlczp7bnVtTWluczplfX0pOigwLG8uWikodi5aLHtpZDpcIlNpNjZOeFwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZToxLHZhbHVlOlwidXNlclwifSx7dHlwZTowLHZhbHVlOlwiIENIQU5HRUQgV0hFTiBDSEFUUyBBUkUgU0VUIFRPIERFTEVURSBUTyBcIn0se3R5cGU6MSx2YWx1ZTpcIm51bU1pbnNcIn0se3R5cGU6MCx2YWx1ZTpcIiBNSU5VVEVTIEFGVEVSIFZJRVdJTkdcIn1dLHZhbHVlczp7bnVtTWluczplLHVzZXI6bn19KX19dmFyIHpnLEtnPW4oNTA4MjEpO2Z1bmN0aW9uIFlnKCl7cmV0dXJuIFlnPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sWWcuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IHFnPWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLFlnKHt3aWR0aDoxMCxoZWlnaHQ6OCx2aWV3Qm94OlwiMCAwIDEwIDhcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksemd8fCh6Zz1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNMy40NjUgNS4xNCA3Ljg5My43MTJhLjkzNy45MzcgMCAxIDEgMS4zMjUgMS4zMjZsLTUuMDkgNS4wOWEuOTM3LjkzNyAwIDAgMS0xLjMyNiAwTC41ODcgNC45MTNhLjkzNy45MzcgMCAxIDEgMS4zMjYtMS4zMjVMMy40NjUgNS4xNFpcIixmaWxsOlwiI2ZmZlwifSkpKSxYZz17aWNvbldyYXBwZXI6XCJ4SjNCY1wiLGNoZWNrZWQ6XCJNQ3dlN1wiLGRpc2FibGVkQ2hlY2tlZDpcImRfdlRPXCIsdW5jaGVja2VkOlwiWGY0V1UgeEozQmNcIn07dmFyIFFnO2Z1bmN0aW9uIEpnKGUpe2xldHtjaGVja2VkOnQ9ITEsZGlzYWJsZWQ6bj0hMX09ZTtyZXR1cm4oMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTooMCxRLlopKFhnLmljb25XcmFwcGVyLHQ/bj9YZy5kaXNhYmxlZENoZWNrZWQ6WGcuY2hlY2tlZDpYZy51bmNoZWNrZWQpfSx2b2lkIDAsdCYmKFFnfHwoUWc9KDAsby5aKShxZyx7fSkpKSl9ZnVuY3Rpb24gJGcoZSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPWUmJjE9PT1lLm5vZGVUeXBlfWZ1bmN0aW9uIGV5KGUsdCl7cmV0dXJuKCF0fHxcImhpZGRlblwiIT09ZSkmJlwidmlzaWJsZVwiIT09ZSYmXCJjbGlwXCIhPT1lfWZ1bmN0aW9uIHR5KGUsdCl7aWYoZS5jbGllbnRIZWlnaHQ8ZS5zY3JvbGxIZWlnaHR8fGUuY2xpZW50V2lkdGg8ZS5zY3JvbGxXaWR0aCl7dmFyIG49Z2V0Q29tcHV0ZWRTdHlsZShlLG51bGwpO3JldHVybiBleShuLm92ZXJmbG93WSx0KXx8ZXkobi5vdmVyZmxvd1gsdCl8fGZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKGUpe2lmKCFlLm93bmVyRG9jdW1lbnR8fCFlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZnJhbWVFbGVtZW50fWNhdGNoKGUpe3JldHVybiBudWxsfX0oZSk7cmV0dXJuISF0JiYodC5jbGllbnRIZWlnaHQ8ZS5zY3JvbGxIZWlnaHR8fHQuY2xpZW50V2lkdGg8ZS5zY3JvbGxXaWR0aCl9KGUpfXJldHVybiExfWZ1bmN0aW9uIG55KGUsdCxuLHIsaSxvLGEscyl7cmV0dXJuIG88ZSYmYT50fHxvPmUmJmE8dD8wOm88PWUmJnM8PW58fGE+PXQmJnM+PW4/by1lLXI6YT50JiZzPG58fG88ZSYmcz5uP2EtdCtpOjB9big1OTg2NCk7bGV0IHJ5PTA7ZnVuY3Rpb24gaXkoKXt9ZnVuY3Rpb24gb3koZSx0LG4pe3JldHVybiBlPT09dHx8dCBpbnN0YW5jZW9mIG4uTm9kZSYmZS5jb250YWlucyYmZS5jb250YWlucyh0KX1mdW5jdGlvbiBheShlLHQpe2xldCBuO2Z1bmN0aW9uIHIoKXtuJiZjbGVhclRpbWVvdXQobil9ZnVuY3Rpb24gaSgpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoLG89bmV3IEFycmF5KGkpLGE9MDthPGk7YSsrKW9bYV09YXJndW1lbnRzW2FdO3IoKSxuPXNldFRpbWVvdXQoKCgpPT57bj1udWxsLGUoLi4ubyl9KSx0KX1yZXR1cm4gaS5jYW5jZWw9cixpfWZ1bmN0aW9uIHN5KCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KG4+MT9uLTE6MCksaT0xO2k8bjtpKyspcltpLTFdPWFyZ3VtZW50c1tpXTtyZXR1cm4gdC5zb21lKCh0PT4odCYmdChlLC4uLnIpLGUucHJldmVudERvd25zaGlmdERlZmF1bHR8fGUuaGFzT3duUHJvcGVydHkoXCJuYXRpdmVFdmVudFwiKSYmZS5uYXRpdmVFdmVudC5wcmV2ZW50RG93bnNoaWZ0RGVmYXVsdCkpKX19ZnVuY3Rpb24gY3koKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gZT0+e3QuZm9yRWFjaCgodD0+e1wiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dChlKTp0JiYodC5jdXJyZW50PWUpfSkpfX1mdW5jdGlvbiBseSgpe3JldHVybiBTdHJpbmcocnkrKyl9ZnVuY3Rpb24gdXkoZSx0KXtyZXR1cm4gT2JqZWN0LmtleXMoZSkucmVkdWNlKCgobixyKT0+KG5bcl09ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwIT09ZVt0XX0odCxyKT90W3JdOmVbcl0sbikpLHt9KX1mdW5jdGlvbiBkeShlKXtjb25zdHtrZXk6dCxrZXlDb2RlOm59PWU7cmV0dXJuIG4+PTM3JiZuPD00MCYmMCE9PXQuaW5kZXhPZihcIkFycm93XCIpP2BBcnJvdyR7dH1gOnR9ZnVuY3Rpb24gZnkoZSx0LG4scixpKXtpZih2b2lkIDA9PT1pJiYoaT0hMCksMD09PW4pcmV0dXJuLTE7Y29uc3Qgbz1uLTE7KFwibnVtYmVyXCIhPXR5cGVvZiB0fHx0PDB8fHQ+PW4pJiYodD1lPjA/LTE6bysxKTtsZXQgYT10K2U7YTwwP2E9aT9vOjA6YT5vJiYoYT1pPzA6byk7Y29uc3Qgcz1weShlLGEsbixyLGkpO3JldHVybi0xPT09cz90Pj1uPy0xOnQ6c31mdW5jdGlvbiBweShlLHQsbixyLGkpe2NvbnN0IG89cih0KTtpZighb3x8IW8uaGFzQXR0cmlidXRlKFwiZGlzYWJsZWRcIikpcmV0dXJuIHQ7aWYoZT4wKXtmb3IobGV0IGU9dCsxO2U8bjtlKyspaWYoIXIoZSkuaGFzQXR0cmlidXRlKFwiZGlzYWJsZWRcIikpcmV0dXJuIGV9ZWxzZSBmb3IobGV0IGU9dC0xO2U+PTA7ZS0tKWlmKCFyKGUpLmhhc0F0dHJpYnV0ZShcImRpc2FibGVkXCIpKXJldHVybiBlO3JldHVybiBpP2U+MD9weSgxLDAsbixyLCExKTpweSgtMSxuLTEsbixyLCExKTotMX1mdW5jdGlvbiBteShlLHQsbixyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9ITApLHQuc29tZSgodD0+dCYmKG95KHQsZSxuKXx8ciYmb3kodCxuLmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQsbikpKSl9Y29uc3QgaHk9YXkoKGU9Pnt2eShlKS50ZXh0Q29udGVudD1cIlwifSksNTAwKTtmdW5jdGlvbiB2eShlKXt2b2lkIDA9PT1lJiYoZT1kb2N1bWVudCk7bGV0IHQ9ZS5nZXRFbGVtZW50QnlJZChcImExMXktc3RhdHVzLW1lc3NhZ2VcIik7cmV0dXJuIHR8fCh0PWUuY3JlYXRlRWxlbWVudChcImRpdlwiKSx0LnNldEF0dHJpYnV0ZShcImlkXCIsXCJhMTF5LXN0YXR1cy1tZXNzYWdlXCIpLHQuc2V0QXR0cmlidXRlKFwicm9sZVwiLFwic3RhdHVzXCIpLHQuc2V0QXR0cmlidXRlKFwiYXJpYS1saXZlXCIsXCJwb2xpdGVcIiksdC5zZXRBdHRyaWJ1dGUoXCJhcmlhLXJlbGV2YW50XCIsXCJhZGRpdGlvbnMgdGV4dFwiKSxPYmplY3QuYXNzaWduKHQuc3R5bGUse2JvcmRlcjpcIjBcIixjbGlwOlwicmVjdCgwIDAgMCAwKVwiLGhlaWdodDpcIjFweFwiLG1hcmdpbjpcIi0xcHhcIixvdmVyZmxvdzpcImhpZGRlblwiLHBhZGRpbmc6XCIwXCIscG9zaXRpb246XCJhYnNvbHV0ZVwiLHdpZHRoOlwiMXB4XCJ9KSxlLmJvZHkuYXBwZW5kQ2hpbGQodCksdCl9Y29uc3QgZ3k9e2hpZ2hsaWdodGVkSW5kZXg6LTEsaXNPcGVuOiExLHNlbGVjdGVkSXRlbTpudWxsLGlucHV0VmFsdWU6XCJcIn0seXk9YXkoKChlLHQpPT57IWZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj12eSh0KTtlJiYobi50ZXh0Q29udGVudD1lLGh5KHQpKX0oZSgpLHQpfSksMjAwKSxFeT1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ2b2lkIDAhPT13aW5kb3cuZG9jdW1lbnQmJnZvaWQgMCE9PXdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50P2QudXNlTGF5b3V0RWZmZWN0OmQudXNlRWZmZWN0O2Z1bmN0aW9uIF95KGUpe3JldHVybi9eXFxTezF9JC8udGVzdChlKX1mdW5jdGlvbiBJeShlKXtyZXR1cm5gJHtlLnNsaWNlKDAsMSkudG9VcHBlckNhc2UoKX0ke2Uuc2xpY2UoMSl9YH1mdW5jdGlvbiBTeShlKXtjb25zdCB0PSgwLGQudXNlUmVmKShlKTtyZXR1cm4gdC5jdXJyZW50PWUsdH1jb25zdCBieT17aXRlbVRvU3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiBlP1N0cmluZyhlKTpcIlwifSxzdGF0ZVJlZHVjZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5jaGFuZ2VzfSxnZXRBMTF5U2VsZWN0aW9uTWVzc2FnZTpmdW5jdGlvbihlKXtjb25zdHtzZWxlY3RlZEl0ZW06dCxpdGVtVG9TdHJpbmc6bn09ZTtyZXR1cm4gdD9gJHtuKHQpfSBoYXMgYmVlbiBzZWxlY3RlZC5gOlwiXCJ9LHNjcm9sbEludG9WaWV3OmZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuO2NvbnN0IG49ZnVuY3Rpb24oZSx0KXt2YXIgbj13aW5kb3cscj10LnNjcm9sbE1vZGUsaT10LmJsb2NrLG89dC5pbmxpbmUsYT10LmJvdW5kYXJ5LHM9dC5za2lwT3ZlcmZsb3dIaWRkZW5FbGVtZW50cyxjPVwiZnVuY3Rpb25cIj09dHlwZW9mIGE/YTpmdW5jdGlvbihlKXtyZXR1cm4gZSE9PWF9O2lmKCEkZyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCB0YXJnZXRcIik7Zm9yKHZhciBsLHUsZD1kb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZj1bXSxwPWU7JGcocCkmJmMocCk7KXtpZigocD1udWxsPT0odT0obD1wKS5wYXJlbnRFbGVtZW50KT9sLmdldFJvb3ROb2RlKCkuaG9zdHx8bnVsbDp1KT09PWQpe2YucHVzaChwKTticmVha31udWxsIT1wJiZwPT09ZG9jdW1lbnQuYm9keSYmdHkocCkmJiF0eShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpfHxudWxsIT1wJiZ0eShwLHMpJiZmLnB1c2gocCl9Zm9yKHZhciBtPW4udmlzdWFsVmlld3BvcnQ/bi52aXN1YWxWaWV3cG9ydC53aWR0aDppbm5lcldpZHRoLGg9bi52aXN1YWxWaWV3cG9ydD9uLnZpc3VhbFZpZXdwb3J0LmhlaWdodDppbm5lckhlaWdodCx2PXdpbmRvdy5zY3JvbGxYfHxwYWdlWE9mZnNldCxnPXdpbmRvdy5zY3JvbGxZfHxwYWdlWU9mZnNldCx5PWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksRT15LmhlaWdodCxfPXkud2lkdGgsST15LnRvcCxTPXkucmlnaHQsYj15LmJvdHRvbSxUPXkubGVmdCxDPVwic3RhcnRcIj09PWl8fFwibmVhcmVzdFwiPT09aT9JOlwiZW5kXCI9PT1pP2I6SStFLzIsQT1cImNlbnRlclwiPT09bz9UK18vMjpcImVuZFwiPT09bz9TOlQsUj1bXSxrPTA7azxmLmxlbmd0aDtrKyspe3ZhciBPPWZba10sTj1PLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHc9Ti5oZWlnaHQsRD1OLndpZHRoLFA9Ti50b3AsTT1OLnJpZ2h0LEw9Ti5ib3R0b20sVT1OLmxlZnQ7aWYoXCJpZi1uZWVkZWRcIj09PXImJkk+PTAmJlQ+PTAmJmI8PWgmJlM8PW0mJkk+PVAmJmI8PUwmJlQ+PVUmJlM8PU0pcmV0dXJuIFI7dmFyIHg9Z2V0Q29tcHV0ZWRTdHlsZShPKSxGPXBhcnNlSW50KHguYm9yZGVyTGVmdFdpZHRoLDEwKSxCPXBhcnNlSW50KHguYm9yZGVyVG9wV2lkdGgsMTApLFY9cGFyc2VJbnQoeC5ib3JkZXJSaWdodFdpZHRoLDEwKSxHPXBhcnNlSW50KHguYm9yZGVyQm90dG9tV2lkdGgsMTApLEg9MCxXPTAsaj1cIm9mZnNldFdpZHRoXCJpbiBPP08ub2Zmc2V0V2lkdGgtTy5jbGllbnRXaWR0aC1GLVY6MCxaPVwib2Zmc2V0SGVpZ2h0XCJpbiBPP08ub2Zmc2V0SGVpZ2h0LU8uY2xpZW50SGVpZ2h0LUItRzowLHo9XCJvZmZzZXRXaWR0aFwiaW4gTz8wPT09Ty5vZmZzZXRXaWR0aD8wOkQvTy5vZmZzZXRXaWR0aDowLEs9XCJvZmZzZXRIZWlnaHRcImluIE8/MD09PU8ub2Zmc2V0SGVpZ2h0PzA6dy9PLm9mZnNldEhlaWdodDowO2lmKGQ9PT1PKUg9XCJzdGFydFwiPT09aT9DOlwiZW5kXCI9PT1pP0MtaDpcIm5lYXJlc3RcIj09PWk/bnkoZyxnK2gsaCxCLEcsZytDLGcrQytFLEUpOkMtaC8yLFc9XCJzdGFydFwiPT09bz9BOlwiY2VudGVyXCI9PT1vP0EtbS8yOlwiZW5kXCI9PT1vP0EtbTpueSh2LHYrbSxtLEYsVix2K0EsditBK18sXyksSD1NYXRoLm1heCgwLEgrZyksVz1NYXRoLm1heCgwLFcrdik7ZWxzZXtIPVwic3RhcnRcIj09PWk/Qy1QLUI6XCJlbmRcIj09PWk/Qy1MK0crWjpcIm5lYXJlc3RcIj09PWk/bnkoUCxMLHcsQixHK1osQyxDK0UsRSk6Qy0oUCt3LzIpK1ovMixXPVwic3RhcnRcIj09PW8/QS1VLUY6XCJjZW50ZXJcIj09PW8/QS0oVStELzIpK2ovMjpcImVuZFwiPT09bz9BLU0rVitqOm55KFUsTSxELEYsVitqLEEsQStfLF8pO3ZhciBZPU8uc2Nyb2xsTGVmdCxxPU8uc2Nyb2xsVG9wO0MrPXEtKEg9TWF0aC5tYXgoMCxNYXRoLm1pbihxK0gvSyxPLnNjcm9sbEhlaWdodC13L0srWikpKSxBKz1ZLShXPU1hdGgubWF4KDAsTWF0aC5taW4oWStXL3osTy5zY3JvbGxXaWR0aC1EL3oraikpKX1SLnB1c2goe2VsOk8sdG9wOkgsbGVmdDpXfSl9cmV0dXJuIFJ9KGUse2JvdW5kYXJ5OnQsYmxvY2s6XCJuZWFyZXN0XCIsc2Nyb2xsTW9kZTpcImlmLW5lZWRlZFwifSk7bi5mb3JFYWNoKChlPT57bGV0e2VsOnQsdG9wOm4sbGVmdDpyfT1lO3Quc2Nyb2xsVG9wPW4sdC5zY3JvbGxMZWZ0PXJ9KSl9LGNpcmN1bGFyTmF2aWdhdGlvbjohMSxlbnZpcm9ubWVudDpcInVuZGVmaW5lZFwiPT10eXBlb2Ygd2luZG93P3t9OndpbmRvd307ZnVuY3Rpb24gVHkoZSx0LG4pe3ZvaWQgMD09PW4mJihuPWd5KTtjb25zdCByPWVbYGRlZmF1bHQke0l5KHQpfWBdO3JldHVybiB2b2lkIDAhPT1yP3I6blt0XX1mdW5jdGlvbiBDeShlLHQsbil7dm9pZCAwPT09biYmKG49Z3kpO2NvbnN0IHI9ZVt0XTtpZih2b2lkIDAhPT1yKXJldHVybiByO2NvbnN0IGk9ZVtgaW5pdGlhbCR7SXkodCl9YF07cmV0dXJuIHZvaWQgMCE9PWk/aTpUeShlLHQsbil9ZnVuY3Rpb24gQXkoZSx0LG4scil7Y29uc3R7aXRlbXM6aSxpbml0aWFsSGlnaGxpZ2h0ZWRJbmRleDpvLGRlZmF1bHRIaWdobGlnaHRlZEluZGV4OmF9PWUse3NlbGVjdGVkSXRlbTpzLGhpZ2hsaWdodGVkSW5kZXg6Y309dDtyZXR1cm4gMD09PWkubGVuZ3RoPy0xOnZvaWQgMCE9PW8mJmM9PT1vP286dm9pZCAwIT09YT9hOnM/MD09PW4/aS5pbmRleE9mKHMpOmZ5KG4saS5pbmRleE9mKHMpLGkubGVuZ3RoLHIsITEpOjA9PT1uPy0xOm48MD9pLmxlbmd0aC0xOjB9bGV0IFJ5PSgpPT5peTtmdW5jdGlvbiBreShlLHQsbil7bGV0e2lzSW5pdGlhbE1vdW50OnIsaGlnaGxpZ2h0ZWRJbmRleDppLGl0ZW1zOm8sZW52aXJvbm1lbnQ6YSwuLi5zfT1uOygwLGQudXNlRWZmZWN0KSgoKCk9PntyfHx5eSgoKCk9PmUoe2hpZ2hsaWdodGVkSW5kZXg6aSxoaWdobGlnaHRlZEl0ZW06b1tpXSxyZXN1bHRDb3VudDpvLmxlbmd0aCwuLi5zfSkpLGEuZG9jdW1lbnQpfSksdCl9bGV0IE95PWl5O2Z1bmN0aW9uIE55KGUpe2Zvcih2YXIgdD1lLmtleXNTb0ZhcixuPWUuaGlnaGxpZ2h0ZWRJbmRleCxyPWUuaXRlbXMsaT1lLml0ZW1Ub1N0cmluZyxvPWUuZ2V0SXRlbU5vZGVGcm9tSW5kZXgsYT10LnRvTG93ZXJDYXNlKCkscz0wO3M8ci5sZW5ndGg7cysrKXt2YXIgYz0ocytuKzEpJXIubGVuZ3RoLGw9cltjXTtpZih2b2lkIDAhPT1sJiZpKGwpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChhKSl7dmFyIHU9byhjKTtpZighKG51bGw9PXU/dm9pZCAwOnUuaGFzQXR0cmlidXRlKFwiZGlzYWJsZWRcIikpKXJldHVybiBjfX1yZXR1cm4gbn1IcygpLmFycmF5LmlzUmVxdWlyZWQsSHMoKS5mdW5jLEhzKCkuZnVuYyxIcygpLmZ1bmMsSHMoKS5ib29sLEhzKCkubnVtYmVyLEhzKCkubnVtYmVyLEhzKCkubnVtYmVyLEhzKCkuYm9vbCxIcygpLmJvb2wsSHMoKS5ib29sLEhzKCkuYW55LEhzKCkuYW55LEhzKCkuYW55LEhzKCkuc3RyaW5nLEhzKCkuc3RyaW5nLEhzKCkuc3RyaW5nLEhzKCkuZnVuYyxIcygpLnN0cmluZyxIcygpLmZ1bmMsSHMoKS5mdW5jLEhzKCkuZnVuYyxIcygpLmZ1bmMsSHMoKS5mdW5jLEhzKCkuc2hhcGUoe2FkZEV2ZW50TGlzdGVuZXI6SHMoKS5mdW5jLHJlbW92ZUV2ZW50TGlzdGVuZXI6SHMoKS5mdW5jLGRvY3VtZW50OkhzKCkuc2hhcGUoe2dldEVsZW1lbnRCeUlkOkhzKCkuZnVuYyxhY3RpdmVFbGVtZW50OkhzKCkuYW55LGJvZHk6SHMoKS5hbnl9KX0pO3ZhciB3eT0oMCxXcy5fX2Fzc2lnbikoKDAsV3MuX19hc3NpZ24pKHt9LGJ5KSx7Z2V0QTExeVN0YXR1c01lc3NhZ2U6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pc09wZW4sbj1lLnJlc3VsdENvdW50LHI9ZS5wcmV2aW91c1Jlc3VsdENvdW50O3JldHVybiB0P24/biE9PXI/XCJcIi5jb25jYXQobixcIiByZXN1bHRcIikuY29uY2F0KDE9PT1uP1wiIGlzXCI6XCJzIGFyZVwiLFwiIGF2YWlsYWJsZSwgdXNlIHVwIGFuZCBkb3duIGFycm93IGtleXMgdG8gbmF2aWdhdGUuIFByZXNzIEVudGVyIG9yIFNwYWNlIEJhciBrZXlzIHRvIHNlbGVjdC5cIik6XCJcIjpcIk5vIHJlc3VsdHMgYXJlIGF2YWlsYWJsZS5cIjpcIlwifX0pLER5PWl5O2NvbnN0IFB5PTAsTXk9MSxMeT0yLFV5PTMseHk9NCxGeT01LEJ5PTYsVnk9NyxHeT04LEh5PTksV3k9MTAsank9MTEsWnk9MTIsenk9MTMsS3k9MTQsWXk9MTUscXk9MTYsWHk9MTcsUXk9MTgsSnk9MTksJHk9MjAsZUU9MjEsdEU9MjI7dmFyIG5FPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLE1lbnVLZXlEb3duQXJyb3dEb3duOlB5LE1lbnVLZXlEb3duQXJyb3dVcDpNeSxNZW51S2V5RG93bkVzY2FwZTpMeSxNZW51S2V5RG93bkhvbWU6VXksTWVudUtleURvd25FbmQ6eHksTWVudUtleURvd25FbnRlcjpGeSxNZW51S2V5RG93blNwYWNlQnV0dG9uOkJ5LE1lbnVLZXlEb3duQ2hhcmFjdGVyOlZ5LE1lbnVCbHVyOkd5LE1lbnVNb3VzZUxlYXZlOkh5LEl0ZW1Nb3VzZU1vdmU6V3ksSXRlbUNsaWNrOmp5LFRvZ2dsZUJ1dHRvbkNsaWNrOlp5LFRvZ2dsZUJ1dHRvbktleURvd25BcnJvd0Rvd246enksVG9nZ2xlQnV0dG9uS2V5RG93bkFycm93VXA6S3ksVG9nZ2xlQnV0dG9uS2V5RG93bkNoYXJhY3RlcjpZeSxGdW5jdGlvblRvZ2dsZU1lbnU6cXksRnVuY3Rpb25PcGVuTWVudTpYeSxGdW5jdGlvbkNsb3NlTWVudTpReSxGdW5jdGlvblNldEhpZ2hsaWdodGVkSW5kZXg6SnksRnVuY3Rpb25TZWxlY3RJdGVtOiR5LEZ1bmN0aW9uU2V0SW5wdXRWYWx1ZTplRSxGdW5jdGlvblJlc2V0OnRFfSk7ZnVuY3Rpb24gckUoZSx0KXtjb25zdHt0eXBlOm4scHJvcHM6cixzaGlmdEtleTppfT10O2xldCBvO3N3aXRjaChuKXtjYXNlIGp5Om89e2lzT3BlbjpUeShyLFwiaXNPcGVuXCIpLGhpZ2hsaWdodGVkSW5kZXg6VHkocixcImhpZ2hsaWdodGVkSW5kZXhcIiksc2VsZWN0ZWRJdGVtOnIuaXRlbXNbdC5pbmRleF19O2JyZWFrO2Nhc2UgWXk6e2NvbnN0IG49dC5rZXksaT1gJHtlLmlucHV0VmFsdWV9JHtufWAsYT1OeSh7a2V5c1NvRmFyOmksaGlnaGxpZ2h0ZWRJbmRleDplLnNlbGVjdGVkSXRlbT9yLml0ZW1zLmluZGV4T2YoZS5zZWxlY3RlZEl0ZW0pOi0xLGl0ZW1zOnIuaXRlbXMsaXRlbVRvU3RyaW5nOnIuaXRlbVRvU3RyaW5nLGdldEl0ZW1Ob2RlRnJvbUluZGV4OnQuZ2V0SXRlbU5vZGVGcm9tSW5kZXh9KTtvPXtpbnB1dFZhbHVlOmksLi4uYT49MCYme3NlbGVjdGVkSXRlbTpyLml0ZW1zW2FdfX19YnJlYWs7Y2FzZSB6eTpvPXtoaWdobGlnaHRlZEluZGV4OkF5KHIsZSwxLHQuZ2V0SXRlbU5vZGVGcm9tSW5kZXgpLGlzT3BlbjohMH07YnJlYWs7Y2FzZSBLeTpvPXtoaWdobGlnaHRlZEluZGV4OkF5KHIsZSwtMSx0LmdldEl0ZW1Ob2RlRnJvbUluZGV4KSxpc09wZW46ITB9O2JyZWFrO2Nhc2UgRnk6Y2FzZSBCeTpvPXtpc09wZW46VHkocixcImlzT3BlblwiKSxoaWdobGlnaHRlZEluZGV4OlR5KHIsXCJoaWdobGlnaHRlZEluZGV4XCIpLC4uLmUuaGlnaGxpZ2h0ZWRJbmRleD49MCYme3NlbGVjdGVkSXRlbTpyLml0ZW1zW2UuaGlnaGxpZ2h0ZWRJbmRleF19fTticmVhaztjYXNlIFV5Om89e2hpZ2hsaWdodGVkSW5kZXg6cHkoMSwwLHIuaXRlbXMubGVuZ3RoLHQuZ2V0SXRlbU5vZGVGcm9tSW5kZXgsITEpfTticmVhaztjYXNlIHh5Om89e2hpZ2hsaWdodGVkSW5kZXg6cHkoLTEsci5pdGVtcy5sZW5ndGgtMSxyLml0ZW1zLmxlbmd0aCx0LmdldEl0ZW1Ob2RlRnJvbUluZGV4LCExKX07YnJlYWs7Y2FzZSBMeTpjYXNlIEd5Om89e2lzT3BlbjohMSxoaWdobGlnaHRlZEluZGV4Oi0xfTticmVhaztjYXNlIFZ5Ontjb25zdCBuPXQua2V5LGk9YCR7ZS5pbnB1dFZhbHVlfSR7bn1gLGE9Tnkoe2tleXNTb0ZhcjppLGhpZ2hsaWdodGVkSW5kZXg6ZS5oaWdobGlnaHRlZEluZGV4LGl0ZW1zOnIuaXRlbXMsaXRlbVRvU3RyaW5nOnIuaXRlbVRvU3RyaW5nLGdldEl0ZW1Ob2RlRnJvbUluZGV4OnQuZ2V0SXRlbU5vZGVGcm9tSW5kZXh9KTtvPXtpbnB1dFZhbHVlOmksLi4uYT49MCYme2hpZ2hsaWdodGVkSW5kZXg6YX19fWJyZWFrO2Nhc2UgUHk6bz17aGlnaGxpZ2h0ZWRJbmRleDpmeShpPzU6MSxlLmhpZ2hsaWdodGVkSW5kZXgsci5pdGVtcy5sZW5ndGgsdC5nZXRJdGVtTm9kZUZyb21JbmRleCxyLmNpcmN1bGFyTmF2aWdhdGlvbil9O2JyZWFrO2Nhc2UgTXk6bz17aGlnaGxpZ2h0ZWRJbmRleDpmeShpPy01Oi0xLGUuaGlnaGxpZ2h0ZWRJbmRleCxyLml0ZW1zLmxlbmd0aCx0LmdldEl0ZW1Ob2RlRnJvbUluZGV4LHIuY2lyY3VsYXJOYXZpZ2F0aW9uKX07YnJlYWs7Y2FzZSAkeTpvPXtzZWxlY3RlZEl0ZW06dC5zZWxlY3RlZEl0ZW19O2JyZWFrO2RlZmF1bHQ6cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtjb25zdHt0eXBlOnIscHJvcHM6aX09dDtsZXQgbztzd2l0Y2gocil7Y2FzZSBuLkl0ZW1Nb3VzZU1vdmU6bz17aGlnaGxpZ2h0ZWRJbmRleDp0LmRpc2FibGVkPy0xOnQuaW5kZXh9O2JyZWFrO2Nhc2Ugbi5NZW51TW91c2VMZWF2ZTpvPXtoaWdobGlnaHRlZEluZGV4Oi0xfTticmVhaztjYXNlIG4uVG9nZ2xlQnV0dG9uQ2xpY2s6Y2FzZSBuLkZ1bmN0aW9uVG9nZ2xlTWVudTpvPXtpc09wZW46IWUuaXNPcGVuLGhpZ2hsaWdodGVkSW5kZXg6ZS5pc09wZW4/LTE6QXkoaSxlLDApfTticmVhaztjYXNlIG4uRnVuY3Rpb25PcGVuTWVudTpvPXtpc09wZW46ITAsaGlnaGxpZ2h0ZWRJbmRleDpBeShpLGUsMCl9O2JyZWFrO2Nhc2Ugbi5GdW5jdGlvbkNsb3NlTWVudTpvPXtpc09wZW46ITF9O2JyZWFrO2Nhc2Ugbi5GdW5jdGlvblNldEhpZ2hsaWdodGVkSW5kZXg6bz17aGlnaGxpZ2h0ZWRJbmRleDp0LmhpZ2hsaWdodGVkSW5kZXh9O2JyZWFrO2Nhc2Ugbi5GdW5jdGlvblNldElucHV0VmFsdWU6bz17aW5wdXRWYWx1ZTp0LmlucHV0VmFsdWV9O2JyZWFrO2Nhc2Ugbi5GdW5jdGlvblJlc2V0Om89e2hpZ2hsaWdodGVkSW5kZXg6VHkoaSxcImhpZ2hsaWdodGVkSW5kZXhcIiksaXNPcGVuOlR5KGksXCJpc09wZW5cIiksc2VsZWN0ZWRJdGVtOlR5KGksXCJzZWxlY3RlZEl0ZW1cIiksaW5wdXRWYWx1ZTpUeShpLFwiaW5wdXRWYWx1ZVwiKX07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJSZWR1Y2VyIGNhbGxlZCB3aXRob3V0IHByb3BlciBhY3Rpb24gdHlwZS5cIil9cmV0dXJuey4uLmUsLi4ub319KGUsdCxuRSl9cmV0dXJuey4uLmUsLi4ub319ZnVuY3Rpb24gaUUoZSl7dm9pZCAwPT09ZSYmKGU9e30pLER5KGUsaUUpO2NvbnN0IHQ9ey4uLnd5LC4uLmV9LHtpdGVtczpuLHNjcm9sbEludG9WaWV3OnIsZW52aXJvbm1lbnQ6aSxpbml0aWFsSXNPcGVuOm8sZGVmYXVsdElzT3BlbjphLGl0ZW1Ub1N0cmluZzpzLGdldEExMXlTZWxlY3Rpb25NZXNzYWdlOmMsZ2V0QTExeVN0YXR1c01lc3NhZ2U6bH09dCx1PWZ1bmN0aW9uKGUpe2NvbnN0IHQ9Q3koZSxcInNlbGVjdGVkSXRlbVwiKSxuPUN5KGUsXCJpc09wZW5cIikscj1DeShlLFwiaGlnaGxpZ2h0ZWRJbmRleFwiKSxpPUN5KGUsXCJpbnB1dFZhbHVlXCIpO3JldHVybntoaWdobGlnaHRlZEluZGV4OnI8MCYmdCYmbj9lLml0ZW1zLmluZGV4T2YodCk6cixpc09wZW46bixzZWxlY3RlZEl0ZW06dCxpbnB1dFZhbHVlOml9fSh0KSxbZixwXT1mdW5jdGlvbihlLHQsbil7Y29uc3RbcixpXT1mdW5jdGlvbihlLHQsbil7Y29uc3Qgcj0oMCxkLnVzZVJlZikoKSxpPSgwLGQudXNlUmVmKSgpLG89KDAsZC51c2VDYWxsYmFjaykoKCh0LG4pPT57aS5jdXJyZW50PW4sdD11eSh0LG4ucHJvcHMpO2NvbnN0IHI9ZSh0LG4pO3JldHVybiBuLnByb3BzLnN0YXRlUmVkdWNlcih0LHsuLi5uLGNoYW5nZXM6cn0pfSksW2VdKSxbYSxzXT0oMCxkLnVzZVJlZHVjZXIpKG8sdCksYz1TeShuKSxsPSgwLGQudXNlQ2FsbGJhY2spKChlPT5zKHtwcm9wczpjLmN1cnJlbnQsLi4uZX0pKSxbY10pLHU9aS5jdXJyZW50O3JldHVybigwLGQudXNlRWZmZWN0KSgoKCk9Pnt1JiZyLmN1cnJlbnQmJnIuY3VycmVudCE9PWEmJmZ1bmN0aW9uKGUsdCxuKXtjb25zdHtwcm9wczpyLHR5cGU6aX09ZSxvPXt9O09iamVjdC5rZXlzKHQpLmZvckVhY2goKHI9PnshZnVuY3Rpb24oZSx0LG4scil7Y29uc3R7cHJvcHM6aSx0eXBlOm99PXQsYT1gb24ke0l5KGUpfUNoYW5nZWA7aVthXSYmdm9pZCAwIT09cltlXSYmcltlXSE9PW5bZV0mJmlbYV0oe3R5cGU6bywuLi5yfSl9KHIsZSx0LG4pLG5bcl0hPT10W3JdJiYob1tyXT1uW3JdKX0pKSxyLm9uU3RhdGVDaGFuZ2UmJk9iamVjdC5rZXlzKG8pLmxlbmd0aCYmci5vblN0YXRlQ2hhbmdlKHt0eXBlOmksLi4ub30pfSh1LHV5KHIuY3VycmVudCx1LnByb3BzKSxhKSxyLmN1cnJlbnQ9YX0pLFthLG4sdV0pLFthLGxdfShlLHQsbik7cmV0dXJuW3V5KHIsbiksaV19KHJFLHUsdCkse2lzT3BlbjptLGhpZ2hsaWdodGVkSW5kZXg6aCxzZWxlY3RlZEl0ZW06dixpbnB1dFZhbHVlOmd9PWYseT0oMCxkLnVzZVJlZikobnVsbCksRT0oMCxkLnVzZVJlZikobnVsbCksXz0oMCxkLnVzZVJlZikoe30pLEk9KDAsZC51c2VSZWYpKCEwKSxTPSgwLGQudXNlUmVmKShudWxsKSxiPWZ1bmN0aW9uKGUpe2xldHtpZDp0PWBkb3duc2hpZnQtJHtseSgpfWAsbGFiZWxJZDpuLG1lbnVJZDpyLGdldEl0ZW1JZDppLHRvZ2dsZUJ1dHRvbklkOm8saW5wdXRJZDphfT1lO3JldHVybigwLGQudXNlUmVmKSh7bGFiZWxJZDpufHxgJHt0fS1sYWJlbGAsbWVudUlkOnJ8fGAke3R9LW1lbnVgLGdldEl0ZW1JZDppfHwoZT0+YCR7dH0taXRlbS0ke2V9YCksdG9nZ2xlQnV0dG9uSWQ6b3x8YCR7dH0tdG9nZ2xlLWJ1dHRvbmAsaW5wdXRJZDphfHxgJHt0fS1pbnB1dGB9KS5jdXJyZW50fSh0KSxUPSgwLGQudXNlUmVmKSgpLEM9KDAsZC51c2VSZWYpKCEwKSxBPVN5KHtzdGF0ZTpmLHByb3BzOnR9KSxSPSgwLGQudXNlQ2FsbGJhY2spKChlPT5fLmN1cnJlbnRbYi5nZXRJdGVtSWQoZSldKSxbYl0pO2t5KGwsW20saCxnLG5dLHtpc0luaXRpYWxNb3VudDpDLmN1cnJlbnQscHJldmlvdXNSZXN1bHRDb3VudDpULmN1cnJlbnQsaXRlbXM6bixlbnZpcm9ubWVudDppLGl0ZW1Ub1N0cmluZzpzLC4uLmZ9KSxreShjLFt2XSx7aXNJbml0aWFsTW91bnQ6Qy5jdXJyZW50LHByZXZpb3VzUmVzdWx0Q291bnQ6VC5jdXJyZW50LGl0ZW1zOm4sZW52aXJvbm1lbnQ6aSxpdGVtVG9TdHJpbmc6cywuLi5mfSk7Y29uc3Qgaz1mdW5jdGlvbihlKXtsZXR7aGlnaGxpZ2h0ZWRJbmRleDp0LGlzT3BlbjpuLGl0ZW1SZWZzOnIsZ2V0SXRlbU5vZGVGcm9tSW5kZXg6aSxtZW51RWxlbWVudDpvLHNjcm9sbEludG9WaWV3OmF9PWU7Y29uc3Qgcz0oMCxkLnVzZVJlZikoITApO3JldHVybiBFeSgoKCk9Pnt0PDB8fCFufHwhT2JqZWN0LmtleXMoci5jdXJyZW50KS5sZW5ndGh8fCghMT09PXMuY3VycmVudD9zLmN1cnJlbnQ9ITA6YShpKHQpLG8pKX0pLFt0XSksc30oe21lbnVFbGVtZW50OkUuY3VycmVudCxoaWdobGlnaHRlZEluZGV4OmgsaXNPcGVuOm0saXRlbVJlZnM6XyxzY3JvbGxJbnRvVmlldzpyLGdldEl0ZW1Ob2RlRnJvbUluZGV4OlJ9KTsoMCxkLnVzZUVmZmVjdCkoKCgpPT4oUy5jdXJyZW50PWF5KChlPT57ZSh7dHlwZTplRSxpbnB1dFZhbHVlOlwiXCJ9KX0pLDUwMCksKCk9PntTLmN1cnJlbnQuY2FuY2VsKCl9KSksW10pLCgwLGQudXNlRWZmZWN0KSgoKCk9PntnJiZTLmN1cnJlbnQocCl9KSxbcCxnXSksT3koe2lzSW5pdGlhbE1vdW50OkMuY3VycmVudCxwcm9wczp0LHN0YXRlOmZ9KSwoMCxkLnVzZUVmZmVjdCkoKCgpPT57Qy5jdXJyZW50PyhvfHxhfHxtKSYmRS5jdXJyZW50JiZFLmN1cnJlbnQuZm9jdXMoKTptP0UuY3VycmVudCYmRS5jdXJyZW50LmZvY3VzKCk6aS5kb2N1bWVudC5hY3RpdmVFbGVtZW50PT09RS5jdXJyZW50JiZ5LmN1cnJlbnQmJihJLmN1cnJlbnQ9ITEseS5jdXJyZW50LmZvY3VzKCkpfSksW21dKSwoMCxkLnVzZUVmZmVjdCkoKCgpPT57Qy5jdXJyZW50fHwoVC5jdXJyZW50PW4ubGVuZ3RoKX0pKTtjb25zdCBPPWZ1bmN0aW9uKGUsdCxuLHIpe2NvbnN0IGk9KDAsZC51c2VSZWYpKHtpc01vdXNlRG93bjohMSxpc1RvdWNoTW92ZTohMX0pO3JldHVybigwLGQudXNlRWZmZWN0KSgoKCk9Pntjb25zdCBvPSgpPT57aS5jdXJyZW50LmlzTW91c2VEb3duPSEwfSxhPW89PntpLmN1cnJlbnQuaXNNb3VzZURvd249ITEsZSYmIW15KG8udGFyZ2V0LHQubWFwKChlPT5lLmN1cnJlbnQpKSxuKSYmcigpfSxzPSgpPT57aS5jdXJyZW50LmlzVG91Y2hNb3ZlPSExfSxjPSgpPT57aS5jdXJyZW50LmlzVG91Y2hNb3ZlPSEwfSxsPW89PnshZXx8aS5jdXJyZW50LmlzVG91Y2hNb3ZlfHxteShvLnRhcmdldCx0Lm1hcCgoZT0+ZS5jdXJyZW50KSksbiwhMSl8fHIoKX07cmV0dXJuIG4uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLG8pLG4uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIixhKSxuLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIscyksbi5hZGRFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsYyksbi5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIixsKSxmdW5jdGlvbigpe24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLG8pLG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIixhKSxuLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIscyksbi5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsYyksbi5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIixsKX19KSxbZSxuXSksaX0obSxbRSx5XSxpLCgoKT0+e3Aoe3R5cGU6R3l9KX0pKSxOPVJ5KFwiZ2V0TWVudVByb3BzXCIsXCJnZXRUb2dnbGVCdXR0b25Qcm9wc1wiKTsoMCxkLnVzZUVmZmVjdCkoKCgpPT57Qy5jdXJyZW50PSExfSksW10pLCgwLGQudXNlRWZmZWN0KSgoKCk9PnttfHwoXy5jdXJyZW50PXt9KX0pLFttXSk7Y29uc3Qgdz0oMCxkLnVzZU1lbW8pKCgoKT0+KHtBcnJvd0Rvd24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLHAoe3R5cGU6enksZ2V0SXRlbU5vZGVGcm9tSW5kZXg6UixzaGlmdEtleTplLnNoaWZ0S2V5fSl9LEFycm93VXAoZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLHAoe3R5cGU6S3ksZ2V0SXRlbU5vZGVGcm9tSW5kZXg6UixzaGlmdEtleTplLnNoaWZ0S2V5fSl9fSkpLFtwLFJdKSxEPSgwLGQudXNlTWVtbykoKCgpPT4oe0Fycm93RG93bihlKXtlLnByZXZlbnREZWZhdWx0KCkscCh7dHlwZTpQeSxnZXRJdGVtTm9kZUZyb21JbmRleDpSLHNoaWZ0S2V5OmUuc2hpZnRLZXl9KX0sQXJyb3dVcChlKXtlLnByZXZlbnREZWZhdWx0KCkscCh7dHlwZTpNeSxnZXRJdGVtTm9kZUZyb21JbmRleDpSLHNoaWZ0S2V5OmUuc2hpZnRLZXl9KX0sSG9tZShlKXtlLnByZXZlbnREZWZhdWx0KCkscCh7dHlwZTpVeSxnZXRJdGVtTm9kZUZyb21JbmRleDpSfSl9LEVuZChlKXtlLnByZXZlbnREZWZhdWx0KCkscCh7dHlwZTp4eSxnZXRJdGVtTm9kZUZyb21JbmRleDpSfSl9LEVzY2FwZSgpe3Aoe3R5cGU6THl9KX0sRW50ZXIoZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLHAoe3R5cGU6Rnl9KX0sXCIgXCIoZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLHAoe3R5cGU6Qnl9KX19KSksW3AsUl0pLFA9KDAsZC51c2VDYWxsYmFjaykoKCgpPT57cCh7dHlwZTpxeX0pfSksW3BdKSxNPSgwLGQudXNlQ2FsbGJhY2spKCgoKT0+e3Aoe3R5cGU6UXl9KX0pLFtwXSksTD0oMCxkLnVzZUNhbGxiYWNrKSgoKCk9PntwKHt0eXBlOlh5fSl9KSxbcF0pLFU9KDAsZC51c2VDYWxsYmFjaykoKGU9PntwKHt0eXBlOkp5LGhpZ2hsaWdodGVkSW5kZXg6ZX0pfSksW3BdKSx4PSgwLGQudXNlQ2FsbGJhY2spKChlPT57cCh7dHlwZTokeSxzZWxlY3RlZEl0ZW06ZX0pfSksW3BdKSxGPSgwLGQudXNlQ2FsbGJhY2spKCgoKT0+e3Aoe3R5cGU6dEV9KX0pLFtwXSksQj0oMCxkLnVzZUNhbGxiYWNrKSgoZT0+e3Aoe3R5cGU6ZUUsaW5wdXRWYWx1ZTplfSl9KSxbcF0pLFY9KDAsZC51c2VDYWxsYmFjaykoKGU9Pih7aWQ6Yi5sYWJlbElkLGh0bWxGb3I6Yi50b2dnbGVCdXR0b25JZCwuLi5lfSkpLFtiXSksRz0oMCxkLnVzZUNhbGxiYWNrKSgoZnVuY3Rpb24oZSx0KXtsZXR7b25Nb3VzZUxlYXZlOm4scmVmS2V5OnI9XCJyZWZcIixvbktleURvd246aSxvbkJsdXI6byxyZWY6YSwuLi5zfT12b2lkIDA9PT1lP3t9OmUse3N1cHByZXNzUmVmRXJyb3I6Yz0hMX09dm9pZCAwPT09dD97fTp0O2NvbnN0IGw9QS5jdXJyZW50LnN0YXRlO3JldHVybiBOKFwiZ2V0TWVudVByb3BzXCIsYyxyLEUpLHtbcl06Y3koYSwoZT0+e0UuY3VycmVudD1lfSkpLGlkOmIubWVudUlkLHJvbGU6XCJsaXN0Ym94XCIsXCJhcmlhLWxhYmVsbGVkYnlcIjpiLmxhYmVsSWQsdGFiSW5kZXg6LTEsLi4ubC5pc09wZW4mJmwuaGlnaGxpZ2h0ZWRJbmRleD4tMSYme1wiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCI6Yi5nZXRJdGVtSWQobC5oaWdobGlnaHRlZEluZGV4KX0sb25Nb3VzZUxlYXZlOnN5KG4sKCgpPT57cCh7dHlwZTpIeX0pfSkpLG9uS2V5RG93bjpzeShpLChlPT57Y29uc3QgdD1keShlKTt0JiZEW3RdP0RbdF0oZSk6X3kodCkmJnAoe3R5cGU6Vnksa2V5OnQsZ2V0SXRlbU5vZGVGcm9tSW5kZXg6Un0pfSkpLG9uQmx1cjpzeShvLCgoKT0+eyExIT09SS5jdXJyZW50PyFPLmN1cnJlbnQuaXNNb3VzZURvd24mJnAoe3R5cGU6R3l9KTpJLmN1cnJlbnQ9ITB9KSksLi4uc319KSxbcCxBLEQsTyxOLGIsUl0pO3JldHVybntnZXRUb2dnbGVCdXR0b25Qcm9wczooMCxkLnVzZUNhbGxiYWNrKSgoZnVuY3Rpb24oZSx0KXtsZXR7b25DbGljazpuLG9uS2V5RG93bjpyLHJlZktleTppPVwicmVmXCIscmVmOm8sLi4uYX09dm9pZCAwPT09ZT97fTplLHtzdXBwcmVzc1JlZkVycm9yOnM9ITF9PXZvaWQgMD09PXQ/e306dDtjb25zdCBjPXtbaV06Y3kobywoZT0+e3kuY3VycmVudD1lfSkpLGlkOmIudG9nZ2xlQnV0dG9uSWQsXCJhcmlhLWhhc3BvcHVwXCI6XCJsaXN0Ym94XCIsXCJhcmlhLWV4cGFuZGVkXCI6QS5jdXJyZW50LnN0YXRlLmlzT3BlbixcImFyaWEtbGFiZWxsZWRieVwiOmAke2IubGFiZWxJZH0gJHtiLnRvZ2dsZUJ1dHRvbklkfWAsLi4uYX07cmV0dXJuIGEuZGlzYWJsZWR8fChjLm9uQ2xpY2s9c3kobiwoKCk9PntwKHt0eXBlOlp5fSl9KSksYy5vbktleURvd249c3kociwoZT0+e2NvbnN0IHQ9ZHkoZSk7dCYmd1t0XT93W3RdKGUpOl95KHQpJiZwKHt0eXBlOll5LGtleTp0LGdldEl0ZW1Ob2RlRnJvbUluZGV4OlJ9KX0pKSksTihcImdldFRvZ2dsZUJ1dHRvblByb3BzXCIscyxpLHkpLGN9KSxbcCxBLHcsTixiLFJdKSxnZXRMYWJlbFByb3BzOlYsZ2V0TWVudVByb3BzOkcsZ2V0SXRlbVByb3BzOigwLGQudXNlQ2FsbGJhY2spKChmdW5jdGlvbihlKXtsZXR7aXRlbTp0LGluZGV4Om4sb25Nb3VzZU1vdmU6cixvbkNsaWNrOmkscmVmS2V5Om89XCJyZWZcIixyZWY6YSxkaXNhYmxlZDpzLC4uLmN9PXZvaWQgMD09PWU/e306ZTtjb25zdHtzdGF0ZTpsLHByb3BzOnV9PUEuY3VycmVudCxkPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdm9pZCAwIT09ZT9lOjA9PT1uLmxlbmd0aD8tMTpuLmluZGV4T2YodCl9KG4sdCx1Lml0ZW1zKTtpZihkPDApdGhyb3cgbmV3IEVycm9yKFwiUGFzcyBlaXRoZXIgaXRlbSBvciBpdGVtIGluZGV4IGluIGdldEl0ZW1Qcm9wcyFcIik7Y29uc3QgZj17ZGlzYWJsZWQ6cyxyb2xlOlwib3B0aW9uXCIsXCJhcmlhLXNlbGVjdGVkXCI6YCR7ZD09PWwuaGlnaGxpZ2h0ZWRJbmRleH1gLGlkOmIuZ2V0SXRlbUlkKGQpLFtvXTpjeShhLChlPT57ZSYmKF8uY3VycmVudFtiLmdldEl0ZW1JZChkKV09ZSl9KSksLi4uY307cmV0dXJuIHN8fChmLm9uQ2xpY2s9c3koaSwoKCk9PntwKHt0eXBlOmp5LGluZGV4Om59KX0pKSksZi5vbk1vdXNlTW92ZT1zeShyLCgoKT0+e24hPT1sLmhpZ2hsaWdodGVkSW5kZXgmJihrLmN1cnJlbnQ9ITEscCh7dHlwZTpXeSxpbmRleDpuLGRpc2FibGVkOnN9KSl9KSksZn0pLFtwLEEsayxiXSksdG9nZ2xlTWVudTpQLG9wZW5NZW51OkwsY2xvc2VNZW51Ok0sc2V0SGlnaGxpZ2h0ZWRJbmRleDpVLHNlbGVjdEl0ZW06eCxyZXNldDpGLHNldElucHV0VmFsdWU6QixoaWdobGlnaHRlZEluZGV4OmgsaXNPcGVuOm0sc2VsZWN0ZWRJdGVtOnYsaW5wdXRWYWx1ZTpnfX1pRS5zdGF0ZUNoYW5nZVR5cGVzPW5FLEhzKCkuYXJyYXkuaXNSZXF1aXJlZCxIcygpLmZ1bmMsSHMoKS5mdW5jLEhzKCkuZnVuYyxIcygpLmJvb2wsSHMoKS5udW1iZXIsSHMoKS5udW1iZXIsSHMoKS5udW1iZXIsSHMoKS5ib29sLEhzKCkuYm9vbCxIcygpLmJvb2wsSHMoKS5hbnksSHMoKS5hbnksSHMoKS5hbnksSHMoKS5zdHJpbmcsSHMoKS5zdHJpbmcsSHMoKS5zdHJpbmcsSHMoKS5zdHJpbmcsSHMoKS5zdHJpbmcsSHMoKS5zdHJpbmcsSHMoKS5mdW5jLEhzKCkuc3RyaW5nLEhzKCkuc3RyaW5nLEhzKCkuZnVuYyxIcygpLmZ1bmMsSHMoKS5mdW5jLEhzKCkuZnVuYyxIcygpLmZ1bmMsSHMoKS5mdW5jLEhzKCkuc2hhcGUoe2FkZEV2ZW50TGlzdGVuZXI6SHMoKS5mdW5jLHJlbW92ZUV2ZW50TGlzdGVuZXI6SHMoKS5mdW5jLGRvY3VtZW50OkhzKCkuc2hhcGUoe2dldEVsZW1lbnRCeUlkOkhzKCkuZnVuYyxhY3RpdmVFbGVtZW50OkhzKCkuYW55LGJvZHk6SHMoKS5hbnl9KX0pLEhzKCkuYXJyYXksSHMoKS5hcnJheSxIcygpLmFycmF5LEhzKCkuZnVuYyxIcygpLmZ1bmMsSHMoKS5mdW5jLEhzKCkubnVtYmVyLEhzKCkubnVtYmVyLEhzKCkubnVtYmVyLEhzKCkuZnVuYyxIcygpLmZ1bmMsSHMoKS5zdHJpbmcsSHMoKS5zdHJpbmcsSHMoKS5zaGFwZSh7YWRkRXZlbnRMaXN0ZW5lcjpIcygpLmZ1bmMscmVtb3ZlRXZlbnRMaXN0ZW5lcjpIcygpLmZ1bmMsZG9jdW1lbnQ6SHMoKS5zaGFwZSh7Z2V0RWxlbWVudEJ5SWQ6SHMoKS5mdW5jLGFjdGl2ZUVsZW1lbnQ6SHMoKS5hbnksYm9keTpIcygpLmFueX0pfSk7Y29uc3Qgb0U9e2Ryb3Bkb3duOlwiVGl0cTJcIixtZW51Q29udGFpbmVyOlwiaHJsOThcIix0b3BMZWZ0OlwiaUVvM0lcIix0b3BSaWdodDpcIlVfTnlxXCIsYm90dG9tTGVmdDpcInlRSFBkXCIsYm90dG9tUmlnaHQ6XCJiZm8yQlwiLG1lbnU6XCJWb3hiU1wiLHNlcGFyYXRvcjpcIm9DRXREXCIsdGl0bGVJY29uOlwiaVpQd2FcIixpY29uRmxpcHNJblJ0bDpcImlWOURQXCIsb3B0aW9uOlwiS1Q2YjFcIixvcHRpb25MYWJlbDpcIlBYZ1kyXCIsb3B0aW9uU3VibGFiZWw6XCJ0dmc2aVwifSxhRT17bWVudUl0ZW06XCJwa3RRM1wiLGJlZm9yZTpcInJvM0o3XCIsY29udGVudDpcImxteVZKXCIsYWZ0ZXI6XCJDOGdXZVwiLHVyZ2VudEl0ZW06XCJTblV3SVwiLGRpc2FibGVkSXRlbTpcImVHUWZVXCIsbGFyZ2VGb250OlwiUzhoel9cIixyZWd1bGFyRm9udDpcImhRTUNzXCIsc21hbGxGb250OlwiVjBfZWpcIn0sc0U9e3JlZ3VsYXI6XCJcIix1cmdlbnQ6YUUudXJnZW50SXRlbSxkaXNhYmxlZDphRS5kaXNhYmxlZEl0ZW19LGNFPXtsYXJnZTphRS5sYXJnZUZvbnQscmVndWxhcjphRS5yZWd1bGFyRm9udCxzbWFsbDphRS5zbWFsbEZvbnR9O2Z1bmN0aW9uIGxFKGUpe2xldHt2YXJpYW50OnQ9XCJyZWd1bGFyXCIsZm9udFNpemU6bj1cInJlZ3VsYXJcIixiZWZvcmU6cixhZnRlcjppLGNoaWxkcmVuOmEsY2xhc3NOYW1lOnMsLi4uY309ZTtyZXR1cm4oMCxxLmpzeHMpKFwiYVwiLHsuLi5jLGNsYXNzTmFtZTooMCxRLlopKGFFLm1lbnVJdGVtLHMsc0VbdF0sY0Vbbl0pLGNoaWxkcmVuOltCb29sZWFuKHIpJiYoMCxvLlopKFwic3BhblwiLHtjbGFzc05hbWU6YUUuYmVmb3JlfSx2b2lkIDAsciksKDAsby5aKShcInNwYW5cIix7Y2xhc3NOYW1lOmFFLmNvbnRlbnR9LHZvaWQgMCxhKSxCb29sZWFuKGkpJiYoMCxvLlopKFwic3BhblwiLHtjbGFzc05hbWU6YUUuYWZ0ZXJ9LHZvaWQgMCxpKV19KX1mdW5jdGlvbiB1RShlKXtsZXR7dGl0bGU6dCxrZXk6bixvblNlbGVjdGVkOnIsbWVudU9wZW5Qb3N0U2VsZWN0aW9uOmksdmFyaWFudDphLHRlc3RJZDpzLGFmdGVyOmN9PWU7cmV0dXJuIGdFKHtrZXk6bixhcmlhTGFiZWw6dCxjb250ZW50OigwLG8uWikobEUse3ZhcmlhbnQ6YSxhZnRlcjpjfSx2b2lkIDAsdCksb25TZWxlY3RlZDpyLG1lbnVPcGVuUG9zdFNlbGVjdGlvbjppfSl9Y29uc3QgZEU9KDAsZC5jcmVhdGVDb250ZXh0KSh7cmVzZXRTZWxlY3Rpb246KCk9Pnt9LHJlbGVhc2VGb2N1czooKT0+e30sc2V0SGlnaGxpZ2h0ZWRJbmRleDooKT0+e319KSxmRT0oMCxkLmNyZWF0ZUNvbnRleHQpKHZvaWQgMCk7ZnVuY3Rpb24gcEUoKXtyZXR1cm4oMCxkLnVzZUNvbnRleHQpKGRFKX1jb25zdCBtRT0oMCxkLmZvcndhcmRSZWYpKCgoZSx0KT0+e2xldHtpdGVtOm4saXNIaWdobGlnaHRlZDpyLG9uQ2xlYW5VcDppLC4uLmF9PWU7Y29uc3Qgcz0oMCxxLmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOigwLFEuWikoXCJDZU82TFwiLHImJlwiRGxSaHlcIixuLmRpc2FibGVkJiZcIlA4SWYxXCIpLC4uLmEscmVmOnQsY2hpbGRyZW46bi5jb250ZW50fSk7cmV0dXJuKDAsZC51c2VFZmZlY3QpKCgoKT0+KCk9PntpJiZpKCl9KSxbaV0pLCgwLG8uWikoZkUuUHJvdmlkZXIse3ZhbHVlOm4ua2V5fSx2b2lkIDAscyl9KSk7bUUuZGlzcGxheU5hbWU9XCJTZWxlY3RhYmxlSXRlbVwiO2NvbnN0IGhFPW1FO3ZhciB2RT17U2VwYXJhdG9yOjAsSXRlbToxLEl0ZW1MaXN0OjJ9O2Z1bmN0aW9uIGdFKGUpe3JldHVybnsuLi5lLHR5cGU6dkUuSXRlbX19ZnVuY3Rpb24geUUoZSl7cmV0dXJuey4uLmUsdHlwZTp2RS5JdGVtTGlzdH19Y29uc3QgRUU9KGUsdCk9Pntjb25zdHt0eXBlOm4sY2hhbmdlczpyfT10O3N3aXRjaChuKXtjYXNlIGlFLnN0YXRlQ2hhbmdlVHlwZXMuTWVudUtleURvd25FbnRlcjpjYXNlIGlFLnN0YXRlQ2hhbmdlVHlwZXMuTWVudUtleURvd25TcGFjZUJ1dHRvbjpjYXNlIGlFLnN0YXRlQ2hhbmdlVHlwZXMuSXRlbUNsaWNrOmNhc2UgaUUuc3RhdGVDaGFuZ2VUeXBlcy5GdW5jdGlvblNlbGVjdEl0ZW06cmV0dXJuey4uLnIsaXNPcGVuOmUuaXNPcGVufTtjYXNlIGlFLnN0YXRlQ2hhbmdlVHlwZXMuTWVudUJsdXI6cmV0dXJuIGUuc2VsZWN0ZWRJdGVtP3suLi5yLGlzT3BlbjplLmlzT3Blbn06cjtkZWZhdWx0OnJldHVybiByfX07dmFyIF9FPXtUb3BMZWZ0OjAsVG9wUmlnaHQ6MSxCb3R0b21MZWZ0OjIsQm90dG9tUmlnaHQ6MyxCb3R0b21DZW50ZXI6NH07ZnVuY3Rpb24gSUUoZSl7bGV0e2NoaWxkcmVuOnQsY2xhc3NOYW1lOm4sbWVudUNvbnRhaW5lckNsYXNzTmFtZTpyLG1lbnVDbGFzc05hbWU6aSxpdGVtczphLG9uTWVudUNsb3NlOnMsb25NZW51T3BlbjpjLHBsYWNlbWVudDpsPV9FLkJvdHRvbVJpZ2h0fT1lO2NvbnN0IHU9KDAsZC51c2VNZW1vKSgoKCk9PmEuZmxhdE1hcCgoZT0+ZS50eXBlPT09dkUuSXRlbUxpc3Q/ZS5pdGVtczplKSkpLFthXSkse2lzT3BlbjpmLGdldFRvZ2dsZUJ1dHRvblByb3BzOnAsZ2V0TWVudVByb3BzOm0sZ2V0SXRlbVByb3BzOmgsc2VsZWN0ZWRJdGVtOnYsaGlnaGxpZ2h0ZWRJbmRleDpnLHJlc2V0Onksb3Blbk1lbnU6RSxjbG9zZU1lbnU6XyxzZWxlY3RJdGVtOkksc2V0SGlnaGxpZ2h0ZWRJbmRleDpTfT1pRSh7aXRlbXM6dSxpdGVtVG9TdHJpbmc6ZT0+ZSYmXCJhcmlhTGFiZWxcImluIGU/ZS5hcmlhTGFiZWw6XCJcIixzdGF0ZVJlZHVjZXI6RUUsb25Jc09wZW5DaGFuZ2U6ZT0+e2UuaXNPcGVuP2M/LigpOihzPy4oKSx5KCkpfSxvblNlbGVjdGVkSXRlbUNoYW5nZTplPT57bGV0e3NlbGVjdGVkSXRlbTp0fT1lO3QmJihcIm9uU2VsZWN0ZWRcImluIHQmJnQub25TZWxlY3RlZCYmKHQub25TZWxlY3RlZCgpLHQubWVudU9wZW5Qb3N0U2VsZWN0aW9ufHxfKCkpLEkodm9pZCAwKSl9LGNpcmN1bGFyTmF2aWdhdGlvbjohMH0pLGI9KDAsZC51c2VNZW1vKSgoKCk9Pih7c2VsZWN0ZWRLZXk6dj8ua2V5LHJlc2V0U2VsZWN0aW9uOigpPT5JKG51bGwpLHNldEhpZ2hsaWdodGVkSW5kZXg6UyxyZWxlYXNlRm9jdXM6KCk9PntzZXRUaW1lb3V0KCgoKT0+e0UoKX0pLDApfX0pKSxbdj8ua2V5LEksRSxTXSk7bGV0IFQ9MDtjb25zdFtDLEFdPSgwLGQudXNlU3RhdGUpKHZvaWQgMCksUj0oMCxkLnVzZVJlZikobnVsbCksaz0oMCxkLnVzZVJlZikobnVsbCk7cmV0dXJuKDAsZC51c2VMYXlvdXRFZmZlY3QpKCgoKT0+e2lmKFIuY3VycmVudCYmay5jdXJyZW50JiZsPT09X0UuQm90dG9tQ2VudGVyKXtjb25zdCBlPShrLmN1cnJlbnQuY2xpZW50V2lkdGgtUi5jdXJyZW50LmNsaWVudFdpZHRoKS8yO0Eoe2luc2V0SW5saW5lOmAke2V9cHhgfSl9ZWxzZSBBKHtpbnNldElubGluZTpcIjBweFwifSl9KSxbUi5jdXJyZW50Py5jbGllbnRXaWR0aCxrLmN1cnJlbnQ/LmNsaWVudFdpZHRoLGxdKSwoMCxxLmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTooMCxRLlopKG9FLmRyb3Bkb3duLG4pLHJlZjprLGNoaWxkcmVuOlt0KHAsZiksKDAscS5qc3gpKFwiZGl2XCIsey4uLm0oKSxjbGFzc05hbWU6KDAsUS5aKShvRS5tZW51Q29udGFpbmVyLHIsbD09PV9FLlRvcExlZnQmJm9FLnRvcExlZnQsbD09PV9FLlRvcFJpZ2h0JiZvRS50b3BSaWdodCxsPT09X0UuQm90dG9tTGVmdCYmb0UuYm90dG9tTGVmdCxsPT09X0UuQm90dG9tUmlnaHQmJm9FLmJvdHRvbVJpZ2h0KSxzdHlsZTpDLGNoaWxkcmVuOigwLG8uWikoZEUuUHJvdmlkZXIse3ZhbHVlOmJ9LHZvaWQgMCxmJiYoMCxxLmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOigwLFEuWikob0UubWVudSxpKSxyZWY6UixjaGlsZHJlbjphLm1hcCgoZT0+ZS50eXBlPT09dkUuSXRlbUxpc3Q/KDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6ZS5jbGFzc05hbWV9LGUua2V5LGUuaXRlbXMubWFwKChlPT4oMCxvLlopKFNFLHtpdGVtOmUsc2VsZWN0ZWRJbmRleDpUKyssaGlnaGxpZ2h0ZWRJbmRleDpnLGdldEl0ZW1Qcm9wczpofSxlLmtleSkpKSk6KDAsby5aKShTRSx7aXRlbTplLHNlbGVjdGVkSW5kZXg6VCsrLGhpZ2hsaWdodGVkSW5kZXg6ZyxnZXRJdGVtUHJvcHM6aH0sZS5rZXkpKSl9KSl9KV19KX1mdW5jdGlvbiBTRShlKXtsZXR7aXRlbTp0LHNlbGVjdGVkSW5kZXg6bixoaWdobGlnaHRlZEluZGV4OnIsZ2V0SXRlbVByb3BzOml9PWU7c3dpdGNoKHQudHlwZSl7Y2FzZSB2RS5JdGVtOnJldHVybigwLHEuanN4KShoRSx7aXRlbTp0LGlzSGlnaGxpZ2h0ZWQ6bj09PXIsb25DbGVhblVwOnQub25DbGVhblVwLC4uLmkoe2l0ZW06dCxpbmRleDpuLGRpc2FibGVkOnQuZGlzYWJsZWR9KX0sdC5rZXkpO2Nhc2UgdkUuU2VwYXJhdG9yOnJldHVybigwLHEuanN4KShcImRpdlwiLHtjbGFzc05hbWU6KDAsUS5aKShvRS5zZXBhcmF0b3IpLC4uLmkoe2l0ZW06dCxpbmRleDpuLGRpc2FibGVkOiEwfSl9LHQua2V5KX19ZnVuY3Rpb24gYkUoZSl7bGV0e3RpdGxlOnQsa2V5Om4sb25TZWxlY3RlZDpyLHRlc3RJZDppfT1lO2NvbnN0IGE9KDAsby5aKShcInNwYW5cIix7Y2xhc3NOYW1lOm9FLnRpdGxlSWNvbn0sdm9pZCAwLCgwLG8uWikoS2cuWix7Y2xhc3NOYW1lOm9FLmljb25GbGlwc0luUnRsfSkpO3JldHVybiBnRSh7a2V5Om4sYXJpYUxhYmVsOnQsY29udGVudDooMCxvLlopKGxFLHtmb250U2l6ZTpcImxhcmdlXCIsYmVmb3JlOmF9LHZvaWQgMCx0KSxvblNlbGVjdGVkOnIsbWVudU9wZW5Qb3N0U2VsZWN0aW9uOiEwfSl9ZnVuY3Rpb24gVEUoZSl7bGV0e2xhYmVsOnQsc3VibGFiZWw6bn09ZTtyZXR1cm4oMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpvRS5vcHRpb259LHZvaWQgMCwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpvRS5vcHRpb25MYWJlbH0sdm9pZCAwLHQpLG4mJigwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOm9FLm9wdGlvblN1YmxhYmVsfSx2b2lkIDAsbikpfWNvbnN0IENFPXt0aXRsZUljb246XCJTdThKRFwiLGljb25GbGlwc0luUnRsOlwiQUREX3RcIn0sQUU9ODY0MDAsUkU9MzEqQUU7dmFyIGtFLE9FPXtJbW1lZGlhdGU6MCxUd2VudHlGb3VySG91cnM6MX07ZnVuY3Rpb24gTkUoZSl7c3dpdGNoKGUpe2Nhc2UgT0UuSW1tZWRpYXRlOnJldHVybiAwO2Nhc2UgT0UuVHdlbnR5Rm91ckhvdXJzOnJldHVybiBBRTtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiB3RShlKXtpZigwPT09ZSlyZXR1cm4gT0UuSW1tZWRpYXRlO2lmKGU9PT1BRSlyZXR1cm4gT0UuVHdlbnR5Rm91ckhvdXJzO3Rocm93IG5ldyBFcnJvcihcIlRoaXMgaXMgY3VycmVudGx5IGFuIHVuc3VwcG9ydGVkIHNlY29uZHMgdmFsdWUgZm9yIGEgcmV0ZW50aW9uIHBvbGljeVwiKX1mdW5jdGlvbiBERShlLHQpe3N3aXRjaCh0KXtjYXNlIE9FLkltbWVkaWF0ZTpyZXR1cm4gZS5mb3JtYXRNZXNzYWdlKHtpZDpcIkhqOFJ1UlwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiQWZ0ZXIgVmlld2luZ1wifV19KTtjYXNlIE9FLlR3ZW50eUZvdXJIb3VyczpyZXR1cm4gZS5mb3JtYXRNZXNzYWdlKHtpZDpcIjVoUGdjelwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiMjQgSG91cnMgYWZ0ZXIgVmlld2luZ1wifV19KTtkZWZhdWx0OnJldHVyblwiXCJ9fWZ1bmN0aW9uIFBFKGUsdCxuLHIpe3JldHVybiBnRSh7a2V5OnQ9PT1PRS5Ud2VudHlGb3VySG91cnM/XCJyZXRlbnRpb24tY2hvaWNlLTI0aG91clwiOlwicmV0ZW50aW9uLWNob2ljZS1pbW1lZGlhdGVcIixhcmlhTGFiZWw6REUocix0KSxjb250ZW50OigwLG8uWikobEUse2JlZm9yZTooMCxvLlopKEpnLHtjaGVja2VkOk51bWJlcihlLnJldGVudGlvblBvbGljeS5yZWFkUmV0ZW50aW9uVGltZVNlY29uZHMpPT09TkUodCl9KX0sdm9pZCAwLERFKHIsdCkpLG9uU2VsZWN0ZWQ6YXN5bmMoKT0+bih0KSxtZW51T3BlblBvc3RTZWxlY3Rpb246ITB9KX1mdW5jdGlvbiBNRSgpe3JldHVybiBNRT1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LE1FLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBMRT1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIixNRSh7d2lkdGg6MjQsaGVpZ2h0OjI0LHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksa0V8fChrRT1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNOS4yMDcgOS4yOTNhMSAxIDAgMCAwLTEuNDE0IDEuNDE0bDMuNSAzLjVhMSAxIDAgMCAwIDEuNDE0IDBsMy41LTMuNWExIDEgMCAwIDAtMS40MTQtMS40MTRMMTIgMTIuMDg2IDkuMjA3IDkuMjkzWlwiLGZpbGw6XCIjQjlDMEM3XCJ9KSkpO3ZhciBVRTtmdW5jdGlvbiB4RSgpe3JldHVybiB4RT1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LHhFLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBGRT1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIix4RSh7d2lkdGg6MjQsaGVpZ2h0OjI0LHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksVUV8fChVRT1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMTIgNGE4IDggMCAxIDEgMCAxNiA4IDggMCAwIDEgMC0xNlptMCAxLjVhNi41IDYuNSAwIDEgMCAwIDEzIDYuNSA2LjUgMCAwIDAgMC0xM1pNMTIgN2MuNDE0IDAgLjc1LjM0Mi43NS43NTJ2My45MzdsMi4yNiAyLjI2Yy4yNjkuMjcuMjk3LjY4Ny4wNzkuOTgybC0uMDczLjA4NWEuNzQ3Ljc0NyAwIDAgMS0xLjA2Ny0uMDA3bC0yLjQ2Mi0yLjQ2MS0uMDQ2LS4wNWEuNzUuNzUgMCAwIDEtLjE5MS0uNVY3Ljc1MmMwLS4zOC4yOC0uNjk1LjY0OC0uNzQ1TDEyIDdaXCIsZmlsbDpcIiM0RTU2NUZcIn0pKSksQkU9e2NvbnRhaW5lcjpcIlRPc3hiXCIsdG9nZ2xlUHJvbXB0OlwiT1ZOT05cIix0b2dnbGVCdXR0b246XCJ5bjc0S1wiLGNsb2NrSWNvbjpcIno2TUtFXCIsY2hldnJvbkljb246XCJjUmdWZFwiLHJldGVudGlvbkRyb3Bkb3duOlwiaFp5WTJcIn07dmFyIFZFLEdFLEhFLFdFO2NvbnN0IGpFPTg2NDAwLFpFPTMxKmpFO2Z1bmN0aW9uIHpFKGUpe2xldHtjaGFuZ2VSZXRlbnRpb25Qb2xpY3k6dCxjb252ZXJzYXRpb25JZDpufT1lO2NvbnN0IHI9KDAsbWUuWikoKSxpPVZsKG4pLGE9WGMoKSxzPWk/LnBhcnRpY2lwYW50cy5maWx0ZXIoKGU9PmUucGFydGljaXBhbnRJZCE9PWEpKVswXS5wYXJ0aWNpcGFudElkLGM9Q2wocyksbD0oMCxibC5iMykoYyksdT10Lm5ld1JldGVudGlvblBvbGljeT8ucmV0ZW50aW9uUG9saWN5LGY9KDAsay5vKShUZS5iNikscD1mdW5jdGlvbihlLHQpe2NvbnN0IG49ZS5mb3JtYXRNZXNzYWdlKHtpZDpcImxORUp4eVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiMjQgaG91cnMgQWZ0ZXIgVmlld2luZ1wifV19KSxyPWUuZm9ybWF0TWVzc2FnZSh7aWQ6XCJKNzRaaHFcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkFmdGVyIFZpZXdpbmdcIn1dfSk7cmV0dXJuW2dFKHtrZXk6XCJ0d2VudHktZm91ci1ob3VyLXJldGVudGlvblwiLGFyaWFMYWJlbDpuLGNvbnRlbnQ6KDAsby5aKShsRSx7fSx2b2lkIDAsbiksb25TZWxlY3RlZDphc3luYygpPT50KE9FLlR3ZW50eUZvdXJIb3VycyksbWVudU9wZW5Qb3N0U2VsZWN0aW9uOiExfSksZ0Uoe2tleTpcImltbWVkaWF0ZS1yZXRlbnRpb25cIixhcmlhTGFiZWw6cixjb250ZW50OigwLG8uWikobEUse30sdm9pZCAwLHIpLG9uU2VsZWN0ZWQ6YXN5bmMoKT0+dChPRS5JbW1lZGlhdGUpLG1lbnVPcGVuUG9zdFNlbGVjdGlvbjohMX0pXX0ociwoMCxkLnVzZUNhbGxiYWNrKSgoYXN5bmMgZT0+e2lmKCFpKXJldHVybjtjb25zdCB0PWU9PT1PRS5JbW1lZGlhdGUsbj10PzA6akUscj17c2VuZFJlYWRNZXNzYWdlOiEwLHNlbmRSZWxlYXNlTWVzc2FnZXM6dCx1bnJlYWRSZXRlbnRpb25UaW1lU2Vjb25kczpCaWdJbnQoWkUpLHJlYWRSZXRlbnRpb25UaW1lU2Vjb25kczpCaWdJbnQobil9O3RyeXthd2FpdCBmKGkuY29udmVyc2F0aW9uSWQscixQZS5qRS5UT0dHTEUpfWNhdGNoKGUpe319KSxbaSxmXSkpO2lmKCF1KXJldHVybiBudWxsO2lmKFwiZHluYW1pY1wiPT09dS4kY2FzZSl7Y29uc3QgZT0wPT09TnVtYmVyKGk/LnJldGVudGlvblBvbGljeS5yZWFkUmV0ZW50aW9uVGltZVNlY29uZHMpP1ZFfHwoVkU9KDAsby5aKSh2Llose2lkOlwiYU9Lc3lHXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJJbW1lZGlhdGVseSBhZnRlciB2aWV3aW5nXCJ9XX0pKTpHRXx8KEdFPSgwLG8uWikodi5aLHtpZDpcIloxQnJBM1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiMjQgaG91cnMgYWZ0ZXIgdmlld2luZ1wifV19KSk7cmV0dXJuKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6QkUuY29udGFpbmVyfSx2b2lkIDAsKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6QkUudG9nZ2xlUHJvbXB0fSx2b2lkIDAsKDAsby5aKSh2Llose2lkOlwiM2JJS21lXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJDaGF0cyB3aXRoIFwifSx7dHlwZToxLHZhbHVlOlwiZGlzcGxheU5hbWVcIn0se3R5cGU6MCx2YWx1ZTpcIiBkZWxldGUuLi5cIn1dLHZhbHVlczp7ZGlzcGxheU5hbWU6bH19KSksKDAsby5aKShJRSx7aXRlbXM6cCxjbGFzc05hbWU6QkUucmV0ZW50aW9uRHJvcGRvd259LHZvaWQgMCwodD0+KDAscS5qc3hzKShcImJ1dHRvblwiLHt0eXBlOlwiYnV0dG9uXCIsY2xhc3NOYW1lOkJFLnRvZ2dsZUJ1dHRvbiwuLi50KCksY2hpbGRyZW46WygwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOkJFLmNsb2NrSWNvbn0sdm9pZCAwLEhFfHwoSEU9KDAsby5aKShGRSx7fSkpKSxlLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOkJFLmNoZXZyb25JY29ufSx2b2lkIDAsV0V8fChXRT0oMCxvLlopKExFLHt9KSkpXX0pKSkpfX12YXIgS0UsWUUscUUsWEUsUUUsSkUsJEU9big3MzMwMyksZV89bi5uKCRFKTtmdW5jdGlvbiB0XyhlKXtsZXR7c2F2ZVRvQ2FtZXJhUm9sbDp0LHNhdmVySWQ6bn09ZTtjb25zdCByPVhjKCksaT1yPT09bixhPXI9PT10LnVzZXJJZCxzPVJsKHQudXNlcklkKSxjPVJsKG4pO2lmKCF0LnVzZXJJZClyZXR1cm4gbnVsbDtpZihuPT09dC51c2VySWQpcmV0dXJuIG51bGw7Y29uc3QgbD1lXygpKHQubWVkaWFUeXBlVG9Db3VudCwoZT0+TnVtYmVyKGUuY291bnQpKSk7aWYoIWwpcmV0dXJuIG51bGw7aWYodC5tZWRpYVR5cGVUb0NvdW50Lmxlbmd0aD4xKXJldHVybiBpPygwLG8uWikodi5aLHtpZDpcImNXUVkzVlwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiWU9VIFNBVkVEIFwifSx7dHlwZToxLHZhbHVlOlwibnVtSXRlbXNcIn0se3R5cGU6MCx2YWx1ZTpcIiBJVEVNUyBGUk9NIFwifSx7dHlwZToxLHZhbHVlOlwic2hhcmVyXCJ9XSx2YWx1ZXM6e3NoYXJlcjpzLG51bUl0ZW1zOmx9fSk6YT8oMCxvLlopKHYuWix7aWQ6XCJpWWJxS0JcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MSx2YWx1ZTpcInNhdmVyXCJ9LHt0eXBlOjAsdmFsdWU6XCIgU0FWRUQgXCJ9LHt0eXBlOjEsdmFsdWU6XCJudW1JdGVtc1wifSx7dHlwZTowLHZhbHVlOlwiIElURU1TIFlPVSBTRU5UXCJ9XSx2YWx1ZXM6e3NhdmVyOmMsbnVtSXRlbXM6bH19KTooMCxvLlopKHYuWix7aWQ6XCJwMGR0bzhcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MSx2YWx1ZTpcInNhdmVyXCJ9LHt0eXBlOjAsdmFsdWU6XCIgU0FWRUQgXCJ9LHt0eXBlOjEsdmFsdWU6XCJudW1JdGVtc1wifSx7dHlwZTowLHZhbHVlOlwiIElURU1TIEZST00gXCJ9LHt0eXBlOjEsdmFsdWU6XCJzaGFyZXJcIn1dLHZhbHVlczp7c2F2ZXI6YyxudW1JdGVtczpsLHNoYXJlcjpzfX0pO3N3aXRjaCh0Lm1lZGlhVHlwZVRvQ291bnRbMF0ubWVkaWFUeXBlKXtjYXNlIERnLk1lZGlhVHlwZVRvQ291bnRfTWVkaWFUeXBlLklNQUdFOnJldHVybiBpPygwLG8uWikodi5aLHtpZDpcIitVcjM5N1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiWU9VIFNBVkVEIFwifSx7dHlwZTo2LHZhbHVlOlwibnVtSXRlbXNcIixvcHRpb25zOntcIj0xXCI6e3ZhbHVlOlt7dHlwZTowLHZhbHVlOlwiQSBQSE9UT1wifV19LG90aGVyOnt2YWx1ZTpbe3R5cGU6N30se3R5cGU6MCx2YWx1ZTpcIiBQSE9UT1NcIn1dfX0sb2Zmc2V0OjAscGx1cmFsVHlwZTpcImNhcmRpbmFsXCJ9LHt0eXBlOjAsdmFsdWU6XCIgRlJPTSBcIn0se3R5cGU6MSx2YWx1ZTpcInNoYXJlclwifV0sdmFsdWVzOntzaGFyZXI6cyxudW1JdGVtczpsfX0pOmE/KDAsby5aKSh2Llose2lkOlwiVExTUzJWXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjEsdmFsdWU6XCJzYXZlclwifSx7dHlwZTowLHZhbHVlOlwiIFNBVkVEIFwifSx7dHlwZTo2LHZhbHVlOlwibnVtSXRlbXNcIixvcHRpb25zOntcIj0xXCI6e3ZhbHVlOlt7dHlwZTowLHZhbHVlOlwiWU9VUiBQSE9UT1wifV19LG90aGVyOnt2YWx1ZTpbe3R5cGU6N30se3R5cGU6MCx2YWx1ZTpcIiBQSE9UT1MgWU9VIFNFTlRcIn1dfX0sb2Zmc2V0OjAscGx1cmFsVHlwZTpcImNhcmRpbmFsXCJ9XSx2YWx1ZXM6e3NhdmVyOmMsbnVtSXRlbXM6bH19KTooMCxvLlopKHYuWix7aWQ6XCJuVU9PZE9cIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MSx2YWx1ZTpcInNhdmVyXCJ9LHt0eXBlOjAsdmFsdWU6XCIgU0FWRUQgXCJ9LHt0eXBlOjYsdmFsdWU6XCJudW1JdGVtc1wiLG9wdGlvbnM6e1wiPTFcIjp7dmFsdWU6W3t0eXBlOjAsdmFsdWU6XCJBIFBIT1RPXCJ9XX0sb3RoZXI6e3ZhbHVlOlt7dHlwZTo3fSx7dHlwZTowLHZhbHVlOlwiIFBIT1RPU1wifV19fSxvZmZzZXQ6MCxwbHVyYWxUeXBlOlwiY2FyZGluYWxcIn0se3R5cGU6MCx2YWx1ZTpcIiBGUk9NIFwifSx7dHlwZToxLHZhbHVlOlwic2hhcmVyXCJ9XSx2YWx1ZXM6e3NhdmVyOmMsbnVtSXRlbXM6bCxzaGFyZXI6c319KTtjYXNlIERnLk1lZGlhVHlwZVRvQ291bnRfTWVkaWFUeXBlLlZJREVPOnJldHVybiBpPygwLG8uWikodi5aLHtpZDpcIm1lVWdzc1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiWU9VIFNBVkVEIFwifSx7dHlwZTo2LHZhbHVlOlwibnVtSXRlbXNcIixvcHRpb25zOntcIj0xXCI6e3ZhbHVlOlt7dHlwZTowLHZhbHVlOlwiQSBWSURFT1wifV19LG90aGVyOnt2YWx1ZTpbe3R5cGU6N30se3R5cGU6MCx2YWx1ZTpcIiBWSURFT1NcIn1dfX0sb2Zmc2V0OjAscGx1cmFsVHlwZTpcImNhcmRpbmFsXCJ9LHt0eXBlOjAsdmFsdWU6XCIgRlJPTSBcIn0se3R5cGU6MSx2YWx1ZTpcInNoYXJlclwifV0sdmFsdWVzOntzaGFyZXI6cyxudW1JdGVtczpsfX0pOmE/KDAsby5aKSh2Llose2lkOlwiMTFiL1ZhXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjEsdmFsdWU6XCJzYXZlclwifSx7dHlwZTowLHZhbHVlOlwiIFNBVkVEIFwifSx7dHlwZTo2LHZhbHVlOlwibnVtSXRlbXNcIixvcHRpb25zOntcIj0xXCI6e3ZhbHVlOlt7dHlwZTowLHZhbHVlOlwiWU9VUiBWSURFT1wifV19LG90aGVyOnt2YWx1ZTpbe3R5cGU6N30se3R5cGU6MCx2YWx1ZTpcIiBWSURFT1MgWU9VIFNFTlRcIn1dfX0sb2Zmc2V0OjAscGx1cmFsVHlwZTpcImNhcmRpbmFsXCJ9XSx2YWx1ZXM6e3NhdmVyOmMsbnVtSXRlbXM6bH19KTooMCxvLlopKHYuWix7aWQ6XCJJN2xWOS9cIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MSx2YWx1ZTpcInNhdmVyXCJ9LHt0eXBlOjAsdmFsdWU6XCIgU0FWRUQgXCJ9LHt0eXBlOjYsdmFsdWU6XCJudW1JdGVtc1wiLG9wdGlvbnM6e1wiPTFcIjp7dmFsdWU6W3t0eXBlOjAsdmFsdWU6XCJBIFZJREVPXCJ9XX0sb3RoZXI6e3ZhbHVlOlt7dHlwZTo3fSx7dHlwZTowLHZhbHVlOlwiIFZJREVPU1wifV19fSxvZmZzZXQ6MCxwbHVyYWxUeXBlOlwiY2FyZGluYWxcIn0se3R5cGU6MCx2YWx1ZTpcIiBGUk9NIFwifSx7dHlwZToxLHZhbHVlOlwic2hhcmVyXCJ9XSx2YWx1ZXM6e3NhdmVyOmMsbnVtSXRlbXM6bCxzaGFyZXI6c319KTtjYXNlIERnLk1lZGlhVHlwZVRvQ291bnRfTWVkaWFUeXBlLlVOUkVDT0dOSVpFRDpjYXNlIERnLk1lZGlhVHlwZVRvQ291bnRfTWVkaWFUeXBlLlVOS05PV046ZGVmYXVsdDpyZXR1cm4gaT8oMCxvLlopKHYuWix7aWQ6XCJhNFJXanhcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIllPVSBTQVZFRCBcIn0se3R5cGU6Nix2YWx1ZTpcIm51bUl0ZW1zXCIsb3B0aW9uczp7XCI9MVwiOnt2YWx1ZTpbe3R5cGU6MCx2YWx1ZTpcIkFOIElURU1cIn1dfSxvdGhlcjp7dmFsdWU6W3t0eXBlOjd9LHt0eXBlOjAsdmFsdWU6XCIgSVRFTVNcIn1dfX0sb2Zmc2V0OjAscGx1cmFsVHlwZTpcImNhcmRpbmFsXCJ9LHt0eXBlOjAsdmFsdWU6XCIgRlJPTSBcIn0se3R5cGU6MSx2YWx1ZTpcInNoYXJlclwifV0sdmFsdWVzOntzaGFyZXI6cyxudW1JdGVtczpsfX0pOmE/KDAsby5aKSh2Llose2lkOlwiYThuRzhsXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjEsdmFsdWU6XCJzYXZlclwifSx7dHlwZTowLHZhbHVlOlwiIFNBVkVEIFwifSx7dHlwZTo2LHZhbHVlOlwibnVtSXRlbXNcIixvcHRpb25zOntcIj0xXCI6e3ZhbHVlOlt7dHlwZTowLHZhbHVlOlwiWU9VUiBJVEVNXCJ9XX0sb3RoZXI6e3ZhbHVlOlt7dHlwZTo3fSx7dHlwZTowLHZhbHVlOlwiIElURU1TIFlPVSBTRU5UXCJ9XX19LG9mZnNldDowLHBsdXJhbFR5cGU6XCJjYXJkaW5hbFwifV0sdmFsdWVzOntzYXZlcjpjLG51bUl0ZW1zOmx9fSk6KDAsby5aKSh2Llose2lkOlwiZWJPbVBRXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjEsdmFsdWU6XCJzYXZlclwifSx7dHlwZTowLHZhbHVlOlwiIFNBVkVEIFwifSx7dHlwZTo2LHZhbHVlOlwibnVtSXRlbXNcIixvcHRpb25zOntcIj0xXCI6e3ZhbHVlOlt7dHlwZTowLHZhbHVlOlwiQU4gSVRFTVwifV19LG90aGVyOnt2YWx1ZTpbe3R5cGU6N30se3R5cGU6MCx2YWx1ZTpcIiBJVEVNU1wifV19fSxvZmZzZXQ6MCxwbHVyYWxUeXBlOlwiY2FyZGluYWxcIn0se3R5cGU6MCx2YWx1ZTpcIiBGUk9NIFwifSx7dHlwZToxLHZhbHVlOlwic2hhcmVyXCJ9XSx2YWx1ZXM6e3NhdmVyOmMsbnVtSXRlbXM6bCxzaGFyZXI6c319KX19ZnVuY3Rpb24gbl8oZSl7bGV0e3NjcmVlbkNhcHR1cmU6dH09ZTtjb25zdCBuPVhjKCk9PT10LmNhcHR1cmluZ1VzZXIscj1SbCh0LmNhcHR1cmluZ1VzZXIpO2lmKCF0LmNhcHR1cmluZ1VzZXIpcmV0dXJuIG51bGw7c3dpdGNoKHQuY2FwdHVyZVR5cGUpe2Nhc2UgRGcuU2NyZWVuQ2FwdHVyZVN0YXR1c01lc3NhZ2VfQ2FwdHVyZVR5cGUuU0NSRUVOX1NIT1Q6c3dpdGNoKHQuY2FwdHVyZVNvdXJjZSl7Y2FzZSBEZy5TY3JlZW5DYXB0dXJlU3RhdHVzTWVzc2FnZV9DYXB0dXJlU291cmNlLkNPTlZFUlNBVElPTjpyZXR1cm4gbj9LRXx8KEtFPSgwLG8uWikodi5aLHtpZDpcIjV0ckxKcVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiWU9VIFRPT0sgQSBTQ1JFRU5TSE9UIE9GIENIQVQhXCJ9XX0pKTooMCxvLlopKHYuWix7aWQ6XCJ2M1lNR2tcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MSx2YWx1ZTpcInVzZXJcIn0se3R5cGU6MCx2YWx1ZTpcIiBUT09LIEEgU0NSRUVOU0hPVCBPRiBDSEFUIVwifV0sdmFsdWVzOnt1c2VyOnJ9fSk7Y2FzZSBEZy5TY3JlZW5DYXB0dXJlU3RhdHVzTWVzc2FnZV9DYXB0dXJlU291cmNlLkNBTEw6cmV0dXJuIG4/WUV8fChZRT0oMCxvLlopKHYuWix7aWQ6XCJMRVVxL0FcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIllPVSBUT09LIEEgU0NSRUVOU0hPVCBPRiBDQUxMIVwifV19KSk6KDAsby5aKSh2Llose2lkOlwiWFZWVHYzXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjEsdmFsdWU6XCJ1c2VyXCJ9LHt0eXBlOjAsdmFsdWU6XCIgVE9PSyBBIFNDUkVFTlNIT1QgT0YgQ0FMTCFcIn1dLHZhbHVlczp7dXNlcjpyfX0pO2Nhc2UgRGcuU2NyZWVuQ2FwdHVyZVN0YXR1c01lc3NhZ2VfQ2FwdHVyZVNvdXJjZS5HUk9VUF9QUk9GSUxFOnJldHVybiBuP3FFfHwocUU9KDAsby5aKSh2Llose2lkOlwiS2w3clp5XCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJZT1UgVE9PSyBBIFNDUkVFTlNIT1QgT0YgR1JPVVAgUFJPRklMRSFcIn1dfSkpOigwLG8uWikodi5aLHtpZDpcImgwNWM4alwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZToxLHZhbHVlOlwidXNlclwifSx7dHlwZTowLHZhbHVlOlwiIFRPT0sgQSBTQ1JFRU5TSE9UIE9GIEdST1VQIFBST0ZJTEUhXCJ9XSx2YWx1ZXM6e3VzZXI6cn19KTtjYXNlIERnLlNjcmVlbkNhcHR1cmVTdGF0dXNNZXNzYWdlX0NhcHR1cmVTb3VyY2UuRlJJRU5EU0hJUF9QUk9GSUxFOnJldHVybiBuP1hFfHwoWEU9KDAsby5aKSh2Llose2lkOlwiOGpNM1R1XCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJZT1UgVE9PSyBBIFNDUkVFTlNIT1QgT0YgRlJJRU5EU0hJUCBQUk9GSUxFIVwifV19KSk6KDAsby5aKSh2Llose2lkOlwiY3JDQUZIXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjEsdmFsdWU6XCJ1c2VyXCJ9LHt0eXBlOjAsdmFsdWU6XCIgVE9PSyBBIFNDUkVFTlNIT1QgT0YgRlJJRU5EU0hJUCBQUk9GSUxFIVwifV0sdmFsdWVzOnt1c2VyOnJ9fSl9YnJlYWs7Y2FzZSBEZy5TY3JlZW5DYXB0dXJlU3RhdHVzTWVzc2FnZV9DYXB0dXJlVHlwZS5TQ1JFRU5fUkVDT1JEOmlmKHQuY2FwdHVyZVNvdXJjZT09PURnLlNjcmVlbkNhcHR1cmVTdGF0dXNNZXNzYWdlX0NhcHR1cmVTb3VyY2UuQ09OVkVSU0FUSU9OKXJldHVybiBuP1FFfHwoUUU9KDAsby5aKSh2Llose2lkOlwiZ01DUXZYXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJZT1UgU0NSRUVOIFJFQ09SREVEIENIQVQhXCJ9XX0pKTooMCxvLlopKHYuWix7aWQ6XCJrcEJaM2xcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MSx2YWx1ZTpcInVzZXJcIn0se3R5cGU6MCx2YWx1ZTpcIiBTQ1JFRU4gUkVDT1JERUQgQ0hBVCFcIn1dLHZhbHVlczp7dXNlcjpyfX0pfXJldHVybiBudWxsfWZ1bmN0aW9uIHJfKGUpe2xldHtzZW5kZXJJZDp0fT1lO2NvbnN0IG49WGMoKT09PXQscj1SbCh0KTtyZXR1cm4gbj9KRXx8KEpFPSgwLG8uWikodi5aLHtpZDpcIkR0WHE0WlwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiWU9VIEFSRSBVU0lORyBTTkFQQ0hBVCBPTiBXRUJcIn1dfSkpOigwLG8uWikodi5aLHtpZDpcImswakpyT1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZToxLHZhbHVlOlwic2VuZGVyXCJ9LHt0eXBlOjAsdmFsdWU6XCIgSVMgVVNJTkcgU05BUENIQVQgT04gV0VCXCJ9XSx2YWx1ZXM6e3NlbmRlcjpyfX0pfWZ1bmN0aW9uIGlfKGUpe2xldHtzdGF0dXNNZXNzYWdlOnQsc2VuZGVySWQ6bixjb252ZXJzYXRpb25JZDpyfT1lLGk9bnVsbDtzd2l0Y2godC5zdGF0dXM/LiRjYXNlKXtjYXNlXCJzY3JlZW5DYXB0dXJlXCI6aT0oMCxvLlopKG5fLHtzY3JlZW5DYXB0dXJlOnQuc3RhdHVzLnNjcmVlbkNhcHR1cmV9KTticmVhaztjYXNlXCJjYWxsaW5nU3RhdHVzXCI6aT0oMCxvLlopKHhnLHtjYWxsaW5nU3RhdHVzOnQuc3RhdHVzLmNhbGxpbmdTdGF0dXMsY29udmVyc2F0aW9uSWQ6cn0pO2JyZWFrO2Nhc2VcInNhdmVUb0NhbWVyYVJvbGxcIjppPSgwLG8uWikodF8se3NhdmVUb0NhbWVyYVJvbGw6dC5zdGF0dXMuc2F2ZVRvQ2FtZXJhUm9sbCxzYXZlcklkOm59KTticmVhaztjYXNlXCJuYW1lU3RhdHVzQ2hhbmdlXCI6aT0oMCxvLlopKEJnLHtuYW1lU3RhdHVzQ2hhbmdlOnQuc3RhdHVzLm5hbWVTdGF0dXNDaGFuZ2V9KTticmVhaztjYXNlXCJwYXJ0aWNpcGFudENoYW5nZVwiOmk9KDAsby5aKShqZyx7cGFydGljaXBhbnRDaGFuZ2U6dC5zdGF0dXMucGFydGljaXBhbnRDaGFuZ2V9KTticmVhaztjYXNlXCJtZXNzYWdlRXJhc2VcIjppPSgwLG8uWikoR2cse21lc3NhZ2VFcmFzZTp0LnN0YXR1cy5tZXNzYWdlRXJhc2V9KTticmVhaztjYXNlXCJncm91cENoYXRDcmVhdGVkXCI6aT0oMCxvLlopKEZnLHtncm91cENoYXRDcmVhdGVkOnQuc3RhdHVzLmdyb3VwQ2hhdENyZWF0ZWR9KTticmVhaztjYXNlXCJjaGFuZ2VDb252ZXJzYXRpb25SZXRlbnRpb25Qb2xpY3lcIjppZih0LnN0YXR1cy5jaGFuZ2VDb252ZXJzYXRpb25SZXRlbnRpb25Qb2xpY3kuZGlzcGxheVR5cGU9PT1EZy5DaGFuZ2VDb252ZXJzYXRpb25SZXRlbnRpb25Qb2xpY3lTdGF0dXNNZXNzYWdlX0Rpc3BsYXlUeXBlLkRJU1BMQVlfVFlQRV9UT0dHTEVBQkxFKXJldHVybigwLG8uWikoekUse2NoYW5nZVJldGVudGlvblBvbGljeTp0LnN0YXR1cy5jaGFuZ2VDb252ZXJzYXRpb25SZXRlbnRpb25Qb2xpY3ksY29udmVyc2F0aW9uSWQ6cn0pO2k9KDAsby5aKShaZyx7Y2hhbmdlUmV0ZW50aW9uUG9saWN5OnQuc3RhdHVzLmNoYW5nZUNvbnZlcnNhdGlvblJldGVudGlvblBvbGljeX0pO2JyZWFrO2Nhc2VcImludml0ZUxpbmtcIjppPSgwLG8uWikoVmcse2ludml0ZUxpbms6dC5zdGF0dXMuaW52aXRlTGlua30pO2JyZWFrO2Nhc2VcImR3ZWJVcHNlbGxcIjppPSgwLG8uWikocl8se3NlbmRlcklkOm59KTticmVhaztjYXNlXCJ1cGRhdGVDaGF0V2FsbHBhcGVyU3RhdHVzTWVzc2FnZVwiOmk9KDAsby5aKShNZyx7c2VuZGVySWQ6bn0pO2JyZWFrO2Nhc2VcImFjY2VwdEZhbWlseUNlbnRlckludml0ZVwiOmk9KDAsby5aKShQZyx7c2VuZGVySWQ6bn0pO2JyZWFrO2Nhc2VcImxlYXZlRmFtaWx5Q2VudGVyXCI6aT0oMCxvLlopKExnLHtzZW5kZXJJZDpufSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgVGYub2YodC5zdGF0dXM/LiRjYXNlPz9cIlVua25vd24gU3RhdHVzIE1lc3NhZ2VcIixgc3RhdHVzXyR7dC5zdGF0dXM/LiRjYXNlPz9cInVua25vd25cIn1gKX1yZXR1cm4oMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpYbS5zdGF0dXN9LHZvaWQgMCxpKX1mdW5jdGlvbiBvXyhlKXtsZXR7bWVzc2FnZUlkOnQsbWVzc2FnZUNvbnRlbnQ6bixzZW5kZXJJZDpyLGNvbnZlcnNhdGlvbklkOmksaXNQcmV2aWV3OmE9ITEsYXV0b1BsYXk6cz0hMX09ZTtpZighbilyZXR1cm4gQygpLmdldExvZ2dlcihcIk1lc3NhZ2VDb250ZW50Vmlld1wiKS53YXJuKFwiRGV0ZWN0ZWQgZW1wdHkgbWVzc2FnZSBjb250ZW50c1wiLG4pLCgwLHEuanN4KShxLkZyYWdtZW50LHtjaGlsZHJlbjpcIltlbXB0eSBjb250ZW50XVwifSk7Y29uc3QgYz0oMCx6LiRwKShWcy5Db250ZW50cy5kZWNvZGUobi5jb250ZW50KSk7c3dpdGNoKGMuY29udGVudD8uJGNhc2Upe2Nhc2VcInRleHRcIjpyZXR1cm4oMCxvLlopKG1nLHt0ZXh0OmMuY29udGVudC50ZXh0LGNvbnZlcnNhdGlvbklkOmksc2VuZGVySWQ6cixtZXNzYWdlSWQ6dH0pO2Nhc2VcInN0aWNrZXJcIjpyZXR1cm4oMCxvLlopKE12LHtzdGlja2VyOmMuY29udGVudC5zdGlja2VyLHJlbW90ZU1lZGlhUmVmZXJlbmNlczpuLnJlbW90ZU1lZGlhUmVmZXJlbmNlc30pO2Nhc2VcImV4dGVybmFsTWVkaWFcIjp7Y29uc3QgZT1BdihjLmNvbnRlbnQuZXh0ZXJuYWxNZWRpYSxuLnJlbW90ZU1lZGlhUmVmZXJlbmNlcz8/W10pO3JldHVybigwLG8uWikoQ3Yse3NuYXBkb2NzOmUsY29udmVyc2F0aW9uSWQ6aSxtZXNzYWdlSWQ6dCxhdXRvUGxheTpzfSl9Y2FzZVwiZmFtaWx5Q2VudGVySW52aXRlXCI6cmV0dXJuKDAsby5aKShRbSx7c2VuZGVySWQ6cn0pO2Nhc2VcInN0YXR1c01lc3NhZ2VcIjpyZXR1cm4oMCxvLlopKGlfLHtzdGF0dXNNZXNzYWdlOmMuY29udGVudC5zdGF0dXNNZXNzYWdlLHNlbmRlcklkOnIsY29udmVyc2F0aW9uSWQ6aX0pO2Nhc2VcIm5vdGVcIjpyZXR1cm4oMCxvLlopKE52LHtub3RlOmMuY29udGVudC5ub3RlLHJlbW90ZU1lZGlhUmVmZXJlbmNlczpuLnJlbW90ZU1lZGlhUmVmZXJlbmNlc30pO2Nhc2VcInNoYXJlXCI6cmV0dXJuKDAsby5aKShtdix7bWVzc2FnZUlkOnQsY29udmVyc2F0aW9uSWQ6aSxzaGFyZTpjLmNvbnRlbnQuc2hhcmUscmVtb3RlTWVkaWFSZWZlcmVuY2VzOm4ucmVtb3RlTWVkaWFSZWZlcmVuY2VzfSk7Y2FzZVwic25hcFJlcGx5XCI6cmV0dXJuKDAsby5aKShFZyx7aXNQcmV2aWV3OmEsY29udmVyc2F0aW9uSWQ6aSxtZXNzYWdlSWQ6dCxzbmFwUmVwbHk6Yy5jb250ZW50LnNuYXBSZXBseSxyZW1vdGVNZWRpYVJlZmVyZW5jZXM6bi5yZW1vdGVNZWRpYVJlZmVyZW5jZXN9KTtjYXNlXCJjcmVhdGl2ZVRvb2xJdGVtXCI6cmV0dXJuKDAsby5aKShndix7Y3JlYXRpdmVUb29sSXRlbTpjLmNvbnRlbnQuY3JlYXRpdmVUb29sSXRlbX0pO2Nhc2VcInNuYXBkb2NcIjppZihuLnJlbW90ZU1lZGlhUmVmZXJlbmNlcz8ubGVuZ3RoKXtjb25zdCBlPVJ2KGMuY29udGVudC5zbmFwZG9jLG4ucmVtb3RlTWVkaWFSZWZlcmVuY2VzWzBdKTtyZXR1cm4oMCxvLlopKEN2LHtzbmFwZG9jczpbZV0sY29udmVyc2F0aW9uSWQ6aSxtZXNzYWdlSWQ6dCxhdXRvUGxheTpzfSl9fWNvbnN0IGw9UGUuemNbbi5jb250ZW50VHlwZV07dGhyb3cgbmV3IFRmLm9mKGMuY29udGVudD8uJGNhc2V8fGwsYy5jb250ZW50Py4kY2FzZXx8bHx8XCJ1bmtub3duXCIpfWNvbnN0IGFfPXtyZWFjdGlvbkJlbG93TGlzdDpcIlBtVEE4XCJ9O2Z1bmN0aW9uIHNfKGUpe2xldHttZXNzYWdlOnR9PWU7Y29uc3Qgbj0oMCxkLnVzZVJlZikobnVsbCkscj12ZihuKSxpPSgwLGsubykodHUucVIpO3JldHVybigwLHEuanN4KShcInVsXCIse3JlZjpuLGNsYXNzTmFtZTphXy5yZWFjdGlvbkJlbG93TGlzdCxjaGlsZHJlbjowPT09dC5tZXRhZGF0YS5yZWFjdGlvbnMubGVuZ3RoP251bGw6dC5tZXRhZGF0YS5yZWFjdGlvbnMubWFwKCgoZSx0KT0+KDAsby5aKShBcCx7cmVhY3Rpb246ZSxoZWlnaHQ6NTAsZGVlbXBoYXNpemU6ITEsZGlzYWJsZWQ6ITAsb25DbGljazp2b2lkIDAsZW5sYXJnZU9uSG92ZXI6ITEsc2hvdWxkU2hvd0FuaW1hdGVkUmVhY3Rpb25zOnImJml9LGUucmVhY3Rpb24ucmVhY3Rpb25JZD8udG9TdHJpbmcoKXx8dC50b1N0cmluZygpKSkpfSl9dmFyIGNfO2Z1bmN0aW9uIGxfKCl7cmV0dXJuIGxfPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sbF8uYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IHVfPWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLGxfKHt3aWR0aDoxNixoZWlnaHQ6MTYsdmlld0JveDpcIjAgMCAxNiAxNlwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSxjX3x8KGNfPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIm0xMy42MDcgNy40NzQuMDIuMDEuMDE4LjAwOWMuNTg0LjI1Ny42MDUuNTAyLjYwNS41MTEgMCAuMDEtLjAyMS4yNTUtLjYwNS41MTJsLS4wMTkuMDA4LS4wMTguMDEtOC43NyA0LjQ1N2MtLjQyNC4xODQtLjczNi4yNTMtLjkzOC4yNmEuNzE1LjcxNSAwIDAgMS0uMTM2LS4wMDcuNjQuNjQgMCAwIDEgLjAwOS0uMDc2Yy4wMjgtLjE3LjEzLS40NDIuMzcxLS44MTQuNC0uNTE1LjgyNi0xLjIyOCAxLjE1Ni0xLjk3NS4zMy0uNzQ2LjYtMS42MDYuNi0yLjM3NSAwLS43ODMtLjI3Ny0xLjY0My0uNjExLTIuMzg4YTEwLjc4NiAxMC43ODYgMCAwIDAtMS4xNTctMS45ODJjLS4yNDUtLjM2Ni0uMzQ2LS42MzQtLjM3NC0uNzk5YS41ODguNTg4IDAgMCAxLS4wMDgtLjA3Ni42OS42OSAwIDAgMSAuMTUtLjAwOWMuMjAzLjAwNi41MTYuMDczLjkzOC4yNTdsOC43NyA0LjQ2N1pNMy43MTIgMTMuMjNsLjAwMi4wMDJhLjAxLjAxIDAgMCAxLS4wMDItLjAwMlptLjA1NC4wNjIuMDAxLjAwNy0uMDAxLS4wMDdaTTMuNzU0IDIuNzExbC0uMDAyLjAwN2MwLS4wMDUuMDAxLS4wMDcuMDAyLS4wMDdabS0uMDQ4LjA2MWEuMDEuMDEgMCAwIDEtLjAwMi4wMDJsLjAwMi0uMDAyWlwiLHN0cm9rZTpcImN1cnJlbnRDb2xvclwiLHN0cm9rZVdpZHRoOjEuNX0pKSk7dmFyIGRfO2Z1bmN0aW9uIGZfKCl7cmV0dXJuIGZfPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sZl8uYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IHBfPWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLGZfKHt3aWR0aDoxNixoZWlnaHQ6MTYsdmlld0JveDpcIjAgMCAxNiAxNlwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSxkX3x8KGRfPWQuY3JlYXRlRWxlbWVudChcInJlY3RcIix7eDoyLjc1LHk6Mi43NSx3aWR0aDoxMC41LGhlaWdodDoxMC41LHJ4OjEuODA4LHN0cm9rZTpcImN1cnJlbnRDb2xvclwiLHN0cm9rZVdpZHRoOjEuNX0pKSksbV89e2VudmVsb3BlOlwidndNNjlcIixpY29uOlwieTJvcUlcIixzb3VuZDpcImNtSzA3XCIsc2VuZGVyOlwiUnlWODNcIix1bm9wZW5lZEljb246XCJaU0U4VFwiLHRleHQ6XCJBVlZGdFwiLHByaW1hcnk6XCJtWmdxaFwiLHNlY29uZGFyeTpcIlFQS056XCIsY2FuT3BlbjpcIk9YYk1hXCJ9O2xldCBoXz1mdW5jdGlvbihlKXtyZXR1cm4gZVtlLlZpZXdhYmxlT25XZWI9MF09XCJWaWV3YWJsZU9uV2ViXCIsZVtlLlZpZXdhYmxlT25Nb2JpbGU9MV09XCJWaWV3YWJsZU9uTW9iaWxlXCIsZVtlLk5vbnZpZXdhYmxlPTJdPVwiTm9udmlld2FibGVcIixlfSh7fSk7ZnVuY3Rpb24gdl8oZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdCBuPVhjKCkse29wZW5MaWdodGJveDpyfT1uZCgpLHtvcGVuTGlnaHRCb3hWMjppfT0oMCwkbS5tKSgoZT0+ZSkpLG89KDAsTy5ycCkoQS55ZikmJiExLGE9ZS5sZW5ndGg+MD9lWzBdLmRlc2NyaXB0b3IuY29udmVyc2F0aW9uSWQ6dm9pZCAwLHM9VmwoYSksYz0oMCxrLm8pKFRlLkVEKTsoMCxkLnVzZUVmZmVjdCkoKCgpPT57IXMmJmEmJmMoYSl9KSxbcyxhLGNdKTtjb25zdHtzdGFydGVkVmlld2luZ1NuYXA6bCxmaW5pc2hlZFZpZXdpbmdTbmFwOnUsc25hcERvd25sb2FkU3RhdHVzQ2hhbmdlZDpmfT1YbCgpLHA9KDAsTy5ycCkoQS5yMykmJiExLG09KDAsZC51c2VNZW1vKSgoKCk9PmUubWFwKChlPT5mdW5jdGlvbihlLHQsbixyKXtpZighZS5tZXNzYWdlQ29udGVudHx8IWZ1bmN0aW9uKGUpe3JldHVybiFDaCgpKGUubWVzc2FnZUNvbnRlbnQpfShlKSlyZXR1cm47Y29uc3QgaT0oMCx6LiRwKShWcy5Db250ZW50cy5kZWNvZGUoZS5tZXNzYWdlQ29udGVudC5jb250ZW50KSk7bGV0IG87dCYmXCJzbmFwZG9jXCI9PT1pLmNvbnRlbnQ/LiRjYXNlJiZlLm1lc3NhZ2VDb250ZW50LnJlbW90ZU1lZGlhUmVmZXJlbmNlcz8ubGVuZ3RoJiYobz1SdihpLmNvbnRlbnQuc25hcGRvYyxlLm1lc3NhZ2VDb250ZW50LnJlbW90ZU1lZGlhUmVmZXJlbmNlc1swXSkpO2NvbnN0IGE9byYme21lc3NhZ2VJZDplLmRlc2NyaXB0b3IubWVzc2FnZUlkLG1lc3NhZ2U6cj9lOnZvaWQgMCxtZWRpYUluZm9zOlR2KG8pfSxzPWUuc2VuZGVySWQ9PT1uLGM9ZS5tZXRhZGF0YS5vcGVuZWRCeS5sZW5ndGg+MHx8ZS5tZXRhZGF0YS5zY3JlZW5TaG90dGVkQnkubGVuZ3RoPjAsbD1lLm1ldGFkYXRhLm9wZW5lZEJ5LnNvbWUoKGU9PmU9PT1uKSl8fGUubWV0YWRhdGEuc2NyZWVuU2hvdHRlZEJ5LnNvbWUoKGU9PmU9PT1uKSksdT1jJiYhbCxkPXZvaWQgMCE9PWUubWV0YWRhdGEucGxheWFibGVTbmFwU3RhdGUmJltQZS5FVy5OT1RET1dOTE9BREVELFBlLkVXLlBMQVlBQkxFXS5pbmNsdWRlcyhlLm1ldGFkYXRhLnBsYXlhYmxlU25hcFN0YXRlKXx8IXMmJiFsLGY9dm9pZCAwIT09byxwPXtyZXBsYXlhYmxlOmUubWV0YWRhdGEucGxheWFibGVTbmFwU3RhdGU9PT1QZS5FVy5WSUVXRURSRVBMQVlBQkxFLHNhdmVhYmxlOmUubWV0YWRhdGEuaXNTYXZlYWJsZSxjdXJyZW50VXNlcklzU2VuZGVyOnMsdmlld2VkQnlDdXJyZW50VXNlcjpsLHZpZXdlZEJ5T3RoZXJzOnUsaGFzU291bmQ6Qm9vbGVhbihlLm1lc3NhZ2VDb250ZW50LnNuYXBEaXNwbGF5SW5mbz8uaGFzQXVkaW8pLG1lc3NhZ2U6ZX07cmV0dXJuIGQ/ZiYmbyYmYT97Li4ucCx2aWV3YWJsZTpoXy5WaWV3YWJsZU9uV2ViLHNuYXBEb2M6byxtZWRpYUluZm86YX06ey4uLnAsdmlld2FibGU6aF8uVmlld2FibGVPbk1vYmlsZX06ey4uLnAsdmlld2FibGU6aF8uTm9udmlld2FibGV9fShlLHAsbix0KSkpLmZpbHRlcigoZT0+dm9pZCAwIT09ZSkpKSxbdCxuLGUscF0pLHtzbmFwTWVzc2FnZXNCeU1lc3NhZ2VJZDpoLHNuYXBzVmlld2FibGVPbldlYjp2LHNuYXBzVmlld2FibGVPbk1vYmlsZTpnfT0oMCxkLnVzZU1lbW8pKCgoKT0+e2NvbnN0IGU9bS5yZWR1Y2UoKChlLHQpPT4oZS5zZXQodC5tZXNzYWdlLmRlc2NyaXB0b3IubWVzc2FnZUlkLHQpLGUpKSxuZXcgTWFwKTtyZXR1cm57c25hcE1lc3NhZ2VzQnlNZXNzYWdlSWQ6ZSxzbmFwc1ZpZXdhYmxlT25XZWI6bS5maWx0ZXIoKGU9PmUudmlld2FibGU9PT1oXy5WaWV3YWJsZU9uV2ViKSksc25hcHNWaWV3YWJsZU9uTW9iaWxlOm0uZmlsdGVyKChlPT5lLnZpZXdhYmxlPT09aF8uVmlld2FibGVPbk1vYmlsZSkpfX0pLFttXSk7aWYoKDAsZC51c2VFZmZlY3QpKCgoKT0+e2IoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwic25hcF92aWV3aW5nX3ZpZXdhYmxlX29uX3dlYlwiLHZhbHVlOnYubGVuZ3RofSksYigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJzbmFwX3ZpZXdpbmdfdmlld2FibGVfb25fbW9iaWxlXCIsdmFsdWU6Zy5sZW5ndGh9KX0pLFt2LGddKSwwPT09bS5sZW5ndGh8fCFhfHwhcylyZXR1cm57YWxsU25hcHM6W10sc25hcHNWaWV3YWJsZU9uV2ViOltdLHNuYXBzVmlld2FibGVPbk1vYmlsZTpbXX07bGV0IHk7aWYodi5sZW5ndGgpaWYobyl7Y29uc3QgZT12Lm1hcCgoZT0+ZS5tZWRpYUluZm8pKTt5PSgpPT5pKHttb2RlOmVoLm8uU25hcCxtZWRpYXM6ZSxjb252ZXJzYXRpb25JZDphLHN0YXJ0aW5nSW5kZXg6MCxvbkxvYWRNZWRpYVN1Y2NlZWRlZDplPT57ZihQZS5UaC5TVUNDRUVERUQsYSxlLm1lc3NhZ2VJZCl9LG9uTG9hZE1lZGlhRmFpbGVkOmU9PntmKFBlLlRoLkZBSUxFRCxhLGUubWVzc2FnZUlkKX0sb25TdGFydFZpZXdpbmdNZWRpYTphc3luYyBlPT57YXdhaXQgZihQZS5UaC5JTklUSUFURUQsYSxlLm1lc3NhZ2VJZCksbChhLGUubWVzc2FnZUlkKX0sb25GaW5pc2hWaWV3aW5nTWVkaWE6ZT0+e3UoYSxlLm1lc3NhZ2VJZCk7Y29uc3QgdD1oLmdldChlLm1lc3NhZ2VJZCk7dCYmdC52aWV3YWJsZT09PWhfLlZpZXdhYmxlT25XZWImJigwLFljLnhOKSh0Lm1lc3NhZ2Use3NuYXBkb2M6dC5zbmFwRG9jLGNvbnY6cyxjdXJyZW50VXNlcklkOigwLHouTWMpKG4pLG1lc3NhZ2VUaW1lc3RhbXA6dC5tZXNzYWdlLm1ldGFkYXRhLmNyZWF0ZWRBdCx2aWV3ZWRUaW1lSW5TZWM6dm9pZCAwfSl9fSl9ZWxzZXtjb25zdCBlPXYubGVuZ3RoPjA/dlswXTp2b2lkIDAsdD1lPy5tZWRpYUluZm87dCYmKHk9YXN5bmMoKT0+e3IoZS5tZXNzYWdlLmRlc2NyaXB0b3IubWVzc2FnZUlkLFt0Lm1lZGlhSW5mb3NdLDApLGF3YWl0IGwoYSx0Lm1lc3NhZ2VJZCksdShhLHQubWVzc2FnZUlkKX0pfXJldHVybnthbGxTbmFwczptLHNuYXBzVmlld2FibGVPbldlYjp2LHNuYXBzVmlld2FibGVPbk1vYmlsZTpnLG9wZW5TbmFwOnl9fXZhciBnXyx5XyxFXyxfXyxJXyxTXyxiXyxUXyxDXyxBXyxSXyxrXyxPXztmdW5jdGlvbiBOXyhlKXtsZXR7bWVzc2FnZTp0fT1lO2NvbnN0e2FsbFNuYXBzOm4sb3BlblNuYXA6cn09dl8oKDAsZC51c2VNZW1vKSgoKCk9Plt0XSksW3RdKSk7cmV0dXJuIG4ubGVuZ3RoPygwLG8uWikod18se3NuYXBNZXNzYWdlOm5bMF0sb3BlblNuYXA6cn0pOm51bGx9ZnVuY3Rpb24gd18oZSl7bGV0e3NuYXBNZXNzYWdlOnQsb3BlblNuYXA6bn09ZTtjb25zdHt2aWV3YWJsZTpyLHJlcGxheWFibGU6aSxzYXZlYWJsZTphLGN1cnJlbnRVc2VySXNTZW5kZXI6cyx2aWV3ZWRCeUN1cnJlbnRVc2VyOmwsdmlld2VkQnlPdGhlcnM6dSxoYXNTb3VuZDpmfT10O2xldCBwPSExO2NvbnN0IG09cz9nX3x8KGdfPSgwLG8uWikodV8se30pKTp5X3x8KHlfPSgwLG8uWikocF8se30pKTtsZXQgaCxnLHk9ITE7cmV0dXJuIHIhPT1oXy5Ob252aWV3YWJsZT8oaD1FX3x8KEVfPSgwLG8uWikodi5aLHtpZDpcIkZJV2tVZVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiTmV3IFNuYXBcIn1dfSkpLGc9cj09PWhfLlZpZXdhYmxlT25XZWI/X198fChfXz0oMCxvLlopKHYuWix7aWQ6XCJPUGpaWXRcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkNsaWNrIHRvIHZpZXdcIn1dfSkpOklffHwoSV89KDAsby5aKSh2Llose2lkOlwiVGRGSU5OXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJPcGVuIHRoZSBtb2JpbGUgYXBwIHRvIHZpZXdcIn1dfSkpKTppJiZhPyhoPVNffHwoU189KDAsby5aKSh2Llose2lkOlwiWERkbERwXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJSaWdodCBjbGljayB0byByZXBsYXkgb3Igc2F2ZVwifV19KSkscD0hMCk6aT8oaD1iX3x8KGJfPSgwLG8uWikodi5aLHtpZDpcImRaMks3blwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiUmlnaHQgY2xpY2sgdG8gcmVwbGF5XCJ9XX0pKSxwPSEwKTphJiYhcz8oaD1UX3x8KFRfPSgwLG8uWikodi5aLHtpZDpcImJrdzRVUVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiUmlnaHQgY2xpY2sgdG8gc2F2ZVwifV19KSkscD0hMCk6cyYmdXx8IXMmJmw/KGg9Q198fChDXz0oMCxvLlopKHYuWix7aWQ6XCJpK20zaitcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIk9wZW5lZFwifV19KSkscD0hMCk6cyYmIXU/aD1BX3x8KEFfPSgwLG8uWikodi5aLHtpZDpcIlFWYWh2c1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiRGVsaXZlcmVkXCJ9XX0pKTooaD1SX3x8KFJfPSgwLG8uWikodi5aLHtpZDpcIkx0cGlEelwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiQmFkIFNuYXBcIn1dfSkpLGc9a198fChrXz0oMCxvLlopKHYuWix7aWQ6XCJUZEZJTk5cIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIk9wZW4gdGhlIG1vYmlsZSBhcHAgdG8gdmlld1wifV19KSkseT0hMCksKDAsZC51c2VFZmZlY3QpKCgoKT0+e3kmJigwLGMudVQpKFwiZm91bmQgYmFkIHNuYXBcIix7ZXh0cmE6e3ZpZXdhYmxlOnIscmVwbGF5YWJsZTppLHNhdmVhYmxlOmEsY3VycmVudFVzZXJJc1NlbmRlcjpzLHZpZXdlZEJ5Q3VycmVudFVzZXI6bCx2aWV3ZWRCeU90aGVyczp1LGhhc1NvdW5kOmZ9fSl9KSxbcyxmLHksaSxhLHIsbCx1XSksKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6KDAsUS5aKShtXy5lbnZlbG9wZSxyPT09aF8uVmlld2FibGVPbldlYiYmbiYmbV8uY2FuT3Blbiksb25DbGljazpufSx2b2lkIDAsKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6KDAsUS5aKShtXy5pY29uLGYmJm1fLnNvdW5kLHMmJm1fLnNlbmRlciwhcCYmbV8udW5vcGVuZWRJY29uKX0sdm9pZCAwLG0pLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOm1fLnRleHR9LHZvaWQgMCwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTptXy5wcmltYXJ5fSx2b2lkIDAsaCksKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6bV8uc2Vjb25kYXJ5fSx2b2lkIDAsZykpKX1mdW5jdGlvbiBEXyhlKXtsZXR7d2lkdGg6dCxoZWlnaHQ6bn09ZTtjb25zdCByPW52KHR2LlNpbmdsZUNoYXRNZWRpYSx0LG4pO3JldHVybigwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOigwLFEuWikoXCJ2cThPWVwiLCFyJiZcIkRLR3Z6XCIpLHN0eWxlOnJ9LHZvaWQgMCwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpcInZMc3IzXCJ9LHZvaWQgMCxPX3x8KE9fPSgwLG8uWikodi5aLHtpZDpcIlo4TjBvV1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiSW52YWxpZCBNZWRpYVwifV19KSkpKX1jb25zdCBQXz1bUGUuemMuU1RBVFVTLFBlLnpjLlNUQVRVU19TQVZFX1RPX0NBTUVSQV9ST0xMLFBlLnpjLlNUQVRVU19DQUxMX01JU1NFRF9BVURJTyxQZS56Yy5TVEFUVVNfQ0FMTF9NSVNTRURfVklERU8sUGUuemMuU1RBVFVTX0NPTlZFUlNBVElPTl9DQVBUVVJFX1JFQ09SRCxQZS56Yy5TVEFUVVNfQ09OVkVSU0FUSU9OX0NBUFRVUkVfU0NSRUVOU0hPVCxQZS56Yy5VTktOT1dOXTtmdW5jdGlvbiBNXyhlKXtyZXR1cm4gUF8uaW5jbHVkZXMoZSl9Y29uc3QgTF89e2ZhaWxlZFRvU2VuZENvbG9yOlwidmFyKC0tc2lnVGV4dFNlY29uZGFyeSlcIixtZXNzYWdlSXRlbUNvbnRhaW5lcjpcIktCNEFxXCIscXVvdGVkTWVzc2FnZTpcIk1KNm1vIHVuZGVmaW5lZFwiLGRlbGV0ZWRRdW90ZWRNZXNzYWdlOlwieHpVcl9cIixtZXNzYWdlSXRlbTpcInA4cjF6XCIsbWVzc2FnZUF1dGhvcjpcIlNHY0FiXCIsaGFzQm9yZGVyOlwiU09FSVBcIixzdGFydFNhdmVCbG9jazpcIk9VTENXXCIsZW5kU2F2ZUJsb2NrOlwidExvRXZcIixzYXZlZDpcIkJ3UlJQXCIsc2F2ZWRCeU1lOlwiZ0hUcTRcIixtZXNzYWdlQWN0aW9uTWVudTpcIkd3QUxEXCIsYWN0aW9uYWJsZTpcIklQRWdxXCIsZmFkZUluOlwiYk50UmpcIixzZW5kaW5nOlwiU09fbmVcIixlcnJvcjpcImVpRlNhXCIsY2hhdE1lc3NhZ2U6XCJ1V19yQVwifTt2YXIgVV87QygpLmdldExvZ2dlcihcIltDaGF0XVtNZXNzYWdlSXRlbV1cIik7Y29uc3QgeF89W1BlLnpjLkNIQVQsUGUuemMuU05BUCxQZS56Yy5TVElDS0VSLFBlLnpjLkVYVEVSTkFMX01FRElBLFBlLnpjLk5PVEUsUGUuemMuU0hBUkVdLEZfPWU9PntsZXR7ZXJyb3I6dH09ZTtyZXR1cm4gdCBpbnN0YW5jZW9mIFRmLm9mPygwLG8uWikoeWcse21lc3NhZ2VUeXBlOnQubWVzc2FnZVR5cGV9KTp0IGluc3RhbmNlb2YgVGYuQ0o/KDAsby5aKShEXyx7d2lkdGg6dC53aWR0aCxoZWlnaHQ6dC5oZWlnaHR9KTooMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpMXy5lcnJvcn0sdm9pZCAwLHQubWVzc2FnZSl9O2Z1bmN0aW9uIEJfKGUpe2xldHttZXNzYWdlOnQsc2V0SG92ZXJlZE1lc3NhZ2U6bixzZXRIb3ZlcmVkQWN0aW9uTGFiZWw6cixpc1ByZXZpZXc6aT0hMSxhdXRvUGxheTphPSExLHN0YXJ0U2F2ZUJsb2NrOnM9ITEsZW5kU2F2ZUJsb2NrOmw9ITEsbm9Cb3JkZXI6dT0hMX09ZTtjb25zdCBmPVhjKCkscD1HbCh0LmRlc2NyaXB0b3IuY29udmVyc2F0aW9uSWQpLmdldCh0LnNlbmRlcklkKSxoPSgwLHRsLnBqKSh0KT9MXy5mYWlsZWRUb1NlbmRDb2xvcjpwLHY9KDAsdGwua1QpKHQpLGc9dC5tZXNzYWdlQ29udGVudD8uY29udGVudFR5cGU9PT1QZS56Yy5DSEFULHk9dC5tZXNzYWdlQ29udGVudD8uY29udGVudFR5cGU/P1BlLnpjLlVOS05PV04sW0UsX109KDAsZC51c2VTdGF0ZSkoITApLEk9TV8oeSksW1MsVF09KDAsZC51c2VTdGF0ZSkoITEpLEM9KDAsay5vKSh0dS5xUiksW1IsTix3LEQsUF09ZnVuY3Rpb24oZSl7Y29uc3QgdD0oMCxPLnJwKShBLiRHKSxbbixyXT0oMCxkLnVzZVN0YXRlKShbMCwwXSksaT1lJiYwIT09blswXSYmMCE9PW5bMV0sW28sYV09KDAsZC51c2VTdGF0ZSkoKTtyZXR1cm5baSxuLG8sZT0+e2lmKCF0KXJldHVybjtlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCBuPXdpbmRvdy5nZXRTZWxlY3Rpb24oKT8udG9TdHJpbmcoKTthKG4pLHIoW2UubmF0aXZlRXZlbnQucGFnZVgsZS5uYXRpdmVFdmVudC5wYWdlWV0pfSwoMCxkLnVzZUNhbGxiYWNrKSgoKCk9PnthKHZvaWQgMCkscihbMCwwXSl9KSxbXSldfShDKSxbTSxMXT0oMCxkLnVzZVN0YXRlKSghMSksW1UseF09ZnVuY3Rpb24oZSx0LG4scil7Y29uc3QgaT1lLm1lc3NhZ2VDb250ZW50Py5jb250ZW50VHlwZT8/UGUuemMuVU5LTk9XTixvPSFuJiZ4Xy5pbmNsdWRlcyhpKSxhPSgwLE8ucnApKEEueUQpJiYhMTtyZXR1cm5bbywoKT0+e2NvbnN0IG49YT9bYm0uREVCVUddOltdO3JldHVybiBvJiZyJiZlLm1ldGFkYXRhLmlzUmVhY3RhYmxlP3Q/KG4ucHVzaChibS5DT1BZKSxuKToobi5wdXNoKGJtLlJFQUNUSU9OUyxibS5TQVZFLGJtLlJFUExZLGJtLkNPUFksYm0uREVMRVRFKSxlLm1ldGFkYXRhLnBsYXlhYmxlU25hcFN0YXRlPT09UGUuRVcuVklFV0VEUkVQTEFZQUJMRSYmbi5wdXNoKGJtLlJFUVVFU1RfUkVQTEFZKSxuKTpufV19KHQsdyxpLEUpLFtGLEIsVl09ZnVuY3Rpb24oZSx0KXtjb25zdCBuPWUubWVzc2FnZUNvbnRlbnQ/LmNvbnRlbnRUeXBlPz9QZS56Yy5VTktOT1dOLHI9ZS5tZXRhZGF0YS5pc1NhdmVhYmxlLGk9TV8obiksbz0haSYmKDAsdGwuZkYpKGUpLGE9IWkmJmUubWV0YWRhdGEuc2F2ZWRCeS5pbmNsdWRlcyh0KSxzPSgwLGsubykoVGUuRkcpLGM9KDAsZC51c2VDYWxsYmFjaykoKGFzeW5jKCk9Pntjb25zdCB0PXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtpZihcIlJhbmdlXCIhPT10Py50eXBlKXRyeXthd2FpdCBzKGUuZGVzY3JpcHRvci5jb252ZXJzYXRpb25JZCxlLmRlc2NyaXB0b3IubWVzc2FnZUlkLGE/UGUuUjYuVU5TQVZFOlBlLlI2LlNBVkUpfWNhdGNoKGUpe319KSxbYSxlLmRlc2NyaXB0b3IuY29udmVyc2F0aW9uSWQsZS5kZXNjcmlwdG9yLm1lc3NhZ2VJZCxzXSk7cmV0dXJuW28sYSxyP2M6dm9pZCAwXX0odCxmKSxHPWZ1bmN0aW9uKGUsdCxuKXtjb25zdCByPSgwLGsubykoVGUuRkcpO3JldHVybiBhc3luYyhuLGksbyk9PntpZihuIGluc3RhbmNlb2YgVGYub2Ype18oITEpLGIoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOmBtZXNzYWdpbmcudW5zdXBwb3J0ZWRfbWVzc2FnZS4ke24ubWVzc2FnZVR5cGV9YH0pO3RyeXshZS5tZXRhZGF0YS5pc1NhdmVhYmxlfHxlLm1ldGFkYXRhLnNhdmVkQnkuaW5jbHVkZXModCl8fGUubWV0YWRhdGEuc2VlbkJ5LmluY2x1ZGVzKHQpfHxhd2FpdCByKGUuZGVzY3JpcHRvci5jb252ZXJzYXRpb25JZCxlLmRlc2NyaXB0b3IubWVzc2FnZUlkLFBlLlI2LlNBVkUpfWNhdGNoKGUpeygwLGMuVGIpKGUpfX1lbHNle2NvbnN0IHQ9ZS5tZXNzYWdlQ29udGVudD8uY29udGVudFR5cGUsbj10P1BlLnpjW3RdLnRvTG93ZXJDYXNlKCk6XCJ1bmtub3duXCI7YigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJtZXNzYWdlX2l0ZW1fcmVuZGVyX2ZhaWxcIixkaW1lbnNpb25zOnttZXNzYWdlX3R5cGU6bn19KX19fSh0LGYpLEg9TSYmciYmKDAsby5aKShcInNwYW5cIix7Y2xhc3NOYW1lOkxfLm1lc3NhZ2VBY3Rpb25NZW51fSx2b2lkIDAsKDAsby5aKShxbSx7YWxsb3dlZEFjdGlvbnM6eCgpLHNob3dpbmdSZWFjdGlvblBpY2tlcjpTLHNldFNob3dpbmdSZWFjdGlvblBpY2tlcjpULHNldEhvdmVyZWRBY3Rpb25MYWJlbDpyLG1lc3NhZ2U6dH0pKSxXPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1lLm1ldGFkYXRhLm9wZW5lZEJ5LmluY2x1ZGVzKHQpfHxlLm1ldGFkYXRhLnJlcGxheWVkQnkuaW5jbHVkZXModCkscj1lLnNlbmRlcklkPT09dCxpPSgwLHRsLmZGKShlKTtyZXR1cm4gZS5tZXNzYWdlQ29udGVudD8uY29udGVudFR5cGU9PT1QZS56Yy5TTkFQJiYoIWl8fCFyJiYhbnx8MD09PWUubWVzc2FnZUNvbnRlbnQucmVtb3RlTWVkaWFSZWZlcmVuY2VzPy5sZW5ndGgpfSh0LGYpLGo9Vz8oMCxxLmpzeHMpKHEuRnJhZ21lbnQse2NoaWxkcmVuOltILCgwLG8uWikoTl8se21lc3NhZ2U6dH0pLCExXX0pOigwLG8uWikoXCJkaXZcIix7b25DbGljazpWLGNsYXNzTmFtZTpMXy5tZXNzYWdlSXRlbX0sdm9pZCAwLEgsKDAsby5aKShWXyx7bWVzc2FnZTp0LGlzUHJldmlldzppLGF1dG9QbGF5OmF9KSwhMSk7cmV0dXJuKDAscS5qc3hzKShxLkZyYWdtZW50LHtjaGlsZHJlbjpbUiYmKDAsby5aKShSbSx7fSx2b2lkIDAsKDAsby5aKShUbSx7YWxsb3dlZEFjdGlvbnM6eCgpLHNlbGVjdGVkVGV4dDp3LG1lc3NhZ2U6dCxvbkNsb3NlOlAsY29vcmRzOk59KSksKDAsby5aKShcImRpdlwiLHtvbkNvbnRleHRNZW51OkQsb25Nb3VzZUVudGVyOigpPT57TCghMCksbj8uKHQpfSxvbk1vdXNlTGVhdmU6KCk9PntMKCExKSxUKCExKSxuPy4odm9pZCAwKSxyPy4odm9pZCAwKX0sY2xhc3NOYW1lOigwLFEuWikoTF8ubWVzc2FnZUl0ZW1Db250YWluZXIsIXUmJnAmJiFJJiZMXy5oYXNCb3JkZXIsdiYmTF8uc2VuZGluZyxVJiZMXy5hY3Rpb25hYmxlLEYmJkxfLnNhdmVkLCFXJiZCJiZMXy5zYXZlZEJ5TWUscyYmTF8uc3RhcnRTYXZlQmxvY2ssbCYmTF8uZW5kU2F2ZUJsb2NrLGcmJkxfLmNoYXRNZXNzYWdlKSxzdHlsZTp1P3ZvaWQgMDp7Ym9yZGVyQ29sb3I6aH19LHZvaWQgMCwoMCxvLlopKG0se2ZhbGxiYWNrOkZfLG9uRXJyb3I6R30sdm9pZCAwLGosITEpKSxpP251bGw6KDAsby5aKShzXyx7bWVzc2FnZTp0fSldfSl9ZnVuY3Rpb24gVl8oZSl7bGV0e21lc3NhZ2U6dCxpc1ByZXZpZXc6bixhdXRvUGxheTpyfT1lO2NvbnN0IGk9KDAsZC51c2VNZW1vKSgoKCk9PigwLG8uWikob18se2lzUHJldmlldzpuLG1lc3NhZ2VJZDp0LmRlc2NyaXB0b3IubWVzc2FnZUlkLG1lc3NhZ2VDb250ZW50OnQubWVzc2FnZUNvbnRlbnQsc2VuZGVySWQ6dC5zZW5kZXJJZCxjb252ZXJzYXRpb25JZDp0LmRlc2NyaXB0b3IuY29udmVyc2F0aW9uSWQsYXV0b1BsYXk6cn0pKSxbdC5kZXNjcmlwdG9yLm1lc3NhZ2VJZCx0Lm1lc3NhZ2VDb250ZW50LHJdKTtyZXR1cm4oMCxxLmpzeHMpKHEuRnJhZ21lbnQse2NoaWxkcmVuOlt0Lm1lc3NhZ2VDb250ZW50Py5xdW90ZWRNZXNzYWdlJiZZaChuLHQpJiYoMCxvLlopKEdfLHtxdW90ZWRNZXNzYWdlOnQubWVzc2FnZUNvbnRlbnQucXVvdGVkTWVzc2FnZSxjb252ZXJzYXRpb25JZDp0LmRlc2NyaXB0b3IuY29udmVyc2F0aW9uSWR9KSxpXX0pfWZ1bmN0aW9uIEdfKGUpe2xldHtxdW90ZWRNZXNzYWdlOnQsY29udmVyc2F0aW9uSWQ6bn09ZTtjb25zdCByPUdsKG4pLGk9dC5jb250ZW50LGE9IWkmJnQuc3RhdHVzPT09UGUuQkouREVMRVRFRCxzPWk/ci5nZXQoaS5zZW5kZXJJZCk6dm9pZCAwLGM9KDAsZC51c2VNZW1vKSgoKCk9Pmk/KDAsby5aKShvXyx7bWVzc2FnZUlkOmkubWVzc2FnZUlkLG1lc3NhZ2VDb250ZW50Omksc2VuZGVySWQ6aS5zZW5kZXJJZCxjb252ZXJzYXRpb25JZDpufSk6VV98fChVXz0oMCxvLlopKHYuWix7aWQ6XCJIblFWSHRcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlRoaXMgbWVzc2FnZSB3YXMgZGVsZXRlZFwifV19KSkpLFtpPy5tZXNzYWdlSWRdKTtyZXR1cm4oMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpMXy5xdW90ZWRNZXNzYWdlfSx2b2lkIDAsaSYmKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6TF8ubWVzc2FnZUF1dGhvcixzdHlsZTp7Y29sb3I6c319LHZvaWQgMCwoMCxvLlopKGp1LHt1c2VySWQ6aS5zZW5kZXJJZH0pKSwoMCxvLlopKFwidWxcIix7fSx2b2lkIDAsKDAsby5aKShcImxpXCIse2NsYXNzTmFtZTooMCxRLlopKExfLmhhc0JvcmRlcixhJiZMXy5kZWxldGVkUXVvdGVkTWVzc2FnZSksc3R5bGU6e2JvcmRlckNvbG9yOnN9fSx2b2lkIDAsKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6TF8ubWVzc2FnZUl0ZW1Db250YWluZXJ9LHZvaWQgMCxjKSkpKX1jb25zdCBIXz17bWVzc2FnZVN0aWNrZXJHcm91cDpcInZGV0UzXCJ9O2Z1bmN0aW9uIFdfKGUpe2xldHthbGxNZXNzYWdlc1NhdmVkOnQsaXNQcmV2aWV3Om4sbGFzdENoYXRNZWRpYVZpZGVvTWVzc2FnZTpyLG1lc3NhZ2VzOmksc3RhcnRTYXZlQmxvY2s6YSxlbmRTYXZlQmxvY2s6cyxzZXRIb3ZlcmVkTWVzc2FnZTpjLHNldEhvdmVyZWRBY3Rpb25MYWJlbDpsfT1lO2NvbnN0IHU9WGMoKSxkPWlbMF0sZj1HbChkLmRlc2NyaXB0b3IuY29udmVyc2F0aW9uSWQpLmdldChkLnNlbmRlcklkKSxwPSgwLHRsLnBqKShkKT9MXy5mYWlsZWRUb1NlbmRDb2xvcjpmLG09aS5maW5kKChlPT5lLm1ldGFkYXRhLnNhdmVkQnkuaW5jbHVkZXModSkpKTtyZXR1cm4oMCxvLlopKFwidWxcIix7Y2xhc3NOYW1lOigwLFEuWikoSF8ubWVzc2FnZVN0aWNrZXJHcm91cCxCb29sZWFuKGYpJiZMXy5oYXNCb3JkZXIsdCYmTF8uc2F2ZWQsbSYmTF8uc2F2ZWRCeU1lLGEmJkxfLnN0YXJ0U2F2ZUJsb2NrLHMmJkxfLmVuZFNhdmVCbG9jayksc3R5bGU6e2JvcmRlckNvbG9yOnB9fSx2b2lkIDAsaS5tYXAoKGU9PigwLG8uWikoXCJsaVwiLHt9LGUuZGVzY3JpcHRvci5tZXNzYWdlSWQudG9TdHJpbmcoKSwoMCxvLlopKEJfLHtpc1ByZXZpZXc6bixtZXNzYWdlOmUsc2V0SG92ZXJlZE1lc3NhZ2U6YyxzZXRIb3ZlcmVkQWN0aW9uTGFiZWw6bCxub0JvcmRlcjohMCxhdXRvUGxheTplLmRlc2NyaXB0b3IubWVzc2FnZUlkPT09cn0pKSkpKX1sZXQgal89ZnVuY3Rpb24oZSl7cmV0dXJuIGVbZS5CaXRtb2ppPTBdPVwiQml0bW9qaVwiLGVbZS5TdGlja2VyPTFdPVwiU3RpY2tlclwiLGV9KHt9KTtjb25zdCBaXz17W2pfLlN0aWNrZXJdOjc4LFtqXy5CaXRtb2ppXToxNjR9LHpfPWU9PlwiZW1vamlcIj09PWUuc3RpY2tlcj8uJGNhc2U/al8uU3RpY2tlcjpcImluY2x1ZGVkXCI9PT1lLnN0aWNrZXI/LiRjYXNlJiZlLnN0aWNrZXIuaW5jbHVkZWQuc3RpY2tlclR5cGU9PT1Edi5JbmNsdWRlZFN0aWNrZXJfSW5jbHVkZWRTdGlja2VyVHlwZS5CSVRNT0pJP2pfLkJpdG1vamk6bnVsbCxLXz1mdW5jdGlvbigpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXSx0PWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwO2NvbnN0IG49W107bGV0IHI9W10saT1udWxsLG89MDtmb3IoY29uc3QgYSBvZiBlKXtpZihhLm1lc3NhZ2VDb250ZW50Py5jb250ZW50VHlwZT09PVBlLnpjLlNUSUNLRVIpe2NvbnN0IGU9KDAsei4kcCkoVnMuQ29udGVudHMuZGVjb2RlKGEubWVzc2FnZUNvbnRlbnQuY29udGVudCkpO2lmKFwic3RpY2tlclwiPT09ZS5jb250ZW50Py4kY2FzZSl7Y29uc3Qgcz16XyhlLmNvbnRlbnQuc3RpY2tlcik7aWYobnVsbCE9PXMpe2NvbnN0IGU9Wl9bc107aWYobnVsbD09PWl8fHM9PT1pJiZ0LW8+PWUpe2k9cyxyLnB1c2goYSksbys9ZTtjb250aW51ZX1uLnB1c2goMT09PXIubGVuZ3RoP3JbMF06ciksaT1zLHI9W2FdLG89ZTtjb250aW51ZX19fXIubGVuZ3RoPjAmJihuLnB1c2goMT09PXIubGVuZ3RoP3JbMF06cikscj1bXSxvPTAsaT1udWxsKSxuLnB1c2goYSl9cmV0dXJuIHIubGVuZ3RoPjAmJm4ucHVzaCgxPT09ci5sZW5ndGg/clswXTpyKSxufSxZXz17bWVzc2FnZUdyb3VwTGlzdDpcImJKYVBMXCJ9O2Z1bmN0aW9uIHFfKGUpe2xldHttZXNzYWdlOnR9PWU7Y29uc3Qgbj0oMCxtZS5aKSgpLHI9bmV3IERhdGUoTnVtYmVyKHQubWV0YWRhdGEuY3JlYXRlZEF0KSksaT1uLmZvcm1hdFRpbWUobmV3IERhdGUoTnVtYmVyKHQubWV0YWRhdGEuY3JlYXRlZEF0KSkpO3JldHVybigwLG8uWikoXCJ0aW1lXCIse2RhdGVUaW1lOnIudG9JU09TdHJpbmcoKX0sdm9pZCAwLGkpfWNvbnN0IFhfPXtmYWlsZWRUb1NlbmRDb2xvcjpcInZhcigtLXNpZ1RleHRTZWNvbmRhcnkpXCIsbWVzc2FnZUdyb3VwTWV0YWRhdGE6XCJSMW5lM1wiLHRzTGFiZWw6XCJYSVBtRlwiLGluc2V0OlwiTDdoRmhcIn07dmFyIFFfO2Z1bmN0aW9uIEpfKGUpe2xldHtncm91cDp0LGhvdmVyZWRNZXNzYWdlOm4saG92ZXJlZEFjdGlvbkxhYmVsOnIsaXNQcmV2aWV3Omk9ITF9PWU7Y29uc3QgYT10Lm1lc3NhZ2VzWzBdLHM9R2woYS5kZXNjcmlwdG9yLmNvbnZlcnNhdGlvbklkKSxjPSgwLGsubykoVGUuU0UpLGw9dC5mYWlsZWRUb1NlbmQ/WF8uZmFpbGVkVG9TZW5kQ29sb3I6cy5nZXQodC5zZW5kZXJJZCk7cmV0dXJuKDAsby5aKShcImhlYWRlclwiLHtjbGFzc05hbWU6WF8ubWVzc2FnZUdyb3VwTWV0YWRhdGEsc3R5bGU6e2NvbG9yOmx9fSx2b2lkIDAsdC5mYWlsZWRUb1NlbmQ/KDAsby5aKShcImFcIix7b25DbGljazooKT0+eyhhc3luYyhlLHQpPT57dHJ5e2F3YWl0IGMoZSx0KX1jYXRjaChlKXt9fSkoYS5kZXNjcmlwdG9yLmNvbnZlcnNhdGlvbklkLGEuZGVzY3JpcHRvci5tZXNzYWdlSWQpfX0sdm9pZCAwLFFffHwoUV89KDAsby5aKSh2Llose2lkOlwibXUxRzlHXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJDbGljayB0byByZXRyeVwifV19KSkpOigwLG8uWikoanUse3VzZXJJZDp0LnNlbmRlcklkfSksKDAsby5aKShcInNwYW5cIix7Y2xhc3NOYW1lOigwLFEuWikoaSYmWF8uaW5zZXQpfSx2b2lkIDAsKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6WF8udHNMYWJlbH0sdm9pZCAwLHI/PyhuPygwLG8uWikocV8se21lc3NhZ2U6bn0pOm51bGwpKSkpfUMoKS5nZXRMb2dnZXIoXCJbQ29udmVyc2F0aW9uVmlldy0+TWVzc2FnZUxpc3RdXCIpO2NvbnN0ICRfPWU9PiEhZSYmKEFycmF5LmlzQXJyYXkoZSk/ZS5ldmVyeSh0bC5mRik6KDAsdGwuZkYpKGUpKTtmdW5jdGlvbiBlSShlKXtsZXR7Z3JvdXA6dCxsYXN0Q2hhdE1lZGlhVmlkZW9NZXNzYWdlOm4saXNQcmV2aWV3OnI9ITEsbGlzdFdyYXBwZXJXaWR0aDppPTB9PWU7Y29uc3RbYSxzXT0oMCxkLnVzZVN0YXRlKSgpLFtjLGxdPSgwLGQudXNlU3RhdGUpKCksdT0oMCxkLnVzZU1lbW8pKCgoKT0+S18odC5tZXNzYWdlcyxpKSksW3QubWVzc2FnZXMsaV0pO3JldHVybigwLG8uWikoXCJkaXZcIix7fSx2b2lkIDAsKDAsby5aKShKXyx7aXNQcmV2aWV3OnIsZ3JvdXA6dCxob3ZlcmVkTWVzc2FnZTphLGhvdmVyZWRBY3Rpb25MYWJlbDpjfSksKDAsby5aKShcInVsXCIse2NsYXNzTmFtZTpZXy5tZXNzYWdlR3JvdXBMaXN0fSx2b2lkIDAsdS5tYXAoKChlLHQpPT57Y29uc3QgaT17aXNQcmV2aWV3OnIsc2V0SG92ZXJlZE1lc3NhZ2U6cyxzZXRIb3ZlcmVkQWN0aW9uTGFiZWw6bH0sYT0kXyh1W3QtMV0pLGM9JF8odVt0KzFdKTtpZihBcnJheS5pc0FycmF5KGUpKXtjb25zdCB0PWUubWFwKChlPT5lLmRlc2NyaXB0b3IubWVzc2FnZUlkLnRvU3RyaW5nKCkpKS5qb2luKFwiLlwiKSxyPWUuZXZlcnkodGwuZkYpO3JldHVybigwLG8uWikoXCJsaVwiLHt9LHQsKDAscS5qc3gpKFdfLHthbGxNZXNzYWdlc1NhdmVkOnIsbGFzdENoYXRNZWRpYVZpZGVvTWVzc2FnZTpuLG1lc3NhZ2VzOmUsc3RhcnRTYXZlQmxvY2s6ciYmIWEsZW5kU2F2ZUJsb2NrOnImJiFjLC4uLml9KSl9cmV0dXJuKDAsby5aKShcImxpXCIse30sZS5kZXNjcmlwdG9yLm1lc3NhZ2VJZC50b1N0cmluZygpLCgwLHEuanN4KShCXyx7bWVzc2FnZTplLGF1dG9QbGF5OmUuZGVzY3JpcHRvci5tZXNzYWdlSWQ9PT1uLHN0YXJ0U2F2ZUJsb2NrOigwLHRsLmZGKShlKSYmIWEsZW5kU2F2ZUJsb2NrOigwLHRsLmZGKShlKSYmIWMsLi4uaX0pKX0pKSkpfWNvbnN0IHRJPXttZXNzYWdlOlwib3FWc05cIixjb250YWluZXI6XCJIdHM5alwifTtmdW5jdGlvbiBuSSgpe2NvbnN0e3JlcGx5TWVzc2FnZTplLGNsZWFyUmVwbHk6dCxhd2F5Om4sc2NyZWVuc2hvdERldGVjdGVkOnJ9PXpsKCksaT0oMCxkLnVzZVJlZikobnVsbCk7aWYobmYoaSxyKSwhZXx8bnx8ZS5tZXNzYWdlQ29udGVudD8uY29udGVudFR5cGU9PT1QZS56Yy5TTkFQJiYwPT09ZS5tZXRhZGF0YS5zYXZlZEJ5Lmxlbmd0aClyZXR1cm4gbnVsbDtjb25zdCBhPXtzZW5kZXJJZDplLnNlbmRlcklkLG1lc3NhZ2VzOltlXSxpc1N0YXR1c01lc3NhZ2U6ITEsZmFpbGVkVG9TZW5kOiExLGRhdGVTdHJpbmc6XCJcIn07cmV0dXJuKDAscS5qc3gpKFwiZGl2XCIse3JlZjppLGNsYXNzTmFtZTp0SS5jb250YWluZXIsY2hpbGRyZW46KDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6dEkubWVzc2FnZX0sdm9pZCAwLCgwLG8uWikoeGQse29uQ2xpY2s6dH0pLCgwLG8uWikoZUkse2lzUHJldmlldzohMCxncm91cDphfSkpfSl9dmFyIHJJLGlJLG9JLGFJLHNJO2NvbnN0IGNJPSgwLHBkLndxKSgpLGxJPWU9PmUubWVzc2FnaW5nLnNlbmRUZXh0TWVzc2FnZSx1ST1lPT5lLm1lc3NhZ2luZy5zZW5kTWVkaWFNZXNzYWdlLGRJPWU9PmUubWVzc2FnaW5nLnNlbmRUeXBpbmdOb3RpZmljYXRpb24sZkk9ZT0+ZS5tZXNzYWdpbmcudXBkYXRlRHJhZnRNZXNzYWdlLHBJPWU9PnQ9PnQubWVzc2FnaW5nLmRyYWZ0ZWRNZXNzYWdlLmdldChlKT8/XCJcIixtST1lPT5lLm1lc3NhZ2luZy5kZWxldGVEcmFmdE1lc3NhZ2U7ZnVuY3Rpb24gaEkoZSx0LG4scil7Y29uc3QgaT1lLnNwbGl0KGNJKSxvPVtdO2ZvcihsZXQgZT0wO2U8aS5sZW5ndGg7ZSsrKWlmKGlbZV0mJm8ucHVzaChpW2VdKSx0W2VdKXtjb25zdCBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpLGE9bi5maW5kKChuPT5uLm11dGFibGVfdXNlcm5hbWU9PT10W2VdLnN1YnN0cigxKSkpO2lmKGE/LnVzZXJfaWQpe2NvbnN0IGU9ci5nZXQoYS51c2VyX2lkKTtlJiYoaS5zdHlsZS5jb2xvcj1lLGkuc3R5bGUuZm9udFdlaWdodD1cIjYwMFwiKX1pLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRbZV0pKSxvLnB1c2goaSl9cmV0dXJuIG99ZnVuY3Rpb24gdkkoZSl7bGV0e2NvbnZlcnNhdGlvbklkOnQsbWVkaWFGaWxlczpuLG9uVW5zZWxlY3RGaWxlczpyLGNvbnZlcnNhdGlvbklzRm9jdXNlZDppLHNob3dUb2FzdDphLG9uRm9jdXM6cyxwbGFjZWhvbGRlcjpjLHNldEhpZGVQcmVzZW5jZUJhcjpsLGlucHV0UmVmOnUsb25NZXNzYWdlU2VuZDpmLGhpZGVSZXBseVByZXZpZXc6cH09ZTtjb25zdCBtPSgwLG1lLlopKCksaD1XZCgpLGc9amQoKSx5PSgwLGsubykocEkodCkpLEU9KDAsay5vKShmSSksXz0oMCxrLm8pKG1JKSxbSSxTXT0oMCxkLnVzZVN0YXRlKSh5KSxUPSgwLGQudXNlUmVmKSghMSksQz1YYygpLEE9KDAsay5vKShsSSksUj0oMCxrLm8pKHVJKSx7c2V0SXNDb21wb3Npbmc6T309KDAsay5vKShUZS53QyksTj1mdW5jdGlvbihlKXtjb25zdCB0PSgwLGsubykoZEkpLG49KDAsay5vKSh0dS5PWikscj0oMCxkLnVzZVJlZikoITEpLGk9KDAsZC51c2VSZWYpKDApLFtvLGFdPSgwLGQudXNlU3RhdGUpKCksW3MsY109KDAsZC51c2VTdGF0ZSkoITEpO3JldHVybigwLGQudXNlRWZmZWN0KSgoKCk9PntpZihzJiYhci5jdXJyZW50KXRyeXtyLmN1cnJlbnQ9ITAsdChlKX1maW5hbGx5e3IuY3VycmVudD0hMX19KSxbZSxzLHRdKSwoMCxkLnVzZUVmZmVjdCkoKCgpPT4odm9pZCAwIT09byYmbihlLG8pLCgpPT5hKHZvaWQgMCkpKSxbZSxvLGEsbl0pLCgwLGQudXNlQ2FsbGJhY2spKCgoZSx0KT0+e2UubGVuZ3RoPjI/YyghMCk6MD09PWUubGVuZ3RoJiZjKCExKSwwPT09ZS5sZW5ndGg/YSh0P2V1LnJGLkZJTklTSDpldS5yRi5ERUxFVEVfQUxMKTplLmxlbmd0aDxpLmN1cnJlbnQ/YShldS5yRi5ERUxFVEUpOmEoZXUuckYuVFlQSU5HKSxpLmN1cnJlbnQ9ZS5sZW5ndGh9KSxbXSl9KHQpLHtyZXBseU1lc3NhZ2U6dyxjbGVhclJlcGx5OkR9PXpsKCksW1AsTV09KDAsZC51c2VTdGF0ZSkobnVsbCksW0wsVV09KDAsZC51c2VTdGF0ZSkoITEpLHg9KDAsZC51c2VSZWYpKG51bGwpLEY9dXx8eCxbQl09KDAsbWQuYkcpKCksW1YsR109WWwoKSxbSCxXXT0oMCxkLnVzZVN0YXRlKSghMSkse2lzTGlnaHRib3hPcGVuOmosY2xvc2VMaWdodGJveDpafT1uZCgpLFt6LEtdPSgwLGQudXNlU3RhdGUpKDApLFk9KDAsZC51c2VNZW1vKSgoKCk9PigwLFRlLnhvKSh0KSksW3RdKSxYPSgwLGsubykoWSksSj1HbCh0KSxbJCxlZV09KDAsZC51c2VTdGF0ZSkoITEpLFt0ZV09ZWYoKSxbbmUscmVdPSgwLGQudXNlU3RhdGUpKCExKSxpZT1JLmxlbmd0aCtuLmxlbmd0aD4wOyRkKCgwLGQudXNlQ2FsbGJhY2spKCgoKT0+e2VlKCExKSxiKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcImVtb2ppX3BpY2tlcl9tb2RhbF9jbG9zZWRfd2l0aG91dF9lbW9qaVwifSl9KSxbZWVdKSkscHUoaWUpLCgwLGQudXNlRWZmZWN0KSgoKCk9Pnt0ZSYmZWUoITEpfSksW3RlXSksKDAsZC51c2VFZmZlY3QpKCgoKT0+e2lmKFwiXCIhPT1JKXtjb25zdCBlPUkubWF0Y2goY0kpO2lmKGUpe2NvbnN0IHQ9aEkoSSxlLFgsSik7Ri5jdXJyZW50Py5yZXBsYWNlQ2hpbGRyZW4oLi4udCxcIlwiKX1lbHNlIEYuY3VycmVudD8ucmVwbGFjZUNoaWxkcmVuKEksXCJcIil9fSksW10pLCgwLGQudXNlRWZmZWN0KSgoKCk9PntPKGllKX0pLFtPLGllXSksKDAsZC51c2VFZmZlY3QpKCgoKT0+e0YuY3VycmVudCYmaSYmIWZ1bmN0aW9uKCl7aWYoIWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpcmV0dXJuITE7aWYoXCJpbnB1dFwiIT09ZG9jdW1lbnQuYWN0aXZlRWxlbWVudC50YWdOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCkpcmV0dXJuITE7Y29uc3QgZT1kb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZShcInR5cGVcIik7cmV0dXJuIG51bGw9PT1lfHxcInRleHRcIj09PWV9KCkmJkYuY3VycmVudC5mb2N1cygpfSksW2ksRl0pLCgwLGQudXNlRWZmZWN0KSgoKCk9Pntjb25zdCBlPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtpZihGLmN1cnJlbnQmJmUpe2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtpZigwPT09Ri5jdXJyZW50LmNoaWxkTm9kZXMubGVuZ3RoKXQuc2V0U3RhcnQoRi5jdXJyZW50LDApLHQuc2V0RW5kKEYuY3VycmVudCwwKTtlbHNle2NvbnN0IGU9Ri5jdXJyZW50LmNoaWxkTm9kZXM7dC5zZXRTdGFydChlW2UubGVuZ3RoLTFdLDApfWUucmVtb3ZlQWxsUmFuZ2VzKCksZS5hZGRSYW5nZSh0KX19KSxbRl0pO2NvbnN0IG9lPVA/LnRleHRDb250ZW50Py50b1VwcGVyQ2FzZSgpO2xldCBhZTtvZT8uc3RhcnRzV2l0aChcIkBcIikmJihhZT1vZS5zdWJzdHIoMSkpO2NvbnN0IHNlPSgwLGQudXNlTWVtbykoKCgpPT57aWYodm9pZCAwPT09YWUpcmV0dXJuKDAsaGQub3cpKCk7Y29uc3QgZT1YLmZpbHRlcigoZT0+ZnVuY3Rpb24oZSx0KXtjb25zdCBuPVtlLm11dGFibGVfdXNlcm5hbWUsZS5kaXNwbGF5X25hbWUsZS5kaXNwbGF5LGUudXNlcm5hbWVdLHI9dC50b1VwcGVyQ2FzZSgpO3JldHVybiBuLmZpbmQoKGU9PiEhZSYmZS50b1VwcGVyQ2FzZSgpLnN0YXJ0c1dpdGgocikpKX0oZSxhZXx8XCJcIikpKTtyZXR1cm4gb2QoKShlLChlPT5lLm5hbWV8fGUudXNlcm5hbWUpKX0pLFthZSxYXSk7KDAsZC51c2VFZmZlY3QpKCgoKT0+e2wmJihzZS5sZW5ndGg+MD9sKCEwKTpsKCExKSl9KSxbc2UsbF0pO2NvbnN0IGNlPWFzeW5jIGU9PntlLnByZXZlbnREZWZhdWx0KCk7dHJ5e2lmKG4ubGVuZ3RoJiYocihuKSxhd2FpdCBSKHQsbikpLDA9PT1JLmxlbmd0aClyZXR1cm47UyhcIlwiKSxfKHQpLFYubGVuZ3RoJiZiKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcImZlZWRfc2VhcmNoX3Jlc3VsdF9tZXNzYWdlX3NlbnRcIn0pLEcoXCJcIiksdyYmRCgpLFUoITApLEYuY3VycmVudD8ucmVwbGFjZUNoaWxkcmVuKFwiXCIpLE0obnVsbCk7Y29uc3QgZT13P3ttZXNzYWdlSWQ6dy5kZXNjcmlwdG9yLm1lc3NhZ2VJZCxpbml0aWF0aW9uVHlwZTpcIk1FU1NBR0VfQUNUSU9OX01FTlVcIixBbmFseXRpY3NNZXNzYWdlSWQ6dy5tZXNzYWdlQW5hbHl0aWNzLmFuYWx5dGljc01lc3NhZ2VJZHx8XCJcIn06dm9pZCAwO2IoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwibWVzc2FnaW5nLnNlbmRfc3RhcnRpbmdcIn0pLGF3YWl0IEEodCxJLGUpLGY/LighMCksKDAsZnUuR04pKGZ1LiR1LkNoYXRTZW50LEIpLE4oXCJcIiwhMCksVSghMSl9Y2F0Y2goZSl7Y29uc3QgdD1lIGluc3RhbmNlb2YgVGYuS2Q7YT8uKHtrZXk6XCJjb252ZXJzYXRpb24tc2VuZGluZy1lcnJvclwiLHR5cGU6UWQuTmVnYXRpdmUsdGltZW91dDo1ZTMsY29udGVudDp0P3JJfHwockk9KDAsby5aKSh2Llose2lkOlwieStLQUF5XCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJTb21ldGhpbmcgd2VudCB3cm9uZy4gUGxlYXNlIHRyeSBhbm90aGVyIGltYWdlIG9yIHRyeSBhZ2FpbiBsYXRlclwifV19KSk6aUl8fChpST0oMCxvLlopKHYuWix7aWQ6XCJTa1RBKzZcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkNvdWxkIG5vdCBzZW5kIG1lc3NhZ2VcIn1dfSkpfSksUyhJKSxVKCExKSxmPy4oITEpfX0sbGU9KCk9Pnt9LHVlPSgwLGQudXNlQ2FsbGJhY2spKCgoKT0+e2NvbnN0IGU9Ri5jdXJyZW50LHQ9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSxuPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtpZihlJiZuKXtpZigwPT09eilyZXR1cm4gdm9pZCBlLmZvY3VzKCk7Y29uc3Qgcj1lLmNoaWxkTm9kZXM7bGV0IGk9eixvPTA7Zm9yKGNvbnN0IGUgb2Ygcil7Y29uc3QgdD1lLnRleHRDb250ZW50fHxcIlwiO2lmKGk8PXQubGVuZ3RoKWJyZWFrO2ktPXQubGVuZ3RoLG8rK31jb25zdCBhPXJbb10uaGFzQ2hpbGROb2RlcygpP3Jbb10uZmlyc3RDaGlsZDpyW29dO2EmJnQuc2V0U3RhcnQoYSxpKSxuLnJlbW92ZUFsbFJhbmdlcygpLG4uYWRkUmFuZ2UodCksZS5mb2N1cygpfX0pLFt6LEZdKSxkZT0oKT0+e2NvbnN0IGU9Ri5jdXJyZW50O2lmKCFlfHxULmN1cnJlbnQpcmV0dXJuIHZvaWQgTShudWxsKTtjb25zdCBuPXdpbmRvdy5nZXRTZWxlY3Rpb24oKSxyPW4/LmZvY3VzTm9kZTtsZXQgaT0wLG89bj8uZm9jdXNPZmZzZXR8fDA7aWYocil7Y29uc3QgdD1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO3Quc2V0U3RhcnQoZSwwKSx0LnNldEVuZChyLG8pLGk9dC5jbG9uZUNvbnRlbnRzKCkudGV4dENvbnRlbnQ/Lmxlbmd0aHx8MH1jb25zdCBhPWUuaW5uZXJUZXh0fHxcIlwiOyhlPT57UyhlKSxOKGUpLEUodCxlKX0pKGEpO2NvbnN0IHM9YS5tYXRjaChjSSk7aWYoIXMpcmV0dXJuIHZvaWQgTShudWxsKTtjb25zdCBjPWhJKGEscyxYLEopO2lmKGUucmVwbGFjZUNoaWxkcmVuKC4uLmMpLG4pe2xldCB0PTAscj0wO2Zvcihjb25zdCBlIG9mIGMpe2xldCBuPVwiXCI7aWYobj1cInN0cmluZ1wiPT10eXBlb2YgZT9lOmUudGV4dENvbnRlbnR8fFwiXCIsdCtuLmxlbmd0aD49aSl7bz1pLXQsTShcIm9iamVjdFwiPT10eXBlb2YgZT9lOm51bGwpO2JyZWFrfXIrKyx0Kz1uLmxlbmd0aH1sZXQgYT1lLmNoaWxkTm9kZXNbcl07YT1hLmZpcnN0Q2hpbGR8fGE7Y29uc3Qgcz1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO3Muc2V0U3RhcnQoYSxvKSxzLnNldEVuZChhLG8pLG4ucmVtb3ZlQWxsUmFuZ2VzKCksbi5hZGRSYW5nZShzKX19OygwLGQudXNlRWZmZWN0KSgoKCk9PntuZSYmKHVlKCkscmUoITEpLGVlKCExKSl9KSxbbmUsdWVdKTtjb25zdCBmZT1lPT57Y29uc3QgdD13aW5kb3cuZ2V0U2VsZWN0aW9uKCksbj1QPy5maXJzdENoaWxkO2lmKHQmJm4mJmUubXV0YWJsZV91c2VybmFtZSl7bi50ZXh0Q29udGVudD1gQCR7ZS5tdXRhYmxlX3VzZXJuYW1lfWA7Y29uc3Qgcj1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO2lmKG4ucGFyZW50Tm9kZT8ucGFyZW50Tm9kZT8ubGFzdENoaWxkPT09bi5wYXJlbnROb2RlKXtjb25zdCBlPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXHUwMGEwXCIpO24uYWZ0ZXIoZSksci5zZXRTdGFydChlLDEpLHIuc2V0RW5kKGUsMSl9ZWxzZXtjb25zdCBlPW4udGV4dENvbnRlbnQubGVuZ3RoO3Iuc2V0U3RhcnQobixlKSxyLnNldEVuZChuLGUpfXQucmVtb3ZlQWxsUmFuZ2VzKCksdC5hZGRSYW5nZShyKSxkZSgpfX0scGU9ZT0+e2xldCB0PSExO2Zvcihjb25zdCByIG9mIGUpT2JqZWN0LmtleXMoZWwuRWcpLmluY2x1ZGVzKHIudHlwZSk/ci5zaXplPmVsLiRZPygwLHRsLkxzKShyLFwidG9vX2xhcmdlXCIpOih0PSEwLG4ucHVzaChyKSwoMCx0bC5McykocixcInN1Y2Nlc3NcIikpOigwLHRsLkxzKShyLFwibm90X3N1cHBvcnRlZFwiKTtyZXR1cm4gdH0saGU9Qm9vbGVhbihJfHxuLmxlbmd0aCk/KDAsby5aKSh4cy5idXR0b24se29uQ2xpY2s6Y2UsaW5pdGlhbDp7b3BhY2l0eTowLHg6aD9cIjcwJVwiOlwiLTcwJVwifSxhbmltYXRlOntvcGFjaXR5OjEseDowfSxleGl0OntvcGFjaXR5OjAseDpoP1wiNzAlXCI6XCItNzAlXCJ9LGNsYXNzTmFtZTooMCxRLlopKE9mLnJpZ2h0Q29udGVudCxPZi5zZW5kQnRuKSxkaXNhYmxlZDpMfSx2b2lkIDAsKDAsby5aKSh6ZCx7Y2xhc3NOYW1lOk9mLnNlbmRJY29ufSkpOkg/KDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6KDAsUS5aKShPZi5yaWdodENvbnRlbnQsT2YuZHJhZ0FuZERyb3BUZXh0KX0sdm9pZCAwLG9JfHwob0k9KDAsby5aKSh2Llose2lkOlwiaUlUMU1WXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJEcmFnICYgZHJvcCB0byB1cGxvYWRcIn1dfSkpKTp2b2lkIDAsdmU9KDAsZC51c2VSZWYpKG51bGwpO3JldHVybigwLHEuanN4cykocS5GcmFnbWVudCx7Y2hpbGRyZW46WygwLG8uWikoa2Yse3VzZXJzOnNlLG9uU2VsZWN0OmZlLGNvbnZlcnNhdGlvbklkOnR9KSwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpPZi5jb21wb3NlckJhcn0sdm9pZCAwLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOk9mLmlucHV0V3JhcHBlcn0sdm9pZCAwLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOigwLFEuWikoT2YuaW5wdXRCYXIsT2YuYm9yZGVyT3V0bGluZUlucHV0LCFpJiZPZi5wcml2YWN5KX0sdm9pZCAwLCFwJiYoYUl8fChhST0oMCxvLlopKG5JLHt9KSkpLCgwLG8uWikoVmQse21lZGlhRmlsZXM6bixvblVuc2VsZWN0RmlsZXM6cn0pLCgwLHEuanN4KShcImRpdlwiLHtvbktleVVwOmxlLG9uQ2xpY2s6bGUscm9sZTpcInRleHRib3hcIixyZWY6RixkaXI6ZyxjbGFzc05hbWU6T2YuY29tcG9zZXIsY29udGVudEVkaXRhYmxlOiEwLG9uUGFzdGU6ZT0+e2lmKGUucHJldmVudERlZmF1bHQoKSxwZShlLmNsaXBib2FyZERhdGEuZmlsZXMpKXJldHVybiB2b2lkIGRlKCk7Y29uc3QgdD1lLmNsaXBib2FyZERhdGEuZ2V0RGF0YShcInRleHQvcGxhaW5cIiksbj13aW5kb3cuZ2V0U2VsZWN0aW9uKCk7biYmKG4uZ2V0UmFuZ2VBdCgwKS5kZWxldGVDb250ZW50cygpLGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiaW5zZXJ0VGV4dFwiLCExLHQpLGRlKCkpfSxvbklucHV0OmRlLG9uS2V5RG93bjplPT57VC5jdXJyZW50fHwoc2UubGVuZ3RoPjAmJihcIlRhYlwiPT09ZS5jb2RlfHxcIkVudGVyXCI9PT1lLmNvZGV8fFwiTnVtcGFkRW50ZXJcIj09PWUuY29kZSk/KGUucHJldmVudERlZmF1bHQoKSxmZShzZVswXSkpOlwiRW50ZXJcIiE9PWUuY29kZSYmXCJOdW1wYWRFbnRlclwiIT09ZS5jb2RlfHxlLnNoaWZ0S2V5P1wiRXNjYXBlXCI9PT1lLmNvZGUmJmomJiFJJiZaKCk6Y2UoZSkpfSxvbkNvbXBvc2l0aW9uU3RhcnQ6KCk9PntULmN1cnJlbnQ9ITB9LG9uQ29tcG9zaXRpb25FbmQ6KCk9PntULmN1cnJlbnQ9ITEsZGUoKX0sb25Gb2N1czooKT0+e3M/LigpLFcoITApfSxvbkJsdXI6KCk9PntXKCExKX0scGxhY2Vob2xkZXI6Y3x8bS5mb3JtYXRNZXNzYWdlKHtpZDpcImkwbitWcFwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiU2VuZCBhIGNoYXRcIn1dfSksc3R5bGU6e2NhcmV0Q29sb3I6Si5nZXQoQyl9fSksKDAsby5aKShmZCx7fSx2b2lkIDAsaGUpKSksITEsKDAsby5aKShQZCx7Y2xhc3NOYW1lOigwLFEuWikoT2YudXBsb2FkSW1hZ2VJY29uLE9mLmJvcmRlck91dGxpbmVJbnB1dCwhaSYmT2YucHJpdmFjeSksb25DbGljazooKT0+e251bGwhPT12ZS5jdXJyZW50JiZ2ZS5jdXJyZW50LmNsaWNrKCl9fSx2b2lkIDAsKDAscS5qc3gpKFwiaW5wdXRcIix7cmVmOnZlLHR5cGU6XCJmaWxlXCIsbmFtZTpcInVwbG9hZEltYWdlc1wiLG9uQ2hhbmdlOmU9Pntjb25zdCB0PWUuY3VycmVudFRhcmdldC5maWxlcztudWxsIT09dCYmcGUodCkmJmRlKCksdmUuY3VycmVudCYmKHZlLmN1cnJlbnQudmFsdWU9XCJcIil9LGhpZGRlbjohMH0pLHNJfHwoc0k9KDAsby5aKShYZCx7fSkpKSksITFdfSl9QygpLmdldExvZ2dlcihcIk1lc3NhZ2VDb21wb3NlclwiKTtjb25zdCBnST1lPT50PT4oKGUsdCk9PnQ/ZS5yZXBseS5yZXBseU1lc3NhZ2VCeUNvbnZlcnNhdGlvbklkLmdldCh0KTp2b2lkIDApKHQsZSkseUk9ZT0+ZS5yZXBseS5zZXRSZXBseU1lc3NhZ2U7ZnVuY3Rpb24gRUkoZSl7Y29uc3QgdD0oMCxrLm8pKGdJKGUpKSxuPSgwLGsubykoeUkpO3JldHVybntyZXBseU1lc3NhZ2U6dCxzZXRSZXBseTp0PT57ZSYmbihlLHQpfSxjbGVhclJlcGx5OigpPT57ZSYmbihlKX19fWZ1bmN0aW9uIF9JKGUpe2xldHtjaGlsZHJlbjp0LGF3YXk6bixzY3JlZW5zaG90RGV0ZWN0ZWQ6cixmb2N1c01lc3NhZ2VDb21wb3NlcjppLHVzZVJlcGx5U3RvcmU6YT0hMSxjb252ZXJzYXRpb25JZDpzfT1lO2NvbnN0W2MsbF09KDAsZC51c2VTdGF0ZSkoKSx7cmVwbHlNZXNzYWdlOnUsc2V0UmVwbHk6ZixjbGVhclJlcGx5OnB9PUVJKHMpLG09KDAsZC51c2VNZW1vKSgoKCk9Pih7cmVwbHlNZXNzYWdlOmMsc2V0UmVwbHk6bCxjbGVhclJlcGx5OigpPT5sKHZvaWQgMCksYXdheTpuLHNjcmVlbnNob3REZXRlY3RlZDpyLGZvY3VzTWVzc2FnZUNvbXBvc2VyOml9KSksW2MsbCxuLHIsaV0pLGg9KDAsZC51c2VNZW1vKSgoKCk9Pih7cmVwbHlNZXNzYWdlOnUsc2V0UmVwbHk6ZixjbGVhclJlcGx5OnAsYXdheTpuLHNjcmVlbnNob3REZXRlY3RlZDpyLGZvY3VzTWVzc2FnZUNvbXBvc2VyOml9KSksW3UsZixwLG4scixpXSksdj0oMCxkLnVzZVJlZikodSk7cmV0dXJuKDAsZC51c2VFZmZlY3QpKCgoKT0+e2EmJnYuY3VycmVudCE9PXUmJih2LmN1cnJlbnQ9dSxpKCkpfSksW2ksdSxhXSksYT8oMCxvLlopKFVsLlByb3ZpZGVyLHt2YWx1ZTpofSx2b2lkIDAsdCk6KDAsby5aKShVbC5Qcm92aWRlcix7dmFsdWU6bX0sdm9pZCAwLHQpfWZ1bmN0aW9uIElJKCl7cmV0dXJuIElJPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sSUkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBTST1bXCJzaGlmdFwiLFwiYWx0XCIsXCJtZXRhXCIsXCJtb2RcIixcImN0cmxcIl0sYkk9e2VzYzpcImVzY2FwZVwiLHJldHVybjpcImVudGVyXCIsXCIuXCI6XCJwZXJpb2RcIixcIixcIjpcImNvbW1hXCIsXCItXCI6XCJzbGFzaFwiLFwiIFwiOlwic3BhY2VcIixcImBcIjpcImJhY2txdW90ZVwiLFwiI1wiOlwiYmFja3NsYXNoXCIsXCIrXCI6XCJicmFja2V0cmlnaHRcIixTaGlmdExlZnQ6XCJzaGlmdFwiLFNoaWZ0UmlnaHQ6XCJzaGlmdFwiLEFsdExlZnQ6XCJhbHRcIixBbHRSaWdodDpcImFsdFwiLE1ldGFMZWZ0OlwibWV0YVwiLE1ldGFSaWdodDpcIm1ldGFcIixPU0xlZnQ6XCJtZXRhXCIsT1NSaWdodDpcIm1ldGFcIixDb250cm9sTGVmdDpcImN0cmxcIixDb250cm9sUmlnaHQ6XCJjdHJsXCJ9O2Z1bmN0aW9uIFRJKGUpe3JldHVybihiSVtlXXx8ZSkudHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgva2V5fGRpZ2l0fG51bXBhZHxhcnJvdy8sXCJcIil9ZnVuY3Rpb24gQ0koZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9XCIsXCIpLGUuc3BsaXQodCl9ZnVuY3Rpb24gQUkoZSx0LG4pe3ZvaWQgMD09PXQmJih0PVwiK1wiKTt2YXIgcj1lLnRvTG9jYWxlTG93ZXJDYXNlKCkuc3BsaXQodCkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gVEkoZSl9KSk7cmV0dXJuIElJKHt9LHthbHQ6ci5pbmNsdWRlcyhcImFsdFwiKSxjdHJsOnIuaW5jbHVkZXMoXCJjdHJsXCIpfHxyLmluY2x1ZGVzKFwiY29udHJvbFwiKSxzaGlmdDpyLmluY2x1ZGVzKFwic2hpZnRcIiksbWV0YTpyLmluY2x1ZGVzKFwibWV0YVwiKSxtb2Q6ci5pbmNsdWRlcyhcIm1vZFwiKX0se2tleXM6ci5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFTSS5pbmNsdWRlcyhlKX0pKSxkZXNjcmlwdGlvbjpufSl9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50JiYoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwoZnVuY3Rpb24oZSl7dm9pZCAwIT09ZS5rZXkmJmtJKFtUSShlLmtleSksVEkoZS5jb2RlKV0pfSkpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLChmdW5jdGlvbihlKXt2b2lkIDAhPT1lLmtleSYmT0koW1RJKGUua2V5KSxUSShlLmNvZGUpXSl9KSkpLFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLChmdW5jdGlvbigpe1JJLmNsZWFyKCl9KSk7dmFyIFJJPW5ldyBTZXQ7ZnVuY3Rpb24ga0koZSl7dmFyIHQ9QXJyYXkuaXNBcnJheShlKT9lOltlXTtSSS5oYXMoXCJtZXRhXCIpJiZSSS5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4hZnVuY3Rpb24oZSl7cmV0dXJuIFNJLmluY2x1ZGVzKGUpfShlKSYmUkkuZGVsZXRlKGUudG9Mb3dlckNhc2UoKSl9KSksdC5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gUkkuYWRkKGUudG9Mb3dlckNhc2UoKSl9KSl9ZnVuY3Rpb24gT0koZSl7dmFyIHQ9QXJyYXkuaXNBcnJheShlKT9lOltlXTtcIm1ldGFcIj09PWU/UkkuY2xlYXIoKTp0LmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBSSS5kZWxldGUoZS50b0xvd2VyQ2FzZSgpKX0pKX1mdW5jdGlvbiBOSShlLHQpe3ZhciBuPWUudGFyZ2V0O3ZvaWQgMD09PXQmJih0PSExKTt2YXIgcj1uJiZuLnRhZ05hbWU7cmV0dXJuIHQgaW5zdGFuY2VvZiBBcnJheT9Cb29sZWFuKHImJnQmJnQuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9Mb3dlckNhc2UoKT09PXIudG9Mb3dlckNhc2UoKX0pKSk6Qm9vbGVhbihyJiZ0JiYhMD09PXQpfXZhciB3ST1mdW5jdGlvbihlLHQsbil7dm9pZCAwPT09biYmKG49ITEpO3ZhciByLGksbz10LmFsdCxhPXQubWV0YSxzPXQubW9kLGM9dC5zaGlmdCxsPXQuY3RybCx1PXQua2V5cyxkPWUua2V5LGY9ZS5jb2RlLHA9ZS5jdHJsS2V5LG09ZS5tZXRhS2V5LGg9ZS5zaGlmdEtleSx2PWUuYWx0S2V5LGc9VEkoZikseT1kLnRvTG93ZXJDYXNlKCk7aWYoIW4pe2lmKG89PT0hdiYmXCJhbHRcIiE9PXkpcmV0dXJuITE7aWYoYz09PSFoJiZcInNoaWZ0XCIhPT15KXJldHVybiExO2lmKHMpe2lmKCFtJiYhcClyZXR1cm4hMX1lbHNle2lmKGE9PT0hbSYmXCJtZXRhXCIhPT15JiZcIm9zXCIhPT15KXJldHVybiExO2lmKGw9PT0hcCYmXCJjdHJsXCIhPT15JiZcImNvbnRyb2xcIiE9PXkpcmV0dXJuITF9fXJldHVybiEoIXV8fDEhPT11Lmxlbmd0aHx8IXUuaW5jbHVkZXMoeSkmJiF1LmluY2x1ZGVzKGcpKXx8KHU/KHI9dSx2b2lkIDA9PT1pJiYoaT1cIixcIiksKEFycmF5LmlzQXJyYXkocik/cjpyLnNwbGl0KGkpKS5ldmVyeSgoZnVuY3Rpb24oZSl7cmV0dXJuIFJJLmhhcyhlLnRyaW0oKS50b0xvd2VyQ2FzZSgpKX0pKSk6IXUpfSxEST0oMCxkLmNyZWF0ZUNvbnRleHQpKHZvaWQgMCksUEk9ZnVuY3Rpb24oKXtyZXR1cm4oMCxkLnVzZUNvbnRleHQpKERJKX07ZnVuY3Rpb24gTUkoZSx0KXtyZXR1cm4gZSYmdCYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwib2JqZWN0XCI9PXR5cGVvZiB0P09iamVjdC5rZXlzKGUpLmxlbmd0aD09PU9iamVjdC5rZXlzKHQpLmxlbmd0aCYmT2JqZWN0LmtleXMoZSkucmVkdWNlKChmdW5jdGlvbihuLHIpe3JldHVybiBuJiZNSShlW3JdLHRbcl0pfSksITApOmU9PT10fXZhciBMSSxVST0oMCxkLmNyZWF0ZUNvbnRleHQpKHtob3RrZXlzOltdLGVuYWJsZWRTY29wZXM6W10sdG9nZ2xlU2NvcGU6ZnVuY3Rpb24oKXt9LGVuYWJsZVNjb3BlOmZ1bmN0aW9uKCl7fSxkaXNhYmxlU2NvcGU6ZnVuY3Rpb24oKXt9fSkseEk9ZnVuY3Rpb24oKXtyZXR1cm4oMCxkLnVzZUNvbnRleHQpKFVJKX0sRkk9ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKSxlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX0sQkk9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz9kLnVzZUxheW91dEVmZmVjdDpkLnVzZUVmZmVjdDtmdW5jdGlvbiBWSShlLHQsbixyKXt2YXIgaT0oMCxkLnVzZVJlZikobnVsbCksbz0oMCxkLnVzZVJlZikoITEpLGE9biBpbnN0YW5jZW9mIEFycmF5P3IgaW5zdGFuY2VvZiBBcnJheT92b2lkIDA6cjpuLHM9ZSBpbnN0YW5jZW9mIEFycmF5P2Uuam9pbihudWxsPT1hP3ZvaWQgMDphLnNwbGl0S2V5KTplLGM9biBpbnN0YW5jZW9mIEFycmF5P246ciBpbnN0YW5jZW9mIEFycmF5P3I6dm9pZCAwLGw9KDAsZC51c2VDYWxsYmFjaykodCxudWxsIT1jP2M6W10pLHU9KDAsZC51c2VSZWYpKGwpO3UuY3VycmVudD1jP2w6dDt2YXIgZj1mdW5jdGlvbihlKXt2YXIgdD0oMCxkLnVzZVJlZikodm9pZCAwKTtyZXR1cm4gTUkodC5jdXJyZW50LGUpfHwodC5jdXJyZW50PWUpLHQuY3VycmVudH0oYSkscD14SSgpLmVuYWJsZWRTY29wZXMsbT1QSSgpO3JldHVybiBCSSgoZnVuY3Rpb24oKXtpZighMSE9PShudWxsPT1mP3ZvaWQgMDpmLmVuYWJsZWQpJiYoZT1wLHQ9bnVsbD09Zj92b2lkIDA6Zi5zY29wZXMsMD09PWUubGVuZ3RoJiZ0Pyhjb25zb2xlLndhcm4oJ0EgaG90a2V5IGhhcyB0aGUgXCJzY29wZXNcIiBvcHRpb24gc2V0LCBob3dldmVyIG5vIGFjdGl2ZSBzY29wZXMgd2VyZSBmb3VuZC4gSWYgeW91IHdhbnQgdG8gdXNlIHRoZSBnbG9iYWwgc2NvcGVzIGZlYXR1cmUsIHlvdSBuZWVkIHRvIHdyYXAgeW91ciBhcHAgaW4gYSA8SG90a2V5c1Byb3ZpZGVyPicpLDEpOiF0fHxlLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiB0LmluY2x1ZGVzKGUpfSkpfHxlLmluY2x1ZGVzKFwiKlwiKSkpe3ZhciBlLHQsbj1mdW5jdGlvbihlLHQpe3ZhciBuO3ZvaWQgMD09PXQmJih0PSExKSwoIU5JKGUsW1wiaW5wdXRcIixcInRleHRhcmVhXCIsXCJzZWxlY3RcIl0pfHxOSShlLG51bGw9PWY/dm9pZCAwOmYuZW5hYmxlT25Gb3JtVGFncykpJiYobnVsbCE9ZiYmbnVsbCE9Zi5pZ25vcmVFdmVudFdoZW4mJmYuaWdub3JlRXZlbnRXaGVuKGUpfHwobnVsbD09PWkuY3VycmVudHx8ZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PWkuY3VycmVudHx8aS5jdXJyZW50LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpPyhudWxsPT0obj1lLnRhcmdldCl8fCFuLmlzQ29udGVudEVkaXRhYmxlfHxudWxsIT1mJiZmLmVuYWJsZU9uQ29udGVudEVkaXRhYmxlKSYmQ0kocyxudWxsPT1mP3ZvaWQgMDpmLnNwbGl0S2V5KS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgcixpPUFJKG4sbnVsbD09Zj92b2lkIDA6Zi5jb21iaW5hdGlvbktleSk7aWYod0koZSxpLG51bGw9PWY/dm9pZCAwOmYuaWdub3JlTW9kaWZpZXJzKXx8bnVsbCE9KHI9aS5rZXlzKSYmci5pbmNsdWRlcyhcIipcIikpe2lmKHQmJm8uY3VycmVudClyZXR1cm47aWYoZnVuY3Rpb24oZSx0LG4peyhcImZ1bmN0aW9uXCI9PXR5cGVvZiBuJiZuKGUsdCl8fCEwPT09bikmJmUucHJldmVudERlZmF1bHQoKX0oZSxpLG51bGw9PWY/dm9pZCAwOmYucHJldmVudERlZmF1bHQpLCFmdW5jdGlvbihlLHQsbil7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uKGUsdCk6ITA9PT1ufHx2b2lkIDA9PT1ufShlLGksbnVsbD09Zj92b2lkIDA6Zi5lbmFibGVkKSlyZXR1cm4gdm9pZCBGSShlKTt1LmN1cnJlbnQoZSxpKSx0fHwoby5jdXJyZW50PSEwKX19KSk6RkkoZSkpKX0scj1mdW5jdGlvbihlKXt2b2lkIDAhPT1lLmtleSYmKGtJKFRJKGUuY29kZSkpLCh2b2lkIDA9PT0obnVsbD09Zj92b2lkIDA6Zi5rZXlkb3duKSYmITAhPT0obnVsbD09Zj92b2lkIDA6Zi5rZXl1cCl8fG51bGwhPWYmJmYua2V5ZG93bikmJm4oZSkpfSxjPWZ1bmN0aW9uKGUpe3ZvaWQgMCE9PWUua2V5JiYoT0koVEkoZS5jb2RlKSksby5jdXJyZW50PSExLG51bGwhPWYmJmYua2V5dXAmJm4oZSwhMCkpfSxsPWkuY3VycmVudHx8KG51bGw9PWE/dm9pZCAwOmEuZG9jdW1lbnQpfHxkb2N1bWVudDtyZXR1cm4gbC5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIixjKSxsLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsciksbSYmQ0kocyxudWxsPT1mP3ZvaWQgMDpmLnNwbGl0S2V5KS5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gbS5hZGRIb3RrZXkoQUkoZSxudWxsPT1mP3ZvaWQgMDpmLmNvbWJpbmF0aW9uS2V5LG51bGw9PWY/dm9pZCAwOmYuZGVzY3JpcHRpb24pKX0pKSxmdW5jdGlvbigpe2wucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsYyksbC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLHIpLG0mJkNJKHMsbnVsbD09Zj92b2lkIDA6Zi5zcGxpdEtleSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIG0ucmVtb3ZlSG90a2V5KEFJKGUsbnVsbD09Zj92b2lkIDA6Zi5jb21iaW5hdGlvbktleSxudWxsPT1mP3ZvaWQgMDpmLmRlc2NyaXB0aW9uKSl9KSl9fX0pLFtzLGYscF0pLGl9ZnVuY3Rpb24gR0koZSx0LG4pe3JldHVybiBWSShlLmtleUNvbWJpbmF0aW9uU3RyaW5nLHQsbixbdF0pfWZ1bmN0aW9uIEhJKCl7cmV0dXJuIEhJPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sSEkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IFdJPWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLEhJKHt3aWR0aDoxNSxoZWlnaHQ6MTQsdmlld0JveDpcIjAgMCAxNSAxNFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSxMSXx8KExJPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIk03LjE1NSAxLjcwN0ExIDEgMCAxIDEgOC41Ny4yOTNsNiA2YTEgMSAwIDAgMSAwIDEuNDE0bC02IDZhMSAxIDAgMCAxLTEuNDE0LTEuNDE0TDExLjQ0OCA4SDEuODAxYy0uNTE5IDAtLjkzOS0uNDQ4LS45MzktMSAwLS41NTMuNDItMSAuOTM5LTFoOS42NDdMNy4xNTUgMS43MDdaXCIsZmlsbDpcIiNmZmZcIn0pKSk7dmFyIGpJO2Z1bmN0aW9uIFpJKCl7cmV0dXJuIFpJPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sWkkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IHpJPWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLFpJKHt3aWR0aDoxNSxoZWlnaHQ6MTQsdmlld0JveDpcIjAgMCAxNSAxNFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSxqSXx8KGpJPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIk03Ljg0NSAxMi4yOTNhMSAxIDAgMSAxLTEuNDE0IDEuNDE0bC02LTZhMSAxIDAgMCAxIDAtMS40MTRsNi02YTEgMSAwIDEgMSAxLjQxNCAxLjQxNEwzLjU1MiA2aDkuNjQ3Yy41MTkgMCAuOTM5LjQ0OC45MzkgMSAwIC41NTMtLjQyIDEtLjkzOSAxSDMuNTUybDQuMjkzIDQuMjkzWlwiLGZpbGw6XCIjZmZmXCJ9KSkpLEtJPXt0b2FzdENvbnRhaW5lcjpcIm1QeEpRXCIsdG9hc3Q6XCJrYmdpSFwifSxZST17dG9hc3ROb3RpZmljYXRpb246XCJ0UEhROVwiLHBvc2l0aXZlOlwiQnF5VTdcIixuZXV0cmFsOlwiU1JpVEZcIixuZWdhdGl2ZTpcInYwSEVVXCJ9O2Z1bmN0aW9uIHFJKGUpe2xldHt0eXBlOnQsY2hpbGRyZW46bixjbGFzc05hbWU6cn09ZTtyZXR1cm4oMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTooMCxRLlopKFlJLnRvYXN0Tm90aWZpY2F0aW9uLHIsdD09PVFkLlBvc2l0aXZlJiZZSS5wb3NpdGl2ZSx0PT09UWQuTmVnYXRpdmUmJllJLm5lZ2F0aXZlLHQ9PT1RZC5OZXV0cmFsJiZZSS5uZXV0cmFsKX0sdm9pZCAwLG4pfWNvbnN0IFhJPXt0b3A6XCItMTAwJVwifTtmdW5jdGlvbiBRSShlKXtsZXR7YWN0aXZlVG9hc3RzOnQsdG9wT2Zmc2V0Om49MCxjbGFzc05hbWU6cn09ZTtyZXR1cm4gMD09PXQubGVuZ3RoP251bGw6KDAsby5aKShmZCx7fSx2b2lkIDAsKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6KDAsUS5aKShLSS50b2FzdENvbnRhaW5lcixyKX0sdm9pZCAwLHQubWFwKChlPT57bGV0e2tleTp0LGNvbnRlbnQ6cix0eXBlOml9PWU7cmV0dXJuKDAsby5aKSh4cy5kaXYse2NsYXNzTmFtZTpLSS50b2FzdCxpbml0aWFsOlhJLGV4aXQ6WEksYW5pbWF0ZTp7dG9wOm59LHRyYW5zaXRpb246e2R1cmF0aW9uOi4zLGVhc2U6XCJlYXNlT3V0XCJ9fSx0LCgwLG8uWikocUkse3R5cGU6aX0sdm9pZCAwLHIpKX0pKSkpfWNvbnN0IEpJPXtsaWdodGJveDpcImk1ZUlxXCIsY2Fyb3VzZWw6XCJBWU14ZFwiLGNvbnRlbnQ6XCJRWEdZelwiLGNhcm91c2VsQnV0dG9uOlwid1FIVzVcIixjb250ZW50Rm9vdGVyOlwiRnhGa0lcIixtZXNzYWdlQ29tcG9zZXI6XCJaN1k4T1wiLHJlYWN0aW9uVmlldzpcIkVUZGRBXCIscmVwbHlCb3g6XCJCSGl1UFwiLHNhdmVJbkNoYXRCdXR0b246XCJBQTJaM1wiLHRvYXN0OlwiYU5HOGRcIixjbG9zZUJ1dHRvbjpcImdFeVdsXCIsaWNvbjpcIkpQUl9vXCJ9O3ZhciAkSSxlUyx0UyxuUyxyUyxpUztmdW5jdGlvbiBvUygpe2NvbnN0IGU9KDAsRmwubykoKSxbdF09ZWYoKSxuPXRmKCkscj0oMCxkLnVzZVJlZikobnVsbCk7cmV0dXJuKDAsby5aKShfSSx7c2NyZWVuc2hvdERldGVjdGVkOnQsYXdheTpuLGZvY3VzTWVzc2FnZUNvbXBvc2VyOmZ1bmN0aW9uKCl7ci5jdXJyZW50Py5mb2N1cygpfX0sdm9pZCAwLCgwLG8uWikoYVMse3ByaXZhY3k6bixtZXNzYWdlQ29tcG9zZXJSZWY6cixjb252ZXJzYXRpb25JZDplfSkpfWZ1bmN0aW9uIGFTKGUpe2xldHtwcml2YWN5OnQsbWVzc2FnZUNvbXBvc2VyUmVmOm4sY29udmVyc2F0aW9uSWQ6cn09ZTtjb25zdCBpPSgwLGQudXNlUmVmKShudWxsKSxhPSgwLG1lLlopKCk7bmYoaSx0KTtjb25zdCBzPVhjKCksbD1abChyKSx7bmV4dDp1LHByZXZpb3VzOmYsbWVkaWFJbmZvczpwLHNlbGVjdGVkSW5kZXg6bSxtZXNzYWdlSWQ6aH09cmQoKSx7Y2xvc2VMaWdodGJveDpnfT1uZCgpLHk9R0koUmQuQ2xvc2VMaWdodGJveCxnKSxFPXFsKHIsaCksXz0oMCxrLm8pKFRlLkZHKSx7c2V0UmVwbHk6SX09emwoKSxTPSgwLE8ucnApKEEuSlgpOygwLGQudXNlRWZmZWN0KSgoKCk9PntFJiZJKEUpfSksW0UsSV0pO2NvbnN0e2FjdGl2ZVRvYXN0czpiLHNob3dUb2FzdDpULGhpZGVUb2FzdDpDfT1KZCgpLFI9KDAsZC51c2VSZWYpKDApO2lmKCFwfHxcImJpZ2ludFwiIT10eXBlb2YgaClyZXR1cm4gbnVsbDtjb25zdCBOPUJvb2xlYW4oRT8ubWV0YWRhdGEuaXNTYXZlYWJsZSksdz1Cb29sZWFuKEU/Lm1ldGFkYXRhLnNhdmVkQnkuaW5jbHVkZXMocykpLEQ9cC5sZW5ndGg+MTtyZXR1cm4oMCxxLmpzeHMpKFwiZGl2XCIse29uQ2xpY2s6Zyx0YWJJbmRleDotMSxjbGFzc05hbWU6SkkubGlnaHRib3gscmVmOmU9PntpLmN1cnJlbnQ9ZSx5JiYoeS5jdXJyZW50PWUpfSxjaGlsZHJlbjpbKDAsby5aKShRSSx7YWN0aXZlVG9hc3RzOmIsY2xhc3NOYW1lOkpJLnRvYXN0LHRvcE9mZnNldDo4fSksKDAsby5aKShQZCx7dGl0bGU6YS5mb3JtYXRNZXNzYWdlKHtpZDpcImZyWkR1YVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiQ2xvc2VcIn1dfSksY2xhc3NOYW1lOkpJLmNsb3NlQnV0dG9uLG9uQ2xpY2s6Zyxob3RrZXk6UmQuQ2xvc2VMaWdodGJveH0sdm9pZCAwLCgwLG8uWikoRWQse2NsYXNzTmFtZTpKSS5pY29ufSkpLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOkpJLmNhcm91c2VsfSx2b2lkIDAsRCYmKDAsby5aKShcImJ1dHRvblwiLHtjbGFzc05hbWU6SkkuY2Fyb3VzZWxCdXR0b24sdHlwZTpcImJ1dHRvblwiLG9uQ2xpY2s6ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKSxmKCl9LGRpc2FibGVkOjA9PT1tfSx2b2lkIDAsZVN8fChlUz0oMCxvLlopKHpJLHt9KSkpLCgwLG8uWikocHYse2NsYXNzTmFtZTpKSS5jb250ZW50LG1lZGlhSW5mb3M6cFttXSxzaXppbmdNb2RlOnR2LkxpZ2h0Ym94fSxtKSxEJiYoMCxvLlopKFwiYnV0dG9uXCIse3R5cGU6XCJidXR0b25cIixjbGFzc05hbWU6SkkuY2Fyb3VzZWxCdXR0b24sb25DbGljazpmdW5jdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigpLHUoKX0sZGlzYWJsZWQ6bT49cC5sZW5ndGgtMX0sdm9pZCAwLHRTfHwodFM9KDAsby5aKShXSSx7fSkpKSksciYmKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6SkkuY29udGVudEZvb3RlcixvbkNsaWNrOmU9PmUuc3RvcFByb3BhZ2F0aW9uKCl9LHZvaWQgMCwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpKSS5yZXBseUJveH0sdm9pZCAwLFMmJigwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOkpJLnJlYWN0aW9uVmlld30sdm9pZCAwLEUmJigwLG8uWikoTnAse21lc3NhZ2U6RSxvbkZpbmlzaFNlbGVjdGluZzpmdW5jdGlvbigpe2coKX0sYWN0aW9uT3JpZ2luOk5mLkFjdGlvbk1lbnV9KSksKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6SkkubWVzc2FnZUNvbXBvc2VyfSx2b2lkIDAsKDAsby5aKSh2SSx7Y29udmVyc2F0aW9uSWQ6cixjb252ZXJzYXRpb25Jc0ZvY3VzZWQ6IXQsbWVkaWFGaWxlczpbXSxvblVuc2VsZWN0RmlsZXM6KCk9Pm51bGwsb25NZXNzYWdlU2VuZDpmdW5jdGlvbihlKXtlP2coKTooKDAsYy51VCkoXCJGYWlsZWQgdG8gc2VuZCBtZXNzYWdlIGZyb20gbGlnaHRib3hcIiksVCh7a2V5OihSLmN1cnJlbnQrKykudG9TdHJpbmcoKSx0eXBlOlFkLk5lZ2F0aXZlLHRpbWVvdXQ6M2UzLGNvbnRlbnQ6JEl8fCgkST0oMCxvLlopKHYuWix7aWQ6XCJLZWlLRGJcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkNoYXQgZmFpbGVkIHRvIHNlbmQhXCJ9XX0pKX0pKX0saW5wdXRSZWY6bixoaWRlUmVwbHlQcmV2aWV3OiEwLHBsYWNlaG9sZGVyOmEuZm9ybWF0TWVzc2FnZSh7aWQ6XCJjR2NZMTZcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlNlbmQgYSBSZXBseSB0byBcIn0se3R5cGU6MSx2YWx1ZTpcImNvbnZlcnNhdGlvbk5hbWVcIn0se3R5cGU6MCx2YWx1ZTpcIi4uLlwifV19LHtjb252ZXJzYXRpb25OYW1lOmx9KX0pKSksRSYmTiYmKDAsby5aKShcImJ1dHRvblwiLHtjbGFzc05hbWU6Skkuc2F2ZUluQ2hhdEJ1dHRvbix0eXBlOlwiYnV0dG9uXCIsdGl0bGU6dz9hLmZvcm1hdE1lc3NhZ2Uoe2lkOlwidWh5ZUg3XCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJVbnNhdmUgaW4gQ2hhdFwifV19KTphLmZvcm1hdE1lc3NhZ2Uoe2lkOlwidkdyZUlKXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJTYXZlIGluIENoYXRcIn1dfSksb25DbGljazphc3luYygpPT57dHJ5e2F3YWl0IF8oRS5kZXNjcmlwdG9yLmNvbnZlcnNhdGlvbklkLEUuZGVzY3JpcHRvci5tZXNzYWdlSWQsdz9QZS5SNi5VTlNBVkU6UGUuUjYuU0FWRSksQyhcIm1lc3NhZ2Utc2F2ZS1zdWNjZXNzXCIpLFQoe2tleTpcIm1lc3NhZ2Utc2F2ZS1zdWNjZXNzXCIsdHlwZTpRZC5Qb3NpdGl2ZSx0aW1lb3V0OjNlMyxjb250ZW50Onc/blN8fChuUz0oMCxvLlopKHYuWix7aWQ6XCJjWURManNcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlVuc2F2ZWRcIn1dfSkpOnJTfHwoclM9KDAsby5aKSh2Llose2lkOlwiUWhUZGJpXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJTYXZlZCBpbiBDaGF0IVwifV19KSl9KX1jYXRjaChlKXsoMCxjLlRiKShlKX19fSx2b2lkIDAsaVN8fChpUz0oMCxvLlopKEtwLHt9KSkpKV19KX1DKCkuZ2V0TG9nZ2VyKFwiTGlnaHRib3hcIik7dmFyIHNTLGNTLGxTLHVTPW4oNTc3MjgpLGRTPW4oNzkxNjUpO2Z1bmN0aW9uIGZTKCl7cmV0dXJuIGZTPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sZlMuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IHBTPWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLGZTKHt3aWR0aDoxOSxoZWlnaHQ6MTksdmlld0JveDpcIjAgMCAxOSAxOVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSxzU3x8KHNTPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk0xLjk1OSAxLjQ4N0ExLjk4NiAxLjk4NiAwIDAgMCAuMzIyIDMuNzY4bDEuMTY0IDcuMDhhMS45ODQgMS45ODQgMCAwIDAgMi4yOCAxLjYzNmwyLjM1LS4zODdhNC4xOCA0LjE4IDAgMCAxIC4wMzMtLjY2N2wuNjQtNC44NzVhNC4xNDYgNC4xNDYgMCAwIDEgNC42NS0zLjU3M2wuMDM5LjAwNS0uMTY5LTEuMDI4QTEuOTg0IDEuOTg0IDAgMCAwIDkuMDI5LjMyM2wtNy4wNyAxLjE2NFptOS43MzQgMi44MDYtLjQxOC0uMDU1YTIuODggMi44OCAwIDAgMC0zLjIzIDIuNDgybC0uNjQgNC44NzVjLS4wMTMuMDk4LS4wMi4xOTYtLjAyMy4yOTRsMy40NTQtLjU3YTEuOTg2IDEuOTg2IDAgMCAwIDEuNjM3LTIuMjhsLS43OC00Ljc0NlpcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KSksY1N8fChjUz1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNOC4wNDUgNi43MmEyLjg4IDIuODggMCAwIDEgMy4yMy0yLjQ4Mmw0Ljg3LjY0YTIuODgxIDIuODgxIDAgMCAxIDIuNDggMy4yMzNsLTEuMTkxIDkuMDc0Yy0uMTI2Ljk2LTEuMzAzIDEuMzUzLTEuOTguNjZsLTIuNDY1LTIuNTI0YS4zOTUuMzk1IDAgMCAwLS4yMzItLjExNmwtMi44NzItLjM3N2EyLjg4MSAyLjg4MSAwIDAgMS0yLjQ4LTMuMjMzbC42NC00Ljg3NVptMy4wNDgtMS4xQTEuNDg4IDEuNDg4IDAgMCAwIDkuNDI1IDYuOWwtLjY0IDQuODc1YTEuNDg4IDEuNDg4IDAgMCAwIDEuMjgxIDEuNjdsMi44NzMuMzc4Yy4zOTcuMDUyLjc2NS4yMzYgMS4wNDUuNTIzbDIuMTMyIDIuMTgzIDEuMTI5LTguNmExLjQ4OCAxLjQ4OCAwIDAgMC0xLjI4MS0xLjY3bC00Ljg3LS42NFpcIixmaWxsOlwidmFyKC0tc2lnQ2hhdClcIn0pKSxsU3x8KGxTPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIk05LjQyNSA2LjkwMWExLjQ4OCAxLjQ4OCAwIDAgMSAxLjY2OC0xLjI4Mmw0Ljg3LjY0YTEuNDg4IDEuNDg4IDAgMCAxIDEuMjgyIDEuNjdsLTEuMTI5IDguNi0yLjEzMi0yLjE4MmExLjc4NiAxLjc4NiAwIDAgMC0xLjA0NS0uNTIzbC0yLjg3My0uMzc4YTEuNDg4IDEuNDg4IDAgMCAxLTEuMjgxLTEuNjdsLjY0LTQuODc1WlwiLGZpbGw6XCJ2YXIoLS1zaWdDaGF0KVwiLHN0cm9rZTpcInZhcigtLXNpZ0NoYXQpXCJ9KSkpO3ZhciBtUztmdW5jdGlvbiBoUygpe3JldHVybiBoUz1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGhTLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCB2Uz1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIixoUyh7d2lkdGg6MTYsaGVpZ2h0OjE2LHZpZXdCb3g6XCIwIDAgMTYgMTZcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksbVN8fChtUz1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNMyA0LjM1M0MzIDMuMDUzIDQuMDUzIDIgNS4zNTMgMmg1LjI5NEMxMS45NDcgMiAxMyAzLjA1MyAxMyA0LjM1M3Y5Ljg1NGEuNS41IDAgMCAxLS44MDkuMzkzTDkuMjAyIDEyLjI1QTEuMTc2IDEuMTc2IDAgMCAwIDguNDc1IDEySDUuMzUzQTIuMzUzIDIuMzUzIDAgMCAxIDMgOS42NDdWNC4zNTNaXCIsc3Ryb2tlOlwiY3VycmVudENvbG9yXCIsc3Ryb2tlV2lkdGg6MS41fSkpKTt2YXIgZ1MseVM7ZnVuY3Rpb24gRVMoKXtyZXR1cm4gRVM9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxFUy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y29uc3QgX1M9ZT0+ZC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsRVMoe3dpZHRoOjE2LGhlaWdodDoxNix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLGdTfHwoZ1M9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTExLjY3Ny44Yy4yMzIuMjU0LjMyNS42MTIuMzI1Ljk2NnY3LjAzMWMwIC4zNjItLjA5Ni43MjMtLjI1IDEuMDIyLS4xNS4yODgtLjM5LjU4Mi0uNzIyLjcyMWwtMy4zMjMgMS4zODRhLjkyNC45MjQgMCAwIDEtLjU2LjA1NS45MDUuOTA1IDAgMCAxLS40NzEtLjI3OGMtLjIzMy0uMjU1LS4zMjYtLjYxMy0uMzI2LS45NjZ2LS4xNDJINmEyLjUgMi41IDAgMCAxLTIuNS0yLjVWNy41M2EuNS41IDAgMCAxIDEgMHYuNTY0YTEuNSAxLjUgMCAwIDAgMS41IDEuNWguMzV2LTUuODljMC0uMzYyLjA5Ni0uNzIzLjI1MS0xLjAyMi4xNS0uMjg4LjM4OS0uNTgyLjcyMi0uNzIxbDEuMTA0LS40Nkg2QTEuNSAxLjUgMCAwIDAgNC41IDN2LjUxMWEuNS41IDAgMCAxLTEgMFYzQTIuNSAyLjUgMCAwIDEgNiAuNWg1YS45MDQuOTA0IDAgMCAxIC42NzcuM1ptLS43MTEuNzI2TDcuNzA3IDIuODgzYy0uMDM0LjAxNC0uMTI3LjA4NC0uMjE4LjI1OWExLjI1OCAxLjI1OCAwIDAgMC0uMTM5LjU2djcuMDMzYS43MzMuNzMzIDAgMCAwIC4wMzcuMjRsMy4yNTgtMS4zNThjLjAzNC0uMDE0LjEyOC0uMDgzLjIxOC0uMjU5LjA4Ni0uMTY0LjEzOS0uMzY4LjEzOS0uNTZWMS43NjVhLjczNC43MzQgMCAwIDAtLjAzNi0uMjRaXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSkpLHlTfHwoeVM9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwiTTEuODk4IDcuNjA1YS41LjUgMCAwIDAgLjcwNC0uNzFsLS44ODYtLjg3Nkg1YS41LjUgMCAwIDAgMC0xSDEuNjk4bC45MDctLjkxN2EuNS41IDAgMCAwLS43MS0uNzA0bC0xLjc1IDEuNzdhLjUuNSAwIDAgMCAuMDAzLjcwNmwxLjc1IDEuNzMxWlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pKSk7dmFyIElTLFNTO2Z1bmN0aW9uIGJTKCl7cmV0dXJuIGJTPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sYlMuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IFRTPWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLGJTKHt3aWR0aDoyNCxoZWlnaHQ6MjQsdmlld0JveDpcIjAgMCAyNCAyNFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSxJU3x8KElTPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIk0zLjE5NiA1LjIwMmMuMDc0LS4zOS40MjQtLjg0Ny43ODItMS4wMjNsMS41ODYtLjc3NmMuNTM1LS4yNjIgMS4zMDUtLjEyNyAxLjcxMS4zMTEgMCAwIDIuMTU1IDIuMTMxIDIuNDYzIDMuNTI3LjMwOCAxLjM5NS0xLjUgMS4yNzktMS42MDIgMi45NC0uMTAzIDEuNjYgMi4wMDIgMy45MiAyLjAwMiAzLjkyczIuNDQ0IDIuMTAzIDQuMDA2IDEuOTZjMS41Ni0uMTQ0LjgtMS4xNzcgMi40MDMtMS43NjUgMS42MDItLjU4OCA0LjA2NyAyLjM0NCA0LjA2NyAyLjM0NC40MDguNDM4LjUxIDEuMjEzLjIyMyAxLjczOWwtLjc0MiAxLjM2M2MtLjE5LjM0OC0uNjYuNzAyLTEuMDUyLjc3IDAgMC01LjU3IDEuNjI0LTExLjUwOC00LjA2LTUuOTM4LTUuNjg0LTQuMzQtMTEuMjUtNC4zNC0xMS4yNVpcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KSksU1N8fChTUz1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMTYuNDQ0IDEuNjY0YS43NjUuNzY1IDAgMCAxIDEuMjM3LjYwM3YyLjI1NWg0LjkyOGExLjM5MSAxLjM5MSAwIDAgMSAwIDIuNzgySDE3LjY4VjkuNTZhLjc2NS43NjUgMCAwIDEtMS4yMzcuNjAzTDExLjU5OCA2LjM3YS41OC41OCAwIDAgMSAwLS45MTNsNC44NDYtMy43OTNaXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSkpKTt2YXIgQ1MsQVM7ZnVuY3Rpb24gUlMoKXtyZXR1cm4gUlM9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxSUy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y29uc3Qga1M9ZT0+ZC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsUlMoe3dpZHRoOjE2LGhlaWdodDoxNix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLENTfHwoQ1M9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwiTTMuOCA4LjMyNGEyLjA5MSAyLjA5MSAwIDAgMC0xLjUxIDEuNDc5IDguMjA0IDguMjA0IDAgMCAwIDAgNC4zMTdjLjE5OC43My43NzYgMS4yOTYgMS41MSAxLjQ3OWwuMTc0LjA0NGE5LjQxIDkuNDEgMCAwIDAgNC41NjMgMGwuMTc0LS4wNDRhMi4wOTEgMi4wOTEgMCAwIDAgMS41MS0xLjQ3OSA4LjIwMyA4LjIwMyAwIDAgMCAwLTQuMzE3IDIuMDkxIDIuMDkxIDAgMCAwLTEuNTEtMS40NzlsLS4xNzQtLjA0M2E5LjQwNyA5LjQwNyAwIDAgMC00LjU2MyAwbC0uMTc1LjA0M1pNMTEuNDYgMTEuMjE3YS44NTQuODU0IDAgMCAxIC40MjUtLjc3NGwxLjQ4NS0uODUzYS40Mi40MiAwIDAgMSAuNjMuMzY1djQuMDE0YS40Mi40MiAwIDAgMS0uNjMuMzY0bC0xLjQ4NS0uODUyYS44NTMuODUzIDAgMCAxLS40MjUtLjc3NWMuMDA5LS4yNC4wMTctLjUyLjAxNy0uNzQ0IDAtLjIyNC0uMDA4LS41MDUtLjAxOC0uNzQ1WlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pKSxBU3x8KEFTPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk0xMC45NjMgMS4xMWEuNTEuNTEgMCAwIDEgLjgyNC40MDF2MS41MDNoMy4yODVhLjkyOC45MjggMCAwIDEgMCAxLjg1NWgtMy4yODV2MS41MDRhLjUxLjUxIDAgMCAxLS44MjQuNDAyTDcuNzMyIDQuMjQ3YS4zODYuMzg2IDAgMCAxIDAtLjYxbDMuMjMtMi41MjhaXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSkpKTt2YXIgT1M7ZnVuY3Rpb24gTlMoKXtyZXR1cm4gTlM9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxOUy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y29uc3Qgd1M9ZT0+ZC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsTlMoe3dpZHRoOjEyLGhlaWdodDoxMix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLE9TfHwoT1M9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwiTTMgNC4zNTNDMyAzLjA1MyA0LjA1MyAyIDUuMzUzIDJoNS4yOTRDMTEuOTQ3IDIgMTMgMy4wNTMgMTMgNC4zNTN2OS44NTRhLjUuNSAwIDAgMS0uODA5LjM5M0w5LjIwMiAxMi4yNUExLjE3NiAxLjE3NiAwIDAgMCA4LjQ3NSAxMkg1LjM1M0EyLjM1MyAyLjM1MyAwIDAgMSAzIDkuNjQ3VjQuMzUzWlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIixzdHJva2U6XCJjdXJyZW50Q29sb3JcIixzdHJva2VXaWR0aDoxLjV9KSkpO3ZhciBEUyxQUztmdW5jdGlvbiBNUygpe3JldHVybiBNUz1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LE1TLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBMUz1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIixNUyh7d2lkdGg6MTYsaGVpZ2h0OjE2LHZpZXdCb3g6XCIwIDAgMTYgMTZcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksRFN8fChEUz1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNMi4xMyAzLjQ2OGMuMDUtLjI2LjI4My0uNTY1LjUyMi0uNjgybDEuMDU3LS41MTdjLjM1Ny0uMTc1Ljg3LS4wODUgMS4xNDEuMjA3IDAgMCAxLjQzNiAxLjQyIDEuNjQyIDIuMzUxLjIwNS45My0xIC44NTMtMS4wNjggMS45NkM1LjM1NSA3Ljg5NCA2Ljc1OSA5LjQgNi43NTkgOS40czEuNjMgMS40MDIgMi42NyAxLjMwN2MxLjA0LS4wOTYuNTM0LS43ODQgMS42MDItMS4xNzYgMS4wNjgtLjM5MiAyLjcxMiAxLjU2MyAyLjcxMiAxLjU2My4yNzIuMjkxLjM0LjgwOC4xNDggMS4xNThsLS40OTUuOTA5Yy0uMTI2LjIzMi0uNDQuNDY4LS43MDEuNTEzIDAgMC0zLjcxMyAxLjA4My03LjY3Mi0yLjcwNi0zLjk1OC0zLjc4OS0yLjg5Mi03LjUtMi44OTItNy41WlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pKSxQU3x8KFBTPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk0xMi42MiA2Ljc3NWEuNTEuNTEgMCAwIDEtLjgyNC0uNDAyVjQuODdIOC41MTFhLjkyOC45MjggMCAwIDEgMC0xLjg1NWgzLjI4NVYxLjUxMWEuNTEuNTEgMCAwIDEgLjgyNS0uNDAybDMuMjMgMi41MjlhLjM4Ni4zODYgMCAwIDEgMCAuNjA5bC0zLjIzIDIuNTI4WlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pKSk7dmFyIFVTLHhTO2Z1bmN0aW9uIEZTKCl7cmV0dXJuIEZTPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sRlMuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IEJTPWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLEZTKHt3aWR0aDoxMixoZWlnaHQ6MTIsdmlld0JveDpcIjAgMCAxMiAxMlwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSxVU3x8KFVTPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIk0xLjU5OCAyLjYwMWEuODEuODEgMCAwIDEgLjM5MS0uNTExbC43OTMtLjM4OGEuNzc2Ljc3NiAwIDAgMSAuODU2LjE1NXMxLjA3NyAxLjA2NiAxLjIzIDEuNzYzYy4xNTUuNjk4LS43NDkuNjQtLjggMS40Ny0uMDUyLjgzIDEuMDAxIDEuOTYgMS4wMDEgMS45NnMxLjIyMiAxLjA1MiAyLjAwMy45OGMuNzgtLjA3MS40LS41ODggMS4yMDEtLjg4Mi44MDEtLjI5NCAyLjAzNCAxLjE3MiAyLjAzNCAxLjE3MmEuNzk3Ljc5NyAwIDAgMSAuMTEyLjg3bC0uMzcyLjY4YS44NTEuODUxIDAgMCAxLS41MjYuMzg2cy0yLjc4NS44MTItNS43NTMtMi4wM2MtMi45Ny0yLjg0Mi0yLjE3LTUuNjI1LTIuMTctNS42MjVaXCIsZmlsbDpcIiMyQzg1NjBcIn0pKSx4U3x8KHhTPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk05LjY3MiA0LjkyYS41MS41MSAwIDAgMS0uODI1LS40MDJ2LS42MzRINi4zODNhLjkyOC45MjggMCAxIDEgMC0xLjg1NWgyLjQ2NHYtLjYzNGEuNTEuNTEgMCAwIDEgLjgyNS0uNDAybDIuMTIgMS42NmEuMzg2LjM4NiAwIDAgMSAwIC42MDhMOS42NzEgNC45MlpcIixmaWxsOlwiIzJDODU2MFwifSkpKTt2YXIgVlMsR1M7ZnVuY3Rpb24gSFMoKXtyZXR1cm4gSFM9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxIUy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y29uc3QgV1M9ZT0+ZC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsSFMoe3dpZHRoOjE2LGhlaWdodDoxNix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLFZTfHwoVlM9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTEyLjYyIDYuNzc1YS41MS41MSAwIDAgMS0uODI0LS40MDJWNC44N0g4LjUxMWEuOTI4LjkyOCAwIDEgMSAwLTEuODU1aDMuMjg1VjEuNTExYS41MS41MSAwIDAgMSAuODI1LS40MDJsMy4yMyAyLjUyOWEuMzg2LjM4NiAwIDAgMSAwIC42MDlsLTMuMjMgMi41MjhaXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSkpLEdTfHwoR1M9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwiTTMuOCA4LjMyNGEyLjA5MSAyLjA5MSAwIDAgMC0xLjUxIDEuNDc5IDguMjA0IDguMjA0IDAgMCAwIDAgNC4zMTdjLjE5OC43My43NzYgMS4yOTYgMS41MSAxLjQ3OWwuMTc0LjA0NGE5LjQxIDkuNDEgMCAwIDAgNC41NjMgMGwuMTc0LS4wNDRhMi4wOTEgMi4wOTEgMCAwIDAgMS41MS0xLjQ3OSA4LjIwMyA4LjIwMyAwIDAgMCAwLTQuMzE3IDIuMDkxIDIuMDkxIDAgMCAwLTEuNTEtMS40NzlsLS4xNzQtLjA0M2E5LjQwNyA5LjQwNyAwIDAgMC00LjU2MyAwbC0uMTc1LjA0M1pNMTEuNDYgMTEuMjE3YS44NTQuODU0IDAgMCAxIC40MjUtLjc3NGwxLjQ4NS0uODUzYS40Mi40MiAwIDAgMSAuNjMuMzY1djQuMDE0YS40Mi40MiAwIDAgMS0uNjMuMzY0bC0xLjQ4NS0uODUyYS44NTMuODUzIDAgMCAxLS40MjUtLjc3NWMuMDA5LS4yNC4wMTctLjUyLjAxNy0uNzQ0IDAtLjIyNC0uMDA4LS41MDUtLjAxOC0uNzQ1WlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pKSk7dmFyIGpTLFpTO2Z1bmN0aW9uIHpTKCl7cmV0dXJuIHpTPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0selMuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IEtTPWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLHpTKHt3aWR0aDoxNixoZWlnaHQ6MTYsdmlld0JveDpcIjAgMCAxNiAxNlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLGpTfHwoalM9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwibTUuMjQgOS45NC0uMzcuMzM1LjAxOC4wMi4wMi4wMTkuMzMzLS4zNzRabTUuODIgMy42MjMtLjQ0Mi0uMjM0LjQ0Mi4yMzRabS0uMzUuMjY5LS4wOTQtLjQ5MS4wOTQuNDlabS44LTIuMjgyLS4zNjIuMzQzLjM2My0uMzQzWm0uMTE3Ljk0LjQ0Mi4yMzMtLjQ0Mi0uMjMzWk0zLjUzIDMuNTdsLS4zNzQuMzMxLjM3NC0uMzMxWm0tMS44NzYuODIyIDEuMTA1LS41NTctLjQ1LS44OTMtMS4xMDUuNTU3LjQ1Ljg5M1ptMS41MDItLjQ5Yy4yNTYuMjg4LjU4MS42NzMuODU1IDEuMDUuMjkuNDAyLjQ2Ni43Mi41MDMuODk0bC45NzgtLjIxYy0uMDg3LS40MDQtLjM4Ny0uODc3LS42NzEtMS4yNy0uMzAxLS40MTYtLjY1LS44MjgtLjkxNy0xLjEyOGwtLjc0OC42NjNabTEuMzU4IDEuOTQ0Yy4wMjIuMTAxLjAwMi4xMjgtLjAwNS4xNC0uMDI2LjA0NS0uMDc2LjA5NS0uMjE1LjIxNC0uMjU1LjIxOC0uNjk3LjU3NS0uNzQgMS4zMWwuOTk3LjA2Yy4wMTctLjI4LjE0Mi0uMzk2LjM5My0uNjEuMTE0LS4wOTguMzAyLS4yNTMuNDI4LS40NjguMTQ0LS4yNDYuMTktLjUzLjEyLS44NTZsLS45NzguMjFabS0uOTYgMS42NjVjLS4wMjIuMzU2LjA3MS43MS4xOTQgMS4wMTguMTI0LjMxMy4yOTIuNjEuNDU1Ljg2M2E3Ljc2MSA3Ljc2MSAwIDAgMCAuNjYxLjg3N2wuMDA0LjAwNC4wMDEuMDAxLjM3Mi0uMzM0LjM3LS4zMzVoLjAwMWwtLjAwMi0uMDAyYTEuOTQgMS45NCAwIDAgMS0uMDQzLS4wNSA2Ljc2IDYuNzYgMCAwIDEtLjUyMy0uNzAzIDQuMTQ2IDQuMTQ2IDAgMCAxLS4zNjctLjY5Yy0uMDk1LS4yMzgtLjEzNS0uNDM3LS4xMjYtLjU5bC0uOTk4LS4wNlpNNS4yNCA5Ljk0bC0uMzMyLjM3NC4wMDIuMDAyYTUuMjQyIDUuMjQyIDAgMCAwIDEuNzU2IDEuMTM2Yy4yOTguMTIxLjY1LjIxOC45OTguMTg1bC0uMDk0LS45OTVjLS4xMTYuMDEtLjI5My0uMDItLjUyNy0uMTE2YTQuMjYgNC4yNiAwIDAgMS0uNjktLjM3MyA3LjQ4IDcuNDggMCAwIDEtLjc4MS0uNTg3bC0uMzMyLjM3NFptMi40MjQgMS42OTdjLjI5LS4wMjcuNTM0LS4xMDQuNzMzLS4yNTMuMTkzLS4xNDUuMjk3LS4zMjYuMzU4LS40MzUuMDY5LS4xMi4xLS4xNzguMTU3LS4yMzZhLjc5Ljc5IDAgMCAxIC4zMDgtLjE4NmwtLjM1NC0uOTM1Yy0uMjk5LjExMy0uNTE1LjI2LS42NzkuNDMxLS4xNTYuMTY0LS4yNDcuMzM4LS4zLjQzMS0uMDYuMTA1LS4wNzguMTIxLS4wOS4xMy0uMDA3LjAwNS0uMDU1LjA0MS0uMjI3LjA1OGwuMDk0Ljk5NVptMS41NTYtMS4xMWMuMDE0LS4wMDUuMDgyLS4wMjEuMjQzLjAzNy4xNTYuMDU2LjM0NC4xNjEuNTUzLjMxLjQxNS4yOTcuODM1LjcwNiAxLjEzIDEuMDJsLjcyNy0uNjg4Yy0uMzEtLjMyOS0uNzgyLS43OTMtMS4yNzctMS4xNDZhMy4zODIgMy4zODIgMCAwIDAtLjc5NS0uNDM4Yy0uMjcxLS4wOTctLjYwNy0uMTU0LS45MzUtLjAzbC4zNTQuOTM1Wm0xLjk2NCAxLjcyOS0uNTY3IDEuMDczLjg4NC40NjguNTY3LTEuMDc0LS44ODQtLjQ2N1ptLS41NyAxLjA4NWMtLjc4MS4xNS0zLjczMS40ODMtNi41NjgtMi4zMThsLS43MDMuNzEyYzMuMTYgMy4xMTkgNi40OTggMi43NzMgNy40NiAyLjU4OGwtLjE4OC0uOTgyWm0tNi41NjgtMi4zMThDMS4yMiA4LjIzMyAxLjUgNS4yMTggMS42NCA0LjM5N2wtLjk4Ni0uMTdjLS4xNy45OTItLjQ2MiA0LjM5NyAyLjY5IDcuNTA4bC43MDItLjcxMlptNi41NyAyLjMwNmEuMDUuMDUgMCAwIDEtLjAxLjAxNWwuMDAyLS4wMDFhLjAzMi4wMzIgMCAwIDEgLjAwNy0uMDAybC4xODguOTgyYy4zMi0uMDYyLjU2NC0uMjcyLjY5OC0uNTI2bC0uODg0LS40NjhabS41My0xLjQzNmMuMDgzLjA4OC4xMDguMjMuMDM4LjM2M2wuODg0LjQ2N2ExLjMxMSAxLjMxMSAwIDAgMC0uMTk1LTEuNTE3bC0uNzI2LjY4N1pNMi43NiAzLjgzNWEuMzI4LjMyOCAwIDAgMSAuMzk3LjA2NmwuNzQ4LS42NjNhMS4zMjggMS4zMjggMCAwIDAtMS41OTUtLjI5NmwuNDUuODkzWm0tMS41NTUtLjMzNmExLjAxIDEuMDEgMCAwIDAtLjU0OS43MjhsLjk4Ni4xNy0uMDAyLjAwNXYuMDAyYzAtLjAwMS4wMDUtLjAwNi4wMTUtLjAxMmwtLjQ1LS44OTNaXCJ9KSksWlN8fChaUz1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNMTAuNjEgMy4xMSAxNC41IDdNMTQuMzg5IDMuMTEgMTAuNDk5IDdcIixzdHJva2U6XCJjdXJyZW50Q29sb3JcIixzdHJva2VXaWR0aDoxLjI1LHN0cm9rZUxpbmVjYXA6XCJyb3VuZFwiLHN0cm9rZUxpbmVqb2luOlwiYmV2ZWxcIn0pKSk7dmFyIFlTLHFTO2Z1bmN0aW9uIFhTKCl7cmV0dXJuIFhTPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sWFMuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IFFTPWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLFhTKHt3aWR0aDoxNixoZWlnaHQ6MTYsdmlld0JveDpcIjAgMCAxNyAxN1wiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSxZU3x8KFlTPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIm0xMC43NDIgMS4zMzMgMy45MjQgNE0xNC41OSAxLjMzM2wtMy45MjQgNFwiLHN0cm9rZTpcImN1cnJlbnRDb2xvclwiLHN0cm9rZVdpZHRoOjEuNjY3LHN0cm9rZUxpbmVjYXA6XCJyb3VuZFwiLHN0cm9rZUxpbmVqb2luOlwiYmV2ZWxcIn0pKSxxU3x8KHFTPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIk0zLjggOC4zMjRhMi4wOTEgMi4wOTEgMCAwIDAtMS41MSAxLjQ3OSA4LjIwNCA4LjIwNCAwIDAgMCAwIDQuMzE3Yy4xOTguNzMuNzc2IDEuMjk2IDEuNTEgMS40NzlsLjE3NC4wNDRhOS40MSA5LjQxIDAgMCAwIDQuNTYzIDBsLjE3NC0uMDQ0YTIuMDkxIDIuMDkxIDAgMCAwIDEuNTEtMS40NzkgOC4yMDMgOC4yMDMgMCAwIDAgMC00LjMxNyAyLjA5MSAyLjA5MSAwIDAgMC0xLjUxLTEuNDc5bC0uMTc0LS4wNDNhOS40MDcgOS40MDcgMCAwIDAtNC41NjMgMGwtLjE3NS4wNDNaTTExLjQ2IDExLjIxN2EuODU0Ljg1NCAwIDAgMSAuNDI1LS43NzRsMS40ODUtLjg1M2EuNDIuNDIgMCAwIDEgLjYzLjM2NXY0LjAxNGEuNDIuNDIgMCAwIDEtLjYzLjM2NGwtMS40ODUtLjg1MmEuODUzLjg1MyAwIDAgMS0uNDI1LS43NzVjLjAwOS0uMjQuMDE3LS41Mi4wMTctLjc0NCAwLS4yMjQtLjAwOC0uNTA1LS4wMTgtLjc0NVpcIixzdHJva2U6XCJjdXJyZW50Q29sb3JcIn0pKSk7dmFyIEpTO2Z1bmN0aW9uICRTKCl7cmV0dXJuICRTPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sJFMuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IGViPWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLCRTKHt3aWR0aDoxNixoZWlnaHQ6MTYsdmlld0JveDpcIjAgMCAxNiAxNlwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSxKU3x8KEpTPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIk0uMTY2IDIuMjM4Yy4wNjMtLjMzLjM2LS43Mi42NjMtLjg2OEwyLjE3NC43MTJDMi42MjguNDkgMy4yOC42MDQgMy42MjUuOTc2YzAgMCAxLjgyNyAxLjgwNyAyLjA4OCAyLjk5LjI2MiAxLjE4My0xLjI3IDEuMDg1LTEuMzU4IDIuNDkzLS4wODcgMS40MDggMS42OTggMy4zMjQgMS42OTggMy4zMjRzMi4wNzIgMS43ODMgMy4zOTYgMS42NjJjMS4zMjQtLjEyMi42OC0uOTk4IDIuMDM4LTEuNDk2IDEuMzU4LS40OTkgMy40NDkgMS45ODcgMy40NDkgMS45ODcuMzQ2LjM3MS40MzEgMS4wMjkuMTg5IDEuNDc0bC0uNjMgMS4xNTZjLS4xNi4yOTUtLjU2LjU5Ni0uODkyLjY1MyAwIDAtNC43MjMgMS4zNzctOS43NTgtMy40NDJDLTEuMTkgNi45NTcuMTY2IDIuMjM3LjE2NiAyLjIzN1pcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KSkpO3ZhciB0YixuYjtmdW5jdGlvbiByYigpe3JldHVybiByYj1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LHJiLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBpYj1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIixyYih7d2lkdGg6MTYsaGVpZ2h0OjE2LHZpZXdCb3g6XCIwIDAgMTYgMTZcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksdGJ8fCh0Yj1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJtOS40MzcgMTIuMTI1IDEuOTk4Ljg2YzEuOTkuODU3IDIuODM1LS4wMjIgMS42NjUtMS43NThhMTIuMjAxIDEyLjIwMSAwIDAgMS0uNDQ0LS42MDRsLTMuMjIgMS41MDJabTMuMjItNi45MzNhMTMuNjUzIDEzLjY1MyAwIDAgMSAuMzczLS41MTRsLjA1My0uMDY4LjAzLS4wNGMxLjE3OC0xLjcwMy4zMTQtMi41OTctMS42NzgtMS43NGwtMS45OTguODYgMy4yMiAxLjUwMlpNMy4zMDUgNi4zM2wtLjg3OC4zNzdjLTEuNDM4LjYyLTEuNDM3IDEuNzgyIDAgMi40bC44NzguMzc4Yy4xOC0uMzIuMzI0LS42MTcuNDMtLjg4Mi4xMjQtLjMxNC4xODItLjU1OC4xODItLjY5NiAwLS4xMzctLjA1OC0uMzgtLjE4My0uNjk1YTcuNDE4IDcuNDE4IDAgMCAwLS40My0uODgyWlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pKSxuYnx8KG5iPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIm0xMy4zMDcgNy40NzQuMDIuMDEuMDE4LjAwOWMuNTg1LjI1Ny42MDUuNTAyLjYwNS41MTEgMCAuMDEtLjAyMS4yNTUtLjYwNS41MTJsLS4wMTkuMDA4LS4wMTguMDEtOC43NyA0LjQ1N2MtLjQyNC4xODQtLjczNi4yNTMtLjkzOC4yNmEuNzE1LjcxNSAwIDAgMS0uMTM2LS4wMDdjMC0uMDE5LjAwMy0uMDQ0LjAwOS0uMDc2LjAyOC0uMTcuMTMtLjQ0Mi4zNzEtLjgxNC40LS41MTUuODI2LTEuMjI4IDEuMTU2LTEuOTc1LjMzLS43NDYuNi0xLjYwNi42LTIuMzc1IDAtLjc4My0uMjc3LTEuNjQzLS42MTEtMi4zODhhMTAuNzg2IDEwLjc4NiAwIDAgMC0xLjE1Ny0xLjk4MmMtLjI0NS0uMzY2LS4zNDYtLjYzNC0uMzc0LS43OTlhLjU5LjU5IDAgMCAxLS4wMDgtLjA3Ni42OS42OSAwIDAgMSAuMTUtLjAwOWMuMjAzLjAwNi41MTYuMDczLjkzOC4yNTdsOC43NyA0LjQ2N1pNMy40MTIgMTMuMjNsLjAwMi4wMDJhLjAxLjAxIDAgMCAxLS4wMDItLjAwMlptLjA1NC4wNjIuMDAxLjAwNy0uMDAxLS4wMDdaTTMuNDU0IDIuNzExbC0uMDAyLjAwN2MwLS4wMDUuMDAxLS4wMDcuMDAyLS4wMDdabS0uMDQ4LjA2MWEuMDEuMDEgMCAwIDEtLjAwMi4wMDJsLjAwMi0uMDAyWlwiLHN0cm9rZTpcImN1cnJlbnRDb2xvclwiLHN0cm9rZVdpZHRoOjEuNX0pKSksb2I9e2ljb246XCJrMkY5Y1wiLHBlbmRpbmdJY29uQ29sb3I6XCJsVHUwclwiLGNoYXRJY29uQ29sb3I6XCJhWGRsbVwiLGNhbGxJY29uQ29sb3I6XCJDUlJfNlwiLHNuYXBXaXRoU291bmRJY29uQ29sb3I6XCJxbE5rVlwiLHNuYXBXaXRob3V0U291bmRJY29uQ29sb3I6XCJIemI3a1wiLHVub3BlbmVkSWNvbjpcIllZcGpjXCIsaWNvbkZsaXBzSW5SdGw6XCJHcTNSSFwifTt2YXIgYWIsc2IsY2IsbGIsdWIsZGIsZmIscGI7ZnVuY3Rpb24gbWIoZSx0LG4pe2NvbnN0IHI9W29iLmljb25dO3N3aXRjaChlKXtjYXNlIGRTLnFNLkNoYXRNeUFJRGlzYWJsZWQ6YnJlYWs7Y2FzZSBkUy5xTS5DaGF0Vmlld2VkOmNhc2UgZFMucU0uQ2hhdFNjcmVlbnNob3R0ZWQ6Y2FzZSBkUy5xTS5BdWRpb0NhbGxDYWxsZWQ6Y2FzZSBkUy5xTS5WaWRlb0NhbGxDYWxsZWQ6Y2FzZSBkUy5xTS5UeXBpbmc6Y2FzZSBkUy5xTS5BdWRpb0NhbGxNaXNzZWQ6Y2FzZSBkUy5xTS5WaWRlb0NhbGxNaXNzZWQ6Y2FzZSBkUy5xTS5DaGF0VW5rbm93blZpZXdlZDpyLnB1c2gob2IuY2hhdEljb25Db2xvcik7YnJlYWs7Y2FzZSBkUy5xTS5TbmFwU2NyZWVuc2hvdHRlZDpjYXNlIGRTLnFNLlNuYXBSZXBsYXllZDpjYXNlIGRTLnFNLlNuYXBWaWV3ZWQ6ci5wdXNoKHQ/b2Iuc25hcFdpdGhTb3VuZEljb25Db2xvcjpvYi5zbmFwV2l0aG91dFNvdW5kSWNvbkNvbG9yKTticmVhaztjYXNlIGRTLnFNLkNoYXRBbmRTbmFwTmV3OmNhc2UgZFMucU0uU25hcEFuZFJlYWN0aW9uTmV3OmNhc2UgZFMucU0uU25hcE5ldzpyLnB1c2godD9vYi5zbmFwV2l0aFNvdW5kSWNvbkNvbG9yOm9iLnNuYXBXaXRob3V0U291bmRJY29uQ29sb3IpLGU9PT1kUy5xTS5TbmFwTmV3JiZyLnB1c2gob2IudW5vcGVuZWRJY29uKTticmVhaztjYXNlIGRTLnFNLkNoYXROZXc6ci5wdXNoKG9iLmNoYXRJY29uQ29sb3IpLHIucHVzaChvYi51bm9wZW5lZEljb24pO2JyZWFrO2Nhc2UgZFMucU0uQ2hhdFJlYWN0aW9uOmNhc2UgZFMucU0uQ2hhdFJlbW92ZWRSZWFjdGlvbjpjYXNlIGRTLnFNLlNuYXBSZWFjdGlvbjpjYXNlIGRTLnFNLlNuYXBSZW1vdmVkUmVhY3Rpb246Y2FzZSBkUy5xTS5Db252ZXJzYXRpb25NZW1iZXJBZGRlZDpjYXNlIGRTLnFNLkNvbnZlcnNhdGlvbk1lbWJlcktpY2tlZDpjYXNlIGRTLnFNLkNvbnZlcnNhdGlvbk5hbWVDaGFuZ2VkOnIucHVzaChvYi5jaGF0SWNvbkNvbG9yKSxufHxyLnB1c2gob2IudW5vcGVuZWRJY29uKTticmVhaztjYXNlIGRTLnFNLkNoYXRTZW5kaW5nOmNhc2UgZFMucU0uQ2hhdEZhaWxlZFRvU2VuZDpjYXNlIGRTLnFNLkNoYXRXYWl0aW5nVG9TZW5kOmNhc2UgZFMucU0uU25hcFNlbmRpbmc6Y2FzZSBkUy5xTS5TbmFwRmFpbGVkVG9TZW5kOmNhc2UgZFMucU0uU25hcFdhaXRpbmdUb1NlbmQ6Y2FzZSBkUy5xTS5Db252ZXJzYXRpb25DcmVhdGVkOnIucHVzaChvYi5wZW5kaW5nSWNvbkNvbG9yKTticmVhaztjYXNlIGRTLnFNLkNhbGxpbmc6Y2FzZSBkUy5xTS5SaW5naW5nOmNhc2UgZFMucU0uQ2FsbE9uZ29pbmc6Y2FzZSBkUy5xTS5JbkNhbGw6ci5wdXNoKG9iLmNhbGxJY29uQ29sb3IpO2JyZWFrO2RlZmF1bHQ6KDAsdVMuWikoZSl9cmV0dXJuKDAsUS5aKShyKX1mdW5jdGlvbiBoYihlKXtsZXQgdCx7ZmVlZFN0YXR1czpuLGxhc3RBY3RvcklzU2VsZjpyLHNuYXBIYXNBdWRpbzppLHZpZXdlZDphfT1lO2lmKG49PT1kUy5xTS5UeXBpbmd8fG49PT1kUy5xTS5DaGF0TXlBSURpc2FibGVkKXJldHVybiBudWxsO3N3aXRjaChuKXtjYXNlIGRTLnFNLkNhbGxpbmc6Y2FzZSBkUy5xTS5DYWxsT25nb2luZzpjYXNlIGRTLnFNLkluQ2FsbDp0PSgwLG8uWikoZWIse2NsYXNzTmFtZTpvYi5pY29uRmxpcHNJblJ0bH0pO2JyZWFrO2Nhc2UgZFMucU0uUmluZ2luZzp0PSgwLG8uWikoQlMse2NsYXNzTmFtZTpvYi5pY29uRmxpcHNJblJ0bH0pO2JyZWFrO2Nhc2UgZFMucU0uQXVkaW9DYWxsTWlzc2VkOnQ9YT8oMCxvLlopKEtTLHtjbGFzc05hbWU6b2IuaWNvbkZsaXBzSW5SdGx9KTooMCxvLlopKFRTLHtjbGFzc05hbWU6b2IuaWNvbkZsaXBzSW5SdGx9KTticmVhaztjYXNlIGRTLnFNLlZpZGVvQ2FsbE1pc3NlZDp0PWE/KDAsby5aKShRUyx7Y2xhc3NOYW1lOm9iLmljb25GbGlwc0luUnRsfSk6KDAsby5aKShrUyx7Y2xhc3NOYW1lOm9iLmljb25GbGlwc0luUnRsfSk7YnJlYWs7Y2FzZSBkUy5xTS5DaGF0Vmlld2VkOmNhc2UgZFMucU0uQ2hhdEZhaWxlZFRvU2VuZDpjYXNlIGRTLnFNLkNoYXRXYWl0aW5nVG9TZW5kOmNhc2UgZFMucU0uQ2hhdFNlbmRpbmc6Y2FzZSBkUy5xTS5DaGF0UmVhY3Rpb246Y2FzZSBkUy5xTS5DaGF0UmVtb3ZlZFJlYWN0aW9uOmNhc2UgZFMucU0uU25hcFJlYWN0aW9uOmNhc2UgZFMucU0uU25hcFJlbW92ZWRSZWFjdGlvbjpjYXNlIGRTLnFNLkNoYXRVbmtub3duVmlld2VkOmNhc2UgZFMucU0uQ29udmVyc2F0aW9uTWVtYmVyQWRkZWQ6Y2FzZSBkUy5xTS5Db252ZXJzYXRpb25OYW1lQ2hhbmdlZDp0PXI/KDAsby5aKSh1Xyx7Y2xhc3NOYW1lOm9iLmljb25GbGlwc0luUnRsfSk6YWJ8fChhYj0oMCxvLlopKHZTLHt9KSk7YnJlYWs7Y2FzZSBkUy5xTS5TbmFwV2FpdGluZ1RvU2VuZDpjYXNlIGRTLnFNLlNuYXBTZW5kaW5nOnQ9c2J8fChzYj0oMCxvLlopKGxoLHt9KSk7YnJlYWs7Y2FzZSBkUy5xTS5TbmFwRmFpbGVkVG9TZW5kOmNhc2UgZFMucU0uU25hcFZpZXdlZDpjYXNlIGRTLnFNLlNuYXBOZXc6dD1yPygwLG8uWikodV8se2NsYXNzTmFtZTpvYi5pY29uRmxpcHNJblJ0bH0pOmNifHwoY2I9KDAsby5aKShwXyx7fSkpO2JyZWFrO2Nhc2UgZFMucU0uU25hcFJlcGxheWVkOnQ9bGJ8fChsYj0oMCxvLlopKFhwLHt9KSk7YnJlYWs7Y2FzZSBkUy5xTS5DaGF0U2NyZWVuc2hvdHRlZDpjYXNlIGRTLnFNLlNuYXBTY3JlZW5zaG90dGVkOnQ9dWJ8fCh1Yj0oMCxvLlopKGliLHt9KSk7YnJlYWs7Y2FzZSBkUy5xTS5BdWRpb0NhbGxDYWxsZWQ6dD0oMCxvLlopKExTLHtjbGFzc05hbWU6b2IuaWNvbkZsaXBzSW5SdGx9KTticmVhaztjYXNlIGRTLnFNLlZpZGVvQ2FsbENhbGxlZDp0PSgwLG8uWikoV1Mse2NsYXNzTmFtZTpvYi5pY29uRmxpcHNJblJ0bH0pO2JyZWFrO2Nhc2UgZFMucU0uQ29udmVyc2F0aW9uQ3JlYXRlZDp0PWRifHwoZGI9KDAsby5aKSh2Uyx7fSkpO2JyZWFrO2Nhc2UgZFMucU0uQ2hhdE5ldzp0PXI/KDAsby5aKSh1Xyx7Y2xhc3NOYW1lOm9iLmljb25GbGlwc0luUnRsfSk6ZmJ8fChmYj0oMCxvLlopKHdTLHt9KSk7YnJlYWs7Y2FzZSBkUy5xTS5DaGF0QW5kU25hcE5ldzpjYXNlIGRTLnFNLlNuYXBBbmRSZWFjdGlvbk5ldzp0PXI/KDAsby5aKSh1Xyx7Y2xhc3NOYW1lOm9iLmljb25GbGlwc0luUnRsfSk6cGJ8fChwYj0oMCxvLlopKHBTLHt9KSk7YnJlYWs7Y2FzZSBkUy5xTS5Db252ZXJzYXRpb25NZW1iZXJLaWNrZWQ6dD0oMCxvLlopKF9TLHtjbGFzc05hbWU6b2IuaWNvbkZsaXBzSW5SdGx9KTticmVhaztkZWZhdWx0OigwLHVTLlopKG4pfXJldHVybigwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOm1iKG4saSxhKX0sdm9pZCAwLHQpfWZ1bmN0aW9uIHZiKGUpe2xldHtmZWVkU3RhdHVzOnQsc25hcEhhc0F1ZGlvOm4sbGFzdEFjdG9ySXNTZWxmOnIsdmlld2VkOml9PWU7cmV0dXJuKDAsby5aKShoYix7ZmVlZFN0YXR1czp0LGxhc3RBY3RvcklzU2VsZjpyLHNuYXBIYXNBdWRpbzpuLHZpZXdlZDppfSl9Y29uc3QgZ2I9MWU0LHliPTZlNCxFYj0zNmU1LF9iPTg2NGU1LEliPTYwNDhlNTtmdW5jdGlvbiBTYihlKXtjb25zdCB0PUJpZ0ludChEYXRlLm5vdygpKS1lO3JldHVybiB0PGdifHx0PklifWZ1bmN0aW9uIGJiKGUpe2xldHt0aW1lc3RhbXA6dH09ZTtjb25zdCBuPU51bWJlcih0KSxyPURhdGUubm93KCktbixpPSgwLG1lLlopKCk7bGV0IGEscztpZihyPGdiKXM9aS5mb3JtYXRNZXNzYWdlKHtpZDpcIk1lOCtBVFwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwianVzdCBub3dcIn1dfSksYT1zO2Vsc2UgaWYocjx5Yil7Y29uc3QgZT1NYXRoLmZsb29yKHIvMWUzKS50b1N0cmluZygpO3M9aS5mb3JtYXRNZXNzYWdlKHtpZDpcIkZaWTFKdlwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZToxLHZhbHVlOlwidGltZURpZmZlcmVuY2VcIn0se3R5cGU6MCx2YWx1ZTpcIiBcIn0se3R5cGU6Nix2YWx1ZTpcInRpbWVEaWZmZXJlbmNlXCIsb3B0aW9uczp7b25lOnt2YWx1ZTpbe3R5cGU6MCx2YWx1ZTpcInNlY29uZFwifV19LG90aGVyOnt2YWx1ZTpbe3R5cGU6MCx2YWx1ZTpcInNlY29uZHNcIn1dfX0sb2Zmc2V0OjAscGx1cmFsVHlwZTpcImNhcmRpbmFsXCJ9LHt0eXBlOjAsdmFsdWU6XCIgYWdvXCJ9XX0se3RpbWVEaWZmZXJlbmNlOmV9KSxhPSgwLG8uWikodi5aLHtpZDpcImdzMy9UV1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZToxLHZhbHVlOlwidGltZURpZmZlcmVuY2VcIn0se3R5cGU6MCx2YWx1ZTpcInNcIn1dLHZhbHVlczp7dGltZURpZmZlcmVuY2U6ZX19KX1lbHNlIGlmKHI8RWIpe2NvbnN0IGU9TWF0aC5mbG9vcihyL3liKS50b1N0cmluZygpO3M9aS5mb3JtYXRNZXNzYWdlKHtpZDpcIlg4MkVHVlwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZToxLHZhbHVlOlwidGltZURpZmZlcmVuY2VcIn0se3R5cGU6MCx2YWx1ZTpcIiBcIn0se3R5cGU6Nix2YWx1ZTpcInRpbWVEaWZmZXJlbmNlXCIsb3B0aW9uczp7b25lOnt2YWx1ZTpbe3R5cGU6MCx2YWx1ZTpcIm1pbnV0ZVwifV19LG90aGVyOnt2YWx1ZTpbe3R5cGU6MCx2YWx1ZTpcIm1pbnV0ZXNcIn1dfX0sb2Zmc2V0OjAscGx1cmFsVHlwZTpcImNhcmRpbmFsXCJ9LHt0eXBlOjAsdmFsdWU6XCIgYWdvXCJ9XX0se3RpbWVEaWZmZXJlbmNlOmV9KSxhPSgwLG8uWikodi5aLHtpZDpcIitXUjVJdVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZToxLHZhbHVlOlwidGltZURpZmZlcmVuY2VcIn0se3R5cGU6MCx2YWx1ZTpcIm1cIn1dLHZhbHVlczp7dGltZURpZmZlcmVuY2U6ZX19KX1lbHNlIGlmKHI8X2Ipe2NvbnN0IGU9TWF0aC5mbG9vcihyL0ViKS50b1N0cmluZygpO3M9aS5mb3JtYXRNZXNzYWdlKHtpZDpcIjhISnJyZVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZToxLHZhbHVlOlwidGltZURpZmZlcmVuY2VcIn0se3R5cGU6MCx2YWx1ZTpcIiBcIn0se3R5cGU6Nix2YWx1ZTpcInRpbWVEaWZmZXJlbmNlXCIsb3B0aW9uczp7b25lOnt2YWx1ZTpbe3R5cGU6MCx2YWx1ZTpcImhvdXJcIn1dfSxvdGhlcjp7dmFsdWU6W3t0eXBlOjAsdmFsdWU6XCJob3Vyc1wifV19fSxvZmZzZXQ6MCxwbHVyYWxUeXBlOlwiY2FyZGluYWxcIn0se3R5cGU6MCx2YWx1ZTpcIiBhZ29cIn1dfSx7dGltZURpZmZlcmVuY2U6ZX0pLGE9KDAsby5aKSh2Llose2lkOlwiaWFGek01XCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjEsdmFsdWU6XCJ0aW1lRGlmZmVyZW5jZVwifSx7dHlwZTowLHZhbHVlOlwiaFwifV0sdmFsdWVzOnt0aW1lRGlmZmVyZW5jZTplfX0pfWVsc2UgaWYocjxJYil7Y29uc3QgZT1NYXRoLmZsb29yKHIvX2IpLnRvU3RyaW5nKCk7cz1pLmZvcm1hdE1lc3NhZ2Uoe2lkOlwiMkppOVJwXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjEsdmFsdWU6XCJ0aW1lRGlmZmVyZW5jZVwifSx7dHlwZTowLHZhbHVlOlwiIFwifSx7dHlwZTo2LHZhbHVlOlwidGltZURpZmZlcmVuY2VcIixvcHRpb25zOntvbmU6e3ZhbHVlOlt7dHlwZTowLHZhbHVlOlwiZGF5XCJ9XX0sb3RoZXI6e3ZhbHVlOlt7dHlwZTowLHZhbHVlOlwiZGF5c1wifV19fSxvZmZzZXQ6MCxwbHVyYWxUeXBlOlwiY2FyZGluYWxcIn0se3R5cGU6MCx2YWx1ZTpcIiBhZ29cIn1dfSx7dGltZURpZmZlcmVuY2U6ZX0pLGE9KDAsby5aKSh2Llose2lkOlwiOXNkanMxXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjEsdmFsdWU6XCJ0aW1lRGlmZmVyZW5jZVwifSx7dHlwZTowLHZhbHVlOlwiZFwifV0sdmFsdWVzOnt0aW1lRGlmZmVyZW5jZTpNYXRoLmZsb29yKHIvX2IpLnRvU3RyaW5nKCl9fSl9ZWxzZSBzPXZvaWQgMCxhPSgwLG8uWikoVmYse3ZhbHVlOm4sbW9udGg6XCJzaG9ydFwiLGRheTpcIm51bWVyaWNcIn0pO3JldHVybigwLG8uWikoXCJ0aW1lXCIse2RhdGVUaW1lOm5ldyBEYXRlKG4pLnRvSVNPU3RyaW5nKCksdGl0bGU6c30sdm9pZCAwLGEpfXZhciBUYjtmdW5jdGlvbiBDYigpe3JldHVybiBDYj1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LENiLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBBYj1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIixDYih7d2lkdGg6MTgsaGVpZ2h0OjE4LHZpZXdCb3g6XCIwIDAgMTggMThcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksVGJ8fChUYj1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNMTAuMTQ0IDkuMDMxIDYuNzMgMTIuMjQ4YTEuMDQ4IDEuMDQ4IDAgMCAwLS4wNDIgMS40ODZjLjQuNDIxIDEuMDY3LjQ0IDEuNDkuMDQxbDQuMjItMy45NzNjLjQzNy0uNDEyLjQ0LTEuMTA0LjAwNy0xLjUybC00LjIxOS00LjA1YTEuMDU4IDEuMDU4IDAgMCAwLTEuNDkxLjAyNyAxLjA0OCAxLjA0OCAwIDAgMCAuMDI3IDEuNDg2bDMuNDIzIDMuMjg2WlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pKSk7dmFyIFJiO2Z1bmN0aW9uIGtiKCl7cmV0dXJuIGtiPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sa2IuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IE9iPWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLGtiKHt3aWR0aDoxNixoZWlnaHQ6MTYsdmlld0JveDpcIjAgMCAxNiAxNlwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSxSYnx8KFJiPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIk0xMiAxMiA0IDRNMTIgNGwtOCA4XCIsc3Ryb2tlOlwiIzk5OVwiLHN0cm9rZVdpZHRoOjIsc3Ryb2tlTGluZWNhcDpcInJvdW5kXCJ9KSkpLE5iPXtzZXBhcmF0b3I6XCJyTmVteFwifTtmdW5jdGlvbiB3YihlKXtsZXR7Y2hpbGRyZW46dH09ZTtyZXR1cm4oMCxxLmpzeHMpKHEuRnJhZ21lbnQse2NoaWxkcmVuOlsoMCxvLlopKFwic3BhblwiLHtjbGFzc05hbWU6TmIuc2VwYXJhdG9yLHJvbGU6XCJwcmVzZW50YXRpb25cIn0sdm9pZCAwLFwiXHUwMGI3XCIpLHRdfSl9ZnVuY3Rpb24gRGIoKXtyZXR1cm4oMCxtZS5aKSgpLCgwLG8uWikoXCJzcGFuXCIse3RpdGxlOnZvaWQgMH0sdm9pZCAwLFwiXHVkODNjXHVkZjgyXCIpfWNvbnN0IFBiPXtjb252ZXJzYXRpb25TdGF0dXM6XCJQV3hDZVwiLGNvbnZlcnNhdGlvblRleHQ6XCJvdlVzWlwiLHN0YXR1c1RleHQ6XCJHUUt2QVwiLGNoYXRBY3Rpdml0eUxhYmVsOlwiVDFOQlZcIixuZXdJdGVtczpcInNjR200XCIsY2hhdExhYmVsOlwidEd0RVkgc2NHbTRcIixzbmFwV2l0aFNvdW5kTGFiZWw6XCJDVkpBUyBzY0dtNFwiLHNuYXBXaXRob3V0U291bmRMYWJlbDpcInhuZFVnIHNjR200XCIsY2hhdENhbGxpbmdMYWJlbDpcImxFZXVLXCIsaG92ZXJTdGF0dXNXcmFwcGVyOlwiUVVXd0NcIixkaXNtaXNzSWNvbjpcInhmSXdKXCIsaG92ZXJJY29uOlwiZkJjUk1cIn07ZnVuY3Rpb24gTWIoZSl7bGV0e3N0cmVha0NvdW50OnQsc2hvd0hvdXJnbGFzczpufT1lO3JldHVybigwLG1lLlopKCksKDAsby5aKShcInNwYW5cIix7dGl0bGU6dm9pZCAwfSx2b2lkIDAsdCxcIiBcdWQ4M2RcdWRkMjVcIixuJiZcIiBcdTIzZjNcIil9ZnVuY3Rpb24gTGIoZSx0LG4scil7cmV0dXJuISghcnx8cj09PW58fCFlfHx0KX1mdW5jdGlvbiBVYihlLHQpe3JldHVybiBlPT09ZFMucU0uQ2hhdFVua25vd25WaWV3ZWQmJnR9dmFyIHhiLEZiLEJiLFZiLEdiLEhiLFdiLGpiLFpiLHpiLEtiLFliLHFiLFhiLFFiLEpiLCRiLGVULHRULG5ULHJULGlULG9ULGFULHNULGNULGxULHVULGRULGZULHBULG1ULGhULHZULGdULHlULEVULF9ULElULFNULGJULFRUO2Z1bmN0aW9uIENUKGUpe2xldHtsYXN0QWN0b3JJc1NlbGY6dCx2aWV3ZWQ6bixjb252ZXJzYXRpb25JZDpyLGZlZWRJdGVtQ3JlYXRvcklkOml9PWU7Y29uc3QgYT1RbChyKSxzPVJsKGkpO3JldHVybiB0P3hifHwoeGI9KDAsby5aKSh2Llose2lkOlwiN0NRWk9XXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJZb3UgcmVtb3ZlZCBhIG1lbWJlclwifV19KSk6YT8oMCxvLlopKHYuWix7aWQ6XCJhdkJaUCtcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MSx2YWx1ZTpcInVzZXJcIn0se3R5cGU6MCx2YWx1ZTpcIiByZW1vdmVkIHlvdVwifV0sdmFsdWVzOnt1c2VyOnN9fSk6bj9GYnx8KEZiPSgwLG8uWikodi5aLHtpZDpcIjVXNmpGTVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiTWVtYmVyIHJlbW92ZWRcIn1dfSkpOigwLG8uWikoXCJzcGFuXCIse2NsYXNzTmFtZTpQYi5jaGF0TGFiZWx9LHZvaWQgMCxCYnx8KEJiPSgwLG8uWikodi5aLHtpZDpcIjVXNmpGTVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiTWVtYmVyIHJlbW92ZWRcIn1dfSkpKX1mdW5jdGlvbiBBVChlKXtsZXR7ZmVlZFN0YXR1czp0LHNuYXBIYXNBdWRpbzpuLGhhc1ZpZXdhYmxlU25hcHNPbldlYjpyLGxhc3RBY3RvcklzU2VsZjppLHZpZXdlZDphLGZlZWRJdGVtQ3JlYXRvcklkOnMsZmVlZEl0ZW1NdXRhdGVkTWVzc2FnZVNlbmRlcklkOmMsaXNVc2VyTmV3RnJpZW5kOmwsY29udmVyc2F0aW9uSWQ6dX09ZTtjb25zdCBkPSgwLGJsLkNHKShSbChzKSksZj1YYygpLHA9QXUodSksbT1WbCh1KSxoPW0/LmNvbnZlcnNhdGlvblR5cGU9PT1QZS5pMS5VU0VSQ1JFQVRFREdST1VQLGc9aCYmMj09PW0ucGFydGljaXBhbnRzLmxlbmd0aCx5PXA/LmNhbGxlcj8udXNlcklkLEU9eT8oMCx6Lk9ZKSh5KTp2b2lkIDAsXz1SbChFKSxJPW0/Lmxhc3RTZW5kZXJVc2VySWRzfHxbXSxTPUkubGVuZ3RoPjA/SVswXTp2b2lkIDAsYj1SbChTKTtzd2l0Y2godCl7Y2FzZSBkUy5xTS5SaW5naW5nOnJldHVybigwLG8uWikoXCJzcGFuXCIse2NsYXNzTmFtZTpQYi5jaGF0Q2FsbGluZ0xhYmVsfSx2b2lkIDAsVmJ8fChWYj0oMCxvLlopKHYuWix7aWQ6XCJGQ29PaHlcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlJpbmdpbmcuLi5cIn1dfSkpKTtjYXNlIGRTLnFNLkNhbGxpbmc6e2NvbnN0IGU9TGIoaCxnLGYsRSk7cmV0dXJuKDAsby5aKShcInNwYW5cIix7Y2xhc3NOYW1lOlBiLmNoYXRDYWxsaW5nTGFiZWx9LHZvaWQgMCxlPygwLG8uWikodi5aLHtpZDpcIkRxTFMwcFwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZToxLHZhbHVlOlwiZmlyc3ROYW1lXCJ9LHt0eXBlOjAsdmFsdWU6XCIgaXMgY2FsbGluZy4uLlwifV0sdmFsdWVzOntmaXJzdE5hbWU6KDAsYmwuQ0cpKF8pfX0pOkdifHwoR2I9KDAsby5aKSh2Llose2lkOlwid09zQTl0XCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJDYWxsaW5nLi4uXCJ9XX0pKSl9Y2FzZSBkUy5xTS5DYWxsT25nb2luZzpjYXNlIGRTLnFNLkluQ2FsbDpyZXR1cm4oMCxvLlopKFwic3BhblwiLHtjbGFzc05hbWU6UGIuY2hhdENhbGxpbmdMYWJlbH0sdm9pZCAwLEhifHwoSGI9KDAsby5aKSh2Llose2lkOlwiSWV2d0c1XCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJDYWxsIEFjdGl2ZVwifV19KSkpO2Nhc2UgZFMucU0uVHlwaW5nOnJldHVybigwLG8uWikoXCJzcGFuXCIse2NsYXNzTmFtZTpQYi5jaGF0QWN0aXZpdHlMYWJlbH0sdm9pZCAwLFdifHwoV2I9KDAsby5aKSh2Llose2lkOlwiWWpvMkRMXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJUeXBpbmcuLi5cIn1dfSkpKTtjYXNlIGRTLnFNLkNoYXRXYWl0aW5nVG9TZW5kOmNhc2UgZFMucU0uU25hcFdhaXRpbmdUb1NlbmQ6cmV0dXJuIGpifHwoamI9KDAsby5aKSh2Llose2lkOlwiTDA1cS9lXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJXYWl0aW5nIHRvIHNlbmQuLi5cIn1dfSkpO2Nhc2UgZFMucU0uQ2hhdFNlbmRpbmc6Y2FzZSBkUy5xTS5TbmFwU2VuZGluZzpyZXR1cm4gWmJ8fChaYj0oMCxvLlopKHYuWix7aWQ6XCIrM3FIMkVcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlNlbmRpbmcuLi5cIn1dfSkpO2Nhc2UgZFMucU0uQ2hhdEZhaWxlZFRvU2VuZDpjYXNlIGRTLnFNLlNuYXBGYWlsZWRUb1NlbmQ6cmV0dXJuIHpifHwoemI9KDAsby5aKSh2Llose2lkOlwicXJTb3Q3XCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJGYWlsZWQgdG8gc2VuZFwifV19KSk7Y2FzZSBkUy5xTS5DaGF0U2NyZWVuc2hvdHRlZDpjYXNlIGRTLnFNLlNuYXBTY3JlZW5zaG90dGVkOnJldHVybiBLYnx8KEtiPSgwLG8uWikodi5aLHtpZDpcImVJbnAyclwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiU2NyZWVuc2hvdFwifV19KSk7Y2FzZSBkUy5xTS5DaGF0QW5kU25hcE5ldzpyZXR1cm4gaT9ZYnx8KFliPSgwLG8uWikodi5aLHtpZDpcImZmL0VVZVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiRGVsaXZlcmVkXCJ9XX0pKTooMCxvLlopKFwic3BhblwiLHtjbGFzc05hbWU6UGIuY2hhdExhYmVsfSx2b2lkIDAscWJ8fChxYj0oMCxvLlopKHYuWix7aWQ6XCJnZkYwajRcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIk5ldyBDaGF0cyBhbmQgU25hcHNcIn1dfSkpKTtjYXNlIGRTLnFNLkNoYXROZXc6cmV0dXJuIGk/WGJ8fChYYj0oMCxvLlopKHYuWix7aWQ6XCJtbS9ZZ3lcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkRlbGl2ZXJlZFwifV19KSk6KDAsby5aKShcInNwYW5cIix7Y2xhc3NOYW1lOlBiLmNoYXRMYWJlbH0sdm9pZCAwLFFifHwoUWI9KDAsby5aKSh2Llose2lkOlwiaUVCRVFDXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJOZXcgQ2hhdFwifV19KSkpO2Nhc2UgZFMucU0uQ2hhdFJlYWN0aW9uOmNhc2UgZFMucU0uU25hcFJlYWN0aW9uOnJldHVybiBmdW5jdGlvbihlLHQsbixyLGksYSxzKXtpZihlKXJldHVybiB0PT09ZFMucU0uQ2hhdFJlYWN0aW9uP2k9PT1hP3lUfHwoeVQ9KDAsby5aKSh2Llose2lkOlwiUU05b3NTXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJSZWFjdGVkIHRvIG93biBjaGF0XCJ9XX0pKTpFVHx8KEVUPSgwLG8uWikodi5aLHtpZDpcImM1eWwrbFwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiUmVhY3RlZCB0byBhIGNoYXRcIn1dfSkpOmk9PT1hP19UfHwoX1Q9KDAsby5aKSh2Llose2lkOlwiYWFtdlJyXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJSZWFjdGVkIHRvIG93biBTbmFwXCJ9XX0pKTpJVHx8KElUPSgwLG8uWikodi5aLHtpZDpcInhMM0JkNVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiUmVhY3RlZCB0byBhIFNuYXBcIn1dfSkpO2NvbnN0IGM9dD09PWRTLnFNLkNoYXRSZWFjdGlvbj9pPT09YT8oMCxvLlopKHYuWix7aWQ6XCJ2Yk5DdkVcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MSx2YWx1ZTpcInVzZXJcIn0se3R5cGU6MCx2YWx1ZTpcIiByZWFjdGVkIHRvIGEgY2hhdFwifV0sdmFsdWVzOnt1c2VyOm59fSk6cj09PWE/KDAsby5aKSh2Llose2lkOlwiV1g4WmFaXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjEsdmFsdWU6XCJ1c2VyXCJ9LHt0eXBlOjAsdmFsdWU6XCIgcmVhY3RlZCB0byB5b3VyIGNoYXRcIn1dLHZhbHVlczp7dXNlcjpufX0pOigwLG8uWikodi5aLHtpZDpcIllSbkcxMVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZToxLHZhbHVlOlwidXNlclwifSx7dHlwZTowLHZhbHVlOlwiIHJlYWN0ZWQgdG8gYSBjaGF0XCJ9XSx2YWx1ZXM6e3VzZXI6bn19KTppPT09YT8oMCxvLlopKHYuWix7aWQ6XCIxMnE4N1hcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MSx2YWx1ZTpcInVzZXJcIn0se3R5cGU6MCx2YWx1ZTpcIiByZWFjdGVkIHRvIGEgU25hcFwifV0sdmFsdWVzOnt1c2VyOm59fSk6cj09PWE/KDAsby5aKSh2Llose2lkOlwidTVjbHpnXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjEsdmFsdWU6XCJ1c2VyXCJ9LHt0eXBlOjAsdmFsdWU6XCIgcmVhY3RlZCB0byB5b3VyIFNuYXBcIn1dLHZhbHVlczp7dXNlcjpufX0pOigwLG8uWikodi5aLHtpZDpcImpTKzN1ZFwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZToxLHZhbHVlOlwidXNlclwifSx7dHlwZTowLHZhbHVlOlwiIHJlYWN0ZWQgdG8gYSBTbmFwXCJ9XSx2YWx1ZXM6e3VzZXI6bn19KTtyZXR1cm4gcz9jOigwLG8uWikoXCJzcGFuXCIse2NsYXNzTmFtZTpQYi5jaGF0TGFiZWx9LHZvaWQgMCxjKX0oaSx0LGQsZixzLGMsYSk7Y2FzZSBkUy5xTS5DaGF0UmVtb3ZlZFJlYWN0aW9uOmNhc2UgZFMucU0uU25hcFJlbW92ZWRSZWFjdGlvbjpyZXR1cm4gaT9KYnx8KEpiPSgwLG8uWikodi5aLHtpZDpcImhCUHZhYlwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiUmVtb3ZlZCBhIHJlYWN0aW9uXCJ9XX0pKTooMCxvLlopKHYuWix7aWQ6XCJKN2dHZGRcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MSx2YWx1ZTpcInVzZXJcIn0se3R5cGU6MCx2YWx1ZTpcIiByZW1vdmVkIGEgcmVhY3Rpb25cIn1dLHZhbHVlczp7dXNlcjpkfX0pO2Nhc2UgZFMucU0uU25hcFJlcGxheWVkOnJldHVybiAkYnx8KCRiPSgwLG8uWikodi5aLHtpZDpcIjBVdDhQN1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiUmVwbGF5ZWRcIn1dfSkpO2Nhc2UgZFMucU0uU25hcE5ldzpyZXR1cm4gaT9lVHx8KGVUPSgwLG8uWikodi5aLHtpZDpcIktUdDdxYlwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiRGVsaXZlcmVkXCJ9XX0pKTooMCxvLlopKFwic3BhblwiLHtjbGFzc05hbWU6KDAsUS5aKShuP1BiLnNuYXBXaXRoU291bmRMYWJlbDpQYi5zbmFwV2l0aG91dFNvdW5kTGFiZWwpfSx2b2lkIDAscj90VHx8KHRUPSgwLG8uWikodi5aLHtpZDpcIll4WXk4b1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiTmV3IFNuYXBcIn1dfSkpOm5UfHwoblQ9KDAsby5aKSh2Llose2lkOlwiQjd4TStWXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJOZXcgU25hcCBvbiBtb2JpbGVcIn1dfSkpKTtjYXNlIGRTLnFNLlNuYXBBbmRSZWFjdGlvbk5ldzpyZXR1cm4gaT9yVHx8KHJUPSgwLG8uWikodi5aLHtpZDpcIktUdDdxYlwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiRGVsaXZlcmVkXCJ9XX0pKTooMCxvLlopKFwic3BhblwiLHtjbGFzc05hbWU6KDAsUS5aKShuP1BiLnNuYXBXaXRoU291bmRMYWJlbDpQYi5zbmFwV2l0aG91dFNvdW5kTGFiZWwpfSx2b2lkIDAsaVR8fChpVD0oMCxvLlopKHYuWix7aWQ6XCJDWk50WTJcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIk5ldyBTbmFwIGFuZCBSZWFjdGlvblwifV19KSkpO2Nhc2UgZFMucU0uU25hcFZpZXdlZDpjYXNlIGRTLnFNLkNoYXRWaWV3ZWQ6Y2FzZSBkUy5xTS5DaGF0VW5rbm93blZpZXdlZDpyZXR1cm4gaT9vVHx8KG9UPSgwLG8uWikodi5aLHtpZDpcImxJdkZqL1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiT3BlbmVkXCJ9XX0pKTpVYih0LGwpP2FUfHwoYVQ9KDAsby5aKSh2Llose2lkOlwieVVOVDdvXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJTYXkgSGkhXCJ9XX0pKTpMYihoLGcsZixTKT8oMCxvLlopKHYuWix7aWQ6XCJRYXhYVG1cIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlJlY2VpdmVkIGZyb20gXCJ9LHt0eXBlOjEsdmFsdWU6XCJmaXJzdE5hbWVcIn1dLHZhbHVlczp7Zmlyc3ROYW1lOigwLGJsLkNHKShiKX19KTpzVHx8KHNUPSgwLG8uWikodi5aLHtpZDpcIlk5T0E5MlwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiUmVjZWl2ZWRcIn1dfSkpO2Nhc2UgZFMucU0uQXVkaW9DYWxsQ2FsbGVkOmNhc2UgZFMucU0uVmlkZW9DYWxsQ2FsbGVkOnJldHVybiBjVHx8KGNUPSgwLG8uWikodi5aLHtpZDpcIjhFM0ZGeFwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiQ2FsbGVkXCJ9XX0pKTtjYXNlIGRTLnFNLkF1ZGlvQ2FsbE1pc3NlZDpjYXNlIGRTLnFNLlZpZGVvQ2FsbE1pc3NlZDpyZXR1cm4oMCxvLlopKFwic3BhblwiLHtjbGFzc05hbWU6KDAsUS5aKSghYSYmUGIuY2hhdEFjdGl2aXR5TGFiZWwpfSx2b2lkIDAsaT9sVHx8KGxUPSgwLG8uWikodi5aLHtpZDpcIk4ya0hzdlwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiQ2FsbGVkXCJ9XX0pKTp1VHx8KHVUPSgwLG8uWikodi5aLHtpZDpcIjBOU0ljTlwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiTWlzc2VkIGNhbGxcIn1dfSkpKTtjYXNlIGRTLnFNLkNvbnZlcnNhdGlvbkNyZWF0ZWQ6cmV0dXJuIGg/ZFR8fChkVD0oMCxvLlopKHYuWix7aWQ6XCJjdUd5VmtcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkdyb3VwIENyZWF0ZWRcIn1dfSkpOmZUfHwoZlQ9KDAsby5aKSh2Llose2lkOlwieVVOVDdvXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJTYXkgSGkhXCJ9XX0pKTtjYXNlIGRTLnFNLkNvbnZlcnNhdGlvbk5hbWVDaGFuZ2VkOnJldHVybiBpfHxhP3BUfHwocFQ9KDAsby5aKSh2Llose2lkOlwiKzRGNUMwXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJDaGFuZ2VkIG5hbWVcIn1dfSkpOigwLG8uWikoXCJzcGFuXCIse2NsYXNzTmFtZTpQYi5jaGF0TGFiZWx9LHZvaWQgMCxtVHx8KG1UPSgwLG8uWikodi5aLHtpZDpcIis0RjVDMFwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiQ2hhbmdlZCBuYW1lXCJ9XX0pKSk7Y2FzZSBkUy5xTS5Db252ZXJzYXRpb25NZW1iZXJBZGRlZDpyZXR1cm4gaXx8YT9oVHx8KGhUPSgwLG8uWikodi5aLHtpZDpcIlpLdk9YeFwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiTWVtYmVyIGFkZGVkXCJ9XX0pKTooMCxvLlopKFwic3BhblwiLHtjbGFzc05hbWU6UGIuY2hhdExhYmVsfSx2b2lkIDAsdlR8fCh2VD0oMCxvLlopKHYuWix7aWQ6XCJaS3ZPWHhcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIk1lbWJlciBhZGRlZFwifV19KSkpO2Nhc2UgZFMucU0uQ29udmVyc2F0aW9uTWVtYmVyS2lja2VkOnJldHVybigwLG8uWikoQ1Qse2ZlZWRJdGVtQ3JlYXRvcklkOnMsbGFzdEFjdG9ySXNTZWxmOmksdmlld2VkOmEsY29udmVyc2F0aW9uSWQ6dX0pO2Nhc2UgZFMucU0uQ2hhdE15QUlEaXNhYmxlZDpyZXR1cm4gZ1R8fChnVD0oMCxvLlopKHYuWix7aWQ6XCI1RitFeHdcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlZpZXcgb24gTW9iaWxlXCJ9XX0pKTtkZWZhdWx0OigwLHVTLlopKHQpfX1mdW5jdGlvbiBSVChlKXtsZXR7ZmVlZFN0YXR1czp0LGRpc3BsYXlJbmZvOm4sc3RyZWFrOnIsZm9jdXNlZDppLGhvdmVyZWQ6YSxhY3Rpb25CdXR0b25Ib3ZlclRleHQ6cyxpc1VzZXJCaXJ0aGRheTpjLGlzVXNlck5ld0ZyaWVuZDpsLGhpZGVTdGF0dXNJY29uOnU9ITEsY29udmVyc2F0aW9uSWQ6ZCxoYXNWaWV3YWJsZVNuYXBzT25XZWI6Zn09ZTtjb25zdCBwPVhjKCk9PT1uLmZlZWRJdGVtQ3JlYXRvcklkLG09bi5mZWVkSXRlbS5zbmFwPy5oYXNBdWRpbyxoPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKHQmJm4pcmV0dXJuITE7aWYoVWIoZSxyKSlyZXR1cm4hMTtzd2l0Y2goZSl7Y2FzZSBkUy5xTS5BdWRpb0NhbGxDYWxsZWQ6Y2FzZSBkUy5xTS5BdWRpb0NhbGxNaXNzZWQ6Y2FzZSBkUy5xTS5WaWRlb0NhbGxDYWxsZWQ6Y2FzZSBkUy5xTS5WaWRlb0NhbGxNaXNzZWQ6Y2FzZSBkUy5xTS5JbkNhbGw6Y2FzZSBkUy5xTS5SaW5naW5nOmNhc2UgZFMucU0uQ2FsbGluZzpjYXNlIGRTLnFNLlR5cGluZzpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX0odCxpLGEsbCksZz1uLmRpc3BsYXlUaW1lc3RhbXAseT1oJiZyJiZyLmNvdW50PjAmJnIuZXhwaXJhdGlvblRpbWVzdGFtcE1zPkRhdGUubm93KCksRT0oMCx0bC5tcSkocj8uZXhwaXJhdGlvblRpbWVzdGFtcE1zKTtyZXR1cm4gcz8oMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpQYi5jb252ZXJzYXRpb25TdGF0dXN9LHZvaWQgMCwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpQYi5jb252ZXJzYXRpb25UZXh0fSx2b2lkIDAsKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6UGIuaG92ZXJTdGF0dXNXcmFwcGVyfSx2b2lkIDAsKDAsby5aKShcInNwYW5cIix7fSx2b2lkIDAscyksKDAsby5aKShcInNwYW5cIix7Y2xhc3NOYW1lOlBiLmhvdmVySWNvbn0sdm9pZCAwLFNUfHwoU1Q9KDAsby5aKShBYix7fSkpKSkpKTphJiZpPygwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOlBiLmNvbnZlcnNhdGlvblN0YXR1c30sdm9pZCAwLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOlBiLmNvbnZlcnNhdGlvblRleHR9LHZvaWQgMCwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpQYi5ob3ZlclN0YXR1c1dyYXBwZXJ9LHZvaWQgMCwoMCxvLlopKE9iLHtjbGFzc05hbWU6UGIuZGlzbWlzc0ljb259KSxiVHx8KGJUPSgwLG8uWikodi5aLHtpZDpcImtnMlc3RVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiQ2xvc2UgQ2hhdFwifV19KSkpKSk6KDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6UGIuY29udmVyc2F0aW9uU3RhdHVzfSx2b2lkIDAsIXUmJigwLG8uWikodmIse2ZlZWRTdGF0dXM6dCxzbmFwSGFzQXVkaW86bSxsYXN0QWN0b3JJc1NlbGY6cCx2aWV3ZWQ6bi52aWV3ZWR9KSwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpQYi5jb252ZXJzYXRpb25UZXh0fSx2b2lkIDAsKDAsby5aKShcInNwYW5cIix7Y2xhc3NOYW1lOlBiLnN0YXR1c1RleHQsaWQ6YHN0YXR1cy0keygwLHouTWMpKGQpfWB9LHZvaWQgMCwoMCxvLlopKEFULHtmZWVkU3RhdHVzOnQsc25hcEhhc0F1ZGlvOm0saGFzVmlld2FibGVTbmFwc09uV2ViOmYsbGFzdEFjdG9ySXNTZWxmOnAsdmlld2VkOm4udmlld2VkLGZlZWRJdGVtQ3JlYXRvcklkOm4uZmVlZEl0ZW1DcmVhdG9ySWQsZmVlZEl0ZW1NdXRhdGVkTWVzc2FnZVNlbmRlcklkOm4uZmVlZEl0ZW1NdXRhdGVkTWVzc2FnZVNlbmRlcklkLGNvbnZlcnNhdGlvbklkOmQsaXNVc2VyTmV3RnJpZW5kOmx9KSksaCYmKDAsby5aKSh3Yix7fSx2b2lkIDAsKDAsby5aKShcInNwYW5cIix7fSx2b2lkIDAsKDAsby5aKShiYix7dGltZXN0YW1wOmd9KSkpLHkmJigwLG8uWikod2Ise30sdm9pZCAwLCgwLG8uWikoXCJzcGFuXCIse30sdm9pZCAwLCgwLG8uWikoTWIse3N0cmVha0NvdW50OnIuY291bnQsc2hvd0hvdXJnbGFzczpFfSkpKSxjJiYoVFR8fChUVD0oMCxvLlopKHdiLHt9LHZvaWQgMCwoMCxvLlopKERiLHt9KSkpKSkpfWNvbnN0IGtUPXthd2F5OlwiZWpWSTRcIixhdmF0YXI6XCJEc1JWWlwiLGNvbnRlbnQ6XCJSWm9Pa1wiLGhpZGRlbjpcInA0OFJnXCJ9O3ZhciBPVCxOVDtmdW5jdGlvbiB3VChlKXtsZXR7Y29udmVyc2F0aW9uOnQsY2xpY2tUb1Nob3c6bixvbkNsaWNrOnJ9PWU7Y29uc3QgaT1YYygpLGE9KDAsZC51c2VNZW1vKSgoKCk9PigwLFRlLkI2KSh0LmNvbnZlcnNhdGlvbklkKSksW3QuY29udmVyc2F0aW9uSWRdKSxzPWZ1bmN0aW9uKCl7Y29uc3QgZT0oMCxrLm8pKFRlLkxvKSx0PSgwLEZsLm8pKCk7cmV0dXJuIHQ/ZVsoMCx6Lk1jKSh0KV06dm9pZCAwfSgpLGM9KDAsay5vKShhKSxsPWk9PT1zPy5kaXNwbGF5SW5mby5mZWVkSXRlbUNyZWF0b3JJZCx1PXZvaWQgMCE9PWMmJiFsLGY9KDAsZC51c2VNZW1vKSgoKCk9PigwLHRsLnQwKSh0LGkpKSxbdCxpXSkscD1zPy5kaXNwbGF5SW5mby5mZWVkSXRlbS5zbmFwP3MuaW50ZXJhY3Rpb25JbmZvLm1lc3NhZ2VzPz9bXTpbXSx7b3BlblNuYXA6bX09dl8ocCwhMCk7cmV0dXJuKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6a1QuYXdheSxvbkNsaWNrOm4/cjp2b2lkIDB9LHZvaWQgMCwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTprVC5jb250ZW50fSx2b2lkIDAsKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6a1QuYXZhdGFyfSx2b2lkIDAsKDAsby5aKShHdSx7cGFydGljaXBhbnRzOmYsY29udmVyc2F0aW9uSWQ6dC5jb252ZXJzYXRpb25JZCxzaXplOjgwfSkpLCgwLG8uWikoWXUse2ZlZWRJdGVtOnR9KSx1JiZzJiYoMCxvLlopKFJULHtmZWVkU3RhdHVzOmMsZGlzcGxheUluZm86cy5kaXNwbGF5SW5mbyxzdHJlYWs6cy5zdHJlYWtNZXRhZGF0YSxmb2N1c2VkOiExLGhvdmVyZWQ6ITEsYWN0aW9uQnV0dG9uSG92ZXJUZXh0OlwiXCIsaXNVc2VyQmlydGhkYXk6ITEsaXNVc2VyTmV3RnJpZW5kOiExLGNvbnZlcnNhdGlvbklkOnQuY29udmVyc2F0aW9uSWQsaGFzVmlld2FibGVTbmFwc09uV2ViOnZvaWQgMCE9PW19KSxPVHx8KE9UPSgwLG8uWikoXCJoM1wiLHt9LHZvaWQgMCwoMCxvLlopKHYuWix7aWQ6XCJHM3VIdkhcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIllvdSBhcmUgbm8gbG9uZ2VyIHByZXNlbnQuXCJ9XX0pKSksKDAsby5aKShcInBcIix7Y2xhc3NOYW1lOigwLFEuWikoIW4mJmtULmhpZGRlbil9LHZvaWQgMCxOVHx8KE5UPSgwLG8uWikodi5aLHtpZDpcIncvbEFsNFwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiQ2xpY2sgYW55d2hlcmUgdG8gb3BlbiB0aGlzIGNvbnZlcnNhdGlvbiFcIn1dfSkpKSkpfXZhciBEVD1uKDE3MzUpO2NvbnN0IFBUPXttb2RhbDpcIlVyaVpMXCIsY29udGFpbmVyOlwiZ0lsb0VcIn07ZnVuY3Rpb24gTVQoZSl7bGV0e2NoaWxkcmVuOnQsb25DbGlja091dHNpZGU6bixjb250YWluZXJDbGFzc05hbWU6cn09ZTtjb25zdCBpPSRkKCgwLGQudXNlQ2FsbGJhY2spKCgoKT0+e24mJm4oKX0pLFtuXSkpO3JldHVybigwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOlBULm1vZGFsfSx2b2lkIDAsKDAscS5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTooMCxRLlopKFBULmNvbnRhaW5lcixyKSxyZWY6aSxjaGlsZHJlbjp0fSkpfXZhciBMVCxVVCx4VCxGVDtmdW5jdGlvbiBCVChlKXtsZXR7b25DbGlja0VuZDp0LG9uQ2xpY2tDYW5jZWw6bn09ZTtjb25zdCByPVpsKCgwLGsubykody5scykpO3JldHVybigwLG8uWikoTVQse30sdm9pZCAwLCgwLG8uWikoXCJoM1wiLHt9LHZvaWQgMCwhciYmKExUfHwoTFQ9KDAsby5aKSh2Llose2lkOlwicjRaVG9DXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJFbmQgY3VycmVudCBjYWxsP1wifV19KSkpLHImJigwLG8uWikodi5aLHtpZDpcImRJQmFXVVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiRW5kIGNhbGwgd2l0aCBcIn0se3R5cGU6MSx2YWx1ZTpcImNvbnZlcnNhdGlvbk5hbWVcIn0se3R5cGU6MCx2YWx1ZTpcIj9cIn1dLHZhbHVlczp7Y29udmVyc2F0aW9uTmFtZTpyfX0pKSwoMCxvLlopKFBkLHtvbkNsaWNrOnR9LHZvaWQgMCxVVHx8KFVUPSgwLG8uWikodi5aLHtpZDpcIjd1ZHdOQ1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiRW5kXCJ9XX0pKSksKDAsby5aKShQZCx7b25DbGljazpufSx2b2lkIDAseFR8fCh4VD0oMCxvLlopKHYuWix7aWQ6XCJXbmlsTTVcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkNhbmNlbFwifV19KSkpKX1mdW5jdGlvbiBWVCgpe3JldHVybiBWVD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LFZULmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBHVD1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIixWVCh7d2lkdGg6MTYsaGVpZ2h0OjE2LHZpZXdCb3g6XCIwIDAgMTYgMTZcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksRlR8fChGVD1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNLjY2MyAyLjMzNWMuMDYyLS4zMjUuMzUzLS43MDYuNjUyLS44NTJMMi42MzYuODM2Yy40NDctLjIxOCAxLjA4OC0uMTA2IDEuNDI3LjI1OSAwIDAgMS43OTUgMS43NzYgMi4wNTIgMi45MzkuMjU3IDEuMTYyLTEuMjUgMS4wNjYtMS4zMzUgMi40NUM0LjY5NCA3Ljg2OCA2LjQ0OSA5Ljc1IDYuNDQ5IDkuNzVzMi4wMzYgMS43NTMgMy4zMzcgMS42MzNjMS4zMDEtLjExOS42NjgtLjk4IDIuMDAzLTEuNDdzMy4zOSAxLjk1NCAzLjM5IDEuOTU0Yy4zNC4zNjQuNDI0IDEuMDEuMTg1IDEuNDQ4bC0uNjE5IDEuMTM2Yy0uMTU4LjI5LS41NS41ODUtLjg3Ni42NDIgMCAwLTQuNjQyIDEuMzU0LTkuNTktMy4zODNDLS42NjkgNi45NzQuNjYzIDIuMzM1LjY2MyAyLjMzNVpcIixmaWxsOlwiI2ZmZlwifSkpKTt2YXIgSFQ7ZnVuY3Rpb24gV1QoKXtyZXR1cm4gV1Q9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxXVC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y29uc3QgalQ9ZT0+ZC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsV1Qoe3dpZHRoOjE2LGhlaWdodDoxNix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLEhUfHwoSFQ9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTIuMDQ4IDUuNTQ4QTIuMjMyIDIuMjMyIDAgMCAxIDMuNjYgMy45N2wuMTc4LS4wNDRhOS45OSA5Ljk5IDAgMCAxIDQuODU3IDBsLjE3OS4wNDRjLjc4My4xOTcgMS4zOTkuOCAxLjYxIDEuNThhOC43NTYgOC43NTYgMCAwIDEgMCA0LjU5NyAyLjIzMiAyLjIzMiAwIDAgMS0xLjYxIDEuNThsLS4xOC4wNDRhOS45OSA5Ljk5IDAgMCAxLTQuODU2IDBsLS4xNzgtLjA0NWMtLjc4NC0uMTk2LTEuNC0uOC0xLjYxMi0xLjU3OWE4Ljc1NiA4Ljc1NiAwIDAgMSAwLTQuNTk4Wk0xMS43NjkgNy4yNTlhLjkwNi45MDYgMCAwIDEgLjQ2MS0uODI4bC44NzItLjQ4Ni42OTYtLjM4OGEuNDQ2LjQ0NiAwIDAgMSAuNjYzLjM5VjEwLjA1M2MwIC4zNC0uMzY2LjU1NS0uNjYzLjM5bC0xLjU2OC0uODc1YS45MDYuOTA2IDAgMCAxLS40NjEtLjgyOGMuMDEtLjI0LjAxOC0uNTE4LjAxOC0uNzQxIDAtLjIyMy0uMDA5LS41LS4wMTgtLjc0MVpcIixmaWxsOlwiIzMzQzU4RFwifSkpKTtmdW5jdGlvbiBaVChlKXtsZXR7Y2hpbGRyZW46dCxjbGFzc05hbWU6bixvbkNsaWNrOnJ9PWU7cmV0dXJuKDAsby5aKSh4cy5kaXYse2NsYXNzTmFtZTpuLGluaXRpYWw6e29wYWNpdHk6MH0sYW5pbWF0ZTp7b3BhY2l0eToxfSxleGl0OntvcGFjaXR5OjB9LG9uQ2xpY2s6cn0sdm9pZCAwLHQpfWNvbnN0IHpUPXtzZWN0aW9uQ29udGFpbmVyOlwiSHJWcWhcIixpbmRpdmlkdWFsU2VjdGlvbkNvbnRhaW5lcjpcInIwanpsXCIsbGVmdFNlY3Rpb25Db250YWluZXI6XCJIcHdUWiBIclZxaFwiLHJpZ2h0U2VjdGlvbkNvbnRhaW5lcjpcInNCSE1QIEhyVnFoXCIsZGVmYXVsdFBhcmVudENvbnRhaW5lcjpcIlNOOEdNXCIsYWN0aXZlUGFyZW50Q29udGFpbmVyOlwiREh5b3JcIixkZWZhdWx0Q29sb3JTZWN0aW9uOlwiQkJ0eG1cIixhY3RpdmVDb2xvclNlY3Rpb246XCJERnNhUVwiLGRlZmF1bHREaXZpZGVyOlwiRHNUQ2hcIixhY3RpdmVEaXZpZGVyOlwiSTNuR1dcIn07dmFyIEtULFlULHFUO2xldCBYVD1mdW5jdGlvbihlKXtyZXR1cm4gZVtlLkRFRkFVTFQ9MF09XCJERUZBVUxUXCIsZVtlLkFDVElWRT0xXT1cIkFDVElWRVwiLGV9KHt9KTtmdW5jdGlvbiBRVChlKXtsZXR7Y29sb3I6dCxpc0xlZnRDb250YWluZXI6bixvbkNsaWNrOnIsY2hpbGRyZW46aSxcImRhdGEtdGVzdGlkXCI6YSxkaXNhYmxlZDpzfT1lO3JldHVybigwLG8uWikoXCJidXR0b25cIix7dHlwZTpcImJ1dHRvblwiLGRpc2FibGVkOnMsY2xhc3NOYW1lOigwLFEuWikoelQuaW5kaXZpZHVhbFNlY3Rpb25Db250YWluZXIsbj96VC5sZWZ0U2VjdGlvbkNvbnRhaW5lcjp6VC5yaWdodFNlY3Rpb25Db250YWluZXIsdD09PVhULkRFRkFVTFQmJnpULmRlZmF1bHRDb2xvclNlY3Rpb24sdD09PVhULkFDVElWRSYmelQuYWN0aXZlQ29sb3JTZWN0aW9uKSxvbkNsaWNrOnJ9LHZvaWQgMCxpKX1mdW5jdGlvbiBKVChlKXtsZXR7bWVzc2FnZURlc2NyaXB0b3I6dCxjbGFzc05hbWU6bixjb2xvcjpyLG9uQ2xpY2s6aSxkaXNhYmxlZDphfT1lO2NvbnN0IHM9KDAsbWUuWikoKTtyZXR1cm4oMCxvLlopKFpULHtjbGFzc05hbWU6KDAsUS5aKShuLHI9PT1YVC5ERUZBVUxUJiZ6VC5kZWZhdWx0UGFyZW50Q29udGFpbmVyLHI9PT1YVC5BQ1RJVkUmJnpULmFjdGl2ZVBhcmVudENvbnRhaW5lcil9LHZvaWQgMCwoMCxvLlopKFFULHtjb2xvcjpyLGRpc2FibGVkOmEsaXNMZWZ0Q29udGFpbmVyOiEwLG9uQ2xpY2s6KCk9PmkoITApfSx2b2lkIDAsKDAsby5aKShcInNwYW5cIix7fSx2b2lkIDAscy5mb3JtYXRNZXNzYWdlKHQpKSxLVHx8KEtUPSgwLG8uWikoalQse3dpZHRoOjE2LGhlaWdodDoxNn0pKSksKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6KDAsUS5aKShyPT09WFQuREVGQVVMVCYmelQuZGVmYXVsdERpdmlkZXIscj09PVhULkFDVElWRSYmelQuYWN0aXZlRGl2aWRlcil9LHZvaWQgMCxZVHx8KFlUPSgwLG8uWikoVW0se30pKSksKDAsby5aKShRVCx7Y29sb3I6cixkaXNhYmxlZDphLGlzTGVmdENvbnRhaW5lcjohMSxvbkNsaWNrOigpPT5pKCExKX0sdm9pZCAwLHFUfHwocVQ9KDAsby5aKShHVCx7d2lkdGg6MTIsaGVpZ2h0OjEyfSkpKSl9Y29uc3QgJFQ9e2J1dHRvbjpcIkJmQ0c3XCIsdG9hc3RDb250YWluZXI6XCJJOU83SlwifTt2YXIgZUM7QygpLmdldExvZ2dlcihcIkNoYXRIZWFkZXJDYWxsQnV0dG9uc1wiKTtjb25zdCB0Qz01ZTMsbkM9e3N0YXJ0OntpZDpcIjFuVlM5VVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiQ2FsbFwifV19LGpvaW46e2lkOlwiTlU4Zm5WXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJKb2luXCJ9XX19O2Z1bmN0aW9uIHJDKGUpe2xldHtjb252ZXJzYXRpb246dCxkaXNhYmxlQ2FsbEJ1dHRvbnM6bn09ZTtjb25zdCByPWZ1bmN0aW9uKGUpe2NvbnN0IHQ9U3UoZSksbj1BdShlLmNvbnZlcnNhdGlvbklkKSxyPVFsKGUuY29udmVyc2F0aW9uSWQpO2lmKCF0fHxyKXJldHVybiAyO2lmKG4mJihuLmNhbGxNZWRpYSE9PWV1LnBVLk5PTkV8fG4ucmluZ2luZykpe2lmKG4ubG9jYWxQdWJsaXNoZWRNZWRpYSE9PWV1LnBVLk5PTkUpcmV0dXJuIDI7aWYoZS5jb252ZXJzYXRpb25UeXBlPT09UGUuaTEuVVNFUkNSRUFURURHUk9VUClyZXR1cm4gMX1yZXR1cm4gMH0odCksW2ksYV09KDAsZC51c2VTdGF0ZSkodm9pZCAwKSxzPWh1KHQuY29udmVyc2F0aW9uSWQpLFtsLHVdPSgwLGQudXNlU3RhdGUpKHZvaWQgMCkse3Nob3dUb2FzdDpmLGFjdGl2ZVRvYXN0czpwLGhpZGVUb2FzdDptfT1KZCgpLGg9ZT0+e3Uodm9pZCAwKTtjb25zdCBuPSgpPT57aWYoKDAsaXUuUEMpKHQuY29udmVyc2F0aW9uSWQpLDA9PT1yKXRyeXsoMCxpdS5xOCkodCxlLERULnQuQ0hBVCl9Y2F0Y2goZSl7ZSBpbnN0YW5jZW9mIEVycm9yJiYodShlKSxiKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcImNoYXRfaGVhZGVyX2NhbGxfYnV0dG9uc19zdGFydENhbGxfZmFpbHVyZVwifSksKDAsYy5UYikoZSkpfWVsc2UoMCxpdS5QVykodCxlLFwiaGVhZGVyXCIpO2Eodm9pZCAwKX07cz9hKCgoKT0+bikpOm4oKX07cmV0dXJuKDAsZC51c2VFZmZlY3QpKCgoKT0+e2w/KG0oXCJjaGF0LWhlYWRlci1jYWxsLWJ1dHRvbnMtZXJyb3JcIiksZih7a2V5OlwiY2hhdC1oZWFkZXItY2FsbC1idXR0b25zLWVycm9yXCIsdHlwZTpRZC5OZWdhdGl2ZSx0aW1lb3V0OnRDLGNvbnRlbnQ6ZUN8fChlQz0oMCxvLlopKHYuWix7aWQ6XCJOS3lIcjdcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkNvdWxkIG5vdCBzdGFydCBjYWxsLlwifV19KSl9KSk6bShcImNoYXQtaGVhZGVyLWNhbGwtYnV0dG9ucy1lcnJvclwiKX0pLFtsLGYsbV0pLCgwLHEuanN4cykocS5GcmFnbWVudCx7Y2hpbGRyZW46W3ZvaWQgMCE9PWkmJigwLG8uWikoUm0se30sdm9pZCAwLCgwLG8uWikoQlQse29uQ2xpY2tFbmQ6aSxvbkNsaWNrQ2FuY2VsOigpPT5hKHZvaWQgMCl9KSksKDAsby5aKShmZCx7bW9kZTpcIndhaXRcIn0sdm9pZCAwLCgwLG8uWikoUUkse2NsYXNzTmFtZTokVC50b2FzdENvbnRhaW5lcixhY3RpdmVUb2FzdHM6cCx0b3BPZmZzZXQ6MTR9KSwwPT09ciYmKDAsby5aKShKVCx7ZGlzYWJsZWQ6bixtZXNzYWdlRGVzY3JpcHRvcjpuQy5zdGFydCxjbGFzc05hbWU6JFQuYnV0dG9uLGNvbG9yOlhULkRFRkFVTFQsb25DbGljazpofSxcInN0YXJ0XCIpLDE9PT1yJiYoMCxvLlopKEpULHtkaXNhYmxlZDpuLG1lc3NhZ2VEZXNjcmlwdG9yOm5DLmpvaW4sY2xhc3NOYW1lOiRULmJ1dHRvbixjb2xvcjpYVC5BQ1RJVkUsb25DbGljazpofSxcImpvaW5cIikpXX0pfXZhciBpQyxvQztmdW5jdGlvbiBhQygpe3JldHVybiBhQz1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGFDLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBzQz1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIixhQyh7d2lkdGg6MjQsaGVpZ2h0OjI0LHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksaUN8fChpQz1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMTQuMjkgNC41SDkuMDMyQzcuMjIgNC41IDUuNzUgNS45MzIgNS43NSA3Ljd2Ni4zOTdDNS43NSAxNS44NjQgNy4yMiAxNyA5LjAzMSAxN2g1Ljc1MmwzLjA2IDIuMzg0Yy4xMS4wNzYuMjQxLjExNi4zNzYuMTE2YS42NDguNjQ4IDAgMCAwIC42NTYtLjY0VjkuOTA0QTQgNCAwIDAgMSAxNC4yOTEgNC41Wm0xLjgwNy4wMzdhMi40IDIuNCAwIDAgMCAyLjc3OCAzLjY5OFY3LjdjMC0xLjYtMS4yMDUtMi45MjUtMi43NzgtMy4xNjJaXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSkpLG9DfHwob0M9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwiTTIxIDZhMyAzIDAgMSAxLTYgMCAzIDMgMCAwIDEgNiAwWlwiLGZpbGw6XCJ2YXIoLS1zaWdCcmFuZFNlY29uZGFyeSlcIn0pKSk7dmFyIGNDO2Z1bmN0aW9uIGxDKCl7cmV0dXJuIGxDPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sbEMuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IHVDPWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLGxDKHt3aWR0aDoyNCxoZWlnaHQ6MjQsdmlld0JveDpcIjAgMCAyNCAyNFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSxjQ3x8KGNDPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIk0xOC44NzUgNy43djExLjE2YzAgLjM1NC0uMjk0LjY0LS42NTYuNjRhLjY2OC42NjggMCAwIDEtLjM3Ny0uMTE2TDE0Ljc4MyAxN0g5LjAzMUM3LjIyIDE3IDUuNzUgMTUuODY0IDUuNzUgMTQuMDk3VjcuN0M1Ljc1IDUuOTMyIDcuMjIgNC41IDkuMDMxIDQuNWg2LjU2M2MxLjgxMiAwIDMuMjgxIDEuNDMyIDMuMjgxIDMuMlpcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KSkpO3ZhciBkQz1uKDg5NDE1KSxmQz1uKDIwNTczKTtjb25zdCBwQz0oMCxmQy5QMSkoU2wuc2wsSS55SyxTbC5tNCwoKGUsdCxuKT0+e2xldCByPVJoKCkoZS5tYXAoKGU9Pm4uZ2V0KGUpKSkpO3JldHVybiB0JiYocj1yLmZpbHRlcigoZT0+ZS51c2VyX2lkIT09dCkpKSxyfSkpO2Z1bmN0aW9uIG1DKCl7cmV0dXJuKDAsay5vKShwQyl9dmFyIGhDPXtIRUFERVI6MCxVU0VSOjEsQUxSRUFEWV9TRUxFQ1RFRF9VU0VSOjIsQUxSRUFEWV9TRUxFQ1RFRF9HUk9VUDozLEJFU1RfRlJJRU5EOjQsR1JPVVA6NSxSRUNFTlRfVVNFUjo2LFJFQ0VOVF9HUk9VUDo3LFBBR0lOQVRFX1RSSUdHRVI6OCxORVdfR1JPVVA6OX0sdkM9e1NOQVBfU0VORF9UTzowLE5FV19DSEFUOjEsQUREX1BBUlRJQ0lQQU5UX1RPX0NBTEw6Mn0sZ0M9bigzNTE2MSkseUM9bi5uKGdDKSxFQz1uKDkzMjIwKSxfQz1uLm4oRUMpLElDPW4oNzczOSksU0M9bi5uKElDKTtmdW5jdGlvbiBiQyhlKXtjb25zdCB0PVsuLi5UQyhlKV0sbj1mdW5jdGlvbihlKXtjb25zdCB0PWUuZmlsdGVyKChlPT4ha0MoUkMoKDAsYmwuYjMpKGUpKSkpKS5zb3J0KEFDKTtyZXR1cm57aGVhZGVyTGFiZWw6Q0MsdXNlcnM6dH19KGUpO3JldHVybiBuLnVzZXJzLmxlbmd0aD4wJiZ0LnB1c2gobiksdH1mdW5jdGlvbiBUQyhlKXtjb25zdCB0PWUuZmlsdGVyKChlPT5rQyhSQygoMCxibC5iMykoZSkpKSkpLnNvcnQoQUMpLG49U0MoKSh0LChlPT5SQygoMCxibC5iMykoZSkpKSkscj1fQygpKG4pLnNvcnQoKChlLHQpPT57Y29uc3Qgbj1lWzBdLHI9dFswXTtyZXR1cm4gbi5sb2NhbGVDb21wYXJlKHIpfSkpLGk9eUMoKShyLChlPT57bGV0W3Qsbl09ZTtyZXR1cm57aGVhZGVyTGFiZWw6dCx1c2VyczpufX0pKTtyZXR1cm4gaX1jb25zdCBDQz1cIiNcIjtmdW5jdGlvbiBBQyhlLHQpe3JldHVybigwLGJsLmIzKShlKS5sb2NhbGVDb21wYXJlKCgwLGJsLmIzKSh0KSl9ZnVuY3Rpb24gUkMoZSl7cmV0dXJuXCJcIj09PWU/XCJcIjplLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIGtDKGUpe3JldHVybi9eW2EtekEtWl0vLnRlc3QoZSl9Y29uc3QgT0M9XCJcIjtmdW5jdGlvbiBOQyhlKXtzd2l0Y2goZSl7Y2FzZSBoQy5VU0VSOmNhc2UgaEMuQUxSRUFEWV9TRUxFQ1RFRF9VU0VSOmNhc2UgaEMuQUxSRUFEWV9TRUxFQ1RFRF9HUk9VUDpjYXNlIGhDLkJFU1RfRlJJRU5EOmNhc2UgaEMuR1JPVVA6Y2FzZSBoQy5SRUNFTlRfVVNFUjpjYXNlIGhDLlJFQ0VOVF9HUk9VUDpjYXNlIGhDLk5FV19HUk9VUDpyZXR1cm4hMDtjYXNlIGhDLkhFQURFUjpjYXNlIGhDLlBBR0lOQVRFX1RSSUdHRVI6cmV0dXJuITF9fWZ1bmN0aW9uIHdDKGUsdCxuKXtyZXR1cm4gbiYmKGU9ZS5maWx0ZXIoKGU9PiFuLmhhcyhlLnVzZXJfaWQpKSkpLHQ9PT1PQz9lOmUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB0PT57Y29uc3Qgbj1lLnRvTG93ZXJDYXNlKCkscj1lPT5lPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG4pO3JldHVybiByKHQuZGlzcGxheSl8fHIodC5kaXNwbGF5X25hbWUpfHxyKHQubXV0YWJsZV91c2VybmFtZSl9fSh0KSl9Y29uc3QgREM9KGUsdCk9Pk5DKHRbZV0udHlwZSkmJmU+MCYmdFtlLTFdLnR5cGU9PT1oQy5IRUFERVIsUEM9KGUsdCk9Pk5DKHRbZV0udHlwZSkmJmU8dC5sZW5ndGgmJihlPT09dC5sZW5ndGgtMXx8dFtlKzFdLnR5cGU9PT1oQy5IRUFERVIpO2Z1bmN0aW9uIE1DKGUsdCl7cmV0dXJue2hlYWRlckxhYmVsOmUuZm9ybWF0TWVzc2FnZSh7aWQ6XCJUeXBZTWxcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlJlc3VsdHNcIn1dfSksdXNlcnM6dH19Y29uc3QgTEM9e3RpdGxlSWNvbjpcIm9WOHQ3XCIsaWNvbkZsaXBzSW5SdGw6XCJSYks3NFwiLHNlYXJjaENvbnRhaW5lcjpcIklNcUJuXCIsc2VhcmNoSW5wdXQ6XCJrNTIxV1wiLGFkZFRvR3JvdXBTZWN0aW9uczpcIlNZcTkxXCIsY29uZmlybUJ1dHRvbkNvbnRhaW5lcjpcIkRUQmhnXCIsY29uZmlybUJ1dHRvbjpcIlZ6VWNkXCIsc2VjdGlvbkhlYWRlcjpcIktHVThXXCJ9O3ZhciBVQyx4QztmdW5jdGlvbiBGQygpe3JldHVybiBGQz1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LEZDLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBCQz1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIixGQyh7d2lkdGg6MjYsaGVpZ2h0OjI2LHZpZXdCb3g6XCIwIDAgMjYgMjZcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksVUN8fChVQz1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNMCAxM0MwIDUuODIgNS44MiAwIDEzIDBzMTMgNS44MiAxMyAxMy01LjgyIDEzLTEzIDEzUzAgMjAuMTggMCAxM1pcIixmaWxsOlwiIzUxQjdGRlwifSkpLHhDfHwoeEM9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwibTExLjgzNyAxNC4yMzUgNC43OTctNC43OTdhMS4wMTYgMS4wMTYgMCAwIDEgMS40MzYgMS40MzZsLTUuNTE1IDUuNTE1YTEuMDE2IDEuMDE2IDAgMCAxLTEuNDM2IDBsLTIuNC0yLjRhMS4wMTYgMS4wMTYgMCAxIDEgMS40MzctMS40MzZsMS42ODEgMS42ODJaXCIsZmlsbDpcIiNmZmZcIn0pKSksVkM9e2ZyaWVuZENlbGw6XCJacDVCeVwiLGZyaWVuZEF2YXRhckFuZE5hbWU6XCJUSDZ2QVwiLGZyaWVuZEF2YXRhcjpcIlhDbTBMXCIsZnJpZW5kRGlzcGxheU5hbWU6XCJVcThXTFwiLGZyaWVuZENoZWNrYm94SWNvbjpcImZFZmJHXCIsZnJpZW5kQ2hlY2tib3g6XCJXUFNfY1wifTtmdW5jdGlvbiBHQyhlKXtsZXR7ZnJpZW5kOnQsaXNTZWxlY3RlZDpufT1lO3JldHVybigwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOlZDLmZyaWVuZENlbGx9LHZvaWQgMCwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpWQy5mcmllbmRBdmF0YXJBbmROYW1lfSx2b2lkIDAsKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6VkMuZnJpZW5kQXZhdGFyfSx2b2lkIDAsKDAsby5aKShCdSx7dXNlcklkOnQudXNlcl9pZCxzaXplOjM2fSkpLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOlZDLmZyaWVuZERpc3BsYXlOYW1lfSx2b2lkIDAsKDAsYmwuYjMpKHQpKSksbiYmKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6VkMuZnJpZW5kQ2hlY2tib3h9LHZvaWQgMCwoMCxvLlopKEJDLHtjbGFzc05hbWU6VkMuZnJpZW5kQ2hlY2tib3hJY29uLFwiYXJpYS1sYWJlbFwiOlwiVW5zZWxlY3QgY2hvc2VuIGZyaWVuZFwifSkpKX1mdW5jdGlvbiBIQyhlLHQsbixyKXtyZXR1cm5bLi4uZS5oZWFkZXJMYWJlbD9bZ0Uoe2tleTpgYWRkLXRvLWdyb3VwLXNlY3Rpb24taGVhZGVyLSR7ZS5oZWFkZXJMYWJlbH1gLGNvbnRlbnQ6KDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6TEMuc2VjdGlvbkhlYWRlcn0sdm9pZCAwLGUuaGVhZGVyTGFiZWwpLGRpc2FibGVkOiEwLGFyaWFMYWJlbDplLmhlYWRlckxhYmVsfSldOltdLC4uLmUudXNlcnMubWFwKChlPT5nRSh7a2V5OmBhZGQtdG8tZ3JvdXAtbWVudS0ke24/XCJiZXN0LWZyaWVuZFwiOlwiZnJpZW5kXCJ9LWNlbGwtJHsoMCx6Lk1jKShlLnVzZXJfaWQpfWAsYXJpYUxhYmVsOigwLGJsLmIzKShlKSxjb250ZW50OigwLG8uWikoR0Mse2ZyaWVuZDplLGlzU2VsZWN0ZWQ6dC5pbmNsdWRlcyhlLnVzZXJfaWQpfSwoMCx6Lk1jKShlLnVzZXJfaWQpKSxvblNlbGVjdGVkOigpPT57cihlLnVzZXJfaWQpfSxtZW51T3BlblBvc3RTZWxlY3Rpb246ITB9KSkpXX1mdW5jdGlvbiBXQyhlKXtsZXR7c2V0U2VhcmNoUXVlcnk6dCxpbnB1dFJlZjpuLGludGw6cn09ZTtjb25zdHtzZXRIaWdobGlnaHRlZEluZGV4Oml9PXBFKCk7cmV0dXJuKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6TEMuc2VhcmNoQ29udGFpbmVyfSx2b2lkIDAsKDAscS5qc3gpKFwiaW5wdXRcIix7Y2xhc3NOYW1lOkxDLnNlYXJjaElucHV0LHBsYWNlaG9sZGVyOnIuZm9ybWF0TWVzc2FnZSh7aWQ6XCJsZHVPUU5cIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlNlYXJjaFwifV19KSxyZWY6bixvbkNoYW5nZTplPT57cmV0dXJuIG49ZS50YXJnZXQudmFsdWUsdChuKSx2b2lkIGkoLTEpO3ZhciBufX0pKX1mdW5jdGlvbiBqQyhlKXtsZXR7aW50bDp0fT1lO2NvbnN0IG49dC5mb3JtYXRNZXNzYWdlKHtpZDpcImNjSXQ3aVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiQWRkXCJ9XX0pO3JldHVybigwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOkxDLmNvbmZpcm1CdXR0b25Db250YWluZXJ9LHZvaWQgMCwoMCxvLlopKFBkLHtjbGFzc05hbWU6TEMuY29uZmlybUJ1dHRvbixub1BhZGRpbmc6ITB9LHZvaWQgMCxuKSl9ZnVuY3Rpb24gWkMoZSx0KXtzd2l0Y2godCl7Y2FzZSBQZS51ai5BTExfTUVTU0FHRVM6cmV0dXJuIGUuZm9ybWF0TWVzc2FnZSh7aWQ6XCJEQytVOWhcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkFsbCBNZXNzYWdlc1wifV19KTtjYXNlIFBlLnVqLk1FTlRJT05fT05MWTpyZXR1cm4gZS5mb3JtYXRNZXNzYWdlKHtpZDpcIjR1SHAwaFwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiTWVudGlvbnMgT25seVwifV19KTtjYXNlIFBlLnVqLlNJTEVOVDpyZXR1cm4gZS5mb3JtYXRNZXNzYWdlKHtpZDpcIk5RR1hvVFwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiU2lsZW50XCJ9XX0pO2RlZmF1bHQ6cmV0dXJuXCJcIn19QygpLmdldExvZ2dlcihcIltBZGQgdG8gR3JvdXBdXCIpO3ZhciB6QyxLQz17Tm90aWZpY2F0aW9uU2V0dGluZ3M6MCxSZXRlbnRpb25Nb2RlU2V0dGluZ3M6MSxBZGRGcmllbmRUb0dyb3VwOjIsTm9uZTozfTtmdW5jdGlvbiBZQygpe3JldHVybiBZQz1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LFlDLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBxQz1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIixZQyh7d2lkdGg6MTIsaGVpZ2h0OjEzLHZpZXdCb3g6XCIwIDAgMTIgMTNcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksekN8fCh6Qz1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNLjEzIDEuOTY4Yy4wNS0uMjYuMjgzLS41NjUuNTIyLS42ODJMMS43MDkuNzdjLjM1Ny0uMTc1Ljg3LS4wODUgMS4xNDEuMjA3IDAgMCAxLjQzNiAxLjQyIDEuNjQyIDIuMzUxLjIwNS45My0xIC44NTMtMS4wNjggMS45NkMzLjM1NSA2LjM5NCA0Ljc1OSA3LjkgNC43NTkgNy45czEuNjMgMS40MDIgMi42NyAxLjMwN2MxLjA0LS4wOTYuNTM0LS43ODQgMS42MDItMS4xNzYgMS4wNjgtLjM5MiAyLjcxMiAxLjU2MiAyLjcxMiAxLjU2Mi4yNzIuMjkyLjM0LjgxLjE0OCAxLjE2bC0uNDk1LjkwOGMtLjEyNi4yMzItLjQ0LjQ2OC0uNzAxLjUxMyAwIDAtMy43MTMgMS4wODMtNy42NzItMi43MDZDLS45MzUgNS42OC4xMzEgMS45NjguMTMxIDEuOTY4WlwiLGZpbGw6XCIjMzNDNThEXCJ9KSkpLFhDPXtjb250YWluZXI6XCJXYUZsSFwiLGluQ2FsbEF2YXRhcjpcIlRTZDlHXCIscGFydGljaXBhbnREZXRhaWxzOlwib3VNaHBcIixpbkNhbGxUZXh0Olwib3NSZTFcIn07dmFyIFFDLEpDO2Z1bmN0aW9uICRDKGUpe2xldHtwYXJ0aWNpcGFudDp0fT1lO2NvbnN0e3VzZXJJZDpuLGlzSW5DYWxsOnJ9PXQsaT1SbChuKTtyZXR1cm4oMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTooMCxRLlopKFhDLmNvbnRhaW5lcil9LHZvaWQgMCwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTooMCxRLlopKHImJlhDLmluQ2FsbEF2YXRhcil9LHZvaWQgMCwoMCxvLlopKEJ1LHtzaXplOjM0LHVzZXJJZDpufSkpLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOlhDLnBhcnRpY2lwYW50RGV0YWlsc30sdm9pZCAwLCgwLG8uWikoXCJzcGFuXCIse30sdm9pZCAwLGkpLHImJigwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOlhDLmluQ2FsbFRleHR9LHZvaWQgMCxRQ3x8KFFDPSgwLG8uWikocUMse30pKSxKQ3x8KEpDPSgwLG8uWikoXCJzcGFuXCIse30sdm9pZCAwLCgwLG8uWikodi5aLHtpZDpcInBNMUxEblwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiSW4gY2FsbFwifV19KSkpKSkpfWNvbnN0IGVBPXt0aXRsZTpcIlBwdzRhXCIsZXhwYW5kZWQ6XCJyTHJmQVwiLGV4cGFuZDpcImFhZlFGXCJ9O3ZhciB0QTtmdW5jdGlvbiBuQSgpe3JldHVybiBuQT1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LG5BLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCByQT1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIixuQSh7d2lkdGg6MTYsaGVpZ2h0OjE2LHZpZXdCb3g6XCIwIDAgMTYgMTZcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLHRBfHwodEE9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwiTTkuMzEzIDkuMzEzdjQuODc0YTEuMzEyIDEuMzEyIDAgMSAxLTIuNjI2IDBWOS4zMTRIMS44MTNhMS4zMTMgMS4zMTMgMCAwIDEgMC0yLjYyNmg0Ljg3NVYxLjgxM2ExLjMxMyAxLjMxMyAwIDAgMSAyLjYyNSAwdjQuODc1aDQuODc2YTEuMzEyIDEuMzEyIDAgMSAxIDAgMi42MjVIOS4zMTFaXCJ9KSkpLGlBPXtidXR0b246XCJIWEg4TVwiLGJ1dHRvblRpdGxlOlwiam85RmZcIn07dmFyIG9BLGFBLHNBLGNBO2Z1bmN0aW9uIGxBKCl7cmV0dXJuKDAsby5aKShQZCx7Y2xhc3NOYW1lOmlBLmJ1dHRvbixub1BhZGRpbmc6ITB9LHZvaWQgMCxvQXx8KG9BPSgwLG8uWikockEse2hlaWdodDpcIjguNzVweFwiLHdpZHRoOlwiOC43NXB4XCJ9KSksKDAsby5aKShcInNwYW5cIix7Y2xhc3NOYW1lOmlBLmJ1dHRvblRpdGxlfSx2b2lkIDAsYUF8fChhQT0oMCxvLlopKHYuWix7aWQ6XCJQbFhubUVcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkFkZFwifV19KSkpKX1mdW5jdGlvbiB1QSgpe3JldHVybiB1QT1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LHVBLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBkQT1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIix1QSh7d2lkdGg6MTAsaGVpZ2h0OjExLHZpZXdCb3g6XCIwIDAgMTAgMTFcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksY0F8fChjQT1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJtNi4zOSA1LjUgMi44NzMgMi44NzNhMS4wOTQgMS4wOTQgMCAwIDEtMS41NDcgMS41NDZMNC44NDQgNy4wNDcgMS45NyA5LjkxOUExLjA5NCAxLjA5NCAwIDAgMSAuNDI0IDguMzczTDMuMjk3IDUuNS40MjQgMi42MjdhMS4wOTQgMS4wOTQgMCAwIDEgMS41NDctMS41NDZsMi44NzMgMi44NzIgMi44NzItMi44NzJhMS4wOTQgMS4wOTQgMCAwIDEgMS41NDcgMS41NDZMNi4zOTEgNS41WlwiLGZpbGw6XCIjNzY3Njc2XCJ9KSkpO3ZhciBmQSxwQTtmdW5jdGlvbiBtQSgpe3JldHVybiBtQT1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LG1BLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBoQT1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIixtQSh7d2lkdGg6MTQsaGVpZ2h0OjE0LHZpZXdCb3g6XCIwIDAgMTQgMTRcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksZkF8fChmQT1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNOS45MTMgMS41OGEyIDIgMCAwIDEgMi44MjkgMi44M2wtLjIwMi4yMDFhLjM4MS4zODEgMCAwIDEtLjUzOSAwbC0yLjI5LTIuMjlhLjM4MS4zODEgMCAwIDEgMC0uNTM4bC4yMDItLjIwMlpcIixmaWxsOlwiIzc2NzY3NlwifSkpLHBBfHwocEE9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTguODUzIDMuMzQ5YS41LjUgMCAwIDAtLjcwNyAwTC43MjQgMTAuNzcuMzUgMTMuNDA3YS41LjUgMCAwIDAgLjU2NS41NjVsMi42MzYtLjM3MyA3LjQyMi03LjQyMmEuNS41IDAgMCAwIDAtLjcwN0w4Ljg1MyAzLjM0OVpcIixmaWxsOlwiIzc2NzY3NlwifSkpKSx2QT17Y29udGFpbmVyOlwiVnh3eHVcIixmb3JtOlwiY2c0MkhcIixpbnB1dDpcIks3MkVvXCJ9LGdBPTMwO2Z1bmN0aW9uIHlBKGUpe2xldHtjb252ZXJzYXRpb246dCx0aXRsZTpufT1lO2NvbnN0W3IsaV09KDAsZC51c2VTdGF0ZSkodC50aXRsZSksYT1EZigpLFtzLGNdPSgwLGQudXNlU3RhdGUpKCExKSxbbCx1XT0oMCxkLnVzZVN0YXRlKSghMSksZj0oMCxkLnVzZVJlZikobnVsbCkscD0oMCxrLm8pKFRlLkpKKSxtPSgwLGsubykoVGUuRkYpLHtyZWxlYXNlRm9jdXM6aH09cEUoKSx2PWpkKCk7IWZ1bmN0aW9uKGUpe2xldHtvblNlbGVjdGVkOnR9PWU7Y29uc3Qgbj0oMCxkLnVzZUNvbnRleHQpKGZFKSx7c2VsZWN0ZWRLZXk6cixyZXNldFNlbGVjdGlvbjppfT0oMCxkLnVzZUNvbnRleHQpKGRFKSxvPXZvaWQgMCE9PW4mJm49PT1yOygwLGQudXNlRWZmZWN0KSgoKCk9PntvJiYodCgpLHNldFRpbWVvdXQoKCgpPT57aSgpfSksMCkpfSksW28sdCxpXSl9KHtvblNlbGVjdGVkOigwLGQudXNlQ2FsbGJhY2spKCgoKT0+e2YuY3VycmVudD8uZm9jdXMoKSx1KCEwKX0pLFtdKX0pO2NvbnN0IGc9KCk9PntmLmN1cnJlbnQ/LmJsdXIoKSxoKCl9LHk9KDAsZC51c2VDYWxsYmFjaykoKGFzeW5jIGU9PntjKCEwKTt0cnl7ZSYmKGF3YWl0IHAodC5jb252ZXJzYXRpb25JZCxlKSxhd2FpdCBtKHQuY29udmVyc2F0aW9uSWQpKX1jYXRjaChlKXt9ZmluYWxseXthLmN1cnJlbnQmJihjKCExKSxmLmN1cnJlbnQ/LmZvY3VzKCkpfX0pLFt0LmNvbnZlcnNhdGlvbklkLGEscCxtXSksRT1Cb29sZWFuKHI/Lmxlbmd0aCkmJihsPygwLG8uWikoZEEse29uTW91c2VEb3duOigpPT57aShcIlwiKX0sb25Ub3VjaEVuZDooKT0+e2koXCJcIil9fSk6KDAsby5aKShoQSx7b25DbGljazooKT0+dSghMCl9KSk7cmV0dXJuKDAscS5qc3gpKHEuRnJhZ21lbnQse2NoaWxkcmVuOigwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOnZBLmNvbnRhaW5lcn0sdm9pZCAwLCgwLG8uWikoXCJmb3JtXCIse2NsYXNzTmFtZTp2QS5mb3JtLG9uU3VibWl0OmFzeW5jIGU9PntlLnByZXZlbnREZWZhdWx0KCkscj8ubGVuZ3RoJiZyLmxlbmd0aDw9Z0EmJnIhPT10LnRpdGxlJiZhd2FpdCB5KHIpLGcoKX19LHZvaWQgMCwoMCxxLmpzeCkoXCJpbnB1dFwiLHtkaXI6dixjbGFzc05hbWU6dkEuaW5wdXQscGxhY2Vob2xkZXI6bix2YWx1ZTpyLG9uQ2hhbmdlOmU9PmkoZS50YXJnZXQudmFsdWUpLG9uRm9jdXM6KCk9PnUoITApLG9uQmx1cjooKT0+dSghMSksb25LZXlEb3duQ2FwdHVyZTplPT57XCJFc2NhcGVcIj09PWUua2V5JiYoaSh0LnRpdGxlKSxnKCkpLGUubmF0aXZlRXZlbnQucHJldmVudERvd25zaGlmdERlZmF1bHQ9ITB9LG1heExlbmd0aDpnQSxkaXNhYmxlZDpzLHJlZjpmfSkpLEUpfSl9ZnVuY3Rpb24gRUEoZSx0LG4pe2NvbnN0IHI9dCE9PUtDLk5vbmUsaT1mdW5jdGlvbihlLHQpe2NvbnN0IG49ZnVuY3Rpb24oZSx0KXtjb25zdCBuPXl1KGUuY29udmVyc2F0aW9uSWQpO3JldHVyblsuLi5lLnBhcnRpY2lwYW50c10uZmlsdGVyKChlPT5lLnBhcnRpY2lwYW50SWQhPT10KSkubWFwKChlPT4oe3VzZXJJZDplLnBhcnRpY2lwYW50SWQsaXNJbkNhbGw6KDAsZEMuTikobi5nZXQoKDAsei5NYykoZS5wYXJ0aWNpcGFudElkKSkpfSkpKS5zb3J0KCgoZSx0KT0+ZS5pc0luQ2FsbD09PXQuaXNJbkNhbGw/MDplLmlzSW5DYWxsPy0xOjEpKX0oZSxYYygpKSxyPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj10LmZvcm1hdE1lc3NhZ2Uoe2lkOlwiRzdXTGNzXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJOYW1lIGdyb3VwXCJ9XX0pO3JldHVybiBnRSh7a2V5OlwibmFtZS1lZGl0b3JcIixhcmlhTGFiZWw6bixjb250ZW50OigwLG8uWikoeUEse2NvbnZlcnNhdGlvbjplLHRpdGxlOm59KX0pfShlLCgwLG1lLlopKCkpLGk9ZnVuY3Rpb24oZSx0KXtjb25zdFtuLHJdPSgwLGQudXNlU3RhdGUpKCExKSxpPW4/ZTplLnNsaWNlKDAsMyksYT1lLmxlbmd0aD4zLHM9KDAsbWUuWikoKSxjPVt5RSh7aXRlbXM6W2dFKHtrZXk6XCJtZW1iZXJzLWxpc3QtaGVhZGVyLXRpdGxlXCIsYXJpYUxhYmVsOlwiXCIsY29udGVudDooMCxvLlopKHYuWix7aWQ6XCJHdHJvV1NcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MSx2YWx1ZTpcImdyb3VwTWVtYmVyQ291bnRcIn0se3R5cGU6MCx2YWx1ZTpcIiBHcm91cCBNZW1iZXJzXCJ9XSx2YWx1ZXM6e2dyb3VwTWVtYmVyQ291bnQ6ZS5sZW5ndGh9fSksZGlzYWJsZWQ6ITB9KSxnRSh7a2V5OlwibWVtYmVycy1saXN0LWhlYWRlci1hZGQtdG8tZ3JvdXAtYnV0dG9uXCIsYXJpYUxhYmVsOnMuZm9ybWF0TWVzc2FnZSh7aWQ6XCJqamsrVzhcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkFkZCB0byBHcm91cFwifV19KSxjb250ZW50OnNBfHwoc0E9KDAsby5aKShsQSx7fSkpLG1lbnVPcGVuUG9zdFNlbGVjdGlvbjohMCxvblNlbGVjdGVkOigpPT57dChLQy5BZGRGcmllbmRUb0dyb3VwKX19KV0sY2xhc3NOYW1lOmVBLnRpdGxlLGtleTpcIm1lbWJlci1saXN0LWhlYWRlcnNcIn0pLGdFKHtrZXk6XCJtZW1iZXJzLWxpc3RcIixhcmlhTGFiZWw6cy5mb3JtYXRNZXNzYWdlKHtpZDpcIkw3RWFZaVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiR3JvdXAgbWVtYmVyc1wifV19KSxjb250ZW50OigwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOigwLFEuWikobiYmZUEuZXhwYW5kZWQpfSx2b2lkIDAsaS5tYXAoKGU9PigwLG8uWikoJEMse3BhcnRpY2lwYW50OmV9LCgwLHouTWMpKGUudXNlcklkKSkpKSksZGlzYWJsZWQ6ITB9KV0sbD0oMCxkLnVzZUNhbGxiYWNrKSgoKCk9PntyKCExKX0pLFtdKTtpZihhKXtjb25zdCBlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/ZS5mb3JtYXRNZXNzYWdlKHtpZDpcIjhsOWl0K1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiU2hvdyBsZXNzXCJ9XX0pOmUuZm9ybWF0TWVzc2FnZSh7aWQ6XCJ4emljZjlcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlNlZSBhbGwgZ3JvdXAgbWVtYmVyc1wifV19KX0ocyxuKTtjLnB1c2goZ0Uoe2tleTpcIm1lbWJlcnMtbGlzdC1leHRlbnNpb24tbGlua1wiLGFyaWFMYWJlbDplLGNvbnRlbnQ6KDAsby5aKShcInNwYW5cIix7Y2xhc3NOYW1lOmVBLmV4cGFuZH0sdm9pZCAwLGUpLG9uU2VsZWN0ZWQ6KCk9PntyKCFuKX0sb25DbGVhblVwOmwsbWVudU9wZW5Qb3N0U2VsZWN0aW9uOiEwfSkpfXJldHVybiBjfShuLHQpO3JldHVybiBlLmNvbnZlcnNhdGlvblR5cGUhPT1QZS5pMS5VU0VSQ1JFQVRFREdST1VQP1tdOltyLC4uLmldfShlLG4pLGE9ZnVuY3Rpb24oZSl7bGV0e2NvbnZlcnNhdGlvbjp0LHNob3dTdWJtZW51Om59PWU7Y29uc3Qgcj0oMCxtZS5aKSgpLFtpLGFdPSgwLGQudXNlU3RhdGUpKCExKSxzPURmKCksYz0oMCxnLnMwKSgpLGw9dD8uY29udmVyc2F0aW9uVHlwZT09PVBlLmkxLlVTRVJDUkVBVEVER1JPVVAsdT0oMCxrLm8pKFRlLk44KSxmPSgwLGsubykoVGUuRTQpLHA9KDAsdGwuZFcpKHQpLG09KDAsZC51c2VDYWxsYmFjaykoKGFzeW5jKCk9PnthKCEwKTt0cnl7dCYmKGF3YWl0IHUodC5jb252ZXJzYXRpb25JZCksYyhcIi9cIikpfWNhdGNoKGUpe31maW5hbGx5e3MuY3VycmVudCYmYSghMSl9fSksW3Qscyx1LGNdKSxoPSgwLGQudXNlQ2FsbGJhY2spKChhc3luYygpPT57YSghMCk7dHJ5e3QmJihhd2FpdCBmKHQuY29udmVyc2F0aW9uSWQpLGMoXCIvXCIpKX1jYXRjaChlKXt9ZmluYWxseXtzLmN1cnJlbnQmJmEoITEpfX0pLFt0LHMsZixjXSk7aWYoIXQpcmV0dXJuW107Y29uc3Qgdj1yLmZvcm1hdE1lc3NhZ2Uoe2lkOlwiZ3d5WlFTXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJDbGVhciBmcm9tIENoYXQgRmVlZFwifV19KSx5PVtnRSh7a2V5Olwibm90aWZpY2F0aW9uLWxpbmVcIixcImRhdGEtdGVzdGlkXCI6XCJhcHAuY29udmVyc2F0aW9uLkNvbnZlcnNhdGlvbkFjdGlvbk1lbnUuRHJvcGRvd25NZW51SXRlbS5NZXNzYWdlTm90aWZpY2F0aW9uXCIsYXJpYUxhYmVsOnIuZm9ybWF0TWVzc2FnZSh7aWQ6XCJyWnYvQVJcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIk1lc3NhZ2UgTm90aWZpY2F0aW9uc1wifV19KSxjb250ZW50OigwLG8uWikoVEUse2xhYmVsOnIuZm9ybWF0TWVzc2FnZSh7aWQ6XCJOS1IrdS9cIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIk1lc3NhZ2UgTm90aWZpY2F0aW9uc1wifV19KSxzdWJsYWJlbDpaQyhyLHQuY2hhdE5vdGlmaWNhdGlvblByZWZlcmVuY2UpfSksb25TZWxlY3RlZDooKT0+bihLQy5Ob3RpZmljYXRpb25TZXR0aW5ncyksbWVudU9wZW5Qb3N0U2VsZWN0aW9uOiEwfSldO2lmKGx8fHkucHVzaChnRSh7a2V5OlwicmV0ZW50aW9uLW1vZGUtbGluZVwiLFwiZGF0YS10ZXN0aWRcIjpcImFwcC5jb252ZXJzYXRpb24uQ29udmVyc2F0aW9uQWN0aW9uTWVudS5Ecm9wZG93bk1lbnVJdGVtLkRlbGV0ZUNoYXRcIixhcmlhTGFiZWw6ci5mb3JtYXRNZXNzYWdlKHtpZDpcIjBOb2JNa1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiQ2hhbmdlIFJldGVudGlvbiBNb2RlXCJ9XX0pLGNvbnRlbnQ6KDAsby5aKShURSx7bGFiZWw6ci5mb3JtYXRNZXNzYWdlKHtpZDpcIisrNGROa1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiRGVsZXRlIENoYXRzLi4uXCJ9XX0pLHN1YmxhYmVsOkRFKHIsd0UoTnVtYmVyKHQucmV0ZW50aW9uUG9saWN5LnJlYWRSZXRlbnRpb25UaW1lU2Vjb25kcykpKX0pLG9uU2VsZWN0ZWQ6KCk9Pm4oS0MuUmV0ZW50aW9uTW9kZVNldHRpbmdzKSxtZW51T3BlblBvc3RTZWxlY3Rpb246ITB9KSkscHx8eS5wdXNoKGdFKHtrZXk6XCJjbGVhci1jb252ZXJzYXRpb25cIixcImRhdGEtdGVzdGlkXCI6XCJhcHAuY29udmVyc2F0aW9uLkNvbnZlcnNhdGlvbkFjdGlvbk1lbnUuRHJvcGRvd25NZW51SXRlbS5DbGVhckNvbnZlcnNhdGlvblwiLGFyaWFMYWJlbDp2LGNvbnRlbnQ6KDAsby5aKShsRSx7dmFyaWFudDppP1wiZGlzYWJsZWRcIjpcInVyZ2VudFwifSx2b2lkIDAsdiksb25TZWxlY3RlZDptLGRpc2FibGVkOml9KSksbCl7Y29uc3QgZT1yLmZvcm1hdE1lc3NhZ2Uoe2lkOlwiSEszcmxSXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJMZWF2ZSBHcm91cFwifV19KTt5LnB1c2goZ0Uoe2tleTpcImxlYXZlLWNvbnZlcnNhdGlvblwiLFwiZGF0YS10ZXN0aWRcIjpcImFwcC5jb252ZXJzYXRpb24uQ29udmVyc2F0aW9uQWN0aW9uTWVudS5Ecm9wZG93bk1lbnVJdGVtLkxlYXZlQ29udmVyc2F0aW9uXCIsYXJpYUxhYmVsOmUsY29udGVudDooMCxvLlopKGxFLHt2YXJpYW50Omk/XCJkaXNhYmxlZFwiOlwidXJnZW50XCJ9LHZvaWQgMCxlKSxvblNlbGVjdGVkOmgsZGlzYWJsZWQ6aX0pKX1yZXR1cm4geX0oe2NvbnZlcnNhdGlvbjplLHNob3dTdWJtZW51Om59KSxzPWZ1bmN0aW9uKGUpe2xldHtjb252ZXJzYXRpb246dCxzdWJtZW51VHlwZTpuLHNldFN1Ym1lbnVUeXBlOnJ9PWU7Y29uc3QgaT1mdW5jdGlvbihlKXtsZXR7Y29udmVyc2F0aW9uOnQsb25CYWNrQnV0dG9uQ2xpY2s6bn09ZTtjb25zdCByPSgwLG1lLlopKCksaT0oMCxrLm8pKFRlLklDKSxhPSgwLGQudXNlQ2FsbGJhY2spKChhc3luYyBlPT57aWYodCl0cnl7YXdhaXQgaSh0LmNvbnZlcnNhdGlvbklkLGUpfWNhdGNoKGUpe319KSxbdCxpXSk7aWYoIXQpcmV0dXJuW107Y29uc3Qgcz1lPT57Y29uc3Qgbj1aQyhyLGUpLGk9KDAsby5aKShKZyx7Y2hlY2tlZDplPT09dC5jaGF0Tm90aWZpY2F0aW9uUHJlZmVyZW5jZX0pO3JldHVybiBnRSh7a2V5Olwibm90aWZpY2F0aW9uLWNob2ljZS1cIitQZS51altlXSxhcmlhTGFiZWw6bixjb250ZW50OigwLG8uWikobEUse2JlZm9yZTppfSx2b2lkIDAsbiksb25TZWxlY3RlZDphc3luYygpPT5hKGUpLG1lbnVPcGVuUG9zdFNlbGVjdGlvbjohMH0pfTtyZXR1cm5bYkUoe3RpdGxlOnIuZm9ybWF0TWVzc2FnZSh7aWQ6XCI4VDZCSWZcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIk1lc3NhZ2UgTm90aWZpY2F0aW9uc1wifV19KSxrZXk6XCJub3RpZmljYXRpb24tbWVudS10aXRsZVwiLG9uU2VsZWN0ZWQ6bn0pLHMoUGUudWouQUxMX01FU1NBR0VTKSwuLi50LmNvbnZlcnNhdGlvblR5cGU9PT1QZS5pMS5VU0VSQ1JFQVRFREdST1VQP1tzKFBlLnVqLk1FTlRJT05fT05MWSldOltdLHMoUGUudWouU0lMRU5UKV19KHtjb252ZXJzYXRpb246dCxvbkJhY2tCdXR0b25DbGljazooKT0+cihLQy5Ob25lKX0pLGE9ZnVuY3Rpb24oZSl7bGV0e2NvbnZlcnNhdGlvbjp0LG9uQmFja0J1dHRvbkNsaWNrOm59PWU7Y29uc3Qgcj0oMCxtZS5aKSgpLGk9KDAsay5vKShUZS5iNiksYT0oMCxkLnVzZUNhbGxiYWNrKSgoYXN5bmMgZT0+e2lmKCF0KXJldHVybjtjb25zdCBuPWU9PT1PRS5JbW1lZGlhdGUscj1uPzA6QUUsbz17c2VuZFJlYWRNZXNzYWdlOiEwLHNlbmRSZWxlYXNlTWVzc2FnZXM6bix1bnJlYWRSZXRlbnRpb25UaW1lU2Vjb25kczpCaWdJbnQoUkUpLHJlYWRSZXRlbnRpb25UaW1lU2Vjb25kczpCaWdJbnQocil9O3RyeXthd2FpdCBpKHQuY29udmVyc2F0aW9uSWQsbyxQZS5qRS5DSEFUX1NFVFRJTkdTKX1jYXRjaChlKXt9fSksW3QsaV0pO2lmKCF0KXJldHVybltdO2NvbnN0IHM9ci5mb3JtYXRNZXNzYWdlKHtpZDpcInJsS1haOVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiRGVsZXRlIENoYXRzLi4uXCJ9XX0pLGM9KDAsby5aKShcInNwYW5cIix7Y2xhc3NOYW1lOkNFLnRpdGxlSWNvbn0sdm9pZCAwLCgwLG8uWikoS2cuWix7Y2xhc3NOYW1lOkNFLmljb25GbGlwc0luUnRsfSkpO3JldHVybltnRSh7a2V5OlwicmV0ZW50aW9uLW1lbnUtdGl0bGVcIixhcmlhTGFiZWw6cyxjb250ZW50OigwLG8uWikobEUse2ZvbnRTaXplOlwibGFyZ2VcIixiZWZvcmU6Y30sdm9pZCAwLHMpLG9uU2VsZWN0ZWQ6bixtZW51T3BlblBvc3RTZWxlY3Rpb246ITB9KSxQRSh0LE9FLkltbWVkaWF0ZSxhLHIpLFBFKHQsT0UuVHdlbnR5Rm91ckhvdXJzLGEscildfSh7Y29udmVyc2F0aW9uOnQsb25CYWNrQnV0dG9uQ2xpY2s6KCk9PnIoS0MuTm9uZSl9KSxzPWZ1bmN0aW9uKGUpe2xldHtjb252ZXJzYXRpb246dCxvbkJhY2tCdXR0b25DbGljazpufT1lO2NvbnN0IHI9KDAsbWUuWikoKSxpPXIuZm9ybWF0TWVzc2FnZSh7aWQ6XCJ6dVNsRWtcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkFkZCBHcm91cCBNZW1iZXJzXCJ9XX0pLGE9KDAsby5aKShcInNwYW5cIix7Y2xhc3NOYW1lOkxDLnRpdGxlSWNvbn0sdm9pZCAwLCgwLG8uWikoS2cuWix7Y2xhc3NOYW1lOkxDLmljb25GbGlwc0luUnRsfSkpLFtzLGNdPSgwLGQudXNlU3RhdGUpKFwiXCIpLGw9KDAsZC51c2VDYWxsYmFjaykoKCgpPT57YyhcIlwiKX0pLFtdKSx1PSgwLGQudXNlUmVmKShudWxsKSxmPW1DKCkscD17aGVhZGVyTGFiZWw6XCJCZXN0IEZyaWVuZHNcIix1c2VyczooMCxrLm8pKFNsLk5EKX0sbT13QyhmLHMsUHUuQ0YpLGg9KDAsZC51c2VNZW1vKSgoKCk9PmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbi5sZW5ndGg+MD9bTUMoZSx0KV06YkModCl9KHIsbSxzKSksW20scixzXSksW3YsZ109KDAsZC51c2VTdGF0ZSkoITEpLHk9RGYoKSxbRSxfXT0oMCxkLnVzZVN0YXRlKShbXSksST0oMCxrLm8pKFRlLk1NKSxTPSgwLGQudXNlQ2FsbGJhY2spKChhc3luYygpPT57aWYoIXYpe2coITApO3RyeXt0JiZFLmxlbmd0aCYmKGF3YWl0IEkodC5jb252ZXJzYXRpb25JZCxFKSxuKCkpfWNhdGNoKGUpe31maW5hbGx5e3kuY3VycmVudCYmZyghMSl9fX0pLFt2LHQsRSxuLHksSV0pLGI9ZT0+e0UuaW5jbHVkZXMoZSk/XyhFLmZpbHRlcigodD0+dCE9PWUpKSk6XyhbLi4uRSxlXSl9LFQ9KDAsZC51c2VDYWxsYmFjaykoKCgpPT57XyhbXSl9KSxbXSk7cmV0dXJuW2dFKHtrZXk6XCJhZGQtdG8tZ3JvdXAtbWVudS10aXRsZVwiLGFyaWFMYWJlbDppLGNvbnRlbnQ6KDAsby5aKShsRSx7Zm9udFNpemU6XCJsYXJnZVwiLGJlZm9yZTphfSx2b2lkIDAsaSksb25TZWxlY3RlZDpuLG1lbnVPcGVuUG9zdFNlbGVjdGlvbjohMH0pLGdFKHtrZXk6XCJhZGQtdG8tZ3JvdXAtc2VhcmNoLWJhclwiLGFyaWFMYWJlbDpyLmZvcm1hdE1lc3NhZ2Uoe2lkOlwiclljM241XCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJTZWFyY2ggRnJpZW5kcyB0byBBZGQgdG8gR3JvdXBcIn1dfSksY29udGVudDooMCxvLlopKFdDLHtzZXRTZWFyY2hRdWVyeTpjLGlucHV0UmVmOnUsaW50bDpyfSksb25TZWxlY3RlZDooKT0+e3UuY3VycmVudD8uZm9jdXMoKX0sb25DbGVhblVwOmwsbWVudU9wZW5Qb3N0U2VsZWN0aW9uOiEwfSkseUUoe2l0ZW1zOlsuLi4wPT09cy5sZW5ndGg/SEMocCxFLCEwLGIpOltdLC4uLmguZmxhdE1hcCgoZT0+SEMoZSxFLCExLGIpKSldLGNsYXNzTmFtZTpMQy5hZGRUb0dyb3VwU2VjdGlvbnMsa2V5OlwiZnJpZW5kcy1zZWN0aW9uXCJ9KSxnRSh7a2V5OlwiYWRkLXRvLWdyb3VwLWFkZC1idXR0b25cIixhcmlhTGFiZWw6ci5mb3JtYXRNZXNzYWdlKHtpZDpcIlpicVRDeVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiQ29uZmlybSBBZGQgdG8gR3JvdXBcIn1dfSksY29udGVudDooMCxvLlopKGpDLHtpbnRsOnJ9KSxvblNlbGVjdGVkOlMsb25DbGVhblVwOlQsbWVudU9wZW5Qb3N0U2VsZWN0aW9uOiEwLGRpc2FibGVkOnZ9KV19KHtjb252ZXJzYXRpb246dCxvbkJhY2tCdXR0b25DbGljazooKT0+cihLQy5Ob25lKX0pO3N3aXRjaChuKXtjYXNlIEtDLk5vdGlmaWNhdGlvblNldHRpbmdzOnJldHVybiBpO2Nhc2UgS0MuQWRkRnJpZW5kVG9Hcm91cDpyZXR1cm4gcztjYXNlIEtDLlJldGVudGlvbk1vZGVTZXR0aW5nczpyZXR1cm4gYTtkZWZhdWx0OnJldHVybltdfX0oe2NvbnZlcnNhdGlvbjplLHN1Ym1lbnVUeXBlOnQsc2V0U3VibWVudVR5cGU6bn0pO3JldHVybiByP3M6aS5sZW5ndGg+MD9bLi4uaSx7dHlwZTp2RS5TZXBhcmF0b3Isa2V5OlwiYWJvdmUtYWN0aW9uLW1lbnVcIn0sLi4uYV06Wy4uLmFdfUMoKS5nZXRMb2dnZXIoXCJbQ29udmVyc2F0aW9uR3JvdXBEcm9wZG93bl1cIik7Y29uc3QgX0E9e2xpc3RDb250YWluZXI6XCJUYUc4blwifTtmdW5jdGlvbiBJQShlKXtsZXR7ZmVlZEl0ZW06dCxvbkNsaWNrOm59PWU7cmV0dXJuKDAsby5aKShcInNwYW5cIix7Y2xhc3NOYW1lOlwiYklwa3pcIixvbkNsaWNrOm59LHZvaWQgMCwoMCxvLlopKHp1LHtmZWVkSXRlbTp0fSkpfXZhciBTQT1uKDkzMzg2KSxiQT1uLm4oU0EpO2NvbnN0IFRBPXtjb250YWluZXI6XCJfdHVwSlwiLGljb246XCJVM3ZUZ1wifTt2YXIgQ0EsQUEsUkEsa0E9big5MTk2NiksT0E9bi5uKGtBKTtjb25zdCBOQT17dHlwZTpcImNvbmp1bmN0aW9uXCIsc3R5bGU6XCJsb25nXCJ9LHdBPTM2ZTUsREE9NmU0O3ZhciBQQT17T1VUR09JTkc6MCxPTkdPSU5HOjEsSk9JTkVEOjIsTEVGVDozfTtjb25zdCBNQT17a2luZDpQQS5PVVRHT0lOR30sTEE9e2tpbmQ6UEEuT05HT0lOR307ZnVuY3Rpb24gVUEoZSl7bGV0e21lc3NhZ2U6dCxqb2luZWRUaW1lc3RhbXBNczpufT1lO2NvbnN0IHI9KDAsbWUuWikoKSxpPXQua2luZD09PVBBLkpPSU5FRHx8dC5raW5kPT09UEEuTEVGVD90LnVzZXJJZHM6W10sYT1BbChpLm1hcCgoZT0+KDAsei5PWSkoZSkpKSk7bGV0IHM7Y29uc3QgYz1mdW5jdGlvbihlKXtjb25zdCB0PXBlcmZvcm1hbmNlLm5vdygpLWUsW24scl09KDAsZC51c2VTdGF0ZSkodCk7KDAsZC51c2VFZmZlY3QpKCgoKT0+e2NvbnN0IHQ9c2V0SW50ZXJ2YWwoKCgpPT57cihwZXJmb3JtYW5jZS5ub3coKS1lKX0pLDFlMyk7cmV0dXJuKCk9PmNsZWFySW50ZXJ2YWwodCl9KSxbZV0pO2NvbnN0IGk9TWF0aC5mbG9vcihuL3dBKSxvPU1hdGguZmxvb3IobiV3QS9EQSksYT1NYXRoLmZsb29yKG4lREEvMWUzKTtyZXR1cm5gJHtpPjA/aS50b1N0cmluZygpLnBhZFN0YXJ0KDIsXCIwXCIpK1wiOlwiOlwiXCJ9JHtvLnRvU3RyaW5nKCkucGFkU3RhcnQoMixcIjBcIil9OiR7YS50b1N0cmluZygpLnBhZFN0YXJ0KDIsXCIwXCIpfWB9KE51bWJlcihuPz8wKSk7c3dpdGNoKHQua2luZCl7Y2FzZSBQQS5PVVRHT0lORzpzPXtrZXk6XCJyaW5naW5nXCIsZm9ybWF0dGVkTWVzc2FnZTpDQXx8KENBPSgwLG8uWikodi5aLHtpZDpcIkZDb09oeVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiUmluZ2luZy4uLlwifV19KSl9O2JyZWFrO2Nhc2UgUEEuT05HT0lORzpzPXtrZXk6XCJvbmdvaW5nXCIsZm9ybWF0dGVkTWVzc2FnZTpuPygwLG8uWikodi5aLHtpZDpcInltN0VTSVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZToxLHZhbHVlOlwiZHVyYXRpb25cIn1dLHZhbHVlczp7ZHVyYXRpb246Y319KTpBQXx8KEFBPSgwLG8uWikodi5aLHtpZDpcIlh2T2ZEdlwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiMDA6MDBcIn1dfSkpfTticmVhaztjYXNlIFBBLkpPSU5FRDp7Y29uc3QgZT1yLmZvcm1hdExpc3QoYSxOQSk7cz17a2V5OmAke2kudG9TdHJpbmcoKX0tam9pbmVkYCxmb3JtYXR0ZWRNZXNzYWdlOigwLG8uWikodi5aLHtpZDpcIlFoTDV2b1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZToxLHZhbHVlOlwiZGlzcGxheU5hbWVGb3JtYXR0ZWRMaXN0XCJ9LHt0eXBlOjAsdmFsdWU6XCIganVzdCBqb2luZWRcIn1dLHZhbHVlczp7ZGlzcGxheU5hbWVGb3JtYXR0ZWRMaXN0OmV9fSl9O2JyZWFrfWNhc2UgUEEuTEVGVDp7Y29uc3QgZT1yLmZvcm1hdExpc3QoYSxOQSk7cz17a2V5OmAke2kudG9TdHJpbmcoKX0tbGVmdGAsZm9ybWF0dGVkTWVzc2FnZTooMCxvLlopKHYuWix7aWQ6XCJxbTB3TkJcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MSx2YWx1ZTpcImRpc3BsYXlOYW1lRm9ybWF0dGVkTGlzdFwifSx7dHlwZTowLHZhbHVlOlwiIGp1c3QgbGVmdFwifV0sdmFsdWVzOntkaXNwbGF5TmFtZUZvcm1hdHRlZExpc3Q6ZX19KX07YnJlYWt9fXJldHVybigwLG8uWikoWlQse2NsYXNzTmFtZTpUQS5jb250YWluZXJ9LHMua2V5LCgwLG8uWikoXCJzcGFuXCIse2NsYXNzTmFtZTpUQS5pY29ufSx2b2lkIDAsUkF8fChSQT0oMCxvLlopKHFDLHt9KSkpLCgwLG8uWikoXCJzcGFuXCIse30sdm9pZCAwLHMuZm9ybWF0dGVkTWVzc2FnZSkpfWZ1bmN0aW9uIHhBKGUpe2xldHtjb252ZXJzYXRpb25JZDp0fT1lO2NvbnN0IG49Z3UodCkscj1mdW5jdGlvbihlKXtyZXR1cm4oMCxpbC5qKSh3LkZqLGUpfSh0KSx7am9pbmVkOmksbGVmdDphfT1mdW5jdGlvbihlKXtjb25zdCB0PSgwLGQudXNlUmVmKShbXSksbj1FdShlKS5tYXAoKGU9PntsZXRbdCxuXT1lO3JldHVybiB0fSkpLHI9T0EoKShuLHQuY3VycmVudCksaT1PQSgpKHQuY3VycmVudCxuKTtyZXR1cm4gdC5jdXJyZW50PW4se2pvaW5lZDpyLGxlZnQ6aX19KHQpLHtjdXJyZW50TWVzc2FnZTpzLHNldE1lc3NhZ2U6Y309ZnVuY3Rpb24oKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06NWUzO2NvbnN0W3Qsbl09KDAsZC51c2VTdGF0ZSkoKSxyPSgwLGQudXNlUmVmKSgpLGk9KDAsZC51c2VDYWxsYmFjaykoKCgpPT57ci5jdXJyZW50JiYoY2xlYXJUaW1lb3V0KHIuY3VycmVudCksci5jdXJyZW50PXZvaWQgMCl9KSxbXSksbz0oMCxkLnVzZUNhbGxiYWNrKSgodD0+e2koKSxuKHQpLHQmJihyLmN1cnJlbnQ9c2V0VGltZW91dCgoKCk9PntvKHZvaWQgMCl9KSxlKSl9KSxbaSxlXSk7cmV0dXJuKDAsZC51c2VFZmZlY3QpKCgoKT0+aSksW2ldKSx7Y3VycmVudE1lc3NhZ2U6dCxzZXRNZXNzYWdlOm99fSgpLGw9SlNPTi5zdHJpbmdpZnkoaSksdT1KU09OLnN0cmluZ2lmeShhKTsoMCxkLnVzZUVmZmVjdCkoKCgpPT57aWYoaS5sZW5ndGgpe2NvbnN0IGU9cz8ua2luZD09PVBBLkpPSU5FRD9zLnVzZXJJZHM6W107Yyh7a2luZDpQQS5KT0lORUQsdXNlcklkczpiQSgpKGUsaSl9KX1lbHNlIGlmKGEubGVuZ3RoKXtjb25zdCBlPXM/LmtpbmQ9PT1QQS5MRUZUP3MudXNlcklkczpbXTtjKHtraW5kOlBBLkxFRlQsdXNlcklkczpiQSgpKGUsYSl9KX19KSxbbCx1XSk7Y29uc3QgZj1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09ZXUuVXEuQ0FMTElORz9NQTp0fHwoZT09PWV1LlVxLklOX0NBTEw/TEE6dm9pZCAwKX0obixzKTtyZXR1cm4oMCxvLlopKGZkLHttb2RlOlwid2FpdFwifSx2b2lkIDAsZiYmKDAsby5aKShVQSx7bWVzc2FnZTpmLGpvaW5lZFRpbWVzdGFtcE1zOnJ9KSl9Y29uc3QgRkE9e3BhcnRpY2lwYW50c1NlY3Rpb246XCJ1Q1ZFY1wiLHBhcnRpY2lwYW50c1NlY3Rpb25BY3RpdmU6XCJydHFpa1wiLHBhcnRpY2lwYW50c1NlY3Rpb25Ib3ZlcmVkOlwiQXpCVk5cIixwcm9maWxlUGljdHVyZTpcIkNHMjBSXCIscHJvZmlsZVBpY3R1cmVIb3ZlcmVkOlwia3BQY3dcIixjYWxsQWN0aXZlQXZhdGFyOlwiWDJ3NFFcIixjYWxsTmFtZUFuZFN0YXR1czpcIkQzb3ZTXCIsdGltZXN0YW1wOlwieWtDSk1cIn07ZnVuY3Rpb24gQkEoZSl7bGV0e3RpbWVzdGFtcDp0LHVzZXJJZDpuLGlzR3JvdXA6cn09ZTtyZXR1cm4gcj8oMCxvLlopKFwic3BhblwiLHtjbGFzc05hbWU6RkEudGltZXN0YW1wfSx2b2lkIDAsU2IodCk/KDAsby5aKSh2Llose2lkOlwieEl1UkdyXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjEsdmFsdWU6XCJ0aW1lc3RhbXBcIn0se3R5cGU6MCx2YWx1ZTpcIiBmcm9tIFwifSx7dHlwZToxLHZhbHVlOlwiZGlzcGxheU5hbWVcIn1dLHZhbHVlczp7dGltZXN0YW1wOigwLG8uWikoYmIse3RpbWVzdGFtcDp0fSksZGlzcGxheU5hbWU6KDAsby5aKShqdSx7dXNlcklkOm59KX19KTooMCxvLlopKHYuWix7aWQ6XCJad1hUQkFcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MSx2YWx1ZTpcInRpbWVzdGFtcFwifSx7dHlwZTowLHZhbHVlOlwiIGFnbyBmcm9tIFwifSx7dHlwZToxLHZhbHVlOlwiZGlzcGxheU5hbWVcIn1dLHZhbHVlczp7dGltZXN0YW1wOigwLG8uWikoYmIse3RpbWVzdGFtcDp0fSksZGlzcGxheU5hbWU6KDAsby5aKShqdSx7dXNlcklkOm59KX19KSk6KDAsby5aKShcInNwYW5cIix7Y2xhc3NOYW1lOkZBLnRpbWVzdGFtcH0sdm9pZCAwLFNiKHQpPygwLG8uWikoYmIse3RpbWVzdGFtcDp0fSk6KDAsby5aKSh2Llose2lkOlwia2NjS0htXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjEsdmFsdWU6XCJ0aW1lc3RhbXBcIn0se3R5cGU6MCx2YWx1ZTpcIiBhZ29cIn1dLHZhbHVlczp7dGltZXN0YW1wOigwLG8uWikoYmIse3RpbWVzdGFtcDp0fSl9fSkpfWNvbnN0IFZBPSgwLGQuZm9yd2FyZFJlZikoKChlLHQpPT57bGV0e2NvbnZlcnNhdGlvbjpuLHBhcnRpY2lwYW50czpyLGNhbGxBY3RpdmU6aSxhY3RpdmU6YSxcImRhdGEtdGVzdGlkXCI6cywuLi5jfT1lO2NvbnN0e21lc3NhZ2VJZDpsfT1yZCgpLHtob3ZlcmVkOnUsaG92ZXJQcm9wczpkfT1rbSgpLGY9cWwobi5jb252ZXJzYXRpb25JZCxsKTtyZXR1cm4oMCxxLmpzeHMpKE1kLHtub1BhZGRpbmc6ITAsY2xhc3NOYW1lOigwLFEuWikoRkEucGFydGljaXBhbnRzU2VjdGlvbixhP0ZBLnBhcnRpY2lwYW50c1NlY3Rpb25BY3RpdmU6dSYmRkEucGFydGljaXBhbnRzU2VjdGlvbkhvdmVyZWQpLC4uLmMsLi4uZCxyZWY6dCxjaGlsZHJlbjpbKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6KDAsUS5aKShGQS5wcm9maWxlUGljdHVyZSxpJiZGQS5jYWxsQWN0aXZlQXZhdGFyLCFhJiZ1JiZGQS5wcm9maWxlUGljdHVyZUhvdmVyZWQpfSx2b2lkIDAsKDAsby5aKShHdSx7cGFydGljaXBhbnRzOnIuc2xpY2UoMCwzKSxjb252ZXJzYXRpb25JZDpuLmNvbnZlcnNhdGlvbklkLHNpemU6MzZ9KSksKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6RkEuY2FsbE5hbWVBbmRTdGF0dXN9LHZvaWQgMCwoMCxvLlopKElBLHtmZWVkSXRlbTpufSksZj8oMCxvLlopKEJBLHt0aW1lc3RhbXA6Zi5tZXRhZGF0YS5jcmVhdGVkQXQsdXNlcklkOmYuc2VuZGVySWQsaXNHcm91cDpuLmNvbnZlcnNhdGlvblR5cGU9PT1QZS5pMS5VU0VSQ1JFQVRFREdST1VQfSk6KDAsby5aKSh4QSx7Y29udmVyc2F0aW9uSWQ6bi5jb252ZXJzYXRpb25JZH0pKV19KX0pKTtWQS5kaXNwbGF5TmFtZT1cIlBhcnRpY2lwYW50TGlzdEJ1dHRvblwiO2NvbnN0IEdBPVZBO2Z1bmN0aW9uIEhBKGUpe2xldHtjb252ZXJzYXRpb246dCxmYWxsYmFja0F2YXRhclBhcnRpY2lwYW50czpuPVtdfT1lO2NvbnN0IHI9Wy4uLnl1KHQuY29udmVyc2F0aW9uSWQpXS5tYXAoKGU9PntsZXRbdCxuXT1lO3JldHVybnt1c2VySWQ6KDAsei5PWSkodCksaXNJbkNhbGw6KDAsZEMuTikobil9fSkpLnNvcnQoKChlLHQpPT5lLmlzSW5DYWxsPT09dC5pc0luQ2FsbD8wOmUuaXNJbkNhbGw/LTE6MSkpLm1hcCgoZT0+ZS51c2VySWQpKSxpPXIubGVuZ3RoPjAsYT1pP3I6bixbcyxjXT0oMCxkLnVzZVN0YXRlKShLQy5Ob25lKSxsPUVBKHQscyxjKTtyZXR1cm4oMCxvLlopKElFLHtpdGVtczpsLG1lbnVDb250YWluZXJDbGFzc05hbWU6X0EubGlzdENvbnRhaW5lcixvbk1lbnVDbG9zZTooKT0+e2MoS0MuTm9uZSl9LHBsYWNlbWVudDpfRS5Cb3R0b21DZW50ZXJ9LHZvaWQgMCwoKGUsbik9PigwLHEuanN4KShHQSx7Y29udmVyc2F0aW9uOnQscGFydGljaXBhbnRzOmEsY2FsbEFjdGl2ZTppLGFjdGl2ZTpuLC4uLmUoKX0pKSl9Y29uc3QgV0E9e2NvbnRhaW5lcjpcImlMVkVtXCIsYmFja0J1dHRvbjpcImVuUVJSXCIsaWNvbjpcIkJXdHFUXCIsY2hhdEljb246XCJRRldjOVwiLGxlZnRDaGV2cm9uOlwia1k0S3lcIn07ZnVuY3Rpb24gakEoZSl7bGV0e2NvbnZlcnNhdGlvbjp0fT1lO2NvbnN0IG49KDAsbWUuWikoKSxyPSgwLGcuczApKCksaT0oMCxnLlRIKSgpLGE9KDAsay5vKShUZS5zYykscz0oMCxGbC5zKShpLnBhdGhuYW1lKT09PXQuY29udmVyc2F0aW9uSWQsYz0oMCxrLm8pKCgwLFRlLlY3KSh0LmNvbnZlcnNhdGlvbklkKSk7cmV0dXJuIEdJKENkLlRvZ2dsZUFzc29jaWF0ZWRDaGF0LCgwLGQudXNlQ2FsbGJhY2spKCgoKT0+e3M/cihcIi9cIik6KGEoXCJDSEFUXCIpLHIoKDAseGwuVjEpKHQuY29udmVyc2F0aW9uSWQpKSl9KSxbcyxyLHQuY29udmVyc2F0aW9uSWQsYV0pKSxzPygwLG8uWikoUGQse3RpdGxlOm4uZm9ybWF0TWVzc2FnZSh7aWQ6XCJrZzJXN0VcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkNsb3NlIENoYXRcIn1dfSksY2xhc3NOYW1lOldBLmJhY2tCdXR0b24sb25DbGljazooKT0+e2NvbnN0IGU9bmV3IFVSTFNlYXJjaFBhcmFtcyhpLnNlYXJjaCkuZ2V0KFwic3RhY2tlZFwiKTtyKGU/LTE6XCIvXCIpfX0sdm9pZCAwLCgwLG8uWikoS2cuWix7Y2xhc3NOYW1lOigwLFEuWikoV0EubGVmdENoZXZyb24sV0EuaWNvbil9KSk6KDAsby5aKShQZCx7aG90a2V5OkNkLlRvZ2dsZUFzc29jaWF0ZWRDaGF0LGNsYXNzTmFtZTpXQS5iYWNrQnV0dG9uLG9uQ2xpY2s6KCk9PnthKFwiQ0hBVFwiKSxyKCgwLHhsLlYxKSh0LmNvbnZlcnNhdGlvbklkKSl9fSx2b2lkIDAsYz8oMCxvLlopKHNDLHtjbGFzc05hbWU6V0EuY2hhdEljb259KTooMCxvLlopKHVDLHtjbGFzc05hbWU6V0EuY2hhdEljb259KSl9ZnVuY3Rpb24gWkEoZSl7bGV0e2NvbnZlcnNhdGlvbjp0LGZhbGxiYWNrQXZhdGFyUGFydGljaXBhbnRzOm59PWU7cmV0dXJuKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6V0EuY29udGFpbmVyfSx2b2lkIDAsKDAsby5aKShqQSx7Y29udmVyc2F0aW9uOnR9KSwoMCxvLlopKEhBLHtjb252ZXJzYXRpb246dCxmYWxsYmFja0F2YXRhclBhcnRpY2lwYW50czpufSkpfWNvbnN0IHpBPXtoZWFkZXI6XCJrMUlhTVwifTtmdW5jdGlvbiBLQShlKXtsZXR7Y29udmVyc2F0aW9uOnQsaGlkZGVuOm59PWU7Y29uc3Qgcj1YYygpLGk9KDAsZC51c2VNZW1vKSgoKCk9PigwLHRsLnQwKSh0LHIpKSxbdCxyXSksYT1mdW5jdGlvbihlKXtjb25zdCB0PWd1KGUuY29udmVyc2F0aW9uSWQpLG49KDAsZC51c2VSZWYpKHQpLFtyLGldPSgwLGQudXNlU3RhdGUpKCExKTtyZXR1cm4oMCxkLnVzZUVmZmVjdCkoKCgpPT57bGV0IGU7cmV0dXJuIHQ9PT1ldS5VcS5OT05FJiZuLmN1cnJlbnQ9PT1ldS5VcS5JTl9DQUxMJiYoaSghMCksZT13aW5kb3cuc2V0VGltZW91dCgoKCk9PntpKCExKX0pLFlBKSksbi5jdXJyZW50PXQsKCk9Pnt3aW5kb3cuY2xlYXJUaW1lb3V0KGUpfX0pLFt0XSkscn0odCk7aWYobilyZXR1cm4gbnVsbDtjb25zdCBzPTI9PT10LnBhcnRpY2lwYW50cy5sZW5ndGgmJnZvaWQgMCE9PXQucGFydGljaXBhbnRzLmZpbmQoKGU9PltQdS5hMixQdS5vJF0uaW5jbHVkZXMoZS5wYXJ0aWNpcGFudElkKSkpO3JldHVybigwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOnpBLmhlYWRlcn0sdm9pZCAwLCgwLG8uWikoWkEse2NvbnZlcnNhdGlvbjp0LGZhbGxiYWNrQXZhdGFyUGFydGljaXBhbnRzOml9KSwhcyYmKDAsby5aKShyQyx7ZGlzYWJsZUNhbGxCdXR0b25zOmEsY29udmVyc2F0aW9uOnR9KSl9Y29uc3QgWUE9MTUwMDt2YXIgcUE9bigzMDk4OCksWEE9bi5uKHFBKTtjb25zdCBRQT17d3JhcHBlcjpcIm1hTGJWXCJ9O3ZhciBKQSwkQTtmdW5jdGlvbiBlUigpe3JldHVybigwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOlFBLndyYXBwZXJ9LHZvaWQgMCxKQXx8KEpBPSgwLG8uWikobGgse30pKSl9ZnVuY3Rpb24gdFIoZSl7bGV0e2lzTG9hZGluZzp0LGhhc01vcmU6bixvblBhZ2luYXRlOnJ9PWU7cmV0dXJuIHQ/JEF8fCgkQT0oMCxvLlopKGVSLHt9KSk6KDAsby5aKSh4cy5zcGFuLHtvblZpZXdwb3J0RW50ZXI6KCk9Pm4mJnZvaWQgcigpfSl9ZnVuY3Rpb24gblIoZSl7Y29uc3RbdCxuXT0oMCxkLnVzZVN0YXRlKSh7YmxvY2tTaXplOjAsaW5saW5lU2l6ZTowfSk7cmV0dXJuKDAsZC51c2VMYXlvdXRFZmZlY3QpKCgoKT0+e2lmKGUpe2NvbnN0IHQ9bmV3IFJlc2l6ZU9ic2VydmVyKChlPT57aWYoZVswXSl7Y29uc3QgdD1lWzBdLmJvcmRlckJveFNpemVbMF07bih0KX19KSk7cmV0dXJuIHQub2JzZXJ2ZShlKSwoKT0+dC51bm9ic2VydmUoZSl9fSksW2VdKSx0fWNvbnN0IHJSPXtiYXJXcmFwcGVyOlwiRkhqNm1cIixlbmFibGVQb2ludGVyRXZlbnRzOlwiY1ZLMllcIixiYXJIb3ZlclRhcmdldDpcIngxdEdVXCIsYmFyOlwiTEx4aFZcIixiYXJJdGVtOlwiaGwyZVdcIixncm91cExpc3Q6XCJNaWJBYVwiLGRhdGVCcmVhazpcIkxYNkhOXCIsbWVzc2FnZUxpc3RJdGVtOlwiVDF5dDJcIn07ZnVuY3Rpb24gaVIoZSx0KXtjb25zdCBuPW5ldyBEYXRlKE51bWJlcih0KSkscj1uZXcgRGF0ZTtyZXR1cm4gbi5nZXRGdWxsWWVhcigpPT09ci5nZXRGdWxsWWVhcigpP24udG9Mb2NhbGVEYXRlU3RyaW5nKGUubG9jYWxlLHttb250aDpcImxvbmdcIixkYXk6XCJudW1lcmljXCJ9KTpuLnRvTG9jYWxlRGF0ZVN0cmluZyhlLmxvY2FsZSx7bW9udGg6XCJsb25nXCIsZGF5OlwibnVtZXJpY1wiLHllYXI6XCJudW1lcmljXCJ9KX1mdW5jdGlvbiBvUihlKXtsZXR7ZGF0ZVN0cjp0fT1lO3JldHVybigwLG8uWikoXCJ0aW1lXCIse2RhdGVUaW1lOnQsY2xhc3NOYW1lOnJSLmRhdGVCcmVha30sdm9pZCAwLHQpfWZ1bmN0aW9uIGFSKGUpe3JldHVybigwLG8uWikoXCJsaVwiLHtjbGFzc05hbWU6clIubWVzc2FnZUxpc3RJdGVtfSx2b2lkIDAsZS5jaGlsZHJlbil9ZnVuY3Rpb24gc1IoZSl7bGV0e2NvbnZlcnNhdGlvbklkOnQsY29udmVyc2F0aW9uVHlwZTpuLG1lc3NhZ2VzT2JzY3VyZWQ6cixtZXNzYWdlTGlzdFJlZjppLGF3YXk6YT0hMX09ZTtjb25zdFtzLGMsbCx1XT1mdW5jdGlvbihlLHQsbil7Y29uc3Qgcj0oMCxrLm8pKCgwLGQudXNlQ2FsbGJhY2spKCh0PT4oMCxUZS5qQykodCxlKSksW2VdKSksaT0oMCxrLm8pKFRlLlpEKSxvPSgwLGQudXNlTWVtbykoKCgpPT4oMCxUZS50OCkoZSkpLFtlXSksYT0oMCxrLm8pKG8pLHM9WGMoKSx7ZW50ZXJDb252ZXJzYXRpb246YyxleGl0Q29udmVyc2F0aW9uOmwscGFnaW5hdGVNZXNzYWdlczp1LGRpc3BsYXllZE1lc3NhZ2VzOmZ9PSgwLGsubykoQmwsRCk7KDAsZC51c2VFZmZlY3QpKCgoKT0+e2MoZSx0KX0pLFtjLGUsdF0pO2NvbnN0IHA9KDAsZC51c2VSZWYpKHZvaWQgMCk7cmV0dXJuKDAsZC51c2VFZmZlY3QpKCgoKT0+e2NvbnN0IHQ9KDAsdGwuYWUpKGEpO258fHZvaWQgMD09PXR8fHQ9PT1wLmN1cnJlbnR8fChwLmN1cnJlbnQ9dCxmKGUscC5jdXJyZW50KSl9KSxbYSxlLG4sZixzXSksKDAsZC51c2VFZmZlY3QpKCgoKT0+e2lmKCFuJiZyPy5jb252ZXJzYXRpb24pZm9yKGNvbnN0IGUgb2YgYSl7aWYoIWUubWVzc2FnZUNvbnRlbnQpY29udGludWU7Y29uc3QgdD0oKCk9PntsZXQgdDtyZXR1cm4oKT0+KHR8fCh0PSgwLHouJHApKFZzLkNvbnRlbnRzLmRlY29kZShlLm1lc3NhZ2VDb250ZW50LmNvbnRlbnQpKSksdCl9KSgpLG49ZS5tZXNzYWdlQ29udGVudC5xdW90ZWRNZXNzYWdlPy5jb250ZW50JiZ7Y2hhdF9yZXBseV9xdW90ZWRfY2hhdF9pZDplLm1lc3NhZ2VDb250ZW50LnF1b3RlZE1lc3NhZ2UuY29udGVudC5hbmFseXRpY3NNZXNzYWdlSWQsY2hhdF9yZXBseV9xdW90ZWRfbWVzc2FnZV9hdmFpbGFiaWxpdHlfc3RhdHVzOigwLHFjLm5SKShlLm1lc3NhZ2VDb250ZW50LnF1b3RlZE1lc3NhZ2Uuc3RhdHVzKSxjaGF0X3JlcGx5X3F1b3RlZF9tZXNzYWdlX2lkOmUubWVzc2FnZUNvbnRlbnQucXVvdGVkTWVzc2FnZS5jb250ZW50Lm1lc3NhZ2VJZH0sbz1TdHJpbmcoZS5tZXNzYWdlQW5hbHl0aWNzLmFuYWx5dGljc01lc3NhZ2VJZCk7WWMuRjkuaGFzKG8pfHxlLm1ldGFkYXRhLnNlZW5CeS5pbmNsdWRlcyhzKXx8ZS5zZW5kZXJJZD09PXN8fCgwLFljLlNLKSh7Y29udjpyLmNvbnZlcnNhdGlvbixjb250ZW50OnQoKSxhbmFseXRpY3NNZXNzYWdlSWQ6byxtZXNzYWdlVGltZXN0YW1wOmUubWV0YWRhdGEuY3JlYXRlZEF0LGN1cnJlbnRVc2VySWQ6KDAsei5NYykocyksc291cmNlOmksY2hhdFJlcGx5TWV0YWRhdGE6bn0pO2Zvcihjb25zdCBvIG9mIGUubWV0YWRhdGEucmVhY3Rpb25zKXtjb25zdCBlPVN0cmluZyhvLnJlYWN0aW9uLnJlYWN0aW9uSWQpOyFZYy5GOS5oYXMoZSkmJm8udXNlcklkIT09cyYmby5yZWFjdGlvbi5yZWFjdGlvbklkJiZvLnJlYWN0aW9uLnJlYWN0aW9uSWQ+ci5jb252ZXJzYXRpb24ubGF0ZXN0UmVjZWl2ZWRSZWFjdGlvblNlZW5JZCYmKDAsWWMuU0spKHtjb250ZW50OnQoKSxjb252OnIuY29udmVyc2F0aW9uLGFuYWx5dGljc01lc3NhZ2VJZDplLGN1cnJlbnRVc2VySWQ6KDAsei5NYykocyksY2hhdFJlcGx5TWV0YWRhdGE6bixyZWFjdGlvbkludGVudElkOk51bWJlcihvLnJlYWN0aW9uLnJlYWN0aW9uQ29udGVudC5pbnRlbnRpb25UeXBlKSxzb3VyY2U6aX0pfX19KSxbcixlLHQscyxhLG4saV0pLCgwLGQudXNlRWZmZWN0KSgoKCk9PigpPT57bChlLHAuY3VycmVudCl9KSxbZSxsXSksW2EsQm9vbGVhbihyPy5oYXNNb3JlTWVzc2FnZXMpLEJvb2xlYW4ocj8ubG9hZGluZ01lc3NhZ2VzKSx1XX0odCxuLHIpLGY9ZnVuY3Rpb24oKXtjb25zdFtlLHRdPSgwLGQudXNlU3RhdGUpKDApLG49KDAsZC51c2VSZWYpKHBlcmZvcm1hbmNlLm5vdygpKTtyZXR1cm4oMCxkLnVzZUVmZmVjdCkoKCgpPT57YigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJtZXNzYWdlX2xpc3RfcmVuZGVyZWRcIn0pfSksW10pLCgwLGQudXNlQ2FsbGJhY2spKCgoKT0+e2lmKCFlKXt0KChlPT5lKzEpKTtjb25zdCBlPXBlcmZvcm1hbmNlLm5vdygpLW4uY3VycmVudDtiKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcIm1lc3NhZ2VfbGlzdF9wYWdpbmF0ZWRcIn0pLGIoKS5hZGRUaW1lcih7bWV0cmljc05hbWU6XCJtZXNzYWdlX2xpc3RfZmlyc3RfcGFnaW5hdGlvblwiLG1pbGxpU2VjOk1hdGgucm91bmQoZSl9KX19KSxbZSxuXSl9KCkscD0oMCxkLnVzZUNhbGxiYWNrKSgoKCk9PntmKCksdSh0KX0pLFtmLHUsdF0pLG09ZnVuY3Rpb24oZSl7Y29uc3QgdD0oMCxkLnVzZVJlZikoITApO3JldHVybigwLGQudXNlTGF5b3V0RWZmZWN0KSgoKCk9Pnt0LmN1cnJlbnQmJmUuY3VycmVudD8uc2Nyb2xsVG8oMCxlLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0KX0pKSwoMCxkLnVzZUVmZmVjdCkoKCgpPT57Y29uc3Qgbj0oKT0+e3QuY3VycmVudCYmZS5jdXJyZW50Py5zY3JvbGxUbygwLGUuY3VycmVudC5zY3JvbGxIZWlnaHQpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIixuKSwoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIixuKX0pLFtlXSksKDAsZC51c2VFZmZlY3QpKCgoKT0+e2NvbnN0IG49ZS5jdXJyZW50O2lmKCFuKXJldHVybjtjb25zdCByPSgpPT57c2V0VGltZW91dCgoKCk9PnQuY3VycmVudD1uLnNjcm9sbFRvcCtuLmNsaWVudEhlaWdodD49bi5zY3JvbGxIZWlnaHQtNSksMCl9O3JldHVybiBuLmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIixyKSwoKT0+e24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLHIpfX0pLFtlXSksZX0oaSksaD0oMCxkLnVzZVJlZikoW20uY3VycmVudD8uc2Nyb2xsSGVpZ2h0LG0uY3VycmVudD8uc2Nyb2xsVG9wXSk7KDAsZC51c2VFZmZlY3QpKCgoKT0+e2lmKCFsJiZtLmN1cnJlbnQpe2NvbnN0IGU9aC5jdXJyZW50WzBdfHwwLHQ9aC5jdXJyZW50WzFdfHwwLG49bS5jdXJyZW50LnNjcm9sbEhlaWdodC1lO20uY3VycmVudC5zY3JvbGxUb3A9dCtufWguY3VycmVudD1bbS5jdXJyZW50Py5zY3JvbGxIZWlnaHQsbS5jdXJyZW50Py5zY3JvbGxUb3BdfSksW2wsbV0pO2NvbnN0e2Jsb2NrU2l6ZTp2LGlubGluZVNpemU6Z309blIobS5jdXJyZW50KSx5PWZ1bmN0aW9uKGUsdCl7aWYoMD09PXQubGVuZ3RoKXJldHVybltdO2NvbnN0IG49W10scj10WzBdO2xldCBpPXtzZW5kZXJJZDpyLnNlbmRlcklkLG1lc3NhZ2VzOltyXSxpc1N0YXR1c01lc3NhZ2U6TV8oci5tZXNzYWdlQ29udGVudD8uY29udGVudFR5cGU/P1BlLnpjLlVOS05PV04pLGZhaWxlZFRvU2VuZDooMCx0bC5waikociksZGF0ZVN0cmluZzppUihlLHIubWV0YWRhdGEuY3JlYXRlZEF0KX07Zm9yKGxldCByPTE7cjx0Lmxlbmd0aDtyKyspe2NvbnN0IG89dFtyXSxhPU1fKG8ubWVzc2FnZUNvbnRlbnQ/LmNvbnRlbnRUeXBlPz9QZS56Yy5VTktOT1dOKSxzPWlSKGUsby5tZXRhZGF0YS5jcmVhdGVkQXQpLGM9KDAsdGwucGopKG8pO2F8fGN8fGkuaXNTdGF0dXNNZXNzYWdlfHxvLnNlbmRlcklkIT09dFtyLTFdLnNlbmRlcklkfHxpLmRhdGVTdHJpbmchPT1zPyhuLnB1c2goaSksaT17c2VuZGVySWQ6by5zZW5kZXJJZCxtZXNzYWdlczpbb10saXNTdGF0dXNNZXNzYWdlOmEsZmFpbGVkVG9TZW5kOmMsZGF0ZVN0cmluZzpzfSk6aS5tZXNzYWdlcy5wdXNoKG8pfXJldHVybiBuLnB1c2goaSksbn0oKDAsbWUuWikoKSxzKSxFPWZ1bmN0aW9uKGUpe2ZvcihsZXQgdD1lLmxlbmd0aC0xO3Q+PTE7dC0tKXtjb25zdCBuPWVbdF07aWYoemgobi5tZXNzYWdlQ29udGVudCkpcmV0dXJuIG4uZGVzY3JpcHRvci5tZXNzYWdlSWR9fShzKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtjb25zdCBuPWZ1bmN0aW9uKGUpe2NvbnN0IHQ9WGMoKTtsZXQgbjtyZXR1cm4gWEEoKShlLChlPT4hZS5pc1N0YXR1c01lc3NhZ2UmJihuPVhBKCkoZS5tZXNzYWdlcywoZT0+ZS5zZW5kZXJJZD09PXQpKSxCb29sZWFuKG4pKSkpLG59KGUpLHI9bj9gJHtuLmRlc2NyaXB0b3IubWVzc2FnZUlkfS0keygwLHouTWMpKG4uZGVzY3JpcHRvci5jb252ZXJzYXRpb25JZCl9YDpcIlwiOygwLGQudXNlRWZmZWN0KSgoKCk9PntcIlwiIT09ciYmdC5jdXJyZW50JiZ0LmN1cnJlbnQuc2Nyb2xsVG8oMCx0LmN1cnJlbnQuc2Nyb2xsSGVpZ2h0KX0pLFtyXSl9KHksbSksZnVuY3Rpb24oZSx0KXsoMCxkLnVzZUxheW91dEVmZmVjdCkoKCgpPT57Y29uc3Qgbj10LmN1cnJlbnQ7aWYobil7aWYoZSl7Y29uc3QgZT0oKT0+e24uc3R5bGUudmlzaWJpbGl0eT1cImhpZGRlblwiLG4uYXJpYUhpZGRlbj1cInRydWVcIn07ZSgpO2NvbnN0IHQ9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCgpPT57ZSgpfSkpO3JldHVybiB0Lm9ic2VydmUobix7YXR0cmlidXRlRmlsdGVyOltcInN0eWxlXCJdfSksKCk9Pnt0LmRpc2Nvbm5lY3QoKX19bi5zdHlsZS52aXNpYmlsaXR5PVwiXCIsbi5yZW1vdmVBdHRyaWJ1dGUoXCJhcmlhLWhpZGRlblwiKX19KSxbZSx0XSl9KGEsbSksKDAsby5aKShldi5Qcm92aWRlcix7dmFsdWU6dn0sdm9pZCAwLCgwLHEuanN4cykoXCJ1bFwiLHtpZDpcImN2LVwiKygwLHouTWMpKHQpLGNsYXNzTmFtZTpyUi5ncm91cExpc3QscmVmOm0sY2hpbGRyZW46WygwLG8uWikoYVIse30sdm9pZCAwLCgwLG8uWikodFIse2lzTG9hZGluZzpsLGhhc01vcmU6YyxvblBhZ2luYXRlOnB9KSkseS5sZW5ndGg+MCYmKDAsby5aKShhUix7fSx2b2lkIDAsKDAsby5aKShvUix7ZGF0ZVN0cjp5WzBdLmRhdGVTdHJpbmd9KSkseS5tYXAoKChlLHQpPT57Y29uc3Qgbj10PjAmJnlbdC0xXS5kYXRlU3RyaW5nIT09ZS5kYXRlU3RyaW5nO3JldHVybigwLG8uWikoZC5GcmFnbWVudCx7fSxlLm1lc3NhZ2VzWzBdLmRlc2NyaXB0b3IubWVzc2FnZUlkLnRvU3RyaW5nKCksbiYmKDAsby5aKShhUix7fSx2b2lkIDAsKDAsby5aKShvUix7ZGF0ZVN0cjplLmRhdGVTdHJpbmd9KSksZS5pc1N0YXR1c01lc3NhZ2U/KDAsby5aKShhUix7fSx2b2lkIDAsKDAsby5aKShCXyx7bWVzc2FnZTplLm1lc3NhZ2VzWzBdfSkpOigwLG8uWikoYVIse30sdm9pZCAwLCgwLG8uWikoZUkse2dyb3VwOmUsbGFzdENoYXRNZWRpYVZpZGVvTWVzc2FnZTpFLGxpc3RXcmFwcGVyV2lkdGg6Z30pKSl9KSldfSkpfWNvbnN0IGNSPXtiYXJXcmFwcGVyOlwiSGtoOENcIixlbmFibGVQb2ludGVyRXZlbnRzOlwiSG1tT0JcIixiYXJIb3ZlclRhcmdldDpcInFUZnRpXCIsYmFyOlwiaWNTTTZcIixiYXJJdGVtOlwiRk5mY3BcIn07dmFyIGxSO2Z1bmN0aW9uIHVSKCl7cmV0dXJuIHVSPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sdVIuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IGRSPWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLHVSKHt2aWV3Qm94OlwiMCAwIDEzIDEwXCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLGxSfHwobFI9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTExLjgzNCAxLjI3OGEuNzcyLjc3MiAwIDAgMSAuMDU5LjI5NWguMDA1VjcuODhIMS4xMDhWMS41NzNBLjc3Mi43NzIgMCAwIDEgMS44OC44MDFoOS4yNGEuNzcyLjc3MiAwIDAgMSAuNzE0LjQ3N1ptLTkuODI1IDUuN2g4Ljk4M1YxLjcwM0gyLjAwOXY1LjI3N1ptNS42NSAxLjI4OWMwLS4wNDUtLjAxMS0uMDktLjAzMi0uMTNIMTNjMCAuNTg2LS41MyAxLjA2Mi0xLjE4IDEuMDYySDEuMThDLjUyNyA5LjE5OSAwIDguNzIzIDAgOC4xMzdoNS4zNzNhLjI4Ni4yODYgMCAwIDAgLjA1NC4zMzUuMjkuMjkgMCAwIDAgLjIwNS4wODVoMS43MzZhLjI5LjI5IDAgMCAwIC4yOS0uMjlaXCJ9KSkpO2Z1bmN0aW9uIGZSKCl7bGV0IGU9ITE7Y29uc3QgdD1bXSxuPW5ldyBTZXQscj17c3Vic2NyaWJlOmU9PihuLmFkZChlKSwoKT0+e24uZGVsZXRlKGUpfSksc3RhcnQocixpKXtpZihlKXtjb25zdCBlPVtdO3JldHVybiBuLmZvckVhY2goKHQ9PntlLnB1c2godW8odCxyLHt0cmFuc2l0aW9uT3ZlcnJpZGU6aX0pKX0pKSxQcm9taXNlLmFsbChlKX1yZXR1cm4gbmV3IFByb21pc2UoKGU9Pnt0LnB1c2goe2FuaW1hdGlvbjpbcixpXSxyZXNvbHZlOmV9KX0pKX0sc2V0OnQ9PihlaShlLFwiY29udHJvbHMuc2V0KCkgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGFmdGVyIGEgY29tcG9uZW50IGhhcyBtb3VudGVkLiBDb25zaWRlciBjYWxsaW5nIHdpdGhpbiBhIHVzZUVmZmVjdCBob29rLlwiKSxuLmZvckVhY2goKGU9PnshZnVuY3Rpb24oZSx0KXtBcnJheS5pc0FycmF5KHQpP1lyKGUsdCk6XCJzdHJpbmdcIj09dHlwZW9mIHQ/WXIoZSxbdF0pOktyKGUsdCl9KGUsdCl9KSkpLHN0b3AoKXtuLmZvckVhY2goKGU9PnshZnVuY3Rpb24oZSl7ZS52YWx1ZXMuZm9yRWFjaCgoZT0+ZS5zdG9wKCkpKX0oZSl9KSl9LG1vdW50OigpPT4oZT0hMCx0LmZvckVhY2goKCh7YW5pbWF0aW9uOmUscmVzb2x2ZTp0fSk9PntyLnN0YXJ0KC4uLmUpLnRoZW4odCl9KSksKCk9PntlPSExLHIuc3RvcCgpfSl9O3JldHVybiByfWNvbnN0IHBSPWZ1bmN0aW9uKCl7Y29uc3QgZT1xZShmUik7cmV0dXJuKDAsZC51c2VFZmZlY3QpKGUubW91bnQsW10pLGV9O3ZhciBtUj1uKDg5NDYpO2NvbnN0IGhSPS4zLHZSPXtiYXJXcmFwcGVyOlwiTjMxaEFcIixlbmFibGVQb2ludGVyRXZlbnRzOlwieXVvYTBcIixiYXJIb3ZlclRhcmdldDpcIlgyXzBYXCIsYmFyOlwicEVyTGFcIixiYXJJdGVtOlwicjZwbmlcIixhdmF0YXJDb250YWluZXI6XCJpa1pBYVwiLGF2YXRhckhlYWRXcmFwcGVyOlwiYUlHU1dcIix0eXBpbmdCdWJibGVDb250YWluZXI6XCJpR2thNlwiLGF2YXRhckhlYWQ6XCJuUWFkR1wiLGF2YXRhclR5cGluZ0FybTpcIkViZ1k4XCIsYXZhdGFyTGFwdG9wQ29udGFpbmVyOlwicTgxZktcIixhdmF0YXJMYXB0b3A6XCJtN2tGTlwiLGF2YXRhclNoZWxmSGFuZHNXcmFwcGVyOlwiQlhaRFJcIixhdmF0YXJTaGVsZkhhbmRzOlwicFBPVktcIn07dmFyIGdSLHlSLEVSLF9SLElSLFNSLGJSLFRSLENSLEFSLFJSLGtSLE9SLE5SLHdSLERSLFBSLE1SLExSLFVSLHhSLEZSLEJSLFZSO2Z1bmN0aW9uIEdSKCl7cmV0dXJuIEdSPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sR1IuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IEhSPWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLEdSKHt3aWR0aDo2MCxoZWlnaHQ6MzIsdmlld0JveDpcIjAgMCA2MCAzMlwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSxnUnx8KGdSPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIm0xLjk2NSAyNC43NjkgMzAuNjYzLTIuMDkzIDE5Ljg4IDQuMzEtLjEwNy40NDgtMzYuMjIzIDMuMjIxTDIuMDIgMjUuNzFjLS4wODYtLjA4NS0uMTQtLjIyMy0uMTYzLS40MTQtLjAzMy0uMjIzLjAwMi0uMzk5LjEwOC0uNTI3WlwiLHN0cm9rZTpcIiMxRjFGMjFcIixzdHJva2VXaWR0aDoyLjU1MyxzdHJva2VMaW5lY2FwOlwicm91bmRcIixzdHJva2VMaW5lam9pbjpcInJvdW5kXCJ9KSkseVJ8fCh5Uj1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJtNDYuNDIyIDI3Ljk3Ni4wMS0uNzk4IDUuNzcxLS41MDgtMTkuNTc1LTMuOTk0TDEuOTY1IDI0Ljc3bDE0LjQxNCA1LjA1NSA3LjE5LS42My41MS0uMDUzLjAwNy44MTQgNi41ODUtLjU3OC4wMDktLjgxNCA5LjA0LS43OWguMDE2bC0uMDEuNzk4IDYuNjk2LS41OTVaXCIsZmlsbDpcIiM5OTkxOTlcIn0pKSxFUnx8KEVSPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIm0yOS45MTUgMjguNjMzLTUuNzA4LjQ5MS0uMTI3LjAxNy0uMDEuODE0IDYuNi0uNTk1LS4wMDYtLjc5N2gtLjA0OGwtLjcwMS4wN1pcIixmaWxsOlwiIzkxOEI5MlwifSkpLF9SfHwoX1I9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwibTQ2LjQxNiAyNy4xNzgtLjI1NS4wMTgtNi40NDEuNTYxLjAwNi43OTggNi42OTYtLjU5NS0uMDA2LS43ODJaXCIsZmlsbDpcIiM5NThGOTVcIn0pKSxJUnx8KElSPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIm0zOS43MiAyNy43NTgtOS4wNTYuODA1LjAwNi43OTcgOS4wNTYtLjgwNS0uMDA2LS43OTdaXCIsZmlsbDpcIiM3QTczODFcIn0pKSxTUnx8KFNSPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIm01Mi4zODUgMjcuNDM0LjEwNi0uNzAzLS4yNzItLjA2MWgtLjAxNmwtNS43ODcuNTA4LjAwNi43ODIgNS45NjMtLjUyNlpcIixmaWxsOlwiIzcwNkE3QlwifSkpLGJSfHwoYlI9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwibTI0LjA4IDI5LjE0MS0uNTI2LjA1Mi03LjE5LjYzMS0xNC40LTUuMDU1Yy0uMTA1LjEyOC0uMTQuMzA0LS4xMDcuNTI3LjAyMy4xOTIuMDc3LjMzLjE2My40MTRsMTQuMTU4IDQuOTQ1IDcuODkyLS43LjAxLS44MTRaXCIsZmlsbDpcIiM3QTczODFcIn0pKSxUUnx8KFRSPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIk0yMy43NTcgMjguNzI5Yy4xNTIuNTE1LjEyOS45NC0uMDcgMS4yNzdsLjkyNS0uMTJjLjA5LS4zNy4wNy0uNzk2LS4wNTgtMS4yNzVsLS44MTQtLjAxYS40MS40MSAwIDAgMCAuMDE3LjEyOFpNMzAuMTUgMjguMTg0Yy4xNS41MDUuMTI2LjkyNS0uMDcgMS4yNjFsLjkxLS4wODdjLjEwOC0uNDAyLjA4My0uODctLjA3NS0xLjQwM2EuMzg5LjM4OSAwIDAgMC0uMTk0LS4yMzguMzgyLjM4MiAwIDAgMC0uMzAzLS4wMy4zODkuMzg5IDAgMCAwLS4yMzguMTk0LjM4My4zODMgMCAwIDAtLjAzLjMwM1pNMzkuMjg1IDI3LjI4MmMuMTY0LjU1Ny4xMiAxLjAxLS4xMzMgMS4zNThsLjk3My0uMDRjLjEzMi0uNDE3LjEwNy0uOTMyLS4wNzYtMS41NDdhLjM4OS4zODkgMCAwIDAtLjE5My0uMjM4LjM4Mi4zODIgMCAwIDAtLjMwNC0uMDMuMzg5LjM4OSAwIDAgMC0uMjM3LjE5NC4zODQuMzg0IDAgMCAwLS4wMy4zMDNaTTQ2LjY3NyAyNy45NDJjLjA5OC0uMzIuMTExLS42ODEuMDQtMS4wODVsLS44My0uMDFjLjEyLjUuMDYuOTEtLjE4MiAxLjIzbC45NzItLjEzNVpcIixmaWxsOlwiIzQzNDI0M1wifSkpLENSfHwoQ1I9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwibTMuMTEzIDI0LjY4LTEuMTQ4LjA4OSAxNC4zOTggNS4wNTUuNTA3LS40ODJMMy4xMTMgMjQuNjhaXCIsZmlsbDpcIiNDMEJDQzBcIn0pKSxBUnx8KEFSPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIk01Mi41NCAyNi45MDdjLjA5NS0uMDU0LjE4NS0uMTE0LjI3LS4xNzgtLjY3LS4wOC02LjkuNDIxLTE4LjY4NyAxLjUwMy01Ljg4OC41MzYtMTEuNzEyIDEuMDgyLTE3LjQ3MiAxLjYzOGwtLjIzNS41MjggMzYuMjUzLTMuMzY1Yy0uMTA3LS4wNTItLjE1LS4wOTQtLjEyOS0uMTI3WlwiLGZpbGw6XCIjMTYxOTNDXCIsZmlsbE9wYWNpdHk6LjI0N30pKSxSUnx8KFJSPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIm0xNi4wNTUgMjcuMTk0LjExMi4wMzF2LTIuMTIxbC01LjI4LjEzNyA1LjE2OCAxLjk1M1ptLjExMi4wMzEtLjExMi0uMDMuMTEyLjA0NnYtLjAxNlpcIixmaWxsOlwiIzYzNUU2M1wifSkpLGtSfHwoa1I9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwibTE2LjA1NSAyNy4xOTQuMTEyLjAzMSAxLjU1Mi40ODNtLTEuNjY0LS41MTQtNS45OTgtMS45MyA4LjQ5OS0uNjEtMi41IDIuNTRaXCIsc3Ryb2tlOlwiIzYzNUU2M1wiLHN0cm9rZVdpZHRoOi43OTgsc3Ryb2tlTGluZWNhcDpcInJvdW5kXCIsc3Ryb2tlTGluZWpvaW46XCJyb3VuZFwifSkpLE9SfHwoT1I9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwibTE1LjkxOSAyOC4wNzMgNS41MS0yMy40OTZjLjI0LS42My42ODktLjk2MyAxLjM0OC0xbDM0LjI1NS0xLjg1Yy40ODktLjA2Ny44ODgtLjAwNyAxLjE5OC4xODJhLjg4Mi44ODIgMCAwIDEgLjQyLjdsLTUuNjE1IDIyLjNcIixzdHJva2U6XCIjMjExRjFGXCIsc3Ryb2tlV2lkdGg6Mi41NTMsc3Ryb2tlTGluZWNhcDpcInJvdW5kXCIsc3Ryb2tlTGluZWpvaW46XCJyb3VuZFwifSkpLE5SfHwoTlI9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwibTUxLjIxNiAyNS44NjQtMzIuODEgMy4wNTlcIixzdHJva2U6XCIjMzUzNDM1XCIsc3Ryb2tlV2lkdGg6MS45MTQsc3Ryb2tlTGluZWNhcDpcInJvdW5kXCIsc3Ryb2tlTGluZWpvaW46XCJyb3VuZFwifSkpLHdSfHwod1I9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwiTTE2LjM5NSAyOS44MjRjLjAyLjAxNi4wNDIuMDI2LjA2NC4wMzItLjEwNi0uMTE2LS4xMjctLjEyNy0uMDY0LS4wMzJabS44LjE4NSAxLjI5LS4xMjJhLjkxMi45MTIgMCAwIDAgLjY1Mi0uMzQuOTE2LjkxNiAwIDAgMCAuMjM0LS43MDQuOTUuOTUgMCAwIDAtLjM0LS42NTEuOTQ4Ljk0OCAwIDAgMC0uNzA0LS4yMThsLTEuMjkxLjEyMmMtLjIyMi4wMi0uNjI2LjA5My0xLjIxMS4yMTcuMzY4LjY2Ni42NyAxLjIxNi45MDYgMS42NTIuMTU5LjA0Mi4zMTMuMDU3LjQ2My4wNDRaTTUxLjMxIDI2LjgybDEuMzU2LS4xMzhjLjE0NS0uNDM1LjIyMi0uNzcuMjMxLTEuMDA3LS4xNDQtLjQ0LS4yODUtLjc0Mi0uNDIyLS45MDZsLTEuMzM5LjEzOGEuOTUzLjk1MyAwIDAgMC0uODcgMS4wNDRjLjAzLjI2NC4xNDQuNDgxLjM0MS42NTJhLjk0Ljk0IDAgMCAwIC43MDQuMjE3WlwiLGZpbGw6XCIjMzUzNDM1XCJ9KSksRFJ8fChEUj1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNMTQuNzI2IDI4LjU3N2MuMTkyLjY4Ljg3MSAxLjE0MyAyLjAzNyAxLjM4OC4xNjUtMS4xNjUuMjA5LTEuNjYuMTMyLTEuNDg1IDAtLjEzOC0uNTkzLS42MDctMS43ODItMS40MDZhMS42NzIgMS42NzIgMCAwIDAtLjI2OS4zMDUgMS4yNCAxLjI0IDAgMCAwLS4xODQuOTQzYy4wMTcuMDU5LjAyOC4xMTIuMDMzLjE2bC4wMzMuMDk1Wk01NC4xNDQgMjMuOTU4YTEuMjc2IDEuMjc2IDAgMCAwLS43Ny0uNiAxLjIwNiAxLjIwNiAwIDAgMC0uOTczLjEzNi40MjMuNDIzIDAgMCAwLS4xNDMuMDk2Yy4wMDMuNTk2LjIwNiAxLjI5LjYwNyAyLjA4NWwuMTIgMS4wMmMuMjE1LS4yMjQuMzU4LS4yODMuNDMtLjE3OGEuMTIzLjEyMyAwIDAgMSAuMDQ3LS4wMTdjLjMwNy0uMTgzLjU2LS41NzMuNzU3LTEuMTdsLjA0NC0uNGExLjI0NCAxLjI0NCAwIDAgMC0uMTE5LS45NzJaXCIsZmlsbDpcIiMyMTFGMUZcIn0pKSxQUnx8KFBSPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIk01OC4xODIgMS45MWMtLjI3OC0uMTktLjUxOC0uMjgzLS43Mi0uMjgybC0zNC42ODUgMS45NWMtLjY2LjAzNi0xLjEwOC4zNy0xLjM0OC45OTlsLTUuNTEgMjMuNDk2Yy4xMjEuNTk1LjQxNi45MjcuODg1Ljk5OGwzNi4wMy0zLjM2M0w1OC42NSAyLjU5MmMtLjAxMi0uMjM0LS4xNjktLjQ2MS0uNDY4LS42ODJaXCIsZmlsbDpcInVybCgjZDY0NDRkOGRlNzA5ZTdlMGYxYzBhMmY4MzZmOTRmMGY4NDBhZWQ3Y19fYSlcIn0pKSxNUnx8KE1SPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIm01OC4xNTMgNC4yNzEuNDE3LTEuNjc4LTEwLjI1My42NzEtMjguNTk2IDI1LjU0NSAxMC43NDYtMS4wMUw1OC4xNTMgNC4yN1pcIixmaWxsOlwidXJsKCNkNjQ0NGQ4ZGU3MDllN2UwZjFjMGEyZjgzNmY5NGYwZjg0MGFlZDdjX19iKVwifSkpLExSfHwoTFI9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwiTTM1LjQyMyAxNC43MzRjLS4xNjEuMDUzLS4yNi4xMy0uMjk1LjIzMy0uMDM0LjEtLjAyNC4yLjAzLjMuMDQ0LjEwMi4xNjcuMjE4LjM2Ni4zNS4xNDEuMDkuMzI3LjIwNi41NTguMzQ3LjA0NC4wMTMuMDY4LjA1Ni4wNzEuMTI5YTEuMTMzIDEuMTMzIDAgMCAxLS4xMDcuMjVjLS41MDguODE4LTEuMjY3IDEuNDczLTIuMjggMS45NjYtLjE0OC4wNTMtLjIyOS4xMTEtLjI0MS4xNzQtLjAyNi4wNTguMDIyLjEzMi4xNDIuMjIyLjA2OC4wNTIuMTg3LjEwMS4zNTcuMTUuMTYuMDQzLjMxNC4wNzEuNDYyLjA4Ni4wNy4wMDIuMTMyLjAyNi4xODUuMDczLjA1LjAzNi4wNjQuMDgzLjA0NC4xNC0uMDYuMTI4LS4wNjIuMjE4LS4wMS4yNy4wNDIuMDU3LjE2NC4wOS4zNjUuMDk5LjEyNy0uMDAxLjI3LjAwMi40My4wMDguMTQtLjAxNC4yNjItLjAyLjM2My0uMDE4LjEyLjAyMi4yNzIuMDcuNDU1LjE0LjE4OC4wNjUuMzA1LjEyMi4zNS4xNzQuMTIzLjEyNy4zMDIuMjIuNTM3LjI4MS4yMjIuMDQzLjUxLjA1My44NjUuMDMyLjU0Mi0uMDI3IDEuMDk3LS4yNDggMS42NjQtLjY2Mi4xNC0uMDkuMjgzLS4xNS40My0uMTgzLjEzMi0uMDQuMjktLjA1Ny40NzYtLjA1LjE1Ni0uMDAyLjMyMi0uMDIuNDk2LS4wNTYuMTcyLS4wNTMuMjc3LS4xMTIuMzE1LS4xNzhhLjE3Mi4xNzIgMCAwIDEgLjAyMy0uMTEuNDcuNDcgMCAwIDEgLjEtLjIwNGMuMDQxLS4wNi4xMjQtLjEwMi4yNS0uMTI3LjA3Mi0uMDI0LjIyMy0uMDU5LjQ1Mi0uMTA1LjE4Mi0uMDU5LjMyNC0uMTE3LjQyNS0uMTc1YS41NzcuNTc3IDAgMCAwIC4xNzgtLjIxYy4wMjYtLjA3Mi4wMDMtLjEyNy0uMDY4LS4xNjMtLjg3NC0uNDE4LTEuMzE2LTEuMDYyLTEuMzI1LTEuOTMzLjAwNS0uMDczLjAxMy0uMTE4LjAyNi0uMTM3LjAxOC0uMDQyLjA3Ny0uMDgxLjE3NS0uMTE5LjQ1Ny0uMjIuNzg0LS40MTEuOTgxLS41NzQuMTQ4LS4xNTUuMjItLjMwNi4yMTYtLjQ1Mi0uMDItLjE1Ni0uMTIzLS4yMjYtLjMxLS4yMDgtLjE4OC4wMi0uNDc2LjEyNC0uODYzLjMxNS0uMDM5LjAwOC0uMDYuMDA1LS4wNjYtLjAxLS4wMTktLjAxOS0uMDE5LS4wMzkgMC0uMDYuNDMtMS4xODQuNDkzLTIuMDguMTg1LTIuNjg4LS4zMTUtLjYxNy0uOTc3LS45MzEtMS45ODYtLjk0Mi0yLjAwOS4xMzYtMy4xMDQgMS4zOTItMy4yODYgMy43NjgtLjAxLjA1LS4wMTcuMDg0LS4wMjMuMTAyLS41ODMtLjIxNC0uOTUzLS4yOTYtMS4xMTItLjI0NVpcIixmaWxsOlwidXJsKCNkNjQ0NGQ4ZGU3MDllN2UwZjFjMGEyZjgzNmY5NGYwZjg0MGFlZDdjX19jKVwifSkpLFVSfHwoVVI9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwiTTQxLjQ1MSAxOS4wMTFjLS4wMzguMDY2LS4xNDMuMTI1LS4zMTUuMTc4LS4xNzUuMDM2LS4zNC4wNTQtLjQ5Ni4wNTVhMS40NzcgMS40NzcgMCAwIDAtLjQ3Ny4wNTEgMS4zMjcgMS4zMjcgMCAwIDAtLjQyOS4xODNjLS41NjcuNDE0LTEuMTIyLjYzNS0xLjY2NC42NjItLjM1NS4wMjEtLjY0My4wMS0uODY1LS4wMzItLjIzNS0uMDYtLjQxNC0uMTU0LS41MzgtLjI4MS0uMDQ0LS4wNTItLjE2LS4xMS0uMzQ5LS4xNzNhMi42NDUgMi42NDUgMCAwIDAtLjQ1NS0uMTQxIDMuMTM1IDMuMTM1IDAgMCAwLS4zNjMuMDE4IDguNjc2IDguNjc2IDAgMCAwLS40My0uMDA4Yy0uMjAxLS4wMDktLjMyMy0uMDQyLS4zNjUtLjA5OS0uMDUyLS4wNTItLjA1LS4xNDIuMDEtLjI3LjAyLS4wNTcuMDA1LS4xMDQtLjA0NC0uMTRhLjI4My4yODMgMCAwIDAtLjE4NS0uMDczIDIuODIgMi44MiAwIDAgMS0uNDYyLS4wODYgMS4xNDggMS4xNDggMCAwIDEtLjM1Ny0uMTVjLS4xMi0uMDktLjE2OC0uMTY0LS4xNDItLjIyMi4wMTItLjA2My4wOTMtLjEyLjI0LS4xNzQgMS4wMTQtLjQ5MyAxLjc3My0xLjE0OCAyLjI4LTEuOTY1LjA1Ny0uMTA1LjA5My0uMTg5LjEwOC0uMjUxLS4wMDMtLjA3My0uMDI3LS4xMTYtLjA3MS0uMTI5YTQyLjQ3IDQyLjQ3IDAgMCAxLS41NTgtLjM0N2MtLjItLjEzMi0uMzIyLS4yNDgtLjM2Ny0uMzVhLjM3Mi4zNzIgMCAwIDEtLjAzLS4zYy4wMzYtLjEwMi4xMzUtLjE4LjI5Ni0uMjMzLjE1OC0uMDUxLjUzLjAzIDEuMTEyLjI0NS4wMDYtLjAxOC4wMTMtLjA1Mi4wMjMtLjEwMi4xODItMi4zNzYgMS4yNzctMy42MzIgMy4yODYtMy43NjggMS4wMS4wMSAxLjY3MS4zMjUgMS45ODYuOTQzLjMwOC42MDcuMjQ2IDEuNTAzLS4xODYgMi42ODctLjAxOC4wMjEtLjAxOC4wNDEgMCAuMDYuMDA2LjAxNS4wMjguMDE4LjA2Ny4wMS4zODctLjE5LjY3NS0uMjk2Ljg2Mi0uMzE1LjE4OC0uMDE4LjI5MS4wNTIuMzEuMjA4LjAwNC4xNDYtLjA2Ny4yOTctLjIxNS40NTItLjE5Ny4xNjMtLjUyNC4zNTQtLjk4LjU3NC0uMS4wMzgtLjE1OC4wNzctLjE3Ni4xMi0uMDEzLjAxOC0uMDIxLjA2My0uMDI2LjEzNi4wMS44Ny40NTEgMS41MTUgMS4zMjUgMS45MzMuMDcuMDM2LjA5My4wOS4wNjguMTY0YS41NzcuNTc3IDAgMCAxLS4xNzguMjA5IDIuMjk1IDIuMjk1IDAgMCAxLS40MjUuMTc1Yy0uMjMuMDQ2LS4zOC4wODEtLjQ1My4xMDUtLjEyNS4wMjUtLjIwOC4wNjctLjI1LjEyN2EuNDcuNDcgMCAwIDAtLjEuMjA0LjE3Mi4xNzIgMCAwIDAtLjAyMi4xMVpcIixzdHJva2U6XCIjMzgzODM4XCIsc3Ryb2tlV2lkdGg6MS4wOTUsc3Ryb2tlTGluZWNhcDpcInJvdW5kXCIsc3Ryb2tlTGluZWpvaW46XCJyb3VuZFwifSkpLHhSfHwoeFI9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwiTTM1LjQyMyAxNC43MzRjLS4xNjEuMDUzLS4yNi4xMy0uMjk1LjIzMy0uMDM0LjEtLjAyNC4yLjAzLjMuMDQ0LjEwMi4xNjcuMjE4LjM2Ni4zNS4xNDEuMDkuMzI3LjIwNi41NTguMzQ3LjA0NC4wMTMuMDY4LjA1Ni4wNzEuMTI5YTEuMTMzIDEuMTMzIDAgMCAxLS4xMDcuMjVjLS41MDguODE4LTEuMjY3IDEuNDczLTIuMjggMS45NjYtLjE0OC4wNTMtLjIyOS4xMTEtLjI0MS4xNzQtLjAyNi4wNTguMDIyLjEzMi4xNDIuMjIyLjA2OC4wNTIuMTg3LjEwMS4zNTcuMTUuMTYuMDQzLjMxNC4wNzEuNDYyLjA4Ni4wNy4wMDIuMTMyLjAyNi4xODUuMDczLjA1LjAzNi4wNjQuMDgzLjA0NC4xNC0uMDYuMTI4LS4wNjIuMjE4LS4wMS4yNy4wNDIuMDU3LjE2NC4wOS4zNjUuMDk5LjEyNy0uMDAxLjI3LjAwMi40My4wMDguMTQtLjAxNC4yNjItLjAyLjM2My0uMDE4LjEyLjAyMi4yNzIuMDcuNDU1LjE0LjE4OC4wNjUuMzA1LjEyMi4zNS4xNzQuMTIzLjEyNy4zMDIuMjIuNTM3LjI4MS4yMjIuMDQzLjUxLjA1My44NjUuMDMyLjU0Mi0uMDI3IDEuMDk3LS4yNDggMS42NjQtLjY2Mi4xNC0uMDkuMjgzLS4xNS40My0uMTgzLjEzMi0uMDQuMjktLjA1Ny40NzYtLjA1LjE1Ni0uMDAyLjMyMi0uMDIuNDk2LS4wNTYuMTcyLS4wNTMuMjc3LS4xMTIuMzE1LS4xNzhhLjE3Mi4xNzIgMCAwIDEgLjAyMy0uMTEuNDcuNDcgMCAwIDEgLjEtLjIwNGMuMDQxLS4wNi4xMjQtLjEwMi4yNS0uMTI3LjA3Mi0uMDI0LjIyMy0uMDU5LjQ1Mi0uMTA1LjE4Mi0uMDU5LjMyNC0uMTE3LjQyNS0uMTc1YS41NzcuNTc3IDAgMCAwIC4xNzgtLjIxYy4wMjYtLjA3Mi4wMDMtLjEyNy0uMDY4LS4xNjMtLjg3NC0uNDE4LTEuMzE2LTEuMDYyLTEuMzI1LTEuOTMzLjAwNS0uMDczLjAxMy0uMTE4LjAyNi0uMTM3LjAxOC0uMDQyLjA3Ny0uMDgxLjE3NS0uMTE5LjQ1Ny0uMjIuNzg0LS40MTEuOTgxLS41NzQuMTQ4LS4xNTUuMjItLjMwNi4yMTYtLjQ1Mi0uMDItLjE1Ni0uMTIzLS4yMjYtLjMxLS4yMDgtLjE4OC4wMi0uNDc2LjEyNC0uODYzLjMxNS0uMDM5LjAwOC0uMDYuMDA1LS4wNjYtLjAxLS4wMTktLjAxOS0uMDE5LS4wMzkgMC0uMDYuNDMtMS4xODQuNDkzLTIuMDguMTg1LTIuNjg4LS4zMTUtLjYxNy0uOTc3LS45MzEtMS45ODYtLjk0Mi0yLjAwOS4xMzYtMy4xMDQgMS4zOTItMy4yODYgMy43NjgtLjAxLjA1LS4wMTcuMDg0LS4wMjMuMTAyLS41ODMtLjIxNC0uOTUzLS4yOTYtMS4xMTItLjI0NVpcIixmaWxsOlwidXJsKCNkNjQ0NGQ4ZGU3MDllN2UwZjFjMGEyZjgzNmY5NGYwZjg0MGFlZDdjX19kKVwifSkpLEZSfHwoRlI9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwiTTU4LjE4MiAxLjkxYy0uMjc4LS4xOS0uNTE4LS4yODMtLjcyLS4yODJsLTM0LjY4NSAxLjk1Yy0uNDE4LjAyMy0uNzUyLjE2NC0xLjAwMi40MjJsLjYxMy43NiAzNi4yMy0yLjA4OC4wMzItLjA4Yy0uMDEyLS4yMzQtLjE2OS0uNDYxLS40NjgtLjY4MlpcIixmaWxsOlwiI0RCRDZEM1wiLGZpbGxPcGFjaXR5Oi45ODh9KSksQlJ8fChCUj1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNMjEuODIzIDMuOTUyYTEuNjkgMS42OSAwIDAgMC0uMzk0LjYyNWwtNS41MSAyMy40OTZjLjExNy41NzUuMzk2LjkwMi44MzcuOTgybDUuNjMxLTI0LjI5NC0uNTY0LS44MVpcIixmaWxsOlwiI0NDQzlDQ1wifSkpLFZSfHwoVlI9ZC5jcmVhdGVFbGVtZW50KFwiZGVmc1wiLG51bGwsZC5jcmVhdGVFbGVtZW50KFwibGluZWFyR3JhZGllbnRcIix7aWQ6XCJkNjQ0NGQ4ZGU3MDllN2UwZjFjMGEyZjgzNmY5NGYwZjg0MGFlZDdjX19hXCIseDE6MzkuNzY0LHkxOjIyLjMwOSx4MjozNi44NDMseTI6OS45MDQsZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCJ9LGQuY3JlYXRlRWxlbWVudChcInN0b3BcIix7c3RvcENvbG9yOlwiIzlCOTk5RVwifSksZC5jcmVhdGVFbGVtZW50KFwic3RvcFwiLHtvZmZzZXQ6MSxzdG9wQ29sb3I6XCIjODg3RDg4XCJ9KSksZC5jcmVhdGVFbGVtZW50KFwibGluZWFyR3JhZGllbnRcIix7aWQ6XCJkNjQ0NGQ4ZGU3MDllN2UwZjFjMGEyZjgzNmY5NGYwZjg0MGFlZDdjX19iXCIseDE6OTQuMjUyLHkxOjE0LjM0OSx4Mjo5My44NDMseTI6LTEwLjI5NyxncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIn0sZC5jcmVhdGVFbGVtZW50KFwic3RvcFwiLHtzdG9wQ29sb3I6XCIjZmZmXCIsc3RvcE9wYWNpdHk6LjA2N30pLGQuY3JlYXRlRWxlbWVudChcInN0b3BcIix7b2Zmc2V0OjEsc3RvcENvbG9yOlwiI2ZmZlwiLHN0b3BPcGFjaXR5Oi40Mn0pKSxkLmNyZWF0ZUVsZW1lbnQoXCJsaW5lYXJHcmFkaWVudFwiLHtpZDpcImQ2NDQ0ZDhkZTcwOWU3ZTBmMWMwYTJmODM2Zjk0ZjBmODQwYWVkN2NfX2NcIix4MTozOS40Nix5MToxNy4wOTIseDI6MzcuNzA2LHkyOjE0LjU5NCxncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIn0sZC5jcmVhdGVFbGVtZW50KFwic3RvcFwiLHtzdG9wQ29sb3I6XCIjRTNFM0UzXCJ9KSxkLmNyZWF0ZUVsZW1lbnQoXCJzdG9wXCIse29mZnNldDoxLHN0b3BDb2xvcjpcIiNFQUVBRUFcIn0pKSxkLmNyZWF0ZUVsZW1lbnQoXCJsaW5lYXJHcmFkaWVudFwiLHtpZDpcImQ2NDQ0ZDhkZTcwOWU3ZTBmMWMwYTJmODM2Zjk0ZjBmODQwYWVkN2NfX2RcIix4MTozOS40Nix5MToxNy4wOTIseDI6MzcuNzA2LHkyOjE0LjU5NCxncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIn0sZC5jcmVhdGVFbGVtZW50KFwic3RvcFwiLHtzdG9wQ29sb3I6XCIjRTNFM0UzXCJ9KSxkLmNyZWF0ZUVsZW1lbnQoXCJzdG9wXCIse29mZnNldDoxLHN0b3BDb2xvcjpcIiNFQUVBRUFcIn0pKSkpKTt2YXIgV1IsalIsWlI7ZnVuY3Rpb24gelIoKXtyZXR1cm4gelI9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSx6Ui5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y29uc3QgS1I9ZT0+ZC5jcmVhdGVFbGVtZW50KFwic3ZnXCIselIoe3dpZHRoOjIyLGhlaWdodDoyMix2aWV3Qm94OlwiMyAyIDI1IDI0XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLFdSfHwoV1I9ZC5jcmVhdGVFbGVtZW50KFwiZ1wiLHtmaWx0ZXI6XCJ1cmwoI2ZlMGQ5ODMwNjQ5MjQzMThhOGM1NDA3ZGEzNTFlM2NkNTQ3YjhiYTFfX2EpXCJ9LGQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIk0xMy45MiAxLjg2N2MtMi4wMDYgMC0zLjc1NCAxLjIxLTQuNjYzIDIuOTk4YTQuODg4IDQuODg4IDAgMCAwLS42MTUtLjAzOWMtMi45NDMgMC01LjMzIDIuNjA0LTUuMzMgNS44MTYgMCAxLjExMy4yODcgMi4xNTMuNzg0IDMuMDM3YTYuMjYzIDYuMjYzIDAgMCAwLS4zOSAyLjE4OGMwIDMuMjExIDIuMzg2IDUuODE1IDUuMzMgNS44MTUuMTQ4IDAgLjI5NS0uMDA3LjQ0LS4wMi45NTQgMS41NyAyLjU4OSAyLjYwNSA0LjQ0NCAyLjYwNSAxLjMzNSAwIDIuNTU1LS41MzYgMy40OS0xLjQyYTQuOTQ5IDQuOTQ5IDAgMCAwIDIuMjg0LjU1OGMyLjg1IDAgNS4xNzctMi40NDEgNS4zMjItNS41MTIgMS41OTctMS4wMDUgMi42NzItMi44ODYgMi42NzItNS4wNDIgMC0yLjQyMi0xLjM1OC00LjQ5OC0zLjI4OC01LjM3My0uNjA0LTIuNDg3LTIuNjgxLTQuMzE5LTUuMTUtNC4zMTlhNC45MiA0LjkyIDAgMCAwLTEuNjc0LjI5MmMtLjk1NC0uOTgyLTIuMjQtMS41ODQtMy42NTYtMS41ODRaXCIsZmlsbDpcIiMwMDBcIn0pKSksalJ8fChqUj1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMTMuOTIgMi4zMzNjMS4yNDggMCAyLjQyNC41MiAzLjMyIDEuNDQzbC4yMS4yMTcuMjg2LS4xMDNhNC40NSA0LjQ1IDAgMCAxIDEuNTE0LS4yNjRjMi4yMDYgMCA0LjEzIDEuNjM2IDQuNjk1IDMuOTYybC4wNTMuMjIuMjA4LjA5NWMxLjgwNC44MTcgMy4wMTMgMi43NTYgMy4wMTMgNC45NDggMCAxLjk0NS0uOTUxIDMuNzAyLTIuNDU0IDQuNjQ3bC0uMjA2LjEzLS4wMTIuMjQzYy0uMTMzIDIuODQyLTIuMjc0IDUuMDY3LTQuODUzIDUuMDY3YTQuNDc3IDQuNDc3IDAgMCAxLTIuMDY4LS41MDZsLS4yOTYtLjE1My0uMjQzLjIyOWMtLjg3Ny44My0xLjk5IDEuMjkyLTMuMTY3IDEuMjkyLTEuNjM5IDAtMy4xNDQtLjkwMS00LjA0Mi0yLjM4bC0uMTUyLS4yNDktLjI5MS4wMjdhNC40OTYgNC40OTYgMCAwIDEtLjQuMDE3Yy0yLjY3NCAwLTQuODYtMi4zODUtNC44Ni01LjM0OCAwLS43MDUuMTIzLTEuMzkuMzYtMi4wMjZsLjA3Ni0uMjAyLS4xMDYtLjE4OWE1LjcyMiA1LjcyMiAwIDAgMS0uNzI0LTIuODA4YzAtMi45NjMgMi4xODYtNS4zNSA0Ljg2LTUuMzUuMTg4IDAgLjM3NC4wMTMuNTU3LjAzNmwuMzI4LjA0MS4xNS0uMjkzYy44NTUtMS42ODQgMi40NjgtMi43NDMgNC4yNDQtMi43NDNaXCIsZmlsbDpcInVybCgjZmUwZDk4MzA2NDkyNDMxOGE4YzU0MDdkYTM1MWUzY2Q1NDdiOGJhMV9fYilcIixzdHJva2U6XCIjNDc0QTRGXCIsc3Ryb2tlV2lkdGg6LjkzM30pKSxaUnx8KFpSPWQuY3JlYXRlRWxlbWVudChcImRlZnNcIixudWxsLGQuY3JlYXRlRWxlbWVudChcImxpbmVhckdyYWRpZW50XCIse2lkOlwiZmUwZDk4MzA2NDkyNDMxOGE4YzU0MDdkYTM1MWUzY2Q1NDdiOGJhMV9fYlwiLHgxOjUuOTA1LHkxOjguMzIyLHgyOjIwLjI1NSx5MjoyMS4yMjMsZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCJ9LGQuY3JlYXRlRWxlbWVudChcInN0b3BcIix7c3RvcENvbG9yOlwiI2ZmZlwifSksZC5jcmVhdGVFbGVtZW50KFwic3RvcFwiLHtvZmZzZXQ6MSxzdG9wQ29sb3I6XCIjRTlFREYyXCJ9KSksZC5jcmVhdGVFbGVtZW50KFwiZmlsdGVyXCIse2lkOlwiZmUwZDk4MzA2NDkyNDMxOGE4YzU0MDdkYTM1MWUzY2Q1NDdiOGJhMV9fYVwiLHg6LjUxMix5OjAsd2lkdGg6MjkuOTc1LGhlaWdodDoyOCxmaWx0ZXJVbml0czpcInVzZXJTcGFjZU9uVXNlXCIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczpcInNSR0JcIn0sZC5jcmVhdGVFbGVtZW50KFwiZmVGbG9vZFwiLHtmbG9vZE9wYWNpdHk6MCxyZXN1bHQ6XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIn0pLGQuY3JlYXRlRWxlbWVudChcImZlQ29sb3JNYXRyaXhcIix7aW46XCJTb3VyY2VBbHBoYVwiLHZhbHVlczpcIjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwXCIscmVzdWx0OlwiaGFyZEFscGhhXCJ9KSxkLmNyZWF0ZUVsZW1lbnQoXCJmZU9mZnNldFwiLHtkeTouOTMzfSksZC5jcmVhdGVFbGVtZW50KFwiZmVHYXVzc2lhbkJsdXJcIix7c3RkRGV2aWF0aW9uOjEuNH0pLGQuY3JlYXRlRWxlbWVudChcImZlQ29sb3JNYXRyaXhcIix7dmFsdWVzOlwiMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4xOTc1NzcgMFwifSksZC5jcmVhdGVFbGVtZW50KFwiZmVCbGVuZFwiLHtpbjI6XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIixyZXN1bHQ6XCJlZmZlY3QxX2Ryb3BTaGFkb3dfMV83XCJ9KSxkLmNyZWF0ZUVsZW1lbnQoXCJmZUJsZW5kXCIse2luOlwiU291cmNlR3JhcGhpY1wiLGluMjpcImVmZmVjdDFfZHJvcFNoYWRvd18xXzdcIixyZXN1bHQ6XCJzaGFwZVwifSkpKSkpLFlSPXt0eXBpbmdCdWJibGU6XCJSR0pRRVwiLGNsb3VkOlwic1RmaUNcIixkb3Q6XCJ4bGxLQVwifTtmdW5jdGlvbiBxUihlKXtyZXR1cm4gZT09PWV1Lm9jLlRZUElOR3x8ZT09PWV1Lm9jLlBBVVNFRH1jb25zdCBYUj0zLFFSPS42KlhSLEpSPXtjYW5jZWxsZWQ6e3RyYW5zbGF0ZVk6MCxzY2FsZTpcIjAlXCIscm90YXRlOlwiLTE1ZGVnXCIsb3BhY2l0eToxfSxwYXVzZWQ6e3RyYW5zbGF0ZVk6MCxzY2FsZTpcIjEwMCVcIixyb3RhdGU6XCIwZGVnXCIsb3BhY2l0eToxfSx0eXBpbmc6e3RyYW5zbGF0ZVk6WzAsMF0sc2NhbGU6W1wiOTUlXCIsXCIxMDAlXCJdLHJvdGF0ZTpbXCIwZGVnXCIsXCIwZGVnXCJdLG9wYWNpdHk6WzEsMV0sdHJhbnNpdGlvbjp7cmVwZWF0OjEvMCxyZXBlYXRUeXBlOlwibWlycm9yXCIsZHVyYXRpb246LjMsc3RhZ2dlckNoaWxkcmVuOi42fX0scmVjZWl2ZTp7dHJhbnNsYXRlWTpcIi0xNnB4XCIsc2NhbGU6XCIxNTAlXCIscm90YXRlOlwiMTVkZWdcIixvcGFjaXR5OjAsdHJhbnNpdGlvbjp7ZHVyYXRpb246LjJ9fSxlbnRlcjp7dHJhbnNsYXRlWTpcIi0xNnB4XCIsc2NhbGU6XCIwJVwiLHJvdGF0ZTpcIjQ1ZGVnXCIsb3BhY2l0eTowfX0sJFI9e2NhbmNlbGxlZDp7dHJhbnNsYXRlWTowLG9wYWNpdHk6LjV9LHBhdXNlZDp7dHJhbnNsYXRlWTowLG9wYWNpdHk6LjV9LHR5cGluZzp7dHJhbnNsYXRlWTpbMCwtMiwwLDBdLG9wYWNpdHk6Wy41LDEsLjUsLjVdLHRyYW5zaXRpb246e3RpbWVzOlswLC4zL1FSLC42L1FSLDFdLGR1cmF0aW9uOlFSLGVhc2U6XCJlYXNlSW5PdXRcIixyZXBlYXQ6MS8wLHJlcGVhdFR5cGU6XCJsb29wXCJ9fSxyZWNlaXZlOnt0cmFuc2xhdGVZOjAsb3BhY2l0eTouNX0sZW50ZXI6e3RyYW5zbGF0ZVk6MCxvcGFjaXR5Oi41fX07ZnVuY3Rpb24gZWsoKXtyZXR1cm4oMCxvLlopKHhzLmRpdix7Y2xhc3NOYW1lOllSLmRvdCx2YXJpYW50czokUn0pfWZ1bmN0aW9uIHRrKGUpe2xldHtjbGFzc05hbWU6dCx0eXBpbmdTdGF0ZTpufT1lO2NvbnN0IHI9cFIoKSxpPSgwLGQudXNlUmVmKShuKTtyZXR1cm4oMCxkLnVzZUVmZmVjdCkoKCgpPT57aS5jdXJyZW50PT09ZXUub2MuTk9ORSYmcVIobikmJnIuc2V0KFwiZW50ZXJcIikscVIoaS5jdXJyZW50KSYmbj09PWV1Lm9jLk5PTkU/ci5zdGFydChcImNhbmNlbGxlZFwiKTpxUihpLmN1cnJlbnQpJiZuPT09ZXUub2MuRklOSVNIRUQ/ci5zdGFydChcInJlY2VpdmVcIik6bj09PWV1Lm9jLlRZUElORz9yLnN0YXJ0KFwidHlwaW5nXCIpOm49PT1ldS5vYy5GSU5JU0hFRD9yLnN0YXJ0KFwic2VudFwiKTpuPT09ZXUub2MuUEFVU0VEP3Iuc3RhcnQoXCJwYXVzZWRcIik6ci5zdGFydChcImVudGVyXCIpLGkuY3VycmVudD1ufSksW24scl0pLCgwLG8uWikoeHMuZGl2LHtjbGFzc05hbWU6KDAsUS5aKSh0LFlSLnR5cGluZ0J1YmJsZSksaW5pdGlhbDpcImVudGVyXCIsYW5pbWF0ZTpyLHZhcmlhbnRzOkpSLHRyYW5zaXRpb246e2R1cmF0aW9uOi4zLGVhc2U6XCJlYXNlSW5PdXRcIn19LHZvaWQgMCwoMCxvLlopKEtSLHtjbGFzc05hbWU6WVIuY2xvdWR9KSxBcnJheShYUikuZmlsbCgwKS5tYXAoKChlLHQpPT4oMCxvLlopKGVrLHt9LHQpKSkpfUMoKS5nZXRMb2dnZXIoXCJQcmVzZW5jZUF2YXRhclwiKTtjb25zdCBuaz0yLHJrPXtwZWVraW5nOi43NzIsdHlwaW5nUGF1c2VkOi43NzIsZnVsbEZhY2U6MSx0eXBpbmc6MX0saWs9e3BlZWtpbmc6ZT0+KHt0cmFuc2xhdGVZOihlPzI1OjM5KS9yay5wZWVraW5nK1wiJVwiLHNjYWxlOnJrLnBlZWtpbmd9KSx0eXBpbmc6e3RyYW5zbGF0ZVk6MjUvcmsudHlwaW5nK1wiJVwiLHNjYWxlOnJrLnR5cGluZ30sdHlwaW5nUGF1c2VkOnt0cmFuc2xhdGVZOjI1L3JrLnR5cGluZ1BhdXNlZCtcIiVcIixzY2FsZTpyay50eXBpbmdQYXVzZWR9LGx1cmtpbmc6e3RyYW5zbGF0ZVk6XCIxMDAlXCJ9LGZ1bGxGYWNlOnt0cmFuc2xhdGVZOjE5L3JrLmZ1bGxGYWNlK1wiJVwiLHNjYWxlOnJrLmZ1bGxGYWNlfSxleGl0Ont0cmFuc2xhdGVZOlwiMTAwJVwifX0sb2s9e3BlZWtpbmc6e3NjYWxlOnJrLnBlZWtpbmcsdHJhbnNsYXRlWTpcIi0zJVwifSx0eXBpbmc6e3NjYWxlOnJrLnR5cGluZyx0cmFuc2xhdGVZOlwiLTMlXCJ9LHR5cGluZ1BhdXNlZDp7c2NhbGU6cmsudHlwaW5nUGF1c2VkLHRyYW5zbGF0ZVk6XCItMyVcIn0sbHVya2luZzp7fSxmdWxsRmFjZTp7c2NhbGU6cmsuZnVsbEZhY2UsdHJhbnNsYXRlWTpcIi0zJVwifSxleGl0Ont9fSxhaz17cGVla2luZzplPT4oe3NjYWxlOnJrLnBlZWtpbmcsY2xpcFBhdGg6ZT9cImluc2V0KDAgNTAlIDAgMClcIjpcImluc2V0KDApXCIsdHJhbnNsYXRlWDplPzIxKnJrLnBlZWtpbmcrXCIlXCI6dm9pZCAwLHRyYW5zbGF0ZVk6ZT8tNDAqcmsucGVla2luZytcIiVcIjp2b2lkIDB9KSx0eXBpbmc6ZT0+KHtzY2FsZTpyay50eXBpbmcsY2xpcFBhdGg6XCJpbnNldCgwIDUwJSAwIDApXCIsdHJhbnNsYXRlWDplPzIxKnJrLnR5cGluZytcIiVcIjp2b2lkIDAsdHJhbnNsYXRlWTplPy02MCpyay50eXBpbmcrXCIlXCI6dm9pZCAwfSksdHlwaW5nUGF1c2VkOmU9Pih7c2NhbGU6cmsudHlwaW5nUGF1c2VkLGNsaXBQYXRoOmU/XCJpbnNldCgwIDUwJSAwIDApXCI6XCJpbnNldCgwKVwiLHRyYW5zbGF0ZVg6ZT8yMSpyay50eXBpbmdQYXVzZWQrXCIlXCI6dm9pZCAwLHRyYW5zbGF0ZVk6ZT8tNDAqcmsudHlwaW5nUGF1c2VkK1wiJVwiOnZvaWQgMH0pLGx1cmtpbmc6ZT0+KHtjbGlwUGF0aDplP1wiaW5zZXQoMCA1MCUgMCAwKVwiOlwiaW5zZXQoMClcIix0cmFuc2xhdGVYOmU/MjEqcmsuZnVsbEZhY2UrXCIlXCI6dm9pZCAwLHRyYW5zbGF0ZVk6ZT8tNjAqcmsuZnVsbEZhY2UrXCIlXCI6dm9pZCAwfSksZnVsbEZhY2U6ZT0+KHtzY2FsZTpyay5mdWxsRmFjZSxjbGlwUGF0aDplP1wiaW5zZXQoMCA1MCUgMCAwKVwiOlwiaW5zZXQoMClcIix0cmFuc2xhdGVYOmU/MjEqcmsuZnVsbEZhY2UrXCIlXCI6dm9pZCAwLHRyYW5zbGF0ZVk6ZT8tNjAqcmsuZnVsbEZhY2UrXCIlXCI6dm9pZCAwfSksZXhpdDp7ZGlzcGxheTpcIm5vbmVcIix0cmFuc2l0aW9uOntkZWxheTpoUn19fSxzaz17dHJhbnNsYXRlWTp7dHlwZTpcInNwcmluZ1wiLGR1cmF0aW9uOmhSLGJvdW5jZTouNH19LGNrPXtkdXJhdGlvbjpoUixlYXNlOlwiZWFzZUluT3V0XCJ9O2Z1bmN0aW9uIGxrKGUpe2xldHthdmF0YXJJZDp0LHR5cGluZ1N0YXRlOm4sdXNlRnVsbEZhY2VFbnRyYW5jZTpyLHByZXNzZWQ6aSx1c2VMYXB0b3A6YX09ZTtjb25zdHtub3JtYWxCb2R5OnMsc2hlbGZIYW5kczpjLHR5cGluZ0FybTpsLHR5cGluZ0JvZHk6dX09KDAsbVIuUykodCksZj1mdW5jdGlvbihlLHQpe2lmKHQpcmV0dXJuXCJmdWxsRmFjZVwiO3N3aXRjaChlKXtjYXNlIGV1Lm9jLkZJTklTSEVEOmNhc2UgZXUub2MuTk9ORTpyZXR1cm5cInBlZWtpbmdcIjtjYXNlIGV1Lm9jLlBBVVNFRDpyZXR1cm5cInR5cGluZ1BhdXNlZFwiO2Nhc2UgZXUub2MuVFlQSU5HOnJldHVyblwidHlwaW5nXCI7ZGVmYXVsdDpyZXR1cm5cInBlZWtpbmdcIn19KG4sQm9vbGVhbihpKSkscD1wUigpLG09KDAsZC51c2VSZWYpKCEwKTsoMCxkLnVzZUVmZmVjdCkoKCgpPT57bS5jdXJyZW50PyhtLmN1cnJlbnQ9ITEscj8ocC5zZXQoe3NjYWxlOnJrLmZ1bGxGYWNlfSkscC5zdGFydChcImZ1bGxGYWNlXCIsc2spLnRoZW4oKGFzeW5jKCk9PnAuc3RhcnQoZix7Li4uY2ssZGVsYXk6bmt9KSkpKToocC5zZXQoe3NjYWxlOnJrW2ZdfSkscC5zdGFydChmLHNrKSkpOnAuc3RhcnQoZil9KSxbZixwLHJdKTtjb25zdCBoPVwidHlwaW5nXCI9PT1mfHxcInR5cGluZ1BhdXNlZFwiPT09Zj91OnMsdj1oLmFkanVzdG1lbnQ+MD97cGFkZGluZ0xlZnQ6aC5hZGp1c3RtZW50fTp7cGFkZGluZ1JpZ2h0Oi0xKmguYWRqdXN0bWVudH07cmV0dXJuKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6dlIuYXZhdGFyQ29udGFpbmVyfSx2b2lkIDAsKDAsby5aKSh4cy5kaXYse2NsYXNzTmFtZTp2Ui5hdmF0YXJIZWFkV3JhcHBlcix2YXJpYW50czppayxhbmltYXRlOnAsdHJhbnNpdGlvbjpjayxjdXN0b206YSxpbml0aWFsOlwibHVya2luZ1wiLGV4aXQ6XCJleGl0XCJ9LFwiaGVhZFwiLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOnZSLnR5cGluZ0J1YmJsZUNvbnRhaW5lcn0sdm9pZCAwLCgwLG8uWikodGsse3R5cGluZ1N0YXRlOm59KSksKDAsby5aKShcImltZ1wiLHtjbGFzc05hbWU6dlIuYXZhdGFySGVhZCxzcmM6aC51cmwsc3R5bGU6dn0pLFwidHlwaW5nXCI9PT1mJiYoMCxvLlopKFwiaW1nXCIse3NyYzpsLGNsYXNzTmFtZTp2Ui5hdmF0YXJUeXBpbmdBcm19KSksYSYmKDAsby5aKSh4cy5kaXYse2NsYXNzTmFtZTp2Ui5hdmF0YXJMYXB0b3BDb250YWluZXIsdmFyaWFudHM6b2ssYW5pbWF0ZTpwLHRyYW5zaXRpb246Y2ssaW5pdGlhbDpcImx1cmtpbmdcIixleGl0OlwiZXhpdFwifSxcImxhcHRvcFwiLCgwLG8uWikoSFIse2NsYXNzTmFtZTp2Ui5hdmF0YXJMYXB0b3B9KSksKDAsby5aKSh4cy5kaXYse3ZhcmlhbnRzOmFrLGluaXRpYWw6XCJsdXJraW5nXCIsYW5pbWF0ZTpwLGN1c3RvbTphLHRyYW5zaXRpb246ey4uLmNrLGNsaXBQYXRoOntkdXJhdGlvbjowfX0sZXhpdDpcImV4aXRcIixjbGFzc05hbWU6dlIuYXZhdGFyU2hlbGZIYW5kc1dyYXBwZXJ9LFwic2hlbGZIYW5kc1wiLCgwLG8uWikoXCJpbWdcIix7c3JjOmMsY2xhc3NOYW1lOnZSLmF2YXRhclNoZWxmSGFuZHN9KSkpfWZ1bmN0aW9uIHVrKGUpe2xldHt1c2VySWQ6dCxwYXJ0aWNpcGFudFN0YXRlOm59PWU7Y29uc3Qgcj1DbCh0KSx7dHlwaW5nU3RhdGU6aSxwcmVzZW50T25QbGF0Zm9ybTphfT1uLHM9Qm9vbGVhbihyPy5iaXRtb2ppX2F2YXRhcl9pZCksYz1hIT09ZXUudDQuTk9ORTtpZihzKXJldHVybigwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOlwiUlR2amlcIn0sdm9pZCAwLCgwLG8uWikoZmQse30sdm9pZCAwLHI/LmJpdG1vamlfYXZhdGFyX2lkJiZjJiYoMCxvLlopKGQuU3VzcGVuc2Use2ZhbGxiYWNrOm51bGx9LHZvaWQgMCwoMCxvLlopKGxrLHthdmF0YXJJZDpyLmJpdG1vamlfYXZhdGFyX2lkLHR5cGluZ1N0YXRlOmksdXNlRnVsbEZhY2VFbnRyYW5jZTohMCx1c2VMYXB0b3A6YT09PWV1LnQ0LldFQn0pKSkpO2NvbnN0IGw9YyYmKGk9PT1ldS5vYy5OT05FfHxpPT09ZXUub2MuRklOSVNIRUQpO3JldHVybigwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOigwLFEuWikoXCJUSzFrY1wiLGk9PT1ldS5vYy5QQVVTRUQmJlwiUDJNZ0xcIil9LHZvaWQgMCwoMCxvLlopKHRrLHtjbGFzc05hbWU6XCJBVFpValwiLHR5cGluZ1N0YXRlOml9KSwoMCxvLlopKGZkLHt9LHZvaWQgMCxsJiYoMCxvLlopKHhzLnNwYW4se2luaXRpYWw6e29wYWNpdHk6MH0sYW5pbWF0ZTp7b3BhY2l0eToxfSxleGl0OntvcGFjaXR5OjB9LHRyYW5zaXRpb246e2Vhc2U6XCJlYXNlSW5PdXRcIixkdXJhdGlvbjouMn0sY2xhc3NOYW1lOigwLFEuWikoXCJUNllqbFwiLGE9PT1ldS50NC5XRUImJlwidEI5QmhcIil9LHZvaWQgMCwoMCxvLlopKGRSLHtjbGFzc05hbWU6XCJ1XzJ0SFwifSkpKSl9ZnVuY3Rpb24gZGsoZSl7bGV0e3VzZXJJZDp0LHBhcnRpY2lwYW50U3RhdGU6bixwcmVzZW50Q29sb3I6cixwaWxsVGV4dDppfT1lO2NvbnN0e3R5cGluZ1N0YXRlOmEscHJlc2VudE9uUGxhdGZvcm06c309bixjPXM9PT1ldS50NC5XRUIsbD1zIT09ZXUudDQuTk9ORSx1PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU/dD8/XCJ2YXIoLS1zaWdUZXh0UHJpbWFyeSlcIjpcInZhcigtLXNpZ1RleHRTZWNvbmRhcnkpXCJ9KGwsciksW2ZdPSgwLG1kLlZDKSgpLHA9Q2wodCksbT1IbCh0KSxbaCx2XT0oMCxkLnVzZVN0YXRlKSghMSksZz0oMCxkLnVzZU1lbW8pKCgoKT0+e2lmKG0pcmV0dXJuKCk9Pnt2KCEwKSxzZXRUaW1lb3V0KCgoKT0+eyhhc3luYygpPT57YXdhaXQgbSgpLHNldFRpbWVvdXQoKCgpPT52KCExKSksNTAwKX0pKCl9KSwyMDApfX0pLFttLHZdKTtyZXR1cm4oMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpcImFadUtxXCIsb25DbGljazpnLHJvbGU6Zz9cImxpbmtcIjp2b2lkIDB9LHZvaWQgMCwoMCxvLlopKGZkLHt9LHZvaWQgMCxwPy5iaXRtb2ppX2F2YXRhcl9pZCYmbCYmKDAsby5aKShkLlN1c3BlbnNlLHtmYWxsYmFjazpudWxsfSx2b2lkIDAsKDAsby5aKShsayx7YXZhdGFySWQ6cC5iaXRtb2ppX2F2YXRhcl9pZCx0eXBpbmdTdGF0ZTphLHByZXNzZWQ6aCx1c2VMYXB0b3A6ITF9KSkpLCgwLG8uWikoeHMuc3Bhbix7Y2xhc3NOYW1lOlwiTmp6UVNcIix3aGlsZUhvdmVyOntmaWx0ZXI6XCJicmlnaHRuZXNzKDkwJSlcIn0sYW5pbWF0ZTp7YmFja2dyb3VuZENvbG9yOmg/XCJ2YXIoLS1zaWdTdXJmYWNlRG93bilcIjpcInZhcigtLXNpZ0Fib3ZlU3VyZmFjZSlcIixjb2xvcjp1LGJveFNoYWRvdzpsP1wiMHB4IDFweCA0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4wNClcIjp2b2lkIDB9LHRyYW5zaXRpb246e2R1cmF0aW9uOmhSfSxpbml0aWFsOiExfSxmLCgwLG8uWikoXCJzcGFuXCIse2NsYXNzTmFtZTpcIkFNZWk4XCIsZGlyOlwiYXV0b1wifSx2b2lkIDAsYyYmKDAsby5aKShkUix7Y2xhc3NOYW1lOlwiQ3NDSGZcIn0pLFwiIFwiLGkpLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOlwidUlHTjhcIn0pLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZUFNUnpcIn0pKSl9QygpLmdldExvZ2dlcihcIlByZXNlbmNlQmFyXCIpO2NvbnN0IGZrPXt0eXBpbmdTdGF0ZTpldS5vYy5OT05FLHByZXNlbnRPblBsYXRmb3JtOmV1LnQ0Lk5PTkUsb3JkZXI6MH0scGs9KDAsZC5tZW1vKSgoZnVuY3Rpb24oZSl7bGV0e3VzZXJJZDp0LHBhcnRpY2lwYW50U3RhdGU6bixjb252ZXJzYXRpb25UeXBlOnIsY29sb3I6aSxkaXNwbGF5TmFtZTphfT1lO3N3aXRjaChyKXtjYXNlIFBlLmkxLlVTRVJDUkVBVEVER1JPVVA6cmV0dXJuKDAsby5aKShkayx7dXNlcklkOnQscGlsbFRleHQ6YSxwcmVzZW50Q29sb3I6aSxwYXJ0aWNpcGFudFN0YXRlOm4/P2ZrfSk7Y2FzZSBQZS5pMS5PTkVPTk9ORTpyZXR1cm4oMCxvLlopKHVrLHt1c2VySWQ6dCxwYXJ0aWNpcGFudFN0YXRlOm4/P2ZrfSk7ZGVmYXVsdDpyZXR1cm4gbnVsbH19KSk7ZnVuY3Rpb24gbWsoZSl7bGV0e2NvbnZlcnNhdGlvbklkOnQsY29udmVyc2F0aW9uVHlwZTpuLG1lc3NhZ2VMaXN0UmVmOnJ9PWU7Y29uc3QgaT1HbCh0KSxhPWZ1bmN0aW9uKGUpe3JldHVybigwLGlsLmopKHR1LmUwLGUpfSh0KSxzPWE/Wy4uLmEuZW50cmllcygpXTpbXSxjPW9kKCkocywoZT0+ZVsxXT8ub3JkZXIpKSxsPVJ1KGMubWFwKChlPT5lWzBdKSkpO3JldHVybigwLG8uWikoaGsse30sdm9pZCAwLCgwLG8uWikoXCJ1bFwiLHtjbGFzc05hbWU6Y1IuYmFyLG9uV2hlZWw6ZnVuY3Rpb24oZSl7Y29uc3QgdD1yLmN1cnJlbnQ7dCYmKHQuc2Nyb2xsVG9wPXQuc2Nyb2xsVG9wK2UuZGVsdGFZKX19LHZvaWQgMCxjLm1hcCgoKGUsdCk9PntsZXRbcixhXT1lO3JldHVybigwLG8uWikoXCJsaVwiLHtjbGFzc05hbWU6Y1IuYmFySXRlbX0sKDAsei5NYykociksKDAsby5aKShwayx7dXNlcklkOnIscGFydGljaXBhbnRTdGF0ZTphLGRpc3BsYXlOYW1lOmxbdF0sY29udmVyc2F0aW9uVHlwZTpuLGNvbG9yOmkuZ2V0KHIpfSkpfSkpKSl9ZnVuY3Rpb24gaGsoZSl7bGV0e2NoaWxkcmVuOnR9PWU7Y29uc3RbbixyXT0oMCxkLnVzZVN0YXRlKSghMSksaT0oMCxkLnVzZVJlZikobnVsbCksYT0oKT0+e3IoITApfSxzPSgpPT57cighMSl9O3JldHVybigwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOigwLFEuWikoY1IuYmFyV3JhcHBlcixuJiZjUi5lbmFibGVQb2ludGVyRXZlbnRzKSxvbk1vdXNlTW92ZTplPT57Y29uc3QgdD0obj1pLmN1cnJlbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89ZS5jbGllbnRYLGE9ZS5jbGllbnRZLCEhbiYmbi5ib3R0b20+PWEmJm4udG9wPD1hJiZuLmxlZnQ8PW8mJm4ucmlnaHQ+PW8pO3ZhciBuLG8sYTtyKHQpfSxvbk1vdXNlRW50ZXI6YSxvbk1vdXNlTGVhdmU6cyxvblBvaW50ZXJEb3duOmEsb25Qb2ludGVyVXA6cyxvblRvdWNoQ2FuY2VsOnMsb25Ub3VjaEVuZDpzfSx2b2lkIDAsdCwoMCxxLmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOmNSLmJhckhvdmVyVGFyZ2V0LHJlZjppfSkpfWNvbnN0IHZrPXt3YXJuaW5nOlwiZU5GX0pcIixiaXRtb2ppOlwiQnVaT3dcIixjb250ZW50OlwiUHZDTGdcIn07dmFyIGdrLHlrO2NvbnN0IEVrPVwiMTVkYjYwNDYtOWI4NS00NTBjLTgyNDUtNDEzZjQxZTQ2NTJkXCI7ZnVuY3Rpb24gX2soZSl7bGV0e29uQ2xpY2s6dH09ZTtjb25zdCBuPVhjKCkscj1DbChuKT8uYml0bW9qaV9hdmF0YXJfaWQ7cmV0dXJuKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6dmsud2FybmluZyxvbkNsaWNrOnR9LHZvaWQgMCwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTp2ay5jb250ZW50fSx2b2lkIDAsciYmKDAscS5qc3gpKFwiaW1nXCIse2NsYXNzTmFtZTp2ay5iaXRtb2ppLC4uLigwLGhlLnpsKSh7Y29taWNJZDpFayxhdmF0YXJJZDpyLG1pblNjYWxlOmhlLnhZLkhBTEZ9KX0pLGdrfHwoZ2s9KDAsby5aKShcImgzXCIse30sdm9pZCAwLCgwLG8uWikodi5aLHtpZDpcIlRuZENzK1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiTG9va3MgbGlrZSB5b3UncmUgdHJ5aW5nIHRvIHRha2UgYSBzY3JlZW5zaG90IVwifV19KSkpLHlrfHwoeWs9KDAsby5aKShcInBcIix7fSx2b2lkIDAsKDAsby5aKSh2Llose2lkOlwiOGJlUUZMXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJDbGljayBhbnl3aGVyZSB0byByZXR1cm4gdG8gdGhlIGNvbnZlcnNhdGlvblwifV19KSkpKSl9Y29uc3QgSWs9e2NvbnZlcnNhdGlvbjpcImFYRXBVXCIsb2JzY3VyZTpcIkpZTUFTXCIsY29udmVyc2F0aW9uV2luZG93OlwiTnZSTThcIixwcml2YWN5OlwidmhjY2RcIixtZXNzYWdlczpcIklCcUs4XCIsaW5wdXRCYXI6XCJzVDd0YVwiLHByaXZhdGVJbnB1dDpcIkNrd3ptXCIsb25lT25PbmVQcmVzZW5jZUJhcjpcImtEaV83XCIsZ3JvdXBQcmVzZW5jZUJhcjpcImhwbUNKXCIsaGlkZVByZXNlbmNlQmFyOlwibFJJMTJcIixkcm9wem9uZUNvdmVyOlwieDNycEZcIixkcm9wem9uZUlubmVyQm94OlwiT0dUSE5cIixkcm9wem9uZU1lc3NhZ2U6XCJ5VlVpbFwiLHRvYXN0Q29udGFpbmVyOlwidVdIQjFcIn07dmFyIFNrLGJrLFRrO2NvbnN0IENrPTVlMyxBaz02ZTQ7ZnVuY3Rpb24gUmsoZSl7bGV0e2NvbnZlcnNhdGlvbjp0LGhpZGVIZWFkZXI6bn09ZTtfZShcImNvbnZlcnNhdGlvblwiKTtjb25zdCByPSgwLGQudXNlUmVmKShudWxsKSx7Y29udmVyc2F0aW9uSWQ6aSxjb252ZXJzYXRpb25UeXBlOmF9PXQse2dldFJvb3RQcm9wczpzLGlzRHJhZ0FjdGl2ZTpjLHNlbGVjdGVkRmlsZXM6bCxvblVuc2VsZWN0RmlsZXM6dSxyZWplY3RlZEZpbGVzOmZ9PWZ1bmN0aW9uKCl7Y29uc3RbZSx0XT0oMCxkLnVzZVN0YXRlKShbXSksW24scl09KDAsZC51c2VTdGF0ZSkoW10pLGk9KDAsZC51c2VDYWxsYmFjaykoKGU9Pnt0KCh0PT50LmZpbHRlcigodD0+IWUuaW5jbHVkZXModCkpKSkpfSksW10pLG89KDAsZC51c2VDYWxsYmFjaykoKGU9Pnt0KCh0PT5CcygpKFsuLi50LC4uLmVdLHRsLkU1KSkpO2Zvcihjb25zdCB0IG9mIGUpKDAsdGwuTHMpKHQsXCJzdWNjZXNzXCIpfSksW10pLGE9KDAsZC51c2VDYWxsYmFjaykoKGU9PntyKCh0PT5CcygpKFsuLi50LC4uLmVdLChlPT4oMCx0bC5FNSkoZS5maWxlKSkpKSk7Zm9yKGNvbnN0IHQgb2YgZSlmb3IoY29uc3QgZSBvZiB0LmVycm9ycyl7Y29uc3Qgbj0oMCx0bC5KcCkoZS5jb2RlKTsoMCx0bC5McykodC5maWxlLG4pfX0pLFtdKSx7Z2V0Um9vdFByb3BzOnMsaXNEcmFnQWN0aXZlOmMsaXNEcmFnUmVqZWN0Omx9PVpjKHtvbkRyb3BBY2NlcHRlZDpvLG9uRHJvcFJlamVjdGVkOmEsbWF4U2l6ZTplbC4kWSxhY2NlcHQ6ZWwuRWcsbm9DbGljazohMH0pO3JldHVybntnZXRSb290UHJvcHM6cyxpc0RyYWdBY3RpdmU6Yyxpc0RyYWdSZWplY3Q6bCxzZWxlY3RlZEZpbGVzOmUsb25VbnNlbGVjdEZpbGVzOmkscmVqZWN0ZWRGaWxlczpufX0oKSxbcCxtXT1lZigpLGg9KDAsZC51c2VSZWYpKG51bGwpO25mKGgscCk7Y29uc3QgZz0oMCxkLnVzZVJlZikobnVsbCksW3ksRV09KDAsay5vKSh0dS5hVyxEKSxfPSgwLGQudXNlUmVmKSgwKSx7c2hvd1RvYXN0OkksYWN0aXZlVG9hc3RzOlMsaGlkZVRvYXN0OmJ9PUpkKCksVD0oMCxrLm8pKCgwLGQudXNlQ2FsbGJhY2spKChlPT4oMCxUZS5ZNSkoZSxpKSksW2ldKSksQz0oMCxrLm8pKFRlLlpEKTsoMCxkLnVzZUVmZmVjdCkoKCgpPT57Y29uc3QgZT17ZXZlbnRfbmFtZTpcIkNIQVRfQ0hBVF9DUkVBVEVcIixzb3VyY2U6Q307KDAsdmUucUopKGUpfSksW0NdKSwoMCxkLnVzZUVmZmVjdCkoKCgpPT57VD9JKHtrZXk6XCJjb252ZXJzYXRpb24tZXJyb3JcIix0eXBlOlFkLk5lZ2F0aXZlLHRpbWVvdXQ6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGNvbnRlbnQ6U2t8fChTaz0oMCxvLlopKHYuWix7aWQ6XCJSbSticzBcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkNvdWxkIG5vdCBsb2FkIGNvbnZlcnNhdGlvbi5cIn1dfSkpfSk6YihcImNvbnZlcnNhdGlvbi1lcnJvclwiKX0pLFtULEksYl0pLCgwLGQudXNlRWZmZWN0KSgoKCk9PntpZihmLmxlbmd0aD4wKWZvcihjb25zdCB0IG9mIGYpe2NvbnN0IG49KGU9dC5lcnJvcnNbMF0pLmNvZGU9PT1nYy5GaWxlSW52YWxpZFR5cGU/XCJGaWxlIHR5cGUgaXMgbm90IHN1cHBvcnRlZCBieSB1cGxvYWRlclwiOmUubWVzc2FnZTtJKHtrZXk6KDAsdGwuRTUpKHQuZmlsZSksdHlwZTpRZC5OZWdhdGl2ZSx0aW1lb3V0OkNrLGNvbnRlbnQ6KDAsby5aKSh2Llose2lkOlwiSWV4czErXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjEsdmFsdWU6XCJlcnJvck1lc3NhZ2VcIn1dLHZhbHVlczp7ZXJyb3JNZXNzYWdlOm59fSl9KX12YXIgZX0pLFtmLEldKSwoMCxkLnVzZUVmZmVjdCkoKCgpPT57Y29uc3QgZT0oKT0+e0RhdGUubm93KCktXy5jdXJyZW50PEFrP0UoTnUuZC5QcmVzZW50KTpFKE51LmQuQXdhaXRpbmdSZWFjdGl2YXRlKSxtKCl9LHQ9KCk9PntFKE51LmQuUHJlc2VudCksbSgpfSxuPSgpPT57ZG9jdW1lbnQuaGFzRm9jdXMoKXx8KHk9PT1OdS5kLlByZXNlbnQmJihfLmN1cnJlbnQ9RGF0ZS5ub3coKSksZy5jdXJyZW50Py5ibHVyKCksRShOdS5kLkF3YXkpLG0oKSl9O3JldHVybiBkb2N1bWVudC5oYXNGb2N1cygpfHxuKCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHQpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNcIixlKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIixuKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIix0KSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsZSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJibHVyXCIsbil9fSksW20sRSx5LF9dKTtjb25zdCBSPSgwLE8ucnApKEEuckkpLE49IVImJnkhPT1OdS5kLlByZXNlbnQsdz1OfHxwLFA9eT09PU51LmQuQXdhaXRpbmdSZWFjdGl2YXRlLE09KDAsTy5ycCkoQS4kRyksTD1KbCh0LmNvbnZlcnNhdGlvbklkKSxVPSgpPT57RShOdS5kLlByZXNlbnQpLG0oKX07IWZ1bmN0aW9uKGUsdCl7Y29uc3R7Y3JlYXRlUHJlc2VuY2VTZXNzaW9uOm4sZGVzdHJveVByZXNlbmNlU2Vzc2lvbjpyfT0oMCxrLm8pKHR1LnNQLEQpLGk9U3UoZSksbz1lLmNvbnZlcnNhdGlvbklkLGE9UWwobyk7KDAsZC51c2VFZmZlY3QpKCgoKT0+e2lmKGkmJiFhKXJldHVybiBuKG8pLCgpPT5yKG8pfSksW24scixvLGksYV0pO2NvbnN0IHM9KDAsay5vKSgoMCx0dS4kNykobykpOygwLGQudXNlRWZmZWN0KSgoKCk9Pnt0P3M/LmRlYWN0aXZhdGUoKTpzPy5hY3RpdmF0ZSgpfSksW3MsdF0pfSh0LE4pO2NvbnN0W3gsRl09KDAsZC51c2VTdGF0ZSkoITEpO3JldHVybigwLG8uWikoX0kse2F3YXk6TixzY3JlZW5zaG90RGV0ZWN0ZWQ6cCxmb2N1c01lc3NhZ2VDb21wb3NlcjooKT0+Zy5jdXJyZW50Py5mb2N1cygpLHVzZVJlcGx5U3RvcmU6ITAsY29udmVyc2F0aW9uSWQ6aX0sdm9pZCAwLCgwLHEuanN4cykoeHMuZGl2LHsuLi5zKHtjbGFzc05hbWU6SWsuY29udmVyc2F0aW9ufSksY2hpbGRyZW46WygwLG8uWikoS0Ese2hpZGRlbjpuLGNvbnZlcnNhdGlvbjp0fSksKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6KDAsUS5aKShJay5jb252ZXJzYXRpb25XaW5kb3csTiYmSWsucHJpdmFjeSxSJiZJay5vYnNjdXJlKX0sdm9pZCAwLCgwLHEuanN4cykoXCJkaXZcIix7cmVmOmgsb25Db250ZXh0TWVudTpNP2trOnZvaWQgMCxjbGFzc05hbWU6SWsubWVzc2FnZXMsY2hpbGRyZW46WygwLG8uWikoUUkse2NsYXNzTmFtZTpJay50b2FzdENvbnRhaW5lcixhY3RpdmVUb2FzdHM6Uyx0b3BPZmZzZXQ6OH0pLCFOJiZMJiYoMCxvLlopKFF1LHtjb252ZXJzYXRpb246dH0pLE4mJigwLG8uWikod1Qse2NvbnZlcnNhdGlvbjp0LGNsaWNrVG9TaG93OlAsb25DbGljazpVfSksKDAsby5aKShzUix7YXdheTpOLGNvbnZlcnNhdGlvbklkOmksY29udmVyc2F0aW9uVHlwZTphLG1lc3NhZ2VzT2JzY3VyZWQ6dyxtZXNzYWdlTGlzdFJlZjpyfSksKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6KDAsUS5aKSgoeHx8TikmJklrLmhpZGVQcmVzZW5jZUJhcixhPT09UGUuaTEuVVNFUkNSRUFURURHUk9VUCYmSWsuZ3JvdXBQcmVzZW5jZUJhcixhPT09UGUuaTEuT05FT05PTkUmJklrLm9uZU9uT25lUHJlc2VuY2VCYXIpfSx2b2lkIDAsIUwmJigwLG8uWikobWsse2NvbnZlcnNhdGlvbklkOmksY29udmVyc2F0aW9uVHlwZTphLG1lc3NhZ2VMaXN0UmVmOnJ9KSldfSkscCYmIU4mJigwLG8uWikoX2sse29uQ2xpY2s6bX0pLCFMJiYoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTooMCxRLlopKElrLmlucHV0QmFyLE4mJklrLnByaXZhdGVJbnB1dCl9LHZvaWQgMCwoMCxvLlopKHZJLHtjb252ZXJzYXRpb25JZDppLG1lZGlhRmlsZXM6bCxvblVuc2VsZWN0RmlsZXM6dSxjb252ZXJzYXRpb25Jc0ZvY3VzZWQ6IU4sb25Gb2N1czpVLHNldEhpZGVQcmVzZW5jZUJhcjpGLGlucHV0UmVmOmcsc2hvd1RvYXN0Okl9KSksYyYmKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6SWsuZHJvcHpvbmVDb3Zlcn0sdm9pZCAwLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOklrLmRyb3B6b25lSW5uZXJCb3h9LHZvaWQgMCwoMCxvLlopKFwic3BhblwiLHtjbGFzc05hbWU6SWsuZHJvcHpvbmVNZXNzYWdlfSx2b2lkIDAsYmt8fChiaz0oMCxvLlopKHYuWix7aWQ6XCJrZWZ3M1NcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkRyYWcgZmlsZXMgaGVyZSFcIn1dfSkpKSkpLFRrfHwoVGs9KDAsby5aKShvUyx7fSkpKV19KSl9ZnVuY3Rpb24ga2soZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gT2soKXtjb25zdCBlPSgwLGsubykoQ2UpLHQ9KDAsay5vKShSZSksbj0oMCxPLmVmKShBLmlSLFwicHJvZFwiPT09dCk7aWUoe29uUmVmcmVzaDooMCxkLnVzZUNhbGxiYWNrKSgoKCk9PntlKCl9KSxbZV0pLGludGVydmFsTXM6bj8/OWU1LGltbWVkaWF0ZTohMX0pLCgwLGQudXNlRWZmZWN0KSgoKCk9PnsoYXN5bmMoKT0+e1wic2VydmljZVdvcmtlclwiaW4gbmF2aWdhdG9yJiYoYXdhaXQgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVhZHkpLmFjdGl2ZSYmZSgpO2NvbnN0IHQ9e1wiaHR0cHM6Ly9jaGF0LWdvbGQuc2MtY29ycC5uZXRcIjp7dXJsOlwid2ViLWdvbGQuc25hcGNoYXQuY29tXCIsZmxhdm9yOlwiZ29sZFwifSxcImh0dHBzOi8vY2hhdC1hbHBoYS5zYy1jb3JwLm5ldFwiOnt1cmw6XCJ3ZWItYWxwaGEuc25hcGNoYXQuY29tXCIsZmxhdm9yOlwiYWxwaGFcIn0sXCJodHRwczovL2NoYXQuc2MtY29ycC5uZXRcIjp7dXJsOlwid2ViLnNuYXBjaGF0LmNvbVwiLGZsYXZvcjpcImFscGhhXCJ9fTtmb3IoY29uc3RbZSxuXW9mIE9iamVjdC5lbnRyaWVzKHQpKWlmKHdpbmRvdy5sb2NhdGlvbi5ocmVmLnN0YXJ0c1dpdGgoZSkpdHJ5eygwLGJlLnhJKShgaHR0cHM6Ly8ke24udXJsfS92ZXJzaW9uLmpzb25gKX1jYXRjaHtiKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcInVwZGF0ZV92ZXJzaW9uX2Nvb2tpZV92aWFfc2VjX3Byb3h5XCIsZGltZW5zaW9uczp7Zmxhdm9yOm4uZmxhdm9yfX0pO2JyZWFrfX0pKCl9KSxbZV0pfWZ1bmN0aW9uIE5rKCl7Y29uc3QgZT0oMCxrLm8pKE5lKSx0PSgwLGsubykoa2UpOygwLGQudXNlRWZmZWN0KSgoKCk9PntpZighZSlyZXR1cm47aWYodClyZXR1cm4gdm9pZCBEZShcImZsYXZvcl9jaGFuZ2VcIik7bGV0IG49MDtjb25zdCByPSgpPT57ZG9jdW1lbnQuaGFzRm9jdXMoKXx8KHdpbmRvdy5jbGVhclRpbWVvdXQobiksbj13aW5kb3cuc2V0VGltZW91dCgoKCk9PntiKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpgc3cudXBkYXRlLiR7d2UuS1p9LmFjY2VwdC5pZGxlLnN0YXJ0YH0pLERlKFwiaWRsZVwiKX0pLDEuMipBaykpfTtyZXR1cm4gZG9jdW1lbnQuaGFzRm9jdXMoKXx8cigpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLHIpLCgpPT57d2luZG93LmNsZWFyVGltZW91dChuKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJsdXJcIixyKX19KSxbZSx0XSl9ZnVuY3Rpb24gd2soKXtjb25zdCBlPSgwLGsubykoQWUpO3JldHVybiBPaygpLE5rKCksKDAsZC51c2VFZmZlY3QpKCgoKT0+e2UmJkRlKFwiYXV0b1wiKX0pLFtlXSksbnVsbH1jb25zdCBEaz17YmFja2dyb3VuZDpcIkVMcFRiXCIsb3ZlcmxheTpcInNqSFMxXCIsYml0bW9qaTpcIk8xTWFwXCIsdGl0bGU6XCJOOGlHQ1wiLGVycm9yRGV0YWlsczpcIlU0TzEzXCIsdGV4dDpcImZXN3pDXCJ9O3ZhciBQayxNaztjb25zdCBMaz1cIjVjZGI1OTc3LWI4YjktNDI2MS05Zjk4LWRlZWY3YzFiZWRlZVwiO3ZhciBVaz17VW5rbm93bjpcInVua25vd25cIixVbnN1cHBvcnRlZEJyb3dzZXI6XCJ1bnN1cHBvcnRlZF9icm93c2VyXCIsVG9vT2xkOlwidG9vX29sZFwifTtmdW5jdGlvbiB4ayhlKXtsZXR7dGl0bGU6dD1Qa3x8KFBrPSgwLG8uWikodi5aLHtpZDpcIjFOdEllQVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiT29wcyEgU29tZXRoaW5nIHdlbnQgd3JvbmdcdTIwMjZcIn1dfSkpLGVycm9yVHlwZTpuPVVrLlVua25vd24sZXJyb3JEZXRhaWxzOnIsZGVzY3JpcHRpb246aSxjb21pY0lkOmE9TGssYml0bW9qaUFsdFRleHQ6cyxjaGlsZHJlbjpjfT1lO2NvbnN0IGw9KDAsay5vKShJLnlWKSx1PSgwLG1lLlopKCksZj1hPT09TGsscD0oMCxrLm8pKChlPT5lLmJsaXp6YXJkKSkuc3RvcFJlcG9ydGluZ1BhZ2VPcGVuO3JldHVybiBfZShgZXJyb3JfcGFnZV8ke259YCksIXMmJmYmJihzPXUuZm9ybWF0TWVzc2FnZSh7aWQ6XCJ0OWc1Z01cIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkEgY2F0IHNsZWVwaW5nIG9uIGEgbGFwdG9wIGluIGZyb250IG9mIHRoZSB1c2VyJ3MgQml0bW9qaVwifV19KSksKDAsZC51c2VFZmZlY3QpKCgoKT0+e3AoKX0pLFtwXSksKDAsZC51c2VFZmZlY3QpKCgoKT0+eygwLHZlLnFKKSh7ZXZlbnRfbmFtZTpcIldFQl9QQUdFX1ZJRVdcIixzb3VyY2U6YEVSUk9SXyR7bi50b1VwcGVyQ2FzZSgpfWB9KX0pLFtuXSksKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6RGsuYmFja2dyb3VuZH0sdm9pZCAwLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOkRrLm92ZXJsYXl9LHZvaWQgMCxhJiYobD8oMCxxLmpzeCkoXCJpbWdcIix7Y2xhc3NOYW1lOkRrLmJpdG1vamksYWx0OnMsLi4uKDAsaGUuemwpKHtjb21pY0lkOmEsYXZhdGFySWQ6bH0pfSk6ZiYmKDAsby5aKShcImltZ1wiLHtjbGFzc05hbWU6RGsuYml0bW9qaSxhbHQ6cyxzcmM6cGV9KSksKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6RGsudGl0bGV9LHZvaWQgMCx0KSwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpEay5lcnJvckRldGFpbHN9LHZvaWQgMCxyKSwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpEay50ZXh0fSx2b2lkIDAsaSksYyxNa3x8KE1rPSgwLG8uWikod2sse30pKSkpfWNvbnN0IEZrPVwiZmF2aWNvbi1iYWRnZWRcIixCaz1cImZhdmljb25cIjtmdW5jdGlvbiBWaygpe3JldHVybi9mYXZpY29uKD8hLWJhZGdlZCkvfWZ1bmN0aW9uIEdrKCl7cmV0dXJuIEZrfWNvbnN0IEhrPVwibGluay5qcy1mYXZpY29uXCI7ZnVuY3Rpb24gV2soKXtjb25zdCBlPSgwLGsubykoVGUudDEpO3ZhciB0O3JldHVybiB0PWUsKDAsZC51c2VFZmZlY3QpKCgoKT0+e1wic2V0QXBwQmFkZ2VcImluIG5hdmlnYXRvciYmbmF2aWdhdG9yLnNldEFwcEJhZGdlKHQpfSksW3RdKSxmdW5jdGlvbihlKXsoMCxkLnVzZUVmZmVjdCkoKCgpPT57Y29uc3QgdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKEhrKSxuPTA9PT1lP0drOlZrLHI9MD09PWU/Qms6Rms7Zm9yKGNvbnN0IGUgb2YgdCl7Y29uc3QgdD1lLmhyZWYuc3BsaXQoXCIvXCIpLGk9dC5zbGljZSgwLC0xKSxvPXRbdC5sZW5ndGgtMV07ZS5ocmVmPVsuLi5pLG8ucmVwbGFjZShuKCkscildLmpvaW4oXCIvXCIpfWNvbnN0IGk9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcInRpdGxlXCIpO2kmJihpLnRleHRDb250ZW50PTA9PT1lP19kLnNkLmZvcm1hdE1lc3NhZ2Uoe2lkOlwiYlVTZlliXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJTbmFwY2hhdFwifV19KTpfZC5zZC5mb3JtYXRNZXNzYWdlKHtpZDpcInQwWXVWVVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiKFwifSx7dHlwZToxLHZhbHVlOlwiYmFkZ2VOdW1iZXJcIn0se3R5cGU6MCx2YWx1ZTpcIikgU25hcGNoYXRcIn1dfSx7YmFkZ2VOdW1iZXI6ZX0pKX0pLFtlXSl9KGUpLG51bGx9dmFyIGprPW4oNzA2OTIpLFprPW4oODA5NTEpLHprPW4oNzQ4NTApLEtrPW4oODQ2NjIpO2xldCBZaztmdW5jdGlvbiBxaygpe2NvbnN0e2hhc1JlcG9ydGVkUGFnZUxvYWQ6ZSxtYXJrUGFnZUxvYWRSZXBvcnRlZDp0LHNob3VsZFJlcG9ydFBhZ2VPcGVuOm59PSgwLGsubykoKGU9PmUuYmxpenphcmQpKSxyPSgwLGsubykoSS5kZCksaT0oMCxnLlRIKSgpLG89KDAsZy5zMCkoKSxhPSgwLGQudXNlQ2FsbGJhY2spKChhc3luYygpPT57Y29uc3QgZT1uZXcgVVJMU2VhcmNoUGFyYW1zKGkuc2VhcmNoKSx0PWUuZ2V0KFwicmVmXCIpLHI9ZS5nZXQoemsuQk8pLGE9ZS5nZXQoemsub1QpO3ImJmEmJigwLHprLlpfKSh7bm90aWZpY2F0aW9uVHlwZTpyLG5vdGlmaWNhdGlvbklkOmF9KTtjb25zdCBzPWF3YWl0KDAsemsuSzcpKCk7aWYobil7Y29uc3QgZT1EYXRlLm5vdygpO2IoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwicmVwb3J0X3BhZ2Vfb3BlblwiLGRpbWVuc2lvbnM6e2lzX25lYXJfZHVwOlN0cmluZyhCb29sZWFuKHZvaWQgMCE9PVlrJiZlLVlrPDEwMCkpfX0pLFlrPWUsKDAsamsub25QYWdlT3Blbikoe2FwcEZvcm1hdDooMCxaay5mKSgpLG5vdGlmaWNhdGlvblR5cGU6cz8ubm90aWZpY2F0aW9uVHlwZSxub3RpZmljYXRpb25JZDpzPy5ub3RpZmljYXRpb25JZCxzb3VyY2U6KDAsWmsuYikodCl9KSwoMCxLay5zRCkoKX0ocnx8YSkmJihlLmRlbGV0ZSh6ay5CTyksZS5kZWxldGUoemsub1QpLG8oaS5wYXRobmFtZStcIj9cIitlLnRvU3RyaW5nKCkse3JlcGxhY2U6ITB9KSl9KSxbaS5zZWFyY2gsaS5wYXRobmFtZSxuLG9dKTtyZXR1cm4oMCxkLnVzZUVmZmVjdCkoKCgpPT57Y29uc3QgdD1uZXcgVVJMU2VhcmNoUGFyYW1zKGkuc2VhcmNoKTt0LmdldChcInJlZlwiKSYmZSYmciYmKHQuZGVsZXRlKFwicmVmXCIpLG8oaS5wYXRobmFtZStcIj9cIit0LnRvU3RyaW5nKCkse3JlcGxhY2U6ITB9KSl9KSxbZSxyLGkucGF0aG5hbWUsaS5zZWFyY2gsb10pLCgwLGQudXNlRWZmZWN0KSgoKCk9Pntjb25zdCBlPSgpPT57ZG9jdW1lbnQuaGFzRm9jdXMoKXx8KDAsamsub25QYWdlQ2xvc2UpKCl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsYSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsZSksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsYSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJibHVyXCIsZSl9fSksW2FdKSwoMCxkLnVzZUVmZmVjdCkoKCgpPT57KGFzeW5jKCk9PntlfHwoYXdhaXQgYSgpLHQoKSl9KSgpfSksW2UsYSx0XSksbnVsbH1jb25zdCBYaz0oMCxuKDMwMDEpLlopKCksUWs9W1wiQ0xBSU1fQUNUSVZFXCIsXCJRVUVSWV9MSVZFTkVTU1wiLFwiQUNLX0xJVkVORVNTXCIsXCJKVU1QX1RPX1RBQlwiXSxKaz1Ccm9hZGNhc3RDaGFubmVsP25ldyBCcm9hZGNhc3RDaGFubmVsKFwiY3Jvc3NfdGFiXCIpOnZvaWQgMCwkaz1lPT57aWYoXCJvYmplY3RcIiE9dHlwZW9mIGUuZGF0YXx8bnVsbD09PWUuZGF0YSl0aHJvdyBuZXcgRXJyb3IoXCJldmVudCBkYXRhIGlzbid0IHN0cnVjdHVyZWRcIik7Y29uc3QgdD1lLmRhdGE7aWYoIXQudHlwZXx8XCJzdHJpbmdcIiE9dHlwZW9mIHQudHlwZSl0aHJvdyBuZXcgRXJyb3IoXCJldmVudCBkYXRhIGlzIGluIHdyb25nIGZvcm1hdFwiKTtpZihRay5pbmNsdWRlcyh0LnR5cGUpKXJldHVybiB0O3Rocm93IG5ldyBFcnJvcihcImV2ZW50IGRhdGEgY2FuJ3QgYmUgcGFyc2VkXCIpfSxlTz1cImFjdGl2ZV90YWIuaWRcIjtmdW5jdGlvbiB0Tygpe3JldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShlTyl8fHZvaWQgMH1mdW5jdGlvbiBuTygpe2xvY2FsU3RvcmFnZS5nZXRJdGVtKGVPKT09PVhrJiZsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShlTyl9Y29uc3Qgck89e2JhY2tncm91bmQ6XCJkUHpjNlwiLG92ZXJsYXk6XCJMOWl2YVwiLGxhcmdlT3ZlcmxheTpcIkRCTzNDXCIsYml0bW9qaTpcInphdWxCXCIsdGl0bGU6XCJvM3NFZlwiLHRleHQ6XCJyYm1jRlwiLGFjdGlvbkxpbmU6XCJxUndiclwiLGJ1dHRvbjpcImlIY0w4XCIsanVtcFRvQ2FsbDpcInhEQzRuIGlIY0w4XCIsZW5kQ2FsbDpcInZfZGNQIGlIY0w4XCJ9O3ZhciBpTyxvTyxhTyxzTztjb25zdCBjTz1cIjEwMjExMTM4XCIsbE89XCIyMDA1NDkwMlwiO2Z1bmN0aW9uIHVPKGUpe2xldHtoYXNPdGhlckFjdGl2ZVRhYjp0LG9uQ2xhaW1BY3RpdmU6bixvbkp1bXBUb090aGVyVGFiOnIsYml0bW9qaUF2YXRhcklkOml9PWU7Y29uc3QgYT10P2xPOmNPLHM9KDAsbWUuWikoKTtPaygpLF9lKFwibXVsdGlfdGFiX3BhZ2VcIik7Y29uc3QgYz0oMCxrLm8pKChlPT5lLmJsaXp6YXJkKSkuc3RvcFJlcG9ydGluZ1BhZ2VPcGVuOygwLGQudXNlRWZmZWN0KSgoKCk9PntjKCl9KSxbY10pO2NvbnN0IGw9XCJncmFudGVkXCI9PT1Ob3RpZmljYXRpb24ucGVybWlzc2lvbix1PXQ/cy5mb3JtYXRNZXNzYWdlKHtpZDpcIm5zTlNQSVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiV2F2aW5nIGhhbmQgYml0bW9qaVwifV19KTpzLmZvcm1hdE1lc3NhZ2Uoe2lkOlwiZGY0RkxQXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJPb3BzIGJpdG1vamlcIn1dfSksZj10P2lPfHwoaU89KDAsby5aKSh2Llose2lkOlwiTldPeDdSXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJPb3BzISBZb3VcdTIwMTlyZSBvbiBhIGNhbGwgaW4gYW5vdGhlciB0YWJcdTIwMjZcIn1dfSkpOm9PfHwob089KDAsby5aKSh2Llose2lkOlwibVo1bW5NXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJPb3BzISBUb28gbWFueSB0YWJzXHUyMDI2XCJ9XX0pKSxwPXQ/bD8oMCxvLlopKHYuWix7aWQ6XCI5K1ZDai9cIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlNuYXBjaGF0IGNhbiBvbmx5IGJlIG9wZW4gaW4gb25lIHRhYiBvciBicm93c2VyIGF0IGEgdGltZS5cIn0se3R5cGU6MSx2YWx1ZTpcImxpbmVCcmVha1wifSx7dHlwZTowLHZhbHVlOlwiQ2xpY2sgYmVsb3cgdG8ganVtcCB0byB0aGUgYWN0aXZlIHRhYiwgb3IgaGFuZyB1cCBhbmQga2VlcCBjaGF0dGluZyBoZXJlIVwifV0sdmFsdWVzOntsaW5lQnJlYWs6XCJcXG5cIn19KTooMCxvLlopKHYuWix7aWQ6XCJZZ0NjL1VcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlNuYXBjaGF0IGNhbiBvbmx5IGJlIG9wZW4gaW4gb25lIHRhYiBvciBicm93c2VyIGF0IGEgdGltZS5cIn0se3R5cGU6MSx2YWx1ZTpcImxpbmVCcmVha1wifSx7dHlwZTowLHZhbHVlOlwiQ2xpY2sgYmVsb3cgdG8gaGFuZyB1cCBhbmQga2VlcCBjaGF0dGluZyBoZXJlIVwifV0sdmFsdWVzOntsaW5lQnJlYWs6XCJcXG5cIn19KTooMCxvLlopKHYuWix7aWQ6XCI1dzIrZUpcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlNuYXBjaGF0IGNhbiBvbmx5IGJlIG9wZW4gaW4gb25lIHRhYiBvciBicm93c2VyIGF0IGEgdGltZS5cIn0se3R5cGU6MSx2YWx1ZTpcImxpbmVCcmVha1wifSx7dHlwZTowLHZhbHVlOlwiQ2xpY2sgYW55d2hlcmUgdG8gZ2V0IGJhY2sgdG8gY2hhdHRpbmcgb3IgY2FsbGluZyBpbiB0aGlzIG9uZSFcIn1dLHZhbHVlczp7bGluZUJyZWFrOlwiXFxuXCJ9fSk7cmV0dXJuKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6ck8uYmFja2dyb3VuZCxvbkNsaWNrOnQ/dm9pZCAwOigpPT57c2VsZi5sb2NhdGlvbi5yZWxvYWQoKX0scm9sZTp0P3ZvaWQgMDpcImJ1dHRvblwifSx2b2lkIDAsKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6KDAsUS5aKShyTy5vdmVybGF5LEJvb2xlYW4odCkmJnJPLmxhcmdlT3ZlcmxheSl9LHZvaWQgMCxpJiYoMCxxLmpzeCkoXCJpbWdcIix7Y2xhc3NOYW1lOnJPLmJpdG1vamksYWx0OnUsLi4uKDAsaGUuemwpKHtjb21pY0lkOmEsYXZhdGFySWQ6aX0pfSksKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6ck8udGl0bGV9LHZvaWQgMCxmKSwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpyTy50ZXh0fSx2b2lkIDAscCksdCYmKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6ck8uYWN0aW9uTGluZX0sdm9pZCAwLGw/KDAsby5aKShcImJ1dHRvblwiLHt0eXBlOlwiYnV0dG9uXCIsY2xhc3NOYW1lOigwLFEuWikock8uYnV0dG9uLHJPLmp1bXBUb0NhbGwpLG9uQ2xpY2s6ZT0+e2Uuc3RvcFByb3BhZ2F0aW9uKCkscj8uKCl9fSx2b2lkIDAsYU98fChhTz0oMCxvLlopKHYuWix7aWQ6XCJiZ0RTNjJcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkdvIHRvIENhbGxcIn1dfSkpKTpudWxsLCgwLG8uWikoXCJidXR0b25cIix7dHlwZTpcImJ1dHRvblwiLGNsYXNzTmFtZTooMCxRLlopKHJPLmJ1dHRvbixyTy5lbmRDYWxsKSxvbkNsaWNrOmU9PntlLnN0b3BQcm9wYWdhdGlvbigpLG4/LigpfX0sdm9pZCAwLHNPfHwoc089KDAsby5aKSh2Llose2lkOlwiWjNrTFAxXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJFbmQgQ2FsbFwifV19KSkpKSkpfXZhciBkTztDKCkuZ2V0TG9nZ2VyKFwiW011bHRpVGFiRGV0ZWN0b3JdXCIpO2NvbnN0IGZPPTEwMDtmdW5jdGlvbiBwTyhlKXtsZXR7Y2hpbGRyZW46dH09ZTtjb25zdFtuLHJdPSgwLGQudXNlU3RhdGUpKDApLFtpLGFdPSgwLGQudXNlU3RhdGUpKHRPKCkpLFtzLGxdPSgwLGQudXNlU3RhdGUpKCExKSx1PSgwLGQudXNlUmVmKSh2b2lkIDApLGY9KDAsay5vKShPZSkscD0oMCxkLnVzZVJlZikodm9pZCAwKSxtPSgwLGsubykoSS55ViksaD0oMCxtZS5aKSgpLHY9KCk9PntKaz8ucG9zdE1lc3NhZ2Uoe3R5cGU6XCJDTEFJTV9BQ1RJVkVcIix0YWJJZDpYa30pLGxvY2FsU3RvcmFnZS5zZXRJdGVtKGVPLFhrKSxyKDIpfSxnPSgwLGQudXNlQ2FsbGJhY2spKChlPT57dHJ5e2NvbnN0IHQ9JGsoZSk7c3dpdGNoKHQudHlwZSl7Y2FzZVwiQ0xBSU1fQUNUSVZFXCI6dC50YWJJZCE9PVhrJiZyKDMpO2JyZWFrO2Nhc2VcIlFVRVJZX0xJVkVORVNTXCI6dC50YWJJZD09PVhrJiYyPT09biYmSms/LnBvc3RNZXNzYWdlKHt0eXBlOlwiQUNLX0xJVkVORVNTXCIsdGFiSWQ6WGssaGFzQWN0aXZlQ2FsbHM6ZixiaXRtb2ppQXZhdGFySWQ6bX0pO2JyZWFrO2Nhc2VcIkFDS19MSVZFTkVTU1wiOmkmJnQudGFiSWQ9PT1pJiYobCghMCksc2VsZi5jbGVhclRpbWVvdXQodS5jdXJyZW50KSxwLmN1cnJlbnQ9dC5iaXRtb2ppQXZhdGFySWQsdC5oYXNBY3RpdmVDYWxscz9yKDEpOnYoKSk7YnJlYWs7Y2FzZVwiSlVNUF9UT19UQUJcIjppZih0LnRhYklkPT09WGsmJjI9PT1uKXtjb25zdCBlPWguZm9ybWF0TWVzc2FnZSh7aWQ6XCI0NkZoTm9cIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkNsaWNrIGhlcmUgdG8ganVtcCB0byB0aGUgYWN0aXZlIHRhYi5cIn1dfSksdD0oKT0+e2NvbnN0IHQ9bmV3IE5vdGlmaWNhdGlvbihlKTt0Lm9uY2xpY2s9KCk9Pnt3aW5kb3cuZm9jdXMoKSx0LmNsb3NlKCl9fTtcImdyYW50ZWRcIiE9PU5vdGlmaWNhdGlvbi5wZXJtaXNzaW9uP05vdGlmaWNhdGlvbi5yZXF1ZXN0UGVybWlzc2lvbigpLnRoZW4oKCgpPT57XCJncmFudGVkXCI9PT1Ob3RpZmljYXRpb24ucGVybWlzc2lvbiYmdCgpfSkpOnQoKX19fWNhdGNoKGUpeygwLGMuVGIpKGUpfX0pLFtpLG4sZixtLGhdKTtyZXR1cm4oMCxkLnVzZUVmZmVjdCkoKCgpPT4oSms/LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsZyksKCk9PntKaz8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIixnKX0pKSxbZ10pLCgwLGQudXNlRWZmZWN0KSgoKCk9PntpZigwPT09bilpZihpKXtpZighcyYmIXUuY3VycmVudClyZXR1cm4gSms/LnBvc3RNZXNzYWdlKHt0eXBlOlwiUVVFUllfTElWRU5FU1NcIix0YWJJZDppfSksdS5jdXJyZW50PXNlbGYuc2V0VGltZW91dCgoKCk9Pntsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShlTyksYSh0TygpKX0pLGZPKSwoKT0+e3NlbGYuY2xlYXJUaW1lb3V0KHUuY3VycmVudCl9fWVsc2UgdigpfSksW2kscyxuXSksKDAsZC51c2VFZmZlY3QpKCgoKT0+e3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsbk8pfSksW10pLCgwLGQudXNlRWZmZWN0KSgoKCk9Pntjb25zdCBlPSgpPT57aWYoMj09PW4pe2NvbnN0IGU9dE8oKTt2b2lkIDAhPT1lJiZlIT09WGsmJnIoMyl9fTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsZSksKCk9Pntkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiZm9jdXNcIixlKX19KSxbbl0pLCgwLGQudXNlRWZmZWN0KSgoKCk9PntKa3x8KCgwLGMuVGIpKG5ldyBFcnJvcihcImNyb3NzX3RhYl9jaGFubmVsX2lzX3VuZGVmaW5lZFwiKSksKDAsZ2UuVikoXCJjcm9zc190YWJfY2hhbm5lbF9pc191bmRlZmluZWRcIikpfSksW10pLEprPzA9PT1uP2RPfHwoZE89KDAsby5aKShlUix7fSkpOjE9PT1uPygwLG8uWikodU8se2hhc090aGVyQWN0aXZlVGFiOkJvb2xlYW4oaSksb25DbGFpbUFjdGl2ZTp2LG9uSnVtcFRvT3RoZXJUYWI6KCk9PntKaz8ucG9zdE1lc3NhZ2Uoe3R5cGU6XCJKVU1QX1RPX1RBQlwiLHRhYklkOml9KX0sYml0bW9qaUF2YXRhcklkOm18fHAuY3VycmVudH0pOjM9PT1uPygwLG8uWikodU8se2JpdG1vamlBdmF0YXJJZDptfHxwLmN1cnJlbnR9KTooMCxxLmpzeCkocS5GcmFnbWVudCx7Y2hpbGRyZW46dH0pOigwLHEuanN4KShxLkZyYWdtZW50LHtjaGlsZHJlbjp0fSl9dmFyIG1PLGhPLHZPPW4oMjAxMDMpLGdPPW4oMjQ5OCk7Y29uc3QgeU89KDAsTi5McSkoKTtmdW5jdGlvbiBFTyhlKXtsZXR7Y2hpbGRyZW46dH09ZTtpZigoMCxkLnVzZUVmZmVjdCkoKCgpPT57eU8uc3VwcG9ydGVkfHxiKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpgYnJvd3Nlci51bnN1cHBvcnRlZF9icm93c2VyLiR7eU8ubmFtZT8/XCJ1bmtub3duXCJ9LiR7KDAsdk8uZCkoeU8udmVyc2lvbj8/XCJ1bmtub3duXCIpfWAsZGltZW5zaW9uczp5Ty5tZXRyaWNEaW1lbnNpb25zfSl9KSxbXSksXCJib3RcIj09PXlPLm5hbWV8fCgwLGdPLnQpKG5hdmlnYXRvci51c2VyQWdlbnQpKXJldHVybiB3aW5kb3cubG9jYXRpb24uaHJlZj1gJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufS9tb2JpbGUtbGFuZGluZy5odG1sYCxudWxsO2lmKHlPLnN1cHBvcnRlZClyZXR1cm4oMCxxLmpzeCkocS5GcmFnbWVudCx7Y2hpbGRyZW46dH0pO2NvbnN0IG49bU98fChtTz0oMCxvLlopKHYuWix7aWQ6XCJGcE41c29cIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkJyb3dzZXIgbm90IHN1cHBvcnRlZFwifV19KSkscj1oT3x8KGhPPSgwLG8uWikodi5aLHtpZDpcImdSOGtQU1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiU25hcGNoYXQgZm9yIFdlYiBvbmx5IHN1cHBvcnRzIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBDaHJvbWUsIEVkZ2UsIGFuZCBTYWZhcmkgb24gY29tcHV0ZXJzIChub3QgcGhvbmVzIG9yIHRhYmxldHMpIGF0IHRoaXMgdGltZS5cIn1dfSkpO3JldHVybigwLG8uWikoXCJkaXZcIix7XCJkYXRhLW5vc25pcHBldFwiOiEwfSx2b2lkIDAsKDAsby5aKSh4ayx7dGl0bGU6bixkZXNjcmlwdGlvbjpyLGVycm9yVHlwZTpVay5VbnN1cHBvcnRlZEJyb3dzZXJ9KSl9dmFyIF9PLElPO2NvbnN0IFNPPShEYXRlLm5vdygpLTE2ODQ5NDg2NDc3NzIpLzFlMz4yNTkyZTM7ZnVuY3Rpb24gYk8oZSl7bGV0e2NoaWxkcmVuOnR9PWU7aWYoIVNPKXJldHVybigwLHEuanN4KShxLkZyYWdtZW50LHtjaGlsZHJlbjp0fSk7Y29uc3Qgbj1fT3x8KF9PPSgwLG8uWikodi5aLHtpZDpcIjBROVBBelwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiWW91ciB2ZXJzaW9uIG9mIFNuYXBjaGF0IGZvciBXZWIgaXMgdG9vIG9sZFwifV19KSkscj0oMCxvLlopKHYuWix7aWQ6XCJmdFNxTHlcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIldlJ3JlIHVwZGF0aW5nIHRoZSBhcHAuIFRoZSBwYWdlIHdpbGwgcmVsb2FkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgdXBkYXRlIGlzIGNvbXBsZXRlLiBJZiB0aGlzIHRha2VzIGEgbG9uZyB0aW1lIHlvdSBjYW4gZm9yY2UgcmVmcmVzaCAoXCJ9LHt0eXBlOjEsdmFsdWU6XCJoYXJkUmVmcmVzaENtZFwifSx7dHlwZTowLHZhbHVlOlwiKS5cIn1dLHZhbHVlczp7aGFyZFJlZnJlc2hDbWQ6XCJzYWZhcmlcIj09PXlPLm5hbWU/XCJDbWQtT3B0aW9uLVJcIjpcIlNoaWZ0LUY1IC8gQ21kLVNoaWZ0LVJcIn19KTtyZXR1cm4oMCxvLlopKHhrLHt0aXRsZTpuLGRlc2NyaXB0aW9uOnIsZXJyb3JUeXBlOlVrLlRvb09sZH0sdm9pZCAwLElPfHwoSU89KDAsby5aKShcInBcIix7fSx2b2lkIDAsKDAsby5aKShsaCx7fSkpKSl9ZnVuY3Rpb24gVE8oZSl7bGV0e2NoaWxkcmVuOnR9PWU7cmV0dXJuKDAsby5aKShiTyx7fSx2b2lkIDAsKDAsby5aKShFTyx7fSx2b2lkIDAsKDAsby5aKShwTyx7fSx2b2lkIDAsdCkpKX12YXIgQ089big4NTc1NSksQU89bigzMDI2Mik7Y29uc3QgUk89YCR7bigyMzgzNCkuelV9L3dlYi1jaGF0LXNlc3Npb24vcmVmcmVzaD9jbGllbnRfaWQ9JHt0ZS5CeX1gLGtPPTM2ZTUsT089LjE1KmtPOygwLFQuZ2V0TG9nZ2VyKShcIltTZXNzaW9uIEhlYXJ0YmVhdF1cIik7dmFyIE5PPW4oNTAyMzEpO2FzeW5jIGZ1bmN0aW9uIHdPKGUpe2xldHtkYXRhOnR9PWU7aWYoKDAsTk8uWlkpKHQpKXtuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLHdPKTtmb3IoY29uc3QgZSBvZiB0LnBlbmRpbmdDYWxscyl7KDAsei4kcCkoZS5jb252ZXJzYXRpb25JZCk7Y29uc3QgdD1hd2FpdCBrLnN0b3JlLmdldFN0YXRlKCkubWVzc2FnaW5nLmVuc3VyZUNvbnZlcnNhdGlvbkF2YWlsYWJsZShlLmNvbnZlcnNhdGlvbklkLGUuY29udmVyc2F0aW9uVHlwZSk7KDAsaXUuQzcpKHQsZS50YWxrQ29yZVBheWxvYWQsKDAsei5NYykoZS5zZW5kZXJVc2VySWQpKX19fSgwLFQuZ2V0TG9nZ2VyKShcIltUYWxrXVt1c2VQcm9jZXNzUGVuZGluZ0NhbGxzXVwiKTtjb25zdCBETz17Y29udGFpbmVyOlwid1VUUm5cIixoaWRkZW46XCJ0OXBiVVwiLGhhbmdVcEJ1dHRvbjpcImVLY3NMXCJ9O3ZhciBQTztmdW5jdGlvbiBNTygpe3JldHVybiBNTz1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LE1PLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBMTz1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIixNTyh7d2lkdGg6MjgsaGVpZ2h0OjI4LHZpZXdCb3g6XCIwIDAgMjUgMjBcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksUE98fChQTz1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNMjMuMjk4IDExLjE0N2MuMTIxLjE3Ny4xNC4zOTYuMDcxLjZsLS43MTggMi4xMDVhMS4wODYgMS4wODYgMCAwIDEtMS4wNjkuNzQ0Yy0xLjIwMi0uMDUtMy40MDgtLjIwOS00LjIyLS43MjgtMS4xNDItLjczLjE0My0xLjg1OC0uOS0zLjA0LTEuMDQ1LTEuMTgtMy45NjQtMS4yODktMy45NjQtMS4yODlzLTMuMDQxLjIyMy0zLjk4OCAxLjM2MmMtLjk0NiAxLjEzOC4yNTMgMS4zMjItLjQyMiAyLjc4Ni0uNTAyIDEuMDg4LTMuMTkgMS4xNy00LjUzOCAxLjE0MmExLjA2NSAxLjA2NSAwIDAgMS0uOTkyLS43NzZsLS41OS0xLjk5NGEuNjcuNjcgMCAwIDEgLjA3Ny0uNTY4Yy43MjYtMS4wODQgMy44ODYtNS4xMyAxMC42MTUtNS4yNjYgNi42OTUtLjEzNSA5Ljg4MiAzLjgyMSAxMC42MzggNC45MjJaXCIsZmlsbDpcIiNGRjUzNjhcIn0pKSksVU89e2J1dHRvbjpcIlUyVW52XCJ9O3ZhciB4TyxGTztmdW5jdGlvbiBCTyhlKXtsZXR7b25DbGljazp0LGNsYXNzTmFtZTpufT1lO3JldHVybigwLG8uWikoXCJidXR0b25cIix7dHlwZTpcImJ1dHRvblwiLGNsYXNzTmFtZTooMCxRLlopKFVPLmJ1dHRvbixuKSxvbkNsaWNrOnR9LHZvaWQgMCx4T3x8KHhPPSgwLG8uWikoXCJzcGFuXCIse30sdm9pZCAwLCgwLG8uWikodi5aLHtpZDpcIjJIWWVyVlwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiSGFuZyB1cFwifV19KSkpLEZPfHwoRk89KDAsby5aKShMTyx7fSkpKX1mdW5jdGlvbiBWTyhlKXtsZXR7Y29udmVyc2F0aW9uOnQsaGlkZUhlYWRlcjpufT1lO3JldHVybigwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOigwLFEuWikoRE8uY29udGFpbmVyLG4mJkRPLmhpZGRlbil9LHZvaWQgMCwoMCxvLlopKFpBLHtjb252ZXJzYXRpb246dH0pLCgwLG8uWikoQk8se2NsYXNzTmFtZTpETy5oYW5nVXBCdXR0b24sb25DbGljazooKT0+KDAsaXUuVkkpKHQuY29udmVyc2F0aW9uSWQpfSkpfWZ1bmN0aW9uIEdPKCl7cmV0dXJuKDAsay5vKShJLmRMKX12YXIgSE89bigxNjI5Nyk7Y29uc3QgV089ZT0+ZS5sb2dnZXJzU2V0dGluZy5zaG93LGpPPWU9PmUubG9nZ2Vyc1NldHRpbmcuc2hvd0xvZ2dlcnNTZXR0aW5nTWVudSxaTz1lPT5lLmxvZ2dlcnNTZXR0aW5nLmhpZGVMb2dnZXJzU2V0dGluZ01lbnU7dmFyIHpPPW4oNjM4MzcpO2Z1bmN0aW9uIEtPKCl7Y29uc3RbZSx0XT0oMCxrLm8pKHpPLkVyKSxuPSgwLGsubykoek8ud1cpLHI9IWV8fFwiZ3JhbnRlZFwiIT09bjtyZXR1cm4oMCxOLnBYKSgpP3tzaG91bGRTaG93QmFubmVyOnIsbm90aWZpY2F0aW9uc0VuYWJsZWQ6ZSxicm93c2VyTm90aWZpY2F0aW9uc1Blcm1pc3Npb246bixzZXROb3RpZmljYXRpb25zUHJlZmVyZW5jZTphc3luYyhlLG4pPT57YXdhaXQgdChlKTtjb25zdCByPWU/XCJub3RpZmljYXRpb25zX3R1cm5lZF9vblwiOlwibm90aWZpY2F0aW9uc190dXJuZWRfb2ZmXCI7YigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6cixkaW1lbnNpb25zOnthY3Rpb25fb3JpZ2luOm4scGVybWlzc2lvbjpOb3RpZmljYXRpb24ucGVybWlzc2lvbn19KX19OntzaG91bGRTaG93QmFubmVyOiExLG5vdGlmaWNhdGlvbnNFbmFibGVkOiExLGJyb3dzZXJOb3RpZmljYXRpb25zUGVybWlzc2lvbjpcInVuc3VwcG9ydGVkXCIsc2V0Tm90aWZpY2F0aW9uc1ByZWZlcmVuY2U6YXN5bmMoKT0+bmV3IFByb21pc2UoKGU9PmUoKSkpfX12YXIgWU8scU8sWE8sUU89big2NDU3OCk7ZnVuY3Rpb24gSk8oZSl7bGV0e2NvbnZlcnNhdGlvbklkOnQsaGlkZUhlYWRlcjpufT1lO2NvbnN0IHI9VmwodCksaT1mdW5jdGlvbihlKXtjb25zdCB0PSgwLGsubykoVGUuR3EpLFtuLHJdPSgwLGQudXNlU3RhdGUpKFdsLnBlbmRpbmcpLGk9WGMoKSxvPSgwLGsubykoU2wubTQpLGE9KDAsZC51c2VDYWxsYmFjaykoKGU9Pntmb3IoY29uc3QgdCBvZiBlLnBhcnRpY2lwYW50cylpZih0LnBhcnRpY2lwYW50SWQhPT1pKXtjb25zdCBlPW8uZ2V0KHQucGFydGljaXBhbnRJZCk7cmV0dXJuIHZvaWQoZT8udHlwZT09PVFjLk4uQkxPQ0tFRD9yKFdsLmludmFsaWQpOnIoV2wudmFsaWQpKX19KSxbaSxvXSk7cmV0dXJuKDAsZC51c2VFZmZlY3QpKCgoKT0+eyhhc3luYygpPT57aWYoZSl0cnl7Y29uc3Qgbj1hd2FpdCB0KGUsUGUuaTEuVVNFUkNSRUFURURHUk9VUCk7bi5wYXJ0aWNpcGFudHMubGVuZ3RoPDE/cihXbC5pbnZhbGlkKTpuLmNvbnZlcnNhdGlvblR5cGU9PT1QZS5pMS5PTkVPTk9ORT9hKG4pOnIoV2wudmFsaWQpfWNhdGNoe3IoV2wuaW52YWxpZCl9ZWxzZSByKFdsLmludmFsaWQpfSkoKX0pLFthLHIsZSx0XSksbn0odCksYT0oMCxrLm8pKHpPLmhCKTtyZXR1cm4oMCxkLnVzZUVmZmVjdCkoKCgpPT57YSh0KX0pLFt0LGFdKSxpPT09V2wucGVuZGluZz9ZT3x8KFlPPSgwLG8uWikoZVIse30pKTp0JiZpIT09V2wuaW52YWxpZD9yPygwLG8uWikoUmsse2NvbnZlcnNhdGlvbjpyLGhpZGVIZWFkZXI6bn0sKDAsei5NYykodCkpOlhPfHwoWE89KDAsby5aKShlUix7fSkpOnFPfHwocU89KDAsby5aKShnLkZnLHtyZXBsYWNlOiEwLHRvOlwiL1wifSkpfXZhciAkTz1uKDIzMjc5KSxlTj1uLm4oJE8pO2Z1bmN0aW9uIHROKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX1mdW5jdGlvbiBuTihlKXtyZXR1cm4gbk49XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX0sbk4oZSl9ZnVuY3Rpb24gck4oZSl7dmFyIHQ9ZnVuY3Rpb24oZSx0KXtpZihcIm9iamVjdFwiIT09bk4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciBuPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1uKXt2YXIgcj1uLmNhbGwoZSxcInN0cmluZ1wiKTtpZihcIm9iamVjdFwiIT09bk4ocikpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpfXJldHVybiBTdHJpbmcoZSl9KGUpO3JldHVyblwic3ltYm9sXCI9PT1uTih0KT90OlN0cmluZyh0KX1mdW5jdGlvbiBpTihlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyTihyLmtleSkscil9fWZ1bmN0aW9uIG9OKGUsdCxuKXtyZXR1cm4gdCYmaU4oZS5wcm90b3R5cGUsdCksbiYmaU4oZSxuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcInByb3RvdHlwZVwiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gYU4oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIGV9ZnVuY3Rpb24gc04oZSx0KXtpZih0JiYoXCJvYmplY3RcIj09PW5OKHQpfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0KSlyZXR1cm4gdDtpZih2b2lkIDAhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTtyZXR1cm4gYU4oZSl9ZnVuY3Rpb24gY04oZSl7cmV0dXJuIGNOPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxjTihlKX1mdW5jdGlvbiBsTihlLHQpe3JldHVybiBsTj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGxOKGUsdCl9ZnVuY3Rpb24gdU4oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwicHJvdG90eXBlXCIse3dyaXRhYmxlOiExfSksdCYmbE4oZSx0KX1mdW5jdGlvbiBkTihlLHQsbil7cmV0dXJuKHQ9ck4odCkpaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gZk4oKXt2YXIgZT10aGlzLmNvbnN0cnVjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyh0aGlzLnByb3BzLHRoaXMuc3RhdGUpO251bGwhPWUmJnRoaXMuc2V0U3RhdGUoZSl9ZnVuY3Rpb24gcE4oZSl7dGhpcy5zZXRTdGF0ZShmdW5jdGlvbih0KXt2YXIgbj10aGlzLmNvbnN0cnVjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhlLHQpO3JldHVybiBudWxsIT1uP246bnVsbH0uYmluZCh0aGlzKSl9ZnVuY3Rpb24gbU4oZSx0KXt0cnl7dmFyIG49dGhpcy5wcm9wcyxyPXRoaXMuc3RhdGU7dGhpcy5wcm9wcz1lLHRoaXMuc3RhdGU9dCx0aGlzLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90RmxhZz0hMCx0aGlzLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90PXRoaXMuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUobixyKX1maW5hbGx5e3RoaXMucHJvcHM9bix0aGlzLnN0YXRlPXJ9fWZ1bmN0aW9uIGhOKGUpe3ZhciB0PWUucHJvdG90eXBlO2lmKCF0fHwhdC5pc1JlYWN0Q29tcG9uZW50KXRocm93IG5ldyBFcnJvcihcIkNhbiBvbmx5IHBvbHlmaWxsIGNsYXNzIGNvbXBvbmVudHNcIik7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHQuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUpcmV0dXJuIGU7dmFyIG49bnVsbCxyPW51bGwsaT1udWxsO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQuY29tcG9uZW50V2lsbE1vdW50P249XCJjb21wb25lbnRXaWxsTW91bnRcIjpcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQmJihuPVwiVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFwiKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM/cj1cImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNcIjpcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiYocj1cIlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzXCIpLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQuY29tcG9uZW50V2lsbFVwZGF0ZT9pPVwiY29tcG9uZW50V2lsbFVwZGF0ZVwiOlwiZnVuY3Rpb25cIj09dHlwZW9mIHQuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUmJihpPVwiVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVcIiksbnVsbCE9PW58fG51bGwhPT1yfHxudWxsIT09aSl7dmFyIG89ZS5kaXNwbGF5TmFtZXx8ZS5uYW1lLGE9XCJmdW5jdGlvblwiPT10eXBlb2YgZS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM/XCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoKVwiOlwiZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKVwiO3Rocm93IEVycm9yKFwiVW5zYWZlIGxlZ2FjeSBsaWZlY3ljbGVzIHdpbGwgbm90IGJlIGNhbGxlZCBmb3IgY29tcG9uZW50cyB1c2luZyBuZXcgY29tcG9uZW50IEFQSXMuXFxuXFxuXCIrbytcIiB1c2VzIFwiK2ErXCIgYnV0IGFsc28gY29udGFpbnMgdGhlIGZvbGxvd2luZyBsZWdhY3kgbGlmZWN5Y2xlczpcIisobnVsbCE9PW4/XCJcXG4gIFwiK246XCJcIikrKG51bGwhPT1yP1wiXFxuICBcIityOlwiXCIpKyhudWxsIT09aT9cIlxcbiAgXCIraTpcIlwiKStcIlxcblxcblRoZSBhYm92ZSBsaWZlY3ljbGVzIHNob3VsZCBiZSByZW1vdmVkLiBMZWFybiBtb3JlIGFib3V0IHRoaXMgd2FybmluZyBoZXJlOlxcbmh0dHBzOi8vZmIubWUvcmVhY3QtYXN5bmMtY29tcG9uZW50LWxpZmVjeWNsZS1ob29rc1wiKX1pZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyYmKHQuY29tcG9uZW50V2lsbE1vdW50PWZOLHQuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcz1wTiksXCJmdW5jdGlvblwiPT10eXBlb2YgdC5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdC5jb21wb25lbnREaWRVcGRhdGUpdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHBvbHlmaWxsIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCkgZm9yIGNvbXBvbmVudHMgdGhhdCBkbyBub3QgZGVmaW5lIGNvbXBvbmVudERpZFVwZGF0ZSgpIG9uIHRoZSBwcm90b3R5cGVcIik7dC5jb21wb25lbnRXaWxsVXBkYXRlPW1OO3ZhciBzPXQuY29tcG9uZW50RGlkVXBkYXRlO3QuY29tcG9uZW50RGlkVXBkYXRlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90RmxhZz90aGlzLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90Om47cy5jYWxsKHRoaXMsZSx0LHIpfX1yZXR1cm4gZX1mdW5jdGlvbiB2Tigpe3JldHVybiB2Tj1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LHZOLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBnTihlKXt2YXIgdD1lLmNlbGxDb3VudCxuPWUuY2VsbFNpemUscj1lLmNvbXB1dGVNZXRhZGF0YUNhbGxiYWNrLGk9ZS5jb21wdXRlTWV0YWRhdGFDYWxsYmFja1Byb3BzLG89ZS5uZXh0Q2VsbHNDb3VudCxhPWUubmV4dENlbGxTaXplLHM9ZS5uZXh0U2Nyb2xsVG9JbmRleCxjPWUuc2Nyb2xsVG9JbmRleCxsPWUudXBkYXRlU2Nyb2xsT2Zmc2V0Rm9yU2Nyb2xsVG9JbmRleDt0PT09byYmKFwibnVtYmVyXCIhPXR5cGVvZiBuJiZcIm51bWJlclwiIT10eXBlb2YgYXx8bj09PWEpfHwocihpKSxjPj0wJiZjPT09cyYmbCgpKX1mdW5jdGlvbiB5TihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixpPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLGk9e30sbz1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8by5sZW5ndGg7cisrKW49b1tyXSx0LmluZGV4T2Yobik+PTB8fChpW25dPWVbbl0pO3JldHVybiBpfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPG8ubGVuZ3RoO3IrKyluPW9bcl0sdC5pbmRleE9mKG4pPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxuKSYmKGlbbl09ZVtuXSl9cmV0dXJuIGl9Zk4uX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZz0hMCxwTi5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nPSEwLG1OLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmc9ITA7dmFyIEVOPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt2YXIgbj10LmNlbGxDb3VudCxyPXQuY2VsbFNpemVHZXR0ZXIsaT10LmVzdGltYXRlZENlbGxTaXplO3ROKHRoaXMsZSksZE4odGhpcyxcIl9jZWxsU2l6ZUFuZFBvc2l0aW9uRGF0YVwiLHt9KSxkTih0aGlzLFwiX2xhc3RNZWFzdXJlZEluZGV4XCIsLTEpLGROKHRoaXMsXCJfbGFzdEJhdGNoZWRJbmRleFwiLC0xKSxkTih0aGlzLFwiX2NlbGxDb3VudFwiLHZvaWQgMCksZE4odGhpcyxcIl9jZWxsU2l6ZUdldHRlclwiLHZvaWQgMCksZE4odGhpcyxcIl9lc3RpbWF0ZWRDZWxsU2l6ZVwiLHZvaWQgMCksdGhpcy5fY2VsbFNpemVHZXR0ZXI9cix0aGlzLl9jZWxsQ291bnQ9bix0aGlzLl9lc3RpbWF0ZWRDZWxsU2l6ZT1pfXJldHVybiBvTihlLFt7a2V5OlwiYXJlT2Zmc2V0c0FkanVzdGVkXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hMX19LHtrZXk6XCJjb25maWd1cmVcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmNlbGxDb3VudCxuPWUuZXN0aW1hdGVkQ2VsbFNpemUscj1lLmNlbGxTaXplR2V0dGVyO3RoaXMuX2NlbGxDb3VudD10LHRoaXMuX2VzdGltYXRlZENlbGxTaXplPW4sdGhpcy5fY2VsbFNpemVHZXR0ZXI9cn19LHtrZXk6XCJnZXRDZWxsQ291bnRcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jZWxsQ291bnR9fSx7a2V5OlwiZ2V0RXN0aW1hdGVkQ2VsbFNpemVcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lc3RpbWF0ZWRDZWxsU2l6ZX19LHtrZXk6XCJnZXRMYXN0TWVhc3VyZWRJbmRleFwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xhc3RNZWFzdXJlZEluZGV4fX0se2tleTpcImdldE9mZnNldEFkanVzdG1lbnRcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiAwfX0se2tleTpcImdldFNpemVBbmRQb3NpdGlvbk9mQ2VsbFwiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKGU8MHx8ZT49dGhpcy5fY2VsbENvdW50KXRocm93IEVycm9yKFwiUmVxdWVzdGVkIGluZGV4IFwiLmNvbmNhdChlLFwiIGlzIG91dHNpZGUgb2YgcmFuZ2UgMC4uXCIpLmNvbmNhdCh0aGlzLl9jZWxsQ291bnQpKTtpZihlPnRoaXMuX2xhc3RNZWFzdXJlZEluZGV4KWZvcih2YXIgdD10aGlzLmdldFNpemVBbmRQb3NpdGlvbk9mTGFzdE1lYXN1cmVkQ2VsbCgpLG49dC5vZmZzZXQrdC5zaXplLHI9dGhpcy5fbGFzdE1lYXN1cmVkSW5kZXgrMTtyPD1lO3IrKyl7dmFyIGk9dGhpcy5fY2VsbFNpemVHZXR0ZXIoe2luZGV4OnJ9KTtpZih2b2lkIDA9PT1pfHxpc05hTihpKSl0aHJvdyBFcnJvcihcIkludmFsaWQgc2l6ZSByZXR1cm5lZCBmb3IgY2VsbCBcIi5jb25jYXQocixcIiBvZiB2YWx1ZSBcIikuY29uY2F0KGkpKTtudWxsPT09aT8odGhpcy5fY2VsbFNpemVBbmRQb3NpdGlvbkRhdGFbcl09e29mZnNldDpuLHNpemU6MH0sdGhpcy5fbGFzdEJhdGNoZWRJbmRleD1lKToodGhpcy5fY2VsbFNpemVBbmRQb3NpdGlvbkRhdGFbcl09e29mZnNldDpuLHNpemU6aX0sbis9aSx0aGlzLl9sYXN0TWVhc3VyZWRJbmRleD1lKX1yZXR1cm4gdGhpcy5fY2VsbFNpemVBbmRQb3NpdGlvbkRhdGFbZV19fSx7a2V5OlwiZ2V0U2l6ZUFuZFBvc2l0aW9uT2ZMYXN0TWVhc3VyZWRDZWxsXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGFzdE1lYXN1cmVkSW5kZXg+PTA/dGhpcy5fY2VsbFNpemVBbmRQb3NpdGlvbkRhdGFbdGhpcy5fbGFzdE1lYXN1cmVkSW5kZXhdOntvZmZzZXQ6MCxzaXplOjB9fX0se2tleTpcImdldFRvdGFsU2l6ZVwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRTaXplQW5kUG9zaXRpb25PZkxhc3RNZWFzdXJlZENlbGwoKTtyZXR1cm4gZS5vZmZzZXQrZS5zaXplKyh0aGlzLl9jZWxsQ291bnQtdGhpcy5fbGFzdE1lYXN1cmVkSW5kZXgtMSkqdGhpcy5fZXN0aW1hdGVkQ2VsbFNpemV9fSx7a2V5OlwiZ2V0VXBkYXRlZE9mZnNldEZvckluZGV4XCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5hbGlnbixuPXZvaWQgMD09PXQ/XCJhdXRvXCI6dCxyPWUuY29udGFpbmVyU2l6ZSxpPWUuY3VycmVudE9mZnNldCxvPWUudGFyZ2V0SW5kZXg7aWYocjw9MClyZXR1cm4gMDt2YXIgYSxzPXRoaXMuZ2V0U2l6ZUFuZFBvc2l0aW9uT2ZDZWxsKG8pLGM9cy5vZmZzZXQsbD1jLXIrcy5zaXplO3N3aXRjaChuKXtjYXNlXCJzdGFydFwiOmE9YzticmVhaztjYXNlXCJlbmRcIjphPWw7YnJlYWs7Y2FzZVwiY2VudGVyXCI6YT1jLShyLXMuc2l6ZSkvMjticmVhaztkZWZhdWx0OmE9TWF0aC5tYXgobCxNYXRoLm1pbihjLGkpKX12YXIgdT10aGlzLmdldFRvdGFsU2l6ZSgpO3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKHUtcixhKSl9fSx7a2V5OlwiZ2V0VmlzaWJsZUNlbGxSYW5nZVwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuY29udGFpbmVyU2l6ZSxuPWUub2Zmc2V0O2lmKDA9PT10aGlzLmdldFRvdGFsU2l6ZSgpKXJldHVybnt9O3ZhciByPW4rdCxpPXRoaXMuX2ZpbmROZWFyZXN0Q2VsbChuKSxvPXRoaXMuZ2V0U2l6ZUFuZFBvc2l0aW9uT2ZDZWxsKGkpO249by5vZmZzZXQrby5zaXplO2Zvcih2YXIgYT1pO248ciYmYTx0aGlzLl9jZWxsQ291bnQtMTspYSsrLG4rPXRoaXMuZ2V0U2l6ZUFuZFBvc2l0aW9uT2ZDZWxsKGEpLnNpemU7cmV0dXJue3N0YXJ0Omksc3RvcDphfX19LHtrZXk6XCJyZXNldENlbGxcIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9sYXN0TWVhc3VyZWRJbmRleD1NYXRoLm1pbih0aGlzLl9sYXN0TWVhc3VyZWRJbmRleCxlLTEpfX0se2tleTpcIl9iaW5hcnlTZWFyY2hcIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7Zm9yKDt0PD1lOyl7dmFyIHI9dCtNYXRoLmZsb29yKChlLXQpLzIpLGk9dGhpcy5nZXRTaXplQW5kUG9zaXRpb25PZkNlbGwocikub2Zmc2V0O2lmKGk9PT1uKXJldHVybiByO2k8bj90PXIrMTppPm4mJihlPXItMSl9cmV0dXJuIHQ+MD90LTE6MH19LHtrZXk6XCJfZXhwb25lbnRpYWxTZWFyY2hcIix2YWx1ZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0xO2U8dGhpcy5fY2VsbENvdW50JiZ0aGlzLmdldFNpemVBbmRQb3NpdGlvbk9mQ2VsbChlKS5vZmZzZXQ8dDspZSs9bixuKj0yO3JldHVybiB0aGlzLl9iaW5hcnlTZWFyY2goTWF0aC5taW4oZSx0aGlzLl9jZWxsQ291bnQtMSksTWF0aC5mbG9vcihlLzIpLHQpfX0se2tleTpcIl9maW5kTmVhcmVzdENlbGxcIix2YWx1ZTpmdW5jdGlvbihlKXtpZihpc05hTihlKSl0aHJvdyBFcnJvcihcIkludmFsaWQgb2Zmc2V0IFwiLmNvbmNhdChlLFwiIHNwZWNpZmllZFwiKSk7ZT1NYXRoLm1heCgwLGUpO3ZhciB0PXRoaXMuZ2V0U2l6ZUFuZFBvc2l0aW9uT2ZMYXN0TWVhc3VyZWRDZWxsKCksbj1NYXRoLm1heCgwLHRoaXMuX2xhc3RNZWFzdXJlZEluZGV4KTtyZXR1cm4gdC5vZmZzZXQ+PWU/dGhpcy5fYmluYXJ5U2VhcmNoKG4sMCxlKTp0aGlzLl9leHBvbmVudGlhbFNlYXJjaChuLGUpfX1dKSxlfSgpLF9OPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt2YXIgbj10Lm1heFNjcm9sbFNpemUscj12b2lkIDA9PT1uP1widW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5jaHJvbWU/MTY3NzcxMDA6MTVlNTpuLGk9eU4odCxbXCJtYXhTY3JvbGxTaXplXCJdKTt0Tih0aGlzLGUpLGROKHRoaXMsXCJfY2VsbFNpemVBbmRQb3NpdGlvbk1hbmFnZXJcIix2b2lkIDApLGROKHRoaXMsXCJfbWF4U2Nyb2xsU2l6ZVwiLHZvaWQgMCksdGhpcy5fY2VsbFNpemVBbmRQb3NpdGlvbk1hbmFnZXI9bmV3IEVOKGkpLHRoaXMuX21heFNjcm9sbFNpemU9cn1yZXR1cm4gb04oZSxbe2tleTpcImFyZU9mZnNldHNBZGp1c3RlZFwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NlbGxTaXplQW5kUG9zaXRpb25NYW5hZ2VyLmdldFRvdGFsU2l6ZSgpPnRoaXMuX21heFNjcm9sbFNpemV9fSx7a2V5OlwiY29uZmlndXJlXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fY2VsbFNpemVBbmRQb3NpdGlvbk1hbmFnZXIuY29uZmlndXJlKGUpfX0se2tleTpcImdldENlbGxDb3VudFwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NlbGxTaXplQW5kUG9zaXRpb25NYW5hZ2VyLmdldENlbGxDb3VudCgpfX0se2tleTpcImdldEVzdGltYXRlZENlbGxTaXplXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2VsbFNpemVBbmRQb3NpdGlvbk1hbmFnZXIuZ2V0RXN0aW1hdGVkQ2VsbFNpemUoKX19LHtrZXk6XCJnZXRMYXN0TWVhc3VyZWRJbmRleFwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NlbGxTaXplQW5kUG9zaXRpb25NYW5hZ2VyLmdldExhc3RNZWFzdXJlZEluZGV4KCl9fSx7a2V5OlwiZ2V0T2Zmc2V0QWRqdXN0bWVudFwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuY29udGFpbmVyU2l6ZSxuPWUub2Zmc2V0LHI9dGhpcy5fY2VsbFNpemVBbmRQb3NpdGlvbk1hbmFnZXIuZ2V0VG90YWxTaXplKCksaT10aGlzLmdldFRvdGFsU2l6ZSgpLG89dGhpcy5fZ2V0T2Zmc2V0UGVyY2VudGFnZSh7Y29udGFpbmVyU2l6ZTp0LG9mZnNldDpuLHRvdGFsU2l6ZTppfSk7cmV0dXJuIE1hdGgucm91bmQobyooaS1yKSl9fSx7a2V5OlwiZ2V0U2l6ZUFuZFBvc2l0aW9uT2ZDZWxsXCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2NlbGxTaXplQW5kUG9zaXRpb25NYW5hZ2VyLmdldFNpemVBbmRQb3NpdGlvbk9mQ2VsbChlKX19LHtrZXk6XCJnZXRTaXplQW5kUG9zaXRpb25PZkxhc3RNZWFzdXJlZENlbGxcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jZWxsU2l6ZUFuZFBvc2l0aW9uTWFuYWdlci5nZXRTaXplQW5kUG9zaXRpb25PZkxhc3RNZWFzdXJlZENlbGwoKX19LHtrZXk6XCJnZXRUb3RhbFNpemVcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBNYXRoLm1pbih0aGlzLl9tYXhTY3JvbGxTaXplLHRoaXMuX2NlbGxTaXplQW5kUG9zaXRpb25NYW5hZ2VyLmdldFRvdGFsU2l6ZSgpKX19LHtrZXk6XCJnZXRVcGRhdGVkT2Zmc2V0Rm9ySW5kZXhcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmFsaWduLG49dm9pZCAwPT09dD9cImF1dG9cIjp0LHI9ZS5jb250YWluZXJTaXplLGk9ZS5jdXJyZW50T2Zmc2V0LG89ZS50YXJnZXRJbmRleDtpPXRoaXMuX3NhZmVPZmZzZXRUb09mZnNldCh7Y29udGFpbmVyU2l6ZTpyLG9mZnNldDppfSk7dmFyIGE9dGhpcy5fY2VsbFNpemVBbmRQb3NpdGlvbk1hbmFnZXIuZ2V0VXBkYXRlZE9mZnNldEZvckluZGV4KHthbGlnbjpuLGNvbnRhaW5lclNpemU6cixjdXJyZW50T2Zmc2V0OmksdGFyZ2V0SW5kZXg6b30pO3JldHVybiB0aGlzLl9vZmZzZXRUb1NhZmVPZmZzZXQoe2NvbnRhaW5lclNpemU6cixvZmZzZXQ6YX0pfX0se2tleTpcImdldFZpc2libGVDZWxsUmFuZ2VcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmNvbnRhaW5lclNpemUsbj1lLm9mZnNldDtyZXR1cm4gbj10aGlzLl9zYWZlT2Zmc2V0VG9PZmZzZXQoe2NvbnRhaW5lclNpemU6dCxvZmZzZXQ6bn0pLHRoaXMuX2NlbGxTaXplQW5kUG9zaXRpb25NYW5hZ2VyLmdldFZpc2libGVDZWxsUmFuZ2Uoe2NvbnRhaW5lclNpemU6dCxvZmZzZXQ6bn0pfX0se2tleTpcInJlc2V0Q2VsbFwiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX2NlbGxTaXplQW5kUG9zaXRpb25NYW5hZ2VyLnJlc2V0Q2VsbChlKX19LHtrZXk6XCJfZ2V0T2Zmc2V0UGVyY2VudGFnZVwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuY29udGFpbmVyU2l6ZSxuPWUub2Zmc2V0LHI9ZS50b3RhbFNpemU7cmV0dXJuIHI8PXQ/MDpuLyhyLXQpfX0se2tleTpcIl9vZmZzZXRUb1NhZmVPZmZzZXRcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmNvbnRhaW5lclNpemUsbj1lLm9mZnNldCxyPXRoaXMuX2NlbGxTaXplQW5kUG9zaXRpb25NYW5hZ2VyLmdldFRvdGFsU2l6ZSgpLGk9dGhpcy5nZXRUb3RhbFNpemUoKTtpZihyPT09aSlyZXR1cm4gbjt2YXIgbz10aGlzLl9nZXRPZmZzZXRQZXJjZW50YWdlKHtjb250YWluZXJTaXplOnQsb2Zmc2V0Om4sdG90YWxTaXplOnJ9KTtyZXR1cm4gTWF0aC5yb3VuZChvKihpLXQpKX19LHtrZXk6XCJfc2FmZU9mZnNldFRvT2Zmc2V0XCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb250YWluZXJTaXplLG49ZS5vZmZzZXQscj10aGlzLl9jZWxsU2l6ZUFuZFBvc2l0aW9uTWFuYWdlci5nZXRUb3RhbFNpemUoKSxpPXRoaXMuZ2V0VG90YWxTaXplKCk7aWYocj09PWkpcmV0dXJuIG47dmFyIG89dGhpcy5fZ2V0T2Zmc2V0UGVyY2VudGFnZSh7Y29udGFpbmVyU2l6ZTp0LG9mZnNldDpuLHRvdGFsU2l6ZTppfSk7cmV0dXJuIE1hdGgucm91bmQobyooci10KSl9fV0pLGV9KCk7ZnVuY3Rpb24gSU4oKXt2YXIgZT0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdLHQ9e307cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByPW4uY2FsbGJhY2ssaT1uLmluZGljZXMsbz1PYmplY3Qua2V5cyhpKSxhPSFlfHxvLmV2ZXJ5KChmdW5jdGlvbihlKXt2YXIgdD1pW2VdO3JldHVybiBBcnJheS5pc0FycmF5KHQpP3QubGVuZ3RoPjA6dD49MH0pKSxzPW8ubGVuZ3RoIT09T2JqZWN0LmtleXModCkubGVuZ3RofHxvLnNvbWUoKGZ1bmN0aW9uKGUpe3ZhciBuPXRbZV0scj1pW2VdO3JldHVybiBBcnJheS5pc0FycmF5KHIpP24uam9pbihcIixcIikhPT1yLmpvaW4oXCIsXCIpOm4hPT1yfSkpO3Q9aSxhJiZzJiZyKGkpfX1mdW5jdGlvbiBTTihlKXt2YXIgdD1lLmNlbGxTaXplLG49ZS5jZWxsU2l6ZUFuZFBvc2l0aW9uTWFuYWdlcixyPWUucHJldmlvdXNDZWxsc0NvdW50LGk9ZS5wcmV2aW91c0NlbGxTaXplLG89ZS5wcmV2aW91c1Njcm9sbFRvQWxpZ25tZW50LGE9ZS5wcmV2aW91c1Njcm9sbFRvSW5kZXgscz1lLnByZXZpb3VzU2l6ZSxjPWUuc2Nyb2xsT2Zmc2V0LGw9ZS5zY3JvbGxUb0FsaWdubWVudCx1PWUuc2Nyb2xsVG9JbmRleCxkPWUuc2l6ZSxmPWUuc2l6ZUp1c3RJbmNyZWFzZWRGcm9tWmVybyxwPWUudXBkYXRlU2Nyb2xsSW5kZXhDYWxsYmFjayxtPW4uZ2V0Q2VsbENvdW50KCksaD11Pj0wJiZ1PG07aCYmKGQhPT1zfHxmfHwhaXx8XCJudW1iZXJcIj09dHlwZW9mIHQmJnQhPT1pfHxsIT09b3x8dSE9PWEpP3AodSk6IWgmJm0+MCYmKGQ8c3x8bTxyKSYmYz5uLmdldFRvdGFsU2l6ZSgpLWQmJnAobS0xKX1jb25zdCBiTj0hKFwidW5kZWZpbmVkXCI9PXR5cGVvZiB3aW5kb3d8fCF3aW5kb3cuZG9jdW1lbnR8fCF3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7dmFyIFROLENOO2Z1bmN0aW9uIEFOKGUpe2lmKCghVE4mJjAhPT1UTnx8ZSkmJmJOKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3Quc3R5bGUucG9zaXRpb249XCJhYnNvbHV0ZVwiLHQuc3R5bGUudG9wPVwiLTk5OTlweFwiLHQuc3R5bGUud2lkdGg9XCI1MHB4XCIsdC5zdHlsZS5oZWlnaHQ9XCI1MHB4XCIsdC5zdHlsZS5vdmVyZmxvdz1cInNjcm9sbFwiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCksVE49dC5vZmZzZXRXaWR0aC10LmNsaWVudFdpZHRoLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodCl9cmV0dXJuIFROfXZhciBSTixrTixPTj0oQ049XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjp7fSkucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxDTi53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fENOLm1velJlcXVlc3RBbmltYXRpb25GcmFtZXx8Q04ub1JlcXVlc3RBbmltYXRpb25GcmFtZXx8Q04ubXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fGZ1bmN0aW9uKGUpe3JldHVybiBDTi5zZXRUaW1lb3V0KGUsMWUzLzYwKX0sTk49Q04uY2FuY2VsQW5pbWF0aW9uRnJhbWV8fENOLndlYmtpdENhbmNlbEFuaW1hdGlvbkZyYW1lfHxDTi5tb3pDYW5jZWxBbmltYXRpb25GcmFtZXx8Q04ub0NhbmNlbEFuaW1hdGlvbkZyYW1lfHxDTi5tc0NhbmNlbEFuaW1hdGlvbkZyYW1lfHxmdW5jdGlvbihlKXtDTi5jbGVhclRpbWVvdXQoZSl9LHdOPU9OLEROPU5OLFBOPWZ1bmN0aW9uKGUpe3JldHVybiBETihlLmlkKX0sTU49ZnVuY3Rpb24oZSx0KXt2YXIgbjtQcm9taXNlLnJlc29sdmUoKS50aGVuKChmdW5jdGlvbigpe249RGF0ZS5ub3coKX0pKTt2YXIgcj17aWQ6d04oKGZ1bmN0aW9uIGkoKXtEYXRlLm5vdygpLW4+PXQ/ZS5jYWxsKCk6ci5pZD13TihpKX0pKX07cmV0dXJuIHJ9O2Z1bmN0aW9uIExOKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBVTihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9MTihuLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtkTihlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6TE4obikuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfXZhciB4Tj1cInJlcXVlc3RlZFwiLEZOPShrTj1STj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3ZhciBuO3ROKHRoaXMsdCksZE4oYU4obj1zTih0aGlzLGNOKHQpLmNhbGwodGhpcyxlKSkpLFwiX29uR3JpZFJlbmRlcmVkTWVtb2l6ZXJcIixJTigpKSxkTihhTihuKSxcIl9vblNjcm9sbE1lbW9pemVyXCIsSU4oITEpKSxkTihhTihuKSxcIl9kZWZlcnJlZEludmFsaWRhdGVDb2x1bW5JbmRleFwiLG51bGwpLGROKGFOKG4pLFwiX2RlZmVycmVkSW52YWxpZGF0ZVJvd0luZGV4XCIsbnVsbCksZE4oYU4obiksXCJfcmVjb21wdXRlU2Nyb2xsTGVmdEZsYWdcIiwhMSksZE4oYU4obiksXCJfcmVjb21wdXRlU2Nyb2xsVG9wRmxhZ1wiLCExKSxkTihhTihuKSxcIl9ob3Jpem9udGFsU2Nyb2xsQmFyU2l6ZVwiLDApLGROKGFOKG4pLFwiX3ZlcnRpY2FsU2Nyb2xsQmFyU2l6ZVwiLDApLGROKGFOKG4pLFwiX3Njcm9sbGJhclByZXNlbmNlQ2hhbmdlZFwiLCExKSxkTihhTihuKSxcIl9zY3JvbGxpbmdDb250YWluZXJcIix2b2lkIDApLGROKGFOKG4pLFwiX2NoaWxkcmVuVG9EaXNwbGF5XCIsdm9pZCAwKSxkTihhTihuKSxcIl9jb2x1bW5TdGFydEluZGV4XCIsdm9pZCAwKSxkTihhTihuKSxcIl9jb2x1bW5TdG9wSW5kZXhcIix2b2lkIDApLGROKGFOKG4pLFwiX3Jvd1N0YXJ0SW5kZXhcIix2b2lkIDApLGROKGFOKG4pLFwiX3Jvd1N0b3BJbmRleFwiLHZvaWQgMCksZE4oYU4obiksXCJfcmVuZGVyZWRDb2x1bW5TdGFydEluZGV4XCIsMCksZE4oYU4obiksXCJfcmVuZGVyZWRDb2x1bW5TdG9wSW5kZXhcIiwwKSxkTihhTihuKSxcIl9yZW5kZXJlZFJvd1N0YXJ0SW5kZXhcIiwwKSxkTihhTihuKSxcIl9yZW5kZXJlZFJvd1N0b3BJbmRleFwiLDApLGROKGFOKG4pLFwiX2luaXRpYWxTY3JvbGxUb3BcIix2b2lkIDApLGROKGFOKG4pLFwiX2luaXRpYWxTY3JvbGxMZWZ0XCIsdm9pZCAwKSxkTihhTihuKSxcIl9kaXNhYmxlUG9pbnRlckV2ZW50c1RpbWVvdXRJZFwiLHZvaWQgMCksZE4oYU4obiksXCJfc3R5bGVDYWNoZVwiLHt9KSxkTihhTihuKSxcIl9jZWxsQ2FjaGVcIix7fSksZE4oYU4obiksXCJfZGVib3VuY2VTY3JvbGxFbmRlZENhbGxiYWNrXCIsKGZ1bmN0aW9uKCl7bi5fZGlzYWJsZVBvaW50ZXJFdmVudHNUaW1lb3V0SWQ9bnVsbCxuLnNldFN0YXRlKHtpc1Njcm9sbGluZzohMSxuZWVkVG9SZXNldFN0eWxlQ2FjaGU6ITF9KX0pKSxkTihhTihuKSxcIl9pbnZva2VPbkdyaWRSZW5kZXJlZEhlbHBlclwiLChmdW5jdGlvbigpe3ZhciBlPW4ucHJvcHMub25TZWN0aW9uUmVuZGVyZWQ7bi5fb25HcmlkUmVuZGVyZWRNZW1vaXplcih7Y2FsbGJhY2s6ZSxpbmRpY2VzOntjb2x1bW5PdmVyc2NhblN0YXJ0SW5kZXg6bi5fY29sdW1uU3RhcnRJbmRleCxjb2x1bW5PdmVyc2NhblN0b3BJbmRleDpuLl9jb2x1bW5TdG9wSW5kZXgsY29sdW1uU3RhcnRJbmRleDpuLl9yZW5kZXJlZENvbHVtblN0YXJ0SW5kZXgsY29sdW1uU3RvcEluZGV4Om4uX3JlbmRlcmVkQ29sdW1uU3RvcEluZGV4LHJvd092ZXJzY2FuU3RhcnRJbmRleDpuLl9yb3dTdGFydEluZGV4LHJvd092ZXJzY2FuU3RvcEluZGV4Om4uX3Jvd1N0b3BJbmRleCxyb3dTdGFydEluZGV4Om4uX3JlbmRlcmVkUm93U3RhcnRJbmRleCxyb3dTdG9wSW5kZXg6bi5fcmVuZGVyZWRSb3dTdG9wSW5kZXh9fSl9KSksZE4oYU4obiksXCJfc2V0U2Nyb2xsaW5nQ29udGFpbmVyUmVmXCIsKGZ1bmN0aW9uKGUpe24uX3Njcm9sbGluZ0NvbnRhaW5lcj1lfSkpLGROKGFOKG4pLFwiX29uU2Nyb2xsXCIsKGZ1bmN0aW9uKGUpe2UudGFyZ2V0PT09bi5fc2Nyb2xsaW5nQ29udGFpbmVyJiZuLmhhbmRsZVNjcm9sbEV2ZW50KGUudGFyZ2V0KX0pKTt2YXIgcj1uZXcgX04oe2NlbGxDb3VudDplLmNvbHVtbkNvdW50LGNlbGxTaXplR2V0dGVyOmZ1bmN0aW9uKG4pe3JldHVybiB0Ll93cmFwU2l6ZUdldHRlcihlLmNvbHVtbldpZHRoKShuKX0sZXN0aW1hdGVkQ2VsbFNpemU6dC5fZ2V0RXN0aW1hdGVkQ29sdW1uU2l6ZShlKX0pLGk9bmV3IF9OKHtjZWxsQ291bnQ6ZS5yb3dDb3VudCxjZWxsU2l6ZUdldHRlcjpmdW5jdGlvbihuKXtyZXR1cm4gdC5fd3JhcFNpemVHZXR0ZXIoZS5yb3dIZWlnaHQpKG4pfSxlc3RpbWF0ZWRDZWxsU2l6ZTp0Ll9nZXRFc3RpbWF0ZWRSb3dTaXplKGUpfSk7cmV0dXJuIG4uc3RhdGU9e2luc3RhbmNlUHJvcHM6e2NvbHVtblNpemVBbmRQb3NpdGlvbk1hbmFnZXI6cixyb3dTaXplQW5kUG9zaXRpb25NYW5hZ2VyOmkscHJldkNvbHVtbldpZHRoOmUuY29sdW1uV2lkdGgscHJldlJvd0hlaWdodDplLnJvd0hlaWdodCxwcmV2Q29sdW1uQ291bnQ6ZS5jb2x1bW5Db3VudCxwcmV2Um93Q291bnQ6ZS5yb3dDb3VudCxwcmV2SXNTY3JvbGxpbmc6ITA9PT1lLmlzU2Nyb2xsaW5nLHByZXZTY3JvbGxUb0NvbHVtbjplLnNjcm9sbFRvQ29sdW1uLHByZXZTY3JvbGxUb1JvdzplLnNjcm9sbFRvUm93LHNjcm9sbGJhclNpemU6MCxzY3JvbGxiYXJTaXplTWVhc3VyZWQ6ITF9LGlzU2Nyb2xsaW5nOiExLHNjcm9sbERpcmVjdGlvbkhvcml6b250YWw6MSxzY3JvbGxEaXJlY3Rpb25WZXJ0aWNhbDoxLHNjcm9sbExlZnQ6MCxzY3JvbGxUb3A6MCxzY3JvbGxQb3NpdGlvbkNoYW5nZVJlYXNvbjpudWxsLG5lZWRUb1Jlc2V0U3R5bGVDYWNoZTohMX0sZS5zY3JvbGxUb1Jvdz4wJiYobi5faW5pdGlhbFNjcm9sbFRvcD1uLl9nZXRDYWxjdWxhdGVkU2Nyb2xsVG9wKGUsbi5zdGF0ZSkpLGUuc2Nyb2xsVG9Db2x1bW4+MCYmKG4uX2luaXRpYWxTY3JvbGxMZWZ0PW4uX2dldENhbGN1bGF0ZWRTY3JvbGxMZWZ0KGUsbi5zdGF0ZSkpLG59cmV0dXJuIHVOKHQsZSksb04odCxbe2tleTpcImdldE9mZnNldEZvckNlbGxcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSx0PWUuYWxpZ25tZW50LG49dm9pZCAwPT09dD90aGlzLnByb3BzLnNjcm9sbFRvQWxpZ25tZW50OnQscj1lLmNvbHVtbkluZGV4LGk9dm9pZCAwPT09cj90aGlzLnByb3BzLnNjcm9sbFRvQ29sdW1uOnIsbz1lLnJvd0luZGV4LGE9dm9pZCAwPT09bz90aGlzLnByb3BzLnNjcm9sbFRvUm93Om8scz1VTih7fSx0aGlzLnByb3BzLHtzY3JvbGxUb0FsaWdubWVudDpuLHNjcm9sbFRvQ29sdW1uOmksc2Nyb2xsVG9Sb3c6YX0pO3JldHVybntzY3JvbGxMZWZ0OnRoaXMuX2dldENhbGN1bGF0ZWRTY3JvbGxMZWZ0KHMpLHNjcm9sbFRvcDp0aGlzLl9nZXRDYWxjdWxhdGVkU2Nyb2xsVG9wKHMpfX19LHtrZXk6XCJnZXRUb3RhbFJvd3NIZWlnaHRcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlLmluc3RhbmNlUHJvcHMucm93U2l6ZUFuZFBvc2l0aW9uTWFuYWdlci5nZXRUb3RhbFNpemUoKX19LHtrZXk6XCJnZXRUb3RhbENvbHVtbnNXaWR0aFwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdGUuaW5zdGFuY2VQcm9wcy5jb2x1bW5TaXplQW5kUG9zaXRpb25NYW5hZ2VyLmdldFRvdGFsU2l6ZSgpfX0se2tleTpcImhhbmRsZVNjcm9sbEV2ZW50XCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zY3JvbGxMZWZ0LG49dm9pZCAwPT09dD8wOnQscj1lLnNjcm9sbFRvcCxpPXZvaWQgMD09PXI/MDpyO2lmKCEoaTwwKSl7dGhpcy5fZGVib3VuY2VTY3JvbGxFbmRlZCgpO3ZhciBvPXRoaXMucHJvcHMsYT1vLmF1dG9IZWlnaHQscz1vLmF1dG9XaWR0aCxjPW8uaGVpZ2h0LGw9by53aWR0aCx1PXRoaXMuc3RhdGUuaW5zdGFuY2VQcm9wcyxkPXUuc2Nyb2xsYmFyU2l6ZSxmPXUucm93U2l6ZUFuZFBvc2l0aW9uTWFuYWdlci5nZXRUb3RhbFNpemUoKSxwPXUuY29sdW1uU2l6ZUFuZFBvc2l0aW9uTWFuYWdlci5nZXRUb3RhbFNpemUoKSxtPU1hdGgubWluKE1hdGgubWF4KDAscC1sK2QpLG4pLGg9TWF0aC5taW4oTWF0aC5tYXgoMCxmLWMrZCksaSk7aWYodGhpcy5zdGF0ZS5zY3JvbGxMZWZ0IT09bXx8dGhpcy5zdGF0ZS5zY3JvbGxUb3AhPT1oKXt2YXIgdj17aXNTY3JvbGxpbmc6ITAsc2Nyb2xsRGlyZWN0aW9uSG9yaXpvbnRhbDptIT09dGhpcy5zdGF0ZS5zY3JvbGxMZWZ0P20+dGhpcy5zdGF0ZS5zY3JvbGxMZWZ0PzE6LTE6dGhpcy5zdGF0ZS5zY3JvbGxEaXJlY3Rpb25Ib3Jpem9udGFsLHNjcm9sbERpcmVjdGlvblZlcnRpY2FsOmghPT10aGlzLnN0YXRlLnNjcm9sbFRvcD9oPnRoaXMuc3RhdGUuc2Nyb2xsVG9wPzE6LTE6dGhpcy5zdGF0ZS5zY3JvbGxEaXJlY3Rpb25WZXJ0aWNhbCxzY3JvbGxQb3NpdGlvbkNoYW5nZVJlYXNvbjpcIm9ic2VydmVkXCJ9O2F8fCh2LnNjcm9sbFRvcD1oKSxzfHwodi5zY3JvbGxMZWZ0PW0pLHYubmVlZFRvUmVzZXRTdHlsZUNhY2hlPSExLHRoaXMuc2V0U3RhdGUodil9dGhpcy5faW52b2tlT25TY3JvbGxNZW1vaXplcih7c2Nyb2xsTGVmdDptLHNjcm9sbFRvcDpoLHRvdGFsQ29sdW1uc1dpZHRoOnAsdG90YWxSb3dzSGVpZ2h0OmZ9KX19fSx7a2V5OlwiaW52YWxpZGF0ZUNlbGxTaXplQWZ0ZXJSZW5kZXJcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmNvbHVtbkluZGV4LG49ZS5yb3dJbmRleDt0aGlzLl9kZWZlcnJlZEludmFsaWRhdGVDb2x1bW5JbmRleD1cIm51bWJlclwiPT10eXBlb2YgdGhpcy5fZGVmZXJyZWRJbnZhbGlkYXRlQ29sdW1uSW5kZXg/TWF0aC5taW4odGhpcy5fZGVmZXJyZWRJbnZhbGlkYXRlQ29sdW1uSW5kZXgsdCk6dCx0aGlzLl9kZWZlcnJlZEludmFsaWRhdGVSb3dJbmRleD1cIm51bWJlclwiPT10eXBlb2YgdGhpcy5fZGVmZXJyZWRJbnZhbGlkYXRlUm93SW5kZXg/TWF0aC5taW4odGhpcy5fZGVmZXJyZWRJbnZhbGlkYXRlUm93SW5kZXgsbik6bn19LHtrZXk6XCJtZWFzdXJlQWxsQ2VsbHNcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmNvbHVtbkNvdW50LG49ZS5yb3dDb3VudCxyPXRoaXMuc3RhdGUuaW5zdGFuY2VQcm9wcztyLmNvbHVtblNpemVBbmRQb3NpdGlvbk1hbmFnZXIuZ2V0U2l6ZUFuZFBvc2l0aW9uT2ZDZWxsKHQtMSksci5yb3dTaXplQW5kUG9zaXRpb25NYW5hZ2VyLmdldFNpemVBbmRQb3NpdGlvbk9mQ2VsbChuLTEpfX0se2tleTpcInJlY29tcHV0ZUdyaWRTaXplXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sdD1lLmNvbHVtbkluZGV4LG49dm9pZCAwPT09dD8wOnQscj1lLnJvd0luZGV4LGk9dm9pZCAwPT09cj8wOnIsbz10aGlzLnByb3BzLGE9by5zY3JvbGxUb0NvbHVtbixzPW8uc2Nyb2xsVG9Sb3csYz10aGlzLnN0YXRlLmluc3RhbmNlUHJvcHM7Yy5jb2x1bW5TaXplQW5kUG9zaXRpb25NYW5hZ2VyLnJlc2V0Q2VsbChuKSxjLnJvd1NpemVBbmRQb3NpdGlvbk1hbmFnZXIucmVzZXRDZWxsKGkpLHRoaXMuX3JlY29tcHV0ZVNjcm9sbExlZnRGbGFnPWE+PTAmJigxPT09dGhpcy5zdGF0ZS5zY3JvbGxEaXJlY3Rpb25Ib3Jpem9udGFsP248PWE6bj49YSksdGhpcy5fcmVjb21wdXRlU2Nyb2xsVG9wRmxhZz1zPj0wJiYoMT09PXRoaXMuc3RhdGUuc2Nyb2xsRGlyZWN0aW9uVmVydGljYWw/aTw9czppPj1zKSx0aGlzLl9zdHlsZUNhY2hlPXt9LHRoaXMuX2NlbGxDYWNoZT17fSx0aGlzLmZvcmNlVXBkYXRlKCl9fSx7a2V5Olwic2Nyb2xsVG9DZWxsXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2x1bW5JbmRleCxuPWUucm93SW5kZXgscj10aGlzLnByb3BzLmNvbHVtbkNvdW50LGk9dGhpcy5wcm9wcztyPjEmJnZvaWQgMCE9PXQmJnRoaXMuX3VwZGF0ZVNjcm9sbExlZnRGb3JTY3JvbGxUb0NvbHVtbihVTih7fSxpLHtzY3JvbGxUb0NvbHVtbjp0fSkpLHZvaWQgMCE9PW4mJnRoaXMuX3VwZGF0ZVNjcm9sbFRvcEZvclNjcm9sbFRvUm93KFVOKHt9LGkse3Njcm9sbFRvUm93Om59KSl9fSx7a2V5OlwiY29tcG9uZW50RGlkTW91bnRcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsbj1lLmdldFNjcm9sbGJhclNpemUscj1lLmhlaWdodCxpPWUuc2Nyb2xsTGVmdCxvPWUuc2Nyb2xsVG9Db2x1bW4sYT1lLnNjcm9sbFRvcCxzPWUuc2Nyb2xsVG9Sb3csYz1lLndpZHRoLGw9dGhpcy5zdGF0ZS5pbnN0YW5jZVByb3BzO2lmKHRoaXMuX2luaXRpYWxTY3JvbGxUb3A9MCx0aGlzLl9pbml0aWFsU2Nyb2xsTGVmdD0wLHRoaXMuX2hhbmRsZUludmFsaWRhdGVkR3JpZFNpemUoKSxsLnNjcm9sbGJhclNpemVNZWFzdXJlZHx8dGhpcy5zZXRTdGF0ZSgoZnVuY3Rpb24oZSl7dmFyIHQ9VU4oe30sZSx7bmVlZFRvUmVzZXRTdHlsZUNhY2hlOiExfSk7cmV0dXJuIHQuaW5zdGFuY2VQcm9wcy5zY3JvbGxiYXJTaXplPW4oKSx0Lmluc3RhbmNlUHJvcHMuc2Nyb2xsYmFyU2l6ZU1lYXN1cmVkPSEwLHR9KSksXCJudW1iZXJcIj09dHlwZW9mIGkmJmk+PTB8fFwibnVtYmVyXCI9PXR5cGVvZiBhJiZhPj0wKXt2YXIgdT10Ll9nZXRTY3JvbGxUb1Bvc2l0aW9uU3RhdGVVcGRhdGUoe3ByZXZTdGF0ZTp0aGlzLnN0YXRlLHNjcm9sbExlZnQ6aSxzY3JvbGxUb3A6YX0pO3UmJih1Lm5lZWRUb1Jlc2V0U3R5bGVDYWNoZT0hMSx0aGlzLnNldFN0YXRlKHUpKX10aGlzLl9zY3JvbGxpbmdDb250YWluZXImJih0aGlzLl9zY3JvbGxpbmdDb250YWluZXIuc2Nyb2xsTGVmdCE9PXRoaXMuc3RhdGUuc2Nyb2xsTGVmdCYmKHRoaXMuX3Njcm9sbGluZ0NvbnRhaW5lci5zY3JvbGxMZWZ0PXRoaXMuc3RhdGUuc2Nyb2xsTGVmdCksdGhpcy5fc2Nyb2xsaW5nQ29udGFpbmVyLnNjcm9sbFRvcCE9PXRoaXMuc3RhdGUuc2Nyb2xsVG9wJiYodGhpcy5fc2Nyb2xsaW5nQ29udGFpbmVyLnNjcm9sbFRvcD10aGlzLnN0YXRlLnNjcm9sbFRvcCkpO3ZhciBkPXI+MCYmYz4wO28+PTAmJmQmJnRoaXMuX3VwZGF0ZVNjcm9sbExlZnRGb3JTY3JvbGxUb0NvbHVtbigpLHM+PTAmJmQmJnRoaXMuX3VwZGF0ZVNjcm9sbFRvcEZvclNjcm9sbFRvUm93KCksdGhpcy5faW52b2tlT25HcmlkUmVuZGVyZWRIZWxwZXIoKSx0aGlzLl9pbnZva2VPblNjcm9sbE1lbW9pemVyKHtzY3JvbGxMZWZ0Oml8fDAsc2Nyb2xsVG9wOmF8fDAsdG90YWxDb2x1bW5zV2lkdGg6bC5jb2x1bW5TaXplQW5kUG9zaXRpb25NYW5hZ2VyLmdldFRvdGFsU2l6ZSgpLHRvdGFsUm93c0hlaWdodDpsLnJvd1NpemVBbmRQb3NpdGlvbk1hbmFnZXIuZ2V0VG90YWxTaXplKCl9KSx0aGlzLl9tYXliZUNhbGxPblNjcm9sbGJhclByZXNlbmNlQ2hhbmdlKCl9fSx7a2V5OlwiY29tcG9uZW50RGlkVXBkYXRlXCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9dGhpcy5wcm9wcyxpPXIuYXV0b0hlaWdodCxvPXIuYXV0b1dpZHRoLGE9ci5jb2x1bW5Db3VudCxzPXIuaGVpZ2h0LGM9ci5yb3dDb3VudCxsPXIuc2Nyb2xsVG9BbGlnbm1lbnQsdT1yLnNjcm9sbFRvQ29sdW1uLGQ9ci5zY3JvbGxUb1JvdyxmPXIud2lkdGgscD10aGlzLnN0YXRlLG09cC5zY3JvbGxMZWZ0LGg9cC5zY3JvbGxQb3NpdGlvbkNoYW5nZVJlYXNvbix2PXAuc2Nyb2xsVG9wLGc9cC5pbnN0YW5jZVByb3BzO3RoaXMuX2hhbmRsZUludmFsaWRhdGVkR3JpZFNpemUoKTt2YXIgeT1hPjAmJjA9PT1lLmNvbHVtbkNvdW50fHxjPjAmJjA9PT1lLnJvd0NvdW50O2g9PT14TiYmKCFvJiZtPj0wJiYobSE9PXRoaXMuX3Njcm9sbGluZ0NvbnRhaW5lci5zY3JvbGxMZWZ0fHx5KSYmKHRoaXMuX3Njcm9sbGluZ0NvbnRhaW5lci5zY3JvbGxMZWZ0PW0pLCFpJiZ2Pj0wJiYodiE9PXRoaXMuX3Njcm9sbGluZ0NvbnRhaW5lci5zY3JvbGxUb3B8fHkpJiYodGhpcy5fc2Nyb2xsaW5nQ29udGFpbmVyLnNjcm9sbFRvcD12KSk7dmFyIEU9KDA9PT1lLndpZHRofHwwPT09ZS5oZWlnaHQpJiZzPjAmJmY+MDtpZih0aGlzLl9yZWNvbXB1dGVTY3JvbGxMZWZ0RmxhZz8odGhpcy5fcmVjb21wdXRlU2Nyb2xsTGVmdEZsYWc9ITEsdGhpcy5fdXBkYXRlU2Nyb2xsTGVmdEZvclNjcm9sbFRvQ29sdW1uKHRoaXMucHJvcHMpKTpTTih7Y2VsbFNpemVBbmRQb3NpdGlvbk1hbmFnZXI6Zy5jb2x1bW5TaXplQW5kUG9zaXRpb25NYW5hZ2VyLHByZXZpb3VzQ2VsbHNDb3VudDplLmNvbHVtbkNvdW50LHByZXZpb3VzQ2VsbFNpemU6ZS5jb2x1bW5XaWR0aCxwcmV2aW91c1Njcm9sbFRvQWxpZ25tZW50OmUuc2Nyb2xsVG9BbGlnbm1lbnQscHJldmlvdXNTY3JvbGxUb0luZGV4OmUuc2Nyb2xsVG9Db2x1bW4scHJldmlvdXNTaXplOmUud2lkdGgsc2Nyb2xsT2Zmc2V0Om0sc2Nyb2xsVG9BbGlnbm1lbnQ6bCxzY3JvbGxUb0luZGV4OnUsc2l6ZTpmLHNpemVKdXN0SW5jcmVhc2VkRnJvbVplcm86RSx1cGRhdGVTY3JvbGxJbmRleENhbGxiYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIG4uX3VwZGF0ZVNjcm9sbExlZnRGb3JTY3JvbGxUb0NvbHVtbihuLnByb3BzKX19KSx0aGlzLl9yZWNvbXB1dGVTY3JvbGxUb3BGbGFnPyh0aGlzLl9yZWNvbXB1dGVTY3JvbGxUb3BGbGFnPSExLHRoaXMuX3VwZGF0ZVNjcm9sbFRvcEZvclNjcm9sbFRvUm93KHRoaXMucHJvcHMpKTpTTih7Y2VsbFNpemVBbmRQb3NpdGlvbk1hbmFnZXI6Zy5yb3dTaXplQW5kUG9zaXRpb25NYW5hZ2VyLHByZXZpb3VzQ2VsbHNDb3VudDplLnJvd0NvdW50LHByZXZpb3VzQ2VsbFNpemU6ZS5yb3dIZWlnaHQscHJldmlvdXNTY3JvbGxUb0FsaWdubWVudDplLnNjcm9sbFRvQWxpZ25tZW50LHByZXZpb3VzU2Nyb2xsVG9JbmRleDplLnNjcm9sbFRvUm93LHByZXZpb3VzU2l6ZTplLmhlaWdodCxzY3JvbGxPZmZzZXQ6dixzY3JvbGxUb0FsaWdubWVudDpsLHNjcm9sbFRvSW5kZXg6ZCxzaXplOnMsc2l6ZUp1c3RJbmNyZWFzZWRGcm9tWmVybzpFLHVwZGF0ZVNjcm9sbEluZGV4Q2FsbGJhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gbi5fdXBkYXRlU2Nyb2xsVG9wRm9yU2Nyb2xsVG9Sb3cobi5wcm9wcyl9fSksdGhpcy5faW52b2tlT25HcmlkUmVuZGVyZWRIZWxwZXIoKSxtIT09dC5zY3JvbGxMZWZ0fHx2IT09dC5zY3JvbGxUb3Ape3ZhciBfPWcucm93U2l6ZUFuZFBvc2l0aW9uTWFuYWdlci5nZXRUb3RhbFNpemUoKSxJPWcuY29sdW1uU2l6ZUFuZFBvc2l0aW9uTWFuYWdlci5nZXRUb3RhbFNpemUoKTt0aGlzLl9pbnZva2VPblNjcm9sbE1lbW9pemVyKHtzY3JvbGxMZWZ0Om0sc2Nyb2xsVG9wOnYsdG90YWxDb2x1bW5zV2lkdGg6SSx0b3RhbFJvd3NIZWlnaHQ6X30pfXRoaXMuX21heWJlQ2FsbE9uU2Nyb2xsYmFyUHJlc2VuY2VDaGFuZ2UoKX19LHtrZXk6XCJjb21wb25lbnRXaWxsVW5tb3VudFwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fZGlzYWJsZVBvaW50ZXJFdmVudHNUaW1lb3V0SWQmJlBOKHRoaXMuX2Rpc2FibGVQb2ludGVyRXZlbnRzVGltZW91dElkKX19LHtrZXk6XCJyZW5kZXJcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmF1dG9Db250YWluZXJXaWR0aCxuPWUuYXV0b0hlaWdodCxyPWUuYXV0b1dpZHRoLGk9ZS5jbGFzc05hbWUsbz1lLmNvbnRhaW5lclByb3BzLGE9ZS5jb250YWluZXJSb2xlLHM9ZS5jb250YWluZXJTdHlsZSxjPWUuaGVpZ2h0LGw9ZS5pZCx1PWUubm9Db250ZW50UmVuZGVyZXIsZj1lLnJvbGUscD1lLnN0eWxlLG09ZS50YWJJbmRleCxoPWUud2lkdGgsdj10aGlzLnN0YXRlLGc9di5pbnN0YW5jZVByb3BzLHk9di5uZWVkVG9SZXNldFN0eWxlQ2FjaGUsRT10aGlzLl9pc1Njcm9sbGluZygpLF89e2JveFNpemluZzpcImJvcmRlci1ib3hcIixkaXJlY3Rpb246XCJsdHJcIixoZWlnaHQ6bj9cImF1dG9cIjpjLHBvc2l0aW9uOlwicmVsYXRpdmVcIix3aWR0aDpyP1wiYXV0b1wiOmgsV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc6XCJ0b3VjaFwiLHdpbGxDaGFuZ2U6XCJ0cmFuc2Zvcm1cIn07eSYmKHRoaXMuX3N0eWxlQ2FjaGU9e30pLHRoaXMuc3RhdGUuaXNTY3JvbGxpbmd8fHRoaXMuX3Jlc2V0U3R5bGVDYWNoZSgpLHRoaXMuX2NhbGN1bGF0ZUNoaWxkcmVuVG9SZW5kZXIodGhpcy5wcm9wcyx0aGlzLnN0YXRlKTt2YXIgST1nLmNvbHVtblNpemVBbmRQb3NpdGlvbk1hbmFnZXIuZ2V0VG90YWxTaXplKCksUz1nLnJvd1NpemVBbmRQb3NpdGlvbk1hbmFnZXIuZ2V0VG90YWxTaXplKCksYj1TPmM/Zy5zY3JvbGxiYXJTaXplOjAsVD1JPmg/Zy5zY3JvbGxiYXJTaXplOjA7VD09PXRoaXMuX2hvcml6b250YWxTY3JvbGxCYXJTaXplJiZiPT09dGhpcy5fdmVydGljYWxTY3JvbGxCYXJTaXplfHwodGhpcy5faG9yaXpvbnRhbFNjcm9sbEJhclNpemU9VCx0aGlzLl92ZXJ0aWNhbFNjcm9sbEJhclNpemU9Yix0aGlzLl9zY3JvbGxiYXJQcmVzZW5jZUNoYW5nZWQ9ITApLF8ub3ZlcmZsb3dYPUkrYjw9aD9cImhpZGRlblwiOlwiYXV0b1wiLF8ub3ZlcmZsb3dZPVMrVDw9Yz9cImhpZGRlblwiOlwiYXV0b1wiO3ZhciBDPXRoaXMuX2NoaWxkcmVuVG9EaXNwbGF5LEE9MD09PUMubGVuZ3RoJiZjPjAmJmg+MDtyZXR1cm4gZC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsdk4oe3JlZjp0aGlzLl9zZXRTY3JvbGxpbmdDb250YWluZXJSZWZ9LG8se1wiYXJpYS1sYWJlbFwiOnRoaXMucHJvcHNbXCJhcmlhLWxhYmVsXCJdLFwiYXJpYS1yZWFkb25seVwiOnRoaXMucHJvcHNbXCJhcmlhLXJlYWRvbmx5XCJdLGNsYXNzTmFtZTooMCxRLlopKFwiUmVhY3RWaXJ0dWFsaXplZF9fR3JpZFwiLGkpLGlkOmwsb25TY3JvbGw6dGhpcy5fb25TY3JvbGwscm9sZTpmLHN0eWxlOlVOKHt9LF8se30scCksdGFiSW5kZXg6bX0pLEMubGVuZ3RoPjAmJmQuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJSZWFjdFZpcnR1YWxpemVkX19HcmlkX19pbm5lclNjcm9sbENvbnRhaW5lclwiLHJvbGU6YSxzdHlsZTpVTih7d2lkdGg6dD9cImF1dG9cIjpJLGhlaWdodDpTLG1heFdpZHRoOkksbWF4SGVpZ2h0OlMsb3ZlcmZsb3c6XCJoaWRkZW5cIixwb2ludGVyRXZlbnRzOkU/XCJub25lXCI6XCJcIixwb3NpdGlvbjpcInJlbGF0aXZlXCJ9LHMpfSxDKSxBJiZ1KCkpfX0se2tleTpcIl9jYWxjdWxhdGVDaGlsZHJlblRvUmVuZGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5wcm9wcyx0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLnN0YXRlLG49ZS5jZWxsUmVuZGVyZXIscj1lLmNlbGxSYW5nZVJlbmRlcmVyLGk9ZS5jb2x1bW5Db3VudCxvPWUuZGVmZXJyZWRNZWFzdXJlbWVudENhY2hlLGE9ZS5oZWlnaHQscz1lLm92ZXJzY2FuQ29sdW1uQ291bnQsYz1lLm92ZXJzY2FuSW5kaWNlc0dldHRlcixsPWUub3ZlcnNjYW5Sb3dDb3VudCx1PWUucm93Q291bnQsZD1lLndpZHRoLGY9ZS5pc1Njcm9sbGluZ09wdE91dCxwPXQuc2Nyb2xsRGlyZWN0aW9uSG9yaXpvbnRhbCxtPXQuc2Nyb2xsRGlyZWN0aW9uVmVydGljYWwsaD10Lmluc3RhbmNlUHJvcHMsdj10aGlzLl9pbml0aWFsU2Nyb2xsVG9wPjA/dGhpcy5faW5pdGlhbFNjcm9sbFRvcDp0LnNjcm9sbFRvcCxnPXRoaXMuX2luaXRpYWxTY3JvbGxMZWZ0PjA/dGhpcy5faW5pdGlhbFNjcm9sbExlZnQ6dC5zY3JvbGxMZWZ0LHk9dGhpcy5faXNTY3JvbGxpbmcoZSx0KTtpZih0aGlzLl9jaGlsZHJlblRvRGlzcGxheT1bXSxhPjAmJmQ+MCl7dmFyIEU9aC5jb2x1bW5TaXplQW5kUG9zaXRpb25NYW5hZ2VyLmdldFZpc2libGVDZWxsUmFuZ2Uoe2NvbnRhaW5lclNpemU6ZCxvZmZzZXQ6Z30pLF89aC5yb3dTaXplQW5kUG9zaXRpb25NYW5hZ2VyLmdldFZpc2libGVDZWxsUmFuZ2Uoe2NvbnRhaW5lclNpemU6YSxvZmZzZXQ6dn0pLEk9aC5jb2x1bW5TaXplQW5kUG9zaXRpb25NYW5hZ2VyLmdldE9mZnNldEFkanVzdG1lbnQoe2NvbnRhaW5lclNpemU6ZCxvZmZzZXQ6Z30pLFM9aC5yb3dTaXplQW5kUG9zaXRpb25NYW5hZ2VyLmdldE9mZnNldEFkanVzdG1lbnQoe2NvbnRhaW5lclNpemU6YSxvZmZzZXQ6dn0pO3RoaXMuX3JlbmRlcmVkQ29sdW1uU3RhcnRJbmRleD1FLnN0YXJ0LHRoaXMuX3JlbmRlcmVkQ29sdW1uU3RvcEluZGV4PUUuc3RvcCx0aGlzLl9yZW5kZXJlZFJvd1N0YXJ0SW5kZXg9Xy5zdGFydCx0aGlzLl9yZW5kZXJlZFJvd1N0b3BJbmRleD1fLnN0b3A7dmFyIGI9Yyh7ZGlyZWN0aW9uOlwiaG9yaXpvbnRhbFwiLGNlbGxDb3VudDppLG92ZXJzY2FuQ2VsbHNDb3VudDpzLHNjcm9sbERpcmVjdGlvbjpwLHN0YXJ0SW5kZXg6XCJudW1iZXJcIj09dHlwZW9mIEUuc3RhcnQ/RS5zdGFydDowLHN0b3BJbmRleDpcIm51bWJlclwiPT10eXBlb2YgRS5zdG9wP0Uuc3RvcDotMX0pLFQ9Yyh7ZGlyZWN0aW9uOlwidmVydGljYWxcIixjZWxsQ291bnQ6dSxvdmVyc2NhbkNlbGxzQ291bnQ6bCxzY3JvbGxEaXJlY3Rpb246bSxzdGFydEluZGV4OlwibnVtYmVyXCI9PXR5cGVvZiBfLnN0YXJ0P18uc3RhcnQ6MCxzdG9wSW5kZXg6XCJudW1iZXJcIj09dHlwZW9mIF8uc3RvcD9fLnN0b3A6LTF9KSxDPWIub3ZlcnNjYW5TdGFydEluZGV4LEE9Yi5vdmVyc2NhblN0b3BJbmRleCxSPVQub3ZlcnNjYW5TdGFydEluZGV4LGs9VC5vdmVyc2NhblN0b3BJbmRleDtpZihvKXtpZighby5oYXNGaXhlZEhlaWdodCgpKWZvcih2YXIgTz1SO088PWs7TysrKWlmKCFvLmhhcyhPLDApKXtDPTAsQT1pLTE7YnJlYWt9aWYoIW8uaGFzRml4ZWRXaWR0aCgpKWZvcih2YXIgTj1DO048PUE7TisrKWlmKCFvLmhhcygwLE4pKXtSPTAsaz11LTE7YnJlYWt9fXRoaXMuX2NoaWxkcmVuVG9EaXNwbGF5PXIoe2NlbGxDYWNoZTp0aGlzLl9jZWxsQ2FjaGUsY2VsbFJlbmRlcmVyOm4sY29sdW1uU2l6ZUFuZFBvc2l0aW9uTWFuYWdlcjpoLmNvbHVtblNpemVBbmRQb3NpdGlvbk1hbmFnZXIsY29sdW1uU3RhcnRJbmRleDpDLGNvbHVtblN0b3BJbmRleDpBLGRlZmVycmVkTWVhc3VyZW1lbnRDYWNoZTpvLGhvcml6b250YWxPZmZzZXRBZGp1c3RtZW50OkksaXNTY3JvbGxpbmc6eSxpc1Njcm9sbGluZ09wdE91dDpmLHBhcmVudDp0aGlzLHJvd1NpemVBbmRQb3NpdGlvbk1hbmFnZXI6aC5yb3dTaXplQW5kUG9zaXRpb25NYW5hZ2VyLHJvd1N0YXJ0SW5kZXg6Uixyb3dTdG9wSW5kZXg6ayxzY3JvbGxMZWZ0Omcsc2Nyb2xsVG9wOnYsc3R5bGVDYWNoZTp0aGlzLl9zdHlsZUNhY2hlLHZlcnRpY2FsT2Zmc2V0QWRqdXN0bWVudDpTLHZpc2libGVDb2x1bW5JbmRpY2VzOkUsdmlzaWJsZVJvd0luZGljZXM6X30pLHRoaXMuX2NvbHVtblN0YXJ0SW5kZXg9Qyx0aGlzLl9jb2x1bW5TdG9wSW5kZXg9QSx0aGlzLl9yb3dTdGFydEluZGV4PVIsdGhpcy5fcm93U3RvcEluZGV4PWt9fX0se2tleTpcIl9kZWJvdW5jZVNjcm9sbEVuZGVkXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLnNjcm9sbGluZ1Jlc2V0VGltZUludGVydmFsO3RoaXMuX2Rpc2FibGVQb2ludGVyRXZlbnRzVGltZW91dElkJiZQTih0aGlzLl9kaXNhYmxlUG9pbnRlckV2ZW50c1RpbWVvdXRJZCksdGhpcy5fZGlzYWJsZVBvaW50ZXJFdmVudHNUaW1lb3V0SWQ9TU4odGhpcy5fZGVib3VuY2VTY3JvbGxFbmRlZENhbGxiYWNrLGUpfX0se2tleTpcIl9oYW5kbGVJbnZhbGlkYXRlZEdyaWRTaXplXCIsdmFsdWU6ZnVuY3Rpb24oKXtpZihcIm51bWJlclwiPT10eXBlb2YgdGhpcy5fZGVmZXJyZWRJbnZhbGlkYXRlQ29sdW1uSW5kZXgmJlwibnVtYmVyXCI9PXR5cGVvZiB0aGlzLl9kZWZlcnJlZEludmFsaWRhdGVSb3dJbmRleCl7dmFyIGU9dGhpcy5fZGVmZXJyZWRJbnZhbGlkYXRlQ29sdW1uSW5kZXgsdD10aGlzLl9kZWZlcnJlZEludmFsaWRhdGVSb3dJbmRleDt0aGlzLl9kZWZlcnJlZEludmFsaWRhdGVDb2x1bW5JbmRleD1udWxsLHRoaXMuX2RlZmVycmVkSW52YWxpZGF0ZVJvd0luZGV4PW51bGwsdGhpcy5yZWNvbXB1dGVHcmlkU2l6ZSh7Y29sdW1uSW5kZXg6ZSxyb3dJbmRleDp0fSl9fX0se2tleTpcIl9pbnZva2VPblNjcm9sbE1lbW9pemVyXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPWUuc2Nyb2xsTGVmdCxyPWUuc2Nyb2xsVG9wLGk9ZS50b3RhbENvbHVtbnNXaWR0aCxvPWUudG90YWxSb3dzSGVpZ2h0O3RoaXMuX29uU2Nyb2xsTWVtb2l6ZXIoe2NhbGxiYWNrOmZ1bmN0aW9uKGUpe3ZhciBuPWUuc2Nyb2xsTGVmdCxyPWUuc2Nyb2xsVG9wLGE9dC5wcm9wcyxzPWEuaGVpZ2h0OygwLGEub25TY3JvbGwpKHtjbGllbnRIZWlnaHQ6cyxjbGllbnRXaWR0aDphLndpZHRoLHNjcm9sbEhlaWdodDpvLHNjcm9sbExlZnQ6bixzY3JvbGxUb3A6cixzY3JvbGxXaWR0aDppfSl9LGluZGljZXM6e3Njcm9sbExlZnQ6bixzY3JvbGxUb3A6cn19KX19LHtrZXk6XCJfaXNTY3JvbGxpbmdcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLnByb3BzLHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRoaXMuc3RhdGU7cmV0dXJuIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsXCJpc1Njcm9sbGluZ1wiKT9Cb29sZWFuKGUuaXNTY3JvbGxpbmcpOkJvb2xlYW4odC5pc1Njcm9sbGluZyl9fSx7a2V5OlwiX21heWJlQ2FsbE9uU2Nyb2xsYmFyUHJlc2VuY2VDaGFuZ2VcIix2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMuX3Njcm9sbGJhclByZXNlbmNlQ2hhbmdlZCl7dmFyIGU9dGhpcy5wcm9wcy5vblNjcm9sbGJhclByZXNlbmNlQ2hhbmdlO3RoaXMuX3Njcm9sbGJhclByZXNlbmNlQ2hhbmdlZD0hMSxlKHtob3Jpem9udGFsOnRoaXMuX2hvcml6b250YWxTY3JvbGxCYXJTaXplPjAsc2l6ZTp0aGlzLnN0YXRlLmluc3RhbmNlUHJvcHMuc2Nyb2xsYmFyU2l6ZSx2ZXJ0aWNhbDp0aGlzLl92ZXJ0aWNhbFNjcm9sbEJhclNpemU+MH0pfX19LHtrZXk6XCJzY3JvbGxUb1Bvc2l0aW9uXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIG49ZS5zY3JvbGxMZWZ0LHI9ZS5zY3JvbGxUb3AsaT10Ll9nZXRTY3JvbGxUb1Bvc2l0aW9uU3RhdGVVcGRhdGUoe3ByZXZTdGF0ZTp0aGlzLnN0YXRlLHNjcm9sbExlZnQ6bixzY3JvbGxUb3A6cn0pO2kmJihpLm5lZWRUb1Jlc2V0U3R5bGVDYWNoZT0hMSx0aGlzLnNldFN0YXRlKGkpKX19LHtrZXk6XCJfZ2V0Q2FsY3VsYXRlZFNjcm9sbExlZnRcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLnByb3BzLG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRoaXMuc3RhdGU7cmV0dXJuIHQuX2dldENhbGN1bGF0ZWRTY3JvbGxMZWZ0KGUsbil9fSx7a2V5OlwiX3VwZGF0ZVNjcm9sbExlZnRGb3JTY3JvbGxUb0NvbHVtblwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMucHJvcHMsbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhpcy5zdGF0ZSxyPXQuX2dldFNjcm9sbExlZnRGb3JTY3JvbGxUb0NvbHVtblN0YXRlVXBkYXRlKGUsbik7ciYmKHIubmVlZFRvUmVzZXRTdHlsZUNhY2hlPSExLHRoaXMuc2V0U3RhdGUocikpfX0se2tleTpcIl9nZXRDYWxjdWxhdGVkU2Nyb2xsVG9wXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5wcm9wcyxuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLnN0YXRlO3JldHVybiB0Ll9nZXRDYWxjdWxhdGVkU2Nyb2xsVG9wKGUsbil9fSx7a2V5OlwiX3Jlc2V0U3R5bGVDYWNoZVwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fc3R5bGVDYWNoZSx0PXRoaXMuX2NlbGxDYWNoZSxuPXRoaXMucHJvcHMuaXNTY3JvbGxpbmdPcHRPdXQ7dGhpcy5fY2VsbENhY2hlPXt9LHRoaXMuX3N0eWxlQ2FjaGU9e307Zm9yKHZhciByPXRoaXMuX3Jvd1N0YXJ0SW5kZXg7cjw9dGhpcy5fcm93U3RvcEluZGV4O3IrKylmb3IodmFyIGk9dGhpcy5fY29sdW1uU3RhcnRJbmRleDtpPD10aGlzLl9jb2x1bW5TdG9wSW5kZXg7aSsrKXt2YXIgbz1cIlwiLmNvbmNhdChyLFwiLVwiKS5jb25jYXQoaSk7dGhpcy5fc3R5bGVDYWNoZVtvXT1lW29dLG4mJih0aGlzLl9jZWxsQ2FjaGVbb109dFtvXSl9fX0se2tleTpcIl91cGRhdGVTY3JvbGxUb3BGb3JTY3JvbGxUb1Jvd1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMucHJvcHMsbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhpcy5zdGF0ZSxyPXQuX2dldFNjcm9sbFRvcEZvclNjcm9sbFRvUm93U3RhdGVVcGRhdGUoZSxuKTtyJiYoci5uZWVkVG9SZXNldFN0eWxlQ2FjaGU9ITEsdGhpcy5zZXRTdGF0ZShyKSl9fV0sW3trZXk6XCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcIix2YWx1ZTpmdW5jdGlvbihlLG4pe3ZhciByPXt9OzA9PT1lLmNvbHVtbkNvdW50JiYwIT09bi5zY3JvbGxMZWZ0fHwwPT09ZS5yb3dDb3VudCYmMCE9PW4uc2Nyb2xsVG9wPyhyLnNjcm9sbExlZnQ9MCxyLnNjcm9sbFRvcD0wKTooZS5zY3JvbGxMZWZ0IT09bi5zY3JvbGxMZWZ0JiZlLnNjcm9sbFRvQ29sdW1uPDB8fGUuc2Nyb2xsVG9wIT09bi5zY3JvbGxUb3AmJmUuc2Nyb2xsVG9Sb3c8MCkmJk9iamVjdC5hc3NpZ24ocix0Ll9nZXRTY3JvbGxUb1Bvc2l0aW9uU3RhdGVVcGRhdGUoe3ByZXZTdGF0ZTpuLHNjcm9sbExlZnQ6ZS5zY3JvbGxMZWZ0LHNjcm9sbFRvcDplLnNjcm9sbFRvcH0pKTt2YXIgaSxvLGE9bi5pbnN0YW5jZVByb3BzO3JldHVybiByLm5lZWRUb1Jlc2V0U3R5bGVDYWNoZT0hMSxlLmNvbHVtbldpZHRoPT09YS5wcmV2Q29sdW1uV2lkdGgmJmUucm93SGVpZ2h0PT09YS5wcmV2Um93SGVpZ2h0fHwoci5uZWVkVG9SZXNldFN0eWxlQ2FjaGU9ITApLGEuY29sdW1uU2l6ZUFuZFBvc2l0aW9uTWFuYWdlci5jb25maWd1cmUoe2NlbGxDb3VudDplLmNvbHVtbkNvdW50LGVzdGltYXRlZENlbGxTaXplOnQuX2dldEVzdGltYXRlZENvbHVtblNpemUoZSksY2VsbFNpemVHZXR0ZXI6dC5fd3JhcFNpemVHZXR0ZXIoZS5jb2x1bW5XaWR0aCl9KSxhLnJvd1NpemVBbmRQb3NpdGlvbk1hbmFnZXIuY29uZmlndXJlKHtjZWxsQ291bnQ6ZS5yb3dDb3VudCxlc3RpbWF0ZWRDZWxsU2l6ZTp0Ll9nZXRFc3RpbWF0ZWRSb3dTaXplKGUpLGNlbGxTaXplR2V0dGVyOnQuX3dyYXBTaXplR2V0dGVyKGUucm93SGVpZ2h0KX0pLDAhPT1hLnByZXZDb2x1bW5Db3VudCYmMCE9PWEucHJldlJvd0NvdW50fHwoYS5wcmV2Q29sdW1uQ291bnQ9MCxhLnByZXZSb3dDb3VudD0wKSxlLmF1dG9IZWlnaHQmJiExPT09ZS5pc1Njcm9sbGluZyYmITA9PT1hLnByZXZJc1Njcm9sbGluZyYmT2JqZWN0LmFzc2lnbihyLHtpc1Njcm9sbGluZzohMX0pLGdOKHtjZWxsQ291bnQ6YS5wcmV2Q29sdW1uQ291bnQsY2VsbFNpemU6XCJudW1iZXJcIj09dHlwZW9mIGEucHJldkNvbHVtbldpZHRoP2EucHJldkNvbHVtbldpZHRoOm51bGwsY29tcHV0ZU1ldGFkYXRhQ2FsbGJhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gYS5jb2x1bW5TaXplQW5kUG9zaXRpb25NYW5hZ2VyLnJlc2V0Q2VsbCgwKX0sY29tcHV0ZU1ldGFkYXRhQ2FsbGJhY2tQcm9wczplLG5leHRDZWxsc0NvdW50OmUuY29sdW1uQ291bnQsbmV4dENlbGxTaXplOlwibnVtYmVyXCI9PXR5cGVvZiBlLmNvbHVtbldpZHRoP2UuY29sdW1uV2lkdGg6bnVsbCxuZXh0U2Nyb2xsVG9JbmRleDplLnNjcm9sbFRvQ29sdW1uLHNjcm9sbFRvSW5kZXg6YS5wcmV2U2Nyb2xsVG9Db2x1bW4sdXBkYXRlU2Nyb2xsT2Zmc2V0Rm9yU2Nyb2xsVG9JbmRleDpmdW5jdGlvbigpe2k9dC5fZ2V0U2Nyb2xsTGVmdEZvclNjcm9sbFRvQ29sdW1uU3RhdGVVcGRhdGUoZSxuKX19KSxnTih7Y2VsbENvdW50OmEucHJldlJvd0NvdW50LGNlbGxTaXplOlwibnVtYmVyXCI9PXR5cGVvZiBhLnByZXZSb3dIZWlnaHQ/YS5wcmV2Um93SGVpZ2h0Om51bGwsY29tcHV0ZU1ldGFkYXRhQ2FsbGJhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gYS5yb3dTaXplQW5kUG9zaXRpb25NYW5hZ2VyLnJlc2V0Q2VsbCgwKX0sY29tcHV0ZU1ldGFkYXRhQ2FsbGJhY2tQcm9wczplLG5leHRDZWxsc0NvdW50OmUucm93Q291bnQsbmV4dENlbGxTaXplOlwibnVtYmVyXCI9PXR5cGVvZiBlLnJvd0hlaWdodD9lLnJvd0hlaWdodDpudWxsLG5leHRTY3JvbGxUb0luZGV4OmUuc2Nyb2xsVG9Sb3csc2Nyb2xsVG9JbmRleDphLnByZXZTY3JvbGxUb1Jvdyx1cGRhdGVTY3JvbGxPZmZzZXRGb3JTY3JvbGxUb0luZGV4OmZ1bmN0aW9uKCl7bz10Ll9nZXRTY3JvbGxUb3BGb3JTY3JvbGxUb1Jvd1N0YXRlVXBkYXRlKGUsbil9fSksYS5wcmV2Q29sdW1uQ291bnQ9ZS5jb2x1bW5Db3VudCxhLnByZXZDb2x1bW5XaWR0aD1lLmNvbHVtbldpZHRoLGEucHJldklzU2Nyb2xsaW5nPSEwPT09ZS5pc1Njcm9sbGluZyxhLnByZXZSb3dDb3VudD1lLnJvd0NvdW50LGEucHJldlJvd0hlaWdodD1lLnJvd0hlaWdodCxhLnByZXZTY3JvbGxUb0NvbHVtbj1lLnNjcm9sbFRvQ29sdW1uLGEucHJldlNjcm9sbFRvUm93PWUuc2Nyb2xsVG9Sb3csYS5zY3JvbGxiYXJTaXplPWUuZ2V0U2Nyb2xsYmFyU2l6ZSgpLHZvaWQgMD09PWEuc2Nyb2xsYmFyU2l6ZT8oYS5zY3JvbGxiYXJTaXplTWVhc3VyZWQ9ITEsYS5zY3JvbGxiYXJTaXplPTApOmEuc2Nyb2xsYmFyU2l6ZU1lYXN1cmVkPSEwLHIuaW5zdGFuY2VQcm9wcz1hLFVOKHt9LHIse30saSx7fSxvKX19LHtrZXk6XCJfZ2V0RXN0aW1hdGVkQ29sdW1uU2l6ZVwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlLmNvbHVtbldpZHRoP2UuY29sdW1uV2lkdGg6ZS5lc3RpbWF0ZWRDb2x1bW5TaXplfX0se2tleTpcIl9nZXRFc3RpbWF0ZWRSb3dTaXplXCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGUucm93SGVpZ2h0P2Uucm93SGVpZ2h0OmUuZXN0aW1hdGVkUm93U2l6ZX19LHtrZXk6XCJfZ2V0U2Nyb2xsVG9Qb3NpdGlvblN0YXRlVXBkYXRlXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wcmV2U3RhdGUsbj1lLnNjcm9sbExlZnQscj1lLnNjcm9sbFRvcCxpPXtzY3JvbGxQb3NpdGlvbkNoYW5nZVJlYXNvbjp4Tn07cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIG4mJm4+PTAmJihpLnNjcm9sbERpcmVjdGlvbkhvcml6b250YWw9bj50LnNjcm9sbExlZnQ/MTotMSxpLnNjcm9sbExlZnQ9biksXCJudW1iZXJcIj09dHlwZW9mIHImJnI+PTAmJihpLnNjcm9sbERpcmVjdGlvblZlcnRpY2FsPXI+dC5zY3JvbGxUb3A/MTotMSxpLnNjcm9sbFRvcD1yKSxcIm51bWJlclwiPT10eXBlb2YgbiYmbj49MCYmbiE9PXQuc2Nyb2xsTGVmdHx8XCJudW1iZXJcIj09dHlwZW9mIHImJnI+PTAmJnIhPT10LnNjcm9sbFRvcD9pOnt9fX0se2tleTpcIl93cmFwU2l6ZUdldHRlclwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTpmdW5jdGlvbigpe3JldHVybiBlfX19LHtrZXk6XCJfZ2V0Q2FsY3VsYXRlZFNjcm9sbExlZnRcIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPWUuY29sdW1uQ291bnQscj1lLmhlaWdodCxpPWUuc2Nyb2xsVG9BbGlnbm1lbnQsbz1lLnNjcm9sbFRvQ29sdW1uLGE9ZS53aWR0aCxzPXQuc2Nyb2xsTGVmdCxjPXQuaW5zdGFuY2VQcm9wcztpZihuPjApe3ZhciBsPW4tMSx1PW88MD9sOk1hdGgubWluKGwsbyksZD1jLnJvd1NpemVBbmRQb3NpdGlvbk1hbmFnZXIuZ2V0VG90YWxTaXplKCksZj1jLnNjcm9sbGJhclNpemVNZWFzdXJlZCYmZD5yP2Muc2Nyb2xsYmFyU2l6ZTowO3JldHVybiBjLmNvbHVtblNpemVBbmRQb3NpdGlvbk1hbmFnZXIuZ2V0VXBkYXRlZE9mZnNldEZvckluZGV4KHthbGlnbjppLGNvbnRhaW5lclNpemU6YS1mLGN1cnJlbnRPZmZzZXQ6cyx0YXJnZXRJbmRleDp1fSl9cmV0dXJuIDB9fSx7a2V5OlwiX2dldFNjcm9sbExlZnRGb3JTY3JvbGxUb0NvbHVtblN0YXRlVXBkYXRlXCIsdmFsdWU6ZnVuY3Rpb24oZSxuKXt2YXIgcj1uLnNjcm9sbExlZnQsaT10Ll9nZXRDYWxjdWxhdGVkU2Nyb2xsTGVmdChlLG4pO3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBpJiZpPj0wJiZyIT09aT90Ll9nZXRTY3JvbGxUb1Bvc2l0aW9uU3RhdGVVcGRhdGUoe3ByZXZTdGF0ZTpuLHNjcm9sbExlZnQ6aSxzY3JvbGxUb3A6LTF9KTp7fX19LHtrZXk6XCJfZ2V0Q2FsY3VsYXRlZFNjcm9sbFRvcFwiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5oZWlnaHQscj1lLnJvd0NvdW50LGk9ZS5zY3JvbGxUb0FsaWdubWVudCxvPWUuc2Nyb2xsVG9Sb3csYT1lLndpZHRoLHM9dC5zY3JvbGxUb3AsYz10Lmluc3RhbmNlUHJvcHM7aWYocj4wKXt2YXIgbD1yLTEsdT1vPDA/bDpNYXRoLm1pbihsLG8pLGQ9Yy5jb2x1bW5TaXplQW5kUG9zaXRpb25NYW5hZ2VyLmdldFRvdGFsU2l6ZSgpLGY9Yy5zY3JvbGxiYXJTaXplTWVhc3VyZWQmJmQ+YT9jLnNjcm9sbGJhclNpemU6MDtyZXR1cm4gYy5yb3dTaXplQW5kUG9zaXRpb25NYW5hZ2VyLmdldFVwZGF0ZWRPZmZzZXRGb3JJbmRleCh7YWxpZ246aSxjb250YWluZXJTaXplOm4tZixjdXJyZW50T2Zmc2V0OnMsdGFyZ2V0SW5kZXg6dX0pfXJldHVybiAwfX0se2tleTpcIl9nZXRTY3JvbGxUb3BGb3JTY3JvbGxUb1Jvd1N0YXRlVXBkYXRlXCIsdmFsdWU6ZnVuY3Rpb24oZSxuKXt2YXIgcj1uLnNjcm9sbFRvcCxpPXQuX2dldENhbGN1bGF0ZWRTY3JvbGxUb3AoZSxuKTtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgaSYmaT49MCYmciE9PWk/dC5fZ2V0U2Nyb2xsVG9Qb3NpdGlvblN0YXRlVXBkYXRlKHtwcmV2U3RhdGU6bixzY3JvbGxMZWZ0Oi0xLHNjcm9sbFRvcDppfSk6e319fV0pLHR9KGQuUHVyZUNvbXBvbmVudCksZE4oUk4sXCJwcm9wVHlwZXNcIixudWxsKSxrTik7ZE4oRk4sXCJkZWZhdWx0UHJvcHNcIix7XCJhcmlhLWxhYmVsXCI6XCJncmlkXCIsXCJhcmlhLXJlYWRvbmx5XCI6ITAsYXV0b0NvbnRhaW5lcldpZHRoOiExLGF1dG9IZWlnaHQ6ITEsYXV0b1dpZHRoOiExLGNlbGxSYW5nZVJlbmRlcmVyOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmNlbGxDYWNoZSxuPWUuY2VsbFJlbmRlcmVyLHI9ZS5jb2x1bW5TaXplQW5kUG9zaXRpb25NYW5hZ2VyLGk9ZS5jb2x1bW5TdGFydEluZGV4LG89ZS5jb2x1bW5TdG9wSW5kZXgsYT1lLmRlZmVycmVkTWVhc3VyZW1lbnRDYWNoZSxzPWUuaG9yaXpvbnRhbE9mZnNldEFkanVzdG1lbnQsYz1lLmlzU2Nyb2xsaW5nLGw9ZS5pc1Njcm9sbGluZ09wdE91dCx1PWUucGFyZW50LGQ9ZS5yb3dTaXplQW5kUG9zaXRpb25NYW5hZ2VyLGY9ZS5yb3dTdGFydEluZGV4LHA9ZS5yb3dTdG9wSW5kZXgsbT1lLnN0eWxlQ2FjaGUsaD1lLnZlcnRpY2FsT2Zmc2V0QWRqdXN0bWVudCx2PWUudmlzaWJsZUNvbHVtbkluZGljZXMsZz1lLnZpc2libGVSb3dJbmRpY2VzLHk9W10sRT1yLmFyZU9mZnNldHNBZGp1c3RlZCgpfHxkLmFyZU9mZnNldHNBZGp1c3RlZCgpLF89IWMmJiFFLEk9ZjtJPD1wO0krKylmb3IodmFyIFM9ZC5nZXRTaXplQW5kUG9zaXRpb25PZkNlbGwoSSksYj1pO2I8PW87YisrKXt2YXIgVD1yLmdldFNpemVBbmRQb3NpdGlvbk9mQ2VsbChiKSxDPWI+PXYuc3RhcnQmJmI8PXYuc3RvcCYmST49Zy5zdGFydCYmSTw9Zy5zdG9wLEE9XCJcIi5jb25jYXQoSSxcIi1cIikuY29uY2F0KGIpLFI9dm9pZCAwO18mJm1bQV0/Uj1tW0FdOmEmJiFhLmhhcyhJLGIpP1I9e2hlaWdodDpcImF1dG9cIixsZWZ0OjAscG9zaXRpb246XCJhYnNvbHV0ZVwiLHRvcDowLHdpZHRoOlwiYXV0b1wifTooUj17aGVpZ2h0OlMuc2l6ZSxsZWZ0OlQub2Zmc2V0K3MscG9zaXRpb246XCJhYnNvbHV0ZVwiLHRvcDpTLm9mZnNldCtoLHdpZHRoOlQuc2l6ZX0sbVtBXT1SKTt2YXIgaz17Y29sdW1uSW5kZXg6Yixpc1Njcm9sbGluZzpjLGlzVmlzaWJsZTpDLGtleTpBLHBhcmVudDp1LHJvd0luZGV4Okksc3R5bGU6Un0sTz12b2lkIDA7IWwmJiFjfHxzfHxoP089bihrKToodFtBXXx8KHRbQV09bihrKSksTz10W0FdKSxudWxsIT1PJiYhMSE9PU8mJnkucHVzaChPKX1yZXR1cm4geX0sY29udGFpbmVyUm9sZTpcInJvd2dyb3VwXCIsY29udGFpbmVyU3R5bGU6e30sZXN0aW1hdGVkQ29sdW1uU2l6ZToxMDAsZXN0aW1hdGVkUm93U2l6ZTozMCxnZXRTY3JvbGxiYXJTaXplOkFOLG5vQ29udGVudFJlbmRlcmVyOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LG9uU2Nyb2xsOmZ1bmN0aW9uKCl7fSxvblNjcm9sbGJhclByZXNlbmNlQ2hhbmdlOmZ1bmN0aW9uKCl7fSxvblNlY3Rpb25SZW5kZXJlZDpmdW5jdGlvbigpe30sb3ZlcnNjYW5Db2x1bW5Db3VudDowLG92ZXJzY2FuSW5kaWNlc0dldHRlcjpmdW5jdGlvbihlKXt2YXIgdD1lLmNlbGxDb3VudCxuPWUub3ZlcnNjYW5DZWxsc0NvdW50LHI9ZS5zY3JvbGxEaXJlY3Rpb24saT1lLnN0YXJ0SW5kZXgsbz1lLnN0b3BJbmRleDtyZXR1cm4gMT09PXI/e292ZXJzY2FuU3RhcnRJbmRleDpNYXRoLm1heCgwLGkpLG92ZXJzY2FuU3RvcEluZGV4Ok1hdGgubWluKHQtMSxvK24pfTp7b3ZlcnNjYW5TdGFydEluZGV4Ok1hdGgubWF4KDAsaS1uKSxvdmVyc2NhblN0b3BJbmRleDpNYXRoLm1pbih0LTEsbyl9fSxvdmVyc2NhblJvd0NvdW50OjEwLHJvbGU6XCJncmlkXCIsc2Nyb2xsaW5nUmVzZXRUaW1lSW50ZXJ2YWw6MTUwLHNjcm9sbFRvQWxpZ25tZW50OlwiYXV0b1wiLHNjcm9sbFRvQ29sdW1uOi0xLHNjcm9sbFRvUm93Oi0xLHN0eWxlOnt9LHRhYkluZGV4OjAsaXNTY3JvbGxpbmdPcHRPdXQ6ITF9KSxoTihGTik7Y29uc3QgQk49Rk47ZnVuY3Rpb24gVk4oZSl7dmFyIHQ9ZS5jZWxsQ291bnQsbj1lLm92ZXJzY2FuQ2VsbHNDb3VudCxyPWUuc2Nyb2xsRGlyZWN0aW9uLGk9ZS5zdGFydEluZGV4LG89ZS5zdG9wSW5kZXg7cmV0dXJuIG49TWF0aC5tYXgoMSxuKSwxPT09cj97b3ZlcnNjYW5TdGFydEluZGV4Ok1hdGgubWF4KDAsaS0xKSxvdmVyc2NhblN0b3BJbmRleDpNYXRoLm1pbih0LTEsbytuKX06e292ZXJzY2FuU3RhcnRJbmRleDpNYXRoLm1heCgwLGktbiksb3ZlcnNjYW5TdG9wSW5kZXg6TWF0aC5taW4odC0xLG8rMSl9fXZhciBHTixITjtmdW5jdGlvbiBXTihlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59dmFyIGpOLFpOLHpOPShITj1HTj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbjt0Tih0aGlzLHQpO2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoLGk9bmV3IEFycmF5KHIpLG89MDtvPHI7bysrKWlbb109YXJndW1lbnRzW29dO3JldHVybiBkTihhTihuPXNOKHRoaXMsKGU9Y04odCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSkpLFwic3RhdGVcIix7c2Nyb2xsVG9Db2x1bW46MCxzY3JvbGxUb1JvdzowLGluc3RhbmNlUHJvcHM6e3ByZXZTY3JvbGxUb0NvbHVtbjowLHByZXZTY3JvbGxUb1JvdzowfX0pLGROKGFOKG4pLFwiX2NvbHVtblN0YXJ0SW5kZXhcIiwwKSxkTihhTihuKSxcIl9jb2x1bW5TdG9wSW5kZXhcIiwwKSxkTihhTihuKSxcIl9yb3dTdGFydEluZGV4XCIsMCksZE4oYU4obiksXCJfcm93U3RvcEluZGV4XCIsMCksZE4oYU4obiksXCJfb25LZXlEb3duXCIsKGZ1bmN0aW9uKGUpe3ZhciB0PW4ucHJvcHMscj10LmNvbHVtbkNvdW50LGk9dC5kaXNhYmxlZCxvPXQubW9kZSxhPXQucm93Q291bnQ7aWYoIWkpe3ZhciBzPW4uX2dldFNjcm9sbFN0YXRlKCksYz1zLnNjcm9sbFRvQ29sdW1uLGw9cy5zY3JvbGxUb1Jvdyx1PW4uX2dldFNjcm9sbFN0YXRlKCksZD11LnNjcm9sbFRvQ29sdW1uLGY9dS5zY3JvbGxUb1Jvdztzd2l0Y2goZS5rZXkpe2Nhc2VcIkFycm93RG93blwiOmY9XCJjZWxsc1wiPT09bz9NYXRoLm1pbihmKzEsYS0xKTpNYXRoLm1pbihuLl9yb3dTdG9wSW5kZXgrMSxhLTEpO2JyZWFrO2Nhc2VcIkFycm93TGVmdFwiOmQ9XCJjZWxsc1wiPT09bz9NYXRoLm1heChkLTEsMCk6TWF0aC5tYXgobi5fY29sdW1uU3RhcnRJbmRleC0xLDApO2JyZWFrO2Nhc2VcIkFycm93UmlnaHRcIjpkPVwiY2VsbHNcIj09PW8/TWF0aC5taW4oZCsxLHItMSk6TWF0aC5taW4obi5fY29sdW1uU3RvcEluZGV4KzEsci0xKTticmVhaztjYXNlXCJBcnJvd1VwXCI6Zj1cImNlbGxzXCI9PT1vP01hdGgubWF4KGYtMSwwKTpNYXRoLm1heChuLl9yb3dTdGFydEluZGV4LTEsMCl9ZD09PWMmJmY9PT1sfHwoZS5wcmV2ZW50RGVmYXVsdCgpLG4uX3VwZGF0ZVNjcm9sbFN0YXRlKHtzY3JvbGxUb0NvbHVtbjpkLHNjcm9sbFRvUm93OmZ9KSl9fSkpLGROKGFOKG4pLFwiX29uU2VjdGlvblJlbmRlcmVkXCIsKGZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sdW1uU3RhcnRJbmRleCxyPWUuY29sdW1uU3RvcEluZGV4LGk9ZS5yb3dTdGFydEluZGV4LG89ZS5yb3dTdG9wSW5kZXg7bi5fY29sdW1uU3RhcnRJbmRleD10LG4uX2NvbHVtblN0b3BJbmRleD1yLG4uX3Jvd1N0YXJ0SW5kZXg9aSxuLl9yb3dTdG9wSW5kZXg9b30pKSxufXJldHVybiB1Tih0LGUpLG9OKHQsW3trZXk6XCJzZXRTY3JvbGxJbmRleGVzXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zY3JvbGxUb0NvbHVtbixuPWUuc2Nyb2xsVG9Sb3c7dGhpcy5zZXRTdGF0ZSh7c2Nyb2xsVG9Sb3c6bixzY3JvbGxUb0NvbHVtbjp0fSl9fSx7a2V5OlwicmVuZGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5jbGFzc05hbWUsbj1lLmNoaWxkcmVuLHI9dGhpcy5fZ2V0U2Nyb2xsU3RhdGUoKSxpPXIuc2Nyb2xsVG9Db2x1bW4sbz1yLnNjcm9sbFRvUm93O3JldHVybiBkLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOnQsb25LZXlEb3duOnRoaXMuX29uS2V5RG93bn0sbih7b25TZWN0aW9uUmVuZGVyZWQ6dGhpcy5fb25TZWN0aW9uUmVuZGVyZWQsc2Nyb2xsVG9Db2x1bW46aSxzY3JvbGxUb1JvdzpvfSkpfX0se2tleTpcIl9nZXRTY3JvbGxTdGF0ZVwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvcHMuaXNDb250cm9sbGVkP3RoaXMucHJvcHM6dGhpcy5zdGF0ZX19LHtrZXk6XCJfdXBkYXRlU2Nyb2xsU3RhdGVcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnNjcm9sbFRvQ29sdW1uLG49ZS5zY3JvbGxUb1JvdyxyPXRoaXMucHJvcHMsaT1yLmlzQ29udHJvbGxlZCxvPXIub25TY3JvbGxUb0NoYW5nZTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBvJiZvKHtzY3JvbGxUb0NvbHVtbjp0LHNjcm9sbFRvUm93Om59KSxpfHx0aGlzLnNldFN0YXRlKHtzY3JvbGxUb0NvbHVtbjp0LHNjcm9sbFRvUm93Om59KX19XSxbe2tleTpcImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc1wiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuaXNDb250cm9sbGVkP3t9OmUuc2Nyb2xsVG9Db2x1bW4hPT10Lmluc3RhbmNlUHJvcHMucHJldlNjcm9sbFRvQ29sdW1ufHxlLnNjcm9sbFRvUm93IT09dC5pbnN0YW5jZVByb3BzLnByZXZTY3JvbGxUb1Jvdz9mdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9XTihuLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtkTihlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6V04obikuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfSh7fSx0LHtzY3JvbGxUb0NvbHVtbjplLnNjcm9sbFRvQ29sdW1uLHNjcm9sbFRvUm93OmUuc2Nyb2xsVG9Sb3csaW5zdGFuY2VQcm9wczp7cHJldlNjcm9sbFRvQ29sdW1uOmUuc2Nyb2xsVG9Db2x1bW4scHJldlNjcm9sbFRvUm93OmUuc2Nyb2xsVG9Sb3d9fSk6e319fV0pLHR9KGQuUHVyZUNvbXBvbmVudCksZE4oR04sXCJwcm9wVHlwZXNcIixudWxsKSxITik7ZnVuY3Rpb24gS04oZSx0KXt2YXIgcixpPXZvaWQgMCE9PShyPXZvaWQgMCE9PXQ/dDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOm4uZykuZG9jdW1lbnQmJnIuZG9jdW1lbnQuYXR0YWNoRXZlbnQ7aWYoIWkpe3ZhciBvPWZ1bmN0aW9uKCl7dmFyIGU9ci5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHIubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxyLndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZXx8ZnVuY3Rpb24oZSl7cmV0dXJuIHIuc2V0VGltZW91dChlLDIwKX07cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpfX0oKSxhPWZ1bmN0aW9uKCl7dmFyIGU9ci5jYW5jZWxBbmltYXRpb25GcmFtZXx8ci5tb3pDYW5jZWxBbmltYXRpb25GcmFtZXx8ci53ZWJraXRDYW5jZWxBbmltYXRpb25GcmFtZXx8ci5jbGVhclRpbWVvdXQ7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpfX0oKSxzPWZ1bmN0aW9uKGUpe3ZhciB0PWUuX19yZXNpemVUcmlnZ2Vyc19fLG49dC5maXJzdEVsZW1lbnRDaGlsZCxyPXQubGFzdEVsZW1lbnRDaGlsZCxpPW4uZmlyc3RFbGVtZW50Q2hpbGQ7ci5zY3JvbGxMZWZ0PXIuc2Nyb2xsV2lkdGgsci5zY3JvbGxUb3A9ci5zY3JvbGxIZWlnaHQsaS5zdHlsZS53aWR0aD1uLm9mZnNldFdpZHRoKzErXCJweFwiLGkuc3R5bGUuaGVpZ2h0PW4ub2Zmc2V0SGVpZ2h0KzErXCJweFwiLG4uc2Nyb2xsTGVmdD1uLnNjcm9sbFdpZHRoLG4uc2Nyb2xsVG9wPW4uc2Nyb2xsSGVpZ2h0fSxjPWZ1bmN0aW9uKGUpe2lmKCEoZS50YXJnZXQuY2xhc3NOYW1lJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnRhcmdldC5jbGFzc05hbWUuaW5kZXhPZiYmZS50YXJnZXQuY2xhc3NOYW1lLmluZGV4T2YoXCJjb250cmFjdC10cmlnZ2VyXCIpPDAmJmUudGFyZ2V0LmNsYXNzTmFtZS5pbmRleE9mKFwiZXhwYW5kLXRyaWdnZXJcIik8MCkpe3ZhciB0PXRoaXM7cyh0aGlzKSx0aGlzLl9fcmVzaXplUkFGX18mJmEodGhpcy5fX3Jlc2l6ZVJBRl9fKSx0aGlzLl9fcmVzaXplUkFGX189bygoZnVuY3Rpb24oKXsoZnVuY3Rpb24oZSl7cmV0dXJuIGUub2Zmc2V0V2lkdGghPWUuX19yZXNpemVMYXN0X18ud2lkdGh8fGUub2Zmc2V0SGVpZ2h0IT1lLl9fcmVzaXplTGFzdF9fLmhlaWdodH0pKHQpJiYodC5fX3Jlc2l6ZUxhc3RfXy53aWR0aD10Lm9mZnNldFdpZHRoLHQuX19yZXNpemVMYXN0X18uaGVpZ2h0PXQub2Zmc2V0SGVpZ2h0LHQuX19yZXNpemVMaXN0ZW5lcnNfXy5mb3JFYWNoKChmdW5jdGlvbihuKXtuLmNhbGwodCxlKX0pKSl9KSl9fSxsPSExLHU9XCJcIixkPVwiYW5pbWF0aW9uc3RhcnRcIixmPVwiV2Via2l0IE1veiBPIG1zXCIuc3BsaXQoXCIgXCIpLHA9XCJ3ZWJraXRBbmltYXRpb25TdGFydCBhbmltYXRpb25zdGFydCBvQW5pbWF0aW9uU3RhcnQgTVNBbmltYXRpb25TdGFydFwiLnNwbGl0KFwiIFwiKSxtPXIuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImZha2VlbGVtZW50XCIpO2lmKHZvaWQgMCE9PW0uc3R5bGUuYW5pbWF0aW9uTmFtZSYmKGw9ITApLCExPT09bClmb3IodmFyIGg9MDtoPGYubGVuZ3RoO2grKylpZih2b2lkIDAhPT1tLnN0eWxlW2ZbaF0rXCJBbmltYXRpb25OYW1lXCJdKXt1PVwiLVwiK2ZbaF0udG9Mb3dlckNhc2UoKStcIi1cIixkPXBbaF0sbD0hMDticmVha312YXIgdj1cInJlc2l6ZWFuaW1cIixnPVwiQFwiK3UrXCJrZXlmcmFtZXMgXCIrditcIiB7IGZyb20geyBvcGFjaXR5OiAwOyB9IHRvIHsgb3BhY2l0eTogMDsgfSB9IFwiLHk9dStcImFuaW1hdGlvbjogMW1zIFwiK3YrXCI7IFwifXJldHVybnthZGRSZXNpemVMaXN0ZW5lcjpmdW5jdGlvbih0LG4pe2lmKGkpdC5hdHRhY2hFdmVudChcIm9ucmVzaXplXCIsbik7ZWxzZXtpZighdC5fX3Jlc2l6ZVRyaWdnZXJzX18pe3ZhciBvPXQub3duZXJEb2N1bWVudCxhPXIuZ2V0Q29tcHV0ZWRTdHlsZSh0KTthJiZcInN0YXRpY1wiPT1hLnBvc2l0aW9uJiYodC5zdHlsZS5wb3NpdGlvbj1cInJlbGF0aXZlXCIpLGZ1bmN0aW9uKHQpe2lmKCF0LmdldEVsZW1lbnRCeUlkKFwiZGV0ZWN0RWxlbWVudFJlc2l6ZVwiKSl7dmFyIG49KGd8fFwiXCIpK1wiLnJlc2l6ZS10cmlnZ2VycyB7IFwiKyh5fHxcIlwiKSsndmlzaWJpbGl0eTogaGlkZGVuOyBvcGFjaXR5OiAwOyB9IC5yZXNpemUtdHJpZ2dlcnMsIC5yZXNpemUtdHJpZ2dlcnMgPiBkaXYsIC5jb250cmFjdC10cmlnZ2VyOmJlZm9yZSB7IGNvbnRlbnQ6IFwiIFwiOyBkaXNwbGF5OiBibG9jazsgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7IGxlZnQ6IDA7IGhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7IG92ZXJmbG93OiBoaWRkZW47IHotaW5kZXg6IC0xOyB9IC5yZXNpemUtdHJpZ2dlcnMgPiBkaXYgeyBiYWNrZ3JvdW5kOiAjZWVlOyBvdmVyZmxvdzogYXV0bzsgfSAuY29udHJhY3QtdHJpZ2dlcjpiZWZvcmUgeyB3aWR0aDogMjAwJTsgaGVpZ2h0OiAyMDAlOyB9JyxyPXQuaGVhZHx8dC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0saT10LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtpLmlkPVwiZGV0ZWN0RWxlbWVudFJlc2l6ZVwiLGkudHlwZT1cInRleHQvY3NzXCIsbnVsbCE9ZSYmaS5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLGUpLGkuc3R5bGVTaGVldD9pLnN0eWxlU2hlZXQuY3NzVGV4dD1uOmkuYXBwZW5kQ2hpbGQodC5jcmVhdGVUZXh0Tm9kZShuKSksci5hcHBlbmRDaGlsZChpKX19KG8pLHQuX19yZXNpemVMYXN0X189e30sdC5fX3Jlc2l6ZUxpc3RlbmVyc19fPVtdLCh0Ll9fcmVzaXplVHJpZ2dlcnNfXz1vLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLmNsYXNzTmFtZT1cInJlc2l6ZS10cmlnZ2Vyc1wiO3ZhciBsPSc8ZGl2IGNsYXNzPVwiZXhwYW5kLXRyaWdnZXJcIj48ZGl2PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9XCJjb250cmFjdC10cmlnZ2VyXCI+PC9kaXY+JztpZih3aW5kb3cudHJ1c3RlZFR5cGVzKXt2YXIgdT10cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KFwicmVhY3QtdmlydHVhbGl6ZWQtYXV0by1zaXplclwiLHtjcmVhdGVIVE1MOmZ1bmN0aW9uKCl7cmV0dXJuIGx9fSk7dC5fX3Jlc2l6ZVRyaWdnZXJzX18uaW5uZXJIVE1MPXUuY3JlYXRlSFRNTChcIlwiKX1lbHNlIHQuX19yZXNpemVUcmlnZ2Vyc19fLmlubmVySFRNTD1sO3QuYXBwZW5kQ2hpbGQodC5fX3Jlc2l6ZVRyaWdnZXJzX18pLHModCksdC5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsYywhMCksZCYmKHQuX19yZXNpemVUcmlnZ2Vyc19fLl9fYW5pbWF0aW9uTGlzdGVuZXJfXz1mdW5jdGlvbihlKXtlLmFuaW1hdGlvbk5hbWU9PXYmJnModCl9LHQuX19yZXNpemVUcmlnZ2Vyc19fLmFkZEV2ZW50TGlzdGVuZXIoZCx0Ll9fcmVzaXplVHJpZ2dlcnNfXy5fX2FuaW1hdGlvbkxpc3RlbmVyX18pKX10Ll9fcmVzaXplTGlzdGVuZXJzX18ucHVzaChuKX19LHJlbW92ZVJlc2l6ZUxpc3RlbmVyOmZ1bmN0aW9uKGUsdCl7aWYoaSllLmRldGFjaEV2ZW50KFwib25yZXNpemVcIix0KTtlbHNlIGlmKGUuX19yZXNpemVMaXN0ZW5lcnNfXy5zcGxpY2UoZS5fX3Jlc2l6ZUxpc3RlbmVyc19fLmluZGV4T2YodCksMSksIWUuX19yZXNpemVMaXN0ZW5lcnNfXy5sZW5ndGgpe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLGMsITApLGUuX19yZXNpemVUcmlnZ2Vyc19fLl9fYW5pbWF0aW9uTGlzdGVuZXJfXyYmKGUuX19yZXNpemVUcmlnZ2Vyc19fLnJlbW92ZUV2ZW50TGlzdGVuZXIoZCxlLl9fcmVzaXplVHJpZ2dlcnNfXy5fX2FuaW1hdGlvbkxpc3RlbmVyX18pLGUuX19yZXNpemVUcmlnZ2Vyc19fLl9fYW5pbWF0aW9uTGlzdGVuZXJfXz1udWxsKTt0cnl7ZS5fX3Jlc2l6ZVRyaWdnZXJzX189IWUucmVtb3ZlQ2hpbGQoZS5fX3Jlc2l6ZVRyaWdnZXJzX18pfWNhdGNoKGUpe319fX19ZnVuY3Rpb24gWU4oZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIHFOKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP1lOKG4sITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe2ROKGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpZTihuKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9ZE4oek4sXCJkZWZhdWx0UHJvcHNcIix7ZGlzYWJsZWQ6ITEsaXNDb250cm9sbGVkOiExLG1vZGU6XCJlZGdlc1wiLHNjcm9sbFRvQ29sdW1uOjAsc2Nyb2xsVG9Sb3c6MH0pLGhOKHpOKTt2YXIgWE49KFpOPWpOPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuO3ROKHRoaXMsdCk7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkociksbz0wO288cjtvKyspaVtvXT1hcmd1bWVudHNbb107cmV0dXJuIGROKGFOKG49c04odGhpcywoZT1jTih0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSksXCJzdGF0ZVwiLHtoZWlnaHQ6bi5wcm9wcy5kZWZhdWx0SGVpZ2h0fHwwLHdpZHRoOm4ucHJvcHMuZGVmYXVsdFdpZHRofHwwfSksZE4oYU4obiksXCJfcGFyZW50Tm9kZVwiLHZvaWQgMCksZE4oYU4obiksXCJfYXV0b1NpemVyXCIsdm9pZCAwKSxkTihhTihuKSxcIl93aW5kb3dcIix2b2lkIDApLGROKGFOKG4pLFwiX2RldGVjdEVsZW1lbnRSZXNpemVcIix2b2lkIDApLGROKGFOKG4pLFwiX29uUmVzaXplXCIsKGZ1bmN0aW9uKCl7dmFyIGU9bi5wcm9wcyx0PWUuZGlzYWJsZUhlaWdodCxyPWUuZGlzYWJsZVdpZHRoLGk9ZS5vblJlc2l6ZTtpZihuLl9wYXJlbnROb2RlKXt2YXIgbz1uLl9wYXJlbnROb2RlLm9mZnNldEhlaWdodHx8MCxhPW4uX3BhcmVudE5vZGUub2Zmc2V0V2lkdGh8fDAscz0obi5fd2luZG93fHx3aW5kb3cpLmdldENvbXB1dGVkU3R5bGUobi5fcGFyZW50Tm9kZSl8fHt9LGM9cGFyc2VJbnQocy5wYWRkaW5nTGVmdCwxMCl8fDAsbD1wYXJzZUludChzLnBhZGRpbmdSaWdodCwxMCl8fDAsdT1wYXJzZUludChzLnBhZGRpbmdUb3AsMTApfHwwLGQ9cGFyc2VJbnQocy5wYWRkaW5nQm90dG9tLDEwKXx8MCxmPW8tdS1kLHA9YS1jLWw7KCF0JiZuLnN0YXRlLmhlaWdodCE9PWZ8fCFyJiZuLnN0YXRlLndpZHRoIT09cCkmJihuLnNldFN0YXRlKHtoZWlnaHQ6by11LWQsd2lkdGg6YS1jLWx9KSxpKHtoZWlnaHQ6byx3aWR0aDphfSkpfX0pKSxkTihhTihuKSxcIl9zZXRSZWZcIiwoZnVuY3Rpb24oZSl7bi5fYXV0b1NpemVyPWV9KSksbn1yZXR1cm4gdU4odCxlKSxvTih0LFt7a2V5OlwiY29tcG9uZW50RGlkTW91bnRcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMubm9uY2U7dGhpcy5fYXV0b1NpemVyJiZ0aGlzLl9hdXRvU2l6ZXIucGFyZW50Tm9kZSYmdGhpcy5fYXV0b1NpemVyLnBhcmVudE5vZGUub3duZXJEb2N1bWVudCYmdGhpcy5fYXV0b1NpemVyLnBhcmVudE5vZGUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyYmdGhpcy5fYXV0b1NpemVyLnBhcmVudE5vZGUgaW5zdGFuY2VvZiB0aGlzLl9hdXRvU2l6ZXIucGFyZW50Tm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LkhUTUxFbGVtZW50JiYodGhpcy5fcGFyZW50Tm9kZT10aGlzLl9hdXRvU2l6ZXIucGFyZW50Tm9kZSx0aGlzLl93aW5kb3c9dGhpcy5fYXV0b1NpemVyLnBhcmVudE5vZGUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldyx0aGlzLl9kZXRlY3RFbGVtZW50UmVzaXplPUtOKGUsdGhpcy5fd2luZG93KSx0aGlzLl9kZXRlY3RFbGVtZW50UmVzaXplLmFkZFJlc2l6ZUxpc3RlbmVyKHRoaXMuX3BhcmVudE5vZGUsdGhpcy5fb25SZXNpemUpLHRoaXMuX29uUmVzaXplKCkpfX0se2tleTpcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9kZXRlY3RFbGVtZW50UmVzaXplJiZ0aGlzLl9wYXJlbnROb2RlJiZ0aGlzLl9kZXRlY3RFbGVtZW50UmVzaXplLnJlbW92ZVJlc2l6ZUxpc3RlbmVyKHRoaXMuX3BhcmVudE5vZGUsdGhpcy5fb25SZXNpemUpfX0se2tleTpcInJlbmRlclwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuY2hpbGRyZW4sbj1lLmNsYXNzTmFtZSxyPWUuZGlzYWJsZUhlaWdodCxpPWUuZGlzYWJsZVdpZHRoLG89ZS5zdHlsZSxhPXRoaXMuc3RhdGUscz1hLmhlaWdodCxjPWEud2lkdGgsbD17b3ZlcmZsb3c6XCJ2aXNpYmxlXCJ9LHU9e307cmV0dXJuIHJ8fChsLmhlaWdodD0wLHUuaGVpZ2h0PXMpLGl8fChsLndpZHRoPTAsdS53aWR0aD1jKSxkLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOm4scmVmOnRoaXMuX3NldFJlZixzdHlsZTpxTih7fSxsLHt9LG8pfSx0KHUpKX19XSksdH0oZC5Db21wb25lbnQpLGROKGpOLFwicHJvcFR5cGVzXCIsbnVsbCksWk4pO2ROKFhOLFwiZGVmYXVsdFByb3BzXCIse29uUmVzaXplOmZ1bmN0aW9uKCl7fSxkaXNhYmxlSGVpZ2h0OiExLGRpc2FibGVXaWR0aDohMSxzdHlsZTp7fX0pO3ZhciBRTixKTiwkTj0oSk49UU49ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG47dE4odGhpcyx0KTtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShyKSxvPTA7bzxyO28rKylpW29dPWFyZ3VtZW50c1tvXTtyZXR1cm4gZE4oYU4obj1zTih0aGlzLChlPWNOKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpKSxcIl9jaGlsZFwiLHZvaWQgMCksZE4oYU4obiksXCJfbWVhc3VyZVwiLChmdW5jdGlvbigpe3ZhciBlPW4ucHJvcHMsdD1lLmNhY2hlLHI9ZS5jb2x1bW5JbmRleCxpPXZvaWQgMD09PXI/MDpyLG89ZS5wYXJlbnQsYT1lLnJvd0luZGV4LHM9dm9pZCAwPT09YT9uLnByb3BzLmluZGV4fHwwOmEsYz1uLl9nZXRDZWxsTWVhc3VyZW1lbnRzKCksbD1jLmhlaWdodCx1PWMud2lkdGg7bD09PXQuZ2V0SGVpZ2h0KHMsaSkmJnU9PT10LmdldFdpZHRoKHMsaSl8fCh0LnNldChzLGksdSxsKSxvJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBvLnJlY29tcHV0ZUdyaWRTaXplJiZvLnJlY29tcHV0ZUdyaWRTaXplKHtjb2x1bW5JbmRleDppLHJvd0luZGV4OnN9KSl9KSksZE4oYU4obiksXCJfcmVnaXN0ZXJDaGlsZFwiLChmdW5jdGlvbihlKXshZXx8ZSBpbnN0YW5jZW9mIEVsZW1lbnR8fGNvbnNvbGUud2FybihcIkNlbGxNZWFzdXJlciByZWdpc3RlckNoaWxkIGV4cGVjdHMgdG8gYmUgcGFzc2VkIEVsZW1lbnQgb3IgbnVsbFwiKSxuLl9jaGlsZD1lLGUmJm4uX21heWJlTWVhc3VyZUNlbGwoKX0pKSxufXJldHVybiB1Tih0LGUpLG9OKHQsW3trZXk6XCJjb21wb25lbnREaWRNb3VudFwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fbWF5YmVNZWFzdXJlQ2VsbCgpfX0se2tleTpcImNvbXBvbmVudERpZFVwZGF0ZVwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fbWF5YmVNZWFzdXJlQ2VsbCgpfX0se2tleTpcInJlbmRlclwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5jaGlsZHJlbjtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2Uoe21lYXN1cmU6dGhpcy5fbWVhc3VyZSxyZWdpc3RlckNoaWxkOnRoaXMuX3JlZ2lzdGVyQ2hpbGR9KTplfX0se2tleTpcIl9nZXRDZWxsTWVhc3VyZW1lbnRzXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLmNhY2hlLHQ9dGhpcy5fY2hpbGR8fCgwLENtLmZpbmRET01Ob2RlKSh0aGlzKTtpZih0JiZ0Lm93bmVyRG9jdW1lbnQmJnQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyYmdCBpbnN0YW5jZW9mIHQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5IVE1MRWxlbWVudCl7dmFyIG49dC5zdHlsZS53aWR0aCxyPXQuc3R5bGUuaGVpZ2h0O2UuaGFzRml4ZWRXaWR0aCgpfHwodC5zdHlsZS53aWR0aD1cImF1dG9cIiksZS5oYXNGaXhlZEhlaWdodCgpfHwodC5zdHlsZS5oZWlnaHQ9XCJhdXRvXCIpO3ZhciBpPU1hdGguY2VpbCh0Lm9mZnNldEhlaWdodCksbz1NYXRoLmNlaWwodC5vZmZzZXRXaWR0aCk7cmV0dXJuIG4mJih0LnN0eWxlLndpZHRoPW4pLHImJih0LnN0eWxlLmhlaWdodD1yKSx7aGVpZ2h0Omksd2lkdGg6b319cmV0dXJue2hlaWdodDowLHdpZHRoOjB9fX0se2tleTpcIl9tYXliZU1lYXN1cmVDZWxsXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5jYWNoZSxuPWUuY29sdW1uSW5kZXgscj12b2lkIDA9PT1uPzA6bixpPWUucGFyZW50LG89ZS5yb3dJbmRleCxhPXZvaWQgMD09PW8/dGhpcy5wcm9wcy5pbmRleHx8MDpvO2lmKCF0LmhhcyhhLHIpKXt2YXIgcz10aGlzLl9nZXRDZWxsTWVhc3VyZW1lbnRzKCksYz1zLmhlaWdodCxsPXMud2lkdGg7dC5zZXQoYSxyLGwsYyksaSYmXCJmdW5jdGlvblwiPT10eXBlb2YgaS5pbnZhbGlkYXRlQ2VsbFNpemVBZnRlclJlbmRlciYmaS5pbnZhbGlkYXRlQ2VsbFNpemVBZnRlclJlbmRlcih7Y29sdW1uSW5kZXg6cixyb3dJbmRleDphfSl9fX1dKSx0fShkLlB1cmVDb21wb25lbnQpLGROKFFOLFwicHJvcFR5cGVzXCIsbnVsbCksSk4pO2Z1bmN0aW9uIGV3KGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiB0dyhlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9ldyhuLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtkTihlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6ZXcobikuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfWROKCROLFwiX19pbnRlcm5hbENlbGxNZWFzdXJlckZsYWdcIiwhMSk7dmFyIG53PVwicmVxdWVzdGVkXCIscnc9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG47dE4odGhpcyx0KTtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShyKSxvPTA7bzxyO28rKylpW29dPWFyZ3VtZW50c1tvXTtyZXR1cm4gZE4oYU4obj1zTih0aGlzLChlPWNOKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpKSxcInN0YXRlXCIse2lzU2Nyb2xsaW5nOiExLHNjcm9sbExlZnQ6MCxzY3JvbGxUb3A6MH0pLGROKGFOKG4pLFwiX2NhbGN1bGF0ZVNpemVBbmRQb3NpdGlvbkRhdGFPbk5leHRVcGRhdGVcIiwhMSksZE4oYU4obiksXCJfb25TZWN0aW9uUmVuZGVyZWRNZW1vaXplclwiLElOKCkpLGROKGFOKG4pLFwiX29uU2Nyb2xsTWVtb2l6ZXJcIixJTighMSkpLGROKGFOKG4pLFwiX2ludm9rZU9uU2VjdGlvblJlbmRlcmVkSGVscGVyXCIsKGZ1bmN0aW9uKCl7dmFyIGU9bi5wcm9wcyx0PWUuY2VsbExheW91dE1hbmFnZXIscj1lLm9uU2VjdGlvblJlbmRlcmVkO24uX29uU2VjdGlvblJlbmRlcmVkTWVtb2l6ZXIoe2NhbGxiYWNrOnIsaW5kaWNlczp7aW5kaWNlczp0LmdldExhc3RSZW5kZXJlZEluZGljZXMoKX19KX0pKSxkTihhTihuKSxcIl9zZXRTY3JvbGxpbmdDb250YWluZXJSZWZcIiwoZnVuY3Rpb24oZSl7bi5fc2Nyb2xsaW5nQ29udGFpbmVyPWV9KSksZE4oYU4obiksXCJfdXBkYXRlU2Nyb2xsUG9zaXRpb25Gb3JTY3JvbGxUb0NlbGxcIiwoZnVuY3Rpb24oKXt2YXIgZT1uLnByb3BzLHQ9ZS5jZWxsTGF5b3V0TWFuYWdlcixyPWUuaGVpZ2h0LGk9ZS5zY3JvbGxUb0FsaWdubWVudCxvPWUuc2Nyb2xsVG9DZWxsLGE9ZS53aWR0aCxzPW4uc3RhdGUsYz1zLnNjcm9sbExlZnQsbD1zLnNjcm9sbFRvcDtpZihvPj0wKXt2YXIgdT10LmdldFNjcm9sbFBvc2l0aW9uRm9yQ2VsbCh7YWxpZ246aSxjZWxsSW5kZXg6byxoZWlnaHQ6cixzY3JvbGxMZWZ0OmMsc2Nyb2xsVG9wOmwsd2lkdGg6YX0pO3Uuc2Nyb2xsTGVmdD09PWMmJnUuc2Nyb2xsVG9wPT09bHx8bi5fc2V0U2Nyb2xsUG9zaXRpb24odSl9fSkpLGROKGFOKG4pLFwiX29uU2Nyb2xsXCIsKGZ1bmN0aW9uKGUpe2lmKGUudGFyZ2V0PT09bi5fc2Nyb2xsaW5nQ29udGFpbmVyKXtuLl9lbmFibGVQb2ludGVyRXZlbnRzQWZ0ZXJEZWxheSgpO3ZhciB0PW4ucHJvcHMscj10LmNlbGxMYXlvdXRNYW5hZ2VyLGk9dC5oZWlnaHQsbz10LmlzU2Nyb2xsaW5nQ2hhbmdlLGE9dC53aWR0aCxzPW4uX3Njcm9sbGJhclNpemUsYz1yLmdldFRvdGFsU2l6ZSgpLGw9Yy5oZWlnaHQsdT1jLndpZHRoLGQ9TWF0aC5tYXgoMCxNYXRoLm1pbih1LWErcyxlLnRhcmdldC5zY3JvbGxMZWZ0KSksZj1NYXRoLm1heCgwLE1hdGgubWluKGwtaStzLGUudGFyZ2V0LnNjcm9sbFRvcCkpO2lmKG4uc3RhdGUuc2Nyb2xsTGVmdCE9PWR8fG4uc3RhdGUuc2Nyb2xsVG9wIT09Zil7dmFyIHA9ZS5jYW5jZWxhYmxlP1wib2JzZXJ2ZWRcIjpudztuLnN0YXRlLmlzU2Nyb2xsaW5nfHxvKCEwKSxuLnNldFN0YXRlKHtpc1Njcm9sbGluZzohMCxzY3JvbGxMZWZ0OmQsc2Nyb2xsUG9zaXRpb25DaGFuZ2VSZWFzb246cCxzY3JvbGxUb3A6Zn0pfW4uX2ludm9rZU9uU2Nyb2xsTWVtb2l6ZXIoe3Njcm9sbExlZnQ6ZCxzY3JvbGxUb3A6Zix0b3RhbFdpZHRoOnUsdG90YWxIZWlnaHQ6bH0pfX0pKSxuLl9zY3JvbGxiYXJTaXplPUFOKCksdm9pZCAwPT09bi5fc2Nyb2xsYmFyU2l6ZT8obi5fc2Nyb2xsYmFyU2l6ZU1lYXN1cmVkPSExLG4uX3Njcm9sbGJhclNpemU9MCk6bi5fc2Nyb2xsYmFyU2l6ZU1lYXN1cmVkPSEwLG59cmV0dXJuIHVOKHQsZSksb04odCxbe2tleTpcInJlY29tcHV0ZUNlbGxTaXplc0FuZFBvc2l0aW9uc1wiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fY2FsY3VsYXRlU2l6ZUFuZFBvc2l0aW9uRGF0YU9uTmV4dFVwZGF0ZT0hMCx0aGlzLmZvcmNlVXBkYXRlKCl9fSx7a2V5OlwiY29tcG9uZW50RGlkTW91bnRcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmNlbGxMYXlvdXRNYW5hZ2VyLG49ZS5zY3JvbGxMZWZ0LHI9ZS5zY3JvbGxUb0NlbGwsaT1lLnNjcm9sbFRvcDt0aGlzLl9zY3JvbGxiYXJTaXplTWVhc3VyZWR8fCh0aGlzLl9zY3JvbGxiYXJTaXplPUFOKCksdGhpcy5fc2Nyb2xsYmFyU2l6ZU1lYXN1cmVkPSEwLHRoaXMuc2V0U3RhdGUoe30pKSxyPj0wP3RoaXMuX3VwZGF0ZVNjcm9sbFBvc2l0aW9uRm9yU2Nyb2xsVG9DZWxsKCk6KG4+PTB8fGk+PTApJiZ0aGlzLl9zZXRTY3JvbGxQb3NpdGlvbih7c2Nyb2xsTGVmdDpuLHNjcm9sbFRvcDppfSksdGhpcy5faW52b2tlT25TZWN0aW9uUmVuZGVyZWRIZWxwZXIoKTt2YXIgbz10LmdldFRvdGFsU2l6ZSgpLGE9by5oZWlnaHQscz1vLndpZHRoO3RoaXMuX2ludm9rZU9uU2Nyb2xsTWVtb2l6ZXIoe3Njcm9sbExlZnQ6bnx8MCxzY3JvbGxUb3A6aXx8MCx0b3RhbEhlaWdodDphLHRvdGFsV2lkdGg6c30pfX0se2tleTpcImNvbXBvbmVudERpZFVwZGF0ZVwiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5wcm9wcyxyPW4uaGVpZ2h0LGk9bi5zY3JvbGxUb0FsaWdubWVudCxvPW4uc2Nyb2xsVG9DZWxsLGE9bi53aWR0aCxzPXRoaXMuc3RhdGUsYz1zLnNjcm9sbExlZnQsbD1zLnNjcm9sbFBvc2l0aW9uQ2hhbmdlUmVhc29uLHU9cy5zY3JvbGxUb3A7bD09PW53JiYoYz49MCYmYyE9PXQuc2Nyb2xsTGVmdCYmYyE9PXRoaXMuX3Njcm9sbGluZ0NvbnRhaW5lci5zY3JvbGxMZWZ0JiYodGhpcy5fc2Nyb2xsaW5nQ29udGFpbmVyLnNjcm9sbExlZnQ9YyksdT49MCYmdSE9PXQuc2Nyb2xsVG9wJiZ1IT09dGhpcy5fc2Nyb2xsaW5nQ29udGFpbmVyLnNjcm9sbFRvcCYmKHRoaXMuX3Njcm9sbGluZ0NvbnRhaW5lci5zY3JvbGxUb3A9dSkpLHI9PT1lLmhlaWdodCYmaT09PWUuc2Nyb2xsVG9BbGlnbm1lbnQmJm89PT1lLnNjcm9sbFRvQ2VsbCYmYT09PWUud2lkdGh8fHRoaXMuX3VwZGF0ZVNjcm9sbFBvc2l0aW9uRm9yU2Nyb2xsVG9DZWxsKCksdGhpcy5faW52b2tlT25TZWN0aW9uUmVuZGVyZWRIZWxwZXIoKX19LHtrZXk6XCJjb21wb25lbnRXaWxsVW5tb3VudFwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fZGlzYWJsZVBvaW50ZXJFdmVudHNUaW1lb3V0SWQmJmNsZWFyVGltZW91dCh0aGlzLl9kaXNhYmxlUG9pbnRlckV2ZW50c1RpbWVvdXRJZCl9fSx7a2V5OlwicmVuZGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5hdXRvSGVpZ2h0LG49ZS5jZWxsQ291bnQscj1lLmNlbGxMYXlvdXRNYW5hZ2VyLGk9ZS5jbGFzc05hbWUsbz1lLmhlaWdodCxhPWUuaG9yaXpvbnRhbE92ZXJzY2FuU2l6ZSxzPWUuaWQsYz1lLm5vQ29udGVudFJlbmRlcmVyLGw9ZS5zdHlsZSx1PWUudmVydGljYWxPdmVyc2NhblNpemUsZj1lLndpZHRoLHA9dGhpcy5zdGF0ZSxtPXAuaXNTY3JvbGxpbmcsaD1wLnNjcm9sbExlZnQsdj1wLnNjcm9sbFRvcDsodGhpcy5fbGFzdFJlbmRlcmVkQ2VsbENvdW50IT09bnx8dGhpcy5fbGFzdFJlbmRlcmVkQ2VsbExheW91dE1hbmFnZXIhPT1yfHx0aGlzLl9jYWxjdWxhdGVTaXplQW5kUG9zaXRpb25EYXRhT25OZXh0VXBkYXRlKSYmKHRoaXMuX2xhc3RSZW5kZXJlZENlbGxDb3VudD1uLHRoaXMuX2xhc3RSZW5kZXJlZENlbGxMYXlvdXRNYW5hZ2VyPXIsdGhpcy5fY2FsY3VsYXRlU2l6ZUFuZFBvc2l0aW9uRGF0YU9uTmV4dFVwZGF0ZT0hMSxyLmNhbGN1bGF0ZVNpemVBbmRQb3NpdGlvbkRhdGEoKSk7dmFyIGc9ci5nZXRUb3RhbFNpemUoKSx5PWcuaGVpZ2h0LEU9Zy53aWR0aCxfPU1hdGgubWF4KDAsaC1hKSxJPU1hdGgubWF4KDAsdi11KSxTPU1hdGgubWluKEUsaCtmK2EpLGI9TWF0aC5taW4oeSx2K28rdSksVD1vPjAmJmY+MD9yLmNlbGxSZW5kZXJlcnMoe2hlaWdodDpiLUksaXNTY3JvbGxpbmc6bSx3aWR0aDpTLV8seDpfLHk6SX0pOltdLEM9e2JveFNpemluZzpcImJvcmRlci1ib3hcIixkaXJlY3Rpb246XCJsdHJcIixoZWlnaHQ6dD9cImF1dG9cIjpvLHBvc2l0aW9uOlwicmVsYXRpdmVcIixXZWJraXRPdmVyZmxvd1Njcm9sbGluZzpcInRvdWNoXCIsd2lkdGg6Zix3aWxsQ2hhbmdlOlwidHJhbnNmb3JtXCJ9LEE9eT5vP3RoaXMuX3Njcm9sbGJhclNpemU6MCxSPUU+Zj90aGlzLl9zY3JvbGxiYXJTaXplOjA7cmV0dXJuIEMub3ZlcmZsb3dYPUUrQTw9Zj9cImhpZGRlblwiOlwiYXV0b1wiLEMub3ZlcmZsb3dZPXkrUjw9bz9cImhpZGRlblwiOlwiYXV0b1wiLGQuY3JlYXRlRWxlbWVudChcImRpdlwiLHtyZWY6dGhpcy5fc2V0U2Nyb2xsaW5nQ29udGFpbmVyUmVmLFwiYXJpYS1sYWJlbFwiOnRoaXMucHJvcHNbXCJhcmlhLWxhYmVsXCJdLGNsYXNzTmFtZTooMCxRLlopKFwiUmVhY3RWaXJ0dWFsaXplZF9fQ29sbGVjdGlvblwiLGkpLGlkOnMsb25TY3JvbGw6dGhpcy5fb25TY3JvbGwscm9sZTpcImdyaWRcIixzdHlsZTp0dyh7fSxDLHt9LGwpLHRhYkluZGV4OjB9LG4+MCYmZC5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcIlJlYWN0VmlydHVhbGl6ZWRfX0NvbGxlY3Rpb25fX2lubmVyU2Nyb2xsQ29udGFpbmVyXCIsc3R5bGU6e2hlaWdodDp5LG1heEhlaWdodDp5LG1heFdpZHRoOkUsb3ZlcmZsb3c6XCJoaWRkZW5cIixwb2ludGVyRXZlbnRzOm0/XCJub25lXCI6XCJcIix3aWR0aDpFfX0sVCksMD09PW4mJmMoKSl9fSx7a2V5OlwiX2VuYWJsZVBvaW50ZXJFdmVudHNBZnRlckRlbGF5XCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX2Rpc2FibGVQb2ludGVyRXZlbnRzVGltZW91dElkJiZjbGVhclRpbWVvdXQodGhpcy5fZGlzYWJsZVBvaW50ZXJFdmVudHNUaW1lb3V0SWQpLHRoaXMuX2Rpc2FibGVQb2ludGVyRXZlbnRzVGltZW91dElkPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7KDAsZS5wcm9wcy5pc1Njcm9sbGluZ0NoYW5nZSkoITEpLGUuX2Rpc2FibGVQb2ludGVyRXZlbnRzVGltZW91dElkPW51bGwsZS5zZXRTdGF0ZSh7aXNTY3JvbGxpbmc6ITF9KX0pLDE1MCl9fSx7a2V5OlwiX2ludm9rZU9uU2Nyb2xsTWVtb2l6ZXJcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49ZS5zY3JvbGxMZWZ0LHI9ZS5zY3JvbGxUb3AsaT1lLnRvdGFsSGVpZ2h0LG89ZS50b3RhbFdpZHRoO3RoaXMuX29uU2Nyb2xsTWVtb2l6ZXIoe2NhbGxiYWNrOmZ1bmN0aW9uKGUpe3ZhciBuPWUuc2Nyb2xsTGVmdCxyPWUuc2Nyb2xsVG9wLGE9dC5wcm9wcyxzPWEuaGVpZ2h0OygwLGEub25TY3JvbGwpKHtjbGllbnRIZWlnaHQ6cyxjbGllbnRXaWR0aDphLndpZHRoLHNjcm9sbEhlaWdodDppLHNjcm9sbExlZnQ6bixzY3JvbGxUb3A6cixzY3JvbGxXaWR0aDpvfSl9LGluZGljZXM6e3Njcm9sbExlZnQ6bixzY3JvbGxUb3A6cn19KX19LHtrZXk6XCJfc2V0U2Nyb2xsUG9zaXRpb25cIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnNjcm9sbExlZnQsbj1lLnNjcm9sbFRvcCxyPXtzY3JvbGxQb3NpdGlvbkNoYW5nZVJlYXNvbjpud307dD49MCYmKHIuc2Nyb2xsTGVmdD10KSxuPj0wJiYoci5zY3JvbGxUb3A9biksKHQ+PTAmJnQhPT10aGlzLnN0YXRlLnNjcm9sbExlZnR8fG4+PTAmJm4hPT10aGlzLnN0YXRlLnNjcm9sbFRvcCkmJnRoaXMuc2V0U3RhdGUocil9fV0sW3trZXk6XCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiAwIT09ZS5jZWxsQ291bnR8fDA9PT10LnNjcm9sbExlZnQmJjA9PT10LnNjcm9sbFRvcD9lLnNjcm9sbExlZnQhPT10LnNjcm9sbExlZnR8fGUuc2Nyb2xsVG9wIT09dC5zY3JvbGxUb3A/e3Njcm9sbExlZnQ6bnVsbCE9ZS5zY3JvbGxMZWZ0P2Uuc2Nyb2xsTGVmdDp0LnNjcm9sbExlZnQsc2Nyb2xsVG9wOm51bGwhPWUuc2Nyb2xsVG9wP2Uuc2Nyb2xsVG9wOnQuc2Nyb2xsVG9wLHNjcm9sbFBvc2l0aW9uQ2hhbmdlUmVhc29uOm53fTpudWxsOntzY3JvbGxMZWZ0OjAsc2Nyb2xsVG9wOjAsc2Nyb2xsUG9zaXRpb25DaGFuZ2VSZWFzb246bnd9fX1dKSx0fShkLlB1cmVDb21wb25lbnQpO2ROKHJ3LFwiZGVmYXVsdFByb3BzXCIse1wiYXJpYS1sYWJlbFwiOlwiZ3JpZFwiLGhvcml6b250YWxPdmVyc2NhblNpemU6MCxub0NvbnRlbnRSZW5kZXJlcjpmdW5jdGlvbigpe3JldHVybiBudWxsfSxvblNjcm9sbDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxvblNlY3Rpb25SZW5kZXJlZDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxzY3JvbGxUb0FsaWdubWVudDpcImF1dG9cIixzY3JvbGxUb0NlbGw6LTEsc3R5bGU6e30sdmVydGljYWxPdmVyc2NhblNpemU6MH0pLHJ3LnByb3BUeXBlcz17fSxoTihydyk7Y29uc3QgaXc9cnc7dmFyIG93PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt2YXIgbj10LmhlaWdodCxyPXQud2lkdGgsaT10Lngsbz10Lnk7dE4odGhpcyxlKSx0aGlzLmhlaWdodD1uLHRoaXMud2lkdGg9cix0aGlzLng9aSx0aGlzLnk9byx0aGlzLl9pbmRleE1hcD17fSx0aGlzLl9pbmRpY2VzPVtdfXJldHVybiBvTihlLFt7a2V5OlwiYWRkQ2VsbEluZGV4XCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbmRleDt0aGlzLl9pbmRleE1hcFt0XXx8KHRoaXMuX2luZGV4TWFwW3RdPSEwLHRoaXMuX2luZGljZXMucHVzaCh0KSl9fSx7a2V5OlwiZ2V0Q2VsbEluZGljZXNcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbmRpY2VzfX0se2tleTpcInRvU3RyaW5nXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5cIlwiLmNvbmNhdCh0aGlzLngsXCIsXCIpLmNvbmNhdCh0aGlzLnksXCIgXCIpLmNvbmNhdCh0aGlzLndpZHRoLFwieFwiKS5jb25jYXQodGhpcy5oZWlnaHQpfX1dKSxlfSgpLGF3PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToxMDA7dE4odGhpcyxlKSx0aGlzLl9zZWN0aW9uU2l6ZT10LHRoaXMuX2NlbGxNZXRhZGF0YT1bXSx0aGlzLl9zZWN0aW9ucz17fX1yZXR1cm4gb04oZSxbe2tleTpcImdldENlbGxJbmRpY2VzXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5oZWlnaHQsbj1lLndpZHRoLHI9ZS54LGk9ZS55LG89e307cmV0dXJuIHRoaXMuZ2V0U2VjdGlvbnMoe2hlaWdodDp0LHdpZHRoOm4seDpyLHk6aX0pLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldENlbGxJbmRpY2VzKCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7b1tlXT1lfSkpfSkpLE9iamVjdC5rZXlzKG8pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIG9bZV19KSl9fSx7a2V5OlwiZ2V0Q2VsbE1ldGFkYXRhXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbmRleDtyZXR1cm4gdGhpcy5fY2VsbE1ldGFkYXRhW3RdfX0se2tleTpcImdldFNlY3Rpb25zXCIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUuaGVpZ2h0LG49ZS53aWR0aCxyPWUueCxpPWUueSxvPU1hdGguZmxvb3Ioci90aGlzLl9zZWN0aW9uU2l6ZSksYT1NYXRoLmZsb29yKChyK24tMSkvdGhpcy5fc2VjdGlvblNpemUpLHM9TWF0aC5mbG9vcihpL3RoaXMuX3NlY3Rpb25TaXplKSxjPU1hdGguZmxvb3IoKGkrdC0xKS90aGlzLl9zZWN0aW9uU2l6ZSksbD1bXSx1PW87dTw9YTt1KyspZm9yKHZhciBkPXM7ZDw9YztkKyspe3ZhciBmPVwiXCIuY29uY2F0KHUsXCIuXCIpLmNvbmNhdChkKTt0aGlzLl9zZWN0aW9uc1tmXXx8KHRoaXMuX3NlY3Rpb25zW2ZdPW5ldyBvdyh7aGVpZ2h0OnRoaXMuX3NlY3Rpb25TaXplLHdpZHRoOnRoaXMuX3NlY3Rpb25TaXplLHg6dSp0aGlzLl9zZWN0aW9uU2l6ZSx5OmQqdGhpcy5fc2VjdGlvblNpemV9KSksbC5wdXNoKHRoaXMuX3NlY3Rpb25zW2ZdKX1yZXR1cm4gbH19LHtrZXk6XCJnZXRUb3RhbFNlY3Rpb25Db3VudFwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX3NlY3Rpb25zKS5sZW5ndGh9fSx7a2V5OlwidG9TdHJpbmdcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX3NlY3Rpb25zKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9zZWN0aW9uc1t0XS50b1N0cmluZygpfSkpfX0se2tleTpcInJlZ2lzdGVyQ2VsbFwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuY2VsbE1ldGFkYXR1bSxuPWUuaW5kZXg7dGhpcy5fY2VsbE1ldGFkYXRhW25dPXQsdGhpcy5nZXRTZWN0aW9ucyh0KS5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5hZGRDZWxsSW5kZXgoe2luZGV4Om59KX0pKX19XSksZX0oKTtmdW5jdGlvbiBzdyhlKXt2YXIgdD1lLmFsaWduLG49dm9pZCAwPT09dD9cImF1dG9cIjp0LHI9ZS5jZWxsT2Zmc2V0LGk9ZS5jZWxsU2l6ZSxvPWUuY29udGFpbmVyU2l6ZSxhPWUuY3VycmVudE9mZnNldCxzPXIsYz1zLW8raTtzd2l0Y2gobil7Y2FzZVwic3RhcnRcIjpyZXR1cm4gcztjYXNlXCJlbmRcIjpyZXR1cm4gYztjYXNlXCJjZW50ZXJcIjpyZXR1cm4gcy0oby1pKS8yO2RlZmF1bHQ6cmV0dXJuIE1hdGgubWF4KGMsTWF0aC5taW4ocyxhKSl9fXZhciBjdz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsbil7dmFyIHI7cmV0dXJuIHROKHRoaXMsdCksKHI9c04odGhpcyxjTih0KS5jYWxsKHRoaXMsZSxuKSkpLl9jZWxsTWV0YWRhdGE9W10sci5fbGFzdFJlbmRlcmVkQ2VsbEluZGljZXM9W10sci5fY2VsbENhY2hlPVtdLHIuX2lzU2Nyb2xsaW5nQ2hhbmdlPXIuX2lzU2Nyb2xsaW5nQ2hhbmdlLmJpbmQoYU4ocikpLHIuX3NldENvbGxlY3Rpb25WaWV3UmVmPXIuX3NldENvbGxlY3Rpb25WaWV3UmVmLmJpbmQoYU4ocikpLHJ9cmV0dXJuIHVOKHQsZSksb04odCxbe2tleTpcImZvcmNlVXBkYXRlXCIsdmFsdWU6ZnVuY3Rpb24oKXt2b2lkIDAhPT10aGlzLl9jb2xsZWN0aW9uVmlldyYmdGhpcy5fY29sbGVjdGlvblZpZXcuZm9yY2VVcGRhdGUoKX19LHtrZXk6XCJyZWNvbXB1dGVDZWxsU2l6ZXNBbmRQb3NpdGlvbnNcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2NlbGxDYWNoZT1bXSx0aGlzLl9jb2xsZWN0aW9uVmlldy5yZWNvbXB1dGVDZWxsU2l6ZXNBbmRQb3NpdGlvbnMoKX19LHtrZXk6XCJyZW5kZXJcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXZOKHt9LHRoaXMucHJvcHMpO3JldHVybiBkLmNyZWF0ZUVsZW1lbnQoaXcsdk4oe2NlbGxMYXlvdXRNYW5hZ2VyOnRoaXMsaXNTY3JvbGxpbmdDaGFuZ2U6dGhpcy5faXNTY3JvbGxpbmdDaGFuZ2UscmVmOnRoaXMuX3NldENvbGxlY3Rpb25WaWV3UmVmfSxlKSl9fSx7a2V5OlwiY2FsY3VsYXRlU2l6ZUFuZFBvc2l0aW9uRGF0YVwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmNlbGxDb3VudCxuPWUuY2VsbFNpemVBbmRQb3NpdGlvbkdldHRlcixyPVtdLGk9bmV3IGF3KGUuc2VjdGlvblNpemUpLG89MCxhPTAscz0wO3M8dDtzKyspe3ZhciBjPW4oe2luZGV4OnN9KTtpZihudWxsPT1jLmhlaWdodHx8aXNOYU4oYy5oZWlnaHQpfHxudWxsPT1jLndpZHRofHxpc05hTihjLndpZHRoKXx8bnVsbD09Yy54fHxpc05hTihjLngpfHxudWxsPT1jLnl8fGlzTmFOKGMueSkpdGhyb3cgRXJyb3IoXCJJbnZhbGlkIG1ldGFkYXRhIHJldHVybmVkIGZvciBjZWxsIFwiLmNvbmNhdChzLFwiOlxcbiAgICAgICAgeDpcIikuY29uY2F0KGMueCxcIiwgeTpcIikuY29uY2F0KGMueSxcIiwgd2lkdGg6XCIpLmNvbmNhdChjLndpZHRoLFwiLCBoZWlnaHQ6XCIpLmNvbmNhdChjLmhlaWdodCkpO289TWF0aC5tYXgobyxjLnkrYy5oZWlnaHQpLGE9TWF0aC5tYXgoYSxjLngrYy53aWR0aCkscltzXT1jLGkucmVnaXN0ZXJDZWxsKHtjZWxsTWV0YWRhdHVtOmMsaW5kZXg6c30pfXJldHVybntjZWxsTWV0YWRhdGE6cixoZWlnaHQ6byxzZWN0aW9uTWFuYWdlcjppLHdpZHRoOmF9fSh7Y2VsbENvdW50OmUuY2VsbENvdW50LGNlbGxTaXplQW5kUG9zaXRpb25HZXR0ZXI6ZS5jZWxsU2l6ZUFuZFBvc2l0aW9uR2V0dGVyLHNlY3Rpb25TaXplOmUuc2VjdGlvblNpemV9KTt0aGlzLl9jZWxsTWV0YWRhdGE9dC5jZWxsTWV0YWRhdGEsdGhpcy5fc2VjdGlvbk1hbmFnZXI9dC5zZWN0aW9uTWFuYWdlcix0aGlzLl9oZWlnaHQ9dC5oZWlnaHQsdGhpcy5fd2lkdGg9dC53aWR0aH19LHtrZXk6XCJnZXRMYXN0UmVuZGVyZWRJbmRpY2VzXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGFzdFJlbmRlcmVkQ2VsbEluZGljZXN9fSx7a2V5OlwiZ2V0U2Nyb2xsUG9zaXRpb25Gb3JDZWxsXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5hbGlnbixuPWUuY2VsbEluZGV4LHI9ZS5oZWlnaHQsaT1lLnNjcm9sbExlZnQsbz1lLnNjcm9sbFRvcCxhPWUud2lkdGgscz10aGlzLnByb3BzLmNlbGxDb3VudDtpZihuPj0wJiZuPHMpe3ZhciBjPXRoaXMuX2NlbGxNZXRhZGF0YVtuXTtpPXN3KHthbGlnbjp0LGNlbGxPZmZzZXQ6Yy54LGNlbGxTaXplOmMud2lkdGgsY29udGFpbmVyU2l6ZTphLGN1cnJlbnRPZmZzZXQ6aSx0YXJnZXRJbmRleDpufSksbz1zdyh7YWxpZ246dCxjZWxsT2Zmc2V0OmMueSxjZWxsU2l6ZTpjLmhlaWdodCxjb250YWluZXJTaXplOnIsY3VycmVudE9mZnNldDpvLHRhcmdldEluZGV4Om59KX1yZXR1cm57c2Nyb2xsTGVmdDppLHNjcm9sbFRvcDpvfX19LHtrZXk6XCJnZXRUb3RhbFNpemVcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybntoZWlnaHQ6dGhpcy5faGVpZ2h0LHdpZHRoOnRoaXMuX3dpZHRofX19LHtrZXk6XCJjZWxsUmVuZGVyZXJzXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPWUuaGVpZ2h0LHI9ZS5pc1Njcm9sbGluZyxpPWUud2lkdGgsbz1lLngsYT1lLnkscz10aGlzLnByb3BzLGM9cy5jZWxsR3JvdXBSZW5kZXJlcixsPXMuY2VsbFJlbmRlcmVyO3JldHVybiB0aGlzLl9sYXN0UmVuZGVyZWRDZWxsSW5kaWNlcz10aGlzLl9zZWN0aW9uTWFuYWdlci5nZXRDZWxsSW5kaWNlcyh7aGVpZ2h0Om4sd2lkdGg6aSx4Om8seTphfSksYyh7Y2VsbENhY2hlOnRoaXMuX2NlbGxDYWNoZSxjZWxsUmVuZGVyZXI6bCxjZWxsU2l6ZUFuZFBvc2l0aW9uR2V0dGVyOmZ1bmN0aW9uKGUpe3ZhciBuPWUuaW5kZXg7cmV0dXJuIHQuX3NlY3Rpb25NYW5hZ2VyLmdldENlbGxNZXRhZGF0YSh7aW5kZXg6bn0pfSxpbmRpY2VzOnRoaXMuX2xhc3RSZW5kZXJlZENlbGxJbmRpY2VzLGlzU2Nyb2xsaW5nOnJ9KX19LHtrZXk6XCJfaXNTY3JvbGxpbmdDaGFuZ2VcIix2YWx1ZTpmdW5jdGlvbihlKXtlfHwodGhpcy5fY2VsbENhY2hlPVtdKX19LHtrZXk6XCJfc2V0Q29sbGVjdGlvblZpZXdSZWZcIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9jb2xsZWN0aW9uVmlldz1lfX1dKSx0fShkLlB1cmVDb21wb25lbnQpO2Z1bmN0aW9uIGx3KGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBuPTAscj1uZXcgQXJyYXkodCk7bjx0O24rKylyW25dPWVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gdXcoZSx0KXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gbHcoZSx0KTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuXCJPYmplY3RcIj09PW4mJmUuY29uc3RydWN0b3ImJihuPWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PW58fFwiU2V0XCI9PT1uP0FycmF5LmZyb20oZSk6XCJBcmd1bWVudHNcIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pP2x3KGUsdCk6dm9pZCAwfX1kTihjdyxcImRlZmF1bHRQcm9wc1wiLHtcImFyaWEtbGFiZWxcIjpcImdyaWRcIixjZWxsR3JvdXBSZW5kZXJlcjpmdW5jdGlvbihlKXt2YXIgdD1lLmNlbGxDYWNoZSxuPWUuY2VsbFJlbmRlcmVyLHI9ZS5jZWxsU2l6ZUFuZFBvc2l0aW9uR2V0dGVyLGk9ZS5pbmRpY2VzLG89ZS5pc1Njcm9sbGluZztyZXR1cm4gaS5tYXAoKGZ1bmN0aW9uKGUpe3ZhciBpPXIoe2luZGV4OmV9KSxhPXtpbmRleDplLGlzU2Nyb2xsaW5nOm8sa2V5OmUsc3R5bGU6e2hlaWdodDppLmhlaWdodCxsZWZ0OmkueCxwb3NpdGlvbjpcImFic29sdXRlXCIsdG9wOmkueSx3aWR0aDppLndpZHRofX07cmV0dXJuIG8/KGUgaW4gdHx8KHRbZV09bihhKSksdFtlXSk6bihhKX0pKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiEhZX0pKX19KSxjdy5wcm9wVHlwZXM9e30sKGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSxuKXt2YXIgcjtyZXR1cm4gdE4odGhpcyx0KSwocj1zTih0aGlzLGNOKHQpLmNhbGwodGhpcyxlLG4pKSkuX3JlZ2lzdGVyQ2hpbGQ9ci5fcmVnaXN0ZXJDaGlsZC5iaW5kKGFOKHIpKSxyfXJldHVybiB1Tih0LGUpLG9OKHQsW3trZXk6XCJjb21wb25lbnREaWRVcGRhdGVcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnByb3BzLG49dC5jb2x1bW5NYXhXaWR0aCxyPXQuY29sdW1uTWluV2lkdGgsaT10LmNvbHVtbkNvdW50LG89dC53aWR0aDtuPT09ZS5jb2x1bW5NYXhXaWR0aCYmcj09PWUuY29sdW1uTWluV2lkdGgmJmk9PT1lLmNvbHVtbkNvdW50JiZvPT09ZS53aWR0aHx8dGhpcy5fcmVnaXN0ZXJlZENoaWxkJiZ0aGlzLl9yZWdpc3RlcmVkQ2hpbGQucmVjb21wdXRlR3JpZFNpemUoKX19LHtrZXk6XCJyZW5kZXJcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmNoaWxkcmVuLG49ZS5jb2x1bW5NYXhXaWR0aCxyPWUuY29sdW1uTWluV2lkdGgsaT1lLmNvbHVtbkNvdW50LG89ZS53aWR0aCxhPXJ8fDEscz1uP01hdGgubWluKG4sbyk6byxjPW8vaTtyZXR1cm4gYz1NYXRoLm1heChhLGMpLGM9TWF0aC5taW4ocyxjKSxjPU1hdGguZmxvb3IoYyksdCh7YWRqdXN0ZWRXaWR0aDpNYXRoLm1pbihvLGMqaSksY29sdW1uV2lkdGg6YyxnZXRDb2x1bW5XaWR0aDpmdW5jdGlvbigpe3JldHVybiBjfSxyZWdpc3RlckNoaWxkOnRoaXMuX3JlZ2lzdGVyQ2hpbGR9KX19LHtrZXk6XCJfcmVnaXN0ZXJDaGlsZFwiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGUucmVjb21wdXRlR3JpZFNpemUpdGhyb3cgRXJyb3IoXCJVbmV4cGVjdGVkIGNoaWxkIHR5cGUgcmVnaXN0ZXJlZDsgb25seSBHcmlkL011bHRpR3JpZCBjaGlsZHJlbiBhcmUgc3VwcG9ydGVkLlwiKTt0aGlzLl9yZWdpc3RlcmVkQ2hpbGQ9ZSx0aGlzLl9yZWdpc3RlcmVkQ2hpbGQmJnRoaXMuX3JlZ2lzdGVyZWRDaGlsZC5yZWNvbXB1dGVHcmlkU2l6ZSgpfX1dKSx0fShkLlB1cmVDb21wb25lbnQpKS5wcm9wVHlwZXM9e307dmFyIGR3PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSxuKXt2YXIgcjtyZXR1cm4gdE4odGhpcyx0KSwocj1zTih0aGlzLGNOKHQpLmNhbGwodGhpcyxlLG4pKSkuX2xvYWRNb3JlUm93c01lbW9pemVyPUlOKCksci5fb25Sb3dzUmVuZGVyZWQ9ci5fb25Sb3dzUmVuZGVyZWQuYmluZChhTihyKSksci5fcmVnaXN0ZXJDaGlsZD1yLl9yZWdpc3RlckNoaWxkLmJpbmQoYU4ocikpLHJ9cmV0dXJuIHVOKHQsZSksb04odCxbe2tleTpcInJlc2V0TG9hZE1vcmVSb3dzQ2FjaGVcIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9sb2FkTW9yZVJvd3NNZW1vaXplcj1JTigpLGUmJnRoaXMuX2RvU3R1ZmYodGhpcy5fbGFzdFJlbmRlcmVkU3RhcnRJbmRleCx0aGlzLl9sYXN0UmVuZGVyZWRTdG9wSW5kZXgpfX0se2tleTpcInJlbmRlclwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKDAsdGhpcy5wcm9wcy5jaGlsZHJlbikoe29uUm93c1JlbmRlcmVkOnRoaXMuX29uUm93c1JlbmRlcmVkLHJlZ2lzdGVyQ2hpbGQ6dGhpcy5fcmVnaXN0ZXJDaGlsZH0pfX0se2tleTpcIl9sb2FkVW5sb2FkZWRSYW5nZXNcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dGhpcy5wcm9wcy5sb2FkTW9yZVJvd3M7ZS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgcj1uKGUpO3ImJnIudGhlbigoZnVuY3Rpb24oKXt2YXIgbjsobj17bGFzdFJlbmRlcmVkU3RhcnRJbmRleDp0Ll9sYXN0UmVuZGVyZWRTdGFydEluZGV4LGxhc3RSZW5kZXJlZFN0b3BJbmRleDp0Ll9sYXN0UmVuZGVyZWRTdG9wSW5kZXgsc3RhcnRJbmRleDplLnN0YXJ0SW5kZXgsc3RvcEluZGV4OmUuc3RvcEluZGV4fSkuc3RhcnRJbmRleD5uLmxhc3RSZW5kZXJlZFN0b3BJbmRleHx8bi5zdG9wSW5kZXg8bi5sYXN0UmVuZGVyZWRTdGFydEluZGV4fHx0Ll9yZWdpc3RlcmVkQ2hpbGQmJmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowLG49XCJmdW5jdGlvblwiPT10eXBlb2YgZS5yZWNvbXB1dGVHcmlkU2l6ZT9lLnJlY29tcHV0ZUdyaWRTaXplOmUucmVjb21wdXRlUm93SGVpZ2h0cztuP24uY2FsbChlLHQpOmUuZm9yY2VVcGRhdGUoKX0odC5fcmVnaXN0ZXJlZENoaWxkLHQuX2xhc3RSZW5kZXJlZFN0YXJ0SW5kZXgpfSkpfSkpfX0se2tleTpcIl9vblJvd3NSZW5kZXJlZFwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuc3RhcnRJbmRleCxuPWUuc3RvcEluZGV4O3RoaXMuX2xhc3RSZW5kZXJlZFN0YXJ0SW5kZXg9dCx0aGlzLl9sYXN0UmVuZGVyZWRTdG9wSW5kZXg9bix0aGlzLl9kb1N0dWZmKHQsbil9fSx7a2V5OlwiX2RvU3R1ZmZcIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT10aGlzLG89dGhpcy5wcm9wcyxhPW8uaXNSb3dMb2FkZWQscz1vLm1pbmltdW1CYXRjaFNpemUsYz1vLnJvd0NvdW50LGw9by50aHJlc2hvbGQsdT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5pc1Jvd0xvYWRlZCxuPWUubWluaW11bUJhdGNoU2l6ZSxyPWUucm93Q291bnQsaT1lLnN0b3BJbmRleCxvPVtdLGE9bnVsbCxzPW51bGwsYz1lLnN0YXJ0SW5kZXg7Yzw9aTtjKyspdCh7aW5kZXg6Y30pP251bGwhPT1zJiYoby5wdXNoKHtzdGFydEluZGV4OmEsc3RvcEluZGV4OnN9KSxhPXM9bnVsbCk6KHM9YyxudWxsPT09YSYmKGE9YykpO2lmKG51bGwhPT1zKXtmb3IodmFyIGw9TWF0aC5taW4oTWF0aC5tYXgocyxhK24tMSksci0xKSx1PXMrMTt1PD1sJiYhdCh7aW5kZXg6dX0pO3UrKylzPXU7by5wdXNoKHtzdGFydEluZGV4OmEsc3RvcEluZGV4OnN9KX1pZihvLmxlbmd0aClmb3IodmFyIGQ9b1swXTtkLnN0b3BJbmRleC1kLnN0YXJ0SW5kZXgrMTxuJiZkLnN0YXJ0SW5kZXg+MDspe3ZhciBmPWQuc3RhcnRJbmRleC0xO2lmKHQoe2luZGV4OmZ9KSlicmVhaztkLnN0YXJ0SW5kZXg9Zn1yZXR1cm4gb30oe2lzUm93TG9hZGVkOmEsbWluaW11bUJhdGNoU2l6ZTpzLHJvd0NvdW50OmMsc3RhcnRJbmRleDpNYXRoLm1heCgwLGUtbCksc3RvcEluZGV4Ok1hdGgubWluKGMtMSx0K2wpfSksZD0obj1bXSkuY29uY2F0LmFwcGx5KG4sZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gbHcoZSl9KHI9dS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybltlLnN0YXJ0SW5kZXgsZS5zdG9wSW5kZXhdfSkpKXx8ZnVuY3Rpb24oZSl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lW1wiQEBpdGVyYXRvclwiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0ocil8fHV3KHIpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpKTt0aGlzLl9sb2FkTW9yZVJvd3NNZW1vaXplcih7Y2FsbGJhY2s6ZnVuY3Rpb24oKXtpLl9sb2FkVW5sb2FkZWRSYW5nZXModSl9LGluZGljZXM6e3NxdWFzaGVkVW5sb2FkZWRSYW5nZXM6ZH19KX19LHtrZXk6XCJfcmVnaXN0ZXJDaGlsZFwiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3JlZ2lzdGVyZWRDaGlsZD1lfX1dKSx0fShkLlB1cmVDb21wb25lbnQpO2ROKGR3LFwiZGVmYXVsdFByb3BzXCIse21pbmltdW1CYXRjaFNpemU6MTAscm93Q291bnQ6MCx0aHJlc2hvbGQ6MTV9KSxkdy5wcm9wVHlwZXM9e307dmFyIGZ3LHB3LG13PShwdz1mdz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUsbjt0Tih0aGlzLHQpO2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoLGk9bmV3IEFycmF5KHIpLG89MDtvPHI7bysrKWlbb109YXJndW1lbnRzW29dO3JldHVybiBkTihhTihuPXNOKHRoaXMsKGU9Y04odCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSkpLFwiR3JpZFwiLHZvaWQgMCksZE4oYU4obiksXCJfY2VsbFJlbmRlcmVyXCIsKGZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50LHI9ZS5yb3dJbmRleCxpPWUuc3R5bGUsbz1lLmlzU2Nyb2xsaW5nLGE9ZS5pc1Zpc2libGUscz1lLmtleSxjPW4ucHJvcHMucm93UmVuZGVyZXIsbD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGksXCJ3aWR0aFwiKTtyZXR1cm4gbCYmbC53cml0YWJsZSYmKGkud2lkdGg9XCIxMDAlXCIpLGMoe2luZGV4OnIsc3R5bGU6aSxpc1Njcm9sbGluZzpvLGlzVmlzaWJsZTphLGtleTpzLHBhcmVudDp0fSl9KSksZE4oYU4obiksXCJfc2V0UmVmXCIsKGZ1bmN0aW9uKGUpe24uR3JpZD1lfSkpLGROKGFOKG4pLFwiX29uU2Nyb2xsXCIsKGZ1bmN0aW9uKGUpe3ZhciB0PWUuY2xpZW50SGVpZ2h0LHI9ZS5zY3JvbGxIZWlnaHQsaT1lLnNjcm9sbFRvcDsoMCxuLnByb3BzLm9uU2Nyb2xsKSh7Y2xpZW50SGVpZ2h0OnQsc2Nyb2xsSGVpZ2h0OnIsc2Nyb2xsVG9wOml9KX0pKSxkTihhTihuKSxcIl9vblNlY3Rpb25SZW5kZXJlZFwiLChmdW5jdGlvbihlKXt2YXIgdD1lLnJvd092ZXJzY2FuU3RhcnRJbmRleCxyPWUucm93T3ZlcnNjYW5TdG9wSW5kZXgsaT1lLnJvd1N0YXJ0SW5kZXgsbz1lLnJvd1N0b3BJbmRleDsoMCxuLnByb3BzLm9uUm93c1JlbmRlcmVkKSh7b3ZlcnNjYW5TdGFydEluZGV4OnQsb3ZlcnNjYW5TdG9wSW5kZXg6cixzdGFydEluZGV4Omksc3RvcEluZGV4Om99KX0pKSxufXJldHVybiB1Tih0LGUpLG9OKHQsW3trZXk6XCJmb3JjZVVwZGF0ZUdyaWRcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuR3JpZCYmdGhpcy5HcmlkLmZvcmNlVXBkYXRlKCl9fSx7a2V5OlwiZ2V0T2Zmc2V0Rm9yUm93XCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5hbGlnbm1lbnQsbj1lLmluZGV4O3JldHVybiB0aGlzLkdyaWQ/dGhpcy5HcmlkLmdldE9mZnNldEZvckNlbGwoe2FsaWdubWVudDp0LHJvd0luZGV4Om4sY29sdW1uSW5kZXg6MH0pLnNjcm9sbFRvcDowfX0se2tleTpcImludmFsaWRhdGVDZWxsU2l6ZUFmdGVyUmVuZGVyXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2x1bW5JbmRleCxuPWUucm93SW5kZXg7dGhpcy5HcmlkJiZ0aGlzLkdyaWQuaW52YWxpZGF0ZUNlbGxTaXplQWZ0ZXJSZW5kZXIoe3Jvd0luZGV4Om4sY29sdW1uSW5kZXg6dH0pfX0se2tleTpcIm1lYXN1cmVBbGxSb3dzXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLkdyaWQmJnRoaXMuR3JpZC5tZWFzdXJlQWxsQ2VsbHMoKX19LHtrZXk6XCJyZWNvbXB1dGVHcmlkU2l6ZVwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9ZS5jb2x1bW5JbmRleCxuPXZvaWQgMD09PXQ/MDp0LHI9ZS5yb3dJbmRleCxpPXZvaWQgMD09PXI/MDpyO3RoaXMuR3JpZCYmdGhpcy5HcmlkLnJlY29tcHV0ZUdyaWRTaXplKHtyb3dJbmRleDppLGNvbHVtbkluZGV4Om59KX19LHtrZXk6XCJyZWNvbXB1dGVSb3dIZWlnaHRzXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MDt0aGlzLkdyaWQmJnRoaXMuR3JpZC5yZWNvbXB1dGVHcmlkU2l6ZSh7cm93SW5kZXg6ZSxjb2x1bW5JbmRleDowfSl9fSx7a2V5Olwic2Nyb2xsVG9Qb3NpdGlvblwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjA7dGhpcy5HcmlkJiZ0aGlzLkdyaWQuc2Nyb2xsVG9Qb3NpdGlvbih7c2Nyb2xsVG9wOmV9KX19LHtrZXk6XCJzY3JvbGxUb1Jvd1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjA7dGhpcy5HcmlkJiZ0aGlzLkdyaWQuc2Nyb2xsVG9DZWxsKHtjb2x1bW5JbmRleDowLHJvd0luZGV4OmV9KX19LHtrZXk6XCJyZW5kZXJcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmNsYXNzTmFtZSxuPWUubm9Sb3dzUmVuZGVyZXIscj1lLnNjcm9sbFRvSW5kZXgsaT1lLndpZHRoLG89KDAsUS5aKShcIlJlYWN0VmlydHVhbGl6ZWRfX0xpc3RcIix0KTtyZXR1cm4gZC5jcmVhdGVFbGVtZW50KEJOLHZOKHt9LHRoaXMucHJvcHMse2F1dG9Db250YWluZXJXaWR0aDohMCxjZWxsUmVuZGVyZXI6dGhpcy5fY2VsbFJlbmRlcmVyLGNsYXNzTmFtZTpvLGNvbHVtbldpZHRoOmksY29sdW1uQ291bnQ6MSxub0NvbnRlbnRSZW5kZXJlcjpuLG9uU2Nyb2xsOnRoaXMuX29uU2Nyb2xsLG9uU2VjdGlvblJlbmRlcmVkOnRoaXMuX29uU2VjdGlvblJlbmRlcmVkLHJlZjp0aGlzLl9zZXRSZWYsc2Nyb2xsVG9Sb3c6cn0pKX19XSksdH0oZC5QdXJlQ29tcG9uZW50KSxkTihmdyxcInByb3BUeXBlc1wiLG51bGwpLHB3KTtkTihtdyxcImRlZmF1bHRQcm9wc1wiLHthdXRvSGVpZ2h0OiExLGVzdGltYXRlZFJvd1NpemU6MzAsb25TY3JvbGw6ZnVuY3Rpb24oKXt9LG5vUm93c1JlbmRlcmVyOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LG9uUm93c1JlbmRlcmVkOmZ1bmN0aW9uKCl7fSxvdmVyc2NhbkluZGljZXNHZXR0ZXI6Vk4sb3ZlcnNjYW5Sb3dDb3VudDoxMCxzY3JvbGxUb0FsaWdubWVudDpcImF1dG9cIixzY3JvbGxUb0luZGV4Oi0xLHN0eWxlOnt9fSk7Y29uc3QgaHc9ZnVuY3Rpb24oZSx0LG4scixpKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBuP2Z1bmN0aW9uKGUsdCxuLHIsaSl7Zm9yKHZhciBvPW4rMTt0PD1uOyl7dmFyIGE9dCtuPj4+MTtpKGVbYV0scik+PTA/KG89YSxuPWEtMSk6dD1hKzF9cmV0dXJuIG99KGUsdm9pZCAwPT09cj8wOjB8cix2b2lkIDA9PT1pP2UubGVuZ3RoLTE6MHxpLHQsbik6ZnVuY3Rpb24oZSx0LG4scil7Zm9yKHZhciBpPW4rMTt0PD1uOyl7dmFyIG89dCtuPj4+MTtlW29dPj1yPyhpPW8sbj1vLTEpOnQ9bysxfXJldHVybiBpfShlLHZvaWQgMD09PW4/MDowfG4sdm9pZCAwPT09cj9lLmxlbmd0aC0xOjB8cix0KX07ZnVuY3Rpb24gdncoZSx0LG4scixpKXt0aGlzLm1pZD1lLHRoaXMubGVmdD10LHRoaXMucmlnaHQ9bix0aGlzLmxlZnRQb2ludHM9cix0aGlzLnJpZ2h0UG9pbnRzPWksdGhpcy5jb3VudD0odD90LmNvdW50OjApKyhuP24uY291bnQ6MCkrci5sZW5ndGh9dmFyIGd3PXZ3LnByb3RvdHlwZTtmdW5jdGlvbiB5dyhlLHQpe2UubWlkPXQubWlkLGUubGVmdD10LmxlZnQsZS5yaWdodD10LnJpZ2h0LGUubGVmdFBvaW50cz10LmxlZnRQb2ludHMsZS5yaWdodFBvaW50cz10LnJpZ2h0UG9pbnRzLGUuY291bnQ9dC5jb3VudH1mdW5jdGlvbiBFdyhlLHQpe3ZhciBuPWt3KHQpO2UubWlkPW4ubWlkLGUubGVmdD1uLmxlZnQsZS5yaWdodD1uLnJpZ2h0LGUubGVmdFBvaW50cz1uLmxlZnRQb2ludHMsZS5yaWdodFBvaW50cz1uLnJpZ2h0UG9pbnRzLGUuY291bnQ9bi5jb3VudH1mdW5jdGlvbiBfdyhlLHQpe3ZhciBuPWUuaW50ZXJ2YWxzKFtdKTtuLnB1c2godCksRXcoZSxuKX1mdW5jdGlvbiBJdyhlLHQpe3ZhciBuPWUuaW50ZXJ2YWxzKFtdKSxyPW4uaW5kZXhPZih0KTtyZXR1cm4gcjwwPzA6KG4uc3BsaWNlKHIsMSksRXcoZSxuKSwxKX1mdW5jdGlvbiBTdyhlLHQsbil7Zm9yKHZhciByPTA7cjxlLmxlbmd0aCYmZVtyXVswXTw9dDsrK3Ipe3ZhciBpPW4oZVtyXSk7aWYoaSlyZXR1cm4gaX19ZnVuY3Rpb24gYncoZSx0LG4pe2Zvcih2YXIgcj1lLmxlbmd0aC0xO3I+PTAmJmVbcl1bMV0+PXQ7LS1yKXt2YXIgaT1uKGVbcl0pO2lmKGkpcmV0dXJuIGl9fWZ1bmN0aW9uIFR3KGUsdCl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDsrK24pe3ZhciByPXQoZVtuXSk7aWYocilyZXR1cm4gcn19ZnVuY3Rpb24gQ3coZSx0KXtyZXR1cm4gZS10fWZ1bmN0aW9uIEF3KGUsdCl7cmV0dXJuIGVbMF0tdFswXXx8ZVsxXS10WzFdfWZ1bmN0aW9uIFJ3KGUsdCl7cmV0dXJuIGVbMV0tdFsxXXx8ZVswXS10WzBdfWZ1bmN0aW9uIGt3KGUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gbnVsbDtmb3IodmFyIHQ9W10sbj0wO248ZS5sZW5ndGg7KytuKXQucHVzaChlW25dWzBdLGVbbl1bMV0pO3Quc29ydChDdyk7dmFyIHI9dFt0Lmxlbmd0aD4+MV0saT1bXSxvPVtdLGE9W107Zm9yKG49MDtuPGUubGVuZ3RoOysrbil7dmFyIHM9ZVtuXTtzWzFdPHI/aS5wdXNoKHMpOnI8c1swXT9vLnB1c2gocyk6YS5wdXNoKHMpfXZhciBjPWEsbD1hLnNsaWNlKCk7cmV0dXJuIGMuc29ydChBdyksbC5zb3J0KFJ3KSxuZXcgdncocixrdyhpKSxrdyhvKSxjLGwpfWZ1bmN0aW9uIE93KGUpe3RoaXMucm9vdD1lfWd3LmludGVydmFscz1mdW5jdGlvbihlKXtyZXR1cm4gZS5wdXNoLmFwcGx5KGUsdGhpcy5sZWZ0UG9pbnRzKSx0aGlzLmxlZnQmJnRoaXMubGVmdC5pbnRlcnZhbHMoZSksdGhpcy5yaWdodCYmdGhpcy5yaWdodC5pbnRlcnZhbHMoZSksZX0sZ3cuaW5zZXJ0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY291bnQtdGhpcy5sZWZ0UG9pbnRzLmxlbmd0aDtpZih0aGlzLmNvdW50Kz0xLGVbMV08dGhpcy5taWQpdGhpcy5sZWZ0PzQqKHRoaXMubGVmdC5jb3VudCsxKT4zKih0KzEpP193KHRoaXMsZSk6dGhpcy5sZWZ0Lmluc2VydChlKTp0aGlzLmxlZnQ9a3coW2VdKTtlbHNlIGlmKGVbMF0+dGhpcy5taWQpdGhpcy5yaWdodD80Kih0aGlzLnJpZ2h0LmNvdW50KzEpPjMqKHQrMSk/X3codGhpcyxlKTp0aGlzLnJpZ2h0Lmluc2VydChlKTp0aGlzLnJpZ2h0PWt3KFtlXSk7ZWxzZXt2YXIgbj1odyh0aGlzLmxlZnRQb2ludHMsZSxBdykscj1odyh0aGlzLnJpZ2h0UG9pbnRzLGUsUncpO3RoaXMubGVmdFBvaW50cy5zcGxpY2UobiwwLGUpLHRoaXMucmlnaHRQb2ludHMuc3BsaWNlKHIsMCxlKX19LGd3LnJlbW92ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNvdW50LXRoaXMubGVmdFBvaW50cztpZihlWzFdPHRoaXMubWlkKXJldHVybiB0aGlzLmxlZnQ/NCoodGhpcy5yaWdodD90aGlzLnJpZ2h0LmNvdW50OjApPjMqKHQtMSk/SXcodGhpcyxlKToyPT09KG89dGhpcy5sZWZ0LnJlbW92ZShlKSk/KHRoaXMubGVmdD1udWxsLHRoaXMuY291bnQtPTEsMSk6KDE9PT1vJiYodGhpcy5jb3VudC09MSksbyk6MDtpZihlWzBdPnRoaXMubWlkKXJldHVybiB0aGlzLnJpZ2h0PzQqKHRoaXMubGVmdD90aGlzLmxlZnQuY291bnQ6MCk+MyoodC0xKT9Jdyh0aGlzLGUpOjI9PT0obz10aGlzLnJpZ2h0LnJlbW92ZShlKSk/KHRoaXMucmlnaHQ9bnVsbCx0aGlzLmNvdW50LT0xLDEpOigxPT09byYmKHRoaXMuY291bnQtPTEpLG8pOjA7aWYoMT09PXRoaXMuY291bnQpcmV0dXJuIHRoaXMubGVmdFBvaW50c1swXT09PWU/MjowO2lmKDE9PT10aGlzLmxlZnRQb2ludHMubGVuZ3RoJiZ0aGlzLmxlZnRQb2ludHNbMF09PT1lKXtpZih0aGlzLmxlZnQmJnRoaXMucmlnaHQpe2Zvcih2YXIgbj10aGlzLHI9dGhpcy5sZWZ0O3IucmlnaHQ7KW49cixyPXIucmlnaHQ7aWYobj09PXRoaXMpci5yaWdodD10aGlzLnJpZ2h0O2Vsc2V7dmFyIGk9dGhpcy5sZWZ0LG89dGhpcy5yaWdodDtuLmNvdW50LT1yLmNvdW50LG4ucmlnaHQ9ci5sZWZ0LHIubGVmdD1pLHIucmlnaHQ9b315dyh0aGlzLHIpLHRoaXMuY291bnQ9KHRoaXMubGVmdD90aGlzLmxlZnQuY291bnQ6MCkrKHRoaXMucmlnaHQ/dGhpcy5yaWdodC5jb3VudDowKSt0aGlzLmxlZnRQb2ludHMubGVuZ3RofWVsc2UgdGhpcy5sZWZ0P3l3KHRoaXMsdGhpcy5sZWZ0KTp5dyh0aGlzLHRoaXMucmlnaHQpO3JldHVybiAxfWZvcihpPWh3KHRoaXMubGVmdFBvaW50cyxlLEF3KTtpPHRoaXMubGVmdFBvaW50cy5sZW5ndGgmJnRoaXMubGVmdFBvaW50c1tpXVswXT09PWVbMF07KytpKWlmKHRoaXMubGVmdFBvaW50c1tpXT09PWUpZm9yKHRoaXMuY291bnQtPTEsdGhpcy5sZWZ0UG9pbnRzLnNwbGljZShpLDEpLG89aHcodGhpcy5yaWdodFBvaW50cyxlLFJ3KTtvPHRoaXMucmlnaHRQb2ludHMubGVuZ3RoJiZ0aGlzLnJpZ2h0UG9pbnRzW29dWzFdPT09ZVsxXTsrK28paWYodGhpcy5yaWdodFBvaW50c1tvXT09PWUpcmV0dXJuIHRoaXMucmlnaHRQb2ludHMuc3BsaWNlKG8sMSksMTtyZXR1cm4gMH0sZ3cucXVlcnlQb2ludD1mdW5jdGlvbihlLHQpe3JldHVybiBlPHRoaXMubWlkP3RoaXMubGVmdCYmKG49dGhpcy5sZWZ0LnF1ZXJ5UG9pbnQoZSx0KSk/bjpTdyh0aGlzLmxlZnRQb2ludHMsZSx0KTplPnRoaXMubWlkP3RoaXMucmlnaHQmJihuPXRoaXMucmlnaHQucXVlcnlQb2ludChlLHQpKT9uOmJ3KHRoaXMucmlnaHRQb2ludHMsZSx0KTpUdyh0aGlzLmxlZnRQb2ludHMsdCk7dmFyIG59LGd3LnF1ZXJ5SW50ZXJ2YWw9ZnVuY3Rpb24oZSx0LG4pe3ZhciByO3JldHVybiBlPHRoaXMubWlkJiZ0aGlzLmxlZnQmJihyPXRoaXMubGVmdC5xdWVyeUludGVydmFsKGUsdCxuKSl8fHQ+dGhpcy5taWQmJnRoaXMucmlnaHQmJihyPXRoaXMucmlnaHQucXVlcnlJbnRlcnZhbChlLHQsbikpP3I6dDx0aGlzLm1pZD9Tdyh0aGlzLmxlZnRQb2ludHMsdCxuKTplPnRoaXMubWlkP2J3KHRoaXMucmlnaHRQb2ludHMsZSxuKTpUdyh0aGlzLmxlZnRQb2ludHMsbil9O3ZhciBOdz1Pdy5wcm90b3R5cGU7TncuaW5zZXJ0PWZ1bmN0aW9uKGUpe3RoaXMucm9vdD90aGlzLnJvb3QuaW5zZXJ0KGUpOnRoaXMucm9vdD1uZXcgdncoZVswXSxudWxsLG51bGwsW2VdLFtlXSl9LE53LnJlbW92ZT1mdW5jdGlvbihlKXtpZih0aGlzLnJvb3Qpe3ZhciB0PXRoaXMucm9vdC5yZW1vdmUoZSk7cmV0dXJuIDI9PT10JiYodGhpcy5yb290PW51bGwpLDAhPT10fXJldHVybiExfSxOdy5xdWVyeVBvaW50PWZ1bmN0aW9uKGUsdCl7aWYodGhpcy5yb290KXJldHVybiB0aGlzLnJvb3QucXVlcnlQb2ludChlLHQpfSxOdy5xdWVyeUludGVydmFsPWZ1bmN0aW9uKGUsdCxuKXtpZihlPD10JiZ0aGlzLnJvb3QpcmV0dXJuIHRoaXMucm9vdC5xdWVyeUludGVydmFsKGUsdCxuKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KE53LFwiY291bnRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdD90aGlzLnJvb3QuY291bnQ6MH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTncsXCJpbnRlcnZhbHNcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdD90aGlzLnJvb3QuaW50ZXJ2YWxzKFtdKTpbXX19KTt2YXIgd3csRHcsUHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dE4odGhpcyxlKSxkTih0aGlzLFwiX2NvbHVtblNpemVNYXBcIix7fSksZE4odGhpcyxcIl9pbnRlcnZhbFRyZWVcIixuZXcgT3cobnVsbCkpLGROKHRoaXMsXCJfbGVmdE1hcFwiLHt9KX1yZXR1cm4gb04oZSxbe2tleTpcImVzdGltYXRlVG90YWxIZWlnaHRcIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZS10aGlzLmNvdW50O3JldHVybiB0aGlzLnRhbGxlc3RDb2x1bW5TaXplK01hdGguY2VpbChyL3QpKm59fSx7a2V5OlwicmFuZ2VcIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpczt0aGlzLl9pbnRlcnZhbFRyZWUucXVlcnlJbnRlcnZhbChlLGUrdCwoZnVuY3Rpb24oZSl7dmFyIHQsaT0oMyxmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfSh0PWUpfHxmdW5jdGlvbihlLHQpe3ZhciBuPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW4pe3ZhciByLGksbyxhLHM9W10sYz0hMCxsPSExO3RyeXtmb3Iobz0obj1uLmNhbGwoZSkpLm5leHQsMDshKGM9KHI9by5jYWxsKG4pKS5kb25lKSYmKHMucHVzaChyLnZhbHVlKSwzIT09cy5sZW5ndGgpO2M9ITApO31jYXRjaChlKXtsPSEwLGk9ZX1maW5hbGx5e3RyeXtpZighYyYmbnVsbCE9bi5yZXR1cm4mJihhPW4ucmV0dXJuKCksT2JqZWN0KGEpIT09YSkpcmV0dXJufWZpbmFsbHl7aWYobCl0aHJvdyBpfX1yZXR1cm4gc319KHQpfHx1dyh0LDMpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCkpLG89aVswXSxhPShpWzFdLGlbMl0pO3JldHVybiBuKGEsci5fbGVmdE1hcFthXSxvKX0pKX19LHtrZXk6XCJzZXRQb3NpdGlvblwiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuLHIpe3RoaXMuX2ludGVydmFsVHJlZS5pbnNlcnQoW24sbityLGVdKSx0aGlzLl9sZWZ0TWFwW2VdPXQ7dmFyIGk9dGhpcy5fY29sdW1uU2l6ZU1hcCxvPWlbdF07aVt0XT12b2lkIDA9PT1vP24rcjpNYXRoLm1heChvLG4rcil9fSx7a2V5OlwiY291bnRcIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faW50ZXJ2YWxUcmVlLmNvdW50fX0se2tleTpcInNob3J0ZXN0Q29sdW1uU2l6ZVwiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NvbHVtblNpemVNYXAsdD0wO2Zvcih2YXIgbiBpbiBlKXt2YXIgcj1lW25dO3Q9MD09PXQ/cjpNYXRoLm1pbih0LHIpfXJldHVybiB0fX0se2tleTpcInRhbGxlc3RDb2x1bW5TaXplXCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY29sdW1uU2l6ZU1hcCx0PTA7Zm9yKHZhciBuIGluIGUpe3ZhciByPWVbbl07dD1NYXRoLm1heCh0LHIpfXJldHVybiB0fX1dKSxlfSgpO2Z1bmN0aW9uIE13KGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBMdyhlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9NdyhuLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtkTihlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6TXcobikuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfXZhciBVdz0oRHc9d3c9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG47dE4odGhpcyx0KTtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShyKSxvPTA7bzxyO28rKylpW29dPWFyZ3VtZW50c1tvXTtyZXR1cm4gZE4oYU4obj1zTih0aGlzLChlPWNOKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpKSxcInN0YXRlXCIse2lzU2Nyb2xsaW5nOiExLHNjcm9sbFRvcDowfSksZE4oYU4obiksXCJfZGVib3VuY2VSZXNldElzU2Nyb2xsaW5nSWRcIix2b2lkIDApLGROKGFOKG4pLFwiX2ludmFsaWRhdGVPblVwZGF0ZVN0YXJ0SW5kZXhcIixudWxsKSxkTihhTihuKSxcIl9pbnZhbGlkYXRlT25VcGRhdGVTdG9wSW5kZXhcIixudWxsKSxkTihhTihuKSxcIl9wb3NpdGlvbkNhY2hlXCIsbmV3IFB3KSxkTihhTihuKSxcIl9zdGFydEluZGV4XCIsbnVsbCksZE4oYU4obiksXCJfc3RhcnRJbmRleE1lbW9pemVkXCIsbnVsbCksZE4oYU4obiksXCJfc3RvcEluZGV4XCIsbnVsbCksZE4oYU4obiksXCJfc3RvcEluZGV4TWVtb2l6ZWRcIixudWxsKSxkTihhTihuKSxcIl9kZWJvdW5jZVJlc2V0SXNTY3JvbGxpbmdDYWxsYmFja1wiLChmdW5jdGlvbigpe24uc2V0U3RhdGUoe2lzU2Nyb2xsaW5nOiExfSl9KSksZE4oYU4obiksXCJfc2V0U2Nyb2xsaW5nQ29udGFpbmVyUmVmXCIsKGZ1bmN0aW9uKGUpe24uX3Njcm9sbGluZ0NvbnRhaW5lcj1lfSkpLGROKGFOKG4pLFwiX29uU2Nyb2xsXCIsKGZ1bmN0aW9uKGUpe3ZhciB0PW4ucHJvcHMuaGVpZ2h0LHI9ZS5jdXJyZW50VGFyZ2V0LnNjcm9sbFRvcCxpPU1hdGgubWluKE1hdGgubWF4KDAsbi5fZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQoKS10KSxyKTtyPT09aSYmKG4uX2RlYm91bmNlUmVzZXRJc1Njcm9sbGluZygpLG4uc3RhdGUuc2Nyb2xsVG9wIT09aSYmbi5zZXRTdGF0ZSh7aXNTY3JvbGxpbmc6ITAsc2Nyb2xsVG9wOml9KSl9KSksbn1yZXR1cm4gdU4odCxlKSxvTih0LFt7a2V5OlwiY2xlYXJDZWxsUG9zaXRpb25zXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9wb3NpdGlvbkNhY2hlPW5ldyBQdyx0aGlzLmZvcmNlVXBkYXRlKCl9fSx7a2V5OlwiaW52YWxpZGF0ZUNlbGxTaXplQWZ0ZXJSZW5kZXJcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnJvd0luZGV4O251bGw9PT10aGlzLl9pbnZhbGlkYXRlT25VcGRhdGVTdGFydEluZGV4Pyh0aGlzLl9pbnZhbGlkYXRlT25VcGRhdGVTdGFydEluZGV4PXQsdGhpcy5faW52YWxpZGF0ZU9uVXBkYXRlU3RvcEluZGV4PXQpOih0aGlzLl9pbnZhbGlkYXRlT25VcGRhdGVTdGFydEluZGV4PU1hdGgubWluKHRoaXMuX2ludmFsaWRhdGVPblVwZGF0ZVN0YXJ0SW5kZXgsdCksdGhpcy5faW52YWxpZGF0ZU9uVXBkYXRlU3RvcEluZGV4PU1hdGgubWF4KHRoaXMuX2ludmFsaWRhdGVPblVwZGF0ZVN0b3BJbmRleCx0KSl9fSx7a2V5OlwicmVjb21wdXRlQ2VsbFBvc2l0aW9uc1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcG9zaXRpb25DYWNoZS5jb3VudC0xO3RoaXMuX3Bvc2l0aW9uQ2FjaGU9bmV3IFB3LHRoaXMuX3BvcHVsYXRlUG9zaXRpb25DYWNoZSgwLGUpLHRoaXMuZm9yY2VVcGRhdGUoKX19LHtrZXk6XCJjb21wb25lbnREaWRNb3VudFwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fY2hlY2tJbnZhbGlkYXRlT25VcGRhdGUoKSx0aGlzLl9pbnZva2VPblNjcm9sbENhbGxiYWNrKCksdGhpcy5faW52b2tlT25DZWxsc1JlbmRlcmVkQ2FsbGJhY2soKX19LHtrZXk6XCJjb21wb25lbnREaWRVcGRhdGVcIix2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMuX2NoZWNrSW52YWxpZGF0ZU9uVXBkYXRlKCksdGhpcy5faW52b2tlT25TY3JvbGxDYWxsYmFjaygpLHRoaXMuX2ludm9rZU9uQ2VsbHNSZW5kZXJlZENhbGxiYWNrKCksdGhpcy5wcm9wcy5zY3JvbGxUb3AhPT1lLnNjcm9sbFRvcCYmdGhpcy5fZGVib3VuY2VSZXNldElzU2Nyb2xsaW5nKCl9fSx7a2V5OlwiY29tcG9uZW50V2lsbFVubW91bnRcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2RlYm91bmNlUmVzZXRJc1Njcm9sbGluZ0lkJiZQTih0aGlzLl9kZWJvdW5jZVJlc2V0SXNTY3JvbGxpbmdJZCl9fSx7a2V5OlwicmVuZGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMsbj10aGlzLnByb3BzLHI9bi5hdXRvSGVpZ2h0LGk9bi5jZWxsQ291bnQsbz1uLmNlbGxNZWFzdXJlckNhY2hlLGE9bi5jZWxsUmVuZGVyZXIscz1uLmNsYXNzTmFtZSxjPW4uaGVpZ2h0LGw9bi5pZCx1PW4ua2V5TWFwcGVyLGY9bi5vdmVyc2NhbkJ5UGl4ZWxzLHA9bi5yb2xlLG09bi5zdHlsZSxoPW4udGFiSW5kZXgsdj1uLndpZHRoLGc9bi5yb3dEaXJlY3Rpb24seT10aGlzLnN0YXRlLEU9eS5pc1Njcm9sbGluZyxfPXkuc2Nyb2xsVG9wLEk9W10sUz10aGlzLl9nZXRFc3RpbWF0ZWRUb3RhbEhlaWdodCgpLGI9dGhpcy5fcG9zaXRpb25DYWNoZS5zaG9ydGVzdENvbHVtblNpemUsVD10aGlzLl9wb3NpdGlvbkNhY2hlLmNvdW50LEM9MDtpZih0aGlzLl9wb3NpdGlvbkNhY2hlLnJhbmdlKE1hdGgubWF4KDAsXy1mKSxjKzIqZiwoZnVuY3Rpb24obixyLGkpe3ZhciBzO3ZvaWQgMD09PWU/KEM9bixlPW4pOihDPU1hdGgubWluKEMsbiksZT1NYXRoLm1heChlLG4pKSxJLnB1c2goYSh7aW5kZXg6bixpc1Njcm9sbGluZzpFLGtleTp1KG4pLHBhcmVudDp0LHN0eWxlOihzPXtoZWlnaHQ6by5nZXRIZWlnaHQobil9LGROKHMsXCJsdHJcIj09PWc/XCJsZWZ0XCI6XCJyaWdodFwiLHIpLGROKHMsXCJwb3NpdGlvblwiLFwiYWJzb2x1dGVcIiksZE4ocyxcInRvcFwiLGkpLGROKHMsXCJ3aWR0aFwiLG8uZ2V0V2lkdGgobikpLHMpfSkpfSkpLGI8XytjK2YmJlQ8aSlmb3IodmFyIEE9TWF0aC5taW4oaS1ULE1hdGguY2VpbCgoXytjK2YtYikvby5kZWZhdWx0SGVpZ2h0KnYvby5kZWZhdWx0V2lkdGgpKSxSPVQ7UjxUK0E7UisrKWU9UixJLnB1c2goYSh7aW5kZXg6Uixpc1Njcm9sbGluZzpFLGtleTp1KFIpLHBhcmVudDp0aGlzLHN0eWxlOnt3aWR0aDpvLmdldFdpZHRoKFIpfX0pKTtyZXR1cm4gdGhpcy5fc3RhcnRJbmRleD1DLHRoaXMuX3N0b3BJbmRleD1lLGQuY3JlYXRlRWxlbWVudChcImRpdlwiLHtyZWY6dGhpcy5fc2V0U2Nyb2xsaW5nQ29udGFpbmVyUmVmLFwiYXJpYS1sYWJlbFwiOnRoaXMucHJvcHNbXCJhcmlhLWxhYmVsXCJdLGNsYXNzTmFtZTooMCxRLlopKFwiUmVhY3RWaXJ0dWFsaXplZF9fTWFzb25yeVwiLHMpLGlkOmwsb25TY3JvbGw6dGhpcy5fb25TY3JvbGwscm9sZTpwLHN0eWxlOkx3KHtib3hTaXppbmc6XCJib3JkZXItYm94XCIsZGlyZWN0aW9uOlwibHRyXCIsaGVpZ2h0OnI/XCJhdXRvXCI6YyxvdmVyZmxvd1g6XCJoaWRkZW5cIixvdmVyZmxvd1k6UzxjP1wiaGlkZGVuXCI6XCJhdXRvXCIscG9zaXRpb246XCJyZWxhdGl2ZVwiLHdpZHRoOnYsV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc6XCJ0b3VjaFwiLHdpbGxDaGFuZ2U6XCJ0cmFuc2Zvcm1cIn0sbSksdGFiSW5kZXg6aH0sZC5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcIlJlYWN0VmlydHVhbGl6ZWRfX01hc29ucnlfX2lubmVyU2Nyb2xsQ29udGFpbmVyXCIsc3R5bGU6e3dpZHRoOlwiMTAwJVwiLGhlaWdodDpTLG1heFdpZHRoOlwiMTAwJVwiLG1heEhlaWdodDpTLG92ZXJmbG93OlwiaGlkZGVuXCIscG9pbnRlckV2ZW50czpFP1wibm9uZVwiOlwiXCIscG9zaXRpb246XCJyZWxhdGl2ZVwifX0sSSkpfX0se2tleTpcIl9jaGVja0ludmFsaWRhdGVPblVwZGF0ZVwiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoXCJudW1iZXJcIj09dHlwZW9mIHRoaXMuX2ludmFsaWRhdGVPblVwZGF0ZVN0YXJ0SW5kZXgpe3ZhciBlPXRoaXMuX2ludmFsaWRhdGVPblVwZGF0ZVN0YXJ0SW5kZXgsdD10aGlzLl9pbnZhbGlkYXRlT25VcGRhdGVTdG9wSW5kZXg7dGhpcy5faW52YWxpZGF0ZU9uVXBkYXRlU3RhcnRJbmRleD1udWxsLHRoaXMuX2ludmFsaWRhdGVPblVwZGF0ZVN0b3BJbmRleD1udWxsLHRoaXMuX3BvcHVsYXRlUG9zaXRpb25DYWNoZShlLHQpLHRoaXMuZm9yY2VVcGRhdGUoKX19fSx7a2V5OlwiX2RlYm91bmNlUmVzZXRJc1Njcm9sbGluZ1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5zY3JvbGxpbmdSZXNldFRpbWVJbnRlcnZhbDt0aGlzLl9kZWJvdW5jZVJlc2V0SXNTY3JvbGxpbmdJZCYmUE4odGhpcy5fZGVib3VuY2VSZXNldElzU2Nyb2xsaW5nSWQpLHRoaXMuX2RlYm91bmNlUmVzZXRJc1Njcm9sbGluZ0lkPU1OKHRoaXMuX2RlYm91bmNlUmVzZXRJc1Njcm9sbGluZ0NhbGxiYWNrLGUpfX0se2tleTpcIl9nZXRFc3RpbWF0ZWRUb3RhbEhlaWdodFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuY2VsbENvdW50LG49ZS5jZWxsTWVhc3VyZXJDYWNoZSxyPWUud2lkdGgsaT1NYXRoLm1heCgxLE1hdGguZmxvb3Ioci9uLmRlZmF1bHRXaWR0aCkpO3JldHVybiB0aGlzLl9wb3NpdGlvbkNhY2hlLmVzdGltYXRlVG90YWxIZWlnaHQodCxpLG4uZGVmYXVsdEhlaWdodCl9fSx7a2V5OlwiX2ludm9rZU9uU2Nyb2xsQ2FsbGJhY2tcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmhlaWdodCxuPWUub25TY3JvbGwscj10aGlzLnN0YXRlLnNjcm9sbFRvcDt0aGlzLl9vblNjcm9sbE1lbW9pemVkIT09ciYmKG4oe2NsaWVudEhlaWdodDp0LHNjcm9sbEhlaWdodDp0aGlzLl9nZXRFc3RpbWF0ZWRUb3RhbEhlaWdodCgpLHNjcm9sbFRvcDpyfSksdGhpcy5fb25TY3JvbGxNZW1vaXplZD1yKX19LHtrZXk6XCJfaW52b2tlT25DZWxsc1JlbmRlcmVkQ2FsbGJhY2tcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX3N0YXJ0SW5kZXhNZW1vaXplZD09PXRoaXMuX3N0YXJ0SW5kZXgmJnRoaXMuX3N0b3BJbmRleE1lbW9pemVkPT09dGhpcy5fc3RvcEluZGV4fHwoKDAsdGhpcy5wcm9wcy5vbkNlbGxzUmVuZGVyZWQpKHtzdGFydEluZGV4OnRoaXMuX3N0YXJ0SW5kZXgsc3RvcEluZGV4OnRoaXMuX3N0b3BJbmRleH0pLHRoaXMuX3N0YXJ0SW5kZXhNZW1vaXplZD10aGlzLl9zdGFydEluZGV4LHRoaXMuX3N0b3BJbmRleE1lbW9pemVkPXRoaXMuX3N0b3BJbmRleCl9fSx7a2V5OlwiX3BvcHVsYXRlUG9zaXRpb25DYWNoZVwiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXRoaXMucHJvcHMscj1uLmNlbGxNZWFzdXJlckNhY2hlLGk9bi5jZWxsUG9zaXRpb25lcixvPWU7bzw9dDtvKyspe3ZhciBhPWkobykscz1hLmxlZnQsYz1hLnRvcDt0aGlzLl9wb3NpdGlvbkNhY2hlLnNldFBvc2l0aW9uKG8scyxjLHIuZ2V0SGVpZ2h0KG8pKX19fV0sW3trZXk6XCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDAhPT1lLnNjcm9sbFRvcCYmdC5zY3JvbGxUb3AhPT1lLnNjcm9sbFRvcD97aXNTY3JvbGxpbmc6ITAsc2Nyb2xsVG9wOmUuc2Nyb2xsVG9wfTpudWxsfX1dKSx0fShkLlB1cmVDb21wb25lbnQpLGROKHd3LFwicHJvcFR5cGVzXCIsbnVsbCksRHcpO2Z1bmN0aW9uIHh3KCl7fWROKFV3LFwiZGVmYXVsdFByb3BzXCIse2F1dG9IZWlnaHQ6ITEsa2V5TWFwcGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxvbkNlbGxzUmVuZGVyZWQ6eHcsb25TY3JvbGw6eHcsb3ZlcnNjYW5CeVBpeGVsczoyMCxyb2xlOlwiZ3JpZFwiLHNjcm9sbGluZ1Jlc2V0VGltZUludGVydmFsOjE1MCxzdHlsZTp7fSx0YWJJbmRleDowLHJvd0RpcmVjdGlvbjpcImx0clwifSksaE4oVXcpO3ZhciBGdz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2YXIgdD10aGlzLG49YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O3ROKHRoaXMsZSksZE4odGhpcyxcIl9jZWxsTWVhc3VyZXJDYWNoZVwiLHZvaWQgMCksZE4odGhpcyxcIl9jb2x1bW5JbmRleE9mZnNldFwiLHZvaWQgMCksZE4odGhpcyxcIl9yb3dJbmRleE9mZnNldFwiLHZvaWQgMCksZE4odGhpcyxcImNvbHVtbldpZHRoXCIsKGZ1bmN0aW9uKGUpe3ZhciBuPWUuaW5kZXg7dC5fY2VsbE1lYXN1cmVyQ2FjaGUuY29sdW1uV2lkdGgoe2luZGV4Om4rdC5fY29sdW1uSW5kZXhPZmZzZXR9KX0pKSxkTih0aGlzLFwicm93SGVpZ2h0XCIsKGZ1bmN0aW9uKGUpe3ZhciBuPWUuaW5kZXg7dC5fY2VsbE1lYXN1cmVyQ2FjaGUucm93SGVpZ2h0KHtpbmRleDpuK3QuX3Jvd0luZGV4T2Zmc2V0fSl9KSk7dmFyIHI9bi5jZWxsTWVhc3VyZXJDYWNoZSxpPW4uY29sdW1uSW5kZXhPZmZzZXQsbz12b2lkIDA9PT1pPzA6aSxhPW4ucm93SW5kZXhPZmZzZXQscz12b2lkIDA9PT1hPzA6YTt0aGlzLl9jZWxsTWVhc3VyZXJDYWNoZT1yLHRoaXMuX2NvbHVtbkluZGV4T2Zmc2V0PW8sdGhpcy5fcm93SW5kZXhPZmZzZXQ9c31yZXR1cm4gb04oZSxbe2tleTpcImNsZWFyXCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLl9jZWxsTWVhc3VyZXJDYWNoZS5jbGVhcihlK3RoaXMuX3Jvd0luZGV4T2Zmc2V0LHQrdGhpcy5fY29sdW1uSW5kZXhPZmZzZXQpfX0se2tleTpcImNsZWFyQWxsXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9jZWxsTWVhc3VyZXJDYWNoZS5jbGVhckFsbCgpfX0se2tleTpcImhhc0ZpeGVkSGVpZ2h0XCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2VsbE1lYXN1cmVyQ2FjaGUuaGFzRml4ZWRIZWlnaHQoKX19LHtrZXk6XCJoYXNGaXhlZFdpZHRoXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2VsbE1lYXN1cmVyQ2FjaGUuaGFzRml4ZWRXaWR0aCgpfX0se2tleTpcImdldEhlaWdodFwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3JldHVybiB0aGlzLl9jZWxsTWVhc3VyZXJDYWNoZS5nZXRIZWlnaHQoZSt0aGlzLl9yb3dJbmRleE9mZnNldCx0K3RoaXMuX2NvbHVtbkluZGV4T2Zmc2V0KX19LHtrZXk6XCJnZXRXaWR0aFwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3JldHVybiB0aGlzLl9jZWxsTWVhc3VyZXJDYWNoZS5nZXRXaWR0aChlK3RoaXMuX3Jvd0luZGV4T2Zmc2V0LHQrdGhpcy5fY29sdW1uSW5kZXhPZmZzZXQpfX0se2tleTpcImhhc1wiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3JldHVybiB0aGlzLl9jZWxsTWVhc3VyZXJDYWNoZS5oYXMoZSt0aGlzLl9yb3dJbmRleE9mZnNldCx0K3RoaXMuX2NvbHVtbkluZGV4T2Zmc2V0KX19LHtrZXk6XCJzZXRcIix2YWx1ZTpmdW5jdGlvbihlLHQsbixyKXt0aGlzLl9jZWxsTWVhc3VyZXJDYWNoZS5zZXQoZSt0aGlzLl9yb3dJbmRleE9mZnNldCx0K3RoaXMuX2NvbHVtbkluZGV4T2Zmc2V0LG4scil9fSx7a2V5OlwiZGVmYXVsdEhlaWdodFwiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jZWxsTWVhc3VyZXJDYWNoZS5kZWZhdWx0SGVpZ2h0fX0se2tleTpcImRlZmF1bHRXaWR0aFwiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jZWxsTWVhc3VyZXJDYWNoZS5kZWZhdWx0V2lkdGh9fV0pLGV9KCk7ZnVuY3Rpb24gQncoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIFZ3KGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP0J3KG4sITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe2ROKGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpCdyhuKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9dmFyIEd3PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSxuKXt2YXIgcjt0Tih0aGlzLHQpLGROKGFOKHI9c04odGhpcyxjTih0KS5jYWxsKHRoaXMsZSxuKSkpLFwic3RhdGVcIix7c2Nyb2xsTGVmdDowLHNjcm9sbFRvcDowLHNjcm9sbGJhclNpemU6MCxzaG93SG9yaXpvbnRhbFNjcm9sbGJhcjohMSxzaG93VmVydGljYWxTY3JvbGxiYXI6ITF9KSxkTihhTihyKSxcIl9kZWZlcnJlZEludmFsaWRhdGVDb2x1bW5JbmRleFwiLG51bGwpLGROKGFOKHIpLFwiX2RlZmVycmVkSW52YWxpZGF0ZVJvd0luZGV4XCIsbnVsbCksZE4oYU4ociksXCJfYm90dG9tTGVmdEdyaWRSZWZcIiwoZnVuY3Rpb24oZSl7ci5fYm90dG9tTGVmdEdyaWQ9ZX0pKSxkTihhTihyKSxcIl9ib3R0b21SaWdodEdyaWRSZWZcIiwoZnVuY3Rpb24oZSl7ci5fYm90dG9tUmlnaHRHcmlkPWV9KSksZE4oYU4ociksXCJfY2VsbFJlbmRlcmVyQm90dG9tTGVmdEdyaWRcIiwoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yb3dJbmRleCxuPXlOKGUsW1wicm93SW5kZXhcIl0pLGk9ci5wcm9wcyxvPWkuY2VsbFJlbmRlcmVyLGE9aS5maXhlZFJvd0NvdW50O3JldHVybiB0PT09aS5yb3dDb3VudC1hP2QuY3JlYXRlRWxlbWVudChcImRpdlwiLHtrZXk6bi5rZXksc3R5bGU6Vncoe30sbi5zdHlsZSx7aGVpZ2h0OjIwfSl9KTpvKFZ3KHt9LG4se3BhcmVudDphTihyKSxyb3dJbmRleDp0K2F9KSl9KSksZE4oYU4ociksXCJfY2VsbFJlbmRlcmVyQm90dG9tUmlnaHRHcmlkXCIsKGZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sdW1uSW5kZXgsbj1lLnJvd0luZGV4LGk9eU4oZSxbXCJjb2x1bW5JbmRleFwiLFwicm93SW5kZXhcIl0pLG89ci5wcm9wcyxhPW8uY2VsbFJlbmRlcmVyLHM9by5maXhlZENvbHVtbkNvdW50LGM9by5maXhlZFJvd0NvdW50O3JldHVybiBhKFZ3KHt9LGkse2NvbHVtbkluZGV4OnQrcyxwYXJlbnQ6YU4ocikscm93SW5kZXg6bitjfSkpfSkpLGROKGFOKHIpLFwiX2NlbGxSZW5kZXJlclRvcFJpZ2h0R3JpZFwiLChmdW5jdGlvbihlKXt2YXIgdD1lLmNvbHVtbkluZGV4LG49eU4oZSxbXCJjb2x1bW5JbmRleFwiXSksaT1yLnByb3BzLG89aS5jZWxsUmVuZGVyZXIsYT1pLmNvbHVtbkNvdW50LHM9aS5maXhlZENvbHVtbkNvdW50O3JldHVybiB0PT09YS1zP2QuY3JlYXRlRWxlbWVudChcImRpdlwiLHtrZXk6bi5rZXksc3R5bGU6Vncoe30sbi5zdHlsZSx7d2lkdGg6MjB9KX0pOm8oVncoe30sbix7Y29sdW1uSW5kZXg6dCtzLHBhcmVudDphTihyKX0pKX0pKSxkTihhTihyKSxcIl9jb2x1bW5XaWR0aFJpZ2h0R3JpZFwiLChmdW5jdGlvbihlKXt2YXIgdD1lLmluZGV4LG49ci5wcm9wcyxpPW4uY29sdW1uQ291bnQsbz1uLmZpeGVkQ29sdW1uQ291bnQsYT1uLmNvbHVtbldpZHRoLHM9ci5zdGF0ZSxjPXMuc2Nyb2xsYmFyU2l6ZTtyZXR1cm4gcy5zaG93SG9yaXpvbnRhbFNjcm9sbGJhciYmdD09PWktbz9jOlwiZnVuY3Rpb25cIj09dHlwZW9mIGE/YSh7aW5kZXg6dCtvfSk6YX0pKSxkTihhTihyKSxcIl9vblNjcm9sbFwiLChmdW5jdGlvbihlKXt2YXIgdD1lLnNjcm9sbExlZnQsbj1lLnNjcm9sbFRvcDtyLnNldFN0YXRlKHtzY3JvbGxMZWZ0OnQsc2Nyb2xsVG9wOm59KTt2YXIgaT1yLnByb3BzLm9uU2Nyb2xsO2kmJmkoZSl9KSksZE4oYU4ociksXCJfb25TY3JvbGxiYXJQcmVzZW5jZUNoYW5nZVwiLChmdW5jdGlvbihlKXt2YXIgdD1lLmhvcml6b250YWwsbj1lLnNpemUsaT1lLnZlcnRpY2FsLG89ci5zdGF0ZSxhPW8uc2hvd0hvcml6b250YWxTY3JvbGxiYXIscz1vLnNob3dWZXJ0aWNhbFNjcm9sbGJhcjtpZih0IT09YXx8aSE9PXMpe3Iuc2V0U3RhdGUoe3Njcm9sbGJhclNpemU6bixzaG93SG9yaXpvbnRhbFNjcm9sbGJhcjp0LHNob3dWZXJ0aWNhbFNjcm9sbGJhcjppfSk7dmFyIGM9ci5wcm9wcy5vblNjcm9sbGJhclByZXNlbmNlQ2hhbmdlO1wiZnVuY3Rpb25cIj09dHlwZW9mIGMmJmMoe2hvcml6b250YWw6dCxzaXplOm4sdmVydGljYWw6aX0pfX0pKSxkTihhTihyKSxcIl9vblNjcm9sbExlZnRcIiwoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zY3JvbGxMZWZ0O3IuX29uU2Nyb2xsKHtzY3JvbGxMZWZ0OnQsc2Nyb2xsVG9wOnIuc3RhdGUuc2Nyb2xsVG9wfSl9KSksZE4oYU4ociksXCJfb25TY3JvbGxUb3BcIiwoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zY3JvbGxUb3A7ci5fb25TY3JvbGwoe3Njcm9sbFRvcDp0LHNjcm9sbExlZnQ6ci5zdGF0ZS5zY3JvbGxMZWZ0fSl9KSksZE4oYU4ociksXCJfcm93SGVpZ2h0Qm90dG9tR3JpZFwiLChmdW5jdGlvbihlKXt2YXIgdD1lLmluZGV4LG49ci5wcm9wcyxpPW4uZml4ZWRSb3dDb3VudCxvPW4ucm93Q291bnQsYT1uLnJvd0hlaWdodCxzPXIuc3RhdGUsYz1zLnNjcm9sbGJhclNpemU7cmV0dXJuIHMuc2hvd1ZlcnRpY2FsU2Nyb2xsYmFyJiZ0PT09by1pP2M6XCJmdW5jdGlvblwiPT10eXBlb2YgYT9hKHtpbmRleDp0K2l9KTphfSkpLGROKGFOKHIpLFwiX3RvcExlZnRHcmlkUmVmXCIsKGZ1bmN0aW9uKGUpe3IuX3RvcExlZnRHcmlkPWV9KSksZE4oYU4ociksXCJfdG9wUmlnaHRHcmlkUmVmXCIsKGZ1bmN0aW9uKGUpe3IuX3RvcFJpZ2h0R3JpZD1lfSkpO3ZhciBpPWUuZGVmZXJyZWRNZWFzdXJlbWVudENhY2hlLG89ZS5maXhlZENvbHVtbkNvdW50LGE9ZS5maXhlZFJvd0NvdW50O3JldHVybiByLl9tYXliZUNhbGN1bGF0ZUNhY2hlZFN0eWxlcyghMCksaSYmKHIuX2RlZmVycmVkTWVhc3VyZW1lbnRDYWNoZUJvdHRvbUxlZnRHcmlkPWE+MD9uZXcgRncoe2NlbGxNZWFzdXJlckNhY2hlOmksY29sdW1uSW5kZXhPZmZzZXQ6MCxyb3dJbmRleE9mZnNldDphfSk6aSxyLl9kZWZlcnJlZE1lYXN1cmVtZW50Q2FjaGVCb3R0b21SaWdodEdyaWQ9bz4wfHxhPjA/bmV3IEZ3KHtjZWxsTWVhc3VyZXJDYWNoZTppLGNvbHVtbkluZGV4T2Zmc2V0Om8scm93SW5kZXhPZmZzZXQ6YX0pOmksci5fZGVmZXJyZWRNZWFzdXJlbWVudENhY2hlVG9wUmlnaHRHcmlkPW8+MD9uZXcgRncoe2NlbGxNZWFzdXJlckNhY2hlOmksY29sdW1uSW5kZXhPZmZzZXQ6byxyb3dJbmRleE9mZnNldDowfSk6aSkscn1yZXR1cm4gdU4odCxlKSxvTih0LFt7a2V5OlwiZm9yY2VVcGRhdGVHcmlkc1wiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fYm90dG9tTGVmdEdyaWQmJnRoaXMuX2JvdHRvbUxlZnRHcmlkLmZvcmNlVXBkYXRlKCksdGhpcy5fYm90dG9tUmlnaHRHcmlkJiZ0aGlzLl9ib3R0b21SaWdodEdyaWQuZm9yY2VVcGRhdGUoKSx0aGlzLl90b3BMZWZ0R3JpZCYmdGhpcy5fdG9wTGVmdEdyaWQuZm9yY2VVcGRhdGUoKSx0aGlzLl90b3BSaWdodEdyaWQmJnRoaXMuX3RvcFJpZ2h0R3JpZC5mb3JjZVVwZGF0ZSgpfX0se2tleTpcImludmFsaWRhdGVDZWxsU2l6ZUFmdGVyUmVuZGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sdD1lLmNvbHVtbkluZGV4LG49dm9pZCAwPT09dD8wOnQscj1lLnJvd0luZGV4LGk9dm9pZCAwPT09cj8wOnI7dGhpcy5fZGVmZXJyZWRJbnZhbGlkYXRlQ29sdW1uSW5kZXg9XCJudW1iZXJcIj09dHlwZW9mIHRoaXMuX2RlZmVycmVkSW52YWxpZGF0ZUNvbHVtbkluZGV4P01hdGgubWluKHRoaXMuX2RlZmVycmVkSW52YWxpZGF0ZUNvbHVtbkluZGV4LG4pOm4sdGhpcy5fZGVmZXJyZWRJbnZhbGlkYXRlUm93SW5kZXg9XCJudW1iZXJcIj09dHlwZW9mIHRoaXMuX2RlZmVycmVkSW52YWxpZGF0ZVJvd0luZGV4P01hdGgubWluKHRoaXMuX2RlZmVycmVkSW52YWxpZGF0ZVJvd0luZGV4LGkpOml9fSx7a2V5OlwibWVhc3VyZUFsbENlbGxzXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9ib3R0b21MZWZ0R3JpZCYmdGhpcy5fYm90dG9tTGVmdEdyaWQubWVhc3VyZUFsbENlbGxzKCksdGhpcy5fYm90dG9tUmlnaHRHcmlkJiZ0aGlzLl9ib3R0b21SaWdodEdyaWQubWVhc3VyZUFsbENlbGxzKCksdGhpcy5fdG9wTGVmdEdyaWQmJnRoaXMuX3RvcExlZnRHcmlkLm1lYXN1cmVBbGxDZWxscygpLHRoaXMuX3RvcFJpZ2h0R3JpZCYmdGhpcy5fdG9wUmlnaHRHcmlkLm1lYXN1cmVBbGxDZWxscygpfX0se2tleTpcInJlY29tcHV0ZUdyaWRTaXplXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sdD1lLmNvbHVtbkluZGV4LG49dm9pZCAwPT09dD8wOnQscj1lLnJvd0luZGV4LGk9dm9pZCAwPT09cj8wOnIsbz10aGlzLnByb3BzLGE9by5maXhlZENvbHVtbkNvdW50LHM9by5maXhlZFJvd0NvdW50LGM9TWF0aC5tYXgoMCxuLWEpLGw9TWF0aC5tYXgoMCxpLXMpO3RoaXMuX2JvdHRvbUxlZnRHcmlkJiZ0aGlzLl9ib3R0b21MZWZ0R3JpZC5yZWNvbXB1dGVHcmlkU2l6ZSh7Y29sdW1uSW5kZXg6bixyb3dJbmRleDpsfSksdGhpcy5fYm90dG9tUmlnaHRHcmlkJiZ0aGlzLl9ib3R0b21SaWdodEdyaWQucmVjb21wdXRlR3JpZFNpemUoe2NvbHVtbkluZGV4OmMscm93SW5kZXg6bH0pLHRoaXMuX3RvcExlZnRHcmlkJiZ0aGlzLl90b3BMZWZ0R3JpZC5yZWNvbXB1dGVHcmlkU2l6ZSh7Y29sdW1uSW5kZXg6bixyb3dJbmRleDppfSksdGhpcy5fdG9wUmlnaHRHcmlkJiZ0aGlzLl90b3BSaWdodEdyaWQucmVjb21wdXRlR3JpZFNpemUoe2NvbHVtbkluZGV4OmMscm93SW5kZXg6aX0pLHRoaXMuX2xlZnRHcmlkV2lkdGg9bnVsbCx0aGlzLl90b3BHcmlkSGVpZ2h0PW51bGwsdGhpcy5fbWF5YmVDYWxjdWxhdGVDYWNoZWRTdHlsZXMoITApfX0se2tleTpcImNvbXBvbmVudERpZE1vdW50XCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5zY3JvbGxMZWZ0LG49ZS5zY3JvbGxUb3A7aWYodD4wfHxuPjApe3ZhciByPXt9O3Q+MCYmKHIuc2Nyb2xsTGVmdD10KSxuPjAmJihyLnNjcm9sbFRvcD1uKSx0aGlzLnNldFN0YXRlKHIpfXRoaXMuX2hhbmRsZUludmFsaWRhdGVkR3JpZFNpemUoKX19LHtrZXk6XCJjb21wb25lbnREaWRVcGRhdGVcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2hhbmRsZUludmFsaWRhdGVkR3JpZFNpemUoKX19LHtrZXk6XCJyZW5kZXJcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLm9uU2Nyb2xsLG49ZS5vblNlY3Rpb25SZW5kZXJlZCxyPShlLm9uU2Nyb2xsYmFyUHJlc2VuY2VDaGFuZ2UsZS5zY3JvbGxMZWZ0LGUuc2Nyb2xsVG9Db2x1bW4pLGk9KGUuc2Nyb2xsVG9wLGUuc2Nyb2xsVG9Sb3cpLG89eU4oZSxbXCJvblNjcm9sbFwiLFwib25TZWN0aW9uUmVuZGVyZWRcIixcIm9uU2Nyb2xsYmFyUHJlc2VuY2VDaGFuZ2VcIixcInNjcm9sbExlZnRcIixcInNjcm9sbFRvQ29sdW1uXCIsXCJzY3JvbGxUb3BcIixcInNjcm9sbFRvUm93XCJdKTtpZih0aGlzLl9wcmVwYXJlRm9yUmVuZGVyKCksMD09PXRoaXMucHJvcHMud2lkdGh8fDA9PT10aGlzLnByb3BzLmhlaWdodClyZXR1cm4gbnVsbDt2YXIgYT10aGlzLnN0YXRlLHM9YS5zY3JvbGxMZWZ0LGM9YS5zY3JvbGxUb3A7cmV0dXJuIGQuY3JlYXRlRWxlbWVudChcImRpdlwiLHtzdHlsZTp0aGlzLl9jb250YWluZXJPdXRlclN0eWxlfSxkLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7c3R5bGU6dGhpcy5fY29udGFpbmVyVG9wU3R5bGV9LHRoaXMuX3JlbmRlclRvcExlZnRHcmlkKG8pLHRoaXMuX3JlbmRlclRvcFJpZ2h0R3JpZChWdyh7fSxvLHtvblNjcm9sbDp0LHNjcm9sbExlZnQ6c30pKSksZC5jcmVhdGVFbGVtZW50KFwiZGl2XCIse3N0eWxlOnRoaXMuX2NvbnRhaW5lckJvdHRvbVN0eWxlfSx0aGlzLl9yZW5kZXJCb3R0b21MZWZ0R3JpZChWdyh7fSxvLHtvblNjcm9sbDp0LHNjcm9sbFRvcDpjfSkpLHRoaXMuX3JlbmRlckJvdHRvbVJpZ2h0R3JpZChWdyh7fSxvLHtvblNjcm9sbDp0LG9uU2VjdGlvblJlbmRlcmVkOm4sc2Nyb2xsTGVmdDpzLHNjcm9sbFRvQ29sdW1uOnIsc2Nyb2xsVG9Sb3c6aSxzY3JvbGxUb3A6Y30pKSkpfX0se2tleTpcIl9nZXRCb3R0b21HcmlkSGVpZ2h0XCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaGVpZ2h0LXRoaXMuX2dldFRvcEdyaWRIZWlnaHQoZSl9fSx7a2V5OlwiX2dldExlZnRHcmlkV2lkdGhcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmZpeGVkQ29sdW1uQ291bnQsbj1lLmNvbHVtbldpZHRoO2lmKG51bGw9PXRoaXMuX2xlZnRHcmlkV2lkdGgpaWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygbil7Zm9yKHZhciByPTAsaT0wO2k8dDtpKyspcis9bih7aW5kZXg6aX0pO3RoaXMuX2xlZnRHcmlkV2lkdGg9cn1lbHNlIHRoaXMuX2xlZnRHcmlkV2lkdGg9bip0O3JldHVybiB0aGlzLl9sZWZ0R3JpZFdpZHRofX0se2tleTpcIl9nZXRSaWdodEdyaWRXaWR0aFwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlLndpZHRoLXRoaXMuX2dldExlZnRHcmlkV2lkdGgoZSl9fSx7a2V5OlwiX2dldFRvcEdyaWRIZWlnaHRcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmZpeGVkUm93Q291bnQsbj1lLnJvd0hlaWdodDtpZihudWxsPT10aGlzLl90b3BHcmlkSGVpZ2h0KWlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4pe2Zvcih2YXIgcj0wLGk9MDtpPHQ7aSsrKXIrPW4oe2luZGV4Oml9KTt0aGlzLl90b3BHcmlkSGVpZ2h0PXJ9ZWxzZSB0aGlzLl90b3BHcmlkSGVpZ2h0PW4qdDtyZXR1cm4gdGhpcy5fdG9wR3JpZEhlaWdodH19LHtrZXk6XCJfaGFuZGxlSW52YWxpZGF0ZWRHcmlkU2l6ZVwiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoXCJudW1iZXJcIj09dHlwZW9mIHRoaXMuX2RlZmVycmVkSW52YWxpZGF0ZUNvbHVtbkluZGV4KXt2YXIgZT10aGlzLl9kZWZlcnJlZEludmFsaWRhdGVDb2x1bW5JbmRleCx0PXRoaXMuX2RlZmVycmVkSW52YWxpZGF0ZVJvd0luZGV4O3RoaXMuX2RlZmVycmVkSW52YWxpZGF0ZUNvbHVtbkluZGV4PW51bGwsdGhpcy5fZGVmZXJyZWRJbnZhbGlkYXRlUm93SW5kZXg9bnVsbCx0aGlzLnJlY29tcHV0ZUdyaWRTaXplKHtjb2x1bW5JbmRleDplLHJvd0luZGV4OnR9KSx0aGlzLmZvcmNlVXBkYXRlKCl9fX0se2tleTpcIl9tYXliZUNhbGN1bGF0ZUNhY2hlZFN0eWxlc1wiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMsbj10LmNvbHVtbldpZHRoLHI9dC5lbmFibGVGaXhlZENvbHVtblNjcm9sbCxpPXQuZW5hYmxlRml4ZWRSb3dTY3JvbGwsbz10LmhlaWdodCxhPXQuZml4ZWRDb2x1bW5Db3VudCxzPXQuZml4ZWRSb3dDb3VudCxjPXQucm93SGVpZ2h0LGw9dC5zdHlsZSx1PXQuc3R5bGVCb3R0b21MZWZ0R3JpZCxkPXQuc3R5bGVCb3R0b21SaWdodEdyaWQsZj10LnN0eWxlVG9wTGVmdEdyaWQscD10LnN0eWxlVG9wUmlnaHRHcmlkLG09dC53aWR0aCxoPWV8fG8hPT10aGlzLl9sYXN0UmVuZGVyZWRIZWlnaHR8fG0hPT10aGlzLl9sYXN0UmVuZGVyZWRXaWR0aCx2PWV8fG4hPT10aGlzLl9sYXN0UmVuZGVyZWRDb2x1bW5XaWR0aHx8YSE9PXRoaXMuX2xhc3RSZW5kZXJlZEZpeGVkQ29sdW1uQ291bnQsZz1lfHxzIT09dGhpcy5fbGFzdFJlbmRlcmVkRml4ZWRSb3dDb3VudHx8YyE9PXRoaXMuX2xhc3RSZW5kZXJlZFJvd0hlaWdodDsoZXx8aHx8bCE9PXRoaXMuX2xhc3RSZW5kZXJlZFN0eWxlKSYmKHRoaXMuX2NvbnRhaW5lck91dGVyU3R5bGU9Vncoe2hlaWdodDpvLG92ZXJmbG93OlwidmlzaWJsZVwiLHdpZHRoOm19LGwpKSwoZXx8aHx8ZykmJih0aGlzLl9jb250YWluZXJUb3BTdHlsZT17aGVpZ2h0OnRoaXMuX2dldFRvcEdyaWRIZWlnaHQodGhpcy5wcm9wcykscG9zaXRpb246XCJyZWxhdGl2ZVwiLHdpZHRoOm19LHRoaXMuX2NvbnRhaW5lckJvdHRvbVN0eWxlPXtoZWlnaHQ6by10aGlzLl9nZXRUb3BHcmlkSGVpZ2h0KHRoaXMucHJvcHMpLG92ZXJmbG93OlwidmlzaWJsZVwiLHBvc2l0aW9uOlwicmVsYXRpdmVcIix3aWR0aDptfSksKGV8fHUhPT10aGlzLl9sYXN0UmVuZGVyZWRTdHlsZUJvdHRvbUxlZnRHcmlkKSYmKHRoaXMuX2JvdHRvbUxlZnRHcmlkU3R5bGU9Vncoe2xlZnQ6MCxvdmVyZmxvd1g6XCJoaWRkZW5cIixvdmVyZmxvd1k6cj9cImF1dG9cIjpcImhpZGRlblwiLHBvc2l0aW9uOlwiYWJzb2x1dGVcIn0sdSkpLChlfHx2fHxkIT09dGhpcy5fbGFzdFJlbmRlcmVkU3R5bGVCb3R0b21SaWdodEdyaWQpJiYodGhpcy5fYm90dG9tUmlnaHRHcmlkU3R5bGU9Vncoe2xlZnQ6dGhpcy5fZ2V0TGVmdEdyaWRXaWR0aCh0aGlzLnByb3BzKSxwb3NpdGlvbjpcImFic29sdXRlXCJ9LGQpKSwoZXx8ZiE9PXRoaXMuX2xhc3RSZW5kZXJlZFN0eWxlVG9wTGVmdEdyaWQpJiYodGhpcy5fdG9wTGVmdEdyaWRTdHlsZT1Wdyh7bGVmdDowLG92ZXJmbG93WDpcImhpZGRlblwiLG92ZXJmbG93WTpcImhpZGRlblwiLHBvc2l0aW9uOlwiYWJzb2x1dGVcIix0b3A6MH0sZikpLChlfHx2fHxwIT09dGhpcy5fbGFzdFJlbmRlcmVkU3R5bGVUb3BSaWdodEdyaWQpJiYodGhpcy5fdG9wUmlnaHRHcmlkU3R5bGU9Vncoe2xlZnQ6dGhpcy5fZ2V0TGVmdEdyaWRXaWR0aCh0aGlzLnByb3BzKSxvdmVyZmxvd1g6aT9cImF1dG9cIjpcImhpZGRlblwiLG92ZXJmbG93WTpcImhpZGRlblwiLHBvc2l0aW9uOlwiYWJzb2x1dGVcIix0b3A6MH0scCkpLHRoaXMuX2xhc3RSZW5kZXJlZENvbHVtbldpZHRoPW4sdGhpcy5fbGFzdFJlbmRlcmVkRml4ZWRDb2x1bW5Db3VudD1hLHRoaXMuX2xhc3RSZW5kZXJlZEZpeGVkUm93Q291bnQ9cyx0aGlzLl9sYXN0UmVuZGVyZWRIZWlnaHQ9byx0aGlzLl9sYXN0UmVuZGVyZWRSb3dIZWlnaHQ9Yyx0aGlzLl9sYXN0UmVuZGVyZWRTdHlsZT1sLHRoaXMuX2xhc3RSZW5kZXJlZFN0eWxlQm90dG9tTGVmdEdyaWQ9dSx0aGlzLl9sYXN0UmVuZGVyZWRTdHlsZUJvdHRvbVJpZ2h0R3JpZD1kLHRoaXMuX2xhc3RSZW5kZXJlZFN0eWxlVG9wTGVmdEdyaWQ9Zix0aGlzLl9sYXN0UmVuZGVyZWRTdHlsZVRvcFJpZ2h0R3JpZD1wLHRoaXMuX2xhc3RSZW5kZXJlZFdpZHRoPW19fSx7a2V5OlwiX3ByZXBhcmVGb3JSZW5kZXJcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2xhc3RSZW5kZXJlZENvbHVtbldpZHRoPT09dGhpcy5wcm9wcy5jb2x1bW5XaWR0aCYmdGhpcy5fbGFzdFJlbmRlcmVkRml4ZWRDb2x1bW5Db3VudD09PXRoaXMucHJvcHMuZml4ZWRDb2x1bW5Db3VudHx8KHRoaXMuX2xlZnRHcmlkV2lkdGg9bnVsbCksdGhpcy5fbGFzdFJlbmRlcmVkRml4ZWRSb3dDb3VudD09PXRoaXMucHJvcHMuZml4ZWRSb3dDb3VudCYmdGhpcy5fbGFzdFJlbmRlcmVkUm93SGVpZ2h0PT09dGhpcy5wcm9wcy5yb3dIZWlnaHR8fCh0aGlzLl90b3BHcmlkSGVpZ2h0PW51bGwpLHRoaXMuX21heWJlQ2FsY3VsYXRlQ2FjaGVkU3R5bGVzKCksdGhpcy5fbGFzdFJlbmRlcmVkQ29sdW1uV2lkdGg9dGhpcy5wcm9wcy5jb2x1bW5XaWR0aCx0aGlzLl9sYXN0UmVuZGVyZWRGaXhlZENvbHVtbkNvdW50PXRoaXMucHJvcHMuZml4ZWRDb2x1bW5Db3VudCx0aGlzLl9sYXN0UmVuZGVyZWRGaXhlZFJvd0NvdW50PXRoaXMucHJvcHMuZml4ZWRSb3dDb3VudCx0aGlzLl9sYXN0UmVuZGVyZWRSb3dIZWlnaHQ9dGhpcy5wcm9wcy5yb3dIZWlnaHR9fSx7a2V5OlwiX3JlbmRlckJvdHRvbUxlZnRHcmlkXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5lbmFibGVGaXhlZENvbHVtblNjcm9sbCxuPWUuZml4ZWRDb2x1bW5Db3VudCxyPWUuZml4ZWRSb3dDb3VudCxpPWUucm93Q291bnQsbz1lLmhpZGVCb3R0b21MZWZ0R3JpZFNjcm9sbGJhcixhPXRoaXMuc3RhdGUuc2hvd1ZlcnRpY2FsU2Nyb2xsYmFyO2lmKCFuKXJldHVybiBudWxsO3ZhciBzPWE/MTowLGM9dGhpcy5fZ2V0Qm90dG9tR3JpZEhlaWdodChlKSxsPXRoaXMuX2dldExlZnRHcmlkV2lkdGgoZSksdT10aGlzLnN0YXRlLnNob3dWZXJ0aWNhbFNjcm9sbGJhcj90aGlzLnN0YXRlLnNjcm9sbGJhclNpemU6MCxmPW8/bCt1OmwscD1kLmNyZWF0ZUVsZW1lbnQoQk4sdk4oe30sZSx7Y2VsbFJlbmRlcmVyOnRoaXMuX2NlbGxSZW5kZXJlckJvdHRvbUxlZnRHcmlkLGNsYXNzTmFtZTp0aGlzLnByb3BzLmNsYXNzTmFtZUJvdHRvbUxlZnRHcmlkLGNvbHVtbkNvdW50Om4sZGVmZXJyZWRNZWFzdXJlbWVudENhY2hlOnRoaXMuX2RlZmVycmVkTWVhc3VyZW1lbnRDYWNoZUJvdHRvbUxlZnRHcmlkLGhlaWdodDpjLG9uU2Nyb2xsOnQ/dGhpcy5fb25TY3JvbGxUb3A6dm9pZCAwLHJlZjp0aGlzLl9ib3R0b21MZWZ0R3JpZFJlZixyb3dDb3VudDpNYXRoLm1heCgwLGktcikrcyxyb3dIZWlnaHQ6dGhpcy5fcm93SGVpZ2h0Qm90dG9tR3JpZCxzdHlsZTp0aGlzLl9ib3R0b21MZWZ0R3JpZFN0eWxlLHRhYkluZGV4Om51bGwsd2lkdGg6Zn0pKTtyZXR1cm4gbz9kLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwiQm90dG9tTGVmdEdyaWRfU2Nyb2xsV3JhcHBlclwiLHN0eWxlOlZ3KHt9LHRoaXMuX2JvdHRvbUxlZnRHcmlkU3R5bGUse2hlaWdodDpjLHdpZHRoOmwsb3ZlcmZsb3dZOlwiaGlkZGVuXCJ9KX0scCk6cH19LHtrZXk6XCJfcmVuZGVyQm90dG9tUmlnaHRHcmlkXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2x1bW5Db3VudCxuPWUuZml4ZWRDb2x1bW5Db3VudCxyPWUuZml4ZWRSb3dDb3VudCxpPWUucm93Q291bnQsbz1lLnNjcm9sbFRvQ29sdW1uLGE9ZS5zY3JvbGxUb1JvdztyZXR1cm4gZC5jcmVhdGVFbGVtZW50KEJOLHZOKHt9LGUse2NlbGxSZW5kZXJlcjp0aGlzLl9jZWxsUmVuZGVyZXJCb3R0b21SaWdodEdyaWQsY2xhc3NOYW1lOnRoaXMucHJvcHMuY2xhc3NOYW1lQm90dG9tUmlnaHRHcmlkLGNvbHVtbkNvdW50Ok1hdGgubWF4KDAsdC1uKSxjb2x1bW5XaWR0aDp0aGlzLl9jb2x1bW5XaWR0aFJpZ2h0R3JpZCxkZWZlcnJlZE1lYXN1cmVtZW50Q2FjaGU6dGhpcy5fZGVmZXJyZWRNZWFzdXJlbWVudENhY2hlQm90dG9tUmlnaHRHcmlkLGhlaWdodDp0aGlzLl9nZXRCb3R0b21HcmlkSGVpZ2h0KGUpLG9uU2Nyb2xsOnRoaXMuX29uU2Nyb2xsLG9uU2Nyb2xsYmFyUHJlc2VuY2VDaGFuZ2U6dGhpcy5fb25TY3JvbGxiYXJQcmVzZW5jZUNoYW5nZSxyZWY6dGhpcy5fYm90dG9tUmlnaHRHcmlkUmVmLHJvd0NvdW50Ok1hdGgubWF4KDAsaS1yKSxyb3dIZWlnaHQ6dGhpcy5fcm93SGVpZ2h0Qm90dG9tR3JpZCxzY3JvbGxUb0NvbHVtbjpvLW4sc2Nyb2xsVG9Sb3c6YS1yLHN0eWxlOnRoaXMuX2JvdHRvbVJpZ2h0R3JpZFN0eWxlLHdpZHRoOnRoaXMuX2dldFJpZ2h0R3JpZFdpZHRoKGUpfSkpfX0se2tleTpcIl9yZW5kZXJUb3BMZWZ0R3JpZFwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZml4ZWRDb2x1bW5Db3VudCxuPWUuZml4ZWRSb3dDb3VudDtyZXR1cm4gdCYmbj9kLmNyZWF0ZUVsZW1lbnQoQk4sdk4oe30sZSx7Y2xhc3NOYW1lOnRoaXMucHJvcHMuY2xhc3NOYW1lVG9wTGVmdEdyaWQsY29sdW1uQ291bnQ6dCxoZWlnaHQ6dGhpcy5fZ2V0VG9wR3JpZEhlaWdodChlKSxyZWY6dGhpcy5fdG9wTGVmdEdyaWRSZWYscm93Q291bnQ6bixzdHlsZTp0aGlzLl90b3BMZWZ0R3JpZFN0eWxlLHRhYkluZGV4Om51bGwsd2lkdGg6dGhpcy5fZ2V0TGVmdEdyaWRXaWR0aChlKX0pKTpudWxsfX0se2tleTpcIl9yZW5kZXJUb3BSaWdodEdyaWRcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmNvbHVtbkNvdW50LG49ZS5lbmFibGVGaXhlZFJvd1Njcm9sbCxyPWUuZml4ZWRDb2x1bW5Db3VudCxpPWUuZml4ZWRSb3dDb3VudCxvPWUuc2Nyb2xsTGVmdCxhPWUuaGlkZVRvcFJpZ2h0R3JpZFNjcm9sbGJhcixzPXRoaXMuc3RhdGUsYz1zLnNob3dIb3Jpem9udGFsU2Nyb2xsYmFyLGw9cy5zY3JvbGxiYXJTaXplO2lmKCFpKXJldHVybiBudWxsO3ZhciB1PWM/MTowLGY9dGhpcy5fZ2V0VG9wR3JpZEhlaWdodChlKSxwPXRoaXMuX2dldFJpZ2h0R3JpZFdpZHRoKGUpLG09Yz9sOjAsaD1mLHY9dGhpcy5fdG9wUmlnaHRHcmlkU3R5bGU7YSYmKGg9ZittLHY9Vncoe30sdGhpcy5fdG9wUmlnaHRHcmlkU3R5bGUse2xlZnQ6MH0pKTt2YXIgZz1kLmNyZWF0ZUVsZW1lbnQoQk4sdk4oe30sZSx7Y2VsbFJlbmRlcmVyOnRoaXMuX2NlbGxSZW5kZXJlclRvcFJpZ2h0R3JpZCxjbGFzc05hbWU6dGhpcy5wcm9wcy5jbGFzc05hbWVUb3BSaWdodEdyaWQsY29sdW1uQ291bnQ6TWF0aC5tYXgoMCx0LXIpK3UsY29sdW1uV2lkdGg6dGhpcy5fY29sdW1uV2lkdGhSaWdodEdyaWQsZGVmZXJyZWRNZWFzdXJlbWVudENhY2hlOnRoaXMuX2RlZmVycmVkTWVhc3VyZW1lbnRDYWNoZVRvcFJpZ2h0R3JpZCxoZWlnaHQ6aCxvblNjcm9sbDpuP3RoaXMuX29uU2Nyb2xsTGVmdDp2b2lkIDAscmVmOnRoaXMuX3RvcFJpZ2h0R3JpZFJlZixyb3dDb3VudDppLHNjcm9sbExlZnQ6byxzdHlsZTp2LHRhYkluZGV4Om51bGwsd2lkdGg6cH0pKTtyZXR1cm4gYT9kLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwiVG9wUmlnaHRHcmlkX1Njcm9sbFdyYXBwZXJcIixzdHlsZTpWdyh7fSx0aGlzLl90b3BSaWdodEdyaWRTdHlsZSx7aGVpZ2h0OmYsd2lkdGg6cCxvdmVyZmxvd1g6XCJoaWRkZW5cIn0pfSxnKTpnfX1dLFt7a2V5OlwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5zY3JvbGxMZWZ0IT09dC5zY3JvbGxMZWZ0fHxlLnNjcm9sbFRvcCE9PXQuc2Nyb2xsVG9wP3tzY3JvbGxMZWZ0Om51bGwhPWUuc2Nyb2xsTGVmdCYmZS5zY3JvbGxMZWZ0Pj0wP2Uuc2Nyb2xsTGVmdDp0LnNjcm9sbExlZnQsc2Nyb2xsVG9wOm51bGwhPWUuc2Nyb2xsVG9wJiZlLnNjcm9sbFRvcD49MD9lLnNjcm9sbFRvcDp0LnNjcm9sbFRvcH06bnVsbH19XSksdH0oZC5QdXJlQ29tcG9uZW50KTtmdW5jdGlvbiBIdyhlKXt2YXIgdD1lLmNsYXNzTmFtZSxuPWUuY29sdW1ucyxyPWUuc3R5bGU7cmV0dXJuIGQuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6dCxyb2xlOlwicm93XCIsc3R5bGU6cn0sbil9ZE4oR3csXCJkZWZhdWx0UHJvcHNcIix7Y2xhc3NOYW1lQm90dG9tTGVmdEdyaWQ6XCJcIixjbGFzc05hbWVCb3R0b21SaWdodEdyaWQ6XCJcIixjbGFzc05hbWVUb3BMZWZ0R3JpZDpcIlwiLGNsYXNzTmFtZVRvcFJpZ2h0R3JpZDpcIlwiLGVuYWJsZUZpeGVkQ29sdW1uU2Nyb2xsOiExLGVuYWJsZUZpeGVkUm93U2Nyb2xsOiExLGZpeGVkQ29sdW1uQ291bnQ6MCxmaXhlZFJvd0NvdW50OjAsc2Nyb2xsVG9Db2x1bW46LTEsc2Nyb2xsVG9Sb3c6LTEsc3R5bGU6e30sc3R5bGVCb3R0b21MZWZ0R3JpZDp7fSxzdHlsZUJvdHRvbVJpZ2h0R3JpZDp7fSxzdHlsZVRvcExlZnRHcmlkOnt9LHN0eWxlVG9wUmlnaHRHcmlkOnt9LGhpZGVUb3BSaWdodEdyaWRTY3JvbGxiYXI6ITEsaGlkZUJvdHRvbUxlZnRHcmlkU2Nyb2xsYmFyOiExfSksR3cucHJvcFR5cGVzPXt9LGhOKEd3KSwoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLG4pe3ZhciByO3JldHVybiB0Tih0aGlzLHQpLChyPXNOKHRoaXMsY04odCkuY2FsbCh0aGlzLGUsbikpKS5zdGF0ZT17Y2xpZW50SGVpZ2h0OjAsY2xpZW50V2lkdGg6MCxzY3JvbGxIZWlnaHQ6MCxzY3JvbGxMZWZ0OjAsc2Nyb2xsVG9wOjAsc2Nyb2xsV2lkdGg6MH0sci5fb25TY3JvbGw9ci5fb25TY3JvbGwuYmluZChhTihyKSkscn1yZXR1cm4gdU4odCxlKSxvTih0LFt7a2V5OlwicmVuZGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLmNoaWxkcmVuLHQ9dGhpcy5zdGF0ZSxuPXQuY2xpZW50SGVpZ2h0LHI9dC5jbGllbnRXaWR0aCxpPXQuc2Nyb2xsSGVpZ2h0LG89dC5zY3JvbGxMZWZ0LGE9dC5zY3JvbGxUb3Ascz10LnNjcm9sbFdpZHRoO3JldHVybiBlKHtjbGllbnRIZWlnaHQ6bixjbGllbnRXaWR0aDpyLG9uU2Nyb2xsOnRoaXMuX29uU2Nyb2xsLHNjcm9sbEhlaWdodDppLHNjcm9sbExlZnQ6byxzY3JvbGxUb3A6YSxzY3JvbGxXaWR0aDpzfSl9fSx7a2V5OlwiX29uU2Nyb2xsXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jbGllbnRIZWlnaHQsbj1lLmNsaWVudFdpZHRoLHI9ZS5zY3JvbGxIZWlnaHQsaT1lLnNjcm9sbExlZnQsbz1lLnNjcm9sbFRvcCxhPWUuc2Nyb2xsV2lkdGg7dGhpcy5zZXRTdGF0ZSh7Y2xpZW50SGVpZ2h0OnQsY2xpZW50V2lkdGg6bixzY3JvbGxIZWlnaHQ6cixzY3JvbGxMZWZ0Omksc2Nyb2xsVG9wOm8sc2Nyb2xsV2lkdGg6YX0pfX1dKSx0fShkLlB1cmVDb21wb25lbnQpKS5wcm9wVHlwZXM9e30sSHcucHJvcFR5cGVzPW51bGw7Y29uc3QgV3c9e0FTQzpcIkFTQ1wiLERFU0M6XCJERVNDXCJ9O2Z1bmN0aW9uIGp3KGUpe3ZhciB0PWUuc29ydERpcmVjdGlvbixuPSgwLFEuWikoXCJSZWFjdFZpcnR1YWxpemVkX19UYWJsZV9fc29ydGFibGVIZWFkZXJJY29uXCIse1wiUmVhY3RWaXJ0dWFsaXplZF9fVGFibGVfX3NvcnRhYmxlSGVhZGVySWNvbi0tQVNDXCI6dD09PVd3LkFTQyxcIlJlYWN0VmlydHVhbGl6ZWRfX1RhYmxlX19zb3J0YWJsZUhlYWRlckljb24tLURFU0NcIjp0PT09V3cuREVTQ30pO3JldHVybiBkLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIix7Y2xhc3NOYW1lOm4sd2lkdGg6MTgsaGVpZ2h0OjE4LHZpZXdCb3g6XCIwIDAgMjQgMjRcIn0sdD09PVd3LkFTQz9kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNNyAxNGw1LTUgNSA1elwifSk6ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwiTTcgMTBsNSA1IDUtNXpcIn0pLGQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIk0wIDBoMjR2MjRIMHpcIixmaWxsOlwibm9uZVwifSkpfWZ1bmN0aW9uIFp3KGUpe3ZhciB0PWUuZGF0YUtleSxuPWUubGFiZWwscj1lLnNvcnRCeSxpPWUuc29ydERpcmVjdGlvbixvPXI9PT10LGE9W2QuY3JlYXRlRWxlbWVudChcInNwYW5cIix7Y2xhc3NOYW1lOlwiUmVhY3RWaXJ0dWFsaXplZF9fVGFibGVfX2hlYWRlclRydW5jYXRlZFRleHRcIixrZXk6XCJsYWJlbFwiLHRpdGxlOlwic3RyaW5nXCI9PXR5cGVvZiBuP246bnVsbH0sbildO3JldHVybiBvJiZhLnB1c2goZC5jcmVhdGVFbGVtZW50KGp3LHtrZXk6XCJTb3J0SW5kaWNhdG9yXCIsc29ydERpcmVjdGlvbjppfSkpLGF9ZnVuY3Rpb24gencoZSl7dmFyIHQ9ZS5jbGFzc05hbWUsbj1lLmNvbHVtbnMscj1lLmluZGV4LGk9ZS5rZXksbz1lLm9uUm93Q2xpY2ssYT1lLm9uUm93RG91YmxlQ2xpY2sscz1lLm9uUm93TW91c2VPdXQsYz1lLm9uUm93TW91c2VPdmVyLGw9ZS5vblJvd1JpZ2h0Q2xpY2ssdT1lLnJvd0RhdGEsZj1lLnN0eWxlLHA9e1wiYXJpYS1yb3dpbmRleFwiOnIrMX07cmV0dXJuKG98fGF8fHN8fGN8fGwpJiYocFtcImFyaWEtbGFiZWxcIl09XCJyb3dcIixwLnRhYkluZGV4PTAsbyYmKHAub25DbGljaz1mdW5jdGlvbihlKXtyZXR1cm4gbyh7ZXZlbnQ6ZSxpbmRleDpyLHJvd0RhdGE6dX0pfSksYSYmKHAub25Eb3VibGVDbGljaz1mdW5jdGlvbihlKXtyZXR1cm4gYSh7ZXZlbnQ6ZSxpbmRleDpyLHJvd0RhdGE6dX0pfSkscyYmKHAub25Nb3VzZU91dD1mdW5jdGlvbihlKXtyZXR1cm4gcyh7ZXZlbnQ6ZSxpbmRleDpyLHJvd0RhdGE6dX0pfSksYyYmKHAub25Nb3VzZU92ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGMoe2V2ZW50OmUsaW5kZXg6cixyb3dEYXRhOnV9KX0pLGwmJihwLm9uQ29udGV4dE1lbnU9ZnVuY3Rpb24oZSl7cmV0dXJuIGwoe2V2ZW50OmUsaW5kZXg6cixyb3dEYXRhOnV9KX0pKSxkLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix2Tih7fSxwLHtjbGFzc05hbWU6dCxrZXk6aSxyb2xlOlwicm93XCIsc3R5bGU6Zn0pLG4pfWp3LnByb3BUeXBlcz17fSxady5wcm9wVHlwZXM9bnVsbCx6dy5wcm9wVHlwZXM9bnVsbDt2YXIgS3c9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiB0Tih0aGlzLHQpLHNOKHRoaXMsY04odCkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gdU4odCxlKSx0fShkLkNvbXBvbmVudCk7ZnVuY3Rpb24gWXcoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIHF3KGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP1l3KG4sITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe2ROKGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpZdyhuKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9ZE4oS3csXCJkZWZhdWx0UHJvcHNcIix7Y2VsbERhdGFHZXR0ZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kYXRhS2V5LG49ZS5yb3dEYXRhO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIG4uZ2V0P24uZ2V0KHQpOm5bdF19LGNlbGxSZW5kZXJlcjpmdW5jdGlvbihlKXt2YXIgdD1lLmNlbGxEYXRhO3JldHVybiBudWxsPT10P1wiXCI6U3RyaW5nKHQpfSxkZWZhdWx0U29ydERpcmVjdGlvbjpXdy5BU0MsZmxleEdyb3c6MCxmbGV4U2hyaW5rOjEsaGVhZGVyUmVuZGVyZXI6Wncsc3R5bGU6e319KSxLdy5wcm9wVHlwZXM9e307dmFyIFh3PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7dmFyIG47cmV0dXJuIHROKHRoaXMsdCksKG49c04odGhpcyxjTih0KS5jYWxsKHRoaXMsZSkpKS5zdGF0ZT17c2Nyb2xsYmFyV2lkdGg6MH0sbi5fY3JlYXRlQ29sdW1uPW4uX2NyZWF0ZUNvbHVtbi5iaW5kKGFOKG4pKSxuLl9jcmVhdGVSb3c9bi5fY3JlYXRlUm93LmJpbmQoYU4obikpLG4uX29uU2Nyb2xsPW4uX29uU2Nyb2xsLmJpbmQoYU4obikpLG4uX29uU2VjdGlvblJlbmRlcmVkPW4uX29uU2VjdGlvblJlbmRlcmVkLmJpbmQoYU4obikpLG4uX3NldFJlZj1uLl9zZXRSZWYuYmluZChhTihuKSksbn1yZXR1cm4gdU4odCxlKSxvTih0LFt7a2V5OlwiZm9yY2VVcGRhdGVHcmlkXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLkdyaWQmJnRoaXMuR3JpZC5mb3JjZVVwZGF0ZSgpfX0se2tleTpcImdldE9mZnNldEZvclJvd1wiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuYWxpZ25tZW50LG49ZS5pbmRleDtyZXR1cm4gdGhpcy5HcmlkP3RoaXMuR3JpZC5nZXRPZmZzZXRGb3JDZWxsKHthbGlnbm1lbnQ6dCxyb3dJbmRleDpufSkuc2Nyb2xsVG9wOjB9fSx7a2V5OlwiaW52YWxpZGF0ZUNlbGxTaXplQWZ0ZXJSZW5kZXJcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmNvbHVtbkluZGV4LG49ZS5yb3dJbmRleDt0aGlzLkdyaWQmJnRoaXMuR3JpZC5pbnZhbGlkYXRlQ2VsbFNpemVBZnRlclJlbmRlcih7cm93SW5kZXg6bixjb2x1bW5JbmRleDp0fSl9fSx7a2V5OlwibWVhc3VyZUFsbFJvd3NcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuR3JpZCYmdGhpcy5HcmlkLm1lYXN1cmVBbGxDZWxscygpfX0se2tleTpcInJlY29tcHV0ZUdyaWRTaXplXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sdD1lLmNvbHVtbkluZGV4LG49dm9pZCAwPT09dD8wOnQscj1lLnJvd0luZGV4LGk9dm9pZCAwPT09cj8wOnI7dGhpcy5HcmlkJiZ0aGlzLkdyaWQucmVjb21wdXRlR3JpZFNpemUoe3Jvd0luZGV4OmksY29sdW1uSW5kZXg6bn0pfX0se2tleTpcInJlY29tcHV0ZVJvd0hlaWdodHNcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTowO3RoaXMuR3JpZCYmdGhpcy5HcmlkLnJlY29tcHV0ZUdyaWRTaXplKHtyb3dJbmRleDplfSl9fSx7a2V5Olwic2Nyb2xsVG9Qb3NpdGlvblwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjA7dGhpcy5HcmlkJiZ0aGlzLkdyaWQuc2Nyb2xsVG9Qb3NpdGlvbih7c2Nyb2xsVG9wOmV9KX19LHtrZXk6XCJzY3JvbGxUb1Jvd1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjA7dGhpcy5HcmlkJiZ0aGlzLkdyaWQuc2Nyb2xsVG9DZWxsKHtjb2x1bW5JbmRleDowLHJvd0luZGV4OmV9KX19LHtrZXk6XCJnZXRTY3JvbGxiYXJXaWR0aFwiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5HcmlkKXt2YXIgZT0oMCxDbS5maW5kRE9NTm9kZSkodGhpcy5HcmlkKSx0PWUuY2xpZW50V2lkdGh8fDA7cmV0dXJuKGUub2Zmc2V0V2lkdGh8fDApLXR9cmV0dXJuIDB9fSx7a2V5OlwiY29tcG9uZW50RGlkTW91bnRcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX3NldFNjcm9sbGJhcldpZHRoKCl9fSx7a2V5OlwiY29tcG9uZW50RGlkVXBkYXRlXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9zZXRTY3JvbGxiYXJXaWR0aCgpfX0se2tleTpcInJlbmRlclwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMsbj10LmNoaWxkcmVuLHI9dC5jbGFzc05hbWUsaT10LmRpc2FibGVIZWFkZXIsbz10LmdyaWRDbGFzc05hbWUsYT10LmdyaWRTdHlsZSxzPXQuaGVhZGVySGVpZ2h0LGM9dC5oZWFkZXJSb3dSZW5kZXJlcixsPXQuaGVpZ2h0LHU9dC5pZCxmPXQubm9Sb3dzUmVuZGVyZXIscD10LnJvd0NsYXNzTmFtZSxtPXQucm93U3R5bGUsaD10LnNjcm9sbFRvSW5kZXgsdj10LnN0eWxlLGc9dC53aWR0aCx5PXRoaXMuc3RhdGUuc2Nyb2xsYmFyV2lkdGgsRT1pP2w6bC1zLF89XCJmdW5jdGlvblwiPT10eXBlb2YgcD9wKHtpbmRleDotMX0pOnAsST1cImZ1bmN0aW9uXCI9PXR5cGVvZiBtP20oe2luZGV4Oi0xfSk6bTtyZXR1cm4gdGhpcy5fY2FjaGVkQ29sdW1uU3R5bGVzPVtdLGQuQ2hpbGRyZW4udG9BcnJheShuKS5mb3JFYWNoKChmdW5jdGlvbih0LG4pe3ZhciByPWUuX2dldEZsZXhTdHlsZUZvckNvbHVtbih0LHQucHJvcHMuc3R5bGUpO2UuX2NhY2hlZENvbHVtblN0eWxlc1tuXT1xdyh7b3ZlcmZsb3c6XCJoaWRkZW5cIn0scil9KSksZC5jcmVhdGVFbGVtZW50KFwiZGl2XCIse1wiYXJpYS1sYWJlbFwiOnRoaXMucHJvcHNbXCJhcmlhLWxhYmVsXCJdLFwiYXJpYS1sYWJlbGxlZGJ5XCI6dGhpcy5wcm9wc1tcImFyaWEtbGFiZWxsZWRieVwiXSxcImFyaWEtY29sY291bnRcIjpkLkNoaWxkcmVuLnRvQXJyYXkobikubGVuZ3RoLFwiYXJpYS1yb3djb3VudFwiOnRoaXMucHJvcHMucm93Q291bnQsY2xhc3NOYW1lOigwLFEuWikoXCJSZWFjdFZpcnR1YWxpemVkX19UYWJsZVwiLHIpLGlkOnUscm9sZTpcImdyaWRcIixzdHlsZTp2fSwhaSYmYyh7Y2xhc3NOYW1lOigwLFEuWikoXCJSZWFjdFZpcnR1YWxpemVkX19UYWJsZV9faGVhZGVyUm93XCIsXyksY29sdW1uczp0aGlzLl9nZXRIZWFkZXJDb2x1bW5zKCksc3R5bGU6cXcoe2hlaWdodDpzLG92ZXJmbG93OlwiaGlkZGVuXCIscGFkZGluZ1JpZ2h0Onksd2lkdGg6Z30sSSl9KSxkLmNyZWF0ZUVsZW1lbnQoQk4sdk4oe30sdGhpcy5wcm9wcyx7XCJhcmlhLXJlYWRvbmx5XCI6bnVsbCxhdXRvQ29udGFpbmVyV2lkdGg6ITAsY2xhc3NOYW1lOigwLFEuWikoXCJSZWFjdFZpcnR1YWxpemVkX19UYWJsZV9fR3JpZFwiLG8pLGNlbGxSZW5kZXJlcjp0aGlzLl9jcmVhdGVSb3csY29sdW1uV2lkdGg6Zyxjb2x1bW5Db3VudDoxLGhlaWdodDpFLGlkOnZvaWQgMCxub0NvbnRlbnRSZW5kZXJlcjpmLG9uU2Nyb2xsOnRoaXMuX29uU2Nyb2xsLG9uU2VjdGlvblJlbmRlcmVkOnRoaXMuX29uU2VjdGlvblJlbmRlcmVkLHJlZjp0aGlzLl9zZXRSZWYscm9sZTpcInJvd2dyb3VwXCIsc2Nyb2xsYmFyV2lkdGg6eSxzY3JvbGxUb1JvdzpoLHN0eWxlOnF3KHt9LGEse292ZXJmbG93WDpcImhpZGRlblwifSl9KSkpfX0se2tleTpcIl9jcmVhdGVDb2x1bW5cIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmNvbHVtbixuPWUuY29sdW1uSW5kZXgscj1lLmlzU2Nyb2xsaW5nLGk9ZS5wYXJlbnQsbz1lLnJvd0RhdGEsYT1lLnJvd0luZGV4LHM9dGhpcy5wcm9wcy5vbkNvbHVtbkNsaWNrLGM9dC5wcm9wcyxsPWMuY2VsbERhdGFHZXR0ZXIsdT1jLmNlbGxSZW5kZXJlcixmPWMuY2xhc3NOYW1lLHA9Yy5jb2x1bW5EYXRhLG09Yy5kYXRhS2V5LGg9Yy5pZCx2PXUoe2NlbGxEYXRhOmwoe2NvbHVtbkRhdGE6cCxkYXRhS2V5Om0scm93RGF0YTpvfSksY29sdW1uRGF0YTpwLGNvbHVtbkluZGV4Om4sZGF0YUtleTptLGlzU2Nyb2xsaW5nOnIscGFyZW50Omkscm93RGF0YTpvLHJvd0luZGV4OmF9KSxnPXRoaXMuX2NhY2hlZENvbHVtblN0eWxlc1tuXSx5PVwic3RyaW5nXCI9PXR5cGVvZiB2P3Y6bnVsbDtyZXR1cm4gZC5jcmVhdGVFbGVtZW50KFwiZGl2XCIse1wiYXJpYS1jb2xpbmRleFwiOm4rMSxcImFyaWEtZGVzY3JpYmVkYnlcIjpoLGNsYXNzTmFtZTooMCxRLlopKFwiUmVhY3RWaXJ0dWFsaXplZF9fVGFibGVfX3Jvd0NvbHVtblwiLGYpLGtleTpcIlJvd1wiK2ErXCItQ29sXCIrbixvbkNsaWNrOmZ1bmN0aW9uKGUpe3MmJnMoe2NvbHVtbkRhdGE6cCxkYXRhS2V5Om0sZXZlbnQ6ZX0pfSxyb2xlOlwiZ3JpZGNlbGxcIixzdHlsZTpnLHRpdGxlOnl9LHYpfX0se2tleTpcIl9jcmVhdGVIZWFkZXJcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGE9ZS5jb2x1bW4scz1lLmluZGV4LGM9dGhpcy5wcm9wcyxsPWMuaGVhZGVyQ2xhc3NOYW1lLHU9Yy5oZWFkZXJTdHlsZSxmPWMub25IZWFkZXJDbGljayxwPWMuc29ydCxtPWMuc29ydEJ5LGg9Yy5zb3J0RGlyZWN0aW9uLHY9YS5wcm9wcyxnPXYuY29sdW1uRGF0YSx5PXYuZGF0YUtleSxFPXYuZGVmYXVsdFNvcnREaXJlY3Rpb24sXz12LmRpc2FibGVTb3J0LEk9di5oZWFkZXJSZW5kZXJlcixTPXYuaWQsYj12LmxhYmVsLFQ9IV8mJnAsQz0oMCxRLlopKFwiUmVhY3RWaXJ0dWFsaXplZF9fVGFibGVfX2hlYWRlckNvbHVtblwiLGwsYS5wcm9wcy5oZWFkZXJDbGFzc05hbWUse1JlYWN0VmlydHVhbGl6ZWRfX1RhYmxlX19zb3J0YWJsZUhlYWRlckNvbHVtbjpUfSksQT10aGlzLl9nZXRGbGV4U3R5bGVGb3JDb2x1bW4oYSxxdyh7fSx1LHt9LGEucHJvcHMuaGVhZGVyU3R5bGUpKSxSPUkoe2NvbHVtbkRhdGE6ZyxkYXRhS2V5OnksZGlzYWJsZVNvcnQ6XyxsYWJlbDpiLHNvcnRCeTptLHNvcnREaXJlY3Rpb246aH0pO2lmKFR8fGYpe3ZhciBrPW0hPT15P0U6aD09PVd3LkRFU0M/V3cuQVNDOld3LkRFU0MsTz1mdW5jdGlvbihlKXtUJiZwKHtkZWZhdWx0U29ydERpcmVjdGlvbjpFLGV2ZW50OmUsc29ydEJ5Onksc29ydERpcmVjdGlvbjprfSksZiYmZih7Y29sdW1uRGF0YTpnLGRhdGFLZXk6eSxldmVudDplfSl9O289YS5wcm9wc1tcImFyaWEtbGFiZWxcIl18fGJ8fHksaT1cIm5vbmVcIixyPTAsdD1PLG49ZnVuY3Rpb24oZSl7XCJFbnRlclwiIT09ZS5rZXkmJlwiIFwiIT09ZS5rZXl8fE8oZSl9fXJldHVybiBtPT09eSYmKGk9aD09PVd3LkFTQz9cImFzY2VuZGluZ1wiOlwiZGVzY2VuZGluZ1wiKSxkLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7XCJhcmlhLWxhYmVsXCI6byxcImFyaWEtc29ydFwiOmksY2xhc3NOYW1lOkMsaWQ6UyxrZXk6XCJIZWFkZXItQ29sXCIrcyxvbkNsaWNrOnQsb25LZXlEb3duOm4scm9sZTpcImNvbHVtbmhlYWRlclwiLHN0eWxlOkEsdGFiSW5kZXg6cn0sUil9fSx7a2V5OlwiX2NyZWF0ZVJvd1wiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj1lLnJvd0luZGV4LHI9ZS5pc1Njcm9sbGluZyxpPWUua2V5LG89ZS5wYXJlbnQsYT1lLnN0eWxlLHM9dGhpcy5wcm9wcyxjPXMuY2hpbGRyZW4sbD1zLm9uUm93Q2xpY2ssdT1zLm9uUm93RG91YmxlQ2xpY2ssZj1zLm9uUm93UmlnaHRDbGljayxwPXMub25Sb3dNb3VzZU92ZXIsbT1zLm9uUm93TW91c2VPdXQsaD1zLnJvd0NsYXNzTmFtZSx2PXMucm93R2V0dGVyLGc9cy5yb3dSZW5kZXJlcix5PXMucm93U3R5bGUsRT10aGlzLnN0YXRlLnNjcm9sbGJhcldpZHRoLF89XCJmdW5jdGlvblwiPT10eXBlb2YgaD9oKHtpbmRleDpufSk6aCxJPVwiZnVuY3Rpb25cIj09dHlwZW9mIHk/eSh7aW5kZXg6bn0pOnksUz12KHtpbmRleDpufSksYj1kLkNoaWxkcmVuLnRvQXJyYXkoYykubWFwKChmdW5jdGlvbihlLGkpe3JldHVybiB0Ll9jcmVhdGVDb2x1bW4oe2NvbHVtbjplLGNvbHVtbkluZGV4OmksaXNTY3JvbGxpbmc6cixwYXJlbnQ6byxyb3dEYXRhOlMscm93SW5kZXg6bixzY3JvbGxiYXJXaWR0aDpFfSl9KSksVD0oMCxRLlopKFwiUmVhY3RWaXJ0dWFsaXplZF9fVGFibGVfX3Jvd1wiLF8pLEM9cXcoe30sYSx7aGVpZ2h0OnRoaXMuX2dldFJvd0hlaWdodChuKSxvdmVyZmxvdzpcImhpZGRlblwiLHBhZGRpbmdSaWdodDpFfSxJKTtyZXR1cm4gZyh7Y2xhc3NOYW1lOlQsY29sdW1uczpiLGluZGV4Om4saXNTY3JvbGxpbmc6cixrZXk6aSxvblJvd0NsaWNrOmwsb25Sb3dEb3VibGVDbGljazp1LG9uUm93UmlnaHRDbGljazpmLG9uUm93TW91c2VPdmVyOnAsb25Sb3dNb3VzZU91dDptLHJvd0RhdGE6UyxzdHlsZTpDfSl9fSx7a2V5OlwiX2dldEZsZXhTdHlsZUZvckNvbHVtblwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxuPVwiXCIuY29uY2F0KGUucHJvcHMuZmxleEdyb3csXCIgXCIpLmNvbmNhdChlLnByb3BzLmZsZXhTaHJpbmssXCIgXCIpLmNvbmNhdChlLnByb3BzLndpZHRoLFwicHhcIikscj1xdyh7fSx0LHtmbGV4Om4sbXNGbGV4Om4sV2Via2l0RmxleDpufSk7cmV0dXJuIGUucHJvcHMubWF4V2lkdGgmJihyLm1heFdpZHRoPWUucHJvcHMubWF4V2lkdGgpLGUucHJvcHMubWluV2lkdGgmJihyLm1pbldpZHRoPWUucHJvcHMubWluV2lkdGgpLHJ9fSx7a2V5OlwiX2dldEhlYWRlckNvbHVtbnNcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnByb3BzLG49dC5jaGlsZHJlbjtyZXR1cm4odC5kaXNhYmxlSGVhZGVyP1tdOmQuQ2hpbGRyZW4udG9BcnJheShuKSkubWFwKChmdW5jdGlvbih0LG4pe3JldHVybiBlLl9jcmVhdGVIZWFkZXIoe2NvbHVtbjp0LGluZGV4Om59KX0pKX19LHtrZXk6XCJfZ2V0Um93SGVpZ2h0XCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcy5yb3dIZWlnaHQ7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdD90KHtpbmRleDplfSk6dH19LHtrZXk6XCJfb25TY3JvbGxcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmNsaWVudEhlaWdodCxuPWUuc2Nyb2xsSGVpZ2h0LHI9ZS5zY3JvbGxUb3A7KDAsdGhpcy5wcm9wcy5vblNjcm9sbCkoe2NsaWVudEhlaWdodDp0LHNjcm9sbEhlaWdodDpuLHNjcm9sbFRvcDpyfSl9fSx7a2V5OlwiX29uU2VjdGlvblJlbmRlcmVkXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yb3dPdmVyc2NhblN0YXJ0SW5kZXgsbj1lLnJvd092ZXJzY2FuU3RvcEluZGV4LHI9ZS5yb3dTdGFydEluZGV4LGk9ZS5yb3dTdG9wSW5kZXg7KDAsdGhpcy5wcm9wcy5vblJvd3NSZW5kZXJlZCkoe292ZXJzY2FuU3RhcnRJbmRleDp0LG92ZXJzY2FuU3RvcEluZGV4Om4sc3RhcnRJbmRleDpyLHN0b3BJbmRleDppfSl9fSx7a2V5OlwiX3NldFJlZlwiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuR3JpZD1lfX0se2tleTpcIl9zZXRTY3JvbGxiYXJXaWR0aFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRTY3JvbGxiYXJXaWR0aCgpO3RoaXMuc2V0U3RhdGUoe3Njcm9sbGJhcldpZHRoOmV9KX19XSksdH0oZC5QdXJlQ29tcG9uZW50KTtkTihYdyxcImRlZmF1bHRQcm9wc1wiLHtkaXNhYmxlSGVhZGVyOiExLGVzdGltYXRlZFJvd1NpemU6MzAsaGVhZGVySGVpZ2h0OjAsaGVhZGVyU3R5bGU6e30sbm9Sb3dzUmVuZGVyZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sb25Sb3dzUmVuZGVyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sb25TY3JvbGw6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sb3ZlcnNjYW5JbmRpY2VzR2V0dGVyOlZOLG92ZXJzY2FuUm93Q291bnQ6MTAscm93UmVuZGVyZXI6encsaGVhZGVyUm93UmVuZGVyZXI6SHcscm93U3R5bGU6e30sc2Nyb2xsVG9BbGlnbm1lbnQ6XCJhdXRvXCIsc2Nyb2xsVG9JbmRleDotMSxzdHlsZTp7fX0pLFh3LnByb3BUeXBlcz17fTt2YXIgUXc9W10sSnc9bnVsbCwkdz1udWxsO2Z1bmN0aW9uIGVEKCl7JHcmJigkdz1udWxsLGRvY3VtZW50LmJvZHkmJm51bGwhPUp3JiYoZG9jdW1lbnQuYm9keS5zdHlsZS5wb2ludGVyRXZlbnRzPUp3KSxKdz1udWxsKX1mdW5jdGlvbiB0RCgpe2VEKCksUXcuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19yZXNldElzU2Nyb2xsaW5nKCl9KSl9ZnVuY3Rpb24gbkQoZSl7ZS5jdXJyZW50VGFyZ2V0PT09d2luZG93JiZudWxsPT1KdyYmZG9jdW1lbnQuYm9keSYmKEp3PWRvY3VtZW50LmJvZHkuc3R5bGUucG9pbnRlckV2ZW50cyxkb2N1bWVudC5ib2R5LnN0eWxlLnBvaW50ZXJFdmVudHM9XCJub25lXCIpLGZ1bmN0aW9uKCl7JHcmJlBOKCR3KTt2YXIgZT0wO1F3LmZvckVhY2goKGZ1bmN0aW9uKHQpe2U9TWF0aC5tYXgoZSx0LnByb3BzLnNjcm9sbGluZ1Jlc2V0VGltZUludGVydmFsKX0pKSwkdz1NTih0RCxlKX0oKSxRdy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnByb3BzLnNjcm9sbEVsZW1lbnQ9PT1lLmN1cnJlbnRUYXJnZXQmJnQuX19oYW5kbGVXaW5kb3dTY3JvbGxFdmVudCgpfSkpfWZ1bmN0aW9uIHJEKGUsdCl7UXcuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIGUucHJvcHMuc2Nyb2xsRWxlbWVudD09PXR9KSl8fHQuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLG5EKSxRdy5wdXNoKGUpfWZ1bmN0aW9uIGlEKGUsdCl7KFF3PVF3LmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1lfSkpKS5sZW5ndGh8fCh0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIixuRCksJHcmJihQTigkdyksZUQoKSkpfXZhciBvRCxhRCxzRD1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXdpbmRvd30sY0Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9O2Z1bmN0aW9uIGxEKGUsdCl7aWYoZSl7aWYoc0QoZSkpe3ZhciBuPXdpbmRvdyxyPW4uaW5uZXJIZWlnaHQsaT1uLmlubmVyV2lkdGg7cmV0dXJue2hlaWdodDpcIm51bWJlclwiPT10eXBlb2Ygcj9yOjAsd2lkdGg6XCJudW1iZXJcIj09dHlwZW9mIGk/aTowfX1yZXR1cm4gY0QoZSl9cmV0dXJue2hlaWdodDp0LnNlcnZlckhlaWdodCx3aWR0aDp0LnNlcnZlcldpZHRofX1mdW5jdGlvbiB1RChlKXtyZXR1cm4gc0QoZSkmJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudD97dG9wOlwic2Nyb2xsWVwiaW4gd2luZG93P3dpbmRvdy5zY3JvbGxZOmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AsbGVmdDpcInNjcm9sbFhcImluIHdpbmRvdz93aW5kb3cuc2Nyb2xsWDpkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdH06e3RvcDplLnNjcm9sbFRvcCxsZWZ0OmUuc2Nyb2xsTGVmdH19ZnVuY3Rpb24gZEQoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufXZhciBmRD1mdW5jdGlvbigpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMH0scEQ9KGFEPW9EPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuO3ROKHRoaXMsdCk7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkociksbz0wO288cjtvKyspaVtvXT1hcmd1bWVudHNbb107cmV0dXJuIGROKGFOKG49c04odGhpcywoZT1jTih0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSksXCJfd2luZG93XCIsZkQoKSksZE4oYU4obiksXCJfaXNNb3VudGVkXCIsITEpLGROKGFOKG4pLFwiX3Bvc2l0aW9uRnJvbVRvcFwiLDApLGROKGFOKG4pLFwiX3Bvc2l0aW9uRnJvbUxlZnRcIiwwKSxkTihhTihuKSxcIl9kZXRlY3RFbGVtZW50UmVzaXplXCIsdm9pZCAwKSxkTihhTihuKSxcIl9jaGlsZFwiLHZvaWQgMCksZE4oYU4obiksXCJzdGF0ZVwiLGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP2REKG4sITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe2ROKGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpkRChuKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9KHt9LGxEKG4ucHJvcHMuc2Nyb2xsRWxlbWVudCxuLnByb3BzKSx7aXNTY3JvbGxpbmc6ITEsc2Nyb2xsTGVmdDowLHNjcm9sbFRvcDowfSkpLGROKGFOKG4pLFwiX3JlZ2lzdGVyQ2hpbGRcIiwoZnVuY3Rpb24oZSl7IWV8fGUgaW5zdGFuY2VvZiBFbGVtZW50fHxjb25zb2xlLndhcm4oXCJXaW5kb3dTY3JvbGxlciByZWdpc3RlckNoaWxkIGV4cGVjdHMgdG8gYmUgcGFzc2VkIEVsZW1lbnQgb3IgbnVsbFwiKSxuLl9jaGlsZD1lLG4udXBkYXRlUG9zaXRpb24oKX0pKSxkTihhTihuKSxcIl9vbkNoaWxkU2Nyb2xsXCIsKGZ1bmN0aW9uKGUpe3ZhciB0PWUuc2Nyb2xsVG9wO2lmKG4uc3RhdGUuc2Nyb2xsVG9wIT09dCl7dmFyIHI9bi5wcm9wcy5zY3JvbGxFbGVtZW50O3ImJihcImZ1bmN0aW9uXCI9PXR5cGVvZiByLnNjcm9sbFRvP3Iuc2Nyb2xsVG8oMCx0K24uX3Bvc2l0aW9uRnJvbVRvcCk6ci5zY3JvbGxUb3A9dCtuLl9wb3NpdGlvbkZyb21Ub3ApfX0pKSxkTihhTihuKSxcIl9yZWdpc3RlclJlc2l6ZUxpc3RlbmVyXCIsKGZ1bmN0aW9uKGUpe2U9PT13aW5kb3c/d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIixuLl9vblJlc2l6ZSwhMSk6bi5fZGV0ZWN0RWxlbWVudFJlc2l6ZS5hZGRSZXNpemVMaXN0ZW5lcihlLG4uX29uUmVzaXplKX0pKSxkTihhTihuKSxcIl91bnJlZ2lzdGVyUmVzaXplTGlzdGVuZXJcIiwoZnVuY3Rpb24oZSl7ZT09PXdpbmRvdz93aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLG4uX29uUmVzaXplLCExKTplJiZuLl9kZXRlY3RFbGVtZW50UmVzaXplLnJlbW92ZVJlc2l6ZUxpc3RlbmVyKGUsbi5fb25SZXNpemUpfSkpLGROKGFOKG4pLFwiX29uUmVzaXplXCIsKGZ1bmN0aW9uKCl7bi51cGRhdGVQb3NpdGlvbigpfSkpLGROKGFOKG4pLFwiX19oYW5kbGVXaW5kb3dTY3JvbGxFdmVudFwiLChmdW5jdGlvbigpe2lmKG4uX2lzTW91bnRlZCl7dmFyIGU9bi5wcm9wcy5vblNjcm9sbCx0PW4ucHJvcHMuc2Nyb2xsRWxlbWVudDtpZih0KXt2YXIgcj11RCh0KSxpPU1hdGgubWF4KDAsci5sZWZ0LW4uX3Bvc2l0aW9uRnJvbUxlZnQpLG89TWF0aC5tYXgoMCxyLnRvcC1uLl9wb3NpdGlvbkZyb21Ub3ApO24uc2V0U3RhdGUoe2lzU2Nyb2xsaW5nOiEwLHNjcm9sbExlZnQ6aSxzY3JvbGxUb3A6b30pLGUoe3Njcm9sbExlZnQ6aSxzY3JvbGxUb3A6b30pfX19KSksZE4oYU4obiksXCJfX3Jlc2V0SXNTY3JvbGxpbmdcIiwoZnVuY3Rpb24oKXtuLnNldFN0YXRlKHtpc1Njcm9sbGluZzohMX0pfSkpLG59cmV0dXJuIHVOKHQsZSksb04odCxbe2tleTpcInVwZGF0ZVBvc2l0aW9uXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5wcm9wcy5zY3JvbGxFbGVtZW50LHQ9dGhpcy5wcm9wcy5vblJlc2l6ZSxuPXRoaXMuc3RhdGUscj1uLmhlaWdodCxpPW4ud2lkdGgsbz10aGlzLl9jaGlsZHx8Q20uZmluZERPTU5vZGUodGhpcyk7aWYobyBpbnN0YW5jZW9mIEVsZW1lbnQmJmUpe3ZhciBhPWZ1bmN0aW9uKGUsdCl7aWYoc0QodCkmJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCl7dmFyIG49ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHI9Y0QoZSksaT1jRChuKTtyZXR1cm57dG9wOnIudG9wLWkudG9wLGxlZnQ6ci5sZWZ0LWkubGVmdH19dmFyIG89dUQodCksYT1jRChlKSxzPWNEKHQpO3JldHVybnt0b3A6YS50b3Arby50b3Atcy50b3AsbGVmdDphLmxlZnQrby5sZWZ0LXMubGVmdH19KG8sZSk7dGhpcy5fcG9zaXRpb25Gcm9tVG9wPWEudG9wLHRoaXMuX3Bvc2l0aW9uRnJvbUxlZnQ9YS5sZWZ0fXZhciBzPWxEKGUsdGhpcy5wcm9wcyk7cj09PXMuaGVpZ2h0JiZpPT09cy53aWR0aHx8KHRoaXMuc2V0U3RhdGUoe2hlaWdodDpzLmhlaWdodCx3aWR0aDpzLndpZHRofSksdCh7aGVpZ2h0OnMuaGVpZ2h0LHdpZHRoOnMud2lkdGh9KSl9fSx7a2V5OlwiY29tcG9uZW50RGlkTW91bnRcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuc2Nyb2xsRWxlbWVudDt0aGlzLl9kZXRlY3RFbGVtZW50UmVzaXplPUtOKCksdGhpcy51cGRhdGVQb3NpdGlvbihlKSxlJiYockQodGhpcyxlKSx0aGlzLl9yZWdpc3RlclJlc2l6ZUxpc3RlbmVyKGUpKSx0aGlzLl9pc01vdW50ZWQ9ITB9fSx7a2V5OlwiY29tcG9uZW50RGlkVXBkYXRlXCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnByb3BzLnNjcm9sbEVsZW1lbnQscj1lLnNjcm9sbEVsZW1lbnQ7ciE9PW4mJm51bGwhPXImJm51bGwhPW4mJih0aGlzLnVwZGF0ZVBvc2l0aW9uKG4pLGlEKHRoaXMsciksckQodGhpcyxuKSx0aGlzLl91bnJlZ2lzdGVyUmVzaXplTGlzdGVuZXIociksdGhpcy5fcmVnaXN0ZXJSZXNpemVMaXN0ZW5lcihuKSl9fSx7a2V5OlwiY29tcG9uZW50V2lsbFVubW91bnRcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuc2Nyb2xsRWxlbWVudDtlJiYoaUQodGhpcyxlKSx0aGlzLl91bnJlZ2lzdGVyUmVzaXplTGlzdGVuZXIoZSkpLHRoaXMuX2lzTW91bnRlZD0hMX19LHtrZXk6XCJyZW5kZXJcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuY2hpbGRyZW4sdD10aGlzLnN0YXRlLG49dC5pc1Njcm9sbGluZyxyPXQuc2Nyb2xsVG9wLGk9dC5zY3JvbGxMZWZ0LG89dC5oZWlnaHQsYT10LndpZHRoO3JldHVybiBlKHtvbkNoaWxkU2Nyb2xsOnRoaXMuX29uQ2hpbGRTY3JvbGwscmVnaXN0ZXJDaGlsZDp0aGlzLl9yZWdpc3RlckNoaWxkLGhlaWdodDpvLGlzU2Nyb2xsaW5nOm4sc2Nyb2xsTGVmdDppLHNjcm9sbFRvcDpyLHdpZHRoOmF9KX19XSksdH0oZC5QdXJlQ29tcG9uZW50KSxkTihvRCxcInByb3BUeXBlc1wiLG51bGwpLGFEKTtkTihwRCxcImRlZmF1bHRQcm9wc1wiLHtvblJlc2l6ZTpmdW5jdGlvbigpe30sb25TY3JvbGw6ZnVuY3Rpb24oKXt9LHNjcm9sbGluZ1Jlc2V0VGltZUludGVydmFsOjE1MCxzY3JvbGxFbGVtZW50OmZEKCksc2VydmVySGVpZ2h0OjAsc2VydmVyV2lkdGg6MH0pO2NvbnN0IG1EPXt0b29sdGlwOlwia3BJd2RcIn07ZnVuY3Rpb24gaEQoZSl7bGV0e2ZlZWRJdGVtOnQsbW91c2VQb2ludGVyVG9wT2Zmc2V0Om59PWU7Y29uc3Qgcj0oMCxkLnVzZVJlZikobnVsbCksW2ksYV09KDAsZC51c2VTdGF0ZSkoMCk7cmV0dXJuKDAsZC51c2VFZmZlY3QpKCgoKT0+e2lmKHIuY3VycmVudCl7Y29uc3QgZT1yLmN1cnJlbnQuY2xpZW50SGVpZ2h0O2EoZS8yKX19KSxbXSksKDAscS5qc3gpKFwiZGl2XCIse3JlZjpyLHN0eWxlOnt2aXNpYmlsaXR5Omk/XCJ2aXNpYmxlXCI6XCJoaWRkZW5cIix0b3A6bi1pfSxjbGFzc05hbWU6bUQudG9vbHRpcCxjaGlsZHJlbjooMCxvLlopKHp1LHtmZWVkSXRlbTp0fSl9KX1jb25zdCB2RD17aWNvbjpcIkhFa0RKXCIsbGFiZWw6XCJnaVY1M1wiLHNuYXBXaXRoU291bmRJY29uQ29sb3I6XCJoWWZKeFwiLHNuYXBXaXRob3V0U291bmRJY29uQ29sb3I6XCJEQ2xvM1wiLHZpZXdhYmxlU25hcDpcIlZLam41XCIsdW5vcGVuZWRJY29uOlwiREVwNVpcIixjaGF0SWNvbkNvbG9yOlwiVVcxM0ZcIn07dmFyIGdELHlELEVELF9ELElELFNEO2Z1bmN0aW9uIGJEKGUpe2xldHtjaGlsZHJlbjp0LG9uSG92ZXJTdGFydDpuLG9uSG92ZXJFbmQ6cixjbGFzc05hbWVzOmksb25DbGljazphfT1lO2NvbnN0IHM9ZT0+e1wiRW50ZXJcIj09PWUua2V5JiZhJiYoZS5zdG9wUHJvcGFnYXRpb24oKSxhKCkpfTtyZXR1cm4oMCxvLlopKHhzLmRpdix7Y2xhc3NOYW1lOigwLFEuWikodkQuaWNvbixpKSxpbml0aWFsOntvcGFjaXR5OjB9LGFuaW1hdGU6e29wYWNpdHk6MX0sZXhpdDp7b3BhY2l0eTowfSx0cmFuc2l0aW9uOntkdXJhdGlvbjouMSxlYXNlOlwiZWFzZU91dFwifSxvbkNsaWNrOmU9PnthJiYoZS5zdG9wUHJvcGFnYXRpb24oKSxhKCkpfSxvbktleVByZXNzOnMsb25LZXlEb3duOnMsb25LZXlVcDpzLG9uSG92ZXJTdGFydDpuLG9uSG92ZXJFbmQ6cn0sdm9pZCAwLHQpfWZ1bmN0aW9uIFREKGUpe2xldHt1bnJlYWRGZWVkSXRlbVN0YXR1czp0LHNuYXBIYXNBdWRpbzpuLGxhc3RBY3RvcklzU2VsZjpyLG9uQ2xpY2tWaWV3YWJsZVNuYXBzOml9PWU7aWYocilyZXR1cm4gbnVsbDtzd2l0Y2godCl7Y2FzZSBkUy5xTS5DaGF0QW5kU25hcE5ldzpjYXNlIGRTLnFNLlNuYXBBbmRSZWFjdGlvbk5ldzpyZXR1cm4oMCxxLmpzeHMpKHEuRnJhZ21lbnQse2NoaWxkcmVuOlsoMCxvLlopKGJELHtjbGFzc05hbWVzOigwLFEuWikobj92RC5zbmFwV2l0aFNvdW5kSWNvbkNvbG9yOnZELnNuYXBXaXRob3V0U291bmRJY29uQ29sb3Isdm9pZCAwIT09aSYmdkQudmlld2FibGVTbmFwKSxvbkNsaWNrOml9LHZvaWQgMCxnRHx8KGdEPSgwLG8uWikocFMse30pKSksQm9vbGVhbihpKSYmKDAsby5aKShcInNwYW5cIix7Y2xhc3NOYW1lOigwLFEuWikodkQubGFiZWwsbj92RC5zbmFwV2l0aFNvdW5kSWNvbkNvbG9yOnZELnNuYXBXaXRob3V0U291bmRJY29uQ29sb3IpfSx2b2lkIDAseUR8fCh5RD0oMCxvLlopKHYuWix7aWQ6XCJsQlgrYWtcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlZpZXdcIn1dfSkpKV19KTtjYXNlIGRTLnFNLkNoYXROZXc6cmV0dXJuKDAsby5aKShiRCx7Y2xhc3NOYW1lczooMCxRLlopKHZELnVub3BlbmVkSWNvbix2RC5jaGF0SWNvbkNvbG9yKX0sdm9pZCAwLEVEfHwoRUQ9KDAsby5aKSh2Uyx7fSkpKTtjYXNlIGRTLnFNLlNuYXBOZXc6cmV0dXJuKDAscS5qc3hzKShxLkZyYWdtZW50LHtjaGlsZHJlbjpbKDAsby5aKShiRCx7Y2xhc3NOYW1lczooMCxRLlopKHZELnVub3BlbmVkSWNvbixuP3ZELnNuYXBXaXRoU291bmRJY29uQ29sb3I6dkQuc25hcFdpdGhvdXRTb3VuZEljb25Db2xvcix2b2lkIDAhPT1pJiZ2RC52aWV3YWJsZVNuYXApLG9uQ2xpY2s6aX0sdm9pZCAwLF9EfHwoX0Q9KDAsby5aKShwXyx7fSkpKSxCb29sZWFuKGkpJiYoMCxvLlopKFwic3BhblwiLHtjbGFzc05hbWU6KDAsUS5aKSh2RC5sYWJlbCxuP3ZELnNuYXBXaXRoU291bmRJY29uQ29sb3I6dkQuc25hcFdpdGhvdXRTb3VuZEljb25Db2xvcil9LHZvaWQgMCxJRHx8KElEPSgwLG8uWikodi5aLHtpZDpcImxCWCtha1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiVmlld1wifV19KSkpXX0pO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIENEKCl7cmV0dXJuIENEPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sQ0QuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IEFEPWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLENEKHt3aWR0aDoyNCxoZWlnaHQ6MjQsdmlld0JveDpcIjAgMCAyNCAyNFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSxTRHx8KFNEPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIk0yMC44MzcgOS40ODlhLjU1OC41NTggMCAwIDAgMC0uNzlMMTUuMyAzLjE2NGEuNTU4LjU1OCAwIDAgMC0uODczLjY4MmwuNzYgMS4yNjctNS45NjUgNC45N2EuODc0Ljg3NCAwIDAgMC0uMTkzLS4xNTZsLTIuMTg0LTEuMzFhLjU1OC41NTggMCAwIDAtLjY4Mi44NzNsMy40NjcgMy40NjctNS4zMzcgNS4zMzdhMSAxIDAgMSAwIDEuNDE0IDEuNDE0bDUuMzM3LTUuMzM3IDMuNDY3IDMuNDY3YS41NTguNTU4IDAgMCAwIC44NzMtLjY4MmwtMS4zMS0yLjE4NGEuODc1Ljg3NSAwIDAgMC0uMTU2LS4xOTNsNC45Ny01Ljk2NSAxLjI2Ny43NmMuMjIuMTMyLjUuMDk3LjY4MS0uMDg0WlwiLGZpbGw6XCIjMkMzMTM3XCJ9KSkpO2Z1bmN0aW9uIFJEKGUpe2NvbnN0W3Qsbl09KDAsZC51c2VTdGF0ZSkod2luZG93Lm1hdGNoTWVkaWEoZSkubWF0Y2hlcyk7ZnVuY3Rpb24gcihlKXtuKGUubWF0Y2hlcyl9cmV0dXJuKDAsZC51c2VFZmZlY3QpKCgoKT0+e2NvbnN0IHQ9d2luZG93Lm1hdGNoTWVkaWEoZSk7cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLHIpLCgpPT50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIixyKX0pLFtlXSksdH1jb25zdCBrRD17Y29sbGFwc2VkVmlld01lZGlhUXVlcnk6XCJzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDg1MHB4KVwiLGZlZWRJdGVtOlwiTzRQT3NcIixtYWluSW5mbzpcIkJiWkZiXCIscHJvZmlsZVBpY3R1cmU6XCJMTndNRlwiLHBpbjpcIklsWmZYXCIsYWN0aW9uSWNvbjpcIncxNUMyXCIsaG92ZXJlZDpcImZMWnUxXCIsZm9jdXNlZDpcInFGRFhaXCIsYWN0aXZlSW5DYWxsOlwiVkZRRDZcIixvbmdvaW5nQ2FsbDpcImxkSm5XXCIsdHlwaW5nQnViYmxlV3JhcHBlcjpcInlPQ1BjXCJ9O2Z1bmN0aW9uIE9EKGUpe2xldHtmZWVkSXRlbTp0LHNlbGVjdGVkOm4sZm9jdXNlZDpyLG9uRm9jdXM6aSxvbkJsdXI6YX09ZTtjb25zdCBzPVhjKCksYz0oMCxnLnMwKSgpLGw9KDAsZC51c2VNZW1vKSgoKCk9PigwLFRlLmM3KSh0LmNvbnZlcnNhdGlvbklkKSksW3QuY29udmVyc2F0aW9uSWRdKSx1PSgwLGsubykobCksZj0oMCxkLnVzZU1lbW8pKCgoKT0+KDAsVGUuQjYpKHQuY29udmVyc2F0aW9uSWQpKSxbdC5jb252ZXJzYXRpb25JZF0pLHA9KDAsay5vKShmKSxtPXQuZGlzcGxheUluZm8uZmVlZEl0ZW0uc25hcD8uaGFzQXVkaW8saD1zPT09dC5kaXNwbGF5SW5mby5mZWVkSXRlbUNyZWF0b3JJZCx2PSFoJiZbZFMucU0uQ2hhdE5ldyxkUy5xTS5TbmFwTmV3LGRTLnFNLkNoYXRBbmRTbmFwTmV3LGRTLnFNLlNuYXBBbmRSZWFjdGlvbk5ld10uaW5jbHVkZXModSksW3ksRV09KDAsay5vKSh0dS5hVyksW19dPVlsKCksST10LnBhcnRpY2lwYW50cy5sZW5ndGg+MT90LnBhcnRpY2lwYW50cy5maW5kKChlPT5lIT09cykpOnQucGFydGljaXBhbnRzWzBdLFM9UGwodC5jb252ZXJzYXRpb25UeXBlLEkpLFQ9TWwodC5jb252ZXJzYXRpb25UeXBlLEkpLFtDLFJdPSgwLGQudXNlU3RhdGUpKCExKSxOPWZ1bmN0aW9uKGUpe2NvbnN0IHQ9KDAsaWwuaikodHUucDIsZSk7bGV0IG49ZXUub2MuTk9ORTtmb3IoY29uc3QgZSBvZiB0fHxbXSlpZihuPWUudHlwaW5nU3RhdGUsbj09PWV1Lm9jLlRZUElORylicmVhaztyZXR1cm4gbn0odC5jb252ZXJzYXRpb25JZCksdz0oMCxrLm8pKFRlLnNjKSxEPUpsKHQuY29udmVyc2F0aW9uSWQpLFA9KDAsZC51c2VSZWYpKDApLE09KDAsZC51c2VSZWYpKDApLEw9KDAsZC51c2VSZWYpKG51bGwpLFtVLHhdPSgwLGQudXNlU3RhdGUpKDApLEY9UkQoa0QuY29sbGFwc2VkVmlld01lZGlhUXVlcnkpOygwLGQudXNlRWZmZWN0KSgoKCk9PntyJiZMLmN1cnJlbnQ/LmZvY3VzKCl9KSxbcl0pO2NvbnN0IEI9KDAsTy5ycCkoQS55ZikmJiExLFY9KCk9PntFKE51LmQuUHJlc2VudCksbiYmeT09PU51LmQuUHJlc2VudD9jKFwiL1wiKTooXy5sZW5ndGg/KGIoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwiY3JlYXRlX2NoYXRcIixkaW1lbnNpb25zOntlbnRyeV9wb2ludDpcInNlYXJjaFwifX0pLHcoXCJTRUFSQ0hfVU5TUEVDSUZJRURcIikpOihiKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcImNyZWF0ZV9jaGF0XCIsZGltZW5zaW9uczp7ZW50cnlfcG9pbnQ6XCJmZWVkXCJ9fSksdyhcIkZFRURcIikpLGMoKDAseGwuVjEpKHQuY29udmVyc2F0aW9uSWQpKSksYigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJmZWVkLml0ZW1fY2VsbC5jbGlja2VkXCJ9KSxfLmxlbmd0aCYmYigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJmZWVkX3NlYXJjaF9yZXN1bHRfZm9sbG93X3Rocm91Z2hcIn0pfSxHPXQuZGlzcGxheUluZm8uZmVlZEl0ZW0uc25hcD90LmludGVyYWN0aW9uSW5mby5tZXNzYWdlcz8/W106W10se29wZW5TbmFwOkh9PXZfKEcsITApLFc9KDAsZC51c2VDYWxsYmFjaykoKCgpPT57d2luZG93LmNsZWFyVGltZW91dChQLmN1cnJlbnQpLHdpbmRvdy5jbGVhclRpbWVvdXQoTS5jdXJyZW50KSx4KDApfSksW10pLGo9KDAsZC51c2VDYWxsYmFjaykoKGU9PntXKCksUC5jdXJyZW50PXdpbmRvdy5zZXRUaW1lb3V0KCgoKT0+e3goZSl9KSwyMDApLE0uY3VycmVudD13aW5kb3cuc2V0VGltZW91dChXLDJlMyl9KSxbV10pLFo9KCk9PntpZighRilyZXR1cm47Y29uc3QgZT1MLmN1cnJlbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2UmJmooZS50b3ArZS5oZWlnaHQvMil9LHtob3ZlcmVkOkssaG92ZXJQcm9wczpZfT1rbShGP3tvbk1vdXNlRW50ZXJDYWxsYmFjazpaLG9uTW91c2VMZWF2ZUNhbGxiYWNrOlcsb25Gb2N1c0NhbGxiYWNrOlosb25CbHVyQ2FsbGJhY2s6V306e30pO3JldHVybigwLHEuanN4cykocS5GcmFnbWVudCx7Y2hpbGRyZW46W0MmJigwLG8uWikoUm0se30sdm9pZCAwLCgwLG8uWikoQlQse29uQ2xpY2tFbmQ6KCk9PnsoMCxpdS5QQykodC5jb252ZXJzYXRpb25JZCksKDAsaXUucTgpKHQsITAsRFQudC5GRUVEKSxSKCExKX0sb25DbGlja0NhbmNlbDooKT0+UighMSl9KSksQm9vbGVhbihVKSYmKDAsby5aKShSbSx7fSx2b2lkIDAsKDAsby5aKShoRCx7ZmVlZEl0ZW06dCxtb3VzZVBvaW50ZXJUb3BPZmZzZXQ6VX0pKSwoMCxxLmpzeHMpKHhzLmRpdix7Li4uWSxyZWY6TCxpbml0aWFsOntvcGFjaXR5OjB9LGFuaW1hdGU6e29wYWNpdHk6MX0sdHJhbnNpdGlvbjp7ZHVyYXRpb246LjMsZWFzZTpcImVhc2VJblwifSxvbkNsaWNrOlYsb25LZXlEb3duOmU9PntcIkVudGVyXCI9PT1lLmtleSYmKFYoKSxlLnByZXZlbnREZWZhdWx0KCkpfSxjbGFzc05hbWU6KDAsUS5aKShrRC5mZWVkSXRlbSwodT09PWRTLnFNLkluQ2FsbHx8dT09PWRTLnFNLlJpbmdpbmcpJiZrRC5hY3RpdmVJbkNhbGwsbj9rRC5mb2N1c2VkOksmJmtELmhvdmVyZWQsdT09PWRTLnFNLkNhbGxPbmdvaW5nJiZrRC5vbmdvaW5nQ2FsbCksdGFiSW5kZXg6MCxyb2xlOlwiYnV0dG9uXCIsb25Gb2N1czppLG9uQmx1cjphLFwiYXJpYS1sYWJlbGxlZGJ5XCI6YHRpdGxlLSR7KDAsei5NYykodC5jb252ZXJzYXRpb25JZCl9IGNvbW1hMSBzdGF0dXMtJHsoMCx6Lk1jKSh0LmNvbnZlcnNhdGlvbklkKX1gLGNoaWxkcmVuOlsoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTprRC5wcm9maWxlUGljdHVyZX0sdm9pZCAwLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOmtELnR5cGluZ0J1YmJsZVdyYXBwZXJ9LHZvaWQgMCwoMCxvLlopKHRrLHt0eXBpbmdTdGF0ZTpOfSkpLCgwLHEuanN4cykocS5GcmFnbWVudCx7Y2hpbGRyZW46WygwLG8uWikoR3Use3BhcnRpY2lwYW50czooMCx0bC5KbSkodCxzKSxjb252ZXJzYXRpb25JZDp0LmNvbnZlcnNhdGlvbklkLGlzVXNlckJpcnRoZGF5OlMsZW5hYmxlRnJpZW5kbW9qaTohMCxzaXplOjU0fSksQm9vbGVhbih0LnBpbm5lZFRpbWVzdGFtcE1zKSYmKDAsby5aKShBRCx7Y2xhc3NOYW1lOmtELnBpbn0pXX0pKSwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTprRC5tYWluSW5mb30sdm9pZCAwLCgwLG8uWikoWXUse2ZlZWRJdGVtOnR9KSxEJiZuPygwLG8uWikoUlQse2ZlZWRTdGF0dXM6ZFMucU0uQ2hhdE15QUlEaXNhYmxlZCxkaXNwbGF5SW5mbzp0LmRpc3BsYXlJbmZvLHN0cmVhazp0LnN0cmVha01ldGFkYXRhLGZvY3VzZWQ6bixob3ZlcmVkOkssaXNVc2VyQmlydGhkYXk6ITEsaXNVc2VyTmV3RnJpZW5kOiExLGhpZGVTdGF0dXNJY29uOiEwLGNvbnZlcnNhdGlvbklkOnQuY29udmVyc2F0aW9uSWQsaGFzVmlld2FibGVTbmFwc09uV2ViOnZvaWQgMCE9PUh9KTooMCxvLlopKFJULHtmZWVkU3RhdHVzOnUsZGlzcGxheUluZm86dC5kaXNwbGF5SW5mbyxzdHJlYWs6dC5zdHJlYWtNZXRhZGF0YSxmb2N1c2VkOm4saG92ZXJlZDpLLGlzVXNlckJpcnRoZGF5OlMsaXNVc2VyTmV3RnJpZW5kOlQsaGlkZVN0YXR1c0ljb246dixjb252ZXJzYXRpb25JZDp0LmNvbnZlcnNhdGlvbklkLGhhc1ZpZXdhYmxlU25hcHNPbldlYjp2b2lkIDAhPT1IfSkpLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOmtELmFjdGlvbkljb259LHZvaWQgMCwoMCxvLlopKGZkLHt9LHZvaWQgMCwoMCxvLlopKFRELHt1bnJlYWRGZWVkSXRlbVN0YXR1czpwLGxhc3RBY3RvcklzU2VsZjpoLHNuYXBIYXNBdWRpbzptLG9uQ2xpY2tWaWV3YWJsZVNuYXBzOkI/SDp2b2lkIDB9KSkpXX0pXX0pfWNvbnN0IE5EPXtmZWVkOlwiZGVnMktcIixmZWVkTGlzdDpcIlFBcjAyXCIsdG9hc3RDb250YWluZXI6XCJva0ZVVVwifTt2YXIgd0Q9bigyNTA2OSk7ZnVuY3Rpb24gREQoZSl7cmV0dXJuIG5ldyBNYXAoZS5tYXAoKGU9PltlLnVzZXJfaWQsZV0pKSl9Y29uc3QgUEQ9KDAsZkMuUDEpKHBDLFRlLnhNLFNsLm00LEkueUssVGUuTG8sVGUuRUwsKChlLHQsbixyLGksbyk9Pntjb25zdCBhPVtdO2Zvcihjb25zdCB0IG9mIGUpe2NvbnN0IGU9by5nZXQoKDAsei5NYykodC51c2VyX2lkKSk/P3twYXJ0aWNpcGFudHM6cj9bdC51c2VyX2lkLHJdOlt0LnVzZXJfaWRdLGNvbnZlcnNhdGlvblR5cGU6UGUuaTEuT05FT05PTkV9O2EucHVzaCh7ZmVlZEVudHJ5OmUscGFydGljaXBhbnRVc2VyczpERChbdF0pfSl9Zm9yKGNvbnN0IGUgb2YgdCl7Y29uc3QgdD1pWygwLHouTWMpKGUuY29udmVyc2F0aW9uTWV0YWRhdGEuY29udmVyc2F0aW9uSWQpXT8/e2NvbnZlcnNhdGlvbklkOmUuY29udmVyc2F0aW9uTWV0YWRhdGEuY29udmVyc2F0aW9uSWQscGFydGljaXBhbnRzOmUuY29udmVyc2F0aW9uTWV0YWRhdGEucGFydGljaXBhbnRzLm1hcCgoZT0+ZS5wYXJ0aWNpcGFudElkKSksY29udmVyc2F0aW9uVHlwZTpQZS5pMS5VU0VSQ1JFQVRFREdST1VQLGNvbnZlcnNhdGlvblRpdGxlOmUuY29udmVyc2F0aW9uTWV0YWRhdGEudGl0bGV9LHI9W107Zm9yKGNvbnN0IHQgb2YgZS5jb252ZXJzYXRpb25NZXRhZGF0YS5wYXJ0aWNpcGFudHMpe2NvbnN0IGU9bi5nZXQodC5wYXJ0aWNpcGFudElkKTtlJiZyLnB1c2goZSl9YS5wdXNoKHtmZWVkRW50cnk6dCxwYXJ0aWNpcGFudFVzZXJzOkREKHIpfSl9Y29uc3Qgcz0oMCx0bC5tQykoaSksYz1uZXcgU2V0KHQubWFwKChlPT5lLmNvbnZlcnNhdGlvbk1ldGFkYXRhLmNvbnZlcnNhdGlvbklkKSkpLGw9cy5maWx0ZXIoKGU9PmUuY29udmVyc2F0aW9uVHlwZT09PVBlLmkxLlVTRVJDUkVBVEVER1JPVVAmJiFjLmhhcyhlLmNvbnZlcnNhdGlvbklkKSkpO2Zvcihjb25zdCBlIG9mIGwpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IHIgb2YgZS5wYXJ0aWNpcGFudHMpe2NvbnN0IGU9bi5nZXQocik7ZSYmdC5wdXNoKGUpfWEucHVzaCh7ZmVlZEVudHJ5OmUscGFydGljaXBhbnRVc2VyczpERCh0KX0pfXJldHVybiBhfSkpLE1EPSgwLGZDLlAxKShQRCxJLnlLLCgoZSx0LG4pPT4oe3NlYXJjaFRleHQ6dCxyYW5raW5nOm59KSksKChlLHQsbik9PntsZXR7c2VhcmNoVGV4dDpyLHJhbmtpbmc6aX09bjtyZXR1cm4gcj9lLm1hcCgoZT0+KHtpdGVtOmUsc2NvcmU6KDAsVGUuZFApKHIsZS5wYXJ0aWNpcGFudFVzZXJzLHQsZS5mZWVkRW50cnkucGFydGljaXBhbnRzLGUuZmVlZEVudHJ5LmNvbnZlcnNhdGlvblRpdGxlKX0pKSkuZmlsdGVyKChlPT5lLnNjb3JlPjApKS5zb3J0KCgoZSx0KT0+KDAsd0QuaTQpKGUsdCxpKSkpOltdfSkpLExEPXtmZWVkSXRlbTpcIl9BbVVmXCIsaW5mbzpcIklIZ3NhXCIsdGl0bGU6XCJIWVVqU1wiLHN1YnRpdGxlOlwiZE93VUZcIixwcm9maWxlUGljdHVyZTpcIlJYSDNnXCIsaG92ZXJlZDpcIlZMS0R2XCJ9O3ZhciBVRDtmdW5jdGlvbiB4RChlKXtsZXR7c2VhcmNoUmVzdWx0OnQsc2VsZWN0ZWRDb252ZXJzYXRpb25JZDpuLGZvY3VzZWQ6cixvbkZvY3VzOmksb25CbHVyOmF9PWU7Y29uc3Qgcz1YYygpLHtob3ZlcmVkOmMsaG92ZXJQcm9wczpsfT1rbSgpLHU9KDAsZy5zMCkoKSxbZixwXT0oMCxrLm8pKHR1LmFXKSxtPSgwLGsubykoVGUuRDYpLGg9KDAsay5vKShUZS5zYyksdj0oMCxkLnVzZVJlZikobnVsbCk7KDAsZC51c2VFZmZlY3QpKCgoKT0+e3ImJnYuY3VycmVudD8uZm9jdXMoKX0pLFtyXSk7Y29uc3QgeT0oMCx0bC5hRCkodC5mZWVkRW50cnkscyksRT1QbCh0LmZlZWRFbnRyeS5jb252ZXJzYXRpb25UeXBlLHkpLF89eT90LnBhcnRpY2lwYW50VXNlcnMuZ2V0KHkpOnZvaWQgMCxJPVtdO0UmJkkucHVzaChVRHx8KFVEPSgwLG8uWikoRGIse30sXCJiaXJ0aGRheVwiKSkpLHQuZmVlZEVudHJ5LnN0cmVha01ldGFkYXRhPy5jb3VudCYmSS5wdXNoKCgwLG8uWikoTWIse3N0cmVha0NvdW50OnQuZmVlZEVudHJ5LnN0cmVha01ldGFkYXRhLmNvdW50LHNob3dIb3VyZ2xhc3M6KDAsdGwubXEpKHQuZmVlZEVudHJ5LnN0cmVha01ldGFkYXRhLmV4cGlyYXRpb25UaW1lc3RhbXBNcyl9LFwic3RyZWFrXCIpKTtjb25zdCBTPWFzeW5jKCk9PntsZXQgZT10LmZlZWRFbnRyeS5jb252ZXJzYXRpb25JZDtpZighZSYmXyl7Y29uc3QgdD1fLnVzZXJfaWQsbj1hd2FpdCBtKFtzLHRdKSxyPW4uZ2V0KHQpPy5jb252ZXJzYXRpb25JZDtlPXJ9cChOdS5kLlByZXNlbnQpLGU9PT1uJiZmPT09TnUuZC5QcmVzZW50P3UoXCIvXCIpOmUmJihiKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcImNyZWF0ZV9jaGF0XCIsZGltZW5zaW9uczp7ZW50cnlfcG9pbnQ6XCJzZWFyY2hcIn19KSxoKFwiU0VBUkNIX1VOU1BFQ0lGSUVEXCIpLHUoKDAseGwuVjEpKGUpKSksYigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJmZWVkLml0ZW1fY2VsbC5jbGlja2VkXCJ9KSxiKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcImZlZWRfc2VhcmNoX3Jlc3VsdF9mb2xsb3dfdGhyb3VnaFwifSl9O3JldHVybigwLHEuanN4KShxLkZyYWdtZW50LHtjaGlsZHJlbjooMCxxLmpzeHMpKHhzLmRpdix7Li4ubCxpbml0aWFsOntvcGFjaXR5OjB9LGFuaW1hdGU6e29wYWNpdHk6MX0scmVmOnYsdHJhbnNpdGlvbjp7ZHVyYXRpb246LjMsZWFzZTpcImVhc2VJblwifSxvbkNsaWNrOlMsb25LZXlEb3duOmU9PntcIkVudGVyXCI9PT1lLmtleSYmKGUucHJldmVudERlZmF1bHQoKSxTKCkpfSxjbGFzc05hbWU6KDAsUS5aKShMRC5mZWVkSXRlbSxjJiZMRC5ob3ZlcmVkKSx0YWJJbmRleDowLG9uRm9jdXM6aSxvbkJsdXI6YSxjaGlsZHJlbjpbKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6TEQucHJvZmlsZVBpY3R1cmV9LHZvaWQgMCwoMCxvLlopKEd1LHtwYXJ0aWNpcGFudHM6KDAsdGwuSm0pKHQuZmVlZEVudHJ5LHMpLGNvbnZlcnNhdGlvbklkOnQuZmVlZEVudHJ5LmNvbnZlcnNhdGlvbklkLGlzVXNlckJpcnRoZGF5OkUsZW5hYmxlRnJpZW5kbW9qaTohMCxzaXplOjU0fSkpLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOkxELmluZm99LHZvaWQgMCwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpMRC50aXRsZX0sdm9pZCAwLCgwLHdELmZOKSh0LHMpKSwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpMRC5zdWJ0aXRsZX0sdm9pZCAwLCgwLHdELiRJKSh0LHMpLEJvb2xlYW4oSSkmJigwLG8uWikod2Ise30sdm9pZCAwLCgwLG8uWikoXCJzcGFuXCIse30sdm9pZCAwLEkpKSkpXX0pfSl9QygpLmdldExvZ2dlcihcIltGZWVkXVtTZWFyY2hdW0NlbGxdXCIpO2NvbnN0IEZEPXtmZWVkTGlzdDpcIk1DQTd4XCJ9O2Z1bmN0aW9uIEJEKGUpe2xldHtzZWFyY2hUZXh0OnQsd2lkdGg6bixoZWlnaHQ6cixzZWxlY3RlZENvbnZlcnNhdGlvbklkOmksZm9jdXNlZEluZGV4OmEsb25Gb2N1c2VkSW5kZXhDaGFuZ2VkOnN9PWU7Y29uc3R7cmFua2luZzpjfT0oMCxpbC5qKShUZS5CXyksbD0oMCxrLm8pKChlPT5NRChlLHQsYykpKSx1PSgpPT5zKHZvaWQgMCk7cmV0dXJuKDAsby5aKShtdyx7aGVpZ2h0OnIsd2lkdGg6bixyb3dDb3VudDpsLmxlbmd0aCxyb3dIZWlnaHQ6NzQscm93UmVuZGVyZXI6ZT0+e2xldHtpbmRleDp0LHN0eWxlOm59PWU7Y29uc3Qgcj1sW3RdLml0ZW07cmV0dXJuKDAsby5aKShcImRpdlwiLHtyb2xlOlwibGlzdGl0ZW1cIixzdHlsZTpufSwoMCx6Lk1jKShyLmZlZWRFbnRyeS5jb252ZXJzYXRpb25JZD8/ci5mZWVkRW50cnkucGFydGljaXBhbnRzWzBdKSwoMCxvLlopKHhELHtzZWFyY2hSZXN1bHQ6cixzZWxlY3RlZENvbnZlcnNhdGlvbklkOmksZm9jdXNlZDp0PT09YSxvbkJsdXI6dSxvbkZvY3VzOigpPT4oZT0+cyhlKSkodCl9KSl9LGNsYXNzTmFtZTpGRC5mZWVkTGlzdCxyb2xlOlwibGlzdFwiLGNvbnRhaW5lclJvbGU6XCJsaXN0XCJ9KX12YXIgVkQ7Y29uc3QgR0Q9ZU4oKSgoKGUsdCk9Pnt0JiZiKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcImZlZWRfc2VhcmNoX3Jlc3VsdF9jb21wbGV0ZWRcIixkaW1lbnNpb25zOntoYXNfcmVzdWx0OlN0cmluZyhlPjApfX0pfSksMWUzLHtsZWFkaW5nOiExfSk7ZnVuY3Rpb24gSEQoZSl7bGV0e3NlYXJjaFRleHQ6dCxmb2N1c2VkSW5kZXg6bixvbkZvY3VzZWRJbmRleENoYW5nZWQ6cixvbktleURvd246aX09ZTtjb25zdCBhPSgwLG1lLlopKCk7X2UoXCJmcmllbmRzX2ZlZWRcIix7c2hvdWxkVHJhY2tJbml0aWFsUmVuZGVyVGltZTohMH0pO2NvbnN0IHM9KDAsRmwubykoKSxbYyxsLGYscF09KDAsay5vKSgoZT0+W2UubWVzc2FnaW5nLnF1ZXJ5aW5nRmVlZCxlLm1lc3NhZ2luZy5oYXNOb01vcmVGZWVkRW50cmllcyxlLm1lc3NhZ2luZy5wYWdlRmVlZCxlLm1lc3NhZ2luZy5mZWVkRXJyb3JdKSkse3JhbmtlZEZlZWRJdGVtczptfT0oMCxpbC5qKShUZS5CXyksaD1RbChzKSYmcyx5PSgwLGcuczApKCk7KDAsZC51c2VFZmZlY3QpKCgoKT0+e2gmJnkoXCIvXCIpfSksW20saCx5XSk7Y29uc3R7c2hvd1RvYXN0OkUsYWN0aXZlVG9hc3RzOl8saGlkZVRvYXN0Okl9PUpkKCksUz1mdW5jdGlvbihlKXtjb25zdCB0PSgwLGQudXNlUmVmKSh2b2lkIDApO3JldHVybigwLGQudXNlRWZmZWN0KSgoKCk9PntpZihJZS5oYXMoZSkpcmV0dXJuO2NvbnN0e2VsYXBzZWQ6bixpc091dGxpZXI6cixsb3N0Q29ubmVjdGlvbjppLGxvc3RGb2N1czpvLHRhYkZyb3plbjphfT15ZS5DVi5jYXB0dXJlVGltZShTZSk7YigpLmFkZFRpbWVyKHttZXRyaWNzTmFtZTpgY29tcG9uZW50LiR7ZX0udGltZV90b19zdGFydF9sb2FkaW5nYCxtaWxsaVNlYzpNYXRoLmZsb29yKG4pLGRpbWVuc2lvbnM6e2lzX2ZpcnN0X3RpbWVfbG9hZDpTdHJpbmcoWi5XSC5idW5kbGUpLGlzX291dGxpZXI6U3RyaW5nKHIpLGxvc3RfY29ubmVjdGlvbjpTdHJpbmcoaSksbG9zdF9mb2N1czpTdHJpbmcobyksdGFiX2Zyb3plbjpTdHJpbmcoYSl9fSksdC5jdXJyZW50PU1hdGguZmxvb3Iobil9KSxbZV0pLCgwLGQudXNlQ2FsbGJhY2spKCgoKT0+e2lmKEllLmhhcyhlKSlyZXR1cm47aWYodm9pZCAwPT09dC5jdXJyZW50KXJldHVybiB1LmtnLmVycm9yKFwibG9nZ2luZyB0dGkgd2l0aG91dCB0dHNsIGxvZ2dlZCBmaXJzdFwiKSwoMCxnZS5WKShcImxvZ190dGlfd2l0aG91dF90dHNsXCIpLHZvaWQgSWUuYWRkKGUpO2NvbnN0e2VsYXBzZWQ6bixpc091dGxpZXI6cixsb3N0Q29ubmVjdGlvbjppLGxvc3RGb2N1czpvLHRhYkZyb3plbjphfT15ZS5DVi5jYXB0dXJlVGltZShTZSkscz17aXNfZmlyc3RfdGltZV9sb2FkOlN0cmluZyhaLldILmJ1bmRsZSksaXNfb3V0bGllcjpTdHJpbmcociksbG9zdF9jb25uZWN0aW9uOlN0cmluZyhpKSxsb3N0X2ZvY3VzOlN0cmluZyhvKSx0YWJfZnJvemVuOlN0cmluZyhhKX07YigpLmFkZFRpbWVyKHttZXRyaWNzTmFtZTpgY29tcG9uZW50LiR7ZX0udGltZV90b19pbnRlcmFjdGl2ZWAsbWlsbGlTZWM6TWF0aC5mbG9vcihuKSxkaW1lbnNpb25zOnN9KSxiKCkuYWRkVGltZXIoe21ldHJpY3NOYW1lOmBjb21wb25lbnQuJHtlfS50aW1lX2Zyb21fc3RhcnRfbG9hZGluZ190b19pbnRlcmFjdGl2ZWAsbWlsbGlTZWM6TWF0aC5mbG9vcihuKS10LmN1cnJlbnQsZGltZW5zaW9uczpzfSksSWUuYWRkKGUpfSksW2VdKX0oXCJmcmllbmRzX2ZlZWRcIiksVD0oKT0+cih2b2lkIDApLEM9ZT0+e2xldCB0LHtpbmRleDppLHN0eWxlOmF9PWU7cmV0dXJuIHQ9aT09PW0ubGVuZ3RoP3trZXk6XCJwYWdpbmF0ZVRyaWdnZXJcIixjb250ZW50OigwLG8uWikodFIse2lzTG9hZGluZzpjLGhhc01vcmU6IWwsb25QYWdpbmF0ZTpmfSl9OihlPT57Y29uc3QgdD1tW2VdLml0ZW07cmV0dXJue2tleTooMCx6Lk1jKSh0LmNvbnZlcnNhdGlvbklkKSxjb250ZW50OigwLG8uWikoT0Qse2ZlZWRJdGVtOnQsc2VsZWN0ZWQ6dC5jb252ZXJzYXRpb25JZD09PXMsZm9jdXNlZDpuPT09ZSxvbkZvY3VzOigpPT4oZT0+cihlKSkoZSksb25CbHVyOlR9KX19KShpKSwoMCxvLlopKFwiZGl2XCIse3N0eWxlOmEscm9sZTpcImxpc3RpdGVtXCJ9LHQua2V5LHQuY29udGVudCl9O3JldHVybigwLGQudXNlRWZmZWN0KSgoKCk9PnttLmxlbmd0aD4wJiZTKCl9KSxbbS5sZW5ndGgsU10pLCgwLGQudXNlRWZmZWN0KSgoKCk9PntwPyhJKFwiZmVlZC1lcnJvclwiKSxFKHtrZXk6XCJmZWVkLWVycm9yXCIsdHlwZTpRZC5OZWdhdGl2ZSx0aW1lb3V0Ok51bWJlci5QT1NJVElWRV9JTkZJTklUWSxjb250ZW50OlZEfHwoVkQ9KDAsby5aKSh2Llose2lkOlwidEVndXh3XCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJDb3VsZCBub3QgbG9hZCBmcmllbmRzIGZlZWQuXCJ9XX0pKX0pLGIoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwiZmVlZC5mZWVkX2Vycm9yX3RvYXN0LmNvdWxkX25vdF9sb2FkX2ZlZWQuc2hvd25cIn0pKTpJKFwiZmVlZC1lcnJvclwiKX0pLFtwLEUsSV0pLCgwLGQudXNlRWZmZWN0KSgoKCk9PntHRChtLmxlbmd0aCx0KX0pLFt0XSksKDAsby5aKShcIm5hdlwiLHtjbGFzc05hbWU6TkQuZmVlZCxvbktleURvd246aX0sdm9pZCAwLCgwLG8uWikoUUkse2NsYXNzTmFtZTpORC50b2FzdENvbnRhaW5lcixhY3RpdmVUb2FzdHM6Xyx0b3BPZmZzZXQ6MTZ9KSwoMCxvLlopKFhOLHt9LHZvaWQgMCwoZT0+e2xldHtoZWlnaHQ6aSx3aWR0aDpjfT1lO3JldHVybiB0Lmxlbmd0aD4wPygwLG8uWikoQkQse3NlYXJjaFRleHQ6dCx3aWR0aDpjLGhlaWdodDppLHNlbGVjdGVkQ29udmVyc2F0aW9uSWQ6cyxmb2N1c2VkSW5kZXg6bixvbkZvY3VzZWRJbmRleENoYW5nZWQ6cn0pOigwLG8uWikobXcse2hlaWdodDppLHdpZHRoOmMscm93Q291bnQ6bS5sZW5ndGgrMSxyb3dIZWlnaHQ6NzQscm93UmVuZGVyZXI6QyxjbGFzc05hbWU6TkQuZmVlZExpc3Qscm9sZTpcImxpc3RcIixjb250YWluZXJSb2xlOlwibGlzdFwiLFwiYXJpYS1sYWJlbFwiOmEuZm9ybWF0TWVzc2FnZSh7aWQ6XCJtQlkvUWhcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkZyaWVuZHMgRmVlZFwifV19KX0pfSkpKX12YXIgV0Q9bigzNjIyNSk7Y29uc3QgakQ9e25vdGlmaWNhdGlvbnNPZmZCYW5uZXI6XCJLZ3RTYlwiLGFjdGlvbkJ1dHRvbjpcIklBQzN5XCJ9O3ZhciBaRCx6RDtmdW5jdGlvbiBLRCgpe3JldHVybiBLRD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LEtELmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBZRD1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIixLRCh7d2lkdGg6MTcsaGVpZ2h0OjE2LHZpZXdCb3g6XCIwIDAgMTcgMTZcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksWkR8fChaRD1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2NsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNC44ODQgNC42NWMtLjE5OS40NTgtLjMwOC45NjMtLjMwOCAxLjQ5MnYxLjM2MmMwIDEuMjkyLS41OTggMi40ODktMS42NCAzLjI4MmEuNTA1LjUwNSAwIDAgMC0uMTc0LjU3LjUyLjUyIDAgMCAwIC40OTQuMzQ0SDYuNWEyIDIgMCAxIDAgNCAwaC4zTDQuODg0IDQuNjVabTguNTI3IDcuMDVoLjMzM2EuNTIxLjUyMSAwIDAgMCAuNDk0LS4zNDUuNTA1LjUwNSAwIDAgMC0uMTczLS41NjkgNC4xMDEgNC4xMDEgMCAwIDEtMS42NC0zLjI4MlY2LjE0MmMwLTIuMTE5LTEuNzYxLTMuODQyLTMuOTI1LTMuODQyYTMuOTYgMy45NiAwIDAgMC0yLjM0Ljc1OWw3LjI1MSA4LjY0MVpcIn0pKSx6RHx8KHpEPWQuY3JlYXRlRWxlbWVudChcInJlY3RcIix7eDozLjUseTozLHdpZHRoOjEuMixoZWlnaHQ6MTMuNSxyeDouNix0cmFuc2Zvcm06XCJyb3RhdGUoLTQwIDMuNSAzKVwifSkpKTt2YXIgcUQsWEQsUUQsSkQsJEQsZVAsdFAsblAsclA7ZnVuY3Rpb24gaVAoZSl7bGV0e2NoaWxkcmVuOnQsZGF0YVRlc3RJZDpuLGNsYXNzTmFtZTpyfT1lO3JldHVybigwLG8uWikoZmQse30sdm9pZCAwLCgwLG8uWikoeHMuZGl2LHtpbml0aWFsOntoZWlnaHQ6MCxvcGFjaXR5OjB9LGFuaW1hdGU6e2hlaWdodDpcIjI0cHhcIixvcGFjaXR5OjF9LGV4aXQ6e2hlaWdodDowLG9wYWNpdHk6MH0sdHJhbnNpdGlvbjp7ZHVyYXRpb246LjMsZWFzZTpcImVhc2VJblwifSxjbGFzc05hbWU6cn0sdm9pZCAwLHFEfHwocUQ9KDAsby5aKShZRCx7fSkpLHQpKX1mdW5jdGlvbiBvUCgpe2NvbnN0e2Jyb3dzZXJOb3RpZmljYXRpb25zUGVybWlzc2lvbjplLHNldE5vdGlmaWNhdGlvbnNQcmVmZXJlbmNlOnR9PUtPKCk7cmV0dXJuKDAsby5aKShpUCx7Y2xhc3NOYW1lOmpELm5vdGlmaWNhdGlvbnNPZmZCYW5uZXIsZGF0YVRlc3RJZDpcImFwcC5mZWVkLkZlZWRCYW5uZXIuTm90aWZpY2F0aW9uc09mZkJhbm5lclwifSx2b2lkIDAsWER8fChYRD0oMCxvLlopKHYuWix7aWQ6XCJjRjRiWTdcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIk5vdGlmaWNhdGlvbnMgYXJlIG9mZlwifV19KSksXCJkZW5pZWRcIj09PWU/KDAsby5aKShcImFcIix7Y2xhc3NOYW1lOmpELmFjdGlvbkJ1dHRvbixvbkNsaWNrOigpPT4oMCxXRC5KTCkoXCJiYW5uZXJcIil9LHZvaWQgMCxRRHx8KFFEPSgwLG8uWikodi5aLHtpZDpcIkV3K2NObFwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiTGVhcm4gbW9yZVwifV19KSkpOigwLG8uWikoXCJidXR0b25cIix7Y2xhc3NOYW1lOmpELmFjdGlvbkJ1dHRvbix0eXBlOlwiYnV0dG9uXCIsb25DbGljazooKT0+e3QoITAsXCJiYW5uZXJcIil9fSx2b2lkIDAsSkR8fChKRD0oMCxvLlopKHYuWix7aWQ6XCJtK2hIR2tcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlR1cm4gT25cIn1dfSkpKSl9ZnVuY3Rpb24gYVAoKXtjb25zdFtlLHRdPSgwLG1kLmJHKSgpLFtuLHJdPSgwLG1kLnhxKSgpO3JldHVybigwLG8uWikoaVAse2NsYXNzTmFtZTpqRC5ub3RpZmljYXRpb25zT2ZmQmFubmVyLGRhdGFUZXN0SWQ6XCJhcHAuZmVlZC5GZWVkQmFubmVyLnNvdW5kSXNPZmYuXCIrKG4/XCJjaGF0QW5kU25hcFwiOlwiYWxsXCIpfSx2b2lkIDAsbj8kRHx8KCREPSgwLG8uWikodi5aLHtpZDpcImJKb2NkMlwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiU291bmRzIGFyZSBvZmYgZm9yIENoYXRzICYgU25hcHNcIn1dfSkpOmVQfHwoZVA9KDAsby5aKSh2Llose2lkOlwiekt0azkrXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJTb3VuZHMgYXJlIG9mZiBmb3IgYWxsXCJ9XX0pKSwoMCxvLlopKFwiYnV0dG9uXCIse2NsYXNzTmFtZTpqRC5hY3Rpb25CdXR0b24sdHlwZTpcImJ1dHRvblwiLG9uQ2xpY2s6KCk9PntuP3QoITApOnIoITApfX0sdm9pZCAwLHRQfHwodFA9KDAsby5aKSh2Llose2lkOlwiVHFxa1R0XCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJUdXJuIE9uXCJ9XX0pKSkpfWZ1bmN0aW9uIHNQKCl7Y29uc3R7c2hvdWxkU2hvd0Jhbm5lcjplfT1LTygpLFt0XT0oMCxtZC5iRykoKTtyZXR1cm4hZSYmdD9udWxsOmU/blB8fChuUD0oMCxvLlopKG9QLHt9KSk6clB8fChyUD0oMCxvLlopKGFQLHt9KSl9Y29uc3QgY1A9e3dyYXBwZXI6XCJ3SHZFeVwifTtmdW5jdGlvbiBsUChlKXtsZXR7ZGF0YVRlc3RJZDp0LGNoaWxkcmVuOm4sb25DbGljazpyfT1lO3JldHVybigwLG8uWikoeHMuZGl2LHtpbml0aWFsOntvcGFjaXR5OjB9LGFuaW1hdGU6e29wYWNpdHk6MX0sdHJhbnNpdGlvbjp7ZHVyYXRpb246LjMsZWFzZTpcImVhc2VJblwifSxjbGFzc05hbWU6Y1Aud3JhcHBlcixvbkNsaWNrOnIsdGFiSW5kZXg6MH0sdm9pZCAwLG4pfWNvbnN0IHVQPXtiaXRtb2ppOlwiUUhiQkxcIix0ZXh0V3JhcHBlcjpcImxkbmtuXCIsaGVhZGVyOlwiWmZEZmJcIixzdWJUZXh0OlwiWHYzTVNcIn07dmFyIGRQO2NvbnN0IGZQPVwiYjFkYzdhMzgtODZkMS00ZjM0LWJjZjMtMmRhYmFlODBkMjA0XCIscFA9KCk9PntiKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpgc3cudXBkYXRlLiR7d2UuS1p9LmFjY2VwdC5idXR0b24uc3RhcnRgfSksKDAsd2UuTTEpKFwiYnV0dG9uXCIpfTtmdW5jdGlvbiBtUCgpe2NvbnN0IGU9WGMoKSx0PUNsKGUpPy5iaXRtb2ppX2F2YXRhcl9pZCxuPWRQfHwoZFA9KDAsby5aKSh2Llose2lkOlwiVStpRkNwXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJXZSd2ZSBtYWRlIGFuIHVwZGF0ZVwifV19KSkscj0oMCxvLlopKHYuWix7aWQ6XCJORk4vZEdcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6OCx2YWx1ZTpcImFcIixjaGlsZHJlbjpbe3R5cGU6MCx2YWx1ZTpcIkNsaWNrIGhlcmVcIn1dfSx7dHlwZTowLHZhbHVlOlwiIHRvIHJlZnJlc2hcIn1dLHZhbHVlczp7YTplPT4oMCxvLlopKFwiYVwiLHt9LHZvaWQgMCxlKX19KTtyZXR1cm4oMCxvLlopKGxQLHtvbkNsaWNrOnBQLGRhdGFUZXN0SWQ6XCJhcHAuZmVlZC5GZWVkSXRlbS5BcHBVcGRhdGVcIn0sdm9pZCAwLHQmJigwLHEuanN4KShcImltZ1wiLHtjbGFzc05hbWU6dVAuYml0bW9qaSxhbHQ6XCJtYWlsYm94LXVzZXItYml0bW9qaVwiLC4uLigwLGhlLnpsKSh7Y29taWNJZDpmUCxhdmF0YXJJZDp0LG1pblNjYWxlOmhlLnhZLkhBTEZ9KX0pLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOnVQLnRleHRXcmFwcGVyfSx2b2lkIDAsKDAsby5aKShcInNwYW5cIix7Y2xhc3NOYW1lOnVQLmhlYWRlcn0sdm9pZCAwLG4pLCgwLG8uWikoXCJzcGFuXCIse2NsYXNzTmFtZTp1UC5zdWJUZXh0fSx2b2lkIDAscikpKX12YXIgaFA7ZnVuY3Rpb24gdlAoKXtyZXR1cm4gdlA9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSx2UC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y29uc3QgZ1A9ZT0+ZC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsdlAoe3dpZHRoOjMyLGhlaWdodDozMix2aWV3Qm94OlwiMCAwIDMyIDMyXCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLGhQfHwoaFA9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwibTE4LjIyNSAxNiA0LjU5NiA0LjU5NmExLjc1IDEuNzUgMCAwIDEtMi40NzUgMi40NzVsLTQuNTk2LTQuNTk2LTQuNTk2IDQuNTk2YTEuNzUgMS43NSAwIDAgMS0yLjQ3NS0yLjQ3NUwxMy4yNzUgMTYgOC42OCAxMS40MDRhMS43NSAxLjc1IDAgMCAxIDIuNDc1LTIuNDc1bDQuNTk2IDQuNTk2IDQuNTk2LTQuNTk2YTEuNzUgMS43NSAwIDAgMSAyLjQ3NSAyLjQ3NUwxOC4yMjUgMTZaXCIsZmlsbDpcIiNERURFREVcIn0pKSk7dmFyIHlQPW4oMjYxMzApO2NvbnN0IEVQPXtiaXRtb2ppOlwieEtVMnJcIix0ZXh0V3JhcHBlcjpcIlplRGFBXCIsaGVhZGVyOlwiYWVqY0JcIixzdWJUZXh0OlwiUEtxZWtcIixkaXNtaXNzOlwiS2RNWU1cIn07dmFyIF9QLElQO2NvbnN0IFNQPVwiYmFmZGUwY2EtYzJiZi00MzBkLTk0MzQtZGY0MzdlODVlN2YxXCI7ZnVuY3Rpb24gYlAoZSl7bGV0e2Rpc21pc3NDYWxsYmFjazp0fT1lO2NvbnN0e2Jyb3dzZXJOb3RpZmljYXRpb25zUGVybWlzc2lvbjpuLHNob3VsZFNob3dCYW5uZXI6cixzZXROb3RpZmljYXRpb25zUHJlZmVyZW5jZTppfT1LTygpLGE9WGMoKSxzPUNsKGEpPy5iaXRtb2ppX2F2YXRhcl9pZDsoMCxkLnVzZUVmZmVjdCkoKCgpPT57ciYmKFwiZGVuaWVkXCI9PT1uP2IoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwibm90aWZpY2F0aW9uc19sZWFybl9tb3JlX3Nob3duXCIsZGltZW5zaW9uczp7YWN0aW9uX29yaWdpbjpcImZlZWRcIixpc19wd2E6U3RyaW5nKCgwLHlQLk51KSgpKX19KTpiKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcIm5vdGlmaWNhdGlvbnNfdHVybl9vbl9zaG93blwiLGRpbWVuc2lvbnM6e2FjdGlvbl9vcmlnaW46XCJmZWVkXCIsaXNfcHdhOlN0cmluZygoMCx5UC5OdSkoKSl9fSkpfSksW24scl0pO2NvbnN0IGM9X1B8fChfUD0oMCxvLlopKHYuWix7aWQ6XCJ2c1BYSkRcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIktlZXAgdXAgd2l0aCB5b3VyIGZyaWVuZHNcIn1dfSkpLGw9KDAsby5aKSh2Llose2lkOlwiTnF3TzZxXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjgsdmFsdWU6XCJhXCIsY2hpbGRyZW46W3t0eXBlOjAsdmFsdWU6XCJMZWFybiBtb3JlXCJ9XX0se3R5cGU6MCx2YWx1ZTpcIiBhYm91dCBlbmFibGluZyBub3RpZmljYXRpb25zXCJ9XSx2YWx1ZXM6e2E6ZT0+KDAsby5aKShcImFcIix7fSx2b2lkIDAsZSl9fSksdT0oMCxvLlopKHYuWix7aWQ6XCJTWkNFeWlcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6OCx2YWx1ZTpcImFcIixjaGlsZHJlbjpbe3R5cGU6MCx2YWx1ZTpcIkVuYWJsZSBub3RpZmljYXRpb25zXCJ9XX0se3R5cGU6MCx2YWx1ZTpcIiBmb3IgbmV3IG1lc3NhZ2VzIFwifSx7dHlwZToxLHZhbHVlOlwiYnJcIn0se3R5cGU6MCx2YWx1ZTpcIiBhbmQgaW5jb21pbmcgY2FsbHNcIn1dLHZhbHVlczp7YnI6SVB8fChJUD0oMCxvLlopKFwiYnJcIix7fSkpLGE6ZT0+KDAsby5aKShcImFcIix7fSx2b2lkIDAsZSl9fSk7cmV0dXJuKDAsby5aKShsUCx7b25DbGljazpcImRlbmllZFwiPT09bj8oKT0+KDAsV0QuSkwpKFwiZmVlZFwiKTooKT0+e2koITAsXCJmZWVkXCIpfSxkYXRhVGVzdElkOlwiYXBwLmZlZWQuRmVlZEl0ZW0uVHVybk9uTm90aWZpY2F0aW9uc0NUQVwifSx2b2lkIDAscyYmKDAscS5qc3gpKFwiaW1nXCIse2NsYXNzTmFtZTpFUC5iaXRtb2ppLGFsdDpcIm1haWxib3gtdXNlci1iaXRtb2ppXCIsLi4uKDAsaGUuemwpKHtjb21pY0lkOlNQLGF2YXRhcklkOnMsbWluU2NhbGU6aGUueFkuSEFMRn0pfSksKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6RVAudGV4dFdyYXBwZXJ9LHZvaWQgMCwoMCxvLlopKFwic3BhblwiLHtjbGFzc05hbWU6RVAuaGVhZGVyfSx2b2lkIDAsYyksKDAsby5aKShcInNwYW5cIix7Y2xhc3NOYW1lOkVQLnN1YlRleHR9LHZvaWQgMCxcImRlbmllZFwiPT09bj9sOnUpKSwoMCxvLlopKGdQLHtvbkNsaWNrOmU9PntlLnN0b3BQcm9wYWdhdGlvbigpLHQoKX0sY2xhc3NOYW1lOkVQLmRpc21pc3N9KSl9Y29uc3QgVFA9e2JpdG1vamk6XCJlVURqTFwiLHRleHRXcmFwcGVyOlwic3lfYkVcIixoZWFkZXI6XCJXRnFVbFwiLHN1YlRleHQ6XCJCTWNCQVwiLGRpc21pc3M6XCJnTUJXQlwifTt2YXIgQ1AsQVAsUlA7Y29uc3Qga1A9XCJlZDExNGZiYi0wYzI3LTRjZTMtYTQ3NS04ZTY2ZTQ0NjA1MzNcIjtmdW5jdGlvbiBPUChlKXtsZXR7ZGlzbWlzc0NhbGxiYWNrOnR9PWU7Y29uc3RbbixyXT0oMCxtZC54cSkoKSxpPVhjKCksYT1DbChpKT8uYml0bW9qaV9hdmF0YXJfaWQscz1DUHx8KENQPSgwLG8uWikodi5aLHtpZDpcIlJDU28rOFwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiQ2hhdHMgYW5kIFNuYXBzIGFyZSBtdXRlZFwifV19KSksYz1BUHx8KEFQPSgwLG8uWikodi5aLHtpZDpcIjkvR0dleFwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiQWxsIHNvdW5kcyBhcmUgbXV0ZWRcIn1dfSkpLGw9KDAsby5aKSh2Llose2lkOlwiS1JiaVE0XCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjgsdmFsdWU6XCJhXCIsY2hpbGRyZW46W3t0eXBlOjAsdmFsdWU6XCJVbm11dGUgYWxsIHNvdW5kc1wifV19XSx2YWx1ZXM6e2E6ZT0+KDAsby5aKShcImFcIix7fSx2b2lkIDAsZSl9fSksdT0oMCxvLlopKHYuWix7aWQ6XCJ0ZTBlRStcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIllvdSB3aWxsIHN0aWxsIGhlYXIgaW5jb21pbmcgY2FsbHMgXCJ9LHt0eXBlOjEsdmFsdWU6XCJiclwifSx7dHlwZTowLHZhbHVlOlwiIFwifSx7dHlwZTo4LHZhbHVlOlwiYVwiLGNoaWxkcmVuOlt7dHlwZTowLHZhbHVlOlwiVW5tdXRlIGNoYXQgYW5kIHNuYXAgc291bmRzXCJ9XX1dLHZhbHVlczp7YnI6UlB8fChSUD0oMCxvLlopKFwiYnJcIix7fSkpLGE6ZT0+KDAsby5aKShcImFcIix7fSx2b2lkIDAsZSl9fSk7cmV0dXJuKDAsby5aKShsUCx7b25DbGljazooKT0+e3IoITApfSxkYXRhVGVzdElkOlwiYXBwLmZlZWQuRmVlZEl0ZW0uVHVybk9uU291bmRFZmZlY3RzLlwiKyhuP1wic25hcEFuZENoYXRBcmVPZmZcIjpcImFsbFNvdW5kQXJlT2ZmXCIpfSx2b2lkIDAsYSYmKDAscS5qc3gpKFwiaW1nXCIse2NsYXNzTmFtZTpUUC5iaXRtb2ppLGFsdDpcInNpbGVuY2UtdXNlci1iaXRtb2ppXCIsLi4uKDAsaGUuemwpKHtjb21pY0lkOmtQLGF2YXRhcklkOmEsbWluU2NhbGU6aGUueFkuSEFMRn0pfSksKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6VFAudGV4dFdyYXBwZXJ9LHZvaWQgMCwoMCxvLlopKFwic3BhblwiLHtjbGFzc05hbWU6VFAuaGVhZGVyfSx2b2lkIDAsbj9zOmMpLCgwLG8uWikoXCJzcGFuXCIse2NsYXNzTmFtZTpUUC5zdWJUZXh0fSx2b2lkIDAsbj91OmwpKSwoMCxvLlopKGdQLHtvbkNsaWNrOmU9PntlLnN0b3BQcm9wYWdhdGlvbigpLHQoKX0sY2xhc3NOYW1lOlRQLmRpc21pc3N9KSl9dmFyIE5QPW4oODk2MTMpO2xldCB3UD1mdW5jdGlvbihlKXtyZXR1cm4gZVtlLkFwcFVwZGF0ZT0wXT1cIkFwcFVwZGF0ZVwiLGVbZS5Ob3RpZmljYXRpb25zPTFdPVwiTm90aWZpY2F0aW9uc1wiLGVbZS5Tb3VuZEVmZmVjdHM9Ml09XCJTb3VuZEVmZmVjdHNcIixlW2UuQmFubmVyPTNdPVwiQmFubmVyXCIsZVtlLlB3YUluc3RhbGw9NF09XCJQd2FJbnN0YWxsXCIsZVtlLk5vbmU9NV09XCJOb25lXCIsZX0oe30pO3ZhciBEUCxQUCxNUCxMUCxVUDtmdW5jdGlvbiB4UCgpe3JldHVybiB4UD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LHhQLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBGUD1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIix4UCh7d2lkdGg6NzYsaGVpZ2h0OjcyLHZpZXdCb3g6XCIwIDAgNzYgODFcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksZC5jcmVhdGVFbGVtZW50KFwibWFza1wiLHtpZDpcIjI1NjAyZDJmYjc0NmZmNWMwODA3NjYzZWJkNWM3MWIwZjM5MzgxMzVfX2JcIixzdHlsZTp7bWFza1R5cGU6XCJhbHBoYVwifSxtYXNrVW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiLHg6MCx5OjAsd2lkdGg6NzYsaGVpZ2h0OjgxfSxEUHx8KERQPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZmlsbDpcInVybCgjMjU2MDJkMmZiNzQ2ZmY1YzA4MDc2NjNlYmQ1YzcxYjBmMzkzODEzNV9fYSlcIixkOlwiTTAgLjM2N2g3NS42MDN2NzkuODE5SDB6XCJ9KSkpLFBQfHwoUFA9ZC5jcmVhdGVFbGVtZW50KFwiZ1wiLHtmaWx0ZXI6XCJ1cmwoIzI1NjAyZDJmYjc0NmZmNWMwODA3NjYzZWJkNWM3MWIwZjM5MzgxMzVfX2MpXCIsbWFzazpcInVybCgjMjU2MDJkMmZiNzQ2ZmY1YzA4MDc2NjNlYmQ1YzcxYjBmMzkzODEzNV9fYilcIn0sZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwiTS0zOS4xNjUgMjQuMTgxYzAtMy41OTIgMC01LjM4OC42OTktNi43NmE2LjQxNCA2LjQxNCAwIDAgMSAyLjgwMy0yLjgwM2MxLjM3Mi0uNyAzLjE2OC0uNyA2Ljc2LS43aDE4My4xMTdjMy41OTMgMCA1LjM4OSAwIDYuNzYxLjdhNi40MTggNi40MTggMCAwIDEgMi44MDMgMi44MDNjLjY5OSAxLjM3Mi42OTkgMy4xNjguNjk5IDYuNzZWNjUuMjNILTM5LjE2NVYyNC4xODFaXCIsZmlsbDpcIiNmZmZcIixmaWxsT3BhY2l0eTouM30pLGQuY3JlYXRlRWxlbWVudChcImdcIix7ZmlsdGVyOlwidXJsKCMyNTYwMmQyZmI3NDZmZjVjMDgwNzY2M2ViZDVjNzFiMGYzOTM4MTM1X19kKVwifSxkLmNyZWF0ZUVsZW1lbnQoXCJnXCIse2NsaXBQYXRoOlwidXJsKCMyNTYwMmQyZmI3NDZmZjVjMDgwNzY2M2ViZDVjNzFiMGYzOTM4MTM1X19lKVwifSxkLmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIse3g6LTI5Ljg1MSx5OjIxLjIzNSx3aWR0aDozOC4yOTQsaGVpZ2h0OjM1Ljg3OCxyeDo4LjAxNyxmaWxsOlwidXJsKCMyNTYwMmQyZmI3NDZmZjVjMDgwNzY2M2ViZDVjNzFiMGYzOTM4MTM1X19mKVwifSksZC5jcmVhdGVFbGVtZW50KFwiZ1wiLHtmaWx0ZXI6XCJ1cmwoIzI1NjAyZDJmYjc0NmZmNWMwODA3NjYzZWJkNWM3MWIwZjM5MzgxMzVfX2cpXCJ9LGQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIk0tNi4wNjYgNTcuNDhINy4xNWMuOTMgMCAxLjY4NS0uNzU1IDEuNjg1LTEuNjg2di0zMi4wM2MwLS45MzItLjc1NC0xLjY4Ny0xLjY4NS0xLjY4N0gtOS4xMDFjLTEuMTk3IDIuMTA2LTQuMDM2IDkuMTg1LTMuOTI3IDE5LjI5MiAwIDAgLjI1IDEuNTcgMS4wOTMgMS41NmgzLjQ5cy45NzQtLjA4Ljk4NiAxLjM1NnYuNTEyYy0uMDA4IDIuMDE5LS4wMjcgNy40ODYgMS4zOTMgMTIuNjgyWlwiLGZpbGw6XCIjMDAwXCIsZmlsbE9wYWNpdHk6LjAxfSkpLGQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIk0tNi4zNDUgNTcuNDhINy4xNDdjLjkzIDAgMS42ODYtLjc1NSAxLjY4Ni0xLjY4NlYyMi45MmMwLS45My0uNzU1LTEuNjg1LTEuNjg2LTEuNjg1SC05LjQzN2MtMS4yMiAyLjE1NS00LjExIDkuNDAyLTQgMTkuNzUgMCAwLS4wOS45MTMuNzY4LjloMy44OHMuOTcyLS4xMjEuOTg0IDEuMzQ5di40NjljLS4wMDEgMi4xMDctLjAwNiA4LjM2IDEuNDYgMTMuNzc2WlwiLGZpbGw6XCJ1cmwoIzI1NjAyZDJmYjc0NmZmNWMwODA3NjYzZWJkNWM3MWIwZjM5MzgxMzVfX2gpXCJ9KSxkLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse29wYWNpdHk6LjgsZDpcIk0tMjIuMjgyIDQ0LjUwOHMzLjczNyA0Ljk2IDExLjMzNyA0Ljk2Uy45MTQgNDQuMjM0LjkxNCA0NC4yMzRcIixzdHJva2U6XCIjMDAwXCIsc3Ryb2tlV2lkdGg6MS4wOTYsc3Ryb2tlTGluZWNhcDpcInJvdW5kXCJ9KSkpLGQuY3JlYXRlRWxlbWVudChcImdcIix7ZmlsdGVyOlwidXJsKCMyNTYwMmQyZmI3NDZmZjVjMDgwNzY2M2ViZDVjNzFiMGYzOTM4MTM1X19pKVwifSxkLmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIse3g6MTIuMTQ2LHk6OC4zMDcsd2lkdGg6NTIuMTEzLGhlaWdodDo1Mi4xMTMscng6MjYuMDU2LGZpbGw6XCIjRkZGQzAwXCJ9KSxkLmNyZWF0ZUVsZW1lbnQoXCJnXCIse2NsaXBQYXRoOlwidXJsKCMyNTYwMmQyZmI3NDZmZjVjMDgwNzY2M2ViZDVjNzFiMGYzOTM4MTM1X19qKVwiLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSxkLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNNTQuNzkgNDIuOTIyYy0uMTQyLS40NjktLjgyMi0uNzk4LS44MjItLjc5OC0uMDYxLS4wMzctLjEyMi0uMDY1LS4xNy0uMDg5YTEyLjg2MiAxMi44NjIgMCAwIDEtMi45Ny0xLjk0OCAxMC4wNSAxMC4wNSAwIDAgMS0xLjcyNC0xLjk2M2MtLjU2OC0uODU0LS44MzYtMS41NzItLjk0OC0xLjk1Ny0uMDY2LS4yNTQtLjA1Mi0uMzUyIDAtLjQ4NC4wNDctLjEwOC4xNzMtLjIxNi4yNC0uMjYzLjM4LS4yNjcuOTk0LS42NjYgMS4zNy0uOTEuMzI0LS4yMTIuNjA2LS4zOTUuNzctLjUwOC41My0uMzcuODkyLS43NDYgMS4xMDgtMS4xNTQuMjc3LS41MjYuMzEtMS4xMDguMDk0LTEuNjc2LS4yOTEtLjc3LTEuMDEtMS4yMy0xLjkyLTEuMjNhMy4xMyAzLjEzIDAgMCAwLS42Mi4wNjVjLS41MjEuMTEzLTEuMDE5LjMtMS40MzIuNDYtLjAyOC4wMTUtLjA2LS4wMS0uMDYtLjA0Mi4wNDEtMS4wMjguMDkzLTIuNDA4LS4wMi0zLjcyMy0uMTAzLTEuMTg4LS4zNDctMi4xODgtLjc0Ni0zLjA2YTguMDA2IDguMDA2IDAgMCAwLTEuMzM0LTEuOTkxIDguMjEgOC4yMSAwIDAgMC0yLjEwMy0xLjY5NWMtMS40NS0uODMxLTMuMTAzLTEuMjU0LTQuOTEtMS4yNTQtMS44MDMgMC0zLjQ1MS40MjMtNC45MDYgMS4yNWE4LjM0NCA4LjM0NCAwIDAgMC0yLjEwOCAxLjY5NGMtLjQwOS40Ny0uOTMgMS4xMTctMS4zMzQgMS45OS0uMzk5Ljg3NC0uNjQzIDEuODc0LS43NDYgMy4wNjItLjExMyAxLjMxNC0uMDY2IDIuNTg2LS4wMTkgMy43MjIgMCAuMDMzLS4wMzMuMDU3LS4wNi4wNDMtLjQxNC0uMTYtLjkxMi0uMzQ4LTEuNDMzLS40NmEyLjc3OSAyLjc3OSAwIDAgMC0uNjItLjA2NmMtLjkxIDAtMS42MjkuNDYtMS45MiAxLjIzYTEuOTkxIDEuOTkxIDAgMCAwIC4wOTQgMS42NzZjLjIxNi40MDguNTc4Ljc4NCAxLjEwOCAxLjE1NS4xNjUuMTEzLjQ0Ni4yOTYuNzcuNTA3LjM3MS4yNC45NjcuNjI0IDEuMzQ4Ljg5Ni4wNDcuMDMzLjIwNi4xNTUuMjU4LjI4Mi4wNTYuMTM2LjA2NS4yMzUtLjAwNS41MDItLjExNy4zOS0uMzg1IDEuMDk5LS45NDQgMS45NGExMC4wNTQgMTAuMDU0IDAgMCAxLTEuNzIzIDEuOTYyIDEzLjA2NyAxMy4wNjcgMCAwIDEtMi45NzEgMS45NDggMS45MDUgMS45MDUgMCAwIDAtLjE4OC4wOTlzLS42NzYuMzQyLS44MDMuNzg4Yy0uMTg4LjY1OC4zMSAxLjI3My44MjYgMS42MDYuODM2LjU0IDEuODU1LjgzMSAyLjQ0Ni45ODYuMTY1LjA0Mi4zMTUuMDg0LjQ1MS4xMjcuMDg0LjAyOC4yOTYuMTA4LjM5LjIyNS4xMTIuMTQ2LjEyNi4zMjkuMTY5LjUzNS4wNjUuMzQ4LjIxLjc3NS42MzggMS4wNy40Ny4zMjUgMS4wNy4zNDggMS44MjYuMzc2Ljc5NC4wMjggMS43OC4wNyAyLjkwNi40NDEuNTIyLjE3NC45OTYuNDY1IDEuNTQ1LjgwMyAxLjE0NS43MDQgMi41NzMgMS41ODIgNS4wMSAxLjU4MiAyLjQzNiAwIDMuODcyLS44ODIgNS4wMjctMS41ODYuNTQ1LS4zMzQgMS4wMTQtLjYyNSAxLjUyNi0uNzk0IDEuMTI3LS4zNyAyLjExMy0uNDA4IDIuOTA2LS40NDEuNzU2LS4wMjggMS4zNTctLjA1MiAxLjgyNi0uMzc2LjQ2LS4zMTQuNTkyLS43ODguNjUzLTEuMTQ1LjAzMy0uMTc0LjA1Ni0uMzM0LjE1NS0uNDY1LjA4NC0uMTEzLjI4MS0uMTg4LjM3NS0uMjIuMTQxLS4wNDMuMjkxLS4wODUuNDY1LS4xMzIuNTkyLS4xNiAxLjMyOS0uMzQzIDIuMjMtLjg1NSAxLjA2Ni0uNjEgMS4xNDEtMS4zNjYgMS4wMjgtMS43MzdaXCIsZmlsbDpcIiNGRkZGRkVcIn0pLGQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIk01My4zMDYgNDMuOTQ4Yy0xLjQ3NC44MTMtMi40NTUuNzI4LTMuMjIgMS4yMi0uNjQ4LjQxOS0uMjY0IDEuMzE1LS43MzggMS42NDQtLjU3Ny40LTIuMjktLjAyOC00LjQ5Ny43LTEuODIyLjYtMi45ODYgMi4zMzMtNi4yNjMgMi4zMzMtMy4yODYgMC00LjQxOC0xLjcyMy02LjI2My0yLjMzMy0yLjIwNi0uNzI4LTMuOTItLjMtNC40OTctLjctLjQ3LS4zMjQtLjA5LTEuMjI1LS43MzctMS42NDMtLjc2LS40OTMtMS43NDctLjQwNC0zLjIyLTEuMjItLjk0LS41MjItLjQxLS44NDEtLjA5NS0uOTkxIDUuMzQ3LTIuNTg3IDYuMTk3LTYuNTgyIDYuMjM1LTYuODgzLjA0Ny0uMzU3LjA5OC0uNjQzLS4zLTEuMDA0LS4zOC0uMzUyLTIuMDc2LTEuNDA0LTIuNTQ1LTEuNzI4LS43OC0uNTQ1LTEuMTIyLTEuMDg1LS44NjktMS43NTEuMTc0LS40Ni42MDYtLjYzNCAxLjA2MS0uNjM0LjE0MSAwIC4yODcuMDE5LjQyMy4wNDcuODU0LjE4OCAxLjY4NS42MTUgMi4xNjQuNzI4YS44NC44NCAwIDAgMCAuMTc4LjAyM2MuMjU0IDAgLjM0OC0uMTI3LjMzLS40MjItLjA1Ny0uOTM1LS4xODktMi43NTYtLjA0My00LjQ1Ni4yMDItMi4zMzguOTU4LTMuNTAyIDEuODU0LTQuNTI1LjQzMi0uNDkzIDIuNDUtMi42MyA2LjMyLTIuNjMgMy44NzcgMCA1Ljg5MSAyLjEzNyA2LjMxOCAyLjYzLjg5NyAxLjAyOCAxLjY1MyAyLjE4NyAxLjg1NSA0LjUyNS4xNDUgMS43LjAxOSAzLjUyMS0uMDQyIDQuNDU2LS4wMi4zMS4wNzUuNDIyLjMyOC40MjJhLjg4Ljg4IDAgMCAwIC4xNzktLjAyM2MuNDc5LS4xMTggMS4zMS0uNTQ1IDIuMTY0LS43MjguMTQtLjAyOC4yODItLjA0Ny40MjItLjA0Ny40NTYgMCAuODg4LjE3NCAxLjA2MS42MzQuMjU0LjY2Ni0uMDg5IDEuMjExLS44NjggMS43NTEtLjQ3LjMyOS0yLjE2NCAxLjM3NS0yLjU0NSAxLjcyOC0uMzk0LjM2Ni0uMzQyLjY0OC0uMyAxLjAwNC4wMzguMy44OTIgNC4yOTYgNi4yMzQgNi44ODMuMzI0LjE1Ljg1NS40Ny0uMDg0Ljk5Wm0yLjQxOC0xLjI5NWMtLjI0LS42NTMtLjY5NS0xLTEuMjE2LTEuMjkxYTUuMzUyIDUuMzUyIDAgMCAwLS4yNjMtLjE0MSA0Mi41NyA0Mi41NyAwIDAgMC0uNDc0LS4yNGMtMS42MjQtLjg1OS0yLjg4OC0xLjk0My0zLjc2NS0zLjIzYTcuNTk5IDcuNTk5IDAgMCAxLS42NDgtMS4xNDVjLS4wNzUtLjIxNi0uMDctLjMzOC0uMDE5LS40NDZhLjc2Ljc2IDAgMCAxIC4yMDYtLjIxNmMuMjc3LS4xODMuNTY5LS4zNzEuNzYxLS40OTguMzQ4LS4yMjUuNjI1LS40MDQuNzk4LS41MjYuNjY3LS40NjQgMS4xMzItLjk1NyAxLjQyMy0xLjUxMS40MDgtLjc4LjQ2LTEuNjY3LjE0NS0yLjUwNy0uNDQxLTEuMTYtMS41MzUtMS44ODMtMi44NjgtMS44ODNhNC4yNTQgNC4yNTQgMCAwIDAtMS4wNTIuMTQxIDI0LjA4NCAyNC4wODQgMCAwIDAtLjA3NS0yLjQ1NWMtLjI0OS0yLjkwMi0xLjI2My00LjQxOC0yLjMyNC01LjYzLS40NDEtLjUwNi0xLjIxMS0xLjI0NC0yLjM2MS0xLjkwNS0xLjYwNi0uOTItMy40MjctMS4zODUtNS40MTMtMS4zODUtMS45ODIgMC0zLjc5OC40NjUtNS40MDkgMS4zODVhOS4yNDMgOS4yNDMgMCAwIDAtMi4zNjYgMS45MDZjLTEuMDYgMS4yMS0yLjA3NSAyLjczMi0yLjMyNCA1LjYyOS0uMDcuODI2LS4wODkgMS42NjYtLjA3NSAyLjQ1NS0uMDctLjAxOS0uMTQ1LS4wMzMtLjIxNi0uMDUyYTMuODg3IDMuODg3IDAgMCAwLS44MzUtLjA4OWMtMS4zMyAwLTIuNDI4LjcyMy0yLjg2OSAxLjg4M2EzLjAzNSAzLjAzNSAwIDAgMCAuMTQ2IDIuNTA3Yy4yOS41NTQuNzU2IDEuMDQ3IDEuNDIyIDEuNTExLjE3OS4xMjIuNDUuMy43OTguNTI2LjE4OC4xMjIuNDY1LjMuNzMzLjQ3OS4wNDIuMDI4LjE4Ny4xMzYuMjM0LjIzNS4wNTcuMTE3LjA1Ny4yNC0uMDIzLjQ3LS4xNDEuMzE0LS4zNDguNjk5LS42MzQgMS4xMjEtLjg1OSAxLjI1OS0yLjA4OSAyLjMyNC0zLjY1NyAzLjE3NC0uODMxLjQ0MS0xLjY5NS43MzctMi4wNjEgMS43MjgtLjI3Ny43NS0uMDk0IDEuNi42MDUgMi4zMTkuMjMuMjQ5LjUyMi40NjUuODgzLjY2NmE5LjUxNiA5LjUxNiAwIDAgMCAyLjE2Ljg2NGMuMDk4LjAyOC4zMzMuMTAzLjQzNi4xOTMuMjU0LjIyLjIxNi41NTguNTU5IDEuMDUxLjIwNy4zMDUuNDQxLjUxNy42MzkuNjQ4LjcxMy40OTMgMS41MTEuNTIxIDIuMzYuNTU0Ljc2Ni4wMjggMS42MzUuMDYxIDIuNjMuMzkuNDEzLjEzNi44NC4zOTkgMS4zMzMuNzA0IDEuMTkzLjczMiAyLjgxNyAxLjczMiA1LjU0IDEuNzMyczQuMzYxLTEuMDA0IDUuNTU0LTEuNzM3Yy40OTMtLjMuOTE1LS41NjMgMS4zMTQtLjY5NC45OTEtLjMzIDEuODYtLjM2MiAyLjYzLS4zOS44NS0uMDMzIDEuNjQ3LS4wNjEgMi4zNi0uNTU0YTIuNDggMi40OCAwIDAgMCAuNzI5LS43OTRjLjI0NC0uNDEzLjIzOS0uNzA4LjQ3LS45MDYuMDkzLS4wOC4zLS4xNTQuNDA3LS4xODdhOS41NTQgOS41NTQgMCAwIDAgMi4xODgtLjg3NCAzLjM1IDMuMzUgMCAwIDAgLjkyNS0uNzEzbC4wMS0uMDFjLjY1Ny0uNzA0LjgyMS0xLjUzNS41NDktMi4yNjJaXCIsZmlsbDpcIiMwMDBcIn0pKSksZC5jcmVhdGVFbGVtZW50KFwiZ1wiLHtmaWx0ZXI6XCJ1cmwoIzI1NjAyZDJmYjc0NmZmNWMwODA3NjYzZWJkNWM3MWIwZjM5MzgxMzVfX2spXCJ9LGQuY3JlYXRlRWxlbWVudChcInJlY3RcIix7eDo2Ni4xMTgseToyNS41MTMsd2lkdGg6MzYuOTYxLGhlaWdodDozNS4zMTEscng6LjY0MSx0cmFuc2Zvcm06XCJyb3RhdGUoLTkgNjYuMTE4IDI1LjUxMylcIixmaWxsOlwidXJsKCMyNTYwMmQyZmI3NDZmZjVjMDgwNzY2M2ViZDVjNzFiMGYzOTM4MTM1X19sKVwifSkpLGQuY3JlYXRlRWxlbWVudChcImdcIix7ZmlsdGVyOlwidXJsKCMyNTYwMmQyZmI3NDZmZjVjMDgwNzY2M2ViZDVjNzFiMGYzOTM4MTM1X19tKVwifSxkLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse3RyYW5zZm9ybTpcInJvdGF0ZSgtOSA2Ny41MjEgMjMuMTU2KVwiLGZpbGw6XCJ1cmwoIzI1NjAyZDJmYjc0NmZmNWMwODA3NjYzZWJkNWM3MWIwZjM5MzgxMzVfX24pXCIsZDpcIk02Ny41MjEgMjMuMTU2aDMzLjMxdjM0Ljg4MmgtMzMuMzF6XCJ9KSksZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwibTY3LjUxOSAyMy4xNTYgMzIuOS01LjIxIDUuMTggMzIuNzA5cy05LjU5NyAxLjgzNy0xOS43OTUgMy4zOGMtLjM1LjA1My0zLjM0My42MDgtNi4xODguOTgtMy40OTguNDU5LTYuOTE3Ljg1LTYuOTE3Ljg1bC01LjE4LTMyLjcwOVpcIixmaWxsOlwiI2ZmZlwifSksZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtmaWxsOlwiI0U5NTg1MFwiLGQ6XCJtNjcuMzk3IDIzLjE4IDMyLjk5LTUuMjI1IDEuNTY1IDkuODgzLTMyLjk5IDUuMjI1elwifSkpKSxNUHx8KE1QPWQuY3JlYXRlRWxlbWVudChcInJlY3RcIix7eDo0OC4xMDUseTozLjU3NCx3aWR0aDoxNi4wMzUsaGVpZ2h0OjE2LjAzNSxyeDo4LjAxNyxmaWxsOlwiI0U5NTg1MFwifSkpLExQfHwoTFA9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwiTTU2LjE1IDE0LjYyMmMtLjQ4NSAwLS45MTYtLjA4My0xLjI5NS0uMjVhMi4yMTggMi4yMTggMCAwIDEtLjktLjY5MyAxLjg2NCAxLjg2NCAwIDAgMS0uMzU5LTEuMDM4aC45MjVjLjAyLjI0Mi4xMDIuNDUuMjUuNjI3LjE0Ni4xNzQuMzM4LjMwOC41NzUuNDA0LjIzNy4wOTUuNS4xNDMuNzg5LjE0My4zMjMgMCAuNjA5LS4wNTcuODU4LS4xN2ExLjQxIDEuNDEgMCAwIDAgLjU4Ny0uNDY5Yy4xNDItLjIuMjEzLS40MzMuMjEzLS42OTcgMC0uMjc2LS4wNjgtLjUyLS4yMDUtLjczYTEuMzYgMS4zNiAwIDAgMC0uNjAyLS40OTljLS4yNjQtLjEyLS41ODctLjE4LS45NjgtLjE4aC0uNjAydi0uODA3aC42MDJhMS44IDEuOCAwIDAgMCAuNzg1LS4xNjEgMS4yMiAxLjIyIDAgMCAwIC43MjYtMS4xNDUgMS4yNyAxLjI3IDAgMCAwLS4xNjktLjY2NCAxLjE1NCAxLjE1NCAwIDAgMC0uNDc3LS40NCAxLjU0NCAxLjU0NCAwIDAgMC0uNzE5LS4xNThjLS4yNTkgMC0uNTA0LjA0OC0uNzMzLjE0M2ExLjM2NyAxLjM2NyAwIDAgMC0uNTU4LjQwOCAxLjA2IDEuMDYgMCAwIDAtLjIzNS42MzhoLS44OGExLjc5IDEuNzkgMCAwIDEgLjM1NS0xLjAzNSAyLjI0IDIuMjQgMCAwIDEgLjg3NC0uNjk3Yy4zNjItLjE2Ni43NTktLjI1IDEuMTkyLS4yNS40NjUgMCAuODYzLjA5NSAxLjE5Ni4yODMuMzMzLjE4Ni41ODguNDMyLjc2Ny43MzguMTc4LjMwNS4yNjcuNjM2LjI2Ny45OSAwIC40MjMtLjExLjc4NC0uMzMzIDEuMDgzLS4yMi4yOTgtLjUyLjUwNS0uOS42MnYuMDU4Yy40NzUuMDc5Ljg0Ni4yOCAxLjExMi42MDYuMjY3LjMyMi40LjcyMi40IDEuMiAwIC40MDgtLjExMS43NzUtLjMzNCAxLjEtLjIyLjMyMy0uNTIuNTc3LS45MDIuNzYzYTIuOTM2IDIuOTM2IDAgMCAxLTEuMzAyLjI3OVpcIixmaWxsOlwiI2ZmZlwifSkpLFVQfHwoVVA9ZC5jcmVhdGVFbGVtZW50KFwiZGVmc1wiLG51bGwsZC5jcmVhdGVFbGVtZW50KFwiZmlsdGVyXCIse2lkOlwiMjU2MDJkMmZiNzQ2ZmY1YzA4MDc2NjNlYmQ1YzcxYjBmMzkzODEzNV9fY1wiLHg6LTYzLjIxNyx5Oi0xNS43NDUsd2lkdGg6MjUxLjc0NixoZWlnaHQ6MTA1LjAyOCxmaWx0ZXJVbml0czpcInVzZXJTcGFjZU9uVXNlXCIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczpcInNSR0JcIn0sZC5jcmVhdGVFbGVtZW50KFwiZmVGbG9vZFwiLHtmbG9vZE9wYWNpdHk6MCxyZXN1bHQ6XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIn0pLGQuY3JlYXRlRWxlbWVudChcImZlR2F1c3NpYW5CbHVyXCIse2luOlwiQmFja2dyb3VuZEltYWdlRml4XCIsc3RkRGV2aWF0aW9uOjEyLjAyNn0pLGQuY3JlYXRlRWxlbWVudChcImZlQ29tcG9zaXRlXCIse2luMjpcIlNvdXJjZUFscGhhXCIsb3BlcmF0b3I6XCJpblwiLHJlc3VsdDpcImVmZmVjdDFfYmFja2dyb3VuZEJsdXJfNzExMV8yMjY0MlwifSksZC5jcmVhdGVFbGVtZW50KFwiZmVDb2xvck1hdHJpeFwiLHtpbjpcIlNvdXJjZUFscGhhXCIsdmFsdWVzOlwiMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDBcIixyZXN1bHQ6XCJoYXJkQWxwaGFcIn0pLGQuY3JlYXRlRWxlbWVudChcImZlT2Zmc2V0XCIsbnVsbCksZC5jcmVhdGVFbGVtZW50KFwiZmVHYXVzc2lhbkJsdXJcIix7c3RkRGV2aWF0aW9uOi40MDF9KSxkLmNyZWF0ZUVsZW1lbnQoXCJmZUNvbG9yTWF0cml4XCIse3ZhbHVlczpcIjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAuNSAwXCJ9KSxkLmNyZWF0ZUVsZW1lbnQoXCJmZUJsZW5kXCIse2luMjpcImVmZmVjdDFfYmFja2dyb3VuZEJsdXJfNzExMV8yMjY0MlwiLHJlc3VsdDpcImVmZmVjdDJfZHJvcFNoYWRvd183MTExXzIyNjQyXCJ9KSxkLmNyZWF0ZUVsZW1lbnQoXCJmZUJsZW5kXCIse2luOlwiU291cmNlR3JhcGhpY1wiLGluMjpcImVmZmVjdDJfZHJvcFNoYWRvd183MTExXzIyNjQyXCIscmVzdWx0Olwic2hhcGVcIn0pKSxkLmNyZWF0ZUVsZW1lbnQoXCJmaWx0ZXJcIix7aWQ6XCIyNTYwMmQyZmI3NDZmZjVjMDgwNzY2M2ViZDVjNzFiMGYzOTM4MTM1X19kXCIseDotMzEuNTQxLHk6MjAuMjk2LHdpZHRoOjQxLjY3NSxoZWlnaHQ6MzkuMjU4LGZpbHRlclVuaXRzOlwidXNlclNwYWNlT25Vc2VcIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOlwic1JHQlwifSxkLmNyZWF0ZUVsZW1lbnQoXCJmZUZsb29kXCIse2Zsb29kT3BhY2l0eTowLHJlc3VsdDpcIkJhY2tncm91bmRJbWFnZUZpeFwifSksZC5jcmVhdGVFbGVtZW50KFwiZmVDb2xvck1hdHJpeFwiLHtpbjpcIlNvdXJjZUFscGhhXCIsdmFsdWVzOlwiMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDBcIixyZXN1bHQ6XCJoYXJkQWxwaGFcIn0pLGQuY3JlYXRlRWxlbWVudChcImZlT2Zmc2V0XCIse2R5Oi43NTF9KSxkLmNyZWF0ZUVsZW1lbnQoXCJmZUdhdXNzaWFuQmx1clwiLHtzdGREZXZpYXRpb246Ljg0NX0pLGQuY3JlYXRlRWxlbWVudChcImZlQ29sb3JNYXRyaXhcIix7dmFsdWVzOlwiMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4yMzc0MDQgMFwifSksZC5jcmVhdGVFbGVtZW50KFwiZmVCbGVuZFwiLHtpbjI6XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIixyZXN1bHQ6XCJlZmZlY3QxX2Ryb3BTaGFkb3dfNzExMV8yMjY0MlwifSksZC5jcmVhdGVFbGVtZW50KFwiZmVCbGVuZFwiLHtpbjpcIlNvdXJjZUdyYXBoaWNcIixpbjI6XCJlZmZlY3QxX2Ryb3BTaGFkb3dfNzExMV8yMjY0MlwiLHJlc3VsdDpcInNoYXBlXCJ9KSksZC5jcmVhdGVFbGVtZW50KFwiZmlsdGVyXCIse2lkOlwiMjU2MDJkMmZiNzQ2ZmY1YzA4MDc2NjNlYmQ1YzcxYjBmMzkzODEzNV9fZ1wiLHg6LTE0LjI1MSx5OjIxLjYwOCx3aWR0aDoyMy4wODcsaGVpZ2h0OjM2LjM0MSxmaWx0ZXJVbml0czpcInVzZXJTcGFjZU9uVXNlXCIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczpcInNSR0JcIn0sZC5jcmVhdGVFbGVtZW50KFwiZmVGbG9vZFwiLHtmbG9vZE9wYWNpdHk6MCxyZXN1bHQ6XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIn0pLGQuY3JlYXRlRWxlbWVudChcImZlQ29sb3JNYXRyaXhcIix7aW46XCJTb3VyY2VBbHBoYVwiLHZhbHVlczpcIjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwXCIscmVzdWx0OlwiaGFyZEFscGhhXCJ9KSxkLmNyZWF0ZUVsZW1lbnQoXCJmZU9mZnNldFwiLHtkeDotLjc1MX0pLGQuY3JlYXRlRWxlbWVudChcImZlR2F1c3NpYW5CbHVyXCIse3N0ZERldmlhdGlvbjouMjM1fSksZC5jcmVhdGVFbGVtZW50KFwiZmVDb2xvck1hdHJpeFwiLHt2YWx1ZXM6XCIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwLjQxNDMxNyAwXCJ9KSxkLmNyZWF0ZUVsZW1lbnQoXCJmZUJsZW5kXCIse2luMjpcIkJhY2tncm91bmRJbWFnZUZpeFwiLHJlc3VsdDpcImVmZmVjdDFfZHJvcFNoYWRvd183MTExXzIyNjQyXCJ9KSxkLmNyZWF0ZUVsZW1lbnQoXCJmZUJsZW5kXCIse2luOlwiU291cmNlR3JhcGhpY1wiLGluMjpcImVmZmVjdDFfZHJvcFNoYWRvd183MTExXzIyNjQyXCIscmVzdWx0Olwic2hhcGVcIn0pKSxkLmNyZWF0ZUVsZW1lbnQoXCJmaWx0ZXJcIix7aWQ6XCIyNTYwMmQyZmI3NDZmZjVjMDgwNzY2M2ViZDVjNzFiMGYzOTM4MTM1X19pXCIseDo3LjU1OSx5OjYuMTQxLHdpZHRoOjYxLjI4NyxoZWlnaHQ6NjEuMjg3LGZpbHRlclVuaXRzOlwidXNlclNwYWNlT25Vc2VcIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOlwic1JHQlwifSxkLmNyZWF0ZUVsZW1lbnQoXCJmZUZsb29kXCIse2Zsb29kT3BhY2l0eTowLHJlc3VsdDpcIkJhY2tncm91bmRJbWFnZUZpeFwifSksZC5jcmVhdGVFbGVtZW50KFwiZmVDb2xvck1hdHJpeFwiLHtpbjpcIlNvdXJjZUFscGhhXCIsdmFsdWVzOlwiMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDBcIixyZXN1bHQ6XCJoYXJkQWxwaGFcIn0pLGQuY3JlYXRlRWxlbWVudChcImZlT2Zmc2V0XCIse2R5OjIuNDIxfSksZC5jcmVhdGVFbGVtZW50KFwiZmVHYXVzc2lhbkJsdXJcIix7c3RkRGV2aWF0aW9uOjIuMjkzfSksZC5jcmVhdGVFbGVtZW50KFwiZmVDb2xvck1hdHJpeFwiLHt2YWx1ZXM6XCIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwLjIzNzQwNCAwXCJ9KSxkLmNyZWF0ZUVsZW1lbnQoXCJmZUJsZW5kXCIse2luMjpcIkJhY2tncm91bmRJbWFnZUZpeFwiLHJlc3VsdDpcImVmZmVjdDFfZHJvcFNoYWRvd183MTExXzIyNjQyXCJ9KSxkLmNyZWF0ZUVsZW1lbnQoXCJmZUJsZW5kXCIse2luOlwiU291cmNlR3JhcGhpY1wiLGluMjpcImVmZmVjdDFfZHJvcFNoYWRvd183MTExXzIyNjQyXCIscmVzdWx0Olwic2hhcGVcIn0pKSxkLmNyZWF0ZUVsZW1lbnQoXCJmaWx0ZXJcIix7aWQ6XCIyNTYwMmQyZmI3NDZmZjVjMDgwNzY2M2ViZDVjNzFiMGYzOTM4MTM1X19rXCIseDo2My41NzIseToxOS4wNDIsd2lkdGg6NDcuMTIsaGVpZ2h0OjQ1Ljc0OCxmaWx0ZXJVbml0czpcInVzZXJTcGFjZU9uVXNlXCIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczpcInNSR0JcIn0sZC5jcmVhdGVFbGVtZW50KFwiZmVGbG9vZFwiLHtmbG9vZE9wYWNpdHk6MCxyZXN1bHQ6XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIn0pLGQuY3JlYXRlRWxlbWVudChcImZlQ29sb3JNYXRyaXhcIix7aW46XCJTb3VyY2VBbHBoYVwiLHZhbHVlczpcIjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwXCIscmVzdWx0OlwiaGFyZEFscGhhXCJ9KSxkLmNyZWF0ZUVsZW1lbnQoXCJmZU9mZnNldFwiLHtkeTouNjQxfSksZC5jcmVhdGVFbGVtZW50KFwiZmVDb2xvck1hdHJpeFwiLHt2YWx1ZXM6XCIwIDAgMCAwIDAuMTkyMTU3IDAgMCAwIDAgMC4xODQzMTQgMCAwIDAgMCAwLjE3NjQ3MSAwIDAgMCAxIDBcIn0pLGQuY3JlYXRlRWxlbWVudChcImZlQmxlbmRcIix7aW4yOlwiQmFja2dyb3VuZEltYWdlRml4XCIscmVzdWx0OlwiZWZmZWN0MV9kcm9wU2hhZG93XzcxMTFfMjI2NDJcIn0pLGQuY3JlYXRlRWxlbWVudChcImZlQ29sb3JNYXRyaXhcIix7aW46XCJTb3VyY2VBbHBoYVwiLHZhbHVlczpcIjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwXCIscmVzdWx0OlwiaGFyZEFscGhhXCJ9KSxkLmNyZWF0ZUVsZW1lbnQoXCJmZU9mZnNldFwiLHtkeToxLjg1Nn0pLGQuY3JlYXRlRWxlbWVudChcImZlR2F1c3NpYW5CbHVyXCIse3N0ZERldmlhdGlvbjoxLjMxOX0pLGQuY3JlYXRlRWxlbWVudChcImZlQ29sb3JNYXRyaXhcIix7dmFsdWVzOlwiMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4yNjgyMDEgMFwifSksZC5jcmVhdGVFbGVtZW50KFwiZmVCbGVuZFwiLHtpbjI6XCJlZmZlY3QxX2Ryb3BTaGFkb3dfNzExMV8yMjY0MlwiLHJlc3VsdDpcImVmZmVjdDJfZHJvcFNoYWRvd183MTExXzIyNjQyXCJ9KSxkLmNyZWF0ZUVsZW1lbnQoXCJmZUJsZW5kXCIse2luOlwiU291cmNlR3JhcGhpY1wiLGluMjpcImVmZmVjdDJfZHJvcFNoYWRvd183MTExXzIyNjQyXCIscmVzdWx0Olwic2hhcGVcIn0pKSxkLmNyZWF0ZUVsZW1lbnQoXCJmaWx0ZXJcIix7aWQ6XCIyNTYwMmQyZmI3NDZmZjVjMDgwNzY2M2ViZDVjNzFiMGYzOTM4MTM1X19tXCIseDo2My42MTQseToxNS44OTQsd2lkdGg6NDYuMTcyLGhlaWdodDo0Ny40NzgsZmlsdGVyVW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6XCJzUkdCXCJ9LGQuY3JlYXRlRWxlbWVudChcImZlRmxvb2RcIix7Zmxvb2RPcGFjaXR5OjAscmVzdWx0OlwiQmFja2dyb3VuZEltYWdlRml4XCJ9KSxkLmNyZWF0ZUVsZW1lbnQoXCJmZUNvbG9yTWF0cml4XCIse2luOlwiU291cmNlQWxwaGFcIix2YWx1ZXM6XCIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMFwiLHJlc3VsdDpcImhhcmRBbHBoYVwifSksZC5jcmVhdGVFbGVtZW50KFwiZmVPZmZzZXRcIix7ZHk6MS44NTZ9KSxkLmNyZWF0ZUVsZW1lbnQoXCJmZUdhdXNzaWFuQmx1clwiLHtzdGREZXZpYXRpb246MS45NTR9KSxkLmNyZWF0ZUVsZW1lbnQoXCJmZUNvbG9yTWF0cml4XCIse3ZhbHVlczpcIjAgMCAwIDAgMC4yMjY5MDggMCAwIDAgMCAwLjIyNjkwOCAwIDAgMCAwIDAuMjI2OTA4IDAgMCAwIDEgMFwifSksZC5jcmVhdGVFbGVtZW50KFwiZmVCbGVuZFwiLHtpbjI6XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIixyZXN1bHQ6XCJlZmZlY3QxX2Ryb3BTaGFkb3dfNzExMV8yMjY0MlwifSksZC5jcmVhdGVFbGVtZW50KFwiZmVDb2xvck1hdHJpeFwiLHtpbjpcIlNvdXJjZUFscGhhXCIsdmFsdWVzOlwiMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDBcIixyZXN1bHQ6XCJoYXJkQWxwaGFcIn0pLGQuY3JlYXRlRWxlbWVudChcImZlT2Zmc2V0XCIse2R5Oi45Nzd9KSxkLmNyZWF0ZUVsZW1lbnQoXCJmZUdhdXNzaWFuQmx1clwiLHtzdGREZXZpYXRpb246LjQ4OH0pLGQuY3JlYXRlRWxlbWVudChcImZlQ29sb3JNYXRyaXhcIix7dmFsdWVzOlwiMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC41IDBcIn0pLGQuY3JlYXRlRWxlbWVudChcImZlQmxlbmRcIix7aW4yOlwiZWZmZWN0MV9kcm9wU2hhZG93XzcxMTFfMjI2NDJcIixyZXN1bHQ6XCJlZmZlY3QyX2Ryb3BTaGFkb3dfNzExMV8yMjY0MlwifSksZC5jcmVhdGVFbGVtZW50KFwiZmVCbGVuZFwiLHtpbjpcIlNvdXJjZUdyYXBoaWNcIixpbjI6XCJlZmZlY3QyX2Ryb3BTaGFkb3dfNzExMV8yMjY0MlwiLHJlc3VsdDpcInNoYXBlXCJ9KSksZC5jcmVhdGVFbGVtZW50KFwibGluZWFyR3JhZGllbnRcIix7aWQ6XCIyNTYwMmQyZmI3NDZmZjVjMDgwNzY2M2ViZDVjNzFiMGYzOTM4MTM1X19hXCIseDE6NzUuNjAzLHkxOjQwLjgwOSx4MjowLHkyOjQwLjgwOSxncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIn0sZC5jcmVhdGVFbGVtZW50KFwic3RvcFwiLHtzdG9wQ29sb3I6XCIjRDlEOUQ5XCIsc3RvcE9wYWNpdHk6MH0pLGQuY3JlYXRlRWxlbWVudChcInN0b3BcIix7b2Zmc2V0Oi4yMzQsc3RvcENvbG9yOlwiI0Q5RDlEOVwifSksZC5jcmVhdGVFbGVtZW50KFwic3RvcFwiLHtvZmZzZXQ6LjgwMixzdG9wQ29sb3I6XCIjRDlEOUQ5XCJ9KSxkLmNyZWF0ZUVsZW1lbnQoXCJzdG9wXCIse29mZnNldDoxLHN0b3BDb2xvcjpcIiNEOUQ5RDlcIixzdG9wT3BhY2l0eTowfSkpLGQuY3JlYXRlRWxlbWVudChcImxpbmVhckdyYWRpZW50XCIse2lkOlwiMjU2MDJkMmZiNzQ2ZmY1YzA4MDc2NjNlYmQ1YzcxYjBmMzkzODEzNV9fZlwiLHgxOi0yOS44NTEseTE6MjEuMjM1LHgyOi0yOS44NTEseTI6NTcuMTEyLGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwifSxkLmNyZWF0ZUVsZW1lbnQoXCJzdG9wXCIse3N0b3BDb2xvcjpcIiMxQURDRkZcIn0pLGQuY3JlYXRlRWxlbWVudChcInN0b3BcIix7b2Zmc2V0OjEsc3RvcENvbG9yOlwiIzFFNzJGMVwifSkpLGQuY3JlYXRlRWxlbWVudChcImxpbmVhckdyYWRpZW50XCIse2lkOlwiMjU2MDJkMmZiNzQ2ZmY1YzA4MDc2NjNlYmQ1YzcxYjBmMzkzODEzNV9faFwiLHgxOi0xMy40NCx5MToyMS4yMzUseDI6LTEzLjQ0LHkyOjU3LjQ3OSxncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIn0sZC5jcmVhdGVFbGVtZW50KFwic3RvcFwiLHtzdG9wQ29sb3I6XCIjRjZGNkY3XCJ9KSxkLmNyZWF0ZUVsZW1lbnQoXCJzdG9wXCIse29mZnNldDouMjI2LHN0b3BDb2xvcjpcIiNGMEYzRjZcIn0pLGQuY3JlYXRlRWxlbWVudChcInN0b3BcIix7b2Zmc2V0OjEsc3RvcENvbG9yOlwiI0RDRThGNFwifSkpLGQuY3JlYXRlRWxlbWVudChcImxpbmVhckdyYWRpZW50XCIse2lkOlwiMjU2MDJkMmZiNzQ2ZmY1YzA4MDc2NjNlYmQ1YzcxYjBmMzkzODEzNV9fbFwiLHgxOjY2LjExOCx5MTo2MC4xODEseDI6MTA1LjM2OCx5Mjo1OS44NjcsZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCJ9LGQuY3JlYXRlRWxlbWVudChcInN0b3BcIix7c3RvcENvbG9yOlwiIzczODE4NlwifSksZC5jcmVhdGVFbGVtZW50KFwic3RvcFwiLHtvZmZzZXQ6Ljk5MixzdG9wQ29sb3I6XCIjN0M4OThGXCJ9KSxkLmNyZWF0ZUVsZW1lbnQoXCJzdG9wXCIse29mZnNldDouOTk2LHN0b3BDb2xvcjpcIiNDMEM2QzlcIn0pLGQuY3JlYXRlRWxlbWVudChcInN0b3BcIix7b2Zmc2V0OjEsc3RvcENvbG9yOlwiIzdEOEE5MFwifSkpLGQuY3JlYXRlRWxlbWVudChcImxpbmVhckdyYWRpZW50XCIse2lkOlwiMjU2MDJkMmZiNzQ2ZmY1YzA4MDc2NjNlYmQ1YzcxYjBmMzkzODEzNV9fblwiLHgxOjgyLjc4Mix5MTo1NS4xMTkseDI6ODIuNzgyLHkyOjU4LjAzOCxncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIn0sZC5jcmVhdGVFbGVtZW50KFwic3RvcFwiLHtzdG9wQ29sb3I6XCIjZmZmXCJ9KSxkLmNyZWF0ZUVsZW1lbnQoXCJzdG9wXCIse29mZnNldDoxLHN0b3BDb2xvcjpcIiM1RjVGNUZcIn0pKSxkLmNyZWF0ZUVsZW1lbnQoXCJjbGlwUGF0aFwiLHtpZDpcIjI1NjAyZDJmYjc0NmZmNWMwODA3NjYzZWJkNWM3MWIwZjM5MzgxMzVfX2VcIn0sZC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLHt4Oi0yOS44NTEseToyMS4yMzUsd2lkdGg6MzguMjk0LGhlaWdodDozNS44Nzgscng6OC4wMTcsZmlsbDpcIiNmZmZcIn0pKSxkLmNyZWF0ZUVsZW1lbnQoXCJjbGlwUGF0aFwiLHtpZDpcIjI1NjAyZDJmYjc0NmZmNWMwODA3NjYzZWJkNWM3MWIwZjM5MzgxMzVfX2pcIn0sZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtmaWxsOlwiI2ZmZlwiLHRyYW5zZm9ybTpcInRyYW5zbGF0ZSgyMS4yODYgMTcuNzM1KVwiLGQ6XCJNMCAwaDM0LjYzNXYzNC4wNThIMHpcIn0pKSkpKSxCUD17aWNvbjpcInhHVU01XCIsdGV4dFdyYXBwZXI6XCJtUEQ5M1wiLGhlYWRlcjpcIlhMQ0NuXCIsc3ViVGV4dDpcImNKY29yXCIsZGlzbWlzczpcInp3d21oXCJ9O3ZhciBWUCxHUCxIUDtmdW5jdGlvbiBXUChlKXtsZXR7ZGlzbWlzc0NhbGxiYWNrOnR9PWU7Y29uc3R7aW5zdGFsbDpuLHRyYWNrRGlzbWlzczpyLHByb21wdERpc21pc3NDb3VudDppfT0oMCxOUC5EVykoKTsoMCxkLnVzZUVmZmVjdCkoKCgpPT57KDAsWWMuSFApKFwiSU1QUkVTU0lPTlwiLFwiRkVFRFwiLFwiUFdBX0lOU1RBTExcIiksKDAsTlAuVU8pKFwiSU1QUkVTU0lPTlwiLGkpfSksW10pO2NvbnN0IGE9KDAsby5aKSh2Llose2lkOlwiL3grZlZFXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjgsdmFsdWU6XCJhXCIsY2hpbGRyZW46W3t0eXBlOjAsdmFsdWU6XCJDbGljayB0byBpbnN0YWxsIHRoZSBEZXNrdG9wIEFwcFwifV19XSx2YWx1ZXM6e2E6ZT0+KDAsby5aKShcImFcIix7fSx2b2lkIDAsZSl9fSkscz1WUHx8KFZQPSgwLG8uWikodi5aLHtpZDpcImVBQ05LS1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwidG8gYWx3YXlzIGhhdmUgYWNjZXNzIHRvIHlvdXIgY2hhdHMhXCJ9XX0pKTtyZXR1cm4oMCxvLlopKGxQLHtvbkNsaWNrOmZ1bmN0aW9uKCl7bigpLHQoKX0sZGF0YVRlc3RJZDpcImFwcC5mZWVkLkZlZWRJdGVtLkluc3RhbGxQd2FDVEFcIn0sdm9pZCAwLCgwLG8uWikoRlAse2NsYXNzTmFtZTpCUC5pY29ufSksKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6QlAudGV4dFdyYXBwZXJ9LHZvaWQgMCwoMCxvLlopKFwic3BhblwiLHtjbGFzc05hbWU6QlAuaGVhZGVyfSx2b2lkIDAsYSksKDAsby5aKShcInNwYW5cIix7Y2xhc3NOYW1lOkJQLnN1YlRleHR9LHZvaWQgMCxzKSksKDAsby5aKShnUCx7b25DbGljazplPT57ZS5zdG9wUHJvcGFnYXRpb24oKSxyKCksdCgpfSxjbGFzc05hbWU6QlAuZGlzbWlzc30pKX1mdW5jdGlvbiBqUCgpe2NvbnN0W2UsdF09ZnVuY3Rpb24oKXtjb25zdFtlLHRdPSgwLGQudXNlU3RhdGUpKCExKSxbbixyXT0oMCxkLnVzZVN0YXRlKSghMSkse2NhblVwZGF0ZUFwcDppfT1mdW5jdGlvbigpe2NvbnN0IGU9KDAsay5vKShBZSksdD0oMCxrLm8pKHcuX3UpLnNpemU+MCxuPWUmJiF0O3JldHVybiBPaygpLE5rKCkse2NhblVwZGF0ZUFwcDpufX0oKSx7c2hvdWxkU2hvd0Jhbm5lcjpvfT1LTygpLFthXT0oMCxtZC5iRykoKSx7c2hvd0luc3RhbGxQcm9tcHQ6c309KDAsTlAuRFcpKCk7cmV0dXJuIGk/W3Qsd1AuQXBwVXBkYXRlXTohbiYmcz9bcix3UC5Qd2FJbnN0YWxsXTplP1t0LHdQLkJhbm5lcl06bz9bdCx3UC5Ob3RpZmljYXRpb25zXTphP1t0LHdQLk5vbmVdOlt0LHdQLlNvdW5kRWZmZWN0c119KCk7cmV0dXJuKDAsZC51c2VDYWxsYmFjaykoKCgpPT57c3dpdGNoKHQpe2Nhc2Ugd1AuQmFubmVyOnJldHVybiBHUHx8KEdQPSgwLG8uWikoc1Ase30pKTtjYXNlIHdQLkFwcFVwZGF0ZTpyZXR1cm4gSFB8fChIUD0oMCxvLlopKG1QLHt9KSk7Y2FzZSB3UC5Ob3RpZmljYXRpb25zOnJldHVybigwLG8uWikoYlAse2Rpc21pc3NDYWxsYmFjazooKT0+ZSghMCl9KTtjYXNlIHdQLlNvdW5kRWZmZWN0czpyZXR1cm4oMCxvLlopKE9QLHtkaXNtaXNzQ2FsbGJhY2s6KCk9PmUoITApfSk7Y2FzZSB3UC5Qd2FJbnN0YWxsOnJldHVybigwLG8uWikoV1Ase2Rpc21pc3NDYWxsYmFjazooKT0+ZSghMCl9KTtjYXNlIHdQLk5vbmU6cmV0dXJuIG51bGx9fSksW3QsZV0pKCl9Y29uc3QgWlA9e21vZGFsSGVhZGVyOlwiSDJEVENcIix0YWJsZTpcIktndFIwXCIsaG90a2V5U2VjdGlvbkhlYWRlcjpcIlRiQWFTXCIsaG90a2V5RGVzY3JpcHRpb246XCJCbkc2SVwiLGhvdGtleUtleUNob3JkczpcIkd0YWQ2XCJ9O3ZhciB6UCxLUCxZUCxxUCxYUDtjb25zdCBRUD17Y29tbWFuZDpcIlx1MjMxOFwiLHNoaWZ0OlwiXHUyMWU3XCIsbGVmdDpcIlx1MjE5MFwiLHJpZ2h0OlwiXHUyMTkyXCIsdXA6XCJcdTIxOTFcIixkb3duOlwiXHUyMTkzXCIscmV0dXJuOlwiXHUyM2NlXCIsYmFja3NwYWNlOlwiXHUyMzJiXCJ9O2Z1bmN0aW9uIEpQKGUpe2xldHtob3RrZXlzOnQsaGVhZGVyOm59PWU7cmV0dXJuKDAscS5qc3hzKShxLkZyYWdtZW50LHtjaGlsZHJlbjpbKDAsby5aKShcInRyXCIse2NsYXNzTmFtZTpaUC5ob3RrZXlTZWN0aW9uSGVhZGVyfSx2b2lkIDAsKDAsby5aKShcInRoXCIse2NvbFNwYW46Mn0sdm9pZCAwLG4pKSxPYmplY3QudmFsdWVzKHQpLmZpbHRlcihCb29sZWFuKS5tYXAoKGU9PntsZXR7ZGVzY3JpcHRpb246dCxrZXlDb21iaW5hdGlvblN0cmluZzpuLGtleUNvbWJpbmF0aW9uOnJ9PWU7cmV0dXJuKDAsby5aKShcInRyXCIse30sbiwoMCxvLlopKFwidGRcIix7Y2xhc3NOYW1lOlpQLmhvdGtleURlc2NyaXB0aW9ufSx2b2lkIDAsdCksKDAsby5aKShcInRkXCIse2NsYXNzTmFtZTpaUC5ob3RrZXlLZXlDaG9yZHN9LHZvaWQgMCxcIiBcIixyLm1hcCgoZT0+KFwibWV0YVwiPT09ZSYmKGU9SWQoKT9cImNvbW1hbmRcIjpcImN0cmxcIiksUVBbZV18fGUpKSkuam9pbihcIiArIFwiKSxcIiBcIikpfSkpXX0pfWZ1bmN0aW9uICRQKGUpe2xldHtjbG9zZTp0fT1lO3JldHVybigwLG8uWikoTVQse29uQ2xpY2tPdXRzaWRlOnR9LHZvaWQgMCwoMCxvLlopKFwiaDFcIix7Y2xhc3NOYW1lOlpQLm1vZGFsSGVhZGVyfSx2b2lkIDAselB8fCh6UD0oMCxvLlopKHYuWix7aWQ6XCJpdzVRTC9cIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkhvdGtleXNcIn1dfSkpKSwoMCxvLlopKFwidGFibGVcIix7Y2xhc3NOYW1lOlpQLnRhYmxlfSx2b2lkIDAsKDAsby5aKShKUCx7aG90a2V5czpOZC5HZW5lcmFsSG90a2V5cyxoZWFkZXI6S1B8fChLUD0oMCxvLlopKHYuWix7aWQ6XCJjazBMc3ZcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkdlbmVyYWxcIn1dfSkpfSksKDAsby5aKShKUCx7aG90a2V5czpOZC5JbmNvbWluZ0NhbGxIb3RrZXlzLGhlYWRlcjpZUHx8KFlQPSgwLG8uWikodi5aLHtpZDpcIlZHWVJYcVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiSW5jb21pbmcgQ2FsbHNcIn1dfSkpfSksKDAsby5aKShKUCx7aG90a2V5czpOZC5BY3RpdmVDYWxsSG90a2V5cyxoZWFkZXI6cVB8fChxUD0oMCxvLlopKHYuWix7aWQ6XCJoanJQSTNcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkFjdGl2ZSBDYWxsc1wifV19KSl9KSwoMCxvLlopKEpQLHtob3RrZXlzOk5kLkxpZ2h0Ym94SG90a2V5cyxoZWFkZXI6WFB8fChYUD0oMCxvLlopKHYuWix7aWQ6XCJtYzlnQTZcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkxpZ2h0Ym94IE1lZGlhIFByZXZpZXdcIn1dfSkpfSkpKX12YXIgZU0sdE07ZnVuY3Rpb24gbk0oKXtyZXR1cm4gbk09T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxuTS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y29uc3Qgck09ZT0+ZC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsbk0oe3dpZHRoOjM3LGhlaWdodDozNix2aWV3Qm94OlwiMCAwIDM3IDM2XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLGVNfHwoZU09ZC5jcmVhdGVFbGVtZW50KFwiZ1wiLHtjbGlwUGF0aDpcInVybCgjYzllYzNiMTczY2MzNDg3MzM5ZGI4MzU2OTE5N2MwMzM4OGQ5M2EyN19fYSlcIn0sZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTMwLjgyNSAyNS41NWMtMS4yMTIuNjY4LTIuMDE5LjU5OS0yLjY0OCAxLjAwNC0uNTMzLjM0NC0uMjE2IDEuMDgtLjYwNiAxLjM1LS40NzUuMzI5LTEuODgzLS4wMjItMy42OTcuNTc2LTEuNDk4LjQ5NC0yLjQ1NSAxLjkxOC01LjE1IDEuOTE4LTIuNzAxIDAtMy42MzEtMS40MTYtNS4xNDgtMS45MTgtMS44MTQtLjU5OC0zLjIyMy0uMjQ3LTMuNjk4LS41NzUtLjM4Ni0uMjY3LS4wNzMtMS4wMDgtLjYwNi0xLjM1MS0uNjI1LS40MDUtMS40MzUtLjMzMi0yLjY0Ny0xLjAwMy0uNzcyLS40MjktLjMzNi0uNjkxLS4wNzctLjgxNSA0LjM5Ni0yLjEyNyA1LjA5NC01LjQxMSA1LjEyNS01LjY1OC4wMzktLjI5My4wODEtLjUyOS0uMjQ3LS44MjYtLjMxMy0uMjktMS43MDYtMS4xNTQtMi4wOTItMS40Mi0uNjQtLjQ0OC0uOTIyLS44OTItLjcxNC0xLjQ0LjE0My0uMzc4LjQ5OC0uNTIxLjg3Mi0uNTIxLjExNiAwIC4yMzYuMDE1LjM0OC4wMzguNzAyLjE1NSAxLjM4NS41MDYgMS43OC41OTkuMDUzLjAxMS4xLjAxOS4xNDYuMDE5LjIwOCAwIC4yODUtLjEwNC4yNy0uMzQ3LS4wNDYtLjc2OS0uMTU0LTIuMjY2LS4wMzUtMy42NjMuMTY2LTEuOTIyLjc4OC0yLjg4IDEuNTI1LTMuNzIxLjM1NS0uNDA1IDIuMDE0LTIuMTYxIDUuMTk1LTIuMTYxIDMuMTg4IDAgNC44NDQgMS43NTYgNS4xOTUgMi4xNi43MzcuODQ2IDEuMzU5IDEuOCAxLjUyNSAzLjcyMi4xMiAxLjM5Ny4wMTUgMi44OTQtLjAzNSAzLjY2My0uMDE2LjI1NC4wNjIuMzQ3LjI3LjM0N2EuNzI4LjcyOCAwIDAgMCAuMTQ3LS4wMmMuMzkzLS4wOTYgMS4wNzYtLjQ0NyAxLjc3OS0uNTk4YTEuNzcgMS43NyAwIDAgMSAuMzQ3LS4wMzhjLjM3NSAwIC43My4xNDMuODczLjUyLjIwOC41NDktLjA3NC45OTctLjcxNCAxLjQ0LS4zODYuMjctMS43OCAxLjEzMS0yLjA5MiAxLjQyLS4zMjQuMzAyLS4yODIuNTM0LS4yNDcuODI3LjAzLjI0Ny43MzMgMy41MzEgNS4xMjUgNS42NTguMjY3LjEyNC43MDMuMzg2LS4wNy44MTRabTEuOTg4LTEuMDY1Yy0uMTk3LS41MzYtLjU3Mi0uODIyLTEtMS4wNjFhNC41MTUgNC41MTUgMCAwIDAtLjIxNi0uMTE2Yy0uMTI4LS4wNjYtLjI1OS0uMTMxLS4zOS0uMTk3LTEuMzM1LS43MDYtMi4zNzQtMS41OTgtMy4wOTYtMi42NTVhNi4yNTUgNi4yNTUgMCAwIDEtLjUzMi0uOTQyYy0uMDYyLS4xNzgtLjA1OC0uMjc4LS4wMTYtLjM2N2EuNjI2LjYyNiAwIDAgMSAuMTctLjE3N2MuMjI4LS4xNS40NjctLjMwNS42MjUtLjQxLjI4Ni0uMTg1LjUxNC0uMzMxLjY1Ny0uNDMyLjU0OC0uMzgyLjkzLS43ODcgMS4xNy0xLjI0Mi4zMzUtLjY0MS4zNzctMS4zNy4xMTktMi4wNjItLjM2My0uOTUzLTEuMjYyLTEuNTQ3LTIuMzU4LTEuNTQ3YTMuNDkgMy40OSAwIDAgMC0uODY1LjExNiAxOS44MTYgMTkuODE2IDAgMCAwLS4wNjItMi4wMmMtLjIwNC0yLjM4NC0xLjAzOC0zLjYzMS0xLjkxLTQuNjI3YTcuNjI1IDcuNjI1IDAgMCAwLTEuOTQyLTEuNTY3Yy0xLjMyLS43NTYtMi44MTctMS4xMzgtNC40NS0xLjEzOC0xLjYyOSAwLTMuMTIyLjM4Mi00LjQ0NiAxLjEzOGE3LjYgNy42IDAgMCAwLTEuOTQ2IDEuNTY3Yy0uODcyLjk5Ni0xLjcwNSAyLjI0Ni0xLjkxIDQuNjI4YTE5LjgyIDE5LjgyIDAgMCAwLS4wNjIgMi4wMThjLS4wNTgtLjAxNS0uMTItLjAyNi0uMTc3LS4wNDJhMy4xOSAzLjE5IDAgMCAwLS42ODctLjA3M2MtMS4wOTMgMC0xLjk5Ni41OTQtMi4zNTkgMS41NDdhMi40OTUgMi40OTUgMCAwIDAgLjEyIDIuMDYyYy4yNC40NTUuNjIxLjg2IDEuMTcgMS4yNDIuMTQ2LjEuMzcuMjQ3LjY1Ni40MzMuMTU0LjEuMzgyLjI0Ny42MDIuMzkzYS42NDkuNjQ5IDAgMCAxIC4xOTMuMTkzYy4wNDYuMDk3LjA0Ni4xOTctLjAyLjM4NmE2LjEzNiA2LjEzNiAwIDAgMS0uNTIuOTIzYy0uNzA3IDEuMDM0LTEuNzE4IDEuOTEtMy4wMDcgMi42MDktLjY4NC4zNjMtMS4zOTQuNjA2LTEuNjk1IDEuNDItLjIyNy42MTgtLjA3NyAxLjMxNi40OTggMS45MDcuMTkuMjA0LjQyOS4zODIuNzI2LjU0OC43MDIuMzkgMS4zMDQuNTc5IDEuNzc1LjcxLjA4MS4wMjMuMjc0LjA4NS4zNi4xNTguMjA4LjE4Mi4xNzcuNDYuNDU4Ljg2NS4xNy4yNS4zNjMuNDI0LjUyNS41MzMuNTg3LjQwNSAxLjI0My40MjggMS45NDIuNDU1LjYyOS4wMjMgMS4zNDMuMDUgMi4xNjEuMzIuMzQuMTEyLjY5MS4zMjggMS4wOTYuNTguOTguNjAxIDIuMzE2IDEuNDIzIDQuNTU1IDEuNDIzIDIuMjM4IDAgMy41ODUtLjgyNiA0LjU2Ni0xLjQyOC40MDUtLjI0Ny43NTItLjQ2MyAxLjA4LS41Ny44MTUtLjI3MSAxLjUyOS0uMjk4IDIuMTYyLS4zMjEuNjk4LS4wMjcgMS4zNTUtLjA1IDEuOTQxLS40NTYuMTg2LS4xMjcuNDEzLS4zMzUuNTk5LS42NTIuMi0uMzQuMTk2LS41ODMuMzg2LS43NDUuMDc3LS4wNjUuMjQ3LS4xMjcuMzM1LS4xNTRhNy44NTIgNy44NTIgMCAwIDAgMS43OTktLjcxOGMuMzE2LS4xNzQuNTY3LS4zNjcuNzYtLjU4N2wuMDA4LS4wMDhjLjU0LS41NzguNjc1LTEuMjYyLjQ1Mi0xLjg2WlwiLGZpbGw6XCIjQjlDMEM3XCJ9KSkpLHRNfHwodE09ZC5jcmVhdGVFbGVtZW50KFwiZGVmc1wiLG51bGwsZC5jcmVhdGVFbGVtZW50KFwiY2xpcFBhdGhcIix7aWQ6XCJjOWVjM2IxNzNjYzM0ODczMzlkYjgzNTY5MTk3YzAzMzg4ZDkzYTI3X19hXCJ9LGQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZmlsbDpcIiNmZmZcIix0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoNC41IDQpXCIsZDpcIk0wIDBoMjguNDc1djI4SDB6XCJ9KSkpKSk7dmFyIGlNO2Z1bmN0aW9uIG9NKCl7cmV0dXJuIG9NPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sb00uYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IGFNPWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLG9NKHt3aWR0aDo5MSxoZWlnaHQ6MjAsdmlld0JveDpcIjAgMCA5MSAyMFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSxpTXx8KGlNPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIk02LjA5NSAxNi40MmMzLjM0NyAwIDUuNTczLTIuMDU2IDUuNTczLTQuNjgzIDAtMy4wMjktMS44NDQtNC4wNDctNS40MDQtNC41MzUtMi42MjctLjM4MS0zLjEzNS0uOTk1LTMuMTM1LTIuMjI2IDAtMS4xNjQuODktMS45OSAyLjYwNS0xLjk5IDEuNzE1IDAgMi42NS42NzcgMi45MjUgMi4yNjZoMi41ODFDMTAuOTU0IDIuMzQ5IDguOTk1Ljg2NiA1LjczLjg2NiAyLjU3Ny44NjYuNDU3IDIuNzMxLjQ1NyA1LjIxMmMwIDIuODQgMS43MjEgMy45NCA1LjMzOCA0LjQyOCAyLjQ1OC40MDIgMy4xNTUuOTMyIDMuMTU1IDIuMzI5IDAgMS4zOTctMS4xODggMi4zMzItMi44NjggMi4zMzItMi41NjUgMC0zLjE3OC0xLjI3LTMuMzctMi43OTdIMGMuMjE1IDIuODYgMS45NjIgNC45MTYgNi4wOTUgNC45MTZaTTEzLjY1MyAxNi4yMDhoMi41NjRWOS42OGMwLTEuNzU4IDEuMTY3LTIuNjQ3IDIuNjA3LTIuNjQ3IDEuNTI2IDAgMi4yMDMuNzYzIDIuMjAzIDIuNDM1djYuNzRoMi41NjRWOS4yMzZjMC0zLjA1Mi0xLjU2Ni00LjM0My0zLjc5Mi00LjM0My0xLjgyMSAwLTMuMDUyLjkxLTMuNTgyIDEuOTlWNS4xMzJoLTIuNTY0djExLjA3N1pNMjguOTE3IDE2LjQyYzEuNjk1IDAgMi42Ny0uNjE2IDMuMzktMS41Njh2MS4zNTZoMi41MjRWOC45NGMwLTMuMDMxLTEuOTUtNC4wNDctNC40MjgtNC4wNDctMi40NzggMC00LjUzNSAxLjA4Mi00Ljc0NyAzLjY2NmgyLjQ3OGMuMTI2LTEuMTAyLjc4My0xLjczOCAyLjEyLTEuNzM4IDEuNTAzIDAgMi4wMDcuNzQzIDIuMDA3IDIuMjI1di41NzRoLTEuMzU2Yy0zLjE4IDAtNS42OC45MzItNS42OCAzLjUyLS4wMTQgMi4zMTcgMS42NjQgMy4yOCAzLjY5MiAzLjI4Wm0uNjE3LTEuODQ0Yy0xLjI3NCAwLTEuNzgxLS42MTQtMS43ODEtMS41NDYgMC0xLjM1NiAxLjI1LTEuOCAzLjItMS44aDEuMzE0djEuMWMwIDEuNDItMS4xNjcgMi4yNDYtMi43MzMgMi4yNDZaTTM3LjIzOCAyMGgyLjU1OHYtNS41M2MuNTk0IDEuMDgyIDEuODY3IDEuOTUgMy42MjYgMS45NSAyLjg2OCAwIDQuOTE2LTIuMTYyIDQuOTE2LTUuNzIydi0uMTY5YzAtMy41ODItMi4xNDMtNS42MzYtNC45MTYtNS42MzZhNC4yODYgNC4yODYgMCAwIDAtMy42MjYgMi4wMDh2LTEuNzdoLTIuNTY0TDM3LjIzOCAyMFptNS41NTMtNS42MTZjLTEuODY1IDAtMy4wNzItMS4xNjQtMy4wNzItMy42NDN2LS4xNmMwLTIuNDU4IDEuMjctMy42NjYgMy4wNTItMy42NjYgMS42NzIgMCAyLjk0NSAxLjIwOCAyLjk0NSAzLjY2NnYuMTY5YzAgMi4zNjMtMS4wNDQgMy42MzQtMi45MjUgMy42MzRaTTU0Ljk3MiAxNi40MmMzLjAwOSAwIDQuOTM2LTEuOCA1LjEyNS00LjM0NWgtMi4zNTJjLS4xNDYgMS41Ny0xLjMxMyAyLjM3NS0yLjY3IDIuMzc1LTEuODg0IDAtMy4wNzItMS4yNzMtMy4wNzItMy42ODh2LS4xODFjMC0yLjI5NSAxLjI1MS0zLjY0NiAzLjAxLTMuNjQ2IDEuMzU2IDAgMi4zMzEuNjE3IDIuNTQzIDIuMWgyLjQ3OGMtLjI4Ni0zLjA1Mi0yLjYwNC00LjE1My01LjA2Mi00LjE1My0zLjA5NSAwLTUuNTk2IDIuMjIzLTUuNTk2IDUuNzM2di4xN2MwIDMuNTU2IDIuNDE1IDUuNjMzIDUuNTk2IDUuNjMzWk02MS43NzUgMTYuMjA4aDIuNTY0VjkuNjhjMC0xLjc1OCAxLjE2OC0yLjY0NyAyLjYwOC0yLjY0NyAxLjUyNSAwIDIuMjAyLjc2MyAyLjIwMiAyLjQzNXY2Ljc0aDIuNTY1VjkuMjM2YzAtMy4wNTItMS41NjctNC4zNDMtMy43OTItNC4zNDMtMS44MjQgMC0zLjA1Mi45MS0zLjU4MyAxLjk5VjBoLTIuNTY0djE2LjIwOFpNNzcuMDQgMTYuNDJjMS42OTUgMCAyLjY3LS42MTYgMy4zOS0xLjU2OHYxLjM1NmgyLjUyNFY4Ljk0YzAtMy4wMzEtMS45NS00LjA0Ny00LjQyOC00LjA0Ny0yLjQ3OCAwLTQuNTM1IDEuMDgyLTQuNzQ3IDMuNjY2aDIuNDc4Yy4xMjYtMS4xMDIuNzgzLTEuNzM4IDIuMTItMS43MzggMS41MDIgMCAyLjAwNy43NDMgMi4wMDcgMi4yMjV2LjU3NGgtMS4zOGMtMy4xNzcgMC01LjY3NS45MzItNS42NzUgMy41Mi4wMDUgMi4zMTcgMS42NzcgMy4yOCAzLjcxMSAzLjI4Wm0uNjE3LTEuODQ0Yy0xLjI3NCAwLTEuNzgxLS42MTQtMS43ODEtMS41NDYgMC0xLjM1NiAxLjI1LTEuOCAzLjItMS44aDEuMzE0djEuMWMwIDEuNDItMS4xNjcgMi4yNDYtMi43MzMgMi4yNDZaTTg5LjExMiAxNi4zOThjLjU5Mi4wMSAxLjE4LS4wODcgMS43MzgtLjI4N3YtMi4wMzRhMy4xNTUgMy4xNTUgMCAwIDEtMS4yNS4yMTJjLS44MDYgMC0xLjI3LS40NDQtMS4yNy0xLjQzNFY3LjA1M2gyLjQzNFY1LjEzSDg4LjMzVjIuNjkzaC0yLjU2NHYyLjQzOGgtMS40ODNWNy4wNmgxLjQ4M3Y2LjA2YzAgMi4wOTQgMS4xNDQgMy4yNzkgMy4zNDcgMy4yNzlaXCIsZmlsbDpcIiNCOUMwQzdcIn0pKSksc009W3t2YWx1ZTpcInVsdHJhd2lkZVwiLG1heFBpeGVsczpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixtaW5QaXhlbHM6MTQwMH0se3ZhbHVlOlwiZnVsbHNpemVcIixtYXhQaXhlbHM6MTQwMCxtaW5QaXhlbHM6OTAwfSx7dmFsdWU6XCJjb21wYWN0XCIsbWF4UGl4ZWxzOjkwMCxtaW5QaXhlbHM6NjAwfSx7dmFsdWU6XCJ0aW55XCIsbWF4UGl4ZWxzOjYwMCxtaW5QaXhlbHM6MH1dO2Z1bmN0aW9uIGNNKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnNNO2NvbnN0IHQ9KDAsZC51c2VSZWYpKG51bGwpLFtuLHJdPSgwLGQudXNlU3RhdGUpKHZvaWQgMCk7cmV0dXJuKDAsZC51c2VFZmZlY3QpKCgoKT0+e2lmKCF0LmN1cnJlbnQpcmV0dXJuO2Z1bmN0aW9uIG4oKXtpZighdC5jdXJyZW50KXJldHVybjtjb25zdCBuPXQuY3VycmVudC5vZmZzZXRXaWR0aDtmb3IoY29uc3QgdCBvZiBlKWlmKG4+dC5taW5QaXhlbHMmJm48PXQubWF4UGl4ZWxzKXJldHVybiB2b2lkIHIodC52YWx1ZSk7cih2b2lkIDApfWNvbnN0IGk9bmV3IFJlc2l6ZU9ic2VydmVyKGdsKCkobiw1MCx7bGVhZGluZzohMH0pKTtyZXR1cm4gaS5vYnNlcnZlKHQuY3VycmVudCksbigpLCgpPT57aS5kaXNjb25uZWN0KCl9fSksW3IsZV0pLFt0LG5dfXZhciBsTSx1TSxkTTtmdW5jdGlvbiBmTSgpe3JldHVybiBmTT1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGZNLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBwTT1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIixmTSh7ZmlsbDpcIm5vbmVcIixoZWlnaHQ6MzIsdmlld0JveDpcIjAgMCAzMiAzMlwiLHdpZHRoOjMyLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksbE18fChsTT1kLmNyZWF0ZUVsZW1lbnQoXCJtYXNrXCIse2lkOlwiZjYzZDExMTUzOTQ0NDNlNjcxNWYxMDI1MDI1MTkyY2E5Mjc1MGYyOF9fYVwiLGZpbGw6XCIjMDAwXCIsaGVpZ2h0OjIzLG1hc2tVbml0czpcInVzZXJTcGFjZU9uVXNlXCIsd2lkdGg6MjUseDozLjQ3NSx5OjQuNX0sZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwiTTMuNDc1IDQuNWgyNXYyM2gtMjV6XCIsZmlsbDpcIiNmZmZcIn0pLGQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7Y2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk0xNy42NjUgOS43MTlhMS43MTkgMS43MTkgMCAwIDAtMy4zNzMtLjQ2OSAxLjI1IDEuMjUgMCAxIDEtMi40MDYtLjY3OCA0LjIyIDQuMjIgMCAxIDEgNS45ODIgNC45MDMgMi45NyAyLjk3IDAgMCAxLS40NTQuMTgyLjUxOC41MTggMCAwIDAtLjExMy4wNWw4LjcwOCA2LjQ2MWMyLjc5NCAyLjA3MyAxLjMyOCA2LjUxLTIuMTUgNi41MUg4LjE0MWMtMy40NzkgMC00Ljk0NS00LjQzNy0yLjE1LTYuNTFsOC43MDYtNi40NmMuMDQ1LTEuMjc1IDEuMDEyLTIuMTM0IDEuOTYyLTIuNDM1LjAyOS0uMDA5LjA1LS4wMTYuMDYzLS4wMjJsLjAxLS4wMDRjLjU1Ni0uMjg3LjkzMi0uODY1LjkzMi0xLjUyOHptNi44NTUgMTIuNDU3TDE2IDE1Ljg1NmwtOC41MiA2LjMyYy0uODU4LjYzOC0uNDA3IDIuMDAyLjY2MiAyLjAwMmgxNS43MTZjMS4wNyAwIDEuNTItMS4zNjQuNjYyLTIuMDAyelwiLGZpbGxSdWxlOlwiZXZlbm9kZFwifSkpKSx1TXx8KHVNPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7Y2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk0xNy42NjUgOS43MTlhMS43MTkgMS43MTkgMCAwIDAtMy4zNzMtLjQ2OSAxLjI1IDEuMjUgMCAxIDEtMi40MDYtLjY3OCA0LjIyIDQuMjIgMCAxIDEgNS45ODIgNC45MDMgMi45NyAyLjk3IDAgMCAxLS40NTQuMTgyLjUxOC41MTggMCAwIDAtLjExMy4wNWw4LjcwOCA2LjQ2MWMyLjc5NCAyLjA3MyAxLjMyOCA2LjUxLTIuMTUgNi41MUg4LjE0MWMtMy40NzkgMC00Ljk0NS00LjQzNy0yLjE1LTYuNTFsOC43MDYtNi40NmMuMDQ1LTEuMjc1IDEuMDEyLTIuMTM0IDEuOTYyLTIuNDM1LjAyOS0uMDA5LjA1LS4wMTYuMDYzLS4wMjJsLjAxLS4wMDRjLjU1Ni0uMjg3LjkzMi0uODY1LjkzMi0xLjUyOHptNi44NTUgMTIuNDU3TDE2IDE1Ljg1NmwtOC41MiA2LjMyYy0uODU4LjYzOC0uNDA3IDIuMDAyLjY2MiAyLjAwMmgxNS43MTZjMS4wNyAwIDEuNTItMS4zNjQuNjYyLTIuMDAyelwiLGZpbGw6XCIjZmZmXCIsZmlsbFJ1bGU6XCJldmVub2RkXCJ9KSksZE18fChkTT1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJtMTQuMjkyIDkuMjUuNDgxLjEzNnptLTEuNTQyLjg2NC0uMTM2LjQ4MXptLS44NjQtMS41NDIuNDgxLjEzNXptNS45ODIgNC45MDMuMjI4LjQ0NXptLS40NTQuMTgyLjE1LjQ3N3ptLS4xMTMuMDUtLjI5OC40MDJhLjUuNSAwIDAgMSAuMDM5LS44Mjl6bTguNzA4IDYuNDYxLjI5OC0uNDAxem0tMjAuMDE4IDAgLjI5OC40MDJ6bTguNzA3LTYuNDYuNS4wMThhLjUuNSAwIDAgMS0uMjAyLjM4NHptMS45NjItMi40MzUtLjE1MS0uNDc2em0uMDYzLS4wMjIuMTg4LjQ2NC0uMDA2LjAwMnptLjAxLS4wMDQuMjMuNDQ1YS40NzQuNDc0IDAgMCAxLS4wNDIuMDE5ek0xNiAxNS44NTVsLS4yOTgtLjQwMWEuNS41IDAgMCAxIC41OTYgMHptOC41MiA2LjMyMS4yOTgtLjQwMXptLTE3LjA0IDAtLjI5Ny0uNDAxek0xNS45NDcgNy41YzEuMjI2IDAgMi4yMTkuOTkzIDIuMjE5IDIuMjE5aC0xYzAtLjY3My0uNTQ2LTEuMjE5LTEuMjE5LTEuMjE5em0tMi4xMzUgMS42MTVBMi4yMiAyLjIyIDAgMCAxIDE1Ljk0NiA3LjV2MWExLjIyIDEuMjIgMCAwIDAtMS4xNzMuODg2em0tLjkyNi41MThhLjc1Ljc1IDAgMCAwIC45MjYtLjUxOGwuOTYyLjI3MWExLjc1IDEuNzUgMCAwIDEtMi4xNiAxLjIxem0tLjUxOC0uOTI2YS43NS43NSAwIDAgMCAuNTE4LjkyNmwtLjI3MS45NjJhMS43NSAxLjc1IDAgMCAxLTEuMjEtMi4xNTl6TTE1Ljk0NyA2YTMuNzIgMy43MiAwIDAgMC0zLjU4IDIuNzA3bC0uOTYyLS4yNzFBNC43MiA0LjcyIDAgMCAxIDE1Ljk0NiA1em0zLjcxOCAzLjcxOUEzLjcxOSAzLjcxOSAwIDAgMCAxNS45NDYgNlY1YTQuNzE5IDQuNzE5IDAgMCAxIDQuNzE5IDQuNzE5em0tMi4wMjUgMy4zMWEzLjcxOCAzLjcxOCAwIDAgMCAyLjAyNS0zLjMxaDFhNC43MTggNC43MTggMCAwIDEtMi41NyA0LjIwMXptLS4zNzcuMTUxYy4xMi0uMDM4LjI1My0uMDg3LjM3Ny0uMTVsLjQ1Ni44OWEzLjQ2MyAzLjQ2MyAwIDAgMS0uNTMxLjIxNHptLS4yMjEuMWMuMDY0LS4wMzkuMTM4LS4wNzQuMjIxLS4xbC4zMDEuOTU0LS4wMDQuMDAxem04LjY3IDcuMjktOC43MDktNi40Ni41OTYtLjgwNCA4LjcwOCA2LjQ2em0tMS44NTQgNS42MDhjMi45OTcgMCA0LjI2LTMuODIyIDEuODUzLTUuNjA4bC41OTYtLjgwM2MzLjE4MSAyLjM2IDEuNTEyIDcuNDEtMi40NDkgNy40MXptLTE1LjcxNiAwaDE1LjcxNnYxSDguMTQyek02LjI5IDIwLjU3Yy0yLjQwNyAxLjc4Ni0xLjE0NCA1LjYwOCAxLjg1MyA1LjYwOHYxYy0zLjk2IDAtNS42My01LjA1MS0yLjQ0OS03LjQxMXptOC43MDctNi40Ni04LjcwNyA2LjQ2LS41OTYtLjgwMyA4LjcwNy02LjQ2em0xLjgxNS0yLjM2Yy0uODEyLjI1Ny0xLjU3OC45Ny0xLjYxNCAxLjk3NmwtLjk5OS0uMDM1Yy4wNTQtMS41NDcgMS4yMjMtMi41NSAyLjMxMS0yLjg5NHptLjA5NC0uMDMzLS4wOTQuMDMzLS4zMDItLjk1My4wMzItLjAxMXptLjAxNi0uMDA2LS4wMS4wMDQtLjM3Ni0uOTI3LjAxLS4wMDR6bTEuMjQ0LTEuOTkyYzAgLjg1Ny0uNDg2IDEuNjAzLTEuMjAzIDEuOTczbC0uNDU4LS44ODljLjM5NS0uMjA0LjY2MS0uNjE0LjY2MS0xLjA4NHptLTEuODY3IDUuNzM1IDguNTIgNi4zMi0uNTk2LjgwNC04LjUyLTYuMzIxem0tOS4xMTUgNi4zMiA4LjUyLTYuMzIuNTk1LjgwMy04LjUyIDYuMzJ6bS45NiAyLjkwNGMtMS41NTIgMC0yLjIwNi0xLjk3OS0uOTYtMi45MDNsLjU5Ni44MDNjLS40NzIuMzUtLjIyNSAxLjEuMzYzIDEuMXptMTUuNzE1IDBIOC4xNDJ2LTFoMTUuNzE2em0uOTYtMi45MDNjMS4yNDYuOTI0LjU5MiAyLjkwMy0uOTYgMi45MDN2LTFjLjU4OCAwIC44MzYtLjc1LjM2NC0xLjF6XCIsZmlsbDpcIiMwMDBcIixmaWxsT3BhY2l0eTouMSxtYXNrOlwidXJsKCNmNjNkMTExNTM5NDQ0M2U2NzE1ZjEwMjUwMjUxOTJjYTkyNzUwZjI4X19hKVwifSkpKTt2YXIgbU0saE0sdk07ZnVuY3Rpb24gZ00oKXtyZXR1cm4gZ009T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxnTS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y29uc3QgeU09ZT0+ZC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsZ00oe3N0eWxlOntoZWlnaHQ6XCIxMDAlXCJ9LHZpZXdCb3g6XCIwIDAgMjU5IDU3MFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSxkLmNyZWF0ZUVsZW1lbnQoXCJtYXNrXCIse2lkOlwiN2E4YzhhMDEwZDU1OTc0N2RlYWNhZTRjMWRmMTM1OGEyMjA3ZmYzMV9fYlwiLHN0eWxlOnttYXNrVHlwZTpcImFscGhhXCJ9LG1hc2tVbml0czpcInVzZXJTcGFjZU9uVXNlXCIseDowLHk6MCx3aWR0aDoyNTksaGVpZ2h0OjU3MH0sbU18fChtTT1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2ZpbGw6XCJ1cmwoIzdhOGM4YTAxMGQ1NTk3NDdkZWFjYWU0YzFkZjEzNThhMjIwN2ZmMzFfX2EpXCIsZDpcIk0uNDkgMGgyNTguNDQ4djU2OS44NjVILjQ5elwifSkpKSxoTXx8KGhNPWQuY3JlYXRlRWxlbWVudChcImdcIix7bWFzazpcInVybCgjN2E4YzhhMDEwZDU1OTc0N2RlYWNhZTRjMWRmMTM1OGEyMjA3ZmYzMV9fYilcIn0sZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTE0NC45MzUgNTc2Ljc3MmM0Ni4yNTYgMCA4My43NTMtMTcuNzgzIDgzLjc1My0zOS43MTggMC0yMS45MzYtMzcuNDk3LTM5LjcxOC04My43NTMtMzkuNzE4LTQ2LjI1NSAwLTgzLjc1MiAxNy43ODItODMuNzUyIDM5LjcxOCAwIDIxLjkzNSAzNy40OTcgMzkuNzE4IDgzLjc1MiAzOS43MThaXCIsZmlsbDpcInVybCgjN2E4YzhhMDEwZDU1OTc0N2RlYWNhZTRjMWRmMTM1OGEyMjA3ZmYzMV9fYylcIn0pLGQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk05MS4yMjEgNTQ2Ljc1YzE4LjY0MyAyMi44NjMgNjIuMDMyIDE4LjM0MSA5Ni45MTItMTAuMTAxIDM0Ljg3OS0yOC40NDIgNDguMDQxLTcwLjAzMyAyOS4zOTctOTIuODk2LTE4LjY0My0yMi44NjMtNjIuMDMyLTE4LjM0MS05Ni45MTEgMTAuMTAxLTM0Ljg4IDI4LjQ0Mi00OC4wNDEgNzAuMDMyLTI5LjM5OCA5Mi44OTZaXCIsZmlsbDpcInVybCgjN2E4YzhhMDEwZDU1OTc0N2RlYWNhZTRjMWRmMTM1OGEyMjA3ZmYzMV9fZClcIn0pLGQuY3JlYXRlRWxlbWVudChcImdcIix7ZmlsdGVyOlwidXJsKCM3YThjOGEwMTBkNTU5NzQ3ZGVhY2FlNGMxZGYxMzU4YTIyMDdmZjMxX19lKVwifSxkLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNMjE0Ljg3NSA1NzAuNzI5Yy04LjQ2LTIuMDQ0LTE3LjMzOC03LjQ2OS0yMy4zMTMtMTQuNjc5LTYuODI5LTcuMjA5LTI0Ljk5Ny0xMy4yNDgtMjEuNTg1LTI2Ljc2NiAxLjg2NS03LjM4OCA0NS4yNDctMTIuNjIyIDQ4LjY2MS01LjQxMiAzLjQxNCA3LjIwOSAyMS4yNzYgMCAyOS4wNDcgMjYuMTM0IDEuNTQxIDUuMTgzLTE0LjkzNSAyNS4wNC0zMi44MSAyMC43MjNaXCIsZmlsbDpcIiMwMDBcIixmaWxsT3BhY2l0eTouN30pKSxkLmNyZWF0ZUVsZW1lbnQoXCJnXCIse2ZpbHRlcjpcInVybCgjN2E4YzhhMDEwZDU1OTc0N2RlYWNhZTRjMWRmMTM1OGEyMjA3ZmYzMV9fZilcIn0sZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwiTTg5LjY3NiA1NjcuMjc0YzQuNDY4LTIuNjg5IDEyLjA5LTEzLjgxNSAxNy4yNjktMTcuMjY5IDUuMTgyLTIuNTkgMTMuMDQyLTEwLjAzMyAxMC4zNjEtMTguOTk1LTIuNjgtOC45NjMtMzcuMjItMTIuOTIzLTM4LjExNC0xMS4xMy0uODkzIDEuNzkyLTUuODAxIDEuNDAyLTkuMzc1IDcuNjc2cy0xOC4xMyAxMy44MTUtMjAuNzIxIDIwLjcyMmMtMS45OSA1LjMwNiA1LjIxIDE3LjI3NyAxMS4yMjQgMTguOTk2IDYuMDQyIDEuNzI2IDI0Ljg4OSAyLjY4OCAyOS4zNTYgMFpcIixmaWxsOlwiIzAwMFwiLGZpbGxPcGFjaXR5Oi43fSkpLGQuY3JlYXRlRWxlbWVudChcIm1hc2tcIix7aWQ6XCI3YThjOGEwMTBkNTU5NzQ3ZGVhY2FlNGMxZGYxMzU4YTIyMDdmZjMxX19pXCIsbWFza1VuaXRzOlwidXNlclNwYWNlT25Vc2VcIix4OjQ2LjA5Mix5OjMuODY5LHdpZHRoOjE5NixoZWlnaHQ6NTYyLGZpbGw6XCIjMDAwXCJ9LGQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZmlsbDpcIiNmZmZcIixkOlwiTTQ2LjA5MiAzLjg2OWgxOTZ2NTYyaC0xOTZ6XCJ9KSxkLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNMTE0LjEzOCAxNzYuMjA5Yy4wMTEtLjg3Mi0uMjI0LTEuNjcyLTEuMzM0LTIuMjY0LS42MTItLjMyNi0xLjIyNi0uNjQ5LTEuODQtLjk3MnYtLjAwMWMtMy4xNjUtMS42NjUtNi4zNDQtMy4zMzctOS4yMjgtNS40MDctNi45Mi00Ljk2Ni0xMi40MTMtMTEuMzQ5LTE2Ljg3Mi0xOC42MjItLjEzNi0uMjItLjI4NS0uNDI5LS40ODgtLjcxNC0uMS0uMTQtLjIxNC0uMjk5LS4zNDQtLjQ4NS0zLjAxNyAzLjUxOC02LjUxMiA1Ljk4MS0xMS4yNyA1LjA2LTEuOTQtLjM3NS0zLjgzNy0xLjIxLTQuOTk2LTMuMTk4LjI2NS0uMTY3LjUzLS4zMjUuNzk0LS40ODEuNTcyLS4zMzggMS4xMy0uNjY5IDEuNjI4LTEuMDczIDEuNDU4LTEuMTg2IDIuMTc3LTIuNzY4IDEuODE2LTQuNjQ5LS42ODUtMy41OC0yLjM1Mi02LjY4NC00LjctOS41NjUtLjYxNSAxLjgxOS0uMTI1IDQuMzEgMS40NzcgNy42MjQtMy4zODYtLjQ5Mi01LjYwNi0yLjQ3MS03LjI4Ni01LjA1Ni0zLjQ2LTUuMzI5LTMuODEtMTEuMDYtMS44MTktMTcuMDFsLjIzMy0uNjk2LjAwMS0uMDA0Yy4zMTMtLjkzNC42MjctMS44Ny45MTMtMi44MTQuNzg1LTIuNTc2LS4wNS00Ljc4Ni0xLjM0NS03LjAyMy00LjA3OC03LjA1OS00Ljc3LTE0LjM0NC0uOTQxLTIxLjc1YTEwMi4yMjggMTAyLjIyOCAwIDAgMSA0Ljc0Ny04LjI2NWMzLjg0NS01Ljk4MSA1LjQzOC0xMi43NDcgNi43OTUtMTkuNTY0IDEuMzE0LTYuNjEzIDMuMTYtMTMuMDI0IDYuNTI0LTE4Ljg3NiA0LjQ5LTcuODA1IDkuOTg3LTE0LjcgMTguMjktMTguNzk5IDIuOTE2LTEuNDQgNS45ODQtMS45NTYgOS4yNDUtMS42MzEuOTA2LjA5IDIuMTA0LS4xNTMgMi43ODQtLjcxMSAxMC4yNTUtOC40OCAyMS45ODQtOS45NiAzNC40MzYtNi45OTIgOC41NTcgMi4wMzggMTYuMzE2IDYuMTQgMjMuODQzIDEwLjY2NiA2LjcyOSA0LjA0OCAxMy4zMTEgOC4zMjcgMTguNjY0IDE0LjE0IDkuMTc1IDkuOTY4IDE1LjAwMiAyMS40MzQgMTQuODU4IDM1LjM5NS0uMDEyIDEuMjUuMDYgMi41MDMuMTMzIDMuNzU2LjA0My43NjEuMDg3IDEuNTIzLjExMiAyLjI4NC4yNDUgNy43MTkgMS42NTYgMTUuMjUgMy43MDkgMjIuNjYgMS44NzQgNi43NjIgMS4yMDUgMTMuMjI3LTEuNzAzIDE5LjU1MmwtLjE4MS4zOTN2LjAwMWMtLjg2NSAxLjg3NS0xLjc0NSAzLjc4Mi0yLjIxIDUuNzY2LS4zNzEgMS41OTYtLjI4MSAzLjMyMi0uMTk1IDUuMDAxbC4wMjguNTU1Yy4wMzQuNzE1LjIzMyAxLjQyMy40NTggMi4yMjdoLjAwMWMuMTExLjM5OC4yMy44MjEuMzM4IDEuMjc5bC0xLjM3MS0uNjVjLS42NzctLjMyMS0xLjI5OS0uNjE2LTEuOTI5LS45MTItMS4yOTEgMy43NzkgMi42NyA3LjUyNyA4LjAzMSA3LjY4My0uMzY3IDIuOTMyLTIuNTIxIDMuNzg4LTQuNjI0IDQuNjI0LS40MTQuMTY0LS44MjcuMzI4LTEuMjIyLjUwNi0yLjcxNCAxLjIyMi01LjQyNC43ODUtOC4wNjMtLjg3NC0uMTk1LjUxMS0uMzgyLjk4NC0uNTU5IDEuNDMyLS4zNTEuODg2LS42NjQgMS42NzctLjkyMyAyLjQ4NC0yLjI4NSA3LjEyNS04LjkzNyAxMi40MzQtMTUuODg0IDEyLjYzbC0uMzA0LjAxMS0uMDAzLjAwMWE4LjQ4OCA4LjQ4OCAwIDAgMS0uODU5LjAwN2MtMS45NTYtLjEwOS0yLjE0Ni0uNDEtMS4zOTYtMi4yMTMuODQzLTIuMDMxLjU4Ny0zLjg4NS0uODI4LTUuODE4LS4xNjcuMTU1LS4zMjkuMjg5LS40ODEuNDE1LS4yOTEuMjQxLS41NDQuNDQ5LS43MTMuNzE0LTQuODc5IDcuNjIxLTEwLjU1OCAxMS41NzEtMTguMSAxNS43MjItLjI5My4xNjEtLjU2OC4zMS0uODIzLjQ0OC0yLjcwNSAxLjQ2NC0zLjM0NCAxLjgxLTMuMDIxIDQuODE2bDEuMzE0IDkuNzYzLjAxNC4wN2MuNTk3IDIuODM2IDEuMDYxIDUuMDM2IDEyLjkyNiA3LjM2OSAxMS45NjIgMi4zNTIgMTkuMDkzIDUuNzY1IDI3LjYxNCAxNC43NzggOC41MjIgOS4wMTQgMTkuOTQ1IDQzLjg5OCAyMS44MzYgODQuOTA4LjcyIDEyLjE1Mi02Ljc3MiAyMy42OTYtMTQuMjM1IDM1LjE5NS00Ljc3MiA3LjM1NC05LjUzMyAxNC42OS0xMi4xMjYgMjIuMTUzIDMuMTQzIDUzLjIyNyAxMi4xNzkgODUuNjg5IDE5LjMwMiAxMjMuNjggMi41OSAxMy44MTQgMTAuMzYxIDQ0LjAzNSAxMC4zNjEgNDQuMDM1Ljg2MyAzLjcgMS4zMzEgNC41MTIgNC4zMTcgNy43NyA1LjcwNyA2LjIyNiAxMC42MTggNS45OTggMTYuNDA1IDE0LjY3OSAxLjcyNyAyLjU5IDEuNDggNS44NTUgMCA4LjYzNC0zLjA5NSA1LjgxNS0xMS40IDEwLjM4Ny0xOC45OTUgOC42MzQtOC43MDYtMi4wMDktMTEuMjI1LTIuNTktMjEuNTg2LTEyLjk1MS04Ljk3Ni03Ljc0OS0xNS4wNzYtMTAuNTEtMTUuNTQyLTE0LjY3OC0uMjk2LTIuNjU0LjE5Ny03LjEyNC43MzEtMTAuNzY2LjU3Mi0zLjg5OS41MzEtNy44NjgtLjM3OC0xMS43MDItMi40NDUtMTAuMzEyLTcuNTEzLTMxLjU3NC05Ljg1LTQwLjU2My05LjI3Ny0zNS42OC0xNS42NDEtNjguOTQxLTI4LjQ5NC03OC41NzItNC43MjQtMy41NC0xMC45NDQtMy41NzctMTMuODE1Ljg2My02LjUzNCAxMC4xMDktMTIuMDg4IDM4Ljg1NS0xNC42NzggNzEuNjY1LS45NDIgMTEuOTM1LTQuMzQzIDQxLjUyNS01LjU4NSA1Mi4yMDItLjMwMyAyLjYwMS0uMjMxIDUuMjI5LjEyOCA3LjgyMi4zODIgMi43NTQuODQ2IDYuNTY0IDEuMDUzIDEwLjA4LjEyOCAyLjE5My0uMjQ1IDQuNDUxLTEuNzExIDYuMDg3LTIuNzcgMy4wOS04LjU0NCA1LjIyNi0xMC41NTggNy45MTEtMy43MzUgNC45ODEtMTEuMTY1IDEyLjgyOC0xOS41OTEgMTMuNDY2LTUuODE4LjQ0LTE2LjYzMy0xLjkzNy0xOC4xMTItOC40OTEtLjE4OC0uODMzLS4yODItMi4zODUtLjMyOC0zLjk1My0uMDg4LTMuMDMyIDEuNDQzLTUuNzc2IDMuNTEtNy45OTdhOS4xMSA5LjExIDAgMCAwIC4yNTItLjI4MmM0LjU5Ny01LjM0OSA4LjY2NC00Ljg3OSAxMy42NDMtMTUuMDMxLjcxOC0xLjQ2MyAxLjA4Ni0zLjA3IDEuMTc4LTQuNjk3IDEuNDYtMjUuOCAxLjU1NS00OC4yNTUgMi40NDctNjguMzQyIDEuMzQ5LTMwLjM2NiAyLjA3MS01OC42NTYgMi41OS0xMDMuNjExLTIuNzYtNS44OTctOC41Ny0xMi4yMjYtMTIuNDU2LTE4LjA3Mi03LjYzNi0xMS40OS0xNS4zMDMtMjMuMDI2LTE0LjU4My0zNS4xNjggMS44OS00MS4wMSAxMS4wNy03NC4xNjUgMjEuMjY2LTg0LjkwOCA4LjE5Ny04LjYzNiAxMy45MzYtMTIuNDI2IDI1Ljg0NS0xNC43NzggMTEuODY2LTIuMzQzIDEyLjMzMi00LjU1MyAxMi45MzQtNy40MDhsLjAwNi0uMDMxLjc3NC04LjU5NGMuMDExLS4yMzcuMDM2LS40NzYuMDY0LS43MTRsLjExLTEuMjE4WlwifSkpLGQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIk0xMTQuMTM4IDE3Ni4yMDljLjAxMS0uODcyLS4yMjQtMS42NzItMS4zMzQtMi4yNjQtLjYxMi0uMzI2LTEuMjI2LS42NDktMS44NC0uOTcydi0uMDAxYy0zLjE2NS0xLjY2NS02LjM0NC0zLjMzNy05LjIyOC01LjQwNy02LjkyLTQuOTY2LTEyLjQxMy0xMS4zNDktMTYuODcyLTE4LjYyMi0uMTM2LS4yMi0uMjg1LS40MjktLjQ4OC0uNzE0LS4xLS4xNC0uMjE0LS4yOTktLjM0NC0uNDg1LTMuMDE3IDMuNTE4LTYuNTEyIDUuOTgxLTExLjI3IDUuMDYtMS45NC0uMzc1LTMuODM3LTEuMjEtNC45OTYtMy4xOTguMjY1LS4xNjcuNTMtLjMyNS43OTQtLjQ4MS41NzItLjMzOCAxLjEzLS42NjkgMS42MjgtMS4wNzMgMS40NTgtMS4xODYgMi4xNzctMi43NjggMS44MTYtNC42NDktLjY4NS0zLjU4LTIuMzUyLTYuNjg0LTQuNy05LjU2NS0uNjE1IDEuODE5LS4xMjUgNC4zMSAxLjQ3NyA3LjYyNC0zLjM4Ni0uNDkyLTUuNjA2LTIuNDcxLTcuMjg2LTUuMDU2LTMuNDYtNS4zMjktMy44MS0xMS4wNi0xLjgxOS0xNy4wMWwuMjMzLS42OTYuMDAxLS4wMDRjLjMxMy0uOTM0LjYyNy0xLjg3LjkxMy0yLjgxNC43ODUtMi41NzYtLjA1LTQuNzg2LTEuMzQ1LTcuMDIzLTQuMDc4LTcuMDU5LTQuNzctMTQuMzQ0LS45NDEtMjEuNzVhMTAyLjIyOCAxMDIuMjI4IDAgMCAxIDQuNzQ3LTguMjY1YzMuODQ1LTUuOTgxIDUuNDM4LTEyLjc0NyA2Ljc5NS0xOS41NjQgMS4zMTQtNi42MTMgMy4xNi0xMy4wMjQgNi41MjQtMTguODc2IDQuNDktNy44MDUgOS45ODctMTQuNyAxOC4yOS0xOC43OTkgMi45MTYtMS40NCA1Ljk4NC0xLjk1NiA5LjI0NS0xLjYzMS45MDYuMDkgMi4xMDQtLjE1MyAyLjc4NC0uNzExIDEwLjI1NS04LjQ4IDIxLjk4NC05Ljk2IDM0LjQzNi02Ljk5MiA4LjU1NyAyLjAzOCAxNi4zMTYgNi4xNCAyMy44NDMgMTAuNjY2IDYuNzI5IDQuMDQ4IDEzLjMxMSA4LjMyNyAxOC42NjQgMTQuMTQgOS4xNzUgOS45NjggMTUuMDAyIDIxLjQzNCAxNC44NTggMzUuMzk1LS4wMTIgMS4yNS4wNiAyLjUwMy4xMzMgMy43NTYuMDQzLjc2MS4wODcgMS41MjMuMTEyIDIuMjg0LjI0NSA3LjcxOSAxLjY1NiAxNS4yNSAzLjcwOSAyMi42NiAxLjg3NCA2Ljc2MiAxLjIwNSAxMy4yMjctMS43MDMgMTkuNTUybC0uMTgxLjM5M3YuMDAxYy0uODY1IDEuODc1LTEuNzQ1IDMuNzgyLTIuMjEgNS43NjYtLjM3MSAxLjU5Ni0uMjgxIDMuMzIyLS4xOTUgNS4wMDFsLjAyOC41NTVjLjAzNC43MTUuMjMzIDEuNDIzLjQ1OCAyLjIyN2guMDAxYy4xMTEuMzk4LjIzLjgyMS4zMzggMS4yNzlsLTEuMzcxLS42NWMtLjY3Ny0uMzIxLTEuMjk5LS42MTYtMS45MjktLjkxMi0xLjI5MSAzLjc3OSAyLjY3IDcuNTI3IDguMDMxIDcuNjgzLS4zNjcgMi45MzItMi41MjEgMy43ODgtNC42MjQgNC42MjQtLjQxNC4xNjQtLjgyNy4zMjgtMS4yMjIuNTA2LTIuNzE0IDEuMjIyLTUuNDI0Ljc4NS04LjA2My0uODc0LS4xOTUuNTExLS4zODIuOTg0LS41NTkgMS40MzItLjM1MS44ODYtLjY2NCAxLjY3Ny0uOTIzIDIuNDg0LTIuMjg1IDcuMTI1LTguOTM3IDEyLjQzNC0xNS44ODQgMTIuNjNsLS4zMDQuMDExLS4wMDMuMDAxYTguNDg4IDguNDg4IDAgMCAxLS44NTkuMDA3Yy0xLjk1Ni0uMTA5LTIuMTQ2LS40MS0xLjM5Ni0yLjIxMy44NDMtMi4wMzEuNTg3LTMuODg1LS44MjgtNS44MTgtLjE2Ny4xNTUtLjMyOS4yODktLjQ4MS40MTUtLjI5MS4yNDEtLjU0NC40NDktLjcxMy43MTQtNC44NzkgNy42MjEtMTAuNTU4IDExLjU3MS0xOC4xIDE1LjcyMi0uMjkzLjE2MS0uNTY4LjMxLS44MjMuNDQ4LTIuNzA1IDEuNDY0LTMuMzQ0IDEuODEtMy4wMjEgNC44MTZsMS4zMTQgOS43NjMuMDE0LjA3Yy41OTcgMi44MzYgMS4wNjEgNS4wMzYgMTIuOTI2IDcuMzY5IDExLjk2MiAyLjM1MiAxOS4wOTMgNS43NjUgMjcuNjE0IDE0Ljc3OCA4LjUyMiA5LjAxNCAxOS45NDUgNDMuODk4IDIxLjgzNiA4NC45MDguNzIgMTIuMTUyLTYuNzcyIDIzLjY5Ni0xNC4yMzUgMzUuMTk1LTQuNzcyIDcuMzU0LTkuNTMzIDE0LjY5LTEyLjEyNiAyMi4xNTMgMy4xNDMgNTMuMjI3IDEyLjE3OSA4NS42ODkgMTkuMzAyIDEyMy42OCAyLjU5IDEzLjgxNCAxMC4zNjEgNDQuMDM1IDEwLjM2MSA0NC4wMzUuODYzIDMuNyAxLjMzMSA0LjUxMiA0LjMxNyA3Ljc3IDUuNzA3IDYuMjI2IDEwLjYxOCA1Ljk5OCAxNi40MDUgMTQuNjc5IDEuNzI3IDIuNTkgMS40OCA1Ljg1NSAwIDguNjM0LTMuMDk1IDUuODE1LTExLjQgMTAuMzg3LTE4Ljk5NSA4LjYzNC04LjcwNi0yLjAwOS0xMS4yMjUtMi41OS0yMS41ODYtMTIuOTUxLTguOTc2LTcuNzQ5LTE1LjA3Ni0xMC41MS0xNS41NDItMTQuNjc4LS4yOTYtMi42NTQuMTk3LTcuMTI0LjczMS0xMC43NjYuNTcyLTMuODk5LjUzMS03Ljg2OC0uMzc4LTExLjcwMi0yLjQ0NS0xMC4zMTItNy41MTMtMzEuNTc0LTkuODUtNDAuNTYzLTkuMjc3LTM1LjY4LTE1LjY0MS02OC45NDEtMjguNDk0LTc4LjU3Mi00LjcyNC0zLjU0LTEwLjk0NC0zLjU3Ny0xMy44MTUuODYzLTYuNTM0IDEwLjEwOS0xMi4wODggMzguODU1LTE0LjY3OCA3MS42NjUtLjk0MiAxMS45MzUtNC4zNDMgNDEuNTI1LTUuNTg1IDUyLjIwMi0uMzAzIDIuNjAxLS4yMzEgNS4yMjkuMTI4IDcuODIyLjM4MiAyLjc1NC44NDYgNi41NjQgMS4wNTMgMTAuMDguMTI4IDIuMTkzLS4yNDUgNC40NTEtMS43MTEgNi4wODctMi43NyAzLjA5LTguNTQ0IDUuMjI2LTEwLjU1OCA3LjkxMS0zLjczNSA0Ljk4MS0xMS4xNjUgMTIuODI4LTE5LjU5MSAxMy40NjYtNS44MTguNDQtMTYuNjMzLTEuOTM3LTE4LjExMi04LjQ5MS0uMTg4LS44MzMtLjI4Mi0yLjM4NS0uMzI4LTMuOTUzLS4wODgtMy4wMzIgMS40NDMtNS43NzYgMy41MS03Ljk5N2E5LjExIDkuMTEgMCAwIDAgLjI1Mi0uMjgyYzQuNTk3LTUuMzQ5IDguNjY0LTQuODc5IDEzLjY0My0xNS4wMzEuNzE4LTEuNDYzIDEuMDg2LTMuMDcgMS4xNzgtNC42OTcgMS40Ni0yNS44IDEuNTU1LTQ4LjI1NSAyLjQ0Ny02OC4zNDIgMS4zNDktMzAuMzY2IDIuMDcxLTU4LjY1NiAyLjU5LTEwMy42MTEtMi43Ni01Ljg5Ny04LjU3LTEyLjIyNi0xMi40NTYtMTguMDcyLTcuNjM2LTExLjQ5LTE1LjMwMy0yMy4wMjYtMTQuNTgzLTM1LjE2OCAxLjg5LTQxLjAxIDExLjA3LTc0LjE2NSAyMS4yNjYtODQuOTA4IDguMTk3LTguNjM2IDEzLjkzNi0xMi40MjYgMjUuODQ1LTE0Ljc3OCAxMS44NjYtMi4zNDMgMTIuMzMyLTQuNTUzIDEyLjkzNC03LjQwOGwuMDA2LS4wMzEuNzc0LTguNTk0Yy4wMTEtLjIzNy4wMzYtLjQ3Ni4wNjQtLjcxNGwuMTEtMS4yMThaXCIsZmlsbDpcIiMwMDBcIn0pLGQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIk0xMTQuMTM4IDE3Ni4yMDljLjAxMS0uODcyLS4yMjQtMS42NzItMS4zMzQtMi4yNjQtLjYxMi0uMzI2LTEuMjI2LS42NDktMS44NC0uOTcydi0uMDAxYy0zLjE2NS0xLjY2NS02LjM0NC0zLjMzNy05LjIyOC01LjQwNy02LjkyLTQuOTY2LTEyLjQxMy0xMS4zNDktMTYuODcyLTE4LjYyMi0uMTM2LS4yMi0uMjg1LS40MjktLjQ4OC0uNzE0LS4xLS4xNC0uMjE0LS4yOTktLjM0NC0uNDg1LTMuMDE3IDMuNTE4LTYuNTEyIDUuOTgxLTExLjI3IDUuMDYtMS45NC0uMzc1LTMuODM3LTEuMjEtNC45OTYtMy4xOTguMjY1LS4xNjcuNTMtLjMyNS43OTQtLjQ4MS41NzItLjMzOCAxLjEzLS42NjkgMS42MjgtMS4wNzMgMS40NTgtMS4xODYgMi4xNzctMi43NjggMS44MTYtNC42NDktLjY4NS0zLjU4LTIuMzUyLTYuNjg0LTQuNy05LjU2NS0uNjE1IDEuODE5LS4xMjUgNC4zMSAxLjQ3NyA3LjYyNC0zLjM4Ni0uNDkyLTUuNjA2LTIuNDcxLTcuMjg2LTUuMDU2LTMuNDYtNS4zMjktMy44MS0xMS4wNi0xLjgxOS0xNy4wMWwuMjMzLS42OTYuMDAxLS4wMDRjLjMxMy0uOTM0LjYyNy0xLjg3LjkxMy0yLjgxNC43ODUtMi41NzYtLjA1LTQuNzg2LTEuMzQ1LTcuMDIzLTQuMDc4LTcuMDU5LTQuNzctMTQuMzQ0LS45NDEtMjEuNzVhMTAyLjIyOCAxMDIuMjI4IDAgMCAxIDQuNzQ3LTguMjY1YzMuODQ1LTUuOTgxIDUuNDM4LTEyLjc0NyA2Ljc5NS0xOS41NjQgMS4zMTQtNi42MTMgMy4xNi0xMy4wMjQgNi41MjQtMTguODc2IDQuNDktNy44MDUgOS45ODctMTQuNyAxOC4yOS0xOC43OTkgMi45MTYtMS40NCA1Ljk4NC0xLjk1NiA5LjI0NS0xLjYzMS45MDYuMDkgMi4xMDQtLjE1MyAyLjc4NC0uNzExIDEwLjI1NS04LjQ4IDIxLjk4NC05Ljk2IDM0LjQzNi02Ljk5MiA4LjU1NyAyLjAzOCAxNi4zMTYgNi4xNCAyMy44NDMgMTAuNjY2IDYuNzI5IDQuMDQ4IDEzLjMxMSA4LjMyNyAxOC42NjQgMTQuMTQgOS4xNzUgOS45NjggMTUuMDAyIDIxLjQzNCAxNC44NTggMzUuMzk1LS4wMTIgMS4yNS4wNiAyLjUwMy4xMzMgMy43NTYuMDQzLjc2MS4wODcgMS41MjMuMTEyIDIuMjg0LjI0NSA3LjcxOSAxLjY1NiAxNS4yNSAzLjcwOSAyMi42NiAxLjg3NCA2Ljc2MiAxLjIwNSAxMy4yMjctMS43MDMgMTkuNTUybC0uMTgxLjM5M3YuMDAxYy0uODY1IDEuODc1LTEuNzQ1IDMuNzgyLTIuMjEgNS43NjYtLjM3MSAxLjU5Ni0uMjgxIDMuMzIyLS4xOTUgNS4wMDFsLjAyOC41NTVjLjAzNC43MTUuMjMzIDEuNDIzLjQ1OCAyLjIyN2guMDAxYy4xMTEuMzk4LjIzLjgyMS4zMzggMS4yNzlsLTEuMzcxLS42NWMtLjY3Ny0uMzIxLTEuMjk5LS42MTYtMS45MjktLjkxMi0xLjI5MSAzLjc3OSAyLjY3IDcuNTI3IDguMDMxIDcuNjgzLS4zNjcgMi45MzItMi41MjEgMy43ODgtNC42MjQgNC42MjQtLjQxNC4xNjQtLjgyNy4zMjgtMS4yMjIuNTA2LTIuNzE0IDEuMjIyLTUuNDI0Ljc4NS04LjA2My0uODc0LS4xOTUuNTExLS4zODIuOTg0LS41NTkgMS40MzItLjM1MS44ODYtLjY2NCAxLjY3Ny0uOTIzIDIuNDg0LTIuMjg1IDcuMTI1LTguOTM3IDEyLjQzNC0xNS44ODQgMTIuNjNsLS4zMDQuMDExLS4wMDMuMDAxYTguNDg4IDguNDg4IDAgMCAxLS44NTkuMDA3Yy0xLjk1Ni0uMTA5LTIuMTQ2LS40MS0xLjM5Ni0yLjIxMy44NDMtMi4wMzEuNTg3LTMuODg1LS44MjgtNS44MTgtLjE2Ny4xNTUtLjMyOS4yODktLjQ4MS40MTUtLjI5MS4yNDEtLjU0NC40NDktLjcxMy43MTQtNC44NzkgNy42MjEtMTAuNTU4IDExLjU3MS0xOC4xIDE1LjcyMi0uMjkzLjE2MS0uNTY4LjMxLS44MjMuNDQ4LTIuNzA1IDEuNDY0LTMuMzQ0IDEuODEtMy4wMjEgNC44MTZsMS4zMTQgOS43NjMuMDE0LjA3Yy41OTcgMi44MzYgMS4wNjEgNS4wMzYgMTIuOTI2IDcuMzY5IDExLjk2MiAyLjM1MiAxOS4wOTMgNS43NjUgMjcuNjE0IDE0Ljc3OCA4LjUyMiA5LjAxNCAxOS45NDUgNDMuODk4IDIxLjgzNiA4NC45MDguNzIgMTIuMTUyLTYuNzcyIDIzLjY5Ni0xNC4yMzUgMzUuMTk1LTQuNzcyIDcuMzU0LTkuNTMzIDE0LjY5LTEyLjEyNiAyMi4xNTMgMy4xNDMgNTMuMjI3IDEyLjE3OSA4NS42ODkgMTkuMzAyIDEyMy42OCAyLjU5IDEzLjgxNCAxMC4zNjEgNDQuMDM1IDEwLjM2MSA0NC4wMzUuODYzIDMuNyAxLjMzMSA0LjUxMiA0LjMxNyA3Ljc3IDUuNzA3IDYuMjI2IDEwLjYxOCA1Ljk5OCAxNi40MDUgMTQuNjc5IDEuNzI3IDIuNTkgMS40OCA1Ljg1NSAwIDguNjM0LTMuMDk1IDUuODE1LTExLjQgMTAuMzg3LTE4Ljk5NSA4LjYzNC04LjcwNi0yLjAwOS0xMS4yMjUtMi41OS0yMS41ODYtMTIuOTUxLTguOTc2LTcuNzQ5LTE1LjA3Ni0xMC41MS0xNS41NDItMTQuNjc4LS4yOTYtMi42NTQuMTk3LTcuMTI0LjczMS0xMC43NjYuNTcyLTMuODk5LjUzMS03Ljg2OC0uMzc4LTExLjcwMi0yLjQ0NS0xMC4zMTItNy41MTMtMzEuNTc0LTkuODUtNDAuNTYzLTkuMjc3LTM1LjY4LTE1LjY0MS02OC45NDEtMjguNDk0LTc4LjU3Mi00LjcyNC0zLjU0LTEwLjk0NC0zLjU3Ny0xMy44MTUuODYzLTYuNTM0IDEwLjEwOS0xMi4wODggMzguODU1LTE0LjY3OCA3MS42NjUtLjk0MiAxMS45MzUtNC4zNDMgNDEuNTI1LTUuNTg1IDUyLjIwMi0uMzAzIDIuNjAxLS4yMzEgNS4yMjkuMTI4IDcuODIyLjM4MiAyLjc1NC44NDYgNi41NjQgMS4wNTMgMTAuMDguMTI4IDIuMTkzLS4yNDUgNC40NTEtMS43MTEgNi4wODctMi43NyAzLjA5LTguNTQ0IDUuMjI2LTEwLjU1OCA3LjkxMS0zLjczNSA0Ljk4MS0xMS4xNjUgMTIuODI4LTE5LjU5MSAxMy40NjYtNS44MTguNDQtMTYuNjMzLTEuOTM3LTE4LjExMi04LjQ5MS0uMTg4LS44MzMtLjI4Mi0yLjM4NS0uMzI4LTMuOTUzLS4wODgtMy4wMzIgMS40NDMtNS43NzYgMy41MS03Ljk5N2E5LjExIDkuMTEgMCAwIDAgLjI1Mi0uMjgyYzQuNTk3LTUuMzQ5IDguNjY0LTQuODc5IDEzLjY0My0xNS4wMzEuNzE4LTEuNDYzIDEuMDg2LTMuMDcgMS4xNzgtNC42OTcgMS40Ni0yNS44IDEuNTU1LTQ4LjI1NSAyLjQ0Ny02OC4zNDIgMS4zNDktMzAuMzY2IDIuMDcxLTU4LjY1NiAyLjU5LTEwMy42MTEtMi43Ni01Ljg5Ny04LjU3LTEyLjIyNi0xMi40NTYtMTguMDcyLTcuNjM2LTExLjQ5LTE1LjMwMy0yMy4wMjYtMTQuNTgzLTM1LjE2OCAxLjg5LTQxLjAxIDExLjA3LTc0LjE2NSAyMS4yNjYtODQuOTA4IDguMTk3LTguNjM2IDEzLjkzNi0xMi40MjYgMjUuODQ1LTE0Ljc3OCAxMS44NjYtMi4zNDMgMTIuMzMyLTQuNTUzIDEyLjkzNC03LjQwOGwuMDA2LS4wMzEuNzc0LTguNTk0Yy4wMTEtLjIzNy4wMzYtLjQ3Ni4wNjQtLjcxNGwuMTEtMS4yMThaXCIsZmlsbDpcInVybCgjN2E4YzhhMDEwZDU1OTc0N2RlYWNhZTRjMWRmMTM1OGEyMjA3ZmYzMV9fZylcIn0pLGQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIk0xMTQuMTM4IDE3Ni4yMDljLjAxMS0uODcyLS4yMjQtMS42NzItMS4zMzQtMi4yNjQtLjYxMi0uMzI2LTEuMjI2LS42NDktMS44NC0uOTcydi0uMDAxYy0zLjE2NS0xLjY2NS02LjM0NC0zLjMzNy05LjIyOC01LjQwNy02LjkyLTQuOTY2LTEyLjQxMy0xMS4zNDktMTYuODcyLTE4LjYyMi0uMTM2LS4yMi0uMjg1LS40MjktLjQ4OC0uNzE0aDBjLS4xLS4xNC0uMjE0LS4yOTktLjM0NC0uNDg1LTMuMDE3IDMuNTE4LTYuNTEyIDUuOTgxLTExLjI3IDUuMDYtMS45NC0uMzc1LTMuODM3LTEuMjEtNC45OTYtMy4xOTguMjY1LS4xNjcuNTMtLjMyNS43OTQtLjQ4MWgwYy41NzItLjMzOCAxLjEzLS42NjkgMS42MjgtMS4wNzMgMS40NTgtMS4xODYgMi4xNzctMi43NjggMS44MTYtNC42NDktLjY4NS0zLjU4LTIuMzUyLTYuNjg0LTQuNy05LjU2NS0uNjE1IDEuODE5LS4xMjUgNC4zMSAxLjQ3NyA3LjYyNC0zLjM4Ni0uNDkyLTUuNjA2LTIuNDcxLTcuMjg2LTUuMDU2LTMuNDYtNS4zMjktMy44MS0xMS4wNi0xLjgxOS0xNy4wMWwuMjMzLS42OTYuMDAxLS4wMDRjLjMxMy0uOTM0LjYyNy0xLjg3LjkxMy0yLjgxNC43ODUtMi41NzYtLjA1LTQuNzg2LTEuMzQ1LTcuMDIzLTQuMDc4LTcuMDU5LTQuNzctMTQuMzQ0LS45NDEtMjEuNzVhMTAyLjIyOCAxMDIuMjI4IDAgMCAxIDQuNzQ3LTguMjY1YzMuODQ1LTUuOTgxIDUuNDM4LTEyLjc0NyA2Ljc5NS0xOS41NjQgMS4zMTQtNi42MTMgMy4xNi0xMy4wMjQgNi41MjQtMTguODc2IDQuNDktNy44MDUgOS45ODctMTQuNyAxOC4yOS0xOC43OTkgMi45MTYtMS40NCA1Ljk4NC0xLjk1NiA5LjI0NS0xLjYzMS45MDYuMDkgMi4xMDQtLjE1MyAyLjc4NC0uNzExIDEwLjI1NS04LjQ4IDIxLjk4NC05Ljk2IDM0LjQzNi02Ljk5MiA4LjU1NyAyLjAzOCAxNi4zMTYgNi4xNCAyMy44NDMgMTAuNjY2IDYuNzI5IDQuMDQ4IDEzLjMxMSA4LjMyNyAxOC42NjQgMTQuMTQgOS4xNzUgOS45NjggMTUuMDAyIDIxLjQzNCAxNC44NTggMzUuMzk1LS4wMTIgMS4yNS4wNiAyLjUwMy4xMzMgMy43NTYuMDQzLjc2MS4wODcgMS41MjMuMTEyIDIuMjg0LjI0NSA3LjcxOSAxLjY1NiAxNS4yNSAzLjcwOSAyMi42NiAxLjg3NCA2Ljc2MiAxLjIwNSAxMy4yMjctMS43MDMgMTkuNTUybC0uMTgxLjM5M3YuMDAxYy0uODY1IDEuODc1LTEuNzQ1IDMuNzgyLTIuMjEgNS43NjYtLjM3MSAxLjU5Ni0uMjgxIDMuMzIyLS4xOTUgNS4wMDFsLjAyOC41NTVjLjAzNC43MTUuMjMzIDEuNDIzLjQ1OCAyLjIyN2guMDAxYy4xMTEuMzk4LjIzLjgyMS4zMzggMS4yNzlsLTEuMzcxLS42NWMtLjY3Ny0uMzIxLTEuMjk5LS42MTYtMS45MjktLjkxMi0xLjI5MSAzLjc3OSAyLjY3IDcuNTI3IDguMDMxIDcuNjgzLS4zNjcgMi45MzItMi41MjEgMy43ODgtNC42MjQgNC42MjQtLjQxNC4xNjQtLjgyNy4zMjgtMS4yMjIuNTA2LTIuNzE0IDEuMjIyLTUuNDI0Ljc4NS04LjA2My0uODc0LS4xOTUuNTExLS4zODIuOTg0LS41NTkgMS40MzJoMGMtLjM1MS44ODYtLjY2NCAxLjY3Ny0uOTIzIDIuNDg0LTIuMjg1IDcuMTI1LTguOTM3IDEyLjQzNC0xNS44ODQgMTIuNjNsLS4zMDQuMDExLS4wMDMuMDAxYTguNDg4IDguNDg4IDAgMCAxLS44NTkuMDA3Yy0xLjk1Ni0uMTA5LTIuMTQ2LS40MS0xLjM5Ni0yLjIxMy44NDMtMi4wMzEuNTg3LTMuODg1LS44MjgtNS44MTgtLjE2Ny4xNTUtLjMyOS4yODktLjQ4MS40MTUtLjI5MS4yNDEtLjU0NC40NDktLjcxMy43MTQtNC44NzkgNy42MjEtMTAuNTU4IDExLjU3MS0xOC4xIDE1LjcyMi0uMjkzLjE2MS0uNTY4LjMxLS44MjMuNDQ4LTIuNzA1IDEuNDY0LTMuMzQ0IDEuODEtMy4wMjEgNC44MTZsMS4zMTQgOS43NjMuMDE0LjA3Yy41OTcgMi44MzYgMS4wNjEgNS4wMzYgMTIuOTI2IDcuMzY5IDExLjk2MiAyLjM1MiAxOS4wOTMgNS43NjUgMjcuNjE0IDE0Ljc3OCA4LjUyMiA5LjAxNCAxOS45NDUgNDMuODk4IDIxLjgzNiA4NC45MDguNzIgMTIuMTUyLTYuNzcyIDIzLjY5Ni0xNC4yMzUgMzUuMTk1LTQuNzcyIDcuMzU0LTkuNTMzIDE0LjY5LTEyLjEyNiAyMi4xNTMgMy4xNDMgNTMuMjI3IDEyLjE3OSA4NS42ODkgMTkuMzAyIDEyMy42OCAyLjU5IDEzLjgxNCAxMC4zNjEgNDQuMDM1IDEwLjM2MSA0NC4wMzUuODYzIDMuNyAxLjMzMSA0LjUxMiA0LjMxNyA3Ljc3IDUuNzA3IDYuMjI2IDEwLjYxOCA1Ljk5OCAxNi40MDUgMTQuNjc5IDEuNzI3IDIuNTkgMS40OCA1Ljg1NSAwIDguNjM0LTMuMDk1IDUuODE1LTExLjQgMTAuMzg3LTE4Ljk5NSA4LjYzNC04LjcwNi0yLjAwOS0xMS4yMjUtMi41OS0yMS41ODYtMTIuOTUxLTguOTc2LTcuNzQ5LTE1LjA3Ni0xMC41MS0xNS41NDItMTQuNjc4LS4yOTYtMi42NTQuMTk3LTcuMTI0LjczMS0xMC43NjYuNTcyLTMuODk5LjUzMS03Ljg2OC0uMzc4LTExLjcwMi0yLjQ0NS0xMC4zMTItNy41MTMtMzEuNTc0LTkuODUtNDAuNTYzLTkuMjc3LTM1LjY4LTE1LjY0MS02OC45NDEtMjguNDk0LTc4LjU3Mi00LjcyNC0zLjU0LTEwLjk0NC0zLjU3Ny0xMy44MTUuODYzLTYuNTM0IDEwLjEwOS0xMi4wODggMzguODU1LTE0LjY3OCA3MS42NjUtLjk0MiAxMS45MzUtNC4zNDMgNDEuNTI1LTUuNTg1IDUyLjIwMi0uMzAzIDIuNjAxLS4yMzEgNS4yMjkuMTI4IDcuODIyLjM4MiAyLjc1NC44NDYgNi41NjQgMS4wNTMgMTAuMDguMTI4IDIuMTkzLS4yNDUgNC40NTEtMS43MTEgNi4wODctMi43NyAzLjA5LTguNTQ0IDUuMjI2LTEwLjU1OCA3LjkxMS0zLjczNSA0Ljk4MS0xMS4xNjUgMTIuODI4LTE5LjU5MSAxMy40NjYtNS44MTguNDQtMTYuNjMzLTEuOTM3LTE4LjExMi04LjQ5MS0uMTg4LS44MzMtLjI4Mi0yLjM4NS0uMzI4LTMuOTUzLS4wODgtMy4wMzIgMS40NDMtNS43NzYgMy41MS03Ljk5N2E5LjExIDkuMTEgMCAwIDAgLjI1Mi0uMjgyYzQuNTk3LTUuMzQ5IDguNjY0LTQuODc5IDEzLjY0My0xNS4wMzEuNzE4LTEuNDYzIDEuMDg2LTMuMDcgMS4xNzgtNC42OTcgMS40Ni0yNS44IDEuNTU1LTQ4LjI1NSAyLjQ0Ny02OC4zNDIgMS4zNDktMzAuMzY2IDIuMDcxLTU4LjY1NiAyLjU5LTEwMy42MTEtMi43Ni01Ljg5Ny04LjU3LTEyLjIyNi0xMi40NTYtMTguMDcyLTcuNjM2LTExLjQ5LTE1LjMwMy0yMy4wMjYtMTQuNTgzLTM1LjE2OCAxLjg5LTQxLjAxIDExLjA3LTc0LjE2NSAyMS4yNjYtODQuOTA4IDguMTk3LTguNjM2IDEzLjkzNi0xMi40MjYgMjUuODQ1LTE0Ljc3OCAxMS44NjYtMi4zNDMgMTIuMzMyLTQuNTUzIDEyLjkzNC03LjQwOGwuMDA2LS4wMzEuNzc0LTguNTk0Yy4wMTEtLjIzNy4wMzYtLjQ3Ni4wNjQtLjcxNGwuMTEtMS4yMThaXCIsc3Ryb2tlOlwidXJsKCM3YThjOGEwMTBkNTU5NzQ3ZGVhY2FlNGMxZGYxMzU4YTIyMDdmZjMxX19oKVwiLHN0cm9rZVdpZHRoOjEyLjEyNixzdHJva2VMaW5lY2FwOlwicm91bmRcIixzdHJva2VMaW5lam9pbjpcInJvdW5kXCIsbWFzazpcInVybCgjN2E4YzhhMDEwZDU1OTc0N2RlYWNhZTRjMWRmMTM1OGEyMjA3ZmYzMV9faSlcIn0pLGQuY3JlYXRlRWxlbWVudChcImdcIix7ZmlsdGVyOlwidXJsKCM3YThjOGEwMTBkNTU5NzQ3ZGVhY2FlNGMxZGYxMzU4YTIyMDdmZjMxX19qKVwifSxkLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNMTE0LjE0MSAxNzYuMjA5Yy4wMTEtLjg3Mi0uMjI0LTEuNjcyLTEuMzM0LTIuMjY0LS42MTItLjMyNi0xLjIyNi0uNjQ5LTEuODQtLjk3MnYtLjAwMWMtMy4xNjUtMS42NjUtNi4zNDQtMy4zMzctOS4yMjgtNS40MDctNi45Mi00Ljk2Ni0xMi40MTMtMTEuMzQ5LTE2Ljg3Mi0xOC42MjItLjEzNi0uMjItLjI4NS0uNDI5LS40ODgtLjcxNC0uMS0uMTQtLjIxNC0uMjk5LS4zNDQtLjQ4NS0zLjAxNyAzLjUxOC02LjUxMiA1Ljk4MS0xMS4yNyA1LjA2LTEuOTQtLjM3NS0zLjgzOC0xLjIxLTQuOTk2LTMuMTk4LjI2NS0uMTY3LjUzLS4zMjUuNzk0LS40ODEuNTcyLS4zMzggMS4xMy0uNjY5IDEuNjI4LTEuMDczIDEuNDU4LTEuMTg2IDIuMTc3LTIuNzY4IDEuODE2LTQuNjQ5LS42ODUtMy41OC0yLjM1My02LjY4NC00LjctOS41NjUtLjYxNSAxLjgxOS0uMTI1IDQuMzEgMS40NzcgNy42MjQtMy4zODYtLjQ5Mi01LjYwNi0yLjQ3MS03LjI4Ni01LjA1Ni0zLjQ2LTUuMzI5LTMuODEtMTEuMDYtMS44MTktMTcuMDFsLjIzMy0uNjk2LjAwMS0uMDA0Yy4zMTMtLjkzNC42MjctMS44Ny45MTMtMi44MTQuNzg1LTIuNTc2LS4wNS00Ljc4Ni0xLjM0NS03LjAyMy00LjA3OC03LjA1OS00Ljc3LTE0LjM0NC0uOTQxLTIxLjc1YTEwMi4yMjggMTAyLjIyOCAwIDAgMSA0Ljc0Ny04LjI2NWMzLjg0NS01Ljk4MSA1LjQzOC0xMi43NDcgNi43OTUtMTkuNTY0IDEuMzE0LTYuNjEzIDMuMTYtMTMuMDI0IDYuNTI0LTE4Ljg3NiA0LjQ5LTcuODA1IDkuOTg3LTE0LjcgMTguMjktMTguNzk5IDIuOTE2LTEuNDQgNS45ODQtMS45NTYgOS4yNDUtMS42MzEuOTA2LjA5IDIuMTAzLS4xNTMgMi43ODQtLjcxMSAxMC4yNTUtOC40OCAyMS45ODQtOS45NiAzNC40MzYtNi45OTIgOC41NTcgMi4wMzggMTYuMzE2IDYuMTQgMjMuODQzIDEwLjY2NiA2LjcyOSA0LjA0OCAxMy4zMTEgOC4zMjcgMTguNjY0IDE0LjE0IDkuMTc1IDkuOTY4IDE1LjAwMiAyMS40MzQgMTQuODU4IDM1LjM5NS0uMDEyIDEuMjUuMDYgMi41MDMuMTMzIDMuNzU2LjA0My43NjEuMDg3IDEuNTIzLjExMiAyLjI4NC4yNDUgNy43MTkgMS42NTYgMTUuMjUgMy43MDkgMjIuNjYgMS44NzQgNi43NjIgMS4yMDUgMTMuMjI3LTEuNzAzIDE5LjU1MmwtLjE4MS4zOTN2LjAwMWMtLjg2NSAxLjg3NS0xLjc0NSAzLjc4Mi0yLjIxIDUuNzY2LS4zNzEgMS41OTYtLjI4MiAzLjMyMi0uMTk1IDUuMDAxbC4wMjguNTU1Yy4wMzQuNzE1LjIzMyAxLjQyMy40NTggMi4yMjdoLjAwMWMuMTExLjM5OC4yMy44MjEuMzM4IDEuMjc5bC0xLjM3MS0uNjVjLS42NzctLjMyMS0xLjI5OS0uNjE2LTEuOTI5LS45MTItMS4yOTEgMy43NzkgMi42NyA3LjUyNyA4LjAzMSA3LjY4My0uMzY3IDIuOTMyLTIuNTIxIDMuNzg4LTQuNjI0IDQuNjI0LS40MTQuMTY0LS44MjcuMzI4LTEuMjIzLjUwNi0yLjcxMyAxLjIyMi01LjQyMy43ODUtOC4wNjItLjg3NC0uMTk1LjUxMS0uMzgyLjk4NC0uNTU5IDEuNDMyLS4zNTEuODg2LS42NjQgMS42NzctLjkyMyAyLjQ4NC0yLjI4NSA3LjEyNS04LjkzNyAxMi40MzQtMTUuODg0IDEyLjYzbC0uMzA0LjAxMS0uMDAzLjAwMWMtLjI4Ny4wMTItLjU3My4wMjQtLjg2LjAwNy0xLjk1NS0uMTA5LTIuMTQ1LS40MS0xLjM5NS0yLjIxMy44NDMtMi4wMzEuNTg3LTMuODg1LS44MjgtNS44MTgtLjE2Ny4xNTUtLjMyOS4yODktLjQ4MS40MTUtLjI5MS4yNDEtLjU0NC40NDktLjcxMy43MTQtNC44NzkgNy42MjEtMTAuNTU4IDExLjU3MS0xOC4xIDE1LjcyMmwtLjgyMy40NDhjLTIuNzA1IDEuNDY0LTMuMzQ0IDEuODEtMy4wMjEgNC44MTZsMS4zMTQgOS43NjMuMDE0LjA3Yy41OTcgMi44MzYgMS4wNjEgNS4wMzYgMTIuOTI2IDcuMzY5IDExLjk2MSAyLjM1MiAxOS4wOTMgNS43NjUgMjcuNjE0IDE0Ljc3OCA4LjUyMiA5LjAxNCAxOS45NDUgNDMuODk4IDIxLjgzNiA4NC45MDguNzIgMTIuMTUyLTYuNzcyIDIzLjY5Ni0xNC4yMzUgMzUuMTk1LTQuNzczIDcuMzU0LTkuNTMzIDE0LjY5LTEyLjEyNiAyMi4xNTMgMy4xNDIgNTMuMjI3IDEyLjE3OCA4NS42ODkgMTkuMzAyIDEyMy42OCAyLjU5IDEzLjgxNCAxMC4zNjEgNDQuMDM1IDEwLjM2MSA0NC4wMzUuODYzIDMuNyAxLjMzMSA0LjUxMiA0LjMxNyA3Ljc3IDUuNzA3IDYuMjI2IDEwLjYxOCA1Ljk5OCAxNi40MDUgMTQuNjc5IDEuNzI3IDIuNTkgMS40OCA1Ljg1NSAwIDguNjM0LTMuMDk1IDUuODE1LTExLjQgMTAuMzg3LTE4Ljk5NSA4LjYzNC04LjcwNi0yLjAwOS0xMS4yMjUtMi41OS0yMS41ODYtMTIuOTUxLTguOTc2LTcuNzQ5LTE1LjA3Ny0xMC41MS0xNS41NDItMTQuNjc4LS4yOTYtMi42NTQuMTk3LTcuMTI0LjczMS0xMC43NjYuNTcyLTMuODk5LjUzMS03Ljg2OC0uMzc4LTExLjcwMi0yLjQ0NS0xMC4zMTItNy41MTMtMzEuNTc0LTkuODUtNDAuNTYzLTkuMjc3LTM1LjY4LTE1LjY0MS02OC45NDEtMjguNDk0LTc4LjU3Mi00LjcyNC0zLjU0LTEwLjk0NC0zLjU3Ny0xMy44MTUuODYzLTYuNTM0IDEwLjEwOS0xMi4wODggMzguODU1LTE0LjY3OCA3MS42NjUtLjk0MiAxMS45MzUtNC4zNDMgNDEuNTI1LTUuNTg2IDUyLjIwMi0uMzAyIDIuNjAxLS4yMzEgNS4yMjkuMTI5IDcuODIyLjM4MiAyLjc1NC44NDYgNi41NjQgMS4wNTMgMTAuMDguMTI4IDIuMTkzLS4yNDUgNC40NTEtMS43MTEgNi4wODctMi43NyAzLjA5LTguNTQ0IDUuMjI2LTEwLjU1OCA3LjkxMS0zLjczNSA0Ljk4MS0xMS4xNjUgMTIuODI4LTE5LjU5MSAxMy40NjYtNS44MTguNDQtMTYuNjMzLTEuOTM3LTE4LjExMi04LjQ5MS0uMTg4LS44MzMtLjI4Mi0yLjM4NS0uMzI4LTMuOTUzLS4wODgtMy4wMzIgMS40NDMtNS43NzYgMy41MS03Ljk5N2E5LjExIDkuMTEgMCAwIDAgLjI1Mi0uMjgyYzQuNTk3LTUuMzQ5IDguNjY0LTQuODc5IDEzLjY0My0xNS4wMzEuNzE4LTEuNDYzIDEuMDg2LTMuMDcgMS4xNzgtNC42OTcgMS40Ni0yNS44IDEuNTU1LTQ4LjI1NSAyLjQ0Ny02OC4zNDIgMS4zNDktMzAuMzY2IDIuMDcxLTU4LjY1NiAyLjU5LTEwMy42MTEtMi43Ni01Ljg5Ny04LjU3LTEyLjIyNi0xMi40NTYtMTguMDcyLTcuNjM2LTExLjQ5LTE1LjMwMy0yMy4wMjYtMTQuNTgzLTM1LjE2OCAxLjg5LTQxLjAxIDExLjA3LTc0LjE2NSAyMS4yNjYtODQuOTA4IDguMTk3LTguNjM2IDEzLjkzNi0xMi40MjYgMjUuODQ1LTE0Ljc3OCAxMS44NjYtMi4zNDMgMTIuMzMyLTQuNTUzIDEyLjkzNC03LjQwOGwuMDA2LS4wMzEuNzc0LTguNTk0Yy4wMTEtLjIzNy4wMzYtLjQ3Ni4wNjQtLjcxNGwuMTEtMS4yMThaXCIsZmlsbDpcInVybCgjN2E4YzhhMDEwZDU1OTc0N2RlYWNhZTRjMWRmMTM1OGEyMjA3ZmYzMV9faylcIn0pKSxkLmNyZWF0ZUVsZW1lbnQoXCJtYXNrXCIse2lkOlwiN2E4YzhhMDEwZDU1OTc0N2RlYWNhZTRjMWRmMTM1OGEyMjA3ZmYzMV9fbFwiLGZpbGw6XCIjZmZmXCJ9LGQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIk0xMTQuMTM4IDE3Ni4yMDljLjAxMS0uODcyLS4yMjQtMS42NzItMS4zMzQtMi4yNjQtLjYxMi0uMzI2LTEuMjI2LS42NDktMS44NC0uOTcydi0uMDAxYy0zLjE2NS0xLjY2NS02LjM0NC0zLjMzNy05LjIyOC01LjQwNy02LjkyLTQuOTY2LTEyLjQxMy0xMS4zNDktMTYuODcyLTE4LjYyMi0uMTM2LS4yMi0uMjg1LS40MjktLjQ4OC0uNzE0LS4xLS4xNC0uMjE0LS4yOTktLjM0NC0uNDg1LTMuMDE3IDMuNTE4LTYuNTEyIDUuOTgxLTExLjI3IDUuMDYtMS45NC0uMzc1LTMuODM3LTEuMjEtNC45OTYtMy4xOTguMjY1LS4xNjcuNTMtLjMyNS43OTQtLjQ4MS41NzItLjMzOCAxLjEzLS42NjkgMS42MjgtMS4wNzMgMS40NTgtMS4xODYgMi4xNzctMi43NjggMS44MTYtNC42NDktLjY4NS0zLjU4LTIuMzUyLTYuNjg0LTQuNy05LjU2NS0uNjE1IDEuODE5LS4xMjUgNC4zMSAxLjQ3NyA3LjYyNC0zLjM4Ni0uNDkyLTUuNjA2LTIuNDcxLTcuMjg2LTUuMDU2LTMuNDYtNS4zMjktMy44MS0xMS4wNi0xLjgxOS0xNy4wMWwuMjMzLS42OTYuMDAxLS4wMDRjLjMxMy0uOTM0LjYyNy0xLjg3LjkxMy0yLjgxNC43ODUtMi41NzYtLjA1LTQuNzg2LTEuMzQ1LTcuMDIzLTQuMDc4LTcuMDU5LTQuNzctMTQuMzQ0LS45NDEtMjEuNzVhMTAyLjIyOCAxMDIuMjI4IDAgMCAxIDQuNzQ3LTguMjY1YzMuODQ1LTUuOTgxIDUuNDM4LTEyLjc0NyA2Ljc5NS0xOS41NjQgMS4zMTQtNi42MTMgMy4xNi0xMy4wMjQgNi41MjQtMTguODc2IDQuNDktNy44MDUgOS45ODctMTQuNyAxOC4yOS0xOC43OTkgMi45MTYtMS40NCA1Ljk4NC0xLjk1NiA5LjI0NS0xLjYzMS45MDYuMDkgMi4xMDQtLjE1MyAyLjc4NC0uNzExIDEwLjI1NS04LjQ4IDIxLjk4NC05Ljk2IDM0LjQzNi02Ljk5MiA4LjU1NyAyLjAzOCAxNi4zMTYgNi4xNCAyMy44NDMgMTAuNjY2IDYuNzI5IDQuMDQ4IDEzLjMxMSA4LjMyNyAxOC42NjQgMTQuMTQgOS4xNzUgOS45NjggMTUuMDAyIDIxLjQzNCAxNC44NTggMzUuMzk1LS4wMTIgMS4yNS4wNiAyLjUwMy4xMzMgMy43NTYuMDQzLjc2MS4wODcgMS41MjMuMTEyIDIuMjg0LjI0NSA3LjcxOSAxLjY1NiAxNS4yNSAzLjcwOSAyMi42NiAxLjg3NCA2Ljc2MiAxLjIwNSAxMy4yMjctMS43MDMgMTkuNTUybC0uMTgxLjM5M3YuMDAxYy0uODY1IDEuODc1LTEuNzQ1IDMuNzgyLTIuMjEgNS43NjYtLjM3MSAxLjU5Ni0uMjgxIDMuMzIyLS4xOTUgNS4wMDFsLjAyOC41NTVjLjAzNC43MTUuMjMzIDEuNDIzLjQ1OCAyLjIyN2guMDAxYy4xMTEuMzk4LjIzLjgyMS4zMzggMS4yNzlsLTEuMzcxLS42NWMtLjY3Ny0uMzIxLTEuMjk5LS42MTYtMS45MjktLjkxMi0xLjI5MSAzLjc3OSAyLjY3IDcuNTI3IDguMDMxIDcuNjgzLS4zNjcgMi45MzItMi41MjEgMy43ODgtNC42MjQgNC42MjQtLjQxNC4xNjQtLjgyNy4zMjgtMS4yMjIuNTA2LTIuNzE0IDEuMjIyLTUuNDI0Ljc4NS04LjA2My0uODc0LS4xOTUuNTExLS4zODIuOTg0LS41NTkgMS40MzItLjM1MS44ODYtLjY2NCAxLjY3Ny0uOTIzIDIuNDg0LTIuMjg1IDcuMTI1LTguOTM3IDEyLjQzNC0xNS44ODQgMTIuNjNsLS4zMDQuMDExLS4wMDMuMDAxYTguNDg4IDguNDg4IDAgMCAxLS44NTkuMDA3Yy0xLjk1Ni0uMTA5LTIuMTQ2LS40MS0xLjM5Ni0yLjIxMy44NDMtMi4wMzEuNTg3LTMuODg1LS44MjgtNS44MTgtLjE2Ny4xNTUtLjMyOS4yODktLjQ4MS40MTUtLjI5MS4yNDEtLjU0NC40NDktLjcxMy43MTQtNC44NzkgNy42MjEtMTAuNTU4IDExLjU3MS0xOC4xIDE1LjcyMi0uMjkzLjE2MS0uNTY4LjMxLS44MjMuNDQ4LTIuNzA1IDEuNDY0LTMuMzQ0IDEuODEtMy4wMjEgNC44MTZsMS4zMTQgOS43NjMuMDE0LjA3Yy41OTcgMi44MzYgMS4wNjEgNS4wMzYgMTIuOTI2IDcuMzY5IDExLjk2MiAyLjM1MiAxOS4wOTMgNS43NjUgMjcuNjE0IDE0Ljc3OCA4LjUyMiA5LjAxNCAxOS45NDUgNDMuODk4IDIxLjgzNiA4NC45MDguNzIgMTIuMTUyLTYuNzcyIDIzLjY5Ni0xNC4yMzUgMzUuMTk1LTQuNzcyIDcuMzU0LTkuNTMzIDE0LjY5LTEyLjEyNiAyMi4xNTMgMy4xNDMgNTMuMjI3IDEyLjE3OSA4NS42ODkgMTkuMzAyIDEyMy42OCAyLjU5IDEzLjgxNCAxMC4zNjEgNDQuMDM1IDEwLjM2MSA0NC4wMzUuODYzIDMuNyAxLjMzMSA0LjUxMiA0LjMxNyA3Ljc3IDUuNzA3IDYuMjI2IDEwLjYxOCA1Ljk5OCAxNi40MDUgMTQuNjc5IDEuNzI3IDIuNTkgMS40OCA1Ljg1NSAwIDguNjM0LTMuMDk1IDUuODE1LTExLjQgMTAuMzg3LTE4Ljk5NSA4LjYzNC04LjcwNi0yLjAwOS0xMS4yMjUtMi41OS0yMS41ODYtMTIuOTUxLTguOTc2LTcuNzQ5LTE1LjA3Ni0xMC41MS0xNS41NDItMTQuNjc4LS4yOTYtMi42NTQuMTk3LTcuMTI0LjczMS0xMC43NjYuNTcyLTMuODk5LjUzMS03Ljg2OC0uMzc4LTExLjcwMi0yLjQ0NS0xMC4zMTItNy41MTMtMzEuNTc0LTkuODUtNDAuNTYzLTkuMjc3LTM1LjY4LTE1LjY0MS02OC45NDEtMjguNDk0LTc4LjU3Mi00LjcyNC0zLjU0LTEwLjk0NC0zLjU3Ny0xMy44MTUuODYzLTYuNTM0IDEwLjEwOS0xMi4wODggMzguODU1LTE0LjY3OCA3MS42NjUtLjk0MiAxMS45MzUtNC4zNDMgNDEuNTI1LTUuNTg1IDUyLjIwMi0uMzAzIDIuNjAxLS4yMzEgNS4yMjkuMTI4IDcuODIyLjM4MiAyLjc1NC44NDYgNi41NjQgMS4wNTMgMTAuMDguMTI4IDIuMTkzLS4yNDUgNC40NTEtMS43MTEgNi4wODctMi43NyAzLjA5LTguNTQ0IDUuMjI2LTEwLjU1OCA3LjkxMS0zLjczNSA0Ljk4MS0xMS4xNjUgMTIuODI4LTE5LjU5MSAxMy40NjYtNS44MTguNDQtMTYuNjMzLTEuOTM3LTE4LjExMi04LjQ5MS0uMTg4LS44MzMtLjI4Mi0yLjM4NS0uMzI4LTMuOTUzLS4wODgtMy4wMzIgMS40NDMtNS43NzYgMy41MS03Ljk5N2E5LjExIDkuMTEgMCAwIDAgLjI1Mi0uMjgyYzQuNTk3LTUuMzQ5IDguNjY0LTQuODc5IDEzLjY0My0xNS4wMzEuNzE4LTEuNDYzIDEuMDg2LTMuMDcgMS4xNzgtNC42OTcgMS40Ni0yNS44IDEuNTU1LTQ4LjI1NSAyLjQ0Ny02OC4zNDIgMS4zNDktMzAuMzY2IDIuMDcxLTU4LjY1NiAyLjU5LTEwMy42MTEtMi43Ni01Ljg5Ny04LjU3LTEyLjIyNi0xMi40NTYtMTguMDcyLTcuNjM2LTExLjQ5LTE1LjMwMy0yMy4wMjYtMTQuNTgzLTM1LjE2OCAxLjg5LTQxLjAxIDExLjA3LTc0LjE2NSAyMS4yNjYtODQuOTA4IDguMTk3LTguNjM2IDEzLjkzNi0xMi40MjYgMjUuODQ1LTE0Ljc3OCAxMS44NjYtMi4zNDMgMTIuMzMyLTQuNTUzIDEyLjkzNC03LjQwOGwuMDA2LS4wMzEuNzc0LTguNTk0Yy4wMTEtLjIzNy4wMzYtLjQ3Ni4wNjQtLjcxNGwuMTEtMS4yMThaXCJ9KSksZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwiTTExNC4xMzggMTc2LjIwOWMuMDExLS44NzItLjIyNC0xLjY3Mi0xLjMzNC0yLjI2NC0uNjEyLS4zMjYtMS4yMjYtLjY0OS0xLjg0LS45NzJ2LS4wMDFjLTMuMTY1LTEuNjY1LTYuMzQ0LTMuMzM3LTkuMjI4LTUuNDA3LTYuOTItNC45NjYtMTIuNDEzLTExLjM0OS0xNi44NzItMTguNjIyLS4xMzYtLjIyLS4yODUtLjQyOS0uNDg4LS43MTRoMGMtLjEtLjE0LS4yMTQtLjI5OS0uMzQ0LS40ODUtMy4wMTcgMy41MTgtNi41MTIgNS45ODEtMTEuMjcgNS4wNi0xLjk0LS4zNzUtMy44MzctMS4yMS00Ljk5Ni0zLjE5OC4yNjUtLjE2Ny41My0uMzI1Ljc5NC0uNDgxaDBjLjU3Mi0uMzM4IDEuMTMtLjY2OSAxLjYyOC0xLjA3MyAxLjQ1OC0xLjE4NiAyLjE3Ny0yLjc2OCAxLjgxNi00LjY0OS0uNjg1LTMuNTgtMi4zNTItNi42ODQtNC43LTkuNTY1LS42MTUgMS44MTktLjEyNSA0LjMxIDEuNDc3IDcuNjI0LTMuMzg2LS40OTItNS42MDYtMi40NzEtNy4yODYtNS4wNTYtMy40Ni01LjMyOS0zLjgxLTExLjA2LTEuODE5LTE3LjAxbC4yMzMtLjY5Ni4wMDEtLjAwNGMuMzEzLS45MzQuNjI3LTEuODcuOTEzLTIuODE0Ljc4NS0yLjU3Ni0uMDUtNC43ODYtMS4zNDUtNy4wMjMtNC4wNzgtNy4wNTktNC43Ny0xNC4zNDQtLjk0MS0yMS43NWExMDIuMjI4IDEwMi4yMjggMCAwIDEgNC43NDctOC4yNjVjMy44NDUtNS45ODEgNS40MzgtMTIuNzQ3IDYuNzk1LTE5LjU2NCAxLjMxNC02LjYxMyAzLjE2LTEzLjAyNCA2LjUyNC0xOC44NzYgNC40OS03LjgwNSA5Ljk4Ny0xNC43IDE4LjI5LTE4Ljc5OSAyLjkxNi0xLjQ0IDUuOTg0LTEuOTU2IDkuMjQ1LTEuNjMxLjkwNi4wOSAyLjEwNC0uMTUzIDIuNzg0LS43MTEgMTAuMjU1LTguNDggMjEuOTg0LTkuOTYgMzQuNDM2LTYuOTkyIDguNTU3IDIuMDM4IDE2LjMxNiA2LjE0IDIzLjg0MyAxMC42NjYgNi43MjkgNC4wNDggMTMuMzExIDguMzI3IDE4LjY2NCAxNC4xNCA5LjE3NSA5Ljk2OCAxNS4wMDIgMjEuNDM0IDE0Ljg1OCAzNS4zOTUtLjAxMiAxLjI1LjA2IDIuNTAzLjEzMyAzLjc1Ni4wNDMuNzYxLjA4NyAxLjUyMy4xMTIgMi4yODQuMjQ1IDcuNzE5IDEuNjU2IDE1LjI1IDMuNzA5IDIyLjY2IDEuODc0IDYuNzYyIDEuMjA1IDEzLjIyNy0xLjcwMyAxOS41NTJsLS4xODEuMzkzdi4wMDFjLS44NjUgMS44NzUtMS43NDUgMy43ODItMi4yMSA1Ljc2Ni0uMzcxIDEuNTk2LS4yODEgMy4zMjItLjE5NSA1LjAwMWwuMDI4LjU1NWMuMDM0LjcxNS4yMzMgMS40MjMuNDU4IDIuMjI3aC4wMDFjLjExMS4zOTguMjMuODIxLjMzOCAxLjI3OWwtMS4zNzEtLjY1Yy0uNjc3LS4zMjEtMS4yOTktLjYxNi0xLjkyOS0uOTEyLTEuMjkxIDMuNzc5IDIuNjcgNy41MjcgOC4wMzEgNy42ODMtLjM2NyAyLjkzMi0yLjUyMSAzLjc4OC00LjYyNCA0LjYyNC0uNDE0LjE2NC0uODI3LjMyOC0xLjIyMi41MDYtMi43MTQgMS4yMjItNS40MjQuNzg1LTguMDYzLS44NzQtLjE5NS41MTEtLjM4Mi45ODQtLjU1OSAxLjQzMmgwYy0uMzUxLjg4Ni0uNjY0IDEuNjc3LS45MjMgMi40ODQtMi4yODUgNy4xMjUtOC45MzcgMTIuNDM0LTE1Ljg4NCAxMi42M2wtLjMwNC4wMTEtLjAwMy4wMDFhOC40ODggOC40ODggMCAwIDEtLjg1OS4wMDdjLTEuOTU2LS4xMDktMi4xNDYtLjQxLTEuMzk2LTIuMjEzLjg0My0yLjAzMS41ODctMy44ODUtLjgyOC01LjgxOC0uMTY3LjE1NS0uMzI5LjI4OS0uNDgxLjQxNS0uMjkxLjI0MS0uNTQ0LjQ0OS0uNzEzLjcxNC00Ljg3OSA3LjYyMS0xMC41NTggMTEuNTcxLTE4LjEgMTUuNzIyLS4yOTMuMTYxLS41NjguMzEtLjgyMy40NDgtMi43MDUgMS40NjQtMy4zNDQgMS44MS0zLjAyMSA0LjgxNmwxLjMxNCA5Ljc2My4wMTQuMDdjLjU5NyAyLjgzNiAxLjA2MSA1LjAzNiAxMi45MjYgNy4zNjkgMTEuOTYyIDIuMzUyIDE5LjA5MyA1Ljc2NSAyNy42MTQgMTQuNzc4IDguNTIyIDkuMDE0IDE5Ljk0NSA0My44OTggMjEuODM2IDg0LjkwOC43MiAxMi4xNTItNi43NzIgMjMuNjk2LTE0LjIzNSAzNS4xOTUtNC43NzIgNy4zNTQtOS41MzMgMTQuNjktMTIuMTI2IDIyLjE1MyAzLjE0MyA1My4yMjcgMTIuMTc5IDg1LjY4OSAxOS4zMDIgMTIzLjY4IDIuNTkgMTMuODE0IDEwLjM2MSA0NC4wMzUgMTAuMzYxIDQ0LjAzNS44NjMgMy43IDEuMzMxIDQuNTEyIDQuMzE3IDcuNzcgNS43MDcgNi4yMjYgMTAuNjE4IDUuOTk4IDE2LjQwNSAxNC42NzkgMS43MjcgMi41OSAxLjQ4IDUuODU1IDAgOC42MzQtMy4wOTUgNS44MTUtMTEuNCAxMC4zODctMTguOTk1IDguNjM0LTguNzA2LTIuMDA5LTExLjIyNS0yLjU5LTIxLjU4Ni0xMi45NTEtOC45NzYtNy43NDktMTUuMDc2LTEwLjUxLTE1LjU0Mi0xNC42NzgtLjI5Ni0yLjY1NC4xOTctNy4xMjQuNzMxLTEwLjc2Ni41NzItMy44OTkuNTMxLTcuODY4LS4zNzgtMTEuNzAyLTIuNDQ1LTEwLjMxMi03LjUxMy0zMS41NzQtOS44NS00MC41NjMtOS4yNzctMzUuNjgtMTUuNjQxLTY4Ljk0MS0yOC40OTQtNzguNTcyLTQuNzI0LTMuNTQtMTAuOTQ0LTMuNTc3LTEzLjgxNS44NjMtNi41MzQgMTAuMTA5LTEyLjA4OCAzOC44NTUtMTQuNjc4IDcxLjY2NS0uOTQyIDExLjkzNS00LjM0MyA0MS41MjUtNS41ODUgNTIuMjAyLS4zMDMgMi42MDEtLjIzMSA1LjIyOS4xMjggNy44MjIuMzgyIDIuNzU0Ljg0NiA2LjU2NCAxLjA1MyAxMC4wOC4xMjggMi4xOTMtLjI0NSA0LjQ1MS0xLjcxMSA2LjA4Ny0yLjc3IDMuMDktOC41NDQgNS4yMjYtMTAuNTU4IDcuOTExLTMuNzM1IDQuOTgxLTExLjE2NSAxMi44MjgtMTkuNTkxIDEzLjQ2Ni01LjgxOC40NC0xNi42MzMtMS45MzctMTguMTEyLTguNDkxLS4xODgtLjgzMy0uMjgyLTIuMzg1LS4zMjgtMy45NTMtLjA4OC0zLjAzMiAxLjQ0My01Ljc3NiAzLjUxLTcuOTk3YTkuMTEgOS4xMSAwIDAgMCAuMjUyLS4yODJjNC41OTctNS4zNDkgOC42NjQtNC44NzkgMTMuNjQzLTE1LjAzMS43MTgtMS40NjMgMS4wODYtMy4wNyAxLjE3OC00LjY5NyAxLjQ2LTI1LjggMS41NTUtNDguMjU1IDIuNDQ3LTY4LjM0MiAxLjM0OS0zMC4zNjYgMi4wNzEtNTguNjU2IDIuNTktMTAzLjYxMS0yLjc2LTUuODk3LTguNTctMTIuMjI2LTEyLjQ1Ni0xOC4wNzItNy42MzYtMTEuNDktMTUuMzAzLTIzLjAyNi0xNC41ODMtMzUuMTY4IDEuODktNDEuMDEgMTEuMDctNzQuMTY1IDIxLjI2Ni04NC45MDggOC4xOTctOC42MzYgMTMuOTM2LTEyLjQyNiAyNS44NDUtMTQuNzc4IDExLjg2Ni0yLjM0MyAxMi4zMzItNC41NTMgMTIuOTM0LTcuNDA4bC4wMDYtLjAzMS43NzQtOC41OTRjLjAxMS0uMjM3LjAzNi0uNDc2LjA2NC0uNzE0bC4xMS0xLjIxOFpcIixzdHJva2U6XCIjZmZmXCIsc3Ryb2tlT3BhY2l0eTouMDYsc3Ryb2tlV2lkdGg6Mi40MTgsc3Ryb2tlTGluZWNhcDpcInJvdW5kXCIsc3Ryb2tlTGluZWpvaW46XCJyb3VuZFwiLG1hc2s6XCJ1cmwoIzdhOGM4YTAxMGQ1NTk3NDdkZWFjYWU0YzFkZjEzNThhMjIwN2ZmMzFfX2wpXCJ9KSkpLHZNfHwodk09ZC5jcmVhdGVFbGVtZW50KFwiZGVmc1wiLG51bGwsZC5jcmVhdGVFbGVtZW50KFwibGluZWFyR3JhZGllbnRcIix7aWQ6XCI3YThjOGEwMTBkNTU5NzQ3ZGVhY2FlNGMxZGYxMzU4YTIyMDdmZjMxX19hXCIseDE6MTI5LjcxNCx5MTowLHgyOjEyOS43MTQseTI6NTY5Ljg2NSxncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIn0sZC5jcmVhdGVFbGVtZW50KFwic3RvcFwiLHtzdG9wT3BhY2l0eTouNzR9KSxkLmNyZWF0ZUVsZW1lbnQoXCJzdG9wXCIse29mZnNldDouNzI0LHN0b3BPcGFjaXR5Oi42fSksZC5jcmVhdGVFbGVtZW50KFwic3RvcFwiLHtvZmZzZXQ6LjkxMSxzdG9wT3BhY2l0eTouMTd9KSxkLmNyZWF0ZUVsZW1lbnQoXCJzdG9wXCIse29mZnNldDoxLHN0b3BPcGFjaXR5OjB9KSksZC5jcmVhdGVFbGVtZW50KFwibGluZWFyR3JhZGllbnRcIix7aWQ6XCI3YThjOGEwMTBkNTU5NzQ3ZGVhY2FlNGMxZGYxMzU4YTIyMDdmZjMxX19nXCIseDE6MTQ0LjA4Myx5MToxMC44NjkseDI6MTQ0LjA4Myx5Mjo1NTkuNTU1LGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwifSxkLmNyZWF0ZUVsZW1lbnQoXCJzdG9wXCIse3N0b3BDb2xvcjpcIiNmZmZcIn0pLGQuY3JlYXRlRWxlbWVudChcInN0b3BcIix7b2Zmc2V0OjEsc3RvcENvbG9yOlwiI2ZmZlwiLHN0b3BPcGFjaXR5OjB9KSksZC5jcmVhdGVFbGVtZW50KFwibGluZWFyR3JhZGllbnRcIix7aWQ6XCI3YThjOGEwMTBkNTU5NzQ3ZGVhY2FlNGMxZGYxMzU4YTIyMDdmZjMxX19oXCIseDE6MTM0LjY4NCx5MToxMC44NjkseDI6MTM0LjY4NCx5Mjo1NzUuNzY4LGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwifSxkLmNyZWF0ZUVsZW1lbnQoXCJzdG9wXCIse3N0b3BDb2xvcjpcIiNmZmZcIixzdG9wT3BhY2l0eTouNX0pLGQuY3JlYXRlRWxlbWVudChcInN0b3BcIix7b2Zmc2V0OjEsc3RvcENvbG9yOlwiI2ZmZlwiLHN0b3BPcGFjaXR5Oi40fSkpLGQuY3JlYXRlRWxlbWVudChcImxpbmVhckdyYWRpZW50XCIse2lkOlwiN2E4YzhhMDEwZDU1OTc0N2RlYWNhZTRjMWRmMTM1OGEyMjA3ZmYzMV9fa1wiLHgxOjI0Mi41NSx5MTozMzEuMTgxLHgyOjE0LjkxMix5MjoyODQuNTcyLGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwifSxkLmNyZWF0ZUVsZW1lbnQoXCJzdG9wXCIsbnVsbCksZC5jcmVhdGVFbGVtZW50KFwic3RvcFwiLHtvZmZzZXQ6MSxzdG9wT3BhY2l0eTouODJ9KSksZC5jcmVhdGVFbGVtZW50KFwiZmlsdGVyXCIse2lkOlwiN2E4YzhhMDEwZDU1OTc0N2RlYWNhZTRjMWRmMTM1OGEyMjA3ZmYzMV9fZVwiLHg6MTU5LjE5NCx5OjUxMC4wNjgsd2lkdGg6OTguOTUzLGhlaWdodDo3MS42MzIsZmlsdGVyVW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6XCJzUkdCXCJ9LGQuY3JlYXRlRWxlbWVudChcImZlRmxvb2RcIix7Zmxvb2RPcGFjaXR5OjAscmVzdWx0OlwiQmFja2dyb3VuZEltYWdlRml4XCJ9KSxkLmNyZWF0ZUVsZW1lbnQoXCJmZUJsZW5kXCIse2luOlwiU291cmNlR3JhcGhpY1wiLGluMjpcIkJhY2tncm91bmRJbWFnZUZpeFwiLHJlc3VsdDpcInNoYXBlXCJ9KSxkLmNyZWF0ZUVsZW1lbnQoXCJmZUdhdXNzaWFuQmx1clwiLHtzdGREZXZpYXRpb246NS4xODEscmVzdWx0OlwiZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl80MjU5XzEzMTcyOVwifSkpLGQuY3JlYXRlRWxlbWVudChcImZpbHRlclwiLHtpZDpcIjdhOGM4YTAxMGQ1NTk3NDdkZWFjYWU0YzFkZjEzNThhMjIwN2ZmMzFfX2ZcIix4OjM4LjM5Nyx5OjUwOS4wOTcsd2lkdGg6ODkuODEzLGhlaWdodDo3MC4yMTMsZmlsdGVyVW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6XCJzUkdCXCJ9LGQuY3JlYXRlRWxlbWVudChcImZlRmxvb2RcIix7Zmxvb2RPcGFjaXR5OjAscmVzdWx0OlwiQmFja2dyb3VuZEltYWdlRml4XCJ9KSxkLmNyZWF0ZUVsZW1lbnQoXCJmZUJsZW5kXCIse2luOlwiU291cmNlR3JhcGhpY1wiLGluMjpcIkJhY2tncm91bmRJbWFnZUZpeFwiLHJlc3VsdDpcInNoYXBlXCJ9KSxkLmNyZWF0ZUVsZW1lbnQoXCJmZUdhdXNzaWFuQmx1clwiLHtzdGREZXZpYXRpb246NS4xODEscmVzdWx0OlwiZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl80MjU5XzEzMTcyOVwifSkpLGQuY3JlYXRlRWxlbWVudChcImZpbHRlclwiLHtpZDpcIjdhOGM4YTAxMGQ1NTk3NDdkZWFjYWU0YzFkZjEzNThhMjIwN2ZmMzFfX2pcIix4OjQ5LjQ1Nyx5OjcuMjMxLHdpZHRoOjE4OS4yNTcsaGVpZ2h0OjU1My41MzYsZmlsdGVyVW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6XCJzUkdCXCJ9LGQuY3JlYXRlRWxlbWVudChcImZlRmxvb2RcIix7Zmxvb2RPcGFjaXR5OjAscmVzdWx0OlwiQmFja2dyb3VuZEltYWdlRml4XCJ9KSxkLmNyZWF0ZUVsZW1lbnQoXCJmZUJsZW5kXCIse2luOlwiU291cmNlR3JhcGhpY1wiLGluMjpcIkJhY2tncm91bmRJbWFnZUZpeFwiLHJlc3VsdDpcInNoYXBlXCJ9KSxkLmNyZWF0ZUVsZW1lbnQoXCJmZUNvbG9yTWF0cml4XCIse2luOlwiU291cmNlQWxwaGFcIix2YWx1ZXM6XCIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMFwiLHJlc3VsdDpcImhhcmRBbHBoYVwifSksZC5jcmVhdGVFbGVtZW50KFwiZmVPZmZzZXRcIix7ZHg6My42MzgsZHk6MS4yMTN9KSxkLmNyZWF0ZUVsZW1lbnQoXCJmZUdhdXNzaWFuQmx1clwiLHtzdGREZXZpYXRpb246OC40ODh9KSxkLmNyZWF0ZUVsZW1lbnQoXCJmZUNvbXBvc2l0ZVwiLHtpbjI6XCJoYXJkQWxwaGFcIixvcGVyYXRvcjpcImFyaXRobWV0aWNcIixrMjotMSxrMzoxfSksZC5jcmVhdGVFbGVtZW50KFwiZmVDb2xvck1hdHJpeFwiLHt2YWx1ZXM6XCIwIDAgMCAwIDEgMCAwIDAgMCAxIDAgMCAwIDAgMSAwIDAgMCAwLjQgMFwifSksZC5jcmVhdGVFbGVtZW50KFwiZmVCbGVuZFwiLHtpbjI6XCJzaGFwZVwiLHJlc3VsdDpcImVmZmVjdDFfaW5uZXJTaGFkb3dfNDI1OV8xMzE3MjlcIn0pLGQuY3JlYXRlRWxlbWVudChcImZlQ29sb3JNYXRyaXhcIix7aW46XCJTb3VyY2VBbHBoYVwiLHZhbHVlczpcIjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwXCIscmVzdWx0OlwiaGFyZEFscGhhXCJ9KSxkLmNyZWF0ZUVsZW1lbnQoXCJmZU9mZnNldFwiLHtkeDotMy42MzgsZHk6LTMuNjM4fSksZC5jcmVhdGVFbGVtZW50KFwiZmVHYXVzc2lhbkJsdXJcIix7c3RkRGV2aWF0aW9uOjguNDg4fSksZC5jcmVhdGVFbGVtZW50KFwiZmVDb21wb3NpdGVcIix7aW4yOlwiaGFyZEFscGhhXCIsb3BlcmF0b3I6XCJhcml0aG1ldGljXCIsazI6LTEsazM6MX0pLGQuY3JlYXRlRWxlbWVudChcImZlQ29sb3JNYXRyaXhcIix7dmFsdWVzOlwiMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMSAwXCJ9KSxkLmNyZWF0ZUVsZW1lbnQoXCJmZUJsZW5kXCIse2luMjpcImVmZmVjdDFfaW5uZXJTaGFkb3dfNDI1OV8xMzE3MjlcIixyZXN1bHQ6XCJlZmZlY3QyX2lubmVyU2hhZG93XzQyNTlfMTMxNzI5XCJ9KSksZC5jcmVhdGVFbGVtZW50KFwicmFkaWFsR3JhZGllbnRcIix7aWQ6XCI3YThjOGEwMTBkNTU5NzQ3ZGVhY2FlNGMxZGYxMzU4YTIyMDdmZjMxX19jXCIsY3g6MCxjeTowLHI6MSxncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIixncmFkaWVudFRyYW5zZm9ybTpcIm1hdHJpeCgwIDM5LjcxNzggLTgyLjE3MTQgMCAxNDQuOTM1IDUzNy4wNTQpXCJ9LGQuY3JlYXRlRWxlbWVudChcInN0b3BcIix7b2Zmc2V0OjAsc3RvcE9wYWNpdHk6LjE2fSksZC5jcmVhdGVFbGVtZW50KFwic3RvcFwiLHtvZmZzZXQ6MSxzdG9wT3BhY2l0eTouMDF9KSksZC5jcmVhdGVFbGVtZW50KFwicmFkaWFsR3JhZGllbnRcIix7aWQ6XCI3YThjOGEwMTBkNTU5NzQ3ZGVhY2FlNGMxZGYxMzU4YTIyMDdmZjMxX19kXCIsY3g6MCxjeTowLHI6MSxncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIixncmFkaWVudFRyYW5zZm9ybTpcInJvdGF0ZSgxNDAuODA1IC0xMC45NzUgMjc1LjEwNykgc2NhbGUoODEuNDg5OCA1Mi40MDc2KVwifSxkLmNyZWF0ZUVsZW1lbnQoXCJzdG9wXCIse29mZnNldDowLHN0b3BPcGFjaXR5Oi4yfSksZC5jcmVhdGVFbGVtZW50KFwic3RvcFwiLHtvZmZzZXQ6MSxzdG9wT3BhY2l0eTouMDF9KSkpKSk7dmFyIEVNLF9NLElNLFNNLGJNLFRNO2Z1bmN0aW9uIENNKCl7cmV0dXJuIENNPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sQ00uYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IEFNPWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLENNKHtoZWlnaHQ6XCI0MCVcIix2aWV3Qm94OlwiMCAwIDM2IDM2XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLEVNfHwoRU09ZC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLHtoZWlnaHQ6XCIxMDAlXCIscng6MTgsZmlsbDpcIiMwMDBcIixmaWxsT3BhY2l0eTouNH0pKSxfTXx8KF9NPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIk0yMy4zODYgMTYuMTZ2NS4xNTNhMi4yMiAyLjIyIDAgMCAxLTIuMjIgMi4yMmgtMS41NzVjLS42MTQgMC0xLjAyLjE5OC0xLjM4Mi40NzdsLTEuNTEyIDEuMjcxYS4yMjIuMjIyIDAgMCAxLS4zNjYtLjE3MnYtMS4wNjZjLS4wMDItLjIxMi0uMjE1LS41MS0uNTM2LS41MUgxNC4yMmEyLjIyIDIuMjIgMCAwIDEtMi4yMi0yLjIydi02Ljk0N2EyLjIyIDIuMjIgMCAwIDEgMi4yMi0yLjIyaDUuMzdcIixzdHJva2U6XCIjZmZmXCIsc3Ryb2tlV2lkdGg6MS4xMjksc3Ryb2tlTGluZWNhcDpcInJvdW5kXCIsc3Ryb2tlTGluZWpvaW46XCJyb3VuZFwifSkpLElNfHwoSU09ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwiTTE1LjY1IDIwLjAyOHMuNjUuNzMzIDIuMDQzLjczM2MxLjM5MiAwIDIuMDQ0LS43MzQgMi4wNDQtLjczNFwiLHN0cm9rZTpcIiNmZmZcIixzdHJva2VXaWR0aDoxLjEyOSxzdHJva2VMaW5lY2FwOlwicm91bmRcIixzdHJva2VMaW5lam9pbjpcInJvdW5kXCJ9KSksU018fChTTT1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMTYuMTU1IDE2LjM4NmMtLjI0NS0uMzE5LS44NzgtLjQ4My0xLjI3MS0uNTI0LS4yMDktLjAyMS0uMzM4LS4yNDItLjI5Ni0uNDQ3YS4zODQuMzg0IDAgMCAxIC40NDgtLjI5NmMxLjQ1Ny4yNiAxLjk5NCAxLjQxMiAyLjAxOCAxLjQ2YS4zOC4zOCAwIDAgMS0uNDYzLjUzYy0uMjgtLjA5Ny0xLjEwNS0uMjcyLTEuNTQ2LjA2OGEuMzguMzggMCAwIDEtLjQ2NC0uNmMuMzQtLjI2NCAxLjA1Ny0uMjk5IDEuNTc0LS4xOU0yMC43MSAxNi4xODRjMCAuNTY4LS4zOTIgMS4wMjgtLjg3NiAxLjAyOHMtLjg3Ni0uNDYtLjg3Ni0xLjAyOGMwLS41NjcuMzkyLTEuMDI4Ljg3Ni0xLjAyOHMuODc2LjQ2Ljg3NiAxLjAyOFwiLGZpbGw6XCIjZmZmXCJ9KSksYk18fChiTT1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNMjEuNDg4IDEyLjY4OEgyNC4yTTIyLjg0MyAxMS4zMzN2Mi43MTFcIixzdHJva2U6XCIjZmZmXCIsc3Ryb2tlV2lkdGg6MS4xMjksc3Ryb2tlTGluZWNhcDpcInJvdW5kXCIsc3Ryb2tlTGluZWpvaW46XCJyb3VuZFwifSkpLFRNfHwoVE09ZC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLHt4Oi41LHk6LjUsd2lkdGg6MzUsaGVpZ2h0OjM1LHJ4OjE3LjUsc3Ryb2tlOlwiI2ZmZlwiLHN0cm9rZU9wYWNpdHk6LjV9KSkpLFJNPXtzaWxob3VldHRlQ29udGFpbmVyOlwiTTFqcVJcIixjcmVhdGVCaXRtb2ppQ29udGFpbmVyOlwicXVTa1NcIixjcmVhdGVCaXRtb2ppQnV0dG9uOlwiakNjbE9cIn07dmFyIGtNLE9NLE5NO2Z1bmN0aW9uIHdNKCl7cmV0dXJuKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6Uk0uc2lsaG91ZXR0ZUNvbnRhaW5lcn0sdm9pZCAwLGtNfHwoa009KDAsby5aKSh5TSx7fSkpLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOlJNLmNyZWF0ZUJpdG1vamlDb250YWluZXJ9LHZvaWQgMCwoMCxvLlopKFwiYVwiLHtjbGFzc05hbWU6Uk0uY3JlYXRlQml0bW9qaUJ1dHRvbixocmVmOlwiaHR0cHM6Ly93d3cuYml0bW9qaS5jb20vaG9tZS9cIix0YXJnZXQ6XCJfYmxhbmtcIixyZWw6XCJub29wZW5lclwiLG9uQ2xpY2s6KCk9PmIoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwiYml0bW9qaUxhbmRpbmcuY3JlYXRlQml0bW9qaS5jbGlja1wifSl9LHZvaWQgMCxPTXx8KE9NPSgwLG8uWikoQU0se30pKSxOTXx8KE5NPSgwLG8uWikodi5aLHtpZDpcIkZRL08rR1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiQ3JlYXRlIEJpdG1vamlcIn1dfSkpKSkpfWNvbnN0IERNPXtjb250YWluZXI6XCJHM1o0VVwiLGZpcnN0VGltZUV4cGVyaWVuY2VDb250YWluZXI6XCJRMW5odVwiLGxhbmRpbmdDb250YWluZXI6XCJYZzdVMFwiLGxlZnRDb21wb25lbnRDb250YWluZXI6XCJJaU9ielwiLHRpbnk6XCJWdnViSlwiLGNvbXBhY3Q6XCJXczREblwiLGJpdG1vamlBdmF0YXJDb250YWluZXI6XCJFSXlQWlwiLHRocmVlREJpdG1vamk6XCJvSmNxVVwiLGJpdG1vamlCYWNrZ3JvdW5kOlwiX0hwSjVcIix1bHRyYXdpZGU6XCJHZU9HSVwiLGJpdG1vamlJbWdCYWNrTGF5ZXI6XCJ3eFZaVFwiLGJpdG1vamlJbWdGcm9udExheWVyOlwiSjhINnhcIixyZWR1Y2VPcGFjaXR5OlwiTWNDYTJcIixjb250ZW50OlwiTDNLeEFcIix3aXRoQXNwZWNSYXRpbzpcInRONngxXCIsY2hhbmdlT3V0Zml0Q29udGFpbmVyOlwib3pidXVcIixjaGFuZ2VPdXRmaXRCdXR0b246XCJxMXMyUVwifTt2YXIgUE0sTU07Y29uc3QgTE09W3t2YWx1ZTpcInVsdHJhd2lkZVwiLG1heFBpeGVsczpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixtaW5QaXhlbHM6MmUzfSx7dmFsdWU6XCJmdWxsc2l6ZVwiLG1heFBpeGVsczoyZTMsbWluUGl4ZWxzOjExMDB9LHt2YWx1ZTpcImNvbXBhY3RcIixtYXhQaXhlbHM6MTEwMCxtaW5QaXhlbHM6ODg0fSx7dmFsdWU6XCJ0aW55XCIsbWF4UGl4ZWxzOjg4NCxtaW5QaXhlbHM6MH1dO2xldCBVTT1mdW5jdGlvbihlKXtyZXR1cm4gZVtlLkhJREU9MF09XCJISURFXCIsZVtlLlJFRFVDRV9PUEFDSVRZPTFdPVwiUkVEVUNFX09QQUNJVFlcIixlW2UuU0hPVz0yXT1cIlNIT1dcIixlfSh7fSk7Y29uc3QgeE09XCI2OTA0NDQ3NjJcIjtmdW5jdGlvbiBGTShlKXtsZXR7Y2hpbGRyZW46dCxicmVha3BvaW50U3R5bGVzOm49e319PWU7Y29uc3Qgcj1YYygpLGk9KGE9Q2wociksYT8uYml0bW9qaV9hdmF0YXJfaWQmJmEuYml0bW9qaV9iYWNrZ3JvdW5kX2lkJiZcIlwiIT09YS5iaXRtb2ppX2JhY2tncm91bmRfaWQ/YS5iaXRtb2ppX2JhY2tncm91bmRfaWQ6eE0pO3ZhciBhO2NvbnN0IHM9KDAsay5vKShTbC5SZik7cmV0dXJuKDAsby5aKShCTSx7YmFja2dyb3VuZElkOnN8fGksYnJlYWtwb2ludFN0eWxlczpufSx2b2lkIDAsdCl9ZnVuY3Rpb24gQk0oZSl7bGV0e2NoaWxkcmVuOnQsYmFja2dyb3VuZElkOm4sYnJlYWtwb2ludFN0eWxlczpyPXt9fT1lO2NvbnN0IGk9ZnVuY3Rpb24oZSl7Y29uc3QgdD0oMCxoZS5OeCkoZSxoZS54WS5IQUxGKTtyZXR1cm57c3JjOnQsc3JjU2V0OmAke3R9IDM0OHcsICR7KDAsaGUuTngpKGUpfSA2NDZ3YH19KG4pO3JldHVybigwLHEuanN4cykocS5GcmFnbWVudCx7Y2hpbGRyZW46WygwLHEuanN4KShcImltZ1wiLHtjbGFzc05hbWU6KDAsUS5aKShETS5iaXRtb2ppQmFja2dyb3VuZCxyKSwuLi5pfSksdF19KX1mdW5jdGlvbiBWTShlKXtsZXR7Y2hpbGRyZW46dCxiaXRtb2ppT3ZlcmxhcFN0YXRlOm49VU0uSElERSxpc0ZpcnN0VGltZUV4cGVyaWVuY2U6cj0hMX09ZTtjb25zdCBpPVhjKCksYT1DbChpKSxbcyxjXT1jTShMTSksbD0oMCxPLnJwKShBLm8zKSx1PXtbRE0udGlueV06XCJ0aW55XCI9PT1jLFtETS5jb21wYWN0XTpcInRpbnlcIiE9PWMsW0RNLnVsdHJhd2lkZV06XCJ1bHRyYXdpZGVcIj09PWN9LGQ9e1tETS50aHJlZURCaXRtb2ppXTphPy5iaXRtb2ppX2F2YXRhcl9pZH07bGV0IGY9bnVsbDtpZihhJiYhYS5iaXRtb2ppX2F2YXRhcl9pZClmPVBNfHwoUE09KDAsby5aKSh3TSx7fSkpO2Vsc2UgaWYoYT8uYml0bW9qaV9hdmF0YXJfaWQpe2NvbnN0IGU9KDAsaGUudmUpKGEuYml0bW9qaV9hdmF0YXJfaWQsYS5iaXRtb2ppX3NjZW5lX2lkJiZcIlwiIT09YS5iaXRtb2ppX3NjZW5lX2lkP2EuYml0bW9qaV9zY2VuZV9pZDpcIjg1OTY0MzYzOVwiKTtmPSgwLHEuanN4cykocS5GcmFnbWVudCx7Y2hpbGRyZW46WygwLG8uWikoXCJpbWdcIix7Y2xhc3NOYW1lOkRNLmJpdG1vamlJbWdCYWNrTGF5ZXIsc3JjOmV9KSxuIT09VU0uSElERSYmKDAsby5aKShcImltZ1wiLHtjbGFzc05hbWU6KDAsUS5aKShETS5iaXRtb2ppSW1nRnJvbnRMYXllcix7W0RNLnJlZHVjZU9wYWNpdHldOm49PT1VTS5SRURVQ0VfT1BBQ0lUWX0pLHNyYzplfSldfSl9cmV0dXJuKDAscS5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTooMCxRLlopKERNLmNvbnRhaW5lcixyP0RNLmZpcnN0VGltZUV4cGVyaWVuY2VDb250YWluZXI6RE0ubGFuZGluZ0NvbnRhaW5lcikscmVmOnMsY2hpbGRyZW46KDAsby5aKShGTSx7YnJlYWtwb2ludFN0eWxlczp1fSx2b2lkIDAsbCYmKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6RE0uY2hhbmdlT3V0Zml0Q29udGFpbmVyfSx2b2lkIDAsKDAsby5aKShcImFcIix7Y2xhc3NOYW1lOkRNLmNoYW5nZU91dGZpdEJ1dHRvbixocmVmOlwiaHR0cHM6Ly93d3cuYml0bW9qaS5jb20vYXZhdGFyL291dGZpdC8/cmVxdWlyZV9zbmFwY2hhdFwiLHRhcmdldDpcIl9ibGFua1wiLHJlbDpcIm5vb3BlbmVyIG5vcmVmZXJyZXJcIn0sdm9pZCAwLE1NfHwoTU09KDAsby5aKShwTSx7fSkpKSksKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6KDAsUS5aKShETS5jb250ZW50LHtbRE0ud2l0aEFzcGVjUmF0aW9dOlwidGlueVwiIT09Y30pfSx2b2lkIDAsKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6KDAsUS5aKShETS5sZWZ0Q29tcG9uZW50Q29udGFpbmVyLHUpfSx2b2lkIDAsdCksKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6KDAsUS5aKShETS5iaXRtb2ppQXZhdGFyQ29udGFpbmVyLHUsZCl9LHZvaWQgMCxmKSkpfSl9dmFyIEdNO2Z1bmN0aW9uIEhNKCl7cmV0dXJuIEhNPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sSE0uYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IFdNPWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLEhNKHt3aWR0aDoxMSxoZWlnaHQ6MTEsdmlld0JveDpcIjAgMCAxMSAxMVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSxHTXx8KEdNPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIk04LjMxIDQuMzM2Yy4xMDQuMDg1LjIyNi4xNTQuMzQ4LjE1NC4zMTUgMCAuODA4LjAyOS44MDguMDI5LjM2OC4wMTkuNjY1LjMzLjY2NS42OTZ2LjU3YS43MDUuNzA1IDAgMCAxLS42NjUuNjk2cy0uNDkzLjAzLS44MDguMDNjLS4xMjIgMC0uMjQ0LjA2OC0uMzQ4LjE1My4wMTQuMTMzLjA1MS4yNjguMTM3LjM1NC4yMjQuMjI0LjU1MS41OTMuNTUxLjU5M2EuNzA2LjcwNiAwIDAgMS0uMDIyLjk2M2wtLjQwMy40MDJhLjcwNS43MDUgMCAwIDEtLjk2Mi4wMjJzLS4zNy0uMzI3LS41OTMtLjU1Yy0uMDg2LS4wODctLjIyLS4xMjQtLjM1NC0uMTM4LS4wODUuMTA0LS4xNTQuMjI2LS4xNTQuMzQ4IDAgLjMxNS0uMDI5LjgwOC0uMDI5LjgwOGEuNzA1LjcwNSAwIDAgMS0uNjk2LjY2NWgtLjU3YS43MDYuNzA2IDAgMCAxLS42OTYtLjY2NXMtLjAzLS40OTMtLjAzLS44MDhjMC0uMTIyLS4wNjgtLjI0NC0uMTUzLS4zNDgtLjEzMy4wMTQtLjI2OC4wNTEtLjM1NC4xMzctLjIyNC4yMjQtLjU5My41NTEtLjU5My41NTFhLjcwNi43MDYgMCAwIDEtLjk2My0uMDIybC0uNDAyLS40MDJhLjcwNS43MDUgMCAwIDEtLjAyMi0uOTYzcy4zMjctLjM3LjU1LS41OTNjLjA4Ny0uMDg2LjEyNC0uMjIuMTM4LS4zNTQtLjEwNC0uMDg1LS4yMjYtLjE1NC0uMzQ4LS4xNTQtLjMxNSAwLS44MDgtLjAyOS0uODA4LS4wMjlhLjcwNi43MDYgMCAwIDEtLjY2NS0uNjk2di0uNTdjMC0uMzY2LjI5Ny0uNjc4LjY2NS0uNjk2IDAgMCAuNDkzLS4wMy44MDgtLjAzLjEyMiAwIC4yNDQtLjA2OC4zNDgtLjE1My0uMDE0LS4xMzMtLjA1MS0uMjY4LS4xMzctLjM1NGExNy40MiAxNy40MiAwIDAgMS0uNTUxLS41OTMuNzA2LjcwNiAwIDAgMSAuMDIyLS45NjJsLjQwMi0uNDAzYS43MDUuNzA1IDAgMCAxIC45NjMtLjAyMnMuMzcuMzI3LjU5My41NWMuMDg2LjA4Ny4yMi4xMjQuMzU0LjEzOC4wODUtLjEwNC4xNTQtLjIyNi4xNTQtLjM0OCAwLS4zMTUuMDI5LS44MDguMDI5LS44MDhhLjcwNi43MDYgMCAwIDEgLjY5Ni0uNjY1aC41N2MuMzY2IDAgLjY3OC4yOTcuNjk2LjY2NSAwIDAgLjAzLjQ5My4wMy44MDggMCAuMTIyLjA2OC4yNDQuMTUzLjM0OC4xMzMtLjAxNC4yNjgtLjA1MS4zNTQtLjEzNy4yMjQtLjIyNC41OTMtLjU1MS41OTMtLjU1MWEuNzA2LjcwNiAwIDAgMSAuOTYyLjAyMmwuNDAzLjQwM2MuMjU5LjI1OC4yNy42OS4wMjIuOTYyIDAgMC0uMzI3LjM3LS41NS41OTMtLjA4Ny4wODYtLjEyNC4yMi0uMTM4LjM1NFpNNS41IDcuMTg0YTEuNjg0IDEuNjg0IDAgMSAwIDAtMy4zNjggMS42ODQgMS42ODQgMCAwIDAgMCAzLjM2OFpcIn0pKSk7dmFyIGpNLFpNPW4oNTczMDEpO2Z1bmN0aW9uIHpNKCl7cmV0dXJuIHpNPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sek0uYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IEtNPWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLHpNKHt3aWR0aDoxNixoZWlnaHQ6MTYsdmlld0JveDpcIjAgMCAxNiAxNlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLGpNfHwoak09ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTguOCAzLjFhLjc1Ljc1IDAgMCAxIC43NS0uNzVoMy41YS43NS43NSAwIDAgMSAuNzUuNzV2My42NTVhLjc1Ljc1IDAgMSAxLTEuNSAwVjQuOTFMNy45MjUgOS4yODdhLjc1Ljc1IDAgMCAxLTEuMDYtMS4wNkwxMS4yNCAzLjg1SDkuNTVhLjc1Ljc1IDAgMCAxLS43NS0uNzVabS00Ljc1LS43YTEuNyAxLjcgMCAwIDAtMS43IDEuN3Y4YTEuNyAxLjcgMCAwIDAgMS43IDEuN2g4YTEuNyAxLjcgMCAwIDAgMS43LTEuN1Y5Ljg1YS43LjcgMCAxIDAtMS40IDB2Mi4yNWEuMy4zIDAgMCAxLS4zLjNoLThhLjMuMyAwIDAgMS0uMy0uM3YtOGEuMy4zIDAgMCAxIC4zLS4zaDIuNmEuNy43IDAgMSAwIDAtMS40aC0yLjZaXCIsZmlsbDpcIiM0RTU2NUZcIn0pKSksWU09e2FmdGVySWNvbjpcIlNrc1ZlXCIsYnVpbGRJbmZvOlwiRUg1SDJcIixicm93c2VyTm90aWZpY2F0aW9uc0Rpc2FibGVkOlwiY2FEV3VcIixsZWFybk1vcmVMaW5rOlwid0FnS1RcIn07dmFyIHFNLFhNO2NvbnN0IFFNPWU9PmUudHdlYWtzLnNob3dUd2Vha3M7ZnVuY3Rpb24gSk0oZSx0KXtzd2l0Y2goZSl7Y2FzZVwic3lzdGVtXCI6cmV0dXJuIHQuZm9ybWF0TWVzc2FnZSh7aWQ6XCJtWmppbGlcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlN5c3RlbVwifV19KTtjYXNlXCJkYXJrXCI6cmV0dXJuIHQuZm9ybWF0TWVzc2FnZSh7aWQ6XCJxYlZuNVRcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkRhcmtcIn1dfSk7Y2FzZVwibGlnaHRcIjpyZXR1cm4gdC5mb3JtYXRNZXNzYWdlKHtpZDpcImsrM2Z5ZlwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiTGlnaHRcIn1dfSl9fWNvbnN0ICRNPXtkcm9wZG93bk1lbnU6XCJGQlRERVwiLG1lbnVCdXR0b246XCJEOG92aFwiLG1lbnVWaXNpYmxlOlwiQ3dGSnhcIixiYWRnZTpcInZiVkFJXCJ9O2Z1bmN0aW9uIGVMKCl7dmFyIGU7Y29uc3QgdD1YYygpLFtuLHJdPSgwLGQudXNlU3RhdGUpKFwiZGVmYXVsdFwiKSxpPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1mdW5jdGlvbihlKXtjb25zdCB0PSgwLGsubykoSS5Oeiksbj0oKDAsay5vKShRTSksKDAsay5vKShqTyksKDAsbWUuWikoKSksW3JdPSgwLG1kLkZHKSgpLHtpbnN0YWxsUHJvbXB0RXZlbnQ6aSxpbnN0YWxsOmF9PSgoMCxOLmMzKSgpLCgwLE5QLkRXKSgpKSxbc109KCgwLGsubykoWk0uQSksKDAsbWQuYkcpKCkpLFtjLGxdPSgwLG1kLnhxKSgpLHtub3RpZmljYXRpb25zRW5hYmxlZDp1LHNldE5vdGlmaWNhdGlvbnNQcmVmZXJlbmNlOmR9PUtPKCksZj0oKDAsay5vKShDZSksITA9PT13aW5kb3cubmF2aWdhdG9yLnN0YW5kYWxvbmV8fHdpbmRvdy5tYXRjaE1lZGlhKFwiKGRpc3BsYXktbW9kZTogc3RhbmRhbG9uZSlcIikubWF0Y2hlcykscD1bXTtpZihwLnB1c2goZ0Uoe2NvbnRlbnQ6KDAsby5aKShURSx7bGFiZWw6bi5mb3JtYXRNZXNzYWdlKHtpZDpcIkRCeVlxUlwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiVGhlbWVcIn1dfSksc3VibGFiZWw6Sk0ocixuKX0pLGFyaWFMYWJlbDpuLmZvcm1hdE1lc3NhZ2Uoe2lkOlwiNytXMjlFXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJDaGFuZ2UgQXBwbGljYXRpb24gVGhlbWVcIn1dfSksa2V5OlwidGhlbWUtcGlja2VyXCIsXCJkYXRhLXRlc3RpZFwiOlwiYXBwLnVzZXIudXNlclByb2ZpbGVCdXR0b24udGhlbWVQaWNrZXJcIixvblNlbGVjdGVkOigpPT5lKFwidGhlbWUtcGlja2VyXCIpLG1lbnVPcGVuUG9zdFNlbGVjdGlvbjohMH0pKSxzKXAucHVzaChnRSh7Y29udGVudDooMCxvLlopKFRFLHtsYWJlbDpuLmZvcm1hdE1lc3NhZ2Uoe2lkOlwidG90SVdlXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJUdXJuIE9mZiBTb3VuZCBFZmZlY3RzXCJ9XX0pfSksYXJpYUxhYmVsOm4uZm9ybWF0TWVzc2FnZSh7aWQ6XCJjOWJyYlZcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlR1cm4gb2ZmIFNvdW5kIEVmZmVjdHMgZm9yIGNoYXQsIHNuYXBzIG9yIGNhbGxpbmdcIn1dfSksa2V5Olwic291bmQtZWZmZWN0c1wiLFwiZGF0YS10ZXN0aWRcIjpcImFwcC51c2VyLnVzZXJQcm9maWxlQnV0dG9uLnR1cm5PZmZTb3VuZEVmZmVjdHNcIixvblNlbGVjdGVkOigpPT5lKFwic291bmQtZWZmZWN0c1wiKSxtZW51T3BlblBvc3RTZWxlY3Rpb246ITB9KSk7ZWxzZXtjb25zdCBlPW4uZm9ybWF0TWVzc2FnZSh7aWQ6XCJ6c3hZT2RcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlR1cm4gT24gU291bmQgRWZmZWN0c1wifV19KTtwLnB1c2godUUoe3RpdGxlOmUsa2V5Olwic291bmQtZWZmZWN0c1wiLHRlc3RJZDpcImFwcC51c2VyLnVzZXJQcm9maWxlQnV0dG9uLnR1cm5PblNvdW5kRWZmZWN0c1wiLG9uU2VsZWN0ZWQ6YXN5bmMoKT0+bCghMCl9KSl9aWYoXCJOb3RpZmljYXRpb25cImluIHdpbmRvdyYmXCJkZW5pZWRcIj09PU5vdGlmaWNhdGlvbi5wZXJtaXNzaW9uKXAucHVzaChnRSh7XCJkYXRhLXRlc3RpZFwiOlwiYXBwLnVzZXIudXNlclByb2ZpbGVCdXR0b24uZGlzYWJsZWROb3RpZmljYXRpb25zXCIsa2V5Olwibm90aWZpY2F0aW9uc1wiLGFyaWFMYWJlbDpuLmZvcm1hdE1lc3NhZ2Uoe2lkOlwiY3Bab00vXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJOb3RpZmljYXRpb25zIGFyZSBvZmZcIn1dfSksZGlzYWJsZWQ6ITAsY29udGVudDooMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpZTS5icm93c2VyTm90aWZpY2F0aW9uc0Rpc2FibGVkfSx2b2lkIDAscU18fChxTT0oMCxvLlopKFwic3BhblwiLHt9LHZvaWQgMCwoMCxvLlopKHYuWix7aWQ6XCJPUjhvdk1cIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIk5vdGlmaWNhdGlvbnMgYXJlIG9mZlwifV19KSkpLCgwLG8uWikoXCJhXCIse2NsYXNzTmFtZTpZTS5sZWFybk1vcmVMaW5rLG9uQ2xpY2s6KCk9PigwLFdELkpMKShcInVzZXJfcHJvZmlsZV9tZW51XCIpfSx2b2lkIDAsWE18fChYTT0oMCxvLlopKHYuWix7aWQ6XCJFdytjTmxcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkxlYXJuIG1vcmVcIn1dfSkpLCgwLG8uWikoS00se2NsYXNzTmFtZTpZTS5hZnRlckljb259KSkpfSkpO2Vsc2V7Y29uc3QgZT11P24uZm9ybWF0TWVzc2FnZSh7aWQ6XCJsQUtlcUpcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlR1cm4gT2ZmIE5vdGlmaWNhdGlvbnNcIn1dfSk6bi5mb3JtYXRNZXNzYWdlKHtpZDpcIlg4V2p2N1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiVHVybiBPbiBOb3RpZmljYXRpb25zXCJ9XX0pOygwLE4ucFgpKCkmJnAucHVzaCh1RSh7dGl0bGU6ZSxrZXk6XCJub3RpZmljYXRpb25zXCIsdGVzdElkOlwiYXBwLnVzZXIudXNlclByb2ZpbGVCdXR0b24udG9nZ2xlTm90aWZpY2F0aW9uc1wiLG9uU2VsZWN0ZWQ6YXN5bmMoKT0+ZCghdSxcInVzZXJfcHJvZmlsZV9tZW51XCIpfSkpfXJldHVybiBwLnB1c2godUUoe3RpdGxlOm4uZm9ybWF0TWVzc2FnZSh7aWQ6XCI0SVhJaEZcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkhlbHAgQ2VudGVyXCJ9XX0pLGtleTpcImhlbHAtY2VudGVyXCIsYWZ0ZXI6KDAsby5aKShLTSx7Y2xhc3NOYW1lOllNLmFmdGVySWNvbn0pLG9uU2VsZWN0ZWQ6KCk9PndpbmRvdy5vcGVuKFwiaHR0cHM6Ly9zdXBwb3J0LnNuYXBjaGF0LmNvbS9hcnRpY2xlL2NhbGxpbmctb24td2ViXCIsXCJfYmxhbmtcIixcIm5vb3BlbmVyLG5vcmVmZXJyZXJcIiksdGVzdElkOlwiYXBwLnVzZXIudXNlclByb2ZpbGVCdXR0b24uaGVscENlbnRlclwifSkpLHAucHVzaCh1RSh7dGl0bGU6bi5mb3JtYXRNZXNzYWdlKHtpZDpcIkdCZVBOV1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiUmVwb3J0IGEgUHJvYmxlbVwifV19KSxrZXk6XCJzcG90dGVkLWJ1Z1wiLGFmdGVyOigwLG8uWikoS00se2NsYXNzTmFtZTpZTS5hZnRlckljb259KSxvblNlbGVjdGVkOigpPT53aW5kb3cub3BlbihcImh0dHBzOi8vc3VwcG9ydC5zbmFwY2hhdC5jb20vaS1uZWVkLWhlbHA/c3RhcnQ9NTc5MjcwMDk0ODAyMTI0OFwiLFwiX2JsYW5rXCIsXCJub29wZW5lcixub3JlZmVycmVyXCIpLHRlc3RJZDpcImFwcC51c2VyLnVzZXJQcm9maWxlQnV0dG9uLnNwb3R0ZWRCdWdcIn0pKSxwLnB1c2godUUoe3RpdGxlOm4uZm9ybWF0TWVzc2FnZSh7aWQ6XCJhU1RJUmZcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkkgSGF2ZSBhIFN1Z2dlc3Rpb25cIn1dfSksa2V5Olwic3VnZ2VzdGlvblwiLGFmdGVyOigwLG8uWikoS00se2NsYXNzTmFtZTpZTS5hZnRlckljb259KSxvblNlbGVjdGVkOigpPT53aW5kb3cub3BlbihcImh0dHBzOi8vc3VwcG9ydC5zbmFwY2hhdC5jb20vaS1uZWVkLWhlbHA/c3RhcnQ9NjU1MTA1OTYzMjQ4ODQ0OFwiLFwiX2JsYW5rXCIsXCJub29wZW5lcixub3JlZmVycmVyXCIpLHRlc3RJZDpcImFwcC51c2VyLnVzZXJQcm9maWxlQnV0dG9uLnN1Z2dlc3Rpb25cIn0pKSxwLnB1c2godUUoe3RpdGxlOm4uZm9ybWF0TWVzc2FnZSh7aWQ6XCJEWFpXR0ZcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkFjY291bnQgU2V0dGluZ3NcIn1dfSksa2V5OlwiYWNjb3VudC1zZXR0aW5nc1wiLGFmdGVyOigwLG8uWikoS00se2NsYXNzTmFtZTpZTS5hZnRlckljb259KSxvblNlbGVjdGVkOigpPT53aW5kb3cub3BlbihcImh0dHBzOi8vYWNjb3VudHMuc25hcGNoYXQuY29tL2FjY291bnRzL3dlbGNvbWVcIixcIl9ibGFua1wiLFwibm9vcGVuZXIsbm9yZWZlcnJlclwiKSx0ZXN0SWQ6XCJhcHAudXNlci51c2VyUHJvZmlsZUJ1dHRvbi5hY2NvdW50U2V0dGluZ3NcIn0pKSxwLnB1c2godUUoe3RpdGxlOm4uZm9ybWF0TWVzc2FnZSh7aWQ6XCIwRU42VWRcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlByaXZhY3kgUG9saWN5XCJ9XX0pLGtleTpcInByaXZhY3ktcG9saWN5XCIsYWZ0ZXI6KDAsby5aKShLTSx7Y2xhc3NOYW1lOllNLmFmdGVySWNvbn0pLG9uU2VsZWN0ZWQ6KCk9PndpbmRvdy5vcGVuKFwiaHR0cHM6Ly9zbmFwLmNvbS9wcml2YWN5L3ByaXZhY3ktY2VudGVyXCIsXCJfYmxhbmtcIixcIm5vb3BlbmVyLG5vcmVmZXJyZXJcIiksdGVzdElkOlwiYXBwLnVzZXIudXNlclByb2ZpbGVCdXR0b24ucHJpdmFjeUNlbnRlclwifSkpLHAucHVzaCh1RSh7dGl0bGU6bi5mb3JtYXRNZXNzYWdlKHtpZDpcInRQL3VseFwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiTG9nIE91dFwifV19KSx2YXJpYW50OlwidXJnZW50XCIsa2V5OlwibG9nLW91dFwiLG9uU2VsZWN0ZWQ6dCx0ZXN0SWQ6XCJhcHAudXNlci51c2VyUHJvZmlsZUJ1dHRvbi5sb2dPdXRcIn0pKSxpJiZwLnB1c2godUUoe3RpdGxlOm4uZm9ybWF0TWVzc2FnZSh7aWQ6XCJ0dVJKNndcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkNyZWF0ZSBEZXNrdG9wIFNob3J0Y3V0XCJ9XX0pLGtleTpcImluc3RhbGxcIixvblNlbGVjdGVkOmEsdGVzdElkOlwiYXBwLnVzZXIudXNlclByb2ZpbGVCdXR0b24uaW5zdGFsbFwifSkpLGYmJnAucHVzaCh1RSh7dGl0bGU6bi5mb3JtYXRNZXNzYWdlKHtpZDpcIjUyTURmVlwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiUmVsb2FkXCJ9XX0pLGtleTpcInJlbG9hZFwiLG9uU2VsZWN0ZWQ6KCk9PndpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKSx0ZXN0SWQ6XCJhcHAudXNlci51c2VyUHJvZmlsZUJ1dHRvbi5yZWxvYWRcIn0pKSxwfSh0KSxyPWZ1bmN0aW9uKGUpe2NvbnN0W3Qsbl09KDAsbWQuRkcpKCkscj0oMCxtZS5aKSgpO3JldHVybltiRSh7dGl0bGU6ci5mb3JtYXRNZXNzYWdlKHtpZDpcImZwNlo0d1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiVGhlbWVcIn1dfSksa2V5OlwidGhlbWUtbWVudS10aXRsZVwiLG9uU2VsZWN0ZWQ6KCk9PmUoXCJkZWZhdWx0XCIpfSksLi4uW1wic3lzdGVtXCIsXCJsaWdodFwiLFwiZGFya1wiXS5tYXAoKGU9Pntjb25zdCBpPSgwLG8uWikoSmcse2NoZWNrZWQ6ZT09PXR9KSxhPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2VcInN5c3RlbVwiOnJldHVybiB0LmZvcm1hdE1lc3NhZ2Uoe2lkOlwid29lUjJ5XCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJGb2xsb3cgU3lzdGVtIFRoZW1lXCJ9XX0pO2Nhc2VcImRhcmtcIjpyZXR1cm4gdC5mb3JtYXRNZXNzYWdlKHtpZDpcIk5RREI0NlwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiQWx3YXlzIERhcmtcIn1dfSk7Y2FzZVwibGlnaHRcIjpyZXR1cm4gdC5mb3JtYXRNZXNzYWdlKHtpZDpcImdpdFA4cVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiQWx3YXlzIExpZ2h0XCJ9XX0pfX0oZSxyKTtyZXR1cm4gZ0Uoe2tleTpcInRoZW1lLWNob2ljZS1cIitlLGFyaWFMYWJlbDphLGNvbnRlbnQ6KDAsby5aKShsRSx7YmVmb3JlOml9LHZvaWQgMCxhKSxvblNlbGVjdGVkOmFzeW5jKCk9Pm4oZSksbWVudU9wZW5Qb3N0U2VsZWN0aW9uOiEwfSl9KSldfSh0KSxpPWZ1bmN0aW9uKGUpe2NvbnN0IHQ9KDAsbWUuWikoKSxbbixyXT0oMCxtZC5iRykoKSxbaSxhXT0oMCxtZC54cSkoKSxzPVt7a2V5OlwiY2hhdC1hbmQtc25hcHNcIixlbmFibGVkOm4sc2V0RW5hYmxlZDpyLHRpdGxlOnQuZm9ybWF0TWVzc2FnZSh7aWQ6XCJnOVVQRnRcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkNoYXRzICYgU25hcHNcIn1dfSl9LHtrZXk6XCJhbGxcIixlbmFibGVkOmksc2V0RW5hYmxlZDphLHRpdGxlOnQuZm9ybWF0TWVzc2FnZSh7aWQ6XCJFMDR1Z05cIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkFsbCBTb3VuZHNcIn1dfSl9XTtyZXR1cm5bYkUoe3RpdGxlOnQuZm9ybWF0TWVzc2FnZSh7aWQ6XCJ0dFRJOXlcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlR1cm4gT2ZmIFNvdW5kIEVmZmVjdHNcIn1dfSksa2V5Olwic291bmQtZWZmZWN0c1wiLG9uU2VsZWN0ZWQ6KCk9PmUoXCJkZWZhdWx0XCIpLHRlc3RJZDpcImFwcC51c2VyLnVzZXJQcm9maWxlQnV0dG9uLnR1cm5PZmZTb3VuZEVmZmVjdHMuZ29CYWNrXCJ9KSwuLi5zLm1hcCgoZT0+e2xldHtrZXk6dCxlbmFibGVkOm4sc2V0RW5hYmxlZDpyLHRpdGxlOmF9PWUscz0hMTtcImNoYXQtYW5kLXNuYXBzXCIhPT10fHxpfHwocz0hMCk7Y29uc3QgYz0oMCxvLlopKEpnLHtjaGVja2VkOiFuLGRpc2FibGVkOnN9KTtyZXR1cm4gZ0Uoe2tleTpcInNvdW5kLXNldHRpbmctXCIrdCxhcmlhTGFiZWw6YSxjb250ZW50OigwLG8uWikobEUse2JlZm9yZTpjLHZhcmlhbnQ6cz9cImRpc2FibGVkXCI6XCJyZWd1bGFyXCJ9LHZvaWQgMCxhKSxvblNlbGVjdGVkOmFzeW5jKCk9PiFzJiZyKCFuKSxtZW51T3BlblBvc3RTZWxlY3Rpb246ITB9KX0pKV19KHQpO3N3aXRjaChlKXtjYXNlXCJkZWZhdWx0XCI6cmV0dXJuIG47Y2FzZVwidGhlbWUtcGlja2VyXCI6cmV0dXJuIHI7Y2FzZVwic291bmQtZWZmZWN0c1wiOnJldHVybiBpfX0obixyKTtyZXR1cm4oMCxvLlopKElFLHtpdGVtczppLGNsYXNzTmFtZTokTS5kcm9wZG93bk1lbnUsb25NZW51Q2xvc2U6KCk9PnIoXCJkZWZhdWx0XCIpfSx2b2lkIDAsKChuLHIpPT4oMCxxLmpzeHMpKFwiYnV0dG9uXCIse3R5cGU6XCJidXR0b25cIixjbGFzc05hbWU6KDAsUS5aKSgkTS5tZW51QnV0dG9uLHImJiRNLm1lbnVWaXNpYmxlKSwuLi5uKCksY2hpbGRyZW46W2V8fChlPSgwLG8uWikoQnUse3NpemU6MzYsdXNlcklkOnR9KSksKDAsby5aKShXTSx7Y2xhc3NOYW1lOiRNLmJhZGdlfSldfSkpKX1jb25zdCB0TD17Y29udGFpbmVyOlwiekR3N09cIixwcm9maWxlQnV0dG9uQ29udGFpbmVyOlwiZlZaRDZcIixtb2RhbDpcIm10Rk9MXCIsYnV0dG9uOlwidkRueWtcIn07dmFyIG5MLHJMLGlMLG9MLGFMLHNMLGNMO2Z1bmN0aW9uIGxMKCl7Y29uc3RbZSx0XT1HTygpLG49KDAsTy5ycCkoQS5zTykscj0oMCxtZC5leSkoKTtyZXR1cm4oMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTp0TC5jb250YWluZXJ9LHZvaWQgMCwoMCxvLlopKFZNLHtiaXRtb2ppT3ZlcmxhcFN0YXRlOlVNLlNIT1csaXNGaXJzdFRpbWVFeHBlcmllbmNlOiEwfSx2b2lkIDAsKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6dEwubW9kYWx9LHZvaWQgMCxuTHx8KG5MPSgwLG8uWikoXCJoMVwiLHt9LHZvaWQgMCwoMCxvLlopKHYuWix7aWQ6XCJHVmM4QUNcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIldlbGNvbWUgdG8gU25hcGNoYXQgZm9yIFdlYiFcIn1dfSkpKSxyTHx8KHJMPSgwLG8uWikoXCJoM1wiLHt9LHZvaWQgMCwoMCxvLlopKHYuWix7aWQ6XCJ6a1NGS0dcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkVuam95IHlvdXIgc3RheS4gSGVyZSBhcmUgYSBmZXcgcG9pbnRlcnM6XCJ9XX0pKSksaUx8fChpTD0oMCxvLlopKFwiaDJcIix7fSx2b2lkIDAsKDAsby5aKSh2Llose2lkOlwiVXVGS0tpXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJCZSBNaW5kZnVsIG9mIEtleSBEaWZmZXJlbmNlc1wifV19KSkpLG9MfHwob0w9KDAsby5aKShcInBcIix7fSx2b2lkIDAsKDAsby5aKSh2Llose2lkOlwiVFlnU1h3XCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJQcml2YWN5IGFuZCBzZWN1cml0eSBvbiBTbmFwY2hhdCBmb3IgV2ViIG1heSBkaWZmZXIuXCJ9XX0pKSksYUx8fChhTD0oMCxvLlopKFwicFwiLHt9LHZvaWQgMCwoMCxvLlopKFwiYVwiLHt0YXJnZXQ6XCJfYmxhbmtcIixyZWw6XCJub29wZW5lciBub3JlZmVycmVyXCIsaHJlZjpcImh0dHBzOi8vc3VwcG9ydC5zbmFwY2hhdC5jb20vYXJ0aWNsZS9sZWFybi1tb3JlLXdlYlwifSx2b2lkIDAsKDAsby5aKSh2Llose2lkOlwib3ZzZ3krXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJMZWFybiBtb3JlXCJ9XX0pKSwoMCxvLlopKHYuWix7aWQ6XCIxSHFOV1hcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcImFib3V0IGhvdyBzY3JlZW5zaG90cyB3b3JrIG9uIHlvdXIgYnJvd3Nlci5cIn1dfSkpKSwoMCxvLlopKFBkLHtjbGFzc05hbWU6dEwuYnV0dG9uLG9uQ2xpY2s6KCk9PntuPyhyKCksZSYmdCgpKTp0KCl9fSx2b2lkIDAsc0x8fChzTD0oMCxvLlopKHYuWix7aWQ6XCJ0NTVQSUpcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkdldCBTdGFydGVkXCJ9XX0pKSkpKSwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTp0TC5wcm9maWxlQnV0dG9uQ29udGFpbmVyfSx2b2lkIDAsY0x8fChjTD0oMCxvLlopKGVMLHt9KSkpKX1jb25zdCB1TD1lPT4oe2xlbnNlczplLmNhbWVyYUtpdC5sZW5zZXMsY3VycmVudExlbnNJZDplLmNhbWVyYUtpdC5jdXJyZW50TGVuc0lkLHNldEN1cnJlbnRMZW5zOmUuY2FtZXJhS2l0LnNldEN1cnJlbnRMZW5zLHJlbW92ZUxlbnM6ZS5jYW1lcmFLaXQucmVtb3ZlTGVuc30pLGRMPSgpPT4oMCxrLm8pKHVMKSxmTD1uLnArXCJkdy80ODc0Yjc1YzhlYjJhMzNkNjdiZi5wbmdcIixwTD1uLnArXCJkdy9mNDRiNjM4Y2ExODZjY2VkYzQwNS5wbmdcIjthc3luYyBmdW5jdGlvbiBtTCgpe3JldHVybiBuYXZpZ2F0b3IucGVybWlzc2lvbnMucXVlcnkoe25hbWU6XCJjYW1lcmFcIn0pfWNvbnN0IGhMPXtpdGVtOlwiRkJZam5cIixzZWxlY3RlZEl0ZW06XCJBN0NyX1wiLHJlbW92ZUxlbnM6XCJnSzB4TFwiLHJlbW92ZUxlbnNTZWxlY3RlZDpcIm0zT0RKXCJ9O2Z1bmN0aW9uIHZMKGUpe2xldHtsZW5zOnQsaXNTZWxlY3RlZDpuLG9uU2VsZWN0OnIsb25DYXB0dXJlU25hcEltYWdlOmksb25DYXB0dXJlRG93bjphLG9uTW91c2VSZWxlYXNlOnN9PWU7cmV0dXJuKDAsby5aKShcImJ1dHRvblwiLHtjbGFzc05hbWU6KDAsUS5aKShoTC5pdGVtLG4mJmhMLnNlbGVjdGVkSXRlbSksdHlwZTpcImJ1dHRvblwiLG9uQ2xpY2s6ZT0+e2Uuc3RvcFByb3BhZ2F0aW9uKCksbiYmaT9pKCk6cj8uKHQuaWQpfSxkaXNhYmxlZDohcixvbk1vdXNlRG93bjooKT0+biYmYT8uKCksb25Nb3VzZVVwOnMsb25Nb3VzZUxlYXZlOnMsdGl0bGU6dC5uYW1lfSx2b2lkIDAsKDAsby5aKShcImltZ1wiLHtsb2FkaW5nOlwibGF6eVwiLHNyYzp0Lmljb25VcmwsYWx0OnQubmFtZX0pKX1mdW5jdGlvbiBnTChlKXtsZXR7aXNTZWxlY3RlZDp0LG9uU2VsZWN0Om4sb25DYXB0dXJlU25hcEltYWdlOnIsb25DYXB0dXJlRG93bjppLG9uTW91c2VSZWxlYXNlOmEsY3VzdG9tQ2xhc3M6c309ZTtyZXR1cm4oMCxvLlopKFwiYnV0dG9uXCIse3R5cGU6XCJidXR0b25cIixjbGFzc05hbWU6KDAsUS5aKShoTC5pdGVtLGhMLnJlbW92ZUxlbnMscyx0JiZbaEwuc2VsZWN0ZWRJdGVtLGhMLnJlbW92ZUxlbnNTZWxlY3RlZF0pLGRpc2FibGVkOiFuLG9uQ2xpY2s6ZT0+e2Uuc3RvcFByb3BhZ2F0aW9uKCksdCYmcj9yKCk6bj8uKCl9LG9uTW91c2VEb3duOigpPT50JiZpPy4oKSxvbk1vdXNlVXA6YSxvbk1vdXNlTGVhdmU6YX0pfWNvbnN0IHlMPXtjb250YWluZXI6XCJSRlVfNVwiLGNvbnRlbnQ6XCJPN05ocVwiLGNvbnRlbnRCb2R5OlwiaTBLVDdcIixlbXB0eUxlbnM6XCJXNWRJcVwifTtmdW5jdGlvbiBFTChlKXtsZXR7b3BlbkNhbWVyYUNhbGxiYWNrOnR9PWU7Y29uc3R7bGVuc2VzOm59PWRMKCkscj0oMCxkLnVzZU1lbW8pKCgoKT0+Wy4uLk9iamVjdC52YWx1ZXMobikuc2xpY2UoMCwzKV0pLFtuXSksW2ksYV09KDAsay5vKShNLkVZKTtyZXR1cm4gci5sZW5ndGg/KDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6eUwuY29udGFpbmVyfSx2b2lkIDAsKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6eUwuY29udGVudH0sdm9pZCAwLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOnlMLmNvbnRlbnRCb2R5fSx2b2lkIDAsKDAsby5aKShnTCx7b25TZWxlY3Q6dCxjdXN0b21DbGFzczp5TC5lbXB0eUxlbnN9KSxyLm1hcCgoKGUsbik9PigwLG8uWikodkwse29uU2VsZWN0OmU9PnthKGUpLHQoKX0sbGVuczplfSxuKSkpKSkpOm51bGx9dmFyIF9MPW4oMzY1MSksSUw9bi5uKF9MKTtjb25zdCBTTD1uZXcgV2Vha01hcDtsZXQgYkw7ZnVuY3Rpb24gVEwoe3RhcmdldDplLGNvbnRlbnRSZWN0OnQsYm9yZGVyQm94U2l6ZTpufSl7dmFyIHI7bnVsbD09PShyPVNMLmdldChlKSl8fHZvaWQgMD09PXJ8fHIuZm9yRWFjaCgocj0+e3Ioe3RhcmdldDplLGNvbnRlbnRTaXplOnQsZ2V0IHNpemUoKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih0KXtjb25zdHtpbmxpbmVTaXplOmUsYmxvY2tTaXplOm59PXRbMF07cmV0dXJue3dpZHRoOmUsaGVpZ2h0Om59fXJldHVybiBlIGluc3RhbmNlb2YgU1ZHRWxlbWVudCYmXCJnZXRCQm94XCJpbiBlP2UuZ2V0QkJveCgpOnt3aWR0aDplLm9mZnNldFdpZHRoLGhlaWdodDplLm9mZnNldEhlaWdodH19KGUsbil9fSl9KSl9ZnVuY3Rpb24gQ0woZSl7ZS5mb3JFYWNoKFRMKX1jb25zdCBBTD1uZXcgU2V0O2xldCBSTDtjb25zdCBrTD0oZSx0LG4pPT50LWU9PTA/MToobi1lKS8odC1lKSxPTD01MCxOTD0oKT0+KHt0aW1lOjAseDp7Y3VycmVudDowLG9mZnNldDpbXSxwcm9ncmVzczowLHNjcm9sbExlbmd0aDowLHRhcmdldE9mZnNldDowLHRhcmdldExlbmd0aDowLGNvbnRhaW5lckxlbmd0aDowLHZlbG9jaXR5OjB9LHk6e2N1cnJlbnQ6MCxvZmZzZXQ6W10scHJvZ3Jlc3M6MCxzY3JvbGxMZW5ndGg6MCx0YXJnZXRPZmZzZXQ6MCx0YXJnZXRMZW5ndGg6MCxjb250YWluZXJMZW5ndGg6MCx2ZWxvY2l0eTowfX0pLHdMPXt4OntsZW5ndGg6XCJXaWR0aFwiLHBvc2l0aW9uOlwiTGVmdFwifSx5OntsZW5ndGg6XCJIZWlnaHRcIixwb3NpdGlvbjpcIlRvcFwifX07ZnVuY3Rpb24gREwoZSx0LG4scil7Y29uc3QgaT1uW3RdLHtsZW5ndGg6byxwb3NpdGlvbjphfT13TFt0XSxzPWkuY3VycmVudCxjPW4udGltZTtpLmN1cnJlbnQ9ZVtcInNjcm9sbFwiK2FdLGkuc2Nyb2xsTGVuZ3RoPWVbXCJzY3JvbGxcIitvXS1lW1wiY2xpZW50XCIrb10saS5vZmZzZXQubGVuZ3RoPTAsaS5vZmZzZXRbMF09MCxpLm9mZnNldFsxXT1pLnNjcm9sbExlbmd0aCxpLnByb2dyZXNzPWtMKDAsaS5zY3JvbGxMZW5ndGgsaS5jdXJyZW50KTtjb25zdCBsPXItYzt2YXIgdSxkO2kudmVsb2NpdHk9bD5PTD8wOih1PWkuY3VycmVudC1zLChkPWwpP3UqKDFlMy9kKTowKX1jb25zdCBQTD1lPT5lLE1MPShlLHQsbik9Pi1uKmUrbip0K2U7ZnVuY3Rpb24gTEwoZSx0KXtjb25zdCBuPWVbZS5sZW5ndGgtMV07Zm9yKGxldCByPTE7cjw9dDtyKyspe2NvbnN0IGk9a0woMCx0LHIpO2UucHVzaChNTChuLDEsaSkpfX1mdW5jdGlvbiBVTChlKXtjb25zdCB0PVswXTtyZXR1cm4gTEwodCxlLTEpLHR9Y29uc3QgeEw9ZT0+XCJudW1iZXJcIj09dHlwZW9mIGUsRkw9ZT0+QXJyYXkuaXNBcnJheShlKSYmIXhMKGVbMF0pLEJMPShlLHQsbik9Pntjb25zdCByPXQtZTtyZXR1cm4oKG4tZSklcityKSVyK2V9LFZMPShlLHQsbik9Pk1hdGgubWluKE1hdGgubWF4KG4sZSksdCksR0w9e0VudGVyOltbMCwxXSxbMSwxXV0sRXhpdDpbWzAsMF0sWzEsMF1dLEFueTpbWzEsMF0sWzAsMV1dLEFsbDpbWzAsMF0sWzEsMV1dfSxITD1lPT5cInN0cmluZ1wiPT10eXBlb2YgZSxXTD17c3RhcnQ6MCxjZW50ZXI6LjUsZW5kOjF9O2Z1bmN0aW9uIGpMKGUsdCxuPTApe2xldCByPTA7aWYodm9pZCAwIT09V0xbZV0mJihlPVdMW2VdKSxITChlKSl7Y29uc3QgdD1wYXJzZUZsb2F0KGUpO2UuZW5kc1dpdGgoXCJweFwiKT9yPXQ6ZS5lbmRzV2l0aChcIiVcIik/ZT10LzEwMDplLmVuZHNXaXRoKFwidndcIik/cj10LzEwMCpkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg6ZS5lbmRzV2l0aChcInZoXCIpP3I9dC8xMDAqZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDplPXR9cmV0dXJuIHhMKGUpJiYocj10KmUpLG4rcn1jb25zdCBaTD1bMCwwXTtmdW5jdGlvbiB6TChlLHQsbixyKXtsZXQgaT1BcnJheS5pc0FycmF5KGUpP2U6Wkwsbz0wLGE9MDtyZXR1cm4geEwoZSk/aT1bZSxlXTpITChlKSYmKGk9KGU9ZS50cmltKCkpLmluY2x1ZGVzKFwiIFwiKT9lLnNwbGl0KFwiIFwiKTpbZSxXTFtlXT9lOlwiMFwiXSksbz1qTChpWzBdLG4sciksYT1qTChpWzFdLHQpLG8tYX1jb25zdCBLTD17eDowLHk6MH07Y29uc3QgWUw9bmV3IFdlYWtNYXAscUw9bmV3IFdlYWtNYXAsWEw9bmV3IFdlYWtNYXAsUUw9ZT0+ZT09PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudD93aW5kb3c6ZTtmdW5jdGlvbiBKTChlLHQ9e30pe3Zhcntjb250YWluZXI6bj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnR9PXQscj0oMCxXcy5fX3Jlc3QpKHQsW1wiY29udGFpbmVyXCJdKTtsZXQgaT1YTC5nZXQobik7aXx8KGk9bmV3IFNldCxYTC5zZXQobixpKSk7Y29uc3Qgbz1OTCgpLGE9ZnVuY3Rpb24oZSx0LG4scj17fSl7Y29uc3QgaT1yLmF4aXN8fFwieVwiO3JldHVybnttZWFzdXJlOigpPT5mdW5jdGlvbihlLHQ9ZSxuKXtpZihuLngudGFyZ2V0T2Zmc2V0PTAsbi55LnRhcmdldE9mZnNldD0wLHQhPT1lKXtsZXQgcj10O2Zvcig7ciYmciE9ZTspbi54LnRhcmdldE9mZnNldCs9ci5vZmZzZXRMZWZ0LG4ueS50YXJnZXRPZmZzZXQrPXIub2Zmc2V0VG9wLHI9ci5vZmZzZXRQYXJlbnR9bi54LnRhcmdldExlbmd0aD10PT09ZT90LnNjcm9sbFdpZHRoOnQuY2xpZW50V2lkdGgsbi55LnRhcmdldExlbmd0aD10PT09ZT90LnNjcm9sbEhlaWdodDp0LmNsaWVudEhlaWdodCxuLnguY29udGFpbmVyTGVuZ3RoPWUuY2xpZW50V2lkdGgsbi55LmNvbnRhaW5lckxlbmd0aD1lLmNsaWVudEhlaWdodH0oZSxyLnRhcmdldCxuKSx1cGRhdGU6dD0+eyFmdW5jdGlvbihlLHQsbil7REwoZSxcInhcIix0LG4pLERMKGUsXCJ5XCIsdCxuKSx0LnRpbWU9bn0oZSxuLHQpLChyLm9mZnNldHx8ci50YXJnZXQpJiZmdW5jdGlvbihlLHQsbil7bGV0e29mZnNldDpyPUdMLkFsbH09bjtjb25zdHt0YXJnZXQ6aT1lLGF4aXM6bz1cInlcIn09bixhPVwieVwiPT09bz9cImhlaWdodFwiOlwid2lkdGhcIixzPWkhPT1lP2Z1bmN0aW9uKGUsdCl7bGV0IG49e3g6MCx5OjB9LHI9ZTtmb3IoO3ImJnIhPT10OylpZihyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpbi54Kz1yLm9mZnNldExlZnQsbi55Kz1yLm9mZnNldFRvcCxyPXIub2Zmc2V0UGFyZW50O2Vsc2UgaWYociBpbnN0YW5jZW9mIFNWR0dyYXBoaWNzRWxlbWVudCYmXCJnZXRCQm94XCJpbiByKXtjb25zdHt0b3A6ZSxsZWZ0OnR9PXIuZ2V0QkJveCgpO2ZvcihuLngrPXQsbi55Kz1lO3ImJlwic3ZnXCIhPT1yLnRhZ05hbWU7KXI9ci5wYXJlbnROb2RlfXJldHVybiBufShpLGUpOktMLGM9aT09PWU/e3dpZHRoOmUuc2Nyb2xsV2lkdGgsaGVpZ2h0OmUuc2Nyb2xsSGVpZ2h0fTp7d2lkdGg6aS5jbGllbnRXaWR0aCxoZWlnaHQ6aS5jbGllbnRIZWlnaHR9LGw9e3dpZHRoOmUuY2xpZW50V2lkdGgsaGVpZ2h0OmUuY2xpZW50SGVpZ2h0fTt0W29dLm9mZnNldC5sZW5ndGg9MDtsZXQgdT0hdFtvXS5pbnRlcnBvbGF0ZTtjb25zdCBkPXIubGVuZ3RoO2ZvcihsZXQgZT0wO2U8ZDtlKyspe2NvbnN0IG49ekwocltlXSxsW2FdLGNbYV0sc1tvXSk7dXx8bj09PXRbb10uaW50ZXJwb2xhdG9yT2Zmc2V0c1tlXXx8KHU9ITApLHRbb10ub2Zmc2V0W2VdPW59dSYmKHRbb10uaW50ZXJwb2xhdGU9ZnVuY3Rpb24oZSx0PVVMKGUubGVuZ3RoKSxuPVBMKXtjb25zdCByPWUubGVuZ3RoLGk9ci10Lmxlbmd0aDtyZXR1cm4gaT4wJiZMTCh0LGkpLGk9PntsZXQgbz0wO2Zvcig7bzxyLTImJiEoaTx0W28rMV0pO28rKyk7bGV0IGE9VkwoMCwxLGtMKHRbb10sdFtvKzFdLGkpKTtjb25zdCBzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEZMKGUpP2VbQkwoMCxlLmxlbmd0aCx0KV06ZX0obixvKTtyZXR1cm4gYT1zKGEpLE1MKGVbb10sZVtvKzFdLGEpfX0oVUwoZCksdFtvXS5vZmZzZXQpLHRbb10uaW50ZXJwb2xhdG9yT2Zmc2V0cz1bLi4udFtvXS5vZmZzZXRdKSx0W29dLnByb2dyZXNzPXRbb10uaW50ZXJwb2xhdGUodFtvXS5jdXJyZW50KX0oZSxuLHIpfSxub3RpZnk6bWYodCk/KCk9PnQobik6KG89dCxhPW5baV0sby5wYXVzZSgpLG8uZm9yRWFjaE5hdGl2ZSgoKGUse2Vhc2luZzp0fSk9Pnt2YXIgbixyO2lmKGUudXBkYXRlRHVyYXRpb24pdHx8KGUuZWFzaW5nPVBMKSxlLnVwZGF0ZUR1cmF0aW9uKDEpO2Vsc2V7Y29uc3QgaT17ZHVyYXRpb246MWUzfTt0fHwoaS5lYXNpbmc9XCJsaW5lYXJcIiksbnVsbD09PShyPW51bGw9PT0obj1lLmVmZmVjdCl8fHZvaWQgMD09PW4/dm9pZCAwOm4udXBkYXRlVGltaW5nKXx8dm9pZCAwPT09cnx8ci5jYWxsKG4saSl9fSkpLCgpPT57by5jdXJyZW50VGltZT1hLnByb2dyZXNzfSl9O3ZhciBvLGF9KG4sZSxvLHIpO2lmKGkuYWRkKGEpLCFZTC5oYXMobikpe2NvbnN0IGU9KCk9Pntjb25zdCBlPXBlcmZvcm1hbmNlLm5vdygpO2Zvcihjb25zdCBlIG9mIGkpZS5tZWFzdXJlKCk7Zm9yKGNvbnN0IHQgb2YgaSl0LnVwZGF0ZShlKTtmb3IoY29uc3QgZSBvZiBpKWUubm90aWZ5KCl9O1lMLnNldChuLGUpO2NvbnN0IHQ9UUwobik7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIixlLHtwYXNzaXZlOiEwfSksbiE9PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmcUwuc2V0KG4sKGw9ZSxtZihjPW4pPyhzPWMsQUwuYWRkKHMpLFJMfHwoUkw9KCk9Pntjb25zdCBlPXt3aWR0aDp3aW5kb3cuaW5uZXJXaWR0aCxoZWlnaHQ6d2luZG93LmlubmVySGVpZ2h0fSx0PXt0YXJnZXQ6d2luZG93LHNpemU6ZSxjb250ZW50U2l6ZTplfTtBTC5mb3JFYWNoKChlPT5lKHQpKSl9LHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsUkwpKSwoKT0+e0FMLmRlbGV0ZShzKSwhQUwuc2l6ZSYmUkwmJihSTD12b2lkIDApfSk6ZnVuY3Rpb24oZSx0KXtiTHx8XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFJlc2l6ZU9ic2VydmVyJiYoYkw9bmV3IFJlc2l6ZU9ic2VydmVyKENMKSk7Y29uc3Qgbj1wZihlKTtyZXR1cm4gbi5mb3JFYWNoKChlPT57bGV0IG49U0wuZ2V0KGUpO258fChuPW5ldyBTZXQsU0wuc2V0KGUsbikpLG4uYWRkKHQpLG51bGw9PWJMfHxiTC5vYnNlcnZlKGUpfSkpLCgpPT57bi5mb3JFYWNoKChlPT57Y29uc3Qgbj1TTC5nZXQoZSk7bnVsbD09bnx8bi5kZWxldGUodCksKG51bGw9PW4/dm9pZCAwOm4uc2l6ZSl8fG51bGw9PWJMfHxiTC51bm9ic2VydmUoZSl9KSl9fShjLGwpKSksdC5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsZSx7cGFzc2l2ZTohMH0pfXZhciBzLGMsbDtjb25zdCB1PVlMLmdldChuKSxkPXJlcXVlc3RBbmltYXRpb25GcmFtZSh1KTtyZXR1cm4oKT0+e3ZhciB0O1wiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJmUuc3RvcCgpLGNhbmNlbEFuaW1hdGlvbkZyYW1lKGQpO2NvbnN0IHI9WEwuZ2V0KG4pO2lmKCFyKXJldHVybjtpZihyLmRlbGV0ZShhKSxyLnNpemUpcmV0dXJuO2NvbnN0IGk9WUwuZ2V0KG4pO1lMLmRlbGV0ZShuKSxpJiYoUUwobikucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLGkpLG51bGw9PT0odD1xTC5nZXQobikpfHx2b2lkIDA9PT10fHx0KCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIixpKSl9fWNvbnN0ICRMPSgpPT4oe3Njcm9sbFg6RXIoMCksc2Nyb2xsWTpFcigwKSxzY3JvbGxYUHJvZ3Jlc3M6RXIoMCksc2Nyb2xsWVByb2dyZXNzOkVyKDApfSk7dmFyIGVVO2Z1bmN0aW9uIHRVKCl7cmV0dXJuIHRVPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sdFUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IG5VPWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLHRVKHtmaWxsOlwibm9uZVwiLHZpZXdCb3g6XCIwIDAgMTUgMTRcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLGVVfHwoZVU9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwiTTcuODQ1IDEyLjI5M2ExIDEgMCAxIDEtMS40MTQgMS40MTRsLTYtNmExIDEgMCAwIDEgMC0xLjQxNGw2LTZhMSAxIDAgMCAxIDEuNDE0IDEuNDE0TDMuNTUyIDZoOS42NDdjLjUxOSAwIC45MzkuNDQ4LjkzOSAxIDAgLjU1My0uNDIgMS0uOTM5IDFIMy41NTJsNC4yOTMgNC4yOTN6XCIsZmlsbDpcIiNmZmZcIn0pKSk7dmFyIHJVO2Z1bmN0aW9uIGlVKCl7cmV0dXJuIGlVPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0saVUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IG9VPWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLGlVKHtmaWxsOlwibm9uZVwiLHZpZXdCb3g6XCIwIDAgMTAgMTBcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLHJVfHwoclU9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwibTYuNzY4IDUgMi40NzUgMi40NzZhMS4yNSAxLjI1IDAgMCAxLTEuNzY4IDEuNzY3TDUgNi43NjggMi41MjUgOS4yNDNBMS4yNSAxLjI1IDAgMCAxIC43NTcgNy40NzZMMy4yMzIgNSAuNzU3IDIuNTI2QTEuMjUgMS4yNSAwIDAgMSAyLjUyNS43NThMNSAzLjIzMyA3LjQ3NS43NThhMS4yNSAxLjI1IDAgMCAxIDEuNzY4IDEuNzY4TDYuNzY4IDV6XCIsZmlsbDpcIiNmZmZcIn0pKSk7dmFyIGFVO2Z1bmN0aW9uIHNVKCl7cmV0dXJuIHNVPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sc1UuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IGNVPWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLHNVKHtmaWxsOlwibm9uZVwiLHZpZXdCb3g6XCIwIDAgMTUgMTRcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLGFVfHwoYVU9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwiTTcuMTU1IDEuNzA3QTEgMSAwIDEgMSA4LjU3LjI5M2w2IDZhMSAxIDAgMCAxIDAgMS40MTRsLTYgNmExIDEgMCAwIDEtMS40MTQtMS40MTRMMTEuNDQ4IDhIMS44MDFjLS41MTkgMC0uOTM5LS40NDgtLjkzOS0xIDAtLjU1My40Mi0xIC45MzktMWg5LjY0N0w3LjE1NSAxLjcwN3pcIixmaWxsOlwiI2ZmZlwifSkpKSxsVT17Y29udGFpbmVyOlwiTUFkem9cIixjb250ZW50OlwiQ1J4OEVcIixjb250ZW50Qm9keTpcIlVFWWhEXCIsY29udHJvbEJ1dHRvbjpcIk5wb2hiXCIscHJldkJ1dHRvbjpcIlYyaHhrXCIsbmV4dEJ1dHRvbjpcInhsbFJfXCIsc2VsZWN0ZWRMZW5zQ2lyY2xlOlwidUZiYUJcIixzZWxlY3RlZExlbnNDaXJjbGVQcmVzc2luZzpcIlZPdHFYXCIseEJ1dHRvbjpcIld0bHBnXCJ9O3ZhciB1VSxkVSxmVSxwVTtjb25zdCBtVT00OCxoVT0zZTMsdlU9ZT0+ZSsxO2Z1bmN0aW9uIGdVKGUpe2xldHtvbkNhcHR1cmVTbmFwSW1hZ2U6dH09ZTtjb25zdCBuPSgwLGQudXNlUmVmKShudWxsKSxbcixpXT0oMCxrLm8pKE0uRVkpLHtzY3JvbGxYOmF9PWZ1bmN0aW9uKHtjb250YWluZXI6ZSx0YXJnZXQ6dCxsYXlvdXRFZmZlY3Q6bj0hMCwuLi5yfT17fSl7Y29uc3QgaT1xZSgkTCk7cmV0dXJuKG4/RmU6ZC51c2VFZmZlY3QpKCgoKT0+SkwoKCh7eDplLHk6dH0pPT57aS5zY3JvbGxYLnNldChlLmN1cnJlbnQpLGkuc2Nyb2xsWFByb2dyZXNzLnNldChlLnByb2dyZXNzKSxpLnNjcm9sbFkuc2V0KHQuY3VycmVudCksaS5zY3JvbGxZUHJvZ3Jlc3Muc2V0KHQucHJvZ3Jlc3MpfSksey4uLnIsY29udGFpbmVyOihudWxsPT1lP3ZvaWQgMDplLmN1cnJlbnQpfHx2b2lkIDAsdGFyZ2V0OihudWxsPT10P3ZvaWQgMDp0LmN1cnJlbnQpfHx2b2lkIDB9KSksW10pLGl9KHtjb250YWluZXI6bn0pLHM9ZT0+e24uY3VycmVudD8uc2Nyb2xsVG8oe2xlZnQ6ZSptVX0pfSx7bGVuc2VzOmwsc2V0Q3VycmVudExlbnM6dSxyZW1vdmVMZW5zOmYsY3VycmVudExlbnNJZDpwfT1kTCgpLHtzaG93VG9hc3Q6bSxhY3RpdmVUb2FzdHM6aH09SmQoKSxnPSgwLGQudXNlTWVtbykoKCgpPT5bLi4uT2JqZWN0LmtleXMobCldKSxbbF0pLHk9KDAsZC51c2VNZW1vKSgoKCk9PlsuLi5PYmplY3QudmFsdWVzKGwpXSksW2xdKSxbRSxfXT0oMCxkLnVzZVN0YXRlKSghMSksW0ksU109KDAsZC51c2VTdGF0ZSkoITEpLFtiLFRdPSgwLGQudXNlU3RhdGUpKHA/dlUoSUwoKShnLHApKTowKSxDPSgwLGQudXNlQ2FsbGJhY2spKChlPT57Y29uc3QgdD12VShJTCgpKGcsZSkpO1QodCksXyghMCl9KSxbZ10pOygwLGQudXNlRWZmZWN0KSgoKCk9PihyJiZDKHIpLCgpPT57aSh2b2lkIDApfSkpLFtDLHIsaV0pO2NvbnN0IEE9MD09PWIsUj0oMCxkLnVzZUNhbGxiYWNrKSgoKCk9PntmKCksVCgwKX0pLFtmXSksTz0oZSx0KT0+e3Q8MHx8KGUuc3RvcFByb3BhZ2F0aW9uKCksVCh0KSxfKCEwKSl9LE49KCk9Pnt0Py4oe25hdmlnYXRpb25BY3Rpb246XCJFTlRFUl9GT1JFR1JPVU5EXCIsbGVuc0lkOnB9KX0sdz0oKT0+e0Jvb2xlYW4odCkmJlMoITApfSxEPSgpPT57Qm9vbGVhbih0KSYmUyghMSl9LFA9KDAsZC51c2VNZW1vKSgoKCk9PmVOKCkoKGU9PntpZihFKXJldHVybjtsZXQgdD1wYXJzZUludCgoZS9tVSkudG9GaXhlZCgwKSk7dD55Lmxlbmd0aCYmKHQ9eS5sZW5ndGgpLHQhPT1iP1QodCk6cyh0KX0pLDMwMCkpLFt5Lmxlbmd0aCxiLEVdKTsoMCxkLnVzZUVmZmVjdCkoKCgpPT57Y29uc3QgZT1hLm9uQ2hhbmdlKChlPT57UChlKX0pKTtyZXR1cm4oKT0+e2UoKX19KSxbYSxQXSk7Y29uc3QgTD0oMCxkLnVzZU1lbW8pKCgoKT0+ZU4oKSgoYXN5bmMgZT0+e2lmKDA9PT1lKWYoKTtlbHNle2NvbnN0IHQ9Z1tlLTFdO3RyeXthd2FpdCB1KHQpfWNhdGNoKGUpeygwLGMuVGIpKGUse3RhZ3M6e2NvbnRleHQ6XCJsZW5zZXNcIn0sZXh0cmE6e2FjdGlvbjpcImFwcGx5aW5nIGxlbnNcIixcImxlbnMgaWRcIjp0fX0pLG0oe3R5cGU6UWQuTmVnYXRpdmUsdGltZW91dDpoVSxrZXk6XCJzZXQtbGVucy1mYWlsXCIsY29udGVudDp1VXx8KHVVPSgwLG8uWikodi5aLHtpZDpcImxmblF0WFwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiRXJyb3IgbG9hZGluZyBsZW5zLlwifV19KSl9KSxSKCl9ZmluYWxseXtfKCExKX19fSksMzAwKSksW3UsZixnLF8sbSxSXSk7cmV0dXJuKDAsZC51c2VFZmZlY3QpKCgoKT0+e0woYikscyhiKX0pLFtiLExdKSxHSShrZC5OZXh0TGVucywoZT0+e08oZSxiKzEpfSkpLEdJKGtkLlByZXZMZW5zLChlPT57TyhlLGItMSl9KSksLTE9PT1iP251bGw6KDAsby5aKSh4cy5kaXYse2NsYXNzTmFtZTpsVS5jb250YWluZXJ9LHZvaWQgMCxiPjAmJigwLG8uWikoUGQse2NsYXNzTmFtZTooMCxRLlopKGxVLmNvbnRyb2xCdXR0b24sbFUucHJldkJ1dHRvbiksb25DbGljazplPT5PKGUsYi0xKSxob3RrZXk6a2QuUHJldkxlbnN9LHZvaWQgMCxkVXx8KGRVPSgwLG8uWikoblUse30pKSksKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6bFUuY29udGVudH0sdm9pZCAwLCgwLHEuanN4cykoeHMuZGl2LHtsYXlvdXRTY3JvbGw6ITAsY2xhc3NOYW1lOmxVLmNvbnRlbnRCb2R5LHJlZjpuLGNoaWxkcmVuOlsoMCxvLlopKGdMLHtpc1NlbGVjdGVkOkEsb25DYXB0dXJlU25hcEltYWdlOk4sb25TZWxlY3Q6UixvbkNhcHR1cmVEb3duOncsb25Nb3VzZVJlbGVhc2U6RH0pLHkubWFwKCgoZSx0KT0+KDAsby5aKSh2TCx7bGVuczplLG9uU2VsZWN0OkMsb25DYXB0dXJlU25hcEltYWdlOk4saXNTZWxlY3RlZDp2VSh0KT09PWIsb25DYXB0dXJlRG93bjp3LG9uTW91c2VSZWxlYXNlOkR9LHQpKSldfSksKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6KDAsUS5aKShsVS5zZWxlY3RlZExlbnNDaXJjbGUsSSYmbFUuc2VsZWN0ZWRMZW5zQ2lyY2xlUHJlc3NpbmcpLG9uQ2xpY2s6Tn0pLCFBJiYoMCxvLlopKFwiYnV0dG9uXCIse2NsYXNzTmFtZTpsVS54QnV0dG9uLG9uQ2xpY2s6ZT0+e2Uuc3RvcFByb3BhZ2F0aW9uKCksUigpfSx0eXBlOlwiYnV0dG9uXCJ9LHZvaWQgMCxmVXx8KGZVPSgwLG8uWikob1Use30pKSkpLGI8Zy5sZW5ndGgmJigwLG8uWikoUGQse2NsYXNzTmFtZTooMCxRLlopKGxVLmNvbnRyb2xCdXR0b24sbFUubmV4dEJ1dHRvbiksb25DbGljazplPT5PKGUsYisxKSxob3RrZXk6a2QuTmV4dExlbnN9LHZvaWQgMCxwVXx8KHBVPSgwLG8uWikoY1Use30pKSksKDAsby5aKShRSSx7YWN0aXZlVG9hc3RzOmh9KSl9ZnVuY3Rpb24geVUoZSl7Y29uc3R7bGVuc2VzOnR9PWRMKCksbj0oMCxrLm8pKFIuaXkpLHI9KDAsay5vKShNLmx6KTtyZXR1cm4gbi5zaXplJiZyJiYhQ2goKSh0KT8oMCxxLmpzeCkoZ1Usey4uLmV9KTplLmZhbGxiYWNrPz9udWxsfXZhciBFVTtmdW5jdGlvbiBfVSgpe3JldHVybiBfVT1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LF9VLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBJVT1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIixfVSh7d2lkdGg6XCI3MCVcIixoZWlnaHQ6XCI3MCVcIix2aWV3Qm94OlwiMCAwIDcwIDcwXCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLEVVfHwoRVU9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTM1IDQ1LjExOGMtNC41NiAwLTguMjctMy43MDgtOC4yNy04LjI2OCAwLTQuNTU5IDMuNzEtOC4yNjcgOC4yNy04LjI2NyA0LjU2MiAwIDguMjcxIDMuNzA4IDguMjcxIDguMjY3IDAgNC41Ni0zLjcxIDguMjY4LTguMjcgOC4yNjhaTTIxLjMxNyAzNi44NWMwLTcuNTQzIDYuMTM4LTEzLjY3OCAxMy42ODQtMTMuNjc4IDcuNTQ3IDAgMTMuNjg0IDYuMTM1IDEzLjY4NCAxMy42NzggMCA3LjU0Mi02LjEzNyAxMy42OC0xMy42ODQgMTMuNjgtNy41NDYgMC0xMy42ODQtNi4xMzgtMTMuNjg0LTEzLjY4Wk01Ni4yOSAxOC45MzRjLTIuMDUyLS44NjctNC4zOTgtMS42MDEtNi45OTQtMi4yMTRhMTguMDc5IDE4LjA3OSAwIDAgMC0uNjc1LTIuMDc4IDQuOTcgNC45NyAwIDAgMC0yLjcxOS0yLjc1NWMtMi4wNC0uODYxLTUuNTktMS44ODgtMTAuOS0xLjg4OC01LjMxMiAwLTguODYyIDEuMDI3LTEwLjkwNCAxLjg4OGE0Ljk3NSA0Ljk3NSAwIDAgMC0yLjcxNiAyLjc1NGMtLjI1OS42NS0uNDg3IDEuMzUtLjcgMi4xMDktMi41NzIuNTgzLTQuOTIgMS4zMTctNi45NzIgMi4xODQtMi4xODguOTIzLTMuODY1IDIuNjIzLTQuNzI1IDQuNzg0LTEuMTY1IDIuOTM1LTIuNTU2IDcuNzMtMi41NTYgMTMuOTE0IDAgNi4zNzYgMS40NyAxMS4yNzggMi43IDE0LjI2NmE4LjczOCA4LjczOCAwIDAgMCA0LjM3OCA0LjYxOEMxNi45MTQgNTguMTA1IDIzLjQwOSA2MCAzNS4wMDIgNjBjMTEuNTkgMCAxOC4wODQtMS44OTQgMjEuNDkzLTMuNDgzYTguNzQgOC43NCAwIDAgMCA0LjM3Ni00LjYxOGMxLjIzMS0yLjk4OCAyLjctNy44OSAyLjctMTQuMjY2IDAtNi4xODQtMS4zOS0xMC45OC0yLjU1Ni0xMy45MTItLjg1OC0yLjE2NS0yLjUzNy0zLjg2My00LjcyNS00Ljc4NlpcIixmaWxsOlwiI2ZmZlwifSkpKTt2YXIgU1U7ZnVuY3Rpb24gYlUoKXtyZXR1cm4gYlU9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxiVS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y29uc3QgVFU9ZT0+ZC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsYlUoe2ZpbGw6XCJub25lXCIsaGVpZ2h0OjEyLHZpZXdCb3g6XCIwIDAgMTIgMTJcIix3aWR0aDoxMix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLFNVfHwoU1U9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTMgNC44VjMuNzY4QzMgMi4yMTkgNC4zNSAxIDUuOTY2IDFjMS42MTggMCAyLjk2NyAxLjIyNyAyLjk2NyAyLjc2OXYxLjAzaC4zMzFjLjY4MyAwIDEuMjM2LjUwNiAxLjIzNiAxLjE0djMuNDE2YzAgLjYzMy0uNTUzIDEuMTQ1LTEuMjM2IDEuMTQ1SDIuNzI5Yy0uNjgzIDAtMS4yMjktLjUxMi0xLjIyOS0xLjE0NVY1LjkzOGMwLS42MzMuNTQ2LTEuMTM5IDEuMjMtMS4xMzl6bTEuNS0xLjAzMWMwLS43MjkuNjQyLTEuMzQ0IDEuNDY2LTEuMzQ0LjgyMyAwIDEuNDY3LjYyIDEuNDY3IDEuMzQ0djEuMDNINC41elwiLGZpbGw6XCIjZmZmXCIsZmlsbFJ1bGU6XCJldmVub2RkXCJ9KSkpO3ZhciBDVTtmdW5jdGlvbiBBVSgpe3JldHVybiBBVT1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LEFVLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBSVT1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIixBVSh7d2lkdGg6MjQsaGVpZ2h0OjI0LHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksQ1V8fChDVT1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNNyAxMmEyLjUgMi41IDAgMSAxLTUgMCAyLjUgMi41IDAgMCAxIDUgMFpNMTQuNSAxMmEyLjUgMi41IDAgMSAxLTUgMCAyLjUgMi41IDAgMCAxIDUgMFpNMjIgMTJhMi41IDIuNSAwIDEgMS01IDAgMi41IDIuNSAwIDAgMSA1IDBaXCIsZmlsbDpcIiNmZmZcIn0pKSk7dmFyIGtVO2Z1bmN0aW9uIE9VKCl7cmV0dXJuIE9VPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sT1UuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IE5VPWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLE9VKHt3aWR0aDo2MCxoZWlnaHQ6NjAsdmlld0JveDpcIjAgMCA2MCA2MFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSxrVXx8KGtVPWQuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLHtjeDozMCxjeTozMCxyOjI4LHN0cm9rZTpcIiNmZmZcIixzdHJva2VXaWR0aDo0fSkpKSx3VT1uLnArXCJkdy9hY2UwODgyYWQzNTdjNzEwNDMyYS5wbmdcIjt2YXIgRFU9big2MTYyKSxQVT1uLm4oRFUpO2NvbnN0IE1VPW4ucCtcImR3L2NiZTI2ZDA0MzYyZDVkMzJmODY2LnBuZ1wiLExVPW4ucCtcImR3L2U4ZmVjYTgyMzMzOGIzNTE1OTIyLnBuZ1wiO3ZhciBVVT1uKDMwOTEwKTtjb25zdCB4VT0oMCxvLlopKHYuWix7aWQ6XCJrTUt5alhcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIldlJ3JlIGFib3V0IHRvIGFzayBmb3IgcGVybWlzc2lvbiB0byBhY2Nlc3MgeW91ciBjYW1lcmFcIn1dfSksRlU9KDAsby5aKSh2Llose2lkOlwieHJRYThDXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJIZWFkcyBVcCFcIn1dfSksQlU9KDAsby5aKSh2Llose2lkOlwiZFFUbGtKXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJVaCBvaCFcIn1dfSksVlU9KDAsby5aKSh2Llose2lkOlwiQnpMWmE2XCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJTYWZhcmkgaGFzIGJsb2NrZWQgYWNjZXNzIHRvIHlvdXIgY2FtZXJhLCBzbyB5b3UgYXJlIHVuYWJsZSB0byB1c2UgdGhlIGNhbWVyYSBvciBtYWtlIHZpZGVvIGNhbGxzXCJ9XX0pLEdVPSgwLG8uWikodi5aLHtpZDpcImdUcGZrcVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiV2VsY29tZSB0byBTbmFwY2hhdCBvbiBTYWZhcmkhXCJ9XX0pLEhVPSgwLG8uWikoVmYse3ZhbHVlOm5ldyBEYXRlLHllYXI6XCJudW1lcmljXCIsbW9udGg6XCJsb25nXCIsZGF5OlwiMi1kaWdpdFwifSksV1U9KHYuWiwoMCxvLlopKHYuWix7aWQ6XCJCOVcyOStcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlRvcCB0aGluZ3MgdG8gZG9cIn1dfSkpLGpVPSgwLG8uWikodi5aLHtpZDpcImI5UFllZVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiQ2hhdCB3aXRoIHlvdXIgZnJpZW5kc1wifV19KSxaVT0oMCxvLlopKHYuWix7aWQ6XCJCbHBQYzJcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkNhbGwgJiBrZWVwIGluIHRvdWNoXCJ9XX0pLHpVPSgwLG8uWikodi5aLHtpZDpcInZvNWIzVFwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiV2hhdCB3ZSdyZSBzdGlsbCB3b3JraW5nIG9uXCJ9XX0pLEtVPSgwLG8uWikodi5aLHtpZDpcIlNuVXl5UFwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiTGVuc2VzIGZvciBTbmFwcyAmIENhbGxzXCJ9XX0pLFlVPSgwLG8uWikodi5aLHtpZDpcIkc4Z0g3Y1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiV2hhdCB5b3UgbmVlZCB0byBkb1wifV19KSxxVT0oMCxvLlopKHYuWix7aWQ6XCJFdFc3RVNcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIldoZW4gdGhlIHBvcC11cCBhcHBlYXJzIGFza2luZyBmb3IgYWNjZXNzIENsaWNrIEFsbG93IHRvIGVuYWJsZSB5b3VyIGNhbWVyYSBhbmQgbWljcm9waG9uZSBmb3IgU25hcGNoYXQgZm9yIFdlYlwifV19KSxYVT0oMCxvLlopKHYuWix7aWQ6XCIrVndXWjRcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkNoYW5nZSB5b3VyIFNhZmFyaSB3ZWJzaXRlIHNldHRpbmdzIHRvIHVzZSB0aGUgY2FtZXJhIHdpdGhvdXQgc2VlaW5nIHRoaXMgd2luZG93IGV2ZXJ5IHRpbWUgeW91IG9wZW4gaXRcIn1dfSksUVU9KDAsby5aKSh2Llose2lkOlwiMmJ0R000XCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJPcGVuIHlvdXIgU2FmYXJpIHNldHRpbmdzIGZvciB0aGlzIHdlYnNpdGVcIn1dfSksSlU9KDAsby5aKSh2Llose2lkOlwiUVlVTUV3XCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJDaGFuZ2UgdGhlIFx1MjAxOENhbWVyYVx1MjAxOSBhbmQgXHUyMDE4TWljcm9waG9uZVx1MjAxOSBzZXR0aW5ncyB0byBcdTIwMThBbGxvd1x1MjAxOVwifV19KSwkVT0oMCxvLlopKHYuWix7aWQ6XCJmZHYyc0lcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlJlZnJlc2ggdGhlIHBhZ2VcIn1dfSksZXg9KDAsby5aKSh2Llose2lkOlwibCsrc09KXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJ0eXBlIGZhc3RlciBvbiBhIGtleWJvYXJkIGFuZCBzZWFtbGVzc2x5IG1vdmUgYXdheSBmcm9tIHlvdXIgcGhvbmUgd2hlbiBub3RpZmljYXRpb25zIGdldCBkaXN0cmFjdGluZ1wifV19KSx0eD0oMCxvLlopKHYuWix7aWQ6XCI4dFJmV1ZcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIm5vIG5lZWQgdG8gYXdrd2FyZGx5IHByb3AgdXAgeW91ciBwaG9uZVwifV19KSxueD0oMCxvLlopKHYuWix7aWQ6XCJtQjRPL2dcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcInNlZSB5b3VyIGZyaWVuZHMgY2xlYXJseSBvbiBhIGxhcmdlciBjb21wdXRlciBzY3JlZW4gd2hpbGUgaGFuZHMtZnJlZVwifV19KSxyeD0oMCxvLlopKHYuWix7aWQ6XCJrT2tFbytcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcInRoaXMgZG9lc25cdTIwMTl0IHdvcmsgb24gU2FmYXJpIHlldC4gSWYgeW91IG11c3QgaGF2ZSBpdCBub3csIHRyeSBcIn0se3R5cGU6OCx2YWx1ZTpcImFcIixjaGlsZHJlbjpbe3R5cGU6MCx2YWx1ZTpcImFub3RoZXIgYnJvd3NlclwifV19XSx2YWx1ZXM6e2E6ZT0+KDAsby5aKShcImFcIix7dGFyZ2V0OlwiX2JsYW5rXCIsaHJlZjpcImh0dHBzOi8vaGVscC5zbmFwY2hhdC5jb20vaGMvYXJ0aWNsZXMvNzEyMTU3NTAwNTMzMi1Ib3ctdG8tQ2FsbC1TbmFwLWFuZC1DaGF0LWZyb20tU25hcGNoYXQtZm9yLVdlYlwifSx2b2lkIDAsZSl9fSksaXg9KDAsby5aKSh2Llose2lkOlwic3ZPR1ZuXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJjYWxscyB3aXRoIG1vcmUgdGhhbiBmaXZlIHBlb3BsZSBtYXkgYWN0IGEgbGl0dGxlIHdlaXJkXCJ9XX0pLG94PVt7aGVhZGVyOldVLGl0ZW1zOlt7Ym9sZFRleHQ6alUscmVndWxhclRleHQ6ZXh9LHtib2xkVGV4dDooMCxvLlopKHYuWix7aWQ6XCJkT0tWOEVcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlNuYXAgYW5kIGtlZXAgdXAgeW91ciBTbmFwc3RyZWFrc1wifV19KSxyZWd1bGFyVGV4dDp0eH0se2JvbGRUZXh0OlpVLHJlZ3VsYXJUZXh0Om54fV19LHtoZWFkZXI6elUsaXRlbXM6W3tib2xkVGV4dDpLVSxyZWd1bGFyVGV4dDpyeH0se2JvbGRUZXh0OigwLG8uWikodi5aLHtpZDpcIitwREpkQlwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiQmlnIGdyb3VwIGNhbGxzXCJ9XX0pLHJlZ3VsYXJUZXh0Oml4fV19XSxheD1be2hlYWRlcjpZVSxpdGVtczpbe3JlZ3VsYXJUZXh0OnFVfSx7cmVndWxhclRleHQ6WFV9XX1dLHN4PVt7aGVhZGVyOllVLGl0ZW1zOlt7cmVndWxhclRleHQ6UVV9LHtyZWd1bGFyVGV4dDpKVX0se3JlZ3VsYXJUZXh0OiRVfV19XSxjeD17c2Vjb25kYXJ5Q2xvc2VCdXR0b246XCJpNm5lSVwiLGRpc2FibGVkOlwiaWtTR0NcIixlbmFibGVkOlwic3c5cU5cIn0sbHg9e3N0YXJ0VXBNb2RhbDpcImhKYzh1XCIsY29udGVudDpcInBsNHA1XCIsaGVhZGVyOlwiZFM2REFcIixoZWFkZXJUZXh0OlwiZktPSTNcIix0aXRsZTpcIndUdjJNXCIsbW9kYWxCb2R5OlwiRDBaRVZcIixjbG9zZU1vZGFsQnV0dG9uOlwibkk0UTZcIixpbWFnZUNhcm91c2VsOlwic3J3Y1ZcIix3cmFwcGVyOlwiVnFPUUdcIixzbGlkZTpcIkNyZ0k5XCIsY2FwdGlvbjpcIkxZYXlqXCIsbGlzdHM6XCJGenZmUlwiLGxpc3RDb21wb25lbnQ6XCJUUldGYVwiLGxpc3RJdGVtOlwiRjJsSWJcIixmb290ZXI6XCJNYkdma1wiLGhlbHBMaW5rOlwiQUZ0MTFcIix3ZWJzaXRlTGluazpcImYwakpuXCJ9O3ZhciB1eCxkeCxmeCxweDtmdW5jdGlvbiBteChlKXtsZXR7aGVhZGVyOnQsaXRlbXM6bn09ZTtyZXR1cm4oMCxvLlopKFwic2VjdGlvblwiLHtjbGFzc05hbWU6bHgubGlzdENvbXBvbmVudH0sdm9pZCAwLCgwLG8uWikoXCJoMlwiLHt9LHZvaWQgMCx0KSwoMCxvLlopKFwidWxcIix7fSx2b2lkIDAsbi5tYXAoKChlLHQpPT4oMCxvLlopKFwibGlcIix7Y2xhc3NOYW1lOmx4Lmxpc3RJdGVtfSx0LGUuYm9sZFRleHQmJigwLG8uWikoXCJiXCIse30sdm9pZCAwLGUuYm9sZFRleHQsXCI6XCIpLFwiIFwiLGUucmVndWxhclRleHQpKSkpKX1mdW5jdGlvbiBoeChlKXtsZXR7aGVhZGluZzp0LHN1YkhlYWRpbmc6bixpbWFnZXM6cixjYXB0aW9uOmksbGlzdHM6YSxzZWNvbmRhcnlDbG9zZUJ1dHRvbjpzLG9uQ2xpY2tHb3RJdDpjLG9uQ2xpY2tPdXRzaWRlOmwsZGlzYWJsZVNlY29uZGFyeUNsaWNrOnV9PWU7Y29uc3QgZD0oMCxtZS5aKSgpO3JldHVybigwLE8uZWYpKEEudF8sKDAsTi5jMykoKT09PU4uTVguU0FGQVJJKT8oMCxvLlopKFJtLHt9LHZvaWQgMCwoMCxvLlopKE1ULHtvbkNsaWNrT3V0c2lkZTpsfSx2b2lkIDAsKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6bHguc3RhcnRVcE1vZGFsfSx2b2lkIDAsKDAsby5aKShcIm1haW5cIix7Y2xhc3NOYW1lOmx4LmNvbnRlbnR9LHZvaWQgMCwoMCxvLlopKFwiaGVhZGVyXCIse2NsYXNzTmFtZTpseC5oZWFkZXJ9LHZvaWQgMCwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpseC50aXRsZX0sdm9pZCAwLCgwLG8uWikoXCJoMVwiLHtjbGFzc05hbWU6bHguaGVhZGVyVGV4dH0sdm9pZCAwLHQpLCgwLG8uWikoXCJwXCIse30sdm9pZCAwLG4pKSwoMCxvLlopKFwiYnV0dG9uXCIse3R5cGU6XCJidXR0b25cIixjbGFzc05hbWU6bHguY2xvc2VNb2RhbEJ1dHRvbix0aXRsZTpkLmZvcm1hdE1lc3NhZ2Uoe2lkOlwib3FyMWprXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJDbG9zZSBtb2RhbFwifV19KSxvbkNsaWNrOmx9LHZvaWQgMCx1eHx8KHV4PSgwLG8uWikoZ1Ase30pKSkpLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOmx4Lm1vZGFsQm9keX0sdm9pZCAwLCgwLG8uWikodngse2ltYWdlczpyfSksaSYmKDAsby5aKShcInBcIix7Y2xhc3NOYW1lOmx4LmNhcHRpb259LHZvaWQgMCxpKSwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpseC5saXN0c30sdm9pZCAwLGEubWFwKCgoZSx0KT0+KDAsby5aKShcImRpdlwiLHt9LHQsKDAsby5aKShteCx7aGVhZGVyOmUuaGVhZGVyLGl0ZW1zOmUuaXRlbXN9KSkpKSkpKSwoMCxvLlopKFwiZm9vdGVyXCIse2NsYXNzTmFtZTpseC5mb290ZXJ9LHZvaWQgMCxzJiYoMCxvLlopKFwiYnV0dG9uXCIse3R5cGU6XCJidXR0b25cIixvbkNsaWNrOigpPT5jPy4oKT8/bD8uKCksZGlzYWJsZWQ6dSxjbGFzc05hbWU6KDAsUS5aKShjeC5zZWNvbmRhcnlDbG9zZUJ1dHRvbix1P2N4LmRpc2FibGVkOmN4LmVuYWJsZWQpfSx2b2lkIDAsIXUmJihkeHx8KGR4PSgwLG8uWikodi5aLHtpZDpcImlzMUFmT1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiR290IEl0IVwifV19KSkpLHUmJihmeHx8KGZ4PSgwLG8uWikoZVIse30pKSkpLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOmx4LmhlbHBMaW5rfSx2b2lkIDAscHh8fChweD0oMCxvLlopKHJNLHt9KSksKDAsby5aKSh2Llose2lkOlwic0lLdVpuXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJJZiB5b3UgZW5jb3VudGVyIGFueSBwcm9ibGVtcywgdmlzaXQgb3VyIFwifSx7dHlwZTo4LHZhbHVlOlwiYVwiLGNoaWxkcmVuOlt7dHlwZTowLHZhbHVlOlwiSGVscCBDZW50ZXJcIn1dfV0sdmFsdWVzOnthOmU9PigwLG8uWikoXCJzdHJvbmdcIix7fSx2b2lkIDAsKDAsby5aKShcImFcIix7Y2xhc3NOYW1lOmx4LndlYnNpdGVMaW5rLHRhcmdldDpcIl9ibGFua1wiLGhyZWY6XCJodHRwczovL2hlbHAuc25hcGNoYXQuY29tL2hjL2FydGljbGVzLzcxMjE1NzUwMDUzMzItSG93LXRvLUNhbGwtU25hcC1hbmQtQ2hhdC1mcm9tLVNuYXBjaGF0LWZvci1XZWJcIn0sdm9pZCAwLGUpKX19KSkpKSkpOm51bGx9ZnVuY3Rpb24gdngoZSl7bGV0e2ltYWdlczp0fT1lO3JldHVybigwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOnQubGVuZ3RoPjE/bHguaW1hZ2VDYXJvdXNlbDp2b2lkIDB9LHZvaWQgMCwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTp0Lmxlbmd0aD4xP2x4LndyYXBwZXI6dm9pZCAwfSx2b2lkIDAsdC5tYXAoKChlLHQpPT4oMCxvLlopKFwiZGl2XCIse30sdCxlKSkpKSl9Y29uc3QgZ3g9e2hlYWRlckltYWdlOlwiZEYxcWpcIn07ZnVuY3Rpb24geXgoZSl7bGV0e29uQ2xpY2tPdXRzaWRlOnQsZnJvbUhlYWRzVXA6bn09ZTtjb25zdFtyLGldPSgwLGsubykoUi5sbyksYT0oMCxvLlopKGh4LHtoZWFkaW5nOkJVLGNhcHRpb246VlUsaW1hZ2VzOlsoMCxvLlopKFwiaW1nXCIse2NsYXNzTmFtZTpneC5oZWFkZXJJbWFnZSxhbHQ6XCJPcGVuIFNhZmFyaSBtZW51IGFuZCBjbGljayBvbiBzZXR0aW5ncyBmb3Igd2ViLnNuYXBjaGF0LmNvbVwiLHNyYzpNVX0sXCJzbGlkZXJfaW1hZ2VfMVwiKSwoMCxvLlopKFwiaW1nXCIse2NsYXNzTmFtZTpneC5oZWFkZXJJbWFnZSxhbHQ6XCJBbGxvdyBDYW1lcmEgJiBNaWMgUGVybWlzc2lvbnNcIixzcmM6TFV9LFwic2xpZGVyX2ltYWdlXzJcIildLGxpc3RzOnN4LHNlY29uZGFyeUNsb3NlQnV0dG9uOiEwLG9uQ2xpY2tPdXRzaWRlOnQ/PygoKT0+aSgpKX0pO3JldHVybigwLE4uYzMpKCk9PT1OLk1YLlNBRkFSST9yPygwLG8uWikoUm0se30sdm9pZCAwLGEpOm4/YTpudWxsOm51bGx9ZnVuY3Rpb24gRXgoZSl7bGV0e3NldFNlbGZDYW1lcmFPblRpbWVkOnQsb25DbGlja091dHNpZGU6bixmcm9tV2VsY29tZTpyfT1lO2NvbnN0WyxpXT0oMCxrLm8pKFIuVkspLFthLHNdPSgwLGQudXNlU3RhdGUpKHZvaWQgMCksWyxjXT0oMCxrLm8pKFIuWkYpLFtsLHVdPSgwLGQudXNlU3RhdGUpKCExKTtyZXR1cm4oMCxkLnVzZUVmZmVjdCkoKCgpPT57cyhQVSgpKCgwLFVVLlgpKFtVVS5hMSxVVS5TX10pKSl9KSxbXSksKDAsZC51c2VFZmZlY3QpKCgoKT0+e2EmJmE+PTMmJihpPy4oITApLChhc3luYygpPT57dHJ5e2F3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHt2aWRlbzohMCxhdWRpbzohMH0pLHQ/LighMCl9Y2F0Y2goZSl7ZSBpbnN0YW5jZW9mIEVycm9yJiZcIk5vdEFsbG93ZWRFcnJvclwiPT09ZS5uYW1lJiYoMCxVVS5pTykoW1VVLmExLFVVLlNfXSksdSghMCl9ZmluYWxseXtpPy4oITEpfX0pKCkpfSksW2FdKSx2b2lkIDAhPT1hJiZhPDM/KDAsby5aKShoeCx7aGVhZGluZzpGVSxsaXN0czpheCxpbWFnZXM6WygwLG8uWikoXCJpbWdcIix7Y2xhc3NOYW1lOmd4LmhlYWRlckltYWdlLGFsdDpcIk9wZW4gU2FmYXJpIG1lbnUgYW5kIGNsaWNrIG9uIHNldHRpbmdzIGZvciB3ZWIuc25hcGNoYXQuY29tXCIsc3JjOk1VfSxcInNsaWRlcl9pbWFnZV8xXCIpLCgwLG8uWikoXCJpbWdcIix7Y2xhc3NOYW1lOmd4LmhlYWRlckltYWdlLGFsdDpcIkFsbG93IENhbWVyYSAmIE1pYyBQZXJtaXNzaW9uc1wiLHNyYzpMVX0sXCJzbGlkZXJfaW1hZ2VfMlwiKV0sY2FwdGlvbjp4VSxzZWNvbmRhcnlDbG9zZUJ1dHRvbjohMCxvbkNsaWNrT3V0c2lkZTpuLG9uQ2xpY2tHb3RJdDooKT0+e25hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHt2aWRlbzohMCxhdWRpbzohMH0pLnRoZW4oKGU9Pntmb3IoY29uc3QgdCBvZiBlLmdldFRyYWNrcygpKXQuc3RvcCgpO3J8fHQ/LighMCksYigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJzYWZhcmlfcGVybWlzc2lvbl9hbGxvd2VkXCJ9KSxjKFwiZ3JhbnRlZFwiKX0pKS5jYXRjaCgoZT0+e2IoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwic2FmYXJpX3Blcm1pc3Npb25fZGVuaWVkXCJ9KSxlIGluc3RhbmNlb2YgRXJyb3ImJlwiTm90QWxsb3dlZEVycm9yXCI9PT1lLm5hbWUmJigwLFVVLmlPKShbVVUuYTEsVVUuU19dKSxtTCgpLnRoZW4oKGU9PntjKGUuc3RhdGUpfSkpLHUoITApfSkpLmZpbmFsbHkoKCgpPT57aT8uKCExKSxuPy4oKX0pKSxpPy4oITApfX0pOmw/KDAsby5aKSh5eCx7b25DbGlja091dHNpZGU6bixmcm9tSGVhZHNVcDohMH0pOm51bGx9Y29uc3QgX3g9e2NvbnRhaW5lcjpcInFiSzg4XCIsaGludEltYWdlOlwieGNabGNcIix0ZXh0Q2FsbG91dDpcInlrVWVxXCIsaGVhZHNVcDpcInVjVkRoXCIsZGVzY3JpcHRpb246XCJOMEJPd1wiLGdvdEl0QnV0dG9uOlwicEdEYjlcIixtb2RhbFBhZGRpbmc6XCJiakdTaVwifTt2YXIgSXgsU3gsYngsVHgsQ3g7Y29uc3QgQXg9W3t2YWx1ZTpcInRpbnlcIixtYXhQaXhlbHM6MjAwLG1pblBpeGVsczowfV07ZnVuY3Rpb24gUngoZSl7bGV0e29uQ2xpY2tDb25maXJtOnQsb25DbGlja091dHNpZGU6bixzZXRDYW1lcmFPblRpbWVkOnJ9PWU7cmV0dXJuKDAsTi5jMykoKT09PU4uTVguU0FGQVJJPygwLG8uWikoRXgse29uQ2xpY2tPdXRzaWRlOm4sc2V0U2VsZkNhbWVyYU9uVGltZWQ6cn0pOigwLG8uWikoUm0se30sdm9pZCAwLCgwLG8uWikoT3gse29uQ2xpY2tDb25maXJtOnQsb25DbGlja091dHNpZGU6bixpbWdTcmM6ZkwsaGVhZHNVcERlc2NyaXB0aW9uOkl4fHwoSXg9KDAsby5aKSh2Llose2lkOlwiWkJrVExXXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJIZWFkcyB1cCFcIn1dfSkpLG1vZGFsTWFpbkRlc2NyaXB0aW9uOigwLG8uWikodi5aLHtpZDpcIkRERU55bVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiV2UncmUgYWJvdXQgdG8gYXNrIGZvciBwZXJtaXNzaW9uIHRvIFwifSx7dHlwZToxLHZhbHVlOlwiYnJcIn0se3R5cGU6MCx2YWx1ZTpcIiBhY2Nlc3MgeW91ciBjYW1lcmEgYW5kIG1pY3JvcGhvbmUuXCJ9XSx2YWx1ZXM6e2JyOlN4fHwoU3g9KDAsby5aKShcImJyXCIse30pKX19KSx1c2VjYXNlOlwiY2FtZXJhLW1pY1wifSkpfWZ1bmN0aW9uIGt4KGUpe2xldHtvbkNsaWNrQ29uZmlybTp0LG9uQ2xpY2tPdXRzaWRlOm59PWU7cmV0dXJuKDAsby5aKShPeCx7b25DbGlja0NvbmZpcm06dCxvbkNsaWNrT3V0c2lkZTpuLGltZ1NyYzp3VSxoZWFkc1VwRGVzY3JpcHRpb246Ynh8fChieD0oMCxvLlopKHYuWix7aWQ6XCJVaWdzZTBcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkhlYWRzIHVwIVwifV19KSksbW9kYWxNYWluRGVzY3JpcHRpb246KDAsby5aKSh2Llose2lkOlwiZ3ljNkkwXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJBbGxvdyB5b3VyIGJyb3dzZXIgdG8gc2VuZCBub3RpZmljYXRpb25zIFwifSx7dHlwZToxLHZhbHVlOlwiYnJcIn0se3R5cGU6MCx2YWx1ZTpcIiBhbmQga2VlcCB1cCB3aXRoIHlvdXIgbGF0ZXN0IGZyaWVuZHMuXCJ9XSx2YWx1ZXM6e2JyOlR4fHwoVHg9KDAsby5aKShcImJyXCIse30pKX19KSx1c2VjYXNlOlwibm90aWZpY2F0aW9uc1wifSl9ZnVuY3Rpb24gT3goZSl7bGV0e29uQ2xpY2tDb25maXJtOnQsb25DbGlja091dHNpZGU6bixpbWdTcmM6cixoZWFkc1VwRGVzY3JpcHRpb246aSxtb2RhbE1haW5EZXNjcmlwdGlvbjphLHVzZWNhc2U6c309ZTtjb25zdFtjLGxdPWNNKEF4KTtyZXR1cm4oMCxkLnVzZUVmZmVjdCkoKCgpPT57YigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6YCR7c31fbW9kYWxfc2hvd25gfSl9KSxbc10pLCgwLG8uWikoTVQse2NvbnRhaW5lckNsYXNzTmFtZTpfeC5tb2RhbFBhZGRpbmcsb25DbGlja091dHNpZGU6KCk9PntuKCksYigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6YCR7c31fbW9kYWxfZGlzbWlzc2VkYH0pfX0sdm9pZCAwLCgwLHEuanN4cykoXCJkaXZcIix7cmVmOmMsY2xhc3NOYW1lOl94LmNvbnRhaW5lcixjaGlsZHJlbjpbKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6X3guaGludEltYWdlfSx2b2lkIDAsKDAsby5aKShcImltZ1wiLHtzcmM6cixhbHQ6XCJoZWFkcy11cC1tb2RhbC1pbWFnZS1oaW50XCJ9KSksXCJ0aW55XCIhPT1sJiYoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpfeC50ZXh0Q2FsbG91dH0sdm9pZCAwLCgwLG8uWikoXCJzcGFuXCIse2NsYXNzTmFtZTpfeC5oZWFkc1VwfSx2b2lkIDAsaSksKDAsby5aKShcInNwYW5cIix7Y2xhc3NOYW1lOl94LmRlc2NyaXB0aW9ufSx2b2lkIDAsYSksKDAsby5aKShQZCx7Y2xhc3NOYW1lOl94LmdvdEl0QnV0dG9uLG9uQ2xpY2s6KCk9Pnt0KCksYigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6YCR7c31fbW9kYWxfY29uZmlybWVkYH0pfX0sdm9pZCAwLEN4fHwoQ3g9KDAsby5aKSh2Llose2lkOlwianBxZkVKXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJHb3QgaXQhXCJ9XX0pKSkpXX0pKX1jb25zdCBOeD17Y29udGVudDpcImxuQWVUXCIsY29udGFpbmVyOlwiQ1lRWlBcIixsb2FkaW5nOlwibnhHazRcIix0b2FzdENvbnRhaW5lcjpcIk9xUjhWXCIsbWlycm9yOlwiVW5HQTdcIn07dmFyIHd4LER4O2NvbnN0IFB4PTNlNDtmdW5jdGlvbiBNeChlKXtsZXR7c3RyZWFtOnQsY2hpbGRyZW46bixjbGFzc05hbWU6cixwYXJlbnRSZWY6aSxtaXJyb3I6YX09ZTtjb25zdFtzLGNdPSgwLGQudXNlU3RhdGUpKCExKSxsPSgwLGsubykoUi5UcSksdT0oMCxkLnVzZVJlZikoKSxmPSgwLGQudXNlUmVmKSgpO2xldCBwPSgwLGQudXNlUmVmKShudWxsKTtpJiYocD1pKTtjb25zdCBtPSFzJiYhbDsoMCxkLnVzZUVmZmVjdCkoKCgpPT4odS5jdXJyZW50fHwodS5jdXJyZW50PXBlcmZvcm1hbmNlLm5vdygpKSxmLmN1cnJlbnR8fChmLmN1cnJlbnQ9d2luZG93LnNldFRpbWVvdXQoKCgpPT57c3x8YigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJMb2NhbFZpZGVvLmNhbWVyYVJlYWR5VGltZW91dFwifSl9KSxQeCkpLHMmJihjbGVhclRpbWVvdXQoZi5jdXJyZW50KSxiKCkuYWRkVGltZXIoe21ldHJpY3NOYW1lOlwiTG9jYWxWaWRlby5jYW1lcmFSZWFkeUxhdGVuY3lcIixtaWxsaVNlYzpNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLm5vdygpLXUuY3VycmVudCl9KSksKCk9PntjbGVhclRpbWVvdXQoZi5jdXJyZW50KX0pKSxbcyx1LGZdKSx1dSgpLCgwLGQudXNlRWZmZWN0KSgoKCk9PntwLmN1cnJlbnQmJihwLmN1cnJlbnQuc3JjT2JqZWN0PXR8fG51bGwsdD8uYWN0aXZlJiZjKCEwKSl9KSxbdF0pO2NvbnN0e3Nob3dUb2FzdDpoLGFjdGl2ZVRvYXN0czpnLGhpZGVUb2FzdDp5fT1KZCgpO3JldHVybigwLGQudXNlRWZmZWN0KSgoKCk9PntsPyh5KFwibG9jYWwtdmlkZW8tZXJyb3JcIiksYigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJtZWRpYV9sb2NhbFZpZGVvX3RvYXN0X2Rpc3BsYXllZEVycm9yXCJ9KSxoKHtrZXk6XCJsb2NhbC12aWRlby1lcnJvclwiLHR5cGU6UWQuTmVnYXRpdmUsdGltZW91dDpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksY29udGVudDp3eHx8KHd4PSgwLG8uWikodi5aLHtpZDpcIkFVRzQxM1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiQ291bGQgbm90IGxvYWQgY2FtZXJhLlwifV19KSl9KSk6eShcImxvY2FsLXZpZGVvLWVycm9yXCIpfSksW2wsaCx5XSksKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6TnguY29udGFpbmVyfSx2b2lkIDAsbSYmKER4fHwoRHg9KDAsby5aKShsaCx7fSkpKSwoMCxvLlopKFFJLHtjbGFzc05hbWU6TngudG9hc3RDb250YWluZXIsYWN0aXZlVG9hc3RzOmcsdG9wT2Zmc2V0OjEyfSksKDAscS5qc3gpKHhzLnZpZGVvLHtpZDpcImxvY2FsLXZpZGVvXCIsY2xhc3NOYW1lOigwLFEuWikocixOeC5jb250ZW50LG0mJk54LmxvYWRpbmcsYSYmTngubWlycm9yKSxyZWY6cCxhdXRvUGxheTohMCxvblBsYXlpbmc6KCk9PmMoITApfSksbil9dmFyIEx4O2Z1bmN0aW9uIFV4KCl7cmV0dXJuIFV4PU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sVXguYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IHh4PWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLFV4KHt3aWR0aDoyMixoZWlnaHQ6MjIsdmlld0JveDpcIjAgMCAyMiAyMlwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSxMeHx8KEx4PWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk0xNS44MzkgNS44NzVhLjgzMS44MzEgMCAwIDAtMS4xMzQtMS4yMTZsLTEuNTAyIDEuNGEzLjA4NSAzLjA4NSAwIDAgMC0uODIzLS4zNDdsLS4xMTEtLjAyOWExMi44OCAxMi44OCAwIDAgMC02LjQ1OCAwbC0uMTEuMDI5YTMuMDg4IDMuMDg4IDAgMCAwLTIuMjEyIDIuMjAzIDEyLjExMyAxMi4xMTMgMCAwIDAgMCA2LjE2OGMuMDcuMjY1LjE3My41MTYuMzA1Ljc0N2wtMS4zODkgMS4yOTVBLjgzMS44MzEgMCAxIDAgMy41NCAxNy4zNGwxMi4zLTExLjQ2NlptLTEuMDQgMi45NzYtOC4xOTggNy42NDJjMS44NzYuMzYyIDMuODEyLjMwMyA1LjY2OC0uMTc4bC4xMTEtLjAyOWEzLjA4OCAzLjA4OCAwIDAgMCAyLjIxMi0yLjIwM2MuNDUtMS43MTIuNTItMy40OTguMjA3LTUuMjMyWm0xLjUwNi45NjJhMS4wNzIgMS4wNzIgMCAwIDEgLjUyMS0uOTY1bDEuMjQyLS43MzguOTkxLS41OWEuNTMuNTMgMCAwIDEgLjguNDU1VjE0LjAyNGEuNTMuNTMgMCAwIDEtLjguNDU1bC0yLjIzMy0xLjMyOGExLjA3MiAxLjA3MiAwIDAgMS0uNTItLjk2NGMuMDE0LS4zNjkuMDI4LS44MjkuMDI4LTEuMTg3IDAtLjM2LS4wMTQtLjgyLS4wMjktMS4xODdaXCIsZmlsbDpcIiMwMDBcIn0pKSk7dmFyIEZ4O2Z1bmN0aW9uIEJ4KCl7cmV0dXJuIEJ4PU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sQnguYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IFZ4PWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLEJ4KHt3aWR0aDoyOCxoZWlnaHQ6Mjgsdmlld0JveDpcIjAgMCAyNSAyMVwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSxGeHx8KEZ4PWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIk02LjA0NyA0LjUzNGEzLjU0NyAzLjU0NyAwIDAgMC0yLjU2MiAyLjUwOCAxMy45MTUgMTMuOTE1IDAgMCAwIDAgNy4zMjIgMy41NDcgMy41NDcgMCAwIDAgMi41NjIgMi41MDhsLjI5NS4wNzRjMi41NC42MzUgNS4xOTkuNjM1IDcuNzQgMGwuMjk1LS4wNzRhMy41NDcgMy41NDcgMCAwIDAgMi41NjEtMi41MDggMTMuOTEzIDEzLjkxMyAwIDAgMCAwLTcuMzIyIDMuNTQ3IDMuNTQ3IDAgMCAwLTIuNTYxLTIuNTA4bC0uMjk2LS4wNzRhMTUuOTU1IDE1Ljk1NSAwIDAgMC03LjczOSAwbC0uMjk1LjA3NFpNMTkuMDM4IDkuNDRhMS40NDcgMS40NDcgMCAwIDEgLjcyMi0xLjMxM2wxLjQxMy0uODExIDEuMTA2LS42MzVhLjcxMy43MTMgMCAwIDEgMS4wNjguNjE4djYuODA4YS43MTMuNzEzIDAgMCAxLTEuMDY4LjYxOGwtMi41Mi0xLjQ0NmExLjQ0NyAxLjQ0NyAwIDAgMS0uNzItMS4zMTNjLjAxNS0uNDA3LjAzLS44ODMuMDMtMS4yNjMgMC0uMzgtLjAxNS0uODU2LS4wMy0xLjI2M1pcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KSkpO3ZhciBHeDtmdW5jdGlvbiBIeCgpe3JldHVybiBIeD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LEh4LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBXeD1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIixIeCh7d2lkdGg6MTYsaGVpZ2h0OjE2LHZpZXdCb3g6XCIwIDAgMTYgMTZcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksR3h8fChHeD1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNC4zMTkgOS42NWEuODc1Ljg3NSAwIDAgMCAxLjIzNyAwTDggNy4yMDZsMi40NDQgMi40NDRhLjg3NS44NzUgMCAxIDAgMS4yMzctMS4yMzdMOC42MiA1LjM1YS44NzUuODc1IDAgMCAwLTEuMjM4IDBMNC4zMiA4LjQxM2EuODc1Ljg3NSAwIDAgMCAwIDEuMjM3WlwiLGZpbGw6XCIjZmZmXCJ9KSkpO3ZhciBqeDtmdW5jdGlvbiBaeCgpe3JldHVybiBaeD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LFp4LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCB6eD1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIixaeCh7d2lkdGg6MjAsaGVpZ2h0OjE2LHZpZXdCb3g6XCIwIDAgMjAgMTZcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksanh8fChqeD1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJtMTEuNjc3IDguNDY4LS4wMS0uMDA5YTQuMzM3IDQuMzM3IDAgMCAxLS4xMzEtLjEzYy0uMjI3LS4yMzgtLjI4Ni0uMzQxLS40MTYtLjUzLS43NjctMS4xMDItMS4yNTMtMi41OC0xLjI1My0zLjY4MkM5Ljg2NyAyLjExOSAxMS40NjEuNSAxMy40MjcuNXMzLjU2IDEuNjIgMy41NiAzLjYxN2MwIDEuMzI0LS43IDMuMTg5LTEuNzQ2IDQuMjk1YTIuMzkyIDIuMzkyIDAgMCAxLS4wODQuMDg1LjcyNC43MjQgMCAwIDAgLjAyMSAxLjA2NGMuMzMzLjI5NC43OTYuNjEzIDEuNDY3Ljk0Mi41OTcuMjkyIDEuMjkyLjYzNiAxLjgwMSAxLjAwMy4xMy4wOTMuMjU2LjE4OS4zOC4yODcuMjE2LjIwMy4zNjIuMzY0LjQ0LjQ4MmExLjk1NiAxLjk1NiAwIDAgMS0uMTQ2IDIuMzMzIDIuMDcgMi4wNyAwIDAgMS0xLjE5Ny42OThjLTEuMzQ0LjI1OC0yLjkzNy4zNzMtNC40OTUuMzczLTEuMzc0IDAtMi43NjQtLjA4OS0zLjk3My0uMjlhOS4yNTQgOS4yNTQgMCAwIDEtLjYzOC0uMTU4Yy0xLjEtLjI5Ni0xLjc0Ni0xLjQwNS0xLjQ0MS0yLjQ3NS4xMDgtLjM4LjMyOS0uNzIuNjM1LS45OGE3LjYxIDcuNjEgMCAwIDEgMi4yLTEuMjczYy43NTItLjI4MiAxLjIxLS42NCAxLjUyOC0xYS43MzMuNzMzIDAgMCAwLS4wNjItMS4wMzVaTTUuMDYgNi4yNjVoMi4wNjVhMS4wMDggMS4wMDggMCAxIDEgMCAyLjAxN0g1LjA2djIuMTI1YS45OTQuOTk0IDAgMCAxLTEuOTg4IDBWOC4yODJIMS4wMDhhMS4wMDggMS4wMDggMCAwIDEgMC0yLjAxN2gyLjA2NVY0LjE0MWEuOTk0Ljk5NCAwIDAgMSAxLjk4OCAwdjIuMTI0WlwiLGZpbGw6XCIjNEU1NjVGXCJ9KSkpO3ZhciBLeDtmdW5jdGlvbiBZeCgpe3JldHVybiBZeD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LFl4LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBxeD1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIixZeCh7d2lkdGg6MjgsaGVpZ2h0OjI4LHZpZXdCb3g6XCIwIDAgMjkgMjlcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksS3h8fChLeD1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNOS42MjUgOC4zNzVhNC4zNzUgNC4zNzUgMCAwIDEgOC43NC0uMjk4bDMuMzk4LTMuMDU5YS45ODQuOTg0IDAgMSAxIDEuMzE3IDEuNDY0bC0xNy41IDE1Ljc1YS45ODQuOTg0IDAgMSAxLTEuMzE3LTEuNDY0bDIuNzIzLTIuNDVhNy45NDkgNy45NDkgMCAwIDEtLjk3LTMuODE4Ljk4NC45ODQgMCAxIDEgMS45NjggMGMwIC44NzMuMTg2IDEuNzAyLjUyIDIuNDUxbDEuMzEtMS4xNzhhNC4zNzQgNC4zNzQgMCAwIDEtLjE4OS0xLjI3M1Y4LjM3NVptMi44MiAxMC4yMTYgNS45My01LjMzN1YxNC41YTQuMzc1IDQuMzc1IDAgMCAxLTUuOTMgNC4wOVptLTEuMzI0IDEuMTkyLTEuNTI5IDEuMzc1YTcuOTM2IDcuOTM2IDAgMCAwIDMuNDI0IDEuMjY2djMuMDE0YS45ODQuOTg0IDAgMCAwIDEuOTY4IDB2LTMuMDE0YTcuOTg2IDcuOTg2IDAgMCAwIDctNy45MjQuOTg0Ljk4NCAwIDEgMC0xLjk2OCAwIDYuMDE2IDYuMDE2IDAgMCAxLTguODk1IDUuMjgzWlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pKSk7dmFyIFh4O2Z1bmN0aW9uIFF4KCl7cmV0dXJuIFF4PU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sUXguYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IEp4PWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLFF4KHt3aWR0aDoyOCxoZWlnaHQ6Mjgsdmlld0JveDpcIjAgMCAyMyAyMFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSxYeHx8KFh4PWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIk03LjczMiA0LjgxNmEzLjUxNiAzLjUxNiAwIDEgMSA3LjAzIDB2NC45MjFhMy41MTYgMy41MTYgMCAxIDEtNy4wMyAwVjQuODE2Wk01LjYyIDguOTQ2Yy40MzcgMCAuNzkxLjM1NS43OTEuNzkxYTQuODM0IDQuODM0IDAgMCAwIDQuODI0IDQuODM0aC4wMmE0LjgzNCA0LjgzNCAwIDAgMCA0LjgyNC00LjgzNC43OTEuNzkxIDAgMCAxIDEuNTgyIDAgNi40MTcgNi40MTcgMCAwIDEtNS42MjUgNi4zNjh2Mi40MjFhLjc5MS43OTEgMCAwIDEtMS41ODIgMHYtMi40MkE2LjQxNyA2LjQxNyAwIDAgMSA0LjgzIDkuNzM2YzAtLjQzNi4zNTQtLjc5Ljc5MS0uNzlaXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSkpKTt2YXIgJHg7ZnVuY3Rpb24gZUYoKXtyZXR1cm4gZUY9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxlRi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y29uc3QgdEY9ZT0+ZC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsZUYoe3dpZHRoOjIwLGhlaWdodDoxNix2aWV3Qm94OlwiMCAwIDIwIDE2XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLCR4fHwoJHg9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTQuMDEzLjEyNWEzLjIgMy4yIDAgMCAwLTMuMiAzLjJ2OS4zNWEzLjIgMy4yIDAgMCAwIDMuMiAzLjJoMTEuOTc1YTMuMiAzLjIgMCAwIDAgMy4yLTMuMnYtOS4zNWEzLjIgMy4yIDAgMCAwLTMuMi0zLjJINC4wMTFaTTguMyA3Ljk2MWwxLjAzLTEuMDN2NC4yMTJhLjkyLjkyIDAgMCAwIDEuODM4IDBWNi45MzFsMS4wMyAxLjAzYS45Mi45MiAwIDAgMCAxLjMtMS4zbC0yLjYtMi41OThhLjkyLjkyIDAgMCAwLTEuMjk5IDBMNy4wMDEgNi42NjJhLjkxOC45MTggMCAxIDAgMS4zIDEuMjk5WlwiLGZpbGw6XCIjZmZmXCJ9KSkpO3ZhciBuRixyRj1uKDUyNjI4KSxpRj1uLm4ockYpO2Z1bmN0aW9uIG9GKCl7cmV0dXJuIG9GPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sb0YuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IGFGPWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLG9GKHt3aWR0aDoxNSxoZWlnaHQ6MTAsdmlld0JveDpcIjAgMCAxNSAxMFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSxuRnx8KG5GPWQuY3JlYXRlRWxlbWVudChcInBhdGhcIix7ZDpcIk0xMy4yMTUgMi4xM2gxLjEwM2EuNTI3LjUyNyAwIDAgMSAwIDEuMDUzaC0xLjEwM3YxLjEwMmEuNTI3LjUyNyAwIDEgMS0xLjA1MyAwVjMuMTgzaC0xLjEwM2EuNTI3LjUyNyAwIDAgMSAwLTEuMDU0aDEuMTAzVjEuMDI3YS41MjcuNTI3IDAgMCAxIDEuMDUzIDB2MS4xMDJaTTcuMjczIDcuNTdjLjAyOC4wMTUuMDU4LjAyOS4wODkuMDQzLjI5MS4xMzUuNjMuMjkzLjg4LjQ2My4wNjIuMDQzLjEyNC4wODcuMTg1LjEzMmExLjY5NyAxLjY5NyAwIDAgMSAuMjE1LjIyMi44NjguODY4IDAgMCAxLS4wNzEgMS4wNzZjLS4xNDkuMTY3LS4zNTYuMjgtLjU4NS4zMjJDNy4zMjkgOS45NDcgNi41NSAxMCA1Ljc5IDEwYy0uNjcxIDAtMS4zNS0uMDQxLTEuOTQtLjEzNGE0Ljc0NiA0Ljc0NiAwIDAgMS0uMzEyLS4wNzJjLS41MzgtLjEzNy0uODU0LS42NDgtLjcwNS0xLjE0MmEuODkyLjg5MiAwIDAgMSAuMTIxLS4yNS45NTUuOTU1IDAgMCAxIC4xOS0uMjAyYy4zMjctLjI2MS43MTctLjQ2IDEuMDc1LS41ODdsLjEwMi0uMDM5YTEuNzY1IDEuNzY1IDAgMCAwIC42NDQtLjQyMmMuMDU5LS4wNjMuMTMtLjE1NS4yMTMtLjI3NmwtLjIzNS0uMTkzYTIuMTAzIDIuMTAzIDAgMCAxLS4wNzctLjA3M2MtLjExMS0uMTEtLjE0LS4xNTctLjIwNC0uMjQ0YTMuNDY0IDMuNDY0IDAgMCAxLS40ODgtLjk3NiAyLjQ4OCAyLjQ4OCAwIDAgMS0uMTIzLS43MjJDNC4wNSAzLjc0NyA0LjgyOSAzIDUuNzkgM2MuOTYgMCAxLjczOC43NDcgMS43MzggMS42NjggMCAuNjEtLjM0MiAxLjQ3LS44NTIgMS45OGExLjE0NiAxLjE0NiAwIDAgMS0uMDQxLjA0LjMyNi4zMjYgMCAwIDAgLjAxLjQ5Yy4xNDcuMTI0LjM0Ny4yNTYuNjI4LjM5M1ptLjM3Ni0uNDNhMi41MSAyLjUxIDAgMCAxIC41MTYtLjI1MiAxLjE3NiAxLjE3NiAwIDAgMCAuNDg3LS4zMDUuMjAxLjIwMSAwIDAgMC0uMDIzLS4yOSAxLjM0NSAxLjM0NSAwIDAgMS0uMDUtLjA0OGMtLjA3LS4wNy0uMDktLjEtLjEzLS4xNTZhMi4yMTggMi4yMTggMCAwIDEtLjMxMy0uNjI1IDEuNTk0IDEuNTk0IDAgMCAxLS4wNzktLjQ3OGMuMDA4LS4wNTcuMDEzLS4xMTMuMDE3LS4xNjguMDktLjUwMy41NDctLjg4NSAxLjA5Ny0uODg1LjYxNSAwIDEuMTE0LjQ3OSAxLjExNCAxLjA2OSAwIC4zOS0uMjIuOTQyLS41NDcgMS4yNjhhLjcyNi43MjYgMCAwIDEtLjAyNi4wMjUuMjA5LjIwOSAwIDAgMCAuMDA3LjMxNWMuMTA0LjA4Ny4yNDkuMTguNDU5LjI3OC4xODYuMDg2LjQwNC4xODguNTYzLjI5NmwuMTE5LjA4NWMuMDY4LjA2LjExMy4xMDcuMTM4LjE0MmEuNTU2LjU1NiAwIDAgMS0uMDQ2LjY4OS42NTcuNjU3IDAgMCAxLS4zNzQuMjA3IDguMDM1IDguMDM1IDAgMCAxLTEuMzI2LjExIDEuNDM5IDEuNDM5IDAgMCAwLS4xNTctLjI5OCAxLjg1MiAxLjg1MiAwIDAgMC0uMzA0LS4zMjMgNC42ODggNC42ODggMCAwIDAtLjI0LS4xNzVjLS4yMzEtLjE1Ny0uNDY2LS4yNzktLjkwMi0uNDgxWk0yLjMzMiA4LjQxNmE4LjA4NSA4LjA4NSAwIDAgMS0xLjE1OC0uMDg1IDMuMDMgMy4wMyAwIDAgMS0uMi0uMDQ3Yy0uMzQ0LS4wODctLjU0Ni0uNDE1LS40NS0uNzNhLjU5LjU5IDAgMCAxIC4xOTgtLjI5Yy4yMS0uMTY4LjQ2LS4yOTUuNjg5LS4zNzZhMS4xNzYgMS4xNzYgMCAwIDAgLjQ4NC0uMzAyLjIwNC4yMDQgMCAwIDAtLjAyLS4yOTQgMS4zNDUgMS4zNDUgMCAwIDEtLjA1LS4wNDZjLS4wNy0uMDctLjA5LS4xMDEtLjEzLS4xNTdhMi4yMTkgMi4yMTkgMCAwIDEtLjMxMy0uNjI1IDEuNTk0IDEuNTk0IDAgMCAxLS4wNzktLjQ2MmMwLS41OS40OTktMS4wNjkgMS4xMTQtMS4wNjkuNTI5IDAgLjk3Mi4zNTQgMS4wODUuODI4LjAwNC4wOTIuMDE0LjE4Ny4wMjguMjgzLS4wMTUuMzg4LS4yMy45MTEtLjU0NiAxLjIyNmEuNzI2LjcyNiAwIDAgMS0uMDI2LjAyNS4yMDkuMjA5IDAgMCAwIC4wMDcuMzE1Yy4xMDQuMDg3LjI0OS4xOC40NTkuMjc4LjE2LjA3NC4zNDMuMTYuNDkyLjI1LS40LjE1NS0uNzkuMzcyLTEuMTE2LjYzM2ExLjQ3NyAxLjQ3NyAwIDAgMC0uNDY4LjY0NVpcIixmaWxsOlwiIzJDMzEzN1wifSkpKSxzRj17Y29udGFpbmVyOlwidHZ1bDhcIixoZWFkZXJDb250YWluZXI6XCJ6WkZSU1wiLGJlc3RGcmllbmRzTGlzdDpcIlV4Y21ZXCIsbmV3R3JvdXBzTGlzdDpcIlRJQm81XCIsbmV3RXJyb3JNZXNzYWdlOlwiTlhuaG5cIixjcmVhdGVDb252ZXJzYXRpb25MaXN0Olwiczdsb1NcIixiYWNrQnV0dG9uOlwiRjdoVkVcIixzaG93QmFja0J1dHRvbldoZW5Db21wYWN0Qml0bW9qaTpcIkRqUEJrXCIsaGVhZGVyTGFiZWw6XCJJQ3VpblwiLGNlbGxIZWFkZXJMYWJlbDpcIkdSWjI3XCIsZ3JvdXBDb252ZXJzYXRpb25MYWJlbENvbnRhaW5lcjpcIndlZENRXCIsZ3JvdXBDb252ZXJzYXRpb25MYWJlbDpcIkVBTVp6XCIsZXJyb3JNZXNzYWdlQ29udGFpbmVyOlwiZEhPeE5cIixwcmltYXJ5QnV0dG9uQ29udGFpbmVyOlwieGpGbmVcIixwcmltYXJ5QnV0dG9uTGFiZWxMZWZ0UGFkZGluZzpcIlp0NjUwXCIscHJpbWFyeUJ1dHRvbkxhYmVsUmlnaHRQYWRkaW5nOlwiaFZNZXJcIixjYWxsQnV0dG9uOlwieGZqRHVcIixjYWxsQnV0dG9uTGFiZWw6XCJqS3RMZVwiLGJ1dHRvbnNDb250YWluZXI6XCJZeFZpN1wiLHNlbmRUb0ljb246XCJiX1dvU1wiLGlubGluZUJhY2tCdXR0b246XCJ0VHlLblwiLG5ld1NlYXJjaENvbnRhaW5lcjpcIk9ndnVPXCIsbmV3QnV0dG9uc0NvbnRhaW5lcjpcIm5qdnNwXCIsbmV3Q3JlYXRlQ29udmVyc2F0aW9uTGlzdDpcImpIekhRXCJ9O3ZhciBjRj1uKDM4OTgxKTtjb25zdCBsRj17Z3JvdXBDb252ZXJzYXRpb25JdGVtOlwiUmJBODNcIixyb3VuZFRvcENvcm5lcnM6XCJ4WTIyeVwiLHJvdW5kQm90dG9tQ29ybmVyczpcInBzV3ZKXCIsYXZhdGFyQ29udGFpbmVyOlwiZGdwOElcIixjb252ZXJzYXRpb25JbmZvOlwiZ2NYUTdcIixjaGVja2JveFNlbGVjdGVkSWNvbjpcIllpQXVJXCIsdW5zZWxlY3RlZENoZWNrYm94Q2lyY2xlOlwiSndoT0NcIixzZWxlY3RlZENoZWNrYm94Q2lyY2xlOlwiV1VJOFpcIn07ZnVuY3Rpb24gdUYoZSl7bGV0e2NvbnZlcnNhdGlvbjp0LG9uQ2xpY2s6bixpc1NlbGVjdGVkOnIscm91bmRUb3BDb3JuZXJzOmk9ITEscm91bmRCb3R0b21Db3JuZXJzOmE9ITF9PWU7Y29uc3Qgcz10LmNvbnZlcnNhdGlvblR5cGU9PT1QZS5pMS5VU0VSQ1JFQVRFREdST1VQLGM9WGMoKSxsPSgwLGQudXNlTWVtbykoKCgpPT57Y29uc3QgZT0oMCxjRi5mKSh0KT9mdW5jdGlvbihlKXtjb25zdCB0PWUucGFydGljaXBhbnRzLm1hcCgoZT0+ZS5wYXJ0aWNpcGFudElkKSk7cmV0dXJuWy4uLm5ldyBTZXQoWy4uLmUubGFzdFNlbmRlclVzZXJJZHMsLi4udF0pXS5zbGljZSgwLDMpfSh0KTooMCx0bC5KbSkodCxjKTtyZXR1cm4gZS5maWx0ZXIoKGU9PmUhPT1jKSl9KSxbdCxjXSk7cmV0dXJuIHM/KDAsby5aKShcImRpdlwiLHtvbkNsaWNrOm4sY2xhc3NOYW1lOigwLFEuWikobEYuZ3JvdXBDb252ZXJzYXRpb25JdGVtLGkmJmxGLnJvdW5kVG9wQ29ybmVycyxhJiZsRi5yb3VuZEJvdHRvbUNvcm5lcnMpfSx2b2lkIDAsKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6bEYuYXZhdGFyQ29udGFpbmVyfSx2b2lkIDAsKDAsby5aKShHdSx7cGFydGljaXBhbnRzOmwsY29udmVyc2F0aW9uSWQ6dC5jb252ZXJzYXRpb25JZCxzaXplOjMyfSkpLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOmxGLmNvbnZlcnNhdGlvbkluZm99LHZvaWQgMCwoMCxvLlopKFl1LHtmZWVkSXRlbTp0fSkpLHI/KDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6bEYuc2VsZWN0ZWRDaGVja2JveENpcmNsZX0sdm9pZCAwLCgwLG8uWikoQkMse2NsYXNzTmFtZTpsRi5jaGVja2JveFNlbGVjdGVkSWNvbn0pKTooMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpsRi51bnNlbGVjdGVkQ2hlY2tib3hDaXJjbGV9KSk6bnVsbH1DKCkuZ2V0TG9nZ2VyKFwiR3JvdXBDb252ZXJzYXRpb25JdGVtQ2VsbFwiKTt2YXIgZEY9big1NzIzNCk7Y29uc3QgZkY9e3Nob3J0Y3V0c0NvbnRhaW5lcjpcIlRIZUt2XCIsc2hvcnRjdXRJdGVtOlwiYzQ3U2tcIixzZWxlY3RlZFNob3J0Y3V0SXRlbTpcIkJtS0NFXCJ9LHBGPShDKCkuZ2V0TG9nZ2VyKFwiQ3JlYXRlQ29udmVyc2F0aW9uXCIpLChlLHQpPT57c3dpdGNoKGUpe2Nhc2VcIm5ld0ZyaWVuZHNcIjpyZXR1cm4gdC5mb3JtYXRNZXNzYWdlKHtpZDpcIkhHNjJuclwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiTmV3IEZyaWVuZHNcIn1dfSk7Y2FzZVwiYmlydGhkYXlGcmllbmRzXCI6cmV0dXJuIHQuZm9ybWF0TWVzc2FnZSh7aWQ6XCJxZzU2ZE1cIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkJpcnRoZGF5XCJ9XX0pfX0pO2Z1bmN0aW9uIG1GKGUpe2xldHtzZWxlY3RTaG9ydGN1dDp0LHNlbGVjdGVkU2hvcnRjdXQ6bn09ZTtjb25zdCByPW1DKCksaT0oMCxtZS5aKSgpLGE9KDAsZC51c2VNZW1vKSgoKCk9Pntjb25zdCBlPXt9LHQ9W10sbj1bXTtmb3IoY29uc3QgZSBvZiByKSgwLGJsLmI3KShlKSYmdC5wdXNoKGUpLCgwLGJsLkk0KShlKSYmbi5wdXNoKGUpO3JldHVybiB0Lmxlbmd0aD4xJiYoZS5iaXJ0aGRheUZyaWVuZHM9dCksbi5sZW5ndGg+MiYmKGUubmV3RnJpZW5kcz1uKSxlfSksW3JdKSxzPU9iamVjdC5rZXlzKGEpLmxlbmd0aD4wLGw9KDAsay5vKShTbC5WWCksdT0oMCxrLm8pKFNsLm9FKSxmPSRsKCk7KDAsZC51c2VFZmZlY3QpKCgoKT0+e2lmKGYpdHJ5e2woKX1jYXRjaChlKXsoMCxjLlRiKShlKX19KSxbbCxmXSk7Y29uc3QgcD0oMCxkLnVzZU1lbW8pKCgoKT0+e2NvbnN0IGU9W107Zm9yKGNvbnN0IHQgb2YgdSlpZih0Lmxpc3RJZCl7Y29uc3Qgbj0oMCx6LnhrKSh0Lmxpc3RJZCk7ZS5wdXNoKFtuLHRdKX1yZXR1cm4gZS5zb3J0KCgoZSx0KT0+cGFyc2VJbnQoZVsxXS5jcmVhdGlvblRpbWUpLXBhcnNlSW50KHRbMV0uY3JlYXRpb25UaW1lKSkpLnNvcnQoKChlLHQpPT5lWzFdLnJhbmstdFsxXS5yYW5rKSksZX0pLFt1XSk7cmV0dXJuIDAhPT1wLmxlbmd0aHx8cz8oMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpmRi5zaG9ydGN1dHNDb250YWluZXJ9LHZvaWQgMCxPYmplY3Qua2V5cyhhKS5tYXAoKGU9PigwLG8uWikoXCJidXR0b25cIix7dHlwZTpcImJ1dHRvblwiLGNsYXNzTmFtZTooMCxRLlopKGZGLnNob3J0Y3V0SXRlbSxlPT09biYmZkYuc2VsZWN0ZWRTaG9ydGN1dEl0ZW0pLG9uQ2xpY2s6KCk9PnsoZT0+e2lmKGU9PT1uKXJldHVybiB2b2lkIHQodm9pZCAwLFtdKTtjb25zdCByPWFbZV0/Lm1hcCgoZT0+KHt1c2VySWQ6KDAsei5NYykoZS51c2VyX2lkKX0pKSk7ciYmdChlLHIpfSkoZSl9fSxlLHBGKGUsaSkpKSkscC5tYXAoKGU9PntsZXRbcixpXT1lO3JldHVybigwLG8uWikoXCJidXR0b25cIix7dHlwZTpcImJ1dHRvblwiLGNsYXNzTmFtZTooMCxRLlopKGZGLnNob3J0Y3V0SXRlbSxyPT09biYmZkYuc2VsZWN0ZWRTaG9ydGN1dEl0ZW0pLG9uQ2xpY2s6KCk9PnsoKGUscik9PntpZihlPT09bilyZXR1cm4gdm9pZCB0KHZvaWQgMCxbXSk7Y29uc3QgaT1bXTtmb3IoY29uc3QgZSBvZiByLmxpc3RJdGVtcyl7aWYoIWUucmVjaXBpZW50SWQpY29udGludWU7Y29uc3QgdD0oMCx6LnhrKShlLnJlY2lwaWVudElkKTtlLnJlY2lwaWVudFR5cGU9PT1kRi5SZWNpcGllbnRMaXN0SXRlbV9SZWNpcGllbnRUeXBlLlJFQ0lQSUVOVF9UWVBFX0dST1VQP2kucHVzaCh7Y29udmVyc2F0aW9uSWQ6dH0pOmUucmVjaXBpZW50VHlwZT09PWRGLlJlY2lwaWVudExpc3RJdGVtX1JlY2lwaWVudFR5cGUuUkVDSVBJRU5UX1RZUEVfU05BUENIQVRURVImJmkucHVzaCh7dXNlcklkOnR9KX10KGUsaSl9KShyLGkpfX0scixpLm5hbWUpfSkpKTpudWxsfWNvbnN0IGhGPXtjb250YWluZXI6XCJGVzJKV1wiLGlucHV0OlwiRDF0VkxcIn07ZnVuY3Rpb24gdkYoZSl7bGV0e3ZhbHVlOnQsb25DaGFuZ2U6bixvcHRpb25hbElucHV0UHJvcHM6cn09ZTtyZXR1cm4oMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpoRi5jb250YWluZXJ9LHZvaWQgMCwoMCxxLmpzeCkoXCJpbnB1dFwiLHtjbGFzc05hbWU6aEYuaW5wdXQsdHlwZTpcInRleHRcIix2YWx1ZTp0LG9uQ2hhbmdlOmU9Pm4oZS50YXJnZXQudmFsdWUpLC4uLnI/P3t9fSkpfWNvbnN0IGdGPXt1c2VySXRlbTpcIkV3ZmxyXCIscm91bmRUb3BDb3JuZXJzOlwiY0RlQmtcIixyb3VuZEJvdHRvbUNvcm5lcnM6XCJBOEJSclwiLGF2YXRhckNvbnRhaW5lcjpcInE2SzRkXCIsdXNlckluZm86XCJ2YVh0d1wiLGJlc3RGcmllbmRJbmZvOlwibkFLVEdcIix1c2VyRGlzcGxheU5hbWU6XCJSQng5c1wiLGVuZENvbXBvbmVudDpcIkw3YUJxXCIsZnJpZW5kbW9qaVRleHQ6XCJ4Yk5lc1wiLGNoZWNrYm94U2VsZWN0ZWRJY29uOlwiRnRyd1NcIixjaGVja2JveENpcmNsZTpcImhTUW5DXCIsdW5zZWxlY3RlZENoZWNrYm94OlwiRFlTTHpcIn07dmFyIHlGO2Z1bmN0aW9uIEVGKGUpe2xldHtvbkNsaWNrOnQsdXNlcklkOm4saXNTZWxlY3RlZDpyLGlzQmVzdEZyaWVuZDppPSExLHJvdW5kVG9wQ29ybmVyczphPSExLHJvdW5kQm90dG9tQ29ybmVyczpzPSExfT1lO2NvbnN0IGM9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsay5vKSgoMCxUZS5KVikoZSkpfShuKSxsPVBsKFBlLmkxLk9ORU9OT05FLG4pLHU9a2wobiksZD1SbChuLGkpLGY9W107bCYmZi5wdXNoKHlGfHwoeUY9KDAsby5aKShEYix7fSxcImJpcnRoZGF5XCIpKSksYz8uc3RyZWFrTWV0YWRhdGE/LmNvdW50JiZmLnB1c2goKDAsby5aKShNYix7c3RyZWFrQ291bnQ6Yy5zdHJlYWtNZXRhZGF0YS5jb3VudCxzaG93SG91cmdsYXNzOigwLHRsLm1xKShjLnN0cmVha01ldGFkYXRhLmV4cGlyYXRpb25UaW1lc3RhbXBNcyl9LFwic3RyZWFrXCIpKSx1JiZmLnB1c2goKDAsby5aKShcInNwYW5cIix7dGl0bGU6dS50aXRsZX0sXCJmcmllbmRtb2ppXCIsdS5lbW9qaSkpO2NvbnN0IHA9Qm9vbGVhbihmLmxlbmd0aCkmJmksbT1Cb29sZWFuKGYubGVuZ3RoKSYmIWk7cmV0dXJuKDAsby5aKShcImRpdlwiLHtvbkNsaWNrOnQsY2xhc3NOYW1lOigwLFEuWikoZ0YudXNlckl0ZW0sKGF8fGkpJiZnRi5yb3VuZFRvcENvcm5lcnMsKHN8fGkpJiZnRi5yb3VuZEJvdHRvbUNvcm5lcnMpfSx2b2lkIDAsKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6Z0YuYXZhdGFyQ29udGFpbmVyfSx2b2lkIDAsKDAsby5aKShCdSx7dXNlcklkOm4sc2l6ZTozMn0pKSwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTooMCxRLlopKGdGLnVzZXJJbmZvLHAmJmdGLmJlc3RGcmllbmRJbmZvKX0sdm9pZCAwLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOmdGLnVzZXJEaXNwbGF5TmFtZX0sdm9pZCAwLGQpLHAmJigwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOmdGLmZyaWVuZG1vamlUZXh0fSx2b2lkIDAsZikpLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOmdGLmVuZENvbXBvbmVudH0sdm9pZCAwLG0mJigwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOmdGLmZyaWVuZG1vamlUZXh0fSx2b2lkIDAsZiksKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6Z0YuY2hlY2tib3hDaXJjbGV9LHZvaWQgMCwoMCxvLlopKEJDLHtjbGFzc05hbWU6KDAsUS5aKShnRi5jaGVja2JveFNlbGVjdGVkSWNvbiwhciYmZ0YudW5zZWxlY3RlZENoZWNrYm94KSxcImFyaWEtbGFiZWxcIjpcIlVuc2VsZWN0IGNob3NlbiB1c2VyXCJ9KSkpKX12YXIgX0YsSUYsU0YsYkYsVEYsQ0YsQUYsUkYsa0YsT0YsTkYsd0YsREYsUEYsTUYsTEYsVUY9bigyMjYwOCk7ZnVuY3Rpb24geEYoKXtjb25zdFtlLHQsbl09KDAsay5vKSgoZT0+W2UubWVzc2FnaW5nLnF1ZXJ5aW5nRmVlZCxlLm1lc3NhZ2luZy5oYXNOb01vcmVGZWVkRW50cmllcyxlLm1lc3NhZ2luZy5wYWdlRmVlZF0pKTtyZXR1cm4oMCxvLlopKHRSLHtpc0xvYWRpbmc6ZSxoYXNNb3JlOiF0LG9uUGFnaW5hdGU6bn0pfWZ1bmN0aW9uIEZGKGUpe2xldHtjb250YWluZXJDbGFzc05hbWU6dCxwYWdlOm49dkMuTkVXX0NIQVQsb25DbG9zZTpyLG9uU3VibWl0Omksb25TZWNvbmRhcnlBY3Rpb246YSx0b2dnbGVGcmllbmQ6cyx0b2dnbGVDb252ZXJzYXRpb246bCxyZW1vdmVGcmllbmRGcm9tU2VsZWN0ZWQ6dSxyZW1vdmVHcm91cEZyb21TZWxlY3RlZDpmLHNlbGVjdGVkRnJpZW5kczpwLHNlbGVjdGVkQ29udmVyc2F0aW9uczptLHNlbGVjdGVkRW50aXRpZXNGb3JTdWJtaXNzaW9uOmgsc2hvd0JhY2tCdXR0b25XaGVuQ29tcGFjdDp5PSExLGZyaWVuZHNUb0hpZGU6RT1bXSxzaG93R3JvdXBzOl89ITB9PWU7Y29uc3QgST0oMCxtZS5aKSgpLFM9bUMoKTtqbCgpO2NvbnN0IFQ9KDAsZy5zMCkoKSxDPSRsKCksQT0oMCxrLm8pKFNsLk5EKSxSPSgwLGsubykoU2wuVlgpLFtPLE5dPSgwLGQudXNlU3RhdGUpKCksW0QsUF09KDAsZC51c2VTdGF0ZSkoW10pLE09KDAsZC51c2VSZWYpKG51bGwpLEw9KDAsaWwuaikoVGUuTzQsRCksVT0oMCxpbC5qKShUZS5rdSxEKSx4PSgwLGsubykoVGUubzQpLEY9KDAsay5vKSh3LlRjKSxCPVhjKCksW1YsR109KDAsZC51c2VTdGF0ZSkoT0MpLFtILFddPSgwLGQudXNlU3RhdGUpKFwiXCIpLFtqLFpdPSgwLGQudXNlU3RhdGUpKCExKSxbSyxZXT0oMCxkLnVzZVN0YXRlKSh2b2lkIDApLFtYLEpdPSgwLGQudXNlU3RhdGUpKFwiXCIpLHtyYW5rZWRGZWVkSXRlbXM6JCxyYW5raW5nOmVlfT0oMCxpbC5qKShUZS5CXywhMCksdGU9KDAsay5vKSgoZT0+TUQoZSxWLGVlKSkpLG5lPVY/dGUubWFwKChlPT5lLml0ZW0uZmVlZEVudHJ5KSk6JC5tYXAoKGU9PmUuaXRlbSkpLHJlPSgwLGlsLmopKFRlLk80LGgpLGllPSgwLGQudXNlTWVtbykoKCgpPT5pRigpKHJlKSksW3JlXSksb2U9KDAsaWwuaikoVGUua3UsaCksYWU9KDAsZC51c2VNZW1vKSgoKCk9PmlGKCkob2UpKSxbb2VdKSxzZT0oMCxkLnVzZUNhbGxiYWNrKSgoZT0+KDAsVGUud1YpKCkoZSxWKS5tYXAoKGU9PmUuaXRlbS5jb252ZXJzYXRpb25NZXRhZGF0YSkpKSxbVl0pLGNlPSgwLGsubykoc2UpLGxlPW49PT12Qy5ORVdfQ0hBVCx1ZT1uPT09dkMuTkVXX0NIQVQsZGU9MT09PW0ubGVuZ3RoJiYwPT09cC5sZW5ndGgsZmU9IWRlJiYoanx8aC5sZW5ndGg+MSkscGU9MD09PWgubGVuZ3RoLGhlPSFGJiZuPT09dkMuTkVXX0NIQVQmJiFYOygwLGQudXNlRWZmZWN0KSgoKCk9PntpZihDKXRyeXtSKCl9Y2F0Y2goZSl7KDAsYy5UYikoZSl9fSksW1IsQ10pLCgwLGQudXNlRWZmZWN0KSgoKCk9PntmZXx8VyhcIlwiKX0pLFtmZV0pLCgwLGQudXNlRWZmZWN0KSgoKCk9PnsoIVh8fFgmJjE9PT1pZS5sZW5ndGgpJiZZKHZvaWQgMCl9KSxbWCxpZV0pO2NvbnN0IHZlPWU9PntWLmxlbmd0aD4wJiZlJiYoTS5jdXJyZW50Py5mb2N1cygpLE0uY3VycmVudD8uc2VsZWN0KCkpfSxnZT0oMCxkLnVzZU1lbW8pKCgoKT0+ZnVuY3Rpb24oZSx0KXtjb25zdCBuPVtdO2lmKHQubGVuZ3RoKXJldHVybiBuO2Zvcihjb25zdCB0IG9mIGUpbi5wdXNoKHt0eXBlOmhDLkJFU1RfRlJJRU5ELGNvbnRlbnQ6dH0pO3JldHVybiBufShBLFYpKSxbQSxWXSkseWU9KDAsZC51c2VNZW1vKSgoKCk9PmZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1bXTtuLnB1c2goe3R5cGU6aEMuSEVBREVSLGNvbnRlbnQ6dD90LmZvcm1hdE1lc3NhZ2Uoe2lkOlwidzV0d0JQXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJOZXcgR3JvdXBzXCJ9XX0pOlwiTmV3IEdyb3Vwc1wifSk7Zm9yKGNvbnN0IHQgb2YgZSluLnB1c2goe3R5cGU6aEMuTkVXX0dST1VQLGNvbnRlbnQ6dH0pO3JldHVybiBufSh4LEkpKSxbeCxJXSksRWU9KDAsZC51c2VNZW1vKSgoKCk9PmZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEpe2xldCBzPWFyZ3VtZW50cy5sZW5ndGg+NyYmdm9pZCAwIT09YXJndW1lbnRzWzddJiZhcmd1bWVudHNbN10sYz1hcmd1bWVudHMubGVuZ3RoPjgmJnZvaWQgMCE9PWFyZ3VtZW50c1s4XSYmYXJndW1lbnRzWzhdLGw9IShhcmd1bWVudHMubGVuZ3RoPjkmJnZvaWQgMCE9PWFyZ3VtZW50c1s5XSl8fGFyZ3VtZW50c1s5XSx1PWFyZ3VtZW50cy5sZW5ndGg+MTA/YXJndW1lbnRzWzEwXTp2b2lkIDA7Y29uc3QgZD1bXSxmPWJDKHdDKHQsbyxuZXcgU2V0KGEpKSkscD1bXTtmb3IoY29uc3QgZSBvZiBuKTI9PT1lLnBhcnRpY2lwYW50cy5sZW5ndGgmJmUucGFydGljaXBhbnRzLm1hcCgoZT0+YS5pbmNsdWRlcyhlKSkpLmluY2x1ZGVzKCExKSYmcC5wdXNoKHt0eXBlOmhDLlJFQ0VOVF9VU0VSLGNvbnRlbnQ6ZX0pLGUucGFydGljaXBhbnRzLmxlbmd0aD4yJiZsJiZwLnB1c2goe3R5cGU6aEMuUkVDRU5UX0dST1VQLGNvbnRlbnQ6ZX0pO2lmKG8ubGVuZ3RoPjApe2lmKGQucHVzaCh7dHlwZTpoQy5IRUFERVIsY29udGVudDp1P3UuZm9ybWF0TWVzc2FnZSh7aWQ6XCJUeXBZTWxcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlJlc3VsdHNcIn1dfSk6XCJSZXN1bHRzXCJ9KSxkLnB1c2goLi4ucCksci5sZW5ndGg+MHx8cyYmaS5sZW5ndGg+MCl7ZC5wdXNoKHt0eXBlOmhDLkhFQURFUixjb250ZW50OnU/dS5mb3JtYXRNZXNzYWdlKHtpZDpcIjlPd3U3UlwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiQWxyZWFkeSBTZWxlY3RlZFwifV19KTpcIkFscmVhZHkgU2VsZWN0ZWRcIn0pO2Zvcihjb25zdCBlIG9mIHIpZC5wdXNoKHt0eXBlOmhDLkFMUkVBRFlfU0VMRUNURURfVVNFUixjb250ZW50OmV9KTtpZihzKWZvcihjb25zdCBlIG9mIGkpZC5wdXNoKHt0eXBlOmhDLkFMUkVBRFlfU0VMRUNURURfR1JPVVAsY29udGVudDplfSl9fWVsc2V7aWYoYyYmcC5sZW5ndGg+MCYmKGQucHVzaCh7dHlwZTpoQy5IRUFERVIsY29udGVudDp1P3UuZm9ybWF0TWVzc2FnZSh7aWQ6XCJHZXlzcXBcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlJlY2VudHNcIn1dfSk6XCJSZWNlbnRzXCJ9KSxkLnB1c2goLi4ucCksZC5wdXNoKHt0eXBlOmhDLlBBR0lOQVRFX1RSSUdHRVIsY29udGVudDpcIlwifSkpLGUubGVuZ3RoJiZsKXtkLnB1c2goe3R5cGU6aEMuSEVBREVSLGNvbnRlbnQ6dT91LmZvcm1hdE1lc3NhZ2Uoe2lkOlwiMTZHbHFyXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJHcm91cHNcIn1dfSk6XCJHcm91cHNcIn0pO2Zvcihjb25zdCB0IG9mIGUpZC5wdXNoKHt0eXBlOmhDLkdST1VQLGNvbnRlbnQ6dH0pfWZvcihjb25zdCBlIG9mIGYpe2UuaGVhZGVyTGFiZWwmJmQucHVzaCh7dHlwZTpoQy5IRUFERVIsY29udGVudDplLmhlYWRlckxhYmVsfSk7Zm9yKGNvbnN0IHQgb2YgZS51c2VycylkLnB1c2goe3R5cGU6aEMuVVNFUixjb250ZW50OnR9KX19cmV0dXJuIGR9KGNlLFMuZmlsdGVyKChlPT4hRS5pbmNsdWRlcyhlLnVzZXJfaWQpKSksbmUsaWUsYWUsVixFLG49PT12Qy5TTkFQX1NFTkRfVE8sQyxfLEkpKSxbY2UsUyxpZSxWXSksX2U9KGUsdCk9PntsZXQgbj1cIlwiO249dD9cIlRFQU1fU05BUENIQVRfQU5EX01ZX0FJXCI9PT1YP2U9PT1QdS50Zz9cIk1ZX0FJXCI6XCJURUFNX1NOQVBDSEFUXCI6XCJcIjpYP1wiVEVBTV9TTkFQQ0hBVF9BTkRfTVlfQUlcIjplPT09UHUudGc/XCJURUFNX1NOQVBDSEFUXCI6XCJNWV9BSVwiLEoobil9LEllPSgwLGQudXNlTWVtbykoKCgpPT5mdW5jdGlvbihlLHQsbixyLGkpe2NvbnN0IG89W10sYT13Qyh0LFwiXCIsbmV3IFNldChyKSk7aWYoby5wdXNoKHt0eXBlOmhDLkhFQURFUixjb250ZW50Omk/aS5mb3JtYXRNZXNzYWdlKHtpZDpcInhDdXo1U1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiU2hvcnRjdXRzXCJ9XX0pOlwiU2hvcnRjdXRzXCJ9KSxuKWZvcihjb25zdCB0IG9mIGUpby5wdXNoKHt0eXBlOmhDLkdST1VQLGNvbnRlbnQ6dH0pO2Zvcihjb25zdCBlIG9mIGEpby5wdXNoKHt0eXBlOmhDLlVTRVIsY29udGVudDplfSk7cmV0dXJuIG99KGlGKCkoVSksaUYoKShMKSxfLEUsSSkpLFtPXSk7KDAsZC51c2VFZmZlY3QpKCgoKT0+e2RlJiZaKCExKX0pLFtkZV0pO2NvbnN0IFNlPShlLHQscik9PntsZXQgaSxhO3N3aXRjaChlLnR5cGUpe2Nhc2UgaEMuSEVBREVSOntjb25zdCB0PWUuY29udGVudDthPXQsaT0oMCxvLlopKFwiaDJcIix7Y2xhc3NOYW1lOnNGLmNlbGxIZWFkZXJMYWJlbH0sdm9pZCAwLHQpO2JyZWFrfWNhc2UgaEMuVVNFUjpjYXNlIGhDLlJFQ0VOVF9VU0VSOmNhc2UgaEMuQUxSRUFEWV9TRUxFQ1RFRF9VU0VSOmNhc2UgaEMuQkVTVF9GUklFTkQ6e2NvbnN0IGM9ZS50eXBlPT09aEMuQUxSRUFEWV9TRUxFQ1RFRF9VU0VSLGw9ZS50eXBlPT09aEMuQkVTVF9GUklFTkQ7bGV0IGQ7aWYoZS50eXBlPT09aEMuUkVDRU5UX1VTRVIpe2NvbnN0IHQ9ZS5jb250ZW50O2lmKGQ9KDAsdGwuYUQpKHQsQiksIWQpcmV0dXJuIG51bGx9ZWxzZSBkPWUuY29udGVudC51c2VyX2lkO2NvbnN0IGY9KDAsei5NYykoZCksbT1mPT09UHUuTTd8fGY9PT1QdS50ZztpZihuPT09dkMuQUREX1BBUlRJQ0lQQU5UX1RPX0NBTEwmJm0pcmV0dXJuIG51bGw7Y29uc3Qgdj1jP2guc29tZSgoZT0+ZS51c2VySWQ9PT1mKSk6cC5pbmNsdWRlcyhmKSxnPSgpPT57diYmMj09PWllLmxlbmd0aCYmWighMSksYz91KGYpOih2ZSghdikscyhmLCF2KSxtJiZfZShmLHYpKX07YT1mLGk9KDAsby5aKShFRix7dXNlcklkOmQsaXNTZWxlY3RlZDp2LGlzQmVzdEZyaWVuZDpsLHJvdW5kVG9wQ29ybmVyczpEQyh0LHIpLHJvdW5kQm90dG9tQ29ybmVyczpQQyh0LHIpLG9uQ2xpY2s6Z30sZik7YnJlYWt9Y2FzZSBoQy5SRUNFTlRfR1JPVVA6Y2FzZSBoQy5ORVdfR1JPVVA6Y2FzZSBoQy5BTFJFQURZX1NFTEVDVEVEX0dST1VQOmNhc2UgaEMuR1JPVVA6e2NvbnN0IG49ZS50eXBlPT09aEMuQUxSRUFEWV9TRUxFQ1RFRF9HUk9VUCxzPWUuY29udGVudCxjPSgwLHouTWMpKHMuY29udmVyc2F0aW9uSWQpLHU9bS5pbmNsdWRlcyhjKSxkPSgpPT57bj9mPy4oYyk6KHZlKCF1KSxsKHMsIXUpKX07YT1jLGk9KDAsby5aKSh1Rix7Y29udmVyc2F0aW9uOnMsaXNTZWxlY3RlZDp1LHJvdW5kVG9wQ29ybmVyczpEQyh0LHIpLHJvdW5kQm90dG9tQ29ybmVyczpQQyh0LHIpLG9uQ2xpY2s6ZH0sYyk7YnJlYWt9Y2FzZSBoQy5QQUdJTkFURV9UUklHR0VSOmk9X0Z8fChfRj0oMCxvLlopKHhGLHt9KSksYT1cInBhZ2luYXRlLXRyaWdnZXJcIn1yZXR1cm4oMCxvLlopKFwibGlcIix7fSxgJHthfSAke3R9YCxpKX0sYmU9IWZlJiZuPT09dkMuTkVXX0NIQVQsQ2U9QyYmYmU/KDAscS5qc3hzKShxLkZyYWdtZW50LHtjaGlsZHJlbjpbSUZ8fChJRj0oMCxvLlopKGFGLHt9KSksU0Z8fChTRj0oMCxvLlopKHYuWix7aWQ6XCJKU01QU1NcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkdyb3VwXCJ9XX0pKV19KTp2b2lkIDAsQWU9IUN8fGgubGVuZ3RoPjAsUmU9KDAsZC51c2VNZW1vKSgoKCk9Pntjb25zdCBlPVtdO2Zvcihjb25zdCB0IG9mIGgpe2lmKHQuY29udmVyc2F0aW9uSWQpe2NvbnN0IG49b2VbdC5jb252ZXJzYXRpb25JZF07ZS5wdXNoKHtjb252ZXJzYXRpb25JZDp0LmNvbnZlcnNhdGlvbklkLGl0ZW1OYW1lOigwLG8uWikoenUse2ZlZWRJdGVtOm59KX0pfWlmKHQudXNlcklkKXtjb25zdCBuPXJlW3QudXNlcklkXTtlLnB1c2goe3VzZXJJZDp0LnVzZXJJZCxpdGVtTmFtZTooMCxvLlopKFwic3BhblwiLHt9LHZvaWQgMCwoMCxibC5iMykobikpfSl9fXJldHVybiBlfSksW3JlLG9lLGhdKSxrZT1DJiYhViYmIU8mJngubGVuZ3RoPjAmJl8sT2U9biE9PXZDLkFERF9QQVJUSUNJUEFOVF9UT19DQUxMP0kuZm9ybWF0TWVzc2FnZSh7aWQ6XCI4cUVYYWxcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlRvOlwifV19KTp2b2lkIDAsTmU9bj09PXZDLkFERF9QQVJUSUNJUEFOVF9UT19DQUxMP0kuZm9ybWF0TWVzc2FnZSh7aWQ6XCJ5Rkxsay9cIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlNlYXJjaC4uLlwifV19KTp2b2lkIDA7cmV0dXJuKDAsby5aKShcImZvcm1cIix7Y2xhc3NOYW1lOigwLFEuWikoc0YuY29udGFpbmVyLHQpLG9uU3VibWl0OmFzeW5jIGU9PntpZihuPT09dkMuTkVXX0NIQVQmJlgmJmllLmxlbmd0aD4xKXtjb25zdCB0PShlPT57c3dpdGNoKGUpe2Nhc2VcIlRFQU1fU05BUENIQVRfQU5EX01ZX0FJXCI6cmV0dXJuIEkuZm9ybWF0TWVzc2FnZSh7aWQ6XCJyN21zcVZcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkNhbid0IGNyZWF0ZSBncm91cCwgTXkgQUkgYW5kIFRlYW0gU25hcGNoYXQgaGF2ZW4ndCBhZGRlZCB5b3UgYXMgYSBmcmllbmQgeWV0IVwifV19KTtjYXNlXCJURUFNX1NOQVBDSEFUXCI6cmV0dXJuIEkuZm9ybWF0TWVzc2FnZSh7aWQ6XCJ0bEJVc09cIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkNhbid0IGNyZWF0ZSBncm91cCwgVGVhbSBTbmFwY2hhdCBoYXNuJ3QgYWRkZWQgeW91IGFzIGEgZnJpZW5kIHlldCFcIn1dfSk7Y2FzZVwiTVlfQUlcIjpyZXR1cm4gSS5mb3JtYXRNZXNzYWdlKHtpZDpcIitmVVhSZVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiQ2FuJ3QgY3JlYXRlIGdyb3VwLCBNeSBBSSBoYXNuJ3QgYWRkZWQgeW91IGFzIGEgZnJpZW5kIHlldCFcIn1dfSk7ZGVmYXVsdDpyZXR1cm5cIlwifX0pKFgpO3JldHVybiBZKHQpLHZvaWQgZS5wcmV2ZW50RGVmYXVsdCgpfWNvbnN0IHQ9bj09PXZDLk5FV19DSEFUP1wic3RhcnRfY2hhdFwiOm49PT12Qy5TTkFQX1NFTkRfVE8/XCJzbmFwX3NlbmRfdG9cIjpcImFkZF9wYXJ0aWNpcGFudFwiO2UucHJldmVudERlZmF1bHQoKSxZKHZvaWQgMCk7dHJ5e2F3YWl0IGkoSCksYigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6YCR7dH1fc3VjY2Vzc2AsZGltZW5zaW9uczp7aXNfZ3JvdXA6U3RyaW5nKGgubGVuZ3RoPjEpfX0pfWNhdGNoKGUpe2UgaW5zdGFuY2VvZiBFcnJvciYmKFkoZS5tZXNzYWdlKSxiKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpgJHt0fV9mYWlsdXJlYCxkaW1lbnNpb25zOntpc19ncm91cDpTdHJpbmcoaC5sZW5ndGg+MSl9fSkpfX19LHZvaWQgMCwhQyYmKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6c0YuaGVhZGVyQ29udGFpbmVyfSx2b2lkIDAsKGxlfHx5KSYmKDAsby5aKShQZCx7Y2xhc3NOYW1lOigwLFEuWikoc0YuYmFja0J1dHRvbix5JiZzRi5zaG93QmFja0J1dHRvbldoZW5Db21wYWN0Qml0bW9qaSksb25DbGljazpyPz8oKCk9PlQoXCIvXCIpKX0sdm9pZCAwLGJGfHwoYkY9KDAsby5aKShLZy5aLHt9KSkpLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOnNGLmhlYWRlckxhYmVsfSx2b2lkIDAsbj09PXZDLlNOQVBfU0VORF9UTz9URnx8KFRGPSgwLG8uWikodi5aLHtpZDpcIlZQT2FQblwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiU2VuZCBUb1wifV19KSk6bj09PXZDLk5FV19DSEFUJiYoQ0Z8fChDRj0oMCxvLlopKHYuWix7aWQ6XCJaakdrU3RcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlN0YXJ0IGEgQ2hhdCBvciBDYWxsXCJ9XX0pKSkpKSwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTooMCxRLlopKEMmJnNGLm5ld1NlYXJjaENvbnRhaW5lcil9LHZvaWQgMCxDJiZuPT09dkMuU05BUF9TRU5EX1RPJiYoMCxvLlopKFBkLHtjbGFzc05hbWU6KDAsUS5aKShzRi5pbmxpbmVCYWNrQnV0dG9uLHkmJnNGLnNob3dCYWNrQnV0dG9uV2hlbkNvbXBhY3RCaXRtb2ppKSxvbkNsaWNrOnI/PygoKT0+VChcIi9cIikpfSx2b2lkIDAsQUZ8fChBRj0oMCxvLlopKEtnLlose30pKSksKDAscS5qc3gpKGJmLHtyZWY6TSxhdXRvRm9jdXM6ITAsdmFsdWU6VixvbkNoYW5nZTpHLHRlc3RJZDpcImFwcC51c2Vycy5jaG9vc2VVc2Vycy5DcmVhdGVDb252ZXJzYXRpb24uU2VhcmNoXCIsbGVhZGluZ1N0cmluZzpPZSxwbGFjZWhvbGRlcjpOZSxhY3Rpb25CdXR0b246Q2UsaGFuZGxlQWN0aW9uQnV0dG9uQ2xpY2s6KCk9PntaKCEwKX0sc2VsZWN0ZWRJdGVtTGlzdDpSZSxzdXBwb3J0UGlsbDpDLGRlbGV0ZVBpbGw6ZT0+e0lmKGUpPyhlLnVzZXJJZCE9PVB1LnRnJiZlLnVzZXJJZCE9PVB1Lk03fHxfZShlLnVzZXJJZCwhMSksdShlLnVzZXJJZCkpOmY/LihlLmNvbnZlcnNhdGlvbklkKX0saXNBY3Rpb25EaXNhYmxlZDpkZX0pKSx1ZSYmKDAsby5aKShcImRpdlwiLHt9LHZvaWQgMCxmZT8oMCxvLlopKHZGLHt2YWx1ZTpILG9uQ2hhbmdlOlcsb3B0aW9uYWxJbnB1dFByb3BzOnttYXhMZW5ndGg6VUYub28scGxhY2Vob2xkZXI6SS5mb3JtYXRNZXNzYWdlKHtpZDpcIndGUUw4Z1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiR3JvdXAgTmFtZVwifV19KX19KTohQyYmKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6c0YuZ3JvdXBDb252ZXJzYXRpb25MYWJlbENvbnRhaW5lcn0sdm9pZCAwLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOnNGLmdyb3VwQ29udmVyc2F0aW9uTGFiZWx9LHZvaWQgMCxSRnx8KFJGPSgwLG8uWikodi5aLHtpZDpcImhkM3EwTlwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiU2VsZWN0IDIgb3IgbW9yZSBmcmllbmRzIHRvIGNyZWF0ZSBhIGdyb3VwLlwifV19KSkpKSksQyYmbiE9PXZDLkFERF9QQVJUSUNJUEFOVF9UT19DQUxMJiYoMCxvLlopKG1GLHtzZWxlY3RlZFNob3J0Y3V0Ok8sc2VsZWN0U2hvcnRjdXQ6KGUsdCk9PntOKGUpLFAodCl9fSksKDAsby5aKShcInVsXCIse2NsYXNzTmFtZTooMCxRLlopKHNGLmNyZWF0ZUNvbnZlcnNhdGlvbkxpc3QsQyYmc0YubmV3Q3JlYXRlQ29udmVyc2F0aW9uTGlzdCl9LHZvaWQgMCxrZSYmKDAsby5aKShcInVsXCIse2NsYXNzTmFtZTpzRi5uZXdHcm91cHNMaXN0fSx2b2lkIDAseWUubWFwKCgoZSx0KT0+U2UoZSx0LHllKSkpKSwhTyYmQS5sZW5ndGg+MCYmIVYmJigwLHEuanN4cykocS5GcmFnbWVudCx7Y2hpbGRyZW46WygwLG8uWikoXCJoMlwiLHtjbGFzc05hbWU6c0YuY2VsbEhlYWRlckxhYmVsfSx2b2lkIDAsSS5mb3JtYXRNZXNzYWdlKHtpZDpcIm1rSUxSdlwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiQmVzdCBGcmllbmRzXCJ9XX0pKSwoMCxvLlopKFwidWxcIix7Y2xhc3NOYW1lOnNGLmJlc3RGcmllbmRzTGlzdH0sdm9pZCAwLGdlLm1hcCgoKGUsdCk9PlNlKGUsdCxFZSkpKSldfSksIU8mJkVlLm1hcCgoKGUsdCk9PlNlKGUsdCxFZSkpKSxPJiZJZS5tYXAoKChlLHQpPT5TZShlLHQsSWUpKSkpLEFlJiYoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTooMCxRLlopKEMmJnNGLm5ld0J1dHRvbnNDb250YWluZXIpfSx2b2lkIDAsKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6c0YuYnV0dG9uc0NvbnRhaW5lcn0sdm9pZCAwLCgwLG8uWikoUGQse3N1Ym1pdDohMCxjbGFzc05hbWU6c0YucHJpbWFyeUJ1dHRvbkNvbnRhaW5lcixkaXNhYmxlZDpwZX0sdm9pZCAwLG49PT12Qy5ORVdfQ0hBVCYmKGtGfHwoa0Y9KDAsby5aKSh2Uyx7fSkpKSwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpuPT09dkMuU05BUF9TRU5EX1RPP3NGLnByaW1hcnlCdXR0b25MYWJlbFJpZ2h0UGFkZGluZzpzRi5wcmltYXJ5QnV0dG9uTGFiZWxMZWZ0UGFkZGluZ30sdm9pZCAwLG49PT12Qy5TTkFQX1NFTkRfVE8/T0Z8fChPRj0oMCxvLlopKHYuWix7aWQ6XCJTUFA2TXlcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlNlbmRcIn1dfSkpOm49PT12Qy5BRERfUEFSVElDSVBBTlRfVE9fQ0FMTD9ORnx8KE5GPSgwLG8uWikodi5aLHtpZDpcIkFRYXY3N1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiQWRkIHRvIENhbGxcIn1dfSkpOmZlP3dGfHwod0Y9KDAsby5aKSh2Llose2lkOlwiWUtpZVFIXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJHcm91cCBDaGF0XCJ9XX0pKTpERnx8KERGPSgwLG8uWikodi5aLHtpZDpcImxlV014MVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiQ2hhdFwifV19KSkpLG49PT12Qy5TTkFQX1NFTkRfVE8mJigwLG8uWikodV8se2NsYXNzTmFtZTpzRi5zZW5kVG9JY29ufSkpLGhlJiYoMCxvLlopKFBkLHtjbGFzc05hbWU6c0YuY2FsbEJ1dHRvbixvbkNsaWNrOmFzeW5jKCk9PntZKHZvaWQgMCk7dHJ5e2F3YWl0KGE/LihIKSksYigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJzdGFydF9jYWxsX3N1Y2Nlc3NcIixkaW1lbnNpb25zOntpc19ncm91cDpTdHJpbmcoaC5sZW5ndGg+MSl9fSl9Y2F0Y2goZSl7ZSBpbnN0YW5jZW9mIEVycm9yJiYoWShlLm1lc3NhZ2UpLGIoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwic3RhcnRfY2FsbF9mYWlsdXJlXCIsZGltZW5zaW9uczp7aXNfZ3JvdXA6U3RyaW5nKGgubGVuZ3RoPjEpfX0pKX19LGRpc2FibGVkOnBlfSx2b2lkIDAsUEZ8fChQRj0oMCxvLlopKGViLHt9KSksKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6c0YuY2FsbEJ1dHRvbkxhYmVsfSx2b2lkIDAsZmU/TUZ8fChNRj0oMCxvLlopKHYuWix7aWQ6XCI0VVUxcWZcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkdyb3VwIENhbGxcIn1dfSkpOkxGfHwoTEY9KDAsby5aKSh2Llose2lkOlwiTGdkUE9aXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJDYWxsXCJ9XX0pKSkpKSxLJiYoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTooMCxRLlopKHNGLmVycm9yTWVzc2FnZUNvbnRhaW5lcixDJiZzRi5uZXdFcnJvck1lc3NhZ2UpfSx2b2lkIDAsXCIgXCIsSyxcIiBcIikpKX1DKCkuZ2V0TG9nZ2VyKFwiQ3JlYXRlQ29udmVyc2F0aW9uXCIpO2NvbnN0IEJGPXthZGRUb0NhbGxDb250YWluZXI6XCJmeXJCaVwiLGFkZFRvQ2FsbFNoZWV0Q29udGFpbmVyOlwidkF1cnNcIixhZGRUb0NhbGxTaGVldEhlYWRlcjpcImRVUGtpXCIsZnJpZW5kUmVxdWVzdEljb246XCJwbjBPWFwiLGJhY2tCdXR0b246XCJwUzR1WlwiLGljb246XCJvbEhmRlwifTt2YXIgVkY7ZnVuY3Rpb24gR0YoZSl7bGV0e2NvbnZlcnNhdGlvbklkOnQsZGlzbWlzczpuLHNob3dUb2FzdDpyfT1lO2NvbnN0IGk9JGQoKDAsZC51c2VDYWxsYmFjaykoKCgpPT57bigpfSksW25dKSksYT1WbCh0KSxzPSgwLGsubykoVGUuTU0pLGM9KDAsay5vKShTbC5zaiksW2wsdV09KDAsZC51c2VTdGF0ZSkoW10pLGY9KGUsdCk9Pnt1KHQ/Wy4uLmwsZV06bC5maWx0ZXIoKHQ9PnQhPT1lKSkpfTtyZXR1cm4oMCxxLmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpCRi5hZGRUb0NhbGxTaGVldENvbnRhaW5lcixyZWY6aSxjaGlsZHJlbjpbKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6QkYuYWRkVG9DYWxsU2hlZXRIZWFkZXJ9LHZvaWQgMCwoMCxvLlopKHp4LHtjbGFzc05hbWU6QkYuZnJpZW5kUmVxdWVzdEljb259KSxWRnx8KFZGPSgwLG8uWikodi5aLHtpZDpcIkszTk9iRFwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiQWRkIHRvIENhbGxcIn1dfSkpLCgwLG8uWikoUGQse2NsYXNzTmFtZTpCRi5iYWNrQnV0dG9uLG9uQ2xpY2s6bn0sdm9pZCAwLCgwLG8uWikoZ1Ase2NsYXNzTmFtZTpCRi5pY29ufSkpKSwoMCxvLlopKEZGLHtjb250YWluZXJDbGFzc05hbWU6QkYuYWRkVG9DYWxsQ29udGFpbmVyLHBhZ2U6dkMuQUREX1BBUlRJQ0lQQU5UX1RPX0NBTEwsb25TdWJtaXQ6YXN5bmMoKT0+e24oKSxhd2FpdChhc3luYyBlPT57Y29uc3Qgbj1lLm1hcCgoZT0+KDAsei5PWSkoZSkpKTsoMCxpdS5HMikodCxlKSxhd2FpdCBzKHQsbik7Y29uc3QgaT1hd2FpdChhc3luYyBlPT57aWYoMT09PWUubGVuZ3RoKXtjb25zdCB0PShhd2FpdCBjKGUpKVswXSxuPSgwLGJsLmIzKSh0KTtyZXR1cm4oMCxvLlopKHYuWix7aWQ6XCIzUkZKMFVcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MSx2YWx1ZTpcImRpc3BsYXlOYW1lXCJ9LHt0eXBlOjAsdmFsdWU6XCIgYWRkZWQgdG8gY2FsbFwifV0sdmFsdWVzOntkaXNwbGF5TmFtZTpufX0pfXJldHVybigwLG8uWikodi5aLHtpZDpcIlc0bjRibVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZToxLHZhbHVlOlwiZnJpZW5kQ291bnRcIn0se3R5cGU6MCx2YWx1ZTpcIiBmcmllbmRzIGFkZGVkIHRvIGNhbGxcIn1dLHZhbHVlczp7ZnJpZW5kQ291bnQ6ZS5sZW5ndGh9fSl9KShuKTtyKHtrZXk6XCJhZGRlZC1wYXJ0aWNpcGFudFwiLHR5cGU6UWQuUG9zaXRpdmUsdGltZW91dDo1ZTMsY29udGVudDppfSl9KShsKX0sb25DbG9zZTpuLHRvZ2dsZUZyaWVuZDpmLHJlbW92ZUZyaWVuZEZyb21TZWxlY3RlZDplPT57ZihlLCExKX0sc2VsZWN0ZWRGcmllbmRzOmwsc2VsZWN0ZWRFbnRpdGllc0ZvclN1Ym1pc3Npb246bC5tYXAoKGU9Pih7dXNlcklkOmV9KSkpLHRvZ2dsZUNvbnZlcnNhdGlvbjooKT0+e30scmVtb3ZlR3JvdXBGcm9tU2VsZWN0ZWQ6KCk9Pnt9LHNlbGVjdGVkQ29udmVyc2F0aW9uczpbXSxmcmllbmRzVG9IaWRlOlsuLi5hPy5wYXJ0aWNpcGFudHMubWFwKChlPT5lLnBhcnRpY2lwYW50SWQpKT8/W10sLi4uUHUuQ0ZdLHNob3dHcm91cHM6ITF9KV19KX1jb25zdCBIRj0oZSx0KT0+e2NvbnN0IG49ZS5maW5kKChlPT5lLmtpbmQ9PT10JiZcImRlZmF1bHRcIj09PWUuZGV2aWNlSWQpKTtyZXR1cm4gZS5maWx0ZXIoKGU9Pntjb25zdCByPWUua2luZD09PXQsaT1Cb29sZWFuKGUuZGV2aWNlSWQpLG89IW58fFwiZGVmYXVsdFwiPT09ZS5kZXZpY2VJZHx8ZS5ncm91cElkIT09bi5ncm91cElkO3JldHVybiByJiZpJiZvfSkpfTt2YXIgV0YsakY7ZnVuY3Rpb24gWkYoZSl7Y29uc3R7c2V0SW5wdXRQcmVmZXJlbmNlOnQsYXVkaW9JbnB1dElkOm4sdmlkZW9JbnB1dElkOnJ9PSgwLGsubykoUi5KbyxEKSxbaSxhXT0oMCxkLnVzZVN0YXRlKShbXSk7aWYoKDAsZC51c2VFZmZlY3QpKCgoKT0+e2xldCB0PSgpPT4hMTtjb25zdCBuPSgpPT57KGFzeW5jKCk9Pnt0cnl7Y29uc3Qgbj1hd2FpdCBhc3luYyBmdW5jdGlvbigpe2NvbnN0IGU9YXdhaXQgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzKCk7bGV0IHQ9MCxuPTA7Zm9yKGNvbnN0IHIgb2YgZSlpZihcIlwiIT09ci5kZXZpY2VJZCYmKFwiYXVkaW9pbnB1dFwiPT09ci5raW5kP3QrKzpcInZpZGVvaW5wdXRcIj09PXIua2luZCYmbisrKSx0PjAmJm4+MClyZXR1cm4gZTt0cnl7cmV0dXJuIGF3YWl0KDAsb3UuZ0opKHthdWRpbzohMCx2aWRlbzohMH0pLGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlcygpfWNhdGNoKGUpe0MoKS5nZXRMb2dnZXIoXCJJbnB1dFNlbGVjdG9yXCIpLmVycm9yKFwiQ2FtZXJhIG9yIG1pY3JvcGhvbmUgYWNjZXNzIGlzIGRlbmllZFwiLGUpfXJldHVybltdfSgpO2lmKHQoKSlyZXR1cm47Y29uc3Qgcj1IRihuLGUpO2Eocil9Y2F0Y2goZSl7QygpLmdldExvZ2dlcihcIklucHV0U2VsZWN0b3JcIikuZXJyb3IoXCJ1bmFibGUgdG8gZmV0Y2ggbWVkaWEgZGV2aWNlc1wiLGUpfX0pKCl9O3JldHVybiBuKCksbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5hZGRFdmVudExpc3RlbmVyKFwiZGV2aWNlY2hhbmdlXCIsbiksKCk9PntuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJkZXZpY2VjaGFuZ2VcIixuKSx0PSgpPT4hMH19KSxbYSxlXSksXCJzY3JlZW5pbnB1dFwiPT09ZSlyZXR1cm5bXTtjb25zdCBzPXthdWRpb2lucHV0Om4sdmlkZW9pbnB1dDpyLHNjcmVlbmlucHV0OnZvaWQgMH1bZV07bGV0IGM9aS5tYXAoKGU9Pntjb25zdCBuPSgwLG8uWikobEUse2FmdGVyOigwLG8uWikoSmcse2NoZWNrZWQ6ZS5kZXZpY2VJZD09PXN9KX0sdm9pZCAwLCgwLG8uWikoXCJzcGFuXCIse30sdm9pZCAwLGUubGFiZWwpKTtyZXR1cm4gZ0Uoe2tleTplLmRldmljZUlkLGFyaWFMYWJlbDplLmxhYmVsLGNvbnRlbnQ6bixvblNlbGVjdGVkOigpPT57dChlKX19KX0pKTtyZXR1cm4gMD09PWkubGVuZ3RoJiYoYz1bZ0Uoe2tleTpcIm5vLWRldmljZS1hdmFpbGFibGVcIixhcmlhTGFiZWw6XCJcIixjb250ZW50OlwidmlkZW9pbnB1dFwiPT09ZT9XRnx8KFdGPSgwLG8uWikodi5aLHtpZDpcInQwUDFvQlwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiTm8gY2FtZXJhIGZvdW5kXCJ9XX0pKTpqRnx8KGpGPSgwLG8uWikodi5aLHtpZDpcIld0VnpMVVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiTm8gbWljcm9waG9uZSBmb3VuZFwifV19KSksZGlzYWJsZWQ6ITB9KV0pLGN9Y29uc3QgekY9e2NvbnRhaW5lcjpcImE0Q1RPXCIsYnV0dG9uOlwiWm00SGQgQm5hdXJcIixtZWRpYUNvbnRyb2w6XCJiX1phZ1wiLHRvZ2dsZUJ1dHRvbjpcImFveU01IFptNEhkIEJuYXVyXCIsZHJvcERvd25CdXR0b246XCJITHc0MCBabTRIZCBCbmF1clwiLGRpc2FibGVkU3RhdGU6XCJSRTdxbFwiLHNlbGVjdGVkU3RhdGU6XCJ1NHdGVVwiLGRyb3BEb3duSWNvbjpcImtyZmcxXCIsY2hhbmdlSW5wdXRCdXR0b246XCJIc2dGWCBabTRIZCBCbmF1clwiLG1lbnVJdGVtc0NvbnRhaW5lcjpcInViaUJNXCIsc2VsZWN0ZWQ6XCJ2cHhqYVwiLHVuc2VsZWN0ZWQ6XCJtYTdJNlwifTt2YXIgS0YsWUYscUYsWEYsUUYsSkYsJEY7ZnVuY3Rpb24gZUIoZSl7bGV0e2NoaWxkcmVuOnQsY2xhc3NOYW1lOm4sZGF0YVRlc3RJZDpyLGVuYWJsZWQ6aSx0aXRsZTphLG9uVG9nZ2xlQ2xpY2s6cyxob3RrZXk6Y309ZTtyZXR1cm4oMCxvLlopKFwiYnV0dG9uXCIse3R5cGU6XCJidXR0b25cIixcImFyaWEta2V5c2hvcnRjdXRzXCI6Yz9iZChjKTp2b2lkIDAsXCJhcmlhLXByZXNzZWRcIjppLGNsYXNzTmFtZTooMCxRLlopKHpGLnRvZ2dsZUJ1dHRvbixuLCFpJiZ6Ri5kaXNhYmxlZFN0YXRlKSxvbkNsaWNrOnMsdGl0bGU6Yz9gJHthfHxjLmRlc2NyaXB0aW9ufSBbJHtiZChjKX1dYDphfSx2b2lkIDAsdCl9ZnVuY3Rpb24gdEIoZSl7bGV0e2lucHV0U2VsZWN0b3JLaW5kOnQsbWVudVBsYWNlbWVudDpuLGNoaWxkcmVuOnJ9PWU7Y29uc3QgaT1aRih0KSxbYSxzXT0oMCxkLnVzZVN0YXRlKSghMSk7cmV0dXJuIGkubGVuZ3RoPjA/KDAsby5aKShJRSx7Y2xhc3NOYW1lOigwLFEuWikoekYubWVudUl0ZW1zQ29udGFpbmVyLGE/ekYuc2VsZWN0ZWQ6ekYudW5zZWxlY3RlZCksaXRlbXM6aSxwbGFjZW1lbnQ6bixvbk1lbnVDbG9zZTooKT0+cyghMSksb25NZW51T3BlbjooKT0+cyghMCl9LHZvaWQgMCwoZT0+KDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6ekYubWVkaWFDb250cm9sfSx2b2lkIDAsciwoMCxxLmpzeCkoXCJidXR0b25cIix7dHlwZTpcImJ1dHRvblwiLC4uLmUoKSxjbGFzc05hbWU6ekYuY2hhbmdlSW5wdXRCdXR0b24sY2hpbGRyZW46S0Z8fChLRj0oMCxvLlopKFd4LHt9KSl9KSkpKTooMCxxLmpzeCkocS5GcmFnbWVudCx7Y2hpbGRyZW46cn0pfWZ1bmN0aW9uIG5CKGUpe2xldHtEcm9wZG93bkljb246dCxpbnB1dFNlbGVjdG9yS2luZDpuLG1lbnVQbGFjZW1lbnQ6cn09ZTtjb25zdCBpPVpGKG4pO3JldHVybigwLG8uWikoSUUse2l0ZW1zOmkscGxhY2VtZW50OnJ9LHZvaWQgMCwoZT0+KDAscS5qc3gpKFwiZGl2XCIsey4uLmUoKSxjbGFzc05hbWU6ekYuZHJvcERvd25CdXR0b24sY2hpbGRyZW46KDAsby5aKSh0LHtjbGFzc05hbWU6ekYuZHJvcERvd25JY29ufSl9KSkpfWZ1bmN0aW9uIHJCKGUpe2xldHtjbGFzc05hbWU6dCxjb252ZXJzYXRpb25JZDpuLHNob3dBdWRpb1RvZ2dsZTpyLHNob3dUb2FzdDppPSgoKT0+e30pfT1lO2NvbnN0IGE9KDAsbWUuWikoKSxbcyxjLGxdPUl1KCkse3NjcmVlbnNoYXJlRW5hYmxlZDp1fT1mdW5jdGlvbigpe2NvbnN0W2UsdF09KDAsay5vKShSLldEKTtyZXR1cm4oMCxkLnVzZUVmZmVjdCkoKCgpPT4oKT0+e3QoITEpfSksW3RdKSx7c2V0U2NyZWVuRW5hYmxlZDp0LHNjcmVlbnNoYXJlRW5hYmxlZDohMX19KCksZj1mdW5jdGlvbihlKXtjb25zdCB0PSgwLGsubykody5RZCksbj0oMCxPLnJwKShBLnI5KSxyPXR8fG58fCEwLGk9VmwoZSk7cmV0dXJuIHImJmk/LmNvbnZlcnNhdGlvblR5cGU9PT1QZS5pMS5VU0VSQ1JFQVRFREdST1VQfShuKSxbcCxtXT0oMCxkLnVzZVN0YXRlKSghMSk7cmV0dXJuIEdJKENkLlRvZ2dsZU1pY3JvcGhvbmVNdXRlZCwoMCxkLnVzZUNhbGxiYWNrKSgoKCk9PnsoMCxpdS53cikoIXMpfSksW3NdKSx7ZW5hYmxlZDpyfSksR0koQ2QuVG9nZ2xlVmlkZW9FbmFibGVkLCgwLGQudXNlQ2FsbGJhY2spKCgoKT0+eygwLGl1LnBsKShuLCFjKX0pLFtuLGNdKSksKDAsby5aKShaVCx7Y2xhc3NOYW1lOigwLFEuWikoekYuY29udGFpbmVyLHQpfSx2b2lkIDAsKDAsby5aKSh0Qix7aW5wdXRTZWxlY3RvcktpbmQ6XCJ2aWRlb2lucHV0XCIsbWVudVBsYWNlbWVudDpfRS5Ub3BMZWZ0fSx2b2lkIDAsKDAsby5aKShlQix7ZGF0YVRlc3RJZDpcImFwcC50YWxrLk1lZGlhQ29udHJvbC5WaWRlb1wiLGVuYWJsZWQ6YyxvblRvZ2dsZUNsaWNrOigpPT4oMCxpdS5wbCkobiwhYyksaG90a2V5OkNkLlRvZ2dsZVZpZGVvRW5hYmxlZH0sdm9pZCAwLGM/WUZ8fChZRj0oMCxvLlopKFZ4LHt9KSk6cUZ8fChxRj0oMCxvLlopKHh4LHt9KSkpKSxyJiYoMCxvLlopKHRCLHtpbnB1dFNlbGVjdG9yS2luZDpcImF1ZGlvaW5wdXRcIixtZW51UGxhY2VtZW50Ol9FLlRvcFJpZ2h0fSx2b2lkIDAsKDAsby5aKShlQix7ZGF0YVRlc3RJZDpcImFwcC50YWxrLk1lZGlhQ29udHJvbC5BdWRpb1wiLGVuYWJsZWQ6cyxvblRvZ2dsZUNsaWNrOigpPT4oMCxpdS53cikoIXMpLGhvdGtleTpDZC5Ub2dnbGVNaWNyb3Bob25lTXV0ZWR9LHZvaWQgMCxzP1hGfHwoWEY9KDAsby5aKShKeCx7fSkpOlFGfHwoUUY9KDAsby5aKShxeCx7fSkpKSksdSYmKDAsby5aKSh0Qix7aW5wdXRTZWxlY3RvcktpbmQ6XCJzY3JlZW5pbnB1dFwifSx2b2lkIDAsKDAsby5aKShlQix7ZGF0YVRlc3RJZDpcImFwcC50YWxrLk1lZGlhQ29udHJvbC5TY3JlZW5cIixlbmFibGVkOiFsLG9uVG9nZ2xlQ2xpY2s6KCk9PigwLGl1LmhuKSghbCksdGl0bGU6YS5mb3JtYXRNZXNzYWdlKHtpZDpcInU1M3h3alwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiVG9nZ2xlIHNjcmVlbiBzaGFyaW5nXCJ9XX0pfSx2b2lkIDAsSkZ8fChKRj0oMCxvLlopKHRGLHt9KSkpKSxwJiYoMCxvLlopKEdGLHtjb252ZXJzYXRpb25JZDpuLGRpc21pc3M6KCk9Pm0oITEpLHNob3dUb2FzdDppfSksZiYmKDAsby5aKShlQix7ZGF0YVRlc3RJZDpcImFwcC50YWxrLlRvZ2dsZUJ1dHRvbi5BZGRQYXJ0aWNpcGFudFwiLGVuYWJsZWQ6ITAsb25Ub2dnbGVDbGljazooKT0+bSghcCksY2xhc3NOYW1lOnA/ekYuc2VsZWN0ZWRTdGF0ZTp2b2lkIDAsdGl0bGU6YS5mb3JtYXRNZXNzYWdlKHtpZDpcIlcxcXZiR1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiQWRkIFBhcnRpY2lwYW50XCJ9XX0pfSx2b2lkIDAsJEZ8fCgkRj0oMCxvLlopKHp4LHt9KSkpKX1jb25zdCBpQj17bWF4SGVpZ2h0OlwiYWNFR2NcIixtYXhXaWR0aDpcImFUa0dHXCIsY29udGVudDpcIlZrblhjXCJ9O2Z1bmN0aW9uIG9CKGUpe2xldHtjaGlsZHJlbjp0LGFzcGVjdFJhdGlvOm59PWU7Y29uc3Qgcj1uP3thc3BlY3RSYXRpbzpgJHtufWB9OnZvaWQgMDtyZXR1cm4oMCxvLlopKHhzLmRpdix7Y2xhc3NOYW1lOmlCLm1heEhlaWdodCxzdHlsZTpyfSx2b2lkIDAsKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6aUIubWF4V2lkdGgsc3R5bGU6cn0sdm9pZCAwLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOmlCLmNvbnRlbnR9LHZvaWQgMCx0KSkpfXZhciBhQjtmdW5jdGlvbiBzQigpe3JldHVybiBzQj1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LHNCLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBjQj1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIixzQih7ZmlsbDpcIm5vbmVcIixoZWlnaHQ6MTksdmlld0JveDpcIjAgMCAxOCAxOVwiLHdpZHRoOjE4LHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksYUJ8fChhQj1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2NsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMTAuMzEzIDMuNTg2djEwLjI4OWMwIDEuNDQuOTkzIDIuNjAzIDIuMjAyIDIuNjI1bC4wNDgtLjAwMmEuOTM4LjkzOCAwIDAgMSAwIDEuODc3SDUuNDM3YS45MzguOTM4IDAgMCAxIDAtMS44NzdsLjAzNS4wMDFjMS4yMjItLjAyMSAyLjIxNS0xLjE4NCAyLjIxNS0yLjYyNFYzLjU4NWMwLS43MzYtLjYtMS4zMzUtMS4zMzktMS4zMzVoLTIuNmMtMS4xMzYgMC0yLjA2LjkyNS0yLjA2IDIuMDYyYS43NS43NSAwIDAgMS0xLjUgMFYxLjdDLjE4Ny43NTguOTUgMCAxLjkwNSAwaDE0LjE4OGMuOTQ3IDAgMS43MTguNzYzIDEuNzE4IDEuN3YyLjYxMmEuNzUuNzUgMCAwIDEtMS41IDAgMi4wNjQgMi4wNjQgMCAwIDAtMi4wNi0yLjA2MmgtMi42Yy0uNzQgMC0xLjM0LjYtMS4zNCAxLjMzNnpcIixmaWxsOlwiI2ZmZlwiLGZpbGxSdWxlOlwiZXZlbm9kZFwifSkpKTt2YXIgbEIsdUI7ZnVuY3Rpb24gZEIoKXtyZXR1cm4gZEI9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxkQi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y29uc3QgZkI9ZT0+ZC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsZEIoe3dpZHRoOjIwLGhlaWdodDoyMCx2aWV3Qm94OlwiMCAwIDIwIDIwXCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLGxCfHwobEI9ZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTIuODEyIDEyLjYwNGMuNDYgMCAuODM0LjM3NC44MzQuODM0djIuMDgzYzAgLjQ2LjM3My44MzQuODMzLjgzNGgxMS4wNDJjLjQ2IDAgLjgzMy0uMzc0LjgzMy0uODM0di0yLjA4M2EuODMzLjgzMyAwIDAgMSAxLjY2NyAwdjIuMDgzYTIuNSAyLjUgMCAwIDEtMi41IDIuNUg0LjQ3OWEyLjUgMi41IDAgMCAxLTIuNS0yLjV2LTIuMDgzYzAtLjQ2LjM3My0uODM0LjgzMy0uODM0WlwiLGZpbGw6XCIjMkMzMTM3XCJ9KSksdUJ8fCh1Qj1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNMTAuODMzIDIuNGMwLS40MDQtLjM3My0uNzMzLS44MzMtLjczMy0uNDYgMC0uODMzLjMyOS0uODMzLjczNHY5LjMzOGwtMi4xMi0yLjEyYS44MzMuODMzIDAgMCAwLTEuMTc4IDEuMTc5bDMuNTQyIDMuNTQyYS44MzMuODMzIDAgMCAwIDEuMTc4IDBsMy41NDItMy41NDJhLjgzMy44MzMgMCAwIDAtMS4xNzktMS4xNzlsLTIuMTE5IDIuMTJWMi40WlwiLGZpbGw6XCIjMkMzMTM3XCJ9KSkpO3ZhciBwQjtmdW5jdGlvbiBtQigpe3JldHVybiBtQj1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LG1CLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBoQj1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIixtQih7d2lkdGg6MjAsaGVpZ2h0OjIwLHZpZXdCb3g6XCIwIDAgMjAgMjBcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSkscEJ8fChwQj1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNNC4yMyA3LjU2YS44MzMuODMzIDAgMCAxIC44MzItLjg5M2g5Ljg3NmMuNDg0IDAgLjg2Ni40MS44MzIuODkzbC0uNjYgOS4yMjZhMS42NjcgMS42NjcgMCAwIDEtMS42NjIgMS41NDhINi41NTJjLS44NzQgMC0xLjYtLjY3Ni0xLjY2My0xLjU0OEw0LjIzIDcuNTZaTTguMzMzIDEuNjY3QS44MzMuODMzIDAgMCAwIDcuNSAyLjV2LjgzNEg0LjE2N2EuODMzLjgzMyAwIDEgMCAwIDEuNjY2aDExLjY2NmEuODMzLjgzMyAwIDAgMCAwLTEuNjY2SDEyLjVWMi41YS44MzMuODMzIDAgMCAwLS44MzMtLjgzM0g4LjMzM1pcIixmaWxsOlwiIzJDMzEzN1wifSkpKTtmdW5jdGlvbiB2QihlLHQpe3JldHVybmBzbmFwX3NlbmQuJHtlfS4ke3R9YH1jb25zdCBnQj17c25hcFByZXZpZXc6XCJLSG5LT1wiLGJhY2tBcnJvdzpcIlNUbGtYXCIsdHJhc2hDYW46XCJRZ0NLS1wiLGRvd25sb2FkQnV0dG9uOlwiaE9IU3FcIixjYXB0aW9uQnV0dG9uOlwiZVViMzJcIixhY3RpdmU6XCJhV1RkTVwiLGNhcHRpb25UZXh0OlwiQjlRaVhcIixuZXh0QnV0dG9uOlwiZWlSd3hcIixzZW5kVG9JY29uOlwibklLZ2ZcIn0seUI9KEMoKS5nZXRMb2dnZXIoXCJbU25hcFByZXZpZXddXCIpLC4wMjUpLEVCPShlLHQsbik9Pntjb25zdCByPXQuc3BsaXQoXCIgXCIpLHtsaW5lczppfT1yLnJlZHVjZSgoKHQsaSxvKT0+e2xldHtsaW5lczphLGN1cnJlbnRMaW5lOnN9PXQ7aWYoZS5tZWFzdXJlVGV4dChgJHtzfSAke2l9YCkud2lkdGg+PW4paWYocy5sZW5ndGgmJmEucHVzaChgJHtzfWApLGUubWVhc3VyZVRleHQoaSkud2lkdGg+bil7bGV0IHQ9XCJcIjtmb3IoY29uc3QgciBvZiBpKWUubWVhc3VyZVRleHQodCtyKS53aWR0aD5uPyh0Lmxlbmd0aCYmYS5wdXNoKHQpLHQ9cik6dCs9cjt0Lmxlbmd0aCYmKHM9dCl9ZWxzZSBzPWk7ZWxzZSBzKz1gICR7aX1gO3JldHVybiBvPT09ci5sZW5ndGgtMSYmYS5wdXNoKHMpLHtsaW5lczphLGN1cnJlbnRMaW5lOnN9fSkse2xpbmVzOltdLGN1cnJlbnRMaW5lOlwiXCJ9KTtyZXR1cm4gaX07dmFyIF9CLElCLFNCLGJCLFRCO0MoKS5nZXRMb2dnZXIoXCJbU25hcFByZXZpZXddXCIpO2NvbnN0IENCPTEwMCxBQj0xNCxSQj0yNTAsa0I9MjtmdW5jdGlvbiBPQihlKXtsZXR7Y2FudmFzOnQsaW1hZ2VEYXRhOm4saW1hZ2VEaW1lbnNpb25zOnIsb25TbmFwRGF0YUNoYW5nZTppLG9uQ2xvc2U6YSxvblNlbmRUb0NsaWNrZWQ6c309ZTtjb25zdCBjPSgwLG1lLlopKCksW2wsdV09KDAsZC51c2VTdGF0ZSkoXCJcIiksW2YscF09KDAsZC51c2VTdGF0ZSkodm9pZCAwKSxtPSgwLGQudXNlUmVmKShudWxsKSxoPSgwLGQudXNlUmVmKShudWxsKSx7YmxvY2tTaXplOmd9PW5SKG0uY3VycmVudCkseT0oMCxrLm8pKFRlLlRlKSxFPWc/Zyp5QjpBQixfPUUqa0IsST0oMCxkLnVzZU1lbW8pKCgoKT0+e2lmKG4pcmV0dXJuIFVSTC5jcmVhdGVPYmplY3RVUkwobil9KSxbbl0pLFM9YXN5bmMgZT0+e2lmKEkmJm0uY3VycmVudCl0cnl7bGV0IG47aWYoaC5jdXJyZW50KXtjb25zdHt0b3A6ZSxoZWlnaHQ6dH09bS5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHt0b3A6aX09aC5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89aS1lO249ci5oZWlnaHQqd2luZG93LmRldmljZVBpeGVsUmF0aW8qby90fXJldHVybiBhd2FpdCBhc3luYyBmdW5jdGlvbihlLHQsbixyLGkpe2NvbnN0IG89d2luZG93LmRldmljZVBpeGVsUmF0aW87ZS5oZWlnaHQ9aS5oZWlnaHQqbyxlLndpZHRoPWkud2lkdGgqbztjb25zdCBhPWUuZ2V0Q29udGV4dChcIjJkXCIpO2lmKCFhKXRocm93IG5ldyBFcnJvcihcIkNhbnZhcyBjcmVhdGlvbiBmYWlsZWRcIik7aWYoYS5jbGVhclJlY3QoMCwwLGUud2lkdGgsZS5oZWlnaHQpLGEuZHJhd0ltYWdlKHIsMCwwLGUud2lkdGgsZS5oZWlnaHQpLHQmJm4pe2NvbnN0IHI9aS5oZWlnaHQqeUIqbzthLmZvbnQ9YCR7cn1weCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmYCxhLnRleHRCYXNlbGluZT1cInRvcFwiLGEudGV4dEFsaWduPVwiY2VudGVyXCI7Y29uc3Qgcz1lLndpZHRoLXIsYz1FQihhLHQscyk7YS5maWxsU3R5bGU9XCJyZ2JhKDAsIDAsIDAsIDAuNClcIixhLmZpbGxSZWN0KDAsbixlLndpZHRoLHIqKGMubGVuZ3RoKzEpKSxhLmZpbGxTdHlsZT1cIndoaXRlXCI7Y29uc3QgbD1uK3IvMjtmb3IobGV0IHQ9MDt0PGMubGVuZ3RoO3QrKylhLmZpbGxUZXh0KGNbdF0sZS53aWR0aC8yLGwrdCpyKX1yZXR1cm4gbmV3IFByb21pc2UoKCh0LG4pPT57ZS50b0Jsb2IoKGZ1bmN0aW9uKGUpe2UmJmUgaW5zdGFuY2VvZiBCbG9iP3QoZSk6bihuZXcgRXJyb3IoXCJObyBibG9iIGNyZWF0ZWRcIikpfSksXCJpbWFnZS9qcGVnXCIsLjk1KX0pKX0odCxlLG4sbS5jdXJyZW50LHIpfWNhdGNoKGUpe0Vycm9yfX0sVD1lTigpKChhc3luYyBlPT57dHJ5e2NvbnN0IHQ9YXdhaXQgUyhlKTtpKHQpfWNhdGNoKGUpe0Vycm9yfX0pLENCKTtyZXR1cm4oMCxkLnVzZUxheW91dEVmZmVjdCkoKCgpPT57aC5jdXJyZW50JiZsLmxlbmd0aCYmKGguY3VycmVudC5zdHlsZS5oZWlnaHQ9YCR7aC5jdXJyZW50LnNjcm9sbEhlaWdodH1weGApfSksW2wsRV0pLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOmdCLnNuYXBQcmV2aWV3fSx2b2lkIDAsKDAsby5aKShcImRpdlwiLHt9LHZvaWQgMCwoMCxvLlopKFwiYnV0dG9uXCIse3R5cGU6XCJidXR0b25cIixjbGFzc05hbWU6Z0IuYmFja0Fycm93LHRpdGxlOmMuZm9ybWF0TWVzc2FnZSh7aWQ6XCJIdWFiMW1cIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkNsb3NlIHNuYXAgcHJldmlldyBhbmQgcmV0dXJuIHRvIGNhbWVyYS5cIn1dfSksb25DbGljazphfSx2b2lkIDAsX0J8fChfQj0oMCxvLlopKEtnLlose30pKSksKDAsby5aKShcImJ1dHRvblwiLHt0eXBlOlwiYnV0dG9uXCIsY2xhc3NOYW1lOigwLFEuWikoZ0IuY2FwdGlvbkJ1dHRvbixmJiZnQi5hY3RpdmUpLHRpdGxlOmMuZm9ybWF0TWVzc2FnZSh7aWQ6XCJ5YzhSQ0NcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkFkZCBhIGNhcHRpb25cIn1dfSksb25DbGljazooKT0+e2IoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOnZCKFwibGFuZGluZ19jYW1lcmFcIixcInByZXZpZXcuY3JlYXRpdmVfdG9vbHMuY2FwdGlvbi5hZGRfY2FwdGlvblwiKX0pLHAoci5oZWlnaHQvMi1fLzIpLGguY3VycmVudD8uZm9jdXMoKX19LHZvaWQgMCxJQnx8KElCPSgwLG8uWikoY0Ise30pKSkpLChCb29sZWFuKGYpfHxsLmxlbmd0aD4wKSYmKDAscS5qc3gpKHhzLnRleHRhcmVhLHtzdHlsZTp7dG9wOmZ8fHIuaGVpZ2h0LzItXy8yLHBhZGRpbmc6RS8yK1wicHhcIixsaW5lSGVpZ2h0OmAke0V9cHhgLGZvbnRTaXplOkV9LGNsYXNzTmFtZTpnQi5jYXB0aW9uVGV4dCxkcmFnTW9tZW50dW06ITEsZHJhZ0NvbnN0cmFpbnRzOm0sZHJhZ0VsYXN0aWM6MCxkcmFnOlwieVwiLFwiYXJpYS1sYWJlbFwiOmMuZm9ybWF0TWVzc2FnZSh7aWQ6XCIrcElBZTlcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkNhcHRpb24gSW5wdXRcIn1dfSkscmVmOmgsb25EcmFnRW5kOigpPT57VChsKSxiKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTp2QihcImxhbmRpbmdfY2FtZXJhXCIsXCJwcmV2aWV3LmNyZWF0aXZlX3Rvb2xzLmNhcHRpb24ucmVwb3NpdGlvblwiKX0pfSxvbkNoYW5nZTplPT57Y29uc3QgdD1lLnRhcmdldC52YWx1ZS5yZXBsYWNlKFwiXFxuXCIsXCJcIik7dSh0KSxUKHQpfSx2YWx1ZTpsLGF1dG9Gb2N1czohMCxtYXhMZW5ndGg6UkIscm93czoxfSksQm9vbGVhbihmKSYmKDAsby5aKShcImJ1dHRvblwiLHt0eXBlOlwiYnV0dG9uXCIsY2xhc3NOYW1lOigwLFEuWikoZ0IudHJhc2hDYW4sZiYmZ0IuYWN0aXZlKSx0aXRsZTpjLmZvcm1hdE1lc3NhZ2Uoe2lkOlwid3BlbGgvXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJEZWxldGUgY2FwdGlvblwifV19KSxvbkNsaWNrOigpPT57YigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6dkIoXCJsYW5kaW5nX2NhbWVyYVwiLFwicHJldmlldy5jcmVhdGl2ZV90b29scy5jYXB0aW9uLmRlbGV0ZV9jYXB0aW9uXCIpfSkscCh2b2lkIDApLHUoXCJcIiksVChcIlwiKX19LHZvaWQgMCxTQnx8KFNCPSgwLG8uWikoaEIse30pKSksKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6Z0Iuc25hcFByZXZpZXcsb25DbGljazplPT57aWYoIWYpe2NvbnN0IHQ9ZS5jdXJyZW50VGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtwKGUuY2xpZW50WS10KX1oLmN1cnJlbnQ/LmZvY3VzKCl9fSx2b2lkIDAsbiYmKDAscS5qc3gpKFwiaW1nXCIse3JlZjptLHNyYzpJfSkpLCgwLG8uWikoXCJidXR0b25cIix7dHlwZTpcImJ1dHRvblwiLGNsYXNzTmFtZTpnQi5kb3dubG9hZEJ1dHRvbix0aXRsZTpjLmZvcm1hdE1lc3NhZ2Uoe2lkOlwicERDcWpvXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJEb3dubG9hZCB5b3VyIFNuYXAuXCJ9XX0pLG9uQ2xpY2s6YXN5bmMoKT0+e2NvbnN0IGU9YXdhaXQgUyhsKTtpZihlKXtjb25zdCB0PW5ldyBEYXRlOyFmdW5jdGlvbihlLHQpe2NvbnN0IG49VVJMLmNyZWF0ZU9iamVjdFVSTChlKTshZnVuY3Rpb24oZSx0KXtjb25zdCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO24uc3R5bGUuZGlzcGxheT1cIm5vbmVcIixuLmhyZWY9ZSxuLmRvd25sb2FkPXQ/P1wiXCIsZG9jdW1lbnQuYm9keS5hcHBlbmQobiksbi5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobil9KG4sdCksVVJMLnJldm9rZU9iamVjdFVSTChuKX0oZSxgU25hcGNoYXQgZm9yIFdlYiAke3QuZ2V0RnVsbFllYXIoKX0tJHt0LmdldE1vbnRoKCl9LSR7dC5nZXREYXRlKCl9IGF0ICR7dC50b0xvY2FsZVN0cmluZyh2b2lkIDAse2hvdXIxMjohMCxob3VyOlwibnVtZXJpY1wiLG1pbnV0ZTpcIm51bWVyaWNcIixzZWNvbmQ6XCJudW1lcmljXCJ9KS5yZXBsYWNlQWxsKFwiOlwiLFwiX1wiKX0uanBlZ2ApfX19LHZvaWQgMCxiQnx8KGJCPSgwLG8uWikoZkIse30pKSksKDAsby5aKShQZCx7Y2xhc3NOYW1lOigwLFEuWikoZ0IubmV4dEJ1dHRvbiksb25DbGljazooKT0+e2IoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOnZCKFwibGFuZGluZ19jYW1lcmFcIixcInByZXZpZXcuc2VuZC5zdGFydF9waWNrZXJcIil9KSxiKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcInNuYXBfc2VuZF9sYW5kaW5nX2NhbWVyYV9wcmV2aWV3X3NlbmRfc3RhcnRfcGlja2VyXCJ9KSx5KCkscyghMCl9fSx2b2lkIDAsVEJ8fChUQj0oMCxvLlopKHYuWix7aWQ6XCJ5L3lJTlNcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlNlbmQgVG9cIn1dfSkpLCgwLG8uWikodV8se2NsYXNzTmFtZTpnQi5zZW5kVG9JY29ufSkpKX1jb25zdCBOQj17Y2FtZXJhVmlldzpcIkpfWTFLXCIsc25hcEJ1dHRvbjpcInNBaGNGXCIsc2VsZmllQ29udGFpbmVyOlwiSFNRNzVcIixjYW1lcmFCdXR0b25zOlwidlBVTVBcIixjbG9zZUNhbWVyYUJ1dHRvbjpcInF5dmxsXCIsY2FtZXJhU2VsZWN0b3JXcmFwcGVyOlwiU24yNjlcIixjYW1lcmFPZmY6XCJwa3kzOVwiLGNsb3NlZENhbWVyYVN0YXR1czpcIkVrSGduXCIsY2xvc2VkQ2FtZXJhVGV4dDpcImZXUlNEXCIsb3BlbkNhbWVyYUJ1dHRvbjpcIm1CaU1WXCIsY2FtZXJhQnV0dG9uSWNvbkJvcmRlcjpcImtOR2taXCIsY29udGFpbmVyOlwiRkt0VmhcIixoaW50SW1hZ2U6XCJXYlRPVFwiLHRleHRDYWxsb3V0OlwiYjhGT1NcIixjYW1lcmFCbG9ja2VkOlwiWDM4NndcIixsb2NrSWNvbjpcIlBVcXpBXCIsaGVscExpbms6XCJjMlI3QlwifTt2YXIgd0IsREIsUEIsTUIsTEIsVUIseEIsRkIsQkIsVkIsR0IsSEIsV0I7Y29uc3QgakI9W3t2YWx1ZTpcImNvbXBhY3RcIixtYXhQaXhlbHM6TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsbWluUGl4ZWxzOjIwMH0se3ZhbHVlOlwidGlueVwiLG1heFBpeGVsczoyMDAsbWluUGl4ZWxzOjB9XTtmdW5jdGlvbiBaQihlKXtsZXR7aGFuZGxlT3BlbkNhbWVyYUFjdGlvbjp0fT1lO2NvbnN0W24scl09Y00oakIpO3JldHVybigwLHEuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOk5CLmNsb3NlZENhbWVyYVN0YXR1cyxyZWY6bixjaGlsZHJlbjpbKDAsby5aKShcImJ1dHRvblwiLHt0eXBlOlwiYnV0dG9uXCIsY2xhc3NOYW1lOk5CLm9wZW5DYW1lcmFCdXR0b24sb25DbGljazp0fSx2b2lkIDAsKDAsby5aKShcInN2Z1wiLHtjbGFzc05hbWU6TkIuY2FtZXJhQnV0dG9uSWNvbkJvcmRlcix2aWV3Qm94OlwiMCAwIDEyMSAxMjBcIix3aWR0aDpcIjEwMCVcIixoZWlnaHQ6XCIxMDAlXCJ9LHZvaWQgMCx3Qnx8KHdCPSgwLG8uWikoXCJkZWZzXCIse30sdm9pZCAwLCgwLG8uWikoXCJsaW5lYXJHcmFkaWVudFwiLHtpZDpcImdyYWQxXCIseDE6XCIwJVwiLHkxOlwiMCVcIix4MjpcIjAlXCIseTI6XCIxMDAlXCJ9LHZvaWQgMCwoMCxvLlopKFwic3RvcFwiLHtvZmZzZXQ6XCIwXCIsc3RvcENvbG9yOlwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpXCJ9KSwoMCxvLlopKFwic3RvcFwiLHtvZmZzZXQ6XCIxXCIsc3RvcENvbG9yOlwicmdiYSgyNTUsIDI1NSwgMjU1LCAwKVwifSkpKSksREJ8fChEQj0oMCxvLlopKFwiZ1wiLHtmaWxsOlwibm9uZVwifSx2b2lkIDAsKDAsby5aKShcImNpcmNsZVwiLHtjeDpcIjUwJVwiLGN5OlwiNTAlXCIscjpcIjYwXCIsc3Ryb2tlOlwidXJsKCNncmFkMSlcIixzdHJva2VXaWR0aDpcIjEuNjRweFwifSkpKSksUEJ8fChQQj0oMCxvLlopKElVLHt9KSkpLFwidGlueVwiIT09ciYmKDAsby5aKShcInBcIix7Y2xhc3NOYW1lOk5CLmNsb3NlZENhbWVyYVRleHR9LHZvaWQgMCxNQnx8KE1CPSgwLG8uWikodi5aLHtpZDpcImxnQUNzQ1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiQ2xpY2sgdGhlIENhbWVyYSB0byBzZW5kIFNuYXBzXCJ9XX0pKSksXCJ0aW55XCIhPT1yJiYoMCxvLlopKEVMLHtvcGVuQ2FtZXJhQ2FsbGJhY2s6dH0pXX0pfWZ1bmN0aW9uIHpCKGUpe3ZhciB0LG47bGV0e3NlbGZDYW1lcmFPbjpyLHNldENhbWVyYU9uVGltZWQ6aSxpbWFnZURhdGE6YSxzZXRJbWFnZURhdGE6cyxzZXRDb21wb3NlZFNuYXBEYXRhOmMsY29udHJvbHM6bCxvblNlbmRUb0NsaWNrZWQ6dSxzZXRCaXRtb2ppT3ZlcmxhcFN0YXRlOmYsY2hpbGRyZW46cCxzZW5kVG9Db21wb25lbnQ6bX09ZTtjb25zdCBoPSgwLGsubykoUi5uMiksZz0oMCxrLm8pKFIudE4pLHk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSxbRV09KDAsay5vKShSLlZLKTt1dSgpO2NvbnN0W19dPSgwLGsubykoUi5aRiksW0ksU109KDAsZC51c2VTdGF0ZSkoe3dpZHRoOjAsaGVpZ2h0OjB9KSxUPSgwLGQudXNlUmVmKShudWxsKSxDPUJvb2xlYW4oYSksQT0hQyYmcixPPSFFJiYhciYmIUMsdz1lPT57YigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6dkIoXCJsYW5kaW5nX2NhbWVyYVwiLFwiY2FwdHVyZVwiKX0pLGZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEscyl7aWYoIXQpcmV0dXJuO2Uud2lkdGg9dC52aWRlb1dpZHRoLGUuaGVpZ2h0PXQudmlkZW9IZWlnaHQsaSh7d2lkdGg6dC52aWRlb1dpZHRoLGhlaWdodDp0LnZpZGVvSGVpZ2h0fSk7Y29uc3QgYz1lLmdldENvbnRleHQoXCIyZFwiKTtjPy5kcmF3SW1hZ2UoYT8/dCwwLDApLGUudG9CbG9iKChmdW5jdGlvbihlKXtlJiZlIGluc3RhbmNlb2YgQmxvYiYmKHIoZSksbyhlKSl9KSxcImltYWdlL2pwZWdcIiwuOTUpLCgwLFljLlBSKShuLFwiQ0FNRVJBXCIpfSh5LFQuY3VycmVudCxlLHMsUyxjLGcpfSxEPSgwLG1lLlopKCksW1AsTV09KDAsZC51c2VTdGF0ZSkoITEpLFtMLFVdPSgwLGQudXNlU3RhdGUpKCExKSx4PWFzeW5jKCk9PntiKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTp2QihcImxhbmRpbmdfY2FtZXJhXCIsXCJvcGVuLmZyb21fY2xpY2tcIil9KTtjb25zdCBlPShhd2FpdCBtTCgpKS5zdGF0ZTtcInByb21wdFwiPT09ZXx8XCJncmFudGVkXCIhPT1lJiYoMCxOLmMzKSgpPT09Ti5NWC5TQUZBUkk/TSghMCk6aSghMCl9LEY9ZT0+e2YoTz9lP1VNLlJFRFVDRV9PUEFDSVRZOlVNLlNIT1c6VU0uSElERSl9LFtCLFZdPWNNKGpCKSx7cmVtb3ZlTGVuczpHfT1kTCgpOygwLGQudXNlRWZmZWN0KSgoKCk9PigpPT57RygpfSksW0ddKSwoMCxkLnVzZUVmZmVjdCkoKCgpPT57QXx8Q3x8IWh8fCgwLG91LmcpKGgpfSksW0FdKTtjb25zdHtzdHlsZTpILGNvbnRlbnQ6V309QSYmXCJncmFudGVkXCI9PT1fP3tzdHlsZTpudWxsLGNvbnRlbnQ6KDAsby5aKSh4cy5kaXYse2NsYXNzTmFtZTpOQi5zZWxmaWVDb250YWluZXIsYW5pbWF0ZTpsfSxcInNlbGZpZS12aWRlb1wiLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOk5CLmNhbWVyYUJ1dHRvbnN9LHZvaWQgMCwoMCxvLlopKFwiYnV0dG9uXCIse3R5cGU6XCJidXR0b25cIixjbGFzc05hbWU6TkIuY2xvc2VDYW1lcmFCdXR0b24sdGl0bGU6RC5mb3JtYXRNZXNzYWdlKHtpZDpcIklIZWNOblwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiVHVybiBvZmYgY2FtZXJhXCJ9XX0pLG9uQ2xpY2s6KCk9PntiKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTp2QihcImxhbmRpbmdfY2FtZXJhXCIsXCJjbG9zZS5mcm9tX2NsaWNrXCIpfSksaSghMSl9fSx2b2lkIDAsTEJ8fChMQj0oMCxvLlopKGdQLHt9KSkpLCExLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOk5CLmNhbWVyYVNlbGVjdG9yV3JhcHBlcn0sdm9pZCAwLCgwLG8uWikobkIse0Ryb3Bkb3duSWNvbjpSVSxpbnB1dFNlbGVjdG9yS2luZDpcInZpZGVvaW5wdXRcIixtZW51UGxhY2VtZW50Ol9FLkJvdHRvbUxlZnR9KSkpLCgwLG8uWikoTXgse3BhcmVudFJlZjpULHN0cmVhbTpofSx2b2lkIDAsKDAsby5aKSh5VSx7b25DYXB0dXJlU25hcEltYWdlOncsZmFsbGJhY2s6KDAsby5aKShcImJ1dHRvblwiLHt0eXBlOlwiYnV0dG9uXCIsb25DbGljazooKT0+e3coe2xlbnNJZDp2b2lkIDAsbmF2aWdhdGlvbkFjdGlvbjpcIkVOVEVSX0ZPUkVHUk9VTkRcIn0pfSxjbGFzc05hbWU6TkIuc25hcEJ1dHRvbn0sdm9pZCAwLFVCfHwoVUI9KDAsby5aKShOVSx7fSkpKX0pKSl9OntzdHlsZTpOQi5jYW1lcmFPZmYsY29udGVudDooMCxOLmMzKSgpIT09Ti5NWC5TQUZBUkk/XCJkZW5pZWRcIj09PV8/KDAscS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6TkIuY29udGFpbmVyLHJlZjpCLGNoaWxkcmVuOlsoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpOQi5oaW50SW1hZ2V9LHZvaWQgMCx4Qnx8KHhCPSgwLG8uWikoXCJpbWdcIix7c3JjOnBMLGFsdDpcImxhbmRpbmctcGFnZS1jYW1lcmEtbWljLWRlbmllZC1jYWxsb3V0XCJ9KSkpLFwidGlueVwiIT09ViYmKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6TkIudGV4dENhbGxvdXR9LHZvaWQgMCwoMCxvLlopKFwic3BhblwiLHtjbGFzc05hbWU6TkIuY2FtZXJhQmxvY2tlZH0sdm9pZCAwLEZCfHwoRkI9KDAsby5aKSh2Llose2lkOlwieFV3Nkx6XCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJDYW1lcmEgYmxvY2tlZFwifV19KSkpLCgwLG8uWikoXCJzcGFuXCIse30sdm9pZCAwLCgwLG8uWikodi5aLHtpZDpcIjFGTzF3Y1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiQ2xpY2sgdGhlIFwifSx7dHlwZToxLHZhbHVlOlwibG9ja1wifSx7dHlwZTowLHZhbHVlOlwiIGljb24gaW4gdGhlIGFkZHJlc3MgYmFyLCBhbGxvdyBcIn0se3R5cGU6MSx2YWx1ZTpcImJyXCJ9LHt0eXBlOjAsdmFsdWU6XCIgeW91ciBjYW1lcmEgYW5kIG1pY3JvcGhvbmUgYW5kIHJlbG9hZCB0aGUgcGFnZS5cIn1dLHZhbHVlczp7bG9jazooMCxvLlopKFRVLHtjbGFzc05hbWU6TkIubG9ja0ljb259KSxicjpCQnx8KEJCPSgwLG8uWikoXCJiclwiLHt9KSl9fSkpLCgwLG8uWikoXCJhXCIse2NsYXNzTmFtZTpOQi5oZWxwTGluayxvbkNsaWNrOigpPT4oMCxXRC5KTCkoXCJsYW5kaW5nX3BhZ2VfY2FsbG91dFwiKX0sdm9pZCAwLFZCfHwoVkI9KDAsby5aKSh2Llose2lkOlwiSDJGbS9RXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJHZXQgaGVscFwifV19KSkpKV19KTpcInByb21wdFwiPT09XyYmTD8oMCxxLmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpOQi5jb250YWluZXIscmVmOkIsY2hpbGRyZW46WygwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOk5CLmhpbnRJbWFnZX0sdm9pZCAwLEdCfHwoR0I9KDAsby5aKShcImltZ1wiLHtzcmM6ZkwsYWx0OlwibGFuZGluZy1wYWdlLWNhbWVyYS1taWMtY2FsbG91dFwifSkpKSxcInRpbnlcIiE9PVYmJigwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOk5CLnRleHRDYWxsb3V0fSx2b2lkIDAsKDAsby5aKShcInNwYW5cIix7fSx2b2lkIDAsKDAsby5aKSh2Llose2lkOlwiQ2hHVVBmXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJBbGxvdyB5b3VyIGJyb3dzZXIgdG8gYWNjZXNzIHlvdXIgY2FtZXJhIFwifSx7dHlwZToxLHZhbHVlOlwiYnJcIn0se3R5cGU6MCx2YWx1ZTpcIiBmb3IgTGVuc2VzLCBTbmFwcyBhbmQgQ2FsbGluZy5cIn1dLHZhbHVlczp7YnI6SEJ8fChIQj0oMCxvLlopKFwiYnJcIix7fSkpfX0pKSwoMCxvLlopKFwiYVwiLHtjbGFzc05hbWU6TkIuaGVscExpbmssb25DbGljazooKT0+KDAsV0QuSkwpKFwibGFuZGluZ19wYWdlX2NhbGxvdXRcIil9LHZvaWQgMCxXQnx8KFdCPSgwLG8uWikodi5aLHtpZDpcIkgyRm0vUVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiR2V0IGhlbHBcIn1dfSkpKSldfSk6Tz90fHwodD0oMCxvLlopKFpCLHtoYW5kbGVPcGVuQ2FtZXJhQWN0aW9uOnh9KSk6bnVsbDpPP258fChuPSgwLG8uWikoWkIse2hhbmRsZU9wZW5DYW1lcmFBY3Rpb246eH0pKTpudWxsfTtyZXR1cm4oMCxxLmpzeHMpKHEuRnJhZ21lbnQse2NoaWxkcmVuOltQJiYoMCxvLlopKFJ4LHtvbkNsaWNrQ29uZmlybTooKT0+e1UoITApLE0oITEpLGkoITApfSxvbkNsaWNrT3V0c2lkZTooKT0+e00oITEpfSxzZXRDYW1lcmFPblRpbWVkOml9KSwoMCxvLlopKG9CLHt9LHZvaWQgMCwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTooMCxRLlopKE5CLmNhbWVyYVZpZXcsSCksb25Qb2ludGVyTW92ZTpyPygpPT5pKCEwKTp2b2lkIDAsb25Nb3VzZUxlYXZlOigpPT5GKCExKSxvbk1vdXNlRW50ZXI6KCk9PkYoITApfSx2b2lkIDAscCxtLEMmJigwLG8uWikoT0Ise2NhbnZhczp5LGltYWdlRGF0YTphLGltYWdlRGltZW5zaW9uczpJLG9uU25hcERhdGFDaGFuZ2U6YyxvbkNsb3NlOigpPT57YigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6dkIoXCJsYW5kaW5nX2NhbWVyYVwiLFwicHJldmlldy5hYmFuZG9uLmZyb21fY2xpY2tcIil9KSxzKHZvaWQgMCksYyh2b2lkIDApfSxvblNlbmRUb0NsaWNrZWQ6dX0pLFcpKV19KX1jb25zdCBLQj1uLnArXCJkdy9kYmZlNzdjYTMwYmU0YjMyZmYxYi5wbmdcIixZQj1uLnArXCJkdy9lYmMyNjUwZjZlN2M0NTRjZDUxNS5wbmdcIjtmdW5jdGlvbiBxQihlKXtsZXR7c2V0U2VsZkNhbWVyYU9uVGltZWQ6dCxvbkNsaWNrT3V0c2lkZTpufT1lO2NvbnN0W3JdPSgwLG1kLlZDKSgpLFtpLGFdPSgwLGQudXNlU3RhdGUpKCExKSxzPSgwLGsubykoKGU9PmUubWVzc2FnaW5nLnF1ZXJ5aW5nRmVlZCkpLFtjLGxdPSgwLGQudXNlU3RhdGUpKCExKSxbdSxmXT0oMCxkLnVzZVN0YXRlKShzKTtyZXR1cm4oMCxkLnVzZUVmZmVjdCkoKCgpPT57cyYmIWMmJmwoITApfSksW3NdKSwoMCxkLnVzZUVmZmVjdCkoKCgpPT57aWYoIXMmJnUpe2NvbnN0IGU9d2luZG93LnNldFRpbWVvdXQoKCgpPT5mKHMpKSwxZTMpO3JldHVybigpPT5jbGVhclRpbWVvdXQoZSl9cyE9PXUmJmYocyYmIWMpfSksW3MsdSxjXSksKDAscS5qc3hzKShxLkZyYWdtZW50LHtjaGlsZHJlbjpbIWkmJigwLG8uWikoaHgse2hlYWRpbmc6R1Usc3ViSGVhZGluZzpIVSxpbWFnZXM6WygwLG8uWikoXCJpbWdcIix7Y2xhc3NOYW1lOmd4LmhlYWRlckltYWdlLGFsdDpcIlRoaW5ncyB0byBkb1wiLHNyYzpcImxpZ2h0XCI9PT1yP1lCOktCfSxcInN0YXJ0dXBfbW9kYWxfYXJ0XCIpXSxzZWNvbmRhcnlDbG9zZUJ1dHRvbjohMCxkaXNhYmxlU2Vjb25kYXJ5Q2xpY2s6dSxsaXN0czpveCxvbkNsaWNrT3V0c2lkZTooKT0+YSghMCl9KSxpJiYoMCxvLlopKEV4LHtzZXRTZWxmQ2FtZXJhT25UaW1lZDp0LG9uQ2xpY2tPdXRzaWRlOm4sZnJvbVdlbGNvbWU6ITB9KV19KX1mdW5jdGlvbiBYQihlKXtsZXR7c2VuZFNuYXBUb0NvbnZlcnNhdGlvbnM6dCxzaG93QmFja0J1dHRvbldoZW5Db21wYWN0Om49ITEsb25DbG9zZTpyfT1lO2NvbnN0IGk9WGMoKSxhPSgwLG1lLlopKCkscz0oMCxrLm8pKFRlLkQ2KSxbYyxsXT0oMCxkLnVzZVN0YXRlKShbXSksW3UsZl09KDAsZC51c2VTdGF0ZSkoW10pLFtwLG1dPSgwLGQudXNlU3RhdGUpKFtdKSxoPShlLHQpPT57dD8obChbLi4uYyxlXSksbShbLi4ucCx7dXNlcklkOmV9XSkpOihsKGMuZmlsdGVyKCh0PT50IT09ZSkpKSxtKHAuZmlsdGVyKCh0PT50LnVzZXJJZCE9PWUpKSkpfSx2PShlLHQpPT57dD8oZihbLi4udSxlXSksbShbLi4ucCx7Y29udmVyc2F0aW9uSWQ6ZX1dKSk6KGYodS5maWx0ZXIoKHQ9PnQhPT1lKSkpLG0ocC5maWx0ZXIoKHQ9PnQuY29udmVyc2F0aW9uSWQhPT1lKSkpKX07cmV0dXJuKDAsby5aKShGRix7cGFnZTp2Qy5TTkFQX1NFTkRfVE8sc2hvd0JhY2tCdXR0b25XaGVuQ29tcGFjdDpuLG9uQ2xvc2U6cixvblN1Ym1pdDphc3luYygpPT57YigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJzbmFwX3NlbmRfdG9cIixkaW1lbnNpb25zOntpc19ncm91cDpTdHJpbmcoYy5sZW5ndGgrdS5sZW5ndGg+MSl9fSk7Y29uc3QgZT11Lm1hcCh6Lk9ZKSx7aXNWYWxpZDpuLGVycm9yTWVzc2FnZTpvfT0oMCxVRi5qTSkoYSxjLHUpO2lmKCFuKXRocm93IG5ldyBFcnJvcihvKTtjb25zdCBsPVtdO2Zvcihjb25zdCBlIG9mIGMpe2NvbnN0IHQ9KDAsei5PWSkoZSksbj1hd2FpdCBzKFtpLHRdKSxyPW4uZ2V0KHQpPy5jb252ZXJzYXRpb25JZDtyJiZsLnB1c2gocil9bGV0IGQ9YXdhaXQgUHJvbWlzZS5hbGwobCk7ZD1bLi4uZCwuLi5lXSx0KGQpLHI/LigpfSx0b2dnbGVGcmllbmQ6aCx0b2dnbGVDb252ZXJzYXRpb246KGUsdCk9Pnt2KCgwLHouTWMpKGUuY29udmVyc2F0aW9uSWQpLHQpfSxyZW1vdmVGcmllbmRGcm9tU2VsZWN0ZWQ6ZT0+e2goZSwhMSl9LHJlbW92ZUdyb3VwRnJvbVNlbGVjdGVkOmU9Pnt2KGUsITEpfSxzZWxlY3RlZEZyaWVuZHM6YyxzZWxlY3RlZENvbnZlcnNhdGlvbnM6dSxzZWxlY3RlZEVudGl0aWVzRm9yU3VibWlzc2lvbjpwfSl9Y29uc3QgUUI9e3NlbmRUb01lbnVDb250YWluZXI6XCJTWkpIQ1wiLHRvYXN0Q29udGFpbmVyOlwiWkRqUFZcIn07dmFyIEpCLCRCO2NvbnN0IGVWPWU9PmUubWVzc2FnaW5nLnNlbmRTbmFwLHRWPShDKCkuZ2V0TG9nZ2VyKFwiW0xhbmRpbmdQYWdlXVwiKSwzZTMpLG5WPTVlMyxyVj0zLGlWPTNlNCxvVj0xZTQsYVY9XCJMQU5ESU5HXCIsc1Y9ZT0+ZS5jYW1lcmFLaXQuY3VycmVudExlbnNJZDtmdW5jdGlvbiBjVigpe19lKFwibGFuZGluZ1wiKTtjb25zdHtzZWxmQ2FtZXJhT246ZSxzZXRTZWxmQ2FtZXJhT25UaW1lZDp0LGNvbnRyb2xzOm59PWZ1bmN0aW9uKCl7Y29uc3RbZSx0XT0oMCxrLm8pKFIuR3YpLG49bHUoZHUuR0YuTGFuZGluZ1BhZ2UpLHtjdXJyZW50TGVuc0lkOnJ9PWRMKCksaT0obz1kdS5HRi5MYW5kaW5nUGFnZSwoMCxpbC5qKShSLm5zLG8pKTt2YXIgbztjb25zdCBhPSgwLGQudXNlUmVmKSh2b2lkIDApLHM9KDAsZC51c2VSZWYpKHZvaWQgMCksYz1wUigpLGw9KDAsZC51c2VDYWxsYmFjaykoKGZ1bmN0aW9uKGkpe2xldCBvPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV07aSE9PW4mJihpP2UoZHUuR0YuTGFuZGluZ1BhZ2UsYVYpOnQoZHUuR0YuTGFuZGluZ1BhZ2UsYVYsITApKTtjb25zdCBsPVwidmlzaWJsZVwiPT09ZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlJiZkb2N1bWVudC5oYXNGb2N1cygpO2lmKGEuY3VycmVudCYmKHdpbmRvdy5jbGVhclRpbWVvdXQoYS5jdXJyZW50KSxhLmN1cnJlbnQ9dm9pZCAwKSxzLmN1cnJlbnQmJihjLnN0YXJ0KHtvcGFjaXR5OjF9KSx3aW5kb3cuY2xlYXJUaW1lb3V0KHMuY3VycmVudCkscy5jdXJyZW50PXZvaWQgMCksaSYmbyl7Y29uc3QgZT1sP2lWOm9WO2EuY3VycmVudD13aW5kb3cuc2V0VGltZW91dCgoKCk9PntyfHwoYy5zdGFydCh7b3BhY2l0eTouNCx0cmFuc2l0aW9uOntkdXJhdGlvbjpyVn19KSxzLmN1cnJlbnQ9d2luZG93LnNldFRpbWVvdXQoKCgpPT57YigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6dkIoXCJsYW5kaW5nX2NhbWVyYVwiLFwiY2xvc2UudGltZW91dC5cIisobD9cImZvcmVncm91bmRcIjpcImJhY2tncm91bmRcIikpfSksdChkdS5HRi5MYW5kaW5nUGFnZSxhViwhMCl9KSwxZTMqclYrblYpKX0pLGUpfX0pLFtuLGUsdCxjLHJdKTtyZXR1cm4oMCxkLnVzZUVmZmVjdCkoKCgpPT4oKGFzeW5jKCk9PntpZihpKXtjb25zdCBlPWF3YWl0IHN1KCk7YigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6dkIoXCJsYW5kaW5nX2NhbWVyYVwiLFwib3Blbi5mcm9tX3ByZWZlcmVuY2VcIil9KSxsKFwiZ3JhbnRlZFwiPT09ZSl9fSkoKSwoKT0+e3dpbmRvdy5jbGVhclRpbWVvdXQoYS5jdXJyZW50KSxhLmN1cnJlbnQ9dm9pZCAwLHMuY3VycmVudCYmKHdpbmRvdy5jbGVhclRpbWVvdXQocy5jdXJyZW50KSxzLmN1cnJlbnQ9dm9pZCAwKX0pKSxbXSksRWwoKDAsZC51c2VDYWxsYmFjaykoKCgpPT57d2luZG93LmNsZWFyVGltZW91dChhLmN1cnJlbnQpLHdpbmRvdy5jbGVhclRpbWVvdXQocy5jdXJyZW50KSxzLmN1cnJlbnQ9d2luZG93LnNldFRpbWVvdXQoKCgpPT57YigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6dkIoXCJsYW5kaW5nX2NhbWVyYVwiLFwiY2xvc2UudGltZW91dC5iYWNrZ3JvdW5kXCIpfSksdChkdS5HRi5MYW5kaW5nUGFnZSxhViwhMSl9KSxvVil9KSxbdF0pKSx7c2VsZkNhbWVyYU9uOm4sc2V0U2VsZkNhbWVyYU9uVGltZWQ6bCxjb250cm9sczpjfX0oKSxyPWZ1bmN0aW9uKCl7Y29uc3RbZSx0XT0oMCxrLm8pKFIuWkYpO3JldHVybigwLGQudXNlRWZmZWN0KSgoKCk9Pntjb25zdCBlPWZ1bmN0aW9uKCl7dCh0aGlzLnN0YXRlKX07cmV0dXJuKGFzeW5jKCk9Pntjb25zdCBuPWF3YWl0IHN1KGUpO3Qobil9KSgpLCgpPT57fX0pLFt0XSksZX0oKTtjdShkdS5HRi5MYW5kaW5nUGFnZSxhViwhMSk7Y29uc3RbaSxhXT0oMCxkLnVzZVN0YXRlKSgpLFtzLGxdPSgwLGQudXNlU3RhdGUpKCksdT0oMCxrLm8pKGVWKSxmPSgwLGsubykoc1YpLFtwLG1dPSgwLGQudXNlU3RhdGUpKCExKSx7c2hvd1RvYXN0OmgsYWN0aXZlVG9hc3RzOmcsaGlkZVRvYXN0Onl9PUpkKCksRT1wPygwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOlFCLnNlbmRUb01lbnVDb250YWluZXJ9LHZvaWQgMCwoMCxvLlopKFhCLHtzZW5kU25hcFRvQ29udmVyc2F0aW9uczphc3luYyBlPT57aWYocyl0cnl7YSh2b2lkIDApLGwodm9pZCAwKSx5KFwic25hcC1zZW5kLXN1Y2Nlc3NcIiksYXdhaXQgYXN5bmMgZnVuY3Rpb24oZSx0LG4scil7dHJ5e2NvbnN0IGk9e307ciYmKGkubGVucz17aWQ6cixyYW5raW5nSWQ6XCJcIixzbmFwcGFibGU6dm9pZCAwfSk7Y29uc3Qgbz1uZXcgQmxvYihbdF0se3R5cGU6XCJpbWFnZS9qcGVnXCJ9KTthd2FpdCBuKGUsbyxpKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgZX19KGUscyx1LGYpLGgoe3R5cGU6UWQuUG9zaXRpdmUsa2V5Olwic25hcC1zZW5kLXN1Y2Nlc3NcIixjb250ZW50OkpCfHwoSkI9KDAsby5aKSh2Llose2lkOlwickg0QU85XCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJTbmFwIHNlbnQhXCJ9XX0pKSx0aW1lb3V0OnRWfSl9Y2F0Y2goZSl7aCh7dHlwZTpRZC5OZWdhdGl2ZSxrZXk6XCJzbmFwLXNlbmQtZmFpbHVyZVwiLGNvbnRlbnQ6JEJ8fCgkQj0oMCxvLlopKHYuWix7aWQ6XCJnMWlPRDZcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkZhaWxlZCB0byBzZW5kIFNuYXBcIn1dfSkpLHRpbWVvdXQ6dFZ9KSxlIGluc3RhbmNlb2YgRXJyb3I/KGIoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwic25hcF9zZW5kX2ZhaWx1cmVfZXJyb3JcIn0pLCgwLGMuVGIpKGUse3RhZ3M6e2NvbnRleHQ6XCJzbmFwLXNlbmRcIn0sZXh0cmE6e1wiTGVucyBJRFwiOmZ9fSkpOmIoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwic25hcF9zZW5kX2ZhaWx1cmVfdW5rbm93blwifSl9fSxzaG93QmFja0J1dHRvbldoZW5Db21wYWN0OiEwLG9uQ2xvc2U6KCk9PntiKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcInNuYXBfc2VuZF9sYW5kaW5nX2NhbWVyYV9wcmV2aWV3X3NlbmRfY2FuY2VsX3BpY2tlclwifSksbSghMSl9fSkpOnZvaWQgMDsoMCxkLnVzZUVmZmVjdCkoKCgpPT57YigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6dkIoXCJsYW5kaW5nX2NhbWVyYVwiLGBwZXJtaXNzaW9ucy4ke3I/P1widW5kZWZpbmVkXCJ9YCl9KX0pLFtyXSk7Y29uc3RbXyxTXT0oMCxtZC5pVCkoKSxbVCxDXT1HTygpOygwLGQudXNlRWZmZWN0KSgoKCk9PntfJiYhVCYmQygpLFMoKX0pLFtfLEMsVCxTXSk7Y29uc3RbQSxPXT0oMCxrLm8pKEkubkopLFtOLHddPSgwLG1kLkR3KSgpOygwLGQudXNlRWZmZWN0KSgoKCk9PntpZihBKXJldHVybiB0KCEwKSwoKT0+e08oKX19KSxbQSxPLHRdKTtjb25zdFtELFBdPSgwLGQudXNlU3RhdGUpKFVNLlNIT1cpO3JldHVybigwLG8uWikoVk0se2JpdG1vamlPdmVybGFwU3RhdGU6RH0sdm9pZCAwLCFOJiYoMCxvLlopKHFCLHtzZXRTZWxmQ2FtZXJhT25UaW1lZDp0LG9uQ2xpY2tPdXRzaWRlOigpPT53Py4oKX0pLCgwLG8uWikoekIse3NlbGZDYW1lcmFPbjplLHNldENhbWVyYU9uVGltZWQ6dCxpbWFnZURhdGE6aSxzZXRJbWFnZURhdGE6YSxzZXRDb21wb3NlZFNuYXBEYXRhOmwsY29udHJvbHM6bixvblNlbmRUb0NsaWNrZWQ6bSxzZXRCaXRtb2ppT3ZlcmxhcFN0YXRlOlAsc2VuZFRvQ29tcG9uZW50OkV9LHZvaWQgMCwoMCxvLlopKFFJLHtjbGFzc05hbWU6UUIudG9hc3RDb250YWluZXIsYWN0aXZlVG9hc3RzOmcsdG9wT2Zmc2V0Ojh9KSkpfWNvbnN0IGxWPXt0b2FzdDpcIm4yZXRJXCJ9O3ZhciB1VjtmdW5jdGlvbiBkVigpe3JldHVybiBkVj1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGRWLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBmVj1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIixkVih7d2lkdGg6MjEsaGVpZ2h0OjE4LHZpZXdCb3g6XCIwIDAgMjEgMThcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksdVZ8fCh1Vj1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNMTEuOTkuMDA1YzEuMTY0LjAwNiAxLjUzLjQgMS44ODIuODUzLjI5Ni4zODEuNTgyLjgwNS44NDcgMS4wNzQuNzE3LjcyOCAxLjI3Ny43NDUgMS40NjMuNzcuMzM1LjA0NC43NzkuMTE1IDEuMDk3LjE3OSAxLjE4LjIzOCAxLjczNC41MjkgMS45ODIuNzc3Ljk2NS45NyAxLjIzOSAzLjg5NiAxLjIzOSA1Ljg4IDAgMS45ODMtLjI3NCA1LjAzNS0xLjI0IDYuMDA1LS41MjQuNTI3LTIuNDMyIDEuNTQ3LTguNzYgMS41NDctNi4zMjggMC04LjIzNi0xLjAyLTguNzYtMS41NDdDLjc3MyAxNC41NzMuNSAxMS41MjIuNSA5LjUzOHMuMjc0LTQuOTEgMS4yNC01Ljg4Yy4yNDctLjI0OC44MDEtLjU0IDEuOTgtLjc3Ny4zMi0uMDY0LjY4My0uMTI1IDEuMDk4LS4xOC4xODYtLjAyNC43NDYtLjA0MSAxLjQ2My0uNzcuMjY1LS4yNjguNTUtLjY5Mi44NDctMS4wNzNDNy40OC40MDUgNy44NDYuMDEgOS4wMS4wMDVjMS41MDEtLjAwNyAxLjQ3OS0uMDA3IDIuOTggMFpNMTAuNSAxNC41N2E1LjIgNS4yIDAgMSAwIDAtMTAuNCA1LjIgNS4yIDAgMCAwIDAgMTAuNFptMC0yYTMuMiAzLjIgMCAxIDEgMC02LjQgMy4yIDMuMiAwIDAgMSAwIDYuNFpcIixmaWxsOlwiIzJDMzEzN1wifSkpKSxwVj17bGF5b3V0OlwibUxaSGVcIixoZWFkZXJMaW5lOlwiS2RfTXRcIixjaGF0SWNvbkNvbnRhaW5lcjpcImI0NVhKXCIsY29udkluZm9Db250YWluZXI6XCJiWEU3ZVwiLGNsb3NlSWNvbkNvbnRhaW5lcjpcImVUZUJ1XCIsY29udGVudExpbmU6XCJlVEhvT1wiLGNhcm91c2VsQnV0dG9uOlwiYWRsV3BcIixtZWRpYUFuZFJlYWN0aW9uOlwiYUlsWDdcIixyZWFjdGlvbkNvbnRhaW5lcjpcImRJemJ5XCIsbXV0ZUJ1dHRvbjpcIlhxekJmXCIsZGl2aWRlcjpcIkNLMkw4XCIsbWVkaWFDb250ZW50OlwiREE0bjFcIixmb290ZXJMaW5lOlwiRUlJNjJcIixyZXBseUNvbnRhaW5lcjpcIl9zZmMwXCIscmVwbHlUb1NuYXA6XCJ5cm9tbVwiLGljb25CdXR0b246XCJlUDFWSlwifSxtVj17Y29udkluZm86XCJHWm5RdVwiLGluZm86XCJlQm5vSVwiLHRpdGxlOlwialluU3ZcIix0aW1lc3RhbXA6XCJBZ2twd1wiLHByb2ZpbGU6XCJpckZ5QVwifTtmdW5jdGlvbiBoVihlKXtsZXR7Y29udmVyc2F0aW9uOnQsbWVzc2FnZTpufT1lO2NvbnN0IHI9WGMoKSxpPSgwLGQudXNlTWVtbykoKCgpPT4oMCx0bC50MCkodCxyKSksW3Qscl0pO3JldHVybigwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOm1WLmNvbnZJbmZvfSx2b2lkIDAsKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6bVYucHJvZmlsZX0sdm9pZCAwLCgwLG8uWikoR3Use3BhcnRpY2lwYW50czppLGNvbnZlcnNhdGlvbklkOnQuY29udmVyc2F0aW9uSWQsc2l6ZTozMn0pKSwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTptVi5pbmZvfSx2b2lkIDAsKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6bVYudGl0bGV9LHZvaWQgMCwoMCxvLlopKHp1LHtmZWVkSXRlbTp0fSkpLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOm1WLnRpbWVzdGFtcH0sdm9pZCAwLCgwLG8uWikoQkEse3RpbWVzdGFtcDpuLm1ldGFkYXRhLmNyZWF0ZWRBdCx1c2VySWQ6bi5zZW5kZXJJZCxpc0dyb3VwOnQuY29udmVyc2F0aW9uVHlwZT09PVBlLmkxLlVTRVJDUkVBVEVER1JPVVB9KSkpKX12YXIgdlYsZ1YseVYsRVYsX1YsSVYsU1YsYlYsVFYsQ1YsQVY7ZnVuY3Rpb24gUlYoZSl7bGV0e21lc3NhZ2U6dCxtZWRpYUluZm9zOm4sY29udmVyc2F0aW9uOnIsc2hvd0Nhcm91c2VsQnV0dG9uczppPSEwLHJlcGx5VGl0bGU6YSxyZWFjdGFibGU6cyxvbkNsaWNrQ29udGVudDpjLG9uQ2xpY2tDb252Omwsb25DbGlja0Nsb3NlOnUsb25DbGlja1ByZXZpb3VzOmYsb25DbGlja05leHQ6cCxvbkNsaWNrUmVwbHk6bSxvbkNsaWNrQ2FtZXJhOmgsb25DbGlja1NhdmU6dixtZWRpYUNvbnRlbnRLZXk6Z309ZTtjb25zdCB5PSgwLG1lLlopKCksRT0oMCxkLnVzZVJlZikobnVsbCk7bmYoRSx0ZigpKTtjb25zdFtfLEldPSgwLGQudXNlU3RhdGUpKCExKSxTPSgwLGQudXNlUmVmKShudWxsKSxiPSgwLGQudXNlUmVmKShudWxsKSxUPXZvaWQgMCE9PW4uZmluZCgoZT0+ZS5tZWRpYU1ldGFkYXRhLmhhc1NvdW5kKSksQz0oKT0+e2NvbnN0IGU9e3dpZHRoOi0xLGhlaWdodDotMX0sdD0oKT0+e2lmKCFTLmN1cnJlbnR8fCFiLmN1cnJlbnQpcmV0dXJuO2NvbnN0IG49Yi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKG4uaGVpZ2h0IT09ZS5oZWlnaHR8fG4ud2lkdGghPT1lLndpZHRoKXJldHVybiBlLmhlaWdodD1uLmhlaWdodCxlLndpZHRoPW4ud2lkdGgsdm9pZCB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpO2NvbnN0IHI9Yi5jdXJyZW50Lm9mZnNldFdpZHRoLGk9Uy5jdXJyZW50Lm9mZnNldEhlaWdodDtTLmN1cnJlbnQuc3R5bGUubGVmdD1gY2FsYyg1MCUgKyAke3IvMn1weGAsUy5jdXJyZW50LnN0eWxlLnRvcD1gY2FsYyg1MCUgLSAke2kvMn1weGAsUy5jdXJyZW50LnN0eWxlLnZpc2liaWxpdHk9XCJ2aXNpYmxlXCJ9O3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodCl9O3JldHVybigwLG8uWikoRk0se30sdm9pZCAwLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOnBWLmxheW91dH0sdm9pZCAwLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOnBWLmhlYWRlckxpbmV9LHZvaWQgMCxyJiYoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpwVi5jaGF0SWNvbkNvbnRhaW5lcn0sdm9pZCAwLCgwLG8uWikoXCJidXR0b25cIix7dHlwZTpcImJ1dHRvblwiLGNsYXNzTmFtZTpwVi5pY29uQnV0dG9uLG9uQ2xpY2s6bH0sdm9pZCAwLHZWfHwodlY9KDAsby5aKSh1Qyx7fSkpKSksKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6cFYuY29udkluZm9Db250YWluZXJ9LHZvaWQgMCxyJiYoMCxvLlopKGhWLHtjb252ZXJzYXRpb246cixtZXNzYWdlOnR9KSksKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6cFYuY2xvc2VJY29uQ29udGFpbmVyfSx2b2lkIDAsKDAsby5aKShcImJ1dHRvblwiLHt0eXBlOlwiYnV0dG9uXCIsY2xhc3NOYW1lOnBWLmljb25CdXR0b24sb25DbGljazp1fSx2b2lkIDAsZ1Z8fChnVj0oMCxvLlopKEVkLHt9KSkpKSksKDAscS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6cFYuY29udGVudExpbmUsb25DbGljazpjLFwiYXJpYS1sYWJlbFwiOnkuZm9ybWF0TWVzc2FnZSh7aWQ6XCJkakFPaGNcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIm1lZGlhIGNvbnRlbnRcIn1dfSkscmVmOkUsY2hpbGRyZW46W2kmJigwLG8uWikoXCJidXR0b25cIix7Y2xhc3NOYW1lOnBWLmNhcm91c2VsQnV0dG9uLHR5cGU6XCJidXR0b25cIixvbkNsaWNrOmU9PntlLnN0b3BQcm9wYWdhdGlvbigpLGY/LigpfSxkaXNhYmxlZDp2b2lkIDA9PT1mfSx2b2lkIDAseVZ8fCh5Vj0oMCxvLlopKHpJLHt9KSkpLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOnBWLm1lZGlhQW5kUmVhY3Rpb259LHZvaWQgMCwoMCxxLmpzeCkocHYse3JlZjplPT57Yi5jdXJyZW50PWUsQygpfSxjbGFzc05hbWU6cFYubWVkaWFDb250ZW50LG1lZGlhSW5mb3M6bixzaXppbmdNb2RlOnR2LkxpZ2h0Ym94LG11dGU6X30sZyksKHN8fFQpJiYoMCxxLmpzeHMpKFwiZGl2XCIse3JlZjplPT57Uy5jdXJyZW50PWUsQygpfSxjbGFzc05hbWU6cFYucmVhY3Rpb25Db250YWluZXIsY2hpbGRyZW46W3MmJigwLG8uWikoTnAse21lc3NhZ2U6dCxhY3Rpb25PcmlnaW46TmYuTGlnaHRCb3gsZGlyZWN0aW9uOk9wLlZlcnRpY2FsfSkscyYmVCYmKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6cFYuZGl2aWRlcn0pLFQmJigwLG8uWikoXCJidXR0b25cIix7dHlwZTpcImJ1dHRvblwiLGNsYXNzTmFtZTpwVi5tdXRlQnV0dG9uLG9uQ2xpY2s6ZT0+e2Uuc3RvcFByb3BhZ2F0aW9uKCksSSghXyl9LHRpdGxlOl8/eS5mb3JtYXRNZXNzYWdlKHtpZDpcIktvRC9MVVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiVW5tdXRlXCJ9XX0pOnkuZm9ybWF0TWVzc2FnZSh7aWQ6XCJIajFyWCtcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIk11dGVcIn1dfSl9LHZvaWQgMCxfP0VWfHwoRVY9KDAsby5aKShwaCx7fSkpOl9WfHwoX1Y9KDAsby5aKSh2aCx7fSkpKV19KSksaSYmKDAsby5aKShcImJ1dHRvblwiLHt0eXBlOlwiYnV0dG9uXCIsY2xhc3NOYW1lOnBWLmNhcm91c2VsQnV0dG9uLG9uQ2xpY2s6ZT0+e2Uuc3RvcFByb3BhZ2F0aW9uKCkscD8uKCl9LGRpc2FibGVkOnZvaWQgMD09PXB9LHZvaWQgMCxJVnx8KElWPSgwLG8uWikoV0kse30pKSldfSksKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6cFYuZm9vdGVyTGluZX0sdm9pZCAwLChofHxtfHx2KSYmKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6cFYucmVwbHlDb250YWluZXJ9LHZvaWQgMCxoJiYoMCxvLlopKFwiYnV0dG9uXCIse3R5cGU6XCJidXR0b25cIixjbGFzc05hbWU6cFYuaWNvbkJ1dHRvbixvbkNsaWNrOmh9LHZvaWQgMCxTVnx8KFNWPSgwLG8uWikoZlYse30pKSksbSYmKDAsby5aKShcImJ1dHRvblwiLHt0eXBlOlwiYnV0dG9uXCIsY2xhc3NOYW1lOnBWLnJlcGx5VG9TbmFwLG9uQ2xpY2s6bX0sdm9pZCAwLGEpLHYmJigwLG8uWikoXCJidXR0b25cIix7dHlwZTpcImJ1dHRvblwiLGNsYXNzTmFtZTpwVi5pY29uQnV0dG9uLG9uQ2xpY2s6dn0sdm9pZCAwLGJWfHwoYlY9KDAsby5aKShLcCx7fSkpKSkpKSl9ZnVuY3Rpb24ga1YoKXtjb25zdHttb2RlOmUsbWVkaWFzOnQsY29udmVyc2F0aW9uSWQ6bixzZWxlY3RlZEluZGV4OnIsY2xvc2VMaWdodEJveFYyOmkscHJldmlvdXM6YSxuZXh0OnN9PXRoKCksbD10W3JdLHU9bC5tZWRpYUluZm9zLGY9cWwobixsLm1lc3NhZ2VJZCl8fGwubWVzc2FnZSxwPVZsKG4pLG09KDAsay5vKShUZS5zYyksaD1YYygpLHk9aD09PWY/LnNlbmRlcklkLHthY3RpdmVUb2FzdHM6RSxzaG93VG9hc3Q6XyxoaWRlVG9hc3Q6SX09SmQoKSxTPUJvb2xlYW4oZj8ubWV0YWRhdGEuaXNTYXZlYWJsZSl8fGU9PT1laC5vLlNuYXAsVD1Cb29sZWFuKGY/Lm1ldGFkYXRhLnNhdmVkQnkuaW5jbHVkZXMoaCkpLEM9KDAsay5vKShUZS5GRyksQT1SbChmPy5zZW5kZXJJZCksUj1mPy5zZW5kZXJJZD09PWgse3NldFJlcGx5Ok99PUVJKG4pLE49KDAsZy5zMCkoKTtpZihfZShcImxpZ2h0Ym94XCIpLCgwLGQudXNlRWZmZWN0KSgoKCk9PntiKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcImxpZ2h0Ym94X29wZW5cIixkaW1lbnNpb25zOnttb2RlOmV9fSl9KSxbZV0pLCFmKXJldHVybiBudWxsO2lmKCFwKXJldHVybiBudWxsO2NvbnN0IHc9KDAsRmwucykoKT09PXAuY29udmVyc2F0aW9uSWQ/dm9pZCAwOnA7bGV0IEQsUCxNLEw7Y29uc3QgVT15P3ZvaWQgMDooKT0+e08oZiksbShcIkNIQVRfUExBWUJBQ0tcIiksTigoMCx4bC5WMSkocC5jb252ZXJzYXRpb25JZCkpfSx4PSF5JiZTP2FzeW5jKCk9Pnt0cnl7YXdhaXQgQyhmLmRlc2NyaXB0b3IuY29udmVyc2F0aW9uSWQsZi5kZXNjcmlwdG9yLm1lc3NhZ2VJZCxUP1BlLlI2LlVOU0FWRTpQZS5SNi5TQVZFKSxJKFwibWVzc2FnZS1zYXZlLXN1Y2Nlc3NcIiksXyh7a2V5OlwibWVzc2FnZS1zYXZlLXN1Y2Nlc3NcIix0eXBlOlFkLlBvc2l0aXZlLHRpbWVvdXQ6M2UzLGNvbnRlbnQ6VD9UVnx8KFRWPSgwLG8uWikodi5aLHtpZDpcImNZRExqc1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiVW5zYXZlZFwifV19KSk6Q1Z8fChDVj0oMCxvLlopKHYuWix7aWQ6XCJRaFRkYmlcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlNhdmVkIGluIENoYXQhXCJ9XX0pKX0pfWNhdGNoKGUpeygwLGMuVGIpKGUpfX06dm9pZCAwO2xldCBGO2lmKGU9PT1laC5vLkNoYXRNZWRpYSlEPVI/KDAsby5aKSh2Llose2lkOlwiMThNc04vXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJTZW5kIHRvIGNoYXRcIn1dLHZhbHVlczp7c2VuZGVyOkF9fSk6KDAsby5aKSh2Llose2lkOlwiRlJiNTk5XCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJSZXBseSB0byBcIn0se3R5cGU6MSx2YWx1ZTpcInNlbmRlclwifV0sdmFsdWVzOntzZW5kZXI6QX19KSxGPXQubGVuZ3RoPjEsTT1yPjA/YTp2b2lkIDAsTD1yPHQubGVuZ3RoLTE/czp2b2lkIDAsUD1pO2Vsc2V7aWYoZSE9PWVoLm8uU25hcClyZXR1cm4gbnVsbDtEPUFWfHwoQVY9KDAsby5aKSh2Llose2lkOlwiZDBwdllRXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJSZXBseSB0byBTbmFwXCJ9XX0pKSxGPSExLFA9KCk9PntyPT09dC5sZW5ndGgtMT9pKCk6cygpfX1jb25zdCBCPVsoMCx6Lk1jKShmLmRlc2NyaXB0b3IuY29udmVyc2F0aW9uSWQpLGYuZGVzY3JpcHRvci5tZXNzYWdlSWQscl0uam9pbihcIl9cIik7cmV0dXJuKDAscS5qc3hzKShxLkZyYWdtZW50LHtjaGlsZHJlbjpbKDAsby5aKShRSSx7YWN0aXZlVG9hc3RzOkUsY2xhc3NOYW1lOmxWLnRvYXN0LHRvcE9mZnNldDo4fSksKDAsby5aKShSVix7bWVzc2FnZTpmLG1lZGlhSW5mb3M6dSxjb252ZXJzYXRpb246dyxzaG93Q2Fyb3VzZWxCdXR0b25zOkYscmVwbHlUaXRsZTpELHJlYWN0YWJsZToheSxvbkNsaWNrQ29udGVudDpQLG9uQ2xpY2tDb252OigpPT57bShcIkNIQVRfUExBWUJBQ0tcIiksTigoMCx4bC5WMSkocC5jb252ZXJzYXRpb25JZCkpfSxvbkNsaWNrQ2xvc2U6aSxvbkNsaWNrUHJldmlvdXM6TSxvbkNsaWNrTmV4dDpMLG9uQ2xpY2tDYW1lcmE6dm9pZCAwLG9uQ2xpY2tSZXBseTpVLG9uQ2xpY2tTYXZlOngsbWVkaWFDb250ZW50S2V5OkJ9KV19KX1DKCkuZ2V0TG9nZ2VyKFwiTGlnaHRCb3hWMlwiKTt2YXIgT1Y9big4OTYzNyk7Y29uc3QgTlY9e2Z1bGxzY3JlZW5Db250YWluZXI6XCJpUnZfdVwiLG1haW5NZW51OlwiY2dacTVcIixjb250cm9sbGVyczpcInl0NkZXXCIsZmlsdGVyOlwiX2N2djBcIixsb2dnZXJJdGVtOlwidnBGajdcIixsb2dnZXJDb2xvcjpcIkpXWExkXCIsbG9nZ2VyTmFtZTpcImNGSDlqXCIsc2V0TG9nZ2VyTGV2ZWw6XCJ0R1BMSFwifTt2YXIgd1YsRFYsUFY7ZnVuY3Rpb24gTVYoKXtjb25zdCBlPSgwLGsubykoWk8pLHQ9QygpLmdldExvZ2dlcnMoKSxbbixyXT0oMCxkLnVzZVN0YXRlKSgwKSxpPSgpPT5yKG4rMSksW2Esc109KDAsZC51c2VTdGF0ZSkoXCJcIik7cmV0dXJuKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6TlYuZnVsbHNjcmVlbkNvbnRhaW5lcixvbkNsaWNrOmV9LHZvaWQgMCwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpOVi5tYWluTWVudSxvbkNsaWNrOmU9PmUuc3RvcFByb3BhZ2F0aW9uKCl9LHZvaWQgMCx3Vnx8KHdWPSgwLG8uWikoXCJoMVwiLHt9LHZvaWQgMCxcIiBMb2dnZXJzIFNldHRpbmcgXCIpKSwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpOVi5jb250cm9sbGVyc30sdm9pZCAwLCgwLG8uWikoXCJpbnB1dFwiLHtjbGFzc05hbWU6TlYuZmlsdGVyLHZhbHVlOmEsb25DaGFuZ2U6ZT0+e3MoZS50YXJnZXQudmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKSl9LHBsYWNlaG9sZGVyOlwiU2VhcmNoIGxvZ2dlci4uLlwiLGF1dG9Gb2N1czohMH0pLCgwLG8uWikoXCJzZWxlY3RcIix7b25DaGFuZ2U6ZT0+e2lmKFwicHJvbXB0XCIhPT1lLnRhcmdldC52YWx1ZSl7aWYoXCJyZXNldF9hbGxcIj09PWUudGFyZ2V0LnZhbHVlKWZvcihjb25zdCBlIG9mIE9iamVjdC52YWx1ZXMoQygpLmdldExvZ2dlcnMoKSkpZS5yZXNldExldmVsKCk7ZWxzZXtjb25zdCB0PXBhcnNlSW50KGUudGFyZ2V0LnZhbHVlKTtmb3IoY29uc3QgZSBvZiBPYmplY3QudmFsdWVzKEMoKS5nZXRMb2dnZXJzKCkpKWUuc2V0TGV2ZWwodCl9aSgpfX0saWQ6XCJzZXRfYWxsXCIsdmFsdWU6XCJwcm9tcHRcIn0sdm9pZCAwLERWfHwoRFY9KDAsby5aKShcIm9wdGlvblwiLHt2YWx1ZTpcInByb21wdFwifSxcInByb21wdFwiLFwiU2V0IEFsbCBMb2dnZXJzXCIpKSxPYmplY3QuZW50cmllcyhDKCkubGV2ZWxzKS5tYXAoKGU9PntsZXRbdCxuXT1lO3JldHVybigwLG8uWikoXCJvcHRpb25cIix7dmFsdWU6bn0sdCx0KX0pKSxQVnx8KFBWPSgwLG8uWikoXCJvcHRpb25cIix7dmFsdWU6XCJyZXNldF9hbGxcIn0sXCJyZXNldF9hbGxcIixcIipSRVNFVCBBTEwqXCIpKSkpLCgwLG8uWikoXCJ1bFwiLHt9LHZvaWQgMCxPYmplY3QuZW50cmllcyh0KS5maWx0ZXIoKGU9PntsZXRbdF09ZTtyZXR1cm4gdC50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKGEpfSkpLm1hcCgoZT0+e2xldFt0LG5dPWU7cmV0dXJuKDAsby5aKShMVix7bmFtZTp0LGxldmVsOm4uZ2V0TGV2ZWwoKSxzZXRMZXZlbDplPT57bi5zZXRMZXZlbChlKSxpKCl9fSx0KX0pKSkpKX1mdW5jdGlvbiBMVihlKXtsZXR7bmFtZTp0LGxldmVsOm4sc2V0TGV2ZWw6cn09ZTtyZXR1cm4oMCxvLlopKFwibGlcIix7Y2xhc3NOYW1lOk5WLmxvZ2dlckl0ZW19LHZvaWQgMCwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpOVi5sb2dnZXJDb2xvcixzdHlsZTp7YmFja2dyb3VuZENvbG9yOigwLE9WLnVfKSh0KX19KSwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpOVi5sb2dnZXJOYW1lfSx2b2lkIDAsdCksKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6TlYuc2V0TG9nZ2VyTGV2ZWx9LHZvaWQgMCwoMCxvLlopKFwic2VsZWN0XCIse3ZhbHVlOm4sb25DaGFuZ2U6ZT0+e3IocGFyc2VJbnQoZS50YXJnZXQudmFsdWUpKX19LHZvaWQgMCxPYmplY3QuZW50cmllcyhDKCkubGV2ZWxzKS5tYXAoKGU9PntsZXRbdCxuXT1lO3JldHVybigwLG8uWikoXCJvcHRpb25cIix7dmFsdWU6bn0sdCx0KX0pKSkpKX12YXIgVVY9big5NjAyNikseFY9bi5uKFVWKSxGVj1uKDE4NTQ3KTtjb25zdCBCVj17Yml0bW9qaTpcIkdzMTRYXCIsY2lyY2xlOlwiRVhOdFhcIixjb250YWluZXI6XCJjOUZBV1wifSxWVj17dGV4dDpcInFwWkc4XCJ9O2Z1bmN0aW9uIEdWKGUpe3JldHVybiBlP1suLi5lXVswXTpcIlwifWZ1bmN0aW9uIEhWKGUpe2xldHtkaXNwbGF5TmFtZTp0fT1lO2NvbnN0IG49ZnVuY3Rpb24oZSl7aWYoMD09PWUubGVuZ3RoKXJldHVyblwiXCI7Y29uc3QgdD1lLnNwbGl0KFwiIFwiKTtyZXR1cm5gJHtHVih0LnNoaWZ0KCkpfSR7R1YodC5wb3AoKSl9YC50b1VwcGVyQ2FzZSgpfSh0KTtyZXR1cm4oMCxvLlopKFwic3ZnXCIse2hlaWdodDpcIjEwMCVcIix3aWR0aDpcIjEwMCVcIix2aWV3Qm94OlwiMCAwIDEwMCAxMDBcIn0sdm9pZCAwLCgwLG8uWikoXCJ0ZXh0XCIse3g6XCI1MFwiLHk6XCI1NFwiLGRvbWluYW50QmFzZWxpbmU6XCJtaWRkbGVcIix0ZXh0QW5jaG9yOlwibWlkZGxlXCIsY2xhc3NOYW1lOlZWLnRleHR9LHZvaWQgMCxuKSl9Y29uc3QgV1Y9XCIxMDIyNjAyOVwiO2Z1bmN0aW9uIGpWKGUpe2xldHtjb2xvcjp0LHVzZXJJZDpufT1lO2NvbnN0IHI9UmwobiksaT1DbChuKT8uYml0bW9qaV9hdmF0YXJfaWQsYT1pPygwLG8uWikoXCJpbWdcIix7Y2xhc3NOYW1lOkJWLmJpdG1vamksc3JjOigwLGhlLnViKShXVixpLHZvaWQgMCxoZS54WS5ET1VCTEUpfSk6KDAsby5aKShIVix7ZGlzcGxheU5hbWU6cn0pO3JldHVybigwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOkJWLmNvbnRhaW5lcixzdHlsZTp7YmFja2dyb3VuZENvbG9yOigwLEZWLmwpKHQpfX0sdm9pZCAwLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOkJWLmNpcmNsZX0sdm9pZCAwLGEpKX12YXIgWlY9big0Nzg4KSx6Vj1uLm4oWlYpLEtWPXtTSE9XOjAsU0hPV19JRl9IT1ZFUkVEOjEsSElERToyfTsoMCxULmdldExvZ2dlcikoXCJbVGFsa11bQ2FsbEdyaWRdXCIpO2NvbnN0IFlWPSgpPT57fSxxVj03ZTMsWFY9NjAsUVY9NDgsSlY9e2NvbnRhaW5lcjpcImNiWlZSXCIsY2lyY2xlOlwiR1FiOGtcIixuYW1lOlwibXdVQ25cIn07ZnVuY3Rpb24gJFYoZSl7bGV0e2NsYXNzTmFtZTp0LHVzZXJJZDpuLGRpc3BsYXlOYW1lOnJ9PWU7cmV0dXJuKDAsby5aKShaVCx7Y2xhc3NOYW1lOigwLFEuWikoSlYuY29udGFpbmVyLHQpfSx2b2lkIDAsKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6SlYuY2lyY2xlfSx2b2lkIDAsKDAsby5aKShCdSx7dXNlcklkOm4sc2l6ZTozMn0pKSwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpKVi5uYW1lfSx2b2lkIDAscikpfXZhciBlRyx0RztmdW5jdGlvbiBuRygpe3JldHVybiBuRz1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LG5HLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCByRz1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIixuRyh7d2lkdGg6NDAsaGVpZ2h0OjQwLHZpZXdCb3g6XCIwIDAgNDAgNDBcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksZUd8fChlRz1kLmNyZWF0ZUVsZW1lbnQoXCJnXCIse2ZpbHRlcjpcInVybCgjNGRjYzQwZjI0YzA4MmQ5MDNhNWJkNmQ3N2ZiMTA0NWU2MDUwYjg1Y19fYSlcIn0sZC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTIwIDM2YzguODM3IDAgMTYtNy4xNjMgMTYtMTZTMjguODM3IDQgMjAgNCA0IDExLjE2MyA0IDIwczcuMTYzIDE2IDE2IDE2Wm03LjQ3Ny0yMC41NWMtMi4xOTgtMS42NzUtNC43OTgtMi41NTctNy40OC0yLjU1Ny0yLjY4IDAtNS4yODEuODgyLTcuNDc4IDIuNTU3LS41NDUuNDE4LS42ODYgMS4yMzQtLjMwMyAxLjg1LjM4My41OTYgMS4xMy43NSAxLjY5NC4zMzEgMS43OTQtMS4zNjYgMy44OS0yLjA5MyA2LjA4OC0yLjA5MyAyLjE5NyAwIDQuMjkzLjcyNyA2LjEwOCAyLjA3Mi4yMDEuMTU0LjQ0My4yNDIuNjg1LjI0Mi4zODMgMCAuNzY2LS4xOTggMS4wMDgtLjU3My4zNjMtLjU5NS4yMjItMS40MzItLjMyMi0xLjgzWm0tNy41MzUgMi4yNTRjMS44NTIgMCAzLjY2LjU0NCA1LjE2NyAxLjU2OS42MDMuMzk3Ljc1MyAxLjE3LjM2NiAxLjc1NmExLjMxNSAxLjMxNSAwIDAgMS0xLjgwOC4zMTQgNi42MzggNi42MzggMCAwIDAtNy40MDYgMGMtLjYwMi4zOTgtMS4zOTkuMjUxLTEuODA4LS4zMTRhMS4yNDQgMS4yNDQgMCAwIDEgLjMyMy0xLjc1NiA5LjE5NSA5LjE5NSAwIDAgMSA1LjE2Ni0xLjU2OVptLjA1OCA1LjA0aC4wMjFjLjgyOCAwIDEuNTcuNDY4IDEuOTUyIDEuMTkxYTIuMjM0IDIuMjM0IDAgMCAxLS4xNDggMi4yOTcgMi4yMjMgMi4yMjMgMCAwIDEtMS44MjUuOTU3Yy0uNzIxIDAtMS40LS4zNjItMS44MjUtLjk1N2EyLjIzNyAyLjIzNyAwIDAgMS0uMTQ4LTIuMjk3IDIuMjEyIDIuMjEyIDAgMCAxIDEuOTUyLTEuMTlIMjBaXCIsZmlsbDpcIiMwMDBcIixmaWxsT3BhY2l0eTouNCxzaGFwZVJlbmRlcmluZzpcImNyaXNwRWRnZXNcIn0pKSksdEd8fCh0Rz1kLmNyZWF0ZUVsZW1lbnQoXCJkZWZzXCIsbnVsbCxkLmNyZWF0ZUVsZW1lbnQoXCJmaWx0ZXJcIix7aWQ6XCI0ZGNjNDBmMjRjMDgyZDkwM2E1YmQ2ZDc3ZmIxMDQ1ZTYwNTBiODVjX19hXCIseDowLHk6MCx3aWR0aDo0MCxoZWlnaHQ6NDAsZmlsdGVyVW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6XCJzUkdCXCJ9LGQuY3JlYXRlRWxlbWVudChcImZlRmxvb2RcIix7Zmxvb2RPcGFjaXR5OjAscmVzdWx0OlwiQmFja2dyb3VuZEltYWdlRml4XCJ9KSxkLmNyZWF0ZUVsZW1lbnQoXCJmZUNvbG9yTWF0cml4XCIse2luOlwiU291cmNlQWxwaGFcIix2YWx1ZXM6XCIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMFwiLHJlc3VsdDpcImhhcmRBbHBoYVwifSksZC5jcmVhdGVFbGVtZW50KFwiZmVPZmZzZXRcIixudWxsKSxkLmNyZWF0ZUVsZW1lbnQoXCJmZUdhdXNzaWFuQmx1clwiLHtzdGREZXZpYXRpb246Mn0pLGQuY3JlYXRlRWxlbWVudChcImZlQ29tcG9zaXRlXCIse2luMjpcImhhcmRBbHBoYVwiLG9wZXJhdG9yOlwib3V0XCJ9KSxkLmNyZWF0ZUVsZW1lbnQoXCJmZUNvbG9yTWF0cml4XCIse3ZhbHVlczpcIjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAuMjUgMFwifSksZC5jcmVhdGVFbGVtZW50KFwiZmVCbGVuZFwiLHtpbjI6XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIixyZXN1bHQ6XCJlZmZlY3QxX2Ryb3BTaGFkb3dfMzYyOV8xMDc0M1wifSksZC5jcmVhdGVFbGVtZW50KFwiZmVCbGVuZFwiLHtpbjpcIlNvdXJjZUdyYXBoaWNcIixpbjI6XCJlZmZlY3QxX2Ryb3BTaGFkb3dfMzYyOV8xMDc0M1wiLHJlc3VsdDpcInNoYXBlXCJ9KSkpKSk7dmFyIGlHO2Z1bmN0aW9uIG9HKGUpe2xldHtjbGFzc05hbWU6dCxpc0xvY2FsVXNlcjpuLHVzZXJJZDpyLGNvbnZlcnNhdGlvbklkOml9PWU7Y29uc3QgYT1mdW5jdGlvbihlLHQsbil7Y29uc3Qgcj1fdShuKSxpPSgwLHouTWMpKHQpLG89ZT9yPy5sb2NhbFVzZXI6cj8ucGFydGljaXBhbnRzLmdldChpKTtyZXR1cm4obz8ubWVkaWFJc3N1ZT8/ZXUuSXMuTk9ORSkhPT1ldS5Jcy5OT05FfShuLHIsaSk7cmV0dXJuKDAsby5aKShmZCx7fSx2b2lkIDAsYSYmKDAsby5aKShaVCx7Y2xhc3NOYW1lOnR9LHZvaWQgMCxpR3x8KGlHPSgwLG8uWikockcse30pKSkpfWNvbnN0IGFHPXt0ZXh0OlwiR183NnNcIn07dmFyIHNHO2Z1bmN0aW9uIGNHKGUpe2xldHtjbGFzc05hbWU6dH09ZTtyZXR1cm4oMCxvLlopKFpULHtjbGFzc05hbWU6KDAsUS5aKSh0LGFHLnRleHQpfSx2b2lkIDAsc0d8fChzRz0oMCxvLlopKHYuWix7aWQ6XCJJV3RlZi9cIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkZyaWVuZHMgY2FuIHNlZSB5b3UgYmVmb3JlIGpvaW5pbmdcIn1dfSkpKX1jb25zdCBsRz17Y29udGFpbmVyOlwicXY5VWdcIn07ZnVuY3Rpb24gdUcoZSl7bGV0e3N0cmVhbTp0LGNsYXNzTmFtZTpuLG9uVmlkZW9SZWFkeTpyLG9uVmlkZW9TaXplVXBkYXRlZDppfT1lO2NvbnN0IG89KDAsZC51c2VSZWYpKG51bGwpLGE9blIoby5jdXJyZW50KTtyZXR1cm4oMCxkLnVzZUVmZmVjdCkoKCgpPT57aT8uKGEpfSksW2EsaV0pLCgwLGQudXNlRWZmZWN0KSgoKCk9Pntjb25zdCBlPW8uY3VycmVudDtlJiYoZS5zcmNPYmplY3Q9dHx8bnVsbCl9KSxbdF0pLCgwLHEuanN4KSh4cy52aWRlbyx7Y2xhc3NOYW1lOigwLFEuWikobEcuY29udGFpbmVyLG4pLHJlZjpvLGF1dG9QbGF5OiEwLG9uUGxheWluZzpyfSl9Y29uc3QgZEc9e2NvbnRhaW5lcjpcInROU0RwXCIsYW1wbGl0dWRlOlwiRW1CQnpcIn0sZkc9LjMscEc9MWUzKmZHKzUwLG1HPTMsaEc9MTAwLygyKm1HLTEpK1wiJVwiLHZHPS4yO2Z1bmN0aW9uIGdHKCl7cmV0dXJuIEFycmF5LmZyb20oe2xlbmd0aDptR30sKCgpPT5NYXRoLm1heChNYXRoLnJhbmRvbSgpLHZHKSkpfWZ1bmN0aW9uIHlHKGUpe2xldHtjb2xvcjp0fT1lO2NvbnN0W24scl09KDAsZC51c2VTdGF0ZSkoZ0coKSk7cmV0dXJuKDAsZC51c2VFZmZlY3QpKCgoKT0+e2NvbnN0IGU9c2V0SW50ZXJ2YWwoKCgpPT5yKGdHKCkpKSxwRyk7cmV0dXJuKCk9PntjbGVhckludGVydmFsKGUpfX0pLFtdKSwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpkRy5jb250YWluZXJ9LHZvaWQgMCxuLm1hcCgoKGUsbik9PigwLG8uWikoeHMuZGl2LHt0cmFuc2l0aW9uOntkdXJhdGlvbjpmRyxlYXNlOlwiZWFzZUluT3V0XCJ9LGNsYXNzTmFtZTpkRy5hbXBsaXR1ZGUsYW5pbWF0ZTp7c2NhbGVZOmV9LHN0eWxlOnt3aWR0aDpoRyxiYWNrZ3JvdW5kQ29sb3I6KDAsRlYubCkodCl9fSxuKSkpKX1jb25zdCBFRz17d3JhcHBlcjpcIld3MjlzXCIsbWljcm9waG9uZTpcIkhSSXN4XCIsd2F2ZWZvcm06XCJKbkgxclwifTtmdW5jdGlvbiBfRyhlKXtsZXR7bWVkaWE6dCxpc1NwZWFraW5nOm4sY29sb3I6cixjbGFzc05hbWU6aX09ZTtjb25zdCBhPSgwLHJ1LlhtKSh0KSxzPSFhJiZuLGM9YXx8cztyZXR1cm4oMCxvLlopKGZkLHt9LHZvaWQgMCxjJiYoMCxvLlopKFpULHtjbGFzc05hbWU6KDAsUS5aKShFRy53cmFwcGVyLGkpfSx2b2lkIDAsYSYmKDAsby5aKShxeCx7Y2xhc3NOYW1lOkVHLm1pY3JvcGhvbmV9KSxzJiYoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpFRy53YXZlZm9ybX0sdm9pZCAwLCgwLG8uWikoeUcse2NvbG9yOnJ9KSkpKX1jb25zdCBJRz17Y29udGFpbmVyOlwiYzlFVjlcIix0aWxlOlwiR0tEeTRcIixpc1NwZWFraW5nOlwiaXpLcFBcIixzdGF0dXNJbmRpY2F0b3I6XCJUNnZHc1wiLGxvd0Nvbm5lY3Rpdml0eUluZGljYXRvcjpcIm96Q0ZHXCIsbWVkaWFDb250cm9sQmFyOlwiYkwyTWxcIixwcml2YWN5RGlzY2xhaW1lcjpcIlZocGxIXCIsZGlzcGxheU5hbWVQaWxsOlwiZUl0dkZcIixoaWRlVmlkZW86XCJYc21rNFwiLHRpbGVTY3JlZW5MZWZ0OlwiUzM3SHNcIix0aWxlU2NyZWVuUmlnaHQ6XCJWS2hGZVwifTt2YXIgU0c7Y29uc3QgYkc9W3t2YWx1ZTpcInRpbnlcIixtYXhQaXhlbHM6MjAwLG1pblBpeGVsczowfV07dmFyIFRHPXtDQUxMX0dSSUQ6MCxMRUZUX0VER0U6MSxSSUdIVF9FREdFOjJ9O2Z1bmN0aW9uIENHKGUpe2xldHt1c2VySWQ6dCxtZWRpYTpuLGNvbG9yOnIsaXNMb2NhbFRpbGU6aSxjb252ZXJzYXRpb25JZDphLHNob3dTcGVha2luZ091dGxpbmU6cyxkaXNwbGF5TmFtZVZpc2liaWxpdHk6YyxoaWRlTGVuc0Nhcm91c2VsOmwsaW5jb21pbmdDYWxsRHJhd2VyOnUsZGlzcGxheU5hbWU6Zix0aWxlUG9zaXRpb246cCxvbkNsaWNrOm19PWU7Y29uc3R7aG92ZXJlZDpoLGhvdmVyUHJvcHM6dn09a20oKSxnPWd1KGEpLFt5LEVdPSgwLGQudXNlU3RhdGUpKCExKSxfPWgmJmkmJihnPT09ZXUuVXEuUklOR0lOR3x8Zz09PWV1LlVxLkFOU1dFUkVEKSxJPWZ1bmN0aW9uKGUsdCxuKXtjb25zdCByPVhjKCk7cmV0dXJuKDAsaWwuaikoUi5qRyx0LHIsZSxuKX0odCxhLHUpLFM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oMCxpbC5qKSh3LlNzLGUsdCl9KHQsYSksVD0oMCxydS5XdikobiksQz1UJiYhaSYmIXksQT1DfHwhVCxrPSF1JiYhbCxPPWYmJihjPT09S1YuU0hPV3x8Yz09PUtWLlNIT1dfSUZfSE9WRVJFRCYmaCksTj1pJiZUJiYhQSYmZz09PWV1LlVxLkNBTExJTkcsRD1nPT09ZXUuVXEuQ0FMTElORyxQPXtbSUcudGlsZVNjcmVlbkxlZnRdOnA9PT1URy5MRUZUX0VER0UsW0lHLnRpbGVTY3JlZW5SaWdodF06cD09PVRHLlJJR0hUX0VER0V9LFtNLExdPWNNKGJHKSxVPSgwLGQudXNlQ2FsbGJhY2spKCgoKT0+e0UoITApfSksW10pO3JldHVybigwLGQudXNlRWZmZWN0KSgoKCk9PntUJiZJfHxFKCExKX0pLFtULEldKSxmdW5jdGlvbihlLHQsbil7Y29uc3Qgcj1FdShuKS5sZW5ndGg7KDAsZC51c2VFZmZlY3QpKCgoKT0+e2V8fHR8fGIoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwidGlsZV9zdHJlYW1fbnVsbFwiLGRpbWVuc2lvbnM6e3BhcnRpY2lwYW50X2NvdW50OmAke3J9YH19KX0pLFtlLHQsbixyXSl9KEMsSSxhKSwoMCxxLmpzeHMpKFwiZGl2XCIse3JlZjpNLGNsYXNzTmFtZTpJRy5jb250YWluZXIsLi4udixvbkNsaWNrOm0sY2hpbGRyZW46WygwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOigwLFEuWikoSUcudGlsZSxQLHMmJlMmJklHLmlzU3BlYWtpbmcpfSx2b2lkIDAsITEsVCYmKGk/KDAsby5aKShNeCx7c3RyZWFtOkksbWlycm9yOnUsY2xhc3NOYW1lOigwLFEuWikoUCl9LHZvaWQgMCxrJiYoU0d8fChTRz0oMCxvLlopKHlVLHt9KSkpKTooMCxvLlopKHVHLHtjbGFzc05hbWU6KDAsUS5aKSgheSYmSUcuaGlkZVZpZGVvKSxzdHJlYW06SSxvblZpZGVvUmVhZHk6VX0pKSxBJiYoMCxvLlopKGpWLHtjb2xvcjpyLHVzZXJJZDp0fSkpLCgwLG8uWikoX0cse2NsYXNzTmFtZTpJRy5zdGF0dXNJbmRpY2F0b3IsbWVkaWE6bixpc1NwZWFraW5nOlMsY29sb3I6cn0pLCgwLG8uWikob0cse2NsYXNzTmFtZTpJRy5sb3dDb25uZWN0aXZpdHlJbmRpY2F0b3IsaXNMb2NhbFVzZXI6aSx1c2VySWQ6dCxjb252ZXJzYXRpb25JZDphfSksKDAsby5aKShmZCx7fSx2b2lkIDAsTyYmKDAsby5aKSgkVix7Y2xhc3NOYW1lOklHLmRpc3BsYXlOYW1lUGlsbCxkaXNwbGF5TmFtZTpmLHVzZXJJZDp0fSkpLCgwLG8uWikoZmQse30sdm9pZCAwLGgmJl8mJigwLG8uWikockIse2NsYXNzTmFtZTpJRy5tZWRpYUNvbnRyb2xCYXIsY29udmVyc2F0aW9uSWQ6YSxzaG93QXVkaW9Ub2dnbGU6ITF9KSksRCYmKDAsby5aKShmZCx7fSx2b2lkIDAsTiYmKDAsby5aKShjRyx7Y2xhc3NOYW1lOklHLnByaXZhY3lEaXNjbGFpbWVyfSkpXX0pfWNvbnN0IEFHPXtzY3JlZW5TaGFyaW5nVGlsZUhlaWdodDpcIjIyNVwiLGNvbnRhaW5lcldyYXBwZXI6XCJhZmxIc1wiLGNvbnRhaW5lcjpcIm9aRWxyXCIsZ3JpZDpcIkJTX09EXCIsdXNlcjpcIlhHc3lRXCIsY29udGFpbmVyMTpcIlJVNFBfXCIsZ3JpZDE6XCJjbExhNFwiLGdyaWQxRXhwYW5kZWRVc2VyOlwieUlpUWZcIixncmlkMU5vdEV4cGFuZGVkVXNlcjpcImcxM1FrXCIsY29udGFpbmVyMjpcIlhaeGZkXCIsZ3JpZDI6XCJvS1VEYVwiLGdyaWQyRXhwYW5kZWRVc2VyOlwiU0NrN0ZcIixncmlkMk5vdEV4cGFuZGVkVXNlcjpcInJoVFV5XCIsY29udGFpbmVyMzpcIlFBdXBPXCIsZ3JpZDM6XCJDTUQ0TFwiLGdyaWQzRXhwYW5kZWRVc2VyOlwia09GN2RcIixncmlkM05vdEV4cGFuZGVkVXNlcjpcIkpIRWtRXCIsY29udGFpbmVyNDpcImhIVU1FXCIsZ3JpZDQ6XCJ4NHQ0ZVwiLGdyaWQ0RXhwYW5kZWRVc2VyOlwiWXdnd1lcIixncmlkNE5vdEV4cGFuZGVkVXNlcjpcImpvcG9LXCIsY29udGFpbmVyNTpcIkN3Z2tZXCIsZ3JpZDU6XCJRVDVISFwiLGdyaWQ1RXhwYW5kZWRVc2VyOlwiekdXSHpcIixncmlkNU5vdEV4cGFuZGVkVXNlcjpcInUzUmlJXCIsY29udGFpbmVyNjpcInd4bW9iXCIsZ3JpZDY6XCJ3cEVja1wiLGdyaWQ2RXhwYW5kZWRVc2VyOlwidjhFTWVcIixncmlkNk5vdEV4cGFuZGVkVXNlcjpcIkk4Z05DXCIsY29udGFpbmVyNzpcIk9yTUltXCIsZ3JpZDc6XCJvc2N4M1wiLGdyaWQ3RXhwYW5kZWRVc2VyOlwieVFZYTZcIixncmlkN05vdEV4cGFuZGVkVXNlcjpcIkFkQ3ZhXCIsY29udGFpbmVyODpcIkZBM2FEXCIsZ3JpZDg6XCJicnUxR1wiLGdyaWQ4RXhwYW5kZWRVc2VyOlwiWUhPc3dcIixncmlkOE5vdEV4cGFuZGVkVXNlcjpcIm1IeXltXCIsY29udGFpbmVyOTpcIllfMnpUXCIsZ3JpZDk6XCJxWEFqb1wiLGdyaWQ5RXhwYW5kZWRVc2VyOlwiYWw1NXNcIixncmlkOU5vdEV4cGFuZGVkVXNlcjpcIkVUUjVmXCIsY29udGFpbmVyMTA6XCJWd29qaFwiLGdyaWQxMDpcIm9RUWQzXCIsZ3JpZDEwRXhwYW5kZWRVc2VyOlwiWHVFVDJcIixncmlkMTBOb3RFeHBhbmRlZFVzZXI6XCJLYmF3bFwiLGxlbnNDYXJvdXNlbEhvbGRlcjpcIk85WjZDXCIsY29udGFpbmVyV3JhcHBlclNjcmVlblNoYXJpbmc6XCJ0eGhXcFwiLGNvbnRhaW5lclNjcmVlblNoYXJpbmc6XCJWa08zN1wiLGdyaWRTY3JlZW5TaGFyaW5nOlwieWQ3WnZcIixwYXJ0aWNpcGFudE92ZXJmbG93SW5kaWNhdG9yOlwiSVB2TVhcIn07dmFyIFJHO2NvbnN0IGtHPVsuLi54VigpKDAsMTEpLm1hcCgoZT0+KHtjb250YWluZXJTdHlsZTpBR1tgY29udGFpbmVyJHtlfWBdfHxcIlwiLGdyaWRTdHlsZTpBR1tgZ3JpZCR7ZX1gXXx8XCJcIixub3RFeHBhbmRlZFN0eWxlOkFHW2BncmlkJHtlfU5vdEV4cGFuZGVkVXNlcmBdfHxcIlwiLGV4cGFuZGVkU3R5bGU6QUdbYGdyaWQke2V9RXhwYW5kZWRVc2VyYF18fFwiXCJ9KSkpXTtmdW5jdGlvbiBPRyhlLHQpe3JldHVybihlK051bWJlcih0KSklMj09MD9URy5MRUZUX0VER0U6VEcuUklHSFRfRURHRX1mdW5jdGlvbiBORyhlKXtsZXR7Y2hpbGRyZW46dCxjbGFzc05hbWU6bixvbkNsaWNrOnIsXCJkYXRhLXRlc3RpZFwiOml9PWU7Y29uc3RbYSxzXT0oMCxkLnVzZVN0YXRlKSghMSk7cmV0dXJuKDAsZC51c2VFZmZlY3QpKCgoKT0+e3MoITApfSksW10pLGE/KDAsby5aKSh4cy5kaXYse2xheW91dDohMCxpbml0aWFsOiExLGNsYXNzTmFtZTpuLG9uQ2xpY2s6cn0sdm9pZCAwLCgwLG8uWikoXCJkaXZcIix7fSx2b2lkIDAsdCkpOm51bGx9ZnVuY3Rpb24gd0coZSl7bGV0e2NvbnZlcnNhdGlvbjp0LGluY29taW5nQ2FsbERyYXdlcjpuLGRpc3BsYXlTY3JlZW5TaGFyZTpyfT1lO2NvbnN0W2ksYV09KDAsZC51c2VTdGF0ZSkoMCksW3MsY109Y00oKSxbbCx1XT0oMCxkLnVzZVN0YXRlKSghMSksZj1mdW5jdGlvbihlLHQsbixyLGkpe2NvbnN0W28sYV09ZnVuY3Rpb24oZSl7Y29uc3QgdD0oMCxrLm8pKHcuR1opLG49KDAsZC51c2VDYWxsYmFjaykoKG49PnQoZSxuKSksW3QsZV0pO3JldHVyblsoMCxpbC5qKSh3LkZtLGUpLG5dfShlKSxzPXQuY3VycmVudDtyZXR1cm4oMCxkLnVzZUxheW91dEVmZmVjdCkoKCgpPT57aWYocyYmbil7Y29uc3QgZT1uZXcgUmVzaXplT2JzZXJ2ZXIoKGU9PntpZighZVswXSlyZXR1cm47Y29uc3R7YmxvY2tTaXplOnR9PWVbMF0uYm9yZGVyQm94U2l6ZVswXSxuPXQtWFYtUVYscj1NYXRoLmZsb29yKG4vaSksbz1NYXRoLm1heCgyKnIsMiktMTthKG8pfSkpO3JldHVybiBlLm9ic2VydmUocyksKCk9PmUudW5vYnNlcnZlKHMpfWEocj9pdS4kajppdS55NCl9KSxbcyxuLHIsaSxhXSksb30odC5jb252ZXJzYXRpb25JZCxzLHIsbCxOdW1iZXIoQUcuc2NyZWVuU2hhcmluZ1RpbGVIZWlnaHQpKSxwPUV1KHQuY29udmVyc2F0aW9uSWQpLG09ZnVuY3Rpb24oZSx0KXtjb25zdCBuPWUuc2xpY2UoMCxpdS55NCkubWFwKChlPT57bGV0W3Qsbl09ZTtyZXR1cm57aWQ6dCxzdGF0ZTpuLGtleTp0fX0pKTtpZihlLmxlbmd0aD4wKWZvcihsZXQgZT0wO2U8dDtlKyspe2NvbnN0e2lkOnQsc3RhdGU6cn09blswXTtuLnB1c2goe2lkOnQsc3RhdGU6cixrZXk6YGRlbW8tdXNlci0ke2V9YH0pfWNvbnN0IHI9UnUobi5tYXAoKGU9PigwLHouT1kpKGUuaWQpKSkpO3JldHVybiB6VigpKG4scikubWFwKChlPT57bGV0W3QsaV09ZTtpZighdHx8IWkpdGhyb3cgRXJyb3IoYExlbmd0aCBtaXNtYXRjaCAtIHJlbW90ZVBhcnRpY2lwYW50czogJHtuLmxlbmd0aH0sZGlzcGxheU5hbWVzOiAke3IubGVuZ3RofWApO2NvbnN0e2lkOm8sc3RhdGU6YSxrZXk6c309dDtyZXR1cm57aWQ6byxzdGF0ZTphLGtleTpzLGRpc3BsYXlOYW1lOml9fSkpfShwLGkpLGg9UWwodC5jb252ZXJzYXRpb25JZCksZz1ndSh0LmNvbnZlcnNhdGlvbklkKTsoMCxkLnVzZUVmZmVjdCkoKCgpPT57aCYmZz09PWV1LlVxLklOX0NBTEwmJihiKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcInVzZXJfa2lja2VkX2Zyb21fY2FsbFwifSksKDAsaXUuVkkpKHQuY29udmVyc2F0aW9uSWQpKX0pLFtoLGddKTtjb25zdCB5PWZ1bmN0aW9uKGUpe2NvbnN0IHQ9WGMoKSxuPShyPWUuY29udmVyc2F0aW9uSWQsKDAsaWwuaikody5JRixyKSk7dmFyIHI7Y29uc3QgaT1lLnBhcnRpY2lwYW50cztpZihlLmNvbnZlcnNhdGlvblR5cGU9PT1QZS5pMS5PTkVPTk9ORSl7aWYoIW4pdGhyb3cgRXJyb3IoXCJQYXJ0aWNpcGFudCBjb2xvcnMgbWlzc2luZyBmb3IgMToxIGNvbnZlcmF0aW9uXCIpO2NvbnN0W2Uscl09bixvPW5ldyBNYXA7by5zZXQodCxlKTtjb25zdCBhPWkuZmluZCgoZT0+ZS5wYXJ0aWNpcGFudElkIT09dCkpO3JldHVybiBhJiZvLnNldChhLnBhcnRpY2lwYW50SWQsciksb31yZXR1cm4gbmV3IE1hcChpLm1hcCgoZT0+W2UucGFydGljaXBhbnRJZCxlLmNvbG9yXSkpKX0odCksRT1YYygpLF89TWF0aC5taW4oMTAsbS5sZW5ndGgrMSksST1fPjIsW1MsVF09SXUoKSxbQyxBXT0oMCxkLnVzZVN0YXRlKSghMSksW1IsT109ZnVuY3Rpb24oZSl7Y29uc3RbdCxuXT0oMCxkLnVzZVN0YXRlKShLVi5TSE9XX0lGX0hPVkVSRUQpLHI9KDAsZC51c2VSZWYpKCksaT0oMCxkLnVzZUNhbGxiYWNrKSgoKCk9PntpZih2b2lkIDAhPT1yLmN1cnJlbnQpcmV0dXJuIGNsZWFyVGltZW91dChyLmN1cnJlbnQpLHIuY3VycmVudD12b2lkIDAsdm9pZCBuKEtWLlNIT1dfSUZfSE9WRVJFRCk7bihLVi5TSE9XKSxyLmN1cnJlbnQ9c2V0VGltZW91dCgoKCk9PntuKEtWLlNIT1dfSUZfSE9WRVJFRCksci5jdXJyZW50PXZvaWQgMH0pLHFWKX0pLFtdKTtyZXR1cm4gZS5jb252ZXJzYXRpb25UeXBlPT09UGUuaTEuT05FT05PTkU/W0tWLkhJREUsWVZdOlt0LGldfSh0KSxOPSgwLGQudXNlQ2FsbGJhY2spKCgoKT0+e3UoIWwpfSksW2wsdV0pO0dJKENkLlRvZ2dsZVNlbGZWaWRlb1NpemUsTik7Y29uc3QgRD1XZCgpLFA9ZC51c2VDYWxsYmFjaygoKCk9Pntjb25zdCBlPU1zLmN1cnJlbnQ7ZSYmZS5yZXNldFRyZWUoKX0pLFtdKSx7bm90RXhwYW5kZWRTdHlsZTpNLGV4cGFuZGVkU3R5bGU6TCxncmlkU3R5bGU6VSxjb250YWluZXJTdHlsZTp4fT1rR1tfXSxGPWwmJiFuJiYhcixCPSFsJiYhbnx8cjtyZXR1cm4oMCxxLmpzeHMpKFwiZGl2XCIse1wiZGF0YS1icFwiOmMsb25Eb3VibGVDbGljazooKT0+QSghQyksY2xhc3NOYW1lOigwLFEuWikoQUcuY29udGFpbmVyV3JhcHBlcixyJiZBRy5jb250YWluZXJXcmFwcGVyU2NyZWVuU2hhcmluZykscmVmOnMsY2hpbGRyZW46WyExLCgwLG8uWikoeHMuZGl2LHtvbkxheW91dEFuaW1hdGlvbkNvbXBsZXRlOlAsbGF5b3V0OiEwLGNsYXNzTmFtZTooMCxRLlopKEFHLmNvbnRhaW5lcixyP0FHLmNvbnRhaW5lclNjcmVlblNoYXJpbmc6W3gsbD9MOk1dKX0sdm9pZCAwLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOigwLFEuWikoQUcuZ3JpZCxyP0FHLmdyaWRTY3JlZW5TaGFyaW5nOlUpfSx2b2lkIDAsKDAsby5aKShmZCx7fSx2b2lkIDAsKDAsby5aKShORyx7Y2xhc3NOYW1lOkFHLnVzZXIsb25DbGljazpyP3ZvaWQgMDpOfSx2b2lkIDAsKDAsby5aKShDRyx7aXNMb2NhbFRpbGU6ITAsaW5jb21pbmdDYWxsRHJhd2VyOm4sY29sb3I6eS5nZXQoRSk/PzAsY29udmVyc2F0aW9uSWQ6dC5jb252ZXJzYXRpb25JZCx1c2VySWQ6RSxtZWRpYTooMCxydS5OOCkoUyxUKSxzaG93U3BlYWtpbmdPdXRsaW5lOkksaGlkZUxlbnNDYXJvdXNlbDohRixkaXNwbGF5TmFtZVZpc2liaWxpdHk6S1YuSElERSx0aWxlUG9zaXRpb246cj9PRygxLEQpOlRHLkNBTExfR1JJRH0pKSxtLnNsaWNlKDAsZikubWFwKCgoZSxuKT0+e2xldHtpZDppLHN0YXRlOmEsa2V5OnMsZGlzcGxheU5hbWU6Y309ZTtyZXR1cm4oMCxvLlopKE5HLHt9LHMsKDAsby5aKShDRyx7aXNMb2NhbFRpbGU6ITEsY29sb3I6eS5nZXQoKDAsei5PWSkoaSkpPz8wLGNvbnZlcnNhdGlvbklkOnQuY29udmVyc2F0aW9uSWQsdXNlcklkOigwLHouT1kpKGkpLG1lZGlhOmEucHVibGlzaGVkTWVkaWEsc2hvd1NwZWFraW5nT3V0bGluZTpJLGRpc3BsYXlOYW1lVmlzaWJpbGl0eTpSLGRpc3BsYXlOYW1lOmMsb25DbGljazpPLHRpbGVQb3NpdGlvbjpyP09HKG4sRCk6VEcuQ0FMTF9HUklEfSkpfSkpKSkpLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOkFHLmxlbnNDYXJvdXNlbEhvbGRlcn0sdm9pZCAwLEImJihSR3x8KFJHPSgwLG8uWikoeVUse30pKSkpLHImJnAubGVuZ3RoK2k+ZiYmKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6QUcucGFydGljaXBhbnRPdmVyZmxvd0luZGljYXRvcn0sdm9pZCAwLCgwLG8uWikoR3Use3BhcnRpY2lwYW50czpwLnNsaWNlKGYsZiszKS5tYXAoKGU9PntsZXRbdF09ZTtyZXR1cm4oMCx6Lk9ZKSh0KX0pKSxjb252ZXJzYXRpb25JZDp0LmNvbnZlcnNhdGlvbklkLHNpemU6MzZ9KSwoMCxvLlopKFwic3BhblwiLHt9LHZvaWQgMCwoMCxvLlopKHYuWix7aWQ6XCJpSDcycHBcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIitcIn0se3R5cGU6MSx2YWx1ZTpcIm5cIn0se3R5cGU6MCx2YWx1ZTpcIiBtb3JlXCJ9XSx2YWx1ZXM6e246cC5sZW5ndGgraS1mfX0pKSldfSl9ZnVuY3Rpb24gREcoZSl7bGV0e2NvbnZlcnNhdGlvbklkOnR9PWU7Y29uc3Qgbj0oMCxkLnVzZVJlZikobnVsbCkscj1mdW5jdGlvbihlKXtyZXR1cm4oMCxpbC5qKShSLmRuLGUpfSh0KSxpPWBbUmVtb3RlQXVkaW9dWyR7KDAsei5NYykodCl9XWA7cmV0dXJuKDAsZC51c2VFZmZlY3QpKCgoKT0+e2NvbnN0IGU9bi5jdXJyZW50O2UmJnImJihyLmlkLGUub25lcnJvcj1lPT57KDAsYmguVkUpKFwicmVtb3RlLXVzZXItYXVkaW9cIil9LGUub25hYm9ydD0oKT0+e30sZS5vbnBsYXlpbmc9KCk9Pnt9LGUub253YWl0aW5nPSgpPT57fSxlLm9uZW5kZWQ9KCk9Pnt9LGUub25zdGFsbGVkPSgpPT57fSxlLm9uc3VzcGVuZD0oKT0+e30sZS5vbmVuZGVkPSgpPT57fSxlLm9uZW1wdGllZD0oKT0+e30sZS5vbmxvYWRzdGFydD0oKT0+e30sZS5vbmxvYWRlZGRhdGE9KCk9Pnt9LGUub25sb2FkZWRtZXRhZGF0YT0oKT0+e30sZS5zcmNPYmplY3Q9cil9KSxbcixpXSksKDAscS5qc3gpKFwiYXVkaW9cIix7cmVmOm4sYXV0b1BsYXk6ITB9KX12YXIgUEcsTUc7ZnVuY3Rpb24gTEcoKXtyZXR1cm4gTEc9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxMRy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9QygpLmdldExvZ2dlcihcIltUYWxrXVwiKSwoMCxULmdldExvZ2dlcikoXCJbdXNlV2FrZUxvY2tdXCIpO2NvbnN0IFVHPWU9PmQuY3JlYXRlRWxlbWVudChcInN2Z1wiLExHKHt3aWR0aDoyOSxoZWlnaHQ6MzIsdmlld0JveDpcIjAgMCAyOSAzMlwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSxQR3x8KFBHPWQuY3JlYXRlRWxlbWVudChcImdcIix7ZmlsdGVyOlwidXJsKCNmZTQ2NTNhOTE5N2IzOGY2MmVlNGE2MzY0MzVlYWUxNjNhODIyOGRmX19hKVwifSxkLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNi41IDMuODZjLTEuMDEgMC0xLjgyOC44MTgtMS44MjggMS44Mjh2MTNjMCAxLjAxLjgxOCAxLjgyOCAxLjgyOCAxLjgyOGgxLjU1OGEyLjQyOCAyLjQyOCAwIDAgMS0uMzQtMS4yNDJ2LS43OUg2LjcwNFY1Ljg5MWg3LjcxOXYyLjUzM2ExLjYyNSAxLjYyNSAwIDAgMSAyLjAzMS4xMjhWNS42ODhjMC0xLjAxLS44MTgtMS44MjktMS44MjgtMS44MjlINi41WlwiLGZpbGw6XCIjZmZmXCJ9KSxkLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJtMTQuODQ1IDE0LjIyMi0yLjAwMy0yLjAwM2EuMzQ4LjM0OCAwIDAgMSAwLS40OTNsMi4wMDMtMi4wMDNhLjM0OC4zNDggMCAwIDEgLjU5NS4yNDZ2LjQ4OGMwIC40NDguMzY1LjgwNy44MS44NjJhNi42MDcgNi42MDcgMCAwIDEgNC45OTEgOS43MTMuNjk2LjY5NiAwIDAgMS0xLjIyMy0uNjY3IDUuMjE0IDUuMjE0IDAgMCAwLTMuNzY4LTcuNjRjLS40NDQtLjA3LS44MS4zLS44MS43NXYuNWMwIC4zMS0uMzc1LjQ2Ni0uNTk1LjI0N1pNMTAuMjI1IDE3Ljg3NWE1LjIxMyA1LjIxMyAwIDAgMCA1LjIxMyA1LjIxM1YyMS43OGMwLS4zMS4zNzUtLjQ2NS41OTQtLjI0NmwyLjAwMyAyLjAwM2EuMzQ4LjM0OCAwIDAgMSAwIC40OTJsLTIuMDAzIDIuMDAzYS4zNDguMzQ4IDAgMCAxLS41OTQtLjI0NnYtMS4zMDZhNi42MDYgNi42MDYgMCAwIDEtNS44MDQtOS43NjQuNjk2LjY5NiAwIDAgMSAxLjIyMy42NjcgNS4xODcgNS4xODcgMCAwIDAtLjYzMiAyLjQ5WlwiLGZpbGw6XCIjZmZmXCJ9KSxkLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNMTUuNDM4IDIzLjA4OGE1LjIxMyA1LjIxMyAwIDAgMS00LjU4LTcuNzA0LjY5Ni42OTYgMCAwIDAtMS4yMjQtLjY2NyA2LjYwNiA2LjYwNiAwIDAgMCA1LjgwMyA5Ljc2M20wLTEuMzkyczAgMCAwIDBabTAgMFYyMS43OGMwLS4zMS4zNzYtLjQ2NS41OTUtLjI0NmwyLjAwMyAyLjAwM2EuMzQ4LjM0OCAwIDAgMSAwIC40OTJsLTIuMDAzIDIuMDAzYS4zNDguMzQ4IDAgMCAxLS41OTQtLjI0NnYtMS4zMDZtMCAwczAgMCAwIDBabS0yLjU5Ni0xMi4yNjIgMi4wMDMgMi4wMDNjLjIyLjIyLjU5NS4wNjQuNTk1LS4yNDZ2LS41MDFjMC0uNDUuMzY2LS44Mi44MS0uNzVhNS4yMTQgNS4yMTQgMCAwIDEgMy43NjggNy42NC42OTYuNjk2IDAgMCAwIDEuMjIzLjY2NyA2LjYwNyA2LjYwNyAwIDAgMC00Ljk5LTkuNzEzYy0uNDQ2LS4wNTUtLjgxMS0uNDE0LS44MTEtLjg2MnYtLjQ4OGEuMzQ4LjM0OCAwIDAgMC0uNTk1LS4yNDZsLTIuMDAzIDIuMDAzYS4zNDguMzQ4IDAgMCAwIDAgLjQ5M1pcIixzdHJva2U6XCIjZmZmXCIsc3Ryb2tlV2lkdGg6LjgxMyxzdHJva2VMaW5lY2FwOlwicm91bmRcIixzdHJva2VMaW5lam9pbjpcInJvdW5kXCJ9KSkpLE1HfHwoTUc9ZC5jcmVhdGVFbGVtZW50KFwiZGVmc1wiLG51bGwsZC5jcmVhdGVFbGVtZW50KFwiZmlsdGVyXCIse2lkOlwiZmU0NjUzYTkxOTdiMzhmNjJlZTRhNjM2NDM1ZWFlMTYzYTgyMjhkZl9fYVwiLHg6LTMuMjUseTotMi40Mzgsd2lkdGg6MzIuNSxoZWlnaHQ6MzQuMTI1LGZpbHRlclVuaXRzOlwidXNlclNwYWNlT25Vc2VcIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOlwic1JHQlwifSxkLmNyZWF0ZUVsZW1lbnQoXCJmZUZsb29kXCIse2Zsb29kT3BhY2l0eTowLHJlc3VsdDpcIkJhY2tncm91bmRJbWFnZUZpeFwifSksZC5jcmVhdGVFbGVtZW50KFwiZmVDb2xvck1hdHJpeFwiLHtpbjpcIlNvdXJjZUFscGhhXCIsdmFsdWVzOlwiMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDBcIixyZXN1bHQ6XCJoYXJkQWxwaGFcIn0pLGQuY3JlYXRlRWxlbWVudChcImZlT2Zmc2V0XCIse2R5Oi44MTN9KSxkLmNyZWF0ZUVsZW1lbnQoXCJmZUdhdXNzaWFuQmx1clwiLHtzdGREZXZpYXRpb246MS42MjV9KSxkLmNyZWF0ZUVsZW1lbnQoXCJmZUNvbG9yTWF0cml4XCIse3ZhbHVlczpcIjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAuMjQgMFwifSksZC5jcmVhdGVFbGVtZW50KFwiZmVCbGVuZFwiLHtpbjI6XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIixyZXN1bHQ6XCJlZmZlY3QxX2Ryb3BTaGFkb3dfNjMwM18xODQ4OFwifSksZC5jcmVhdGVFbGVtZW50KFwiZmVCbGVuZFwiLHtpbjpcIlNvdXJjZUdyYXBoaWNcIixpbjI6XCJlZmZlY3QxX2Ryb3BTaGFkb3dfNjMwM18xODQ4OFwiLHJlc3VsdDpcInNoYXBlXCJ9KSkpKSkseEc9e2NvbnRhaW5lcjpcIkRWNGViXCIsc3Bpbm5lckNvbnRhaW5lcjpcImg2OGlkIERWNGViXCIsc2h1ZmZsZUNvbnRhaW5lcjpcIlR3Mmg2IERWNGViXCIsc2h1ZmZsZUljb246XCJuMUc0alwifSxGRz17dmVyc2lvbjo1LGJhY2tncm91bmRfaWRzOls0MDcxNjEyOTksOTk5NjkwNDMyLDg2MjI0MzI4OCw3NDQyMzE4NTQsNDU2MTAxOTk1LDE0MTU4NzUyNCw0ODI1ODA2MDUsNzI0Nzc1NTgyLDMzMjkxNTQ4Nyw2ODY0NTk0ODAsOTMwNjc5MjYwLDQ4NjU4NTY4MiwzMjk1NjA5NTQsMjg2NTQzOTg1LDY1Mjk5ODQ1Nyw3OTYyODE2ODUsODE1MjAwMDczLDg5NjU5MjY3MCwyNjU3NTA3MzYsNjQ2NjI2NTgyLDMxNjUxMjE4NywyNjU3NTUyMjIsMzk4NTgwNTUxLDE5NTYyMTg1MSwzMDc2NzIyNjQsMzgyNzA2NDc1LDQzMzY5Njg2MCw5OTAwMDY5MjksNTEwNjY2MzExLDk3NjEzMjcxOSw5MTQ0ODg4NjMsOTc3OTc3OTk5LDM0NjI4NTQyNSw0MTIyNzI5NjcsMjkwOTI3Njg1LDE2MjAxMzM2MCw5NzAyNDU3OTcsOTkzMDM5MzM4LDE3NjI3Nzk3NCwxMzU2ODA1NDEsOTUzNDc1MzEwLDI1ODc4MTc5Myw1OTM5OTQzNTEsNTAwNzQ1NDkxLDg4NzI0NTUwNiw0OTA5NjQyMTQsODY1NjMwMDczLDQ4NjM1NzkwOSwxODE5ODg4NDUsOTU3MjUzMTc0LDc3MTQyNTY3NCw1MjIwNDc2MDAsMTg0NzM1MTIxLDMwODQ5OTkzNiw5NjM0NTA0OTYsMzA5NDEzNDgxLDczODE5MTQ4MywxODAyMjI3NzUsMzE5MDg3ODI2LDIwNjYxMzI0Niw5NTkxNTI5MTMsNTI2NTMwMjEzLDMyMTUwNTU2MywxOTE4ODE5OTQsNDgzNDcyNTY2LDE3ODc4MzQ1OSw3ODgwMzM0NjAsMjc0NzE2NzcyLDIwNzI0ODU5MywzMzM0ODI1ODEsNDY4MzMxNTk1LDU0ODUzNzY2Nyw4OTg5MDQ2ODgsNzcyMTI4NzQxLDM4Mzc1NTczNiw1NTMxMTczMjQsMTg0MTkyNTAzLDU2MTIyNDc3Niw3NTI5ODQxOTcsMTEyMDg3MjE4LDMwOTc5NzA1NCwyNzAyODYwOTUsNzczMTA0Njk1LDE3MDMzMDYzMiw2NjUwNTI3MDcsODEwNjQ5NDIzLDMzNzM2Mjc1NCw2ODU1NDMwNDgsNTkwOTY2ODQ1LDcyMzI3MTYxNiw0MjEwMTk5MjcsODg0ODc2Mzc2LDY5MDQ0NDc2Miw5NTY4NTY0MzgsNTM2NDUyNDI2LDczMzU1NzM5MSw1NzEwNTY5OTYsNzE1MTUwNjI2LDcxNTcxMDY2NV0sYmFja2dyb3VuZF9kZXRhaWxzOm5ldyBNYXAoW1s5NTY4NTY0Mzgse2lzX3BsdXNfZXhjbHVzaXZlOiEwfV0sWzUzNjQ1MjQyNix7aXNfcGx1c19leGNsdXNpdmU6ITB9XSxbNzMzNTU3MzkxLHtpc19wbHVzX2V4Y2x1c2l2ZTohMH1dLFs1NzEwNTY5OTYse2lzX3BsdXNfZXhjbHVzaXZlOiEwfV0sWzcxNTE1MDYyNix7aXNfcGx1c19leGNsdXNpdmU6ITB9XSxbNzE1NzEwNjY1LHtpc19wbHVzX2V4Y2x1c2l2ZTohMH1dXSl9LEJHPUZHLmJhY2tncm91bmRfaWRzLmZpbHRlcigoZT0+ITAhPT1GRy5iYWNrZ3JvdW5kX2RldGFpbHMuZ2V0KGUpPy5pc19wbHVzX2V4Y2x1c2l2ZSkpLmZpbHRlcigoZT0+TnVtYmVyLmlzU2FmZUludGVnZXIoZSkpKS5tYXAoKGU9Pk51bWJlcihlKS50b1N0cmluZygpKSk7ZnVuY3Rpb24gVkcoZSl7bGV0IHQ7ZG97Y29uc3QgZT1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqQkcubGVuZ3RoKTt0PUJHW2VdfXdoaWxlKHQ9PT1lKTtyZXR1cm4gdH12YXIgR0c7Y29uc3QgSEc9MmUzO2Z1bmN0aW9uIFdHKGUpe2xldHtjb252ZXJzYXRpb25JZDp0LGNsYXNzTmFtZTpufT1lO2NvbnN0W3IsaV09KDAsZC51c2VTdGF0ZSkoITEpLGE9WGMoKSxzPWJ1KHQpLGM9KDAsZC51c2VSZWYpKHZvaWQgMCk7cmV0dXJuKDAsZC51c2VFZmZlY3QpKCgoKT0+KCk9PmNsZWFyVGltZW91dChjLmN1cnJlbnQpKSxbXSkscj8oMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTooMCxRLlopKG4seEcuc3Bpbm5lckNvbnRhaW5lcil9LHZvaWQgMCxHR3x8KEdHPSgwLG8uWikobGgse30pKSk6KDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6KDAsUS5aKShuLHhHLnNodWZmbGVDb250YWluZXIpfSx2b2lkIDAsKDAsby5aKShVRyx7b25DbGljazooKT0+e2koITApO2NvbnN0IGU9e2JhY2tncm91bmRJbWFnZUlkOlZHKHM/LmJhY2tncm91bmRJbWFnZUlkKSx2ZXJzaW9uOihzPy52ZXJzaW9uPz8wKSsxfTsoMCxpdS5DdikodCxhLGUpLGMuY3VycmVudD1zZXRUaW1lb3V0KCgoKT0+aSghMSkpLEhHKX0sY2xhc3NOYW1lOnhHLnNodWZmbGVJY29ufSkpfWZ1bmN0aW9uIGpHKGUpe2xldHtjb252ZXJzYXRpb25JZDp0LGNoaWxkcmVuOm59PWU7Y29uc3Qgcj1idSh0KT8uYmFja2dyb3VuZEltYWdlSWQ/P3hNO3JldHVybigwLG8uWikoQk0se2JhY2tncm91bmRJZDpyfSx2b2lkIDAsbil9Y29uc3QgWkc9e2Rpc2NsYWltZXI6XCJwcGRJWFwifTt2YXIgekc7ZnVuY3Rpb24gS0coZSl7bGV0e2NvbnZlcnNhdGlvbklkOnR9PWU7cmV0dXJuIGh1KHQpPygwLG8uWikoXCJzcGFuXCIse2NsYXNzTmFtZTpaRy5kaXNjbGFpbWVyfSx2b2lkIDAsekd8fCh6Rz0oMCxvLlopKHYuWix7aWQ6XCIrdXQ1TmNcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIklmIHlvdSBqb2luIHRoaXMgY2FsbCB5b3Ugd2lsbCBsZWF2ZSB5b3VyIGN1cnJlbnQgY2FsbFwifV19KSkpOm51bGx9Y29uc3QgWUc9e2NvbnRhaW5lcjpcImJ6SEZxXCIsam9pbjpcIkc4QTdLXCIsYW5zd2VyZWQ6XCJrUWVoeFwiLG5vdE5vdzpcImVSMzVOXCJ9O3ZhciBxRyxYRyxRRztmdW5jdGlvbiBKRyhlKXtsZXR7Y29udmVyc2F0aW9uOnQsaXNBbnN3ZXJlZDpufT1lO2NvbnN0W3IsaV09SXUoKSxhPSgwLGQudXNlQ2FsbGJhY2spKCgoKT0+eygwLGl1LlBDKSh0LmNvbnZlcnNhdGlvbklkKSwoMCxpdS5QVykodCxpLFwiaW5jb21pbmdfYnV0dG9uXCIpfSksW3QsaV0pLHM9KDAsZC51c2VDYWxsYmFjaykoKCgpPT57Y29uc3QgZT10LmNvbnZlcnNhdGlvbklkO24/KDAsaXUuVkkpKGUpOigwLGl1LnJUKShlKX0pLFt0LmNvbnZlcnNhdGlvbklkLG5dKTtyZXR1cm4gR0koQWQuQWNjZXB0Q2FsbCxhKSxHSShBZC5EZWNsaW5lQ2FsbCxzKSwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpZRy5jb250YWluZXJ9LHZvaWQgMCxuPygwLG8uWikoUGQse2NsYXNzTmFtZTpZRy5hbnN3ZXJlZH0sdm9pZCAwLHFHfHwocUc9KDAsby5aKShsaCx7fSkpKTooMCxvLlopKFBkLHtjbGFzc05hbWU6WUcuam9pbixvbkNsaWNrOmEsaG90a2V5OkFkLkFjY2VwdENhbGx9LHZvaWQgMCxYR3x8KFhHPSgwLG8uWikodi5aLHtpZDpcIlBGSWVYd1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiSm9pblwifV19KSkpLCgwLG8uWikoUGQse2NsYXNzTmFtZTpZRy5ub3ROb3csb25DbGljazpzLGhvdGtleTpBZC5EZWNsaW5lQ2FsbH0sdm9pZCAwLFFHfHwoUUc9KDAsby5aKSh2Llose2lkOlwiQjNnQ2cwXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJOb3QgTm93XCJ9XX0pKSkpfWNvbnN0ICRHPXtjb250YWluZXI6XCJ4QndZeVwiLHVuYW5zd2VyZWRDb252ZXJzYXRpb25OYW1lOlwiY3J1bkpcIix0aXRsZTpcIkJrZHFLXCIsc3VidGl0bGU6XCJnV3pMeFwifTt2YXIgZUgsdEg7ZnVuY3Rpb24gbkgoZSl7bGV0e2NvbnZlcnNhdGlvbjp0fT1lO2NvbnN0e2NhbGxlclVzZXJJZDpuLGFuc3dlcmVkOnJ9PWZ1bmN0aW9uKGUpe2NvbnN0IHQ9X3UoZSksbj10Py5sb2NhbFVzZXIuY2FsbGluZ1N0YXRlPT09ZXUuVXEuQU5TV0VSRUQscj10Py5jYWxsZXI7cmV0dXJue2NhbGxlclVzZXJJZDpyPygwLHouT1kpKHIpOnZvaWQgMCxhbnN3ZXJlZDpufX0odC5jb252ZXJzYXRpb25JZCksaT1SbChuKSxhPXQuY29udmVyc2F0aW9uVHlwZT09PVBlLmkxLlVTRVJDUkVBVEVER1JPVVA7cmV0dXJuKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6JEcuY29udGFpbmVyfSx2b2lkIDAsKDAsby5aKShcInNwYW5cIix7Y2xhc3NOYW1lOiRHLnRpdGxlfSx2b2lkIDAsciYmKGE/KDAsby5aKSh2Llose2lkOlwic0tkKzU3XCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJZb3UgYXJlIGpvaW5pbmcgXCJ9LHt0eXBlOjEsdmFsdWU6XCJncm91cE5hbWVcIn0se3R5cGU6MCx2YWx1ZTpcIi4uLlwifV0sdmFsdWVzOntncm91cE5hbWU6KDAsby5aKShZdSx7ZmVlZEl0ZW06dH0pfX0pOmVIfHwoZUg9KDAsby5aKSh2Llose2lkOlwiZHlmZWlWXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJZb3UgYXJlIGpvaW5pbmdcIn1dfSkpKSwhciYmKDAscS5qc3hzKShxLkZyYWdtZW50LHtjaGlsZHJlbjpbKDAsby5aKSh2Llose2lkOlwiSXcvNjgrXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjEsdmFsdWU6XCJjYWxsZXJEaXNwbGF5TmFtZVwifSx7dHlwZTowLHZhbHVlOlwiIGlzIGNhbGxpbmcuLi5cIn1dLHZhbHVlczp7Y2FsbGVyRGlzcGxheU5hbWU6aX19KSxhJiYoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTokRy51bmFuc3dlcmVkQ29udmVyc2F0aW9uTmFtZX0sdm9pZCAwLCgwLG8uWikoWXUse2ZlZWRJdGVtOnR9KSldfSkpLCgwLG8uWikoXCJzcGFuXCIse2NsYXNzTmFtZTokRy5zdWJ0aXRsZX0sdm9pZCAwLHRIfHwodEg9KDAsby5aKSh2Llose2lkOlwiQkd5cWw2XCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJUaGV5IGNhbm5vdCBzZWUgeW91IHVudGlsIHlvdSBqb2luLlwifV19KSkpKX1jb25zdCBySD17Y29udGFpbmVyOlwic1FGekxcIixzdGF0dXNDb250YWluZXI6XCJJX2h2SFwiLHN0YXR1c0NvbnRhaW5lckRlZmF1bHQ6XCJOVFlCSlwiLHNjcmVlblNoYXJlVmlkZW86XCJqc0hqV1wifTt2YXIgaUg7ZnVuY3Rpb24gb0goZSl7bGV0e3N0cmVhbTp0LHJlbW90ZVN0cmVhbVN0YXRlOm59PWU7Y29uc3RbcixpXT0oMCxkLnVzZVN0YXRlKSghMSksW2Esc109KDAsZC51c2VTdGF0ZSkodm9pZCAwKSxjPWZ1bmN0aW9uKGUpe2NvbnN0W3Qsbl09KDAsZC51c2VTdGF0ZSkoITEpO3JldHVybigwLGQudXNlRWZmZWN0KSgoKCk9PntpZih2b2lkIDAhPT1lKXN3aXRjaChlLnN0YXR1cyl7Y2FzZSBldS56dy5OT1RfUFVCTElTSEVEOmNhc2UgZXUuencuUFJPUEFHQVRJTkdfTUVESUE6bighMSk7YnJlYWs7Y2FzZSBldS56dy5GUk9aRU46Y2FzZSBldS56dy5ESVNBTExPV0VEX0JZX0xPQ0FMX1VTRVI6Y2FzZSBldS56dy5OT19SRVFVSVJFRF9ERUNPREVSOmNhc2UgZXUuencuUkVTT1VSQ0VfTElNSVRFRDpjYXNlIGV1Lnp3LlRPT19MT1dfRE9XTkxJTktfQkFORFdJRFRIOm4oITApfWVsc2UgbighMSl9KSxbZV0pLHR9KG4pO3JldHVybigwLGQudXNlRWZmZWN0KSgoKCk9PntpKCExKSxzKHZvaWQgMCl9KSxbdF0pLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOnJILmNvbnRhaW5lcn0sdm9pZCAwLCghcnx8YykmJigwLG8uWikoXCJkaXZcIix7c3R5bGU6e2Jsb2NrU2l6ZTphPy5ibG9ja1NpemUsaW5saW5lU2l6ZTphPy5pbmxpbmVTaXplfSxjbGFzc05hbWU6KDAsUS5aKShySC5zdGF0dXNDb250YWluZXIsdm9pZCAwPT09YSYmckguc3RhdHVzQ29udGFpbmVyRGVmYXVsdCl9LHZvaWQgMCxpSHx8KGlIPSgwLG8uWikobGgse30pKSksKDAsby5aKSh1Ryx7c3RyZWFtOnQsY2xhc3NOYW1lOnJILnNjcmVlblNoYXJlVmlkZW8sb25WaWRlb1JlYWR5OigpPT57aSghMCl9LG9uVmlkZW9TaXplVXBkYXRlZDplPT57MD09PWUuYmxvY2tTaXplfHwwPT09ZS5pbmxpbmVTaXplP3Modm9pZCAwKTpyJiZzKGUpfX0pKX1jb25zdCBhSD17Y29udGFpbmVyOlwiT0pfOE1cIixjYWxsQ29udGFpbmVyOlwiVHB0S1dcIixpbkNhbGxDb250YWluZXI6XCJObXYxcyBUcHRLV1wiLGluY29taW5nQ2FsbENvbnRhaW5lcjpcIlRhVkowIFRwdEtXXCIsaW5DYWxsU2NyZWVuU2hhcmVDb250YWluZXI6XCJGZkRKNlwiLHNodWZmbGVCdXR0b246XCJCcXBOZlwiLHNodWZmbGVCdXR0b25Cb3R0b21SaWdodDpcIkpoREhDXCIsdG9hc3RDb250YWluZXI6XCJnZV9TelwifTtmdW5jdGlvbiBzSChlKXtsZXR7Y29udmVyc2F0aW9uSWQ6dCxoaWRlSGVhZGVyOm59PWU7Y29uc3Qgcj1ndSh0KSxpPXI9PT1ldS5VcS5BTlNXRVJFRCxhPWl8fHI9PT1ldS5VcS5SSU5HSU5HOyFmdW5jdGlvbihlKXtjb25zdCB0PSgwLGlsLmopKHcuZnEsZSkse29uZ29pbmdDYWxsQ29udmVyc2F0aW9uSWQ6bixpbmNvbWluZ0NhbGxDb252ZXJzYXRpb25JZDpyfT1tdSgpLFtpLG9dPSgwLGsubykoUi5HdiksYT0oMCxudS5YKShlKSxzPWR1LkdGLkNhbGxpbmc7Y3UocyxhLCExKSwoMCxkLnVzZUVmZmVjdCkoKCgpPT57aWYoZSE9PW4mJmUhPT1yKXRocm93IEVycm9yKGB1c2VTZXRJbml0aWFsQ2FtZXJhU3RhdGUgY2FsbGVkIGZvciBjb252ZXJzYXRpb25JZCB3aXRoIG5vIGNhbGxpbmcgYWN0aXZpdHk6ICR7KDAsei5NYykoZSl9YCk7dm9pZCAwIT09biE9KHZvaWQgMCE9PXIpJiYoKDAscnUuV3YpKHQpP2kocyxhKTpvKHMsYSwhMCkpfSksW10pfSh0KSxmdW5jdGlvbihlKXtjb25zdHtvbmdvaW5nQ2FsbENvbnZlcnNhdGlvbklkOnQsaW5jb21pbmdDYWxsQ29udmVyc2F0aW9uSWQ6bn09bXUoKSxyPWd1KHQpPT09ZXUuVXEuQ0FMTElORyxpPWd1KG4pPT09ZXUuVXEuUklOR0lORyxvPWZ1bmN0aW9uKGUpe2NvbnN0IHQ9WGMoKSxuPVZsKGUpLHI9bj8uY29udmVyc2F0aW9uVHlwZT09PVBlLmkxLk9ORU9OT05FP24ucGFydGljaXBhbnRzLmZpbHRlcigoZT0+ZS5wYXJ0aWNpcGFudElkIT09dCkpLm1hcCgoZT0+ZS5wYXJ0aWNpcGFudElkKSlbMF06dm9pZCAwO3JldHVybigwLGlsLmopKFNsLkpULHIpfShlKTtsZXQgYTtyJiZ0PT09ZT9hPW8/ZnUuJHUuT3V0Z29pbmdDYWxsQmVzdEZyaWVuZDpmdS4kdS5PdXRnb2luZ0NhbGw6aSYmbj09PWUmJihhPXQ/ZnUuJHUuQ2FsbFdhaXRpbmc6bz9mdS4kdS5JbmNvbWluZ0NhbGxCZXN0RnJpZW5kOmZ1LiR1LkluY29taW5nQ2FsbCksKDAsTy5ycCkoQS5UOSkmJihhPXZvaWQgMCksKDAsZnUuT1opKGEpfSh0KSwoMCxkLnVzZUVmZmVjdCkoKCgpPT57aWYoIShcIndha2VMb2NrXCJpbiBuYXZpZ2F0b3IpKXJldHVybjtsZXQgZSx0PSExO2NvbnN0IG49XCJ2aXNpYmxlXCI9PT1kb2N1bWVudC52aXNpYmlsaXR5U3RhdGUscj1hc3luYygpPT57dHJ5e2NvbnN0IG49YXdhaXQgbmF2aWdhdG9yLndha2VMb2NrLnJlcXVlc3QoXCJzY3JlZW5cIik7bi5vbnJlbGVhc2U9KCk9Pnt9LHQ/bi5yZWxlYXNlKCk6ZT1ufWNhdGNoKGUpe319LGk9KCk9PntuJiYhZT8ucmVsZWFzZWR8fFwidmlzaWJsZVwiIT09ZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlfHxyKCl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLGkpLG4mJnIoKSwoKT0+e3Q9ITAsZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInZpc2liaWxpdHljaGFuZ2VcIixpKSxlJiZlLnJlbGVhc2UoKX19KSxbXSk7Y29uc3R7c2NyZWVuU2hhcmVTdHJlYW06cyxzY3JlZW5TaGFyZVN0YXRlOmN9PWZ1bmN0aW9uKGUpe2NvbnN0IHQ9RXUoZSkuZmluZCgoZT0+e2xldFt0LG5dPWU7cmV0dXJuIG4uc2NyZWVuU3RyZWFtU3RhdGUuc3RhdHVzIT09ZXUuencuTk9UX1BVQkxJU0hFRCYmbi5zY3JlZW5TdHJlYW1TdGF0ZS5zdGF0dXMhPT1ldS56dy5ESVNBTExPV0VEX0JZX0xPQ0FMX1VTRVJ9KSksbj1mdW5jdGlvbihlLHQpe3JldHVybigwLGlsLmopKFIuVWMsdCxlKX0odD8oMCx6Lk9ZKSh0WzBdKTp2b2lkIDAsZSkscj0oMCxrLm8pKFIuUGMpO3JldHVybiB2b2lkIDAhPT10JiZ2b2lkIDAhPT1uP3tzY3JlZW5TaGFyZVN0cmVhbTpuLHNjcmVlblNoYXJlU3RhdGU6dFsxXS5zY3JlZW5TdHJlYW1TdGF0ZX06e3NjcmVlblNoYXJlU3RyZWFtOnJ9fSh0KSxsPVZsKHQpLHtzaG93VG9hc3Q6dSxhY3RpdmVUb2FzdHM6ZixoaWRlVG9hc3Q6cH09SmQoKTtyZXR1cm4oMCxkLnVzZUVmZmVjdCkoKCgpPT57bCYmYigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJjYWxsaW5nLmNhbGxfdmlldy5zaG93blwifSl9KSxbXSksbD9hPygwLG8uWikoZmQse30sdm9pZCAwLCgwLG8uWikoeHMuZGl2LHtpbml0aWFsOnt4OlwiMTAwJVwifSxhbmltYXRlOnt4OjB9LHRyYW5zaXRpb246e2R1cmF0aW9uOi44fSxjbGFzc05hbWU6YUguY29udGFpbmVyfSx2b2lkIDAsKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6YUguaW5jb21pbmdDYWxsQ29udGFpbmVyfSx2b2lkIDAsKDAsby5aKShuSCx7Y29udmVyc2F0aW9uOmx9KSwoMCxvLlopKHdHLHtjb252ZXJzYXRpb246bCxpbmNvbWluZ0NhbGxEcmF3ZXI6ITAsZGlzcGxheVNjcmVlblNoYXJlOiExfSxcImluY29taW5nQ2FsbEdyaWRcIiksKDAsby5aKShLRyx7Y29udmVyc2F0aW9uSWQ6dH0pLCgwLG8uWikoSkcse2NvbnZlcnNhdGlvbjpsLGlzQW5zd2VyZWQ6aX0pKSkpOigwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOmFILmNvbnRhaW5lcn0sdm9pZCAwLCgwLG8uWikoVk8se2NvbnZlcnNhdGlvbjpsLGhpZGVIZWFkZXI6bn0pLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOigwLFEuWikoYUguaW5DYWxsQ29udGFpbmVyLHZvaWQgMCE9PXMmJmFILmluQ2FsbFNjcmVlblNoYXJlQ29udGFpbmVyKX0sXCJjYWxsQ29udGFpbmVyXCIsKDAsby5aKShqRyx7Y29udmVyc2F0aW9uSWQ6dH0sdm9pZCAwLHMmJigwLG8uWikob0gse3N0cmVhbTpzLHJlbW90ZVN0cmVhbVN0YXRlOmN9KSwoMCxvLlopKHdHLHtjb252ZXJzYXRpb246bCxkaXNwbGF5U2NyZWVuU2hhcmU6dm9pZCAwIT09c30sXCJpbkNhbGxHcmlkXCIpLCgwLG8uWikoUUkse2NsYXNzTmFtZTphSC50b2FzdENvbnRhaW5lcixhY3RpdmVUb2FzdHM6Zix0b3BPZmZzZXQ6OH0pLCgwLG8uWikockIse2NvbnZlcnNhdGlvbklkOmwuY29udmVyc2F0aW9uSWQsc2hvd0F1ZGlvVG9nZ2xlOiEwLHNob3dUb2FzdDplPT57cChlLmtleSksdShlKX19KSwoMCxvLlopKFdHLHtjb252ZXJzYXRpb25JZDpsLmNvbnZlcnNhdGlvbklkLGNsYXNzTmFtZTooMCxRLlopKGFILnNodWZmbGVCdXR0b24sdm9pZCAwPT09cyYmYUguc2h1ZmZsZUJ1dHRvbkJvdHRvbVJpZ2h0KX0pKSksKDAsby5aKShERyx7Y29udmVyc2F0aW9uSWQ6bC5jb252ZXJzYXRpb25JZH0pKTooMCxxLmpzeCkocS5GcmFnbWVudCx7fSl9Y29uc3QgY0g9e3R3ZWFrczpcIlNnbHBaXCIsdHdlYWs6XCJtSzlhelwiLGV4cGVyaW1lbnRhbFR3ZWFrOlwiZnVjSG5cIn0sbEg9ZT0+ZS50d2Vha3MuaGlkZVR3ZWFrcyx1SD1lPT5lLnR3ZWFrcy51cGRhdGVUd2VhayxkSD1lPT5lLnR3ZWFrcy5hbGxUd2Vha3M7ZnVuY3Rpb24gZkgoKXtjb25zdCBlPSgwLGsubykobEgpLHQ9KDAsay5vKShkSCksW24scl09KDAsZC51c2VTdGF0ZSkoITEpLGk9U0MoKSgoMCx0bC5UVCkodCkuZmlsdGVyKChlPT4hIW58fCFlLmRldk1vZGVSZXF1aXJlZCkpLChlPT5lLmNhdGVnb3J5KSk7cmV0dXJuKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6Y0gudHdlYWtzLG9uQ2xpY2s6ZX0sdm9pZCAwLCgwLG8uWikoXCJkaXZcIix7b25DbGljazplPT5lLnN0b3BQcm9wYWdhdGlvbigpfSx2b2lkIDAsKDAsby5aKShcImgxXCIse30sdm9pZCAwLG4/XCJUd2Vha3MoZGV2IG1vZGUpXCI6XCJUd2Vha3NcIiksT2JqZWN0LmVudHJpZXMoaSkubWFwKChlPT57bGV0W3Qsbl09ZTtyZXR1cm4oMCxvLlopKFwiZGl2XCIse30sdCwoMCxvLlopKFwiaDNcIix7fSx2b2lkIDAsdCksKDAsby5aKShcImRpdlwiLHt9LHZvaWQgMCxuLm1hcCgoZT0+KDAsby5aKShwSCx7dHdlYWs6ZX0sZS5pZCkpKSkpfSkpKSl9ZnVuY3Rpb24gcEgoZSl7bGV0e3R3ZWFrOnR9PWU7Y29uc3Qgbj0oMCxrLm8pKHVIKSxyPWU9Pm4odC5pZCxlLmN1cnJlbnRUYXJnZXQudmFsdWUpLGk9ZT0+bih0LmlkLGUudGFyZ2V0LmNoZWNrZWQpLGE9dC52YWx1ZSgpO2xldCBzPW51bGw7aWYodC5vcHRpb25zKXM9KDAsby5aKShcInNlbGVjdFwiLHt2YWx1ZTphLnRvU3RyaW5nKCksaWQ6dC5pZCxvbkNoYW5nZTpyfSx2b2lkIDAsdC5vcHRpb25zLm1hcCgoZT0+KDAsby5aKShcIm9wdGlvblwiLHt2YWx1ZTplLnRvU3RyaW5nKCl9LGUudG9TdHJpbmcoKSxlLnRvU3RyaW5nKCkpKSkpO2Vsc2Ugc3dpdGNoKHR5cGVvZiBhKXtjYXNlXCJib29sZWFuXCI6cz0oMCxvLlopKFwiaW5wdXRcIix7dHlwZTpcImNoZWNrYm94XCIsY2hlY2tlZDphLG9uQ2hhbmdlOml9KTticmVhaztjYXNlXCJudW1iZXJcIjpzPSgwLG8uWikoXCJpbnB1dFwiLHt0eXBlOlwibnVtYmVyXCIsdmFsdWU6YSxvbkNoYW5nZTpyfSk7YnJlYWs7Y2FzZVwic3RyaW5nXCI6cz0oMCxvLlopKFwiaW5wdXRcIix7dHlwZTpcImlucHV0XCIsdmFsdWU6YSxvbkNoYW5nZTpyfSl9cmV0dXJuKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6KDAsUS5aKShjSC50d2Vhayx0LmRldk1vZGVSZXF1aXJlZCYmY0guZXhwZXJpbWVudGFsVHdlYWspfSx2b2lkIDAsKDAsby5aKShcImxhYmVsXCIse2h0bWxGb3I6dC5pZH0sdm9pZCAwLHQudGl0bGUpLHMpfXZhciBtSDtmdW5jdGlvbiBoSCgpe3JldHVybiBoSD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGhILmFwcGx5KHRoaXMsYXJndW1lbnRzKX1uKDc4NzE4KSxuKDEyMzYyKSxuKDM2ODc5KSxDKCkuZ2V0TG9nZ2VyKFwiW1NlbnRyeV1cIiksQygpLmdldExvZ2dlcihcIltJbnRlcm5hbFJlcG9ydE1vZGFsXVwiKTtjb25zdCB2SD1lPT5kLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIixoSCh7d2lkdGg6MjQsaGVpZ2h0OjI0LHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksbUh8fChtSD1kLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJtMTQuOTQ3IDguMDA0IDUuNjEzLTQuNTNhMi4xMiAyLjEyIDAgMCAxIDIuOTc0LjNjLjczMi45LjU4NiAyLjIyNi0uMzI1IDIuOTYxbC01LjYxMyA0LjUzYy0uMjQxLjE5NS0uNjA2LjMxLS45MTUuMjg2bC0xLjk4Ni0uMmEuNDg2LjQ4NiAwIDAgMS0uNDM2LS41MzdsLjIxNy0xLjk3OGMuMDQxLS4zMDUuMjMtLjYzNy40NzEtLjgzMlptLS4zMzQtMy4yNDRhMi45IDIuOSAwIDAgMSAxLjMzNi4zMjRsLTIuMDE1IDEuNjI3YTMuMzAxIDMuMzAxIDAgMCAwLTEuMTczIDIuMDc3bC0uMjIzIDIuMDIzYTIuMzg0IDIuMzg0IDAgMCAwIDIuMTM5IDIuNjMzbDEuOTg2LjJjLjI5LjAyMi41OC4wMDYuODYxLS4wNDZ2Ni41OThjMCAuNDYtLjM3Ny44MzctLjgzNS44MDRhMS40ODggMS40ODggMCAwIDEtLjE1Mi0uMDE3Yy0uMTYzLS4wMzItLjM3My0uMTg4LS40MzEtLjIzM2EyNDcuMzcyIDI0Ny4zNzIgMCAwIDEtMi43OTctMi4xOTcgMS40NzIgMS40NzIgMCAwIDAtLjY1NS0uMzUyaC01LjQyYTIuOTExIDIuOTExIDAgMCAxLTIuOTEtMi45MTJWNy42NzJBMi45MTIgMi45MTIgMCAwIDEgNy4yMzYgNC43Nmg3LjM3N1pcIixmaWxsOlwiI2ZmZlwifSkpKSxnSD17b3BlbkJ1dHRvbjpcIm42VmtLXCIsY2xvc2VCdXR0b246XCJ5OFZTRlwifTt2YXIgeUgsRUg7ZnVuY3Rpb24gX0goZSl7bGV0e3RvZ2dsZUNyZWF0ZUNvbnZlcnNhdGlvbk1vZGFsOnQsaXNDcmVhdGVDb252ZXJzYXRpb25Nb2RhbE9wZW46bixjbG9zZUZyaWVuZFJlcXVlc3RNb2RhbDpyLGlzRnJpZW5kUmVxdWVzdE1vZGFsT3BlbjppfT1lO2NvbnN0IGE9JGwoKSxzPSgwLG1lLlopKCkuZm9ybWF0TWVzc2FnZSh7aWQ6XCJ3QW9zR2RcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIk5ldyBDaGF0XCJ9XX0pLGM9biYmYXx8aTtyZXR1cm4oMCxvLlopKFBkLHtvbkNsaWNrOmU9PntpP3IoKTp0KGUpfSxjbGFzc05hbWU6KDAsUS5aKShjP2dILmNsb3NlQnV0dG9uOmdILm9wZW5CdXR0b24pLHRpdGxlOnMsbm9QYWRkaW5nOiEwfSx2b2lkIDAsYz95SHx8KHlIPSgwLG8uWikoRWQse2hlaWdodDpcIjI0cHhcIix3aWR0aDpcIjI0cHhcIn0pKTpFSHx8KEVIPSgwLG8uWikodkgse2hlaWdodDpcIjI0cHhcIix3aWR0aDpcIjI0cHhcIn0pKSl9dmFyIElIPW4oNDQ5MDgpLFNIPW4ubihJSCk7Y29uc3QgYkg9e3NlbGVjdGVkRnJpZW5kczpbXSxzZWxlY3RlZENvbnZlcnNhdGlvbnM6W10sYWxsU2VsZWN0ZWRGcmllbmRzOltdLHVzZXJzQnlTZWxlY3RlZENvbnZlcnNhdGlvbklkOnt9fTt2YXIgVEg9e1RPR0dMRV9VU0VSX0ZPUl9ORVdfQ09OVkVSU0FUSU9OOjAsVE9HR0xFX0dST1VQX0ZPUl9ORVdfQ09OVkVSU0FUSU9OOjEsUkVNT1ZFX1VTRVJfRlJPTV9BTFJFQURZX1NFTEVDVEVEX1NFQ1RJT046Mn07Y29uc3QgQ0g9KGUsdCk9Pih7dHlwZTpUSC5UT0dHTEVfVVNFUl9GT1JfTkVXX0NPTlZFUlNBVElPTix1c2VySWQ6ZSxzaG91bGRTZWxlY3Q6dH0pLEFIPShlLHQsbik9Pih7dHlwZTpUSC5UT0dHTEVfR1JPVVBfRk9SX05FV19DT05WRVJTQVRJT04sY29udmVyc2F0aW9uSWQ6ZSxzaG91bGRTZWxlY3Q6bixjb252ZXJzYXRpb25GcmllbmRJZHM6dH0pLFJIPWU9Pih7dHlwZTpUSC5SRU1PVkVfVVNFUl9GUk9NX0FMUkVBRFlfU0VMRUNURURfU0VDVElPTix1c2VySWQ6ZX0pO2Z1bmN0aW9uIGtIKGUsdCl7c3dpdGNoKHQudHlwZSl7Y2FzZSBUSC5UT0dHTEVfVVNFUl9GT1JfTkVXX0NPTlZFUlNBVElPTjp7Y29uc3R7dXNlcklkOm4sc2hvdWxkU2VsZWN0OnJ9PXQsaT1yP1suLi5lLnNlbGVjdGVkRnJpZW5kcyxuXTplLnNlbGVjdGVkRnJpZW5kcy5maWx0ZXIoKGU9PmUhPT1uKSk7bGV0IG89Wy4uLmUuYWxsU2VsZWN0ZWRGcmllbmRzXTtpZihyKW8ucHVzaChuKTtlbHNle2xldCB0PSExO2Zvcihjb25zdFtyLGldb2YgT2JqZWN0LmVudHJpZXMoZS51c2Vyc0J5U2VsZWN0ZWRDb252ZXJzYXRpb25JZCkpaWYoaSl7dD1pLmluY2x1ZGVzKG4pO2JyZWFrfXR8fChvPW8uZmlsdGVyKChlPT5lIT09bikpKX1yZXR1cm57Li4uZSxhbGxTZWxlY3RlZEZyaWVuZHM6U0goKShvKSxzZWxlY3RlZEZyaWVuZHM6aX19Y2FzZSBUSC5UT0dHTEVfR1JPVVBfRk9SX05FV19DT05WRVJTQVRJT046e2NvbnN0e2NvbnZlcnNhdGlvbklkOm4sc2hvdWxkU2VsZWN0OnJ9PXQsaT17Li4uZS51c2Vyc0J5U2VsZWN0ZWRDb252ZXJzYXRpb25JZH07bGV0IG89Wy4uLmUuYWxsU2VsZWN0ZWRGcmllbmRzXTtpZihyKXtjb25zdHtjb252ZXJzYXRpb25GcmllbmRJZHM6ZX09dDtpW25dPWUsby5wdXNoKC4uLmUpLG89U0goKShvKX1lbHNle2NvbnN0IGU9aVtuXTtvPW8uZmlsdGVyKCh0PT5lPy5pbmNsdWRlcyh0KSkpLGRlbGV0ZSBpW25dfWNvbnN0IGE9cj9bLi4uZS5zZWxlY3RlZENvbnZlcnNhdGlvbnMsbl06ZS5zZWxlY3RlZENvbnZlcnNhdGlvbnMuZmlsdGVyKChlPT5lIT09bikpO3JldHVybnsuLi5lLGFsbFNlbGVjdGVkRnJpZW5kczpvLHNlbGVjdGVkQ29udmVyc2F0aW9uczphLHVzZXJzQnlTZWxlY3RlZENvbnZlcnNhdGlvbklkOml9fWNhc2UgVEguUkVNT1ZFX1VTRVJfRlJPTV9BTFJFQURZX1NFTEVDVEVEX1NFQ1RJT046e2NvbnN0e3VzZXJJZDpufT10LHI9ZS5hbGxTZWxlY3RlZEZyaWVuZHMuZmlsdGVyKChlPT5lIT09bikpO2xldCBpPWUuc2VsZWN0ZWRGcmllbmRzLmZpbHRlcigoZT0+ZSE9PW4pKSxvPVsuLi5lLnNlbGVjdGVkQ29udmVyc2F0aW9uc107Y29uc3QgYT17Li4uZS51c2Vyc0J5U2VsZWN0ZWRDb252ZXJzYXRpb25JZH0scz1bXTtmb3IoY29uc3RbdCxyXW9mIE9iamVjdC5lbnRyaWVzKGUudXNlcnNCeVNlbGVjdGVkQ29udmVyc2F0aW9uSWQpKWlmKHImJnIuaW5jbHVkZXMobikpe2NvbnN0IGU9ci5maWx0ZXIoKGU9PmUhPT1uKSk7cy5wdXNoKC4uLmUpLGRlbGV0ZSBhW3RdLG89by5maWx0ZXIoKGU9PmUhPT10KSl9cmV0dXJuIGk9U0goKShbLi4uaSwuLi5zXSkse2FsbFNlbGVjdGVkRnJpZW5kczpyLHVzZXJzQnlTZWxlY3RlZENvbnZlcnNhdGlvbklkOmEsc2VsZWN0ZWRGcmllbmRzOmksc2VsZWN0ZWRDb252ZXJzYXRpb25zOm99fWRlZmF1bHQ6cmV0dXJuIGV9fWNvbnN0IE9IPWU9Pntjb25zdCB0PU9iamVjdC5rZXlzKGUudXNlcnNCeVNlbGVjdGVkQ29udmVyc2F0aW9uSWQpO2lmKDE9PT10Lmxlbmd0aCYmMD09PWUuc2VsZWN0ZWRGcmllbmRzLmxlbmd0aClyZXR1cm4gdFswXX0sTkg9ZT0+ZS5hbGxTZWxlY3RlZEZyaWVuZHMsd0g9e2Rpc21pc3NDb250YWluZXI6XCJzamRJb1wiLGNyZWF0ZUNvbnZlcnNhdGlvbkNvbnRhaW5lcjpcImM5eWlCXCJ9O2Z1bmN0aW9uIERIKGUpe2xldHtpc09wZW46dCxzZXRJc09wZW46bn09ZTtjb25zdCByPSRkKCgwLGQudXNlQ2FsbGJhY2spKCgoKT0+e24oITEpfSksW25dKSksaT0oMCxnLnMwKSgpLGE9KDAsay5vKShUZS5VdSkscz1YYygpLGM9KDAsay5vKShUZS5odyksbD0oMCxrLm8pKFRlLkdxKSx1PSgwLGsubykoVGUuRkYpLGY9bUMoKSxwPSgwLGsubykoVGUuc2MpLFttLGhdPSgwLGQudXNlUmVkdWNlcikoa0gsYkgpLHY9T0gobSkseT1OSChtKSxFPVZsKHY/KDAsei5PWSkodik6dm9pZCAwKTtyZXR1cm4gdD8oMCxxLmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOndILmRpc21pc3NDb250YWluZXIscmVmOnIsY2hpbGRyZW46KDAsby5aKShGRix7Y29udGFpbmVyQ2xhc3NOYW1lOndILmNyZWF0ZUNvbnZlcnNhdGlvbkNvbnRhaW5lcixvbkNsb3NlOigpPT5uKCExKSxvblN1Ym1pdDphc3luYyBlPT57aWYodilyZXR1cm4gcChcIk5FV19DSEFUXCIpLGkodiksdm9pZCBuKCExKTtiKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcInN0YXJ0X2NoYXRcIixkaW1lbnNpb25zOntpc19ncm91cDpTdHJpbmcoeS5sZW5ndGg+MSl9fSk7Y29uc3QgdD1hd2FpdCBhKHkscyxlKTtwKFwiTkVXX0NIQVRcIiksaSgoMCx4bC5WMSkodCkpLG4oITEpfSxvblNlY29uZGFyeUFjdGlvbjphc3luYyBlPT57YigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJzdGFydF9jYWxsXCIsZGltZW5zaW9uczp7aXNfZ3JvdXA6U3RyaW5nKHkubGVuZ3RoPjEpfX0pO2NvbnN0IHQ9YXdhaXQgYXN5bmMgZnVuY3Rpb24oKXtsZXQgZSx0LG49YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOlwiXCI7aWYoRSllPUUsdD1QZS5pMS5VU0VSQ1JFQVRFREdST1VQO2Vsc2V7Y29uc3R7Y29udmVyc2F0aW9uOnIsY29udmVyc2F0aW9uVHlwZTppfT1hd2FpdCBjKHkscyxuKTtlPXIsdD1pfXJldHVybiBhd2FpdCBsKGUuY29udmVyc2F0aW9uSWQsdCksdD09PVBlLmkxLlVTRVJDUkVBVEVER1JPVVAmJmF3YWl0IHUoZS5jb252ZXJzYXRpb25JZCksZX0oZSk7KDAsaXUucTgpKHQsITAsRFQudC5ORVdfQ0hBVCksaShcIi9cIiksbighMSl9LHRvZ2dsZUZyaWVuZDooZSx0KT0+e2goQ0goZSx0KSl9LHRvZ2dsZUNvbnZlcnNhdGlvbjooZSx0KT0+e2NvbnN0IG49KCgwLGNGLmspKGUpP2UucGFydGljaXBhbnRzOmUucGFydGljaXBhbnRzLm1hcCgoZT0+ZS5wYXJ0aWNpcGFudElkKSkpLmZpbHRlcigoZT0+Zi5zb21lKCh0PT50LnVzZXJfaWQ9PT1lKSkpKS5tYXAoKGU9PigwLHouTWMpKGUpKSk7aChBSCgoMCx6Lk1jKShlLmNvbnZlcnNhdGlvbklkKSxuLHQpKX0scmVtb3ZlRnJpZW5kRnJvbVNlbGVjdGVkOmU9PntoKFJIKGUpKX0sc2VsZWN0ZWRGcmllbmRzOm0uc2VsZWN0ZWRGcmllbmRzLHNlbGVjdGVkQ29udmVyc2F0aW9uczptLnNlbGVjdGVkQ29udmVyc2F0aW9ucyxzZWxlY3RlZEVudGl0aWVzRm9yU3VibWlzc2lvbjp5Lm1hcCgoZT0+KHt1c2VySWQ6ZX0pKSl9KX0pOm51bGx9Y29uc3QgUEg9e29wZW5CdXR0b246XCJrd3VJX1wiLGhpZGRlbjpcInVUZV9PXCJ9O3ZhciBNSDtmdW5jdGlvbiBMSChlKXtsZXR7b3BlbkZyaWVuZFJlcXVlc3RNb2RhbDp0LGlzRnJpZW5kUmVxdWVzdE1vZGFsT3BlbjpufT1lO2NvbnN0IHI9KDAsbWUuWikoKS5mb3JtYXRNZXNzYWdlKHtpZDpcIlF2MkZSRVwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiVmlldyBmcmllbmQgcmVxdWVzdHNcIn1dfSk7cmV0dXJuKDAsby5aKShQZCx7b25DbGljazp0LGNsYXNzTmFtZTooMCxRLlopKFBILm9wZW5CdXR0b24sbiYmUEguaGlkZGVuKSx0aXRsZTpyLG5vUGFkZGluZzohMH0sdm9pZCAwLE1IfHwoTUg9KDAsby5aKSh6eCx7aGVpZ2h0OlwiMjRweFwiLHdpZHRoOlwiMjRweFwifSkpKX12YXIgVUg9big0ODQwMykseEg9bi5uKFVIKTtjb25zdCBGSD17bGlzdEl0ZW06XCJQZXUza1wiLGZyaWVuZEluZm86XCJIUXVCNVwiLHRleHRDb250ZW50Olwid3R5MUFcIixkaXNwbGF5TmFtZTpcImRBa0JYXCIsdXNlcm5hbWU6XCJXb0VIeFwiLGFkZFNvdXJjZTpcIm5yWFdEXCIscmVxdWVzdEFjdGlvbnM6XCJjQmthZFwiLGFjY2VwdFJlcXVlc3Q6XCJCVzlYb1wiLHJlamVjdFJlcXVlc3Q6XCJSYlJRRFwifTt2YXIgQkg7ZnVuY3Rpb24gVkgoZSl7bGV0e2ZyaWVuZDp0fT1lO3JldHVybigwLG8uWikoXCJsaVwiLHtjbGFzc05hbWU6RkgubGlzdEl0ZW19LHZvaWQgMCwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpGSC5mcmllbmRJbmZvfSx2b2lkIDAsKDAsby5aKShCdSx7dXNlcklkOnQudXNlcl9pZCxzaXplOjM2fSksKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6RkgudGV4dENvbnRlbnR9LHZvaWQgMCwoMCxvLlopKFwic3BhblwiLHtjbGFzc05hbWU6RkguZGlzcGxheU5hbWV9LHZvaWQgMCx0LmRpc3BsYXkpLCgwLG8uWikoXCJzcGFuXCIse2NsYXNzTmFtZTpGSC51c2VybmFtZX0sdm9pZCAwLHQubXV0YWJsZV91c2VybmFtZSksKDAsby5aKShcInNwYW5cIix7Y2xhc3NOYW1lOkZILmFkZFNvdXJjZX0sdm9pZCAwLChuPXQuYWRkX3NvdXJjZT8/XCJcIik/bi5zcGxpdChcIiBcIikubWFwKHhIKCkpLmpvaW4oXCIgXCIpOlwiXCIpKSksKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6RkgucmVxdWVzdEFjdGlvbnN9LHZvaWQgMCwoMCxvLlopKFBkLHtub1BhZGRpbmc6ITAsY2xhc3NOYW1lOkZILmFjY2VwdFJlcXVlc3R9LHZvaWQgMCxCSHx8KEJIPSgwLG8uWikoengse2hlaWdodDpcIjE2cHhcIix3aWR0aDpcIjE2cHhcIn0pKSksKDAsby5aKShnUCx7dHlwZTpcImJ1dHRvblwiLGNsYXNzTmFtZTpGSC5yZWplY3RSZXF1ZXN0fSkpKTt2YXIgbn1jb25zdCBHSD0oMCxvLlopKHYuWix7aWQ6XCJXeVhTMkxcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkFkZCBGcmllbmRzXCJ9XX0pLEhIPSgwLG8uWikodi5aLHtpZDpcIm83Q2VRdlwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiQWRkZWQgTWVcIn1dfSksV0g9KDAsby5aKSh2Llose2lkOlwiTUdRS1ZKXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJOZXcgZnJpZW5kIHJlcXVlc3RzIHdpbGwgYXBwZWFyIGhlcmVcIn1dfSksakg9KDAsby5aKSh2Llose2lkOlwiUVZKZVpVXCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJTZW5kaW5nIHJlcXVlc3RzIGNvbWluZyBzb29uIVwifV19KSxaSD1lPT4oMCxvLlopKHYuWix7aWQ6XCIyNnBJdzFcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIlZpZXcgXCJ9LHt0eXBlOjEsdmFsdWU6XCJuXCJ9LHt0eXBlOjAsdmFsdWU6XCIgTW9yZVwifV0sdmFsdWVzOntuOmV9fSksekg9e2xpc3RXcmFwcGVyOlwiRjk3MDZcIixsaXN0VGl0bGU6XCJNVTI5YlwiLHBsYWNlaG9sZGVyOlwiZVZfVzRcIixmcmllbmRMaXN0V3JhcHBlcjpcImJoeW53XCIsZnJpZW5kTGlzdDpcInlwZm1rXCIsdmlld01vcmVDZWxsV3JhcHBlcjpcInlrdmxvXCIsdmlld01vcmVDZWxsQ29udGVudDpcInpCY1hVXCJ9O2Z1bmN0aW9uIEtIKCl7Y29uc3QgZT1MbCgpLFt0LG5dPSgwLGQudXNlU3RhdGUpKGUubGVuZ3RoPjMpLFtyLGldPSgwLGQudXNlU3RhdGUpKDApLGE9KDAsZC51c2VSZWYpKG51bGwpO3JldHVybigwLGQudXNlRWZmZWN0KSgoKCk9PntpZihlLmxlbmd0aDw9M3x8IXQpcmV0dXJuO2NvbnN0IG49YS5jdXJyZW50Py5jaGlsZHJlbnx8W107bGV0IHI9MDtmb3IobGV0IGU9MDtlPDQ7ZSsrKXIrPW5bZV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O2kocil9KSxbZS5sZW5ndGgsdF0pLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOnpILmxpc3RXcmFwcGVyfSx2b2lkIDAsKDAsby5aKShcInNwYW5cIix7Y2xhc3NOYW1lOnpILmxpc3RUaXRsZX0sdm9pZCAwLEhIKSwoKCk9PntpZighZS5sZW5ndGgpcmV0dXJuKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6ekgucGxhY2Vob2xkZXJ9LHZvaWQgMCxXSCk7Y29uc3QgaT1bXSxzPXQ/TWF0aC5taW4oZS5sZW5ndGgsMyk6ZS5sZW5ndGg7Zm9yKGxldCB0PTA7dDxzO3QrKylpLnB1c2goKDAsby5aKShWSCx7ZnJpZW5kOmVbdF19LGVbdF0udXNlcl9pZC5pZC50b1N0cmluZygpKSk7cmV0dXJuKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6ekguZnJpZW5kTGlzdFdyYXBwZXJ9LHZvaWQgMCwoMCxxLmpzeHMpKFwidWxcIix7cmVmOmEsc3R5bGU6cj97b3ZlcmZsb3dZOnQ/XCJoaWRkZW5cIjpcInNjcm9sbFwiLG1heEhlaWdodDplLmxlbmd0aDw9Mz9cImF1dG9cIjp0P3I6XCIzMDBweFwiLHZpc2liaWxpdHk6XCJ2aXNpYmxlXCJ9Ont2aXNpYmlsaXR5OlwiaGlkZGVuXCJ9LGNsYXNzTmFtZTp6SC5mcmllbmRMaXN0LGNoaWxkcmVuOltpLGUubGVuZ3RoPD0zfHwhdD9udWxsOigwLG8uWikoXCJsaVwiLHtjbGFzc05hbWU6ekgudmlld01vcmVDZWxsV3JhcHBlcn0sdm9pZCAwLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOnpILnZpZXdNb3JlQ2VsbENvbnRlbnQsb25DbGljazooKT0+e24oITEpfX0sdm9pZCAwLFpIKGUubGVuZ3RoLTMpKSldfSkpfSkoKSl9Y29uc3QgWUg9e2Rpc21pc3NDb250YWluZXI6XCJ6WWdHbFwiLGNvbnRlbnQ6XCJKQjhaM1wiLGhlYWRlcjpcImlFOUZtXCIsZm9vdGVyOlwiQjRKWkRcIn07dmFyIHFILFhIO2Z1bmN0aW9uIFFIKGUpe2xldHtzZXRJc09wZW46dH09ZTtjb25zdCBuPSRkKCgwLGQudXNlQ2FsbGJhY2spKCgoKT0+e3QoITEpfSksW3RdKSk7cmV0dXJuKDAscS5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTpZSC5kaXNtaXNzQ29udGFpbmVyLHJlZjpuLGNoaWxkcmVuOnFIfHwocUg9KDAsby5aKShKSCx7fSkpfSl9ZnVuY3Rpb24gSkgoKXtyZXR1cm4oMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTpZSC5jb250ZW50fSx2b2lkIDAsKDAsby5aKShcInNwYW5cIix7Y2xhc3NOYW1lOllILmhlYWRlcn0sdm9pZCAwLEdIKSxYSHx8KFhIPSgwLG8uWikoS0gse30pKSwoMCxvLlopKFwic3BhblwiLHtjbGFzc05hbWU6WUguZm9vdGVyfSx2b2lkIDAsakgpKX1jb25zdCAkSD17Y2FsbFZpZXdGbG9hdGluZ1dpZHRoOlwiMzAwcHhcIixjb21wYWN0Q29udGVudE1lZGlhUXVlcnk6XCJzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDEyMDBweClcIixoZWFkZXI6XCJYbFdfMVwiLHByb2ZpbGVBbmRVcGRhdGVCdXR0b25Db250YWluZXI6XCJBYlVKdFwiLGdob3N0T2Zmc2V0OlwiYW96eWlcIixnaG9zdENvbnRhaW5lcjpcIklSeHlOXCIsZ2hvc3RJY29uOlwib0NEaEZcIixzbmFwV29yZG1hcms6XCJOTkZsUVwiLHNlYXJjaENvbnRhaW5lcjpcInlDMUVHXCIsYXBwTGF5b3V0OlwiRnBnOHRcIixzaWRlYmFyOlwiQkw3ZG9cIixjb250ZW50Q29udGFpbmVyOlwiVmJqc2dcIixoZWFkZXJBbmRDb250ZW50OlwiV2NnSDlcIixqdXN0Q29udGVudDpcIldKandsXCIsbWFpbjpcIkNoTEF2XCIsY29udGVudDpcIl9YTUN3XCIsbGVnYWxEaXNjbGFpbWVyOlwiYlphWGZcIixvdXRnb2luZ0NhbGw6XCJVTVNoNVwiLGNhbGxWaWV3RmxvYXRpbmc6XCJocGdlM1wiLGNyZWF0ZUNvbnZlcnNhdGlvbk1vZGFsRmxvYXRpbmc6XCJMdFFGOFwiLHJpZ2h0QnV0dG9uc1dyYXBwZXI6XCJ0b0oxcFwiLGNyZWF0ZUNvbnZlcnNhdGlvbkNvbnRhaW5lcjpcIkxzYlJnXCIsZnJpZW5kUmVxdWVzdENvbnRhaW5lcjpcIlcyaXB0XCIsY3JlYXRlQ29udmVyc2F0aW9uQ29udGFpbmVyQ29udmVyc2F0aW9uVmlldzpcIkZoS3lSXCIsbGlnaHRib3hWMkNvbnRhaW5lcjpcInk3bno3XCIsbGlnaHRib3hWMkluTWFpbjpcIm55cnZXXCIsbGlnaHRib3hWMkluU2Vjb25kYXJ5OlwiWlVOdUhcIixpbnRlcm5hbEJ1Z1JlcG9ydEJ1dHRvbjpcImZjcjM1XCIsdG9hc3RDb250YWluZXI6XCJCVTlLRFwiLGRlZW1waGFzaXplZDpcIkJGYVMyXCJ9O3ZhciBlVyx0VyxuVyxyVyxpVyxvVyxhVyxzVyxjVyxsVztjb25zdCB1Vz17Z3JpZFRlbXBsYXRlQ29sdW1uczpcIm1pbm1heCgwLCAxZnIpXCIsZ3JpZFRlbXBsYXRlQXJlYXM6J1xcbiAgXCJzZWNvbmRhcnlcIlxcbiAgXCJtYWluXCJcXG4nfSxkVz17anVzdE1haW46ey4uLnVXLGdyaWRUZW1wbGF0ZVJvd3M6XCJtaW5tYXgoMCwgMGZyKSBtaW5tYXgoMCwgMWZyKVwifSxqdXN0U2Vjb25kYXJ5OnsuLi51VyxncmlkVGVtcGxhdGVSb3dzOlwibWlubWF4KDAsIDFmcikgbWlubWF4KDAsIDBmcilcIixnYXA6MH0sbWFpbkFuZFNlY29uZGFyeTp7Li4udVcsZ3JpZFRlbXBsYXRlUm93czpcIm1pbm1heCgwLCAxZnIpIG1pbm1heCgwLCAxZnIpXCIsZ2FwOlwiOHB4XCJ9fSxmVz17Z3JpZFRlbXBsYXRlUm93czpcIm1pbm1heCgwLCAxZnIpXCIsZ3JpZFRlbXBsYXRlQXJlYXM6J1wibWFpbiBzZWNvbmRhcnlcIid9LHBXPXtqdXN0TWFpbjp7Li4uZlcsZ3JpZFRlbXBsYXRlQ29sdW1uczpcIm1pbm1heCgwLCAxZnIpIG1pbm1heCgwLCAwZnIpXCJ9LGp1c3RTZWNvbmRhcnk6ey4uLmZXLGdyaWRUZW1wbGF0ZUNvbHVtbnM6XCJtaW5tYXgoMCwgMGZyKSBtaW5tYXgoMCwgMWZyKVwiLGdhcDowfSxtYWluQW5kU2Vjb25kYXJ5OnsuLi5mVyxncmlkVGVtcGxhdGVDb2x1bW5zOlwibWlubWF4KDAsIDUwMHB4KSBtaW5tYXgoNjAlLCAxZnIpXCIsZ2FwOlwiOHB4XCJ9fTtmdW5jdGlvbiBtVyhlKXtsZXR7dG9nZ2xlQ3JlYXRlQ29udmVyc2F0aW9uTW9kYWw6dCxpc0NyZWF0ZUNvbnZlcnNhdGlvbk1vZGFsT3BlbjpuLHRvZ2dsZUZyaWVuZFJlcXVlc3RNb2RhbDpyLGlzRnJpZW5kUmVxdWVzdE1vZGFsT3BlbjppfT1lO2NvbnN0IGE9KDAsTy5ycCkoQS5lMSkmJiExLHM9KDAsZy5USCkoKSx7Y29udm9JZDpjfT0oMCx5LkxYKSh4bC5TUyxzLnBhdGhuYW1lKT8ucGFyYW1zPz97fSxsPSgwLG1lLlopKCksW3UsZl09WWwoKSxwPSgwLGQudXNlUmVmKShudWxsKTtHSShPZC5TaG93Q29udmVyc2F0aW9uU3dpdGNoZXIsKDAsZC51c2VDYWxsYmFjaykoKCgpPT5wLmN1cnJlbnQ/LmZvY3VzKCkpLFtdKSx7ZW5hYmxlT25Db250ZW50RWRpdGFibGU6ITAsZW5hYmxlT25Gb3JtVGFnczpbXCJJTlBVVFwiLFwiVEVYVEFSRUFcIixcIlNFTEVDVFwiXX0pO2NvbnN0IG09KDAsay5vKShITy5nKTsoMCxkLnVzZUVmZmVjdCkoKCgpPT57bSgpfSksW21dKTtjb25zdCBoPSgwLGQudXNlRGVmZXJyZWRWYWx1ZSkodSksW3YsRV09KDAsZC51c2VTdGF0ZSkoKSxfPUUsST1lPT57c3dpdGNoKGUua2V5KXtjYXNlXCJBcnJvd1VwXCI6RSgoZT0+TWF0aC5tYXgoMCwoZT8/MSktMSkpKSxlLnByZXZlbnREZWZhdWx0KCk7YnJlYWs7Y2FzZVwiQXJyb3dEb3duXCI6RSgoZT0+KGU/Py0xKSsxKSksZS5wcmV2ZW50RGVmYXVsdCgpfX07cmV0dXJuKDAscS5qc3hzKShxLkZyYWdtZW50LHtjaGlsZHJlbjpbKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6JEguaGVhZGVyfSx2b2lkIDAsKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6JEgucHJvZmlsZUFuZFVwZGF0ZUJ1dHRvbkNvbnRhaW5lcn0sdm9pZCAwLGVXfHwoZVc9KDAsby5aKShlTCx7fSkpKSwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTooMCxRLlopKGEmJiRILmdob3N0T2Zmc2V0KX0sdm9pZCAwLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOiRILmdob3N0Q29udGFpbmVyfSx2b2lkIDAsKDAsby5aKShyTSx7Y2xhc3NOYW1lOiRILmdob3N0SWNvbn0pLCgwLG8uWikoYU0se2NsYXNzTmFtZTokSC5zbmFwV29yZG1hcmt9KSkpLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOiRILnJpZ2h0QnV0dG9uc1dyYXBwZXJ9LHZvaWQgMCxhPygwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOiRILmZyaWVuZFJlcXVlc3RDb250YWluZXJ9LHZvaWQgMCwoMCxvLlopKExILHtpc0ZyaWVuZFJlcXVlc3RNb2RhbE9wZW46aSxvcGVuRnJpZW5kUmVxdWVzdE1vZGFsOigpPT5yKCEwKX0pKTpudWxsLCgwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOigwLFEuWikoJEguY3JlYXRlQ29udmVyc2F0aW9uQ29udGFpbmVyLGMmJlwibmV3XCIhPT1jJiYkSC5jcmVhdGVDb252ZXJzYXRpb25Db250YWluZXJDb252ZXJzYXRpb25WaWV3KX0sdm9pZCAwLCgwLG8uWikoX0gse3RvZ2dsZUNyZWF0ZUNvbnZlcnNhdGlvbk1vZGFsOnQsaXNDcmVhdGVDb252ZXJzYXRpb25Nb2RhbE9wZW46bixjbG9zZUZyaWVuZFJlcXVlc3RNb2RhbDooKT0+cighMSksaXNGcmllbmRSZXF1ZXN0TW9kYWxPcGVuOml9KSkpKSx0V3x8KHRXPSgwLG8uWikoalAse30pKSwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTokSC5zZWFyY2hDb250YWluZXIsb25LZXlEb3duOkl9LHZvaWQgMCwoMCxxLmpzeCkoYmYse3ZhbHVlOnUsb25DaGFuZ2U6ZT0+e2YoZSksRSh2b2lkIDApfSxvbkNsZWFyOigpPT57YigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJmZWVkX3NlYXJjaF9yZXN1bHRfZXhpdGVkXCJ9KX0scmVmOnAsdGVzdElkOlwiYXBwLmZlZWQuU2VhcmNoXCIscGxhY2Vob2xkZXI6bC5mb3JtYXRNZXNzYWdlKHtpZDpcIk0xY0lwa1wiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiU2VhcmNoXCJ9XX0pLGZvY3VzSG90a2V5Ok9kLlNob3dDb252ZXJzYXRpb25Td2l0Y2hlcn0pKSwhMSwoMCxvLlopKEhELHtzZWFyY2hUZXh0OmgsZm9jdXNlZEluZGV4OnYsb25Gb2N1c2VkSW5kZXhDaGFuZ2VkOl8sb25LZXlEb3duOkl9KSwoMCxvLlopKFwiZGl2XCIse2lkOlwiY29tbWExXCIsc3R5bGU6e2Rpc3BsYXk6XCJub25lXCJ9fSx2b2lkIDAsXCIsXCIpXX0pfWZ1bmN0aW9uIGhXKCl7IWZ1bmN0aW9uKCl7Y29uc3QgZT0oMCxrLm8pKEkuZGQpLHQ9KDAsay5vKShUZS5jVSksbj0oMCxkLnVzZUNhbGxiYWNrKSgobj0+e2UmJnQobil9KSxbZSx0XSk7KDAsZC51c2VFZmZlY3QpKCgoKT0+e24oXCJwYWdlX2xvYWRcIik7Y29uc3QgZT0oKT0+bihcIm9ubGluZVwiKTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIixlKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwib25saW5lXCIsZSl9fSksW25dKSxJbCgoMCxkLnVzZUNhbGxiYWNrKSgoKCk9Pm4oXCJmb3JlZ3JvdW5kXCIpKSxbbl0pKX0oKSx3bCgpLERsKCksamwoKSxmdW5jdGlvbigpe2NvbnN0W2UsdF09KDAsay5vKSh6Ty51Nyk7KDAsZC51c2VFZmZlY3QpKCgoKT0+KGUoKSx0KSksW2UsdF0pfSgpLGZ1bmN0aW9uKCl7Y29uc3QgZT0oMCxkLnVzZUNhbGxiYWNrKSgoKCk9PnsoYXN5bmMoKT0+e3RyeXtjb25zdCBlPWF3YWl0IGFzeW5jIGZ1bmN0aW9uKCl7Y29uc3QgZT1uZXcgUmVxdWVzdChSTyx7bWV0aG9kOlwiUE9TVFwifSk7cmV0dXJuKDAsQU8ubikoZSl9KCk7ZS5va3x8KGUuc3RhdHVzLGUuc3RhdHVzVGV4dCl9Y2F0Y2goZSl7fX0pKCl9KSxbXSk7aWUoe29uUmVmcmVzaDplLGltbWVkaWF0ZTohMCxpbnRlcnZhbE1zOmtPK01hdGgucm91bmQoTWF0aC5yYW5kb20oKSpPTyoyLU9PKX0pfSgpLGZ1bmN0aW9uKCl7Y29uc3QgZT1bLi4uKDAsay5vKSgoZT0+ZS50YWxrLnNlc3Npb25zKSkudmFsdWVzKCldLm1hcCgoZT0+ZS5zZXNzaW9uLmdldExvY2FsU3RhdGUoKS5jYWxsaW5nU3RhdGUpKS5maWx0ZXIoKGU9PmUhPT1ldS5VcS5OT05FKSkubGVuZ3RoPjAse2Rpc3Bvc2VBdWRpbzp0LGVuc3VyZUF1ZGlvRm9yQ2FsbDpufT0oMCxrLm8pKChlPT5lLm1lZGlhLmxvY2FsKSk7KDAsZC51c2VFZmZlY3QpKCgoKT0+dCksW3RdKSwoMCxkLnVzZUVmZmVjdCkoKCgpPT57ZT9uKCk6dCgpfSksW2UsdCxuXSl9KCksKDAsZC51c2VFZmZlY3QpKCgoKT0+e1wic2VydmljZVdvcmtlclwiaW4gbmF2aWdhdG9yJiZhc3luYyBmdW5jdGlvbigpe2NvbnN0IGU9YXdhaXQgYXN5bmMgZnVuY3Rpb24oKXtjb25zdCBlPShhd2FpdCBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWFkeSkuYWN0aXZlO2lmKCFlKXRocm93IEVycm9yKFwiTm8gYWN0aXZlIHNlcnZpY2Ugd29ya2VyXCIpO3JldHVybiBlfSgpO25hdmlnYXRvci5zZXJ2aWNlV29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsd08pLGUucG9zdE1lc3NhZ2Uoe3R5cGU6XCJQRU5ESU5HX0NBTExTX1JFUVVFU1RcIn0pfSgpLmNhdGNoKChlPT57fSkpfSksW10pLF9lKFwiaG9tZV9wYWdlXCIse3Nob3VsZFRyYWNrSW5pdGlhbFJlbmRlclRpbWU6ITB9KSxmdW5jdGlvbigpe2NvbnN0IGU9KDAsTy5ycCkoQS5KcCksdD0oMCxrLm8pKFIuUGspOygwLGQudXNlRWZmZWN0KSgoKCk9PntpZihlKXtjb25zdCBlPWU9PkJvb2xlYW4oZSksbj13aW5kb3cuc2V0SW50ZXJ2YWwoKCgpPT57Y29uc3Qgbj10LmZpbHRlcihlKSxyPW5ldyBTZXQobi5tYXAoKGU9PmUuaWQpKSksaT1bLi4ub3UuUVIudmFsdWVzKCldLmZpbHRlcigoZT0+IXIuaGFzKGUuaWQpKSk7Zm9yKGNvbnN0IGUgb2YgaSkoMCxvdS5kSykoZS5pZCl9KSw1ZTMpO3JldHVybigpPT5jbGVhckludGVydmFsKG4pfX0pLFt0LGVdKX0oKSxmdW5jdGlvbigpe2NvbnN0IGU9KDAsZy5USCkoKSx0PSgwLGsubykoTS52aiksbj0oMCxrLm8pKHcuX3UpOygwLGQudXNlRWZmZWN0KSgoKCk9Pnt9KSxbdCxlLnBhdGhuYW1lLG4uc2l6ZV0pfSgpO2NvbnN0IGU9KDAsay5vKShUZS5zYyksdD0oMCxrLm8pKFRlLlpEKSxuPSgwLGsubykoVGUuJE4pLHI9KDAsZy5USCkoKSxpPSgwLEZsLnMpKHIucGF0aG5hbWUpLGE9dm9pZCAwIT09aTsoMCxkLnVzZUVmZmVjdCkoKCgpPT57bigpfSksW25dKSwoMCxkLnVzZUVmZmVjdCkoKCgpPT57YT90fHxlKFwiREVFUExJTktcIik6ZSgpfSksW2EsZSx0XSk7Y29uc3Qgcz0oMCxrLm8pKFRlLlRlKSx7b25nb2luZ0NhbGxDb252ZXJzYXRpb25JZDpjLGluY29taW5nQ2FsbENvbnZlcnNhdGlvbklkOmx9PW11KCksdT1ndShsKSxmPSgwLGsubykoSS5nbiksW3AsbV09KDAsay5vKSh6Ty5NcSksaD1mJiZcImRlZmF1bHRcIj09PU5vdGlmaWNhdGlvbi5wZXJtaXNzaW9uJiZwPT09UU8uby5TaG91bGRSZXF1ZXN0JiYoMCxOLmMzKSgpIT09Ti5NWC5TQUZBUkk7KDAsZC51c2VFZmZlY3QpKCgoKT0+e2YmJlwiZGVmYXVsdFwiIT09Tm90aWZpY2F0aW9uLnBlcm1pc3Npb24mJigwLENPLnIpKFFPLm8uUmVxdWVzdEluQmFja2dyb3VuZCl9KSxbZl0pO2NvbnN0W3YseV09KDAsZC51c2VTdGF0ZSkoKTsoMCxkLnVzZUVmZmVjdCkoKCgpPT57Y29uc3QgZT1sJiYoMCx6Lk1jKShsKSx0PWMmJigwLHouTWMpKGMpO2V8fHR8fCF2P2UmJnU9PT1ldS5VcS5SSU5HSU5HP3koZSk6dCYmdD09PXYmJnkodm9pZCAwKTooYigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJjYWxsaW5nLm1pc3NlZF9jYWxsXCJ9KSx5KHZvaWQgMCkpfSksW2wsdSxjLHZdKTtjb25zdHtpc0xpZ2h0Qm94VjJPcGVuOkV9PWZ1bmN0aW9uKCl7Y29uc3R7bW9kZTplfT10aCgpO3JldHVybntpc0xpZ2h0Qm94VjJPcGVuOmUhPT1laC5vLkNsb3NlZH19KCksXz0oMCxPLnJwKShBLnlmKSYmITEsUz12b2lkIDAhPT1jLFQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybltlLHQsbl0uZmlsdGVyKEJvb2xlYW4pLmxlbmd0aD4xP1wibWFpbkFuZFNlY29uZGFyeVwiOmU/XCJqdXN0U2Vjb25kYXJ5XCI6XCJqdXN0TWFpblwifShTLF8mJkUsQm9vbGVhbihhKSksQz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ/ZT9cIm1haW5cIjpuP1wic2Vjb25kYXJ5XCI6XCJtYWluXCI6XCJub25lXCJ9KFMsXyYmRSxCb29sZWFuKGEpKSxEPV8mJkV8fFM7IWZ1bmN0aW9uKGUpe2NvbnN0IHQ9Z3UoZSksbj12dS5pbmNsdWRlcyh0KTtwdShuKSwoMCxkLnVzZUVmZmVjdCkoKCgpPT4obiYmd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ1bmxvYWRcIixpdS5jXyksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInVubG9hZFwiLGl1LmNfKX0pKSxbbl0pfShjKTtjb25zdCBQPVZsKGMpLEw9UCYmaSYmYyYmaT09PWMsVT1SRCgkSC5jb21wYWN0Q29udGVudE1lZGlhUXVlcnkpLFt4LEZdPSgwLGQudXNlU3RhdGUpKCExKSxCPSgpPT57eD9iKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcImZlZWRfY2xvc2VfY3JlYXRlX2NvbnZlcnNhdGlvbl9tb2RhbFwifSk6KGIoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwiZmVlZC5vcGVuX2NyZWF0ZV9jb252ZXJzYXRpb25fbW9kYWxcIn0pLGIoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwiZmVlZF9vcGVuX2NyZWF0ZV9jb252ZXJzYXRpb25fbW9kYWxcIn0pKSx4fHxzKCksRigheCl9LFtWLEddPSgwLGQudXNlU3RhdGUpKCExKSxIPSgwLE8uVjIpKCksVz0oMCxrLm8pKFdPKSYmITEsW2osWl09KDAsZC51c2VTdGF0ZSkoITEpO0dJKE9kLlNob3dIb3RrZXlzSGVscCwoMCxkLnVzZUNhbGxiYWNrKSgoKCk9PlooKGU9PiFlKSkpLFtdKSx7ZW5hYmxlT25Db250ZW50RWRpdGFibGU6ITAsZW5hYmxlT25Gb3JtVGFnczpbXCJJTlBVVFwiLFwiVEVYVEFSRUFcIixcIlNFTEVDVFwiXX0pO2NvbnN0e3Nob3dUb2FzdDpLLGFjdGl2ZVRvYXN0czpZLGhpZGVUb2FzdDpxfT1KZCgpOygwLGQudXNlRWZmZWN0KSgoKCk9Pnt9KSxbSyxxLCExXSk7Y29uc3R7Y2xvc2VMaWdodGJveDpYfT1uZCgpOygwLGQudXNlRWZmZWN0KSgoKCk9PntYKCl9KSxbaV0pO2NvbnN0W0pdPUdPKCksJD0oMCxPLnJwKShBLnNPKTtyZXR1cm4gZnVuY3Rpb24oKXtjb25zdHtvbmdvaW5nQ2FsbENvbnZlcnNhdGlvbklkOmUsaW5jb21pbmdDYWxsQ29udmVyc2F0aW9uSWQ6dH09bXUoKSxuPSgwLGsubykoKDAsdy5mcSkoZSkpLFtyLGldPSgwLGQudXNlU3RhdGUpKHZvaWQgMCE9PXQpOygwLGQudXNlRWZmZWN0KSgoKCk9PigpPT5pKEJvb2xlYW4odCkpKSxbdF0pLCgwLGQudXNlRWZmZWN0KSgoKCk9Pntjb25zdCBvPXImJiF0O2UmJigwLHJ1Lld2KShuKSYmbyYmKCgwLGl1Lmc3KShlLCExKSwoMCxpdS5nNykoZSwhMCksaSghMSkpfSksW2Uscix0LG5dKX0oKSwkfHxKP25XfHwoblc9KDAsby5aKShsTCx7fSkpOigwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOigwLFEuWikoJEguYXBwTGF5b3V0LHA9PT1RTy5vLlJlcXVlc3RpbmcmJiRILmRlZW1waGFzaXplZCl9LHZvaWQgMCxoPygwLG8uWikoUm0se30sdm9pZCAwLCgwLG8uWikoa3gse29uQ2xpY2tDb25maXJtOigpPT57KDAsQ08ucikoUU8uby5SZXF1ZXN0aW5nKX0sb25DbGlja091dHNpZGU6KCk9PnttKFFPLm8uUGVybWlzc2lvbklzU2V0KX19KSk6bnVsbCxyV3x8KHJXPSgwLG8uWikoeXgse30pKSwoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTooMCxRLlopKCRILnNpZGViYXIpfSx2b2lkIDAsKDAsby5aKShnLlo1LHtsb2NhdGlvbjpyfSx2b2lkIDAsKDAsby5aKShnLkFXLHtwYXRoOnhsLlNTLGVsZW1lbnQ6KDAsby5aKShtVyx7dG9nZ2xlQ3JlYXRlQ29udmVyc2F0aW9uTW9kYWw6Qixpc0NyZWF0ZUNvbnZlcnNhdGlvbk1vZGFsT3Blbjp4LGlzRnJpZW5kUmVxdWVzdE1vZGFsT3BlbjpWLHRvZ2dsZUZyaWVuZFJlcXVlc3RNb2RhbDpHfSl9KSwoMCxvLlopKGcuQVcse3BhdGg6XCIqXCIsZWxlbWVudDooMCxvLlopKG1XLHt0b2dnbGVDcmVhdGVDb252ZXJzYXRpb25Nb2RhbDpCLGlzQ3JlYXRlQ29udmVyc2F0aW9uTW9kYWxPcGVuOngsaXNGcmllbmRSZXF1ZXN0TW9kYWxPcGVuOlYsdG9nZ2xlRnJpZW5kUmVxdWVzdE1vZGFsOkd9KX0pKSksKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6KDAsUS5aKSgkSC5jb250ZW50Q29udGFpbmVyLEw/JEguaGVhZGVyQW5kQ29udGVudDokSC5qdXN0Q29udGVudCl9LHZvaWQgMCwhMSxQJiYoMCxvLlopKFZPLHtjb252ZXJzYXRpb246UCxoaWRlSGVhZGVyOiFMfSksKDAsby5aKSh4cy5kaXYse2NsYXNzTmFtZTokSC5jb250ZW50LHZhcmlhbnRzOlU/ZFc6cFcsYW5pbWF0ZTpULHRyYW5zaXRpb246e2Vhc2U6XCJlYXNlT3V0XCIsZHVyYXRpb246LjMsd2hlbjpcImJlZm9yZUNoaWxkcmVuXCIsZ2FwOntkdXJhdGlvbjowfSxbVT9cImdyaWRUZW1wbGF0ZUNvbHVtbnNcIjpcImdyaWRUZW1wbGF0ZVJvd3NcIl06e2R1cmF0aW9uOjB9fSxpbml0aWFsOiExfSx2b2lkIDAsXCJtYWluXCIhPT1DJiYoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTokSC5tYWlufSx2b2lkIDAsKDAsby5aKShmZCx7bW9kZTpcIndhaXRcIixpbml0aWFsOiExfSx2b2lkIDAsKDAsby5aKShnLlo1LHtsb2NhdGlvbjpyfSxyLnBhdGhuYW1lLCgwLG8uWikoZy5BVyx7cGF0aDp4bC5TUyxlbGVtZW50OmEmJigwLG8uWikoSk8se2NvbnZlcnNhdGlvbklkOmksaGlkZUhlYWRlcjpCb29sZWFuKEwpfSl9KSwoMCxvLlopKGcuQVcse3BhdGg6eGwuclosZWxlbWVudDpEP3ZvaWQgMDppV3x8KGlXPSgwLG8uWikoY1Yse30pKX0pLCgwLG8uWikoZy5BVyx7aW5kZXg6ITAsZWxlbWVudDpEP3ZvaWQgMDpvV3x8KG9XPSgwLG8uWikoY1Yse30pKX0pLGFXfHwoYVc9KDAsby5aKShnLkFXLHtwYXRoOlwiKlwiLGVsZW1lbnQ6KDAsby5aKShnLkZnLHt0bzpcIi9cIixyZXBsYWNlOiEwfSl9KSkpKSksYyYmKDAsby5aKShcImRpdlwiLHtjbGFzc05hbWU6JEgub3V0Z29pbmdDYWxsfSwoMCx6Lk1jKShjKSwoMCxvLlopKHNILHtjb252ZXJzYXRpb25JZDpjLGhpZGVIZWFkZXI6Qm9vbGVhbihMKX0pKSxsJiYoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTokSC5jYWxsVmlld0Zsb2F0aW5nLG9uQ2xpY2s6KCk9Pnt5KHZvaWQgMCl9fSwoMCx6Lk1jKShsKSwoMCxvLlopKHNILHtjb252ZXJzYXRpb25JZDpsfSkpLFYmJigwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOiRILmNyZWF0ZUNvbnZlcnNhdGlvbk1vZGFsRmxvYXRpbmd9LHZvaWQgMCwoMCxvLlopKFFILHtzZXRJc09wZW46KCk9PkcoITEpfSkpLHgmJigwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOiRILmNyZWF0ZUNvbnZlcnNhdGlvbk1vZGFsRmxvYXRpbmd9LHZvaWQgMCwoMCxvLlopKERILHtpc09wZW46eCxzZXRJc09wZW46Rn0pKSxfJiZFJiYoMCxvLlopKFwiZGl2XCIse2NsYXNzTmFtZTooMCxRLlopKCRILmxpZ2h0Ym94VjJDb250YWluZXIse21haW46JEgubGlnaHRib3hWMkluTWFpbixzZWNvbmRhcnk6JEgubGlnaHRib3hWMkluU2Vjb25kYXJ5fVtDXSl9LHZvaWQgMCxzV3x8KHNXPSgwLG8uWikoa1Yse30pKSkpKSxIJiYoY1d8fChjVz0oMCxvLlopKGZILHt9KSkpLFcmJihsV3x8KGxXPSgwLG8uWikoTVYse30pKSksaiYmKDAsby5aKSgkUCx7Y2xvc2U6KCk9PlooITEpfSksITEsITEpfWZ1bmN0aW9uIHZXKCl7Y29uc3RbZV09KDAsbWQuVkMpKCk7cmV0dXJuKDAsZC51c2VFZmZlY3QpKCgoKT0+e2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJ0aGVtZVwiLGUpLGZ1bmN0aW9uKCl7Y29uc3QgZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWU9XCJ0aGVtZS1jb2xvclwiXScpO2UmJmUuc2V0QXR0cmlidXRlKFwiY29udGVudFwiLGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1zaWdCYWNrZ3JvdW5kUHJpbWFyeVwiKSl9KCl9KSxbZV0pLG51bGx9Y29uc3QgZ1c9e2xvYWRpbmdTcGlubmVyV3JhcHBlcjpcImFDUHdtXCJ9O2Z1bmN0aW9uIHlXKCl7Y29uc3QgZT0oMCxnLnMwKSgpLHQ9KDAsay5vKShUZS5zYyk7cmV0dXJuKDAsZC51c2VFZmZlY3QpKCgoKT0+e2Z1bmN0aW9uIG4obil7bGV0e2RhdGE6cn09bjsoMCxOTy5CRikocikmJigoMCx6LiRwKShyKSxyLmFuYWx5dGljc0RhdGEmJigwLHprLlpfKSh7bm90aWZpY2F0aW9uVHlwZTpyLmFuYWx5dGljc0RhdGEubm90aWZpY2F0aW9uVHlwZSxub3RpZmljYXRpb25JZDpyLmFuYWx5dGljc0RhdGEubm90aWZpY2F0aW9uSWR9KSx0KFwiTk9USUZJQ0FUSU9OXCIpLGUoKDAseGwuVjEpKHIuY29udmVyc2F0aW9uSWQpKSl9cmV0dXJuIG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsbiksKCk9Pm5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsbil9KSxbZSx0XSksbnVsbH12YXIgRVcsX1csSVcsU1csYlcsVFcsQ1csQVcsUlcsa1csT1csTlc7Y29uc3Qgd1c9ZT0+e2xldHtlcnJvcjp0fT1lO3JldHVybigwLG8uWikoeGsse2Vycm9yRGV0YWlsczp0Lm1lc3NhZ2UsZGVzY3JpcHRpb246KDAsby5aKSh2Llose2lkOlwiNzFvUmo5XCIsZGVmYXVsdE1lc3NhZ2U6W3t0eXBlOjAsdmFsdWU6XCJSZWxvYWQgdGhlIHBhZ2Ugb3IgdmlzaXQgXCJ9LHt0eXBlOjgsdmFsdWU6XCJhXCIsY2hpbGRyZW46W3t0eXBlOjAsdmFsdWU6XCJ3d3cuc25hcGNoYXQuY29tL3N1cHBvcnRcIn1dfSx7dHlwZTowLHZhbHVlOlwiIGZvciBoZWxwLlwifV0sdmFsdWVzOnthOmU9PigwLG8uWikoXCJhXCIse3RhcmdldDpcIl9ibGFua1wiLGhyZWY6XCJodHRwczovL3d3dy5zbmFwY2hhdC5jb20vc3VwcG9ydFwifSx2b2lkIDAsZSl9fSl9KX07ZnVuY3Rpb24gRFcoKXtyZXR1cm4oMCxvLlopKG0se2ZhbGxiYWNrOndXfSx2b2lkIDAsRVd8fChFVz0oMCxvLlopKHZXLHt9KSksKDAsby5aKShfZC5zNCx7fSx2b2lkIDAsKDAsby5aKShtLHtmYWxsYmFjazp3V30sdm9pZCAwLCgwLG8uWikoRSx7YmFzZW5hbWU6Xy5GfSx2b2lkIDAsKDAsby5aKShnLlo1LHt9LHZvaWQgMCxfV3x8KF9XPSgwLG8uWikoZy5BVyx7cGF0aDpcImNvbWluZy1zb29uXCIsZWxlbWVudDooMCxvLlopKGcuRmcse3RvOlwiL1wiLHJlcGxhY2U6ITB9KX0pKSwoMCxvLlopKGcuQVcse3BhdGg6XCIqXCIsZWxlbWVudDooMCxxLmpzeHMpKHEuRnJhZ21lbnQse2NoaWxkcmVuOltJV3x8KElXPSgwLG8uWikoZmUse30pKSwoMCxvLlopKGQuU3VzcGVuc2Use2ZhbGxiYWNrOigwLG8uWikoXCJkaXZcIix7Y2xhc3NOYW1lOmdXLmxvYWRpbmdTcGlubmVyV3JhcHBlcn0sdm9pZCAwLFNXfHwoU1c9KDAsby5aKShsaCx7fSkpKX0sdm9pZCAwLGJXfHwoYlc9KDAsby5aKShxayx7fSkpLFRXfHwoVFc9KDAsby5aKShHLHt9KSksKDAsby5aKShUTyx7fSx2b2lkIDAsQ1d8fChDVz0oMCxvLlopKGxlLHt9LHZvaWQgMCwoMCxvLlopKFkse30pKSksQVd8fChBVz0oMCxvLlopKFgse30sdm9pZCAwLCgwLG8uWikoSCx7fSksKDAsby5aKShXLHt9KSkpLFJXfHwoUlc9KDAsby5aKShGLHt9KSksKDAsby5aKShNVyx7fSx2b2lkIDAsa1d8fChrVz0oMCxvLlopKExXLHt9KSksT1d8fChPVz0oMCxvLlopKGQuU3RyaWN0TW9kZSx7fSx2b2lkIDAsKDAsby5aKShXayx7fSksKDAsby5aKSh5Vyx7fSksKDAsby5aKShoVyx7fSkpKSkpLE5XfHwoTlc9KDAsby5aKShlZSx7fSkpKV19KX0pKSkpKSl9Y29uc3QgUFc9ZT0+Qm9vbGVhbigoMCxJLmlEKShlKSYmZS5tZXNzYWdpbmcuY2xpZW50JiZlLnRhbGsuY2xpZW50KTtmdW5jdGlvbiBNVyhlKXtsZXR7Y2hpbGRyZW46dH09ZTtyZXR1cm4oMCxrLm8pKFBXKT8oMCxxLmpzeCkocS5GcmFnbWVudCx7Y2hpbGRyZW46dH0pOm51bGx9ZnVuY3Rpb24gTFcoKXtyZXR1cm4oMCxoLnVzZVBhZ2VMb2FkTWV0cmljcykoXCJob21lXCIsXCJkd2ViXCIpLG51bGx9fSw3MzY4MTooZSx0LG4pPT57bi5hKGUsKGFzeW5jKGUsdCk9Pnt0cnl7dmFyIHI9big5MzY1MCksaT0obig4OTYzNyksbig3MTM3MSkpLG89big5MTEzMiksYT1uKDQ1MzYzKSxzPW4ubihhKSxjPW4oOTc3ODIpLGw9bi5uKGMpLHU9KG4oNjcyOTQpLG4oMjA3NDUpKSxkPW4oOTE5MSksZj1uKDY2ODEzKSxwPW4oNjg3NDIpLG09big4OTYxMyksaD1uKDcyNzQ5KSx2PW4oMjYxMzApLGc9big2Mjk3OSkseT1uKDYzOTgpLEU9big4Njk1MyksXz1uKDU1MTUxKSxJPW4oODc3MzIpLFM9bigyMDEwMyksYj1uKDUxNzIwKSxUPW4oNDM5ODApO2woKS5nZXRMb2dnZXIoXCJpbmRleFwiKSwoMCxtLnBjKSgpO2NvbnN0IGU9KDAscC5ENCkoKTsoMCxwLkJVKShcImJ1bmRsZVwiKSxjb25zb2xlLmxvZyhgJHsoMCx2LnFvKSgpfSAobG9hZGVkOiAke2V9KWApLCgwLGYuaikoITAsW25ldyBfLmpLLmdFLEkubV0pLCgwLGkuWUEpKFwibG9hZC5pZFwiLGUpO2NvbnN0IEM9KDAsby5nZXRMb2NhbGUpKCk7KDAsaS5ZQSkoXCJsb2NhbGVcIixDKSwoMCxpLllBKShcInB3YVwiLCgwLHYuTnUpKCkpLCgwLGIuZWopKFwic2MtZHdlYi1hbGxvY2F0aW9uXCIpfHwoMCxiLmQ4KShcInNjLWR3ZWItYWxsb2NhdGlvblwiLFN0cmluZyhNYXRoLmZsb29yKDEwMCpNYXRoLnJhbmRvbSgpKzEpKSx7bWF4QWdlSW5TZWM6MzE1MzZlM30pLHMoKS5pbml0aWFsaXplKGQuTEkpLHMoKS5zZW5kSGVhcnRCZWF0Q291bnRlcihcIjRlZjFmNWQ3XCIpO2xldCBBPVwibm9fcmVmZXJyZXJcIjtpZihkb2N1bWVudC5yZWZlcnJlcil0cnl7aWYoKDAsdi5xRikoKSlBPVwibWljcm9zb2Z0X3N0b3JlXCI7ZWxzZSBpZigoMCx2LnpVKSgpKUE9XCJjaHJvbWVfc3RvcmVcIjtlbHNle2NvbnN0IGU9bmV3IFVSTChkb2N1bWVudC5yZWZlcnJlcik7QT0oMCxTLmQpKGUuaG9zdG5hbWUpfX1jYXRjaHt9ZWxzZXtjb25zdCBlPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpLnNlYXJjaFBhcmFtcy5nZXQoXCJyZWZcIik7ZSYmKEE9KDAsUy5kKShgcmVmX3RhZzoke2V9YCkpfXMoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwicGFnZV9sb2FkXCIsZGltZW5zaW9uczp7cmVmZXJyZXI6QSxpc19wd2E6U3RyaW5nKCgwLHYuTnUpKCkpLGlzX2ZpcnN0X3RpbWVfbG9hZDpTdHJpbmcocC5XSC5idW5kbGUpfX0pLCgwLHkuJEopKCksIXAuV0guYnVuZGxlJiZwLldILnNlcnZpY2VXb3JrZXImJnMoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwic3dfZmFpbGVkX3RvX2FjdGl2YXRlX2luX2ZpcnN0X3BhZ2VfbG9hZFwifSksKDAsRS5VVCkoKTtjb25zdCBSPSgwLFQuWTApKEMpO3RyeXthd2FpdCgwLGguVnopKFIpfWNhdGNoKGUpe3MoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwicG9seWZpbGxfZmFpbGVkXCIsZGltZW5zaW9uczp7bG9jYWxlOlJ9fSl9Y29uc29sZS5sb2c9KCk9Pnt9LGNvbnNvbGUuZGVidWc9KCk9Pnt9LGNvbnNvbGUuaW5mbz0oKT0+e30sY29uc29sZS53YXJuPSgpPT57fSxjb25zb2xlLmVycm9yPSgpPT57fSx1LmNyZWF0ZVJvb3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyb290XCIpKS5yZW5kZXIoKDAsci5aKShnLlose30pKSx0KCl9Y2F0Y2goZSl7dChlKX19KSwxKX0sNjU5NDk6ZT0+e2UuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiBudWxsfX0sNTAyMzE6KGUsdCxuKT0+e2Z1bmN0aW9uIHIoZSl7cmV0dXJuXCJGT0NVU19DT05WRVJTQVRJT05cIj09PWUudHlwZX1mdW5jdGlvbiBpKGUpe3JldHVyblwiUFVTSF9OT1RJRklDQVRJT05cIj09PWUudHlwZX1mdW5jdGlvbiBvKGUpe3JldHVyblwiUEVORElOR19DQUxMU19SRVNQT05TRVwiPT09ZS50eXBlfWZ1bmN0aW9uIGEoZSl7cmV0dXJuXCJMT0dfUVVFUllfUkVTUE9OU0VcIj09PWUudHlwZX1uLmQodCx7QkY6KCk9PnIsWlk6KCk9Pm8sZmg6KCk9PmkseU06KCk9PmF9KX0sNjM5ODooZSx0LG4pPT57bi5kKHQse00xOigpPT5ULEtaOigpPT5TLCRKOigpPT5DLE5nOigpPT5ifSk7dmFyIHI9big0NTM2MyksaT1uLm4ociksbz1uKDk3NzgyKSxhPW4ubihvKSxzPW4oNDU1OTIpLGM9big2ODc0MiksbD1uKDY5NzI5KTt0cnl7c2VsZltcIndvcmtib3g6d2luZG93OjYuNS4zXCJdJiZfKCl9Y2F0Y2godSl7fWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4pe3ZhciByPW5ldyBNZXNzYWdlQ2hhbm5lbDtyLnBvcnQxLm9ubWVzc2FnZT1mdW5jdGlvbihlKXtuKGUuZGF0YSl9LGUucG9zdE1lc3NhZ2UodCxbci5wb3J0Ml0pfSkpfWZ1bmN0aW9uIGQoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheSh0KTtuPHQ7bisrKXJbbl09ZVtuXTtyZXR1cm4gcn1mdW5jdGlvbiBmKGUsdCl7dmFyIG47aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIFN5bWJvbHx8bnVsbD09ZVtTeW1ib2wuaXRlcmF0b3JdKXtpZihBcnJheS5pc0FycmF5KGUpfHwobj1mdW5jdGlvbihlLHQpe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBkKGUsdCk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVyblwiT2JqZWN0XCI9PT1uJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT1ufHxcIlNldFwiPT09bj9BcnJheS5mcm9tKGUpOlwiQXJndW1lbnRzXCI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT9kKGUsdCk6dm9pZCAwfX0oZSkpfHx0JiZlJiZcIm51bWJlclwiPT10eXBlb2YgZS5sZW5ndGgpe24mJihlPW4pO3ZhciByPTA7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHI+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW3IrK119fX10aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9cmV0dXJuKG49ZVtTeW1ib2wuaXRlcmF0b3JdKCkpLm5leHQuYmluZChuKX10cnl7c2VsZltcIndvcmtib3g6Y29yZTo2LjUuM1wiXSYmXygpfWNhdGNoKHUpe312YXIgcD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKChmdW5jdGlvbih0LG4pe2UucmVzb2x2ZT10LGUucmVqZWN0PW59KSl9O2Z1bmN0aW9uIG0oZSx0KXt2YXIgbj1sb2NhdGlvbi5ocmVmO3JldHVybiBuZXcgVVJMKGUsbikuaHJlZj09PW5ldyBVUkwodCxuKS5ocmVmfXZhciBoPWZ1bmN0aW9uKGUsdCl7dGhpcy50eXBlPWUsT2JqZWN0LmFzc2lnbih0aGlzLHQpfTtmdW5jdGlvbiB2KGUsdCxuKXtyZXR1cm4gbj90P3QoZSk6ZTooZSYmZS50aGVufHwoZT1Qcm9taXNlLnJlc29sdmUoZSkpLHQ/ZS50aGVuKHQpOmUpfWZ1bmN0aW9uIGcoKXt9dmFyIHk9e3R5cGU6XCJTS0lQX1dBSVRJTkdcIn07ZnVuY3Rpb24gRShlLHQpe2lmKCF0KXJldHVybiBlJiZlLnRoZW4/ZS50aGVuKGcpOlByb21pc2UucmVzb2x2ZSgpfXZhciBJPWZ1bmN0aW9uKGUpe3ZhciB0LG47ZnVuY3Rpb24gcih0LG4pe3ZhciByLGk7cmV0dXJuIHZvaWQgMD09PW4mJihuPXt9KSwocj1lLmNhbGwodGhpcyl8fHRoaXMpLm5uPXt9LHIudG49MCxyLnJuPW5ldyBwLHIuZW49bmV3IHAsci5vbj1uZXcgcCxyLnVuPTAsci5hbj1uZXcgU2V0LHIuY249ZnVuY3Rpb24oKXt2YXIgZT1yLmZuLHQ9ZS5pbnN0YWxsaW5nO3IudG4+MHx8IW0odC5zY3JpcHRVUkwsci5zbi50b1N0cmluZygpKXx8cGVyZm9ybWFuY2Uubm93KCk+ci51bis2ZTQ/KHIudm49dCxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ1cGRhdGVmb3VuZFwiLHIuY24pKTooci5obj10LHIuYW4uYWRkKHQpLHIucm4ucmVzb2x2ZSh0KSksKytyLnRuLHQuYWRkRXZlbnRMaXN0ZW5lcihcInN0YXRlY2hhbmdlXCIsci5sbil9LHIubG49ZnVuY3Rpb24oZSl7dmFyIHQ9ci5mbixuPWUudGFyZ2V0LGk9bi5zdGF0ZSxvPW49PT1yLnZuLGE9e3N3Om4saXNFeHRlcm5hbDpvLG9yaWdpbmFsRXZlbnQ6ZX07IW8mJnIubW4mJihhLmlzVXBkYXRlPSEwKSxyLmRpc3BhdGNoRXZlbnQobmV3IGgoaSxhKSksXCJpbnN0YWxsZWRcIj09PWk/ci53bj1zZWxmLnNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7XCJpbnN0YWxsZWRcIj09PWkmJnQud2FpdGluZz09PW4mJnIuZGlzcGF0Y2hFdmVudChuZXcgaChcIndhaXRpbmdcIixhKSl9KSwyMDApOlwiYWN0aXZhdGluZ1wiPT09aSYmKGNsZWFyVGltZW91dChyLnduKSxvfHxyLmVuLnJlc29sdmUobikpfSxyLmRuPWZ1bmN0aW9uKGUpe3ZhciB0PXIuaG4sbj10IT09bmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIuY29udHJvbGxlcjtyLmRpc3BhdGNoRXZlbnQobmV3IGgoXCJjb250cm9sbGluZ1wiLHtpc0V4dGVybmFsOm4sb3JpZ2luYWxFdmVudDplLHN3OnQsaXNVcGRhdGU6ci5tbn0pKSxufHxyLm9uLnJlc29sdmUodCl9LHIuZ249KGk9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kYXRhLG49ZS5wb3J0cyxpPWUuc291cmNlO3JldHVybiB2KHIuZ2V0U1coKSwoZnVuY3Rpb24oKXtyLmFuLmhhcyhpKSYmci5kaXNwYXRjaEV2ZW50KG5ldyBoKFwibWVzc2FnZVwiLHtkYXRhOnQsb3JpZ2luYWxFdmVudDplLHBvcnRzOm4sc3c6aX0pKX0pKX0sZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07dHJ5e3JldHVybiBQcm9taXNlLnJlc29sdmUoaS5hcHBseSh0aGlzLGUpKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9fSksci5zbj10LHIubm49bixuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLHIuZ24pLHJ9bj1lLCh0PXIpLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKSx0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10LHQuX19wcm90b19fPW47dmFyIGksbz1yLnByb3RvdHlwZTtyZXR1cm4gby5yZWdpc3Rlcj1mdW5jdGlvbihlKXt2YXIgdD0odm9pZCAwPT09ZT97fTplKS5pbW1lZGlhdGUsbj12b2lkIDAhPT10JiZ0O3RyeXt2YXIgcj10aGlzO3JldHVybiBmdW5jdGlvbihlLHQpe3ZhciBuPWUoKTtyZXR1cm4gbiYmbi50aGVuP24udGhlbih0KTp0KCl9KChmdW5jdGlvbigpe2lmKCFuJiZcImNvbXBsZXRlXCIhPT1kb2N1bWVudC5yZWFkeVN0YXRlKXJldHVybiBFKG5ldyBQcm9taXNlKChmdW5jdGlvbihlKXtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsZSl9KSkpfSksKGZ1bmN0aW9uKCl7cmV0dXJuIHIubW49Qm9vbGVhbihuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5jb250cm9sbGVyKSxyLnluPXIucG4oKSx2KHIuYm4oKSwoZnVuY3Rpb24oZSl7ci5mbj1lLHIueW4mJihyLmhuPXIueW4sci5lbi5yZXNvbHZlKHIueW4pLHIub24ucmVzb2x2ZShyLnluKSxyLnluLmFkZEV2ZW50TGlzdGVuZXIoXCJzdGF0ZWNoYW5nZVwiLHIubG4se29uY2U6ITB9KSk7dmFyIHQ9ci5mbi53YWl0aW5nO3JldHVybiB0JiZtKHQuc2NyaXB0VVJMLHIuc24udG9TdHJpbmcoKSkmJihyLmhuPXQsUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoZnVuY3Rpb24oKXtyLmRpc3BhdGNoRXZlbnQobmV3IGgoXCJ3YWl0aW5nXCIse3N3OnQsd2FzV2FpdGluZ0JlZm9yZVJlZ2lzdGVyOiEwfSkpfSkpLnRoZW4oKGZ1bmN0aW9uKCl7fSkpKSxyLmhuJiYoci5ybi5yZXNvbHZlKHIuaG4pLHIuYW4uYWRkKHIuaG4pKSxyLmZuLmFkZEV2ZW50TGlzdGVuZXIoXCJ1cGRhdGVmb3VuZFwiLHIuY24pLG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJjb250cm9sbGVyY2hhbmdlXCIsci5kbiksci5mbn0pKX0pKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9fSxvLnVwZGF0ZT1mdW5jdGlvbigpe3RyeXtyZXR1cm4gdGhpcy5mbj9FKHRoaXMuZm4udXBkYXRlKCkpOnZvaWQgMH1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9fSxvLmdldFNXPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuaG4/UHJvbWlzZS5yZXNvbHZlKHRoaXMuaG4pOnRoaXMucm4ucHJvbWlzZX0sby5tZXNzYWdlU1c9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiB2KHRoaXMuZ2V0U1coKSwoZnVuY3Rpb24odCl7cmV0dXJuIHUodCxlKX0pKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9fSxvLm1lc3NhZ2VTa2lwV2FpdGluZz1mdW5jdGlvbigpe3RoaXMuZm4mJnRoaXMuZm4ud2FpdGluZyYmdSh0aGlzLmZuLndhaXRpbmcseSl9LG8ucG49ZnVuY3Rpb24oKXt2YXIgZT1uYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5jb250cm9sbGVyO3JldHVybiBlJiZtKGUuc2NyaXB0VVJMLHRoaXMuc24udG9TdHJpbmcoKSk/ZTp2b2lkIDB9LG8uYm49ZnVuY3Rpb24oKXt0cnl7dmFyIGU9dGhpcztyZXR1cm4gZnVuY3Rpb24oZSx0KXt0cnl7dmFyIG49ZSgpfWNhdGNoKGUpe3JldHVybiB0KGUpfXJldHVybiBuJiZuLnRoZW4/bi50aGVuKHZvaWQgMCx0KTpufSgoZnVuY3Rpb24oKXtyZXR1cm4gdihuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWdpc3RlcihlLnNuLGUubm4pLChmdW5jdGlvbih0KXtyZXR1cm4gZS51bj1wZXJmb3JtYW5jZS5ub3coKSx0fSkpfSksKGZ1bmN0aW9uKGUpe3Rocm93IGV9KSl9Y2F0Y2goZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfX0sKGk9W3trZXk6XCJhY3RpdmVcIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbi5wcm9taXNlfX0se2tleTpcImNvbnRyb2xsaW5nXCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub24ucHJvbWlzZX19XSkmJmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX0oci5wcm90b3R5cGUsaSkscn0oZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5Qbj1uZXcgTWFwfXZhciB0PWUucHJvdG90eXBlO3JldHVybiB0LmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oZSx0KXt0aGlzLlNuKGUpLmFkZCh0KX0sdC5yZW1vdmVFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGUsdCl7dGhpcy5TbihlKS5kZWxldGUodCl9LHQuZGlzcGF0Y2hFdmVudD1mdW5jdGlvbihlKXtlLnRhcmdldD10aGlzO2Zvcih2YXIgdCxuPWYodGhpcy5TbihlLnR5cGUpKTshKHQ9bigpKS5kb25lOykoMCx0LnZhbHVlKShlKX0sdC5Tbj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5Qbi5oYXMoZSl8fHRoaXMuUG4uc2V0KGUsbmV3IFNldCksdGhpcy5Qbi5nZXQoZSl9LGV9KCkpO2NvbnN0IFM9XCIxNjg0OTQ4NjQ3NzcyXzRlZjFmNWQ3XCI7bGV0IGI9YXN5bmMoKT0+e30sVD1lPT57fTtmdW5jdGlvbiBDKCl7aWYoXCJzZXJ2aWNlV29ya2VyXCJpbiBuYXZpZ2F0b3Ipe25hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlYWR5LnRoZW4oKCgpPT4oMCxjLkJVKShcInNlcnZpY2VXb3JrZXJcIikpKTtjb25zdCBlPW5ldyBJKCgwLHMuWikoXCJzZXJ2aWNlLXdvcmtlci5qc1wiKSk7bGV0IHQ9XCJ1bmRlZmluZWRcIjtlLmFkZEV2ZW50TGlzdGVuZXIoXCJ3YWl0aW5nXCIsKCgpPT57aSgpLmluY3JlbWVudCh7bWV0cmljc05hbWU6YHN3LnVwZGF0ZS4ke1N9LndhaXRpbmdfZm9yX3VwZGF0ZS5yZWNlaXZlZGB9KSxUPW49Pnt0PW4sZS5tZXNzYWdlU2tpcFdhaXRpbmcoKSxpKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcInN3X3NlbmRfbWVzc2FnZV90b19zd1wiLGRpbWVuc2lvbnM6e3R5cGU6XCJTS0lQX1dBSVRJTkdcIixmbG93Om59fSl9LGwuc3RvcmUuZ2V0U3RhdGUoKS51cGRhdGVzLnNldFVwZGF0ZUluc3RhbGxlZEFuZFdhaXRpbmcoKSxlLmFkZEV2ZW50TGlzdGVuZXIoXCJjb250cm9sbGluZ1wiLCgoKT0+e2koKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOmBzdy51cGRhdGUuJHtTfS5hY2NlcHQuJHt0fS5zdWNjZXNzYH0pLHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKX0pKX0pKSxlLmFkZEV2ZW50TGlzdGVuZXIoXCJhY3RpdmF0ZWRcIiwodD0+e3QuaXNVcGRhdGV8fGUubWVzc2FnZVNXKHt0eXBlOlwiU1lOQ19WRVJTSU9OXCIscmV2aXNpb246XCI0ZWYxZjVkN1wifSl9KSksYj1hc3luYygpPT57YXdhaXQgZS51cGRhdGUoKX0sZS5yZWdpc3RlcigpfX1hKCkuZ2V0TG9nZ2VyKFwic2VydmljZXdvcmtlclwiKX0sMTIyODooZSx0LG4pPT57bi5kKHQse0J5OigpPT5vLF92OigpPT5pfSk7dmFyIHI9bigyMzgzNCk7Y29uc3QgaT1cImFjY291bnRzLlwiKygoMCxyLkJCKSgpP1wic25hcGNoYXQuY29tXCI6XCJzbmFwLWRldi5uZXRcIiksbz0oMCxyLkJCKSgpP1wid2ViLWNhbGxpbmctY29ycC0tcHJvZFwiOlwid2ViLWNhbGxpbmctY29ycFwifSw2MzYzOTooZSx0LG4pPT57bi5kKHQse006KCk9PmEsTjooKT0+b30pLG4oNzEzNzEpLG4oNDUzNjMpLG4oMTEzMDMpLG4oNzk3NDIpO3ZhciByPW4oOTc3ODIpLGk9bi5uKHIpO2FzeW5jIGZ1bmN0aW9uIG8oKXt9ZnVuY3Rpb24gYShlKXt9big2OTA5Myksbig3MjMxMyksbig2NzYxNCksbig2OTcyOSksbig4MDU1MCksaSgpLmdldExvZ2dlcihcIlt0aXZfcmVlbmNyeXB0aW9uXVwiKX0sNTM5MzU6KGUsdCxuKT0+e24uZCh0LHtOeDooKT0+dSxoTzooKT0+cyxtSDooKT0+bCx1YjooKT0+YSx2ZTooKT0+ZCx4WTooKT0+cix6bDooKT0+b30pO3ZhciByPXtIQUxGOjAsREVGQVVMVDoxLERPVUJMRToyfTtjb25zdCBpPVwiLXdjXCI7ZnVuY3Rpb24gbyhlKXtsZXR7Y29taWNJZDp0LGF2YXRhcklkOm4sbWluU2NhbGU6aT1yLkhBTEZ9PWU7Y29uc3Qgbz1NYXRoLm1pbihpKzEsci5ET1VCTEUpLHM9YSh0LG4sdm9pZCAwLGkpO3JldHVybntzcmM6cyxzcmNTZXQ6YCR7c30gMXgsICR7YSh0LG4sdm9pZCAwLG8pfSAyeGB9fWZ1bmN0aW9uIGEoZSx0LG4pe2xldCBpPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTpyLkhBTEY7cmV0dXJuIG4/YGh0dHBzOi8vc2RrLmJpdG1vamkuY29tL3JlbmRlci9wYW5lbC8ke2V9LSR7dH0tJHtufS12MS53ZWJwP3RyYW5zcGFyZW50PTEmc2NhbGU9JHtpfWA6YGh0dHBzOi8vc2RrLmJpdG1vamkuY29tL3JlbmRlci9wYW5lbC8ke2V9LSR7dH0tdjEud2VicD90cmFuc3BhcmVudD0xJnNjYWxlPSR7aX1gfWZ1bmN0aW9uIHMoZSl7bGV0e2NvbWljSWQ6dCxhdmF0YXJJZDpuLG1pblNjYWxlOmk9ci5IQUxGfT1lO2NvbnN0IG89TWF0aC5taW4oaSsxLHIuRE9VQkxFKSxhPWModCxuLGkpO3JldHVybntzcmM6YSxzcmNTZXQ6YCR7YX0gMXgsICR7Yyh0LG4sbyl9IDJ4YH19ZnVuY3Rpb24gYyhlLHQpe3JldHVybmBodHRwczovL3Nkay5iaXRtb2ppLmNvbS9yZW5kZXIvcGFuZWwvJHtlfS1iYnMtJHt0fS12MS53ZWJwP3RyYW5zcGFyZW50PTEmc2NhbGU9JHthcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06ci5IQUxGfWB9ZnVuY3Rpb24gbChlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06ci5IQUxGO2NvbnN0IG49ZS5zcGxpdChcIjpcIik7aWYoMz09PW4ubGVuZ3RoKXJldHVybiBhKG5bMF0sblsyXSx2b2lkIDAsdCk7aWYoND09PW4ubGVuZ3RoKXJldHVybiBhKG5bMF0sblsyXSxuWzNdLHQpO3Rocm93IG5ldyBFcnJvcihgQmFkIGJpdG1vamkgc3RpY2tlciBJZDogJHtlfWApfWZ1bmN0aW9uIHUoZSl7cmV0dXJuYGh0dHBzOi8vaW1hZ2VzLmJpdG1vamkuY29tLzNkL2JhY2tncm91bmQvJHtlfS0ke2FyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpyLkRFRkFVTFR9LndlYnBgfWZ1bmN0aW9uIGQoZSx0KXtyZXR1cm4gdC5lbmRzV2l0aChpKSYmKHQ9dC5zdWJzdHJpbmcoMCx0Lmxlbmd0aC1pLmxlbmd0aCkpLGBodHRwczovL2ltYWdlcy5iaXRtb2ppLmNvbS8zZC9hdmF0YXIvJHt0fS0ke2V9LXYxLndlYnBgfX0sODk0NjooZSx0LG4pPT57bi5kKHQse1M6KCk9PmYsYjooKT0+cH0pO3ZhciByPW4oNjEzMDkpLGk9bi5uKHIpLG89big5NDg4MSksYT1uKDQ0Nzg1KSxzPW4oNTM5MzUpO2NvbnN0IGM9W1wiMTAyMjYwMTVcIixcIjEwMjI2MDE2XCIsXCIxMDIyNjAxN1wiLFwiMTAyMjYwMTlcIixcIjEwMjI2MDIxXCIsXCIxMDIyNjAyMlwiLFwiMTAyMjYwMjNcIixcIjEwMjI2MDI0XCIsXCIxMDIyNjAyNVwiLFwiMTAyMjYwMjdcIixcIjEwMjI2MDI5XCIsXCIxMDIyNjQzOVwiLFwiMTAyMjY0NDBcIixcIjEwMjI2MDMzXCIsXCIxMDIyNjAzNVwiLFwiMTAyMjY0NDFcIixcIjEwMjI2NDQyXCIsXCIxMDIyNjA0M1wiLFwiMTAyMjY1NDlcIixcIjEwMjI2NTUwXCIsXCIxMDIyNjU1MVwiLFwiMTAyMjY1NTJcIixcIjEwMjI2NTUzXCIsXCIxMDIyNjU1NFwiLFwiMTAyMjY1NTVcIixcIjEwMjI2NTU2XCIsXCIxMDIyNjU1N1wiLFwiMTAyMjY1NThcIixcIjEwMjI2NTU5XCJdLGw9MTAyMjAyNjgsdT1TeW1ib2woXCJjZW50ZXJCaXRtb2ppQm9keVN1c3BlbnNlS2V5XCIpO2Z1bmN0aW9uIGQoZSl7cmV0dXJuKDAsby5ScSkoKGFzeW5jKCk9Pm5ldyBQcm9taXNlKCh0PT57Y29uc3Qgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO24uY3Jvc3NPcmlnaW49XCJcIixuLm9ubG9hZD0oKT0+e2NvbnN0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtlLndpZHRoPW4ud2lkdGgsZS5oZWlnaHQ9bi5oZWlnaHQ7Y29uc3Qgcj1lLmdldENvbnRleHQoXCIyZFwiKTtpZighcilyZXR1cm4gdCgwKTtyLmRyYXdJbWFnZShuLDAsMCxuLndpZHRoLG4uaGVpZ2h0KTtjb25zdCBpPXIuZ2V0SW1hZ2VEYXRhKDAsbi5oZWlnaHQtMSxuLndpZHRoLC0xKS5kYXRhO2xldCBvPTA7Zm9yKGxldCBlPTM7ZTxpLmxlbmd0aDtlKz00KWlmKGlbZV0+MCl7bz1NYXRoLmZsb29yKGUvNCk7YnJlYWt9bGV0IGE9MDtmb3IobGV0IGU9aS5sZW5ndGgtMTtlPjA7ZS09NClpZihpW2VdPjApe2E9bi53aWR0aC1NYXRoLmZsb29yKGUvNCk7YnJlYWt9dChhLW8pfSxuLnNyYz1lfSkpKSxbZSx1XSl9ZnVuY3Rpb24gZihlKXtjb25zdCB0PSgwLHMudWIpKFwiMTAyMTQ3OTFcIixlKSxuPSgwLHMudWIpKFwiMjAwODU3NzVcIixlKSxyPXt1cmw6dCxhZGp1c3RtZW50OmQodCl9LGk9e3VybDpuLGFkanVzdG1lbnQ6ZChuKX07cmV0dXJue25vcm1hbEJvZHk6cixzaGVsZkhhbmRzOigwLHMudWIpKFwiMTAyMTQ3OTJcIixlKSx0eXBpbmdCb2R5OmksdHlwaW5nQXJtOigwLHMudWIpKFwiMTAyMzMwNjFcIixlKX19ZnVuY3Rpb24gcChlLHQpe2NvbnN0IG49ZT9wYXJzZUludChlKTotMTtpZighZXx8IW58fG48bCl7Y29uc3QgZT0oMCxhLk1jKSh0KSxuPWkoKS5tdXJtdXIzKGUsMCk7cmV0dXJuIGNbbiVjLmxlbmd0aF19cmV0dXJuIGV9fSwyNzU0ODooZSx0LG4pPT57bi5kKHQse1VkOigpPT5tLFl5OigpPT5zLHJlOigpPT5FLHNqOigpPT5ffSk7dmFyIHI9bigzMDAxKSxpPW4oNTU3NzYpO2NvbnN0IG89U3ltYm9sKFwiQ29tbGluay5wcm94eVwiKSxhPVN5bWJvbChcIkNvbWxpbmsuZW5kcG9pbnRcIikscz1TeW1ib2woXCJDb21saW5rLnJlbGVhc2VQcm94eVwiKSxjPVN5bWJvbChcIkNvbWxpbmsudGhyb3duXCIpLGw9ZT0+XCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLHU9bmV3IE1hcChbW1wicHJveHlcIix7Y2FuSGFuZGxlOmU9PmwoZSkmJmVbb10sc2VyaWFsaXplKGUpe2NvbnN0e3BvcnQxOnQscG9ydDI6bn09bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiBmKGUsdCksW24sW25dXX0sZGVzZXJpYWxpemU6ZT0+KGUuc3RhcnQoKSxtKGUpKX1dLFtcInRocm93XCIse2NhbkhhbmRsZTplPT5sKGUpJiZjIGluIGUsc2VyaWFsaXplKGUpe2xldCB0LHt2YWx1ZTpufT1lO3JldHVybiB0PW4gaW5zdGFuY2VvZiBFcnJvcj97aXNFcnJvcjohMCx2YWx1ZTp7bWVzc2FnZTpuLm1lc3NhZ2UsbmFtZTpuLm5hbWUsc3RhY2s6bi5zdGFja319Ontpc0Vycm9yOiExLHZhbHVlOm59LFt0LFtdXX0sZGVzZXJpYWxpemUoZSl7aWYoZS5pc0Vycm9yKXRocm93IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKGUudmFsdWUubWVzc2FnZSksZS52YWx1ZSk7dGhyb3cgZS52YWx1ZX19XV0pLGQ9bmV3IFNldChbXCJfZGppbm5pX2pzX3Byb3h5X2lkXCIsXCJfZGppbm5pX25hdGl2ZV9yZWZcIixcIl9kamlubmlfY3BwX2V4Y2VwdGlvbl9wdHJcIl0pO2Z1bmN0aW9uIGYoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnNlbGY7dC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLChmdW5jdGlvbiBuKHIpe2lmKCFyfHwhci5kYXRhKXJldHVybjtjb25zdHtpZDpvLHR5cGU6YSxwYXRoOnN9PXtwYXRoOltdLC4uLnIuZGF0YX0sbD0oci5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChTKTtsZXQgdTt0cnl7Y29uc3QgdD1zLnNsaWNlKDAsLTEpLnJlZHVjZSgoKGUsdCk9PmVbdF0pLGUpLG49cy5yZWR1Y2UoKChlLHQpPT5lW3RdKSxlKTtzd2l0Y2goYSl7Y2FzZSBpLkMuR0VUOnU9bjticmVhaztjYXNlIGkuQy5TRVQ6dFtzLnNsaWNlKC0xKVswXV09UyhyLmRhdGEudmFsdWUpLHU9ITA7YnJlYWs7Y2FzZSBpLkMuQVBQTFk6dT1uLmFwcGx5KHQsbCk7YnJlYWs7Y2FzZSBpLkMuQ09OU1RSVUNUOnU9XyhuZXcgbiguLi5sKSk7YnJlYWs7Y2FzZSBpLkMuRU5EUE9JTlQ6e2NvbnN0e3BvcnQxOnQscG9ydDI6bn09bmV3IE1lc3NhZ2VDaGFubmVsO2YoZSxuKSx1PUUodCxbdF0pfWJyZWFrO2Nhc2UgaS5DLlJFTEVBU0U6dT12b2lkIDA7YnJlYWs7ZGVmYXVsdDpyZXR1cm59fWNhdGNoKGUpe3U9e3ZhbHVlOmUsW2NdOjB9fVByb21pc2UucmVzb2x2ZSh1KS5jYXRjaCgoZT0+KHt2YWx1ZTplLFtjXTowfSkpKS50aGVuKChlPT57Y29uc3RbcixzXT1JKGUpO3QucG9zdE1lc3NhZ2Uoey4uLnIsaWQ6b30scyksYT09PWkuQy5SRUxFQVNFJiYodC5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLG4pLHAodCkpfSkpfSkpLHQuc3RhcnQmJnQuc3RhcnQoKX1mdW5jdGlvbiBwKGUpeyhmdW5jdGlvbihlKXtyZXR1cm5cIk1lc3NhZ2VQb3J0XCI9PT1lLmNvbnN0cnVjdG9yLm5hbWV9KShlKSYmZS5jbG9zZSgpfWZ1bmN0aW9uIG0oZSx0KXtyZXR1cm4gdihlLFtdLHQpfWZ1bmN0aW9uIGgoZSl7aWYoZSl0aHJvdyBuZXcgRXJyb3IoXCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGVcIil9ZnVuY3Rpb24gdihlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10sbj0hMTtjb25zdCByPW5ldyBQcm94eShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06ZnVuY3Rpb24oKXt9LHtnZXQobyxhKXtpZihoKG4pLFwic3RyaW5nXCI9PXR5cGVvZiBhJiZkLmhhcyhhKSlyZXR1cm4gb1thXTtpZihhPT09cylyZXR1cm4oKT0+YihlLHt0eXBlOmkuQy5SRUxFQVNFLHBhdGg6dC5tYXAoKGU9PmUudG9TdHJpbmcoKSkpfSkudGhlbigoKCk9PntwKGUpLG49ITB9KSk7aWYoXCJ0aGVuXCI9PT1hKXtpZigwPT09dC5sZW5ndGgpcmV0dXJue3RoZW46KCk9PnJ9O2NvbnN0IG49YihlLHt0eXBlOmkuQy5HRVQscGF0aDp0Lm1hcCgoZT0+ZS50b1N0cmluZygpKSl9KS50aGVuKFMpO3JldHVybiBuLnRoZW4uYmluZChuKX1yZXR1cm4gdihlLFsuLi50LGFdKX0sc2V0KHIsbyxhKXtpZihoKG4pLFwic3RyaW5nXCI9PXR5cGVvZiBvJiZkLmhhcyhvKSlyZXR1cm4gcltvXT1hLCEwO2NvbnN0W3MsY109SShhKTtyZXR1cm4gYihlLHt0eXBlOmkuQy5TRVQscGF0aDpbLi4udCxvXS5tYXAoKGU9PmUudG9TdHJpbmcoKSkpLHZhbHVlOnN9LGMpLnRoZW4oUyl9LGFwcGx5KHIsbyxzKXtoKG4pO2NvbnN0IGM9dFt0Lmxlbmd0aC0xXTtpZihjPT09YSlyZXR1cm4gYihlLHt0eXBlOmkuQy5FTkRQT0lOVH0pLnRoZW4oUyk7aWYoXCJiaW5kXCI9PT1jKXJldHVybiB2KGUsdC5zbGljZSgwLC0xKSk7Y29uc3RbbCx1XT1nKHMpO3JldHVybiBiKGUse3R5cGU6aS5DLkFQUExZLHBhdGg6dC5tYXAoKGU9PmUudG9TdHJpbmcoKSkpLGFyZ3VtZW50TGlzdDpsfSx1KS50aGVuKFMpfSxjb25zdHJ1Y3QocixvKXtoKG4pO2NvbnN0W2Esc109ZyhvKTtyZXR1cm4gYihlLHt0eXBlOmkuQy5DT05TVFJVQ1QscGF0aDp0Lm1hcCgoZT0+ZS50b1N0cmluZygpKSksYXJndW1lbnRMaXN0OmF9LHMpLnRoZW4oUyl9fSk7cmV0dXJuIHJ9ZnVuY3Rpb24gZyhlKXtjb25zdCB0PWUubWFwKEkpO3JldHVyblt0Lm1hcCgoZT0+ZVswXSkpLChuPXQubWFwKChlPT5lWzFdKSksQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxuKSldO3ZhciBufWNvbnN0IHk9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gRShlLHQpe3JldHVybiB5LnNldChlLHQpLGV9ZnVuY3Rpb24gXyhlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihlLHtbb106ITB9KX1mdW5jdGlvbiBJKGUpe2Zvcihjb25zdFt0LG5db2YgdSlpZihuLmNhbkhhbmRsZShlKSl7Y29uc3RbcixvXT1uLnNlcmlhbGl6ZShlKTtyZXR1cm5be3R5cGU6aS5RLkhBTkRMRVIsbmFtZTp0LHZhbHVlOnJ9LG9dfXJldHVyblt7dHlwZTppLlEuUkFXLHZhbHVlOmV9LHkuZ2V0KGUpfHxbXV19ZnVuY3Rpb24gUyhlKXtzd2l0Y2goZS50eXBlKXtjYXNlIGkuUS5IQU5ETEVSOnJldHVybiB1LmdldChlLm5hbWUpLmRlc2VyaWFsaXplKGUudmFsdWUpO2Nhc2UgaS5RLlJBVzpyZXR1cm4gZS52YWx1ZX19ZnVuY3Rpb24gYihlLHQsbil7cmV0dXJuIG5ldyBQcm9taXNlKChpPT57Y29uc3Qgbz0oMCxyLlopKCk7ZS5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLChmdW5jdGlvbiB0KG4pe24uZGF0YSYmbi5kYXRhLmlkJiZuLmRhdGEuaWQ9PT1vJiYoZS5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLHQpLGkobi5kYXRhKSl9KSksZS5zdGFydCYmZS5zdGFydCgpLGUucG9zdE1lc3NhZ2Uoe2lkOm8sLi4udH0sbil9KSl9fSw1NTc3NjooZSx0LG4pPT57bi5kKHQse0M6KCk9PmksUTooKT0+cn0pO3ZhciByPXtSQVc6XCJSQVdcIixQUk9YWTpcIlBST1hZXCIsVEhST1c6XCJUSFJPV1wiLEhBTkRMRVI6XCJIQU5ETEVSXCJ9LGk9e0dFVDpcIkdFVFwiLFNFVDpcIlNFVFwiLEFQUExZOlwiQVBQTFlcIixDT05TVFJVQ1Q6XCJDT05TVFJVQ1RcIixFTkRQT0lOVDpcIkVORFBPSU5UXCIsUkVMRUFTRTpcIlJFTEVBU0VcIn19LDgzOTI3OihlLHQsbik9PntuLmQodCx7RDooKT0+cn0pO3ZhciByPXtJbWFnZTpcIkltYWdlXCIsVmlkZW86XCJWaWRlb1wiLEF1ZGlvOlwiQXVkaW9cIixHaWY6XCJHaWZcIixVbmtub3duOlwiVW5rbm93blwifX0sNTc3Mjg6KGUsdCxuKT0+e2Z1bmN0aW9uIHIoZSx0KXt0aHJvdyBuZXcgRXJyb3IodD8/XCJEaWRuJ3QgZXhwZWN0IHRvIGdldCBoZXJlXCIpfW4uZCh0LHtaOigpPT5yfSl9LDYwODg1OihlLHQsbik9PntuLmQodCx7V0Q6KCk9PmwsaCQ6KCk9PmEscDY6KCk9PmMscG86KCk9Pm99KTt2YXIgcj1uKDc5NzQyKTthc3luYyBmdW5jdGlvbiBpKGUpe3JldHVybiBjcnlwdG8uc3VidGxlLmltcG9ydEtleShcInJhd1wiLGUsXCJBRVMtQ0JDXCIsITEsW1wiZGVjcnlwdFwiXSl9YXN5bmMgZnVuY3Rpb24gbyhlLHQpe3JldHVybiAzMj09PWUubGVuZ3RoP3trZXk6YXdhaXQgaShlKSxpdjp0fTp7a2V5OmF3YWl0IGkocyhlKSksaXY6cyh0KX19ZnVuY3Rpb24gYShlKXtyZXR1cm4gVWludDhBcnJheS5mcm9tKHIuZnJvbUJ5dGVBcnJheShlKSwoZT0+ZS5jaGFyQ29kZUF0KDApKSl9ZnVuY3Rpb24gcyhlKXtsZXQgdD1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZSk7cmV0dXJuIHQuZW5kc1dpdGgoXCJcXG5cIikmJih0PXQuc3Vic3RyaW5nKDAsdC5sZW5ndGgtMSkpLHIudG9CeXRlQXJyYXkodCl9YXN5bmMgZnVuY3Rpb24gYyhlLHQpe2NvbnN0IG49YXdhaXQgY3J5cHRvLnN1YnRsZS5kZWNyeXB0KHtpdjp0Lml2LG5hbWU6XCJBRVMtQ0JDXCJ9LHQua2V5LGUpO2lmKG4gaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcilyZXR1cm4gbjt0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBkZWNyeXB0aW9uIHJlc3VsdCBzaG91bGQgYmUgQXJyYXlCdWZmZXJcIil9YXN5bmMgZnVuY3Rpb24gbChlKXtjb25zdCB0PWF3YWl0IGFzeW5jIGZ1bmN0aW9uKCl7cmV0dXJue2l2OmNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMTYpKSxrZXk6YXdhaXQgY3J5cHRvLnN1YnRsZS5nZW5lcmF0ZUtleSh7bmFtZTpcIkFFUy1DQkNcIixsZW5ndGg6MjU2fSwhMCxbXCJlbmNyeXB0XCJdKX19KCksbj1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cmV0dXJue2NyeXB0b0tleUl2UGFpcjp0LGVuY3J5cHRlZERhdGE6YXdhaXQgY3J5cHRvLnN1YnRsZS5lbmNyeXB0KHtuYW1lOlwiQUVTLUNCQ1wiLGl2OnQuaXZ9LHQua2V5LG4pfX19LDE5MTQ0OihlLHQsbik9PntuLmQodCx7QiQ6KCk9PkMsTlo6KCk9PmYsTzg6KCk9PmcsVVM6KCk9PmgsX1k6KCk9PmIsYWo6KCk9PnAsY1U6KCk9PlQsZTooKT0+SSxlRTooKT0+eSxqUjooKT0+bSxubTooKT0+RSxvOigpPT5fLHBPOigpPT52LHF6OigpPT5TfSk7dmFyIHI9big1ODg2MSksaT1uKDg4MTY4KSxvPW4oMjEyOTkpLGE9big5NTcyMSkscz1uKDQ0NTM3KSxjPW4oNTU3MzMpLGw9bi5uKGMpLHU9big4MzkyNyksZD1uKDU3NzI4KTtmdW5jdGlvbiBmKGUpe3JldHVybiBlLnN0YXJ0c1dpdGgoXCJpbWFnZS9naWZcIik/dS5ELkdpZjplLnN0YXJ0c1dpdGgoXCJpbWFnZVwiKT91LkQuSW1hZ2U6ZS5zdGFydHNXaXRoKFwidmlkZW9cIik/dS5ELlZpZGVvOmUuc3RhcnRzV2l0aChcImF1ZGlvXCIpP3UuRC5BdWRpbzp1LkQuVW5rbm93bn1mdW5jdGlvbiBwKGUpe3JldHVyblt1LkQuVmlkZW8sdS5ELkF1ZGlvXS5pbmNsdWRlcyhlKX1mdW5jdGlvbiBtKGUpe3N3aXRjaChlKXtjYXNlIHUuRC5JbWFnZTpyZXR1cm4gci5QXy5JTUFHRTtjYXNlIHUuRC5HaWY6cmV0dXJuIHIuUF8uQU5JTUFURURfSU1BR0U7Y2FzZSB1LkQuVmlkZW86cmV0dXJuIHIuUF8uVklERU87Y2FzZSB1LkQuQXVkaW86cmV0dXJuIHIuUF8uQVVESU87Y2FzZSB1LkQuVW5rbm93bjpyZXR1cm4gci5QXy5VTkFTU0lHTkVEO2RlZmF1bHQ6KDAsZC5aKShlKX19ZnVuY3Rpb24gaChlKXtzd2l0Y2goZSl7Y2FzZSB1LkQuSW1hZ2U6cmV0dXJuIHMuTWVkaWFNZXRhZGF0YV9NZWRpYVR5cGUuSU1BR0U7Y2FzZSB1LkQuR2lmOnJldHVybiBzLk1lZGlhTWV0YWRhdGFfTWVkaWFUeXBlLkdJRjtjYXNlIHUuRC5WaWRlbzpyZXR1cm4gcy5NZWRpYU1ldGFkYXRhX01lZGlhVHlwZS5WSURFTztjYXNlIHUuRC5BdWRpbzpyZXR1cm4gcy5NZWRpYU1ldGFkYXRhX01lZGlhVHlwZS5BVURJTztjYXNlIHUuRC5Vbmtub3duOnJldHVybiBzLk1lZGlhTWV0YWRhdGFfTWVkaWFUeXBlLlVOS05PV047ZGVmYXVsdDooMCxkLlopKGUpfX1mdW5jdGlvbiB2KGUpe3N3aXRjaChlKXtjYXNlIHMuTWVkaWFNZXRhZGF0YV9NZWRpYVR5cGUuSU1BR0U6cmV0dXJuIHUuRC5JbWFnZTtjYXNlIHMuTWVkaWFNZXRhZGF0YV9NZWRpYVR5cGUuR0lGOnJldHVybiB1LkQuR2lmO2Nhc2Ugcy5NZWRpYU1ldGFkYXRhX01lZGlhVHlwZS5WSURFTzpyZXR1cm4gdS5ELlZpZGVvO2Nhc2Ugcy5NZWRpYU1ldGFkYXRhX01lZGlhVHlwZS5BVURJTzpyZXR1cm4gdS5ELkF1ZGlvO2Nhc2Ugcy5NZWRpYU1ldGFkYXRhX01lZGlhVHlwZS5VTktOT1dOOmNhc2Ugcy5NZWRpYU1ldGFkYXRhX01lZGlhVHlwZS5VTlJFQ09HTklaRUQ6cmV0dXJuIHUuRC5Vbmtub3duO2RlZmF1bHQ6KDAsZC5aKShlKX19ZnVuY3Rpb24gZyhlKXtzd2l0Y2goZSl7Y2FzZSBhLk1lZGlhTWV0YWRhdGFfTWVkaWFUeXBlLklNQUdFOnJldHVybiB1LkQuSW1hZ2U7Y2FzZSBhLk1lZGlhTWV0YWRhdGFfTWVkaWFUeXBlLkdJRjpyZXR1cm4gdS5ELkdpZjtjYXNlIGEuTWVkaWFNZXRhZGF0YV9NZWRpYVR5cGUuVklERU86cmV0dXJuIHUuRC5WaWRlbztjYXNlIGEuTWVkaWFNZXRhZGF0YV9NZWRpYVR5cGUuQVVESU86cmV0dXJuIHUuRC5BdWRpbztjYXNlIGEuTWVkaWFNZXRhZGF0YV9NZWRpYVR5cGUuVU5SRUNPR05JWkVEOmNhc2UgYS5NZWRpYU1ldGFkYXRhX01lZGlhVHlwZS5TUEVDVEFDTEVTX0lNQUdFOmNhc2UgYS5NZWRpYU1ldGFkYXRhX01lZGlhVHlwZS5TUEVDVEFDTEVTX1ZJREVPOnJldHVybiB1LkQuVW5rbm93bjtkZWZhdWx0OigwLGQuWikoZSl9fWZ1bmN0aW9uIHkoZSl7c3dpdGNoKGUpe2Nhc2UgdS5ELkltYWdlOnJldHVybiBvLkRELkltYWdlO2Nhc2UgdS5ELkdpZjpyZXR1cm4gby5ERC5BbmltYXRlZEltYWdlO2Nhc2UgdS5ELlZpZGVvOnJldHVybiBvLkRELlZpZGVvO2Nhc2UgdS5ELkF1ZGlvOnJldHVybiBvLkRELkF1ZGlvO2RlZmF1bHQ6cmV0dXJuIG8uREQuVU5SRUNPR05JWkVEfX1mdW5jdGlvbiBFKGUpe3N3aXRjaChlKXtjYXNlIHUuRC5JbWFnZTpyZXR1cm4gci5jRS5JTUFHRTtjYXNlIHUuRC5HaWY6cmV0dXJuIHIuY0UuR0lGO2Nhc2UgdS5ELlZpZGVvOnJldHVybiByLmNFLlZJREVPO2Nhc2UgdS5ELkF1ZGlvOmNhc2UgdS5ELlVua25vd246dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB1bmtub3duIG1lZGlhIHR5cGUgaW4gZ2V0TWV0cmljc01lc3NhZ2VNZWRpYVR5cGVcIik7ZGVmYXVsdDooMCxkLlopKGUpfX1hc3luYyBmdW5jdGlvbiBfKGUpe2NvbnN0IHQ9ZihlLnR5cGUpLG49e3R5cGU6ZS50eXBlLHNpemU6ZS5zaXplLG1lZGlhVHlwZTp0fSxyPVVSTC5jcmVhdGVPYmplY3RVUkwoZSk7dHJ5e3N3aXRjaCh0KXtjYXNlIHUuRC5HaWY6Y2FzZSB1LkQuSW1hZ2U6e2NvbnN0IGU9YXdhaXQgYXN5bmMgZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKCgodCxuKT0+e2NvbnN0IHI9bmV3IEltYWdlO3Iub25lcnJvcj0oKT0+e24obmV3IEVycm9yKFwiVW5hYmxlIHRvIGxvYWQgaW1hZ2UuIFBsZWFzZSBlbnN1cmUgaW1hZ2UgaXMgdmFsaWQuXCIpKX0sci5vbmxvYWQ9KCk9Pnt0KHt3aWR0aDpyLndpZHRoLGhlaWdodDpyLmhlaWdodH0pfSxyLnNyYz1lfSkpfShyKTtyZXR1cm57Li4ubiwuLi5lfX1jYXNlIHUuRC5WaWRlbzp7Y29uc3QgZT1hd2FpdCBhc3luYyBmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFByb21pc2UoKCh0LG4pPT57Y29uc3Qgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidmlkZW9cIik7ci5vbmVycm9yPSgpPT57bihuZXcgRXJyb3IoXCJVbmFibGUgdG8gbG9hZCB2aWRlby4gUGxlYXNlIGVuc3VyZSB2aWRlbyB1c2VzIEgyNjQgZW5jb2RpbmcuXCIpKX0sci5vbmxvYWRlZGRhdGE9KCk9Pnt0KHt3aWR0aDpyLnZpZGVvV2lkdGgsaGVpZ2h0OnIudmlkZW9IZWlnaHQsZHVyYXRpb25JblNlYzpyLmR1cmF0aW9ufSl9LHIuc3JjPWUsci5sb2FkKCl9KSl9KHIpO3JldHVybnsuLi5uLC4uLmV9fWNhc2UgdS5ELkF1ZGlvOmNhc2UgdS5ELlVua25vd246dGhyb3cgbmV3IEVycm9yKFwidW5oYW5kbGVkIG1lZGlhIHR5cGUgaW4gZ2V0TWVkaWFJbmZvXCIpO2RlZmF1bHQ6cmV0dXJuKDAsZC5aKSh0KX19ZmluYWxseXtyJiZVUkwucmV2b2tlT2JqZWN0VVJMKHIpfX1mdW5jdGlvbiBJKGUpe3JldHVybiBpLk1lZGlhUmVmZXJlbmNlLmZyb21QYXJ0aWFsKHttZWRpYUxpc3RJZDplLm1lZGlhTGlzdElkLnRvU3RyaW5nKCksY29udGVudE9iamVjdDplLmNvbnRlbnRPYmplY3QsbG9jYWxDYWNoZUtleTplLm1lZGlhUmVmZXJlbmNlS2V5LG1lZGlhVHlwZTplLm1lZGlhVHlwZX0pfWZ1bmN0aW9uIFMoZSl7aWYoMD09PWUubGVuZ3RofHwwPT09ZVswXS5tZWRpYVJlZmVyZW5jZXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIk5vIG1lZGlhIHJlZmVyZW5jZXMgZm91bmRcIik7cmV0dXJuIEkoZVswXS5tZWRpYVJlZmVyZW5jZXNbMF0pfWFzeW5jIGZ1bmN0aW9uIGIoZSl7dHJ5e2NvbnN0IHQ9bmV3KGwoKSksbj1hd2FpdCB0LmxvYWRBc3luYyhlKSxyPW4uZmlsZSgvXm1lZGlhfi9pKSxpPW4uZmlsZSgvXm92ZXJsYXl+L2kpO3JldHVybiByLmxlbmd0aD97bWVkaWFBcnJheUJ1ZmZlcjphd2FpdCByWzBdLmFzeW5jKFwiYXJyYXlidWZmZXJcIiksb3ZlcmxheUFycmF5QnVmZmVyOmkubGVuZ3RoP2F3YWl0IGlbMF0uYXN5bmMoXCJhcnJheWJ1ZmZlclwiKTp2b2lkIDB9Om51bGx9Y2F0Y2goZSl7cmV0dXJuIG51bGx9fWFzeW5jIGZ1bmN0aW9uIFQoZSx0KXtjb25zdCByPWF3YWl0IG4uZSg0MzQpLnRoZW4obi5iaW5kKG4sNDM0KSk7cmV0dXJuIHIuZGVmYXVsdCh7cGljYTpyLnBpY2Eoe2ZlYXR1cmVzOltcImpzXCIsXCJ3YXNtXCJdfSl9KS50b0Jsb2IoZSx7bWF4OnR9KX1mdW5jdGlvbiBDKGUpe3JldHVybiBlLm1lZGlhUmVmZXJlbmNlcy5zb21lKChlPT5lLm1lZGlhVHlwZT09PW8uREQuVmlkZW98fGUubWVkaWFUeXBlPT09by5ERC5WaWRlb05vQXVkaW8pKX19LDQ4OTM0OihlLHQsbik9PntuLmQodCx7RGc6KCk9PmwsUnE6KCk9Pm8sVG06KCk9PmMsb0o6KCk9PmEscDg6KCk9PnN9KTtjb25zdCByPXt9O2xldCBpPTA7ZnVuY3Rpb24gbyhlKXtyZXR1cm4obmV3IFRleHRFbmNvZGVyKS5lbmNvZGUoZSl9ZnVuY3Rpb24gYShlKXtyZXR1cm4obmV3IFRleHREZWNvZGVyKS5kZWNvZGUoZSl9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gaSsrLHJbaV09ZSx7aWQ6byhpLnRvU3RyaW5nKCkpfX1mdW5jdGlvbiBjKGUpe3JldHVybiBsKGEoZS5pZCkpfWZ1bmN0aW9uIGwoZSl7cmV0dXJuIHJbcGFyc2VJbnQoZSwxMCldfX0sNTE3MjA6KGUsdCxuKT0+e2Z1bmN0aW9uIHIoZSx0KXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307Y29uc3Qgcj1bYCR7ZX09JHtlbmNvZGVVUklDb21wb25lbnQodCl9YCxcInBhdGg9L1wiXTtpZihuPU9iamVjdC5hc3NpZ24oe30se3NlY3VyZTohMCxzYW1lU2l0ZTpcImxheFwifSxuKSxuLm1heEFnZUluU2VjJiZyLnB1c2goYG1heC1hZ2U9JHtuLm1heEFnZUluU2VjfWApLG4uZXhwaXJlc0luU2VjKXtjb25zdCBlPW5ldyBEYXRlO2Uuc2V0VGltZShlLmdldFRpbWUoKSsxZTMqbi5leHBpcmVzSW5TZWMpLHIucHVzaChgZXhwaXJlcz0ke2UudG9VVENTdHJpbmcoKX1gKX1uLnNlY3VyZSYmci5wdXNoKFwiU2VjdXJlXCIpLG4uc2FtZVNpdGUmJnIucHVzaChgU2FtZVNpdGU9JHtuLnNhbWVTaXRlfWApLGRvY3VtZW50LmNvb2tpZT1yLmpvaW4oXCI7XCIpfWZ1bmN0aW9uIGkoZSl7Y29uc3QgdD1lK1wiPVwiLG49ZG9jdW1lbnQuY29va2llLnNwbGl0KFwiO1wiKTtmb3IoY29uc3QgZSBvZiBuKXtjb25zdCBuPWUudHJpbVN0YXJ0KCk7aWYobi5zdGFydHNXaXRoKHQpKXJldHVybiBuLnN1YnN0cmluZyh0Lmxlbmd0aCxuLmxlbmd0aCl9fW4uZCh0LHtkODooKT0+cixlajooKT0+aX0pfSw5MTkxOihlLHQsbik9PntuLmQodCx7TEk6KCk9PkUsUzc6KCk9Pl8sZGQ6KCk9Pnl9KTt2YXIgcj1uKDE5NDg2KSxpPW4oNDUzNjMpLG89big2MjA5NiksYT1uLm4obykscz1uKDE1NzgwKSxjPW4ubihzKSxsPW4oMzg1OTUpLHU9big5Nzc4MiksZD1uLm4odSksZj1uKDMzNjcpLHA9big1NjA4Myk7Y29uc3QgbT1cInByb2RcIixoPWYuRix2PSgwLHAuYzMpKCksZz0oKCk9Pntjb25zdCBlPWEoKSh7bWF4U2l6ZVBlck1ldHJpYzoxMDAscGFydGl0aW9uTmFtZTppLlBBUlRJVElPTi5EV0VCLGZsYXZvcjptLHZhcmlhbnQ6aCx2ZXJzaW9uTnVtYmVyOm5ldyBsLkFwcFZlcnNpb24uVmVyc2lvbk51bWJlcih7bWFqb3I6XCIxMlwiLG1pbm9yOlwiMzZcIn0pLGRlZmF1bHREaW1lbnNpb25zOntyZXZpc2lvbjpcIjRlZjFmNWQ3XCIsYnJvd3Nlck5hbWU6dn19KTtyZXR1cm4gZS5ob3N0PVwid2ViLnNuYXBjaGF0LmNvbVwiLGUucGF0aD1cIi9ncmFwaGVuZS93ZWJcIixlfSkoKSx5PW5ldyhjKCkpKGcpLEU9e25ldHdvcmtIYW5kbGVyOnksZGVidWdNb2RlOmQoKS5nZXRMb2dnZXIoXCJbTWV0cmljcyBTREtdXCIpLmdldExldmVsKCk9PT11LmxldmVscy5ERUJVRyxpbmFjdGl2ZVRocmVzaG9sZEluU2Vjb25kOjYwLGxvZ1RpbWVJbnRlcnZhbDoyZTR9LF89e2J1ZmZlclNpemVCeXRlczowLHJlc2Vydm9pclNpemU6MCxhcHBJbmZvOntidWlsZDpcImFsbF92ZXJzaW9uc1wiLG9zVHlwZTpyLlUuT1NfV0VCLGZsYXZvcjptLHZhcmlhbnQ6aH0scGFydGl0aW9uczpbXSxwYXJ0aXRpb25PdmVycmlkZXNGb3JVcGxvYWQ6W10sbWV0cmljTmFtZXM6W119fSwzNjE5MTooZSx0LG4pPT57bi5kKHQse0U6KCk9PnN9KTt2YXIgcj1uKDcxMzcxKSxpPW4oOTc3ODIpLG89bi5uKGkpLGE9big5MTkxKTtmdW5jdGlvbiBzKGUpe2NvbnN0IHQ9ZS5nZXRJbnN0YW5jZShhLlM3KSxuPXNldEludGVydmFsKChhc3luYygpPT57Y29uc3R7ZnJhbWU6ZSxkaWFnbm9zdGljczpufT10LmZsdXNoKHt1c2VybmFtZTpcIlwiLHVzZXJHdWlkOlwiXCJ9KTtpZigwIT09bi5lbnF1ZXVlT3BzKXRyeXthd2FpdCBhLmRkLnNlbmRSZXF1ZXN0KGUpfWNhdGNoKGUpeygwLHIuVGIpKGUpfX0pLDZlNCk7cmV0dXJuKCk9PntjbGVhckludGVydmFsKG4pfX1vKCkuZ2V0TG9nZ2VyKFwiW01ldHJpY3MgU0RLXVwiKX0sODY1MTY6KGUsdCxuKT0+e24uZCh0LHtVOigpPT5vfSk7dmFyIHI9bigzMjA2MSksaT1uKDY5NzI5KTtjb25zdCBvPSgwLG4oNDMxNDcpLlE5KSgoYXN5bmMoKT0+aS5zdG9yZS5nZXRTdGF0ZSgpLmF1dGgudGhyb3R0bGVkUmVmcmVzaFRva2VuKCl8fFByb21pc2UucmVzb2x2ZSgpKSxyLmIpfSw4NzMyOTooZSx0LG4pPT57bi5kKHQse0FxOigpPT51LGxHOigpPT5kLHgyOigpPT5sfSk7dmFyIHI9big4MjA4NCk7Y29uc3QgaT01O2Z1bmN0aW9uIG8oZSl7cmV0dXJuIDEyOD09KDEyOCZlLmdldFVpbnQ4KDApKX1mdW5jdGlvbiBhKGUpe3JldHVybiBlLmdldFVpbnQzMigxLCExKX1mdW5jdGlvbiBzKGUsdCxuKXtyZXR1cm4gZS5ieXRlTGVuZ3RoLXQ+PW59ZnVuY3Rpb24gYyhlLHQsbil7cmV0dXJuIGUuc2xpY2UodCxuKX12YXIgbD17TUVTU0FHRToxLFRSQUlMRVJTOjJ9O2Z1bmN0aW9uIHUoZSl7Y29uc3QgdD17fSxuPWUuZ2V0KFwiZ3JwYy1zdGF0dXNcIik7aWYobi5sZW5ndGg+MCl0cnl7dC5jb2RlPXBhcnNlSW50KG5bMF0sMTApfWNhdGNoKGUpe31jb25zdCByPWUuZ2V0KFwiZ3JwYy1tZXNzYWdlXCIpO2lmKHIubGVuZ3RoPjApdHJ5e3QubWVzc2FnZT1kZWNvZGVVUklDb21wb25lbnQoclswXSl9Y2F0Y2goZSl7dC5tZXNzYWdlPXJbMF19cmV0dXJuIHR9ZnVuY3Rpb24gZCgpe2xldCBlPW51bGwsdD0wO3JldHVybntwYXJzZTpmdW5jdGlvbihuLHUpe2lmKDA9PT1uLmxlbmd0aCYmdSlyZXR1cm5bXTtjb25zdCBkPVtdO2lmKG51bGw9PT1lfHx0PT09ZS5ieXRlTGVuZ3RoKWU9bix0PTA7ZWxzZXtjb25zdCByPWUuYnl0ZUxlbmd0aC10LGk9bmV3IFVpbnQ4QXJyYXkocituLmJ5dGVMZW5ndGgpLG89YyhlLHQpO2kuc2V0KG8sMCk7Y29uc3QgYT1uZXcgVWludDhBcnJheShuKTtpLnNldChhLHIpLGU9aSx0PTB9aWYoIXMoZSx0LGkpKXJldHVybiBkO2Rve2NvbnN0IG49YyhlLHQsdCtpKSx1PW5ldyBEYXRhVmlldyhuLmJ1ZmZlcixuLmJ5dGVPZmZzZXQsbi5ieXRlTGVuZ3RoKSxtPWEodSk7aWYoIXMoZSx0LGkrbSkpcmV0dXJuIGQ7Y29uc3QgaD1jKGUsdCtpLHQraSttKTtpZih0Kz1pK20sbyh1KSlyZXR1cm4gZC5wdXNoKHtjaHVua1R5cGU6bC5UUkFJTEVSUyx0cmFpbGVyczooZj1oLHZvaWQgMCxuZXcgci5Ccm93c2VySGVhZGVycygocD1mLG5ldyBUZXh0RGVjb2RlcihcInV0Zi04XCIse2ZhdGFsOiEwfSkuZGVjb2RlKHApKSkpfSksZDtkLnB1c2goe2NodW5rVHlwZTpsLk1FU1NBR0UsZGF0YTpofSl9d2hpbGUocyhlLHQsaSkpO3ZhciBmLHA7cmV0dXJuIGR9fX19LDgxMzY2OihlLHQsbik9PntmdW5jdGlvbiByKGUpe2NvbnN0IHQ9bmV3IEFycmF5QnVmZmVyKGUuYnl0ZUxlbmd0aCs1KTtyZXR1cm4gbmV3IERhdGFWaWV3KHQsMSw0KS5zZXRVaW50MzIoMCxlLmxlbmd0aCwhMSksbmV3IFVpbnQ4QXJyYXkodCw1KS5zZXQoZSksbmV3IFVpbnQ4QXJyYXkodCl9bi5kKHQse1g6KCk9PnJ9KX0sNDMxNDc6KGUsdCxuKT0+e24uZCh0LHtCVTooKT0+dSxROTooKT0+bCxvMDooKT0+c30pO3ZhciByPW4oMzMwMzcpLGk9bigyMDEwMyksbz1uKDIzODM0KSxhPW4oMjMzNzApO2NsYXNzIHMgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlKXtzdXBlcihgWyR7ZS5zdGF0dXN9ICR7ci5ncnBjLkNvZGVbZS5zdGF0dXNdfV0gJHtlLnN0YXR1c01lc3NhZ2V9YCksdGhpcy5uYW1lPVwiR3JwY1dlYkVycm9yXCIsdGhpcy5jb2RlPWUuc3RhdHVzLHRoaXMubWV0YWRhdGE9ZS50cmFpbGVyc319Y29uc3QgYz1yLmdycGMuQ3Jvc3NCcm93c2VySHR0cFRyYW5zcG9ydCh7d2l0aENyZWRlbnRpYWxzOiEwfSk7ZnVuY3Rpb24gbChlLHQpe3JldHVybiBhc3luYyBmdW5jdGlvbihuLGwsdSl7cmV0dXJuIG5ldyBQcm9taXNlKCgoZCxmKT0+e2NvbnN0IHA9ey4uLmwsLi4ubi5yZXF1ZXN0VHlwZX0sbT1gJHtvLmZBfS8ke24uc2VydmljZS5zZXJ2aWNlTmFtZX0vJHtuLm1ldGhvZE5hbWV9YCxoPSgwLGkuZCkobSk7YS56ei5sb2dBdHRlbXB0KGgpO2NvbnN0IHY9cGVyZm9ybWFuY2Uubm93KCk7KHQ/dCgpOlByb21pc2UucmVzb2x2ZSh2b2lkIDApKS50aGVuKCh0PT57dCYmKHZvaWQgMD09PXUmJih1PW5ldyByLmdycGMuTWV0YWRhdGEpLHUuYXBwZW5kKFwiQXV0aG9yaXphdGlvblwiLGBCZWFyZXIgJHt0fWApKTtjb25zdCBpPXtyZXF1ZXN0OnAsaG9zdDpvLnpVLG1ldGFkYXRhOnUsdHJhbnNwb3J0OmMsZGVidWc6ITEsb25FbmQ6YXN5bmMgdD0+e2EuenoubG9nU3RhdHVzQ29kZShoLHQuc3RhdHVzKSx0LnN0YXR1cz09PXIuZ3JwYy5Db2RlLk9LPyhhLnp6LmxvZ0xhdGVuY3koaCxwZXJmb3JtYW5jZS5ub3coKS12KSxkKHQubWVzc2FnZSkpOihbci5ncnBjLkNvZGUuVW5hdXRoZW50aWNhdGVkLHIuZ3JwYy5Db2RlLlBlcm1pc3Npb25EZW5pZWRdLmluY2x1ZGVzKHQuc3RhdHVzKSYmYXdhaXQgZSgpLGYobmV3IHModCkpKX19O3IuZ3JwYy51bmFyeShuLGkpfSkpfSkpfX1jb25zdCB1PWwoKGFzeW5jKCk9PlByb21pc2UucmVzb2x2ZSgpKSl9LDIzMzcwOihlLHQsbik9PntuLmQodCx7eno6KCk9PmF9KTt2YXIgcj1uKDMzMDM3KSxpPW4oNDUzNjMpLG89bi5uKGkpO2NvbnN0IGE9e2xvZ0F0dGVtcHQ6ZnVuY3Rpb24oZSl7bygpLmluY3JlbWVudCh7bWV0cmljc05hbWU6YGdycGMuJHtlfS5hdHRlbXB0YH0pfSxsb2dTdGF0dXNDb2RlOmZ1bmN0aW9uKGUsdCl7bygpLmluY3JlbWVudCh7bWV0cmljc05hbWU6YGdycGMuJHtlfS5ncnBjX2NvZGUuJHt0fS4ke3IuZ3JwYy5Db2RlW3RdfWB9KX0sbG9nSW52YWxpZFJlc3BvbnNlOmZ1bmN0aW9uKGUpe28oKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOmBncnBjLiR7ZX0uaW52YWxpZF9yZXNwb25zZWB9KX0sbG9nTGF0ZW5jeTpmdW5jdGlvbihlLHQpe28oKS5hZGRUaW1lcih7bWV0cmljc05hbWU6YGdycGMuJHtlfS5sYXRlbmN5YCxtaWxsaVNlYzpNYXRoLnJvdW5kKHQpfSksbygpLmFkZFRpbWVyKHttZXRyaWNzTmFtZTpcImdycGNfbGF0ZW5jeVwiLG1pbGxpU2VjOk1hdGgucm91bmQodCksZGltZW5zaW9uczp7YXBpOmV9fSl9LGxvZ0dlbmVyYWxFcnJvcjpmdW5jdGlvbihlKXtvKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpgZ3JwYy4ke2V9LmVycm9yYH0pfSxsb2dSZXNwb25zZVNpemU6ZnVuY3Rpb24oZSx0KXtvKCkuYWRkSGlzdG9ncmFtKHttZXRyaWNzTmFtZTpgZ3JwYy4ke2V9LnJlc3BvbnNlX3NpemVgLHZhbHVlOk1hdGgucm91bmQodCl9KX0sbG9nUmV0cnk6ZnVuY3Rpb24oZSx0KXtvKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpgZ3JwYy4ke2V9LnJldHJ5X2NvdW50XyR7dH1gfSl9LGxvZ05vblJldHJ5UmVhc29uOmZ1bmN0aW9uKGUsdCl7bygpLmluY3JlbWVudCh7bWV0cmljc05hbWU6YGdycGMubm9fcmV0cnlfcmVhc29uLiR7ZX0uJHt0fWB9KX19fSw0NzU2MDooZSx0LG4pPT57bi5kKHQse246KCk9PmMscDY6KCk9PnN9KTt2YXIgcj1uKDc0ODg4KSxpPW4oNTM1NTEpLG89bigzNTM2OSk7Y29uc3QgYT17cmV0cnlRdW90YToyLHJldHJ5QXR0ZW1wdDowLHJldHJ5UG9saWN5OmkuTkMuUkVHVUxBUkJBQ0tPRkZfUkVUUlkscmV0cnlJbnRlcnZhbEluTWlsbGlzOjUwMG4scmV0cnlhYmxlUmVzcG9uc2VTdGF0dXNDb2RlOm5ldyBTZXQoW3IuR0wuQ0FOQ0VMTEVELHIuR0wuQUJPUlRFRCxyLkdMLlVOS05PV04sci5HTC5JTlRFUk5BTF0pLHJldHJ5VHRsTXM6MTAwMDAwbn0scz1vLlpQLk1hcChbW1wiL21lc3NhZ2luZ2NvcmVzZXJ2aWNlLk1lc3NhZ2luZ0NvcmVTZXJ2aWNlL0dldEdyb3Vwc1wiLE9iamVjdC5mcmVlemUoYSldLFtcIi9tZXNzYWdpbmdjb3Jlc2VydmljZS5NZXNzYWdpbmdDb3JlU2VydmljZS9TeW5jQ29udmVyc2F0aW9uc1wiLE9iamVjdC5mcmVlemUoYSldLFtcIi9tZXNzYWdpbmdjb3Jlc2VydmljZS5NZXNzYWdpbmdDb3JlU2VydmljZS9EZWx0YVN5bmNcIixPYmplY3QuZnJlZXplKGEpXV0pO2Z1bmN0aW9uIGMoZSl7Y29uc3QgdD1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKC4zKk51bWJlcihlLnJldHJ5SW50ZXJ2YWxJbk1pbGxpcykpKSxuPU51bWJlcihlLnJldHJ5SW50ZXJ2YWxJbk1pbGxpcykrdDtzd2l0Y2goZS5yZXRyeVBvbGljeSl7Y2FzZSBpLk5DLkVYUE9ORU5USUFMQkFDS09GRl9SRVRSWTpyZXR1cm4gTWF0aC5taW4oTnVtYmVyKGUucmV0cnlUdGxNcyksTWF0aC5wb3cobixlLnJldHJ5QXR0ZW1wdCkpO2Nhc2UgaS5OQy5SRUdVTEFSQkFDS09GRl9SRVRSWTpyZXR1cm4gTWF0aC5taW4oTnVtYmVyKGUucmV0cnlUdGxNcyksbiplLnJldHJ5QXR0ZW1wdCk7ZGVmYXVsdDpyZXR1cm4gMH19fSw5MzAyMjooZSx0LG4pPT57bi5kKHQse246KCk9PlR9KTt2YXIgcj1uKDMzMDM3KSxpPW4oNzQ4ODgpLG89bigxMjg3MCksYT1uKDE0MjUpLHM9big3OTc0MiksYz1uKDk3NzgyKSxsPW4ubihjKSx1PShuKDU3NzI4KSxuKDg3MzI5KSksZD1uKDgxMzY2KSxmPW4oNDc1NjApLHA9bigzNDIxMiksbT1uKDQ1MTExKSxoPW4oMjAxMDMpLHY9bigyMzgzNCksZz1uKDQyMjM4KSx5PW4ubihnKSxFPW4oMjMzNzApO2woKS5nZXRMb2dnZXIoXCJbR3JwY1dlYkNsaWVudF1cIik7Y29uc3QgXz1mdW5jdGlvbigpe2NvbnN0IGU9YS5EZXNrdG9wV2ViRGV2aWNlSW5mby5mcm9tUGFydGlhbCh7c25hcGNoYXRBcHBWZXJzaW9uOm8uQXBwVmVyc2lvbi5mcm9tUGFydGlhbCh7Zmxhdm9yOm8uQXBwVmVyc2lvbl9GbGF2b3IuUFJPRFVDVElPTix2ZXJzaW9uTnVtYmVyOm8uQXBwVmVyc2lvbl9WZXJzaW9uTnVtYmVyLmZyb21QYXJ0aWFsKHttYWpvcjpcIjEyXCIsbWlub3I6XCIzNlwifSl9KSxvc0luZm86QygpLGJ1bmRsZVRhZzpcIjEyLjM2LjBcIn0pLHQ9YS5EZXNrdG9wV2ViRGV2aWNlSW5mby5lbmNvZGUoZSkuZmluaXNoKCk7cmV0dXJuIHMuZnJvbUJ5dGVBcnJheSh0KX0oKSxJPSh2LnpVLGFzeW5jKGUsdCk9Pm5ldyBIZWFkZXJzKHthY2NlcHQ6XCIqLypcIixcImNvbnRlbnQtdHlwZVwiOlwiYXBwbGljYXRpb24vZ3JwYy13ZWIrcHJvdG9cIixcIngtZ3JwYy13ZWJcIjpcIjFcIixcIngtdXNlci1hZ2VudFwiOlwiZ3JwYy13ZWItamF2YXNjcmlwdC8wLjFcIixcIngtc25hcC1kZXZpY2UtaW5mb1wiOl99KSk7YXN5bmMgZnVuY3Rpb24gUyhlLHQsbixvLGEscyl7Y29uc3QgYz0oMCxoLkwpKG5ldyBVUkwoZSkpO2Z1bmN0aW9uIGwocixpKXt2YXIgbDtzJiZzLnJldHJ5QXR0ZW1wdDxzLnJldHJ5UXVvdGEmJihzLnJldHJ5QXR0ZW1wdD4wfHwwPT09cy5yZXRyeUF0dGVtcHQmJnMucmV0cnlhYmxlUmVzcG9uc2VTdGF0dXNDb2RlLmhhcyhyLnZhbHVlT2YoKSkpPyhsPXMsRS56ei5sb2dSZXRyeShjLGwucmV0cnlBdHRlbXB0KSxzZXRUaW1lb3V0KChhc3luYygpPT5TKGUsdCxuLG8sYSx7Li4ubCxyZXRyeUF0dGVtcHQ6bC5yZXRyeUF0dGVtcHQrMX0pKSwoMCxmLm4pKGwpKSk6KHM/cy5yZXRyeUF0dGVtcHQ8cy5yZXRyeVF1b3RhP0UuenoubG9nTm9uUmV0cnlSZWFzb24oYyxcImF0dGVtcHRfcmVhY2hlZF9xdW90YVwiKTpFLnp6LmxvZ05vblJldHJ5UmVhc29uKGMsYG5vbl9yZXRyeWFibGVfY29kZV8ke3J9YCk6RS56ei5sb2dOb25SZXRyeVJlYXNvbihjLFwibm9fcmV0cnlfY29uZmlndXJlZFwiKSxmdW5jdGlvbihlLHQpe3NldFRpbWVvdXQoKCgpPT5uLm9uRXZlbnQodm9pZCAwLHtzdGF0dXNDb2RlOmUsZXJyb3JTdHJpbmc6dH0pKSwwKX0ocixpKSl9RS56ei5sb2dBdHRlbXB0KGMpO3RyeXtjb25zdCBzPXBlcmZvcm1hbmNlLm5vdygpLGY9KDAsZC5YKSh0KSxwPWF3YWl0IGEoZSx7aGVhZGVyczphd2FpdCBJKGUsbyksYm9keTpmLG1ldGhvZDpcIlBPU1RcIn0pO2lmKCFwLm9rKXJldHVybiBsKGZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIHIuZ3JwYy5Db2RlLkludGVybmFsO2Nhc2UgMjAwOnJldHVybiByLmdycGMuQ29kZS5PSztjYXNlIDQwMDpyZXR1cm4gci5ncnBjLkNvZGUuSW52YWxpZEFyZ3VtZW50O2Nhc2UgNDAxOnJldHVybiByLmdycGMuQ29kZS5VbmF1dGhlbnRpY2F0ZWQ7Y2FzZSA0MDM6cmV0dXJuIHIuZ3JwYy5Db2RlLlBlcm1pc3Npb25EZW5pZWQ7Y2FzZSA0MDQ6cmV0dXJuIHIuZ3JwYy5Db2RlLk5vdEZvdW5kO2Nhc2UgNDA5OnJldHVybiByLmdycGMuQ29kZS5BYm9ydGVkO2Nhc2UgNDEyOnJldHVybiByLmdycGMuQ29kZS5GYWlsZWRQcmVjb25kaXRpb247Y2FzZSA0Mjk6cmV0dXJuIHIuZ3JwYy5Db2RlLlJlc291cmNlRXhoYXVzdGVkO2Nhc2UgNDk5OnJldHVybiByLmdycGMuQ29kZS5DYW5jZWxlZDtjYXNlIDUwMDpkZWZhdWx0OnJldHVybiByLmdycGMuQ29kZS5Vbmtub3duO2Nhc2UgNTAxOnJldHVybiByLmdycGMuQ29kZS5VbmltcGxlbWVudGVkO2Nhc2UgNTAzOnJldHVybiByLmdycGMuQ29kZS5VbmF2YWlsYWJsZTtjYXNlIDUwNDpyZXR1cm4gci5ncnBjLkNvZGUuRGVhZGxpbmVFeGNlZWRlZH19KHAuc3RhdHVzKSxgSFRUUCAke3Auc3RhdHVzfTogJHtwLnN0YXR1c1RleHR9YCk7Y29uc3QgaD1hd2FpdCBwLmFycmF5QnVmZmVyKCksdj1mdW5jdGlvbihlKXtpZigxIT09ZS5sZW5ndGgmJjIhPT1lLmxlbmd0aClyZXR1cm47Y29uc3QgdD1lW2UubGVuZ3RoLTFdO2lmKHQuY2h1bmtUeXBlIT09dS54Mi5UUkFJTEVSU3x8dm9pZCAwPT09dC50cmFpbGVycylyZXR1cm47Y29uc3Qgbj0oMCx1LkFxKSh0LnRyYWlsZXJzKTtpZih2b2lkIDA9PT1uLmNvZGUpcmV0dXJuO2lmKCEobi5jb2RlIGluIHIuZ3JwYy5Db2RlKSlyZXR1cm47Y29uc3QgaT17c3RhdHVzQ29kZTpuLmNvZGUsZXJyb3JNZXNzYWdlOm4ubWVzc2FnZT8/XCJcIn07cmV0dXJuIDE9PT1lLmxlbmd0aD9pOmVbMF0uY2h1bmtUeXBlPT09dS54Mi5NRVNTQUdFJiZ2b2lkIDAhPT1lWzBdLmRhdGE/ey4uLmksbWVzc2FnZTplWzBdLmRhdGF9OnZvaWQgMH0oKDAsdS5sRykoKS5wYXJzZShuZXcgVWludDhBcnJheShoKSkpO2lmKHZvaWQgMD09PXYpcmV0dXJuIEUuenoubG9nSW52YWxpZFJlc3BvbnNlKGMpLGwoaS5HTC5JTlRFUk5BTCxgdW5rbm93biBlcnJvciwgSFRUUCAke3Auc3RhdHVzfSwgcmVzcG9uc2Ugc2l6ZSAke2guYnl0ZUxlbmd0aH1iYCk7aWYoRS56ei5sb2dTdGF0dXNDb2RlKGMsdi5zdGF0dXNDb2RlKSxbci5ncnBjLkNvZGUuVW5hdXRoZW50aWNhdGVkLHIuZ3JwYy5Db2RlLlBlcm1pc3Npb25EZW5pZWRdLmluY2x1ZGVzKHYuc3RhdHVzQ29kZSkmJmF3YWl0IG8udGhyb3R0bGVkUmVmcmVzaFRva2VuKCksdm9pZCAwPT09di5tZXNzYWdlfHx2LnN0YXR1c0NvZGUhPT1yLmdycGMuQ29kZS5PSylyZXR1cm4gbCh2LnN0YXR1c0NvZGUsdi5lcnJvck1lc3NhZ2UpO2NvbnN0IGc9by5hbGxvY2F0ZVdhc21CdWZmZXJPclRocm93KHYubWVzc2FnZS5ieXRlTGVuZ3RoKTtnLnNldCh2Lm1lc3NhZ2UpLEUuenoubG9nUmVzcG9uc2VTaXplKGMsaC5ieXRlTGVuZ3RoKSxFLnp6LmxvZ0xhdGVuY3koYyxwZXJmb3JtYW5jZS5ub3coKS1zKSxtPWcsc2V0VGltZW91dCgoKCk9Pm4ub25FdmVudChtLHtzdGF0dXNDb2RlOmkuR0wuT0ssZXJyb3JTdHJpbmc6XCJcIn0pKSwwKX1jYXRjaChlKXtpZigoMCxwLmVFKShlKSlyZXR1cm4gbChpLkdMLlVOS05PV04sXCJleGNlcHRpb24gdGhyb3duIGR1cmluZyBmZXRjaFwiKTtpZihFLnp6LmxvZ0dlbmVyYWxFcnJvcihjKSxlIGluc3RhbmNlb2YgRXJyb3Ipe2NvbnN0IHQ9YCR7ZS5uYW1lfTogJHtlLm1lc3NhZ2V9YDtyZXR1cm4gbChpLkdMLlVOS05PV04sdCl9cmV0dXJuIGwoaS5HTC5VTktOT1dOLFN0cmluZyhlKSl9dmFyIG19ZnVuY3Rpb24gYihlKXtjb25zdCB0PSgwLG0uZ2opKHtuYW1lOlwiZ3JwYy13ZWItZmV0Y2hcIixyZXF1ZXN0SW50ZXJjZXB0b3JzOlsoMCxtLkdSKShlLmdldEF1dGhUb2tlbildLHJlc3BvbnNlSW50ZXJjZXB0b3JzOlsoMCxtLlluKSgoYXN5bmMoKT0+ZS50aHJvdHRsZWRSZWZyZXNoVG9rZW4oKXx8UHJvbWlzZS5yZXNvbHZlKCkpKV0sbWV0cmljUGF0aE1hcHBlcnM6W20uakFdfSk7cmV0dXJuIG49Pih7dW5hcnlDYWxsOihyLGksbyxhKT0+e2NvbnN0IHM9bi5yZXF1ZXN0UGF0aFByZWZpeD8ubGVuZ3RoP2AvJHtuLnJlcXVlc3RQYXRoUHJlZml4fWA6XCJcIixjPWYucDYuZ2V0KHIpO1MoYCR7bi5lbmRwb2ludEFkZHJlc3N9JHtzfSR7cn1gLGksYSxlLHQsYyl9LHNlcnZlclN0cmVhbWluZ0NhbGw6KCk9Pnt0aHJvdyBuZXcgRXJyb3IoXCJzZXJ2ZXJTdHJlYW1pbmdDYWxsIGlzIHVuc3VwcG9ydGVkXCIpfSxiaWRpU3RyZWFtaW5nQ2FsbDooKT0+e3Rocm93IG5ldyBFcnJvcihcImJpZGlTdHJlYW1pbmdDYWxsIGlzIHVuc3VwcG9ydGVkXCIpfX0pfWZ1bmN0aW9uIFQoZSx0KXtlLnJlZ2lzdGVyV2ViRmFjdG9yeSh7Y3JlYXRlQ2xpZW50OmIodCl9KX1mdW5jdGlvbiBDKCl7Y29uc3QgZT0obmV3KHkoKSkpLmdldE9TKCk7bGV0IHQ7c3dpdGNoKGUubmFtZSl7Y2FzZVwiTWFjIE9TXCI6dD1hLk9TSW5mb19Pc1R5cGUuTUFDX09TX1g7YnJlYWs7Y2FzZVwiTGludXhcIjp0PWEuT1NJbmZvX09zVHlwZS5MSU5VWDticmVhaztjYXNlXCJXaW5kb3dzXCI6dD1hLk9TSW5mb19Pc1R5cGUuV0lORE9XUzticmVhaztjYXNlXCJBbmRyb2lkXCI6dD1hLk9TSW5mb19Pc1R5cGUuQU5EUk9JRDticmVhaztjYXNlXCJpT1NcIjp0PWEuT1NJbmZvX09zVHlwZS5JT1M7YnJlYWs7Y2FzZVwiQ2hyb21pdW0gT1NcIjp0PWEuT1NJbmZvX09zVHlwZS5DSFJPTUVfT1M7YnJlYWs7ZGVmYXVsdDp0PWEuT1NJbmZvX09zVHlwZS5PU19UWVBFX09USEVSfXJldHVybiBhLk9TSW5mby5mcm9tUGFydGlhbCh7b3NUeXBlOnQsb3NWZXJzaW9uOmUudmVyc2lvbn0pfX0sOTY1MTE6KGUsdCxuKT0+e24uZCh0LHtJVjooKT0+ZCxVMjooKT0+bCxYUDooKT0+Zix0ODooKT0+dX0pO3ZhciByPW4oOTc3ODIpLGk9bi5uKHIpLG89bigyNDcwMik7aSgpLmdldExvZ2dlcihcIltJREJLZXlWYWxdXCIpO2NsYXNzIGF7Y29uc3RydWN0b3IoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06XCJrZXl2YWwtc3RvcmVcIix0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpcImtleXZhbFwiO3RoaXMuc3RvcmVOYW1lPXQsdGhpcy5fZGJOYW1lPWUsdGhpcy5fc3RvcmVOYW1lPXR9X2luaXQoKXt0aGlzLl9kYnB8fCh0aGlzLl9kYnA9KDAsby5aKSgpLnRoZW4oKCgpPT57Y29uc3QgZT1pbmRleGVkREIub3Blbih0aGlzLl9kYk5hbWUsMSk7cmV0dXJuIGUub251cGdyYWRlbmVlZGVkPSgpPT57ZS5yZXN1bHQuY3JlYXRlT2JqZWN0U3RvcmUodGhpcy5fc3RvcmVOYW1lKX0sbmV3IFByb21pc2UoKCh0LG4pPT57ZS5vbmVycm9yPSgpPT57aWYoZS5lcnJvcilyZXR1cm4gbihlLmVycm9yKTtuKG5ldyBFcnJvcihgZXJyb3Igb3BlbmluZyBEQiAke3RoaXMuX2RiTmFtZX1gKSl9LGUub25zdWNjZXNzPSgpPT50KGUucmVzdWx0KX0pKX0pKS50aGVuKChlPT4oZS5vbmNsb3NlPSgpPT57dGhpcy5fZGJwPXZvaWQgMH0sZSkpKSl9YXN5bmMgX3dpdGhJREJTdG9yZShlLHQpe3JldHVybiB0aGlzLl9pbml0KCksdGhpcy5fZGJwLnRoZW4oKGFzeW5jIG49Pm5ldyBQcm9taXNlKCgocixpKT0+e2NvbnN0IG89bi50cmFuc2FjdGlvbih0aGlzLnN0b3JlTmFtZSxlKTtvLm9uY29tcGxldGU9KCk9PnIoKSxvLm9uZXJyb3I9KCk9PntpZihvLmVycm9yKXJldHVybiBpKG8uZXJyb3IpO2kobmV3IEVycm9yKGB0cmFuc2FjdGlvbiBlcnJvcjogJHt0aGlzLnN0b3JlTmFtZX0sICR7dGhpcy5fZGJOYW1lfWApKX0sby5vbmFib3J0PWU9PntpZihlLnRhcmdldCl7Y29uc3QgdD1lLnRhcmdldC5lcnJvcjtpZih0IGluc3RhbmNlb2YgRXJyb3IpcmV0dXJuIGkodCl9aShuZXcgRXJyb3IoYHRyYW5zYWN0aW9uIGFib3J0ZWQ6ICR7dGhpcy5zdG9yZU5hbWV9IGluICR7dGhpcy5fZGJOYW1lfWApKX0sdChvLm9iamVjdFN0b3JlKHRoaXMuc3RvcmVOYW1lKSl9KSkpKX1hc3luYyBfY2xvc2UoKXtyZXR1cm4gdGhpcy5faW5pdCgpLHRoaXMuX2RicC50aGVuKChlPT57ZS5jbG9zZSgpLHRoaXMuX2RicD12b2lkIDB9KSl9YXN5bmMgX2RlbGV0ZSgpe3JldHVybiB0aGlzLl9jbG9zZSgpLG5ldyBQcm9taXNlKCgoZSx0KT0+e2NvbnN0IG49aW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKHRoaXMuX2RiTmFtZSk7bi5vbmVycm9yPSgpPT57aWYobi5lcnJvcilyZXR1cm4gdChuLmVycm9yKTt0KG5ldyBFcnJvcihgZXJyb3IgZGVsZXRpbmcgREIgJHt0aGlzLl9kYk5hbWV9YCkpfSxuLm9uc3VjY2Vzcz0oKT0+ZSgpfSkpfX1sZXQgcztmdW5jdGlvbiBjKCl7cmV0dXJuIHN8fChzPW5ldyBhKSxzfWFzeW5jIGZ1bmN0aW9uIGwoZSl7bGV0IHQ7cmV0dXJuKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpjKCkpLl93aXRoSURCU3RvcmUoXCJyZWFkb25seVwiLChuPT57dD1uLmdldChlKX0pKS50aGVuKCgoKT0+dC5yZXN1bHQpKX1hc3luYyBmdW5jdGlvbiB1KGUsdCl7cmV0dXJuKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpjKCkpLl93aXRoSURCU3RvcmUoXCJyZWFkd3JpdGVcIiwobj0+e24ucHV0KHQsZSl9KSl9YXN5bmMgZnVuY3Rpb24gZChlKXtyZXR1cm4oYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmMoKSkuX3dpdGhJREJTdG9yZShcInJlYWR3cml0ZVwiLCh0PT57dC5kZWxldGUoZSl9KSl9YXN5bmMgZnVuY3Rpb24gZigpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpjKCk7Y29uc3QgdD1bXTtyZXR1cm4gZS5fd2l0aElEQlN0b3JlKFwicmVhZG9ubHlcIiwoZT0+eyhlLm9wZW5LZXlDdXJzb3J8fGUub3BlbkN1cnNvcikuY2FsbChlKS5vbnN1Y2Nlc3M9ZnVuY3Rpb24oKXt0aGlzLnJlc3VsdCYmKHQucHVzaCh0aGlzLnJlc3VsdC5rZXkpLHRoaXMucmVzdWx0LmNvbnRpbnVlKCkpfX0pKS50aGVuKCgoKT0+dCkpfXNlbGYuYWRkRXZlbnRMaXN0ZW5lcihcImZyZWV6ZVwiLCgoKT0+eyFhc3luYyBmdW5jdGlvbigpeyhhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06YygpKS5fY2xvc2UoKX0oKX0pKX0sODk2Mzc6KGUsdCxuKT0+e24uZCh0LHtMdDooKT0+bSxUbzooKT0+Zix1XzooKT0+ZH0pO3ZhciByPW4oODgzMDYpLGk9bi5uKHIpLG89bigyNzc1NiksYT1uKDk3NzgyKSxzPW4ubihhKSxjPW4oMzM2NyksbD1uKDEyMzYyKTtjb25zdCB1PVtcInRyYWNlXCIsXCJkZWJ1Z1wiLFwibG9nXCIsXCJpbmZvXCIsXCJ3YXJuXCIsXCJlcnJvclwiXSxkPWkoKSgoZT0+e2xldCB0PTA7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspdD1lLmNoYXJDb2RlQXQobikrKCh0PDw1KS10KTtjb25zdCBuPSgxNjcxMTY4MCZ0KT4+MTYscj0oNjUyODAmdCk+PjgsaT0yNTUmdCxvPSgyOTkqbis1ODcqcisxMTQqaSkvMWUzKi4wMTtyZXR1cm5gIyR7KC44Km4rbzw8MTZ8LjgqcitvPDw4fC44KmkrbykudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDYsXCIwXCIpfWB9KSk7ZnVuY3Rpb24gZihlKXtlLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsKGU9PntpZihcIldPUktFUl9MT0dHSU5HXCIhPT1lLmRhdGEudHlwZSlyZXR1cm47Y29uc3R7bWV0aG9kOnQsbG9nZ2VyTmFtZTpuLG1lc3NhZ2U6cn09ZS5kYXRhLmRhdGE7cygpLmdldExvZ2dlcihuKVt0XShyKX0pKX0hZnVuY3Rpb24oKXtzZWxmLmxvZz1zKCk7Y29uc3QgZT1zKCkubWV0aG9kRmFjdG9yeTtzKCkubWV0aG9kRmFjdG9yeT0odCxuLHIpPT57aWYoXCJ3ZWJfd29ya2VyXCI9PT1jLkYpcmV0dXJuKCk9Pnt0aHJvdyBuZXcgRXJyb3IoXCJEaWQgeW91IGZvcmdldCB0byByZWdpc3RlcldvcmtlckxvZ2dpbmcgZm9yIHRoaXMgd29ya2VyP1wiKX07e2NvbnN0IGk9ZSh0LG4sciksbz1gYmFja2dyb3VuZC1jb2xvcjoke2QoU3RyaW5nKHIpKX07IGNvbG9yOiAjRkZGRkZGOyBib3JkZXItcmFkaXVzOiAwLjVlbTsgcGFkZGluZzogMnB4IDAuNWVtO2A7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIGkoXCIlY1wiK1N0cmluZyhyKSxvLC4uLnQpfX19LHMoKS5zZXRMZXZlbChzKCkuZ2V0TGV2ZWwoKSk7Y29uc3QgdD1zKCkuZ2V0TG9nZ2VyO3MoKS5nZXRMb2dnZXI9ZT0+e2NvbnN0IG49dChlKTtyZXR1cm4gbi5yZXBsYWNlZHx8KHUuZm9yRWFjaCgodD0+e2NvbnN0IHI9blt0XTtuW3RdPWZ1bmN0aW9uKCl7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkobiksbz0wO288bjtvKyspaVtvXT1hcmd1bWVudHNbb107aWYoXCJ3ZWJfd29ya2VyXCIhPT1jLkYpciguLi5pKTtlbHNle2NvbnN0IG49e3R5cGU6XCJXT1JLRVJfTE9HR0lOR1wiLGRhdGE6e21ldGhvZDp0LGxvZ2dlck5hbWU6YCR7ZS50b1N0cmluZygpfSBbd29ya2VyXWAsbWVzc2FnZTooMCxsLmFGKShpKX19O3NlbGYucG9zdE1lc3NhZ2Uobil9fX0pKSxuLnJlcGxhY2VkPSEwKSxufX0oKTtjb25zdCBwPXt9LG09KGUsdCxuLHIpPT57Y29uc3QgaT1wW3RdPz8oKCk9Pntjb25zdCBlPXMoKS5nZXRMb2dnZXIoYFtDKys6ICR7by5PJFt0XX1dYCk7cmV0dXJuIHBbdF09ZSxlfSkoKSxhPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIG8uaW4uTk9ORTpjYXNlIG8uaW4uVkVSQk9TRTpyZXR1cm5cInRyYWNlXCI7Y2FzZSBvLmluLkRFQlVHOnJldHVyblwiZGVidWdcIjtjYXNlIG8uaW4uSU5GTzpyZXR1cm5cImluZm9cIjtjYXNlIG8uaW4uV0FSTjpyZXR1cm5cIndhcm5cIjtjYXNlIG8uaW4uRVJST1I6cmV0dXJuXCJlcnJvclwifX0oZSk7aVthXS5jYWxsKGksbixyKX19LDEyMzYyOihlLHQsbik9PntuLmQodCx7UUs6KCk9PkUsYSQ6KCk9Pl8sYUY6KCk9PmcseGs6KCk9Pnl9KTt2YXIgcj1uKDk2MDI2KSxpPW4ubihyKSxvPW4oNDUwMDEpLGE9bi5uKG8pLHM9big0NDQ1KSxjPW4ubihzKTtjb25zdCBsPTEwMjQwLHU9ZT0+e2xldHt0aW1lc3RhbXA6dCx0YWc6bixsZXZlbDpyLG1lc3NhZ2U6aX09ZTtyZXR1cm5gJHtuZXcgRGF0ZSh0KS50b0lTT1N0cmluZygpfSAke259ICR7cn0gJHtpfWB9O2NsYXNzIGR7ZW50cmllcz1uZXcoYSgpKTtzaXplSW5CeXRlcz0wO2NvbnN0cnVjdG9yKGUpe3RoaXMuYWNjZXB0PWV9YWRkTG9nRW50cnkoZSl7aWYoIXRoaXMuYWNjZXB0KGUpKXJldHVybjtjb25zdCB0PW0oZSk7Zm9yKDt0K3RoaXMuc2l6ZUluQnl0ZXM+OTIxNjAwOyl7Y29uc3QgZT10aGlzLmVudHJpZXMuc2hpZnQoKTtpZighZSlicmVhazt0aGlzLnNpemVJbkJ5dGVzLT1tKGUpfXRoaXMuc2l6ZUluQnl0ZXMrPXQsdGhpcy5lbnRyaWVzLnB1c2goZSl9dG9QcmludGFibGVTdHJpbmcoKXtyZXR1cm4gdGhpcy5lbnRyaWVzLnRvQXJyYXkoKS5tYXAodSkuam9pbihcIlxcblwiKX1yZXNldCgpe3RoaXMuZW50cmllcy5jbGVhcigpLHRoaXMuc2l6ZUluQnl0ZXM9MH1lbnRyeUNvdW50KCl7cmV0dXJuIHRoaXMuZW50cmllcy5sZW5ndGh9Z2V0KGUpe3JldHVybiB0aGlzLmVudHJpZXMuZ2V0KGUpfX1jb25zdCBmPXtub3JtYWw6bmV3IGQoKCgpPT4hMCkpLGVycm9yOm5ldyBkKChlPT5bXCJ3YXJuXCIsXCJlcnJvclwiXS5pbmNsdWRlcyhlLmxldmVsKSkpLGNhbGxpbmc6bmV3IGQoKGU9PmUudGFnLnN0YXJ0c1dpdGgoXCJbVGFsa11cIikpKX07ZnVuY3Rpb24gcChlKXtyZXR1cm4gZS5sZW5ndGh9ZnVuY3Rpb24gbShlKXtjb25zdHttZXNzYWdlOnQsbGV2ZWw6bix0YWc6cn09ZTtyZXR1cm4gMjgrcCh0KStwKHIpK3Aobil9ZnVuY3Rpb24gaChlKXtyZXR1cm4gZT9lLmxlbmd0aD5sP2Uuc2xpY2UoMCxsKTplOlwiXCJ9ZnVuY3Rpb24gdihlKXtyZXR1cm4gaChcInN0cmluZ1wiPT10eXBlb2YgZT9lOmMoKShlLCgoZSx0KT0+XCJzdHJpbmdcIj09dHlwZW9mIHQ/aCh0KTp0IGluc3RhbmNlb2YgRXJyb3I/YEVycm9yOiAke3QubmFtZX0gJHt0Lm1lc3NhZ2V9XFxuICR7dC5zdGFja3x8XCJcIn1gOnQpLDIse2RlcHRoTGltaXQ6MyxlZGdlc0xpbWl0OjEwfSkpfWZ1bmN0aW9uIGcoZSl7cmV0dXJuIDE9PT1lLmxlbmd0aD92KGVbMF0pOmUubWFwKHYpLmpvaW4oXCIgXCIpfWZ1bmN0aW9uIHkoKXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoZikubWFwKChlPT57bGV0W3Qsbl09ZTtyZXR1cm5bdCxuLnRvUHJpbnRhYmxlU3RyaW5nKCldfSkpfWZ1bmN0aW9uIEUoKXtyZXR1cm4geSgpLm1hcCgoZT0+e2xldFt0LG5dPWU7cmV0dXJuYCR7dH06XFxuJHtufWB9KSkuam9pbihcIlxcblwiKX1mdW5jdGlvbiBfKGUpe3JldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoZikubWFwKCh0PT57bGV0W24scl09dDtyZXR1cm5bbixpKCkoMSxlKzEpLm1hcCgoZT0+e2NvbnN0IHQ9ci5nZXQoLWUpO3JldHVybiB0P3UodCk6dm9pZCAwfSkpLmZpbHRlcihCb29sZWFuKS5qb2luKFwiXFxuXCIpXX0pKSl9fSw4MTExMzooZSx0LG4pPT57bi5kKHQse0M6KCk9PmN9KTt2YXIgcj1uKDcxMzcxKSxpPW4oNDUzNjMpLG89bi5uKGkpLGE9big5Nzc4Mikscz1uLm4oYSk7Y29uc3QgYz0ocygpLmdldExvZ2dlcihcIltEaXNwYXRjaFF1ZXVlXVwiKSwoKCk9Pntjb25zdCBlPXMoKS5nZXRMb2dnZXIoXCJbTmF0aXZlVGFza1F1ZXVlXVwiKTtyZXR1cm57c3VibWl0Oih0LG4pPT4oKGUsdCxuLGkpPT57Y29uc3QgYT1wZXJmb3JtYW5jZS5ub3coKTtlLmRlYnVnKGBzdWJtaXR0aW5nIHRhc2sgd2l0aCBkZWxheSAke2l9IGF0ICR7YX1gKTtjb25zdCBzPU51bWJlcihpKTtyZXR1cm4gc2V0VGltZW91dCgoKCk9Pntjb25zdCBpPXBlcmZvcm1hbmNlLm5vdygpLHM9aS1hO2UuZGVidWcoYHRhc2sgc2NoZWR1bGVkIGF0ICR7YX0gYWJvdXQgdG8gc3RhcnQgYWZ0ZXIgJHtzfW1zIHF1ZXVlIHRpbWVgKTt0cnl7bigpfWNhdGNoKG4pe2UuZXJyb3IoXCJlcnJvciBleGVjdXRpbmcgdGFzazogXCIsbiksbygpLmluY3JlbWVudCh7bWV0cmljc05hbWU6YHdhc20uYXN5bmNfdGFzay4ke3R9LmVycm9yYH0pLCgwLHIuVGIpKG4pfWNvbnN0IGM9TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKS1pKTtjPjUmJm8oKS5hZGRUaW1lcih7bWV0cmljc05hbWU6YHdhc20uYXN5bmNfdGFzay4ke3R9YCxtaWxsaVNlYzpjfSksZS5kZWJ1ZyhgdGFzayBzY2hlZHVsZWQgYXQgJHthfSBmaW5pc2hlZCBhZnRlciAke2N9bXMgcnVuIHRpbWVgKX0pLHMpfSkoZSxcIm5hdGl2ZV90YXNrXCIsKCgpPT50LnJ1bigpKSxuKX19KSgpKX0sMzIzNTM6KGUsdCxuKT0+e24uZCh0LHt3cTooKT0+bCx6VzooKT0+RX0pO3ZhciByPW4oMjQzNTApLGk9bi5uKHIpLG89big3NzQyKSxhPW4oODQyNSkscz1uKDg4MDM3KSxjPW4oNjk3MjkpO2NvbnN0IGw9KCk9Pi9cXEJAXFxTKi9nLHU9KCk9Pi8oPzpbYS16MC05KyEjJCUmJyovPT9eX2B7fH1+LV0rKD86XFwuW2EtejAtOSEjJCUmJyorLz0/Xl9ge3x9fi1dKykqfFwiKD86W1xceDAxLVxceDA4XFx4MGJcXHgwY1xceDBlLVxceDFmXFx4MjFcXHgyMy1cXHg1YlxceDVkLVxceDdmXXxcXFxcW1xceDAxLVxceDA5XFx4MGJcXHgwY1xceDBlLVxceDdmXSkqXCIpQCg/Oig/OlthLXowLTldKD86W2EtejAtOS1dKlthLXowLTldKT9cXC4pK1thLXowLTldKD86W2EtejAtOS1dKlthLXowLTldKT98XFxbKD86KD86MjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0/KVxcLil7M30oPzoyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV1bMC05XT98W2EtejAtOS1dKlthLXowLTldOig/OltcXHgwMS1cXHgwOFxceDBiXFx4MGNcXHgwZS1cXHgxZlxceDIxLVxceDVhXFx4NTMtXFx4N2ZdfFxcXFxbXFx4MDEtXFx4MDlcXHgwYlxceDBjXFx4MGUtXFx4N2ZdKSspXFxdKS9naSxkPSgpPT4vKFxcK1xcZHsxLDJ9XFxzKT9cXCg/XFxkezN9XFwpP1tcXHMuLV0/XFxkezN9W1xccy4tXT9cXGR7NH0vZyxmPSgpPT5uZXcgUmVnRXhwKGAkey9cXGR7MSw2fS8uc291cmNlfVxcXFxzKyR7L1thLXpBLVpdezEsMjV9KFxccytbYS16QS1aXXsxLDI1fSkqLy5zb3VyY2V9XFxcXHMrJHsvKGFsbGV5fGFubmV4fGFyY2FkZXxhdmVbLl0/fGF2ZW51ZXxhbGFtZWRhfGJheW91fGJlYWNofGJlbmR8Ymx1ZmZzP3xib3R0b218Ym91bGV2YXJkfGJyYW5jaHxicmlkZ2V8YnJvb2tzP3xidXJncz98YnlwYXNzfGJyb2Fkd2F5fGNhbWlub3xjYW1wfGNhbnlvbnxjYXBlfGNhdXNld2F5fGNlbnRlcnM/fGNpcmNsZXM/fGNsaWZmcz98Y2x1Ynxjb21tb258Y29ybmVycz98Y291cnNlfGNvdXJ0cz98Y292ZXM/fGNyZWVrfGNyZXNjZW50fGNyZXN0fGNyb3NzaW5nfGNyb3Nzcm9hZHxjdXJ2ZXxjaXJjdWxvfGRhbGV8ZGFtfGRpdmlkZXxkcml2ZXM/fGRyfGVzdGF0ZXM/fGV4cHJlc3N3YXl8ZXh0ZW5zaW9ucz98ZmFsbHM/fGZlcnJ5fGZpZWxkcz98ZmxhdHM/fGZvcmRzP3xmb3Jlc3R8Zm9yZ2VzP3xmb3Jrcz98Zm9ydHxmcmVld2F5fGdhcmRlbnM/fGdhdGV3YXl8Z2xlbnM/fGdyZWVucz98Z3JvdmVzP3xoYXJib3JzP3xoYXZlbnxoZWlnaHRzfGhpZ2h3YXl8aGlsbHM/fGhvbGxvd3xpbmxldHxpc2xhbmRzP3xpc2xlfGp1bmN0aW9ucz98a2V5cz98a25vbGxzP3xsYWtlcz98bGFuZHxsYW5kaW5nfGxhbmV8bGlnaHRzP3xsb2FmfGxvY2tzP3xsb2RnZXxsb29wfG1hbGx8bWFub3JzP3xtZWFkb3dzP3xtZXdzfG1pbGxzP3xtaXNzaW9ufG1vdG9yd2F5fG1vdW50fG1vdW50YWlucz98bmVja3xvcmNoYXJkfG92YWx8b3ZlcnBhc3N8cGFya3M/fHBhcmt3YXlzP3xwYXNzfHBhc3NhZ2V8cGF0aHxwaWtlfHBpbmVzP3xwbGFpbnM/fHBsYXphfHBvaW50cz98cG9ydHM/fHByYWlyaWV8cHJpdmFkYXxyYWRpYWx8cmFtcHxyYW5jaHxyYXBpZHM/fHJkWy5dP3xyZXN0fHJpZGdlcz98cml2ZXJ8cm9hZHM/fHJvdXRlfHJvd3xydWV8cnVufHNob2Fscz98c2hvcmVzP3xza3l3YXl8c3ByaW5ncz98c3B1cnM/fHNxdWFyZXM/fHN0YXRpb258c3RyYXZlbnVlfHN0cmVhbXxzdFsuXT98c3RyZWV0cz98c3VtbWl0fHNwZWVkd2F5fHRlcnJhY2V8dGVyfHRocm91Z2h3YXl8dHJhY2V8dHJhY2t8dHJhZmZpY3dheXx0cmFpbHx0dW5uZWx8dHVybnBpa2V8dW5kZXJwYXNzfHVuaW9ucz98dmFsbGV5cz98dmlhZHVjdHx2aWV3cz98dmlsbGFnZXM/fHZpbGxlfHZpc3RhfHdhbGtzP3x3YWxsfHdheXM/fHdlbGxzP3x4aW5nfHhyZCkvLnNvdXJjZX0oXFxcXHMrJHsvKE58RXxTfFd8bm9ydGh8ZWFzdHxzb3V0aHx3ZXN0KS8uc291cmNlfSk/KFxcXFxzKyR7LyhhcHR8YXBhcnRtZW50fHVuaXR8YmFzZW1lbnR8YnNtdHxidWlsZGluZ3xkZXBhcnRtZW50fGRlcHR8Zmxvb3J8Zmx8cGVudGhvdXNlfHBofHJvb218cm18c2xpcHxzcGFjZXxzcGN8c3VpdGV8I3xibGRnfHBcXC4/b1xcLj9cXHMrYm94fGJveClcXC4/XFxzK1xcd3sxLDI1fS8uc291cmNlfSk/W1xcXFxzLC5dKyR7L1thLXpBLVpdezEsMTd9KFtcXHMtXStbYS16QS1aXXsxLDE3fSl7MCw0fS8uc291cmNlfVtcXFxccywuXSskey8oQUt8YWxhc2thfEFMfGFsYWJhbWF8QVJ8YXJrYW5zYXN8QVp8YXJpem9uYXxDQXxjYWxpZm9ybmlhfENPfGNvbG9yYWRvfENUfGNvbm5lY3RpY3V0fERDfGRpc3RyaWN0XFxzb2ZcXHNjb2x1bWJpYXxERXxkZWxhd2FyZXxGTHxmbG9yaWRhfEdBfGdlb3JnaWF8R1V8Z3VhbXxISXxoYXdhaWl8SUF8aW93YXxJRHxpZGFob3xJTHxpbGxpbm9pc3xJTnxpbmRpYW5hfEtTfGthbnNhc3xLWXxrZW50dWNreXxMQXxsb3Vpc2lhbmF8TUF8bWFzc2FjaHVzZXR0c3xNRHxtYXJ5bGFuZHxNRXxtYWluZXxNSXxtaWNoaWdhbnxNTnxtaW5uZXNvdGF8TU98bWlzc291cml8TVN8bWlzc2lzc2lwcGl8TVR8bW9udGFuYXxOQ3xub3J0aFxcc2Nhcm9saW5hfE5EfG5vcnRoXFxzZGFrb3RhfE5FfG5lYnJhc2thfE5IfG5ld1xcc2hhbXBzaGlyZXxOSnxuZXdcXHNqZXJzZXl8Tk18bmV3XFxzbWV4aWNvfE5WfG5ldmFkYXxOWXxuZXdcXHN5b3JrfE9IfG9oaW98T0t8b2tsYWhvbWF8T1J8b3JlZ29ufFBBfHBlbm5zeWx2YW5pYXxSSXxyaG9kZVxcc2lzbGFuZHxTQ3xzb3V0aFxcc2Nhcm9saW5hfFNEfHNvdXRoXFxzZGFrb3RhfFROfHRlbm5lc3NlZXxUWHx0ZXhhc3xVVHx1dGFofFZBfHZpcmdpbmlhfFZJfHZpcmdpblxcc2lzbGFuZHN8VlR8dmVybW9udHxXQXx3YXNoaW5ndG9ufFdJfHdpc2NvbnNpbnxXVnx3ZXN0XFxzdmlyZ2luaWF8V1l8d3lvbWluZykvLnNvdXJjZX1bXFxcXHMsLl0rJHsvXFxkezV9KC1cXGR7NH0pPy8uc291cmNlfWAsXCJpZ1wiKTtmdW5jdGlvbiBwKGUsdCl7aWYoIWUuZ2xvYmFsKXRocm93IG5ldyBFcnJvcihcInJlZ2V4IG11c3QgYmUgZ2xvYmFsIHRvIGJlIHVzZWQgaW4gbWF0Y2hBbGxcIik7Y29uc3Qgbj1bXTtsZXQgcj1udWxsO2Zvcig7bnVsbCE9PShyPWUuZXhlYyh0KSk7KW4ucHVzaCh7bWF0Y2g6clswXSxzdGFydDpyLmluZGV4LGVuZDplLmxhc3RJbmRleH0pO3JldHVybiBufWZ1bmN0aW9uIG0oZSx0KXtjb25zdCBuPWwoKSxyPSgwLHMueG8pKHQpKGMuc3RvcmUuZ2V0U3RhdGUoKSksbz1pKCkociwoZT0+ZS5tdXRhYmxlX3VzZXJuYW1lfHxcIlwiKSk7cmV0dXJuIHAobixlKS5tYXAoKGU9PntsZXR7bWF0Y2g6dCxzdGFydDpufT1lO2NvbnN0IHI9b1t0LnN1YnN0cigxKV0/LnVzZXJfaWQ7aWYoIXJ8fC0xPT09bilyZXR1cm4gbnVsbDtjb25zdCBpPXI7cmV0dXJue3JhbmdlOntsb2NhdGlvbjpuLGxlbmd0aDp0Lmxlbmd0aH0sYXR0cmlidXRlOnskY2FzZTpcIm1lbnRpb25cIixtZW50aW9uOnt1c2VySWQ6aX19fX0pKS5maWx0ZXIoKGU9PkJvb2xlYW4oZSkpKX1mdW5jdGlvbiBoKGUpe3JldHVybigwLGEuc0UpKGUsXCJ1cmxcIikubWFwKChlPT4oe3JhbmdlOntsb2NhdGlvbjplLnN0YXJ0LGxlbmd0aDplLmVuZC1lLnN0YXJ0fSxhdHRyaWJ1dGU6eyRjYXNlOlwidXJsQXR0cmlidXRlXCIsdXJsQXR0cmlidXRlOnt1cmw6ZS52YWx1ZX19fSkpKX1mdW5jdGlvbiB2KGUpe3JldHVybiBwKHUoKSxlKS5tYXAoKGU9Pih7cmFuZ2U6e2xvY2F0aW9uOmUuc3RhcnQsbGVuZ3RoOmUuZW5kLWUuc3RhcnR9LGF0dHJpYnV0ZTp7JGNhc2U6XCJ1cmxBdHRyaWJ1dGVcIix1cmxBdHRyaWJ1dGU6e3VybDpgbWFpbHRvOiR7ZS5tYXRjaH1gfX19KSkpfWZ1bmN0aW9uIGcoZSl7cmV0dXJuIHAoZCgpLGUpLm1hcCgoZT0+KHtyYW5nZTp7bG9jYXRpb246ZS5zdGFydCxsZW5ndGg6ZS5lbmQtZS5zdGFydH0sYXR0cmlidXRlOnskY2FzZTpcIm1lZGlhQXR0cmlidXRlXCIsbWVkaWFBdHRyaWJ1dGU6e3RleHRNZWRpYUF0dHJpYnV0ZVR5cGU6by5UZXh0TWVkaWFBdHRyaWJ1dGVfVGV4dE1lZGlhQXR0cmlidXRlVHlwZS5QSE9ORX19fSkpKX1mdW5jdGlvbiB5KGUpe3JldHVybiBwKGYoKSxlKS5maWx0ZXIoKGU9Pntjb25zdCB0PWUubWF0Y2guc3BsaXQoL1suLFxcc10rLykubGVuZ3RoLG49ZS5tYXRjaC5zcGxpdCgvXFxuXFxyKy8pLmxlbmd0aDtyZXR1cm4gdDw9MTYmJm48PTV9KSkubWFwKChlPT4oe3JhbmdlOntsb2NhdGlvbjplLnN0YXJ0LGxlbmd0aDplLmVuZC1lLnN0YXJ0fSxhdHRyaWJ1dGU6eyRjYXNlOlwibWVkaWFBdHRyaWJ1dGVcIixtZWRpYUF0dHJpYnV0ZTp7dGV4dE1lZGlhQXR0cmlidXRlVHlwZTpvLlRleHRNZWRpYUF0dHJpYnV0ZV9UZXh0TWVkaWFBdHRyaWJ1dGVUeXBlLkFERFJFU1N9fX0pKSl9ZnVuY3Rpb24gRShlLHQpe2NvbnN0IG49W107Zm9yKGNvbnN0IHQgb2YgXyhlLG4pKW4ucHVzaCguLi5oKHQpKTtmb3IoY29uc3QgdCBvZiBfKGUsbikpbi5wdXNoKC4uLnYodCkpO2Zvcihjb25zdCB0IG9mIF8oZSxuKSluLnB1c2goLi4uZyh0KSk7Zm9yKGNvbnN0IHQgb2YgXyhlLG4pKW4ucHVzaCguLi55KHQpKTtmb3IoY29uc3QgciBvZiBfKGUsbikpbi5wdXNoKC4uLm0ocix0KSk7cmV0dXJuIG59ZnVuY3Rpb24gXyhlLHQpe2lmKCF0Lmxlbmd0aClyZXR1cm5bZV07Y29uc3Qgbj1bXTtsZXQgcj0wO2Zvcihjb25zdCBpIG9mIHQpaS5yYW5nZSYmXCJmb3JtYXRBdHRyaWJ1dGVcIiE9PWkuYXR0cmlidXRlPy4kY2FzZSYmKG4ucHVzaChlLnN1YnN0cmluZyhyLGkucmFuZ2UubG9jYXRpb24pKSxyPWkucmFuZ2UubG9jYXRpb24raS5yYW5nZS5sZW5ndGgpO3JldHVybiByPGUubGVuZ3RoJiZuLnB1c2goZS5zdWJzdHJpbmcocikpLG59fSw4Njk1MzooZSx0LG4pPT57bi5kKHQse1VUOigpPT5nLFpmOigpPT5oLHFKOigpPT55LHh4OigpPT52fSk7dmFyIHI9big3MDY5MiksaT1uKDg5OTY2KSxvPW4oNzI1ODApLGE9big5Nzc4Mikscz1uKDIzODM0KSxjPW4oMzg5NzApLGw9big2OTcyOSksdT1uKDMxOTQxKSxkPW4oNDQ3ODUpLGY9bigzNzE0KSxwPW4oODQxMzApO2NvbnN0IG09KDAsYS5nZXRMb2dnZXIpKFwiW0JsaXp6YXJkXVwiKTtsZXQgaD0oKT0+eygwLHAuVikoXCJkZWZhdWx0X3Rpdl90cmFuc2FjdGlvbl9pZF9wcm92aWRlclwiKX07Y29uc3Qgdj1uZXcgUHJvbWlzZSgoZT0+e2g9ZX0pKSxnPSgpPT57Y29uc3QgZT1uZXcgUHJvbWlzZSgoZT0+e2xldCB0O3Q9bC5zdG9yZS5zdWJzY3JpYmUoYy5pRCwobj0+e24mJihlKCgwLGQuTWMpKG4uaWQpKSx0Py4oKSl9KSx7ZmlyZUltbWVkaWF0ZWx5OiExfSl9KSksdD1uZXcgdS55KGkuVU5TRVRfQVVUSF9TVEFURSk7bC5zdG9yZS5zdWJzY3JpYmUoYy5VLChlPT57dC5uZXh0KFwiXCI9PT1lP2kuVU5TRVRfQVVUSF9TVEFURTp7YXV0aFN0YXR1czppLkF1dGhTdGF0dXMuQVVUSEVOVElDQVRFRCxzc29Ub2tlbjplfSl9KSx7ZmlyZUltbWVkaWF0ZWx5OiEwfSksKDAsci5pbml0QmxpenphcmQpKHtkZWJ1Z0xvZ2dpbmdFbmFibGVkOm0uZ2V0TGV2ZWwoKT09PWEubGV2ZWxzLkRFQlVHLGFwcEVudmlyb25tZW50OnthcHBsaWNhdGlvbjpcIlNOQVBDSEFUXCIsYXBwVHlwZTpcIldFQl9ERVNLVE9QXCIsYXBwQnVpbGQ6KDAsZi5aKSgpLGFwcFZlcnNpb246XCIxMi4zNi4wLTRlZjFmNWQ3XCJ9LGNsaWVudEF1dGhQcm92aWRlcjp7c3NvQ2xpZW50SWQ6by5Tc29DbGllbnRJZC5ERVNLVE9QX1dFQixhdXRoU3RhdGU6dH0sdXNlckd1aWQ6ZSx0aXZUcmFuc2FjdGlvbklkOnYsbGlmZWN5Y2xlQ29uZmlnOntyZXBvcnRXZWJQYWdlT3BlbjohMH0sbW9kZTooMCxzLkJCKSgpP3IuQ29sbGVjdGlvbk1vZGUuUFJPRDpyLkNvbGxlY3Rpb25Nb2RlLlNUQUdFfSl9LHk9ci5sb2dFdmVudH0sODA5NTE6KGUsdCxuKT0+e24uZCh0LHtiOigpPT5hLGY6KCk9Pml9KTt2YXIgcj1uKDI2MTMwKTtmdW5jdGlvbiBpKCl7cmV0dXJuKDAsci5xRikoKT9cIk1TRlRfQVBQXCI6KDAsci5TdSkoKT9cIk1BQ19BUFBcIjooMCxyLnpVKSgpP1wiQ0hST01FX0FQUFwiOigwLHIuTnUpKCk/XCJQV0FcIjpcIkJST1dTRVJcIn1jb25zdCBvPVtcIndlYl9uYXZfbG9naW5fYnV0dG9uXCIsXCJ3ZWJfaGVyb19sb2dpbl9idXR0b25cIixcIndlYl9kb3dubG9hZF9sb2dpbl9idXR0b25cIixcIndlYl9uYXZfY2hhdF9pY29uXCIsXCJ3ZWJfdHJ5X25vd19mb290ZXJfY3RhXCIsXCJ3ZWJfbGl2ZV9sZW5zX29wZW5fc25hcGNoYXRcIixcIndlYl9jaGF0X3BvcHVwX2N0YVwiXTtmdW5jdGlvbiBhKGUpe2lmKGUmJm8uaW5jbHVkZXMoZSkpcmV0dXJuXCJDT05TVU1FUl9XRUJcIn19LDM1MDA3OihlLHQsbik9PntuLmQodCx7X2g6KCk9PlMsaEM6KCk9Pl8seSQ6KCk9PlAsZ0Q6KCk9PkYsX0o6KCk9PkIscG46KCk9Pk8sY0Y6KCk9PlYsU0s6KCk9PlUsX0E6KCk9PkgsUVQ6KCk9PkcsUFI6KCk9PkEsVHg6KCk9PmsseE46KCk9PngsR0s6KCk9PlcscjE6KCk9Pk0sTmo6KCk9PncsdkU6KCk9Pk4sSFA6KCk9PmosRjk6KCk9Pkx9KTt2YXIgcj1uKDU4ODYxKSxpPW4oNDUzNjMpLG89bi5uKGkpLGE9bigxNjc3KSxzPW4oOTc3ODIpLGM9bi5uKHMpLGw9big4Njk1MyksdT1uKDg0NjYyKSxkPW4oOTM0OSksZj1uKDc2ODc5KSxwPW4oNDQ3ODUpLG09big3MTM3MSk7YygpLmdldExvZ2dlcihcIltBc3NlcnQgVXRpbF1cIik7Y2xhc3MgaCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSksdGhpcy5tZXRyaWNOYW1lPXR9fWZ1bmN0aW9uIHYoZSx0LG4pe2lmKG51bGw9PWUpdGhyb3cgbmV3IGgodCxuKX1mdW5jdGlvbiBnKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07cmV0dXJuIGZ1bmN0aW9uKCl7dHJ5e3JldHVybiBlKC4uLmFyZ3VtZW50cyl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIGgpe2lmKG8oKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOmUubWV0cmljTmFtZT8/XCJhc3NlcnRfZXJyb3JcIixkaW1lbnNpb25zOnttZXNzYWdlOmUubWVzc2FnZX19KSx0KXRocm93IGU7KDAsbS5UYikoZSl9dGhyb3cgZX19fXZhciB5PW4oODI0OTgpLEU9big3MTYzKTtmdW5jdGlvbiBfKGUpe3JldHVybihuZXcgVGV4dEVuY29kZXIpLmVuY29kZShKU09OLnN0cmluZ2lmeShlKSl9ZnVuY3Rpb24gSShlKXtpZighZSlyZXR1cm47Y29uc3QgdD1uZXcgVGV4dERlY29kZXI7cmV0dXJuIEpTT04ucGFyc2UodC5kZWNvZGUoZSkpfWZ1bmN0aW9uIFMoZSx0LG4scixpKXtjb25zdFtvLGFdPSgwLGQuR2YpKHQpKGUoKSk7cmV0dXJue3VzZXJzUHJlc2VudENvdW50Om8sY2hhdFNvdXJjZTpyLHNuYXBTb3VyY2U6aSxkV2ViVXNlcnNQcmVzZW50Q291bnQ6YSxjaGF0UmVwbHlNZXRhZGF0YTpuP3tjaGF0X3JlcGx5X3F1b3RlZF9tZXNzYWdlX2lkOk51bWJlcihuLm1lc3NhZ2VJZCksY2hhdF9yZXBseV9pbml0aWF0aW9uX3R5cGU6bi5pbml0aWF0aW9uVHlwZSxjaGF0X3JlcGx5X3F1b3RlZF9jaGF0X2lkOm4uQW5hbHl0aWNzTWVzc2FnZUlkfTp2b2lkIDB9fWZ1bmN0aW9uIGIoZSl7Zm9yKGNvbnN0IHQgb2YgZS5jb252ZXJzYXRpb25NZXNzYWdlc01ldHJpY3NEYXRhKWlmKHQub25lVG9PbmVNZXRyaWNzRGF0YT8ucmVjaXBpZW50SWQ9PT15Lm8kKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFQoZSl7Y29uc3QgdD1bXTtsZXQgbj0wO2NvbnN0IHI9W107bGV0IGk9MDtmb3IoY29uc3QgbyBvZiBlLmNvbnZlcnNhdGlvbk1lc3NhZ2VzTWV0cmljc0RhdGEpby5ncm91cE1ldHJpY3NEYXRhPyhuKz1vLmdyb3VwTWV0cmljc0RhdGEucmVjaXBpZW50Q291bnQsdC5wdXNoKCgwLHAuTWMpKG8uY29udmVyc2F0aW9uSWQpKSk6by5vbmVUb09uZU1ldHJpY3NEYXRhJiYobisrLGkrKyxyLnB1c2goKDAscC5NYykoby5vbmVUb09uZU1ldHJpY3NEYXRhLnJlY2lwaWVudElkKSkpO3JldHVybnttaXNjaGllZl9pZHM6dC5sZW5ndGg/dC5qb2luKFwiLFwiKTp2b2lkIDAsY29ycmVzcG9uZGVudF9jb3VudDpuLGNvcnJlc3BvbmRlbnRfZ3VpZDpyLmpvaW4oXCJ+XCIpLHJlY2lwaWVudF9jb3VudDppfX1mdW5jdGlvbiBDKGUsdCl7aWYoZS5jb252ZXJzYXRpb25UeXBlPT09ci5pMS5VU0VSQ1JFQVRFREdST1VQKXJldHVybnttaXNjaGllZl9pZDooMCxwLk1jKShlLmNvbnZlcnNhdGlvbklkKX07e2NvbnN0IG49KDAsRS5qWikoZSx0KTtpZihuLmxlbmd0aClyZXR1cm57Y29ycmVzcG9uZGVudF9ndWlkOm5bMF0sdGVhbXNuYXBfaWQ6blswXT09PXkudGc/blswXTp2b2lkIDB9fXJldHVybnt9fWZ1bmN0aW9uIEEoZSx0KXsoMCxsLnFKKSh7ZXZlbnRfbmFtZTpcIkRJUkVDVF9TTkFQX0NSRUFURVwiLHNvdXJjZTp0LG5hdmlnYXRpb25fYWN0aW9uOmUubmF2aWdhdGlvbkFjdGlvbixmaWx0ZXJfbGVuc19pZDplLmxlbnNJZCxtZWRpYV90eXBlOlwiSU1BR0VcIn0pfWZ1bmN0aW9uIFIoZSx0KXtpZih0KXJldHVybigwLHAuTWMpKHQpO28oKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwibWlzc2luZ19hdHRlbXB0X2lkXCIsZGltZW5zaW9uczp7ZXZlbnRfbmFtZTplfX0pfWZ1bmN0aW9uIGsoZSx0KXtjb25zdCBuPVQoZSkscj0oMCxFLl9PKSh0KSxpPUkoZS5jb250ZW50LnBsYXRmb3JtQW5hbHl0aWNzLmNvbnRlbnQpOygwLGwucUopKHtldmVudF9uYW1lOlwiRElSRUNUX1NOQVBfU0VORFwiLG1pc2NoaWVmX2lkOm4ubWlzY2hpZWZfaWRzLG1lZGlhX3R5cGU6KDAsRS51cykodCksc25hcF9pZDplLmNvbnZlcnNhdGlvbk1lc3NhZ2VzTWV0cmljc0RhdGEubWFwKChlPT5lLmFuYWx5dGljc01lc3NhZ2VJZCkpLmpvaW4oXCIsXCIpLHNuYXBfdGltZV9pc19sb29wOiEwLHJlY2lwaWVudF9jb3VudDpuLnJlY2lwaWVudF9jb3VudCxjb3JyZXNwb25kZW50X2d1aWQ6bi5jb3JyZXNwb25kZW50X2d1aWQsY29ycmVzcG9uZGVudF9jb3VudDpuLmNvcnJlc3BvbmRlbnRfY291bnQsZmlsdGVyX2xlbnNfaWQ6cnx8XCJcIixzb3VyY2U6aT8uc25hcFNvdXJjZSxjbGllbnRfbWVzc2FnZV9pZDpSKFwiRElSRUNUX1NOQVBfU0VORFwiLGUuY29udGVudC5wbGF0Zm9ybUFuYWx5dGljcy5hdHRlbXB0SWQpfSksYihlKSYmbygpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJteWFpX3NuYXBfc2VuZFwifSl9ZnVuY3Rpb24gTyhlLHQpe2lmKGUuc3RhdHVzPT09ci5mcS5TVUNDRVNTJiZlLmNvbnZlcnNhdGlvbk1lc3NhZ2VzTWV0cmljc0RhdGEubGVuZ3RoPjApe2NvbnN0IG49VChlKSxpPWUuY29udmVyc2F0aW9uTWVzc2FnZXNNZXRyaWNzRGF0YS5yZWR1Y2UoKChlLHQpPT4odC50eXBlPT09ci5pMS5PTkVPTk9ORT9lKz0xOmUrPXQuZ3JvdXBNZXRyaWNzRGF0YT8ucmVjaXBpZW50Q291bnQ/PzAsZSkpLDApLGE9KDAsRS5sNikoZS5jb252ZXJzYXRpb25NZXNzYWdlc01ldHJpY3NEYXRhKTtsZXQgcztcInRleHRcIj09PXQuY29udGVudD8uJGNhc2UmJihzPXQuY29udGVudC50ZXh0LnRleHQubGVuZ3RoKTtjb25zdCBjPUkoZS5jb250ZW50LnBsYXRmb3JtQW5hbHl0aWNzLmNvbnRlbnQpOygwLGwucUopKHtldmVudF9uYW1lOlwiQ0hBVF9DSEFUX1NFTkRcIixoYXNfY2FtZW9zOiEwLGFjdGlvbl90czpOdW1iZXIoZS51c2VyQWN0aW9uVGltZXN0YW1wLzEwMDBuKSxjaGF0X2lkOmUuY29udmVyc2F0aW9uTWVzc2FnZXNNZXRyaWNzRGF0YVswXS5hbmFseXRpY3NNZXNzYWdlSWQsbWlzY2hpZWZfaWQ6bi5taXNjaGllZl9pZHMsY29ycmVzcG9uZGVudF9ndWlkOm4uY29ycmVzcG9uZGVudF9ndWlkLG1lZGlhX3R5cGU6KDAsRS51cykodCksbWVzc2FnZV90eXBlOigwLEUuRk8pKHQpLGNoYXJfY291bnQ6cyxjaGF0X3JlcGx5X21ldGFkYXRhOmM/LmNoYXRSZXBseU1ldGFkYXRhLGNoYXRfZXJhc2VfbW9kZTphLHJlY2lwaWVudF9jb3VudDppLHNvdXJjZTpjPy5jaGF0U291cmNlLHVzZXJfcHJlc2VudF9jb3VudDpjPy51c2Vyc1ByZXNlbnRDb3VudCxkd2ViX3VzZXJfcHJlc2VudF9jb3VudDpjPy5kV2ViVXNlcnNQcmVzZW50Q291bnQsY2xpZW50X21lc3NhZ2VfaWQ6UihcIkNIQVRfQ0hBVF9TRU5EXCIsZS5jb250ZW50LnBsYXRmb3JtQW5hbHl0aWNzLmF0dGVtcHRJZCl9KSxiKGUpJiZvKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcIm15YWlfY2hhdF9zZW5kXCJ9KX19ZnVuY3Rpb24gTihlKXtjb25zdCB0PSgwLHAuJHApKGEuQ29udGVudHMuZGVjb2RlKGUuY29udGVudC5jb250ZW50KSk7KDAsbC5xSikoe2V2ZW50X25hbWU6XCJTRU5EX01FU1NBR0VcIixtZXNzYWdlX3R5cGU6KDAsRS5VNykoZS5jb250ZW50LnBsYXRmb3JtQW5hbHl0aWNzLm1ldHJpY3NNZXNzYWdlVHlwZSksbWVkaWFfdHlwZTooMCxFLnVzKSh0KSxzZW5kX21lc3NhZ2VfYXR0ZW1wdF90eXBlOigwLEUuUTIpKGUuc2VuZE1lc3NhZ2VBdHRlbXB0VHlwZSksc2VuZF9tZXNzYWdlX3N0YXR1czpcIlNUQVJURURcIix1c2VyX2FjdGlvbl90aW1lc3RhbXA6ZS51c2VyQWN0aW9uVGltZXN0YW1wfSl9ZnVuY3Rpb24gdyhlLHQpe2NvbnN0IG49SShlLmNvbnRlbnQucGxhdGZvcm1BbmFseXRpY3MuY29udGVudCkscj1UKGUpOygwLGwucUopKHtldmVudF9uYW1lOlwiU0VORF9NRVNTQUdFXCIsc2VuZF9tZXNzYWdlX2F0dGVtcHRfaWQ6KDAscC5NYykoZS5zZW5kTWVzc2FnZUF0dGVtcHRJZCksc2VuZF9tZXNzYWdlX2F0dGVtcHRfdHlwZTooMCxFLlEyKShlLnNlbmRNZXNzYWdlQXR0ZW1wdFR5cGUpLG1lc3NhZ2VfdHlwZTooMCxFLlU3KShlLmNvbnRlbnQucGxhdGZvcm1BbmFseXRpY3MubWV0cmljc01lc3NhZ2VUeXBlKSxmZWF0dXJlX3NvdXJjZTpuPy5zbmFwU291cmNlLG1lZGlhX3R5cGU6KDAsRS51cykodCksc2VuZF9tZXNzYWdlX3N0YXJ0X3RpbWVzdGFtcDplLnN0YXJ0VGltZXN0YW1wLHNlbmRfbWVzc2FnZV9lbmRfdGltZXN0YW1wOmUuZW5kVGltZXN0YW1wLHVzZXJfYWN0aW9uX3RpbWVzdGFtcDplLnVzZXJBY3Rpb25UaW1lc3RhbXAsdG90YWxfbGF0ZW5jeTplLmVuZFRpbWVzdGFtcC1lLnN0YXJ0VGltZXN0YW1wLHJlY2lwaWVudF9saXN0OigwLEUubGgpKHtGUklFTkQ6ci5jb3JyZXNwb25kZW50X2NvdW50LEdST1VQOnIubWlzY2hpZWZfaWRzPy5sZW5ndGg/PzB9KSxmYWlsZWRfcmVjaXBpZW50X2xpc3Q6KDAsRS5saCkoKDAsRS5zdSkoZSkpLHN0ZXBfbGF0ZW5jaWVzX21zOigwLEUubGgpKE9iamVjdC5mcm9tRW50cmllcyhlLnRpbWVycy5lbnRyaWVzKCkpKSxzZW5kX21lc3NhZ2VfZmFpbHVyZV9yZWFzb246KDAsRS5TTykoZS5mYWlsdXJlUmVhc29uKSxzZW5kX21lc3NhZ2Vfc3RhdHVzOigwLEUud1cpKGUuc3RhdHVzKSxmYWlsZWRfc3RlcDooMCxFLnh3KShlLmZhaWxlZFN0ZXApLGVuY3J5cHRpb246KDAsRS5FZikoZS5tZXNzYWdlRW5jcnlwdGlvbiksZW5jcnlwdF9mYWlsdXJlOigwLEUuT28pKGUuZW5jcnlwdEZhaWx1cmUpLGFuYWx5dGljc19tZXNzYWdlX2lkczooMCxFLklYKShlLmNvbnZlcnNhdGlvbk1lc3NhZ2VzTWV0cmljc0RhdGEpLGlzX2NoYXRfcmVwbHk6dm9pZCAwIT09bj8uY2hhdFJlcGx5TWV0YWRhdGF9KX1jKCkuZ2V0TG9nZ2VyKFwiW0V2ZW50IExvZ2dlcnNdXCIpO2xldCBEPSExO2Z1bmN0aW9uIFAoZSx0KXtjb25zdCBuPWYuQ1YuY2FwdHVyZVRpbWUoKTtsZXQgcjtEfHxuLmxvc3RDb25uZWN0aW9ufHwocj1NYXRoLnJvdW5kKG4uZWxhcHNlZCkpLCgwLGwucUopKHtldmVudF9uYW1lOlwiQVBQX1NUQVJUVVBfRkVFRF9SRUFEWVwiLGZhaWx1cmVfcmVhc29uOnQsbGF0ZW5jeV9taWxsaXM6cn0pLG8oKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwibG9nX2FzZnJcIixkaW1lbnNpb25zOntzeW5jX3JlYXNvbjplLGlzX2NvbGQ6U3RyaW5nKCgwLHUuckgpKCkpLGhhc19sYXRlbmN5OlN0cmluZyh2b2lkIDAhPT1yKX19KSxEfHwoRD0hMCl9ZnVuY3Rpb24gTShlLHQpeygwLGwucUopKHtldmVudF9uYW1lOlwiRklMVEVSX0xFTlNfU1dJUEVcIixmaWx0ZXJfbGVuc19pZDplLHZpZXdfdGltZV9zZWM6dH0pfWNvbnN0IEw9bmV3IFNldDtmdW5jdGlvbiBVKGUpe2lmKEwuaGFzKGUuYW5hbHl0aWNzTWVzc2FnZUlkKSlyZXR1cm47aWYoISgwLEUubHYpKGUuY29udGVudCkpcmV0dXJuIHZvaWQgTC5hZGQoZS5hbmFseXRpY3NNZXNzYWdlSWQpO2NvbnN0IHQ9e2V2ZW50X25hbWU6XCJDSEFUX0NIQVRfVklFV1wiLGFja190aW1lX3NlYzplLm1lc3NhZ2VUaW1lc3RhbXA/TWF0aC5yb3VuZCgoRGF0ZS5ub3coKS1OdW1iZXIoZS5tZXNzYWdlVGltZXN0YW1wKSkvMWUzKTp2b2lkIDAsY2hhdF9pZDplLmFuYWx5dGljc01lc3NhZ2VJZCxoYXNfY2FtZW9zOiEwLGNoYXRfcmVwbHlfbWV0YWRhdGE6ZS5jaGF0UmVwbHlNZXRhZGF0YSxzb3VyY2U6ZS5zb3VyY2V9O2UucmVhY3Rpb25JbnRlbnRJZD8odC5yZWFjdGlvbl9pbnRlbnRfaWQ9U3RyaW5nKGUucmVhY3Rpb25JbnRlbnRJZCksdC5tZXNzYWdlX3R5cGU9XCJTVElDS0VSXCIsdC5tZWRpYV90eXBlPVwiUkVBQ1RJT05cIik6KHQubWVzc2FnZV90eXBlPSgwLEUuRk8pKGUuY29udGVudCksdC5tZWRpYV90eXBlPSgwLEUudXMpKGUuY29udGVudCkpO2NvbnN0IG49ZS5jb252LmNvbnZlcnNhdGlvblR5cGU9PT1yLmkxLlVTRVJDUkVBVEVER1JPVVAse21pc2NoaWVmX2lkOmksY29ycmVzcG9uZGVudF9ndWlkOm8sdGVhbXNuYXBfaWQ6YX09QyhlLmNvbnYsZS5jdXJyZW50VXNlcklkKTtpZih0Lm1pc2NoaWVmX2lkPWksdC5jb3JyZXNwb25kZW50X2d1aWQ9byx0LnRlYW1zbmFwX2lkPWEsIW4pe2NvbnN0IG49TnVtYmVyKGUuY29udi5yZXRlbnRpb25Qb2xpY3kucmVhZFJldGVudGlvblRpbWVTZWNvbmRzKTt0LmNoYXRfZXJhc2VfbW9kZT0oMCxFLm13KShuKX1cIm5vdGVcIj09PWUuY29udGVudC5jb250ZW50Py4kY2FzZSYmXCJhdWRpb1wiPT09ZS5jb250ZW50LmNvbnRlbnQubm90ZS5ub3RlPy4kY2FzZSYmZS5jb250ZW50LmNvbnRlbnQubm90ZS5ub3RlLmF1ZGlvLm5vdGUmJih0Lm5vdGVfdGltZV9zZWM9ZS5jb250ZW50LmNvbnRlbnQubm90ZS5ub3RlLmF1ZGlvLm5vdGUubWVkaWFEdXJhdGlvbk1zLzFlMyksXCJleHRlcm5hbE1lZGlhXCI9PT1lLmNvbnRlbnQuY29udGVudD8uJGNhc2UmJmUuY29udGVudC5jb250ZW50LmV4dGVybmFsTWVkaWEuc25hcGRvY1swXSYmZS5jb250ZW50LmNvbnRlbnQuZXh0ZXJuYWxNZWRpYS5zbmFwZG9jWzBdLnNwZWN0YWNsZXMmJih0LmNhbWVyYT0yKSwoMCxsLnFKKSh0KSxMLmFkZChlLmFuYWx5dGljc01lc3NhZ2VJZCl9ZnVuY3Rpb24geChlLHQpe2NvbnN0IG49e2V2ZW50X25hbWU6XCJESVJFQ1RfU05BUF9WSUVXXCIsbWVkaWFfdHlwZTooMCxFLm9rKSh0LnNuYXBkb2MpLHdpdGhfYW5pbWF0ZWQ6dC5zbmFwZG9jLmNyZWF0aXZlVG9vbHNBbmFseXRpY3M/LmNvbnRhaW5zQW5pbWF0ZWRTdGlja2VycyxzbmFwX2lkOmUubWVzc2FnZUFuYWx5dGljcy5hbmFseXRpY3NNZXNzYWdlSWQsYWNrX3RpbWVfc2VjOk1hdGgucm91bmQoKERhdGUubm93KCktTnVtYmVyKHQubWVzc2FnZVRpbWVzdGFtcCkpLzFlMyksc291cmNlOlwiQ0hBVFwiLHdpdGhfYXR0YWNobWVudDooMCxFLlBoKSh0LnNuYXBkb2MpfSxyPXQuc25hcGRvYy5wbGF5YmFjayx7bWlzY2hpZWZfaWQ6aSxjb3JyZXNwb25kZW50X2d1aWQ6byx0ZWFtc25hcF9pZDphfT1DKHQuY29udix0LmN1cnJlbnRVc2VySWQpO24ubWlzY2hpZWZfaWQ9aSxuLmNvcnJlc3BvbmRlbnRfZ3VpZD1vLG4udGVhbXNuYXBfaWQ9YSx0LnZpZXdlZFRpbWVJblNlYyYmKG4udmlld190aW1lX3NlYz1NYXRoLnJvdW5kKHQudmlld2VkVGltZUluU2VjKSksXCJpbmZpbml0ZVwiPT09cj8ucGxheWJhY2tDaGFyYWN0ZXJpc3RpY3M/LmRpc3BsYXlEdXJhdGlvbj8uJGNhc2U/bi5zbmFwX3RpbWVfaXNfbG9vcD0hMDpcImR1cmF0aW9uU2Vjb25kc1wiPT09cj8ucGxheWJhY2tDaGFyYWN0ZXJpc3RpY3M/LmRpc3BsYXlEdXJhdGlvbj8uJGNhc2UmJihuLnNuYXBfdGltZV9zZWM9ci5wbGF5YmFja0NoYXJhY3RlcmlzdGljcy5kaXNwbGF5RHVyYXRpb24uZHVyYXRpb25TZWNvbmRzLHZvaWQgMCE9PW4udmlld190aW1lX3NlYyYmKG4uZnVsbF92aWV3PW4uc25hcF90aW1lX3NlYy1uLnZpZXdfdGltZV9zZWM8LjAxKSksdC5zbmFwZG9jLmxlbnMmJihuLmZpbHRlcl9sZW5zX2lkPXQuc25hcGRvYy5sZW5zLmlkKSwoMCxsLnFKKShuKX1jb25zdCBGPWcoKChlLHQsbixyLGkpPT57Y29uc3Qgbz1cImxvZ19ibGl6emFyZF9mYWlsdXJlX2NoYXRfY2hhdF9lcmFzZVwiO3YocixcImVtcHR5X2N1cnJlbnRfdXNlcl9pZFwiLG8pLHYobixcImVtcHR5X2NvbnZlcnNhdGlvblwiLG8pO2NvbnN0IHM9ZS5tZXNzYWdlQ29udGVudD8uY29udGVudDt2KHMsXCJlbXB0eV9tZXNzYWdlX2NvbnRlbnRcIixvKTtjb25zdCBjPSgwLHAuJHApKGEuQ29udGVudHMuZGVjb2RlKHMpKSx1PXtldmVudF9uYW1lOlwiQ0hBVF9DSEFUX0VSQVNFXCIsc2F2ZV9jb3VudDplLm1ldGFkYXRhLnNhdmVkQnkubGVuZ3RoLHJlYWN0aW9uX2NvdW50OmUubWV0YWRhdGEucmVhY3Rpb25zLmxlbmd0aCxlcmFzZV90eXBlOnQsbWVkaWFfdHlwZTppP1wiUkVBQ1RJT05cIjooMCxFLnVzKShjKSxtZXNzYWdlX3R5cGU6aT9cIlNUSUNLRVJcIjooMCxFLkZPKShjKX07aSYmKHUuY2hhdF9pZD1TdHJpbmcoaS5yZWFjdGlvbklkKSx1LnJlYWN0aW9uX2ludGVudF9pZD1TdHJpbmcoaS5yZWFjdGlvbkNvbnRlbnQuaW50ZW50aW9uVHlwZSkpLCgwLGwucUopKHUpfSkpLEI9ZygoKGUsdCxuKT0+e2NvbnN0IHI9XCJsb2dfYmxpenphcmRfZmFpbHVyZV9jaGF0X2NoYXRfc2F2ZVwiO3YobixcImVtcHR5X2N1cnJlbnRfdXNlcl9pZFwiLHIpLHYodCxcImVtcHR5X2NvbnZlcnNhdGlvblwiLHIpO2NvbnN0IGk9ZS5tZXNzYWdlQ29udGVudD8uY29udGVudDt2KGksXCJlbXB0eV9tZXNzYWdlX2NvbnRlbnRcIixyKTtjb25zdCBvPSgwLHAuJHApKGEuQ29udGVudHMuZGVjb2RlKGkpKSxzPU51bWJlcih0LnJldGVudGlvblBvbGljeS5yZWFkUmV0ZW50aW9uVGltZVNlY29uZHMpO2xldCBjLHU7aWYoXCJ0ZXh0XCI9PT1vLmNvbnRlbnQ/LiRjYXNlKXtjb25zdCBlPVtdO2Zvcihjb25zdCB0IG9mIG8uY29udGVudC50ZXh0LmF0dHJpYnV0ZXMpXCJtZW50aW9uXCI9PT10LmF0dHJpYnV0ZT8uJGNhc2UmJmUucHVzaCh0LmF0dHJpYnV0ZS5tZW50aW9uLnVzZXJJZCk7Yz1lLmxlbmd0aCx1PW5ldyBTZXQoZSkuc2l6ZX0oMCxsLnFKKSh7ZXZlbnRfbmFtZTpcIkNIQVRfQ0hBVF9TQVZFXCIsbWVkaWFfdHlwZTooMCxFLnVzKShvKSxtZXNzYWdlX3R5cGU6KDAsRS5GTykobyksY2hhdF9pZDplLm1lc3NhZ2VBbmFseXRpY3MuYW5hbHl0aWNzTWVzc2FnZUlkLGlzX3NlbmRlcjooMCxwLk1jKShlLnNlbmRlcklkKT09PW4scmVhY3Rpb25fY291bnQ6ZS5tZXRhZGF0YS5yZWFjdGlvbnMubGVuZ3RoLGNoYXRfZXJhc2VfbW9kZTooMCxFLm13KShzKSxtZW50aW9uX2NvdW50OmMsdW5pcXVlX21lbnRpb25fY291bnQ6dSwuLi5DKHQsbil9KX0pKSxWPWcoKChlLHQsbik9Pntjb25zdCByPVwibG9nX2JsaXp6YXJkX2ZhaWx1cmVfY2hhdF9jaGF0X3Vuc2F2ZVwiO3YobixcImVtcHR5X2N1cnJlbnRfdXNlcl9pZFwiLHIpLHYodCxcImVtcHR5X2NvbnZlcnNhdGlvblwiLHIpO2NvbnN0IGk9ZS5tZXNzYWdlQ29udGVudD8uY29udGVudDt2KGksXCJlbXB0eV9tZXNzYWdlX2NvbnRlbnRcIixyKTtjb25zdCBvPSgwLHAuJHApKGEuQ29udGVudHMuZGVjb2RlKGkpKTsoMCxsLnFKKSh7ZXZlbnRfbmFtZTpcIkNIQVRfQ0hBVF9VTlNBVkVcIixtZWRpYV90eXBlOigwLEUudXMpKG8pLG1lc3NhZ2VfdHlwZTooMCxFLkZPKShvKSxpc19zZW5kZXI6KDAscC5NYykoZS5zZW5kZXJJZCk9PT1uLGNoYXRfaWQ6ZS5tZXNzYWdlQW5hbHl0aWNzLmFuYWx5dGljc01lc3NhZ2VJZCwuLi5DKHQsbil9KX0pKTtmdW5jdGlvbiBHKGUpeygwLGwucUopKHtldmVudF9uYW1lOlwiQ0hBVF9NSVNDSElFRl9DUkVBVEVcIixtaXNjaGllZl9pZDooMCxwLk1jKShlLmNvbnZlcnNhdGlvbklkKSxyZWNpcGllbnRfY291bnQ6ZS5wYXJ0aWNpcGFudHMubGVuZ3RoLTF9KX1mdW5jdGlvbiBIKGUpeygwLGwucUopKHtldmVudF9uYW1lOlwiQ0hBVF9NSVNDSElFRl9BRERcIixtaXNjaGllZl9pZDplfSl9ZnVuY3Rpb24gVyhlKXtsZXR7c3R1ZHlOYW1lOnQsZXhwZXJpbWVudElkOm59PWU7cmV0dXJuKDAsbC5xSikoe2V2ZW50X25hbWU6XCJFWFBFUklNRU5UX1VTRVJfVFJFQVRNRU5UXCIsZXhwZXJpbWVudF9pZDpuLHN0dWR5X25hbWU6dH0pfWZ1bmN0aW9uIGooZSx0LG4scil7KDAsbC5xSikoe2V2ZW50X25hbWU6XCJXRUJfVVBTRUxMXCIsc291cmNlOnQsc3VyZmFjZTpuLGFjdGlvbjplLGFkZGl0aW9uYWxEYXRhOkpTT04uc3RyaW5naWZ5KHIpfSl9fSw3NDg1MDooZSx0LG4pPT57bi5kKHQse0JPOigpPT5yLEs3OigpPT5jLFpfOigpPT5hLG9UOigpPT5pfSk7Y29uc3Qgcj1cIm5vdGlmX3R5cGVcIixpPVwibm90aWZfaWRcIjtsZXQgbyxhO2Z1bmN0aW9uIHMoKXtvPW5ldyBQcm9taXNlKChlPT57YT1mdW5jdGlvbigpe2UoLi4uYXJndW1lbnRzKSxzZXRUaW1lb3V0KCgoKT0+e3MoKX0pLDEwMCl9fSkpfWFzeW5jIGZ1bmN0aW9uIGMoKXtjb25zdCBlPXNldFRpbWVvdXQoKCgpPT57YSh2b2lkIDApfSksMTAwKSx0PWF3YWl0IG87cmV0dXJuIGNsZWFyVGltZW91dChlKSxzKCksdH1zKCl9LDcxNjM6KGUsdCxuKT0+e24uZCh0LHtFZjooKT0+VCxGTzooKT0+dSxJWDooKT0+QSxPbzooKT0+QyxQaDooKT0+bSxRMjooKT0+XyxTTzooKT0+SSxVNzooKT0+RSxfTzooKT0+ZCxqWjooKT0+eSxsNjooKT0+bCxsaDooKT0+ayxsdjooKT0+ZyxtdzooKT0+aCxuUjooKT0+dixvazooKT0+cCxzdTooKT0+Uix1czooKT0+Zix3VzooKT0+Yix4dzooKT0+U30pO3ZhciByPW4oMTg0NDYpLGk9bi5uKHIpLG89big1ODg2MSksYT1uKDc3NDIpLHM9big0NDUzNyksYz1uKDQ0Nzg1KTtmdW5jdGlvbiBsKGUpe2lmKCFlLmxlbmd0aClyZXR1cm47Y29uc3QgdD1lWzBdO3JldHVybiB0Lm9uZVRvT25lTWV0cmljc0RhdGE/aChOdW1iZXIodC5vbmVUb09uZU1ldHJpY3NEYXRhLnJldGVudGlvblBvbGljeS5yZWFkUmV0ZW50aW9uVGltZVNlY29uZHMpKTp2b2lkIDB9ZnVuY3Rpb24gdShlKXtzd2l0Y2goZS5jb250ZW50Py4kY2FzZSl7Y2FzZVwidGV4dFwiOnJldHVyblwiVEVYVFwiO2Nhc2VcImNyZWF0aXZlVG9vbEl0ZW1cIjpyZXR1cm5cIkNSRUFUSVZFX1RPT0xfSVRFTVwiO2Nhc2VcInN0aWNrZXJcIjpyZXR1cm5cIlNUSUNLRVJcIjtjYXNlXCJub3RlXCI6cmV0dXJuXCJOT1RFXCI7Y2FzZVwic2hhcmVcIjpjYXNlXCJsb2NhdGlvblwiOmNhc2VcInNuYXBSZXBseVwiOmRlZmF1bHQ6cmV0dXJuO2Nhc2VcImV4dGVybmFsTWVkaWFcIjpyZXR1cm5cIk1FRElBXCI7Y2FzZVwiY2FudmFzQXBwXCI6cmV0dXJuXCJDQU5WQVNfQVBQX1NIQVJFXCI7Y2FzZVwic25hcGRvY1wiOnJldHVyblwiU05BUFwiO2Nhc2VcImxpdmVMb2NhdGlvblNoYXJlXCI6cmV0dXJuXCJMSVZFX0xPQ0FUSU9OX1NIQVJFXCI7Y2FzZVwiZmFtaWx5Q2VudGVySW52aXRlXCI6cmV0dXJuXCJGQU1JTFlfQ0VOVEVSX0lOVklURVwifX1mdW5jdGlvbiBkKGUpe2lmKFwic25hcGRvY1wiPT09ZS5jb250ZW50Py4kY2FzZSlyZXR1cm4gZS5jb250ZW50LnNuYXBkb2MubGVucz9lLmNvbnRlbnQuc25hcGRvYy5sZW5zLmlkOnZvaWQgMH1mdW5jdGlvbiBmKGUpe3N3aXRjaChlLmNvbnRlbnQ/LiRjYXNlKXtjYXNlXCJ0ZXh0XCI6cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKCFlLmF0dHJpYnV0ZXMubGVuZ3RoKXJldHVyblwiVEVYVFwiO2Zvcihjb25zdCB0IG9mIGUuYXR0cmlidXRlcylpZihcIm1lZGlhQXR0cmlidXRlXCI9PT10LmF0dHJpYnV0ZT8uJGNhc2Upc3dpdGNoKHQuYXR0cmlidXRlLm1lZGlhQXR0cmlidXRlLnRleHRNZWRpYUF0dHJpYnV0ZVR5cGUpe2Nhc2UgYS5UZXh0TWVkaWFBdHRyaWJ1dGVfVGV4dE1lZGlhQXR0cmlidXRlVHlwZS5BRERSRVNTOnJldHVyblwiTE9DQVRJT05cIjtjYXNlIGEuVGV4dE1lZGlhQXR0cmlidXRlX1RleHRNZWRpYUF0dHJpYnV0ZVR5cGUuUEhPTkU6cmV0dXJuXCJQSE9ORV9OVU1CRVJcIjtjYXNlIGEuVGV4dE1lZGlhQXR0cmlidXRlX1RleHRNZWRpYUF0dHJpYnV0ZVR5cGUuRU1BSUw6Y2FzZSBhLlRleHRNZWRpYUF0dHJpYnV0ZV9UZXh0TWVkaWFBdHRyaWJ1dGVUeXBlLk1FTlRJT046Y2FzZSBhLlRleHRNZWRpYUF0dHJpYnV0ZV9UZXh0TWVkaWFBdHRyaWJ1dGVUeXBlLlVOUkVDT0dOSVpFRDpkZWZhdWx0OnJldHVyblwiVEVYVFwifWVsc2UgaWYoXCJ1cmxBdHRyaWJ1dGVcIj09PXQuYXR0cmlidXRlPy4kY2FzZSlyZXR1cm5cIlVSTFwiO3JldHVyblwiVEVYVFwifShlLmNvbnRlbnQudGV4dCk7Y2FzZVwibm90ZVwiOnJldHVyblwiQVVESU9cIjtjYXNlXCJzdGlja2VyXCI6cmV0dXJuXCJJTUFHRVwiO2Nhc2VcInNoYXJlXCI6ZGVmYXVsdDpyZXR1cm47Y2FzZVwiZXh0ZXJuYWxNZWRpYVwiOnJldHVybiBwKGUuY29udGVudC5leHRlcm5hbE1lZGlhLnNuYXBkb2NbMF0pO2Nhc2VcInNuYXBkb2NcIjpyZXR1cm4gcChlLmNvbnRlbnQuc25hcGRvYyl9fWZ1bmN0aW9uIHAoZSl7aWYoZSl7aWYoZS5jcmVhdGl2ZVRvb2xzQW5hbHl0aWNzPy5pc0ltYWdlV2l0aEFuaW1hdGVkU3RpY2tlcilyZXR1cm5cIklNQUdFXCI7aWYoZS5nZW5lcmF0ZWRDYW1lbylyZXR1cm5cIkJMT09QXCI7e2xldCB0O2Zvcihjb25zdCBuIG9mIGUucGxheWJhY2s/LnBsYXliYWNrTGF5ZXJzPz9bXSlpZihcIm1lZGlhXCI9PT1uLmxheWVyPy4kY2FzZSl7dD1uLmxheWVyLm1lZGlhO2JyZWFrfWNvbnN0IG49ZS5wbGF5YmFjaz8ucGxheWJhY2tDaGFyYWN0ZXJpc3RpY3M7c3dpdGNoKHQ/LnR5cGUpe2Nhc2Ugcy5NZWRpYU1ldGFkYXRhX01lZGlhVHlwZS5JTUFHRTpyZXR1cm5cIklNQUdFXCI7Y2FzZSBzLk1lZGlhTWV0YWRhdGFfTWVkaWFUeXBlLkdJRjpyZXR1cm5cIkdJRlwiO2Nhc2Ugcy5NZWRpYU1ldGFkYXRhX01lZGlhVHlwZS5BVURJTzpyZXR1cm5cIkFVRElPXCI7Y2FzZSBzLk1lZGlhTWV0YWRhdGFfTWVkaWFUeXBlLlZJREVPOnJldHVybiB0Lmhhc1NvdW5kfHxuPy5oYXNTb3VuZD9cIlZJREVPXCI6XCJWSURFT19OT19TT1VORFwiO2Nhc2Ugcy5NZWRpYU1ldGFkYXRhX01lZGlhVHlwZS5VTlJFQ09HTklaRUQ6Y2FzZSBzLk1lZGlhTWV0YWRhdGFfTWVkaWFUeXBlLlVOS05PV046ZGVmYXVsdDpyZXR1cm59fX19ZnVuY3Rpb24gbShlKXtyZXR1cm4gQm9vbGVhbihlLmF0dGFjaG1lbnRzPy5hdHRhY2htZW50cy5maW5kKChlPT5cIndlYlBhZ2VcIj09PWUuYXR0YWNobWVudD8uJGNhc2UmJmUuYXR0YWNobWVudC53ZWJQYWdlLnVybC5sZW5ndGg+MCkpKX1mdW5jdGlvbiBoKGUpe3JldHVybiBlPjA/XCJIT1VSMjRcIjpcIklNTUVESUFURVwifWZ1bmN0aW9uIHYoZSl7c3dpdGNoKGUpe2Nhc2Ugby5CSi5BVkFJTEFCTEU6cmV0dXJuXCJBVkFJTEFCTEVcIjtjYXNlIG8uQkouREVMRVRFRDpyZXR1cm5cIkRFTEVURURcIjtjYXNlIG8uQkouSk9JTkVEQUZURVJPUklHSU5BTE1FU1NBR0VTRU5UOnJldHVyblwiSk9JTkVEX0FGVEVSX09SSUdJTkFMX01FU1NBR0VfU0VOVFwiO2Nhc2Ugby5CSi5VTkFWQUlMQUJMRTpyZXR1cm5cIlVOQVZBSUxBQkxFXCI7Y2FzZSBvLkJKLlNUT1JZTUVESUFERUxFVEVEQllQT1NURVI6Y2FzZSBvLkJKLlVOS05PV046cmV0dXJuXCJVTktOT1dOXCJ9fWZ1bmN0aW9uIGcoZSl7c3dpdGNoKGUuY29udGVudD8uJGNhc2Upe2Nhc2VcInRleHRcIjpjYXNlXCJzdGlja2VyXCI6Y2FzZVwic2hhcmVcIjpjYXNlXCJub3RlXCI6Y2FzZVwibG9jYXRpb25cIjpjYXNlXCJleHRlcm5hbE1lZGlhXCI6Y2FzZVwiY2FudmFzQXBwXCI6Y2FzZVwic25hcFJlcGx5XCI6Y2FzZVwibGl2ZUxvY2F0aW9uU2hhcmVcIjpjYXNlXCJjcmVhdGl2ZVRvb2xJdGVtXCI6Y2FzZVwiZmFtaWx5Q2VudGVySW52aXRlXCI6cmV0dXJuITA7Y2FzZVwic3RhdHVzTWVzc2FnZVwiOmNhc2VcInNuYXBkb2NcIjpjYXNlXCJub25QYXJ0aWNpcGFudEJvdFJlc3BvbnNlXCI6Y2FzZSB2b2lkIDA6cmV0dXJuITF9fWZ1bmN0aW9uIHkoZSx0KXtjb25zdCBuPWUucGFydGljaXBhbnRzLm1hcCgoZT0+KDAsYy5NYykoZS5wYXJ0aWNpcGFudElkKSkpO3JldHVybiBlLmNvbnZlcnNhdGlvblR5cGU9PT1vLmkxLlVTRVJDUkVBVEVER1JPVVB8fDE9PT1uLmxlbmd0aD9uOm4uZmlsdGVyKChlPT4haSgpKGUsdCkpKX1mdW5jdGlvbiBFKGUpe3N3aXRjaChlKXtjYXNlIG8uS3UuVEVYVDpyZXR1cm5cInRleHRcIjtjYXNlIG8uS3UuU1RJQ0tFUjpyZXR1cm5cInN0aWNrZXJfdGV4dFwiO2Nhc2Ugby5LdS5DVVNUT01fU1RJQ0tFUjpyZXR1cm5cImN1c3RvbV9zdGlja2VyX3RleHRcIjtjYXNlIG8uS3UuU05BUDpyZXR1cm5cInNuYXBfdGV4dFwiO2Nhc2Ugby5LdS5BVURJT19OT1RFOnJldHVyblwiYXVkaW9fbm90ZV90ZXh0XCI7Y2FzZSBvLkt1Lk1FRElBOnJldHVyblwibWVkaWFfdGV4dFwiO2Nhc2Ugby5LdS5CQVRDSEVEX01FRElBOnJldHVyblwiYmF0Y2hlZF9tZWRpYV90ZXh0XCI7Y2FzZSBvLkt1Lk1JU1NFRF9BVURJT19DQUxMOnJldHVyblwibWlzc2VkX2F1ZGlvX2NhbGxfdGV4dFwiO2Nhc2Ugby5LdS5NSVNTRURfVklERU9fQ0FMTDpyZXR1cm5cIm1pc3NlZF92aWRlb19jYWxsX3RleHRcIjtjYXNlIG8uS3UuSk9JTkVEX0NBTEw6cmV0dXJuXCJqb2luZWRfY2FsbF90ZXh0XCI7Y2FzZSBvLkt1LkxFRlRfQ0FMTDpyZXR1cm5cImxlZnRfY2FsbF90ZXh0XCI7Y2FzZSBvLkt1LlNOQVBDSEFUVEVSOnJldHVyblwic25hcGNoYXR0ZXJfdGV4dFwiO2Nhc2Ugby5LdS5MT0NBVElPTl9TSEFSRTpyZXR1cm5cImxvY2F0aW9uX3NoYXJlX3RleHRcIjtjYXNlIG8uS3UuTE9DQVRJT05fUkVRVUVTVDpyZXR1cm5cImxvY2F0aW9uX3JlcXVlc3RfdGV4dFwiO2Nhc2Ugby5LdS5TQ1JFRU5TSE9UOnJldHVyblwic2NyZWVuc2hvdF90ZXh0XCI7Y2FzZSBvLkt1LlNDUkVFTl9SRUNPUkRJTkc6cmV0dXJuXCJzY3JlZW5fcmVjb3JkaW5nX3RleHRcIjtjYXNlIG8uS3UuR0FNRV9DTE9TRUQ6cmV0dXJuXCJnYW1lX2Nsb3NlZF90ZXh0XCI7Y2FzZSBvLkt1LlNUT1JZX1NIQVJFOnJldHVyblwic3Rvcnlfc2hhcmVfdGV4dFwiO2Nhc2Ugby5LdS5NQVBfRFJPUF9TSEFSRTpyZXR1cm5cIm1hcF9kcm9wX3NoYXJlX3RleHRcIjtjYXNlIG8uS3UuTUFQX1NUT1JZX1NIQVJFOnJldHVyblwibWFwX3N0b3J5X3NoYXJlX3RleHRcIjtjYXNlIG8uS3UuTUFQX1NUT1JZX1NOQVBfU0hBUkU6cmV0dXJuXCJtYXBfc3Rvcnlfc25hcF9zaGFyZV90ZXh0XCI7Y2FzZSBvLkt1Lk1BUF9IRUFUX1NOQVBfU0hBUkU6cmV0dXJuXCJtYXBfaGVhdF9zbmFwX3NoYXJlX3RleHRcIjtjYXNlIG8uS3UuTUFQX1NDUkVFTlNIT1RfU0hBUkU6cmV0dXJuXCJtYXBfc2NyZWVuc2hvdF9zaGFyZV90ZXh0XCI7Y2FzZSBvLkt1Lk1FTU9SSUVTX1NUT1JZOnJldHVyblwibWVtb3JpZXNfc3RvcnlfdGV4dFwiO2Nhc2Ugby5LdS5TRUFSQ0hfU1RPUllfU0hBUkU6cmV0dXJuXCJzZWFyY2hfc3Rvcnlfc2hhcmVfdGV4dFwiO2Nhc2Ugby5LdS5TRUFSQ0hfU1RPUllfU05BUF9TSEFSRTpyZXR1cm5cInNlYXJjaF9zdG9yeV9zbmFwX3NoYXJlX3RleHRcIjtjYXNlIG8uS3UuRElTQ09WRVJfU0hBUkU6cmV0dXJuXCJkaXNjb3Zlcl9zaGFyZV90ZXh0XCI7Y2FzZSBvLkt1LlNIQVpBTV9TSEFSRTpyZXR1cm5cInNoYXphbV9zaGFyZV90ZXh0XCI7Y2FzZSBvLkt1LlNBVkVfVE9fQ0FNRVJBX1JPTEw6cmV0dXJuXCJzYXZlX3RvX2NhbWVyYV9yb2xsX3RleHRcIjtjYXNlIG8uS3UuR0FNRV9TQ09SRV9TSEFSRTpyZXR1cm5cImdhbWVfc2NvcmVfc2hhcmVfdGV4dFwiO2Nhc2Ugby5LdS5TTkFQX1BST19QUk9GSUxFX1NIQVJFOnJldHVyblwic25hcF9wcm9fcHJvZmlsZV9zaGFyZV90ZXh0XCI7Y2FzZSBvLkt1LlNOQVBfUFJPX1NOQVBfU0hBUkU6cmV0dXJuXCJzbmFwX3Byb19zbmFwX3NoYXJlX3RleHRcIjtjYXNlIG8uS3UuQ0FOVkFTX0FQUF9TSEFSRTpyZXR1cm5cImNhbnZhc19hcHBfc2hhcmVfdGV4dFwiO2Nhc2Ugby5LdS5BRF9TSEFSRTpyZXR1cm5cImFkX3NoYXJlX3RleHRcIjtjYXNlIG8uS3UuU1RPUllfUkVQTFk6cmV0dXJuXCJzdG9yeV9yZXBseV90ZXh0XCI7Y2FzZSBvLkt1LlNQT1RMSUdIVF9TVE9SWV9TSEFSRTpyZXR1cm5cInNwb3RsaWdodF9zdG9yeV9zaGFyZV90ZXh0XCI7Y2FzZSBvLkt1LkNBTUVPOnJldHVyblwiY2FtZW9fdGV4dFwiO2Nhc2Ugby5LdS5NRU1PSkk6cmV0dXJuXCJtZW1vamlfdGV4dFwiO2Nhc2Ugby5LdS5CSVRNT0pJX09VVEZJVF9TSEFSRTpyZXR1cm5cImJpdG1vamlfb3V0Zml0X3NoYXJlX3RleHRcIjtjYXNlIG8uS3UuTElWRV9MT0NBVElPTl9TSEFSRTpyZXR1cm5cImxpdmVfbG9jYXRpb25fc2hhcmVfdGV4dFwiO2Nhc2Ugby5LdS5DUkVBVElWRV9UT09MX0lURU06cmV0dXJuXCJjcmVhdGl2ZV90b29sX2l0ZW1fdGV4dFwiO2Nhc2Ugby5LdS5TTkFQX0tJVF9JTlZJVEVfU0hBUkU6cmV0dXJuXCJzbmFwX2tpdF9pbnZpdGVfc2hhcmVfdGV4dFwiO2Nhc2Ugby5LdS5RVU9URV9SRVBMWV9TSEFSRTpyZXR1cm5cInF1b3RlX3JlcGx5X3NoYXJlX3RleHRcIjtjYXNlIG8uS3UuQkxPT1BTX1NUT1JZX1NIQVJFOnJldHVyblwiYmxvb3BzX3N0b3J5X3NoYXJlX3RleHRcIjtjYXNlIG8uS3UuU05BUF9QUk9fU0FWRURfU1RPUllfU0hBUkU6cmV0dXJuXCJzbmFwX3Byb19zYXZlZF9zdG9yeV9zaGFyZV90ZXh0XCI7Y2FzZSBvLkt1LlBMQUNFX1BST0ZJTEVfU0hBUkU6cmV0dXJuXCJwbGFjZV9wcm9maWxlX3NoYXJlX3RleHRcIjtjYXNlIG8uS3UuUExBQ0VfU1RPUllfU0hBUkU6cmV0dXJuXCJwbGFjZV9zdG9yeV9zaGFyZV90ZXh0XCI7Y2FzZSBvLkt1LlNBVkVEX1NUT1JZX1NIQVJFOnJldHVyblwic2F2ZWRfc3Rvcnlfc2hhcmVfdGV4dFwifX1mdW5jdGlvbiBfKGUpe3N3aXRjaChlKXtjYXNlIG8ubTIuVVNFUl9JTklUSUFURUQ6cmV0dXJuXCJVU0VSX0lOSVRJQVRFRFwiO2Nhc2Ugby5tMi5VU0VSX1JFVFJZOnJldHVyblwiVVNFUl9SRVRSWVwiO2Nhc2Ugby5tMi5BVVRPX1JFVFJZOmNhc2Ugby5tMi5SRVRSWV9QRU5ESU5HOnJldHVyblwiQVVUT19SRVRSWVwifX1mdW5jdGlvbiBJKGUpe2lmKHZvaWQgMCE9PWUpc3dpdGNoKGUpe2Nhc2Ugby5TOS5SQVRFX0xJTUlURUQ6cmV0dXJuXCJSQVRFX0xJTUlURURcIjtjYXNlIG8uUzkuTE9DS0VEOmNhc2Ugby5TOS5TRVJWRVJfREVOSUVEOnJldHVybn19ZnVuY3Rpb24gUyhlKXtpZih2b2lkIDAhPT1lKXN3aXRjaChlKXtjYXNlIG8ueW4uUFJFX1NFTkRfVVBEQVRFOnJldHVyblwiUFJFX1NFTkRfVVBEQVRFXCI7Y2FzZSBvLnluLlZBTElEQVRFX09SREVSX1NURVA6cmV0dXJuXCJWQUxJREFURV9PUkRFUl9TVEVQXCI7Y2FzZSBvLnluLlZBTElEQVRFX05FVFdPUktfU1RFUDpyZXR1cm5cIlZBTElEQVRFX05FVFdPUktfU1RFUFwiO2Nhc2Ugby55bi5DUkVBVEVfTkVUV09SS19HUk9VUFM6cmV0dXJuXCJDUkVBVEVfR1JPVVBTXCI7Y2FzZSBvLnluLkVOU1VSRV9DT05WRVJTQVRJT05TOnJldHVyblwiRU5TVVJFX0NPTlZFUlNBVElPTlNcIjtjYXNlIG8ueW4uRU5DUllQVDpyZXR1cm5cIkVOQ1JZUFRcIjtjYXNlIG8ueW4uTUVESUFfQUxMOnJldHVyblwiUFJFUEFSRV9NRURJQVwiO2Nhc2Ugby55bi5NRURJQV9SRVNPTFZFOnJldHVyblwiTUVESUFfUkVTT0xWRVwiO2Nhc2Ugby55bi5NRURJQV9TQVZFOnJldHVyblwiUFJFX1NFTkRfU0FWRV9NRURJQVwiO2Nhc2Ugby55bi5NRURJQV9FTkNSWVBUOnJldHVyblwiTUVESUFfRU5DUllQVFwiO2Nhc2Ugby55bi5NRURJQV9TTUFSVF9TSEFSRTpyZXR1cm5cIlNNQVJUX1NIQVJFXCI7Y2FzZSBvLnluLk1FRElBX0RPV05MT0FEOnJldHVyblwiRE9XTkxPQURcIjtjYXNlIG8ueW4uTUVESUFfVFJJTTpyZXR1cm5cIlRSSU1cIjtjYXNlIG8ueW4uTUVESUFfVFJBTlNDT0RFOnJldHVyblwiVFJBTlNDT0RFXCI7Y2FzZSBvLnluLk1FRElBX1pJUDpyZXR1cm5cIkNPTVBSRVNTXCI7Y2FzZSBvLnluLk1FRElBX1BSRV9VUExPQURfVVBEQVRFOnJldHVyblwiTUVESUFfUFJFX1VQTE9BRF9VUERBVEVcIjtjYXNlIG8ueW4uTUVESUFfVVBMT0FEOnJldHVyblwiVVBMT0FEXCI7Y2FzZSBvLnluLk1FRElBX1BPU1RfVVBMT0FEX1VQREFURTpyZXR1cm5cIlBPU1RfVVBMT0FEX1VQREFURV9NRVNTQUdFXCI7Y2FzZSBvLnluLk1FRElBX1VTRVJfR0VORVJBVEVEX0FTU0VUU19VUExPQUQ6cmV0dXJuXCJVU0VSX0dFTkVSQVRFRF9BU1NFVFNfVVBMT0FEXCI7Y2FzZSBvLnluLlNFTkQ6cmV0dXJuXCJTRU5EXCI7Y2FzZSBvLnluLlBPU1RfU0VORF9VUERBVEU6cmV0dXJuXCJQT1NUX1NFTkRfVVBEQVRFXCI7Y2FzZSBvLnluLkNSRUFURV9HUk9VUF9BTkRfSU5WSVRFOmNhc2Ugby55bi5JTklUSUFMSVpFX0NPTlRFWFRfSU5GTzpyZXR1cm5cIkNSRUFURV9HUk9VUF9BTkRfSU5WSVRFXCI7Y2FzZSBvLnluLlBSRV9TRU5EX0RFTEFZOnJldHVyblwiUFJFX1NFTkRfREVMQVlcIjtjYXNlIG8ueW4uVVBEQVRFX0lOQ0lERU5UQUxfQVRUQUNITUVOVFM6cmV0dXJufX1mdW5jdGlvbiBiKGUpe3N3aXRjaChlKXtjYXNlIG8uZnEuU1VDQ0VTUzpyZXR1cm5cIlNVQ0NFU1NcIjtjYXNlIG8uZnEuTk9fQ09OTkVDVElPTjpyZXR1cm5cIk5PX0NPTk5FQ1RJT05cIjtjYXNlIG8uZnEuVElNRU9VVDpjYXNlIG8uZnEuUkVUUllBQkxFX0VSUk9SOmNhc2Ugby5mcS5RVUVVRV9GT1JfUkVTRU5EX09SREVSSU5HOmNhc2Ugby5mcS5RVUVVRV9GT1JfUkVTRU5EX05FVFdPUks6cmV0dXJuXCJGQUlMVVJFXCI7Y2FzZSBvLmZxLkNBTkNFTEVEOnJldHVyblwiQ0FOQ0VMRURcIjtjYXNlIG8uZnEuRkFUQUxfRVJST1I6cmV0dXJuXCJGQVRBTFwifX1mdW5jdGlvbiBUKGUpe3N3aXRjaChlKXtjYXNlIG8uclMuTk9ORTpyZXR1cm5cIk5PTkVcIjtjYXNlIG8uclMuRUVMOnJldHVyblwiRUVMXCI7Y2FzZSBvLnJTLkZJREVMSVVTOnJldHVyblwiRklERUxJVVNcIjtjYXNlIG8uclMuQ0xFQVJURVhUS0VZOnJldHVyblwiQ0xFQVJfVEVYVF9LRVlcIjtjYXNlIG8uclMuVU5FWFBFQ1RFRDpyZXR1cm5cIlVORVhQRUNURURcIn19ZnVuY3Rpb24gQyhlKXtpZih2b2lkIDAhPT1lKXN3aXRjaChlKXtjYXNlIG8ubHEuTk9UX0VMSUdJQkxFOnJldHVyblwiTk9UX0VMSUdJQkxFXCI7Y2FzZSBvLmxxLlJFQ0lQSUVOVF9QS19OT1RfRk9VTkQ6cmV0dXJuXCJSRUNJUElFTlRfUEtfTk9UX0ZPVU5EXCI7Y2FzZSBvLmxxLkNVUlJFTlRfUEtfTk9UX0ZPVU5EOnJldHVyblwiQ1VSUkVOVF9QS19OT1RfRk9VTkRcIjtjYXNlIG8ubHEuT1RIRVI6cmV0dXJuXCJPVEhFUlwifX1mdW5jdGlvbiBBKGUpe3JldHVybiBlLm1hcCgoZT0+ZS5hbmFseXRpY3NNZXNzYWdlSWQpKS5qb2luKFwiLFwiKX1mdW5jdGlvbiBSKGUpe2xldCB0PTAsbj0wO2Zvcihjb25zdCByIG9mIGUuZmFpbGVkQ29udmVyc2F0aW9uc01ldHJpY3NEYXRhKXIudHlwZT09PW8uaTEuT05FT05PTkU/dCs9MTpuKz0xO3JldHVybntGUklFTkQ6dCxHUk9VUDpufX1mdW5jdGlvbiBrKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlLCgoZSx0KT0+XCJiaWdpbnRcIj09dHlwZW9mIHQ/U3RyaW5nKHQpOnQpKX19LDM0MjEyOihlLHQsbik9PntuLmQodCx7RF86KCk9PnMsUTk6KCk9PmEsZUU6KCk9Pm8sdkQ6KCk9Pml9KTt2YXIgcj1uKDY5MzAwKTtjbGFzcyBpIGV4dGVuZHMgci55e2NvbnN0cnVjdG9yKGUsdCl7ZSBpbnN0YW5jZW9mIFJlc3BvbnNlP3N1cGVyKGBOZXR3b3JrIGVycm9yOiAke2UudXJsfSBbJHtlLnN0YXR1c31dICR7ZS5zdGF0dXNUZXh0fWAsdCk6c3VwZXIoZSksdGhpcy5uYW1lPVwiU2tpcHBhYmxlTmV0d29ya0Vycm9yXCJ9fWZ1bmN0aW9uIG8oZSl7aWYoZSBpbnN0YW5jZW9mIFR5cGVFcnJvcil7Y29uc3QgdD1lLm1lc3NhZ2UudG9Mb2NhbGVMb3dlckNhc2UoKTtyZXR1cm4gdC5zdGFydHNXaXRoKFwiZmFpbGVkIHRvIGZldGNoXCIpfHx0LnN0YXJ0c1dpdGgoXCJuZXR3b3JrIGVycm9yXCIpfHx0LnN0YXJ0c1dpdGgoXCJuZXR3b3JrZXJyb3JcIil8fHQuc3RhcnRzV2l0aChcImxvYWQgZmFpbGVkXCIpfXJldHVybiBlIGluc3RhbmNlb2YgRE9NRXhjZXB0aW9uJiZcIk5ldHdvcmtFcnJvclwiPT09ZS5uYW1lfWNsYXNzIGEgZXh0ZW5kcyByLnl7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLHQpLHRoaXMubmFtZT1cIlNraXBwYWJsZUFib3J0RXJyb3JcIn19ZnVuY3Rpb24gcyhlKXtpZighKGUgaW5zdGFuY2VvZiBET01FeGNlcHRpb24pKXJldHVybiExO2NvbnN0IHQ9ZS5tZXNzYWdlLnRvTG9jYWxlTG93ZXJDYXNlKCk7cmV0dXJuXCJBYm9ydEVycm9yXCI9PT1lLm5hbWV8fHQuc3RhcnRzV2l0aChcInRoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWRcIil8fHQuc3RhcnRzV2l0aChcInRoZSB1c2VyIGFib3J0ZWQgYSByZXF1ZXN0XCIpfX0sMzAyNjI6KGUsdCxuKT0+e24uZCh0LHtuOigpPT5jfSk7dmFyIHI9bigzMjA2MSksaT1uKDY5NzI5KSxvPW4oNDUxMTEpO2NvbnN0IGE9KDAsby5HUikoci5iKSxzPSgwLG8uWW4pKChhc3luYygpPT5pLnN0b3JlLmdldFN0YXRlKCkuYXV0aC50aHJvdHRsZWRSZWZyZXNoVG9rZW4oKT8/UHJvbWlzZS5yZXNvbHZlKCkpKSxjPSgwLG8uZ2opKHtuYW1lOlwiZGVmYXVsdC1hdXRoZWQtZmV0Y2hcIixyZXF1ZXN0SW50ZXJjZXB0b3JzOlthXSxyZXNwb25zZUludGVyY2VwdG9yczpbc10sbWV0cmljUGF0aE1hcHBlcnM6W28uakFdfSl9LDQ1MTExOihlLHQsbik9PntuLmQodCx7R1I6KCk9PmQsSFo6KCk9PmMsWW46KCk9PmYsX0s6KCk9PnAsZ2o6KCk9PnUsakE6KCk9Pmx9KTt2YXIgcj1uKDQ1MzYzKSxpPW4ubihyKSxvPW4oOTc3ODIpLGE9bigzNDIxMikscz1uKDIwMTAzKTtjb25zdCBjPWU9PntpZihlLmhvc3QuZW5kc1dpdGgoXCJzYy1jZG4ubmV0XCIpKXtjb25zdCB0PWUucGF0aG5hbWUuaW5kZXhPZihcIi9cIiwxKTtpZigtMT09PXQpcmV0dXJuO3JldHVybigwLHMuZCkoZS5ob3N0bmFtZStlLnBhdGhuYW1lLnN1YnN0cmluZygwLHQpKX19LGw9ZT0+e2xldCB0PSExO2Zvcihjb25zdCBuIG9mW1wiLnNuYXBjaGF0LmNvbVwiLFwiLnNjLWNkbi5uZXRcIixcIi5zYy1wcm9kLm5ldFwiXSlpZihlLmhvc3QuZW5kc1dpdGgobikpe3Q9ITA7YnJlYWt9aWYoIXQpcmV0dXJuKDAscy5kKShcInByb3hpZWRfcmVxdWVzdFwiK2UucGF0aG5hbWUpfSx1PWU9PntsZXR7bmFtZTp0LHJlcXVlc3RJbnRlcmNlcHRvcnM6bj1bXSxyZXNwb25zZUludGVyY2VwdG9yczpyPVtdLG1ldHJpY1BhdGhNYXBwZXJzOmM9W10sdGltZW91dDpsPTZlNH09ZTtjb25zdCB1PWBbTmV0d29yazoke3R9XWA7cmV0dXJuKDAsby5nZXRMb2dnZXIpKHUpLGFzeW5jKGUsdCk9PntsZXQgbyxkPW5ldyBSZXF1ZXN0KGUsdCk7Zm9yKGNvbnN0IGUgb2YgbilkPWF3YWl0IGUoZCx1KTt0cnl7Y29uc3QgZT1uZXcgVVJMKGQudXJsKTtmb3IoY29uc3QgdCBvZiBjKWlmKG89dChlKSx2b2lkIDAhPT1vKWJyZWFrO289bz8/KDAscy5MKShlKX1jYXRjaChlKXtvPVwiaW52YWxpZF9wYXRoXCJ9Y29uc3QgZj1wZXJmb3JtYW5jZS5ub3coKTtsZXQgcCxtO3RyeXtwPWF3YWl0IGFzeW5jIGZ1bmN0aW9uKGUsdCxuKXtjb25zdCByPW5ldyBBYm9ydENvbnRyb2xsZXIsbz1zZXRUaW1lb3V0KCgoKT0+e2koKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOmBuZXR3b3JrLiR7bn0udGltZW91dGB9KSxyLmFib3J0KCl9KSx0KSxhPWF3YWl0IGZldGNoKGUse3NpZ25hbDpyLnNpZ25hbH0pO3JldHVybiBjbGVhclRpbWVvdXQobyksYX0oZCxsLG8pfWNhdGNoKGUpe209ZX1jb25zdCBoPU1hdGgucm91bmQocGVyZm9ybWFuY2Uubm93KCktZik7bGV0IHY7aWYoaSgpLmluY3JlbWVudCh7bWV0cmljc05hbWU6YG5ldHdvcmsuJHtvfS5hdHRlbXB0YH0pLHZvaWQgMD09PXApe2NvbnN0IGU9U3RyaW5nKG5hdmlnYXRvci5vbkxpbmUpLHQ9bSBpbnN0YW5jZW9mIEVycm9yP20ubmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpOlwidW5rbm93blwiO2lmKGkoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOmBuZXR3b3JrLiR7b30ubmV0d29ya19lcnJvcmAsZGltZW5zaW9uczp7b25saW5lOmUsZXJyb3JfbmFtZTp0fX0pLG0gaW5zdGFuY2VvZiBFcnJvcil7aWYoKDAsYS5lRSkobSkpdGhyb3cgbmV3IGEudkQoYCR7bS5uYW1lfTogJHttLm1lc3NhZ2V9LiBSZXF1ZXN0ICR7ZC51cmx9IGNvdWxkbid0IHJlYWNoIHRoZSBob3N0LCB3aXRoIG9ubGluZSBzdGF0dXM6ICR7ZX1gLHtjYXVzZTptLmNhdXNlfSk7aWYoKDAsYS5EXykobSkpdGhyb3cgbmV3IGEuUTkoYCR7bS5uYW1lfTogJHttLm1lc3NhZ2V9LiBSZXF1ZXN0ICR7ZC51cmx9IHdhcyBhYm9ydGVkLCB3aXRoIG9ubGluZSBzdGF0dXM6ICR7ZX1gLHtjYXVzZTptLmNhdXNlfSl9dGhyb3cgbmV3IEVycm9yKGByZWNlaXZlZCBubyByZXNwb25zZSB3aXRoIHVua25vd24gZXJyb3IuICR7U3RyaW5nKG0pfWApfXRyeXtjb25zdCBlPW5ldyBVUkwocC51cmwpO2Zvcihjb25zdCB0IG9mIGMpaWYodj10KGUpLHZvaWQgMCE9PXYpYnJlYWs7dj12Pz8oMCxzLkwpKGUpfWNhdGNoKGUpe3Y9XCJpbnZhbGlkX3BhdGhcIn1sZXQgZz1vO28hPT12JiYoZz1gJHtvfV9yZWRpcmVjdF90b18ke3Z9YCxpKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpgbmV0d29yay4ke3Z9LmF0dGVtcHRgfSksaSgpLmluY3JlbWVudCh7bWV0cmljc05hbWU6YG5ldHdvcmsuJHtvfS5yZWRpcmVjdF90by4ke3Z9YH0pKTtjb25zdCB5PXBhcnNlSW50KHAuaGVhZGVycy5nZXQoXCJjb250ZW50LWxlbmd0aFwiKT8/XCJcIik7eSYmaSgpLmFkZEhpc3RvZ3JhbSh7bWV0cmljc05hbWU6YG5ldHdvcmsuJHtnfS5yZXNwb25zZV9zaXplYCx2YWx1ZTp5fSksaSgpLmFkZFRpbWVyKHttZXRyaWNzTmFtZTpgbmV0d29yay4ke2d9LmxhdGVuY3lgLG1pbGxpU2VjOmh9KSxpKCkuYWRkVGltZXIoe21ldHJpY3NOYW1lOlwibmV0d29ya19sYXRlbmN5XCIsbWlsbGlTZWM6aCxkaW1lbnNpb25zOnthcGk6Z319KSxpKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpgbmV0d29yay4ke2d9LmNvZGUuJHtwLnN0YXR1cy50b1N0cmluZygpfWB9KTtmb3IoY29uc3QgZSBvZiByKXA9YXdhaXQgZShwLHUpO3JldHVybiBwfX0sZD1lPT5hc3luYyB0PT57Y29uc3Qgbj1hd2FpdCBlKCk7aWYoIW4pdGhyb3cgbmV3IEVycm9yKFwibm8gdmFsaWQgYXV0aCB0b2tlbiBpcyBmb3VuZFwiKTtyZXR1cm4gdC5oZWFkZXJzLnNldChcImF1dGhvcml6YXRpb25cIixgQmVhcmVyICR7bn1gKSxuZXcgUmVxdWVzdCh0LHtjcmVkZW50aWFsczpcImluY2x1ZGVcIn0pfSxmPWU9PmFzeW5jKHQsbik9PigoMCxvLmdldExvZ2dlcikoYCR7bn06QXV0aFJlcXVlc3RJbnRlcmNlcHRvcmApLFs0MDEsNDAzXS5pbmNsdWRlcyh0LnN0YXR1cykmJmF3YWl0IGUoKSx0KSxwPWU9PmFzeW5jIHQ9Pntjb25zdCBuPWF3YWl0IGUoKTtyZXR1cm4gbj8odC5oZWFkZXJzLnNldChcImF1dGhvcml6YXRpb25cIixgQmVhcmVyICR7bn1gKSxuZXcgUmVxdWVzdCh0LHtjcmVkZW50aWFsczpcImluY2x1ZGVcIn0pKTp0fX0sNzY5MzE6KGUsdCxuKT0+e24uZCh0LHtYOigpPT5pfSk7dmFyIHI9big0NTExMSk7Y29uc3QgaT0oMCxyLmdqKSh7bmFtZTpcImRlZmF1bHQtdW5hdXRoZWQtZmV0Y2hcIixtZXRyaWNQYXRoTWFwcGVyczpbci5IWixyLmpBXX0pfSwyMDEwMzooZSx0LG4pPT57ZnVuY3Rpb24gcihlKXtyZXR1cm4gaShlLmhvc3RuYW1lK2UucGF0aG5hbWUpfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIGUucmVwbGFjZUFsbChcIi5cIixcIl9cIil9bi5kKHQse0w6KCk9PnIsZDooKT0+aX0pfSwxOTA5MzooZSx0LG4pPT57bi5kKHQse1RNOigpPT5jLGMwOigpPT51LE02OigpPT5zLENNOigpPT5sfSk7dmFyIHI9big2Mzk1MSksaT1uKDU2NDUxKSxvPW4oODY1MTYpO2NvbnN0IGE9bmV3IGkudFooe3VuYXJ5Om8uVX0pO2FzeW5jIGZ1bmN0aW9uIHMoZSx0LG4saSxvKXtjb25zdCBzPXIuUmVnaXN0ZXJEZXZpY2VSZXF1ZXN0LmZyb21QYXJ0aWFsKHtkZXZpY2VUb2tlbjplLGRldmljZVR5cGU6dCxyZWxlYXNlVHlwZTpuLGVuY3J5cHRpb25EYXRhOmksYXBwSWQ6b30pO3JldHVybiBhLlJlZ2lzdGVyRGV2aWNlKHMpfWFzeW5jIGZ1bmN0aW9uIGMoZSx0KXtjb25zdCBuPXIuQ2xlYXJEZXZpY2VUb2tlblJlcXVlc3QuZnJvbVBhcnRpYWwoe2RldmljZVR5cGU6ZSxyZWFzb246dH0pO3JldHVybiBhLkNsZWFyRGV2aWNlVG9rZW4obil9YXN5bmMgZnVuY3Rpb24gbChlKXtjb25zdCB0PWU/ci5Ob3RpZmljYXRpb25TZXR0aW5nLlNFVFRJTkdfVFJVRTpyLk5vdGlmaWNhdGlvblNldHRpbmcuU0VUVElOR19GQUxTRSxuPXIuTm90aWZpY2F0aW9uU2V0dGluZ1VwZGF0ZVJlcXVlc3QuZnJvbVBhcnRpYWwoe3NldHRpbmdVcGRhdGU6eyRjYXNlOlwid2ViUHVzaEVuYWJsZWRcIix3ZWJQdXNoRW5hYmxlZDp0fX0pO3JldHVybiBhLlVwZGF0ZU5vdGlmaWNhdGlvblNldHRpbmcobil9YXN5bmMgZnVuY3Rpb24gdShlKXtjb25zdCB0PXIuR2V0Tm90aWZpY2F0aW9uU2V0dGluZ1JlcXVlc3QuZnJvbVBhcnRpYWwoe3NldHRpbmdDaG9pY2U6ZX0pO3JldHVybiBhLkdldE5vdGlmaWNhdGlvblNldHRpbmcodCl9fSw4NTc1NTooZSx0LG4pPT57bi5kKHQse3I6KCk9Pmh9KTt2YXIgcj1uKDQ1MzYzKSxpPW4ubihyKSxvPW4oMjQxMzUpLGE9big2Mzk1MSkscz1uKDc5NzQyKSxjPW4oOTc3ODIpLGw9bi5uKGMpLHU9KG4oNTc3MjgpLG4oMTkwOTMpKSxkPW4oNjM4MzcpLGY9big2NDU3OCkscD1uKDY5NzI5KTtjb25zdCBtPXMudG9CeXRlQXJyYXkoXCJCTE1VVGd6YjVjRGd2VHIzRjhBNGdTR3lQLWxzZ18xbGJ0aEpRVW51WE53RHhzLW5OSFpPTlo2WlR2ejF0aHBJNjZmeUJoV21DbFFtUUt2VDRkYlNxLWM9XCIpO2FzeW5jIGZ1bmN0aW9uIGgoZSl7Y29uc3QgdD1hd2FpdCBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWFkeTt0cnl7Y29uc3Qgbj1hd2FpdCB0LnB1c2hNYW5hZ2VyLmdldFN1YnNjcmlwdGlvbigpO2lmKG4pe2NvbnN0IGU9bi5vcHRpb25zLmFwcGxpY2F0aW9uU2VydmVyS2V5O2lmKGUmJiFmdW5jdGlvbihlLHQpe2lmKGUuYnl0ZUxlbmd0aCE9PXQuYnl0ZUxlbmd0aClyZXR1cm4hMTtjb25zdCBuPW5ldyBJbnQ4QXJyYXkoZSkscj1uZXcgSW50OEFycmF5KHQpO2ZvcihsZXQgdD0wO3QhPT1lLmJ5dGVMZW5ndGg7dCsrKWlmKG5bdF0hPT1yW3RdKXJldHVybiExO3JldHVybiEwfShlLG0pKXthd2FpdCBuLnVuc3Vic2NyaWJlKCk7Y29uc3QgZT1hd2FpdCB5KHQpO2UmJmF3YWl0IGcoZSl9ZWxzZSBhd2FpdCBnKG4pfWVsc2V7cC5zdG9yZS5nZXRTdGF0ZSgpLm5vdGlmaWNhdGlvbnMuc2V0Tm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RTdGF0ZShlKTtjb25zdCBuPWF3YWl0IHkodCk7cC5zdG9yZS5nZXRTdGF0ZSgpLm5vdGlmaWNhdGlvbnMuc2V0Tm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RTdGF0ZShmLm8uUGVybWlzc2lvbklzU2V0KSxuJiZhd2FpdCBnKG4pfX1jYXRjaChlKXt9ZmluYWxseXtwLnN0b3JlLmdldFN0YXRlKCkubm90aWZpY2F0aW9ucy5zZXROb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdFN0YXRlKGYuby5QZXJtaXNzaW9uSXNTZXQpfX1sKCkuZ2V0TG9nZ2VyKFwicHVzaFwiKTtjb25zdCB2PWEuUmVsZWFzZVR5cGUuUFJPRFVDVElPTjthc3luYyBmdW5jdGlvbiBnKGUpe2NvbnN0IHQ9YS5EZXZpY2VUb2tlbi5mcm9tUGFydGlhbCh7dG9rZW46SlNPTi5zdHJpbmdpZnkoZSksdG9rZW5UeXBlOmEuRGV2aWNlVG9rZW5fRGV2aWNlVG9rZW5UeXBlLldFQn0pLG49YS5QdXNoTm90aWZpY2F0aW9uRW5jcnlwdGlvbkRhdGEuZnJvbVBhcnRpYWwoe30pO3RyeXsoYXdhaXQoMCx1Lk02KSh0LGEuRGV2aWNlVHlwZS5ERVNLVE9QX1dFQix2LG4sby50LldFQikpLnN0YXR1c0NvZGUsYS5TdGF0dXNDb2RlLk9LfWNhdGNoKGUpe319YXN5bmMgZnVuY3Rpb24geShlKXt0cnl7Y29uc3QgdD1hd2FpdCBlLnB1c2hNYW5hZ2VyLnN1YnNjcmliZSh7dXNlclZpc2libGVPbmx5OiEwLGFwcGxpY2F0aW9uU2VydmVyS2V5Om19KTtyZXR1cm4gaSgpLmluY3JlbWVudCh7bWV0cmljc05hbWU6YGZ0dV9ub3RpZmljYXRpb25zX3NlbGVjdGlvbl8ke05vdGlmaWNhdGlvbi5wZXJtaXNzaW9ufWB9KSx0fWNhdGNoKGUpe2koKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOmBmdHVfbm90aWZpY2F0aW9uc19zZWxlY3Rpb25fJHtOb3RpZmljYXRpb24ucGVybWlzc2lvbn1gfSl9ZmluYWxseXsoMCxkLnR3KShwLnN0b3JlLmdldFN0YXRlKCkpKCl9fX0sNDU1OTI6KGUsdCxuKT0+e24uZCh0LHtGOigpPT5pLFo6KCk9Pm99KTtjb25zdCByPXNlbGYubG9jYXRpb24ucGF0aG5hbWUsaT1yLnN0YXJ0c1dpdGgoXCIvdmVyc2lvbi9cIik/ci5zcGxpdChcIi9cIikuc3BsaWNlKDAsMykuam9pbihcIi9cIik6XCJcIjtmdW5jdGlvbiBvKGUpe2NvbnN0IHQ9ZS5zdGFydHNXaXRoKFwiL1wiKTtyZXR1cm4gaSsodD9cIlwiOlwiL1wiKStlfX0sNjkzMDA6KGUsdCxuKT0+e24uZCh0LHt5OigpPT5yfSk7Y2xhc3MgciBleHRlbmRzIEVycm9ye319LDY2ODEzOihlLHQsbik9PntuLmQodCx7ajooKT0+bX0pO3ZhciByPW4oNjg2OTApLGk9bigyNzkyMyksbz1uKDcxMzcxKSxhPW4oNDUzNjMpLHM9bi5uKGEpLGM9bigxMjM2MiksbD1uKDQ1MTExKSx1PW4oMjAxMDMpLGQ9big2OTMwMCk7Y29uc3QgZj0oMCxsLmdqKSh7bmFtZTpcInNlbnRyeS1mZXRjaFwiLG1ldHJpY1BhdGhNYXBwZXJzOltlPT57aWYoXCJzZW50cnkuc2MtcHJvZC5uZXRcIj09PWUuaG9zdCl7Y29uc3QgdD1lLnBhdGhuYW1lLmluZGV4T2YoXCJldmVudHNcIik7aWYoLTEhPT10KXJldHVybigwLHUuZCkoZS5ob3N0bmFtZStlLnBhdGhuYW1lLnN1YnN0cmluZygwLHQrNikpfX0sbC5qQV19KTtjbGFzcyBwIGV4dGVuZHMgci5We2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsZil9fWZ1bmN0aW9uIG0oZSx0KXsoMCxpLlMpKHtkc246XCJodHRwczovL2I1ZWNkNzM2MzUwODRmYTFiMjExNTA0OGIzNTE2NWQ1QHNlbnRyeS5zYy1wcm9kLm5ldC8xNThcIixpbnRlZ3JhdGlvbnM6dCxyZWxlYXNlOlwicHJvZC00ZWYxZjVkN1wiLGVudmlyb25tZW50OlwicHJvZFwiLHRyYW5zcG9ydDpwLG1heEJyZWFkY3J1bWJzOjEwMCxiZWZvcmVTZW5kOihlLHQpPT57aWYodD8ub3JpZ2luYWxFeGNlcHRpb24pe2NvbnN0IGU9dC5vcmlnaW5hbEV4Y2VwdGlvbiBpbnN0YW5jZW9mIEVycm9yP3Qub3JpZ2luYWxFeGNlcHRpb24ubmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpOlwidW5rbm93blwiLG49dC5vcmlnaW5hbEV4Y2VwdGlvbiBpbnN0YW5jZW9mIGQueTtpZihzKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcImVycm9yX3RvX3JlcG9ydF90b19zZW50cnlcIixkaW1lbnNpb25zOntlcnJvcl9uYW1lOmUsc2tpcHBlZDpTdHJpbmcobil9fSksbilyZXR1cm4gbnVsbH1yZXR1cm4gZX19KSwoMCxvLllBKShcIndhc20udmVyc2lvblwiLFwiMC4zLjkzMDIwLXByb2R1Y3Rpb25cIiksKDAsby5ZQSkoXCJ3YXNtLmxpbmtlZFwiLEJvb2xlYW4oITEpKSwoMCxvLllBKShcImJyYW5jaF9idWlsZFwiLHNlbGYubG9jYXRpb24ucGF0aG5hbWUuc3RhcnRzV2l0aChcIi92ZXJzaW9uL1wiKSksKDAsby52KShcIkJ1aWxkXCIse3NoYTpcIjRlZjFmNWQ3XCIsZGF0ZTpuZXcgRGF0ZSgxNjg0OTQ4NjQ3NzcyKS50b0xvY2FsZVN0cmluZyhcImVuLVVTXCIse3RpbWVab25lOlwiQW1lcmljYS9Mb3NfQW5nZWxlc1wiLHRpbWVab25lTmFtZTpcInNob3J0XCJ9KSx0aW1lX3NpbmNlX2Vwb2NoOjE2ODQ5NDg2NDc3NzJ9KSxlJiYoMCxvLmUpKChlPT57ZS5hZGRFdmVudFByb2Nlc3NvcigoKGUsdCk9Pntjb25zdCBuPUJvb2xlYW4oZS5leGNlcHRpb24/LnZhbHVlcz8ubGVuZ3RoKSxyPWUubGV2ZWwmJltcImVycm9yXCIsXCJmYXRhbFwiLFwiY3JpdGljYWxcIl0uaW5jbHVkZXMoZS5sZXZlbCk7cmV0dXJuKG58fHIpJiYoZS5jb250ZXh0cz17Li4uZS5jb250ZXh0c3x8e30sbG9nczooMCxjLmEkKSgxMDApfSksZX0pKX0pKX19LDg3NzMyOihlLHQsbik9PntuLmQodCx7bTooKT0+cyx6OigpPT5vfSk7Y29uc3Qgcj1bXTtmdW5jdGlvbiBpKGUpe3JldHVybiByLmZpbmRJbmRleCgodD0+dC5jb2RlX2ZpbGU9PT1lKSl9ZnVuY3Rpb24gbyhlLHQpe2lmKGkodCk+PTApcmV0dXJuO2NvbnN0e2J1aWxkSWQ6bixkZWJ1Z0ZpbGU6b309ZnVuY3Rpb24oZSl7bGV0IHQsbjtjb25zdCByPVdlYkFzc2VtYmx5Lk1vZHVsZS5jdXN0b21TZWN0aW9ucyhlLFwiYnVpbGRfaWRcIik7aWYoci5sZW5ndGg+MCl7Y29uc3QgZT1uZXcgVWludDhBcnJheShyWzBdKTt0PUFycmF5LmZyb20oZSkucmVkdWNlKCgoZSx0KT0+ZSt0LnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLFwiMFwiKSksXCJcIil9Y29uc3QgaT1XZWJBc3NlbWJseS5Nb2R1bGUuY3VzdG9tU2VjdGlvbnMoZSxcImV4dGVybmFsX2RlYnVnX2luZm9cIik7aWYoaS5sZW5ndGg+MCl7Y29uc3QgZT1uZXcgVWludDhBcnJheShpWzBdKTtuPW5ldyBUZXh0RGVjb2RlcihcInV0Zi04XCIpLmRlY29kZShlKX1yZXR1cm57YnVpbGRJZDp0LGRlYnVnRmlsZTpufX0oZSk7aWYobil7Y29uc3QgZT1gJHtuLnBhZEVuZCgzMixcIjBcIikuc3Vic3RyKDAsMzIpfTBgLGk9e3R5cGU6XCJ3YXNtXCIsY29kZV9pZDpuLGNvZGVfZmlsZTp0LGRlYnVnX2ZpbGU6bz9uZXcgVVJMKG8sdCkuaHJlZjpudWxsLGRlYnVnX2lkOmV9O3IucHVzaChpKX19ZnVuY3Rpb24gYShlKXtsZXQgdD0hMTtmb3IoY29uc3QgbiBvZiBlKXtpZighbi5maWxlbmFtZSlicmVhaztjb25zdCBlPW4uZmlsZW5hbWUubWF0Y2goL14oLio/KTp3YXNtLWZ1bmN0aW9uXFxbXFxkK1xcXTooMHhbYS1mQS1GMC05XSspJC8pO2lmKG51bGwhPT1lKXtjb25zdCBvPWVbMV0sYT1lWzJdO2xldCBzPWkobyk7aWYoczwwJiYxPT09ci5sZW5ndGgmJm4uZmlsZW5hbWUuc3RhcnRzV2l0aChcIndhc206Ly93YXNtL1wiKSYmKHM9MCkscz49MCl7Y29uc3QgZT1yW3NdO24uaW5zdHJ1Y3Rpb25fYWRkcj1hLG4uYWRkcl9tb2RlPWByZWw6JHtzfWAsbi5maWxlbmFtZT1lLmNvZGVfZmlsZSxuLnBsYXRmb3JtPVwibmF0aXZlXCIsdD0hMH19fXJldHVybiB0fWNvbnN0IHM9e25hbWU6XCJXYXNtXCIsc2V0dXBPbmNlOihlLHQpPT57ZSgoZT0+e2xldCB0PSExO2lmKGUuZXhjZXB0aW9uPy52YWx1ZXMpZm9yKGNvbnN0IG4gb2YgZS5leGNlcHRpb24udmFsdWVzKW4uc3RhY2t0cmFjZT8uZnJhbWVzJiYhdCYmKHQ9YShuLnN0YWNrdHJhY2UuZnJhbWVzKSk7cmV0dXJuIHQmJihlLmRlYnVnX21ldGE9ZS5kZWJ1Z19tZXRhfHx7fSxlLmRlYnVnX21ldGEuaW1hZ2VzPXIpLGV9KSl9fX0sNzQ3NzM6KGUsdCxuKT0+e24uZCh0LHtYOigpPT5pfSk7dmFyIHI9big0NDc4NSk7ZnVuY3Rpb24gaShlKXtyZXR1cm5gY2FsbC0keygwLHIuTWMpKGUpfWB9fSwxOTE1ODooZSx0LG4pPT57bi5kKHQse044OigpPT5pLFd2OigpPT5vLFhtOigpPT5hfSk7dmFyIHI9big0MTMxKTtmdW5jdGlvbiBpKGUsdCl7cmV0dXJuIGU/dD9yLnBVLkFVRElPX1ZJREVPOnIucFUuQVVESU86dD9yLnBVLk1VVEVEX0FVRElPX1ZJREVPOnIucFUuTVVURURfQVVESU99ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZT09PXIucFUuQVVESU9fVklERU98fGU9PT1yLnBVLk1VVEVEX0FVRElPX1ZJREVPfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIGU9PT1yLnBVLk1VVEVEX0FVRElPfHxlPT09ci5wVS5NVVRFRF9BVURJT19WSURFT3x8ZT09PXIucFUuTVVURURfQVVESU9fUEFVU0VEX1ZJREVPfX0sODA2MTQ6KGUsdCxuKT0+e24uZCh0LHtnSjooKT0+cCxhZTooKT0+ZCxkSzooKT0+dSxZSjooKT0+aCxNZTooKT0+ZyxYcTooKT0+dixsVTooKT0+bSxnOigpPT5FLFFSOigpPT5sLGw4OigpPT55LGpJOigpPT5mfSk7dmFyIHI9big5Nzc4MiksaT1uKDY5MzAwKSxvPW4oMzA5MTApLGE9big0MDQzMSkscz1uKDUxNTc2KTsoMCxyLmdldExvZ2dlcikoXCJtZWRpYU1hbmFnZXJcIik7Y29uc3QgYz17aGVpZ2h0OntpZGVhbDo3MjB9LHdpZHRoOntpZGVhbDo0MDZ9fSxsPW5ldyBNYXA7ZnVuY3Rpb24gdShlKXtpZighZXx8IWwuaGFzKGUpKXJldHVybjtjb25zdCB0PWwuZ2V0KGUpO3QmJkUodCksbC5kZWxldGUoZSl9ZnVuY3Rpb24gZCgpe2Zvcihjb25zdCBlIG9mIGwudmFsdWVzKCkpRShlKTtsLmNsZWFyKCl9ZnVuY3Rpb24gZihlKXtjb25zdCB0PWwuZ2V0KGUuaWQpO3QmJnQhPT1lJiZFKHQpLGwuc2V0KGUuaWQsZSl9YXN5bmMgZnVuY3Rpb24gcChlKXt0cnl7YXdhaXQgYXN5bmMgZnVuY3Rpb24oKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MzVlMztyZXR1cm5cInZpc2libGVcIj09PWRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT9Qcm9taXNlLnJlc29sdmUoKTpuZXcgUHJvbWlzZSgoKHQsbik9Pntjb25zdCByPXdpbmRvdy5zZXRUaW1lb3V0KCgoKT0+e24obmV3IGEuVihcIlRpbWVkIG91dCB3YWl0aW5nIGZvciBkb2N1bWVudCB0byBiZWNvbWUgdmlzaWJsZVwiKSl9KSxlKTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLCgoKT0+e1widmlzaWJsZVwiPT09ZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlJiYoY2xlYXJUaW1lb3V0KHIpLHQoITApKX0pKX0pKX0oKX1jYXRjaChlKXtpZihFcnJvciwhKGUgaW5zdGFuY2VvZiBpLnkpKXRocm93IGV9dHJ5e2NvbnN0IHQ9YXdhaXQgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoZSk7cmV0dXJuIGYodCksdH1jYXRjaCh0KXtpZih0IGluc3RhbmNlb2YgRXJyb3ImJlwiTm90QWxsb3dlZEVycm9yXCI9PT10Lm5hbWUpe2NvbnN0IHQ9W107ZS52aWRlbyYmdC5wdXNoKG8uYTEpLGUuYXVkaW8mJnQucHVzaChvLlNfKSwoMCxvLmlPKSh0KX10aHJvdyB0fX1hc3luYyBmdW5jdGlvbiBtKGUpe2xldHt2aWRlb0RldmljZUlkOnQsYXVkaW9EZXZpY2VJZDpufT1lO3JldHVybiBwKHthdWRpbzp7ZGV2aWNlSWQ6bj9bbl06W119LHZpZGVvOntkZXZpY2VJZDp0P1t0XTpbXSwuLi5jfX0pfWFzeW5jIGZ1bmN0aW9uIGgoZSl7cmV0dXJuIHAoe2F1ZGlvOntkZXZpY2VJZDplP1tlXTpbXX0sdmlkZW86ITF9KX1hc3luYyBmdW5jdGlvbiB2KGUpe3JldHVybiBwKHthdWRpbzohMSx2aWRlbzp7ZGV2aWNlSWQ6ZT9bZV06W10sLi4uY319KX1hc3luYyBmdW5jdGlvbiBnKCl7Y29uc3QgZT1hd2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldERpc3BsYXlNZWRpYSh7dmlkZW86e2ZyYW1lUmF0ZTp7bWF4OjV9LHdpZHRoOnttYXg6MTkyMH0saGVpZ2h0OnttYXg6MTA4MH19LGF1ZGlvOiExfSksdD1lLmdldFZpZGVvVHJhY2tzKClbMF07cmV0dXJuIHQuY29udGVudEhpbnQ9XCJtb3Rpb25cIix0Lm9uZW5kZWQ9KCk9PnsoMCxzLmhuKSghMSl9LGYoZSksZX1mdW5jdGlvbiB5KGUsdCl7Zm9yKGNvbnN0IG4gb2YgZS5nZXRBdWRpb1RyYWNrcygpKW4uZW5hYmxlZD10fWZ1bmN0aW9uIEUoZSl7Zm9yKGNvbnN0IHQgb2YgZS5nZXRUcmFja3MoKSl0LnN0b3AoKTtpZihsLmhhcyhlLmlkKSl7Y29uc3QgdD1sLmdldChlLmlkKTtsLmRlbGV0ZShlLmlkKTtmb3IoY29uc3QgZSBvZiB0Py5nZXRUcmFja3MoKT8/W10pZS5zdG9wKCl9fX0sODk0MTU6KGUsdCxuKT0+e24uZCh0LHtOOigpPT5pfSk7dmFyIHI9big0MTMxKTtmdW5jdGlvbiBpKGUpe3JldHVybiEhZSYmZS5wdWJsaXNoZWRNZWRpYSE9PXIucFUuTk9ORSYmKGUuY2FsbGluZ1N0YXRlPT09ci5VcS5JTl9DQUxMfHxlLmNhbGxpbmdTdGF0ZT09PXIuVXEuQ0FMTElORyl9fSw1MTU3NjooZSx0LG4pPT57bi5kKHQse3k0OigpPT5rLCRqOigpPT5PLFhHOigpPT56LEN2OigpPT4kLHJUOigpPT5aLGNfOigpPT5RLFBDOigpPT5KLFZJOigpPT5XLFBXOigpPT5qLEM3OigpPT5LLEcyOigpPT50ZSxnNzooKT0+eCxxODooKT0+SCx3cjooKT0+WSxobjooKT0+WCxwbDooKT0+cSx4YzooKT0+ZWV9KTt2YXIgcj1uKDU4ODYxKSxpPW4oNDEzMSksbz1uKDQ1MzYzKSxhPW4ubihvKSxzPW4oOTc3ODIpLGM9bi5uKHMpLGw9big1NjA4Myk7YygpLmdldExvZ2dlcihcIltUYWxrXVwiKTtjbGFzcyB1e2NvbnRleHQ9bmV3IEF1ZGlvQ29udGV4dDtkZXN0aW5hdGlvbj10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1EZXN0aW5hdGlvbigpO3NvdXJjZXM9W107bG9nVGFnPWBbUmVtb3RlQXVkaW9dW1dlYkF1ZGlvU3RyZWFtc01peGVyXVske3RoaXMuZGVzdGluYXRpb24uc3RyZWFtLmlkfV1gO3NldElucHV0U3RyZWFtcyhlKXtjb25zdCB0PW5ldyBTZXQoZSksbj1bXTtmb3IoY29uc3QgZSBvZiB0aGlzLnNvdXJjZXMpdC5kZWxldGUoZS5tZWRpYVN0cmVhbSk/bi5wdXNoKGUpOmUuZGlzY29ubmVjdCgpO2NvbnN0IHI9Wy4uLnRdLm1hcCgoZT0+e2NvbnN0IHQ9dGhpcy5jb250ZXh0LmNyZWF0ZU1lZGlhU3RyZWFtU291cmNlKGUpO3JldHVybiB0LmNvbm5lY3QodGhpcy5kZXN0aW5hdGlvbiksdH0pKTt0aGlzLnNvdXJjZXM9bi5jb25jYXQocil9Z2V0T3V0cHV0U3RyZWFtKCl7cmV0dXJuIHRoaXMuZGVzdGluYXRpb24uc3RyZWFtfX1jbGFzcyBke291dHB1dFN0cmVhbT1uZXcgTWVkaWFTdHJlYW07bG9nVGFnQmFzZT1cIltSZW1vdGVBdWRpb11bU2ltcGxlQXVkaW9TdHJlYW1zTWl4ZXJdXCI7bG9nVGFnPWAke3RoaXMubG9nVGFnQmFzZX1bJHt0aGlzLm91dHB1dFN0cmVhbS5pZH1dYDtzZXRJbnB1dFN0cmVhbXMoZSl7Y29uc3QgdD1mdW5jdGlvbihlKXtjb25zdCB0PW5ldyBTZXQ7Zm9yKGNvbnN0IG4gb2YgZSlmb3IoY29uc3QgZSBvZiBuLmdldEF1ZGlvVHJhY2tzKCkpdC5hZGQoZSk7cmV0dXJuIHR9KGUpO1wic2FmYXJpXCI9PT0oMCxsLmMzKSgpP3RoaXMubWVyZ2VUcmFja3ModCk6dGhpcy5zZXRUcmFja3ModCl9Z2V0T3V0cHV0U3RyZWFtKCl7cmV0dXJuIHRoaXMub3V0cHV0U3RyZWFtfW1lcmdlVHJhY2tzKGUpe2Zvcihjb25zdCB0IG9mIHRoaXMub3V0cHV0U3RyZWFtLmdldEF1ZGlvVHJhY2tzKCkpZS5kZWxldGUodCl8fHRoaXMub3V0cHV0U3RyZWFtLnJlbW92ZVRyYWNrKHQpO3RoaXMuYWRkVHJhY2tzKGUpfXNldFRyYWNrcyhlKXt0aGlzLmhhdmVUcmFja3NDaGFuZ2VkKGUpJiYodGhpcy5jcmVhdGVOZXdPdXRwdXRTdHJlYW0oKSx0aGlzLmFkZFRyYWNrcyhlKSl9YWRkVHJhY2tzKGUpe2Zvcihjb25zdCB0IG9mIGUpdGhpcy5vdXRwdXRTdHJlYW0uYWRkVHJhY2sodCl9aGF2ZVRyYWNrc0NoYW5nZWQoZSl7Y29uc3QgdD1uZXcgU2V0KGUpO2Zvcihjb25zdCBlIG9mIHRoaXMub3V0cHV0U3RyZWFtLmdldEF1ZGlvVHJhY2tzKCkpaWYoIXQuZGVsZXRlKGUpKXJldHVybiEwO3JldHVybiAwIT09dC5zaXplfWNyZWF0ZU5ld091dHB1dFN0cmVhbSgpe3RoaXMub3V0cHV0U3RyZWFtPW5ldyBNZWRpYVN0cmVhbSx0aGlzLmxvZ1RhZz1gJHt0aGlzLmxvZ1RhZ0Jhc2V9WyR7dGhpcy5vdXRwdXRTdHJlYW0uaWR9XWB9fXZhciBmPW4oOTExMjkpLHA9bigzODk3MCksbT1uKDEzMDM0KSxoPW4oNjA0OTYpLHY9big1NzQzMiksZz1uKDY5NzI5KTtjb25zdCB5PVsxMTc4NzA4MiwxNjAzNzc0MSwxNjczODE2Nyw1MjIxMTEyLDEzMTQ0MzA1LDE2NDEyMzQ0LDg3Njg2OTgsMTY3NTYwOTZdO2Z1bmN0aW9uIEUoKXtjb25zdCBlPV8oKTtsZXQgdD1fKCk7Zm9yKDt0PT09ZTspdD1fKCk7cmV0dXJuW2UsdF19ZnVuY3Rpb24gXygpe3JldHVybiB5W01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSp5Lmxlbmd0aCldfXZhciBJPW4oNDQ3ODUpLFM9big2OTg3NSk7YXN5bmMgZnVuY3Rpb24gYihlLHQsbixyKXtjb25zdCBvPWcuc3RvcmUuZ2V0U3RhdGUoKSxhPSgwLHAueUspKG8pO2lmKCFhKXRocm93IEVycm9yKFwiTm8gY3VycmVudCB1c2VyXCIpO2NvbnN0IHM9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgaS5nUS5NSVNTRUQ6cmV0dXJuIFMuQ2FsbGluZ1N0YXR1c01lc3NhZ2VfQ2FsbFN0YXR1cy5NSVNTRUQ7Y2FzZSBpLmdRLkpPSU5FRDpyZXR1cm4gUy5DYWxsaW5nU3RhdHVzTWVzc2FnZV9DYWxsU3RhdHVzLkpPSU5FRDtjYXNlIGkuZ1EuTEVGVDpyZXR1cm4gUy5DYWxsaW5nU3RhdHVzTWVzc2FnZV9DYWxsU3RhdHVzLkxFRlQ7Y2FzZSBpLmdRLkVOREVEOnJldHVybiBTLkNhbGxpbmdTdGF0dXNNZXNzYWdlX0NhbGxTdGF0dXMuRU5ERUR9fSh0KSxjPW4/Uy5DYWxsaW5nU3RhdHVzTWVzc2FnZV9DYWxsVHlwZS5BVURJTzpTLkNhbGxpbmdTdGF0dXNNZXNzYWdlX0NhbGxUeXBlLlZJREVPLGw9e2NhbGxTdGF0dXM6cyxjYWxsVHlwZTpjLHVzZXJJZDphLGNhbGxEdXJhdGlvbjpyPz8wLHBhcnRpY2lwYW50czpbXX07YXdhaXQgby5tZXNzYWdpbmcuc2VuZENhbGxpbmdTdGF0dXNNZXNzYWdlKGUsbCxmdW5jdGlvbihlLHQpe3N3aXRjaChlKXtjYXNlIGkuZ1EuTUlTU0VEOmNhc2UgaS5nUS5KT0lORUQ6Y2FzZSBpLmdRLkxFRlQ6cmV0dXJuO2Nhc2UgaS5nUS5FTkRFRDpyZXR1cm57ZmVlZERpc3BsYXlJbmZvOnskY2FzZTpcInN0YXR1c01lc3NhZ2VEaXNwbGF5SW5mb1wiLHN0YXR1c01lc3NhZ2VEaXNwbGF5SW5mbzp7c3RhdHVzOnskY2FzZTpcImNhbGxpbmdTdGF0dXNcIixjYWxsaW5nU3RhdHVzOntjYWxsU3RhdHVzOlMuQ2FsbGluZ1N0YXR1c01lc3NhZ2VfQ2FsbFN0YXR1cy5FTkRFRCxjYWxsVHlwZTp0fX19fX19fSh0LGMpKX1jKCkuZ2V0TG9nZ2VyKFwiW1RhbGtdW3Nlc3Npb25EZWxlZ2F0ZV1cIik7Y29uc3QgVD17Y2FsbGluZ01lZGlhOmkucFUuTk9ORSxjb25uZWN0aW5nOiExLGxvY2FsVXNlcjp7Y2FsbGluZ1N0YXRlOmkuVXEuTk9ORSxtZWRpYUlzc3VlOmkuSXMuTk9ORSxwdWJsaXNoZWRNZWRpYTppLnBVLk5PTkUsdmlkZW9GbG93aW5nOiExLGNvbm5lY3RlZExlbnNJZDp2b2lkIDAsaXNQdWJsaXNoaW5nQ29ubmVjdGVkTGVuc1NlbGZTdHJlYW06ITEsc2NyZWVuU3RyZWFtU3RhdGU6e3N0YXR1czppLnp3Lk5PVF9QVUJMSVNIRUQsc2lua0lkOnZvaWQgMH0scGxhdGZvcm06aS50NC5OT05FfSxwYXJ0aWNpcGFudHM6bmV3IE1hcH07dmFyIEM9big2MzkyMSksQT1uKDc0NzczKSxSPW4oMTkxNTgpO2NvbnN0IGs9OSxPPTY7ZnVuY3Rpb24gTigpe3JldHVybiBnLnN0b3JlLmdldFN0YXRlKCkudGFsa31mdW5jdGlvbiB3KCl7cmV0dXJuIGcuc3RvcmUuZ2V0U3RhdGUoKS5tZWRpYX1mdW5jdGlvbiBEKCl7cmV0dXJuIGcuc3RvcmUuZ2V0U3RhdGUoKS5jYW1lcmFLaXR9ZnVuY3Rpb24gUChlKXtyZXR1cm4gTigpLnNlc3Npb25zLmdldChlKT8uc2Vzc2lvbn1mdW5jdGlvbiBNKGUsdCl7Y29uc3Qgbj1QKGUpO2lmKCFuKXRocm93IEVycm9yKGBObyBzZXNzaW9uIGV4aXN0cyBmb3IgJHsoMCxJLk1jKShlKX0gWyR7dH1dYCk7cmV0dXJuIG59ZnVuY3Rpb24gTChlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dm9pZCAwO3JldHVybiBQKGUuY29udmVyc2F0aW9uSWQpPz9mdW5jdGlvbihlLHQpe2NvbnN0IG49ZS5jb252ZXJzYXRpb25JZCx7ZW5zdXJlQ2xpZW50Om8sYWRkU2Vzc2lvbjphLG9uU2Vzc2lvblN0YXRlQ2hhbmdlZDpzLG9uVGFsa2luZ1N0YXRlQ2hhbmdlZDpjLG9uQmFja2dyb3VuZEltYWdlU3RhdGVDaGFuZ2VkOmx9PU4oKSxwPW8oKS5jcmVhdGVDYWxsaW5nU2Vzc2lvbigoMCxJLk1jKShuKSx7cGFydGljaXBhbnRzOm5ldyBTZXQoKDAsdi5qWikoZSkubWFwKChlPT4oMCxJLk1jKShlKSkpKSxpc0dyb3VwOmUuY29udmVyc2F0aW9uVHlwZT09PXIuaTEuVVNFUkNSRUFURURHUk9VUCxhdWRpb09ubHk6ITEsY29ubmVjdGVkTGVuc0VuYWJsZWQ6ITEsYWRkUGFydGljaXBhbnRFbmFibGVkOiExfSksbT17c2Vzc2lvbjpwLGNvbnZlcnNhdGlvbklkOmUuY29udmVyc2F0aW9uSWQsY29udmVyc2F0aW9uVHlwZTplLmNvbnZlcnNhdGlvblR5cGUsc2Vzc2lvblN0YXRlOlQsdXNlcklkVG9UYWxraW5nU3RhdGU6bmV3IE1hcCxjcmVhdGVkVGltZXN0YW1wOnBlcmZvcm1hbmNlLm5vdygpLG1heFJlbW90ZUNhbGxHcmlkVGlsZXM6ayxwYXJ0aWNpcGFudENvbG9yczplLmNvbnZlcnNhdGlvblR5cGU9PT1yLmkxLk9ORU9OT05FP0UoKTp2b2lkIDAsdXNlcklkVG9CYWNrZ3JvdW5kSW1hZ2VTdGF0ZTpuZXcgTWFwLGF1ZGlvU3RyZWFtc01peGVyOigwLGYuekYpKCk/bmV3IHU6bmV3IGR9O2EobixtKTtjb25zdCBoPWZ1bmN0aW9uKGUsdCxuLHIsbyxhKXtsZXQgcz1pLlVxLk5PTkU7cmV0dXJue29uU3RhdGVDaGFuZ2VkOnI9Pntjb25zdCBvPWUuZ2V0U3RhdGUoKSxjPW8ubG9jYWxVc2VyLmNhbGxpbmdTdGF0ZTtzIT09aS5VcS5OT05FJiZjPT09aS5VcS5OT05FPyhmdW5jdGlvbihlLHQpe2xldCBuO3N3aXRjaCh0KXtjYXNlIGkuS0cuQ0FMTElOR19SRUpFQ1RFRF9BVURJTzpuPSEwO2JyZWFrO2Nhc2UgaS5LRy5DQUxMSU5HX1JFSkVDVEVEX1ZJREVPOm49ITE7YnJlYWs7ZGVmYXVsdDpyZXR1cm59YihlLGkuZ1EuTUlTU0VELG4pfSh0LHIpLGEoKSk6KHM9YyxuKHQsbykpfSxvblRhbGtpbmdTdGF0ZUNoYW5nZWQ6ZT0+e3IodCxlKX0sb25TcGVlY2hBY3Rpdml0eTplPT57fSxzZW5kQ2FsbFN0YXR1c01lc3NhZ2U6KGUsbixyKT0+e2IodCxlLG4scil9LHN0YXJ0Q29ubmVjdGVkTGVuc1NlbGZTdHJlYW06KCk9Pnt9LHN0b3BDb25uZWN0ZWRMZW5zU2VsZlN0cmVhbTooKT0+e30sb25CYWNrZ3JvdW5kSW1hZ2VTdGF0ZUNoYW5nZWQ6KGUsbik9PntvKHQsKDAsSS5PWSkoZSksbiwhMCl9fX0ocCxuLHMsYyxsLCgoKT0+RihuLHApKSk7cmV0dXJuIHAuc2V0RGVsZWdhdGUoaCksdm9pZCAwIT09dCYmcC5nZXRNZXRyaWNzTWV0YWRhdGFDb250YWluZXIoKS5zZXRTb3VyY2VUeXBlKHQpLHB9KGUsdCl9ZnVuY3Rpb24gVSgpe2NvbnN0W2UsdF09KDAsbS5oOCkoZy5zdG9yZS5nZXRTdGF0ZSgpKSxuPSgwLG0ueTkpKGguR0YuQ2FsbGluZykoZy5zdG9yZS5nZXRTdGF0ZSgpKTtyZXR1cm4oMCxSLk44KShlLG4pfWZ1bmN0aW9uIHgoZSx0KXtjb25zdHtyZXF1ZXN0Q2FtZXJhOm4scmVsZWFzZUNhbWVyYTpyfT13KCkubG9jYWwsaT0oMCxBLlgpKGUpO3Q/bihoLkdGLkNhbGxpbmcsaSk6cihoLkdGLkNhbGxpbmcsaSwhMCl9ZnVuY3Rpb24gRihlLHQpe3QuZGlzcG9zZSgpLE4oKS5yZW1vdmVTZXNzaW9uKGUpLEQoKS5yZW1vdmVMZW5zKCl9ZnVuY3Rpb24gQihlLHQpe3coKS5sb2NhbC5zZXRBdWRpb0VuYWJsZWQoITApLHgoZSx0KTtjb25zdCBuPUQoKTtuLmNhbWVyYUtpdFNlc3Npb24mJm4ucmVtb3ZlTGVucygpfWZ1bmN0aW9uIFYoKXtyZXR1cm5bLi4uTigpLnNlc3Npb25zLnZhbHVlcygpXS5maWx0ZXIoKGU9PmUuc2Vzc2lvblN0YXRlLmxvY2FsVXNlci5wdWJsaXNoZWRNZWRpYSE9PWkucFUuTk9ORSkpfWZ1bmN0aW9uIEcoKXtjb25zdCBlPVUoKTtmb3IoY29uc3QgdCBvZiBWKCkpdC5zZXNzaW9uLmdldENhbGxpbmdNYW5hZ2VyKCkudXBkYXRlUHVibGlzaGVkTWVkaWEoZSl9ZnVuY3Rpb24gSChlLHQsbil7QihlLmNvbnZlcnNhdGlvbklkLHQpO2NvbnN0IHI9VSgpLG89aS5wVVtyXS50b0xvd2VyQ2FzZSgpLHM9TChlLG4pOyFmdW5jdGlvbihlKXtjb25zdCB0PWcuc3RvcmUuZ2V0U3RhdGUoKSxuPSgwLHAueUspKHQpO2lmKCFuKXJldHVybjtjb25zdCByPSgwLEMubnApKG4pKHQpPy5iaXRtb2ppX2JhY2tncm91bmRfaWQ7dm9pZCAwIT09ciYmXCJcIiE9PXImJiQoZSxuLHtiYWNrZ3JvdW5kSW1hZ2VJZDpyLHZlcnNpb246MX0pfShlLmNvbnZlcnNhdGlvbklkKSxzLmFjdGl2YXRlKCkscy5nZXRDYWxsaW5nTWFuYWdlcigpLnN0YXJ0Q2FsbChyKSxhKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpgY2FsbGluZy5vdXRnb2luZ19jYWxsLiR7b30uc3VjY2Vzc2B9KX1mdW5jdGlvbiBXKGUpe00oZSxcImVuZENhbGxcIikuZ2V0Q2FsbGluZ01hbmFnZXIoKS51cGRhdGVQdWJsaXNoZWRNZWRpYShpLnBVLk5PTkUpLGEoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwiY2FsbGluZy5lbmRfY2FsbFwifSl9ZnVuY3Rpb24gaihlLHQsbil7QihlLmNvbnZlcnNhdGlvbklkLHQpO2NvbnN0IHI9VSgpLG89aS5wVVtyXS50b0xvd2VyQ2FzZSgpO2EoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOmBjYWxsaW5nLmpvaW5fY2FsbC5mcm9tLiR7bn0uJHtvfS5hdHRlbXB0YH0pO2NvbnN0IHM9TChlKTtzLmFjdGl2YXRlKCkscy5nZXRDYWxsaW5nTWFuYWdlcigpLnVwZGF0ZVB1Ymxpc2hlZE1lZGlhKHIpLGEoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOmBjYWxsaW5nLmpvaW5fY2FsbC4ke299LnN1Y2Nlc3NgfSl9ZnVuY3Rpb24gWihlKXtNKGUsXCJkaXNtaXNzQ2FsbFwiKS5nZXRDYWxsaW5nTWFuYWdlcigpLmRpc21pc3NDYWxsKCksYSgpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJjYWxsaW5nLmRpc21pc3NfY2FsbFwifSl9ZnVuY3Rpb24geihlLHQsbil7Y29uc3Qgcj1MKGUpO3IuZ2V0Q2FsbGluZ01hbmFnZXIoKS5hcHBseVJlbW90ZVN0YXRlKHQsbiksci5nZXRMb2NhbFN0YXRlKCkuY2FsbGluZ1N0YXRlPT09aS5VcS5OT05FJiZGKGUuY29udmVyc2F0aW9uSWQscil9ZnVuY3Rpb24gSyhlLHQsbil7Y29uc3Qgcj1MKGUpLG89ci5nZXRDYWxsaW5nTWFuYWdlcigpLnByb2Nlc3NOb3RpZmljYXRpb24odCxuKTtyZXR1cm4gci5nZXRMb2NhbFN0YXRlKCkuY2FsbGluZ1N0YXRlPT09aS5VcS5OT05FJiZGKGUuY29udmVyc2F0aW9uSWQsciksbz09PWkuWHQuRElTUExBWX1mdW5jdGlvbiBZKGUpe2NvbnN0W3Qsbl09KDAsbS5oOCkoZy5zdG9yZS5nZXRTdGF0ZSgpKTtuKGUpLEcoKX1mdW5jdGlvbiBxKGUsdCl7eChlLHQpLEcoKX1mdW5jdGlvbiBYKGUpe2NvbnN0W3Qsbl09KDAsbS5XRCkoZy5zdG9yZS5nZXRTdGF0ZSgpKTtuKGUpfWZ1bmN0aW9uIFEoKXtKKCl9ZnVuY3Rpb24gSihlKXtmb3IoY29uc3RbdCxuXW9mIE4oKS5zZXNzaW9ucy5lbnRyaWVzKCkpaWYodCE9PWUpc3dpdGNoKG4uc2Vzc2lvbi5nZXRMb2NhbFN0YXRlKCkuY2FsbGluZ1N0YXRlKXtjYXNlIGkuVXEuUklOR0lORzpaKG4uY29udmVyc2F0aW9uSWQpO2JyZWFrO2Nhc2UgaS5VcS5BTlNXRVJFRDpjYXNlIGkuVXEuSU5fQ0FMTDpjYXNlIGkuVXEuQ0FMTElORzpXKG4uY29udmVyc2F0aW9uSWQpO2Nhc2UgaS5VcS5OT05FOn19ZnVuY3Rpb24gJChlLHQsbil7TigpLm9uQmFja2dyb3VuZEltYWdlU3RhdGVDaGFuZ2VkKGUsdCxuKSxNKGUsXCJicm9hZGNhc3RMb2NhbEJhY2tncm91bmRJbWFnZVN0YXRlXCIpLmdldENhbGxpbmdNYW5hZ2VyKCkudXBkYXRlQmFja2dyb3VuZEltYWdlU3RhdGUobil9ZnVuY3Rpb24gZWUoZSl7Zm9yKGNvbnN0IHQgb2YgVigpKXQuc2Vzc2lvbi5nZXRDYWxsaW5nTWFuYWdlcigpLnVwZGF0ZVNjcmVlblNoYXJpbmdTdGF0dXMoZSl9ZnVuY3Rpb24gdGUoZSx0KXtNKGUsXCJyZXBvcnRDYWxsZWRBZGRlZFBhcnRpY2lwYW50c1wiKS5nZXRNZXRyaWNzTWV0YWRhdGFDb250YWluZXIoKS5jYWxsZWRBZGRlZFBhcnRpY2lwYW50cyh0KX1jKCkuZ2V0TG9nZ2VyKFwiW1RhbGtdW3Nlc3Npb25NYW5hZ2VyXVwiKX0sMTczNTooZSx0LG4pPT57bi5kKHQse3Q6KCk9PnJ9KTtsZXQgcj1mdW5jdGlvbihlKXtyZXR1cm4gZVtlLkNIQVQ9MF09XCJDSEFUXCIsZVtlLkZFRUQ9NDFdPVwiRkVFRFwiLGVbZS5ORVdfQ0hBVD02N109XCJORVdfQ0hBVFwiLGV9KHt9KX0sOTExMjk6KGUsdCxuKT0+e24uZCh0LHskRzooKT0+ZyxFTjooKT0+QyxKWDooKT0+dSxKcDooKT0+UixLbTooKT0+byxUOTooKT0+cCxaRDooKT0+bSxfRjooKT0+VCxlMTooKT0+RSxoNjooKT0+ayxpUjooKT0+YSxqWTooKT0+YyxuWjooKT0+SSxvMzooKT0+aCxwdzooKT0+cyxyMzooKT0+ZCxyOTooKT0+UyxySTooKT0+dixzTzooKT0+eSx0XzooKT0+Xyx1YzooKT0+aSx1ZDooKT0+bCx5RDooKT0+QSx5ZjooKT0+Zix6RjooKT0+Yn0pLG4oNTE0NjMpO3ZhciByPW4oOTExMzIpO2NvbnN0IGk9e30sbz1PKFwibm9uZVwiLChyLkxvY2FsZS5lblVTLHIuTG9jYWxlLmVuUExPQyxyLkxvY2FsZS5hckFSLHIuTG9jYWxlLmRhREssci5Mb2NhbGUuZGVERSxyLkxvY2FsZS5lbkdCLHIuTG9jYWxlLmVzRVMsci5Mb2NhbGUuZXNNWCxyLkxvY2FsZS5maUZJLHIuTG9jYWxlLmZyRlIsci5Mb2NhbGUuaGlJTixyLkxvY2FsZS5pdElULHIuTG9jYWxlLmphSlAsci5Mb2NhbGUubmJOTyxyLkxvY2FsZS5ubE5MLHIuTG9jYWxlLnBsUEwsci5Mb2NhbGUucHRCUixyLkxvY2FsZS5zdlNFLHIuTG9jYWxlLnRyVFIsci5Mb2NhbGUuemhIYW5zKSksYT1PKDllNSkscz1PKFwibG9jYWxlXCIpLGM9TyghMSksbD1PKCEwKSx1PU8oITEpLGQ9TyghMSksZj1PKCExKSxwPU8oITEpLG09TyghMSksaD1PKCExKSx2PU8oITEpLGc9TyghMCkseT1PKCExKSxFPU8oITEpLF89TyghMCksST0oTyghMSksTyghMSkpLFM9TyghMSksYj1PKCExKSxUPU8oITEpLEM9TyghMSksQT1PKCExKSxSPShPKCExKSxPKCExKSksaz1PKCExKTtmdW5jdGlvbiBPKGUsdCl7cmV0dXJuKCk9PmV9fSw2ODIzMDooZSx0LG4pPT57bi5kKHQse0pWOigpPT5mLHhJOigpPT5kfSksbig0NTM2Myk7dmFyIHI9big5Nzc4MiksaT1uLm4ociksbz1uKDM0MjEyKSxhPW4oMzIwNjEpLHM9big0NTExMSk7Y29uc3QgYz0oMCxzLl9LKShhLmIpLGw9KDAscy5naikoe25hbWU6XCJvcHRpb25hbC1hdXRoZWQtZmV0Y2hcIixyZXF1ZXN0SW50ZXJjZXB0b3JzOltjXSxtZXRyaWNQYXRoTWFwcGVyczpbcy5qQV19KTtuKDc2OTMxKTt2YXIgdT1uKDQ1NTkyKTthc3luYyBmdW5jdGlvbiBkKGUpe2NvbnN0IHQ9YXdhaXQgbChlPz8oMCx1LlopKFwidmVyc2lvbi5qc29uXCIpKTtpZih0Lm9rKXJldHVybiBmdW5jdGlvbihlKXtjb25zdCB0PWU7aWYoIShcInZlcnNpb25cImluIHQpKXRocm93IG5ldyBFcnJvcihcIkVycm9yIHBhcnNpbmcgbGF0ZXN0IHZlcnNpb24gaW5mbyAtIG5vIHZlcnNpb24gcHJvcGVydHlcIik7cmV0dXJuIHR9KGF3YWl0IHQuanNvbigpKTt0aHJvdyBuZXcgby52RCh0KX1pKCkuZ2V0TG9nZ2VyKFwiW3VwZGF0ZXNfc2VydmljZV1cIik7Y2xhc3MgZiBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSksdGhpcy5uYW1lPVwiU2VjUHJveHlFcnJvclwiLHRoaXMucmVzcG9uc2U9dH19fSw2OTA5MzooZSx0LG4pPT57bi5kKHQse0hiOigpPT5wLFdLOigpPT5sLHR4OigpPT5FfSk7dmFyIHI9big0NzUwNCksaT1uKDc5NzQyKSxvPW4oNzIzMTMpO2xldCBhO2NvbnN0IHM9ZT0+SlNPTi5zdHJpbmdpZnkoZS5tYXAoKGU9Pih7ZGF0YTppLmZyb21CeXRlQXJyYXkoZS5kYXRhKSxsYXN0VXBkYXRlZFRpbWVzdGFtcDplLmxhc3RVcGRhdGVkVGltZXN0YW1wLmdldFRpbWUoKX0pKSkpLGM9ZT0+e2NvbnN0IHQ9SlNPTi5wYXJzZShlKTtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0Lm1hcCgoZT0+e2lmKFwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRhdGFcImluIGUmJlwic3RyaW5nXCI9PXR5cGVvZiBlLmRhdGEmJlwibGFzdFVwZGF0ZWRUaW1lc3RhbXBcImluIGUmJlwibnVtYmVyXCI9PXR5cGVvZiBlLmxhc3RVcGRhdGVkVGltZXN0YW1wKXJldHVybntkYXRhOmkudG9CeXRlQXJyYXkoZS5kYXRhKSxsYXN0VXBkYXRlZFRpbWVzdGFtcDpuZXcgRGF0ZShlLmxhc3RVcGRhdGVkVGltZXN0YW1wKX07dGhyb3cgbmV3IEVycm9yKFwiZmFpbGVkIHRvIHBhcnNlIGRhdGEgdG8gV3JhcHBlZElkZW50aXR5S2V5XCIpfSkpO3Rocm93IG5ldyBFcnJvcihcImZhaWxlZCB0byBwYXJzZSBkYXRhIHRvIFdyYXBwZWRJZGVudGl0eUtleXNcIil9LGw9ZT0+KGF8fChhPSgwLHIubykoXCJlMmVlSWRlbnRpdHlLZXlcIixlLCgoKT0+W10pLHMsYykpLGEpO2xldCB1O2NvbnN0IGQ9ZT0+dm9pZCAwPT09ZT9cInVuZGVmaW5lZFwiOkpTT04uc3RyaW5naWZ5KHtkYXRhOmkuZnJvbUJ5dGVBcnJheShlLnJ3ay5kYXRhKSxpZGVudGl0eUtleUlkOmkuZnJvbUJ5dGVBcnJheShlLmtleUlkZW50aWZpZXIuZGF0YSl9KSxmPWU9PntpZihcInVuZGVmaW5lZFwiPT09ZSlyZXR1cm47Y29uc3QgdD1KU09OLnBhcnNlKGUpO2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0JiZcImRhdGFcImluIHQmJlwic3RyaW5nXCI9PXR5cGVvZiB0LmRhdGEmJlwiaWRlbnRpdHlLZXlJZFwiaW4gdCYmXCJzdHJpbmdcIj09dHlwZW9mIHQuaWRlbnRpdHlLZXlJZClyZXR1cm57cndrOntkYXRhOmkudG9CeXRlQXJyYXkodC5kYXRhKX0sa2V5SWRlbnRpZmllcjp7ZGF0YTppLnRvQnl0ZUFycmF5KHQuaWRlbnRpdHlLZXlJZCl9fTt0aHJvdyBuZXcgRXJyb3IoXCJmYWlsZWQgdG8gcGFyc2UgZGF0YSB0byBSb290V3JhcHBpbmdLZXlcIil9LHA9KCk9Pih1fHwodT0oMCxyLm8pKFwiZTJlZUl3ZWtLZXlcIiwoMCxvLkcpKCksKCgpPT57fSksZCxmKSksdSk7bGV0IG07Y29uc3QgaD1lPT5KU09OLnN0cmluZ2lmeSh7Y2xlYXJ0ZXh0UHJpdmF0ZUtleTppLmZyb21CeXRlQXJyYXkoZS5jbGVhcnRleHRQcml2YXRlS2V5KSxjbGVhcnRleHRQdWJsaWNLZXk6aS5mcm9tQnl0ZUFycmF5KGUuY2xlYXJ0ZXh0UHVibGljS2V5KSxpZGVudGl0eUtleUlkOmkuZnJvbUJ5dGVBcnJheShlLmlkZW50aXR5S2V5SWQuZGF0YSksdmVyc2lvbjplLnZlcnNpb259KSx2PWU9Pntjb25zdCB0PUpTT04ucGFyc2UoZSk7aWYoXCJvYmplY3RcIj09dHlwZW9mIHQmJlwiY2xlYXJ0ZXh0UHJpdmF0ZUtleVwiaW4gdCYmXCJzdHJpbmdcIj09dHlwZW9mIHQuY2xlYXJ0ZXh0UHJpdmF0ZUtleSYmXCJjbGVhcnRleHRQdWJsaWNLZXlcImluIHQmJlwic3RyaW5nXCI9PXR5cGVvZiB0LmNsZWFydGV4dFB1YmxpY0tleSYmXCJpZGVudGl0eUtleUlkXCJpbiB0JiZcInN0cmluZ1wiPT10eXBlb2YgdC5pZGVudGl0eUtleUlkJiZcInZlcnNpb25cImluIHQmJlwibnVtYmVyXCI9PXR5cGVvZiB0LnZlcnNpb24pcmV0dXJue2NsZWFydGV4dFByaXZhdGVLZXk6aS50b0J5dGVBcnJheSh0LmNsZWFydGV4dFByaXZhdGVLZXkpLGNsZWFydGV4dFB1YmxpY0tleTppLnRvQnl0ZUFycmF5KHQuY2xlYXJ0ZXh0UHVibGljS2V5KSxpZGVudGl0eUtleUlkOntkYXRhOmkudG9CeXRlQXJyYXkodC5pZGVudGl0eUtleUlkKX0sdmVyc2lvbjp0LnZlcnNpb259O3Rocm93IG5ldyBFcnJvcihcImZhaWxlZCB0byBwYXJzZSBkYXRhIHRvIEN1cnJlbnRVc2VySWRlbnRpdHlLZXlcIil9LGc9ZT0+dm9pZCAwPT09ZT9cInVuZGVmaW5lZFwiOkpTT04uc3RyaW5naWZ5KHtpZGVudGl0eTpoKGUuaWRlbnRpdHkpLHJ3azppLmZyb21CeXRlQXJyYXkoZS5yd2suZGF0YSl9KSx5PWU9PntpZihcInVuZGVmaW5lZFwiPT09ZSlyZXR1cm47Y29uc3QgdD1KU09OLnBhcnNlKGUpO2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0JiZcImlkZW50aXR5XCJpbiB0JiZcInN0cmluZ1wiPT10eXBlb2YgdC5pZGVudGl0eSYmXCJyd2tcImluIHQmJlwic3RyaW5nXCI9PXR5cGVvZiB0LnJ3aylyZXR1cm57aWRlbnRpdHk6dih0LmlkZW50aXR5KSxyd2s6e2RhdGE6aS50b0J5dGVBcnJheSh0LnJ3ayl9fTt0aHJvdyBuZXcgRXJyb3IoXCJmYWlsZWQgdG8gcGFyc2UgZGF0YSB0byBJZGVudGl0eUtleUFuZFJ3a1wiKX0sRT1lPT4obXx8KG09KDAsci5vKShcImUyZWVUZW1wS2V5XCIsZSwoKCk9Pnt9KSxnLHkpKSxtKX0sNDc1MDQ6KGUsdCxuKT0+e24uZCh0LHtvOigpPT5vfSk7dmFyIHI9big3MTM3MSksaT1uKDMxOTQxKTtmdW5jdGlvbiBvKGUsdCxuKXtsZXQgbz1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106SlNPTi5zdHJpbmdpZnksYT1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XT9hcmd1bWVudHNbNF06SlNPTi5wYXJzZTtmdW5jdGlvbiBzKHMpe2NvbnN0IGM9YHVkcy4ke2V9LiR7c31gO2xldCBsO2FzeW5jIGZ1bmN0aW9uIHUoKXtjb25zdCBlPWF3YWl0IHQuZ2V0SXRlbShjKTtpZighZSl7Y29uc3QgZT1uKCk7cmV0dXJuIGF3YWl0IGQoZSksZX10cnl7cmV0dXJuIGEoZSl9Y2F0Y2goZSl7cmV0dXJuKDAsci5UYikoZSksZigpLG4oKX19YXN5bmMgZnVuY3Rpb24gZChlKXtyZXR1cm4gbD8ubmV4dChlKSx0LnNldEl0ZW0oYyxvKGUpKX1hc3luYyBmdW5jdGlvbiBmKCl7cmV0dXJuIHQucmVtb3ZlSXRlbShjKX1yZXR1cm57Z2V0OnUsc2V0OmQsc3Vic2NyaWJlOmFzeW5jIGZ1bmN0aW9uKGUpe2lmKCFsKXtjb25zdCBlPWF3YWl0IHUoKTtsPW5ldyBpLnkoZSl9cmV0dXJuIGwuc3Vic2NyaWJlKGUpfSxwdXJnZTpmfX1yZXR1cm57aXRlbUZvclVzZXI6cyxzaGFyZWRJdGVtOmZ1bmN0aW9uKCl7cmV0dXJuIHMoXCJzaGFyZWRcIil9LHB1cmdlQWxsVXNlckRhdGE6YXN5bmMgZnVuY3Rpb24oKXtsZXR7ZXhjbHVkZVVzZXI6bn09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2NvbnN0IHI9W107Zm9yKGNvbnN0IGkgb2YgYXdhaXQgdC5rZXlzKCkpaWYoaS5zdGFydHNXaXRoKGB1ZHMuJHtlfS5gKSl7aWYobiYmaS5lbmRzV2l0aChuKSljb250aW51ZTtyLnB1c2godC5yZW1vdmVJdGVtKGkpKX1hd2FpdCBQcm9taXNlLmFsbChyKX19fX0sNzIzMTM6KGUsdCxuKT0+e24uZCh0LHskbzooKT0+cyxHOigpPT5hfSk7dmFyIHI9big4ODMwNiksaT1uLm4ociksbz1uKDk2NTExKTtjb25zdCBhPWkoKSgoKCk9PntpZighd2luZG93Py5zZXNzaW9uU3RvcmFnZSl0aHJvdyBuZXcgRXJyb3IoXCJ3aW5kb3cuc2Vzc2lvblN0b3JhZ2UgaXNuJ3QgYXZhaWxhYmxlIGluIHRoaXMgY29udGV4dFwiKTtyZXR1cm57Z2V0SXRlbTphc3luYyBlPT5Qcm9taXNlLnJlc29sdmUod2luZG93LnNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZSkpLHJlbW92ZUl0ZW06YXN5bmMgZT0+UHJvbWlzZS5yZXNvbHZlKHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKGUpKSxzZXRJdGVtOmFzeW5jKGUsdCk9PlByb21pc2UucmVzb2x2ZSh3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShlLHQpKSxrZXlzOmFzeW5jKCk9PlByb21pc2UucmVzb2x2ZShPYmplY3Qua2V5cyh3aW5kb3cuc2Vzc2lvblN0b3JhZ2UpKX19KSkscz1pKCkoKCgpPT57aWYoIXdpbmRvdz8ubG9jYWxTdG9yYWdlKXRocm93IG5ldyBFcnJvcihcIndpbmRvdy5sb2NhbFN0b3JhZ2UgaXNuJ3QgYXZhaWxhYmxlIGluIHRoaXMgY29udGV4dFwiKTtyZXR1cm57Z2V0SXRlbTphc3luYyBlPT5Qcm9taXNlLnJlc29sdmUod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGUpKSxyZW1vdmVJdGVtOmFzeW5jIGU9PlByb21pc2UucmVzb2x2ZSh3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oZSkpLHNldEl0ZW06YXN5bmMoZSx0KT0+UHJvbWlzZS5yZXNvbHZlKHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShlLHQpKSxrZXlzOmFzeW5jKCk9PlByb21pc2UucmVzb2x2ZShPYmplY3Qua2V5cyh3aW5kb3cubG9jYWxTdG9yYWdlKSl9fSkpO2koKSgoKCk9Pih7Z2V0SXRlbTpvLlUyLHJlbW92ZUl0ZW06by5JVixzZXRJdGVtOm8udDgsa2V5czpvLlhQfSkpKX0sNDQxMzA6KGUsdCxuKT0+e24uZCh0LHtOOigpPT5yfSk7dmFyIHI9e0ZSSUVORDowLFBFTkRJTkc6MSxCTE9DS0VEOjIsREVMRVRFRDozLEZPTExPV0lORzo2fX0sMjM4MzQ6KGUsdCxuKT0+e2Z1bmN0aW9uIHIoKXtyZXR1cm4hMH1uLmQodCx7QkI6KCk9PnIsZkE6KCk9PmkselU6KCk9Pm99KTtjb25zdCBpPVwid2ViLnNuYXBjaGF0LmNvbVwiLG89XCJodHRwczovL1wiK2l9LDM5MzE2OihlLHQsbik9PntuLmQodCx7cTooKT0+cn0pO2NsYXNzIHJ7Y29uc3RydWN0b3IoZSx0KXtjb25zdCBuPVVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW2BpbXBvcnRTY3JpcHRzKCR7SlNPTi5zdHJpbmdpZnkoZS50b1N0cmluZygpKX0pO2BdLHt0eXBlOlwiYXBwbGljYXRpb24vamF2YXNjcmlwdFwifSkpO3RoaXMud29ya2VyPW5ldyBXb3JrZXIobix0KSxVUkwucmV2b2tlT2JqZWN0VVJMKG4pfWdldFdvcmtlcigpe3JldHVybiB0aGlzLndvcmtlcn19fSw2NzYxNDooZSx0LG4pPT57bi5kKHQse0k6KCk9PkMsbDooKT0+VH0pO3ZhciByPW4oNzEzNzEpLGk9big3MjEwOCksbz1uKDYyMzY4KSxhPW4oODExKSxzPW4oMjc3NTYpLGM9big0NTM2MyksbD1uLm4oYyksdT1uKDk3NzgyKSxkPW4ubih1KSxmPW4oMzYxOTEpLHA9big5MzAyMiksbT1uKDg5NjM3KSxoPW4oODExMTMpLHY9big0NTExMSksZz1uKDg3NzMyKSx5PW4oMzM2NyksRT1uKDg2NDI1KTtjb25zdCBfPSgwLHYuZ2opKHtuYW1lOlwid2FzbS11bmF1dGhlZC1mZXRjaFwiLG1ldHJpY1BhdGhNYXBwZXJzOlsoKT0+XCJkZXNrdG9wX3dlYl93YXNtXCJdfSksST1kKCkuZ2V0TG9nZ2VyKFwiW3dhc21dXCIpLFM9W1wid2FzbS1vdXQtb2YtbWVtb3J5XCJdO2Z1bmN0aW9uIGIoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2woKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwid2FzbS5hYm9ydFwifSk7Y29uc3Qgbj1mdW5jdGlvbihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSl7aWYoXCJPT01cIj09PWV8fGUuc3RhcnRzV2l0aChcIkNhbm5vdCBlbmxhcmdlIG1lbW9yeSBhcnJheXMgdG8gc2l6ZVwiKSlyZXR1cm5cIm9vbVwiO2lmKGUuc3RhcnRzV2l0aChcIkFzc2VydGlvbiBmYWlsZWQ6XCIpKXJldHVyblwiYXNzZXJ0XCJ9cmV0dXJuXCJ1bmtub3duXCJ9KHQpO2lmKFwidW5rbm93blwiIT09biYmbCgpLmluY3JlbWVudCh7bWV0cmljc05hbWU6YHdhc20uYWJvcnQuJHtufWB9KSxsKCkuZmx1c2goKSxcInN0cmluZ1wiPT10eXBlb2YgdCl7bGV0IGk7XCJvb21cIj09PW4mJihpPVMsZSh7dHlwZTpcIm91dF9vZl9tZW1vcnlcIixtZXNzYWdlOlwiYWJvcnQgZHVlIHRvIG9vbVwiLGNvbnRleHQ6eS5GfSkpLCgwLHIuVGIpKG5ldyBFcnJvcih0KSx7ZmluZ2VycHJpbnQ6aX0pfWVsc2UgRXJyb3IsKDAsci5UYikodCl9fWFzeW5jIGZ1bmN0aW9uIFQoZSl7cmV0dXJuIG5ldyBQcm9taXNlKCgodCxuKT0+eygwLGkuWikoe3ByaW50OkkuaW5mbyxwcmludEVycjpJLmVycm9yLG9uQWJvcnQ6YihlKSxpbnN0YW50aWF0ZVdhc206KGUsdCk9Pihhc3luYyBmdW5jdGlvbihlKXtjb25zdCB0PWF3YWl0IF8obyk7aWYoIXQub2spe2NvbnN0IGU9YGZhaWxlZCB0byBkb3dubG9hZCAke3QudXJsfSwgc3RhdHVzICR7dC5zdGF0dXN9ICR7dC5zdGF0dXNUZXh0fWA7dGhyb3cgbmV3IEVycm9yKGUpfWNvbnN0IG49cGVyZm9ybWFuY2Uubm93KCk7dHJ5e2NvbnN0IHI9dC51cmwsaT1hd2FpdCBhc3luYyBmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZighKFwidXNlckFnZW50RGF0YVwiaW4gbmF2aWdhdG9yKSlyZXR1cm4hMTtjb25zdCB0PW5hdmlnYXRvci51c2VyQWdlbnREYXRhPy5icmFuZHMsbj10Py5maW5kKChlPT5bXCJHb29nbGUgQ2hyb21lXCIsXCJDaHJvbWl1bVwiXS5pbmNsdWRlcyhlLmJyYW5kKSkpO3JldHVybiEhbiYmcGFyc2VJbnQobi52ZXJzaW9uKTwxMDV9KCkmJmRlbGV0ZSBlLnVybCxXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhlLHQpfSh0LGUpOygwLGcueikoaS5tb2R1bGUscik7Y29uc3Qgbz1NYXRoLnJvdW5kKHBlcmZvcm1hbmNlLm5vdygpLW4pO3JldHVybiBsKCkuYWRkVGltZXIoe21ldHJpY3NOYW1lOlwid2FzbS5pbnN0YW50aWF0ZV9zdHJlYW1pbmcubGF0ZW5jeVwiLG1pbGxpU2VjOm99KSxpLmluc3RhbmNlfWNhdGNoKGUpe3Rocm93IGwoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwid2FzbS5jb21waWxlLmVycm9yXCJ9KSxlfX0oZSkudGhlbih0LG4pLHt9KX0pLnRoZW4odCxuKX0pKX1hc3luYyBmdW5jdGlvbiBDKGUsdCl7Y29uc3Qgbj1wZXJmb3JtYW5jZS5ub3coKTtsZXQgcjt0cnl7cj1hd2FpdCBUKHQpfWNhdGNoKGUpe3Rocm93IGwoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwid2FzbS5sb2FkLmVycm9yXCJ9KSxlfWNvbnN0IGk9ci5wbGF0Zm9ybV91dGlsc19QbGF0Zm9ybVV0aWxzLmdldEJ1aWxkSW5mbygpLG89YS52W2kuZmxhdm9yXS50b0xvd2VyQ2FzZSgpO2woKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOmB3YXNtLmxvYWQuZmxhdm9yLiR7b31gfSksci5zaGltc19QbGF0Zm9ybS5pbml0KHthc3NlcnRpb25Nb2RlOnMuX1AuQUxXQVlTLG1pbkxvZ0xldmVsOnMuaW4uSU5GT30se2xvZ1RpbWVkRXZlbnQ6KCk9Pnt0aHJvdyBuZXcgRXJyb3IoXCJ1bnVzZWRcIil9LGxvZzptLkx0fSksci5zaGltc19QbGF0Zm9ybS5yZWdpc3RlclNlcmlhbFRhc2tRdWV1ZShoLkMpLHIuc2hpbXNfUGxhdGZvcm0uaW5zdGFsbEVycm9yUmVwb3J0ZXIoe3JlcG9ydEVycm9yOmU9Pntjb25zdCB0PXMucWpbZS5jYXRlZ29yeV0udG9Mb3dlckNhc2UoKTtsKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpgd2FzbS5mYXRhbC4ke3R9LiR7ZS5jb2RlfWB9KX19KSxyLnNoaW1zX1BsYXRmb3JtLmluc3RhbGxOb25GYXRhbFJlcG9ydGVyKHtyZXBvcnRFcnJvcjplPT57Y29uc3QgdD1zLnFqW2UuY2F0ZWdvcnldLnRvTG93ZXJDYXNlKCk7bCgpLmluY3JlbWVudCh7bWV0cmljc05hbWU6YHdhc20ubm9uX2ZhdGFsLiR7dH0uJHtlLmNvZGV9YH0pfX0pO2NvbnN0IGM9KDAsZi5FKShyLmdyYXBoZW5lX0NsaWVudE1ldHJpY3NQcm9jZXNzb3IpLHU9KDAsRS5tKShyLnBsYXRmb3JtX3V0aWxzX1BsYXRmb3JtVXRpbHMpOygwLHAubikoci5ncnBjX0dycGNNYW5hZ2VyLGUpO2NvbnN0IGQ9TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKS1uKTtyZXR1cm4gbCgpLmFkZFRpbWVyKHttZXRyaWNzTmFtZTpcIndhc20ubG9hZC5sYXRlbmN5XCIsbWlsbGlTZWM6ZH0pLHt3YXNtTW9kdWxlOnIsY2xlYW51cEZ1bmN0aW9uOigpPT57YygpLHUoKX19fX0sODY0MjU6KGUsdCxuKT0+e24uZCh0LHttOigpPT5hfSk7dmFyIHI9big0NTM2MyksaT1uLm4ociksbz1uKDk3NzgyKTtmdW5jdGlvbiBhKGUpe3tjb25zdCB0PXNldEludGVydmFsKCgoKT0+e2NvbnN0IHQ9cGVyZm9ybWFuY2Uubm93KCksbj1lLmdldE1lbW9yeVN0YXRzKCkscj1NYXRoLnJvdW5kKHBlcmZvcm1hbmNlLm5vdygpLXQpO2koKS5hZGRUaW1lcih7bWV0cmljc05hbWU6XCJ3YXNtLm1lbW9yeS5jb21wdXRlX3VzYWdlXCIsbWlsbGlTZWM6cn0pLGkoKS5hZGRIaXN0b2dyYW0oe21ldHJpY3NOYW1lOlwid2FzbS5tZW1vcnkua2JfdXNlZFwiLHZhbHVlOm4uYWxsb2NUb3RhbEJ5dGVzLzEwMjR9KSxpKCkuYWRkSGlzdG9ncmFtKHttZXRyaWNzTmFtZTpcIndhc20ubWVtb3J5LmtiX3RvdGFsXCIsdmFsdWU6bi5hbGxvY01heEJ5dGVzLzEwMjR9KSxuLmFsbG9jVG90YWxCeXRlcyxuLmFsbG9jTWF4Qnl0ZXN9KSw2ZTQpO3JldHVybigpPT5jbGVhckludGVydmFsKHQpfX1uLm4obykoKS5nZXRMb2dnZXIoXCJbV2FzbU1lbW9yeU1ldHJpY3NdXCIpfSwzMjA2MTooZSx0LG4pPT57bi5kKHQse2I6KCk9PnN9KTt2YXIgcj1uKDQ1MzYzKSxpPW4ubihyKSxvPW4oNjk3MjkpO2NvbnN0IGE9MzZlNTthc3luYyBmdW5jdGlvbiBzKCl7Y29uc3R7YXV0aFRva2VuOmUscmVmcmVzaFRva2VuOnR9PW8uc3RvcmUuZ2V0U3RhdGUoKS5hdXRoO3JldHVybiBlLmxhc3RUb2tlblJlZnJlc2grYTxEYXRlLm5vdygpPyhpKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcInRva2VuX2V4cGlyZWRcIn0pLGF3YWl0IHQoXCJ0b2tlbl9leHBpcmVkXCIpLG8uc3RvcmUuZ2V0U3RhdGUoKS5hdXRoLmF1dGhUb2tlbi50b2tlbik6ZS50b2tlbn19LDM4OTcwOihlLHQsbik9PntuLmQodCx7Q3M6KCk9Pm0sTG46KCk9PnAsTno6KCk9PnUsVTooKT0+bCxkTDooKT0+dixkZDooKT0+cyxnbjooKT0+YyxoTzooKT0+eSxpRDooKT0+ZCxuSjooKT0+Zyx5SzooKT0+Zix5VjooKT0+aH0pO3ZhciByPW4oMjA1NzMpLGk9bigxNjI5Nyksbz1uKDU2MDgzKSxhPW4oNDYzMDgpO2NvbnN0IHM9ZT0+KGU9PmUuYXV0aC5hdXRoU3RhdGUpKGUpPT09YS5qLkxvZ2dlZEluLGM9KDAsci5QMSkocyxpLkEsKChlLHQpPT5lJiZ0JiYoMCxvLnBYKSgpKSksbD1lPT5lLmF1dGguYXV0aFRva2VuLnRva2VuLHU9ZT0+ZS5hdXRoLmxvZ291dCxkPWU9PmUuYXV0aC5tZSxmPWU9PmUuYXV0aC5tZT8uaWQscD1lPT5lLmF1dGgubWU/LnVzZXJuYW1lLG09ZT0+ZS5hdXRoLm1lPy5zbmFwUHJpdmFjeSxoPWU9PmUuYXV0aC5tZT8uYml0bW9qaUF2YXRhcklkLHY9ZT0+WyFlLmxvY2FsU2V0dGluZ3MuaXNPbkJvYXJkRGlzbWlzc2VkJiYhZS5hdXRoLm1lPy5oYXNVc2VyU2VlbkRXZWIsZS5hdXRoLmRpc01pc3NPbmJvYXJkaW5nXSxnPWU9PlshZS5sb2NhbFNldHRpbmdzLmlzT25Cb2FyZERpc21pc3NlZCYmKGUuYXV0aC5tZT8uc2hvdWxkUmVxdWVzdFBlcm1pc3Npb258fCExKSxlLmF1dGguZGlzbWlzc1JlcXVlc3RQZXJtaXNzaW9uXSx5PWU9PmUuYXV0aC5oYXNVc2VyQWNjZXB0ZWRNZXJsaW5KSVR9LDQ2MzA4OihlLHQsbik9PntuLmQodCx7ajooKT0+cn0pO3ZhciByPXtMb2dnZWRPdXQ6MCxMb2dnZWRJbjoxLFByb2Nlc3Npbmc6Mn19LDg0NjYyOihlLHQsbik9PntuLmQodCx7VlY6KCk9PnIsckg6KCk9Pm8sc0Q6KCk9PmF9KTtjb25zdCByPWU9Pih7YmxpenphcmQ6e2hhc1JlcG9ydGVkUGFnZUxvYWQ6ITEsc2hvdWxkUmVwb3J0UGFnZU9wZW46ITAsbWFya1BhZ2VMb2FkUmVwb3J0ZWQ6KCk9PntlKChlPT57ZS5ibGl6emFyZC5oYXNSZXBvcnRlZFBhZ2VMb2FkPSEwfSkpfSxzdG9wUmVwb3J0aW5nUGFnZU9wZW46KCk9PntlKChlPT57ZS5ibGl6emFyZC5zaG91bGRSZXBvcnRQYWdlT3Blbj0hMX0pKX19fSk7bGV0IGk9MDtmdW5jdGlvbiBvKCl7cmV0dXJuIGk8Mn1mdW5jdGlvbiBhKCl7aSs9MX19LDU3MzAxOihlLHQsbik9PntuLmQodCx7QTooKT0+cn0pO2NvbnN0IHI9ZT0+ZS5idWdSZXBvcnQuc2V0SW50ZXJuYWxCdWdSZXBvcnRNb2RhbFZpc2liaWxpdHl9LDMxNDQyOihlLHQsbik9PntuLmQodCx7QjM6KCk9PmksRVk6KCk9Pm8sWXk6KCk9PnIsbHo6KCk9PmEsdmo6KCk9PnN9KTtjb25zdCByPWU9PmUuY2FtZXJhS2l0LnN0cmVhbSxpPWU9Pih7aW5pdGlhbGl6ZUNhbWVyYUtpdDplLmNhbWVyYUtpdC5pbml0aWFsaXplQ2FtZXJhS2l0LGRlc3Ryb3lDYW1lcmFLaXQ6ZS5jYW1lcmFLaXQuZGVzdHJveUNhbWVyYUtpdH0pLG89ZT0+W2UuY2FtZXJhS2l0LnBsYWNlaG9sZGVyQ2Fyb3VzZWxMZW5zSWQsZS5jYW1lcmFLaXQuc2V0UGxhY2Vob2xkZXJDYXJvdXNlbFNlbGVjdGVkTGVuc0lkXSxhPWU9PmUuY2FtZXJhS2l0LmNhbWVyYUtpdFNlc3Npb24scz1lPT5lLmNhbWVyYUtpdC5zaHVmZmxlTGVuc2VzfSw1NjI0MTooZSx0LG4pPT57bi5kKHQse1M6KCk9PmksZjooKT0+cn0pO2NvbnN0IHI9ZT0+KHtnZXRDbGllbnRDb2ZWYWx1ZTplLmdldENsaWVudENvZlZhbHVlLGdldENsaWVudENvZlZhbHVlQW5kTG9nRXhwb3N1cmU6ZS5nZXRDbGllbnRDb2ZWYWx1ZUFuZExvZ0V4cG9zdXJlfSksaT1lPT5lLmluaXRDb2ZTdG9yZX0sNTcyODE6KGUsdCxuKT0+e24uZCh0LHtJOigpPT5FdCxuOigpPT5fdH0pO3ZhciByLGk9big3MTM3MSksbz1uKDg1OTIxKSxhPW4ubihvKSxzPW4oODMyMTIpLGM9bi5uKHMpOyFmdW5jdGlvbihlKXtlW2UuVU5LTk9XTl9CRU5DSE1BUks9MF09XCJVTktOT1dOX0JFTkNITUFSS1wiLGVbZS5DUFVfR0ZMT1BTPTFdPVwiQ1BVX0dGTE9QU1wiLGVbZS5HUFVfR0ZMT1BTPTJdPVwiR1BVX0dGTE9QU1wiLGVbZS5HUFVfR0ZMT1BTX1ZFQ1RPUj0zXT1cIkdQVV9HRkxPUFNfVkVDVE9SXCIsZVtlLkdQVV9TWVNURU1fQ0FQQUJJTElUSUVTPTRdPVwiR1BVX1NZU1RFTV9DQVBBQklMSVRJRVNcIixlW2UuR1BVX1ZFUlRFWF9USFJPVUdIUFVUPTVdPVwiR1BVX1ZFUlRFWF9USFJPVUdIUFVUXCIsZVtlLkdQVV9TSU1QTEVfR0VPTUVUUllfVEhST1VHSFBVVD02XT1cIkdQVV9TSU1QTEVfR0VPTUVUUllfVEhST1VHSFBVVFwiLGVbZS5HUFVfR0FVU1NJQU5fQkxVUj03XT1cIkdQVV9HQVVTU0lBTl9CTFVSXCIsZVtlLkNQVV9NRU1PUllfVEhST1VHSFBVVD04XT1cIkNQVV9NRU1PUllfVEhST1VHSFBVVFwiLGVbZS5HUFVfRklMTF9SQVRFPTldPVwiR1BVX0ZJTExfUkFURVwiLGVbZS5NRU1fVE9UQUxfTUVNT1JZPTEwXT1cIk1FTV9UT1RBTF9NRU1PUllcIixlW2UuQ1BVX05VTV9QUk9DRVNTT1JTPTExXT1cIkNQVV9OVU1fUFJPQ0VTU09SU1wiLGVbZS5ERVZJQ0VfSU5GT1JNQVRJT05fQ0hJUFNFVD0xMl09XCJERVZJQ0VfSU5GT1JNQVRJT05fQ0hJUFNFVFwiLGVbZS5ERVZJQ0VfSU5GT1JNQVRJT05fQlVJTERfSEFSRFdBUkU9MTNdPVwiREVWSUNFX0lORk9STUFUSU9OX0JVSUxEX0hBUkRXQVJFXCIsZVtlLkRFVklDRV9JTkZPUk1BVElPTl9CVUlMRF9CUkFORD0xNF09XCJERVZJQ0VfSU5GT1JNQVRJT05fQlVJTERfQlJBTkRcIixlW2UuREVWSUNFX0lORk9STUFUSU9OX0JVSUxEX01BTlVGQUNUVVJFUj0xNV09XCJERVZJQ0VfSU5GT1JNQVRJT05fQlVJTERfTUFOVUZBQ1RVUkVSXCIsZVtlLkRFVklDRV9JTkZPUk1BVElPTl9CVUlMRF9NT0RFTD0xNl09XCJERVZJQ0VfSU5GT1JNQVRJT05fQlVJTERfTU9ERUxcIixlW2UuREVWSUNFX0lORk9STUFUSU9OX1NDUkVFTl9QUk9QRVJUSUVTPTE3XT1cIkRFVklDRV9JTkZPUk1BVElPTl9TQ1JFRU5fUFJPUEVSVElFU1wiLGVbZS5ERVZJQ0VfSU5GT1JNQVRJT05fQ09ERUNfQ0FQQUJJTElURVM9MThdPVwiREVWSUNFX0lORk9STUFUSU9OX0NPREVDX0NBUEFCSUxJVEVTXCIsZVtlLkNQVV9QUklNRV9LT1RMSU49MTldPVwiQ1BVX1BSSU1FX0tPVExJTlwiLGVbZS5DUFVfUFJJTUVfTkFUSVZFPTIwXT1cIkNQVV9QUklNRV9OQVRJVkVcIixlW2UuQ1BVX1NRUlRfS09UTElOPTIxXT1cIkNQVV9TUVJUX0tPVExJTlwiLGVbZS5DUFVfU1FSVF9OQVRJVkU9MjJdPVwiQ1BVX1NRUlRfTkFUSVZFXCIsZVtlLkNQVV9JTlRfTUFUSF9LT1RMSU49MjNdPVwiQ1BVX0lOVF9NQVRIX0tPVExJTlwiLGVbZS5DUFVfSU5UX01BVEhfTkFUSVZFPTI0XT1cIkNQVV9JTlRfTUFUSF9OQVRJVkVcIixlW2UuREVWSUNFX0lORk9STUFUSU9OX0dMX1ZFUlNJT049MjVdPVwiREVWSUNFX0lORk9STUFUSU9OX0dMX1ZFUlNJT05cIixlW2UuREVWSUNFX0lORk9STUFUSU9OX0dMU0xfVkVSU0lPTj0yNl09XCJERVZJQ0VfSU5GT1JNQVRJT05fR0xTTF9WRVJTSU9OXCIsZVtlLkRFVklDRV9JTkZPUk1BVElPTl9PUEVOQ0xfRVhJU1RTPTI3XT1cIkRFVklDRV9JTkZPUk1BVElPTl9PUEVOQ0xfRVhJU1RTXCIsZVtlLkRFVklDRV9JTkZPUk1BVElPTl9JU19IT1NUX1VOSUZJRURfTUVNT1JZPTI4XT1cIkRFVklDRV9JTkZPUk1BVElPTl9JU19IT1NUX1VOSUZJRURfTUVNT1JZXCIsZVtlLkRFVklDRV9JTkZPUk1BVElPTl9PUEVOQ0xfVkVSU0lPTj0yOV09XCJERVZJQ0VfSU5GT1JNQVRJT05fT1BFTkNMX1ZFUlNJT05cIixlW2UuREVWSUNFX0lORk9STUFUSU9OX1RJTUlOR19SRVNPTFVUSU9OX05TPTMwXT1cIkRFVklDRV9JTkZPUk1BVElPTl9USU1JTkdfUkVTT0xVVElPTl9OU1wiLGVbZS5ERVZJQ0VfSU5GT1JNQVRJT05fQUREUkVTU19TSVpFPTMxXT1cIkRFVklDRV9JTkZPUk1BVElPTl9BRERSRVNTX1NJWkVcIixlW2UuREVWSUNFX0lORk9STUFUSU9OX0dQVV9NQVhfQ0xPQ0tfRlJFUVVFTkNZX01IWj0zMl09XCJERVZJQ0VfSU5GT1JNQVRJT05fR1BVX01BWF9DTE9DS19GUkVRVUVOQ1lfTUhaXCIsZVtlLkRFVklDRV9JTkZPUk1BVElPTl9DT01QVVRFX1VOSVRTPTMzXT1cIkRFVklDRV9JTkZPUk1BVElPTl9DT01QVVRFX1VOSVRTXCIsZVtlLkRFVklDRV9JTkZPUk1BVElPTl9NQVhfV09SS0dST1VQX1NJWkU9MzRdPVwiREVWSUNFX0lORk9STUFUSU9OX01BWF9XT1JLR1JPVVBfU0laRVwiLGVbZS5ERVZJQ0VfSU5GT1JNQVRJT05fTE9DQUxfTUVNT1JZX0lTX0xPQ0FMPTM1XT1cIkRFVklDRV9JTkZPUk1BVElPTl9MT0NBTF9NRU1PUllfSVNfTE9DQUxcIixlW2UuREVWSUNFX0lORk9STUFUSU9OX0xPQ0FMX01FTU9SWV9TSVpFPTM2XT1cIkRFVklDRV9JTkZPUk1BVElPTl9MT0NBTF9NRU1PUllfU0laRVwiLGVbZS5ERVZJQ0VfSU5GT1JNQVRJT05fR0xPQkFMX01FTU9SWV9DQUNIRV9TSVpFPTM3XT1cIkRFVklDRV9JTkZPUk1BVElPTl9HTE9CQUxfTUVNT1JZX0NBQ0hFX1NJWkVcIixlW2UuREVWSUNFX0lORk9STUFUSU9OX0dMT0JBTF9NRU1PUllfQ0FDSEVMSU5FX1NJWkU9MzhdPVwiREVWSUNFX0lORk9STUFUSU9OX0dMT0JBTF9NRU1PUllfQ0FDSEVMSU5FX1NJWkVcIixlW2UuREVWSUNFX0lORk9STUFUSU9OX0dMX0hBU19GRU5DRV9TWU5DX09CSkVDVD0zOV09XCJERVZJQ0VfSU5GT1JNQVRJT05fR0xfSEFTX0ZFTkNFX1NZTkNfT0JKRUNUXCIsZVtlLkRFVklDRV9JTkZPUk1BVElPTl9IRVhBR09OX05OX0xJQlJBUllfVkVSU0lPTj00MF09XCJERVZJQ0VfSU5GT1JNQVRJT05fSEVYQUdPTl9OTl9MSUJSQVJZX1ZFUlNJT05cIixlW2UuR1BVX0dGTE9QU19WMj00MV09XCJHUFVfR0ZMT1BTX1YyXCIsZVtlLkdQVV9HRkxPUFNfVkVDVE9SX1YyPTQyXT1cIkdQVV9HRkxPUFNfVkVDVE9SX1YyXCIsZVtlLkRFVklDRV9JTkZPUk1BVElPTl9HUFVfTU9ERUw9NDNdPVwiREVWSUNFX0lORk9STUFUSU9OX0dQVV9NT0RFTFwiLGVbZS5ERVZJQ0VfSU5GT1JNQVRJT05fQ09ERUNfQ0FQQUJJTElURVNfVjI9NDRdPVwiREVWSUNFX0lORk9STUFUSU9OX0NPREVDX0NBUEFCSUxJVEVTX1YyXCIsZVtlLkRFVklDRV9JTkZPUk1BVElPTl9NRURJQV9QRVJGT1JNQU5DRV9DTEFTUz00NV09XCJERVZJQ0VfSU5GT1JNQVRJT05fTUVESUFfUEVSRk9STUFOQ0VfQ0xBU1NcIixlW2UuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwifShyfHwocj17fSkpLGMoKS51dGlsLkxvbmchPT1hKCkmJihjKCkudXRpbC5Mb25nPWEoKSxjKCkuY29uZmlndXJlKCkpO2NvbnN0IGw9e3NlY29uZHM6MCxuYW5vczowfSx1PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmMoKS5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLnNlY29uZHMmJnQudWludDMyKDgpLmludDY0KGUuc2Vjb25kcyksMCE9PWUubmFub3MmJnQudWludDMyKDE2KS5pbnQzMihlLm5hbm9zKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBjKCkuUmVhZGVyP2U6bmV3KGMoKS5SZWFkZXIpKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPU9iamVjdC5hc3NpZ24oe30sbCk7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuc2Vjb25kcz1mKG4uaW50NjQoKSk7YnJlYWs7Y2FzZSAyOmkubmFub3M9bi5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LGwpO3JldHVybiB2b2lkIDAhPT1lLnNlY29uZHMmJm51bGwhPT1lLnNlY29uZHM/dC5zZWNvbmRzPWUuc2Vjb25kczp0LnNlY29uZHM9MCx2b2lkIDAhPT1lLm5hbm9zJiZudWxsIT09ZS5uYW5vcz90Lm5hbm9zPWUubmFub3M6dC5uYW5vcz0wLHR9fTt2YXIgZD0oKCk9PntpZih2b2lkIDAhPT1kKXJldHVybiBkO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmKXJldHVybiBzZWxmO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvdztpZih2b2lkIDAhPT1uLmcpcmV0dXJuIG4uZzt0aHJvd1wiVW5hYmxlIHRvIGxvY2F0ZSBnbG9iYWwgb2JqZWN0XCJ9KSgpO2Z1bmN0aW9uIGYoZSl7aWYoZS5ndChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikpdGhyb3cgbmV3IGQuRXJyb3IoXCJWYWx1ZSBpcyBsYXJnZXIgdGhhbiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlwiKTtyZXR1cm4gZS50b051bWJlcigpfWMoKS51dGlsLkxvbmchPT1hKCkmJihjKCkudXRpbC5Mb25nPWEoKSxjKCkuY29uZmlndXJlKCkpO2NvbnN0IHA9e30sbT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpjKCkuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT1lLmludFZhbHVlJiZ0LnVpbnQzMig4KS5pbnQzMihlLmludFZhbHVlKSx2b2lkIDAhPT1lLmxvbmdWYWx1ZSYmdC51aW50MzIoMTYpLmludDY0KGUubG9uZ1ZhbHVlKSx2b2lkIDAhPT1lLmJvb2xWYWx1ZSYmdC51aW50MzIoMjQpLmJvb2woZS5ib29sVmFsdWUpLHZvaWQgMCE9PWUuZmxvYXRWYWx1ZSYmdC51aW50MzIoMzcpLmZsb2F0KGUuZmxvYXRWYWx1ZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYygpLlJlYWRlcj9lOm5ldyhjKCkuUmVhZGVyKShlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT1PYmplY3QuYXNzaWduKHt9LHApO2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmludFZhbHVlPW4uaW50MzIoKTticmVhaztjYXNlIDI6aS5sb25nVmFsdWU9UyhuLmludDY0KCkpO2JyZWFrO2Nhc2UgMzppLmJvb2xWYWx1ZT1uLmJvb2woKTticmVhaztjYXNlIDQ6aS5mbG9hdFZhbHVlPW4uZmxvYXQoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxwKTtyZXR1cm4gdm9pZCAwIT09ZS5pbnRWYWx1ZSYmbnVsbCE9PWUuaW50VmFsdWU/dC5pbnRWYWx1ZT1lLmludFZhbHVlOnQuaW50VmFsdWU9dm9pZCAwLHZvaWQgMCE9PWUubG9uZ1ZhbHVlJiZudWxsIT09ZS5sb25nVmFsdWU/dC5sb25nVmFsdWU9ZS5sb25nVmFsdWU6dC5sb25nVmFsdWU9dm9pZCAwLHZvaWQgMCE9PWUuYm9vbFZhbHVlJiZudWxsIT09ZS5ib29sVmFsdWU/dC5ib29sVmFsdWU9ZS5ib29sVmFsdWU6dC5ib29sVmFsdWU9dm9pZCAwLHZvaWQgMCE9PWUuZmxvYXRWYWx1ZSYmbnVsbCE9PWUuZmxvYXRWYWx1ZT90LmZsb2F0VmFsdWU9ZS5mbG9hdFZhbHVlOnQuZmxvYXRWYWx1ZT12b2lkIDAsdH19LGg9e2JlbmNobWFya05hbWVzOjB9LHY9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YygpLldyaXRlci5jcmVhdGUoKTt0LnVpbnQzMigxMCkuZm9yaygpO2Zvcihjb25zdCBuIG9mIGUuYmVuY2htYXJrTmFtZXMpdC5pbnQzMihuKTtyZXR1cm4gdC5sZGVsaW0oKSx2b2lkIDAhPT1lLmV4cGlyYXRpb25UaW1lc3RhbXAmJnUuZW5jb2RlKChuPWUuZXhwaXJhdGlvblRpbWVzdGFtcCx7c2Vjb25kczpuLmdldFRpbWUoKS8xZTMsbmFub3M6bi5nZXRUaW1lKCklMWUzKjFlNn0pLHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLHQ7dmFyIG59LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGMoKS5SZWFkZXI/ZTpuZXcoYygpLlJlYWRlcikoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9T2JqZWN0LmFzc2lnbih7fSxoKTtmb3IoaS5iZW5jaG1hcmtOYW1lcz1bXTtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmlmKDI9PSg3JmUpKXtjb25zdCBlPW4udWludDMyKCkrbi5wb3M7Zm9yKDtuLnBvczxlOylpLmJlbmNobWFya05hbWVzLnB1c2gobi5pbnQzMigpKX1lbHNlIGkuYmVuY2htYXJrTmFtZXMucHVzaChuLmludDMyKCkpO2JyZWFrO2Nhc2UgMjppLmV4cGlyYXRpb25UaW1lc3RhbXA9SSh1LmRlY29kZShuLG4udWludDMyKCkpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxoKTtpZih0LmJlbmNobWFya05hbWVzPVtdLHZvaWQgMCE9PWUuYmVuY2htYXJrTmFtZXMmJm51bGwhPT1lLmJlbmNobWFya05hbWVzKWZvcihjb25zdCBuIG9mIGUuYmVuY2htYXJrTmFtZXMpdC5iZW5jaG1hcmtOYW1lcy5wdXNoKG4pO3JldHVybiB2b2lkIDAhPT1lLmV4cGlyYXRpb25UaW1lc3RhbXAmJm51bGwhPT1lLmV4cGlyYXRpb25UaW1lc3RhbXA/dC5leHBpcmF0aW9uVGltZXN0YW1wPWUuZXhwaXJhdGlvblRpbWVzdGFtcDp0LmV4cGlyYXRpb25UaW1lc3RhbXA9dm9pZCAwLHR9fSxnPXtuYW1lOjB9LHk9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YygpLldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUubmFtZSYmdC51aW50MzIoOCkuaW50MzIoZS5uYW1lKSx2b2lkIDAhPT1lLnZhbHVlJiZtLmVuY29kZShlLnZhbHVlLHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGMoKS5SZWFkZXI/ZTpuZXcoYygpLlJlYWRlcikoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9T2JqZWN0LmFzc2lnbih7fSxnKTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5uYW1lPW4uaW50MzIoKTticmVhaztjYXNlIDI6aS52YWx1ZT1tLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LGcpO3JldHVybiB2b2lkIDAhPT1lLm5hbWUmJm51bGwhPT1lLm5hbWU/dC5uYW1lPWUubmFtZTp0Lm5hbWU9MCx2b2lkIDAhPT1lLnZhbHVlJiZudWxsIT09ZS52YWx1ZT90LnZhbHVlPW0uZnJvbVBhcnRpYWwoZS52YWx1ZSk6dC52YWx1ZT12b2lkIDAsdH19O3ZhciBFLF89KCgpPT57aWYodm9pZCAwIT09XylyZXR1cm4gXztpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZilyZXR1cm4gc2VsZjtpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93KXJldHVybiB3aW5kb3c7aWYodm9pZCAwIT09bi5nKXJldHVybiBuLmc7dGhyb3dcIlVuYWJsZSB0byBsb2NhdGUgZ2xvYmFsIG9iamVjdFwifSkoKTtmdW5jdGlvbiBJKGUpe2xldCB0PTFlMyplLnNlY29uZHM7cmV0dXJuIHQrPWUubmFub3MvMWU2LG5ldyBEYXRlKHQpfWZ1bmN0aW9uIFMoZSl7aWYoZS5ndChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikpdGhyb3cgbmV3IF8uRXJyb3IoXCJWYWx1ZSBpcyBsYXJnZXIgdGhhbiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlwiKTtyZXR1cm4gZS50b051bWJlcigpfWMoKS51dGlsLkxvbmchPT1hKCkmJihjKCkudXRpbC5Mb25nPWEoKSxjKCkuY29uZmlndXJlKCkpLGZ1bmN0aW9uKGUpe2VbZS5VTlNFVD0wXT1cIlVOU0VUXCIsZVtlLlVTRVI9MV09XCJVU0VSXCIsZVtlLkRFVklDRT0yXT1cIkRFVklDRVwiLGVbZS5XRUJfQ0xJRU5UPTNdPVwiV0VCX0NMSUVOVFwiLGVbZS5BRF9BQ0NPVU5UPTRdPVwiQURfQUNDT1VOVFwiLGVbZS5VU0VSTkFNRT01XT1cIlVTRVJOQU1FXCIsZVtlLkFEX01PREVSQVRJT05fQUQ9Nl09XCJBRF9NT0RFUkFUSU9OX0FEXCIsZVtlLldFQl9TTkFQQ0hBVF9VU0VSPTddPVwiV0VCX1NOQVBDSEFUX1VTRVJcIixlW2UuSU5URVJOQUw9OF09XCJJTlRFUk5BTFwiLGVbZS5BTV9PUkdBTklaQVRJT049OV09XCJBTV9PUkdBTklaQVRJT05cIixlW2UuQU1fTUVNQkVSPTEwXT1cIkFNX01FTUJFUlwiLGVbZS5BTV9TRVNTSU9OPTExXT1cIkFNX1NFU1NJT05cIixlW2UuQU1fUFJPRklMRT0xMl09XCJBTV9QUk9GSUxFXCIsZVtlLkFNX1NOQVBDSEFUX1VTRVI9MTNdPVwiQU1fU05BUENIQVRfVVNFUlwiLGVbZS5TTkFQQ0hBVF9BRFZFUlRJU0lORz0xNF09XCJTTkFQQ0hBVF9BRFZFUlRJU0lOR1wiLGVbZS5BTV9DTElFTlQ9MTVdPVwiQU1fQ0xJRU5UXCIsZVtlLk1JU0NISUVGPTE2XT1cIk1JU0NISUVGXCIsZVtlLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIn0oRXx8KEU9e30pKTtjb25zdCBiPXt0eXBlOjAsc3RyaW5nVmFsdWU6XCJcIixsb2dnaW5nSWRWYWx1ZTpcIlwifSxUPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmMoKS5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLnR5cGUmJnQudWludDMyKDgpLmludDMyKGUudHlwZSksXCJcIiE9PWUuc3RyaW5nVmFsdWUmJnQudWludDMyKDE4KS5zdHJpbmcoZS5zdHJpbmdWYWx1ZSksXCJcIiE9PWUubG9nZ2luZ0lkVmFsdWUmJnQudWludDMyKDI2KS5zdHJpbmcoZS5sb2dnaW5nSWRWYWx1ZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYygpLlJlYWRlcj9lOm5ldyhjKCkuUmVhZGVyKShlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT1PYmplY3QuYXNzaWduKHt9LGIpO2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnR5cGU9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMjppLnN0cmluZ1ZhbHVlPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmkubG9nZ2luZ0lkVmFsdWU9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxiKTtyZXR1cm4gdm9pZCAwIT09ZS50eXBlJiZudWxsIT09ZS50eXBlP3QudHlwZT1lLnR5cGU6dC50eXBlPTAsdm9pZCAwIT09ZS5zdHJpbmdWYWx1ZSYmbnVsbCE9PWUuc3RyaW5nVmFsdWU/dC5zdHJpbmdWYWx1ZT1lLnN0cmluZ1ZhbHVlOnQuc3RyaW5nVmFsdWU9XCJcIix2b2lkIDAhPT1lLmxvZ2dpbmdJZFZhbHVlJiZudWxsIT09ZS5sb2dnaW5nSWRWYWx1ZT90LmxvZ2dpbmdJZFZhbHVlPWUubG9nZ2luZ0lkVmFsdWU6dC5sb2dnaW5nSWRWYWx1ZT1cIlwiLHR9fTtjKCkudXRpbC5Mb25nIT09YSgpJiYoYygpLnV0aWwuTG9uZz1hKCksYygpLmNvbmZpZ3VyZSgpKTtjb25zdCBDPXt2YWx1ZTohMX0sQT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpjKCkuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiEwPT09ZS52YWx1ZSYmdC51aW50MzIoOCkuYm9vbChlLnZhbHVlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBjKCkuUmVhZGVyP2U6bmV3KGMoKS5SZWFkZXIpKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPU9iamVjdC5hc3NpZ24oe30sQyk7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2kudmFsdWU9bi5ib29sKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PU9iamVjdC5hc3NpZ24oe30sQyk7cmV0dXJuIHZvaWQgMCE9PWUudmFsdWUmJm51bGwhPT1lLnZhbHVlP3QudmFsdWU9ZS52YWx1ZTp0LnZhbHVlPSExLHR9fTt2YXIgUixrLE8sTix3PSgoKT0+e2lmKHZvaWQgMCE9PXcpcmV0dXJuIHc7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYpcmV0dXJuIHNlbGY7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93O2lmKHZvaWQgMCE9PW4uZylyZXR1cm4gbi5nO3Rocm93XCJVbmFibGUgdG8gbG9jYXRlIGdsb2JhbCBvYmplY3RcIn0pKCk7YygpLnV0aWwuTG9uZyE9PWEoKSYmKGMoKS51dGlsLkxvbmc9YSgpLGMoKS5jb25maWd1cmUoKSksZnVuY3Rpb24oZSl7ZVtlLlVOS05PV05fRVZFTlRfVFlQRT0wXT1cIlVOS05PV05fRVZFTlRfVFlQRVwiLGVbZS5DT0xEX1NUQVJUPTFdPVwiQ09MRF9TVEFSVFwiLGVbZS5XQVJNX1NUQVJUPTJdPVwiV0FSTV9TVEFSVFwiLGVbZS5GT1JFR1JPVU5EX1RSSUdHRVI9M109XCJGT1JFR1JPVU5EX1RSSUdHRVJcIixlW2UuQkFDS0dST1VORF9UUklHR0VSPTRdPVwiQkFDS0dST1VORF9UUklHR0VSXCIsZVtlLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIn0oUnx8KFI9e30pKSxmdW5jdGlvbihlKXtlW2UuVU5LTk9XTl9BUFBfU1RBVEU9MF09XCJVTktOT1dOX0FQUF9TVEFURVwiLGVbZS5GT1JFR1JPVU5EPTFdPVwiRk9SRUdST1VORFwiLGVbZS5CQUNLR1JPVU5EPTJdPVwiQkFDS0dST1VORFwiLGVbZS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCJ9KGt8fChrPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkRFRkFVTFRfSU5TVFJVTUVOVEFUSU9OPTBdPVwiREVGQVVMVF9JTlNUUlVNRU5UQVRJT05cIixlW2UuVVNFUl9BVVRIRU5USUNBVElPTj0xXT1cIlVTRVJfQVVUSEVOVElDQVRJT05cIixlW2UuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwifShPfHwoTz17fSkpLGZ1bmN0aW9uKGUpe2VbZS5VTktOT1dOX05FVFdPUktfVFlQRT0wXT1cIlVOS05PV05fTkVUV09SS19UWVBFXCIsZVtlLkNFTExVTEFSPTFdPVwiQ0VMTFVMQVJcIixlW2UuV0lGST0yXT1cIldJRklcIixlW2UuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwifShOfHwoTj17fSkpO2NvbnN0IEQ9e2NvbmZpZ1Jlc3VsdHNFdGFnOlwiXCIsbmFtZXNwYWNlczowLGdob3N0SWQ6XCJcIixjb3VudHJ5Q29kZTpcIlwiLHNjcmVlbldpZHRoOjAsc2NyZWVuSGVpZ2h0OjAsbWF4VmlkZW9XaWR0aFB4OjAsbWF4VmlkZW9IZWlnaHRQeDowLGRlbHRhU3luYzohMSx1c2VyQWdlbnQ6XCJcIix0cmlnZ2VyRXZlbnRUeXBlOjAsYXBwU3RhdGU6MCxsb2NhbGU6XCJcIixkZXZpY2VJZDpcIlwiLHVzZXJJZDpcIlwiLGNsaWVudElwOlwiXCIsaXNVbkF1dGhvcml6ZWQ6ITEsYXBwTG9jYWxlOlwiXCIsaW5zdHJ1bWVudGF0aW9uOjAsbGFzdFN1Y2Nlc3NmdWxTeW5jOjAsaXNMb2dvdXQ6ITEscGFja2FnZUluc3RhbGxlcjpcIlwiLHN5bmNUcmlnZ2VyQmxpenphcmRTZXNzaW9uSWQ6XCJcIixzeW5jRXhlY3V0aW9uQmxpenphcmRTZXNzaW9uSWQ6XCJcIixjb2ZTeW5jVHJpZ2dlckRlbGF5RnJvbVN0YXJ0dXBNczowLGNvZlN5bmNFeGVjdXRpb25EZWxheUZyb21TdGFydHVwTXM6MCxzeW5jVHJpZ2dlclRpbWU6MCxzbmFwa2l0QXBwSWQ6XCJcIixsZW5zY29yZVZlcnNpb246MCxjb25maWdOYW1lczpcIlwiLGluY2x1ZGVUZXN0VXNlclRyZWF0bWVudHM6ITEsZGlzYWJsZUV4cG9zdXJlTG9nZ2luZzohMSxsZW5zQ2x1c3Rlck9yaWc0OjAsY2xpZW50SWQ6XCJcIn0sUD17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpjKCkuV3JpdGVyLmNyZWF0ZSgpO1wiXCIhPT1lLmNvbmZpZ1Jlc3VsdHNFdGFnJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUuY29uZmlnUmVzdWx0c0V0YWcpLHQudWludDMyKDE4KS5mb3JrKCk7Zm9yKGNvbnN0IG4gb2YgZS5uYW1lc3BhY2VzKXQuaW50MzIobik7dC5sZGVsaW0oKSxcIlwiIT09ZS5naG9zdElkJiZ0LnVpbnQzMigyNikuc3RyaW5nKGUuZ2hvc3RJZCksXCJcIiE9PWUuY291bnRyeUNvZGUmJnQudWludDMyKDM0KS5zdHJpbmcoZS5jb3VudHJ5Q29kZSksMCE9PWUuc2NyZWVuV2lkdGgmJnQudWludDMyKDQwKS5pbnQzMihlLnNjcmVlbldpZHRoKSwwIT09ZS5zY3JlZW5IZWlnaHQmJnQudWludDMyKDQ4KS5pbnQzMihlLnNjcmVlbkhlaWdodCksdm9pZCAwIT09ZS5jb25uZWN0aXZpdHkmJkwuZW5jb2RlKGUuY29ubmVjdGl2aXR5LHQudWludDMyKDU4KS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLm1heFZpZGVvV2lkdGhQeCYmdC51aW50MzIoNjQpLmludDMyKGUubWF4VmlkZW9XaWR0aFB4KSwwIT09ZS5tYXhWaWRlb0hlaWdodFB4JiZ0LnVpbnQzMig3MikuaW50MzIoZS5tYXhWaWRlb0hlaWdodFB4KTtmb3IoY29uc3QgbiBvZiBlLmJlbmNobWFya1Jlc3VsdHMpeS5lbmNvZGUobix0LnVpbnQzMig4MikuZm9yaygpKS5sZGVsaW0oKTshMD09PWUuZGVsdGFTeW5jJiZ0LnVpbnQzMig4OCkuYm9vbChlLmRlbHRhU3luYyksXCJcIiE9PWUudXNlckFnZW50JiZ0LnVpbnQzMig5OCkuc3RyaW5nKGUudXNlckFnZW50KSwwIT09ZS50cmlnZ2VyRXZlbnRUeXBlJiZ0LnVpbnQzMigxMDQpLmludDMyKGUudHJpZ2dlckV2ZW50VHlwZSksMCE9PWUuYXBwU3RhdGUmJnQudWludDMyKDExMikuaW50MzIoZS5hcHBTdGF0ZSksXCJcIiE9PWUubG9jYWxlJiZ0LnVpbnQzMigxMjIpLnN0cmluZyhlLmxvY2FsZSksXCJcIiE9PWUuZGV2aWNlSWQmJnQudWludDMyKDEzMCkuc3RyaW5nKGUuZGV2aWNlSWQpLFwiXCIhPT1lLnVzZXJJZCYmdC51aW50MzIoMTM4KS5zdHJpbmcoZS51c2VySWQpLFwiXCIhPT1lLmNsaWVudElwJiZ0LnVpbnQzMigxNDYpLnN0cmluZyhlLmNsaWVudElwKSwhMD09PWUuaXNVbkF1dGhvcml6ZWQmJnQudWludDMyKDE1MikuYm9vbChlLmlzVW5BdXRob3JpemVkKSxcIlwiIT09ZS5hcHBMb2NhbGUmJnQudWludDMyKDE2Mikuc3RyaW5nKGUuYXBwTG9jYWxlKSwwIT09ZS5pbnN0cnVtZW50YXRpb24mJnQudWludDMyKDE2OCkuaW50MzIoZS5pbnN0cnVtZW50YXRpb24pLDAhPT1lLmxhc3RTdWNjZXNzZnVsU3luYyYmdC51aW50MzIoMTc2KS5pbnQ2NChlLmxhc3RTdWNjZXNzZnVsU3luYyksITA9PT1lLmlzTG9nb3V0JiZ0LnVpbnQzMigxODQpLmJvb2woZS5pc0xvZ291dCksXCJcIiE9PWUucGFja2FnZUluc3RhbGxlciYmdC51aW50MzIoMTk0KS5zdHJpbmcoZS5wYWNrYWdlSW5zdGFsbGVyKSxcIlwiIT09ZS5zeW5jVHJpZ2dlckJsaXp6YXJkU2Vzc2lvbklkJiZ0LnVpbnQzMigyMDIpLnN0cmluZyhlLnN5bmNUcmlnZ2VyQmxpenphcmRTZXNzaW9uSWQpLFwiXCIhPT1lLnN5bmNFeGVjdXRpb25CbGl6emFyZFNlc3Npb25JZCYmdC51aW50MzIoMjEwKS5zdHJpbmcoZS5zeW5jRXhlY3V0aW9uQmxpenphcmRTZXNzaW9uSWQpLDAhPT1lLmNvZlN5bmNUcmlnZ2VyRGVsYXlGcm9tU3RhcnR1cE1zJiZ0LnVpbnQzMigyMTYpLmludDMyKGUuY29mU3luY1RyaWdnZXJEZWxheUZyb21TdGFydHVwTXMpLDAhPT1lLmNvZlN5bmNFeGVjdXRpb25EZWxheUZyb21TdGFydHVwTXMmJnQudWludDMyKDIyNCkuaW50MzIoZS5jb2ZTeW5jRXhlY3V0aW9uRGVsYXlGcm9tU3RhcnR1cE1zKSwwIT09ZS5zeW5jVHJpZ2dlclRpbWUmJnQudWludDMyKDIzMikuaW50NjQoZS5zeW5jVHJpZ2dlclRpbWUpLHZvaWQgMCE9PWUuZGVjb2RlckVuY29kZXJBdmFpbGFiaWxpdHkmJnguZW5jb2RlKGUuZGVjb2RlckVuY29kZXJBdmFpbGFiaWxpdHksdC51aW50MzIoMjQyKS5mb3JrKCkpLmxkZWxpbSgpLFwiXCIhPT1lLnNuYXBraXRBcHBJZCYmdC51aW50MzIoMjUwKS5zdHJpbmcoZS5zbmFwa2l0QXBwSWQpLDAhPT1lLmxlbnNjb3JlVmVyc2lvbiYmdC51aW50MzIoMjU2KS5pbnQzMihlLmxlbnNjb3JlVmVyc2lvbiksdm9pZCAwIT09ZS5ydWlkJiZULmVuY29kZShlLnJ1aWQsdC51aW50MzIoMjY2KS5mb3JrKCkpLmxkZWxpbSgpO2Zvcihjb25zdCBuIG9mIGUuY29uZmlnTmFtZXMpdC51aW50MzIoMjc0KS5zdHJpbmcobik7cmV0dXJuITA9PT1lLmluY2x1ZGVUZXN0VXNlclRyZWF0bWVudHMmJnQudWludDMyKDI4OCkuYm9vbChlLmluY2x1ZGVUZXN0VXNlclRyZWF0bWVudHMpLCEwPT09ZS5kaXNhYmxlRXhwb3N1cmVMb2dnaW5nJiZ0LnVpbnQzMigyOTYpLmJvb2woZS5kaXNhYmxlRXhwb3N1cmVMb2dnaW5nKSwwIT09ZS5sZW5zQ2x1c3Rlck9yaWc0JiZ0LnVpbnQzMigzMDQpLmludDMyKGUubGVuc0NsdXN0ZXJPcmlnNCksXCJcIiE9PWUuY2xpZW50SWQmJnQudWludDMyKDMxNCkuc3RyaW5nKGUuY2xpZW50SWQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGMoKS5SZWFkZXI/ZTpuZXcoYygpLlJlYWRlcikoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9T2JqZWN0LmFzc2lnbih7fSxEKTtmb3IoaS5uYW1lc3BhY2VzPVtdLGkuYmVuY2htYXJrUmVzdWx0cz1bXSxpLmNvbmZpZ05hbWVzPVtdO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5jb25maWdSZXN1bHRzRXRhZz1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppZigyPT0oNyZlKSl7Y29uc3QgZT1uLnVpbnQzMigpK24ucG9zO2Zvcig7bi5wb3M8ZTspaS5uYW1lc3BhY2VzLnB1c2gobi5pbnQzMigpKX1lbHNlIGkubmFtZXNwYWNlcy5wdXNoKG4uaW50MzIoKSk7YnJlYWs7Y2FzZSAzOmkuZ2hvc3RJZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNDppLmNvdW50cnlDb2RlPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA1Omkuc2NyZWVuV2lkdGg9bi5pbnQzMigpO2JyZWFrO2Nhc2UgNjppLnNjcmVlbkhlaWdodD1uLmludDMyKCk7YnJlYWs7Y2FzZSA3OmkuY29ubmVjdGl2aXR5PUwuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSA4OmkubWF4VmlkZW9XaWR0aFB4PW4uaW50MzIoKTticmVhaztjYXNlIDk6aS5tYXhWaWRlb0hlaWdodFB4PW4uaW50MzIoKTticmVhaztjYXNlIDEwOmkuYmVuY2htYXJrUmVzdWx0cy5wdXNoKHkuZGVjb2RlKG4sbi51aW50MzIoKSkpO2JyZWFrO2Nhc2UgMTE6aS5kZWx0YVN5bmM9bi5ib29sKCk7YnJlYWs7Y2FzZSAxMjppLnVzZXJBZ2VudD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMTM6aS50cmlnZ2VyRXZlbnRUeXBlPW4uaW50MzIoKTticmVhaztjYXNlIDE0OmkuYXBwU3RhdGU9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMTU6aS5sb2NhbGU9bi5zdHJpbmcoKTticmVhaztjYXNlIDE2OmkuZGV2aWNlSWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDE3OmkudXNlcklkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAxODppLmNsaWVudElwPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAxOTppLmlzVW5BdXRob3JpemVkPW4uYm9vbCgpO2JyZWFrO2Nhc2UgMjA6aS5hcHBMb2NhbGU9bi5zdHJpbmcoKTticmVhaztjYXNlIDIxOmkuaW5zdHJ1bWVudGF0aW9uPW4uaW50MzIoKTticmVhaztjYXNlIDIyOmkubGFzdFN1Y2Nlc3NmdWxTeW5jPUIobi5pbnQ2NCgpKTticmVhaztjYXNlIDIzOmkuaXNMb2dvdXQ9bi5ib29sKCk7YnJlYWs7Y2FzZSAyNDppLnBhY2thZ2VJbnN0YWxsZXI9bi5zdHJpbmcoKTticmVhaztjYXNlIDI1Omkuc3luY1RyaWdnZXJCbGl6emFyZFNlc3Npb25JZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjY6aS5zeW5jRXhlY3V0aW9uQmxpenphcmRTZXNzaW9uSWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDI3OmkuY29mU3luY1RyaWdnZXJEZWxheUZyb21TdGFydHVwTXM9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMjg6aS5jb2ZTeW5jRXhlY3V0aW9uRGVsYXlGcm9tU3RhcnR1cE1zPW4uaW50MzIoKTticmVhaztjYXNlIDI5Omkuc3luY1RyaWdnZXJUaW1lPUIobi5pbnQ2NCgpKTticmVhaztjYXNlIDMwOmkuZGVjb2RlckVuY29kZXJBdmFpbGFiaWxpdHk9eC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDMxOmkuc25hcGtpdEFwcElkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAzMjppLmxlbnNjb3JlVmVyc2lvbj1uLmludDMyKCk7YnJlYWs7Y2FzZSAzMzppLnJ1aWQ9VC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDM0OmkuY29uZmlnTmFtZXMucHVzaChuLnN0cmluZygpKTticmVhaztjYXNlIDM2OmkuaW5jbHVkZVRlc3RVc2VyVHJlYXRtZW50cz1uLmJvb2woKTticmVhaztjYXNlIDM3OmkuZGlzYWJsZUV4cG9zdXJlTG9nZ2luZz1uLmJvb2woKTticmVhaztjYXNlIDM4OmkubGVuc0NsdXN0ZXJPcmlnND1uLmludDMyKCk7YnJlYWs7Y2FzZSAzOTppLmNsaWVudElkPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PU9iamVjdC5hc3NpZ24oe30sRCk7aWYodC5uYW1lc3BhY2VzPVtdLHQuYmVuY2htYXJrUmVzdWx0cz1bXSx0LmNvbmZpZ05hbWVzPVtdLHZvaWQgMCE9PWUuY29uZmlnUmVzdWx0c0V0YWcmJm51bGwhPT1lLmNvbmZpZ1Jlc3VsdHNFdGFnP3QuY29uZmlnUmVzdWx0c0V0YWc9ZS5jb25maWdSZXN1bHRzRXRhZzp0LmNvbmZpZ1Jlc3VsdHNFdGFnPVwiXCIsdm9pZCAwIT09ZS5uYW1lc3BhY2VzJiZudWxsIT09ZS5uYW1lc3BhY2VzKWZvcihjb25zdCBuIG9mIGUubmFtZXNwYWNlcyl0Lm5hbWVzcGFjZXMucHVzaChuKTtpZih2b2lkIDAhPT1lLmdob3N0SWQmJm51bGwhPT1lLmdob3N0SWQ/dC5naG9zdElkPWUuZ2hvc3RJZDp0Lmdob3N0SWQ9XCJcIix2b2lkIDAhPT1lLmNvdW50cnlDb2RlJiZudWxsIT09ZS5jb3VudHJ5Q29kZT90LmNvdW50cnlDb2RlPWUuY291bnRyeUNvZGU6dC5jb3VudHJ5Q29kZT1cIlwiLHZvaWQgMCE9PWUuc2NyZWVuV2lkdGgmJm51bGwhPT1lLnNjcmVlbldpZHRoP3Quc2NyZWVuV2lkdGg9ZS5zY3JlZW5XaWR0aDp0LnNjcmVlbldpZHRoPTAsdm9pZCAwIT09ZS5zY3JlZW5IZWlnaHQmJm51bGwhPT1lLnNjcmVlbkhlaWdodD90LnNjcmVlbkhlaWdodD1lLnNjcmVlbkhlaWdodDp0LnNjcmVlbkhlaWdodD0wLHZvaWQgMCE9PWUuY29ubmVjdGl2aXR5JiZudWxsIT09ZS5jb25uZWN0aXZpdHk/dC5jb25uZWN0aXZpdHk9TC5mcm9tUGFydGlhbChlLmNvbm5lY3Rpdml0eSk6dC5jb25uZWN0aXZpdHk9dm9pZCAwLHZvaWQgMCE9PWUubWF4VmlkZW9XaWR0aFB4JiZudWxsIT09ZS5tYXhWaWRlb1dpZHRoUHg/dC5tYXhWaWRlb1dpZHRoUHg9ZS5tYXhWaWRlb1dpZHRoUHg6dC5tYXhWaWRlb1dpZHRoUHg9MCx2b2lkIDAhPT1lLm1heFZpZGVvSGVpZ2h0UHgmJm51bGwhPT1lLm1heFZpZGVvSGVpZ2h0UHg/dC5tYXhWaWRlb0hlaWdodFB4PWUubWF4VmlkZW9IZWlnaHRQeDp0Lm1heFZpZGVvSGVpZ2h0UHg9MCx2b2lkIDAhPT1lLmJlbmNobWFya1Jlc3VsdHMmJm51bGwhPT1lLmJlbmNobWFya1Jlc3VsdHMpZm9yKGNvbnN0IG4gb2YgZS5iZW5jaG1hcmtSZXN1bHRzKXQuYmVuY2htYXJrUmVzdWx0cy5wdXNoKHkuZnJvbVBhcnRpYWwobikpO2lmKHZvaWQgMCE9PWUuZGVsdGFTeW5jJiZudWxsIT09ZS5kZWx0YVN5bmM/dC5kZWx0YVN5bmM9ZS5kZWx0YVN5bmM6dC5kZWx0YVN5bmM9ITEsdm9pZCAwIT09ZS51c2VyQWdlbnQmJm51bGwhPT1lLnVzZXJBZ2VudD90LnVzZXJBZ2VudD1lLnVzZXJBZ2VudDp0LnVzZXJBZ2VudD1cIlwiLHZvaWQgMCE9PWUudHJpZ2dlckV2ZW50VHlwZSYmbnVsbCE9PWUudHJpZ2dlckV2ZW50VHlwZT90LnRyaWdnZXJFdmVudFR5cGU9ZS50cmlnZ2VyRXZlbnRUeXBlOnQudHJpZ2dlckV2ZW50VHlwZT0wLHZvaWQgMCE9PWUuYXBwU3RhdGUmJm51bGwhPT1lLmFwcFN0YXRlP3QuYXBwU3RhdGU9ZS5hcHBTdGF0ZTp0LmFwcFN0YXRlPTAsdm9pZCAwIT09ZS5sb2NhbGUmJm51bGwhPT1lLmxvY2FsZT90LmxvY2FsZT1lLmxvY2FsZTp0LmxvY2FsZT1cIlwiLHZvaWQgMCE9PWUuZGV2aWNlSWQmJm51bGwhPT1lLmRldmljZUlkP3QuZGV2aWNlSWQ9ZS5kZXZpY2VJZDp0LmRldmljZUlkPVwiXCIsdm9pZCAwIT09ZS51c2VySWQmJm51bGwhPT1lLnVzZXJJZD90LnVzZXJJZD1lLnVzZXJJZDp0LnVzZXJJZD1cIlwiLHZvaWQgMCE9PWUuY2xpZW50SXAmJm51bGwhPT1lLmNsaWVudElwP3QuY2xpZW50SXA9ZS5jbGllbnRJcDp0LmNsaWVudElwPVwiXCIsdm9pZCAwIT09ZS5pc1VuQXV0aG9yaXplZCYmbnVsbCE9PWUuaXNVbkF1dGhvcml6ZWQ/dC5pc1VuQXV0aG9yaXplZD1lLmlzVW5BdXRob3JpemVkOnQuaXNVbkF1dGhvcml6ZWQ9ITEsdm9pZCAwIT09ZS5hcHBMb2NhbGUmJm51bGwhPT1lLmFwcExvY2FsZT90LmFwcExvY2FsZT1lLmFwcExvY2FsZTp0LmFwcExvY2FsZT1cIlwiLHZvaWQgMCE9PWUuaW5zdHJ1bWVudGF0aW9uJiZudWxsIT09ZS5pbnN0cnVtZW50YXRpb24/dC5pbnN0cnVtZW50YXRpb249ZS5pbnN0cnVtZW50YXRpb246dC5pbnN0cnVtZW50YXRpb249MCx2b2lkIDAhPT1lLmxhc3RTdWNjZXNzZnVsU3luYyYmbnVsbCE9PWUubGFzdFN1Y2Nlc3NmdWxTeW5jP3QubGFzdFN1Y2Nlc3NmdWxTeW5jPWUubGFzdFN1Y2Nlc3NmdWxTeW5jOnQubGFzdFN1Y2Nlc3NmdWxTeW5jPTAsdm9pZCAwIT09ZS5pc0xvZ291dCYmbnVsbCE9PWUuaXNMb2dvdXQ/dC5pc0xvZ291dD1lLmlzTG9nb3V0OnQuaXNMb2dvdXQ9ITEsdm9pZCAwIT09ZS5wYWNrYWdlSW5zdGFsbGVyJiZudWxsIT09ZS5wYWNrYWdlSW5zdGFsbGVyP3QucGFja2FnZUluc3RhbGxlcj1lLnBhY2thZ2VJbnN0YWxsZXI6dC5wYWNrYWdlSW5zdGFsbGVyPVwiXCIsdm9pZCAwIT09ZS5zeW5jVHJpZ2dlckJsaXp6YXJkU2Vzc2lvbklkJiZudWxsIT09ZS5zeW5jVHJpZ2dlckJsaXp6YXJkU2Vzc2lvbklkP3Quc3luY1RyaWdnZXJCbGl6emFyZFNlc3Npb25JZD1lLnN5bmNUcmlnZ2VyQmxpenphcmRTZXNzaW9uSWQ6dC5zeW5jVHJpZ2dlckJsaXp6YXJkU2Vzc2lvbklkPVwiXCIsdm9pZCAwIT09ZS5zeW5jRXhlY3V0aW9uQmxpenphcmRTZXNzaW9uSWQmJm51bGwhPT1lLnN5bmNFeGVjdXRpb25CbGl6emFyZFNlc3Npb25JZD90LnN5bmNFeGVjdXRpb25CbGl6emFyZFNlc3Npb25JZD1lLnN5bmNFeGVjdXRpb25CbGl6emFyZFNlc3Npb25JZDp0LnN5bmNFeGVjdXRpb25CbGl6emFyZFNlc3Npb25JZD1cIlwiLHZvaWQgMCE9PWUuY29mU3luY1RyaWdnZXJEZWxheUZyb21TdGFydHVwTXMmJm51bGwhPT1lLmNvZlN5bmNUcmlnZ2VyRGVsYXlGcm9tU3RhcnR1cE1zP3QuY29mU3luY1RyaWdnZXJEZWxheUZyb21TdGFydHVwTXM9ZS5jb2ZTeW5jVHJpZ2dlckRlbGF5RnJvbVN0YXJ0dXBNczp0LmNvZlN5bmNUcmlnZ2VyRGVsYXlGcm9tU3RhcnR1cE1zPTAsdm9pZCAwIT09ZS5jb2ZTeW5jRXhlY3V0aW9uRGVsYXlGcm9tU3RhcnR1cE1zJiZudWxsIT09ZS5jb2ZTeW5jRXhlY3V0aW9uRGVsYXlGcm9tU3RhcnR1cE1zP3QuY29mU3luY0V4ZWN1dGlvbkRlbGF5RnJvbVN0YXJ0dXBNcz1lLmNvZlN5bmNFeGVjdXRpb25EZWxheUZyb21TdGFydHVwTXM6dC5jb2ZTeW5jRXhlY3V0aW9uRGVsYXlGcm9tU3RhcnR1cE1zPTAsdm9pZCAwIT09ZS5zeW5jVHJpZ2dlclRpbWUmJm51bGwhPT1lLnN5bmNUcmlnZ2VyVGltZT90LnN5bmNUcmlnZ2VyVGltZT1lLnN5bmNUcmlnZ2VyVGltZTp0LnN5bmNUcmlnZ2VyVGltZT0wLHZvaWQgMCE9PWUuZGVjb2RlckVuY29kZXJBdmFpbGFiaWxpdHkmJm51bGwhPT1lLmRlY29kZXJFbmNvZGVyQXZhaWxhYmlsaXR5P3QuZGVjb2RlckVuY29kZXJBdmFpbGFiaWxpdHk9eC5mcm9tUGFydGlhbChlLmRlY29kZXJFbmNvZGVyQXZhaWxhYmlsaXR5KTp0LmRlY29kZXJFbmNvZGVyQXZhaWxhYmlsaXR5PXZvaWQgMCx2b2lkIDAhPT1lLnNuYXBraXRBcHBJZCYmbnVsbCE9PWUuc25hcGtpdEFwcElkP3Quc25hcGtpdEFwcElkPWUuc25hcGtpdEFwcElkOnQuc25hcGtpdEFwcElkPVwiXCIsdm9pZCAwIT09ZS5sZW5zY29yZVZlcnNpb24mJm51bGwhPT1lLmxlbnNjb3JlVmVyc2lvbj90LmxlbnNjb3JlVmVyc2lvbj1lLmxlbnNjb3JlVmVyc2lvbjp0LmxlbnNjb3JlVmVyc2lvbj0wLHZvaWQgMCE9PWUucnVpZCYmbnVsbCE9PWUucnVpZD90LnJ1aWQ9VC5mcm9tUGFydGlhbChlLnJ1aWQpOnQucnVpZD12b2lkIDAsdm9pZCAwIT09ZS5jb25maWdOYW1lcyYmbnVsbCE9PWUuY29uZmlnTmFtZXMpZm9yKGNvbnN0IG4gb2YgZS5jb25maWdOYW1lcyl0LmNvbmZpZ05hbWVzLnB1c2gobik7cmV0dXJuIHZvaWQgMCE9PWUuaW5jbHVkZVRlc3RVc2VyVHJlYXRtZW50cyYmbnVsbCE9PWUuaW5jbHVkZVRlc3RVc2VyVHJlYXRtZW50cz90LmluY2x1ZGVUZXN0VXNlclRyZWF0bWVudHM9ZS5pbmNsdWRlVGVzdFVzZXJUcmVhdG1lbnRzOnQuaW5jbHVkZVRlc3RVc2VyVHJlYXRtZW50cz0hMSx2b2lkIDAhPT1lLmRpc2FibGVFeHBvc3VyZUxvZ2dpbmcmJm51bGwhPT1lLmRpc2FibGVFeHBvc3VyZUxvZ2dpbmc/dC5kaXNhYmxlRXhwb3N1cmVMb2dnaW5nPWUuZGlzYWJsZUV4cG9zdXJlTG9nZ2luZzp0LmRpc2FibGVFeHBvc3VyZUxvZ2dpbmc9ITEsdm9pZCAwIT09ZS5sZW5zQ2x1c3Rlck9yaWc0JiZudWxsIT09ZS5sZW5zQ2x1c3Rlck9yaWc0P3QubGVuc0NsdXN0ZXJPcmlnND1lLmxlbnNDbHVzdGVyT3JpZzQ6dC5sZW5zQ2x1c3Rlck9yaWc0PTAsdm9pZCAwIT09ZS5jbGllbnRJZCYmbnVsbCE9PWUuY2xpZW50SWQ/dC5jbGllbnRJZD1lLmNsaWVudElkOnQuY2xpZW50SWQ9XCJcIix0fX0sTT17bmV0d29ya1R5cGU6MCxjYXJyaWVyOlwiXCJ9LEw9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YygpLldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUubmV0d29ya1R5cGUmJnQudWludDMyKDgpLmludDMyKGUubmV0d29ya1R5cGUpLHZvaWQgMCE9PWUuaXNNZXRlcmVkJiZBLmVuY29kZSh7dmFsdWU6ZS5pc01ldGVyZWR9LHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuaXNSb2FtaW5nJiZBLmVuY29kZSh7dmFsdWU6ZS5pc1JvYW1pbmd9LHQudWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpLFwiXCIhPT1lLmNhcnJpZXImJnQudWludDMyKDM0KS5zdHJpbmcoZS5jYXJyaWVyKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBjKCkuUmVhZGVyP2U6bmV3KGMoKS5SZWFkZXIpKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPU9iamVjdC5hc3NpZ24oe30sTSk7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkubmV0d29ya1R5cGU9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMjppLmlzTWV0ZXJlZD1BLmRlY29kZShuLG4udWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgMzppLmlzUm9hbWluZz1BLmRlY29kZShuLG4udWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgNDppLmNhcnJpZXI9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxNKTtyZXR1cm4gdm9pZCAwIT09ZS5uZXR3b3JrVHlwZSYmbnVsbCE9PWUubmV0d29ya1R5cGU/dC5uZXR3b3JrVHlwZT1lLm5ldHdvcmtUeXBlOnQubmV0d29ya1R5cGU9MCx2b2lkIDAhPT1lLmlzTWV0ZXJlZCYmbnVsbCE9PWUuaXNNZXRlcmVkP3QuaXNNZXRlcmVkPWUuaXNNZXRlcmVkOnQuaXNNZXRlcmVkPXZvaWQgMCx2b2lkIDAhPT1lLmlzUm9hbWluZyYmbnVsbCE9PWUuaXNSb2FtaW5nP3QuaXNSb2FtaW5nPWUuaXNSb2FtaW5nOnQuaXNSb2FtaW5nPXZvaWQgMCx2b2lkIDAhPT1lLmNhcnJpZXImJm51bGwhPT1lLmNhcnJpZXI/dC5jYXJyaWVyPWUuY2Fycmllcjp0LmNhcnJpZXI9XCJcIix0fX0sVT17aXNTbmFwVnA5RGVjb2RlckF2YWlsYWJsZTohMSxpc1NuYXBBdjFEZWNvZGVyQXZhaWxhYmxlOiExfSx4PXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmMoKS5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuITA9PT1lLmlzU25hcFZwOURlY29kZXJBdmFpbGFibGUmJnQudWludDMyKDgpLmJvb2woZS5pc1NuYXBWcDlEZWNvZGVyQXZhaWxhYmxlKSwhMD09PWUuaXNTbmFwQXYxRGVjb2RlckF2YWlsYWJsZSYmdC51aW50MzIoMTYpLmJvb2woZS5pc1NuYXBBdjFEZWNvZGVyQXZhaWxhYmxlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBjKCkuUmVhZGVyP2U6bmV3KGMoKS5SZWFkZXIpKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPU9iamVjdC5hc3NpZ24oe30sVSk7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuaXNTbmFwVnA5RGVjb2RlckF2YWlsYWJsZT1uLmJvb2woKTticmVhaztjYXNlIDI6aS5pc1NuYXBBdjFEZWNvZGVyQXZhaWxhYmxlPW4uYm9vbCgpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LFUpO3JldHVybiB2b2lkIDAhPT1lLmlzU25hcFZwOURlY29kZXJBdmFpbGFibGUmJm51bGwhPT1lLmlzU25hcFZwOURlY29kZXJBdmFpbGFibGU/dC5pc1NuYXBWcDlEZWNvZGVyQXZhaWxhYmxlPWUuaXNTbmFwVnA5RGVjb2RlckF2YWlsYWJsZTp0LmlzU25hcFZwOURlY29kZXJBdmFpbGFibGU9ITEsdm9pZCAwIT09ZS5pc1NuYXBBdjFEZWNvZGVyQXZhaWxhYmxlJiZudWxsIT09ZS5pc1NuYXBBdjFEZWNvZGVyQXZhaWxhYmxlP3QuaXNTbmFwQXYxRGVjb2RlckF2YWlsYWJsZT1lLmlzU25hcEF2MURlY29kZXJBdmFpbGFibGU6dC5pc1NuYXBBdjFEZWNvZGVyQXZhaWxhYmxlPSExLHR9fTt2YXIgRj0oKCk9PntpZih2b2lkIDAhPT1GKXJldHVybiBGO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmKXJldHVybiBzZWxmO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvdztpZih2b2lkIDAhPT1uLmcpcmV0dXJuIG4uZzt0aHJvd1wiVW5hYmxlIHRvIGxvY2F0ZSBnbG9iYWwgb2JqZWN0XCJ9KSgpO2Z1bmN0aW9uIEIoZSl7aWYoZS5ndChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikpdGhyb3cgbmV3IEYuRXJyb3IoXCJWYWx1ZSBpcyBsYXJnZXIgdGhhbiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlwiKTtyZXR1cm4gZS50b051bWJlcigpfWMoKS51dGlsLkxvbmchPT1hKCkmJihjKCkudXRpbC5Mb25nPWEoKSxjKCkuY29uZmlndXJlKCkpO2NvbnN0IFY9e3R5cGVVcmw6XCJcIn0sRz17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpjKCkuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnR5cGVVcmwmJnQudWludDMyKDEwKS5zdHJpbmcoZS50eXBlVXJsKSwwIT09ZS52YWx1ZS5sZW5ndGgmJnQudWludDMyKDE4KS5ieXRlcyhlLnZhbHVlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBjKCkuUmVhZGVyP2U6bmV3KGMoKS5SZWFkZXIpKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPU9iamVjdC5hc3NpZ24oe30sVik7Zm9yKGkudmFsdWU9bmV3IFVpbnQ4QXJyYXk7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnR5cGVVcmw9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS52YWx1ZT1uLmJ5dGVzKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PU9iamVjdC5hc3NpZ24oe30sVik7cmV0dXJuIHZvaWQgMCE9PWUudHlwZVVybCYmbnVsbCE9PWUudHlwZVVybD90LnR5cGVVcmw9ZS50eXBlVXJsOnQudHlwZVVybD1cIlwiLHZvaWQgMCE9PWUudmFsdWUmJm51bGwhPT1lLnZhbHVlP3QudmFsdWU9ZS52YWx1ZTp0LnZhbHVlPW5ldyBVaW50OEFycmF5LHR9fTtjKCkudXRpbC5Mb25nIT09YSgpJiYoYygpLnV0aWwuTG9uZz1hKCksYygpLmNvbmZpZ3VyZSgpKTtjb25zdCBIPXtrZXk6XCJcIix2YWx1ZTpcIlwifSxXPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmMoKS5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUua2V5JiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUua2V5KSxcIlwiIT09ZS52YWx1ZSYmdC51aW50MzIoMTgpLnN0cmluZyhlLnZhbHVlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBjKCkuUmVhZGVyP2U6bmV3KGMoKS5SZWFkZXIpKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPU9iamVjdC5hc3NpZ24oe30sSCk7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkua2V5PW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkudmFsdWU9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxIKTtyZXR1cm4gdm9pZCAwIT09ZS5rZXkmJm51bGwhPT1lLmtleT90LmtleT1lLmtleTp0LmtleT1cIlwiLHZvaWQgMCE9PWUudmFsdWUmJm51bGwhPT1lLnZhbHVlP3QudmFsdWU9ZS52YWx1ZTp0LnZhbHVlPVwiXCIsdH19LGo9e30sWj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpjKCkuV3JpdGVyLmNyZWF0ZSgpO2Zvcihjb25zdCBuIG9mIGUucmVjb3JkcylXLmVuY29kZShuLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiB0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBjKCkuUmVhZGVyP2U6bmV3KGMoKS5SZWFkZXIpKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPU9iamVjdC5hc3NpZ24oe30saik7Zm9yKGkucmVjb3Jkcz1bXTtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO2U+Pj4zPT0xP2kucmVjb3Jkcy5wdXNoKFcuZGVjb2RlKG4sbi51aW50MzIoKSkpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LGopO2lmKHQucmVjb3Jkcz1bXSx2b2lkIDAhPT1lLnJlY29yZHMmJm51bGwhPT1lLnJlY29yZHMpZm9yKGNvbnN0IG4gb2YgZS5yZWNvcmRzKXQucmVjb3Jkcy5wdXNoKFcuZnJvbVBhcnRpYWwobikpO3JldHVybiB0fX0sej17fSxLPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmMoKS5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIHZvaWQgMCE9PWUuaW50VmFsdWUmJnQudWludDMyKDgpLmludDMyKGUuaW50VmFsdWUpLHZvaWQgMCE9PWUubG9uZ1ZhbHVlJiZ0LnVpbnQzMigxNikuaW50NjQoZS5sb25nVmFsdWUpLHZvaWQgMCE9PWUuZmxvYXRWYWx1ZSYmdC51aW50MzIoMjkpLmZsb2F0KGUuZmxvYXRWYWx1ZSksdm9pZCAwIT09ZS5kb3VibGVWYWx1ZSYmdC51aW50MzIoNzMpLmRvdWJsZShlLmRvdWJsZVZhbHVlKSx2b2lkIDAhPT1lLmJvb2xWYWx1ZSYmdC51aW50MzIoMzIpLmJvb2woZS5ib29sVmFsdWUpLHZvaWQgMCE9PWUuc3RyaW5nVmFsdWUmJnQudWludDMyKDQyKS5zdHJpbmcoZS5zdHJpbmdWYWx1ZSksdm9pZCAwIT09ZS5hbnlWYWx1ZSYmRy5lbmNvZGUoZS5hbnlWYWx1ZSx0LnVpbnQzMig1MCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLm1hcFZhbHVlJiZaLmVuY29kZShlLm1hcFZhbHVlLHQudWludDMyKDU4KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuaW50UGFpclZhbHVlJiZ0LnVpbnQzMig2NSkuZml4ZWQ2NChlLmludFBhaXJWYWx1ZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYygpLlJlYWRlcj9lOm5ldyhjKCkuUmVhZGVyKShlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT1PYmplY3QuYXNzaWduKHt9LHopO2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmludFZhbHVlPW4uaW50MzIoKTticmVhaztjYXNlIDI6aS5sb25nVmFsdWU9ZWUobi5pbnQ2NCgpKTticmVhaztjYXNlIDM6aS5mbG9hdFZhbHVlPW4uZmxvYXQoKTticmVhaztjYXNlIDk6aS5kb3VibGVWYWx1ZT1uLmRvdWJsZSgpO2JyZWFrO2Nhc2UgNDppLmJvb2xWYWx1ZT1uLmJvb2woKTticmVhaztjYXNlIDU6aS5zdHJpbmdWYWx1ZT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNjppLmFueVZhbHVlPUcuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSA3OmkubWFwVmFsdWU9Wi5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDg6aS5pbnRQYWlyVmFsdWU9ZWUobi5maXhlZDY0KCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LHopO3JldHVybiB2b2lkIDAhPT1lLmludFZhbHVlJiZudWxsIT09ZS5pbnRWYWx1ZT90LmludFZhbHVlPWUuaW50VmFsdWU6dC5pbnRWYWx1ZT12b2lkIDAsdm9pZCAwIT09ZS5sb25nVmFsdWUmJm51bGwhPT1lLmxvbmdWYWx1ZT90LmxvbmdWYWx1ZT1lLmxvbmdWYWx1ZTp0LmxvbmdWYWx1ZT12b2lkIDAsdm9pZCAwIT09ZS5mbG9hdFZhbHVlJiZudWxsIT09ZS5mbG9hdFZhbHVlP3QuZmxvYXRWYWx1ZT1lLmZsb2F0VmFsdWU6dC5mbG9hdFZhbHVlPXZvaWQgMCx2b2lkIDAhPT1lLmRvdWJsZVZhbHVlJiZudWxsIT09ZS5kb3VibGVWYWx1ZT90LmRvdWJsZVZhbHVlPWUuZG91YmxlVmFsdWU6dC5kb3VibGVWYWx1ZT12b2lkIDAsdm9pZCAwIT09ZS5ib29sVmFsdWUmJm51bGwhPT1lLmJvb2xWYWx1ZT90LmJvb2xWYWx1ZT1lLmJvb2xWYWx1ZTp0LmJvb2xWYWx1ZT12b2lkIDAsdm9pZCAwIT09ZS5zdHJpbmdWYWx1ZSYmbnVsbCE9PWUuc3RyaW5nVmFsdWU/dC5zdHJpbmdWYWx1ZT1lLnN0cmluZ1ZhbHVlOnQuc3RyaW5nVmFsdWU9dm9pZCAwLHZvaWQgMCE9PWUuYW55VmFsdWUmJm51bGwhPT1lLmFueVZhbHVlP3QuYW55VmFsdWU9Ry5mcm9tUGFydGlhbChlLmFueVZhbHVlKTp0LmFueVZhbHVlPXZvaWQgMCx2b2lkIDAhPT1lLm1hcFZhbHVlJiZudWxsIT09ZS5tYXBWYWx1ZT90Lm1hcFZhbHVlPVouZnJvbVBhcnRpYWwoZS5tYXBWYWx1ZSk6dC5tYXBWYWx1ZT12b2lkIDAsdm9pZCAwIT09ZS5pbnRQYWlyVmFsdWUmJm51bGwhPT1lLmludFBhaXJWYWx1ZT90LmludFBhaXJWYWx1ZT1lLmludFBhaXJWYWx1ZTp0LmludFBhaXJWYWx1ZT12b2lkIDAsdH19O3ZhciBZLHEsWCxRLEosJD0oKCk9PntpZih2b2lkIDAhPT0kKXJldHVybiAkO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmKXJldHVybiBzZWxmO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvdztpZih2b2lkIDAhPT1uLmcpcmV0dXJuIG4uZzt0aHJvd1wiVW5hYmxlIHRvIGxvY2F0ZSBnbG9iYWwgb2JqZWN0XCJ9KSgpO2Z1bmN0aW9uIGVlKGUpe2lmKGUuZ3QoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpKXRocm93IG5ldyAkLkVycm9yKFwiVmFsdWUgaXMgbGFyZ2VyIHRoYW4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcIik7cmV0dXJuIGUudG9OdW1iZXIoKX1jKCkudXRpbC5Mb25nIT09YSgpJiYoYygpLnV0aWwuTG9uZz1hKCksYygpLmNvbmZpZ3VyZSgpKSxmdW5jdGlvbihlKXtlW2UuVU5LTk9XTl9DT05URVhUX1BMQVRGT1JNPTBdPVwiVU5LTk9XTl9DT05URVhUX1BMQVRGT1JNXCIsZVtlLklPU19QTEFURk9STT0xXT1cIklPU19QTEFURk9STVwiLGVbZS5BTkRST0lEX1BMQVRGT1JNPTJdPVwiQU5EUk9JRF9QTEFURk9STVwiLGVbZS5TRVJWRVJfUExBVEZPUk09M109XCJTRVJWRVJfUExBVEZPUk1cIixlW2UuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwifShZfHwoWT17fSkpLGZ1bmN0aW9uKGUpe2VbZS5VTktOT1dOX09QRVJBVE9SPTBdPVwiVU5LTk9XTl9PUEVSQVRPUlwiLGVbZS5BTkQ9MV09XCJBTkRcIixlW2UuT1I9Ml09XCJPUlwiLGVbZS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCJ9KHF8fChxPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlVOS05PV05fUFJFRElDQVRFX09QRVJBVE9SPTBdPVwiVU5LTk9XTl9QUkVESUNBVEVfT1BFUkFUT1JcIixlW2UuRVFVQUw9MV09XCJFUVVBTFwiLGVbZS5OT1RfRVFVQUw9Ml09XCJOT1RfRVFVQUxcIixlW2UuR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPPTNdPVwiR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPXCIsZVtlLkxFU1NfVEhBTl9PUl9FUVVBTF9UTz00XT1cIkxFU1NfVEhBTl9PUl9FUVVBTF9UT1wiLGVbZS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCJ9KFh8fChYPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlVOS05PV05fUFJPUEVSVFk9MF09XCJVTktOT1dOX1BST1BFUlRZXCIsZVtlLkJBVFRFUllfTEVWRUw9MV09XCJCQVRURVJZX0xFVkVMXCIsZVtlLklTX09GRkxJTkU9Ml09XCJJU19PRkZMSU5FXCIsZVtlLklTX0NIQVJHSU5HPTNdPVwiSVNfQ0hBUkdJTkdcIixlW2UuQkFORFdJRFRIPTRdPVwiQkFORFdJRFRIXCIsZVtlLkRJU0tfU0laRT01XT1cIkRJU0tfU0laRVwiLGVbZS5ESVNLX0FWQUlMQUJMRT02XT1cIkRJU0tfQVZBSUxBQkxFXCIsZVtlLk1FRElBX1RZUEVfREVQUkVDQVRFRD03XT1cIk1FRElBX1RZUEVfREVQUkVDQVRFRFwiLGVbZS5JU19QVUJMSUNfU1RPUlk9OF09XCJJU19QVUJMSUNfU1RPUllcIixlW2UuSVNfT0ZGSUNJQUxfU1RPUlk9OV09XCJJU19PRkZJQ0lBTF9TVE9SWVwiLGVbZS5DQU1FUkFfRElSRUNUSU9OPTEwXT1cIkNBTUVSQV9ESVJFQ1RJT05cIixlW2UuQ0FNRVJBX0NPTlRFWFQ9MTFdPVwiQ0FNRVJBX0NPTlRFWFRcIixlW2UuQ0FNRVJBX0FQST0xMl09XCJDQU1FUkFfQVBJXCIsZVtlLkNBTUVSQV9GTEFTSF9TVEFURT0xM109XCJDQU1FUkFfRkxBU0hfU1RBVEVcIixlW2UuU05BUF9TT1VSQ0U9MTRdPVwiU05BUF9TT1VSQ0VcIixlW2UuTEVHQUNZX01VU0hST09NX0NPTlRFTlRfVFlQRT0xNV09XCJMRUdBQ1lfTVVTSFJPT01fQ09OVEVOVF9UWVBFXCIsZVtlLlVQTE9BRF9CQU5EV0lEVEg9MTZdPVwiVVBMT0FEX0JBTkRXSURUSFwiLGVbZS5DQU1FUkEyX0xFVkVMPTE3XT1cIkNBTUVSQTJfTEVWRUxcIixlW2UuQ0FNRVJBX05JR0hUX01PREVfU1RBVEU9MThdPVwiQ0FNRVJBX05JR0hUX01PREVfU1RBVEVcIixlW2UuVVNFUl9MQU5HVUFHRT0xOV09XCJVU0VSX0xBTkdVQUdFXCIsZVtlLlZJREVPX0RVUkFUSU9OPTIwXT1cIlZJREVPX0RVUkFUSU9OXCIsZVtlLlJFQUxUSU1FX01PQklMRV9ORVRXT1JLX0dFTkVSQVRJT049MjFdPVwiUkVBTFRJTUVfTU9CSUxFX05FVFdPUktfR0VORVJBVElPTlwiLGVbZS5SRUFMVElNRV9ORVRXT1JLX1RZUEU9MjJdPVwiUkVBTFRJTUVfTkVUV09SS19UWVBFXCIsZVtlLlJFQUxUSU1FX05FVFdPUktfSVNfTUVURVJFRD0yM109XCJSRUFMVElNRV9ORVRXT1JLX0lTX01FVEVSRURcIixlW2UuUkVBTFRJTUVfTkVUV09SS19JU19ST0FNSU5HPTI0XT1cIlJFQUxUSU1FX05FVFdPUktfSVNfUk9BTUlOR1wiLGVbZS5DQU1FUkFfSVNfRklSU1RfQ0FQVFVSRT0yNV09XCJDQU1FUkFfSVNfRklSU1RfQ0FQVFVSRVwiLGVbZS5QSUNUVVJFX01PREU9MjZdPVwiUElDVFVSRV9NT0RFXCIsZVtlLkJPTFRfVVNFX0NBU0U9MjddPVwiQk9MVF9VU0VfQ0FTRVwiLGVbZS5CT0xUX0NETl9FWFBFUklNRU5UQVRJT05fSUQ9MjhdPVwiQk9MVF9DRE5fRVhQRVJJTUVOVEFUSU9OX0lEXCIsZVtlLk1JTlNfU0lOQ0VfTEFTVF9MRU5TX0FDVElWQVRJT049MjldPVwiTUlOU19TSU5DRV9MQVNUX0xFTlNfQUNUSVZBVElPTlwiLGVbZS5NSU5TX1NJTkNFX0xBU1RfU05BUFBBQkxFX0xFTlNfQUNUSVZBVElPTj0zMF09XCJNSU5TX1NJTkNFX0xBU1RfU05BUFBBQkxFX0xFTlNfQUNUSVZBVElPTlwiLGVbZS5EQVlTX1NJTkNFX0xBU1RfTE9HSU5fT1JfT1BFTj0zMV09XCJEQVlTX1NJTkNFX0xBU1RfTE9HSU5fT1JfT1BFTlwiLGVbZS5TUEVDVEFDTEVTX1ZFUlNJT049MzJdPVwiU1BFQ1RBQ0xFU19WRVJTSU9OXCIsZVtlLlNUSUNLWV9NQVhfQ09OTkVDVElPTl9UWVBFPTMzXT1cIlNUSUNLWV9NQVhfQ09OTkVDVElPTl9UWVBFXCIsZVtlLldJVEhfQU5JTUFURURfT1ZFUkxBWT0zNF09XCJXSVRIX0FOSU1BVEVEX09WRVJMQVlcIixlW2UuRVNUSU1BVEVEX0RVUkFUSU9OX0ZPUl9FVkVOVF9NUz0zNV09XCJFU1RJTUFURURfRFVSQVRJT05fRk9SX0VWRU5UX01TXCIsZVtlLlVSTD0zNl09XCJVUkxcIixlW2UuTUVESUFfU09VUkNFPTM3XT1cIk1FRElBX1NPVVJDRVwiLGVbZS5BU1NFVF9UWVBFPTM4XT1cIkFTU0VUX1RZUEVcIixlW2UuQk9MVF9JU19DT05URU5UX1BPUFVMQVI9MzldPVwiQk9MVF9JU19DT05URU5UX1BPUFVMQVJcIixlW2UuQ0FQVFVSRV9NT0RFPTQwXT1cIkNBUFRVUkVfTU9ERVwiLGVbZS5WUDlfU09GVFdBUkVfREVDT0RJTkdfU1VQUE9SVEVEPTQxXT1cIlZQOV9TT0ZUV0FSRV9ERUNPRElOR19TVVBQT1JURURcIixlW2UuQVYxX1NPRlRXQVJFX0RFQ09ESU5HX1NVUFBPUlRFRD00Ml09XCJBVjFfU09GVFdBUkVfREVDT0RJTkdfU1VQUE9SVEVEXCIsZVtlLldJVEhfTVVTSUM9NDNdPVwiV0lUSF9NVVNJQ1wiLGVbZS5GRUFUVVJFX1BST1ZJREVEX1NJWkU9NDRdPVwiRkVBVFVSRV9QUk9WSURFRF9TSVpFXCIsZVtlLk1FRElBX1RZUEU9NDVdPVwiTUVESUFfVFlQRVwiLGVbZS5TQ0FOTkVEX0NBVEVHT1JZX0lEUz00Nl09XCJTQ0FOTkVEX0NBVEVHT1JZX0lEU1wiLGVbZS5DT05URU5UX1ZJRVdfU09VUkNFPTQ3XT1cIkNPTlRFTlRfVklFV19TT1VSQ0VcIixlW2UuUkVDSVBJRU5UU19TVVBQT1JUX0hFVkM9NDhdPVwiUkVDSVBJRU5UU19TVVBQT1JUX0hFVkNcIixlW2UuQ09HTkFDX0FQUF9JRD00OV09XCJDT0dOQUNfQVBQX0lEXCIsZVtlLkVNQUlMX1ZFUklGSUVEPTUwXT1cIkVNQUlMX1ZFUklGSUVEXCIsZVtlLlBIT05FX1ZFUklGSUVEPTUxXT1cIlBIT05FX1ZFUklGSUVEXCIsZVtlLk5PVElGSUNBVElPTl9QRVJNX0dSQU5URUQ9NTJdPVwiTk9USUZJQ0FUSU9OX1BFUk1fR1JBTlRFRFwiLGVbZS5DT05UQUNUX1BFUk1fR1JBTlRFRD01M109XCJDT05UQUNUX1BFUk1fR1JBTlRFRFwiLGVbZS5NVVRVQUxfRlJJRU5EU19DT1VOVD01NF09XCJNVVRVQUxfRlJJRU5EU19DT1VOVFwiLGVbZS5HUk9VUFNfQ09VTlQ9NTVdPVwiR1JPVVBTX0NPVU5UXCIsZVtlLkhBU19OT05fVEVBTV9TTkFQQ0hBVF9DT05WRVJTQVRJT05TPTU2XT1cIkhBU19OT05fVEVBTV9TTkFQQ0hBVF9DT05WRVJTQVRJT05TXCIsZVtlLlBMQVlCQUNLX0lURU1fVFlQRT01N109XCJQTEFZQkFDS19JVEVNX1RZUEVcIixlW2UuU1VQX0JPT0xFQU5fUFJPUEVSVFk9NThdPVwiU1VQX0JPT0xFQU5fUFJPUEVSVFlcIixlW2UuU1VQX0lOVEVHRVJfUFJPUEVSVFk9NTldPVwiU1VQX0lOVEVHRVJfUFJPUEVSVFlcIixlW2UuU1VQX0xPTkdfUFJPUEVSVFk9NjBdPVwiU1VQX0xPTkdfUFJPUEVSVFlcIixlW2UuU1VQX1NUUklOR19QUk9QRVJUWT02MV09XCJTVVBfU1RSSU5HX1BST1BFUlRZXCIsZVtlLlNVUF9ET1VCTEVfUFJPUEVSVFk9NjJdPVwiU1VQX0RPVUJMRV9QUk9QRVJUWVwiLGVbZS5TVVBfTUlMTElTX1BST1BFUlRZX1RPX05PVz02M109XCJTVVBfTUlMTElTX1BST1BFUlRZX1RPX05PV1wiLGVbZS5IQVNfVVNFRF9TUEVDVEFDTEVTPTY0XT1cIkhBU19VU0VEX1NQRUNUQUNMRVNcIixlW2UuU1VQX1NFQ1NfUFJPUEVSVFlfVE9fTk9XPTY1XT1cIlNVUF9TRUNTX1BST1BFUlRZX1RPX05PV1wiLGVbZS5CT0xUX0NMSUVOVF9BUFBfU1RBVEU9NjZdPVwiQk9MVF9DTElFTlRfQVBQX1NUQVRFXCIsZVtlLkVNQUlMX1NFVD02N109XCJFTUFJTF9TRVRcIixlW2UuQklUTU9KSV9TRVQ9NjhdPVwiQklUTU9KSV9TRVRcIixlW2UuUVVJQ0tfVEFQX0NBTUVSQV9TVVBQT1JURURfRU5BQkxFRD02OV09XCJRVUlDS19UQVBfQ0FNRVJBX1NVUFBPUlRFRF9FTkFCTEVEXCIsZVtlLkhBU19BRERfRlJJRU5EU19SRVFVRVNUPTcwXT1cIkhBU19BRERfRlJJRU5EU19SRVFVRVNUXCIsZVtlLkFQUF9MQVVOQ0hfRlJPTV9QVVNIPTcxXT1cIkFQUF9MQVVOQ0hfRlJPTV9QVVNIXCIsZVtlLkFQUF9MQVVOQ0hfVFlQRT03Ml09XCJBUFBfTEFVTkNIX1RZUEVcIixlW2UuQklMTEJPQVJEX0NBTVBBSUdOX0xPQ0FMX0lNUFJFU1NJT05fQ09VTlQ9NzNdPVwiQklMTEJPQVJEX0NBTVBBSUdOX0xPQ0FMX0lNUFJFU1NJT05fQ09VTlRcIixlW2UuQklMTEJPQVJEX0NBTVBBSUdOX0xPQ0FMX0xBU1RfSU1QUkVTU0lPTl9USU1FX1NFQ1NfVE9fTk9XPTc0XT1cIkJJTExCT0FSRF9DQU1QQUlHTl9MT0NBTF9MQVNUX0lNUFJFU1NJT05fVElNRV9TRUNTX1RPX05PV1wiLGVbZS5CSUxMQk9BUkRfQ0FNUEFJR05fTE9DQUxfQ09OVElOVU9VU19ESVNNSVNTX0NPVU5UPTc1XT1cIkJJTExCT0FSRF9DQU1QQUlHTl9MT0NBTF9DT05USU5VT1VTX0RJU01JU1NfQ09VTlRcIixlW2UuRlNUX05VTV9JTl9BUFBfV0FSTklOR1M9NzZdPVwiRlNUX05VTV9JTl9BUFBfV0FSTklOR1NcIixlW2UuRlNUX1NIT1VMRF9DSEFOR0VfUEFTU1dPUkQ9NzddPVwiRlNUX1NIT1VMRF9DSEFOR0VfUEFTU1dPUkRcIixlW2UuRlNUX0lTX0JBQ0tHUk9VTkRfQ0hFQ0s9NzhdPVwiRlNUX0lTX0JBQ0tHUk9VTkRfQ0hFQ0tcIixlW2UuQVVESU9fUkVDT1JEX1BFUk1fR1JBTlRFRD03OV09XCJBVURJT19SRUNPUkRfUEVSTV9HUkFOVEVEXCIsZVtlLk1VVFVBTF9GUklFTkRTX1dJVEhfQklSVEhEQVlfQ09VTlQ9ODBdPVwiTVVUVUFMX0ZSSUVORFNfV0lUSF9CSVJUSERBWV9DT1VOVFwiLGVbZS5CSUxMQk9BUkRfQ0FNUEFJR05fTE9DQUxfRElTTUlTU19DT1VOVD04MV09XCJCSUxMQk9BUkRfQ0FNUEFJR05fTE9DQUxfRElTTUlTU19DT1VOVFwiLGVbZS5VU0VfVkVSVElDQUxfTkFWSUdBVElPTj04Ml09XCJVU0VfVkVSVElDQUxfTkFWSUdBVElPTlwiLGVbZS5GUkVFQUJMRV9ESVNLX0FWQUlMQUJMRT04M109XCJGUkVFQUJMRV9ESVNLX0FWQUlMQUJMRVwiLGVbZS5NRU1PUklFU19DT1VOVD04NF09XCJNRU1PUklFU19DT1VOVFwiLGVbZS5ERVZJQ0VfTU9ERUw9ODVdPVwiREVWSUNFX01PREVMXCIsZVtlLkNPVU5UUlk9ODZdPVwiQ09VTlRSWVwiLGVbZS5PUz04N109XCJPU1wiLGVbZS5PU19WRVJTSU9OPTg4XT1cIk9TX1ZFUlNJT05cIixlW2UuQVBQX1ZFUlNJT049ODldPVwiQVBQX1ZFUlNJT05cIixlW2UuQlVJTERfRkxBVk9SPTkwXT1cIkJVSUxEX0ZMQVZPUlwiLGVbZS5VU0VSX0lEPTkxXT1cIlVTRVJfSURcIixlW2UuTE9DQUxFPTkyXT1cIkxPQ0FMRVwiLGVbZS5ERVZJQ0VfQ0xVU1RFUj05M109XCJERVZJQ0VfQ0xVU1RFUlwiLGVbZS5ERVZJQ0VfQlJBTkQ9OTRdPVwiREVWSUNFX0JSQU5EXCIsZVtlLklTX0VNUExPWUVFPTk1XT1cIklTX0VNUExPWUVFXCIsZVtlLlVTRVJOQU1FPTk2XT1cIlVTRVJOQU1FXCIsZVtlLklTX1RFU1RfVVNFUj05N109XCJJU19URVNUX1VTRVJcIixlW2UuVVNFUl9QUk9GSUxFPTk4XT1cIlVTRVJfUFJPRklMRVwiLGVbZS5TQ1JFRU5fV0lEVEg9OTldPVwiU0NSRUVOX1dJRFRIXCIsZVtlLlNDUkVFTl9IRUlHSFQ9MTAwXT1cIlNDUkVFTl9IRUlHSFRcIixlW2UuSEVWQ19TVVBQT1JUPTEwMV09XCJIRVZDX1NVUFBPUlRcIixlW2UuTkVUV09SS19UWVBFPTEwMl09XCJORVRXT1JLX1RZUEVcIixlW2UuTUFYX1ZJREVPX1dJRFRIPTEwM109XCJNQVhfVklERU9fV0lEVEhcIixlW2UuTUFYX1ZJREVPX0hFSUdIVD0xMDRdPVwiTUFYX1ZJREVPX0hFSUdIVFwiLGVbZS5JU19ORVRXT1JLX01FVEVSRUQ9MTA1XT1cIklTX05FVFdPUktfTUVURVJFRFwiLGVbZS5JU19ST0FNSU5HPTEwNl09XCJJU19ST0FNSU5HXCIsZVtlLkFQUF9FTkdBR0VNRU5UX0xFVkVMPTEwN109XCJBUFBfRU5HQUdFTUVOVF9MRVZFTFwiLGVbZS5DT01NVU5JQ0FUSU9OX0VOR0FHRU1FTlRfTEVWRUw9MTA4XT1cIkNPTU1VTklDQVRJT05fRU5HQUdFTUVOVF9MRVZFTFwiLGVbZS5GUklFTkRfU1RPUllfRU5HQUdFTUVOVF9MRVZFTD0xMDldPVwiRlJJRU5EX1NUT1JZX0VOR0FHRU1FTlRfTEVWRUxcIixlW2UuUFVCTElDX1VTRVJfU1RPUllfRU5HQUdFTUVOVF9MRVZFTD0xMTBdPVwiUFVCTElDX1VTRVJfU1RPUllfRU5HQUdFTUVOVF9MRVZFTFwiLGVbZS5QVUJMSVNIRVJfU1RPUllfRU5HQUdFTUVOVF9MRVZFTD0xMTFdPVwiUFVCTElTSEVSX1NUT1JZX0VOR0FHRU1FTlRfTEVWRUxcIixlW2UuTEVOU19FTkdBR0VNRU5UX0xFVkVMPTExMl09XCJMRU5TX0VOR0FHRU1FTlRfTEVWRUxcIixlW2UuTk9OX0ZSSUVORF9TVE9SWV9FTkdBR0VNRU5UX0xFVkVMPTExM109XCJOT05fRlJJRU5EX1NUT1JZX0VOR0FHRU1FTlRfTEVWRUxcIixlW2UuRk9MTE9XRVJfU0laRV9MRVZFTD0xMTRdPVwiRk9MTE9XRVJfU0laRV9MRVZFTFwiLGVbZS5EQVlTX1NJTkNFX0NSRUFUSU9OPTExNV09XCJEQVlTX1NJTkNFX0NSRUFUSU9OXCIsZVtlLlVTRVJfUEVSU09OQT0xMTZdPVwiVVNFUl9QRVJTT05BXCIsZVtlLlVTRVJfQ1JFQVRJT05fVElNRT0xMTddPVwiVVNFUl9DUkVBVElPTl9USU1FXCIsZVtlLk1PQklMRV9ORVRXT1JLX1RZUEU9MTE4XT1cIk1PQklMRV9ORVRXT1JLX1RZUEVcIixlW2UuQUdHUkVHQVRFRF9VU0VSX0JBTkRXSURUSD0xMTldPVwiQUdHUkVHQVRFRF9VU0VSX0JBTkRXSURUSFwiLGVbZS5MRU5TX0NMVVNURVJfQklBU0VEPTEyMF09XCJMRU5TX0NMVVNURVJfQklBU0VEXCIsZVtlLkxFTlNfQ0xVU1RFUl9MT0c9MTIxXT1cIkxFTlNfQ0xVU1RFUl9MT0dcIixlW2UuTEVOU19DTFVTVEVSX09SSUc9MTIyXT1cIkxFTlNfQ0xVU1RFUl9PUklHXCIsZVtlLkxFTlNfQ0xVU1RFUl9PUklHXzQ9MTIzXT1cIkxFTlNfQ0xVU1RFUl9PUklHXzRcIixlW2UuTEVOU19DTFVTVEVSX0JJQVNFRF9MT0c9MTI0XT1cIkxFTlNfQ0xVU1RFUl9CSUFTRURfTE9HXCIsZVtlLkFQUF9MT0NBTEU9MTI1XT1cIkFQUF9MT0NBTEVcIixlW2UuREVWSUNFX0NPTU1PTl9OQU1FPTEyNl09XCJERVZJQ0VfQ09NTU9OX05BTUVcIixlW2UuVVNFUl9GUklFTkRfQ09VTlQ9MTI3XT1cIlVTRVJfRlJJRU5EX0NPVU5UXCIsZVtlLkw5MF9DT1VOVFJZPTEyOF09XCJMOTBfQ09VTlRSWVwiLGVbZS5TVFVCPTEyOV09XCJTVFVCXCIsZVtlLklTX1RSVUU9MTMwXT1cIklTX1RSVUVcIixlW2UuU1RPUllfUE9TVF9SQVRJTz0xMzFdPVwiU1RPUllfUE9TVF9SQVRJT1wiLGVbZS5HRU5ERVI9MTMyXT1cIkdFTkRFUlwiLGVbZS5JTkZFUlJFRF9BR0VfQlVDS0VUPTEzM109XCJJTkZFUlJFRF9BR0VfQlVDS0VUXCIsZVtlLlNUT1JJRVM9MTM0XT1cIlNUT1JJRVNcIixlW2UuU0VORFM9MTM1XT1cIlNFTkRTXCIsZVtlLlNOQVBfQ1JFQVRFX0w3PTEzNl09XCJTTkFQX0NSRUFURV9MN1wiLGVbZS5TVE9SWV9QT1NUX0w3PTEzN109XCJTVE9SWV9QT1NUX0w3XCIsZVtlLkNPTU1VTklDQVRJT05fTDc9MTM4XT1cIkNPTU1VTklDQVRJT05fTDdcIixlW2UuREZfTDc9MTM5XT1cIkRGX0w3XCIsZVtlLkFQUF9MNz0xNDBdPVwiQVBQX0w3XCIsZVtlLkRBWVNfU0lOQ0VfQ1JFQVRJT05fQlVDS0VUPTE0MV09XCJEQVlTX1NJTkNFX0NSRUFUSU9OX0JVQ0tFVFwiLGVbZS5CSURJUkVDVElPTkFMX0ZSSUVORF9TVEFUVVM9MTQyXT1cIkJJRElSRUNUSU9OQUxfRlJJRU5EX1NUQVRVU1wiLGVbZS5TVE9SWV9QT1NUX1BSRURJQ1RJT049MTQzXT1cIlNUT1JZX1BPU1RfUFJFRElDVElPTlwiLGVbZS5BUFBfT1BFTlM9MTQ0XT1cIkFQUF9PUEVOU1wiLGVbZS5MRU5TX1NXSVBFUz0xNDVdPVwiTEVOU19TV0lQRVNcIixlW2UuTEVOU19TTkFQUz0xNDZdPVwiTEVOU19TTkFQU1wiLGVbZS5MRU5TX09QUz0xNDddPVwiTEVOU19PUFNcIixlW2UuVzFfQVBQX09QRU5TPTE0OF09XCJXMV9BUFBfT1BFTlNcIixlW2UuVzFfTEVOU19TV0lQRVM9MTQ5XT1cIlcxX0xFTlNfU1dJUEVTXCIsZVtlLlcxX0xFTlNfU05BUFM9MTUwXT1cIlcxX0xFTlNfU05BUFNcIixlW2UuVzFfTEVOU19PUFM9MTUxXT1cIlcxX0xFTlNfT1BTXCIsZVtlLlcyX0FQUF9PUEVOUz0xNTJdPVwiVzJfQVBQX09QRU5TXCIsZVtlLlcyX0xFTlNfU1dJUEVTPTE1M109XCJXMl9MRU5TX1NXSVBFU1wiLGVbZS5XMl9MRU5TX1NOQVBTPTE1NF09XCJXMl9MRU5TX1NOQVBTXCIsZVtlLlcyX0xFTlNfT1BTPTE1NV09XCJXMl9MRU5TX09QU1wiLGVbZS5XMzRfQVBQX09QRU5TPTE1Nl09XCJXMzRfQVBQX09QRU5TXCIsZVtlLlczNF9MRU5TX1NXSVBFUz0xNTddPVwiVzM0X0xFTlNfU1dJUEVTXCIsZVtlLlczNF9MRU5TX1NOQVBTPTE1OF09XCJXMzRfTEVOU19TTkFQU1wiLGVbZS5XMzRfTEVOU19PUFM9MTU5XT1cIlczNF9MRU5TX09QU1wiLGVbZS5MRU5TX1NXSVBFU19QUkVESUNUSU9OPTE2MF09XCJMRU5TX1NXSVBFU19QUkVESUNUSU9OXCIsZVtlLlJFR0lTVFJBVElPTl9DT1VOVFJZPTE2MV09XCJSRUdJU1RSQVRJT05fQ09VTlRSWVwiLGVbZS5JUF9BU049MTYyXT1cIklQX0FTTlwiLGVbZS5JUF9SRUdJT049MTYzXT1cIklQX1JFR0lPTlwiLGVbZS5JUF9DSVRZPTE2NF09XCJJUF9DSVRZXCIsZVtlLkhBU19VU0VSX0lEPTE2NV09XCJIQVNfVVNFUl9JRFwiLGVbZS5IQVNfQklUTU9KST0xNjZdPVwiSEFTX0JJVE1PSklcIixlW2UuTlVNX0FQUF9PUEVOU19MQVNUXzhfREFZUz0xNjddPVwiTlVNX0FQUF9PUEVOU19MQVNUXzhfREFZU1wiLGVbZS5OVU1fRkVBVFVSRV9TVE9SWV9WSUVXX0RBWVNfTDc9MTY4XT1cIk5VTV9GRUFUVVJFX1NUT1JZX1ZJRVdfREFZU19MN1wiLGVbZS5OVU1fRkVBVFVSRV9TVE9SWV9TWU5DX0RBWVNfTDc9MTY5XT1cIk5VTV9GRUFUVVJFX1NUT1JZX1NZTkNfREFZU19MN1wiLGVbZS5IRVhBR09OX05OX1NVUFBPUlRFRF9WRVJTSU9OPTE3MF09XCJIRVhBR09OX05OX1NVUFBPUlRFRF9WRVJTSU9OXCIsZVtlLk5FVFdPUktfUVVBTElUWT0xNzFdPVwiTkVUV09SS19RVUFMSVRZXCIsZVtlLkRFVklDRV9NRU1PUllfTUI9MTcyXT1cIkRFVklDRV9NRU1PUllfTUJcIixlW2UuREVWSUNFX0dMX1ZFUlNJT049MTczXT1cIkRFVklDRV9HTF9WRVJTSU9OXCIsZVtlLlNOQVBfUFJPX1NUQVRVUz0xNzRdPVwiU05BUF9QUk9fU1RBVFVTXCIsZVtlLkRFVklDRV9WUDlfREVDT0RJTkdfU1VQUE9SVD0xNzVdPVwiREVWSUNFX1ZQOV9ERUNPRElOR19TVVBQT1JUXCIsZVtlLkFWR19GUklFTkRfU1RPUllfVklFV19DT1VOVF9MNz0xNzZdPVwiQVZHX0ZSSUVORF9TVE9SWV9WSUVXX0NPVU5UX0w3XCIsZVtlLkdBTUVfSk9JTl9USU1FPTE3N109XCJHQU1FX0pPSU5fVElNRVwiLGVbZS5HQU1FX0xBU1RfQUNUSVZFX1RJTUU9MTc4XT1cIkdBTUVfTEFTVF9BQ1RJVkVfVElNRVwiLGVbZS5EQVlTX1NJTkNFX0ZJUlNUX0dBTUVfQUNUSVZJVFk9MTc5XT1cIkRBWVNfU0lOQ0VfRklSU1RfR0FNRV9BQ1RJVklUWVwiLGVbZS5EQVlTX1NJTkNFX0xBU1RfR0FNRV9BQ1RJVklUWT0xODBdPVwiREFZU19TSU5DRV9MQVNUX0dBTUVfQUNUSVZJVFlcIixlW2UuUEZfUEFHRV9TRVNTSU9OU19XSVRIX0xPTkdfSU1QPTE4MV09XCJQRl9QQUdFX1NFU1NJT05TX1dJVEhfTE9OR19JTVBcIixlW2UuV0lSRUxFU1NfQ0FSUklFUj0xODJdPVwiV0lSRUxFU1NfQ0FSUklFUlwiLGVbZS5NSU5JU19KT0lOX1RJTUU9MTgzXT1cIk1JTklTX0pPSU5fVElNRVwiLGVbZS5NSU5JU19MQVNUX0FDVElWRV9USU1FPTE4NF09XCJNSU5JU19MQVNUX0FDVElWRV9USU1FXCIsZVtlLkRBWVNfU0lOQ0VfRklSU1RfTUlOSVNfQUNUSVZJVFk9MTg1XT1cIkRBWVNfU0lOQ0VfRklSU1RfTUlOSVNfQUNUSVZJVFlcIixlW2UuREFZU19TSU5DRV9MQVNUX01JTklTX0FDVElWSVRZPTE4Nl09XCJEQVlTX1NJTkNFX0xBU1RfTUlOSVNfQUNUSVZJVFlcIixlW2UuREVWSUNFX0FWMV9ERUNPRElOR19TVVBQT1JUPTE4N109XCJERVZJQ0VfQVYxX0RFQ09ESU5HX1NVUFBPUlRcIixlW2UuQVBQX1BBQ0tBR0VfSU5TVEFMTEVSPTE4OF09XCJBUFBfUEFDS0FHRV9JTlNUQUxMRVJcIixlW2UuU1RPUllfVklFV1NfNVRIX1RBQl9FTkdBR0VNRU5UX0xFVkVMPTE4OV09XCJTVE9SWV9WSUVXU181VEhfVEFCX0VOR0FHRU1FTlRfTEVWRUxcIixlW2UuUkVQT1JURURfQUdFPTE5MF09XCJSRVBPUlRFRF9BR0VcIixlW2UuQU5EUk9JRF9NT0JJTEVfU0VSVklDRVNfUFJPVklERVI9MTkxXT1cIkFORFJPSURfTU9CSUxFX1NFUlZJQ0VTX1BST1ZJREVSXCIsZVtlLklTX0FDUVVJUkVEX1VTRVI9MTkyXT1cIklTX0FDUVVJUkVEX1VTRVJcIixlW2UuWURQST0xOTNdPVwiWURQSVwiLGVbZS5CSURJUkVDVElPTkFMX0ZSSUVORF9TVEFUVVNfVkVMTFVNPTE5NF09XCJCSURJUkVDVElPTkFMX0ZSSUVORF9TVEFUVVNfVkVMTFVNXCIsZVtlLk9SSUdJTj0xOTVdPVwiT1JJR0lOXCIsZVtlLkxFTlNDT1JFX1ZFUlNJT049MTk2XT1cIkxFTlNDT1JFX1ZFUlNJT05cIixlW2UuU05BUEtJVF9BUFBfSUQ9MTk3XT1cIlNOQVBLSVRfQVBQX0lEXCIsZVtlLkdQVT0xOThdPVwiR1BVXCIsZVtlLkNISVBTRVRfTkFNRT0xOTldPVwiQ0hJUFNFVF9OQU1FXCIsZVtlLkNISVBTRVRfVkVSU0lPTj0yMDBdPVwiQ0hJUFNFVF9WRVJTSU9OXCIsZVtlLkhBU19aRVJPX0lERkE9MjAxXT1cIkhBU19aRVJPX0lERkFcIixlW2UuTElNSVRfQURfVFJBQ0tJTkc9MjAyXT1cIkxJTUlUX0FEX1RSQUNLSU5HXCIsZVtlLkFUVF9BVVRIX1NUQVRVUz0yMDNdPVwiQVRUX0FVVEhfU1RBVFVTXCIsZVtlLkNBTUVSQTJfRlJPTlRfU1NfR0FJTl9PVkVSX1RQQT0yMDRdPVwiQ0FNRVJBMl9GUk9OVF9TU19HQUlOX09WRVJfVFBBXCIsZVtlLkFUVEFDSE1FTlRfVE9PTF9WMj0yMDVdPVwiQVRUQUNITUVOVF9UT09MX1YyXCIsZVtlLlVTRVJfUEVSU09OQV9WMz0yMDZdPVwiVVNFUl9QRVJTT05BX1YzXCIsZVtlLlNOQVBTX1NFTkRfV0lUSF9IRVZDPTIwN109XCJTTkFQU19TRU5EX1dJVEhfSEVWQ1wiLGVbZS5TTkFQU19TRU5EX1dJVEhPVVRfSEVWQz0yMDhdPVwiU05BUFNfU0VORF9XSVRIT1VUX0hFVkNcIixlW2UuQ0FNRVJBMl9OQVRJVkVfQ1JBU0hfT1ZFUl9DQU1FUkExPTIwOV09XCJDQU1FUkEyX05BVElWRV9DUkFTSF9PVkVSX0NBTUVSQTFcIixlW2UuQ0FNRVJBMl9HMlNfTEFURU5DWV9PVkVSX0NBTUVSQTE9MjEwXT1cIkNBTUVSQTJfRzJTX0xBVEVOQ1lfT1ZFUl9DQU1FUkExXCIsZVtlLklTX0lOVEVSTkFMPTIxMV09XCJJU19JTlRFUk5BTFwiLGVbZS5JU19XRUI9MjEyXT1cIklTX1dFQlwiLGVbZS5BUFBfT1BFTl9UT19NQVA9MjEzXT1cIkFQUF9PUEVOX1RPX01BUFwiLGVbZS5BUFBfT1BFTl9UT19GUklFTkRTRkVFRD0yMTRdPVwiQVBQX09QRU5fVE9fRlJJRU5EU0ZFRURcIixlW2UuQVBQX09QRU5fVE9fTEVOU0VTPTIxNV09XCJBUFBfT1BFTl9UT19MRU5TRVNcIixlW2UuQVBQX09QRU5fVE9fTUVNT1JJRVM9MjE2XT1cIkFQUF9PUEVOX1RPX01FTU9SSUVTXCIsZVtlLkFQUF9PUEVOX1RPX0NPTU1VTklUWT0yMTddPVwiQVBQX09QRU5fVE9fQ09NTVVOSVRZXCIsZVtlLkFQUF9PUEVOX1RPX1NQT1RMSUdIVD0yMThdPVwiQVBQX09QRU5fVE9fU1BPVExJR0hUXCIsZVtlLklTX0lNUEFDVEVEX0JZX1BJTkNfODkzPTIxOV09XCJJU19JTVBBQ1RFRF9CWV9QSU5DXzg5M1wiLGVbZS5EQVlTX0JFRk9SRV9CSVJUSERBWT0yMjBdPVwiREFZU19CRUZPUkVfQklSVEhEQVlcIixlW2UuSEFTX0JJUEE9MjIxXT1cIkhBU19CSVBBXCIsZVtlLlNQT1RMSUdIVF9TVE9SWV9FTkdBR0VNRU5UX1NUQVRVUz0yMjJdPVwiU1BPVExJR0hUX1NUT1JZX0VOR0FHRU1FTlRfU1RBVFVTXCIsZVtlLklOQ0xVU0lPTl9QQU5FTF9NRU1CRVI9MjIzXT1cIklOQ0xVU0lPTl9QQU5FTF9NRU1CRVJcIixlW2UuSEVWQ19IV19ERUNPREVSPTIyNF09XCJIRVZDX0hXX0RFQ09ERVJcIixlW2UuSEVWQ19TV19ERUNPREVSPTIyNV09XCJIRVZDX1NXX0RFQ09ERVJcIixlW2UuSEFTSF9NVVJNVVIzXzEyOF9NT0RfMTAwPTIyNl09XCJIQVNIX01VUk1VUjNfMTI4X01PRF8xMDBcIixlW2UuSEFTX0FDVElWRV9TTkFQQ0hBVF9QTFVTPTIyN109XCJIQVNfQUNUSVZFX1NOQVBDSEFUX1BMVVNcIixlW2UuU05BUF9LSVRfT0FVVEhfSUQ9MjI4XT1cIlNOQVBfS0lUX09BVVRIX0lEXCIsZVtlLk9SR0FOSVpBVElPTl9UWVBFPTIyOV09XCJPUkdBTklaQVRJT05fVFlQRVwiLGVbZS5DSFVOS19VUExPQURfU1VQUE9SVF9SRVFVSVJFRD0yMzBdPVwiQ0hVTktfVVBMT0FEX1NVUFBPUlRfUkVRVUlSRURcIixlW2UuQ0xPVURGUk9OVF9QT1A9MjMxXT1cIkNMT1VERlJPTlRfUE9QXCIsZVtlLkJJTExCT0FSRF9DQU1QQUlHTl9MT0NBTF9GSVJTVF9JTVBSRVNTSU9OX1RJTUVfU0VDU19UT19OT1c9MjMyXT1cIkJJTExCT0FSRF9DQU1QQUlHTl9MT0NBTF9GSVJTVF9JTVBSRVNTSU9OX1RJTUVfU0VDU19UT19OT1dcIixlW2UuQklMTEJPQVJEX0NBTVBBSUdOX0xPQ0FMX0NMSUNLX0NPVU5UPTIzM109XCJCSUxMQk9BUkRfQ0FNUEFJR05fTE9DQUxfQ0xJQ0tfQ09VTlRcIixlW2UuQklMTEJPQVJEX0NBTVBBSUdOX0xPQ0FMX0lOVEVSQUNUSU9OX0NPVU5UPTIzNF09XCJCSUxMQk9BUkRfQ0FNUEFJR05fTE9DQUxfSU5URVJBQ1RJT05fQ09VTlRcIixlW2UuQklMTEJPQVJEX0NBTVBBSUdOX0xPQ0FMX0xBU1RfSU5URVJBQ1RJT05fVElNRV9TRUNTX1RPX05PVz0yMzVdPVwiQklMTEJPQVJEX0NBTVBBSUdOX0xPQ0FMX0xBU1RfSU5URVJBQ1RJT05fVElNRV9TRUNTX1RPX05PV1wiLGVbZS5GU1RfTE9DS19TQ1JFRU5fV0lER0VUX0JJTExCT0FSRF9MQVVOQ0hFRF9GUk9NX1BVU0g9MjM2XT1cIkZTVF9MT0NLX1NDUkVFTl9XSURHRVRfQklMTEJPQVJEX0xBVU5DSEVEX0ZST01fUFVTSFwiLGVbZS5XRUJfU0NSRUVOX1dJRFRIPTIzN109XCJXRUJfU0NSRUVOX1dJRFRIXCIsZVtlLldFQl9TQ1JFRU5fSEVJR0hUPTIzOF09XCJXRUJfU0NSRUVOX0hFSUdIVFwiLGVbZS5TVVBfSU9TX0xPQ0tfU0NSRUVOX1dJREdFVF9FTkFCTEVEPTIzOV09XCJTVVBfSU9TX0xPQ0tfU0NSRUVOX1dJREdFVF9FTkFCTEVEXCIsZVtlLlNOQVBfUFJJVkFDWT0yNDBdPVwiU05BUF9QUklWQUNZXCIsZVtlLkFEU19JTlRFUkZBQ0VTX0lTX05FV19PUkdBTklaQVRJT049MjQxXT1cIkFEU19JTlRFUkZBQ0VTX0lTX05FV19PUkdBTklaQVRJT05cIixlW2UuU0VSVkVSX09OTFk9MjQyXT1cIlNFUlZFUl9PTkxZXCIsZVtlLkdIRV9PUkdBTklaQVRJT049MjQzXT1cIkdIRV9PUkdBTklaQVRJT05cIixlW2UuR0hFX1JFUE9TSVRPUlk9MjQ0XT1cIkdIRV9SRVBPU0lUT1JZXCIsZVtlLkdIRV9VU0VSX0VNQUlMPTI0NV09XCJHSEVfVVNFUl9FTUFJTFwiLGVbZS5CVUlMRF9ERUZJTklUSU9OX0lEPTI0Nl09XCJCVUlMRF9ERUZJTklUSU9OX0lEXCIsZVtlLkJVSUxEX0RFRklOSVRJT05fTkFNRT0yNDddPVwiQlVJTERfREVGSU5JVElPTl9OQU1FXCIsZVtlLkxDQV9QUklOQ0lQQUw9MjQ4XT1cIkxDQV9QUklOQ0lQQUxcIixlW2UuTUVESUFfUEVSRk9STUFOQ0VfQ0xBU1M9MjQ5XT1cIk1FRElBX1BFUkZPUk1BTkNFX0NMQVNTXCIsZVtlLkNPTU1VTklUWV9DT1VOVD0yNTBdPVwiQ09NTVVOSVRZX0NPVU5UXCIsZVtlLlJFQ0lQSUVOVFNfU1VQUE9SVF9GTVA0PTI1MV09XCJSRUNJUElFTlRTX1NVUFBPUlRfRk1QNFwiLGVbZS5TQ1JFRU5fQVNQRUNUX1JBVElPPTI1Ml09XCJTQ1JFRU5fQVNQRUNUX1JBVElPXCIsZVtlLlVTRVJfR1JPVVA9MjUzXT1cIlVTRVJfR1JPVVBcIixlW2UuVVNFUl9IQVNfREVOSUVEX0NBTUVSQV9QRVJNPTI1NF09XCJVU0VSX0hBU19ERU5JRURfQ0FNRVJBX1BFUk1cIixlW2UuQ0FNRU9TX0VOR0FHRU1FTlRfTEVWRUw9MjU1XT1cIkNBTUVPU19FTkdBR0VNRU5UX0xFVkVMXCIsZVtlLkhBU19DQU1FT1M9MjU2XT1cIkhBU19DQU1FT1NcIixlW2UuSVNfQUNUSVZFX0xFTlNfVklERU9fQ0hBVF9VU0VSPTI1N109XCJJU19BQ1RJVkVfTEVOU19WSURFT19DSEFUX1VTRVJcIixlW2UuTlVNX1NQT1RMSUdIVF9QT1NUU19MNz0yNThdPVwiTlVNX1NQT1RMSUdIVF9QT1NUU19MN1wiLGVbZS5OVU1fTUFQX1BPU1RTX0w3PTI1OV09XCJOVU1fTUFQX1BPU1RTX0w3XCIsZVtlLkhBU19DUkVBVEVEX1BVQkxJQ19QUk9GSUxFPTI2MF09XCJIQVNfQ1JFQVRFRF9QVUJMSUNfUFJPRklMRVwiLGVbZS5IQVNfUFVCTElDX1BST0ZJTEVfQUNDRVNTX1ZJQV9ST0xFPTI2MV09XCJIQVNfUFVCTElDX1BST0ZJTEVfQUNDRVNTX1ZJQV9ST0xFXCIsZVtlLkRBWVNfU0lOQ0VfTEFTVF9DQU1FUkFfUEVSTV9ERU5ZPTI2Ml09XCJEQVlTX1NJTkNFX0xBU1RfQ0FNRVJBX1BFUk1fREVOWVwiLGVbZS5EQVlTX1NJTkNFX0FEX09SR19KT0lOPTI2M109XCJEQVlTX1NJTkNFX0FEX09SR19KT0lOXCIsZVtlLkRBWVNfU0lOQ0VfRklSU1RfQURfQ1JFQVRFPTI2NF09XCJEQVlTX1NJTkNFX0ZJUlNUX0FEX0NSRUFURVwiLGVbZS5PUkdBTklaQVRJT05fQ09VTlRSWT0yNjVdPVwiT1JHQU5JWkFUSU9OX0NPVU5UUllcIixlW2UuREFZU19TSU5DRV9GSVJTVF9EV0VCX1ZJU0lUPTI2Nl09XCJEQVlTX1NJTkNFX0ZJUlNUX0RXRUJfVklTSVRcIixlW2UuREFZU19TSU5DRV9MQVNUX0RXRUJfVklTSVQ9MjY3XT1cIkRBWVNfU0lOQ0VfTEFTVF9EV0VCX1ZJU0lUXCIsZVtlLldFRUtTX1NJTkNFX1VTSU5HX0RXRUI9MjY4XT1cIldFRUtTX1NJTkNFX1VTSU5HX0RXRUJcIixlW2UuSEFTX0xFTlM9MjY5XT1cIkhBU19MRU5TXCIsZVtlLkJJTExCT0FSRF9TRVJWRVJfSU1QUkVTU0lPTl9DT1VOVD0yNzBdPVwiQklMTEJPQVJEX1NFUlZFUl9JTVBSRVNTSU9OX0NPVU5UXCIsZVtlLkJJTExCT0FSRF9TRVJWRVJfQ0xJQ0tfQ09VTlQ9MjcxXT1cIkJJTExCT0FSRF9TRVJWRVJfQ0xJQ0tfQ09VTlRcIixlW2UuQklMTEJPQVJEX1NFUlZFUl9ESVNNSVNTX0NPVU5UPTI3Ml09XCJCSUxMQk9BUkRfU0VSVkVSX0RJU01JU1NfQ09VTlRcIixlW2UuQklMTEJPQVJEX1NFUlZFUl9JTlRFUkFDVElPTl9DT1VOVD0yNzNdPVwiQklMTEJPQVJEX1NFUlZFUl9JTlRFUkFDVElPTl9DT1VOVFwiLGVbZS5CSUxMQk9BUkRfU0VSVkVSX0ZJUlNUX0lNUFJFU1NJT05fVElNRV9TRUNTX1RPX05PVz0yNzRdPVwiQklMTEJPQVJEX1NFUlZFUl9GSVJTVF9JTVBSRVNTSU9OX1RJTUVfU0VDU19UT19OT1dcIixlW2UuQklMTEJPQVJEX1NFUlZFUl9MQVNUX0lNUFJFU1NJT05fVElNRV9TRUNTX1RPX05PVz0yNzVdPVwiQklMTEJPQVJEX1NFUlZFUl9MQVNUX0lNUFJFU1NJT05fVElNRV9TRUNTX1RPX05PV1wiLGVbZS5CSUxMQk9BUkRfU0VSVkVSX0ZJUlNUX0NMSUNLX1RJTUVfU0VDU19UT19OT1c9Mjc2XT1cIkJJTExCT0FSRF9TRVJWRVJfRklSU1RfQ0xJQ0tfVElNRV9TRUNTX1RPX05PV1wiLGVbZS5CSUxMQk9BUkRfU0VSVkVSX0xBU1RfQ0xJQ0tfVElNRV9TRUNTX1RPX05PVz0yNzddPVwiQklMTEJPQVJEX1NFUlZFUl9MQVNUX0NMSUNLX1RJTUVfU0VDU19UT19OT1dcIixlW2UuQklMTEJPQVJEX1NFUlZFUl9GSVJTVF9ESVNNSVNTX1RJTUVfU0VDU19UT19OT1c9Mjc4XT1cIkJJTExCT0FSRF9TRVJWRVJfRklSU1RfRElTTUlTU19USU1FX1NFQ1NfVE9fTk9XXCIsZVtlLkJJTExCT0FSRF9TRVJWRVJfTEFTVF9ESVNNSVNTX1RJTUVfU0VDU19UT19OT1c9Mjc5XT1cIkJJTExCT0FSRF9TRVJWRVJfTEFTVF9ESVNNSVNTX1RJTUVfU0VDU19UT19OT1dcIixlW2UuQklMTEJPQVJEX1NFUlZFUl9GSVJTVF9JTlRFUkFDVElPTl9USU1FX1NFQ1NfVE9fTk9XPTI4MF09XCJCSUxMQk9BUkRfU0VSVkVSX0ZJUlNUX0lOVEVSQUNUSU9OX1RJTUVfU0VDU19UT19OT1dcIixlW2UuQklMTEJPQVJEX1NFUlZFUl9MQVNUX0lOVEVSQUNUSU9OX1RJTUVfU0VDU19UT19OT1c9MjgxXT1cIkJJTExCT0FSRF9TRVJWRVJfTEFTVF9JTlRFUkFDVElPTl9USU1FX1NFQ1NfVE9fTk9XXCIsZVtlLkJJTExCT0FSRF9TRVJWRVJfQ09OVElOVU9VU19ESVNNSVNTX0NPVU5UPTI4Ml09XCJCSUxMQk9BUkRfU0VSVkVSX0NPTlRJTlVPVVNfRElTTUlTU19DT1VOVFwiLGVbZS5CSUxMQk9BUkRfQ0FNUEFJR05fTE9DQUxfRklSU1RfQ0xJQ0tfVElNRV9TRUNTX1RPX05PVz0yODNdPVwiQklMTEJPQVJEX0NBTVBBSUdOX0xPQ0FMX0ZJUlNUX0NMSUNLX1RJTUVfU0VDU19UT19OT1dcIixlW2UuQklMTEJPQVJEX0NBTVBBSUdOX0xPQ0FMX0xBU1RfQ0xJQ0tfVElNRV9TRUNTX1RPX05PVz0yODRdPVwiQklMTEJPQVJEX0NBTVBBSUdOX0xPQ0FMX0xBU1RfQ0xJQ0tfVElNRV9TRUNTX1RPX05PV1wiLGVbZS5CSUxMQk9BUkRfQ0FNUEFJR05fTE9DQUxfRklSU1RfRElTTUlTU19USU1FX1NFQ1NfVE9fTk9XPTI4NV09XCJCSUxMQk9BUkRfQ0FNUEFJR05fTE9DQUxfRklSU1RfRElTTUlTU19USU1FX1NFQ1NfVE9fTk9XXCIsZVtlLkJJTExCT0FSRF9DQU1QQUlHTl9MT0NBTF9MQVNUX0RJU01JU1NfVElNRV9TRUNTX1RPX05PVz0yODZdPVwiQklMTEJPQVJEX0NBTVBBSUdOX0xPQ0FMX0xBU1RfRElTTUlTU19USU1FX1NFQ1NfVE9fTk9XXCIsZVtlLkJJTExCT0FSRF9DQU1QQUlHTl9MT0NBTF9GSVJTVF9JTlRFUkFDVElPTl9USU1FX1NFQ1NfVE9fTk9XPTI4N109XCJCSUxMQk9BUkRfQ0FNUEFJR05fTE9DQUxfRklSU1RfSU5URVJBQ1RJT05fVElNRV9TRUNTX1RPX05PV1wiLGVbZS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCJ9KFF8fChRPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlVOS05PV05fU0lHTkFMX1RPX0hBU0g9MF09XCJVTktOT1dOX1NJR05BTF9UT19IQVNIXCIsZVtlLkhBU0hfU0VFRF9BTkRfVVNFUl9JRD0xXT1cIkhBU0hfU0VFRF9BTkRfVVNFUl9JRFwiLGVbZS5IQVNIX1VTRVJfSURfQU5EX05BTUVTUEFDRT0yXT1cIkhBU0hfVVNFUl9JRF9BTkRfTkFNRVNQQUNFXCIsZVtlLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIn0oSnx8KEo9e30pKTtjb25zdCB0ZT17Y29uZmlnSWQ6XCJcIix0dGxTZWNvbmRzOjAscHJpb3JpdHk6MCxuYW1lc3BhY2U6MCxzdHVkeU5hbWU6XCJcIixleHBlcmltZW50SWQ6MCxkZWxldGU6ITEsc2VydmVQbGF0Zm9ybXM6MCxzZXF1ZW5jZUlkOjAscnVpZFR5cGU6MCxzZWdtZW50T3JkaW5hbDowLGdlbmVyYXRlZEZyb21BYkFsbG93bGlzdHM6ITF9LG5lPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmMoKS5Xcml0ZXIuY3JlYXRlKCk7XCJcIiE9PWUuY29uZmlnSWQmJnQudWludDMyKDEwKS5zdHJpbmcoZS5jb25maWdJZCksdm9pZCAwIT09ZS52YWx1ZSYmSy5lbmNvZGUoZS52YWx1ZSx0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnRhcmdldGluZ0V4cHJlc3Npb24mJmllLmVuY29kZShlLnRhcmdldGluZ0V4cHJlc3Npb24sdC51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCksMCE9PWUudHRsU2Vjb25kcyYmdC51aW50MzIoMzIpLmludDY0KGUudHRsU2Vjb25kcyksMCE9PWUuY29uZmlnUnVsZVV1aWRCeXRlcy5sZW5ndGgmJnQudWludDMyKDQyKS5ieXRlcyhlLmNvbmZpZ1J1bGVVdWlkQnl0ZXMpLDAhPT1lLnByaW9yaXR5JiZ0LnVpbnQzMig0OCkuaW50MzIoZS5wcmlvcml0eSksMCE9PWUubmFtZXNwYWNlJiZ0LnVpbnQzMig1NikuaW50MzIoZS5uYW1lc3BhY2UpLFwiXCIhPT1lLnN0dWR5TmFtZSYmdC51aW50MzIoNjYpLnN0cmluZyhlLnN0dWR5TmFtZSksMCE9PWUuZXhwZXJpbWVudElkJiZ0LnVpbnQzMig3MikuaW50MzIoZS5leHBlcmltZW50SWQpLCEwPT09ZS5kZWxldGUmJnQudWludDMyKDgwKS5ib29sKGUuZGVsZXRlKSx0LnVpbnQzMig5MCkuZm9yaygpO2Zvcihjb25zdCBuIG9mIGUuc2VydmVQbGF0Zm9ybXMpdC5pbnQzMihuKTtyZXR1cm4gdC5sZGVsaW0oKSwwIT09ZS5zZXF1ZW5jZUlkJiZ0LnVpbnQzMig5NikuaW50MzIoZS5zZXF1ZW5jZUlkKSwwIT09ZS5ydWlkVHlwZSYmdC51aW50MzIoMTA0KS5pbnQzMihlLnJ1aWRUeXBlKSwwIT09ZS5zZWdtZW50T3JkaW5hbCYmdC51aW50MzIoMTEyKS5pbnQzMihlLnNlZ21lbnRPcmRpbmFsKSwhMD09PWUuZ2VuZXJhdGVkRnJvbUFiQWxsb3dsaXN0cyYmdC51aW50MzIoMTIwKS5ib29sKGUuZ2VuZXJhdGVkRnJvbUFiQWxsb3dsaXN0cyksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYygpLlJlYWRlcj9lOm5ldyhjKCkuUmVhZGVyKShlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT1PYmplY3QuYXNzaWduKHt9LHRlKTtmb3IoaS5zZXJ2ZVBsYXRmb3Jtcz1bXSxpLmNvbmZpZ1J1bGVVdWlkQnl0ZXM9bmV3IFVpbnQ4QXJyYXk7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmNvbmZpZ0lkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkudmFsdWU9Sy5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDM6aS50YXJnZXRpbmdFeHByZXNzaW9uPWllLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgNDppLnR0bFNlY29uZHM9Y2Uobi5pbnQ2NCgpKTticmVhaztjYXNlIDU6aS5jb25maWdSdWxlVXVpZEJ5dGVzPW4uYnl0ZXMoKTticmVhaztjYXNlIDY6aS5wcmlvcml0eT1uLmludDMyKCk7YnJlYWs7Y2FzZSA3OmkubmFtZXNwYWNlPW4uaW50MzIoKTticmVhaztjYXNlIDg6aS5zdHVkeU5hbWU9bi5zdHJpbmcoKTticmVhaztjYXNlIDk6aS5leHBlcmltZW50SWQ9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMTA6aS5kZWxldGU9bi5ib29sKCk7YnJlYWs7Y2FzZSAxMTppZigyPT0oNyZlKSl7Y29uc3QgZT1uLnVpbnQzMigpK24ucG9zO2Zvcig7bi5wb3M8ZTspaS5zZXJ2ZVBsYXRmb3Jtcy5wdXNoKG4uaW50MzIoKSl9ZWxzZSBpLnNlcnZlUGxhdGZvcm1zLnB1c2gobi5pbnQzMigpKTticmVhaztjYXNlIDEyOmkuc2VxdWVuY2VJZD1uLmludDMyKCk7YnJlYWs7Y2FzZSAxMzppLnJ1aWRUeXBlPW4uaW50MzIoKTticmVhaztjYXNlIDE0Omkuc2VnbWVudE9yZGluYWw9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMTU6aS5nZW5lcmF0ZWRGcm9tQWJBbGxvd2xpc3RzPW4uYm9vbCgpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LHRlKTtpZih0LnNlcnZlUGxhdGZvcm1zPVtdLHZvaWQgMCE9PWUuY29uZmlnSWQmJm51bGwhPT1lLmNvbmZpZ0lkP3QuY29uZmlnSWQ9ZS5jb25maWdJZDp0LmNvbmZpZ0lkPVwiXCIsdm9pZCAwIT09ZS52YWx1ZSYmbnVsbCE9PWUudmFsdWU/dC52YWx1ZT1LLmZyb21QYXJ0aWFsKGUudmFsdWUpOnQudmFsdWU9dm9pZCAwLHZvaWQgMCE9PWUudGFyZ2V0aW5nRXhwcmVzc2lvbiYmbnVsbCE9PWUudGFyZ2V0aW5nRXhwcmVzc2lvbj90LnRhcmdldGluZ0V4cHJlc3Npb249aWUuZnJvbVBhcnRpYWwoZS50YXJnZXRpbmdFeHByZXNzaW9uKTp0LnRhcmdldGluZ0V4cHJlc3Npb249dm9pZCAwLHZvaWQgMCE9PWUudHRsU2Vjb25kcyYmbnVsbCE9PWUudHRsU2Vjb25kcz90LnR0bFNlY29uZHM9ZS50dGxTZWNvbmRzOnQudHRsU2Vjb25kcz0wLHZvaWQgMCE9PWUuY29uZmlnUnVsZVV1aWRCeXRlcyYmbnVsbCE9PWUuY29uZmlnUnVsZVV1aWRCeXRlcz90LmNvbmZpZ1J1bGVVdWlkQnl0ZXM9ZS5jb25maWdSdWxlVXVpZEJ5dGVzOnQuY29uZmlnUnVsZVV1aWRCeXRlcz1uZXcgVWludDhBcnJheSx2b2lkIDAhPT1lLnByaW9yaXR5JiZudWxsIT09ZS5wcmlvcml0eT90LnByaW9yaXR5PWUucHJpb3JpdHk6dC5wcmlvcml0eT0wLHZvaWQgMCE9PWUubmFtZXNwYWNlJiZudWxsIT09ZS5uYW1lc3BhY2U/dC5uYW1lc3BhY2U9ZS5uYW1lc3BhY2U6dC5uYW1lc3BhY2U9MCx2b2lkIDAhPT1lLnN0dWR5TmFtZSYmbnVsbCE9PWUuc3R1ZHlOYW1lP3Quc3R1ZHlOYW1lPWUuc3R1ZHlOYW1lOnQuc3R1ZHlOYW1lPVwiXCIsdm9pZCAwIT09ZS5leHBlcmltZW50SWQmJm51bGwhPT1lLmV4cGVyaW1lbnRJZD90LmV4cGVyaW1lbnRJZD1lLmV4cGVyaW1lbnRJZDp0LmV4cGVyaW1lbnRJZD0wLHZvaWQgMCE9PWUuZGVsZXRlJiZudWxsIT09ZS5kZWxldGU/dC5kZWxldGU9ZS5kZWxldGU6dC5kZWxldGU9ITEsdm9pZCAwIT09ZS5zZXJ2ZVBsYXRmb3JtcyYmbnVsbCE9PWUuc2VydmVQbGF0Zm9ybXMpZm9yKGNvbnN0IG4gb2YgZS5zZXJ2ZVBsYXRmb3Jtcyl0LnNlcnZlUGxhdGZvcm1zLnB1c2gobik7cmV0dXJuIHZvaWQgMCE9PWUuc2VxdWVuY2VJZCYmbnVsbCE9PWUuc2VxdWVuY2VJZD90LnNlcXVlbmNlSWQ9ZS5zZXF1ZW5jZUlkOnQuc2VxdWVuY2VJZD0wLHZvaWQgMCE9PWUucnVpZFR5cGUmJm51bGwhPT1lLnJ1aWRUeXBlP3QucnVpZFR5cGU9ZS5ydWlkVHlwZTp0LnJ1aWRUeXBlPTAsdm9pZCAwIT09ZS5zZWdtZW50T3JkaW5hbCYmbnVsbCE9PWUuc2VnbWVudE9yZGluYWw/dC5zZWdtZW50T3JkaW5hbD1lLnNlZ21lbnRPcmRpbmFsOnQuc2VnbWVudE9yZGluYWw9MCx2b2lkIDAhPT1lLmdlbmVyYXRlZEZyb21BYkFsbG93bGlzdHMmJm51bGwhPT1lLmdlbmVyYXRlZEZyb21BYkFsbG93bGlzdHM/dC5nZW5lcmF0ZWRGcm9tQWJBbGxvd2xpc3RzPWUuZ2VuZXJhdGVkRnJvbUFiQWxsb3dsaXN0czp0LmdlbmVyYXRlZEZyb21BYkFsbG93bGlzdHM9ITEsdH19LHJlPXtvcGVyYXRvcjowLHByb3BlcnR5OjAscHJlZGljYXRlT3BlcmF0b3I6MH0saWU9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YygpLldyaXRlci5jcmVhdGUoKTswIT09ZS5vcGVyYXRvciYmdC51aW50MzIoOCkuaW50MzIoZS5vcGVyYXRvcik7Zm9yKGNvbnN0IG4gb2YgZS5jaGlsZHJlbilpZS5lbmNvZGUobix0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gMCE9PWUucHJvcGVydHkmJnQudWludDMyKDI0KS5pbnQzMihlLnByb3BlcnR5KSwwIT09ZS5wcmVkaWNhdGVPcGVyYXRvciYmdC51aW50MzIoMzIpLmludDMyKGUucHJlZGljYXRlT3BlcmF0b3IpLHZvaWQgMCE9PWUudmFsdWUmJksuZW5jb2RlKGUudmFsdWUsdC51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5wcm9wZXJ0eU1ldGFkYXRhJiZhZS5lbmNvZGUoZS5wcm9wZXJ0eU1ldGFkYXRhLHQudWludDMyKDUwKS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGMoKS5SZWFkZXI/ZTpuZXcoYygpLlJlYWRlcikoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9T2JqZWN0LmFzc2lnbih7fSxyZSk7Zm9yKGkuY2hpbGRyZW49W107bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLm9wZXJhdG9yPW4uaW50MzIoKTticmVhaztjYXNlIDI6aS5jaGlsZHJlbi5wdXNoKGllLmRlY29kZShuLG4udWludDMyKCkpKTticmVhaztjYXNlIDM6aS5wcm9wZXJ0eT1uLmludDMyKCk7YnJlYWs7Y2FzZSA0OmkucHJlZGljYXRlT3BlcmF0b3I9bi5pbnQzMigpO2JyZWFrO2Nhc2UgNTppLnZhbHVlPUsuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSA2OmkucHJvcGVydHlNZXRhZGF0YT1hZS5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxyZSk7aWYodC5jaGlsZHJlbj1bXSx2b2lkIDAhPT1lLm9wZXJhdG9yJiZudWxsIT09ZS5vcGVyYXRvcj90Lm9wZXJhdG9yPWUub3BlcmF0b3I6dC5vcGVyYXRvcj0wLHZvaWQgMCE9PWUuY2hpbGRyZW4mJm51bGwhPT1lLmNoaWxkcmVuKWZvcihjb25zdCBuIG9mIGUuY2hpbGRyZW4pdC5jaGlsZHJlbi5wdXNoKGllLmZyb21QYXJ0aWFsKG4pKTtyZXR1cm4gdm9pZCAwIT09ZS5wcm9wZXJ0eSYmbnVsbCE9PWUucHJvcGVydHk/dC5wcm9wZXJ0eT1lLnByb3BlcnR5OnQucHJvcGVydHk9MCx2b2lkIDAhPT1lLnByZWRpY2F0ZU9wZXJhdG9yJiZudWxsIT09ZS5wcmVkaWNhdGVPcGVyYXRvcj90LnByZWRpY2F0ZU9wZXJhdG9yPWUucHJlZGljYXRlT3BlcmF0b3I6dC5wcmVkaWNhdGVPcGVyYXRvcj0wLHZvaWQgMCE9PWUudmFsdWUmJm51bGwhPT1lLnZhbHVlP3QudmFsdWU9Sy5mcm9tUGFydGlhbChlLnZhbHVlKTp0LnZhbHVlPXZvaWQgMCx2b2lkIDAhPT1lLnByb3BlcnR5TWV0YWRhdGEmJm51bGwhPT1lLnByb3BlcnR5TWV0YWRhdGE/dC5wcm9wZXJ0eU1ldGFkYXRhPWFlLmZyb21QYXJ0aWFsKGUucHJvcGVydHlNZXRhZGF0YSk6dC5wcm9wZXJ0eU1ldGFkYXRhPXZvaWQgMCx0fX0sb2U9e2l0ZW1JZDowLHNpZ25hbFRvSGFzaDowLGFiTmFtZXNwYWNlRm9ySGFzaGluZzpcIlwiLGFiU2VlZEZvckhhc2hpbmc6XCJcIn0sYWU9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YygpLldyaXRlci5jcmVhdGUoKTtyZXR1cm4gMCE9PWUuaXRlbUlkJiZ0LnVpbnQzMig4KS5pbnQzMihlLml0ZW1JZCksMCE9PWUuc2lnbmFsVG9IYXNoJiZ0LnVpbnQzMigxNikuaW50MzIoZS5zaWduYWxUb0hhc2gpLFwiXCIhPT1lLmFiTmFtZXNwYWNlRm9ySGFzaGluZyYmdC51aW50MzIoMjYpLnN0cmluZyhlLmFiTmFtZXNwYWNlRm9ySGFzaGluZyksXCJcIiE9PWUuYWJTZWVkRm9ySGFzaGluZyYmdC51aW50MzIoMzQpLnN0cmluZyhlLmFiU2VlZEZvckhhc2hpbmcpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGMoKS5SZWFkZXI/ZTpuZXcoYygpLlJlYWRlcikoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9T2JqZWN0LmFzc2lnbih7fSxvZSk7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuaXRlbUlkPW4uaW50MzIoKTticmVhaztjYXNlIDI6aS5zaWduYWxUb0hhc2g9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMzppLmFiTmFtZXNwYWNlRm9ySGFzaGluZz1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNDppLmFiU2VlZEZvckhhc2hpbmc9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxvZSk7cmV0dXJuIHZvaWQgMCE9PWUuaXRlbUlkJiZudWxsIT09ZS5pdGVtSWQ/dC5pdGVtSWQ9ZS5pdGVtSWQ6dC5pdGVtSWQ9MCx2b2lkIDAhPT1lLnNpZ25hbFRvSGFzaCYmbnVsbCE9PWUuc2lnbmFsVG9IYXNoP3Quc2lnbmFsVG9IYXNoPWUuc2lnbmFsVG9IYXNoOnQuc2lnbmFsVG9IYXNoPTAsdm9pZCAwIT09ZS5hYk5hbWVzcGFjZUZvckhhc2hpbmcmJm51bGwhPT1lLmFiTmFtZXNwYWNlRm9ySGFzaGluZz90LmFiTmFtZXNwYWNlRm9ySGFzaGluZz1lLmFiTmFtZXNwYWNlRm9ySGFzaGluZzp0LmFiTmFtZXNwYWNlRm9ySGFzaGluZz1cIlwiLHZvaWQgMCE9PWUuYWJTZWVkRm9ySGFzaGluZyYmbnVsbCE9PWUuYWJTZWVkRm9ySGFzaGluZz90LmFiU2VlZEZvckhhc2hpbmc9ZS5hYlNlZWRGb3JIYXNoaW5nOnQuYWJTZWVkRm9ySGFzaGluZz1cIlwiLHR9fTt2YXIgc2U9KCgpPT57aWYodm9pZCAwIT09c2UpcmV0dXJuIHNlO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmKXJldHVybiBzZWxmO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvdztpZih2b2lkIDAhPT1uLmcpcmV0dXJuIG4uZzt0aHJvd1wiVW5hYmxlIHRvIGxvY2F0ZSBnbG9iYWwgb2JqZWN0XCJ9KSgpO2Z1bmN0aW9uIGNlKGUpe2lmKGUuZ3QoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpKXRocm93IG5ldyBzZS5FcnJvcihcIlZhbHVlIGlzIGxhcmdlciB0aGFuIE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXCIpO3JldHVybiBlLnRvTnVtYmVyKCl9YygpLnV0aWwuTG9uZyE9PWEoKSYmKGMoKS51dGlsLkxvbmc9YSgpLGMoKS5jb25maWd1cmUoKSk7Y29uc3QgbGU9e2FiUmVzdWx0Q2hlY2tzdW1JbnB1dDpcIlwifSx1ZT17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpjKCkuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLmFiUmVzdWx0Q2hlY2tzdW1JbnB1dCYmdC51aW50MzIoMTApLnN0cmluZyhlLmFiUmVzdWx0Q2hlY2tzdW1JbnB1dCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYygpLlJlYWRlcj9lOm5ldyhjKCkuUmVhZGVyKShlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT1PYmplY3QuYXNzaWduKHt9LGxlKTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/aS5hYlJlc3VsdENoZWNrc3VtSW5wdXQ9bi5zdHJpbmcoKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxsZSk7cmV0dXJuIHZvaWQgMCE9PWUuYWJSZXN1bHRDaGVja3N1bUlucHV0JiZudWxsIT09ZS5hYlJlc3VsdENoZWNrc3VtSW5wdXQ/dC5hYlJlc3VsdENoZWNrc3VtSW5wdXQ9ZS5hYlJlc3VsdENoZWNrc3VtSW5wdXQ6dC5hYlJlc3VsdENoZWNrc3VtSW5wdXQ9XCJcIix0fX0sZGU9e2NvbmZpZ1Jlc3VsdHNFdGFnOlwiXCIsZnVsbFJlc3VsdHM6ITEsYWJSZXN1bHRDaGVja3N1bTowLGlzbzMxNjZBbHBoYTJDb3VudHJ5Q29kZUZyb21SZXF1ZXN0SXA6XCJcIn0sZmU9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YygpLldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgbiBvZiBlLmNvbmZpZ1Jlc3VsdHMpbmUuZW5jb2RlKG4sdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuXCJcIiE9PWUuY29uZmlnUmVzdWx0c0V0YWcmJnQudWludDMyKDE4KS5zdHJpbmcoZS5jb25maWdSZXN1bHRzRXRhZyksdm9pZCAwIT09ZS5iZW5jaG1hcmtSZXF1ZXN0JiZ2LmVuY29kZShlLmJlbmNobWFya1JlcXVlc3QsdC51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCksITA9PT1lLmZ1bGxSZXN1bHRzJiZ0LnVpbnQzMigzMikuYm9vbChlLmZ1bGxSZXN1bHRzKSwwIT09ZS5hYlJlc3VsdENoZWNrc3VtJiZ0LnVpbnQzMig0MCkuaW50MzIoZS5hYlJlc3VsdENoZWNrc3VtKSxcIlwiIT09ZS5pc28zMTY2QWxwaGEyQ291bnRyeUNvZGVGcm9tUmVxdWVzdElwJiZ0LnVpbnQzMig1MCkuc3RyaW5nKGUuaXNvMzE2NkFscGhhMkNvdW50cnlDb2RlRnJvbVJlcXVlc3RJcCksdm9pZCAwIT09ZS5kZWJ1Z0RhdGEmJnVlLmVuY29kZShlLmRlYnVnRGF0YSx0LnVpbnQzMig1OCkuZm9yaygpKS5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBjKCkuUmVhZGVyP2U6bmV3KGMoKS5SZWFkZXIpKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPU9iamVjdC5hc3NpZ24oe30sZGUpO2ZvcihpLmNvbmZpZ1Jlc3VsdHM9W107bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmNvbmZpZ1Jlc3VsdHMucHVzaChuZS5kZWNvZGUobixuLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAyOmkuY29uZmlnUmVzdWx0c0V0YWc9bi5zdHJpbmcoKTticmVhaztjYXNlIDM6aS5iZW5jaG1hcmtSZXF1ZXN0PXYuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSA0OmkuZnVsbFJlc3VsdHM9bi5ib29sKCk7YnJlYWs7Y2FzZSA1OmkuYWJSZXN1bHRDaGVja3N1bT1uLmludDMyKCk7YnJlYWs7Y2FzZSA2OmkuaXNvMzE2NkFscGhhMkNvdW50cnlDb2RlRnJvbVJlcXVlc3RJcD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNzppLmRlYnVnRGF0YT11ZS5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxkZSk7aWYodC5jb25maWdSZXN1bHRzPVtdLHZvaWQgMCE9PWUuY29uZmlnUmVzdWx0cyYmbnVsbCE9PWUuY29uZmlnUmVzdWx0cylmb3IoY29uc3QgbiBvZiBlLmNvbmZpZ1Jlc3VsdHMpdC5jb25maWdSZXN1bHRzLnB1c2gobmUuZnJvbVBhcnRpYWwobikpO3JldHVybiB2b2lkIDAhPT1lLmNvbmZpZ1Jlc3VsdHNFdGFnJiZudWxsIT09ZS5jb25maWdSZXN1bHRzRXRhZz90LmNvbmZpZ1Jlc3VsdHNFdGFnPWUuY29uZmlnUmVzdWx0c0V0YWc6dC5jb25maWdSZXN1bHRzRXRhZz1cIlwiLHZvaWQgMCE9PWUuYmVuY2htYXJrUmVxdWVzdCYmbnVsbCE9PWUuYmVuY2htYXJrUmVxdWVzdD90LmJlbmNobWFya1JlcXVlc3Q9di5mcm9tUGFydGlhbChlLmJlbmNobWFya1JlcXVlc3QpOnQuYmVuY2htYXJrUmVxdWVzdD12b2lkIDAsdm9pZCAwIT09ZS5mdWxsUmVzdWx0cyYmbnVsbCE9PWUuZnVsbFJlc3VsdHM/dC5mdWxsUmVzdWx0cz1lLmZ1bGxSZXN1bHRzOnQuZnVsbFJlc3VsdHM9ITEsdm9pZCAwIT09ZS5hYlJlc3VsdENoZWNrc3VtJiZudWxsIT09ZS5hYlJlc3VsdENoZWNrc3VtP3QuYWJSZXN1bHRDaGVja3N1bT1lLmFiUmVzdWx0Q2hlY2tzdW06dC5hYlJlc3VsdENoZWNrc3VtPTAsdm9pZCAwIT09ZS5pc28zMTY2QWxwaGEyQ291bnRyeUNvZGVGcm9tUmVxdWVzdElwJiZudWxsIT09ZS5pc28zMTY2QWxwaGEyQ291bnRyeUNvZGVGcm9tUmVxdWVzdElwP3QuaXNvMzE2NkFscGhhMkNvdW50cnlDb2RlRnJvbVJlcXVlc3RJcD1lLmlzbzMxNjZBbHBoYTJDb3VudHJ5Q29kZUZyb21SZXF1ZXN0SXA6dC5pc28zMTY2QWxwaGEyQ291bnRyeUNvZGVGcm9tUmVxdWVzdElwPVwiXCIsdm9pZCAwIT09ZS5kZWJ1Z0RhdGEmJm51bGwhPT1lLmRlYnVnRGF0YT90LmRlYnVnRGF0YT11ZS5mcm9tUGFydGlhbChlLmRlYnVnRGF0YSk6dC5kZWJ1Z0RhdGE9dm9pZCAwLHR9fTt2YXIgcGU7ZnVuY3Rpb24gbWUoZSl7cmV0dXJuIGUub3BlcmF0b3I9PT1xLlVOS05PV05fT1BFUkFUT1ImJmUucHJlZGljYXRlT3BlcmF0b3I9PT1YLlVOS05PV05fUFJFRElDQVRFX09QRVJBVE9SJiZlLnByb3BlcnR5PT09US5VTktOT1dOX1BST1BFUlRZfWMoKS51dGlsLkxvbmchPT1hKCkmJihjKCkudXRpbC5Mb25nPWEoKSxjKCkuY29uZmlndXJlKCkpLGZ1bmN0aW9uKGUpe2VbZS5ERUZBVUxUPTBdPVwiREVGQVVMVFwiLGVbZS5DQU1FUkE9MV09XCJDQU1FUkFcIixlW2UuQ09GPTJdPVwiQ09GXCIsZVtlLk1EUD0zXT1cIk1EUFwiLGVbZS5NT05FVElaQVRJT049NF09XCJNT05FVElaQVRJT05cIixlW2UuTEVHQUNZX0FCPTVdPVwiTEVHQUNZX0FCXCIsZVtlLkFCX1NUVURZX1ZFUlNJT049Nl09XCJBQl9TVFVEWV9WRVJTSU9OXCIsZVtlLkNBTUVSQV9QTEFURk9STT03XT1cIkNBTUVSQV9QTEFURk9STVwiLGVbZS5QTEFURk9STV9VST04XT1cIlBMQVRGT1JNX1VJXCIsZVtlLlBMQVRGT1JNX0NPUkU9OV09XCJQTEFURk9STV9DT1JFXCIsZVtlLk1PTkVUSVpBVElPTl9VST0xMF09XCJNT05FVElaQVRJT05fVUlcIixlW2UuTU9ORVRJWkFUSU9OX1JBTktJTkc9MTFdPVwiTU9ORVRJWkFUSU9OX1JBTktJTkdcIixlW2UuVVNFUlNfQU5EX0ZSSUVORFNfVUk9MTJdPVwiVVNFUlNfQU5EX0ZSSUVORFNfVUlcIixlW2UuVVNFUlNfQU5EX0ZSSUVORFNfQ09SRT0xM109XCJVU0VSU19BTkRfRlJJRU5EU19DT1JFXCIsZVtlLlVTRVJTX0FORF9GUklFTkRTX1JBTktJTkc9MTRdPVwiVVNFUlNfQU5EX0ZSSUVORFNfUkFOS0lOR1wiLGVbZS5NRVNTQUdJTkdfVUk9MTVdPVwiTUVTU0FHSU5HX1VJXCIsZVtlLk1FU1NBR0lOR19DT1JFPTE2XT1cIk1FU1NBR0lOR19DT1JFXCIsZVtlLlNUT1JJRVNfVUk9MTddPVwiU1RPUklFU19VSVwiLGVbZS5TVE9SSUVTX0NPUkU9MThdPVwiU1RPUklFU19DT1JFXCIsZVtlLlNUT1JJRVNfUkFOS0lORz0xOV09XCJTVE9SSUVTX1JBTktJTkdcIixlW2UuRElTQ09WRVJfVUk9MjBdPVwiRElTQ09WRVJfVUlcIixlW2UuRElTQ09WRVJfQ09SRT0yMV09XCJESVNDT1ZFUl9DT1JFXCIsZVtlLkRJU0NPVkVSX1JBTktJTkc9MjJdPVwiRElTQ09WRVJfUkFOS0lOR1wiLGVbZS5QUkVNSVVNX0NPTlRFTlRfVUk9MjNdPVwiUFJFTUlVTV9DT05URU5UX1VJXCIsZVtlLlBSRU1JVU1fQ09OVEVOVF9DT1JFPTI0XT1cIlBSRU1JVU1fQ09OVEVOVF9DT1JFXCIsZVtlLlBSRU1JVU1fQ09OVEVOVF9SQU5LSU5HPTI1XT1cIlBSRU1JVU1fQ09OVEVOVF9SQU5LSU5HXCIsZVtlLkNPTU1VTklUWV9VST0yNl09XCJDT01NVU5JVFlfVUlcIixlW2UuQ09NTVVOSVRZX0NPUkU9MjddPVwiQ09NTVVOSVRZX0NPUkVcIixlW2UuQ09NTVVOSVRZX1JBTktJTkc9MjhdPVwiQ09NTVVOSVRZX1JBTktJTkdcIixlW2UuQ0FNRVJBX1VJPTI5XT1cIkNBTUVSQV9VSVwiLGVbZS5DUkVBVElWRV9UT09MU19VST0zMF09XCJDUkVBVElWRV9UT09MU19VSVwiLGVbZS5DUkVBVElWRV9UT09MU19DT1JFPTMxXT1cIkNSRUFUSVZFX1RPT0xTX0NPUkVcIixlW2UuQ0FNRVJBX1BMQVRGT1JNX1VJPTMyXT1cIkNBTUVSQV9QTEFURk9STV9VSVwiLGVbZS5DQU1FUkFfUExBVEZPUk1fUkFOS0lORz0zM109XCJDQU1FUkFfUExBVEZPUk1fUkFOS0lOR1wiLGVbZS5QRVJDRVBUSU9OX1VJPTM0XT1cIlBFUkNFUFRJT05fVUlcIixlW2UuUEVSQ0VQVElPTl9DT1JFPTM1XT1cIlBFUkNFUFRJT05fQ09SRVwiLGVbZS5QRVJDRVBUSU9OX1JBTktJTkc9MzZdPVwiUEVSQ0VQVElPTl9SQU5LSU5HXCIsZVtlLk1FRElBX1VJPTM3XT1cIk1FRElBX1VJXCIsZVtlLk1FTU9SSUVTX1VJPTM4XT1cIk1FTU9SSUVTX1VJXCIsZVtlLk1FTU9SSUVTX0NPUkU9MzldPVwiTUVNT1JJRVNfQ09SRVwiLGVbZS5NQVBfVUk9NDBdPVwiTUFQX1VJXCIsZVtlLk1BUF9DT1JFPTQxXT1cIk1BUF9DT1JFXCIsZVtlLlNFQVJDSF9VST00Ml09XCJTRUFSQ0hfVUlcIixlW2UuU0VBUkNIX0NPUkU9NDNdPVwiU0VBUkNIX0NPUkVcIixlW2UuU0VBUkNIX1JBTktJTkc9NDRdPVwiU0VBUkNIX1JBTktJTkdcIixlW2UuQ09HTkFDX1VJPTQ1XT1cIkNPR05BQ19VSVwiLGVbZS5DT0dOQUNfQ09SRT00Nl09XCJDT0dOQUNfQ09SRVwiLGVbZS5CSVRNT0pJX1VJPTQ3XT1cIkJJVE1PSklfVUlcIixlW2UuQklUTU9KSV9DT1JFPTQ4XT1cIkJJVE1PSklfQ09SRVwiLGVbZS5TUEVDVEFDTEVTX1VJPTQ5XT1cIlNQRUNUQUNMRVNfVUlcIixlW2UuU1BFQ1RBQ0xFU19DT1JFPTUwXT1cIlNQRUNUQUNMRVNfQ09SRVwiLGVbZS5TTkFQX0tJVF9VST01MV09XCJTTkFQX0tJVF9VSVwiLGVbZS5TTkFQX0tJVF9DT1JFPTUyXT1cIlNOQVBfS0lUX0NPUkVcIixlW2UuU05BUF9QUk9fVUk9NTNdPVwiU05BUF9QUk9fVUlcIixlW2UuU05BUF9QUk9fQ09SRT01NF09XCJTTkFQX1BST19DT1JFXCIsZVtlLk5HU19VST01NV09XCJOR1NfVUlcIixlW2UuQ0FNRU9TX1VJPTU2XT1cIkNBTUVPU19VSVwiLGVbZS5DQU1FT1NfQ09SRT01N109XCJDQU1FT1NfQ09SRVwiLGVbZS5DQU1FT1NfUkFOS0lORz01OF09XCJDQU1FT1NfUkFOS0lOR1wiLGVbZS5CTElaWkFSRF9DTElFTlQ9NTldPVwiQkxJWlpBUkRfQ0xJRU5UXCIsZVtlLkJMSVpaQVJEX0JBQ0tFTkQ9NjBdPVwiQkxJWlpBUkRfQkFDS0VORFwiLGVbZS5BQl9TRUdNRU5UPTYxXT1cIkFCX1NFR01FTlRcIixlW2UuQ09ORklHX1JPTExPVVQ9NjJdPVwiQ09ORklHX1JPTExPVVRcIixlW2UuQ09NTUVSQ0VfQkFDS0VORD02M109XCJDT01NRVJDRV9CQUNLRU5EXCIsZVtlLkxFTlNfQ09SRT02NF09XCJMRU5TX0NPUkVcIixlW2UuQ0FNRVJBX0tJVF9DT1JFPTY1XT1cIkNBTUVSQV9LSVRfQ09SRVwiLGVbZS5NRFBfQ09OVEVOVF9NQU5BR0VSPTY2XT1cIk1EUF9DT05URU5UX01BTkFHRVJcIixlW2UuUkVRVUVTVF9ET01BSU5fUk9VVElORz02N109XCJSRVFVRVNUX0RPTUFJTl9ST1VUSU5HXCIsZVtlLkNETl9ST1VUSU5HPTY4XT1cIkNETl9ST1VUSU5HXCIsZVtlLkdSQVBIRU5FX1NBTVBMSU5HPTY5XT1cIkdSQVBIRU5FX1NBTVBMSU5HXCIsZVtlLldFQl9TVE9SWV9DT1JFPTcwXT1cIldFQl9TVE9SWV9DT1JFXCIsZVtlLldFQl9TVE9SWV9VST03MV09XCJXRUJfU1RPUllfVUlcIixlW2UuQ0xJRU5UX1NXSVRDSEJPQVJEPTcyXT1cIkNMSUVOVF9TV0lUQ0hCT0FSRFwiLGVbZS5NQ1M9NzNdPVwiTUNTXCIsZVtlLlNIQVJJTkdfVUk9NzRdPVwiU0hBUklOR19VSVwiLGVbZS5TSEFSSU5HX0NPUkU9NzVdPVwiU0hBUklOR19DT1JFXCIsZVtlLlNIQVJJTkdfUkFOS0lORz03Nl09XCJTSEFSSU5HX1JBTktJTkdcIixlW2UuTURQX1BMQVlCQUNLPTc3XT1cIk1EUF9QTEFZQkFDS1wiLGVbZS5DQU1FUkFfQlVTSU5FU1M9NzhdPVwiQ0FNRVJBX0JVU0lORVNTXCIsZVtlLkFERExJVkU9NzldPVwiQURETElWRVwiLGVbZS5BRF9LSVRfQ09SRT04MF09XCJBRF9LSVRfQ09SRVwiLGVbZS5BRERMSVZFX1VJPTgxXT1cIkFERExJVkVfVUlcIixlW2UuQURETElWRV9DT1JFPTgyXT1cIkFERExJVkVfQ09SRVwiLGVbZS5BRERMSVZFX1JBTktJTkc9ODNdPVwiQURETElWRV9SQU5LSU5HXCIsZVtlLlNUT1JZX1NUVURJT19MSVRFX1VJPTg0XT1cIlNUT1JZX1NUVURJT19MSVRFX1VJXCIsZVtlLlNUT1JZX1NUVURJT19MSVRFX0NPUkU9ODVdPVwiU1RPUllfU1RVRElPX0xJVEVfQ09SRVwiLGVbZS5DT01NRVJDRV9VST04Nl09XCJDT01NRVJDRV9VSVwiLGVbZS5DT01NRVJDRV9DT1JFPTg3XT1cIkNPTU1FUkNFX0NPUkVcIixlW2UuQ09NTUVSQ0VfUkFOS0lORz04OF09XCJDT01NRVJDRV9SQU5LSU5HXCIsZVtlLlNUT1JJRVNfVVg9ODldPVwiU1RPUklFU19VWFwiLGVbZS5DT05URVhUX1VJPTkwXT1cIkNPTlRFWFRfVUlcIixlW2UuQ09OVEVYVF9DT1JFPTkxXT1cIkNPTlRFWFRfQ09SRVwiLGVbZS5MRU5TX1RBUkdFVElORz05Ml09XCJMRU5TX1RBUkdFVElOR1wiLGVbZS5TUE9UTElHSFRfUkFOS0lORz05M109XCJTUE9UTElHSFRfUkFOS0lOR1wiLGVbZS5TUE9UTElHSFRfQ09SRT05NF09XCJTUE9UTElHSFRfQ09SRVwiLGVbZS5TUE9UTElHSFRfVUk9OTVdPVwiU1BPVExJR0hUX1VJXCIsZVtlLkFDVElWQVRJT05fQ09SRT05Nl09XCJBQ1RJVkFUSU9OX0NPUkVcIixlW2UuRlJJRU5ESU5HPTk3XT1cIkZSSUVORElOR1wiLGVbZS5TQUZFVFk9OThdPVwiU0FGRVRZXCIsZVtlLkxPR0lOPTk5XT1cIkxPR0lOXCIsZVtlLk1ZTEVOU0VTX1dFQl9DT1JFPTEwMF09XCJNWUxFTlNFU19XRUJfQ09SRVwiLGVbZS5TRUNVUklUWT0xMDFdPVwiU0VDVVJJVFlcIixlW2UuQUJfQ09OU09MRT0xMDJdPVwiQUJfQ09OU09MRVwiLGVbZS5BRF9NT0RFUkFUSU9OPTEwM109XCJBRF9NT0RFUkFUSU9OXCIsZVtlLkNPTlRFTlRfTElGVF9NRUFTVVJFTUVOVD0xMDRdPVwiQ09OVEVOVF9MSUZUX01FQVNVUkVNRU5UXCIsZVtlLkNPTlRFWFRfQkFDS0VORD0xMDVdPVwiQ09OVEVYVF9CQUNLRU5EXCIsZVtlLkdBTUVTX0ZFRURfQ09SRT0xMDZdPVwiR0FNRVNfRkVFRF9DT1JFXCIsZVtlLlJFQ0lQSUVOVF9ERVZJQ0VfQ0FQQUJJTElUSUVTPTEwN109XCJSRUNJUElFTlRfREVWSUNFX0NBUEFCSUxJVElFU1wiLGVbZS5BRFNfR0FURVdBWV9DT1JFPTEwOF09XCJBRFNfR0FURVdBWV9DT1JFXCIsZVtlLkFEU19JTlRFUkZBQ0VTX1VJPTEwOV09XCJBRFNfSU5URVJGQUNFU19VSVwiLGVbZS5BRFNfTUFOQUdFUl9VST0xMTBdPVwiQURTX01BTkFHRVJfVUlcIixlW2UuQlVTSU5FU1NfTUFOQUdFUl9VST0xMTFdPVwiQlVTSU5FU1NfTUFOQUdFUl9VSVwiLGVbZS5QUk9GSUxFX01BTkFHRVJfVUk9MTEyXT1cIlBST0ZJTEVfTUFOQUdFUl9VSVwiLGVbZS5OT1RJRklDQVRJT049MTEzXT1cIk5PVElGSUNBVElPTlwiLGVbZS5CSUxMQk9BUkQ9MTE0XT1cIkJJTExCT0FSRFwiLGVbZS5MRU5TX0RFTElWRVJZX0NPUkU9MTE1XT1cIkxFTlNfREVMSVZFUllfQ09SRVwiLGVbZS5USUVSXzBfTEFVTkNIPTExNl09XCJUSUVSXzBfTEFVTkNIXCIsZVtlLkZSSUVORElOR19SRUc9MTE3XT1cIkZSSUVORElOR19SRUdcIixlW2UuQ0FNRVJBX0tJVF9XRUJfQ09SRT0xMThdPVwiQ0FNRVJBX0tJVF9XRUJfQ09SRVwiLGVbZS5NRFBfT1BFUkFfQ09SRT0xMTldPVwiTURQX09QRVJBX0NPUkVcIixlW2UuU0hBUkVEX1dFQl9VST0xMjBdPVwiU0hBUkVEX1dFQl9VSVwiLGVbZS5DT0RFTEFCU19TQU5EQk9YPTEyMV09XCJDT0RFTEFCU19TQU5EQk9YXCIsZVtlLkZSSUVORElOR19RQV9SQU5LSU5HPTEyMl09XCJGUklFTkRJTkdfUUFfUkFOS0lOR1wiLGVbZS5GUklFTkRJTkdfUkVHX1JBTktJTkc9MTIzXT1cIkZSSUVORElOR19SRUdfUkFOS0lOR1wiLGVbZS5TRUFSQ0hfQ1NMPTEyNF09XCJTRUFSQ0hfQ1NMXCIsZVtlLldFQjM9MTI1XT1cIldFQjNcIixlW2UuUExVU19DT1JFPTEyNl09XCJQTFVTX0NPUkVcIixlW2UuV0VCX1NUT1JZVEVMTEVSX1VJPTEyN109XCJXRUJfU1RPUllURUxMRVJfVUlcIixlW2UuUExBVEZPUk1fU0VSVklDRVM9MTI4XT1cIlBMQVRGT1JNX1NFUlZJQ0VTXCIsZVtlLldFQl9BQ0NPVU5UUz0xMjldPVwiV0VCX0FDQ09VTlRTXCIsZVtlLlNIT1BLSVRfV0VCPTEzMF09XCJTSE9QS0lUX1dFQlwiLGVbZS5TTkFQR1JBUEhfTU9EU0VSVkVSPTEzMV09XCJTTkFQR1JBUEhfTU9EU0VSVkVSXCIsZVtlLk1VU0lDPTEzMl09XCJNVVNJQ1wiLGVbZS5TT1VORFM9MTMzXT1cIlNPVU5EU1wiLGVbZS5NQUNIQU1QPTEzNF09XCJNQUNIQU1QXCIsZVtlLlBJRV9BVVRPQk9UPTEzNV09XCJQSUVfQVVUT0JPVFwiLGVbZS5OT1RJRklDQVRJT05fUkFOS0lORz0xMzZdPVwiTk9USUZJQ0FUSU9OX1JBTktJTkdcIixlW2UuUElFX0NVUD0xMzddPVwiUElFX0NVUFwiLGVbZS5NRVNIX01BTkFHRURfREVQTE9ZTUVOVD0xMzhdPVwiTUVTSF9NQU5BR0VEX0RFUExPWU1FTlRcIixlW2UuQURfQ0xJRU5UPTEzOV09XCJBRF9DTElFTlRcIixlW2UuUElFX0FVVE9CT1RfUkVBQ1RJVkU9MTQwXT1cIlBJRV9BVVRPQk9UX1JFQUNUSVZFXCIsZVtlLkRZTkFNSUNfREVFUExJTktJTkc9MTQxXT1cIkRZTkFNSUNfREVFUExJTktJTkdcIixlW2UuU05BUENIQVRfV0VCX1VJPTE0Ml09XCJTTkFQQ0hBVF9XRUJfVUlcIixlW2UuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwifShwZXx8KHBlPXt9KSksYygpLnV0aWwuTG9uZyE9PWEoKSYmKGMoKS51dGlsLkxvbmc9YSgpLGMoKS5jb25maWd1cmUoKSk7Y29uc3QgaGU9bmV3IE1hcDtmdW5jdGlvbiB2ZShlLHQpe2hlLnNldChlLHQpfWZ1bmN0aW9uIGdlKGUsdCl7Y29uc3Qgbj1lLmZpbHRlcigoZT0+ZS5jb25maWdJZD09PXQpKSxyPW4uZmlsdGVyKChlPT4hZS50YXJnZXRpbmdFeHByZXNzaW9ufHxlLnRhcmdldGluZ0V4cHJlc3Npb24mJm1lKGUudGFyZ2V0aW5nRXhwcmVzc2lvbikpKSxpPVsuLi5uLmZpbHRlcigoZT0+ZS50YXJnZXRpbmdFeHByZXNzaW9uJiYhbWUoZS50YXJnZXRpbmdFeHByZXNzaW9uKSkpLmZpbHRlcigoZT0+eWUoZS50YXJnZXRpbmdFeHByZXNzaW9uKSkpLC4uLnJdLnNvcnQoKChlLHQpPT50LnByaW9yaXR5LWUucHJpb3JpdHkpKTtyZXR1cm4gaS5sZW5ndGg/aVswXTp2b2lkIDB9ZnVuY3Rpb24geWUoZSl7cmV0dXJuIGUuY2hpbGRyZW4ubGVuZ3RoPjA/ZS5vcGVyYXRvcj09PXEuQU5EP2UuY2hpbGRyZW4uZXZlcnkoKGU9PnllKGUpKSk6ZS5vcGVyYXRvcj09PXEuT1ImJmUuY2hpbGRyZW4uc29tZSgoZT0+eWUoZSkpKTpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGE7aWYoIWUucHJvcGVydHl8fCFlLnZhbHVlfHwhZS5wcmVkaWNhdGVPcGVyYXRvcnx8ZS5jaGlsZHJlbi5sZW5ndGg+MClyZXR1cm4hMTtjb25zdCBzPWhlLmdldChlLnByb3BlcnR5KTtpZighcylyZXR1cm4hMTtjb25zdCBjPXMoKSxsPW51bGwhPT0oYT1udWxsIT09KG89bnVsbCE9PShpPW51bGwhPT0ocj1udWxsIT09KG49bnVsbCE9PSh0PWUudmFsdWUuYm9vbFZhbHVlKSYmdm9pZCAwIT09dD90OmUudmFsdWUuZG91YmxlVmFsdWUpJiZ2b2lkIDAhPT1uP246ZS52YWx1ZS5mbG9hdFZhbHVlKSYmdm9pZCAwIT09cj9yOmUudmFsdWUuaW50UGFpclZhbHVlKSYmdm9pZCAwIT09aT9pOmUudmFsdWUuaW50VmFsdWUpJiZ2b2lkIDAhPT1vP286ZS52YWx1ZS5sb25nVmFsdWUpJiZ2b2lkIDAhPT1hP2E6ZS52YWx1ZS5zdHJpbmdWYWx1ZTtyZXR1cm4gZS5wcmVkaWNhdGVPcGVyYXRvcj09PVguR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPfHxlLnByZWRpY2F0ZU9wZXJhdG9yPT09WC5MRVNTX1RIQU5fT1JfRVFVQUxfVE8/XCJudW1iZXJcIj09dHlwZW9mIGwmJlwibnVtYmVyXCI9PXR5cGVvZiBjJiYoZS5wcmVkaWNhdGVPcGVyYXRvcj09PVguTEVTU19USEFOX09SX0VRVUFMX1RPP2M8PWw6Yz49bCk6ZS5wcmVkaWNhdGVPcGVyYXRvcj09PVguTk9UX0VRVUFMP2MhPT1sOmUucHJlZGljYXRlT3BlcmF0b3I9PT1YLkVRVUFMJiZjPT09bH0oZSl9dmFyIEVlPW4oNjk3NzUpLF9lPW4oODIwODQpO2NsYXNzIElle2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5ob3N0PWUsdGhpcy5vcHRpb25zPXR9dW5hcnkoZSx0LG4pe3ZhciByO2NvbnN0IGk9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLGUucmVxdWVzdFR5cGUpLG89biYmdGhpcy5vcHRpb25zLm1ldGFkYXRhP25ldyBfZS5Ccm93c2VySGVhZGVycyhPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbnVsbD09PShyPXRoaXMub3B0aW9ucyl8fHZvaWQgMD09PXI/dm9pZCAwOnIubWV0YWRhdGEpLG4pKTpufHx0aGlzLm9wdGlvbnMubWV0YWRhdGE7cmV0dXJuIG5ldyBQcm9taXNlKCgodCxuKT0+e0VlLmdycGMudW5hcnkoZSx7cmVxdWVzdDppLGhvc3Q6dGhpcy5ob3N0LG1ldGFkYXRhOm8sdHJhbnNwb3J0OnRoaXMub3B0aW9ucy50cmFuc3BvcnQsZGVidWc6dGhpcy5vcHRpb25zLmRlYnVnLG9uRW5kOmZ1bmN0aW9uKGUpe2lmKGUuc3RhdHVzPT09RWUuZ3JwYy5Db2RlLk9LKXQoZS5tZXNzYWdlKTtlbHNle2NvbnN0IHQ9bmV3IEVycm9yKGUuc3RhdHVzTWVzc2FnZSk7dC5jb2RlPWUuc3RhdHVzLHQubWV0YWRhdGE9ZS50cmFpbGVycyxuKHQpfX19KX0pKX19Y29uc3QgU2U9U3ltYm9sKFwiY29udGV4dCBrZXlcIiksYmU9e2hvc3Q6XCJodHRwczovL2F3cy5hcGkuc25hcGNoYXQuY29tXCJ9O2Z1bmN0aW9uIFRlKCl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93W1NlXX1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LFNlLHtlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwfSk7Y29uc3QgQ2U9e21ldGhvZE5hbWU6XCJ0YXJnZXRpbmdRdWVyeVwiLHNlcnZpY2U6e3NlcnZpY2VOYW1lOlwic25hcGNoYXQuY2RwLmNvZi5DaXJjdW1zdGFuY2VzU2VydmljZVwifSxyZXF1ZXN0U3RyZWFtOiExLHJlc3BvbnNlU3RyZWFtOiExLHJlcXVlc3RUeXBlOntzZXJpYWxpemVCaW5hcnkoKXtyZXR1cm4gUC5lbmNvZGUodGhpcykuZmluaXNoKCl9fSxyZXNwb25zZVR5cGU6e2Rlc2VyaWFsaXplQmluYXJ5OmU9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxmZS5kZWNvZGUoZSkpLHt0b09iamVjdCgpe3JldHVybiB0aGlzfX0pfX07dmFyIEFlLFJlLGtlLE9lLE5lLHdlLERlLFBlLE1lPSgoKT0+e2lmKHZvaWQgMCE9PU1lKXJldHVybiBNZTtpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZilyZXR1cm4gc2VsZjtpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93KXJldHVybiB3aW5kb3c7aWYodm9pZCAwIT09bi5nKXJldHVybiBuLmc7dGhyb3dcIlVuYWJsZSB0byBsb2NhdGUgZ2xvYmFsIG9iamVjdFwifSkoKTtjKCkudXRpbC5Mb25nIT09YSgpJiYoYygpLnV0aWwuTG9uZz1hKCksYygpLmNvbmZpZ3VyZSgpKSxmdW5jdGlvbihlKXtlW2UuVVNFUl9XSElURUxJU1RFRD0wXT1cIlVTRVJfV0hJVEVMSVNURURcIixlW2UuVVNFUl9HUk9VUF9XSElURUxJU1RFRD0xXT1cIlVTRVJfR1JPVVBfV0hJVEVMSVNURURcIixlW2UuRklMVEVSX0NPTkRJVElPTlM9Ml09XCJGSUxURVJfQ09ORElUSU9OU1wiLGVbZS5TTElDRV9SQU5HRT0zXT1cIlNMSUNFX1JBTkdFXCIsZVtlLlRSQUZGSUNfQUxMT0NBVEVEPTRdPVwiVFJBRkZJQ19BTExPQ0FURURcIixlW2UuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwifShBZXx8KEFlPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlZBTElEQVRFX1JFUVVFU1Q9MF09XCJWQUxJREFURV9SRVFVRVNUXCIsZVtlLlJFUVVFU1RfQVRMQVM9MV09XCJSRVFVRVNUX0FUTEFTXCIsZVtlLkJVSUxEX1RBUkdFVElOR19JTkZPPTJdPVwiQlVJTERfVEFSR0VUSU5HX0lORk9cIixlW2UuUVVFUllfSU5ERVg9M109XCJRVUVSWV9JTkRFWFwiLGVbZS5SRVFVRVNUX0FCPTRdPVwiUkVRVUVTVF9BQlwiLGVbZS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCJ9KFJlfHwoUmU9e30pKSxjKCkudXRpbC5Mb25nIT09YSgpJiYoYygpLnV0aWwuTG9uZz1hKCksYygpLmNvbmZpZ3VyZSgpKSxmdW5jdGlvbihlKXtlW2UuVFlQRV9ET1VCTEU9MV09XCJUWVBFX0RPVUJMRVwiLGVbZS5UWVBFX0ZMT0FUPTJdPVwiVFlQRV9GTE9BVFwiLGVbZS5UWVBFX0lOVDY0PTNdPVwiVFlQRV9JTlQ2NFwiLGVbZS5UWVBFX1VJTlQ2ND00XT1cIlRZUEVfVUlOVDY0XCIsZVtlLlRZUEVfSU5UMzI9NV09XCJUWVBFX0lOVDMyXCIsZVtlLlRZUEVfRklYRUQ2ND02XT1cIlRZUEVfRklYRUQ2NFwiLGVbZS5UWVBFX0ZJWEVEMzI9N109XCJUWVBFX0ZJWEVEMzJcIixlW2UuVFlQRV9CT09MPThdPVwiVFlQRV9CT09MXCIsZVtlLlRZUEVfU1RSSU5HPTldPVwiVFlQRV9TVFJJTkdcIixlW2UuVFlQRV9HUk9VUD0xMF09XCJUWVBFX0dST1VQXCIsZVtlLlRZUEVfTUVTU0FHRT0xMV09XCJUWVBFX01FU1NBR0VcIixlW2UuVFlQRV9CWVRFUz0xMl09XCJUWVBFX0JZVEVTXCIsZVtlLlRZUEVfVUlOVDMyPTEzXT1cIlRZUEVfVUlOVDMyXCIsZVtlLlRZUEVfRU5VTT0xNF09XCJUWVBFX0VOVU1cIixlW2UuVFlQRV9TRklYRUQzMj0xNV09XCJUWVBFX1NGSVhFRDMyXCIsZVtlLlRZUEVfU0ZJWEVENjQ9MTZdPVwiVFlQRV9TRklYRUQ2NFwiLGVbZS5UWVBFX1NJTlQzMj0xN109XCJUWVBFX1NJTlQzMlwiLGVbZS5UWVBFX1NJTlQ2ND0xOF09XCJUWVBFX1NJTlQ2NFwiLGVbZS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCJ9KGtlfHwoa2U9e30pKSxmdW5jdGlvbihlKXtlW2UuTEFCRUxfT1BUSU9OQUw9MV09XCJMQUJFTF9PUFRJT05BTFwiLGVbZS5MQUJFTF9SRVFVSVJFRD0yXT1cIkxBQkVMX1JFUVVJUkVEXCIsZVtlLkxBQkVMX1JFUEVBVEVEPTNdPVwiTEFCRUxfUkVQRUFURURcIixlW2UuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwifShPZXx8KE9lPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlNQRUVEPTFdPVwiU1BFRURcIixlW2UuQ09ERV9TSVpFPTJdPVwiQ09ERV9TSVpFXCIsZVtlLkxJVEVfUlVOVElNRT0zXT1cIkxJVEVfUlVOVElNRVwiLGVbZS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCJ9KE5lfHwoTmU9e30pKSxmdW5jdGlvbihlKXtlW2UuU1RSSU5HPTBdPVwiU1RSSU5HXCIsZVtlLkNPUkQ9MV09XCJDT1JEXCIsZVtlLlNUUklOR19QSUVDRT0yXT1cIlNUUklOR19QSUVDRVwiLGVbZS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCJ9KHdlfHwod2U9e30pKSxmdW5jdGlvbihlKXtlW2UuSlNfTk9STUFMPTBdPVwiSlNfTk9STUFMXCIsZVtlLkpTX1NUUklORz0xXT1cIkpTX1NUUklOR1wiLGVbZS5KU19OVU1CRVI9Ml09XCJKU19OVU1CRVJcIixlW2UuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwifShEZXx8KERlPXt9KSksZnVuY3Rpb24oZSl7ZVtlLklERU1QT1RFTkNZX1VOS05PV049MF09XCJJREVNUE9URU5DWV9VTktOT1dOXCIsZVtlLk5PX1NJREVfRUZGRUNUUz0xXT1cIk5PX1NJREVfRUZGRUNUU1wiLGVbZS5JREVNUE9URU5UPTJdPVwiSURFTVBPVEVOVFwiLGVbZS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCJ9KFBlfHwoUGU9e30pKTt2YXIgTGUsVWUseGUsRmUsQmUsVmUsR2UsSGUsV2U9KCgpPT57aWYodm9pZCAwIT09V2UpcmV0dXJuIFdlO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmKXJldHVybiBzZWxmO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvdztpZih2b2lkIDAhPT1uLmcpcmV0dXJuIG4uZzt0aHJvd1wiVW5hYmxlIHRvIGxvY2F0ZSBnbG9iYWwgb2JqZWN0XCJ9KSgpO2MoKS51dGlsLkxvbmchPT1hKCkmJihjKCkudXRpbC5Mb25nPWEoKSxjKCkuY29uZmlndXJlKCkpLGZ1bmN0aW9uKGUpe2VbZS5VTktOT1dOX1NOQVBfUFJPPTBdPVwiVU5LTk9XTl9TTkFQX1BST1wiLGVbZS5OT1RfU05BUF9QUk89MV09XCJOT1RfU05BUF9QUk9cIixlW2UuU1RBTkRBUkRfVElFUj0yXT1cIlNUQU5EQVJEX1RJRVJcIixlW2UuT0ZGSUNJQUxfVElFUj0zXT1cIk9GRklDSUFMX1RJRVJcIixlW2UuUFVCTElDX1RJRVI9NF09XCJQVUJMSUNfVElFUlwiLGVbZS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCJ9KExlfHwoTGU9e30pKSxmdW5jdGlvbihlKXtlW2UuVU5LTk9XTl9PUklHSU49MF09XCJVTktOT1dOX09SSUdJTlwiLGVbZS5TRVJWRVI9MV09XCJTRVJWRVJcIixlW2UuQ0xJRU5UPTJdPVwiQ0xJRU5UXCIsZVtlLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIn0oVWV8fChVZT17fSkpLGZ1bmN0aW9uKGUpe2VbZS5VTktOT1dOX1BMQVRGT1JNPTBdPVwiVU5LTk9XTl9QTEFURk9STVwiLGVbZS5TRVJWRVI9MV09XCJTRVJWRVJcIixlW2UuQ0xJRU5UPTJdPVwiQ0xJRU5UXCIsZVtlLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIn0oeGV8fCh4ZT17fSkpLGZ1bmN0aW9uKGUpe2VbZS5VTktOT1dOX1NUQVRVUz0wXT1cIlVOS05PV05fU1RBVFVTXCIsZVtlLkRFUExPWUVEPTFdPVwiREVQTE9ZRURcIixlW2UuQ09NUExFVEVEPTJdPVwiQ09NUExFVEVEXCIsZVtlLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIn0oRmV8fChGZT17fSkpLGZ1bmN0aW9uKGUpe2VbZS5VTktOT1dOX1NFR01FTlQ9MF09XCJVTktOT1dOX1NFR01FTlRcIixlW2UuU1RBTkRBUkRfU0VHTUVOVD0xXT1cIlNUQU5EQVJEX1NFR01FTlRcIixlW2UuQlVER0VUX1NFR01FTlQ9Ml09XCJCVURHRVRfU0VHTUVOVFwiLGVbZS5ST0xMT1VUX1NFR01FTlQ9M109XCJST0xMT1VUX1NFR01FTlRcIixlW2UuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwifShCZXx8KEJlPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlVOS05PV05fT1BFUkFUT1I9MF09XCJVTktOT1dOX09QRVJBVE9SXCIsZVtlLkFORD0xXT1cIkFORFwiLGVbZS5PUj0yXT1cIk9SXCIsZVtlLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIn0oVmV8fChWZT17fSkpLGZ1bmN0aW9uKGUpe2VbZS5VTktOT1dOX1BSRURJQ0FURV9PUEVSQVRPUj0wXT1cIlVOS05PV05fUFJFRElDQVRFX09QRVJBVE9SXCIsZVtlLkVRVUFMPTFdPVwiRVFVQUxcIixlW2UuTk9UX0VRVUFMPTJdPVwiTk9UX0VRVUFMXCIsZVtlLkdSRUFURVJfVEhBTl9PUl9FUVVBTF9UTz0zXT1cIkdSRUFURVJfVEhBTl9PUl9FUVVBTF9UT1wiLGVbZS5MRVNTX1RIQU5fT1JfRVFVQUxfVE89NF09XCJMRVNTX1RIQU5fT1JfRVFVQUxfVE9cIixlW2UuSU49NV09XCJJTlwiLGVbZS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCJ9KEdlfHwoR2U9e30pKSxmdW5jdGlvbihlKXtlW2UuVU5LTk9XTl9QUk9QRVJUWT0wXT1cIlVOS05PV05fUFJPUEVSVFlcIixlW2UuREVWSUNFX01PREVMPTFdPVwiREVWSUNFX01PREVMXCIsZVtlLkNPVU5UUlk9Ml09XCJDT1VOVFJZXCIsZVtlLk9TPTNdPVwiT1NcIixlW2UuT1NfVkVSU0lPTj00XT1cIk9TX1ZFUlNJT05cIixlW2UuQVBQX1ZFUlNJT049NV09XCJBUFBfVkVSU0lPTlwiLGVbZS5CVUlMRF9GTEFWT1I9Nl09XCJCVUlMRF9GTEFWT1JcIixlW2UuVVNFUl9JRD03XT1cIlVTRVJfSURcIixlW2UuTE9DQUxFPThdPVwiTE9DQUxFXCIsZVtlLklTX0NIQVJHSU5HPTldPVwiSVNfQ0hBUkdJTkdcIixlW2UuQkFUVEVSWV9MRVZFTD0xMF09XCJCQVRURVJZX0xFVkVMXCIsZVtlLkRFVklDRV9DTFVTVEVSPTExXT1cIkRFVklDRV9DTFVTVEVSXCIsZVtlLklTX09GRkxJTkU9MTJdPVwiSVNfT0ZGTElORVwiLGVbZS5CQU5EV0lEVEg9MTNdPVwiQkFORFdJRFRIXCIsZVtlLkRFVklDRV9CUkFORD0xNF09XCJERVZJQ0VfQlJBTkRcIixlW2UuSVNfRU1QTE9ZRUU9MTVdPVwiSVNfRU1QTE9ZRUVcIixlW2UuVVNFUk5BTUU9MTZdPVwiVVNFUk5BTUVcIixlW2UuSVNfVEVTVF9VU0VSPTE3XT1cIklTX1RFU1RfVVNFUlwiLGVbZS5VU0VSX1BST0ZJTEU9MThdPVwiVVNFUl9QUk9GSUxFXCIsZVtlLlNDUkVFTl9XSURUSD0xOV09XCJTQ1JFRU5fV0lEVEhcIixlW2UuU0NSRUVOX0hFSUdIVD0yMF09XCJTQ1JFRU5fSEVJR0hUXCIsZVtlLkhFVkNfU1VQUE9SVD0yMV09XCJIRVZDX1NVUFBPUlRcIixlW2UuRElTS19TSVpFPTIyXT1cIkRJU0tfU0laRVwiLGVbZS5ESVNLX0FWQUlMQUJMRT0yM109XCJESVNLX0FWQUlMQUJMRVwiLGVbZS5ORVRXT1JLX1RZUEU9MjRdPVwiTkVUV09SS19UWVBFXCIsZVtlLk1BWF9WSURFT19XSURUSD0yNV09XCJNQVhfVklERU9fV0lEVEhcIixlW2UuTUFYX1ZJREVPX0hFSUdIVD0yNl09XCJNQVhfVklERU9fSEVJR0hUXCIsZVtlLk1FRElBX1RZUEVfREVQUkVDQVRFRD0yN109XCJNRURJQV9UWVBFX0RFUFJFQ0FURURcIixlW2UuSVNfUFVCTElDX1NUT1JZPTI4XT1cIklTX1BVQkxJQ19TVE9SWVwiLGVbZS5JU19PRkZJQ0lBTF9TVE9SWT0yOV09XCJJU19PRkZJQ0lBTF9TVE9SWVwiLGVbZS5JU19ORVRXT1JLX01FVEVSRUQ9MzBdPVwiSVNfTkVUV09SS19NRVRFUkVEXCIsZVtlLklTX1JPQU1JTkc9MzFdPVwiSVNfUk9BTUlOR1wiLGVbZS5BUFBfRU5HQUdFTUVOVF9MRVZFTD0zMl09XCJBUFBfRU5HQUdFTUVOVF9MRVZFTFwiLGVbZS5DT01NVU5JQ0FUSU9OX0VOR0FHRU1FTlRfTEVWRUw9MzNdPVwiQ09NTVVOSUNBVElPTl9FTkdBR0VNRU5UX0xFVkVMXCIsZVtlLkZSSUVORF9TVE9SWV9FTkdBR0VNRU5UX0xFVkVMPTM0XT1cIkZSSUVORF9TVE9SWV9FTkdBR0VNRU5UX0xFVkVMXCIsZVtlLlBVQkxJQ19VU0VSX1NUT1JZX0VOR0FHRU1FTlRfTEVWRUw9MzVdPVwiUFVCTElDX1VTRVJfU1RPUllfRU5HQUdFTUVOVF9MRVZFTFwiLGVbZS5QVUJMSVNIRVJfU1RPUllfRU5HQUdFTUVOVF9MRVZFTD0zNl09XCJQVUJMSVNIRVJfU1RPUllfRU5HQUdFTUVOVF9MRVZFTFwiLGVbZS5MRU5TX0VOR0FHRU1FTlRfTEVWRUw9MzddPVwiTEVOU19FTkdBR0VNRU5UX0xFVkVMXCIsZVtlLkNBTUVSQV9DT05URVhUPTM4XT1cIkNBTUVSQV9DT05URVhUXCIsZVtlLkNBTUVSQV9ESVJFQ1RJT049MzldPVwiQ0FNRVJBX0RJUkVDVElPTlwiLGVbZS5DQU1FUkFfRkxBU0hfU1RBVEU9NDBdPVwiQ0FNRVJBX0ZMQVNIX1NUQVRFXCIsZVtlLkNBTUVSQV9BUEk9NDFdPVwiQ0FNRVJBX0FQSVwiLGVbZS5OT05fRlJJRU5EX1NUT1JZX0VOR0FHRU1FTlRfTEVWRUw9NDJdPVwiTk9OX0ZSSUVORF9TVE9SWV9FTkdBR0VNRU5UX0xFVkVMXCIsZVtlLkZPTExPV0VSX1NJWkVfTEVWRUw9NDNdPVwiRk9MTE9XRVJfU0laRV9MRVZFTFwiLGVbZS5MRUdBQ1lfTVVTSFJPT01fQ09OVEVOVF9UWVBFPTQ0XT1cIkxFR0FDWV9NVVNIUk9PTV9DT05URU5UX1RZUEVcIixlW2UuU05BUF9TT1VSQ0U9NDVdPVwiU05BUF9TT1VSQ0VcIixlW2UuVVBMT0FEX0JBTkRXSURUSD00Nl09XCJVUExPQURfQkFORFdJRFRIXCIsZVtlLkRBWVNfU0lOQ0VfQ1JFQVRJT049NDddPVwiREFZU19TSU5DRV9DUkVBVElPTlwiLGVbZS5DQU1FUkEyX0xFVkVMPTQ4XT1cIkNBTUVSQTJfTEVWRUxcIixlW2UuQ0FNRVJBX05JR0hUX01PREVfU1RBVEU9NDldPVwiQ0FNRVJBX05JR0hUX01PREVfU1RBVEVcIixlW2UuVVNFUl9QRVJTT05BPTUwXT1cIlVTRVJfUEVSU09OQVwiLGVbZS5VU0VSX0xBTkdVQUdFPTUxXT1cIlVTRVJfTEFOR1VBR0VcIixlW2UuVVNFUl9DUkVBVElPTl9USU1FPTUyXT1cIlVTRVJfQ1JFQVRJT05fVElNRVwiLGVbZS5WSURFT19EVVJBVElPTj01M109XCJWSURFT19EVVJBVElPTlwiLGVbZS5NT0JJTEVfTkVUV09SS19UWVBFPTU0XT1cIk1PQklMRV9ORVRXT1JLX1RZUEVcIixlW2UuQUdHUkVHQVRFRF9VU0VSX0JBTkRXSURUSD01NV09XCJBR0dSRUdBVEVEX1VTRVJfQkFORFdJRFRIXCIsZVtlLlJFQUxUSU1FX01PQklMRV9ORVRXT1JLX0dFTkVSQVRJT049NTZdPVwiUkVBTFRJTUVfTU9CSUxFX05FVFdPUktfR0VORVJBVElPTlwiLGVbZS5SRUFMVElNRV9ORVRXT1JLX1RZUEU9NTddPVwiUkVBTFRJTUVfTkVUV09SS19UWVBFXCIsZVtlLlJFQUxUSU1FX05FVFdPUktfSVNfTUVURVJFRD01OF09XCJSRUFMVElNRV9ORVRXT1JLX0lTX01FVEVSRURcIixlW2UuUkVBTFRJTUVfTkVUV09SS19JU19ST0FNSU5HPTU5XT1cIlJFQUxUSU1FX05FVFdPUktfSVNfUk9BTUlOR1wiLGVbZS5MRU5TX0NMVVNURVJfQklBU0VEPTYwXT1cIkxFTlNfQ0xVU1RFUl9CSUFTRURcIixlW2UuTEVOU19DTFVTVEVSX0xPRz02MV09XCJMRU5TX0NMVVNURVJfTE9HXCIsZVtlLkxFTlNfQ0xVU1RFUl9PUklHPTYyXT1cIkxFTlNfQ0xVU1RFUl9PUklHXCIsZVtlLkxFTlNfQ0xVU1RFUl9PUklHXzQ9NjNdPVwiTEVOU19DTFVTVEVSX09SSUdfNFwiLGVbZS5MRU5TX0NMVVNURVJfQklBU0VEX0xPRz02NF09XCJMRU5TX0NMVVNURVJfQklBU0VEX0xPR1wiLGVbZS5BUFBfTE9DQUxFPTY1XT1cIkFQUF9MT0NBTEVcIixlW2UuREVWSUNFX0NPTU1PTl9OQU1FPTY2XT1cIkRFVklDRV9DT01NT05fTkFNRVwiLGVbZS5QSUNUVVJFX01PREU9NjddPVwiUElDVFVSRV9NT0RFXCIsZVtlLlVTRVJfRlJJRU5EX0NPVU5UPTY4XT1cIlVTRVJfRlJJRU5EX0NPVU5UXCIsZVtlLkJPTFRfVVNFX0NBU0U9NjldPVwiQk9MVF9VU0VfQ0FTRVwiLGVbZS5MOTBfQ09VTlRSWT03MF09XCJMOTBfQ09VTlRSWVwiLGVbZS5TVFVCPTcxXT1cIlNUVUJcIixlW2UuSVNfVFJVRT03Ml09XCJJU19UUlVFXCIsZVtlLlNUT1JZX1BPU1RfUkFUSU89NzNdPVwiU1RPUllfUE9TVF9SQVRJT1wiLGVbZS5HRU5ERVI9NzRdPVwiR0VOREVSXCIsZVtlLklORkVSUkVEX0FHRV9CVUNLRVQ9NzVdPVwiSU5GRVJSRURfQUdFX0JVQ0tFVFwiLGVbZS5TVE9SSUVTPTc2XT1cIlNUT1JJRVNcIixlW2UuU0VORFM9NzddPVwiU0VORFNcIixlW2UuU05BUF9DUkVBVEVfTDc9NzhdPVwiU05BUF9DUkVBVEVfTDdcIixlW2UuU1RPUllfUE9TVF9MNz03OV09XCJTVE9SWV9QT1NUX0w3XCIsZVtlLkNPTU1VTklDQVRJT05fTDc9ODBdPVwiQ09NTVVOSUNBVElPTl9MN1wiLGVbZS5ERl9MNz04MV09XCJERl9MN1wiLGVbZS5BUFBfTDc9ODJdPVwiQVBQX0w3XCIsZVtlLkRBWVNfU0lOQ0VfQ1JFQVRJT05fQlVDS0VUPTgzXT1cIkRBWVNfU0lOQ0VfQ1JFQVRJT05fQlVDS0VUXCIsZVtlLkJJRElSRUNUSU9OQUxfRlJJRU5EX1NUQVRVUz04NF09XCJCSURJUkVDVElPTkFMX0ZSSUVORF9TVEFUVVNcIixlW2UuU1RPUllfUE9TVF9QUkVESUNUSU9OPTg1XT1cIlNUT1JZX1BPU1RfUFJFRElDVElPTlwiLGVbZS5CT0xUX0NETl9FWFBFUklNRU5UQVRJT05fSUQ9ODZdPVwiQk9MVF9DRE5fRVhQRVJJTUVOVEFUSU9OX0lEXCIsZVtlLk1JTlNfU0lOQ0VfTEFTVF9MRU5TX0FDVElWQVRJT049ODddPVwiTUlOU19TSU5DRV9MQVNUX0xFTlNfQUNUSVZBVElPTlwiLGVbZS5BUFBfT1BFTlM9ODhdPVwiQVBQX09QRU5TXCIsZVtlLkxFTlNfU1dJUEVTPTg5XT1cIkxFTlNfU1dJUEVTXCIsZVtlLkxFTlNfU05BUFM9OTBdPVwiTEVOU19TTkFQU1wiLGVbZS5MRU5TX09QUz05MV09XCJMRU5TX09QU1wiLGVbZS5XMV9BUFBfT1BFTlM9OTJdPVwiVzFfQVBQX09QRU5TXCIsZVtlLlcxX0xFTlNfU1dJUEVTPTkzXT1cIlcxX0xFTlNfU1dJUEVTXCIsZVtlLlcxX0xFTlNfU05BUFM9OTRdPVwiVzFfTEVOU19TTkFQU1wiLGVbZS5XMV9MRU5TX09QUz05NV09XCJXMV9MRU5TX09QU1wiLGVbZS5XMl9BUFBfT1BFTlM9OTZdPVwiVzJfQVBQX09QRU5TXCIsZVtlLlcyX0xFTlNfU1dJUEVTPTk3XT1cIlcyX0xFTlNfU1dJUEVTXCIsZVtlLlcyX0xFTlNfU05BUFM9OThdPVwiVzJfTEVOU19TTkFQU1wiLGVbZS5XMl9MRU5TX09QUz05OV09XCJXMl9MRU5TX09QU1wiLGVbZS5XMzRfQVBQX09QRU5TPTEwMF09XCJXMzRfQVBQX09QRU5TXCIsZVtlLlczNF9MRU5TX1NXSVBFUz0xMDFdPVwiVzM0X0xFTlNfU1dJUEVTXCIsZVtlLlczNF9MRU5TX1NOQVBTPTEwMl09XCJXMzRfTEVOU19TTkFQU1wiLGVbZS5XMzRfTEVOU19PUFM9MTAzXT1cIlczNF9MRU5TX09QU1wiLGVbZS5MRU5TX1NXSVBFU19QUkVESUNUSU9OPTEwNF09XCJMRU5TX1NXSVBFU19QUkVESUNUSU9OXCIsZVtlLlJFR0lTVFJBVElPTl9DT1VOVFJZPTEwNV09XCJSRUdJU1RSQVRJT05fQ09VTlRSWVwiLGVbZS5JUF9BU049MTA2XT1cIklQX0FTTlwiLGVbZS5JUF9SRUdJT049MTA3XT1cIklQX1JFR0lPTlwiLGVbZS5JUF9DSVRZPTEwOF09XCJJUF9DSVRZXCIsZVtlLkhBU19VU0VSX0lEPTEwOV09XCJIQVNfVVNFUl9JRFwiLGVbZS5IQVNfQklUTU9KST0xMTBdPVwiSEFTX0JJVE1PSklcIixlW2UuTlVNX0FQUF9PUEVOU19MQVNUXzhfREFZUz0xMTFdPVwiTlVNX0FQUF9PUEVOU19MQVNUXzhfREFZU1wiLGVbZS5NSU5TX1NJTkNFX0xBU1RfU05BUFBBQkxFX0xFTlNfQUNUSVZBVElPTj0xMTJdPVwiTUlOU19TSU5DRV9MQVNUX1NOQVBQQUJMRV9MRU5TX0FDVElWQVRJT05cIixlW2UuTlVNX0ZFQVRVUkVfU1RPUllfVklFV19EQVlTX0w3PTExM109XCJOVU1fRkVBVFVSRV9TVE9SWV9WSUVXX0RBWVNfTDdcIixlW2UuTlVNX0ZFQVRVUkVfU1RPUllfU1lOQ19EQVlTX0w3PTExNF09XCJOVU1fRkVBVFVSRV9TVE9SWV9TWU5DX0RBWVNfTDdcIixlW2UuSEVYQUdPTl9OTl9TVVBQT1JURURfVkVSU0lPTj0xMTVdPVwiSEVYQUdPTl9OTl9TVVBQT1JURURfVkVSU0lPTlwiLGVbZS5EQVlTX1NJTkNFX0xBU1RfTE9HSU5fT1JfT1BFTj0xMTZdPVwiREFZU19TSU5DRV9MQVNUX0xPR0lOX09SX09QRU5cIixlW2UuU1BFQ1RBQ0xFU19WRVJTSU9OPTExN109XCJTUEVDVEFDTEVTX1ZFUlNJT05cIixlW2UuTkVUV09SS19RVUFMSVRZPTExOF09XCJORVRXT1JLX1FVQUxJVFlcIixlW2UuREVWSUNFX01FTU9SWV9NQj0xMTldPVwiREVWSUNFX01FTU9SWV9NQlwiLGVbZS5ERVZJQ0VfR0xfVkVSU0lPTj0xMjBdPVwiREVWSUNFX0dMX1ZFUlNJT05cIixlW2UuU05BUF9QUk9fU1RBVFVTPTEyMV09XCJTTkFQX1BST19TVEFUVVNcIixlW2UuREVWSUNFX1ZQOV9ERUNPRElOR19TVVBQT1JUPTEyMl09XCJERVZJQ0VfVlA5X0RFQ09ESU5HX1NVUFBPUlRcIixlW2UuQVZHX0ZSSUVORF9TVE9SWV9WSUVXX0NPVU5UX0w3PTEyM109XCJBVkdfRlJJRU5EX1NUT1JZX1ZJRVdfQ09VTlRfTDdcIixlW2UuR0FNRV9KT0lOX1RJTUU9MTI0XT1cIkdBTUVfSk9JTl9USU1FXCIsZVtlLkdBTUVfTEFTVF9BQ1RJVkVfVElNRT0xMjVdPVwiR0FNRV9MQVNUX0FDVElWRV9USU1FXCIsZVtlLkRBWVNfU0lOQ0VfRklSU1RfR0FNRV9BQ1RJVklUWT0xMjZdPVwiREFZU19TSU5DRV9GSVJTVF9HQU1FX0FDVElWSVRZXCIsZVtlLkRBWVNfU0lOQ0VfTEFTVF9HQU1FX0FDVElWSVRZPTEyN109XCJEQVlTX1NJTkNFX0xBU1RfR0FNRV9BQ1RJVklUWVwiLGVbZS5QRl9QQUdFX1NFU1NJT05TX1dJVEhfTE9OR19JTVA9MTI4XT1cIlBGX1BBR0VfU0VTU0lPTlNfV0lUSF9MT05HX0lNUFwiLGVbZS5TVElDS1lfTUFYX0NPTk5FQ1RJT05fVFlQRT0xMjldPVwiU1RJQ0tZX01BWF9DT05ORUNUSU9OX1RZUEVcIixlW2UuV0lSRUxFU1NfQ0FSUklFUj0xMzBdPVwiV0lSRUxFU1NfQ0FSUklFUlwiLGVbZS5XSVRIX0FOSU1BVEVEX09WRVJMQVk9MTMxXT1cIldJVEhfQU5JTUFURURfT1ZFUkxBWVwiLGVbZS5NSU5JU19KT0lOX1RJTUU9MTMyXT1cIk1JTklTX0pPSU5fVElNRVwiLGVbZS5NSU5JU19MQVNUX0FDVElWRV9USU1FPTEzM109XCJNSU5JU19MQVNUX0FDVElWRV9USU1FXCIsZVtlLkRBWVNfU0lOQ0VfRklSU1RfTUlOSVNfQUNUSVZJVFk9MTM0XT1cIkRBWVNfU0lOQ0VfRklSU1RfTUlOSVNfQUNUSVZJVFlcIixlW2UuREFZU19TSU5DRV9MQVNUX01JTklTX0FDVElWSVRZPTEzNV09XCJEQVlTX1NJTkNFX0xBU1RfTUlOSVNfQUNUSVZJVFlcIixlW2UuREVWSUNFX0FWMV9ERUNPRElOR19TVVBQT1JUPTEzNl09XCJERVZJQ0VfQVYxX0RFQ09ESU5HX1NVUFBPUlRcIixlW2UuQVBQX1BBQ0tBR0VfSU5TVEFMTEVSPTEzN109XCJBUFBfUEFDS0FHRV9JTlNUQUxMRVJcIixlW2UuVVJMPTEzOF09XCJVUkxcIixlW2UuRVNUSU1BVEVEX0RVUkFUSU9OX0ZPUl9FVkVOVF9NUz0xMzldPVwiRVNUSU1BVEVEX0RVUkFUSU9OX0ZPUl9FVkVOVF9NU1wiLGVbZS5NRURJQV9TT1VSQ0U9MTQwXT1cIk1FRElBX1NPVVJDRVwiLGVbZS5BU1NFVF9UWVBFPTE0MV09XCJBU1NFVF9UWVBFXCIsZVtlLlNUT1JZX1ZJRVdTXzVUSF9UQUJfRU5HQUdFTUVOVF9MRVZFTD0xNDJdPVwiU1RPUllfVklFV1NfNVRIX1RBQl9FTkdBR0VNRU5UX0xFVkVMXCIsZVtlLlJFUE9SVEVEX0FHRT0xNDNdPVwiUkVQT1JURURfQUdFXCIsZVtlLkFORFJPSURfTU9CSUxFX1NFUlZJQ0VTX1BST1ZJREVSPTE0NF09XCJBTkRST0lEX01PQklMRV9TRVJWSUNFU19QUk9WSURFUlwiLGVbZS5JU19BQ1FVSVJFRF9VU0VSPTE0NV09XCJJU19BQ1FVSVJFRF9VU0VSXCIsZVtlLllEUEk9MTQ2XT1cIllEUElcIixlW2UuQk9MVF9JU19DT05URU5UX1BPUFVMQVI9MTQ3XT1cIkJPTFRfSVNfQ09OVEVOVF9QT1BVTEFSXCIsZVtlLkNBUFRVUkVfTU9ERT0xNDhdPVwiQ0FQVFVSRV9NT0RFXCIsZVtlLkJJRElSRUNUSU9OQUxfRlJJRU5EX1NUQVRVU19WRUxMVU09MTQ5XT1cIkJJRElSRUNUSU9OQUxfRlJJRU5EX1NUQVRVU19WRUxMVU1cIixlW2UuT1JJR0lOPTE1MF09XCJPUklHSU5cIixlW2UuTEVOU0NPUkVfVkVSU0lPTj0xNTFdPVwiTEVOU0NPUkVfVkVSU0lPTlwiLGVbZS5TTkFQS0lUX0FQUF9JRD0xNTJdPVwiU05BUEtJVF9BUFBfSURcIixlW2UuR1BVPTE1M109XCJHUFVcIixlW2UuQ0hJUFNFVF9OQU1FPTE1NF09XCJDSElQU0VUX05BTUVcIixlW2UuQ0hJUFNFVF9WRVJTSU9OPTE1NV09XCJDSElQU0VUX1ZFUlNJT05cIixlW2UuSEFTX1pFUk9fSURGQT0xNTZdPVwiSEFTX1pFUk9fSURGQVwiLGVbZS5MSU1JVF9BRF9UUkFDS0lORz0xNTddPVwiTElNSVRfQURfVFJBQ0tJTkdcIixlW2UuQVRUX0FVVEhfU1RBVFVTPTE1OF09XCJBVFRfQVVUSF9TVEFUVVNcIixlW2UuVlA5X1NPRlRXQVJFX0RFQ09ESU5HX1NVUFBPUlRFRD0xNTldPVwiVlA5X1NPRlRXQVJFX0RFQ09ESU5HX1NVUFBPUlRFRFwiLGVbZS5BVjFfU09GVFdBUkVfREVDT0RJTkdfU1VQUE9SVEVEPTE2MF09XCJBVjFfU09GVFdBUkVfREVDT0RJTkdfU1VQUE9SVEVEXCIsZVtlLldJVEhfTVVTSUM9MTYxXT1cIldJVEhfTVVTSUNcIixlW2UuQ0FNRVJBMl9GUk9OVF9TU19HQUlOX09WRVJfVFBBPTE2Ml09XCJDQU1FUkEyX0ZST05UX1NTX0dBSU5fT1ZFUl9UUEFcIixlW2UuQVRUQUNITUVOVF9UT09MX1YyPTE2M109XCJBVFRBQ0hNRU5UX1RPT0xfVjJcIixlW2UuTUVESUFfVFlQRT0xNjRdPVwiTUVESUFfVFlQRVwiLGVbZS5VU0VSX1BFUlNPTkFfVjM9MTY1XT1cIlVTRVJfUEVSU09OQV9WM1wiLGVbZS5GRUFUVVJFX1BST1ZJREVEX1NJWkU9MTY2XT1cIkZFQVRVUkVfUFJPVklERURfU0laRVwiLGVbZS5TTkFQU19TRU5EX1dJVEhfSEVWQz0xNjddPVwiU05BUFNfU0VORF9XSVRIX0hFVkNcIixlW2UuU05BUFNfU0VORF9XSVRIT1VUX0hFVkM9MTY4XT1cIlNOQVBTX1NFTkRfV0lUSE9VVF9IRVZDXCIsZVtlLkNBTUVSQTJfTkFUSVZFX0NSQVNIX09WRVJfQ0FNRVJBMT0xNjldPVwiQ0FNRVJBMl9OQVRJVkVfQ1JBU0hfT1ZFUl9DQU1FUkExXCIsZVtlLkNBTUVSQTJfRzJTX0xBVEVOQ1lfT1ZFUl9DQU1FUkExPTE3MF09XCJDQU1FUkEyX0cyU19MQVRFTkNZX09WRVJfQ0FNRVJBMVwiLGVbZS5TQ0FOTkVEX0NBVEVHT1JZX0lEUz0xNzFdPVwiU0NBTk5FRF9DQVRFR09SWV9JRFNcIixlW2UuQ09OVEVOVF9WSUVXX1NPVVJDRT0xNzJdPVwiQ09OVEVOVF9WSUVXX1NPVVJDRVwiLGVbZS5JU19JTlRFUk5BTD0xNzNdPVwiSVNfSU5URVJOQUxcIixlW2UuSVNfV0VCPTE3NF09XCJJU19XRUJcIixlW2UuUkVDSVBJRU5UU19TVVBQT1JUX0hFVkM9MTc1XT1cIlJFQ0lQSUVOVFNfU1VQUE9SVF9IRVZDXCIsZVtlLkFQUF9PUEVOX1RPX01BUD0xNzZdPVwiQVBQX09QRU5fVE9fTUFQXCIsZVtlLkFQUF9PUEVOX1RPX0ZSSUVORFNGRUVEPTE3N109XCJBUFBfT1BFTl9UT19GUklFTkRTRkVFRFwiLGVbZS5BUFBfT1BFTl9UT19MRU5TRVM9MTc4XT1cIkFQUF9PUEVOX1RPX0xFTlNFU1wiLGVbZS5BUFBfT1BFTl9UT19NRU1PUklFUz0xNzldPVwiQVBQX09QRU5fVE9fTUVNT1JJRVNcIixlW2UuQVBQX09QRU5fVE9fQ09NTVVOSVRZPTE4MF09XCJBUFBfT1BFTl9UT19DT01NVU5JVFlcIixlW2UuQVBQX09QRU5fVE9fU1BPVExJR0hUPTE4MV09XCJBUFBfT1BFTl9UT19TUE9UTElHSFRcIixlW2UuSVNfSU1QQUNURURfQllfUElOQ184OTM9MTgyXT1cIklTX0lNUEFDVEVEX0JZX1BJTkNfODkzXCIsZVtlLkRBWVNfQkVGT1JFX0JJUlRIREFZPTE4M109XCJEQVlTX0JFRk9SRV9CSVJUSERBWVwiLGVbZS5IQVNfQklQQT0xODRdPVwiSEFTX0JJUEFcIixlW2UuRU1BSUxfVkVSSUZJRUQ9MTg1XT1cIkVNQUlMX1ZFUklGSUVEXCIsZVtlLlBIT05FX1ZFUklGSUVEPTE4Nl09XCJQSE9ORV9WRVJJRklFRFwiLGVbZS5OT1RJRklDQVRJT05fUEVSTV9HUkFOVEVEPTE4N109XCJOT1RJRklDQVRJT05fUEVSTV9HUkFOVEVEXCIsZVtlLkNPTlRBQ1RfUEVSTV9HUkFOVEVEPTE4OF09XCJDT05UQUNUX1BFUk1fR1JBTlRFRFwiLGVbZS5NVVRVQUxfRlJJRU5EU19DT1VOVD0xODldPVwiTVVUVUFMX0ZSSUVORFNfQ09VTlRcIixlW2UuR1JPVVBTX0NPVU5UPTE5MF09XCJHUk9VUFNfQ09VTlRcIixlW2UuU1BPVExJR0hUX1NUT1JZX0VOR0FHRU1FTlRfU1RBVFVTPTE5MV09XCJTUE9UTElHSFRfU1RPUllfRU5HQUdFTUVOVF9TVEFUVVNcIixlW2UuSEFTX05PTl9URUFNX1NOQVBDSEFUX0NPTlZFUlNBVElPTlM9MTkyXT1cIkhBU19OT05fVEVBTV9TTkFQQ0hBVF9DT05WRVJTQVRJT05TXCIsZVtlLkNPR05BQ19BUFBfSUQ9MTkzXT1cIkNPR05BQ19BUFBfSURcIixlW2UuUExBWUJBQ0tfSVRFTV9UWVBFPTE5NF09XCJQTEFZQkFDS19JVEVNX1RZUEVcIixlW2UuU1VQX0lTX0JJUlRIREFZX1BBUlRZX0VOQUJMRUQ9MTk1XT1cIlNVUF9JU19CSVJUSERBWV9QQVJUWV9FTkFCTEVEXCIsZVtlLlNVUF9GSFBfTEFTVF9JTlRFUkFDVElPTl9USU1FX01JTExJU19UT19OT1c9MTk2XT1cIlNVUF9GSFBfTEFTVF9JTlRFUkFDVElPTl9USU1FX01JTExJU19UT19OT1dcIixlW2UuU1VQX0ZIUF9DT05UQUNUX1NZTkNfSU5URVJBQ1RJT05fQ09VTlQ9MTk3XT1cIlNVUF9GSFBfQ09OVEFDVF9TWU5DX0lOVEVSQUNUSU9OX0NPVU5UXCIsZVtlLlNVUF9GSFBfQ09OVEFDVF9TWU5DX0xBU1RfU0hPV05fVElNRV9NSUxMSVNfVE9fTk9XPTE5OF09XCJTVVBfRkhQX0NPTlRBQ1RfU1lOQ19MQVNUX1NIT1dOX1RJTUVfTUlMTElTX1RPX05PV1wiLGVbZS5TVVBfRkhQX05PVElGSUNBVElPTl9QRVJNSVNTSU9OX0lOVEVSQUNUSU9OX0NPVU5UPTE5OV09XCJTVVBfRkhQX05PVElGSUNBVElPTl9QRVJNSVNTSU9OX0lOVEVSQUNUSU9OX0NPVU5UXCIsZVtlLlNVUF9GSFBfTk9USUZJQ0FUSU9OX1BFUk1JU1NJT05fTEFTVF9TSE9XTl9USU1FX01JTExJU19UT19OT1c9MjAwXT1cIlNVUF9GSFBfTk9USUZJQ0FUSU9OX1BFUk1JU1NJT05fTEFTVF9TSE9XTl9USU1FX01JTExJU19UT19OT1dcIixlW2UuU1VQX0ZIUF9QSE9ORV9WRVJJRklDQVRJT05fSU5URVJBQ1RJT05fQ09VTlQ9MjAxXT1cIlNVUF9GSFBfUEhPTkVfVkVSSUZJQ0FUSU9OX0lOVEVSQUNUSU9OX0NPVU5UXCIsZVtlLlNVUF9GSFBfUEhPTkVfVkVSSUZJQ0FUSU9OX0xBU1RfU0hPV05fVElNRV9NSUxMSVNfVE9fTk9XPTIwMl09XCJTVVBfRkhQX1BIT05FX1ZFUklGSUNBVElPTl9MQVNUX1NIT1dOX1RJTUVfTUlMTElTX1RPX05PV1wiLGVbZS5TVVBfRkhQX0JJUlRIREFZX1BBUlRZX0lOVEVSQUNUSU9OX0NPVU5UPTIwM109XCJTVVBfRkhQX0JJUlRIREFZX1BBUlRZX0lOVEVSQUNUSU9OX0NPVU5UXCIsZVtlLlNVUF9GSFBfQklSVEhEQVlfUEFSVFlfTEFTVF9TSE9XTl9USU1FX01JTExJU19UT19OT1c9MjA0XT1cIlNVUF9GSFBfQklSVEhEQVlfUEFSVFlfTEFTVF9TSE9XTl9USU1FX01JTExJU19UT19OT1dcIixlW2UuU1VQX0ZIUF9FTUFJTF9WRVJJRklDQVRJT05fSU5URVJBQ1RJT05fQ09VTlQ9MjA1XT1cIlNVUF9GSFBfRU1BSUxfVkVSSUZJQ0FUSU9OX0lOVEVSQUNUSU9OX0NPVU5UXCIsZVtlLlNVUF9GSFBfRU1BSUxfVkVSSUZJQ0FUSU9OX0xBU1RfU0hPV05fVElNRV9NSUxMSVNfVE9fTk9XPTIwNl09XCJTVVBfRkhQX0VNQUlMX1ZFUklGSUNBVElPTl9MQVNUX1NIT1dOX1RJTUVfTUlMTElTX1RPX05PV1wiLGVbZS5IQVNfVVNFRF9TUEVDVEFDTEVTPTIwN109XCJIQVNfVVNFRF9TUEVDVEFDTEVTXCIsZVtlLkJPTFRfQ0xJRU5UX0FQUF9TVEFURT0yMDhdPVwiQk9MVF9DTElFTlRfQVBQX1NUQVRFXCIsZVtlLkVNQUlMX1NFVD0yMDldPVwiRU1BSUxfU0VUXCIsZVtlLkJJVE1PSklfU0VUPTIxMF09XCJCSVRNT0pJX1NFVFwiLGVbZS5RVUlDS19UQVBfQ0FNRVJBX1NVUFBPUlRFRF9FTkFCTEVEPTIxMV09XCJRVUlDS19UQVBfQ0FNRVJBX1NVUFBPUlRFRF9FTkFCTEVEXCIsZVtlLkhBU19BRERfRlJJRU5EU19SRVFVRVNUPTIxMl09XCJIQVNfQUREX0ZSSUVORFNfUkVRVUVTVFwiLGVbZS5BUFBfTEFVTkNIX0ZST01fUFVTSD0yMTNdPVwiQVBQX0xBVU5DSF9GUk9NX1BVU0hcIixlW2UuQVBQX0xBVU5DSF9UWVBFPTIxNF09XCJBUFBfTEFVTkNIX1RZUEVcIixlW2UuQklMTEJPQVJEX0NBTVBBSUdOX0xPQ0FMX0lNUFJFU1NJT05fQ09VTlQ9MjE1XT1cIkJJTExCT0FSRF9DQU1QQUlHTl9MT0NBTF9JTVBSRVNTSU9OX0NPVU5UXCIsZVtlLkJJTExCT0FSRF9DQU1QQUlHTl9MT0NBTF9MQVNUX0lNUFJFU1NJT05fVElNRV9TRUNTX1RPX05PVz0yMTZdPVwiQklMTEJPQVJEX0NBTVBBSUdOX0xPQ0FMX0xBU1RfSU1QUkVTU0lPTl9USU1FX1NFQ1NfVE9fTk9XXCIsZVtlLkJJTExCT0FSRF9DQU1QQUlHTl9MT0NBTF9DT05USU5VT1VTX0RJU01JU1NfQ09VTlQ9MjE3XT1cIkJJTExCT0FSRF9DQU1QQUlHTl9MT0NBTF9DT05USU5VT1VTX0RJU01JU1NfQ09VTlRcIixlW2UuRlNUX05VTV9JTl9BUFBfV0FSTklOR1M9MjE4XT1cIkZTVF9OVU1fSU5fQVBQX1dBUk5JTkdTXCIsZVtlLkZTVF9TSE9VTERfQ0hBTkdFX1BBU1NXT1JEPTIxOV09XCJGU1RfU0hPVUxEX0NIQU5HRV9QQVNTV09SRFwiLGVbZS5GU1RfSVNfQkFDS0dST1VORF9DSEVDSz0yMjBdPVwiRlNUX0lTX0JBQ0tHUk9VTkRfQ0hFQ0tcIixlW2UuU1VQX0ZTVF9JREVOVElUWV9WRVJJRklDQVRJT05fSU1QUkVTU0lPTl9DT1VOVD0yMjFdPVwiU1VQX0ZTVF9JREVOVElUWV9WRVJJRklDQVRJT05fSU1QUkVTU0lPTl9DT1VOVFwiLGVbZS5TVVBfRlNUX0lERU5USVRZX1ZFUklGSUNBVElPTl9MQVNUX0lNUFJFU1NJT05fVElNRV9TRUNTX1RPX05PVz0yMjJdPVwiU1VQX0ZTVF9JREVOVElUWV9WRVJJRklDQVRJT05fTEFTVF9JTVBSRVNTSU9OX1RJTUVfU0VDU19UT19OT1dcIixlW2UuU1VQX0ZTVF9GUklFTkRfQUREX0xBU1RfSU1QUkVTU0lPTl9USU1FX1NFQ1NfVE9fTk9XPTIyM109XCJTVVBfRlNUX0ZSSUVORF9BRERfTEFTVF9JTVBSRVNTSU9OX1RJTUVfU0VDU19UT19OT1dcIixlW2UuU1VQX0ZTVF9DT05UQUNUX1NZTkNfSU1QUkVTU0lPTl9DT1VOVD0yMjRdPVwiU1VQX0ZTVF9DT05UQUNUX1NZTkNfSU1QUkVTU0lPTl9DT1VOVFwiLGVbZS5TVVBfRlNUX0NPTlRBQ1RfU1lOQ19MQVNUX0lNUFJFU1NJT05fVElNRV9TRUNTX1RPX05PVz0yMjVdPVwiU1VQX0ZTVF9DT05UQUNUX1NZTkNfTEFTVF9JTVBSRVNTSU9OX1RJTUVfU0VDU19UT19OT1dcIixlW2UuU1VQX0ZTVF9CSVRNT0pJX0NSRUFUSU9OX0lNUFJFU1NJT05fQ09VTlQ9MjI2XT1cIlNVUF9GU1RfQklUTU9KSV9DUkVBVElPTl9JTVBSRVNTSU9OX0NPVU5UXCIsZVtlLlNVUF9GU1RfQklUTU9KSV9DUkVBVElPTl9MQVNUX0lNUFJFU1NJT05fVElNRV9TRUNTX1RPX05PVz0yMjddPVwiU1VQX0ZTVF9CSVRNT0pJX0NSRUFUSU9OX0xBU1RfSU1QUkVTU0lPTl9USU1FX1NFQ1NfVE9fTk9XXCIsZVtlLlNVUF9GU1RfVVNFUl9SRUFDSEFCSUxJVFlfTEFTVF9JTVBSRVNTSU9OX1RJTUVfU0VDU19UT19OT1c9MjI4XT1cIlNVUF9GU1RfVVNFUl9SRUFDSEFCSUxJVFlfTEFTVF9JTVBSRVNTSU9OX1RJTUVfU0VDU19UT19OT1dcIixlW2UuU1VQX0ZTVF9CSVBBX0hBU19DTElDS0VEPTIyOV09XCJTVVBfRlNUX0JJUEFfSEFTX0NMSUNLRURcIixlW2UuSU5DTFVTSU9OX1BBTkVMX01FTUJFUj0yMzBdPVwiSU5DTFVTSU9OX1BBTkVMX01FTUJFUlwiLGVbZS5BVURJT19SRUNPUkRfUEVSTV9HUkFOVEVEPTIzMV09XCJBVURJT19SRUNPUkRfUEVSTV9HUkFOVEVEXCIsZVtlLk1VVFVBTF9GUklFTkRTX1dJVEhfQklSVEhEQVlfQ09VTlQ9MjMyXT1cIk1VVFVBTF9GUklFTkRTX1dJVEhfQklSVEhEQVlfQ09VTlRcIixlW2UuQklMTEJPQVJEX0NBTVBBSUdOX0xPQ0FMX0RJU01JU1NfQ09VTlQ9MjMzXT1cIkJJTExCT0FSRF9DQU1QQUlHTl9MT0NBTF9ESVNNSVNTX0NPVU5UXCIsZVtlLlNVUF9QQUNfUEhPTkVfVkVSSUZJQ0FUSU9OX0RJU01JU1NfQ09VTlQ9MjM0XT1cIlNVUF9QQUNfUEhPTkVfVkVSSUZJQ0FUSU9OX0RJU01JU1NfQ09VTlRcIixlW2UuU1VQX1BBQ19CSVJUSERBWV9NSU5JX0lNUFJFU1NJT05fQ09VTlQ9MjM1XT1cIlNVUF9QQUNfQklSVEhEQVlfTUlOSV9JTVBSRVNTSU9OX0NPVU5UXCIsZVtlLlNVUF9QQUNfQklSVEhEQVlfTUlOSV9ESVNNSVNTX0NPVU5UPTIzNl09XCJTVVBfUEFDX0JJUlRIREFZX01JTklfRElTTUlTU19DT1VOVFwiLGVbZS5TVVBfUEFDX1JVTl9GT1JfT0ZGSUNFX01JTklfSU1QUkVTU0lPTl9DT1VOVD0yMzddPVwiU1VQX1BBQ19SVU5fRk9SX09GRklDRV9NSU5JX0lNUFJFU1NJT05fQ09VTlRcIixlW2UuU1VQX1BBQ19SVU5fRk9SX09GRklDRV9NSU5JX0RJU01JU1NfQ09VTlQ9MjM4XT1cIlNVUF9QQUNfUlVOX0ZPUl9PRkZJQ0VfTUlOSV9ESVNNSVNTX0NPVU5UXCIsZVtlLlNVUF9QQUNfRlJJRU5EX0NIRUNLVVBfTEFTVF9TSE9XTl9USU1FX01JTExJU19UT19OT1c9MjM5XT1cIlNVUF9QQUNfRlJJRU5EX0NIRUNLVVBfTEFTVF9TSE9XTl9USU1FX01JTExJU19UT19OT1dcIixlW2UuU1VQX1BBQ19GUklFTkRfQ0hFQ0tVUF9JTVBSRVNTSU9OX0NPVU5UPTI0MF09XCJTVVBfUEFDX0ZSSUVORF9DSEVDS1VQX0lNUFJFU1NJT05fQ09VTlRcIixlW2UuU1VQX1BBQ19GUklFTkRfQ0hFQ0tVUF9DTElDS19DT1VOVD0yNDFdPVwiU1VQX1BBQ19GUklFTkRfQ0hFQ0tVUF9DTElDS19DT1VOVFwiLGVbZS5TVVBfUEFDX0ZSSUVORF9DSEVDS1VQX0RJU01JU1NfQ09VTlQ9MjQyXT1cIlNVUF9QQUNfRlJJRU5EX0NIRUNLVVBfRElTTUlTU19DT1VOVFwiLGVbZS5VU0VfVkVSVElDQUxfTkFWSUdBVElPTj0yNDNdPVwiVVNFX1ZFUlRJQ0FMX05BVklHQVRJT05cIixlW2UuSEVWQ19IV19ERUNPREVSPTI0NF09XCJIRVZDX0hXX0RFQ09ERVJcIixlW2UuSEVWQ19TV19ERUNPREVSPTI0NV09XCJIRVZDX1NXX0RFQ09ERVJcIixlW2UuU1VQX0ZIUF9DT05UQUNUX1NZTkNfSU1QUkVTU0lPTl9DT1VOVD0yNDZdPVwiU1VQX0ZIUF9DT05UQUNUX1NZTkNfSU1QUkVTU0lPTl9DT1VOVFwiLGVbZS5TVVBfRkhQX05PVElGSUNBVElPTl9QRVJNSVNTSU9OX0lNUFJFU1NJT05fQ09VTlQ9MjQ3XT1cIlNVUF9GSFBfTk9USUZJQ0FUSU9OX1BFUk1JU1NJT05fSU1QUkVTU0lPTl9DT1VOVFwiLGVbZS5TVVBfRkhQX1BIT05FX1ZFUklGSUNBVElPTl9JTVBSRVNTSU9OX0NPVU5UPTI0OF09XCJTVVBfRkhQX1BIT05FX1ZFUklGSUNBVElPTl9JTVBSRVNTSU9OX0NPVU5UXCIsZVtlLlNVUF9GSFBfRU1BSUxfVkVSSUZJQ0FUSU9OX0lNUFJFU1NJT05fQ09VTlQ9MjQ5XT1cIlNVUF9GSFBfRU1BSUxfVkVSSUZJQ0FUSU9OX0lNUFJFU1NJT05fQ09VTlRcIixlW2UuTUVNT1JJRVNfQ09VTlQ9MjUwXT1cIk1FTU9SSUVTX0NPVU5UXCIsZVtlLlNVUF9GSFBfQ09OVEFDVF9TWU5DX0RJU01JU1NfQ09VTlQ9MjUxXT1cIlNVUF9GSFBfQ09OVEFDVF9TWU5DX0RJU01JU1NfQ09VTlRcIixlW2UuU1VQX0ZIUF9OT1RJRklDQVRJT05fUEVSTUlTU0lPTl9ESVNNSVNTX0NPVU5UPTI1Ml09XCJTVVBfRkhQX05PVElGSUNBVElPTl9QRVJNSVNTSU9OX0RJU01JU1NfQ09VTlRcIixlW2UuU1VQX0ZIUF9QSE9ORV9WRVJJRklDQVRJT05fRElTTUlTU19DT1VOVD0yNTNdPVwiU1VQX0ZIUF9QSE9ORV9WRVJJRklDQVRJT05fRElTTUlTU19DT1VOVFwiLGVbZS5TVVBfRkhQX0VNQUlMX1ZFUklGSUNBVElPTl9ESVNNSVNTX0NPVU5UPTI1NF09XCJTVVBfRkhQX0VNQUlMX1ZFUklGSUNBVElPTl9ESVNNSVNTX0NPVU5UXCIsZVtlLlNFUlZFUl9PTkxZPTI1NV09XCJTRVJWRVJfT05MWVwiLGVbZS5IQVNfQUNUSVZFX1NOQVBDSEFUX1BMVVM9MjU2XT1cIkhBU19BQ1RJVkVfU05BUENIQVRfUExVU1wiLGVbZS5TVVBfRlNUX1NOQVBfUExVU19JTVBSRVNTSU9OX0NPVU5UPTI1N109XCJTVVBfRlNUX1NOQVBfUExVU19JTVBSRVNTSU9OX0NPVU5UXCIsZVtlLlNVUF9GU1RfU05BUF9QTFVTX0xBU1RfSU1QUkVTU0lPTl9USU1FX1NFQ1NfVE9fTk9XPTI1OF09XCJTVVBfRlNUX1NOQVBfUExVU19MQVNUX0lNUFJFU1NJT05fVElNRV9TRUNTX1RPX05PV1wiLGVbZS5DT05GSUdfVEVfRU5BQkxFRD0yNTldPVwiQ09ORklHX1RFX0VOQUJMRURcIixlW2UuU05BUF9LSVRfT0FVVEhfSUQ9MjYwXT1cIlNOQVBfS0lUX09BVVRIX0lEXCIsZVtlLk9SR0FOSVpBVElPTl9UWVBFPTI2MV09XCJPUkdBTklaQVRJT05fVFlQRVwiLGVbZS5DSFVOS19VUExPQURfU1VQUE9SVF9SRVFVSVJFRD0yNjJdPVwiQ0hVTktfVVBMT0FEX1NVUFBPUlRfUkVRVUlSRURcIixlW2UuU1VQX0ZTVF9JT1NfTE9DS1NDUkVFTl9XSURHRVRfSU1QUkVTU0lPTl9DT1VOVD0yNjNdPVwiU1VQX0ZTVF9JT1NfTE9DS1NDUkVFTl9XSURHRVRfSU1QUkVTU0lPTl9DT1VOVFwiLGVbZS5TVVBfRlNUX0lPU19MT0NLU0NSRUVOX1dJREdFVF9MQVNUX0lNUFJFU1NJT05fVElNRV9TRUNTX1RPX05PVz0yNjRdPVwiU1VQX0ZTVF9JT1NfTE9DS1NDUkVFTl9XSURHRVRfTEFTVF9JTVBSRVNTSU9OX1RJTUVfU0VDU19UT19OT1dcIixlW2UuU1VQX0ZTVF9JT1NfTE9DS1NDUkVFTl9XSURHRVRfQ0xJQ0tfQ09VTlQ9MjY1XT1cIlNVUF9GU1RfSU9TX0xPQ0tTQ1JFRU5fV0lER0VUX0NMSUNLX0NPVU5UXCIsZVtlLlNVUF9QQUNfTVlfUFJPRklMRV9JT1NfTE9DS1NDUkVFTl9XSURHRVRfQ0xJQ0tfQ09VTlQ9MjY2XT1cIlNVUF9QQUNfTVlfUFJPRklMRV9JT1NfTE9DS1NDUkVFTl9XSURHRVRfQ0xJQ0tfQ09VTlRcIixlW2UuU1VQX1BBQ19NWV9QUk9GSUxFX0lPU19MT0NLU0NSRUVOX1dJREdFVF9ESVNNSVNTX0NPVU5UPTI2N109XCJTVVBfUEFDX01ZX1BST0ZJTEVfSU9TX0xPQ0tTQ1JFRU5fV0lER0VUX0RJU01JU1NfQ09VTlRcIixlW2UuU1VQX0lPU19MT0NLX1NDUkVFTl9XSURHRVRfRU5BQkxFRD0yNjhdPVwiU1VQX0lPU19MT0NLX1NDUkVFTl9XSURHRVRfRU5BQkxFRFwiLGVbZS5DTE9VREZST05UX1BPUD0yNjldPVwiQ0xPVURGUk9OVF9QT1BcIixlW2UuQklMTEJPQVJEX0NBTVBBSUdOX0xPQ0FMX0ZJUlNUX0lNUFJFU1NJT05fVElNRV9TRUNTX1RPX05PVz0yNzBdPVwiQklMTEJPQVJEX0NBTVBBSUdOX0xPQ0FMX0ZJUlNUX0lNUFJFU1NJT05fVElNRV9TRUNTX1RPX05PV1wiLGVbZS5CSUxMQk9BUkRfQ0FNUEFJR05fTE9DQUxfQ0xJQ0tfQ09VTlQ9MjcxXT1cIkJJTExCT0FSRF9DQU1QQUlHTl9MT0NBTF9DTElDS19DT1VOVFwiLGVbZS5CSUxMQk9BUkRfQ0FNUEFJR05fTE9DQUxfSU5URVJBQ1RJT05fQ09VTlQ9MjcyXT1cIkJJTExCT0FSRF9DQU1QQUlHTl9MT0NBTF9JTlRFUkFDVElPTl9DT1VOVFwiLGVbZS5CSUxMQk9BUkRfQ0FNUEFJR05fTE9DQUxfTEFTVF9JTlRFUkFDVElPTl9USU1FX1NFQ1NfVE9fTk9XPTI3M109XCJCSUxMQk9BUkRfQ0FNUEFJR05fTE9DQUxfTEFTVF9JTlRFUkFDVElPTl9USU1FX1NFQ1NfVE9fTk9XXCIsZVtlLlNOQVBfUFJJVkFDWT0yNzRdPVwiU05BUF9QUklWQUNZXCIsZVtlLkZTVF9MT0NLX1NDUkVFTl9XSURHRVRfQklMTEJPQVJEX0xBVU5DSEVEX0ZST01fUFVTSD0yNzVdPVwiRlNUX0xPQ0tfU0NSRUVOX1dJREdFVF9CSUxMQk9BUkRfTEFVTkNIRURfRlJPTV9QVVNIXCIsZVtlLldFQl9TQ1JFRU5fV0lEVEg9Mjc2XT1cIldFQl9TQ1JFRU5fV0lEVEhcIixlW2UuV0VCX1NDUkVFTl9IRUlHSFQ9Mjc3XT1cIldFQl9TQ1JFRU5fSEVJR0hUXCIsZVtlLkFEU19JTlRFUkZBQ0VTX0lTX05FV19PUkdBTklaQVRJT049Mjc4XT1cIkFEU19JTlRFUkZBQ0VTX0lTX05FV19PUkdBTklaQVRJT05cIixlW2UuU1VQX0ZIUF9SRUdJU1RFUl9UT19WT1RFX0NBTVBBSUdOX0xBU1RfRElTTUlTU19USU1FX01JTExJU19UT19OT1c9Mjc5XT1cIlNVUF9GSFBfUkVHSVNURVJfVE9fVk9URV9DQU1QQUlHTl9MQVNUX0RJU01JU1NfVElNRV9NSUxMSVNfVE9fTk9XXCIsZVtlLkdIRV9PUkdBTklaQVRJT049MjgwXT1cIkdIRV9PUkdBTklaQVRJT05cIixlW2UuR0hFX1JFUE9TSVRPUlk9MjgxXT1cIkdIRV9SRVBPU0lUT1JZXCIsZVtlLkdIRV9VU0VSX0VNQUlMPTI4Ml09XCJHSEVfVVNFUl9FTUFJTFwiLGVbZS5CVUlMRF9ERUZJTklUSU9OX0lEPTI4M109XCJCVUlMRF9ERUZJTklUSU9OX0lEXCIsZVtlLkJVSUxEX0RFRklOSVRJT05fTkFNRT0yODRdPVwiQlVJTERfREVGSU5JVElPTl9OQU1FXCIsZVtlLkxDQV9QUklOQ0lQQUw9Mjg1XT1cIkxDQV9QUklOQ0lQQUxcIixlW2UuTUVESUFfUEVSRk9STUFOQ0VfQ0xBU1M9Mjg2XT1cIk1FRElBX1BFUkZPUk1BTkNFX0NMQVNTXCIsZVtlLkNPTU1VTklUWV9DT1VOVD0yODddPVwiQ09NTVVOSVRZX0NPVU5UXCIsZVtlLlNDUkVFTl9BU1BFQ1RfUkFUSU89MjkwXT1cIlNDUkVFTl9BU1BFQ1RfUkFUSU9cIixlW2UuUkVDSVBJRU5UU19TVVBQT1JUX0ZNUDQ9MjkxXT1cIlJFQ0lQSUVOVFNfU1VQUE9SVF9GTVA0XCIsZVtlLkNBTUVPU19FTkdBR0VNRU5UX0xFVkVMPTI5Ml09XCJDQU1FT1NfRU5HQUdFTUVOVF9MRVZFTFwiLGVbZS5IQVNfQ0FNRU9TPTI5M109XCJIQVNfQ0FNRU9TXCIsZVtlLklTX0FDVElWRV9MRU5TX1ZJREVPX0NIQVRfVVNFUj0yOTRdPVwiSVNfQUNUSVZFX0xFTlNfVklERU9fQ0hBVF9VU0VSXCIsZVtlLk5VTV9TUE9UTElHSFRfUE9TVFNfTDc9Mjk1XT1cIk5VTV9TUE9UTElHSFRfUE9TVFNfTDdcIixlW2UuTlVNX01BUF9QT1NUU19MNz0yOTZdPVwiTlVNX01BUF9QT1NUU19MN1wiLGVbZS5IQVNfQ1JFQVRFRF9QVUJMSUNfUFJPRklMRT0yOTddPVwiSEFTX0NSRUFURURfUFVCTElDX1BST0ZJTEVcIixlW2UuSEFTX1BVQkxJQ19QUk9GSUxFX0FDQ0VTU19WSUFfUk9MRT0yOThdPVwiSEFTX1BVQkxJQ19QUk9GSUxFX0FDQ0VTU19WSUFfUk9MRVwiLGVbZS5VU0VSX0hBU19ERU5JRURfQ0FNRVJBX1BFUk09Mjk5XT1cIlVTRVJfSEFTX0RFTklFRF9DQU1FUkFfUEVSTVwiLGVbZS5EQVlTX1NJTkNFX0xBU1RfQ0FNRVJBX1BFUk1fREVOWT0zMDBdPVwiREFZU19TSU5DRV9MQVNUX0NBTUVSQV9QRVJNX0RFTllcIixlW2UuREFZU19TSU5DRV9BRF9PUkdfSk9JTj0zMDFdPVwiREFZU19TSU5DRV9BRF9PUkdfSk9JTlwiLGVbZS5EQVlTX1NJTkNFX0ZJUlNUX0FEX0NSRUFURT0zMDJdPVwiREFZU19TSU5DRV9GSVJTVF9BRF9DUkVBVEVcIixlW2UuT1JHQU5JWkFUSU9OX0NPVU5UUlk9MzAzXT1cIk9SR0FOSVpBVElPTl9DT1VOVFJZXCIsZVtlLkRBWVNfU0lOQ0VfRklSU1RfRFdFQl9WSVNJVD0zMDRdPVwiREFZU19TSU5DRV9GSVJTVF9EV0VCX1ZJU0lUXCIsZVtlLkRBWVNfU0lOQ0VfTEFTVF9EV0VCX1ZJU0lUPTMwNV09XCJEQVlTX1NJTkNFX0xBU1RfRFdFQl9WSVNJVFwiLGVbZS5XRUVLU19TSU5DRV9VU0lOR19EV0VCPTMwNl09XCJXRUVLU19TSU5DRV9VU0lOR19EV0VCXCIsZVtlLkhBU19MRU5TPTMwN109XCJIQVNfTEVOU1wiLGVbZS5VU0VSX0dST1VQPTk5OTldPVwiVVNFUl9HUk9VUFwiLGVbZS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCJ9KEhlfHwoSGU9e30pKTt2YXIgamUsWmUsemU9KCgpPT57aWYodm9pZCAwIT09emUpcmV0dXJuIHplO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmKXJldHVybiBzZWxmO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvdztpZih2b2lkIDAhPT1uLmcpcmV0dXJuIG4uZzt0aHJvd1wiVW5hYmxlIHRvIGxvY2F0ZSBnbG9iYWwgb2JqZWN0XCJ9KSgpO2MoKS51dGlsLkxvbmchPT1hKCkmJihjKCkudXRpbC5Mb25nPWEoKSxjKCkuY29uZmlndXJlKCkpLGZ1bmN0aW9uKGUpe2VbZS5VTktOT1dOX1VOU0VUPTBdPVwiVU5LTk9XTl9VTlNFVFwiLGVbZS5VU0VSPTFdPVwiVVNFUlwiLGVbZS5TTkFQQ0hBVF9DTElFTlQ9Ml09XCJTTkFQQ0hBVF9DTElFTlRcIixlW2UuV0VCX0NMSUVOVD0zXT1cIldFQl9DTElFTlRcIixlW2UuV0VCX1NOQVBDSEFUX1VTRVI9NF09XCJXRUJfU05BUENIQVRfVVNFUlwiLGVbZS5BRF9BQ0NPVU5UPTVdPVwiQURfQUNDT1VOVFwiLGVbZS5BTV9PUkdBTklaQVRJT049Nl09XCJBTV9PUkdBTklaQVRJT05cIixlW2UuQU1fTUVNQkVSPTddPVwiQU1fTUVNQkVSXCIsZVtlLkFNX1NFU1NJT049OF09XCJBTV9TRVNTSU9OXCIsZVtlLkFNX1BST0ZJTEU9OV09XCJBTV9QUk9GSUxFXCIsZVtlLkFNX1NOQVBDSEFUX1VTRVI9MTBdPVwiQU1fU05BUENIQVRfVVNFUlwiLGVbZS5TTkFQQ0hBVF9BRFZFUlRJU0lORz0xMV09XCJTTkFQQ0hBVF9BRFZFUlRJU0lOR1wiLGVbZS5BTV9DTElFTlQ9MTJdPVwiQU1fQ0xJRU5UXCIsZVtlLkNPTkZJR19ERVZJQ0U9MTNdPVwiQ09ORklHX0RFVklDRVwiLGVbZS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCJ9KGplfHwoamU9e30pKSxmdW5jdGlvbihlKXtlW2UuVU5TRVQ9MF09XCJVTlNFVFwiLGVbZS5TRVJWRVJfVFJJR0dFUj0xXT1cIlNFUlZFUl9UUklHR0VSXCIsZVtlLkNMSUVOVF9UUklHR0VSPTJdPVwiQ0xJRU5UX1RSSUdHRVJcIixlW2UuQUxMT0NBVElPTj0zXT1cIkFMTE9DQVRJT05cIixlW2UuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwifShaZXx8KFplPXt9KSk7dmFyIEtlPSgoKT0+e2lmKHZvaWQgMCE9PUtlKXJldHVybiBLZTtpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZilyZXR1cm4gc2VsZjtpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93KXJldHVybiB3aW5kb3c7aWYodm9pZCAwIT09bi5nKXJldHVybiBuLmc7dGhyb3dcIlVuYWJsZSB0byBsb2NhdGUgZ2xvYmFsIG9iamVjdFwifSkoKTtjKCkudXRpbC5Mb25nIT09YSgpJiYoYygpLnV0aWwuTG9uZz1hKCksYygpLmNvbmZpZ3VyZSgpKTt2YXIgWWU9big0NTM2MykscWU9bi5uKFllKSxYZT1uKDM2NzgxKSxRZT1uKDc5NzQyKSxKZT1uKDk3NzgyKSwkZT1uLm4oSmUpLGV0PW4oMzMwMzcpLHR0PW4oMzAyNjIpOyRlKCkuZ2V0TG9nZ2VyKFwiW0ltcHJvYmFibGVHcnBjV2ViQ2xpZW50XVwiKTtjb25zdCBudD1lPT57bGV0IHQ7cmV0dXJue3NlbmRNZXNzYWdlOmFzeW5jIG49Pnt0cnl7Y29uc3Qgcj1hd2FpdCgwLHR0Lm4pKGUudXJsLHtoZWFkZXJzOnQ/LnRvSGVhZGVycygpLG1ldGhvZDpcIlBPU1RcIixib2R5Om59KTtlLm9uSGVhZGVycyhuZXcgZXQuZ3JwYy5NZXRhZGF0YShyLmhlYWRlcnMpLHIuc3RhdHVzKTtjb25zdCBpPWF3YWl0IHIuYXJyYXlCdWZmZXIoKTtpLmJ5dGVMZW5ndGg+MCYmZS5vbkNodW5rKG5ldyBVaW50OEFycmF5KGkpKSxlLm9uRW5kKCl9Y2F0Y2godCl7dCBpbnN0YW5jZW9mIEVycm9yP2Uub25FbmQodCk6ZS5vbkVuZChuZXcgRXJyb3IoYHVua25vd24gZ3JwYy13ZWIgZXJyb3IgY2FsbGluZyAke2UudXJsfWApKX19LGZpbmlzaFNlbmQ6KCk9Pnt9LGNhbmNlbDooKT0+e30sc3RhcnQ6ZT0+e3Q9ZX19fTt2YXIgcnQ9bigzNTAwNyksaXQ9big0MjIzOCksb3Q9bi5uKGl0KTtjb25zdCBhdD0vXig/OlxcZCtcXC4pPyg/OlxcZCtcXC4pPyg/OlxcZCtcXC4pPyg/OlxcZCspJC8sc3Q9e2Nocm9taXVtb3M6XCJjaHJvbWVvc1wifTtmdW5jdGlvbiBjdChlKXtsZXR7bmFtZTp0LHZlcnNpb246bn09ZTtyZXR1cm4gdD1mdW5jdGlvbihlKXtyZXR1cm4oZXx8XCJcIikucmVwbGFjZSgvXFxzL2csXCJcIikudG9Mb3dlckNhc2UoKX0odCksbj1mdW5jdGlvbihlKXtyZXR1cm4gZT1lfHxcIlwiLGF0LnRlc3QoZSl8fChlPVwiMC4wLjBcIiksZX0obiksdCBpbiBzdCYmKHQ9c3RbdF0pLGAke3R9ICR7bn1gfWZ1bmN0aW9uIGx0KCl7bGV0e3VzZXJBZ2VudDplLGFwcFZlcnNpb246dD1cIjEyLjM2LjBcIixhcHBGbGF2b3I6bj1cInByb2RcIi50b1VwcGVyQ2FzZSgpfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307ZT1lPz9uYXZpZ2F0b3IudXNlckFnZW50O2NvbnN0e29zOnIsYnJvd3NlcjppfT1vdCgpKGUpO3JldHVybmBTbmFwY2hhdFdlYi8ke3R9ICR7bn0gKCR7Y3Qocil9OyAke2N0KGkpfSlgfXZhciB1dD1uKDIzODM0KSxkdD1uKDM3MTQpLGZ0PW4oODQxMzApLHB0PW4oNzM0NDUpLG10PW4oMTg3NTMpLGh0PW4oNDM5NzMpO2xldCB2dD0oKT0+e307Y29uc3QgZ3Q9bmV3IFByb21pc2UoKGU9Pnt2dD1lfSkpOyRlKCkuZ2V0TG9nZ2VyKFwiW2NvZi1zdG9yZV1cIik7Y29uc3QgeXQ9ZT0+e2xldCB0PVtdO2UmJih0PWUuY29uZmlnUmVzdWx0cy5maWx0ZXIoKGU9PmUubmFtZXNwYWNlPT09cGUuTUNTKSkubWFwKChlPT5lLnNlcXVlbmNlSWQpKSk7Y29uc3Qgbj1YZS5QYXJ0aWFsVG9rZW4uZW5jb2RlKFhlLlBhcnRpYWxUb2tlbi5mcm9tUGFydGlhbCh7c2VxdWVuY2VJZHM6dH0pKS5maW5pc2goKTtyZXR1cm4gUWUuZnJvbUJ5dGVBcnJheShuKX0sRXQ9KDAsaHQuTSkoKDAsbXQubikoKChlLHQpPT57bGV0IG47cmV0dXJue190YXJnZXRpbmdSZXNwb25zZTp2b2lkIDAsX21jc0NvZlNlcXVlbmNlSWRzOnZvaWQgMCxpbml0Q29mU3RvcmU6dD0+eyhmdW5jdGlvbihlKXtjb25zdCB0PU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxiZSksZSksbj1UZSgpO2lmKG4pe2lmKEpTT04uc3RyaW5naWZ5KHQpIT09SlNPTi5zdHJpbmdpZnkobi5zZXR0aW5ncykpdGhyb3cgbmV3IEVycm9yKFwiaW5pdENvbmZpZ3NDbGllbnQoKSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZFwiKX1lbHNlIWZ1bmN0aW9uKGUpe1widW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJih3aW5kb3dbU2VdPWUpfSh7c2V0dGluZ3M6dCxycGM6bmV3IEllKHQuaG9zdCx7bWV0YWRhdGE6dC5tZXRhZGF0YSx0cmFuc3BvcnQ6dC50cmFuc3BvcnQsZGVidWc6dC5kZWJ1Z30pfSksdmUoUS5XRUJfU0NSRUVOX0hFSUdIVCwoKCk9PndpbmRvdy5pbm5lckhlaWdodCkpLHZlKFEuV0VCX1NDUkVFTl9XSURUSCwoKCk9PndpbmRvdy5pbm5lcldpZHRoKSl9KSh7aG9zdDp1dC56VSx0cmFuc3BvcnQ6bnR9KSx2ZShRLkJVSUxEX0ZMQVZPUixkdC5aKSxuPXQ7Y29uc3Qgcj0oYXN5bmMgZT0+e3RyeXtyZXR1cm4gYXdhaXQgZnVuY3Rpb24oZSx0KXtjb25zdHtycGM6bn09ZnVuY3Rpb24oKXtjb25zdCBlPVRlKCk7aWYoIWUpdGhyb3cgbmV3IEVycm9yKFwiaW5pdENvbmZpZ3NDbGllbnQoKSBoYXMgdG8gYmUgY2FsbGVkIG9uIGFwcCBzdGFydHVwXCIpO3JldHVybiBlfSgpO3JldHVybiBuLnVuYXJ5KENlLFAuZnJvbVBhcnRpYWwoZSksdCl9KGUse1wieC1zbmFwLWNsaWVudC11c2VyLWFnZW50XCI6bHQoKX0pfWNhdGNoKGUpe3JldHVybiBxZSgpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJjb2ZfdGFyZ2V0aW5nX3F1ZXJ5X2ZhaWx1cmVcIn0pLHZvaWQoMCxpLlRiKShlKX19KSh7bmFtZXNwYWNlczpbcGUuTUNTLHBlLlNOQVBDSEFUX1dFQl9VSSxwZS5NRVNTQUdJTkdfVUldLHJ1aWQ6e3N0cmluZ1ZhbHVlOm4sdHlwZTpFLlVTRVJ9fSk7ZSgoZT0+e2UuX3RhcmdldGluZ1Jlc3BvbnNlPXIsZS5fbWNzQ29mU2VxdWVuY2VJZHM9ci50aGVuKHl0KX0pKSx2dCgpfSxnZXRDbGllbnRDb2ZWYWx1ZTphc3luYyhlLHIpPT57YXdhaXQgZ3Q7Y29uc3Qgbz1gZGVmYXVsdCgke1N0cmluZyhyKX0pYCxhPWUuc3Vic3RyaW5nKDAsMzIpLHM9dCgpLl90YXJnZXRpbmdSZXNwb25zZTtpZighcylyZXR1cm4oMCxmdC5WKShcImluaXRfY29mXCIpLHt2YWx1ZTpyfTtjb25zdCBjPWF3YWl0IHMsbD1nZShjPy5jb25maWdSZXN1bHRzPz9bXSxlKTtmdW5jdGlvbiB1KHQpe3JldHVybiBxZSgpLmluY3JlbWVudCh7bWV0cmljc05hbWU6dCxkaW1lbnNpb25zOntjb25maWdfbmFtZTplfX0pLCgwLGkuWUEpKGEsbykse3ZhbHVlOnJ9fWlmKHZvaWQgMD09PWwpcmV0dXJuIHUoXCJjb2ZfZW1wdHlfY29uZmlnXCIpO2lmKHZvaWQgMD09PWwudmFsdWUpcmV0dXJuIHUoXCJjb2ZfZW1wdHlfY29uZmlnX3ZhbHVlXCIpO2NvbnN0e3ZhbHVlOmQsdHlwZU5hbWU6Zn09ZnVuY3Rpb24oZSx0KXtpZihcImJvb2xlYW5cIj09dHlwZW9mIHQpcmV0dXJue3ZhbHVlOmUuYm9vbFZhbHVlLHR5cGVOYW1lOlwiYm9vbGVhblwifTtpZihcIm51bWJlclwiPT10eXBlb2YgdClyZXR1cm57dmFsdWU6ZS5pbnRWYWx1ZT8/ZS5sb25nVmFsdWU/P2UuZmxvYXRWYWx1ZT8/ZS5kb3VibGVWYWx1ZT8/ZS5pbnRQYWlyVmFsdWUsdHlwZU5hbWU6XCJudW1iZXJcIn07aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpcmV0dXJue3ZhbHVlOmUuc3RyaW5nVmFsdWUsdHlwZU5hbWU6XCJzdHJpbmdcIn07aWYoQXJyYXlCdWZmZXIuaXNWaWV3KHQpKXtjb25zdCB0PWUuYW55VmFsdWU/LnZhbHVlO3JldHVybnt2YWx1ZTp0LHR5cGVOYW1lOlwicHJvdG9cIn19cmV0dXJue3ZhbHVlOnZvaWQgMCx0eXBlTmFtZTp0eXBlb2YgdH19KGwudmFsdWUscik7aWYodm9pZCAwPT09ZClyZXR1cm4gdShgY29mX2VtcHR5X2NvbmZpZ192YWx1ZV9mb3JfdHlwZV8ke2Z9YCk7Y29uc3QgcD1cInByb3RvXCI9PT1mP2BzZXF1ZW5jZUlkKCR7ZnVuY3Rpb24oZSl7cmV0dXJuXCJzZXF1ZW5jZUlkXCJpbiBlP1N0cmluZyhlLnNlcXVlbmNlSWQpOlwidW5rbm93bl9zZXF1ZW5jZV9pZFwifShsKX0pYDpTdHJpbmcoZCk7bGV0IG07dmFyIGg7cmV0dXJuKDAsaS5ZQSkoYSxwKSxoPWwsQm9vbGVhbihoJiZcInJ1aWRUeXBlXCJpbiBoJiZ2b2lkIDAhPT1oLnJ1aWRUeXBlJiZcInN0dWR5TmFtZVwiaW4gaCYmaC5zdHVkeU5hbWUmJlwiZXhwZXJpbWVudElkXCJpbiBoJiZ2b2lkIDAhPT1oLmV4cGVyaW1lbnRJZCkmJihtPSgpPT57bj8ocWUoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwiY29mX2FiX2V4cG9zdXJlX2xvZ2dpbmdcIixkaW1lbnNpb25zOntuYW1lOmUudG9Mb3dlckNhc2UoKSx0cmVhdG1lbnQ6bC5leHBlcmltZW50SWQudG9TdHJpbmcoKX19KSxmdW5jdGlvbihlKXsoMCxydC5HSykoe3N0dWR5TmFtZTplLnN0dWR5TmFtZSxleHBlcmltZW50SWQ6U3RyaW5nKGUuZXhwZXJpbWVudElkKX0pfShsKSk6KDAsZnQuVikoXCJlbXB0eV9jdXJyZW50X3VzZXJfaWRfZm9yX2FiX2V4cG9zdXJlX2xvZ2dpbmdcIil9KSx7dmFsdWU6ZCxsb2dFeHBvc3VyZTptfX0sZ2V0Q2xpZW50Q29mVmFsdWVBbmRMb2dFeHBvc3VyZTphc3luYyhlLG4pPT57Y29uc3R7dmFsdWU6cixsb2dFeHBvc3VyZTppfT1hd2FpdCB0KCkuZ2V0Q2xpZW50Q29mVmFsdWUoZSxuKTtyZXR1cm4gaT8uKCkse3ZhbHVlOnJ9fSxnZXRNY3NDb2ZTZXF1ZW5jZUlkczphc3luYygpPT4oYXdhaXQgZ3QsdCgpLl9tY3NDb2ZTZXF1ZW5jZUlkc3x8KCgwLGZ0LlYpKFwiZ2V0X21jc19zZXF1ZW5jZV9pZHNfYmVmb3JlX2luaXRfY29mXCIpLFwiXCIpKX19KSkpLF90PShlLHQpPT4oMCxwdC5vUikoRXQsZSx0KX0sMTYyOTc6KGUsdCxuKT0+e24uZCh0LHtBOigpPT5yLGc6KCk9Pml9KTtjb25zdCByPWU9PmUuZmVlZC5mZWVkSGFzUmVuZGVyZWQsaT1lPT5lLmZlZWQubWFya0ZlZWRSZW5kZXJlZH0sNTEyNzg6KGUsdCxuKT0+e24uZCh0LHtCOigpPT51LG06KCk9PmR9KTt2YXIgcj1uKDQ1MzYzKSxpPW4ubihyKSxvPW4oNjk3MjkpLGE9big3MzQ0NSkscz1uKDE4NzUzKSxjPW4oNDM5NzMpLGw9big3MjM1OSk7Y29uc3QgdT0oMCxjLk0pKCgwLHMubikoKChlLHQpPT4oe21vZGU6bC5vLkNsb3NlZCxtZWRpYXM6W10sY29udmVyc2F0aW9uSWQ6dm9pZCAwLG9wZW5MaWdodEJveFYyOm49PntsZXR7bW9kZTpyLG1lZGlhczpvLGNvbnZlcnNhdGlvbklkOmEsc3RhcnRpbmdJbmRleDpzLG9uU3RhcnRWaWV3aW5nTWVkaWE6YyxvbkZpbmlzaFZpZXdpbmdNZWRpYTpsLG9uTG9hZE1lZGlhU3VjY2VlZGVkOnUsb25Mb2FkTWVkaWFGYWlsZWQ6ZH09bjtlKChlPT57ZS5tb2RlPXIsZS5tZWRpYXM9byxlLmNvbnZlcnNhdGlvbklkPWEsZS5zZWxlY3RlZEluZGV4PU1hdGgubWF4KDAsTWF0aC5taW4ocyxvLmxlbmd0aC0xKSksZS5vblN0YXJ0Vmlld2luZ01lZGlhPWMsZS5vbkZpbmlzaFZpZXdpbmdNZWRpYT1sLGUub25Mb2FkTWVkaWFTdWNjZWVkZWQ9dSxlLm9uTG9hZE1lZGlhRmFpbGVkPWR9KSk7Y29uc3QgZj10KCk7Zi5vblN0YXJ0Vmlld2luZ01lZGlhPy4oZi5tZWRpYXNbZi5zZWxlY3RlZEluZGV4XSksaSgpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJvcGVuX2xpZ2h0Ym94XCIsZGltZW5zaW9uczp7bW9kZTpmLm1vZGV9fSl9LGNsb3NlTGlnaHRCb3hWMjooKT0+e2NvbnN0IG49dCgpO2lmKG4ubW9kZT09PWwuby5DbG9zZWQpcmV0dXJuO24ub25GaW5pc2hWaWV3aW5nTWVkaWE/LihuLm1lZGlhc1tuLnNlbGVjdGVkSW5kZXhdKTtjb25zdCByPW4uY29udmVyc2F0aW9uSWQ7ZSgoZT0+e2UubW9kZT1sLm8uQ2xvc2VkLGUubWVkaWFzPVtdLGUuY29udmVyc2F0aW9uSWQ9dm9pZCAwLGUuc2VsZWN0ZWRJbmRleD0tMSxlLm9uU3RhcnRWaWV3aW5nTWVkaWE9dm9pZCAwLGUub25GaW5pc2hWaWV3aW5nTWVkaWE9dm9pZCAwLGUub25Mb2FkTWVkaWFTdWNjZWVkZWQ9dm9pZCAwLGUub25Mb2FkTWVkaWFGYWlsZWQ9dm9pZCAwfSkpLHImJm8uc3RvcmUuZ2V0U3RhdGUoKS5tZXNzYWdpbmcucHVyZ2VDb252ZXJzYXRpb25NZXNzYWdlcyhyKX0sc2VsZWN0ZWRJbmRleDotMSxwcmV2aW91czooKT0+e2NvbnN0IG49dCgpO24ubW9kZSE9PWwuby5DbG9zZWQmJihuLm9uRmluaXNoVmlld2luZ01lZGlhPy4obi5tZWRpYXNbbi5zZWxlY3RlZEluZGV4XSksZSgoZT0+e2Uuc2VsZWN0ZWRJbmRleD4wJiYoZS5zZWxlY3RlZEluZGV4LT0xLGUub25TdGFydFZpZXdpbmdNZWRpYT8uKGUubWVkaWFzW2Uuc2VsZWN0ZWRJbmRleF0pKX0pKSl9LG5leHQ6KCk9Pntjb25zdCBuPXQoKTtuLm1vZGUhPT1sLm8uQ2xvc2VkJiYobi5vbkZpbmlzaFZpZXdpbmdNZWRpYT8uKG4ubWVkaWFzW24uc2VsZWN0ZWRJbmRleF0pLGUoKGU9PntlLnNlbGVjdGVkSW5kZXg8PWUubWVkaWFzLmxlbmd0aC0xJiYoZS5zZWxlY3RlZEluZGV4Kz0xLGUub25TdGFydFZpZXdpbmdNZWRpYT8uKGUubWVkaWFzW2Uuc2VsZWN0ZWRJbmRleF0pKX0pKSl9LG9uU3RhcnRWaWV3aW5nTWVkaWE6dm9pZCAwLG9uRmluaXNoVmlld2luZ01lZGlhOnZvaWQgMCxvbkxvYWRNZWRpYVN1Y2NlZWRlZDp2b2lkIDAsb25Mb2FkTWVkaWFGYWlsZWQ6dm9pZCAwfSkpKSksZD0oZSx0KT0+KDAsYS5vUikodSxlLHQpfSw3MjM1OTooZSx0LG4pPT57bi5kKHQse286KCk9PnJ9KTt2YXIgcj17U25hcDpcInNuYXBcIixDaGF0TWVkaWE6XCJjaGF0X21lZGlhXCIsQ2xvc2VkOlwiY2xvc2VkXCJ9fSw2MTY4MzooZSx0LG4pPT57bi5kKHQse1ZDOigpPT5fLGJHOigpPT5oLER3OigpPT55LGlUOigpPT5nLGV5OigpPT5FLEZHOigpPT52LHhxOigpPT5tfSk7dmFyIHI9big2NzI5NCk7Y29uc3QgaT1lPT5bZS5sb2NhbFNldHRpbmdzLnNvdW5kRWZmZWN0c0VuYWJsZWQsZS5sb2NhbFNldHRpbmdzLnNldFNvdW5kRWZmZWN0c0VuYWJsZWRdLG89ZT0+W2UubG9jYWxTZXR0aW5ncy5jaGF0U291bmRFZmZlY3RzRW5hYmxlZCxlLmxvY2FsU2V0dGluZ3Muc2V0Q2hhdFNvdW5kRWZmZWN0c0VuYWJsZWRdLGE9ZT0+W2UubG9jYWxTZXR0aW5ncy5hcHBUaGVtZSxlLmxvY2FsU2V0dGluZ3Muc2V0QXBwVGhlbWVdLHM9ZT0+W2UubG9jYWxTZXR0aW5ncy5pc09uQm9hcmREaXNtaXNzZWQsZS5sb2NhbFNldHRpbmdzLnJlbW92ZUlzT25Cb2FyZERpc21pc3NlZF0sYz1lPT5bZS5sb2NhbFNldHRpbmdzLmhhc1NlZW5TYWZhcmlXZWxjb21lTW9kYWwsZS5sb2NhbFNldHRpbmdzLm1hcmtTYWZhcmlXZWxjb21lTW9kYWxTZWVuXSxsPWU9PigpPT57ZS50d2Vha3MudXBkYXRlVHdlYWsoXCJzaG93T25ib2FyZGluZ1NjcmVlblwiLCExKX07ZnVuY3Rpb24gdShlLHQpe2xldCBuO3JldHVybiBuPVwic3lzdGVtXCI9PT1lP3Q/XCJkYXJrXCI6XCJsaWdodFwiOmUsbn1jb25zdCBkPVwiZnVuY3Rpb25cIj09dHlwZW9mIHdpbmRvdy5tYXRjaE1lZGlhP3dpbmRvdy5tYXRjaE1lZGlhKFwiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKVwiKTp2b2lkIDA7dmFyIGY9big2OTcyOSkscD1uKDU2MDgzKTtmdW5jdGlvbiBtKCl7cmV0dXJuKDAsZi5vKShpKX1mdW5jdGlvbiBoKCl7cmV0dXJuKDAsZi5vKShvKX1mdW5jdGlvbiB2KCl7cmV0dXJuKDAsZi5vKShhKX1mdW5jdGlvbiBnKCl7cmV0dXJuKDAsZi5vKShzKX1mdW5jdGlvbiB5KCl7Y29uc3RbZSx0XT0oMCxmLm8pKGMpO3JldHVybigwLHAuYzMpKCkhPT1wLk1YLlNBRkFSST9bITAsdm9pZCAwXTpbZSx0XX1mdW5jdGlvbiBFKCl7cmV0dXJuKDAsZi5vKShsKX1mdW5jdGlvbiBfKCl7Y29uc3RbZSx0XT0oMCxyLnVzZVN0YXRlKShkPy5tYXRjaGVzPz8hMSksW24saV09digpO3JldHVybigwLHIudXNlRWZmZWN0KSgoKCk9Pntjb25zdCBlPWU9Pnt0KGUubWF0Y2hlcyl9O3JldHVybiBkPy5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsZSksKCk9PmQ/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIixlKX0pLFtdKSxbdShuLGUpLGldfX0sMTMwMzQ6KGUsdCxuKT0+e24uZCh0LHtCVTooKT0+SSxHdjooKT0+cCxKbzooKT0+eSxQYzooKT0+YyxQazooKT0+TyxUcTooKT0+dSxVYzooKT0+QyxWSzooKT0+UixXRDooKT0+ZyxYMTooKT0+cyxaRjooKT0+YixhNjooKT0+bCxiRTooKT0+XyxkbjooKT0+QSxoODooKT0+dixpeTooKT0+UyxqRzooKT0+VCxsbzooKT0+ayxuMjooKT0+ZixuczooKT0+aCx0TjooKT0+ZCx5OTooKT0+bX0pO3ZhciByPW4oMjA1NzMpLGk9bigzMTQ0Miksbz1uKDM4NDg0KSxhPW4oNDQ3ODUpO2NvbnN0IHM9ZT0+ZS5tZWRpYS5sb2NhbC5hdWRpby5zdHJlYW0sYz1lPT5lLm1lZGlhLmxvY2FsLnNjcmVlbi5zdHJlYW0sbD1lPT5lLm1lZGlhLmxvY2FsLnZpZGVvLnN0cmVhbU9yaWdpbix1PWU9PmUubWVkaWEubG9jYWwudmlkZW8uZXJyb3IsZD0oMCxyLlAxKSgoZT0+ZS5jYW1lcmFLaXQudmlkZW9NaXJyb3JpbmdDYW52YXNDYWxsYmFjayksKGU9PmUubWVkaWEubG9jYWwudmlkZW9NaXJyb3JpbmdDYW52YXNDYWxsYmFjayksKChlLHQpPT5lPy4oKT8/dD8uKCkpKSxmPSgwLHIuUDEpKGkuWXksKGU9PmUubWVkaWEubG9jYWwudmlkZW8uc3RyZWFtKSwoKGUsdCk9PmU/P3QpKSxwPWU9PltlLm1lZGlhLmxvY2FsLnJlcXVlc3RDYW1lcmEsZS5tZWRpYS5sb2NhbC5yZWxlYXNlQ2FtZXJhXSxtPWU9PnQ9PnQubWVkaWEubG9jYWwudmlkZW8uZW5hYmxlZCYmdC5tZWRpYS5sb2NhbC5jYW1lcmFFbmFibGVkUHJlZnMuaGFzKGUpLGg9ZT0+dD0+dC5tZWRpYS5sb2NhbC5jYW1lcmFFbmFibGVkUHJlZnMuaGFzKGUpLHY9ZT0+W2UubWVkaWEubG9jYWwuYXVkaW8uZW5hYmxlZCxlLm1lZGlhLmxvY2FsLnNldEF1ZGlvRW5hYmxlZF0sZz1lPT5bZS5tZWRpYS5sb2NhbC5zY3JlZW4uZW5hYmxlZCxlLm1lZGlhLmxvY2FsLnNldFNjcmVlbkVuYWJsZWRdLHk9ZT0+KHtzZXRJbnB1dFByZWZlcmVuY2U6ZS5tZWRpYS5sb2NhbC5zZXRJbnB1dFByZWZlcmVuY2UsYXVkaW9JbnB1dElkOmUubWVkaWEubG9jYWwuYXVkaW8uaW5wdXRJZCx2aWRlb0lucHV0SWQ6ZS5tZWRpYS5sb2NhbC52aWRlby5pbnB1dElkfSksRT0oZSx0KT0+ZS5tZWRpYS5yZW1vdGUudmlkZW9TdHJlYW1zW3RdLF89ZT0+ZS5tZWRpYS5yZW1vdGUsST1lPT5bZS5tZWRpYS5sb2NhbC52aWRlb0NvdW50ZXIuYWRkLGUubWVkaWEubG9jYWwudmlkZW9Db3VudGVyLnN1YnRyYWN0XSxTPWU9PmUubWVkaWEubG9jYWwuY2FtZXJhUmVmcyxiPWU9PltlLm1lZGlhLmxvY2FsLmNhbWVyYVBlcm1pc3Npb25TdGF0ZSxlLm1lZGlhLmxvY2FsLnVwZGF0ZUNhbWVyYVBlcm1pc3Npb25TdGF0ZV0sVD0oZSx0LG4scik9Pmk9Pntjb25zdCBhPSgwLG8ubF8pKG4sZSwhMSkoaSkscz1uPT09dCxjPXI/bChpKTpmKGkpO3JldHVybiBzP2M6YT9FKGksYSk6dm9pZCAwfSxDPShlLHQpPT5uPT57Y29uc3Qgcj10PygwLG8ubF8pKHQsZSwhMCkobik6dm9pZCAwO3JldHVybiByP0UobixyKTp2b2lkIDB9LEE9ZT0+dD0+e2NvbnN0IG49KDAsby5veCkoZSkodCk7aWYoIW4pcmV0dXJuO2NvbnN0IHI9KDAsby5RSikoZSkodCkubWFwKChuPT4oKGUsdCk9Pm49Pntjb25zdCByPSgwLG8uZEMpKHQsZSkobik7cmV0dXJuIHI/KChlLHQpPT5lLm1lZGlhLnJlbW90ZS5hdWRpb1N0cmVhbXNbdF0pKG4scik6dm9pZCAwfSkoZSwoMCxhLk9ZKShuKSkodCkpKS5maWx0ZXIoKGU9PnZvaWQgMCE9PWUpKTtyZXR1cm4gbi5zZXRJbnB1dFN0cmVhbXMociksbi5nZXRPdXRwdXRTdHJlYW0oKX0sUj1lPT5bZS5tZWRpYS5sb2NhbC52aWRlby5pc1RyeWluZ1RvTG9hZCxlLm1lZGlhLmxvY2FsLnZpZGVvLnNldElzVHJ5aW5nVG9Mb2FkXSxrPWU9PltlLm1lZGlhLmxvY2FsLnNob3VsZERpc3BsYXlQZXJtaXNzaW9uSW5zdHJ1Y3Rpb25Nb2RhbCxlLm1lZGlhLmxvY2FsLmRpc21pc3NQZXJtaXNzaW9uSW5zdHJ1Y3Rpb25Nb2RhbF0sTz1lPT5bZS5tZWRpYS5sb2NhbC52aWRlby5zdHJlYW0sZS5tZWRpYS5sb2NhbC52aWRlby5zdHJlYW1PcmlnaW4sZS5tZWRpYS5sb2NhbC5hdWRpby5zdHJlYW0sZS5tZWRpYS5sb2NhbC5zY3JlZW4uc3RyZWFtXX0sNjA0OTY6KGUsdCxuKT0+e24uZCh0LHtHRjooKT0+dix3dzooKT0+Z30pO3ZhciByPW4oNzEzNzEpLGk9big0NTM2Myksbz1uLm4oaSksYT1uKDk3NzgyKSxzPW4ubihhKSxjPW4oODA2MTQpLGw9big1MTU3NiksdT1uKDMwOTEwKTtjb25zdCBkPVwibWVkaWFcIixmPWAke2R9LmF1ZGlvRW5hYmxlZGAscD1gJHtkfS5wcmVmZXJyZWRWaWRlb0lucHV0SWRgLG09YCR7ZH0ucHJlZmVycmVkQXVkaW9JbnB1dElkYDtmdW5jdGlvbiBoKGUpe3JldHVybmAke2R9LmNhbWVyYUVuYWJsZWQuJHtlfWB9bGV0IHY9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuTGFuZGluZ1BhZ2U9XCJMYW5kaW5nUGFnZVwiLGUuQ2FsbGluZz1cIkNhbGxpbmdcIixlfSh7fSk7cygpLmdldExvZ2dlcihcIltNZWRpYV1cIik7Y29uc3QgZz0oZSx0KT0+e2NvbnN0IG49dD0+ZSgoZT0+e2UubWVkaWEubG9jYWwudmlkZW9NaXJyb3JpbmdDYW52YXNDYWxsYmFjaz10PygpPT50OnZvaWQgMH0pKTtmdW5jdGlvbiBpKHQpe2lmKCF0KXJldHVybjtjb25zdCBuPXQuZ2V0VmlkZW9UcmFja3MoKVswXT8uZ2V0U2V0dGluZ3MoKS5kZXZpY2VJZCxyPXQuZ2V0QXVkaW9UcmFja3MoKVswXT8uZ2V0U2V0dGluZ3MoKS5kZXZpY2VJZDtlKChlPT57biYmKGUubWVkaWEubG9jYWwudmlkZW8uaW5wdXRJZD1uKSxyJiYoZS5tZWRpYS5sb2NhbC5hdWRpby5pbnB1dElkPXIpfSkpfWFzeW5jIGZ1bmN0aW9uIGEoYSl7Y29uc3R7bWVkaWE6e2xvY2FsOnt2aWRlbzpzLGF1ZGlvOmx9fSxjYW1lcmFLaXQ6e2NsaWVudDpkLGN1cnJlbnRMZW5zSWQ6ZixzZXRDdXJyZW50TGVuczpwfX09dCgpO2lmKGUoKGU9PntlLm1lZGlhLmxvY2FsLnZpZGVvLmVycm9yPXZvaWQgMH0pKSxzLmVuYWJsZWQ9PT1hKXJldHVybjtsZXQgbSxoO2lmKGUoKGU9PntlLm1lZGlhLmxvY2FsLnZpZGVvLmVuYWJsZWQ9YX0pKSxhKXRyeXt0cnl7aD1hd2FpdCgwLGMubFUpKHt2aWRlb0RldmljZUlkOnMuaW5wdXRJZCxhdWRpb0RldmljZUlkOmwuaW5wdXRJZH0pfWNhdGNoKHQpe28oKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwibWVkaWFfbG9jYWxWaWRlb19zdGFydFZpZGVvQW5kQXVkaW9fZmFpbHVyZVwifSk7dHJ5e2g9YXdhaXQoMCxjLlhxKShzLmlucHV0SWQpfWNhdGNoKHQpe2lmKHQgaW5zdGFuY2VvZiBFcnJvcil7Y29uc3Qgbj10O2UoKGU9PntlLm1lZGlhLmxvY2FsLnZpZGVvLmVycm9yPW59KSksbygpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJtZWRpYV9sb2NhbFZpZGVvX3N0YXJ0VmlkZW9fZmFpbHVyZVwifSk7Y29uc3QgaT0oYXdhaXQgbmF2aWdhdG9yLnBlcm1pc3Npb25zLnF1ZXJ5KHtuYW1lOlwiY2FtZXJhXCJ9KSkuc3RhdGU7ZSgoZT0+e2UubWVkaWEubG9jYWwuY2FtZXJhUGVybWlzc2lvblN0YXRlPWksZS5tZWRpYS5sb2NhbC5zaG91bGREaXNwbGF5UGVybWlzc2lvbkluc3RydWN0aW9uTW9kYWw9ITB9KSksW1wiTm90Rm91bmRFcnJvclwiLFwiTm90QWxsb3dlZEVycm9yXCIsXCJTZWN1cml0eUVycm9yXCJdLmluY2x1ZGVzKG4ubmFtZSl8fCgwLHIuVGIpKG4pfX19ZmluYWxseXtjb25zdCB0PShhd2FpdCBuYXZpZ2F0b3IucGVybWlzc2lvbnMucXVlcnkoe25hbWU6XCJjYW1lcmFcIn0pKS5zdGF0ZTtlKChlPT57ZS5tZWRpYS5sb2NhbC52aWRlby5pc0ZldGNoaW5nPSExLGUubWVkaWEubG9jYWwuY2FtZXJhUGVybWlzc2lvblN0YXRlPXR9KSl9dHJ5e2koaCl9Y2F0Y2goZSl7bygpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJtZWRpYV9sb2NhbFZpZGVvX3N0b3JlVmlkZW9fZmFpbHVyZVwifSl9aD8obT1kPygwLHUuR2cpKGgpOigwLHUuZTMpKGgsbiksbygpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJtZWRpYV9sb2NhbFZpZGVvX3N0YXJ0VmlkZW9fc3VjY2Vzc1wifSkpOm8oKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwibWVkaWFfbG9jYWxWaWRlb19zdGFydFZpZGVvX2ZhaWx1cmVcIn0pfWNhdGNoKGUpe28oKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwibWVkaWFfbG9jYWxWaWRlb19zdGFydFZpZGVvX2ZhaWx1cmVcIn0pLCgwLGMuZEspKGg/LmlkKX1lbHNlIHMuc3RyZWFtJiYoKDAsYy5nKShzLnN0cmVhbSkscy5zdHJlYW1PcmlnaW4mJigwLGMuZykocy5zdHJlYW1PcmlnaW4pKTtlKChlPT57aWYoIWUubWVkaWEubG9jYWwudmlkZW8uZW5hYmxlZCYmbSYmaCYmKCgwLGMuZykobSksKDAsYy5nKShoKSxtPXZvaWQgMCxoPXZvaWQgMCksZS5tZWRpYS5sb2NhbC52aWRlby5lbmFibGVkJiZlLm1lZGlhLmxvY2FsLnZpZGVvLnN0cmVhbSYmbSYmaClyZXR1cm4oMCxjLmcpKG0pLHZvaWQoMCxjLmcpKGgpO2UubWVkaWEubG9jYWwudmlkZW8uc3RyZWFtPW0sZS5tZWRpYS5sb2NhbC52aWRlby5zdHJlYW1PcmlnaW49aH0pKSxhJiZkJiZmJiZwKGYpfXJldHVybiB3aW5kb3cuc2V0SW50ZXJ2YWwoKCgpPT57dCgpLm1lZGlhLmxvY2FsLnZpZGVvQ291bnRlci50b3RhbDw9MCYmYy5RUi5zaXplPjAmJjA9PT10KCkudGFsay5zZXNzaW9ucy5zaXplJiYobygpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJtZWRpYS5jYW1lcmFTdHJlYW1MZWFrXCIsZGltZW5zaW9uczp7Y2FtZXJhUmVmczpBcnJheS5mcm9tKHQoKS5tZWRpYS5sb2NhbC5jYW1lcmFSZWZzKS5qb2luKFwiLCBcIil9fSksKDAsYy5hZSkoKSxlKChlPT57ZS5tZWRpYS5sb2NhbC5jYW1lcmFSZWZzLmNsZWFyKCksZS5tZWRpYS5sb2NhbC52aWRlb0NvdW50ZXIudG90YWw9MH0pKSl9KSw1ZTMpLHttZWRpYTp7bG9jYWw6e3Nob3VsZERpc3BsYXlQZXJtaXNzaW9uSW5zdHJ1Y3Rpb25Nb2RhbDohMSxkaXNtaXNzUGVybWlzc2lvbkluc3RydWN0aW9uTW9kYWw6KCk9PntlKChlPT57ZS5tZWRpYS5sb2NhbC5zaG91bGREaXNwbGF5UGVybWlzc2lvbkluc3RydWN0aW9uTW9kYWw9ITF9KSl9LHVwZGF0ZUNhbWVyYVBlcm1pc3Npb25TdGF0ZTp0PT57ZSgoZT0+e2UubWVkaWEubG9jYWwuY2FtZXJhUGVybWlzc2lvblN0YXRlPXR9KSl9LGNhbWVyYVJlZnM6bmV3IFNldCxjYW1lcmFFbmFibGVkUHJlZnM6bmV3IFNldChPYmplY3QudmFsdWVzKHYpLm1hcCgoZT0+e2NvbnN0IHQ9dltlXSxuPWgodCk7aWYoXCJ0cnVlXCI9PT1sb2NhbFN0b3JhZ2UuZ2V0SXRlbShuKSlyZXR1cm4gdH0pKS5maWx0ZXIoKGU9PnZvaWQgMCE9PWUpKSksdmlkZW86e2VuYWJsZWQ6ITEsaW5wdXRJZDpsb2NhbFN0b3JhZ2UuZ2V0SXRlbShwKXx8dm9pZCAwLGlzVHJ5aW5nVG9Mb2FkOiExLHNldElzVHJ5aW5nVG9Mb2FkOnQ9PntlKChlPT57ZS5tZWRpYS5sb2NhbC52aWRlby5pc1RyeWluZ1RvTG9hZD10fSkpfX0sYXVkaW86e2VuYWJsZWQ6XCJmYWxzZVwiIT09bG9jYWxTdG9yYWdlLmdldEl0ZW0oZiksaW5wdXRJZDpsb2NhbFN0b3JhZ2UuZ2V0SXRlbShtKXx8XCJkZWZhdWx0XCJ9LHNjcmVlbjp7ZW5hYmxlZDohMX0scmVxdWVzdENhbWVyYToobixyKT0+e2NvbnN0IGk9YTswPT09dCgpLm1lZGlhLmxvY2FsLmNhbWVyYVJlZnMuc2l6ZSYmaSghMCkudGhlbigoKCk9Pnt0KCkuY2FtZXJhS2l0LnN0YXJ0Q2FtZXJhS2l0U2Vzc2lvbigpLnRoZW4oKCgpPT57MD09PXQoKS5tZWRpYS5sb2NhbC5jYW1lcmFSZWZzLnNpemUmJigwLGMuYWUpKCl9KSl9KSksZSgoZT0+e2NvbnN0e2NhbWVyYVJlZnM6dCxjYW1lcmFFbmFibGVkUHJlZnM6aX09ZS5tZWRpYS5sb2NhbDt0LmFkZChyKSxpLmFkZChuKSxsb2NhbFN0b3JhZ2Uuc2V0SXRlbShoKG4pLFwidHJ1ZVwiKX0pKX0scmVsZWFzZUNhbWVyYToobixyLGkpPT57Y29uc3Qgbz1hO2UoKGU9Pntjb25zdHtjYW1lcmFSZWZzOnQsY2FtZXJhRW5hYmxlZFByZWZzOm99PWUubWVkaWEubG9jYWw7dC5kZWxldGUociksaSYmKG8uZGVsZXRlKG4pLGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGgobikpKX0pKSwwPT09dCgpLm1lZGlhLmxvY2FsLmNhbWVyYVJlZnMuc2l6ZSYmKHQoKS5jYW1lcmFLaXQuY2xlYXJDYW52YXMoKSx0KCkuY2FtZXJhS2l0LmRlc3Ryb3lDYW1lcmFLaXRTZXNzaW9uKCksbyghMSkpfSxzZXRBdWRpb0VuYWJsZWQ6bj0+e2xvY2FsU3RvcmFnZS5zZXRJdGVtKGYsbj9cInRydWVcIjpcImZhbHNlXCIpLGUoKGU9PntlLm1lZGlhLmxvY2FsLmF1ZGlvLmVuYWJsZWQ9bn0pKTtjb25zdHtzdHJlYW06cn09dCgpLm1lZGlhLmxvY2FsLmF1ZGlvO3ImJigwLGMubDgpKHIsbil9LHNldFNjcmVlbkVuYWJsZWQ6YXN5bmMgbj0+e2NvbnN0IHI9dCgpLm1lZGlhLmxvY2FsLnNjcmVlbjtpZihyLmVuYWJsZWQ9PT1uKXJldHVybjtsZXQgaT1yLnN0cmVhbTtuP2k9YXdhaXQoMCxjLk1lKSgpOnZvaWQgMCE9PWkmJigoMCxjLmcpKGkpLGk9dm9pZCAwKSwoMCxsLnhjKShuKSxlKChlPT57ZS5tZWRpYS5sb2NhbC5zY3JlZW4uc3RyZWFtPWksZS5tZWRpYS5sb2NhbC5zY3JlZW4uZW5hYmxlZD1ufSkpfSxlbnN1cmVBdWRpb0ZvckNhbGw6YXN5bmMoKT0+e2NvbnN0e2F1ZGlvOm59PXQoKS5tZWRpYS5sb2NhbDtpZighbi5zdHJlYW0pdHJ5e2NvbnN0IHQ9YXdhaXQoMCxjLllKKShuLmlucHV0SWQpO2kodCksKDAsYy5sOCkodCxuLmVuYWJsZWQpLGUoKGU9PntlLm1lZGlhLmxvY2FsLmF1ZGlvLnN0cmVhbT10fSkpLG8oKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwibWVkaWFfYXVkaW9fZW5zdXJlQXVkaW9Gb3JDYWxsX3N1Y2Nlc3NcIn0pfWNhdGNoKGUpe28oKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwibWVkaWFfYXVkaW9fZW5zdXJlQXVkaW9Gb3JDYWxsX2ZhaWx1cmVcIn0pfX0sZGlzcG9zZUF1ZGlvOigpPT57Y29uc3R7YXVkaW86bn09dCgpLm1lZGlhLmxvY2FsO24uc3RyZWFtJiYoMCxjLmcpKG4uc3RyZWFtKSxlKChlPT57ZS5tZWRpYS5sb2NhbC5hdWRpby5zdHJlYW09dm9pZCAwfSkpfSxzZXRJbnB1dFByZWZlcmVuY2U6YXN5bmMgcj0+e2NvbnN0e21lZGlhOntsb2NhbDppfSxjYW1lcmFLaXQ6e2NsaWVudDpvfX09dCgpO2lmKFwidmlkZW9pbnB1dFwiPT09ci5raW5kKXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbShwLHIuZGV2aWNlSWQpO3RyeXtjb25zdCB0PWF3YWl0KDAsYy5YcSkoci5kZXZpY2VJZCksYT0oMCx1LmUzKSh0LG4pLHM9bz90OmEsbD1pLnZpZGVvLnN0cmVhbSxkPWkudmlkZW8uc3RyZWFtT3JpZ2luO2UoKGU9PntlLm1lZGlhLmxvY2FsLnZpZGVvLmlucHV0SWQ9ci5kZXZpY2VJZCxlLm1lZGlhLmxvY2FsLnZpZGVvLnN0cmVhbT1zLGUubWVkaWEubG9jYWwudmlkZW8uc3RyZWFtT3JpZ2luPXR9KSksbCYmKDAsYy5nKShsKSxkJiYoMCxjLmcpKGQpfWNhdGNoKGUpe319ZWxzZSBpZihcImF1ZGlvaW5wdXRcIj09PXIua2luZCl7bG9jYWxTdG9yYWdlLnNldEl0ZW0obSxyLmRldmljZUlkKTtjb25zdCB0PWF3YWl0KDAsYy5ZSikoci5kZXZpY2VJZCksbj1pLmF1ZGlvLnN0cmVhbTtlKChlPT57ZS5tZWRpYS5sb2NhbC5hdWRpby5pbnB1dElkPXIuZGV2aWNlSWQsZS5tZWRpYS5sb2NhbC5hdWRpby5zdHJlYW09dH0pKSxuJiYoMCxjLmcpKG4pfX0sdmlkZW9Db3VudGVyOnt0b3RhbDowLGFkZDooKT0+ZSgoZT0+e2UubWVkaWEubG9jYWwudmlkZW9Db3VudGVyLnRvdGFsKyt9KSksc3VidHJhY3Q6KCk9PmUoKGU9PntlLm1lZGlhLmxvY2FsLnZpZGVvQ291bnRlci50b3RhbC0tfSkpfX0scmVtb3RlOnthZGRWaWRlb1N0cmVhbToodCxuKT0+e2UoKGU9PntlLm1lZGlhLnJlbW90ZS52aWRlb1N0cmVhbXNbdF09bn0pKX0scmVtb3ZlVmlkZW9TdHJlYW06dD0+e2UoKGU9PntkZWxldGUgZS5tZWRpYS5yZW1vdGUudmlkZW9TdHJlYW1zW3RdfSkpfSx2aWRlb1N0cmVhbXM6e30sYWRkQXVkaW9TdHJlYW06KHQsbik9PntlKChlPT57ZS5tZWRpYS5yZW1vdGUuYXVkaW9TdHJlYW1zW3RdPW59KSl9LHJlbW92ZUF1ZGlvU3RyZWFtOnQ9PntlKChlPT57ZGVsZXRlIGUubWVkaWEucmVtb3RlLmF1ZGlvU3RyZWFtc1t0XX0pKX0sYXVkaW9TdHJlYW1zOnt9fX19fX0sMzA5MTA6KGUsdCxuKT0+e24uZCh0LHtTXzooKT0+ZixYOigpPT5tLGlPOigpPT5wLGUzOigpPT5sLEdnOigpPT51LGExOigpPT5kfSk7dmFyIHI9bigyNzU0OCksaT1uKDM5MzE2KTtsZXQgbztjb25zdCBhPW5ldyBNYXA7bGV0IHM9MDtjb25zdCBjPTFlMy8zMDtmdW5jdGlvbiBsKGUsdCl7Y29uc3QgbD1lLmdldFZpZGVvVHJhY2tzKClbMF07aWYoIXdpbmRvdy5NZWRpYVN0cmVhbVRyYWNrUHJvY2Vzc29yfHwhd2luZG93Lk1lZGlhU3RyZWFtVHJhY2tHZW5lcmF0b3IpcmV0dXJuIGZ1bmN0aW9uKGUsdCl7Y29uc3QgbD1lLmdldFZpZGVvVHJhY2tzKClbMF0se3dpZHRoOnUsaGVpZ2h0OmR9PWwuZ2V0U2V0dGluZ3MoKSxmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIikscD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidmlkZW9cIik7bGV0IG09bnVsbDtwLm11dGVkPSEwLHAuYXV0b3BsYXk9ITAscC5zcmNPYmplY3Q9ZSxmLndpZHRoPXV8fDAsZi5oZWlnaHQ9ZHx8MCxmLnN0eWxlLnBvc2l0aW9uPVwiYWJzb2x1dGVcIixmLnN0eWxlLm9wYWNpdHk9XCIwXCIsZi5zdHlsZS5wb2ludGVyRXZlbnRzPVwibm9uZVwiLHAuc3R5bGUub3BhY2l0eT1cIjBcIixwLnN0eWxlLnBvaW50ZXJFdmVudHM9XCJub25lXCIscC5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCIscC5zdHlsZS5sZWZ0PVwiMFwiLHAuc3R5bGUudG9wPVwiMFwiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZiksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChwKSx0KGYpO2NvbnN0IGg9Zi5nZXRDb250ZXh0KFwiMmRcIik7cmV0dXJuIGg/LnNjYWxlKC0xLDEpLG09ZnVuY3Rpb24oZSxjKXtvfHwobz0oMCxyLlVkKShuZXcgaS5xKG5ldyBVUkwobig4MzUyMyksbi5iKSx7bmFtZTpcInRpbWVyLXdvcmtlclwifSkuZ2V0V29ya2VyKCkpKTtjb25zdCB1PSsrcztyZXR1cm4gYS5zZXQodSxvLnNldEludGVydmFsKCgwLHIuc2opKChmdW5jdGlvbigpe2g/LmRyYXdJbWFnZShwLC1mLndpZHRoLDApLFwibGl2ZVwiIT09bC5yZWFkeVN0YXRlJiYobSYmZnVuY3Rpb24oZSl7aWYoIW8pcmV0dXJuO2NvbnN0IHQ9YS5nZXQoZSk7dCYmKGFzeW5jKCk9Pnt0cnl7Y29uc3QgZT1hd2FpdCB0O2F3YWl0IG8uY2xlYXJJbnRlcnZhbChlKX1maW5hbGx5e2EuZGVsZXRlKGUpfX0pKCl9KG0pLGYucGFyZW50Tm9kZT8ucmVtb3ZlQ2hpbGQoZikscC5wYXJlbnROb2RlPy5yZW1vdmVDaGlsZChwKSx0KCkpfSkpLGMpKSx1fSgwLGMpLGYuY2FwdHVyZVN0cmVhbSgpfShlLHQpO2NvbnN0IHU9bmV3IE1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3Ioe3RyYWNrOmx9KSxkPW5ldyBNZWRpYVN0cmVhbVRyYWNrR2VuZXJhdG9yKHtraW5kOlwidmlkZW9cIn0pLHt3aWR0aDpmLGhlaWdodDpwfT1sLmdldFNldHRpbmdzKCksbT1uZXcgT2Zmc2NyZWVuQ2FudmFzKDEsMSksaD1tLmdldENvbnRleHQoXCIyZFwiKTttLndpZHRoPWZ8fDAsbS5oZWlnaHQ9cHx8MDtjb25zdCB2PW5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybShlLHQpe2NvbnN0IG49ZnVuY3Rpb24oZSx0LG4pe2NvbnN0IHI9bi50aW1lc3RhbXA7cmV0dXJuIHQ/KHQuc2NhbGUoLTEsMSksdC5kcmF3SW1hZ2UobiwtZS53aWR0aCwwKSxuLmNsb3NlKCksbmV3IFZpZGVvRnJhbWUoZSx7dGltZXN0YW1wOnJ9KSk6bn0obSxoLGUpO3QuZW5xdWV1ZShuKX0sZmx1c2g6ZT0+e2UudGVybWluYXRlKCl9fSk7cmV0dXJuIHUucmVhZGFibGUucGlwZVRocm91Z2godikucGlwZVRvKGQud3JpdGFibGUpLmNhdGNoKCgoKT0+e2wuc3RvcCgpfSkpLG5ldyBNZWRpYVN0cmVhbShbZF0pfWZ1bmN0aW9uIHUoZSl7Zm9yKGNvbnN0IHQgb2YgZS5nZXRBdWRpb1RyYWNrcygpKXQuc3RvcCgpO3JldHVybiBlfWNvbnN0IGQ9XCJ2aWRlb1Blcm1pc3Npb25Qcm9tcHRlZENvdW50XCIsZj1cImF1ZGlvUGVybWlzc2lvblByb21wdGVkQ291bnRcIjtmdW5jdGlvbiBwKGUpe2Zvcihjb25zdCB0IG9mIGUpe2NvbnN0IGU9TnVtYmVyKHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0KSk7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKHQsaXNOYU4oZSk/XCIxXCI6KGUrMSkudG9TdHJpbmcoKSl9fWZ1bmN0aW9uIG0oZSl7Y29uc3QgdD1bXTtmb3IoY29uc3QgbiBvZiBlKXtjb25zdCBlPU51bWJlcih3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0obikpO3QucHVzaChpc05hTihlKT8wOmUpfXJldHVybiB0fX0sNzkxNjU6KGUsdCxuKT0+e24uZCh0LHtxTTooKT0+YSxsdzooKT0+bCxrSDooKT0+c30pO3ZhciByPW4oNTg4NjEpLGk9big0MTMxKSxvPXtQaW5uZWRGZWVkSXRlbTowLEluQ2FsbDoxLENhbGxpbmc6MixSaW5naW5nOjMsT25Hb2luZ0NhbGw6NCxPdGhlcjo1fSxhPXtSaW5naW5nOjAsQ2FsbGluZzoxLEluQ2FsbDoyLFR5cGluZzozLENhbGxPbmdvaW5nOjQsQXVkaW9DYWxsTWlzc2VkOjUsQXVkaW9DYWxsQ2FsbGVkOjYsVmlkZW9DYWxsTWlzc2VkOjcsVmlkZW9DYWxsQ2FsbGVkOjgsQ2hhdFNjcmVlbnNob3R0ZWQ6OSxDaGF0V2FpdGluZ1RvU2VuZDoxMCxDaGF0U2VuZGluZzoxMSxDaGF0RmFpbGVkVG9TZW5kOjEyLENoYXRBbmRTbmFwTmV3OjEzLENoYXROZXc6MTQsQ2hhdFZpZXdlZDoxNSxDaGF0UmVhY3Rpb246MTYsQ2hhdFJlbW92ZWRSZWFjdGlvbjoxNyxTbmFwUmVwbGF5ZWQ6MTgsU25hcFNjcmVlbnNob3R0ZWQ6MTksU25hcFdhaXRpbmdUb1NlbmQ6MjAsU25hcFNlbmRpbmc6MjEsU25hcEZhaWxlZFRvU2VuZDoyMixTbmFwTmV3OjIzLFNuYXBWaWV3ZWQ6MjQsU25hcFJlYWN0aW9uOjI1LFNuYXBSZW1vdmVkUmVhY3Rpb246MjYsU25hcEFuZFJlYWN0aW9uTmV3OjI3LENvbnZlcnNhdGlvbkNyZWF0ZWQ6MjgsQ29udmVyc2F0aW9uTmFtZUNoYW5nZWQ6MjksQ29udmVyc2F0aW9uTWVtYmVyQWRkZWQ6MzAsQ29udmVyc2F0aW9uTWVtYmVyS2lja2VkOjMxLENoYXRVbmtub3duVmlld2VkOjMyLENoYXRNeUFJRGlzYWJsZWQ6MzN9O2Z1bmN0aW9uIHMoZSx0KXtjb25zdCBuPVtdLHM9W107aWYoZSYmKGUucmluZ2luZz8obi5wdXNoKGEuUmluZ2luZykscy5wdXNoKG8uUmluZ2luZykpOmUuY2FsbGluZz8obi5wdXNoKGEuQ2FsbGluZykscy5wdXNoKG8uQ2FsbGluZykpOmUubG9jYWxQdWJsaXNoZWRNZWRpYSE9PWkucFUuTk9ORT8obi5wdXNoKGEuSW5DYWxsKSxzLnB1c2goby5JbkNhbGwpKTplLmNhbGxQYXJ0aWNpcGFudHMubGVuZ3RoJiYobi5wdXNoKGEuQ2FsbE9uZ29pbmcpLHMucHVzaChvLk9uR29pbmdDYWxsKSksZS50eXBpbmdQYXJ0aWNpcGFudHMuc29tZSgoZT0+ZS50eXBpbmdTdGF0ZT09PWkub2MuVFlQSU5HfHxlLnR5cGluZ1N0YXRlPT09aS5vYy5QQVVTRUQpKSYmbi5wdXNoKGEuVHlwaW5nKSksdC5mZWVkSXRlbS5jaGF0JiZuLnB1c2goZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZSByLlEzLlNFTkRJTkc6cmV0dXJuIGEuQ2hhdFNlbmRpbmc7Y2FzZSByLlEzLldBSVRJTkdfVE9fU0VORDpyZXR1cm4gYS5DaGF0V2FpdGluZ1RvU2VuZDtjYXNlIHIuUTMuRkFJTEVEOnJldHVybiBhLkNoYXRGYWlsZWRUb1NlbmQ7Y2FzZSByLlEzLlNDUkVFTlNIT1RURUQ6cmV0dXJuIGEuQ2hhdFNjcmVlbnNob3R0ZWQ7Y2FzZSByLlEzLlJFQUNUSU9OOnJldHVybiBhLkNoYXRSZWFjdGlvbjtjYXNlIHIuUTMuUkVNT1ZFRFJFQUNUSU9OOnJldHVybiBhLkNoYXRSZW1vdmVkUmVhY3Rpb247Y2FzZSByLlEzLlVOS05PV046cmV0dXJuIHQ/YS5DaGF0VW5rbm93blZpZXdlZDphLkNoYXROZXc7ZGVmYXVsdDpyZXR1cm4gdD9hLkNoYXRWaWV3ZWQ6YS5DaGF0TmV3fX0odC5mZWVkSXRlbS5jaGF0LnN0YXRlLHQudmlld2VkKSksdC5mZWVkSXRlbS5zbmFwKXtjb25zdHtzdGF0ZTplLGNvbWJvU25hcEl0ZW1JbmZvOml9PXQuZmVlZEl0ZW0uc25hcDtuLnB1c2goZnVuY3Rpb24oZSx0LG4saSl7c3dpdGNoKGUpe2Nhc2Ugci52Qy5SRVBMQVlFRDpyZXR1cm4gYS5TbmFwUmVwbGF5ZWQ7Y2FzZSByLnZDLlNDUkVFTlNIT1RURUQ6cmV0dXJuIGEuU25hcFNjcmVlbnNob3R0ZWQ7Y2FzZSByLnZDLlNFTkRfRkFJTEVEOnJldHVybiBhLlNuYXBGYWlsZWRUb1NlbmQ7Y2FzZSByLnZDLlNFTkRJTkc6cmV0dXJuIGEuU25hcFNlbmRpbmc7Y2FzZSByLnZDLldBSVRJTkdfVE9fU0VORDpyZXR1cm4gYS5TbmFwV2FpdGluZ1RvU2VuZDtjYXNlIHIudkMuUkVBQ1RJT046cmV0dXJuIGEuU25hcFJlYWN0aW9uO2Nhc2Ugci52Qy5SRU1PVkVEUkVBQ1RJT046cmV0dXJuIGEuU25hcFJlbW92ZWRSZWFjdGlvbjtkZWZhdWx0OnJldHVybiB0P2EuU25hcFZpZXdlZDpuP2EuQ2hhdEFuZFNuYXBOZXc6aT9hLlNuYXBBbmRSZWFjdGlvbk5ldzphLlNuYXBOZXd9fShlLHQudmlld2VkLGk/Lmhhc05ld0NoYXQsaT8uaGFzTmV3UmVhY3Rpb24pKX1yZXR1cm4gdC5mZWVkSXRlbS5jYWxsJiZuLnB1c2goZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZSByLnJjLk1JU1NFRDpyZXR1cm4gdD9hLlZpZGVvQ2FsbE1pc3NlZDphLkF1ZGlvQ2FsbE1pc3NlZDtjYXNlIHIucmMuQ0FMTEVEOnJldHVybiB0P2EuVmlkZW9DYWxsQ2FsbGVkOmEuQXVkaW9DYWxsQ2FsbGVkO2RlZmF1bHQ6cmV0dXJuIGEuQ2hhdFZpZXdlZH19KHQuZmVlZEl0ZW0uY2FsbC5zdGF0ZSx0LmZlZWRJdGVtLmNhbGwuaXNWaWRlbykpLHQuZmVlZEl0ZW0uY29udmVyc2F0aW9uJiZuLnB1c2goZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2Ugci5iYi5DUkVBVEVEOnJldHVybiBhLkNvbnZlcnNhdGlvbkNyZWF0ZWQ7Y2FzZSByLmJiLk5BTUVfQ0hBTkdFRDpyZXR1cm4gYS5Db252ZXJzYXRpb25OYW1lQ2hhbmdlZDtjYXNlIHIuYmIuTUVNQkVSX0FEREVEOnJldHVybiBhLkNvbnZlcnNhdGlvbk1lbWJlckFkZGVkO2Nhc2Ugci5iYi5NRU1CRVJfS0lDS0VEOnJldHVybiBhLkNvbnZlcnNhdGlvbk1lbWJlcktpY2tlZDtkZWZhdWx0OnJldHVybiBhLkNoYXRWaWV3ZWR9fSh0LmZlZWRJdGVtLmNvbnZlcnNhdGlvbi5zdGF0ZSkpLHMucHVzaChvLk90aGVyKSx7c29ydGVkU3RhdHVzOm4uc29ydCgoKGUsdCk9PmUtdCkpLGZlZWRQcmlvcml0eVN0YXR1czpzLnNvcnQoKChlLHQpPT5lLXQpKX19Y29uc3QgYz1bYS5DaGF0TmV3LGEuQ2hhdEFuZFNuYXBOZXcsYS5TbmFwTmV3LGEuU25hcFJlYWN0aW9uLGEuQ2hhdFJlYWN0aW9uLGEuU25hcEFuZFJlYWN0aW9uTmV3XTtmdW5jdGlvbiBsKGUpe3JldHVybiBjLmluY2x1ZGVzKGUpfX0sODgwMzc6KGUsdCxuKT0+e24uZCh0LHtOODooKT0+TixkUDooKT0+cGUsWkQ6KCk9PkosWTU6KCk9PlMsakM6KCk9Pl8saHc6KCk9PnoscDE6KCk9PlcsVXU6KCk9PkssbDU6KCk9PkksR3E6KCk9PmxlLEZGOigpPT5qLElvOigpPT5ILEVEOigpPT5DLExvOigpPT5lZSx4bzooKT0+Qix3VjooKT0+dmUsSkY6KCk9PmdlLGM3OigpPT5jZSxLOTooKT0+VCx0ODooKT0+YixCNjooKT0+dWUsRDY6KCk9PkcsZnY6KCk9PlYseE06KCk9PlksTU06KCk9Pmssd0M6KCk9PlNlLHpZOigpPT5FZSxFNDooKT0+TyxXSjooKT0+RixvNDooKT0+cSxKVjooKT0+b2UsRUw6KCk9PmllLGcyOigpPT5RLEJfOigpPT55ZSxIZTooKT0+UCx1QjooKT0+TSxTRTooKT0+eCxrdTooKT0+QSxPNDooKT0+UixzYzooKT0+JCwkTjooKT0+UmUsVGU6KCk9PkNlLHlUOigpPT5BZSxMTzooKT0+VGUsclU6KCk9PmJlLGNVOigpPT5aLFY3OigpPT5JZSx0MTooKT0+X2UsYjY6KCk9PkQsSko6KCk9PlUsSUM6KCk9PncsRkc6KCk9Pkx9KTt2YXIgcj1uKDc1NDcyKSxpPW4ubihyKSxvPW4oMzk2OTMpLGE9bi5uKG8pLHM9big1ODg2MSksYz1uKDIwNTczKSxsPW4oMzg5NzApLHU9big3OTE2NSksZD1uKDU3NDMyKSxmPW4oOTM0OSkscD1uKDI1MDY5KSxtPW4oNjM5MjEpLGg9big3MzMwMyksdj1uLm4oaCksZz1uKDk0MDMwKSx5PW4oMTg1NDcpLEU9big0NDc4NSk7Y29uc3QgXz0oZSx0KT0+dD9lLm1lc3NhZ2luZy5jb252ZXJzYXRpb25zWygwLEUuTWMpKHQpXTp2b2lkIDAsST1lPT50PT4oKGUsdCk9Pl8oZSx0KT8uY29udmVyc2F0aW9uKSh0LGUpLFM9KGUsdCk9Pl8oZSx0KT8uZXJyb3IsYj1lPT4oMCxjLlAxKSgodD0+Xyh0LGUpKSwoZT0+ZT8oMCxkLllNKShlLm1lc3NhZ2VzKTooMCxnLm93KSgpKSksVD0oZSx0KT0+KDAsYy5QMSkoKHQ9Pl8odCxlKSksKGU9PntpZihcImJpZ2ludFwiPT10eXBlb2YgdClyZXR1cm4gZT8ubWVzc2FnZXM/LmdldCh0KX0pKSxDPWU9PmUubWVzc2FnaW5nLmZldGNoQ29udmVyc2F0aW9uLEE9ZT0+KDAsYy5QMSkoKGU9PmUubWVzc2FnaW5nLmNvbnZlcnNhdGlvbnMpLCh0PT57Y29uc3Qgbj17fTtmb3IoY29uc3QgciBvZiBlKXtpZighci5jb252ZXJzYXRpb25JZCljb250aW51ZTtjb25zdCBlPXRbci5jb252ZXJzYXRpb25JZF07ZT8uY29udmVyc2F0aW9uJiYobltyLmNvbnZlcnNhdGlvbklkXT1lLmNvbnZlcnNhdGlvbil9cmV0dXJuIG59KSksUj1lPT4oMCxjLlAxKShtLm00LCh0PT57Y29uc3Qgbj17fTtmb3IoY29uc3QgciBvZiBlKXtpZighci51c2VySWQpY29udGludWU7Y29uc3QgZT10LmdldCgoMCxFLk9ZKShyLnVzZXJJZCkpO2UmJihuW3IudXNlcklkXT1lKX1yZXR1cm4gbn0pKSxrPWU9PmUubWVzc2FnaW5nLmludml0ZVBhcnRpY2lwYW50cyxPPWU9PmUubWVzc2FnaW5nLmxlYXZlQ29udmVyc2F0aW9uLE49ZT0+ZS5tZXNzYWdpbmcuY2xlYXJDb252ZXJzYXRpb24sdz1lPT5lLm1lc3NhZ2luZy51cGRhdGVNZXNzYWdlTm90aWZpY2F0aW9uU2V0dGluZ3MsRD1lPT5lLm1lc3NhZ2luZy51cGRhdGVDb252ZXJzYXRpb25SZXRlbnRpb25Qb2xpY3ksUD1lPT5lLm1lc3NhZ2luZy5yZWFjdFRvTWVzc2FnZSxNPWU9PmUubWVzc2FnaW5nLnJlbW92ZVJlYWN0aW9uLEw9ZT0+ZS5tZXNzYWdpbmcudXBkYXRlTWVzc2FnZSxVPWU9PmUubWVzc2FnaW5nLnVwZGF0ZUNvbnZlcnNhdGlvblRpdGxlLHg9ZT0+ZS5tZXNzYWdpbmcucmV0cnlTZW5kTWVzc2FnZSxGPWU9PmUubWVzc2FnaW5nLm1lZGlhTWVzc2FnZXNEaXNwbGF5ZWQsQj1lPT4oMCxjLlAxKShJKGUpLG0ubTQsKChlLHQpPT5lP2EoKShlLnBhcnRpY2lwYW50cy5tYXAoKGU9PnQuZ2V0KGUucGFydGljaXBhbnRJZCkpKSk6KDAsZy5vdykoKSkpLFY9ZT0+KDAsYy5QMSkoSShlKSxsLnlLLCgoZSx0KT0+ZSYmdD9lLnBhcnRpY2lwYW50cy5yZWR1Y2UoKChuLHIpPT4obi5zZXQoci5wYXJ0aWNpcGFudElkLCgwLHkuUykoZSxyLnBhcnRpY2lwYW50SWQsdCkpLG4pKSxuZXcgTWFwKTooMCxnLnNfKSgpKSksRz1lPT5lLm1lc3NhZ2luZy5nZXRPbmVPbk9uZUNvbnZlcnNhdGlvbklkLEg9ZT0+ZS5tZXNzYWdpbmcuZmV0Y2hDb252ZXJzYXRpb25CeVBhcnRpY2lwYW50cyxXPWU9PmUubWVzc2FnaW5nLmNyZWF0ZUNvbnZlcnNhdGlvbixqPWU9PmUubWVzc2FnaW5nLmVuc3VyZU5ldHdvcmtDb252ZXJzYXRpb24sWj1lPT5lLm1lc3NhZ2luZy5zeW5jRmVlZCx6PWU9PmUubWVzc2FnaW5nLmNyZWF0ZUNvbnZlcnNhdGlvbkZvclVzZXJzLEs9ZT0+ZS5tZXNzYWdpbmcuY3JlYXRlQ29udmVyc2F0aW9uU2VuZFRvLFk9ZT0+ZS5tZXNzYWdpbmcuZ3JvdXBzTWV0YWRhdGEscT1lPT5lLm1lc3NhZ2luZy5uZXdHcm91cHMsWD1lPT5lLm1lc3NhZ2luZy5ncm91cHNNZXRhZGF0YUJ5UGFydGljaXBhbnRzLFE9ZT0+ZS5tZXNzYWdpbmcucXVlcnlVc2VyR3JvdXBzTWV0YWRhdGEsSj1lPT5lLm1lc3NhZ2luZy5jb252ZXJzYXRpb25FbnRyeVNvdXJjZSwkPWU9PmUubWVzc2FnaW5nLnNldENvbnZlcnNhdGlvbkVudHJ5U291cmNlLGVlPWU9PmUubWVzc2FnaW5nLmZlZWQsdGU9ZT0+dD0+dC5tZXNzYWdpbmcuZmVlZFsoMCxFLk1jKShlKV0sbmU9ZT0+KDAsYy5QMSkodGUoZSksKDAsZi52MykoZSksKChlLHQpPT5lPygwLHUua0gpKHQsZS5kaXNwbGF5SW5mbykuc29ydGVkU3RhdHVzOltdKSkscmU9KDAsYy5QMSkoZWUsKGU9PigwLGQubUMpKGUpKSksaWU9KDAsYy5QMSkocmUsbC55SywoKGUsdCk9Pm5ldyBNYXAoZS5maWx0ZXIoKGU9PmUuY29udmVyc2F0aW9uVHlwZT09PXMuaTEuT05FT05PTkUpKS5tYXAoKGU9Pntjb25zdCBuPSgwLGQuYUQpKGUsdCk/P2UucGFydGljaXBhbnRzWzBdO3JldHVyblsoMCxFLk1jKShuKSxlXX0pKSkpKSxvZT1lPT4oMCxjLlAxKShpZSwodD0+dC5nZXQoKDAsRS5NYykoZSkpKSksYWU9KDAsYy5QMSkocmUsbC5DcyxsLnlLLG0uc2wsKChlLHQsbixyKT0+Mj09PXQ/ZS5maWx0ZXIoKGU9PigwLGQuUU8pKGUsbixyKSkpOmUpKSxzZT0oMCxjLlAxKShhZSwoZT0+ZS5wcmVzZW5jZS5hY3RpdmVDb252ZXJzYXRpb25JbmZvKSwoKGUsdCk9PmUubWFwKChlPT57Y29uc3Qgbj10LmdldChlLmNvbnZlcnNhdGlvbklkKSxyPSgwLHUua0gpKG4sZS5kaXNwbGF5SW5mbykuZmVlZFByaW9yaXR5U3RhdHVzWzBdO3JldHVybnsuLi5lLGZlZWRQcmlvcml0eTpyfX0pKS5zb3J0KCgoZSx0KT0+ZS5mZWVkUHJpb3JpdHktdC5mZWVkUHJpb3JpdHkpKSkpLGNlPWU9PigwLGMuUDEpKG5lKGUpLChlPT5lWzBdPz91LnFNLkNoYXRWaWV3ZWQpKSxsZT1lPT5lLm1lc3NhZ2luZy5lbnN1cmVDb252ZXJzYXRpb25BdmFpbGFibGUsdWU9ZT0+KDAsYy5QMSkobmUoZSksKGU9PmUuZmluZCh1Lmx3KSkpLGRlPXtFWEFDVDoxZTQsU1RBUlRfV0lUSDoxZTMsRk9VTkQ6MSxOT1RfRk9VTkQ6MCxJU19USVRMRV9NQVRDSDoxMCxJU19GUklFTkQ6MTAsU0hPVUxEX1JFTU9WRTotMSxQSU5ORUQ6TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ9LGZlPShlLHQpPT57aWYodm9pZCAwPT09ZSlyZXR1cm4gZGUuTk9UX0ZPVU5EO2lmKFwiXCIhPT10JiZlLnRvTG93ZXJDYXNlKCk9PT10KXJldHVybiBkZS5FWEFDVDtjb25zdCBuPWUudG9Mb3dlckNhc2UoKS5tYXRjaCh0KTtyZXR1cm4gbiYmdm9pZCAwIT09bi5pbmRleD8wPT09bi5pbmRleD9kZS5TVEFSVF9XSVRIOmRlLkZPVU5EOmRlLk5PVF9GT1VORH0scGU9KGUsdCxuLHIsaSxvKT0+e2NvbnN0IGE9ZS50b0xvd2VyQ2FzZSgpO2lmKG8pcmV0dXJuIGRlLlBJTk5FRDtsZXQgcz1kZS5TSE9VTERfUkVNT1ZFO2NvbnN0IGM9Mj09PXIubGVuZ3RoJiZcIlwiIT09ZT9kZS5JU19GUklFTkQ6MSxsPWZlKGksYSk7aWYobCYmKHM9bCpkZS5JU19USVRMRV9NQVRDSCkscz49ZGUuRVhBQ1QpcmV0dXJuIHMqYztmb3IoY29uc3QgZSBvZiByKXtpZihlPT09biljb250aW51ZTtjb25zdCByPXQuZ2V0KGUpO2lmKCFyKWNvbnRpbnVlO2NvbnN0IGk9ZmUoci5kaXNwbGF5LGEpO2lmKGk9PT1kZS5FWEFDVCl7cz1kZS5FWEFDVDticmVha31jb25zdCBvPWZlKHIuZGlzcGxheV9uYW1lLGEpO2lmKG89PT1kZS5FWEFDVCl7cz1kZS5FWEFDVDticmVha31jb25zdCBjPWZlKHIubXV0YWJsZV91c2VybmFtZSxhKTtpZihjPT09ZGUuRVhBQ1Qpe3M9ZGUuRVhBQ1Q7YnJlYWt9cz1NYXRoLm1heChzLGksbyxjKX1yZXR1cm4gcz09PWRlLlNIT1VMRF9SRU1PVkU/ZGUuU0hPVUxEX1JFTU9WRTpzKmN9LG1lPShlLHQsbik9Pntjb25zdHtmZWVkSXRlbTpyfT1lO3JldHVybiBCb29sZWFuKCFuJiZmdW5jdGlvbihlKXtyZXR1cm4gZS5jaGF0Tm90aWZpY2F0aW9uUHJlZmVyZW5jZT09PXMudWouQUxMX01FU1NBR0VTfSh0KSYmIWUudmlld2VkJiZmdW5jdGlvbihlKXtyZXR1cm4gZS5jYWxsfHxlLmNoYXR8fGUuY29udmVyc2F0aW9ufHxlLnNuYXA/LmNvbWJvU25hcEl0ZW1JbmZvPy5oYXNOZXdDaGF0fHxlLnNuYXA/LmNvbWJvU25hcEl0ZW1JbmZvPy5oYXNOZXdSZWFjdGlvbn0ocikpfTtmdW5jdGlvbiBoZShlLHQsbil7Y29uc3R7ZmVlZEl0ZW06cn09ZTtyZXR1cm4gQm9vbGVhbighbiYmZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2hhdE5vdGlmaWNhdGlvblByZWZlcmVuY2U9PT1zLnVqLk1FTlRJT05fT05MWX0odCkmJiFlLnZpZXdlZCYmci5jaGF0Py5zdGF0ZT09PXMuUTMuTUVOVElPTkVEKX1jb25zdCB2ZT0oKT0+KDAsYy5QMSkoWSxtLm00LGwueUssKChlLHQpPT50KSwoKGUsdCxuLHIpPT57Y29uc3Qgbz1lLm1hcCgoZT0+KHtpdGVtOmUsc2NvcmU6cGUocix0LG4sZS5jb252ZXJzYXRpb25NZXRhZGF0YS5wYXJ0aWNpcGFudHMubWFwKChlPT5lLnBhcnRpY2lwYW50SWQpKSxlLmNvbnZlcnNhdGlvbk1ldGFkYXRhLnRpdGxlKX0pKSkuZmlsdGVyKChlPT5lLnNjb3JlPjApKTtyZXR1cm4gaSgpKG8sKGU9Pi1lLnNjb3JlKSl9KSksZ2U9ZT0+KDAsYy5QMSkoWCwodD0+dFsoMCxkLkxNKShlKV0/P1tdKSkseWU9ZnVuY3Rpb24oKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3JldHVybigwLGMuUDEpKHNlLG0ubTQsbC55SywoKHQsbixyKT0+e2NvbnN0IG89dC5tYXAoKHQ9Pih7aXRlbTp0LHNjb3JlOnBlKFwiXCIsbixyLHQucGFydGljaXBhbnRzLHQuY29udmVyc2F0aW9uVGl0bGUsZT92b2lkIDA6dC5waW5uZWRUaW1lc3RhbXBNcyl9KSkpLmZpbHRlcigoZT0+ZS5zY29yZT4wKSksYT1pKCkobywoZT0+LWUuc2NvcmUpKTtyZXR1cm57cmFua2VkRmVlZEl0ZW1zOmEscmFua2luZzooMCxwLmMzKShhKX19KSl9LEVlPWU9PigwLGMuUDEpKChlPT5lLm1lc3NhZ2luZy5sb2NrZWRDb252ZXJzYXRpb25JZHMpLCh0PT5lJiZ0LmhhcygoMCxFLk1jKShlKSkpKSxfZT0oMCxjLlAxKShhZSxsLnlLLCgoZSx0KT0+e3JldHVybiBuPWUscj1lPT57bGV0e2Rpc3BsYXlJbmZvOm4sbm90aWZpY2F0aW9uU2V0dGluZ3M6cn09ZTtjb25zdCBpPXQ9PT1uLmZlZWRJdGVtQ3JlYXRvcklkO3JldHVybiBtZShuLHIsaSl8fGhlKG4scixpKX0sdigpKG4sKGU9PnIoZSk/MTowKSk7dmFyIG4scn0pKSxJZT1lPT4oMCxjLlAxKSh0ZShlKSxsLnlLLCgoZSx0KT0+e2lmKGUpe2NvbnN0e2Rpc3BsYXlJbmZvOm4sbm90aWZpY2F0aW9uU2V0dGluZ3M6cn09ZSxpPXQ9PT1uLmZlZWRJdGVtQ3JlYXRvcklkO3JldHVybiBtZShuLHIsaSl8fGhlKG4scixpKX1yZXR1cm4hMX0pKSxTZT0oMCxjLlAxKSgoZT0+ZS5tZXNzYWdpbmcuaXNDb21wb3NpbmcpLChlPT5lLm1lc3NhZ2luZy5zZXRJc0NvbXBvc2luZyksKChlLHQpPT4oe2lzQ29tcG9zaW5nOmUsc2V0SXNDb21wb3Npbmc6dH0pKSksYmU9KDAsYy5QMSkoKGU9PmUubWVzc2FnaW5nLnN0YXJ0ZWRWaWV3aW5nU25hcCksKGU9PmUubWVzc2FnaW5nLmZpbmlzaGVkVmlld2luZ1NuYXApLChlPT5lLm1lc3NhZ2luZy5yZXF1ZXN0ZWRSZXBsYXlTbmFwRnJvbUNvbnYpLChlPT5lLm1lc3NhZ2luZy5yZXF1ZXN0ZWRSZXBsYXlTbmFwRnJvbUZlZWQpLChlPT5lLm1lc3NhZ2luZy5zbmFwRG93bmxvYWRTdGF0dXNDaGFuZ2VkKSwoKGUsdCxuLHIsaSk9Pih7c3RhcnRlZFZpZXdpbmdTbmFwOmUsZmluaXNoZWRWaWV3aW5nU25hcDp0LHJlcXVlc3RlZFJlcGxheVNuYXBGcm9tQ29udjpuLHJlcXVlc3RlZFJlcGxheVNuYXBGcm9tRmVlZDpyLHNuYXBEb3dubG9hZFN0YXR1c0NoYW5nZWQ6aX0pKSksVGU9ZT0+ZS5tZXNzYWdpbmcuc2hvdWxkVXNlTmV3Q3JlYXRlQ29udmVyc2F0aW9uLENlPWU9PmUubWVzc2FnaW5nLnNldFNob3VsZFVzZU5ld0NyZWF0ZUNvbnZlcnNhdGlvbixBZT1lPT5lLm1lc3NhZ2luZy5zaG91bGRFbmFibGVFeGlmVHJpbW1pbmcsUmU9ZT0+ZS5tZXNzYWdpbmcuc2V0U2hvdWxkRW5hYmxlRXhpZlRyaW1taW5nfSw1MDMzOTooZSx0LG4pPT57bi5kKHQseyRZOigpPT56ZSxFZzooKT0+WWUsZl86KCk9PkplfSk7dmFyIHI9big4NTU2NCksaT1uLm4ociksbz1uKDQ0OTA4KSxhPW4ubihvKSxzPW4oMTg0NDYpLGM9bi5uKHMpLGw9big3MTM3MSksdT1uKDU4ODYxKSxkPW4oNDUzNjMpLGY9bi5uKGQpLHA9bigxNjc3KSxtPW4oOTc3ODIpLGg9bi5uKG0pLHY9big4MzkyNyksZz1uKDE5MTQ0KSx5PW4oODI0OTIpLEU9bi5uKHkpLF89big0MDMzMSksST1uKDIxMjk5KSxTPW4oODE0NDUpLGI9big3NzQyKSxUPW4oNjk4NzUpLEM9big3NTM2OCksQT1uKDQ0NTM3KSxSPW4oNTcyODcpLGs9big3MDMxOCksTz1uKDE5NTkpLE49bigyNzU0OCksdz1uKDQ4OTM0KSxEPW4oODY5NTMpLFA9bigzNTAwNyksTT1uKDM0MjEyKSxMPW4oNjkzMDApLFU9big0NDc4NSkseD1uKDMwMDEpLEY9bigzMjM1Myk7aCgpLmdldExvZ2dlcihcIltNZXNzYWdpbmcgQ2xpZW50XVwiKTtjbGFzcyBCIGV4dGVuZHMgTC55e2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZS5tZXNzYWdlKSx0aGlzLmNhbGxiYWNrU3RhdHVzPXR9fWZ1bmN0aW9uIFYoZSx0KXtyZXR1cm57b25FcnJvcjpuPT57bGV0IHI7cmV0dXJuIHI9bj09PXUuRTIuVU5BVVRIT1JJWkVEP25ldyBNLnZEKGAke2V9IGVycm9yOiAke3UuRTJbbl19YCk6RXJyb3IoYCR7ZX0gZXJyb3I6ICR7dS5FMltuXX1gKSx0KG5ldyBCKHIsbikpfX19ZnVuY3Rpb24gRyhlLHQsbil7cmV0dXJue29uU3VjY2VzczooKT0+dCgpLC4uLlYoZSxuKX19YXN5bmMgZnVuY3Rpb24gSChlLHQpe3JldHVybigwLFUuankpKCgobixyKT0+e2UuZ2V0Q29udmVyc2F0aW9uTWFuYWdlcigpLmdldE9uZU9uT25lQ29udmVyc2F0aW9uSWRzKHQsKDAsTi5zaikoe29uU3VjY2VzczplPT57Y29uc3QgdD1uZXcgTWFwO2Zvcihjb25zdCBuIG9mIGUpdC5zZXQobi51c2VySWQsbik7bih0KX0sLi4uVihcImdldE9uZU9uT25lQ29udmVyc2F0aW9uSWRcIixyKX0pKX0pKX1hc3luYyBmdW5jdGlvbiBXKGUsdCxuKXtyZXR1cm4gbmV3IFByb21pc2UoKChyLGkpPT57ZS5nZXRDb252ZXJzYXRpb25NYW5hZ2VyKCkuZGlzcGxheWVkTWVzc2FnZXModCxuLCgwLE4uc2opKEcoXCJkaXNwbGF5ZWRNZXNzYWdlc1wiLHIsaSkpKX0pKX1hc3luYyBmdW5jdGlvbiBqKGUsdCl7cmV0dXJuIG5ldyBQcm9taXNlKCgobixyKT0+e2UuZ2V0Q29udmVyc2F0aW9uTWFuYWdlcigpLmNsZWFyQ29udmVyc2F0aW9uKHQsKDAsTi5zaikoRyhcImNsZWFyQ29udmVyc2F0aW9uXCIsbixyKSkpfSkpfWFzeW5jIGZ1bmN0aW9uIFooZSx0LG4pe3JldHVybiBuZXcgUHJvbWlzZSgoKHIsaSk9PntlLmdldENvbnZlcnNhdGlvbk1hbmFnZXIoKS51cGRhdGVNZXNzYWdlTm90aWZpY2F0aW9uU2V0dGluZ3ModCxuLCgwLE4uc2opKEcoXCJ1cGRhdGVNZXNzYWdlTm90aWZpY2F0aW9uU2V0dGluZ3NcIixyLGkpKSl9KSl9YXN5bmMgZnVuY3Rpb24geihlLHQsbixyKXtyZXR1cm4gbmV3IFByb21pc2UoKChpLG8pPT57ZS5nZXRDb252ZXJzYXRpb25NYW5hZ2VyKCkudXBkYXRlQ29udmVyc2F0aW9uUmV0ZW50aW9uUG9saWN5KHQsbixyLCgwLE4uc2opKEcoXCJ1cGRhdGVDb252ZXJzYXRpb25SZXRlbnRpb25Qb2xpY3lcIixpLG8pKSl9KSl9YXN5bmMgZnVuY3Rpb24gSyhlLHQpe3JldHVybiBuZXcgUHJvbWlzZSgoKG4scik9PntlLmdldENvbnZlcnNhdGlvbk1hbmFnZXIoKS5sZWF2ZUNvbnZlcnNhdGlvbih0LCgwLE4uc2opKEcoXCJsZWF2ZUNvbnZlcnNhdGlvblwiLG4scikpKX0pKX1hc3luYyBmdW5jdGlvbiBZKGUsdCxuLHIsaSl7aWYobi5jYWxsVHlwZT09PVQuQ2FsbGluZ1N0YXR1c01lc3NhZ2VfQ2FsbFR5cGUuVU5SRUNPR05JWkVEKXRocm93IEVycm9yKFwiQ2FuJ3Qgc2VuZCBVTlJFQ09HTklaRUQgdHlwZVwiKTtsZXQgbyxhO3N3aXRjaChuLmNhbGxTdGF0dXMpe2Nhc2UgVC5DYWxsaW5nU3RhdHVzTWVzc2FnZV9DYWxsU3RhdHVzLk1JU1NFRDpuLmNhbGxUeXBlPT09VC5DYWxsaW5nU3RhdHVzTWVzc2FnZV9DYWxsVHlwZS5BVURJTz8obz11LnpjLlNUQVRVU19DQUxMX01JU1NFRF9BVURJTyxhPXUuS3UuTUlTU0VEX0FVRElPX0NBTEwpOihvPXUuemMuU1RBVFVTX0NBTExfTUlTU0VEX1ZJREVPLGE9dS5LdS5NSVNTRURfVklERU9fQ0FMTCk7YnJlYWs7Y2FzZSBULkNhbGxpbmdTdGF0dXNNZXNzYWdlX0NhbGxTdGF0dXMuTEVGVDpjYXNlIFQuQ2FsbGluZ1N0YXR1c01lc3NhZ2VfQ2FsbFN0YXR1cy5FTkRFRDpvPXUuemMuU1RBVFVTLGE9dS5LdS5MRUZUX0NBTEw7YnJlYWs7Y2FzZSBULkNhbGxpbmdTdGF0dXNNZXNzYWdlX0NhbGxTdGF0dXMuSk9JTkVEOm89dS56Yy5TVEFUVVMsYT11Lkt1LkpPSU5FRF9DQUxMO2JyZWFrO2Nhc2UgVC5DYWxsaW5nU3RhdHVzTWVzc2FnZV9DYWxsU3RhdHVzLlNUQVJURUQ6Y2FzZSBULkNhbGxpbmdTdGF0dXNNZXNzYWdlX0NhbGxTdGF0dXMuVU5SRUNPR05JWkVEOnRocm93IEVycm9yKGBVbnN1cHBvcnRlZCBjYWxsU3RhdHVzICR7bi5jYWxsU3RhdHVzfWApfWNvbnN0IHM9cC5Db250ZW50cy5lbmNvZGUoe2NvbnRlbnQ6eyRjYXNlOlwic3RhdHVzTWVzc2FnZVwiLHN0YXR1c01lc3NhZ2U6e3N0YXR1czp7JGNhc2U6XCJjYWxsaW5nU3RhdHVzXCIsY2FsbGluZ1N0YXR1czpufX19fSkuZmluaXNoKCksYz12b2lkIDAhPT1yP0MuQ29udGVudEVudmVsb3BlX0ZlZWREaXNwbGF5SW5mby5lbmNvZGUocikuZmluaXNoKCk6dm9pZCAwO3JldHVybiBYKGUsW3RdLHtjb250ZW50OnMsY29udGVudFR5cGU6byxwbGF0Zm9ybUFuYWx5dGljczp7Y29udGVudDppPygwLFAuaEMpKGkpOnZvaWQgMCxtZXRyaWNzTWVzc2FnZVR5cGU6YSxtZXRyaWNzTWVzc2FnZU1lZGlhVHlwZTp1LmNFLk5PX01FRElBLHJlYWN0aW9uU291cmNlOnUuencuTk9ORSxhdHRlbXB0SWQ6KDAsVS5PWSkoKDAseC5aKSgpKX0sbG9jYWxNZWRpYVJlZmVyZW5jZXM6W10saW5jaWRlbnRhbEF0dGFjaG1lbnRzOltdLHNhdmVQb2xpY3k6dS5mQi5MSUZFVElNRSxhbGxvd3NUcmFuc2NyaXB0aW9uOiExLGZlZWREaXNwbGF5SW5mbzpjLGJvdE1lbnRpb246ITF9KX1hc3luYyBmdW5jdGlvbiBxKGUsdCxuLHIsaSxvLGEpe2NvbnN0IHM9cj09PXUuemMuU05BUDtsZXQgYz11LmNFLk5PX01FRElBO2NvbnN0IGw9W10sZD1hd2FpdCBQcm9taXNlLmFsbChuLm1hcCgoYXN5bmMgZT0+e2NvbnN0IHQ9YXdhaXQoMCxnLm8pKGUpO2N8fChjPSgwLGcubm0pKHQubWVkaWFUeXBlKSk7Y29uc3Qgbj0oMCx3LnA4KSh7ZGF0YTplLHR5cGU6dC5tZWRpYVR5cGV9KTtyZXR1cm4gbC5wdXNoKG4pLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gTy5TbmFwRG9jLmZyb21QYXJ0aWFsKHtwbGF5YmFjazp7cGxheWJhY2tMYXllcnM6W3tsYXllcjp7JGNhc2U6XCJtZWRpYVwiLG1lZGlhOkEuTWVkaWFNZXRhZGF0YS5mcm9tUGFydGlhbCh7YXNzZXRUeXBlOl8uQXNzZXRfQXNzZXRUeXBlLlJBV19NRURJQSxkaXNwbGF5T3JpZW50YXRpb246QS5NZWRpYU1ldGFkYXRhX0Rpc3BsYXlPcmllbnRhdGlvbi5VUCxoYXNTb3VuZDooMCxnLmFqKShlLm1lZGlhVHlwZSksb3JpZW50YXRpb246QS5NZWRpYU1ldGFkYXRhX09yaWVudGF0aW9uLlZFUlRJQ0FMLGRpbWVuc2lvbnM6e3dpZHRoOmUud2lkdGgsaGVpZ2h0OmUuaGVpZ2h0fSxtZWRpYUR1cmF0aW9uTXM6ZS5kdXJhdGlvbkluU2VjPzFlMyplLmR1cmF0aW9uSW5TZWM6MCxtZWRpYUlkOnttZWRpYUxpc3RJZDpcIjFcIn0sdHlwZTooMCxnLlVTKShlLm1lZGlhVHlwZSl9KX19XSxwbGF5YmFja0NoYXJhY3RlcmlzdGljczpuP1IuUGxheWJhY2tDaGFyYWN0ZXJpc3RpY3MuZnJvbVBhcnRpYWwoe2Rpc3BsYXlEdXJhdGlvbjp7JGNhc2U6XCJpbmZpbml0ZVwiLGluZmluaXRlOlMuRW1wdHl9LGhhc1NvdW5kOiExfSk6Ui5QbGF5YmFja0NoYXJhY3RlcmlzdGljcy5mcm9tUGFydGlhbCh7ZGlzcGxheUR1cmF0aW9uOnskY2FzZTpcInBsYXlPbmNlXCIscGxheU9uY2U6Uy5FbXB0eX0saGFzU291bmQ6KDAsZy5haikoZS5tZWRpYVR5cGUpfSl9LG1lZGlhUmVmZXJlbmNlczpbe21lZGlhTGlzdElkOlwiMVwiLGxvY2FsQ2FjaGVLZXk6dCxtZWRpYVR5cGU6KDAsZy5lRSkoZS5tZWRpYVR5cGUpfV0sbWVkaWFMaXN0SWRDb3VudGVyOlwiMlwiLHByb3ZlbmFuY2U6e3NvdXJjZVN5c3RlbTprLlByb3ZlbmFuY2VfU25hcFNvdXJjZVN5c3RlbS5TTkFQQ0hBVF9XRUJfQVBQfX0pfSh0LCgwLHcub0opKG4uaWQpLHMpfSkpKTtsZXQgZjtyZXR1cm4gYSYmRSgpKGRbMF0sYSksZj1yPT09dS56Yy5TTkFQP3AuQ29udGVudHMuZW5jb2RlKHtjb250ZW50OnskY2FzZTpcInNuYXBkb2NcIixzbmFwZG9jOmRbMF19fSkuZmluaXNoKCk6cC5Db250ZW50cy5lbmNvZGUoe2NvbnRlbnQ6eyRjYXNlOlwiZXh0ZXJuYWxNZWRpYVwiLGV4dGVybmFsTWVkaWE6Yi5FeHRlcm5hbE1lZGlhLmZyb21QYXJ0aWFsKHtzbmFwZG9jOmR9KX19KS5maW5pc2goKSxYKGUsdCx7Y29udGVudDpmLGNvbnRlbnRUeXBlOnIscGxhdGZvcm1BbmFseXRpY3M6e2NvbnRlbnQ6bz8oMCxQLmhDKShvKTp2b2lkIDAsbWV0cmljc01lc3NhZ2VUeXBlOmksbWV0cmljc01lc3NhZ2VNZWRpYVR5cGU6YyxyZWFjdGlvblNvdXJjZTp1Lnp3Lk5PTkUsYXR0ZW1wdElkOigwLFUuT1kpKCgwLHguWikoKSl9LGxvY2FsTWVkaWFSZWZlcmVuY2VzOmwsaW5jaWRlbnRhbEF0dGFjaG1lbnRzOltdLHNhdmVQb2xpY3k6cz91LmZCLlZJRVdfU0VTU0lPTjp1LmZCLkxJRkVUSU1FLGFsbG93c1RyYW5zY3JpcHRpb246ITEsYm90TWVudGlvbjohMX0pfWFzeW5jIGZ1bmN0aW9uIFgoZSx0LG4pe3JldHVybiBuZXcgUHJvbWlzZSgoKHIsaSk9PntlLmdldENvbnZlcnNhdGlvbk1hbmFnZXIoKS5zZW5kTWVzc2FnZVdpdGhDb250ZW50KHtjb252ZXJzYXRpb25zOnQsc3RvcmllczpbXSxwaG9uZU51bWJlcnM6W119LG4sKDAsTi5zaikoey4uLkcoXCJzZW5kTWVzc2FnZVdpdGhDb250ZW50XCIscixpKSxvblF1ZXVlZDooKT0+e319KSl9KSl9YXN5bmMgZnVuY3Rpb24gUShlLHQpe3JldHVybiBuZXcgUHJvbWlzZSgoKG4scik9PntlLmdldENvbnZlcnNhdGlvbk1hbmFnZXIoKS5zZW5kVHlwaW5nTm90aWZpY2F0aW9uKHQsKDAsTi5zaikoRyhcInNlbmRUeXBpbmdOb3RpZmljYXRpb25cIixuLHIpKSl9KSl9YXN5bmMgZnVuY3Rpb24gSihlLHQsbil7cmV0dXJuIG5ldyBQcm9taXNlKCgocixpKT0+e2UuZ2V0Q29udmVyc2F0aW9uTWFuYWdlcigpLnVwZGF0ZUNvbnZlcnNhdGlvblRpdGxlKHQsbiwoMCxOLnNqKShHKFwidXBkYXRlQ29udmVyc2F0aW9uVGl0bGVcIixyLGkpKSl9KSl9YXN5bmMgZnVuY3Rpb24gJChlLHQsbil7cmV0dXJuIG5ldyBQcm9taXNlKCgocixpKT0+e2UuZ2V0Q29udmVyc2F0aW9uTWFuYWdlcigpLnJldHJ5U2VuZE1lc3NhZ2UodCxuLCgwLE4uc2opKHsuLi5HKFwicmV0cnlTZW5kTWVzc2FnZVwiLHIsaSksb25RdWV1ZWQ6KCk9Pnt9fSkpfSkpfWFzeW5jIGZ1bmN0aW9uIGVlKGUsdCxuLHIpe3JldHVybiBuZXcgUHJvbWlzZSgoKGksbyk9PntlLmdldENvbnZlcnNhdGlvbk1hbmFnZXIoKS5tZWRpYU1lc3NhZ2VzRGlzcGxheWVkKHQsW3ttZXNzYWdlSWQ6bixkaXNwbGF5U3RhdGU6cn1dLCgwLE4uc2opKEcoXCJtZWRpYU1lc3NhZ2VzRGlzcGxheWVkXCIsaSxvKSkpfSkpfWFzeW5jIGZ1bmN0aW9uIHRlKGUsdCl7cmV0dXJuKDAsVS5qeSkoKChuLHIpPT57ZS5nZXRDb252ZXJzYXRpb25NYW5hZ2VyKCkuZmV0Y2hDb252ZXJzYXRpb25CeVBhcnRpY2lwYW50cyh0LCgwLE4uc2opKHtvbkZldGNoQ29udmVyc2F0aW9uc0NvbXBsZXRlOmU9PntuKGUpfSxvbkVycm9yOmU9PntlIT09dS5FMi5OT1RGT1VORD9yKG5ldyBFcnJvcihgZmV0Y2hDb252ZXJzYXRpb25CeVBhcnRpY2lwYW50czogJHt1LkUyW2VdfWApKTpuKFtdKX19KSl9KSl9YXN5bmMgZnVuY3Rpb24gbmUoZSx0LG4scixpKXtyZXR1cm4oMCxVLmp5KSgoKG8sYSk9PntlLmdldENvbnZlcnNhdGlvbk1hbmFnZXIoKS5jcmVhdGVDb252ZXJzYXRpb24odCxuLHIsaSwoMCxOLnNqKSh7b25TdWNjZXNzOmU9PntvKGUpfSwuLi5WKFwiY3JlYXRlQ29udmVyc2F0aW9uXCIsYSl9KSl9KSl9YXN5bmMgZnVuY3Rpb24gcmUoZSx0KXtyZXR1cm4oMCxVLmp5KSgoKG4scik9PntlLmdldENvbnZlcnNhdGlvbk1hbmFnZXIoKS5lbnN1cmVOZXR3b3JrQ29udmVyc2F0aW9uKHQsKDAsTi5zaikoe29uU3VjY2VzczplPT57bihlKX0sLi4uVihcImVuc3VyZU5ldHdvcmtDb252ZXJzYXRpb25cIixyKX0pKX0pKX1hc3luYyBmdW5jdGlvbiBpZShlLHQsbixyLGksbyl7cmV0dXJuKDAsVS5qeSkoKChhLHMpPT57ZS5nZXRDb252ZXJzYXRpb25NYW5hZ2VyKCkuc3luY1NlcnZlckNvbnZlcnNhdGlvbih7c2VydmVyQ29udmVyc2F0aW9uSWRlbnRpZmllcjp0LGNvbnZlcnNhdGlvblR5cGU6bixtaW5WZXJzaW9uOnJ9LGksbywoMCxOLnNqKSh7b25Db21wbGV0ZTplPT57YShlKX0sLi4uVihcInN5bmNTZXJ2ZXJDb252ZXJzYXRpb25cIixzKX0pKX0pKX1mdW5jdGlvbiBvZShlKXtzd2l0Y2goZSl7Y2FzZSBJLkRELkFuaW1hdGVkSW1hZ2U6Y2FzZSBJLkRELkltYWdlOnJldHVybiBULk1lZGlhVHlwZVRvQ291bnRfTWVkaWFUeXBlLklNQUdFO2Nhc2UgSS5ERC5WaWRlbzpyZXR1cm4gVC5NZWRpYVR5cGVUb0NvdW50X01lZGlhVHlwZS5WSURFTztjYXNlIEkuREQuVW5hc3NpZ25lZDpyZXR1cm4gVC5NZWRpYVR5cGVUb0NvdW50X01lZGlhVHlwZS5VTktOT1dOO2RlZmF1bHQ6cmV0dXJuIFQuTWVkaWFUeXBlVG9Db3VudF9NZWRpYVR5cGUuVU5SRUNPR05JWkVEfX1hc3luYyBmdW5jdGlvbiBhZShlLHQsbixyLGksbyl7Y29uc3QgYT1pLm1hcCgoZT0+ZS5sZW5ndGg+MD9lWzBdLm1lZGlhUmVmZXJlbmNlLm1lZGlhVHlwZTp2b2lkIDApKS5maWx0ZXIoKGU9PnZvaWQgMCE9PWUpKS5tYXAob2UpLHM9bmV3IE1hcDtmb3IoY29uc3QgZSBvZiBhKXMuc2V0KGUsKHMuZ2V0KGUpfHwwKSsxKTtjb25zdCBjPVtdO2Zvcihjb25zdFtlLHRdb2Ygcy5lbnRyaWVzKCkpYy5wdXNoKHttZWRpYVR5cGU6ZSxjb3VudDp0LnRvU3RyaW5nKCl9KTtyZXR1cm4gWChlLFt0XSx7Y29udGVudDpwLkNvbnRlbnRzLmVuY29kZSh7Y29udGVudDp7JGNhc2U6XCJzdGF0dXNNZXNzYWdlXCIsc3RhdHVzTWVzc2FnZTp7c3RhdHVzOnskY2FzZTpcInNhdmVUb0NhbWVyYVJvbGxcIixzYXZlVG9DYW1lcmFSb2xsOnt1c2VySWQ6bixtZXNzYWdlSWQ6ci50b1N0cmluZygpLG1lZGlhVHlwZVRvQ291bnQ6Y319fX19KS5maW5pc2goKSxjb250ZW50VHlwZTp1LnpjLlNUQVRVU19TQVZFX1RPX0NBTUVSQV9ST0xMLHBsYXRmb3JtQW5hbHl0aWNzOntjb250ZW50Om8/KDAsUC5oQykobyk6dm9pZCAwLG1ldHJpY3NNZXNzYWdlVHlwZTp1Lkt1LlNBVkVfVE9fQ0FNRVJBX1JPTEwsbWV0cmljc01lc3NhZ2VNZWRpYVR5cGU6dS5jRS5ERVJJVkVEX0ZST01fTUVTU0FHRV9UWVBFLGF0dGVtcHRJZDooMCxVLk9ZKSgoMCx4LlopKCkpfSxsb2NhbE1lZGlhUmVmZXJlbmNlczpbXSxpbmNpZGVudGFsQXR0YWNobWVudHM6W10sc2F2ZVBvbGljeTp1LmZCLkxJRkVUSU1FLGFsbG93c1RyYW5zY3JpcHRpb246ITEsYm90TWVudGlvbjohMX0pfWFzeW5jIGZ1bmN0aW9uIHNlKGUsdCxuKXtyZXR1cm4gbmV3IFByb21pc2UoKChyLGkpPT57ZS5nZXRTbmFwTWFuYWdlcigpLm9uU25hcEludGVyYWN0aW9uKHUuRWYuVklFV0lOR19JTklUSUFURUQsdCxuLCgwLE4uc2opKHtvblN1Y2Nlc3M6KCk9PntyKCl9LC4uLlYoXCJzdGFydGVkVmlld2luZ1NuYXBcIixpKX0pKX0pKX1hc3luYyBmdW5jdGlvbiBjZShlLHQsbil7cmV0dXJuIG5ldyBQcm9taXNlKCgocixpKT0+e2UuZ2V0U25hcE1hbmFnZXIoKS5vblNuYXBJbnRlcmFjdGlvbih1LkVmLlZJRVdJTkdfRklOSVNIRUQsdCxuLCgwLE4uc2opKHtvblN1Y2Nlc3M6KCk9PntyKCl9LC4uLlYoXCJmaW5pc2hlZFZpZXdpbmdTbmFwXCIsaSl9KSl9KSl9YXN5bmMgZnVuY3Rpb24gbGUoZSx0KXtyZXR1cm4gbmV3IFByb21pc2UoKChuLHIpPT57ZS5nZXRTbmFwTWFuYWdlcigpLm9uU25hcFJlcGxheVN0YXRlUmVxdWVzdGVkKHQsKDAsTi5zaikoe29uU3VjY2VzczooKT0+e24oKX0sLi4uVihcInJlcXVlc3RlZFJlcGxheVNuYXBfZnJvbV9mZWVkXCIscil9KSl9KSl9YXN5bmMgZnVuY3Rpb24gdWUoZSx0LG4pe3JldHVybiBuZXcgUHJvbWlzZSgoKHIsaSk9PntlLmdldFNuYXBNYW5hZ2VyKCkub25TbmFwSW50ZXJhY3Rpb24odS5FZi5SRVBMQVlfR0VTVFVSRV9QRVJGT1JNRUQsdCxuLCgwLE4uc2opKHtvblN1Y2Nlc3M6KCk9PntyKCl9LC4uLlYoXCJyZXF1ZXN0ZWRSZXBsYXlTbmFwX2Zyb21fY29udlwiLGkpfSkpfSkpfWFzeW5jIGZ1bmN0aW9uIGRlKGUsdCxuLHIpe3JldHVybiBuZXcgUHJvbWlzZSgoKGksbyk9PntlLmdldFNuYXBNYW5hZ2VyKCkub25TbmFwRG93bmxvYWRTdGF0dXNDaGFuZ2VkKHQsbixyLCgwLE4uc2opKHtvblN1Y2Nlc3M6KCk9PntpKCl9LC4uLlYoXCJyZXF1ZXN0ZWRSZXBsYXlTbmFwX2Zyb21fY29udlwiLG8pfSkpfSkpfWgoKS5nZXRMb2dnZXIoXCJbQ29udGVudERlbGVnYXRlXVwiKTtjb25zdCBmZT17b25NZWRpYUNvbnRlbnRFeHBpcmVkOihlLHQpPT57fX07dmFyIHBlPW4oODQ0MjUpLG1lPW4oMzk3MDApLGhlPW4oODI4MiksdmU9big4NjUxNik7Y29uc3QgZ2U9bmV3IGhlLkowKHt1bmFyeTp2ZS5VfSk7dmFyIHllPW4oNzY5MzEpO2FzeW5jIGZ1bmN0aW9uIEVlKGUpe2NvbnN0IHQ9KGF3YWl0IGFzeW5jIGZ1bmN0aW9uKCl7cmV0dXJuIGdlLmdldFVwbG9hZExvY2F0aW9ucyh7YmF0Y2hTaXplOjEsY29udGVudFJlZmVyZW5jZVJlc3VsdE9wdGlvbjpwZS5LLkNPTlRFTlRfT0JKRUNUX09OTFksdXBsb2FkVXJsVHlwZXM6W21lLksuRElSRUNUXSx1cGxvYWRDb2ZDb25maWc6bmV3IFVpbnQ4QXJyYXksc2tpcENkbkZvclVwbG9hZFVybDohMSx1c2VaZXJvUmF0aW5nRG9tYWluRm9yR2NzTG9jYXRpb25zOiEwfSl9KCkpLnVwbG9hZExvY2F0aW9uc1swXSxuPXQuY29udGVudFJlZmVyZW5jZT8uY29udGVudE9iamVjdDtpZighbnx8MD09PW4ubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImNvbnRlbnRPYmplY3Qgc2hvdWxkIGV4aXN0cyBpbiBVcGxvYWRMb2NhdGlvblwiKTtpZighdC51cGxvYWRVcmwubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcInVwbG9hZFVybCBzaG91bGQgZXhpc3RzIGluIFVwbG9hZExvY2F0aW9uXCIpO2NvbnN0IHI9YXdhaXQoMCx5ZS5YKSh0LnVwbG9hZFVybCx7bWV0aG9kOlwiUFVUXCIsaGVhZGVyczp7XCJDb250ZW50LVR5cGVcIjpcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwifSxib2R5OmV9KTtpZighci5vayl0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byB1cGxvYWQgdGhlIGZpbGUgdG8gQk9MVC4gU3RhdHVzOiAke3Iuc3RhdHVzVGV4dH1gKTtyZXR1cm4gbn12YXIgX2U9big2MDg4NSk7ZnVuY3Rpb24gSWUoZSl7Y29uc3QgdD0oMCx3LlRtKShlKTtpZighdCl0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBXZWJNZWRpYVJlZmVyZW5jZSBieSBsb2NhbE1lZGlhUmVmZXJlbmNlcy4gSXQgbWlnaHQgaGF2ZSBiZWVuIHJldm9rZWQuXCIpO3JldHVybiB0fWZ1bmN0aW9uIFNlKGUsdCxuKXtyZXR1cm57bWVkaWFSZWZlcmVuY2VzOlt7Y29udGVudE9iamVjdDplLG1lZGlhTGlzdElkOkJpZ0ludChuKSxtZWRpYVR5cGU6KDAsZy5qUikodCksbWVkaWFSZWZlcmVuY2VLZXk6XCJcIn1dfX1hc3luYyBmdW5jdGlvbiBiZShlLHQsbixyKXtmb3IoY29uc3QgaSBvZiBlLnBsYXliYWNrPy5wbGF5YmFja0xheWVyc3x8W10paWYoXCJtZWRpYVwiPT09aS5sYXllcj8uJGNhc2Upe2NvbnN0IGU9aS5sYXllci5tZWRpYTtlLnR5cGU9KDAsZy5VUykociksZS5tZWRpYUlkPXttZWRpYUxpc3RJZDpTdHJpbmcodCl9O2NvbnN0IG89bmV3IFVpbnQ4QXJyYXkoYXdhaXQgY3J5cHRvLnN1YnRsZS5leHBvcnRLZXkoXCJyYXdcIixuLmtleSkpO2UuZW5jcnlwdGlvbkluZm9WMT17a2V5OigwLF9lLmgkKShvKSxpdjooMCxfZS5oJCkobi5pdil9LGUuZW5jcnlwdGlvbkluZm9WMj17a2V5Om8saXY6bi5pdn0sZS56aXBwZWQ9ITF9fWFzeW5jIGZ1bmN0aW9uIFRlKGUsdCxuLHIpe2NvbnN0IGk9cC5Db250ZW50cy5kZWNvZGUoZS5jb250ZW50KTtzd2l0Y2goaS5jb250ZW50Py4kY2FzZSl7Y2FzZVwiZXh0ZXJuYWxNZWRpYVwiOmF3YWl0IGJlKGkuY29udGVudC5leHRlcm5hbE1lZGlhLnNuYXBkb2NbdF0sdCxuLHIpO2JyZWFrO2Nhc2VcInNuYXBkb2NcIjphd2FpdCBiZShpLmNvbnRlbnQuc25hcGRvYyx0LG4scik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYHVuaGFuZGxlZCBjb250ZW50IHR5cGUgJHtlLmNvbnRlbnRUeXBlfSBpbiB1cGRhdGVNZXNzYWdlQ29udGVudGApfXJldHVybnsuLi5lLGNvbnRlbnQ6cC5Db250ZW50cy5lbmNvZGUoaSkuZmluaXNoKCl9fWgoKS5nZXRMb2dnZXIoXCJ1cGxvYWRcIik7Y29uc3QgQ2U9e3VwbG9hZE1lZGlhOmFzeW5jKGUsdCxuKT0+e2NvbnN0IHI9YXdhaXQgYXN5bmMgZnVuY3Rpb24oZSl7bGV0IHQ9ZTtjb25zdCBuPVtdO2Zvcihjb25zdFtyLGldb2YgZS5sb2NhbE1lZGlhUmVmZXJlbmNlcy5lbnRyaWVzKCkpe2NvbnN0IGU9e3N0YXR1czp1LmZxLlNVQ0NFU1MsdGltZXJzOm5ldyBNYXAsbWVkaWFPcmNoZXN0cmF0aW9uQXR0ZW1wdElkOntpZDpuZXcgVWludDhBcnJheSgxNil9fTtuLnB1c2goZSk7Y29uc3Qgbz1hc3luYyh0LG4pPT57Y29uc3Qgcj1wZXJmb3JtYW5jZS5ub3coKTtsZXQgaTt0cnl7Y29uc3QgZT1uKCk7aT1lIGluc3RhbmNlb2YgUHJvbWlzZT9hd2FpdCBuKCk6ZX1jYXRjaChuKXt0aHJvdyBlLnN0YXR1cz11LmZxLkZBVEFMX0VSUk9SLGUuZmFpbGVkU3RlcD10LG59Y29uc3Qgbz1wZXJmb3JtYW5jZS5ub3coKS1yO3JldHVybiBlLnRpbWVycy5zZXQodCxCaWdJbnQoTWF0aC5yb3VuZChvKSkpLGl9O3RyeXtjb25zdCBuPWF3YWl0IG8odS51ZS5SRVNPTFZFLCgoKT0+SWUoaSkpKSxhPWF3YWl0IG8odS51ZS5FTkNSWVBULChhc3luYygpPT4oMCxfZS5XRCkobi5kYXRhKSkpLHM9YXdhaXQgbyh1LnVlLlVQTE9BRCwoYXN5bmMoKT0+RWUoYS5lbmNyeXB0ZWREYXRhKSkpO2F3YWl0IG8odS51ZS5QT1NUX1VQTE9BRF9VUERBVEUsKGFzeW5jKCk9PntlLnJlbW90ZU1lZGlhUmVmZXJlbmNlcz1TZShzLG4udHlwZSxyKSx0PWF3YWl0IFRlKHQscixhLmNyeXB0b0tleUl2UGFpcixuLnR5cGUpfSkpfWNhdGNoKHQpe2UuZmFpbGVkU3RlcHx8KGUuc3RhdHVzPXUuZnEuRkFUQUxfRVJST1IsZS5mYWlsZWRTdGVwPXUudWUuUkVTT0xWRSl9fXJldHVybntyZXN1bHRzOm4sY29udGVudDp0fX0oZSk7bi5vblVwbG9hZEZpbmlzaGVkKHIucmVzdWx0cyxyLmNvbnRlbnQpfSx1cGxvYWRNZWRpYVJlZmVyZW5jZXM6KGUsdCk9Pnt9fTt2YXIgQWU9big2OTA5MyksUmU9big3MjMxMyksa2U9big5MTEyOSksT2U9big0NDEzMCksTmU9bigyMzgzNCksd2U9bigzODk3MCksRGU9big1NjI0MSksUGU9big1NzI4MSksTWU9big1MTI3OCksTGU9big2MzgzNyksVWU9big5MzQ5KSx4ZT1uKDY5NzI5KSxGZT1uKDQ5NjcyKSxCZT1uKDYzOTIxKSxWZT1uKDEyOTAyKSxHZT1uKDQzOTgwKSxIZT1uKDIyNjA4KSxXZT1uKDI3MjYxKSxqZT1uKDg4MDM3KSxaZT1uKDU3NDMyKTtoKCkuZ2V0TG9nZ2VyKFwiZmVlZE1hbmFnZXJEZWxlZ2F0ZVwiKSxoKCkuZ2V0TG9nZ2VyKFwiY29udmVyc2F0aW9uTWFuYWdlckRlbGVnYXRlXCIpLGgoKS5nZXRMb2dnZXIoXCJbTWVzc2FnaW5nIENsaWVudF1cIiksaCgpLmdldExvZ2dlcihcImZlZWRcIiksaCgpLmdldExvZ2dlcihcImNvbnZlcnNhdGlvblwiKTtjb25zdCB6ZT0yNjIxNDQwMCxLZT0xMDQ4NTc2MCxZZT17XCJpbWFnZS9qcGVnXCI6W10sXCJpbWFnZS9qcGdcIjpbXSxcImltYWdlL3BuZ1wiOltdLFwiaW1hZ2UvZ2lmXCI6W10sXCJ2aWRlby9tcDRcIjpbXX07ZnVuY3Rpb24gcWUoZSx0LG4pe2NvbnN0IHI9KDAsVS5NYykodCk7ZS5tZXNzYWdpbmcuY29udmVyc2F0aW9uc1tyXT17Li4uZS5tZXNzYWdpbmcuY29udmVyc2F0aW9uc1tyXSxsb2FkaW5nTWVzc2FnZXM6bn19ZnVuY3Rpb24gWGUoZSx0LG4pe2NvbnN0IHI9KDAsVS5NYykodCk7ZS5tZXNzYWdpbmcuY29udmVyc2F0aW9uc1tyXT17Li4uZS5tZXNzYWdpbmcuY29udmVyc2F0aW9uc1tyXSxsb2FkaW5nTWVzc2FnZXM6ITEsZXJyb3I6bn19ZnVuY3Rpb24gUWUoZSl7Y29uc3R7Y2xpZW50OnR9PWUubWVzc2FnaW5nO2lmKCF0KXRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIHRoZSBtZXNzYWdpbmcgY2xpZW50IHRvIGJlIHNldFwiKTtyZXR1cm4gdH1jb25zdCBKZT0oZSx0KT0+e2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkobiksaT0wO2k8bjtpKyspcltpXT1hcmd1bWVudHNbaV07cmV0dXJuIGUoUWUodCgpKSwuLi5yKX19Y29uc3Qgcj17b25GZWVkRW50cmllc1VwZGF0ZWQ6KHQsbixyLGkpPT57KDAsVS4kcCkodCksZSgoZT0+eygwLFplLlRKKSh0LGUubWVzc2FnaW5nLmZlZWQpO2Zvcihjb25zdCB0IG9mIHIpZGVsZXRlIGUubWVzc2FnaW5nLmZlZWRbKDAsVS5NYykodC5mZWVkRW50cnlJZGVudGlmaWVyLmNvbnZlcnNhdGlvbklkKV07Zm9yKGNvbnN0IG4gb2YgdC5maWx0ZXIoKGU9PmUuZGlzcGxheUluZm8uaXNMb2NrZWQpKSlkZWxldGUgZS5tZXNzYWdpbmcuZmVlZFsoMCxVLk1jKShuLmNvbnZlcnNhdGlvbklkKV0sZS5tZXNzYWdpbmcubG9ja2VkQ29udmVyc2F0aW9uSWRzLmFkZCgoMCxVLk1jKShuLmNvbnZlcnNhdGlvbklkKSk7Zm9yKGNvbnN0IG4gb2YgdC5maWx0ZXIoKHQ9PiF0LmRpc3BsYXlJbmZvLmlzTG9ja2VkJiZlLm1lc3NhZ2luZy5sb2NrZWRDb252ZXJzYXRpb25JZHMuaGFzKCgwLFUuTWMpKHQuY29udmVyc2F0aW9uSWQpKSkpKWUubWVzc2FnaW5nLmxvY2tlZENvbnZlcnNhdGlvbklkcy5kZWxldGUoKDAsVS5NYykobi5jb252ZXJzYXRpb25JZCkpfSkpfSxvbkludGVybmFsU3luY0ZlZWQ6KHQsbixyLGksbyk9PntlKChlPT57byYmKGUubWVzc2FnaW5nLmZlZWQ9e30pLCgwLFplLlRKKSh0LGUubWVzc2FnaW5nLmZlZWQpO2Zvcihjb25zdCB0IG9mIHIpZGVsZXRlIGUubWVzc2FnaW5nLmZlZWRbKDAsVS5NYykodC5mZWVkRW50cnlJZGVudGlmaWVyLmNvbnZlcnNhdGlvbklkKV07ZS5tZXNzYWdpbmcubG9ja2VkQ29udmVyc2F0aW9uSWRzPW5ldyBTZXR9KSl9fSxvPXthc3luYyBmZXRjaEZyaWVuZExpbmsoZSxuKXtjb25zdCByPWF3YWl0IHQoKS51c2VyLmVuc3VyZVVzZXJzKFtlXSk7dmFyIGk7ci5sZW5ndGg+MD9uLm9uRnJpZW5kTGlua0ZldGNoQ29tcGxldGUoe2ZyaWVuZExpbms6KGk9clswXSxpLnR5cGU9PT1PZS5OLkJMT0NLRUQ/dS5Uci5CTE9DS0VEOmkudHlwZT09PU9lLk4uRlJJRU5EP3UuVHIuTVVUVUFMX0ZSSUVORDppLnR5cGU9PT1PZS5OLkZPTExPV0lORz91LlRyLkZPTExPV0VSOmkudHlwZT09PU9lLk4uUEVORElORz91LlRyLlBFTkRJTkc6dS5Uci5VTktOT1dOKSxpc0NvbnRhY3Q6ITF9KTpuLm9uRXJyb3IoKX19LHM9e29uQ29udmVyc2F0aW9uQ3JlYXRlZDp0PT57KDAsVS4kcCkodCksZSgoZT0+e2NvbnN0IG49ZS5tZXNzYWdpbmcuY29udmVyc2F0aW9uczsoMCxaZS5aTykodCxuKX0pKX0sb25Db252ZXJzYXRpb25VcGRhdGVkOihuLHIsaSxvKT0+e249KDAsVS4kcCkobiksKDAsVS4kcCkociksKDAsVS4kcCkoaSk7Y29uc3QgYT0oMCxqZS5sNSkobikodCgpKT8ucGFydGljaXBhbnRzLHM9cj8ucGFydGljaXBhbnRzO2lmKHM/Lmxlbmd0aCYmIWMoKShhLHMpKXtjb25zdCBlPSgwLHdlLnlLKSh0KCkpLGk9ZT8oMCxVLk1jKShlKTp2b2lkIDAsbz0oMCxVZS4kNykobikodCgpKTtvPy51cGRhdGVQYXJ0aWNpcGFudHMobmV3IFNldChyPy5wYXJ0aWNpcGFudHMubWFwKChlPT4oMCxVLk1jKShlLnBhcnRpY2lwYW50SWQpKSkuZmlsdGVyKChlPT5lIT09aSkpKSl9Y29uc3QgbD0oMCxVLk1jKShuKTtlKChlPT57Y29uc3QgdD1lLm1lc3NhZ2luZy5jb252ZXJzYXRpb25zW2xdfHw9e2xvYWRpbmdNZXNzYWdlczohMX07aWYociYmKHQuY29udmVyc2F0aW9uPXIpLHQuaXNBY3RpdmUpe3QubWVzc2FnZXM9bmV3IE1hcChbLi4udC5tZXNzYWdlcz8/bmV3IE1hcCwuLi4oMCxaZS5JVCkoaSldKTtmb3IoY29uc3QgZSBvZiBvKXQubWVzc2FnZXMuZGVsZXRlKGUubWVzc2FnZUlkKX19KSl9LG9uU2VuZFN0YXJ0ZWQ6ZT0+e2YoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwibWVzc2FnaW5nLnNlbmRfc3RhcnRlZFwifSksKDAsUC52RSkoZSl9LG9uU2VuZENvbXBsZXRlOmU9PnsoMCxVLiRwKShlKTtjb25zdCB0PSgwLFUuJHApKHAuQ29udGVudHMuZGVjb2RlKGUuY29udGVudC5jb250ZW50KSk7aWYoKDAsUC5OaikoZSx0KSxlLnN0YXR1cz09PXUuZnEuU1VDQ0VTUyYmMCE9PWUuY29udmVyc2F0aW9uTWVzc2FnZXNNZXRyaWNzRGF0YS5sZW5ndGgpc3dpdGNoKGUuY29udGVudC5wbGF0Zm9ybUFuYWx5dGljcy5tZXRyaWNzTWVzc2FnZVR5cGUpe2Nhc2UgdS5LdS5TTkFQOigwLFAuVHgpKGUsdCk7YnJlYWs7Y2FzZSB1Lkt1LlNDUkVFTlNIT1Q6Y2FzZSB1Lkt1LlNDUkVFTl9SRUNPUkRJTkc6YnJlYWs7Y2FzZSB1Lkt1Lk1FRElBOmNhc2UgdS5LdS5CQVRDSEVEX01FRElBOmNhc2UgdS5LdS5NRU1PUklFU19TVE9SWTpjYXNlIHUuS3UuVEVYVDpjYXNlIHUuS3UuU1RJQ0tFUjpjYXNlIHUuS3UuQ1VTVE9NX1NUSUNLRVI6Y2FzZSB1Lkt1Lk1FTU9KSTpjYXNlIHUuS3UuQVVESU9fTk9URTpjYXNlIHUuS3UuU05BUENIQVRURVI6Y2FzZSB1Lkt1LkxPQ0FUSU9OX1NIQVJFOmNhc2UgdS5LdS5MT0NBVElPTl9SRVFVRVNUOmNhc2UgdS5LdS5MSVZFX0xPQ0FUSU9OX1NIQVJFOmNhc2UgdS5LdS5TVE9SWV9TSEFSRTpjYXNlIHUuS3UuTUFQX1NUT1JZX1NIQVJFOmNhc2UgdS5LdS5NQVBfU1RPUllfU05BUF9TSEFSRTpjYXNlIHUuS3UuTUFQX0hFQVRfU05BUF9TSEFSRTpjYXNlIHUuS3UuTUFQX1NDUkVFTlNIT1RfU0hBUkU6Y2FzZSB1Lkt1Lk1BUF9EUk9QX1NIQVJFOmNhc2UgdS5LdS5TRUFSQ0hfU1RPUllfU0hBUkU6Y2FzZSB1Lkt1LlNFQVJDSF9TVE9SWV9TTkFQX1NIQVJFOmNhc2UgdS5LdS5ESVNDT1ZFUl9TSEFSRTpjYXNlIHUuS3UuU0hBWkFNX1NIQVJFOmNhc2UgdS5LdS5HQU1FX1NDT1JFX1NIQVJFOmNhc2UgdS5LdS5TTkFQX1BST19QUk9GSUxFX1NIQVJFOmNhc2UgdS5LdS5TTkFQX1BST19TTkFQX1NIQVJFOmNhc2UgdS5LdS5DQU5WQVNfQVBQX1NIQVJFOmNhc2UgdS5LdS5BRF9TSEFSRTpjYXNlIHUuS3UuU1RPUllfUkVQTFk6Y2FzZSB1Lkt1LlNQT1RMSUdIVF9TVE9SWV9TSEFSRTpjYXNlIHUuS3UuQ0FNRU86Y2FzZSB1Lkt1LkJJVE1PSklfT1VURklUX1NIQVJFOmNhc2UgdS5LdS5DUkVBVElWRV9UT09MX0lURU06Y2FzZSB1Lkt1LlNOQVBfS0lUX0lOVklURV9TSEFSRTpjYXNlIHUuS3UuUVVPVEVfUkVQTFlfU0hBUkU6Y2FzZSB1Lkt1LkJMT09QU19TVE9SWV9TSEFSRTpjYXNlIHUuS3UuU05BUF9QUk9fU0FWRURfU1RPUllfU0hBUkU6Y2FzZSB1Lkt1LlBMQUNFX1BST0ZJTEVfU0hBUkU6Y2FzZSB1Lkt1LlBMQUNFX1NUT1JZX1NIQVJFOmNhc2UgdS5LdS5TQVZFRF9TVE9SWV9TSEFSRTooMCxQLnBuKShlLHQpO2Nhc2UgdS5LdS5HQU1FX0NMT1NFRDpjYXNlIHUuS3UuU0FWRV9UT19DQU1FUkFfUk9MTDpjYXNlIHUuS3UuTUlTU0VEX0FVRElPX0NBTEw6Y2FzZSB1Lkt1Lk1JU1NFRF9WSURFT19DQUxMOmNhc2UgdS5LdS5KT0lORURfQ0FMTDpjYXNlIHUuS3UuTEVGVF9DQUxMOn19LG9uQ29udmVyc2F0aW9uUmVtb3ZlZDp0PT57Y29uc3Qgbj0oMCxVLk1jKSh0KTtlKChlPT57ZGVsZXRlIGUubWVzc2FnaW5nLmNvbnZlcnNhdGlvbnNbbl19KSl9LG9uQ29udmVyc2F0aW9uQ3JlYXRpb25TZXJ2ZXJDb25maXJtZWQ6ZT0+e2UuY29udmVyc2F0aW9uVHlwZT09PXUuaTEuVVNFUkNSRUFURURHUk9VUCYmKDAsUC5RVCkoZSl9fTtyZXR1cm57bWVzc2FnaW5nOntjbGllbnQ6dm9pZCAwLGluaXRpYWxpemVDbGllbnQ6YXN5bmMoKT0+e2NvbnN0IG49KDAsd2UueUspKHQoKSksaT0oMCxGZS5iaSkodCgpLGtlLmpZKTtpZighbilyZXR1cm47Y29uc3QgYT10KCkud2FzbS53b3JrZXJQcm94eTtpZighYSlyZXR1cm47Y29uc3QgYz1uZXcgUHJvbWlzZSgoZT0+e2NvbnN0IHQ9eGUuc3RvcmUuc3Vic2NyaWJlKEJlLm1NLChuPT57biYmKGUoKSxzZXRUaW1lb3V0KCgoKT0+e3QoKX0pLDApKX0pLHtmaXJlSW1tZWRpYXRlbHk6ITB9KTtzZXRUaW1lb3V0KCgoKT0+e2YoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwid2FpdF9mb3Jfc3luY2VkX2ZyaWVuZHNfdGltZW91dFwifSksZSgpLHQoKX0pLDVlMyl9KSksZD1hc3luYyBlPT4oYXdhaXQgYywoMCxCZS5MKShlKSh0KCkpKSxwPSgpPT4oMCxCZS5zdSkodCgpKSx7Z2V0Q2xpZW50Q29mVmFsdWU6bSxnZXRDbGllbnRDb2ZWYWx1ZUFuZExvZ0V4cG9zdXJlOmh9PSgwLERlLmYpKFBlLkkuZ2V0U3RhdGUoKSksdj0oYXdhaXQgbShcIkZJREVMSVVTX0tFWV9QUk9WSURFUl9JTklUX0RXRUJcIiwhMSkpLnZhbHVlLGc9KGF3YWl0IGgoXCJFRUxfQ0xJRU5UX0NPTkZJR1wiLG5ldyBVaW50OEFycmF5KSkudmFsdWU7aChcIkRXRUJfRFVNTVlfQUJfVEVTVFwiLCExKSxmKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcImVlbF9rZXlfbWFuYWdlcl9lbmFibGVkXCIsZGltZW5zaW9uczp7ZW5hYmxlZDpTdHJpbmcodil9fSk7dHJ5e2NvbnN0IHQ9YXdhaXQgYXN5bmMgZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzKXtjb25zdCBjPWF3YWl0IGUuY3JlYXRlTWVzc2FnaW5nU2Vzc2lvbih0LCgwLE4uc2opKG4pLCgwLE4uc2opKHIpLCgwLE4uc2opKENlKSwoMCxOLnNqKShmZSksKDAsTi5zaikoaSksKDAsTi5zaikoRC5xSiksKDAsTi5zaikoKDAsQWUuSGIpKCkuaXRlbUZvclVzZXIoKDAsVS5NYykodC51c2VySWQpKSksKDAsTi5zaikoKDAsUmUuJG8pKCkpLCgwLE4uc2opKCgwLFJlLkcpKCkpLCgwLE4uc2opKG8pLCgwLE4uc2opKGEpLHMpLGw9YXdhaXQgYy5nZXRDb252ZXJzYXRpb25NYW5hZ2VyKCksdT1hd2FpdCBjLmdldEZlZWRNYW5hZ2VyKCksZD1hd2FpdCBjLmdldFNuYXBNYW5hZ2VyKCk7cmV0dXJue2dldENvbnZlcnNhdGlvbk1hbmFnZXI6KCk9PmwsZ2V0RmVlZE1hbmFnZXI6KCk9PnUsZ2V0U25hcE1hbmFnZXI6KCk9PmQsZGlzcG9zZTpjLmRpc3Bvc2V9fShhLCgoZSx0LG4scik9Pih7ZGF0YWJhc2VMb2NhdGlvbjpcIjptZW1vcnk6XCIsdXNlcklkOmUsdXNlckFnZW50UHJlZml4OlwiXCIsZGVidWc6ITEsdHdlYWtzOnt0d2Vha3M6bmV3IE1hcChbW051bWJlcih1LkJMLk1JTl9NRVNTQUdFU19SRVRVUk5FRF9GUk9NX0lOSVRJQUxfQ09OVl9GRVRDSF9LRVkpLFwiMTAwXCJdLFtOdW1iZXIodS5CTC5GT1JDRV9TVEVQX0ZBSUxVUkVfS0VZKSxTdHJpbmcodD91LktVLlJFVFJZQUJMRTp1LktVLk5PTkUpXSxbTnVtYmVyKHUuQkwuRkxPV19PUkNIRVNUUkFUT1JfU1RFUF9USU1FT1VUX01TX0tFWSksXCIzMDAwMFwiXSxbTnVtYmVyKHUuQkwuQVBJX0dBVEVXQVlfQ1VTVE9NX0VORFBPSU5UX0tFWSksTmUuelVdLFtOdW1iZXIodS5CTC5BUlJPWU9fQkFDS0VORF9FTkRQT0lOVF9TRUxFQ1RPUl9LRVkpLFwiQ1VTVE9NXCJdLFtOdW1iZXIodS5CTC5FTkRfVE9fRU5EX0VOQ1JZUFRJT05fS0VZKSxcIm5vb3BcIl0sW051bWJlcih1LkJMLlNLSVBfRklERUxJVVNfREVDUllQVElPTl9GT1JfREVTS1RPUF9XRUIpLFN0cmluZyghMCldLFtOdW1iZXIodS5CTC5EV0VCX0VOQUJMRV9DTEVBUl9NRURJQV9SRUZFUkVOQ0VfTElTVFNfV0hFTl9ERUNSWVBUSU9OX0ZBSUwpLFwidHJ1ZVwiXSxbTnVtYmVyKHUuQkwuRU5BQkxFX0FMV0FZU19TSUdOQUxfRkVFRF9ERUxFR0FURSksXCJ0cnVlXCJdLFtOdW1iZXIodS5CTC5FTkFCTEVfSU5BQ1RJVkVfQ09OVl9ERUxFR0FURV9VUERBVEVTKSxcImZhbHNlXCJdLFtOdW1iZXIodS5CTC5FRUxfQ0xJRU5UX0NPTkZJR19DT0ZfT1ZFUlJJREUpLG5ldyBUZXh0RGVjb2RlcihcInV0Zi04XCIpLmRlY29kZShyKV1dKX19KSkobixpLDAsZykscyxyLG8sZCxwLHYpO2UoKGU9PntlLm1lc3NhZ2luZy5jbGllbnQ9dH0pKX1jYXRjaChlKXshZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIEVycm9yKXtjb25zdCB0PWU7KDAsbC5UYikodCl9fShlKX19LGRlc3Ryb3lDbGllbnQ6YXN5bmMoKT0+e2NvbnN0IG49dCgpLm1lc3NhZ2luZztuLmNsaWVudCYmKGF3YWl0IG4uY2xpZW50LmRpc3Bvc2UoKSxlKChlPT57ZGVsZXRlIGUubWVzc2FnaW5nLmNsaWVudH0pKSl9LG5ld0dyb3VwczpbXSxmZWVkOnt9LHNob3VsZFVzZU5ld0NyZWF0ZUNvbnZlcnNhdGlvbjp2b2lkIDAsc2V0U2hvdWxkVXNlTmV3Q3JlYXRlQ29udmVyc2F0aW9uOmFzeW5jKCk9PntpZih2b2lkIDAhPT10KCkubWVzc2FnaW5nLnNob3VsZFVzZU5ld0NyZWF0ZUNvbnZlcnNhdGlvbilyZXR1cm47Y29uc3R7Z2V0Q2xpZW50Q29mVmFsdWVBbmRMb2dFeHBvc3VyZTpufT0oMCxEZS5mKShQZS5JLmdldFN0YXRlKCkpLHI9KGF3YWl0IG4oXCJEV0VCX05FV0NIQVRfVjJfQUJfVEVTVFwiLCExKSkudmFsdWU7ZSgoZT0+e2UubWVzc2FnaW5nLnNob3VsZFVzZU5ld0NyZWF0ZUNvbnZlcnNhdGlvbj1yfSkpfSxzaG91bGRFbmFibGVFeGlmVHJpbW1pbmc6dm9pZCAwLHNldFNob3VsZEVuYWJsZUV4aWZUcmltbWluZzphc3luYygpPT57aWYodm9pZCAwIT09dCgpLm1lc3NhZ2luZy5zaG91bGRFbmFibGVFeGlmVHJpbW1pbmcpcmV0dXJuO2NvbnN0e2dldENsaWVudENvZlZhbHVlQW5kTG9nRXhwb3N1cmU6bn09KDAsRGUuZikoUGUuSS5nZXRTdGF0ZSgpKSxyPShhd2FpdCBuKFwiRFdFQl9JTUFHRV9FWElGX1RSSU1NSU5HXCIsITApKS52YWx1ZTtlKChlPT57ZS5tZXNzYWdpbmcuc2hvdWxkRW5hYmxlRXhpZlRyaW1taW5nPXJ9KSl9LGxvY2tlZENvbnZlcnNhdGlvbklkczpuZXcgU2V0LGZlZWRJdGVtU2VsZWN0ZWQ6bj0+eygwLExlLmhCKSh0KCkpKG4pLGUoKGU9Pnt2YXIgdDtlLm1lc3NhZ2luZy5mb2N1c2VkQ29udmVyc2F0aW9uSWQ9KHQ9ZS5tZXNzYWdpbmcuZm9jdXNlZENvbnZlcnNhdGlvbklkLCgoMCxWZS5tdikodCk/KDAsVmUuSnMpKHQpOnQpPT09bj92b2lkIDA6bil9KSl9LGhhc05vTW9yZUZlZWRFbnRyaWVzOiExLHF1ZXJ5aW5nRmVlZDohMSxpc0NvbXBvc2luZzohMSxzZXRJc0NvbXBvc2luZzp0PT57ZSgoZT0+e2UubWVzc2FnaW5nLmlzQ29tcG9zaW5nPXR9KSl9LHNldENvbnZlcnNhdGlvbkVudHJ5U291cmNlOnQ9PntlKChlPT57ZS5tZXNzYWdpbmcuY29udmVyc2F0aW9uRW50cnlTb3VyY2U9dH0pKX0sZHJhZnRlZE1lc3NhZ2U6bmV3IE1hcCx1cGRhdGVEcmFmdE1lc3NhZ2U6KHQsbik9PntlKChlPT57ZS5tZXNzYWdpbmcuZHJhZnRlZE1lc3NhZ2Uuc2V0KHQsbil9KSl9LGRlbGV0ZURyYWZ0TWVzc2FnZTp0PT57ZSgoZT0+e2UubWVzc2FnaW5nLmRyYWZ0ZWRNZXNzYWdlLmRlbGV0ZSh0KX0pKX0sc3luY0ZlZWQ6YXN5bmMgbj0+e2xldCByO3RyeXtjb25zdCBuPVFlKHQoKSk7ZSgoZT0+e2UubWVzc2FnaW5nLmZlZWRFcnJvciYmZigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJmZWVkLnN5bmNfZmVlZC5yZW1vdmVkX2V4aXN0aW5nX2ZlZWRfZXJyb3JcIn0pLGUubWVzc2FnaW5nLmZlZWRFcnJvcj12b2lkIDB9KSksZSgoZT0+e2UubWVzc2FnaW5nLnF1ZXJ5aW5nRmVlZD0hMH0pKTtjb25zdHtmZXRjaFVzZXJzOnJ9PXQoKS51c2VyLHtmZWVkRW50cmllczpvLHJlc2V0RmVlZDpzLGZlZWRFbnRyaWVzRGVsZXRlZDpjfT1hd2FpdCBhc3luYyBmdW5jdGlvbihlKXtyZXR1cm4oMCxVLmp5KSgoYXN5bmModCxuKT0+e2NvbnN0IHI9bmV3IE1hcDt0cnl7Y29uc3QgZT1hd2FpdCBELnh4O3ZvaWQgMCE9PWUmJnIuc2V0KHUubnIuVElWX1RSQU5TQUNUSU9OX0lEX0JMSVpaQVJELGUpfWNhdGNoKGUpe24oZSl9ZS5nZXRGZWVkTWFuYWdlcigpLmZldGNoQW5kU3luY0ZlZWQoMjAsdS5RQi5DT0xEX1NUQVJULCgwLE4uc2opKHtvbkZldGNoQW5kU3luY0ZlZWRDb21wbGV0ZTooZSxuLHIsaSxvLGEpPT57dCh7ZmVlZEVudHJpZXM6ZSxoYXNOb01vcmU6IWkscmVzZXRGZWVkOm8sZmVlZEVudHJpZXNEZWxldGVkOnJ9KX0sLi4uVihcImZldGNoRmVlZENhbGxiYWNrXCIsbil9KSxyKX0pKX0obik7ZigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJmZWVkLnN5bmNfZmVlZC5zdWNjZXNzXCJ9KTt0cnl7YXdhaXQgcihhKCkoaSgpKG8ubWFwKChlPT5lLnBhcnRpY2lwYW50cykpKSkpfWNhdGNoKGUpe31lKChlPT57cyYmKGUubWVzc2FnaW5nLmZlZWQ9e30pLCgwLFplLlRKKShvLGUubWVzc2FnaW5nLmZlZWQpO2Zvcihjb25zdCB0IG9mIGMpZGVsZXRlIGUubWVzc2FnaW5nLmZlZWRbKDAsVS5NYykodC5mZWVkRW50cnlJZGVudGlmaWVyLmNvbnZlcnNhdGlvbklkKV07ZS5tZXNzYWdpbmcucXVlcnlpbmdGZWVkPSExfSkpfWNhdGNoKHQpe2lmKHQgaW5zdGFuY2VvZiBFcnJvcil7Y29uc3Qgbj10O2UoKGU9PntlLm1lc3NhZ2luZy5xdWVyeWluZ0ZlZWQ9ITEsZS5tZXNzYWdpbmcuZmVlZEVycm9yPW59KSksZigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJmZWVkLnN5bmNfZmVlZC5mYWlsdXJlXCJ9KSwoMCxsLlRiKShuKSxyPXQgaW5zdGFuY2VvZiBCP3UuRTJbdC5jYWxsYmFja1N0YXR1c10udG9Mb3dlckNhc2UoKTpcInVua25vd25cIn19ZmluYWxseXt0cnl7KDAsUC55JCkobixyKX1jYXRjaChlKXt9fX0scGFnZUZlZWQ6YXN5bmMoKT0+e2NvbnN0e2ZldGNoVXNlcnM6bn09dCgpLnVzZXIscj1RZSh0KCkpLHtmZWVkOm8saGFzTm9Nb3JlRmVlZEVudHJpZXM6c309dCgpLm1lc3NhZ2luZztpZihzJiYhby5zaXplKXJldHVybjtjb25zdCBjPSgwLFplLlhTKShvKTtpZighYylyZXR1cm47ZSgoZT0+e2UubWVzc2FnaW5nLnF1ZXJ5aW5nRmVlZD0hMH0pKTtjb25zdHtmZWVkRW50cmllczpsLGhhc05vTW9yZTp1fT1hd2FpdCBhc3luYyBmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4oMCxVLmp5KSgoKHQsaSk9PntlLmdldEZlZWRNYW5hZ2VyKCkucXVlcnlGZWVkKG4sciw0MCwoMCxOLnNqKSh7b25RdWVyeUZlZWRDb21wbGV0ZTooZSxuKT0+e3Qoe2ZlZWRFbnRyaWVzOmUsaGFzTm9Nb3JlOm59KX0sLi4uVihcInBhZ2VGZWVkQ2FsbGJhY2tcIixpKX0pKX0pKX0ociwwLGMubGFzdEV2ZW50VXBkYXRlVGltZXN0YW1wLGMuY29udmVyc2F0aW9uSWQpO2F3YWl0IG4oYSgpKGkoKShsLm1hcCgoZT0+ZS5wYXJ0aWNpcGFudHMpKSkpKSxlKChlPT57ZS5tZXNzYWdpbmcuaGFzTm9Nb3JlRmVlZEVudHJpZXM9dSxlLm1lc3NhZ2luZy5xdWVyeWluZ0ZlZWQ9ITEsKDAsWmUuVEopKGwsZS5tZXNzYWdpbmcuZmVlZCl9KSl9LGNvbnZlcnNhdGlvbnM6e30sZmV0Y2hDb252ZXJzYXRpb246YXN5bmMgbj0+e2NvbnN0IHI9UWUodCgpKSxpPWF3YWl0IGFzeW5jIGZ1bmN0aW9uKGUsdCl7cmV0dXJuKDAsVS5qeSkoKChuLHIpPT57ZS5nZXRDb252ZXJzYXRpb25NYW5hZ2VyKCkuZmV0Y2hDb252ZXJzYXRpb24odCwoMCxOLnNqKSh7b25GZXRjaENvbnZlcnNhdGlvbkNvbXBsZXRlOmU9PntuKGUpfSwuLi5WKFwiZmV0Y2hDb252ZXJzYXRpb25cIixyKX0pKX0pKX0ocixuKTtyZXR1cm4gZSgoZT0+eygwLFplLlpPKShpLGUubWVzc2FnaW5nLmNvbnZlcnNhdGlvbnMpfSkpLGl9LHBhZ2luYXRlTWVzc2FnZXM6YXN5bmMgbj0+e2NvbnN0IHI9UWUodCgpKSxpPSgwLFUuTWMpKG4pLG89dCgpLm1lc3NhZ2luZy5jb252ZXJzYXRpb25zW2ldPy5vbGRlc3RNZXNzYWdlSWQ7ZSgoZT0+cWUoZSxuLCEwKSkpO2NvbnN0e21lc3NhZ2VzOmEsY29udmVyc2F0aW9uOnMsaGFzTW9yZU1lc3NhZ2VzOmN9PWF3YWl0IGFzeW5jIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4oMCxVLmp5KSgoKHIsaSk9PntlLmdldENvbnZlcnNhdGlvbk1hbmFnZXIoKS5mZXRjaENvbnZlcnNhdGlvbldpdGhNZXNzYWdlc1BhZ2luYXRlZCh0LG4sNDAsKDAsTi5zaikoe29uU2VydmVyUmVxdWVzdDooKT0+e30sb25GZXRjaENvbnZlcnNhdGlvbldpdGhNZXNzYWdlc0NvbXBsZXRlOihlLHQsbik9PntyKHttZXNzYWdlczp0LGNvbnZlcnNhdGlvbjplLGhhc01vcmVNZXNzYWdlczpufSl9LG9uRXJyb3I6ZT0+e2koZSl9fSkpfSkpfShyLG4sbyk7ZSgoZT0+e2NvbnN0IHQ9ZS5tZXNzYWdpbmcuY29udmVyc2F0aW9uc1tpXT8ubWVzc2FnZXM/P25ldyBNYXAsbj0oMCxaZS5JVCkoYSk7ZS5tZXNzYWdpbmcuY29udmVyc2F0aW9uc1tpXT17bWVzc2FnZXM6bmV3IE1hcChbLi4udCwuLi5uXSksaGFzTW9yZU1lc3NhZ2VzOmMsY29udmVyc2F0aW9uOnMsaXNBY3RpdmU6ZS5tZXNzYWdpbmcuY29udmVyc2F0aW9uc1tpXT8uaXNBY3RpdmU/PyExLGxvYWRpbmdNZXNzYWdlczohMSxvbGRlc3RNZXNzYWdlSWQ6KDAsWmUuWFApKGEpfX0pKX0sZW50ZXJDb252ZXJzYXRpb246YXN5bmMobixyKT0+e2NvbnN0IGk9KDAsVS5NYykobik7ZSgoZT0+e1hlKGUsbix2b2lkIDApfSkpLGUoKGU9PntlLm1lc3NhZ2luZy5jb252ZXJzYXRpb25zW2ldPy5tZXNzYWdlc3x8cWUoZSxuLCEwKX0pKTtjb25zdCBvPVFlKHQoKSk7dHJ5e2F3YWl0IGFzeW5jIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbmV3IFByb21pc2UoKChyLGkpPT57ZS5nZXRDb252ZXJzYXRpb25NYW5hZ2VyKCkuZW50ZXJDb252ZXJzYXRpb24odCxuLCgwLE4uc2opKEcoXCJlbnRlckNvbnZlcnNhdGlvblwiLHIsaSkpKX0pKX0obyxuLHIpO2NvbnN0e21lc3NhZ2VzOmEsaGFzTW9yZU1lc3NhZ2VzOnN9PWF3YWl0IGFzeW5jIGZ1bmN0aW9uKGUsdCl7cmV0dXJuKDAsVS5qeSkoKChuLHIpPT57ZS5nZXRDb252ZXJzYXRpb25NYW5hZ2VyKCkuZmV0Y2hDb252ZXJzYXRpb25XaXRoTWVzc2FnZXModCwoMCxOLnNqKSh7b25TZXJ2ZXJSZXF1ZXN0OigpPT57fSxvbkZldGNoQ29udmVyc2F0aW9uV2l0aE1lc3NhZ2VzQ29tcGxldGU6KGUsdCxyKT0+e24oe21lc3NhZ2VzOnQsY29udmVyc2F0aW9uOmUsaGFzTW9yZU1lc3NhZ2VzOnJ9KX0sLi4uVihcImZldGNoQ29udmVyc2F0aW9uV2l0aE1lc3NhZ2VzXCIscil9KSl9KSl9KG8sbik7ZSgoZT0+e2UubWVzc2FnaW5nLmNvbnZlcnNhdGlvbnNbaV09e2NvbnZlcnNhdGlvbjplLm1lc3NhZ2luZy5jb252ZXJzYXRpb25zW2ldPy5jb252ZXJzYXRpb24sbWVzc2FnZXM6KDAsWmUuSVQpKGEpLGhhc01vcmVNZXNzYWdlczpzLGlzQWN0aXZlOiEwLGxvYWRpbmdNZXNzYWdlczohMSxvbGRlc3RNZXNzYWdlSWQ6KDAsWmUuWFApKGEpfX0pKSxzJiZhd2FpdCB0KCkubWVzc2FnaW5nLnBhZ2luYXRlTWVzc2FnZXMobil9Y2F0Y2godCl7aWYodCBpbnN0YW5jZW9mIEVycm9yKXtjb25zdCByPXQ7ZSgoZT0+e1hlKGUsbixyKX0pKX19fSxnZXRPbmVPbk9uZUNvbnZlcnNhdGlvbklkOm4oSCksZXhpdENvbnZlcnNhdGlvbjphc3luYyhuLHIpPT57Y29uc3QgaT0oMCxVLk1jKShuKTtlKChlPT57ZS5tZXNzYWdpbmcuY29udmVyc2F0aW9uc1tpXT17Li4uZS5tZXNzYWdpbmcuY29udmVyc2F0aW9uc1tpXSxpc0FjdGl2ZTohMSxsb2FkaW5nTWVzc2FnZXM6ITF9fSkpLHQoKS5tZXNzYWdpbmcucHVyZ2VDb252ZXJzYXRpb25NZXNzYWdlcyhuKTtjb25zdCBvPVFlKHQoKSk7dHJ5e2F3YWl0IGFzeW5jIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbmV3IFByb21pc2UoKChyLGkpPT57ZS5nZXRDb252ZXJzYXRpb25NYW5hZ2VyKCkuZXhpdENvbnZlcnNhdGlvbih0LG4sKDAsTi5zaikoRyhcImV4aXRDb252ZXJzYXRpb25cIixyLGkpKSl9KSl9KG8sbixyKX1jYXRjaChlKXt9fSxwdXJnZUNvbnZlcnNhdGlvbk1lc3NhZ2VzOm49Pntjb25zdCByPSgwLFUuTWMpKG4pLGk9TWUuQi5nZXRTdGF0ZSgpLmNvbnZlcnNhdGlvbklkPT09bjtCb29sZWFuKHQoKS5tZXNzYWdpbmcuY29udmVyc2F0aW9uc1tyXT8uaXNBY3RpdmUpfHxpfHxlKChlPT57Y29uc3QgdD1lLm1lc3NhZ2luZy5jb252ZXJzYXRpb25zW3JdO3QmJih0Lm1lc3NhZ2VzPXZvaWQgMCl9KSl9LGZldGNoQ29udmVyc2F0aW9uQnlQYXJ0aWNpcGFudHM6bih0ZSksY3JlYXRlQ29udmVyc2F0aW9uOm4obmUpLGVuc3VyZU5ldHdvcmtDb252ZXJzYXRpb246bihyZSksaW52aXRlUGFydGljaXBhbnRzOmFzeW5jKGUsbik9PntmKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcImludml0ZV9wYXJ0aWNpcGFudHNfYXR0ZW1wdFwifSk7dHJ5e2F3YWl0IGFzeW5jIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbmV3IFByb21pc2UoKChyLGkpPT57ZS5nZXRDb252ZXJzYXRpb25NYW5hZ2VyKCkuaW52aXRlUGFydGljaXBhbnRzKHQsbiwoMCxOLnNqKShHKFwiaW52aXRlUGFydGljaXBhbnRzXCIscixpKSkpfSkpfShRZSh0KCkpLGUsbiksZigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJpbnZpdGVfcGFydGljaXBhbnRzX3N1Y2Nlc3NcIn0pLCgwLFAuX0EpKCgwLFUuTWMpKGUpKX1jYXRjaChlKXtsZXQgdD1cInVua25vd25cIjtlIGluc3RhbmNlb2YgRXJyb3ImJigoMCxsLlRiKShlKSxlIGluc3RhbmNlb2YgQiYmKHQ9dS5FMltlLmNhbGxiYWNrU3RhdHVzXS50b0xvd2VyQ2FzZSgpKSksZigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJpbnZpdGVfcGFydGljaXBhbnRzX2ZhaWx1cmVcIixkaW1lbnNpb25zOntyZWFzb246dH19KX19LGxlYXZlQ29udmVyc2F0aW9uOm4oSyksY2xlYXJDb252ZXJzYXRpb246bihqKSx1cGRhdGVNZXNzYWdlTm90aWZpY2F0aW9uU2V0dGluZ3M6bihaKSx1cGRhdGVDb252ZXJzYXRpb25SZXRlbnRpb25Qb2xpY3k6bih6KSxkaXNwbGF5ZWRNZXNzYWdlczpuKFcpLHNlbmRUZXh0TWVzc2FnZTphc3luYyhlLG4scik9Pntjb25zdCBpPSgwLGplLlpEKSh0KCkpO2F3YWl0IGFzeW5jIGZ1bmN0aW9uKGUsdCxuLHIsaSl7cmV0dXJuIFgoZSxbdF0se2NvbnRlbnQ6cC5Db250ZW50cy5lbmNvZGUoe2NvbnRlbnQ6eyRjYXNlOlwidGV4dFwiLHRleHQ6e2F0dHJpYnV0ZXM6KDAsRi56Vykobix0KSx0ZXh0Om59fX0pLmZpbmlzaCgpLHF1b3RlZE1lc3NhZ2VJZDpyLGNvbnRlbnRUeXBlOnUuemMuQ0hBVCxwbGF0Zm9ybUFuYWx5dGljczp7Y29udGVudDppPygwLFAuaEMpKGkpOnZvaWQgMCxtZXRyaWNzTWVzc2FnZVR5cGU6dS5LdS5URVhULG1ldHJpY3NNZXNzYWdlTWVkaWFUeXBlOnUuY0UuTk9fTUVESUEscmVhY3Rpb25Tb3VyY2U6dS56dy5OT05FLGF0dGVtcHRJZDooMCxVLk9ZKSgoMCx4LlopKCkpfSxsb2NhbE1lZGlhUmVmZXJlbmNlczpbXSxpbmNpZGVudGFsQXR0YWNobWVudHM6W10sc2F2ZVBvbGljeTp1LmZCLkxJRkVUSU1FLGFsbG93c1RyYW5zY3JpcHRpb246ITEsYm90TWVudGlvbjohMX0pfShRZSh0KCkpLGUsbixyPy5tZXNzYWdlSWQsKDAsUC5faCkodCxlLHIsaSkpfSxzZW5kU25hcDphc3luYyhlLG4scik9Pntjb25zdCBpPSgwLGplLlpEKSh0KCkpO2F3YWl0IGFzeW5jIGZ1bmN0aW9uKGUsdCxuLHIsaSl7cmV0dXJuIHEoZSx0LFtuXSx1LnpjLlNOQVAsdS5LdS5TTkFQLHIsaSl9KFFlKHQoKSksZSxuLHtjaGF0U291cmNlOmksc25hcFNvdXJjZTpcIkNBTUVSQVwifSxyKX0sc2VuZENhbGxpbmdTdGF0dXNNZXNzYWdlOm4oWSksc2VuZFNhdmVUb0NhbWVyYVJvbGxTdGF0dXNNZXNzYWdlOm4oYWUpLHNlbmRNZWRpYU1lc3NhZ2U6YXN5bmMoZSxuKT0+e2NvbnN0IHI9UWUodCgpKSxpPSgwLGplLlpEKSh0KCkpLG89YXdhaXQgUHJvbWlzZS5hbGwobi5tYXAoKGFzeW5jKGUsbik9PnsoMCxGZS5iaSkodCgpLGtlLmg2KTtjb25zdCByPSgwLGplLnlUKSh0KCkpLGk9dm9pZCAwPT09cnx8cj9lOmF3YWl0KDAsV2UuWUwpKGUsbik7aWYoKDAsZy5OWikoaS50eXBlKT09PXYuRC5JbWFnZSYmaS5zaXplPktlKXRyeXtyZXR1cm4gYXdhaXQoMCxnLmNVKShpLEtlKX1jYXRjaChlKXt0aHJvdyBmKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcIm9wdGltaXppbmdfaW1hZ2VfZmFpbGVkXCIsZGltZW5zaW9uczp7c2l6ZTpgJHtNYXRoLnJvdW5kKGkuc2l6ZS8xMDQ4NTc2KX1NQmB9fSksZX1yZXR1cm4gaX0pKSk7YXdhaXQgYXN5bmMgZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHEoZSxbdF0sbix1LnpjLkVYVEVSTkFMX01FRElBLHUuS3UuTUVESUEscil9KHIsZSxvLCgwLFAuX2gpKHQsZSx2b2lkIDAsaSkpfSxzZW5kVHlwaW5nTm90aWZpY2F0aW9uOm4oUSksdXBkYXRlTWVzc2FnZTphc3luYyhlLG4scik9Pntjb25zdCBpPVFlKHQoKSksbz11LlI2W3JdLnRvTG9jYWxlTG93ZXJDYXNlKCk7ZigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJ1cGRhdGVfbWVzc2FnZV9hdHRlbXB0XCIsZGltZW5zaW9uczp7dXBkYXRlOm99fSk7dHJ5e2NvbnN0IGE9KDAsVS5NYykoZSkscz10KCkubWVzc2FnaW5nLmNvbnZlcnNhdGlvbnNbYV07aWYoIXMpcmV0dXJuIHZvaWQgZigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJ1cGRhdGVfbWVzc2FnZV9mYWlsdXJlXCIsZGltZW5zaW9uczp7dXBkYXRlOm8scmVhc29uOlwiY29udmVyc2F0aW9uX25vdF9mb3VuZFwifX0pO2NvbnN0IGM9cy5tZXNzYWdlcz8uZ2V0KG4pO2lmKCFjKXJldHVybiB2b2lkIGYoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwidXBkYXRlX21lc3NhZ2VfZmFpbHVyZVwiLGRpbWVuc2lvbnM6e3VwZGF0ZTpvLHJlYXNvbjpcIm1lc3NhZ2Vfbm90X2ZvdW5kXCJ9fSk7YXdhaXQgYXN5bmMgZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyBQcm9taXNlKCgoaSxvKT0+e2UuZ2V0Q29udmVyc2F0aW9uTWFuYWdlcigpLnVwZGF0ZU1lc3NhZ2UodCxuLHIsKDAsTi5zaikoRyhcInVwZGF0ZU1lc3NhZ2VcIixpLG8pKSl9KSl9KGksZSxuLHIpLGYoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwidXBkYXRlX21lc3NhZ2Vfc3VjY2Vzc1wiLGRpbWVuc2lvbnM6e3VwZGF0ZTpvfX0pO2NvbnN0IGw9KDAsd2UueUspKHQoKSksZD1sPygwLFUuTWMpKGwpOnZvaWQgMDtzd2l0Y2gocil7Y2FzZSB1LlI2LlNBVkU6KDAsUC5fSikoYyxzLmNvbnZlcnNhdGlvbixkKTticmVhaztjYXNlIHUuUjYuVU5TQVZFOigwLFAuY0YpKGMscy5jb252ZXJzYXRpb24sZCk7YnJlYWs7Y2FzZSB1LlI2LkVSQVNFOigwLFAuZ0QpKGMsXCJSRU1PVkVfTUVTU0FHRVwiLHMuY29udmVyc2F0aW9uLGQpfX1jYXRjaChlKXtsZXQgdD1cInVua25vd25cIjtlIGluc3RhbmNlb2YgRXJyb3ImJigoMCxsLlRiKShlKSxlIGluc3RhbmNlb2YgQiYmKHQ9dS5FMltlLmNhbGxiYWNrU3RhdHVzXS50b0xvd2VyQ2FzZSgpKSksZigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJ1cGRhdGVfbWVzc2FnZV9mYWlsdXJlXCIsZGltZW5zaW9uczp7dXBkYXRlOm8scmVhc29uOnR9fSl9fSxtZWRpYU1lc3NhZ2VzRGlzcGxheWVkOm4oZWUpLHJlYWN0VG9NZXNzYWdlOmFzeW5jKGUsbixyLGkpPT57Y29uc3Qgbz1RZSh0KCkpO2YoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwicmVhY3RfdG9fbWVzc2FnZV9hdHRlbXB0XCJ9KTt0cnl7Y29uc3QgYT0oMCxVLk1jKShlKSxzPXQoKS5tZXNzYWdpbmcuY29udmVyc2F0aW9uc1thXTtpZighcylyZXR1cm4gdm9pZCBmKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcInJlYWN0X3RvX21lc3NhZ2VfZmFpbHVyZVwiLGRpbWVuc2lvbnM6e3JlYXNvbjpcImNvbnZlcnNhdGlvbl9ub3RfZm91bmRcIn19KTtjb25zdCBjPXMubWVzc2FnZXM/LmdldChuKTtpZighYylyZXR1cm4gdm9pZCBmKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcInJlYWN0X3RvX21lc3NhZ2VfZmFpbHVyZVwiLGRpbWVuc2lvbnM6e3JlYXNvbjpcIm1lc3NhZ2Vfbm90X2ZvdW5kXCJ9fSk7Y29uc3QgbD0oMCx3ZS55SykodCgpKSx1PWw/KDAsVS5NYykobCk6dm9pZCAwLGQ9Yy5tZXRhZGF0YS5yZWFjdGlvbnMuZmluZCgoZT0+ZS51c2VySWQ9PT1sKSk7YXdhaXQgYXN5bmMgZnVuY3Rpb24oZSx0LG4scixpKXtyZXR1cm4gbmV3IFByb21pc2UoKChvLGEpPT57ZS5nZXRDb252ZXJzYXRpb25NYW5hZ2VyKCkucmVhY3RUb01lc3NhZ2UodCxuLHIsaSwoMCxOLnNqKShHKFwicmVhY3RUb01lc3NhZ2VcIixvLGEpKSl9KSl9KG8sZSxuLHIsaSksZCYmKDAsUC5nRCkoYyxcIlVQREFURV9SRUFDVElPTlwiLHMuY29udmVyc2F0aW9uLHUsZC5yZWFjdGlvbil9Y2F0Y2goZSl7bGV0IHQ9XCJ1bmtub3duXCI7ZSBpbnN0YW5jZW9mIEVycm9yJiYoKDAsbC5UYikoZSksZSBpbnN0YW5jZW9mIEImJih0PXUuRTJbZS5jYWxsYmFja1N0YXR1c10udG9Mb3dlckNhc2UoKSkpLGYoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwicmVhY3RfdG9fbWVzc2FnZV9mYWlsdXJlXCIsZGltZW5zaW9uczp7cmVhc29uOnR9fSl9fSxyZW1vdmVSZWFjdGlvbjphc3luYyhlLG4pPT57Y29uc3Qgcj1RZSh0KCkpO2YoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwicmVtb3ZlX3JlYWN0aW9uX2F0dGVtcHRcIn0pO3RyeXtjb25zdCBpPSgwLFUuTWMpKGUpLG89dCgpLm1lc3NhZ2luZy5jb252ZXJzYXRpb25zW2ldO2lmKCFvKXJldHVybiB2b2lkIGYoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwicmVtb3ZlX3JlYWN0aW9uX2ZhaWx1cmVcIixkaW1lbnNpb25zOntyZWFzb246XCJjb252ZXJzYXRpb25fbm90X2ZvdW5kXCJ9fSk7Y29uc3QgYT1vLm1lc3NhZ2VzPy5nZXQobik7aWYoIWEpcmV0dXJuIHZvaWQgZigpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJyZW1vdmVfcmVhY3Rpb25fZmFpbHVyZVwiLGRpbWVuc2lvbnM6e3JlYXNvbjpcIm1lc3NhZ2Vfbm90X2ZvdW5kXCJ9fSk7Y29uc3Qgcz0oMCx3ZS55SykodCgpKSxjPXM/KDAsVS5NYykocyk6dm9pZCAwLGw9YS5tZXRhZGF0YS5yZWFjdGlvbnMuZmluZCgoZT0+ZS51c2VySWQ9PT1zKSk7YXdhaXQgYXN5bmMgZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuZXcgUHJvbWlzZSgoKHIsaSk9PntlLmdldENvbnZlcnNhdGlvbk1hbmFnZXIoKS5yZW1vdmVSZWFjdGlvbih0LG4sKDAsTi5zaikoRyhcInJlbW92ZVJlYWN0aW9uXCIscixpKSkpfSkpfShyLGUsbiksKDAsUC5nRCkoYSxcIlJFTU9WRV9SRUFDVElPTlwiLG8uY29udmVyc2F0aW9uLGMsbD8ucmVhY3Rpb24pfWNhdGNoKGUpe2xldCB0PVwidW5rbm93blwiO2UgaW5zdGFuY2VvZiBFcnJvciYmKCgwLGwuVGIpKGUpLGUgaW5zdGFuY2VvZiBCJiYodD11LkUyW2UuY2FsbGJhY2tTdGF0dXNdLnRvTG93ZXJDYXNlKCkpKSxmKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcInJlbW92ZV9yZWFjdGlvbl9mYWlsdXJlXCIsZGltZW5zaW9uczp7cmVhc29uOnR9fSl9fSx1cGRhdGVDb252ZXJzYXRpb25UaXRsZTpuKEopLHJldHJ5U2VuZE1lc3NhZ2U6bigkKSxzeW5jU2VydmVyQ29udmVyc2F0aW9uOm4oaWUpLGVuc3VyZUNvbnZlcnNhdGlvbkF2YWlsYWJsZTphc3luYyhlLG4pPT57Y29uc3Qgcj1RZSh0KCkpLGk9KDAsamUuRUQpKHQoKSk7cmV0dXJuIGkoZSkuY2F0Y2goKGFzeW5jKCk9PmllKHIse3NlcnZlckNvbnZlcnNhdGlvbklkOmV9LG4sdm9pZCAwLCEwLHUuTEYuRU5TVVJFX0NPTlZFUlNBVElPTl9BVkFJTEFCTEUpLnRoZW4oKGFzeW5jKCk9PmkoZSkpKSkpfSxjcmVhdGVDb252ZXJzYXRpb25Gb3JVc2Vyczphc3luYyhlLG4scik9Pntjb25zdCBpPSgwLGplLklvKSh0KCkpLG89KDAsamUucDEpKHQoKSkse2lzVmFsaWQ6YSxlcnJvck1lc3NhZ2U6c309KDAsSGUud2wpKEdlLnNkLGUpO2lmKCFhKXRocm93IG5ldyBFcnJvcihzKTtjb25zdCBjPWUubWFwKChlPT4oMCxVLk9ZKShlKSkpLGw9Yy5sZW5ndGg+MT91LmkxLlVTRVJDUkVBVEVER1JPVVA6dS5pMS5PTkVPTk9ORSxkPWMubGVuZ3RoPjE/dS5jYy5HUk9VUDp1LmNjLk9ORU9OT05FLGY9bD09PXUuaTEuVVNFUkNSRUFURURHUk9VUD9yOlwiXCIscD1bLi4uYyxuXSxtPSgwLGplLkpGKShwKSh0KCkpLGg9KDAsWmUuZ0spKG0pO2lmKGw9PT11LmkxLlVTRVJDUkVBVEVER1JPVVAmJmgpcmV0dXJue2NvbnZlcnNhdGlvbjpoLmNvbnZlcnNhdGlvbk1ldGFkYXRhLGNvbnZlcnNhdGlvblR5cGU6bH07dHJ5e2F3YWl0IG8ocCxmLGwsZCl9Y2F0Y2goZSl7dGhyb3coMCxaZS5zSikoKX1sZXQgdj1bXTt0cnl7dj1hd2FpdCBpKHApfWNhdGNoKGUpe3Rocm93KDAsWmUuc0opKCl9aWYoISh2Lmxlbmd0aD4wKSl0aHJvdygwLFplLnNKKSgpO3JldHVybntjb252ZXJzYXRpb246dlswXSxjb252ZXJzYXRpb25UeXBlOmx9fSxjcmVhdGVDb252ZXJzYXRpb25TZW5kVG86YXN5bmMoZSxuLHIpPT57Y29uc3QgaT0oMCxqZS5wMSkodCgpKSx7aXNWYWxpZDpvLGVycm9yTWVzc2FnZTphfT0oMCxIZS53bCkoR2Uuc2QsZSk7aWYoIW8pdGhyb3cgbmV3IEVycm9yKGEpO2NvbnN0IHM9ZS5tYXAoKGU9PigwLFUuT1kpKGUpKSksYz1zLmxlbmd0aD4xP3UuaTEuVVNFUkNSRUFURURHUk9VUDp1LmkxLk9ORU9OT05FLGw9cy5sZW5ndGg+MT91LmNjLkdST1VQOnUuY2MuT05FT05PTkUsZD1jPT09dS5pMS5VU0VSQ1JFQVRFREdST1VQP3I6XCJcIixmPVsuLi5zLG5dLHA9KDAsamUuSkYpKGYpKHQoKSksbT0oMCxaZS5nSykocCk7aWYoYz09PXUuaTEuVVNFUkNSRUFURURHUk9VUCYmbSlyZXR1cm4gbS5jb252ZXJzYXRpb25NZXRhZGF0YS5jb252ZXJzYXRpb25JZDt0cnl7Y29uc3QgZT1hd2FpdCBpKGYsZCxjLGwpO3RyeXtjPT09dS5pMS5PTkVPTk9ORSYmYXdhaXQgaWUoUWUodCgpKSx7c2VydmVyQ29udmVyc2F0aW9uSWQ6ZX0sYyx2b2lkIDAsITAsdS5MRi5FTlNVUkVfQ09OVkVSU0FUSU9OX0FWQUlMQUJMRSl9Y2F0Y2goZSl7fXJldHVybiBlfWNhdGNoKGUpe3Rocm93KDAsWmUuc0opKCl9fSxncm91cHNNZXRhZGF0YTpbXSxncm91cHNNZXRhZGF0YUJ5UGFydGljaXBhbnRzOnt9LHF1ZXJ5VXNlckdyb3Vwc01ldGFkYXRhOmFzeW5jKCk9Pntjb25zdCBuPVFlKHQoKSkscj1hd2FpdCBhc3luYyBmdW5jdGlvbihlKXtyZXR1cm4oMCxVLmp5KSgoKHQsbik9PntlLmdldENvbnZlcnNhdGlvbk1hbmFnZXIoKS5xdWVyeVVzZXJHcm91cHNNZXRhZGF0YSgoMCxOLnNqKSh7b25TdWNjZXNzOmU9Pnt0KGUpfSwuLi5WKFwicXVlcnlVc2VyR3JvdXBzTWV0YWRhdGFcIixuKX0pKX0pKX0obiksaT0oMCxaZS5ZRikociksbz0oMCxaZS5nZCkocik7cmV0dXJuIGUoKGU9PntlLm1lc3NhZ2luZy5ncm91cHNNZXRhZGF0YT1yLGUubWVzc2FnaW5nLmdyb3Vwc01ldGFkYXRhQnlQYXJ0aWNpcGFudHM9aSxlLm1lc3NhZ2luZy5uZXdHcm91cHM9bywoMCxaZS5JVikocixlLm1lc3NhZ2luZy5jb252ZXJzYXRpb25zKX0pKSxyfSxzdGFydGVkVmlld2luZ1NuYXA6bihzZSksZmluaXNoZWRWaWV3aW5nU25hcDpuKGNlKSxyZXF1ZXN0ZWRSZXBsYXlTbmFwRnJvbUZlZWQ6bihsZSkscmVxdWVzdGVkUmVwbGF5U25hcEZyb21Db252Om4odWUpLHNuYXBEb3dubG9hZFN0YXR1c0NoYW5nZWQ6bihkZSl9fX19LDM4OTgxOihlLHQsbik9PntuLmQodCx7ZjooKT0+aSxrOigpPT5yfSk7Y29uc3Qgcj1lPT52b2lkIDAhPT1lLmRpc3BsYXlJbmZvLGk9ZT0+dm9pZCAwIT09ZS5sYXN0U2VuZGVyVXNlcklkc30sNTc0MzI6KGUsdCxuKT0+e24uZCh0LHtFNTooKT0+TyxJVDooKT0+QyxJVjooKT0+XyxKbTooKT0+UCxKcDooKT0+eixMTTooKT0+TixMczooKT0+WixRTzooKT0+VixTTDooKT0+ayxUSjooKT0+YixUVDooKT0+RSxYUDooKT0+VyxYUzooKT0+UyxZRjooKT0+dyxZTTooKT0+QSxaTzooKT0+SSxhRDooKT0+RyxhZTooKT0+aixkVzooKT0+SyxmRjooKT0+QixnSzooKT0+RixnZDooKT0+RCxqWjooKT0+UixrVDooKT0+VSxtQzooKT0+VCxtcTooKT0+SCxwajooKT0+TCxzSjooKT0+eCx0MDooKT0+TX0pLG4oMjI3NjIpO3ZhciByPW4oODQ3NTMpLGk9bi5uKHIpLG89big5MzM4NiksYT1uLm4obykscz1uKDc3MzkpLGM9bi5uKHMpLGw9big1ODg2MSksdT1uKDQ1MzYzKSxkPW4ubih1KSxmPShuKDY5NzI5KSxuKDYzOTIxKSxuKDIwMjkzKSxuKDk0MDMwKSkscD1uKDQzOTgwKSxtPW4oNDQ3ODUpLGg9big4MjQ5OCksdj1uKDM4OTgxKTtjb25zdCBnPTQzMmU1LHk9ODY0ZTU7ZnVuY3Rpb24gRShlKXtyZXR1cm4gT2JqZWN0LnZhbHVlcyhlKX1mdW5jdGlvbiBfKGUsdCl7Zm9yKGNvbnN0IG4gb2YgZSlJKG4uY29udmVyc2F0aW9uTWV0YWRhdGEsdCk7cmV0dXJuIHR9ZnVuY3Rpb24gSShlLHQpe2NvbnN0IG49KDAsbS5NYykoZS5jb252ZXJzYXRpb25JZCk7cmV0dXJuIHRbbl0/dFtuXT17Li4udFtuXSxsb2FkaW5nTWVzc2FnZXM6dFtuXT8ubG9hZGluZ01lc3NhZ2VzPz8hMSxjb252ZXJzYXRpb246ZX06dFtuXT17Y29udmVyc2F0aW9uOmUsbG9hZGluZ01lc3NhZ2VzOiExfSx0fWZ1bmN0aW9uIFMoZSl7Y29uc3QgdD1FKGUpLnNvcnQoKChlLHQpPT57Y29uc3Qgbj1OdW1iZXIoZS5waW5uZWRUaW1lc3RhbXBNcykscj1OdW1iZXIodC5waW5uZWRUaW1lc3RhbXBNcyksaT1OdW1iZXIoZS5sYXN0RXZlbnRVcGRhdGVUaW1lc3RhbXApLG89TnVtYmVyKHQubGFzdEV2ZW50VXBkYXRlVGltZXN0YW1wKTtyZXR1cm4gbiYmIXI/MTohbiYmcj8tMTpuJiZyP24tcjppLW99KSk7aWYodC5sZW5ndGgpcmV0dXJuIHRbMF19ZnVuY3Rpb24gYihlLHQpe2Zvcihjb25zdCBuIG9mIGUpdFsoMCxtLk1jKShuLmNvbnZlcnNhdGlvbklkKV09bjtyZXR1cm4gdH1mdW5jdGlvbiBUKGUpe3JldHVybiBlP0UoZSkuc29ydCgoKGUsdCk9PmUucGlubmVkVGltZXN0YW1wTXMmJnQucGlubmVkVGltZXN0YW1wTXM/TnVtYmVyKGUucGlubmVkVGltZXN0YW1wTXMtdC5waW5uZWRUaW1lc3RhbXBNcyk6TnVtYmVyKHQubGFzdEV2ZW50VXBkYXRlVGltZXN0YW1wLWUubGFzdEV2ZW50VXBkYXRlVGltZXN0YW1wKSkpOigwLGYub3cpKCl9ZnVuY3Rpb24gQyhlKXtjb25zdCB0PW5ldyBNYXA7Zm9yKGNvbnN0IG4gb2YgZSl0LnNldChuLmRlc2NyaXB0b3IubWVzc2FnZUlkLG4pO3JldHVybiB0fWZ1bmN0aW9uIEEoZSl7cmV0dXJuIGU/QXJyYXkuZnJvbShlLnZhbHVlcygpKS5zb3J0KCgoZSx0KT0+TnVtYmVyKGUub3JkZXJLZXktdC5vcmRlcktleSkpKTooMCxmLm93KSgpfWZ1bmN0aW9uIFIoZSl7cmV0dXJuIGU/KDAsdi5mKShlKT9lLnBhcnRpY2lwYW50cy5tYXAoKGU9PmUucGFydGljaXBhbnRJZCkpOmUucGFydGljaXBhbnRzOigwLGYub3cpKCl9ZnVuY3Rpb24gayhlKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWUuY29udmVyc2F0aW9uVGl0bGV9KGUpP2UuY29udmVyc2F0aW9uVGl0bGU6KDAsdi5mKShlKT9lLnRpdGxlOnZvaWQgMH1mdW5jdGlvbiBPKGUpe3JldHVybmAke2UubmFtZX0tJHtlLmxhc3RNb2RpZmllZC50b1N0cmluZygzNil9LSR7ZS50eXBlfWB9ZnVuY3Rpb24gTihlKXtyZXR1cm4gZS5tYXAobS5NYykuc29ydCgpLmpvaW4oXCIsXCIpfWZ1bmN0aW9uIHcoZSl7cmV0dXJuIGMoKShlLChlPT5OKGUuY29udmVyc2F0aW9uTWV0YWRhdGEucGFydGljaXBhbnRzLm1hcCgoZT0+ZS5wYXJ0aWNpcGFudElkKSkpKSl9ZnVuY3Rpb24gRChlKXtjb25zdCB0PVtdO2Zvcihjb25zdCBuIG9mIGUpe2NvbnN0IGU9bi5jb252ZXJzYXRpb25NZXRhZGF0YTtpZihlLmNyZWF0ZWRUaW1lc3RhbXBNcyl7Y29uc3Qgbj1OdW1iZXIoZS5jcmVhdGVkVGltZXN0YW1wTXMpO0RhdGUubm93KCktbjx5JiZ0LnB1c2goZSl9fXJldHVybiB0fWZ1bmN0aW9uIFAoZSx0KXtjb25zdCBuPShlLmNvbnZlcnNhdGlvblR5cGU9PT1sLmkxLk9ORU9OT05FP2UucGFydGljaXBhbnRzOmZ1bmN0aW9uKGUpe2lmKGUuZGlzcGxheUluZm8pe2NvbnN0IHQ9Wy4uLmUuZGlzcGxheUluZm8ubGFzdFNlbmRlclVzZXJJZHNdO2Zvcihjb25zdCBuIG9mIGUucGFydGljaXBhbnRzKXQuaW5jbHVkZXMobil8fHQucHVzaChuKTtyZXR1cm4gdH1yZXR1cm4gZS5wYXJ0aWNpcGFudHMuc2xpY2UoMCwzKX0oZSkpLmZpbHRlcigoZT0+ZSE9PXQpKTtyZXR1cm4gbi5zbGljZSgwLDMpfWZ1bmN0aW9uIE0oZSx0KXt2YXIgbixyO3JldHVybihlLmNvbnZlcnNhdGlvblR5cGU9PT1sLmkxLk9ORU9OT05FP2UucGFydGljaXBhbnRzLm1hcCgoZT0+ZS5wYXJ0aWNpcGFudElkKSk6KG49ZS5sYXN0U2VuZGVyVXNlcklkcyxyPWUucGFydGljaXBhbnRzLm1hcCgoZT0+ZS5wYXJ0aWNpcGFudElkKSksYSgpKG4scikpKS5maWx0ZXIoKGU9PmUhPT10KSkuc2xpY2UoMCwzKX1mdW5jdGlvbiBMKGUpe3JldHVybiBlLnN0YXRlPT09bC5CUS5GQUlMRUR9ZnVuY3Rpb24gVShlKXtyZXR1cm4gZS5zdGF0ZT09PWwuQlEuU0VORElOR3x8ZS5zdGF0ZT09PWwuQlEuUFJFUEFSSU5HfWZ1bmN0aW9uIHgoKXtjb25zdCBlPXAuc2QuZm9ybWF0TWVzc2FnZSh7aWQ6XCJqRlpGUWJcIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIkFuIGVycm9yIG9jY3VycmVkLCBwbGVhc2UgdHJ5IGFnYWluXCJ9XX0pO3JldHVybiBuZXcgRXJyb3IoZSl9ZnVuY3Rpb24gRihlKXtpZigwIT09ZS5sZW5ndGgpcmV0dXJuIGkoKShlLChlPT5lLmxhc3RVcGRhdGVkVGltZXN0YW1wKSl9ZnVuY3Rpb24gQihlKXtyZXR1cm4gZS5tZXRhZGF0YS5zYXZlZEJ5Lmxlbmd0aD4wfWZ1bmN0aW9uIFYoZSx0LG4pe2lmKGUuY29udmVyc2F0aW9uVHlwZT09PWwuaTEuT05FT05PTkUpe2NvbnN0IHI9RyhlLHQpO3JldHVybiEhciYmbi5pbmNsdWRlcyhyKX1yZXR1cm4hMH1mdW5jdGlvbiBHKGUsdCl7aWYoZS5jb252ZXJzYXRpb25UeXBlPT09bC5pMS5PTkVPTk9ORSlyZXR1cm4gZS5wYXJ0aWNpcGFudHMuZmlsdGVyKChlPT5lIT09dCkpWzBdfWZ1bmN0aW9uIEgoZSl7cmV0dXJuISFlJiZlPERhdGUubm93KCkrZ31mdW5jdGlvbiBXKGUpe3JldHVybiBlLmxlbmd0aD9lWzBdLmRlc2NyaXB0b3IubWVzc2FnZUlkOnZvaWQgMH1mdW5jdGlvbiBqKGUpe2xldCB0O2NvbnN0IG49aSgpKGUsKGU9PmUub3JkZXJLZXkpKTtyZXR1cm4gbiYmKHQ9bi5kZXNjcmlwdG9yLm1lc3NhZ2VJZCksdH1mdW5jdGlvbiBaKGUsdCl7ZCgpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJtZXNzYWdlX2NvbXBvc2VyX2ZpbGVfYXR0YWNoZWRcIixkaW1lbnNpb25zOnt0eXBlOmUudHlwZSxyZXN1bHQ6dH19KSxkKCkuYWRkSGlzdG9ncmFtKHttZXRyaWNzTmFtZTpcIm1lc3NhZ2VfY29tcG9zZXJfZmlsZV9zaXplXCIsdmFsdWU6ZS5zaXplLGRpbWVuc2lvbnM6e3R5cGU6ZS50eXBlLHJlc3VsdDp0fX0pfWZ1bmN0aW9uIHooZSl7c3dpdGNoKGUpe2Nhc2VcImZpbGUtaW52YWxpZC10eXBlXCI6cmV0dXJuXCJub3Rfc3VwcG9ydGVkXCI7Y2FzZVwiZmlsZS10b28tbGFyZ2VcIjpyZXR1cm5cInRvb19sYXJnZVwiO2RlZmF1bHQ6cmV0dXJuXCJ1bmtub3duXCJ9fWZ1bmN0aW9uIEsoZSl7Y29uc3QgdD0yPT09ZT8ucGFydGljaXBhbnRzLmxlbmd0aDtyZXR1cm4gQm9vbGVhbih0JiZlLnBhcnRpY2lwYW50cy5zb21lKChlPT5lLnBhcnRpY2lwYW50SWQ9PT1oLm8kKSkpfX0sNjM4Mzc6KGUsdCxuKT0+e24uZCh0LHtFcjooKT0+YyxNcTooKT0+byxoQjooKT0+cix0dzooKT0+cyx1NzooKT0+aSx3VzooKT0+YX0pO2NvbnN0IHI9ZT0+ZS5ub3RpZmljYXRpb25zLmNsZWFyTm90aWZpY2F0aW9uc0ZvckNvbnZlcnNhdGlvbixpPWU9PltlLm5vdGlmaWNhdGlvbnMuaW5pdGlhbGl6ZSxlLm5vdGlmaWNhdGlvbnMuZGVzdHJveV0sbz1lPT5bZS5ub3RpZmljYXRpb25zLm5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0U3RhdGUsZS5ub3RpZmljYXRpb25zLnNldE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0U3RhdGVdLGE9ZT0+ZS5ub3RpZmljYXRpb25zLmJyb3dzZXJOb3RpZmljYXRpb25zUGVybWlzc2lvbixzPWU9PmUubm90aWZpY2F0aW9ucy51cGRhdGVCcm93c2VyTm90aWZpY2F0aW9uc1Blcm1pc3Npb24sYz1lPT5bZS5ub3RpZmljYXRpb25zLm5vdGlmaWNhdGlvbnNFbmFibGVkLGUubm90aWZpY2F0aW9ucy5zZXROb3RpZmljYXRpb25zRW5hYmxlZF19LDY0NTc4OihlLHQsbik9PntuLmQodCx7bzooKT0+QSx4OigpPT5SfSk7dmFyIHI9big3MTM3MSksaT1uKDQ1MzYzKSxvPW4ubihpKSxhPW4oNDg4NTkpLHM9bigxNDkyNiksYz1uKDYzOTUxKSxsPW4oOTc3ODIpLHU9bi5uKGwpLGQ9big1ODg2MSksZj1uKDE0OTk4KSxwPW4oNDQ3ODUpO3UoKS5nZXRMb2dnZXIoXCJbTWVzc2FnaW5nXVtjcmVhdGVNZXNzYWdpbmdOb3RpZmljYXRpb25Qcm9jZXNzb3JdXCIpO3ZhciBtPW4oMTkwOTMpLGg9big4NTc1NSksdj1uKDUxNTc2KTt1KCkuZ2V0TG9nZ2VyKFwiW1RhbGtdW2NyZWF0ZVRhbGtOb3RpZmljYXRpb25Qcm9jZXNzb3JdXCIpLG4oNDE2MDkpLG4oNzQ4NTApO3ZhciBnPW4oNTcxMTQpLHk9big0MzE0Nyk7Y29uc3QgRT1uZXcgZy5COCh7dW5hcnk6eS5CVX0pO3UoKS5nZXRMb2dnZXIoXCJbUHVzaF1cIiksbig3MjQyMyk7dmFyIF89big4NDEzMCksST1uKDM2MjI1KTsoMCxsLmdldExvZ2dlcikoXCJbVGFsa11bbm9XaW5kb3dDYWxsTm90aWZpY2F0aW9uc0hhbmRsZXJdXCIpLG5ldyBjbGFzc3twZW5kaW5nQ2FsbHM9bmV3IE1hcDtwcm9jZXNzTmV3Tm90aWZpY2F0aW9uKGUpe2NvbnN0IHQ9ZS5vcHRpb25zLmRhdGEsbj1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSBzLlQuVEFMS19JTklUSUFURURfQVVESU86Y2FzZSBzLlQuVEFMS19JTklUSUFURURfVklERU86Y2FzZSBzLlQuVEFMS19HUk9VUF9JTklUSUFURURfQVVESU86Y2FzZSBzLlQuVEFMS19HUk9VUF9JTklUSUFURURfVklERU86cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19KHQudHlwZSkscj1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSBzLlQuVEFMS19BQkFORE9ORURfQVVESU86Y2FzZSBzLlQuVEFMS19BQkFORE9ORURfVklERU86Y2FzZSBzLlQuVEFMS19HUk9VUF9BQkFORE9ORURfQVVESU86Y2FzZSBzLlQuVEFMS19HUk9VUF9BQkFORE9ORURfVklERU86cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19KHQudHlwZSk7aWYoIW4mJiFyfHx2b2lkIDA9PT10LnRhbGtfY29yZV9wYXlsb2FkKXJldHVybiEwO2NvbnN0IGk9SlNPTi5wYXJzZSh0LnRhbGtfY29yZV9wYXlsb2FkKS5jYWxsVXVpZDtyZXR1cm4hKGkmJih0aGlzLnBlbmRpbmdDYWxscy5oYXMoaSk/bnx8KHRoaXMucGVuZGluZ0NhbGxzLmRlbGV0ZShpKSwwKTpuJiYodGhpcy5wZW5kaW5nQ2FsbHMuc2V0KGkse3BlbmRpbmdDYWxsOntjb252ZXJzYXRpb25JZDp0LmFycm95b19jb252b19pZCxjb252ZXJzYXRpb25UeXBlOnQuY29udmVyc2F0aW9uX3R5cGUsc2VuZGVyVXNlcklkOnQuc2VuZGVyX3VzZXJpZCx0YWxrQ29yZVBheWxvYWQ6dC50YWxrX2NvcmVfcGF5bG9hZH0sZXhwaXJlc0F0OkRhdGUubm93KCkrM2U0fSksMCkpKX1wb3BQZW5kaW5nQ2FsbHMoKXtjb25zdCBlPURhdGUubm93KCksdD1bLi4udGhpcy5wZW5kaW5nQ2FsbHMudmFsdWVzKCldLmZpbHRlcigodD0+dC5leHBpcmVzQXQ+ZSkpLm1hcCgoZT0+ZS5wZW5kaW5nQ2FsbCkpO3JldHVybiB0aGlzLnBlbmRpbmdDYWxscy5jbGVhcigpLHR9fSxuLnAsdSgpLmdldExvZ2dlcihcIltQdXNoXVwiKTt2YXIgUz1uKDU2MDgzKSxiPW4oMjg0NDApLFQ9big1MDIzMSksQz1uKDI2OTcyKTt1KCkuZ2V0TG9nZ2VyKFwiTm90aWZpY2F0aW9uc1N0b3JlXCIpO2xldCBBPWZ1bmN0aW9uKGUpe3JldHVybiBlW2UuU2hvdWxkUmVxdWVzdD0wXT1cIlNob3VsZFJlcXVlc3RcIixlW2UuUmVxdWVzdGluZz0xXT1cIlJlcXVlc3RpbmdcIixlW2UuUmVxdWVzdEluQmFja2dyb3VuZD0yXT1cIlJlcXVlc3RJbkJhY2tncm91bmRcIixlW2UuUGVybWlzc2lvbklzU2V0PTNdPVwiUGVybWlzc2lvbklzU2V0XCIsZX0oe30pO2NvbnN0IFI9KGUsdCk9Pntjb25zdCBuPW5ldyBNYXAoW1tDLk4uVEFMSyx7cHJvY2Vzczphc3luYyBmdW5jdGlvbihlLHQpe2NvbnN0IG49ZS5vcHRpb25zLmRhdGEscj1uLnRhbGtfY29yZV9wYXlsb2FkO2lmKCFyKXRocm93IEVycm9yKGBUYWxrIG5vdGlmaWNhdGlvbiB3aXRob3V0IHRhbGtfY29yZV9wYXlsb2FkOiAke0pTT04uc3RyaW5naWZ5KGUpfWApO2NvbnN0IGk9bi5hcnJveW9fY29udm9faWQsbz1uLmNvbnZlcnNhdGlvbl90eXBlLGE9YXdhaXQgdCgpLm1lc3NhZ2luZy5lbnN1cmVDb252ZXJzYXRpb25BdmFpbGFibGUoaSxvKTtyZXR1cm4oMCx2LkM3KShhLHIsKDAscC5NYykobi5zZW5kZXJfdXNlcmlkKSl9fV0sW0MuTi5NRVNTQUdJTkcse3Byb2Nlc3M6YXN5bmMgZnVuY3Rpb24oZSx0KXtjb25zdCBuPWUub3B0aW9ucy5kYXRhLHI9bi5hcnJveW9fY29udm9faWQsaT0oMCxwLk1jKShyKTtpZihuLnR5cGUhPT1zLlQuVFlQSU5HKXRyeXthd2FpdCB0KCkubWVzc2FnaW5nLnN5bmNTZXJ2ZXJDb252ZXJzYXRpb24oe3NlcnZlckNvbnZlcnNhdGlvbklkOnJ9LG4uY29udmVyc2F0aW9uX3R5cGUsQmlnSW50KG4uYXJyb3lvX2NvbnZlcnNhdGlvbl92ZXJzaW9uKSwhMCxkLkxGLlJFQ0VJVkVEX1BVU0hfTk9USUZJQ0FUSU9OKX1jYXRjaChlKXtvKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcIm5vdGlmaWNhdGlvbnMuc3luY19zZXJ2ZXJfY29udmVyc2F0aW9uX2Vycm9yXCJ9KX1yZXR1cm4hZnVuY3Rpb24oZSl7Y29uc3QgdD0oMCxmLnMpKCk7cmV0dXJuIHZvaWQgMCE9PXQmJigwLHAuTWMpKHQpPT09ZSYmZG9jdW1lbnQuaGFzRm9jdXMoKX0oaSl8fChvKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcIm5vdGlmaWNhdGlvbnNfY29udl9mb2N1c2VkXCJ9KSwhMSl9fV1dKTtmdW5jdGlvbiBpKGUpe2NvbnN0IHI9ZS5kYXRhOygwLFQuZmgpKHIpJiYoKDAscC4kcCkoci5kYXRhKSxhc3luYyBmdW5jdGlvbihlKXtjb25zdCByPWUuZGF0YSxpPXIub3B0aW9ucy5kYXRhLnR5cGUsbz1JLkYuZ2V0KGkpLGE9dm9pZCAwIT09bz9uLmdldChvKTp2b2lkIDAscz1hd2FpdChhPy5wcm9jZXNzKHIsdCkpPz8hMDtlLmNhbkNyZWF0ZU5hdGl2ZU5vdGlmaWNhdGlvbiYmcyYmYXdhaXQgdCgpLm5vdGlmaWNhdGlvbnMuY3JlYXRlTm90aWZpY2F0aW9uKHIsZS5hbmFseXRpY3NQYXlsb2FkKX0ocikpfXJldHVybntub3RpZmljYXRpb25zOntpbml0aWFsaXplOmFzeW5jKCk9PntpZighKDAsUy5wWCkoKSlyZXR1cm4gdm9pZCBlKChlPT57ZS5ub3RpZmljYXRpb25zLm5vdGlmaWNhdGlvbnNFbmFibGVkPSExLGUubm90aWZpY2F0aW9ucy5icm93c2VyTm90aWZpY2F0aW9uc1Blcm1pc3Npb249XCJ1bnN1cHBvcnRlZFwifSkpO25hdmlnYXRvci5zZXJ2aWNlV29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsaSk7Y29uc3QgdD0oYXdhaXQoMCxtLmMwKShjLlB1c2hOb3RpZmljYXRpb25EYXRhUHJvcGVydHkuV0VCX1BVU0hfU0VUVElORykpLm5vdGlmaWNhdGlvblNldHRpbmdSZXNwb25zZTtpZihcIm9uY2hhbmdlXCJpbiBQZXJtaXNzaW9uU3RhdHVzLnByb3RvdHlwZSl0cnl7Y29uc3QgdD1hd2FpdCBuYXZpZ2F0b3IucGVybWlzc2lvbnMucXVlcnkoe25hbWU6XCJub3RpZmljYXRpb25zXCJ9KTt0Lm9uY2hhbmdlPSgpPT57Y29uc3Qgbj10LnN0YXRlO1wicHJvbXB0XCIhPT1uJiZlKChlPT57ZS5ub3RpZmljYXRpb25zLmJyb3dzZXJOb3RpZmljYXRpb25zUGVybWlzc2lvbj1ufSkpfX1jYXRjaChlKXtjb25zdCB0PVwiRmFpbGVkIHRvIHF1ZXJ5IC8gc3Vic2NyaWJlIHRvIG5vdGlmaWNhdGlvbiBwZXJtaXNzaW9uc1wiOygwLHIuVGIpKG5ldyBFcnJvcih0LHtjYXVzZTplfSkse3RhZ3M6e2NvbnRleHQ6XCJub3RpZi1wZXJtcy1xdWVyeVwifX0pfWlmKFwibm90aWZpY2F0aW9uU2V0dGluZ1wiPT09dD8uJGNhc2Upe2NvbnN0IG49dC5ub3RpZmljYXRpb25TZXR0aW5nPT09Yy5Ob3RpZmljYXRpb25TZXR0aW5nLlNFVFRJTkdfVFJVRTtlKChlPT57ZS5ub3RpZmljYXRpb25zLm5vdGlmaWNhdGlvbnNFbmFibGVkPW59KSksZSgoZT0+e2Uubm90aWZpY2F0aW9ucy5icm93c2VyTm90aWZpY2F0aW9uc1Blcm1pc3Npb249Tm90aWZpY2F0aW9uLnBlcm1pc3Npb259KSksKDAsSS5GZSkobixOb3RpZmljYXRpb24ucGVybWlzc2lvbil9ZWxzZSBlKChlPT57ZS5ub3RpZmljYXRpb25zLm5vdGlmaWNhdGlvbnNFbmFibGVkPSExfSkpLCgwLEkuRmUpKCExLE5vdGlmaWNhdGlvbi5wZXJtaXNzaW9uKTsoMCxJLkhaKSgpfSxkZXN0cm95OigpPT57KDAsUy5wWCkoKSYmbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIixpKX0sY3JlYXRlTm90aWZpY2F0aW9uOmFzeW5jKGUsbik9Pnthd2FpdCBhc3luYyBmdW5jdGlvbihlLG4pe2lmKHQoKS5ub3RpZmljYXRpb25zLm5vdGlmaWNhdGlvbnNFbmFibGVkKXtzd2l0Y2goZS5vcHRpb25zLmRhdGEuc291bmQpe2Nhc2UgYS5Tb3VuZC5SSU5HX0JGRjpjYXNlIGEuU291bmQuUklOR19GVUxMOmJyZWFrO2Nhc2UgYS5Tb3VuZC5ERUZBVUxUX1NPVU5EOigwLGIuR04pKGIuJHUuTmV3Q2hhdCx0KCkubG9jYWxTZXR0aW5ncy5jaGF0U291bmRFZmZlY3RzRW5hYmxlZCl9aWYoKDAsUy5wWCkoKSl7Y29uc3QgdD1hd2FpdCBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWFkeSxyPWF3YWl0IHQuZ2V0Tm90aWZpY2F0aW9ucyh7dGFnOmUub3B0aW9ucy50YWd9KTtmb3IoY29uc3QgZSBvZiByKWUuY2xvc2UoKTtsZXQgaTtuJiYobygpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJub3RpZmljYXRpb25zLnNob3duLndpbmRvd1wifSksaT1hc3luYyBmdW5jdGlvbihlLHQsbil7c3dpdGNoKG4pe2Nhc2UgYS5BY2tOb3RpZmljYXRpb25SZXF1ZXN0X0Fja0V2ZW50LkRJU1BMQVlFRDppZighZS5kaXNwbGF5X3RyYWNraW5nX3Rva2VuKXJldHVybiB2b2lkIG8oKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwibm90aWZpY2F0aW9uc19ub19hY2tfZGF0YVwiLGRpbWVuc2lvbnM6e2V2ZW50OlwiZGlzcGxheVwifX0pO2JyZWFrO2Nhc2UgYS5BY2tOb3RpZmljYXRpb25SZXF1ZXN0X0Fja0V2ZW50LlJFQ0VJVkVEOmlmKCFlLmR0X3Rva2VuKXJldHVybiB2b2lkIG8oKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwibm90aWZpY2F0aW9uc19ub19hY2tfZGF0YVwiLGRpbWVuc2lvbnM6e2V2ZW50OlwicmVjZWl2ZVwifX0pO2JyZWFrO2Nhc2UgYS5BY2tOb3RpZmljYXRpb25SZXF1ZXN0X0Fja0V2ZW50LlVOUkVDT0dOSVpFRDpkZWZhdWx0OnJldHVybiB2b2lkKDAsXy5WKShcImFja19ub3RpZmljYXRpb25faW52YWxpZF90eXBlXCIpfWNvbnN0IHI9RGF0ZS5ub3coKTt0cnl7YXdhaXQgYXN5bmMgZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzLGMpe2F3YWl0IEUuQWNrTm90aWZpY2F0aW9uKHtub3RpZmljYXRpb25JRDplLHNlbmRlclVzZXJOYW1lOnQsc2VudFRpbWVzdGFtcDpuLGFja1RpbWVzdGFtcDpyLGluQmFja2dyb3VuZDpmYWxzZSxwdXNoVHlwZTpvLHRyYWNraW5nRGF0YTphLHVzZXJBZ2VudDpzLHN5c3RlbU5vdGlmaWNhdGlvbkVuYWJsZWQ6ITAsZnJvbUV4dGVuc2lvbjohMSxhY2tFdmVudE5hbWU6YyxkaXNwbGF5RGVsYXlMYXRlbmN5TWlsbGlzOlwiMFwiLGRpc3BsYXlEZWxheVJlYXNvbjpcIlwifSkuY2F0Y2goKGU9Pnt9KSl9KGUubl9pZCxlLnNlbmRlcl91c2VybmFtZSxlLnNlbnRfdHMsci50b1N0cmluZygpLDAsZS50eXBlLGUuZHRfZGF0YSxuYXZpZ2F0b3IudXNlckFnZW50LG4pfWNhdGNoKGUpe319KG4sMCxhLkFja05vdGlmaWNhdGlvblJlcXVlc3RfQWNrRXZlbnQuRElTUExBWUVEKSksYXdhaXQgdC5zaG93Tm90aWZpY2F0aW9uKGUudGl0bGUsZS5vcHRpb25zKSxhd2FpdCBpfWVsc2V7XCJzZXJ2aWNlV29ya2VyXCJpbiBuYXZpZ2F0b3I/bygpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJub3RpZmljYXRpb25zLnNob3duLndpbmRvdy5ub19zZXJ2aWNlX3dvcmtlclwifSk6bygpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJub3RpZmljYXRpb25zLnNob3duLndpbmRvdy5wdXNoX25vdGlmaWNhdGlvbnNfdW5zdXBwb3J0ZWRcIn0pO2NvbnN0IG49bmV3IE5vdGlmaWNhdGlvbihlLnRpdGxlLGUub3B0aW9ucyk7bi5vbmNsaWNrPSgpPT57bi5jbG9zZSgpLHBhcmVudC5mb2N1cygpLHQoKS5tZXNzYWdpbmcuZmVlZEl0ZW1TZWxlY3RlZChlLm9wdGlvbnMuZGF0YS5hcnJveW9fY29udm9faWQpfX19fShlLG4pfSxjbGVhck5vdGlmaWNhdGlvbnNGb3JDb252ZXJzYXRpb246YXN5bmMgZT0+e2lmKCFlfHwhKDAsUy5wWCkoKSlyZXR1cm47Y29uc3QgdD0oMCxwLk1jKShlKSxuPWF3YWl0IGFzeW5jIGZ1bmN0aW9uKGUpe3JldHVybihhd2FpdCBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWFkeSkuZ2V0Tm90aWZpY2F0aW9ucyh2b2lkIDApfSgpO2xldCByPTA7Zm9yKGNvbnN0IGUgb2Ygbil7Y29uc3Qgbj1lLmRhdGEsaT12b2lkIDAhPT1uLnR5cGUmJltzLlQuVEFMS19JTklUSUFURURfQVVESU8scy5ULlRBTEtfSU5JVElBVEVEX1ZJREVPLHMuVC5UQUxLX0dST1VQX0lOSVRJQVRFRF9BVURJTyxzLlQuVEFMS19HUk9VUF9JTklUSUFURURfVklERU9dLmluY2x1ZGVzKG4udHlwZSk7bi5hcnJveW9fY29udm9faWQmJiFpJiYoMCxwLk1jKShuLmFycm95b19jb252b19pZCk9PT10JiYoZS5jbG9zZSgpLHIrKyl9bygpLmFkZEhpc3RvZ3JhbSh7bWV0cmljc05hbWU6XCJub3RpZmljYXRpb25zLnJldm9rZS5lbnRlcmVkX2NvbnZlcnNhdGlvblwiLHZhbHVlOnJ9KX0sbm90aWZpY2F0aW9uc0VuYWJsZWQ6ITAsc2V0Tm90aWZpY2F0aW9uc0VuYWJsZWQ6YXN5bmMgdD0+e2FzeW5jIGZ1bmN0aW9uIG4odCl7ZSgoZT0+e2Uubm90aWZpY2F0aW9ucy5ub3RpZmljYXRpb25zRW5hYmxlZD10fSkpLGF3YWl0KDAsbS5DTSkodCl9aWYoIXQpcmV0dXJuIG4oITEpO2xldCByO3N3aXRjaChOb3RpZmljYXRpb24ucGVybWlzc2lvbil7Y2FzZVwiZ3JhbnRlZFwiOnI9ITA7YnJlYWs7Y2FzZVwiZGVmYXVsdFwiOntjb25zdCB0PWF3YWl0IE5vdGlmaWNhdGlvbi5yZXF1ZXN0UGVybWlzc2lvbigpO2UoKGU9PntlLm5vdGlmaWNhdGlvbnMuYnJvd3Nlck5vdGlmaWNhdGlvbnNQZXJtaXNzaW9uPXR9KSk7Y29uc3Qgbj1cImdyYW50ZWRcIj09PXQ7biYmKDAsaC5yKShBLlBlcm1pc3Npb25Jc1NldCkscj1uO2JyZWFrfWNhc2VcImRlbmllZFwiOnI9ITF9cmV0dXJuIG4ocil9LGJyb3dzZXJOb3RpZmljYXRpb25zUGVybWlzc2lvbjpcImRlZmF1bHRcIix1cGRhdGVCcm93c2VyTm90aWZpY2F0aW9uc1Blcm1pc3Npb246KCk9PntlKChlPT57ZS5ub3RpZmljYXRpb25zLmJyb3dzZXJOb3RpZmljYXRpb25zUGVybWlzc2lvbj1Ob3RpZmljYXRpb24ucGVybWlzc2lvbn0pKX0sbm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RTdGF0ZTpBLlNob3VsZFJlcXVlc3Qsc2V0Tm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RTdGF0ZTp0PT57ZSgoZT0+e2Uubm90aWZpY2F0aW9ucy5ub3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdFN0YXRlPXR9KSl9fX19fSwyNjk3MjooZSx0LG4pPT57bi5kKHQse046KCk9PnJ9KTt2YXIgcj17VEFMSzowLE1FU1NBR0lORzoxfX0sMzYyMjU6KGUsdCxuKT0+e24uZCh0LHtGOigpPT5kLEZlOigpPT5tLEhaOigpPT5wLEpMOigpPT5mfSksbig1ODg2MSk7dmFyIHI9big0NTM2MyksaT1uLm4ociksbz1uKDQ4ODU5KSxhPW4oMTQ5MjYpLHM9big5Nzc4MiksYz1uLm4ocyksbD0obig0NDc4NSksbigyNjEzMCkpLHU9bigyNjk3Mik7YygpLmdldExvZ2dlcihcIk5vdGlmaWNhdGlvbiBVdGlsc1wiKSxuZXcgTWFwKFtbXCJnZW5lcmljX3B1c2hcIixvLlNvdW5kLkRFRkFVTFRfU09VTkRdLFtcImdlbmVyaWNfcHVzaC5tcDNcIixvLlNvdW5kLkRFRkFVTFRfU09VTkRdLFtcInJpbmd0b25lX2Z1bGxcIixvLlNvdW5kLlJJTkdfRlVMTF0sW1wicmluZ3RvbmVfZnVsbC5tcDNcIixvLlNvdW5kLlJJTkdfRlVMTF0sW1wicmluZ3RvbmVfYmZmXCIsby5Tb3VuZC5SSU5HX0JGRl0sW1wicmluZ3RvbmVfYmZmLm1wM1wiLG8uU291bmQuUklOR19CRkZdXSksbmV3IE1hcChbW1wiY2hhdFwiLGEuVC5DSEFUXSxbXCJjaGF0X21lbnRpb25cIixhLlQuQ0hBVF9NRU5USU9OXSxbXCJjaGF0X3JlcGx5XCIsYS5ULkNIQVRfUkVQTFldLFtcImNoYXRfc2NyZWVuc2hvdFwiLGEuVC5DSEFUX1NDUkVFTlNIT1RdLFtcImNoYXRfc2NyZWVuX3JlY29yZGVkXCIsYS5ULkNIQVRfU0NSRUVOX1JFQ09SREVEXSxbXCJzYXZlX2NhbWVyYV9yb2xsXCIsYS5ULkNIQVRfQ0FNRVJBX1JPTExfU0FWRV0sW1widHlwaW5nXCIsYS5ULlRZUElOR10sW1wic25hcFwiLGEuVC5TTkFQXSxbXCJzY3JlZW5zaG90XCIsYS5ULlNOQVBfU0NSRUVOU0hPVF0sW1wic2NyZWVuX3JlY29yZGVkXCIsYS5ULlNOQVBfU0NSRUVOX1JFQ09SREVEXSxbXCJyZXBsYXlcIixhLlQuU05BUF9SRVBMQVldLFtcInNuYXBfc2F2ZVwiLGEuVC5TTkFQX1NBVkVdLFtcIm1pc2NoaWVmX2NoYXRcIixhLlQuR1JPVVBfQ0hBVF0sW1wibWlzY2hpZWZfY2hhdF9tZW50aW9uXCIsYS5ULkdST1VQX0NIQVRfTUVOVElPTl0sW1wibWlzY2hpZWZfY2hhdF9yZXBseVwiLGEuVC5HUk9VUF9DSEFUX1JFUExZXSxbXCJtaXNjaGllZl9jaGF0X3NjcmVlbnNob3RcIixhLlQuR1JPVVBfQ0hBVF9TQ1JFRU5TSE9UXSxbXCJtaXNjaGllZl9jaGF0X3NjcmVlbl9yZWNvcmRlZFwiLGEuVC5HUk9VUF9DSEFUX1NDUkVFTl9SRUNPUkRFRF0sW1wibWlzY2hpZWZfY2FtZXJhX3JvbGxfc2F2ZVwiLGEuVC5HUk9VUF9DSEFUX0NBTUVSQV9ST0xMX1NBVkVdLFtcIm1pc2NoaWVmX3R5cGluZ1wiLGEuVC5HUk9VUF9UWVBJTkddLFtcIm1pc2NoaWVmX3NuYXBcIixhLlQuR1JPVVBfU05BUF0sW1wibWlzY2hpZWZfc25hcF9zY3JlZW5zaG90XCIsYS5ULkdST1VQX1NOQVBfU0NSRUVOU0hPVF0sW1wibWlzY2hpZWZfc25hcF9zY3JlZW5fcmVjb3JkZWRcIixhLlQuR1JPVVBfU05BUF9TQ1JFRU5fUkVDT1JERURdLFtcIm1pc2NoaWVmX3JlcGxheVwiLGEuVC5HUk9VUF9TTkFQX1JFUExBWV0sW1wibWlzY2hpZWZfc25hcF9zYXZlXCIsYS5ULkdST1VQX1NOQVBfU0FWRV0sW1wibWlzY2hpZWZfcmVuYW1lXCIsYS5ULkdST1VQX1JFTkFNRV0sW1wibWlzY2hpZWZfYWRkX3BhcnRpY2lwYW50XCIsYS5ULkdST1VQX0FERF9QQVJUSUNJUEFOVF0sW1wiY2hhdF9yZWFjdGlvblwiLGEuVC5DSEFUX1JFQUNUSU9OXSxbXCJncm91cF95b3VyX2NoYXRfcmVhY3Rpb25cIixhLlQuR1JPVVBfWU9VUl9DSEFUX1JFQUNUSU9OXSxbXCJncm91cF9vdGhlcl9jaGF0X3JlYWN0aW9uXCIsYS5ULkdST1VQX09USEVSX0NIQVRfUkVBQ1RJT05dLFtcImluaXRpYXRlX2F1ZGlvXCIsYS5ULlRBTEtfSU5JVElBVEVEX0FVRElPXSxbXCJhYmFuZG9uX2F1ZGlvXCIsYS5ULlRBTEtfQUJBTkRPTkVEX0FVRElPXSxbXCJpbml0aWF0ZV92aWRlb1wiLGEuVC5UQUxLX0lOSVRJQVRFRF9WSURFT10sW1wiYWJhbmRvbl92aWRlb1wiLGEuVC5UQUxLX0FCQU5ET05FRF9WSURFT10sW1wibWlzY2hpZWZfaW5pdGlhdGVfYXVkaW9cIixhLlQuVEFMS19HUk9VUF9JTklUSUFURURfQVVESU9dLFtcIm1pc2NoaWVmX2FiYW5kb25fYXVkaW9cIixhLlQuVEFMS19HUk9VUF9BQkFORE9ORURfQVVESU9dLFtcIm1pc2NoaWVmX2luaXRpYXRlX3ZpZGVvXCIsYS5ULlRBTEtfR1JPVVBfSU5JVElBVEVEX1ZJREVPXSxbXCJtaXNjaGllZl9hYmFuZG9uX3ZpZGVvXCIsYS5ULlRBTEtfR1JPVVBfQUJBTkRPTkVEX1ZJREVPXSxbXCJtaXNjaGllZl9jYWxsX3VwZGF0ZWRfYXVkaW9cIixhLlQuVEFMS19HUk9VUF9DQUxMX1VQREFURURfQVVESU9dLFtcIm1pc2NoaWVmX2NhbGxfdXBkYXRlZF92aWRlb1wiLGEuVC5UQUxLX0dST1VQX0NBTExfVVBEQVRFRF9WSURFT11dKTtjb25zdCBkPW5ldyBNYXAoW1thLlQuVEFMS19JTklUSUFURURfQVVESU8sdS5OLlRBTEtdLFthLlQuVEFMS19BQkFORE9ORURfQVVESU8sdS5OLlRBTEtdLFthLlQuVEFMS19JTklUSUFURURfVklERU8sdS5OLlRBTEtdLFthLlQuVEFMS19BQkFORE9ORURfVklERU8sdS5OLlRBTEtdLFthLlQuVEFMS19HUk9VUF9JTklUSUFURURfQVVESU8sdS5OLlRBTEtdLFthLlQuVEFMS19HUk9VUF9BQkFORE9ORURfQVVESU8sdS5OLlRBTEtdLFthLlQuVEFMS19HUk9VUF9JTklUSUFURURfVklERU8sdS5OLlRBTEtdLFthLlQuVEFMS19HUk9VUF9BQkFORE9ORURfVklERU8sdS5OLlRBTEtdLFthLlQuVEFMS19HUk9VUF9DQUxMX1VQREFURURfQVVESU8sdS5OLlRBTEtdLFthLlQuVEFMS19HUk9VUF9DQUxMX1VQREFURURfVklERU8sdS5OLlRBTEtdLFthLlQuQ0hBVF9NRU5USU9OLHUuTi5NRVNTQUdJTkddLFthLlQuQ0hBVF9SRVBMWSx1Lk4uTUVTU0FHSU5HXSxbYS5ULkNIQVQsdS5OLk1FU1NBR0lOR10sW2EuVC5DSEFUX1NDUkVFTlNIT1QsdS5OLk1FU1NBR0lOR10sW2EuVC5DSEFUX1NDUkVFTl9SRUNPUkRFRCx1Lk4uTUVTU0FHSU5HXSxbYS5ULkNIQVRfQ0FNRVJBX1JPTExfU0FWRSx1Lk4uTUVTU0FHSU5HXSxbYS5ULlNOQVAsdS5OLk1FU1NBR0lOR10sW2EuVC5TTkFQX1NDUkVFTlNIT1QsdS5OLk1FU1NBR0lOR10sW2EuVC5TTkFQX1NDUkVFTl9SRUNPUkRFRCx1Lk4uTUVTU0FHSU5HXSxbYS5ULlNOQVBfUkVQTEFZLHUuTi5NRVNTQUdJTkddLFthLlQuU05BUF9TQVZFLHUuTi5NRVNTQUdJTkddLFthLlQuR1JPVVBfQ0hBVCx1Lk4uTUVTU0FHSU5HXSxbYS5ULkdST1VQX0NIQVRfTUVOVElPTix1Lk4uTUVTU0FHSU5HXSxbYS5ULkdST1VQX0NIQVRfUkVQTFksdS5OLk1FU1NBR0lOR10sW2EuVC5HUk9VUF9DSEFUX1NDUkVFTlNIT1QsdS5OLk1FU1NBR0lOR10sW2EuVC5HUk9VUF9DSEFUX1NDUkVFTl9SRUNPUkRFRCx1Lk4uTUVTU0FHSU5HXSxbYS5ULkdST1VQX0NIQVRfQ0FNRVJBX1JPTExfU0FWRSx1Lk4uTUVTU0FHSU5HXSxbYS5ULkdST1VQX1NOQVAsdS5OLk1FU1NBR0lOR10sW2EuVC5HUk9VUF9TTkFQX1NDUkVFTlNIT1QsdS5OLk1FU1NBR0lOR10sW2EuVC5HUk9VUF9TTkFQX1NDUkVFTl9SRUNPUkRFRCx1Lk4uTUVTU0FHSU5HXSxbYS5ULkdST1VQX1NOQVBfUkVQTEFZLHUuTi5NRVNTQUdJTkddLFthLlQuR1JPVVBfU05BUF9TQVZFLHUuTi5NRVNTQUdJTkddLFthLlQuR1JPVVBfUkVOQU1FLHUuTi5NRVNTQUdJTkddLFthLlQuR1JPVVBfQUREX1BBUlRJQ0lQQU5ULHUuTi5NRVNTQUdJTkddLFthLlQuQ0hBVF9SRUFDVElPTix1Lk4uTUVTU0FHSU5HXSxbYS5ULkdST1VQX1lPVVJfQ0hBVF9SRUFDVElPTix1Lk4uTUVTU0FHSU5HXSxbYS5ULkdST1VQX09USEVSX0NIQVRfUkVBQ1RJT04sdS5OLk1FU1NBR0lOR10sW2EuVC5UWVBJTkcsdS5OLk1FU1NBR0lOR11dKTtmdW5jdGlvbiBmKGUpe2koKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwibm90aWZpY2F0aW9uc19sZWFybl9tb3JlX2NsaWNrZWRcIixkaW1lbnNpb25zOnthY3Rpb25fb3JpZ2luOmV9fSksd2luZG93Lm9wZW4oXCJodHRwczovL3N1cHBvcnQuc25hcGNoYXQuY29tL2Evd2ViLXBlcm1pc3Npb25zXCIsXCJfYmxhbmtcIixcIm5vb3BlbmVyLG5vcmVmZXJyZXJcIil9ZnVuY3Rpb24gcCgpe2NvbnN0IGU9XCJicm93c2VyX25vdGlmaWNhdGlvbl9wZXJtaXNzaW9uXCIsdD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbShlKSxuPU5vdGlmaWNhdGlvbi5wZXJtaXNzaW9uO3QmJnQhPT1uJiZpKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpgbm90aWZpY2F0aW9uc19vbGRfcGVybV8ke3R9X25ld19wZXJtXyR7bn1gLGRpbWVuc2lvbnM6e2lzX3B3YTpTdHJpbmcoKDAsbC5OdSkoKSl9fSksbG9jYWxTdG9yYWdlLnNldEl0ZW0oZSxuKX1mdW5jdGlvbiBtKGUsdCl7aSgpLmluY3JlbWVudCh7bWV0cmljc05hbWU6YG5vdGlmaWNhdGlvbnMucGVybWlzc2lvbnMuc3RhdGUuJHtlP1wicHJlZmVyZW5jZV9vblwiOlwicHJlZmVyZW5jZV9vZmZcIn0ucGVybWlzc2lvbl8ke3R9YH0pLGkoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOmBub3RpZmljYXRpb25zX3Blcm1pc3Npb25zX3N0YXRlXyR7ZT9cInByZWZlcmVuY2Vfb25cIjpcInByZWZlcmVuY2Vfb2ZmXCJ9X3Blcm1pc3Npb25fJHt0fWAsZGltZW5zaW9uczp7aXNfcHdhOlN0cmluZygoMCxsLk51KSgpKX19KX19LDY4NzQyOihlLHQsbik9PntuLmQodCx7QlU6KCk9PmMsRDQ6KCk9Pm8sV0g6KCk9PnN9KTt2YXIgcj1uKDEyMzQzKTtsZXQgaTtmdW5jdGlvbiBvKCl7cmV0dXJuIGl8fChpPU1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLDkpKSxpfWNvbnN0IGE9XCJmaXJzdF90aW1lX2xvYWRcIixzPU9iamVjdC5mcmVlemUobCgpKTtmdW5jdGlvbiBjKGUpe2NvbnN0IHQ9bCgpO3RbZV09ITEsbG9jYWxTdG9yYWdlLnNldEl0ZW0oYSxKU09OLnN0cmluZ2lmeSh0KSl9ZnVuY3Rpb24gbCgpe2NvbnN0IGU9e2J1bmRsZTohMCxzZXJ2aWNlV29ya2VyOiEwfTtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgU3RvcmFnZSlyZXR1cm4gZTtjb25zdCB0PWxvY2FsU3RvcmFnZS5nZXRJdGVtKGEpO2lmKCF0KXJldHVybiBlO3RyeXtyZXR1cm4gSlNPTi5wYXJzZSh0KX1jYXRjaCh0KXtyZXR1cm4gci5rZy5lcnJvcihcImZhaWxlZCB0byBwYXJzZSBmaXJzdFRpbWVMb2FkIGRhdGFcIix0KSxlfX19LDkzNDk6KGUsdCxuKT0+e24uZCh0LHskNzooKT0+dSxHZjooKT0+dixPWjooKT0+ZCxhVzooKT0+bSxlMDooKT0+bCxwMjooKT0+cCxxUjooKT0+aCxzUDooKT0+Zyx2MzooKT0+Zn0pO3ZhciByPW4oNDEzMSksaT1uKDIwNTczKSxvPW4oMzg0ODQpLGE9big5MTcxNyk7Y29uc3Qgcz17cmluZ2luZzohMSxsb2NhbFB1Ymxpc2hlZE1lZGlhOnIucFUuTk9ORSxjYWxsTWVkaWE6ci5wVS5OT05FLGNhbGxQYXJ0aWNpcGFudHM6W10sY2FsbGVyOnZvaWQgMCxjYWxsaW5nOiExfSxjPShlLHQpPT50P2UucHJlc2VuY2Uuc3RhdGVQZXJDb252LmdldCh0KTp2b2lkIDAsbD1lPT50PT5jKHQsZSksdT1lPT50PT4oKGUsdCk9PnQ/ZS5wcmVzZW5jZS5zZXNzaW9uUGVyQ29udi5nZXQodCk6dm9pZCAwKSh0LGUpLGQ9ZT0+ZS5wcmVzZW5jZS5icm9hZGNhc3RUeXBpbmdBY3Rpdml0eSxmPWU9PigwLGkuUDEpKCgwLG8uVjYpKGUpLCh0PT50LnByZXNlbmNlLmFjdGl2ZUNvbnZlcnNhdGlvbkluZm8uZ2V0KGUpKSwoKGUsdCk9PntpZih0KXJldHVybiB0LmNhbGxpbmcmJmUhPT1yLlVxLlJJTkdJTkc/ey4uLnQsLi4uc306dH0pKSxwPWU9PigwLGkuUDEpKChlPT5lLnByZXNlbmNlLmFjdGl2ZUNvbnZlcnNhdGlvbkluZm8pLCh0PT50LmdldChlKT8udHlwaW5nUGFydGljaXBhbnRzKSksbT1lPT5bZS5wcmVzZW5jZS5hd2F5U3RhdGUsZS5wcmVzZW5jZS5zZXRBd2F5U3RhdGVdLGg9ZT0+ZS5wcmVzZW5jZS5hd2F5U3RhdGU9PT1hLmQuUHJlc2VudCx2PWU9PnQ9Pntjb25zdCBuPWModCxlKSxpPVsuLi5uPy52YWx1ZXMoKT8/W11dLmZpbHRlcigoZT0+dm9pZCAwIT09ZSkpO3JldHVybltpLmZpbHRlcigoZT0+ZS5wcmVzZW50T25QbGF0Zm9ybSE9PXIudDQuTk9ORSkpLmxlbmd0aCxpLmZpbHRlcigoZT0+ZS5wcmVzZW50T25QbGF0Zm9ybT09PXIudDQuV0VCKSkubGVuZ3RoKzFdfSxnPWU9Pih7Y3JlYXRlUHJlc2VuY2VTZXNzaW9uOmUucHJlc2VuY2UuY3JlYXRlUHJlc2VuY2VTZXNzaW9uLGRlc3Ryb3lQcmVzZW5jZVNlc3Npb246ZS5wcmVzZW5jZS5kZXN0cm95UHJlc2VuY2VTZXNzaW9ufSl9LDkxNzE3OihlLHQsbik9PntuLmQodCx7ZDooKT0+cn0pO3ZhciByPXtQcmVzZW50OjAsQXdheToxLEF3YWl0aW5nUmVhY3RpdmF0ZToyfX0sMjUwNjk6KGUsdCxuKT0+e24uZCh0LHskSTooKT0+YyxjMzooKT0+bCxmTjooKT0+cyxpNDooKT0+ZH0pO3ZhciByPW4oNTg4NjEpLGk9bigyMDI5Myksbz1uKDQ0Nzg1KTtmdW5jdGlvbiBhKGUsdCl7cmV0dXJuIGUuZmVlZEVudHJ5LnBhcnRpY2lwYW50cy5maWx0ZXIoKGU9PmUhPT10KSkubWFwKCh0PT57Y29uc3Qgbj1lLnBhcnRpY2lwYW50VXNlcnMuZ2V0KHQpO2lmKG4pcmV0dXJuKDAsaS5iMykobil9KSkuZmlsdGVyKChlPT5Cb29sZWFuKGUpKSkuam9pbihcIiwgXCIpfWZ1bmN0aW9uIHMoZSx0KXtjb25zdCBuPWUuZmVlZEVudHJ5O2lmKG4uY29udmVyc2F0aW9uVHlwZT09PXIuaTEuVVNFUkNSRUFURURHUk9VUClyZXR1cm4gbi5jb252ZXJzYXRpb25UaXRsZT9uLmNvbnZlcnNhdGlvblRpdGxlOmEoZSx0KTt7Y29uc3QgdD1lLnBhcnRpY2lwYW50VXNlcnMudmFsdWVzKCkubmV4dCgpLnZhbHVlO3JldHVybigwLGkuYjMpKHQpfX1mdW5jdGlvbiBjKGUsdCl7Y29uc3Qgbj1lLmZlZWRFbnRyeTtyZXR1cm4gbi5jb252ZXJzYXRpb25UeXBlIT09ci5pMS5VU0VSQ1JFQVRFREdST1VQP2UucGFydGljaXBhbnRVc2Vycy52YWx1ZXMoKS5uZXh0KCkudmFsdWUubXV0YWJsZV91c2VybmFtZTpuLmNvbnZlcnNhdGlvblRpdGxlP2EoZSx0KTp2b2lkIDB9ZnVuY3Rpb24gbChlKXtjb25zdCB0PXt9O2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXRbKDAsby5NYykoZVtuXS5pdGVtLmNvbnZlcnNhdGlvbklkKV09bjtyZXR1cm4gdH1mdW5jdGlvbiB1KGUsdCl7Y29uc3R7Y29udmVyc2F0aW9uSWQ6bn09ZS5mZWVkRW50cnk7cmV0dXJuIG4mJnRbKDAsby5NYykobildfHxOdW1iZXIuTUFYX1NBRkVfSU5URUdFUn1mdW5jdGlvbiBkKGUsdCxuKXtyZXR1cm4gZS5zY29yZT09PXQuc2NvcmU/dShlLml0ZW0sbiktdSh0Lml0ZW0sbik6dC5zY29yZS1lLnNjb3JlfX0sNjk3Mjk6KGUsdCxuKT0+e24uZCh0LHtzdG9yZTooKT0+TWQsbzooKT0+TGR9KTt2YXIgcj1uKDEyOTAyKTtjb25zdCBpPWU9Pih7YnVnUmVwb3J0OntpbnRlcm5hbEJ1Z1JlcG9ydE1vZGFsVmlzaWJsZTohMSxzZXRJbnRlcm5hbEJ1Z1JlcG9ydE1vZGFsVmlzaWJpbGl0eTp0PT57ZSgoZT0+e2UuYnVnUmVwb3J0LmludGVybmFsQnVnUmVwb3J0TW9kYWxWaXNpYmxlPXR9KSl9fX0pLG89ZT0+KHtmZWVkOntmZWVkSGFzUmVuZGVyZWQ6ITEsbWFya0ZlZWRSZW5kZXJlZDooKT0+ZSgoZT0+e2UuZmVlZC5mZWVkSGFzUmVuZGVyZWQ9ITB9KSl9fSk7dmFyIGE9bigxMzMyMikscz1uKDk3NzgyKSxjPW4ubihzKSxsPW4oODY1MTYpLHU9big0MzE0Nyk7YygpLmdldExvZ2dlcihcInVybC1wcmV2aWV3XCIpO2NvbnN0IGQ9bmV3IGEuUTUoe3VuYXJ5OmwuVX0pLGY9KCk9Pih7dXJsUHJldmlldzp7ZmV0Y2hVcmxQcmV2aWV3OmFzeW5jIGU9PmFzeW5jIGZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gYXdhaXQgZC5HZXRQcmV2aWV3KHt1cmw6ZSx3aXRoSHRtbDohMH0pfWNhdGNoKGUpe3JldHVybiB1Lm8wLHtwcmV2aWV3OnZvaWQgMCxzdWNjZXNzOiExLG9yaWdpbkVycm9yOnZvaWQgMH19fShlKX19KTt2YXIgcD1uKDczNDQ1KSxtPW4oNzgyKSxoPW4oMTg3NTMpLHY9big0Mzk3MyksZz1uKDIzNDkzKSx5PW4ubihnKSxFPW4oNzEzNzEpLF89big0NTM2MyksST1uLm4oXyksUz1uKDYzOTUxKSxiPW4oMTIyOCksVD1uKDYzNjM5KSxDPW4oODY5NTMpLEE9bigzNDIxMiksUj1uKDc2OTMxKSxrPW4oMTkwOTMpLE89big2OTA5MyksTj1uKDcyMzEzKSx3PW4oMzAyNjIpLEQ9bigyMzgzNCk7YXN5bmMgZnVuY3Rpb24gUChlKXtjb25zdCB0PW5ldyBSZXF1ZXN0KGAke0QuelV9L3dlYi1jYWxsaW5nLWFwaS9ncmFwaHFsYCx7aGVhZGVyczp7XCJjb250ZW50LXR5cGVcIjpcImFwcGxpY2F0aW9uL2pzb25cIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7b3BlcmF0aW9uTmFtZTpcIlVzZXJcIix2YXJpYWJsZXM6e30scXVlcnk6ZX0pLG1ldGhvZDpcIlBPU1RcIn0pLG49YXdhaXQoMCx3Lm4pKHQpO2lmKCFuLm9rKXRocm93IG5ldyBBLnZEKG4pO2NvbnN0IHI9YXdhaXQgbi5qc29uKCk7aWYoIXIuZGF0YSl0aHJvdygwLHMuZ2V0TG9nZ2VyKShcIlt3aG9hbWldXCIpLEkoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwibmV0d29yay53ZWJfc25hcGNoYXRfY29tL3dlYi1jYWxsaW5nLWFwaS9ncmFwaHFsLmFwaV9lcnJvclwifSksbmV3IEVycm9yKHIuZXJyb3JzPy5bMF0/Lm1lc3NhZ2U/P1wiRmFpbGVkIHRvIGxvYWQgdXNlciBpbmZvXCIpO3JldHVybiByfXZhciBNPW4oNDQ3ODUpO2Z1bmN0aW9uIEwoZSl7bGV0IHQ9bnVsbDtyZXR1cm4gYXN5bmMgZnVuY3Rpb24oKXtpZih0KXJldHVybiB0O3Q9ZSguLi5hcmd1bWVudHMpO3RyeXtyZXR1cm4gYXdhaXQgdH1maW5hbGx5e3Q9bnVsbH19fXZhciBVPW4oMTEzMDMpLHg9big3OTc0Mik7YygpLmdldExvZ2dlcihcIlRJVlwiKTt2YXIgRj1uKDQ2MzA4KTtjKCkuZ2V0TG9nZ2VyKFwiW0F1dGhTdG9yZV1cIik7Y29uc3QgQj1gaHR0cHM6Ly8ke2IuX3Z9L2FjY291bnRzL2NsaWVudF9sb2dvdXQ/Y2xpZW50X2lkPSR7Yi5CeX1gLFY9YGh0dHBzOi8vJHtiLl92fS9hY2NvdW50cy9zc28/Y2xpZW50X2lkPSR7Yi5CeX1gLEc9T2JqZWN0LmZyZWV6ZSh7dG9rZW46XCJcIixsYXN0VG9rZW5SZWZyZXNoOjB9KSxIPU9iamVjdC5mcmVlemUoe21ldGhvZDpcIlBPU1RcIixjcmVkZW50aWFsczpcImluY2x1ZGVcIixyZWRpcmVjdDpcIm1hbnVhbFwifSksVz0oZSx0KT0+e2NvbnN0IG49dD0+ZSgoZT0+e2UuYXV0aC5hdXRoVG9rZW49e3Rva2VuOnQsbGFzdFRva2VuUmVmcmVzaDpEYXRlLm5vdygpfSxlLmF1dGguYXV0aFN0YXRlPUYuai5Mb2dnZWRJbixlLmF1dGguaGFzRXZlckxvZ2dlZEluPSEwfSkpO3JldHVybnthdXRoOnthdXRoVG9rZW46RyxhdXRoU3RhdGU6Ri5qLlByb2Nlc3NpbmcsaGFzRXZlckxvZ2dlZEluOiExLGtleUluaXRpYWxpemF0aW9uSW5mbzp2b2lkIDAsaW5pdGlhbGl6ZTphc3luYyByPT57Y29uc3R7bG9nb3V0Oml9PXQoKS5hdXRoLG89bmV3IFVSTFNlYXJjaFBhcmFtcyhyLnNlYXJjaCksYT1mdW5jdGlvbihlKXtpZighZSlyZXR1cm47Y29uc3QgdD14LnRvQnl0ZUFycmF5KGUpO3RyeXtyZXR1cm4gVS5UcmFuc2FjdGlvbkR3ZWJEYXRhLmRlY29kZSh0KX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgRXJyb3Ipe2NvbnN0IHQ9bmV3IEVycm9yKFwiZmFpbGVkIHRvIHBhcnNlIHRyYW5zYWN0aW9uIGRhdGEgZnJvbSB1cmwgcGFyYW06IFwiK2UubWVzc2FnZSk7KDAsRS5UYikodCl9cmV0dXJufX0oby5nZXQoXCJ0cmFuc2FjdGlvbl9kYXRhXCIpKTsoMCxDLlpmKShhPy50cmFuc2FjdGlvbklkKTtjb25zdCBzPSgwLFQuTSkoYSk7cyYmZSgoZT0+e2UuYXV0aC5rZXlJbml0aWFsaXphdGlvbkluZm89c30pKTtjb25zdCBjPW8uZ2V0KFwidGlja2V0XCIpO2lmKGMpSSgpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJzc29fdG9rZW4udG9rZW5faW5fdXJsXCIsZGltZW5zaW9uczp7aGFzX3Rpdl90cmFuc2FjdGlvbl9pZDpTdHJpbmcoQm9vbGVhbihhPy50cmFuc2FjdGlvbklkKSl9fSksbihjKTtlbHNlIHRyeXthd2FpdCB0KCkuYXV0aC5yZWZyZXNoVG9rZW4oXCJwYWdlX2xvYWRcIil9Y2F0Y2goZSl7KDAsRS5UYikoZSksYXdhaXQgaSghMSl9fSxsb2dvdXQ6YXN5bmMgZnVuY3Rpb24oKXtpZighKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdKXt0cnl7YXdhaXQoMCxrLlRNKShTLkRldmljZVR5cGUuREVTS1RPUF9XRUIsUy5Ub2tlbkRlbGV0aW9uUmVhc29uLlVTRVJfTE9HT1VUKX1jYXRjaChlKXt9dHJ5e2F3YWl0KDAsUi5YKShCLEgpfWNhdGNoKGUpe319YXdhaXQoMCxPLkhiKSgpLnB1cmdlQWxsVXNlckRhdGEoKSxhd2FpdCgwLE8udHgpKCgwLE4uRykoKSkucHVyZ2VBbGxVc2VyRGF0YSgpLGUoKGU9PntlLmF1dGguYXV0aFRva2VuPUcsZS5hdXRoLm1lPXZvaWQgMCxlLmF1dGguYXV0aFN0YXRlPUYuai5Mb2dnZWRPdXR9KSl9LHJlZnJlc2hUb2tlbjpMKChhc3luYyBlPT57Y29uc3R7bG9nb3V0OnJ9PXQoKS5hdXRoO0koKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwic3NvX3Rva2VuLnJlZnJlc2guYXR0ZW1wdFwiLGRpbWVuc2lvbnM6e3JlYXNvbjplfX0pO3RyeXtjb25zdCB0PWF3YWl0KDAsUi5YKShWLEgpO2lmKHQuc3RhdHVzPj0yMDAmJnQuc3RhdHVzPDMwMClJKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcInNzb190b2tlbi5yZWZyZXNoLnN1Y2Nlc3NcIixkaW1lbnNpb25zOntyZWFzb246ZX19KSxuKGF3YWl0IHQudGV4dCgpKTtlbHNlIGlmKFwib3BhcXVlcmVkaXJlY3RcIj09PXQudHlwZXx8dC5zdGF0dXM+PTMwMCYmdC5zdGF0dXM8NTAwKUkoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwic3NvX3Rva2VuLnJlZnJlc2gubmVlZF9zaWduX2luXCIsZGltZW5zaW9uczp7cmVhc29uOmV9fSksYXdhaXQgcighMSk7ZWxzZXtpZih0LnN0YXR1cz49NTAwKXRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGdldCB0b2tlbiBkdWUgdG8gc2VydmVyIGVycm9yOiAke3Quc3RhdHVzfWApO0koKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwic3NvX3Rva2VuLnJlZnJlc2guZmFpbHVyZS51bmtub3duXCIsZGltZW5zaW9uczp7cmVhc29uOmV9fSksYXdhaXQgcighMSl9fWNhdGNoKHQpe3Rocm93IHQgaW5zdGFuY2VvZiBBLnZEfHx0IGluc3RhbmNlb2YgQS5ROT9JKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcInNzb190b2tlbi5yZWZyZXNoLmZhaWx1cmUubmV0d29ya19lcnJvclwiLGRpbWVuc2lvbnM6e3JlYXNvbjplfX0pOkkoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwic3NvX3Rva2VuLnJlZnJlc2guZmFpbHVyZS5zZXJ2ZXJfZXJyb3JcIixkaW1lbnNpb25zOntyZWFzb246ZX19KSx0fX0pKSx0aHJvdHRsZWRSZWZyZXNoVG9rZW46eSgpKChhc3luYygpPT50KCkuYXV0aC5yZWZyZXNoVG9rZW4oXCJpbnZhbGlkX2F1dGhcIikpLDNlNCx7bGVhZGluZzohMCx0cmFpbGluZzohMX0pLGhhc1VzZXJBY2NlcHRlZE1lcmxpbkpJVDohMSxkaXNNaXNzT25ib2FyZGluZzphc3luYygpPT57YXdhaXQgYXN5bmMgZnVuY3Rpb24oKXtyZXR1cm4gUChcIm11dGF0aW9uIFVzZXIge1xcbiAgc2V0SGFzVXNlclNlZW5EV2ViKGhhc1VzZXJTZWVuRFdlYjp0cnVlKVxcbn1cIil9KCksZSgoZT0+e2UuYXV0aC5tZSYmKGUuYXV0aC5tZS5oYXNVc2VyU2VlbkRXZWI9ITApfSkpfSxkaXNtaXNzUmVxdWVzdFBlcm1pc3Npb246KCk9PmUoKGU9PntlLmF1dGgubWUmJihlLmF1dGgubWUuc2hvdWxkUmVxdWVzdFBlcm1pc3Npb249ITEpfSkpLGZldGNoV2hvYW1pOmFzeW5jKCk9Pntjb25zdCB0PWF3YWl0IGFzeW5jIGZ1bmN0aW9uKCl7cmV0dXJuIFAoXCJxdWVyeSBVc2VyIHtcXG4gIHVzZXIge1xcbiAgICBpZFxcbiAgICBiaXRtb2ppQXZhdGFySWQ6IGJpdG1vamlBdmF0YXJJRFxcbiAgICBiaXRtb2ppU2VsZmllSWQ6IGJpdG1vamlTZWxmaWVJRFxcbiAgICBiaXRtb2ppQmFja2dyb3VuZElkOiBiaXRtb2ppQmFja2dyb3VuZElEXFxuICAgIGJpdG1vamlTY2VuZUlkOiBiaXRtb2ppU2NlbmVJRFxcbiAgICBpc0VtcGxveWVlXFxuICAgIHVzZXJuYW1lXFxuICAgIGRpc3BsYXlOYW1lXFxuICAgIHNuYXBQcml2YWN5XFxuICAgIGhhc1VzZXJTZWVuRFdlYlxcbiAgICBoYXNVc2VyQWNjZXB0ZWRNZXJsaW5KSVRcXG4gIH1cXG59XCIpfSgpO2UoKGU9Pnt0LmRhdGEmJihlLmF1dGgubWU9ey4uLnQuZGF0YS51c2VyLGlkOigwLE0uT1kpKHQuZGF0YS51c2VyLmlkKSxzaG91bGRSZXF1ZXN0UGVybWlzc2lvbjohdC5kYXRhLnVzZXIuaGFzVXNlclNlZW5EV2VifSxlLmF1dGguaGFzVXNlckFjY2VwdGVkTWVybGluSklUPXQuZGF0YS51c2VyLmhhc1VzZXJBY2NlcHRlZE1lcmxpbkpJVCl9KSl9fX19O3ZhciBqPW4oODQ2NjIpLFo9bigyNDM1MCksej1uLm4oWiksSz1uKDY5OTgzKSxZPW4ubihLKTtjb25zdCBxPUpTT04ucGFyc2UoJ3tcImxcIjpcIjAuNC4wLWFscGhhLjFcIn0nKSxYPUpTT04ucGFyc2UoJ3tcImk4XCI6XCIxOTBcIixcImMkXCI6XCIyOFwiLFwiRkhcIjpcImh0dHBzOi8vY2Ytc3Quc2MtY2RuLm5ldC9kL09iYTVhMEcycmVHTFBPS094b2FGOD9nbz1JZ3NLQ1RJQkJFZ0JVRnhnQVElM0QlM0QmdWM9OTJcIn0nKTtmdW5jdGlvbiBRKGUpe3JldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKCgoW2UsdF0pPT52b2lkIDAhPT10KSkpfWZ1bmN0aW9uIEooZSx0LG4pe2NvbnN0IHI9QXJyYXkuaXNBcnJheSh0KT90OltdLGk9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90Om47aWYoIWkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIltGYWN0b3J5XSBSZWNlaXZlZCBpbnZhbGlkIGFyZ3VtZW50cy4gVGhlIGZhY3RvcnkgZnVuY3Rpb24gbXVzdCBiZSBlaXRoZXIgdGhlIHNlY29uZCBvciB0aGlyZCBhcmd1bWVudC5cIik7aWYoaS5sZW5ndGghPT1yLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKGBbRmFjdG9yeV0gRnVuY3Rpb24gYXJpdHkgZG9lcyBub3QgbWF0Y2ggdGhlIG51bWJlciBvZiBkZXBlbmRlbmNpZXMuIEZ1bmN0aW9uIGhhcyBhcml0eSAke2kubGVuZ3RofSwgYnV0ICR7ci5sZW5ndGh9IGRlcGVuZGVuY2llcyB3ZXJlIHNwZWNpZmllZC5cXG5EZXBlbmRlbmNpZXM6ICR7SlNPTi5zdHJpbmdpZnkocil9YCk7Y29uc3Qgbz0oLi4uZSk9PmkoLi4uZSk7cmV0dXJuIG8udG9rZW49ZSxvLmRlcGVuZGVuY2llcz1yLG99Y29uc3QgJD17c2hvdWxkVXNlV29ya2VyOiEwLGxlbnNQZXJmb3JtYW5jZTp7Y2x1c3RlcjowLGJlbmNobWFya3M6W10sd2ViZ2xSZW5kZXJlckluZm86XCJ1bmtub3duXCJ9LGxvZ2dlcjpcIm5vb3BcIn0sZWU9XCJfX3NuYXBfY2Fta2l0X2RlYnVnXCI7ZnVuY3Rpb24gdGUoKXtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiYhIXdpbmRvd1tlZV19XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdyxlZSx7Z2V0OigpPT5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGVlKSxzZXQ6ZT0+c2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShlZSxlKSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMX0pO2NvbnN0IG5lPVwiY29uZmlndXJhdGlvblwiO2Z1bmN0aW9uIHJlKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlfWZ1bmN0aW9uIGllKGUpe3JldHVybiByZShlKSYmZW5jb2RlVVJJQ29tcG9uZW50KGUpPT09ZX1mdW5jdGlvbiBvZShlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZX1mdW5jdGlvbiBhZShlLHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiZ0LmV2ZXJ5KCh0PT5lKHQpKSl9ZnVuY3Rpb24gc2UoZSl7cmV0dXJuIHZvaWQgMD09PWV9ZnVuY3Rpb24gY2UoZSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lJiYhQXJyYXkuaXNBcnJheShlKX1mdW5jdGlvbiBsZShlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlfWZ1bmN0aW9uIHVlKGUpe3JldHVybiB0PT57Zm9yKGNvbnN0IG4gb2YgT2JqZWN0LnZhbHVlcyh0KSlpZighZShuKSlyZXR1cm4hMTtyZXR1cm4hMH19ZnVuY3Rpb24gZGUoZSl7aWYoIWUpcmV0dXJuITA7dHJ5e2NvbnN0IHQ9bmV3IFVSTChlKTtyZXR1cm5cImh0dHBzOlwiPT09dC5wcm90b2NvbHx8XCJodHRwOlwiPT09dC5wcm90b2NvbH1jYXRjaChlKXtyZXR1cm4hMX19Y2xhc3MgZmV7Y29uc3RydWN0b3IoZSl7dGhpcy5pbm5lcj1lfWdldCBoYW5kbGVyKCl7cmV0dXJuIHRoaXMuaW5uZXJ9bWFwKGUpe3JldHVybiBuZXcgZmUoKCh0LG4pPT57dmFyIHI7Y29uc3QgaT1uZXcgQWJvcnRDb250cm9sbGVyLG89aS5zaWduYWw7bGV0IGE9ITE7Y29uc3Qgcz0oKT0+e3ZhciBlO28uYWJvcnRlZHx8YXx8KGkuYWJvcnQoKSxudWxsPT09KGU9bnVsbD09bj92b2lkIDA6bi5zaWduYWwpfHx2b2lkIDA9PT1lfHxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLHMpKX07bnVsbD09PShyPW51bGw9PW4/dm9pZCAwOm4uc2lnbmFsKXx8dm9pZCAwPT09cnx8ci5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIixzKTtjb25zdCBjPW5ldyBQcm94eSh0aGlzLmlubmVyLHthcHBseTooZSx0LG4pPT57Y29uc3RbcixpXT1uLGM9W107by5hZGRFdmVudExpc3RlbmVyPW5ldyBQcm94eShvLmFkZEV2ZW50TGlzdGVuZXIse2FwcGx5OihlLHQsbik9PihjLnB1c2goblsxXSksUmVmbGVjdC5hcHBseShlLHQsbikpfSk7Y29uc3QgbD1SZWZsZWN0LmFwcGx5KGUsdCxbcixPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saSkse3NpZ25hbDpvfSldKTtyZXR1cm4gbC5jYXRjaCgoKCk9Pnt9KSkudGhlbigoKCk9Pnt2YXIgZTtudWxsPT09KGU9bnVsbD09aT92b2lkIDA6aS5zaWduYWwpfHx2b2lkIDA9PT1lfHxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLHMpLGMuZm9yRWFjaCgoZT0+by5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIixlKSkpLGE9ITB9KSksbH19KSxsPWUoYykodCxuKTtyZXR1cm4gbC5jYXRjaCgoKCk9Pnt9KSkudGhlbihzKSxsfSkpfX1jb25zdCBwZT1bXCJsb2dcIixcIndhcm5cIixcImluZm9cIixcImRlYnVnXCIsXCJlcnJvclwiXSxtZT17bG9nOigpPT57fSx3YXJuOigpPT57fSxpbmZvOigpPT57fSxkZWJ1ZzooKT0+e30sZXJyb3I6KCk9Pnt9fTtsZXQgaGU9bWU7Y29uc3QgdmU9e25vb3A6bWUsY29uc29sZTp7bG9nOiguLi5lKT0+Y29uc29sZS5sb2coLi4uZSksd2FybjooLi4uZSk9PmNvbnNvbGUud2FybiguLi5lKSxpbmZvOiguLi5lKT0+Y29uc29sZS5pbmZvKC4uLmUpLGRlYnVnOiguLi5lKT0+Y29uc29sZS5kZWJ1ZyguLi5lKSxlcnJvcjooLi4uZSk9PmNvbnNvbGUuZXJyb3IoLi4uZSl9fTtmdW5jdGlvbiBnZShlKXtjb25zdCB0PWBbQ2FtZXJhS2l0LiR7ZX1dYCxuPU9iamVjdC5hc3NpZ24oe30saGUpO2Zvcihjb25zdCBlIG9mIHBlKW5bZV09KC4uLm4pPT5oZVtlXSh0LC4uLm4pO3JldHVybiBufWNvbnN0IHllPWdlKFwibm9Db3JzUmV0cnlpbmdGZXRjaEhhbmRsZXJcIik7dmFyIEVlPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIGEoZSl7dHJ5e2Moci5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBzKGUpe3RyeXtjKHIudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGMoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKGEscyl9Yygocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfTtjb25zdCBfZT1nZShcInJldHJ5aW5nSGFuZGxlclwiKSxJZT0oZSx0KT0+e19lLndhcm4oXCJSZXRyeWluZyBoYW5kbGVyIGdvdCBmYWlsZWQgcmVzcG9uc2U6XCIsZSxgV2FpdGVkICR7dH0gbWlsbGlzLCBhdHRlbXB0aW5nIHJldHJ5IG5vdy5gKX0sU2U9e2JhY2tvZmZNdWx0aXBsZTozLGJhc2VTbGVlcDo1MDAsbWF4U2xlZXA6NWUzLHJldHJ5UHJlZGljYXRlOmU9PiEoZSBpbnN0YW5jZW9mIFJlc3BvbnNlJiZlLm9rKX0sYmU9KGU9e30pPT57Y29uc3QgdD1RKGUpLHtiYWNrb2ZmTXVsdGlwbGU6bixiYXNlU2xlZXA6cixtYXhTbGVlcDppLHJldHJ5UHJlZGljYXRlOm99PU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxTZSksdCksYT1lPT5FZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1NYXRoLm1pbihpLChvPXIsYT1lKm4sTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpKihhLW8pK28pKSk7dmFyIG8sYSxzO3JldHVybiB5aWVsZChzPXQsbmV3IFByb21pc2UoKGU9PnNldFRpbWVvdXQoZSxzKSkpKSx0fSkpLHM9KGUsdD1yKT0+KG4scik9PkVlKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgaSxjO3RyeXtjb25zdCBjPXlpZWxkIGUobixyKTtpZihvKGMpKXtjb25zdCBvPXlpZWxkIGEodCk7cmV0dXJuKG51bGw9PT0oaT1udWxsPT1yP3ZvaWQgMDpyLnNpZ25hbCl8fHZvaWQgMD09PWk/dm9pZCAwOmkuYWJvcnRlZCk/YzooSWUoYyxvKSxzKGUsbykobixyKSl9cmV0dXJuIGN9Y2F0Y2goaSl7aWYoIShpIGluc3RhbmNlb2YgRXJyb3IpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0eXBlIGNhdWdodCBieSByZXRyeWluZyBoYW5kbGVyLiBIYW5kbGVycyBtYXkgb25seSB0aHJvdyBFcnJvcnMuIEdvdCAke0pTT04uc3RyaW5naWZ5KGkpfWApO2lmKFwiQWJvcnRFcnJvclwiPT09aS5uYW1lKXRocm93IGk7aWYoIW8oaSkpdGhyb3cgaTtjb25zdCBsPXlpZWxkIGEodCk7aWYobnVsbD09PShjPW51bGw9PXI/dm9pZCAwOnIuc2lnbmFsKXx8dm9pZCAwPT09Yz92b2lkIDA6Yy5hYm9ydGVkKXRocm93IGk7cmV0dXJuIEllKGksbCkscyhlLGwpKG4scil9fSkpO3JldHVybiBlPT5zKGUpfSxUZT17Y3JlYXRlRXJyb3I6ZT0+e2NvbnN0IHQ9cmUoZSk/YGZvciAke2V9YDplIGluc3RhbmNlb2YgUmVxdWVzdD9gZm9yICR7ZS51cmx9YDpcIlwiO3JldHVybiBuZXcgRXJyb3IoYFJlcXVlc3QgJHt0fSB0aW1lZCBvdXQgYnkgY2xpZW50IHRpbWVvdXQgaGFuZGxlci5gKX0sdGltZW91dDozZTR9LENlPShlPXt9KT0+e2NvbnN0IHQ9UShlKSx7Y3JlYXRlRXJyb3I6bix0aW1lb3V0OnJ9PU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxUZSksdCk7cmV0dXJuIGU9Pih0LGkpPT57cmV0dXJuIFByb21pc2UucmFjZShbZSh0LGkpLChvPXIsbmV3IFByb21pc2UoKGU9PnNldFRpbWVvdXQoZSxvKSkpKS50aGVuKCgoKT0+UHJvbWlzZS5yZWplY3Qobih0LGkpKSkpXSk7dmFyIG99fSxBZT1KKFwiZGVmYXVsdEZldGNoSGFuZGxlclwiLCgoKT0+e3JldHVybiBuZXcgZmUoZmV0Y2gpLm1hcCgoZT10ZSgpLGU/ZT0+KHQsbik9Pnt2YXIgcjtyZXR1cm4ocmUodCk/dDpudWxsIT09KHI9bnVsbD09dD92b2lkIDA6dC51cmwpJiZ2b2lkIDAhPT1yP3I6XCJcIikuc3RhcnRzV2l0aChcImh0dHBzOi8vbGVucy1jb3JlLXdhc20uc2MtY29ycC5uZXQvXCIpP2UodCxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbikse2NyZWRlbnRpYWxzOlwiaW5jbHVkZVwifSkpOmUodCxuKX06ZT0+ZSkpLm1hcCgoKCk9Pntjb25zdCBlPW5ldyBNYXA7cmV0dXJuIHQ9PihuLHI9e30pPT5mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKGUpe3RyeXthKHIubmV4dChlKSl9Y2F0Y2goZSl7dChlKX19ZnVuY3Rpb24gbyhlKXt0cnl7YShyLnRocm93KGUpKX1jYXRjaChlKXt0KGUpfX1mdW5jdGlvbiBhKHQpe3ZhciByO3QuZG9uZT9lKHQudmFsdWUpOihyPXQudmFsdWUsciBpbnN0YW5jZW9mIG4/cjpuZXcgbigoZnVuY3Rpb24oZSl7ZShyKX0pKSkudGhlbihpLG8pfWEoKHI9ci5hcHBseSh2b2lkIDAsW10pKS5uZXh0KCkpfSkpfSgwLDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgaTtsZXQgbz1cInN0cmluZ1wiPT10eXBlb2Ygbj9uOm4udXJsO3RyeXtvPW5ldyBVUkwobyxsb2NhdGlvbi5vcmlnaW4pLmhvc3R9Y2F0Y2goZSl7fXRyeXtyZXR1cm4geWllbGQgdChuLHIpfWNhdGNoKGEpe2lmKGEgaW5zdGFuY2VvZiBFcnJvciYmXCJBYm9ydEVycm9yXCI9PT1hLm5hbWUpdGhyb3cgYTsoZT0+e3llLndhcm4oXCJOb0NvcnNSZXRyeWluZyBoYW5kbGVyIGdvdCBmYWlsZWQgcmVzcG9uc2U6XCIsZSwnUmV0cnlpbmcgcmVxdWVzdCB3aXRoIHttb2RlOiBcIm5vLWNvcnNcIn0uJyl9KShhKTtjb25zdCBzPW51bGwhPT0oaT1lLmdldChvKSkmJnZvaWQgMCE9PWk/aTp0KG4sT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHIpLHttb2RlOlwibm8tY29yc1wifSkpO3JldHVybiBlLnNldChvLHMpLHlpZWxkIHMsZS5kZWxldGUobyksdChuLHIpfX0pKX0pKCkpLm1hcChiZSgpKS5tYXAoQ2Uoe3RpbWVvdXQ6MWU0fSkpLmhhbmRsZXI7dmFyIGV9KSk7dmFyIFJlPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIGEoZSl7dHJ5e2Moci5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBzKGUpe3RyeXtjKHIudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGMoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKGEscyl9Yygocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfTtjb25zdCBrZT1nZShcImxlbnNDb3JlRmFjdG9yeVwiKSxPZT1bXCJMZW5zQ29yZVdlYkFzc2VtYmx5LmpzXCIsXCJMZW5zQ29yZVdlYkFzc2VtYmx5Lndhc21cIl0sTmU9KGUsdCk9PnQuZmluZCgodD0+ZS50ZXN0KHQpKSksd2U9SihcImxlbnNDb3JlXCIsW0FlLnRva2VuLG5lXSwoKGUse3dhc21FbmRwb2ludDp0LHdhc21FbmRwb2ludE92ZXJyaWRlOm59KT0+UmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciByO2NvbnN0IGk9bnVsbCE9PShyPW51bGwhPW4/bjp0KSYmdm9pZCAwIT09cj9yOnZvaWQgMCxvPXlpZWxkIGZ1bmN0aW9uKGUpe3JldHVybiBSZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9bnVsbD09ZT92b2lkIDA6ZS5yZXBsYWNlKC9bXFwvXSskLyxcIlwiKSxuPSh5aWVsZChhc3luYygpPT5XZWJBc3NlbWJseS52YWxpZGF0ZShuZXcgVWludDhBcnJheShbMCw5NywxMTUsMTA5LDEsMCwwLDAsMSw1LDEsOTYsMCwxLDEyMywzLDIsMSwwLDEwLDEwLDEsOCwwLDY1LDAsMjUzLDE1LDI1Myw5OCwxMV0pKSkoKSk/XCJyZWxlYXNlLXNpbWRcIjpcInJlbGVhc2VcIixyPVguaTgsaT1YLmMkO3JldHVybiBPZS5tYXAoKGU9PntpZih0KXJldHVybmAke3R9LyR7ZX1gO2NvbnN0e29yaWdpbjpvLHBhdGhuYW1lOmEsc2VhcmNoOnN9PW5ldyBVUkwoWC5GSCk7cmV0dXJuYCR7b30ke2F9LyR7cn0vJHtpfS8ke259LyR7ZX0ke3N9YH0pKX0pKX0oaSksYT1OZSgvXFwuanMvLG8pLHM9TmUoL1xcLndhc20vLG8pO2lmKCFhfHwhcyl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmZXRjaCByZXF1aXJlZCBMZW5zQ29yZSBhc3NldHMuIEVpdGhlciB0aGUgSlMgb3IgV0FTTSBmaWxlbmFtZSBpcyBtaXNzaW5nIGZyb20gdGhpcyBsaXN0OiAke299YCk7Y29uc3QgYz15aWVsZCBlKGEpLnRoZW4oKGU9PmUuYmxvYigpKSksbD1VUkwuY3JlYXRlT2JqZWN0VVJMKGMpO3ZhciB1O3lpZWxkKHU9bCxuZXcgUHJvbWlzZSgoKGUsdCk9Pntjb25zdCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7bi5zcmM9dSxuLmFzeW5jPSEwLG4uYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwoKCk9PmUoKSkse29uY2U6ITB9KSxuLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLChlPT50KGUpKSx7b25jZTohMH0pLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobil9KSkpO2NvbnN0IGQ9eWllbGQgbmV3IFByb21pc2UoKCh0LG4pPT57bGV0IHI7Y29uc3QgaT1nbG9iYWxUaGlzLmNyZWF0ZUxlbnNlc01vZHVsZShyPXttYWluU2NyaXB0VXJsT3JCbG9iOmwsaW5zdGFudGlhdGVXYXNtOihvLGEpPT57V2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcoZShzKSxvKS50aGVuKChmdW5jdGlvbih7aW5zdGFuY2U6ZSxtb2R1bGU6bn0pe2EoZSxuKSxyLmNvbXBpbGVkTW9kdWxlPW4sdChpKX0pKS5jYXRjaChuKX19KX0pKTtyZXR1cm4gWC5pOCE9YCR7ZC5nZXRDb3JlVmVyc2lvbigpfWAmJmtlLndhcm4oYExvYWRlZCBMZW5zQ29yZSB2ZXJzaW9uICgke2QuZ2V0Q29yZVZlcnNpb24oKX0pIGRpZmZlcnMgZnJvbSBleHBlY3RlZCBvbmUgKCR7WC5pOH0pYCksZH0pKSkpO2Z1bmN0aW9uIERlKGUpe3JldHVybiB0PT4odC5uYW1lPWUsdCl9ZnVuY3Rpb24gUGUoZSx0KXt2YXIgbjtjb25zdCByPU1lKHQpLGk9KG51bGwhPT0obj1yLnN0YWNrKSYmdm9pZCAwIT09bj9uOlwiXCIpLmluY2x1ZGVzKHIubWVzc2FnZSk/ci5zdGFjazpgJHtyLm1lc3NhZ2V9XFxuJHtyLnN0YWNrfWA7cmV0dXJuIGUuc3RhY2s9YCR7ZS5zdGFja31cXG5DYXVzZWQgYnk6ICR7aX1gLGUuY2F1c2U9cixlfWZ1bmN0aW9uIE1lKGUpe2lmKGUgaW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gZTt0cnl7cmV0dXJuIG5ldyBFcnJvcihgTm9uLUVycm9yIHR5cGUgZXhjZXB0aW9uIHRocm93bi4gU2VyaWFsaXplZCBlcnJvciB2YWx1ZTogJHtKU09OLnN0cmluZ2lmeShlKX1gKX1jYXRjaChlKXtyZXR1cm4gbmV3IEVycm9yKFwiTm9uLUVycm9yIHR5cGUgZXhjZXB0aW9uIHRocm93bi4gT3JpZ2luYWwgZXJyb3IgdmFsdWUgY291bGQgbm90IGJlIHNlcmlhbGl6ZWQuXCIpfX1jb25zdCBMZT1EZShcIldlYkdMRXJyb3JcIiksVWU9ZT0+TGUobmV3IEVycm9yKGBDb3VsZCBub3QgY3JlYXRlICR7ZX0uYCkpO2Z1bmN0aW9uIHhlKGUsdCxuKXtjb25zdCByPWUuY3JlYXRlU2hhZGVyKG4pO2lmKCFyKXRocm93IFVlKGBXZWJHTFNoYWRlciAodHlwZSAke259KWApO2lmKGUuc2hhZGVyU291cmNlKHIsdCksZS5jb21waWxlU2hhZGVyKHIpLCFlLmdldFNoYWRlclBhcmFtZXRlcihyLGUuQ09NUElMRV9TVEFUVVMpKXtjb25zdCB0PWUuZ2V0U2hhZGVySW5mb0xvZyhyKTt0aHJvdyBlLmRlbGV0ZVNoYWRlcihyKSxMZShuZXcgRXJyb3IoYFdlYkdMU2hhZGVyICh0eXBlICR7bn0pIGNvbXBpbGF0aW9uIGZhaWxlZCB3aXRoIHN0YXR1czogJHt0fWApKX1yZXR1cm4gcn1mdW5jdGlvbiBGZShlLHQsbixyKXtlLnVuaWZvcm0xaShlLmdldFVuaWZvcm1Mb2NhdGlvbih0LG4pLHIpfWZ1bmN0aW9uIEJlKGUsdCxuLHIpe2UudW5pZm9ybTRmKGUuZ2V0VW5pZm9ybUxvY2F0aW9uKHQsbiksLi4ucil9ZnVuY3Rpb24gVmUoZSl7Y29uc3QgdD1lLmZlbmNlU3luYyhlLlNZTkNfR1BVX0NPTU1BTkRTX0NPTVBMRVRFLDApO2lmKCF0KXRocm93IFVlKFwiV2ViR0xTeW5jXCIpO3JldHVybiBlLmZsdXNoKCksbmV3IFByb21pc2UoKChuLHIpPT57Y29uc3QgaT0oKT0+e3N3aXRjaChlLmNsaWVudFdhaXRTeW5jKHQsMCwwKSl7Y2FzZSBlLlRJTUVPVVRfRVhQSVJFRDpyZXR1cm4gdm9pZCBzZXRUaW1lb3V0KGkpO2Nhc2UgZS5XQUlUX0ZBSUxFRDpyZXR1cm4gZS5kZWxldGVTeW5jKHQpLHIoKTtjYXNlIGUuQUxSRUFEWV9TSUdOQUxFRDpjYXNlIGUuQ09ORElUSU9OX1NBVElTRklFRDpyZXR1cm4gZS5kZWxldGVTeW5jKHQpLG4oKX19O2koKX0pKX12YXIgR2U9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShlKXt0cnl7YyhyLm5leHQoZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIHMoZSl7dHJ5e2Moci50aHJvdyhlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYyhlKXt2YXIgdDtlLmRvbmU/aShlLnZhbHVlKToodD1lLnZhbHVlLHQgaW5zdGFuY2VvZiBuP3Q6bmV3IG4oKGZ1bmN0aW9uKGUpe2UodCl9KSkpLnRoZW4oYSxzKX1jKChyPXIuYXBwbHkoZSx0fHxbXSkpLm5leHQoKSl9KSl9O2NvbnN0IEhlPVwiI3ZlcnNpb24gMzAwIGVzXFxuXFxucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxucHJlY2lzaW9uIG1lZGl1bXAgaW50O1xcblxcbmluIHZlYzIgcG9zO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvcywgMC4wLCAxLjApO1xcbn1cXG5cIixXZT1cIiN2ZXJzaW9uIDMwMCBlc1xcblxcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbnByZWNpc2lvbiBtZWRpdW1wIGludDtcXG5cXG51bmlmb3JtIGludCBMT09QX0NPVU5UO1xcbnVuaWZvcm0gdmVjNCB2MDtcXG51bmlmb3JtIHZlYzQgdjE7XFxudW5pZm9ybSB2ZWM0IHYyO1xcblxcbm91dCB2ZWM0IGZyYWdDb2xvcjtcXG5cXG4jZGVmaW5lIFJFUEVBVF8yKHgpIHg7IHhcXG4jZGVmaW5lIFJFUEVBVF80KHgpIFJFUEVBVF8yKHgpOyBSRVBFQVRfMih4KVxcbiNkZWZpbmUgUkVQRUFUXzgoeCkgUkVQRUFUXzQoeCk7IFJFUEVBVF80KHgpXFxuI2RlZmluZSBSRVBFQVRfMTYoeCkgUkVQRUFUXzgoeCk7IFJFUEVBVF84KHgpXFxuI2RlZmluZSBSRVBFQVRfMzIoeCkgUkVQRUFUXzE2KHgpOyBSRVBFQVRfMTYoeClcXG5cXG52b2lkIG1haW4oKSB7XFxuICAgIHZlYzQgciA9IHYyO1xcbiAgICBmb3IgKGludCBpID0gMDsgaSA8IExPT1BfQ09VTlQ7IGkrKykge1xcbiAgICAgICAgUkVQRUFUXzMyKHIgPSByICogdjEgKyB2MCk7XFxuICAgIH1cXG4gICAgZnJhZ0NvbG9yID0gcjtcXG59XFxuXCIsamU9MTAyNCxaZT0xMDI0LHplPTMwMCxLZT0xZTMsWWU9bmV3IE1hcChbWzM0LDFdLFsxMzQsMl0sWzM4NSwzXSxbNzgzLDRdLFsxNDg0LDVdLFsyMzEzLDZdXSk7Y29uc3QgcWU9RGUoXCJCZW5jaG1hcmtFcnJvclwiKSxYZT17YWxwaGE6ITEsYW50aWFsaWFzOiExLHByZW11bHRpcGxpZWRBbHBoYTohMSxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITEsZGVwdGg6ITEsc3RlbmNpbDohMSxmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OiExLHBvd2VyUHJlZmVyZW5jZTpcImhpZ2gtcGVyZm9ybWFuY2VcIn07ZnVuY3Rpb24gUWUoKXt2YXIgZTtyZXR1cm4gZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKHQsaSl7ZnVuY3Rpb24gbyhlKXt0cnl7cyhyLm5leHQoZSkpfWNhdGNoKGUpe2koZSl9fWZ1bmN0aW9uIGEoZSl7dHJ5e3Moci50aHJvdyhlKSl9Y2F0Y2goZSl7aShlKX19ZnVuY3Rpb24gcyhlKXt2YXIgcjtlLmRvbmU/dChlLnZhbHVlKToocj1lLnZhbHVlLHIgaW5zdGFuY2VvZiBuP3I6bmV3IG4oKGZ1bmN0aW9uKGUpe2Uocil9KSkpLnRoZW4obyxhKX1zKChyPXIuYXBwbHkoZSxbXSkpLm5leHQoKSl9KSl9KHRoaXMsMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKS5nZXRDb250ZXh0KFwid2ViZ2wyXCIsWGUpO2lmKCF0KXRocm93IHFlKG5ldyBFcnJvcihcIldlYkdMMiBpcyByZXF1aXJlZCB0byBjb21wdXRlIHBlcmZvcm1hbmNlLCBidXQgaXQgaXMgbm90IHN1cHBvcnRlZC5cIikpO2NvbnN0IG49dC5nZXRFeHRlbnNpb24oXCJXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvXCIpLHI9bj90LmdldFBhcmFtZXRlcihuLlVOTUFTS0VEX1JFTkRFUkVSX1dFQkdMKTpcInVua25vd25cIixpPXlpZWxkIGZ1bmN0aW9uKGUpe3JldHVybiBHZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0e3Byb2dyYW06dCxjbGVhbnVwQmVuY2htYXJrOm59PWZ1bmN0aW9uKGUpe2NvbnN0IHQ9ZnVuY3Rpb24oZSx0LG4pe2NvbnN0IHI9ZS5jcmVhdGVUZXh0dXJlKCk7aWYoIXIpdGhyb3cgVWUoXCJXZWJHTFRleHR1cmVcIik7cmV0dXJuIGUuYmluZFRleHR1cmUoZS5URVhUVVJFXzJELHIpLGUudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfMkQsZS5URVhUVVJFX01JTl9GSUxURVIsZS5ORUFSRVNUKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NQUdfRklMVEVSLGUuTkVBUkVTVCksZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfV1JBUF9TLGUuQ0xBTVBfVE9fRURHRSksZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfV1JBUF9ULGUuQ0xBTVBfVE9fRURHRSksZS50ZXhJbWFnZTJEKGUuVEVYVFVSRV8yRCwwLGUuUkdCQSx0LG4sMCxlLlJHQkEsZS5VTlNJR05FRF9CWVRFLG51bGwpLHJ9KGUsamUsWmUpLG49ZnVuY3Rpb24oZSx0KXtjb25zdCBuPWUuY3JlYXRlRnJhbWVidWZmZXIoKTtpZighbil0aHJvdyBVZShcIldlYkdMRnJhbWVidWZmZXJcIik7cmV0dXJuIGUuYmluZFRleHR1cmUoZS5URVhUVVJFXzJELHQpLGUuYmluZEZyYW1lYnVmZmVyKGUuRlJBTUVCVUZGRVIsbiksZS5mcmFtZWJ1ZmZlclRleHR1cmUyRChlLkZSQU1FQlVGRkVSLGUuQ09MT1JfQVRUQUNITUVOVDAsZS5URVhUVVJFXzJELHQsMCksbn0oZSx0KTtlLmJpbmRGcmFtZWJ1ZmZlcihlLkZSQU1FQlVGRkVSLG4pO2NvbnN0IHI9ZS5jcmVhdGVCdWZmZXIoKTtpZighcil0aHJvdyBuZXcgRXJyb3IoXCJcIik7ZS5iaW5kQnVmZmVyKGUuQVJSQVlfQlVGRkVSLHIpLGUuYnVmZmVyRGF0YShlLkFSUkFZX0JVRkZFUixuZXcgRmxvYXQzMkFycmF5KFstMSwxLC0xLC0xLDEsLTEsMSwxXSksZS5TVEFUSUNfRFJBVyksZS52aWV3cG9ydCgwLDAsamUsWmUpLGUuZGlzYWJsZShlLkNVTExfRkFDRSksZS5kaXNhYmxlKGUuREVQVEhfVEVTVCk7Y29uc3QgaT1mdW5jdGlvbihlLHQsbil7Y29uc3Qgcj14ZShlLHQsZS5WRVJURVhfU0hBREVSKSxpPXhlKGUsbixlLkZSQUdNRU5UX1NIQURFUiksbz1lLmNyZWF0ZVByb2dyYW0oKTtpZighbyl0aHJvdyBVZShcIldlYkdMUHJvZ3JhbVwiKTtpZihlLmF0dGFjaFNoYWRlcihvLHIpLGUuZGVsZXRlU2hhZGVyKHIpLGUuYXR0YWNoU2hhZGVyKG8saSksZS5kZWxldGVTaGFkZXIoaSksZS5saW5rUHJvZ3JhbShvKSwhZS5nZXRQcm9ncmFtUGFyYW1ldGVyKG8sZS5MSU5LX1NUQVRVUykpe2NvbnN0IHQ9ZS5nZXRQcm9ncmFtSW5mb0xvZyhvKTt0aHJvdyBlLmRlbGV0ZVByb2dyYW0obyksTGUobmV3IEVycm9yKGBXZWJHTFByb2dyYW0gbGlua2luZyBmYWlsZWQgd2l0aCBzdGF0dXM6ICR7dH1gKSl9cmV0dXJuIG99KGUsSGUsV2UpO2UudXNlUHJvZ3JhbShpKTtjb25zdCBvPWUuZ2V0QXR0cmliTG9jYXRpb24oaSxcInBvc1wiKTtyZXR1cm4gZS5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShvKSxlLnZlcnRleEF0dHJpYlBvaW50ZXIobywyLGUuRkxPQVQsITEsMCwwKSxCZShlLGksXCJ2MFwiLFsxLjE1LDEuMjMsMS40NywxLjg0XSksQmUoZSxpLFwidjFcIixbMS42NSwxLjIyLDEuNjksMS4wNF0pLEJlKGUsaSxcInYyXCIsWzEuMDUsMS4zLDEuNTUsMS4yM10pLHtwcm9ncmFtOmksY2xlYW51cEJlbmNobWFyazooKT0+e2UuZGVsZXRlUHJvZ3JhbShpKSxlLmRlbGV0ZUJ1ZmZlcihyKSxlLmRlbGV0ZUZyYW1lYnVmZmVyKG4pLGUuZGVsZXRlVGV4dHVyZSh0KX19fShlKSxyPXlpZWxkIGZ1bmN0aW9uKGUsdCl7cmV0dXJuIEdlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgVmUoZSk7Y29uc3Qgbj1wZXJmb3JtYW5jZS5ub3coKSxyPVtdO2xldCBpPTIwO2Zvcig7Oyl7RmUoZSx0LFwiTE9PUF9DT1VOVFwiLGkpO2NvbnN0IG89cGVyZm9ybWFuY2Uubm93KCk7ZS5kcmF3QXJyYXlzKGUuVFJJQU5HTEVfRkFOLDAsNCkseWllbGQgVmUoZSk7Y29uc3QgYT1wZXJmb3JtYW5jZS5ub3coKSxzPWEtbztyLnB1c2goaS9zKTtjb25zdCBjPXplLShhLW4pO2lmKGM8MClicmVhaztpPEtlJiYoaSs9YzxzPzEwOi42KmkqYy9zKX1yZXR1cm4gMjU2Kk1hdGgubWF4KC4uLnIpKmplKlplLzFlNn0pKX0oZSx0KTtyZXR1cm4gbigpLHtuYW1lOlwiZ2Zsb3BzXCIsdmFsdWU6cn19KSl9KHQpLG89KGE9aS52YWx1ZSxBcnJheS5mcm9tKFllLmtleXMoKSkucmVkdWNlKCgoZSx0KT0+TWF0aC5hYnMoZS1hKTw9TWF0aC5hYnModC1hKT9lOnQpKSk7dmFyIGE7cmV0dXJue2NsdXN0ZXI6bnVsbCE9PShlPVllLmdldChvKSkmJnZvaWQgMCE9PWU/ZTowLGJlbmNobWFya3M6W2ldLHdlYmdsUmVuZGVyZXJJbmZvOnJ9fSkpfW4oMjg2NjApO2NvbnN0IEplPVN5bWJvbChcInZhbGlkYXRlXCIpLCRlPXtzdHJpbmc6U3RyaW5nLG51bWJlcjpOdW1iZXIsYm9vbGVhbjpCb29sZWFufSxldD17MTpcInN0XCIsMjpcIm5kXCIsMzpcInJkXCJ9O2Z1bmN0aW9uIHR0KGUpe3JldHVybih0LG4scik9PntsZXQgaT1SZWZsZWN0LmdldE93bk1ldGFkYXRhKEplLHQsbil8fFtdO2lbcl09ZSxSZWZsZWN0LmRlZmluZU1ldGFkYXRhKEplLGksdCxuKX19ZnVuY3Rpb24gbnQoZSx0LG4pe2NvbnN0IHI9bi52YWx1ZSxpPVJlZmxlY3QuZ2V0TWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLGUsdCksbz1SZWZsZWN0LmdldE1ldGFkYXRhKEplLGUsdCk7bi52YWx1ZT1mdW5jdGlvbiguLi5uKXt2YXIgYTtmb3IoY29uc3RbcixzXW9mIGkuZW50cmllcygpKXtsZXQgaT1BcnJheS5pc0FycmF5KG4pJiZuW3JdO2lmKG8mJm9bcl0mJiFvW3JdKGkpKXRocm93IG5ldyBFcnJvcihgUHJlZGljYXRlIGV4aXN0cyBidXQgYXJnIG9mICR7aX0gZmFpbGVkIHZhbGlkYXRpb24gaW4gbWV0aG9kOiAke1N0cmluZyh0KX1gKTtpZihudWxsPT1pKWJyZWFrO2lmKCFydChpLHMpKXtjb25zdCBuPWAke2l0KGUpfS4ke1N0cmluZyh0KX0oKWAsbz1udWxsIT09KGE9ZXRbcisxXSkmJnZvaWQgMCE9PWE/YTpcInRoXCI7dGhyb3cgbmV3IEVycm9yKGBUaGUgJHtyKzF9JHtvfSBhcmd1bWVudCB0byAnJHtufScgbWV0aG9kIGlzIG9mIHR5cGUgJyR7aXQoaSl9Jywgd2hpY2ggaXMgbm90IGFzc2lnbmFibGUgdG8gcGFyYW1ldGVyIG9mIHR5cGUgJyR7cy5uYW1lfSdgKX19cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBydChlLHQpe3JldHVybiBlIGluc3RhbmNlb2YgdHx8ZSE9PU9iamVjdChlKSYmJGVbdHlwZW9mIGVdPT09dH1mdW5jdGlvbiBpdChlKXtyZXR1cm5cIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZT90eXBlb2YgZTpudWxsPT09ZT9cIm51bGxcIjpPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1GdW5jdGlvbi5wcm90b3R5cGUmJi9eY2xhc3MvLnRlc3QoU3RyaW5nKGUpKT9cImNsYXNzXCI6U3ltYm9sLnRvU3RyaW5nVGFnIGluIGUmJlwic3RyaW5nXCI9PXR5cGVvZiBlW1N5bWJvbC50b1N0cmluZ1RhZ10/ZVtTeW1ib2wudG9TdHJpbmdUYWddOlwic3RyaW5nXCI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yLm5hbWUmJlwiXCIhPT1lLmNvbnN0cnVjdG9yLm5hbWU/ZS5jb25zdHJ1Y3Rvci5uYW1lOnR5cGVvZiBlfWNvbnN0IG90PW5hdmlnYXRvci5sYW5ndWFnZSxhdD1uYXZpZ2F0b3IubGFuZ3VhZ2VzLm1hcCgoKGUsdCk9PmAke2V9O3E9JHtNYXRoLm1heCgwLCgxMC10KS8xMCkudG9GaXhlZCgxKX1gKSkuam9pbihcIiwgXCIpO2Z1bmN0aW9uIHN0KGUpe2NvbnN0IHQ9bmV3IE1hcChbW1wiQ2hyb21lXCIsXCJDaHJvbWVcIl0sW1wiQ2hyb21pdW1cIixcIkNocm9tZVwiXSxbXCJGaXJlZm94XCIsXCJGaXJlZm94XCJdLFtcIk1pY3Jvc29mdCBFZGdlXCIsXCJDaHJvbWVcIl0sW1wiU2FmYXJpXCIsXCJTYWZhcmlcIl1dKSxuPWUuZmlsdGVyKCgoe2JyYW5kOmV9KT0+dC5oYXMoZSkpKS5tYXAoKGU9Pih7YnJhbmQ6dC5nZXQoZS5icmFuZCksdmVyc2lvbjplLnZlcnNpb259KSkpO3JldHVybiAwPT09bi5sZW5ndGg/W3ticmFuZDpcIkZpcmVmb3hcIix2ZXJzaW9uOlwiMFwifV06bn1mdW5jdGlvbiBjdChlKXtjb25zdCB0PW5ldyBNYXAoW1tcImFuZHJvaWRcIixcImFuZHJvaWRcIl0sW1wibGludXhcIixcImxpbnV4XCJdLFtcImlwaG9uZSBvc1wiLFwiaW9zXCJdLFtcImlwYWRcIixcImlwYWRvc1wiXSxbXCJtYWMgb3NcIixcIm1hY29zXCJdLFtcIm1hY29zXCIsXCJtYWNvc1wiXSxbXCJ3aW5kb3dzXCIsXCJ3aW5kb3dzXCJdXSksbj1lLnRvTG93ZXJDYXNlKCk7Zm9yKGNvbnN0W2Uscl1vZiB0LmVudHJpZXMoKSlpZihuLmluY2x1ZGVzKGUpKXJldHVybiByO3JldHVyblwidW5rbm93blwifWNvbnN0IGx0PWZ1bmN0aW9uKCl7Y29uc3QgZT1uYXZpZ2F0b3IudXNlckFnZW50LHQ9dm9pZCAwIT09bmF2aWdhdG9yLnVzZXJBZ2VudERhdGE/ZnVuY3Rpb24oZSl7cmV0dXJue2JyYW5kczpzdChlLmJyYW5kcyksbW9iaWxlOmUubW9iaWxlLHBsYXRmb3JtOmN0KGUucGxhdGZvcm0pfX0obmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpOmZ1bmN0aW9uKGUpe2xldCB0O2lmKC9DaHJvbWUvLnRlc3QoZSkpe2NvbnN0IG49ZS5tYXRjaCgvQ2hyb21lXFwvKFtcXGQuXSspLyk7dD17YnJhbmQ6XCJDaHJvbWVcIix2ZXJzaW9uOm51bGwhPT1uP25bMV06XCJ1bmtub3duXCJ9fWVsc2UgaWYoL1NhZmFyaS8udGVzdChlKSl7bGV0IG49ZS5tYXRjaCgvVmVyc2lvblxcLyhbXFxkLl0rKS8pO251bGw9PT1uJiYobj1lLm1hdGNoKC9TYWZhcmlcXC8oW1xcZC5dKykvKSksdD17YnJhbmQ6XCJTYWZhcmlcIix2ZXJzaW9uOm51bGwhPT1uP25bMV06XCJ1bmtub3duXCJ9fWVsc2UgdD17YnJhbmQ6XCJGaXJlZm94XCIsdmVyc2lvbjpcIjBcIn07cmV0dXJue2JyYW5kczpbdF0sbW9iaWxlOiExLHBsYXRmb3JtOmN0KGUpfX0oZSksbj1mdW5jdGlvbihlKXtjb25zdCB0PWUubWF0Y2goL1xccyhbXFxkXVtcXGRfLl0qW1xcZF0pKDt8XFwpfFxccykvKTtyZXR1cm4gbnVsbCE9dD90WzFdLnJlcGxhY2UoL18vZyxcIi5cIik6XCJcIn0oZSkscj1mdW5jdGlvbihlKXtjb25zdCB0PWUubWF0Y2goLztbXjtdKz87KFteXFwpXSs/KVxcKS8pO2lmKHQpcmV0dXJuIHRbMV0udHJpbSgpO2NvbnN0IG49ZS5tYXRjaCgvXFwoKFteO10rKTsvKTtyZXR1cm4gbj9uWzFdLnRyaW0oKTpcInVua25vd25cIn0oZSksaT10LmJyYW5kc1swXSxvPWAke2kuYnJhbmR9LyR7aS52ZXJzaW9ufWAsYT1mdW5jdGlvbigpe3ZhciBlLHQ7bGV0IG49bG9jYXRpb24uaG9zdG5hbWU7Y29uc3Qgcj12b2lkIDA9PT1sb2NhdGlvbi5hbmNlc3Rvck9yaWdpbnM/W3dpbmRvdy5wYXJlbnQub3JpZ2luLG51bGwhPT0odD1udWxsPT09KGU9d2luZG93LnRvcCl8fHZvaWQgMD09PWU/dm9pZCAwOmUub3JpZ2luKSYmdm9pZCAwIT09dD90OlwiXCJdOkFycmF5LmZyb20obG9jYXRpb24uYW5jZXN0b3JPcmlnaW5zKTtmb3IoO1wiXCI9PT1uJiZyLmxlbmd0aD4wOyluPW5ldyBVUkwoci5zaGlmdCgpKS5ob3N0bmFtZTtyZXR1cm4gbn0oKSxzPXEubCxjPXMucmVwbGFjZSgvWy0rXVxcUyskLyxcIlwiKSxsPWBDYW1lcmFLaXRXZWIvJHtjfSAoJHtyfTsgJHt0LnBsYXRmb3JtfSAke259KSAke299IENvcmUvJHtYLmk4fSBBcHBJZC8ke2F9YDtyZXR1cm57b3NUeXBlOnQucGxhdGZvcm0sb3NWZXJzaW9uOm4sbG9jYWxlOm90LHNka1Nob3J0VmVyc2lvbjpjLHNka0xvbmdWZXJzaW9uOnMsZmxhdm9yOlwicmVsZWFzZVwiLGxlbnNDb3JlVmVyc2lvbjpgJHtYLmk4fWAsZGV2aWNlTW9kZWw6cixhcHBJZDphLHVzZXJBZ2VudDpsfX0oKSx1dD1KKFwiY2FtZXJhS2l0U2VydmljZUZldGNoSGFuZGxlclwiLFtuZSxBZS50b2tlbl0sKCh7YXBpVG9rZW46ZX0sdCk9PntyZXR1cm4gbmV3IGZlKHQpLm1hcCgobj10PT4odC5hcHBlbmQoXCJ4LXNuYXAtY2xpZW50LXVzZXItYWdlbnRcIixsdC51c2VyQWdlbnQpLHQuYXBwZW5kKFwiYXV0aG9yaXphdGlvblwiLGBCZWFyZXIgJHtlfWApLHQpLGU9Pih0LHIpPT57Y29uc3QgaT1yJiZyLmhlYWRlcnM/bmV3IEhlYWRlcnMoci5oZWFkZXJzKTpcInN0cmluZ1wiPT10eXBlb2YgdD9uZXcgSGVhZGVyczp0LmhlYWRlcnMsbz1uKGkpO3JldHVybiBlKHQsT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHIpLHtoZWFkZXJzOm99KSl9KSkuaGFuZGxlcjt2YXIgbn0pKTtjbGFzcyBkdHtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZmFsbGJhY2tTb3VyY2VzPWUsdGhpcy5zb3VyY2U9dH1zdGF0aWMgZW1wdHkoKXtyZXR1cm4gbmV3IGR0fXJldHJpZXZlTGVuc2VzKHtncm91cElkOmUsbGVuc0lkOnR9KXt2YXIgbixyO3JldHVybiBmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24odCxpKXtmdW5jdGlvbiBvKGUpe3RyeXtzKHIubmV4dChlKSl9Y2F0Y2goZSl7aShlKX19ZnVuY3Rpb24gYShlKXt0cnl7cyhyLnRocm93KGUpKX1jYXRjaChlKXtpKGUpfX1mdW5jdGlvbiBzKGUpe3ZhciByO2UuZG9uZT90KGUudmFsdWUpOihyPWUudmFsdWUsciBpbnN0YW5jZW9mIG4/cjpuZXcgbigoZnVuY3Rpb24oZSl7ZShyKX0pKSkudGhlbihvLGEpfXMoKHI9ci5hcHBseShlLFtdKSkubmV4dCgpKX0pKX0odGhpcywwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuKG51bGw9PT0obj10aGlzLnNvdXJjZSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uaXNHcm91cE93bmVyKGUpKT9zZSh0KT90aGlzLnNvdXJjZS5nZXRMZW5zR3JvdXAoZSk6dGhpcy5zb3VyY2UuZ2V0TGVucyh0LGUpLnRoZW4oKGU9PltlXSkpOm51bGw9PT0ocj10aGlzLmZhbGxiYWNrU291cmNlcyl8fHZvaWQgMD09PXI/dm9pZCAwOnIucmV0cmlldmVMZW5zZXMoe2dyb3VwSWQ6ZSxsZW5zSWQ6dH0pfSkpfX1jb25zdCBmdD1KKFwibGVuc1NvdXJjZXNcIiwoKCk9PmR0LmVtcHR5KCkpKTtmdW5jdGlvbiBwdChlKXt0aHJvdyBuZXcgRXJyb3IoXCJSZWFjaGVkIHVucmVhY2hhYmxlIGNvZGUgYXQgcnVudGltZS5cIil9ZnVuY3Rpb24gbXQoZSx0PVwiQXNzZXJ0aW9uIGZhaWxlZFwiKXtpZighZSl0aHJvdyB0IGluc3RhbmNlb2YgRXJyb3I/dDpuZXcgRXJyb3IodCl9ZnVuY3Rpb24gaHQoZSl7cmV0dXJuIGNlKGUpJiZyZShlLmlkKSYmcmUoZS5uYW1lKSYmY2UoZS52ZW5kb3JEYXRhKSYmdWUocmUpKGUudmVuZG9yRGF0YSkmJih2b2lkIDA9PT1lLmNvbnRlbnR8fGZ1bmN0aW9uKGUpe3JldHVybiBjZShlKSYmcmUoZS5pY29uVXJsQm9sdCkmJnJlKGUubG5zU2hhMjU2KSYmcmUoZS5sbnNVcmxCb2x0KSYmY2UoZS5wcmV2aWV3KSYmcmUoZS5wcmV2aWV3LmltYWdlVXJsKX0oZS5jb250ZW50KSl9ZnVuY3Rpb24gdnQoe2lkOmUsbmFtZTp0LGNvbnRlbnQ6bix2ZW5kb3JEYXRhOnIsY2FtZXJhRmFjaW5nUHJlZmVyZW5jZTppfSl7dmFyIG87cmV0dXJuIG10KGRlKG51bGw9PW4/dm9pZCAwOm4uaWNvblVybEJvbHQpLFwiVW5zYWZlIGljb24gVVJMXCIpLG10KGRlKG51bGw9PT0obz1udWxsPT1uP3ZvaWQgMDpuLnByZXZpZXcpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLmltYWdlVXJsKSxcIlVuc2FmZSBwcmV2aWV3IFVSTFwiKSx7aWQ6ZSxuYW1lOnQsaWNvblVybDpudWxsPT1uP3ZvaWQgMDpuLmljb25VcmxCb2x0LHByZXZpZXc6bnVsbD09bj92b2lkIDA6bi5wcmV2aWV3LHZlbmRvckRhdGE6cixjYW1lcmFGYWNpbmdQcmVmZXJlbmNlOml9fXZhciBndD1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBhKGUpe3RyeXtjKHIubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gcyhlKXt0cnl7YyhyLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBjKGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIG4/dDpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihhLHMpfWMoKHI9ci5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX07Y29uc3QgeXQ9XCJodHRwczovL2FwaS1raXQuc25hcGNoYXQuY29tL2NvbS5zbmFwLmNhbWVyYWtpdC52My5MZW5zZXNcIjtmdW5jdGlvbiBFdChlKXtyZXR1cm4gZS5oZWFkZXJzLmdldChcIngtcmVxdWVzdC1pZFwiKX12YXIgX3Q9bigzODY5NCksSXQ9bi5uKF90KSxTdD1uKDU1NDU5KSxidD1uLm4oU3QpO2Z1bmN0aW9uIFR0KCl7cmV0dXJue3R5cGVVcmw6XCJcIix2YWx1ZTpuZXcgVWludDhBcnJheX19Y29uc3QgQ3Q9e2VuY29kZTooZSx0PWJ0KCkuV3JpdGVyLmNyZWF0ZSgpKT0+KFwiXCIhPT1lLnR5cGVVcmwmJnQudWludDMyKDEwKS5zdHJpbmcoZS50eXBlVXJsKSwwIT09ZS52YWx1ZS5sZW5ndGgmJnQudWludDMyKDE4KS5ieXRlcyhlLnZhbHVlKSx0KSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBidCgpLlJlYWRlcj9lOm5ldyhidCgpLlJlYWRlcikoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9VHQoKTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS50eXBlVXJsPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkudmFsdWU9bi5ieXRlcygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbUpTT046ZT0+KHt0eXBlVXJsOk50KGUudHlwZVVybCk/U3RyaW5nKGUudHlwZVVybCk6XCJcIix2YWx1ZTpOdChlLnZhbHVlKT9rdChlLnZhbHVlKTpuZXcgVWludDhBcnJheX0pLHRvSlNPTihlKXtjb25zdCB0PXt9O3JldHVybiB2b2lkIDAhPT1lLnR5cGVVcmwmJih0LnR5cGVVcmw9ZS50eXBlVXJsKSx2b2lkIDAhPT1lLnZhbHVlJiYodC52YWx1ZT1mdW5jdGlvbihlKXtjb25zdCB0PVtdO2Zvcihjb25zdCBuIG9mIGUpdC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUobikpO3JldHVybiBPdCh0LmpvaW4oXCJcIikpfSh2b2lkIDAhPT1lLnZhbHVlP2UudmFsdWU6bmV3IFVpbnQ4QXJyYXkpKSx0fSxmcm9tUGFydGlhbChlKXt2YXIgdCxuO2NvbnN0IHI9VHQoKTtyZXR1cm4gci50eXBlVXJsPW51bGwhPT0odD1lLnR5cGVVcmwpJiZ2b2lkIDAhPT10P3Q6XCJcIixyLnZhbHVlPW51bGwhPT0obj1lLnZhbHVlKSYmdm9pZCAwIT09bj9uOm5ldyBVaW50OEFycmF5LHJ9fTt2YXIgQXQ9KCgpPT57aWYodm9pZCAwIT09QXQpcmV0dXJuIEF0O2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmKXJldHVybiBzZWxmO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvdztpZih2b2lkIDAhPT1uLmcpcmV0dXJuIG4uZzt0aHJvd1wiVW5hYmxlIHRvIGxvY2F0ZSBnbG9iYWwgb2JqZWN0XCJ9KSgpO2NvbnN0IFJ0PUF0LmF0b2J8fChlPT5BdC5CdWZmZXIuZnJvbShlLFwiYmFzZTY0XCIpLnRvU3RyaW5nKFwiYmluYXJ5XCIpKTtmdW5jdGlvbiBrdChlKXtjb25zdCB0PVJ0KGUpLG49bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7KytlKW5bZV09dC5jaGFyQ29kZUF0KGUpO3JldHVybiBufWNvbnN0IE90PUF0LmJ0b2F8fChlPT5BdC5CdWZmZXIuZnJvbShlLFwiYmluYXJ5XCIpLnRvU3RyaW5nKFwiYmFzZTY0XCIpKTtmdW5jdGlvbiBOdChlKXtyZXR1cm4gbnVsbCE9ZX12YXIgd3QsRHQsUHQ7ZnVuY3Rpb24gTXQoZSl7c3dpdGNoKGUpe2Nhc2UgMDpjYXNlXCJDQU1FUkFfRkFDSU5HX1VOU0VUXCI6cmV0dXJuIHd0LkNBTUVSQV9GQUNJTkdfVU5TRVQ7Y2FzZSAxOmNhc2VcIkNBTUVSQV9GQUNJTkdfRlJPTlRcIjpyZXR1cm4gd3QuQ0FNRVJBX0ZBQ0lOR19GUk9OVDtjYXNlIDI6Y2FzZVwiQ0FNRVJBX0ZBQ0lOR19CQUNLXCI6cmV0dXJuIHd0LkNBTUVSQV9GQUNJTkdfQkFDSztkZWZhdWx0OnJldHVybiB3dC5VTlJFQ09HTklaRUR9fWZ1bmN0aW9uIEx0KGUpe3N3aXRjaChlKXtjYXNlIDA6Y2FzZVwiREVWSUNFX0RFUEVOREVOVF9BU1NFVF9VTlNFVFwiOnJldHVybiBEdC5ERVZJQ0VfREVQRU5ERU5UX0FTU0VUX1VOU0VUO2Nhc2UgMTpjYXNlXCJBU1NFVFwiOnJldHVybiBEdC5BU1NFVDtkZWZhdWx0OnJldHVybiBEdC5VTlJFQ09HTklaRUR9fWZ1bmN0aW9uIFV0KGUpe3N3aXRjaChlKXtjYXNlIDA6Y2FzZVwiUFJFTE9BRF9VTlNFVFwiOnJldHVybiBQdC5QUkVMT0FEX1VOU0VUO2Nhc2UgMTpjYXNlXCJPTl9ERU1BTkRcIjpyZXR1cm4gUHQuT05fREVNQU5EO2Nhc2UgMjpjYXNlXCJSRVFVSVJFRFwiOnJldHVybiBQdC5SRVFVSVJFRDtkZWZhdWx0OnJldHVybiBQdC5VTlJFQ09HTklaRUR9fWZ1bmN0aW9uIHh0KCl7cmV0dXJue2lkOlwiXCIsbmFtZTpcIlwiLHZlbmRvckRhdGE6e30sY29udGVudDp2b2lkIDAsaXNUaGlyZFBhcnR5OiExLGNhbWVyYUZhY2luZ1ByZWZlcmVuY2U6d3QuQ0FNRVJBX0ZBQ0lOR19VTlNFVCxmZWF0dXJlTWV0YWRhdGE6W119fWJ0KCkudXRpbC5Mb25nIT09SXQoKSYmKGJ0KCkudXRpbC5Mb25nPUl0KCksYnQoKS5jb25maWd1cmUoKSksZnVuY3Rpb24oZSl7ZS5DQU1FUkFfRkFDSU5HX1VOU0VUPVwiQ0FNRVJBX0ZBQ0lOR19VTlNFVFwiLGUuQ0FNRVJBX0ZBQ0lOR19GUk9OVD1cIkNBTUVSQV9GQUNJTkdfRlJPTlRcIixlLkNBTUVSQV9GQUNJTkdfQkFDSz1cIkNBTUVSQV9GQUNJTkdfQkFDS1wiLGUuVU5SRUNPR05JWkVEPVwiVU5SRUNPR05JWkVEXCJ9KHd0fHwod3Q9e30pKSxmdW5jdGlvbihlKXtlLkRFVklDRV9ERVBFTkRFTlRfQVNTRVRfVU5TRVQ9XCJERVZJQ0VfREVQRU5ERU5UX0FTU0VUX1VOU0VUXCIsZS5BU1NFVD1cIkFTU0VUXCIsZS5VTlJFQ09HTklaRUQ9XCJVTlJFQ09HTklaRURcIn0oRHR8fChEdD17fSkpLGZ1bmN0aW9uKGUpe2UuUFJFTE9BRF9VTlNFVD1cIlBSRUxPQURfVU5TRVRcIixlLk9OX0RFTUFORD1cIk9OX0RFTUFORFwiLGUuUkVRVUlSRUQ9XCJSRVFVSVJFRFwiLGUuVU5SRUNPR05JWkVEPVwiVU5SRUNPR05JWkVEXCJ9KFB0fHwoUHQ9e30pKTtjb25zdCBGdD17ZW5jb2RlKGUsdD1idCgpLldyaXRlci5jcmVhdGUoKSl7XCJcIiE9PWUuaWQmJnQudWludDMyKDEwKS5zdHJpbmcoZS5pZCksXCJcIiE9PWUubmFtZSYmdC51aW50MzIoMTgpLnN0cmluZyhlLm5hbWUpLE9iamVjdC5lbnRyaWVzKGUudmVuZG9yRGF0YSkuZm9yRWFjaCgoKFtlLG5dKT0+e0J0LmVuY29kZSh7a2V5OmUsdmFsdWU6bn0sdC51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCl9KSksdm9pZCAwIT09ZS5jb250ZW50JiZWdC5lbmNvZGUoZS5jb250ZW50LHQudWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpLCEwPT09ZS5pc1RoaXJkUGFydHkmJnQudWludDMyKDQwKS5ib29sKGUuaXNUaGlyZFBhcnR5KSxlLmNhbWVyYUZhY2luZ1ByZWZlcmVuY2UhPT13dC5DQU1FUkFfRkFDSU5HX1VOU0VUJiZ0LnVpbnQzMig0OCkuaW50MzIoZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2Ugd3QuQ0FNRVJBX0ZBQ0lOR19VTlNFVDpyZXR1cm4gMDtjYXNlIHd0LkNBTUVSQV9GQUNJTkdfRlJPTlQ6cmV0dXJuIDE7Y2FzZSB3dC5DQU1FUkFfRkFDSU5HX0JBQ0s6cmV0dXJuIDI7ZGVmYXVsdDpyZXR1cm4gMH19KGUuY2FtZXJhRmFjaW5nUHJlZmVyZW5jZSkpO2Zvcihjb25zdCBuIG9mIGUuZmVhdHVyZU1ldGFkYXRhKUN0LmVuY29kZShuLHQudWludDMyKDU4KS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiB0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBidCgpLlJlYWRlcj9lOm5ldyhidCgpLlJlYWRlcikoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9eHQoKTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5pZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLm5hbWU9bi5zdHJpbmcoKTticmVhaztjYXNlIDM6Y29uc3QgdD1CdC5kZWNvZGUobixuLnVpbnQzMigpKTt2b2lkIDAhPT10LnZhbHVlJiYoaS52ZW5kb3JEYXRhW3Qua2V5XT10LnZhbHVlKTticmVhaztjYXNlIDQ6aS5jb250ZW50PVZ0LmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgNTppLmlzVGhpcmRQYXJ0eT1uLmJvb2woKTticmVhaztjYXNlIDY6aS5jYW1lcmFGYWNpbmdQcmVmZXJlbmNlPU10KG4uaW50MzIoKSk7YnJlYWs7Y2FzZSA3OmkuZmVhdHVyZU1ldGFkYXRhLnB1c2goQ3QuZGVjb2RlKG4sbi51aW50MzIoKSkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbUpTT046ZT0+KHtpZDp6dChlLmlkKT9TdHJpbmcoZS5pZCk6XCJcIixuYW1lOnp0KGUubmFtZSk/U3RyaW5nKGUubmFtZSk6XCJcIix2ZW5kb3JEYXRhOlp0KGUudmVuZG9yRGF0YSk/T2JqZWN0LmVudHJpZXMoZS52ZW5kb3JEYXRhKS5yZWR1Y2UoKChlLFt0LG5dKT0+KGVbdF09U3RyaW5nKG4pLGUpKSx7fSk6e30sY29udGVudDp6dChlLmNvbnRlbnQpP1Z0LmZyb21KU09OKGUuY29udGVudCk6dm9pZCAwLGlzVGhpcmRQYXJ0eTohIXp0KGUuaXNUaGlyZFBhcnR5KSYmQm9vbGVhbihlLmlzVGhpcmRQYXJ0eSksY2FtZXJhRmFjaW5nUHJlZmVyZW5jZTp6dChlLmNhbWVyYUZhY2luZ1ByZWZlcmVuY2UpP010KGUuY2FtZXJhRmFjaW5nUHJlZmVyZW5jZSk6d3QuQ0FNRVJBX0ZBQ0lOR19VTlNFVCxmZWF0dXJlTWV0YWRhdGE6QXJyYXkuaXNBcnJheShudWxsPT1lP3ZvaWQgMDplLmZlYXR1cmVNZXRhZGF0YSk/ZS5mZWF0dXJlTWV0YWRhdGEubWFwKChlPT5DdC5mcm9tSlNPTihlKSkpOltdfSksdG9KU09OKGUpe2NvbnN0IHQ9e307cmV0dXJuIHZvaWQgMCE9PWUuaWQmJih0LmlkPWUuaWQpLHZvaWQgMCE9PWUubmFtZSYmKHQubmFtZT1lLm5hbWUpLHQudmVuZG9yRGF0YT17fSxlLnZlbmRvckRhdGEmJk9iamVjdC5lbnRyaWVzKGUudmVuZG9yRGF0YSkuZm9yRWFjaCgoKFtlLG5dKT0+e3QudmVuZG9yRGF0YVtlXT1ufSkpLHZvaWQgMCE9PWUuY29udGVudCYmKHQuY29udGVudD1lLmNvbnRlbnQ/VnQudG9KU09OKGUuY29udGVudCk6dm9pZCAwKSx2b2lkIDAhPT1lLmlzVGhpcmRQYXJ0eSYmKHQuaXNUaGlyZFBhcnR5PWUuaXNUaGlyZFBhcnR5KSx2b2lkIDAhPT1lLmNhbWVyYUZhY2luZ1ByZWZlcmVuY2UmJih0LmNhbWVyYUZhY2luZ1ByZWZlcmVuY2U9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2Ugd3QuQ0FNRVJBX0ZBQ0lOR19VTlNFVDpyZXR1cm5cIkNBTUVSQV9GQUNJTkdfVU5TRVRcIjtjYXNlIHd0LkNBTUVSQV9GQUNJTkdfRlJPTlQ6cmV0dXJuXCJDQU1FUkFfRkFDSU5HX0ZST05UXCI7Y2FzZSB3dC5DQU1FUkFfRkFDSU5HX0JBQ0s6cmV0dXJuXCJDQU1FUkFfRkFDSU5HX0JBQ0tcIjtkZWZhdWx0OnJldHVyblwiVU5LTk9XTlwifX0oZS5jYW1lcmFGYWNpbmdQcmVmZXJlbmNlKSksZS5mZWF0dXJlTWV0YWRhdGE/dC5mZWF0dXJlTWV0YWRhdGE9ZS5mZWF0dXJlTWV0YWRhdGEubWFwKChlPT5lP0N0LnRvSlNPTihlKTp2b2lkIDApKTp0LmZlYXR1cmVNZXRhZGF0YT1bXSx0fSxmcm9tUGFydGlhbChlKXt2YXIgdCxuLHIsaSxvLGE7Y29uc3Qgcz14dCgpO3JldHVybiBzLmlkPW51bGwhPT0odD1lLmlkKSYmdm9pZCAwIT09dD90OlwiXCIscy5uYW1lPW51bGwhPT0obj1lLm5hbWUpJiZ2b2lkIDAhPT1uP246XCJcIixzLnZlbmRvckRhdGE9T2JqZWN0LmVudHJpZXMobnVsbCE9PShyPWUudmVuZG9yRGF0YSkmJnZvaWQgMCE9PXI/cjp7fSkucmVkdWNlKCgoZSxbdCxuXSk9Pih2b2lkIDAhPT1uJiYoZVt0XT1TdHJpbmcobikpLGUpKSx7fSkscy5jb250ZW50PXZvaWQgMCE9PWUuY29udGVudCYmbnVsbCE9PWUuY29udGVudD9WdC5mcm9tUGFydGlhbChlLmNvbnRlbnQpOnZvaWQgMCxzLmlzVGhpcmRQYXJ0eT1udWxsIT09KGk9ZS5pc1RoaXJkUGFydHkpJiZ2b2lkIDAhPT1pJiZpLHMuY2FtZXJhRmFjaW5nUHJlZmVyZW5jZT1udWxsIT09KG89ZS5jYW1lcmFGYWNpbmdQcmVmZXJlbmNlKSYmdm9pZCAwIT09bz9vOnd0LkNBTUVSQV9GQUNJTkdfVU5TRVQscy5mZWF0dXJlTWV0YWRhdGE9KG51bGw9PT0oYT1lLmZlYXR1cmVNZXRhZGF0YSl8fHZvaWQgMD09PWE/dm9pZCAwOmEubWFwKChlPT5DdC5mcm9tUGFydGlhbChlKSkpKXx8W10sc319LEJ0PXtlbmNvZGU6KGUsdD1idCgpLldyaXRlci5jcmVhdGUoKSk9PihcIlwiIT09ZS5rZXkmJnQudWludDMyKDEwKS5zdHJpbmcoZS5rZXkpLFwiXCIhPT1lLnZhbHVlJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUudmFsdWUpLHQpLGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGJ0KCkuUmVhZGVyP2U6bmV3KGJ0KCkuUmVhZGVyKShlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17a2V5OlwiXCIsdmFsdWU6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkua2V5PW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkudmFsdWU9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21KU09OOmU9Pih7a2V5Onp0KGUua2V5KT9TdHJpbmcoZS5rZXkpOlwiXCIsdmFsdWU6enQoZS52YWx1ZSk/U3RyaW5nKGUudmFsdWUpOlwiXCJ9KSx0b0pTT04oZSl7Y29uc3QgdD17fTtyZXR1cm4gdm9pZCAwIT09ZS5rZXkmJih0LmtleT1lLmtleSksdm9pZCAwIT09ZS52YWx1ZSYmKHQudmFsdWU9ZS52YWx1ZSksdH0sZnJvbVBhcnRpYWwoZSl7dmFyIHQsbjtjb25zdCByPXtrZXk6XCJcIix2YWx1ZTpcIlwifTtyZXR1cm4gci5rZXk9bnVsbCE9PSh0PWUua2V5KSYmdm9pZCAwIT09dD90OlwiXCIsci52YWx1ZT1udWxsIT09KG49ZS52YWx1ZSkmJnZvaWQgMCE9PW4/bjpcIlwiLHJ9fSxWdD17ZW5jb2RlKGUsdD1idCgpLldyaXRlci5jcmVhdGUoKSl7XCJcIiE9PWUubG5zVXJsJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUubG5zVXJsKSxcIlwiIT09ZS5sbnNTaGEyNTYmJnQudWludDMyKDE4KS5zdHJpbmcoZS5sbnNTaGEyNTYpLFwiXCIhPT1lLmljb25VcmwmJnQudWludDMyKDI2KS5zdHJpbmcoZS5pY29uVXJsKSx2b2lkIDAhPT1lLnByZXZpZXcmJmp0LmVuY29kZShlLnByZXZpZXcsdC51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCk7Zm9yKGNvbnN0IG4gb2YgZS5hc3NldE1hbmlmZXN0KVd0LmVuY29kZShuLHQudWludDMyKDQyKS5mb3JrKCkpLmxkZWxpbSgpO3JldHVyblwiXCIhPT1lLmRlZmF1bHRIaW50SWQmJnQudWludDMyKDUwKS5zdHJpbmcoZS5kZWZhdWx0SGludElkKSxPYmplY3QuZW50cmllcyhlLmhpbnRUcmFuc2xhdGlvbnMpLmZvckVhY2goKChbZSxuXSk9PntHdC5lbmNvZGUoe2tleTplLHZhbHVlOm59LHQudWludDMyKDU4KS5mb3JrKCkpLmxkZWxpbSgpfSkpLFwiXCIhPT1lLmxuc1VybEJvbHQmJnQudWludDMyKDY2KS5zdHJpbmcoZS5sbnNVcmxCb2x0KSxcIlwiIT09ZS5pY29uVXJsQm9sdCYmdC51aW50MzIoNzQpLnN0cmluZyhlLmljb25VcmxCb2x0KSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBidCgpLlJlYWRlcj9lOm5ldyhidCgpLlJlYWRlcikoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2xuc1VybDpcIlwiLGxuc1NoYTI1NjpcIlwiLGljb25Vcmw6XCJcIixwcmV2aWV3OnZvaWQgMCxhc3NldE1hbmlmZXN0OltdLGRlZmF1bHRIaW50SWQ6XCJcIixoaW50VHJhbnNsYXRpb25zOnt9LGxuc1VybEJvbHQ6XCJcIixpY29uVXJsQm9sdDpcIlwifTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5sbnNVcmw9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS5sbnNTaGEyNTY9bi5zdHJpbmcoKTticmVhaztjYXNlIDM6aS5pY29uVXJsPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA0OmkucHJldmlldz1qdC5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDU6aS5hc3NldE1hbmlmZXN0LnB1c2goV3QuZGVjb2RlKG4sbi51aW50MzIoKSkpO2JyZWFrO2Nhc2UgNjppLmRlZmF1bHRIaW50SWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDc6Y29uc3QgdD1HdC5kZWNvZGUobixuLnVpbnQzMigpKTt2b2lkIDAhPT10LnZhbHVlJiYoaS5oaW50VHJhbnNsYXRpb25zW3Qua2V5XT10LnZhbHVlKTticmVhaztjYXNlIDg6aS5sbnNVcmxCb2x0PW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA5OmkuaWNvblVybEJvbHQ9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21KU09OOmU9Pih7bG5zVXJsOnp0KGUubG5zVXJsKT9TdHJpbmcoZS5sbnNVcmwpOlwiXCIsbG5zU2hhMjU2Onp0KGUubG5zU2hhMjU2KT9TdHJpbmcoZS5sbnNTaGEyNTYpOlwiXCIsaWNvblVybDp6dChlLmljb25VcmwpP1N0cmluZyhlLmljb25VcmwpOlwiXCIscHJldmlldzp6dChlLnByZXZpZXcpP2p0LmZyb21KU09OKGUucHJldmlldyk6dm9pZCAwLGFzc2V0TWFuaWZlc3Q6QXJyYXkuaXNBcnJheShudWxsPT1lP3ZvaWQgMDplLmFzc2V0TWFuaWZlc3QpP2UuYXNzZXRNYW5pZmVzdC5tYXAoKGU9Pld0LmZyb21KU09OKGUpKSk6W10sZGVmYXVsdEhpbnRJZDp6dChlLmRlZmF1bHRIaW50SWQpP1N0cmluZyhlLmRlZmF1bHRIaW50SWQpOlwiXCIsaGludFRyYW5zbGF0aW9uczpadChlLmhpbnRUcmFuc2xhdGlvbnMpP09iamVjdC5lbnRyaWVzKGUuaGludFRyYW5zbGF0aW9ucykucmVkdWNlKCgoZSxbdCxuXSk9PihlW3RdPVN0cmluZyhuKSxlKSkse30pOnt9LGxuc1VybEJvbHQ6enQoZS5sbnNVcmxCb2x0KT9TdHJpbmcoZS5sbnNVcmxCb2x0KTpcIlwiLGljb25VcmxCb2x0Onp0KGUuaWNvblVybEJvbHQpP1N0cmluZyhlLmljb25VcmxCb2x0KTpcIlwifSksdG9KU09OKGUpe2NvbnN0IHQ9e307cmV0dXJuIHZvaWQgMCE9PWUubG5zVXJsJiYodC5sbnNVcmw9ZS5sbnNVcmwpLHZvaWQgMCE9PWUubG5zU2hhMjU2JiYodC5sbnNTaGEyNTY9ZS5sbnNTaGEyNTYpLHZvaWQgMCE9PWUuaWNvblVybCYmKHQuaWNvblVybD1lLmljb25VcmwpLHZvaWQgMCE9PWUucHJldmlldyYmKHQucHJldmlldz1lLnByZXZpZXc/anQudG9KU09OKGUucHJldmlldyk6dm9pZCAwKSxlLmFzc2V0TWFuaWZlc3Q/dC5hc3NldE1hbmlmZXN0PWUuYXNzZXRNYW5pZmVzdC5tYXAoKGU9PmU/V3QudG9KU09OKGUpOnZvaWQgMCkpOnQuYXNzZXRNYW5pZmVzdD1bXSx2b2lkIDAhPT1lLmRlZmF1bHRIaW50SWQmJih0LmRlZmF1bHRIaW50SWQ9ZS5kZWZhdWx0SGludElkKSx0LmhpbnRUcmFuc2xhdGlvbnM9e30sZS5oaW50VHJhbnNsYXRpb25zJiZPYmplY3QuZW50cmllcyhlLmhpbnRUcmFuc2xhdGlvbnMpLmZvckVhY2goKChbZSxuXSk9Pnt0LmhpbnRUcmFuc2xhdGlvbnNbZV09bn0pKSx2b2lkIDAhPT1lLmxuc1VybEJvbHQmJih0Lmxuc1VybEJvbHQ9ZS5sbnNVcmxCb2x0KSx2b2lkIDAhPT1lLmljb25VcmxCb2x0JiYodC5pY29uVXJsQm9sdD1lLmljb25VcmxCb2x0KSx0fSxmcm9tUGFydGlhbChlKXt2YXIgdCxuLHIsaSxvLGEscyxjO2NvbnN0IGw9e2xuc1VybDpcIlwiLGxuc1NoYTI1NjpcIlwiLGljb25Vcmw6XCJcIixwcmV2aWV3OnZvaWQgMCxhc3NldE1hbmlmZXN0OltdLGRlZmF1bHRIaW50SWQ6XCJcIixoaW50VHJhbnNsYXRpb25zOnt9LGxuc1VybEJvbHQ6XCJcIixpY29uVXJsQm9sdDpcIlwifTtyZXR1cm4gbC5sbnNVcmw9bnVsbCE9PSh0PWUubG5zVXJsKSYmdm9pZCAwIT09dD90OlwiXCIsbC5sbnNTaGEyNTY9bnVsbCE9PShuPWUubG5zU2hhMjU2KSYmdm9pZCAwIT09bj9uOlwiXCIsbC5pY29uVXJsPW51bGwhPT0ocj1lLmljb25VcmwpJiZ2b2lkIDAhPT1yP3I6XCJcIixsLnByZXZpZXc9dm9pZCAwIT09ZS5wcmV2aWV3JiZudWxsIT09ZS5wcmV2aWV3P2p0LmZyb21QYXJ0aWFsKGUucHJldmlldyk6dm9pZCAwLGwuYXNzZXRNYW5pZmVzdD0obnVsbD09PShpPWUuYXNzZXRNYW5pZmVzdCl8fHZvaWQgMD09PWk/dm9pZCAwOmkubWFwKChlPT5XdC5mcm9tUGFydGlhbChlKSkpKXx8W10sbC5kZWZhdWx0SGludElkPW51bGwhPT0obz1lLmRlZmF1bHRIaW50SWQpJiZ2b2lkIDAhPT1vP286XCJcIixsLmhpbnRUcmFuc2xhdGlvbnM9T2JqZWN0LmVudHJpZXMobnVsbCE9PShhPWUuaGludFRyYW5zbGF0aW9ucykmJnZvaWQgMCE9PWE/YTp7fSkucmVkdWNlKCgoZSxbdCxuXSk9Pih2b2lkIDAhPT1uJiYoZVt0XT1TdHJpbmcobikpLGUpKSx7fSksbC5sbnNVcmxCb2x0PW51bGwhPT0ocz1lLmxuc1VybEJvbHQpJiZ2b2lkIDAhPT1zP3M6XCJcIixsLmljb25VcmxCb2x0PW51bGwhPT0oYz1lLmljb25VcmxCb2x0KSYmdm9pZCAwIT09Yz9jOlwiXCIsbH19LEd0PXtlbmNvZGU6KGUsdD1idCgpLldyaXRlci5jcmVhdGUoKSk9PihcIlwiIT09ZS5rZXkmJnQudWludDMyKDEwKS5zdHJpbmcoZS5rZXkpLFwiXCIhPT1lLnZhbHVlJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUudmFsdWUpLHQpLGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGJ0KCkuUmVhZGVyP2U6bmV3KGJ0KCkuUmVhZGVyKShlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17a2V5OlwiXCIsdmFsdWU6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkua2V5PW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkudmFsdWU9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21KU09OOmU9Pih7a2V5Onp0KGUua2V5KT9TdHJpbmcoZS5rZXkpOlwiXCIsdmFsdWU6enQoZS52YWx1ZSk/U3RyaW5nKGUudmFsdWUpOlwiXCJ9KSx0b0pTT04oZSl7Y29uc3QgdD17fTtyZXR1cm4gdm9pZCAwIT09ZS5rZXkmJih0LmtleT1lLmtleSksdm9pZCAwIT09ZS52YWx1ZSYmKHQudmFsdWU9ZS52YWx1ZSksdH0sZnJvbVBhcnRpYWwoZSl7dmFyIHQsbjtjb25zdCByPXtrZXk6XCJcIix2YWx1ZTpcIlwifTtyZXR1cm4gci5rZXk9bnVsbCE9PSh0PWUua2V5KSYmdm9pZCAwIT09dD90OlwiXCIsci52YWx1ZT1udWxsIT09KG49ZS52YWx1ZSkmJnZvaWQgMCE9PW4/bjpcIlwiLHJ9fTtmdW5jdGlvbiBIdCgpe3JldHVybnt0eXBlOkR0LkRFVklDRV9ERVBFTkRFTlRfQVNTRVRfVU5TRVQsaWQ6XCJcIixyZXF1ZXN0VGltaW5nOlB0LlBSRUxPQURfVU5TRVQsYXNzZXRVcmw6XCJcIixhc3NldENoZWNrc3VtOlwiXCJ9fWNvbnN0IFd0PXtlbmNvZGU6KGUsdD1idCgpLldyaXRlci5jcmVhdGUoKSk9PihlLnR5cGUhPT1EdC5ERVZJQ0VfREVQRU5ERU5UX0FTU0VUX1VOU0VUJiZ0LnVpbnQzMig4KS5pbnQzMihmdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSBEdC5ERVZJQ0VfREVQRU5ERU5UX0FTU0VUX1VOU0VUOnJldHVybiAwO2Nhc2UgRHQuQVNTRVQ6cmV0dXJuIDE7ZGVmYXVsdDpyZXR1cm4gMH19KGUudHlwZSkpLFwiXCIhPT1lLmlkJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuaWQpLGUucmVxdWVzdFRpbWluZyE9PVB0LlBSRUxPQURfVU5TRVQmJnQudWludDMyKDI0KS5pbnQzMihmdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSBQdC5QUkVMT0FEX1VOU0VUOnJldHVybiAwO2Nhc2UgUHQuT05fREVNQU5EOnJldHVybiAxO2Nhc2UgUHQuUkVRVUlSRUQ6cmV0dXJuIDI7ZGVmYXVsdDpyZXR1cm4gMH19KGUucmVxdWVzdFRpbWluZykpLFwiXCIhPT1lLmFzc2V0VXJsJiZ0LnVpbnQzMigzNCkuc3RyaW5nKGUuYXNzZXRVcmwpLFwiXCIhPT1lLmFzc2V0Q2hlY2tzdW0mJnQudWludDMyKDQyKS5zdHJpbmcoZS5hc3NldENoZWNrc3VtKSx0KSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBidCgpLlJlYWRlcj9lOm5ldyhidCgpLlJlYWRlcikoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9SHQoKTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS50eXBlPUx0KG4uaW50MzIoKSk7YnJlYWs7Y2FzZSAyOmkuaWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDM6aS5yZXF1ZXN0VGltaW5nPVV0KG4uaW50MzIoKSk7YnJlYWs7Y2FzZSA0OmkuYXNzZXRVcmw9bi5zdHJpbmcoKTticmVhaztjYXNlIDU6aS5hc3NldENoZWNrc3VtPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tSlNPTjplPT4oe3R5cGU6enQoZS50eXBlKT9MdChlLnR5cGUpOkR0LkRFVklDRV9ERVBFTkRFTlRfQVNTRVRfVU5TRVQsaWQ6enQoZS5pZCk/U3RyaW5nKGUuaWQpOlwiXCIscmVxdWVzdFRpbWluZzp6dChlLnJlcXVlc3RUaW1pbmcpP1V0KGUucmVxdWVzdFRpbWluZyk6UHQuUFJFTE9BRF9VTlNFVCxhc3NldFVybDp6dChlLmFzc2V0VXJsKT9TdHJpbmcoZS5hc3NldFVybCk6XCJcIixhc3NldENoZWNrc3VtOnp0KGUuYXNzZXRDaGVja3N1bSk/U3RyaW5nKGUuYXNzZXRDaGVja3N1bSk6XCJcIn0pLHRvSlNPTihlKXtjb25zdCB0PXt9O3JldHVybiB2b2lkIDAhPT1lLnR5cGUmJih0LnR5cGU9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgRHQuREVWSUNFX0RFUEVOREVOVF9BU1NFVF9VTlNFVDpyZXR1cm5cIkRFVklDRV9ERVBFTkRFTlRfQVNTRVRfVU5TRVRcIjtjYXNlIER0LkFTU0VUOnJldHVyblwiQVNTRVRcIjtkZWZhdWx0OnJldHVyblwiVU5LTk9XTlwifX0oZS50eXBlKSksdm9pZCAwIT09ZS5pZCYmKHQuaWQ9ZS5pZCksdm9pZCAwIT09ZS5yZXF1ZXN0VGltaW5nJiYodC5yZXF1ZXN0VGltaW5nPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIFB0LlBSRUxPQURfVU5TRVQ6cmV0dXJuXCJQUkVMT0FEX1VOU0VUXCI7Y2FzZSBQdC5PTl9ERU1BTkQ6cmV0dXJuXCJPTl9ERU1BTkRcIjtjYXNlIFB0LlJFUVVJUkVEOnJldHVyblwiUkVRVUlSRURcIjtkZWZhdWx0OnJldHVyblwiVU5LTk9XTlwifX0oZS5yZXF1ZXN0VGltaW5nKSksdm9pZCAwIT09ZS5hc3NldFVybCYmKHQuYXNzZXRVcmw9ZS5hc3NldFVybCksdm9pZCAwIT09ZS5hc3NldENoZWNrc3VtJiYodC5hc3NldENoZWNrc3VtPWUuYXNzZXRDaGVja3N1bSksdH0sZnJvbVBhcnRpYWwoZSl7dmFyIHQsbixyLGksbztjb25zdCBhPUh0KCk7cmV0dXJuIGEudHlwZT1udWxsIT09KHQ9ZS50eXBlKSYmdm9pZCAwIT09dD90OkR0LkRFVklDRV9ERVBFTkRFTlRfQVNTRVRfVU5TRVQsYS5pZD1udWxsIT09KG49ZS5pZCkmJnZvaWQgMCE9PW4/bjpcIlwiLGEucmVxdWVzdFRpbWluZz1udWxsIT09KHI9ZS5yZXF1ZXN0VGltaW5nKSYmdm9pZCAwIT09cj9yOlB0LlBSRUxPQURfVU5TRVQsYS5hc3NldFVybD1udWxsIT09KGk9ZS5hc3NldFVybCkmJnZvaWQgMCE9PWk/aTpcIlwiLGEuYXNzZXRDaGVja3N1bT1udWxsIT09KG89ZS5hc3NldENoZWNrc3VtKSYmdm9pZCAwIT09bz9vOlwiXCIsYX19LGp0PXtlbmNvZGU6KGUsdD1idCgpLldyaXRlci5jcmVhdGUoKSk9PihcIlwiIT09ZS5pbWFnZVVybCYmdC51aW50MzIoMTApLnN0cmluZyhlLmltYWdlVXJsKSx0KSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBidCgpLlJlYWRlcj9lOm5ldyhidCgpLlJlYWRlcikoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2ltYWdlVXJsOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLmltYWdlVXJsPW4uc3RyaW5nKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tSlNPTjplPT4oe2ltYWdlVXJsOnp0KGUuaW1hZ2VVcmwpP1N0cmluZyhlLmltYWdlVXJsKTpcIlwifSksdG9KU09OKGUpe2NvbnN0IHQ9e307cmV0dXJuIHZvaWQgMCE9PWUuaW1hZ2VVcmwmJih0LmltYWdlVXJsPWUuaW1hZ2VVcmwpLHR9LGZyb21QYXJ0aWFsKGUpe3ZhciB0O2NvbnN0IG49e2ltYWdlVXJsOlwiXCJ9O3JldHVybiBuLmltYWdlVXJsPW51bGwhPT0odD1lLmltYWdlVXJsKSYmdm9pZCAwIT09dD90OlwiXCIsbn19O2Z1bmN0aW9uIFp0KGUpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiBlJiZudWxsIT09ZX1mdW5jdGlvbiB6dChlKXtyZXR1cm4gbnVsbCE9ZX12YXIgS3QsWXQ7YnQoKS51dGlsLkxvbmchPT1JdCgpJiYoYnQoKS51dGlsLkxvbmc9SXQoKSxidCgpLmNvbmZpZ3VyZSgpKSxmdW5jdGlvbihlKXtlLlVOU0VUPVwiVU5TRVRcIixlLlNIT1BfS0lUPVwiU0hPUF9LSVRcIixlLlVOUkVDT0dOSVpFRD1cIlVOUkVDT0dOSVpFRFwifShLdHx8KEt0PXt9KSksZnVuY3Rpb24oZSl7ZS5VTlNFVD1cIlVOU0VUXCIsZS5VTktOT1dOPVwiVU5LTk9XTlwiLGUuTk9UX0ZPVU5EPVwiTk9UX0ZPVU5EXCIsZS5JTkNPTVBBVElCTEVfTEVOU19DT1JFX1ZFUlNJT049XCJJTkNPTVBBVElCTEVfTEVOU19DT1JFX1ZFUlNJT05cIixlLkFSQ0hJVkVEX09SX0lOVklTSUJMRT1cIkFSQ0hJVkVEX09SX0lOVklTSUJMRVwiLGUuQ09OVEFJTlNfTVVTSUM9XCJDT05UQUlOU19NVVNJQ1wiLGUuVU5SRUNPR05JWkVEPVwiVU5SRUNPR05JWkVEXCJ9KFl0fHwoWXQ9e30pKTtjb25zdCBxdD17ZW5jb2RlOihlLHQ9YnQoKS5Xcml0ZXIuY3JlYXRlKCkpPT4oXCJcIiE9PWUudXNlckFnZW50JiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUudXNlckFnZW50KSxcIlwiIT09ZS5sb2NhbGUmJnQudWludDMyKDE4KS5zdHJpbmcoZS5sb2NhbGUpLHQpLGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGJ0KCkuUmVhZGVyP2U6bmV3KGJ0KCkuUmVhZGVyKShlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17dXNlckFnZW50OlwiXCIsbG9jYWxlOlwiXCJ9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnVzZXJBZ2VudD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLmxvY2FsZT1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbUpTT046ZT0+KHt1c2VyQWdlbnQ6SnQoZS51c2VyQWdlbnQpP1N0cmluZyhlLnVzZXJBZ2VudCk6XCJcIixsb2NhbGU6SnQoZS5sb2NhbGUpP1N0cmluZyhlLmxvY2FsZSk6XCJcIn0pLHRvSlNPTihlKXtjb25zdCB0PXt9O3JldHVybiB2b2lkIDAhPT1lLnVzZXJBZ2VudCYmKHQudXNlckFnZW50PWUudXNlckFnZW50KSx2b2lkIDAhPT1lLmxvY2FsZSYmKHQubG9jYWxlPWUubG9jYWxlKSx0fSxmcm9tUGFydGlhbChlKXt2YXIgdCxuO2NvbnN0IHI9e3VzZXJBZ2VudDpcIlwiLGxvY2FsZTpcIlwifTtyZXR1cm4gci51c2VyQWdlbnQ9bnVsbCE9PSh0PWUudXNlckFnZW50KSYmdm9pZCAwIT09dD90OlwiXCIsci5sb2NhbGU9bnVsbCE9PShuPWUubG9jYWxlKSYmdm9pZCAwIT09bj9uOlwiXCIscn19LFh0PXtlbmNvZGUoZSx0PWJ0KCkuV3JpdGVyLmNyZWF0ZSgpKXtmb3IoY29uc3QgbiBvZiBlLmxlbnNlcylGdC5lbmNvZGUobix0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtyZXR1cm4gdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYnQoKS5SZWFkZXI/ZTpuZXcoYnQoKS5SZWFkZXIpKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtsZW5zZXM6W119O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLmxlbnNlcy5wdXNoKEZ0LmRlY29kZShuLG4udWludDMyKCkpKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGl9LGZyb21KU09OOmU9Pih7bGVuc2VzOkFycmF5LmlzQXJyYXkobnVsbD09ZT92b2lkIDA6ZS5sZW5zZXMpP2UubGVuc2VzLm1hcCgoZT0+RnQuZnJvbUpTT04oZSkpKTpbXX0pLHRvSlNPTihlKXtjb25zdCB0PXt9O3JldHVybiBlLmxlbnNlcz90LmxlbnNlcz1lLmxlbnNlcy5tYXAoKGU9PmU/RnQudG9KU09OKGUpOnZvaWQgMCkpOnQubGVuc2VzPVtdLHR9LGZyb21QYXJ0aWFsKGUpe3ZhciB0O2NvbnN0IG49e2xlbnNlczpbXX07cmV0dXJuIG4ubGVuc2VzPShudWxsPT09KHQ9ZS5sZW5zZXMpfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lm1hcCgoZT0+RnQuZnJvbVBhcnRpYWwoZSkpKSl8fFtdLG59fTt2YXIgUXQ9KCgpPT57aWYodm9pZCAwIT09UXQpcmV0dXJuIFF0O2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmKXJldHVybiBzZWxmO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvdztpZih2b2lkIDAhPT1uLmcpcmV0dXJuIG4uZzt0aHJvd1wiVW5hYmxlIHRvIGxvY2F0ZSBnbG9iYWwgb2JqZWN0XCJ9KSgpO2Z1bmN0aW9uIEp0KGUpe3JldHVybiBudWxsIT1lfWZ1bmN0aW9uICR0KGUpe3RyeXtyZXR1cm4gWHQuZGVjb2RlKG5ldyBVaW50OEFycmF5KGUpKS5sZW5zZXN9Y2F0Y2goZSl7dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBsZW5zIGVudmVsb3BlXCIpfX1mdW5jdGlvbiBlbihlKXtyZXR1cm4gZS5yZWR1Y2UoKChlLHQpPT5bLi4uZSwuLi4kdCh0KV0pLFtdKX1RdC5hdG9iLFF0LmJ0b2EsYnQoKS51dGlsLkxvbmchPT1JdCgpJiYoYnQoKS51dGlsLkxvbmc9SXQoKSxidCgpLmNvbmZpZ3VyZSgpKTt2YXIgdG49ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbz1hcmd1bWVudHMubGVuZ3RoLGE9bzwzP3Q6bnVsbD09PXI/cj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik6cjtpZihcIm9iamVjdFwiPT10eXBlb2YgUmVmbGVjdCYmXCJmdW5jdGlvblwiPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSlhPVJlZmxlY3QuZGVjb3JhdGUoZSx0LG4scik7ZWxzZSBmb3IodmFyIHM9ZS5sZW5ndGgtMTtzPj0wO3MtLSkoaT1lW3NdKSYmKGE9KG88Mz9pKGEpOm8+Mz9pKHQsbixhKTppKHQsbikpfHxhKTtyZXR1cm4gbz4zJiZhJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLGEpLGF9LG5uPWZ1bmN0aW9uKGUsdCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIFJlZmxlY3QmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFJlZmxlY3QubWV0YWRhdGEpcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoZSx0KX0scm49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXt0KG4scixlKX19LG9uPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIGEoZSl7dHJ5e2Moci5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBzKGUpe3RyeXtjKHIudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGMoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKGEscyl9Yygocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfTtjbGFzcyBhbntjb25zdHJ1Y3RvcihlLHQpe3RoaXMuaHR0cENsaWVudD1lLHRoaXMubGVuc1NvdXJjZXM9dCx0aGlzLmxlbnNDYWNoZT1uZXcgTWFwfWxvYWRMZW5zKGUsdCl7cmV0dXJuIG9uKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgbj15aWVsZCB0aGlzLmxlbnNTb3VyY2VzLnJldHJpZXZlTGVuc2VzKHtsZW5zSWQ6ZSxncm91cElkOnR9KTtsZXQgcjtpZihuKXtpZihyPWVuKG4pWzBdLCFyKXRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIG5vbi1lbXB0eSBlbnZlbG9wZVwiKX1lbHNlIHI9eWllbGQgZnVuY3Rpb24oZSx0LG4pe3JldHVybiBndCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHI9W3l0LFwiZ3JvdXBzXCIsbixcImxlbnNlc1wiLHRdLmpvaW4oXCIvXCIpLGk9eWllbGQgZShyLHtjcmVkZW50aWFsczpcImluY2x1ZGVcIn0pLG89eWllbGQgaS5qc29uKCksYT1vLmxlbnM7aWYoIWh0KGEpKXRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgcmVxdWVzdCB0byAke3J9IHRvIHJldHVybiBhIExlbnMuIEdvdDpcXG5cXG4ke0pTT04uc3RyaW5naWZ5KG8pfSB3aXRoIHJlcXVlc3QtaWQgb2YgXCIke0V0KGkpfVwiYCk7cmV0dXJuIGF9KSl9KHRoaXMuaHR0cENsaWVudCxlLHQpO3JldHVybiB0aGlzLmxlbnNDYWNoZS5zZXQoci5pZCxyKSx2dChyKX0pKX1sb2FkTGVuc0dyb3VwcyhlKXtyZXR1cm4gb24odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIFByb21pc2UuYWxsKGUubWFwKChlPT5vbih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RyeXtjb25zdCB0PXlpZWxkIHRoaXMubGVuc1NvdXJjZXMucmV0cmlldmVMZW5zZXMoe2dyb3VwSWQ6ZX0pLG49dD9lbih0KTp5aWVsZCBmdW5jdGlvbihlLHQpe3JldHVybiBndCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IG49W3l0LFwiZ3JvdXBzXCIsdF0uam9pbihcIi9cIikscj15aWVsZCBlKG4se2NyZWRlbnRpYWxzOlwiaW5jbHVkZVwifSksaT15aWVsZCByLmpzb24oKTtpZighKGNlKG89aSkmJnJlKG8uaWQpJiZBcnJheS5pc0FycmF5KG8ubGVuc2VzKSYmby5sZW5zZXMuZXZlcnkoaHQpKSl0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHJlcXVlc3QgdG8gJHtufSB0byByZXR1cm4gYSBMZW5zR3JvdXAuIEdvdDpcXG5cXG4ke0pTT04uc3RyaW5naWZ5KGkpfSB3aXRoIHJlcXVlc3QtaWQgb2YgXCIke0V0KHIpfVwiYCk7dmFyIG87cmV0dXJuIGkubGVuc2VzfSkpfSh0aGlzLmh0dHBDbGllbnQsZSk7cmV0dXJuIG4uZm9yRWFjaCgoZT0+dGhpcy5sZW5zQ2FjaGUuc2V0KGUuaWQsZSkpKSxuLm1hcCh2dCl9Y2F0Y2goZSl7cmV0dXJuIGV9fSkpKSkpLG49W10scj1bXTtyZXR1cm4gdC5mb3JFYWNoKChlPT5BcnJheS5pc0FycmF5KGUpP3IucHVzaCguLi5lKTpuLnB1c2goZSkpKSx7ZXJyb3JzOm4sbGVuc2VzOnJ9fSkpfWdldENhY2hlZExlbnMoZSl7cmV0dXJuIHRoaXMubGVuc0NhY2hlLmdldChlKX19dG4oW250LHJuKDAsdHQoaWUpKSxybigxLHR0KGllKSksbm4oXCJkZXNpZ246dHlwZVwiLEZ1bmN0aW9uKSxubihcImRlc2lnbjpwYXJhbXR5cGVzXCIsW1N0cmluZyxTdHJpbmddKSxubihcImRlc2lnbjpyZXR1cm50eXBlXCIsUHJvbWlzZSldLGFuLnByb3RvdHlwZSxcImxvYWRMZW5zXCIsbnVsbCksdG4oW250LHJuKDAsdHQoKGZ1bmN0aW9uKGUpe3JldHVybiBhZShpZSxlKX0pKSksbm4oXCJkZXNpZ246dHlwZVwiLEZ1bmN0aW9uKSxubihcImRlc2lnbjpwYXJhbXR5cGVzXCIsW0FycmF5XSksbm4oXCJkZXNpZ246cmV0dXJudHlwZVwiLFByb21pc2UpXSxhbi5wcm90b3R5cGUsXCJsb2FkTGVuc0dyb3Vwc1wiLG51bGwpO2NvbnN0IHNuPUooXCJMZW5zUmVwb3NpdG9yeVwiLFt1dC50b2tlbixmdC50b2tlbl0sKChlLHQpPT5uZXcgYW4oZSx0KSkpO2Z1bmN0aW9uIGNuKGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuZGVsZWdhdGV9ZnVuY3Rpb24gbG4oZSl7bGV0IHQ7Y29uc3Qgbj0oLi4ubik9Pih2b2lkIDAhPT10fHwodD1lKC4uLm4pKSx0KTtyZXR1cm4gbi5kZWxlZ2F0ZT1lLG59Y29uc3QgdW49ZT0+T2JqZWN0LmVudHJpZXMoZSk7Y2xhc3MgZG57Y29uc3RydWN0b3IoZSl7dGhpcy5pbmplY3RhYmxlcz1lfXByb3ZpZGVzKGUpe3JldHVybiBuZXcgZG4oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuaW5qZWN0YWJsZXMpLHtbZS50b2tlbl06ZX0pKX1nZXRGYWN0b3JpZXMoZSl7cmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyh1bih0aGlzLmluamVjdGFibGVzKS5tYXAoKChbdCxuXSk9Plt0LGxuKChyPT5uKC4uLm4uZGVwZW5kZW5jaWVzLm1hcCgobj0+bj09PXQ/ZS5nZXQobik6ci5nZXQobikpKSkpKV0pKSl9Z2V0VG9rZW5zKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuaW5qZWN0YWJsZXMpfX1jb25zdCBmbj1cIiRjb250YWluZXJcIjtjbGFzcyBwbntjb25zdHJ1Y3RvcihlKXt0aGlzLmZhY3Rvcmllcz17fTtmb3IoY29uc3QgdCBpbiBlKXtjb25zdCBuPWVbdF07Y24obik/dGhpcy5mYWN0b3JpZXNbdF09bjp0aGlzLmZhY3Rvcmllc1t0XT1sbihuKX19c3RhdGljIHByb3ZpZGVzKGUpe3JldHVybiBuZXcgcG4oe30pLnByb3ZpZGVzKGUpfWNvcHkoZSl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LHRoaXMuZmFjdG9yaWVzKTtyZXR1cm4oZXx8W10pLmZvckVhY2goKGU9Pnt0W2VdPXRoaXMuZmFjdG9yaWVzW2VdLmRlbGVnYXRlfSkpLG5ldyBwbih0KX1nZXQoZSl7aWYoZT09PWZuKXJldHVybiB0aGlzO2NvbnN0IHQ9dGhpcy5mYWN0b3JpZXNbZV07aWYoIXQpdGhyb3cgbmV3IEVycm9yKGBbQ29udGFpbmVyOjpnZXRdIENvdWxkIG5vdCBmaW5kIFNlcnZpY2UgZm9yIFRva2VuIFwiJHtlfVwiLiBUaGlzIHNob3VsZCd2ZSBjYXVzZWQgYSBjb21waWxlLXRpbWUgZXJyb3IuIElmIHRoZSBUb2tlbiBpcyAndW5kZWZpbmVkJywgY2hlY2sgYWxsIHlvdXIgY2FsbHMgdG8gdGhlIEluamVjdGFibGUgZnVuY3Rpb24uIE1ha2Ugc3VyZSB5b3UgZGVmaW5lIGRlcGVuZGVuY2llcyB1c2luZyBzdHJpbmcgbGl0ZXJhbHMgb3Igc3RyaW5nIGNvbnN0YW50cyB0aGF0IGFyZSBkZWZpbml0ZWx5IGluaXRpYWxpemVkIGJlZm9yZSB0aGUgY2FsbCB0byBJbmplY3RhYmxlLmApO3JldHVybiB0KHRoaXMpfXJ1bihlKXtpZihlIGluc3RhbmNlb2YgZG4pe2NvbnN0IHQ9dGhpcy5wcm92aWRlcyhlKTtmb3IoY29uc3QgbiBvZiBlLmdldFRva2VucygpKXQuZ2V0KG4pfWVsc2UgdGhpcy5wcm92aWRlcyhlKS5nZXQoZS50b2tlbik7cmV0dXJuIHRoaXN9cHJvdmlkZXMoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBkbj90aGlzLnByb3ZpZGVzQ29udGFpbmVyKGUpOnRoaXMucHJvdmlkZXNTZXJ2aWNlKGUpfXByb3ZpZGVzQ29udGFpbmVyKGUpe2NvbnN0IHQ9ZS5nZXRGYWN0b3JpZXModGhpcyk7cmV0dXJuIG5ldyBwbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5mYWN0b3JpZXMpLHQpKX1wcm92aWRlc1NlcnZpY2UoZSl7Y29uc3QgdD1lLnRva2VuLG49ZS5kZXBlbmRlbmNpZXMscj1sbigocj0+ZSguLi5uLm1hcCgoZT0+ZT09PXQ/dGhpcy5nZXQoZSk6ci5nZXQoZSkpKSkpKSxpPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLmZhY3Rvcmllcykse1t0XTpyfSk7cmV0dXJuIG5ldyBwbihpKX19Y29uc3QgbW49KCk9PnBlcmZvcm1hbmNlLm5vdygpO2NsYXNzIGhuIGV4dGVuZHMgQ3VzdG9tRXZlbnR7Y29uc3RydWN0b3IoZSx0LG49e30pe3N1cGVyKGUsT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG4pLHtkZXRhaWw6dH0pKX19Y2xhc3Mgdm57Y29uc3RydWN0b3IoKXt0aGlzLmxpc3RlbmVycz1uZXcgTWFwLHRoaXMub3B0aW9ucz1uZXcgTWFwfWFkZEV2ZW50TGlzdGVuZXIoZSx0LG4pe3ZhciByO2NvbnN0IGk9dCxvPW51bGwhPT0ocj10aGlzLmxpc3RlbmVycy5nZXQoZSkpJiZ2b2lkIDAhPT1yP3I6W107dGhpcy5saXN0ZW5lcnMuc2V0KGUsWy4uLm8saV0pLG4mJnRoaXMub3B0aW9ucy5zZXQoaSxuKX1kaXNwYXRjaEV2ZW50KGUpe2NvbnN0IHQ9dGhpcy5saXN0ZW5lcnMuZ2V0KGUudHlwZSk7cmV0dXJuIXR8fCh0LmZvckVhY2goKHQ9Pnt2YXIgbjtjb25zdCByPW51bGwhPT0obj10aGlzLm9wdGlvbnMuZ2V0KHQpKSYmdm9pZCAwIT09bj9uOnt9O3RyeXt0KGUpfWNhdGNoKGUpe3dpbmRvdyYmd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiZXJyb3JcIix7ZGV0YWlsOmV9KSl9ci5vbmNlJiZ0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZS50eXBlLHQpfSkpLCEwKX1yZW1vdmVFdmVudExpc3RlbmVyKGUsdCl7Y29uc3Qgbj10LHI9dGhpcy5saXN0ZW5lcnMuZ2V0KGUpO3ImJih0aGlzLmxpc3RlbmVycy5zZXQoZSxyLmZpbHRlcigoZT0+ZSE9PW4pKSksdGhpcy5vcHRpb25zLmRlbGV0ZShuKSl9fWxldCBnbj0wO2NvbnN0IHluPW5ldyB2bixFbj1lPT57Y29uc3QgdD1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse3JlcXVlc3RJZDpnbisrLHRpbWVNczptbigpfSk7cmV0dXJuIHluLmRpc3BhdGNoRXZlbnQobmV3IGhuKFwic3RhcnRlZFwiLHQpKSx0fSxfbj1lPT57Y29uc3QgdD1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse3RpbWVNczptbigpfSk7cmV0dXJuIHluLmRpc3BhdGNoRXZlbnQobmV3IGhuKFwiY29tcGxldGVkXCIsdCkpLHR9LEluPWU9Pntjb25zdCB0PU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7dGltZU1zOm1uKCl9KTtyZXR1cm4geW4uZGlzcGF0Y2hFdmVudChuZXcgaG4oXCJlcnJvcmVkXCIsdCkpLHR9LFNuPUooXCJMZW5zQ29udGV4dFwiLCgoKT0+KHthY3RpdmVMZW5zOnZvaWQgMH0pKSksYm49SihcInNlc3Npb25FdmVudFRhcmdldFwiLCgoKT0+bmV3IHZuKSk7dmFyIFRuOyFmdW5jdGlvbihlKXtlW2UuVU5LTk9XTl9CRU5DSE1BUks9MF09XCJVTktOT1dOX0JFTkNITUFSS1wiLGVbZS5DUFVfR0ZMT1BTPTFdPVwiQ1BVX0dGTE9QU1wiLGVbZS5HUFVfR0ZMT1BTPTJdPVwiR1BVX0dGTE9QU1wiLGVbZS5HUFVfR0ZMT1BTX1ZFQ1RPUj0zXT1cIkdQVV9HRkxPUFNfVkVDVE9SXCIsZVtlLkdQVV9TWVNURU1fQ0FQQUJJTElUSUVTPTRdPVwiR1BVX1NZU1RFTV9DQVBBQklMSVRJRVNcIixlW2UuR1BVX1ZFUlRFWF9USFJPVUdIUFVUPTVdPVwiR1BVX1ZFUlRFWF9USFJPVUdIUFVUXCIsZVtlLkdQVV9TSU1QTEVfR0VPTUVUUllfVEhST1VHSFBVVD02XT1cIkdQVV9TSU1QTEVfR0VPTUVUUllfVEhST1VHSFBVVFwiLGVbZS5HUFVfR0FVU1NJQU5fQkxVUj03XT1cIkdQVV9HQVVTU0lBTl9CTFVSXCIsZVtlLkNQVV9NRU1PUllfVEhST1VHSFBVVD04XT1cIkNQVV9NRU1PUllfVEhST1VHSFBVVFwiLGVbZS5HUFVfRklMTF9SQVRFPTldPVwiR1BVX0ZJTExfUkFURVwiLGVbZS5NRU1fVE9UQUxfTUVNT1JZPTEwXT1cIk1FTV9UT1RBTF9NRU1PUllcIixlW2UuQ1BVX05VTV9QUk9DRVNTT1JTPTExXT1cIkNQVV9OVU1fUFJPQ0VTU09SU1wiLGVbZS5ERVZJQ0VfSU5GT1JNQVRJT05fQ0hJUFNFVD0xMl09XCJERVZJQ0VfSU5GT1JNQVRJT05fQ0hJUFNFVFwiLGVbZS5ERVZJQ0VfSU5GT1JNQVRJT05fQlVJTERfSEFSRFdBUkU9MTNdPVwiREVWSUNFX0lORk9STUFUSU9OX0JVSUxEX0hBUkRXQVJFXCIsZVtlLkRFVklDRV9JTkZPUk1BVElPTl9CVUlMRF9CUkFORD0xNF09XCJERVZJQ0VfSU5GT1JNQVRJT05fQlVJTERfQlJBTkRcIixlW2UuREVWSUNFX0lORk9STUFUSU9OX0JVSUxEX01BTlVGQUNUVVJFUj0xNV09XCJERVZJQ0VfSU5GT1JNQVRJT05fQlVJTERfTUFOVUZBQ1RVUkVSXCIsZVtlLkRFVklDRV9JTkZPUk1BVElPTl9CVUlMRF9NT0RFTD0xNl09XCJERVZJQ0VfSU5GT1JNQVRJT05fQlVJTERfTU9ERUxcIixlW2UuREVWSUNFX0lORk9STUFUSU9OX1NDUkVFTl9QUk9QRVJUSUVTPTE3XT1cIkRFVklDRV9JTkZPUk1BVElPTl9TQ1JFRU5fUFJPUEVSVElFU1wiLGVbZS5ERVZJQ0VfSU5GT1JNQVRJT05fQ09ERUNfQ0FQQUJJTElURVM9MThdPVwiREVWSUNFX0lORk9STUFUSU9OX0NPREVDX0NBUEFCSUxJVEVTXCIsZVtlLkNQVV9QUklNRV9LT1RMSU49MTldPVwiQ1BVX1BSSU1FX0tPVExJTlwiLGVbZS5DUFVfUFJJTUVfTkFUSVZFPTIwXT1cIkNQVV9QUklNRV9OQVRJVkVcIixlW2UuQ1BVX1NRUlRfS09UTElOPTIxXT1cIkNQVV9TUVJUX0tPVExJTlwiLGVbZS5DUFVfU1FSVF9OQVRJVkU9MjJdPVwiQ1BVX1NRUlRfTkFUSVZFXCIsZVtlLkNQVV9JTlRfTUFUSF9LT1RMSU49MjNdPVwiQ1BVX0lOVF9NQVRIX0tPVExJTlwiLGVbZS5DUFVfSU5UX01BVEhfTkFUSVZFPTI0XT1cIkNQVV9JTlRfTUFUSF9OQVRJVkVcIixlW2UuREVWSUNFX0lORk9STUFUSU9OX0dMX1ZFUlNJT049MjVdPVwiREVWSUNFX0lORk9STUFUSU9OX0dMX1ZFUlNJT05cIixlW2UuREVWSUNFX0lORk9STUFUSU9OX0dMU0xfVkVSU0lPTj0yNl09XCJERVZJQ0VfSU5GT1JNQVRJT05fR0xTTF9WRVJTSU9OXCIsZVtlLkRFVklDRV9JTkZPUk1BVElPTl9PUEVOQ0xfRVhJU1RTPTI3XT1cIkRFVklDRV9JTkZPUk1BVElPTl9PUEVOQ0xfRVhJU1RTXCIsZVtlLkRFVklDRV9JTkZPUk1BVElPTl9JU19IT1NUX1VOSUZJRURfTUVNT1JZPTI4XT1cIkRFVklDRV9JTkZPUk1BVElPTl9JU19IT1NUX1VOSUZJRURfTUVNT1JZXCIsZVtlLkRFVklDRV9JTkZPUk1BVElPTl9PUEVOQ0xfVkVSU0lPTj0yOV09XCJERVZJQ0VfSU5GT1JNQVRJT05fT1BFTkNMX1ZFUlNJT05cIixlW2UuREVWSUNFX0lORk9STUFUSU9OX1RJTUlOR19SRVNPTFVUSU9OX05TPTMwXT1cIkRFVklDRV9JTkZPUk1BVElPTl9USU1JTkdfUkVTT0xVVElPTl9OU1wiLGVbZS5ERVZJQ0VfSU5GT1JNQVRJT05fQUREUkVTU19TSVpFPTMxXT1cIkRFVklDRV9JTkZPUk1BVElPTl9BRERSRVNTX1NJWkVcIixlW2UuREVWSUNFX0lORk9STUFUSU9OX0dQVV9NQVhfQ0xPQ0tfRlJFUVVFTkNZX01IWj0zMl09XCJERVZJQ0VfSU5GT1JNQVRJT05fR1BVX01BWF9DTE9DS19GUkVRVUVOQ1lfTUhaXCIsZVtlLkRFVklDRV9JTkZPUk1BVElPTl9DT01QVVRFX1VOSVRTPTMzXT1cIkRFVklDRV9JTkZPUk1BVElPTl9DT01QVVRFX1VOSVRTXCIsZVtlLkRFVklDRV9JTkZPUk1BVElPTl9NQVhfV09SS0dST1VQX1NJWkU9MzRdPVwiREVWSUNFX0lORk9STUFUSU9OX01BWF9XT1JLR1JPVVBfU0laRVwiLGVbZS5ERVZJQ0VfSU5GT1JNQVRJT05fTE9DQUxfTUVNT1JZX0lTX0xPQ0FMPTM1XT1cIkRFVklDRV9JTkZPUk1BVElPTl9MT0NBTF9NRU1PUllfSVNfTE9DQUxcIixlW2UuREVWSUNFX0lORk9STUFUSU9OX0xPQ0FMX01FTU9SWV9TSVpFPTM2XT1cIkRFVklDRV9JTkZPUk1BVElPTl9MT0NBTF9NRU1PUllfU0laRVwiLGVbZS5ERVZJQ0VfSU5GT1JNQVRJT05fR0xPQkFMX01FTU9SWV9DQUNIRV9TSVpFPTM3XT1cIkRFVklDRV9JTkZPUk1BVElPTl9HTE9CQUxfTUVNT1JZX0NBQ0hFX1NJWkVcIixlW2UuREVWSUNFX0lORk9STUFUSU9OX0dMT0JBTF9NRU1PUllfQ0FDSEVMSU5FX1NJWkU9MzhdPVwiREVWSUNFX0lORk9STUFUSU9OX0dMT0JBTF9NRU1PUllfQ0FDSEVMSU5FX1NJWkVcIixlW2UuREVWSUNFX0lORk9STUFUSU9OX0dMX0hBU19GRU5DRV9TWU5DX09CSkVDVD0zOV09XCJERVZJQ0VfSU5GT1JNQVRJT05fR0xfSEFTX0ZFTkNFX1NZTkNfT0JKRUNUXCIsZVtlLkRFVklDRV9JTkZPUk1BVElPTl9IRVhBR09OX05OX0xJQlJBUllfVkVSU0lPTj00MF09XCJERVZJQ0VfSU5GT1JNQVRJT05fSEVYQUdPTl9OTl9MSUJSQVJZX1ZFUlNJT05cIixlW2UuR1BVX0dGTE9QU19WMj00MV09XCJHUFVfR0ZMT1BTX1YyXCIsZVtlLkdQVV9HRkxPUFNfVkVDVE9SX1YyPTQyXT1cIkdQVV9HRkxPUFNfVkVDVE9SX1YyXCIsZVtlLkRFVklDRV9JTkZPUk1BVElPTl9HUFVfTU9ERUw9NDNdPVwiREVWSUNFX0lORk9STUFUSU9OX0dQVV9NT0RFTFwiLGVbZS5ERVZJQ0VfSU5GT1JNQVRJT05fQ09ERUNfQ0FQQUJJTElURVNfVjI9NDRdPVwiREVWSUNFX0lORk9STUFUSU9OX0NPREVDX0NBUEFCSUxJVEVTX1YyXCIsZVtlLkRFVklDRV9JTkZPUk1BVElPTl9NRURJQV9QRVJGT1JNQU5DRV9DTEFTUz00NV09XCJERVZJQ0VfSU5GT1JNQVRJT05fTUVESUFfUEVSRk9STUFOQ0VfQ0xBU1NcIixlW2UuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwifShUbnx8KFRuPXt9KSksYnQoKS51dGlsLkxvbmchPT1JdCgpJiYoYnQoKS51dGlsLkxvbmc9SXQoKSxidCgpLmNvbmZpZ3VyZSgpKTtjb25zdCBDbj17c2Vjb25kczowLG5hbm9zOjB9LEFuPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmJ0KCkuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5zZWNvbmRzJiZ0LnVpbnQzMig4KS5pbnQ2NChlLnNlY29uZHMpLDAhPT1lLm5hbm9zJiZ0LnVpbnQzMigxNikuaW50MzIoZS5uYW5vcyksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYnQoKS5SZWFkZXI/ZTpuZXcoYnQoKS5SZWFkZXIpKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPU9iamVjdC5hc3NpZ24oe30sQ24pO2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnNlY29uZHM9a24obi5pbnQ2NCgpKTticmVhaztjYXNlIDI6aS5uYW5vcz1uLmludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PU9iamVjdC5hc3NpZ24oe30sQ24pO3JldHVybiB2b2lkIDAhPT1lLnNlY29uZHMmJm51bGwhPT1lLnNlY29uZHM/dC5zZWNvbmRzPWUuc2Vjb25kczp0LnNlY29uZHM9MCx2b2lkIDAhPT1lLm5hbm9zJiZudWxsIT09ZS5uYW5vcz90Lm5hbm9zPWUubmFub3M6dC5uYW5vcz0wLHR9fTt2YXIgUm49KCgpPT57aWYodm9pZCAwIT09Um4pcmV0dXJuIFJuO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmKXJldHVybiBzZWxmO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvdztpZih2b2lkIDAhPT1uLmcpcmV0dXJuIG4uZzt0aHJvd1wiVW5hYmxlIHRvIGxvY2F0ZSBnbG9iYWwgb2JqZWN0XCJ9KSgpO2Z1bmN0aW9uIGtuKGUpe2lmKGUuZ3QoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpKXRocm93IG5ldyBSbi5FcnJvcihcIlZhbHVlIGlzIGxhcmdlciB0aGFuIE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXCIpO3JldHVybiBlLnRvTnVtYmVyKCl9YnQoKS51dGlsLkxvbmchPT1JdCgpJiYoYnQoKS51dGlsLkxvbmc9SXQoKSxidCgpLmNvbmZpZ3VyZSgpKTtjb25zdCBPbj17fSxObj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpidCgpLldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5pbnRWYWx1ZSYmdC51aW50MzIoOCkuaW50MzIoZS5pbnRWYWx1ZSksdm9pZCAwIT09ZS5sb25nVmFsdWUmJnQudWludDMyKDE2KS5pbnQ2NChlLmxvbmdWYWx1ZSksdm9pZCAwIT09ZS5ib29sVmFsdWUmJnQudWludDMyKDI0KS5ib29sKGUuYm9vbFZhbHVlKSx2b2lkIDAhPT1lLmZsb2F0VmFsdWUmJnQudWludDMyKDM3KS5mbG9hdChlLmZsb2F0VmFsdWUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGJ0KCkuUmVhZGVyP2U6bmV3KGJ0KCkuUmVhZGVyKShlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT1PYmplY3QuYXNzaWduKHt9LE9uKTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5pbnRWYWx1ZT1uLmludDMyKCk7YnJlYWs7Y2FzZSAyOmkubG9uZ1ZhbHVlPUZuKG4uaW50NjQoKSk7YnJlYWs7Y2FzZSAzOmkuYm9vbFZhbHVlPW4uYm9vbCgpO2JyZWFrO2Nhc2UgNDppLmZsb2F0VmFsdWU9bi5mbG9hdCgpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LE9uKTtyZXR1cm4gdm9pZCAwIT09ZS5pbnRWYWx1ZSYmbnVsbCE9PWUuaW50VmFsdWU/dC5pbnRWYWx1ZT1lLmludFZhbHVlOnQuaW50VmFsdWU9dm9pZCAwLHZvaWQgMCE9PWUubG9uZ1ZhbHVlJiZudWxsIT09ZS5sb25nVmFsdWU/dC5sb25nVmFsdWU9ZS5sb25nVmFsdWU6dC5sb25nVmFsdWU9dm9pZCAwLHZvaWQgMCE9PWUuYm9vbFZhbHVlJiZudWxsIT09ZS5ib29sVmFsdWU/dC5ib29sVmFsdWU9ZS5ib29sVmFsdWU6dC5ib29sVmFsdWU9dm9pZCAwLHZvaWQgMCE9PWUuZmxvYXRWYWx1ZSYmbnVsbCE9PWUuZmxvYXRWYWx1ZT90LmZsb2F0VmFsdWU9ZS5mbG9hdFZhbHVlOnQuZmxvYXRWYWx1ZT12b2lkIDAsdH19LHduPXtiZW5jaG1hcmtOYW1lczowfSxEbj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpidCgpLldyaXRlci5jcmVhdGUoKTt0LnVpbnQzMigxMCkuZm9yaygpO2Zvcihjb25zdCBuIG9mIGUuYmVuY2htYXJrTmFtZXMpdC5pbnQzMihuKTtyZXR1cm4gdC5sZGVsaW0oKSx2b2lkIDAhPT1lLmV4cGlyYXRpb25UaW1lc3RhbXAmJkFuLmVuY29kZSgobj1lLmV4cGlyYXRpb25UaW1lc3RhbXAse3NlY29uZHM6bi5nZXRUaW1lKCkvMWUzLG5hbm9zOm4uZ2V0VGltZSgpJTFlMyoxZTZ9KSx0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx0O3ZhciBufSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBidCgpLlJlYWRlcj9lOm5ldyhidCgpLlJlYWRlcikoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9T2JqZWN0LmFzc2lnbih7fSx3bik7Zm9yKGkuYmVuY2htYXJrTmFtZXM9W107bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppZigyPT0oNyZlKSl7Y29uc3QgZT1uLnVpbnQzMigpK24ucG9zO2Zvcig7bi5wb3M8ZTspaS5iZW5jaG1hcmtOYW1lcy5wdXNoKG4uaW50MzIoKSl9ZWxzZSBpLmJlbmNobWFya05hbWVzLnB1c2gobi5pbnQzMigpKTticmVhaztjYXNlIDI6aS5leHBpcmF0aW9uVGltZXN0YW1wPXhuKEFuLmRlY29kZShuLG4udWludDMyKCkpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSx3bik7aWYodC5iZW5jaG1hcmtOYW1lcz1bXSx2b2lkIDAhPT1lLmJlbmNobWFya05hbWVzJiZudWxsIT09ZS5iZW5jaG1hcmtOYW1lcylmb3IoY29uc3QgbiBvZiBlLmJlbmNobWFya05hbWVzKXQuYmVuY2htYXJrTmFtZXMucHVzaChuKTtyZXR1cm4gdm9pZCAwIT09ZS5leHBpcmF0aW9uVGltZXN0YW1wJiZudWxsIT09ZS5leHBpcmF0aW9uVGltZXN0YW1wP3QuZXhwaXJhdGlvblRpbWVzdGFtcD1lLmV4cGlyYXRpb25UaW1lc3RhbXA6dC5leHBpcmF0aW9uVGltZXN0YW1wPXZvaWQgMCx0fX0sUG49e25hbWU6MH0sTW49e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YnQoKS5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuIDAhPT1lLm5hbWUmJnQudWludDMyKDgpLmludDMyKGUubmFtZSksdm9pZCAwIT09ZS52YWx1ZSYmTm4uZW5jb2RlKGUudmFsdWUsdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYnQoKS5SZWFkZXI/ZTpuZXcoYnQoKS5SZWFkZXIpKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPU9iamVjdC5hc3NpZ24oe30sUG4pO2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLm5hbWU9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMjppLnZhbHVlPU5uLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LFBuKTtyZXR1cm4gdm9pZCAwIT09ZS5uYW1lJiZudWxsIT09ZS5uYW1lP3QubmFtZT1lLm5hbWU6dC5uYW1lPTAsdm9pZCAwIT09ZS52YWx1ZSYmbnVsbCE9PWUudmFsdWU/dC52YWx1ZT1Obi5mcm9tUGFydGlhbChlLnZhbHVlKTp0LnZhbHVlPXZvaWQgMCx0fX07dmFyIExuLFVuPSgoKT0+e2lmKHZvaWQgMCE9PVVuKXJldHVybiBVbjtpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZilyZXR1cm4gc2VsZjtpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93KXJldHVybiB3aW5kb3c7aWYodm9pZCAwIT09bi5nKXJldHVybiBuLmc7dGhyb3dcIlVuYWJsZSB0byBsb2NhdGUgZ2xvYmFsIG9iamVjdFwifSkoKTtmdW5jdGlvbiB4bihlKXtsZXQgdD0xZTMqZS5zZWNvbmRzO3JldHVybiB0Kz1lLm5hbm9zLzFlNixuZXcgRGF0ZSh0KX1mdW5jdGlvbiBGbihlKXtpZihlLmd0KE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSl0aHJvdyBuZXcgVW4uRXJyb3IoXCJWYWx1ZSBpcyBsYXJnZXIgdGhhbiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlwiKTtyZXR1cm4gZS50b051bWJlcigpfWJ0KCkudXRpbC5Mb25nIT09SXQoKSYmKGJ0KCkudXRpbC5Mb25nPUl0KCksYnQoKS5jb25maWd1cmUoKSksZnVuY3Rpb24oZSl7ZVtlLlVOU0VUPTBdPVwiVU5TRVRcIixlW2UuVVNFUj0xXT1cIlVTRVJcIixlW2UuREVWSUNFPTJdPVwiREVWSUNFXCIsZVtlLldFQl9DTElFTlQ9M109XCJXRUJfQ0xJRU5UXCIsZVtlLkFEX0FDQ09VTlQ9NF09XCJBRF9BQ0NPVU5UXCIsZVtlLlVTRVJOQU1FPTVdPVwiVVNFUk5BTUVcIixlW2UuQURfTU9ERVJBVElPTl9BRD02XT1cIkFEX01PREVSQVRJT05fQURcIixlW2UuV0VCX1NOQVBDSEFUX1VTRVI9N109XCJXRUJfU05BUENIQVRfVVNFUlwiLGVbZS5JTlRFUk5BTD04XT1cIklOVEVSTkFMXCIsZVtlLkFNX09SR0FOSVpBVElPTj05XT1cIkFNX09SR0FOSVpBVElPTlwiLGVbZS5BTV9NRU1CRVI9MTBdPVwiQU1fTUVNQkVSXCIsZVtlLkFNX1NFU1NJT049MTFdPVwiQU1fU0VTU0lPTlwiLGVbZS5BTV9QUk9GSUxFPTEyXT1cIkFNX1BST0ZJTEVcIixlW2UuQU1fU05BUENIQVRfVVNFUj0xM109XCJBTV9TTkFQQ0hBVF9VU0VSXCIsZVtlLlNOQVBDSEFUX0FEVkVSVElTSU5HPTE0XT1cIlNOQVBDSEFUX0FEVkVSVElTSU5HXCIsZVtlLkFNX0NMSUVOVD0xNV09XCJBTV9DTElFTlRcIixlW2UuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwifShMbnx8KExuPXt9KSk7Y29uc3QgQm49e3R5cGU6MCxzdHJpbmdWYWx1ZTpcIlwiLGxvZ2dpbmdJZFZhbHVlOlwiXCJ9LFZuPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmJ0KCkuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS50eXBlJiZ0LnVpbnQzMig4KS5pbnQzMihlLnR5cGUpLFwiXCIhPT1lLnN0cmluZ1ZhbHVlJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuc3RyaW5nVmFsdWUpLFwiXCIhPT1lLmxvZ2dpbmdJZFZhbHVlJiZ0LnVpbnQzMigyNikuc3RyaW5nKGUubG9nZ2luZ0lkVmFsdWUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGJ0KCkuUmVhZGVyP2U6bmV3KGJ0KCkuUmVhZGVyKShlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT1PYmplY3QuYXNzaWduKHt9LEJuKTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS50eXBlPW4uaW50MzIoKTticmVhaztjYXNlIDI6aS5zdHJpbmdWYWx1ZT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMzppLmxvZ2dpbmdJZFZhbHVlPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PU9iamVjdC5hc3NpZ24oe30sQm4pO3JldHVybiB2b2lkIDAhPT1lLnR5cGUmJm51bGwhPT1lLnR5cGU/dC50eXBlPWUudHlwZTp0LnR5cGU9MCx2b2lkIDAhPT1lLnN0cmluZ1ZhbHVlJiZudWxsIT09ZS5zdHJpbmdWYWx1ZT90LnN0cmluZ1ZhbHVlPWUuc3RyaW5nVmFsdWU6dC5zdHJpbmdWYWx1ZT1cIlwiLHZvaWQgMCE9PWUubG9nZ2luZ0lkVmFsdWUmJm51bGwhPT1lLmxvZ2dpbmdJZFZhbHVlP3QubG9nZ2luZ0lkVmFsdWU9ZS5sb2dnaW5nSWRWYWx1ZTp0LmxvZ2dpbmdJZFZhbHVlPVwiXCIsdH19O2J0KCkudXRpbC5Mb25nIT09SXQoKSYmKGJ0KCkudXRpbC5Mb25nPUl0KCksYnQoKS5jb25maWd1cmUoKSk7Y29uc3QgR249e3ZhbHVlOiExfSxIbj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpidCgpLldyaXRlci5jcmVhdGUoKTtyZXR1cm4hMD09PWUudmFsdWUmJnQudWludDMyKDgpLmJvb2woZS52YWx1ZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYnQoKS5SZWFkZXI/ZTpuZXcoYnQoKS5SZWFkZXIpKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPU9iamVjdC5hc3NpZ24oe30sR24pO2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLnZhbHVlPW4uYm9vbCgpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LEduKTtyZXR1cm4gdm9pZCAwIT09ZS52YWx1ZSYmbnVsbCE9PWUudmFsdWU/dC52YWx1ZT1lLnZhbHVlOnQudmFsdWU9ITEsdH19O3ZhciBXbixqbixabix6bixLbj0oKCk9PntpZih2b2lkIDAhPT1LbilyZXR1cm4gS247aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYpcmV0dXJuIHNlbGY7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93O2lmKHZvaWQgMCE9PW4uZylyZXR1cm4gbi5nO3Rocm93XCJVbmFibGUgdG8gbG9jYXRlIGdsb2JhbCBvYmplY3RcIn0pKCk7YnQoKS51dGlsLkxvbmchPT1JdCgpJiYoYnQoKS51dGlsLkxvbmc9SXQoKSxidCgpLmNvbmZpZ3VyZSgpKSxmdW5jdGlvbihlKXtlW2UuVU5LTk9XTl9FVkVOVF9UWVBFPTBdPVwiVU5LTk9XTl9FVkVOVF9UWVBFXCIsZVtlLkNPTERfU1RBUlQ9MV09XCJDT0xEX1NUQVJUXCIsZVtlLldBUk1fU1RBUlQ9Ml09XCJXQVJNX1NUQVJUXCIsZVtlLkZPUkVHUk9VTkRfVFJJR0dFUj0zXT1cIkZPUkVHUk9VTkRfVFJJR0dFUlwiLGVbZS5CQUNLR1JPVU5EX1RSSUdHRVI9NF09XCJCQUNLR1JPVU5EX1RSSUdHRVJcIixlW2UuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwifShXbnx8KFduPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlVOS05PV05fQVBQX1NUQVRFPTBdPVwiVU5LTk9XTl9BUFBfU1RBVEVcIixlW2UuRk9SRUdST1VORD0xXT1cIkZPUkVHUk9VTkRcIixlW2UuQkFDS0dST1VORD0yXT1cIkJBQ0tHUk9VTkRcIixlW2UuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwifShqbnx8KGpuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkRFRkFVTFRfSU5TVFJVTUVOVEFUSU9OPTBdPVwiREVGQVVMVF9JTlNUUlVNRU5UQVRJT05cIixlW2UuVVNFUl9BVVRIRU5USUNBVElPTj0xXT1cIlVTRVJfQVVUSEVOVElDQVRJT05cIixlW2UuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwifShabnx8KFpuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlVOS05PV05fTkVUV09SS19UWVBFPTBdPVwiVU5LTk9XTl9ORVRXT1JLX1RZUEVcIixlW2UuQ0VMTFVMQVI9MV09XCJDRUxMVUxBUlwiLGVbZS5XSUZJPTJdPVwiV0lGSVwiLGVbZS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCJ9KHpufHwoem49e30pKTtjb25zdCBZbj17Y29uZmlnUmVzdWx0c0V0YWc6XCJcIixuYW1lc3BhY2VzOjAsZ2hvc3RJZDpcIlwiLGNvdW50cnlDb2RlOlwiXCIsc2NyZWVuV2lkdGg6MCxzY3JlZW5IZWlnaHQ6MCxtYXhWaWRlb1dpZHRoUHg6MCxtYXhWaWRlb0hlaWdodFB4OjAsZGVsdGFTeW5jOiExLHVzZXJBZ2VudDpcIlwiLHRyaWdnZXJFdmVudFR5cGU6MCxhcHBTdGF0ZTowLGxvY2FsZTpcIlwiLGRldmljZUlkOlwiXCIsdXNlcklkOlwiXCIsY2xpZW50SXA6XCJcIixpc1VuQXV0aG9yaXplZDohMSxhcHBMb2NhbGU6XCJcIixpbnN0cnVtZW50YXRpb246MCxsYXN0U3VjY2Vzc2Z1bFN5bmM6MCxpc0xvZ291dDohMSxwYWNrYWdlSW5zdGFsbGVyOlwiXCIsc3luY1RyaWdnZXJCbGl6emFyZFNlc3Npb25JZDpcIlwiLHN5bmNFeGVjdXRpb25CbGl6emFyZFNlc3Npb25JZDpcIlwiLGNvZlN5bmNUcmlnZ2VyRGVsYXlGcm9tU3RhcnR1cE1zOjAsY29mU3luY0V4ZWN1dGlvbkRlbGF5RnJvbVN0YXJ0dXBNczowLHN5bmNUcmlnZ2VyVGltZTowLHNuYXBraXRBcHBJZDpcIlwiLGxlbnNjb3JlVmVyc2lvbjowLGNvbmZpZ05hbWVzOlwiXCIsaW5jbHVkZVRlc3RVc2VyVHJlYXRtZW50czohMSxkaXNhYmxlRXhwb3N1cmVMb2dnaW5nOiExLGxlbnNDbHVzdGVyT3JpZzQ6MH0scW49e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YnQoKS5Xcml0ZXIuY3JlYXRlKCk7XCJcIiE9PWUuY29uZmlnUmVzdWx0c0V0YWcmJnQudWludDMyKDEwKS5zdHJpbmcoZS5jb25maWdSZXN1bHRzRXRhZyksdC51aW50MzIoMTgpLmZvcmsoKTtmb3IoY29uc3QgbiBvZiBlLm5hbWVzcGFjZXMpdC5pbnQzMihuKTt0LmxkZWxpbSgpLFwiXCIhPT1lLmdob3N0SWQmJnQudWludDMyKDI2KS5zdHJpbmcoZS5naG9zdElkKSxcIlwiIT09ZS5jb3VudHJ5Q29kZSYmdC51aW50MzIoMzQpLnN0cmluZyhlLmNvdW50cnlDb2RlKSwwIT09ZS5zY3JlZW5XaWR0aCYmdC51aW50MzIoNDApLmludDMyKGUuc2NyZWVuV2lkdGgpLDAhPT1lLnNjcmVlbkhlaWdodCYmdC51aW50MzIoNDgpLmludDMyKGUuc2NyZWVuSGVpZ2h0KSx2b2lkIDAhPT1lLmNvbm5lY3Rpdml0eSYmUW4uZW5jb2RlKGUuY29ubmVjdGl2aXR5LHQudWludDMyKDU4KS5mb3JrKCkpLmxkZWxpbSgpLDAhPT1lLm1heFZpZGVvV2lkdGhQeCYmdC51aW50MzIoNjQpLmludDMyKGUubWF4VmlkZW9XaWR0aFB4KSwwIT09ZS5tYXhWaWRlb0hlaWdodFB4JiZ0LnVpbnQzMig3MikuaW50MzIoZS5tYXhWaWRlb0hlaWdodFB4KTtmb3IoY29uc3QgbiBvZiBlLmJlbmNobWFya1Jlc3VsdHMpTW4uZW5jb2RlKG4sdC51aW50MzIoODIpLmZvcmsoKSkubGRlbGltKCk7ITA9PT1lLmRlbHRhU3luYyYmdC51aW50MzIoODgpLmJvb2woZS5kZWx0YVN5bmMpLFwiXCIhPT1lLnVzZXJBZ2VudCYmdC51aW50MzIoOTgpLnN0cmluZyhlLnVzZXJBZ2VudCksMCE9PWUudHJpZ2dlckV2ZW50VHlwZSYmdC51aW50MzIoMTA0KS5pbnQzMihlLnRyaWdnZXJFdmVudFR5cGUpLDAhPT1lLmFwcFN0YXRlJiZ0LnVpbnQzMigxMTIpLmludDMyKGUuYXBwU3RhdGUpLFwiXCIhPT1lLmxvY2FsZSYmdC51aW50MzIoMTIyKS5zdHJpbmcoZS5sb2NhbGUpLFwiXCIhPT1lLmRldmljZUlkJiZ0LnVpbnQzMigxMzApLnN0cmluZyhlLmRldmljZUlkKSxcIlwiIT09ZS51c2VySWQmJnQudWludDMyKDEzOCkuc3RyaW5nKGUudXNlcklkKSxcIlwiIT09ZS5jbGllbnRJcCYmdC51aW50MzIoMTQ2KS5zdHJpbmcoZS5jbGllbnRJcCksITA9PT1lLmlzVW5BdXRob3JpemVkJiZ0LnVpbnQzMigxNTIpLmJvb2woZS5pc1VuQXV0aG9yaXplZCksXCJcIiE9PWUuYXBwTG9jYWxlJiZ0LnVpbnQzMigxNjIpLnN0cmluZyhlLmFwcExvY2FsZSksMCE9PWUuaW5zdHJ1bWVudGF0aW9uJiZ0LnVpbnQzMigxNjgpLmludDMyKGUuaW5zdHJ1bWVudGF0aW9uKSwwIT09ZS5sYXN0U3VjY2Vzc2Z1bFN5bmMmJnQudWludDMyKDE3NikuaW50NjQoZS5sYXN0U3VjY2Vzc2Z1bFN5bmMpLCEwPT09ZS5pc0xvZ291dCYmdC51aW50MzIoMTg0KS5ib29sKGUuaXNMb2dvdXQpLFwiXCIhPT1lLnBhY2thZ2VJbnN0YWxsZXImJnQudWludDMyKDE5NCkuc3RyaW5nKGUucGFja2FnZUluc3RhbGxlciksXCJcIiE9PWUuc3luY1RyaWdnZXJCbGl6emFyZFNlc3Npb25JZCYmdC51aW50MzIoMjAyKS5zdHJpbmcoZS5zeW5jVHJpZ2dlckJsaXp6YXJkU2Vzc2lvbklkKSxcIlwiIT09ZS5zeW5jRXhlY3V0aW9uQmxpenphcmRTZXNzaW9uSWQmJnQudWludDMyKDIxMCkuc3RyaW5nKGUuc3luY0V4ZWN1dGlvbkJsaXp6YXJkU2Vzc2lvbklkKSwwIT09ZS5jb2ZTeW5jVHJpZ2dlckRlbGF5RnJvbVN0YXJ0dXBNcyYmdC51aW50MzIoMjE2KS5pbnQzMihlLmNvZlN5bmNUcmlnZ2VyRGVsYXlGcm9tU3RhcnR1cE1zKSwwIT09ZS5jb2ZTeW5jRXhlY3V0aW9uRGVsYXlGcm9tU3RhcnR1cE1zJiZ0LnVpbnQzMigyMjQpLmludDMyKGUuY29mU3luY0V4ZWN1dGlvbkRlbGF5RnJvbVN0YXJ0dXBNcyksMCE9PWUuc3luY1RyaWdnZXJUaW1lJiZ0LnVpbnQzMigyMzIpLmludDY0KGUuc3luY1RyaWdnZXJUaW1lKSx2b2lkIDAhPT1lLmRlY29kZXJFbmNvZGVyQXZhaWxhYmlsaXR5JiYkbi5lbmNvZGUoZS5kZWNvZGVyRW5jb2RlckF2YWlsYWJpbGl0eSx0LnVpbnQzMigyNDIpLmZvcmsoKSkubGRlbGltKCksXCJcIiE9PWUuc25hcGtpdEFwcElkJiZ0LnVpbnQzMigyNTApLnN0cmluZyhlLnNuYXBraXRBcHBJZCksMCE9PWUubGVuc2NvcmVWZXJzaW9uJiZ0LnVpbnQzMigyNTYpLmludDMyKGUubGVuc2NvcmVWZXJzaW9uKSx2b2lkIDAhPT1lLnJ1aWQmJlZuLmVuY29kZShlLnJ1aWQsdC51aW50MzIoMjY2KS5mb3JrKCkpLmxkZWxpbSgpO2Zvcihjb25zdCBuIG9mIGUuY29uZmlnTmFtZXMpdC51aW50MzIoMjc0KS5zdHJpbmcobik7cmV0dXJuITA9PT1lLmluY2x1ZGVUZXN0VXNlclRyZWF0bWVudHMmJnQudWludDMyKDI4OCkuYm9vbChlLmluY2x1ZGVUZXN0VXNlclRyZWF0bWVudHMpLCEwPT09ZS5kaXNhYmxlRXhwb3N1cmVMb2dnaW5nJiZ0LnVpbnQzMigyOTYpLmJvb2woZS5kaXNhYmxlRXhwb3N1cmVMb2dnaW5nKSwwIT09ZS5sZW5zQ2x1c3Rlck9yaWc0JiZ0LnVpbnQzMigzMDQpLmludDMyKGUubGVuc0NsdXN0ZXJPcmlnNCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYnQoKS5SZWFkZXI/ZTpuZXcoYnQoKS5SZWFkZXIpKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPU9iamVjdC5hc3NpZ24oe30sWW4pO2ZvcihpLm5hbWVzcGFjZXM9W10saS5iZW5jaG1hcmtSZXN1bHRzPVtdLGkuY29uZmlnTmFtZXM9W107bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmNvbmZpZ1Jlc3VsdHNFdGFnPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmlmKDI9PSg3JmUpKXtjb25zdCBlPW4udWludDMyKCkrbi5wb3M7Zm9yKDtuLnBvczxlOylpLm5hbWVzcGFjZXMucHVzaChuLmludDMyKCkpfWVsc2UgaS5uYW1lc3BhY2VzLnB1c2gobi5pbnQzMigpKTticmVhaztjYXNlIDM6aS5naG9zdElkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA0OmkuY291bnRyeUNvZGU9bi5zdHJpbmcoKTticmVhaztjYXNlIDU6aS5zY3JlZW5XaWR0aD1uLmludDMyKCk7YnJlYWs7Y2FzZSA2Omkuc2NyZWVuSGVpZ2h0PW4uaW50MzIoKTticmVhaztjYXNlIDc6aS5jb25uZWN0aXZpdHk9UW4uZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSA4OmkubWF4VmlkZW9XaWR0aFB4PW4uaW50MzIoKTticmVhaztjYXNlIDk6aS5tYXhWaWRlb0hlaWdodFB4PW4uaW50MzIoKTticmVhaztjYXNlIDEwOmkuYmVuY2htYXJrUmVzdWx0cy5wdXNoKE1uLmRlY29kZShuLG4udWludDMyKCkpKTticmVhaztjYXNlIDExOmkuZGVsdGFTeW5jPW4uYm9vbCgpO2JyZWFrO2Nhc2UgMTI6aS51c2VyQWdlbnQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDEzOmkudHJpZ2dlckV2ZW50VHlwZT1uLmludDMyKCk7YnJlYWs7Y2FzZSAxNDppLmFwcFN0YXRlPW4uaW50MzIoKTticmVhaztjYXNlIDE1OmkubG9jYWxlPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAxNjppLmRldmljZUlkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAxNzppLnVzZXJJZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMTg6aS5jbGllbnRJcD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMTk6aS5pc1VuQXV0aG9yaXplZD1uLmJvb2woKTticmVhaztjYXNlIDIwOmkuYXBwTG9jYWxlPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyMTppLmluc3RydW1lbnRhdGlvbj1uLmludDMyKCk7YnJlYWs7Y2FzZSAyMjppLmxhc3RTdWNjZXNzZnVsU3luYz10cihuLmludDY0KCkpO2JyZWFrO2Nhc2UgMjM6aS5pc0xvZ291dD1uLmJvb2woKTticmVhaztjYXNlIDI0OmkucGFja2FnZUluc3RhbGxlcj1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjU6aS5zeW5jVHJpZ2dlckJsaXp6YXJkU2Vzc2lvbklkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyNjppLnN5bmNFeGVjdXRpb25CbGl6emFyZFNlc3Npb25JZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjc6aS5jb2ZTeW5jVHJpZ2dlckRlbGF5RnJvbVN0YXJ0dXBNcz1uLmludDMyKCk7YnJlYWs7Y2FzZSAyODppLmNvZlN5bmNFeGVjdXRpb25EZWxheUZyb21TdGFydHVwTXM9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMjk6aS5zeW5jVHJpZ2dlclRpbWU9dHIobi5pbnQ2NCgpKTticmVhaztjYXNlIDMwOmkuZGVjb2RlckVuY29kZXJBdmFpbGFiaWxpdHk9JG4uZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAzMTppLnNuYXBraXRBcHBJZD1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMzI6aS5sZW5zY29yZVZlcnNpb249bi5pbnQzMigpO2JyZWFrO2Nhc2UgMzM6aS5ydWlkPVZuLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgMzQ6aS5jb25maWdOYW1lcy5wdXNoKG4uc3RyaW5nKCkpO2JyZWFrO2Nhc2UgMzY6aS5pbmNsdWRlVGVzdFVzZXJUcmVhdG1lbnRzPW4uYm9vbCgpO2JyZWFrO2Nhc2UgMzc6aS5kaXNhYmxlRXhwb3N1cmVMb2dnaW5nPW4uYm9vbCgpO2JyZWFrO2Nhc2UgMzg6aS5sZW5zQ2x1c3Rlck9yaWc0PW4uaW50MzIoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxZbik7aWYodC5uYW1lc3BhY2VzPVtdLHQuYmVuY2htYXJrUmVzdWx0cz1bXSx0LmNvbmZpZ05hbWVzPVtdLHZvaWQgMCE9PWUuY29uZmlnUmVzdWx0c0V0YWcmJm51bGwhPT1lLmNvbmZpZ1Jlc3VsdHNFdGFnP3QuY29uZmlnUmVzdWx0c0V0YWc9ZS5jb25maWdSZXN1bHRzRXRhZzp0LmNvbmZpZ1Jlc3VsdHNFdGFnPVwiXCIsdm9pZCAwIT09ZS5uYW1lc3BhY2VzJiZudWxsIT09ZS5uYW1lc3BhY2VzKWZvcihjb25zdCBuIG9mIGUubmFtZXNwYWNlcyl0Lm5hbWVzcGFjZXMucHVzaChuKTtpZih2b2lkIDAhPT1lLmdob3N0SWQmJm51bGwhPT1lLmdob3N0SWQ/dC5naG9zdElkPWUuZ2hvc3RJZDp0Lmdob3N0SWQ9XCJcIix2b2lkIDAhPT1lLmNvdW50cnlDb2RlJiZudWxsIT09ZS5jb3VudHJ5Q29kZT90LmNvdW50cnlDb2RlPWUuY291bnRyeUNvZGU6dC5jb3VudHJ5Q29kZT1cIlwiLHZvaWQgMCE9PWUuc2NyZWVuV2lkdGgmJm51bGwhPT1lLnNjcmVlbldpZHRoP3Quc2NyZWVuV2lkdGg9ZS5zY3JlZW5XaWR0aDp0LnNjcmVlbldpZHRoPTAsdm9pZCAwIT09ZS5zY3JlZW5IZWlnaHQmJm51bGwhPT1lLnNjcmVlbkhlaWdodD90LnNjcmVlbkhlaWdodD1lLnNjcmVlbkhlaWdodDp0LnNjcmVlbkhlaWdodD0wLHZvaWQgMCE9PWUuY29ubmVjdGl2aXR5JiZudWxsIT09ZS5jb25uZWN0aXZpdHk/dC5jb25uZWN0aXZpdHk9UW4uZnJvbVBhcnRpYWwoZS5jb25uZWN0aXZpdHkpOnQuY29ubmVjdGl2aXR5PXZvaWQgMCx2b2lkIDAhPT1lLm1heFZpZGVvV2lkdGhQeCYmbnVsbCE9PWUubWF4VmlkZW9XaWR0aFB4P3QubWF4VmlkZW9XaWR0aFB4PWUubWF4VmlkZW9XaWR0aFB4OnQubWF4VmlkZW9XaWR0aFB4PTAsdm9pZCAwIT09ZS5tYXhWaWRlb0hlaWdodFB4JiZudWxsIT09ZS5tYXhWaWRlb0hlaWdodFB4P3QubWF4VmlkZW9IZWlnaHRQeD1lLm1heFZpZGVvSGVpZ2h0UHg6dC5tYXhWaWRlb0hlaWdodFB4PTAsdm9pZCAwIT09ZS5iZW5jaG1hcmtSZXN1bHRzJiZudWxsIT09ZS5iZW5jaG1hcmtSZXN1bHRzKWZvcihjb25zdCBuIG9mIGUuYmVuY2htYXJrUmVzdWx0cyl0LmJlbmNobWFya1Jlc3VsdHMucHVzaChNbi5mcm9tUGFydGlhbChuKSk7aWYodm9pZCAwIT09ZS5kZWx0YVN5bmMmJm51bGwhPT1lLmRlbHRhU3luYz90LmRlbHRhU3luYz1lLmRlbHRhU3luYzp0LmRlbHRhU3luYz0hMSx2b2lkIDAhPT1lLnVzZXJBZ2VudCYmbnVsbCE9PWUudXNlckFnZW50P3QudXNlckFnZW50PWUudXNlckFnZW50OnQudXNlckFnZW50PVwiXCIsdm9pZCAwIT09ZS50cmlnZ2VyRXZlbnRUeXBlJiZudWxsIT09ZS50cmlnZ2VyRXZlbnRUeXBlP3QudHJpZ2dlckV2ZW50VHlwZT1lLnRyaWdnZXJFdmVudFR5cGU6dC50cmlnZ2VyRXZlbnRUeXBlPTAsdm9pZCAwIT09ZS5hcHBTdGF0ZSYmbnVsbCE9PWUuYXBwU3RhdGU/dC5hcHBTdGF0ZT1lLmFwcFN0YXRlOnQuYXBwU3RhdGU9MCx2b2lkIDAhPT1lLmxvY2FsZSYmbnVsbCE9PWUubG9jYWxlP3QubG9jYWxlPWUubG9jYWxlOnQubG9jYWxlPVwiXCIsdm9pZCAwIT09ZS5kZXZpY2VJZCYmbnVsbCE9PWUuZGV2aWNlSWQ/dC5kZXZpY2VJZD1lLmRldmljZUlkOnQuZGV2aWNlSWQ9XCJcIix2b2lkIDAhPT1lLnVzZXJJZCYmbnVsbCE9PWUudXNlcklkP3QudXNlcklkPWUudXNlcklkOnQudXNlcklkPVwiXCIsdm9pZCAwIT09ZS5jbGllbnRJcCYmbnVsbCE9PWUuY2xpZW50SXA/dC5jbGllbnRJcD1lLmNsaWVudElwOnQuY2xpZW50SXA9XCJcIix2b2lkIDAhPT1lLmlzVW5BdXRob3JpemVkJiZudWxsIT09ZS5pc1VuQXV0aG9yaXplZD90LmlzVW5BdXRob3JpemVkPWUuaXNVbkF1dGhvcml6ZWQ6dC5pc1VuQXV0aG9yaXplZD0hMSx2b2lkIDAhPT1lLmFwcExvY2FsZSYmbnVsbCE9PWUuYXBwTG9jYWxlP3QuYXBwTG9jYWxlPWUuYXBwTG9jYWxlOnQuYXBwTG9jYWxlPVwiXCIsdm9pZCAwIT09ZS5pbnN0cnVtZW50YXRpb24mJm51bGwhPT1lLmluc3RydW1lbnRhdGlvbj90Lmluc3RydW1lbnRhdGlvbj1lLmluc3RydW1lbnRhdGlvbjp0Lmluc3RydW1lbnRhdGlvbj0wLHZvaWQgMCE9PWUubGFzdFN1Y2Nlc3NmdWxTeW5jJiZudWxsIT09ZS5sYXN0U3VjY2Vzc2Z1bFN5bmM/dC5sYXN0U3VjY2Vzc2Z1bFN5bmM9ZS5sYXN0U3VjY2Vzc2Z1bFN5bmM6dC5sYXN0U3VjY2Vzc2Z1bFN5bmM9MCx2b2lkIDAhPT1lLmlzTG9nb3V0JiZudWxsIT09ZS5pc0xvZ291dD90LmlzTG9nb3V0PWUuaXNMb2dvdXQ6dC5pc0xvZ291dD0hMSx2b2lkIDAhPT1lLnBhY2thZ2VJbnN0YWxsZXImJm51bGwhPT1lLnBhY2thZ2VJbnN0YWxsZXI/dC5wYWNrYWdlSW5zdGFsbGVyPWUucGFja2FnZUluc3RhbGxlcjp0LnBhY2thZ2VJbnN0YWxsZXI9XCJcIix2b2lkIDAhPT1lLnN5bmNUcmlnZ2VyQmxpenphcmRTZXNzaW9uSWQmJm51bGwhPT1lLnN5bmNUcmlnZ2VyQmxpenphcmRTZXNzaW9uSWQ/dC5zeW5jVHJpZ2dlckJsaXp6YXJkU2Vzc2lvbklkPWUuc3luY1RyaWdnZXJCbGl6emFyZFNlc3Npb25JZDp0LnN5bmNUcmlnZ2VyQmxpenphcmRTZXNzaW9uSWQ9XCJcIix2b2lkIDAhPT1lLnN5bmNFeGVjdXRpb25CbGl6emFyZFNlc3Npb25JZCYmbnVsbCE9PWUuc3luY0V4ZWN1dGlvbkJsaXp6YXJkU2Vzc2lvbklkP3Quc3luY0V4ZWN1dGlvbkJsaXp6YXJkU2Vzc2lvbklkPWUuc3luY0V4ZWN1dGlvbkJsaXp6YXJkU2Vzc2lvbklkOnQuc3luY0V4ZWN1dGlvbkJsaXp6YXJkU2Vzc2lvbklkPVwiXCIsdm9pZCAwIT09ZS5jb2ZTeW5jVHJpZ2dlckRlbGF5RnJvbVN0YXJ0dXBNcyYmbnVsbCE9PWUuY29mU3luY1RyaWdnZXJEZWxheUZyb21TdGFydHVwTXM/dC5jb2ZTeW5jVHJpZ2dlckRlbGF5RnJvbVN0YXJ0dXBNcz1lLmNvZlN5bmNUcmlnZ2VyRGVsYXlGcm9tU3RhcnR1cE1zOnQuY29mU3luY1RyaWdnZXJEZWxheUZyb21TdGFydHVwTXM9MCx2b2lkIDAhPT1lLmNvZlN5bmNFeGVjdXRpb25EZWxheUZyb21TdGFydHVwTXMmJm51bGwhPT1lLmNvZlN5bmNFeGVjdXRpb25EZWxheUZyb21TdGFydHVwTXM/dC5jb2ZTeW5jRXhlY3V0aW9uRGVsYXlGcm9tU3RhcnR1cE1zPWUuY29mU3luY0V4ZWN1dGlvbkRlbGF5RnJvbVN0YXJ0dXBNczp0LmNvZlN5bmNFeGVjdXRpb25EZWxheUZyb21TdGFydHVwTXM9MCx2b2lkIDAhPT1lLnN5bmNUcmlnZ2VyVGltZSYmbnVsbCE9PWUuc3luY1RyaWdnZXJUaW1lP3Quc3luY1RyaWdnZXJUaW1lPWUuc3luY1RyaWdnZXJUaW1lOnQuc3luY1RyaWdnZXJUaW1lPTAsdm9pZCAwIT09ZS5kZWNvZGVyRW5jb2RlckF2YWlsYWJpbGl0eSYmbnVsbCE9PWUuZGVjb2RlckVuY29kZXJBdmFpbGFiaWxpdHk/dC5kZWNvZGVyRW5jb2RlckF2YWlsYWJpbGl0eT0kbi5mcm9tUGFydGlhbChlLmRlY29kZXJFbmNvZGVyQXZhaWxhYmlsaXR5KTp0LmRlY29kZXJFbmNvZGVyQXZhaWxhYmlsaXR5PXZvaWQgMCx2b2lkIDAhPT1lLnNuYXBraXRBcHBJZCYmbnVsbCE9PWUuc25hcGtpdEFwcElkP3Quc25hcGtpdEFwcElkPWUuc25hcGtpdEFwcElkOnQuc25hcGtpdEFwcElkPVwiXCIsdm9pZCAwIT09ZS5sZW5zY29yZVZlcnNpb24mJm51bGwhPT1lLmxlbnNjb3JlVmVyc2lvbj90LmxlbnNjb3JlVmVyc2lvbj1lLmxlbnNjb3JlVmVyc2lvbjp0LmxlbnNjb3JlVmVyc2lvbj0wLHZvaWQgMCE9PWUucnVpZCYmbnVsbCE9PWUucnVpZD90LnJ1aWQ9Vm4uZnJvbVBhcnRpYWwoZS5ydWlkKTp0LnJ1aWQ9dm9pZCAwLHZvaWQgMCE9PWUuY29uZmlnTmFtZXMmJm51bGwhPT1lLmNvbmZpZ05hbWVzKWZvcihjb25zdCBuIG9mIGUuY29uZmlnTmFtZXMpdC5jb25maWdOYW1lcy5wdXNoKG4pO3JldHVybiB2b2lkIDAhPT1lLmluY2x1ZGVUZXN0VXNlclRyZWF0bWVudHMmJm51bGwhPT1lLmluY2x1ZGVUZXN0VXNlclRyZWF0bWVudHM/dC5pbmNsdWRlVGVzdFVzZXJUcmVhdG1lbnRzPWUuaW5jbHVkZVRlc3RVc2VyVHJlYXRtZW50czp0LmluY2x1ZGVUZXN0VXNlclRyZWF0bWVudHM9ITEsdm9pZCAwIT09ZS5kaXNhYmxlRXhwb3N1cmVMb2dnaW5nJiZudWxsIT09ZS5kaXNhYmxlRXhwb3N1cmVMb2dnaW5nP3QuZGlzYWJsZUV4cG9zdXJlTG9nZ2luZz1lLmRpc2FibGVFeHBvc3VyZUxvZ2dpbmc6dC5kaXNhYmxlRXhwb3N1cmVMb2dnaW5nPSExLHZvaWQgMCE9PWUubGVuc0NsdXN0ZXJPcmlnNCYmbnVsbCE9PWUubGVuc0NsdXN0ZXJPcmlnND90LmxlbnNDbHVzdGVyT3JpZzQ9ZS5sZW5zQ2x1c3Rlck9yaWc0OnQubGVuc0NsdXN0ZXJPcmlnND0wLHR9fSxYbj17bmV0d29ya1R5cGU6MCxjYXJyaWVyOlwiXCJ9LFFuPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmJ0KCkuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5uZXR3b3JrVHlwZSYmdC51aW50MzIoOCkuaW50MzIoZS5uZXR3b3JrVHlwZSksdm9pZCAwIT09ZS5pc01ldGVyZWQmJkhuLmVuY29kZSh7dmFsdWU6ZS5pc01ldGVyZWR9LHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuaXNSb2FtaW5nJiZIbi5lbmNvZGUoe3ZhbHVlOmUuaXNSb2FtaW5nfSx0LnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSxcIlwiIT09ZS5jYXJyaWVyJiZ0LnVpbnQzMigzNCkuc3RyaW5nKGUuY2FycmllciksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYnQoKS5SZWFkZXI/ZTpuZXcoYnQoKS5SZWFkZXIpKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPU9iamVjdC5hc3NpZ24oe30sWG4pO2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLm5ldHdvcmtUeXBlPW4uaW50MzIoKTticmVhaztjYXNlIDI6aS5pc01ldGVyZWQ9SG4uZGVjb2RlKG4sbi51aW50MzIoKSkudmFsdWU7YnJlYWs7Y2FzZSAzOmkuaXNSb2FtaW5nPUhuLmRlY29kZShuLG4udWludDMyKCkpLnZhbHVlO2JyZWFrO2Nhc2UgNDppLmNhcnJpZXI9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxYbik7cmV0dXJuIHZvaWQgMCE9PWUubmV0d29ya1R5cGUmJm51bGwhPT1lLm5ldHdvcmtUeXBlP3QubmV0d29ya1R5cGU9ZS5uZXR3b3JrVHlwZTp0Lm5ldHdvcmtUeXBlPTAsdm9pZCAwIT09ZS5pc01ldGVyZWQmJm51bGwhPT1lLmlzTWV0ZXJlZD90LmlzTWV0ZXJlZD1lLmlzTWV0ZXJlZDp0LmlzTWV0ZXJlZD12b2lkIDAsdm9pZCAwIT09ZS5pc1JvYW1pbmcmJm51bGwhPT1lLmlzUm9hbWluZz90LmlzUm9hbWluZz1lLmlzUm9hbWluZzp0LmlzUm9hbWluZz12b2lkIDAsdm9pZCAwIT09ZS5jYXJyaWVyJiZudWxsIT09ZS5jYXJyaWVyP3QuY2Fycmllcj1lLmNhcnJpZXI6dC5jYXJyaWVyPVwiXCIsdH19LEpuPXtpc1NuYXBWcDlEZWNvZGVyQXZhaWxhYmxlOiExLGlzU25hcEF2MURlY29kZXJBdmFpbGFibGU6ITF9LCRuPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmJ0KCkuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiEwPT09ZS5pc1NuYXBWcDlEZWNvZGVyQXZhaWxhYmxlJiZ0LnVpbnQzMig4KS5ib29sKGUuaXNTbmFwVnA5RGVjb2RlckF2YWlsYWJsZSksITA9PT1lLmlzU25hcEF2MURlY29kZXJBdmFpbGFibGUmJnQudWludDMyKDE2KS5ib29sKGUuaXNTbmFwQXYxRGVjb2RlckF2YWlsYWJsZSksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYnQoKS5SZWFkZXI/ZTpuZXcoYnQoKS5SZWFkZXIpKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPU9iamVjdC5hc3NpZ24oe30sSm4pO2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmlzU25hcFZwOURlY29kZXJBdmFpbGFibGU9bi5ib29sKCk7YnJlYWs7Y2FzZSAyOmkuaXNTbmFwQXYxRGVjb2RlckF2YWlsYWJsZT1uLmJvb2woKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxKbik7cmV0dXJuIHZvaWQgMCE9PWUuaXNTbmFwVnA5RGVjb2RlckF2YWlsYWJsZSYmbnVsbCE9PWUuaXNTbmFwVnA5RGVjb2RlckF2YWlsYWJsZT90LmlzU25hcFZwOURlY29kZXJBdmFpbGFibGU9ZS5pc1NuYXBWcDlEZWNvZGVyQXZhaWxhYmxlOnQuaXNTbmFwVnA5RGVjb2RlckF2YWlsYWJsZT0hMSx2b2lkIDAhPT1lLmlzU25hcEF2MURlY29kZXJBdmFpbGFibGUmJm51bGwhPT1lLmlzU25hcEF2MURlY29kZXJBdmFpbGFibGU/dC5pc1NuYXBBdjFEZWNvZGVyQXZhaWxhYmxlPWUuaXNTbmFwQXYxRGVjb2RlckF2YWlsYWJsZTp0LmlzU25hcEF2MURlY29kZXJBdmFpbGFibGU9ITEsdH19O3ZhciBlcj0oKCk9PntpZih2b2lkIDAhPT1lcilyZXR1cm4gZXI7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYpcmV0dXJuIHNlbGY7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93O2lmKHZvaWQgMCE9PW4uZylyZXR1cm4gbi5nO3Rocm93XCJVbmFibGUgdG8gbG9jYXRlIGdsb2JhbCBvYmplY3RcIn0pKCk7ZnVuY3Rpb24gdHIoZSl7aWYoZS5ndChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikpdGhyb3cgbmV3IGVyLkVycm9yKFwiVmFsdWUgaXMgbGFyZ2VyIHRoYW4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcIik7cmV0dXJuIGUudG9OdW1iZXIoKX1idCgpLnV0aWwuTG9uZyE9PUl0KCkmJihidCgpLnV0aWwuTG9uZz1JdCgpLGJ0KCkuY29uZmlndXJlKCkpO2NvbnN0IG5yPXt0eXBlVXJsOlwiXCJ9LHJyPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmJ0KCkuV3JpdGVyLmNyZWF0ZSgpO3JldHVyblwiXCIhPT1lLnR5cGVVcmwmJnQudWludDMyKDEwKS5zdHJpbmcoZS50eXBlVXJsKSwwIT09ZS52YWx1ZS5sZW5ndGgmJnQudWludDMyKDE4KS5ieXRlcyhlLnZhbHVlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBidCgpLlJlYWRlcj9lOm5ldyhidCgpLlJlYWRlcikoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9T2JqZWN0LmFzc2lnbih7fSxucik7Zm9yKGkudmFsdWU9bmV3IFVpbnQ4QXJyYXk7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnR5cGVVcmw9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS52YWx1ZT1uLmJ5dGVzKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PU9iamVjdC5hc3NpZ24oe30sbnIpO3JldHVybiB2b2lkIDAhPT1lLnR5cGVVcmwmJm51bGwhPT1lLnR5cGVVcmw/dC50eXBlVXJsPWUudHlwZVVybDp0LnR5cGVVcmw9XCJcIix2b2lkIDAhPT1lLnZhbHVlJiZudWxsIT09ZS52YWx1ZT90LnZhbHVlPWUudmFsdWU6dC52YWx1ZT1uZXcgVWludDhBcnJheSx0fX07YnQoKS51dGlsLkxvbmchPT1JdCgpJiYoYnQoKS51dGlsLkxvbmc9SXQoKSxidCgpLmNvbmZpZ3VyZSgpKTtjb25zdCBpcj17a2V5OlwiXCIsdmFsdWU6XCJcIn0sb3I9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YnQoKS5Xcml0ZXIuY3JlYXRlKCk7cmV0dXJuXCJcIiE9PWUua2V5JiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUua2V5KSxcIlwiIT09ZS52YWx1ZSYmdC51aW50MzIoMTgpLnN0cmluZyhlLnZhbHVlKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBidCgpLlJlYWRlcj9lOm5ldyhidCgpLlJlYWRlcikoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9T2JqZWN0LmFzc2lnbih7fSxpcik7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkua2V5PW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkudmFsdWU9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxpcik7cmV0dXJuIHZvaWQgMCE9PWUua2V5JiZudWxsIT09ZS5rZXk/dC5rZXk9ZS5rZXk6dC5rZXk9XCJcIix2b2lkIDAhPT1lLnZhbHVlJiZudWxsIT09ZS52YWx1ZT90LnZhbHVlPWUudmFsdWU6dC52YWx1ZT1cIlwiLHR9fSxhcj17fSxzcj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpidCgpLldyaXRlci5jcmVhdGUoKTtmb3IoY29uc3QgbiBvZiBlLnJlY29yZHMpb3IuZW5jb2RlKG4sdC51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7cmV0dXJuIHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGJ0KCkuUmVhZGVyP2U6bmV3KGJ0KCkuUmVhZGVyKShlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT1PYmplY3QuYXNzaWduKHt9LGFyKTtmb3IoaS5yZWNvcmRzPVtdO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/aS5yZWNvcmRzLnB1c2gob3IuZGVjb2RlKG4sbi51aW50MzIoKSkpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LGFyKTtpZih0LnJlY29yZHM9W10sdm9pZCAwIT09ZS5yZWNvcmRzJiZudWxsIT09ZS5yZWNvcmRzKWZvcihjb25zdCBuIG9mIGUucmVjb3Jkcyl0LnJlY29yZHMucHVzaChvci5mcm9tUGFydGlhbChuKSk7cmV0dXJuIHR9fSxjcj17fSxscj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpidCgpLldyaXRlci5jcmVhdGUoKTtyZXR1cm4gdm9pZCAwIT09ZS5pbnRWYWx1ZSYmdC51aW50MzIoOCkuaW50MzIoZS5pbnRWYWx1ZSksdm9pZCAwIT09ZS5sb25nVmFsdWUmJnQudWludDMyKDE2KS5pbnQ2NChlLmxvbmdWYWx1ZSksdm9pZCAwIT09ZS5mbG9hdFZhbHVlJiZ0LnVpbnQzMigyOSkuZmxvYXQoZS5mbG9hdFZhbHVlKSx2b2lkIDAhPT1lLmRvdWJsZVZhbHVlJiZ0LnVpbnQzMig3MykuZG91YmxlKGUuZG91YmxlVmFsdWUpLHZvaWQgMCE9PWUuYm9vbFZhbHVlJiZ0LnVpbnQzMigzMikuYm9vbChlLmJvb2xWYWx1ZSksdm9pZCAwIT09ZS5zdHJpbmdWYWx1ZSYmdC51aW50MzIoNDIpLnN0cmluZyhlLnN0cmluZ1ZhbHVlKSx2b2lkIDAhPT1lLmFueVZhbHVlJiZyci5lbmNvZGUoZS5hbnlWYWx1ZSx0LnVpbnQzMig1MCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLm1hcFZhbHVlJiZzci5lbmNvZGUoZS5tYXBWYWx1ZSx0LnVpbnQzMig1OCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmludFBhaXJWYWx1ZSYmdC51aW50MzIoNjUpLmZpeGVkNjQoZS5pbnRQYWlyVmFsdWUpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGJ0KCkuUmVhZGVyP2U6bmV3KGJ0KCkuUmVhZGVyKShlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT1PYmplY3QuYXNzaWduKHt9LGNyKTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5pbnRWYWx1ZT1uLmludDMyKCk7YnJlYWs7Y2FzZSAyOmkubG9uZ1ZhbHVlPUVyKG4uaW50NjQoKSk7YnJlYWs7Y2FzZSAzOmkuZmxvYXRWYWx1ZT1uLmZsb2F0KCk7YnJlYWs7Y2FzZSA5OmkuZG91YmxlVmFsdWU9bi5kb3VibGUoKTticmVhaztjYXNlIDQ6aS5ib29sVmFsdWU9bi5ib29sKCk7YnJlYWs7Y2FzZSA1Omkuc3RyaW5nVmFsdWU9bi5zdHJpbmcoKTticmVhaztjYXNlIDY6aS5hbnlWYWx1ZT1yci5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDc6aS5tYXBWYWx1ZT1zci5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDg6aS5pbnRQYWlyVmFsdWU9RXIobi5maXhlZDY0KCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LGNyKTtyZXR1cm4gdm9pZCAwIT09ZS5pbnRWYWx1ZSYmbnVsbCE9PWUuaW50VmFsdWU/dC5pbnRWYWx1ZT1lLmludFZhbHVlOnQuaW50VmFsdWU9dm9pZCAwLHZvaWQgMCE9PWUubG9uZ1ZhbHVlJiZudWxsIT09ZS5sb25nVmFsdWU/dC5sb25nVmFsdWU9ZS5sb25nVmFsdWU6dC5sb25nVmFsdWU9dm9pZCAwLHZvaWQgMCE9PWUuZmxvYXRWYWx1ZSYmbnVsbCE9PWUuZmxvYXRWYWx1ZT90LmZsb2F0VmFsdWU9ZS5mbG9hdFZhbHVlOnQuZmxvYXRWYWx1ZT12b2lkIDAsdm9pZCAwIT09ZS5kb3VibGVWYWx1ZSYmbnVsbCE9PWUuZG91YmxlVmFsdWU/dC5kb3VibGVWYWx1ZT1lLmRvdWJsZVZhbHVlOnQuZG91YmxlVmFsdWU9dm9pZCAwLHZvaWQgMCE9PWUuYm9vbFZhbHVlJiZudWxsIT09ZS5ib29sVmFsdWU/dC5ib29sVmFsdWU9ZS5ib29sVmFsdWU6dC5ib29sVmFsdWU9dm9pZCAwLHZvaWQgMCE9PWUuc3RyaW5nVmFsdWUmJm51bGwhPT1lLnN0cmluZ1ZhbHVlP3Quc3RyaW5nVmFsdWU9ZS5zdHJpbmdWYWx1ZTp0LnN0cmluZ1ZhbHVlPXZvaWQgMCx2b2lkIDAhPT1lLmFueVZhbHVlJiZudWxsIT09ZS5hbnlWYWx1ZT90LmFueVZhbHVlPXJyLmZyb21QYXJ0aWFsKGUuYW55VmFsdWUpOnQuYW55VmFsdWU9dm9pZCAwLHZvaWQgMCE9PWUubWFwVmFsdWUmJm51bGwhPT1lLm1hcFZhbHVlP3QubWFwVmFsdWU9c3IuZnJvbVBhcnRpYWwoZS5tYXBWYWx1ZSk6dC5tYXBWYWx1ZT12b2lkIDAsdm9pZCAwIT09ZS5pbnRQYWlyVmFsdWUmJm51bGwhPT1lLmludFBhaXJWYWx1ZT90LmludFBhaXJWYWx1ZT1lLmludFBhaXJWYWx1ZTp0LmludFBhaXJWYWx1ZT12b2lkIDAsdH19O3ZhciB1cixkcixmcixwcixtcixocix2cixncix5cj0oKCk9PntpZih2b2lkIDAhPT15cilyZXR1cm4geXI7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYpcmV0dXJuIHNlbGY7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93O2lmKHZvaWQgMCE9PW4uZylyZXR1cm4gbi5nO3Rocm93XCJVbmFibGUgdG8gbG9jYXRlIGdsb2JhbCBvYmplY3RcIn0pKCk7ZnVuY3Rpb24gRXIoZSl7aWYoZS5ndChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikpdGhyb3cgbmV3IHlyLkVycm9yKFwiVmFsdWUgaXMgbGFyZ2VyIHRoYW4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcIik7cmV0dXJuIGUudG9OdW1iZXIoKX1idCgpLnV0aWwuTG9uZyE9PUl0KCkmJihidCgpLnV0aWwuTG9uZz1JdCgpLGJ0KCkuY29uZmlndXJlKCkpLGZ1bmN0aW9uKGUpe2VbZS5VTktOT1dOX0NPTlRFWFRfUExBVEZPUk09MF09XCJVTktOT1dOX0NPTlRFWFRfUExBVEZPUk1cIixlW2UuSU9TX1BMQVRGT1JNPTFdPVwiSU9TX1BMQVRGT1JNXCIsZVtlLkFORFJPSURfUExBVEZPUk09Ml09XCJBTkRST0lEX1BMQVRGT1JNXCIsZVtlLlNFUlZFUl9QTEFURk9STT0zXT1cIlNFUlZFUl9QTEFURk9STVwiLGVbZS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCJ9KHVyfHwodXI9e30pKSwoZ3I9ZHJ8fChkcj17fSkpW2dyLlVOS05PV05fT1BFUkFUT1I9MF09XCJVTktOT1dOX09QRVJBVE9SXCIsZ3JbZ3IuQU5EPTFdPVwiQU5EXCIsZ3JbZ3IuT1I9Ml09XCJPUlwiLGdyW2dyLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIiwodnI9ZnJ8fChmcj17fSkpW3ZyLlVOS05PV05fUFJFRElDQVRFX09QRVJBVE9SPTBdPVwiVU5LTk9XTl9QUkVESUNBVEVfT1BFUkFUT1JcIix2clt2ci5FUVVBTD0xXT1cIkVRVUFMXCIsdnJbdnIuTk9UX0VRVUFMPTJdPVwiTk9UX0VRVUFMXCIsdnJbdnIuR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPPTNdPVwiR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPXCIsdnJbdnIuTEVTU19USEFOX09SX0VRVUFMX1RPPTRdPVwiTEVTU19USEFOX09SX0VRVUFMX1RPXCIsdnJbdnIuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwiLChocj1wcnx8KHByPXt9KSlbaHIuVU5LTk9XTl9QUk9QRVJUWT0wXT1cIlVOS05PV05fUFJPUEVSVFlcIixocltoci5CQVRURVJZX0xFVkVMPTFdPVwiQkFUVEVSWV9MRVZFTFwiLGhyW2hyLklTX09GRkxJTkU9Ml09XCJJU19PRkZMSU5FXCIsaHJbaHIuSVNfQ0hBUkdJTkc9M109XCJJU19DSEFSR0lOR1wiLGhyW2hyLkJBTkRXSURUSD00XT1cIkJBTkRXSURUSFwiLGhyW2hyLkRJU0tfU0laRT01XT1cIkRJU0tfU0laRVwiLGhyW2hyLkRJU0tfQVZBSUxBQkxFPTZdPVwiRElTS19BVkFJTEFCTEVcIixocltoci5NRURJQV9UWVBFX0RFUFJFQ0FURUQ9N109XCJNRURJQV9UWVBFX0RFUFJFQ0FURURcIixocltoci5JU19QVUJMSUNfU1RPUlk9OF09XCJJU19QVUJMSUNfU1RPUllcIixocltoci5JU19PRkZJQ0lBTF9TVE9SWT05XT1cIklTX09GRklDSUFMX1NUT1JZXCIsaHJbaHIuQ0FNRVJBX0RJUkVDVElPTj0xMF09XCJDQU1FUkFfRElSRUNUSU9OXCIsaHJbaHIuQ0FNRVJBX0NPTlRFWFQ9MTFdPVwiQ0FNRVJBX0NPTlRFWFRcIixocltoci5DQU1FUkFfQVBJPTEyXT1cIkNBTUVSQV9BUElcIixocltoci5DQU1FUkFfRkxBU0hfU1RBVEU9MTNdPVwiQ0FNRVJBX0ZMQVNIX1NUQVRFXCIsaHJbaHIuU05BUF9TT1VSQ0U9MTRdPVwiU05BUF9TT1VSQ0VcIixocltoci5MRUdBQ1lfTVVTSFJPT01fQ09OVEVOVF9UWVBFPTE1XT1cIkxFR0FDWV9NVVNIUk9PTV9DT05URU5UX1RZUEVcIixocltoci5VUExPQURfQkFORFdJRFRIPTE2XT1cIlVQTE9BRF9CQU5EV0lEVEhcIixocltoci5DQU1FUkEyX0xFVkVMPTE3XT1cIkNBTUVSQTJfTEVWRUxcIixocltoci5DQU1FUkFfTklHSFRfTU9ERV9TVEFURT0xOF09XCJDQU1FUkFfTklHSFRfTU9ERV9TVEFURVwiLGhyW2hyLlVTRVJfTEFOR1VBR0U9MTldPVwiVVNFUl9MQU5HVUFHRVwiLGhyW2hyLlZJREVPX0RVUkFUSU9OPTIwXT1cIlZJREVPX0RVUkFUSU9OXCIsaHJbaHIuUkVBTFRJTUVfTU9CSUxFX05FVFdPUktfR0VORVJBVElPTj0yMV09XCJSRUFMVElNRV9NT0JJTEVfTkVUV09SS19HRU5FUkFUSU9OXCIsaHJbaHIuUkVBTFRJTUVfTkVUV09SS19UWVBFPTIyXT1cIlJFQUxUSU1FX05FVFdPUktfVFlQRVwiLGhyW2hyLlJFQUxUSU1FX05FVFdPUktfSVNfTUVURVJFRD0yM109XCJSRUFMVElNRV9ORVRXT1JLX0lTX01FVEVSRURcIixocltoci5SRUFMVElNRV9ORVRXT1JLX0lTX1JPQU1JTkc9MjRdPVwiUkVBTFRJTUVfTkVUV09SS19JU19ST0FNSU5HXCIsaHJbaHIuQ0FNRVJBX0lTX0ZJUlNUX0NBUFRVUkU9MjVdPVwiQ0FNRVJBX0lTX0ZJUlNUX0NBUFRVUkVcIixocltoci5QSUNUVVJFX01PREU9MjZdPVwiUElDVFVSRV9NT0RFXCIsaHJbaHIuQk9MVF9VU0VfQ0FTRT0yN109XCJCT0xUX1VTRV9DQVNFXCIsaHJbaHIuQk9MVF9DRE5fRVhQRVJJTUVOVEFUSU9OX0lEPTI4XT1cIkJPTFRfQ0ROX0VYUEVSSU1FTlRBVElPTl9JRFwiLGhyW2hyLk1JTlNfU0lOQ0VfTEFTVF9MRU5TX0FDVElWQVRJT049MjldPVwiTUlOU19TSU5DRV9MQVNUX0xFTlNfQUNUSVZBVElPTlwiLGhyW2hyLk1JTlNfU0lOQ0VfTEFTVF9TTkFQUEFCTEVfTEVOU19BQ1RJVkFUSU9OPTMwXT1cIk1JTlNfU0lOQ0VfTEFTVF9TTkFQUEFCTEVfTEVOU19BQ1RJVkFUSU9OXCIsaHJbaHIuREFZU19TSU5DRV9MQVNUX0xPR0lOX09SX09QRU49MzFdPVwiREFZU19TSU5DRV9MQVNUX0xPR0lOX09SX09QRU5cIixocltoci5TUEVDVEFDTEVTX1ZFUlNJT049MzJdPVwiU1BFQ1RBQ0xFU19WRVJTSU9OXCIsaHJbaHIuU1RJQ0tZX01BWF9DT05ORUNUSU9OX1RZUEU9MzNdPVwiU1RJQ0tZX01BWF9DT05ORUNUSU9OX1RZUEVcIixocltoci5XSVRIX0FOSU1BVEVEX09WRVJMQVk9MzRdPVwiV0lUSF9BTklNQVRFRF9PVkVSTEFZXCIsaHJbaHIuRVNUSU1BVEVEX0RVUkFUSU9OX0ZPUl9FVkVOVF9NUz0zNV09XCJFU1RJTUFURURfRFVSQVRJT05fRk9SX0VWRU5UX01TXCIsaHJbaHIuVVJMPTM2XT1cIlVSTFwiLGhyW2hyLk1FRElBX1NPVVJDRT0zN109XCJNRURJQV9TT1VSQ0VcIixocltoci5BU1NFVF9UWVBFPTM4XT1cIkFTU0VUX1RZUEVcIixocltoci5CT0xUX0lTX0NPTlRFTlRfUE9QVUxBUj0zOV09XCJCT0xUX0lTX0NPTlRFTlRfUE9QVUxBUlwiLGhyW2hyLkNBUFRVUkVfTU9ERT00MF09XCJDQVBUVVJFX01PREVcIixocltoci5WUDlfU09GVFdBUkVfREVDT0RJTkdfU1VQUE9SVEVEPTQxXT1cIlZQOV9TT0ZUV0FSRV9ERUNPRElOR19TVVBQT1JURURcIixocltoci5BVjFfU09GVFdBUkVfREVDT0RJTkdfU1VQUE9SVEVEPTQyXT1cIkFWMV9TT0ZUV0FSRV9ERUNPRElOR19TVVBQT1JURURcIixocltoci5XSVRIX01VU0lDPTQzXT1cIldJVEhfTVVTSUNcIixocltoci5GRUFUVVJFX1BST1ZJREVEX1NJWkU9NDRdPVwiRkVBVFVSRV9QUk9WSURFRF9TSVpFXCIsaHJbaHIuTUVESUFfVFlQRT00NV09XCJNRURJQV9UWVBFXCIsaHJbaHIuU0NBTk5FRF9DQVRFR09SWV9JRFM9NDZdPVwiU0NBTk5FRF9DQVRFR09SWV9JRFNcIixocltoci5DT05URU5UX1ZJRVdfU09VUkNFPTQ3XT1cIkNPTlRFTlRfVklFV19TT1VSQ0VcIixocltoci5SRUNJUElFTlRTX1NVUFBPUlRfSEVWQz00OF09XCJSRUNJUElFTlRTX1NVUFBPUlRfSEVWQ1wiLGhyW2hyLkNPR05BQ19BUFBfSUQ9NDldPVwiQ09HTkFDX0FQUF9JRFwiLGhyW2hyLkVNQUlMX1ZFUklGSUVEPTUwXT1cIkVNQUlMX1ZFUklGSUVEXCIsaHJbaHIuUEhPTkVfVkVSSUZJRUQ9NTFdPVwiUEhPTkVfVkVSSUZJRURcIixocltoci5OT1RJRklDQVRJT05fUEVSTV9HUkFOVEVEPTUyXT1cIk5PVElGSUNBVElPTl9QRVJNX0dSQU5URURcIixocltoci5DT05UQUNUX1BFUk1fR1JBTlRFRD01M109XCJDT05UQUNUX1BFUk1fR1JBTlRFRFwiLGhyW2hyLk1VVFVBTF9GUklFTkRTX0NPVU5UPTU0XT1cIk1VVFVBTF9GUklFTkRTX0NPVU5UXCIsaHJbaHIuR1JPVVBTX0NPVU5UPTU1XT1cIkdST1VQU19DT1VOVFwiLGhyW2hyLkhBU19OT05fVEVBTV9TTkFQQ0hBVF9DT05WRVJTQVRJT05TPTU2XT1cIkhBU19OT05fVEVBTV9TTkFQQ0hBVF9DT05WRVJTQVRJT05TXCIsaHJbaHIuUExBWUJBQ0tfSVRFTV9UWVBFPTU3XT1cIlBMQVlCQUNLX0lURU1fVFlQRVwiLGhyW2hyLlNVUF9CT09MRUFOX1BST1BFUlRZPTU4XT1cIlNVUF9CT09MRUFOX1BST1BFUlRZXCIsaHJbaHIuU1VQX0lOVEVHRVJfUFJPUEVSVFk9NTldPVwiU1VQX0lOVEVHRVJfUFJPUEVSVFlcIixocltoci5TVVBfTE9OR19QUk9QRVJUWT02MF09XCJTVVBfTE9OR19QUk9QRVJUWVwiLGhyW2hyLlNVUF9TVFJJTkdfUFJPUEVSVFk9NjFdPVwiU1VQX1NUUklOR19QUk9QRVJUWVwiLGhyW2hyLlNVUF9ET1VCTEVfUFJPUEVSVFk9NjJdPVwiU1VQX0RPVUJMRV9QUk9QRVJUWVwiLGhyW2hyLlNVUF9NSUxMSVNfUFJPUEVSVFlfVE9fTk9XPTYzXT1cIlNVUF9NSUxMSVNfUFJPUEVSVFlfVE9fTk9XXCIsaHJbaHIuSEFTX1VTRURfU1BFQ1RBQ0xFUz02NF09XCJIQVNfVVNFRF9TUEVDVEFDTEVTXCIsaHJbaHIuU1VQX1NFQ1NfUFJPUEVSVFlfVE9fTk9XPTY1XT1cIlNVUF9TRUNTX1BST1BFUlRZX1RPX05PV1wiLGhyW2hyLkJPTFRfQ0xJRU5UX0FQUF9TVEFURT02Nl09XCJCT0xUX0NMSUVOVF9BUFBfU1RBVEVcIixocltoci5FTUFJTF9TRVQ9NjddPVwiRU1BSUxfU0VUXCIsaHJbaHIuQklUTU9KSV9TRVQ9NjhdPVwiQklUTU9KSV9TRVRcIixocltoci5RVUlDS19UQVBfQ0FNRVJBX1NVUFBPUlRFRF9FTkFCTEVEPTY5XT1cIlFVSUNLX1RBUF9DQU1FUkFfU1VQUE9SVEVEX0VOQUJMRURcIixocltoci5IQVNfQUREX0ZSSUVORFNfUkVRVUVTVD03MF09XCJIQVNfQUREX0ZSSUVORFNfUkVRVUVTVFwiLGhyW2hyLkFQUF9MQVVOQ0hfRlJPTV9QVVNIPTcxXT1cIkFQUF9MQVVOQ0hfRlJPTV9QVVNIXCIsaHJbaHIuQVBQX0xBVU5DSF9UWVBFPTcyXT1cIkFQUF9MQVVOQ0hfVFlQRVwiLGhyW2hyLkJJTExCT0FSRF9DQU1QQUlHTl9MT0NBTF9JTVBSRVNTSU9OX0NPVU5UPTczXT1cIkJJTExCT0FSRF9DQU1QQUlHTl9MT0NBTF9JTVBSRVNTSU9OX0NPVU5UXCIsaHJbaHIuQklMTEJPQVJEX0NBTVBBSUdOX0xPQ0FMX0xBU1RfSU1QUkVTU0lPTl9USU1FX1NFQ1NfVE9fTk9XPTc0XT1cIkJJTExCT0FSRF9DQU1QQUlHTl9MT0NBTF9MQVNUX0lNUFJFU1NJT05fVElNRV9TRUNTX1RPX05PV1wiLGhyW2hyLkJJTExCT0FSRF9DQU1QQUlHTl9MT0NBTF9DT05USU5VT1VTX0RJU01JU1NfQ09VTlQ9NzVdPVwiQklMTEJPQVJEX0NBTVBBSUdOX0xPQ0FMX0NPTlRJTlVPVVNfRElTTUlTU19DT1VOVFwiLGhyW2hyLkZTVF9OVU1fSU5fQVBQX1dBUk5JTkdTPTc2XT1cIkZTVF9OVU1fSU5fQVBQX1dBUk5JTkdTXCIsaHJbaHIuRlNUX1NIT1VMRF9DSEFOR0VfUEFTU1dPUkQ9NzddPVwiRlNUX1NIT1VMRF9DSEFOR0VfUEFTU1dPUkRcIixocltoci5GU1RfSVNfQkFDS0dST1VORF9DSEVDSz03OF09XCJGU1RfSVNfQkFDS0dST1VORF9DSEVDS1wiLGhyW2hyLkFVRElPX1JFQ09SRF9QRVJNX0dSQU5URUQ9NzldPVwiQVVESU9fUkVDT1JEX1BFUk1fR1JBTlRFRFwiLGhyW2hyLk1VVFVBTF9GUklFTkRTX1dJVEhfQklSVEhEQVlfQ09VTlQ9ODBdPVwiTVVUVUFMX0ZSSUVORFNfV0lUSF9CSVJUSERBWV9DT1VOVFwiLGhyW2hyLkJJTExCT0FSRF9DQU1QQUlHTl9MT0NBTF9ESVNNSVNTX0NPVU5UPTgxXT1cIkJJTExCT0FSRF9DQU1QQUlHTl9MT0NBTF9ESVNNSVNTX0NPVU5UXCIsaHJbaHIuVVNFX1ZFUlRJQ0FMX05BVklHQVRJT049ODJdPVwiVVNFX1ZFUlRJQ0FMX05BVklHQVRJT05cIixocltoci5GUkVFQUJMRV9ESVNLX0FWQUlMQUJMRT04M109XCJGUkVFQUJMRV9ESVNLX0FWQUlMQUJMRVwiLGhyW2hyLk1FTU9SSUVTX0NPVU5UPTg0XT1cIk1FTU9SSUVTX0NPVU5UXCIsaHJbaHIuREVWSUNFX01PREVMPTg1XT1cIkRFVklDRV9NT0RFTFwiLGhyW2hyLkNPVU5UUlk9ODZdPVwiQ09VTlRSWVwiLGhyW2hyLk9TPTg3XT1cIk9TXCIsaHJbaHIuT1NfVkVSU0lPTj04OF09XCJPU19WRVJTSU9OXCIsaHJbaHIuQVBQX1ZFUlNJT049ODldPVwiQVBQX1ZFUlNJT05cIixocltoci5CVUlMRF9GTEFWT1I9OTBdPVwiQlVJTERfRkxBVk9SXCIsaHJbaHIuVVNFUl9JRD05MV09XCJVU0VSX0lEXCIsaHJbaHIuTE9DQUxFPTkyXT1cIkxPQ0FMRVwiLGhyW2hyLkRFVklDRV9DTFVTVEVSPTkzXT1cIkRFVklDRV9DTFVTVEVSXCIsaHJbaHIuREVWSUNFX0JSQU5EPTk0XT1cIkRFVklDRV9CUkFORFwiLGhyW2hyLklTX0VNUExPWUVFPTk1XT1cIklTX0VNUExPWUVFXCIsaHJbaHIuVVNFUk5BTUU9OTZdPVwiVVNFUk5BTUVcIixocltoci5JU19URVNUX1VTRVI9OTddPVwiSVNfVEVTVF9VU0VSXCIsaHJbaHIuVVNFUl9QUk9GSUxFPTk4XT1cIlVTRVJfUFJPRklMRVwiLGhyW2hyLlNDUkVFTl9XSURUSD05OV09XCJTQ1JFRU5fV0lEVEhcIixocltoci5TQ1JFRU5fSEVJR0hUPTEwMF09XCJTQ1JFRU5fSEVJR0hUXCIsaHJbaHIuSEVWQ19TVVBQT1JUPTEwMV09XCJIRVZDX1NVUFBPUlRcIixocltoci5ORVRXT1JLX1RZUEU9MTAyXT1cIk5FVFdPUktfVFlQRVwiLGhyW2hyLk1BWF9WSURFT19XSURUSD0xMDNdPVwiTUFYX1ZJREVPX1dJRFRIXCIsaHJbaHIuTUFYX1ZJREVPX0hFSUdIVD0xMDRdPVwiTUFYX1ZJREVPX0hFSUdIVFwiLGhyW2hyLklTX05FVFdPUktfTUVURVJFRD0xMDVdPVwiSVNfTkVUV09SS19NRVRFUkVEXCIsaHJbaHIuSVNfUk9BTUlORz0xMDZdPVwiSVNfUk9BTUlOR1wiLGhyW2hyLkFQUF9FTkdBR0VNRU5UX0xFVkVMPTEwN109XCJBUFBfRU5HQUdFTUVOVF9MRVZFTFwiLGhyW2hyLkNPTU1VTklDQVRJT05fRU5HQUdFTUVOVF9MRVZFTD0xMDhdPVwiQ09NTVVOSUNBVElPTl9FTkdBR0VNRU5UX0xFVkVMXCIsaHJbaHIuRlJJRU5EX1NUT1JZX0VOR0FHRU1FTlRfTEVWRUw9MTA5XT1cIkZSSUVORF9TVE9SWV9FTkdBR0VNRU5UX0xFVkVMXCIsaHJbaHIuUFVCTElDX1VTRVJfU1RPUllfRU5HQUdFTUVOVF9MRVZFTD0xMTBdPVwiUFVCTElDX1VTRVJfU1RPUllfRU5HQUdFTUVOVF9MRVZFTFwiLGhyW2hyLlBVQkxJU0hFUl9TVE9SWV9FTkdBR0VNRU5UX0xFVkVMPTExMV09XCJQVUJMSVNIRVJfU1RPUllfRU5HQUdFTUVOVF9MRVZFTFwiLGhyW2hyLkxFTlNfRU5HQUdFTUVOVF9MRVZFTD0xMTJdPVwiTEVOU19FTkdBR0VNRU5UX0xFVkVMXCIsaHJbaHIuTk9OX0ZSSUVORF9TVE9SWV9FTkdBR0VNRU5UX0xFVkVMPTExM109XCJOT05fRlJJRU5EX1NUT1JZX0VOR0FHRU1FTlRfTEVWRUxcIixocltoci5GT0xMT1dFUl9TSVpFX0xFVkVMPTExNF09XCJGT0xMT1dFUl9TSVpFX0xFVkVMXCIsaHJbaHIuREFZU19TSU5DRV9DUkVBVElPTj0xMTVdPVwiREFZU19TSU5DRV9DUkVBVElPTlwiLGhyW2hyLlVTRVJfUEVSU09OQT0xMTZdPVwiVVNFUl9QRVJTT05BXCIsaHJbaHIuVVNFUl9DUkVBVElPTl9USU1FPTExN109XCJVU0VSX0NSRUFUSU9OX1RJTUVcIixocltoci5NT0JJTEVfTkVUV09SS19UWVBFPTExOF09XCJNT0JJTEVfTkVUV09SS19UWVBFXCIsaHJbaHIuQUdHUkVHQVRFRF9VU0VSX0JBTkRXSURUSD0xMTldPVwiQUdHUkVHQVRFRF9VU0VSX0JBTkRXSURUSFwiLGhyW2hyLkxFTlNfQ0xVU1RFUl9CSUFTRUQ9MTIwXT1cIkxFTlNfQ0xVU1RFUl9CSUFTRURcIixocltoci5MRU5TX0NMVVNURVJfTE9HPTEyMV09XCJMRU5TX0NMVVNURVJfTE9HXCIsaHJbaHIuTEVOU19DTFVTVEVSX09SSUc9MTIyXT1cIkxFTlNfQ0xVU1RFUl9PUklHXCIsaHJbaHIuTEVOU19DTFVTVEVSX09SSUdfND0xMjNdPVwiTEVOU19DTFVTVEVSX09SSUdfNFwiLGhyW2hyLkxFTlNfQ0xVU1RFUl9CSUFTRURfTE9HPTEyNF09XCJMRU5TX0NMVVNURVJfQklBU0VEX0xPR1wiLGhyW2hyLkFQUF9MT0NBTEU9MTI1XT1cIkFQUF9MT0NBTEVcIixocltoci5ERVZJQ0VfQ09NTU9OX05BTUU9MTI2XT1cIkRFVklDRV9DT01NT05fTkFNRVwiLGhyW2hyLlVTRVJfRlJJRU5EX0NPVU5UPTEyN109XCJVU0VSX0ZSSUVORF9DT1VOVFwiLGhyW2hyLkw5MF9DT1VOVFJZPTEyOF09XCJMOTBfQ09VTlRSWVwiLGhyW2hyLlNUVUI9MTI5XT1cIlNUVUJcIixocltoci5JU19UUlVFPTEzMF09XCJJU19UUlVFXCIsaHJbaHIuU1RPUllfUE9TVF9SQVRJTz0xMzFdPVwiU1RPUllfUE9TVF9SQVRJT1wiLGhyW2hyLkdFTkRFUj0xMzJdPVwiR0VOREVSXCIsaHJbaHIuSU5GRVJSRURfQUdFX0JVQ0tFVD0xMzNdPVwiSU5GRVJSRURfQUdFX0JVQ0tFVFwiLGhyW2hyLlNUT1JJRVM9MTM0XT1cIlNUT1JJRVNcIixocltoci5TRU5EUz0xMzVdPVwiU0VORFNcIixocltoci5TTkFQX0NSRUFURV9MNz0xMzZdPVwiU05BUF9DUkVBVEVfTDdcIixocltoci5TVE9SWV9QT1NUX0w3PTEzN109XCJTVE9SWV9QT1NUX0w3XCIsaHJbaHIuQ09NTVVOSUNBVElPTl9MNz0xMzhdPVwiQ09NTVVOSUNBVElPTl9MN1wiLGhyW2hyLkRGX0w3PTEzOV09XCJERl9MN1wiLGhyW2hyLkFQUF9MNz0xNDBdPVwiQVBQX0w3XCIsaHJbaHIuREFZU19TSU5DRV9DUkVBVElPTl9CVUNLRVQ9MTQxXT1cIkRBWVNfU0lOQ0VfQ1JFQVRJT05fQlVDS0VUXCIsaHJbaHIuQklESVJFQ1RJT05BTF9GUklFTkRfU1RBVFVTPTE0Ml09XCJCSURJUkVDVElPTkFMX0ZSSUVORF9TVEFUVVNcIixocltoci5TVE9SWV9QT1NUX1BSRURJQ1RJT049MTQzXT1cIlNUT1JZX1BPU1RfUFJFRElDVElPTlwiLGhyW2hyLkFQUF9PUEVOUz0xNDRdPVwiQVBQX09QRU5TXCIsaHJbaHIuTEVOU19TV0lQRVM9MTQ1XT1cIkxFTlNfU1dJUEVTXCIsaHJbaHIuTEVOU19TTkFQUz0xNDZdPVwiTEVOU19TTkFQU1wiLGhyW2hyLkxFTlNfT1BTPTE0N109XCJMRU5TX09QU1wiLGhyW2hyLlcxX0FQUF9PUEVOUz0xNDhdPVwiVzFfQVBQX09QRU5TXCIsaHJbaHIuVzFfTEVOU19TV0lQRVM9MTQ5XT1cIlcxX0xFTlNfU1dJUEVTXCIsaHJbaHIuVzFfTEVOU19TTkFQUz0xNTBdPVwiVzFfTEVOU19TTkFQU1wiLGhyW2hyLlcxX0xFTlNfT1BTPTE1MV09XCJXMV9MRU5TX09QU1wiLGhyW2hyLlcyX0FQUF9PUEVOUz0xNTJdPVwiVzJfQVBQX09QRU5TXCIsaHJbaHIuVzJfTEVOU19TV0lQRVM9MTUzXT1cIlcyX0xFTlNfU1dJUEVTXCIsaHJbaHIuVzJfTEVOU19TTkFQUz0xNTRdPVwiVzJfTEVOU19TTkFQU1wiLGhyW2hyLlcyX0xFTlNfT1BTPTE1NV09XCJXMl9MRU5TX09QU1wiLGhyW2hyLlczNF9BUFBfT1BFTlM9MTU2XT1cIlczNF9BUFBfT1BFTlNcIixocltoci5XMzRfTEVOU19TV0lQRVM9MTU3XT1cIlczNF9MRU5TX1NXSVBFU1wiLGhyW2hyLlczNF9MRU5TX1NOQVBTPTE1OF09XCJXMzRfTEVOU19TTkFQU1wiLGhyW2hyLlczNF9MRU5TX09QUz0xNTldPVwiVzM0X0xFTlNfT1BTXCIsaHJbaHIuTEVOU19TV0lQRVNfUFJFRElDVElPTj0xNjBdPVwiTEVOU19TV0lQRVNfUFJFRElDVElPTlwiLGhyW2hyLlJFR0lTVFJBVElPTl9DT1VOVFJZPTE2MV09XCJSRUdJU1RSQVRJT05fQ09VTlRSWVwiLGhyW2hyLklQX0FTTj0xNjJdPVwiSVBfQVNOXCIsaHJbaHIuSVBfUkVHSU9OPTE2M109XCJJUF9SRUdJT05cIixocltoci5JUF9DSVRZPTE2NF09XCJJUF9DSVRZXCIsaHJbaHIuSEFTX1VTRVJfSUQ9MTY1XT1cIkhBU19VU0VSX0lEXCIsaHJbaHIuSEFTX0JJVE1PSkk9MTY2XT1cIkhBU19CSVRNT0pJXCIsaHJbaHIuTlVNX0FQUF9PUEVOU19MQVNUXzhfREFZUz0xNjddPVwiTlVNX0FQUF9PUEVOU19MQVNUXzhfREFZU1wiLGhyW2hyLk5VTV9GRUFUVVJFX1NUT1JZX1ZJRVdfREFZU19MNz0xNjhdPVwiTlVNX0ZFQVRVUkVfU1RPUllfVklFV19EQVlTX0w3XCIsaHJbaHIuTlVNX0ZFQVRVUkVfU1RPUllfU1lOQ19EQVlTX0w3PTE2OV09XCJOVU1fRkVBVFVSRV9TVE9SWV9TWU5DX0RBWVNfTDdcIixocltoci5IRVhBR09OX05OX1NVUFBPUlRFRF9WRVJTSU9OPTE3MF09XCJIRVhBR09OX05OX1NVUFBPUlRFRF9WRVJTSU9OXCIsaHJbaHIuTkVUV09SS19RVUFMSVRZPTE3MV09XCJORVRXT1JLX1FVQUxJVFlcIixocltoci5ERVZJQ0VfTUVNT1JZX01CPTE3Ml09XCJERVZJQ0VfTUVNT1JZX01CXCIsaHJbaHIuREVWSUNFX0dMX1ZFUlNJT049MTczXT1cIkRFVklDRV9HTF9WRVJTSU9OXCIsaHJbaHIuU05BUF9QUk9fU1RBVFVTPTE3NF09XCJTTkFQX1BST19TVEFUVVNcIixocltoci5ERVZJQ0VfVlA5X0RFQ09ESU5HX1NVUFBPUlQ9MTc1XT1cIkRFVklDRV9WUDlfREVDT0RJTkdfU1VQUE9SVFwiLGhyW2hyLkFWR19GUklFTkRfU1RPUllfVklFV19DT1VOVF9MNz0xNzZdPVwiQVZHX0ZSSUVORF9TVE9SWV9WSUVXX0NPVU5UX0w3XCIsaHJbaHIuR0FNRV9KT0lOX1RJTUU9MTc3XT1cIkdBTUVfSk9JTl9USU1FXCIsaHJbaHIuR0FNRV9MQVNUX0FDVElWRV9USU1FPTE3OF09XCJHQU1FX0xBU1RfQUNUSVZFX1RJTUVcIixocltoci5EQVlTX1NJTkNFX0ZJUlNUX0dBTUVfQUNUSVZJVFk9MTc5XT1cIkRBWVNfU0lOQ0VfRklSU1RfR0FNRV9BQ1RJVklUWVwiLGhyW2hyLkRBWVNfU0lOQ0VfTEFTVF9HQU1FX0FDVElWSVRZPTE4MF09XCJEQVlTX1NJTkNFX0xBU1RfR0FNRV9BQ1RJVklUWVwiLGhyW2hyLlBGX1BBR0VfU0VTU0lPTlNfV0lUSF9MT05HX0lNUD0xODFdPVwiUEZfUEFHRV9TRVNTSU9OU19XSVRIX0xPTkdfSU1QXCIsaHJbaHIuV0lSRUxFU1NfQ0FSUklFUj0xODJdPVwiV0lSRUxFU1NfQ0FSUklFUlwiLGhyW2hyLk1JTklTX0pPSU5fVElNRT0xODNdPVwiTUlOSVNfSk9JTl9USU1FXCIsaHJbaHIuTUlOSVNfTEFTVF9BQ1RJVkVfVElNRT0xODRdPVwiTUlOSVNfTEFTVF9BQ1RJVkVfVElNRVwiLGhyW2hyLkRBWVNfU0lOQ0VfRklSU1RfTUlOSVNfQUNUSVZJVFk9MTg1XT1cIkRBWVNfU0lOQ0VfRklSU1RfTUlOSVNfQUNUSVZJVFlcIixocltoci5EQVlTX1NJTkNFX0xBU1RfTUlOSVNfQUNUSVZJVFk9MTg2XT1cIkRBWVNfU0lOQ0VfTEFTVF9NSU5JU19BQ1RJVklUWVwiLGhyW2hyLkRFVklDRV9BVjFfREVDT0RJTkdfU1VQUE9SVD0xODddPVwiREVWSUNFX0FWMV9ERUNPRElOR19TVVBQT1JUXCIsaHJbaHIuQVBQX1BBQ0tBR0VfSU5TVEFMTEVSPTE4OF09XCJBUFBfUEFDS0FHRV9JTlNUQUxMRVJcIixocltoci5TVE9SWV9WSUVXU181VEhfVEFCX0VOR0FHRU1FTlRfTEVWRUw9MTg5XT1cIlNUT1JZX1ZJRVdTXzVUSF9UQUJfRU5HQUdFTUVOVF9MRVZFTFwiLGhyW2hyLlJFUE9SVEVEX0FHRT0xOTBdPVwiUkVQT1JURURfQUdFXCIsaHJbaHIuQU5EUk9JRF9NT0JJTEVfU0VSVklDRVNfUFJPVklERVI9MTkxXT1cIkFORFJPSURfTU9CSUxFX1NFUlZJQ0VTX1BST1ZJREVSXCIsaHJbaHIuSVNfQUNRVUlSRURfVVNFUj0xOTJdPVwiSVNfQUNRVUlSRURfVVNFUlwiLGhyW2hyLllEUEk9MTkzXT1cIllEUElcIixocltoci5CSURJUkVDVElPTkFMX0ZSSUVORF9TVEFUVVNfVkVMTFVNPTE5NF09XCJCSURJUkVDVElPTkFMX0ZSSUVORF9TVEFUVVNfVkVMTFVNXCIsaHJbaHIuT1JJR0lOPTE5NV09XCJPUklHSU5cIixocltoci5MRU5TQ09SRV9WRVJTSU9OPTE5Nl09XCJMRU5TQ09SRV9WRVJTSU9OXCIsaHJbaHIuU05BUEtJVF9BUFBfSUQ9MTk3XT1cIlNOQVBLSVRfQVBQX0lEXCIsaHJbaHIuR1BVPTE5OF09XCJHUFVcIixocltoci5DSElQU0VUX05BTUU9MTk5XT1cIkNISVBTRVRfTkFNRVwiLGhyW2hyLkNISVBTRVRfVkVSU0lPTj0yMDBdPVwiQ0hJUFNFVF9WRVJTSU9OXCIsaHJbaHIuSEFTX1pFUk9fSURGQT0yMDFdPVwiSEFTX1pFUk9fSURGQVwiLGhyW2hyLkxJTUlUX0FEX1RSQUNLSU5HPTIwMl09XCJMSU1JVF9BRF9UUkFDS0lOR1wiLGhyW2hyLkFUVF9BVVRIX1NUQVRVUz0yMDNdPVwiQVRUX0FVVEhfU1RBVFVTXCIsaHJbaHIuQ0FNRVJBMl9GUk9OVF9TU19HQUlOX09WRVJfVFBBPTIwNF09XCJDQU1FUkEyX0ZST05UX1NTX0dBSU5fT1ZFUl9UUEFcIixocltoci5BVFRBQ0hNRU5UX1RPT0xfVjI9MjA1XT1cIkFUVEFDSE1FTlRfVE9PTF9WMlwiLGhyW2hyLlVTRVJfUEVSU09OQV9WMz0yMDZdPVwiVVNFUl9QRVJTT05BX1YzXCIsaHJbaHIuU05BUFNfU0VORF9XSVRIX0hFVkM9MjA3XT1cIlNOQVBTX1NFTkRfV0lUSF9IRVZDXCIsaHJbaHIuU05BUFNfU0VORF9XSVRIT1VUX0hFVkM9MjA4XT1cIlNOQVBTX1NFTkRfV0lUSE9VVF9IRVZDXCIsaHJbaHIuQ0FNRVJBMl9OQVRJVkVfQ1JBU0hfT1ZFUl9DQU1FUkExPTIwOV09XCJDQU1FUkEyX05BVElWRV9DUkFTSF9PVkVSX0NBTUVSQTFcIixocltoci5DQU1FUkEyX0cyU19MQVRFTkNZX09WRVJfQ0FNRVJBMT0yMTBdPVwiQ0FNRVJBMl9HMlNfTEFURU5DWV9PVkVSX0NBTUVSQTFcIixocltoci5JU19JTlRFUk5BTD0yMTFdPVwiSVNfSU5URVJOQUxcIixocltoci5JU19XRUI9MjEyXT1cIklTX1dFQlwiLGhyW2hyLkFQUF9PUEVOX1RPX01BUD0yMTNdPVwiQVBQX09QRU5fVE9fTUFQXCIsaHJbaHIuQVBQX09QRU5fVE9fRlJJRU5EU0ZFRUQ9MjE0XT1cIkFQUF9PUEVOX1RPX0ZSSUVORFNGRUVEXCIsaHJbaHIuQVBQX09QRU5fVE9fTEVOU0VTPTIxNV09XCJBUFBfT1BFTl9UT19MRU5TRVNcIixocltoci5BUFBfT1BFTl9UT19NRU1PUklFUz0yMTZdPVwiQVBQX09QRU5fVE9fTUVNT1JJRVNcIixocltoci5BUFBfT1BFTl9UT19DT01NVU5JVFk9MjE3XT1cIkFQUF9PUEVOX1RPX0NPTU1VTklUWVwiLGhyW2hyLkFQUF9PUEVOX1RPX1NQT1RMSUdIVD0yMThdPVwiQVBQX09QRU5fVE9fU1BPVExJR0hUXCIsaHJbaHIuSVNfSU1QQUNURURfQllfUElOQ184OTM9MjE5XT1cIklTX0lNUEFDVEVEX0JZX1BJTkNfODkzXCIsaHJbaHIuREFZU19CRUZPUkVfQklSVEhEQVk9MjIwXT1cIkRBWVNfQkVGT1JFX0JJUlRIREFZXCIsaHJbaHIuSEFTX0JJUEE9MjIxXT1cIkhBU19CSVBBXCIsaHJbaHIuU1BPVExJR0hUX1NUT1JZX0VOR0FHRU1FTlRfU1RBVFVTPTIyMl09XCJTUE9UTElHSFRfU1RPUllfRU5HQUdFTUVOVF9TVEFUVVNcIixocltoci5JTkNMVVNJT05fUEFORUxfTUVNQkVSPTIyM109XCJJTkNMVVNJT05fUEFORUxfTUVNQkVSXCIsaHJbaHIuSEVWQ19IV19ERUNPREVSPTIyNF09XCJIRVZDX0hXX0RFQ09ERVJcIixocltoci5IRVZDX1NXX0RFQ09ERVI9MjI1XT1cIkhFVkNfU1dfREVDT0RFUlwiLGhyW2hyLkhBU0hfTVVSTVVSM18xMjhfTU9EXzEwMD0yMjZdPVwiSEFTSF9NVVJNVVIzXzEyOF9NT0RfMTAwXCIsaHJbaHIuSEFTX0FDVElWRV9TTkFQQ0hBVF9QTFVTPTIyN109XCJIQVNfQUNUSVZFX1NOQVBDSEFUX1BMVVNcIixocltoci5TTkFQX0tJVF9PQVVUSF9JRD0yMjhdPVwiU05BUF9LSVRfT0FVVEhfSURcIixocltoci5PUkdBTklaQVRJT05fVFlQRT0yMjldPVwiT1JHQU5JWkFUSU9OX1RZUEVcIixocltoci5DSFVOS19VUExPQURfU1VQUE9SVF9SRVFVSVJFRD0yMzBdPVwiQ0hVTktfVVBMT0FEX1NVUFBPUlRfUkVRVUlSRURcIixocltoci5DTE9VREZST05UX1BPUD0yMzFdPVwiQ0xPVURGUk9OVF9QT1BcIixocltoci5CSUxMQk9BUkRfQ0FNUEFJR05fTE9DQUxfRklSU1RfSU1QUkVTU0lPTl9USU1FX1NFQ1NfVE9fTk9XPTIzMl09XCJCSUxMQk9BUkRfQ0FNUEFJR05fTE9DQUxfRklSU1RfSU1QUkVTU0lPTl9USU1FX1NFQ1NfVE9fTk9XXCIsaHJbaHIuQklMTEJPQVJEX0NBTVBBSUdOX0xPQ0FMX0NMSUNLX0NPVU5UPTIzM109XCJCSUxMQk9BUkRfQ0FNUEFJR05fTE9DQUxfQ0xJQ0tfQ09VTlRcIixocltoci5CSUxMQk9BUkRfQ0FNUEFJR05fTE9DQUxfSU5URVJBQ1RJT05fQ09VTlQ9MjM0XT1cIkJJTExCT0FSRF9DQU1QQUlHTl9MT0NBTF9JTlRFUkFDVElPTl9DT1VOVFwiLGhyW2hyLkJJTExCT0FSRF9DQU1QQUlHTl9MT0NBTF9MQVNUX0lOVEVSQUNUSU9OX1RJTUVfU0VDU19UT19OT1c9MjM1XT1cIkJJTExCT0FSRF9DQU1QQUlHTl9MT0NBTF9MQVNUX0lOVEVSQUNUSU9OX1RJTUVfU0VDU19UT19OT1dcIixocltoci5GU1RfTE9DS19TQ1JFRU5fV0lER0VUX0JJTExCT0FSRF9MQVVOQ0hFRF9GUk9NX1BVU0g9MjM2XT1cIkZTVF9MT0NLX1NDUkVFTl9XSURHRVRfQklMTEJPQVJEX0xBVU5DSEVEX0ZST01fUFVTSFwiLGhyW2hyLldFQl9TQ1JFRU5fV0lEVEg9MjM3XT1cIldFQl9TQ1JFRU5fV0lEVEhcIixocltoci5XRUJfU0NSRUVOX0hFSUdIVD0yMzhdPVwiV0VCX1NDUkVFTl9IRUlHSFRcIixocltoci5TVVBfSU9TX0xPQ0tfU0NSRUVOX1dJREdFVF9FTkFCTEVEPTIzOV09XCJTVVBfSU9TX0xPQ0tfU0NSRUVOX1dJREdFVF9FTkFCTEVEXCIsaHJbaHIuU05BUF9QUklWQUNZPTI0MF09XCJTTkFQX1BSSVZBQ1lcIixocltoci5BRFNfSU5URVJGQUNFU19JU19ORVdfT1JHQU5JWkFUSU9OPTI0MV09XCJBRFNfSU5URVJGQUNFU19JU19ORVdfT1JHQU5JWkFUSU9OXCIsaHJbaHIuU0VSVkVSX09OTFk9MjQyXT1cIlNFUlZFUl9PTkxZXCIsaHJbaHIuR0hFX09SR0FOSVpBVElPTj0yNDNdPVwiR0hFX09SR0FOSVpBVElPTlwiLGhyW2hyLkdIRV9SRVBPU0lUT1JZPTI0NF09XCJHSEVfUkVQT1NJVE9SWVwiLGhyW2hyLkdIRV9VU0VSX0VNQUlMPTI0NV09XCJHSEVfVVNFUl9FTUFJTFwiLGhyW2hyLkJVSUxEX0RFRklOSVRJT05fSUQ9MjQ2XT1cIkJVSUxEX0RFRklOSVRJT05fSURcIixocltoci5CVUlMRF9ERUZJTklUSU9OX05BTUU9MjQ3XT1cIkJVSUxEX0RFRklOSVRJT05fTkFNRVwiLGhyW2hyLkxDQV9QUklOQ0lQQUw9MjQ4XT1cIkxDQV9QUklOQ0lQQUxcIixocltoci5NRURJQV9QRVJGT1JNQU5DRV9DTEFTUz0yNDldPVwiTUVESUFfUEVSRk9STUFOQ0VfQ0xBU1NcIixocltoci5DT01NVU5JVFlfQ09VTlQ9MjUwXT1cIkNPTU1VTklUWV9DT1VOVFwiLGhyW2hyLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIixmdW5jdGlvbihlKXtlW2UuVU5LTk9XTl9TSUdOQUxfVE9fSEFTSD0wXT1cIlVOS05PV05fU0lHTkFMX1RPX0hBU0hcIixlW2UuSEFTSF9TRUVEX0FORF9VU0VSX0lEPTFdPVwiSEFTSF9TRUVEX0FORF9VU0VSX0lEXCIsZVtlLkhBU0hfVVNFUl9JRF9BTkRfTkFNRVNQQUNFPTJdPVwiSEFTSF9VU0VSX0lEX0FORF9OQU1FU1BBQ0VcIixlW2UuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwifShtcnx8KG1yPXt9KSk7Y29uc3QgX3I9e2NvbmZpZ0lkOlwiXCIsdHRsU2Vjb25kczowLHByaW9yaXR5OjAsbmFtZXNwYWNlOjAsc3R1ZHlOYW1lOlwiXCIsZXhwZXJpbWVudElkOjAsZGVsZXRlOiExLHNlcnZlUGxhdGZvcm1zOjAsc2VxdWVuY2VJZDowLHJ1aWRUeXBlOjAsc2VnbWVudE9yZGluYWw6MCxnZW5lcmF0ZWRGcm9tQWJBbGxvd2xpc3RzOiExfSxJcj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpidCgpLldyaXRlci5jcmVhdGUoKTtcIlwiIT09ZS5jb25maWdJZCYmdC51aW50MzIoMTApLnN0cmluZyhlLmNvbmZpZ0lkKSx2b2lkIDAhPT1lLnZhbHVlJiZsci5lbmNvZGUoZS52YWx1ZSx0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLnRhcmdldGluZ0V4cHJlc3Npb24mJmJyLmVuY29kZShlLnRhcmdldGluZ0V4cHJlc3Npb24sdC51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCksMCE9PWUudHRsU2Vjb25kcyYmdC51aW50MzIoMzIpLmludDY0KGUudHRsU2Vjb25kcyksMCE9PWUuY29uZmlnUnVsZVV1aWRCeXRlcy5sZW5ndGgmJnQudWludDMyKDQyKS5ieXRlcyhlLmNvbmZpZ1J1bGVVdWlkQnl0ZXMpLDAhPT1lLnByaW9yaXR5JiZ0LnVpbnQzMig0OCkuaW50MzIoZS5wcmlvcml0eSksMCE9PWUubmFtZXNwYWNlJiZ0LnVpbnQzMig1NikuaW50MzIoZS5uYW1lc3BhY2UpLFwiXCIhPT1lLnN0dWR5TmFtZSYmdC51aW50MzIoNjYpLnN0cmluZyhlLnN0dWR5TmFtZSksMCE9PWUuZXhwZXJpbWVudElkJiZ0LnVpbnQzMig3MikuaW50MzIoZS5leHBlcmltZW50SWQpLCEwPT09ZS5kZWxldGUmJnQudWludDMyKDgwKS5ib29sKGUuZGVsZXRlKSx0LnVpbnQzMig5MCkuZm9yaygpO2Zvcihjb25zdCBuIG9mIGUuc2VydmVQbGF0Zm9ybXMpdC5pbnQzMihuKTtyZXR1cm4gdC5sZGVsaW0oKSwwIT09ZS5zZXF1ZW5jZUlkJiZ0LnVpbnQzMig5NikuaW50MzIoZS5zZXF1ZW5jZUlkKSwwIT09ZS5ydWlkVHlwZSYmdC51aW50MzIoMTA0KS5pbnQzMihlLnJ1aWRUeXBlKSwwIT09ZS5zZWdtZW50T3JkaW5hbCYmdC51aW50MzIoMTEyKS5pbnQzMihlLnNlZ21lbnRPcmRpbmFsKSwhMD09PWUuZ2VuZXJhdGVkRnJvbUFiQWxsb3dsaXN0cyYmdC51aW50MzIoMTIwKS5ib29sKGUuZ2VuZXJhdGVkRnJvbUFiQWxsb3dsaXN0cyksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYnQoKS5SZWFkZXI/ZTpuZXcoYnQoKS5SZWFkZXIpKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPU9iamVjdC5hc3NpZ24oe30sX3IpO2ZvcihpLnNlcnZlUGxhdGZvcm1zPVtdLGkuY29uZmlnUnVsZVV1aWRCeXRlcz1uZXcgVWludDhBcnJheTtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuY29uZmlnSWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS52YWx1ZT1sci5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDM6aS50YXJnZXRpbmdFeHByZXNzaW9uPWJyLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgNDppLnR0bFNlY29uZHM9UnIobi5pbnQ2NCgpKTticmVhaztjYXNlIDU6aS5jb25maWdSdWxlVXVpZEJ5dGVzPW4uYnl0ZXMoKTticmVhaztjYXNlIDY6aS5wcmlvcml0eT1uLmludDMyKCk7YnJlYWs7Y2FzZSA3OmkubmFtZXNwYWNlPW4uaW50MzIoKTticmVhaztjYXNlIDg6aS5zdHVkeU5hbWU9bi5zdHJpbmcoKTticmVhaztjYXNlIDk6aS5leHBlcmltZW50SWQ9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMTA6aS5kZWxldGU9bi5ib29sKCk7YnJlYWs7Y2FzZSAxMTppZigyPT0oNyZlKSl7Y29uc3QgZT1uLnVpbnQzMigpK24ucG9zO2Zvcig7bi5wb3M8ZTspaS5zZXJ2ZVBsYXRmb3Jtcy5wdXNoKG4uaW50MzIoKSl9ZWxzZSBpLnNlcnZlUGxhdGZvcm1zLnB1c2gobi5pbnQzMigpKTticmVhaztjYXNlIDEyOmkuc2VxdWVuY2VJZD1uLmludDMyKCk7YnJlYWs7Y2FzZSAxMzppLnJ1aWRUeXBlPW4uaW50MzIoKTticmVhaztjYXNlIDE0Omkuc2VnbWVudE9yZGluYWw9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMTU6aS5nZW5lcmF0ZWRGcm9tQWJBbGxvd2xpc3RzPW4uYm9vbCgpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LF9yKTtpZih0LnNlcnZlUGxhdGZvcm1zPVtdLHZvaWQgMCE9PWUuY29uZmlnSWQmJm51bGwhPT1lLmNvbmZpZ0lkP3QuY29uZmlnSWQ9ZS5jb25maWdJZDp0LmNvbmZpZ0lkPVwiXCIsdm9pZCAwIT09ZS52YWx1ZSYmbnVsbCE9PWUudmFsdWU/dC52YWx1ZT1sci5mcm9tUGFydGlhbChlLnZhbHVlKTp0LnZhbHVlPXZvaWQgMCx2b2lkIDAhPT1lLnRhcmdldGluZ0V4cHJlc3Npb24mJm51bGwhPT1lLnRhcmdldGluZ0V4cHJlc3Npb24/dC50YXJnZXRpbmdFeHByZXNzaW9uPWJyLmZyb21QYXJ0aWFsKGUudGFyZ2V0aW5nRXhwcmVzc2lvbik6dC50YXJnZXRpbmdFeHByZXNzaW9uPXZvaWQgMCx2b2lkIDAhPT1lLnR0bFNlY29uZHMmJm51bGwhPT1lLnR0bFNlY29uZHM/dC50dGxTZWNvbmRzPWUudHRsU2Vjb25kczp0LnR0bFNlY29uZHM9MCx2b2lkIDAhPT1lLmNvbmZpZ1J1bGVVdWlkQnl0ZXMmJm51bGwhPT1lLmNvbmZpZ1J1bGVVdWlkQnl0ZXM/dC5jb25maWdSdWxlVXVpZEJ5dGVzPWUuY29uZmlnUnVsZVV1aWRCeXRlczp0LmNvbmZpZ1J1bGVVdWlkQnl0ZXM9bmV3IFVpbnQ4QXJyYXksdm9pZCAwIT09ZS5wcmlvcml0eSYmbnVsbCE9PWUucHJpb3JpdHk/dC5wcmlvcml0eT1lLnByaW9yaXR5OnQucHJpb3JpdHk9MCx2b2lkIDAhPT1lLm5hbWVzcGFjZSYmbnVsbCE9PWUubmFtZXNwYWNlP3QubmFtZXNwYWNlPWUubmFtZXNwYWNlOnQubmFtZXNwYWNlPTAsdm9pZCAwIT09ZS5zdHVkeU5hbWUmJm51bGwhPT1lLnN0dWR5TmFtZT90LnN0dWR5TmFtZT1lLnN0dWR5TmFtZTp0LnN0dWR5TmFtZT1cIlwiLHZvaWQgMCE9PWUuZXhwZXJpbWVudElkJiZudWxsIT09ZS5leHBlcmltZW50SWQ/dC5leHBlcmltZW50SWQ9ZS5leHBlcmltZW50SWQ6dC5leHBlcmltZW50SWQ9MCx2b2lkIDAhPT1lLmRlbGV0ZSYmbnVsbCE9PWUuZGVsZXRlP3QuZGVsZXRlPWUuZGVsZXRlOnQuZGVsZXRlPSExLHZvaWQgMCE9PWUuc2VydmVQbGF0Zm9ybXMmJm51bGwhPT1lLnNlcnZlUGxhdGZvcm1zKWZvcihjb25zdCBuIG9mIGUuc2VydmVQbGF0Zm9ybXMpdC5zZXJ2ZVBsYXRmb3Jtcy5wdXNoKG4pO3JldHVybiB2b2lkIDAhPT1lLnNlcXVlbmNlSWQmJm51bGwhPT1lLnNlcXVlbmNlSWQ/dC5zZXF1ZW5jZUlkPWUuc2VxdWVuY2VJZDp0LnNlcXVlbmNlSWQ9MCx2b2lkIDAhPT1lLnJ1aWRUeXBlJiZudWxsIT09ZS5ydWlkVHlwZT90LnJ1aWRUeXBlPWUucnVpZFR5cGU6dC5ydWlkVHlwZT0wLHZvaWQgMCE9PWUuc2VnbWVudE9yZGluYWwmJm51bGwhPT1lLnNlZ21lbnRPcmRpbmFsP3Quc2VnbWVudE9yZGluYWw9ZS5zZWdtZW50T3JkaW5hbDp0LnNlZ21lbnRPcmRpbmFsPTAsdm9pZCAwIT09ZS5nZW5lcmF0ZWRGcm9tQWJBbGxvd2xpc3RzJiZudWxsIT09ZS5nZW5lcmF0ZWRGcm9tQWJBbGxvd2xpc3RzP3QuZ2VuZXJhdGVkRnJvbUFiQWxsb3dsaXN0cz1lLmdlbmVyYXRlZEZyb21BYkFsbG93bGlzdHM6dC5nZW5lcmF0ZWRGcm9tQWJBbGxvd2xpc3RzPSExLHR9fSxTcj17b3BlcmF0b3I6MCxwcm9wZXJ0eTowLHByZWRpY2F0ZU9wZXJhdG9yOjB9LGJyPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmJ0KCkuV3JpdGVyLmNyZWF0ZSgpOzAhPT1lLm9wZXJhdG9yJiZ0LnVpbnQzMig4KS5pbnQzMihlLm9wZXJhdG9yKTtmb3IoY29uc3QgbiBvZiBlLmNoaWxkcmVuKWJyLmVuY29kZShuLHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiAwIT09ZS5wcm9wZXJ0eSYmdC51aW50MzIoMjQpLmludDMyKGUucHJvcGVydHkpLDAhPT1lLnByZWRpY2F0ZU9wZXJhdG9yJiZ0LnVpbnQzMigzMikuaW50MzIoZS5wcmVkaWNhdGVPcGVyYXRvciksdm9pZCAwIT09ZS52YWx1ZSYmbHIuZW5jb2RlKGUudmFsdWUsdC51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5wcm9wZXJ0eU1ldGFkYXRhJiZDci5lbmNvZGUoZS5wcm9wZXJ0eU1ldGFkYXRhLHQudWludDMyKDUwKS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGJ0KCkuUmVhZGVyP2U6bmV3KGJ0KCkuUmVhZGVyKShlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT1PYmplY3QuYXNzaWduKHt9LFNyKTtmb3IoaS5jaGlsZHJlbj1bXTtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkub3BlcmF0b3I9bi5pbnQzMigpO2JyZWFrO2Nhc2UgMjppLmNoaWxkcmVuLnB1c2goYnIuZGVjb2RlKG4sbi51aW50MzIoKSkpO2JyZWFrO2Nhc2UgMzppLnByb3BlcnR5PW4uaW50MzIoKTticmVhaztjYXNlIDQ6aS5wcmVkaWNhdGVPcGVyYXRvcj1uLmludDMyKCk7YnJlYWs7Y2FzZSA1OmkudmFsdWU9bHIuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSA2OmkucHJvcGVydHlNZXRhZGF0YT1Dci5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxTcik7aWYodC5jaGlsZHJlbj1bXSx2b2lkIDAhPT1lLm9wZXJhdG9yJiZudWxsIT09ZS5vcGVyYXRvcj90Lm9wZXJhdG9yPWUub3BlcmF0b3I6dC5vcGVyYXRvcj0wLHZvaWQgMCE9PWUuY2hpbGRyZW4mJm51bGwhPT1lLmNoaWxkcmVuKWZvcihjb25zdCBuIG9mIGUuY2hpbGRyZW4pdC5jaGlsZHJlbi5wdXNoKGJyLmZyb21QYXJ0aWFsKG4pKTtyZXR1cm4gdm9pZCAwIT09ZS5wcm9wZXJ0eSYmbnVsbCE9PWUucHJvcGVydHk/dC5wcm9wZXJ0eT1lLnByb3BlcnR5OnQucHJvcGVydHk9MCx2b2lkIDAhPT1lLnByZWRpY2F0ZU9wZXJhdG9yJiZudWxsIT09ZS5wcmVkaWNhdGVPcGVyYXRvcj90LnByZWRpY2F0ZU9wZXJhdG9yPWUucHJlZGljYXRlT3BlcmF0b3I6dC5wcmVkaWNhdGVPcGVyYXRvcj0wLHZvaWQgMCE9PWUudmFsdWUmJm51bGwhPT1lLnZhbHVlP3QudmFsdWU9bHIuZnJvbVBhcnRpYWwoZS52YWx1ZSk6dC52YWx1ZT12b2lkIDAsdm9pZCAwIT09ZS5wcm9wZXJ0eU1ldGFkYXRhJiZudWxsIT09ZS5wcm9wZXJ0eU1ldGFkYXRhP3QucHJvcGVydHlNZXRhZGF0YT1Dci5mcm9tUGFydGlhbChlLnByb3BlcnR5TWV0YWRhdGEpOnQucHJvcGVydHlNZXRhZGF0YT12b2lkIDAsdH19LFRyPXtpdGVtSWQ6MCxzaWduYWxUb0hhc2g6MCxhYk5hbWVzcGFjZUZvckhhc2hpbmc6XCJcIixhYlNlZWRGb3JIYXNoaW5nOlwiXCJ9LENyPXtlbmNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmJ0KCkuV3JpdGVyLmNyZWF0ZSgpO3JldHVybiAwIT09ZS5pdGVtSWQmJnQudWludDMyKDgpLmludDMyKGUuaXRlbUlkKSwwIT09ZS5zaWduYWxUb0hhc2gmJnQudWludDMyKDE2KS5pbnQzMihlLnNpZ25hbFRvSGFzaCksXCJcIiE9PWUuYWJOYW1lc3BhY2VGb3JIYXNoaW5nJiZ0LnVpbnQzMigyNikuc3RyaW5nKGUuYWJOYW1lc3BhY2VGb3JIYXNoaW5nKSxcIlwiIT09ZS5hYlNlZWRGb3JIYXNoaW5nJiZ0LnVpbnQzMigzNCkuc3RyaW5nKGUuYWJTZWVkRm9ySGFzaGluZyksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYnQoKS5SZWFkZXI/ZTpuZXcoYnQoKS5SZWFkZXIpKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPU9iamVjdC5hc3NpZ24oe30sVHIpO2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLml0ZW1JZD1uLmludDMyKCk7YnJlYWs7Y2FzZSAyOmkuc2lnbmFsVG9IYXNoPW4uaW50MzIoKTticmVhaztjYXNlIDM6aS5hYk5hbWVzcGFjZUZvckhhc2hpbmc9bi5zdHJpbmcoKTticmVhaztjYXNlIDQ6aS5hYlNlZWRGb3JIYXNoaW5nPW4uc3RyaW5nKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tUGFydGlhbChlKXtjb25zdCB0PU9iamVjdC5hc3NpZ24oe30sVHIpO3JldHVybiB2b2lkIDAhPT1lLml0ZW1JZCYmbnVsbCE9PWUuaXRlbUlkP3QuaXRlbUlkPWUuaXRlbUlkOnQuaXRlbUlkPTAsdm9pZCAwIT09ZS5zaWduYWxUb0hhc2gmJm51bGwhPT1lLnNpZ25hbFRvSGFzaD90LnNpZ25hbFRvSGFzaD1lLnNpZ25hbFRvSGFzaDp0LnNpZ25hbFRvSGFzaD0wLHZvaWQgMCE9PWUuYWJOYW1lc3BhY2VGb3JIYXNoaW5nJiZudWxsIT09ZS5hYk5hbWVzcGFjZUZvckhhc2hpbmc/dC5hYk5hbWVzcGFjZUZvckhhc2hpbmc9ZS5hYk5hbWVzcGFjZUZvckhhc2hpbmc6dC5hYk5hbWVzcGFjZUZvckhhc2hpbmc9XCJcIix2b2lkIDAhPT1lLmFiU2VlZEZvckhhc2hpbmcmJm51bGwhPT1lLmFiU2VlZEZvckhhc2hpbmc/dC5hYlNlZWRGb3JIYXNoaW5nPWUuYWJTZWVkRm9ySGFzaGluZzp0LmFiU2VlZEZvckhhc2hpbmc9XCJcIix0fX07dmFyIEFyPSgoKT0+e2lmKHZvaWQgMCE9PUFyKXJldHVybiBBcjtpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZilyZXR1cm4gc2VsZjtpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93KXJldHVybiB3aW5kb3c7aWYodm9pZCAwIT09bi5nKXJldHVybiBuLmc7dGhyb3dcIlVuYWJsZSB0byBsb2NhdGUgZ2xvYmFsIG9iamVjdFwifSkoKTtmdW5jdGlvbiBScihlKXtpZihlLmd0KE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSl0aHJvdyBuZXcgQXIuRXJyb3IoXCJWYWx1ZSBpcyBsYXJnZXIgdGhhbiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlwiKTtyZXR1cm4gZS50b051bWJlcigpfWJ0KCkudXRpbC5Mb25nIT09SXQoKSYmKGJ0KCkudXRpbC5Mb25nPUl0KCksYnQoKS5jb25maWd1cmUoKSk7Y29uc3Qga3I9e2FiUmVzdWx0Q2hlY2tzdW1JbnB1dDpcIlwifSxPcj17ZW5jb2RlKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpidCgpLldyaXRlci5jcmVhdGUoKTtyZXR1cm5cIlwiIT09ZS5hYlJlc3VsdENoZWNrc3VtSW5wdXQmJnQudWludDMyKDEwKS5zdHJpbmcoZS5hYlJlc3VsdENoZWNrc3VtSW5wdXQpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGJ0KCkuUmVhZGVyP2U6bmV3KGJ0KCkuUmVhZGVyKShlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT1PYmplY3QuYXNzaWduKHt9LGtyKTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/aS5hYlJlc3VsdENoZWNrc3VtSW5wdXQ9bi5zdHJpbmcoKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGl9LGZyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxrcik7cmV0dXJuIHZvaWQgMCE9PWUuYWJSZXN1bHRDaGVja3N1bUlucHV0JiZudWxsIT09ZS5hYlJlc3VsdENoZWNrc3VtSW5wdXQ/dC5hYlJlc3VsdENoZWNrc3VtSW5wdXQ9ZS5hYlJlc3VsdENoZWNrc3VtSW5wdXQ6dC5hYlJlc3VsdENoZWNrc3VtSW5wdXQ9XCJcIix0fX0sTnI9e2NvbmZpZ1Jlc3VsdHNFdGFnOlwiXCIsZnVsbFJlc3VsdHM6ITEsYWJSZXN1bHRDaGVja3N1bTowLGlzbzMxNjZBbHBoYTJDb3VudHJ5Q29kZUZyb21SZXF1ZXN0SXA6XCJcIn0sd3I9e2VuY29kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06YnQoKS5Xcml0ZXIuY3JlYXRlKCk7Zm9yKGNvbnN0IG4gb2YgZS5jb25maWdSZXN1bHRzKUlyLmVuY29kZShuLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO3JldHVyblwiXCIhPT1lLmNvbmZpZ1Jlc3VsdHNFdGFnJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUuY29uZmlnUmVzdWx0c0V0YWcpLHZvaWQgMCE9PWUuYmVuY2htYXJrUmVxdWVzdCYmRG4uZW5jb2RlKGUuYmVuY2htYXJrUmVxdWVzdCx0LnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKSwhMD09PWUuZnVsbFJlc3VsdHMmJnQudWludDMyKDMyKS5ib29sKGUuZnVsbFJlc3VsdHMpLDAhPT1lLmFiUmVzdWx0Q2hlY2tzdW0mJnQudWludDMyKDQwKS5pbnQzMihlLmFiUmVzdWx0Q2hlY2tzdW0pLFwiXCIhPT1lLmlzbzMxNjZBbHBoYTJDb3VudHJ5Q29kZUZyb21SZXF1ZXN0SXAmJnQudWludDMyKDUwKS5zdHJpbmcoZS5pc28zMTY2QWxwaGEyQ291bnRyeUNvZGVGcm9tUmVxdWVzdElwKSx2b2lkIDAhPT1lLmRlYnVnRGF0YSYmT3IuZW5jb2RlKGUuZGVidWdEYXRhLHQudWludDMyKDU4KS5mb3JrKCkpLmxkZWxpbSgpLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGJ0KCkuUmVhZGVyP2U6bmV3KGJ0KCkuUmVhZGVyKShlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT1PYmplY3QuYXNzaWduKHt9LE5yKTtmb3IoaS5jb25maWdSZXN1bHRzPVtdO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5jb25maWdSZXN1bHRzLnB1c2goSXIuZGVjb2RlKG4sbi51aW50MzIoKSkpO2JyZWFrO2Nhc2UgMjppLmNvbmZpZ1Jlc3VsdHNFdGFnPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmkuYmVuY2htYXJrUmVxdWVzdD1Ebi5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDQ6aS5mdWxsUmVzdWx0cz1uLmJvb2woKTticmVhaztjYXNlIDU6aS5hYlJlc3VsdENoZWNrc3VtPW4uaW50MzIoKTticmVhaztjYXNlIDY6aS5pc28zMTY2QWxwaGEyQ291bnRyeUNvZGVGcm9tUmVxdWVzdElwPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA3OmkuZGVidWdEYXRhPU9yLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LE5yKTtpZih0LmNvbmZpZ1Jlc3VsdHM9W10sdm9pZCAwIT09ZS5jb25maWdSZXN1bHRzJiZudWxsIT09ZS5jb25maWdSZXN1bHRzKWZvcihjb25zdCBuIG9mIGUuY29uZmlnUmVzdWx0cyl0LmNvbmZpZ1Jlc3VsdHMucHVzaChJci5mcm9tUGFydGlhbChuKSk7cmV0dXJuIHZvaWQgMCE9PWUuY29uZmlnUmVzdWx0c0V0YWcmJm51bGwhPT1lLmNvbmZpZ1Jlc3VsdHNFdGFnP3QuY29uZmlnUmVzdWx0c0V0YWc9ZS5jb25maWdSZXN1bHRzRXRhZzp0LmNvbmZpZ1Jlc3VsdHNFdGFnPVwiXCIsdm9pZCAwIT09ZS5iZW5jaG1hcmtSZXF1ZXN0JiZudWxsIT09ZS5iZW5jaG1hcmtSZXF1ZXN0P3QuYmVuY2htYXJrUmVxdWVzdD1Ebi5mcm9tUGFydGlhbChlLmJlbmNobWFya1JlcXVlc3QpOnQuYmVuY2htYXJrUmVxdWVzdD12b2lkIDAsdm9pZCAwIT09ZS5mdWxsUmVzdWx0cyYmbnVsbCE9PWUuZnVsbFJlc3VsdHM/dC5mdWxsUmVzdWx0cz1lLmZ1bGxSZXN1bHRzOnQuZnVsbFJlc3VsdHM9ITEsdm9pZCAwIT09ZS5hYlJlc3VsdENoZWNrc3VtJiZudWxsIT09ZS5hYlJlc3VsdENoZWNrc3VtP3QuYWJSZXN1bHRDaGVja3N1bT1lLmFiUmVzdWx0Q2hlY2tzdW06dC5hYlJlc3VsdENoZWNrc3VtPTAsdm9pZCAwIT09ZS5pc28zMTY2QWxwaGEyQ291bnRyeUNvZGVGcm9tUmVxdWVzdElwJiZudWxsIT09ZS5pc28zMTY2QWxwaGEyQ291bnRyeUNvZGVGcm9tUmVxdWVzdElwP3QuaXNvMzE2NkFscGhhMkNvdW50cnlDb2RlRnJvbVJlcXVlc3RJcD1lLmlzbzMxNjZBbHBoYTJDb3VudHJ5Q29kZUZyb21SZXF1ZXN0SXA6dC5pc28zMTY2QWxwaGEyQ291bnRyeUNvZGVGcm9tUmVxdWVzdElwPVwiXCIsdm9pZCAwIT09ZS5kZWJ1Z0RhdGEmJm51bGwhPT1lLmRlYnVnRGF0YT90LmRlYnVnRGF0YT1Pci5mcm9tUGFydGlhbChlLmRlYnVnRGF0YSk6dC5kZWJ1Z0RhdGE9dm9pZCAwLHR9fTt2YXIgRHI7YnQoKS51dGlsLkxvbmchPT1JdCgpJiYoYnQoKS51dGlsLkxvbmc9SXQoKSxidCgpLmNvbmZpZ3VyZSgpKSxmdW5jdGlvbihlKXtlW2UuREVGQVVMVD0wXT1cIkRFRkFVTFRcIixlW2UuQ0FNRVJBPTFdPVwiQ0FNRVJBXCIsZVtlLkNPRj0yXT1cIkNPRlwiLGVbZS5NRFA9M109XCJNRFBcIixlW2UuTU9ORVRJWkFUSU9OPTRdPVwiTU9ORVRJWkFUSU9OXCIsZVtlLkxFR0FDWV9BQj01XT1cIkxFR0FDWV9BQlwiLGVbZS5BQl9TVFVEWV9WRVJTSU9OPTZdPVwiQUJfU1RVRFlfVkVSU0lPTlwiLGVbZS5DQU1FUkFfUExBVEZPUk09N109XCJDQU1FUkFfUExBVEZPUk1cIixlW2UuUExBVEZPUk1fVUk9OF09XCJQTEFURk9STV9VSVwiLGVbZS5QTEFURk9STV9DT1JFPTldPVwiUExBVEZPUk1fQ09SRVwiLGVbZS5NT05FVElaQVRJT05fVUk9MTBdPVwiTU9ORVRJWkFUSU9OX1VJXCIsZVtlLk1PTkVUSVpBVElPTl9SQU5LSU5HPTExXT1cIk1PTkVUSVpBVElPTl9SQU5LSU5HXCIsZVtlLlVTRVJTX0FORF9GUklFTkRTX1VJPTEyXT1cIlVTRVJTX0FORF9GUklFTkRTX1VJXCIsZVtlLlVTRVJTX0FORF9GUklFTkRTX0NPUkU9MTNdPVwiVVNFUlNfQU5EX0ZSSUVORFNfQ09SRVwiLGVbZS5VU0VSU19BTkRfRlJJRU5EU19SQU5LSU5HPTE0XT1cIlVTRVJTX0FORF9GUklFTkRTX1JBTktJTkdcIixlW2UuTUVTU0FHSU5HX1VJPTE1XT1cIk1FU1NBR0lOR19VSVwiLGVbZS5NRVNTQUdJTkdfQ09SRT0xNl09XCJNRVNTQUdJTkdfQ09SRVwiLGVbZS5TVE9SSUVTX1VJPTE3XT1cIlNUT1JJRVNfVUlcIixlW2UuU1RPUklFU19DT1JFPTE4XT1cIlNUT1JJRVNfQ09SRVwiLGVbZS5TVE9SSUVTX1JBTktJTkc9MTldPVwiU1RPUklFU19SQU5LSU5HXCIsZVtlLkRJU0NPVkVSX1VJPTIwXT1cIkRJU0NPVkVSX1VJXCIsZVtlLkRJU0NPVkVSX0NPUkU9MjFdPVwiRElTQ09WRVJfQ09SRVwiLGVbZS5ESVNDT1ZFUl9SQU5LSU5HPTIyXT1cIkRJU0NPVkVSX1JBTktJTkdcIixlW2UuUFJFTUlVTV9DT05URU5UX1VJPTIzXT1cIlBSRU1JVU1fQ09OVEVOVF9VSVwiLGVbZS5QUkVNSVVNX0NPTlRFTlRfQ09SRT0yNF09XCJQUkVNSVVNX0NPTlRFTlRfQ09SRVwiLGVbZS5QUkVNSVVNX0NPTlRFTlRfUkFOS0lORz0yNV09XCJQUkVNSVVNX0NPTlRFTlRfUkFOS0lOR1wiLGVbZS5DT01NVU5JVFlfVUk9MjZdPVwiQ09NTVVOSVRZX1VJXCIsZVtlLkNPTU1VTklUWV9DT1JFPTI3XT1cIkNPTU1VTklUWV9DT1JFXCIsZVtlLkNPTU1VTklUWV9SQU5LSU5HPTI4XT1cIkNPTU1VTklUWV9SQU5LSU5HXCIsZVtlLkNBTUVSQV9VST0yOV09XCJDQU1FUkFfVUlcIixlW2UuQ1JFQVRJVkVfVE9PTFNfVUk9MzBdPVwiQ1JFQVRJVkVfVE9PTFNfVUlcIixlW2UuQ1JFQVRJVkVfVE9PTFNfQ09SRT0zMV09XCJDUkVBVElWRV9UT09MU19DT1JFXCIsZVtlLkNBTUVSQV9QTEFURk9STV9VST0zMl09XCJDQU1FUkFfUExBVEZPUk1fVUlcIixlW2UuQ0FNRVJBX1BMQVRGT1JNX1JBTktJTkc9MzNdPVwiQ0FNRVJBX1BMQVRGT1JNX1JBTktJTkdcIixlW2UuUEVSQ0VQVElPTl9VST0zNF09XCJQRVJDRVBUSU9OX1VJXCIsZVtlLlBFUkNFUFRJT05fQ09SRT0zNV09XCJQRVJDRVBUSU9OX0NPUkVcIixlW2UuUEVSQ0VQVElPTl9SQU5LSU5HPTM2XT1cIlBFUkNFUFRJT05fUkFOS0lOR1wiLGVbZS5NRURJQV9VST0zN109XCJNRURJQV9VSVwiLGVbZS5NRU1PUklFU19VST0zOF09XCJNRU1PUklFU19VSVwiLGVbZS5NRU1PUklFU19DT1JFPTM5XT1cIk1FTU9SSUVTX0NPUkVcIixlW2UuTUFQX1VJPTQwXT1cIk1BUF9VSVwiLGVbZS5NQVBfQ09SRT00MV09XCJNQVBfQ09SRVwiLGVbZS5TRUFSQ0hfVUk9NDJdPVwiU0VBUkNIX1VJXCIsZVtlLlNFQVJDSF9DT1JFPTQzXT1cIlNFQVJDSF9DT1JFXCIsZVtlLlNFQVJDSF9SQU5LSU5HPTQ0XT1cIlNFQVJDSF9SQU5LSU5HXCIsZVtlLkNPR05BQ19VST00NV09XCJDT0dOQUNfVUlcIixlW2UuQ09HTkFDX0NPUkU9NDZdPVwiQ09HTkFDX0NPUkVcIixlW2UuQklUTU9KSV9VST00N109XCJCSVRNT0pJX1VJXCIsZVtlLkJJVE1PSklfQ09SRT00OF09XCJCSVRNT0pJX0NPUkVcIixlW2UuU1BFQ1RBQ0xFU19VST00OV09XCJTUEVDVEFDTEVTX1VJXCIsZVtlLlNQRUNUQUNMRVNfQ09SRT01MF09XCJTUEVDVEFDTEVTX0NPUkVcIixlW2UuU05BUF9LSVRfVUk9NTFdPVwiU05BUF9LSVRfVUlcIixlW2UuU05BUF9LSVRfQ09SRT01Ml09XCJTTkFQX0tJVF9DT1JFXCIsZVtlLlNOQVBfUFJPX1VJPTUzXT1cIlNOQVBfUFJPX1VJXCIsZVtlLlNOQVBfUFJPX0NPUkU9NTRdPVwiU05BUF9QUk9fQ09SRVwiLGVbZS5OR1NfVUk9NTVdPVwiTkdTX1VJXCIsZVtlLkNBTUVPU19VST01Nl09XCJDQU1FT1NfVUlcIixlW2UuQ0FNRU9TX0NPUkU9NTddPVwiQ0FNRU9TX0NPUkVcIixlW2UuQ0FNRU9TX1JBTktJTkc9NThdPVwiQ0FNRU9TX1JBTktJTkdcIixlW2UuQkxJWlpBUkRfQ0xJRU5UPTU5XT1cIkJMSVpaQVJEX0NMSUVOVFwiLGVbZS5CTElaWkFSRF9CQUNLRU5EPTYwXT1cIkJMSVpaQVJEX0JBQ0tFTkRcIixlW2UuQUJfU0VHTUVOVD02MV09XCJBQl9TRUdNRU5UXCIsZVtlLkNPTkZJR19ST0xMT1VUPTYyXT1cIkNPTkZJR19ST0xMT1VUXCIsZVtlLkNPTU1FUkNFX0JBQ0tFTkQ9NjNdPVwiQ09NTUVSQ0VfQkFDS0VORFwiLGVbZS5MRU5TX0NPUkU9NjRdPVwiTEVOU19DT1JFXCIsZVtlLkNBTUVSQV9LSVRfQ09SRT02NV09XCJDQU1FUkFfS0lUX0NPUkVcIixlW2UuTURQX0NPTlRFTlRfTUFOQUdFUj02Nl09XCJNRFBfQ09OVEVOVF9NQU5BR0VSXCIsZVtlLlJFUVVFU1RfRE9NQUlOX1JPVVRJTkc9NjddPVwiUkVRVUVTVF9ET01BSU5fUk9VVElOR1wiLGVbZS5DRE5fUk9VVElORz02OF09XCJDRE5fUk9VVElOR1wiLGVbZS5HUkFQSEVORV9TQU1QTElORz02OV09XCJHUkFQSEVORV9TQU1QTElOR1wiLGVbZS5XRUJfU1RPUllfQ09SRT03MF09XCJXRUJfU1RPUllfQ09SRVwiLGVbZS5XRUJfU1RPUllfVUk9NzFdPVwiV0VCX1NUT1JZX1VJXCIsZVtlLkNMSUVOVF9TV0lUQ0hCT0FSRD03Ml09XCJDTElFTlRfU1dJVENIQk9BUkRcIixlW2UuTUNTPTczXT1cIk1DU1wiLGVbZS5TSEFSSU5HX1VJPTc0XT1cIlNIQVJJTkdfVUlcIixlW2UuU0hBUklOR19DT1JFPTc1XT1cIlNIQVJJTkdfQ09SRVwiLGVbZS5TSEFSSU5HX1JBTktJTkc9NzZdPVwiU0hBUklOR19SQU5LSU5HXCIsZVtlLk1EUF9QTEFZQkFDSz03N109XCJNRFBfUExBWUJBQ0tcIixlW2UuQ0FNRVJBX0JVU0lORVNTPTc4XT1cIkNBTUVSQV9CVVNJTkVTU1wiLGVbZS5BRERMSVZFPTc5XT1cIkFERExJVkVcIixlW2UuQURfS0lUX0NPUkU9ODBdPVwiQURfS0lUX0NPUkVcIixlW2UuQURETElWRV9VST04MV09XCJBRERMSVZFX1VJXCIsZVtlLkFERExJVkVfQ09SRT04Ml09XCJBRERMSVZFX0NPUkVcIixlW2UuQURETElWRV9SQU5LSU5HPTgzXT1cIkFERExJVkVfUkFOS0lOR1wiLGVbZS5TVE9SWV9TVFVESU9fTElURV9VST04NF09XCJTVE9SWV9TVFVESU9fTElURV9VSVwiLGVbZS5TVE9SWV9TVFVESU9fTElURV9DT1JFPTg1XT1cIlNUT1JZX1NUVURJT19MSVRFX0NPUkVcIixlW2UuQ09NTUVSQ0VfVUk9ODZdPVwiQ09NTUVSQ0VfVUlcIixlW2UuQ09NTUVSQ0VfQ09SRT04N109XCJDT01NRVJDRV9DT1JFXCIsZVtlLkNPTU1FUkNFX1JBTktJTkc9ODhdPVwiQ09NTUVSQ0VfUkFOS0lOR1wiLGVbZS5TVE9SSUVTX1VYPTg5XT1cIlNUT1JJRVNfVVhcIixlW2UuQ09OVEVYVF9VST05MF09XCJDT05URVhUX1VJXCIsZVtlLkNPTlRFWFRfQ09SRT05MV09XCJDT05URVhUX0NPUkVcIixlW2UuTEVOU19UQVJHRVRJTkc9OTJdPVwiTEVOU19UQVJHRVRJTkdcIixlW2UuU1BPVExJR0hUX1JBTktJTkc9OTNdPVwiU1BPVExJR0hUX1JBTktJTkdcIixlW2UuU1BPVExJR0hUX0NPUkU9OTRdPVwiU1BPVExJR0hUX0NPUkVcIixlW2UuU1BPVExJR0hUX1VJPTk1XT1cIlNQT1RMSUdIVF9VSVwiLGVbZS5BQ1RJVkFUSU9OX0NPUkU9OTZdPVwiQUNUSVZBVElPTl9DT1JFXCIsZVtlLkZSSUVORElORz05N109XCJGUklFTkRJTkdcIixlW2UuU0FGRVRZPTk4XT1cIlNBRkVUWVwiLGVbZS5MT0dJTj05OV09XCJMT0dJTlwiLGVbZS5NWUxFTlNFU19XRUJfQ09SRT0xMDBdPVwiTVlMRU5TRVNfV0VCX0NPUkVcIixlW2UuU0VDVVJJVFk9MTAxXT1cIlNFQ1VSSVRZXCIsZVtlLkFCX0NPTlNPTEU9MTAyXT1cIkFCX0NPTlNPTEVcIixlW2UuQURfTU9ERVJBVElPTj0xMDNdPVwiQURfTU9ERVJBVElPTlwiLGVbZS5DT05URU5UX0xJRlRfTUVBU1VSRU1FTlQ9MTA0XT1cIkNPTlRFTlRfTElGVF9NRUFTVVJFTUVOVFwiLGVbZS5DT05URVhUX0JBQ0tFTkQ9MTA1XT1cIkNPTlRFWFRfQkFDS0VORFwiLGVbZS5HQU1FU19GRUVEX0NPUkU9MTA2XT1cIkdBTUVTX0ZFRURfQ09SRVwiLGVbZS5SRUNJUElFTlRfREVWSUNFX0NBUEFCSUxJVElFUz0xMDddPVwiUkVDSVBJRU5UX0RFVklDRV9DQVBBQklMSVRJRVNcIixlW2UuQURTX0dBVEVXQVlfQ09SRT0xMDhdPVwiQURTX0dBVEVXQVlfQ09SRVwiLGVbZS5BRFNfSU5URVJGQUNFU19VST0xMDldPVwiQURTX0lOVEVSRkFDRVNfVUlcIixlW2UuQURTX01BTkFHRVJfVUk9MTEwXT1cIkFEU19NQU5BR0VSX1VJXCIsZVtlLkJVU0lORVNTX01BTkFHRVJfVUk9MTExXT1cIkJVU0lORVNTX01BTkFHRVJfVUlcIixlW2UuUFJPRklMRV9NQU5BR0VSX1VJPTExMl09XCJQUk9GSUxFX01BTkFHRVJfVUlcIixlW2UuTk9USUZJQ0FUSU9OPTExM109XCJOT1RJRklDQVRJT05cIixlW2UuQklMTEJPQVJEPTExNF09XCJCSUxMQk9BUkRcIixlW2UuTEVOU19ERUxJVkVSWV9DT1JFPTExNV09XCJMRU5TX0RFTElWRVJZX0NPUkVcIixlW2UuVElFUl8wX0xBVU5DSD0xMTZdPVwiVElFUl8wX0xBVU5DSFwiLGVbZS5GUklFTkRJTkdfUkVHPTExN109XCJGUklFTkRJTkdfUkVHXCIsZVtlLkNBTUVSQV9LSVRfV0VCX0NPUkU9MTE4XT1cIkNBTUVSQV9LSVRfV0VCX0NPUkVcIixlW2UuTURQX09QRVJBX0NPUkU9MTE5XT1cIk1EUF9PUEVSQV9DT1JFXCIsZVtlLlNIQVJFRF9XRUJfVUk9MTIwXT1cIlNIQVJFRF9XRUJfVUlcIixlW2UuQ09ERUxBQlNfU0FOREJPWD0xMjFdPVwiQ09ERUxBQlNfU0FOREJPWFwiLGVbZS5GUklFTkRJTkdfUUFfUkFOS0lORz0xMjJdPVwiRlJJRU5ESU5HX1FBX1JBTktJTkdcIixlW2UuRlJJRU5ESU5HX1JFR19SQU5LSU5HPTEyM109XCJGUklFTkRJTkdfUkVHX1JBTktJTkdcIixlW2UuU0VBUkNIX0NTTD0xMjRdPVwiU0VBUkNIX0NTTFwiLGVbZS5XRUIzPTEyNV09XCJXRUIzXCIsZVtlLlBMVVNfQ09SRT0xMjZdPVwiUExVU19DT1JFXCIsZVtlLldFQl9TVE9SWVRFTExFUl9VST0xMjddPVwiV0VCX1NUT1JZVEVMTEVSX1VJXCIsZVtlLlBMQVRGT1JNX1NFUlZJQ0VTPTEyOF09XCJQTEFURk9STV9TRVJWSUNFU1wiLGVbZS5XRUJfQUNDT1VOVFM9MTI5XT1cIldFQl9BQ0NPVU5UU1wiLGVbZS5TSE9QS0lUX1dFQj0xMzBdPVwiU0hPUEtJVF9XRUJcIixlW2UuU05BUEdSQVBIX01PRFNFUlZFUj0xMzFdPVwiU05BUEdSQVBIX01PRFNFUlZFUlwiLGVbZS5NVVNJQz0xMzJdPVwiTVVTSUNcIixlW2UuU09VTkRTPTEzM109XCJTT1VORFNcIixlW2UuTUFDSEFNUD0xMzRdPVwiTUFDSEFNUFwiLGVbZS5QSUVfQVVUT0JPVD0xMzVdPVwiUElFX0FVVE9CT1RcIixlW2UuTk9USUZJQ0FUSU9OX1JBTktJTkc9MTM2XT1cIk5PVElGSUNBVElPTl9SQU5LSU5HXCIsZVtlLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIn0oRHJ8fChEcj17fSkpLGJ0KCkudXRpbC5Mb25nIT09SXQoKSYmKGJ0KCkudXRpbC5Mb25nPUl0KCksYnQoKS5jb25maWd1cmUoKSk7Y29uc3QgUHI9bmV3IE1hcDtmdW5jdGlvbiBNcihlLHQpe1ByLnNldChlLHQpfXZhciBMcj1uKDk3NTgwKSxVcj1uKDgyMDg0KTtjbGFzcyB4cntjb25zdHJ1Y3RvcihlLHQpe3RoaXMuaG9zdD1lLHRoaXMub3B0aW9ucz10fXVuYXJ5KGUsdCxuKXt2YXIgcjtjb25zdCBpPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSxlLnJlcXVlc3RUeXBlKSxvPW4mJnRoaXMub3B0aW9ucy5tZXRhZGF0YT9uZXcgVXIuQnJvd3NlckhlYWRlcnMoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG51bGw9PT0ocj10aGlzLm9wdGlvbnMpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLm1ldGFkYXRhKSxuKSk6bnx8dGhpcy5vcHRpb25zLm1ldGFkYXRhO3JldHVybiBuZXcgUHJvbWlzZSgoKHQsbik9PntMci5ncnBjLnVuYXJ5KGUse3JlcXVlc3Q6aSxob3N0OnRoaXMuaG9zdCxtZXRhZGF0YTpvLHRyYW5zcG9ydDp0aGlzLm9wdGlvbnMudHJhbnNwb3J0LGRlYnVnOnRoaXMub3B0aW9ucy5kZWJ1ZyxvbkVuZDpmdW5jdGlvbihlKXtpZihlLnN0YXR1cz09PUxyLmdycGMuQ29kZS5PSyl0KGUubWVzc2FnZSk7ZWxzZXtjb25zdCB0PW5ldyBFcnJvcihlLnN0YXR1c01lc3NhZ2UpO3QuY29kZT1lLnN0YXR1cyx0Lm1ldGFkYXRhPWUudHJhaWxlcnMsbih0KX19fSl9KSl9fWNvbnN0IEZyPVN5bWJvbChcImNvbnRleHQga2V5XCIpLEJyPXtob3N0OlwiaHR0cHM6Ly9hd3MuYXBpLnNuYXBjaGF0LmNvbVwifTtmdW5jdGlvbiBWcigpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvd1tGcl19XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdyxGcix7ZW51bWVyYWJsZTohMSx3cml0YWJsZTohMH0pO2NvbnN0IEdyPXttZXRob2ROYW1lOlwidGFyZ2V0aW5nUXVlcnlcIixzZXJ2aWNlOntzZXJ2aWNlTmFtZTpcInNuYXBjaGF0LmNkcC5jb2YuQ2lyY3Vtc3RhbmNlc1NlcnZpY2VcIn0scmVxdWVzdFN0cmVhbTohMSxyZXNwb25zZVN0cmVhbTohMSxyZXF1ZXN0VHlwZTp7c2VyaWFsaXplQmluYXJ5KCl7cmV0dXJuIHFuLmVuY29kZSh0aGlzKS5maW5pc2goKX19LHJlc3BvbnNlVHlwZTp7ZGVzZXJpYWxpemVCaW5hcnk6ZT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHdyLmRlY29kZShlKSkse3RvT2JqZWN0KCl7cmV0dXJuIHRoaXN9fSl9fTt2YXIgSHIsV3IsanIsWnIsenIsS3IsWXIscXIsWHI9KCgpPT57aWYodm9pZCAwIT09WHIpcmV0dXJuIFhyO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmKXJldHVybiBzZWxmO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvdztpZih2b2lkIDAhPT1uLmcpcmV0dXJuIG4uZzt0aHJvd1wiVW5hYmxlIHRvIGxvY2F0ZSBnbG9iYWwgb2JqZWN0XCJ9KSgpO2J0KCkudXRpbC5Mb25nIT09SXQoKSYmKGJ0KCkudXRpbC5Mb25nPUl0KCksYnQoKS5jb25maWd1cmUoKSksZnVuY3Rpb24oZSl7ZVtlLlVTRVJfV0hJVEVMSVNURUQ9MF09XCJVU0VSX1dISVRFTElTVEVEXCIsZVtlLlVTRVJfR1JPVVBfV0hJVEVMSVNURUQ9MV09XCJVU0VSX0dST1VQX1dISVRFTElTVEVEXCIsZVtlLkZJTFRFUl9DT05ESVRJT05TPTJdPVwiRklMVEVSX0NPTkRJVElPTlNcIixlW2UuU0xJQ0VfUkFOR0U9M109XCJTTElDRV9SQU5HRVwiLGVbZS5UUkFGRklDX0FMTE9DQVRFRD00XT1cIlRSQUZGSUNfQUxMT0NBVEVEXCIsZVtlLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIn0oSHJ8fChIcj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5WQUxJREFURV9SRVFVRVNUPTBdPVwiVkFMSURBVEVfUkVRVUVTVFwiLGVbZS5SRVFVRVNUX0FUTEFTPTFdPVwiUkVRVUVTVF9BVExBU1wiLGVbZS5CVUlMRF9UQVJHRVRJTkdfSU5GTz0yXT1cIkJVSUxEX1RBUkdFVElOR19JTkZPXCIsZVtlLlFVRVJZX0lOREVYPTNdPVwiUVVFUllfSU5ERVhcIixlW2UuUkVRVUVTVF9BQj00XT1cIlJFUVVFU1RfQUJcIixlW2UuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwifShXcnx8KFdyPXt9KSksYnQoKS51dGlsLkxvbmchPT1JdCgpJiYoYnQoKS51dGlsLkxvbmc9SXQoKSxidCgpLmNvbmZpZ3VyZSgpKSxmdW5jdGlvbihlKXtlW2UuVFlQRV9ET1VCTEU9MV09XCJUWVBFX0RPVUJMRVwiLGVbZS5UWVBFX0ZMT0FUPTJdPVwiVFlQRV9GTE9BVFwiLGVbZS5UWVBFX0lOVDY0PTNdPVwiVFlQRV9JTlQ2NFwiLGVbZS5UWVBFX1VJTlQ2ND00XT1cIlRZUEVfVUlOVDY0XCIsZVtlLlRZUEVfSU5UMzI9NV09XCJUWVBFX0lOVDMyXCIsZVtlLlRZUEVfRklYRUQ2ND02XT1cIlRZUEVfRklYRUQ2NFwiLGVbZS5UWVBFX0ZJWEVEMzI9N109XCJUWVBFX0ZJWEVEMzJcIixlW2UuVFlQRV9CT09MPThdPVwiVFlQRV9CT09MXCIsZVtlLlRZUEVfU1RSSU5HPTldPVwiVFlQRV9TVFJJTkdcIixlW2UuVFlQRV9HUk9VUD0xMF09XCJUWVBFX0dST1VQXCIsZVtlLlRZUEVfTUVTU0FHRT0xMV09XCJUWVBFX01FU1NBR0VcIixlW2UuVFlQRV9CWVRFUz0xMl09XCJUWVBFX0JZVEVTXCIsZVtlLlRZUEVfVUlOVDMyPTEzXT1cIlRZUEVfVUlOVDMyXCIsZVtlLlRZUEVfRU5VTT0xNF09XCJUWVBFX0VOVU1cIixlW2UuVFlQRV9TRklYRUQzMj0xNV09XCJUWVBFX1NGSVhFRDMyXCIsZVtlLlRZUEVfU0ZJWEVENjQ9MTZdPVwiVFlQRV9TRklYRUQ2NFwiLGVbZS5UWVBFX1NJTlQzMj0xN109XCJUWVBFX1NJTlQzMlwiLGVbZS5UWVBFX1NJTlQ2ND0xOF09XCJUWVBFX1NJTlQ2NFwiLGVbZS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCJ9KGpyfHwoanI9e30pKSxmdW5jdGlvbihlKXtlW2UuTEFCRUxfT1BUSU9OQUw9MV09XCJMQUJFTF9PUFRJT05BTFwiLGVbZS5MQUJFTF9SRVFVSVJFRD0yXT1cIkxBQkVMX1JFUVVJUkVEXCIsZVtlLkxBQkVMX1JFUEVBVEVEPTNdPVwiTEFCRUxfUkVQRUFURURcIixlW2UuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwifShacnx8KFpyPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlNQRUVEPTFdPVwiU1BFRURcIixlW2UuQ09ERV9TSVpFPTJdPVwiQ09ERV9TSVpFXCIsZVtlLkxJVEVfUlVOVElNRT0zXT1cIkxJVEVfUlVOVElNRVwiLGVbZS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCJ9KHpyfHwoenI9e30pKSxmdW5jdGlvbihlKXtlW2UuU1RSSU5HPTBdPVwiU1RSSU5HXCIsZVtlLkNPUkQ9MV09XCJDT1JEXCIsZVtlLlNUUklOR19QSUVDRT0yXT1cIlNUUklOR19QSUVDRVwiLGVbZS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCJ9KEtyfHwoS3I9e30pKSxmdW5jdGlvbihlKXtlW2UuSlNfTk9STUFMPTBdPVwiSlNfTk9STUFMXCIsZVtlLkpTX1NUUklORz0xXT1cIkpTX1NUUklOR1wiLGVbZS5KU19OVU1CRVI9Ml09XCJKU19OVU1CRVJcIixlW2UuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwifShZcnx8KFlyPXt9KSksZnVuY3Rpb24oZSl7ZVtlLklERU1QT1RFTkNZX1VOS05PV049MF09XCJJREVNUE9URU5DWV9VTktOT1dOXCIsZVtlLk5PX1NJREVfRUZGRUNUUz0xXT1cIk5PX1NJREVfRUZGRUNUU1wiLGVbZS5JREVNUE9URU5UPTJdPVwiSURFTVBPVEVOVFwiLGVbZS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCJ9KHFyfHwocXI9e30pKTt2YXIgUXIsSnIsJHIsZWksdGksbmkscmksaWksb2k9KCgpPT57aWYodm9pZCAwIT09b2kpcmV0dXJuIG9pO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmKXJldHVybiBzZWxmO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvdztpZih2b2lkIDAhPT1uLmcpcmV0dXJuIG4uZzt0aHJvd1wiVW5hYmxlIHRvIGxvY2F0ZSBnbG9iYWwgb2JqZWN0XCJ9KSgpO2J0KCkudXRpbC5Mb25nIT09SXQoKSYmKGJ0KCkudXRpbC5Mb25nPUl0KCksYnQoKS5jb25maWd1cmUoKSksZnVuY3Rpb24oZSl7ZVtlLlVOS05PV05fU05BUF9QUk89MF09XCJVTktOT1dOX1NOQVBfUFJPXCIsZVtlLk5PVF9TTkFQX1BSTz0xXT1cIk5PVF9TTkFQX1BST1wiLGVbZS5TVEFOREFSRF9USUVSPTJdPVwiU1RBTkRBUkRfVElFUlwiLGVbZS5PRkZJQ0lBTF9USUVSPTNdPVwiT0ZGSUNJQUxfVElFUlwiLGVbZS5QVUJMSUNfVElFUj00XT1cIlBVQkxJQ19USUVSXCIsZVtlLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIn0oUXJ8fChRcj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5VTktOT1dOX09SSUdJTj0wXT1cIlVOS05PV05fT1JJR0lOXCIsZVtlLlNFUlZFUj0xXT1cIlNFUlZFUlwiLGVbZS5DTElFTlQ9Ml09XCJDTElFTlRcIixlW2UuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwifShKcnx8KEpyPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlVOS05PV05fUExBVEZPUk09MF09XCJVTktOT1dOX1BMQVRGT1JNXCIsZVtlLlNFUlZFUj0xXT1cIlNFUlZFUlwiLGVbZS5DTElFTlQ9Ml09XCJDTElFTlRcIixlW2UuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwifSgkcnx8KCRyPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlVOS05PV05fU1RBVFVTPTBdPVwiVU5LTk9XTl9TVEFUVVNcIixlW2UuREVQTE9ZRUQ9MV09XCJERVBMT1lFRFwiLGVbZS5DT01QTEVURUQ9Ml09XCJDT01QTEVURURcIixlW2UuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwifShlaXx8KGVpPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlVOS05PV05fU0VHTUVOVD0wXT1cIlVOS05PV05fU0VHTUVOVFwiLGVbZS5TVEFOREFSRF9TRUdNRU5UPTFdPVwiU1RBTkRBUkRfU0VHTUVOVFwiLGVbZS5CVURHRVRfU0VHTUVOVD0yXT1cIkJVREdFVF9TRUdNRU5UXCIsZVtlLlJPTExPVVRfU0VHTUVOVD0zXT1cIlJPTExPVVRfU0VHTUVOVFwiLGVbZS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCJ9KHRpfHwodGk9e30pKSxmdW5jdGlvbihlKXtlW2UuVU5LTk9XTl9PUEVSQVRPUj0wXT1cIlVOS05PV05fT1BFUkFUT1JcIixlW2UuQU5EPTFdPVwiQU5EXCIsZVtlLk9SPTJdPVwiT1JcIixlW2UuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwifShuaXx8KG5pPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlVOS05PV05fUFJFRElDQVRFX09QRVJBVE9SPTBdPVwiVU5LTk9XTl9QUkVESUNBVEVfT1BFUkFUT1JcIixlW2UuRVFVQUw9MV09XCJFUVVBTFwiLGVbZS5OT1RfRVFVQUw9Ml09XCJOT1RfRVFVQUxcIixlW2UuR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPPTNdPVwiR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPXCIsZVtlLkxFU1NfVEhBTl9PUl9FUVVBTF9UTz00XT1cIkxFU1NfVEhBTl9PUl9FUVVBTF9UT1wiLGVbZS5JTj01XT1cIklOXCIsZVtlLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIn0ocml8fChyaT17fSkpLGZ1bmN0aW9uKGUpe2VbZS5VTktOT1dOX1BST1BFUlRZPTBdPVwiVU5LTk9XTl9QUk9QRVJUWVwiLGVbZS5ERVZJQ0VfTU9ERUw9MV09XCJERVZJQ0VfTU9ERUxcIixlW2UuQ09VTlRSWT0yXT1cIkNPVU5UUllcIixlW2UuT1M9M109XCJPU1wiLGVbZS5PU19WRVJTSU9OPTRdPVwiT1NfVkVSU0lPTlwiLGVbZS5BUFBfVkVSU0lPTj01XT1cIkFQUF9WRVJTSU9OXCIsZVtlLkJVSUxEX0ZMQVZPUj02XT1cIkJVSUxEX0ZMQVZPUlwiLGVbZS5VU0VSX0lEPTddPVwiVVNFUl9JRFwiLGVbZS5MT0NBTEU9OF09XCJMT0NBTEVcIixlW2UuSVNfQ0hBUkdJTkc9OV09XCJJU19DSEFSR0lOR1wiLGVbZS5CQVRURVJZX0xFVkVMPTEwXT1cIkJBVFRFUllfTEVWRUxcIixlW2UuREVWSUNFX0NMVVNURVI9MTFdPVwiREVWSUNFX0NMVVNURVJcIixlW2UuSVNfT0ZGTElORT0xMl09XCJJU19PRkZMSU5FXCIsZVtlLkJBTkRXSURUSD0xM109XCJCQU5EV0lEVEhcIixlW2UuREVWSUNFX0JSQU5EPTE0XT1cIkRFVklDRV9CUkFORFwiLGVbZS5JU19FTVBMT1lFRT0xNV09XCJJU19FTVBMT1lFRVwiLGVbZS5VU0VSTkFNRT0xNl09XCJVU0VSTkFNRVwiLGVbZS5JU19URVNUX1VTRVI9MTddPVwiSVNfVEVTVF9VU0VSXCIsZVtlLlVTRVJfUFJPRklMRT0xOF09XCJVU0VSX1BST0ZJTEVcIixlW2UuU0NSRUVOX1dJRFRIPTE5XT1cIlNDUkVFTl9XSURUSFwiLGVbZS5TQ1JFRU5fSEVJR0hUPTIwXT1cIlNDUkVFTl9IRUlHSFRcIixlW2UuSEVWQ19TVVBQT1JUPTIxXT1cIkhFVkNfU1VQUE9SVFwiLGVbZS5ESVNLX1NJWkU9MjJdPVwiRElTS19TSVpFXCIsZVtlLkRJU0tfQVZBSUxBQkxFPTIzXT1cIkRJU0tfQVZBSUxBQkxFXCIsZVtlLk5FVFdPUktfVFlQRT0yNF09XCJORVRXT1JLX1RZUEVcIixlW2UuTUFYX1ZJREVPX1dJRFRIPTI1XT1cIk1BWF9WSURFT19XSURUSFwiLGVbZS5NQVhfVklERU9fSEVJR0hUPTI2XT1cIk1BWF9WSURFT19IRUlHSFRcIixlW2UuTUVESUFfVFlQRV9ERVBSRUNBVEVEPTI3XT1cIk1FRElBX1RZUEVfREVQUkVDQVRFRFwiLGVbZS5JU19QVUJMSUNfU1RPUlk9MjhdPVwiSVNfUFVCTElDX1NUT1JZXCIsZVtlLklTX09GRklDSUFMX1NUT1JZPTI5XT1cIklTX09GRklDSUFMX1NUT1JZXCIsZVtlLklTX05FVFdPUktfTUVURVJFRD0zMF09XCJJU19ORVRXT1JLX01FVEVSRURcIixlW2UuSVNfUk9BTUlORz0zMV09XCJJU19ST0FNSU5HXCIsZVtlLkFQUF9FTkdBR0VNRU5UX0xFVkVMPTMyXT1cIkFQUF9FTkdBR0VNRU5UX0xFVkVMXCIsZVtlLkNPTU1VTklDQVRJT05fRU5HQUdFTUVOVF9MRVZFTD0zM109XCJDT01NVU5JQ0FUSU9OX0VOR0FHRU1FTlRfTEVWRUxcIixlW2UuRlJJRU5EX1NUT1JZX0VOR0FHRU1FTlRfTEVWRUw9MzRdPVwiRlJJRU5EX1NUT1JZX0VOR0FHRU1FTlRfTEVWRUxcIixlW2UuUFVCTElDX1VTRVJfU1RPUllfRU5HQUdFTUVOVF9MRVZFTD0zNV09XCJQVUJMSUNfVVNFUl9TVE9SWV9FTkdBR0VNRU5UX0xFVkVMXCIsZVtlLlBVQkxJU0hFUl9TVE9SWV9FTkdBR0VNRU5UX0xFVkVMPTM2XT1cIlBVQkxJU0hFUl9TVE9SWV9FTkdBR0VNRU5UX0xFVkVMXCIsZVtlLkxFTlNfRU5HQUdFTUVOVF9MRVZFTD0zN109XCJMRU5TX0VOR0FHRU1FTlRfTEVWRUxcIixlW2UuQ0FNRVJBX0NPTlRFWFQ9MzhdPVwiQ0FNRVJBX0NPTlRFWFRcIixlW2UuQ0FNRVJBX0RJUkVDVElPTj0zOV09XCJDQU1FUkFfRElSRUNUSU9OXCIsZVtlLkNBTUVSQV9GTEFTSF9TVEFURT00MF09XCJDQU1FUkFfRkxBU0hfU1RBVEVcIixlW2UuQ0FNRVJBX0FQST00MV09XCJDQU1FUkFfQVBJXCIsZVtlLk5PTl9GUklFTkRfU1RPUllfRU5HQUdFTUVOVF9MRVZFTD00Ml09XCJOT05fRlJJRU5EX1NUT1JZX0VOR0FHRU1FTlRfTEVWRUxcIixlW2UuRk9MTE9XRVJfU0laRV9MRVZFTD00M109XCJGT0xMT1dFUl9TSVpFX0xFVkVMXCIsZVtlLkxFR0FDWV9NVVNIUk9PTV9DT05URU5UX1RZUEU9NDRdPVwiTEVHQUNZX01VU0hST09NX0NPTlRFTlRfVFlQRVwiLGVbZS5TTkFQX1NPVVJDRT00NV09XCJTTkFQX1NPVVJDRVwiLGVbZS5VUExPQURfQkFORFdJRFRIPTQ2XT1cIlVQTE9BRF9CQU5EV0lEVEhcIixlW2UuREFZU19TSU5DRV9DUkVBVElPTj00N109XCJEQVlTX1NJTkNFX0NSRUFUSU9OXCIsZVtlLkNBTUVSQTJfTEVWRUw9NDhdPVwiQ0FNRVJBMl9MRVZFTFwiLGVbZS5DQU1FUkFfTklHSFRfTU9ERV9TVEFURT00OV09XCJDQU1FUkFfTklHSFRfTU9ERV9TVEFURVwiLGVbZS5VU0VSX1BFUlNPTkE9NTBdPVwiVVNFUl9QRVJTT05BXCIsZVtlLlVTRVJfTEFOR1VBR0U9NTFdPVwiVVNFUl9MQU5HVUFHRVwiLGVbZS5VU0VSX0NSRUFUSU9OX1RJTUU9NTJdPVwiVVNFUl9DUkVBVElPTl9USU1FXCIsZVtlLlZJREVPX0RVUkFUSU9OPTUzXT1cIlZJREVPX0RVUkFUSU9OXCIsZVtlLk1PQklMRV9ORVRXT1JLX1RZUEU9NTRdPVwiTU9CSUxFX05FVFdPUktfVFlQRVwiLGVbZS5BR0dSRUdBVEVEX1VTRVJfQkFORFdJRFRIPTU1XT1cIkFHR1JFR0FURURfVVNFUl9CQU5EV0lEVEhcIixlW2UuUkVBTFRJTUVfTU9CSUxFX05FVFdPUktfR0VORVJBVElPTj01Nl09XCJSRUFMVElNRV9NT0JJTEVfTkVUV09SS19HRU5FUkFUSU9OXCIsZVtlLlJFQUxUSU1FX05FVFdPUktfVFlQRT01N109XCJSRUFMVElNRV9ORVRXT1JLX1RZUEVcIixlW2UuUkVBTFRJTUVfTkVUV09SS19JU19NRVRFUkVEPTU4XT1cIlJFQUxUSU1FX05FVFdPUktfSVNfTUVURVJFRFwiLGVbZS5SRUFMVElNRV9ORVRXT1JLX0lTX1JPQU1JTkc9NTldPVwiUkVBTFRJTUVfTkVUV09SS19JU19ST0FNSU5HXCIsZVtlLkxFTlNfQ0xVU1RFUl9CSUFTRUQ9NjBdPVwiTEVOU19DTFVTVEVSX0JJQVNFRFwiLGVbZS5MRU5TX0NMVVNURVJfTE9HPTYxXT1cIkxFTlNfQ0xVU1RFUl9MT0dcIixlW2UuTEVOU19DTFVTVEVSX09SSUc9NjJdPVwiTEVOU19DTFVTVEVSX09SSUdcIixlW2UuTEVOU19DTFVTVEVSX09SSUdfND02M109XCJMRU5TX0NMVVNURVJfT1JJR180XCIsZVtlLkxFTlNfQ0xVU1RFUl9CSUFTRURfTE9HPTY0XT1cIkxFTlNfQ0xVU1RFUl9CSUFTRURfTE9HXCIsZVtlLkFQUF9MT0NBTEU9NjVdPVwiQVBQX0xPQ0FMRVwiLGVbZS5ERVZJQ0VfQ09NTU9OX05BTUU9NjZdPVwiREVWSUNFX0NPTU1PTl9OQU1FXCIsZVtlLlBJQ1RVUkVfTU9ERT02N109XCJQSUNUVVJFX01PREVcIixlW2UuVVNFUl9GUklFTkRfQ09VTlQ9NjhdPVwiVVNFUl9GUklFTkRfQ09VTlRcIixlW2UuQk9MVF9VU0VfQ0FTRT02OV09XCJCT0xUX1VTRV9DQVNFXCIsZVtlLkw5MF9DT1VOVFJZPTcwXT1cIkw5MF9DT1VOVFJZXCIsZVtlLlNUVUI9NzFdPVwiU1RVQlwiLGVbZS5JU19UUlVFPTcyXT1cIklTX1RSVUVcIixlW2UuU1RPUllfUE9TVF9SQVRJTz03M109XCJTVE9SWV9QT1NUX1JBVElPXCIsZVtlLkdFTkRFUj03NF09XCJHRU5ERVJcIixlW2UuSU5GRVJSRURfQUdFX0JVQ0tFVD03NV09XCJJTkZFUlJFRF9BR0VfQlVDS0VUXCIsZVtlLlNUT1JJRVM9NzZdPVwiU1RPUklFU1wiLGVbZS5TRU5EUz03N109XCJTRU5EU1wiLGVbZS5TTkFQX0NSRUFURV9MNz03OF09XCJTTkFQX0NSRUFURV9MN1wiLGVbZS5TVE9SWV9QT1NUX0w3PTc5XT1cIlNUT1JZX1BPU1RfTDdcIixlW2UuQ09NTVVOSUNBVElPTl9MNz04MF09XCJDT01NVU5JQ0FUSU9OX0w3XCIsZVtlLkRGX0w3PTgxXT1cIkRGX0w3XCIsZVtlLkFQUF9MNz04Ml09XCJBUFBfTDdcIixlW2UuREFZU19TSU5DRV9DUkVBVElPTl9CVUNLRVQ9ODNdPVwiREFZU19TSU5DRV9DUkVBVElPTl9CVUNLRVRcIixlW2UuQklESVJFQ1RJT05BTF9GUklFTkRfU1RBVFVTPTg0XT1cIkJJRElSRUNUSU9OQUxfRlJJRU5EX1NUQVRVU1wiLGVbZS5TVE9SWV9QT1NUX1BSRURJQ1RJT049ODVdPVwiU1RPUllfUE9TVF9QUkVESUNUSU9OXCIsZVtlLkJPTFRfQ0ROX0VYUEVSSU1FTlRBVElPTl9JRD04Nl09XCJCT0xUX0NETl9FWFBFUklNRU5UQVRJT05fSURcIixlW2UuTUlOU19TSU5DRV9MQVNUX0xFTlNfQUNUSVZBVElPTj04N109XCJNSU5TX1NJTkNFX0xBU1RfTEVOU19BQ1RJVkFUSU9OXCIsZVtlLkFQUF9PUEVOUz04OF09XCJBUFBfT1BFTlNcIixlW2UuTEVOU19TV0lQRVM9ODldPVwiTEVOU19TV0lQRVNcIixlW2UuTEVOU19TTkFQUz05MF09XCJMRU5TX1NOQVBTXCIsZVtlLkxFTlNfT1BTPTkxXT1cIkxFTlNfT1BTXCIsZVtlLlcxX0FQUF9PUEVOUz05Ml09XCJXMV9BUFBfT1BFTlNcIixlW2UuVzFfTEVOU19TV0lQRVM9OTNdPVwiVzFfTEVOU19TV0lQRVNcIixlW2UuVzFfTEVOU19TTkFQUz05NF09XCJXMV9MRU5TX1NOQVBTXCIsZVtlLlcxX0xFTlNfT1BTPTk1XT1cIlcxX0xFTlNfT1BTXCIsZVtlLlcyX0FQUF9PUEVOUz05Nl09XCJXMl9BUFBfT1BFTlNcIixlW2UuVzJfTEVOU19TV0lQRVM9OTddPVwiVzJfTEVOU19TV0lQRVNcIixlW2UuVzJfTEVOU19TTkFQUz05OF09XCJXMl9MRU5TX1NOQVBTXCIsZVtlLlcyX0xFTlNfT1BTPTk5XT1cIlcyX0xFTlNfT1BTXCIsZVtlLlczNF9BUFBfT1BFTlM9MTAwXT1cIlczNF9BUFBfT1BFTlNcIixlW2UuVzM0X0xFTlNfU1dJUEVTPTEwMV09XCJXMzRfTEVOU19TV0lQRVNcIixlW2UuVzM0X0xFTlNfU05BUFM9MTAyXT1cIlczNF9MRU5TX1NOQVBTXCIsZVtlLlczNF9MRU5TX09QUz0xMDNdPVwiVzM0X0xFTlNfT1BTXCIsZVtlLkxFTlNfU1dJUEVTX1BSRURJQ1RJT049MTA0XT1cIkxFTlNfU1dJUEVTX1BSRURJQ1RJT05cIixlW2UuUkVHSVNUUkFUSU9OX0NPVU5UUlk9MTA1XT1cIlJFR0lTVFJBVElPTl9DT1VOVFJZXCIsZVtlLklQX0FTTj0xMDZdPVwiSVBfQVNOXCIsZVtlLklQX1JFR0lPTj0xMDddPVwiSVBfUkVHSU9OXCIsZVtlLklQX0NJVFk9MTA4XT1cIklQX0NJVFlcIixlW2UuSEFTX1VTRVJfSUQ9MTA5XT1cIkhBU19VU0VSX0lEXCIsZVtlLkhBU19CSVRNT0pJPTExMF09XCJIQVNfQklUTU9KSVwiLGVbZS5OVU1fQVBQX09QRU5TX0xBU1RfOF9EQVlTPTExMV09XCJOVU1fQVBQX09QRU5TX0xBU1RfOF9EQVlTXCIsZVtlLk1JTlNfU0lOQ0VfTEFTVF9TTkFQUEFCTEVfTEVOU19BQ1RJVkFUSU9OPTExMl09XCJNSU5TX1NJTkNFX0xBU1RfU05BUFBBQkxFX0xFTlNfQUNUSVZBVElPTlwiLGVbZS5OVU1fRkVBVFVSRV9TVE9SWV9WSUVXX0RBWVNfTDc9MTEzXT1cIk5VTV9GRUFUVVJFX1NUT1JZX1ZJRVdfREFZU19MN1wiLGVbZS5OVU1fRkVBVFVSRV9TVE9SWV9TWU5DX0RBWVNfTDc9MTE0XT1cIk5VTV9GRUFUVVJFX1NUT1JZX1NZTkNfREFZU19MN1wiLGVbZS5IRVhBR09OX05OX1NVUFBPUlRFRF9WRVJTSU9OPTExNV09XCJIRVhBR09OX05OX1NVUFBPUlRFRF9WRVJTSU9OXCIsZVtlLkRBWVNfU0lOQ0VfTEFTVF9MT0dJTl9PUl9PUEVOPTExNl09XCJEQVlTX1NJTkNFX0xBU1RfTE9HSU5fT1JfT1BFTlwiLGVbZS5TUEVDVEFDTEVTX1ZFUlNJT049MTE3XT1cIlNQRUNUQUNMRVNfVkVSU0lPTlwiLGVbZS5ORVRXT1JLX1FVQUxJVFk9MTE4XT1cIk5FVFdPUktfUVVBTElUWVwiLGVbZS5ERVZJQ0VfTUVNT1JZX01CPTExOV09XCJERVZJQ0VfTUVNT1JZX01CXCIsZVtlLkRFVklDRV9HTF9WRVJTSU9OPTEyMF09XCJERVZJQ0VfR0xfVkVSU0lPTlwiLGVbZS5TTkFQX1BST19TVEFUVVM9MTIxXT1cIlNOQVBfUFJPX1NUQVRVU1wiLGVbZS5ERVZJQ0VfVlA5X0RFQ09ESU5HX1NVUFBPUlQ9MTIyXT1cIkRFVklDRV9WUDlfREVDT0RJTkdfU1VQUE9SVFwiLGVbZS5BVkdfRlJJRU5EX1NUT1JZX1ZJRVdfQ09VTlRfTDc9MTIzXT1cIkFWR19GUklFTkRfU1RPUllfVklFV19DT1VOVF9MN1wiLGVbZS5HQU1FX0pPSU5fVElNRT0xMjRdPVwiR0FNRV9KT0lOX1RJTUVcIixlW2UuR0FNRV9MQVNUX0FDVElWRV9USU1FPTEyNV09XCJHQU1FX0xBU1RfQUNUSVZFX1RJTUVcIixlW2UuREFZU19TSU5DRV9GSVJTVF9HQU1FX0FDVElWSVRZPTEyNl09XCJEQVlTX1NJTkNFX0ZJUlNUX0dBTUVfQUNUSVZJVFlcIixlW2UuREFZU19TSU5DRV9MQVNUX0dBTUVfQUNUSVZJVFk9MTI3XT1cIkRBWVNfU0lOQ0VfTEFTVF9HQU1FX0FDVElWSVRZXCIsZVtlLlBGX1BBR0VfU0VTU0lPTlNfV0lUSF9MT05HX0lNUD0xMjhdPVwiUEZfUEFHRV9TRVNTSU9OU19XSVRIX0xPTkdfSU1QXCIsZVtlLlNUSUNLWV9NQVhfQ09OTkVDVElPTl9UWVBFPTEyOV09XCJTVElDS1lfTUFYX0NPTk5FQ1RJT05fVFlQRVwiLGVbZS5XSVJFTEVTU19DQVJSSUVSPTEzMF09XCJXSVJFTEVTU19DQVJSSUVSXCIsZVtlLldJVEhfQU5JTUFURURfT1ZFUkxBWT0xMzFdPVwiV0lUSF9BTklNQVRFRF9PVkVSTEFZXCIsZVtlLk1JTklTX0pPSU5fVElNRT0xMzJdPVwiTUlOSVNfSk9JTl9USU1FXCIsZVtlLk1JTklTX0xBU1RfQUNUSVZFX1RJTUU9MTMzXT1cIk1JTklTX0xBU1RfQUNUSVZFX1RJTUVcIixlW2UuREFZU19TSU5DRV9GSVJTVF9NSU5JU19BQ1RJVklUWT0xMzRdPVwiREFZU19TSU5DRV9GSVJTVF9NSU5JU19BQ1RJVklUWVwiLGVbZS5EQVlTX1NJTkNFX0xBU1RfTUlOSVNfQUNUSVZJVFk9MTM1XT1cIkRBWVNfU0lOQ0VfTEFTVF9NSU5JU19BQ1RJVklUWVwiLGVbZS5ERVZJQ0VfQVYxX0RFQ09ESU5HX1NVUFBPUlQ9MTM2XT1cIkRFVklDRV9BVjFfREVDT0RJTkdfU1VQUE9SVFwiLGVbZS5BUFBfUEFDS0FHRV9JTlNUQUxMRVI9MTM3XT1cIkFQUF9QQUNLQUdFX0lOU1RBTExFUlwiLGVbZS5VUkw9MTM4XT1cIlVSTFwiLGVbZS5FU1RJTUFURURfRFVSQVRJT05fRk9SX0VWRU5UX01TPTEzOV09XCJFU1RJTUFURURfRFVSQVRJT05fRk9SX0VWRU5UX01TXCIsZVtlLk1FRElBX1NPVVJDRT0xNDBdPVwiTUVESUFfU09VUkNFXCIsZVtlLkFTU0VUX1RZUEU9MTQxXT1cIkFTU0VUX1RZUEVcIixlW2UuU1RPUllfVklFV1NfNVRIX1RBQl9FTkdBR0VNRU5UX0xFVkVMPTE0Ml09XCJTVE9SWV9WSUVXU181VEhfVEFCX0VOR0FHRU1FTlRfTEVWRUxcIixlW2UuUkVQT1JURURfQUdFPTE0M109XCJSRVBPUlRFRF9BR0VcIixlW2UuQU5EUk9JRF9NT0JJTEVfU0VSVklDRVNfUFJPVklERVI9MTQ0XT1cIkFORFJPSURfTU9CSUxFX1NFUlZJQ0VTX1BST1ZJREVSXCIsZVtlLklTX0FDUVVJUkVEX1VTRVI9MTQ1XT1cIklTX0FDUVVJUkVEX1VTRVJcIixlW2UuWURQST0xNDZdPVwiWURQSVwiLGVbZS5CT0xUX0lTX0NPTlRFTlRfUE9QVUxBUj0xNDddPVwiQk9MVF9JU19DT05URU5UX1BPUFVMQVJcIixlW2UuQ0FQVFVSRV9NT0RFPTE0OF09XCJDQVBUVVJFX01PREVcIixlW2UuQklESVJFQ1RJT05BTF9GUklFTkRfU1RBVFVTX1ZFTExVTT0xNDldPVwiQklESVJFQ1RJT05BTF9GUklFTkRfU1RBVFVTX1ZFTExVTVwiLGVbZS5PUklHSU49MTUwXT1cIk9SSUdJTlwiLGVbZS5MRU5TQ09SRV9WRVJTSU9OPTE1MV09XCJMRU5TQ09SRV9WRVJTSU9OXCIsZVtlLlNOQVBLSVRfQVBQX0lEPTE1Ml09XCJTTkFQS0lUX0FQUF9JRFwiLGVbZS5HUFU9MTUzXT1cIkdQVVwiLGVbZS5DSElQU0VUX05BTUU9MTU0XT1cIkNISVBTRVRfTkFNRVwiLGVbZS5DSElQU0VUX1ZFUlNJT049MTU1XT1cIkNISVBTRVRfVkVSU0lPTlwiLGVbZS5IQVNfWkVST19JREZBPTE1Nl09XCJIQVNfWkVST19JREZBXCIsZVtlLkxJTUlUX0FEX1RSQUNLSU5HPTE1N109XCJMSU1JVF9BRF9UUkFDS0lOR1wiLGVbZS5BVFRfQVVUSF9TVEFUVVM9MTU4XT1cIkFUVF9BVVRIX1NUQVRVU1wiLGVbZS5WUDlfU09GVFdBUkVfREVDT0RJTkdfU1VQUE9SVEVEPTE1OV09XCJWUDlfU09GVFdBUkVfREVDT0RJTkdfU1VQUE9SVEVEXCIsZVtlLkFWMV9TT0ZUV0FSRV9ERUNPRElOR19TVVBQT1JURUQ9MTYwXT1cIkFWMV9TT0ZUV0FSRV9ERUNPRElOR19TVVBQT1JURURcIixlW2UuV0lUSF9NVVNJQz0xNjFdPVwiV0lUSF9NVVNJQ1wiLGVbZS5DQU1FUkEyX0ZST05UX1NTX0dBSU5fT1ZFUl9UUEE9MTYyXT1cIkNBTUVSQTJfRlJPTlRfU1NfR0FJTl9PVkVSX1RQQVwiLGVbZS5BVFRBQ0hNRU5UX1RPT0xfVjI9MTYzXT1cIkFUVEFDSE1FTlRfVE9PTF9WMlwiLGVbZS5NRURJQV9UWVBFPTE2NF09XCJNRURJQV9UWVBFXCIsZVtlLlVTRVJfUEVSU09OQV9WMz0xNjVdPVwiVVNFUl9QRVJTT05BX1YzXCIsZVtlLkZFQVRVUkVfUFJPVklERURfU0laRT0xNjZdPVwiRkVBVFVSRV9QUk9WSURFRF9TSVpFXCIsZVtlLlNOQVBTX1NFTkRfV0lUSF9IRVZDPTE2N109XCJTTkFQU19TRU5EX1dJVEhfSEVWQ1wiLGVbZS5TTkFQU19TRU5EX1dJVEhPVVRfSEVWQz0xNjhdPVwiU05BUFNfU0VORF9XSVRIT1VUX0hFVkNcIixlW2UuQ0FNRVJBMl9OQVRJVkVfQ1JBU0hfT1ZFUl9DQU1FUkExPTE2OV09XCJDQU1FUkEyX05BVElWRV9DUkFTSF9PVkVSX0NBTUVSQTFcIixlW2UuQ0FNRVJBMl9HMlNfTEFURU5DWV9PVkVSX0NBTUVSQTE9MTcwXT1cIkNBTUVSQTJfRzJTX0xBVEVOQ1lfT1ZFUl9DQU1FUkExXCIsZVtlLlNDQU5ORURfQ0FURUdPUllfSURTPTE3MV09XCJTQ0FOTkVEX0NBVEVHT1JZX0lEU1wiLGVbZS5DT05URU5UX1ZJRVdfU09VUkNFPTE3Ml09XCJDT05URU5UX1ZJRVdfU09VUkNFXCIsZVtlLklTX0lOVEVSTkFMPTE3M109XCJJU19JTlRFUk5BTFwiLGVbZS5JU19XRUI9MTc0XT1cIklTX1dFQlwiLGVbZS5SRUNJUElFTlRTX1NVUFBPUlRfSEVWQz0xNzVdPVwiUkVDSVBJRU5UU19TVVBQT1JUX0hFVkNcIixlW2UuQVBQX09QRU5fVE9fTUFQPTE3Nl09XCJBUFBfT1BFTl9UT19NQVBcIixlW2UuQVBQX09QRU5fVE9fRlJJRU5EU0ZFRUQ9MTc3XT1cIkFQUF9PUEVOX1RPX0ZSSUVORFNGRUVEXCIsZVtlLkFQUF9PUEVOX1RPX0xFTlNFUz0xNzhdPVwiQVBQX09QRU5fVE9fTEVOU0VTXCIsZVtlLkFQUF9PUEVOX1RPX01FTU9SSUVTPTE3OV09XCJBUFBfT1BFTl9UT19NRU1PUklFU1wiLGVbZS5BUFBfT1BFTl9UT19DT01NVU5JVFk9MTgwXT1cIkFQUF9PUEVOX1RPX0NPTU1VTklUWVwiLGVbZS5BUFBfT1BFTl9UT19TUE9UTElHSFQ9MTgxXT1cIkFQUF9PUEVOX1RPX1NQT1RMSUdIVFwiLGVbZS5JU19JTVBBQ1RFRF9CWV9QSU5DXzg5Mz0xODJdPVwiSVNfSU1QQUNURURfQllfUElOQ184OTNcIixlW2UuREFZU19CRUZPUkVfQklSVEhEQVk9MTgzXT1cIkRBWVNfQkVGT1JFX0JJUlRIREFZXCIsZVtlLkhBU19CSVBBPTE4NF09XCJIQVNfQklQQVwiLGVbZS5FTUFJTF9WRVJJRklFRD0xODVdPVwiRU1BSUxfVkVSSUZJRURcIixlW2UuUEhPTkVfVkVSSUZJRUQ9MTg2XT1cIlBIT05FX1ZFUklGSUVEXCIsZVtlLk5PVElGSUNBVElPTl9QRVJNX0dSQU5URUQ9MTg3XT1cIk5PVElGSUNBVElPTl9QRVJNX0dSQU5URURcIixlW2UuQ09OVEFDVF9QRVJNX0dSQU5URUQ9MTg4XT1cIkNPTlRBQ1RfUEVSTV9HUkFOVEVEXCIsZVtlLk1VVFVBTF9GUklFTkRTX0NPVU5UPTE4OV09XCJNVVRVQUxfRlJJRU5EU19DT1VOVFwiLGVbZS5HUk9VUFNfQ09VTlQ9MTkwXT1cIkdST1VQU19DT1VOVFwiLGVbZS5TUE9UTElHSFRfU1RPUllfRU5HQUdFTUVOVF9TVEFUVVM9MTkxXT1cIlNQT1RMSUdIVF9TVE9SWV9FTkdBR0VNRU5UX1NUQVRVU1wiLGVbZS5IQVNfTk9OX1RFQU1fU05BUENIQVRfQ09OVkVSU0FUSU9OUz0xOTJdPVwiSEFTX05PTl9URUFNX1NOQVBDSEFUX0NPTlZFUlNBVElPTlNcIixlW2UuQ09HTkFDX0FQUF9JRD0xOTNdPVwiQ09HTkFDX0FQUF9JRFwiLGVbZS5QTEFZQkFDS19JVEVNX1RZUEU9MTk0XT1cIlBMQVlCQUNLX0lURU1fVFlQRVwiLGVbZS5TVVBfSVNfQklSVEhEQVlfUEFSVFlfRU5BQkxFRD0xOTVdPVwiU1VQX0lTX0JJUlRIREFZX1BBUlRZX0VOQUJMRURcIixlW2UuU1VQX0ZIUF9MQVNUX0lOVEVSQUNUSU9OX1RJTUVfTUlMTElTX1RPX05PVz0xOTZdPVwiU1VQX0ZIUF9MQVNUX0lOVEVSQUNUSU9OX1RJTUVfTUlMTElTX1RPX05PV1wiLGVbZS5TVVBfRkhQX0NPTlRBQ1RfU1lOQ19JTlRFUkFDVElPTl9DT1VOVD0xOTddPVwiU1VQX0ZIUF9DT05UQUNUX1NZTkNfSU5URVJBQ1RJT05fQ09VTlRcIixlW2UuU1VQX0ZIUF9DT05UQUNUX1NZTkNfTEFTVF9TSE9XTl9USU1FX01JTExJU19UT19OT1c9MTk4XT1cIlNVUF9GSFBfQ09OVEFDVF9TWU5DX0xBU1RfU0hPV05fVElNRV9NSUxMSVNfVE9fTk9XXCIsZVtlLlNVUF9GSFBfTk9USUZJQ0FUSU9OX1BFUk1JU1NJT05fSU5URVJBQ1RJT05fQ09VTlQ9MTk5XT1cIlNVUF9GSFBfTk9USUZJQ0FUSU9OX1BFUk1JU1NJT05fSU5URVJBQ1RJT05fQ09VTlRcIixlW2UuU1VQX0ZIUF9OT1RJRklDQVRJT05fUEVSTUlTU0lPTl9MQVNUX1NIT1dOX1RJTUVfTUlMTElTX1RPX05PVz0yMDBdPVwiU1VQX0ZIUF9OT1RJRklDQVRJT05fUEVSTUlTU0lPTl9MQVNUX1NIT1dOX1RJTUVfTUlMTElTX1RPX05PV1wiLGVbZS5TVVBfRkhQX1BIT05FX1ZFUklGSUNBVElPTl9JTlRFUkFDVElPTl9DT1VOVD0yMDFdPVwiU1VQX0ZIUF9QSE9ORV9WRVJJRklDQVRJT05fSU5URVJBQ1RJT05fQ09VTlRcIixlW2UuU1VQX0ZIUF9QSE9ORV9WRVJJRklDQVRJT05fTEFTVF9TSE9XTl9USU1FX01JTExJU19UT19OT1c9MjAyXT1cIlNVUF9GSFBfUEhPTkVfVkVSSUZJQ0FUSU9OX0xBU1RfU0hPV05fVElNRV9NSUxMSVNfVE9fTk9XXCIsZVtlLlNVUF9GSFBfQklSVEhEQVlfUEFSVFlfSU5URVJBQ1RJT05fQ09VTlQ9MjAzXT1cIlNVUF9GSFBfQklSVEhEQVlfUEFSVFlfSU5URVJBQ1RJT05fQ09VTlRcIixlW2UuU1VQX0ZIUF9CSVJUSERBWV9QQVJUWV9MQVNUX1NIT1dOX1RJTUVfTUlMTElTX1RPX05PVz0yMDRdPVwiU1VQX0ZIUF9CSVJUSERBWV9QQVJUWV9MQVNUX1NIT1dOX1RJTUVfTUlMTElTX1RPX05PV1wiLGVbZS5TVVBfRkhQX0VNQUlMX1ZFUklGSUNBVElPTl9JTlRFUkFDVElPTl9DT1VOVD0yMDVdPVwiU1VQX0ZIUF9FTUFJTF9WRVJJRklDQVRJT05fSU5URVJBQ1RJT05fQ09VTlRcIixlW2UuU1VQX0ZIUF9FTUFJTF9WRVJJRklDQVRJT05fTEFTVF9TSE9XTl9USU1FX01JTExJU19UT19OT1c9MjA2XT1cIlNVUF9GSFBfRU1BSUxfVkVSSUZJQ0FUSU9OX0xBU1RfU0hPV05fVElNRV9NSUxMSVNfVE9fTk9XXCIsZVtlLkhBU19VU0VEX1NQRUNUQUNMRVM9MjA3XT1cIkhBU19VU0VEX1NQRUNUQUNMRVNcIixlW2UuQk9MVF9DTElFTlRfQVBQX1NUQVRFPTIwOF09XCJCT0xUX0NMSUVOVF9BUFBfU1RBVEVcIixlW2UuRU1BSUxfU0VUPTIwOV09XCJFTUFJTF9TRVRcIixlW2UuQklUTU9KSV9TRVQ9MjEwXT1cIkJJVE1PSklfU0VUXCIsZVtlLlFVSUNLX1RBUF9DQU1FUkFfU1VQUE9SVEVEX0VOQUJMRUQ9MjExXT1cIlFVSUNLX1RBUF9DQU1FUkFfU1VQUE9SVEVEX0VOQUJMRURcIixlW2UuSEFTX0FERF9GUklFTkRTX1JFUVVFU1Q9MjEyXT1cIkhBU19BRERfRlJJRU5EU19SRVFVRVNUXCIsZVtlLkFQUF9MQVVOQ0hfRlJPTV9QVVNIPTIxM109XCJBUFBfTEFVTkNIX0ZST01fUFVTSFwiLGVbZS5BUFBfTEFVTkNIX1RZUEU9MjE0XT1cIkFQUF9MQVVOQ0hfVFlQRVwiLGVbZS5CSUxMQk9BUkRfQ0FNUEFJR05fTE9DQUxfSU1QUkVTU0lPTl9DT1VOVD0yMTVdPVwiQklMTEJPQVJEX0NBTVBBSUdOX0xPQ0FMX0lNUFJFU1NJT05fQ09VTlRcIixlW2UuQklMTEJPQVJEX0NBTVBBSUdOX0xPQ0FMX0xBU1RfSU1QUkVTU0lPTl9USU1FX1NFQ1NfVE9fTk9XPTIxNl09XCJCSUxMQk9BUkRfQ0FNUEFJR05fTE9DQUxfTEFTVF9JTVBSRVNTSU9OX1RJTUVfU0VDU19UT19OT1dcIixlW2UuQklMTEJPQVJEX0NBTVBBSUdOX0xPQ0FMX0NPTlRJTlVPVVNfRElTTUlTU19DT1VOVD0yMTddPVwiQklMTEJPQVJEX0NBTVBBSUdOX0xPQ0FMX0NPTlRJTlVPVVNfRElTTUlTU19DT1VOVFwiLGVbZS5GU1RfTlVNX0lOX0FQUF9XQVJOSU5HUz0yMThdPVwiRlNUX05VTV9JTl9BUFBfV0FSTklOR1NcIixlW2UuRlNUX1NIT1VMRF9DSEFOR0VfUEFTU1dPUkQ9MjE5XT1cIkZTVF9TSE9VTERfQ0hBTkdFX1BBU1NXT1JEXCIsZVtlLkZTVF9JU19CQUNLR1JPVU5EX0NIRUNLPTIyMF09XCJGU1RfSVNfQkFDS0dST1VORF9DSEVDS1wiLGVbZS5TVVBfRlNUX0lERU5USVRZX1ZFUklGSUNBVElPTl9JTVBSRVNTSU9OX0NPVU5UPTIyMV09XCJTVVBfRlNUX0lERU5USVRZX1ZFUklGSUNBVElPTl9JTVBSRVNTSU9OX0NPVU5UXCIsZVtlLlNVUF9GU1RfSURFTlRJVFlfVkVSSUZJQ0FUSU9OX0xBU1RfSU1QUkVTU0lPTl9USU1FX1NFQ1NfVE9fTk9XPTIyMl09XCJTVVBfRlNUX0lERU5USVRZX1ZFUklGSUNBVElPTl9MQVNUX0lNUFJFU1NJT05fVElNRV9TRUNTX1RPX05PV1wiLGVbZS5TVVBfRlNUX0ZSSUVORF9BRERfTEFTVF9JTVBSRVNTSU9OX1RJTUVfU0VDU19UT19OT1c9MjIzXT1cIlNVUF9GU1RfRlJJRU5EX0FERF9MQVNUX0lNUFJFU1NJT05fVElNRV9TRUNTX1RPX05PV1wiLGVbZS5TVVBfRlNUX0NPTlRBQ1RfU1lOQ19JTVBSRVNTSU9OX0NPVU5UPTIyNF09XCJTVVBfRlNUX0NPTlRBQ1RfU1lOQ19JTVBSRVNTSU9OX0NPVU5UXCIsZVtlLlNVUF9GU1RfQ09OVEFDVF9TWU5DX0xBU1RfSU1QUkVTU0lPTl9USU1FX1NFQ1NfVE9fTk9XPTIyNV09XCJTVVBfRlNUX0NPTlRBQ1RfU1lOQ19MQVNUX0lNUFJFU1NJT05fVElNRV9TRUNTX1RPX05PV1wiLGVbZS5TVVBfRlNUX0JJVE1PSklfQ1JFQVRJT05fSU1QUkVTU0lPTl9DT1VOVD0yMjZdPVwiU1VQX0ZTVF9CSVRNT0pJX0NSRUFUSU9OX0lNUFJFU1NJT05fQ09VTlRcIixlW2UuU1VQX0ZTVF9CSVRNT0pJX0NSRUFUSU9OX0xBU1RfSU1QUkVTU0lPTl9USU1FX1NFQ1NfVE9fTk9XPTIyN109XCJTVVBfRlNUX0JJVE1PSklfQ1JFQVRJT05fTEFTVF9JTVBSRVNTSU9OX1RJTUVfU0VDU19UT19OT1dcIixlW2UuU1VQX0ZTVF9VU0VSX1JFQUNIQUJJTElUWV9MQVNUX0lNUFJFU1NJT05fVElNRV9TRUNTX1RPX05PVz0yMjhdPVwiU1VQX0ZTVF9VU0VSX1JFQUNIQUJJTElUWV9MQVNUX0lNUFJFU1NJT05fVElNRV9TRUNTX1RPX05PV1wiLGVbZS5TVVBfRlNUX0JJUEFfSEFTX0NMSUNLRUQ9MjI5XT1cIlNVUF9GU1RfQklQQV9IQVNfQ0xJQ0tFRFwiLGVbZS5JTkNMVVNJT05fUEFORUxfTUVNQkVSPTIzMF09XCJJTkNMVVNJT05fUEFORUxfTUVNQkVSXCIsZVtlLkFVRElPX1JFQ09SRF9QRVJNX0dSQU5URUQ9MjMxXT1cIkFVRElPX1JFQ09SRF9QRVJNX0dSQU5URURcIixlW2UuTVVUVUFMX0ZSSUVORFNfV0lUSF9CSVJUSERBWV9DT1VOVD0yMzJdPVwiTVVUVUFMX0ZSSUVORFNfV0lUSF9CSVJUSERBWV9DT1VOVFwiLGVbZS5CSUxMQk9BUkRfQ0FNUEFJR05fTE9DQUxfRElTTUlTU19DT1VOVD0yMzNdPVwiQklMTEJPQVJEX0NBTVBBSUdOX0xPQ0FMX0RJU01JU1NfQ09VTlRcIixlW2UuU1VQX1BBQ19QSE9ORV9WRVJJRklDQVRJT05fRElTTUlTU19DT1VOVD0yMzRdPVwiU1VQX1BBQ19QSE9ORV9WRVJJRklDQVRJT05fRElTTUlTU19DT1VOVFwiLGVbZS5TVVBfUEFDX0JJUlRIREFZX01JTklfSU1QUkVTU0lPTl9DT1VOVD0yMzVdPVwiU1VQX1BBQ19CSVJUSERBWV9NSU5JX0lNUFJFU1NJT05fQ09VTlRcIixlW2UuU1VQX1BBQ19CSVJUSERBWV9NSU5JX0RJU01JU1NfQ09VTlQ9MjM2XT1cIlNVUF9QQUNfQklSVEhEQVlfTUlOSV9ESVNNSVNTX0NPVU5UXCIsZVtlLlNVUF9QQUNfUlVOX0ZPUl9PRkZJQ0VfTUlOSV9JTVBSRVNTSU9OX0NPVU5UPTIzN109XCJTVVBfUEFDX1JVTl9GT1JfT0ZGSUNFX01JTklfSU1QUkVTU0lPTl9DT1VOVFwiLGVbZS5TVVBfUEFDX1JVTl9GT1JfT0ZGSUNFX01JTklfRElTTUlTU19DT1VOVD0yMzhdPVwiU1VQX1BBQ19SVU5fRk9SX09GRklDRV9NSU5JX0RJU01JU1NfQ09VTlRcIixlW2UuU1VQX1BBQ19GUklFTkRfQ0hFQ0tVUF9MQVNUX1NIT1dOX1RJTUVfTUlMTElTX1RPX05PVz0yMzldPVwiU1VQX1BBQ19GUklFTkRfQ0hFQ0tVUF9MQVNUX1NIT1dOX1RJTUVfTUlMTElTX1RPX05PV1wiLGVbZS5TVVBfUEFDX0ZSSUVORF9DSEVDS1VQX0lNUFJFU1NJT05fQ09VTlQ9MjQwXT1cIlNVUF9QQUNfRlJJRU5EX0NIRUNLVVBfSU1QUkVTU0lPTl9DT1VOVFwiLGVbZS5TVVBfUEFDX0ZSSUVORF9DSEVDS1VQX0NMSUNLX0NPVU5UPTI0MV09XCJTVVBfUEFDX0ZSSUVORF9DSEVDS1VQX0NMSUNLX0NPVU5UXCIsZVtlLlNVUF9QQUNfRlJJRU5EX0NIRUNLVVBfRElTTUlTU19DT1VOVD0yNDJdPVwiU1VQX1BBQ19GUklFTkRfQ0hFQ0tVUF9ESVNNSVNTX0NPVU5UXCIsZVtlLlVTRV9WRVJUSUNBTF9OQVZJR0FUSU9OPTI0M109XCJVU0VfVkVSVElDQUxfTkFWSUdBVElPTlwiLGVbZS5IRVZDX0hXX0RFQ09ERVI9MjQ0XT1cIkhFVkNfSFdfREVDT0RFUlwiLGVbZS5IRVZDX1NXX0RFQ09ERVI9MjQ1XT1cIkhFVkNfU1dfREVDT0RFUlwiLGVbZS5TVVBfRkhQX0NPTlRBQ1RfU1lOQ19JTVBSRVNTSU9OX0NPVU5UPTI0Nl09XCJTVVBfRkhQX0NPTlRBQ1RfU1lOQ19JTVBSRVNTSU9OX0NPVU5UXCIsZVtlLlNVUF9GSFBfTk9USUZJQ0FUSU9OX1BFUk1JU1NJT05fSU1QUkVTU0lPTl9DT1VOVD0yNDddPVwiU1VQX0ZIUF9OT1RJRklDQVRJT05fUEVSTUlTU0lPTl9JTVBSRVNTSU9OX0NPVU5UXCIsZVtlLlNVUF9GSFBfUEhPTkVfVkVSSUZJQ0FUSU9OX0lNUFJFU1NJT05fQ09VTlQ9MjQ4XT1cIlNVUF9GSFBfUEhPTkVfVkVSSUZJQ0FUSU9OX0lNUFJFU1NJT05fQ09VTlRcIixlW2UuU1VQX0ZIUF9FTUFJTF9WRVJJRklDQVRJT05fSU1QUkVTU0lPTl9DT1VOVD0yNDldPVwiU1VQX0ZIUF9FTUFJTF9WRVJJRklDQVRJT05fSU1QUkVTU0lPTl9DT1VOVFwiLGVbZS5NRU1PUklFU19DT1VOVD0yNTBdPVwiTUVNT1JJRVNfQ09VTlRcIixlW2UuU1VQX0ZIUF9DT05UQUNUX1NZTkNfRElTTUlTU19DT1VOVD0yNTFdPVwiU1VQX0ZIUF9DT05UQUNUX1NZTkNfRElTTUlTU19DT1VOVFwiLGVbZS5TVVBfRkhQX05PVElGSUNBVElPTl9QRVJNSVNTSU9OX0RJU01JU1NfQ09VTlQ9MjUyXT1cIlNVUF9GSFBfTk9USUZJQ0FUSU9OX1BFUk1JU1NJT05fRElTTUlTU19DT1VOVFwiLGVbZS5TVVBfRkhQX1BIT05FX1ZFUklGSUNBVElPTl9ESVNNSVNTX0NPVU5UPTI1M109XCJTVVBfRkhQX1BIT05FX1ZFUklGSUNBVElPTl9ESVNNSVNTX0NPVU5UXCIsZVtlLlNVUF9GSFBfRU1BSUxfVkVSSUZJQ0FUSU9OX0RJU01JU1NfQ09VTlQ9MjU0XT1cIlNVUF9GSFBfRU1BSUxfVkVSSUZJQ0FUSU9OX0RJU01JU1NfQ09VTlRcIixlW2UuU0VSVkVSX09OTFk9MjU1XT1cIlNFUlZFUl9PTkxZXCIsZVtlLkhBU19BQ1RJVkVfU05BUENIQVRfUExVUz0yNTZdPVwiSEFTX0FDVElWRV9TTkFQQ0hBVF9QTFVTXCIsZVtlLlNVUF9GU1RfU05BUF9QTFVTX0lNUFJFU1NJT05fQ09VTlQ9MjU3XT1cIlNVUF9GU1RfU05BUF9QTFVTX0lNUFJFU1NJT05fQ09VTlRcIixlW2UuU1VQX0ZTVF9TTkFQX1BMVVNfTEFTVF9JTVBSRVNTSU9OX1RJTUVfU0VDU19UT19OT1c9MjU4XT1cIlNVUF9GU1RfU05BUF9QTFVTX0xBU1RfSU1QUkVTU0lPTl9USU1FX1NFQ1NfVE9fTk9XXCIsZVtlLkNPTkZJR19URV9FTkFCTEVEPTI1OV09XCJDT05GSUdfVEVfRU5BQkxFRFwiLGVbZS5TTkFQX0tJVF9PQVVUSF9JRD0yNjBdPVwiU05BUF9LSVRfT0FVVEhfSURcIixlW2UuT1JHQU5JWkFUSU9OX1RZUEU9MjYxXT1cIk9SR0FOSVpBVElPTl9UWVBFXCIsZVtlLkNIVU5LX1VQTE9BRF9TVVBQT1JUX1JFUVVJUkVEPTI2Ml09XCJDSFVOS19VUExPQURfU1VQUE9SVF9SRVFVSVJFRFwiLGVbZS5TVVBfRlNUX0lPU19MT0NLU0NSRUVOX1dJREdFVF9JTVBSRVNTSU9OX0NPVU5UPTI2M109XCJTVVBfRlNUX0lPU19MT0NLU0NSRUVOX1dJREdFVF9JTVBSRVNTSU9OX0NPVU5UXCIsZVtlLlNVUF9GU1RfSU9TX0xPQ0tTQ1JFRU5fV0lER0VUX0xBU1RfSU1QUkVTU0lPTl9USU1FX1NFQ1NfVE9fTk9XPTI2NF09XCJTVVBfRlNUX0lPU19MT0NLU0NSRUVOX1dJREdFVF9MQVNUX0lNUFJFU1NJT05fVElNRV9TRUNTX1RPX05PV1wiLGVbZS5TVVBfRlNUX0lPU19MT0NLU0NSRUVOX1dJREdFVF9DTElDS19DT1VOVD0yNjVdPVwiU1VQX0ZTVF9JT1NfTE9DS1NDUkVFTl9XSURHRVRfQ0xJQ0tfQ09VTlRcIixlW2UuU1VQX1BBQ19NWV9QUk9GSUxFX0lPU19MT0NLU0NSRUVOX1dJREdFVF9DTElDS19DT1VOVD0yNjZdPVwiU1VQX1BBQ19NWV9QUk9GSUxFX0lPU19MT0NLU0NSRUVOX1dJREdFVF9DTElDS19DT1VOVFwiLGVbZS5TVVBfUEFDX01ZX1BST0ZJTEVfSU9TX0xPQ0tTQ1JFRU5fV0lER0VUX0RJU01JU1NfQ09VTlQ9MjY3XT1cIlNVUF9QQUNfTVlfUFJPRklMRV9JT1NfTE9DS1NDUkVFTl9XSURHRVRfRElTTUlTU19DT1VOVFwiLGVbZS5TVVBfSU9TX0xPQ0tfU0NSRUVOX1dJREdFVF9FTkFCTEVEPTI2OF09XCJTVVBfSU9TX0xPQ0tfU0NSRUVOX1dJREdFVF9FTkFCTEVEXCIsZVtlLkNMT1VERlJPTlRfUE9QPTI2OV09XCJDTE9VREZST05UX1BPUFwiLGVbZS5CSUxMQk9BUkRfQ0FNUEFJR05fTE9DQUxfRklSU1RfSU1QUkVTU0lPTl9USU1FX1NFQ1NfVE9fTk9XPTI3MF09XCJCSUxMQk9BUkRfQ0FNUEFJR05fTE9DQUxfRklSU1RfSU1QUkVTU0lPTl9USU1FX1NFQ1NfVE9fTk9XXCIsZVtlLkJJTExCT0FSRF9DQU1QQUlHTl9MT0NBTF9DTElDS19DT1VOVD0yNzFdPVwiQklMTEJPQVJEX0NBTVBBSUdOX0xPQ0FMX0NMSUNLX0NPVU5UXCIsZVtlLkJJTExCT0FSRF9DQU1QQUlHTl9MT0NBTF9JTlRFUkFDVElPTl9DT1VOVD0yNzJdPVwiQklMTEJPQVJEX0NBTVBBSUdOX0xPQ0FMX0lOVEVSQUNUSU9OX0NPVU5UXCIsZVtlLkJJTExCT0FSRF9DQU1QQUlHTl9MT0NBTF9MQVNUX0lOVEVSQUNUSU9OX1RJTUVfU0VDU19UT19OT1c9MjczXT1cIkJJTExCT0FSRF9DQU1QQUlHTl9MT0NBTF9MQVNUX0lOVEVSQUNUSU9OX1RJTUVfU0VDU19UT19OT1dcIixlW2UuU05BUF9QUklWQUNZPTI3NF09XCJTTkFQX1BSSVZBQ1lcIixlW2UuRlNUX0xPQ0tfU0NSRUVOX1dJREdFVF9CSUxMQk9BUkRfTEFVTkNIRURfRlJPTV9QVVNIPTI3NV09XCJGU1RfTE9DS19TQ1JFRU5fV0lER0VUX0JJTExCT0FSRF9MQVVOQ0hFRF9GUk9NX1BVU0hcIixlW2UuV0VCX1NDUkVFTl9XSURUSD0yNzZdPVwiV0VCX1NDUkVFTl9XSURUSFwiLGVbZS5XRUJfU0NSRUVOX0hFSUdIVD0yNzddPVwiV0VCX1NDUkVFTl9IRUlHSFRcIixlW2UuQURTX0lOVEVSRkFDRVNfSVNfTkVXX09SR0FOSVpBVElPTj0yNzhdPVwiQURTX0lOVEVSRkFDRVNfSVNfTkVXX09SR0FOSVpBVElPTlwiLGVbZS5TVVBfRkhQX1JFR0lTVEVSX1RPX1ZPVEVfQ0FNUEFJR05fTEFTVF9ESVNNSVNTX1RJTUVfTUlMTElTX1RPX05PVz0yNzldPVwiU1VQX0ZIUF9SRUdJU1RFUl9UT19WT1RFX0NBTVBBSUdOX0xBU1RfRElTTUlTU19USU1FX01JTExJU19UT19OT1dcIixlW2UuR0hFX09SR0FOSVpBVElPTj0yODBdPVwiR0hFX09SR0FOSVpBVElPTlwiLGVbZS5HSEVfUkVQT1NJVE9SWT0yODFdPVwiR0hFX1JFUE9TSVRPUllcIixlW2UuR0hFX1VTRVJfRU1BSUw9MjgyXT1cIkdIRV9VU0VSX0VNQUlMXCIsZVtlLkJVSUxEX0RFRklOSVRJT05fSUQ9MjgzXT1cIkJVSUxEX0RFRklOSVRJT05fSURcIixlW2UuQlVJTERfREVGSU5JVElPTl9OQU1FPTI4NF09XCJCVUlMRF9ERUZJTklUSU9OX05BTUVcIixlW2UuTENBX1BSSU5DSVBBTD0yODVdPVwiTENBX1BSSU5DSVBBTFwiLGVbZS5NRURJQV9QRVJGT1JNQU5DRV9DTEFTUz0yODZdPVwiTUVESUFfUEVSRk9STUFOQ0VfQ0xBU1NcIixlW2UuQ09NTVVOSVRZX0NPVU5UPTI4N109XCJDT01NVU5JVFlfQ09VTlRcIixlW2UuVVNFUl9HUk9VUD05OTk5XT1cIlVTRVJfR1JPVVBcIixlW2UuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwifShpaXx8KGlpPXt9KSk7dmFyIGFpLHNpLGNpPSgoKT0+e2lmKHZvaWQgMCE9PWNpKXJldHVybiBjaTtpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZilyZXR1cm4gc2VsZjtpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93KXJldHVybiB3aW5kb3c7aWYodm9pZCAwIT09bi5nKXJldHVybiBuLmc7dGhyb3dcIlVuYWJsZSB0byBsb2NhdGUgZ2xvYmFsIG9iamVjdFwifSkoKTtidCgpLnV0aWwuTG9uZyE9PUl0KCkmJihidCgpLnV0aWwuTG9uZz1JdCgpLGJ0KCkuY29uZmlndXJlKCkpLGZ1bmN0aW9uKGUpe2VbZS5VTktOT1dOX1VOU0VUPTBdPVwiVU5LTk9XTl9VTlNFVFwiLGVbZS5VU0VSPTFdPVwiVVNFUlwiLGVbZS5TTkFQQ0hBVF9DTElFTlQ9Ml09XCJTTkFQQ0hBVF9DTElFTlRcIixlW2UuV0VCX0NMSUVOVD0zXT1cIldFQl9DTElFTlRcIixlW2UuV0VCX1NOQVBDSEFUX1VTRVI9NF09XCJXRUJfU05BUENIQVRfVVNFUlwiLGVbZS5BRF9BQ0NPVU5UPTVdPVwiQURfQUNDT1VOVFwiLGVbZS5BTV9PUkdBTklaQVRJT049Nl09XCJBTV9PUkdBTklaQVRJT05cIixlW2UuQU1fTUVNQkVSPTddPVwiQU1fTUVNQkVSXCIsZVtlLkFNX1NFU1NJT049OF09XCJBTV9TRVNTSU9OXCIsZVtlLkFNX1BST0ZJTEU9OV09XCJBTV9QUk9GSUxFXCIsZVtlLkFNX1NOQVBDSEFUX1VTRVI9MTBdPVwiQU1fU05BUENIQVRfVVNFUlwiLGVbZS5TTkFQQ0hBVF9BRFZFUlRJU0lORz0xMV09XCJTTkFQQ0hBVF9BRFZFUlRJU0lOR1wiLGVbZS5BTV9DTElFTlQ9MTJdPVwiQU1fQ0xJRU5UXCIsZVtlLkNPTkZJR19ERVZJQ0U9MTNdPVwiQ09ORklHX0RFVklDRVwiLGVbZS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCJ9KGFpfHwoYWk9e30pKSxmdW5jdGlvbihlKXtlW2UuVU5TRVQ9MF09XCJVTlNFVFwiLGVbZS5TRVJWRVJfVFJJR0dFUj0xXT1cIlNFUlZFUl9UUklHR0VSXCIsZVtlLkNMSUVOVF9UUklHR0VSPTJdPVwiQ0xJRU5UX1RSSUdHRVJcIixlW2UuQUxMT0NBVElPTj0zXT1cIkFMTE9DQVRJT05cIixlW2UuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwifShzaXx8KHNpPXt9KSk7dmFyIGxpPSgoKT0+e2lmKHZvaWQgMCE9PWxpKXJldHVybiBsaTtpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZilyZXR1cm4gc2VsZjtpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93KXJldHVybiB3aW5kb3c7aWYodm9pZCAwIT09bi5nKXJldHVybiBuLmc7dGhyb3dcIlVuYWJsZSB0byBsb2NhdGUgZ2xvYmFsIG9iamVjdFwifSkoKTtidCgpLnV0aWwuTG9uZyE9PUl0KCkmJihidCgpLnV0aWwuTG9uZz1JdCgpLGJ0KCkuY29uZmlndXJlKCkpO2NvbnN0IHVpPSgpPT5lPT4odCxuKT0+ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaShlKXt0cnl7YShyLm5leHQoZSkpfWNhdGNoKGUpe3QoZSl9fWZ1bmN0aW9uIG8oZSl7dHJ5e2Eoci50aHJvdyhlKSl9Y2F0Y2goZSl7dChlKX19ZnVuY3Rpb24gYSh0KXt2YXIgcjt0LmRvbmU/ZSh0LnZhbHVlKToocj10LnZhbHVlLHIgaW5zdGFuY2VvZiBuP3I6bmV3IG4oKGZ1bmN0aW9uKGUpe2Uocil9KSkpLnRoZW4oaSxvKX1hKChyPXIuYXBwbHkodW5kZWZpbmVkLFtdKSkubmV4dCgpKX0pKX0oMCwwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcj15aWVsZCBlKHQsbik7bGV0IGk7dHJ5e2k9eWllbGQgci5hcnJheUJ1ZmZlcigpfWNhdGNoKGUpe2k9bmV3IEFycmF5QnVmZmVyKDApfXJldHVybltpLHJdfSkpO3ZhciBkaT1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBhKGUpe3RyeXtjKHIubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gcyhlKXt0cnl7YyhyLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBjKGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIG4/dDpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihhLHMpfWMoKHI9ci5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX07ZnVuY3Rpb24gZmkoZSl7Y29uc3QgdD1uZXcgUHJvbWlzZSgoKHQsbik9PntlLm9uc3VjY2Vzcz0oKT0+dChlLnJlc3VsdCksZS5vbmVycm9yPSgpPT5uKGUuZXJyb3IpfSkpO3JldHVybiB0LnJlcXVlc3Q9ZSx0fWZ1bmN0aW9uIHBpKGUpe3JldHVybiBuZXcgUHJvbWlzZSgoKHQsbik9PntlLm9uc3VjY2Vzcz0oKT0+e2NvbnN0IG49ZS5yZXN1bHQ7dChuP3tjdXJzb3I6bixjb250aW51ZTooKT0+KG4uY29udGludWUoKSxwaShlKSl9OntjdXJzb3I6bnVsbCxjb250aW51ZTooKT0+UHJvbWlzZS5yZWplY3QoKX0pfSxlLm9uZXJyb3I9KCk9Pm4oZS5lcnJvcil9KSl9Y2xhc3MgbWl7Y29uc3RydWN0b3IoZSl7dmFyIHQ7dGhpcy5kYXRhYmFzZU5hbWU9YFNuYXAuQ2FtZXJhS2l0LiR7ZS5kYXRhYmFzZU5hbWV9YCx0aGlzLmRhdGFiYXNlVmVyc2lvbj1lLmRhdGFiYXNlVmVyc2lvbix0aGlzLm9iamVjdFN0b3JlPW51bGwhPT0odD1lLm9iamVjdFN0b3JlKSYmdm9pZCAwIT09dD90OmUuZGF0YWJhc2VOYW1lLHRoaXMuZGI9dGhpcy5vcGVuRGF0YWJhc2UoaW5kZXhlZERCLm9wZW4odGhpcy5kYXRhYmFzZU5hbWUsdGhpcy5kYXRhYmFzZVZlcnNpb24pKSx0aGlzLnNpemU9MH1yZXRyaWV2ZShlKXtyZXR1cm4gdGhpcy5zaW1wbGVUcmFuc2FjdGlvbihcInJlYWRvbmx5XCIsKHQ9PnQuZ2V0KGUpKSl9cmV0cmlldmVBbGwoKXtyZXR1cm4gdGhpcy5zaW1wbGVUcmFuc2FjdGlvbihcInJlYWRvbmx5XCIsKGU9PmUuZ2V0QWxsKCkpKX1yZW1vdmUoZSl7cmV0dXJuIGRpKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zaW1wbGVUcmFuc2FjdGlvbihcInJlYWR3cml0ZVwiLCh0PT50LmRlbGV0ZShlKSkpLHRoaXMuc2l6ZS0tfSkpfXJlbW92ZUFsbCgpe3JldHVybiBkaSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9W10se3N0b3JlOnQsZG9uZTpufT15aWVsZCB0aGlzLnRyYW5zYWN0aW9uKFwicmVhZHdyaXRlXCIpO2xldCByPXlpZWxkIHBpKHQub3BlbkN1cnNvcigpKTtjb25zdCBpPVtdO2Zvcig7ci5jdXJzb3I7KWUucHVzaChyLmN1cnNvci52YWx1ZSksaS5wdXNoKGZpKHQuZGVsZXRlKHIuY3Vyc29yLmtleSkpKSxyPXlpZWxkIHIuY29udGludWUoKTtyZXR1cm4geWllbGQgUHJvbWlzZS5hbGwoaS5jb25jYXQobikpLHRoaXMuc2l6ZT0wLGV9KSl9c3RvcmUoZSx0KXtyZXR1cm4gZGkodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBuPXZvaWQgMD09PXQ/dm9pZCAwOmUscj12b2lkIDA9PT10P2U6dDtpZighKGU9Plwic3RyaW5nXCI9PXR5cGVvZiBlfHxcIm51bWJlclwiPT10eXBlb2YgZSkobikmJnZvaWQgMCE9PW4pdGhyb3cgbmV3IFR5cGVFcnJvcihcIkluZGV4ZWREQlBlcnNpc3RlbmNlIGZhaWxlZCB0byBzdG9yZSBhIHZhbHVlLiBJbnZhbGlkIGtleSB0eXBlOiBcIit0eXBlb2Ygbik7Y29uc3QgaT15aWVsZCB0aGlzLnNpbXBsZVRyYW5zYWN0aW9uKFwicmVhZHdyaXRlXCIsKGU9PmUucHV0KHIsbikpKTtyZXR1cm4gdGhpcy5zaXplKyssaX0pKX1vcGVuRGF0YWJhc2UoZSl7cmV0dXJuIGRpKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1maShlKTt0LnJlcXVlc3Qub251cGdyYWRlbmVlZGVkPSgpPT57dHJ5e3QucmVxdWVzdC5yZXN1bHQuY3JlYXRlT2JqZWN0U3RvcmUodGhpcy5vYmplY3RTdG9yZSx7YXV0b0luY3JlbWVudDohMH0pfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBET01FeGNlcHRpb24mJlwiQ29uc3RyYWludEVycm9yXCI9PT1lLm5hbWUpcmV0dXJuO3Rocm93IGV9fTtjb25zdCBuPXlpZWxkIHQ7cmV0dXJuIG4ub25jbG9zZT0oKT0+e3RoaXMuZGI9dGhpcy5vcGVuRGF0YWJhc2UoaW5kZXhlZERCLm9wZW4odGhpcy5kYXRhYmFzZU5hbWUsdGhpcy5kYXRhYmFzZVZlcnNpb24pKX0sbn0pKX1zaW1wbGVUcmFuc2FjdGlvbihlLHQpe3JldHVybiBkaSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0e3N0b3JlOm4sZG9uZTpyfT15aWVsZCB0aGlzLnRyYW5zYWN0aW9uKGUpLFtpXT15aWVsZCBQcm9taXNlLmFsbChbZmkodChuKSkscl0pO3JldHVybiBpfSkpfXRyYW5zYWN0aW9uKGUpe3JldHVybiBkaSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9KHlpZWxkIHRoaXMuZGIpLnRyYW5zYWN0aW9uKHRoaXMub2JqZWN0U3RvcmUsZSksbj10Lm9iamVjdFN0b3JlKHRoaXMub2JqZWN0U3RvcmUpLHI9bmV3IFByb21pc2UoKChlLG4pPT57dC5vbmNvbXBsZXRlPSgpPT5lKCksdC5vbmVycm9yPSgpPT5uKHQuZXJyb3IpLHQub25hYm9ydD0oKT0+bihuZXcgRE9NRXhjZXB0aW9uKFwiVGhlIHRyYW5zYWN0aW9uIHdhcyBhYm9ydGVkXCIsXCJBYm9ydEVycm9yXCIpKX0pKTtyZXR1cm57dHg6dCxzdG9yZTpuLGRvbmU6cn19KSl9fWNvbnN0IGhpPWdlKFwicmVzcG9uc2VDYWNoZUhhbmRsZXJcIik7dmFyIHZpPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIGEoZSl7dHJ5e2Moci5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBzKGUpe3RyeXtjKHIudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGMoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKGEscyl9Yygocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfTtjb25zdCBnaT0oW2UsdF0pPT52aSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgbj15aWVsZCBmdW5jdGlvbihlLHQpe2NvbnN0e3JwYzpufT1mdW5jdGlvbigpe2NvbnN0IGU9VnIoKTtpZighZSl0aHJvdyBuZXcgRXJyb3IoXCJpbml0Q29uZmlnc0NsaWVudCgpIGhhcyB0byBiZSBjYWxsZWQgb24gYXBwIHN0YXJ0dXBcIik7cmV0dXJuIGV9KCk7cmV0dXJuIG4udW5hcnkoR3IscW4uZnJvbVBhcnRpYWwoZSksdCl9KGUsT2JqZWN0LmFzc2lnbih7XCJ4LXNuYXAtY2xpZW50LXVzZXItYWdlbnRcIjpsdC51c2VyQWdlbnR9LHQpKTtyZXR1cm4gZGVsZXRlIG4udG9PYmplY3Qsbn0pKSx5aT1cImNvZlwiLEVpPUooXCJjb2ZIYW5kbGVyXCIsKCgpPT4oZnVuY3Rpb24oKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06QnI7Y29uc3QgdD1WcigpO2lmKHQpe2lmKEpTT04uc3RyaW5naWZ5KGUpIT09SlNPTi5zdHJpbmdpZnkodC5zZXR0aW5ncykpdGhyb3cgbmV3IEVycm9yKFwiaW5pdENvbmZpZ3NDbGllbnQoKSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZFwiKX1lbHNlIWZ1bmN0aW9uKGUpe1widW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJih3aW5kb3dbRnJdPWUpfSh7c2V0dGluZ3M6ZSxycGM6bmV3IHhyKGUuaG9zdCx7bWV0YWRhdGE6ZS5tZXRhZGF0YX0pfSksTXIocHIuV0VCX1NDUkVFTl9IRUlHSFQsKCgpPT53aW5kb3cuaW5uZXJIZWlnaHQpKSxNcihwci5XRUJfU0NSRUVOX1dJRFRILCgoKT0+d2luZG93LmlubmVyV2lkdGgpKX0oKSxuZXcgZmUoZ2kpLm1hcCgoZT0+KHQsbik9PnZpKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCByPXtyZXF1ZXN0VHlwZTp5aX0se3JlcXVlc3RJZDppfT1Fbih7ZGltZW5zaW9uczpyfSk7dHJ5e2NvbnN0IG89eWllbGQgZSh0LG4pLGE9MjAwO2xldCBzPTA7dHJ5e3M9KG5ldyBUZXh0RW5jb2RlcikuZW5jb2RlKEpTT04uc3RyaW5naWZ5KG8pKS5ieXRlTGVuZ3RofWZpbmFsbHl7cmV0dXJuIF9uKHtyZXF1ZXN0SWQ6aSxkaW1lbnNpb25zOnIsc3RhdHVzOmEsc2l6ZUJ5dGU6c30pLG99fWNhdGNoKGUpe3Rocm93IEluKHtyZXF1ZXN0SWQ6aSxkaW1lbnNpb25zOnIsZXJyb3I6TWUoZSl9KSxlfX0pKSkpLm1hcChiZSh7cmV0cnlQcmVkaWNhdGU6ZT0+ZSBpbnN0YW5jZW9mIEVycm9yfSkpLm1hcChDZSh7dGltZW91dDo1ZTN9KSkubWFwKCgoe2NhY2hlOmUsa2V5UmVzb2x2ZXI6dCxtYXhBZ2U6bn0pPT5yPT4oaSxvKT0+ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaShlKXt0cnl7YShyLm5leHQoZSkpfWNhdGNoKGUpe3QoZSl9fWZ1bmN0aW9uIG8oZSl7dHJ5e2Eoci50aHJvdyhlKSl9Y2F0Y2goZSl7dChlKX19ZnVuY3Rpb24gYSh0KXt2YXIgcjt0LmRvbmU/ZSh0LnZhbHVlKToocj10LnZhbHVlLHIgaW5zdGFuY2VvZiBuP3I6bmV3IG4oKGZ1bmN0aW9uKGUpe2Uocil9KSkpLnRoZW4oaSxvKX1hKChyPXIuYXBwbHkodW5kZWZpbmVkLFtdKSkubmV4dCgpKX0pKX0oMCwwLHZvaWQgMCwoZnVuY3Rpb24qKCl7bGV0IGE7dHJ5e2E9dChpLG8pfWNhdGNoKGUpe3JldHVybiBoaS53YXJuKFwiQ291bGQgbm90IHJlc29sdmUgY2FjaGUga2V5IGR1ZSB0byBlcnJvclwiLGUpLHIoaSxvKX10cnl7Y29uc3QgdD15aWVsZCByKGksbyk7cmV0dXJuIHlpZWxkIGUuc3RvcmUoYSxbRGF0ZS5ub3coKSx0XSkuY2F0Y2goKGU9PmhpLndhcm4oYENvdWxkIG5vdCBjYWNoZSByZXNwb25zZSB3aXRoIGtleSAke2F9YCxlKSkpLGhpLmRlYnVnKFwiQWRkZWQvdXBkYXRlZCBjYWNoZSBlbnRyeSBmb3Iga2V5XCIsYSksdH1jYXRjaCh0KXtoaS5kZWJ1ZyhcIklubmVyIGhhbmRsZXIgdGhyZXdcIix0LFwiXFxuV2lsbCB0cnkgdG8gbG9va3VwIGNhY2hlLi4uXCIpO2NvbnN0IHI9eWllbGQgZS5yZXRyaWV2ZShhKS5jYXRjaCgoZT0+aGkud2FybihcIlVuYWJsZSB0byByZXRyaWV2ZSByZXNwb25zZSBmcm9tIGNhY2hlXCIsZSkpKTtpZihyKXtjb25zdFtlLGldPXI7aWYoZSsxZTMqbj5EYXRlLm5vdygpKXJldHVybiBpO3Rocm93IGhpLmRlYnVnKFwiU3RhbGUgY2FjaGUgZW50cnkgZm9yIGtleVwiLGEsXCIsIHJlLXRocm93aW5nIG9yaWdpbmFsIGVycm9yLi4uXCIpLHR9dGhyb3cgaGkuZGVidWcoXCJObyBjYWNoZSBlbnRyeSBmb3Iga2V5XCIsYSxcIiwgcmUtdGhyb3dpbmcgb3JpZ2luYWwgZXJyb3IuLi5cIiksdH19KSkpKHtjYWNoZTpuZXcgbWkoe2RhdGFiYXNlTmFtZTpcIkNPRkNhY2hlXCJ9KSxrZXlSZXNvbHZlcjplPT5KU09OLnN0cmluZ2lmeShlKSxtYXhBZ2U6NjA0ODAwfSkpLmhhbmRsZXIpKSk7dmFyIF9pPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIGEoZSl7dHJ5e2Moci5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBzKGUpe3RyeXtjKHIudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGMoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKGEscyl9Yygocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfTtjb25zdCBJaT1nZShcImRldmljZURlcGVuZGVudEFzc2V0TG9hZGVyXCIpO2Z1bmN0aW9uIFNpKGUpe3JldHVybiBlLnJlZHVjZSgoKGUse2NvbmZpZ0lkOnQsdmFsdWU6bn0pPT57aWYoIShlPT5jZShlKSYmcmUoZS5zdHJpbmdWYWx1ZSkpKG4pKXJldHVybiBlO3RyeXtjb25zdCByPUpTT04ucGFyc2Uobi5zdHJpbmdWYWx1ZSk7cmV0dXJuKGU9PmNlKGUpJiZyZShlLnVybCkmJih2b2lkIDA9PT1lLmNoZWNrc3VtfHxyZShlLmNoZWNrc3VtKSkpKHIpPyhlLnNldCh0LHIpLGUpOmV9Y2F0Y2goZSl7SWkud2FybihgQ09GIGNvbmZpZyB3aXRoIGlkPSR7dH0gaGFzIFwic3RyaW5nVmFsdWVcIiB0aGF0IGNhbid0IGJlIHBhcnNlZCBhcyBKU09OLiBJZiB0aGlzIGlzIGEgZGV2aWNlLWRlcGVuZGVudCBhc3NldCBjb25maWd1cmF0aW9uIHdpdGggbWFsZm9ybWVkIEpTT04sIHdlIG1heSBiZSB1bmFibGUgdG8gZmV0Y2ggdGhlIGNvcnJlc3BvbmRpbmcgYXNzZXQuYCl9cmV0dXJuIGV9KSxuZXcgTWFwKX1jb25zdCBiaT1KKFwiZGV2aWNlRGVwZW5kZW50QXNzZXRMb2FkZXJcIixbQWUudG9rZW4sRWkudG9rZW4sbmVdLCgoZSx0LG4pPT57Y29uc3Qgcj1uZXcgZmUoZSkubWFwKHVpKCkpLmhhbmRsZXIsaT1uZXcgUHJvbWlzZSgoKGUscik9Pl9pKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBpPXlpZWxkIG4ubGVuc1BlcmZvcm1hbmNlLG89MD09PShudWxsPT1pP3ZvaWQgMDppLmNsdXN0ZXIpfHxudWxsPT1pP3ZvaWQgMDppLmNsdXN0ZXI7dChbe25hbWVzcGFjZXM6W0RyLkxFTlNfQ09SRV0sbGVuc0NsdXN0ZXJPcmlnNDpvfV0pLnRoZW4oZSkuY2F0Y2gocil9KSkpKSxvPWxuKFNpKTtyZXR1cm4gZnVuY3Rpb24oe2Fzc2V0SWQ6ZX0pe3JldHVybiBfaSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgaS5jYXRjaCgoZT0+e3Rocm93IFBlKG5ldyBFcnJvcihcIkZhaWxlZCB0byBmZXRjaCBsZW5zIGFzc2V0IGNvbmZpZ3VyYXRpb24gZnJvbSBDT0YuXCIpLGUpfSkpLG49byh0LmNvbmZpZ1Jlc3VsdHMpLmdldChlKTtpZighbil0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBsb2FkIGxlbnMgYXNzZXQgJHtlfS4gTm8gY29uZmlnIGZvdW5kIGluIENPRiBmb3IgdGhpcyBhc3NldC5gKTtjb25zdFthLHNdPXlpZWxkIHIobi51cmwpO2lmKCFzLm9rKXRocm93IHM7cmV0dXJue2RhdGE6YSxjaGVja3N1bTpuLmNoZWNrc3VtfX0pKX19KSksVGk9SihcInJlbW90ZU1lZGlhQXNzZXRMb2FkZXJcIixbQWUudG9rZW5dLChlPT57Y29uc3QgdD1uZXcgZmUoZSkubWFwKHVpKCkpLmhhbmRsZXI7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24odCxpKXtmdW5jdGlvbiBvKGUpe3RyeXtzKHIubmV4dChlKSl9Y2F0Y2goZSl7aShlKX19ZnVuY3Rpb24gYShlKXt0cnl7cyhyLnRocm93KGUpKX1jYXRjaChlKXtpKGUpfX1mdW5jdGlvbiBzKGUpe3ZhciByO2UuZG9uZT90KGUudmFsdWUpOihyPWUudmFsdWUsciBpbnN0YW5jZW9mIG4/cjpuZXcgbigoZnVuY3Rpb24oZSl7ZShyKX0pKSkudGhlbihvLGEpfXMoKHI9ci5hcHBseShlLFtdKSkubmV4dCgpKX0pKX0odGhpcywwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3RbbixyXT15aWVsZCB0KGUuYXNzZXRJZCk7aWYoIXIub2spdGhyb3cgcjtyZXR1cm4gbn0pKX19KSksQ2k9SihcInN0YXRpY0Fzc2V0TG9hZGVyXCIsW0FlLnRva2VuLHNuLnRva2VuXSwoKGUsdCk9Pntjb25zdCBuPW5ldyBmZShlKS5tYXAodWkoKSkuaGFuZGxlcjtyZXR1cm4oZSxyKT0+ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaShlKXt0cnl7YShyLm5leHQoZSkpfWNhdGNoKGUpe3QoZSl9fWZ1bmN0aW9uIG8oZSl7dHJ5e2Eoci50aHJvdyhlKSl9Y2F0Y2goZSl7dChlKX19ZnVuY3Rpb24gYSh0KXt2YXIgcjt0LmRvbmU/ZSh0LnZhbHVlKToocj10LnZhbHVlLHIgaW5zdGFuY2VvZiBuP3I6bmV3IG4oKGZ1bmN0aW9uKGUpe2Uocil9KSkpLnRoZW4oaSxvKX1hKChyPXIuYXBwbHkodW5kZWZpbmVkLFtdKSkubmV4dCgpKX0pKX0oMCwwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIGksbztjb25zdCBhPW51bGw9PT0oaT10LmdldENhY2hlZExlbnMoci5pZCkpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLmNvbnRlbnQscz1udWxsPT09KG89bnVsbD09YT92b2lkIDA6YS5hc3NldE1hbmlmZXN0LmZpbmQoKHQ9PnQuaWQ9PT1lLmFzc2V0SWQpKSl8fHZvaWQgMD09PW8/dm9pZCAwOm8uYXNzZXRVcmw7aWYoIXMpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgbG9hZCBsZW5zIGFzc2V0ICR7ZS5hc3NldElkfS4gU3RhdGljIGFzc2V0IFVSTCBjb3VsZCBub3QgYmUgZm91bmQuYCk7Y29uc3RbYyxsXT15aWVsZCBuKHMpO2lmKCFsLm9rKXRocm93IGw7cmV0dXJuIGN9KSl9KSk7dmFyIEFpPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIGEoZSl7dHJ5e2Moci5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBzKGUpe3RyeXtjKHIudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGMoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKGEscyl9Yygocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfTtjb25zdCBSaT1nZShcIkxlbnNBc3NldFByb3ZpZGVyXCIpLGtpPW5ldyBTZXQoW1B0LlBSRUxPQURfVU5TRVQsUHQuUkVRVUlSRURdKTtjbGFzcyBPaXtjb25zdHJ1Y3RvcihlLHQsbixyKXt0aGlzLmxlbnNDb3JlPWUsdGhpcy5hc3NldExvYWRlcnM9dCx0aGlzLmxlbnNDb250ZXh0PW4sdGhpcy5zdGF0ZVRhcmdldD1yLGUuc2V0UmVtb3RlQXNzZXRzUHJvdmlkZXIoKGU9Pnt0aGlzLnByb3ZpZGVSZW1vdGVBc3NldChlKS5jYXRjaCgoZT0+Umkud2FybihlKSkpfSkpfXByZWxvYWRNYW5pZmVzdERhdGEoZSl7cmV0dXJuIEFpKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgUHJvbWlzZS5hbGwoZS5maWx0ZXIoKGU9PmtpLmhhcyhlLnJlcXVlc3RUaW1pbmcpKSkubWFwKCgoe2lkOmUsdHlwZTp0fSk9PnRoaXMucHJvdmlkZVJlbW90ZUFzc2V0KHthc3NldElkOmUsYXNzZXRUeXBlOnRoaXMuY29udmVydFRvTGVuc0NvcmVBc3NldFR5cGUodCl9KSkpKX0pKX1jb252ZXJ0VG9MZW5zQ29yZUFzc2V0VHlwZShlKXtzd2l0Y2goZSl7Y2FzZSBEdC5BU1NFVDpyZXR1cm4gdGhpcy5sZW5zQ29yZS5Bc3NldFR5cGUuU3RhdGljO2Nhc2UgRHQuREVWSUNFX0RFUEVOREVOVF9BU1NFVF9VTlNFVDpjYXNlIER0LlVOUkVDT0dOSVpFRDpyZXR1cm4gdGhpcy5sZW5zQ29yZS5Bc3NldFR5cGUuRGV2aWNlRGVwZW5kZW50O2RlZmF1bHQ6cmV0dXJuIHB0KCl9fWdldEFzc2V0KGUpe3ZhciB0LG4scjtyZXR1cm4gQWkodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdHthc3NldElkOmksYXNzZXRUeXBlOm99PWUsW2Esc109bnVsbCE9PSh0PXRoaXMuYXNzZXRMb2FkZXJzLmdldChvKSkmJnZvaWQgMCE9PXQ/dDpbXSxjPXtyZXF1ZXN0VHlwZTpcImFzc2V0XCIsYXNzZXRJZDppLGFzc2V0VHlwZTpudWxsIT1hP2E6XCJ1bmtub3duXCIsbGVuc0lkOm51bGwhPT0ocj1udWxsPT09KG49dGhpcy5sZW5zQ29udGV4dC5hY3RpdmVMZW5zKXx8dm9pZCAwPT09bj92b2lkIDA6bi5pZCkmJnZvaWQgMCE9PXI/cjpcInVua25vd25cIn0se3JlcXVlc3RJZDpsfT1Fbih7ZGltZW5zaW9uczpjfSk7dHJ5e2lmKCFzKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGdldCBhc3NldCAke2l9LiBBc3NldCB0eXBlIFwiJHtvLnZhbHVlfVwiIGlzIG5vdCBzdXBwb3J0ZWQuYCk7aWYoIXRoaXMubGVuc0NvbnRleHQuYWN0aXZlTGVucyl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgYXNzZXQgJHtpfS4gUmVxdWVzdCBtdXN0IGJlIG1hZGUgd2hpbGUgYSBsZW5zIGlzIGFwcGxpZWQsIGJ1dCBubyBsZW5zIGlzIGN1cnJlbnRseSBhcHBsaWVkLmApO2NvbnN0IHQ9eWllbGQgcyhlLHZ0KHRoaXMubGVuc0NvbnRleHQuYWN0aXZlTGVucykpLG49dCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP3Q6dC5kYXRhLHI9dCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP3ZvaWQgMDp0LmNoZWNrc3VtLHU9bi5ieXRlTGVuZ3RoO2lmKDA9PT11KXtjb25zdCBlPXMubmFtZXx8XCJhbm9ueW1vdXNcIjt0aHJvdyBuZXcgRXJyb3IoYEdvdCBlbXB0eSByZXNwb25zZSBmb3IgYXNzZXQgJHtpfSBvZiB0eXBlICR7bnVsbCE9YT9hOlwidW5rbm93blwifSBmcm9tIGFzc2V0TG9hZGVyICR7ZX0uYCl9cmV0dXJuIF9uKHtyZXF1ZXN0SWQ6bCxkaW1lbnNpb25zOmMsc3RhdHVzOjIwMCxzaXplQnl0ZTp1fSkse2Fzc2V0SWQ6aSxhc3NldEJ1ZmZlcjpuLGFzc2V0VHlwZTpvLGFzc2V0Q2hlY2tzdW06cixvbkZhaWx1cmU6dD0+ey9DaGVja3N1bSB2YWxpZGF0aW9uIGZhaWxlZC8udGVzdCh0Lm1lc3NhZ2UpJiZ0aGlzLnN0YXRlVGFyZ2V0LmRpc3BhdGNoRXZlbnQobmV3IGhuKFwiYXNzZXRWYWxpZGF0aW9uRmFpbHVyZVwiLGUpKX19fWNhdGNoKGUpe2NvbnN0IHQ9UGUobmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBsZW5zIGFzc2V0ICR7aX0uYCksZSk7dGhyb3cgSW4oe3JlcXVlc3RJZDpsLGRpbWVuc2lvbnM6YyxlcnJvcjp0fSksdH19KSl9cHJvdmlkZVJlbW90ZUFzc2V0KGUpe3JldHVybiBBaSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RyeXtjb25zdCB0PXlpZWxkIHRoaXMuZ2V0QXNzZXQoZSk7dGhpcy5sZW5zQ29yZS5wcm92aWRlUmVtb3RlQXNzZXRzUmVzcG9uc2UodCl9Y2F0Y2godCl7dGhyb3cgdGhpcy5sZW5zQ29yZS5wcm92aWRlUmVtb3RlQXNzZXRzUmVzcG9uc2Uoe2Fzc2V0SWQ6ZS5hc3NldElkLGFzc2V0VHlwZTplLmFzc2V0VHlwZX0pLHR9fSkpfX1jb25zdCBOaT1KKFwibGVuc0Fzc2V0c1Byb3ZpZGVyXCIsW3dlLnRva2VuLFNuLnRva2VuLGJpLnRva2VuLFRpLnRva2VuLENpLnRva2VuLGJuLnRva2VuXSwoKGUsdCxuLHIsaSxvKT0+bmV3IE9pKGUsbmV3IE1hcChbW2UuQXNzZXRUeXBlLkRldmljZURlcGVuZGVudCxbXCJEZXZpY2VEZXBlbmRlbnRcIixuXV0sW2UuQXNzZXRUeXBlLlJlbW90ZU1lZGlhQnlVcmwsW1wiUmVtb3RlTWVkaWFCeVVybFwiLHJdXSxbZS5Bc3NldFR5cGUuVVJMLFtcIlVSTFwiLHJdXSxbZS5Bc3NldFR5cGUuU3RhdGljLFtcIlN0YXRpY1wiLGldXV0pLHQsbykpKTt2YXIgd2ksRGk7ZnVuY3Rpb24gUGkoZSl7c3dpdGNoKGUpe2Nhc2UgMDpjYXNlXCJOT1RfQVBQTElDQUJMRVwiOnJldHVybiB3aS5OT1RfQVBQTElDQUJMRTtjYXNlIDE6Y2FzZVwiU1BPT0tFWVwiOnJldHVybiB3aS5TUE9PS0VZO2Nhc2UgMjpjYXNlXCJSRUdJU1RSWVwiOnJldHVybiB3aS5SRUdJU1RSWTtjYXNlIDM6Y2FzZVwiRklERUxJVVNcIjpyZXR1cm4gd2kuRklERUxJVVM7ZGVmYXVsdDpyZXR1cm4gd2kuVU5SRUNPR05JWkVEfX1mdW5jdGlvbiBNaSgpe3JldHVybntrZXk6bmV3IFVpbnQ4QXJyYXksaXZTdG9yZTp7fSxpc0tleVNlcnZlckVuY3J5cHRlZDohMSxpc0tleUUyZUVuY3J5cHRlZDohMSxlbmNyeXB0aW9uU2NoZW1lOndpLk5PVF9BUFBMSUNBQkxFfX0hZnVuY3Rpb24oZSl7ZS5OT1RfQVBQTElDQUJMRT1cIk5PVF9BUFBMSUNBQkxFXCIsZS5TUE9PS0VZPVwiU1BPT0tFWVwiLGUuUkVHSVNUUlk9XCJSRUdJU1RSWVwiLGUuRklERUxJVVM9XCJGSURFTElVU1wiLGUuVU5SRUNPR05JWkVEPVwiVU5SRUNPR05JWkVEXCJ9KHdpfHwod2k9e30pKSxmdW5jdGlvbihlKXtlLk5PVF9BUFBMSUNBQkxFPVwiTk9UX0FQUExJQ0FCTEVcIixlLkNPTlRFWFQ9XCJDT05URVhUXCIsZS5JTlRFUlNUSVRJQUw9XCJJTlRFUlNUSVRJQUxcIixlLlVOUkVDT0dOSVpFRD1cIlVOUkVDT0dOSVpFRFwifShEaXx8KERpPXt9KSk7Y29uc3QgTGk9e2VuY29kZTooZSx0PWJ0KCkuV3JpdGVyLmNyZWF0ZSgpKT0+KDAhPT1lLmtleS5sZW5ndGgmJnQudWludDMyKDEwKS5ieXRlcyhlLmtleSksT2JqZWN0LmVudHJpZXMoZS5pdlN0b3JlKS5mb3JFYWNoKCgoW2Usbl0pPT57eGkuZW5jb2RlKHtrZXk6ZSx2YWx1ZTpufSx0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKX0pKSwhMD09PWUuaXNLZXlTZXJ2ZXJFbmNyeXB0ZWQmJnQudWludDMyKDI0KS5ib29sKGUuaXNLZXlTZXJ2ZXJFbmNyeXB0ZWQpLCEwPT09ZS5pc0tleUUyZUVuY3J5cHRlZCYmdC51aW50MzIoMzIpLmJvb2woZS5pc0tleUUyZUVuY3J5cHRlZCksZS5lbmNyeXB0aW9uU2NoZW1lIT09d2kuTk9UX0FQUExJQ0FCTEUmJnQudWludDMyKDQwKS5pbnQzMihmdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSB3aS5OT1RfQVBQTElDQUJMRTpyZXR1cm4gMDtjYXNlIHdpLlNQT09LRVk6cmV0dXJuIDE7Y2FzZSB3aS5SRUdJU1RSWTpyZXR1cm4gMjtjYXNlIHdpLkZJREVMSVVTOnJldHVybiAzO2RlZmF1bHQ6cmV0dXJuIDB9fShlLmVuY3J5cHRpb25TY2hlbWUpKSx0KSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBidCgpLlJlYWRlcj9lOm5ldyhidCgpLlJlYWRlcikoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9TWkoKTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5rZXk9bi5ieXRlcygpO2JyZWFrO2Nhc2UgMjpjb25zdCB0PXhpLmRlY29kZShuLG4udWludDMyKCkpO3ZvaWQgMCE9PXQudmFsdWUmJihpLml2U3RvcmVbdC5rZXldPXQudmFsdWUpO2JyZWFrO2Nhc2UgMzppLmlzS2V5U2VydmVyRW5jcnlwdGVkPW4uYm9vbCgpO2JyZWFrO2Nhc2UgNDppLmlzS2V5RTJlRW5jcnlwdGVkPW4uYm9vbCgpO2JyZWFrO2Nhc2UgNTppLmVuY3J5cHRpb25TY2hlbWU9UGkobi5pbnQzMigpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21KU09OOmU9Pih7a2V5OlFpKGUua2V5KT96aShlLmtleSk6bmV3IFVpbnQ4QXJyYXksaXZTdG9yZTpYaShlLml2U3RvcmUpP09iamVjdC5lbnRyaWVzKGUuaXZTdG9yZSkucmVkdWNlKCgoZSxbdCxuXSk9PihlW3RdPXppKG4pLGUpKSx7fSk6e30saXNLZXlTZXJ2ZXJFbmNyeXB0ZWQ6ISFRaShlLmlzS2V5U2VydmVyRW5jcnlwdGVkKSYmQm9vbGVhbihlLmlzS2V5U2VydmVyRW5jcnlwdGVkKSxpc0tleUUyZUVuY3J5cHRlZDohIVFpKGUuaXNLZXlFMmVFbmNyeXB0ZWQpJiZCb29sZWFuKGUuaXNLZXlFMmVFbmNyeXB0ZWQpLGVuY3J5cHRpb25TY2hlbWU6UWkoZS5lbmNyeXB0aW9uU2NoZW1lKT9QaShlLmVuY3J5cHRpb25TY2hlbWUpOndpLk5PVF9BUFBMSUNBQkxFfSksdG9KU09OKGUpe2NvbnN0IHQ9e307cmV0dXJuIHZvaWQgMCE9PWUua2V5JiYodC5rZXk9WWkodm9pZCAwIT09ZS5rZXk/ZS5rZXk6bmV3IFVpbnQ4QXJyYXkpKSx0Lml2U3RvcmU9e30sZS5pdlN0b3JlJiZPYmplY3QuZW50cmllcyhlLml2U3RvcmUpLmZvckVhY2goKChbZSxuXSk9Pnt0Lml2U3RvcmVbZV09WWkobil9KSksdm9pZCAwIT09ZS5pc0tleVNlcnZlckVuY3J5cHRlZCYmKHQuaXNLZXlTZXJ2ZXJFbmNyeXB0ZWQ9ZS5pc0tleVNlcnZlckVuY3J5cHRlZCksdm9pZCAwIT09ZS5pc0tleUUyZUVuY3J5cHRlZCYmKHQuaXNLZXlFMmVFbmNyeXB0ZWQ9ZS5pc0tleUUyZUVuY3J5cHRlZCksdm9pZCAwIT09ZS5lbmNyeXB0aW9uU2NoZW1lJiYodC5lbmNyeXB0aW9uU2NoZW1lPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIHdpLk5PVF9BUFBMSUNBQkxFOnJldHVyblwiTk9UX0FQUExJQ0FCTEVcIjtjYXNlIHdpLlNQT09LRVk6cmV0dXJuXCJTUE9PS0VZXCI7Y2FzZSB3aS5SRUdJU1RSWTpyZXR1cm5cIlJFR0lTVFJZXCI7Y2FzZSB3aS5GSURFTElVUzpyZXR1cm5cIkZJREVMSVVTXCI7ZGVmYXVsdDpyZXR1cm5cIlVOS05PV05cIn19KGUuZW5jcnlwdGlvblNjaGVtZSkpLHR9LGZyb21QYXJ0aWFsKGUpe3ZhciB0LG4scixpLG87Y29uc3QgYT1NaSgpO3JldHVybiBhLmtleT1udWxsIT09KHQ9ZS5rZXkpJiZ2b2lkIDAhPT10P3Q6bmV3IFVpbnQ4QXJyYXksYS5pdlN0b3JlPU9iamVjdC5lbnRyaWVzKG51bGwhPT0obj1lLml2U3RvcmUpJiZ2b2lkIDAhPT1uP246e30pLnJlZHVjZSgoKGUsW3Qsbl0pPT4odm9pZCAwIT09biYmKGVbdF09biksZSkpLHt9KSxhLmlzS2V5U2VydmVyRW5jcnlwdGVkPW51bGwhPT0ocj1lLmlzS2V5U2VydmVyRW5jcnlwdGVkKSYmdm9pZCAwIT09ciYmcixhLmlzS2V5RTJlRW5jcnlwdGVkPW51bGwhPT0oaT1lLmlzS2V5RTJlRW5jcnlwdGVkKSYmdm9pZCAwIT09aSYmaSxhLmVuY3J5cHRpb25TY2hlbWU9bnVsbCE9PShvPWUuZW5jcnlwdGlvblNjaGVtZSkmJnZvaWQgMCE9PW8/bzp3aS5OT1RfQVBQTElDQUJMRSxhfX07ZnVuY3Rpb24gVWkoKXtyZXR1cm57a2V5OlwiXCIsdmFsdWU6bmV3IFVpbnQ4QXJyYXl9fWNvbnN0IHhpPXtlbmNvZGU6KGUsdD1idCgpLldyaXRlci5jcmVhdGUoKSk9PihcIlwiIT09ZS5rZXkmJnQudWludDMyKDEwKS5zdHJpbmcoZS5rZXkpLDAhPT1lLnZhbHVlLmxlbmd0aCYmdC51aW50MzIoMTgpLmJ5dGVzKGUudmFsdWUpLHQpLGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGJ0KCkuUmVhZGVyP2U6bmV3KGJ0KCkuUmVhZGVyKShlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT1VaSgpO2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmtleT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLnZhbHVlPW4uYnl0ZXMoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21KU09OOmU9Pih7a2V5OlFpKGUua2V5KT9TdHJpbmcoZS5rZXkpOlwiXCIsdmFsdWU6UWkoZS52YWx1ZSk/emkoZS52YWx1ZSk6bmV3IFVpbnQ4QXJyYXl9KSx0b0pTT04oZSl7Y29uc3QgdD17fTtyZXR1cm4gdm9pZCAwIT09ZS5rZXkmJih0LmtleT1lLmtleSksdm9pZCAwIT09ZS52YWx1ZSYmKHQudmFsdWU9WWkodm9pZCAwIT09ZS52YWx1ZT9lLnZhbHVlOm5ldyBVaW50OEFycmF5KSksdH0sZnJvbVBhcnRpYWwoZSl7dmFyIHQsbjtjb25zdCByPVVpKCk7cmV0dXJuIHIua2V5PW51bGwhPT0odD1lLmtleSkmJnZvaWQgMCE9PXQ/dDpcIlwiLHIudmFsdWU9bnVsbCE9PShuPWUudmFsdWUpJiZ2b2lkIDAhPT1uP246bmV3IFVpbnQ4QXJyYXkscn19O2Z1bmN0aW9uIEZpKCl7cmV0dXJue3N0b3JlOnt9LHNlcmlhbGl6ZWRTdG9yZTpuZXcgVWludDhBcnJheX19Y29uc3QgQmk9e2VuY29kZTooZSx0PWJ0KCkuV3JpdGVyLmNyZWF0ZSgpKT0+KE9iamVjdC5lbnRyaWVzKGUuc3RvcmUpLmZvckVhY2goKChbZSxuXSk9PntWaS5lbmNvZGUoe2tleTplLHZhbHVlOm59LHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpfSkpLDAhPT1lLnNlcmlhbGl6ZWRTdG9yZS5sZW5ndGgmJnQudWludDMyKDE4KS5ieXRlcyhlLnNlcmlhbGl6ZWRTdG9yZSksdCksZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYnQoKS5SZWFkZXI/ZTpuZXcoYnQoKS5SZWFkZXIpKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPUZpKCk7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmNvbnN0IHQ9VmkuZGVjb2RlKG4sbi51aW50MzIoKSk7dm9pZCAwIT09dC52YWx1ZSYmKGkuc3RvcmVbdC5rZXldPXQudmFsdWUpO2JyZWFrO2Nhc2UgMjppLnNlcmlhbGl6ZWRTdG9yZT1uLmJ5dGVzKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tSlNPTjplPT4oe3N0b3JlOlhpKGUuc3RvcmUpP09iamVjdC5lbnRyaWVzKGUuc3RvcmUpLnJlZHVjZSgoKGUsW3Qsbl0pPT4oZVt0XT1TdHJpbmcobiksZSkpLHt9KTp7fSxzZXJpYWxpemVkU3RvcmU6UWkoZS5zZXJpYWxpemVkU3RvcmUpP3ppKGUuc2VyaWFsaXplZFN0b3JlKTpuZXcgVWludDhBcnJheX0pLHRvSlNPTihlKXtjb25zdCB0PXtzdG9yZTp7fX07cmV0dXJuIGUuc3RvcmUmJk9iamVjdC5lbnRyaWVzKGUuc3RvcmUpLmZvckVhY2goKChbZSxuXSk9Pnt0LnN0b3JlW2VdPW59KSksdm9pZCAwIT09ZS5zZXJpYWxpemVkU3RvcmUmJih0LnNlcmlhbGl6ZWRTdG9yZT1ZaSh2b2lkIDAhPT1lLnNlcmlhbGl6ZWRTdG9yZT9lLnNlcmlhbGl6ZWRTdG9yZTpuZXcgVWludDhBcnJheSkpLHR9LGZyb21QYXJ0aWFsKGUpe3ZhciB0LG47Y29uc3Qgcj1GaSgpO3JldHVybiByLnN0b3JlPU9iamVjdC5lbnRyaWVzKG51bGwhPT0odD1lLnN0b3JlKSYmdm9pZCAwIT09dD90Ont9KS5yZWR1Y2UoKChlLFt0LG5dKT0+KHZvaWQgMCE9PW4mJihlW3RdPVN0cmluZyhuKSksZSkpLHt9KSxyLnNlcmlhbGl6ZWRTdG9yZT1udWxsIT09KG49ZS5zZXJpYWxpemVkU3RvcmUpJiZ2b2lkIDAhPT1uP246bmV3IFVpbnQ4QXJyYXkscn19LFZpPXtlbmNvZGU6KGUsdD1idCgpLldyaXRlci5jcmVhdGUoKSk9PihcIlwiIT09ZS5rZXkmJnQudWludDMyKDEwKS5zdHJpbmcoZS5rZXkpLFwiXCIhPT1lLnZhbHVlJiZ0LnVpbnQzMigxOCkuc3RyaW5nKGUudmFsdWUpLHQpLGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGJ0KCkuUmVhZGVyP2U6bmV3KGJ0KCkuUmVhZGVyKShlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17a2V5OlwiXCIsdmFsdWU6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkua2V5PW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkudmFsdWU9bi5zdHJpbmcoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21KU09OOmU9Pih7a2V5OlFpKGUua2V5KT9TdHJpbmcoZS5rZXkpOlwiXCIsdmFsdWU6UWkoZS52YWx1ZSk/U3RyaW5nKGUudmFsdWUpOlwiXCJ9KSx0b0pTT04oZSl7Y29uc3QgdD17fTtyZXR1cm4gdm9pZCAwIT09ZS5rZXkmJih0LmtleT1lLmtleSksdm9pZCAwIT09ZS52YWx1ZSYmKHQudmFsdWU9ZS52YWx1ZSksdH0sZnJvbVBhcnRpYWwoZSl7dmFyIHQsbjtjb25zdCByPXtrZXk6XCJcIix2YWx1ZTpcIlwifTtyZXR1cm4gci5rZXk9bnVsbCE9PSh0PWUua2V5KSYmdm9pZCAwIT09dD90OlwiXCIsci52YWx1ZT1udWxsIT09KG49ZS52YWx1ZSkmJnZvaWQgMCE9PW4/bjpcIlwiLHJ9fSxHaT17ZW5jb2RlOihlLHQ9YnQoKS5Xcml0ZXIuY3JlYXRlKCkpPT4oT2JqZWN0LmVudHJpZXMoZS5wbGF5ZXJEYXRhKS5mb3JFYWNoKCgoW2Usbl0pPT57SGkuZW5jb2RlKHtrZXk6ZSx2YWx1ZTpufSx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKX0pKSx0KSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBidCgpLlJlYWRlcj9lOm5ldyhidCgpLlJlYWRlcikoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3BsYXllckRhdGE6e319O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtpZihlPj4+Mz09MSl7Y29uc3QgZT1IaS5kZWNvZGUobixuLnVpbnQzMigpKTt2b2lkIDAhPT1lLnZhbHVlJiYoaS5wbGF5ZXJEYXRhW2Uua2V5XT1lLnZhbHVlKX1lbHNlIG4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbUpTT046ZT0+KHtwbGF5ZXJEYXRhOlhpKGUucGxheWVyRGF0YSk/T2JqZWN0LmVudHJpZXMoZS5wbGF5ZXJEYXRhKS5yZWR1Y2UoKChlLFt0LG5dKT0+KGVbdF09QmkuZnJvbUpTT04obiksZSkpLHt9KTp7fX0pLHRvSlNPTihlKXtjb25zdCB0PXtwbGF5ZXJEYXRhOnt9fTtyZXR1cm4gZS5wbGF5ZXJEYXRhJiZPYmplY3QuZW50cmllcyhlLnBsYXllckRhdGEpLmZvckVhY2goKChbZSxuXSk9Pnt0LnBsYXllckRhdGFbZV09QmkudG9KU09OKG4pfSkpLHR9LGZyb21QYXJ0aWFsKGUpe3ZhciB0O2NvbnN0IG49e3BsYXllckRhdGE6e319O3JldHVybiBuLnBsYXllckRhdGE9T2JqZWN0LmVudHJpZXMobnVsbCE9PSh0PWUucGxheWVyRGF0YSkmJnZvaWQgMCE9PXQ/dDp7fSkucmVkdWNlKCgoZSxbdCxuXSk9Pih2b2lkIDAhPT1uJiYoZVt0XT1CaS5mcm9tUGFydGlhbChuKSksZSkpLHt9KSxufX0sSGk9e2VuY29kZTooZSx0PWJ0KCkuV3JpdGVyLmNyZWF0ZSgpKT0+KFwiXCIhPT1lLmtleSYmdC51aW50MzIoMTApLnN0cmluZyhlLmtleSksdm9pZCAwIT09ZS52YWx1ZSYmQmkuZW5jb2RlKGUudmFsdWUsdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksdCksZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYnQoKS5SZWFkZXI/ZTpuZXcoYnQoKS5SZWFkZXIpKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtrZXk6XCJcIix2YWx1ZTp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmtleT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLnZhbHVlPUJpLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbUpTT046ZT0+KHtrZXk6UWkoZS5rZXkpP1N0cmluZyhlLmtleSk6XCJcIix2YWx1ZTpRaShlLnZhbHVlKT9CaS5mcm9tSlNPTihlLnZhbHVlKTp2b2lkIDB9KSx0b0pTT04oZSl7Y29uc3QgdD17fTtyZXR1cm4gdm9pZCAwIT09ZS5rZXkmJih0LmtleT1lLmtleSksdm9pZCAwIT09ZS52YWx1ZSYmKHQudmFsdWU9ZS52YWx1ZT9CaS50b0pTT04oZS52YWx1ZSk6dm9pZCAwKSx0fSxmcm9tUGFydGlhbChlKXt2YXIgdDtjb25zdCBuPXtrZXk6XCJcIix2YWx1ZTp2b2lkIDB9O3JldHVybiBuLmtleT1udWxsIT09KHQ9ZS5rZXkpJiZ2b2lkIDAhPT10P3Q6XCJcIixuLnZhbHVlPXZvaWQgMCE9PWUudmFsdWUmJm51bGwhPT1lLnZhbHVlP0JpLmZyb21QYXJ0aWFsKGUudmFsdWUpOnZvaWQgMCxufX0sV2k9e2VuY29kZTooZSx0PWJ0KCkuV3JpdGVyLmNyZWF0ZSgpKT0+KFwiXCIhPT1lLmlkJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUuaWQpLFwiXCIhPT1lLnNlc3Npb25JZCYmdC51aW50MzIoMTgpLnN0cmluZyhlLnNlc3Npb25JZCksXCJcIiE9PWUucGxheWVySWQmJnQudWludDMyKDI2KS5zdHJpbmcoZS5wbGF5ZXJJZCksdm9pZCAwIT09ZS5zZXNzaW9uRGF0YSYmR2kuZW5jb2RlKGUuc2Vzc2lvbkRhdGEsdC51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCksMCE9PWUuY3JlYXRlZFRpbWUmJnQudWludDMyKDQwKS5pbnQ2NChlLmNyZWF0ZWRUaW1lKSwwIT09ZS5leHBpcmVUaW1lJiZ0LnVpbnQzMig0OCkuaW50NjQoZS5leHBpcmVUaW1lKSwwIT09ZS52ZXJzaW9uJiZ0LnVpbnQzMig1NikuaW50MzIoZS52ZXJzaW9uKSx2b2lkIDAhPT1lLmVuY3J5cHRpb25EYXRhJiZMaS5lbmNvZGUoZS5lbmNyeXB0aW9uRGF0YSx0LnVpbnQzMig2NikuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS5zZXNzaW9uRGVwdGgmJnQudWludDMyKDcyKS5pbnQzMihlLnNlc3Npb25EZXB0aCksdCksZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYnQoKS5SZWFkZXI/ZTpuZXcoYnQoKS5SZWFkZXIpKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtpZDpcIlwiLHNlc3Npb25JZDpcIlwiLHBsYXllcklkOlwiXCIsc2Vzc2lvbkRhdGE6dm9pZCAwLGNyZWF0ZWRUaW1lOjAsZXhwaXJlVGltZTowLHZlcnNpb246MCxlbmNyeXB0aW9uRGF0YTp2b2lkIDAsc2Vzc2lvbkRlcHRoOjB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLmlkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkuc2Vzc2lvbklkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAzOmkucGxheWVySWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDQ6aS5zZXNzaW9uRGF0YT1HaS5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDU6aS5jcmVhdGVkVGltZT1xaShuLmludDY0KCkpO2JyZWFrO2Nhc2UgNjppLmV4cGlyZVRpbWU9cWkobi5pbnQ2NCgpKTticmVhaztjYXNlIDc6aS52ZXJzaW9uPW4uaW50MzIoKTticmVhaztjYXNlIDg6aS5lbmNyeXB0aW9uRGF0YT1MaS5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDk6aS5zZXNzaW9uRGVwdGg9bi5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbUpTT046ZT0+KHtpZDpRaShlLmlkKT9TdHJpbmcoZS5pZCk6XCJcIixzZXNzaW9uSWQ6UWkoZS5zZXNzaW9uSWQpP1N0cmluZyhlLnNlc3Npb25JZCk6XCJcIixwbGF5ZXJJZDpRaShlLnBsYXllcklkKT9TdHJpbmcoZS5wbGF5ZXJJZCk6XCJcIixzZXNzaW9uRGF0YTpRaShlLnNlc3Npb25EYXRhKT9HaS5mcm9tSlNPTihlLnNlc3Npb25EYXRhKTp2b2lkIDAsY3JlYXRlZFRpbWU6UWkoZS5jcmVhdGVkVGltZSk/TnVtYmVyKGUuY3JlYXRlZFRpbWUpOjAsZXhwaXJlVGltZTpRaShlLmV4cGlyZVRpbWUpP051bWJlcihlLmV4cGlyZVRpbWUpOjAsdmVyc2lvbjpRaShlLnZlcnNpb24pP051bWJlcihlLnZlcnNpb24pOjAsZW5jcnlwdGlvbkRhdGE6UWkoZS5lbmNyeXB0aW9uRGF0YSk/TGkuZnJvbUpTT04oZS5lbmNyeXB0aW9uRGF0YSk6dm9pZCAwLHNlc3Npb25EZXB0aDpRaShlLnNlc3Npb25EZXB0aCk/TnVtYmVyKGUuc2Vzc2lvbkRlcHRoKTowfSksdG9KU09OKGUpe2NvbnN0IHQ9e307cmV0dXJuIHZvaWQgMCE9PWUuaWQmJih0LmlkPWUuaWQpLHZvaWQgMCE9PWUuc2Vzc2lvbklkJiYodC5zZXNzaW9uSWQ9ZS5zZXNzaW9uSWQpLHZvaWQgMCE9PWUucGxheWVySWQmJih0LnBsYXllcklkPWUucGxheWVySWQpLHZvaWQgMCE9PWUuc2Vzc2lvbkRhdGEmJih0LnNlc3Npb25EYXRhPWUuc2Vzc2lvbkRhdGE/R2kudG9KU09OKGUuc2Vzc2lvbkRhdGEpOnZvaWQgMCksdm9pZCAwIT09ZS5jcmVhdGVkVGltZSYmKHQuY3JlYXRlZFRpbWU9TWF0aC5yb3VuZChlLmNyZWF0ZWRUaW1lKSksdm9pZCAwIT09ZS5leHBpcmVUaW1lJiYodC5leHBpcmVUaW1lPU1hdGgucm91bmQoZS5leHBpcmVUaW1lKSksdm9pZCAwIT09ZS52ZXJzaW9uJiYodC52ZXJzaW9uPU1hdGgucm91bmQoZS52ZXJzaW9uKSksdm9pZCAwIT09ZS5lbmNyeXB0aW9uRGF0YSYmKHQuZW5jcnlwdGlvbkRhdGE9ZS5lbmNyeXB0aW9uRGF0YT9MaS50b0pTT04oZS5lbmNyeXB0aW9uRGF0YSk6dm9pZCAwKSx2b2lkIDAhPT1lLnNlc3Npb25EZXB0aCYmKHQuc2Vzc2lvbkRlcHRoPU1hdGgucm91bmQoZS5zZXNzaW9uRGVwdGgpKSx0fSxmcm9tUGFydGlhbChlKXt2YXIgdCxuLHIsaSxvLGEscztjb25zdCBjPXtpZDpcIlwiLHNlc3Npb25JZDpcIlwiLHBsYXllcklkOlwiXCIsc2Vzc2lvbkRhdGE6dm9pZCAwLGNyZWF0ZWRUaW1lOjAsZXhwaXJlVGltZTowLHZlcnNpb246MCxlbmNyeXB0aW9uRGF0YTp2b2lkIDAsc2Vzc2lvbkRlcHRoOjB9O3JldHVybiBjLmlkPW51bGwhPT0odD1lLmlkKSYmdm9pZCAwIT09dD90OlwiXCIsYy5zZXNzaW9uSWQ9bnVsbCE9PShuPWUuc2Vzc2lvbklkKSYmdm9pZCAwIT09bj9uOlwiXCIsYy5wbGF5ZXJJZD1udWxsIT09KHI9ZS5wbGF5ZXJJZCkmJnZvaWQgMCE9PXI/cjpcIlwiLGMuc2Vzc2lvbkRhdGE9dm9pZCAwIT09ZS5zZXNzaW9uRGF0YSYmbnVsbCE9PWUuc2Vzc2lvbkRhdGE/R2kuZnJvbVBhcnRpYWwoZS5zZXNzaW9uRGF0YSk6dm9pZCAwLGMuY3JlYXRlZFRpbWU9bnVsbCE9PShpPWUuY3JlYXRlZFRpbWUpJiZ2b2lkIDAhPT1pP2k6MCxjLmV4cGlyZVRpbWU9bnVsbCE9PShvPWUuZXhwaXJlVGltZSkmJnZvaWQgMCE9PW8/bzowLGMudmVyc2lvbj1udWxsIT09KGE9ZS52ZXJzaW9uKSYmdm9pZCAwIT09YT9hOjAsYy5lbmNyeXB0aW9uRGF0YT12b2lkIDAhPT1lLmVuY3J5cHRpb25EYXRhJiZudWxsIT09ZS5lbmNyeXB0aW9uRGF0YT9MaS5mcm9tUGFydGlhbChlLmVuY3J5cHRpb25EYXRhKTp2b2lkIDAsYy5zZXNzaW9uRGVwdGg9bnVsbCE9PShzPWUuc2Vzc2lvbkRlcHRoKSYmdm9pZCAwIT09cz9zOjAsY319O3ZhciBqaT0oKCk9PntpZih2b2lkIDAhPT1qaSlyZXR1cm4gamk7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYpcmV0dXJuIHNlbGY7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93O2lmKHZvaWQgMCE9PW4uZylyZXR1cm4gbi5nO3Rocm93XCJVbmFibGUgdG8gbG9jYXRlIGdsb2JhbCBvYmplY3RcIn0pKCk7Y29uc3QgWmk9amkuYXRvYnx8KGU9PmppLkJ1ZmZlci5mcm9tKGUsXCJiYXNlNjRcIikudG9TdHJpbmcoXCJiaW5hcnlcIikpO2Z1bmN0aW9uIHppKGUpe2NvbnN0IHQ9WmkoZSksbj1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCk7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDsrK2UpbltlXT10LmNoYXJDb2RlQXQoZSk7cmV0dXJuIG59Y29uc3QgS2k9amkuYnRvYXx8KGU9PmppLkJ1ZmZlci5mcm9tKGUsXCJiaW5hcnlcIikudG9TdHJpbmcoXCJiYXNlNjRcIikpO2Z1bmN0aW9uIFlpKGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IG4gb2YgZSl0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShuKSk7cmV0dXJuIEtpKHQuam9pbihcIlwiKSl9ZnVuY3Rpb24gcWkoZSl7aWYoZS5ndChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikpdGhyb3cgbmV3IGppLkVycm9yKFwiVmFsdWUgaXMgbGFyZ2VyIHRoYW4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcIik7cmV0dXJuIGUudG9OdW1iZXIoKX1mdW5jdGlvbiBYaShlKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZSYmbnVsbCE9PWV9ZnVuY3Rpb24gUWkoZSl7cmV0dXJuIG51bGwhPWV9YnQoKS51dGlsLkxvbmchPT1JdCgpJiYoYnQoKS51dGlsLkxvbmc9SXQoKSxidCgpLmNvbmZpZ3VyZSgpKTtjb25zdCBKaT17ZW5jb2RlOihlLHQ9YnQoKS5Xcml0ZXIuY3JlYXRlKCkpPT4oMCE9PWUubGF0aXR1ZGUmJnQudWludDMyKDkpLmRvdWJsZShlLmxhdGl0dWRlKSwwIT09ZS5sb25naXR1ZGUmJnQudWludDMyKDE3KS5kb3VibGUoZS5sb25naXR1ZGUpLHQpLGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGJ0KCkuUmVhZGVyP2U6bmV3KGJ0KCkuUmVhZGVyKShlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17bGF0aXR1ZGU6MCxsb25naXR1ZGU6MH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkubGF0aXR1ZGU9bi5kb3VibGUoKTticmVhaztjYXNlIDI6aS5sb25naXR1ZGU9bi5kb3VibGUoKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21KU09OOmU9Pih7bGF0aXR1ZGU6JGkoZS5sYXRpdHVkZSk/TnVtYmVyKGUubGF0aXR1ZGUpOjAsbG9uZ2l0dWRlOiRpKGUubG9uZ2l0dWRlKT9OdW1iZXIoZS5sb25naXR1ZGUpOjB9KSx0b0pTT04oZSl7Y29uc3QgdD17fTtyZXR1cm4gdm9pZCAwIT09ZS5sYXRpdHVkZSYmKHQubGF0aXR1ZGU9ZS5sYXRpdHVkZSksdm9pZCAwIT09ZS5sb25naXR1ZGUmJih0LmxvbmdpdHVkZT1lLmxvbmdpdHVkZSksdH0sZnJvbVBhcnRpYWwoZSl7dmFyIHQsbjtjb25zdCByPXtsYXRpdHVkZTowLGxvbmdpdHVkZTowfTtyZXR1cm4gci5sYXRpdHVkZT1udWxsIT09KHQ9ZS5sYXRpdHVkZSkmJnZvaWQgMCE9PXQ/dDowLHIubG9uZ2l0dWRlPW51bGwhPT0obj1lLmxvbmdpdHVkZSkmJnZvaWQgMCE9PW4/bjowLHJ9fTtmdW5jdGlvbiAkaShlKXtyZXR1cm4gbnVsbCE9ZX1idCgpLnV0aWwuTG9uZyE9PUl0KCkmJihidCgpLnV0aWwuTG9uZz1JdCgpLGJ0KCkuY29uZmlndXJlKCkpO2NvbnN0IGVvPXtlbmNvZGU6KGUsdD1idCgpLldyaXRlci5jcmVhdGUoKSk9PigwIT09ZS5yYWRpdXMmJnQudWludDMyKDkpLmRvdWJsZShlLnJhZGl1cyksdm9pZCAwIT09ZS5jZW50ZXImJkppLmVuY29kZShlLmNlbnRlcix0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSx0KSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBidCgpLlJlYWRlcj9lOm5ldyhidCgpLlJlYWRlcikoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3JhZGl1czowLGNlbnRlcjp2b2lkIDB9O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtzd2l0Y2goZT4+PjMpe2Nhc2UgMTppLnJhZGl1cz1uLmRvdWJsZSgpO2JyZWFrO2Nhc2UgMjppLmNlbnRlcj1KaS5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21KU09OOmU9Pih7cmFkaXVzOnRvKGUucmFkaXVzKT9OdW1iZXIoZS5yYWRpdXMpOjAsY2VudGVyOnRvKGUuY2VudGVyKT9KaS5mcm9tSlNPTihlLmNlbnRlcik6dm9pZCAwfSksdG9KU09OKGUpe2NvbnN0IHQ9e307cmV0dXJuIHZvaWQgMCE9PWUucmFkaXVzJiYodC5yYWRpdXM9ZS5yYWRpdXMpLHZvaWQgMCE9PWUuY2VudGVyJiYodC5jZW50ZXI9ZS5jZW50ZXI/SmkudG9KU09OKGUuY2VudGVyKTp2b2lkIDApLHR9LGZyb21QYXJ0aWFsKGUpe3ZhciB0O2NvbnN0IG49e3JhZGl1czowLGNlbnRlcjp2b2lkIDB9O3JldHVybiBuLnJhZGl1cz1udWxsIT09KHQ9ZS5yYWRpdXMpJiZ2b2lkIDAhPT10P3Q6MCxuLmNlbnRlcj12b2lkIDAhPT1lLmNlbnRlciYmbnVsbCE9PWUuY2VudGVyP0ppLmZyb21QYXJ0aWFsKGUuY2VudGVyKTp2b2lkIDAsbn19O2Z1bmN0aW9uIHRvKGUpe3JldHVybiBudWxsIT1lfWJ0KCkudXRpbC5Mb25nIT09SXQoKSYmKGJ0KCkudXRpbC5Mb25nPUl0KCksYnQoKS5jb25maWd1cmUoKSk7Y29uc3Qgbm89e2VuY29kZShlLHQ9YnQoKS5Xcml0ZXIuY3JlYXRlKCkpe2Zvcihjb25zdCBuIG9mIGUubG9jYXRpb25zKWVvLmVuY29kZShuLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiB2b2lkIDAhPT1lLmFjdGl2ZUx1cmUmJmVvLmVuY29kZShlLmFjdGl2ZUx1cmUsdC51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5jbG9zZXN0THVyZSYmZW8uZW5jb2RlKGUuY2xvc2VzdEx1cmUsdC51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCksdH0sZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYnQoKS5SZWFkZXI/ZTpuZXcoYnQoKS5SZWFkZXIpKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXtsb2NhdGlvbnM6W10sYWN0aXZlTHVyZTp2b2lkIDAsY2xvc2VzdEx1cmU6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5sb2NhdGlvbnMucHVzaChlby5kZWNvZGUobixuLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAyOmkuYWN0aXZlTHVyZT1lby5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDM6aS5jbG9zZXN0THVyZT1lby5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21KU09OOmU9Pih7bG9jYXRpb25zOkFycmF5LmlzQXJyYXkobnVsbD09ZT92b2lkIDA6ZS5sb2NhdGlvbnMpP2UubG9jYXRpb25zLm1hcCgoZT0+ZW8uZnJvbUpTT04oZSkpKTpbXSxhY3RpdmVMdXJlOnJvKGUuYWN0aXZlTHVyZSk/ZW8uZnJvbUpTT04oZS5hY3RpdmVMdXJlKTp2b2lkIDAsY2xvc2VzdEx1cmU6cm8oZS5jbG9zZXN0THVyZSk/ZW8uZnJvbUpTT04oZS5jbG9zZXN0THVyZSk6dm9pZCAwfSksdG9KU09OKGUpe2NvbnN0IHQ9e307cmV0dXJuIGUubG9jYXRpb25zP3QubG9jYXRpb25zPWUubG9jYXRpb25zLm1hcCgoZT0+ZT9lby50b0pTT04oZSk6dm9pZCAwKSk6dC5sb2NhdGlvbnM9W10sdm9pZCAwIT09ZS5hY3RpdmVMdXJlJiYodC5hY3RpdmVMdXJlPWUuYWN0aXZlTHVyZT9lby50b0pTT04oZS5hY3RpdmVMdXJlKTp2b2lkIDApLHZvaWQgMCE9PWUuY2xvc2VzdEx1cmUmJih0LmNsb3Nlc3RMdXJlPWUuY2xvc2VzdEx1cmU/ZW8udG9KU09OKGUuY2xvc2VzdEx1cmUpOnZvaWQgMCksdH0sZnJvbVBhcnRpYWwoZSl7dmFyIHQ7Y29uc3Qgbj17bG9jYXRpb25zOltdLGFjdGl2ZUx1cmU6dm9pZCAwLGNsb3Nlc3RMdXJlOnZvaWQgMH07cmV0dXJuIG4ubG9jYXRpb25zPShudWxsPT09KHQ9ZS5sb2NhdGlvbnMpfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lm1hcCgoZT0+ZW8uZnJvbVBhcnRpYWwoZSkpKSl8fFtdLG4uYWN0aXZlTHVyZT12b2lkIDAhPT1lLmFjdGl2ZUx1cmUmJm51bGwhPT1lLmFjdGl2ZUx1cmU/ZW8uZnJvbVBhcnRpYWwoZS5hY3RpdmVMdXJlKTp2b2lkIDAsbi5jbG9zZXN0THVyZT12b2lkIDAhPT1lLmNsb3Nlc3RMdXJlJiZudWxsIT09ZS5jbG9zZXN0THVyZT9lby5mcm9tUGFydGlhbChlLmNsb3Nlc3RMdXJlKTp2b2lkIDAsbn19O2Z1bmN0aW9uIHJvKGUpe3JldHVybiBudWxsIT1lfWJ0KCkudXRpbC5Mb25nIT09SXQoKSYmKGJ0KCkudXRpbC5Mb25nPUl0KCksYnQoKS5jb25maWd1cmUoKSk7Y29uc3QgaW89e2VuY29kZTooZSx0PWJ0KCkuV3JpdGVyLmNyZWF0ZSgpKT0+KDAhPT1lLnNlY29uZHMmJnQudWludDMyKDgpLmludDY0KGUuc2Vjb25kcyksMCE9PWUubmFub3MmJnQudWludDMyKDE2KS5pbnQzMihlLm5hbm9zKSx0KSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBidCgpLlJlYWRlcj9lOm5ldyhidCgpLlJlYWRlcikoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e3NlY29uZHM6MCxuYW5vczowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5zZWNvbmRzPXNvKG4uaW50NjQoKSk7YnJlYWs7Y2FzZSAyOmkubmFub3M9bi5pbnQzMigpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbUpTT046ZT0+KHtzZWNvbmRzOmNvKGUuc2Vjb25kcyk/TnVtYmVyKGUuc2Vjb25kcyk6MCxuYW5vczpjbyhlLm5hbm9zKT9OdW1iZXIoZS5uYW5vcyk6MH0pLHRvSlNPTihlKXtjb25zdCB0PXt9O3JldHVybiB2b2lkIDAhPT1lLnNlY29uZHMmJih0LnNlY29uZHM9TWF0aC5yb3VuZChlLnNlY29uZHMpKSx2b2lkIDAhPT1lLm5hbm9zJiYodC5uYW5vcz1NYXRoLnJvdW5kKGUubmFub3MpKSx0fSxmcm9tUGFydGlhbChlKXt2YXIgdCxuO2NvbnN0IHI9e3NlY29uZHM6MCxuYW5vczowfTtyZXR1cm4gci5zZWNvbmRzPW51bGwhPT0odD1lLnNlY29uZHMpJiZ2b2lkIDAhPT10P3Q6MCxyLm5hbm9zPW51bGwhPT0obj1lLm5hbm9zKSYmdm9pZCAwIT09bj9uOjAscn19O3ZhciBvbyxhbz0oKCk9PntpZih2b2lkIDAhPT1hbylyZXR1cm4gYW87aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYpcmV0dXJuIHNlbGY7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93O2lmKHZvaWQgMCE9PW4uZylyZXR1cm4gbi5nO3Rocm93XCJVbmFibGUgdG8gbG9jYXRlIGdsb2JhbCBvYmplY3RcIn0pKCk7ZnVuY3Rpb24gc28oZSl7aWYoZS5ndChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikpdGhyb3cgbmV3IGFvLkVycm9yKFwiVmFsdWUgaXMgbGFyZ2VyIHRoYW4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcIik7cmV0dXJuIGUudG9OdW1iZXIoKX1mdW5jdGlvbiBjbyhlKXtyZXR1cm4gbnVsbCE9ZX1mdW5jdGlvbiBsbyhlKXtzd2l0Y2goZSl7Y2FzZSAwOmNhc2VcIkludmFsaWRcIjpyZXR1cm4gb28uSW52YWxpZDtjYXNlIDE6Y2FzZVwiQXF1YXJpdXNcIjpyZXR1cm4gb28uQXF1YXJpdXM7Y2FzZSAyOmNhc2VcIkFyaWVzXCI6cmV0dXJuIG9vLkFyaWVzO2Nhc2UgMzpjYXNlXCJDYW5jZXJcIjpyZXR1cm4gb28uQ2FuY2VyO2Nhc2UgNDpjYXNlXCJDYXByaWNvcm5cIjpyZXR1cm4gb28uQ2Fwcmljb3JuO2Nhc2UgNTpjYXNlXCJHZW1pbmlcIjpyZXR1cm4gb28uR2VtaW5pO2Nhc2UgNjpjYXNlXCJMZW9cIjpyZXR1cm4gb28uTGVvO2Nhc2UgNzpjYXNlXCJMaWJyYVwiOnJldHVybiBvby5MaWJyYTtjYXNlIDg6Y2FzZVwiUGlzY2VzXCI6cmV0dXJuIG9vLlBpc2NlcztjYXNlIDk6Y2FzZVwiU2FnaXR0YXJpdXNcIjpyZXR1cm4gb28uU2FnaXR0YXJpdXM7Y2FzZSAxMDpjYXNlXCJTY29ycGlvXCI6cmV0dXJuIG9vLlNjb3JwaW87Y2FzZSAxMTpjYXNlXCJUYXVydXNcIjpyZXR1cm4gb28uVGF1cnVzO2Nhc2UgMTI6Y2FzZVwiVmlyZ29cIjpyZXR1cm4gb28uVmlyZ287ZGVmYXVsdDpyZXR1cm4gb28uVU5SRUNPR05JWkVEfX1idCgpLnV0aWwuTG9uZyE9PUl0KCkmJihidCgpLnV0aWwuTG9uZz1JdCgpLGJ0KCkuY29uZmlndXJlKCkpLGZ1bmN0aW9uKGUpe2UuSW52YWxpZD1cIkludmFsaWRcIixlLkFxdWFyaXVzPVwiQXF1YXJpdXNcIixlLkFyaWVzPVwiQXJpZXNcIixlLkNhbmNlcj1cIkNhbmNlclwiLGUuQ2Fwcmljb3JuPVwiQ2Fwcmljb3JuXCIsZS5HZW1pbmk9XCJHZW1pbmlcIixlLkxlbz1cIkxlb1wiLGUuTGlicmE9XCJMaWJyYVwiLGUuUGlzY2VzPVwiUGlzY2VzXCIsZS5TYWdpdHRhcml1cz1cIlNhZ2l0dGFyaXVzXCIsZS5TY29ycGlvPVwiU2NvcnBpb1wiLGUuVGF1cnVzPVwiVGF1cnVzXCIsZS5WaXJnbz1cIlZpcmdvXCIsZS5VTlJFQ09HTklaRUQ9XCJVTlJFQ09HTklaRURcIn0ob298fChvbz17fSkpO2NvbnN0IHVvPXtlbmNvZGU6KGUsdD1idCgpLldyaXRlci5jcmVhdGUoKSk9PihcIlwiIT09ZS5hdmF0YXJJZCYmdC51aW50MzIoMTApLnN0cmluZyhlLmF2YXRhcklkKSxcIlwiIT09ZS5zZWxmaWVJZCYmdC51aW50MzIoMTgpLnN0cmluZyhlLnNlbGZpZUlkKSx0KSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBidCgpLlJlYWRlcj9lOm5ldyhidCgpLlJlYWRlcikoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e2F2YXRhcklkOlwiXCIsc2VsZmllSWQ6XCJcIn07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkuYXZhdGFySWQ9bi5zdHJpbmcoKTticmVhaztjYXNlIDI6aS5zZWxmaWVJZD1uLnN0cmluZygpO2JyZWFrO2RlZmF1bHQ6bi5za2lwVHlwZSg3JmUpfX1yZXR1cm4gaX0sZnJvbUpTT046ZT0+KHthdmF0YXJJZDpfbyhlLmF2YXRhcklkKT9TdHJpbmcoZS5hdmF0YXJJZCk6XCJcIixzZWxmaWVJZDpfbyhlLnNlbGZpZUlkKT9TdHJpbmcoZS5zZWxmaWVJZCk6XCJcIn0pLHRvSlNPTihlKXtjb25zdCB0PXt9O3JldHVybiB2b2lkIDAhPT1lLmF2YXRhcklkJiYodC5hdmF0YXJJZD1lLmF2YXRhcklkKSx2b2lkIDAhPT1lLnNlbGZpZUlkJiYodC5zZWxmaWVJZD1lLnNlbGZpZUlkKSx0fSxmcm9tUGFydGlhbChlKXt2YXIgdCxuO2NvbnN0IHI9e2F2YXRhcklkOlwiXCIsc2VsZmllSWQ6XCJcIn07cmV0dXJuIHIuYXZhdGFySWQ9bnVsbCE9PSh0PWUuYXZhdGFySWQpJiZ2b2lkIDAhPT10P3Q6XCJcIixyLnNlbGZpZUlkPW51bGwhPT0obj1lLnNlbGZpZUlkKSYmdm9pZCAwIT09bj9uOlwiXCIscn19LGZvPXtlbmNvZGU6KGUsdD1idCgpLldyaXRlci5jcmVhdGUoKSk9Pih2b2lkIDAhPT1lLmZyaWVuZHNoaXBTdGFydCYmaW8uZW5jb2RlKHZvKGUuZnJpZW5kc2hpcFN0YXJ0KSx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmxhc3RJbnRlcmFjdGlvbiYmaW8uZW5jb2RlKHZvKGUubGFzdEludGVyYWN0aW9uKSx0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSwwIT09ZS5zdHJlYWsmJnQudWludDMyKDI0KS51aW50MzIoZS5zdHJlYWspLHQpLGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGJ0KCkuUmVhZGVyP2U6bmV3KGJ0KCkuUmVhZGVyKShlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17ZnJpZW5kc2hpcFN0YXJ0OnZvaWQgMCxsYXN0SW50ZXJhY3Rpb246dm9pZCAwLHN0cmVhazowfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5mcmllbmRzaGlwU3RhcnQ9Z28oaW8uZGVjb2RlKG4sbi51aW50MzIoKSkpO2JyZWFrO2Nhc2UgMjppLmxhc3RJbnRlcmFjdGlvbj1nbyhpby5kZWNvZGUobixuLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAzOmkuc3RyZWFrPW4udWludDMyKCk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tSlNPTjplPT4oe2ZyaWVuZHNoaXBTdGFydDpfbyhlLmZyaWVuZHNoaXBTdGFydCk/eW8oZS5mcmllbmRzaGlwU3RhcnQpOnZvaWQgMCxsYXN0SW50ZXJhY3Rpb246X28oZS5sYXN0SW50ZXJhY3Rpb24pP3lvKGUubGFzdEludGVyYWN0aW9uKTp2b2lkIDAsc3RyZWFrOl9vKGUuc3RyZWFrKT9OdW1iZXIoZS5zdHJlYWspOjB9KSx0b0pTT04oZSl7Y29uc3QgdD17fTtyZXR1cm4gdm9pZCAwIT09ZS5mcmllbmRzaGlwU3RhcnQmJih0LmZyaWVuZHNoaXBTdGFydD1lLmZyaWVuZHNoaXBTdGFydC50b0lTT1N0cmluZygpKSx2b2lkIDAhPT1lLmxhc3RJbnRlcmFjdGlvbiYmKHQubGFzdEludGVyYWN0aW9uPWUubGFzdEludGVyYWN0aW9uLnRvSVNPU3RyaW5nKCkpLHZvaWQgMCE9PWUuc3RyZWFrJiYodC5zdHJlYWs9TWF0aC5yb3VuZChlLnN0cmVhaykpLHR9LGZyb21QYXJ0aWFsKGUpe3ZhciB0LG4scjtjb25zdCBpPXtmcmllbmRzaGlwU3RhcnQ6dm9pZCAwLGxhc3RJbnRlcmFjdGlvbjp2b2lkIDAsc3RyZWFrOjB9O3JldHVybiBpLmZyaWVuZHNoaXBTdGFydD1udWxsIT09KHQ9ZS5mcmllbmRzaGlwU3RhcnQpJiZ2b2lkIDAhPT10P3Q6dm9pZCAwLGkubGFzdEludGVyYWN0aW9uPW51bGwhPT0obj1lLmxhc3RJbnRlcmFjdGlvbikmJnZvaWQgMCE9PW4/bjp2b2lkIDAsaS5zdHJlYWs9bnVsbCE9PShyPWUuc3RyZWFrKSYmdm9pZCAwIT09cj9yOjAsaX19O2Z1bmN0aW9uIHBvKCl7cmV0dXJue3VzZXJJZDpcIlwiLHVzZXJuYW1lOlwiXCIsYmlydGhkYXRlOlwiXCIsZGlzcGxheU5hbWU6XCJcIixjb3VudHJ5Y29kZTpcIlwiLHNjb3JlOjAsYml0bW9qaUluZm86dm9pZCAwLGZyaWVuZEluZm86dm9pZCAwLHpvZGlhYzpvby5JbnZhbGlkfX1jb25zdCBtbz17ZW5jb2RlOihlLHQ9YnQoKS5Xcml0ZXIuY3JlYXRlKCkpPT4oXCJcIiE9PWUudXNlcklkJiZ0LnVpbnQzMigxMCkuc3RyaW5nKGUudXNlcklkKSxcIlwiIT09ZS51c2VybmFtZSYmdC51aW50MzIoMTgpLnN0cmluZyhlLnVzZXJuYW1lKSxcIlwiIT09ZS5iaXJ0aGRhdGUmJnQudWludDMyKDI2KS5zdHJpbmcoZS5iaXJ0aGRhdGUpLFwiXCIhPT1lLmRpc3BsYXlOYW1lJiZ0LnVpbnQzMigzNCkuc3RyaW5nKGUuZGlzcGxheU5hbWUpLFwiXCIhPT1lLmNvdW50cnljb2RlJiZ0LnVpbnQzMig0Mikuc3RyaW5nKGUuY291bnRyeWNvZGUpLDAhPT1lLnNjb3JlJiZ0LnVpbnQzMig1NikudWludDY0KGUuc2NvcmUpLHZvaWQgMCE9PWUuYml0bW9qaUluZm8mJnVvLmVuY29kZShlLmJpdG1vamlJbmZvLHQudWludDMyKDY2KS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUuZnJpZW5kSW5mbyYmZm8uZW5jb2RlKGUuZnJpZW5kSW5mbyx0LnVpbnQzMig3NCkuZm9yaygpKS5sZGVsaW0oKSxlLnpvZGlhYyE9PW9vLkludmFsaWQmJnQudWludDMyKDgwKS5pbnQzMihmdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSBvby5JbnZhbGlkOnJldHVybiAwO2Nhc2Ugb28uQXF1YXJpdXM6cmV0dXJuIDE7Y2FzZSBvby5BcmllczpyZXR1cm4gMjtjYXNlIG9vLkNhbmNlcjpyZXR1cm4gMztjYXNlIG9vLkNhcHJpY29ybjpyZXR1cm4gNDtjYXNlIG9vLkdlbWluaTpyZXR1cm4gNTtjYXNlIG9vLkxlbzpyZXR1cm4gNjtjYXNlIG9vLkxpYnJhOnJldHVybiA3O2Nhc2Ugb28uUGlzY2VzOnJldHVybiA4O2Nhc2Ugb28uU2FnaXR0YXJpdXM6cmV0dXJuIDk7Y2FzZSBvby5TY29ycGlvOnJldHVybiAxMDtjYXNlIG9vLlRhdXJ1czpyZXR1cm4gMTE7Y2FzZSBvby5WaXJnbzpyZXR1cm4gMTI7ZGVmYXVsdDpyZXR1cm4gMH19KGUuem9kaWFjKSksdCksZGVjb2RlKGUsdCl7Y29uc3Qgbj1lIGluc3RhbmNlb2YgYnQoKS5SZWFkZXI/ZTpuZXcoYnQoKS5SZWFkZXIpKGUpO2xldCByPXZvaWQgMD09PXQ/bi5sZW46bi5wb3MrdDtjb25zdCBpPXBvKCk7Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkudXNlcklkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSAyOmkudXNlcm5hbWU9bi5zdHJpbmcoKTticmVhaztjYXNlIDM6aS5iaXJ0aGRhdGU9bi5zdHJpbmcoKTticmVhaztjYXNlIDQ6aS5kaXNwbGF5TmFtZT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgNTppLmNvdW50cnljb2RlPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA3Omkuc2NvcmU9RW8obi51aW50NjQoKSk7YnJlYWs7Y2FzZSA4OmkuYml0bW9qaUluZm89dW8uZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSA5OmkuZnJpZW5kSW5mbz1mby5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDEwOmkuem9kaWFjPWxvKG4uaW50MzIoKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tSlNPTjplPT4oe3VzZXJJZDpfbyhlLnVzZXJJZCk/U3RyaW5nKGUudXNlcklkKTpcIlwiLHVzZXJuYW1lOl9vKGUudXNlcm5hbWUpP1N0cmluZyhlLnVzZXJuYW1lKTpcIlwiLGJpcnRoZGF0ZTpfbyhlLmJpcnRoZGF0ZSk/U3RyaW5nKGUuYmlydGhkYXRlKTpcIlwiLGRpc3BsYXlOYW1lOl9vKGUuZGlzcGxheU5hbWUpP1N0cmluZyhlLmRpc3BsYXlOYW1lKTpcIlwiLGNvdW50cnljb2RlOl9vKGUuY291bnRyeWNvZGUpP1N0cmluZyhlLmNvdW50cnljb2RlKTpcIlwiLHNjb3JlOl9vKGUuc2NvcmUpP051bWJlcihlLnNjb3JlKTowLGJpdG1vamlJbmZvOl9vKGUuYml0bW9qaUluZm8pP3VvLmZyb21KU09OKGUuYml0bW9qaUluZm8pOnZvaWQgMCxmcmllbmRJbmZvOl9vKGUuZnJpZW5kSW5mbyk/Zm8uZnJvbUpTT04oZS5mcmllbmRJbmZvKTp2b2lkIDAsem9kaWFjOl9vKGUuem9kaWFjKT9sbyhlLnpvZGlhYyk6b28uSW52YWxpZH0pLHRvSlNPTihlKXtjb25zdCB0PXt9O3JldHVybiB2b2lkIDAhPT1lLnVzZXJJZCYmKHQudXNlcklkPWUudXNlcklkKSx2b2lkIDAhPT1lLnVzZXJuYW1lJiYodC51c2VybmFtZT1lLnVzZXJuYW1lKSx2b2lkIDAhPT1lLmJpcnRoZGF0ZSYmKHQuYmlydGhkYXRlPWUuYmlydGhkYXRlKSx2b2lkIDAhPT1lLmRpc3BsYXlOYW1lJiYodC5kaXNwbGF5TmFtZT1lLmRpc3BsYXlOYW1lKSx2b2lkIDAhPT1lLmNvdW50cnljb2RlJiYodC5jb3VudHJ5Y29kZT1lLmNvdW50cnljb2RlKSx2b2lkIDAhPT1lLnNjb3JlJiYodC5zY29yZT1NYXRoLnJvdW5kKGUuc2NvcmUpKSx2b2lkIDAhPT1lLmJpdG1vamlJbmZvJiYodC5iaXRtb2ppSW5mbz1lLmJpdG1vamlJbmZvP3VvLnRvSlNPTihlLmJpdG1vamlJbmZvKTp2b2lkIDApLHZvaWQgMCE9PWUuZnJpZW5kSW5mbyYmKHQuZnJpZW5kSW5mbz1lLmZyaWVuZEluZm8/Zm8udG9KU09OKGUuZnJpZW5kSW5mbyk6dm9pZCAwKSx2b2lkIDAhPT1lLnpvZGlhYyYmKHQuem9kaWFjPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIG9vLkludmFsaWQ6cmV0dXJuXCJJbnZhbGlkXCI7Y2FzZSBvby5BcXVhcml1czpyZXR1cm5cIkFxdWFyaXVzXCI7Y2FzZSBvby5BcmllczpyZXR1cm5cIkFyaWVzXCI7Y2FzZSBvby5DYW5jZXI6cmV0dXJuXCJDYW5jZXJcIjtjYXNlIG9vLkNhcHJpY29ybjpyZXR1cm5cIkNhcHJpY29yblwiO2Nhc2Ugb28uR2VtaW5pOnJldHVyblwiR2VtaW5pXCI7Y2FzZSBvby5MZW86cmV0dXJuXCJMZW9cIjtjYXNlIG9vLkxpYnJhOnJldHVyblwiTGlicmFcIjtjYXNlIG9vLlBpc2NlczpyZXR1cm5cIlBpc2Nlc1wiO2Nhc2Ugb28uU2FnaXR0YXJpdXM6cmV0dXJuXCJTYWdpdHRhcml1c1wiO2Nhc2Ugb28uU2NvcnBpbzpyZXR1cm5cIlNjb3JwaW9cIjtjYXNlIG9vLlRhdXJ1czpyZXR1cm5cIlRhdXJ1c1wiO2Nhc2Ugb28uVmlyZ286cmV0dXJuXCJWaXJnb1wiO2RlZmF1bHQ6cmV0dXJuXCJVTktOT1dOXCJ9fShlLnpvZGlhYykpLHR9LGZyb21QYXJ0aWFsKGUpe3ZhciB0LG4scixpLG8sYSxzO2NvbnN0IGM9cG8oKTtyZXR1cm4gYy51c2VySWQ9bnVsbCE9PSh0PWUudXNlcklkKSYmdm9pZCAwIT09dD90OlwiXCIsYy51c2VybmFtZT1udWxsIT09KG49ZS51c2VybmFtZSkmJnZvaWQgMCE9PW4/bjpcIlwiLGMuYmlydGhkYXRlPW51bGwhPT0ocj1lLmJpcnRoZGF0ZSkmJnZvaWQgMCE9PXI/cjpcIlwiLGMuZGlzcGxheU5hbWU9bnVsbCE9PShpPWUuZGlzcGxheU5hbWUpJiZ2b2lkIDAhPT1pP2k6XCJcIixjLmNvdW50cnljb2RlPW51bGwhPT0obz1lLmNvdW50cnljb2RlKSYmdm9pZCAwIT09bz9vOlwiXCIsYy5zY29yZT1udWxsIT09KGE9ZS5zY29yZSkmJnZvaWQgMCE9PWE/YTowLGMuYml0bW9qaUluZm89dm9pZCAwIT09ZS5iaXRtb2ppSW5mbyYmbnVsbCE9PWUuYml0bW9qaUluZm8/dW8uZnJvbVBhcnRpYWwoZS5iaXRtb2ppSW5mbyk6dm9pZCAwLGMuZnJpZW5kSW5mbz12b2lkIDAhPT1lLmZyaWVuZEluZm8mJm51bGwhPT1lLmZyaWVuZEluZm8/Zm8uZnJvbVBhcnRpYWwoZS5mcmllbmRJbmZvKTp2b2lkIDAsYy56b2RpYWM9bnVsbCE9PShzPWUuem9kaWFjKSYmdm9pZCAwIT09cz9zOm9vLkludmFsaWQsY319O3ZhciBobz0oKCk9PntpZih2b2lkIDAhPT1obylyZXR1cm4gaG87aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYpcmV0dXJuIHNlbGY7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93O2lmKHZvaWQgMCE9PW4uZylyZXR1cm4gbi5nO3Rocm93XCJVbmFibGUgdG8gbG9jYXRlIGdsb2JhbCBvYmplY3RcIn0pKCk7ZnVuY3Rpb24gdm8oZSl7cmV0dXJue3NlY29uZHM6ZS5nZXRUaW1lKCkvMWUzLG5hbm9zOmUuZ2V0VGltZSgpJTFlMyoxZTZ9fWZ1bmN0aW9uIGdvKGUpe2xldCB0PTFlMyplLnNlY29uZHM7cmV0dXJuIHQrPWUubmFub3MvMWU2LG5ldyBEYXRlKHQpfWZ1bmN0aW9uIHlvKGUpe3JldHVybiBlIGluc3RhbmNlb2YgRGF0ZT9lOlwic3RyaW5nXCI9PXR5cGVvZiBlP25ldyBEYXRlKGUpOmdvKGlvLmZyb21KU09OKGUpKX1mdW5jdGlvbiBFbyhlKXtpZihlLmd0KE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSl0aHJvdyBuZXcgaG8uRXJyb3IoXCJWYWx1ZSBpcyBsYXJnZXIgdGhhbiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlwiKTtyZXR1cm4gZS50b051bWJlcigpfWZ1bmN0aW9uIF9vKGUpe3JldHVybiBudWxsIT1lfWZ1bmN0aW9uIElvKCl7cmV0dXJue3N0b3JlOm5ldyBVaW50OEFycmF5fX1idCgpLnV0aWwuTG9uZyE9PUl0KCkmJihidCgpLnV0aWwuTG9uZz1JdCgpLGJ0KCkuY29uZmlndXJlKCkpO2NvbnN0IFNvPXtlbmNvZGU6KGUsdD1idCgpLldyaXRlci5jcmVhdGUoKSk9PigwIT09ZS5zdG9yZS5sZW5ndGgmJnQudWludDMyKDEwKS5ieXRlcyhlLnN0b3JlKSx0KSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBidCgpLlJlYWRlcj9lOm5ldyhidCgpLlJlYWRlcikoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9SW8oKTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/aS5zdG9yZT1uLmJ5dGVzKCk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tSlNPTihlKXtyZXR1cm57c3RvcmU6KHQ9ZS5zdG9yZSxudWxsIT10P0NvKGUuc3RvcmUpOm5ldyBVaW50OEFycmF5KX07dmFyIHR9LHRvSlNPTihlKXtjb25zdCB0PXt9O3JldHVybiB2b2lkIDAhPT1lLnN0b3JlJiYodC5zdG9yZT1mdW5jdGlvbihlKXtjb25zdCB0PVtdO2Zvcihjb25zdCBuIG9mIGUpdC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUobikpO3JldHVybiBBbyh0LmpvaW4oXCJcIikpfSh2b2lkIDAhPT1lLnN0b3JlP2Uuc3RvcmU6bmV3IFVpbnQ4QXJyYXkpKSx0fSxmcm9tUGFydGlhbChlKXt2YXIgdDtjb25zdCBuPUlvKCk7cmV0dXJuIG4uc3RvcmU9bnVsbCE9PSh0PWUuc3RvcmUpJiZ2b2lkIDAhPT10P3Q6bmV3IFVpbnQ4QXJyYXksbn19O3ZhciBibz0oKCk9PntpZih2b2lkIDAhPT1ibylyZXR1cm4gYm87aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYpcmV0dXJuIHNlbGY7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93O2lmKHZvaWQgMCE9PW4uZylyZXR1cm4gbi5nO3Rocm93XCJVbmFibGUgdG8gbG9jYXRlIGdsb2JhbCBvYmplY3RcIn0pKCk7Y29uc3QgVG89Ym8uYXRvYnx8KGU9PmJvLkJ1ZmZlci5mcm9tKGUsXCJiYXNlNjRcIikudG9TdHJpbmcoXCJiaW5hcnlcIikpO2Z1bmN0aW9uIENvKGUpe2NvbnN0IHQ9VG8oZSksbj1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCk7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDsrK2UpbltlXT10LmNoYXJDb2RlQXQoZSk7cmV0dXJuIG59Y29uc3QgQW89Ym8uYnRvYXx8KGU9PmJvLkJ1ZmZlci5mcm9tKGUsXCJiaW5hcnlcIikudG9TdHJpbmcoXCJiYXNlNjRcIikpO2Z1bmN0aW9uIFJvKCl7cmV0dXJue2RhdGE6bmV3IFVpbnQ4QXJyYXl9fWJ0KCkudXRpbC5Mb25nIT09SXQoKSYmKGJ0KCkudXRpbC5Mb25nPUl0KCksYnQoKS5jb25maWd1cmUoKSk7Y29uc3Qga289e2VuY29kZTooZSx0PWJ0KCkuV3JpdGVyLmNyZWF0ZSgpKT0+KDAhPT1lLmRhdGEubGVuZ3RoJiZ0LnVpbnQzMigxMCkuYnl0ZXMoZS5kYXRhKSx0KSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBidCgpLlJlYWRlcj9lOm5ldyhidCgpLlJlYWRlcikoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9Um8oKTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/aS5kYXRhPW4uYnl0ZXMoKTpuLnNraXBUeXBlKDcmZSl9cmV0dXJuIGl9LGZyb21KU09OKGUpe3JldHVybntkYXRhOih0PWUuZGF0YSxudWxsIT10P3dvKGUuZGF0YSk6bmV3IFVpbnQ4QXJyYXkpfTt2YXIgdH0sdG9KU09OKGUpe2NvbnN0IHQ9e307cmV0dXJuIHZvaWQgMCE9PWUuZGF0YSYmKHQuZGF0YT1mdW5jdGlvbihlKXtjb25zdCB0PVtdO2Zvcihjb25zdCBuIG9mIGUpdC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUobikpO3JldHVybiBEbyh0LmpvaW4oXCJcIikpfSh2b2lkIDAhPT1lLmRhdGE/ZS5kYXRhOm5ldyBVaW50OEFycmF5KSksdH0sZnJvbVBhcnRpYWwoZSl7dmFyIHQ7Y29uc3Qgbj1SbygpO3JldHVybiBuLmRhdGE9bnVsbCE9PSh0PWUuZGF0YSkmJnZvaWQgMCE9PXQ/dDpuZXcgVWludDhBcnJheSxufX07dmFyIE9vPSgoKT0+e2lmKHZvaWQgMCE9PU9vKXJldHVybiBPbztpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZilyZXR1cm4gc2VsZjtpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93KXJldHVybiB3aW5kb3c7aWYodm9pZCAwIT09bi5nKXJldHVybiBuLmc7dGhyb3dcIlVuYWJsZSB0byBsb2NhdGUgZ2xvYmFsIG9iamVjdFwifSkoKTtjb25zdCBObz1Pby5hdG9ifHwoZT0+T28uQnVmZmVyLmZyb20oZSxcImJhc2U2NFwiKS50b1N0cmluZyhcImJpbmFyeVwiKSk7ZnVuY3Rpb24gd28oZSl7Y29uc3QgdD1ObyhlKSxuPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoKTtmb3IobGV0IGU9MDtlPHQubGVuZ3RoOysrZSluW2VdPXQuY2hhckNvZGVBdChlKTtyZXR1cm4gbn1jb25zdCBEbz1Pby5idG9hfHwoZT0+T28uQnVmZmVyLmZyb20oZSxcImJpbmFyeVwiKS50b1N0cmluZyhcImJhc2U2NFwiKSk7dmFyIFBvLE1vO2Z1bmN0aW9uIExvKGUpe3N3aXRjaChlKXtjYXNlIDA6Y2FzZVwiTElWRV9DQU1FUkFcIjpyZXR1cm4gUG8uTElWRV9DQU1FUkE7Y2FzZSAxOmNhc2VcIlNUT1JZX1JFUExZXCI6cmV0dXJuIFBvLlNUT1JZX1JFUExZO2Nhc2UgMjpjYXNlXCJDSEFUX1JFUExZXCI6cmV0dXJuIFBvLkNIQVRfUkVQTFk7Y2FzZSAzOmNhc2VcIlJFU1RBUlRcIjpyZXR1cm4gUG8uUkVTVEFSVDtjYXNlIDQ6Y2FzZVwiUFJFVklFV19DQU5DRUxcIjpyZXR1cm4gUG8uUFJFVklFV19DQU5DRUw7Y2FzZSA1OmNhc2VcIk1BUFwiOnJldHVybiBQby5NQVA7ZGVmYXVsdDpyZXR1cm4gUG8uVU5SRUNPR05JWkVEfX1mdW5jdGlvbiBVbyhlKXtzd2l0Y2goZSl7Y2FzZSAwOmNhc2VcIk5PTkVcIjpyZXR1cm4gTW8uTk9ORTtjYXNlIDE6Y2FzZVwiRVhQRVJJTUVOVEFMXCI6cmV0dXJuIE1vLkVYUEVSSU1FTlRBTDtkZWZhdWx0OnJldHVybiBNby5VTlJFQ09HTklaRUR9fWZ1bmN0aW9uIHhvKGUpe3N3aXRjaChlKXtjYXNlIE1vLk5PTkU6cmV0dXJuIDA7Y2FzZSBNby5FWFBFUklNRU5UQUw6cmV0dXJuIDE7ZGVmYXVsdDpyZXR1cm4gMH19ZnVuY3Rpb24gRm8oKXtyZXR1cm57c25hcHBhYmxlOnZvaWQgMCxsdXJlczp2b2lkIDAsdXNlcklkOlwiXCIsZW50cnlQb2ludDpQby5MSVZFX0NBTUVSQSx1c2VyRGF0YTp2b2lkIDAscGVyc2lzdGVudFN0b3JlOnZvaWQgMCxsYXVuY2hQYXJhbXM6dm9pZCAwLGFwaURlc2NyaXB0b3JzOltdfX1idCgpLnV0aWwuTG9uZyE9PUl0KCkmJihidCgpLnV0aWwuTG9uZz1JdCgpLGJ0KCkuY29uZmlndXJlKCkpLGZ1bmN0aW9uKGUpe2UuTElWRV9DQU1FUkE9XCJMSVZFX0NBTUVSQVwiLGUuU1RPUllfUkVQTFk9XCJTVE9SWV9SRVBMWVwiLGUuQ0hBVF9SRVBMWT1cIkNIQVRfUkVQTFlcIixlLlJFU1RBUlQ9XCJSRVNUQVJUXCIsZS5QUkVWSUVXX0NBTkNFTD1cIlBSRVZJRVdfQ0FOQ0VMXCIsZS5NQVA9XCJNQVBcIixlLlVOUkVDT0dOSVpFRD1cIlVOUkVDT0dOSVpFRFwifShQb3x8KFBvPXt9KSksZnVuY3Rpb24oZSl7ZS5OT05FPVwiTk9ORVwiLGUuRVhQRVJJTUVOVEFMPVwiRVhQRVJJTUVOVEFMXCIsZS5VTlJFQ09HTklaRUQ9XCJVTlJFQ09HTklaRURcIn0oTW98fChNbz17fSkpO2NvbnN0IEJvPXtlbmNvZGUoZSx0PWJ0KCkuV3JpdGVyLmNyZWF0ZSgpKXt2b2lkIDAhPT1lLnNuYXBwYWJsZSYmV2kuZW5jb2RlKGUuc25hcHBhYmxlLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpLHZvaWQgMCE9PWUubHVyZXMmJm5vLmVuY29kZShlLmx1cmVzLHQudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLFwiXCIhPT1lLnVzZXJJZCYmdC51aW50MzIoMjYpLnN0cmluZyhlLnVzZXJJZCksZS5lbnRyeVBvaW50IT09UG8uTElWRV9DQU1FUkEmJnQudWludDMyKDMyKS5pbnQzMihmdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSBQby5MSVZFX0NBTUVSQTpyZXR1cm4gMDtjYXNlIFBvLlNUT1JZX1JFUExZOnJldHVybiAxO2Nhc2UgUG8uQ0hBVF9SRVBMWTpyZXR1cm4gMjtjYXNlIFBvLlJFU1RBUlQ6cmV0dXJuIDM7Y2FzZSBQby5QUkVWSUVXX0NBTkNFTDpyZXR1cm4gNDtjYXNlIFBvLk1BUDpyZXR1cm4gNTtkZWZhdWx0OnJldHVybiAwfX0oZS5lbnRyeVBvaW50KSksdm9pZCAwIT09ZS51c2VyRGF0YSYmbW8uZW5jb2RlKGUudXNlckRhdGEsdC51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKCksdm9pZCAwIT09ZS5wZXJzaXN0ZW50U3RvcmUmJlNvLmVuY29kZShlLnBlcnNpc3RlbnRTdG9yZSx0LnVpbnQzMig1MCkuZm9yaygpKS5sZGVsaW0oKSx2b2lkIDAhPT1lLmxhdW5jaFBhcmFtcyYma28uZW5jb2RlKGUubGF1bmNoUGFyYW1zLHQudWludDMyKDU4KS5mb3JrKCkpLmxkZWxpbSgpLHQudWludDMyKDY2KS5mb3JrKCk7Zm9yKGNvbnN0IG4gb2YgZS5hcGlEZXNjcmlwdG9ycyl0LmludDMyKHhvKG4pKTtyZXR1cm4gdC5sZGVsaW0oKSx0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBidCgpLlJlYWRlcj9lOm5ldyhidCgpLlJlYWRlcikoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9Rm8oKTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7c3dpdGNoKGU+Pj4zKXtjYXNlIDE6aS5zbmFwcGFibGU9V2kuZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAyOmkubHVyZXM9bm8uZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSAzOmkudXNlcklkPW4uc3RyaW5nKCk7YnJlYWs7Y2FzZSA0OmkuZW50cnlQb2ludD1MbyhuLmludDMyKCkpO2JyZWFrO2Nhc2UgNTppLnVzZXJEYXRhPW1vLmRlY29kZShuLG4udWludDMyKCkpO2JyZWFrO2Nhc2UgNjppLnBlcnNpc3RlbnRTdG9yZT1Tby5kZWNvZGUobixuLnVpbnQzMigpKTticmVhaztjYXNlIDc6aS5sYXVuY2hQYXJhbXM9a28uZGVjb2RlKG4sbi51aW50MzIoKSk7YnJlYWs7Y2FzZSA4OmlmKDI9PSg3JmUpKXtjb25zdCBlPW4udWludDMyKCkrbi5wb3M7Zm9yKDtuLnBvczxlOylpLmFwaURlc2NyaXB0b3JzLnB1c2goVW8obi5pbnQzMigpKSl9ZWxzZSBpLmFwaURlc2NyaXB0b3JzLnB1c2goVW8obi5pbnQzMigpKSk7YnJlYWs7ZGVmYXVsdDpuLnNraXBUeXBlKDcmZSl9fXJldHVybiBpfSxmcm9tSlNPTjplPT4oe3NuYXBwYWJsZTpWbyhlLnNuYXBwYWJsZSk/V2kuZnJvbUpTT04oZS5zbmFwcGFibGUpOnZvaWQgMCxsdXJlczpWbyhlLmx1cmVzKT9uby5mcm9tSlNPTihlLmx1cmVzKTp2b2lkIDAsdXNlcklkOlZvKGUudXNlcklkKT9TdHJpbmcoZS51c2VySWQpOlwiXCIsZW50cnlQb2ludDpWbyhlLmVudHJ5UG9pbnQpP0xvKGUuZW50cnlQb2ludCk6UG8uTElWRV9DQU1FUkEsdXNlckRhdGE6Vm8oZS51c2VyRGF0YSk/bW8uZnJvbUpTT04oZS51c2VyRGF0YSk6dm9pZCAwLHBlcnNpc3RlbnRTdG9yZTpWbyhlLnBlcnNpc3RlbnRTdG9yZSk/U28uZnJvbUpTT04oZS5wZXJzaXN0ZW50U3RvcmUpOnZvaWQgMCxsYXVuY2hQYXJhbXM6Vm8oZS5sYXVuY2hQYXJhbXMpP2tvLmZyb21KU09OKGUubGF1bmNoUGFyYW1zKTp2b2lkIDAsYXBpRGVzY3JpcHRvcnM6QXJyYXkuaXNBcnJheShudWxsPT1lP3ZvaWQgMDplLmFwaURlc2NyaXB0b3JzKT9lLmFwaURlc2NyaXB0b3JzLm1hcCgoZT0+VW8oZSkpKTpbXX0pLHRvSlNPTihlKXtjb25zdCB0PXt9O3JldHVybiB2b2lkIDAhPT1lLnNuYXBwYWJsZSYmKHQuc25hcHBhYmxlPWUuc25hcHBhYmxlP1dpLnRvSlNPTihlLnNuYXBwYWJsZSk6dm9pZCAwKSx2b2lkIDAhPT1lLmx1cmVzJiYodC5sdXJlcz1lLmx1cmVzP25vLnRvSlNPTihlLmx1cmVzKTp2b2lkIDApLHZvaWQgMCE9PWUudXNlcklkJiYodC51c2VySWQ9ZS51c2VySWQpLHZvaWQgMCE9PWUuZW50cnlQb2ludCYmKHQuZW50cnlQb2ludD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSBQby5MSVZFX0NBTUVSQTpyZXR1cm5cIkxJVkVfQ0FNRVJBXCI7Y2FzZSBQby5TVE9SWV9SRVBMWTpyZXR1cm5cIlNUT1JZX1JFUExZXCI7Y2FzZSBQby5DSEFUX1JFUExZOnJldHVyblwiQ0hBVF9SRVBMWVwiO2Nhc2UgUG8uUkVTVEFSVDpyZXR1cm5cIlJFU1RBUlRcIjtjYXNlIFBvLlBSRVZJRVdfQ0FOQ0VMOnJldHVyblwiUFJFVklFV19DQU5DRUxcIjtjYXNlIFBvLk1BUDpyZXR1cm5cIk1BUFwiO2RlZmF1bHQ6cmV0dXJuXCJVTktOT1dOXCJ9fShlLmVudHJ5UG9pbnQpKSx2b2lkIDAhPT1lLnVzZXJEYXRhJiYodC51c2VyRGF0YT1lLnVzZXJEYXRhP21vLnRvSlNPTihlLnVzZXJEYXRhKTp2b2lkIDApLHZvaWQgMCE9PWUucGVyc2lzdGVudFN0b3JlJiYodC5wZXJzaXN0ZW50U3RvcmU9ZS5wZXJzaXN0ZW50U3RvcmU/U28udG9KU09OKGUucGVyc2lzdGVudFN0b3JlKTp2b2lkIDApLHZvaWQgMCE9PWUubGF1bmNoUGFyYW1zJiYodC5sYXVuY2hQYXJhbXM9ZS5sYXVuY2hQYXJhbXM/a28udG9KU09OKGUubGF1bmNoUGFyYW1zKTp2b2lkIDApLGUuYXBpRGVzY3JpcHRvcnM/dC5hcGlEZXNjcmlwdG9ycz1lLmFwaURlc2NyaXB0b3JzLm1hcCgoZT0+ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgTW8uTk9ORTpyZXR1cm5cIk5PTkVcIjtjYXNlIE1vLkVYUEVSSU1FTlRBTDpyZXR1cm5cIkVYUEVSSU1FTlRBTFwiO2RlZmF1bHQ6cmV0dXJuXCJVTktOT1dOXCJ9fShlKSkpOnQuYXBpRGVzY3JpcHRvcnM9W10sdH0sZnJvbVBhcnRpYWwoZSl7dmFyIHQsbixyO2NvbnN0IGk9Rm8oKTtyZXR1cm4gaS5zbmFwcGFibGU9dm9pZCAwIT09ZS5zbmFwcGFibGUmJm51bGwhPT1lLnNuYXBwYWJsZT9XaS5mcm9tUGFydGlhbChlLnNuYXBwYWJsZSk6dm9pZCAwLGkubHVyZXM9dm9pZCAwIT09ZS5sdXJlcyYmbnVsbCE9PWUubHVyZXM/bm8uZnJvbVBhcnRpYWwoZS5sdXJlcyk6dm9pZCAwLGkudXNlcklkPW51bGwhPT0odD1lLnVzZXJJZCkmJnZvaWQgMCE9PXQ/dDpcIlwiLGkuZW50cnlQb2ludD1udWxsIT09KG49ZS5lbnRyeVBvaW50KSYmdm9pZCAwIT09bj9uOlBvLkxJVkVfQ0FNRVJBLGkudXNlckRhdGE9dm9pZCAwIT09ZS51c2VyRGF0YSYmbnVsbCE9PWUudXNlckRhdGE/bW8uZnJvbVBhcnRpYWwoZS51c2VyRGF0YSk6dm9pZCAwLGkucGVyc2lzdGVudFN0b3JlPXZvaWQgMCE9PWUucGVyc2lzdGVudFN0b3JlJiZudWxsIT09ZS5wZXJzaXN0ZW50U3RvcmU/U28uZnJvbVBhcnRpYWwoZS5wZXJzaXN0ZW50U3RvcmUpOnZvaWQgMCxpLmxhdW5jaFBhcmFtcz12b2lkIDAhPT1lLmxhdW5jaFBhcmFtcyYmbnVsbCE9PWUubGF1bmNoUGFyYW1zP2tvLmZyb21QYXJ0aWFsKGUubGF1bmNoUGFyYW1zKTp2b2lkIDAsaS5hcGlEZXNjcmlwdG9ycz0obnVsbD09PShyPWUuYXBpRGVzY3JpcHRvcnMpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLm1hcCgoZT0+ZSkpKXx8W10saX19O2Z1bmN0aW9uIFZvKGUpe3JldHVybiBudWxsIT1lfWJ0KCkudXRpbC5Mb25nIT09SXQoKSYmKGJ0KCkudXRpbC5Mb25nPUl0KCksYnQoKS5jb25maWd1cmUoKSk7Y29uc3QgR289ZT0+IShyZShlKXx8SG8oZSkpLEhvPWU9Pm9lKGUpJiYhTnVtYmVyLmlzTmFOKGUpJiZOdW1iZXIuaXNGaW5pdGUoZSksV289bmV3IFNldCxqbz1uZXcgU2V0O2xldCBabz1kb2N1bWVudC52aXNpYmlsaXR5U3RhdGUsem89ITEsS289ITE7ZnVuY3Rpb24gWW8oKXtLb3x8KEtvPSEwLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsKCgpPT57Y29uc3QgZT1cInZpc2libGVcIj09PVpvJiZcImhpZGRlblwiPT09ZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlP1dvOlwiaGlkZGVuXCI9PT1abyYmXCJ2aXNpYmxlXCI9PT1kb2N1bWVudC52aXNpYmlsaXR5U3RhdGU/am86bmV3IFNldDt6bz1kb2N1bWVudC52aXNpYmlsaXR5U3RhdGU7Zm9yKGNvbnN0IHQgb2YgZSl0cnl7dCgpfWNhdGNoKGUpe1wib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcImVycm9yXCIse2RldGFpbDplfSkpfVpvPXpvLHpvPSExfSkpKX1mdW5jdGlvbiBxbyhlKXtyZXR1cm4gZT09PXpvfWZ1bmN0aW9uIFhvKGUpe3JldHVybiBZbygpLFdvLmFkZChlKSwoKT0+V28uZGVsZXRlKGUpfWNsYXNzIFFve2NvbnN0cnVjdG9yKGUpe3RoaXMubWF0cml4PWV9fVFvLk1pcnJvclg9bmV3IFFvKFstMSwwLDAsMCwxLDAsMSwwLDFdKSxRby5NaXJyb3JZPW5ldyBRbyhbMSwwLDAsMCwtMSwwLDAsMSwxXSksUW8uSWRlbnRpdHk9bmV3IFFvKFsxLDAsMCwwLDEsMCwwLDAsMV0pO3ZhciBKbz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvPWFyZ3VtZW50cy5sZW5ndGgsYT1vPDM/dDpudWxsPT09cj9yPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTpyO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBSZWZsZWN0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKWE9UmVmbGVjdC5kZWNvcmF0ZShlLHQsbixyKTtlbHNlIGZvcih2YXIgcz1lLmxlbmd0aC0xO3M+PTA7cy0tKShpPWVbc10pJiYoYT0obzwzP2koYSk6bz4zP2kodCxuLGEpOmkodCxuKSl8fGEpO3JldHVybiBvPjMmJmEmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4sYSksYX0sJG89ZnVuY3Rpb24oZSx0KXtpZihcIm9iamVjdFwiPT10eXBlb2YgUmVmbGVjdCYmXCJmdW5jdGlvblwiPT10eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSlyZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShlLHQpfTtjb25zdCBlYT17Y2FtZXJhVHlwZTpcImZyb250XCIsZnBzTGltaXQ6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfSx0YT1lPT5uZXcgRXJyb3IoYCR7ZX0uIFRoaXMgQ2FtZXJhS2l0U291cmNlIGlzIG5vdCBhdHRhY2hlZCB0byBhIENhbWVyYUtpdFNlc3Npb24uYCk7Y2xhc3MgbmF7Y29uc3RydWN0b3IoZSx0PXt9LG49e30pe3RoaXMuc291cmNlSW5mbz1lLHRoaXMuc3Vic2NyaWJlcj10LHRoaXMuZGV2aWNlSW5mbz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZWEpLG4pfWF0dGFjaChlLHQpe3JldHVybiBmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24odCxpKXtmdW5jdGlvbiBvKGUpe3RyeXtzKHIubmV4dChlKSl9Y2F0Y2goZSl7aShlKX19ZnVuY3Rpb24gYShlKXt0cnl7cyhyLnRocm93KGUpKX1jYXRjaChlKXtpKGUpfX1mdW5jdGlvbiBzKGUpe3ZhciByO2UuZG9uZT90KGUudmFsdWUpOihyPWUudmFsdWUsciBpbnN0YW5jZW9mIG4/cjpuZXcgbigoZnVuY3Rpb24oZSl7ZShyKX0pKSkudGhlbihvLGEpfXMoKHI9ci5hcHBseShlLFtdKSkubmV4dCgpKX0pKX0odGhpcywwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYodGhpcy5sZW5zQ29yZSl0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgYXR0YWNoLiBUaGlzIENhbWVyYUtpdEN1c3RvbVNvdXJjZSBoYXMgYWxyZWFkeSBiZWVuIGF0dGFjaGVkIHRvIGEgQ2FtZXJhS2l0U2Vzc2lvbi4gVG8gcmUtYXR0YWNoLCBjcmVhdGUgYSBjb3B5IG9mIHRoaXMgQ2FtZXJhS2l0Q3VzdG9tU291cmNlLlwiKTt0aGlzLmxlbnNDb3JlPWUseWllbGQgbmV3IFByb21pc2UoKCh0LG4pPT57ZS51c2VNZWRpYUVsZW1lbnQoe2F1dG9wbGF5TmV3TWVkaWE6ITEsYXV0b3BsYXlQcmV2aWV3Q2FudmFzOiExLG1lZGlhOnRoaXMuc291cmNlSW5mby5tZWRpYSxwYXVzZUV4aXN0aW5nTWVkaWE6ITEscmVwbGF5VHJhY2tpbmdEYXRhOnRoaXMuc291cmNlSW5mby5yZXBsYXlUcmFja2luZ0RhdGEscmVxdWVzdFdlYmNhbTohMSxzdGFydE9uRnJvbnRDYW1lcmE6XCJmcm9udFwiPT09dGhpcy5kZXZpY2VJbmZvLmNhbWVyYVR5cGUsdXNlTWFudWFsRnJhbWVQcm9jZXNzaW5nOnRoaXMuc291cmNlSW5mby51c2VNYW51YWxGcmFtZVByb2Nlc3Npbmcsb25TdWNjZXNzOnQsb25GYWlsdXJlOm59KX0pKSx5aWVsZCBuZXcgUHJvbWlzZSgoKHQsbik9Pntjb25zdCByPXRoaXMuZGV2aWNlSW5mby5mcHNMaW1pdDxOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk/dGhpcy5kZXZpY2VJbmZvLmZwc0xpbWl0OjA7ZS5zZXRGUFNMaW1pdCh7ZnBzOnIsb25TdWNjZXNzOnQsb25GYWlsdXJlOm59KX0pKSx0aGlzLnN1YnNjcmliZXIub25BdHRhY2gmJih5aWVsZCB0aGlzLnN1YnNjcmliZXIub25BdHRhY2godGhpcyxlLHQpKX0pKX1jb3B5KGU9e30pe3JldHVybiBuZXcgbmEodGhpcy5zb3VyY2VJbmZvLHRoaXMuc3Vic2NyaWJlcixPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5kZXZpY2VJbmZvKSxlKSl9ZGV0YWNoKCl7cmV0dXJuIHRoaXMubGVuc0NvcmU/dGhpcy5zdWJzY3JpYmVyLm9uRGV0YWNoP3RoaXMuc3Vic2NyaWJlci5vbkRldGFjaCgpOnZvaWQgMDpQcm9taXNlLnJlamVjdCh0YShcIkNhbm5vdCBkZXRhY2hcIikpfXNldFJlbmRlclNpemUoZSx0KXtyZXR1cm4gbmV3IFByb21pc2UoKChuLHIpPT57aWYoIXRoaXMubGVuc0NvcmUpcmV0dXJuIHIodGEoXCJDYW5ub3Qgc2V0UmVuZGVyU2l6ZVwiKSk7Y29uc3QgaT17d2lkdGg6ZSxoZWlnaHQ6dH07dGhpcy5sZW5zQ29yZS5zZXRSZW5kZXJTaXplKHttb2RlOlwiZXhwbGljaXRcIix0YXJnZXQ6aSxvblN1Y2Nlc3M6bixvbkZhaWx1cmU6cn0pfSkpfXNldFRyYW5zZm9ybShlKXtyZXR1cm4gbmV3IFByb21pc2UoKCh0LG4pPT57aWYoIXRoaXMubGVuc0NvcmUpcmV0dXJuIG4odGEoXCJDYW5ub3Qgc2V0VHJhbnNmb3JtXCIpKTtjb25zdCByPW5ldyBGbG9hdDMyQXJyYXkoZS5tYXRyaXgpO3RoaXMubGVuc0NvcmUuc2V0SW5wdXRUcmFuc2Zvcm0oe21hdHJpeDpyLG9uU3VjY2Vzczp0LG9uRmFpbHVyZTpufSl9KSl9fUpvKFtudCwkbyhcImRlc2lnbjp0eXBlXCIsRnVuY3Rpb24pLCRvKFwiZGVzaWduOnBhcmFtdHlwZXNcIixbTnVtYmVyLE51bWJlcl0pLCRvKFwiZGVzaWduOnJldHVybnR5cGVcIixQcm9taXNlKV0sbmEucHJvdG90eXBlLFwic2V0UmVuZGVyU2l6ZVwiLG51bGwpLEpvKFtudCwkbyhcImRlc2lnbjp0eXBlXCIsRnVuY3Rpb24pLCRvKFwiZGVzaWduOnBhcmFtdHlwZXNcIixbUW9dKSwkbyhcImRlc2lnbjpyZXR1cm50eXBlXCIsUHJvbWlzZSldLG5hLnByb3RvdHlwZSxcInNldFRyYW5zZm9ybVwiLG51bGwpO2NvbnN0IHJhPXt0cmFuc2Zvcm06UW8uSWRlbnRpdHl9O2Z1bmN0aW9uIGlhKGUsdD17fSl7Y29uc3R7dHJhbnNmb3JtOm59PU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxyYSksdCkse3dpZHRoOnIsaGVpZ2h0Oml9PWUuZ2V0VmlkZW9UcmFja3MoKVswXS5nZXRTZXR0aW5ncygpO3JldHVybiBuZXcgbmEoe21lZGlhOmV9LHtvbkF0dGFjaDplPT5mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24odCxpKXtmdW5jdGlvbiBvKGUpe3RyeXtzKHIubmV4dChlKSl9Y2F0Y2goZSl7aShlKX19ZnVuY3Rpb24gYShlKXt0cnl7cyhyLnRocm93KGUpKX1jYXRjaChlKXtpKGUpfX1mdW5jdGlvbiBzKGUpe3ZhciByO2UuZG9uZT90KGUudmFsdWUpOihyPWUudmFsdWUsciBpbnN0YW5jZW9mIG4/cjpuZXcgbigoZnVuY3Rpb24oZSl7ZShyKX0pKSkudGhlbihvLGEpfXMoKHI9ci5hcHBseShlLFtdKSkubmV4dCgpKX0pKX0odGhpcywwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dm9pZCAwIT09ciYmdm9pZCAwIT09aSYmKHlpZWxkIGUuc2V0UmVuZGVyU2l6ZShyLGkpKSx5aWVsZCBlLnNldFRyYW5zZm9ybShuKX0pKX0sdCl9Y29uc3Qgb2E9e3RyYWNraW5nRGF0YTpuZXcgQXJyYXlCdWZmZXIoMCl9LGFhPXthdmdGcHM6MCxhdmVyYWdlUHJvY2Vzc2luZ1RpbWU6MCxwcm9jRnJhbWVDb3VudDowLHByb2NGcmFtZU1lYW46MCxwcm9jRnJhbWVEMjowfTtjbGFzcyBzYXtjb25zdHJ1Y3RvcihlKXt0aGlzLmxlbnNDb3JlPWUsdGhpcy5zdGF0ZT1PYmplY3QuYXNzaWduKHt9LGFhKSxuZXcgUHJvbWlzZSgoKGUsdCk9Pnt0aGlzLmxlbnNDb3JlLnNldE9uRnJhbWVQcm9jZXNzZWRDYWxsYmFjayh7b25GcmFtZVByb2Nlc3NlZDooe3Byb2Nlc3NpbmdUaW1lTXM6ZX0pPT57dGhpcy5jb21wdXRlUnVubmluZ1N0YXRzKGUpfSxvblN1Y2Nlc3M6ZSxvbkZhaWx1cmU6dH0pfSkpfWdldCBtZXRyaWNzKCl7cmV0dXJue2F2Z0Zwczp0aGlzLnN0YXRlLmF2Z0ZwcyxsZW5zRnJhbWVQcm9jZXNzaW5nVGltZU1zQXZnOnRoaXMuc3RhdGUucHJvY0ZyYW1lTWVhbixsZW5zRnJhbWVQcm9jZXNzaW5nVGltZU1zU3RkOk1hdGguc3FydCh0aGlzLnN0YXRlLnByb2NGcmFtZUQyL3RoaXMuc3RhdGUucHJvY0ZyYW1lQ291bnQpfX1yZXNldCgpe3RoaXMuc3RhdGU9T2JqZWN0LmFzc2lnbih7fSxhYSl9Y29tcHV0ZVJ1bm5pbmdTdGF0cyhlKXtjb25zdCB0PWUtdGhpcy5zdGF0ZS5wcm9jRnJhbWVNZWFuO3RoaXMuc3RhdGUucHJvY0ZyYW1lQ291bnQrPTEsdGhpcy5zdGF0ZS5wcm9jRnJhbWVNZWFuKz10L3RoaXMuc3RhdGUucHJvY0ZyYW1lQ291bnQ7Y29uc3Qgbj1lLXRoaXMuc3RhdGUucHJvY0ZyYW1lTWVhbjtpZih0aGlzLnN0YXRlLnByb2NGcmFtZUQyKz10Km4sdm9pZCAwPT09dGhpcy5wcmlvckZyYW1lQ29tcGxldGVkVGltZSl0aGlzLnByaW9yRnJhbWVDb21wbGV0ZWRUaW1lPXBlcmZvcm1hbmNlLm5vdygpO2Vsc2V7Y29uc3QgZT0ocGVyZm9ybWFuY2Uubm93KCktdGhpcy5wcmlvckZyYW1lQ29tcGxldGVkVGltZSkvMWUzO2U8MSYmKHRoaXMuc3RhdGUuYXZnRnBzPSh0aGlzLnN0YXRlLmF2Z0ZwcysxL2UpLzIpLHRoaXMucHJpb3JGcmFtZUNvbXBsZXRlZFRpbWU9cGVyZm9ybWFuY2Uubm93KCl9fX12YXIgY2E9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbz1hcmd1bWVudHMubGVuZ3RoLGE9bzwzP3Q6bnVsbD09PXI/cj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik6cjtpZihcIm9iamVjdFwiPT10eXBlb2YgUmVmbGVjdCYmXCJmdW5jdGlvblwiPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSlhPVJlZmxlY3QuZGVjb3JhdGUoZSx0LG4scik7ZWxzZSBmb3IodmFyIHM9ZS5sZW5ndGgtMTtzPj0wO3MtLSkoaT1lW3NdKSYmKGE9KG88Mz9pKGEpOm8+Mz9pKHQsbixhKTppKHQsbikpfHxhKTtyZXR1cm4gbz4zJiZhJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLGEpLGF9LGxhPWZ1bmN0aW9uKGUsdCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIFJlZmxlY3QmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFJlZmxlY3QubWV0YWRhdGEpcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoZSx0KX0sdWE9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXt0KG4scixlKX19LGRhPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIGEoZSl7dHJ5e2Moci5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBzKGUpe3RyeXtjKHIudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGMoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKGEscyl9Yygocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfTtmdW5jdGlvbiBmYShlKXtyZXR1cm5cImxpdmVcIj09PWV8fFwiY2FwdHVyZVwiPT09ZXx8XCJhbGxcIj09PWV8fHZvaWQgMD09PWV9Y2xhc3MgcGF7Y29uc3RydWN0b3IoZSx0LG4scixpLG8sYSl7dGhpcy5sZW5zQ29yZT1lLHRoaXMuZXZlbnRzPXQsdGhpcy5mZXRjaExlbnM9bix0aGlzLmxlbnNBc3NldHNQcm92aWRlcj1yLHRoaXMubGVuc1JlcG9zaXRvcnk9aSx0aGlzLmxlbnNDb250ZXh0PW8sdGhpcy5zdGF0ZVRhcmdldD1hO2NvbnN0IHM9dGhpcy5sZW5zQ29yZS5nZXRPdXRwdXRDYW52YXNlcygpO3RoaXMub3V0cHV0PXtsaXZlOnNbdGhpcy5sZW5zQ29yZS5DYW52YXNUeXBlLlByZXZpZXcudmFsdWVdLGNhcHR1cmU6c1t0aGlzLmxlbnNDb3JlLkNhbnZhc1R5cGUuQ2FwdHVyZS52YWx1ZV19LHRoaXMucGxheWluZz0hMSx0aGlzLmZyYW1lUHJvY2Vzc2luZ01ldHJpY3M9bmV3IHNhKHRoaXMubGVuc0NvcmUpLHRoaXMuc3RhdGVUYXJnZXQuZGlzcGF0Y2hFdmVudChuZXcgaG4oXCJzZXNzaW9uQ3JlYXRlZFwiLHt9KSk7Y29uc3QgYz1YbygoKCk9Pnt0aGlzLnN0YXRlVGFyZ2V0LmRpc3BhdGNoRXZlbnQobmV3IGhuKFwic2Vzc2lvblN1c3BlbmRlZFwiLHt9KSl9KSksbD0odT0oKT0+e3RoaXMuc3RhdGVUYXJnZXQuZGlzcGF0Y2hFdmVudChuZXcgaG4oXCJzZXNzaW9uUmVzdW1lZFwiLHt9KSl9LFlvKCksam8uYWRkKHUpLCgpPT5qby5kZWxldGUodSkpO3ZhciB1O3RoaXMucmVtb3ZlUGFnZVZpc2liaWxpdHlIYW5kbGVycz0oKT0+e2MoKSxsKCl9fWdldCBtZXRyaWNzKCl7cmV0dXJue2ZyYW1lczp0aGlzLmZyYW1lUHJvY2Vzc2luZ01ldHJpY3MubWV0cmljc319YXBwbHlMZW5zKGUsdCl7cmV0dXJuIGRhKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgbj10JiZmdW5jdGlvbihlKXtpZighY2UoZSl8fGUgaW5zdGFuY2VvZiBEYXRlKXRocm93IG5ldyBFcnJvcihcInNob3VsZCBiZSBhIHJlY29yZCA8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bWJlcltdPlwiKTtmb3IoY29uc3QgdCBvZiBPYmplY3QudmFsdWVzKGUpKWlmKEFycmF5LmlzQXJyYXkodCkpe2lmKCF0LmV2ZXJ5KHJlKSYmIXQuZXZlcnkoSG8pKXRocm93IG5ldyBFcnJvcihcIm9ubHkgbnVtYmVyLCBzdHJpbmcsIHN0cmluZ1tdLCBudW1iZXJbXSB2YWx1ZXMgYXJlIGFsbG93ZWRcIil9ZWxzZSBpZihHbyh0KSl0aHJvdyBuZXcgRXJyb3IoXCJvbmx5IG51bWJlciwgc3RyaW5nLCBzdHJpbmdbXSwgbnVtYmVyW10gdmFsdWVzIGFyZSBhbGxvd2VkXCIpO3JldHVybiEwfSh0KT8oZT0+Qm8uZW5jb2RlKEJvLmZyb21QYXJ0aWFsKHtsYXVuY2hQYXJhbXM6e2RhdGE6KG5ldyBUZXh0RW5jb2RlcikuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGUpKX19KSkuZmluaXNoKCkuc2xpY2UoKSkodCk6bnVsbDtyZXR1cm4geWllbGQgdGhpcy5yZW1vdmVMZW5zKCksbmV3IFByb21pc2UoKCh0LHIpPT5kYSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RyeXtjb25zdCBpPXQ9Pnt0aGlzLnN0YXRlVGFyZ2V0LmRpc3BhdGNoRXZlbnQobmV3IGhuKHQsZSkpLFwibGVuc1R1cm5lZE9mZlwiIT09dCYmXCJsZW5zVHVybmVkT25cIiE9PXR8fHNldFRpbWVvdXQoKCgpPT50aGlzLmZyYW1lUHJvY2Vzc2luZ01ldHJpY3MucmVzZXQoKSkpfTtpKFwibGVuc0FwcGx5U3RhcnRcIik7Y29uc3Qgbz10aGlzLmxlbnNSZXBvc2l0b3J5LmdldENhY2hlZExlbnMoZS5pZCk7aWYoIW8pcmV0dXJuIHIobmV3IEVycm9yKGBDYW5ub3QgYXBwbHkgbGVucyAke2UuaWR9LiBJdCBoYXMgbm90IGJlZW4gbG9hZGVkIGJ5IHRoZSBMZW5zIHJlcG9zaXRvcnkuIFVzZSBDYW1lcmFLaXQubGVuc2VzLnJlcG9zaXRvcnkubG9hZExlbnMgKG9yIGxvYWRMZW5zR3JvdXBzKSB0byBsb2FkIGxlbnMgbWV0YWRhdGEgYmVmb3JlIGNhbGxpbmcgQ2FtZXJhS2l0U2Vzc2lvbi5hcHBseUxlbnMuYCkpO2NvbnN0e2lkOmEsY29udGVudDpzfT1vO2lmKCFzKXJldHVybiByKG5ldyBFcnJvcihgQ2Fubm90IGFwcGx5IGxlbnMgJHtlLmlkfS4gTWV0YWRhdGEgcmV0cmlldmVkIGZvciB0aGlzIGxlbnMgZG9lcyBub3QgaW5jbHVkZSB0aGUgbGVucyBjb250ZW50IFVSTC5gKSk7dGhpcy51cGRhdGVMZW5zQ29udGV4dCh7YWN0aXZlTGVuczpvfSk7Y29uc3RbYyxbbF1dPXlpZWxkIFByb21pc2UuYWxsKFt0aGlzLmxlbnNBc3NldHNQcm92aWRlci5wcmVsb2FkTWFuaWZlc3REYXRhKHMuYXNzZXRNYW5pZmVzdCksdGhpcy5mZXRjaExlbnMoW25ldyBSZXF1ZXN0KHMubG5zVXJsQm9sdCkse3JlcXVlc3RUeXBlOlwibGVuc19jb250ZW50XCIsbGVuc0lkOmF9XSldKS5maW5hbGx5KCgoKT0+aShcImxlbnNEb3dubG9hZENvbXBsZXRlXCIpKSksdT17bGVuc0lkOmEsbGVuc0RhdGFCdWZmZXI6bCxsZW5zQ2hlY2tzdW06cy5sbnNTaGEyNTYsb25TdWNjZXNzOnQsb25GYWlsdXJlOmU9Pnt0aGlzLnJlbW92ZUxlbnMoKSxyKGUpLC9BdHRlbXB0aW5nIHRvIGFkZCBsZW5zIGZyb20gXFxTKiwgYnV0IGNoZWNrc3VtIHZhbGlkYXRpb24gZmFpbGVkLi8udGVzdChlLm1lc3NhZ2UpJiZpKFwibGVuc0NvbnRlbnRWYWxpZGF0aW9uRmFpbHVyZVwiKX0sb25UdXJuT246KCk9PmkoXCJsZW5zVHVybmVkT25cIiksb25UdXJuT2ZmOigpPT5pKFwibGVuc1R1cm5lZE9mZlwiKSxvblJlc291cmNlc0xvYWRlZDooKT0+aShcImxlbnNMb2FkZWRcIiksb25GaXJzdEZyYW1lUHJvY2Vzc2VkOigpPT5pKFwiZmlyc3RGcmFtZVByb2Nlc3NlZFwiKX07biYmKHUubGF1bmNoRGF0YT1uKSxpKFwibGVuc0luaXRpYXRlZFwiKSx0aGlzLmxlbnNDb3JlLmFkZExlbnModSl9Y2F0Y2goZSl7eWllbGQgdGhpcy5yZW1vdmVMZW5zKCkscihlKX19KSkpKX0pKX1yZW1vdmVMZW5zKCl7cmV0dXJuIGRhKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgbmV3IFByb21pc2UoKChlLHQpPT50aGlzLmxlbnNDb3JlLmNsZWFyQWxsTGVuc2VzKHtvblN1Y2Nlc3M6ZSxvbkZhaWx1cmU6dH0pKSksdGhpcy51cGRhdGVMZW5zQ29udGV4dCh7YWN0aXZlTGVuczp2b2lkIDB9KX0pKX1wbGF5KGU9XCJsaXZlXCIpe3JldHVybiBkYSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKHRoaXMucGxheWluZylyZXR1cm47dGhpcy5wbGF5aW5nPWU7Y29uc3QgdD10aGlzLnJlbmRlclRhcmdldFRvQ2FudmFzVHlwZShlKTtyZXR1cm4gbmV3IFByb21pc2UoKChlLG4pPT57dGhpcy5sZW5zQ29yZS5wbGF5Q2FudmFzKHt0eXBlOnQsb25SZWFkeTplLG9uRmFpbHVyZTplPT57dGhpcy5wbGF5aW5nPSExLG4oZSl9fSl9KSl9KSl9cGF1c2UoZT1cImFsbFwiKXtyZXR1cm4gZGEodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZighdGhpcy5wbGF5aW5nKXJldHVybjtjb25zdCB0PXRoaXMucGxheWluZzt0aGlzLnBsYXlpbmc9ITE7Y29uc3Qgbj10aGlzLnJlbmRlclRhcmdldFRvQ2FudmFzVHlwZShlKTtyZXR1cm4gbmV3IFByb21pc2UoKChlLHIpPT57dGhpcy5sZW5zQ29yZS5wYXVzZUNhbnZhcyh7dHlwZTpuLG9uU3VjY2VzczplLG9uRmFpbHVyZTplPT57dGhpcy5wbGF5aW5nPXQscihlKX19KX0pKX0pKX1zZXRTb3VyY2UoZSx0PXt9KXtyZXR1cm4gZGEodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnNhZmVseURldGFjaFNvdXJjZSgpO2NvbnN0IG49ZSBpbnN0YW5jZW9mIE1lZGlhU3RyZWFtP2lhKGUsdCk6ZSBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQ/ZnVuY3Rpb24oZSx0PXt9KXtjb25zdHt0cmFja2luZ0RhdGE6bn09T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG9hKSx0KSxyPW4uYnl0ZUxlbmd0aD4wP3tidWZmZXI6bn06dm9pZCAwO3JldHVybiBuZXcgbmEoe21lZGlhOmUscmVwbGF5VHJhY2tpbmdEYXRhOnJ9LHtvbkF0dGFjaDp0PT57Y29uc3RbbixyXT0wPT09ZS53aWR0aHx8MD09PWUuaGVpZ2h0P1tlLnZpZGVvV2lkdGgsZS52aWRlb0hlaWdodF06W2Uud2lkdGgsZS5oZWlnaHRdO3JldHVybiB0LnNldFJlbmRlclNpemUobixyKX19LHQpfShlLHQpOmUscj10aGlzLnBsYXlpbmc7cmV0dXJuIHRoaXMucGxheWluZz0hMSx5aWVsZCBuLmF0dGFjaCh0aGlzLmxlbnNDb3JlLChlPT57dGhpcy5ldmVudHMuZGlzcGF0Y2hFdmVudChuZXcgaG4oXCJlcnJvclwiLGUpKX0pKSx0aGlzLnNvdXJjZT1uLHImJih5aWVsZCB0aGlzLnBsYXkocikpLG59KSl9c2V0RlBTTGltaXQoZSl7cmV0dXJuIGRhKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1lPE51bWJlci5QT1NJVElWRV9JTkZJTklUWT9lOjA7cmV0dXJuIG5ldyBQcm9taXNlKCgoZSxuKT0+e3RoaXMubGVuc0NvcmUuc2V0RlBTTGltaXQoe2Zwczp0LG9uU3VjY2VzczplLG9uRmFpbHVyZTpufSl9KSl9KSl9ZGVzdHJveSgpe3JldHVybiBkYSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlTGVucygpLHlpZWxkIHRoaXMuc2FmZWx5RGV0YWNoU291cmNlKCkseWllbGQgbmV3IFByb21pc2UoKChlLHQpPT57dGhpcy5sZW5zQ29yZS50ZWFyZG93bih7b25TdWNjZXNzOmUsb25GYWlsdXJlOnR9KX0pKSx0aGlzLnJlbW92ZVBhZ2VWaXNpYmlsaXR5SGFuZGxlcnMoKSx0aGlzLnN0YXRlVGFyZ2V0LmRpc3BhdGNoRXZlbnQobmV3IGhuKFwic2Vzc2lvbkRlc3Ryb3llZFwiLHt9KSl9KSl9cmVuZGVyVGFyZ2V0VG9DYW52YXNUeXBlKGUpe3JldHVyblwibGl2ZVwiPT09ZT90aGlzLmxlbnNDb3JlLkNhbnZhc1R5cGUuUHJldmlldzpcImNhcHR1cmVcIj09PWU/dGhpcy5sZW5zQ29yZS5DYW52YXNUeXBlLkNhcHR1cmU6dGhpcy5sZW5zQ29yZS5DYW52YXNUeXBlLkFsbH1zYWZlbHlEZXRhY2hTb3VyY2UoKXtyZXR1cm4gZGEodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZih0aGlzLnNvdXJjZSl0cnl7eWllbGQgdGhpcy5zb3VyY2UuZGV0YWNoKCl9Y2F0Y2goZSl7dGhpcy5ldmVudHMuZGlzcGF0Y2hFdmVudChuZXcgaG4oXCJlcnJvclwiLFBlKG5ldyBFcnJvcihgRGV0YWNoaW5nIHByaW9yIHNvdXJjZSBvZiB0eXBlICR7dHlwZW9mIHRoaXMuc291cmNlfSBmYWlsZWQuYCksZSkpKX19KSl9dXBkYXRlTGVuc0NvbnRleHQoZSl7T2JqZWN0LmFzc2lnbih0aGlzLmxlbnNDb250ZXh0LGUpfX1jYShbbnQsdWEoMCx0dCgoZnVuY3Rpb24oZSl7cmV0dXJuIGNlKGUpJiZyZShlLmlkKSYmcmUoZS5uYW1lKSYmKHNlKGUuaWNvblVybCl8fHJlKGUuaWNvblVybCkpJiZjZShlLnZlbmRvckRhdGEpJiZ1ZShyZSkoZS52ZW5kb3JEYXRhKSYmcmUoZS5jYW1lcmFGYWNpbmdQcmVmZXJlbmNlKSYmKHNlKGUucHJldmlldyl8fGZ1bmN0aW9uKGUpe3JldHVybiBjZShlKSYmcmUoZS5pbWFnZVVybCl9KGUucHJldmlldykpfSkpKSxsYShcImRlc2lnbjp0eXBlXCIsRnVuY3Rpb24pLGxhKFwiZGVzaWduOnBhcmFtdHlwZXNcIixbT2JqZWN0LE9iamVjdF0pLGxhKFwiZGVzaWduOnJldHVybnR5cGVcIixQcm9taXNlKV0scGEucHJvdG90eXBlLFwiYXBwbHlMZW5zXCIsbnVsbCksY2EoW250LHVhKDAsdHQoZmEpKSxsYShcImRlc2lnbjp0eXBlXCIsRnVuY3Rpb24pLGxhKFwiZGVzaWduOnBhcmFtdHlwZXNcIixbU3RyaW5nXSksbGEoXCJkZXNpZ246cmV0dXJudHlwZVwiLFByb21pc2UpXSxwYS5wcm90b3R5cGUsXCJwbGF5XCIsbnVsbCksY2EoW250LHVhKDAsdHQoZmEpKSxsYShcImRlc2lnbjp0eXBlXCIsRnVuY3Rpb24pLGxhKFwiZGVzaWduOnBhcmFtdHlwZXNcIixbU3RyaW5nXSksbGEoXCJkZXNpZ246cmV0dXJudHlwZVwiLFByb21pc2UpXSxwYS5wcm90b3R5cGUsXCJwYXVzZVwiLG51bGwpLGNhKFtudCxsYShcImRlc2lnbjp0eXBlXCIsRnVuY3Rpb24pLGxhKFwiZGVzaWduOnBhcmFtdHlwZXNcIixbT2JqZWN0LE9iamVjdF0pLGxhKFwiZGVzaWduOnJldHVybnR5cGVcIixQcm9taXNlKV0scGEucHJvdG90eXBlLFwic2V0U291cmNlXCIsbnVsbCk7Y29uc3QgbWE9SihcIkNhbWVyYUtpdFNlc3Npb25cIixbd2UudG9rZW4sXCJldmVudFRhcmdldFwiLE5pLnRva2VuLEFlLnRva2VuLHNuLnRva2VuLFNuLnRva2VuLGJuLnRva2VuXSwoKGUsdCxuLHIsaSxvLGEpPT5uZXcgcGEoZSx0LG5ldyBmZShyKS5tYXAoKGU9PihbdCxuXSxyKT0+ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaShlKXt0cnl7YShyLm5leHQoZSkpfWNhdGNoKGUpe3QoZSl9fWZ1bmN0aW9uIG8oZSl7dHJ5e2Eoci50aHJvdyhlKSl9Y2F0Y2goZSl7dChlKX19ZnVuY3Rpb24gYSh0KXt2YXIgcjt0LmRvbmU/ZSh0LnZhbHVlKToocj10LnZhbHVlLHIgaW5zdGFuY2VvZiBuP3I6bmV3IG4oKGZ1bmN0aW9uKGUpe2Uocil9KSkpLnRoZW4oaSxvKX1hKChyPXIuYXBwbHkodm9pZCAwLFtdKSkubmV4dCgpKX0pKX0oMCwwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3R7cmVxdWVzdElkOml9PUVuKHtkaW1lbnNpb25zOm59KTt0cnl7Y29uc3Qgbz15aWVsZCBlKHQsciksYT1vLnN0YXR1cyxzPShlPT57aWYobnVsbD09ZSlyZXR1cm4gMDtjb25zdCB0PXBhcnNlSW50KGUpO3JldHVybiBpc05hTih0KT8wOnR9KShvLmhlYWRlcnMuZ2V0KFwiY29udGVudC1sZW5ndGhcIikpO3JldHVybiBfbih7cmVxdWVzdElkOmksZGltZW5zaW9uczpuLHN0YXR1czphLHNpemVCeXRlOnN9KSxvfWNhdGNoKGUpe3Rocm93IEluKHtyZXF1ZXN0SWQ6aSxkaW1lbnNpb25zOm4sZXJyb3I6TWUoZSl9KSxlfX0pKSkpLm1hcCh1aSgpKS5oYW5kbGVyLG4saSxvLGEpKSksaGE9XCI6Ly9cIjtmdW5jdGlvbiB2YShlKXtjb25zdCB0PWUuaW5kZXhPZihoYSk7cmV0dXJuW2Uuc2xpY2UoMCx0KSxlLnNsaWNlKHQraGEubGVuZ3RoKV19ZnVuY3Rpb24gZ2EoZSl7cmV0dXJuIHJlKGUpJiZlLmluY2x1ZGVzKGhhKX1mdW5jdGlvbiB5YShlKXtyZXR1cm4gY2UoZSkmJihnYShlLnVyaSl8fGFlKGdhLGUudXJpKSkmJmxlKGUuaGFuZGxlUmVxdWVzdCkmJihzZShlLmNhbmNlbFJlcXVlc3QpfHxsZShlLmNhbmNlbFJlcXVlc3QpKX1jb25zdCBFYT1KKFwiVXJpSGFuZGxlcnNcIiwoKCk9PltdKSksX2E9SihcIm1ldHJpY3NFdmVudFRhcmdldFwiLCgoKT0+bmV3IHZuKSk7dmFyIElhLFNhPW5ldyBVaW50OEFycmF5KDE2KTtmdW5jdGlvbiBiYSgpe2lmKCFJYSYmIShJYT1cInVuZGVmaW5lZFwiIT10eXBlb2YgY3J5cHRvJiZjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzJiZjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQoY3J5cHRvKXx8XCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1zQ3J5cHRvJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBtc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMmJm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKG1zQ3J5cHRvKSkpdGhyb3cgbmV3IEVycm9yKFwiY3J5cHRvLmdldFJhbmRvbVZhbHVlcygpIG5vdCBzdXBwb3J0ZWQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQjZ2V0cmFuZG9tdmFsdWVzLW5vdC1zdXBwb3J0ZWRcIik7cmV0dXJuIElhKFNhKX1jb25zdCBUYT0vXig/OlswLTlhLWZdezh9LVswLTlhLWZdezR9LVsxLTVdWzAtOWEtZl17M30tWzg5YWJdWzAtOWEtZl17M30tWzAtOWEtZl17MTJ9fDAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCkkL2k7Zm9yKHZhciBDYT1bXSxBYT0wO0FhPDI1NjsrK0FhKUNhLnB1c2goKEFhKzI1NikudG9TdHJpbmcoMTYpLnN1YnN0cigxKSk7Y29uc3QgUmE9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPShlPWV8fHt9KS5yYW5kb218fChlLnJuZ3x8YmEpKCk7aWYocls2XT0xNSZyWzZdfDY0LHJbOF09NjMmcls4XXwxMjgsdCl7bj1ufHwwO2Zvcih2YXIgaT0wO2k8MTY7KytpKXRbbitpXT1yW2ldO3JldHVybiB0fXJldHVybiBmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxuPShDYVtlW3QrMF1dK0NhW2VbdCsxXV0rQ2FbZVt0KzJdXStDYVtlW3QrM11dK1wiLVwiK0NhW2VbdCs0XV0rQ2FbZVt0KzVdXStcIi1cIitDYVtlW3QrNl1dK0NhW2VbdCs3XV0rXCItXCIrQ2FbZVt0KzhdXStDYVtlW3QrOV1dK1wiLVwiK0NhW2VbdCsxMF1dK0NhW2VbdCsxMV1dK0NhW2VbdCsxMl1dK0NhW2VbdCsxM11dK0NhW2VbdCsxNF1dK0NhW2VbdCsxNV1dKS50b0xvd2VyQ2FzZSgpO2lmKCFmdW5jdGlvbihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmVGEudGVzdChlKX0obikpdGhyb3cgVHlwZUVycm9yKFwiU3RyaW5naWZpZWQgVVVJRCBpcyBpbnZhbGlkXCIpO3JldHVybiBufShyKX0sa2E9KGUsdD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksbj0hMCk9Pntjb25zdCByPVtdO2xldCBpPTA7Y29uc3Qgbz1lPT5mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKGUpe3RyeXthKHIubmV4dChlKSl9Y2F0Y2goZSl7dChlKX19ZnVuY3Rpb24gbyhlKXt0cnl7YShyLnRocm93KGUpKX1jYXRjaChlKXt0KGUpfX1mdW5jdGlvbiBhKHQpe3ZhciByO3QuZG9uZT9lKHQudmFsdWUpOihyPXQudmFsdWUsciBpbnN0YW5jZW9mIG4/cjpuZXcgbigoZnVuY3Rpb24oZSl7ZShyKX0pKSkudGhlbihpLG8pfWEoKHI9ci5hcHBseSh1bmRlZmluZWQsW10pKS5uZXh0KCkpfSkpfSgwLDAsdm9pZCAwLChmdW5jdGlvbiooKXt0cnl7aSsrO2NvbnN0IHQ9ZS5tYXAoKTt0IGluc3RhbmNlb2YgUHJvbWlzZT9lLm5leHQoeWllbGQgdCk6dCYmZS5uZXh0KHQpfWNhdGNoKHQpe2UucmVqZWN0KHQpfWZpbmFsbHl7aS0tfWZvcig7ci5sZW5ndGg+MCYmaTx0OylvKHIuc2hpZnQoKSl9KSk7cmV0dXJuIG4mJlhvKCgoKT0+e2Zvcig7ci5sZW5ndGg+MDspbyhyLnNoaWZ0KCkpfSkpLG49PihhLHMpPT5uZXcgUHJvbWlzZSgoKGMsbCk9Pntjb25zdCB1PXttYXA6KCk9PmUoYSksbmV4dDplPT5uKGUscykudGhlbihjKS5jYXRjaChsKSxyZWplY3Q6bH07aTx0P28odSk6ci5wdXNoKHUpfSkpfTt2YXIgT2E9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShlKXt0cnl7YyhyLm5leHQoZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIHMoZSl7dHJ5e2Moci50aHJvdyhlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYyhlKXt2YXIgdDtlLmRvbmU/aShlLnZhbHVlKToodD1lLnZhbHVlLHQgaW5zdGFuY2VvZiBuP3Q6bmV3IG4oKGZ1bmN0aW9uKGUpe2UodCl9KSkpLnRoZW4oYSxzKX1jKChyPXIuYXBwbHkoZSx0fHxbXSkpLm5leHQoKSl9KSl9O2NvbnN0IE5hPSh7YmF0Y2hSZWR1Y2U6ZSxpc0JhdGNoQ29tcGxldGU6dCxtYXhCYXRjaEFnZTpuLGZsdXNoT25QYWdlSGlkZGVuOnJ9KT0+e2NvbnN0IGk9bnVsbD09cnx8cjtsZXQgbyxhLHM9KCk9Pnt9O2NvbnN0IGM9a2EoKHQ9Pk9hKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gYT15aWVsZCBlKGEsdCksYX0pKSksMSksbD0odCxuLHIpPT57Y29uc3QgaT1uP2UoYSxuKTphO2lmKCFpKXJldHVybjtjb25zdCBjPWkgaW5zdGFuY2VvZiBQcm9taXNlP2kudGhlbigoZT0+dChlLHIpKSkuY2F0Y2goKCgpPT57fSkpOnQoaSxyKS5jYXRjaCgoKCk9Pnt9KSk7cmV0dXJuIGE9dm9pZCAwLGNsZWFyVGltZW91dChvKSxzKCksY307cmV0dXJuIGU9PihyLHUpPT5PYSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoIXFvKFwiaGlkZGVuXCIpfHwhaSl7aWYodm9pZCAwPT09YSl7Y29uc3QgdD0oKT0+bChlLHZvaWQgMCx1KTt2b2lkIDAhPT1uJiYobz1zZXRUaW1lb3V0KHQsbikpLGkmJihzPVhvKHQpKX1yZXR1cm4gYygoKCk9Pk9hKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXthJiZ0KGEpJiYoeWllbGQgbChlLHZvaWQgMCx1KSl9KSkpKShyLHUpfXlpZWxkIGwoZSxyLHUpfSkpfSx3YT17ZnJvbVBhcnRpYWwoZSl7dmFyIHQsbixyLGksbyxhLHMsYyxsLHUsZCxmLHAsbSxoLHYsZyx5LEUsXyxJLFM7Y29uc3QgYj17ZXZlbnROYW1lOlwiXCIsc2VydmVyVHM6MCx1c2VySWQ6XCJcIix1c2VyQWdlbnQ6XCJcIixjb3VudHJ5OlwiXCIsY2l0eTpcIlwiLHJlZ2lvbjpcIlwiLGV2ZW50SWQ6XCJcIixpbnN0YW5jZUlkOlwiXCIsc2VxdWVuY2VJZDowLG9zVHlwZTpcIlwiLG9zVmVyc2lvbjpcIlwiLGFwcFZlcnNpb246XCJcIixhcHBCdWlsZDpcIlwiLHNlcnZlclVwbG9hZFRzOjAsZXZlbnRUaW1lOjAsc2VydmVyUmVjZWlwdFRpbWU6MCxtYXhTZXF1ZW5jZUlkT25JbnN0YW5jZTowLHVzZXJHdWlkOlwiXCIsY29sbGVjdGlvbjowLHNlcnZpY2VJZDpcIlwiLGFwcFR5cGU6MCxldmVudERhdGE6dm9pZCAwfTtyZXR1cm4gYi5ldmVudE5hbWU9bnVsbCE9PSh0PWUuZXZlbnROYW1lKSYmdm9pZCAwIT09dD90OlwiXCIsYi5zZXJ2ZXJUcz1udWxsIT09KG49ZS5zZXJ2ZXJUcykmJnZvaWQgMCE9PW4/bjowLGIudXNlcklkPW51bGwhPT0ocj1lLnVzZXJJZCkmJnZvaWQgMCE9PXI/cjpcIlwiLGIudXNlckFnZW50PW51bGwhPT0oaT1lLnVzZXJBZ2VudCkmJnZvaWQgMCE9PWk/aTpcIlwiLGIuY291bnRyeT1udWxsIT09KG89ZS5jb3VudHJ5KSYmdm9pZCAwIT09bz9vOlwiXCIsYi5jaXR5PW51bGwhPT0oYT1lLmNpdHkpJiZ2b2lkIDAhPT1hP2E6XCJcIixiLnJlZ2lvbj1udWxsIT09KHM9ZS5yZWdpb24pJiZ2b2lkIDAhPT1zP3M6XCJcIixiLmV2ZW50SWQ9bnVsbCE9PShjPWUuZXZlbnRJZCkmJnZvaWQgMCE9PWM/YzpcIlwiLGIuaW5zdGFuY2VJZD1udWxsIT09KGw9ZS5pbnN0YW5jZUlkKSYmdm9pZCAwIT09bD9sOlwiXCIsYi5zZXF1ZW5jZUlkPW51bGwhPT0odT1lLnNlcXVlbmNlSWQpJiZ2b2lkIDAhPT11P3U6MCxiLm9zVHlwZT1udWxsIT09KGQ9ZS5vc1R5cGUpJiZ2b2lkIDAhPT1kP2Q6XCJcIixiLm9zVmVyc2lvbj1udWxsIT09KGY9ZS5vc1ZlcnNpb24pJiZ2b2lkIDAhPT1mP2Y6XCJcIixiLmFwcFZlcnNpb249bnVsbCE9PShwPWUuYXBwVmVyc2lvbikmJnZvaWQgMCE9PXA/cDpcIlwiLGIuYXBwQnVpbGQ9bnVsbCE9PShtPWUuYXBwQnVpbGQpJiZ2b2lkIDAhPT1tP206XCJcIixiLnNlcnZlclVwbG9hZFRzPW51bGwhPT0oaD1lLnNlcnZlclVwbG9hZFRzKSYmdm9pZCAwIT09aD9oOjAsYi5ldmVudFRpbWU9bnVsbCE9PSh2PWUuZXZlbnRUaW1lKSYmdm9pZCAwIT09dj92OjAsYi5zZXJ2ZXJSZWNlaXB0VGltZT1udWxsIT09KGc9ZS5zZXJ2ZXJSZWNlaXB0VGltZSkmJnZvaWQgMCE9PWc/ZzowLGIubWF4U2VxdWVuY2VJZE9uSW5zdGFuY2U9bnVsbCE9PSh5PWUubWF4U2VxdWVuY2VJZE9uSW5zdGFuY2UpJiZ2b2lkIDAhPT15P3k6MCxiLnVzZXJHdWlkPW51bGwhPT0oRT1lLnVzZXJHdWlkKSYmdm9pZCAwIT09RT9FOlwiXCIsYi5jb2xsZWN0aW9uPW51bGwhPT0oXz1lLmNvbGxlY3Rpb24pJiZ2b2lkIDAhPT1fP186MCxiLnNlcnZpY2VJZD1udWxsIT09KEk9ZS5zZXJ2aWNlSWQpJiZ2b2lkIDAhPT1JP0k6XCJcIixiLmFwcFR5cGU9bnVsbCE9PShTPWUuYXBwVHlwZSkmJnZvaWQgMCE9PVM/UzowLGIuZXZlbnREYXRhPXZvaWQgMCE9PWUuZXZlbnREYXRhJiZudWxsIT09ZS5ldmVudERhdGE/RGEuZnJvbVBhcnRpYWwoZS5ldmVudERhdGEpOnZvaWQgMCxifX0sRGE9e2Zyb21QYXJ0aWFsKGUpe2NvbnN0IHQ9e2NhbWVyYUtpdEV4Y2VwdGlvbjp2b2lkIDAsY2FtZXJhS2l0TGVuc1NwaW46dm9pZCAwLGNhbWVyYUtpdEFzc2V0RG93bmxvYWQ6dm9pZCAwLGNhbWVyYUtpdExlbnNDb250ZW50VmFsaWRhdGlvbkZhaWxlZDp2b2lkIDAsY2FtZXJhS2l0TGVuc0Rvd25sb2FkOnZvaWQgMCxjYW1lcmFLaXRBc3NldFZhbGlkYXRpb25GYWlsZWQ6dm9pZCAwLGNhbWVyYUtpdFNlc3Npb246dm9pZCAwLGNhbWVyYUtpdFdlYkxlbnNTd2lwZTp2b2lkIDAsY2FtZXJhS2l0V2ViQmVuY2htYXJrQ29tcGxldGU6dm9pZCAwfTtyZXR1cm4gdC5jYW1lcmFLaXRFeGNlcHRpb249dm9pZCAwIT09ZS5jYW1lcmFLaXRFeGNlcHRpb24mJm51bGwhPT1lLmNhbWVyYUtpdEV4Y2VwdGlvbj9CYS5mcm9tUGFydGlhbChlLmNhbWVyYUtpdEV4Y2VwdGlvbik6dm9pZCAwLHQuY2FtZXJhS2l0TGVuc1NwaW49dm9pZCAwIT09ZS5jYW1lcmFLaXRMZW5zU3BpbiYmbnVsbCE9PWUuY2FtZXJhS2l0TGVuc1NwaW4/TGEuZnJvbVBhcnRpYWwoZS5jYW1lcmFLaXRMZW5zU3Bpbik6dm9pZCAwLHQuY2FtZXJhS2l0QXNzZXREb3dubG9hZD12b2lkIDAhPT1lLmNhbWVyYUtpdEFzc2V0RG93bmxvYWQmJm51bGwhPT1lLmNhbWVyYUtpdEFzc2V0RG93bmxvYWQ/RmEuZnJvbVBhcnRpYWwoZS5jYW1lcmFLaXRBc3NldERvd25sb2FkKTp2b2lkIDAsdC5jYW1lcmFLaXRMZW5zQ29udGVudFZhbGlkYXRpb25GYWlsZWQ9dm9pZCAwIT09ZS5jYW1lcmFLaXRMZW5zQ29udGVudFZhbGlkYXRpb25GYWlsZWQmJm51bGwhPT1lLmNhbWVyYUtpdExlbnNDb250ZW50VmFsaWRhdGlvbkZhaWxlZD9IYS5mcm9tUGFydGlhbChlLmNhbWVyYUtpdExlbnNDb250ZW50VmFsaWRhdGlvbkZhaWxlZCk6dm9pZCAwLHQuY2FtZXJhS2l0TGVuc0Rvd25sb2FkPXZvaWQgMCE9PWUuY2FtZXJhS2l0TGVuc0Rvd25sb2FkJiZudWxsIT09ZS5jYW1lcmFLaXRMZW5zRG93bmxvYWQ/eGEuZnJvbVBhcnRpYWwoZS5jYW1lcmFLaXRMZW5zRG93bmxvYWQpOnZvaWQgMCx0LmNhbWVyYUtpdEFzc2V0VmFsaWRhdGlvbkZhaWxlZD12b2lkIDAhPT1lLmNhbWVyYUtpdEFzc2V0VmFsaWRhdGlvbkZhaWxlZCYmbnVsbCE9PWUuY2FtZXJhS2l0QXNzZXRWYWxpZGF0aW9uRmFpbGVkP1dhLmZyb21QYXJ0aWFsKGUuY2FtZXJhS2l0QXNzZXRWYWxpZGF0aW9uRmFpbGVkKTp2b2lkIDAsdC5jYW1lcmFLaXRTZXNzaW9uPXZvaWQgMCE9PWUuY2FtZXJhS2l0U2Vzc2lvbiYmbnVsbCE9PWUuY2FtZXJhS2l0U2Vzc2lvbj9WYS5mcm9tUGFydGlhbChlLmNhbWVyYUtpdFNlc3Npb24pOnZvaWQgMCx0LmNhbWVyYUtpdFdlYkxlbnNTd2lwZT12b2lkIDAhPT1lLmNhbWVyYUtpdFdlYkxlbnNTd2lwZSYmbnVsbCE9PWUuY2FtZXJhS2l0V2ViTGVuc1N3aXBlP1VhLmZyb21QYXJ0aWFsKGUuY2FtZXJhS2l0V2ViTGVuc1N3aXBlKTp2b2lkIDAsdC5jYW1lcmFLaXRXZWJCZW5jaG1hcmtDb21wbGV0ZT12b2lkIDAhPT1lLmNhbWVyYUtpdFdlYkJlbmNobWFya0NvbXBsZXRlJiZudWxsIT09ZS5jYW1lcmFLaXRXZWJCZW5jaG1hcmtDb21wbGV0ZT9qYS5mcm9tUGFydGlhbChlLmNhbWVyYUtpdFdlYkJlbmNobWFya0NvbXBsZXRlKTp2b2lkIDAsdH19O3ZhciBQYSxNYTshZnVuY3Rpb24oZSl7ZVtlLklPU19OQVRJVkU9MF09XCJJT1NfTkFUSVZFXCIsZVtlLklPU19XRUJfREVTS1RPUD0xXT1cIklPU19XRUJfREVTS1RPUFwiLGVbZS5JT1NfV0VCX01PQklMRT0yXT1cIklPU19XRUJfTU9CSUxFXCIsZVtlLkFORFJPSURfTkFUSVZFPTNdPVwiQU5EUk9JRF9OQVRJVkVcIixlW2UuQU5EUk9JRF9XRUJfREVTS1RPUD00XT1cIkFORFJPSURfV0VCX0RFU0tUT1BcIixlW2UuQU5EUk9JRF9XRUJfTU9CSUxFPTVdPVwiQU5EUk9JRF9XRUJfTU9CSUxFXCIsZVtlLk9TWF9XRUJfREVTS1RPUD02XT1cIk9TWF9XRUJfREVTS1RPUFwiLGVbZS5PU1hfV0VCX01PQklMRT03XT1cIk9TWF9XRUJfTU9CSUxFXCIsZVtlLldJTkRPV1NfV0VCX0RFU0tUT1A9OF09XCJXSU5ET1dTX1dFQl9ERVNLVE9QXCIsZVtlLldJTkRPV1NfV0VCX01PQklMRT05XT1cIldJTkRPV1NfV0VCX01PQklMRVwiLGVbZS5MSU5VWF9XRUJfREVTS1RPUD0xMF09XCJMSU5VWF9XRUJfREVTS1RPUFwiLGVbZS5MSU5VWF9XRUJfTU9CSUxFPTExXT1cIkxJTlVYX1dFQl9NT0JJTEVcIixlW2UuTEVOU1NUVURJTz0xMl09XCJMRU5TU1RVRElPXCIsZVtlLlNOQVBDQU1FUkE9MTNdPVwiU05BUENBTUVSQVwiLGVbZS5XRUJfREVTS1RPUD0xNF09XCJXRUJfREVTS1RPUFwiLGVbZS5XRUJfTU9CSUxFPTE1XT1cIldFQl9NT0JJTEVcIixlW2UuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwifShQYXx8KFBhPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkNPTExFQ1RJT05fVU5VU0VEPTBdPVwiQ09MTEVDVElPTl9VTlVTRURcIixlW2UuR0FFPTFdPVwiR0FFXCIsZVtlLkdDRV9NPTJdPVwiR0NFX01cIixlW2UuR0NFX1M9M109XCJHQ0VfU1wiLGVbZS5HQ0VfVD00XT1cIkdDRV9UXCIsZVtlLkdLRV9NPTVdPVwiR0tFX01cIixlW2UuR0tFX1M9Nl09XCJHS0VfU1wiLGVbZS5HS0VfVD03XT1cIkdLRV9UXCIsZVtlLkxPQ0FMPThdPVwiTE9DQUxcIixlW2UuR0NFX1NUPTldPVwiR0NFX1NUXCIsZVtlLkdLRV9TVD0xMF09XCJHS0VfU1RcIixlW2UuR0NFX0M9MTFdPVwiR0NFX0NcIixlW2UuR0NFX1NDPTEyXT1cIkdDRV9TQ1wiLGVbZS5HQ0VfVEM9MTNdPVwiR0NFX1RDXCIsZVtlLkdDRV9UU0M9MTRdPVwiR0NFX1RTQ1wiLGVbZS5HS0VfQz0xNV09XCJHS0VfQ1wiLGVbZS5HS0VfU0M9MTZdPVwiR0tFX1NDXCIsZVtlLkdLRV9UQz0xN109XCJHS0VfVENcIixlW2UuR0tFX1RTQz0xOF09XCJHS0VfVFNDXCIsZVtlLkdLRV9XPTE5XT1cIkdLRV9XXCIsZVtlLkdLRV9XVD0yMF09XCJHS0VfV1RcIixlW2UuR0tFX1dDPTIxXT1cIkdLRV9XQ1wiLGVbZS5HS0VfV1NDPTIyXT1cIkdLRV9XU0NcIixlW2UuVU5SRUNPR05JWkVEPS0xXT1cIlVOUkVDT0dOSVpFRFwifShNYXx8KE1hPXt9KSk7Y29uc3QgTGE9e2Zyb21QYXJ0aWFsKGUpe3ZhciB0LG47Y29uc3Qgcj17Y2FtZXJhS2l0RXZlbnRCYXNlOnZvaWQgMCxsZW5zSWQ6XCJcIix2aWV3VGltZVNlYzowfTtyZXR1cm4gci5jYW1lcmFLaXRFdmVudEJhc2U9dm9pZCAwIT09ZS5jYW1lcmFLaXRFdmVudEJhc2UmJm51bGwhPT1lLmNhbWVyYUtpdEV2ZW50QmFzZT9aYS5mcm9tUGFydGlhbChlLmNhbWVyYUtpdEV2ZW50QmFzZSk6dm9pZCAwLHIubGVuc0lkPW51bGwhPT0odD1lLmxlbnNJZCkmJnZvaWQgMCE9PXQ/dDpcIlwiLHIudmlld1RpbWVTZWM9bnVsbCE9PShuPWUudmlld1RpbWVTZWMpJiZ2b2lkIDAhPT1uP246MCxyfX0sVWE9e2Zyb21QYXJ0aWFsKGUpe3ZhciB0LG4scixpLG8sYSxzLGMsbCx1LGQ7Y29uc3QgZj17Y2FtZXJhS2l0RXZlbnRCYXNlOnZvaWQgMCxwZXJmb3JtYW5jZUNsdXN0ZXI6MCx3ZWJnbFJlbmRlcmVySW5mbzpcIlwiLGxlbnNJZDpcIlwiLGxlbnNGcmFtZVByb2Nlc3NpbmdUaW1lTXNBdmc6MCxsZW5zRnJhbWVQcm9jZXNzaW5nVGltZU1zU3RkOjAsdmlld1RpbWVTZWM6MCxyZWNvcmRpbmdUaW1lU2VjOjAsYXBwbHlEZWxheVNlYzowLGF2Z0ZwczowLGlzTGVuc0ZpcnN0V2l0aGluRGF5OiExLGlzTGVuc0ZpcnN0V2l0aGluTW9udGg6ITF9O3JldHVybiBmLmNhbWVyYUtpdEV2ZW50QmFzZT12b2lkIDAhPT1lLmNhbWVyYUtpdEV2ZW50QmFzZSYmbnVsbCE9PWUuY2FtZXJhS2l0RXZlbnRCYXNlP1phLmZyb21QYXJ0aWFsKGUuY2FtZXJhS2l0RXZlbnRCYXNlKTp2b2lkIDAsZi5wZXJmb3JtYW5jZUNsdXN0ZXI9bnVsbCE9PSh0PWUucGVyZm9ybWFuY2VDbHVzdGVyKSYmdm9pZCAwIT09dD90OjAsZi53ZWJnbFJlbmRlcmVySW5mbz1udWxsIT09KG49ZS53ZWJnbFJlbmRlcmVySW5mbykmJnZvaWQgMCE9PW4/bjpcIlwiLGYubGVuc0lkPW51bGwhPT0ocj1lLmxlbnNJZCkmJnZvaWQgMCE9PXI/cjpcIlwiLGYubGVuc0ZyYW1lUHJvY2Vzc2luZ1RpbWVNc0F2Zz1udWxsIT09KGk9ZS5sZW5zRnJhbWVQcm9jZXNzaW5nVGltZU1zQXZnKSYmdm9pZCAwIT09aT9pOjAsZi5sZW5zRnJhbWVQcm9jZXNzaW5nVGltZU1zU3RkPW51bGwhPT0obz1lLmxlbnNGcmFtZVByb2Nlc3NpbmdUaW1lTXNTdGQpJiZ2b2lkIDAhPT1vP286MCxmLnZpZXdUaW1lU2VjPW51bGwhPT0oYT1lLnZpZXdUaW1lU2VjKSYmdm9pZCAwIT09YT9hOjAsZi5yZWNvcmRpbmdUaW1lU2VjPW51bGwhPT0ocz1lLnJlY29yZGluZ1RpbWVTZWMpJiZ2b2lkIDAhPT1zP3M6MCxmLmFwcGx5RGVsYXlTZWM9bnVsbCE9PShjPWUuYXBwbHlEZWxheVNlYykmJnZvaWQgMCE9PWM/YzowLGYuYXZnRnBzPW51bGwhPT0obD1lLmF2Z0ZwcykmJnZvaWQgMCE9PWw/bDowLGYuaXNMZW5zRmlyc3RXaXRoaW5EYXk9bnVsbCE9PSh1PWUuaXNMZW5zRmlyc3RXaXRoaW5EYXkpJiZ2b2lkIDAhPT11JiZ1LGYuaXNMZW5zRmlyc3RXaXRoaW5Nb250aD1udWxsIT09KGQ9ZS5pc0xlbnNGaXJzdFdpdGhpbk1vbnRoKSYmdm9pZCAwIT09ZCYmZCxmfX0seGE9e2Zyb21QYXJ0aWFsKGUpe3ZhciB0LG4scixpO2NvbnN0IG89e2NhbWVyYUtpdEV2ZW50QmFzZTp2b2lkIDAsbGVuc0lkOlwiXCIsYXV0b21hdGljRG93bmxvYWQ6ITEsZG93bmxvYWRUaW1lU2VjOjAsc2l6ZUJ5dGU6MH07cmV0dXJuIG8uY2FtZXJhS2l0RXZlbnRCYXNlPXZvaWQgMCE9PWUuY2FtZXJhS2l0RXZlbnRCYXNlJiZudWxsIT09ZS5jYW1lcmFLaXRFdmVudEJhc2U/WmEuZnJvbVBhcnRpYWwoZS5jYW1lcmFLaXRFdmVudEJhc2UpOnZvaWQgMCxvLmxlbnNJZD1udWxsIT09KHQ9ZS5sZW5zSWQpJiZ2b2lkIDAhPT10P3Q6XCJcIixvLmF1dG9tYXRpY0Rvd25sb2FkPW51bGwhPT0obj1lLmF1dG9tYXRpY0Rvd25sb2FkKSYmdm9pZCAwIT09biYmbixvLmRvd25sb2FkVGltZVNlYz1udWxsIT09KHI9ZS5kb3dubG9hZFRpbWVTZWMpJiZ2b2lkIDAhPT1yP3I6MCxvLnNpemVCeXRlPW51bGwhPT0oaT1lLnNpemVCeXRlKSYmdm9pZCAwIT09aT9pOjAsb319LEZhPXtmcm9tUGFydGlhbChlKXt2YXIgdCxuLHIsaTtjb25zdCBvPXtjYW1lcmFLaXRFdmVudEJhc2U6dm9pZCAwLGF1dG9tYXRpY0Rvd25sb2FkOiExLGRvd25sb2FkVGltZVNlYzowLHNpemVCeXRlOjAsYXNzZXRJZDpcIlwifTtyZXR1cm4gby5jYW1lcmFLaXRFdmVudEJhc2U9dm9pZCAwIT09ZS5jYW1lcmFLaXRFdmVudEJhc2UmJm51bGwhPT1lLmNhbWVyYUtpdEV2ZW50QmFzZT9aYS5mcm9tUGFydGlhbChlLmNhbWVyYUtpdEV2ZW50QmFzZSk6dm9pZCAwLG8uYXV0b21hdGljRG93bmxvYWQ9bnVsbCE9PSh0PWUuYXV0b21hdGljRG93bmxvYWQpJiZ2b2lkIDAhPT10JiZ0LG8uZG93bmxvYWRUaW1lU2VjPW51bGwhPT0obj1lLmRvd25sb2FkVGltZVNlYykmJnZvaWQgMCE9PW4/bjowLG8uc2l6ZUJ5dGU9bnVsbCE9PShyPWUuc2l6ZUJ5dGUpJiZ2b2lkIDAhPT1yP3I6MCxvLmFzc2V0SWQ9bnVsbCE9PShpPWUuYXNzZXRJZCkmJnZvaWQgMCE9PWk/aTpcIlwiLG99fSxCYT17ZnJvbVBhcnRpYWwoZSl7dmFyIHQsbixyO2NvbnN0IGk9e2NhbWVyYUtpdEV2ZW50QmFzZTp2b2lkIDAsbGVuc0lkOlwiXCIsdHlwZTpcIlwiLHJlYXNvbjpcIlwifTtyZXR1cm4gaS5jYW1lcmFLaXRFdmVudEJhc2U9dm9pZCAwIT09ZS5jYW1lcmFLaXRFdmVudEJhc2UmJm51bGwhPT1lLmNhbWVyYUtpdEV2ZW50QmFzZT9aYS5mcm9tUGFydGlhbChlLmNhbWVyYUtpdEV2ZW50QmFzZSk6dm9pZCAwLGkubGVuc0lkPW51bGwhPT0odD1lLmxlbnNJZCkmJnZvaWQgMCE9PXQ/dDpcIlwiLGkudHlwZT1udWxsIT09KG49ZS50eXBlKSYmdm9pZCAwIT09bj9uOlwiXCIsaS5yZWFzb249bnVsbCE9PShyPWUucmVhc29uKSYmdm9pZCAwIT09cj9yOlwiXCIsaX19LFZhPXtmcm9tUGFydGlhbChlKXt2YXIgdCxuLHIsaSxvO2NvbnN0IGE9e2NhbWVyYUtpdEV2ZW50QmFzZTp2b2lkIDAsZGFpbHlTZXNzaW9uQnVja2V0OjAsaXNGaXJzdFdpdGhpbk1vbnRoOiExLGRheTowLG1vbnRoOjAseWVhcjowfTtyZXR1cm4gYS5jYW1lcmFLaXRFdmVudEJhc2U9dm9pZCAwIT09ZS5jYW1lcmFLaXRFdmVudEJhc2UmJm51bGwhPT1lLmNhbWVyYUtpdEV2ZW50QmFzZT9aYS5mcm9tUGFydGlhbChlLmNhbWVyYUtpdEV2ZW50QmFzZSk6dm9pZCAwLGEuZGFpbHlTZXNzaW9uQnVja2V0PW51bGwhPT0odD1lLmRhaWx5U2Vzc2lvbkJ1Y2tldCkmJnZvaWQgMCE9PXQ/dDowLGEuaXNGaXJzdFdpdGhpbk1vbnRoPW51bGwhPT0obj1lLmlzRmlyc3RXaXRoaW5Nb250aCkmJnZvaWQgMCE9PW4mJm4sYS5kYXk9bnVsbCE9PShyPWUuZGF5KSYmdm9pZCAwIT09cj9yOjAsYS5tb250aD1udWxsIT09KGk9ZS5tb250aCkmJnZvaWQgMCE9PWk/aTowLGEueWVhcj1udWxsIT09KG89ZS55ZWFyKSYmdm9pZCAwIT09bz9vOjAsYX19O3ZhciBHYTshZnVuY3Rpb24oZSl7ZVtlLk5PX1NFU1NJT05fQlVDS0VUPTBdPVwiTk9fU0VTU0lPTl9CVUNLRVRcIixlW2UuT05FX1NFU1NJT049MV09XCJPTkVfU0VTU0lPTlwiLGVbZS5UV09fU0VTU0lPTj0yXT1cIlRXT19TRVNTSU9OXCIsZVtlLlRIUkVFX1NFU1NJT049M109XCJUSFJFRV9TRVNTSU9OXCIsZVtlLkZPVVJfU0VTU0lPTj00XT1cIkZPVVJfU0VTU0lPTlwiLGVbZS5GSVZFX1NFU1NJT049NV09XCJGSVZFX1NFU1NJT05cIixlW2UuU0lYX1NFU1NJT049Nl09XCJTSVhfU0VTU0lPTlwiLGVbZS5TRVZFTl9TRVNTSU9OPTddPVwiU0VWRU5fU0VTU0lPTlwiLGVbZS5FSUdIVF9TRVNTSU9OPThdPVwiRUlHSFRfU0VTU0lPTlwiLGVbZS5OSU5FX1NFU1NJT049OV09XCJOSU5FX1NFU1NJT05cIixlW2UuVEVOX09SX01PUkVfU0VTU0lPTj0xMF09XCJURU5fT1JfTU9SRV9TRVNTSU9OXCIsZVtlLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIn0oR2F8fChHYT17fSkpO2NvbnN0IEhhPXtmcm9tUGFydGlhbChlKXt2YXIgdDtjb25zdCBuPXtjYW1lcmFLaXRFdmVudEJhc2U6dm9pZCAwLGxlbnNJZDpcIlwifTtyZXR1cm4gbi5jYW1lcmFLaXRFdmVudEJhc2U9dm9pZCAwIT09ZS5jYW1lcmFLaXRFdmVudEJhc2UmJm51bGwhPT1lLmNhbWVyYUtpdEV2ZW50QmFzZT9aYS5mcm9tUGFydGlhbChlLmNhbWVyYUtpdEV2ZW50QmFzZSk6dm9pZCAwLG4ubGVuc0lkPW51bGwhPT0odD1lLmxlbnNJZCkmJnZvaWQgMCE9PXQ/dDpcIlwiLG59fSxXYT17ZnJvbVBhcnRpYWwoZSl7dmFyIHQ7Y29uc3Qgbj17Y2FtZXJhS2l0RXZlbnRCYXNlOnZvaWQgMCxhc3NldElkOlwiXCJ9O3JldHVybiBuLmNhbWVyYUtpdEV2ZW50QmFzZT12b2lkIDAhPT1lLmNhbWVyYUtpdEV2ZW50QmFzZSYmbnVsbCE9PWUuY2FtZXJhS2l0RXZlbnRCYXNlP1phLmZyb21QYXJ0aWFsKGUuY2FtZXJhS2l0RXZlbnRCYXNlKTp2b2lkIDAsbi5hc3NldElkPW51bGwhPT0odD1lLmFzc2V0SWQpJiZ2b2lkIDAhPT10P3Q6XCJcIixufX0samE9e2Zyb21QYXJ0aWFsKGUpe3ZhciB0LG4scixpO2NvbnN0IG89e2NhbWVyYUtpdEV2ZW50QmFzZTp2b2lkIDAsYmVuY2htYXJrTmFtZTpcIlwiLGJlbmNobWFya1ZhbHVlOjAscGVyZm9ybWFuY2VDbHVzdGVyOjAsd2ViZ2xSZW5kZXJlckluZm86XCJcIn07cmV0dXJuIG8uY2FtZXJhS2l0RXZlbnRCYXNlPXZvaWQgMCE9PWUuY2FtZXJhS2l0RXZlbnRCYXNlJiZudWxsIT09ZS5jYW1lcmFLaXRFdmVudEJhc2U/WmEuZnJvbVBhcnRpYWwoZS5jYW1lcmFLaXRFdmVudEJhc2UpOnZvaWQgMCxvLmJlbmNobWFya05hbWU9bnVsbCE9PSh0PWUuYmVuY2htYXJrTmFtZSkmJnZvaWQgMCE9PXQ/dDpcIlwiLG8uYmVuY2htYXJrVmFsdWU9bnVsbCE9PShuPWUuYmVuY2htYXJrVmFsdWUpJiZ2b2lkIDAhPT1uP246MCxvLnBlcmZvcm1hbmNlQ2x1c3Rlcj1udWxsIT09KHI9ZS5wZXJmb3JtYW5jZUNsdXN0ZXIpJiZ2b2lkIDAhPT1yP3I6MCxvLndlYmdsUmVuZGVyZXJJbmZvPW51bGwhPT0oaT1lLndlYmdsUmVuZGVyZXJJbmZvKSYmdm9pZCAwIT09aT9pOlwiXCIsb319LFphPXtmcm9tUGFydGlhbChlKXt2YXIgdCxuLHIsaSxvLGEscyxjLGwsdSxkO2NvbnN0IGY9e2tpdEV2ZW50QmFzZTp2b2lkIDAsZGV2aWNlQ2x1c3RlcjowLGNhbWVyYUtpdFZlcnNpb246XCJcIixsZW5zQ29yZVZlcnNpb246XCJcIixkZXZpY2VNb2RlbDpcIlwiLGNhbWVyYUtpdFZhcmlhbnQ6MCxjYW1lcmFLaXRGbGF2b3I6MCxhcHBJZDpcIlwiLGRldmljZUNvbm5lY3Rpdml0eTowLHNlc3Npb25JZDpcIlwiLGFwcFZlbmRvclV1aWQ6XCJcIixyYW5raW5nUmVxdWVzdElkOlwiXCJ9O3JldHVybiBmLmtpdEV2ZW50QmFzZT12b2lkIDAhPT1lLmtpdEV2ZW50QmFzZSYmbnVsbCE9PWUua2l0RXZlbnRCYXNlP3phLmZyb21QYXJ0aWFsKGUua2l0RXZlbnRCYXNlKTp2b2lkIDAsZi5kZXZpY2VDbHVzdGVyPW51bGwhPT0odD1lLmRldmljZUNsdXN0ZXIpJiZ2b2lkIDAhPT10P3Q6MCxmLmNhbWVyYUtpdFZlcnNpb249bnVsbCE9PShuPWUuY2FtZXJhS2l0VmVyc2lvbikmJnZvaWQgMCE9PW4/bjpcIlwiLGYubGVuc0NvcmVWZXJzaW9uPW51bGwhPT0ocj1lLmxlbnNDb3JlVmVyc2lvbikmJnZvaWQgMCE9PXI/cjpcIlwiLGYuZGV2aWNlTW9kZWw9bnVsbCE9PShpPWUuZGV2aWNlTW9kZWwpJiZ2b2lkIDAhPT1pP2k6XCJcIixmLmNhbWVyYUtpdFZhcmlhbnQ9bnVsbCE9PShvPWUuY2FtZXJhS2l0VmFyaWFudCkmJnZvaWQgMCE9PW8/bzowLGYuY2FtZXJhS2l0Rmxhdm9yPW51bGwhPT0oYT1lLmNhbWVyYUtpdEZsYXZvcikmJnZvaWQgMCE9PWE/YTowLGYuYXBwSWQ9bnVsbCE9PShzPWUuYXBwSWQpJiZ2b2lkIDAhPT1zP3M6XCJcIixmLmRldmljZUNvbm5lY3Rpdml0eT1udWxsIT09KGM9ZS5kZXZpY2VDb25uZWN0aXZpdHkpJiZ2b2lkIDAhPT1jP2M6MCxmLnNlc3Npb25JZD1udWxsIT09KGw9ZS5zZXNzaW9uSWQpJiZ2b2lkIDAhPT1sP2w6XCJcIixmLmFwcFZlbmRvclV1aWQ9bnVsbCE9PSh1PWUuYXBwVmVuZG9yVXVpZCkmJnZvaWQgMCE9PXU/dTpcIlwiLGYucmFua2luZ1JlcXVlc3RJZD1udWxsIT09KGQ9ZS5yYW5raW5nUmVxdWVzdElkKSYmdm9pZCAwIT09ZD9kOlwiXCIsZn19LHphPXtmcm9tUGFydGlhbChlKXt2YXIgdCxuLHIsaSxvLGEscyxjLGwsdSxkLGYscCxtLGgsdixnLHksRTtjb25zdCBfPXtvYXV0aENsaWVudElkOlwiXCIsbG9jYWxlOlwiXCIsa2l0VXNlckFnZW50OlwiXCIsaXBBZGRyZXNzOlwiXCIsb3NNaW5vclZlcnNpb246XCJcIixraXRWYXJpYW50OjAsa2l0VmFyaWFudFZlcnNpb246XCJcIixraXRDbGllbnRUaW1lc3RhbXBNaWxsaXM6MCxjbGllbnRTZXF1ZW5jZUlkOjAsbWF4Q2xpZW50U2VxdWVuY2VJZE9uSW5zdGFuY2U6MCx0YXJnZXRBcmNoaXRlY3R1cmU6XCJcIixydW5uaW5nV2l0aERlYnVnZ2VyQXR0YWNoZWQ6ITEscnVubmluZ0luVGVzdHM6ITEscnVubmluZ0luU2ltdWxhdG9yOiExLGlzQXBwUHJlcmVsZWFzZTohMSxraXRBcHBJZDpcIlwiLGtpdFNlc3Npb25JZDpcIlwiLGtpdFBsdWdpblR5cGU6MCxpc0Zyb21SZWFjdE5hdGl2ZVBsdWdpbjohMX07cmV0dXJuIF8ub2F1dGhDbGllbnRJZD1udWxsIT09KHQ9ZS5vYXV0aENsaWVudElkKSYmdm9pZCAwIT09dD90OlwiXCIsXy5sb2NhbGU9bnVsbCE9PShuPWUubG9jYWxlKSYmdm9pZCAwIT09bj9uOlwiXCIsXy5raXRVc2VyQWdlbnQ9bnVsbCE9PShyPWUua2l0VXNlckFnZW50KSYmdm9pZCAwIT09cj9yOlwiXCIsXy5pcEFkZHJlc3M9bnVsbCE9PShpPWUuaXBBZGRyZXNzKSYmdm9pZCAwIT09aT9pOlwiXCIsXy5vc01pbm9yVmVyc2lvbj1udWxsIT09KG89ZS5vc01pbm9yVmVyc2lvbikmJnZvaWQgMCE9PW8/bzpcIlwiLF8ua2l0VmFyaWFudD1udWxsIT09KGE9ZS5raXRWYXJpYW50KSYmdm9pZCAwIT09YT9hOjAsXy5raXRWYXJpYW50VmVyc2lvbj1udWxsIT09KHM9ZS5raXRWYXJpYW50VmVyc2lvbikmJnZvaWQgMCE9PXM/czpcIlwiLF8ua2l0Q2xpZW50VGltZXN0YW1wTWlsbGlzPW51bGwhPT0oYz1lLmtpdENsaWVudFRpbWVzdGFtcE1pbGxpcykmJnZvaWQgMCE9PWM/YzowLF8uY2xpZW50U2VxdWVuY2VJZD1udWxsIT09KGw9ZS5jbGllbnRTZXF1ZW5jZUlkKSYmdm9pZCAwIT09bD9sOjAsXy5tYXhDbGllbnRTZXF1ZW5jZUlkT25JbnN0YW5jZT1udWxsIT09KHU9ZS5tYXhDbGllbnRTZXF1ZW5jZUlkT25JbnN0YW5jZSkmJnZvaWQgMCE9PXU/dTowLF8udGFyZ2V0QXJjaGl0ZWN0dXJlPW51bGwhPT0oZD1lLnRhcmdldEFyY2hpdGVjdHVyZSkmJnZvaWQgMCE9PWQ/ZDpcIlwiLF8ucnVubmluZ1dpdGhEZWJ1Z2dlckF0dGFjaGVkPW51bGwhPT0oZj1lLnJ1bm5pbmdXaXRoRGVidWdnZXJBdHRhY2hlZCkmJnZvaWQgMCE9PWYmJmYsXy5ydW5uaW5nSW5UZXN0cz1udWxsIT09KHA9ZS5ydW5uaW5nSW5UZXN0cykmJnZvaWQgMCE9PXAmJnAsXy5ydW5uaW5nSW5TaW11bGF0b3I9bnVsbCE9PShtPWUucnVubmluZ0luU2ltdWxhdG9yKSYmdm9pZCAwIT09bSYmbSxfLmlzQXBwUHJlcmVsZWFzZT1udWxsIT09KGg9ZS5pc0FwcFByZXJlbGVhc2UpJiZ2b2lkIDAhPT1oJiZoLF8ua2l0QXBwSWQ9bnVsbCE9PSh2PWUua2l0QXBwSWQpJiZ2b2lkIDAhPT12P3Y6XCJcIixfLmtpdFNlc3Npb25JZD1udWxsIT09KGc9ZS5raXRTZXNzaW9uSWQpJiZ2b2lkIDAhPT1nP2c6XCJcIixfLmtpdFBsdWdpblR5cGU9bnVsbCE9PSh5PWUua2l0UGx1Z2luVHlwZSkmJnZvaWQgMCE9PXk/eTowLF8uaXNGcm9tUmVhY3ROYXRpdmVQbHVnaW49bnVsbCE9PShFPWUuaXNGcm9tUmVhY3ROYXRpdmVQbHVnaW4pJiZ2b2lkIDAhPT1FJiZFLF99fTt2YXIgS2EsWWEscWEsWGEsUWE7IWZ1bmN0aW9uKGUpe2VbZS5DQU1FUkFfS0lUX0NPTk5FQ1RJVklUWV9UWVBFX1VOS05PV049MF09XCJDQU1FUkFfS0lUX0NPTk5FQ1RJVklUWV9UWVBFX1VOS05PV05cIixlW2UuQ0FNRVJBX0tJVF9DT05ORUNUSVZJVFlfVFlQRV9XSUZJPTFdPVwiQ0FNRVJBX0tJVF9DT05ORUNUSVZJVFlfVFlQRV9XSUZJXCIsZVtlLkNBTUVSQV9LSVRfQ09OTkVDVElWSVRZX1RZUEVfTU9CSUxFPTJdPVwiQ0FNRVJBX0tJVF9DT05ORUNUSVZJVFlfVFlQRV9NT0JJTEVcIixlW2UuQ0FNRVJBX0tJVF9DT05ORUNUSVZJVFlfVFlQRV9VTlJFQUNIQUJMRT0zXT1cIkNBTUVSQV9LSVRfQ09OTkVDVElWSVRZX1RZUEVfVU5SRUFDSEFCTEVcIixlW2UuQ0FNRVJBX0tJVF9DT05ORUNUSVZJVFlfVFlQRV9CTFVFVE9PVEg9NF09XCJDQU1FUkFfS0lUX0NPTk5FQ1RJVklUWV9UWVBFX0JMVUVUT09USFwiLGVbZS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCJ9KEthfHwoS2E9e30pKSxmdW5jdGlvbihlKXtlW2UuQ0FNRVJBX0tJVF9GTEFWT1JfVU5LTk9XTj0wXT1cIkNBTUVSQV9LSVRfRkxBVk9SX1VOS05PV05cIixlW2UuQ0FNRVJBX0tJVF9GTEFWT1JfREVCVUc9MV09XCJDQU1FUkFfS0lUX0ZMQVZPUl9ERUJVR1wiLGVbZS5DQU1FUkFfS0lUX0ZMQVZPUl9SRUxFQVNFPTJdPVwiQ0FNRVJBX0tJVF9GTEFWT1JfUkVMRUFTRVwiLGVbZS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCJ9KFlhfHwoWWE9e30pKSxmdW5jdGlvbihlKXtlW2UuQ0FNRVJBX0tJVF9WQVJJQU5UX1VOS05PV049MF09XCJDQU1FUkFfS0lUX1ZBUklBTlRfVU5LTk9XTlwiLGVbZS5DQU1FUkFfS0lUX1ZBUklBTlRfUEFSVE5FUj0xXT1cIkNBTUVSQV9LSVRfVkFSSUFOVF9QQVJUTkVSXCIsZVtlLkNBTUVSQV9LSVRfVkFSSUFOVF9QVUJMSUM9Ml09XCJDQU1FUkFfS0lUX1ZBUklBTlRfUFVCTElDXCIsZVtlLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIn0ocWF8fChxYT17fSkpLGZ1bmN0aW9uKGUpe2VbZS5OT19QTFVHSU49MF09XCJOT19QTFVHSU5cIixlW2UuVU5JVFk9MV09XCJVTklUWVwiLGVbZS5VTlJFQ09HTklaRUQ9LTFdPVwiVU5SRUNPR05JWkVEXCJ9KFhhfHwoWGE9e30pKSxmdW5jdGlvbihlKXtlW2UuVU5LTk9XTl9LSVRfVFlQRT0wXT1cIlVOS05PV05fS0lUX1RZUEVcIixlW2UuQklUTU9KSV9LSVQ9MV09XCJCSVRNT0pJX0tJVFwiLGVbZS5DUkVBVElWRV9LSVQ9Ml09XCJDUkVBVElWRV9LSVRcIixlW2UuTE9HSU5fS0lUPTNdPVwiTE9HSU5fS0lUXCIsZVtlLlNUT1JZX0tJVD00XT1cIlNUT1JZX0tJVFwiLGVbZS5DQU1FUkFfS0lUPTVdPVwiQ0FNRVJBX0tJVFwiLGVbZS5TSE9QX0tJVD02XT1cIlNIT1BfS0lUXCIsZVtlLkVVTEFfS0lUPTddPVwiRVVMQV9LSVRcIixlW2UuUEFZTUVOVFNfS0lUPThdPVwiUEFZTUVOVFNfS0lUXCIsZVtlLklOVklURV9LSVQ9OV09XCJJTlZJVEVfS0lUXCIsZVtlLkNBTUVSQV9LSVRfV0VCPTEwXT1cIkNBTUVSQV9LSVRfV0VCXCIsZVtlLlVOUkVDT0dOSVpFRD0tMV09XCJVTlJFQ09HTklaRURcIn0oUWF8fChRYT17fSkpO2NvbnN0IEphPUooXCJtZXRyaWNzSGFuZGxlclwiLFt1dC50b2tlbl0sKGU9Pm5ldyBmZShlKS5tYXAoKChlLHQ9ITApPT57bGV0IG47Y29uc3Qgcj1rYSgodD0+ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaShlKXt0cnl7YShyLm5leHQoZSkpfWNhdGNoKGUpe3QoZSl9fWZ1bmN0aW9uIG8oZSl7dHJ5e2Eoci50aHJvdyhlKSl9Y2F0Y2goZSl7dChlKX19ZnVuY3Rpb24gYSh0KXt2YXIgcjt0LmRvbmU/ZSh0LnZhbHVlKToocj10LnZhbHVlLHIgaW5zdGFuY2VvZiBuP3I6bmV3IG4oKGZ1bmN0aW9uKGUpe2Uocil9KSkpLnRoZW4oaSxvKX1hKChyPXIuYXBwbHkodm9pZCAwLFtdKSkubmV4dCgpKX0pKX0oMCwwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYodm9pZCAwIT09bil7Y29uc3QgdD1lLShEYXRlLm5vdygpLW4pO3Q+MCYmKHlpZWxkKGU9Pm5ldyBQcm9taXNlKCh0PT5zZXRUaW1lb3V0KHQsZSkpKSkodCkpfXJldHVybiBuPURhdGUubm93KCksdH0pKSksMSx0KTtyZXR1cm4gZT0+KG4saSk9PnFvKFwiaGlkZGVuXCIpJiZ0P2UobixpKTpyKGUpKG4saSl9KSgxZTMpKS5oYW5kbGVyKSksJGE9SihcImJ1c2luZXNzRXZlbnRzUmVwb3J0ZXJcIixbX2EudG9rZW4sSmEudG9rZW5dLCgoZSx0KT0+eyFmdW5jdGlvbihlLHQsbil7Y29uc3Qgcj1SYSgpLGk9bmV3IGZlKHQpLm1hcChrYSgoZT0+e2NvbnN0IHQ9e2JhdGNoRXZlbnRzOntcIkB0eXBlXCI6XCJjb20uc25hcGNoYXQuYW5hbHl0aWNzLmJsaXp6YXJkLlNlcnZlckV2ZW50QmF0Y2hcIixzZXJ2ZXJFdmVudHM6ZX19O3JldHVybiBuZXcgUmVxdWVzdChcImh0dHBzOi8vYXBpLWtpdC5zbmFwY2hhdC5jb20vY29tLnNuYXAuY2FtZXJha2l0LnYzLk1ldHJpY3MvbWV0cmljcy9idXNpbmVzc19ldmVudHNcIix7bWV0aG9kOlwiUE9TVFwiLGJvZHk6SlNPTi5zdHJpbmdpZnkodCksY3JlZGVudGlhbHM6XCJpbmNsdWRlXCIsa2VlcGFsaXZlOiEwfSl9KSkpLm1hcChOYSh7YmF0Y2hSZWR1Y2U6KGUsdCk9Pntjb25zdCBuPW51bGwhPWU/ZTpbXTtyZXR1cm4gbi5wdXNoKHQpLG59LGlzQmF0Y2hDb21wbGV0ZTplPT5lLmxlbmd0aD49MTAwLG1heEJhdGNoQWdlOjVlM30pKS5oYW5kbGVyO3VuKG4pLmZvckVhY2goKChbdCxuXSk9PntlLmFkZEV2ZW50TGlzdGVuZXIodCwoKHtkZXRhaWw6ZX0pPT57Y29uc3RbdCxvXT1uKChhPWUsT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGEpLHtjYW1lcmFLaXRFdmVudEJhc2U6WmEuZnJvbVBhcnRpYWwoe2tpdEV2ZW50QmFzZTp6YS5mcm9tUGFydGlhbCh7bG9jYWxlOmx0LmxvY2FsZSxraXRWYXJpYW50OlFhLkNBTUVSQV9LSVRfV0VCLGtpdFZhcmlhbnRWZXJzaW9uOmx0LnNka1Nob3J0VmVyc2lvbixraXRDbGllbnRUaW1lc3RhbXBNaWxsaXM6RGF0ZS5ub3coKX0pLGRldmljZUNsdXN0ZXI6MCxjYW1lcmFLaXRWZXJzaW9uOmx0LnNka0xvbmdWZXJzaW9uLGxlbnNDb3JlVmVyc2lvbjpsdC5sZW5zQ29yZVZlcnNpb24sZGV2aWNlTW9kZWw6bHQuZGV2aWNlTW9kZWwsY2FtZXJhS2l0VmFyaWFudDpxYS5DQU1FUkFfS0lUX1ZBUklBTlRfUEFSVE5FUixjYW1lcmFLaXRGbGF2b3I6WWEuQ0FNRVJBX0tJVF9GTEFWT1JfREVCVUcsYXBwSWQ6bHQuYXBwSWQsZGV2aWNlQ29ubmVjdGl2aXR5OkthLkNBTUVSQV9LSVRfQ09OTkVDVElWSVRZX1RZUEVfV0lGSSxzZXNzaW9uSWQ6cn0pfSkpKTt2YXIgYTsoKGUsdCk9PntpKHdhLmZyb21QYXJ0aWFsKHtldmVudE5hbWU6ZSxvc1R5cGU6bHQub3NUeXBlLG9zVmVyc2lvbjpsdC5vc1ZlcnNpb24sbWF4U2VxdWVuY2VJZE9uSW5zdGFuY2U6MCxzZXF1ZW5jZUlkOjAsZXZlbnREYXRhOnR9KSl9KSh0LG8pfSkpfSkpfShlLHQse2Fzc2V0RG93bmxvYWQ6ZT0+W1wiQ0FNRVJBX0tJVF9BU1NFVF9ET1dOTE9BRFwiLHtjYW1lcmFLaXRBc3NldERvd25sb2FkOkZhLmZyb21QYXJ0aWFsKGUpfV0sYXNzZXRWYWxpZGF0aW9uRmFpbGVkOmU9PltcIkNBTUVSQV9LSVRfQVNTRVRfVkFMSURBVElPTl9GQUlMRURcIix7Y2FtZXJhS2l0QXNzZXRWYWxpZGF0aW9uRmFpbGVkOldhLmZyb21QYXJ0aWFsKGUpfV0sYmVuY2htYXJrQ29tcGxldGU6ZT0+W1wiQ0FNRVJBX0tJVF9XRUJfQkVOQ0hNQVJLX0NPTVBMRVRFXCIse2NhbWVyYUtpdFdlYkJlbmNobWFya0NvbXBsZXRlOmphLmZyb21QYXJ0aWFsKGUpfV0sZXhjZXB0aW9uOmU9PltcIkNBTUVSQV9LSVRfRVhDRVBUSU9OXCIse2NhbWVyYUtpdEV4Y2VwdGlvbjpCYS5mcm9tUGFydGlhbChlKX1dLGxlbnNEb3dubG9hZDplPT5bXCJDQU1FUkFfS0lUX0xFTlNfRE9XTkxPQURcIix7Y2FtZXJhS2l0TGVuc0Rvd25sb2FkOnhhLmZyb21QYXJ0aWFsKGUpfV0sbGVuc1ZpZXc6ZT0+W1wiQ0FNRVJBX0tJVF9XRUJfTEVOU19TV0lQRVwiLHtjYW1lcmFLaXRXZWJMZW5zU3dpcGU6VWEuZnJvbVBhcnRpYWwoZSl9XSxsZW5zV2FpdDplPT5bXCJDQU1FUkFfS0lUX0xFTlNfU1BJTlwiLHtjYW1lcmFLaXRMZW5zU3BpbjpMYS5mcm9tUGFydGlhbChlKX1dLGxlbnNDb250ZW50VmFsaWRhdGlvbkZhaWxlZDplPT5bXCJDQU1FUkFfS0lUX0xFTlNfQ09OVEVOVF9WQUxJREFUSU9OX0ZBSUxFRFwiLHtjYW1lcmFLaXRMZW5zQ29udGVudFZhbGlkYXRpb25GYWlsZWQ6SGEuZnJvbVBhcnRpYWwoZSl9XSxzZXNzaW9uOmU9PltcIkNBTUVSQV9LSVRfU0VTU0lPTlwiLHtjYW1lcmFLaXRTZXNzaW9uOlZhLmZyb21QYXJ0aWFsKGUpfV19KX0pKSxlcz17ZW5jb2RlKGUsdD1idCgpLldyaXRlci5jcmVhdGUoKSl7dmFyIG4scixpLG87cmV0dXJuXCJcIiE9PWUubmFtZSYmdC51aW50MzIoMTApLnN0cmluZyhlLm5hbWUpLHZvaWQgMCE9PWUudGltZXN0YW1wJiZpby5lbmNvZGUoKG89ZS50aW1lc3RhbXAse3NlY29uZHM6by5nZXRUaW1lKCkvMWUzLG5hbm9zOm8uZ2V0VGltZSgpJTFlMyoxZTZ9KSx0LnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKSxcImNvdW50XCI9PT0obnVsbD09PShuPWUubWV0cmljKXx8dm9pZCAwPT09bj92b2lkIDA6bi4kY2FzZSkmJnQudWludDMyKDI0KS51aW50NjQoZS5tZXRyaWMuY291bnQpLFwibGF0ZW5jeU1pbGxpc1wiPT09KG51bGw9PT0ocj1lLm1ldHJpYyl8fHZvaWQgMD09PXI/dm9pZCAwOnIuJGNhc2UpJiZ0LnVpbnQzMigzMikudWludDY0KGUubWV0cmljLmxhdGVuY3lNaWxsaXMpLFwiaGlzdG9ncmFtXCI9PT0obnVsbD09PShpPWUubWV0cmljKXx8dm9pZCAwPT09aT92b2lkIDA6aS4kY2FzZSkmJnQudWludDMyKDQwKS5pbnQ2NChlLm1ldHJpYy5oaXN0b2dyYW0pLHR9LGRlY29kZShlLHQpe2NvbnN0IG49ZSBpbnN0YW5jZW9mIGJ0KCkuUmVhZGVyP2U6bmV3KGJ0KCkuUmVhZGVyKShlKTtsZXQgcj12b2lkIDA9PT10P24ubGVuOm4ucG9zK3Q7Y29uc3QgaT17bmFtZTpcIlwiLHRpbWVzdGFtcDp2b2lkIDAsbWV0cmljOnZvaWQgMH07Zm9yKDtuLnBvczxyOyl7Y29uc3QgZT1uLnVpbnQzMigpO3N3aXRjaChlPj4+Myl7Y2FzZSAxOmkubmFtZT1uLnN0cmluZygpO2JyZWFrO2Nhc2UgMjppLnRpbWVzdGFtcD1vcyhpby5kZWNvZGUobixuLnVpbnQzMigpKSk7YnJlYWs7Y2FzZSAzOmkubWV0cmljPXskY2FzZTpcImNvdW50XCIsY291bnQ6YXMobi51aW50NjQoKSl9O2JyZWFrO2Nhc2UgNDppLm1ldHJpYz17JGNhc2U6XCJsYXRlbmN5TWlsbGlzXCIsbGF0ZW5jeU1pbGxpczphcyhuLnVpbnQ2NCgpKX07YnJlYWs7Y2FzZSA1OmkubWV0cmljPXskY2FzZTpcImhpc3RvZ3JhbVwiLGhpc3RvZ3JhbTphcyhuLmludDY0KCkpfTticmVhaztkZWZhdWx0Om4uc2tpcFR5cGUoNyZlKX19cmV0dXJuIGl9LGZyb21KU09OOmU9PntyZXR1cm57bmFtZTpzcyhlLm5hbWUpP1N0cmluZyhlLm5hbWUpOlwiXCIsdGltZXN0YW1wOnNzKGUudGltZXN0YW1wKT8odD1lLnRpbWVzdGFtcCx0IGluc3RhbmNlb2YgRGF0ZT90Olwic3RyaW5nXCI9PXR5cGVvZiB0P25ldyBEYXRlKHQpOm9zKGlvLmZyb21KU09OKHQpKSk6dm9pZCAwLG1ldHJpYzpzcyhlLmNvdW50KT97JGNhc2U6XCJjb3VudFwiLGNvdW50Ok51bWJlcihlLmNvdW50KX06c3MoZS5sYXRlbmN5TWlsbGlzKT97JGNhc2U6XCJsYXRlbmN5TWlsbGlzXCIsbGF0ZW5jeU1pbGxpczpOdW1iZXIoZS5sYXRlbmN5TWlsbGlzKX06c3MoZS5oaXN0b2dyYW0pP3skY2FzZTpcImhpc3RvZ3JhbVwiLGhpc3RvZ3JhbTpOdW1iZXIoZS5oaXN0b2dyYW0pfTp2b2lkIDB9O3ZhciB0fSx0b0pTT04oZSl7dmFyIHQsbixyLGksbyxhO2NvbnN0IHM9e307cmV0dXJuIHZvaWQgMCE9PWUubmFtZSYmKHMubmFtZT1lLm5hbWUpLHZvaWQgMCE9PWUudGltZXN0YW1wJiYocy50aW1lc3RhbXA9ZS50aW1lc3RhbXAudG9JU09TdHJpbmcoKSksXCJjb3VudFwiPT09KG51bGw9PT0odD1lLm1ldHJpYyl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuJGNhc2UpJiYocy5jb3VudD1NYXRoLnJvdW5kKG51bGw9PT0obj1lLm1ldHJpYyl8fHZvaWQgMD09PW4/dm9pZCAwOm4uY291bnQpKSxcImxhdGVuY3lNaWxsaXNcIj09PShudWxsPT09KHI9ZS5tZXRyaWMpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLiRjYXNlKSYmKHMubGF0ZW5jeU1pbGxpcz1NYXRoLnJvdW5kKG51bGw9PT0oaT1lLm1ldHJpYyl8fHZvaWQgMD09PWk/dm9pZCAwOmkubGF0ZW5jeU1pbGxpcykpLFwiaGlzdG9ncmFtXCI9PT0obnVsbD09PShvPWUubWV0cmljKXx8dm9pZCAwPT09bz92b2lkIDA6by4kY2FzZSkmJihzLmhpc3RvZ3JhbT1NYXRoLnJvdW5kKG51bGw9PT0oYT1lLm1ldHJpYyl8fHZvaWQgMD09PWE/dm9pZCAwOmEuaGlzdG9ncmFtKSksc30sZnJvbVBhcnRpYWwoZSl7dmFyIHQsbixyLGksbyxhLHMsYyxsLHUsZDtjb25zdCBmPXtuYW1lOlwiXCIsdGltZXN0YW1wOnZvaWQgMCxtZXRyaWM6dm9pZCAwfTtyZXR1cm4gZi5uYW1lPW51bGwhPT0odD1lLm5hbWUpJiZ2b2lkIDAhPT10P3Q6XCJcIixmLnRpbWVzdGFtcD1udWxsIT09KG49ZS50aW1lc3RhbXApJiZ2b2lkIDAhPT1uP246dm9pZCAwLFwiY291bnRcIj09PShudWxsPT09KHI9ZS5tZXRyaWMpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLiRjYXNlKSYmdm9pZCAwIT09KG51bGw9PT0oaT1lLm1ldHJpYyl8fHZvaWQgMD09PWk/dm9pZCAwOmkuY291bnQpJiZudWxsIT09KG51bGw9PT0obz1lLm1ldHJpYyl8fHZvaWQgMD09PW8/dm9pZCAwOm8uY291bnQpJiYoZi5tZXRyaWM9eyRjYXNlOlwiY291bnRcIixjb3VudDplLm1ldHJpYy5jb3VudH0pLFwibGF0ZW5jeU1pbGxpc1wiPT09KG51bGw9PT0oYT1lLm1ldHJpYyl8fHZvaWQgMD09PWE/dm9pZCAwOmEuJGNhc2UpJiZ2b2lkIDAhPT0obnVsbD09PShzPWUubWV0cmljKXx8dm9pZCAwPT09cz92b2lkIDA6cy5sYXRlbmN5TWlsbGlzKSYmbnVsbCE9PShudWxsPT09KGM9ZS5tZXRyaWMpfHx2b2lkIDA9PT1jP3ZvaWQgMDpjLmxhdGVuY3lNaWxsaXMpJiYoZi5tZXRyaWM9eyRjYXNlOlwibGF0ZW5jeU1pbGxpc1wiLGxhdGVuY3lNaWxsaXM6ZS5tZXRyaWMubGF0ZW5jeU1pbGxpc30pLFwiaGlzdG9ncmFtXCI9PT0obnVsbD09PShsPWUubWV0cmljKXx8dm9pZCAwPT09bD92b2lkIDA6bC4kY2FzZSkmJnZvaWQgMCE9PShudWxsPT09KHU9ZS5tZXRyaWMpfHx2b2lkIDA9PT11P3ZvaWQgMDp1Lmhpc3RvZ3JhbSkmJm51bGwhPT0obnVsbD09PShkPWUubWV0cmljKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5oaXN0b2dyYW0pJiYoZi5tZXRyaWM9eyRjYXNlOlwiaGlzdG9ncmFtXCIsaGlzdG9ncmFtOmUubWV0cmljLmhpc3RvZ3JhbX0pLGZ9fSx0cz17ZW5jb2RlKGUsdD1idCgpLldyaXRlci5jcmVhdGUoKSl7Zm9yKGNvbnN0IG4gb2YgZS5tZXRyaWNzKWVzLmVuY29kZShuLHQudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO3JldHVybiB0fSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBidCgpLlJlYWRlcj9lOm5ldyhidCgpLlJlYWRlcikoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e21ldHJpY3M6W119O2Zvcig7bi5wb3M8cjspe2NvbnN0IGU9bi51aW50MzIoKTtlPj4+Mz09MT9pLm1ldHJpY3MucHVzaChlcy5kZWNvZGUobixuLnVpbnQzMigpKSk6bi5za2lwVHlwZSg3JmUpfXJldHVybiBpfSxmcm9tSlNPTjplPT4oe21ldHJpY3M6QXJyYXkuaXNBcnJheShudWxsPT1lP3ZvaWQgMDplLm1ldHJpY3MpP2UubWV0cmljcy5tYXAoKGU9PmVzLmZyb21KU09OKGUpKSk6W119KSx0b0pTT04oZSl7Y29uc3QgdD17fTtyZXR1cm4gZS5tZXRyaWNzP3QubWV0cmljcz1lLm1ldHJpY3MubWFwKChlPT5lP2VzLnRvSlNPTihlKTp2b2lkIDApKTp0Lm1ldHJpY3M9W10sdH0sZnJvbVBhcnRpYWwoZSl7dmFyIHQ7Y29uc3Qgbj17bWV0cmljczpbXX07cmV0dXJuIG4ubWV0cmljcz0obnVsbD09PSh0PWUubWV0cmljcyl8fHZvaWQgMD09PXQ/dm9pZCAwOnQubWFwKChlPT5lcy5mcm9tUGFydGlhbChlKSkpKXx8W10sbn19O3ZhciBucyxycyxpcz0oKCk9PntpZih2b2lkIDAhPT1pcylyZXR1cm4gaXM7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYpcmV0dXJuIHNlbGY7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93O2lmKHZvaWQgMCE9PW4uZylyZXR1cm4gbi5nO3Rocm93XCJVbmFibGUgdG8gbG9jYXRlIGdsb2JhbCBvYmplY3RcIn0pKCk7ZnVuY3Rpb24gb3MoZSl7bGV0IHQ9MWUzKmUuc2Vjb25kcztyZXR1cm4gdCs9ZS5uYW5vcy8xZTYsbmV3IERhdGUodCl9ZnVuY3Rpb24gYXMoZSl7aWYoZS5ndChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikpdGhyb3cgbmV3IGlzLkVycm9yKFwiVmFsdWUgaXMgbGFyZ2VyIHRoYW4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcIik7cmV0dXJuIGUudG9OdW1iZXIoKX1mdW5jdGlvbiBzcyhlKXtyZXR1cm4gbnVsbCE9ZX1idCgpLnV0aWwuTG9uZyE9PUl0KCkmJihidCgpLnV0aWwuTG9uZz1JdCgpLGJ0KCkuY29uZmlndXJlKCkpLGZ1bmN0aW9uKGUpe2UuQ0FNRVJBX0tJVF9GTEFWT1JfVU5TRVQ9XCJDQU1FUkFfS0lUX0ZMQVZPUl9VTlNFVFwiLGUuQ0FNRVJBX0tJVF9GTEFWT1JfREVCVUc9XCJDQU1FUkFfS0lUX0ZMQVZPUl9ERUJVR1wiLGUuQ0FNRVJBX0tJVF9GTEFWT1JfUkVMRUFTRT1cIkNBTUVSQV9LSVRfRkxBVk9SX1JFTEVBU0VcIixlLlVOUkVDT0dOSVpFRD1cIlVOUkVDT0dOSVpFRFwifShuc3x8KG5zPXt9KSksZnVuY3Rpb24oZSl7ZS5DQU1FUkFfS0lUX0NPTk5FQ1RJVklUWV9UWVBFX1VOU0VUPVwiQ0FNRVJBX0tJVF9DT05ORUNUSVZJVFlfVFlQRV9VTlNFVFwiLGUuQ0FNRVJBX0tJVF9DT05ORUNUSVZJVFlfVFlQRV9XSUZJPVwiQ0FNRVJBX0tJVF9DT05ORUNUSVZJVFlfVFlQRV9XSUZJXCIsZS5DQU1FUkFfS0lUX0NPTk5FQ1RJVklUWV9UWVBFX01PQklMRT1cIkNBTUVSQV9LSVRfQ09OTkVDVElWSVRZX1RZUEVfTU9CSUxFXCIsZS5DQU1FUkFfS0lUX0NPTk5FQ1RJVklUWV9UWVBFX1VOUkVBQ0hBQkxFPVwiQ0FNRVJBX0tJVF9DT05ORUNUSVZJVFlfVFlQRV9VTlJFQUNIQUJMRVwiLGUuQ0FNRVJBX0tJVF9DT05ORUNUSVZJVFlfVFlQRV9CTFVFVE9PVEg9XCJDQU1FUkFfS0lUX0NPTk5FQ1RJVklUWV9UWVBFX0JMVUVUT09USFwiLGUuVU5SRUNPR05JWkVEPVwiVU5SRUNPR05JWkVEXCJ9KHJzfHwocnM9e30pKTt2YXIgY3M9KCgpPT57aWYodm9pZCAwIT09Y3MpcmV0dXJuIGNzO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmKXJldHVybiBzZWxmO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvdztpZih2b2lkIDAhPT1uLmcpcmV0dXJuIG4uZzt0aHJvd1wiVW5hYmxlIHRvIGxvY2F0ZSBnbG9iYWwgb2JqZWN0XCJ9KSgpO2J0KCkudXRpbC5Mb25nIT09SXQoKSYmKGJ0KCkudXRpbC5Mb25nPUl0KCksYnQoKS5jb25maWd1cmUoKSk7Y29uc3QgbHM9e2VuY29kZTooZSx0PWJ0KCkuV3JpdGVyLmNyZWF0ZSgpKT0+KHZvaWQgMCE9PWUubWV0cmljcyYmdHMuZW5jb2RlKGUubWV0cmljcyx0LnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKSx0KSxkZWNvZGUoZSx0KXtjb25zdCBuPWUgaW5zdGFuY2VvZiBidCgpLlJlYWRlcj9lOm5ldyhidCgpLlJlYWRlcikoZSk7bGV0IHI9dm9pZCAwPT09dD9uLmxlbjpuLnBvcyt0O2NvbnN0IGk9e21ldHJpY3M6dm9pZCAwfTtmb3IoO24ucG9zPHI7KXtjb25zdCBlPW4udWludDMyKCk7ZT4+PjM9PTE/aS5tZXRyaWNzPXRzLmRlY29kZShuLG4udWludDMyKCkpOm4uc2tpcFR5cGUoNyZlKX1yZXR1cm4gaX0sZnJvbUpTT046ZT0+e3JldHVybnttZXRyaWNzOih0PWUubWV0cmljcyxudWxsIT10P3RzLmZyb21KU09OKGUubWV0cmljcyk6dm9pZCAwKX07dmFyIHR9LHRvSlNPTihlKXtjb25zdCB0PXt9O3JldHVybiB2b2lkIDAhPT1lLm1ldHJpY3MmJih0Lm1ldHJpY3M9ZS5tZXRyaWNzP3RzLnRvSlNPTihlLm1ldHJpY3MpOnZvaWQgMCksdH0sZnJvbVBhcnRpYWwoZSl7Y29uc3QgdD17bWV0cmljczp2b2lkIDB9O3JldHVybiB0Lm1ldHJpY3M9dm9pZCAwIT09ZS5tZXRyaWNzJiZudWxsIT09ZS5tZXRyaWNzP3RzLmZyb21QYXJ0aWFsKGUubWV0cmljcyk6dm9pZCAwLHR9fTtidCgpLnV0aWwuTG9uZyE9PUl0KCkmJihidCgpLnV0aWwuTG9uZz1JdCgpLGJ0KCkuY29uZmlndXJlKCkpO2NsYXNzIHVze2NvbnN0cnVjdG9yKGUpe3RoaXMubWV0cmljc0hhbmRsZXI9ZX1jb3VudChlLHQsbil7cmV0dXJuIHRoaXMucmVjb3JkKGUseyRjYXNlOlwiY291bnRcIixjb3VudDp0fSxuKX10aW1lcihlLHQsbil7cmV0dXJuIHRoaXMucmVjb3JkKGUseyRjYXNlOlwibGF0ZW5jeU1pbGxpc1wiLGxhdGVuY3lNaWxsaXM6dH0sbil9aGlzdG9ncmFtKGUsdCxuKXtyZXR1cm4gdGhpcy5yZWNvcmQoZSx7JGNhc2U6XCJoaXN0b2dyYW1cIixoaXN0b2dyYW06dH0sbil9cmVjb3JkKGUsdCxuKXtjb25zdCByPW4/YC4ke0FycmF5LmZyb20obi5lbnRyaWVzKCkpLm1hcCgoZT0+ZS5qb2luKFwiLlwiKSkpLmpvaW4oXCIuXCIpfWA6XCJcIjtyZXR1cm4gdGhpcy5tZXRyaWNzSGFuZGxlcih7bmFtZTpgJHtlfSR7cn1gLHRpbWVzdGFtcDpuZXcgRGF0ZSxtZXRyaWM6dH0pfX1jb25zdCBkcz1KKFwib3BlcmF0aW9uYWxNZXRyaWNzUmVwb3J0ZXJcIixbSmEudG9rZW5dLChlPT57Y29uc3QgdD1uZXcgZmUoZSkubWFwKGthKChlPT57Y29uc3QgdD17bWV0cmljczplfTtyZXR1cm4gbmV3IFJlcXVlc3QoXCJodHRwczovL2FwaS1raXQuc25hcGNoYXQuY29tL2NvbS5zbmFwLmNhbWVyYWtpdC52My5NZXRyaWNzL21ldHJpY3Mvb3BlcmF0aW9uYWxfbWV0cmljc1wiLHttZXRob2Q6XCJQT1NUXCIsYm9keTpKU09OLnN0cmluZ2lmeShscy50b0pTT04odCkpLGNyZWRlbnRpYWxzOlwiaW5jbHVkZVwiLGtlZXBhbGl2ZTohMH0pfSkpKS5tYXAoTmEoe2JhdGNoUmVkdWNlOihlLHQpPT57Y29uc3Qgbj1udWxsIT1lP2U6e21ldHJpY3M6W119O3JldHVybiBuLm1ldHJpY3MucHVzaCh0KSxufSxpc0JhdGNoQ29tcGxldGU6ZT0+ZS5tZXRyaWNzLmxlbmd0aD49MTAwLG1heEJhdGNoQWdlOjVlM30pKS5oYW5kbGVyO3JldHVybiBuZXcgdXModCl9KSksZnM9W1wiZ2Zsb3BzXCJdLHBzPUooXCJyZXBvcnRCZW5jaG1hcmtzXCIsW19hLnRva2VuLGRzLnRva2VuLG5lXSwoKGUsdCxuKT0+ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaShlKXt0cnl7YShyLm5leHQoZSkpfWNhdGNoKGUpe3QoZSl9fWZ1bmN0aW9uIG8oZSl7dHJ5e2Eoci50aHJvdyhlKSl9Y2F0Y2goZSl7dChlKX19ZnVuY3Rpb24gYSh0KXt2YXIgcjt0LmRvbmU/ZSh0LnZhbHVlKToocj10LnZhbHVlLHIgaW5zdGFuY2VvZiBuP3I6bmV3IG4oKGZ1bmN0aW9uKGUpe2Uocil9KSkpLnRoZW4oaSxvKX1hKChyPXIuYXBwbHkodW5kZWZpbmVkLFtdKSkubmV4dCgpKX0pKX0oMCwwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYodm9pZCAwPT09bi5sZW5zUGVyZm9ybWFuY2UpcmV0dXJuO2NvbnN0IHI9eWllbGQgbi5sZW5zUGVyZm9ybWFuY2UsaT17bmFtZTpcImJlbmNobWFya0NvbXBsZXRlXCIscGVyZm9ybWFuY2VDbHVzdGVyOnIuY2x1c3Rlcix3ZWJnbFJlbmRlcmVySW5mbzpyLndlYmdsUmVuZGVyZXJJbmZvfSxvPW5ldyBNYXAoW1tcInBlcmZvcm1hbmNlX2NsdXN0ZXJcIixyLmNsdXN0ZXIudG9TdHJpbmcoKV1dKTtmb3IoY29uc3QgbiBvZiByLmJlbmNobWFya3Mpe2lmKCFmcy5pbmNsdWRlcyhuLm5hbWUpKWNvbnRpbnVlO2NvbnN0IHI9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkpLHtiZW5jaG1hcmtOYW1lOm4ubmFtZSxiZW5jaG1hcmtWYWx1ZTpuLnZhbHVlfSk7ZS5kaXNwYXRjaEV2ZW50KG5ldyBobihcImJlbmNobWFya0NvbXBsZXRlXCIscikpLHQuaGlzdG9ncmFtKGBiZW5jaG1hcmsuJHtuLm5hbWV9YCxuLnZhbHVlLG8pfX0pKSkpLG1zPUooXCJyZXBvcnRFeGNlcHRpb25cIixbbWEudG9rZW4sU24udG9rZW4sX2EudG9rZW4sZHMudG9rZW5dLCgoZSx0LG4scik9PntlLmV2ZW50cy5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwoZT0+e3ZhciBpLG8sYTtjb25zdCBzPWUuZGV0YWlsO24uZGlzcGF0Y2hFdmVudChuZXcgaG4oXCJleGNlcHRpb25cIix7bmFtZTpcImV4Y2VwdGlvblwiLGxlbnNJZDpudWxsIT09KG89bnVsbD09PShpPXQuYWN0aXZlTGVucyl8fHZvaWQgMD09PWk/dm9pZCAwOmkuaWQpJiZ2b2lkIDAhPT1vP286XCJvcmlnaW5hbFwiLHR5cGU6XCJsZW5zXCIscmVhc29uOm51bGwhPT0oYT0ocy5jYXVzZT9QZShzLHMuY2F1c2UpOnMpLnN0YWNrKSYmdm9pZCAwIT09YT9hOlwiXCJ9KSksci5jb3VudChcImhhbmRsZWRfZXhjZXB0aW9uXCIsMSxuZXcgTWFwKFtbXCJ0eXBlXCIsXCJsZW5zXCJdXSkpfSkpfSkpLGhzPWU9Pih0LG4scik9PntsZXQgaT1lO2NvbnN0IG89bmV3IHZuLGE9ZT0+e2k9cihpLGUpLG8uZGlzcGF0Y2hFdmVudChuZXcgaG4oXCJzdGF0ZVwiLGkpKX07bGV0IHM9ITE7cmV0dXJuIG8uYWRkRXZlbnRMaXN0ZW5lcj1uZXcgUHJveHkoby5hZGRFdmVudExpc3RlbmVyLHthcHBseTooZSxyLGkpPT57aWYocyl0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgYWRkRXZlbnRMaXN0ZW5lci4gVGhlIFR5cGVkRXZlbnRUYXJnZXQgcmV0dXJuZWQgYnkgc2NhbiBvbmx5IHN1cHBvcnRzIGEgc2luZ2xlIGxpc3RlbmVyLCBhbmQgb25lIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQuXCIpO3M9ITAsbi5mb3JFYWNoKChlPT50LmFkZEV2ZW50TGlzdGVuZXIoZSxhKSkpLGUuYXBwbHkocixpKX19KSxvLnJlbW92ZUV2ZW50TGlzdGVuZXI9bmV3IFByb3h5KG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcix7YXBwbHk6KGUscixpKT0+e24uZm9yRWFjaCgoZT0+dC5yZW1vdmVFdmVudExpc3RlbmVyKGUsYSkpKSxlLmFwcGx5KHIsaSl9fSksb30sdnM9W1wibGVuc19jb250ZW50XCIsXCJhc3NldFwiXSxncz1lPT57Y29uc3QgdD1lLnJlcXVlc3RUeXBlO3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0JiZ2cy5pbmNsdWRlcyh0KX0seXM9SihcInJlcG9ydExlbnNBbmRBc3NldERvd25sb2FkXCIsW19hLnRva2VuLGRzLnRva2VuXSwoKGUsdCk9Pntocyh7bmFtZTpcImluUHJvZ3Jlc3NcIixpblByb2dyZXNzOm5ldyBNYXB9KSh5bixbXCJzdGFydGVkXCIsXCJjb21wbGV0ZWRcIixcImVycm9yZWRcIl0sKChlLHQpPT57dmFyIG47Y29uc3R7aW5Qcm9ncmVzczpyfT1lLHtkaW1lbnNpb25zOmkscmVxdWVzdElkOm8sdGltZU1zOmF9PXQuZGV0YWlsO2lmKCFncyhpKSlyZXR1cm4gZTtzd2l0Y2godC50eXBlKXtjYXNlXCJzdGFydGVkXCI6cmV0dXJuIHIuc2V0KG8se3N0YXJ0VGltZU1zOmF9KSx7bmFtZTpcImluUHJvZ3Jlc3NcIixpblByb2dyZXNzOnJ9O2Nhc2VcImNvbXBsZXRlZFwiOmNvbnN0IHM9ci5nZXQobyk7aWYoIXMpcmV0dXJuIGU7ci5kZWxldGUobyk7Y29uc3QgYz0oYS1zLnN0YXJ0VGltZU1zKS8xZTMse3NpemVCeXRlOmx9PXQuZGV0YWlsO3N3aXRjaChpLnJlcXVlc3RUeXBlKXtjYXNlXCJsZW5zX2NvbnRlbnRcIjpyZXR1cm57bmFtZTpcImNvbXBsZXRlZFwiLGluUHJvZ3Jlc3M6cixldmVudDpuZXcgaG4oXCJsZW5zRG93bmxvYWRcIix7bmFtZTpcImxlbnNEb3dubG9hZFwiLGxlbnNJZDppLmxlbnNJZCxhdXRvbWF0aWNEb3dubG9hZDohMSxzaXplQnl0ZTpsLGRvd25sb2FkVGltZVNlYzpjfSl9O2Nhc2VcImFzc2V0XCI6cmV0dXJue25hbWU6XCJjb21wbGV0ZWRcIixpblByb2dyZXNzOnIsZXZlbnQ6bmV3IGhuKFwiYXNzZXREb3dubG9hZFwiLHtuYW1lOlwiYXNzZXREb3dubG9hZFwiLGFzc2V0SWQ6aS5hc3NldElkLGF1dG9tYXRpY0Rvd25sb2FkOiExLHNpemVCeXRlOmwsZG93bmxvYWRUaW1lU2VjOmN9KX07ZGVmYXVsdDpwdCgpfWNhc2VcImVycm9yZWRcIjppZighci5nZXQobykpcmV0dXJuIGU7ci5kZWxldGUobyk7Y29uc3QgdT10LmRldGFpbC5lcnJvcjtyZXR1cm57bmFtZTpcImNvbXBsZXRlZFwiLGluUHJvZ3Jlc3M6cixldmVudDpuZXcgaG4oXCJleGNlcHRpb25cIix7bmFtZTpcImV4Y2VwdGlvblwiLGxlbnNJZDppLmxlbnNJZCx0eXBlOlwibGVuc19jb250ZW50XCI9PT1pLnJlcXVlc3RUeXBlP1wibGVuc1wiOlwiYXNzZXRcIixyZWFzb246bnVsbCE9PShuPSh1LmNhdXNlP1BlKHUsdS5jYXVzZSk6dSkuc3RhY2spJiZ2b2lkIDAhPT1uP246XCJcIn0pfTtkZWZhdWx0OnB0KCl9fSkpLmFkZEV2ZW50TGlzdGVuZXIoXCJzdGF0ZVwiLCgoe2RldGFpbDpufSk9PntcImNvbXBsZXRlZFwiPT09bi5uYW1lJiYoZS5kaXNwYXRjaEV2ZW50KG4uZXZlbnQpLFwiZXhjZXB0aW9uXCI9PT1uLmV2ZW50LmRldGFpbC5uYW1lJiZ0LmNvdW50KFwiaGFuZGxlZF9leGNlcHRpb25cIiwxLG5ldyBNYXAoW1tcInR5cGVcIixuLmV2ZW50LmRldGFpbC50eXBlXV0pKSl9KSl9KSksRXM9ZT0+e3N3aXRjaChlLnJlcXVlc3RUeXBlKXtjYXNlXCJsZW5zX2NvbnRlbnRcIjpyZXR1cm5cImxlbnNfY29udGVudFwiO2Nhc2VcImFzc2V0XCI6cmV0dXJuIGUuYXNzZXRUeXBlO2Nhc2UgeWk6cmV0dXJuIHlpO2RlZmF1bHQ6cHQoKX19LF9zPUooXCJyZXBvcnRIdHRwTWV0cmljc1wiLFtkcy50b2tlbl0sKGU9Pntocyh7bmFtZTpcImluUHJvZ3Jlc3NcIixpblByb2dyZXNzOm5ldyBNYXB9KSh5bixbXCJzdGFydGVkXCIsXCJjb21wbGV0ZWRcIixcImVycm9yZWRcIl0sKChlLHQpPT57dmFyIG4scjtjb25zdHtpblByb2dyZXNzOml9PWUse2RpbWVuc2lvbnM6byxyZXF1ZXN0SWQ6YSx0aW1lTXM6c309dC5kZXRhaWw7aWYoIWdzKGM9bykmJmMucmVxdWVzdFR5cGUhPT15aSlyZXR1cm4gZTt2YXIgYztzd2l0Y2godC50eXBlKXtjYXNlXCJzdGFydGVkXCI6cmV0dXJuIGkuc2V0KGEse3N0YXJ0VGltZU1zOnN9KSx7bmFtZTpcImluUHJvZ3Jlc3NcIixpblByb2dyZXNzOml9O2Nhc2VcImNvbXBsZXRlZFwiOmNhc2VcImVycm9yZWRcIjpjb25zdCBjPWkuZ2V0KGEpO2lmKCFjKXJldHVybiBlO2kuZGVsZXRlKGEpO2NvbnN0IGw9cy1jLnN0YXJ0VGltZU1zLHU9KGU9Pntzd2l0Y2goZS50eXBlKXtjYXNlXCJzdGFydGVkXCI6Y2FzZVwiZXJyb3JlZFwiOnJldHVybiAwO2Nhc2VcImNvbXBsZXRlZFwiOnJldHVybiBlLmRldGFpbC5zaXplQnl0ZS8xMDI0O2RlZmF1bHQ6cHQoKX19KSh0KSxkPShlPT57c3dpdGNoKGUudHlwZSl7Y2FzZVwic3RhcnRlZFwiOmNhc2VcImVycm9yZWRcIjpyZXR1cm5cIjBcIjtjYXNlXCJjb21wbGV0ZWRcIjpyZXR1cm4gZS5kZXRhaWwuc3RhdHVzLnRvU3RyaW5nKCk7ZGVmYXVsdDpwdCgpfX0pKHQpLGY9bmV3IE1hcChbW1wiY29udGVudF90eXBlXCIsRXMobyldLFtcIm5ldHdvcmtfdHlwZVwiLG51bGwhPT0ocj1udWxsPT09KG49bmF2aWdhdG9yLmNvbm5lY3Rpb24pfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLnR5cGUpJiZ2b2lkIDAhPT1yP3I6XCJ1bmtub3duXCJdLFtcInN0YXR1c1wiLGRdXSk7cmV0dXJue25hbWU6XCJjb21wbGV0ZWRcIixpblByb2dyZXNzOmUuaW5Qcm9ncmVzcyxkaW1lbnNpb25zOmYsZG93bmxvYWRTaXplS2I6dSxkb3dubG9hZFRpbWVNczpsfTtkZWZhdWx0OnB0KCl9fSkpLmFkZEV2ZW50TGlzdGVuZXIoXCJzdGF0ZVwiLCgoe2RldGFpbDp0fSk9PntpZihcImNvbXBsZXRlZFwiIT09dC5uYW1lKXJldHVybjtjb25zdHtkaW1lbnNpb25zOm4sZG93bmxvYWRUaW1lTXM6cixkb3dubG9hZFNpemVLYjppfT10O2UuY291bnQoXCJkb3dubG9hZF9maW5pc2hlZFwiLDEsbiksZS50aW1lcihcImRvd25sb2FkX2xhdGVuY3lcIixyLG4pLGUuaGlzdG9ncmFtKFwiZG93bmxvYWRfc2l6ZV9rYlwiLGksbil9KSl9KSksSXM9SihcInJlcG9ydExlbnNPckFzc2V0VmFsaWRhdGlvbkZhaWxlZFwiLFtibi50b2tlbixfYS50b2tlbl0sKChlLHQpPT57ZS5hZGRFdmVudExpc3RlbmVyKFwiYXNzZXRWYWxpZGF0aW9uRmFpbHVyZVwiLCgoe2RldGFpbDplfSk9Pntjb25zdCBuPXtuYW1lOlwiYXNzZXRWYWxpZGF0aW9uRmFpbGVkXCIsYXNzZXRJZDplLmFzc2V0SWR9O3QuZGlzcGF0Y2hFdmVudChuZXcgaG4oXCJhc3NldFZhbGlkYXRpb25GYWlsZWRcIixuKSl9KSksZS5hZGRFdmVudExpc3RlbmVyKFwibGVuc0NvbnRlbnRWYWxpZGF0aW9uRmFpbHVyZVwiLCgoe2RldGFpbDplfSk9Pntjb25zdCBuPXtuYW1lOlwibGVuc0NvbnRlbnRWYWxpZGF0aW9uRmFpbGVkXCIsbGVuc0lkOmUuaWR9O3QuZGlzcGF0Y2hFdmVudChuZXcgaG4oXCJsZW5zQ29udGVudFZhbGlkYXRpb25GYWlsZWRcIixuKSl9KSl9KSksU3M9KGUsdCxuKT0+bmV3IFByb21pc2UoKChyLGkpPT57Y29uc3Qgbz0obnVsbD09bj92b2lkIDA6bi5wcmVkaWNhdGUpP24ucHJlZGljYXRlOigpPT4hMCxhPSh7ZGV0YWlsOm59KT0+e28obikmJihyKG4pLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LGEpKX07ZS5hZGRFdmVudExpc3RlbmVyKHQsYSksKG51bGw9PW4/dm9pZCAwOm4uc2lnbmFsKSYmbi5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsKCgpPT57aShuZXcgRXJyb3IoYFByb21pc2UgYWJvcnRlZCB3aGlsZSB3YWl0aW5nIGZvciBuZXh0ICR7dH0gZXZlbnQuYCkpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LGEpfSkse29uY2U6ITB9KX0pKTt2YXIgYnM9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShlKXt0cnl7YyhyLm5leHQoZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIHMoZSl7dHJ5e2Moci50aHJvdyhlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYyhlKXt2YXIgdDtlLmRvbmU/aShlLnZhbHVlKToodD1lLnZhbHVlLHQgaW5zdGFuY2VvZiBuP3Q6bmV3IG4oKGZ1bmN0aW9uKGUpe2UodCl9KSkpLnRoZW4oYSxzKX1jKChyPXIuYXBwbHkoZSx0fHxbXSkpLm5leHQoKSl9KSl9O2NvbnN0IFRzPUooXCJyZXBvcnRMZW5zVmlld1wiLFttYS50b2tlbixibi50b2tlbixfYS50b2tlbixkcy50b2tlbixuZV0sKChlLHQsbixyLGkpPT57bGV0IG89bmV3IEFib3J0Q29udHJvbGxlcjtjb25zdCBhPSh7YXBwbHlEZWxheVNlYzp0LGxlbnNJZDpvLHZpZXdUaW1lU2VjOmF9KT0+YnModm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBzO2lmKGE8LjEpcmV0dXJuO2NvbnN0e2F2Z0ZwczpjLGxlbnNGcmFtZVByb2Nlc3NpbmdUaW1lTXNBdmc6bCxsZW5zRnJhbWVQcm9jZXNzaW5nVGltZU1zU3RkOnV9PWUubWV0cmljcy5mcmFtZXMse2NsdXN0ZXI6ZCx3ZWJnbFJlbmRlcmVySW5mbzpmfT1udWxsIT09KHM9eWllbGQgaS5sZW5zUGVyZm9ybWFuY2UpJiZ2b2lkIDAhPT1zP3M6e2NsdXN0ZXI6LTEsd2ViZ2xSZW5kZXJlckluZm86XCJ1bmtub3duXCJ9LHA9e25hbWU6XCJsZW5zVmlld1wiLGFwcGx5RGVsYXlTZWM6dCxhdmdGcHM6YyxsZW5zSWQ6byxsZW5zRnJhbWVQcm9jZXNzaW5nVGltZU1zQXZnOmwsbGVuc0ZyYW1lUHJvY2Vzc2luZ1RpbWVNc1N0ZDp1LHJlY29yZGluZ1RpbWVTZWM6MCx2aWV3VGltZVNlYzphLGlzTGVuc0ZpcnN0V2l0aGluRGF5OiExLGlzTGVuc0ZpcnN0V2l0aGluTW9udGg6ITEscGVyZm9ybWFuY2VDbHVzdGVyOmQsd2ViZ2xSZW5kZXJlckluZm86Zn07bi5kaXNwYXRjaEV2ZW50KG5ldyBobihcImxlbnNWaWV3XCIscCkpLHQ+MCYmci50aW1lcihcImxlbnMuY29yZV9sb2FkaW5nX2xhdGVuY3lcIiwxZTMqdCksci50aW1lcihcImxlbnMucHJvY2Vzc2luZ190aW1lXCIsbCxuZXcgTWFwKFtbXCJwZXJmb3JtYW5jZV9jbHVzdGVyXCIsZC50b1N0cmluZygpXV0pKX0pKSxzPShlLG4scixpKT0+YnModm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IG89bW4oKSxjPW4udGhlbigoZT0+KGUtbykvMWUzKSk7bGV0IGw9ITE7UHJvbWlzZS5hbGwoW2Mscl0pLnRoZW4oKChbbixyXSk9PmJzKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBvPSgpPT57bD0hMDtjb25zdCB0PShtbigpLXIpLzFlMzthKHtsZW5zSWQ6ZSxhcHBseURlbGF5U2VjOm4sdmlld1RpbWVTZWM6dH0pfSxjPSgpPT57Y29uc3QgdD1Qcm9taXNlLnJlc29sdmUobW4oKSk7cyhlLHQsdCxpKX07dC5hZGRFdmVudExpc3RlbmVyKFwic2Vzc2lvblN1c3BlbmRlZFwiLG8se29uY2U6ITB9KSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJzZXNzaW9uUmVzdW1lZFwiLGMse29uY2U6ITB9KSx5aWVsZCBpLmNhdGNoKCgoKT0+e30pKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzZXNzaW9uU3VzcGVuZGVkXCIsbyksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Vzc2lvblJlc3VtZWRcIixjKX0pKSkpLmNhdGNoKCgoKT0+e30pKTtjb25zdFt1LGRdPXlpZWxkIFByb21pc2UuYWxsKFtjLFByb21pc2UuYWxsKFtyLGldKS50aGVuKCgoW2UsdF0pPT4odC1lKS8xZTMpKV0pLmNhdGNoKCgoKT0+WzAsMF0pKTtsfHxhKHtsZW5zSWQ6ZSxhcHBseURlbGF5U2VjOnUsdmlld1RpbWVTZWM6ZH0pfSkpO3QuYWRkRXZlbnRMaXN0ZW5lcihcImxlbnNJbml0aWF0ZWRcIiwoKHtkZXRhaWw6ZX0pPT5icyh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7by5hYm9ydCgpLG89bmV3IEFib3J0Q29udHJvbGxlcjtjb25zdCBuPXtzaWduYWw6by5zaWduYWwscHJlZGljYXRlOnQ9PnQuaWQ9PT1lLmlkfSxyPVNzKHQsXCJsZW5zTG9hZGVkXCIsbikudGhlbihtbiksaT1Tcyh0LFwibGVuc1R1cm5lZE9uXCIsbikudGhlbihtbiksYT1Tcyh0LFwibGVuc1R1cm5lZE9mZlwiLG4pLnRoZW4obW4pO3MoZS5pZCxyLGksYSl9KSkpKX0pKSxDcz1KKFwicmVwb3J0TGVuc1dhaXRcIixbYm4udG9rZW4sX2EudG9rZW4sZHMudG9rZW5dLCgoZSx0LG4pPT57aHMoe25hbWU6XCJOb3RTdGFydGVkXCJ9KShlLFtcImxlbnNBcHBseVN0YXJ0XCIsXCJmaXJzdEZyYW1lUHJvY2Vzc2VkXCJdLCgoZSx7dHlwZTp0LGRldGFpbDpufSk9Pntjb25zdCBpPWU9Pih7bmFtZTpcIkNvbXBsZXRlXCIsbGVuc0lkOmUubGVuc0lkLHdhaXRpbmdEdXJhdGlvbk1zOm1uKCktZS53YWl0aW5nU3RhcnRUaW1lTXN9KSxvPSgpPT4oe25hbWU6XCJXYWl0aW5nXCIsbGVuc0lkOm4uaWQsd2FpdGluZ1N0YXJ0VGltZU1zOm1uKCl9KTtzd2l0Y2goZS5uYW1lKXtjYXNlXCJOb3RTdGFydGVkXCI6Y2FzZVwiQ29tcGxldGVcIjpzd2l0Y2godCl7Y2FzZVwibGVuc0FwcGx5U3RhcnRcIjpyZXR1cm4gbygpO2Nhc2VcImZpcnN0RnJhbWVQcm9jZXNzZWRcIjpyZXR1cm4gZTtkZWZhdWx0OnB0KCl9Y2FzZVwiV2FpdGluZ1wiOnN3aXRjaCh0KXtjYXNlXCJsZW5zQXBwbHlTdGFydFwiOnJldHVybiByKGkoZSkpLG8oKTtjYXNlXCJmaXJzdEZyYW1lUHJvY2Vzc2VkXCI6cmV0dXJuIGkoZSk7ZGVmYXVsdDpwdCgpfWRlZmF1bHQ6cHQoKX19KSkuYWRkRXZlbnRMaXN0ZW5lcihcInN0YXRlXCIsKCh7ZGV0YWlsOmV9KT0+cihlKSkpO2NvbnN0IHI9ZT0+e2lmKFwiQ29tcGxldGVcIiE9PWUubmFtZSlyZXR1cm47Y29uc3Qgcj1lLndhaXRpbmdEdXJhdGlvbk1zLzFlMztpZihyPC4xKXJldHVybjtjb25zdCBpPXtuYW1lOlwibGVuc1dhaXRcIixsZW5zSWQ6ZS5sZW5zSWQsdmlld1RpbWVTZWM6cn07dC5kaXNwYXRjaEV2ZW50KG5ldyBobihcImxlbnNXYWl0XCIsaSkpLG4udGltZXIoXCJsZW5zLmFwcGx5X2xlbnNfbGF0ZW5jeVwiLGUud2FpdGluZ0R1cmF0aW9uTXMpfX0pKSxBcz1uZXcgZG4oe30pLnByb3ZpZGVzKCRhKS5wcm92aWRlcyhfcykucHJvdmlkZXMocHMpLnByb3ZpZGVzKHlzKSxScz1uZXcgZG4oe30pLnByb3ZpZGVzKFRzKS5wcm92aWRlcyhDcykucHJvdmlkZXMobXMpLnByb3ZpZGVzKElzKSxrcz1KKFwicmVwb3J0VXNlclNlc3Npb25cIixbYm4udG9rZW4sX2EudG9rZW5dLCgoZSx0KT0+e2UuYWRkRXZlbnRMaXN0ZW5lcihcInNlc3Npb25DcmVhdGVkXCIsKCgpPT5mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKGUpe3RyeXthKHIubmV4dChlKSl9Y2F0Y2goZSl7dChlKX19ZnVuY3Rpb24gbyhlKXt0cnl7YShyLnRocm93KGUpKX1jYXRjaChlKXt0KGUpfX1mdW5jdGlvbiBhKHQpe3ZhciByO3QuZG9uZT9lKHQudmFsdWUpOihyPXQudmFsdWUsciBpbnN0YW5jZW9mIG4/cjpuZXcgbigoZnVuY3Rpb24oZSl7ZShyKX0pKSkudGhlbihpLG8pfWEoKHI9ci5hcHBseSh1bmRlZmluZWQsW10pKS5uZXh0KCkpfSkpfSgwLDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgZSxuO2NvbnN0IHI9XCJ1c2VyU2Vzc2lvbkluZm9cIixpPW5ldyBtaSh7ZGF0YWJhc2VOYW1lOlwiU2Vzc2lvbkhpc3RvcnlcIn0pLG89bmV3IERhdGUoKG5ldyBEYXRlKS50b0xvY2FsZURhdGVTdHJpbmcoXCJlbi1VU1wiLHt0aW1lWm9uZTpcIkFtZXJpY2EvTG9zX0FuZ2VsZXNcIn0pKSxhPW8uZ2V0TW9udGgoKSxzPW8uZ2V0RGF0ZSgpLGM9by5nZXRGdWxsWWVhcigpLGw9eWllbGQgaS5yZXRyaWV2ZShyKSx1PW51bGw9PWw/dm9pZCAwOmwubW9zdFJlY2VudFNlc3Npb25TdGFydERhdGUsZD1uZXcgTWFwKFtbMSxHYS5PTkVfU0VTU0lPTl0sWzIsR2EuVFdPX1NFU1NJT05dLFszLEdhLlRIUkVFX1NFU1NJT05dLFs0LEdhLkZPVVJfU0VTU0lPTl0sWzUsR2EuRklWRV9TRVNTSU9OXSxbNixHYS5TSVhfU0VTU0lPTl0sWzcsR2EuU0VWRU5fU0VTU0lPTl0sWzgsR2EuRUlHSFRfU0VTU0lPTl0sWzksR2EuTklORV9TRVNTSU9OXV0pO2xldCBmPW51bGwhPT0oZT1udWxsPT1sP3ZvaWQgMDpsLmRhaWx5U2Vzc2lvbkJ1Y2tldCkmJnZvaWQgMCE9PWU/ZTpHYS5OT19TRVNTSU9OX0JVQ0tFVCxwPSExO3UmJnUuZ2V0TW9udGgoKT09PWEmJnUuZ2V0RGF0ZSgpPT09cyYmdS5nZXRGdWxsWWVhcigpPT09Yz8oZj1udWxsIT09KG49ZC5nZXQoZisxKSkmJnZvaWQgMCE9PW4/bjpHYS5URU5fT1JfTU9SRV9TRVNTSU9OLHlpZWxkIGkucmVtb3ZlKHIpLHlpZWxkIGkuc3RvcmUocix7bW9zdFJlY2VudFNlc3Npb25TdGFydERhdGU6byxkYWlseVNlc3Npb25CdWNrZXQ6Zn0pKToocD0hdXx8dS5nZXRNb250aCgpIT09YSx5aWVsZCBpLnJlbW92ZShyKSx5aWVsZCBpLnN0b3JlKHIse21vc3RSZWNlbnRTZXNzaW9uU3RhcnREYXRlOm8sZGFpbHlTZXNzaW9uQnVja2V0OmY9R2EuT05FX1NFU1NJT059KSk7Y29uc3QgbT17bmFtZTpcInNlc3Npb25cIixkYWlseVNlc3Npb25CdWNrZXQ6Zixpc0ZpcnN0V2l0aGluTW9udGg6cCxtb250aDphKzEsZGF5OnMseWVhcjpjfTt0LmRpc3BhdGNoRXZlbnQobmV3IGhuKFwic2Vzc2lvblwiLG0pKX0pKSkse29uY2U6ITB9KX0pKSxPcz0oKCk9PntpZihcInVuZGVmaW5lZFwiPT10eXBlb2Ygc2VsZilyZXR1cm4hMTtpZihcInRvcFwiaW4gc2VsZiYmc2VsZiE9PXRvcCl0cnl7dG9wfWNhdGNoKGUpe3JldHVybiExfWVsc2UgaWYoXCJzaG93T3BlbkZpbGVQaWNrZXJcImluIHNlbGYpcmV0dXJuXCJzaG93T3BlbkZpbGVQaWNrZXJcIjtyZXR1cm4hMX0pKCksTnM9T3M/UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gRHN9KSk6UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4geHN9KSk7T3M/UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gTHN9KSk6UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gRnN9KSksT3M/UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gVXN9KSk6UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gQnN9KSk7Y29uc3Qgd3M9YXN5bmMgZT0+e2NvbnN0IHQ9YXdhaXQgZS5nZXRGaWxlKCk7cmV0dXJuIHQuaGFuZGxlPWUsdH07dmFyIERzPXtfX3Byb3RvX186bnVsbCxkZWZhdWx0OmFzeW5jKGU9W3t9XSk9PntBcnJheS5pc0FycmF5KGUpfHwoZT1bZV0pO2NvbnN0IHQ9W107ZS5mb3JFYWNoKCgoZSxuKT0+e3Rbbl09e2Rlc2NyaXB0aW9uOmUuZGVzY3JpcHRpb258fFwiRmlsZXNcIixhY2NlcHQ6e319LGUubWltZVR5cGVzP2UubWltZVR5cGVzLm1hcCgocj0+e3Rbbl0uYWNjZXB0W3JdPWUuZXh0ZW5zaW9uc3x8W119KSk6dFtuXS5hY2NlcHRbXCIqLypcIl09ZS5leHRlbnNpb25zfHxbXX0pKTtjb25zdCBuPWF3YWl0IHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIoe2lkOmVbMF0uaWQsc3RhcnRJbjplWzBdLnN0YXJ0SW4sdHlwZXM6dCxtdWx0aXBsZTplWzBdLm11bHRpcGxlfHwhMSxleGNsdWRlQWNjZXB0QWxsT3B0aW9uOmVbMF0uZXhjbHVkZUFjY2VwdEFsbE9wdGlvbnx8ITF9KSxyPWF3YWl0IFByb21pc2UuYWxsKG4ubWFwKHdzKSk7cmV0dXJuIGVbMF0ubXVsdGlwbGU/cjpyWzBdfX07ZnVuY3Rpb24gUHMoZSl7ZnVuY3Rpb24gdChlKXtpZihPYmplY3QoZSkhPT1lKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKGUrXCIgaXMgbm90IGFuIG9iamVjdC5cIikpO3ZhciB0PWUuZG9uZTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGUudmFsdWUpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybnt2YWx1ZTplLGRvbmU6dH19KSl9cmV0dXJuIFBzPWZ1bmN0aW9uKGUpe3RoaXMucz1lLHRoaXMubj1lLm5leHR9LFBzLnByb3RvdHlwZT17czpudWxsLG46bnVsbCxuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcy5uLmFwcGx5KHRoaXMucyxhcmd1bWVudHMpKX0scmV0dXJuOmZ1bmN0aW9uKGUpe3ZhciBuPXRoaXMucy5yZXR1cm47cmV0dXJuIHZvaWQgMD09PW4/UHJvbWlzZS5yZXNvbHZlKHt2YWx1ZTplLGRvbmU6ITB9KTp0KG4uYXBwbHkodGhpcy5zLGFyZ3VtZW50cykpfSx0aHJvdzpmdW5jdGlvbihlKXt2YXIgbj10aGlzLnMucmV0dXJuO3JldHVybiB2b2lkIDA9PT1uP1Byb21pc2UucmVqZWN0KGUpOnQobi5hcHBseSh0aGlzLnMsYXJndW1lbnRzKSl9fSxuZXcgUHMoZSl9Y29uc3QgTXM9YXN5bmMoZSx0LG49ZS5uYW1lLHIpPT57Y29uc3QgaT1bXSxvPVtdO3ZhciBhLHM9ITEsYz0hMTt0cnl7Zm9yKHZhciBsLHU9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGk9Mjtmb3IoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmKG49U3ltYm9sLmFzeW5jSXRlcmF0b3Iscj1TeW1ib2wuaXRlcmF0b3IpO2ktLTspe2lmKG4mJm51bGwhPSh0PWVbbl0pKXJldHVybiB0LmNhbGwoZSk7aWYociYmbnVsbCE9KHQ9ZVtyXSkpcmV0dXJuIG5ldyBQcyh0LmNhbGwoZSkpO249XCJAQGFzeW5jSXRlcmF0b3JcIixyPVwiQEBpdGVyYXRvclwifXRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgaXMgbm90IGFzeW5jIGl0ZXJhYmxlXCIpfShlLnZhbHVlcygpKTtzPSEobD1hd2FpdCB1Lm5leHQoKSkuZG9uZTtzPSExKXtjb25zdCBhPWwudmFsdWUscz1gJHtufS8ke2EubmFtZX1gO1wiZmlsZVwiPT09YS5raW5kP28ucHVzaChhLmdldEZpbGUoKS50aGVuKCh0PT4odC5kaXJlY3RvcnlIYW5kbGU9ZSx0LmhhbmRsZT1hLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwid2Via2l0UmVsYXRpdmVQYXRoXCIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDooKT0+c30pKSkpKTpcImRpcmVjdG9yeVwiIT09YS5raW5kfHwhdHx8ciYmcihhKXx8aS5wdXNoKE1zKGEsdCxzLHIpKX19Y2F0Y2goZSl7Yz0hMCxhPWV9ZmluYWxseXt0cnl7cyYmbnVsbCE9dS5yZXR1cm4mJmF3YWl0IHUucmV0dXJuKCl9ZmluYWxseXtpZihjKXRocm93IGF9fXJldHVyblsuLi4oYXdhaXQgUHJvbWlzZS5hbGwoaSkpLmZsYXQoKSwuLi5hd2FpdCBQcm9taXNlLmFsbChvKV19O3ZhciBMcz17X19wcm90b19fOm51bGwsZGVmYXVsdDphc3luYyhlPXt9KT0+e2UucmVjdXJzaXZlPWUucmVjdXJzaXZlfHwhMSxlLm1vZGU9ZS5tb2RlfHxcInJlYWRcIjtjb25zdCB0PWF3YWl0IHdpbmRvdy5zaG93RGlyZWN0b3J5UGlja2VyKHtpZDplLmlkLHN0YXJ0SW46ZS5zdGFydEluLG1vZGU6ZS5tb2RlfSk7cmV0dXJuIE1zKHQsZS5yZWN1cnNpdmUsdm9pZCAwLGUuc2tpcERpcmVjdG9yeSl9fSxVcz17X19wcm90b19fOm51bGwsZGVmYXVsdDphc3luYyhlLHQ9W3t9XSxuPW51bGwscj0hMSxpPW51bGwpPT57QXJyYXkuaXNBcnJheSh0KXx8KHQ9W3RdKSx0WzBdLmZpbGVOYW1lPXRbMF0uZmlsZU5hbWV8fFwiVW50aXRsZWRcIjtjb25zdCBvPVtdO2xldCBhPW51bGw7aWYoZSBpbnN0YW5jZW9mIEJsb2ImJmUudHlwZT9hPWUudHlwZTplLmhlYWRlcnMmJmUuaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIikmJihhPWUuaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIikpLHQuZm9yRWFjaCgoKGUsdCk9PntvW3RdPXtkZXNjcmlwdGlvbjplLmRlc2NyaXB0aW9ufHxcIkZpbGVzXCIsYWNjZXB0Ont9fSxlLm1pbWVUeXBlcz8oMD09PXQmJmEmJmUubWltZVR5cGVzLnB1c2goYSksZS5taW1lVHlwZXMubWFwKChuPT57b1t0XS5hY2NlcHRbbl09ZS5leHRlbnNpb25zfHxbXX0pKSk6YT9vW3RdLmFjY2VwdFthXT1lLmV4dGVuc2lvbnN8fFtdOm9bdF0uYWNjZXB0W1wiKi8qXCJdPWUuZXh0ZW5zaW9uc3x8W119KSksbil0cnl7YXdhaXQgbi5nZXRGaWxlKCl9Y2F0Y2goZSl7aWYobj1udWxsLHIpdGhyb3cgZX1jb25zdCBzPW58fGF3YWl0IHdpbmRvdy5zaG93U2F2ZUZpbGVQaWNrZXIoe3N1Z2dlc3RlZE5hbWU6dFswXS5maWxlTmFtZSxpZDp0WzBdLmlkLHN0YXJ0SW46dFswXS5zdGFydEluLHR5cGVzOm8sZXhjbHVkZUFjY2VwdEFsbE9wdGlvbjp0WzBdLmV4Y2x1ZGVBY2NlcHRBbGxPcHRpb258fCExfSk7IW4mJmkmJmkocyk7Y29uc3QgYz1hd2FpdCBzLmNyZWF0ZVdyaXRhYmxlKCk7aWYoXCJzdHJlYW1cImluIGUpe2NvbnN0IHQ9ZS5zdHJlYW0oKTtyZXR1cm4gYXdhaXQgdC5waXBlVG8oYyksc31yZXR1cm5cImJvZHlcImluIGU/KGF3YWl0IGUuYm9keS5waXBlVG8oYykscyk6KGF3YWl0IGMud3JpdGUoYXdhaXQgZSksYXdhaXQgYy5jbG9zZSgpLHMpfX0seHM9e19fcHJvdG9fXzpudWxsLGRlZmF1bHQ6YXN5bmMoZT1be31dKT0+KEFycmF5LmlzQXJyYXkoZSl8fChlPVtlXSksbmV3IFByb21pc2UoKCh0LG4pPT57Y29uc3Qgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7ci50eXBlPVwiZmlsZVwiO2NvbnN0IGk9Wy4uLmUubWFwKChlPT5lLm1pbWVUeXBlc3x8W10pKSwuLi5lLm1hcCgoZT0+ZS5leHRlbnNpb25zfHxbXSkpXS5qb2luKCk7ci5tdWx0aXBsZT1lWzBdLm11bHRpcGxlfHwhMSxyLmFjY2VwdD1pfHxcIlwiLHIuc3R5bGUuZGlzcGxheT1cIm5vbmVcIixkb2N1bWVudC5ib2R5LmFwcGVuZChyKTtjb25zdCBvPWU9PntcImZ1bmN0aW9uXCI9PXR5cGVvZiBhJiZhKCksdChlKX0sYT1lWzBdLmxlZ2FjeVNldHVwJiZlWzBdLmxlZ2FjeVNldHVwKG8sKCgpPT5hKG4pKSxyKSxzPSgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLHMpLHIucmVtb3ZlKCl9O3IuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsKCgpPT57d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLHMpfSkpLHIuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCgoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiZm9jdXNcIixzKSxyLnJlbW92ZSgpLG8oci5tdWx0aXBsZT9BcnJheS5mcm9tKHIuZmlsZXMpOnIuZmlsZXNbMF0pfSkpLFwic2hvd1BpY2tlclwiaW4gSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGU/ci5zaG93UGlja2VyKCk6ci5jbGljaygpfSkpKX0sRnM9e19fcHJvdG9fXzpudWxsLGRlZmF1bHQ6YXN5bmMoZT1be31dKT0+KEFycmF5LmlzQXJyYXkoZSl8fChlPVtlXSksZVswXS5yZWN1cnNpdmU9ZVswXS5yZWN1cnNpdmV8fCExLG5ldyBQcm9taXNlKCgodCxuKT0+e2NvbnN0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO3IudHlwZT1cImZpbGVcIixyLndlYmtpdGRpcmVjdG9yeT0hMDtjb25zdCBpPWU9PntcImZ1bmN0aW9uXCI9PXR5cGVvZiBvJiZvKCksdChlKX0sbz1lWzBdLmxlZ2FjeVNldHVwJiZlWzBdLmxlZ2FjeVNldHVwKGksKCgpPT5vKG4pKSxyKTtyLmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwoKCk9PntsZXQgdD1BcnJheS5mcm9tKHIuZmlsZXMpO2VbMF0ucmVjdXJzaXZlP2VbMF0ucmVjdXJzaXZlJiZlWzBdLnNraXBEaXJlY3RvcnkmJih0PXQuZmlsdGVyKCh0PT50LndlYmtpdFJlbGF0aXZlUGF0aC5zcGxpdChcIi9cIikuZXZlcnkoKHQ9PiFlWzBdLnNraXBEaXJlY3Rvcnkoe25hbWU6dCxraW5kOlwiZGlyZWN0b3J5XCJ9KSkpKSkpOnQ9dC5maWx0ZXIoKGU9PjI9PT1lLndlYmtpdFJlbGF0aXZlUGF0aC5zcGxpdChcIi9cIikubGVuZ3RoKSksaSh0KX0pKSxcInNob3dQaWNrZXJcImluIEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlP3Iuc2hvd1BpY2tlcigpOnIuY2xpY2soKX0pKSl9LEJzPXtfX3Byb3RvX186bnVsbCxkZWZhdWx0OmFzeW5jKGUsdD17fSk9PntBcnJheS5pc0FycmF5KHQpJiYodD10WzBdKTtjb25zdCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO2xldCByPWU7XCJib2R5XCJpbiBlJiYocj1hd2FpdCBhc3luYyBmdW5jdGlvbihlLHQpe2NvbnN0IG49ZS5nZXRSZWFkZXIoKSxyPW5ldyBSZWFkYWJsZVN0cmVhbSh7c3RhcnQ6ZT0+YXN5bmMgZnVuY3Rpb24gdCgpe3JldHVybiBuLnJlYWQoKS50aGVuKCgoe2RvbmU6bix2YWx1ZTpyfSk9PntpZighbilyZXR1cm4gZS5lbnF1ZXVlKHIpLHQoKTtlLmNsb3NlKCl9KSl9KCl9KSxpPW5ldyBSZXNwb25zZShyKSxvPWF3YWl0IGkuYmxvYigpO3JldHVybiBuLnJlbGVhc2VMb2NrKCksbmV3IEJsb2IoW29dLHt0eXBlOnR9KX0oZS5ib2R5LGUuaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIikpKSxuLmRvd25sb2FkPXQuZmlsZU5hbWV8fFwiVW50aXRsZWRcIixuLmhyZWY9VVJMLmNyZWF0ZU9iamVjdFVSTChhd2FpdCByKTtjb25zdCBpPSgpPT57XCJmdW5jdGlvblwiPT10eXBlb2YgbyYmbygpfSxvPXQubGVnYWN5U2V0dXAmJnQubGVnYWN5U2V0dXAoaSwoKCk9Pm8oKSksbik7cmV0dXJuIG4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsKCgpPT57c2V0VGltZW91dCgoKCk9PlVSTC5yZXZva2VPYmplY3RVUkwobi5ocmVmKSksM2U0KSxpKCl9KSksbi5jbGljaygpLG51bGx9fTtjb25zdCBWcz02NTQ5NixHcz02NTUwNSxIcz0xMTY1NTE5MjA2LFdzPTE4NzYxLGpzPTI3NDt2YXIgWnM7IWZ1bmN0aW9uKGUpe2VbZS5Ub3BMZWZ0PTFdPVwiVG9wTGVmdFwiLGVbZS5Ub3BSaWdodD0yXT1cIlRvcFJpZ2h0XCIsZVtlLkJvdHRvbVJpZ2h0PTNdPVwiQm90dG9tUmlnaHRcIixlW2UuQm90dG9tTGVmdD00XT1cIkJvdHRvbUxlZnRcIixlW2UuTGVmdFRvcD01XT1cIkxlZnRUb3BcIixlW2UuUmlnaHRUb3A9Nl09XCJSaWdodFRvcFwiLGVbZS5SaWdodEJvdHRvbT03XT1cIlJpZ2h0Qm90dG9tXCIsZVtlLkxlZnRCb3R0b209OF09XCJMZWZ0Qm90dG9tXCJ9KFpzfHwoWnM9e30pKTt2YXIgenM9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShlKXt0cnl7YyhyLm5leHQoZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIHMoZSl7dHJ5e2Moci50aHJvdyhlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYyhlKXt2YXIgdDtlLmRvbmU/aShlLnZhbHVlKToodD1lLnZhbHVlLHQgaW5zdGFuY2VvZiBuP3Q6bmV3IG4oKGZ1bmN0aW9uKGUpe2UodCl9KSkpLnRoZW4oYSxzKX1jKChyPXIuYXBwbHkoZSx0fHxbXSkpLm5leHQoKSl9KSl9O2NvbnN0IEtzPWdlKFwibGVuc0NsaWVudEludGVyZmFjZUltYWdlUGlja2VyXCIpLFlzPXtpbWFnZTpbXCJpbWFnZS9hdmlmXCIsXCJpbWFnZS9ibXBcIixcImltYWdlL2dpZlwiLFwiaW1hZ2UvanBlZ1wiLFwiaW1hZ2UvcG5nXCIsXCJpbWFnZS9zdmcreG1sXCIsXCJpbWFnZS90aWZmXCIsXCJpbWFnZS93ZWJwXCJdLHZpZGVvOltcInZpZGVvLzNncHBcIixcInZpZGVvLzNncHAyXCIsXCJ2aWRlby9tcDJ0XCIsXCJ2aWRlby9tcDRcIixcInZpZGVvL21wZWdcIixcInZpZGVvL29nZ1wiLFwidmlkZW8vcXVpY2t0aW1lXCIsXCJ2aWRlby93ZWJtXCIsXCJ2aWRlby94LW1zdmlkZW9cIl19O2Z1bmN0aW9uIHFzKGUsdCl7dmFyIG47Y29uc3Qgcj17MTp0LkV4dGVybmFsTWVkaWFPcmllbnRhdGlvbi5DVzAsMjp0LkV4dGVybmFsTWVkaWFPcmllbnRhdGlvbi5DVzAsMzp0LkV4dGVybmFsTWVkaWFPcmllbnRhdGlvbi5DVzE4MCw0OnQuRXh0ZXJuYWxNZWRpYU9yaWVudGF0aW9uLkNXMTgwLDU6dC5FeHRlcm5hbE1lZGlhT3JpZW50YXRpb24uQ1c5MCw2OnQuRXh0ZXJuYWxNZWRpYU9yaWVudGF0aW9uLkNXOTAsNzp0LkV4dGVybmFsTWVkaWFPcmllbnRhdGlvbi5DVzI3MCw4OnQuRXh0ZXJuYWxNZWRpYU9yaWVudGF0aW9uLkNXMjcwfTt0cnl7cmV0dXJuIHJbbnVsbCE9PShuPWZ1bmN0aW9uKGUpe2NvbnN0IHQ9bmV3IERhdGFWaWV3KGUpO2lmKHQuZ2V0VWludDE2KDAsITEpIT09VnMpcmV0dXJuO2NvbnN0IG49dC5ieXRlTGVuZ3RoO2xldCByPTI7Zm9yKDtyPG47KXtpZih0LmdldFVpbnQxNihyKzIsITEpPD04KXJldHVybjtsZXQgZT10LmdldFVpbnQxNihyLCExKTtpZihyKz0yLGU9PT1Hcyl7aWYodC5nZXRVaW50MzIocis9MiwhMSkhPT1IcylyZXR1cm47bGV0IGU9dC5nZXRVaW50MTYocis9NiwhMSk9PT1XcztyKz10LmdldFVpbnQzMihyKzQsZSk7bGV0IG49dC5nZXRVaW50MTYocixlKTtyKz0yO2ZvcihsZXQgaT0wO2k8bjtpKyspaWYodC5nZXRVaW50MTYocisxMippLGUpPT09anMpcmV0dXJuIHQuZ2V0VWludDE2KHIrMTIqaSs4LGUpfWVsc2V7aWYoNjUyODAhPSg2NTI4MCZlKSlicmVhaztyKz10LmdldFVpbnQxNihyLCExKX19fShlKSkmJnZvaWQgMCE9PW4/bjoxXX1jYXRjaChlKXtyZXR1cm4gS3MuaW5mbyhcIkVycm9yIG9jY3VyZWQgd2hpbGUgcmVhZGluZyBFWElGIG9yaWVudGF0aW9uIHRhZ1wiLGUpLHQuRXh0ZXJuYWxNZWRpYU9yaWVudGF0aW9uLkNXMH19Y29uc3QgWHM9Z2UoXCJsZW5zQ2xpZW50SW50ZXJmYWNlXCIpO2Z1bmN0aW9uIFFzKGUsdCl7ZS5zZXRDbGllbnRJbnRlcmZhY2VSZXF1ZXN0SGFuZGxlcj9lLnNldENsaWVudEludGVyZmFjZVJlcXVlc3RIYW5kbGVyKCgoe2RhdGE6bixpbnRlcmZhY2VDb250cm9sOnIsaW50ZXJmYWNlQWN0aW9uOml9KT0+ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKHQsaSl7ZnVuY3Rpb24gbyhlKXt0cnl7cyhyLm5leHQoZSkpfWNhdGNoKGUpe2koZSl9fWZ1bmN0aW9uIGEoZSl7dHJ5e3Moci50aHJvdyhlKSl9Y2F0Y2goZSl7aShlKX19ZnVuY3Rpb24gcyhlKXt2YXIgcjtlLmRvbmU/dChlLnZhbHVlKToocj1lLnZhbHVlLHIgaW5zdGFuY2VvZiBuP3I6bmV3IG4oKGZ1bmN0aW9uKGUpe2Uocil9KSkpLnRoZW4obyxhKX1zKChyPXIuYXBwbHkoZSxbXSkpLm5leHQoKSl9KSl9KHRoaXMsMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKHI9PT1lLkludGVyZmFjZUNvbnRyb2wuSW1hZ2VQaWNrZXImJmk9PT1lLkludGVyZmFjZUFjdGlvbi5TaG93KXJldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiB6cyh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IG49ZnVuY3Rpb24oe0ltYWdlRW5hYmxlZDplLFZpZGVvRW5hYmxlZDp0fSl7Y29uc3Qgbj1bXTtpZihcIjFcIj09PWUmJm4ucHVzaCguLi5Zcy5pbWFnZSksXCIxXCI9PT10JiZuLnB1c2goLi4uZnVuY3Rpb24qKGUpe2NvbnN0IHQ9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50P2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ2aWRlb1wiKTp2b2lkIDA7Zm9yKGNvbnN0IG4gb2YgZSkobnVsbD09dD92b2lkIDA6dC5jYW5QbGF5VHlwZShuKSkmJih5aWVsZCBuKX0oWXMudmlkZW8pKSwwPT09bi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBtZWRpYSB0eXBlIHJlcXVlc3RlZFwiKTtyZXR1cm4gbn0oZSk7S3MuZGVidWcoYE9wZW5pbmcgZmlsZSBkaWFsb2cgZm9yIE1JTUUgdHlwZXM6ICR7bn1gKTtjb25zdCByPXlpZWxkIGFzeW5jIGZ1bmN0aW9uKC4uLmUpe3JldHVybihhd2FpdCBOcykuZGVmYXVsdCguLi5lKX0oe21pbWVUeXBlczpufSk7S3MuZGVidWcoYFNlbGVjdGVkIGZpbGUgTUlNRSB0eXBlOiAke3IudHlwZX1gKTtjb25zdCBpPXlpZWxkIGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUHJvbWlzZSgodD0+e2NvbnN0IG49bmV3IEZpbGVSZWFkZXI7bi5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLChlPT57dmFyIG47dChudWxsPT09KG49ZS50YXJnZXQpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLnJlc3VsdCl9KSksbi5yZWFkQXNBcnJheUJ1ZmZlcihlKX0pKX0ocik7ci50eXBlLnN0YXJ0c1dpdGgoXCJpbWFnZS9cIik/dC5wcm92aWRlRXh0ZXJuYWxJbWFnZSh7ZGF0YTppLG9yaWVudGF0aW9uOnFzKGksdCksZmFjZVJlY3RzOlt7b3JpZ2luOnt4OjAseTowfSxzaXplOnt3aWR0aDoxLGhlaWdodDoxfX1dfSk6dC5wcm92aWRlRXh0ZXJuYWxWaWRlbyh7ZGF0YTppLG9yaWVudGF0aW9uOnQuRXh0ZXJuYWxNZWRpYU9yaWVudGF0aW9uLkNXMH0pfSkpfShuLGUpLmNhdGNoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG49PmUuZGlzcGF0Y2hFdmVudChuZXcgaG4oXCJlcnJvclwiLHQobikpKX0odCxEZShcIkxlbnNJbWFnZVBpY2tlckVycm9yXCIpKSl9KSkpKTpYcy53YXJuKFwiQ3VycmVudCBMZW5zQ29yZSB2ZXJzaW9uIGRvZXNuJ3Qgc3VwcG9ydCBsZW5zIGNsaWVudCBpbnRlcmZhY2UgcmVxdWVzdHNcIil9Y2xhc3MgSnN7Y29uc3RydWN0b3Ioe2xlbnNlczplLG1ldHJpY3M6dH0sbixyLGksbyl7dGhpcy5jb250YWluZXI9bix0aGlzLmxlbnNDb3JlPXIsdGhpcy51cmlIYW5kbGVycz1pLHRoaXMubGVuc0NvbnRleHQ9byx0aGlzLmNyZWF0ZVNlc3Npb249KHtsaXZlUmVuZGVyVGFyZ2V0OmUscmVuZGVyV2hpbGVUYWJIaWRkZW46dH09e30pPT5mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24odCxpKXtmdW5jdGlvbiBvKGUpe3RyeXtzKHIubmV4dChlKSl9Y2F0Y2goZSl7aShlKX19ZnVuY3Rpb24gYShlKXt0cnl7cyhyLnRocm93KGUpKX1jYXRjaChlKXtpKGUpfX1mdW5jdGlvbiBzKGUpe3ZhciByO2UuZG9uZT90KGUudmFsdWUpOihyPWUudmFsdWUsciBpbnN0YW5jZW9mIG4/cjpuZXcgbigoZnVuY3Rpb24oZSl7ZShyKX0pKSkudGhlbihvLGEpfXMoKHI9ci5hcHBseShlLFtdKSkubmV4dCgpKX0pKX0odGhpcywwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgbj1uZXcgdm4scj1lPT57bi5kaXNwYXRjaEV2ZW50KG5ldyBobihcImVycm9yXCIsZSkpfTtyZXR1cm4geWllbGQgbmV3IFByb21pc2UoKChuLGkpPT57dGhpcy5sZW5zQ29yZS5pbml0aWFsaXplKHtjYW52YXM6ZSxzaG91bGRVc2VXb3JrZXI6IXQmJnRoaXMuY29udGFpbmVyLmdldChuZSkuc2hvdWxkVXNlV29ya2VyLGV4Y2VwdGlvbkhhbmRsZXI6cixvblN1Y2Nlc3M6bixvbkZhaWx1cmU6aX0pfSkpLHlpZWxkIG5ldyBQcm9taXNlKCgoZSxuKT0+e3RoaXMubGVuc0NvcmUuc2V0UmVuZGVyTG9vcE1vZGUoe21vZGU6dD90aGlzLmxlbnNDb3JlLlJlbmRlckxvb3BNb2RlLlNldFRpbWVvdXQ6dGhpcy5sZW5zQ29yZS5SZW5kZXJMb29wTW9kZS5SZXF1ZXN0QW5pbWF0aW9uRnJhbWUsb25TdWNjZXNzOmUsb25GYWlsdXJlOm59KX0pKSxmdW5jdGlvbihlLHQsbil7aWYoIWFlKHlhLHQpKXRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGFuIGFycmF5IG9mIFVyaUhhbmRsZXIgb2JqZWN0c1wiKTtmb3IoY29uc3R7dXJpOnIsaGFuZGxlUmVxdWVzdDppLGNhbmNlbFJlcXVlc3Q6b31vZiB0KXtjb25zdCB0PUFycmF5LmlzQXJyYXkocik/cjpbcl07Zm9yKGNvbnN0W3IsYV1vZiB0Lm1hcCh2YSkpZS5yZWdpc3RlclVyaUxpc3RlbmVyKHIsYSx7aGFuZGxlUmVxdWVzdDp0PT57aSh0LChuPT57aWYoIShjZShyPW4pJiZvZShyLmNvZGUpJiZyZShyLmRlc2NyaXB0aW9uKSYmcmUoci5jb250ZW50VHlwZSkmJihmdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfShyLmRhdGEpfHxmdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIE9iamVjdC5nZXRQcm90b3R5cGVPZihVaW50OEFycmF5KX0oci5kYXRhKSkmJihzZShyLm1ldGFkYXRhKXx8dWUocmUpKHIubWV0YWRhdGEpKSkpdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgVXJpUmVzcG9uc2Ugb2JqZWN0XCIpO3ZhciByO2UucHJvdmlkZVVyaVJlc3BvbnNlKHQuaWRlbnRpZmllcixuKX0pLHZ0KG4uYWN0aXZlTGVucykpfSxjYW5jZWxSZXF1ZXN0OmU9PntvJiZvKGUsdnQobi5hY3RpdmVMZW5zKSl9fSl9fSh0aGlzLmxlbnNDb3JlLHRoaXMudXJpSGFuZGxlcnMsdGhpcy5sZW5zQ29udGV4dCksUXModGhpcy5sZW5zQ29yZSxuKSx0aGlzLmNvbnRhaW5lci5jb3B5KCkucHJvdmlkZXMoSihcImV2ZW50VGFyZ2V0XCIsKCgpPT5uKSkpLnByb3ZpZGVzKGJuKS5ydW4oa3MpLnByb3ZpZGVzKE5pKS5wcm92aWRlcyhtYSkucnVuKFJzKS5nZXQobWEudG9rZW4pfSkpLHRoaXMubGVuc2VzPWUsdGhpcy5tZXRyaWNzPXR9fWNvbnN0ICRzPUooXCJDYW1lcmFLaXRcIixbZm4sd2UudG9rZW4sRWEudG9rZW4sU24udG9rZW4sX2EudG9rZW5dLCgoZSx0LG4scixpKT0+bmV3IEpzKHtsZW5zZXM6e3JlcG9zaXRvcnk6ZS5nZXQoc24udG9rZW4pfSxtZXRyaWNzOml9LGUsdCxuLHIpKSksZWM9RGUoXCJQbGF0Zm9ybU5vdFN1cHBvcnRlZFwiKSx0Yz1EZShcIkNvbmZpZ3VyYXRpb25FcnJvclwiKTtxdC5lbmNvZGUoe3VzZXJBZ2VudDpsdC51c2VyQWdlbnQsbG9jYWxlOmF0fSkuZmluaXNoKCksY29uc29sZS5pbmZvKGBTREs6ICR7cS5sfSAoJHtYLmk4fS8ke1guYyR9KWApO3ZhciBuYz1uKDM1MDA3KSxyYz1uKDQyMjM4KSxpYz1uLm4ocmMpLG9jPW4oODE5MDcpO2NvbnN0IGFjPVtcIjNmZWIxNDkyLWE2MDYtNDVmMy1iMzYzLWYxNDIyNjVkNGJmOFwiXSxzYz0oYygpLmdldExvZ2dlcihcIltDYW1lcmFLaXRdXCIpLChlLHQpPT4oe2NhbWVyYUtpdDp7aW5pdGlhbGl6ZUNhbWVyYUtpdDphc3luYygpPT57aWYoZnVuY3Rpb24oKXtjb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7cmV0dXJuIGUuZ2V0Q29udGV4dChcIndlYmdsMlwiKXx8ZS5nZXRDb250ZXh0KFwid2ViZ2xcIil9KCkpdHJ5e0koKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwiY2FtZXJhX2tpdF9pbml0aWFsaXplX2F0dGVtcHRcIn0pLFwicmVxdWVzdElkbGVDYWxsYmFja1wiaW4gd2luZG93JiZ3aW5kb3cucmVxdWVzdElkbGVDYWxsYmFjaygoYXN5bmMoKT0+e3RyeXtjb25zdCBlPWF3YWl0IFFlKCk7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFwibGVuc1BlcmZvcm1hbmNlUmVzdWx0XCIsSlNPTi5zdHJpbmdpZnkoZSkpfWNhdGNoKGUpe319KSk7Y29uc3Qgbj0oKCk9Pntjb25zdCBlPXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImxlbnNQZXJmb3JtYW5jZVJlc3VsdFwiKTtpZihlKXRyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCgwLEUuVGIpKHQse3RhZ3M6e2NvbnRleHQ6XCJjYW1lcmEta2l0XCJ9LGV4dHJhOnthY3Rpb246XCJwcmV2aW91cyBtaWNyb2JlbmNobWFyayBwYXJzZSBmYWlsZWRcIixwcmV2aW91c0JlbmNobWFyazplfX0pfX0pKCkscj1hd2FpdCBmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24odCxpKXtmdW5jdGlvbiBvKGUpe3RyeXtzKHIubmV4dChlKSl9Y2F0Y2goZSl7aShlKX19ZnVuY3Rpb24gYShlKXt0cnl7cyhyLnRocm93KGUpKX1jYXRjaChlKXtpKGUpfX1mdW5jdGlvbiBzKGUpe3ZhciByO2UuZG9uZT90KGUudmFsdWUpOihyPWUudmFsdWUsciBpbnN0YW5jZW9mIG4/cjpuZXcgbigoZnVuY3Rpb24oZSl7ZShyKX0pKSkudGhlbihvLGEpfXMoKHI9ci5hcHBseShlLFtdKSkubmV4dCgpKX0pKX0odGhpcywwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgbj1wZXJmb3JtYW5jZS5ub3coKTt2YXIgcixpO210KGllKGUuYXBpVG9rZW4pLHRjKG5ldyBFcnJvcihcIlVuc2FmZSBhcGlUb2tlblwiKSkpLGZ1bmN0aW9uKCl7Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO2lmKCFlLmdldENvbnRleHQoXCJ3ZWJnbDJcIikmJiFlLmdldENvbnRleHQoXCJ3ZWJnbFwiKSl0aHJvdyBlYyhuZXcgRXJyb3IoXCJDYW5ub3QgYm9vdHN0cmFwIHRoZSBTREsgYmVjYXVzZSB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IFdlYkdMIGNhbnZhcyByZW5kZXJpbmcgY29udGV4dC5cIikpfSgpLGUubG9nZ2VyJiYocj1lLmxvZ2dlcixoZT1udWxsIT09KGk9dmVbcl0pJiZ2b2lkIDAhPT1pP2k6bWUpO2NvbnN0IG89KGU9PkoobmUsKCgpPT57Y29uc3QgdD1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse2xlbnNQZXJmb3JtYW5jZTplLmxlbnNQZXJmb3JtYW5jZSBpbnN0YW5jZW9mIFByb21pc2U/ZS5sZW5zUGVyZm9ybWFuY2UuY2F0Y2goKCgpPT4kLmxlbnNQZXJmb3JtYW5jZSkpOmUubGVuc1BlcmZvcm1hbmNlfSk7cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCQpLFEodCkpLGZ1bmN0aW9uKCl7aWYoIXRlKCkpcmV0dXJue307Y29uc3QgZT17d2FzbUVuZHBvaW50T3ZlcnJpZGU6d2luZG93W2VlXSxsb2dnZXI6XCJjb25zb2xlXCJ9O3JldHVybiBjb25zb2xlLndhcm4oXCJDb25maWd1cmF0aW9uIG92ZXJyaWRlcyBhcHBsaWVkXCIsZSksZX0oKSl9KSkpKGUpLGE9cG4ucHJvdmlkZXMobykucHJvdmlkZXMoQWUpLnByb3ZpZGVzKFRpKS5wcm92aWRlcyhmdCkucHJvdmlkZXMoRWEpLHM9dD90KGEpOmEsYz15aWVsZCBzLnByb3ZpZGVzKHdlKS5nZXQod2UudG9rZW4pLGw9cy5wcm92aWRlcyhKKHdlLnRva2VuLCgoKT0+YykpKS5wcm92aWRlcyhfYSkucHJvdmlkZXModXQpLnByb3ZpZGVzKEVpKS5wcm92aWRlcyhTbikucHJvdmlkZXMoc24pLnByb3ZpZGVzKEphKS5wcm92aWRlcyhkcykucHJvdmlkZXMoYmkpLnByb3ZpZGVzKENpKS5wcm92aWRlcygkcykucnVuKEFzKSx1PWwuZ2V0KCRzLnRva2VuKSxkPXBlcmZvcm1hbmNlLm5vdygpLW47cmV0dXJuIGwuZ2V0KGRzLnRva2VuKS50aW1lcihcImJvb3RzdHJhcF90aW1lXCIsZCksdX0pKX0oe2FwaVRva2VuOlwiZXlKaGJHY2lPaUpJVXpJMU5pSXNJbXRwWkNJNklrTmhiblpoYzFNeVUwaE5RVU5RY205a0lpd2lkSGx3SWpvaVNsZFVJbjAuZXlKaGRXUWlPaUpqWVc1MllYTXRZMkZ1ZG1GellYQnBJaXdpYVhOeklqb2lZMkZ1ZG1GekxYTXljM1J2YTJWdUlpd2libUptSWpveE5qUTVORFl5TkRjM0xDSnpkV0lpT2lKaE9XWmpaalU0TVMweE1EWTNMVFF4T1dFdE9UTmxPQzA0WmpWalpqZ3pabVZqWldKLVVGSlBSRlZEVkVsUFRuNWhZV0kzWmpFeE55MWtOVFZsTFRRM1lqUXRZVFJpWWkweE16UXpPV0U0TkRjM05EY2lmUS5kRVp6TG4wQ2x1VlFtQlpJSkN3V0lwYndjNGVNek5YVGdXbUdWTjREd0NJXCIsbGVuc1BlcmZvcm1hbmNlOm59KTtyLm1ldHJpY3MuYWRkRXZlbnRMaXN0ZW5lcihcImxlbnNWaWV3XCIsKGU9PntsZXR7ZGV0YWlsOnR9PWU7KDAsbmMucjEpKHQubGVuc0lkLHQudmlld1RpbWVTZWMpfSkpLEkoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwiY2FtZXJhX2tpdF9pbml0aWFsaXplX3N1Y2Nlc3NcIn0pLGUoKGU9PntlLmNhbWVyYUtpdC5jbGllbnQ9cn0pKTtjb25zdHtmZXRjaExlbnNlczppfT10KCkuY2FtZXJhS2l0O2koKX1jYXRjaChlKXtJKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcImNhbWVyYV9raXRfaW5pdGlhbGl6ZV9mYWlsdXJlXCIsZGltZW5zaW9uczp7cmVhc29uOigwLG9jLm84KShlLHtzYW5pdGl6ZUZvck1ldHJpYzohMH0pfX0pfWVsc2V7Y29uc3QgZT1uZXcoaWMoKSk7SSgpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJjYW1lcmFfa2l0X3dlYmdsX25vdF9hdmFpbGFibGVcIixkaW1lbnNpb25zOnticm93c2VyOkpTT04uc3RyaW5naWZ5KGUuZ2V0QnJvd3NlcigpKSxvczpKU09OLnN0cmluZ2lmeShlLmdldE9TKCkpLGVuZ2luZTpKU09OLnN0cmluZ2lmeShlLmdldEVuZ2luZSgpKSx3ZWJnbDJDb250ZXh0RGVmaW5lZDpTdHJpbmcoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQpfX0pfX0sZGVzdHJveUNhbWVyYUtpdDooKT0+e2UoKGU9PntlLmNhbWVyYUtpdC5jYW1lcmFLaXRTZXNzaW9uPy5kZXN0cm95KCksZGVsZXRlIGUuY2FtZXJhS2l0LmNsaWVudCxkZWxldGUgZS5jYW1lcmFLaXQuY2FtZXJhS2l0U2Vzc2lvbn0pKX0sc3RhcnRDYW1lcmFLaXRTZXNzaW9uOmFzeW5jKCk9Pntjb25zdHtjYW1lcmFLaXQ6e2NsaWVudDpuLGNhbWVyYUtpdFNlc3Npb246aX19PXQoKTtpZihpKXJldHVybjtpZighbilyZXR1cm4gdm9pZCBJKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcImNhbWVyYV9raXRfc2Vzc2lvbl9zdGFydF9iZWZvcmVfY2xpZW50XCJ9KTtsZXQgbzt0cnl7bz1hd2FpdCBuLmNyZWF0ZVNlc3Npb24oe3JlbmRlcldoaWxlVGFiSGlkZGVuOiEwfSksby5ldmVudHMuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsKGU9Pnt9KSl9Y2F0Y2godCl7dGhyb3cgSSgpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJjYW1lcmFfa2l0X2NyZWF0ZV9zZXNzaW9uX2ZhaWx1cmVcIixkaW1lbnNpb25zOntyZWFzb246KDAsb2MubzgpKHQse3Nhbml0aXplRm9yTWV0cmljOiEwfSl9fSksZSgoZT0+e2RlbGV0ZSBlLmNhbWVyYUtpdC5jbGllbnR9KSksSSgpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJjYW1lcmFfa2l0X2NyZWF0ZV9zZXNzaW9uX2ZhaWx1cmUuZHdlYl8zNTY2XCIsZGltZW5zaW9uczp7cmVhc29uOigwLG9jLm84KSh0LHtzYW5pdGl6ZUZvck1ldHJpYzohMH0pLG1lc3NhZ2U6KDAsb2MuZSQpKHQse3Nhbml0aXplRm9yTWV0cmljOiEwfSkucmVwbGFjZUFsbChcIiBcIixcIl9cIil9fSksdH1lKChlPT57ZS5jYW1lcmFLaXQuY2FtZXJhS2l0U2Vzc2lvbj0oMCxyLmNBKShvKX0pKSxvLnBsYXkoXCJjYXB0dXJlXCIpfSxzZXRDYW1lcmFLaXRTb3VyY2U6YXN5bmMgbj0+e2NvbnN0e2NhbWVyYUtpdDp7Y2FtZXJhS2l0U2Vzc2lvbjpyfX09dCgpO2lmKCFyKXJldHVybjt0cnl7Y29uc3QgZT1pYShuLHt0cmFuc2Zvcm06UW8uTWlycm9yWCxmcHNMaW1pdDozMH0pO2F3YWl0IHIuc2V0U291cmNlKGUpfWNhdGNoKHQpe3Rocm93IEkoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwiY2FtZXJhX2tpdF9zZXRfc291cmNlX2ZhaWx1cmVcIixkaW1lbnNpb25zOntyZWFzb246KDAsb2MubzgpKHQse3Nhbml0aXplRm9yTWV0cmljOiEwfSl9fSksZSgoZT0+e2RlbGV0ZSBlLmNhbWVyYUtpdC5jYW1lcmFLaXRTZXNzaW9uLGRlbGV0ZSBlLmNhbWVyYUtpdC5jbGllbnR9KSksSSgpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJjYW1lcmFfa2l0X3NldF9zb3VyY2VfZmFpbHVyZS5kd2ViXzM1NjZcIixkaW1lbnNpb25zOntyZWFzb246KDAsb2MubzgpKHQse3Nhbml0aXplRm9yTWV0cmljOiEwfSksbWVzc2FnZTooMCxvYy5lJCkodCx7c2FuaXRpemVGb3JNZXRyaWM6ITB9KS5yZXBsYWNlQWxsKFwiIFwiLFwiX1wiKX19KSx0fWNvbnN0IGk9ci5vdXRwdXQuY2FwdHVyZTtsZXQgbz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNhbWVyYUtpdENvbnRhaW5lclwiKTtvfHwobz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobyksby5zdHlsZS5wb3NpdGlvbj1cImZpeGVkXCIsby5zdHlsZS5vcGFjaXR5PVwiMFwiLG8uc3R5bGUudG9wPVwiMFwiLG8uc3R5bGUubGVmdD1cIjBcIixvLnN0eWxlLnBvaW50ZXJFdmVudHM9XCJub25lXCIsby5pZD1cImNhbWVyYUtpdENvbnRhaW5lclwiLG8uYXBwZW5kQ2hpbGQoaSkpLGUoKGU9Pntjb25zdCB0PXIub3V0cHV0LmNhcHR1cmU7ZS5jYW1lcmFLaXQudmlkZW9NaXJyb3JpbmdDYW52YXNDYWxsYmFjaz0oKT0+dCxlLmNhbWVyYUtpdC5zdHJlYW09dC5jYXB0dXJlU3RyZWFtKCl9KSl9LGRlc3Ryb3lDYW1lcmFLaXRTZXNzaW9uOmFzeW5jKCk9Pntjb25zdCBuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY2FtZXJhS2l0Q29udGFpbmVyXCIpO24/LnBhcmVudE5vZGU/LnJlbW92ZUNoaWxkKG4pLGF3YWl0KHQoKS5jYW1lcmFLaXQuY2FtZXJhS2l0U2Vzc2lvbj8uZGVzdHJveSgpKSxlKChlPT57ZGVsZXRlIGUuY2FtZXJhS2l0LmNhbWVyYUtpdFNlc3Npb24sZGVsZXRlIGUuY2FtZXJhS2l0LnZpZGVvTWlycm9yaW5nQ2FudmFzQ2FsbGJhY2t9KSl9LGxlbnNlczp7fSxjbGVhckNhbnZhczooKT0+e2NvbnN0IGU9dCgpLmNhbWVyYUtpdC5jYW1lcmFLaXRTZXNzaW9uPy5vdXRwdXQuY2FwdHVyZSxuPWU/LmdldENvbnRleHQoXCJ3ZWJnbDJcIik7ZSYmbiYmKG4uY2xlYXJDb2xvcigwLDAsMCwwKSxuLmNsZWFyKG4uQ09MT1JfQlVGRkVSX0JJVCkpfSxmZXRjaExlbnNlczphc3luYygpPT57Y29uc3R7Y2FtZXJhS2l0OntjbGllbnQ6bn19PXQoKTtpZihuKXRyeXtJKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcImNhbWVyYV9raXRfZmV0Y2hfbGVuc2VzX2F0dGVtcHRcIn0pO2NvbnN0e2xlbnNlczp0fT1hd2FpdCBuLmxlbnNlcy5yZXBvc2l0b3J5LmxvYWRMZW5zR3JvdXBzKGFjKTtJKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcImNhbWVyYV9raXRfZmV0Y2hfbGVuc2VzX3N1Y2Nlc3NcIn0pO2xldCByPXQ7ZSgoZT0+e2UuY2FtZXJhS2l0LmxlbnNlcz16KCkociwoZT0+ZS5pZCkpfSkpfWNhdGNoKGUpe0koKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwiY2FtZXJhX2tpdF9mZXRjaF9sZW5zZXNfZmFpbHVyZVwiLGRpbWVuc2lvbnM6e3JlYXNvbjooMCxvYy5vOCkoZSx7c2FuaXRpemVGb3JNZXRyaWM6ITB9KX19KX19LHNldEN1cnJlbnRMZW5zOmFzeW5jIG49Pntjb25zdHtjYW1lcmFLaXQ6e2NhbWVyYUtpdFNlc3Npb246cixsZW5zZXM6aSxyZW1vdmVMZW5zOm99fT10KCk7aWYoIXIpcmV0dXJuO2NvbnN0IGE9biYmaVtuXTtpZihuJiZhKXRyeXtJKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcImNhbWVyYV9raXRfbGVuc19sb2FkX2F0dGVtcHRcIixkaW1lbnNpb25zOntsZW5zSWQ6bn19KSxhd2FpdCByLmFwcGx5TGVucyhhKSwoMCxFLm5fKSh7Y2F0ZWdvcnk6XCJsZW5zZXNcIixtZXNzYWdlOmBhcHBsaWVkICR7YS5pZH06ICR7YS5uYW1lfWB9KSxJKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcImNhbWVyYV9raXRfbGVuc19sb2FkX3N1Y2Nlc3NcIixkaW1lbnNpb25zOntsZW5zSWQ6bn19KX1jYXRjaCh0KXt0aHJvdyBlKChlPT57ZGVsZXRlIGUuY2FtZXJhS2l0LmxlbnNlc1tuXX0pKSxvKCkuY2F0Y2goKGU9PnsoMCxFLlRiKShlLHt0YWdzOntjb250ZXh0OlwibGVuc2VzXCJ9LGV4dHJhOnthY3Rpb246XCJyZW1vdmUgbGVucyBhZnRlciBhcHBseSB0aHJvd3NcIixcImxlbnMgaWRcIjpufX0pfSkpLEkoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwiY2FtZXJhX2tpdF9sZW5zX2xvYWRfZmFpbHVyZVwiLGRpbWVuc2lvbnM6e2xlbnNJZDpuLHJlYXNvbjooMCxvYy5vOCkodCx7c2FuaXRpemVGb3JNZXRyaWM6ITB9KX19KSxJKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcImNhbWVyYV9raXRfbGVuc19sb2FkX2ZhaWx1cmUuZHdlYl8zNTY2XCIsZGltZW5zaW9uczp7cmVhc29uOigwLG9jLm84KSh0LHtzYW5pdGl6ZUZvck1ldHJpYzohMH0pLG1lc3NhZ2U6KDAsb2MuZSQpKHQse3Nhbml0aXplRm9yTWV0cmljOiEwfSkucmVwbGFjZUFsbChcIiBcIixcIl9cIil9fSksdH1lbHNlIHRyeXthd2FpdCByLnJlbW92ZUxlbnMoKX1jYXRjaChlKXtJKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcImNhbWVyYV9raXRfbGVuc19mYWlsX3RvX3JlbW92ZVwiLGRpbWVuc2lvbnM6e3JlYXNvbjooMCxvYy5vOCkoZSx7c2FuaXRpemVGb3JNZXRyaWM6ITB9KX19KX1lKChlPT57ZS5jYW1lcmFLaXQuY3VycmVudExlbnNJZD1ufSkpfSxyZW1vdmVMZW5zOmFzeW5jKCk9Pnt0cnl7YXdhaXQgdCgpLmNhbWVyYUtpdC5zZXRDdXJyZW50TGVucyh2b2lkIDApfWNhdGNoKGUpe3Rocm93IEkoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwiY2FtZXJhX2tpdF9yZW1vdmVfbGVuc19mYWlsdXJlXCJ9KSxJKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcImNhbWVyYV9raXRfcmVtb3ZlX2xlbnNfZmFpbHVyZS5kd2ViXzM1NjZcIixkaW1lbnNpb25zOntyZWFzb246KDAsb2MubzgpKGUse3Nhbml0aXplRm9yTWV0cmljOiEwfSksbWVzc2FnZTooMCxvYy5lJCkoZSx7c2FuaXRpemVGb3JNZXRyaWM6ITB9KS5yZXBsYWNlQWxsKFwiIFwiLFwiX1wiKX19KSxlfX0sc2V0UGxhY2Vob2xkZXJDYXJvdXNlbFNlbGVjdGVkTGVuc0lkOnQ9PntlKChlPT57ZS5jYW1lcmFLaXQucGxhY2Vob2xkZXJDYXJvdXNlbExlbnNJZD10fSkpfSxzaHVmZmxlTGVuc2VzOigpPT57Y29uc3Qgbj1ZKCkoT2JqZWN0LnZhbHVlcyh0KCkuY2FtZXJhS2l0LmxlbnNlcykpO0koKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwiY2FtZXJhX2tpdF9sZW5zZXNfc2h1ZmZsZWRcIn0pLGUoKGU9PntlLmNhbWVyYUtpdC5sZW5zZXM9eigpKG4sKGU9PmUuaWQpKX0pKX19fSkpO3ZhciBjYz1uKDk2NTExKTtjKCkuZ2V0TG9nZ2VyKFwiW0xvY2FsIFNldHRpbmdzXVwiKTtjb25zdCBsYz1cImxvY2FsU2V0dGluZ3NcIix1Yz1gJHtsY30uc291bmRFZmZlY3RzYCxkYz1gJHtsY30uY2hhdFNvdW5kRWZmZWN0c2AsZmM9YCR7bGN9LmFwcFRoZW1lYCxwYz17W3VjXTohMCxbZGNdOiEwLFtmY106XCJzeXN0ZW1cIn07YXN5bmMgZnVuY3Rpb24gbWMoZSx0KXt0cnl7YXdhaXQoMCxjYy50OCkoZSx0KX1jYXRjaChlKXt9fWFzeW5jIGZ1bmN0aW9uIGhjKGUpe3RyeXtyZXR1cm4gYXdhaXQoMCxjYy5VMikoZSk/P3BjW2VdfWNhdGNoKHQpe3JldHVybiBwY1tlXX19KDAscy5nZXRMb2dnZXIpKFwiW0xvY2FsU2V0dGluZ3NdXCIpO2NvbnN0IHZjPVwib25ib2FyZGluZy1kaXNtaXNzZWRcIixnYz1cInNlZW4tc2FmYXJpLXdlbGNvbWUtbW9kYWxcIix5Yz1cInByb21wdC1zYWZhcmktcGVybWlzc2lvblwiLEVjPShlLHQpPT4oe2xvY2FsU2V0dGluZ3M6e2luaXRpYWxpemU6YXN5bmMoKT0+e2NvbnN0W3QsbixyXT1hd2FpdCBQcm9taXNlLmFsbChbaGModWMpLGhjKGRjKSxoYyhmYyldKTtJKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpgYXBwX3RoZW1lXyR7cn1gfSksZSgoZT0+e2UubG9jYWxTZXR0aW5ncy5zb3VuZEVmZmVjdHNFbmFibGVkPXQsZS5sb2NhbFNldHRpbmdzLmNoYXRTb3VuZEVmZmVjdHNFbmFibGVkPW4sZS5sb2NhbFNldHRpbmdzLmFwcFRoZW1lPXJ9KSl9LHNvdW5kRWZmZWN0c0VuYWJsZWQ6ITAsY2hhdFNvdW5kRWZmZWN0c0VuYWJsZWQ6ITAsc2V0U291bmRFZmZlY3RzRW5hYmxlZDphc3luYyB0PT57ZSgoZT0+e2UubG9jYWxTZXR0aW5ncy5zb3VuZEVmZmVjdHNFbmFibGVkPXQsZS5sb2NhbFNldHRpbmdzLmNoYXRTb3VuZEVmZmVjdHNFbmFibGVkPXR9KSksYXdhaXQgbWModWMsdCksYXdhaXQgbWMoZGMsdCl9LHNldENoYXRTb3VuZEVmZmVjdHNFbmFibGVkOmFzeW5jIHQ9PntlKChlPT57ZS5sb2NhbFNldHRpbmdzLmNoYXRTb3VuZEVmZmVjdHNFbmFibGVkPXR9KSksYXdhaXQgbWMoZGMsdCl9LGlzT25Cb2FyZERpc21pc3NlZDpcInRydWVcIj09PXdpbmRvdy5sb2NhbFN0b3JhZ2VbdmNdLGhhc1NlZW5TYWZhcmlXZWxjb21lTW9kYWw6XCJ0cnVlXCI9PT13aW5kb3cubG9jYWxTdG9yYWdlW2djXSxtYXJrU2FmYXJpV2VsY29tZU1vZGFsU2VlbjooKT0+e3dpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShnYyxcInRydWVcIiksZSgoZT0+e2UubG9jYWxTZXR0aW5ncy5oYXNTZWVuU2FmYXJpV2VsY29tZU1vZGFsPSEwfSkpfSxjYW5Qcm9tcHRlZFNhZmFyaVBlcm1pc3Npb246XCJ0cnVlXCI9PT13aW5kb3cubG9jYWxTdG9yYWdlW3ljXSxtYXJrSGFzUHJvbXB0ZWRTYWZhcmlQZXJtaXNzaW9uOigpPT57d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKHljLFwidHJ1ZVwiKSxlKChlPT57ZS5sb2NhbFNldHRpbmdzLmNhblByb21wdGVkU2FmYXJpUGVybWlzc2lvbj0hMH0pKX0scmVtb3ZlSXNPbkJvYXJkRGlzbWlzc2VkOigpPT57dm9pZCAwIT09d2luZG93LmxvY2FsU3RvcmFnZVt2Y10mJndpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh2Yyl9LGFwcFRoZW1lOlwic3lzdGVtXCIsc2V0QXBwVGhlbWU6YXN5bmMgdD0+KGUoKGU9PntlLmxvY2FsU2V0dGluZ3MuYXBwVGhlbWU9dH0pKSxtYyhmYyx0KSl9fSksX2M9ZT0+KHtsb2dnZXJzU2V0dGluZzp7c2hvdzohMSxzaG93TG9nZ2Vyc1NldHRpbmdNZW51OigpPT57ZSgoZT0+e2UubG9nZ2Vyc1NldHRpbmcuc2hvdz0hMH0pKX0saGlkZUxvZ2dlcnNTZXR0aW5nTWVudTooKT0+e2UoKGU9PntlLmxvZ2dlcnNTZXR0aW5nLnNob3c9ITF9KSl9fX0pO3ZhciBJYz1uKDYwNDk2KSxTYz1uKDUwMzM5KSxiYz1uKDY0NTc4KSxUYz1uKDM4OTcwKSxDYz1uKDg4MDM3KSxBYz1uKDkzNDkpLFJjPW4oOTE3MTcpO2Z1bmN0aW9uIGtjKGUpe3JldHVybiBuZXcgTWFwKGZ1bmN0aW9uKihlKXtmb3IoY29uc3RbdCxuXW9mIGUpeWllbGRbKDAsTS5PWSkodCksbl19KGUpKX1jKCkuZ2V0TG9nZ2VyKFwiUHJlc2VuY2VTdG9yZVwiKTtjb25zdCBPYz0oZSx0KT0+KHtwcmVzZW5jZTp7Y3JlYXRlUHJlc2VuY2VTZXNzaW9uOm49PntpZihJKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcInByZXNlbmNlX2NyZWF0ZV9zZXNzaW9uX2F0dGVtcHRcIn0pLCgwLEFjLiQ3KShuKSh0KCkpKXJldHVybiB2b2lkIEkoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwicHJlc2VuY2VfY3JlYXRlX3Nlc3Npb25fZmFpbHVyZVwiLGRpbWVuc2lvbnM6e3JlYXNvbjpcImR1cGxpY2F0ZV9zZXNzaW9uXCJ9fSk7Y29uc3Qgcj0oMCxUYy55SykodCgpKSx7Y2xpZW50Oml9PXQoKS50YWxrO2lmKCFpKXJldHVybiB2b2lkIEkoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwicHJlc2VuY2VfY3JlYXRlX3Nlc3Npb25fZmFpbHVyZVwiLGRpbWVuc2lvbnM6e3JlYXNvbjpcIm5vX3RhbGtjb3JlXCJ9fSk7Y29uc3Qgbz0oMCxNLk1jKShuKSxhPSgwLENjLmw1KShuKSh0KCkpPy5wYXJ0aWNpcGFudHMubWFwKChlPT5lLnBhcnRpY2lwYW50SWQpKS5maWx0ZXIoKGU9PmUhPT1yKSkubWFwKE0uTWMpLHM9bmV3IFNldChhKSxjPWkuY3JlYXRlUHJlc2VuY2VTZXNzaW9uKG8se29uU3RhdGVDaGFuZ2VkOnQ9PntJKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcInByZXNlbmNlX3JlY2VpdmVkX3N0YXRlX2NoYW5nZVwifSksZSgoZT0+e2UucHJlc2VuY2Uuc3RhdGVQZXJDb252LnNldChuLGtjKHQucmVtb3RlVXNlclN0YXRlcykpfSkpfX0scyk7Yy5hY3RpdmF0ZSgpLGUoKGU9PntlLnByZXNlbmNlLnNlc3Npb25QZXJDb252LnNldChuLGMpLGUucHJlc2VuY2Uuc3RhdGVQZXJDb252LnNldChuLGtjKGMuZ2V0U3RhdGUoKS5yZW1vdGVVc2VyU3RhdGVzKSl9KSksSSgpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJwcmVzZW5jZV9jcmVhdGVfc2Vzc2lvbl9zdWNjZXNzXCJ9KX0sZGVzdHJveVByZXNlbmNlU2Vzc2lvbjpuPT57SSgpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJwcmVzZW5jZV9kZXN0cm95X3Nlc3Npb25fYXR0ZW1wdFwifSk7Y29uc3Qgcj0oMCxBYy4kNykobikodCgpKTtyPyhyLmRlYWN0aXZhdGUoKSxyLmRpc3Bvc2UoKSxlKChlPT57ZS5wcmVzZW5jZS5zZXNzaW9uUGVyQ29udi5kZWxldGUobiksZS5wcmVzZW5jZS5zdGF0ZVBlckNvbnYuZGVsZXRlKG4pfSkpLEkoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwicHJlc2VuY2VfZGVzdHJveV9zZXNzaW9uX3N1Y2Nlc3NcIn0pKTpJKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcInByZXNlbmNlX2Rlc3Ryb3lfc2Vzc2lvbl9mYWlsdXJlXCIsZGltZW5zaW9uczp7cmVhc29uOlwic2Vzc2lvbl9ub3RfZXhpc3RcIn19KX0sYnJvYWRjYXN0VHlwaW5nQWN0aXZpdHk6KGUsbik9Pntjb25zdCByPSgwLEFjLiQ3KShlKSh0KCkpO3ImJnIucHJvY2Vzc1R5cGluZ0FjdGl2aXR5KG4pfSxvbkFjdGl2ZUNvbnZlcnNhdGlvbkluZm9VcGRhdGVkOnQ9PntJKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcInByZXNlbmNlX2FjdGl2ZV9jb252ZXJzYXRpb25faW5mb191cGRhdGVkXCJ9KSxlKChlPT57ZS5wcmVzZW5jZS5hY3RpdmVDb252ZXJzYXRpb25JbmZvPWtjKHQpfSkpfSxzZXRBd2F5U3RhdGU6dD0+e2UoKGU9PntlLnByZXNlbmNlLmF3YXlTdGF0ZT10fSkpfSxzZXNzaW9uUGVyQ29udjpuZXcgTWFwLHN0YXRlUGVyQ29udjpuZXcgTWFwLGFjdGl2ZUNvbnZlcnNhdGlvbkluZm86bmV3IE1hcCxhd2F5U3RhdGU6ZG9jdW1lbnQuaGFzRm9jdXMoKT9SYy5kLlByZXNlbnQ6UmMuZC5Bd2F5fX0pLE5jPWU9Pih7cmVwbHk6e3JlcGx5TWVzc2FnZUJ5Q29udmVyc2F0aW9uSWQ6bmV3IE1hcCxzZXRSZXBseU1lc3NhZ2U6KHQsbik9PntlKChlPT57bj9lLnJlcGx5LnJlcGx5TWVzc2FnZUJ5Q29udmVyc2F0aW9uSWQuc2V0KHQsbik6ZS5yZXBseS5yZXBseU1lc3NhZ2VCeUNvbnZlcnNhdGlvbklkLmRlbGV0ZSh0KX0pKX19fSk7dmFyIHdjPW4oNTg4NjEpLERjPW4oNDEzMSksUGM9bigyNzU0OCksTWM9bigzMzY3KTtjKCkuZ2V0TG9nZ2VyKFwiW3dhc21dXCIpO3ZhciBMYz1uKDgwNTUwKTtmdW5jdGlvbiBVYyhlKXtjb25zdCB0PSgwLExjLmo5KShNZC5nZXRTdGF0ZSgpKTtpZighdCl0aHJvdyBuZXcgRXJyb3IoXCJubyB3YXNtIG1vZHVsZSBpbiBzdGF0ZVwiKTtyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3Q+MWU0JiZJKCkuYWRkSGlzdG9ncmFtKHttZXRyaWNzTmFtZTpcIndhc20uYWxsb2NcIix2YWx1ZTp0fSk7dHJ5e3JldHVybiBlLmFsbG9jYXRlV2FzbUJ1ZmZlcih0KX1jYXRjaChlKXt0aHJvdyBJKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcIndhc20uZmFpbGVkX2FsbG9jXCJ9KSxJKCkuYWRkSGlzdG9ncmFtKHttZXRyaWNzTmFtZTpcIndhc20uZmFpbGVkX2FsbG9jXCIsdmFsdWU6dH0pLGUgaW5zdGFuY2VvZiBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3ImJlwibWVtb3J5IGFjY2VzcyBvdXQgb2YgYm91bmRzXCI9PT1lLm1lc3NhZ2UmJihJKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcIndhc20uZmFpbGVkX2FsbG9jLm91dF9vZl9ib3VuZHNcIn0pLG4oe3R5cGU6XCJvdXRfb2ZfYm91bmRzXCIsbWVzc2FnZTpcImFsbG9jIGZhaWxlZFwiLGNvbnRleHQ6TWMuRn0pKSxlfX0odCxlLCgwLExjLlFlKShNZC5nZXRTdGF0ZSgpKSl9YygpLmdldExvZ2dlcihcIltEdXBsZXhQcm94eUNsaWVudF1cIik7dmFyIHhjLEZjLEJjLFZjPW4oNTE1NzYpLEdjPW4oNTYyNDEpLEhjPW4oNTcyODEpLFdjPW4oMTM4MTkpOyFmdW5jdGlvbihlKXtlW2UuTkVUV09SSz0wXT1cIk5FVFdPUktcIixlW2UuQVVUSD0xXT1cIkFVVEhcIixlW2UuRkFUQUw9Ml09XCJGQVRBTFwiLGVbZS5JTlZBTElEX1NUQVRFPTNdPVwiSU5WQUxJRF9TVEFURVwifSh4Y3x8KHhjPXt9KSksZnVuY3Rpb24oZSl7ZVtlLk1PQklMRT0wXT1cIk1PQklMRVwiLGVbZS5XRUI9MV09XCJXRUJcIn0oRmN8fChGYz17fSkpLGZ1bmN0aW9uKGUpe2VbZS5WSURFTz0wXT1cIlZJREVPXCIsZVtlLlNDUkVFTj0xXT1cIlNDUkVFTlwifShCY3x8KEJjPXt9KSk7dmFyIGpjPW4oMjY3MjkpO2NsYXNzIFpjIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5uYW1lPVwiVGltZW91dEVycm9yXCJ9fWNsYXNzIHpjIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLm5hbWU9XCJBYm9ydEVycm9yXCIsdGhpcy5tZXNzYWdlPWV9fWNvbnN0IEtjPWU9PnZvaWQgMD09PWdsb2JhbFRoaXMuRE9NRXhjZXB0aW9uP25ldyB6YyhlKTpuZXcgRE9NRXhjZXB0aW9uKGUpLFljPWU9Pntjb25zdCB0PXZvaWQgMD09PWUucmVhc29uP0tjKFwiVGhpcyBvcGVyYXRpb24gd2FzIGFib3J0ZWQuXCIpOmUucmVhc29uO3JldHVybiB0IGluc3RhbmNlb2YgRXJyb3I/dDpLYyh0KX07dmFyIHFjLFhjPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKFwiYVwiPT09biYmIXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P2UhPT10fHwhcjohdC5oYXMoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtyZXR1cm5cIm1cIj09PW4/cjpcImFcIj09PW4/ci5jYWxsKGUpOnI/ci52YWx1ZTp0LmdldChlKX07Y2xhc3MgUWN7Y29uc3RydWN0b3IoKXtxYy5zZXQodGhpcyxbXSl9ZW5xdWV1ZShlLHQpe2NvbnN0IG49e3ByaW9yaXR5Oih0PXtwcmlvcml0eTowLC4uLnR9KS5wcmlvcml0eSxydW46ZX07aWYodGhpcy5zaXplJiZYYyh0aGlzLHFjLFwiZlwiKVt0aGlzLnNpemUtMV0ucHJpb3JpdHk+PXQucHJpb3JpdHkpcmV0dXJuIHZvaWQgWGModGhpcyxxYyxcImZcIikucHVzaChuKTtjb25zdCByPWZ1bmN0aW9uKGUsdCxuKXtsZXQgcj0wLGk9ZS5sZW5ndGg7Zm9yKDtpPjA7KXtjb25zdCBuPU1hdGgudHJ1bmMoaS8yKTtsZXQgYT1yK247bz1lW2FdLHQucHJpb3JpdHktby5wcmlvcml0eTw9MD8ocj0rK2EsaS09bisxKTppPW59dmFyIG87cmV0dXJuIHJ9KFhjKHRoaXMscWMsXCJmXCIpLG4pO1hjKHRoaXMscWMsXCJmXCIpLnNwbGljZShyLDAsbil9ZGVxdWV1ZSgpe2NvbnN0IGU9WGModGhpcyxxYyxcImZcIikuc2hpZnQoKTtyZXR1cm4gbnVsbD09ZT92b2lkIDA6ZS5ydW59ZmlsdGVyKGUpe3JldHVybiBYYyh0aGlzLHFjLFwiZlwiKS5maWx0ZXIoKHQ9PnQucHJpb3JpdHk9PT1lLnByaW9yaXR5KSkubWFwKChlPT5lLnJ1bikpfWdldCBzaXplKCl7cmV0dXJuIFhjKHRoaXMscWMsXCJmXCIpLmxlbmd0aH19cWM9bmV3IFdlYWtNYXA7dmFyIEpjLCRjLGVsLHRsLG5sLHJsLGlsLG9sLGFsLHNsLGNsLGxsLHVsLGRsLGZsLHBsLG1sLGhsLHZsLGdsLHlsLEVsLF9sLElsLFNsLGJsLFRsPWZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYoXCJtXCI9PT1yKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7aWYoXCJhXCI9PT1yJiYhaSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/ZSE9PXR8fCFpOiF0LmhhcyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7cmV0dXJuXCJhXCI9PT1yP2kuY2FsbChlLG4pOmk/aS52YWx1ZT1uOnQuc2V0KGUsbiksbn0sQ2w9ZnVuY3Rpb24oZSx0LG4scil7aWYoXCJhXCI9PT1uJiYhcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/ZSE9PXR8fCFyOiF0LmhhcyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO3JldHVyblwibVwiPT09bj9yOlwiYVwiPT09bj9yLmNhbGwoZSk6cj9yLnZhbHVlOnQuZ2V0KGUpfTtjbGFzcyBBbCBleHRlbmRzIEVycm9ye31jbGFzcyBSbCBleHRlbmRzIGpje2NvbnN0cnVjdG9yKGUpe3ZhciB0LG4scixpO2lmKHN1cGVyKCksSmMuYWRkKHRoaXMpLCRjLnNldCh0aGlzLHZvaWQgMCksZWwuc2V0KHRoaXMsdm9pZCAwKSx0bC5zZXQodGhpcywwKSxubC5zZXQodGhpcyx2b2lkIDApLHJsLnNldCh0aGlzLHZvaWQgMCksaWwuc2V0KHRoaXMsMCksb2wuc2V0KHRoaXMsdm9pZCAwKSxhbC5zZXQodGhpcyx2b2lkIDApLHNsLnNldCh0aGlzLHZvaWQgMCksY2wuc2V0KHRoaXMsdm9pZCAwKSxsbC5zZXQodGhpcywwKSx1bC5zZXQodGhpcyx2b2lkIDApLGRsLnNldCh0aGlzLHZvaWQgMCksZmwuc2V0KHRoaXMsdm9pZCAwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcInRpbWVvdXRcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksIShcIm51bWJlclwiPT10eXBlb2YoZT17Y2FycnlvdmVyQ29uY3VycmVuY3lDb3VudDohMSxpbnRlcnZhbENhcDpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksaW50ZXJ2YWw6MCxjb25jdXJyZW5jeTpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksYXV0b1N0YXJ0OiEwLHF1ZXVlQ2xhc3M6UWMsLi4uZX0pLmludGVydmFsQ2FwJiZlLmludGVydmFsQ2FwPj0xKSl0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcXGBpbnRlcnZhbENhcFxcYCB0byBiZSBhIG51bWJlciBmcm9tIDEgYW5kIHVwLCBnb3QgXFxgJHtudWxsIT09KG49bnVsbD09PSh0PWUuaW50ZXJ2YWxDYXApfHx2b2lkIDA9PT10P3ZvaWQgMDp0LnRvU3RyaW5nKCkpJiZ2b2lkIDAhPT1uP246XCJcIn1cXGAgKCR7dHlwZW9mIGUuaW50ZXJ2YWxDYXB9KWApO2lmKHZvaWQgMD09PWUuaW50ZXJ2YWx8fCEoTnVtYmVyLmlzRmluaXRlKGUuaW50ZXJ2YWwpJiZlLmludGVydmFsPj0wKSl0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcXGBpbnRlcnZhbFxcYCB0byBiZSBhIGZpbml0ZSBudW1iZXIgPj0gMCwgZ290IFxcYCR7bnVsbCE9PShpPW51bGw9PT0ocj1lLmludGVydmFsKXx8dm9pZCAwPT09cj92b2lkIDA6ci50b1N0cmluZygpKSYmdm9pZCAwIT09aT9pOlwiXCJ9XFxgICgke3R5cGVvZiBlLmludGVydmFsfSlgKTtUbCh0aGlzLCRjLGUuY2FycnlvdmVyQ29uY3VycmVuY3lDb3VudCxcImZcIiksVGwodGhpcyxlbCxlLmludGVydmFsQ2FwPT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfHwwPT09ZS5pbnRlcnZhbCxcImZcIiksVGwodGhpcyxubCxlLmludGVydmFsQ2FwLFwiZlwiKSxUbCh0aGlzLHJsLGUuaW50ZXJ2YWwsXCJmXCIpLFRsKHRoaXMsc2wsbmV3IGUucXVldWVDbGFzcyxcImZcIiksVGwodGhpcyxjbCxlLnF1ZXVlQ2xhc3MsXCJmXCIpLHRoaXMuY29uY3VycmVuY3k9ZS5jb25jdXJyZW5jeSx0aGlzLnRpbWVvdXQ9ZS50aW1lb3V0LFRsKHRoaXMsZmwsITA9PT1lLnRocm93T25UaW1lb3V0LFwiZlwiKSxUbCh0aGlzLGRsLCExPT09ZS5hdXRvU3RhcnQsXCJmXCIpfWdldCBjb25jdXJyZW5jeSgpe3JldHVybiBDbCh0aGlzLHVsLFwiZlwiKX1zZXQgY29uY3VycmVuY3koZSl7aWYoIShcIm51bWJlclwiPT10eXBlb2YgZSYmZT49MSkpdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgXFxgY29uY3VycmVuY3lcXGAgdG8gYmUgYSBudW1iZXIgZnJvbSAxIGFuZCB1cCwgZ290IFxcYCR7ZX1cXGAgKCR7dHlwZW9mIGV9KWApO1RsKHRoaXMsdWwsZSxcImZcIiksQ2wodGhpcyxKYyxcIm1cIixJbCkuY2FsbCh0aGlzKX1hc3luYyBhZGQoZSx0PXt9KXtyZXR1cm4gdD17dGltZW91dDp0aGlzLnRpbWVvdXQsdGhyb3dPblRpbWVvdXQ6Q2wodGhpcyxmbCxcImZcIiksLi4udH0sbmV3IFByb21pc2UoKChuLHIpPT57Q2wodGhpcyxzbCxcImZcIikuZW5xdWV1ZSgoYXN5bmMoKT0+e3ZhciBpLG8sYTtUbCh0aGlzLGxsLChvPUNsKHRoaXMsbGwsXCJmXCIpLCsrbyksXCJmXCIpLFRsKHRoaXMsdGwsKGE9Q2wodGhpcyx0bCxcImZcIiksKythKSxcImZcIik7dHJ5e2lmKG51bGw9PT0oaT10LnNpZ25hbCl8fHZvaWQgMD09PWk/dm9pZCAwOmkuYWJvcnRlZCl0aHJvdyBuZXcgQWwoXCJUaGUgdGFzayB3YXMgYWJvcnRlZC5cIik7bGV0IHI9ZSh7c2lnbmFsOnQuc2lnbmFsfSk7dC50aW1lb3V0JiYocj1mdW5jdGlvbihlLHQsbixyKXtsZXQgaTtjb25zdCBvPW5ldyBQcm9taXNlKCgobyxhKT0+e2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0fHwxIT09TWF0aC5zaWduKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIFxcYG1pbGxpc2Vjb25kc1xcYCB0byBiZSBhIHBvc2l0aXZlIG51bWJlciwgZ290IFxcYCR7dH1cXGBgKTtpZih0IT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKXtpZigocj17Y3VzdG9tVGltZXJzOntzZXRUaW1lb3V0LGNsZWFyVGltZW91dH0sLi4ucn0pLnNpZ25hbCl7Y29uc3R7c2lnbmFsOmV9PXI7ZS5hYm9ydGVkJiZhKFljKGUpKSxlLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCgoKT0+e2EoWWMoZSkpfSkpfWk9ci5jdXN0b21UaW1lcnMuc2V0VGltZW91dC5jYWxsKHZvaWQgMCwoKCk9Pntjb25zdCByPW4gaW5zdGFuY2VvZiBFcnJvcj9uOm5ldyBaYyhgUHJvbWlzZSB0aW1lZCBvdXQgYWZ0ZXIgJHt0fSBtaWxsaXNlY29uZHNgKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmNhbmNlbCYmZS5jYW5jZWwoKSxhKHIpfSksdCksKGFzeW5jKCk9Pnt0cnl7byhhd2FpdCBlKX1jYXRjaChlKXthKGUpfWZpbmFsbHl7ci5jdXN0b21UaW1lcnMuY2xlYXJUaW1lb3V0LmNhbGwodm9pZCAwLGkpfX0pKCl9ZWxzZSBvKGUpfSkpO3JldHVybiBvLmNsZWFyPSgpPT57Y2xlYXJUaW1lb3V0KGkpLGk9dm9pZCAwfSxvfShQcm9taXNlLnJlc29sdmUociksdC50aW1lb3V0KSksdC5zaWduYWwmJihyPVByb21pc2UucmFjZShbcixDbCh0aGlzLEpjLFwibVwiLFNsKS5jYWxsKHRoaXMsdC5zaWduYWwpXSkpO2NvbnN0IG89YXdhaXQgcjtuKG8pLHRoaXMuZW1pdChcImNvbXBsZXRlZFwiLG8pfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBaYyYmIXQudGhyb3dPblRpbWVvdXQpcmV0dXJuIHZvaWQgbigpO3IoZSksdGhpcy5lbWl0KFwiZXJyb3JcIixlKX1maW5hbGx5e0NsKHRoaXMsSmMsXCJtXCIsaGwpLmNhbGwodGhpcyl9fSksdCksdGhpcy5lbWl0KFwiYWRkXCIpLENsKHRoaXMsSmMsXCJtXCIseWwpLmNhbGwodGhpcyl9KSl9YXN5bmMgYWRkQWxsKGUsdCl7cmV0dXJuIFByb21pc2UuYWxsKGUubWFwKChhc3luYyBlPT50aGlzLmFkZChlLHQpKSkpfXN0YXJ0KCl7cmV0dXJuIENsKHRoaXMsZGwsXCJmXCIpPyhUbCh0aGlzLGRsLCExLFwiZlwiKSxDbCh0aGlzLEpjLFwibVwiLElsKS5jYWxsKHRoaXMpLHRoaXMpOnRoaXN9cGF1c2UoKXtUbCh0aGlzLGRsLCEwLFwiZlwiKX1jbGVhcigpe1RsKHRoaXMsc2wsbmV3KENsKHRoaXMsY2wsXCJmXCIpKSxcImZcIil9YXN5bmMgb25FbXB0eSgpezAhPT1DbCh0aGlzLHNsLFwiZlwiKS5zaXplJiZhd2FpdCBDbCh0aGlzLEpjLFwibVwiLGJsKS5jYWxsKHRoaXMsXCJlbXB0eVwiKX1hc3luYyBvblNpemVMZXNzVGhhbihlKXtDbCh0aGlzLHNsLFwiZlwiKS5zaXplPGV8fGF3YWl0IENsKHRoaXMsSmMsXCJtXCIsYmwpLmNhbGwodGhpcyxcIm5leHRcIiwoKCk9PkNsKHRoaXMsc2wsXCJmXCIpLnNpemU8ZSkpfWFzeW5jIG9uSWRsZSgpezA9PT1DbCh0aGlzLGxsLFwiZlwiKSYmMD09PUNsKHRoaXMsc2wsXCJmXCIpLnNpemV8fGF3YWl0IENsKHRoaXMsSmMsXCJtXCIsYmwpLmNhbGwodGhpcyxcImlkbGVcIil9Z2V0IHNpemUoKXtyZXR1cm4gQ2wodGhpcyxzbCxcImZcIikuc2l6ZX1zaXplQnkoZSl7cmV0dXJuIENsKHRoaXMsc2wsXCJmXCIpLmZpbHRlcihlKS5sZW5ndGh9Z2V0IHBlbmRpbmcoKXtyZXR1cm4gQ2wodGhpcyxsbCxcImZcIil9Z2V0IGlzUGF1c2VkKCl7cmV0dXJuIENsKHRoaXMsZGwsXCJmXCIpfX0kYz1uZXcgV2Vha01hcCxlbD1uZXcgV2Vha01hcCx0bD1uZXcgV2Vha01hcCxubD1uZXcgV2Vha01hcCxybD1uZXcgV2Vha01hcCxpbD1uZXcgV2Vha01hcCxvbD1uZXcgV2Vha01hcCxhbD1uZXcgV2Vha01hcCxzbD1uZXcgV2Vha01hcCxjbD1uZXcgV2Vha01hcCxsbD1uZXcgV2Vha01hcCx1bD1uZXcgV2Vha01hcCxkbD1uZXcgV2Vha01hcCxmbD1uZXcgV2Vha01hcCxKYz1uZXcgV2Vha1NldCxwbD1mdW5jdGlvbigpe3JldHVybiBDbCh0aGlzLGVsLFwiZlwiKXx8Q2wodGhpcyx0bCxcImZcIik8Q2wodGhpcyxubCxcImZcIil9LG1sPWZ1bmN0aW9uKCl7cmV0dXJuIENsKHRoaXMsbGwsXCJmXCIpPENsKHRoaXMsdWwsXCJmXCIpfSxobD1mdW5jdGlvbigpe3ZhciBlO1RsKHRoaXMsbGwsKGU9Q2wodGhpcyxsbCxcImZcIiksLS1lKSxcImZcIiksQ2wodGhpcyxKYyxcIm1cIix5bCkuY2FsbCh0aGlzKSx0aGlzLmVtaXQoXCJuZXh0XCIpfSx2bD1mdW5jdGlvbigpe0NsKHRoaXMsSmMsXCJtXCIsX2wpLmNhbGwodGhpcyksQ2wodGhpcyxKYyxcIm1cIixFbCkuY2FsbCh0aGlzKSxUbCh0aGlzLGFsLHZvaWQgMCxcImZcIil9LGdsPWZ1bmN0aW9uKCl7Y29uc3QgZT1EYXRlLm5vdygpO2lmKHZvaWQgMD09PUNsKHRoaXMsb2wsXCJmXCIpKXtjb25zdCB0PUNsKHRoaXMsaWwsXCJmXCIpLWU7aWYoISh0PDApKXJldHVybiB2b2lkIDA9PT1DbCh0aGlzLGFsLFwiZlwiKSYmVGwodGhpcyxhbCxzZXRUaW1lb3V0KCgoKT0+e0NsKHRoaXMsSmMsXCJtXCIsdmwpLmNhbGwodGhpcyl9KSx0KSxcImZcIiksITA7VGwodGhpcyx0bCxDbCh0aGlzLCRjLFwiZlwiKT9DbCh0aGlzLGxsLFwiZlwiKTowLFwiZlwiKX1yZXR1cm4hMX0seWw9ZnVuY3Rpb24oKXtpZigwPT09Q2wodGhpcyxzbCxcImZcIikuc2l6ZSlyZXR1cm4gQ2wodGhpcyxvbCxcImZcIikmJmNsZWFySW50ZXJ2YWwoQ2wodGhpcyxvbCxcImZcIikpLFRsKHRoaXMsb2wsdm9pZCAwLFwiZlwiKSx0aGlzLmVtaXQoXCJlbXB0eVwiKSwwPT09Q2wodGhpcyxsbCxcImZcIikmJnRoaXMuZW1pdChcImlkbGVcIiksITE7aWYoIUNsKHRoaXMsZGwsXCJmXCIpKXtjb25zdCBlPSFDbCh0aGlzLEpjLFwiYVwiLGdsKTtpZihDbCh0aGlzLEpjLFwiYVwiLHBsKSYmQ2wodGhpcyxKYyxcImFcIixtbCkpe2NvbnN0IHQ9Q2wodGhpcyxzbCxcImZcIikuZGVxdWV1ZSgpO3JldHVybiEhdCYmKHRoaXMuZW1pdChcImFjdGl2ZVwiKSx0KCksZSYmQ2wodGhpcyxKYyxcIm1cIixFbCkuY2FsbCh0aGlzKSwhMCl9fXJldHVybiExfSxFbD1mdW5jdGlvbigpe0NsKHRoaXMsZWwsXCJmXCIpfHx2b2lkIDAhPT1DbCh0aGlzLG9sLFwiZlwiKXx8KFRsKHRoaXMsb2wsc2V0SW50ZXJ2YWwoKCgpPT57Q2wodGhpcyxKYyxcIm1cIixfbCkuY2FsbCh0aGlzKX0pLENsKHRoaXMscmwsXCJmXCIpKSxcImZcIiksVGwodGhpcyxpbCxEYXRlLm5vdygpK0NsKHRoaXMscmwsXCJmXCIpLFwiZlwiKSl9LF9sPWZ1bmN0aW9uKCl7MD09PUNsKHRoaXMsdGwsXCJmXCIpJiYwPT09Q2wodGhpcyxsbCxcImZcIikmJkNsKHRoaXMsb2wsXCJmXCIpJiYoY2xlYXJJbnRlcnZhbChDbCh0aGlzLG9sLFwiZlwiKSksVGwodGhpcyxvbCx2b2lkIDAsXCJmXCIpKSxUbCh0aGlzLHRsLENsKHRoaXMsJGMsXCJmXCIpP0NsKHRoaXMsbGwsXCJmXCIpOjAsXCJmXCIpLENsKHRoaXMsSmMsXCJtXCIsSWwpLmNhbGwodGhpcyl9LElsPWZ1bmN0aW9uKCl7Zm9yKDtDbCh0aGlzLEpjLFwibVwiLHlsKS5jYWxsKHRoaXMpOyk7fSxTbD1hc3luYyBmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFByb21pc2UoKCh0LG4pPT57ZS5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwoKCk9PntuKG5ldyBBbChcIlRoZSB0YXNrIHdhcyBhYm9ydGVkLlwiKSl9KSx7b25jZTohMH0pfSkpfSxibD1hc3luYyBmdW5jdGlvbihlLHQpe3JldHVybiBuZXcgUHJvbWlzZSgobj0+e2NvbnN0IHI9KCk9Pnt0JiYhdCgpfHwodGhpcy5vZmYoZSxyKSxuKCkpfTt0aGlzLm9uKGUscil9KSl9O2NvbnN0IGtsPVwic2NuX2FkZGxpdmVcIjtjKCkuZ2V0TG9nZ2VyKFwiW1RhbGtdW1dlYnNvY2tldFdyYXBwZXJdXCIpO2NvbnN0IE9sPVVpbnQ4QXJyYXkuZnJvbShbMTEyLDExMSwxMTAsMTAzXSk7Y2xhc3MgTmx7c3RvcHBlZD0hMTtjb25zdHJ1Y3RvcihlKXt0aGlzLm9ic2VydmVyPWV9b3Blbj0oZSx0KT0+e2lmKHRoaXMuc3RvcHBlZClyZXR1cm47SSgpLmluY3JlbWVudCh7bWV0cmljc05hbWU6YCR7a2x9LnN0YXJ0X2Nvbm5fZG5zYH0pO2NvbnN0IG49YHdzczovLyR7dC5lbmRwb2ludH06JHt0LndlYnNvY2tldFBvcnR9YDt0aGlzLndlYnNvY2tldD1uZXcgV2ViU29ja2V0KG4pLHRoaXMud2Vic29ja2V0LmJpbmFyeVR5cGU9XCJhcnJheWJ1ZmZlclwiLHRoaXMud2Vic29ja2V0Lm9ub3Blbj0oKT0+dGhpcy5vbldlYnNvY2tldE9wZW4oZSx0KSx0aGlzLndlYnNvY2tldC5vbmNsb3NlPXRoaXMub25XZWJzb2NrZXRDbG9zZSx0aGlzLndlYnNvY2tldC5vbmVycm9yPXRoaXMub25XZWJzb2NrZXRFcnIsdGhpcy53ZWJzb2NrZXQub25tZXNzYWdlPXRoaXMub25XZWJzb2NrZXRNc2d9O2FzeW5jIHBpbmcoKXtyZXR1cm4gbmV3IFByb21pc2UoKGU9PntpZighdGhpcy53ZWJzb2NrZXQpdGhyb3cgRXJyb3IoXCJDYW50IHBpbmcgbnVsbCB3ZWJzb2NrZXQuIHRoaXMgaW5kaWNhdGVzIHByb2dyYW1taW5nIGVycm9yXCIpO3RoaXMub25QaW5nUmVzcG9uc2U9KCk9Pnt0aGlzLm9uUGluZ1Jlc3BvbnNlPXZvaWQgMCxlKCEwKX0sdGhpcy53ZWJzb2NrZXQuc2VuZChcInBpbmcyXCIpLHRoaXMucGluZ0NhbmNlbFRva2VuPXNldFRpbWVvdXQoKCgpPT57dGhpcy5vblBpbmdSZXNwb25zZT12b2lkIDAsZSghMSl9KSwxZTQpfSkpfWNsb3NlPSgpPT57dGhpcy5zdG9wcGVkfHwodGhpcy5zdG9wcGVkPSEwLHRoaXMuc3RvcFBpbmdpbmcoKSx0aGlzLndlYnNvY2tldCYmKHRoaXMud2Vic29ja2V0Lm9uY2xvc2U9bnVsbCx0aGlzLndlYnNvY2tldC5vbmVycm9yPW51bGwsdGhpcy53ZWJzb2NrZXQuY2xvc2UoKSx0aGlzLndlYnNvY2tldD12b2lkIDApKX07c2VuZD1lPT57aWYoIXRoaXMud2Vic29ja2V0KXRocm93IEVycm9yKFwiV2Vic29ja2V0IGRvZXMgbm90IGV4aXN0XCIpO3RoaXMud2Vic29ja2V0LnNlbmQoZSl9O29uV2Vic29ja2V0T3Blbj0oZSx0KT0+e3RoaXMuc3RhcnRQaW5naW5nKCksdGhpcy5vYnNlcnZlci5vbldlYnNvY2tldE9wZW4oZSx0KX07b25XZWJzb2NrZXRDbG9zZT1lPT57dGhpcy5vYnNlcnZlci5vbldlYnNvY2tldENsb3NlKGUpfTtvbldlYnNvY2tldEVycj1lPT57dGhpcy5vYnNlcnZlci5vbldlYnNvY2tldEVycihlKX07b25XZWJzb2NrZXRNc2c9YXN5bmMgZT0+e05sLmlzUGluZ1Jlc3BvbnNlKGUuZGF0YSk/dGhpcy5vblBpbmdSZXNwb25zZT8uKCk6YXdhaXQgdGhpcy5vYnNlcnZlci5vbldlYnNvY2tldE1lc3NhZ2UoZSl9O3N0YXRpYyBpc1BpbmdSZXNwb25zZShlKXtjb25zdCB0PW5ldyBEYXRhVmlldyhlKTtyZXR1cm4gZS5ieXRlTGVuZ3RoPT09T2wuYnl0ZUxlbmd0aCYmT2wuZXZlcnkoKChlLG4pPT5lPT09dC5nZXRVaW50OChuKSkpfWFzeW5jIHN0YXJ0UGluZ2luZygpe2Zvcig7IXRoaXMuc3RvcHBlZDspYXdhaXQgdGhpcy5wYXVzZUJlZm9yZVBpbmcoKSxhd2FpdCB0aGlzLnBpbmcoKXx8dGhpcy5vYnNlcnZlci5vbldlYnNvY2tldEVycihuZXcgRXJyb3JFdmVudChcIlBpbmcgdGltZWQtb3V0XCIpKX1zdG9wUGluZ2luZygpe3RoaXMucGluZ0NhbmNlbFRva2VuJiZjbGVhclRpbWVvdXQodGhpcy5waW5nQ2FuY2VsVG9rZW4pLHRoaXMucGluZ0NhbmNlbFRva2VuPXZvaWQgMCx0aGlzLm9uUGluZ1Jlc3BvbnNlPXZvaWQgMH1hc3luYyBwYXVzZUJlZm9yZVBpbmcoKXtyZXR1cm4gbmV3IFByb21pc2UoKGU9Pnt0aGlzLnBpbmdDYW5jZWxUb2tlbj1zZXRUaW1lb3V0KGUsNWUzKX0pKX19dmFyIHdsPW4oMTMwMzQpO2Z1bmN0aW9uIERsKGUpe3JldHVybntzdGF0ZTplLnN0YXRlLGljZVN0YXRlOmUuaWNlVHJhbnNwb3J0LnN0YXRlfX1mdW5jdGlvbiBQbChlKXtyZXR1cm57aWQ6ZS5pZCxraW5kOmUua2luZCxsYWJlbDplLmxhYmVsLG11dGVkOmUubXV0ZWQsZW5hYmxlZDplLmVuYWJsZWQscmVhZHlTdGF0ZTplLnJlYWR5U3RhdGUsY2FwYWJpbGl0aWVzOmUuZ2V0Q2FwYWJpbGl0aWVzKCksY29uc3RyYWludHM6ZS5nZXRDb25zdHJhaW50cygpLHNldHRpbmdzOmUuZ2V0U2V0dGluZ3MoKX19ZnVuY3Rpb24gTWwoZSl7cmV0dXJue3RyYWNrOmUudHJhY2s/UGwoZS50cmFjayk6bnVsbCxwYXJhbXM6KHQ9ZS5nZXRQYXJhbWV0ZXJzKCkse2NvZGVjczp0LmNvZGVjcyxoZWFkZXJFeHRlbnNpb25zOnQuaGVhZGVyRXh0ZW5zaW9ucyxydGNwOnQucnRjcCxlbmNvZGluZ3M6dC5lbmNvZGluZ3N9KSx0cmFuc3BvcnQ6ZS50cmFuc3BvcnQ/RGwoZS50cmFuc3BvcnQpOm51bGx9O3ZhciB0fWZ1bmN0aW9uIExsKGUpe3JldHVybiBlLmdldFRyYW5zY2VpdmVycygpLm1hcCgoZT0+ZnVuY3Rpb24oZSl7Y29uc3QgdD1cInNlbmRvbmx5XCI9PT1lLmRpcmVjdGlvbnx8XCJzZW5kcmVjdlwiPT09ZS5kaXJlY3Rpb24sbj1cInJlY3Zvbmx5XCI9PT1lLmRpcmVjdGlvbnx8XCJzZW5kcmVjdlwiPT09ZS5kaXJlY3Rpb247cmV0dXJuIEpTT04uc3RyaW5naWZ5KHtjdXJyZW50RGlyZWN0aW9uOmUuY3VycmVudERpcmVjdGlvbixkaXJlY3Rpb246ZS5kaXJlY3Rpb24sbWlkOmUubWlkLHJlY2VpdmVyOm4/KHI9ZS5yZWNlaXZlcix7dHJhY2s6UGwoci50cmFjaykscGFyYW1zOihpPXIuZ2V0UGFyYW1ldGVycygpLHtjb2RlY3M6aS5jb2RlY3MsaGVhZGVyRXh0ZW5zaW9uczppLmhlYWRlckV4dGVuc2lvbnMscnRjcDppLnJ0Y3B9KSx0cmFuc3BvcnQ6ci50cmFuc3BvcnQ/RGwoci50cmFuc3BvcnQpOm51bGx9KTp2b2lkIDAsc2VuZGVyOnQ/TWwoZS5zZW5kZXIpOnZvaWQgMH0sbnVsbCxcIiAgICBcIikucmVwbGFjZSgvXCIoW15cIl0rKVwiOi9nLFwiJDE6XCIpO3ZhciByLGl9KGUpKSl9Y2xhc3MgVWx7dXBkYXRlKGUsdCl7aWYodm9pZCAwPT09dClyZXR1cm47Y29uc3Qgbj10aGlzLmxhc3RWYWx1ZSxyPXRoaXMubGFzdFRpbWVNcztyZXR1cm4gdGhpcy5sYXN0VmFsdWU9dCx0aGlzLmxhc3RUaW1lTXM9ZSx2b2lkIDA9PT1ufHx2b2lkIDA9PT1yfHxuPnQ/dm9pZCAwOjFlMyoodC1uKS8odGhpcy5sYXN0VGltZU1zLXIpfX1jb25zdCB4bD17YXVkaW86MCx2aWRlbzoxLHJ0eDo0LHNjcmVlbjoxMCxzY3JlZW5SdHg6MTF9O2Z1bmN0aW9uIEZsKGUsdCl7Y29uc3Qgbj10LmZpbmQoKHQ9PnQudHlwZT09PXhsW2VdKSk/LnNzcmM7aWYoIW4pdGhyb3cgRXJyb3IoYENvdWxkIG5vdCBmaW5kIFNTUkMgd2l0aCB0eXBlICR7ZX1gKTtyZXR1cm4gbn1jKCkuZ2V0TG9nZ2VyKFwiW1RhbGtdW3JlbW90ZVVzZXJdXCIpO2NsYXNzIEJse2NvbnN0cnVjdG9yKGUsdCxuLHIsaSl7dGhpcy50cmFuc2NlaXZlcj1lLHRoaXMudHJhY2tJZD10LHRoaXMucHVibGlzaGVkPW4sdGhpcy5zc3JjPXIsdGhpcy5ydHhTc3JjPWl9fWNsYXNzIFZse2NvbnN0cnVjdG9yKGUsdCxuLHIsaSxvKXt0aGlzLnN0cmVhbUlkPWUsdGhpcy50cmFja0lkPXQsdGhpcy5zc3JjPW4sdGhpcy5ydHhTc3JjPXIsdGhpcy5zaW5rSWQ9aSx0aGlzLnRyYW5zY2VpdmVyPW99fWNsYXNzIEdse2ZpcnN0VmlkZW9GcmFtZVJlY2VpdmVkPSExO2F1ZGlvQml0cmF0ZUNhbGN1bGF0b3I9bmV3IFVsO2NvbnN0cnVjdG9yKGUsdCxuKXt0aGlzLnRhbGtJZD1lLnRhbGtJZCx0aGlzLmF1ZGlvPW5ldyBCbCh0LGAke3RoaXMudGFsa0lkLnRhbGtVc2VySWR9LWF1ZGlvYCxlLmF1ZGlvU3RyZWFtLnB1Ymxpc2hlZCxGbChcImF1ZGlvXCIsZS5zc3JjcykpLHRoaXMudmlkZW89bmV3IEJsKG4sYCR7dGhpcy50YWxrSWQudGFsa1VzZXJJZH0tdmlkZW9gLGUudmlkZW9TdHJlYW0ucHVibGlzaGVkLEZsKFwidmlkZW9cIixlLnNzcmNzKSxGbChcInJ0eFwiLGUuc3NyY3MpKSx0aGlzLnNjcmVlbj1uZXcgVmwoYCR7dGhpcy50YWxrSWQudGFsa1VzZXJJZH0tc2NyZWVuLXN0cmVhbWAsYCR7dGhpcy50YWxrSWQudGFsa1VzZXJJZH0tc2NyZWVuYCxGbChcInNjcmVlblwiLGUuc3NyY3MpLEZsKFwic2NyZWVuUnR4XCIsZS5zc3JjcyksZS5zY3JlZW5TdHJlYW0uc2lua0lkKSx0aGlzLm1lZGlhU3RyZWFtSWQ9YCR7dGhpcy50YWxrSWQudGFsa1VzZXJJZH0tc3RyZWFtYCx0aGlzLmF1ZGlvU2lua0lkPWUuYXVkaW9TdHJlYW0uc2lua0lkLHRoaXMudmlkZW9TaW5rSWQ9ZS52aWRlb1N0cmVhbS5zaW5rSWR9aGFzTWlkKGUpe3JldHVybiB0aGlzLmF1ZGlvLnRyYW5zY2VpdmVyLm1pZD09PWV8fHRoaXMudmlkZW8udHJhbnNjZWl2ZXIubWlkPT09ZXx8dGhpcy5zY3JlZW4udHJhbnNjZWl2ZXI/Lm1pZD09PWV9c3NyY0ZvcihlKXtzd2l0Y2goZSl7Y2FzZVwiYXVkaW9cIjpyZXR1cm4gdGhpcy5hdWRpby5zc3JjO2Nhc2VcInZpZGVvXCI6cmV0dXJuIHRoaXMudmlkZW8uc3NyYztjYXNlXCJzY3JlZW5cIjpyZXR1cm4gdGhpcy5zY3JlZW4uc3NyY319Y29udGVudFR5cGVGb3JNaWQoZSl7cmV0dXJuIHRoaXMuYXVkaW8udHJhbnNjZWl2ZXIubWlkPT09ZT9cImF1ZGlvXCI6dGhpcy52aWRlby50cmFuc2NlaXZlci5taWQ9PT1lP1widmlkZW9cIjp0aGlzLnNjcmVlbi50cmFuc2NlaXZlcj8ubWlkPT09ZT9cInNjcmVlblwiOnZvaWQgMH1jbmFtZSgpe3JldHVybmAke3RoaXMudGFsa0lkLnRhbGtVc2VySWR9LSR7dGhpcy50YWxrSWQudXNlclNlc3Npb25JZH1gfXVwZGF0ZUZyb21UcmFja0V2ZW50KGUpe2NvbnN0e3RyYWNrOnQsc3RyZWFtczpuLHRyYW5zY2VpdmVyOnJ9PWU7aWYoMSE9PW4ubGVuZ3RoKXJldHVybjtjb25zdCBpPW5bMF07XCJhdWRpb1wiPT09dC5raW5kPyh0LmVuYWJsZWQ9dGhpcy5hdWRpby5wdWJsaXNoZWQsdGhpcy5hZGRSZW1vdGVBdWRpb1N0cmVhbShpKSk6ci5taWQ9PT10aGlzLnZpZGVvLnRyYW5zY2VpdmVyLm1pZD90aGlzLmFkZFJlbW90ZVZpZGVvU3RyZWFtKGkpOnRoaXMuYWRkUmVtb3RlU2NyZWVuU3RyZWFtKGkpfXVwZGF0ZUZyb21SZW1vdGVVc2VyRXZlbnQoZSl7dGhpcy5hdWRpby5wdWJsaXNoZWQhPT1lLmF1ZGlvU3RyZWFtLnB1Ymxpc2hlZCYmKHRoaXMuYXVkaW8ucHVibGlzaGVkPWUuYXVkaW9TdHJlYW0ucHVibGlzaGVkLHRoaXMuYXVkaW8udHJhbnNjZWl2ZXIucmVjZWl2ZXIudHJhY2suZW5hYmxlZD10aGlzLmF1ZGlvLnB1Ymxpc2hlZCksdGhpcy52aWRlby5wdWJsaXNoZWQhPT1lLnZpZGVvU3RyZWFtLnB1Ymxpc2hlZCYmKHRoaXMudmlkZW8ucHVibGlzaGVkPWUudmlkZW9TdHJlYW0ucHVibGlzaGVkLHRoaXMuZmlyc3RWaWRlb0ZyYW1lUmVjZWl2ZWQ9ITEsdGhpcy52aWRlby50cmFuc2NlaXZlci5yZWNlaXZlci50cmFjay5lbmFibGVkPXRoaXMudmlkZW8ucHVibGlzaGVkKTtjb25zdCB0PUZsKFwiYXVkaW9cIixlLnNzcmNzKSxuPUZsKFwidmlkZW9cIixlLnNzcmNzKSxyPUZsKFwic2NyZWVuXCIsZS5zc3Jjcyk7cmV0dXJuKHQhPT10aGlzLmF1ZGlvLnNzcmN8fG4hPT10aGlzLnZpZGVvLnNzcmN8fHIhPT10aGlzLnNjcmVlbi5zc3JjKSYmKHRoaXMuYXVkaW8uc3NyYz10LHRoaXMudmlkZW8uc3NyYz1uLHRoaXMudmlkZW8ucnR4U3NyYz1GbChcInJ0eFwiLGUuc3NyY3MpLHRoaXMuc2NyZWVuLnNzcmM9cix0aGlzLnNjcmVlbi5ydHhTc3JjPUZsKFwic2NyZWVuUnR4XCIsZS5zc3JjcyksITApfXVwZGF0ZVNjcmVlblN0YXRlKGUsdCl7bGV0IG49ITE7cmV0dXJuIHRoaXMuc2NyZWVuUHVibGlzaGVkKCkhPT1lLnNjcmVlblN0cmVhbS5wdWJsaXNoZWQmJihuPSEwLGUuc2NyZWVuU3RyZWFtLnB1Ymxpc2hlZD90aGlzLnNjcmVlbi50cmFuc2NlaXZlcj10KFwidmlkZW9cIik6KHRoaXMuc2NyZWVuLnRyYW5zY2VpdmVyPy5zdG9wKCksdGhpcy5zY3JlZW4udHJhbnNjZWl2ZXI9dm9pZCAwKSksbn1zY3JlZW5QdWJsaXNoZWQoKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5zY3JlZW4udHJhbnNjZWl2ZXJ9c3RvcE1lZGlhKCl7dHJ5e3RoaXMuYXVkaW8udHJhbnNjZWl2ZXIuc3RvcCgpfWNhdGNoKGUpe310cnl7dGhpcy52aWRlby50cmFuc2NlaXZlci5zdG9wKCl9Y2F0Y2goZSl7fXRyeXt0aGlzLnNjcmVlbi50cmFuc2NlaXZlcj8uc3RvcCgpfWNhdGNoKGUpe310aGlzLnJlbW92ZVZpZGVvU3RyZWFtKCksdGhpcy5yZW1vdmVBdWRpb1N0cmVhbSgpLHRoaXMucmVtb3ZlU2NyZWVuU3RyZWFtKCl9dGFnKCl7cmV0dXJuYFt1aWQ6JHt0aGlzLnRhbGtJZC50YWxrVXNlcklkfS1zaWQ6JHt0aGlzLnRhbGtJZC51c2VyU2Vzc2lvbklkfS10OiR7dGhpcy50YWxrSWQuc2Vzc2lvblR5cGV9XWB9Z2V0TWVkaWFEZXNjcmlwdGlvbigpe3JldHVybmBhdWRpbzoge3B1Yj0ke3RoaXMuYXVkaW8ucHVibGlzaGVkPzE6MH0sIE1JRD0ke3RoaXMuYXVkaW8udHJhbnNjZWl2ZXIubWlkPz9cIm51bGxcIn19LCB2aWRlbzoge3B1Yj0ke3RoaXMudmlkZW8ucHVibGlzaGVkPzE6MH0sIE1JRD0ke3RoaXMudmlkZW8udHJhbnNjZWl2ZXIubWlkPz9cIm51bGxcIn19LCBzaW5rSWQ9JHt0aGlzLnZpZGVvU2lua0lkfSwgc2NyZWVuOiBNSUQ9JHt0aGlzLnNjcmVlbi50cmFuc2NlaXZlcj8ubWlkPz9cIm51bGxcIn19LCBzaW5rSWQ9JHt0aGlzLnNjcmVlbi5zaW5rSWR9LCBTU1JDczogW0FVRElPPSR7dGhpcy5hdWRpby5zc3JjfSwgVklERU89JHt0aGlzLnZpZGVvLnNzcmN9LCBSVFg9JHt0aGlzLnZpZGVvLnJ0eFNzcmM/P1wibnVsbFwifSwgU0NSRUVOPSR7dGhpcy5zY3JlZW4uc3NyY30sIFNDUkVFTl9SVFg9JHt0aGlzLnNjcmVlbi5ydHhTc3JjfV1gfXJlbW92ZVZpZGVvU3RyZWFtKCl7KDAsd2wuYkUpKE1kLmdldFN0YXRlKCkpLnJlbW92ZVZpZGVvU3RyZWFtKHRoaXMudmlkZW9TaW5rSWQpfWFkZFJlbW90ZVZpZGVvU3RyZWFtKGUpeygwLHdsLmJFKShNZC5nZXRTdGF0ZSgpKS5hZGRWaWRlb1N0cmVhbSh0aGlzLnZpZGVvU2lua0lkLGUpfXJlbW92ZUF1ZGlvU3RyZWFtKCl7KDAsd2wuYkUpKE1kLmdldFN0YXRlKCkpLnJlbW92ZUF1ZGlvU3RyZWFtKHRoaXMuYXVkaW9TaW5rSWQpfWFkZFJlbW90ZUF1ZGlvU3RyZWFtKGUpeygwLHdsLmJFKShNZC5nZXRTdGF0ZSgpKS5hZGRBdWRpb1N0cmVhbSh0aGlzLmF1ZGlvU2lua0lkLGUpfXJlbW92ZVNjcmVlblN0cmVhbSgpeygwLHdsLmJFKShNZC5nZXRTdGF0ZSgpKS5yZW1vdmVWaWRlb1N0cmVhbSh0aGlzLnNjcmVlbi5zaW5rSWQpfWFkZFJlbW90ZVNjcmVlblN0cmVhbShlKXsoMCx3bC5iRSkoTWQuZ2V0U3RhdGUoKSkuYWRkVmlkZW9TdHJlYW0odGhpcy5zY3JlZW4uc2lua0lkLGUpfX1jbGFzcyBIbHt1c2Vycz1uZXcgQXJyYXk7Z2V0QnlTc3JjKGUsdCl7cmV0dXJuIHRoaXMudXNlcnMuZmluZCgobj0+TnVtYmVyKG4uc3NyY0Zvcih0KSk9PT1lKSl9Z2V0QnlNaWQoZSl7cmV0dXJuIHRoaXMudXNlcnMuZmluZCgodD0+dC5oYXNNaWQoZSkpKX1nZXRSZW1vdGVVc2Vycygpe3JldHVybiB0aGlzLnVzZXJzW1N5bWJvbC5pdGVyYXRvcl0oKX1nZXRCeVRhbGtJZChlKXtyZXR1cm4gdGhpcy51c2Vycy5maW5kKCh0PT50LnRhbGtJZC50YWxrVXNlcklkPT09ZS50YWxrVXNlcklkJiZ0LnRhbGtJZC51c2VyU2Vzc2lvbklkPT09ZS51c2VyU2Vzc2lvbklkJiZ0LnRhbGtJZC5zZXNzaW9uVHlwZT09PWUuc2Vzc2lvblR5cGUpKX1hZGQoZSl7dGhpcy51c2Vycy5wdXNoKGUpfXJlbW92ZShlKXt0aGlzLnVzZXJzPXRoaXMudXNlcnMuZmlsdGVyKCh0PT50IT09ZSkpfWNsZWFyKCl7dGhpcy51c2Vycz1bXX19dmFyIFdsPW4oNDQwMCksamw9bi5uKFdsKSxabD1uKDkxMTI5KSx6bD1uKDQ5NjcyKSxLbD1uKDcwNzY2KTtjb25zdCBZbD05OSxxbD17dXJpOlwiaHR0cDovL3d3dy5pZXRmLm9yZy9pZC9kcmFmdC1ob2xtZXItcm1jYXQtdHJhbnNwb3J0LXdpZGUtY2MtZXh0ZW5zaW9ucy0wMVwiLHZhbHVlOjV9LFhsPXt1cmk6XCJ1cm46aWV0ZjpwYXJhbXM6cnRwLWhkcmV4dDpzc3JjLWF1ZGlvLWxldmVsXCIsdmFsdWU6MX07ZnVuY3Rpb24gUWwoKXtyZXR1cm5gJHtNYXRoLmZsb29yKDFlNSpNYXRoLnJhbmRvbSgpKX1gfWZ1bmN0aW9uIEpsKGUsdCl7cmV0dXJue2lkOk51bWJlcihlKSxhdHRyaWJ1dGU6XCJjbmFtZVwiLHZhbHVlOnR9fWZ1bmN0aW9uICRsKGUpe3JldHVybiBKbChlLnNzcmMsUWwoKSl9ZnVuY3Rpb24gZXUoZSx0KXtzd2l0Y2godCl7Y2FzZVwiYXVkaW9cIjpyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJue3NzcmNzOltKbChlLmF1ZGlvLnNzcmMsZS5jbmFtZSgpKV0sbXNpZDpgJHtlLm1lZGlhU3RyZWFtSWR9ICR7ZS5hdWRpby50cmFja0lkfWB9fShlKTtjYXNlXCJ2aWRlb1wiOnJldHVybiB0dShlLnZpZGVvLGUubWVkaWFTdHJlYW1JZCxlLnZpZGVvLnRyYWNrSWQsZS5jbmFtZSgpKTtjYXNlXCJzY3JlZW5cIjpyZXR1cm4gdHUoZS5zY3JlZW4sZS5zY3JlZW4uc3RyZWFtSWQsZS5zY3JlZW4udHJhY2tJZCxlLmNuYW1lKCkpO2RlZmF1bHQ6dGhyb3cgRXJyb3IoXCJ1bnJlY29nbml6ZWQgc3NyYyB0eXBlOiBcIit0KX19ZnVuY3Rpb24gdHUoZSx0LG4scil7Y29uc3QgaT1lPT57Y29uc3QgaT1OdW1iZXIoZSk7cmV0dXJuW3tpZDppLGF0dHJpYnV0ZTpcImNuYW1lXCIsdmFsdWU6cn0se2lkOmksYXR0cmlidXRlOlwibXNpZFwiLHZhbHVlOmAke3R9ICR7bn1gfV19LG89aShlLnNzcmMpO2lmKCFlLnJ0eFNzcmMpdGhyb3cgRXJyb3IoYFJUWCBTU1JDIHdhcyBub3Qgc2V0IGZvciAke259YCk7Y29uc3QgYT1pKGUucnR4U3NyYyk7cmV0dXJue3NzcmNHcm91cHM6W3tzZW1hbnRpY3M6XCJGSURcIixzc3JjczpgJHtvWzBdLmlkfSAke2FbMF0uaWR9YH1dLG1zaWQ6YCR7dH0gJHtufWAsc3NyY3M6by5jb25jYXQoYSl9fWZ1bmN0aW9uIG51KGUpe2lmKCFlLnBheWxvYWRzKXRocm93IEVycm9yKFwiSW52YWxpZCBTRFA6IG11c3QgYWx3YXlzIGNvbnRhaW4gbT12aWRlbyBsaW5lIGZvciBsb2NhbCB1c2VyIHVwbGlua1wiKTtpZihcIjk5IDk4XCI9PT1lLnBheWxvYWRzKXJldHVybjtsZXRbdCxuXT1lLnBheWxvYWRzLnNwbGl0KFwiIFwiKS5tYXAoTnVtYmVyKTtjb25zdCByPWUucnRwLmZpbmQoKGU9PlwiaDI2NFwiPT09ZS5jb2RlYy50b0xvd2VyQ2FzZSgpKSk7aWYoIXIpdGhyb3cgRXJyb3IoXCJJbnZhbGlkIFNEUDogZXhwZWN0ZWQgdG8gaGF2ZSBoMjY0IHZpZGVvIHNldCB1cFwiKTtyLnBheWxvYWQhPT10JiYoW3Qsbl09W24sdF0pO2NvbnN0IGk9ZS5mbXRwLmZpbmQoKGU9PmUucGF5bG9hZD09PW4pKTtpJiYoZS5wYXlsb2Fkcz1cIjk5IDk4XCIsaS5wYXlsb2FkPTk4LGkuY29uZmlnPVwiYXB0PTk5XCIpO2NvbnN0IG89ZT0+e2Zvcihjb25zdCByIG9mIGUpci5wYXlsb2FkPT09dD9yLnBheWxvYWQ9OTk6ci5wYXlsb2FkPT09biYmKHIucGF5bG9hZD05OCl9O28oZS5mbXRwKSxvKGUucnRwKSxlLnJ0Y3BGYiYmbyhlLnJ0Y3BGYil9YygpLmdldExvZ2dlcihcIltUYWxrXVtzZHBIZWxwZXJzXVwiKTtjb25zdCBydT17cGF5bG9hZHM6XCIxMTFcIixydHA6W3twYXlsb2FkOjExMSxjb2RlYzpcIm9wdXNcIixyYXRlOjQ4ZTMsZW5jb2Rpbmc6Mn1dLGZtdHA6W3twYXlsb2FkOjExMSxjb25maWc6XCJtaW5wdGltZT00MDt1c2VpbmJhbmRmZWM9MVwifV0scnRjcEZiOlt7cGF5bG9hZDoxMTEsdHlwZTpcInRyYW5zcG9ydC1jY1wifV0scHRpbWU6NDAsdHlwZTpcImF1ZGlvXCJ9LGl1PXtwYXlsb2FkczpcIjk5IDk4XCIscnRwOlt7cGF5bG9hZDpZbCxjb2RlYzpcIkgyNjRcIixyYXRlOjllNH0se3BheWxvYWQ6OTgsY29kZWM6XCJydHhcIixyYXRlOjllNH1dLGZtdHA6W3twYXlsb2FkOjk4LGNvbmZpZzpcImFwdD05OVwifV0scnRjcEZiOlt7cGF5bG9hZDpZbCx0eXBlOlwidHJhbnNwb3J0LWNjXCJ9LHtwYXlsb2FkOllsLHR5cGU6XCJuYWNrXCJ9LHtwYXlsb2FkOllsLHR5cGU6XCJuYWNrXCIsc3VidHlwZTpcInBsaVwifSx7cGF5bG9hZDpZbCxzdWJ0eXBlOlwiZmlyXCIsdHlwZTpcImNjbVwifSx7cGF5bG9hZDpZbCx0eXBlOlwiZ29vZy1yZW1iXCJ9XSx0eXBlOlwidmlkZW9cIn07ZnVuY3Rpb24gb3UoZSl7cmV0dXJuXCJhdWRpb1wiPT09ZT9ydTppdX1jb25zdCBhdT1lPT4oe2Nvbm5lY3Rpb246e3ZlcnNpb246NCxpcDpcIjAuMC4wLjBcIn0scG9ydDplLHByb3RvY29sOlwiVURQL1RMUy9SVFAvU0FWUEZcIixydGNwTXV4OlwicnRjcC1tdXhcIixydGNwOntwb3J0OmUsaXBWZXI6NCxuZXRUeXBlOlwiSU5cIixhZGRyZXNzOlwiMC4wLjAuMFwifSxjYW5kaWRhdGVzOltdfSksc3U9ZT0+KHtkaXJlY3Rpb246XCJzZW5kb25seVwiLHNldHVwOlwicGFzc2l2ZVwiLGljZVVmcmFnOmUudUZyYWcsaWNlUHdkOmUucHdkLGZpbmdlcnByaW50Ont0eXBlOmUuZHRsc0ZpbmdlcnByaW50LnR5cGUsaGFzaDplLmR0bHNGaW5nZXJwcmludC5kaWdlc3R9fSksY3U9KGUsdCk9Pih7ZGlyZWN0aW9uOlwiaW5hY3RpdmVcIixwYXlsb2FkczpcIjBcIixtaWQ6dCx0eXBlOmUscnRwOltdLGZtdHA6W10sY29ubmVjdGlvbjp7dmVyc2lvbjo0LGlwOlwiMC4wLjAuMFwifSxwb3J0OjAscHJvdG9jb2w6XCJVRFAvVExTL1JUUC9TQVZQRlwiLGNhbmRpZGF0ZXM6W119KSxsdT1lPT5be3R5cGU6XCJCVU5ETEVcIixtaWRzOmUuZmlsdGVyKChlPT5cImluYWN0aXZlXCIhPT1lLmRpcmVjdGlvbikpLm1hcCgoZT0+ZS5taWQpKS5qb2luKFwiIFwiKX1dO2Z1bmN0aW9uIHV1KGUsdCl7Y29uc3Qgbj1cImF1ZGlvXCI9PT1lP3RbMF06dFsxXSxyPVwiYXVkaW9cIj09PWU/WGwudXJpOnFsLnVyaSxpPW4uZXh0Py5maW5kKChlPT5lLnVyaT09PXIpKT8udmFsdWU7aWYodm9pZCAwPT09aSl0aHJvdyBFcnJvcihgT2ZmZXIgZG9lc24ndCBoYXZlIGEgbWF0Y2hpbmcgZXh0ZW5zaW9uIGZvciAke3J9YCk7cmV0dXJue2V4dDpbe3VyaTpyLHZhbHVlOml9XX19ZnVuY3Rpb24gZHUoZSx0LG4scixpLG8sYSl7aWYoIXIubWlkKXRocm93IEVycm9yKFwibWlkIGlzIG5vdCBzcGVjaWZpZWQgZm9yIG0gc2VjdGlvblwiKTtjb25zdCBzPWkuZ2V0QnlNaWQoZSk7aWYoIXMpe2lmKFwiaW5hY3RpdmVcIiE9PW4pdGhyb3cgRXJyb3IoYG5vIG1hdGNoaW5nIHVzZXIgZm9yIG1pZCAke2V9YCk7cmV0dXJuIGN1KHQsZSl9Y29uc3QgYz1zLmNvbnRlbnRUeXBlRm9yTWlkKGUpO2lmKCFjKXRocm93IEVycm9yKGBubyBjb250ZW50IHR5cGUgZm9yIG1pZCAke2V9YCk7cmV0dXJuey4uLnsuLi5hdShvLnN0cmVhbWVyQ29ublBhcmFtcy53ZWJydGNQb3J0KSwuLi5vdSh0KSwuLi51dSh0LGEpLG1pZDplfSwuLi5ldShzLGMpLC4uLnN1KG8ucmVtb3RlQXV0aERhdGEpfX1mdW5jdGlvbiBmdShlLHQsbil7Y29uc3Qgcj1LbC5RYyhlKSxpPShlLHQpPT5lLnJlbW90ZVNzcmNzLmZpbHRlcigoZT0+ZS50eXBlPT09eGxbdF0pKS5tYXAoJGwpLG89bi5yZW1vdGVBdXRoRGF0YSxhPXsuLi4ocz1uLnN0cmVhbWVyQ29ublBhcmFtcy5lbmRwb2ludCx7b3JpZ2luOnt1c2VybmFtZTpcInNlcnZlclwiLHNlc3Npb25JZDpcIjFcIixzZXNzaW9uVmVyc2lvbjoxLG5ldFR5cGU6XCJJTlwiLGlwVmVyOjQsYWRkcmVzczpzfSxuYW1lOlwidGVzdFwiLHRpbWluZzp7c3RhcnQ6MCxzdG9wOjB9LGljZWxpdGU6XCJpY2UtbGl0ZVwiLHNldHVwOlwicGFzc2l2ZVwifSksZmluZ2VycHJpbnQ6e3R5cGU6by5kdGxzRmluZ2VycHJpbnQudHlwZSxoYXNoOm8uZHRsc0ZpbmdlcnByaW50LmRpZ2VzdH0sbWVkaWE6W3suLi5hdShuLnN0cmVhbWVyQ29ublBhcmFtcy53ZWJydGNQb3J0KSwuLi5vdShcImF1ZGlvXCIpLC4uLnN1KG8pLC4uLnV1KFwiYXVkaW9cIixyLm1lZGlhKSxzc3JjczpbLi4uaShuLFwiYXVkaW9cIildLG1pZDpcIjBcIixkaXJlY3Rpb246XCJyZWN2b25seVwifSx7Li4uYXUobi5zdHJlYW1lckNvbm5QYXJhbXMud2VicnRjUG9ydCksLi4ub3UoXCJ2aWRlb1wiKSwuLi5zdShvKSwuLi51dShcInZpZGVvXCIsci5tZWRpYSksc3NyY3M6Wy4uLmkobixcInZpZGVvXCIpXSxtaWQ6XCIxXCIsZGlyZWN0aW9uOlwicmVjdm9ubHlcIn1dfTt2YXIgczthLm1lZGlhLnB1c2goey4uLmF1KG4uc3RyZWFtZXJDb25uUGFyYW1zLndlYnJ0Y1BvcnQpLC4uLm91KFwidmlkZW9cIiksLi4uc3UobyksLi4udXUoXCJ2aWRlb1wiLHIubWVkaWEpLHNzcmNzOlsuLi5pKG4sXCJzY3JlZW5cIildLG1pZDpcIjJcIixkaXJlY3Rpb246XCJyZWN2b25seVwifSk7Zm9yKGxldCBlPTM7ZTxyLm1lZGlhLmxlbmd0aDsrK2Upe2NvbnN0IGk9ci5tZWRpYVtlXTt0cnl7aWYoIWkubWlkKXRocm93IEVycm9yKFwibWlkIGlzIG5vdCBzcGVjaWZpZWQgZm9yIG0gc2VjdGlvblwiKTtpZighaS5kaXJlY3Rpb24pdGhyb3cgRXJyb3IoXCJkaXJlY3Rpb24gaXMgbm90IHNwZWNpZmllZCBmb3IgbSBzZWN0aW9uXCIpO2NvbnN0IGU9ZHUoaS5taWQudG9TdHJpbmcoKSxpLnR5cGUsaS5kaXJlY3Rpb24saSx0LG4sci5tZWRpYSk7YS5tZWRpYS5wdXNoKGUpfWNhdGNoKGUpeygwLEUuVGIpKGUpLGkubWlkJiZhLm1lZGlhLnB1c2goY3UoaS50eXBlLGkubWlkKSl9fXJldHVybiBhLmdyb3Vwcz1sdShhLm1lZGlhKSx7dHlwZTpcImFuc3dlclwiLHNkcDpLbC5jVyhhKX19Y29uc3QgcHU9W3tjaGFubmVsczoyLGNsb2NrUmF0ZTo0OGUzLG1pbWVUeXBlOlwiYXVkaW8vb3B1c1wiLHNkcEZtdHBMaW5lOlwibWlucHRpbWU9MTA7dXNlaW5iYW5kZmVjPTFcIixwYXlsb2FkVHlwZToxMTF9XTtmdW5jdGlvbiBtdShlLHQpe3N3aXRjaCh0KXtjYXNlXCJhdWRpb1wiOmh1KGUscHUpO2JyZWFrO2Nhc2VcInZpZGVvXCI6aHUoZSxmdW5jdGlvbigpe2NvbnN0IGU9UlRDUnRwUmVjZWl2ZXIuZ2V0Q2FwYWJpbGl0aWVzKFwidmlkZW9cIiksdD1lPy5jb2RlY3MuZmlsdGVyKChlPT5cInZpZGVvL2gyNjRcIj09PWUubWltZVR5cGUudG9Mb3dlckNhc2UoKSkpLG49ZT8uY29kZWNzLmZpbHRlcigoZT0+XCJ2aWRlby9ydHhcIj09PWUubWltZVR5cGUudG9Mb3dlckNhc2UoKSkpO2lmKCF0fHwhbil0aHJvdyBFcnJvcihcIkgyNjQgd2l0aCBSVFggaXMgbm90IHN1cHBvcnRlZFwiKTtjb25zdCByPXQuZmlsdGVyKChlPT5cImxldmVsLWFzeW1tZXRyeS1hbGxvd2VkPTE7cGFja2V0aXphdGlvbi1tb2RlPTA7cHJvZmlsZS1sZXZlbC1pZD00MmUwMWZcIj09PWUuc2RwRm10cExpbmUpKSxpPTAhPT1yLmxlbmd0aD9yWzBdOnRbMF07cmV0dXJuW3suLi5uWzBdLHBheWxvYWRUeXBlOjk4fSx7Li4uaSxwYXlsb2FkVHlwZTpZbH1dfSgpKX19ZnVuY3Rpb24gaHUoZSx0KXtlLnNldENvZGVjUHJlZmVyZW5jZXModCl9YXN5bmMgZnVuY3Rpb24gdnUoZSl7aWYoIWUudHJhY2spdGhyb3cgRXJyb3IoXCJubyB0cmFjayBmb3IgdmlkZW8gc2VuZGVyXCIpO2NvbnN0IHQ9ZS5nZXRQYXJhbWV0ZXJzKCkse3dpZHRoOm49MSxoZWlnaHQ6cj0xfT1lLnRyYWNrLmdldFNldHRpbmdzKCksaT1NYXRoLm1heCgxLG4vMzYwLHIvNjQwKTt0cnl7dC5lbmNvZGluZ3NbMF0uc2NhbGVSZXNvbHV0aW9uRG93bkJ5PWksdC5lbmNvZGluZ3NbMF0ubWF4Qml0cmF0ZT04ZTUsYXdhaXQgZS5zZXRQYXJhbWV0ZXJzKHQpfWNhdGNoKGUpeygwLEUuVGIpKGUpfX1hc3luYyBmdW5jdGlvbiBndShlKXtpZighZS50cmFjayl0aHJvdyBFcnJvcihcIm5vIHRyYWNrIGZvciB2aWRlbyBzZW5kZXJcIik7Y29uc3QgdD1lLmdldFBhcmFtZXRlcnMoKTt0cnl7dC5kZWdyYWRhdGlvblByZWZlcmVuY2U9XCJtYWludGFpbi1yZXNvbHV0aW9uXCIsYXdhaXQgZS5zZXRQYXJhbWV0ZXJzKHQpfWNhdGNoKGUpeygwLEUuVGIpKGUpfX1jKCkuZ2V0TG9nZ2VyKFwiW1RhbGtdW3J0Y0hlbHBlcnNdXCIpLGMoKS5nZXRMb2dnZXIoXCJbVGFsa11bc3BlZWNoXVwiKTtjbGFzcyB5dXthdWRpb0NvbnRleHQ9bmV3IEF1ZGlvQ29udGV4dDtzb3VyY2VOb2RlPW51bGw7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnNwZWVjaExpc3RlbmVyPWUsdGhpcy5yZW1vdGVVc2Vyc0ZldGNoZXI9dCx0aGlzLmFuYWx5c2VyPXRoaXMuYXVkaW9Db250ZXh0LmNyZWF0ZUFuYWx5c2VyKCksdGhpcy5hbmFseXNlci5mZnRTaXplPTUxMix0aGlzLmFuYWx5c2VyLnNtb290aGluZ1RpbWVDb25zdGFudD0uMSx0aGlzLmZmdEJpbnM9bmV3IEZsb2F0MzJBcnJheSh0aGlzLmFuYWx5c2VyLmZyZXF1ZW5jeUJpbkNvdW50KX1zdGFydD0oKT0+e3ZvaWQgMD09PXRoaXMuc3BlZWNoQWN0aXZpdHlJbnRlcnZhbElkJiYodGhpcy5zcGVlY2hBY3Rpdml0eUludGVydmFsSWQ9d2luZG93LnNldEludGVydmFsKCgoKT0+dGhpcy5vblNwZWVjaEFjdGl2aXR5VGltZXIoKSksMzAwKSl9O3N0b3A9KCk9PntjbGVhckludGVydmFsKHRoaXMuc3BlZWNoQWN0aXZpdHlJbnRlcnZhbElkKSx0aGlzLnNwZWVjaEFjdGl2aXR5SW50ZXJ2YWxJZD12b2lkIDAsdGhpcy5yZWxlYXNlTWljQW5hbHlzZXIoKSxcImNsb3NlZFwiIT09dGhpcy5hdWRpb0NvbnRleHQuc3RhdGUmJnRoaXMuYXVkaW9Db250ZXh0LmNsb3NlKCl9O3VwZGF0ZU1pY1NvdXJjZT1lPT57dGhpcy5yZWxlYXNlTWljQW5hbHlzZXIoKSxlJiYodGhpcy5zb3VyY2VOb2RlPXRoaXMuYXVkaW9Db250ZXh0LmNyZWF0ZU1lZGlhU3RyZWFtU291cmNlKGUpLHRoaXMuc291cmNlTm9kZS5jb25uZWN0KHRoaXMuYW5hbHlzZXIpKX07YWRkTWljTGV2ZWw9ZT0+e2NvbnN0IHQ9e3RhbGtVc2VySWQ6LTFuLHVzZXJTZXNzaW9uSWQ6LTFuLHNlc3Npb25UeXBlOkZjLldFQn07aWYoIXRoaXMuc291cmNlTm9kZSlyZXR1cm4gdm9pZCBlLnB1c2goe3RhbGtJZDp0LGFjdGl2aXR5OjB9KTtjb25zdCBuPXRoaXMuZ2V0TWF4TG9jYWxWb2x1bWUoKSxyPVstNDUsLTI3LC0yMiwtMTksLTE1LC0xMCwtNywtNSwtNF07bGV0IGk9MDtmb3IoO2k8OSYmbj49cltpXTtpKyspO2k8NyYmKGkrPTIpO2NvbnN0IG89MjU1KmkvOTtlLnB1c2goe3RhbGtJZDp0LGFjdGl2aXR5Om99KX07YWRkUmVtb3RlVXNlcnNMZXZlbD1lPT57Zm9yKGNvbnN0IHQgb2YgdGhpcy5yZW1vdGVVc2Vyc0ZldGNoZXIuZ2V0UmVtb3RlVXNlcnMoKSl7aWYoIXQuYXVkaW8ucHVibGlzaGVkKWNvbnRpbnVlO2NvbnN0IG49dC5hdWRpby50cmFuc2NlaXZlci5yZWNlaXZlci5nZXRTeW5jaHJvbml6YXRpb25Tb3VyY2VzKCk7aWYobi5sZW5ndGg8MSljb250aW51ZTtjb25zdCByPTMyNzY4KihuWzBdLmF1ZGlvTGV2ZWw/PzApO2xldCBpPVswLDEsMiwzLDQsNCw1LDUsNSw1LDYsNiw2LDYsNiw3LDcsNyw3LDgsOCw4LDksOSw5LDksOSw5LDksOSw5LDksOV1bTWF0aC5mbG9vcihyLzFlMyldOzA9PT1pJiZyPjI1MCYmKytpO2NvbnN0IG89MjU1KmkvOTtlLnB1c2goe3RhbGtJZDp0LnRhbGtJZCxhY3Rpdml0eTpvfSl9fTtvblNwZWVjaEFjdGl2aXR5VGltZXI9KCk9Pntjb25zdCBlPW5ldyBBcnJheTt0aGlzLmFkZE1pY0xldmVsKGUpLHRoaXMuYWRkUmVtb3RlVXNlcnNMZXZlbChlKSx0aGlzLnNwZWVjaExpc3RlbmVyLm9uU3BlZWNoQWN0aXZpdHkoZSl9O2dldE1heExvY2FsVm9sdW1lPSgpPT57bGV0IGU9LTEvMDt0aGlzLmFuYWx5c2VyLmdldEZsb2F0RnJlcXVlbmN5RGF0YSh0aGlzLmZmdEJpbnMpO2ZvcihsZXQgdD00O3Q8dGhpcy5mZnRCaW5zLmxlbmd0aDt0KyspdGhpcy5mZnRCaW5zW3RdPmUmJnRoaXMuZmZ0Qmluc1t0XTwwJiYoZT10aGlzLmZmdEJpbnNbdF0pO3JldHVybiBlfTtyZWxlYXNlTWljQW5hbHlzZXI9KCk9Pnt0aGlzLnNvdXJjZU5vZGUmJih0aGlzLmFuYWx5c2VyLmRpc2Nvbm5lY3QoKSx0aGlzLnNvdXJjZU5vZGUuZGlzY29ubmVjdCgpLHRoaXMuc291cmNlTm9kZT1udWxsKX19YygpLmdldExvZ2dlcihcIltUYWxrXVtzdGF0c11cIik7Y29uc3QgRXU9KGUsdCk9PnZvaWQgMCE9PXQ/YCR7ZX06ICR7dH1gOlwiXCI7Y2xhc3MgX3V7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnN0YXRzPWUsdGhpcy5iaXRyYXRlPXR9dG9TdHJpbmcoKXtsZXQgZT1ga2JwczogJHsoKHRoaXMuYml0cmF0ZT8/MCkvMTAyNCkudG9GaXhlZCgzKX07ICR7KGU9PnZvaWQgMCE9PWUuZnJhbWVIZWlnaHQmJnZvaWQgMCE9PWUuZnJhbWVXaWR0aD9gcmVzb2x1dGlvbjogJHtlLmZyYW1lV2lkdGh9eCR7ZS5mcmFtZUhlaWdodH1gOlwiXCIpKHRoaXMuc3RhdHMpfTsgJHtFdShcImZwc1wiLHRoaXMuc3RhdHMuZnJhbWVzUGVyU2Vjb25kKX07YDtpZihcImluYm91bmQtcnRwXCI9PT10aGlzLnN0YXRzLnR5cGUpe2NvbnN0IHQ9dGhpcy5zdGF0cztlKz1gICR7RXUoXCJsb3N0XCIsdC5wYWNrZXRzTG9zdCl9OyAke0V1KFwiZGlzY2FyZGVkXCIsdC5wYWNrZXRzRGlzY2FyZGVkKX07ICR7RXUoXCJrZXkgZnJhbWVzXCIsdC5rZXlGcmFtZXNEZWNvZGVkKX07ICR7RXUoXCJkZWNvZGVyXCIsdC5kZWNvZGVySW1wbGVtZW50YXRpb24pfWB9ZWxzZXtjb25zdCB0PXRoaXMuc3RhdHM7ZSs9YCAke0V1KFwia2V5IGZyYW1lc1wiLHQua2V5RnJhbWVzRW5jb2RlZCl9OyAke0V1KFwiUExJc1wiLHQucGxpQ291bnQpfTsgJHtFdShcImVuY29kZXJcIix0LmVuY29kZXJJbXBsZW1lbnRhdGlvbil9OyAke0V1KFwicXVhbGl0eSBsaW1pdFwiLHQucXVhbGl0eUxpbWl0YXRpb25SZWFzb24pfWB9cmV0dXJuIGV9fWNsYXNzIEl1e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5zdGF0cz1lLHRoaXMuYml0cmF0ZT10fXRvU3RyaW5nKCl7bGV0IGU9YGticHM6ICR7KCh0aGlzLmJpdHJhdGU/PzApLzEwMjQpLnRvRml4ZWQoMyl9OyBgO2lmKFwiaW5ib3VuZC1ydHBcIj09PXRoaXMuc3RhdHMudHlwZSl7Y29uc3QgdD10aGlzLnN0YXRzO2UrPWAke0V1KFwibG9zdFwiLHQucGFja2V0c0xvc3QpfTsgJHtFdShcImRpc2NhcmRlZFwiLHQucGFja2V0c0Rpc2NhcmRlZCl9OyAke0V1KFwibGV2ZWxcIix0LmF1ZGlvTGV2ZWw/LnRvRml4ZWQoNCkpfWB9ZWxzZXtjb25zdCB0PXRoaXMuc3RhdHM7ZSs9YCR7RXUoXCJOQUNLc1wiLHQubmFja0NvdW50KX07IGFjdGl2ZTogYCsodC5hY3RpdmU/XCJ0cnVlXCI6XCJmYWxzZVwiKX1yZXR1cm4gZX19Y2xhc3MgU3V7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMudmlkZW89ZSx0aGlzLmF1ZGlvPXQsdGhpcy5zY3JlZW49bn10b1N0cmluZygpe3JldHVybmB2aWRlbzogJHt0aGlzLnZpZGVvP2B7JHt0aGlzLnZpZGVvLnRvU3RyaW5nKCl9fWA6XCI8bm9uZT5cIn07IGF1ZGlvOiAke3RoaXMuYXVkaW8/YHske3RoaXMuYXVkaW8udG9TdHJpbmcoKX19YDpcIjxub25lPlwifSwgc2NyZWVuOiAke3RoaXMuc2NyZWVuP2B7JHt0aGlzLnNjcmVlbi50b1N0cmluZygpfX1gOlwiPG5vbmU+XCJ9YH19Y2xhc3MgYnV7bG9jYWxBdWRpb0JpdHJhdGVDYWxjdWxhdG9yPW5ldyBVbDtsb2NhbFZpZGVvQml0cmF0ZUNhbGN1bGF0b3I9bmV3IFVsO2xvY2FsU2NyZWVuQml0cmF0ZUNhbGN1bGF0b3I9bmV3IFVsO2NvbnN0cnVjdG9yKGUsdCxuKXt0aGlzLnBjPWUsdGhpcy5yZW1vdGVVc2Vyc0ZldGNoZXI9dCx0aGlzLmNhbGxpbmdTZXJ2aWNlc0xpc3RlbmVyPW4sdGhpcy5zdGF0c0ludGVydmFsSWQ9d2luZG93LnNldEludGVydmFsKCgoKT0+dGhpcy5vblN0YXRzVGltZXIoKSksMmUzKX1vblN0YXRzVGltZXI9KCk9Pnt0aGlzLnBjLmdldFN0YXRzKG51bGwpLnRoZW4oKGU9Pntjb25zdCB0PW5ldyBNYXAsbj1uZXcgU3U7Zm9yKGNvbnN0W3IsaV1vZiBlKXtjb25zdCBlPWk7aWYoXCJpbmJvdW5kLXJ0cFwiPT09ZS50eXBlKXtjb25zdCBlPWk7aWYoXCJ2aWRlb1wiPT09ZS5raW5kKXtjb25zdCBuPXRoaXMucmVtb3RlVXNlcnNGZXRjaGVyLmdldEJ5U3NyYyhlLnNzcmMsXCJ2aWRlb1wiKTtpZihuKXtjb25zdCByPXRoaXMucHJvY2Vzc0luYm91bmRWaWRlb1N0YXRzKG4sZSxCYy5WSURFTyksaT10LmdldChuLnRhbGtJZCk7dC5zZXQobi50YWxrSWQsbmV3IFN1KG5ldyBfdShlLHIpLGk/LmF1ZGlvLGk/LnNjcmVlbikpfWVsc2V7Y29uc3Qgbj10aGlzLnJlbW90ZVVzZXJzRmV0Y2hlci5nZXRCeVNzcmMoZS5zc3JjLFwic2NyZWVuXCIpO2lmKCFuKWNvbnRpbnVlO2NvbnN0IHI9dGhpcy5wcm9jZXNzSW5ib3VuZFZpZGVvU3RhdHMobixlLEJjLlNDUkVFTiksaT10LmdldChuLnRhbGtJZCk7dC5zZXQobi50YWxrSWQsbmV3IFN1KGk/LnZpZGVvLGk/LmF1ZGlvLG5ldyBfdShlLHIpKSl9fWVsc2UgaWYoXCJhdWRpb1wiPT09ZS5raW5kKXtjb25zdCBuPXRoaXMucmVtb3RlVXNlcnNGZXRjaGVyLmdldEJ5U3NyYyhlLnNzcmMsXCJhdWRpb1wiKTtpZighbiljb250aW51ZTtjb25zdCByPWUuYnl0ZXNSZWNlaXZlZD84KmUuYnl0ZXNSZWNlaXZlZDp2b2lkIDAsaT1uLmF1ZGlvQml0cmF0ZUNhbGN1bGF0b3IudXBkYXRlKGUudGltZXN0YW1wLHIpLG89dC5nZXQobi50YWxrSWQpO3Quc2V0KG4udGFsa0lkLG5ldyBTdShvPy52aWRlbyxuZXcgSXUoZSxpKSxvPy5zY3JlZW4pKX19ZWxzZSBpZihcIm91dGJvdW5kLXJ0cFwiPT09ZS50eXBlKXtjb25zdCBlPWksdD1lLmJ5dGVzU2VudD84KmUuYnl0ZXNTZW50OnZvaWQgMDtpZihcInZpZGVvXCI9PT1lLmtpbmQpaWYodGhpcy5sb2NhbFNjcmVlblNzcmMmJk51bWJlcih0aGlzLmxvY2FsU2NyZWVuU3NyYyk9PT1lLnNzcmMpe2NvbnN0IHI9dGhpcy5sb2NhbFNjcmVlbkJpdHJhdGVDYWxjdWxhdG9yLnVwZGF0ZShlLnRpbWVzdGFtcCx0KTtuLnNjcmVlbj1uZXcgX3UoZSxyKX1lbHNle2NvbnN0IHI9dGhpcy5sb2NhbFZpZGVvQml0cmF0ZUNhbGN1bGF0b3IudXBkYXRlKGUudGltZXN0YW1wLHQpO24udmlkZW89bmV3IF91KGUscil9ZWxzZSBpZihcImF1ZGlvXCI9PT1lLmtpbmQpe2NvbnN0IHI9dGhpcy5sb2NhbEF1ZGlvQml0cmF0ZUNhbGN1bGF0b3IudXBkYXRlKGUudGltZXN0YW1wLHQpO24uYXVkaW89bmV3IEl1KGUscil9fX1mb3IoY29uc3RbZSxuXW9mIHQpO30pKS5jYXRjaCgoZT0+e3Rocm93IGV9KSl9O3Byb2Nlc3NJbmJvdW5kVmlkZW9TdGF0cyhlLHQsbil7Y29uc3Qgcj12b2lkIDAhPT10LmZyYW1lc1JlY2VpdmVkJiZ2b2lkIDAhPT10LmZyYW1lc0RlY29kZWQmJnZvaWQgMCE9PXQuZnJhbWVzRHJvcHBlZD97ZnJhbWVzUmVjZWl2ZWQ6dC5mcmFtZXNSZWNlaXZlZCxmcmFtZXNEcm9wcGVkOnQuZnJhbWVzRHJvcHBlZCxmcmFtZXNEZWNvZGVkOnQuZnJhbWVzRGVjb2RlZH06dm9pZCAwLGk9e3BhY2tldHNSZWNlaXZlZDp0LnBhY2tldHNSZWNlaXZlZD8/MCxwYWNrZXRzTG9zdDp0LnBhY2tldHNMb3N0Pz8wLHBhY2tldHNEaXNjYXJkZWQ6dC5wYWNrZXRzRGlzY2FyZGVkPz8wfSxvPXQuYnl0ZXNSZWNlaXZlZD9CaWdJbnQodC5ieXRlc1JlY2VpdmVkKTp2b2lkIDAsYT10aGlzLmNhbGxpbmdTZXJ2aWNlc0xpc3RlbmVyLm9uTWVkaWFTdGF0cyhlLnRhbGtJZCxuLHt2aWRlb0J5dGVzUmVjZWl2ZWQ6byx2aWRlb0ZyYW1lU3RhdHM6cix2aWRlb1BhY2tldFN0YXRzOml9KTtyZXR1cm4gYSYmIWUuZmlyc3RWaWRlb0ZyYW1lUmVjZWl2ZWQmJm49PT1CYy5WSURFTyYmKHRoaXMuY2FsbGluZ1NlcnZpY2VzTGlzdGVuZXIub25WaWRlb0Zsb3dpbmcoZS50YWxrSWQpLGUuZmlyc3RWaWRlb0ZyYW1lUmVjZWl2ZWQ9ITApLGF9dXBkYXRlTG9jYWxTc3Jjcz1lPT57dGhpcy5sb2NhbFNjcmVlblNzcmM9RmwoXCJzY3JlZW5cIixlKX07c3RvcD0oKT0+e2NsZWFySW50ZXJ2YWwodGhpcy5zdGF0c0ludGVydmFsSWQpfX1jKCkuZ2V0TG9nZ2VyKFwiW1RhbGtdW2NhbGxpbmdTZXJ2aWNlc11cIik7Y2xhc3MgVHV7Y29ubmVjdGlvbj1uZXcgUlRDUGVlckNvbm5lY3Rpb24oe3NkcFNlbWFudGljczpcInVuaWZpZWQtcGxhblwiLGJ1bmRsZVBvbGljeTpcIm1heC1idW5kbGVcIixydGNwTXV4UG9saWN5OlwicmVxdWlyZVwifSk7d2Vic29ja2V0V3JhcHBlcj1uZXcgTmwodGhpcyk7dXNlcnM9bmV3IEhsO3JlbW90ZVVzZXJFdmVudFF1ZXVlPW5ldyBSbCh7Y29uY3VycmVuY3k6MX0pO2luTmVnb3RpYXRpb249ITE7Y29uc3RydWN0b3IoZSl7dGhpcy5saXN0ZW5lcj1lLHRoaXMuY29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZT1UdS5vbkljZUNhbmRpZGF0ZSx0aGlzLmNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGVlcnJvcj1UdS5vbkljZUNhbmRpZGF0ZUVycm9yLHRoaXMuY29ubmVjdGlvbi5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZT10aGlzLm9uSWNlQ29ubmVjdGlvblN0YXRlQ2hhbmdlLHRoaXMuY29ubmVjdGlvbi5vbmljZWdhdGhlcmluZ3N0YXRlY2hhbmdlPXRoaXMub25JY2VHYXRoZXJpbmdTdGF0ZUNoYW5nZSx0aGlzLmNvbm5lY3Rpb24ub25uZWdvdGlhdGlvbm5lZWRlZD1UdS5vbk5lZ290aWF0aW9uTmVlZGVkLHRoaXMuY29ubmVjdGlvbi5vbnNpZ25hbGluZ3N0YXRlY2hhbmdlPXRoaXMub25TaWduYWxpbmdTdGF0ZUNoYW5nZSx0aGlzLmNvbm5lY3Rpb24ub25jb25uZWN0aW9uc3RhdGVjaGFuZ2U9dGhpcy5vbkNvbm5lY3Rpb25TdGF0ZUNoYW5nZSx0aGlzLmNvbm5lY3Rpb24ub250cmFjaz10aGlzLm9uVHJhY2tFdmVudCx0aGlzLnNwZWVjaE1vbml0b3I9bmV3IHl1KHRoaXMubGlzdGVuZXIsdGhpcy51c2VycyksdGhpcy5zdGF0c1Byb2Nlc3Nvcj1uZXcgYnUodGhpcy5jb25uZWN0aW9uLHRoaXMudXNlcnMsdGhpcy5saXN0ZW5lcil9c3RhdGljIG9uSWNlQ2FuZGlkYXRlPWU9Pnt9O3N0YXRpYyBvbkljZUNhbmRpZGF0ZUVycm9yPWU9Pnt9O29uSWNlQ29ubmVjdGlvblN0YXRlQ2hhbmdlPSgpPT57XCJmYWlsZWRcIj09PXRoaXMuY29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUmJnRoaXMubGlzdGVuZXIub25NZWRpYUNvbm5lY3Rpb25GYWlsZWQoeGMuTkVUV09SSyl9O29uSWNlR2F0aGVyaW5nU3RhdGVDaGFuZ2U9KCk9Pnt9O3N0YXRpYyBvbk5lZ290aWF0aW9uTmVlZGVkPWU9Pnt9O29uU2lnbmFsaW5nU3RhdGVDaGFuZ2U9KCk9Pnt9O29uQ29ubmVjdGlvblN0YXRlQ2hhbmdlPSgpPT57aWYoXCJmYWlsZWRcIj09PXRoaXMuY29ubmVjdGlvbi5jb25uZWN0aW9uU3RhdGUpdGhpcy5saXN0ZW5lci5vbk1lZGlhQ29ubmVjdGlvbkZhaWxlZCh4Yy5ORVRXT1JLKTtlbHNlIGlmKFwiY29ubmVjdGVkXCI9PT10aGlzLmNvbm5lY3Rpb24uY29ubmVjdGlvblN0YXRlKXtmb3IoY29uc3QgZSBvZiBMbCh0aGlzLmNvbm5lY3Rpb24pKTt0aGlzLmxpc3RlbmVyLm9uTWVkaWFDb25uZWN0ZWQoKSx0aGlzLnNwZWVjaE1vbml0b3Iuc3RhcnQoKX19O29uVHJhY2tFdmVudD1lPT57aWYoIWUudHJhbnNjZWl2ZXIubWlkKXJldHVybiB2b2lkKDAsRS51VCkoXCJvblRyYWNrRXZlbnQ6IHRyYW5zY2VpdmVyLm1pZCBpcyBub3QgYXZhaWxhYmxlXCIsV2Muei5FcnJvcik7Y29uc3QgdD10aGlzLnVzZXJzLmdldEJ5TWlkKGUudHJhbnNjZWl2ZXIubWlkKTt0JiYodC51cGRhdGVGcm9tVHJhY2tFdmVudChlKSx0aGlzLmxpc3RlbmVyLm9uRmlyc3RNZWRpYVBhY2tldEZyb20odC50YWxrSWQpKX07b25XZWJzb2NrZXRDbG9zZShlKXtlLndhc0NsZWFuPzQwMz09PWUuY29kZT90aGlzLmxpc3RlbmVyLm9uU2lnbmFsaW5nQ29ubmVjdGlvbkZhaWxlZCh4Yy5BVVRIKTp0aGlzLmxpc3RlbmVyLm9uU2lnbmFsaW5nQ29ubmVjdGlvbkZhaWxlZCh4Yy5GQVRBTCk6dGhpcy5saXN0ZW5lci5vblNpZ25hbGluZ0Nvbm5lY3Rpb25GYWlsZWQoeGMuTkVUV09SSyl9b25XZWJzb2NrZXRFcnIoZSl7dGhpcy5saXN0ZW5lci5vblNpZ25hbGluZ0Nvbm5lY3Rpb25GYWlsZWQoeGMuTkVUV09SSyl9YXN5bmMgb25XZWJzb2NrZXRNZXNzYWdlKGUpe3JldHVybiB0aGlzLmxpc3RlbmVyLm9uTWVzc2FnZShuZXcgVWludDhBcnJheShlLmRhdGEpKSxQcm9taXNlLnJlc29sdmUodm9pZCAwKX1vbldlYnNvY2tldE9wZW4oZSx0KXt0aGlzLmFwcGx5TWVkaWFDb25uQ2hhbmdlKChhc3luYygpPT57dHJ5e2F3YWl0IHRoaXMuaW5pdExvY2FsTWVkaWFGb3JDYWxsKCksdGhpcy5zZXR1cElucHV0U3RyZWFtTGlzdGVuZXJzKCk7Y29uc3Qgbj1hd2FpdCB0aGlzLmNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIoKSxbcixpXT1mdW5jdGlvbihlKXtjb25zdCB0PUtsLlFjKGUpLG49KGUsdCk9PntpZighdClyZXR1cm47Y29uc3Qgbj10LmZpbmQoKHQ9PnQudXJpPT09ZS51cmkpKTtpZighbilyZXR1cm47aWYobi52YWx1ZT09PWUudmFsdWUpcmV0dXJuO2NvbnN0IHI9dC5maW5kKCh0PT50LnZhbHVlPT09ZS52YWx1ZSkpO3ImJihyLnZhbHVlPW4udmFsdWUpLG4udmFsdWU9ZS52YWx1ZX07aWYodC5tZWRpYS5sZW5ndGg8Myl0aHJvdyBFcnJvcihcImludmFsaWQgU0RQOiBub3QgZW5vdWdoIG0gc2VjdGlvbnNcIik7bihYbCx0Lm1lZGlhWzBdLmV4dCksbihxbCx0Lm1lZGlhWzBdLmV4dCksbihxbCx0Lm1lZGlhWzFdLmV4dCksbihxbCx0Lm1lZGlhWzJdLmV4dCk7Y29uc3Qgcj10Lm1lZGlhWzBdO2lmKCFyLmZpbmdlcnByaW50Py50eXBlKXRocm93IEVycm9yKFwiaW52YWxpZCBTRFA6IG1pc3NpbmcgRFRMUyBmaW5nZXJwcmludCB0eXBlXCIpO2lmKCFbXCJtZDVcIixcInNoYS0xXCIsXCJzaGEtMjI0XCIsXCJzaGEtMjU2XCIsXCJzaGEtMzg0XCIsXCJzaGEtNTEyXCJdLmluY2x1ZGVzKHIuZmluZ2VycHJpbnQudHlwZSkpdGhyb3cgRXJyb3IoXCJVbnN1cHBvcnRlZCBEVExTIGZpbmdlcnByaW50IHR5cGU6IFwiK3IuZmluZ2VycHJpbnQudHlwZSk7aWYoIXIuZmluZ2VycHJpbnQuaGFzaCl0aHJvdyBFcnJvcihcImludmFsaWQgU0RQOiBtaXNzaW5nIERUTFMgZmluZ2VycHJpbnQgaGFzaFwiKTtpZighL15bMC05YS1mQS1GOl0rJC8udGVzdChyLmZpbmdlcnByaW50Lmhhc2gpKXRocm93IEVycm9yKFwiaW52YWxpZCBTRFA6IGludmFsaWQgRFRMUyBmaW5nZXJwcmludDogXCIrci5maW5nZXJwcmludC5oYXNoKTtyZXR1cm5be3R5cGU6XCJvZmZlclwiLHNkcDpLbC5jVyh0KX0se2R0bHNGaW5nZXJwcmludDp7dHlwZTpyLmZpbmdlcnByaW50LnR5cGUsZGlnZXN0OnIuZmluZ2VycHJpbnQuaGFzaH19XX0obi5zZHA/P1wiXCIpO2F3YWl0IHRoaXMuY29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKHIpO2NvbnN0IG89e3NhbHQ6ZS5zYWx0LHNpZ25hdHVyZTplLnNpZ25hdHVyZSx0YWxrSWQ6e3RhbGtVc2VySWQ6ZS51c2VySWQsdXNlclNlc3Npb25JZDpCaWdJbnQoMCksc2Vzc2lvblR5cGU6RmMuV0VCfSxleHBpcmVzTXM6ZS5leHBpcmVzfTt0aGlzLmxpc3RlbmVyLm9uU2lnbmFsaW5nQ29ubmVjdGVkKGksbyx0KX1jYXRjaChlKXsoMCxFLlRiKShlKSx0aGlzLmxpc3RlbmVyLm9uU2lnbmFsaW5nQ29ubmVjdGlvbkZhaWxlZCh4Yy5ORVRXT1JLKX19KSl9c3RhdGljIGhhbmRsZVN0cmVhbVVwZGF0ZShlLHQsbixyKXtjb25zdCBpPXQobik7aWYoaS5sZW5ndGg+MCl7aWYoMSE9PWkubGVuZ3RoKXRocm93IEVycm9yKGBleHBlY3RpbmcgMS10cmFjayBzdHJlYW1zIGJ1dCBnb3QgJHtpLmxlbmd0aH1gKTtjb25zdCB0PWlbMF07aWYoIXQpdGhyb3cgRXJyb3IoXCJOZXcgdHJhY2sgaXMgbm90IHNldFwiKTtlPy5zZW5kZXIucmVwbGFjZVRyYWNrKHQpLnRoZW4oKGFzeW5jKCk9Pnthd2FpdChyPy4oZS5zZW5kZXIpKX0pKX1lbHNlIGU/LnNlbmRlci5yZXBsYWNlVHJhY2sobnVsbCl9c2V0dXBJbnB1dFN0cmVhbUxpc3RlbmVycygpe2NvbnN0e3N1YnNjcmliZTplfT1NZDt0aGlzLnVuc3ViQXVkaW9TdHJlYW1MaXN0ZW5lcj1lKChlPT5lLm1lZGlhLmxvY2FsLmF1ZGlvLnN0cmVhbSksKChlLHQpPT57VHUuaGFuZGxlU3RyZWFtVXBkYXRlKHRoaXMuYXVkaW9UcmFuc2NlaXZlciwoZT0+ZT8uZ2V0QXVkaW9UcmFja3MoKT8/W10pLGUpLGUmJnRoaXMuc3BlZWNoTW9uaXRvci51cGRhdGVNaWNTb3VyY2UoZSl9KSksdGhpcy51bnN1YlZpZGVvU3RyZWFtTGlzdGVuZXI9ZSh3bC5uMiwoKGUsdCk9PntUdS5oYW5kbGVTdHJlYW1VcGRhdGUodGhpcy52aWRlb1RyYW5zY2VpdmVyLChlPT5lPy5nZXRWaWRlb1RyYWNrcygpPz9bXSksZSx2dSl9KSksdGhpcy51bnN1YlNjcmVlblN0cmVhbUxpc3RlbmVyPWUoKGU9PmUubWVkaWEubG9jYWwuc2NyZWVuLnN0cmVhbSksKChlLHQpPT57VHUuaGFuZGxlU3RyZWFtVXBkYXRlKHRoaXMuc2NyZWVuVHJhbnNjZWl2ZXIsKGU9PmU/LmdldFZpZGVvVHJhY2tzKCk/P1tdKSxlLGd1KX0pKX10ZWFyZG93bklucHV0U3RyZWFtTGlzdGVuZXJzKCl7dGhpcy51bnN1YkF1ZGlvU3RyZWFtTGlzdGVuZXI/LigpLHRoaXMudW5zdWJWaWRlb1N0cmVhbUxpc3RlbmVyPy4oKSx0aGlzLnVuc3ViU2NyZWVuU3RyZWFtTGlzdGVuZXI/LigpfWFzeW5jIGluaXRMb2NhbE1lZGlhRm9yQ2FsbCgpe3RoaXMuYXVkaW9UcmFuc2NlaXZlcj10aGlzLmNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIoXCJhdWRpb1wiLHtkaXJlY3Rpb246XCJzZW5kb25seVwifSksbXUodGhpcy5hdWRpb1RyYW5zY2VpdmVyLFwiYXVkaW9cIiksdGhpcy52aWRlb1RyYW5zY2VpdmVyPXRoaXMuY29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcihcInZpZGVvXCIse2RpcmVjdGlvbjpcInNlbmRvbmx5XCJ9KSxtdSh0aGlzLnZpZGVvVHJhbnNjZWl2ZXIsXCJ2aWRlb1wiKSx0aGlzLnNjcmVlblRyYW5zY2VpdmVyPXRoaXMuY29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcihcInZpZGVvXCIse2RpcmVjdGlvbjpcInNlbmRvbmx5XCJ9KSxtdSh0aGlzLnNjcmVlblRyYW5zY2VpdmVyLFwidmlkZW9cIik7Y29uc3QgZT1NZC5nZXRTdGF0ZSgpLHQ9KDAsd2wuWDEpKGUpLG49KDAsd2wubjIpKGUpO2lmKHQpe2NvbnN0IGU9dC5nZXRBdWRpb1RyYWNrcygpO2UubGVuZ3RoLGF3YWl0IHRoaXMuYXVkaW9UcmFuc2NlaXZlci5zZW5kZXIucmVwbGFjZVRyYWNrKGVbMF0pLHRoaXMuc3BlZWNoTW9uaXRvci51cGRhdGVNaWNTb3VyY2UodCl9aWYobil7Y29uc3QgZT1uLmdldFZpZGVvVHJhY2tzKCk7ZS5sZW5ndGgsYXdhaXQgdGhpcy52aWRlb1RyYW5zY2VpdmVyLnNlbmRlci5yZXBsYWNlVHJhY2soZVswXSl9fWNoYW5nZUxvY2FsTWVkaWFTdGF0dXMoZSx0LG4pe3RoaXMuYXBwbHlNZWRpYUNvbm5DaGFuZ2UoKGFzeW5jKCk9Pnt0aGlzLmF1ZGlvVHJhbnNjZWl2ZXI/LnNlbmRlci50cmFjayYmKHRoaXMuYXVkaW9UcmFuc2NlaXZlci5zZW5kZXIudHJhY2suZW5hYmxlZD1lKSx0aGlzLnZpZGVvVHJhbnNjZWl2ZXI/LnNlbmRlci50cmFjayYmKHRoaXMudmlkZW9UcmFuc2NlaXZlci5zZW5kZXIudHJhY2suZW5hYmxlZD10KSx0aGlzLnNjcmVlblRyYW5zY2VpdmVyPy5zZW5kZXIudHJhY2smJih0aGlzLnNjcmVlblRyYW5zY2VpdmVyLnNlbmRlci50cmFjay5lbmFibGVkPW4pfSkpfWFkZE5ld1VzZXIoZSl7Y29uc3QgdD1uZXcgR2woZSx0aGlzLmNyZWF0ZVJlY3ZUcmFuc2NlaXZlcihcImF1ZGlvXCIpLHRoaXMuY3JlYXRlUmVjdlRyYW5zY2VpdmVyKFwidmlkZW9cIikpO3JldHVybiB0LnVwZGF0ZVNjcmVlblN0YXRlKGUsdGhpcy5jcmVhdGVSZWN2VHJhbnNjZWl2ZXIuYmluZCh0aGlzKSksdGhpcy51c2Vycy5hZGQodCksdH1jb25uZWN0TWVkaWEoZSl7dGhpcy5hcHBseU1lZGlhQ29ubkNoYW5nZSgoYXN5bmMoKT0+e3RoaXMud2VicnRjQ29ublBhcmFtcz1lO2NvbnN0IHQ9YXdhaXQgdGhpcy5jb25uZWN0aW9uLmNyZWF0ZU9mZmVyKCk7YXdhaXQgdGhpcy5jb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oKTtjb25zdCBuPWZ1KHQuc2RwPz9cIlwiLHRoaXMudXNlcnMsdGhpcy53ZWJydGNDb25uUGFyYW1zKTthd2FpdCB0aGlzLmNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24obik7Zm9yKGNvbnN0IHQgb2YgZS5yZW1vdGVNZWRpYVBhcmFtcyl0aGlzLmFkZE5ld1VzZXIodCk7YXdhaXQgdGhpcy5yZW5lZ290aWF0ZVBlZXJDb25uZWN0aW9uKCksdGhpcy52aWRlb1RyYW5zY2VpdmVyPy5zZW5kZXIudHJhY2smJmF3YWl0IHZ1KHRoaXMudmlkZW9UcmFuc2NlaXZlci5zZW5kZXIpLGF3YWl0IHRoaXMuYWRkSWNlQ2FuZGlkYXRlcyhlLnN0cmVhbWVyQ29ublBhcmFtcyl9KSl9cmVjb25uZWN0TWVkaWEoKXt0aGlzLmFwcGx5TWVkaWFDb25uQ2hhbmdlKChhc3luYygpPT57dHJ5e2lmKCF0aGlzLndlYnJ0Y0Nvbm5QYXJhbXMpdGhyb3cgRXJyb3IoXCJObyBjb25uZWN0aW9uIHBhcmFtc1wiKTt0aGlzLmNvbm5lY3Rpb24ucmVzdGFydEljZSgpLGF3YWl0IHRoaXMucmVuZWdvdGlhdGVQZWVyQ29ubmVjdGlvbigpfWNhdGNoKGUpeygwLEUuVGIpKGUpLHRoaXMubGlzdGVuZXIub25NZWRpYUNvbm5lY3Rpb25GYWlsZWQoeGMuRkFUQUwpfX0pKX1hcHBseU1lZGlhQ29ubkNoYW5nZShlKXt0aGlzLnJlbW90ZVVzZXJFdmVudFF1ZXVlLmFkZCgoYXN5bmMoKT0+e2F3YWl0IGUoKX0pKX1hc3luYyByZW5lZ290aWF0ZVBlZXJDb25uZWN0aW9uKCl7dHJ5e2lmKHRoaXMuaW5OZWdvdGlhdGlvbil0aHJvdyBFcnJvcihcImNvbmN1cnJlbmN5IGJ1ZzogcmVuZWdvdGlhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzXCIpO3RoaXMuaW5OZWdvdGlhdGlvbj0hMCxhd2FpdCB0aGlzLmNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbigpO2NvbnN0IGU9YXdhaXQgdGhpcy5jb25uZWN0aW9uLmNyZWF0ZU9mZmVyKCk7aWYoIWUuc2RwfHwhdGhpcy53ZWJydGNDb25uUGFyYW1zKXRocm93IEVycm9yKFwibm8gb2ZmZXIgYXZhaWxhYmxlXCIpO2NvbnN0IHQ9ZnVuY3Rpb24oZSx0LG4pe2NvbnN0IHI9S2wuUWMoZSk7bnUoci5tZWRpYVsxXSksbnUoci5tZWRpYVsyXSksZnVuY3Rpb24oZSx0KXtlLm1lZGlhWzBdLnNzcmNzPXQuZmlsdGVyKChlPT5lLnR5cGU9PT14bC5hdWRpbykpLm1hcCgkbCk7Y29uc3Qgbj1lLm1lZGlhWzFdO24uc3NyY3MmJm4uc3NyY0dyb3VwcyYmXCJGSURcIj09PW4uc3NyY0dyb3Vwc1swXS5zZW1hbnRpY3M/ZnVuY3Rpb24oZSx0LG4pe2NvbnN0W3IsaV09dC5zc3Jjcy5zcGxpdChcIiBcIiksbz1lLmZpbmQoKGU9PmUudHlwZT09PXhsLnZpZGVvKSksYT1lLmZpbmQoKGU9PmUudHlwZT09PXhsLnJ0eCkpO2lmKCFvfHwhYSl0aHJvdyBFcnJvcihcImludmFsaWQgU1NSQ1Mgc3VwcGxpZWRcIik7dC5zc3Jjcz1gJHtvLnNzcmN9ICR7YS5zc3JjfWA7Zm9yKGNvbnN0IGUgb2YgbillLmlkLnRvU3RyaW5nKCk9PT1yP2UuaWQ9by5zc3JjLnRvU3RyaW5nKCk6ZS5pZC50b1N0cmluZygpPT09aSYmKGUuaWQ9YS5zc3JjLnRvU3RyaW5nKCkpfSh0LG4uc3NyY0dyb3Vwc1swXSxuLnNzcmNzKTpuLnNzcmNzPXQuZmlsdGVyKChlPT5lLnR5cGU9PT14bC52aWRlbykpLm1hcCgkbCksZS5tZWRpYVsyXS5zc3Jjcz10LmZpbHRlcigoZT0+ZS50eXBlPT09eGwuc2NyZWVuKSkubWFwKCRsKX0ocix0LmxvY2FsU3NyY3MpO2ZvcihsZXQgZT0zO2U8ci5tZWRpYS5sZW5ndGg7KytlKXtjb25zdCBpPXIubWVkaWFbZV07aWYoIWkudHlwZXx8IWkubWlkKWNvbnRpbnVlO2NvbnN0IG89aS50eXBlLGE9aS5taWQudG9TdHJpbmcoKTtpZihcImluYWN0aXZlXCI9PT1pLmRpcmVjdGlvbilyLm1lZGlhW2VdPWN1KG8sYSk7ZWxzZXtjb25zdCBlPW4uZ2V0QnlNaWQoYSk7aWYoIWUpdGhyb3cgRXJyb3IoYG5vIHJlbW90ZSB1c2VyIGZvciBtaWQgJHthfWApO2NvbnN0IHI9ZS5jb250ZW50VHlwZUZvck1pZChhKTtpZighcil0aHJvdyBFcnJvcihgbm8gY29udGVudCB0eXBlIGZvciBtaWQgJHthfWApO2kuc3NyY3M9W0psKEZsKHIsdC5sb2NhbFNzcmNzKSxRbCgpKV0sXCJ2aWRlb1wiPT09byYmbnUoaSl9fXJldHVybiByLmdyb3Vwcz1sdShyLm1lZGlhKSx7dHlwZTpcIm9mZmVyXCIsc2RwOktsLmNXKHIpfX0oZS5zZHAsdGhpcy53ZWJydGNDb25uUGFyYW1zLHRoaXMudXNlcnMpO2F3YWl0IHRoaXMuY29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKHQpO2NvbnN0IG49ZnUoZS5zZHAsdGhpcy51c2Vycyx0aGlzLndlYnJ0Y0Nvbm5QYXJhbXMpO2F3YWl0IHRoaXMuY29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihuKSx0aGlzLnN0YXRzUHJvY2Vzc29yLnVwZGF0ZUxvY2FsU3NyY3ModGhpcy53ZWJydGNDb25uUGFyYW1zLmxvY2FsU3NyY3MpO2Zvcihjb25zdCBlIG9mIExsKHRoaXMuY29ubmVjdGlvbikpO31maW5hbGx5e3RoaXMuaW5OZWdvdGlhdGlvbj0hMX19YXN5bmMgYWRkSWNlQ2FuZGlkYXRlcyhlKXtjb25zdCB0PWUucHJlUmVzb2x2ZWRFbmRwb2ludD9lLnByZVJlc29sdmVkRW5kcG9pbnQ6W2UuZW5kcG9pbnRdO2Zvcihjb25zdCBuIG9mIHQpe2NvbnN0IHQ9bmV3IFJUQ0ljZUNhbmRpZGF0ZSh7Y2FuZGlkYXRlOmBjYW5kaWRhdGU6MCAxIFVEUCAyMTEzNjY3MzI3ICR7bn0gJHtlLndlYnJ0Y1BvcnR9IHR5cCBob3N0YCxzZHBNTGluZUluZGV4OjB9KTthd2FpdCB0aGlzLmNvbm5lY3Rpb24uYWRkSWNlQ2FuZGlkYXRlKHQpfX1wdXRSZW1vdGVNZWRpYVN0cmVhbXMoZSl7dGhpcy5hcHBseU1lZGlhQ29ubkNoYW5nZSgoYXN5bmMoKT0+e2NvbnN0IHQ9dGhpcy51c2Vycy5nZXRCeVRhbGtJZChlLnRhbGtJZCk7bGV0IG49ITA7aWYodCl7bj10LnVwZGF0ZUZyb21SZW1vdGVVc2VyRXZlbnQoZSk7Y29uc3Qgcj10LnVwZGF0ZVNjcmVlblN0YXRlKGUsdGhpcy5jcmVhdGVSZWN2VHJhbnNjZWl2ZXIuYmluZCh0aGlzKSk7bj1ufHxyfWVsc2UgdGhpcy5hZGROZXdVc2VyKGUpO24mJmF3YWl0IHRoaXMucmVuZWdvdGlhdGVQZWVyQ29ubmVjdGlvbigpfSkpfXJlbW92ZVJlbW90ZU1lZGlhU3RyZWFtcyhlKXt0aGlzLmFwcGx5TWVkaWFDb25uQ2hhbmdlKChhc3luYygpPT57Y29uc3QgdD10aGlzLnVzZXJzLmdldEJ5VGFsa0lkKGUpO3QmJih0LnN0b3BNZWRpYSgpLHRoaXMudXNlcnMucmVtb3ZlKHQpLGF3YWl0IHRoaXMucmVuZWdvdGlhdGVQZWVyQ29ubmVjdGlvbigpKX0pKX1hc3luYyBjb25uZWN0SW50ZXJuYWwoZSl7dHJ5e2NvbnN0IHQ9YXdhaXQgYXN5bmMgZnVuY3Rpb24oZSl7Y29uc3QgdD1NZC5nZXRTdGF0ZSgpLG49KDAsemwuYmkpKHQsWmwuWkQpP1wiaHR0cHM6Ly9zdGFnaW5nLXdlYi1nY3Auc25hcC1kZXYubmV0L21hcnMvcmVzb2x2ZV9zdHJlYW1lci5kb1wiOlwiaHR0cHM6Ly93ZWIuc25hcGNoYXQuY29tL21hcnMvcmVzb2x2ZV9zdHJlYW1lci5kb1wiLHI9cGVyZm9ybWFuY2Uubm93KCksaT1uZXcgUmVxdWVzdChuLHtib2R5Om5ldyBVUkxTZWFyY2hQYXJhbXMoe2FwcElkOmUuYXBwSWQudG9TdHJpbmcoKSxzY29wZUlkOmUuc2NvcGVJRCxhdXRoTWFjOmUubWFjLGF1dGhUb2tlbjplLnRva2VuLGRldmljZU5hbWU6ZS5kZXZpY2VOYW1lfSksaGVhZGVyczp7XCJjb250ZW50LXR5cGVcIjpcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD11dGYtOFwifSxtZXRob2Q6XCJQT1NUXCJ9KSxvPWF3YWl0KDAsUi5YKShpKTtpZighby5vayl0aHJvdyBFcnJvcihgUmVzb2x1dGlvbiByZXF1ZXN0IHJldHVybmVkIGVycm9yIGNvZGU6ICR7by5zdGF0dXN9LmApO3ZhciBhO2E9cGVyZm9ybWFuY2Uubm93KCktcixJKCkuYWRkVGltZXIoe21ldHJpY3NOYW1lOmAke2tsfS5ub2RlX3Jlc29sdXRpb24uYXR0ZW1wdHMuMS5vcF9yZXN1bHQuc3VjY2Vzc2AsbWlsbGlTZWM6TWF0aC5yb3VuZChhKX0pO2NvbnN0IHM9YXdhaXQgby50ZXh0KCk7cmV0dXJuIGpsKCkoe3N0cmljdDohMCx1c2VOYXRpdmVCaWdJbnQ6ITAsYWx3YXlzUGFyc2VBc0JpZzohMH0pLnBhcnNlKHMpfShlKTtpZighdC5hdXRoRGV0YWlscyl0aHJvdyBFcnJvcihcIk5vIGF1dGggZGV0YWlscyBpbiByZXNvbHZlciByZXNwb25zZVwiKTtjb25zdCBuPXtlbmRwb2ludDp0LmVuZHBvaW50LnJlcGxhY2UoXCI6NDQzXCIsXCJcIikscHJlUmVzb2x2ZWRFbmRwb2ludDp0LnN0cmVhbWVyQWRkcmVzc2VzLHdlYnJ0Y1BvcnQ6NDQzLHdlYnNvY2tldFBvcnQ6MjM0MDV9O3RoaXMud2Vic29ja2V0V3JhcHBlci5vcGVuKHQuYXV0aERldGFpbHMsbil9Y2F0Y2goZSl7KDAsRS5UYikoZSksdGhpcy5saXN0ZW5lci5vblNpZ25hbGluZ0Nvbm5lY3Rpb25GYWlsZWQoeGMuTkVUV09SSyl9fWNvbm5lY3QoZSl7dGhpcy5jb25uZWN0SW50ZXJuYWwoZSl9ZGlzY29ubmVjdCgpe3RoaXMucmVtb3RlVXNlckV2ZW50UXVldWUuY2xlYXIoKSx0aGlzLmFwcGx5TWVkaWFDb25uQ2hhbmdlKChhc3luYygpPT57Zm9yKGNvbnN0IGUgb2YgdGhpcy51c2Vycy5nZXRSZW1vdGVVc2VycygpKWUuc3RvcE1lZGlhKCk7dGhpcy51c2Vycy5jbGVhcigpLHRoaXMuY29ubmVjdGlvbi5jbG9zZSgpfSkpLHRoaXMud2Vic29ja2V0V3JhcHBlci5jbG9zZSgpLHRoaXMudGVhcmRvd25JbnB1dFN0cmVhbUxpc3RlbmVycygpLHRoaXMuc3BlZWNoTW9uaXRvci5zdG9wKCksdGhpcy5zdGF0c1Byb2Nlc3Nvci5zdG9wKCl9c2VuZE1lc3NhZ2UoZSl7dGhpcy53ZWJzb2NrZXRXcmFwcGVyLnNlbmQoZS5idWZmZXIpfWNyZWF0ZVJlY3ZUcmFuc2NlaXZlcihlKXtjb25zdCB0PXRoaXMuY29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcihlLHtkaXJlY3Rpb246XCJyZWN2b25seVwifSk7cmV0dXJuIG11KHQsZSksdH19dmFyIEN1LEF1LFJ1LGt1LE91LE51LHd1LER1LFB1LE11LEx1LFV1LHh1LEZ1LEJ1LFZ1PW4oOTYwMjYpLEd1PW4ubihWdSk7IWZ1bmN0aW9uKGUpe2VbZS5BVVRIX0ZFVENISU5HPTBdPVwiQVVUSF9GRVRDSElOR1wiLGVbZS5BVVRIX0ZFVENISU5HX1dBSVQ9MV09XCJBVVRIX0ZFVENISU5HX1dBSVRcIixlW2UuQURETElWRV9JTklUPTJdPVwiQURETElWRV9JTklUXCIsZVtlLlNUQVJUSU5HX0NPTk5FQ1RJT049M109XCJTVEFSVElOR19DT05ORUNUSU9OXCIsZVtlLlNUUkVBTUVSX1JFU09MVVRJT049NF09XCJTVFJFQU1FUl9SRVNPTFVUSU9OXCIsZVtlLlNUUkVBTUVSX1JFU09MVVRJT05fQ0FDSEU9NV09XCJTVFJFQU1FUl9SRVNPTFVUSU9OX0NBQ0hFXCIsZVtlLlNUUkVBTUVSX1JFU09MVVRJT05fUkVUUlk9Nl09XCJTVFJFQU1FUl9SRVNPTFVUSU9OX1JFVFJZXCIsZVtlLlFVSUNfQ09OTkVDVElPTj03XT1cIlFVSUNfQ09OTkVDVElPTlwiLGVbZS5RVUlDX09SX1JFU09MVVRJT05fV0FJVD04XT1cIlFVSUNfT1JfUkVTT0xVVElPTl9XQUlUXCIsZVtlLlNUUkVBTUVSX0FVVEhfUkVRVUVTVD05XT1cIlNUUkVBTUVSX0FVVEhfUkVRVUVTVFwifShDdXx8KEN1PXt9KSksZnVuY3Rpb24oZSl7ZVtlLlVOS05PV049MF09XCJVTktOT1dOXCIsZVtlLkFWQz0xXT1cIkFWQ1wiLGVbZS5IRVZDPTJdPVwiSEVWQ1wiLGVbZS5WUDhfSEFSRFdBUkU9M109XCJWUDhfSEFSRFdBUkVcIixlW2UuVlA4X1NPRlRXQVJFPTRdPVwiVlA4X1NPRlRXQVJFXCJ9KEF1fHwoQXU9e30pKSxmdW5jdGlvbihlKXtlW2UuRU5DT0RFUj0wXT1cIkVOQ09ERVJcIixlW2UuREVDT0RFUj0xXT1cIkRFQ09ERVJcIn0oUnV8fChSdT17fSkpLGZ1bmN0aW9uKGUpe2VbZS5IQVJEV0FSRT0wXT1cIkhBUkRXQVJFXCIsZVtlLlNPRlRXQVJFPTFdPVwiU09GVFdBUkVcIixlW2UuVU5JTklUSUFMSVpFRD0yXT1cIlVOSU5JVElBTElaRURcIn0oa3V8fChrdT17fSkpLGZ1bmN0aW9uKGUpe2VbZS5XV0FOXzVHPTBdPVwiV1dBTl81R1wiLGVbZS5XV0FOXzRHPTFdPVwiV1dBTl80R1wiLGVbZS5XV0FOXzNHPTJdPVwiV1dBTl8zR1wiLGVbZS5XV0FOXzJHPTNdPVwiV1dBTl8yR1wiLGVbZS5XV0FOX09USEVSPTRdPVwiV1dBTl9PVEhFUlwiLGVbZS5XSUZJPTVdPVwiV0lGSVwiLGVbZS5OT1RfUkVBQ0hBQkxFPTZdPVwiTk9UX1JFQUNIQUJMRVwiLGVbZS5VTktOT1dOPTddPVwiVU5LTk9XTlwifShPdXx8KE91PXt9KSksZnVuY3Rpb24oZSl7ZVtlLlVOS05PV049MF09XCJVTktOT1dOXCIsZVtlLlAyUD0xXT1cIlAyUFwiLGVbZS5SRUxBWT0yXT1cIlJFTEFZXCJ9KE51fHwoTnU9e30pKSxmdW5jdGlvbihlKXtlW2UuTk9ORT0wXT1cIk5PTkVcIixlW2UuQVVESU89MV09XCJBVURJT1wiLGVbZS5BVURJT19WSURFTz0yXT1cIkFVRElPX1ZJREVPXCJ9KHd1fHwod3U9e30pKSxmdW5jdGlvbihlKXtlW2UuQVRURU1QVD0wXT1cIkFUVEVNUFRcIixlW2UuUkVRVUVTVD0xXT1cIlJFUVVFU1RcIixlW2UuTEVHPTJdPVwiTEVHXCJ9KER1fHwoRHU9e30pKSxmdW5jdGlvbihlKXtlW2UuT05FX09OX09ORV9DQUxMPTBdPVwiT05FX09OX09ORV9DQUxMXCIsZVtlLkdST1VQX0NBTEw9MV09XCJHUk9VUF9DQUxMXCIsZVtlLlZQTD0yXT1cIlZQTFwifShQdXx8KFB1PXt9KSksZnVuY3Rpb24oZSl7ZVtlLkNBTExFUj0wXT1cIkNBTExFUlwiLGVbZS5DQUxMRUU9MV09XCJDQUxMRUVcIn0oTXV8fChNdT17fSkpLGZ1bmN0aW9uKGUpe2VbZS5TVUNDRVNTPTBdPVwiU1VDQ0VTU1wiLGVbZS5VU0VSX0NBTkNFTExFRD0xXT1cIlVTRVJfQ0FOQ0VMTEVEXCIsZVtlLlRBTEtDT1JFX0NPTk5FQ1RJT05fVElNRU9VVD0yXT1cIlRBTEtDT1JFX0NPTk5FQ1RJT05fVElNRU9VVFwiLGVbZS5SSU5HSU5HX1RJTUVPVVQ9M109XCJSSU5HSU5HX1RJTUVPVVRcIixlW2UuQkFDS0dST1VORElOR19JTl9XQVRDSElOR19NT0RFPTRdPVwiQkFDS0dST1VORElOR19JTl9XQVRDSElOR19NT0RFXCIsZVtlLlBVU0hfTk9USUZJQ0FUSU9OX1NUT1BfQ0FMTD01XT1cIlBVU0hfTk9USUZJQ0FUSU9OX1NUT1BfQ0FMTFwiLGVbZS5BRERMSVZFX0lOSVRfRkFJTEVEPTZdPVwiQURETElWRV9JTklUX0ZBSUxFRFwiLGVbZS5GQVRBTF9FUlJPUl9UT09fTUFOWV9SRUNPTk5FQ1RTPTddPVwiRkFUQUxfRVJST1JfVE9PX01BTllfUkVDT05ORUNUU1wiLGVbZS5GQVRBTF9FUlJPUl9BVVRIPThdPVwiRkFUQUxfRVJST1JfQVVUSFwiLGVbZS5GQVRBTF9FUlJPUl9PVEhFUj05XT1cIkZBVEFMX0VSUk9SX09USEVSXCJ9KEx1fHwoTHU9e30pKSxmdW5jdGlvbihlKXtlW2UuTk9ORT0wXT1cIk5PTkVcIixlW2UuQ0FMTF9JTklUSUFURUQ9MV09XCJDQUxMX0lOSVRJQVRFRFwiLGVbZS5SRVFVRVNUX1JFQ0VJVkVEPTJdPVwiUkVRVUVTVF9SRUNFSVZFRFwiLGVbZS5MT0NBTF9DT05ORUNURUQ9M109XCJMT0NBTF9DT05ORUNURURcIixlW2UuUkVNT1RFX1JFSkVDVEVEPTRdPVwiUkVNT1RFX1JFSkVDVEVEXCIsZVtlLlJFTU9URV9BQ0NFUFRFRD01XT1cIlJFTU9URV9BQ0NFUFRFRFwiLGVbZS5MT0NBTF9BQ0NFUFRFRF9XSElMRV9DT05ORUNUSU5HPTZdPVwiTE9DQUxfQUNDRVBURURfV0hJTEVfQ09OTkVDVElOR1wiLGVbZS5MT0NBTF9BQ0NFUFRFRF9DT05ORUNURUQ9N109XCJMT0NBTF9BQ0NFUFRFRF9DT05ORUNURURcIixlW2UuTE9DQUxfUkVKRUNURURfV0hJTEVfQ09OTkVDVElORz04XT1cIkxPQ0FMX1JFSkVDVEVEX1dISUxFX0NPTk5FQ1RJTkdcIixlW2UuTE9DQUxfUkVKRUNURURfQ09OTkVDVEVEPTldPVwiTE9DQUxfUkVKRUNURURfQ09OTkVDVEVEXCIsZVtlLkNBTExfTUFUVVJFRD0xMF09XCJDQUxMX01BVFVSRURcIixlW2UuQ0FMTF9BQk9SVEVEX05PX05FVFdPUks9MTFdPVwiQ0FMTF9BQk9SVEVEX05PX05FVFdPUktcIn0oVXV8fChVdT17fSkpLGZ1bmN0aW9uKGUpe2VbZS5MSVZFX0NBTUVSQT0wXT1cIkxJVkVfQ0FNRVJBXCIsZVtlLkJJVE1PSkk9MV09XCJCSVRNT0pJXCJ9KHh1fHwoeHU9e30pKSxmdW5jdGlvbihlKXtlW2UuQUNUSVZFPTBdPVwiQUNUSVZFXCIsZVtlLkJBQ0tHUk9VTkQ9MV09XCJCQUNLR1JPVU5EXCJ9KEZ1fHwoRnU9e30pKSxmdW5jdGlvbihlKXtlW2UuRlVMTFNDUkVFTj0wXT1cIkZVTExTQ1JFRU5cIixlW2UuUElQPTFdPVwiUElQXCIsZVtlLkhJRERFTj0yXT1cIkhJRERFTlwifShCdXx8KEJ1PXt9KSk7dmFyIEh1PW4oMTczNSk7Y29uc3QgV3U9XCJncm91cF9zaXplXCIsanU9XCJkdXJhdGlvbl9zZWNcIixadT1cIndhc19wcmVzZW50XCIsenU9XCJpc19hZGRlZF9wYXJ0aWNpcGFudFwiO2Z1bmN0aW9uIEt1KGUsdCl7cmV0dXJuIGUuZ2V0KHQpPz8wfWZ1bmN0aW9uIFl1KGUsdCl7Y29uc3Qgbj1OdW1iZXIoZS5nZXQodCkpO3JldHVybiBpc05hTihuKT8wOm59ZnVuY3Rpb24gcXUoZSx0KXtyZXR1cm4gMT09PWUuZ2V0KHQpfWZ1bmN0aW9uIFh1KGUpe3N3aXRjaChlKXtjYXNlIFV1LkNBTExfSU5JVElBVEVEOnJldHVyblwiQ0FMTF9JTklUSUFURURcIjtjYXNlIFV1LkNBTExfTUFUVVJFRDpyZXR1cm5cIkNBTExfTUFUVVJFRFwiO2Nhc2UgVXUuTE9DQUxfQUNDRVBURURfQ09OTkVDVEVEOmNhc2UgVXUuTE9DQUxfQUNDRVBURURfV0hJTEVfQ09OTkVDVElORzpyZXR1cm5cIkxPQ0FMX0FDQ0VQVEVEXCI7Y2FzZSBVdS5MT0NBTF9DT05ORUNURUQ6cmV0dXJuXCJBRERMSVZFX0NPTk5FQ1RFRFwiO2Nhc2UgVXUuTE9DQUxfUkVKRUNURURfQ09OTkVDVEVEOmNhc2UgVXUuTE9DQUxfUkVKRUNURURfV0hJTEVfQ09OTkVDVElORzpyZXR1cm5cIkxPQ0FMX1JFSkVDVEVEXCI7Y2FzZSBVdS5SRU1PVEVfQUNDRVBURUQ6cmV0dXJuXCJSRU1PVEVfQUNDRVBURURcIjtjYXNlIFV1LlJFTU9URV9SRUpFQ1RFRDpyZXR1cm5cIlJFTU9URV9SRUpFQ1RFRFwiO2Nhc2UgVXUuUkVRVUVTVF9SRUNFSVZFRDpyZXR1cm5cIlJFUVVFU1RfUkVDRUlWRURcIjtjYXNlIFV1LkNBTExfQUJPUlRFRF9OT19ORVRXT1JLOnJldHVyblwiQ0FMTF9BQk9SVEVEX05PX05FVFdPUktcIjtjYXNlIFV1Lk5PTkU6cmV0dXJufX1mdW5jdGlvbiBRdShlKXtzd2l0Y2goZSl7Y2FzZSBBdS5BVkM6cmV0dXJuXCJBVkNcIjtjYXNlIEF1LkhFVkM6cmV0dXJuXCJIRVZDXCI7Y2FzZSBBdS5WUDhfSEFSRFdBUkU6cmV0dXJuXCJWUDhfSGFyZHdhcmVcIjtjYXNlIEF1LlZQOF9TT0ZUV0FSRTpyZXR1cm5cIlZQOF9Tb2Z0d2FyZVwiO2Nhc2UgQXUuVU5LTk9XTjpyZXR1cm5cIlVua25vd25cIn19ZnVuY3Rpb24gSnUoZSl7cmV0dXJue3N0YXJ0X3RpbWVfbXM6ZS5zdGFydFRpbWVNcyxkdXJhdGlvbl9tczplLmR1cmF0aW9uTXMscmVtb3RlX2F1ZGlvX2NvdW50OmUucmVtb3RlQXVkaW9Db3VudCxyZW1vdGVfdmlkZW9fY291bnQ6ZS5yZW1vdGVWaWRlb0NvdW50LGxvY2FsX2F1ZGlvX3B1Ymxpc2hlZDplLmxvY2FsQXVkaW9QdWJsaXNoZWQsbG9jYWxfdmlkZW9fcHVibGlzaGVkOmUubG9jYWxWaWRlb1B1Ymxpc2hlZCxwb3dlcmVkOmUucG93ZXJlZCx0ZW1wZXJhdHVyZV9zdGFydDplLnRlbXBlcmF0dXJlU3RhcnQsdGVtcGVyYXR1cmVfZW5kOmUudGVtcGVyYXR1cmVFbmQsYmF0dGVyeV9sZXZlbF9zdGFydDplLmJhdHRlcnlMZXZlbFN0YXJ0LGJhdHRlcnlfbGV2ZWxfZW5kOmUuYmF0dGVyeUxldmVsRW5kLGNvZGVjX2luOlF1KGUuY29kZWNJbiksY29kZWNfb3V0OlF1KGUuY29kZWNPdXQpLHNlbGVjdGVkX2xlbnNfaWQ6ZS5zZWxlY3RlZExlbnNJZH19ZnVuY3Rpb24gJHUoZSl7aWYodm9pZCAwIT09ZSYmT2JqZWN0LnZhbHVlcyhIdS50KS5pbmNsdWRlcyhlKSlyZXR1cm4gSHUudFtlXX1jb25zdCBlZD1cInRhbGtfY2xpZW50X3Nlc3Npb25faWRcIjtmdW5jdGlvbiB0ZCgpe2NvbnN0IGU9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShlZCk7aWYoZSl0cnl7cmV0dXJuIEJpZ0ludChlKX1jYXRjaChlKXt9Y29uc3QgdD1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpO3JldHVybiBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGVkLHQudG9TdHJpbmcoKSksQmlnSW50KHQpfSgwLHMuZ2V0TG9nZ2VyKShcIltUYWxrXVtjcmVhdGVUYWxrQ29yZVBhcmFtZXRlcnNdXCIpO3ZhciBuZD1uKDM4NDg0KSxyZD1uKDE5MjAxKTtjKCkuZ2V0TG9nZ2VyKFwiW1RhbGtdXCIpO2NvbnN0IGlkPW5ldyBjbGFzc3tjb252ZXJzYXRpb25JZFRvVGltZW91dElkPW5ldyBNYXA7Y2FuY2VsVXBkYXRlKGUpe2NvbnN0IHQ9dGhpcy5jb252ZXJzYXRpb25JZFRvVGltZW91dElkLmdldChlKTt2b2lkIDAhPT10JiYoY2xlYXJUaW1lb3V0KHQpLHRoaXMuY29udmVyc2F0aW9uSWRUb1RpbWVvdXRJZC5kZWxldGUoZSkpfW9uQmFja2dyb3VuZEltYWdlU3RhdGVDaGFuZ2VkKGUpe3ZvaWQgMCE9PXRoaXMuY29udmVyc2F0aW9uSWRUb1RpbWVvdXRJZC5nZXQoZSkmJmNsZWFyVGltZW91dCh0aGlzLmNvbnZlcnNhdGlvbklkVG9UaW1lb3V0SWQuZ2V0KGUpKTtjb25zdCB0PXNldFRpbWVvdXQoKCgpPT5mdW5jdGlvbihlKXtjb25zdCB0PU1kLmdldFN0YXRlKCksbj0oMCxUYy55SykodCk7aWYodm9pZCAwPT09bilyZXR1cm47Y29uc3Qgcj1mdW5jdGlvbihlKXtjb25zdCB0PUFycmF5LmZyb20oZS52YWx1ZXMoKSk7aWYoMCE9PXQubGVuZ3RoKXJldHVybiB0LnNvcnQoKChlLHQpPT5lLnZlcnNpb24hPT10LnZlcnNpb24/ZS52ZXJzaW9uPHQudmVyc2lvbj8xOi0xOmUuYmFja2dyb3VuZEltYWdlSWQ+dC5iYWNrZ3JvdW5kSW1hZ2VJZD8xOmUuYmFja2dyb3VuZEltYWdlSWQ8dC5iYWNrZ3JvdW5kSW1hZ2VJZD8tMTowKSlbMF19KCgwLG5kLmxvKShlKSh0KSk7aWYodm9pZCAwIT09cil7Y29uc3QgaT0oMCxuZC5vOSkoZSxuKSh0KTtpPy5iYWNrZ3JvdW5kSW1hZ2VJZD09PXIuYmFja2dyb3VuZEltYWdlSWQmJmkudmVyc2lvbj09PXIudmVyc2lvbnx8KDAsVmMuQ3YpKGUsbixyKX19KGUpKSwzNTApO3RoaXMuY29udmVyc2F0aW9uSWRUb1RpbWVvdXRJZC5zZXQoZSx0KX19O2Z1bmN0aW9uIG9kKGUpe2lmKGUuY29udmVyc2F0aW9uVHlwZSE9PXdjLmkxLk9ORU9OT05FKXJldHVybigwLHJkLnIpKGUucGFydGljaXBhbnRPcmRlcj8/W10sZS5zZXNzaW9uU3RhdGUucGFydGljaXBhbnRzLGUudXNlcklkVG9UYWxraW5nU3RhdGUsZS5tYXhSZW1vdGVDYWxsR3JpZFRpbGVzKX1mdW5jdGlvbiBhZChlLHQsbil7Y29uc3Qgcj1lLnRhbGsuc2Vzc2lvbnMuZ2V0KHQpO2lmKHIpcmV0dXJuIHJ9Y29uc3Qgc2Q9KGUsdCk9Pih7dGFsazp7ZW5zdXJlQ2xpZW50OigpPT57Y29uc3R7Y2xpZW50OmV9PXQoKS50YWxrO2lmKCFlKXRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIHRoZSB0YWxrIGNsaWVudCB0byBiZSBzZXRcIik7cmV0dXJuIGV9LGluaXRpYWxpemVDbGllbnQ6YXN5bmMgbj0+e3RyeXtjb25zdCByPSgwLFRjLnlLKSh0KCkpO2lmKCFyKXJldHVybjtjb25zdCBpPSgwLFRjLkxuKSh0KCkpO2lmKCFpKXJldHVybjtJKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcImNhbGxpbmcudGFsa2NvcmUuaW5pdC5hdHRlbXB0XCJ9KTtjb25zdCBvPWZ1bmN0aW9uKGUsdCxuLHIpe2NvbnN0IGk9e2xvZzooZSx0KT0+YygpLmdldExvZ2dlcihgW1RhbGtdJHtlfWApLmluZm8odCl9LG89e3Bvc3REZWxheWVkSW5NYWluVGhyZWFkOmZ1bmN0aW9uKGUsdCl7c2V0VGltZW91dCgoKCk9PntlLnJ1bigpfSksTnVtYmVyKHQpKX0saXNJbnRlcmFjdGlvbkFsbG93ZWQ6YXN5bmMoZSx0KT0+e2kubG9nKFwiVGFsa0NvcmVEZWxlZ2F0ZVwiLGBpc0ludGVyYWN0aW9uQWxsb3dlZDogJHtlfWApO3RyeXtjb25zdCBuPSgwLE0uT1kpKGUpLHI9TWQuZ2V0U3RhdGUoKSx7ZW5zdXJlVXNlcnM6byxtdXR1YWxseUNvbmZpcm1lZEZyaWVuZElkczphfT1yLnVzZXIscz0oYXdhaXQgbyhbbl0pKVswXSxjPWEuaW5jbHVkZXMobiksbD0yPT09ci5hdXRoLm1lPy5zbmFwUHJpdmFjeTtyZXR1cm4gMj09PXMudHlwZT8oaS5sb2coXCJUYWxrQ29yZURlbGVnYXRlXCIsXCJpc0ludGVyYWN0aW9uQWxsb3dlZDogdGhlIHVzZXIgaXMgYmxvY2tlZFwiKSx0Lm9uU3VjY2VzcyghMSkpOmwmJiFjPyhpLmxvZyhcIlRhbGtDb3JlRGVsZWdhdGVcIixcImlzSW50ZXJhY3Rpb25BbGxvd2VkOiBub3QgYSBtdXR1YWwgZnJpZW5kXCIpLHQub25TdWNjZXNzKCExKSk6dC5vblN1Y2Nlc3MoITApfWNhdGNoKGUpe2kubG9nKFwiVGFsa0NvcmVEZWxlZ2F0ZVwiLFwiaXNJbnRlcmFjdGlvbkFsbG93ZWQ6IGdvdCBhbiBlcnJvclwiKSx0Lm9uRmFpbHVyZSgpfX0sb25Wb2xhdGlsZU1lc3NhZ2VSZWNlaXZlZDpmdW5jdGlvbihlLHQsbixyLG8sYSl7aS5sb2coXCJUYWxrQ29yZURlbGVnYXRlXCIsXCJvblZvbGF0aWxlTWVzc2FnZVJlY2VpdmVkXCIpLGFzeW5jIGZ1bmN0aW9uKGUsdCxuLHIpe2NvbnN0IGk9YXdhaXQgTWQuZ2V0U3RhdGUoKS5tZXNzYWdpbmcuZW5zdXJlQ29udmVyc2F0aW9uQXZhaWxhYmxlKCgwLE0uT1kpKGUpLHQ/d2MuaTEuVVNFUkNSRUFURURHUk9VUDp3Yy5pMS5PTkVPTk9ORSk7KDAsVmMuWEcpKGkscixuKX0oZSx0LG8sYSl9fSxhPXtjcmVhdGU6ZT0+bmV3IFR1KGUpfTtsZXQgcztjb25zdCBsPXtub3RpZnlBY3RpdmVDb252ZXJzYXRpb25zQ2hhbmdlZCgpe2lmKGkubG9nKFwiUHJlc2VuY2VTZXJ2aWNlRGVsZWdhdGVcIixcIm5vdGlmeUFjdGl2ZUNvbnZlcnNhdGlvbnNDaGFuZ2VkXCIpLHMpe2NvbnN0IGU9cy5nZXRBY3RpdmVDb252ZXJzYXRpb25zKCk7aS5sb2coXCJQcmVzZW5jZVNlcnZpY2VEZWxlZ2F0ZVwiLGBBY3RpdmUgY29udmVyc2F0aW9ucyAke0pTT04uc3RyaW5naWZ5KFsuLi5lLnZhbHVlcygpXSl9YCksTWQuZ2V0U3RhdGUoKS5wcmVzZW5jZS5vbkFjdGl2ZUNvbnZlcnNhdGlvbkluZm9VcGRhdGVkKGUpfX19LHU9ZS5jcmVhdGVXaXRoRXh0ZXJuYWxTZXJ2aWNlcyhmdW5jdGlvbihlLHQpe3JldHVybntsb2NhbFVzZXJJZDooMCxNLk1jKShlKSxsb2NhbFVzZXJuYW1lOnQsZGV2aWNlTmFtZTpuYXZpZ2F0b3IudXNlckFnZW50LGNsaWVudFNlc3Npb25JZDp0ZCgpLHVzZU5ld1dlYnJ0Y1ZlcnNpb246ITEsdGFsa0NvcmVUc01vZGU6RGMuQ2YuRElTQUJMRUQsbWFyc1NlcnZpY2VFbmRwb2ludDpELmZBfX0odCxuKSxvLGksKGQ9Qy5xSix7cmVwb3J0Q2FsbEV2ZW50KGUsdCxuLHIsaSxvLGEscyxjLGwsdSxmKXtsZXQgcDtzd2l0Y2goZSl7Y2FzZSBEdS5BVFRFTVBUOnA9ZnVuY3Rpb24oZSx0KXtyZXR1cm57ZXZlbnRfbmFtZTpcIlRBTEtfQ0FMTF9BVFRFTVBUXCIsZW5kX3BoYXNlOlh1KGUpLHVzZXJfcHJlc2VudF9jb3VudDpLdSh0LFwidXNlcnNfcHJlc2VudFwiKSx3aXRoX2luY29taW5nX2NhbGxfYWJhbmRvbjpxdSh0LFp1KSxjaGF0X3NvdXJjZTokdSh0LmdldChcInNvdXJjZV90eXBlXCIpKSx1c2VyX2FkZGVkX2NvdW50Okt1KHQsXCJ1c2VyX2FkZGVkX2NvdW50XCIpfX0ocixpKTticmVhaztjYXNlIER1LlJFUVVFU1Q6cD1mdW5jdGlvbihlLHQpe3JldHVybntldmVudF9uYW1lOlwiVEFMS19DQUxMX1JFUVVFU1RcIixlbmRfcGhhc2U6WHUoZSksd2l0aF9pbmNvbWluZ19jYWxsX2FiYW5kb246cXUodCxcIndhc19hYmFuZG9uZWRcIiksd2l0aF9wcmVzZW5jZTpxdSh0LFp1KSxpc19hZGRlZF9wYXJ0aWNpcGFudDpxdSh0LHp1KX19KHIsaSk7YnJlYWs7Y2FzZSBEdS5MRUc6cD1mdW5jdGlvbihlLHQpe3JldHVybntldmVudF9uYW1lOlwiVEFMS19DQUxMX0xFR1wiLHJlY2lwaWVudF9tYXhfY291bnQ6S3UoZSxcIm1heF9yZWNpcGllbnRzXCIpLGF1ZGlvX2R1cmF0aW9uX3NlYzpLdSh0LFwiYXVkaW9fZHVyYXRpb25fc2VjXCIpLHZpZGVvX2R1cmF0aW9uX3NlYzpLdSh0LFwidmlkZW9fZHVyYXRpb25fc2VjXCIpLG11dGVfZHVyYXRpb25fc2VjOkt1KHQsXCJtdXRlZF9kdXJhdGlvbl9zZWNcIiksbGVuc19hY3RpdmVfZHVyYXRpb25fc2VjOkt1KHQsXCJsZW5zX2FjdGl2ZV9kdXJhdGlvbl9zZWNcIiksaXNfYWRkZWRfcGFydGljaXBhbnQ6cXUoZSx6dSksYWRkZWRfcGFydGljaXBhbnRfY291bnQ6S3UoZSxcImFkZGVkX3BhcnRpY2lwYW50X2NvdW50XCIpfX0oaSxvKX0oZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzLGMsbCl7ZS5jYWxsX3V1aWQ9dCxlLm1lZGlhX3R5cGU9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2Ugd3UuQVVESU86cmV0dXJuXCJBVURJT1wiO2Nhc2Ugd3UuQVVESU9fVklERU86cmV0dXJuXCJWSURFT1wiO2Nhc2Ugd3UuTk9ORTpyZXR1cm59fShuKSxlLndpdGhfY2FsbF9raXQ9cXUocixcIndhc19sb2Nrc2NyZWVuXCIpLGUuZHVyYXRpb25fc2VjPUt1KGksanUpLGUub3V0X29mX2NoYXRfZHVyYXRpb25fc2VjPUt1KGksXCJvdXRfb2ZfY2hhdF9kdXJhdGlvbl9zZWNcIiksZS5ncm91cF9wYXJ0aWNpcGFudF9jb3VudD1LdShyLFd1KSxlLm1lZGlhX3RvZ2dsZV9jb3VudD1LdShyLFwibWVkaWFfdG9nZ2xlc1wiKSxlLmFzaD1vLGUuYXR0ZW1wdF9pZD1hLGUud2l0aF9ncm91cD1jLGUuY29ycmVzcG9uZGVudF9ndWlkPWM/dm9pZCAwOmwsZS5taXNjaGllZl9pZD1jP3M6dm9pZCAwfSkocCx0LG4saSxvLGEscyxjLGwsdSksZChwKX0scmVwb3J0UHJlc2VuY2VFdmVudChlKXtjb25zdCB0PXtldmVudF9uYW1lOlwiUFJFU0VOQ0VfU0VTU0lPTl9FTkRcIixwcmVzZW5jZV9tYXhfY291bnQ6WXUoZSxcIm1heF9zaW11bHRhbmVvdXNfcHJlc2VuY2VcIiksZ3JvdXBfcGFydGljaXBhbnRfY291bnQ6WXUoZSxXdSksZHVyYXRpb25fc2VjOll1KGUsanUpLGRlc2t0b3BfcHJlc2VuY2VfZHVyYXRpb25fc2VjOll1KGUsXCJkZXNrdG9wX3ByZXNlbmNlX2R1cmF0aW9uX3NlY1wiKSxwcmVzZW5jZV9tYXhfZGVza3RvcF9jb3VudDpZdShlLFwicHJlc2VuY2VfbWF4X2Rlc2t0b3BfY291bnRcIil9O0d1KCkoMiwxNikubWFwKChuPT57Y29uc3Qgcj1gJHtufV9vcl9tb3JlX3VzZXJzX3ByZXNlbnRfZHVyYXRpb25fc2A7dFtgcHJlc2VuY2VfZHVyYXRpb24ke259X29yX21vcmVfdXNlcnNgXT1ZdShlLHIpfSkpLGQodCl9LHJlcG9ydENhbGxPcHNFdmVudChlKXtjb25zdCB0PXtldmVudF9uYW1lOlwiVEFMS19DQUxMX1BFUkZPUk1BTkNFXCIsYXNoOmUuYXNoLGF0dGVtcHRfaWQ6ZS5hdHRlbXB0SWQsZHVyYXRpb25fbXM6ZS5jYWxsRHVyYXRpb25NcyxwZXJmX3NsaWNlczplLnBlcmZTbGljZXMubWFwKEp1KX07ZCh0KX0scmVwb3J0Q29ubmVjdGl2aXR5RXZlbnQoZSl7fSxyZXBvcnRDb2duYWNFdmVudChlLHQpe319KSx7Z2V0QmF0dGVyeUxldmVsOigpPT4wLGdldFRlbXBlcmF0dXJlOigpPT4wLGlzUG93ZXJlZDooKT0+ITB9LGEsbCxyKTt2YXIgZDtyZXR1cm4gcz11LmdldFByZXNlbmNlU2VydmljZSgpLHV9KG4udGFsa2NvcmV2M19UYWxrQ29yZSxyLGksYXdhaXQgYXN5bmMgZnVuY3Rpb24oKXtjb25zdCBlPXQoKS53YXNtLndvcmtlclByb3h5O2lmKCFlKXRocm93IG5ldyBFcnJvcihcIm5vIHdhc20gd29ya2VyIHByb3h5IGluIHNjb3BlXCIpO3JldHVybiBhc3luYyBmdW5jdGlvbihlKXtsZXQgdDtjb25zdCBuPXtvblJlY2VpdmU6ZT0+e2lmKHQpe2NvbnN0IG49VWMoZS5ieXRlTGVuZ3RoKTtuLnNldChlKSx0Lm9uUmVjZWl2ZShuKX19fSxyPWF3YWl0IGUoKDAsUGMuc2opKG4pKSxpPSgpPT57fTtyZXR1cm57c2VuZDooZSx0LG4saSk9Pntjb25zdCBvPXQuc2xpY2UoKSxhPSgwLFBjLnJlKShvLFtvLmJ1ZmZlcl0pO3Iuc2VuZChlLGEpfSxyZWdpc3RlckhhbmRsZXI6KGUsbixyKT0+e1wicGNzXCI9PT1lJiYodD1uKX0sdW5yZWdpc3RlckhhbmRsZXI6ZT0+e1wicGNzXCI9PT1lJiYodD12b2lkIDAsci5zdG9wTGlzdGVuaW5nKCkpfSxhZGRTdHJlYW1MaXN0ZW5lcjppLHJlbW92ZVN0cmVhbUxpc3RlbmVyOmksYXBwU3RhdGVDaGFuZ2VkOmksZGlzcG9zZTppLGRpc3Bvc2VBc3luYzppfX0oZS5yZWdpc3RlckZvclByZXNlbmNlTWVzc2FnZXMpfSgpKTtlKChlPT57ZS50YWxrLmNsaWVudD1vfSkpO2NvbnN0e2dldENsaWVudENvZlZhbHVlOmF9PSgwLEdjLmYpKEhjLkkuZ2V0U3RhdGUoKSkscz0oYXdhaXQgYShcIkFERF9QQVJUSUNJUEFOVF9UT19DQUxMX0RXRUJcIiwhMSkpLnZhbHVlO2UoKGU9PntlLnRhbGsuaXNBZGRQYXJ0aWNpcGFudEVuYWJsZWQ9c30pKSxJKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcImNhbGxpbmcudGFsa2NvcmUuaW5pdC5zdWNjZXNzXCJ9KX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgRXJyb3Ipe2NvbnN0IHQ9ZTsoMCxFLlRiKSh0KX1JKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcImNhbGxpbmcudGFsa2NvcmUuaW5pdC5mYWlsdXJlXCJ9KX19LGRlc3Ryb3lDbGllbnQ6KCk9PntlKChlPT57ZS50YWxrLmNsaWVudCYmKGUudGFsay5jbGllbnQuZGlzcG9zZSgpLGRlbGV0ZSBlLnRhbGsuY2xpZW50KX0pKX0sc2Vzc2lvbnM6bmV3IE1hcCxvblNlc3Npb25TdGF0ZUNoYW5nZWQ6KG4scik9Pntjb25zdCBpPXQoKS5tZWRpYS5sb2NhbC5zY3JlZW4uZW5hYmxlZCYmZnVuY3Rpb24oZSx0LG4pe2NvbnN0IHI9ZS50YWxrLnNlc3Npb25zLmdldCh0KTtyZXR1cm4hIXImJlsuLi5uLnBhcnRpY2lwYW50c10uc29tZSgoZT0+e2xldFt0LG5dPWU7cmV0dXJuIG4uc2NyZWVuU3RyZWFtU3RhdGUuc3RhdHVzIT09RGMuencuTk9UX1BVQkxJU0hFRCYmci5zZXNzaW9uU3RhdGUucGFydGljaXBhbnRzLmdldCh0KT8uc2NyZWVuU3RyZWFtU3RhdGUuc3RhdHVzPT09RGMuencuTk9UX1BVQkxJU0hFRH0pKX0odCgpLG4scik7ZSgoZT0+e2NvbnN0IHQ9YWQoZSxuKTt0JiYodC5zZXNzaW9uU3RhdGU9cix0LnBhcnRpY2lwYW50T3JkZXI9b2QodCkpfSkpLGkmJigwLFZjLmhuKSghMSl9LG9uVGFsa2luZ1N0YXRlQ2hhbmdlZDoodCxuKT0+e2UoKGU9Pntjb25zdCByPWFkKGUsdCk7ciYmKHIudXNlcklkVG9UYWxraW5nU3RhdGU9bixyLnBhcnRpY2lwYW50T3JkZXI9b2QocikpfSkpfSxhZGRTZXNzaW9uOih0LG4pPT57ZSgoZT0+e2UudGFsay5zZXNzaW9ucy5zZXQodCxuKX0pKX0scmVtb3ZlU2Vzc2lvbjp0PT57ZSgoZT0+e2UudGFsay5zZXNzaW9ucy5kZWxldGUodCksaWQuY2FuY2VsVXBkYXRlKHQpfSkpfSxvbkJhY2tncm91bmRJbWFnZVN0YXRlQ2hhbmdlZChuLHIsaSl7ZSgoZT0+e2NvbnN0IG89YWQoZSxuKTtpZighbylyZXR1cm47Y29uc3QgYT0oMCxUYy55SykodCgpKTthJiYoby51c2VySWRUb0JhY2tncm91bmRJbWFnZVN0YXRlLnNldChyLGkpLHIhPT1hJiZpZC5vbkJhY2tncm91bmRJbWFnZVN0YXRlQ2hhbmdlZChuKSl9KSl9LHNldE1heFJlbW90ZUNhbGxHcmlkVGlsZXModCxuKXtlKChlPT57Y29uc3Qgcj1hZChlLHQpO3ImJnIubWF4UmVtb3RlQ2FsbEdyaWRUaWxlcyE9PW4mJihyLm1heFJlbW90ZUNhbGxHcmlkVGlsZXM9bixyLnBhcnRpY2lwYW50T3JkZXI9b2QocikpfSkpfSxpc0FkZFBhcnRpY2lwYW50RW5hYmxlZDohMX19KSxjZD1lPT4oe3R3ZWFrczp7c2hvdzohMSxhbGxUd2Vha3M6WmwudWMsdXBkYXRlVHdlYWs6KGUsdCk9Pnt9LHNob3dUd2Vha3M6KCk9PntlKChlPT57ZS50d2Vha3Muc2hvdz0hMH0pKX0saGlkZVR3ZWFrczooKT0+e2UoKGU9PntlLnR3ZWFrcy5zaG93PSExfSkpfX19KTt2YXIgbGQ9big2ODIzMCksdWQ9big2Mzk4KTtjKCkuZ2V0TG9nZ2VyKFwidXBkYXRlc1wiKTtjb25zdCBkZD0oZSx0KT0+KHt1cGRhdGVzOnt1cGRhdGVJbnN0YWxsZWRBbmRXYWl0aW5nOiExLHNlY3Byb3h5RmFpbGVkOiExLGZsYXZvcklzQ2hhbmdlZDohMSxsYXRlc3RWZXJzaW9uOntyZXZpc2lvbjpcIjRlZjFmNWQ3XCIsZmxhdm9yOlwicHJvZFwiLHZlcnNpb246XCIxMi4zNi4wXCIsYnVpbGRUaW1lOjE2ODQ5NDg2NDc3NzJ9LGNoZWNrRm9yVXBkYXRlOmFzeW5jKCk9Pntjb25zdHtsYXRlc3RWZXJzaW9uOm59PXQoKS51cGRhdGVzO3RyeXtsZXQgdDt0PWF3YWl0KDAsbGQueEkpKCk7Y29uc3Qgcj10LmZsYXZvcj09PW4uZmxhdm9yJiZ0LmJ1aWxkVGltZSE9PW4uYnVpbGRUaW1lLGk9XCJwcm9kXCI9PT1uLmZsYXZvciYmKFwiYWxwaGFcIj09PXQuZmxhdm9yfHxcImdvbGRcIj09PXQuZmxhdm9yKTtpZihpfHxuLmZsYXZvcj09PXQuZmxhdm9yfHxJKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcInN3X3VwZGF0ZV9mbGF2b3JfbWlzbWF0Y2hcIixkaW1lbnNpb25zOntjaGFuZ2U6YCR7bi5mbGF2b3J9X3RvXyR7dC5mbGF2b3J9YH19KSxpJiZlKChlPT57ZS51cGRhdGVzLmZsYXZvcklzQ2hhbmdlZD0hMH0pKSxyfHxpKXRyeXthd2FpdCgwLHVkLk5nKSgpLEkoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOmBzdy51cGRhdGUuJHt1ZC5LWn0ucG9sbF9mb3JfdXBkYXRlLnVwZGF0ZV9mb3VuZC5zdWNjZXNzYH0pLGUoKGU9PntlLnVwZGF0ZXMubGF0ZXN0VmVyc2lvbj10fSkpfWNhdGNoKGUpe0koKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOmBzdy51cGRhdGUuJHt1ZC5LWn0ucG9sbF9mb3JfdXBkYXRlLnVwZGF0ZV9mb3VuZC5mYWlsdXJlYH0pLCgwLEUuJGUpKCgoKT0+eygwLEUuWUEpKFwiY29udGV4dFwiLFwic2VydmljZXdvcmtlclwiKSwoMCxFLllBKShcImN1cnJlbnRfdmVyc2lvblwiLHVkLktaKSwoMCxFLlRiKShlKX0pKX1lbHNlIEkoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOmBzdy51cGRhdGUuJHt1ZC5LWn0ucG9sbF9mb3JfdXBkYXRlLm5vX3VwZGF0ZS5zdWNjZXNzYH0pfWNhdGNoKG4peygwLEUuJGUpKCgoKT0+eygwLEUuWUEpKFwiY29udGV4dFwiLFwiZmV0Y2hzZXJ2aWNld29ya2VyXCIpLCgwLEUuWUEpKFwiY3VycmVudF92ZXJzaW9uXCIsdWQuS1opLCgwLEUuVGIpKG4pfSkpLEkoKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOmBzdy51cGRhdGUuJHt1ZC5LWn0ucG9sbF9mb3JfdXBkYXRlLm5vX3VwZGF0ZS5mYWlsdXJlYH0pLG4gaW5zdGFuY2VvZiBsZC5KViYmKHQoKS51cGRhdGVzLnNlY3Byb3h5RmFpbGVkfHxJKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcInNlY3Byb3h5X2ZhaWx1cmVfZGV0ZWN0ZWRcIn0pLGUoKGU9PntlLnVwZGF0ZXMuc2VjcHJveHlGYWlsZWQ9ITB9KSkpfX0sc2V0VXBkYXRlSW5zdGFsbGVkQW5kV2FpdGluZzooKT0+e2UoKGU9PntlLnVwZGF0ZXMudXBkYXRlSW5zdGFsbGVkQW5kV2FpdGluZz0hMH0pKX19fSk7dmFyIGZkPW4oMTg0NDYpLHBkPW4ubihmZCksbWQ9bigzOTY5MyksaGQ9bi5uKG1kKTtjb25zdCB2ZD1uZXcobig5MTA4OCkuYWIpKHt1bmFyeTpsLlV9KTt2YXIgZ2Q9big0NDEzMCkseWQ9big4OTQ2KTtuKDgyNDk4KTtjb25zdCBFZD17fTthc3luYyBmdW5jdGlvbiBfZChlLHQpe2NvbnN0IG49YXdhaXQgYXN5bmMgZnVuY3Rpb24oZSl7bGV0e3NuYXBjaGF0X3VzZXJfaWQ6dCx0aW1lc3RhbXA6bixmcmllbmRzX3JlcXVlc3Q6cn09ZTtjb25zdCBpPW5ldyBSZXF1ZXN0KGAke0QuelV9L2FtaS9mcmllbmRzYCx7bWV0aG9kOlwiUE9TVFwiLGJvZHk6bmV3IFVSTFNlYXJjaFBhcmFtcyh7c25hcGNoYXRfdXNlcl9pZDp0LHRpbWVzdGFtcDpuLnRvU3RyaW5nKCksZnJpZW5kc19yZXF1ZXN0OkpTT04uc3RyaW5naWZ5KHIpfSksaGVhZGVyczp7XCJjb250ZW50LXR5cGVcIjpcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD11dGYtOFwifX0pLG89YXdhaXQoMCx3Lm4pKGkpO2lmKCFvLm9rKXRocm93IG5ldyBBLnZEKG8pO3JldHVybiBhd2FpdCBvLmpzb24oKX0oe3NuYXBjaGF0X3VzZXJfaWQ6KDAsTS5NYykoZSksdGltZXN0YW1wOkRhdGUubm93KCksZnJpZW5kc19yZXF1ZXN0OkVkfSk7cmV0dXJuIHQmJihFZC5hZGRlZF9mcmllbmRzX3N5bmNfdG9rZW49bi5hZGRlZF9mcmllbmRzX3N5bmNfdG9rZW4pLHI9bix7Li4ucixmcmllbmRzOlNkKHIuZnJpZW5kcyksYWRkZWRfZnJpZW5kczpTZChyLmFkZGVkX2ZyaWVuZHMpLHBhcnRpYWxfZnJpZW5kczpTZChyLnBhcnRpYWxfZnJpZW5kcyksYmVzdHNfdXNlcl9pZHM6ci5iZXN0c191c2VyX2lkcz9yLmJlc3RzX3VzZXJfaWRzLm1hcCgoZT0+KDAsTS5PWSkoZSkpKTpbXX07dmFyIHJ9ZnVuY3Rpb24gSWQoZSl7aWYoZT8uZGV2aWNlcylyZXR1cm57ZGV2aWNlczplLmRldmljZXMubWFwKChlPT57aWYodm9pZCAwPT09ZS5vdXRfYmV0YSlyZXR1cm4gdm9pZCBJKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcImUyZWVfbWFsZm9ybWVkX2RldmljZV9rZXlcIixkaW1lbnNpb25zOntyZWFzb246XCJlbXB0eV9vdXRfYmV0YVwifX0pO2lmKHZvaWQgMD09PWUudmVyc2lvbilyZXR1cm4gdm9pZCBJKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcImUyZWVfbWFsZm9ybWVkX2RldmljZV9rZXlcIixkaW1lbnNpb25zOntyZWFzb246XCJlbXB0eV92ZXJzaW9uXCJ9fSk7bGV0IHQ7dHJ5e3Q9eC50b0J5dGVBcnJheShlLm91dF9iZXRhKX1jYXRjaChlKXtyZXR1cm4gdm9pZCBJKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcImUyZWVfbWFsZm9ybWVkX2RldmljZV9rZXlcIixkaW1lbnNpb25zOntyZWFzb246XCJiYXNlNjRfZGVjb2RlX2ZhaWx1cmVcIn19KX1pZighKHQubGVuZ3RoPD0yNikpcmV0dXJue3B1YmxpY0tleTp4LnRvQnl0ZUFycmF5KGUub3V0X2JldGEpLnNsaWNlKDI2KSx2ZXJzaW9uOmUudmVyc2lvbn07SSgpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJlMmVlX21hbGZvcm1lZF9kZXZpY2Vfa2V5XCIsZGltZW5zaW9uczp7cmVhc29uOlwia2V5X3Rvb19zaG9ydFwifX0pfSkpLmZpbHRlcigoZT0+Qm9vbGVhbihlKSkpfX1mdW5jdGlvbiBTZChlKXtyZXR1cm4gZT9lLm1hcCgoZT0+KHsuLi5lLHVzZXJfaWQ6KDAsTS5PWSkoZS51c2VyX2lkKSxiaXRtb2ppX3NlbGZpZV9pZDooMCx5ZC5iKShlLmJpdG1vamlfc2VsZmllX2lkLCgwLE0uT1kpKGUudXNlcl9pZCkpLGZpZGVsaXVzX2luZm86SWQoXCJmaWRlbGl1c19pbmZvXCJpbiBlP2UuZmlkZWxpdXNfaW5mbzp2b2lkIDApfSkpKTpbXX1jKCkuZ2V0TG9nZ2VyKFwiW1VzZXJGcmllbmRzXVwiKTt2YXIgYmQ9big4NDAwKSxUZD1uLm4oYmQpO2Z1bmN0aW9uIENkKGUsdCl7aWYodClmb3IoY29uc3QgbiBvZiB0KXtjb25zdCB0PWUuZ2V0KG4udXNlcl9pZCk7ZS5zZXQobi51c2VyX2lkLHsuLi50LC4uLm59KX19Y29uc3QgQWQ9KGUsdCk9Pntjb25zdCBuPShlPT57bGV0e2Z1bmM6dCx3YWl0Om4sbWF4QmF0Y2g6cixnZXRLZXk6aT0oZT0+ZSl9PWU7Y29uc3Qgbz1bXTtsZXQgYTtjb25zdCBzPVtdLGM9W10sbD1uZXcgTWFwO3JldHVybiBhc3luYyBmdW5jdGlvbigpe2F8fChhPXdpbmRvdy5zZXRUaW1lb3V0KCgoKT0+e2E9bnVsbCwoYXN5bmMoKT0+e2NvbnN0IGU9VGQoKShvLHJ8fG8ubGVuZ3RoKTt0cnl7YXdhaXQgUHJvbWlzZS5hbGwoZS5tYXAoKGFzeW5jIGU9PnQoLi4uZSkpKSkscy5tYXAoKGU9PmUoKSkpfWNhdGNoKGUpe2MubWFwKCh0PT50KGUpKSl9ZmluYWxseXtvLmxlbmd0aD0wLHMubGVuZ3RoPTAsYy5sZW5ndGg9MCxsLmNsZWFyKCl9fSkoKX0pLG4pKTtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx1PW5ldyBBcnJheShlKSxkPTA7ZDxlO2QrKyl1W2RdPWFyZ3VtZW50c1tkXTthd2FpdCBQcm9taXNlLmFsbCh1Lm1hcCgoYXN5bmMgZT0+e2NvbnN0IHQ9aShlKSxuPWwuZ2V0KHQpPz8oYXN5bmMgZT0+bmV3IFByb21pc2UoKCh0LG4pPT57by5wdXNoKGUpLHMucHVzaCh0KSxjLnB1c2gobil9KSkpKGUpO3JldHVybiBsLnNldCh0LG4pLG59KSkpfX0pKHtmdW5jOmFzeW5jIGZ1bmN0aW9uKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspbltyXT1hcmd1bWVudHNbcl07Y29uc3R7c25hcGNoYXR0ZXJzOml9PWF3YWl0IGFzeW5jIGZ1bmN0aW9uKGUpe3JldHVybiB0PWF3YWl0IGFzeW5jIGZ1bmN0aW9uKGUpe2NvbnN0IHQ9bmV3IFJlcXVlc3QoYCR7RC56VX0vbG9xL3NuYXBjaGF0dGVyX3B1YmxpY19pbmZvYCx7bWV0aG9kOlwiUE9TVFwiLGJvZHk6bmV3IFVSTFNlYXJjaFBhcmFtcyh7dXNlcl9pZHM6SlNPTi5zdHJpbmdpZnkoZSksc291cmNlOlwiQ0hBVFwifSksaGVhZGVyczp7XCJjb250ZW50LXR5cGVcIjpcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD11dGYtOFwifX0pLG49YXdhaXQoMCx3Lm4pKHQpO2lmKCFuLm9rKXRocm93IG5ldyBBLnZEKG4pO3JldHVybiBhd2FpdCBuLmpzb24oKX0oZS5tYXAoTS5NYykpLHsuLi50LHNuYXBjaGF0dGVyczpTZCh0LnNuYXBjaGF0dGVycyl9O3ZhciB0fShuKTsoaT8ubGVuZ3RoPz8wIT09bi5sZW5ndGgpJiZJKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcImZldGNoaW5nX3VzZXJzX2xlbmd0aF9taXNtYXRjaFwifSksZSgoZT0+e0NkKGUudXNlci51c2VycyxpKX0pKX0sd2FpdDo1MCxtYXhCYXRjaDozMn0pO3JldHVybnt1c2VyOnt1c2VyczpuZXcgTWFwLG11dHVhbGx5Q29uZmlybWVkRnJpZW5kSWRzOltdLGJlc3RGcmllbmRzOltdLHNob3J0Y3V0czpbXSxoYXNFdmVyU3luY2VkRnJpZW5kczohMSxzeW5jRnJpZW5kczphc3luYygpPT57Y29uc3Qgbj0oMCxUYy55SykodCgpKTtpZighbilyZXR1cm47Y29uc3Qgcj1hd2FpdCBfZChuLCExKTtlKChlPT57Q2QoZS51c2VyLnVzZXJzLHIuZnJpZW5kcyksZS51c2VyLmJlc3RGcmllbmRzPXIuYmVzdHNfdXNlcl9pZHM7Y29uc3QgdD1mdW5jdGlvbihlKXtyZXR1cm4gZS5mcmllbmRzLmZpbHRlcigoZT0+MD09PWUudHlwZSkpLm1hcCgoZT0+ZS51c2VyX2lkKSl9KHIpO3BkKCkoZS51c2VyLm11dHVhbGx5Q29uZmlybWVkRnJpZW5kSWRzLHQpfHwoZS51c2VyLm11dHVhbGx5Q29uZmlybWVkRnJpZW5kSWRzPXQpLGUudXNlci5oYXNFdmVyU3luY2VkRnJpZW5kcz0hMH0pKX0sZmV0Y2hVc2Vyczphc3luYyBlPT57Y29uc3R7dXNlcnM6cn09dCgpLnVzZXIsaT1lLmZpbHRlcigoZT0+IXIuaGFzKGUpKSk7YXdhaXQgbiguLi5pKX0sZW5zdXJlVXNlcnM6YXN5bmMgZT0+e2NvbnN0e3VzZXJzOm4sZmV0Y2hVc2VyczpyfT10KCkudXNlcjtpZihlLnNvbWUoKGU9PiFuLmdldChlKSkpKXtjb25zdCB0PWUucmVkdWNlKCgoZSx0KT0+KG4uZ2V0KHQpfHxlLnB1c2godCksZSkpLFtdKTthd2FpdCByKHQpfWNvbnN0IGk9dCgpLnVzZXIudXNlcnM7cmV0dXJuIGhkKCkoZS5tYXAoKGU9Pntjb25zdCB0PWkuZ2V0KGUpO3JldHVybiB0fHxJKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcInVzZXJfaWRfbWFwc190b191bmRlZmluZWRfdXNlclwifSksdH0pKSl9LHNldEJpdG1vamlCYWNrZ3JvdW5kSWRPdmVycmlkZTp0PT57ZSgoZT0+e2UudXNlci5iaXRtb2ppQmFja2dyb3VuZElkT3ZlcnJpZGU9dH0pKX0sc3luY0ZyaWVuZFJlcXVlc3RzOmFzeW5jKCk9Pntjb25zdCBuPSgwLFRjLnlLKSh0KCkpO2lmKCFuKXJldHVybjtjb25zdCByPWF3YWl0IF9kKG4sITApO2UoKGU9PntDZChlLnVzZXIudXNlcnMsci5hZGRlZF9mcmllbmRzKTtjb25zdCB0PXIuYWRkZWRfZnJpZW5kcy5maWx0ZXIoKGU9PmUudHlwZT09PWdkLk4uUEVORElORykpLm1hcCgoZT0+ZS51c2VyX2lkKSk7ZS51c2VyLmZyaWVuZFJlcXVlc3RzPVsuLi5lLnVzZXIuZnJpZW5kUmVxdWVzdHMsLi4udF19KSl9LGZldGNoU2hvcnRjdXRzOmFzeW5jKCk9Pntjb25zdHtsaXN0czp0fT1hd2FpdCB2ZC5GZXRjaExpc3RzKHt9KTtlKChlPT57ZS51c2VyLnNob3J0Y3V0cz10fSkpfSxjcmVhdGVMaXN0OmFzeW5jKHQsbik9PntpZighdC5sZW5ndGgpcmV0dXJuO2NvbnN0IHI9e2xpc3RJdGVtczp0LGxpc3RJZDp2b2lkIDAsbmFtZTpuLGNyZWF0aW9uVGltZToobmV3IERhdGUpLnRvU3RyaW5nKCkscmFuazoxLGRlc2NyaXB0aXZlVGl0bGU6bixncm91cFN0b3J5SWQ6dm9pZCAwfSx7bGlzdHM6aX09YXdhaXQgdmQuQ3JlYXRlTGlzdHMoe2xpc3RzOltyXX0pO2UoKGU9PntlLnVzZXIuc2hvcnRjdXRzPVsuLi5lLnVzZXIuc2hvcnRjdXRzLC4uLmldfSkpfSxmcmllbmRSZXF1ZXN0czpbXX19fTt2YXIgUmQ9big4OTYzNyksa2Q9bigzOTMxNiksT2Q9big2NzYxNCksTmQ9bigzMjA2MSksd2Q9big2ODc0Mik7YXN5bmMgZnVuY3Rpb24gRGQoKXtsZXQgZT0hMTtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyBBcnJheSh0KSxyPTA7cjx0O3IrKyluW3JdPWFyZ3VtZW50c1tyXTtpZihcInNlcnZpY2VXb3JrZXJcImluIG5hdmlnYXRvciYmbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIuY29udHJvbGxlcil7Y29uc3QgdD0oYXdhaXQgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVhZHkpLmFjdGl2ZTt0JiYodC5wb3N0TWVzc2FnZSh7dHlwZTpcIk1FVFJJQ1NfSU5DUkVNRU5UXCIsYXJnczpufSksZT0hMCl9ZXx8SSgpLmluY3JlbWVudCguLi5uKX1jKCkuZ2V0TG9nZ2VyKFwiTWV0cmljc1ZpYVNXXCIpLGMoKS5nZXRMb2dnZXIoXCJbd2FzbV1cIik7Y29uc3QgUGQ9KGUsdCk9Pih7d2FzbTp7aW5pdGlhbGl6ZTphc3luYyBpPT57YXdhaXQgRGQoe21ldHJpY3NOYW1lOlwid2FzbS5zdG9yZS5sb2FkLnN0YXJ0XCJ9KTtjb25zdCBvPXBlcmZvcm1hbmNlLm5vdygpLGE9SGMuSS5nZXRTdGF0ZSgpLmdldE1jc0NvZlNlcXVlbmNlSWRzO3RyeXtjb25zdCBzPXtnZXRBdXRoVG9rZW46TmQuYixnZXRNY3NDb2ZTZXF1ZW5jZUlkczphLHRocm90dGxlZFJlZnJlc2hUb2tlbjp0KCkuYXV0aC50aHJvdHRsZWRSZWZyZXNoVG9rZW4sYWxsb2NhdGVXYXNtQnVmZmVyT3JUaHJvdzpVY30sYz0oMCxUYy5MbikodCgpKSxsPSgwLExjLlFlKSh0KCkpLHt3YXNtTW9kdWxlOnUsY2xlYW51cEZ1bmN0aW9uOmR9PWF3YWl0KDAsT2QuSSkocyxsKSxmPVtdO2YucHVzaChkKTtjb25zdCBwPW5ldyBrZC5xKG5ldyBVUkwobi5wK24udSg0NTM4KSxuLmIpLHtuYW1lOlwibWVzc2FnaW5nLXdhc20td29ya2VyXCJ9KS5nZXRXb3JrZXIoKSxtPSgwLFBjLlVkKShwKTsoMCxSZC5UbykocCksbS5zZXRBdXRoVG9rZW5HZXR0ZXIoKDAsUGMuc2opKE5kLmIpKSxtLnNldE1jc0NvZlNlcXVlbmNlSWRzR2V0dGVyKCgwLFBjLnNqKShhKSksYXdhaXQgbS5sb2FkV2FzbShpLGMsKDAsd2QuRDQpKCksKDAsUGMuc2opKE1kLmdldFN0YXRlKCkuYXV0aC50aHJvdHRsZWRSZWZyZXNoVG9rZW4pLCgwLFBjLnNqKShsKSksYXdhaXQgRGQoe21ldHJpY3NOYW1lOlwid2FzbS5zdG9yZS5sb2FkLmZpbmlzaFwifSksSSgpLmFkZFRpbWVyKHttZXRyaWNzTmFtZTpcIndhc20uc3RvcmUubG9hZC5sYXRlbmN5XCIsbWlsbGlTZWM6TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKS1vKX0pLGUoKGU9PntlLndhc20ubW9kdWxlPSgwLHIudlYpKHtyZWY6dX0sITEpLGUud2FzbS53b3JrZXI9cCxlLndhc20ud29ya2VyUHJveHk9bTtjb25zdCB0PWFzeW5jKCk9Pm0uc3RvcCgpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsdCksZS53YXNtLnRlYXJkb3duPWFzeW5jKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLHQpLGF3YWl0IG0uc3RvcCgpO2Zvcihjb25zdCBlIG9mIGYpZSgpO21bUGMuWXldKCl9fSkpLE9iamVjdC5pc0Zyb3plbih0KCkud2FzbS5tb2R1bGUpLE9iamVjdC5pc0Zyb3plbih0KCkud2FzbS5tb2R1bGU/LnJlZil9Y2F0Y2goZSl7dGhyb3cgYXdhaXQgRGQoe21ldHJpY3NOYW1lOlwid2FzbS5zdG9yZS5sb2FkLmVycm9yXCJ9KSxlfX0sbG9nRmF0YWxFcnJvcjpuPT57KDAsTGMueTgpKHQoKSl8fChJKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpgd2FzbS5mYXRhbF9lcnJvci4ke24udHlwZX1gfSksZSgoZT0+e2Uud2FzbS5mYXRhbEVycm9yPXt0aW1lc3RhbXA6bmV3IERhdGUsLi4ubn19KSkpfSxkZXN0cm95OmFzeW5jKCk9Pnthd2FpdCBEZCh7bWV0cmljc05hbWU6XCJ3YXNtLnN0b3JlLmRlc3Ryb3kuc3RhcnRcIn0pO2NvbnN0IG49cGVyZm9ybWFuY2Uubm93KCkscj10KCkud2FzbTthd2FpdChyLndvcmtlclByb3h5Py5kZXN0cm95V2FzbSgpKSxyLnRlYXJkb3duPy4oKSxlKChlPT57ZGVsZXRlIGUud2FzbS5tb2R1bGV9KSksci53b3JrZXI/LnRlcm1pbmF0ZSgpLGF3YWl0IERkKHttZXRyaWNzTmFtZTpcIndhc20uc3RvcmUuZGVzdHJveS5maW5pc2hcIn0pLEkoKS5hZGRUaW1lcih7bWV0cmljc05hbWU6XCJ3YXNtLnN0b3JlLmRlc3Ryb3kubGF0ZW5jeVwiLG1pbGxpU2VjOk1hdGgucm91bmQocGVyZm9ybWFuY2Uubm93KCktbil9KSxlKChlPT57ZGVsZXRlIGUud2FzbS53b3JrZXJQcm94eSxkZWxldGUgZS53YXNtLndvcmtlcn0pKX19fSk7KDAsci5NRCkoKTtjb25zdCBNZD0oMCx2Lk0pKCgwLG0uWFIpKCgwLGgubikoKGZ1bmN0aW9uKCl7cmV0dXJuey4uLlcoLi4uYXJndW1lbnRzKSwuLi5FYyguLi5hcmd1bWVudHMpLC4uLigwLFNjLmZfKSguLi5hcmd1bWVudHMpLC4uLigwLGJjLngpKC4uLmFyZ3VtZW50cyksLi4uQWQoLi4uYXJndW1lbnRzKSwuLi5QZCguLi5hcmd1bWVudHMpLC4uLnNkKC4uLmFyZ3VtZW50cyksLi4uT2MoLi4uYXJndW1lbnRzKSwuLi4oMCxJYy53dykoLi4uYXJndW1lbnRzKSwuLi5zYyguLi5hcmd1bWVudHMpLC4uLmRkKC4uLmFyZ3VtZW50cyksLi4uY2QoLi4uYXJndW1lbnRzKSwuLi5fYyguLi5hcmd1bWVudHMpLC4uLmkoLi4uYXJndW1lbnRzKSwuLi5mKC4uLmFyZ3VtZW50cyksLi4ubyguLi5hcmd1bWVudHMpLC4uLigwLGouVlYpKC4uLmFyZ3VtZW50cyksLi4uTmMoLi4uYXJndW1lbnRzKX19KSkpKSxMZD0oZSx0KT0+KDAscC5vUikoTWQsZSx0KX0sMTkyMDE6KGUsdCxuKT0+e24uZCh0LHtyOigpPT5pLHc6KCk9Pm99KTt2YXIgcj1uKDg5NDE1KTtmdW5jdGlvbiBpKGUsdCxuLGkpe2NvbnN0IG89Wy4uLnQuZW50cmllcygpXS5maWx0ZXIoKGU9PntsZXRbdCxuXT1lO3JldHVybigwLHIuTikobil9KSkubWFwKChlPT57bGV0W3Qsbl09ZTtyZXR1cm4gdH0pKSxhPW5ldyBTZXQobyksYz1uZXcgU2V0KGUpLGw9ZS5maWx0ZXIoKGU9PmEuaGFzKGUpKSksdT1vLmZpbHRlcigoZT0+IWMuaGFzKGUpKSk7bC51bnNoaWZ0KC4uLnUpO2NvbnN0IGQ9bC5maW5kSW5kZXgoKGU9PnZvaWQgMCE9PXQuZ2V0KGUpPy5zY3JlZW5TdHJlYW1TdGF0ZS5zaW5rSWQpKTtpZigtMSE9PWQmJjAhPT1kJiZsLnVuc2hpZnQobC5zcGxpY2UoZCwxKVswXSksbC5sZW5ndGg8PWkpcmV0dXJuIGw7Y29uc3QgZj1sLnNsaWNlKGkpLmZpbHRlcigoZT0+bi5nZXQoZSk/LmlzVGFsa2luZykpO2lmKGYubGVuZ3RoPjApe2NvbnN0IGU9dS5sZW5ndGgrTnVtYmVyKC0xIT09ZCksdD1sLnNsaWNlKGUsaSkuZmlsdGVyKChlPT4hbi5nZXQoZSk/LmlzVGFsa2luZykpLnNvcnQoKChlLHQpPT5zKHQsbiktcyhlLG4pKSk7Zm9yKGNvbnN0IGUgb2YgZil7Y29uc3Qgbj10LnBvcCgpO2lmKHZvaWQgMD09PW4pYnJlYWs7Y29uc3Qgcj1sLmluZGV4T2YoZSksaT1sLmluZGV4T2Yobik7cj49MCYmaT49MCYmKGxbcl09bixsW2ldPWUpfX1yZXR1cm4gbH1mdW5jdGlvbiBvKGUsdCl7Y29uc3Qgbj1uZXcgTWFwKGUubWFwKCgoZSx0KT0+W2UsdF0pKSk7cmV0dXJuWy4uLnRdLmZpbHRlcigoZT0+e2xldFt0LG5dPWU7cmV0dXJuKDAsci5OKShuKX0pKS5zb3J0KCgoZSx0KT0+e2xldFtyLGldPWUsW28sc109dDtyZXR1cm4gYShyLG4pLWEobyxuKX0pKX1mdW5jdGlvbiBhKGUsdCl7cmV0dXJuIHQuZ2V0KGUpPz9OdW1iZXIuTUFYX1NBRkVfSU5URUdFUn1mdW5jdGlvbiBzKGUsdCl7Y29uc3Qgbj10LmdldChlKT8ubGFzdFRhbGtpbmdUaW1lc3RhbXBNcz8/MDtyZXR1cm4gTnVtYmVyKG4pfX0sMzg0ODQ6KGUsdCxuKT0+e24uZCh0LHtfdTooKT0+QSxPUDooKT0+ayxveDooKT0+UCxvOTooKT0+RCxEUzooKT0+ZyxGajooKT0+cCxWNjooKT0+bSxRSjooKT0+dixaWTooKT0+UixTczooKT0+YixmcTooKT0+eSxGbTooKT0+VCxJRjooKT0+XyxvWjooKT0+aCxkQzooKT0+UyxsXzooKT0+SSxhazooKT0+RSxHWjooKT0+QyxsbzooKT0+dyxUYzooKT0+TyxRZDooKT0+TSxsczooKT0+Tn0pO3ZhciByPW4oNDEzMSksaT1uKDIwNTczKSxvPW4oNTE1NzYpLGE9big5NDAzMCkscz1uKDQ0Nzg1KSxjPW4oMTkyMDEpO2Z1bmN0aW9uIGwoZSl7Y29uc3QgdD1lLmNhbGxpbmdTdGF0ZTtyZXR1cm4gZS5wdWJsaXNoZWRNZWRpYSE9PXIucFUuTk9ORSYmKHQ9PT1yLlVxLkNBTExJTkd8fHQ9PT1yLlVxLklOX0NBTEwpfWZ1bmN0aW9uIHUoZSl7Y29uc3QgdD1lLmNhbGxpbmdTdGF0ZTtyZXR1cm4gdD09PXIuVXEuUklOR0lOR3x8dD09PXIuVXEuQU5TV0VSRUR9ZnVuY3Rpb24gZChlLHQpe3JldHVybiBlLmZpbHRlcigoZT0+dChlLnNlc3Npb24uZ2V0TG9jYWxTdGF0ZSgpKSkpLnNvcnQoKChlLHQpPT5lLmNyZWF0ZWRUaW1lc3RhbXAtdC5jcmVhdGVkVGltZXN0YW1wKSlbMF0/LmNvbnZlcnNhdGlvbklkfWNvbnN0IGY9KGUsdCk9PnQmJmUudGFsay5zZXNzaW9ucy5nZXQodCkscD1lPT50PT5mKHQsZSk/LnNlc3Npb25TdGF0ZS5jYWxsSm9pbmVkVGltZXN0YW1wTXMsbT1lPT50PT5mKHQsZSk/LnNlc3Npb25TdGF0ZS5sb2NhbFVzZXIuY2FsbGluZ1N0YXRlPz9yLlVxLk5PTkUsaD1lPT50PT5mKHQsZSk/LnNlc3Npb25TdGF0ZS5wYXJ0aWNpcGFudHM/PygwLGEuc18pKCksdj1lPT4oMCxpLlAxKShoKGUpLChlPT5bLi4uZV0uZmlsdGVyKChlPT57bGV0Wyx0XT1lO3JldHVybiB0LmNhbGxpbmdTdGF0ZT09PXIuVXEuSU5fQ0FMTH0pKS5tYXAoKGU9PntsZXRbdF09ZTtyZXR1cm4gdH0pKSkpLGc9ZT0+KDAsaS5QMSkoaChlKSwoZT0+dD0+Zih0LGUpPy5wYXJ0aWNpcGFudE9yZGVyPz9bXSkoZSksKChlLHQpPT4oMCxjLncpKHQsZSkpKSx5PWU9PnQ9PntpZighZSlyZXR1cm4gci5wVS5OT05FO2NvbnN0IG49Zih0LGUpPy5zZXNzaW9uLGk9bj8uZ2V0U3RhdGUoKS5jYWxsaW5nTWVkaWEsbz1uPy5nZXRMb2NhbFN0YXRlKCk/LnB1Ymxpc2hlZE1lZGlhO3JldHVybiBvfHwoaT8/ci5wVS5OT05FKX0sRT1lPT50PT5mKHQsZSk/LnNlc3Npb25TdGF0ZSxfPWU9PnQ9PmYodCxlKT8ucGFydGljaXBhbnRDb2xvcnMsST0oZSx0LG4pPT5yPT57Y29uc3QgaT1oKHQpKHIpLmdldCgoMCxzLk1jKShlKSk7cmV0dXJuIG4/aT8uc2NyZWVuU3RyZWFtU3RhdGUuc2lua0lkOmk/LnZpZGVvU2lua0lkfSxTPShlLHQpPT5uPT5mKG4sdCk/LnNlc3Npb25TdGF0ZS5wYXJ0aWNpcGFudHMuZ2V0KCgwLHMuTWMpKGUpKT8uYXVkaW9TaW5rSWQsYj0oZSx0KT0+bj0+e2NvbnN0IHI9KGU9PnQ9PmYodCxlKT8udXNlcklkVG9UYWxraW5nU3RhdGU/PygwLGEuc18pKCkpKHQpKG4pLGk9KDAscy5NYykoZSk7cmV0dXJuIHIuZ2V0KGkpPy5pc1RhbGtpbmc/PyExfSxUPWU9PnQ9PmYodCxlKT8ubWF4UmVtb3RlQ2FsbEdyaWRUaWxlcz8/by55NCxDPWU9PmUudGFsay5zZXRNYXhSZW1vdGVDYWxsR3JpZFRpbGVzLEE9ZT0+ZS50YWxrLnNlc3Npb25zLFI9ZT0+KDAsaS5QMSkoQSwodD0+e2Zvcihjb25zdFtuLGldb2YgdClpZihlIT09biYmaS5zZXNzaW9uLmdldExvY2FsU3RhdGUoKS5wdWJsaXNoZWRNZWRpYSE9PXIucFUuTk9ORSlyZXR1cm4hMDtyZXR1cm4hMX0pKSxrPSgwLGkuUDEpKEEsKGZ1bmN0aW9uKGUpe2NvbnN0IHQ9Wy4uLmUudmFsdWVzKCldO3JldHVybntvbmdvaW5nQ2FsbENvbnZlcnNhdGlvbklkOmQodCxsKSxpbmNvbWluZ0NhbGxDb252ZXJzYXRpb25JZDpkKHQsdSl9fSkpLE89KDAsaS5QMSkoaywoZT0+e2xldHtvbmdvaW5nQ2FsbENvbnZlcnNhdGlvbklkOnQsaW5jb21pbmdDYWxsQ29udmVyc2F0aW9uSWQ6bn09ZTtyZXR1cm4gdm9pZCAwIT09dHx8dm9pZCAwIT09bn0pKSxOPWU9PmsoZSkub25nb2luZ0NhbGxDb252ZXJzYXRpb25JZCx3PWU9PnQ9PmYodCxlKT8udXNlcklkVG9CYWNrZ3JvdW5kSW1hZ2VTdGF0ZT8/KDAsYS5zXykoKSxEPShlLHQpPT5uPT53KGUpKG4pLmdldCh0KSxQPWU9PnQ9PmYodCxlKT8uYXVkaW9TdHJlYW1zTWl4ZXIsTT1lPT5lLnRhbGsuaXNBZGRQYXJ0aWNpcGFudEVuYWJsZWR9LDc2NTgwOihlLHQsbik9PntmdW5jdGlvbiByKGUpe3JldHVybiBlKCl9ZnVuY3Rpb24gaSgpe3JldHVybiExfWZ1bmN0aW9uIG8oZSx0KXtjb25zdCBuPXIoZSk7cmV0dXJuIHQ/bjp2b2lkIDB9bi5kKHQse1YyOigpPT5pLGVmOigpPT5vLHJwOigpPT5yfSksbig2OTcyOSksbig5ODgyMSl9LDQ5NjcyOihlLHQsbik9PntuLmQodCx7Ymk6KCk9PnJ9KTtjb25zdCByPShlLHQpPT50KCl9LDYzOTIxOihlLHQsbik9PntuLmQodCx7SlQ6KCk9Pm0sTDooKT0+XyxORDooKT0+ZyxSZjooKT0+eSxWWDooKT0+UyxjVjooKT0+aCxjbjooKT0+ZCxnaTooKT0+RSxtNDooKT0+YyxtTTooKT0+bCxucDooKT0+dSxvRTooKT0+YixvTzooKT0+ZixzajooKT0+cCxzbDooKT0+dixzdTooKT0+SX0pO3ZhciByPW4oMzk2OTMpLGk9bi5uKHIpLG89bigyMDU3MyksYT1uKDQ0MTMwKSxzPW4oNDQ3ODUpO2NvbnN0IGM9ZT0+ZS51c2VyLnVzZXJzLGw9ZT0+ZS51c2VyLmhhc0V2ZXJTeW5jZWRGcmllbmRzLHU9ZT0+dD0+ZT9jKHQpLmdldChlKTp2b2lkIDAsZD1lPT50PT5lLm1hcCgoZT0+dShlKSh0KSkpLGY9ZT0+ZS51c2VyLmZldGNoVXNlcnMscD1lPT5lLnVzZXIuZW5zdXJlVXNlcnMsbT1lPT50PT5Cb29sZWFuKGUmJnQudXNlci5iZXN0RnJpZW5kcy5pbmNsdWRlcyhlKSksaD1lPT50PT5Cb29sZWFuKGUmJnQudXNlci5tdXR1YWxseUNvbmZpcm1lZEZyaWVuZElkcy5pbmNsdWRlcyhlKSksdj1lPT5lLnVzZXIubXV0dWFsbHlDb25maXJtZWRGcmllbmRJZHMsZz0oMCxvLlAxKSgoZT0+ZS51c2VyLmJlc3RGcmllbmRzKSxjLCgoZSx0KT0+aSgpKGUubWFwKChlPT50LmdldChlKSkpKSkpLHk9ZT0+ZS51c2VyLmJpdG1vamlCYWNrZ3JvdW5kSWRPdmVycmlkZSxFPWU9PmUudXNlci5mcmllbmRSZXF1ZXN0cyxfPWU9PnQ9Pntjb25zdCBuPSgwLHMuJHApKGUpLHI9dC51c2VyLnVzZXJzLmdldChuKTtpZihyJiZyLnR5cGU9PT1hLk4uRlJJRU5EJiZyLmZpZGVsaXVzX2luZm8/LmRldmljZXMubGVuZ3RoKXJldHVybiByLmZpZGVsaXVzX2luZm8uZGV2aWNlc30sST1lPT5lLmF1dGgua2V5SW5pdGlhbGl6YXRpb25JbmZvLFM9ZT0+ZS51c2VyLmZldGNoU2hvcnRjdXRzLGI9ZT0+ZS51c2VyLnNob3J0Y3V0c30sMjAyOTM6KGUsdCxuKT0+e24uZCh0LHtCUjooKT0+cyxDRzooKT0+YyxJNDooKT0+ZCxUWjooKT0+bCxiMzooKT0+YSxiNzooKT0+cH0pO3ZhciByPW4oNDQ3ODUpLGk9big4MjQ5OCk7Y29uc3Qgbz0yNTkyZTU7ZnVuY3Rpb24gYShlKXtyZXR1cm4gZT9lLmRpc3BsYXl8fGUuZGlzcGxheV9uYW1lfHxlLm11dGFibGVfdXNlcm5hbWV8fCgwLHIuTWMpKGUudXNlcl9pZCk6XCJTTkFQQ0hBVFRFUlwifWZ1bmN0aW9uIHMoZSl7cmV0dXJuIHUoYShlKSwxKX1mdW5jdGlvbiBjKGUpe3JldHVybiB1KGUsMCl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gdShlLDIpfWZ1bmN0aW9uIHUoZSx0KXtjb25zdCBuPWUuc3BsaXQoXCIgXCIpLmZpbHRlcigoZT0+ZSkpO2lmKG4ubGVuZ3RoPDIpcmV0dXJuIGU7Y29uc3Qgcj1uWzBdLGk9bltuLmxlbmd0aC0xXTtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiByO2Nhc2UgMTpjYXNlIDI6e2NvbnN0IGU9Wy4uLmldO2xldCBuPWVbMF07cmV0dXJuIDI9PT10JiZlLmxlbmd0aD4xJiYobj1gJHtufS5gKSxgJHtyfSAke259YH19fWZ1bmN0aW9uIGQoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOkRhdGUubm93KCk7Y29uc3Qgbj1lLnRzLHI9ZS5yZXZlcnNlX3RzO2lmKCFufHwhcilyZXR1cm4hMTtpZihlLnVzZXJfaWQ9PT1pLmEyKXJldHVybiExO2NvbnN0IGE9cGFyc2VJbnQobikscz1wYXJzZUludChyKTtyZXR1cm4gdC1NYXRoLm1heChhLHMpPG99Y29uc3QgZj1lPT57Y29uc3QgdD1lLnNwbGl0KFwiLVwiKTtyZXR1cm57bW9udGg6TnVtYmVyKHRbMF0pLGRhdGU6TnVtYmVyKHRbMV0pfX07ZnVuY3Rpb24gcChlKXtpZighZS5iaXJ0aGRheSlyZXR1cm4hMTtjb25zdCB0PWYoZS5iaXJ0aGRheSksbj1uZXcgRGF0ZTtyZXR1cm4gdC5tb250aD09PW4uZ2V0TW9udGgoKSsxJiZ0LmRhdGU9PT1uLmdldERhdGUoKX19LDk0MDMwOihlLHQsbik9PntuLmQodCx7b3c6KCk9Pmksc186KCk9PnN9KSxPYmplY3QuZnJlZXplKHt9KTtjb25zdCByPVtdO2Z1bmN0aW9uIGkoKXtyZXR1cm4gcn1PYmplY3QuZnJlZXplKHIpO2NvbnN0IG89bmV3IFNldDtPYmplY3QuZnJlZXplKG8pO2NvbnN0IGE9bmV3IE1hcDtmdW5jdGlvbiBzKCl7cmV0dXJuIGF9T2JqZWN0LmZyZWV6ZShhKX0sMzE5NDE6KGUsdCxuKT0+e24uZCh0LHt5OigpPT5pfSk7Y2xhc3Mgcntfc3Vic2NyaXB0aW9ucz1uZXcgU2V0O25leHQoZSl7Zm9yKGNvbnN0IHQgb2YgdGhpcy5fc3Vic2NyaXB0aW9ucyl0KGUpfXN1YnNjcmliZShlKXtyZXR1cm4gdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoZSksKCk9PnRoaXMuX3N1YnNjcmlwdGlvbnMuZGVsZXRlKGUpfX1jbGFzcyBpe19ldmVudD1uZXcgcjtjb25zdHJ1Y3RvcihlKXt0aGlzLl92YWx1ZT1lfW5leHQoZSl7dGhpcy5fdmFsdWU9ZSx0aGlzLl9ldmVudC5uZXh0KGUpfWdldEN1cnJlbnRWYWx1ZT0oKT0+dGhpcy5fdmFsdWU7c3Vic2NyaWJlPWU9PnRoaXMuX2V2ZW50LnN1YnNjcmliZShlKX19LDMzNjc6KGUsdCxuKT0+e24uZCh0LHtGOigpPT5yfSk7Y29uc3Qgcj1cInVuZGVmaW5lZFwiIT10eXBlb2YgU2VydmljZVdvcmtlckdsb2JhbFNjb3BlJiZzZWxmIGluc3RhbmNlb2YgU2VydmljZVdvcmtlckdsb2JhbFNjb3BlP1wic2VydmljZV93b3JrZXJcIjpcInVuZGVmaW5lZFwiIT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZT9cIndlYl93b3JrZXJcIjpcIm1haW5cIn0sOTg4MjE6KGUsdCxuKT0+e24uZCh0LHtqOigpPT5vfSk7dmFyIHI9big2NzI5NCksaT1uKDY5NzI5KTtmdW5jdGlvbiBvKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KHQ+MT90LTE6MCksbz0xO288dDtvKyspbltvLTFdPWFyZ3VtZW50c1tvXTtjb25zdCBhPSgwLHIudXNlTWVtbykoKCgpPT5lKC4uLm4pKSxuKTtyZXR1cm4oMCxpLm8pKGEpfX0sODA1NTA6KGUsdCxuKT0+e24uZCh0LHtRZTooKT0+byxqOTooKT0+cix5ODooKT0+aX0pO2NvbnN0IHI9ZT0+ZS53YXNtLm1vZHVsZT8ucmVmLGk9ZT0+ZS53YXNtLmZhdGFsRXJyb3Isbz1lPT5lLndhc20ubG9nRmF0YWxFcnJvcn0sNjE5OTI6KGUsdCxuKT0+e24uZCh0LHtDSjooKT0+byxLZDooKT0+YSxvZjooKT0+aX0pO3ZhciByPW4oNjkzMDApO2NsYXNzIGkgZXh0ZW5kcyByLnl7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlKSx0aGlzLm5hbWU9XCJVbnN1cHBvcnRlZE1lc3NhZ2VFcnJvclwiLHRoaXMubWVzc2FnZVR5cGU9dH19Y2xhc3MgbyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUsdCxuKXtzdXBlcihlKSx0aGlzLm5hbWU9XCJJbnZhbGlkTWVkaWFFcnJvclwiLHRoaXMud2lkdGg9bix0aGlzLmhlaWdodD10fX1jbGFzcyBhIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSx0LG4pe3N1cGVyKGUpLHRoaXMubmFtZT1ufHxcIk1lZGlhRXhpZkVycm9yXCIsdGhpcy5mYWlsZWRTdGVwPXR9fX0sMTg1NDc6KGUsdCxuKT0+e24uZCh0LHtTOigpPT5pLGw6KCk9Pm99KTt2YXIgcj1uKDU4ODYxKTtmdW5jdGlvbiBpKGUsdCxuKXtpZihlLmNvbnZlcnNhdGlvblR5cGU9PT1yLmkxLk9ORU9OT05FKXJldHVybiB0PT09bj9cIiNGMjNDNTdcIjpcIiMwRUFERkZcIjtjb25zdCBpPWUucGFydGljaXBhbnRzLmZpbmQoKGU9PmUucGFydGljaXBhbnRJZD09PXQpKTtyZXR1cm4gaT9vKGkuY29sb3IpOlwiIzg4OFwifWZ1bmN0aW9uIG8oZSl7cmV0dXJuYCMkeygxNjc3NzIxNSZlKS50b1N0cmluZygxNikucGFkU3RhcnQoNixcIjBcIil9YH19LDQzOTgwOihlLHQsbik9PntuLmQodCx7czQ6KCk9Pm9lLFkwOigpPT4kLHNkOigpPT5pZX0pO3ZhciByPW4oOTM2NTApLGk9big0NTM2Myksbz1uLm4oaSksYT1uKDkxMTMyKSxzPW4oOTc3ODIpLGM9bi5uKHMpLGw9big2NzI5NCksdT1uKDgyNjQ0KSxkPW4oODgyMjIpLGY9big3MDY1NSkscD1uKDc0ODA2KSxtPW4oNjgwKSxoPW4oMjU2ODcpLHY9bigxNjI4NCksZz1uKDM5OTQzKTtmdW5jdGlvbiB5KGUsdCl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLnJlZHVjZSgoZnVuY3Rpb24obixyKXtyZXR1cm4gbltyXT0oMCxmLl9fYXNzaWduKSh7dGltZVpvbmU6dH0sZVtyXSksbn0pLHt9KX1mdW5jdGlvbiBFKGUsdCl7cmV0dXJuIE9iamVjdC5rZXlzKCgwLGYuX19hc3NpZ24pKCgwLGYuX19hc3NpZ24pKHt9LGUpLHQpKS5yZWR1Y2UoKGZ1bmN0aW9uKG4scil7cmV0dXJuIG5bcl09KDAsZi5fX2Fzc2lnbikoKDAsZi5fX2Fzc2lnbikoe30sZVtyXXx8e30pLHRbcl18fHt9KSxufSkse30pfWZ1bmN0aW9uIF8oZSx0KXtpZighdClyZXR1cm4gZTt2YXIgbj12LkMuZm9ybWF0cztyZXR1cm4oMCxmLl9fYXNzaWduKSgoMCxmLl9fYXNzaWduKSgoMCxmLl9fYXNzaWduKSh7fSxuKSxlKSx7ZGF0ZTpFKHkobi5kYXRlLHQpLHkoZS5kYXRlfHx7fSx0KSksdGltZTpFKHkobi50aW1lLHQpLHkoZS50aW1lfHx7fSx0KSl9KX12YXIgST1mdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPWUubG9jYWxlLGE9ZS5mb3JtYXRzLHM9ZS5tZXNzYWdlcyxjPWUuZGVmYXVsdExvY2FsZSxsPWUuZGVmYXVsdEZvcm1hdHMsdT1lLmZhbGxiYWNrT25FbXB0eVN0cmluZyxwPWUub25FcnJvcixtPWUudGltZVpvbmUsdj1lLmRlZmF1bHRSaWNoVGV4dEVsZW1lbnRzO3ZvaWQgMD09PW4mJihuPXtpZDpcIlwifSk7dmFyIHk9bi5pZCxFPW4uZGVmYXVsdE1lc3NhZ2U7KDAsaC5rRykoISF5LFwiW0Bmb3JtYXRqcy9pbnRsXSBBbiBgaWRgIG11c3QgYmUgcHJvdmlkZWQgdG8gZm9ybWF0IGEgbWVzc2FnZS4gWW91IGNhbiBlaXRoZXI6XFxuMS4gQ29uZmlndXJlIHlvdXIgYnVpbGQgdG9vbGNoYWluIHdpdGggW2JhYmVsLXBsdWdpbi1mb3JtYXRqc10oaHR0cHM6Ly9mb3JtYXRqcy5pby9kb2NzL3Rvb2xpbmcvYmFiZWwtcGx1Z2luKVxcbm9yIFtAZm9ybWF0anMvdHMtdHJhbnNmb3JtZXJdKGh0dHBzOi8vZm9ybWF0anMuaW8vZG9jcy90b29saW5nL3RzLXRyYW5zZm9ybWVyKSBPUlxcbjIuIENvbmZpZ3VyZSB5b3VyIGBlc2xpbnRgIGNvbmZpZyB0byBpbmNsdWRlIFtlc2xpbnQtcGx1Z2luLWZvcm1hdGpzXShodHRwczovL2Zvcm1hdGpzLmlvL2RvY3MvdG9vbGluZy9saW50ZXIjZW5mb3JjZS1pZClcXG50byBhdXRvZml4IHRoaXMgaXNzdWVcIik7dmFyIEk9U3RyaW5nKHkpLFM9cyYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsSSkmJnNbSV07aWYoQXJyYXkuaXNBcnJheShTKSYmMT09PVMubGVuZ3RoJiZTWzBdLnR5cGU9PT1nLndELmxpdGVyYWwpcmV0dXJuIFNbMF0udmFsdWU7aWYoIXImJlMmJlwic3RyaW5nXCI9PXR5cGVvZiBTJiYhdilyZXR1cm4gUy5yZXBsYWNlKC8nXFx7KC4qPylcXH0nL2dpLFwieyQxfVwiKTtpZihyPSgwLGYuX19hc3NpZ24pKCgwLGYuX19hc3NpZ24pKHt9LHYpLHJ8fHt9KSxhPV8oYSxtKSxsPV8obCxtKSwhUyl7aWYoITE9PT11JiZcIlwiPT09UylyZXR1cm4gUztpZigoIUV8fG8mJm8udG9Mb3dlckNhc2UoKSE9PWMudG9Mb3dlckNhc2UoKSkmJnAobmV3IGQuJDYobixvKSksRSl0cnl7cmV0dXJuIHQuZ2V0TWVzc2FnZUZvcm1hdChFLGMsbCxpKS5mb3JtYXQocil9Y2F0Y2goZSl7cmV0dXJuIHAobmV3IGQuWDkoJ0Vycm9yIGZvcm1hdHRpbmcgZGVmYXVsdCBtZXNzYWdlIGZvcjogXCInLmNvbmNhdChJLCdcIiwgcmVuZGVyaW5nIGRlZmF1bHQgbWVzc2FnZSB2ZXJiYXRpbScpLG8sbixlKSksXCJzdHJpbmdcIj09dHlwZW9mIEU/RTpJfXJldHVybiBJfXRyeXtyZXR1cm4gdC5nZXRNZXNzYWdlRm9ybWF0KFMsbyxhLCgwLGYuX19hc3NpZ24pKHtmb3JtYXR0ZXJzOnR9LGl8fHt9KSkuZm9ybWF0KHIpfWNhdGNoKGUpe3AobmV3IGQuWDkoJ0Vycm9yIGZvcm1hdHRpbmcgbWVzc2FnZTogXCInLmNvbmNhdChJLCdcIiwgdXNpbmcgJykuY29uY2F0KEU/XCJkZWZhdWx0IG1lc3NhZ2VcIjpcImlkXCIsXCIgYXMgZmFsbGJhY2suXCIpLG8sbixlKSl9aWYoRSl0cnl7cmV0dXJuIHQuZ2V0TWVzc2FnZUZvcm1hdChFLGMsbCxpKS5mb3JtYXQocil9Y2F0Y2goZSl7cChuZXcgZC5YOSgnRXJyb3IgZm9ybWF0dGluZyB0aGUgZGVmYXVsdCBtZXNzYWdlIGZvcjogXCInLmNvbmNhdChJLCdcIiwgcmVuZGVyaW5nIG1lc3NhZ2UgdmVyYmF0aW0nKSxvLG4sZSkpfXJldHVyblwic3RyaW5nXCI9PXR5cGVvZiBTP1M6XCJzdHJpbmdcIj09dHlwZW9mIEU/RTpJfSxTPVtcInN0eWxlXCIsXCJjdXJyZW5jeVwiLFwiY3VycmVuY3lEaXNwbGF5XCIsXCJ1bml0XCIsXCJ1bml0RGlzcGxheVwiLFwidXNlR3JvdXBpbmdcIixcIm1pbmltdW1JbnRlZ2VyRGlnaXRzXCIsXCJtaW5pbXVtRnJhY3Rpb25EaWdpdHNcIixcIm1heGltdW1GcmFjdGlvbkRpZ2l0c1wiLFwibWluaW11bVNpZ25pZmljYW50RGlnaXRzXCIsXCJtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHNcIixcImNvbXBhY3REaXNwbGF5XCIsXCJjdXJyZW5jeURpc3BsYXlcIixcImN1cnJlbmN5U2lnblwiLFwibm90YXRpb25cIixcInNpZ25EaXNwbGF5XCIsXCJ1bml0XCIsXCJ1bml0RGlzcGxheVwiLFwibnVtYmVyaW5nU3lzdGVtXCJdO2Z1bmN0aW9uIGIoZSx0LG4pe3ZhciByPWUubG9jYWxlLGk9ZS5mb3JtYXRzLG89ZS5vbkVycm9yO3ZvaWQgMD09PW4mJihuPXt9KTt2YXIgYT1uLmZvcm1hdCxzPWEmJigwLHUuVEIpKGksXCJudW1iZXJcIixhLG8pfHx7fTtyZXR1cm4gdChyLCgwLHUuTDYpKG4sUyxzKSl9ZnVuY3Rpb24gVChlLHQsbixyKXt2b2lkIDA9PT1yJiYocj17fSk7dHJ5e3JldHVybiBiKGUsdCxyKS5mb3JtYXQobil9Y2F0Y2godCl7ZS5vbkVycm9yKG5ldyBkLlFlKFwiRXJyb3IgZm9ybWF0dGluZyBudW1iZXIuXCIsZS5sb2NhbGUsdCkpfXJldHVybiBTdHJpbmcobil9ZnVuY3Rpb24gQyhlLHQsbixyKXt2b2lkIDA9PT1yJiYocj17fSk7dHJ5e3JldHVybiBiKGUsdCxyKS5mb3JtYXRUb1BhcnRzKG4pfWNhdGNoKHQpe2Uub25FcnJvcihuZXcgZC5RZShcIkVycm9yIGZvcm1hdHRpbmcgbnVtYmVyLlwiLGUubG9jYWxlLHQpKX1yZXR1cm5bXX12YXIgQT1uKDExMDUwKSxSPVtcIm51bWVyaWNcIixcInN0eWxlXCJdO2Z1bmN0aW9uIGsoZSx0LG4scixpKXt2b2lkIDA9PT1pJiYoaT17fSkscnx8KHI9XCJzZWNvbmRcIiksSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXR8fGUub25FcnJvcihuZXcgQS51XygnSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50LlxcblRyeSBwb2x5ZmlsbGluZyBpdCB1c2luZyBcIkBmb3JtYXRqcy9pbnRsLXJlbGF0aXZldGltZWZvcm1hdFwiXFxuJyxBLmpLLk1JU1NJTkdfSU5UTF9BUEkpKTt0cnl7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLmxvY2FsZSxpPWUuZm9ybWF0cyxvPWUub25FcnJvcjt2b2lkIDA9PT1uJiYobj17fSk7dmFyIGE9bi5mb3JtYXQscz0hIWEmJigwLHUuVEIpKGksXCJyZWxhdGl2ZVwiLGEsbyl8fHt9O3JldHVybiB0KHIsKDAsdS5MNikobixSLHMpKX0oZSx0LGkpLmZvcm1hdChuLHIpfWNhdGNoKHQpe2Uub25FcnJvcihuZXcgZC5RZShcIkVycm9yIGZvcm1hdHRpbmcgcmVsYXRpdmUgdGltZS5cIixlLmxvY2FsZSx0KSl9cmV0dXJuIFN0cmluZyhuKX12YXIgTz1bXCJmb3JtYXRNYXRjaGVyXCIsXCJ0aW1lWm9uZVwiLFwiaG91cjEyXCIsXCJ3ZWVrZGF5XCIsXCJlcmFcIixcInllYXJcIixcIm1vbnRoXCIsXCJkYXlcIixcImhvdXJcIixcIm1pbnV0ZVwiLFwic2Vjb25kXCIsXCJ0aW1lWm9uZU5hbWVcIixcImhvdXJDeWNsZVwiLFwiZGF0ZVN0eWxlXCIsXCJ0aW1lU3R5bGVcIixcImNhbGVuZGFyXCIsXCJudW1iZXJpbmdTeXN0ZW1cIixcImZyYWN0aW9uYWxTZWNvbmREaWdpdHNcIl07ZnVuY3Rpb24gTihlLHQsbixyKXt2YXIgaT1lLmxvY2FsZSxvPWUuZm9ybWF0cyxhPWUub25FcnJvcixzPWUudGltZVpvbmU7dm9pZCAwPT09ciYmKHI9e30pO3ZhciBjPXIuZm9ybWF0LGw9KDAsZi5fX2Fzc2lnbikoKDAsZi5fX2Fzc2lnbikoe30scyYme3RpbWVab25lOnN9KSxjJiYoMCx1LlRCKShvLHQsYyxhKSksZD0oMCx1Lkw2KShyLE8sbCk7cmV0dXJuXCJ0aW1lXCIhPT10fHxkLmhvdXJ8fGQubWludXRlfHxkLnNlY29uZHx8ZC50aW1lU3R5bGV8fGQuZGF0ZVN0eWxlfHwoZD0oMCxmLl9fYXNzaWduKSgoMCxmLl9fYXNzaWduKSh7fSxkKSx7aG91cjpcIm51bWVyaWNcIixtaW51dGU6XCJudW1lcmljXCJ9KSksbihpLGQpfWZ1bmN0aW9uIHcoZSx0KXtmb3IodmFyIG49W10scj0yO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspbltyLTJdPWFyZ3VtZW50c1tyXTt2YXIgaT1uWzBdLG89blsxXSxhPXZvaWQgMD09PW8/e306byxzPVwic3RyaW5nXCI9PXR5cGVvZiBpP25ldyBEYXRlKGl8fDApOmk7dHJ5e3JldHVybiBOKGUsXCJkYXRlXCIsdCxhKS5mb3JtYXQocyl9Y2F0Y2godCl7ZS5vbkVycm9yKG5ldyBkLlFlKFwiRXJyb3IgZm9ybWF0dGluZyBkYXRlLlwiLGUubG9jYWxlLHQpKX1yZXR1cm4gU3RyaW5nKHMpfWZ1bmN0aW9uIEQoZSx0KXtmb3IodmFyIG49W10scj0yO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspbltyLTJdPWFyZ3VtZW50c1tyXTt2YXIgaT1uWzBdLG89blsxXSxhPXZvaWQgMD09PW8/e306byxzPVwic3RyaW5nXCI9PXR5cGVvZiBpP25ldyBEYXRlKGl8fDApOmk7dHJ5e3JldHVybiBOKGUsXCJ0aW1lXCIsdCxhKS5mb3JtYXQocyl9Y2F0Y2godCl7ZS5vbkVycm9yKG5ldyBkLlFlKFwiRXJyb3IgZm9ybWF0dGluZyB0aW1lLlwiLGUubG9jYWxlLHQpKX1yZXR1cm4gU3RyaW5nKHMpfWZ1bmN0aW9uIFAoZSx0KXtmb3IodmFyIG49W10scj0yO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspbltyLTJdPWFyZ3VtZW50c1tyXTt2YXIgaT1uWzBdLG89blsxXSxhPW5bMl0scz12b2lkIDA9PT1hP3t9OmEsYz1lLnRpbWVab25lLGw9ZS5sb2NhbGUsZj1lLm9uRXJyb3IscD0oMCx1Lkw2KShzLE8sYz97dGltZVpvbmU6Y306e30pO3RyeXtyZXR1cm4gdChsLHApLmZvcm1hdFJhbmdlKGksbyl9Y2F0Y2godCl7ZihuZXcgZC5RZShcIkVycm9yIGZvcm1hdHRpbmcgZGF0ZSB0aW1lIHJhbmdlLlwiLGUubG9jYWxlLHQpKX1yZXR1cm4gU3RyaW5nKGkpfWZ1bmN0aW9uIE0oZSx0KXtmb3IodmFyIG49W10scj0yO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspbltyLTJdPWFyZ3VtZW50c1tyXTt2YXIgaT1uWzBdLG89blsxXSxhPXZvaWQgMD09PW8/e306byxzPVwic3RyaW5nXCI9PXR5cGVvZiBpP25ldyBEYXRlKGl8fDApOmk7dHJ5e3JldHVybiBOKGUsXCJkYXRlXCIsdCxhKS5mb3JtYXRUb1BhcnRzKHMpfWNhdGNoKHQpe2Uub25FcnJvcihuZXcgZC5RZShcIkVycm9yIGZvcm1hdHRpbmcgZGF0ZS5cIixlLmxvY2FsZSx0KSl9cmV0dXJuW119ZnVuY3Rpb24gTChlLHQpe2Zvcih2YXIgbj1bXSxyPTI7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyluW3ItMl09YXJndW1lbnRzW3JdO3ZhciBpPW5bMF0sbz1uWzFdLGE9dm9pZCAwPT09bz97fTpvLHM9XCJzdHJpbmdcIj09dHlwZW9mIGk/bmV3IERhdGUoaXx8MCk6aTt0cnl7cmV0dXJuIE4oZSxcInRpbWVcIix0LGEpLmZvcm1hdFRvUGFydHMocyl9Y2F0Y2godCl7ZS5vbkVycm9yKG5ldyBkLlFlKFwiRXJyb3IgZm9ybWF0dGluZyB0aW1lLlwiLGUubG9jYWxlLHQpKX1yZXR1cm5bXX12YXIgVT1bXCJ0eXBlXCJdO2Z1bmN0aW9uIHgoZSx0LG4scil7dmFyIGk9ZS5sb2NhbGUsbz1lLm9uRXJyb3I7dm9pZCAwPT09ciYmKHI9e30pLEludGwuUGx1cmFsUnVsZXN8fG8obmV3IEEudV8oJ0ludGwuUGx1cmFsUnVsZXMgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50LlxcblRyeSBwb2x5ZmlsbGluZyBpdCB1c2luZyBcIkBmb3JtYXRqcy9pbnRsLXBsdXJhbHJ1bGVzXCJcXG4nLEEuaksuTUlTU0lOR19JTlRMX0FQSSkpO3ZhciBhPSgwLHUuTDYpKHIsVSk7dHJ5e3JldHVybiB0KGksYSkuc2VsZWN0KG4pfWNhdGNoKGUpe28obmV3IGQuUWUoXCJFcnJvciBmb3JtYXR0aW5nIHBsdXJhbC5cIixpLGUpKX1yZXR1cm5cIm90aGVyXCJ9dmFyIEY9W1widHlwZVwiLFwic3R5bGVcIl0sQj1EYXRlLm5vdygpO2Z1bmN0aW9uIFYoZSx0LG4scil7dm9pZCAwPT09ciYmKHI9e30pO3ZhciBpPUcoZSx0LG4scikucmVkdWNlKChmdW5jdGlvbihlLHQpe3ZhciBuPXQudmFsdWU7cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIG4/ZS5wdXNoKG4pOlwic3RyaW5nXCI9PXR5cGVvZiBlW2UubGVuZ3RoLTFdP2VbZS5sZW5ndGgtMV0rPW46ZS5wdXNoKG4pLGV9KSxbXSk7cmV0dXJuIDE9PT1pLmxlbmd0aD9pWzBdOjA9PT1pLmxlbmd0aD9cIlwiOml9ZnVuY3Rpb24gRyhlLHQsbixyKXt2YXIgaT1lLmxvY2FsZSxvPWUub25FcnJvcjt2b2lkIDA9PT1yJiYocj17fSksSW50bC5MaXN0Rm9ybWF0fHxvKG5ldyBBLnVfKCdJbnRsLkxpc3RGb3JtYXQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50LlxcblRyeSBwb2x5ZmlsbGluZyBpdCB1c2luZyBcIkBmb3JtYXRqcy9pbnRsLWxpc3Rmb3JtYXRcIlxcbicsQS5qSy5NSVNTSU5HX0lOVExfQVBJKSk7dmFyIGE9KDAsdS5MNikocixGKTt0cnl7dmFyIHM9e30sYz1uLm1hcCgoZnVuY3Rpb24oZSx0KXtpZihcIm9iamVjdFwiPT10eXBlb2YgZSl7dmFyIG49ZnVuY3Rpb24oZSl7cmV0dXJuXCJcIi5jb25jYXQoQixcIl9cIikuY29uY2F0KGUsXCJfXCIpLmNvbmNhdChCKX0odCk7cmV0dXJuIHNbbl09ZSxufXJldHVybiBTdHJpbmcoZSl9KSk7cmV0dXJuIHQoaSxhKS5mb3JtYXRUb1BhcnRzKGMpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuXCJsaXRlcmFsXCI9PT1lLnR5cGU/ZTooMCxmLl9fYXNzaWduKSgoMCxmLl9fYXNzaWduKSh7fSxlKSx7dmFsdWU6c1tlLnZhbHVlXXx8ZS52YWx1ZX0pfSkpfWNhdGNoKGUpe28obmV3IGQuUWUoXCJFcnJvciBmb3JtYXR0aW5nIGxpc3QuXCIsaSxlKSl9cmV0dXJuIG59dmFyIEg9W1wic3R5bGVcIixcInR5cGVcIixcImZhbGxiYWNrXCIsXCJsYW5ndWFnZURpc3BsYXlcIl07ZnVuY3Rpb24gVyhlLHQsbixyKXt2YXIgaT1lLmxvY2FsZSxvPWUub25FcnJvcjtJbnRsLkRpc3BsYXlOYW1lc3x8byhuZXcgQS51XygnSW50bC5EaXNwbGF5TmFtZXMgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50LlxcblRyeSBwb2x5ZmlsbGluZyBpdCB1c2luZyBcIkBmb3JtYXRqcy9pbnRsLWRpc3BsYXluYW1lc1wiXFxuJyxBLmpLLk1JU1NJTkdfSU5UTF9BUEkpKTt2YXIgYT0oMCx1Lkw2KShyLEgpO3RyeXtyZXR1cm4gdChpLGEpLm9mKG4pfWNhdGNoKGUpe28obmV3IGQuUWUoXCJFcnJvciBmb3JtYXR0aW5nIGRpc3BsYXkgbmFtZS5cIixpLGUpKX19dmFyIGo9big2MTA5Mik7ZnVuY3Rpb24gWihlKXtyZXR1cm57bG9jYWxlOmUubG9jYWxlLHRpbWVab25lOmUudGltZVpvbmUsZmFsbGJhY2tPbkVtcHR5U3RyaW5nOmUuZmFsbGJhY2tPbkVtcHR5U3RyaW5nLGZvcm1hdHM6ZS5mb3JtYXRzLHRleHRDb21wb25lbnQ6ZS50ZXh0Q29tcG9uZW50LG1lc3NhZ2VzOmUubWVzc2FnZXMsZGVmYXVsdExvY2FsZTplLmRlZmF1bHRMb2NhbGUsZGVmYXVsdEZvcm1hdHM6ZS5kZWZhdWx0Rm9ybWF0cyxvbkVycm9yOmUub25FcnJvcixvbldhcm46ZS5vbldhcm4sd3JhcFJpY2hUZXh0Q2h1bmtzSW5GcmFnbWVudDplLndyYXBSaWNoVGV4dENodW5rc0luRnJhZ21lbnQsZGVmYXVsdFJpY2hUZXh0RWxlbWVudHM6ZS5kZWZhdWx0UmljaFRleHRFbGVtZW50c319ZnVuY3Rpb24geihlKXtyZXR1cm4gZT9PYmplY3Qua2V5cyhlKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsbil7dmFyIHI9ZVtuXTtyZXR1cm4gdFtuXT0oMCxqLkd0KShyKT8oMCxtLmR0KShyKTpyLHR9KSx7fSk6ZX12YXIgSz1mdW5jdGlvbihlLHQsbixyKXtmb3IodmFyIGk9W10sbz00O288YXJndW1lbnRzLmxlbmd0aDtvKyspaVtvLTRdPWFyZ3VtZW50c1tvXTt2YXIgYT16KHIpLHM9SS5hcHBseSh2b2lkIDAsKDAsZi5fX3NwcmVhZEFycmF5KShbZSx0LG4sYV0saSwhMSkpO3JldHVybiBBcnJheS5pc0FycmF5KHMpP2wuQ2hpbGRyZW4udG9BcnJheShzKTpzfSxZPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5kZWZhdWx0UmljaFRleHRFbGVtZW50cyxyPSgwLGYuX19yZXN0KShlLFtcImRlZmF1bHRSaWNoVGV4dEVsZW1lbnRzXCJdKSxpPXoobiksbz1mdW5jdGlvbihlLHQpe3ZhciBuPSgwLHUuYXgpKHQpLHI9KDAsZi5fX2Fzc2lnbikoKDAsZi5fX2Fzc2lnbikoe30sdS5aMCksZSksaT1yLmxvY2FsZSxvPXIuZGVmYXVsdExvY2FsZSxhPXIub25FcnJvcjtyZXR1cm4gaT8hSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKGkpLmxlbmd0aCYmYT9hKG5ldyBkLmdiKCdNaXNzaW5nIGxvY2FsZSBkYXRhIGZvciBsb2NhbGU6IFwiJy5jb25jYXQoaSwnXCIgaW4gSW50bC5OdW1iZXJGb3JtYXQuIFVzaW5nIGRlZmF1bHQgbG9jYWxlOiBcIicpLmNvbmNhdChvLCdcIiBhcyBmYWxsYmFjay4gU2VlIGh0dHBzOi8vZm9ybWF0anMuaW8vZG9jcy9yZWFjdC1pbnRsI3J1bnRpbWUtcmVxdWlyZW1lbnRzIGZvciBtb3JlIGRldGFpbHMnKSkpOiFJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihpKS5sZW5ndGgmJmEmJmEobmV3IGQuZ2IoJ01pc3NpbmcgbG9jYWxlIGRhdGEgZm9yIGxvY2FsZTogXCInLmNvbmNhdChpLCdcIiBpbiBJbnRsLkRhdGVUaW1lRm9ybWF0LiBVc2luZyBkZWZhdWx0IGxvY2FsZTogXCInKS5jb25jYXQobywnXCIgYXMgZmFsbGJhY2suIFNlZSBodHRwczovL2Zvcm1hdGpzLmlvL2RvY3MvcmVhY3QtaW50bCNydW50aW1lLXJlcXVpcmVtZW50cyBmb3IgbW9yZSBkZXRhaWxzJykpKTooYSYmYShuZXcgZC5PVignXCJsb2NhbGVcIiB3YXMgbm90IGNvbmZpZ3VyZWQsIHVzaW5nIFwiJy5jb25jYXQobywnXCIgYXMgZmFsbGJhY2suIFNlZSBodHRwczovL2Zvcm1hdGpzLmlvL2RvY3MvcmVhY3QtaW50bC9hcGkjaW50bHNoYXBlIGZvciBtb3JlIGRldGFpbHMnKSkpLHIubG9jYWxlPXIuZGVmYXVsdExvY2FsZXx8XCJlblwiKSxmdW5jdGlvbihlKXt2YXIgdDtlLm9uV2FybiYmZS5kZWZhdWx0UmljaFRleHRFbGVtZW50cyYmXCJzdHJpbmdcIj09dHlwZW9mKCh0PWUubWVzc2FnZXN8fHt9KT90W09iamVjdC5rZXlzKHQpWzBdXTp2b2lkIDApJiZlLm9uV2FybignW0Bmb3JtYXRqcy9pbnRsXSBcImRlZmF1bHRSaWNoVGV4dEVsZW1lbnRzXCIgd2FzIHNwZWNpZmllZCBidXQgXCJtZXNzYWdlXCIgd2FzIG5vdCBwcmUtY29tcGlsZWQuIFxcblBsZWFzZSBjb25zaWRlciB1c2luZyBcIkBmb3JtYXRqcy9jbGlcIiB0byBwcmUtY29tcGlsZSB5b3VyIG1lc3NhZ2VzIGZvciBwZXJmb3JtYW5jZS5cXG5Gb3IgbW9yZSBkZXRhaWxzIHNlZSBodHRwczovL2Zvcm1hdGpzLmlvL2RvY3MvZ2V0dGluZy1zdGFydGVkL21lc3NhZ2UtZGlzdHJpYnV0aW9uJyl9KHIpLCgwLGYuX19hc3NpZ24pKCgwLGYuX19hc3NpZ24pKHt9LHIpLHtmb3JtYXR0ZXJzOm4sZm9ybWF0TnVtYmVyOlQuYmluZChudWxsLHIsbi5nZXROdW1iZXJGb3JtYXQpLGZvcm1hdE51bWJlclRvUGFydHM6Qy5iaW5kKG51bGwscixuLmdldE51bWJlckZvcm1hdCksZm9ybWF0UmVsYXRpdmVUaW1lOmsuYmluZChudWxsLHIsbi5nZXRSZWxhdGl2ZVRpbWVGb3JtYXQpLGZvcm1hdERhdGU6dy5iaW5kKG51bGwscixuLmdldERhdGVUaW1lRm9ybWF0KSxmb3JtYXREYXRlVG9QYXJ0czpNLmJpbmQobnVsbCxyLG4uZ2V0RGF0ZVRpbWVGb3JtYXQpLGZvcm1hdFRpbWU6RC5iaW5kKG51bGwscixuLmdldERhdGVUaW1lRm9ybWF0KSxmb3JtYXREYXRlVGltZVJhbmdlOlAuYmluZChudWxsLHIsbi5nZXREYXRlVGltZUZvcm1hdCksZm9ybWF0VGltZVRvUGFydHM6TC5iaW5kKG51bGwscixuLmdldERhdGVUaW1lRm9ybWF0KSxmb3JtYXRQbHVyYWw6eC5iaW5kKG51bGwscixuLmdldFBsdXJhbFJ1bGVzKSxmb3JtYXRNZXNzYWdlOkkuYmluZChudWxsLHIsbiksJHQ6SS5iaW5kKG51bGwscixuKSxmb3JtYXRMaXN0OlYuYmluZChudWxsLHIsbi5nZXRMaXN0Rm9ybWF0KSxmb3JtYXRMaXN0VG9QYXJ0czpHLmJpbmQobnVsbCxyLG4uZ2V0TGlzdEZvcm1hdCksZm9ybWF0RGlzcGxheU5hbWU6Vy5iaW5kKG51bGwscixuLmdldERpc3BsYXlOYW1lcyl9KX0oKDAsZi5fX2Fzc2lnbikoKDAsZi5fX2Fzc2lnbikoKDAsZi5fX2Fzc2lnbikoe30sbS5aMCkscikse2RlZmF1bHRSaWNoVGV4dEVsZW1lbnRzOml9KSx0KSxhPXtsb2NhbGU6by5sb2NhbGUsdGltZVpvbmU6by50aW1lWm9uZSxmYWxsYmFja09uRW1wdHlTdHJpbmc6by5mYWxsYmFja09uRW1wdHlTdHJpbmcsZm9ybWF0czpvLmZvcm1hdHMsZGVmYXVsdExvY2FsZTpvLmRlZmF1bHRMb2NhbGUsZGVmYXVsdEZvcm1hdHM6by5kZWZhdWx0Rm9ybWF0cyxtZXNzYWdlczpvLm1lc3NhZ2VzLG9uRXJyb3I6by5vbkVycm9yLGRlZmF1bHRSaWNoVGV4dEVsZW1lbnRzOml9O3JldHVybigwLGYuX19hc3NpZ24pKCgwLGYuX19hc3NpZ24pKHt9LG8pLHtmb3JtYXRNZXNzYWdlOksuYmluZChudWxsLGEsby5mb3JtYXR0ZXJzKSwkdDpLLmJpbmQobnVsbCxhLG8uZm9ybWF0dGVycyl9KX07IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgdD1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHQuY2FjaGU9KDAsdS5TbikoKSx0LnN0YXRlPXtjYWNoZTp0LmNhY2hlLGludGw6WShaKHQucHJvcHMpLHQuY2FjaGUpLHByZXZDb25maWc6Wih0LnByb3BzKX0sdH0oMCxmLl9fZXh0ZW5kcykodCxlKSx0LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcz1mdW5jdGlvbihlLHQpe3ZhciBuPXQucHJldkNvbmZpZyxyPXQuY2FjaGUsaT1aKGUpO3JldHVybigwLG0ud1UpKG4saSk/bnVsbDp7aW50bDpZKGkscikscHJldkNvbmZpZzppfX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuKDAsbS5scSkodGhpcy5zdGF0ZS5pbnRsKSxsLmNyZWF0ZUVsZW1lbnQocC56dCx7dmFsdWU6dGhpcy5zdGF0ZS5pbnRsfSx0aGlzLnByb3BzLmNoaWxkcmVuKX0sdC5kaXNwbGF5TmFtZT1cIkludGxQcm92aWRlclwiLHQuZGVmYXVsdFByb3BzPW0uWjB9KGwuUHVyZUNvbXBvbmVudCk7dmFyIHE9big5MTEyOSksWD1uKDc2NTgwKSxRPW4oNDA0ODkpO2MoKS5nZXRMb2dnZXIoXCJbSW50bFByb3ZpZGVyXVwiKTtjb25zdCBKPSgwLHUuU24pKCk7ZnVuY3Rpb24gJCgpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTooMCxhLmdldExvY2FsZSkoKTtzd2l0Y2goZSl7Y2FzZSBhLkxvY2FsZS5hckFSOmNhc2UgYS5Mb2NhbGUuZGFESzpjYXNlIGEuTG9jYWxlLmRlREU6Y2FzZSBhLkxvY2FsZS5lbkdCOmNhc2UgYS5Mb2NhbGUuZW5VUzpjYXNlIGEuTG9jYWxlLmVzRVM6Y2FzZSBhLkxvY2FsZS5lc01YOmNhc2UgYS5Mb2NhbGUuZmlGSTpjYXNlIGEuTG9jYWxlLmZyRlI6Y2FzZSBhLkxvY2FsZS5oaUlOOmNhc2UgYS5Mb2NhbGUuaXRJVDpjYXNlIGEuTG9jYWxlLmphSlA6Y2FzZSBhLkxvY2FsZS5uYk5POmNhc2UgYS5Mb2NhbGUubmxOTDpjYXNlIGEuTG9jYWxlLnBsUEw6Y2FzZSBhLkxvY2FsZS5wdEJSOmNhc2UgYS5Mb2NhbGUuc3ZTRTpjYXNlIGEuTG9jYWxlLnRyVFI6Y2FzZSBhLkxvY2FsZS56aEhhbnM6cmV0dXJuIGU7Y2FzZSBhLkxvY2FsZS5hcjpyZXR1cm4gYS5Mb2NhbGUuYXJBUjtjYXNlIGEuTG9jYWxlLmVzOnJldHVybiBhLkxvY2FsZS5lc0VTO2RlZmF1bHQ6cmV0dXJuIGEuTG9jYWxlLmVuVVN9fWNvbnN0IGVlPSgwLHEuS20pKCksdGU9KDAsYS5nZXRMb2NhbGUpKCksbmU9XCJub25lXCIhPT1lZT9lZTokKHRlKSxyZT17ZGVmYXVsdExvY2FsZTphLkRFRkFVTFRfTE9DQUxFLG9uRXJyb3I6ZT0+e2lmKGUuY29kZSE9PWQuYmMuTUlTU0lOR19UUkFOU0xBVElPTil0aHJvdyBlO28oKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwibDEwbl9taXNzaW5nX3RyYW5zbGF0aW9uXCIsZGltZW5zaW9uczp7bG9jYWxlOm5lLC4uLmUuZGVzY3JpcHRvcj8uaWQmJntzdHJpbmdfaWQ6ZS5kZXNjcmlwdG9yLmlkfX19KX19O2xldCBpZT1ZKHsuLi5yZSxsb2NhbGU6bmUsbWVzc2FnZXM6e319LEopO2Z1bmN0aW9uIG9lKGUpe2xldHtjaGlsZHJlbjp0fT1lO2NvbnN0W2ksc109KDAsbC51c2VTdGF0ZSkobmUpLFtjLHVdPSgwLGwudXNlU3RhdGUpKGllKTtsZXQgZD0oMCxYLnJwKShxLnB3KTtjb25zdCBmPSgwLFgucnApKHEuS20pO3JldHVybigwLGwudXNlRWZmZWN0KSgoKCk9PntzKFwibm9uZVwiIT09Zj9mOiQoKSl9KSxbZl0pLFwibG9jYWxlXCI9PT1kJiYoZD0oMCxRLmEpKGkpKSwoMCxsLnVzZUVmZmVjdCkoKCgpPT57ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRpcj1kfSksW2RdKSwoMCxsLnVzZUVmZmVjdCkoKCgpPT57aT09PWMubG9jYWxlJiZPYmplY3Qua2V5cyhjLm1lc3NhZ2VzKS5sZW5ndGg+MHx8KGFzeW5jKCk9Pnt0cnl7bygpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJsMTBuX2xvYWRfYXR0ZW1wdFwiLGRpbWVuc2lvbnM6e3Jhd19sb2NhbGU6dGUsbG9jYWxlOml9fSk7Y29uc3QgZT1hd2FpdCBhc3luYyBmdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSBhLkxvY2FsZS5hckFSOnJldHVybiBhd2FpdCBuLmUoNjQwNSkudGhlbihuLnQuYmluZChuLDk2NDA1LDE5KSk7Y2FzZSBhLkxvY2FsZS5kYURLOnJldHVybiBhd2FpdCBuLmUoNzE0OSkudGhlbihuLnQuYmluZChuLDg3MTQ5LDE5KSk7Y2FzZSBhLkxvY2FsZS5kZURFOnJldHVybiBhd2FpdCBuLmUoNjI0MikudGhlbihuLnQuYmluZChuLDYyNDIsMTkpKTtjYXNlIGEuTG9jYWxlLmVuR0I6cmV0dXJuIGF3YWl0IG4uZSgzNDQ0KS50aGVuKG4udC5iaW5kKG4sNTM0NDQsMTkpKTtjYXNlIGEuTG9jYWxlLmVuVVM6cmV0dXJuIGF3YWl0IG4uZSg0NjMwKS50aGVuKG4udC5iaW5kKG4sMTQ2MzAsMTkpKTtjYXNlIGEuTG9jYWxlLmVzRVM6cmV0dXJuIGF3YWl0IG4uZSg5ODkwKS50aGVuKG4udC5iaW5kKG4sODk4OTAsMTkpKTtjYXNlIGEuTG9jYWxlLmVzTVg6cmV0dXJuIGF3YWl0IG4uZSgxODY5KS50aGVuKG4udC5iaW5kKG4sODE4NjksMTkpKTtjYXNlIGEuTG9jYWxlLmZpRkk6cmV0dXJuIGF3YWl0IG4uZSgyNzM1KS50aGVuKG4udC5iaW5kKG4sMjczNSwxOSkpO2Nhc2UgYS5Mb2NhbGUuZnJGUjpyZXR1cm4gYXdhaXQgbi5lKDkxODIpLnRoZW4obi50LmJpbmQobiw0OTE4MiwxOSkpO2Nhc2UgYS5Mb2NhbGUuaGlJTjpyZXR1cm4gYXdhaXQgbi5lKDk3NTIpLnRoZW4obi50LmJpbmQobiwxOTc1MiwxOSkpO2Nhc2UgYS5Mb2NhbGUuaXRJVDpyZXR1cm4gYXdhaXQgbi5lKDU4MTQpLnRoZW4obi50LmJpbmQobiwyNTgxNCwxOSkpO2Nhc2UgYS5Mb2NhbGUuamFKUDpyZXR1cm4gYXdhaXQgbi5lKDg4NzUpLnRoZW4obi50LmJpbmQobiw2ODg3NSwxOSkpO2Nhc2UgYS5Mb2NhbGUubmJOTzpyZXR1cm4gYXdhaXQgbi5lKDc4NjEpLnRoZW4obi50LmJpbmQobiw3ODYxLDE5KSk7Y2FzZSBhLkxvY2FsZS5ubE5MOnJldHVybiBhd2FpdCBuLmUoOTg1MCkudGhlbihuLnQuYmluZChuLDE5ODUwLDE5KSk7Y2FzZSBhLkxvY2FsZS5wbFBMOnJldHVybiBhd2FpdCBuLmUoNTA3KS50aGVuKG4udC5iaW5kKG4sNTA1MDcsMTkpKTtjYXNlIGEuTG9jYWxlLnB0QlI6cmV0dXJuIGF3YWl0IG4uZSg3MzYyKS50aGVuKG4udC5iaW5kKG4sMjczNjIsMTkpKTtjYXNlIGEuTG9jYWxlLnN2U0U6cmV0dXJuIGF3YWl0IG4uZSg1MDE4KS50aGVuKG4udC5iaW5kKG4sNTAxOCwxOSkpO2Nhc2UgYS5Mb2NhbGUudHJUUjpyZXR1cm4gYXdhaXQgbi5lKDQ1NDYpLnRoZW4obi50LmJpbmQobiwzNDU0NiwxOSkpO2Nhc2UgYS5Mb2NhbGUuemhIYW5zOnJldHVybiBhd2FpdCBuLmUoNTQxKS50aGVuKG4udC5iaW5kKG4sNTA1NDEsMTkpKTtjYXNlIGEuTG9jYWxlLmVuUExPQzpyZXR1cm4gYXdhaXQgbi5lKDM2OTQpLnRoZW4obi50LmJpbmQobiwzNjk0LDE5KSl9fShpKTtpZT1ZKHsuLi5yZSxsb2NhbGU6aSxtZXNzYWdlczplfSxKKSx1KGllKX1jYXRjaChlKXtvKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcImwxMG5fbG9hZF9mYWlsdXJlXCIsZGltZW5zaW9uczp7bG9jYWxlOml9fSl9fSkoKX0pLFtpLGNdKSwoMCxyLlopKHAuenQse3ZhbHVlOmN9LHZvaWQgMCx0KX19LDQwNDg5OihlLHQsbik9PntuLmQodCx7YTooKT0+aX0pO3ZhciByPW4oOTExMzIpO2Z1bmN0aW9uIGkoZSl7cmV0dXJuKDAsci5nZXREaXJlY3Rpb25Gb3JMb2NhbGUpKGUpPT09ci5MYW5ndWFnZURpcmVjdGlvbi5SVEw/XCJydGxcIjpcImx0clwifX0sNzY4Nzk6KGUsdCxuKT0+e24uZCh0LHtDVjooKT0+cn0pLG4oNjcyOTQpO2NvbnN0IHI9ZnVuY3Rpb24oKXtsZXQgZSx0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sbj0hMSxyPSExLGk9ITEsbz0hMTtmdW5jdGlvbiBhKCl7bj0hMH1mdW5jdGlvbiBzKCl7cj0hMH1mdW5jdGlvbiBjKCl7ZG9jdW1lbnQuaGFzRm9jdXMoKXx8KGk9ITApfWZ1bmN0aW9uIGwodCl7aWYobyl0aHJvdyBuZXcgRXJyb3IoXCJUaGUgc3RvcCB3YXRjaCBoYXMgYmVlbiBkZXN0cm95ZWQuIEl0IGNhbiBiZSByZXN0YXJ0ZWQuIENyZWF0ZSBhIG5ldyBvbmUuXCIpO249ITEscj0hMSxpPSExLGU9dD8/cGVyZm9ybWFuY2Uubm93KCl9cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJmcmVlemVcIixhKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIixjKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLHMpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLHMpLHQmJmwoKSx7cmVzZXRBbmRTdGFydDpsLGNhcHR1cmVUaW1lOmZ1bmN0aW9uKCl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOlswLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXTtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBFcnJvcihcIlRoZSBzdG9wIHdhdGNoIGhhcyBOT1QgYmVlbiBzdGFydGVkLiBTdGFydCBpdCBmaXJzdCBiZWZvcmUgY2FwdHVyaW5nIHRpbWUuXCIpO2lmKG8pdGhyb3cgbmV3IEVycm9yKFwiVGhlIHN0b3Agd2F0Y2ggaGFzIGJlZW4gZGVzdHJveWVkLiBJdCBjYW4gYmUgdXNlZCB0byBjYXB0dXJlIHRpbWUuIENyZWF0ZSBhIG5ldyBvbmUuXCIpO2NvbnN0IGE9cGVyZm9ybWFuY2Uubm93KCktZTtyZXR1cm57aXNPdXRsaWVyOmE8dFswXXx8YT50WzFdLHRhYkZyb3plbjpuLGxvc3RDb25uZWN0aW9uOnIsbG9zdEZvY3VzOmksZWxhcHNlZDphfX0sZGVzdHJveTpmdW5jdGlvbigpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmcmVlemVcIixhKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJsdXJcIixjKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLHMpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLHMpLG89ITB9fX0oKTtyLnJlc2V0QW5kU3RhcnQoMCl9LDcyNDIzOihlLHQsbik9PntuLmQodCx7UFo6KCk9Pm8sU1M6KCk9PmEsVjE6KCk9Pmksclo6KCk9PnN9KTt2YXIgcj1uKDQ0Nzg1KTtmdW5jdGlvbiBpKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxuPVwiXCI7cmV0dXJuIE9iamVjdC5rZXlzKHQpLmxlbmd0aCYmKG49XCI/XCIrbmV3IFVSTFNlYXJjaFBhcmFtcyh0KS50b1N0cmluZygpKSxlP2AvJHsoMCxyLk1jKShlKX0ke259YDpgLyR7bn1gfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIGU/YCR7aShlKX0/c3RhY2tlZD10cnVlYDpcIi9cIn1jb25zdCBhPVwiLzpjb252b0lkXCIscz1cIi9uZXdcIn0sMTQ5OTg6KGUsdCxuKT0+e24uZCh0LHtvOigpPT5jLHM6KCk9Pmx9KTt2YXIgcj1uKDg5MjUwKSxpPW4oMTI1OTkpLG89big0NDc4NSksYT1uKDI3NzM4KSxzPW4oNzI0MjMpO2Z1bmN0aW9uIGMoKXtjb25zdHtjb252b0lkOmV9PSgwLHIuVU8pKCk7cmV0dXJuIHUoZSl9ZnVuY3Rpb24gbChlKXtjb25zdCB0PWV8fHNlbGYubG9jYXRpb24ucGF0aG5hbWUse2NvbnZvSWQ6bn09KDAsaS5MWCkocy5TUyx0KT8ucGFyYW1zPz97fTtyZXR1cm4gdShuKX1mdW5jdGlvbiB1KGUpe2lmKGUmJigwLGEuWikoZSkpcmV0dXJuKDAsby5PWSkoZSl9fSw1NjA4MzooZSx0LG4pPT57bi5kKHQse0xxOigpPT5zLE1YOigpPT5vLGMzOigpPT5hLHBYOigpPT5jfSk7dmFyIHI9big0MjIzOCksaT1uLm4ocik7bGV0IG89ZnVuY3Rpb24oZSl7cmV0dXJuIGUuU0FGQVJJPVwic2FmYXJpXCIsZS5DSFJPTUU9XCJjaHJvbWVcIixlLklQQUQ9XCJpcGFkb3Nfc2FmXCIsZS5VTktOT1dOPVwidW5rbm93blwiLGV9KHt9KTtjb25zdCBhPSgoKT0+e2xldCBlLHQ7cmV0dXJuKCk9Pnt2YXIgbjtyZXR1cm4oIWV8fHQmJnQhPT1uYXZpZ2F0b3IudXNlckFnZW50KSYmKGU9KG49aSgpKG5hdmlnYXRvci51c2VyQWdlbnQpLG4udWEubWF0Y2goL2Jpbmd8QmluZ3x5YWhvb3xZYWhvb3xnb29nbGV8R29vZ2xlL2kpJiZuLnVhLm1hdGNoKC9ib3R8c2VhcmNofFNlYXJjaC9pKT9cInNlYXJjaF9ib3RcIjpcIkNocm9tZVwiPT09bi5icm93c2VyLm5hbWUmJlwiQW5kcm9pZFwiPT09bi5vcy5uYW1lP1wiYW5kX2NoclwiOlwiRmlyZWZveFwiPT09bi5icm93c2VyLm5hbWUmJlwiQW5kcm9pZFwiPT09bi5vcy5uYW1lP1wiYW5kX2ZmXCI6XCJDaHJvbWVcIj09PW4uYnJvd3Nlci5uYW1lJiZcImlPU1wiPT09bi5vcy5uYW1lfHxcIkNocm9tZVwiPT09bi5icm93c2VyLm5hbWUmJm4udWEuaW5jbHVkZXMoXCJDcmlPU1wiKT9cImlvc19jaHJcIjpcIk1vYmlsZSBTYWZhcmlcIj09PW4uYnJvd3Nlci5uYW1lfHxcIlNhZmFyaVwiPT09bi5icm93c2VyLm5hbWUmJlwiaU9TXCI9PT1uLm9zLm5hbWU/XCJpb3Nfc2FmXCI6XCJTYWZhcmlcIj09PW4uYnJvd3Nlci5uYW1lJiZcInRhYmxldFwiPT09bi5kZXZpY2UudHlwZT9vLklQQUQ6XCJDaHJvbWl1bVwiPT09bi5icm93c2VyLm5hbWV8fFwiQnJhdmVcIj09PW4uYnJvd3Nlci5uYW1lP1wiY2hyb21lXCI6XCJPcGVyYVwiPT09bi5icm93c2VyLm5hbWU/XCJvcGVyYVwiOm4uYnJvd3Nlci5uYW1lPz9cIlwiKS50b0xvd2VyQ2FzZSgpLHQ9bmF2aWdhdG9yLnVzZXJBZ2VudCksZX19KSgpO2Z1bmN0aW9uIHMoKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtjb25zdCBuPWkoKSh0KSxyPW5ldyBNYXA7Zm9yKGNvbnN0IGUgb2ZbXCJjaHJvbWUgMTEzXCIsXCJjaHJvbWUgMTEyXCIsXCJjaHJvbWUgMTExXCIsXCJjaHJvbWUgMTEwXCIsXCJjaHJvbWUgMTA5XCIsXCJjaHJvbWUgMTA4XCIsXCJjaHJvbWUgMTA3XCIsXCJjaHJvbWUgMTA2XCIsXCJjaHJvbWUgMTA1XCIsXCJjaHJvbWUgMTA0XCIsXCJjaHJvbWUgMTAzXCIsXCJjaHJvbWUgMTAyXCIsXCJjaHJvbWUgMTAxXCIsXCJjaHJvbWUgMTAwXCIsXCJjaHJvbWUgOTlcIixcImNocm9tZSA5OFwiLFwiY2hyb21lIDk3XCIsXCJlZGdlIDExM1wiLFwiZWRnZSAxMTJcIixcImVkZ2UgMTExXCIsXCJlZGdlIDExMFwiLFwiZWRnZSAxMDlcIixcImVkZ2UgMTA4XCIsXCJlZGdlIDEwN1wiLFwiZWRnZSAxMDZcIixcImVkZ2UgMTA1XCIsXCJlZGdlIDEwNFwiLFwiZWRnZSAxMDNcIixcImVkZ2UgMTAyXCIsXCJlZGdlIDEwMVwiLFwiZWRnZSAxMDBcIixcImVkZ2UgOTlcIixcImVkZ2UgOThcIixcImVkZ2UgOTdcIixcInNhZmFyaSAxNi40XCIsXCJzYWZhcmkgMTYuM1wiLFwic2FmYXJpIDE2LjJcIixcInNhZmFyaSAxNi4xXCIsXCJzYWZhcmkgMTYuMFwiXSl7Y29uc3QgdD1lLnNwbGl0KC9bLSBdLyk7ci5zZXQodFswXSxNYXRoLm1pbihyLmdldCh0WzBdKXx8OTk5OTk5LHBhcnNlRmxvYXQodFsxXSkpKX1jb25zdCBvPWZ1bmN0aW9uKGUpe2NvbnN0IHQ9YSgpO2lmKFwic2VhcmNoX2JvdFwiPT09dClyZXR1cm4gdDtjb25zdCBuPVwiaW9zX3NhZlwiPT09dD9lLm9zLnZlcnNpb246ZS5icm93c2VyLnZlcnNpb258fGUub3MudmVyc2lvbnx8XCJcIixyPW4/bi5zcGxpdChcIi5cIik6W107Zm9yKDtyLmxlbmd0aD4wOyl7dHJ5e3JldHVybiB0K1wiIFwiK3Iuam9pbihcIi5cIil9Y2F0Y2goZSl7fXIucG9wKCl9fShuKTtpZighbylyZXR1cm57c3VwcG9ydGVkOiExfTtpZihcInNlYXJjaF9ib3RcIj09PW8pcmV0dXJue3N1cHBvcnRlZDohMCxuYW1lOlwiYm90XCJ9O2NvbnN0IHM9by5zcGxpdChcIiBcIiksbD1zWzBdLHU9c1sxXSxkPXIuZ2V0KGwpLGY9e3N1cHBvcnRlZDohMSxuYW1lOmwsdmVyc2lvbjp1fTtyZXR1cm5cInNhZmFyaVwiPT09bCYmKGYubWV0cmljRGltZW5zaW9ucz17d2ViX3B1c2g6U3RyaW5nKGMoKSl9KSxkJiZkPD1wYXJzZUZsb2F0KHUpJiYoZi5zdXBwb3J0ZWQ9ITApLGZ9KDAsbmF2aWdhdG9yLnVzZXJBZ2VudCl9ZnVuY3Rpb24gYygpe3JldHVyblwic2VydmljZVdvcmtlclwiaW4gbmF2aWdhdG9yJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBQdXNoTWFuYWdlcn19LDI4NDQwOihlLHQsbik9PntuLmQodCx7JHU6KCk9PnYsR046KCk9PkUsT1o6KCk9Pl99KTt2YXIgcj1uKDk3NzgyKSxpPW4ubihyKSxvPW4oNjcyOTQpLGE9big2MTY4Myk7Y29uc3Qgcz1uLnArXCJkdy80OGVlMmI0OTdkMzA0NzEyNTBiNC5tcDNcIixjPW4ucCtcImR3LzkyZTUxOTE0NmVjYTBjZDU2Nzk2Lm1wM1wiLGw9bi5wK1wiZHcvNzhmYjYyMDBhNWMwMjI2NDU3ZDYubXAzXCIsdT1uLnArXCJkdy8zNmU4OWIxN2ZlMmE1M2Q1NDM1Ny5tcDRcIixkPW4ucCtcImR3LzIzMjY3YjkzNDIwZGUyYjJmODU2Lm1wNFwiLGY9bi5wK1wiZHcvODgyNzFkNWY0ZjJkMjlkODJiNzcubXAzXCIscD1uLnArXCJkdy9lYzg5Zjc2NjY4NWVjOTNjYzNiMC5tcDNcIixtPW4ucCtcImR3LzU2ZTJhZjE5Nzc1MmM3OGViN2ZlLm1wM1wiO3ZhciBoPW4oODE5MDcpO2koKS5nZXRMb2dnZXIoXCJbU291bmRzXVwiKTt2YXIgdj17TmV3Q2hhdDowLE5ld0NoYXRCZXN0RnJpZW5kOjEsQ2hhdFNlbnQ6MixJbmNvbWluZ0NhbGw6MyxJbmNvbWluZ0NhbGxCZXN0RnJpZW5kOjQsT3V0Z29pbmdDYWxsOjUsT3V0Z29pbmdDYWxsQmVzdEZyaWVuZDo2LENhbGxXYWl0aW5nOjd9O2NvbnN0IGc9bmV3IE1hcChbW3YuTmV3Q2hhdCx7c291cmNlOmwsdm9sdW1lOi41fV0sW3YuTmV3Q2hhdEJlc3RGcmllbmQse3NvdXJjZTpjLHZvbHVtZTouNX1dLFt2LkNoYXRTZW50LHtzb3VyY2U6c31dLFt2LkluY29taW5nQ2FsbCx7c291cmNlOmR9XSxbdi5JbmNvbWluZ0NhbGxCZXN0RnJpZW5kLHtzb3VyY2U6dX1dLFt2Lk91dGdvaW5nQ2FsbCx7c291cmNlOnB9XSxbdi5PdXRnb2luZ0NhbGxCZXN0RnJpZW5kLHtzb3VyY2U6Zn1dLFt2LkNhbGxXYWl0aW5nLHtzb3VyY2U6bX1dXSk7ZnVuY3Rpb24geShlKXtjb25zdCB0PWcuZ2V0KGUpO2lmKCF0KXRocm93IEVycm9yKGBNaXNzaW5nIHNvdW5kIGNvbmZpZyBmb3IgJHtlfWApO2NvbnN0IG49bmV3IEF1ZGlvKHQuc291cmNlKTtyZXR1cm4gdC52b2x1bWUmJihuLnZvbHVtZT10LnZvbHVtZSksbn1mdW5jdGlvbiBFKGUsdCl7Y29uc3Qgbj15KGUpO2Z1bmN0aW9uIHIoKXtuLnBhdXNlKCksbi5jdXJyZW50VGltZT0wLG4uc3JjPVwiXCJ9dD9uLnBsYXkoKS5jYXRjaCgodD0+e3IoKSwoMCxoLlZFKShcInNpbmdsZS1zb3VuZFwiLHQse3NvdW5kOmV9KX0pKTpyKCl9ZnVuY3Rpb24gXyhlKXtjb25zdFt0XT0oMCxhLnhxKSgpO3JldHVybigwLG8udXNlRWZmZWN0KSgoKCk9PntpZih0JiZlKXJldHVybiBmdW5jdGlvbihlKXtjb25zdCB0PXkoZSk7ZnVuY3Rpb24gbigpe3QucGF1c2UoKSx0LmN1cnJlbnRUaW1lPTAsdC5zcmM9XCJcIn1yZXR1cm4gdC5sb29wPSEwLHQucGxheSgpLmNhdGNoKCh0PT57bigpLCgwLGguVkUpKFwibG9vcGluZy1zb3VuZFwiLHQse3NvdW5kOmV9KX0pKSxufShlKX0pLFtlLHRdKX19LDg5NjEzOihlLHQsbik9PntuLmQodCx7RFc6KCk9PmcsVU86KCk9PnYscGM6KCk9Pmh9KTt2YXIgcj1uKDQ1MzYzKSxpPW4ubihyKSxvPW4oOTc3ODIpLGE9bi5uKG8pLHM9big2NzI5NCksYz1uKDM1MDA3KSxsPW4oNzIzMTMpLHU9bigzMTk0MSksZD1uKDY3MTYxKTthKCkuZ2V0TG9nZ2VyKFwiaW5zdGFsbFwiKTtjb25zdCBmPVwicHdhX3Byb21wdF9kaXNtaXNzX2NvdW50XCIscD03LG09bmV3IHUueSh2b2lkIDApO2Z1bmN0aW9uIGgoKXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZWluc3RhbGxwcm9tcHRcIiwoZT0+e2UucHJldmVudERlZmF1bHQoKSxtLm5leHQoZSl9KSl9ZnVuY3Rpb24gdihlLHQpe2koKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwicHdhX2luc3RhbGxfcHJvbXB0X2Zsb3dcIixkaW1lbnNpb25zOnthY3Rpb246ZSxkaXNtaXNzQ291bnQ6U3RyaW5nKHQpfX0pfWZ1bmN0aW9uIGcoKXtjb25zdCBlPSgwLGQudXNlU3Vic2NyaXB0aW9uKShtKSx0PSgwLGwuJG8pKCksW24scl09KDAscy51c2VTdGF0ZSkobnVsbCksW2ksb109KDAscy51c2VTdGF0ZSkoMCk7KDAscy51c2VFZmZlY3QpKCgoKT0+eyFhc3luYyBmdW5jdGlvbigpe2NvbnN0IGU9YXdhaXQgdC5nZXRJdGVtKGYpLG49ZT9wYXJzZUludChlLDEwKTpudWxsO24mJiFpc05hTihuKT8obyhuKSxyKG48cCkpOnIoITApfSgpfSksW3RdKTtjb25zdCBhPW4mJkJvb2xlYW4oZSk7cmV0dXJue2luc3RhbGxQcm9tcHRFdmVudDplLGluc3RhbGw6KCk9PnsoMCxjLkhQKShcIkNMSUNLXCIsXCJGRUVEXCIsXCJQV0FfSU5TVEFMTFwiKSx2KFwiaW5zdGFsbF9jbGlja2VkXCIsaSksZSYmKGUucHJvbXB0KCksZS51c2VyQ2hvaWNlLnRoZW4oKGU9PntcImFjY2VwdGVkXCI9PT1lLm91dGNvbWU/dihcImluc3RhbGxlZFwiLGkpOnYoXCJicm93c2VyX3Byb21wdF9kaXNtaXNzZWRcIixpKSxtLm5leHQodm9pZCAwKX0pKSl9LHNob3dJbnN0YWxsUHJvbXB0OmEsdHJhY2tEaXNtaXNzOmFzeW5jKCk9Pnthd2FpdCB0LnNldEl0ZW0oZixTdHJpbmcoaSsxKSksKDAsYy5IUCkoXCJESVNNSVNTRURcIixcIkZFRURcIixcIlBXQV9JTlNUQUxMXCIpLHYoXCJwcm9tcHRfZGlzbWlzc2VkXCIsaSl9LHByb21wdERpc21pc3NDb3VudDppfX19LDIyNjA4OihlLHQsbik9PntuLmQodCx7ak06KCk9PmEsb286KCk9Pmksd2w6KCk9Pm99KTtjb25zdCByPTEwMCxpPTMwMDtmdW5jdGlvbiBvKGUsdCl7cmV0dXJuIDA9PT10Lmxlbmd0aD97aXNWYWxpZDohMSxlcnJvck1lc3NhZ2U6ZS5mb3JtYXRNZXNzYWdlKHtpZDpcInJ5S2JESFwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiUGxlYXNlIHNlbGVjdCBhIHVzZXIgdG8gc3RhcnQgYSBuZXcgY2hhdC5cIn1dfSl9OnQubGVuZ3RoPnI/e2lzVmFsaWQ6ITEsZXJyb3JNZXNzYWdlOmUuZm9ybWF0TWVzc2FnZSh7aWQ6XCJyaGxMeG1cIixkZWZhdWx0TWVzc2FnZTpbe3R5cGU6MCx2YWx1ZTpcIllvdSBoYXZlIHNlbGVjdGVkIFwifSx7dHlwZToxLHZhbHVlOlwiY3VycmVudE51bWJlck9mVXNlcnNcIn0se3R5cGU6MCx2YWx1ZTpcIiB1c2Vycy4gVGhlIG1heGltdW0gbnVtYmVyIG9mIHVzZXJzIGZvciBhIG5ldyBjaGF0IGlzIFwifSx7dHlwZToxLHZhbHVlOlwiTUFYX05VTUJFUl9PRl9VU0VSU1wifSx7dHlwZTowLHZhbHVlOlwiLlwifV19LHtjdXJyZW50TnVtYmVyT2ZVc2Vyczp0Lmxlbmd0aCxNQVhfTlVNQkVSX09GX1VTRVJTOnJ9KX06e2lzVmFsaWQ6ITB9fWZ1bmN0aW9uIGEoZSx0LG4pe3JldHVybiAwPT09dC5sZW5ndGgmJjA9PT1uLmxlbmd0aD97aXNWYWxpZDohMSxlcnJvck1lc3NhZ2U6ZS5mb3JtYXRNZXNzYWdlKHtpZDpcIkxiWW9jNFwiLGRlZmF1bHRNZXNzYWdlOlt7dHlwZTowLHZhbHVlOlwiUGxlYXNlIHNlbGVjdCBhIHVzZXIgdG8gc2VuZCBhIFNuYXAuXCJ9XX0pfTp7aXNWYWxpZDohMH19fSw0MDQzMTooZSx0LG4pPT57bi5kKHQse1Y6KCk9PmF9KTt2YXIgcj1uKDQ1MzYzKSxpPW4ubihyKSxvPW4oNjkzMDApO2NsYXNzIGEgZXh0ZW5kcyBvLnl7Y29uc3RydWN0b3IoZSl7aSgpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJibG9ja2VkX25vdF92aXNpYmxlXCJ9KSxzdXBlcihlKX19fSwyNDk4OihlLHQsbik9PntuLmQodCx7dDooKT0+cn0pO2NvbnN0IHI9ZT0+L01vYml8aVAoaG9uZXxvZHxhZCl8QW5kcm9pZHxCbGFja0JlcnJ5fElFTW9iaWxlfEtpbmRsZXxOZXRGcm9udHxTaWxrLUFjY2VsZXJhdGVkfChocHd8d2ViKU9TfEZlbm5lY3xNaW5pbW98T3BlcmEgTShvYml8aW5pKXxCbGF6ZXJ8RG9sZmlufERvbHBoaW58U2t5ZmlyZXxadW5lL2kudGVzdChlKX0sNzI3NDk6KGUsdCxuKT0+e24uZCh0LHtWejooKT0+Y30pO3ZhciByPW4oNjUwMTApLGk9big5NjQyMyksbz1uKDk1OTE2KSxhPW4oOTExMzIpLHM9big1NzcyOCk7YXN5bmMgZnVuY3Rpb24gYyhlKXtpZihhd2FpdCBhc3luYyBmdW5jdGlvbigpe2F3YWl0IGFzeW5jIGZ1bmN0aW9uKCl7KDAsci5zaG91bGRQb2x5ZmlsbCkoKSYmYXdhaXQgUHJvbWlzZS5hbGwoW24uZSgxNjkyKSxuLmUoOTA5NyldKS50aGVuKG4uYmluZChuLDcxNjkyKSl9KCksKDAsby5zaG91bGRQb2x5ZmlsbCkoKSYmYXdhaXQgUHJvbWlzZS5hbGwoW24uZSgxOTQyKSxuLmUoOTA5Nyksbi5lKDE4NzEpLG4uZSg5Njc5KV0pLnRoZW4obi5iaW5kKG4sMzE5NDIpKX0oKSwoMCxpLnNob3VsZFBvbHlmaWxsKShlKSlzd2l0Y2goYXdhaXQgUHJvbWlzZS5hbGwoW24uZSg5Myksbi5lKDE4NzEpLG4uZSg4ODI4KV0pLnRoZW4obi5iaW5kKG4sMTAwOTMpKSxlKXtjYXNlIGEuTG9jYWxlLmRhREs6YXdhaXQgbi5lKDk0OSkudGhlbihuLnQuYmluZChuLDQwOTQ5LDIzKSk7YnJlYWs7Y2FzZSBhLkxvY2FsZS5kZURFOmF3YWl0IG4uZSg0OTAzKS50aGVuKG4udC5iaW5kKG4sMzQ5MDMsMjMpKTticmVhaztjYXNlIGEuTG9jYWxlLmVuR0I6YXdhaXQgbi5lKDUzNzgpLnRoZW4obi50LmJpbmQobiw1Mzc4LDIzKSk7YnJlYWs7Y2FzZSBhLkxvY2FsZS5hckFSOmF3YWl0IG4uZSgyNjc2KS50aGVuKG4udC5iaW5kKG4sNTI2NzYsMjMpKTticmVhaztjYXNlIGEuTG9jYWxlLmVuUExPQzpjYXNlIGEuTG9jYWxlLmVuVVM6YXdhaXQgbi5lKDUzNzgpLnRoZW4obi50LmJpbmQobiw1Mzc4LDIzKSk7YnJlYWs7Y2FzZSBhLkxvY2FsZS5lc0VTOmNhc2UgYS5Mb2NhbGUuZXNNWDphd2FpdCBuLmUoNTQ2KS50aGVuKG4udC5iaW5kKG4sNTQ2LDIzKSk7YnJlYWs7Y2FzZSBhLkxvY2FsZS5maUZJOmF3YWl0IG4uZSgyMDQ2KS50aGVuKG4udC5iaW5kKG4sNzIwNDYsMjMpKTticmVhaztjYXNlIGEuTG9jYWxlLmZyRlI6YXdhaXQgbi5lKDEzMSkudGhlbihuLnQuYmluZChuLDgwMTMxLDIzKSk7YnJlYWs7Y2FzZSBhLkxvY2FsZS5pdElUOmF3YWl0IG4uZSgyNDUwKS50aGVuKG4udC5iaW5kKG4sNDI0NTAsMjMpKTticmVhaztjYXNlIGEuTG9jYWxlLmhpSU46YXdhaXQgbi5lKDM1MTQpLnRoZW4obi50LmJpbmQobiw4MzUxNCwyMykpO2JyZWFrO2Nhc2UgYS5Mb2NhbGUuamFKUDphd2FpdCBuLmUoNjMwNikudGhlbihuLnQuYmluZChuLDI2MzA2LDIzKSk7YnJlYWs7Y2FzZSBhLkxvY2FsZS5uYk5POmF3YWl0IG4uZSg1OTI0KS50aGVuKG4udC5iaW5kKG4sNTU1MzQsMjMpKTticmVhaztjYXNlIGEuTG9jYWxlLm5sTkw6YXdhaXQgbi5lKDIwMDgpLnRoZW4obi50LmJpbmQobiwzMjAwOCwyMykpO2JyZWFrO2Nhc2UgYS5Mb2NhbGUucGxQTDphd2FpdCBuLmUoNjIyMykudGhlbihuLnQuYmluZChuLDY2MjIzLDIzKSk7YnJlYWs7Y2FzZSBhLkxvY2FsZS5wdEJSOmF3YWl0IG4uZSg4NTI1KS50aGVuKG4udC5iaW5kKG4sMzg1MjUsMjMpKTticmVhaztjYXNlIGEuTG9jYWxlLnN2U0U6YXdhaXQgbi5lKDc3NjkpLnRoZW4obi50LmJpbmQobiw0Nzc2OSwyMykpO2JyZWFrO2Nhc2UgYS5Mb2NhbGUudHJUUjphd2FpdCBuLmUoNDQ4OSkudGhlbihuLnQuYmluZChuLDM0NDg5LDIzKSk7YnJlYWs7Y2FzZSBhLkxvY2FsZS56aEhhbnM6YXdhaXQgbi5lKDE3NjYpLnRoZW4obi50LmJpbmQobiwzMTc2NiwyMykpO2JyZWFrO2RlZmF1bHQ6KDAscy5aKShlKX19fSw0NDc4NTooZSx0LG4pPT57bi5kKHQseyRwOigpPT5mLEs4OigpPT5kLE1jOigpPT5sLE9ZOigpPT5jLGp5OigpPT5wLHJTOigpPT5tLHhrOigpPT5ofSk7dmFyIHI9big2NzcxOSksaT1uKDM5NTgpO2NvbnN0IG89e307ZnVuY3Rpb24gYShlKXtjb25zdCB0PWwoZSk7cmV0dXJuIG9bdF18fChvW3RdPWUsZS5zdHI9dCxlKX1jb25zdCBzPVtdO2ZvcihsZXQgZT0wO2U8MjU2OysrZSlzLnB1c2goKGUrMjU2KS50b1N0cmluZygxNikuc3Vic3RyKDEpKTtmdW5jdGlvbiBjKGUpe2NvbnN0IHQ9b1tlXTtpZih0KXJldHVybiB0O3RyeXtjb25zdCB0PXtpZDpVaW50OEFycmF5LmZyb20oKDAsci5aKShlKSksc3RyOmV9O3JldHVybiBvW2VdPXQsdH1jYXRjaCh0KXt0aHJvdyB0IGluc3RhbmNlb2YgRXJyb3ImJih0Lm1lc3NhZ2U9YHV1aWRQYXJzZSgpIGZhaWxlZCBvbiAke2V9OiBgK3QubWVzc2FnZSksdH19ZnVuY3Rpb24gbChlKXtpZihlLnN0cilyZXR1cm4gZS5zdHI7dHJ5e3JldHVybigwLGkuWikoZS5pZCl9Y2F0Y2godCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3JldHVybihzW2VbdCswXV0rc1tlW3QrMV1dK3NbZVt0KzJdXStzW2VbdCszXV0rXCItXCIrc1tlW3QrNF1dK3NbZVt0KzVdXStcIi1cIitzW2VbdCs2XV0rc1tlW3QrN11dK1wiLVwiK3NbZVt0KzhdXStzW2VbdCs5XV0rXCItXCIrc1tlW3QrMTBdXStzW2VbdCsxMV1dK3NbZVt0KzEyXV0rc1tlW3QrMTNdXStzW2VbdCsxNF1dK3NbZVt0KzE1XV0pLnRvTG93ZXJDYXNlKCl9KGUuaWQpfX1mdW5jdGlvbiB1KGUpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09T2JqZWN0LnByb3RvdHlwZX1mdW5jdGlvbiBkKGUpe2lmKHUoZSkpe2NvbnN0IHQ9T2JqZWN0LmtleXMoZSk7aWYoMT09PXQubGVuZ3RoJiZcImlkXCI9PT10WzBdfHwyPT09dC5sZW5ndGgmJlwiaWRcIj09PXRbMF0mJlwic3RyXCI9PT10WzFdKXtjb25zdCB0PWUuaWQ7cmV0dXJuIHQgaW5zdGFuY2VvZiBVaW50OEFycmF5JiYxNj09PXQubGVuZ3RofXJldHVybiExfXJldHVybiExfWZ1bmN0aW9uIGYoZSl7cmV0dXJuIGQoZSk/YShlKTooQXJyYXkuaXNBcnJheShlKT9mdW5jdGlvbihlKXtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7Y29uc3Qgbj1lW3RdO2Qobik/ZVt0XT1hKG4pOmYobil9fShlKTplIGluc3RhbmNlb2YgTWFwP2Z1bmN0aW9uKGUpe2NvbnN0IHQ9QXJyYXkuZnJvbShlLmVudHJpZXMoKSk7Zm9yKGNvbnN0IG4gb2YgdCl7bGV0IHQ9blswXTtjb25zdCByPW5bMV07ZCh0KSYmKGUuZGVsZXRlKHQpLHQ9YSh0KSxlLnNldCh0LHIpKSxyJiYoZChyKT9lLnNldCh0LGEocikpOmYocikpfX0oZSk6dShlKSYmZnVuY3Rpb24oZSl7Zm9yKGNvbnN0IHQgaW4gZSl7Y29uc3Qgbj1lW3RdO24mJihkKG4pP2VbdF09YShuKTpmKG4pKX19KGUpLGUpfWFzeW5jIGZ1bmN0aW9uIHAoZSl7cmV0dXJuIG5ldyBQcm9taXNlKCgodCxuKT0+e2UoKGU9PnQoZihlKSkpLG4pfSkpfWZ1bmN0aW9uIG0oZSl7cmV0dXJuIWV8fDA9PT1lLmlkLmxlbmd0aHx8ZS5pZC5ldmVyeSgoZT0+MD09PWUpKX1mdW5jdGlvbiBoKGUpe3JldHVybiBsKGZ1bmN0aW9uKGUpe3JldHVybiBmKHtpZDpuZXcgVWludDhBcnJheShuZXcgQmlnVWludDY0QXJyYXkoW0JpZ0ludChlLmxvd0JpdHMpLEJpZ0ludChlLmhpZ2hCaXRzKV0pLmJ1ZmZlcikucmV2ZXJzZSgpfSl9KGUpKX19LDM3MTQ6KGUsdCxuKT0+e2Z1bmN0aW9uIHIoKXtyZXR1cm5cIlBST0RcIn1uLmQodCx7WjooKT0+cn0pfSw4MTkwNzooZSx0LG4pPT57bi5kKHQse1ZFOigpPT5sLGUkOigpPT5zLG84OigpPT5jfSk7dmFyIHI9big3MTM3MSksaT1uKDQ1MzYzKSxvPW4ubihpKTtmdW5jdGlvbiBhKGUsdCxuKXtsZXQgcj1cIlVua25vd25cIjtyZXR1cm4gZSBpbnN0YW5jZW9mIEVycm9yJiYocj1lW3RdKSxuPy5zYW5pdGl6ZUZvck1ldHJpYyYmKHI9ci5yZXBsYWNlQWxsKFwiLlwiLFwiX1wiKSkscn1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIGEoZSxcIm1lc3NhZ2VcIix0KX1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuIGEoZSxcIm5hbWVcIix0KX1jb25zdCBsPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj17Li4uYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9LFwibWF0Y2hNZWRpYSgpIGRpc3BsYXktbW9kZT1icm93c2VyXCI6bWF0Y2hNZWRpYShcIihkaXNwbGF5LW1vZGU6IGJyb3dzZXIpXCIpLm1hdGNoZXN9LGk9W2UucmVwbGFjZUFsbChcIi1cIixcIl9cIildO3QmJihpLnB1c2godC5uYW1lLnRvTG93ZXJDYXNlKCkpLHQubWVzc2FnZS5pbmNsdWRlcyhcInJlbW92ZWQgZnJvbSB0aGUgZG9jdW1lbnRcIikmJmkucHVzaChcInJlbW92ZWRcIiksdC5tZXNzYWdlLmluY2x1ZGVzKFwiaW50ZXJydXB0ZWQgYnkgYSBjYWxsIHRvIHBhdXNlXCIpJiZpLnB1c2goXCJwYXVzZVwiKSksbmF2aWdhdG9yLnVzZXJBY3RpdmF0aW9uJiYobltcIm5hdmlnYXRvci51c2VyQWN0aXZhdGlvbi5pc0FjdGl2ZVwiXT1uYXZpZ2F0b3IudXNlckFjdGl2YXRpb24uaXNBY3RpdmUsbltcIm5hdmlnYXRvci51c2VyQWN0aXZhdGlvbi5oYXNCZWVuQWN0aXZlXCJdPW5hdmlnYXRvci51c2VyQWN0aXZhdGlvbi5oYXNCZWVuQWN0aXZlKSxvKCkuaW5jcmVtZW50KHttZXRyaWNzTmFtZTpcIm1lZGlhX3BsYXlfZXhjZXB0aW9uXCIsZGltZW5zaW9uczp7Y29udGV4dDppLmpvaW4oXCJfXCIpfX0pLCgwLHIuVGIpKHQse3RhZ3M6e2NvbnRleHQ6ZX0sZXh0cmE6bn0pfX0sMjYxMzA6KGUsdCxuKT0+e2Z1bmN0aW9uIHIoKXtjb25zdCBlPW5ldyBEYXRlKDE2ODQ5NDg2NDc3NzIpLnRvTG9jYWxlRGF0ZVN0cmluZyhcImVuLVVTXCIse3RpbWVab25lOlwiQW1lcmljYS9Mb3NfQW5nZWxlc1wifSkuc3BsaXQoXCIvXCIpO2xldCB0PWVbMV07cmV0dXJuIHQrPWAvJHtbXCJKQU5cIixcIkZFQlwiLFwiTUFSXCIsXCJBUFJcIixcIk1BWVwiLFwiSlVOXCIsXCJKVUxcIixcIkFVR1wiLFwiU0VQXCIsXCJPQ1RcIixcIk5PVlwiLFwiREVDXCJdW3BhcnNlSW50KGVbMF0pLTFdfWAsdCs9YC8ke2VbMl0uc2xpY2UoLTIpfWAsdH1mdW5jdGlvbiBpKCl7cmV0dXJuYFNuYXBjaGF0IHYxMi4zNi4wIChwcm9kIDRlZjFmNWQ3KSBidWlsdCBvbiAke25ldyBEYXRlKDE2ODQ5NDg2NDc3NzIpLnRvTG9jYWxlU3RyaW5nKFwiZW4tVVNcIix7dGltZVpvbmU6XCJBbWVyaWNhL0xvc19BbmdlbGVzXCIsdGltZVpvbmVOYW1lOlwic2hvcnRcIn0pfSAoMTY4NDk0ODY0Nzc3MilgfWZ1bmN0aW9uIG8oKXtyZXR1cm4gbmF2aWdhdG9yLnN0YW5kYWxvbmV8fHdpbmRvdy5tYXRjaE1lZGlhKFwiKGRpc3BsYXktbW9kZTogc3RhbmRhbG9uZSlcIikubWF0Y2hlc31mdW5jdGlvbiBhKCl7cmV0dXJuXCJhcHAtaW5mbzovL3BsYXRmb3JtL21pY3Jvc29mdC1zdG9yZVwiPT09ZG9jdW1lbnQucmVmZXJyZXI/KHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXCJpc19tc19zdG9yZV9wd2FcIixcInllc1wiKSwhMCk6XCJ5ZXNcIj09PXNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJpc19tc19zdG9yZV9wd2FcIil9ZnVuY3Rpb24gcygpe3JldHVyblwicGxheV9zdG9yZVwiPT09bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZikuc2VhcmNoUGFyYW1zLmdldChcInJlZlwiKT8oc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcImlzX3BsYXlfc3RvcmVfcHdhXCIsXCJ5ZXNcIiksITApOlwieWVzXCI9PT1zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwiaXNfcGxheV9zdG9yZV9wd2FcIil9ZnVuY3Rpb24gYygpe3JldHVybiExfW4uZCh0LHtOdTooKT0+byxTdTooKT0+YyxnTDooKT0+cixxRjooKT0+YSxxbzooKT0+aSx6VTooKT0+c30pfSw4NDEzMDooZSx0LG4pPT57bi5kKHQse1Y6KCk9Pm99KTt2YXIgcj1uKDQ1MzYzKSxpPW4ubihyKTtmdW5jdGlvbiBvKGUpe2NvbnN0IHQ9c2VsZi5sb2NhdGlvbi5wYXRobmFtZS5zdGFydHNXaXRoKFwiL3ZlcnNpb24vXCIpO2koKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwic2hvdWxkX25ldmVyX2hhcHBlblwiLGRpbWVuc2lvbnM6e25hbWU6ZSxpc19jdXN0b21fdmVyc2lvbjpTdHJpbmcodCl9fSl9fSwyNzI2MTooZSx0LG4pPT57bi5kKHQse1lMOigpPT5wLG9fOigpPT5mLHFtOigpPT5kfSk7dmFyIHI9big3MTM3MSksaT1uKDQ1MzYzKSxvPW4ubihpKSxhPW4oOTc3ODIpLHM9bi5uKGEpLGM9big1MDAwOCksbD1uLm4oYyksdT1uKDYxOTkyKTtzKCkuZ2V0TG9nZ2VyKFwiW01lZGlhXVwiKTtjb25zdCBkPShlLHQpPT57dHJ5e2NvbnN0IG49bCgpLmxvYWQoZSk7ZGVsZXRlIG4uR1BTO2NvbnN0IHI9bCgpLmR1bXAobiksaT1sKCkuaW5zZXJ0KHIsZSksbz1uZXcgVWludDhBcnJheShpLmxlbmd0aCk7Zm9yKGxldCBlPTA7ZTxpLmxlbmd0aDtlKyspb1tlXT1pLmNoYXJDb2RlQXQoZSk7cmV0dXJuIG5ldyBCbG9iKFtvXSx7dHlwZTp0fSl9Y2F0Y2goZSl7dGhyb3cgbygpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJ2YWxpZGF0ZV9qcGVnX2V4aWZfdHJpbW1pbmdfZmFpbHVyZVwifSksKDAsci5UYikoZSx7dGFnczp7Y29udGV4dDpcInZhbGlkYXRlX2pwZWdfZXhpZl90cmltbWluZ19mYWlsdXJlXCJ9fSksbmV3IHUuS2QoXCJFeGlmIHRyaW1taW5nOiBGYWlscyB0byB0cmltIGdlbyBkYXRhIGluIGJpbmFyeSBkYXRhXCIsXCJ0cmltQmluYXJ5VG9CbG9iXCIpfX0sZj1hc3luYyBmdW5jdGlvbihlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IG49ZS50eXBlO3RyeXtpZihcImltYWdlL2pwZWdcIiE9PW4mJlwiaW1hZ2UvanBnXCIhPT1uKXRocm93IG5ldyB1LktkKFwiTWVkaWEgVmFsaWRhdGlvbjogbWVkaWEgdHlwZSBpcyBpbnZhbGlkXCIsXCJqcGVnSGFzR2VvRGF0YVwiLFwiSW52YWxpZEZpbGVUeXBlXCIpO2NvbnN0IHI9YXdhaXQgZS5hcnJheUJ1ZmZlcigpLGk9QXJyYXkuZnJvbShuZXcgVWludDhBcnJheShyKSwoZT0+U3RyaW5nLmZyb21DaGFyQ29kZShlKSkpLmpvaW4oXCJcIiksYT1sKCkubG9hZChpKSxzPVwiR1BTXCJpbiBhJiZPYmplY3Qua2V5cyhhLkdQUykubGVuZ3RoPjA7cmV0dXJuIG8oKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwidmFsaWRhdGVfanBlZ19leGlmX3N1Y2Nlc3NcIixkaW1lbnNpb25zOntoYXNHZW9EYXRhOnMudG9TdHJpbmcoKSxpc1JlbmRlcmluZzp0LnRvU3RyaW5nKCl9fSkse2hhc0dlb0RhdGE6cyxqcGVnQmluYXJ5Oml9fWNhdGNoKGUpe2lmKG8oKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwidmFsaWRhdGVfanBlZ19leGlmX2ZhaWx1cmVcIixkaW1lbnNpb25zOntpc1JlbmRlcmluZzp0LnRvU3RyaW5nKCksZmlsZVR5cGU6bn19KSxlIGluc3RhbmNlb2YgdS5LZCYmXCJJbnZhbGlkRmlsZVR5cGVcIj09PWUubmFtZSl0aHJvdyBlO3Rocm93KDAsci5UYikoZSx7dGFnczp7Y29udGV4dDpcInZhbGlkYXRlX2pwZWdfZXhpZl9mYWlsdXJlXCJ9fSksbmV3IHUuS2QoXCJNZWRpYSBWYWxpZGF0aW9uOiBGYWlsIHRvIHZhbGlkYXRlIEpQRUcgbWVkaWFcIixcImpwZWdIYXNHZW9EYXRhXCIpfX0scD1hc3luYyhlLHQpPT57Y29uc3Qgbj1wZXJmb3JtYW5jZS5ub3coKSxpPWUudHlwZTtpZihcImltYWdlL2pwZWdcIiE9PWkmJlwiaW1hZ2UvanBnXCIhPT1pKXJldHVybiBlO2xldCBhPVwiemVyb1wiO3Q+MjA/YT1cImdyZWF0ZXJfdGhhbl8yMFwiOnQ+NT9hPVwiZ3JlYXRlcl90aGFuXzVcIjp0PjAmJihhPVwiZ3JlYXRlcl90aGFuXzFcIik7dHJ5e28oKS5pbmNyZW1lbnQoe21ldHJpY3NOYW1lOlwic2VuZF9tZWRpYV90cmltX2V4aWZfYXR0ZW1wdFwiLGRpbWVuc2lvbnM6e2ZpbGVfc2VxdWVuY2U6YX19KTtjb25zdHtoYXNHZW9EYXRhOnQsanBlZ0JpbmFyeTpyfT1hd2FpdCBmKGUpO2lmKCF0KXJldHVybiBvKCkuYWRkVGltZXIoe21ldHJpY3NOYW1lOlwic2VuZF9tZWRpYV90cmltX2V4aWZfc3VjY2Vzc19ub19nZW9fZGF0YVwiLG1pbGxpU2VjOk1hdGgucm91bmQocGVyZm9ybWFuY2Uubm93KCktbiksZGltZW5zaW9uczp7ZmlsZV9zZXF1ZW5jZTphfX0pLGU7Y29uc3Qgcz1kKHIsaSk7cmV0dXJuIG8oKS5hZGRUaW1lcih7bWV0cmljc05hbWU6XCJzZW5kX21lZGlhX3RyaW1fZXhpZl9zdWNjZXNzX2hhc19nZW9fZGF0YVwiLG1pbGxpU2VjOk1hdGgucm91bmQocGVyZm9ybWFuY2Uubm93KCktbiksZGltZW5zaW9uczp7ZmlsZV9zZXF1ZW5jZTphfX0pLHN9Y2F0Y2godCl7cmV0dXJuKDAsci5UYikodCx7dGFnczp7Y29udGV4dDpcInNlbmRfbWVkaWFfdHJpbV9leGlmX2ZhaWx1cmVcIixmaWxlX3NlcXVlbmNlOmF9fSksbygpLmluY3JlbWVudCh7bWV0cmljc05hbWU6XCJzZW5kX21lZGlhX3RyaW1fZXhpZl9mYWlsdXJlXCIsZGltZW5zaW9uczp7ZmlsZV9zZXF1ZW5jZTphfX0pLGV9fX0sODI0OTg6KGUsdCxuKT0+e24uZCh0LHtDRjooKT0+YyxNNzooKT0+YSxhMjooKT0+byxvJDooKT0+cyx0ZzooKT0+aX0pO3ZhciByPW4oNDQ3ODUpO2NvbnN0IGk9XCI4NGVlODgzOS0zOTExLTQ5MmQtOGI5NC03MmRkODBmMzcxM2FcIixvPSgwLHIuT1kpKGkpLGE9XCJiNDJmMWY3MC01YThiLTRjNTMtOGMyNS0zNGU3ZWM5ZTY3ODFcIixzPSgwLHIuT1kpKGEpLGM9bmV3IFNldChbbyxzXSl9LDc5NzQyOihlLHQpPT57dC5ieXRlTGVuZ3RoPWZ1bmN0aW9uKGUpe3ZhciB0PXMoZSksbj10WzBdLHI9dFsxXTtyZXR1cm4gMyoobityKS80LXJ9LHQudG9CeXRlQXJyYXk9ZnVuY3Rpb24oZSl7dmFyIHQsbixvPXMoZSksYT1vWzBdLGM9b1sxXSxsPW5ldyBpKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gMyoodCtuKS80LW59KDAsYSxjKSksdT0wLGQ9Yz4wP2EtNDphO2ZvcihuPTA7bjxkO24rPTQpdD1yW2UuY2hhckNvZGVBdChuKV08PDE4fHJbZS5jaGFyQ29kZUF0KG4rMSldPDwxMnxyW2UuY2hhckNvZGVBdChuKzIpXTw8NnxyW2UuY2hhckNvZGVBdChuKzMpXSxsW3UrK109dD4+MTYmMjU1LGxbdSsrXT10Pj44JjI1NSxsW3UrK109MjU1JnQ7cmV0dXJuIDI9PT1jJiYodD1yW2UuY2hhckNvZGVBdChuKV08PDJ8cltlLmNoYXJDb2RlQXQobisxKV0+PjQsbFt1KytdPTI1NSZ0KSwxPT09YyYmKHQ9cltlLmNoYXJDb2RlQXQobildPDwxMHxyW2UuY2hhckNvZGVBdChuKzEpXTw8NHxyW2UuY2hhckNvZGVBdChuKzIpXT4+MixsW3UrK109dD4+OCYyNTUsbFt1KytdPTI1NSZ0KSxsfSx0LmZyb21CeXRlQXJyYXk9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9ZS5sZW5ndGgsaT1yJTMsbz1bXSxhPTE2MzgzLHM9MCxsPXItaTtzPGw7cys9YSlvLnB1c2goYyhlLHMscythPmw/bDpzK2EpKTtyZXR1cm4gMT09PWk/KHQ9ZVtyLTFdLG8ucHVzaChuW3Q+PjJdK25bdDw8NCY2M10rXCI9PVwiKSk6Mj09PWkmJih0PShlW3ItMl08PDgpK2Vbci0xXSxvLnB1c2goblt0Pj4xMF0rblt0Pj40JjYzXStuW3Q8PDImNjNdK1wiPVwiKSksby5qb2luKFwiXCIpfTtmb3IodmFyIG49W10scj1bXSxpPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50OEFycmF5P1VpbnQ4QXJyYXk6QXJyYXksbz1cIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky9cIixhPTA7YTw2NDsrK2EpblthXT1vW2FdLHJbby5jaGFyQ29kZUF0KGEpXT1hO2Z1bmN0aW9uIHMoZSl7dmFyIHQ9ZS5sZW5ndGg7aWYodCU0PjApdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNFwiKTt2YXIgbj1lLmluZGV4T2YoXCI9XCIpO3JldHVybi0xPT09biYmKG49dCksW24sbj09PXQ/MDo0LW4lNF19ZnVuY3Rpb24gYyhlLHQscil7Zm9yKHZhciBpLG8sYT1bXSxzPXQ7czxyO3MrPTMpaT0oZVtzXTw8MTYmMTY3MTE2ODApKyhlW3MrMV08PDgmNjUyODApKygyNTUmZVtzKzJdKSxhLnB1c2goblsobz1pKT4+MTgmNjNdK25bbz4+MTImNjNdK25bbz4+NiY2M10rbls2MyZvXSk7cmV0dXJuIGEuam9pbihcIlwiKX1yW1wiLVwiLmNoYXJDb2RlQXQoMCldPTYyLHJbXCJfXCIuY2hhckNvZGVBdCgwKV09NjN9LDQ0NDMxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcjshZnVuY3Rpb24oaSl7dmFyIG8sYT0vXi0/KD86XFxkKyg/OlxcLlxcZCopP3xcXC5cXGQrKSg/OmVbKy1dP1xcZCspPyQvaSxzPU1hdGguY2VpbCxjPU1hdGguZmxvb3IsbD1cIltCaWdOdW1iZXIgRXJyb3JdIFwiLHU9bCtcIk51bWJlciBwcmltaXRpdmUgaGFzIG1vcmUgdGhhbiAxNSBzaWduaWZpY2FudCBkaWdpdHM6IFwiLGQ9MWUxNCxmPTE0LHA9OTAwNzE5OTI1NDc0MDk5MSxtPVsxLDEwLDEwMCwxZTMsMWU0LDFlNSwxZTYsMWU3LDFlOCwxZTksMWUxMCwxZTExLDFlMTIsMWUxM10saD0xZTcsdj0xZTk7ZnVuY3Rpb24gZyhlKXt2YXIgdD0wfGU7cmV0dXJuIGU+MHx8ZT09PXQ/dDp0LTF9ZnVuY3Rpb24geShlKXtmb3IodmFyIHQsbixyPTEsaT1lLmxlbmd0aCxvPWVbMF0rXCJcIjtyPGk7KXtmb3IodD1lW3IrK10rXCJcIixuPWYtdC5sZW5ndGg7bi0tO3Q9XCIwXCIrdCk7bys9dH1mb3IoaT1vLmxlbmd0aDs0OD09PW8uY2hhckNvZGVBdCgtLWkpOyk7cmV0dXJuIG8uc2xpY2UoMCxpKzF8fDEpfWZ1bmN0aW9uIEUoZSx0KXt2YXIgbixyLGk9ZS5jLG89dC5jLGE9ZS5zLHM9dC5zLGM9ZS5lLGw9dC5lO2lmKCFhfHwhcylyZXR1cm4gbnVsbDtpZihuPWkmJiFpWzBdLHI9byYmIW9bMF0sbnx8cilyZXR1cm4gbj9yPzA6LXM6YTtpZihhIT1zKXJldHVybiBhO2lmKG49YTwwLHI9Yz09bCwhaXx8IW8pcmV0dXJuIHI/MDohaV5uPzE6LTE7aWYoIXIpcmV0dXJuIGM+bF5uPzE6LTE7Zm9yKHM9KGM9aS5sZW5ndGgpPChsPW8ubGVuZ3RoKT9jOmwsYT0wO2E8czthKyspaWYoaVthXSE9b1thXSlyZXR1cm4gaVthXT5vW2FdXm4/MTotMTtyZXR1cm4gYz09bD8wOmM+bF5uPzE6LTF9ZnVuY3Rpb24gXyhlLHQsbixyKXtpZihlPHR8fGU+bnx8ZSE9PWMoZSkpdGhyb3cgRXJyb3IobCsocnx8XCJBcmd1bWVudFwiKSsoXCJudW1iZXJcIj09dHlwZW9mIGU/ZTx0fHxlPm4/XCIgb3V0IG9mIHJhbmdlOiBcIjpcIiBub3QgYW4gaW50ZWdlcjogXCI6XCIgbm90IGEgcHJpbWl0aXZlIG51bWJlcjogXCIpK1N0cmluZyhlKSl9ZnVuY3Rpb24gSShlKXt2YXIgdD1lLmMubGVuZ3RoLTE7cmV0dXJuIGcoZS5lL2YpPT10JiZlLmNbdF0lMiE9MH1mdW5jdGlvbiBTKGUsdCl7cmV0dXJuKGUubGVuZ3RoPjE/ZS5jaGFyQXQoMCkrXCIuXCIrZS5zbGljZSgxKTplKSsodDwwP1wiZVwiOlwiZStcIikrdH1mdW5jdGlvbiBiKGUsdCxuKXt2YXIgcixpO2lmKHQ8MCl7Zm9yKGk9bitcIi5cIjsrK3Q7aSs9bik7ZT1pK2V9ZWxzZSBpZigrK3Q+KHI9ZS5sZW5ndGgpKXtmb3IoaT1uLHQtPXI7LS10O2krPW4pO2UrPWl9ZWxzZSB0PHImJihlPWUuc2xpY2UoMCx0KStcIi5cIitlLnNsaWNlKHQpKTtyZXR1cm4gZX1vPWZ1bmN0aW9uIGUodCl7dmFyIG4scixpLG8sVCxDLEEsUixrLE8sTj1qLnByb3RvdHlwZT17Y29uc3RydWN0b3I6aix0b1N0cmluZzpudWxsLHZhbHVlT2Y6bnVsbH0sdz1uZXcgaigxKSxEPTIwLFA9NCxNPS03LEw9MjEsVT0tMWU3LHg9MWU3LEY9ITEsQj0xLFY9MCxHPXtwcmVmaXg6XCJcIixncm91cFNpemU6MyxzZWNvbmRhcnlHcm91cFNpemU6MCxncm91cFNlcGFyYXRvcjpcIixcIixkZWNpbWFsU2VwYXJhdG9yOlwiLlwiLGZyYWN0aW9uR3JvdXBTaXplOjAsZnJhY3Rpb25Hcm91cFNlcGFyYXRvcjpcIlx1MDBhMFwiLHN1ZmZpeDpcIlwifSxIPVwiMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XCIsVz0hMDtmdW5jdGlvbiBqKGUsdCl7dmFyIG4sbyxzLGwsZCxtLGgsdixnPXRoaXM7aWYoIShnIGluc3RhbmNlb2YgaikpcmV0dXJuIG5ldyBqKGUsdCk7aWYobnVsbD09dCl7aWYoZSYmITA9PT1lLl9pc0JpZ051bWJlcilyZXR1cm4gZy5zPWUucyx2b2lkKCFlLmN8fGUuZT54P2cuYz1nLmU9bnVsbDplLmU8VT9nLmM9W2cuZT0wXTooZy5lPWUuZSxnLmM9ZS5jLnNsaWNlKCkpKTtpZigobT1cIm51bWJlclwiPT10eXBlb2YgZSkmJjAqZT09MCl7aWYoZy5zPTEvZTwwPyhlPS1lLC0xKToxLGU9PT1+fmUpe2ZvcihsPTAsZD1lO2Q+PTEwO2QvPTEwLGwrKyk7cmV0dXJuIHZvaWQobD54P2cuYz1nLmU9bnVsbDooZy5lPWwsZy5jPVtlXSkpfXY9U3RyaW5nKGUpfWVsc2V7aWYoIWEudGVzdCh2PVN0cmluZyhlKSkpcmV0dXJuIGkoZyx2LG0pO2cucz00NT09di5jaGFyQ29kZUF0KDApPyh2PXYuc2xpY2UoMSksLTEpOjF9KGw9di5pbmRleE9mKFwiLlwiKSk+LTEmJih2PXYucmVwbGFjZShcIi5cIixcIlwiKSksKGQ9di5zZWFyY2goL2UvaSkpPjA/KGw8MCYmKGw9ZCksbCs9K3Yuc2xpY2UoZCsxKSx2PXYuc3Vic3RyaW5nKDAsZCkpOmw8MCYmKGw9di5sZW5ndGgpfWVsc2V7aWYoXyh0LDIsSC5sZW5ndGgsXCJCYXNlXCIpLDEwPT10JiZXKXJldHVybiBZKGc9bmV3IGooZSksRCtnLmUrMSxQKTtpZih2PVN0cmluZyhlKSxtPVwibnVtYmVyXCI9PXR5cGVvZiBlKXtpZigwKmUhPTApcmV0dXJuIGkoZyx2LG0sdCk7aWYoZy5zPTEvZTwwPyh2PXYuc2xpY2UoMSksLTEpOjEsai5ERUJVRyYmdi5yZXBsYWNlKC9eMFxcLjAqfFxcLi8sXCJcIikubGVuZ3RoPjE1KXRocm93IEVycm9yKHUrZSl9ZWxzZSBnLnM9NDU9PT12LmNoYXJDb2RlQXQoMCk/KHY9di5zbGljZSgxKSwtMSk6MTtmb3Iobj1ILnNsaWNlKDAsdCksbD1kPTAsaD12Lmxlbmd0aDtkPGg7ZCsrKWlmKG4uaW5kZXhPZihvPXYuY2hhckF0KGQpKTwwKXtpZihcIi5cIj09byl7aWYoZD5sKXtsPWg7Y29udGludWV9fWVsc2UgaWYoIXMmJih2PT12LnRvVXBwZXJDYXNlKCkmJih2PXYudG9Mb3dlckNhc2UoKSl8fHY9PXYudG9Mb3dlckNhc2UoKSYmKHY9di50b1VwcGVyQ2FzZSgpKSkpe3M9ITAsZD0tMSxsPTA7Y29udGludWV9cmV0dXJuIGkoZyxTdHJpbmcoZSksbSx0KX1tPSExLChsPSh2PXIodix0LDEwLGcucykpLmluZGV4T2YoXCIuXCIpKT4tMT92PXYucmVwbGFjZShcIi5cIixcIlwiKTpsPXYubGVuZ3RofWZvcihkPTA7NDg9PT12LmNoYXJDb2RlQXQoZCk7ZCsrKTtmb3IoaD12Lmxlbmd0aDs0OD09PXYuY2hhckNvZGVBdCgtLWgpOyk7aWYodj12LnNsaWNlKGQsKytoKSl7aWYoaC09ZCxtJiZqLkRFQlVHJiZoPjE1JiYoZT5wfHxlIT09YyhlKSkpdGhyb3cgRXJyb3IodStnLnMqZSk7aWYoKGw9bC1kLTEpPngpZy5jPWcuZT1udWxsO2Vsc2UgaWYobDxVKWcuYz1bZy5lPTBdO2Vsc2V7aWYoZy5lPWwsZy5jPVtdLGQ9KGwrMSklZixsPDAmJihkKz1mKSxkPGgpe2ZvcihkJiZnLmMucHVzaCgrdi5zbGljZSgwLGQpKSxoLT1mO2Q8aDspZy5jLnB1c2goK3Yuc2xpY2UoZCxkKz1mKSk7ZD1mLSh2PXYuc2xpY2UoZCkpLmxlbmd0aH1lbHNlIGQtPWg7Zm9yKDtkLS07dis9XCIwXCIpO2cuYy5wdXNoKCt2KX19ZWxzZSBnLmM9W2cuZT0wXX1mdW5jdGlvbiBaKGUsdCxuLHIpe3ZhciBpLG8sYSxzLGM7aWYobnVsbD09bj9uPVA6XyhuLDAsOCksIWUuYylyZXR1cm4gZS50b1N0cmluZygpO2lmKGk9ZS5jWzBdLGE9ZS5lLG51bGw9PXQpYz15KGUuYyksYz0xPT1yfHwyPT1yJiYoYTw9TXx8YT49TCk/UyhjLGEpOmIoYyxhLFwiMFwiKTtlbHNlIGlmKG89KGU9WShuZXcgaihlKSx0LG4pKS5lLHM9KGM9eShlLmMpKS5sZW5ndGgsMT09cnx8Mj09ciYmKHQ8PW98fG88PU0pKXtmb3IoO3M8dDtjKz1cIjBcIixzKyspO2M9UyhjLG8pfWVsc2UgaWYodC09YSxjPWIoYyxvLFwiMFwiKSxvKzE+cyl7aWYoLS10PjApZm9yKGMrPVwiLlwiO3QtLTtjKz1cIjBcIik7fWVsc2UgaWYoKHQrPW8tcyk+MClmb3IobysxPT1zJiYoYys9XCIuXCIpO3QtLTtjKz1cIjBcIik7cmV0dXJuIGUuczwwJiZpP1wiLVwiK2M6Y31mdW5jdGlvbiB6KGUsdCl7Zm9yKHZhciBuLHI9MSxpPW5ldyBqKGVbMF0pO3I8ZS5sZW5ndGg7cisrKXtpZighKG49bmV3IGooZVtyXSkpLnMpe2k9bjticmVha310LmNhbGwoaSxuKSYmKGk9bil9cmV0dXJuIGl9ZnVuY3Rpb24gSyhlLHQsbil7Zm9yKHZhciByPTEsaT10Lmxlbmd0aDshdFstLWldO3QucG9wKCkpO2ZvcihpPXRbMF07aT49MTA7aS89MTAscisrKTtyZXR1cm4obj1yK24qZi0xKT54P2UuYz1lLmU9bnVsbDpuPFU/ZS5jPVtlLmU9MF06KGUuZT1uLGUuYz10KSxlfWZ1bmN0aW9uIFkoZSx0LG4scil7dmFyIGksbyxhLGwsdSxwLGgsdj1lLmMsZz1tO2lmKHYpe2U6e2ZvcihpPTEsbD12WzBdO2w+PTEwO2wvPTEwLGkrKyk7aWYoKG89dC1pKTwwKW8rPWYsYT10LGg9KHU9dltwPTBdKS9nW2ktYS0xXSUxMHwwO2Vsc2UgaWYoKHA9cygobysxKS9mKSk+PXYubGVuZ3RoKXtpZighcilicmVhayBlO2Zvcig7di5sZW5ndGg8PXA7di5wdXNoKDApKTt1PWg9MCxpPTEsYT0obyU9ZiktZisxfWVsc2V7Zm9yKHU9bD12W3BdLGk9MTtsPj0xMDtsLz0xMCxpKyspO2g9KGE9KG8lPWYpLWYraSk8MD8wOnUvZ1tpLWEtMV0lMTB8MH1pZihyPXJ8fHQ8MHx8bnVsbCE9dltwKzFdfHwoYTwwP3U6dSVnW2ktYS0xXSkscj1uPDQ/KGh8fHIpJiYoMD09bnx8bj09KGUuczwwPzM6MikpOmg+NXx8NT09aCYmKDQ9PW58fHJ8fDY9PW4mJihvPjA/YT4wP3UvZ1tpLWFdOjA6dltwLTFdKSUxMCYxfHxuPT0oZS5zPDA/ODo3KSksdDwxfHwhdlswXSlyZXR1cm4gdi5sZW5ndGg9MCxyPyh0LT1lLmUrMSx2WzBdPWdbKGYtdCVmKSVmXSxlLmU9LXR8fDApOnZbMF09ZS5lPTAsZTtpZigwPT1vPyh2Lmxlbmd0aD1wLGw9MSxwLS0pOih2Lmxlbmd0aD1wKzEsbD1nW2Ytb10sdltwXT1hPjA/Yyh1L2dbaS1hXSVnW2FdKSpsOjApLHIpZm9yKDs7KXtpZigwPT1wKXtmb3Iobz0xLGE9dlswXTthPj0xMDthLz0xMCxvKyspO2ZvcihhPXZbMF0rPWwsbD0xO2E+PTEwO2EvPTEwLGwrKyk7byE9bCYmKGUuZSsrLHZbMF09PWQmJih2WzBdPTEpKTticmVha31pZih2W3BdKz1sLHZbcF0hPWQpYnJlYWs7dltwLS1dPTAsbD0xfWZvcihvPXYubGVuZ3RoOzA9PT12Wy0tb107di5wb3AoKSk7fWUuZT54P2UuYz1lLmU9bnVsbDplLmU8VSYmKGUuYz1bZS5lPTBdKX1yZXR1cm4gZX1mdW5jdGlvbiBxKGUpe3ZhciB0LG49ZS5lO3JldHVybiBudWxsPT09bj9lLnRvU3RyaW5nKCk6KHQ9eShlLmMpLHQ9bjw9TXx8bj49TD9TKHQsbik6Yih0LG4sXCIwXCIpLGUuczwwP1wiLVwiK3Q6dCl9cmV0dXJuIGouY2xvbmU9ZSxqLlJPVU5EX1VQPTAsai5ST1VORF9ET1dOPTEsai5ST1VORF9DRUlMPTIsai5ST1VORF9GTE9PUj0zLGouUk9VTkRfSEFMRl9VUD00LGouUk9VTkRfSEFMRl9ET1dOPTUsai5ST1VORF9IQUxGX0VWRU49NixqLlJPVU5EX0hBTEZfQ0VJTD03LGouUk9VTkRfSEFMRl9GTE9PUj04LGouRVVDTElEPTksai5jb25maWc9ai5zZXQ9ZnVuY3Rpb24oZSl7dmFyIHQsbjtpZihudWxsIT1lKXtpZihcIm9iamVjdFwiIT10eXBlb2YgZSl0aHJvdyBFcnJvcihsK1wiT2JqZWN0IGV4cGVjdGVkOiBcIitlKTtpZihlLmhhc093blByb3BlcnR5KHQ9XCJERUNJTUFMX1BMQUNFU1wiKSYmKF8obj1lW3RdLDAsdix0KSxEPW4pLGUuaGFzT3duUHJvcGVydHkodD1cIlJPVU5ESU5HX01PREVcIikmJihfKG49ZVt0XSwwLDgsdCksUD1uKSxlLmhhc093blByb3BlcnR5KHQ9XCJFWFBPTkVOVElBTF9BVFwiKSYmKChuPWVbdF0pJiZuLnBvcD8oXyhuWzBdLC12LDAsdCksXyhuWzFdLDAsdix0KSxNPW5bMF0sTD1uWzFdKTooXyhuLC12LHYsdCksTT0tKEw9bjwwPy1uOm4pKSksZS5oYXNPd25Qcm9wZXJ0eSh0PVwiUkFOR0VcIikpaWYoKG49ZVt0XSkmJm4ucG9wKV8oblswXSwtdiwtMSx0KSxfKG5bMV0sMSx2LHQpLFU9blswXSx4PW5bMV07ZWxzZXtpZihfKG4sLXYsdix0KSwhbil0aHJvdyBFcnJvcihsK3QrXCIgY2Fubm90IGJlIHplcm86IFwiK24pO1U9LSh4PW48MD8tbjpuKX1pZihlLmhhc093blByb3BlcnR5KHQ9XCJDUllQVE9cIikpe2lmKChuPWVbdF0pIT09ISFuKXRocm93IEVycm9yKGwrdCtcIiBub3QgdHJ1ZSBvciBmYWxzZTogXCIrbik7aWYobil7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGNyeXB0b3x8IWNyeXB0b3x8IWNyeXB0by5nZXRSYW5kb21WYWx1ZXMmJiFjcnlwdG8ucmFuZG9tQnl0ZXMpdGhyb3cgRj0hbixFcnJvcihsK1wiY3J5cHRvIHVuYXZhaWxhYmxlXCIpO0Y9bn1lbHNlIEY9bn1pZihlLmhhc093blByb3BlcnR5KHQ9XCJNT0RVTE9fTU9ERVwiKSYmKF8obj1lW3RdLDAsOSx0KSxCPW4pLGUuaGFzT3duUHJvcGVydHkodD1cIlBPV19QUkVDSVNJT05cIikmJihfKG49ZVt0XSwwLHYsdCksVj1uKSxlLmhhc093blByb3BlcnR5KHQ9XCJGT1JNQVRcIikpe2lmKFwib2JqZWN0XCIhPXR5cGVvZihuPWVbdF0pKXRocm93IEVycm9yKGwrdCtcIiBub3QgYW4gb2JqZWN0OiBcIituKTtHPW59aWYoZS5oYXNPd25Qcm9wZXJ0eSh0PVwiQUxQSEFCRVRcIikpe2lmKFwic3RyaW5nXCIhPXR5cGVvZihuPWVbdF0pfHwvXi4/JHxbK1xcLS5cXHNdfCguKS4qXFwxLy50ZXN0KG4pKXRocm93IEVycm9yKGwrdCtcIiBpbnZhbGlkOiBcIituKTtXPVwiMDEyMzQ1Njc4OVwiPT1uLnNsaWNlKDAsMTApLEg9bn19cmV0dXJue0RFQ0lNQUxfUExBQ0VTOkQsUk9VTkRJTkdfTU9ERTpQLEVYUE9ORU5USUFMX0FUOltNLExdLFJBTkdFOltVLHhdLENSWVBUTzpGLE1PRFVMT19NT0RFOkIsUE9XX1BSRUNJU0lPTjpWLEZPUk1BVDpHLEFMUEhBQkVUOkh9fSxqLmlzQmlnTnVtYmVyPWZ1bmN0aW9uKGUpe2lmKCFlfHwhMCE9PWUuX2lzQmlnTnVtYmVyKXJldHVybiExO2lmKCFqLkRFQlVHKXJldHVybiEwO3ZhciB0LG4scj1lLmMsaT1lLmUsbz1lLnM7ZTppZihcIltvYmplY3QgQXJyYXldXCI9PXt9LnRvU3RyaW5nLmNhbGwocikpe2lmKCgxPT09b3x8LTE9PT1vKSYmaT49LXYmJmk8PXYmJmk9PT1jKGkpKXtpZigwPT09clswXSl7aWYoMD09PWkmJjE9PT1yLmxlbmd0aClyZXR1cm4hMDticmVhayBlfWlmKCh0PShpKzEpJWYpPDEmJih0Kz1mKSxTdHJpbmcoclswXSkubGVuZ3RoPT10KXtmb3IodD0wO3Q8ci5sZW5ndGg7dCsrKWlmKChuPXJbdF0pPDB8fG4+PWR8fG4hPT1jKG4pKWJyZWFrIGU7aWYoMCE9PW4pcmV0dXJuITB9fX1lbHNlIGlmKG51bGw9PT1yJiZudWxsPT09aSYmKG51bGw9PT1vfHwxPT09b3x8LTE9PT1vKSlyZXR1cm4hMDt0aHJvdyBFcnJvcihsK1wiSW52YWxpZCBCaWdOdW1iZXI6IFwiK2UpfSxqLm1heGltdW09ai5tYXg9ZnVuY3Rpb24oKXtyZXR1cm4geihhcmd1bWVudHMsTi5sdCl9LGoubWluaW11bT1qLm1pbj1mdW5jdGlvbigpe3JldHVybiB6KGFyZ3VtZW50cyxOLmd0KX0sai5yYW5kb209KG89OTAwNzE5OTI1NDc0MDk5MixUPU1hdGgucmFuZG9tKCkqbyYyMDk3MTUxP2Z1bmN0aW9uKCl7cmV0dXJuIGMoTWF0aC5yYW5kb20oKSpvKX06ZnVuY3Rpb24oKXtyZXR1cm4gODM4ODYwOCooMTA3Mzc0MTgyNCpNYXRoLnJhbmRvbSgpfDApKyg4Mzg4NjA4Kk1hdGgucmFuZG9tKCl8MCl9LGZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG8sYT0wLHU9W10sZD1uZXcgaih3KTtpZihudWxsPT1lP2U9RDpfKGUsMCx2KSxpPXMoZS9mKSxGKWlmKGNyeXB0by5nZXRSYW5kb21WYWx1ZXMpe2Zvcih0PWNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KGkqPTIpKTthPGk7KShvPTEzMTA3Mip0W2FdKyh0W2ErMV0+Pj4xMSkpPj05ZTE1PyhuPWNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDIpKSx0W2FdPW5bMF0sdFthKzFdPW5bMV0pOih1LnB1c2gobyUxZTE0KSxhKz0yKTthPWkvMn1lbHNle2lmKCFjcnlwdG8ucmFuZG9tQnl0ZXMpdGhyb3cgRj0hMSxFcnJvcihsK1wiY3J5cHRvIHVuYXZhaWxhYmxlXCIpO2Zvcih0PWNyeXB0by5yYW5kb21CeXRlcyhpKj03KTthPGk7KShvPTI4MTQ3NDk3NjcxMDY1NiooMzEmdFthXSkrMTA5OTUxMTYyNzc3Nip0W2ErMV0rNDI5NDk2NzI5Nip0W2ErMl0rMTY3NzcyMTYqdFthKzNdKyh0W2ErNF08PDE2KSsodFthKzVdPDw4KSt0W2ErNl0pPj05ZTE1P2NyeXB0by5yYW5kb21CeXRlcyg3KS5jb3B5KHQsYSk6KHUucHVzaChvJTFlMTQpLGErPTcpO2E9aS83fWlmKCFGKWZvcig7YTxpOykobz1UKCkpPDllMTUmJih1W2ErK109byUxZTE0KTtmb3IoaT11Wy0tYV0sZSU9ZixpJiZlJiYobz1tW2YtZV0sdVthXT1jKGkvbykqbyk7MD09PXVbYV07dS5wb3AoKSxhLS0pO2lmKGE8MCl1PVtyPTBdO2Vsc2V7Zm9yKHI9LTE7MD09PXVbMF07dS5zcGxpY2UoMCwxKSxyLT1mKTtmb3IoYT0xLG89dVswXTtvPj0xMDtvLz0xMCxhKyspO2E8ZiYmKHItPWYtYSl9cmV0dXJuIGQuZT1yLGQuYz11LGR9KSxqLnN1bT1mdW5jdGlvbigpe2Zvcih2YXIgZT0xLHQ9YXJndW1lbnRzLG49bmV3IGoodFswXSk7ZTx0Lmxlbmd0aDspbj1uLnBsdXModFtlKytdKTtyZXR1cm4gbn0scj1mdW5jdGlvbigpe3ZhciBlPVwiMDEyMzQ1Njc4OVwiO2Z1bmN0aW9uIHQoZSx0LG4scil7Zm9yKHZhciBpLG8sYT1bMF0scz0wLGM9ZS5sZW5ndGg7czxjOyl7Zm9yKG89YS5sZW5ndGg7by0tO2Fbb10qPXQpO2ZvcihhWzBdKz1yLmluZGV4T2YoZS5jaGFyQXQocysrKSksaT0wO2k8YS5sZW5ndGg7aSsrKWFbaV0+bi0xJiYobnVsbD09YVtpKzFdJiYoYVtpKzFdPTApLGFbaSsxXSs9YVtpXS9ufDAsYVtpXSU9bil9cmV0dXJuIGEucmV2ZXJzZSgpfXJldHVybiBmdW5jdGlvbihyLGksbyxhLHMpe3ZhciBjLGwsdSxkLGYscCxtLGgsdj1yLmluZGV4T2YoXCIuXCIpLGc9RCxFPVA7Zm9yKHY+PTAmJihkPVYsVj0wLHI9ci5yZXBsYWNlKFwiLlwiLFwiXCIpLHA9KGg9bmV3IGooaSkpLnBvdyhyLmxlbmd0aC12KSxWPWQsaC5jPXQoYih5KHAuYykscC5lLFwiMFwiKSwxMCxvLGUpLGguZT1oLmMubGVuZ3RoKSx1PWQ9KG09dChyLGksbyxzPyhjPUgsZSk6KGM9ZSxIKSkpLmxlbmd0aDswPT1tWy0tZF07bS5wb3AoKSk7aWYoIW1bMF0pcmV0dXJuIGMuY2hhckF0KDApO2lmKHY8MD8tLXU6KHAuYz1tLHAuZT11LHAucz1hLG09KHA9bihwLGgsZyxFLG8pKS5jLGY9cC5yLHU9cC5lKSx2PW1bbD11K2crMV0sZD1vLzIsZj1mfHxsPDB8fG51bGwhPW1bbCsxXSxmPUU8ND8obnVsbCE9dnx8ZikmJigwPT1FfHxFPT0ocC5zPDA/MzoyKSk6dj5kfHx2PT1kJiYoND09RXx8Znx8Nj09RSYmMSZtW2wtMV18fEU9PShwLnM8MD84OjcpKSxsPDF8fCFtWzBdKXI9Zj9iKGMuY2hhckF0KDEpLC1nLGMuY2hhckF0KDApKTpjLmNoYXJBdCgwKTtlbHNle2lmKG0ubGVuZ3RoPWwsZilmb3IoLS1vOysrbVstLWxdPm87KW1bbF09MCxsfHwoKyt1LG09WzFdLmNvbmNhdChtKSk7Zm9yKGQ9bS5sZW5ndGg7IW1bLS1kXTspO2Zvcih2PTAscj1cIlwiO3Y8PWQ7cis9Yy5jaGFyQXQobVt2KytdKSk7cj1iKHIsdSxjLmNoYXJBdCgwKSl9cmV0dXJuIHJ9fSgpLG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt2YXIgcixpLG8sYSxzPTAsYz1lLmxlbmd0aCxsPXQlaCx1PXQvaHwwO2ZvcihlPWUuc2xpY2UoKTtjLS07KXM9KChpPWwqKG89ZVtjXSVoKSsocj11Km8rKGE9ZVtjXS9ofDApKmwpJWgqaCtzKS9ufDApKyhyL2h8MCkrdSphLGVbY109aSVuO3JldHVybiBzJiYoZT1bc10uY29uY2F0KGUpKSxlfWZ1bmN0aW9uIHQoZSx0LG4scil7dmFyIGksbztpZihuIT1yKW89bj5yPzE6LTE7ZWxzZSBmb3IoaT1vPTA7aTxuO2krKylpZihlW2ldIT10W2ldKXtvPWVbaV0+dFtpXT8xOi0xO2JyZWFrfXJldHVybiBvfWZ1bmN0aW9uIG4oZSx0LG4scil7Zm9yKHZhciBpPTA7bi0tOyllW25dLT1pLGk9ZVtuXTx0W25dPzE6MCxlW25dPWkqcitlW25dLXRbbl07Zm9yKDshZVswXSYmZS5sZW5ndGg+MTtlLnNwbGljZSgwLDEpKTt9cmV0dXJuIGZ1bmN0aW9uKHIsaSxvLGEscyl7dmFyIGwsdSxwLG0saCx2LHksRSxfLEksUyxiLFQsQyxBLFIsayxPPXIucz09aS5zPzE6LTEsTj1yLmMsdz1pLmM7aWYoIShOJiZOWzBdJiZ3JiZ3WzBdKSlyZXR1cm4gbmV3IGooci5zJiZpLnMmJihOPyF3fHxOWzBdIT13WzBdOncpP04mJjA9PU5bMF18fCF3PzAqTzpPLzA6TmFOKTtmb3IoXz0oRT1uZXcgaihPKSkuYz1bXSxPPW8rKHU9ci5lLWkuZSkrMSxzfHwocz1kLHU9ZyhyLmUvZiktZyhpLmUvZiksTz1PL2Z8MCkscD0wO3dbcF09PShOW3BdfHwwKTtwKyspO2lmKHdbcF0+KE5bcF18fDApJiZ1LS0sTzwwKV8ucHVzaCgxKSxtPSEwO2Vsc2V7Zm9yKEM9Ti5sZW5ndGgsUj13Lmxlbmd0aCxwPTAsTys9MiwoaD1jKHMvKHdbMF0rMSkpKT4xJiYodz1lKHcsaCxzKSxOPWUoTixoLHMpLFI9dy5sZW5ndGgsQz1OLmxlbmd0aCksVD1SLFM9KEk9Ti5zbGljZSgwLFIpKS5sZW5ndGg7UzxSO0lbUysrXT0wKTtrPXcuc2xpY2UoKSxrPVswXS5jb25jYXQoayksQT13WzBdLHdbMV0+PXMvMiYmQSsrO2Rve2lmKGg9MCwobD10KHcsSSxSLFMpKTwwKXtpZihiPUlbMF0sUiE9UyYmKGI9YipzKyhJWzFdfHwwKSksKGg9YyhiL0EpKT4xKWZvcihoPj1zJiYoaD1zLTEpLHk9KHY9ZSh3LGgscykpLmxlbmd0aCxTPUkubGVuZ3RoOzE9PXQodixJLHksUyk7KWgtLSxuKHYsUjx5P2s6dyx5LHMpLHk9di5sZW5ndGgsbD0xO2Vsc2UgMD09aCYmKGw9aD0xKSx5PSh2PXcuc2xpY2UoKSkubGVuZ3RoO2lmKHk8UyYmKHY9WzBdLmNvbmNhdCh2KSksbihJLHYsUyxzKSxTPUkubGVuZ3RoLC0xPT1sKWZvcig7dCh3LEksUixTKTwxOyloKyssbihJLFI8Uz9rOncsUyxzKSxTPUkubGVuZ3RofWVsc2UgMD09PWwmJihoKyssST1bMF0pO19bcCsrXT1oLElbMF0/SVtTKytdPU5bVF18fDA6KEk9W05bVF1dLFM9MSl9d2hpbGUoKFQrKzxDfHxudWxsIT1JWzBdKSYmTy0tKTttPW51bGwhPUlbMF0sX1swXXx8Xy5zcGxpY2UoMCwxKX1pZihzPT1kKXtmb3IocD0xLE89X1swXTtPPj0xMDtPLz0xMCxwKyspO1koRSxvKyhFLmU9cCt1KmYtMSkrMSxhLG0pfWVsc2UgRS5lPXUsRS5yPSttO3JldHVybiBFfX0oKSxDPS9eKC0/KTAoW3hib10pKD89XFx3W1xcdy5dKiQpL2ksQT0vXihbXi5dKylcXC4kLyxSPS9eXFwuKFteLl0rKSQvLGs9L14tPyhJbmZpbml0eXxOYU4pJC8sTz0vXlxccypcXCsoPz1bXFx3Ll0pfF5cXHMrfFxccyskL2csaT1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvPW4/dDp0LnJlcGxhY2UoTyxcIlwiKTtpZihrLnRlc3QobykpZS5zPWlzTmFOKG8pP251bGw6bzwwPy0xOjE7ZWxzZXtpZighbiYmKG89by5yZXBsYWNlKEMsKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gaT1cInhcIj09KG49bi50b0xvd2VyQ2FzZSgpKT8xNjpcImJcIj09bj8yOjgsciYmciE9aT9lOnR9KSksciYmKGk9cixvPW8ucmVwbGFjZShBLFwiJDFcIikucmVwbGFjZShSLFwiMC4kMVwiKSksdCE9bykpcmV0dXJuIG5ldyBqKG8saSk7aWYoai5ERUJVRyl0aHJvdyBFcnJvcihsK1wiTm90IGFcIisocj9cIiBiYXNlIFwiK3I6XCJcIikrXCIgbnVtYmVyOiBcIit0KTtlLnM9bnVsbH1lLmM9ZS5lPW51bGx9LE4uYWJzb2x1dGVWYWx1ZT1OLmFicz1mdW5jdGlvbigpe3ZhciBlPW5ldyBqKHRoaXMpO3JldHVybiBlLnM8MCYmKGUucz0xKSxlfSxOLmNvbXBhcmVkVG89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gRSh0aGlzLG5ldyBqKGUsdCkpfSxOLmRlY2ltYWxQbGFjZXM9Ti5kcD1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvPXRoaXM7aWYobnVsbCE9ZSlyZXR1cm4gXyhlLDAsdiksbnVsbD09dD90PVA6Xyh0LDAsOCksWShuZXcgaihvKSxlK28uZSsxLHQpO2lmKCEobj1vLmMpKXJldHVybiBudWxsO2lmKHI9KChpPW4ubGVuZ3RoLTEpLWcodGhpcy5lL2YpKSpmLGk9bltpXSlmb3IoO2klMTA9PTA7aS89MTAsci0tKTtyZXR1cm4gcjwwJiYocj0wKSxyfSxOLmRpdmlkZWRCeT1OLmRpdj1mdW5jdGlvbihlLHQpe3JldHVybiBuKHRoaXMsbmV3IGooZSx0KSxELFApfSxOLmRpdmlkZWRUb0ludGVnZXJCeT1OLmlkaXY9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbih0aGlzLG5ldyBqKGUsdCksMCwxKX0sTi5leHBvbmVudGlhdGVkQnk9Ti5wb3c9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxhLHUsZCxwLG09dGhpcztpZigoZT1uZXcgaihlKSkuYyYmIWUuaXNJbnRlZ2VyKCkpdGhyb3cgRXJyb3IobCtcIkV4cG9uZW50IG5vdCBhbiBpbnRlZ2VyOiBcIitxKGUpKTtpZihudWxsIT10JiYodD1uZXcgaih0KSksYT1lLmU+MTQsIW0uY3x8IW0uY1swXXx8MT09bS5jWzBdJiYhbS5lJiYxPT1tLmMubGVuZ3RofHwhZS5jfHwhZS5jWzBdKXJldHVybiBwPW5ldyBqKE1hdGgucG93KCtxKG0pLGE/ZS5zKigyLUkoZSkpOitxKGUpKSksdD9wLm1vZCh0KTpwO2lmKHU9ZS5zPDAsdCl7aWYodC5jPyF0LmNbMF06IXQucylyZXR1cm4gbmV3IGooTmFOKTsocj0hdSYmbS5pc0ludGVnZXIoKSYmdC5pc0ludGVnZXIoKSkmJihtPW0ubW9kKHQpKX1lbHNle2lmKGUuZT45JiYobS5lPjB8fG0uZTwtMXx8KDA9PW0uZT9tLmNbMF0+MXx8YSYmbS5jWzFdPj0yNGU3Om0uY1swXTw4ZTEzfHxhJiZtLmNbMF08PTk5OTk5NzVlNykpKXJldHVybiBvPW0uczwwJiZJKGUpPy0wOjAsbS5lPi0xJiYobz0xL28pLG5ldyBqKHU/MS9vOm8pO1YmJihvPXMoVi9mKzIpKX1mb3IoYT8obj1uZXcgaiguNSksdSYmKGUucz0xKSxkPUkoZSkpOmQ9KGk9TWF0aC5hYnMoK3EoZSkpKSUyLHA9bmV3IGoodyk7Oyl7aWYoZCl7aWYoIShwPXAudGltZXMobSkpLmMpYnJlYWs7bz9wLmMubGVuZ3RoPm8mJihwLmMubGVuZ3RoPW8pOnImJihwPXAubW9kKHQpKX1pZihpKXtpZigwPT09KGk9YyhpLzIpKSlicmVhaztkPWklMn1lbHNlIGlmKFkoZT1lLnRpbWVzKG4pLGUuZSsxLDEpLGUuZT4xNClkPUkoZSk7ZWxzZXtpZigwPT0oaT0rcShlKSkpYnJlYWs7ZD1pJTJ9bT1tLnRpbWVzKG0pLG8/bS5jJiZtLmMubGVuZ3RoPm8mJihtLmMubGVuZ3RoPW8pOnImJihtPW0ubW9kKHQpKX1yZXR1cm4gcj9wOih1JiYocD13LmRpdihwKSksdD9wLm1vZCh0KTpvP1kocCxWLFAsdm9pZCAwKTpwKX0sTi5pbnRlZ2VyVmFsdWU9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IGoodGhpcyk7cmV0dXJuIG51bGw9PWU/ZT1QOl8oZSwwLDgpLFkodCx0LmUrMSxlKX0sTi5pc0VxdWFsVG89Ti5lcT1mdW5jdGlvbihlLHQpe3JldHVybiAwPT09RSh0aGlzLG5ldyBqKGUsdCkpfSxOLmlzRmluaXRlPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmN9LE4uaXNHcmVhdGVyVGhhbj1OLmd0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEUodGhpcyxuZXcgaihlLHQpKT4wfSxOLmlzR3JlYXRlclRoYW5PckVxdWFsVG89Ti5ndGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMT09PSh0PUUodGhpcyxuZXcgaihlLHQpKSl8fDA9PT10fSxOLmlzSW50ZWdlcj1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5jJiZnKHRoaXMuZS9mKT50aGlzLmMubGVuZ3RoLTJ9LE4uaXNMZXNzVGhhbj1OLmx0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEUodGhpcyxuZXcgaihlLHQpKTwwfSxOLmlzTGVzc1RoYW5PckVxdWFsVG89Ti5sdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4tMT09PSh0PUUodGhpcyxuZXcgaihlLHQpKSl8fDA9PT10fSxOLmlzTmFOPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuc30sTi5pc05lZ2F0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuczwwfSxOLmlzUG9zaXRpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zPjB9LE4uaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmMmJjA9PXRoaXMuY1swXX0sTi5taW51cz1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvLGE9dGhpcyxzPWEucztpZih0PShlPW5ldyBqKGUsdCkpLnMsIXN8fCF0KXJldHVybiBuZXcgaihOYU4pO2lmKHMhPXQpcmV0dXJuIGUucz0tdCxhLnBsdXMoZSk7dmFyIGM9YS5lL2YsbD1lLmUvZix1PWEuYyxwPWUuYztpZighY3x8IWwpe2lmKCF1fHwhcClyZXR1cm4gdT8oZS5zPS10LGUpOm5ldyBqKHA/YTpOYU4pO2lmKCF1WzBdfHwhcFswXSlyZXR1cm4gcFswXT8oZS5zPS10LGUpOm5ldyBqKHVbMF0/YTozPT1QPy0wOjApfWlmKGM9ZyhjKSxsPWcobCksdT11LnNsaWNlKCkscz1jLWwpe2Zvcigobz1zPDApPyhzPS1zLGk9dSk6KGw9YyxpPXApLGkucmV2ZXJzZSgpLHQ9czt0LS07aS5wdXNoKDApKTtpLnJldmVyc2UoKX1lbHNlIGZvcihyPShvPShzPXUubGVuZ3RoKTwodD1wLmxlbmd0aCkpP3M6dCxzPXQ9MDt0PHI7dCsrKWlmKHVbdF0hPXBbdF0pe289dVt0XTxwW3RdO2JyZWFrfWlmKG8mJihpPXUsdT1wLHA9aSxlLnM9LWUucyksKHQ9KHI9cC5sZW5ndGgpLShuPXUubGVuZ3RoKSk+MClmb3IoO3QtLTt1W24rK109MCk7Zm9yKHQ9ZC0xO3I+czspe2lmKHVbLS1yXTxwW3JdKXtmb3Iobj1yO24mJiF1Wy0tbl07dVtuXT10KTstLXVbbl0sdVtyXSs9ZH11W3JdLT1wW3JdfWZvcig7MD09dVswXTt1LnNwbGljZSgwLDEpLC0tbCk7cmV0dXJuIHVbMF0/SyhlLHUsbCk6KGUucz0zPT1QPy0xOjEsZS5jPVtlLmU9MF0sZSl9LE4ubW9kdWxvPU4ubW9kPWZ1bmN0aW9uKGUsdCl7dmFyIHIsaSxvPXRoaXM7cmV0dXJuIGU9bmV3IGooZSx0KSwhby5jfHwhZS5zfHxlLmMmJiFlLmNbMF0/bmV3IGooTmFOKTohZS5jfHxvLmMmJiFvLmNbMF0/bmV3IGoobyk6KDk9PUI/KGk9ZS5zLGUucz0xLHI9bihvLGUsMCwzKSxlLnM9aSxyLnMqPWkpOnI9bihvLGUsMCxCKSwoZT1vLm1pbnVzKHIudGltZXMoZSkpKS5jWzBdfHwxIT1CfHwoZS5zPW8ucyksZSl9LE4ubXVsdGlwbGllZEJ5PU4udGltZXM9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxhLHMsYyxsLHUscCxtLHYseSxFLF8sST10aGlzLFM9SS5jLGI9KGU9bmV3IGooZSx0KSkuYztpZighKFMmJmImJlNbMF0mJmJbMF0pKXJldHVybiFJLnN8fCFlLnN8fFMmJiFTWzBdJiYhYnx8YiYmIWJbMF0mJiFTP2UuYz1lLmU9ZS5zPW51bGw6KGUucyo9SS5zLFMmJmI/KGUuYz1bMF0sZS5lPTApOmUuYz1lLmU9bnVsbCksZTtmb3Iocj1nKEkuZS9mKStnKGUuZS9mKSxlLnMqPUkucywoYz1TLmxlbmd0aCk8KHA9Yi5sZW5ndGgpJiYoeT1TLFM9YixiPXksaT1jLGM9cCxwPWkpLGk9YytwLHk9W107aS0tO3kucHVzaCgwKSk7Zm9yKEU9ZCxfPWgsaT1wOy0taT49MDspe2ZvcihuPTAsbT1iW2ldJV8sdj1iW2ldL198MCxvPWkrKGE9Yyk7bz5pOyluPSgobD1tKihsPVNbLS1hXSVfKSsocz12KmwrKHU9U1thXS9ffDApKm0pJV8qXyt5W29dK24pL0V8MCkrKHMvX3wwKSt2KnUseVtvLS1dPWwlRTt5W29dPW59cmV0dXJuIG4/KytyOnkuc3BsaWNlKDAsMSksSyhlLHkscil9LE4ubmVnYXRlZD1mdW5jdGlvbigpe3ZhciBlPW5ldyBqKHRoaXMpO3JldHVybiBlLnM9LWUuc3x8bnVsbCxlfSxOLnBsdXM9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXRoaXMsaT1yLnM7aWYodD0oZT1uZXcgaihlLHQpKS5zLCFpfHwhdClyZXR1cm4gbmV3IGooTmFOKTtpZihpIT10KXJldHVybiBlLnM9LXQsci5taW51cyhlKTt2YXIgbz1yLmUvZixhPWUuZS9mLHM9ci5jLGM9ZS5jO2lmKCFvfHwhYSl7aWYoIXN8fCFjKXJldHVybiBuZXcgaihpLzApO2lmKCFzWzBdfHwhY1swXSlyZXR1cm4gY1swXT9lOm5ldyBqKHNbMF0/cjowKmkpfWlmKG89ZyhvKSxhPWcoYSkscz1zLnNsaWNlKCksaT1vLWEpe2ZvcihpPjA/KGE9byxuPWMpOihpPS1pLG49cyksbi5yZXZlcnNlKCk7aS0tO24ucHVzaCgwKSk7bi5yZXZlcnNlKCl9Zm9yKChpPXMubGVuZ3RoKS0odD1jLmxlbmd0aCk8MCYmKG49YyxjPXMscz1uLHQ9aSksaT0wO3Q7KWk9KHNbLS10XT1zW3RdK2NbdF0raSkvZHwwLHNbdF09ZD09PXNbdF0/MDpzW3RdJWQ7cmV0dXJuIGkmJihzPVtpXS5jb25jYXQocyksKythKSxLKGUscyxhKX0sTi5wcmVjaXNpb249Ti5zZD1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvPXRoaXM7aWYobnVsbCE9ZSYmZSE9PSEhZSlyZXR1cm4gXyhlLDEsdiksbnVsbD09dD90PVA6Xyh0LDAsOCksWShuZXcgaihvKSxlLHQpO2lmKCEobj1vLmMpKXJldHVybiBudWxsO2lmKHI9KGk9bi5sZW5ndGgtMSkqZisxLGk9bltpXSl7Zm9yKDtpJTEwPT0wO2kvPTEwLHItLSk7Zm9yKGk9blswXTtpPj0xMDtpLz0xMCxyKyspO31yZXR1cm4gZSYmby5lKzE+ciYmKHI9by5lKzEpLHJ9LE4uc2hpZnRlZEJ5PWZ1bmN0aW9uKGUpe3JldHVybiBfKGUsLTkwMDcxOTkyNTQ3NDA5OTEscCksdGhpcy50aW1lcyhcIjFlXCIrZSl9LE4uc3F1YXJlUm9vdD1OLnNxcnQ9ZnVuY3Rpb24oKXt2YXIgZSx0LHIsaSxvLGE9dGhpcyxzPWEuYyxjPWEucyxsPWEuZSx1PUQrNCxkPW5ldyBqKFwiMC41XCIpO2lmKDEhPT1jfHwhc3x8IXNbMF0pcmV0dXJuIG5ldyBqKCFjfHxjPDAmJighc3x8c1swXSk/TmFOOnM/YToxLzApO2lmKDA9PShjPU1hdGguc3FydCgrcShhKSkpfHxjPT0xLzA/KCgodD15KHMpKS5sZW5ndGgrbCklMj09MCYmKHQrPVwiMFwiKSxjPU1hdGguc3FydCgrdCksbD1nKChsKzEpLzIpLShsPDB8fGwlMikscj1uZXcgaih0PWM9PTEvMD9cIjVlXCIrbDoodD1jLnRvRXhwb25lbnRpYWwoKSkuc2xpY2UoMCx0LmluZGV4T2YoXCJlXCIpKzEpK2wpKTpyPW5ldyBqKGMrXCJcIiksci5jWzBdKWZvcigoYz0obD1yLmUpK3UpPDMmJihjPTApOzspaWYobz1yLHI9ZC50aW1lcyhvLnBsdXMobihhLG8sdSwxKSkpLHkoby5jKS5zbGljZSgwLGMpPT09KHQ9eShyLmMpKS5zbGljZSgwLGMpKXtpZihyLmU8bCYmLS1jLFwiOTk5OVwiIT0odD10LnNsaWNlKGMtMyxjKzEpKSYmKGl8fFwiNDk5OVwiIT10KSl7K3QmJigrdC5zbGljZSgxKXx8XCI1XCIhPXQuY2hhckF0KDApKXx8KFkocixyLmUrRCsyLDEpLGU9IXIudGltZXMocikuZXEoYSkpO2JyZWFrfWlmKCFpJiYoWShvLG8uZStEKzIsMCksby50aW1lcyhvKS5lcShhKSkpe3I9bzticmVha311Kz00LGMrPTQsaT0xfXJldHVybiBZKHIsci5lK0QrMSxQLGUpfSxOLnRvRXhwb25lbnRpYWw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbCE9ZSYmKF8oZSwwLHYpLGUrKyksWih0aGlzLGUsdCwxKX0sTi50b0ZpeGVkPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGwhPWUmJihfKGUsMCx2KSxlPWUrdGhpcy5lKzEpLFoodGhpcyxlLHQpfSxOLnRvRm9ybWF0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPXRoaXM7aWYobnVsbD09biludWxsIT1lJiZ0JiZcIm9iamVjdFwiPT10eXBlb2YgdD8obj10LHQ9bnVsbCk6ZSYmXCJvYmplY3RcIj09dHlwZW9mIGU/KG49ZSxlPXQ9bnVsbCk6bj1HO2Vsc2UgaWYoXCJvYmplY3RcIiE9dHlwZW9mIG4pdGhyb3cgRXJyb3IobCtcIkFyZ3VtZW50IG5vdCBhbiBvYmplY3Q6IFwiK24pO2lmKHI9aS50b0ZpeGVkKGUsdCksaS5jKXt2YXIgbyxhPXIuc3BsaXQoXCIuXCIpLHM9K24uZ3JvdXBTaXplLGM9K24uc2Vjb25kYXJ5R3JvdXBTaXplLHU9bi5ncm91cFNlcGFyYXRvcnx8XCJcIixkPWFbMF0sZj1hWzFdLHA9aS5zPDAsbT1wP2Quc2xpY2UoMSk6ZCxoPW0ubGVuZ3RoO2lmKGMmJihvPXMscz1jLGM9byxoLT1vKSxzPjAmJmg+MCl7Zm9yKG89aCVzfHxzLGQ9bS5zdWJzdHIoMCxvKTtvPGg7bys9cylkKz11K20uc3Vic3RyKG8scyk7Yz4wJiYoZCs9dSttLnNsaWNlKG8pKSxwJiYoZD1cIi1cIitkKX1yPWY/ZCsobi5kZWNpbWFsU2VwYXJhdG9yfHxcIlwiKSsoKGM9K24uZnJhY3Rpb25Hcm91cFNpemUpP2YucmVwbGFjZShuZXcgUmVnRXhwKFwiXFxcXGR7XCIrYytcIn1cXFxcQlwiLFwiZ1wiKSxcIiQmXCIrKG4uZnJhY3Rpb25Hcm91cFNlcGFyYXRvcnx8XCJcIikpOmYpOmR9cmV0dXJuKG4ucHJlZml4fHxcIlwiKStyKyhuLnN1ZmZpeHx8XCJcIil9LE4udG9GcmFjdGlvbj1mdW5jdGlvbihlKXt2YXIgdCxyLGksbyxhLHMsYyx1LGQscCxoLHYsZz10aGlzLEU9Zy5jO2lmKG51bGwhPWUmJighKGM9bmV3IGooZSkpLmlzSW50ZWdlcigpJiYoYy5jfHwxIT09Yy5zKXx8Yy5sdCh3KSkpdGhyb3cgRXJyb3IobCtcIkFyZ3VtZW50IFwiKyhjLmlzSW50ZWdlcigpP1wib3V0IG9mIHJhbmdlOiBcIjpcIm5vdCBhbiBpbnRlZ2VyOiBcIikrcShjKSk7aWYoIUUpcmV0dXJuIG5ldyBqKGcpO2Zvcih0PW5ldyBqKHcpLGQ9cj1uZXcgaih3KSxpPXU9bmV3IGoodyksdj15KEUpLGE9dC5lPXYubGVuZ3RoLWcuZS0xLHQuY1swXT1tWyhzPWElZik8MD9mK3M6c10sZT0hZXx8Yy5jb21wYXJlZFRvKHQpPjA/YT4wP3Q6ZDpjLHM9eCx4PTEvMCxjPW5ldyBqKHYpLHUuY1swXT0wO3A9bihjLHQsMCwxKSwxIT0obz1yLnBsdXMocC50aW1lcyhpKSkpLmNvbXBhcmVkVG8oZSk7KXI9aSxpPW8sZD11LnBsdXMocC50aW1lcyhvPWQpKSx1PW8sdD1jLm1pbnVzKHAudGltZXMobz10KSksYz1vO3JldHVybiBvPW4oZS5taW51cyhyKSxpLDAsMSksdT11LnBsdXMoby50aW1lcyhkKSkscj1yLnBsdXMoby50aW1lcyhpKSksdS5zPWQucz1nLnMsaD1uKGQsaSxhKj0yLFApLm1pbnVzKGcpLmFicygpLmNvbXBhcmVkVG8obih1LHIsYSxQKS5taW51cyhnKS5hYnMoKSk8MT9bZCxpXTpbdSxyXSx4PXMsaH0sTi50b051bWJlcj1mdW5jdGlvbigpe3JldHVybitxKHRoaXMpfSxOLnRvUHJlY2lzaW9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGwhPWUmJl8oZSwxLHYpLFoodGhpcyxlLHQsMil9LE4udG9TdHJpbmc9ZnVuY3Rpb24oZSl7dmFyIHQsbj10aGlzLGk9bi5zLG89bi5lO3JldHVybiBudWxsPT09bz9pPyh0PVwiSW5maW5pdHlcIixpPDAmJih0PVwiLVwiK3QpKTp0PVwiTmFOXCI6KG51bGw9PWU/dD1vPD1NfHxvPj1MP1MoeShuLmMpLG8pOmIoeShuLmMpLG8sXCIwXCIpOjEwPT09ZSYmVz90PWIoeSgobj1ZKG5ldyBqKG4pLEQrbysxLFApKS5jKSxuLmUsXCIwXCIpOihfKGUsMixILmxlbmd0aCxcIkJhc2VcIiksdD1yKGIoeShuLmMpLG8sXCIwXCIpLDEwLGUsaSwhMCkpLGk8MCYmbi5jWzBdJiYodD1cIi1cIit0KSksdH0sTi52YWx1ZU9mPU4udG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHEodGhpcyl9LE4uX2lzQmlnTnVtYmVyPSEwLG51bGwhPXQmJmouc2V0KHQpLGp9KCksby5kZWZhdWx0PW8uQmlnTnVtYmVyPW8sdm9pZCAwPT09KHI9ZnVuY3Rpb24oKXtyZXR1cm4gb30uY2FsbCh0LG4sdCxlKSl8fChlLmV4cG9ydHM9cil9KCl9LDgyMDg0OmZ1bmN0aW9uKGUpe3ZhciB0O3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9e307ZnVuY3Rpb24gbihyKXtpZih0W3JdKXJldHVybiB0W3JdLmV4cG9ydHM7dmFyIGk9dFtyXT17aTpyLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIGVbcl0uY2FsbChpLmV4cG9ydHMsaSxpLmV4cG9ydHMsbiksaS5sPSEwLGkuZXhwb3J0c31yZXR1cm4gbi5tPWUsbi5jPXQsbi5pPWZ1bmN0aW9uKGUpe3JldHVybiBlfSxuLmQ9ZnVuY3Rpb24oZSx0LHIpe24ubyhlLHQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6cn0pfSxuLm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZSYmZS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGUuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gZX07cmV0dXJuIG4uZCh0LFwiYVwiLHQpLHR9LG4ubz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX0sbi5wPVwiXCIsbihuLnM9MSl9KFtmdW5jdGlvbihlLHQsbil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIHI9bigzKSxpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZvaWQgMD09PWUmJihlPXt9KSx2b2lkIDA9PT10JiYodD17c3BsaXRWYWx1ZXM6ITF9KTt2YXIgbixpPXRoaXM7dGhpcy5oZWFkZXJzTWFwPXt9LGUmJihcInVuZGVmaW5lZFwiIT10eXBlb2YgSGVhZGVycyYmZSBpbnN0YW5jZW9mIEhlYWRlcnM/ci5nZXRIZWFkZXJLZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3IuZ2V0SGVhZGVyVmFsdWVzKGUsbikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5zcGxpdFZhbHVlcz9pLmFwcGVuZChuLHIuc3BsaXRIZWFkZXJWYWx1ZShlKSk6aS5hcHBlbmQobixlKX0pKX0pKTpcIm9iamVjdFwiPT10eXBlb2Yobj1lKSYmXCJvYmplY3RcIj09dHlwZW9mIG4uaGVhZGVyc01hcCYmXCJmdW5jdGlvblwiPT10eXBlb2Ygbi5mb3JFYWNoP2UuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtpLmFwcGVuZChlLHQpfSkpOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBNYXAmJmUgaW5zdGFuY2VvZiBNYXA/ZS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2kuYXBwZW5kKHQsZSl9KSk6XCJzdHJpbmdcIj09dHlwZW9mIGU/dGhpcy5hcHBlbmRGcm9tU3RyaW5nKGUpOlwib2JqZWN0XCI9PXR5cGVvZiBlJiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1lW3RdO0FycmF5LmlzQXJyYXkobik/bi5mb3JFYWNoKChmdW5jdGlvbihlKXtpLmFwcGVuZCh0LGUpfSkpOmkuYXBwZW5kKHQsbil9KSkpfXJldHVybiBlLnByb3RvdHlwZS5hcHBlbmRGcm9tU3RyaW5nPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLnNwbGl0KFwiXFxyXFxuXCIpLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXSxpPXIuaW5kZXhPZihcIjpcIik7aWYoaT4wKXt2YXIgbz1yLnN1YnN0cmluZygwLGkpLnRyaW0oKSxhPXIuc3Vic3RyaW5nKGkrMSkudHJpbSgpO3RoaXMuYXBwZW5kKG8sYSl9fX0sZS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49ci5ub3JtYWxpemVOYW1lKGUpO2lmKHZvaWQgMD09PXQpZGVsZXRlIHRoaXMuaGVhZGVyc01hcFtuXTtlbHNle3ZhciBpPXRoaXMuaGVhZGVyc01hcFtuXTtpZihpKXt2YXIgbz1pLmluZGV4T2YodCk7bz49MCYmaS5zcGxpY2UobywxKSwwPT09aS5sZW5ndGgmJmRlbGV0ZSB0aGlzLmhlYWRlcnNNYXBbbl19fX0sZS5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxpPXIubm9ybWFsaXplTmFtZShlKTtBcnJheS5pc0FycmF5KHRoaXMuaGVhZGVyc01hcFtpXSl8fCh0aGlzLmhlYWRlcnNNYXBbaV09W10pLEFycmF5LmlzQXJyYXkodCk/dC5mb3JFYWNoKChmdW5jdGlvbihlKXtuLmhlYWRlcnNNYXBbaV0ucHVzaChyLm5vcm1hbGl6ZVZhbHVlKGUpKX0pKTp0aGlzLmhlYWRlcnNNYXBbaV0ucHVzaChyLm5vcm1hbGl6ZVZhbHVlKHQpKX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dmFyIG49ci5ub3JtYWxpemVOYW1lKGUpO2lmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBpPVtdO3QuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aS5wdXNoKHIubm9ybWFsaXplVmFsdWUoZSkpfSkpLHRoaXMuaGVhZGVyc01hcFtuXT1pfWVsc2UgdGhpcy5oZWFkZXJzTWFwW25dPVtyLm5vcm1hbGl6ZVZhbHVlKHQpXX0sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5oZWFkZXJzTWFwW3Iubm9ybWFsaXplTmFtZShlKV07aWYoIUFycmF5LmlzQXJyYXkobikpcmV0dXJuITE7aWYodm9pZCAwIT09dCl7dmFyIGk9ci5ub3JtYWxpemVWYWx1ZSh0KTtyZXR1cm4gbi5pbmRleE9mKGkpPj0wfXJldHVybiEwfSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5oZWFkZXJzTWFwW3Iubm9ybWFsaXplTmFtZShlKV07cmV0dXJuIHZvaWQgMCE9PXQ/dC5jb25jYXQoKTpbXX0sZS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMuaGVhZGVyc01hcCkuZm9yRWFjaCgoZnVuY3Rpb24obil7ZShuLHQuaGVhZGVyc01hcFtuXSl9KSx0aGlzKX0sZS5wcm90b3R5cGUudG9IZWFkZXJzPWZ1bmN0aW9uKCl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEhlYWRlcnMpe3ZhciBlPW5ldyBIZWFkZXJzO3JldHVybiB0aGlzLmZvckVhY2goKGZ1bmN0aW9uKHQsbil7bi5mb3JFYWNoKChmdW5jdGlvbihuKXtlLmFwcGVuZCh0LG4pfSkpfSkpLGV9dGhyb3cgbmV3IEVycm9yKFwiSGVhZGVycyBjbGFzcyBpcyBub3QgZGVmaW5lZFwiKX0sZX0oKTt0LkJyb3dzZXJIZWFkZXJzPWl9LGZ1bmN0aW9uKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgcj1uKDApO3QuQnJvd3NlckhlYWRlcnM9ci5Ccm93c2VySGVhZGVyc30sZnVuY3Rpb24oZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuaXRlcmF0ZUhlYWRlcnM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49ZVtTeW1ib2wuaXRlcmF0b3JdKCkscj1uLm5leHQoKTshci5kb25lOyl0KHIudmFsdWVbMF0pLHI9bi5uZXh0KCl9LHQuaXRlcmF0ZUhlYWRlcnNLZXlzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWUua2V5cygpLHI9bi5uZXh0KCk7IXIuZG9uZTspdChyLnZhbHVlKSxyPW4ubmV4dCgpfX0sZnVuY3Rpb24oZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciByPW4oMik7dC5ub3JtYWxpemVOYW1lPWZ1bmN0aW9uKGUpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiBlJiYoZT1TdHJpbmcoZSkpLC9bXmEtejAtOVxcLSMkJSYnKisuXFxeX2B8fl0vaS50ZXN0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFtZVwiKTtyZXR1cm4gZS50b0xvd2VyQ2FzZSgpfSx0Lm5vcm1hbGl6ZVZhbHVlPWZ1bmN0aW9uKGUpe3JldHVyblwic3RyaW5nXCIhPXR5cGVvZiBlJiYoZT1TdHJpbmcoZSkpLGV9LHQuZ2V0SGVhZGVyVmFsdWVzPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZTtpZihuIGluc3RhbmNlb2YgSGVhZGVycyYmbi5nZXRBbGwpcmV0dXJuIG4uZ2V0QWxsKHQpO3ZhciByPW4uZ2V0KHQpO3JldHVybiByJiZcInN0cmluZ1wiPT10eXBlb2Ygcj9bcl06cn0sdC5nZXRIZWFkZXJLZXlzPWZ1bmN0aW9uKGUpe3ZhciB0PWUsbj17fSxpPVtdO3JldHVybiB0LmtleXM/ci5pdGVyYXRlSGVhZGVyc0tleXModCwoZnVuY3Rpb24oZSl7bltlXXx8KG5bZV09ITAsaS5wdXNoKGUpKX0pKTp0LmZvckVhY2g/dC5mb3JFYWNoKChmdW5jdGlvbihlLHQpe25bdF18fChuW3RdPSEwLGkucHVzaCh0KSl9KSk6ci5pdGVyYXRlSGVhZGVycyh0LChmdW5jdGlvbihlKXt2YXIgdD1lWzBdO25bdF18fChuW3RdPSEwLGkucHVzaCh0KSl9KSksaX0sdC5zcGxpdEhlYWRlclZhbHVlPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiBlLnNwbGl0KFwiLCBcIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5zcGxpdChcIixcIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5wdXNoKGUpfSkpfSkpLHR9fV0pfSxlLmV4cG9ydHM9dCgpfSw4NjAxMDooZSx0LG4pPT57ZnVuY3Rpb24gcihlKXt2YXIgdCxuLGk9XCJcIjtpZihcInN0cmluZ1wiPT10eXBlb2YgZXx8XCJudW1iZXJcIj09dHlwZW9mIGUpaSs9ZTtlbHNlIGlmKFwib2JqZWN0XCI9PXR5cGVvZiBlKWlmKEFycmF5LmlzQXJyYXkoZSkpZm9yKHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdJiYobj1yKGVbdF0pKSYmKGkmJihpKz1cIiBcIiksaSs9bik7ZWxzZSBmb3IodCBpbiBlKWVbdF0mJihpJiYoaSs9XCIgXCIpLGkrPXQpO3JldHVybiBpfW4uZCh0LHtaOigpPT5pfSk7Y29uc3QgaT1mdW5jdGlvbigpe2Zvcih2YXIgZSx0LG49MCxpPVwiXCI7bjxhcmd1bWVudHMubGVuZ3RoOykoZT1hcmd1bWVudHNbbisrXSkmJih0PXIoZSkpJiYoaSYmKGkrPVwiIFwiKSxpKz10KTtyZXR1cm4gaX19LDc2NDg5OihlLHQpPT57dC5wYXJzZT1mdW5jdGlvbihlLHQpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoXCJhcmd1bWVudCBzdHIgbXVzdCBiZSBhIHN0cmluZ1wiKTtmb3IodmFyIG49e30scj0odHx8e30pLmRlY29kZXx8aSxvPTA7bzxlLmxlbmd0aDspe3ZhciBzPWUuaW5kZXhPZihcIj1cIixvKTtpZigtMT09PXMpYnJlYWs7dmFyIGM9ZS5pbmRleE9mKFwiO1wiLG8pO2lmKC0xPT09YyljPWUubGVuZ3RoO2Vsc2UgaWYoYzxzKXtvPWUubGFzdEluZGV4T2YoXCI7XCIscy0xKSsxO2NvbnRpbnVlfXZhciBsPWUuc2xpY2UobyxzKS50cmltKCk7aWYodm9pZCAwPT09bltsXSl7dmFyIHU9ZS5zbGljZShzKzEsYykudHJpbSgpOzM0PT09dS5jaGFyQ29kZUF0KDApJiYodT11LnNsaWNlKDEsLTEpKSxuW2xdPWEodSxyKX1vPWMrMX1yZXR1cm4gbn0sdC5zZXJpYWxpemU9ZnVuY3Rpb24oZSx0LGkpe3ZhciBhPWl8fHt9LHM9YS5lbmNvZGV8fG87aWYoXCJmdW5jdGlvblwiIT10eXBlb2Ygcyl0aHJvdyBuZXcgVHlwZUVycm9yKFwib3B0aW9uIGVuY29kZSBpcyBpbnZhbGlkXCIpO2lmKCFyLnRlc3QoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IG5hbWUgaXMgaW52YWxpZFwiKTt2YXIgYz1zKHQpO2lmKGMmJiFyLnRlc3QoYykpdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IHZhbCBpcyBpbnZhbGlkXCIpO3ZhciBsPWUrXCI9XCIrYztpZihudWxsIT1hLm1heEFnZSl7dmFyIHU9YS5tYXhBZ2UtMDtpZihpc05hTih1KXx8IWlzRmluaXRlKHUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJvcHRpb24gbWF4QWdlIGlzIGludmFsaWRcIik7bCs9XCI7IE1heC1BZ2U9XCIrTWF0aC5mbG9vcih1KX1pZihhLmRvbWFpbil7aWYoIXIudGVzdChhLmRvbWFpbikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIm9wdGlvbiBkb21haW4gaXMgaW52YWxpZFwiKTtsKz1cIjsgRG9tYWluPVwiK2EuZG9tYWlufWlmKGEucGF0aCl7aWYoIXIudGVzdChhLnBhdGgpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJvcHRpb24gcGF0aCBpcyBpbnZhbGlkXCIpO2wrPVwiOyBQYXRoPVwiK2EucGF0aH1pZihhLmV4cGlyZXMpe3ZhciBkPWEuZXhwaXJlcztpZighZnVuY3Rpb24oZSl7cmV0dXJuXCJbb2JqZWN0IERhdGVdXCI9PT1uLmNhbGwoZSl8fGUgaW5zdGFuY2VvZiBEYXRlfShkKXx8aXNOYU4oZC52YWx1ZU9mKCkpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJvcHRpb24gZXhwaXJlcyBpcyBpbnZhbGlkXCIpO2wrPVwiOyBFeHBpcmVzPVwiK2QudG9VVENTdHJpbmcoKX1pZihhLmh0dHBPbmx5JiYobCs9XCI7IEh0dHBPbmx5XCIpLGEuc2VjdXJlJiYobCs9XCI7IFNlY3VyZVwiKSxhLnByaW9yaXR5KXN3aXRjaChcInN0cmluZ1wiPT10eXBlb2YgYS5wcmlvcml0eT9hLnByaW9yaXR5LnRvTG93ZXJDYXNlKCk6YS5wcmlvcml0eSl7Y2FzZVwibG93XCI6bCs9XCI7IFByaW9yaXR5PUxvd1wiO2JyZWFrO2Nhc2VcIm1lZGl1bVwiOmwrPVwiOyBQcmlvcml0eT1NZWRpdW1cIjticmVhaztjYXNlXCJoaWdoXCI6bCs9XCI7IFByaW9yaXR5PUhpZ2hcIjticmVhaztkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoXCJvcHRpb24gcHJpb3JpdHkgaXMgaW52YWxpZFwiKX1pZihhLnNhbWVTaXRlKXN3aXRjaChcInN0cmluZ1wiPT10eXBlb2YgYS5zYW1lU2l0ZT9hLnNhbWVTaXRlLnRvTG93ZXJDYXNlKCk6YS5zYW1lU2l0ZSl7Y2FzZSEwOmwrPVwiOyBTYW1lU2l0ZT1TdHJpY3RcIjticmVhaztjYXNlXCJsYXhcIjpsKz1cIjsgU2FtZVNpdGU9TGF4XCI7YnJlYWs7Y2FzZVwic3RyaWN0XCI6bCs9XCI7IFNhbWVTaXRlPVN0cmljdFwiO2JyZWFrO2Nhc2VcIm5vbmVcIjpsKz1cIjsgU2FtZVNpdGU9Tm9uZVwiO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcihcIm9wdGlvbiBzYW1lU2l0ZSBpcyBpbnZhbGlkXCIpfXJldHVybiBsfTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLHI9L15bXFx1MDAwOVxcdTAwMjAtXFx1MDA3ZVxcdTAwODAtXFx1MDBmZl0rJC87ZnVuY3Rpb24gaShlKXtyZXR1cm4tMSE9PWUuaW5kZXhPZihcIiVcIik/ZGVjb2RlVVJJQ29tcG9uZW50KGUpOmV9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGUpfWZ1bmN0aW9uIGEoZSx0KXt0cnl7cmV0dXJuIHQoZSl9Y2F0Y2godCl7cmV0dXJuIGV9fX0sMTk2NjI6KGUsdCxuKT0+e3ZhciByPW4oNjA2MTQpLGk9big2NjMzMCksbz1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKHIoZSkpcmV0dXJuIGU7dGhyb3cgbyhpKGUpK1wiIGlzIG5vdCBhIGZ1bmN0aW9uXCIpfX0sMTk2NzA6KGUsdCxuKT0+e3ZhciByPW4oNzAxMTEpLGk9U3RyaW5nLG89VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihyKGUpKXJldHVybiBlO3Rocm93IG8oaShlKStcIiBpcyBub3QgYW4gb2JqZWN0XCIpfX0sNjg4ODA6KGUsdCxuKT0+e3ZhciByPW4oMTk3ODEpLGk9bigzMDcwKSxvPW4oNzkxMTQpO2UuZXhwb3J0cz1yP2Z1bmN0aW9uKGUsdCxuKXtyZXR1cm4gaS5mKGUsdCxvKDEsbikpfTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGVbdF09bixlfX0sNzkxMTQ6ZT0+e2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybntlbnVtZXJhYmxlOiEoMSZlKSxjb25maWd1cmFibGU6ISgyJmUpLHdyaXRhYmxlOiEoNCZlKSx2YWx1ZTp0fX19LDQ3MDQ1OihlLHQsbik9Pnt2YXIgcj1uKDU2MzM5KSxpPW4oMzA3MCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbi5nZXQmJnIobi5nZXQsdCx7Z2V0dGVyOiEwfSksbi5zZXQmJnIobi5zZXQsdCx7c2V0dGVyOiEwfSksaS5mKGUsdCxuKX19LDEzMDcyOihlLHQsbik9Pnt2YXIgcj1uKDE3ODU0KSxpPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt0cnl7aShyLGUse3ZhbHVlOnQsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSl9Y2F0Y2gobil7cltlXT10fXJldHVybiB0fX0sMTk3ODE6KGUsdCxuKT0+e3ZhciByPW4oNDcyOTMpO2UuZXhwb3J0cz0hcigoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LDEse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pWzFdfSkpfSw0MTU0OmU9Pnt2YXIgdD1cIm9iamVjdFwiPT10eXBlb2YgZG9jdW1lbnQmJmRvY3VtZW50LmFsbCxuPXZvaWQgMD09PXQmJnZvaWQgMCE9PXQ7ZS5leHBvcnRzPXthbGw6dCxJU19IVE1MRERBOm59fSw4MDMxNzooZSx0LG4pPT57dmFyIHI9bigxNzg1NCksaT1uKDcwMTExKSxvPXIuZG9jdW1lbnQsYT1pKG8pJiZpKG8uY3JlYXRlRWxlbWVudCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBhP28uY3JlYXRlRWxlbWVudChlKTp7fX19LDg4MTEzOmU9PntlLmV4cG9ydHM9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIG5hdmlnYXRvciYmU3RyaW5nKG5hdmlnYXRvci51c2VyQWdlbnQpfHxcIlwifSw3MzkyOihlLHQsbik9Pnt2YXIgcixpLG89bigxNzg1NCksYT1uKDg4MTEzKSxzPW8ucHJvY2VzcyxjPW8uRGVubyxsPXMmJnMudmVyc2lvbnN8fGMmJmMudmVyc2lvbix1PWwmJmwudjg7dSYmKGk9KHI9dS5zcGxpdChcIi5cIikpWzBdPjAmJnJbMF08ND8xOisoclswXStyWzFdKSksIWkmJmEmJighKHI9YS5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pKXx8clsxXT49NzQpJiYocj1hLm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKSkmJihpPStyWzFdKSxlLmV4cG9ydHM9aX0sNDcyOTM6ZT0+e2UuZXhwb3J0cz1mdW5jdGlvbihlKXt0cnl7cmV0dXJuISFlKCl9Y2F0Y2goZSl7cmV0dXJuITB9fX0sMzQzNzQ6KGUsdCxuKT0+e3ZhciByPW4oNDcyOTMpO2UuZXhwb3J0cz0hcigoZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbigpe30uYmluZCgpO3JldHVyblwiZnVuY3Rpb25cIiE9dHlwZW9mIGV8fGUuaGFzT3duUHJvcGVydHkoXCJwcm90b3R5cGVcIil9KSl9LDQ2OTE2OihlLHQsbik9Pnt2YXIgcj1uKDM0Mzc0KSxpPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO2UuZXhwb3J0cz1yP2kuYmluZChpKTpmdW5jdGlvbigpe3JldHVybiBpLmFwcGx5KGksYXJndW1lbnRzKX19LDc2NTMwOihlLHQsbik9Pnt2YXIgcj1uKDE5NzgxKSxpPW4oOTI1OTcpLG89RnVuY3Rpb24ucHJvdG90eXBlLGE9ciYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixzPWkobyxcIm5hbWVcIiksYz1zJiZcInNvbWV0aGluZ1wiPT09ZnVuY3Rpb24oKXt9Lm5hbWUsbD1zJiYoIXJ8fHImJmEobyxcIm5hbWVcIikuY29uZmlndXJhYmxlKTtlLmV4cG9ydHM9e0VYSVNUUzpzLFBST1BFUjpjLENPTkZJR1VSQUJMRTpsfX0sMTcwMjooZSx0LG4pPT57dmFyIHI9bigzNDM3NCksaT1GdW5jdGlvbi5wcm90b3R5cGUsbz1pLmNhbGwsYT1yJiZpLmJpbmQuYmluZChvLG8pO2UuZXhwb3J0cz1yP2E6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG8uYXBwbHkoZSxhcmd1bWVudHMpfX19LDM1MDA1OihlLHQsbik9Pnt2YXIgcj1uKDE3ODU0KSxpPW4oNjA2MTQpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/KG49cltlXSxpKG4pP246dm9pZCAwKTpyW2VdJiZyW2VdW3RdO3ZhciBufX0sNTgxNzM6KGUsdCxuKT0+e3ZhciByPW4oMTk2NjIpLGk9big2ODU1NCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZVt0XTtyZXR1cm4gaShuKT92b2lkIDA6cihuKX19LDE3ODU0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5NYXRoPT1NYXRoJiZlfTtlLmV4cG9ydHM9cihcIm9iamVjdFwiPT10eXBlb2YgZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpcyl8fHIoXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdyYmd2luZG93KXx8cihcIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmc2VsZil8fHIoXCJvYmplY3RcIj09dHlwZW9mIG4uZyYmbi5nKXx8ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKXx8dGhpc3x8RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpfSw5MjU5NzooZSx0LG4pPT57dmFyIHI9bigxNzAyKSxpPW4oNDc5MDgpLG89cih7fS5oYXNPd25Qcm9wZXJ0eSk7ZS5leHBvcnRzPU9iamVjdC5oYXNPd258fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8oaShlKSx0KX19LDM1MDE6ZT0+e2UuZXhwb3J0cz17fX0sNjQ2NjQ6KGUsdCxuKT0+e3ZhciByPW4oMTk3ODEpLGk9big0NzI5Myksbz1uKDgwMzE3KTtlLmV4cG9ydHM9IXImJiFpKChmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkobyhcImRpdlwiKSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pKX0sNDI3ODg6KGUsdCxuKT0+e3ZhciByPW4oMTcwMiksaT1uKDYwNjE0KSxvPW4oNTQ2NSksYT1yKEZ1bmN0aW9uLnRvU3RyaW5nKTtpKG8uaW5zcGVjdFNvdXJjZSl8fChvLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSl9KSxlLmV4cG9ydHM9by5pbnNwZWN0U291cmNlfSwyOTkwOTooZSx0LG4pPT57dmFyIHIsaSxvLGE9big5NDgxMSkscz1uKDE3ODU0KSxjPW4oNzAxMTEpLGw9big2ODg4MCksdT1uKDkyNTk3KSxkPW4oNTQ2NSksZj1uKDYyMDApLHA9bigzNTAxKSxtPVwiT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWRcIixoPXMuVHlwZUVycm9yLHY9cy5XZWFrTWFwO2lmKGF8fGQuc3RhdGUpe3ZhciBnPWQuc3RhdGV8fChkLnN0YXRlPW5ldyB2KTtnLmdldD1nLmdldCxnLmhhcz1nLmhhcyxnLnNldD1nLnNldCxyPWZ1bmN0aW9uKGUsdCl7aWYoZy5oYXMoZSkpdGhyb3cgaChtKTtyZXR1cm4gdC5mYWNhZGU9ZSxnLnNldChlLHQpLHR9LGk9ZnVuY3Rpb24oZSl7cmV0dXJuIGcuZ2V0KGUpfHx7fX0sbz1mdW5jdGlvbihlKXtyZXR1cm4gZy5oYXMoZSl9fWVsc2V7dmFyIHk9ZihcInN0YXRlXCIpO3BbeV09ITAscj1mdW5jdGlvbihlLHQpe2lmKHUoZSx5KSl0aHJvdyBoKG0pO3JldHVybiB0LmZhY2FkZT1lLGwoZSx5LHQpLHR9LGk9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSx5KT9lW3ldOnt9fSxvPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUseSl9fWUuZXhwb3J0cz17c2V0OnIsZ2V0OmksaGFzOm8sZW5mb3JjZTpmdW5jdGlvbihlKXtyZXR1cm4gbyhlKT9pKGUpOnIoZSx7fSl9LGdldHRlckZvcjpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG47aWYoIWModCl8fChuPWkodCkpLnR5cGUhPT1lKXRocm93IGgoXCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsIFwiK2UrXCIgcmVxdWlyZWRcIik7cmV0dXJuIG59fX19LDYwNjE0OihlLHQsbik9Pnt2YXIgcj1uKDQxNTQpLGk9ci5hbGw7ZS5leHBvcnRzPXIuSVNfSFRNTEREQT9mdW5jdGlvbihlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlfHxlPT09aX06ZnVuY3Rpb24oZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZX19LDY4NTU0OmU9PntlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWV9fSw3MDExMTooZSx0LG4pPT57dmFyIHI9big2MDYxNCksaT1uKDQxNTQpLG89aS5hbGw7ZS5leHBvcnRzPWkuSVNfSFRNTEREQT9mdW5jdGlvbihlKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZT9udWxsIT09ZTpyKGUpfHxlPT09b306ZnVuY3Rpb24oZSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGU/bnVsbCE9PWU6cihlKX19LDMxOTEzOmU9PntlLmV4cG9ydHM9ITF9LDU5NjMxOihlLHQsbik9Pnt2YXIgcj1uKDM1MDA1KSxpPW4oNjA2MTQpLG89big0Nzk3NiksYT1uKDQzMzA3KSxzPU9iamVjdDtlLmV4cG9ydHM9YT9mdW5jdGlvbihlKXtyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgZX06ZnVuY3Rpb24oZSl7dmFyIHQ9cihcIlN5bWJvbFwiKTtyZXR1cm4gaSh0KSYmbyh0LnByb3RvdHlwZSxzKGUpKX19LDU2MzM5OihlLHQsbik9Pnt2YXIgcj1uKDE3MDIpLGk9big0NzI5Myksbz1uKDYwNjE0KSxhPW4oOTI1OTcpLHM9bigxOTc4MSksYz1uKDc2NTMwKS5DT05GSUdVUkFCTEUsbD1uKDQyNzg4KSx1PW4oMjk5MDkpLGQ9dS5lbmZvcmNlLGY9dS5nZXQscD1TdHJpbmcsbT1PYmplY3QuZGVmaW5lUHJvcGVydHksaD1yKFwiXCIuc2xpY2UpLHY9cihcIlwiLnJlcGxhY2UpLGc9cihbXS5qb2luKSx5PXMmJiFpKChmdW5jdGlvbigpe3JldHVybiA4IT09bSgoZnVuY3Rpb24oKXt9KSxcImxlbmd0aFwiLHt2YWx1ZTo4fSkubGVuZ3RofSkpLEU9U3RyaW5nKFN0cmluZykuc3BsaXQoXCJTdHJpbmdcIiksXz1lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe1wiU3ltYm9sKFwiPT09aChwKHQpLDAsNykmJih0PVwiW1wiK3YocCh0KSwvXlN5bWJvbFxcKChbXildKilcXCkvLFwiJDFcIikrXCJdXCIpLG4mJm4uZ2V0dGVyJiYodD1cImdldCBcIit0KSxuJiZuLnNldHRlciYmKHQ9XCJzZXQgXCIrdCksKCFhKGUsXCJuYW1lXCIpfHxjJiZlLm5hbWUhPT10KSYmKHM/bShlLFwibmFtZVwiLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMH0pOmUubmFtZT10KSx5JiZuJiZhKG4sXCJhcml0eVwiKSYmZS5sZW5ndGghPT1uLmFyaXR5JiZtKGUsXCJsZW5ndGhcIix7dmFsdWU6bi5hcml0eX0pO3RyeXtuJiZhKG4sXCJjb25zdHJ1Y3RvclwiKSYmbi5jb25zdHJ1Y3Rvcj9zJiZtKGUsXCJwcm90b3R5cGVcIix7d3JpdGFibGU6ITF9KTplLnByb3RvdHlwZSYmKGUucHJvdG90eXBlPXZvaWQgMCl9Y2F0Y2goZSl7fXZhciByPWQoZSk7cmV0dXJuIGEocixcInNvdXJjZVwiKXx8KHIuc291cmNlPWcoRSxcInN0cmluZ1wiPT10eXBlb2YgdD90OlwiXCIpKSxlfTtGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc9XygoZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzKSYmZih0aGlzKS5zb3VyY2V8fGwodGhpcyl9KSxcInRvU3RyaW5nXCIpfSwzMDcwOihlLHQsbik9Pnt2YXIgcj1uKDE5NzgxKSxpPW4oNjQ2NjQpLG89bigzMzUzKSxhPW4oMTk2NzApLHM9bigzNDk0OCksYz1UeXBlRXJyb3IsbD1PYmplY3QuZGVmaW5lUHJvcGVydHksdT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLGQ9XCJlbnVtZXJhYmxlXCIsZj1cImNvbmZpZ3VyYWJsZVwiLHA9XCJ3cml0YWJsZVwiO3QuZj1yP28/ZnVuY3Rpb24oZSx0LG4pe2lmKGEoZSksdD1zKHQpLGEobiksXCJmdW5jdGlvblwiPT10eXBlb2YgZSYmXCJwcm90b3R5cGVcIj09PXQmJlwidmFsdWVcImluIG4mJnAgaW4gbiYmIW5bcF0pe3ZhciByPXUoZSx0KTtyJiZyW3BdJiYoZVt0XT1uLnZhbHVlLG49e2NvbmZpZ3VyYWJsZTpmIGluIG4/bltmXTpyW2ZdLGVudW1lcmFibGU6ZCBpbiBuP25bZF06cltkXSx3cml0YWJsZTohMX0pfXJldHVybiBsKGUsdCxuKX06bDpmdW5jdGlvbihlLHQsbil7aWYoYShlKSx0PXModCksYShuKSxpKXRyeXtyZXR1cm4gbChlLHQsbil9Y2F0Y2goZSl7fWlmKFwiZ2V0XCJpbiBufHxcInNldFwiaW4gbil0aHJvdyBjKFwiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWRcIik7cmV0dXJuXCJ2YWx1ZVwiaW4gbiYmKGVbdF09bi52YWx1ZSksZX19LDQ3OTc2OihlLHQsbik9Pnt2YXIgcj1uKDE3MDIpO2UuZXhwb3J0cz1yKHt9LmlzUHJvdG90eXBlT2YpfSw5MjE0MDooZSx0LG4pPT57dmFyIHI9big0NjkxNiksaT1uKDYwNjE0KSxvPW4oNzAxMTEpLGE9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuLHM7aWYoXCJzdHJpbmdcIj09PXQmJmkobj1lLnRvU3RyaW5nKSYmIW8ocz1yKG4sZSkpKXJldHVybiBzO2lmKGkobj1lLnZhbHVlT2YpJiYhbyhzPXIobixlKSkpcmV0dXJuIHM7aWYoXCJzdHJpbmdcIiE9PXQmJmkobj1lLnRvU3RyaW5nKSYmIW8ocz1yKG4sZSkpKXJldHVybiBzO3Rocm93IGEoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIil9fSw2NzA2NjooZSx0LG4pPT57dmFyIHI9bigxOTY3MCk7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIGU9cih0aGlzKSx0PVwiXCI7cmV0dXJuIGUuaGFzSW5kaWNlcyYmKHQrPVwiZFwiKSxlLmdsb2JhbCYmKHQrPVwiZ1wiKSxlLmlnbm9yZUNhc2UmJih0Kz1cImlcIiksZS5tdWx0aWxpbmUmJih0Kz1cIm1cIiksZS5kb3RBbGwmJih0Kz1cInNcIiksZS51bmljb2RlJiYodCs9XCJ1XCIpLGUudW5pY29kZVNldHMmJih0Kz1cInZcIiksZS5zdGlja3kmJih0Kz1cInlcIiksdH19LDg0NDg4OihlLHQsbik9Pnt2YXIgcj1uKDY4NTU0KSxpPVR5cGVFcnJvcjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYocihlKSl0aHJvdyBpKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIrZSk7cmV0dXJuIGV9fSw2MjAwOihlLHQsbik9Pnt2YXIgcj1uKDcyMzA5KSxpPW4oNjk3MTEpLG89cihcImtleXNcIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBvW2VdfHwob1tlXT1pKGUpKX19LDU0NjU6KGUsdCxuKT0+e3ZhciByPW4oMTc4NTQpLGk9bigxMzA3Miksbz1cIl9fY29yZS1qc19zaGFyZWRfX1wiLGE9cltvXXx8aShvLHt9KTtlLmV4cG9ydHM9YX0sNzIzMDk6KGUsdCxuKT0+e3ZhciByPW4oMzE5MTMpLGk9big1NDY1KTsoZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGlbZV18fChpW2VdPXZvaWQgMCE9PXQ/dDp7fSl9KShcInZlcnNpb25zXCIsW10pLnB1c2goe3ZlcnNpb246XCIzLjMwLjJcIixtb2RlOnI/XCJwdXJlXCI6XCJnbG9iYWxcIixjb3B5cmlnaHQ6XCJcdTAwYTkgMjAxNC0yMDIzIERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpXCIsbGljZW5zZTpcImh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuMzAuMi9MSUNFTlNFXCIsc291cmNlOlwiaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanNcIn0pfSwzNjI5MzooZSx0LG4pPT57dmFyIHI9big3MzkyKSxpPW4oNDcyOTMpLG89bigxNzg1NCkuU3RyaW5nO2UuZXhwb3J0cz0hIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJiFpKChmdW5jdGlvbigpe3ZhciBlPVN5bWJvbCgpO3JldHVybiFvKGUpfHwhKE9iamVjdChlKWluc3RhbmNlb2YgU3ltYm9sKXx8IVN5bWJvbC5zaGFtJiZyJiZyPDQxfSkpfSw0NzkwODooZSx0LG4pPT57dmFyIHI9big4NDQ4OCksaT1PYmplY3Q7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBpKHIoZSkpfX0sNTc1OTM6KGUsdCxuKT0+e3ZhciByPW4oNDY5MTYpLGk9big3MDExMSksbz1uKDU5NjMxKSxhPW4oNTgxNzMpLHM9big5MjE0MCksYz1uKDUxMTIpLGw9VHlwZUVycm9yLHU9YyhcInRvUHJpbWl0aXZlXCIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCFpKGUpfHxvKGUpKXJldHVybiBlO3ZhciBuLGM9YShlLHUpO2lmKGMpe2lmKHZvaWQgMD09PXQmJih0PVwiZGVmYXVsdFwiKSxuPXIoYyxlLHQpLCFpKG4pfHxvKG4pKXJldHVybiBuO3Rocm93IGwoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIil9cmV0dXJuIHZvaWQgMD09PXQmJih0PVwibnVtYmVyXCIpLHMoZSx0KX19LDM0OTQ4OihlLHQsbik9Pnt2YXIgcj1uKDU3NTkzKSxpPW4oNTk2MzEpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1yKGUsXCJzdHJpbmdcIik7cmV0dXJuIGkodCk/dDp0K1wiXCJ9fSw2NjMzMDplPT57dmFyIHQ9U3RyaW5nO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt0cnl7cmV0dXJuIHQoZSl9Y2F0Y2goZSl7cmV0dXJuXCJPYmplY3RcIn19fSw2OTcxMTooZSx0LG4pPT57dmFyIHI9bigxNzAyKSxpPTAsbz1NYXRoLnJhbmRvbSgpLGE9cigxLi50b1N0cmluZyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVyblwiU3ltYm9sKFwiKyh2b2lkIDA9PT1lP1wiXCI6ZSkrXCIpX1wiK2EoKytpK28sMzYpfX0sNDMzMDc6KGUsdCxuKT0+e3ZhciByPW4oMzYyOTMpO2UuZXhwb3J0cz1yJiYhU3ltYm9sLnNoYW0mJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3J9LDMzNTM6KGUsdCxuKT0+e3ZhciByPW4oMTk3ODEpLGk9big0NzI5Myk7ZS5leHBvcnRzPXImJmkoKGZ1bmN0aW9uKCl7cmV0dXJuIDQyIT1PYmplY3QuZGVmaW5lUHJvcGVydHkoKGZ1bmN0aW9uKCl7fSksXCJwcm90b3R5cGVcIix7dmFsdWU6NDIsd3JpdGFibGU6ITF9KS5wcm90b3R5cGV9KSl9LDk0ODExOihlLHQsbik9Pnt2YXIgcj1uKDE3ODU0KSxpPW4oNjA2MTQpLG89ci5XZWFrTWFwO2UuZXhwb3J0cz1pKG8pJiYvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKG8pKX0sNTExMjooZSx0LG4pPT57dmFyIHI9bigxNzg1NCksaT1uKDcyMzA5KSxvPW4oOTI1OTcpLGE9big2OTcxMSkscz1uKDM2MjkzKSxjPW4oNDMzMDcpLGw9ci5TeW1ib2wsdT1pKFwid2tzXCIpLGQ9Yz9sLmZvcnx8bDpsJiZsLndpdGhvdXRTZXR0ZXJ8fGE7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBvKHUsZSl8fCh1W2VdPXMmJm8obCxlKT9sW2VdOmQoXCJTeW1ib2wuXCIrZSkpLHVbZV19fSw5MjA4NzooZSx0LG4pPT57dmFyIHI9bigxNzg1NCksaT1uKDE5NzgxKSxvPW4oNDcwNDUpLGE9big2NzA2Nikscz1uKDQ3MjkzKSxjPXIuUmVnRXhwLGw9Yy5wcm90b3R5cGU7aSYmcygoZnVuY3Rpb24oKXt2YXIgZT0hMDt0cnl7YyhcIi5cIixcImRcIil9Y2F0Y2godCl7ZT0hMX12YXIgdD17fSxuPVwiXCIscj1lP1wiZGdpbXN5XCI6XCJnaW1zeVwiLGk9ZnVuY3Rpb24oZSxyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbis9ciwhMH19KX0sbz17ZG90QWxsOlwic1wiLGdsb2JhbDpcImdcIixpZ25vcmVDYXNlOlwiaVwiLG11bHRpbGluZTpcIm1cIixzdGlja3k6XCJ5XCJ9O2Zvcih2YXIgYSBpbiBlJiYoby5oYXNJbmRpY2VzPVwiZFwiKSxvKWkoYSxvW2FdKTtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihsLFwiZmxhZ3NcIikuZ2V0LmNhbGwodCkhPT1yfHxuIT09cn0pKSYmbyhsLFwiZmxhZ3NcIix7Y29uZmlndXJhYmxlOiEwLGdldDphfSl9LDQ1MDAxOmU9PntmdW5jdGlvbiB0KGUsdCl7dD10fHx7fSx0aGlzLl9jYXBhY2l0eT10LmNhcGFjaXR5LHRoaXMuX2hlYWQ9MCx0aGlzLl90YWlsPTAsQXJyYXkuaXNBcnJheShlKT90aGlzLl9mcm9tQXJyYXkoZSk6KHRoaXMuX2NhcGFjaXR5TWFzaz0zLHRoaXMuX2xpc3Q9bmV3IEFycmF5KDQpKX10LnByb3RvdHlwZS5wZWVrQXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtpZih0PT09KDB8dCkpe3ZhciBuPXRoaXMuc2l6ZSgpO2lmKCEodD49bnx8dDwtbikpcmV0dXJuIHQ8MCYmKHQrPW4pLHQ9dGhpcy5faGVhZCt0JnRoaXMuX2NhcGFjaXR5TWFzayx0aGlzLl9saXN0W3RdfX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnBlZWtBdChlKX0sdC5wcm90b3R5cGUucGVlaz1mdW5jdGlvbigpe2lmKHRoaXMuX2hlYWQhPT10aGlzLl90YWlsKXJldHVybiB0aGlzLl9saXN0W3RoaXMuX2hlYWRdfSx0LnByb3RvdHlwZS5wZWVrRnJvbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wZWVrKCl9LHQucHJvdG90eXBlLnBlZWtCYWNrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGVla0F0KC0xKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLFwibGVuZ3RoXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemUoKX19KSx0LnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hlYWQ9PT10aGlzLl90YWlsPzA6dGhpcy5faGVhZDx0aGlzLl90YWlsP3RoaXMuX3RhaWwtdGhpcy5faGVhZDp0aGlzLl9jYXBhY2l0eU1hc2srMS0odGhpcy5faGVhZC10aGlzLl90YWlsKX0sdC5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbihlKXtpZigwPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcy5zaXplKCk7dmFyIHQ9dGhpcy5fbGlzdC5sZW5ndGg7cmV0dXJuIHRoaXMuX2hlYWQ9dGhpcy5faGVhZC0xK3QmdGhpcy5fY2FwYWNpdHlNYXNrLHRoaXMuX2xpc3RbdGhpcy5faGVhZF09ZSx0aGlzLl90YWlsPT09dGhpcy5faGVhZCYmdGhpcy5fZ3Jvd0FycmF5KCksdGhpcy5fY2FwYWNpdHkmJnRoaXMuc2l6ZSgpPnRoaXMuX2NhcGFjaXR5JiZ0aGlzLnBvcCgpLHRoaXMuX2hlYWQ8dGhpcy5fdGFpbD90aGlzLl90YWlsLXRoaXMuX2hlYWQ6dGhpcy5fY2FwYWNpdHlNYXNrKzEtKHRoaXMuX2hlYWQtdGhpcy5fdGFpbCl9LHQucHJvdG90eXBlLnNoaWZ0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5faGVhZDtpZihlIT09dGhpcy5fdGFpbCl7dmFyIHQ9dGhpcy5fbGlzdFtlXTtyZXR1cm4gdGhpcy5fbGlzdFtlXT12b2lkIDAsdGhpcy5faGVhZD1lKzEmdGhpcy5fY2FwYWNpdHlNYXNrLGU8MiYmdGhpcy5fdGFpbD4xZTQmJnRoaXMuX3RhaWw8PXRoaXMuX2xpc3QubGVuZ3RoPj4+MiYmdGhpcy5fc2hyaW5rQXJyYXkoKSx0fX0sdC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlKXtpZigwPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcy5zaXplKCk7dmFyIHQ9dGhpcy5fdGFpbDtyZXR1cm4gdGhpcy5fbGlzdFt0XT1lLHRoaXMuX3RhaWw9dCsxJnRoaXMuX2NhcGFjaXR5TWFzayx0aGlzLl90YWlsPT09dGhpcy5faGVhZCYmdGhpcy5fZ3Jvd0FycmF5KCksdGhpcy5fY2FwYWNpdHkmJnRoaXMuc2l6ZSgpPnRoaXMuX2NhcGFjaXR5JiZ0aGlzLnNoaWZ0KCksdGhpcy5faGVhZDx0aGlzLl90YWlsP3RoaXMuX3RhaWwtdGhpcy5faGVhZDp0aGlzLl9jYXBhY2l0eU1hc2srMS0odGhpcy5faGVhZC10aGlzLl90YWlsKX0sdC5wcm90b3R5cGUucG9wPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fdGFpbDtpZihlIT09dGhpcy5faGVhZCl7dmFyIHQ9dGhpcy5fbGlzdC5sZW5ndGg7dGhpcy5fdGFpbD1lLTErdCZ0aGlzLl9jYXBhY2l0eU1hc2s7dmFyIG49dGhpcy5fbGlzdFt0aGlzLl90YWlsXTtyZXR1cm4gdGhpcy5fbGlzdFt0aGlzLl90YWlsXT12b2lkIDAsdGhpcy5faGVhZDwyJiZlPjFlNCYmZTw9dD4+PjImJnRoaXMuX3Nocmlua0FycmF5KCksbn19LHQucHJvdG90eXBlLnJlbW92ZU9uZT1mdW5jdGlvbihlKXt2YXIgdD1lO2lmKHQ9PT0oMHx0KSYmdGhpcy5faGVhZCE9PXRoaXMuX3RhaWwpe3ZhciBuPXRoaXMuc2l6ZSgpLHI9dGhpcy5fbGlzdC5sZW5ndGg7aWYoISh0Pj1ufHx0PC1uKSl7dDwwJiYodCs9biksdD10aGlzLl9oZWFkK3QmdGhpcy5fY2FwYWNpdHlNYXNrO3ZhciBpLG89dGhpcy5fbGlzdFt0XTtpZihlPG4vMil7Zm9yKGk9ZTtpPjA7aS0tKXRoaXMuX2xpc3RbdF09dGhpcy5fbGlzdFt0PXQtMStyJnRoaXMuX2NhcGFjaXR5TWFza107dGhpcy5fbGlzdFt0XT12b2lkIDAsdGhpcy5faGVhZD10aGlzLl9oZWFkKzErciZ0aGlzLl9jYXBhY2l0eU1hc2t9ZWxzZXtmb3IoaT1uLTEtZTtpPjA7aS0tKXRoaXMuX2xpc3RbdF09dGhpcy5fbGlzdFt0PXQrMStyJnRoaXMuX2NhcGFjaXR5TWFza107dGhpcy5fbGlzdFt0XT12b2lkIDAsdGhpcy5fdGFpbD10aGlzLl90YWlsLTErciZ0aGlzLl9jYXBhY2l0eU1hc2t9cmV0dXJuIG99fX0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1lLGk9dDtpZihyPT09KDB8cikmJnRoaXMuX2hlYWQhPT10aGlzLl90YWlsKXt2YXIgbz10aGlzLnNpemUoKSxhPXRoaXMuX2xpc3QubGVuZ3RoO2lmKCEocj49b3x8cjwtb3x8dDwxKSl7aWYocjwwJiYocis9byksMT09PXR8fCF0KXJldHVybihuPW5ldyBBcnJheSgxKSlbMF09dGhpcy5yZW1vdmVPbmUociksbjtpZigwPT09ciYmcit0Pj1vKXJldHVybiBuPXRoaXMudG9BcnJheSgpLHRoaXMuY2xlYXIoKSxuO3ZhciBzO2ZvcihyK3Q+byYmKHQ9by1yKSxuPW5ldyBBcnJheSh0KSxzPTA7czx0O3MrKyluW3NdPXRoaXMuX2xpc3RbdGhpcy5faGVhZCtyK3MmdGhpcy5fY2FwYWNpdHlNYXNrXTtpZihyPXRoaXMuX2hlYWQrciZ0aGlzLl9jYXBhY2l0eU1hc2ssZSt0PT09byl7Zm9yKHRoaXMuX3RhaWw9dGhpcy5fdGFpbC10K2EmdGhpcy5fY2FwYWNpdHlNYXNrLHM9dDtzPjA7cy0tKXRoaXMuX2xpc3Rbcj1yKzErYSZ0aGlzLl9jYXBhY2l0eU1hc2tdPXZvaWQgMDtyZXR1cm4gbn1pZigwPT09ZSl7Zm9yKHRoaXMuX2hlYWQ9dGhpcy5faGVhZCt0K2EmdGhpcy5fY2FwYWNpdHlNYXNrLHM9dC0xO3M+MDtzLS0pdGhpcy5fbGlzdFtyPXIrMSthJnRoaXMuX2NhcGFjaXR5TWFza109dm9pZCAwO3JldHVybiBufWlmKHI8by8yKXtmb3IodGhpcy5faGVhZD10aGlzLl9oZWFkK2UrdCthJnRoaXMuX2NhcGFjaXR5TWFzayxzPWU7cz4wO3MtLSl0aGlzLnVuc2hpZnQodGhpcy5fbGlzdFtyPXItMSthJnRoaXMuX2NhcGFjaXR5TWFza10pO2ZvcihyPXRoaXMuX2hlYWQtMSthJnRoaXMuX2NhcGFjaXR5TWFzaztpPjA7KXRoaXMuX2xpc3Rbcj1yLTErYSZ0aGlzLl9jYXBhY2l0eU1hc2tdPXZvaWQgMCxpLS07ZTwwJiYodGhpcy5fdGFpbD1yKX1lbHNle2Zvcih0aGlzLl90YWlsPXIscj1yK3QrYSZ0aGlzLl9jYXBhY2l0eU1hc2sscz1vLSh0K2UpO3M+MDtzLS0pdGhpcy5wdXNoKHRoaXMuX2xpc3RbcisrXSk7Zm9yKHI9dGhpcy5fdGFpbDtpPjA7KXRoaXMuX2xpc3Rbcj1yKzErYSZ0aGlzLl9jYXBhY2l0eU1hc2tdPXZvaWQgMCxpLS19cmV0dXJuIHRoaXMuX2hlYWQ8MiYmdGhpcy5fdGFpbD4xZTQmJnRoaXMuX3RhaWw8PWE+Pj4yJiZ0aGlzLl9zaHJpbmtBcnJheSgpLG59fX0sdC5wcm90b3R5cGUuc3BsaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZTtpZihuPT09KDB8bikpe3ZhciByPXRoaXMuc2l6ZSgpO2lmKG48MCYmKG4rPXIpLCEobj5yKSl7aWYoYXJndW1lbnRzLmxlbmd0aD4yKXt2YXIgaSxvLGEscz1hcmd1bWVudHMubGVuZ3RoLGM9dGhpcy5fbGlzdC5sZW5ndGgsbD0yO2lmKCFyfHxuPHIvMil7Zm9yKG89bmV3IEFycmF5KG4pLGk9MDtpPG47aSsrKW9baV09dGhpcy5fbGlzdFt0aGlzLl9oZWFkK2kmdGhpcy5fY2FwYWNpdHlNYXNrXTtmb3IoMD09PXQ/KGE9W10sbj4wJiYodGhpcy5faGVhZD10aGlzLl9oZWFkK24rYyZ0aGlzLl9jYXBhY2l0eU1hc2spKTooYT10aGlzLnJlbW92ZShuLHQpLHRoaXMuX2hlYWQ9dGhpcy5faGVhZCtuK2MmdGhpcy5fY2FwYWNpdHlNYXNrKTtzPmw7KXRoaXMudW5zaGlmdChhcmd1bWVudHNbLS1zXSk7Zm9yKGk9bjtpPjA7aS0tKXRoaXMudW5zaGlmdChvW2ktMV0pfWVsc2V7dmFyIHU9KG89bmV3IEFycmF5KHItKG4rdCkpKS5sZW5ndGg7Zm9yKGk9MDtpPHU7aSsrKW9baV09dGhpcy5fbGlzdFt0aGlzLl9oZWFkK24rdCtpJnRoaXMuX2NhcGFjaXR5TWFza107Zm9yKDA9PT10PyhhPVtdLG4hPXImJih0aGlzLl90YWlsPXRoaXMuX2hlYWQrbitjJnRoaXMuX2NhcGFjaXR5TWFzaykpOihhPXRoaXMucmVtb3ZlKG4sdCksdGhpcy5fdGFpbD10aGlzLl90YWlsLXUrYyZ0aGlzLl9jYXBhY2l0eU1hc2spO2w8czspdGhpcy5wdXNoKGFyZ3VtZW50c1tsKytdKTtmb3IoaT0wO2k8dTtpKyspdGhpcy5wdXNoKG9baV0pfXJldHVybiBhfXJldHVybiB0aGlzLnJlbW92ZShuLHQpfX19LHQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fbGlzdD1uZXcgQXJyYXkodGhpcy5fbGlzdC5sZW5ndGgpLHRoaXMuX2hlYWQ9MCx0aGlzLl90YWlsPTB9LHQucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGVhZD09PXRoaXMuX3RhaWx9LHQucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29weUFycmF5KCExKX0sdC5wcm90b3R5cGUuX2Zyb21BcnJheT1mdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aCxuPXRoaXMuX25leHRQb3dlck9mMih0KTt0aGlzLl9saXN0PW5ldyBBcnJheShuKSx0aGlzLl9jYXBhY2l0eU1hc2s9bi0xLHRoaXMuX3RhaWw9dDtmb3IodmFyIHI9MDtyPHQ7cisrKXRoaXMuX2xpc3Rbcl09ZVtyXX0sdC5wcm90b3R5cGUuX2NvcHlBcnJheT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX2xpc3Qscj1uLmxlbmd0aCxpPXRoaXMubGVuZ3RoO2lmKCh0fD1pKT09aSYmdGhpcy5faGVhZDx0aGlzLl90YWlsKXJldHVybiB0aGlzLl9saXN0LnNsaWNlKHRoaXMuX2hlYWQsdGhpcy5fdGFpbCk7dmFyIG8sYT1uZXcgQXJyYXkodCkscz0wO2lmKGV8fHRoaXMuX2hlYWQ+dGhpcy5fdGFpbCl7Zm9yKG89dGhpcy5faGVhZDtvPHI7bysrKWFbcysrXT1uW29dO2ZvcihvPTA7bzx0aGlzLl90YWlsO28rKylhW3MrK109bltvXX1lbHNlIGZvcihvPXRoaXMuX2hlYWQ7bzx0aGlzLl90YWlsO28rKylhW3MrK109bltvXTtyZXR1cm4gYX0sdC5wcm90b3R5cGUuX2dyb3dBcnJheT1mdW5jdGlvbigpe2lmKDAhPXRoaXMuX2hlYWQpe3ZhciBlPXRoaXMuX2NvcHlBcnJheSghMCx0aGlzLl9saXN0Lmxlbmd0aDw8MSk7dGhpcy5fdGFpbD10aGlzLl9saXN0Lmxlbmd0aCx0aGlzLl9oZWFkPTAsdGhpcy5fbGlzdD1lfWVsc2UgdGhpcy5fdGFpbD10aGlzLl9saXN0Lmxlbmd0aCx0aGlzLl9saXN0Lmxlbmd0aDw8PTE7dGhpcy5fY2FwYWNpdHlNYXNrPXRoaXMuX2NhcGFjaXR5TWFzazw8MXwxfSx0LnByb3RvdHlwZS5fc2hyaW5rQXJyYXk9ZnVuY3Rpb24oKXt0aGlzLl9saXN0Lmxlbmd0aD4+Pj0xLHRoaXMuX2NhcGFjaXR5TWFzaz4+Pj0xfSx0LnByb3RvdHlwZS5fbmV4dFBvd2VyT2YyPWZ1bmN0aW9uKGUpe3ZhciB0PTE8PE1hdGgubG9nKGUpL01hdGgubG9nKDIpKzE7cmV0dXJuIE1hdGgubWF4KHQsNCl9LGUuZXhwb3J0cz10fSwyNjcyOTplPT57dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxuPVwiflwiO2Z1bmN0aW9uIHIoKXt9ZnVuY3Rpb24gaShlLHQsbil7dGhpcy5mbj1lLHRoaXMuY29udGV4dD10LHRoaXMub25jZT1ufHwhMX1mdW5jdGlvbiBvKGUsdCxyLG8sYSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlIGxpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvblwiKTt2YXIgcz1uZXcgaShyLG98fGUsYSksYz1uP24rdDp0O3JldHVybiBlLl9ldmVudHNbY10/ZS5fZXZlbnRzW2NdLmZuP2UuX2V2ZW50c1tjXT1bZS5fZXZlbnRzW2NdLHNdOmUuX2V2ZW50c1tjXS5wdXNoKHMpOihlLl9ldmVudHNbY109cyxlLl9ldmVudHNDb3VudCsrKSxlfWZ1bmN0aW9uIGEoZSx0KXswPT0tLWUuX2V2ZW50c0NvdW50P2UuX2V2ZW50cz1uZXcgcjpkZWxldGUgZS5fZXZlbnRzW3RdfWZ1bmN0aW9uIHMoKXt0aGlzLl9ldmVudHM9bmV3IHIsdGhpcy5fZXZlbnRzQ291bnQ9MH1PYmplY3QuY3JlYXRlJiYoci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShudWxsKSwobmV3IHIpLl9fcHJvdG9fX3x8KG49ITEpKSxzLnByb3RvdHlwZS5ldmVudE5hbWVzPWZ1bmN0aW9uKCl7dmFyIGUscixpPVtdO2lmKDA9PT10aGlzLl9ldmVudHNDb3VudClyZXR1cm4gaTtmb3IociBpbiBlPXRoaXMuX2V2ZW50cyl0LmNhbGwoZSxyKSYmaS5wdXNoKG4/ci5zbGljZSgxKTpyKTtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz9pLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpKTppfSxzLnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rpb24oZSl7dmFyIHQ9bj9uK2U6ZSxyPXRoaXMuX2V2ZW50c1t0XTtpZighcilyZXR1cm5bXTtpZihyLmZuKXJldHVybltyLmZuXTtmb3IodmFyIGk9MCxvPXIubGVuZ3RoLGE9bmV3IEFycmF5KG8pO2k8bztpKyspYVtpXT1yW2ldLmZuO3JldHVybiBhfSxzLnByb3RvdHlwZS5saXN0ZW5lckNvdW50PWZ1bmN0aW9uKGUpe3ZhciB0PW4/bitlOmUscj10aGlzLl9ldmVudHNbdF07cmV0dXJuIHI/ci5mbj8xOnIubGVuZ3RoOjB9LHMucHJvdG90eXBlLmVtaXQ9ZnVuY3Rpb24oZSx0LHIsaSxvLGEpe3ZhciBzPW4/bitlOmU7aWYoIXRoaXMuX2V2ZW50c1tzXSlyZXR1cm4hMTt2YXIgYyxsLHU9dGhpcy5fZXZlbnRzW3NdLGQ9YXJndW1lbnRzLmxlbmd0aDtpZih1LmZuKXtzd2l0Y2godS5vbmNlJiZ0aGlzLnJlbW92ZUxpc3RlbmVyKGUsdS5mbix2b2lkIDAsITApLGQpe2Nhc2UgMTpyZXR1cm4gdS5mbi5jYWxsKHUuY29udGV4dCksITA7Y2FzZSAyOnJldHVybiB1LmZuLmNhbGwodS5jb250ZXh0LHQpLCEwO2Nhc2UgMzpyZXR1cm4gdS5mbi5jYWxsKHUuY29udGV4dCx0LHIpLCEwO2Nhc2UgNDpyZXR1cm4gdS5mbi5jYWxsKHUuY29udGV4dCx0LHIsaSksITA7Y2FzZSA1OnJldHVybiB1LmZuLmNhbGwodS5jb250ZXh0LHQscixpLG8pLCEwO2Nhc2UgNjpyZXR1cm4gdS5mbi5jYWxsKHUuY29udGV4dCx0LHIsaSxvLGEpLCEwfWZvcihsPTEsYz1uZXcgQXJyYXkoZC0xKTtsPGQ7bCsrKWNbbC0xXT1hcmd1bWVudHNbbF07dS5mbi5hcHBseSh1LmNvbnRleHQsYyl9ZWxzZXt2YXIgZixwPXUubGVuZ3RoO2ZvcihsPTA7bDxwO2wrKylzd2l0Y2godVtsXS5vbmNlJiZ0aGlzLnJlbW92ZUxpc3RlbmVyKGUsdVtsXS5mbix2b2lkIDAsITApLGQpe2Nhc2UgMTp1W2xdLmZuLmNhbGwodVtsXS5jb250ZXh0KTticmVhaztjYXNlIDI6dVtsXS5mbi5jYWxsKHVbbF0uY29udGV4dCx0KTticmVhaztjYXNlIDM6dVtsXS5mbi5jYWxsKHVbbF0uY29udGV4dCx0LHIpO2JyZWFrO2Nhc2UgNDp1W2xdLmZuLmNhbGwodVtsXS5jb250ZXh0LHQscixpKTticmVhaztkZWZhdWx0OmlmKCFjKWZvcihmPTEsYz1uZXcgQXJyYXkoZC0xKTtmPGQ7ZisrKWNbZi0xXT1hcmd1bWVudHNbZl07dVtsXS5mbi5hcHBseSh1W2xdLmNvbnRleHQsYyl9fXJldHVybiEwfSxzLnByb3RvdHlwZS5vbj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG8odGhpcyxlLHQsbiwhMSl9LHMucHJvdG90eXBlLm9uY2U9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBvKHRoaXMsZSx0LG4sITApfSxzLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbihlLHQscixpKXt2YXIgbz1uP24rZTplO2lmKCF0aGlzLl9ldmVudHNbb10pcmV0dXJuIHRoaXM7aWYoIXQpcmV0dXJuIGEodGhpcyxvKSx0aGlzO3ZhciBzPXRoaXMuX2V2ZW50c1tvXTtpZihzLmZuKXMuZm4hPT10fHxpJiYhcy5vbmNlfHxyJiZzLmNvbnRleHQhPT1yfHxhKHRoaXMsbyk7ZWxzZXtmb3IodmFyIGM9MCxsPVtdLHU9cy5sZW5ndGg7Yzx1O2MrKykoc1tjXS5mbiE9PXR8fGkmJiFzW2NdLm9uY2V8fHImJnNbY10uY29udGV4dCE9PXIpJiZsLnB1c2goc1tjXSk7bC5sZW5ndGg/dGhpcy5fZXZlbnRzW29dPTE9PT1sLmxlbmd0aD9sWzBdOmw6YSh0aGlzLG8pfXJldHVybiB0aGlzfSxzLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIGU/KHQ9bj9uK2U6ZSx0aGlzLl9ldmVudHNbdF0mJmEodGhpcyx0KSk6KHRoaXMuX2V2ZW50cz1uZXcgcix0aGlzLl9ldmVudHNDb3VudD0wKSx0aGlzfSxzLnByb3RvdHlwZS5vZmY9cy5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIscy5wcm90b3R5cGUuYWRkTGlzdGVuZXI9cy5wcm90b3R5cGUub24scy5wcmVmaXhlZD1uLHMuRXZlbnRFbWl0dGVyPXMsZS5leHBvcnRzPXN9LDQ0NDU6ZT0+e2UuZXhwb3J0cz1hLGEuZGVmYXVsdD1hLGEuc3RhYmxlPXUsYS5zdGFibGVTdHJpbmdpZnk9dTt2YXIgdD1cIlsuLi5dXCIsbj1cIltDaXJjdWxhcl1cIixyPVtdLGk9W107ZnVuY3Rpb24gbygpe3JldHVybntkZXB0aExpbWl0Ok51bWJlci5NQVhfU0FGRV9JTlRFR0VSLGVkZ2VzTGltaXQ6TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ9fWZ1bmN0aW9uIGEoZSx0LG4sYSl7dmFyIHM7dm9pZCAwPT09YSYmKGE9bygpKSxjKGUsXCJcIiwwLFtdLHZvaWQgMCwwLGEpO3RyeXtzPTA9PT1pLmxlbmd0aD9KU09OLnN0cmluZ2lmeShlLHQsbik6SlNPTi5zdHJpbmdpZnkoZSxmKHQpLG4pfWNhdGNoKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShcIlt1bmFibGUgdG8gc2VyaWFsaXplLCBjaXJjdWxhciByZWZlcmVuY2UgaXMgdG9vIGNvbXBsZXggdG8gYW5hbHl6ZV1cIil9ZmluYWxseXtmb3IoOzAhPT1yLmxlbmd0aDspe3ZhciBsPXIucG9wKCk7ND09PWwubGVuZ3RoP09iamVjdC5kZWZpbmVQcm9wZXJ0eShsWzBdLGxbMV0sbFszXSk6bFswXVtsWzFdXT1sWzJdfX1yZXR1cm4gc31mdW5jdGlvbiBzKGUsdCxuLG8pe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobyxuKTt2b2lkIDAhPT1hLmdldD9hLmNvbmZpZ3VyYWJsZT8oT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sbix7dmFsdWU6ZX0pLHIucHVzaChbbyxuLHQsYV0pKTppLnB1c2goW3QsbixlXSk6KG9bbl09ZSxyLnB1c2goW28sbix0XSkpfWZ1bmN0aW9uIGMoZSxyLGksbyxhLGwsdSl7dmFyIGQ7aWYobCs9MSxcIm9iamVjdFwiPT10eXBlb2YgZSYmbnVsbCE9PWUpe2ZvcihkPTA7ZDxvLmxlbmd0aDtkKyspaWYob1tkXT09PWUpcmV0dXJuIHZvaWQgcyhuLGUscixhKTtpZih2b2lkIDAhPT11LmRlcHRoTGltaXQmJmw+dS5kZXB0aExpbWl0KXJldHVybiB2b2lkIHModCxlLHIsYSk7aWYodm9pZCAwIT09dS5lZGdlc0xpbWl0JiZpKzE+dS5lZGdlc0xpbWl0KXJldHVybiB2b2lkIHModCxlLHIsYSk7aWYoby5wdXNoKGUpLEFycmF5LmlzQXJyYXkoZSkpZm9yKGQ9MDtkPGUubGVuZ3RoO2QrKyljKGVbZF0sZCxkLG8sZSxsLHUpO2Vsc2V7dmFyIGY9T2JqZWN0LmtleXMoZSk7Zm9yKGQ9MDtkPGYubGVuZ3RoO2QrKyl7dmFyIHA9ZltkXTtjKGVbcF0scCxkLG8sZSxsLHUpfX1vLnBvcCgpfX1mdW5jdGlvbiBsKGUsdCl7cmV0dXJuIGU8dD8tMTplPnQ/MTowfWZ1bmN0aW9uIHUoZSx0LG4sYSl7dm9pZCAwPT09YSYmKGE9bygpKTt2YXIgcyxjPWQoZSxcIlwiLDAsW10sdm9pZCAwLDAsYSl8fGU7dHJ5e3M9MD09PWkubGVuZ3RoP0pTT04uc3RyaW5naWZ5KGMsdCxuKTpKU09OLnN0cmluZ2lmeShjLGYodCksbil9Y2F0Y2goZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KFwiW3VuYWJsZSB0byBzZXJpYWxpemUsIGNpcmN1bGFyIHJlZmVyZW5jZSBpcyB0b28gY29tcGxleCB0byBhbmFseXplXVwiKX1maW5hbGx5e2Zvcig7MCE9PXIubGVuZ3RoOyl7dmFyIGw9ci5wb3AoKTs0PT09bC5sZW5ndGg/T2JqZWN0LmRlZmluZVByb3BlcnR5KGxbMF0sbFsxXSxsWzNdKTpsWzBdW2xbMV1dPWxbMl19fXJldHVybiBzfWZ1bmN0aW9uIGQoZSxpLG8sYSxjLHUsZil7dmFyIHA7aWYodSs9MSxcIm9iamVjdFwiPT10eXBlb2YgZSYmbnVsbCE9PWUpe2ZvcihwPTA7cDxhLmxlbmd0aDtwKyspaWYoYVtwXT09PWUpcmV0dXJuIHZvaWQgcyhuLGUsaSxjKTt0cnl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZS50b0pTT04pcmV0dXJufWNhdGNoKGUpe3JldHVybn1pZih2b2lkIDAhPT1mLmRlcHRoTGltaXQmJnU+Zi5kZXB0aExpbWl0KXJldHVybiB2b2lkIHModCxlLGksYyk7aWYodm9pZCAwIT09Zi5lZGdlc0xpbWl0JiZvKzE+Zi5lZGdlc0xpbWl0KXJldHVybiB2b2lkIHModCxlLGksYyk7aWYoYS5wdXNoKGUpLEFycmF5LmlzQXJyYXkoZSkpZm9yKHA9MDtwPGUubGVuZ3RoO3ArKylkKGVbcF0scCxwLGEsZSx1LGYpO2Vsc2V7dmFyIG09e30saD1PYmplY3Qua2V5cyhlKS5zb3J0KGwpO2ZvcihwPTA7cDxoLmxlbmd0aDtwKyspe3ZhciB2PWhbcF07ZChlW3ZdLHYscCxhLGUsdSxmKSxtW3ZdPWVbdl19aWYodm9pZCAwPT09YylyZXR1cm4gbTtyLnB1c2goW2MsaSxlXSksY1tpXT1tfWEucG9wKCl9fWZ1bmN0aW9uIGYoZSl7cmV0dXJuIGU9dm9pZCAwIT09ZT9lOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR9LGZ1bmN0aW9uKHQsbil7aWYoaS5sZW5ndGg+MClmb3IodmFyIHI9MDtyPGkubGVuZ3RoO3IrKyl7dmFyIG89aVtyXTtpZihvWzFdPT09dCYmb1swXT09PW4pe249b1syXSxpLnNwbGljZShyLDEpO2JyZWFrfX1yZXR1cm4gZS5jYWxsKHRoaXMsdCxuKX19fSw4Njc5OihlLHQsbik9Pnt2YXIgcj1uKDIxMjk2KSxpPXtjaGlsZENvbnRleHRUeXBlczohMCxjb250ZXh0VHlwZTohMCxjb250ZXh0VHlwZXM6ITAsZGVmYXVsdFByb3BzOiEwLGRpc3BsYXlOYW1lOiEwLGdldERlZmF1bHRQcm9wczohMCxnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I6ITAsZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOiEwLG1peGluczohMCxwcm9wVHlwZXM6ITAsdHlwZTohMH0sbz17bmFtZTohMCxsZW5ndGg6ITAscHJvdG90eXBlOiEwLGNhbGxlcjohMCxjYWxsZWU6ITAsYXJndW1lbnRzOiEwLGFyaXR5OiEwfSxhPXskJHR5cGVvZjohMCxjb21wYXJlOiEwLGRlZmF1bHRQcm9wczohMCxkaXNwbGF5TmFtZTohMCxwcm9wVHlwZXM6ITAsdHlwZTohMH0scz17fTtmdW5jdGlvbiBjKGUpe3JldHVybiByLmlzTWVtbyhlKT9hOnNbZS4kJHR5cGVvZl18fGl9c1tyLkZvcndhcmRSZWZdPXskJHR5cGVvZjohMCxyZW5kZXI6ITAsZGVmYXVsdFByb3BzOiEwLGRpc3BsYXlOYW1lOiEwLHByb3BUeXBlczohMH0sc1tyLk1lbW9dPWE7dmFyIGw9T2JqZWN0LmRlZmluZVByb3BlcnR5LHU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsZD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixwPU9iamVjdC5nZXRQcm90b3R5cGVPZixtPU9iamVjdC5wcm90b3R5cGU7ZS5leHBvcnRzPWZ1bmN0aW9uIGUodCxuLHIpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiBuKXtpZihtKXt2YXIgaT1wKG4pO2kmJmkhPT1tJiZlKHQsaSxyKX12YXIgYT11KG4pO2QmJihhPWEuY29uY2F0KGQobikpKTtmb3IodmFyIHM9Yyh0KSxoPWMobiksdj0wO3Y8YS5sZW5ndGg7Kyt2KXt2YXIgZz1hW3ZdO2lmKCEob1tnXXx8ciYmcltnXXx8aCYmaFtnXXx8cyYmc1tnXSkpe3ZhciB5PWYobixnKTt0cnl7bCh0LGcseSl9Y2F0Y2goZSl7fX19fXJldHVybiB0fX0sOTYxMDM6KGUsdCk9Pnt2YXIgbj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3Iscj1uP1N5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpOjYwMTAzLGk9bj9TeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpOjYwMTA2LG89bj9TeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIik6NjAxMDcsYT1uP1N5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKTo2MDEwOCxzPW4/U3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpOjYwMTE0LGM9bj9TeW1ib2wuZm9yKFwicmVhY3QucHJvdmlkZXJcIik6NjAxMDksbD1uP1N5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpOjYwMTEwLHU9bj9TeW1ib2wuZm9yKFwicmVhY3QuYXN5bmNfbW9kZVwiKTo2MDExMSxkPW4/U3ltYm9sLmZvcihcInJlYWN0LmNvbmN1cnJlbnRfbW9kZVwiKTo2MDExMSxmPW4/U3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpOjYwMTEyLHA9bj9TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIik6NjAxMTMsbT1uP1N5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpOjYwMTIwLGg9bj9TeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKTo2MDExNSx2PW4/U3ltYm9sLmZvcihcInJlYWN0LmxhenlcIik6NjAxMTYsZz1uP1N5bWJvbC5mb3IoXCJyZWFjdC5ibG9ja1wiKTo2MDEyMSx5PW4/U3ltYm9sLmZvcihcInJlYWN0LmZ1bmRhbWVudGFsXCIpOjYwMTE3LEU9bj9TeW1ib2wuZm9yKFwicmVhY3QucmVzcG9uZGVyXCIpOjYwMTE4LF89bj9TeW1ib2wuZm9yKFwicmVhY3Quc2NvcGVcIik6NjAxMTk7ZnVuY3Rpb24gSShlKXtpZihcIm9iamVjdFwiPT10eXBlb2YgZSYmbnVsbCE9PWUpe3ZhciB0PWUuJCR0eXBlb2Y7c3dpdGNoKHQpe2Nhc2Ugcjpzd2l0Y2goZT1lLnR5cGUpe2Nhc2UgdTpjYXNlIGQ6Y2FzZSBvOmNhc2UgczpjYXNlIGE6Y2FzZSBwOnJldHVybiBlO2RlZmF1bHQ6c3dpdGNoKGU9ZSYmZS4kJHR5cGVvZil7Y2FzZSBsOmNhc2UgZjpjYXNlIHY6Y2FzZSBoOmNhc2UgYzpyZXR1cm4gZTtkZWZhdWx0OnJldHVybiB0fX1jYXNlIGk6cmV0dXJuIHR9fX1mdW5jdGlvbiBTKGUpe3JldHVybiBJKGUpPT09ZH10LkFzeW5jTW9kZT11LHQuQ29uY3VycmVudE1vZGU9ZCx0LkNvbnRleHRDb25zdW1lcj1sLHQuQ29udGV4dFByb3ZpZGVyPWMsdC5FbGVtZW50PXIsdC5Gb3J3YXJkUmVmPWYsdC5GcmFnbWVudD1vLHQuTGF6eT12LHQuTWVtbz1oLHQuUG9ydGFsPWksdC5Qcm9maWxlcj1zLHQuU3RyaWN0TW9kZT1hLHQuU3VzcGVuc2U9cCx0LmlzQXN5bmNNb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBTKGUpfHxJKGUpPT09dX0sdC5pc0NvbmN1cnJlbnRNb2RlPVMsdC5pc0NvbnRleHRDb25zdW1lcj1mdW5jdGlvbihlKXtyZXR1cm4gSShlKT09PWx9LHQuaXNDb250ZXh0UHJvdmlkZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIEkoZSk9PT1jfSx0LmlzRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZSYmbnVsbCE9PWUmJmUuJCR0eXBlb2Y9PT1yfSx0LmlzRm9yd2FyZFJlZj1mdW5jdGlvbihlKXtyZXR1cm4gSShlKT09PWZ9LHQuaXNGcmFnbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gSShlKT09PW99LHQuaXNMYXp5PWZ1bmN0aW9uKGUpe3JldHVybiBJKGUpPT09dn0sdC5pc01lbW89ZnVuY3Rpb24oZSl7cmV0dXJuIEkoZSk9PT1ofSx0LmlzUG9ydGFsPWZ1bmN0aW9uKGUpe3JldHVybiBJKGUpPT09aX0sdC5pc1Byb2ZpbGVyPWZ1bmN0aW9uKGUpe3JldHVybiBJKGUpPT09c30sdC5pc1N0cmljdE1vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIEkoZSk9PT1hfSx0LmlzU3VzcGVuc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIEkoZSk9PT1wfSx0LmlzVmFsaWRFbGVtZW50VHlwZT1mdW5jdGlvbihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZXx8XCJmdW5jdGlvblwiPT10eXBlb2YgZXx8ZT09PW98fGU9PT1kfHxlPT09c3x8ZT09PWF8fGU9PT1wfHxlPT09bXx8XCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lJiYoZS4kJHR5cGVvZj09PXZ8fGUuJCR0eXBlb2Y9PT1ofHxlLiQkdHlwZW9mPT09Y3x8ZS4kJHR5cGVvZj09PWx8fGUuJCR0eXBlb2Y9PT1mfHxlLiQkdHlwZW9mPT09eXx8ZS4kJHR5cGVvZj09PUV8fGUuJCR0eXBlb2Y9PT1ffHxlLiQkdHlwZW9mPT09Zyl9LHQudHlwZU9mPUl9LDIxMjk2OihlLHQsbik9PntlLmV4cG9ydHM9big5NjEwMyl9LDM1MzY5OihlLHQsbik9PntuLmQodCx7WlA6KCk9PklyfSk7dmFyIHI9XCJkZWxldGVcIixpPTUsbz0xPDxpLGE9by0xLHM9e307ZnVuY3Rpb24gYyhlKXtlJiYoZS52YWx1ZT0hMCl9ZnVuY3Rpb24gbCgpe31mdW5jdGlvbiB1KGUpe3JldHVybiB2b2lkIDA9PT1lLnNpemUmJihlLnNpemU9ZS5fX2l0ZXJhdGUoZikpLGUuc2l6ZX1mdW5jdGlvbiBkKGUsdCl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHQpe3ZhciBuPXQ+Pj4wO2lmKFwiXCIrbiE9PXR8fDQyOTQ5NjcyOTU9PT1uKXJldHVybiBOYU47dD1ufXJldHVybiB0PDA/dShlKSt0OnR9ZnVuY3Rpb24gZigpe3JldHVybiEwfWZ1bmN0aW9uIHAoZSx0LG4pe3JldHVybigwPT09ZSYmIWcoZSl8fHZvaWQgMCE9PW4mJmU8PS1uKSYmKHZvaWQgMD09PXR8fHZvaWQgMCE9PW4mJnQ+PW4pfWZ1bmN0aW9uIG0oZSx0KXtyZXR1cm4gdihlLHQsMCl9ZnVuY3Rpb24gaChlLHQpe3JldHVybiB2KGUsdCx0KX1mdW5jdGlvbiB2KGUsdCxuKXtyZXR1cm4gdm9pZCAwPT09ZT9uOmcoZSk/dD09PTEvMD90OjB8TWF0aC5tYXgoMCx0K2UpOnZvaWQgMD09PXR8fHQ9PT1lP2U6MHxNYXRoLm1pbih0LGUpfWZ1bmN0aW9uIGcoZSl7cmV0dXJuIGU8MHx8MD09PWUmJjEvZT09LTEvMH12YXIgeT1cIkBAX19JTU1VVEFCTEVfSVRFUkFCTEVfX0BAXCI7ZnVuY3Rpb24gRShlKXtyZXR1cm4gQm9vbGVhbihlJiZlW3ldKX12YXIgXz1cIkBAX19JTU1VVEFCTEVfS0VZRURfX0BAXCI7ZnVuY3Rpb24gSShlKXtyZXR1cm4gQm9vbGVhbihlJiZlW19dKX12YXIgUz1cIkBAX19JTU1VVEFCTEVfSU5ERVhFRF9fQEBcIjtmdW5jdGlvbiBiKGUpe3JldHVybiBCb29sZWFuKGUmJmVbU10pfWZ1bmN0aW9uIFQoZSl7cmV0dXJuIEkoZSl8fGIoZSl9dmFyIEM9ZnVuY3Rpb24oZSl7cmV0dXJuIEUoZSk/ZTpRKGUpfSxBPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuIEkoZSk/ZTpKKGUpfXJldHVybiBlJiYodC5fX3Byb3RvX189ZSksdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dCx0fShDKSxSPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuIGIoZSk/ZTokKGUpfXJldHVybiBlJiYodC5fX3Byb3RvX189ZSksdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dCx0fShDKSxrPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuIEUoZSkmJiFUKGUpP2U6ZWUoZSl9cmV0dXJuIGUmJih0Ll9fcHJvdG9fXz1lKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSx0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10LHR9KEMpO0MuS2V5ZWQ9QSxDLkluZGV4ZWQ9UixDLlNldD1rO3ZhciBPPVwiQEBfX0lNTVVUQUJMRV9TRVFfX0BAXCI7ZnVuY3Rpb24gTihlKXtyZXR1cm4gQm9vbGVhbihlJiZlW09dKX12YXIgdz1cIkBAX19JTU1VVEFCTEVfUkVDT1JEX19AQFwiO2Z1bmN0aW9uIEQoZSl7cmV0dXJuIEJvb2xlYW4oZSYmZVt3XSl9ZnVuY3Rpb24gUChlKXtyZXR1cm4gRShlKXx8RChlKX12YXIgTT1cIkBAX19JTU1VVEFCTEVfT1JERVJFRF9fQEBcIjtmdW5jdGlvbiBMKGUpe3JldHVybiBCb29sZWFuKGUmJmVbTV0pfXZhciBVPTAseD0xLEY9MixCPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yLFY9XCJAQGl0ZXJhdG9yXCIsRz1CfHxWLEg9ZnVuY3Rpb24oZSl7dGhpcy5uZXh0PWV9O2Z1bmN0aW9uIFcoZSx0LG4scil7dmFyIGk9MD09PWU/dDoxPT09ZT9uOlt0LG5dO3JldHVybiByP3IudmFsdWU9aTpyPXt2YWx1ZTppLGRvbmU6ITF9LHJ9ZnVuY3Rpb24gaigpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19ZnVuY3Rpb24gWihlKXtyZXR1cm4hIUFycmF5LmlzQXJyYXkoZSl8fCEhWShlKX1mdW5jdGlvbiB6KGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLm5leHR9ZnVuY3Rpb24gSyhlKXt2YXIgdD1ZKGUpO3JldHVybiB0JiZ0LmNhbGwoZSl9ZnVuY3Rpb24gWShlKXt2YXIgdD1lJiYoQiYmZVtCXXx8ZVtWXSk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdClyZXR1cm4gdH1ILnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiW0l0ZXJhdG9yXVwifSxILktFWVM9VSxILlZBTFVFUz14LEguRU5UUklFUz1GLEgucHJvdG90eXBlLmluc3BlY3Q9SC5wcm90b3R5cGUudG9Tb3VyY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygpfSxILnByb3RvdHlwZVtHXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfTt2YXIgcT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIFgoZSl7cmV0dXJuISghQXJyYXkuaXNBcnJheShlKSYmXCJzdHJpbmdcIiE9dHlwZW9mIGUpfHxlJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmTnVtYmVyLmlzSW50ZWdlcihlLmxlbmd0aCkmJmUubGVuZ3RoPj0wJiYoMD09PWUubGVuZ3RoPzE9PT1PYmplY3Qua2V5cyhlKS5sZW5ndGg6ZS5oYXNPd25Qcm9wZXJ0eShlLmxlbmd0aC0xKSl9dmFyIFE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtyZXR1cm4gbnVsbD09ZT9vZSgpOlAoZSk/ZS50b1NlcSgpOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj1jZShlKTtpZihyKXJldHVybihuPVkodD1lKSkmJm49PT10LmVudHJpZXM/ci5mcm9tRW50cnlTZXEoKTpmdW5jdGlvbihlKXt2YXIgdD1ZKGUpO3JldHVybiB0JiZ0PT09ZS5rZXlzfShlKT9yLnRvU2V0U2VxKCk6cjtpZihcIm9iamVjdFwiPT10eXBlb2YgZSlyZXR1cm4gbmV3IG5lKGUpO3Rocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBBcnJheSBvciBjb2xsZWN0aW9uIG9iamVjdCBvZiB2YWx1ZXMsIG9yIGtleWVkIG9iamVjdDogXCIrZSl9KGUpfXJldHVybiBlJiYodC5fX3Byb3RvX189ZSksdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dCx0LnByb3RvdHlwZS50b1NlcT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdG9TdHJpbmcoXCJTZXEge1wiLFwifVwiKX0sdC5wcm90b3R5cGUuY2FjaGVSZXN1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5fY2FjaGUmJnRoaXMuX19pdGVyYXRlVW5jYWNoZWQmJih0aGlzLl9jYWNoZT10aGlzLmVudHJ5U2VxKCkudG9BcnJheSgpLHRoaXMuc2l6ZT10aGlzLl9jYWNoZS5sZW5ndGgpLHRoaXN9LHQucHJvdG90eXBlLl9faXRlcmF0ZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX2NhY2hlO2lmKG4pe2Zvcih2YXIgcj1uLmxlbmd0aCxpPTA7aSE9PXI7KXt2YXIgbz1uW3Q/ci0rK2k6aSsrXTtpZighMT09PWUob1sxXSxvWzBdLHRoaXMpKWJyZWFrfXJldHVybiBpfXJldHVybiB0aGlzLl9faXRlcmF0ZVVuY2FjaGVkKGUsdCl9LHQucHJvdG90eXBlLl9faXRlcmF0b3I9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9jYWNoZTtpZihuKXt2YXIgcj1uLmxlbmd0aCxpPTA7cmV0dXJuIG5ldyBIKChmdW5jdGlvbigpe2lmKGk9PT1yKXJldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH07dmFyIG89blt0P3ItKytpOmkrK107cmV0dXJuIFcoZSxvWzBdLG9bMV0pfSkpfXJldHVybiB0aGlzLl9faXRlcmF0b3JVbmNhY2hlZChlLHQpfSx0fShDKSxKPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuIG51bGw9PWU/b2UoKS50b0tleWVkU2VxKCk6RShlKT9JKGUpP2UudG9TZXEoKTplLmZyb21FbnRyeVNlcSgpOkQoZSk/ZS50b1NlcSgpOmFlKGUpfXJldHVybiBlJiYodC5fX3Byb3RvX189ZSksdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dCx0LnByb3RvdHlwZS50b0tleWVkU2VxPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHR9KFEpLCQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtyZXR1cm4gbnVsbD09ZT9vZSgpOkUoZSk/SShlKT9lLmVudHJ5U2VxKCk6ZS50b0luZGV4ZWRTZXEoKTpEKGUpP2UudG9TZXEoKS5lbnRyeVNlcSgpOnNlKGUpfXJldHVybiBlJiYodC5fX3Byb3RvX189ZSksdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dCx0Lm9mPWZ1bmN0aW9uKCl7cmV0dXJuIHQoYXJndW1lbnRzKX0sdC5wcm90b3R5cGUudG9JbmRleGVkU2VxPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX190b1N0cmluZyhcIlNlcSBbXCIsXCJdXCIpfSx0fShRKSxlZT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3JldHVybihFKGUpJiYhVChlKT9lOiQoZSkpLnRvU2V0U2VxKCl9cmV0dXJuIGUmJih0Ll9fcHJvdG9fXz1lKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSx0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10LHQub2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdChhcmd1bWVudHMpfSx0LnByb3RvdHlwZS50b1NldFNlcT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSx0fShRKTtRLmlzU2VxPU4sUS5LZXllZD1KLFEuU2V0PWVlLFEuSW5kZXhlZD0kLFEucHJvdG90eXBlW09dPSEwO3ZhciB0ZT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3RoaXMuX2FycmF5PWUsdGhpcy5zaXplPWUubGVuZ3RofXJldHVybiBlJiYodC5fX3Byb3RvX189ZSksdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dCx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5oYXMoZSk/dGhpcy5fYXJyYXlbZCh0aGlzLGUpXTp0fSx0LnByb3RvdHlwZS5fX2l0ZXJhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy5fYXJyYXkscj1uLmxlbmd0aCxpPTA7aSE9PXI7KXt2YXIgbz10P3ItKytpOmkrKztpZighMT09PWUobltvXSxvLHRoaXMpKWJyZWFrfXJldHVybiBpfSx0LnByb3RvdHlwZS5fX2l0ZXJhdG9yPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fYXJyYXkscj1uLmxlbmd0aCxpPTA7cmV0dXJuIG5ldyBIKChmdW5jdGlvbigpe2lmKGk9PT1yKXJldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH07dmFyIG89dD9yLSsraTppKys7cmV0dXJuIFcoZSxvLG5bb10pfSkpfSx0fSgkKSxuZT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3ZhciB0PU9iamVjdC5rZXlzKGUpLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP09iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk6W10pO3RoaXMuX29iamVjdD1lLHRoaXMuX2tleXM9dCx0aGlzLnNpemU9dC5sZW5ndGh9cmV0dXJuIGUmJih0Ll9fcHJvdG9fXz1lKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSx0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10fHx0aGlzLmhhcyhlKT90aGlzLl9vYmplY3RbZV06dH0sdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiBxLmNhbGwodGhpcy5fb2JqZWN0LGUpfSx0LnByb3RvdHlwZS5fX2l0ZXJhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy5fb2JqZWN0LHI9dGhpcy5fa2V5cyxpPXIubGVuZ3RoLG89MDtvIT09aTspe3ZhciBhPXJbdD9pLSsrbzpvKytdO2lmKCExPT09ZShuW2FdLGEsdGhpcykpYnJlYWt9cmV0dXJuIG99LHQucHJvdG90eXBlLl9faXRlcmF0b3I9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9vYmplY3Qscj10aGlzLl9rZXlzLGk9ci5sZW5ndGgsbz0wO3JldHVybiBuZXcgSCgoZnVuY3Rpb24oKXtpZihvPT09aSlyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9O3ZhciBhPXJbdD9pLSsrbzpvKytdO3JldHVybiBXKGUsYSxuW2FdKX0pKX0sdH0oSik7bmUucHJvdG90eXBlW01dPSEwO3ZhciByZSxpZT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3RoaXMuX2NvbGxlY3Rpb249ZSx0aGlzLnNpemU9ZS5sZW5ndGh8fGUuc2l6ZX1yZXR1cm4gZSYmKHQuX19wcm90b19fPWUpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXQsdC5wcm90b3R5cGUuX19pdGVyYXRlVW5jYWNoZWQ9ZnVuY3Rpb24oZSx0KXtpZih0KXJldHVybiB0aGlzLmNhY2hlUmVzdWx0KCkuX19pdGVyYXRlKGUsdCk7dmFyIG49Syh0aGlzLl9jb2xsZWN0aW9uKSxyPTA7aWYoeihuKSlmb3IodmFyIGk7IShpPW4ubmV4dCgpKS5kb25lJiYhMSE9PWUoaS52YWx1ZSxyKyssdGhpcyk7KTtyZXR1cm4gcn0sdC5wcm90b3R5cGUuX19pdGVyYXRvclVuY2FjaGVkPWZ1bmN0aW9uKGUsdCl7aWYodClyZXR1cm4gdGhpcy5jYWNoZVJlc3VsdCgpLl9faXRlcmF0b3IoZSx0KTt2YXIgbj1LKHRoaXMuX2NvbGxlY3Rpb24pO2lmKCF6KG4pKXJldHVybiBuZXcgSChqKTt2YXIgcj0wO3JldHVybiBuZXcgSCgoZnVuY3Rpb24oKXt2YXIgdD1uLm5leHQoKTtyZXR1cm4gdC5kb25lP3Q6VyhlLHIrKyx0LnZhbHVlKX0pKX0sdH0oJCk7ZnVuY3Rpb24gb2UoKXtyZXR1cm4gcmV8fChyZT1uZXcgdGUoW10pKX1mdW5jdGlvbiBhZShlKXt2YXIgdD1jZShlKTtpZih0KXJldHVybiB0LmZyb21FbnRyeVNlcSgpO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBlKXJldHVybiBuZXcgbmUoZSk7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIEFycmF5IG9yIGNvbGxlY3Rpb24gb2JqZWN0IG9mIFtrLCB2XSBlbnRyaWVzLCBvciBrZXllZCBvYmplY3Q6IFwiK2UpfWZ1bmN0aW9uIHNlKGUpe3ZhciB0PWNlKGUpO2lmKHQpcmV0dXJuIHQ7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIEFycmF5IG9yIGNvbGxlY3Rpb24gb2JqZWN0IG9mIHZhbHVlczogXCIrZSl9ZnVuY3Rpb24gY2UoZSl7cmV0dXJuIFgoZSk/bmV3IHRlKGUpOlooZSk/bmV3IGllKGUpOnZvaWQgMH12YXIgbGU9XCJAQF9fSU1NVVRBQkxFX01BUF9fQEBcIjtmdW5jdGlvbiB1ZShlKXtyZXR1cm4gQm9vbGVhbihlJiZlW2xlXSl9ZnVuY3Rpb24gZGUoZSl7cmV0dXJuIHVlKGUpJiZMKGUpfWZ1bmN0aW9uIGZlKGUpe3JldHVybiBCb29sZWFuKGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuZXF1YWxzJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmhhc2hDb2RlKX1mdW5jdGlvbiBwZShlLHQpe2lmKGU9PT10fHxlIT1lJiZ0IT10KXJldHVybiEwO2lmKCFlfHwhdClyZXR1cm4hMTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnZhbHVlT2YmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHQudmFsdWVPZil7aWYoKGU9ZS52YWx1ZU9mKCkpPT09KHQ9dC52YWx1ZU9mKCkpfHxlIT1lJiZ0IT10KXJldHVybiEwO2lmKCFlfHwhdClyZXR1cm4hMX1yZXR1cm4hIShmZShlKSYmZmUodCkmJmUuZXF1YWxzKHQpKX12YXIgbWU9XCJmdW5jdGlvblwiPT10eXBlb2YgTWF0aC5pbXVsJiYtMj09PU1hdGguaW11bCg0Mjk0OTY3Mjk1LDIpP01hdGguaW11bDpmdW5jdGlvbihlLHQpe3ZhciBuPTY1NTM1JihlfD0wKSxyPTY1NTM1Jih0fD0wKTtyZXR1cm4gbipyKygoZT4+PjE2KSpyK24qKHQ+Pj4xNik8PDE2Pj4+MCl8MH07ZnVuY3Rpb24gaGUoZSl7cmV0dXJuIGU+Pj4xJjEwNzM3NDE4MjR8MzIyMTIyNTQ3MSZlfXZhciB2ZT1PYmplY3QucHJvdG90eXBlLnZhbHVlT2Y7ZnVuY3Rpb24gZ2UoZSl7aWYobnVsbD09ZSlyZXR1cm4geWUoZSk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZS5oYXNoQ29kZSlyZXR1cm4gaGUoZS5oYXNoQ29kZShlKSk7dmFyIHQsbixyLGk9KHQ9ZSkudmFsdWVPZiE9PXZlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnZhbHVlT2Y/dC52YWx1ZU9mKHQpOnQ7aWYobnVsbD09aSlyZXR1cm4geWUoaSk7c3dpdGNoKHR5cGVvZiBpKXtjYXNlXCJib29sZWFuXCI6cmV0dXJuIGk/MTEwODM3ODY1NzoxMTA4Mzc4NjU2O2Nhc2VcIm51bWJlclwiOnJldHVybiBmdW5jdGlvbihlKXtpZihlIT1lfHxlPT09MS8wKXJldHVybiAwO3ZhciB0PTB8ZTtmb3IodCE9PWUmJih0Xj00Mjk0OTY3Mjk1KmUpO2U+NDI5NDk2NzI5NTspdF49ZS89NDI5NDk2NzI5NTtyZXR1cm4gaGUodCl9KGkpO2Nhc2VcInN0cmluZ1wiOnJldHVybiBpLmxlbmd0aD5rZT8odm9pZCAwPT09KHI9d2Vbbj1pXSkmJihyPUVlKG4pLE5lPT09T2UmJihOZT0wLHdlPXt9KSxOZSsrLHdlW25dPXIpLHIpOkVlKGkpO2Nhc2VcIm9iamVjdFwiOmNhc2VcImZ1bmN0aW9uXCI6cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0O2lmKFRlJiZ2b2lkIDAhPT0odD1iZS5nZXQoZSkpKXJldHVybiB0O2lmKHZvaWQgMCE9PSh0PWVbUmVdKSlyZXR1cm4gdDtpZighSWUpe2lmKHZvaWQgMCE9PSh0PWUucHJvcGVydHlJc0VudW1lcmFibGUmJmUucHJvcGVydHlJc0VudW1lcmFibGVbUmVdKSlyZXR1cm4gdDtpZih2b2lkIDAhPT0odD1mdW5jdGlvbihlKXtpZihlJiZlLm5vZGVUeXBlPjApc3dpdGNoKGUubm9kZVR5cGUpe2Nhc2UgMTpyZXR1cm4gZS51bmlxdWVJRDtjYXNlIDk6cmV0dXJuIGUuZG9jdW1lbnRFbGVtZW50JiZlLmRvY3VtZW50RWxlbWVudC51bmlxdWVJRH19KGUpKSlyZXR1cm4gdH1pZih0PVNlKCksVGUpYmUuc2V0KGUsdCk7ZWxzZXtpZih2b2lkIDAhPT1fZSYmITE9PT1fZShlKSl0aHJvdyBuZXcgRXJyb3IoXCJOb24tZXh0ZW5zaWJsZSBvYmplY3RzIGFyZSBub3QgYWxsb3dlZCBhcyBrZXlzLlwiKTtpZihJZSlPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxSZSx7ZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITEsd3JpdGFibGU6ITEsdmFsdWU6dH0pO2Vsc2UgaWYodm9pZCAwIT09ZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSYmZS5wcm9wZXJ0eUlzRW51bWVyYWJsZT09PWUuY29uc3RydWN0b3IucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlKWUucHJvcGVydHlJc0VudW1lcmFibGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxlLnByb3BlcnR5SXNFbnVtZXJhYmxlW1JlXT10O2Vsc2V7aWYodm9pZCAwPT09ZS5ub2RlVHlwZSl0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gc2V0IGEgbm9uLWVudW1lcmFibGUgcHJvcGVydHkgb24gb2JqZWN0LlwiKTtlW1JlXT10fX1yZXR1cm4gdH0oaSk7Y2FzZVwic3ltYm9sXCI6cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PUNlW2VdO3JldHVybiB2b2lkIDAhPT10fHwodD1TZSgpLENlW2VdPXQpLHR9KGkpO2RlZmF1bHQ6aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgaS50b1N0cmluZylyZXR1cm4gRWUoaS50b1N0cmluZygpKTt0aHJvdyBuZXcgRXJyb3IoXCJWYWx1ZSB0eXBlIFwiK3R5cGVvZiBpK1wiIGNhbm5vdCBiZSBoYXNoZWQuXCIpfX1mdW5jdGlvbiB5ZShlKXtyZXR1cm4gbnVsbD09PWU/MTEwODM3ODY1ODoxMTA4Mzc4NjU5fWZ1bmN0aW9uIEVlKGUpe2Zvcih2YXIgdD0wLG49MDtuPGUubGVuZ3RoO24rKyl0PTMxKnQrZS5jaGFyQ29kZUF0KG4pfDA7cmV0dXJuIGhlKHQpfXZhciBfZT1PYmplY3QuaXNFeHRlbnNpYmxlLEllPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sXCJAXCIse30pLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKTtmdW5jdGlvbiBTZSgpe3ZhciBlPSsrQWU7cmV0dXJuIDEwNzM3NDE4MjQmQWUmJihBZT0wKSxlfXZhciBiZSxUZT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBXZWFrTWFwO1RlJiYoYmU9bmV3IFdlYWtNYXApO3ZhciBDZT1PYmplY3QuY3JlYXRlKG51bGwpLEFlPTAsUmU9XCJfX2ltbXV0YWJsZWhhc2hfX1wiO1wiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmKFJlPVN5bWJvbChSZSkpO3ZhciBrZT0xNixPZT0yNTUsTmU9MCx3ZT17fSxEZT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsdCl7dGhpcy5faXRlcj1lLHRoaXMuX3VzZUtleXM9dCx0aGlzLnNpemU9ZS5zaXplfXJldHVybiBlJiYodC5fX3Byb3RvX189ZSksdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dCx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5faXRlci5nZXQoZSx0KX0sdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pdGVyLmhhcyhlKX0sdC5wcm90b3R5cGUudmFsdWVTZXE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXRlci52YWx1ZVNlcSgpfSx0LnByb3RvdHlwZS5yZXZlcnNlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PUZlKHRoaXMsITApO3JldHVybiB0aGlzLl91c2VLZXlzfHwodC52YWx1ZVNlcT1mdW5jdGlvbigpe3JldHVybiBlLl9pdGVyLnRvU2VxKCkucmV2ZXJzZSgpfSksdH0sdC5wcm90b3R5cGUubWFwPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPXhlKHRoaXMsZSx0KTtyZXR1cm4gdGhpcy5fdXNlS2V5c3x8KHIudmFsdWVTZXE9ZnVuY3Rpb24oKXtyZXR1cm4gbi5faXRlci50b1NlcSgpLm1hcChlLHQpfSkscn0sdC5wcm90b3R5cGUuX19pdGVyYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztyZXR1cm4gdGhpcy5faXRlci5fX2l0ZXJhdGUoKGZ1bmN0aW9uKHQscil7cmV0dXJuIGUodCxyLG4pfSksdCl9LHQucHJvdG90eXBlLl9faXRlcmF0b3I9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5faXRlci5fX2l0ZXJhdG9yKGUsdCl9LHR9KEopO0RlLnByb3RvdHlwZVtNXT0hMDt2YXIgUGU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXt0aGlzLl9pdGVyPWUsdGhpcy5zaXplPWUuc2l6ZX1yZXR1cm4gZSYmKHQuX19wcm90b19fPWUpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXQsdC5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2l0ZXIuaW5jbHVkZXMoZSl9LHQucHJvdG90eXBlLl9faXRlcmF0ZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj0wO3JldHVybiB0JiZ1KHRoaXMpLHRoaXMuX2l0ZXIuX19pdGVyYXRlKChmdW5jdGlvbihpKXtyZXR1cm4gZShpLHQ/bi5zaXplLSsrcjpyKyssbil9KSx0KX0sdC5wcm90b3R5cGUuX19pdGVyYXRvcj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj10aGlzLl9pdGVyLl9faXRlcmF0b3IoeCx0KSxpPTA7cmV0dXJuIHQmJnUodGhpcyksbmV3IEgoKGZ1bmN0aW9uKCl7dmFyIG89ci5uZXh0KCk7cmV0dXJuIG8uZG9uZT9vOlcoZSx0P24uc2l6ZS0rK2k6aSsrLG8udmFsdWUsbyl9KSl9LHR9KCQpLE1lPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7dGhpcy5faXRlcj1lLHRoaXMuc2l6ZT1lLnNpemV9cmV0dXJuIGUmJih0Ll9fcHJvdG9fXz1lKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSx0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10LHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faXRlci5pbmNsdWRlcyhlKX0sdC5wcm90b3R5cGUuX19pdGVyYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztyZXR1cm4gdGhpcy5faXRlci5fX2l0ZXJhdGUoKGZ1bmN0aW9uKHQpe3JldHVybiBlKHQsdCxuKX0pLHQpfSx0LnByb3RvdHlwZS5fX2l0ZXJhdG9yPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5faXRlci5fX2l0ZXJhdG9yKHgsdCk7cmV0dXJuIG5ldyBIKChmdW5jdGlvbigpe3ZhciB0PW4ubmV4dCgpO3JldHVybiB0LmRvbmU/dDpXKGUsdC52YWx1ZSx0LnZhbHVlLHQpfSkpfSx0fShlZSksTGU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXt0aGlzLl9pdGVyPWUsdGhpcy5zaXplPWUuc2l6ZX1yZXR1cm4gZSYmKHQuX19wcm90b19fPWUpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXQsdC5wcm90b3R5cGUuZW50cnlTZXE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXRlci50b1NlcSgpfSx0LnByb3RvdHlwZS5fX2l0ZXJhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO3JldHVybiB0aGlzLl9pdGVyLl9faXRlcmF0ZSgoZnVuY3Rpb24odCl7aWYodCl7WWUodCk7dmFyIHI9RSh0KTtyZXR1cm4gZShyP3QuZ2V0KDEpOnRbMV0scj90LmdldCgwKTp0WzBdLG4pfX0pLHQpfSx0LnByb3RvdHlwZS5fX2l0ZXJhdG9yPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5faXRlci5fX2l0ZXJhdG9yKHgsdCk7cmV0dXJuIG5ldyBIKChmdW5jdGlvbigpe2Zvcig7Oyl7dmFyIHQ9bi5uZXh0KCk7aWYodC5kb25lKXJldHVybiB0O3ZhciByPXQudmFsdWU7aWYocil7WWUocik7dmFyIGk9RShyKTtyZXR1cm4gVyhlLGk/ci5nZXQoMCk6clswXSxpP3IuZ2V0KDEpOnJbMV0sdCl9fX0pKX0sdH0oSik7ZnVuY3Rpb24gVWUoZSl7dmFyIHQ9WGUoZSk7cmV0dXJuIHQuX2l0ZXI9ZSx0LnNpemU9ZS5zaXplLHQuZmxpcD1mdW5jdGlvbigpe3JldHVybiBlfSx0LnJldmVyc2U9ZnVuY3Rpb24oKXt2YXIgdD1lLnJldmVyc2UuYXBwbHkodGhpcyk7cmV0dXJuIHQuZmxpcD1mdW5jdGlvbigpe3JldHVybiBlLnJldmVyc2UoKX0sdH0sdC5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIGUuaW5jbHVkZXModCl9LHQuaW5jbHVkZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGUuaGFzKHQpfSx0LmNhY2hlUmVzdWx0PVFlLHQuX19pdGVyYXRlVW5jYWNoZWQ9ZnVuY3Rpb24odCxuKXt2YXIgcj10aGlzO3JldHVybiBlLl9faXRlcmF0ZSgoZnVuY3Rpb24oZSxuKXtyZXR1cm4hMSE9PXQobixlLHIpfSksbil9LHQuX19pdGVyYXRvclVuY2FjaGVkPWZ1bmN0aW9uKHQsbil7aWYodD09PUYpe3ZhciByPWUuX19pdGVyYXRvcih0LG4pO3JldHVybiBuZXcgSCgoZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtpZighZS5kb25lKXt2YXIgdD1lLnZhbHVlWzBdO2UudmFsdWVbMF09ZS52YWx1ZVsxXSxlLnZhbHVlWzFdPXR9cmV0dXJuIGV9KSl9cmV0dXJuIGUuX19pdGVyYXRvcih0PT09eD9VOngsbil9LHR9ZnVuY3Rpb24geGUoZSx0LG4pe3ZhciByPVhlKGUpO3JldHVybiByLnNpemU9ZS5zaXplLHIuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiBlLmhhcyh0KX0sci5nZXQ9ZnVuY3Rpb24ocixpKXt2YXIgbz1lLmdldChyLHMpO3JldHVybiBvPT09cz9pOnQuY2FsbChuLG8scixlKX0sci5fX2l0ZXJhdGVVbmNhY2hlZD1mdW5jdGlvbihyLGkpe3ZhciBvPXRoaXM7cmV0dXJuIGUuX19pdGVyYXRlKChmdW5jdGlvbihlLGksYSl7cmV0dXJuITEhPT1yKHQuY2FsbChuLGUsaSxhKSxpLG8pfSksaSl9LHIuX19pdGVyYXRvclVuY2FjaGVkPWZ1bmN0aW9uKHIsaSl7dmFyIG89ZS5fX2l0ZXJhdG9yKEYsaSk7cmV0dXJuIG5ldyBIKChmdW5jdGlvbigpe3ZhciBpPW8ubmV4dCgpO2lmKGkuZG9uZSlyZXR1cm4gaTt2YXIgYT1pLnZhbHVlLHM9YVswXTtyZXR1cm4gVyhyLHMsdC5jYWxsKG4sYVsxXSxzLGUpLGkpfSkpfSxyfWZ1bmN0aW9uIEZlKGUsdCl7dmFyIG49dGhpcyxyPVhlKGUpO3JldHVybiByLl9pdGVyPWUsci5zaXplPWUuc2l6ZSxyLnJldmVyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sZS5mbGlwJiYoci5mbGlwPWZ1bmN0aW9uKCl7dmFyIHQ9VWUoZSk7cmV0dXJuIHQucmV2ZXJzZT1mdW5jdGlvbigpe3JldHVybiBlLmZsaXAoKX0sdH0pLHIuZ2V0PWZ1bmN0aW9uKG4scil7cmV0dXJuIGUuZ2V0KHQ/bjotMS1uLHIpfSxyLmhhcz1mdW5jdGlvbihuKXtyZXR1cm4gZS5oYXModD9uOi0xLW4pfSxyLmluY2x1ZGVzPWZ1bmN0aW9uKHQpe3JldHVybiBlLmluY2x1ZGVzKHQpfSxyLmNhY2hlUmVzdWx0PVFlLHIuX19pdGVyYXRlPWZ1bmN0aW9uKG4scil7dmFyIGk9dGhpcyxvPTA7cmV0dXJuIHImJnUoZSksZS5fX2l0ZXJhdGUoKGZ1bmN0aW9uKGUsYSl7cmV0dXJuIG4oZSx0P2E6cj9pLnNpemUtKytvOm8rKyxpKX0pLCFyKX0sci5fX2l0ZXJhdG9yPWZ1bmN0aW9uKHIsaSl7dmFyIG89MDtpJiZ1KGUpO3ZhciBhPWUuX19pdGVyYXRvcihGLCFpKTtyZXR1cm4gbmV3IEgoKGZ1bmN0aW9uKCl7dmFyIGU9YS5uZXh0KCk7aWYoZS5kb25lKXJldHVybiBlO3ZhciBzPWUudmFsdWU7cmV0dXJuIFcocix0P3NbMF06aT9uLnNpemUtKytvOm8rKyxzWzFdLGUpfSkpfSxyfWZ1bmN0aW9uIEJlKGUsdCxuLHIpe3ZhciBpPVhlKGUpO3JldHVybiByJiYoaS5oYXM9ZnVuY3Rpb24ocil7dmFyIGk9ZS5nZXQocixzKTtyZXR1cm4gaSE9PXMmJiEhdC5jYWxsKG4saSxyLGUpfSxpLmdldD1mdW5jdGlvbihyLGkpe3ZhciBvPWUuZ2V0KHIscyk7cmV0dXJuIG8hPT1zJiZ0LmNhbGwobixvLHIsZSk/bzppfSksaS5fX2l0ZXJhdGVVbmNhY2hlZD1mdW5jdGlvbihpLG8pe3ZhciBhPXRoaXMscz0wO3JldHVybiBlLl9faXRlcmF0ZSgoZnVuY3Rpb24oZSxvLGMpe2lmKHQuY2FsbChuLGUsbyxjKSlyZXR1cm4gcysrLGkoZSxyP286cy0xLGEpfSksbyksc30saS5fX2l0ZXJhdG9yVW5jYWNoZWQ9ZnVuY3Rpb24oaSxvKXt2YXIgYT1lLl9faXRlcmF0b3IoRixvKSxzPTA7cmV0dXJuIG5ldyBIKChmdW5jdGlvbigpe2Zvcig7Oyl7dmFyIG89YS5uZXh0KCk7aWYoby5kb25lKXJldHVybiBvO3ZhciBjPW8udmFsdWUsbD1jWzBdLHU9Y1sxXTtpZih0LmNhbGwobix1LGwsZSkpcmV0dXJuIFcoaSxyP2w6cysrLHUsbyl9fSkpfSxpfWZ1bmN0aW9uIFZlKGUsdCxuLHIpe3ZhciBpPWUuc2l6ZTtpZihwKHQsbixpKSlyZXR1cm4gZTt2YXIgbz1tKHQsaSksYT1oKG4saSk7aWYobyE9b3x8YSE9YSlyZXR1cm4gVmUoZS50b1NlcSgpLmNhY2hlUmVzdWx0KCksdCxuLHIpO3ZhciBzLGM9YS1vO2M9PWMmJihzPWM8MD8wOmMpO3ZhciBsPVhlKGUpO3JldHVybiBsLnNpemU9MD09PXM/czplLnNpemUmJnN8fHZvaWQgMCwhciYmTihlKSYmcz49MCYmKGwuZ2V0PWZ1bmN0aW9uKHQsbil7cmV0dXJuKHQ9ZCh0aGlzLHQpKT49MCYmdDxzP2UuZ2V0KHQrbyxuKTpufSksbC5fX2l0ZXJhdGVVbmNhY2hlZD1mdW5jdGlvbih0LG4pe3ZhciBpPXRoaXM7aWYoMD09PXMpcmV0dXJuIDA7aWYobilyZXR1cm4gdGhpcy5jYWNoZVJlc3VsdCgpLl9faXRlcmF0ZSh0LG4pO3ZhciBhPTAsYz0hMCxsPTA7cmV0dXJuIGUuX19pdGVyYXRlKChmdW5jdGlvbihlLG4pe2lmKCFjfHwhKGM9YSsrPG8pKXJldHVybiBsKyssITEhPT10KGUscj9uOmwtMSxpKSYmbCE9PXN9KSksbH0sbC5fX2l0ZXJhdG9yVW5jYWNoZWQ9ZnVuY3Rpb24odCxuKXtpZigwIT09cyYmbilyZXR1cm4gdGhpcy5jYWNoZVJlc3VsdCgpLl9faXRlcmF0b3IodCxuKTtpZigwPT09cylyZXR1cm4gbmV3IEgoaik7dmFyIGk9ZS5fX2l0ZXJhdG9yKHQsbiksYT0wLGM9MDtyZXR1cm4gbmV3IEgoKGZ1bmN0aW9uKCl7Zm9yKDthKys8bzspaS5uZXh0KCk7aWYoKytjPnMpcmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfTt2YXIgZT1pLm5leHQoKTtyZXR1cm4gcnx8dD09PXh8fGUuZG9uZT9lOlcodCxjLTEsdD09PVU/dm9pZCAwOmUudmFsdWVbMV0sZSl9KSl9LGx9ZnVuY3Rpb24gR2UoZSx0LG4scil7dmFyIGk9WGUoZSk7cmV0dXJuIGkuX19pdGVyYXRlVW5jYWNoZWQ9ZnVuY3Rpb24oaSxvKXt2YXIgYT10aGlzO2lmKG8pcmV0dXJuIHRoaXMuY2FjaGVSZXN1bHQoKS5fX2l0ZXJhdGUoaSxvKTt2YXIgcz0hMCxjPTA7cmV0dXJuIGUuX19pdGVyYXRlKChmdW5jdGlvbihlLG8sbCl7aWYoIXN8fCEocz10LmNhbGwobixlLG8sbCkpKXJldHVybiBjKyssaShlLHI/bzpjLTEsYSl9KSksY30saS5fX2l0ZXJhdG9yVW5jYWNoZWQ9ZnVuY3Rpb24oaSxvKXt2YXIgYT10aGlzO2lmKG8pcmV0dXJuIHRoaXMuY2FjaGVSZXN1bHQoKS5fX2l0ZXJhdG9yKGksbyk7dmFyIHM9ZS5fX2l0ZXJhdG9yKEYsbyksYz0hMCxsPTA7cmV0dXJuIG5ldyBIKChmdW5jdGlvbigpe3ZhciBlLG8sdTtkb3tpZigoZT1zLm5leHQoKSkuZG9uZSlyZXR1cm4gcnx8aT09PXg/ZTpXKGksbCsrLGk9PT1VP3ZvaWQgMDplLnZhbHVlWzFdLGUpO3ZhciBkPWUudmFsdWU7bz1kWzBdLHU9ZFsxXSxjJiYoYz10LmNhbGwobix1LG8sYSkpfXdoaWxlKGMpO3JldHVybiBpPT09Rj9lOlcoaSxvLHUsZSl9KSl9LGl9ZnVuY3Rpb24gSGUoZSx0LG4pe3ZhciByPVhlKGUpO3JldHVybiByLl9faXRlcmF0ZVVuY2FjaGVkPWZ1bmN0aW9uKGksbyl7aWYobylyZXR1cm4gdGhpcy5jYWNoZVJlc3VsdCgpLl9faXRlcmF0ZShpLG8pO3ZhciBhPTAscz0hMTtyZXR1cm4gZnVuY3Rpb24gZShjLGwpe2MuX19pdGVyYXRlKChmdW5jdGlvbihvLGMpe3JldHVybighdHx8bDx0KSYmRShvKT9lKG8sbCsxKTooYSsrLCExPT09aShvLG4/YzphLTEscikmJihzPSEwKSksIXN9KSxvKX0oZSwwKSxhfSxyLl9faXRlcmF0b3JVbmNhY2hlZD1mdW5jdGlvbihyLGkpe2lmKGkpcmV0dXJuIHRoaXMuY2FjaGVSZXN1bHQoKS5fX2l0ZXJhdG9yKHIsaSk7dmFyIG89ZS5fX2l0ZXJhdG9yKHIsaSksYT1bXSxzPTA7cmV0dXJuIG5ldyBIKChmdW5jdGlvbigpe2Zvcig7bzspe3ZhciBlPW8ubmV4dCgpO2lmKCExPT09ZS5kb25lKXt2YXIgYz1lLnZhbHVlO2lmKHI9PT1GJiYoYz1jWzFdKSx0JiYhKGEubGVuZ3RoPHQpfHwhRShjKSlyZXR1cm4gbj9lOlcocixzKyssYyxlKTthLnB1c2gobyksbz1jLl9faXRlcmF0b3IocixpKX1lbHNlIG89YS5wb3AoKX1yZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fSkpfSxyfWZ1bmN0aW9uIFdlKGUsdCxuKXt0fHwodD1KZSk7dmFyIHI9SShlKSxpPTAsbz1lLnRvU2VxKCkubWFwKChmdW5jdGlvbih0LHIpe3JldHVybltyLHQsaSsrLG4/bih0LHIsZSk6dF19KSkudmFsdWVTZXEoKS50b0FycmF5KCk7cmV0dXJuIG8uc29ydCgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdChlWzNdLG5bM10pfHxlWzJdLW5bMl19KSkuZm9yRWFjaChyP2Z1bmN0aW9uKGUsdCl7b1t0XS5sZW5ndGg9Mn06ZnVuY3Rpb24oZSx0KXtvW3RdPWVbMV19KSxyP0oobyk6YihlKT8kKG8pOmVlKG8pfWZ1bmN0aW9uIGplKGUsdCxuKXtpZih0fHwodD1KZSksbil7dmFyIHI9ZS50b1NlcSgpLm1hcCgoZnVuY3Rpb24odCxyKXtyZXR1cm5bdCxuKHQscixlKV19KSkucmVkdWNlKChmdW5jdGlvbihlLG4pe3JldHVybiBaZSh0LGVbMV0sblsxXSk/bjplfSkpO3JldHVybiByJiZyWzBdfXJldHVybiBlLnJlZHVjZSgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gWmUodCxlLG4pP246ZX0pKX1mdW5jdGlvbiBaZShlLHQsbil7dmFyIHI9ZShuLHQpO3JldHVybiAwPT09ciYmbiE9PXQmJihudWxsPT1ufHxuIT1uKXx8cj4wfWZ1bmN0aW9uIHplKGUsdCxuLHIpe3ZhciBpPVhlKGUpLG89bmV3IHRlKG4pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2l6ZX0pKTtyZXR1cm4gaS5zaXplPXI/by5tYXgoKTpvLm1pbigpLGkuX19pdGVyYXRlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLHI9dGhpcy5fX2l0ZXJhdG9yKHgsdCksaT0wOyEobj1yLm5leHQoKSkuZG9uZSYmITEhPT1lKG4udmFsdWUsaSsrLHRoaXMpOyk7cmV0dXJuIGl9LGkuX19pdGVyYXRvclVuY2FjaGVkPWZ1bmN0aW9uKGUsaSl7dmFyIG89bi5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlPUMoZSksSyhpP2UucmV2ZXJzZSgpOmUpfSkpLGE9MCxzPSExO3JldHVybiBuZXcgSCgoZnVuY3Rpb24oKXt2YXIgbjtyZXR1cm4gc3x8KG49by5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLm5leHQoKX0pKSxzPXI/bi5ldmVyeSgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZX0pKTpuLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRvbmV9KSkpLHM/e3ZhbHVlOnZvaWQgMCxkb25lOiEwfTpXKGUsYSsrLHQuYXBwbHkobnVsbCxuLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWV9KSkpKX0pKX0saX1mdW5jdGlvbiBLZShlLHQpe3JldHVybiBlPT09dD9lOk4oZSk/dDplLmNvbnN0cnVjdG9yKHQpfWZ1bmN0aW9uIFllKGUpe2lmKGUhPT1PYmplY3QoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIFtLLCBWXSB0dXBsZTogXCIrZSl9ZnVuY3Rpb24gcWUoZSl7cmV0dXJuIEkoZSk/QTpiKGUpP1I6a31mdW5jdGlvbiBYZShlKXtyZXR1cm4gT2JqZWN0LmNyZWF0ZSgoSShlKT9KOmIoZSk/JDplZSkucHJvdG90eXBlKX1mdW5jdGlvbiBRZSgpe3JldHVybiB0aGlzLl9pdGVyLmNhY2hlUmVzdWx0Pyh0aGlzLl9pdGVyLmNhY2hlUmVzdWx0KCksdGhpcy5zaXplPXRoaXMuX2l0ZXIuc2l6ZSx0aGlzKTpRLnByb3RvdHlwZS5jYWNoZVJlc3VsdC5jYWxsKHRoaXMpfWZ1bmN0aW9uIEplKGUsdCl7cmV0dXJuIHZvaWQgMD09PWUmJnZvaWQgMD09PXQ/MDp2b2lkIDA9PT1lPzE6dm9pZCAwPT09dD8tMTplPnQ/MTplPHQ/LTE6MH1mdW5jdGlvbiAkZShlLHQpe3Q9dHx8MDtmb3IodmFyIG49TWF0aC5tYXgoMCxlLmxlbmd0aC10KSxyPW5ldyBBcnJheShuKSxpPTA7aTxuO2krKylyW2ldPWVbaSt0XTtyZXR1cm4gcn1mdW5jdGlvbiBldChlLHQpe2lmKCFlKXRocm93IG5ldyBFcnJvcih0KX1mdW5jdGlvbiB0dChlKXtldChlIT09MS8wLFwiQ2Fubm90IHBlcmZvcm0gdGhpcyBhY3Rpb24gd2l0aCBhbiBpbmZpbml0ZSBzaXplLlwiKX1mdW5jdGlvbiBudChlKXtpZihYKGUpJiZcInN0cmluZ1wiIT10eXBlb2YgZSlyZXR1cm4gZTtpZihMKGUpKXJldHVybiBlLnRvQXJyYXkoKTt0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBrZXlQYXRoOiBleHBlY3RlZCBPcmRlcmVkIENvbGxlY3Rpb24gb3IgQXJyYXk6IFwiK2UpfVBlLnByb3RvdHlwZS5jYWNoZVJlc3VsdD1EZS5wcm90b3R5cGUuY2FjaGVSZXN1bHQ9TWUucHJvdG90eXBlLmNhY2hlUmVzdWx0PUxlLnByb3RvdHlwZS5jYWNoZVJlc3VsdD1RZTt2YXIgcnQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiBpdChlKXtpZighZXx8XCJvYmplY3RcIiE9dHlwZW9mIGV8fFwiW29iamVjdCBPYmplY3RdXCIhPT1ydC5jYWxsKGUpKXJldHVybiExO3ZhciB0PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtpZihudWxsPT09dClyZXR1cm4hMDtmb3IodmFyIG49dCxyPU9iamVjdC5nZXRQcm90b3R5cGVPZih0KTtudWxsIT09cjspbj1yLHI9T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pO3JldHVybiBuPT09dH1mdW5jdGlvbiBvdChlKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZSYmKFAoZSl8fEFycmF5LmlzQXJyYXkoZSl8fGl0KGUpKX1mdW5jdGlvbiBhdChlKXt0cnl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGU/SlNPTi5zdHJpbmdpZnkoZSk6U3RyaW5nKGUpfWNhdGNoKHQpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKX19ZnVuY3Rpb24gc3QoZSx0KXtyZXR1cm4gUChlKT9lLmhhcyh0KTpvdChlKSYmcS5jYWxsKGUsdCl9ZnVuY3Rpb24gY3QoZSx0LG4pe3JldHVybiBQKGUpP2UuZ2V0KHQsbik6c3QoZSx0KT9cImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmdldD9lLmdldCh0KTplW3RdOm59ZnVuY3Rpb24gbHQoZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gJGUoZSk7dmFyIHQ9e307Zm9yKHZhciBuIGluIGUpcS5jYWxsKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0fWZ1bmN0aW9uIHV0KGUsdCl7aWYoIW90KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgdXBkYXRlIG5vbi1kYXRhLXN0cnVjdHVyZSB2YWx1ZTogXCIrZSk7aWYoUChlKSl7aWYoIWUucmVtb3ZlKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgdXBkYXRlIGltbXV0YWJsZSB2YWx1ZSB3aXRob3V0IC5yZW1vdmUoKSBtZXRob2Q6IFwiK2UpO3JldHVybiBlLnJlbW92ZSh0KX1pZighcS5jYWxsKGUsdCkpcmV0dXJuIGU7dmFyIG49bHQoZSk7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/bi5zcGxpY2UodCwxKTpkZWxldGUgblt0XSxufWZ1bmN0aW9uIGR0KGUsdCxuKXtpZighb3QoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1cGRhdGUgbm9uLWRhdGEtc3RydWN0dXJlIHZhbHVlOiBcIitlKTtpZihQKGUpKXtpZighZS5zZXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1cGRhdGUgaW1tdXRhYmxlIHZhbHVlIHdpdGhvdXQgLnNldCgpIG1ldGhvZDogXCIrZSk7cmV0dXJuIGUuc2V0KHQsbil9aWYocS5jYWxsKGUsdCkmJm49PT1lW3RdKXJldHVybiBlO3ZhciByPWx0KGUpO3JldHVybiByW3RdPW4scn1mdW5jdGlvbiBmdChlLHQsbixyKXtyfHwocj1uLG49dm9pZCAwKTt2YXIgaT1wdChQKGUpLGUsbnQodCksMCxuLHIpO3JldHVybiBpPT09cz9uOml9ZnVuY3Rpb24gcHQoZSx0LG4scixpLG8pe3ZhciBhPXQ9PT1zO2lmKHI9PT1uLmxlbmd0aCl7dmFyIGM9YT9pOnQsbD1vKGMpO3JldHVybiBsPT09Yz90Omx9aWYoIWEmJiFvdCh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHVwZGF0ZSB3aXRoaW4gbm9uLWRhdGEtc3RydWN0dXJlIHZhbHVlIGluIHBhdGggW1wiK24uc2xpY2UoMCxyKS5tYXAoYXQpK1wiXTogXCIrdCk7dmFyIHU9bltyXSxkPWE/czpjdCh0LHUscyksZj1wdChkPT09cz9lOlAoZCksZCxuLHIrMSxpLG8pO3JldHVybiBmPT09ZD90OmY9PT1zP3V0KHQsdSk6ZHQoYT9lP3p0KCk6e306dCx1LGYpfWZ1bmN0aW9uIG10KGUsdCxuKXtyZXR1cm4gZnQoZSx0LHMsKGZ1bmN0aW9uKCl7cmV0dXJuIG59KSl9ZnVuY3Rpb24gaHQoZSx0KXtyZXR1cm4gbXQodGhpcyxlLHQpfWZ1bmN0aW9uIHZ0KGUsdCl7cmV0dXJuIGZ0KGUsdCwoZnVuY3Rpb24oKXtyZXR1cm4gc30pKX1mdW5jdGlvbiBndChlKXtyZXR1cm4gdnQodGhpcyxlKX1mdW5jdGlvbiB5dChlLHQsbixyKXtyZXR1cm4gZnQoZSxbdF0sbixyKX1mdW5jdGlvbiBFdChlLHQsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2UodGhpcyk6eXQodGhpcyxlLHQsbil9ZnVuY3Rpb24gX3QoZSx0LG4pe3JldHVybiBmdCh0aGlzLGUsdCxuKX1mdW5jdGlvbiBJdCgpe2Zvcih2YXIgZT1bXSx0PWFyZ3VtZW50cy5sZW5ndGg7dC0tOyllW3RdPWFyZ3VtZW50c1t0XTtyZXR1cm4gYnQodGhpcyxlKX1mdW5jdGlvbiBTdChlKXtmb3IodmFyIHQ9W10sbj1hcmd1bWVudHMubGVuZ3RoLTE7bi0tID4wOyl0W25dPWFyZ3VtZW50c1tuKzFdO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgbWVyZ2VyIGZ1bmN0aW9uOiBcIitlKTtyZXR1cm4gYnQodGhpcyx0LGUpfWZ1bmN0aW9uIGJ0KGUsdCxuKXtmb3IodmFyIHI9W10saT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgbz1BKHRbaV0pOzAhPT1vLnNpemUmJnIucHVzaChvKX1yZXR1cm4gMD09PXIubGVuZ3RoP2U6MCE9PWUudG9TZXEoKS5zaXplfHxlLl9fb3duZXJJRHx8MSE9PXIubGVuZ3RoP2Uud2l0aE11dGF0aW9ucygoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW4/ZnVuY3Rpb24odCxyKXt5dChlLHIscywoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1zP3Q6bihlLHQscil9KSl9OmZ1bmN0aW9uKHQsbil7ZS5zZXQobix0KX0saT0wO2k8ci5sZW5ndGg7aSsrKXJbaV0uZm9yRWFjaCh0KX0pKTplLmNvbnN0cnVjdG9yKHJbMF0pfWZ1bmN0aW9uIFR0KGUsdCxuKXtyZXR1cm4gQ3QoZSx0LGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbiB0KG4scixpKXtyZXR1cm4gb3QobikmJm90KHIpJiYobz1yLGE9UShuKSxzPVEobyksYihhKT09PWIocykmJkkoYSk9PT1JKHMpKT9DdChuLFtyXSx0KTplP2UobixyLGkpOnI7dmFyIG8sYSxzfX0obikpfWZ1bmN0aW9uIEN0KGUsdCxuKXtpZighb3QoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBtZXJnZSBpbnRvIG5vbi1kYXRhLXN0cnVjdHVyZSB2YWx1ZTogXCIrZSk7aWYoUChlKSlyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBuJiZlLm1lcmdlV2l0aD9lLm1lcmdlV2l0aC5hcHBseShlLFtuXS5jb25jYXQodCkpOmUubWVyZ2U/ZS5tZXJnZS5hcHBseShlLHQpOmUuY29uY2F0LmFwcGx5KGUsdCk7Zm9yKHZhciByPUFycmF5LmlzQXJyYXkoZSksaT1lLG89cj9SOkEsYT1yP2Z1bmN0aW9uKHQpe2k9PT1lJiYoaT1sdChpKSksaS5wdXNoKHQpfTpmdW5jdGlvbih0LHIpe3ZhciBvPXEuY2FsbChpLHIpLGE9byYmbj9uKGlbcl0sdCxyKTp0O28mJmE9PT1pW3JdfHwoaT09PWUmJihpPWx0KGkpKSxpW3JdPWEpfSxzPTA7czx0Lmxlbmd0aDtzKyspbyh0W3NdKS5mb3JFYWNoKGEpO3JldHVybiBpfWZ1bmN0aW9uIEF0KCl7Zm9yKHZhciBlPVtdLHQ9YXJndW1lbnRzLmxlbmd0aDt0LS07KWVbdF09YXJndW1lbnRzW3RdO3JldHVybiBUdCh0aGlzLGUpfWZ1bmN0aW9uIFJ0KGUpe2Zvcih2YXIgdD1bXSxuPWFyZ3VtZW50cy5sZW5ndGgtMTtuLS0gPjA7KXRbbl09YXJndW1lbnRzW24rMV07cmV0dXJuIFR0KHRoaXMsdCxlKX1mdW5jdGlvbiBrdChlKXtmb3IodmFyIHQ9W10sbj1hcmd1bWVudHMubGVuZ3RoLTE7bi0tID4wOyl0W25dPWFyZ3VtZW50c1tuKzFdO3JldHVybiBmdCh0aGlzLGUsenQoKSwoZnVuY3Rpb24oZSl7cmV0dXJuIEN0KGUsdCl9KSl9ZnVuY3Rpb24gT3QoZSl7Zm9yKHZhciB0PVtdLG49YXJndW1lbnRzLmxlbmd0aC0xO24tLSA+MDspdFtuXT1hcmd1bWVudHNbbisxXTtyZXR1cm4gZnQodGhpcyxlLHp0KCksKGZ1bmN0aW9uKGUpe3JldHVybiBUdChlLHQpfSkpfWZ1bmN0aW9uIE50KGUpe3ZhciB0PXRoaXMuYXNNdXRhYmxlKCk7cmV0dXJuIGUodCksdC53YXNBbHRlcmVkKCk/dC5fX2Vuc3VyZU93bmVyKHRoaXMuX19vd25lcklEKTp0aGlzfWZ1bmN0aW9uIHd0KCl7cmV0dXJuIHRoaXMuX19vd25lcklEP3RoaXM6dGhpcy5fX2Vuc3VyZU93bmVyKG5ldyBsKX1mdW5jdGlvbiBEdCgpe3JldHVybiB0aGlzLl9fZW5zdXJlT3duZXIoKX1mdW5jdGlvbiBQdCgpe3JldHVybiB0aGlzLl9fYWx0ZXJlZH12YXIgTXQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0KXtyZXR1cm4gbnVsbD09dD96dCgpOnVlKHQpJiYhTCh0KT90Onp0KCkud2l0aE11dGF0aW9ucygoZnVuY3Rpb24obil7dmFyIHI9ZSh0KTt0dChyLnNpemUpLHIuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5zZXQodCxlKX0pKX0pKX1yZXR1cm4gZSYmKHQuX19wcm90b19fPWUpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXQsdC5vZj1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PWFyZ3VtZW50cy5sZW5ndGg7dC0tOyllW3RdPWFyZ3VtZW50c1t0XTtyZXR1cm4genQoKS53aXRoTXV0YXRpb25zKChmdW5jdGlvbih0KXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rPTIpe2lmKG4rMT49ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyB2YWx1ZSBmb3Iga2V5OiBcIitlW25dKTt0LnNldChlW25dLGVbbisxXSl9fSkpfSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdG9TdHJpbmcoXCJNYXAge1wiLFwifVwiKX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3Jvb3Q/dGhpcy5fcm9vdC5nZXQoMCx2b2lkIDAsZSx0KTp0fSx0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gS3QodGhpcyxlLHQpfSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oZSl7cmV0dXJuIEt0KHRoaXMsZSxzKX0sdC5wcm90b3R5cGUuZGVsZXRlQWxsPWZ1bmN0aW9uKGUpe3ZhciB0PUMoZSk7cmV0dXJuIDA9PT10LnNpemU/dGhpczp0aGlzLndpdGhNdXRhdGlvbnMoKGZ1bmN0aW9uKGUpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIGUucmVtb3ZlKHQpfSkpfSkpfSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5zaXplP3RoaXM6dGhpcy5fX293bmVySUQ/KHRoaXMuc2l6ZT0wLHRoaXMuX3Jvb3Q9bnVsbCx0aGlzLl9faGFzaD12b2lkIDAsdGhpcy5fX2FsdGVyZWQ9ITAsdGhpcyk6enQoKX0sdC5wcm90b3R5cGUuc29ydD1mdW5jdGlvbihlKXtyZXR1cm4gRW4oV2UodGhpcyxlKSl9LHQucHJvdG90eXBlLnNvcnRCeT1mdW5jdGlvbihlLHQpe3JldHVybiBFbihXZSh0aGlzLHQsZSkpfSx0LnByb3RvdHlwZS5tYXA9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO3JldHVybiB0aGlzLndpdGhNdXRhdGlvbnMoKGZ1bmN0aW9uKHIpe3IuZm9yRWFjaCgoZnVuY3Rpb24oaSxvKXtyLnNldChvLGUuY2FsbCh0LGksbyxuKSl9KSl9KSl9LHQucHJvdG90eXBlLl9faXRlcmF0b3I9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IEh0KHRoaXMsZSx0KX0sdC5wcm90b3R5cGUuX19pdGVyYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPTA7cmV0dXJuIHRoaXMuX3Jvb3QmJnRoaXMuX3Jvb3QuaXRlcmF0ZSgoZnVuY3Rpb24odCl7cmV0dXJuIHIrKyxlKHRbMV0sdFswXSxuKX0pLHQpLHJ9LHQucHJvdG90eXBlLl9fZW5zdXJlT3duZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10aGlzLl9fb3duZXJJRD90aGlzOmU/WnQodGhpcy5zaXplLHRoaXMuX3Jvb3QsZSx0aGlzLl9faGFzaCk6MD09PXRoaXMuc2l6ZT96dCgpOih0aGlzLl9fb3duZXJJRD1lLHRoaXMuX19hbHRlcmVkPSExLHRoaXMpfSx0fShBKTtNdC5pc01hcD11ZTt2YXIgTHQ9TXQucHJvdG90eXBlO0x0W2xlXT0hMCxMdFtyXT1MdC5yZW1vdmUsTHQucmVtb3ZlQWxsPUx0LmRlbGV0ZUFsbCxMdC5zZXRJbj1odCxMdC5yZW1vdmVJbj1MdC5kZWxldGVJbj1ndCxMdC51cGRhdGU9RXQsTHQudXBkYXRlSW49X3QsTHQubWVyZ2U9THQuY29uY2F0PUl0LEx0Lm1lcmdlV2l0aD1TdCxMdC5tZXJnZURlZXA9QXQsTHQubWVyZ2VEZWVwV2l0aD1SdCxMdC5tZXJnZUluPWt0LEx0Lm1lcmdlRGVlcEluPU90LEx0LndpdGhNdXRhdGlvbnM9TnQsTHQud2FzQWx0ZXJlZD1QdCxMdC5hc0ltbXV0YWJsZT1EdCxMdFtcIkBAdHJhbnNkdWNlci9pbml0XCJdPUx0LmFzTXV0YWJsZT13dCxMdFtcIkBAdHJhbnNkdWNlci9zdGVwXCJdPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuc2V0KHRbMF0sdFsxXSl9LEx0W1wiQEB0cmFuc2R1Y2VyL3Jlc3VsdFwiXT1mdW5jdGlvbihlKXtyZXR1cm4gZS5hc0ltbXV0YWJsZSgpfTt2YXIgVXQ9ZnVuY3Rpb24oZSx0KXt0aGlzLm93bmVySUQ9ZSx0aGlzLmVudHJpZXM9dH07VXQucHJvdG90eXBlLmdldD1mdW5jdGlvbihlLHQsbixyKXtmb3IodmFyIGk9dGhpcy5lbnRyaWVzLG89MCxhPWkubGVuZ3RoO288YTtvKyspaWYocGUobixpW29dWzBdKSlyZXR1cm4gaVtvXVsxXTtyZXR1cm4gcn0sVXQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQsbixyLGksbyxhKXtmb3IodmFyIHU9aT09PXMsZD10aGlzLmVudHJpZXMsZj0wLHA9ZC5sZW5ndGg7ZjxwJiYhcGUocixkW2ZdWzBdKTtmKyspO3ZhciBtPWY8cDtpZihtP2RbZl1bMV09PT1pOnUpcmV0dXJuIHRoaXM7aWYoYyhhKSwodXx8IW0pJiZjKG8pLCF1fHwxIT09ZC5sZW5ndGgpe2lmKCFtJiYhdSYmZC5sZW5ndGg+PSR0KXJldHVybiBmdW5jdGlvbihlLHQsbixyKXtlfHwoZT1uZXcgbCk7Zm9yKHZhciBpPW5ldyBWdChlLGdlKG4pLFtuLHJdKSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBhPXRbb107aT1pLnVwZGF0ZShlLDAsdm9pZCAwLGFbMF0sYVsxXSl9cmV0dXJuIGl9KGUsZCxyLGkpO3ZhciBoPWUmJmU9PT10aGlzLm93bmVySUQsdj1oP2Q6JGUoZCk7cmV0dXJuIG0/dT9mPT09cC0xP3YucG9wKCk6dltmXT12LnBvcCgpOnZbZl09W3IsaV06di5wdXNoKFtyLGldKSxoPyh0aGlzLmVudHJpZXM9dix0aGlzKTpuZXcgVXQoZSx2KX19O3ZhciB4dD1mdW5jdGlvbihlLHQsbil7dGhpcy5vd25lcklEPWUsdGhpcy5iaXRtYXA9dCx0aGlzLm5vZGVzPW59O3h0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09dCYmKHQ9Z2UobikpO3ZhciBvPTE8PCgoMD09PWU/dDp0Pj4+ZSkmYSkscz10aGlzLmJpdG1hcDtyZXR1cm4gMD09KHMmbyk/cjp0aGlzLm5vZGVzW1F0KHMmby0xKV0uZ2V0KGUraSx0LG4scil9LHh0LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSx0LG4scixjLGwsdSl7dm9pZCAwPT09biYmKG49Z2UocikpO3ZhciBkPSgwPT09dD9uOm4+Pj50KSZhLGY9MTw8ZCxwPXRoaXMuYml0bWFwLG09MCE9KHAmZik7aWYoIW0mJmM9PT1zKXJldHVybiB0aGlzO3ZhciBoPVF0KHAmZi0xKSx2PXRoaXMubm9kZXMsZz1tP3ZbaF06dm9pZCAwLHk9WXQoZyxlLHQraSxuLHIsYyxsLHUpO2lmKHk9PT1nKXJldHVybiB0aGlzO2lmKCFtJiZ5JiZ2Lmxlbmd0aD49ZW4pcmV0dXJuIGZ1bmN0aW9uKGUsdCxuLHIsaSl7Zm9yKHZhciBhPTAscz1uZXcgQXJyYXkobyksYz0wOzAhPT1uO2MrKyxuPj4+PTEpc1tjXT0xJm4/dFthKytdOnZvaWQgMDtyZXR1cm4gc1tyXT1pLG5ldyBGdChlLGErMSxzKX0oZSx2LHAsZCx5KTtpZihtJiYheSYmMj09PXYubGVuZ3RoJiZxdCh2WzFeaF0pKXJldHVybiB2WzFeaF07aWYobSYmeSYmMT09PXYubGVuZ3RoJiZxdCh5KSlyZXR1cm4geTt2YXIgRT1lJiZlPT09dGhpcy5vd25lcklELF89bT95P3A6cF5mOnB8ZixJPW0/eT9KdCh2LGgseSxFKTpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5sZW5ndGgtMTtpZihuJiZ0PT09cilyZXR1cm4gZS5wb3AoKSxlO2Zvcih2YXIgaT1uZXcgQXJyYXkociksbz0wLGE9MDthPHI7YSsrKWE9PT10JiYobz0xKSxpW2FdPWVbYStvXTtyZXR1cm4gaX0odixoLEUpOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPWUubGVuZ3RoKzE7aWYociYmdCsxPT09aSlyZXR1cm4gZVt0XT1uLGU7Zm9yKHZhciBvPW5ldyBBcnJheShpKSxhPTAscz0wO3M8aTtzKyspcz09PXQ/KG9bc109bixhPS0xKTpvW3NdPWVbcythXTtyZXR1cm4gb30odixoLHksRSk7cmV0dXJuIEU/KHRoaXMuYml0bWFwPV8sdGhpcy5ub2Rlcz1JLHRoaXMpOm5ldyB4dChlLF8sSSl9O3ZhciBGdD1mdW5jdGlvbihlLHQsbil7dGhpcy5vd25lcklEPWUsdGhpcy5jb3VudD10LHRoaXMubm9kZXM9bn07RnQucHJvdG90eXBlLmdldD1mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT10JiYodD1nZShuKSk7dmFyIG89KDA9PT1lP3Q6dD4+PmUpJmEscz10aGlzLm5vZGVzW29dO3JldHVybiBzP3MuZ2V0KGUraSx0LG4scik6cn0sRnQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQsbixyLG8sYyxsKXt2b2lkIDA9PT1uJiYobj1nZShyKSk7dmFyIHU9KDA9PT10P246bj4+PnQpJmEsZD1vPT09cyxmPXRoaXMubm9kZXMscD1mW3VdO2lmKGQmJiFwKXJldHVybiB0aGlzO3ZhciBtPVl0KHAsZSx0K2ksbixyLG8sYyxsKTtpZihtPT09cClyZXR1cm4gdGhpczt2YXIgaD10aGlzLmNvdW50O2lmKHApe2lmKCFtJiYtLWg8dG4pcmV0dXJuIGZ1bmN0aW9uKGUsdCxuLHIpe2Zvcih2YXIgaT0wLG89MCxhPW5ldyBBcnJheShuKSxzPTAsYz0xLGw9dC5sZW5ndGg7czxsO3MrKyxjPDw9MSl7dmFyIHU9dFtzXTt2b2lkIDAhPT11JiZzIT09ciYmKGl8PWMsYVtvKytdPXUpfXJldHVybiBuZXcgeHQoZSxpLGEpfShlLGYsaCx1KX1lbHNlIGgrKzt2YXIgdj1lJiZlPT09dGhpcy5vd25lcklELGc9SnQoZix1LG0sdik7cmV0dXJuIHY/KHRoaXMuY291bnQ9aCx0aGlzLm5vZGVzPWcsdGhpcyk6bmV3IEZ0KGUsaCxnKX07dmFyIEJ0PWZ1bmN0aW9uKGUsdCxuKXt0aGlzLm93bmVySUQ9ZSx0aGlzLmtleUhhc2g9dCx0aGlzLmVudHJpZXM9bn07QnQucHJvdG90eXBlLmdldD1mdW5jdGlvbihlLHQsbixyKXtmb3IodmFyIGk9dGhpcy5lbnRyaWVzLG89MCxhPWkubGVuZ3RoO288YTtvKyspaWYocGUobixpW29dWzBdKSlyZXR1cm4gaVtvXVsxXTtyZXR1cm4gcn0sQnQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQsbixyLGksbyxhKXt2b2lkIDA9PT1uJiYobj1nZShyKSk7dmFyIGw9aT09PXM7aWYobiE9PXRoaXMua2V5SGFzaClyZXR1cm4gbD90aGlzOihjKGEpLGMobyksWHQodGhpcyxlLHQsbixbcixpXSkpO2Zvcih2YXIgdT10aGlzLmVudHJpZXMsZD0wLGY9dS5sZW5ndGg7ZDxmJiYhcGUocix1W2RdWzBdKTtkKyspO3ZhciBwPWQ8ZjtpZihwP3VbZF1bMV09PT1pOmwpcmV0dXJuIHRoaXM7aWYoYyhhKSwobHx8IXApJiZjKG8pLGwmJjI9PT1mKXJldHVybiBuZXcgVnQoZSx0aGlzLmtleUhhc2gsdVsxXmRdKTt2YXIgbT1lJiZlPT09dGhpcy5vd25lcklELGg9bT91OiRlKHUpO3JldHVybiBwP2w/ZD09PWYtMT9oLnBvcCgpOmhbZF09aC5wb3AoKTpoW2RdPVtyLGldOmgucHVzaChbcixpXSksbT8odGhpcy5lbnRyaWVzPWgsdGhpcyk6bmV3IEJ0KGUsdGhpcy5rZXlIYXNoLGgpfTt2YXIgVnQ9ZnVuY3Rpb24oZSx0LG4pe3RoaXMub3duZXJJRD1lLHRoaXMua2V5SGFzaD10LHRoaXMuZW50cnk9bn07VnQucHJvdG90eXBlLmdldD1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gcGUobix0aGlzLmVudHJ5WzBdKT90aGlzLmVudHJ5WzFdOnJ9LFZ0LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSx0LG4scixpLG8sYSl7dmFyIGw9aT09PXMsdT1wZShyLHRoaXMuZW50cnlbMF0pO3JldHVybih1P2k9PT10aGlzLmVudHJ5WzFdOmwpP3RoaXM6KGMoYSksbD92b2lkIGMobyk6dT9lJiZlPT09dGhpcy5vd25lcklEPyh0aGlzLmVudHJ5WzFdPWksdGhpcyk6bmV3IFZ0KGUsdGhpcy5rZXlIYXNoLFtyLGldKTooYyhvKSxYdCh0aGlzLGUsdCxnZShyKSxbcixpXSkpKX0sVXQucHJvdG90eXBlLml0ZXJhdGU9QnQucHJvdG90eXBlLml0ZXJhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy5lbnRyaWVzLHI9MCxpPW4ubGVuZ3RoLTE7cjw9aTtyKyspaWYoITE9PT1lKG5bdD9pLXI6cl0pKXJldHVybiExfSx4dC5wcm90b3R5cGUuaXRlcmF0ZT1GdC5wcm90b3R5cGUuaXRlcmF0ZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLm5vZGVzLHI9MCxpPW4ubGVuZ3RoLTE7cjw9aTtyKyspe3ZhciBvPW5bdD9pLXI6cl07aWYobyYmITE9PT1vLml0ZXJhdGUoZSx0KSlyZXR1cm4hMX19LFZ0LnByb3RvdHlwZS5pdGVyYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUodGhpcy5lbnRyeSl9O3ZhciBHdCxIdD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsdCxuKXt0aGlzLl90eXBlPXQsdGhpcy5fcmV2ZXJzZT1uLHRoaXMuX3N0YWNrPWUuX3Jvb3QmJmp0KGUuX3Jvb3QpfXJldHVybiBlJiYodC5fX3Byb3RvX189ZSksdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dCx0LnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuX3R5cGUsdD10aGlzLl9zdGFjazt0Oyl7dmFyIG49dC5ub2RlLHI9dC5pbmRleCsrLGk9dm9pZCAwO2lmKG4uZW50cnkpe2lmKDA9PT1yKXJldHVybiBXdChlLG4uZW50cnkpfWVsc2UgaWYobi5lbnRyaWVzKXtpZihyPD0oaT1uLmVudHJpZXMubGVuZ3RoLTEpKXJldHVybiBXdChlLG4uZW50cmllc1t0aGlzLl9yZXZlcnNlP2ktcjpyXSl9ZWxzZSBpZihyPD0oaT1uLm5vZGVzLmxlbmd0aC0xKSl7dmFyIG89bi5ub2Rlc1t0aGlzLl9yZXZlcnNlP2ktcjpyXTtpZihvKXtpZihvLmVudHJ5KXJldHVybiBXdChlLG8uZW50cnkpO3Q9dGhpcy5fc3RhY2s9anQobyx0KX1jb250aW51ZX10PXRoaXMuX3N0YWNrPXRoaXMuX3N0YWNrLl9fcHJldn1yZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fSx0fShIKTtmdW5jdGlvbiBXdChlLHQpe3JldHVybiBXKGUsdFswXSx0WzFdKX1mdW5jdGlvbiBqdChlLHQpe3JldHVybntub2RlOmUsaW5kZXg6MCxfX3ByZXY6dH19ZnVuY3Rpb24gWnQoZSx0LG4scil7dmFyIGk9T2JqZWN0LmNyZWF0ZShMdCk7cmV0dXJuIGkuc2l6ZT1lLGkuX3Jvb3Q9dCxpLl9fb3duZXJJRD1uLGkuX19oYXNoPXIsaS5fX2FsdGVyZWQ9ITEsaX1mdW5jdGlvbiB6dCgpe3JldHVybiBHdHx8KEd0PVp0KDApKX1mdW5jdGlvbiBLdChlLHQsbil7dmFyIHIsaTtpZihlLl9yb290KXt2YXIgbz17dmFsdWU6ITF9LGE9e3ZhbHVlOiExfTtpZihyPVl0KGUuX3Jvb3QsZS5fX293bmVySUQsMCx2b2lkIDAsdCxuLG8sYSksIWEudmFsdWUpcmV0dXJuIGU7aT1lLnNpemUrKG8udmFsdWU/bj09PXM/LTE6MTowKX1lbHNle2lmKG49PT1zKXJldHVybiBlO2k9MSxyPW5ldyBVdChlLl9fb3duZXJJRCxbW3Qsbl1dKX1yZXR1cm4gZS5fX293bmVySUQ/KGUuc2l6ZT1pLGUuX3Jvb3Q9cixlLl9faGFzaD12b2lkIDAsZS5fX2FsdGVyZWQ9ITAsZSk6cj9adChpLHIpOnp0KCl9ZnVuY3Rpb24gWXQoZSx0LG4scixpLG8sYSxsKXtyZXR1cm4gZT9lLnVwZGF0ZSh0LG4scixpLG8sYSxsKTpvPT09cz9lOihjKGwpLGMoYSksbmV3IFZ0KHQscixbaSxvXSkpfWZ1bmN0aW9uIHF0KGUpe3JldHVybiBlLmNvbnN0cnVjdG9yPT09VnR8fGUuY29uc3RydWN0b3I9PT1CdH1mdW5jdGlvbiBYdChlLHQsbixyLG8pe2lmKGUua2V5SGFzaD09PXIpcmV0dXJuIG5ldyBCdCh0LHIsW2UuZW50cnksb10pO3ZhciBzLGM9KDA9PT1uP2Uua2V5SGFzaDplLmtleUhhc2g+Pj5uKSZhLGw9KDA9PT1uP3I6cj4+Pm4pJmEsdT1jPT09bD9bWHQoZSx0LG4raSxyLG8pXToocz1uZXcgVnQodCxyLG8pLGM8bD9bZSxzXTpbcyxlXSk7cmV0dXJuIG5ldyB4dCh0LDE8PGN8MTw8bCx1KX1mdW5jdGlvbiBRdChlKXtyZXR1cm4gZT0oZT0oODU4OTkzNDU5JihlLT1lPj4xJjE0MzE2NTU3NjUpKSsoZT4+MiY4NTg5OTM0NTkpKSsoZT4+NCkmMjUyNjQ1MTM1LDEyNyYoZSs9ZT4+OCkrKGU+PjE2KX1mdW5jdGlvbiBKdChlLHQsbixyKXt2YXIgaT1yP2U6JGUoZSk7cmV0dXJuIGlbdF09bixpfXZhciAkdD1vLzQsZW49by8yLHRuPW8vNCxubj1cIkBAX19JTU1VVEFCTEVfTElTVF9fQEBcIjtmdW5jdGlvbiBybihlKXtyZXR1cm4gQm9vbGVhbihlJiZlW25uXSl9dmFyIG9uPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7dmFyIG49Zm4oKTtpZihudWxsPT10KXJldHVybiBuO2lmKHJuKHQpKXJldHVybiB0O3ZhciByPWUodCksYT1yLnNpemU7cmV0dXJuIDA9PT1hP246KHR0KGEpLGE+MCYmYTxvP2RuKDAsYSxpLG51bGwsbmV3IHNuKHIudG9BcnJheSgpKSk6bi53aXRoTXV0YXRpb25zKChmdW5jdGlvbihlKXtlLnNldFNpemUoYSksci5mb3JFYWNoKChmdW5jdGlvbih0LG4pe3JldHVybiBlLnNldChuLHQpfSkpfSkpKX1yZXR1cm4gZSYmKHQuX19wcm90b19fPWUpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXQsdC5vZj1mdW5jdGlvbigpe3JldHVybiB0aGlzKGFyZ3VtZW50cyl9LHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX190b1N0cmluZyhcIkxpc3QgW1wiLFwiXVwiKX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUsdCl7aWYoKGU9ZCh0aGlzLGUpKT49MCYmZTx0aGlzLnNpemUpe3ZhciBuPWhuKHRoaXMsZSs9dGhpcy5fb3JpZ2luKTtyZXR1cm4gbiYmbi5hcnJheVtlJmFdfXJldHVybiB0fSx0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe2lmKCh0PWQoZSx0KSkhPXQpcmV0dXJuIGU7aWYodD49ZS5zaXplfHx0PDApcmV0dXJuIGUud2l0aE11dGF0aW9ucygoZnVuY3Rpb24oZSl7dDwwP3ZuKGUsdCkuc2V0KDAsbik6dm4oZSwwLHQrMSkuc2V0KHQsbil9KSk7dCs9ZS5fb3JpZ2luO3ZhciByPWUuX3RhaWwsaT1lLl9yb290LG89e3ZhbHVlOiExfTtyZXR1cm4gdD49Z24oZS5fY2FwYWNpdHkpP3I9cG4ocixlLl9fb3duZXJJRCwwLHQsbixvKTppPXBuKGksZS5fX293bmVySUQsZS5fbGV2ZWwsdCxuLG8pLG8udmFsdWU/ZS5fX293bmVySUQ/KGUuX3Jvb3Q9aSxlLl90YWlsPXIsZS5fX2hhc2g9dm9pZCAwLGUuX19hbHRlcmVkPSEwLGUpOmRuKGUuX29yaWdpbixlLl9jYXBhY2l0eSxlLl9sZXZlbCxpLHIpOmV9KHRoaXMsZSx0KX0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhhcyhlKT8wPT09ZT90aGlzLnNoaWZ0KCk6ZT09PXRoaXMuc2l6ZS0xP3RoaXMucG9wKCk6dGhpcy5zcGxpY2UoZSwxKTp0aGlzfSx0LnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5zcGxpY2UoZSwwLHQpfSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5zaXplP3RoaXM6dGhpcy5fX293bmVySUQ/KHRoaXMuc2l6ZT10aGlzLl9vcmlnaW49dGhpcy5fY2FwYWNpdHk9MCx0aGlzLl9sZXZlbD1pLHRoaXMuX3Jvb3Q9dGhpcy5fdGFpbD10aGlzLl9faGFzaD12b2lkIDAsdGhpcy5fX2FsdGVyZWQ9ITAsdGhpcyk6Zm4oKX0sdC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cyx0PXRoaXMuc2l6ZTtyZXR1cm4gdGhpcy53aXRoTXV0YXRpb25zKChmdW5jdGlvbihuKXt2bihuLDAsdCtlLmxlbmd0aCk7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspbi5zZXQodCtyLGVbcl0pfSkpfSx0LnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24oKXtyZXR1cm4gdm4odGhpcywwLC0xKX0sdC5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cztyZXR1cm4gdGhpcy53aXRoTXV0YXRpb25zKChmdW5jdGlvbih0KXt2bih0LC1lLmxlbmd0aCk7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspdC5zZXQobixlW25dKX0pKX0sdC5wcm90b3R5cGUuc2hpZnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdm4odGhpcywxKX0sdC5wcm90b3R5cGUuY29uY2F0PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PWFyZ3VtZW50cyxuPVtdLHI9MDtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXt2YXIgaT10W3JdLG89ZShcInN0cmluZ1wiIT10eXBlb2YgaSYmWihpKT9pOltpXSk7MCE9PW8uc2l6ZSYmbi5wdXNoKG8pfXJldHVybiAwPT09bi5sZW5ndGg/dGhpczowIT09dGhpcy5zaXplfHx0aGlzLl9fb3duZXJJRHx8MSE9PW4ubGVuZ3RoP3RoaXMud2l0aE11dGF0aW9ucygoZnVuY3Rpb24oZSl7bi5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gZS5wdXNoKHQpfSkpfSkpfSkpOnRoaXMuY29uc3RydWN0b3IoblswXSl9LHQucHJvdG90eXBlLnNldFNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIHZuKHRoaXMsMCxlKX0sdC5wcm90b3R5cGUubWFwPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztyZXR1cm4gdGhpcy53aXRoTXV0YXRpb25zKChmdW5jdGlvbihyKXtmb3IodmFyIGk9MDtpPG4uc2l6ZTtpKyspci5zZXQoaSxlLmNhbGwodCxyLmdldChpKSxpLG4pKX0pKX0sdC5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnNpemU7cmV0dXJuIHAoZSx0LG4pP3RoaXM6dm4odGhpcyxtKGUsbiksaCh0LG4pKX0sdC5wcm90b3R5cGUuX19pdGVyYXRvcj1mdW5jdGlvbihlLHQpe3ZhciBuPXQ/dGhpcy5zaXplOjAscj11bih0aGlzLHQpO3JldHVybiBuZXcgSCgoZnVuY3Rpb24oKXt2YXIgaT1yKCk7cmV0dXJuIGk9PT1sbj97dmFsdWU6dm9pZCAwLGRvbmU6ITB9OlcoZSx0Py0tbjpuKyssaSl9KSl9LHQucHJvdG90eXBlLl9faXRlcmF0ZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyPXQ/dGhpcy5zaXplOjAsaT11bih0aGlzLHQpOyhuPWkoKSkhPT1sbiYmITEhPT1lKG4sdD8tLXI6cisrLHRoaXMpOyk7cmV0dXJuIHJ9LHQucHJvdG90eXBlLl9fZW5zdXJlT3duZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10aGlzLl9fb3duZXJJRD90aGlzOmU/ZG4odGhpcy5fb3JpZ2luLHRoaXMuX2NhcGFjaXR5LHRoaXMuX2xldmVsLHRoaXMuX3Jvb3QsdGhpcy5fdGFpbCxlLHRoaXMuX19oYXNoKTowPT09dGhpcy5zaXplP2ZuKCk6KHRoaXMuX19vd25lcklEPWUsdGhpcy5fX2FsdGVyZWQ9ITEsdGhpcyl9LHR9KFIpO29uLmlzTGlzdD1ybjt2YXIgYW49b24ucHJvdG90eXBlO2FuW25uXT0hMCxhbltyXT1hbi5yZW1vdmUsYW4ubWVyZ2U9YW4uY29uY2F0LGFuLnNldEluPWh0LGFuLmRlbGV0ZUluPWFuLnJlbW92ZUluPWd0LGFuLnVwZGF0ZT1FdCxhbi51cGRhdGVJbj1fdCxhbi5tZXJnZUluPWt0LGFuLm1lcmdlRGVlcEluPU90LGFuLndpdGhNdXRhdGlvbnM9TnQsYW4ud2FzQWx0ZXJlZD1QdCxhbi5hc0ltbXV0YWJsZT1EdCxhbltcIkBAdHJhbnNkdWNlci9pbml0XCJdPWFuLmFzTXV0YWJsZT13dCxhbltcIkBAdHJhbnNkdWNlci9zdGVwXCJdPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucHVzaCh0KX0sYW5bXCJAQHRyYW5zZHVjZXIvcmVzdWx0XCJdPWZ1bmN0aW9uKGUpe3JldHVybiBlLmFzSW1tdXRhYmxlKCl9O3ZhciBzbj1mdW5jdGlvbihlLHQpe3RoaXMuYXJyYXk9ZSx0aGlzLm93bmVySUQ9dH07c24ucHJvdG90eXBlLnJlbW92ZUJlZm9yZT1mdW5jdGlvbihlLHQsbil7aWYobj09PXQ/MTw8dDowPT09dGhpcy5hcnJheS5sZW5ndGgpcmV0dXJuIHRoaXM7dmFyIHI9bj4+PnQmYTtpZihyPj10aGlzLmFycmF5Lmxlbmd0aClyZXR1cm4gbmV3IHNuKFtdLGUpO3ZhciBvLHM9MD09PXI7aWYodD4wKXt2YXIgYz10aGlzLmFycmF5W3JdO2lmKChvPWMmJmMucmVtb3ZlQmVmb3JlKGUsdC1pLG4pKT09PWMmJnMpcmV0dXJuIHRoaXN9aWYocyYmIW8pcmV0dXJuIHRoaXM7dmFyIGw9bW4odGhpcyxlKTtpZighcylmb3IodmFyIHU9MDt1PHI7dSsrKWwuYXJyYXlbdV09dm9pZCAwO3JldHVybiBvJiYobC5hcnJheVtyXT1vKSxsfSxzbi5wcm90b3R5cGUucmVtb3ZlQWZ0ZXI9ZnVuY3Rpb24oZSx0LG4pe2lmKG49PT0odD8xPDx0OjApfHwwPT09dGhpcy5hcnJheS5sZW5ndGgpcmV0dXJuIHRoaXM7dmFyIHIsbz1uLTE+Pj50JmE7aWYobz49dGhpcy5hcnJheS5sZW5ndGgpcmV0dXJuIHRoaXM7aWYodD4wKXt2YXIgcz10aGlzLmFycmF5W29dO2lmKChyPXMmJnMucmVtb3ZlQWZ0ZXIoZSx0LWksbikpPT09cyYmbz09PXRoaXMuYXJyYXkubGVuZ3RoLTEpcmV0dXJuIHRoaXN9dmFyIGM9bW4odGhpcyxlKTtyZXR1cm4gYy5hcnJheS5zcGxpY2UobysxKSxyJiYoYy5hcnJheVtvXT1yKSxjfTt2YXIgY24sbG49e307ZnVuY3Rpb24gdW4oZSx0KXt2YXIgbj1lLl9vcmlnaW4scj1lLl9jYXBhY2l0eSxhPWduKHIpLHM9ZS5fdGFpbDtyZXR1cm4gZnVuY3Rpb24gZShjLGwsdSl7cmV0dXJuIDA9PT1sP2Z1bmN0aW9uKGUsaSl7dmFyIGM9aT09PWE/cyYmcy5hcnJheTplJiZlLmFycmF5LGw9aT5uPzA6bi1pLHU9ci1pO3JldHVybiB1Pm8mJih1PW8pLGZ1bmN0aW9uKCl7aWYobD09PXUpcmV0dXJuIGxuO3ZhciBlPXQ/LS11OmwrKztyZXR1cm4gYyYmY1tlXX19KGMsdSk6ZnVuY3Rpb24oYSxzLGMpe3ZhciBsLHU9YSYmYS5hcnJheSxkPWM+bj8wOm4tYz4+cyxmPTErKHItYz4+cyk7cmV0dXJuIGY+byYmKGY9byksZnVuY3Rpb24oKXtmb3IoOzspe2lmKGwpe3ZhciBuPWwoKTtpZihuIT09bG4pcmV0dXJuIG47bD1udWxsfWlmKGQ9PT1mKXJldHVybiBsbjt2YXIgcj10Py0tZjpkKys7bD1lKHUmJnVbcl0scy1pLGMrKHI8PHMpKX19fShjLGwsdSl9KGUuX3Jvb3QsZS5fbGV2ZWwsMCl9ZnVuY3Rpb24gZG4oZSx0LG4scixpLG8sYSl7dmFyIHM9T2JqZWN0LmNyZWF0ZShhbik7cmV0dXJuIHMuc2l6ZT10LWUscy5fb3JpZ2luPWUscy5fY2FwYWNpdHk9dCxzLl9sZXZlbD1uLHMuX3Jvb3Q9cixzLl90YWlsPWkscy5fX293bmVySUQ9byxzLl9faGFzaD1hLHMuX19hbHRlcmVkPSExLHN9ZnVuY3Rpb24gZm4oKXtyZXR1cm4gY258fChjbj1kbigwLDAsaSkpfWZ1bmN0aW9uIHBuKGUsdCxuLHIsbyxzKXt2YXIgbCx1PXI+Pj5uJmEsZD1lJiZ1PGUuYXJyYXkubGVuZ3RoO2lmKCFkJiZ2b2lkIDA9PT1vKXJldHVybiBlO2lmKG4+MCl7dmFyIGY9ZSYmZS5hcnJheVt1XSxwPXBuKGYsdCxuLWkscixvLHMpO3JldHVybiBwPT09Zj9lOigobD1tbihlLHQpKS5hcnJheVt1XT1wLGwpfXJldHVybiBkJiZlLmFycmF5W3VdPT09bz9lOihzJiZjKHMpLGw9bW4oZSx0KSx2b2lkIDA9PT1vJiZ1PT09bC5hcnJheS5sZW5ndGgtMT9sLmFycmF5LnBvcCgpOmwuYXJyYXlbdV09byxsKX1mdW5jdGlvbiBtbihlLHQpe3JldHVybiB0JiZlJiZ0PT09ZS5vd25lcklEP2U6bmV3IHNuKGU/ZS5hcnJheS5zbGljZSgpOltdLHQpfWZ1bmN0aW9uIGhuKGUsdCl7aWYodD49Z24oZS5fY2FwYWNpdHkpKXJldHVybiBlLl90YWlsO2lmKHQ8MTw8ZS5fbGV2ZWwraSl7Zm9yKHZhciBuPWUuX3Jvb3Qscj1lLl9sZXZlbDtuJiZyPjA7KW49bi5hcnJheVt0Pj4+ciZhXSxyLT1pO3JldHVybiBufX1mdW5jdGlvbiB2bihlLHQsbil7dm9pZCAwIT09dCYmKHR8PTApLHZvaWQgMCE9PW4mJihufD0wKTt2YXIgcj1lLl9fb3duZXJJRHx8bmV3IGwsbz1lLl9vcmlnaW4scz1lLl9jYXBhY2l0eSxjPW8rdCx1PXZvaWQgMD09PW4/czpuPDA/cytuOm8rbjtpZihjPT09byYmdT09PXMpcmV0dXJuIGU7aWYoYz49dSlyZXR1cm4gZS5jbGVhcigpO2Zvcih2YXIgZD1lLl9sZXZlbCxmPWUuX3Jvb3QscD0wO2MrcDwwOylmPW5ldyBzbihmJiZmLmFycmF5Lmxlbmd0aD9bdm9pZCAwLGZdOltdLHIpLHArPTE8PChkKz1pKTtwJiYoYys9cCxvKz1wLHUrPXAscys9cCk7Zm9yKHZhciBtPWduKHMpLGg9Z24odSk7aD49MTw8ZCtpOylmPW5ldyBzbihmJiZmLmFycmF5Lmxlbmd0aD9bZl06W10sciksZCs9aTt2YXIgdj1lLl90YWlsLGc9aDxtP2huKGUsdS0xKTpoPm0/bmV3IHNuKFtdLHIpOnY7aWYodiYmaD5tJiZjPHMmJnYuYXJyYXkubGVuZ3RoKXtmb3IodmFyIHk9Zj1tbihmLHIpLEU9ZDtFPmk7RS09aSl7dmFyIF89bT4+PkUmYTt5PXkuYXJyYXlbX109bW4oeS5hcnJheVtfXSxyKX15LmFycmF5W20+Pj5pJmFdPXZ9aWYodTxzJiYoZz1nJiZnLnJlbW92ZUFmdGVyKHIsMCx1KSksYz49aCljLT1oLHUtPWgsZD1pLGY9bnVsbCxnPWcmJmcucmVtb3ZlQmVmb3JlKHIsMCxjKTtlbHNlIGlmKGM+b3x8aDxtKXtmb3IocD0wO2Y7KXt2YXIgST1jPj4+ZCZhO2lmKEkhPT1oPj4+ZCZhKWJyZWFrO0kmJihwKz0oMTw8ZCkqSSksZC09aSxmPWYuYXJyYXlbSV19ZiYmYz5vJiYoZj1mLnJlbW92ZUJlZm9yZShyLGQsYy1wKSksZiYmaDxtJiYoZj1mLnJlbW92ZUFmdGVyKHIsZCxoLXApKSxwJiYoYy09cCx1LT1wKX1yZXR1cm4gZS5fX293bmVySUQ/KGUuc2l6ZT11LWMsZS5fb3JpZ2luPWMsZS5fY2FwYWNpdHk9dSxlLl9sZXZlbD1kLGUuX3Jvb3Q9ZixlLl90YWlsPWcsZS5fX2hhc2g9dm9pZCAwLGUuX19hbHRlcmVkPSEwLGUpOmRuKGMsdSxkLGYsZyl9ZnVuY3Rpb24gZ24oZSl7cmV0dXJuIGU8bz8wOmUtMT4+Pmk8PGl9dmFyIHluLEVuPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuIG51bGw9PWU/SW4oKTpkZShlKT9lOkluKCkud2l0aE11dGF0aW9ucygoZnVuY3Rpb24odCl7dmFyIG49QShlKTt0dChuLnNpemUpLG4uZm9yRWFjaCgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC5zZXQobixlKX0pKX0pKX1yZXR1cm4gZSYmKHQuX19wcm90b19fPWUpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXQsdC5vZj1mdW5jdGlvbigpe3JldHVybiB0aGlzKGFyZ3VtZW50cyl9LHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX190b1N0cmluZyhcIk9yZGVyZWRNYXAge1wiLFwifVwiKX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fbWFwLmdldChlKTtyZXR1cm4gdm9pZCAwIT09bj90aGlzLl9saXN0LmdldChuKVsxXTp0fSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5zaXplP3RoaXM6dGhpcy5fX293bmVySUQ/KHRoaXMuc2l6ZT0wLHRoaXMuX21hcC5jbGVhcigpLHRoaXMuX2xpc3QuY2xlYXIoKSx0aGlzLl9fYWx0ZXJlZD0hMCx0aGlzKTpJbigpfSx0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gU24odGhpcyxlLHQpfSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oZSl7cmV0dXJuIFNuKHRoaXMsZSxzKX0sdC5wcm90b3R5cGUuX19pdGVyYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztyZXR1cm4gdGhpcy5fbGlzdC5fX2l0ZXJhdGUoKGZ1bmN0aW9uKHQpe3JldHVybiB0JiZlKHRbMV0sdFswXSxuKX0pLHQpfSx0LnByb3RvdHlwZS5fX2l0ZXJhdG9yPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2xpc3QuZnJvbUVudHJ5U2VxKCkuX19pdGVyYXRvcihlLHQpfSx0LnByb3RvdHlwZS5fX2Vuc3VyZU93bmVyPWZ1bmN0aW9uKGUpe2lmKGU9PT10aGlzLl9fb3duZXJJRClyZXR1cm4gdGhpczt2YXIgdD10aGlzLl9tYXAuX19lbnN1cmVPd25lcihlKSxuPXRoaXMuX2xpc3QuX19lbnN1cmVPd25lcihlKTtyZXR1cm4gZT9fbih0LG4sZSx0aGlzLl9faGFzaCk6MD09PXRoaXMuc2l6ZT9JbigpOih0aGlzLl9fb3duZXJJRD1lLHRoaXMuX19hbHRlcmVkPSExLHRoaXMuX21hcD10LHRoaXMuX2xpc3Q9bix0aGlzKX0sdH0oTXQpO2Z1bmN0aW9uIF9uKGUsdCxuLHIpe3ZhciBpPU9iamVjdC5jcmVhdGUoRW4ucHJvdG90eXBlKTtyZXR1cm4gaS5zaXplPWU/ZS5zaXplOjAsaS5fbWFwPWUsaS5fbGlzdD10LGkuX19vd25lcklEPW4saS5fX2hhc2g9cixpLl9fYWx0ZXJlZD0hMSxpfWZ1bmN0aW9uIEluKCl7cmV0dXJuIHlufHwoeW49X24oenQoKSxmbigpKSl9ZnVuY3Rpb24gU24oZSx0LG4pe3ZhciByLGksYT1lLl9tYXAsYz1lLl9saXN0LGw9YS5nZXQodCksdT12b2lkIDAhPT1sO2lmKG49PT1zKXtpZighdSlyZXR1cm4gZTtjLnNpemU+PW8mJmMuc2l6ZT49MiphLnNpemU/KHI9KGk9Yy5maWx0ZXIoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMCE9PWUmJmwhPT10fSkpKS50b0tleWVkU2VxKCkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZVswXX0pKS5mbGlwKCkudG9NYXAoKSxlLl9fb3duZXJJRCYmKHIuX19vd25lcklEPWkuX19vd25lcklEPWUuX19vd25lcklEKSk6KHI9YS5yZW1vdmUodCksaT1sPT09Yy5zaXplLTE/Yy5wb3AoKTpjLnNldChsLHZvaWQgMCkpfWVsc2UgaWYodSl7aWYobj09PWMuZ2V0KGwpWzFdKXJldHVybiBlO3I9YSxpPWMuc2V0KGwsW3Qsbl0pfWVsc2Ugcj1hLnNldCh0LGMuc2l6ZSksaT1jLnNldChjLnNpemUsW3Qsbl0pO3JldHVybiBlLl9fb3duZXJJRD8oZS5zaXplPXIuc2l6ZSxlLl9tYXA9cixlLl9saXN0PWksZS5fX2hhc2g9dm9pZCAwLGUuX19hbHRlcmVkPSEwLGUpOl9uKHIsaSl9RW4uaXNPcmRlcmVkTWFwPWRlLEVuLnByb3RvdHlwZVtNXT0hMCxFbi5wcm90b3R5cGVbcl09RW4ucHJvdG90eXBlLnJlbW92ZTt2YXIgYm49XCJAQF9fSU1NVVRBQkxFX1NUQUNLX19AQFwiO2Z1bmN0aW9uIFRuKGUpe3JldHVybiBCb29sZWFuKGUmJmVbYm5dKX12YXIgQ249ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtyZXR1cm4gbnVsbD09ZT9PbigpOlRuKGUpP2U6T24oKS5wdXNoQWxsKGUpfXJldHVybiBlJiYodC5fX3Byb3RvX189ZSksdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dCx0Lm9mPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMoYXJndW1lbnRzKX0sdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3RvU3RyaW5nKFwiU3RhY2sgW1wiLFwiXVwiKX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5faGVhZDtmb3IoZT1kKHRoaXMsZSk7biYmZS0tOyluPW4ubmV4dDtyZXR1cm4gbj9uLnZhbHVlOnR9LHQucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGVhZCYmdGhpcy5faGVhZC52YWx1ZX0sdC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cztpZigwPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcztmb3IodmFyIHQ9dGhpcy5zaXplK2FyZ3VtZW50cy5sZW5ndGgsbj10aGlzLl9oZWFkLHI9YXJndW1lbnRzLmxlbmd0aC0xO3I+PTA7ci0tKW49e3ZhbHVlOmVbcl0sbmV4dDpufTtyZXR1cm4gdGhpcy5fX293bmVySUQ/KHRoaXMuc2l6ZT10LHRoaXMuX2hlYWQ9bix0aGlzLl9faGFzaD12b2lkIDAsdGhpcy5fX2FsdGVyZWQ9ITAsdGhpcyk6a24odCxuKX0sdC5wcm90b3R5cGUucHVzaEFsbD1mdW5jdGlvbih0KXtpZigwPT09KHQ9ZSh0KSkuc2l6ZSlyZXR1cm4gdGhpcztpZigwPT09dGhpcy5zaXplJiZUbih0KSlyZXR1cm4gdDt0dCh0LnNpemUpO3ZhciBuPXRoaXMuc2l6ZSxyPXRoaXMuX2hlYWQ7cmV0dXJuIHQuX19pdGVyYXRlKChmdW5jdGlvbihlKXtuKysscj17dmFsdWU6ZSxuZXh0OnJ9fSksITApLHRoaXMuX19vd25lcklEPyh0aGlzLnNpemU9bix0aGlzLl9oZWFkPXIsdGhpcy5fX2hhc2g9dm9pZCAwLHRoaXMuX19hbHRlcmVkPSEwLHRoaXMpOmtuKG4scil9LHQucHJvdG90eXBlLnBvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNsaWNlKDEpfSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5zaXplP3RoaXM6dGhpcy5fX293bmVySUQ/KHRoaXMuc2l6ZT0wLHRoaXMuX2hlYWQ9dm9pZCAwLHRoaXMuX19oYXNoPXZvaWQgMCx0aGlzLl9fYWx0ZXJlZD0hMCx0aGlzKTpPbigpfSx0LnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbih0LG4pe2lmKHAodCxuLHRoaXMuc2l6ZSkpcmV0dXJuIHRoaXM7dmFyIHI9bSh0LHRoaXMuc2l6ZSk7aWYoaChuLHRoaXMuc2l6ZSkhPT10aGlzLnNpemUpcmV0dXJuIGUucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcyx0LG4pO2Zvcih2YXIgaT10aGlzLnNpemUtcixvPXRoaXMuX2hlYWQ7ci0tOylvPW8ubmV4dDtyZXR1cm4gdGhpcy5fX293bmVySUQ/KHRoaXMuc2l6ZT1pLHRoaXMuX2hlYWQ9byx0aGlzLl9faGFzaD12b2lkIDAsdGhpcy5fX2FsdGVyZWQ9ITAsdGhpcyk6a24oaSxvKX0sdC5wcm90b3R5cGUuX19lbnN1cmVPd25lcj1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXRoaXMuX19vd25lcklEP3RoaXM6ZT9rbih0aGlzLnNpemUsdGhpcy5faGVhZCxlLHRoaXMuX19oYXNoKTowPT09dGhpcy5zaXplP09uKCk6KHRoaXMuX19vd25lcklEPWUsdGhpcy5fX2FsdGVyZWQ9ITEsdGhpcyl9LHQucHJvdG90eXBlLl9faXRlcmF0ZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7aWYodClyZXR1cm4gbmV3IHRlKHRoaXMudG9BcnJheSgpKS5fX2l0ZXJhdGUoKGZ1bmN0aW9uKHQscil7cmV0dXJuIGUodCxyLG4pfSksdCk7Zm9yKHZhciByPTAsaT10aGlzLl9oZWFkO2kmJiExIT09ZShpLnZhbHVlLHIrKyx0aGlzKTspaT1pLm5leHQ7cmV0dXJuIHJ9LHQucHJvdG90eXBlLl9faXRlcmF0b3I9ZnVuY3Rpb24oZSx0KXtpZih0KXJldHVybiBuZXcgdGUodGhpcy50b0FycmF5KCkpLl9faXRlcmF0b3IoZSx0KTt2YXIgbj0wLHI9dGhpcy5faGVhZDtyZXR1cm4gbmV3IEgoKGZ1bmN0aW9uKCl7aWYocil7dmFyIHQ9ci52YWx1ZTtyZXR1cm4gcj1yLm5leHQsVyhlLG4rKyx0KX1yZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fSkpfSx0fShSKTtDbi5pc1N0YWNrPVRuO3ZhciBBbixSbj1Dbi5wcm90b3R5cGU7ZnVuY3Rpb24ga24oZSx0LG4scil7dmFyIGk9T2JqZWN0LmNyZWF0ZShSbik7cmV0dXJuIGkuc2l6ZT1lLGkuX2hlYWQ9dCxpLl9fb3duZXJJRD1uLGkuX19oYXNoPXIsaS5fX2FsdGVyZWQ9ITEsaX1mdW5jdGlvbiBPbigpe3JldHVybiBBbnx8KEFuPWtuKDApKX1Sbltibl09ITAsUm4uc2hpZnQ9Um4ucG9wLFJuLnVuc2hpZnQ9Um4ucHVzaCxSbi51bnNoaWZ0QWxsPVJuLnB1c2hBbGwsUm4ud2l0aE11dGF0aW9ucz1OdCxSbi53YXNBbHRlcmVkPVB0LFJuLmFzSW1tdXRhYmxlPUR0LFJuW1wiQEB0cmFuc2R1Y2VyL2luaXRcIl09Um4uYXNNdXRhYmxlPXd0LFJuW1wiQEB0cmFuc2R1Y2VyL3N0ZXBcIl09ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS51bnNoaWZ0KHQpfSxSbltcIkBAdHJhbnNkdWNlci9yZXN1bHRcIl09ZnVuY3Rpb24oZSl7cmV0dXJuIGUuYXNJbW11dGFibGUoKX07dmFyIE5uPVwiQEBfX0lNTVVUQUJMRV9TRVRfX0BAXCI7ZnVuY3Rpb24gd24oZSl7cmV0dXJuIEJvb2xlYW4oZSYmZVtObl0pfWZ1bmN0aW9uIERuKGUpe3JldHVybiB3bihlKSYmTChlKX1mdW5jdGlvbiBQbihlLHQpe2lmKGU9PT10KXJldHVybiEwO2lmKCFFKHQpfHx2b2lkIDAhPT1lLnNpemUmJnZvaWQgMCE9PXQuc2l6ZSYmZS5zaXplIT09dC5zaXplfHx2b2lkIDAhPT1lLl9faGFzaCYmdm9pZCAwIT09dC5fX2hhc2gmJmUuX19oYXNoIT09dC5fX2hhc2h8fEkoZSkhPT1JKHQpfHxiKGUpIT09Yih0KXx8TChlKSE9PUwodCkpcmV0dXJuITE7aWYoMD09PWUuc2l6ZSYmMD09PXQuc2l6ZSlyZXR1cm4hMDt2YXIgbj0hVChlKTtpZihMKGUpKXt2YXIgcj1lLmVudHJpZXMoKTtyZXR1cm4gdC5ldmVyeSgoZnVuY3Rpb24oZSx0KXt2YXIgaT1yLm5leHQoKS52YWx1ZTtyZXR1cm4gaSYmcGUoaVsxXSxlKSYmKG58fHBlKGlbMF0sdCkpfSkpJiZyLm5leHQoKS5kb25lfXZhciBpPSExO2lmKHZvaWQgMD09PWUuc2l6ZSlpZih2b2lkIDA9PT10LnNpemUpXCJmdW5jdGlvblwiPT10eXBlb2YgZS5jYWNoZVJlc3VsdCYmZS5jYWNoZVJlc3VsdCgpO2Vsc2V7aT0hMDt2YXIgbz1lO2U9dCx0PW99dmFyIGE9ITAsYz10Ll9faXRlcmF0ZSgoZnVuY3Rpb24odCxyKXtpZihuPyFlLmhhcyh0KTppPyFwZSh0LGUuZ2V0KHIscykpOiFwZShlLmdldChyLHMpLHQpKXJldHVybiBhPSExLCExfSkpO3JldHVybiBhJiZlLnNpemU9PT1jfWZ1bmN0aW9uIE1uKGUsdCl7dmFyIG49ZnVuY3Rpb24obil7ZS5wcm90b3R5cGVbbl09dFtuXX07cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2gobiksT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5mb3JFYWNoKG4pLGV9ZnVuY3Rpb24gTG4oZSl7aWYoIWV8fFwib2JqZWN0XCIhPXR5cGVvZiBlKXJldHVybiBlO2lmKCFFKGUpKXtpZighb3QoZSkpcmV0dXJuIGU7ZT1RKGUpfWlmKEkoZSkpe3ZhciB0PXt9O3JldHVybiBlLl9faXRlcmF0ZSgoZnVuY3Rpb24oZSxuKXt0W25dPUxuKGUpfSkpLHR9dmFyIG49W107cmV0dXJuIGUuX19pdGVyYXRlKChmdW5jdGlvbihlKXtuLnB1c2goTG4oZSkpfSkpLG59dmFyIFVuPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIG51bGw9PXQ/R24oKTp3bih0KSYmIUwodCk/dDpHbigpLndpdGhNdXRhdGlvbnMoKGZ1bmN0aW9uKG4pe3ZhciByPWUodCk7dHQoci5zaXplKSxyLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBuLmFkZChlKX0pKX0pKX1yZXR1cm4gZSYmKHQuX19wcm90b19fPWUpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXQsdC5vZj1mdW5jdGlvbigpe3JldHVybiB0aGlzKGFyZ3VtZW50cyl9LHQuZnJvbUtleXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMoQShlKS5rZXlTZXEoKSl9LHQuaW50ZXJzZWN0PWZ1bmN0aW9uKGUpe3JldHVybihlPUMoZSkudG9BcnJheSgpKS5sZW5ndGg/Rm4uaW50ZXJzZWN0LmFwcGx5KHQoZS5wb3AoKSksZSk6R24oKX0sdC51bmlvbj1mdW5jdGlvbihlKXtyZXR1cm4oZT1DKGUpLnRvQXJyYXkoKSkubGVuZ3RoP0ZuLnVuaW9uLmFwcGx5KHQoZS5wb3AoKSksZSk6R24oKX0sdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3RvU3RyaW5nKFwiU2V0IHtcIixcIn1cIil9LHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbWFwLmhhcyhlKX0sdC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3JldHVybiBCbih0aGlzLHRoaXMuX21hcC5zZXQoZSxlKSl9LHQucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihlKXtyZXR1cm4gQm4odGhpcyx0aGlzLl9tYXAucmVtb3ZlKGUpKX0sdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtyZXR1cm4gQm4odGhpcyx0aGlzLl9tYXAuY2xlYXIoKSl9LHQucHJvdG90eXBlLm1hcD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj0hMSxpPUJuKHRoaXMsdGhpcy5fbWFwLm1hcEVudHJpZXMoKGZ1bmN0aW9uKGkpe3ZhciBvPWlbMV0sYT1lLmNhbGwodCxvLG8sbik7cmV0dXJuIGEhPT1vJiYocj0hMCksW2EsYV19KSx0KSk7cmV0dXJuIHI/aTp0aGlzfSx0LnByb3RvdHlwZS51bmlvbj1mdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxuPWFyZ3VtZW50cy5sZW5ndGg7bi0tOyl0W25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gMD09PSh0PXQuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gMCE9PWUuc2l6ZX0pKSkubGVuZ3RoP3RoaXM6MCE9PXRoaXMuc2l6ZXx8dGhpcy5fX293bmVySUR8fDEhPT10Lmxlbmd0aD90aGlzLndpdGhNdXRhdGlvbnMoKGZ1bmN0aW9uKG4pe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKVwic3RyaW5nXCI9PXR5cGVvZiB0W3JdP24uYWRkKHRbcl0pOmUodFtyXSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIG4uYWRkKGUpfSkpfSkpOnRoaXMuY29uc3RydWN0b3IodFswXSl9LHQucHJvdG90eXBlLmludGVyc2VjdD1mdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxuPWFyZ3VtZW50cy5sZW5ndGg7bi0tOyl0W25dPWFyZ3VtZW50c1tuXTtpZigwPT09dC5sZW5ndGgpcmV0dXJuIHRoaXM7dD10Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGUodCl9KSk7dmFyIHI9W107cmV0dXJuIHRoaXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaW5jbHVkZXMoZSl9KSl8fHIucHVzaChlKX0pKSx0aGlzLndpdGhNdXRhdGlvbnMoKGZ1bmN0aW9uKGUpe3IuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZS5yZW1vdmUodCl9KSl9KSl9LHQucHJvdG90eXBlLnN1YnRyYWN0PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLG49YXJndW1lbnRzLmxlbmd0aDtuLS07KXRbbl09YXJndW1lbnRzW25dO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gdGhpczt0PXQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZSh0KX0pKTt2YXIgcj1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKChmdW5jdGlvbihlKXt0LnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmluY2x1ZGVzKGUpfSkpJiZyLnB1c2goZSl9KSksdGhpcy53aXRoTXV0YXRpb25zKChmdW5jdGlvbihlKXtyLmZvckVhY2goKGZ1bmN0aW9uKHQpe2UucmVtb3ZlKHQpfSkpfSkpfSx0LnByb3RvdHlwZS5zb3J0PWZ1bmN0aW9uKGUpe3JldHVybiBhcihXZSh0aGlzLGUpKX0sdC5wcm90b3R5cGUuc29ydEJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGFyKFdlKHRoaXMsdCxlKSl9LHQucHJvdG90eXBlLndhc0FsdGVyZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwLndhc0FsdGVyZWQoKX0sdC5wcm90b3R5cGUuX19pdGVyYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztyZXR1cm4gdGhpcy5fbWFwLl9faXRlcmF0ZSgoZnVuY3Rpb24odCl7cmV0dXJuIGUodCx0LG4pfSksdCl9LHQucHJvdG90eXBlLl9faXRlcmF0b3I9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fbWFwLl9faXRlcmF0b3IoZSx0KX0sdC5wcm90b3R5cGUuX19lbnN1cmVPd25lcj1mdW5jdGlvbihlKXtpZihlPT09dGhpcy5fX293bmVySUQpcmV0dXJuIHRoaXM7dmFyIHQ9dGhpcy5fbWFwLl9fZW5zdXJlT3duZXIoZSk7cmV0dXJuIGU/dGhpcy5fX21ha2UodCxlKTowPT09dGhpcy5zaXplP3RoaXMuX19lbXB0eSgpOih0aGlzLl9fb3duZXJJRD1lLHRoaXMuX21hcD10LHRoaXMpfSx0fShrKTtVbi5pc1NldD13bjt2YXIgeG4sRm49VW4ucHJvdG90eXBlO2Z1bmN0aW9uIEJuKGUsdCl7cmV0dXJuIGUuX19vd25lcklEPyhlLnNpemU9dC5zaXplLGUuX21hcD10LGUpOnQ9PT1lLl9tYXA/ZTowPT09dC5zaXplP2UuX19lbXB0eSgpOmUuX19tYWtlKHQpfWZ1bmN0aW9uIFZuKGUsdCl7dmFyIG49T2JqZWN0LmNyZWF0ZShGbik7cmV0dXJuIG4uc2l6ZT1lP2Uuc2l6ZTowLG4uX21hcD1lLG4uX19vd25lcklEPXQsbn1mdW5jdGlvbiBHbigpe3JldHVybiB4bnx8KHhuPVZuKHp0KCkpKX1GbltObl09ITAsRm5bcl09Rm4ucmVtb3ZlLEZuLm1lcmdlPUZuLmNvbmNhdD1Gbi51bmlvbixGbi53aXRoTXV0YXRpb25zPU50LEZuLmFzSW1tdXRhYmxlPUR0LEZuW1wiQEB0cmFuc2R1Y2VyL2luaXRcIl09Rm4uYXNNdXRhYmxlPXd0LEZuW1wiQEB0cmFuc2R1Y2VyL3N0ZXBcIl09ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5hZGQodCl9LEZuW1wiQEB0cmFuc2R1Y2VyL3Jlc3VsdFwiXT1mdW5jdGlvbihlKXtyZXR1cm4gZS5hc0ltbXV0YWJsZSgpfSxGbi5fX2VtcHR5PUduLEZuLl9fbWFrZT1Wbjt2YXIgSG4sV249ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLG4scil7aWYoISh0aGlzIGluc3RhbmNlb2YgdCkpcmV0dXJuIG5ldyB0KGUsbixyKTtpZihldCgwIT09cixcIkNhbm5vdCBzdGVwIGEgUmFuZ2UgYnkgMFwiKSxlPWV8fDAsdm9pZCAwPT09biYmKG49MS8wKSxyPXZvaWQgMD09PXI/MTpNYXRoLmFicyhyKSxuPGUmJihyPS1yKSx0aGlzLl9zdGFydD1lLHRoaXMuX2VuZD1uLHRoaXMuX3N0ZXA9cix0aGlzLnNpemU9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKG4tZSkvci0xKSsxKSwwPT09dGhpcy5zaXplKXtpZihIbilyZXR1cm4gSG47SG49dGhpc319cmV0dXJuIGUmJih0Ll9fcHJvdG9fXz1lKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSx0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10LHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnNpemU/XCJSYW5nZSBbXVwiOlwiUmFuZ2UgWyBcIit0aGlzLl9zdGFydCtcIi4uLlwiK3RoaXMuX2VuZCsoMSE9PXRoaXMuX3N0ZXA/XCIgYnkgXCIrdGhpcy5fc3RlcDpcIlwiKStcIiBdXCJ9LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmhhcyhlKT90aGlzLl9zdGFydCtkKHRoaXMsZSkqdGhpcy5fc3RlcDp0fSx0LnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbihlKXt2YXIgdD0oZS10aGlzLl9zdGFydCkvdGhpcy5fc3RlcDtyZXR1cm4gdD49MCYmdDx0aGlzLnNpemUmJnQ9PT1NYXRoLmZsb29yKHQpfSx0LnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihlLG4pe3JldHVybiBwKGUsbix0aGlzLnNpemUpP3RoaXM6KGU9bShlLHRoaXMuc2l6ZSksKG49aChuLHRoaXMuc2l6ZSkpPD1lP25ldyB0KDAsMCk6bmV3IHQodGhpcy5nZXQoZSx0aGlzLl9lbmQpLHRoaXMuZ2V0KG4sdGhpcy5fZW5kKSx0aGlzLl9zdGVwKSl9LHQucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS10aGlzLl9zdGFydDtpZih0JXRoaXMuX3N0ZXA9PTApe3ZhciBuPXQvdGhpcy5fc3RlcDtpZihuPj0wJiZuPHRoaXMuc2l6ZSlyZXR1cm4gbn1yZXR1cm4tMX0sdC5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaW5kZXhPZihlKX0sdC5wcm90b3R5cGUuX19pdGVyYXRlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXRoaXMuc2l6ZSxyPXRoaXMuX3N0ZXAsaT10P3RoaXMuX3N0YXJ0KyhuLTEpKnI6dGhpcy5fc3RhcnQsbz0wO28hPT1uJiYhMSE9PWUoaSx0P24tKytvOm8rKyx0aGlzKTspaSs9dD8tcjpyO3JldHVybiBvfSx0LnByb3RvdHlwZS5fX2l0ZXJhdG9yPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5zaXplLHI9dGhpcy5fc3RlcCxpPXQ/dGhpcy5fc3RhcnQrKG4tMSkqcjp0aGlzLl9zdGFydCxvPTA7cmV0dXJuIG5ldyBIKChmdW5jdGlvbigpe2lmKG89PT1uKXJldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH07dmFyIGE9aTtyZXR1cm4gaSs9dD8tcjpyLFcoZSx0P24tKytvOm8rKyxhKX0pKX0sdC5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdD90aGlzLl9zdGFydD09PWUuX3N0YXJ0JiZ0aGlzLl9lbmQ9PT1lLl9lbmQmJnRoaXMuX3N0ZXA9PT1lLl9zdGVwOlBuKHRoaXMsZSl9LHR9KCQpO2Z1bmN0aW9uIGpuKGUsdCxuKXtmb3IodmFyIHI9bnQodCksaT0wO2khPT1yLmxlbmd0aDspaWYoKGU9Y3QoZSxyW2krK10scykpPT09cylyZXR1cm4gbjtyZXR1cm4gZX1mdW5jdGlvbiBabihlLHQpe3JldHVybiBqbih0aGlzLGUsdCl9ZnVuY3Rpb24gem4oZSx0KXtyZXR1cm4gam4oZSx0LHMpIT09c31mdW5jdGlvbiBLbigpe3R0KHRoaXMuc2l6ZSk7dmFyIGU9e307cmV0dXJuIHRoaXMuX19pdGVyYXRlKChmdW5jdGlvbih0LG4pe2Vbbl09dH0pKSxlfUMuaXNJdGVyYWJsZT1FLEMuaXNLZXllZD1JLEMuaXNJbmRleGVkPWIsQy5pc0Fzc29jaWF0aXZlPVQsQy5pc09yZGVyZWQ9TCxDLkl0ZXJhdG9yPUgsTW4oQyx7dG9BcnJheTpmdW5jdGlvbigpe3R0KHRoaXMuc2l6ZSk7dmFyIGU9bmV3IEFycmF5KHRoaXMuc2l6ZXx8MCksdD1JKHRoaXMpLG49MDtyZXR1cm4gdGhpcy5fX2l0ZXJhdGUoKGZ1bmN0aW9uKHIsaSl7ZVtuKytdPXQ/W2kscl06cn0pKSxlfSx0b0luZGV4ZWRTZXE6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFBlKHRoaXMpfSx0b0pTOmZ1bmN0aW9uKCl7cmV0dXJuIExuKHRoaXMpfSx0b0tleWVkU2VxOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEZSh0aGlzLCEwKX0sdG9NYXA6ZnVuY3Rpb24oKXtyZXR1cm4gTXQodGhpcy50b0tleWVkU2VxKCkpfSx0b09iamVjdDpLbix0b09yZGVyZWRNYXA6ZnVuY3Rpb24oKXtyZXR1cm4gRW4odGhpcy50b0tleWVkU2VxKCkpfSx0b09yZGVyZWRTZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYXIoSSh0aGlzKT90aGlzLnZhbHVlU2VxKCk6dGhpcyl9LHRvU2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFVuKEkodGhpcyk/dGhpcy52YWx1ZVNlcSgpOnRoaXMpfSx0b1NldFNlcTpmdW5jdGlvbigpe3JldHVybiBuZXcgTWUodGhpcyl9LHRvU2VxOmZ1bmN0aW9uKCl7cmV0dXJuIGIodGhpcyk/dGhpcy50b0luZGV4ZWRTZXEoKTpJKHRoaXMpP3RoaXMudG9LZXllZFNlcSgpOnRoaXMudG9TZXRTZXEoKX0sdG9TdGFjazpmdW5jdGlvbigpe3JldHVybiBDbihJKHRoaXMpP3RoaXMudmFsdWVTZXEoKTp0aGlzKX0sdG9MaXN0OmZ1bmN0aW9uKCl7cmV0dXJuIG9uKEkodGhpcyk/dGhpcy52YWx1ZVNlcSgpOnRoaXMpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVyblwiW0NvbGxlY3Rpb25dXCJ9LF9fdG9TdHJpbmc6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMD09PXRoaXMuc2l6ZT9lK3Q6ZStcIiBcIit0aGlzLnRvU2VxKCkubWFwKHRoaXMuX190b1N0cmluZ01hcHBlcikuam9pbihcIiwgXCIpK1wiIFwiK3R9LGNvbmNhdDpmdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PWFyZ3VtZW50cy5sZW5ndGg7dC0tOyllW3RdPWFyZ3VtZW50c1t0XTtyZXR1cm4gS2UodGhpcyxmdW5jdGlvbihlLHQpe3ZhciBuPUkoZSkscj1bZV0uY29uY2F0KHQpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIEUoZSk/biYmKGU9QShlKSk6ZT1uP2FlKGUpOnNlKEFycmF5LmlzQXJyYXkoZSk/ZTpbZV0pLGV9KSkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gMCE9PWUuc2l6ZX0pKTtpZigwPT09ci5sZW5ndGgpcmV0dXJuIGU7aWYoMT09PXIubGVuZ3RoKXt2YXIgaT1yWzBdO2lmKGk9PT1lfHxuJiZJKGkpfHxiKGUpJiZiKGkpKXJldHVybiBpfXZhciBvPW5ldyB0ZShyKTtyZXR1cm4gbj9vPW8udG9LZXllZFNlcSgpOmIoZSl8fChvPW8udG9TZXRTZXEoKSksKG89by5mbGF0dGVuKCEwKSkuc2l6ZT1yLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtpZih2b2lkIDAhPT1lKXt2YXIgbj10LnNpemU7aWYodm9pZCAwIT09bilyZXR1cm4gZStufX0pLDApLG99KHRoaXMsZSkpfSxpbmNsdWRlczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gcGUodCxlKX0pKX0sZW50cmllczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faXRlcmF0b3IoRil9LGV2ZXJ5OmZ1bmN0aW9uKGUsdCl7dHQodGhpcy5zaXplKTt2YXIgbj0hMDtyZXR1cm4gdGhpcy5fX2l0ZXJhdGUoKGZ1bmN0aW9uKHIsaSxvKXtpZighZS5jYWxsKHQscixpLG8pKXJldHVybiBuPSExLCExfSkpLG59LGZpbHRlcjpmdW5jdGlvbihlLHQpe3JldHVybiBLZSh0aGlzLEJlKHRoaXMsZSx0LCEwKSl9LHBhcnRpdGlvbjpmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihlLHQsbil7dmFyIHI9SShlKSxpPVtbXSxbXV07ZS5fX2l0ZXJhdGUoKGZ1bmN0aW9uKG8sYSl7aVt0LmNhbGwobixvLGEsZSk/MTowXS5wdXNoKHI/W2Esb106byl9KSk7dmFyIG89cWUoZSk7cmV0dXJuIGkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gS2UoZSxvKHQpKX0pKX0odGhpcyxlLHQpfSxmaW5kOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLmZpbmRFbnRyeShlLHQpO3JldHVybiByP3JbMV06bn0sZm9yRWFjaDpmdW5jdGlvbihlLHQpe3JldHVybiB0dCh0aGlzLnNpemUpLHRoaXMuX19pdGVyYXRlKHQ/ZS5iaW5kKHQpOmUpfSxqb2luOmZ1bmN0aW9uKGUpe3R0KHRoaXMuc2l6ZSksZT12b2lkIDAhPT1lP1wiXCIrZTpcIixcIjt2YXIgdD1cIlwiLG49ITA7cmV0dXJuIHRoaXMuX19pdGVyYXRlKChmdW5jdGlvbihyKXtuP249ITE6dCs9ZSx0Kz1udWxsIT1yP3IudG9TdHJpbmcoKTpcIlwifSkpLHR9LGtleXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2l0ZXJhdG9yKFUpfSxtYXA6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gS2UodGhpcyx4ZSh0aGlzLGUsdCkpfSxyZWR1Y2U6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBKbih0aGlzLGUsdCxuLGFyZ3VtZW50cy5sZW5ndGg8MiwhMSl9LHJlZHVjZVJpZ2h0OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gSm4odGhpcyxlLHQsbixhcmd1bWVudHMubGVuZ3RoPDIsITApfSxyZXZlcnNlOmZ1bmN0aW9uKCl7cmV0dXJuIEtlKHRoaXMsRmUodGhpcywhMCkpfSxzbGljZTpmdW5jdGlvbihlLHQpe3JldHVybiBLZSh0aGlzLFZlKHRoaXMsZSx0LCEwKSl9LHNvbWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4hdGhpcy5ldmVyeSh0cihlKSx0KX0sc29ydDpmdW5jdGlvbihlKXtyZXR1cm4gS2UodGhpcyxXZSh0aGlzLGUpKX0sdmFsdWVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19pdGVyYXRvcih4KX0sYnV0TGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNsaWNlKDAsLTEpfSxpc0VtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuc2l6ZT8wPT09dGhpcy5zaXplOiF0aGlzLnNvbWUoKGZ1bmN0aW9uKCl7cmV0dXJuITB9KSl9LGNvdW50OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUoZT90aGlzLnRvU2VxKCkuZmlsdGVyKGUsdCk6dGhpcyl9LGNvdW50Qnk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3ZhciByPU10KCkuYXNNdXRhYmxlKCk7cmV0dXJuIGUuX19pdGVyYXRlKChmdW5jdGlvbihpLG8pe3IudXBkYXRlKHQuY2FsbChuLGksbyxlKSwwLChmdW5jdGlvbihlKXtyZXR1cm4gZSsxfSkpfSkpLHIuYXNJbW11dGFibGUoKX0odGhpcyxlLHQpfSxlcXVhbHM6ZnVuY3Rpb24oZSl7cmV0dXJuIFBuKHRoaXMsZSl9LGVudHJ5U2VxOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZihlLl9jYWNoZSlyZXR1cm4gbmV3IHRlKGUuX2NhY2hlKTt2YXIgdD1lLnRvU2VxKCkubWFwKGVyKS50b0luZGV4ZWRTZXEoKTtyZXR1cm4gdC5mcm9tRW50cnlTZXE9ZnVuY3Rpb24oKXtyZXR1cm4gZS50b1NlcSgpfSx0fSxmaWx0ZXJOb3Q6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5maWx0ZXIodHIoZSksdCl9LGZpbmRFbnRyeTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bjtyZXR1cm4gdGhpcy5fX2l0ZXJhdGUoKGZ1bmN0aW9uKG4saSxvKXtpZihlLmNhbGwodCxuLGksbykpcmV0dXJuIHI9W2ksbl0sITF9KSkscn0sZmluZEtleTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZmluZEVudHJ5KGUsdCk7cmV0dXJuIG4mJm5bMF19LGZpbmRMYXN0OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy50b0tleWVkU2VxKCkucmV2ZXJzZSgpLmZpbmQoZSx0LG4pfSxmaW5kTGFzdEVudHJ5OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy50b0tleWVkU2VxKCkucmV2ZXJzZSgpLmZpbmRFbnRyeShlLHQsbil9LGZpbmRMYXN0S2V5OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMudG9LZXllZFNlcSgpLnJldmVyc2UoKS5maW5kS2V5KGUsdCl9LGZpcnN0OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmZpbmQoZixudWxsLGUpfSxmbGF0TWFwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEtlKHRoaXMsZnVuY3Rpb24oZSx0LG4pe3ZhciByPXFlKGUpO3JldHVybiBlLnRvU2VxKCkubWFwKChmdW5jdGlvbihpLG8pe3JldHVybiByKHQuY2FsbChuLGksbyxlKSl9KSkuZmxhdHRlbighMCl9KHRoaXMsZSx0KSl9LGZsYXR0ZW46ZnVuY3Rpb24oZSl7cmV0dXJuIEtlKHRoaXMsSGUodGhpcyxlLCEwKSl9LGZyb21FbnRyeVNlcTpmdW5jdGlvbigpe3JldHVybiBuZXcgTGUodGhpcyl9LGdldDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmZpbmQoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIHBlKG4sZSl9KSx2b2lkIDAsdCl9LGdldEluOlpuLGdyb3VwQnk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3ZhciByPUkoZSksaT0oTChlKT9FbigpOk10KCkpLmFzTXV0YWJsZSgpO2UuX19pdGVyYXRlKChmdW5jdGlvbihvLGEpe2kudXBkYXRlKHQuY2FsbChuLG8sYSxlKSwoZnVuY3Rpb24oZSl7cmV0dXJuKGU9ZXx8W10pLnB1c2gocj9bYSxvXTpvKSxlfSkpfSkpO3ZhciBvPXFlKGUpO3JldHVybiBpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIEtlKGUsbyh0KSl9KSkuYXNJbW11dGFibGUoKX0odGhpcyxlLHQpfSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZ2V0KGUscykhPT1zfSxoYXNJbjpmdW5jdGlvbihlKXtyZXR1cm4gem4odGhpcyxlKX0saXNTdWJzZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9XCJmdW5jdGlvblwiPT10eXBlb2YgZS5pbmNsdWRlcz9lOkMoZSksdGhpcy5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIGUuaW5jbHVkZXModCl9KSl9LGlzU3VwZXJzZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuKGU9XCJmdW5jdGlvblwiPT10eXBlb2YgZS5pc1N1YnNldD9lOkMoZSkpLmlzU3Vic2V0KHRoaXMpfSxrZXlPZjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5maW5kS2V5KChmdW5jdGlvbih0KXtyZXR1cm4gcGUodCxlKX0pKX0sa2V5U2VxOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TZXEoKS5tYXAoJG4pLnRvSW5kZXhlZFNlcSgpfSxsYXN0OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRvU2VxKCkucmV2ZXJzZSgpLmZpcnN0KGUpfSxsYXN0S2V5T2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudG9LZXllZFNlcSgpLnJldmVyc2UoKS5rZXlPZihlKX0sbWF4OmZ1bmN0aW9uKGUpe3JldHVybiBqZSh0aGlzLGUpfSxtYXhCeTpmdW5jdGlvbihlLHQpe3JldHVybiBqZSh0aGlzLHQsZSl9LG1pbjpmdW5jdGlvbihlKXtyZXR1cm4gamUodGhpcyxlP25yKGUpOmlyKX0sbWluQnk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gamUodGhpcyx0P25yKHQpOmlyLGUpfSxyZXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2xpY2UoMSl9LHNraXA6ZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT1lP3RoaXM6dGhpcy5zbGljZShNYXRoLm1heCgwLGUpKX0sc2tpcExhc3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT1lP3RoaXM6dGhpcy5zbGljZSgwLC1NYXRoLm1heCgwLGUpKX0sc2tpcFdoaWxlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEtlKHRoaXMsR2UodGhpcyxlLHQsITApKX0sc2tpcFVudGlsOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuc2tpcFdoaWxlKHRyKGUpLHQpfSxzb3J0Qnk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gS2UodGhpcyxXZSh0aGlzLHQsZSkpfSx0YWtlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnNsaWNlKDAsTWF0aC5tYXgoMCxlKSl9LHRha2VMYXN0OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnNsaWNlKC1NYXRoLm1heCgwLGUpKX0sdGFrZVdoaWxlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEtlKHRoaXMsZnVuY3Rpb24oZSx0LG4pe3ZhciByPVhlKGUpO3JldHVybiByLl9faXRlcmF0ZVVuY2FjaGVkPWZ1bmN0aW9uKHIsaSl7dmFyIG89dGhpcztpZihpKXJldHVybiB0aGlzLmNhY2hlUmVzdWx0KCkuX19pdGVyYXRlKHIsaSk7dmFyIGE9MDtyZXR1cm4gZS5fX2l0ZXJhdGUoKGZ1bmN0aW9uKGUsaSxzKXtyZXR1cm4gdC5jYWxsKG4sZSxpLHMpJiYrK2EmJnIoZSxpLG8pfSkpLGF9LHIuX19pdGVyYXRvclVuY2FjaGVkPWZ1bmN0aW9uKHIsaSl7dmFyIG89dGhpcztpZihpKXJldHVybiB0aGlzLmNhY2hlUmVzdWx0KCkuX19pdGVyYXRvcihyLGkpO3ZhciBhPWUuX19pdGVyYXRvcihGLGkpLHM9ITA7cmV0dXJuIG5ldyBIKChmdW5jdGlvbigpe2lmKCFzKXJldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH07dmFyIGU9YS5uZXh0KCk7aWYoZS5kb25lKXJldHVybiBlO3ZhciBpPWUudmFsdWUsYz1pWzBdLGw9aVsxXTtyZXR1cm4gdC5jYWxsKG4sbCxjLG8pP3I9PT1GP2U6VyhyLGMsbCxlKToocz0hMSx7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KX0pKX0scn0odGhpcyxlLHQpKX0sdGFrZVVudGlsOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMudGFrZVdoaWxlKHRyKGUpLHQpfSx1cGRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUodGhpcyl9LHZhbHVlU2VxOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9JbmRleGVkU2VxKCl9LGhhc2hDb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19oYXNofHwodGhpcy5fX2hhc2g9ZnVuY3Rpb24oZSl7aWYoZS5zaXplPT09MS8wKXJldHVybiAwO3ZhciB0PUwoZSksbj1JKGUpLHI9dD8xOjA7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9bWUodCwzNDMyOTE4MzUzKSx0PW1lKHQ8PDE1fHQ+Pj4tMTUsNDYxODQ1OTA3KSx0PW1lKHQ8PDEzfHQ+Pj4tMTMsNSksdD1tZSgodD0odCszODY0MjkyMTk2fDApXmUpXnQ+Pj4xNiwyMjQ2ODIyNTA3KSxoZSgodD1tZSh0XnQ+Pj4xMywzMjY2NDg5OTA5KSledD4+PjE2KX0oZS5fX2l0ZXJhdGUobj90P2Z1bmN0aW9uKGUsdCl7cj0zMSpyK29yKGdlKGUpLGdlKHQpKXwwfTpmdW5jdGlvbihlLHQpe3I9citvcihnZShlKSxnZSh0KSl8MH06dD9mdW5jdGlvbihlKXtyPTMxKnIrZ2UoZSl8MH06ZnVuY3Rpb24oZSl7cj1yK2dlKGUpfDB9KSxyKX0odGhpcykpfX0pO3ZhciBZbj1DLnByb3RvdHlwZTtZblt5XT0hMCxZbltHXT1Zbi52YWx1ZXMsWW4udG9KU09OPVluLnRvQXJyYXksWW4uX190b1N0cmluZ01hcHBlcj1hdCxZbi5pbnNwZWN0PVluLnRvU291cmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoKX0sWW4uY2hhaW49WW4uZmxhdE1hcCxZbi5jb250YWlucz1Zbi5pbmNsdWRlcyxNbihBLHtmbGlwOmZ1bmN0aW9uKCl7cmV0dXJuIEtlKHRoaXMsVWUodGhpcykpfSxtYXBFbnRyaWVzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPTA7cmV0dXJuIEtlKHRoaXMsdGhpcy50b1NlcSgpLm1hcCgoZnVuY3Rpb24oaSxvKXtyZXR1cm4gZS5jYWxsKHQsW28saV0scisrLG4pfSkpLmZyb21FbnRyeVNlcSgpKX0sbWFwS2V5czpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7cmV0dXJuIEtlKHRoaXMsdGhpcy50b1NlcSgpLmZsaXAoKS5tYXAoKGZ1bmN0aW9uKHIsaSl7cmV0dXJuIGUuY2FsbCh0LHIsaSxuKX0pKS5mbGlwKCkpfX0pO3ZhciBxbj1BLnByb3RvdHlwZTtxbltfXT0hMCxxbltHXT1Zbi5lbnRyaWVzLHFuLnRvSlNPTj1Lbixxbi5fX3RvU3RyaW5nTWFwcGVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGF0KHQpK1wiOiBcIithdChlKX0sTW4oUix7dG9LZXllZFNlcTpmdW5jdGlvbigpe3JldHVybiBuZXcgRGUodGhpcywhMSl9LGZpbHRlcjpmdW5jdGlvbihlLHQpe3JldHVybiBLZSh0aGlzLEJlKHRoaXMsZSx0LCExKSl9LGZpbmRJbmRleDpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZmluZEVudHJ5KGUsdCk7cmV0dXJuIG4/blswXTotMX0saW5kZXhPZjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmtleU9mKGUpO3JldHVybiB2b2lkIDA9PT10Py0xOnR9LGxhc3RJbmRleE9mOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubGFzdEtleU9mKGUpO3JldHVybiB2b2lkIDA9PT10Py0xOnR9LHJldmVyc2U6ZnVuY3Rpb24oKXtyZXR1cm4gS2UodGhpcyxGZSh0aGlzLCExKSl9LHNsaWNlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEtlKHRoaXMsVmUodGhpcyxlLHQsITEpKX0sc3BsaWNlOmZ1bmN0aW9uKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDtpZih0PU1hdGgubWF4KHR8fDAsMCksMD09PW58fDI9PT1uJiYhdClyZXR1cm4gdGhpcztlPW0oZSxlPDA/dGhpcy5jb3VudCgpOnRoaXMuc2l6ZSk7dmFyIHI9dGhpcy5zbGljZSgwLGUpO3JldHVybiBLZSh0aGlzLDE9PT1uP3I6ci5jb25jYXQoJGUoYXJndW1lbnRzLDIpLHRoaXMuc2xpY2UoZSt0KSkpfSxmaW5kTGFzdEluZGV4OmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5maW5kTGFzdEVudHJ5KGUsdCk7cmV0dXJuIG4/blswXTotMX0sZmlyc3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZ2V0KDAsZSl9LGZsYXR0ZW46ZnVuY3Rpb24oZSl7cmV0dXJuIEtlKHRoaXMsSGUodGhpcyxlLCExKSl9LGdldDpmdW5jdGlvbihlLHQpe3JldHVybihlPWQodGhpcyxlKSk8MHx8dGhpcy5zaXplPT09MS8wfHx2b2lkIDAhPT10aGlzLnNpemUmJmU+dGhpcy5zaXplP3Q6dGhpcy5maW5kKChmdW5jdGlvbih0LG4pe3JldHVybiBuPT09ZX0pLHZvaWQgMCx0KX0saGFzOmZ1bmN0aW9uKGUpe3JldHVybihlPWQodGhpcyxlKSk+PTAmJih2b2lkIDAhPT10aGlzLnNpemU/dGhpcy5zaXplPT09MS8wfHxlPHRoaXMuc2l6ZTotMSE9PXRoaXMuaW5kZXhPZihlKSl9LGludGVycG9zZTpmdW5jdGlvbihlKXtyZXR1cm4gS2UodGhpcyxmdW5jdGlvbihlLHQpe3ZhciBuPVhlKGUpO3JldHVybiBuLnNpemU9ZS5zaXplJiYyKmUuc2l6ZS0xLG4uX19pdGVyYXRlVW5jYWNoZWQ9ZnVuY3Rpb24obixyKXt2YXIgaT10aGlzLG89MDtyZXR1cm4gZS5fX2l0ZXJhdGUoKGZ1bmN0aW9uKGUpe3JldHVybighb3x8ITEhPT1uKHQsbysrLGkpKSYmITEhPT1uKGUsbysrLGkpfSksciksb30sbi5fX2l0ZXJhdG9yVW5jYWNoZWQ9ZnVuY3Rpb24obixyKXt2YXIgaSxvPWUuX19pdGVyYXRvcih4LHIpLGE9MDtyZXR1cm4gbmV3IEgoKGZ1bmN0aW9uKCl7cmV0dXJuKCFpfHxhJTIpJiYoaT1vLm5leHQoKSkuZG9uZT9pOmElMj9XKG4sYSsrLHQpOlcobixhKyssaS52YWx1ZSxpKX0pKX0sbn0odGhpcyxlKSl9LGludGVybGVhdmU6ZnVuY3Rpb24oKXt2YXIgZT1bdGhpc10uY29uY2F0KCRlKGFyZ3VtZW50cykpLHQ9emUodGhpcy50b1NlcSgpLCQub2YsZSksbj10LmZsYXR0ZW4oITApO3JldHVybiB0LnNpemUmJihuLnNpemU9dC5zaXplKmUubGVuZ3RoKSxLZSh0aGlzLG4pfSxrZXlTZXE6ZnVuY3Rpb24oKXtyZXR1cm4gV24oMCx0aGlzLnNpemUpfSxsYXN0OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmdldCgtMSxlKX0sc2tpcFdoaWxlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEtlKHRoaXMsR2UodGhpcyxlLHQsITEpKX0semlwOmZ1bmN0aW9uKCl7cmV0dXJuIEtlKHRoaXMsemUodGhpcyxycixbdGhpc10uY29uY2F0KCRlKGFyZ3VtZW50cykpKSl9LHppcEFsbDpmdW5jdGlvbigpe3JldHVybiBLZSh0aGlzLHplKHRoaXMscnIsW3RoaXNdLmNvbmNhdCgkZShhcmd1bWVudHMpKSwhMCkpfSx6aXBXaXRoOmZ1bmN0aW9uKGUpe3ZhciB0PSRlKGFyZ3VtZW50cyk7cmV0dXJuIHRbMF09dGhpcyxLZSh0aGlzLHplKHRoaXMsZSx0KSl9fSk7dmFyIFhuPVIucHJvdG90eXBlO1huW1NdPSEwLFhuW01dPSEwLE1uKGsse2dldDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmhhcyhlKT9lOnR9LGluY2x1ZGVzOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhhcyhlKX0sa2V5U2VxOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWVTZXEoKX19KTt2YXIgUW49ay5wcm90b3R5cGU7ZnVuY3Rpb24gSm4oZSx0LG4scixpLG8pe3JldHVybiB0dChlLnNpemUpLGUuX19pdGVyYXRlKChmdW5jdGlvbihlLG8sYSl7aT8oaT0hMSxuPWUpOm49dC5jYWxsKHIsbixlLG8sYSl9KSxvKSxufWZ1bmN0aW9uICRuKGUsdCl7cmV0dXJuIHR9ZnVuY3Rpb24gZXIoZSx0KXtyZXR1cm5bdCxlXX1mdW5jdGlvbiB0cihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIG5yKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybi1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gcnIoKXtyZXR1cm4gJGUoYXJndW1lbnRzKX1mdW5jdGlvbiBpcihlLHQpe3JldHVybiBlPHQ/MTplPnQ/LTE6MH1mdW5jdGlvbiBvcihlLHQpe3JldHVybiBlXnQrMjY1NDQzNTc2OSsoZTw8NikrKGU+PjIpfDB9UW4uaGFzPVluLmluY2x1ZGVzLFFuLmNvbnRhaW5zPVFuLmluY2x1ZGVzLFFuLmtleXM9UW4udmFsdWVzLE1uKEoscW4pLE1uKCQsWG4pLE1uKGVlLFFuKTt2YXIgYXI9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtyZXR1cm4gbnVsbD09ZT91cigpOkRuKGUpP2U6dXIoKS53aXRoTXV0YXRpb25zKChmdW5jdGlvbih0KXt2YXIgbj1rKGUpO3R0KG4uc2l6ZSksbi5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gdC5hZGQoZSl9KSl9KSl9cmV0dXJuIGUmJih0Ll9fcHJvdG9fXz1lKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSx0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10LHQub2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcyhhcmd1bWVudHMpfSx0LmZyb21LZXlzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzKEEoZSkua2V5U2VxKCkpfSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdG9TdHJpbmcoXCJPcmRlcmVkU2V0IHtcIixcIn1cIil9LHR9KFVuKTthci5pc09yZGVyZWRTZXQ9RG47dmFyIHNyLGNyPWFyLnByb3RvdHlwZTtmdW5jdGlvbiBscihlLHQpe3ZhciBuPU9iamVjdC5jcmVhdGUoY3IpO3JldHVybiBuLnNpemU9ZT9lLnNpemU6MCxuLl9tYXA9ZSxuLl9fb3duZXJJRD10LG59ZnVuY3Rpb24gdXIoKXtyZXR1cm4gc3J8fChzcj1scihJbigpKSl9Y3JbTV09ITAsY3IuemlwPVhuLnppcCxjci56aXBXaXRoPVhuLnppcFdpdGgsY3IuemlwQWxsPVhuLnppcEFsbCxjci5fX2VtcHR5PXVyLGNyLl9fbWFrZT1scjt2YXIgZHI9ZnVuY3Rpb24oZSx0KXt2YXIgbjshZnVuY3Rpb24oZSl7aWYoRChlKSl0aHJvdyBuZXcgRXJyb3IoXCJDYW4gbm90IGNhbGwgYFJlY29yZGAgd2l0aCBhbiBpbW11dGFibGUgUmVjb3JkIGFzIGRlZmF1bHQgdmFsdWVzLiBVc2UgYSBwbGFpbiBqYXZhc2NyaXB0IG9iamVjdCBpbnN0ZWFkLlwiKTtpZihQKGUpKXRocm93IG5ldyBFcnJvcihcIkNhbiBub3QgY2FsbCBgUmVjb3JkYCB3aXRoIGFuIGltbXV0YWJsZSBDb2xsZWN0aW9uIGFzIGRlZmF1bHQgdmFsdWVzLiBVc2UgYSBwbGFpbiBqYXZhc2NyaXB0IG9iamVjdCBpbnN0ZWFkLlwiKTtpZihudWxsPT09ZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKFwiQ2FuIG5vdCBjYWxsIGBSZWNvcmRgIHdpdGggYSBub24tb2JqZWN0IGFzIGRlZmF1bHQgdmFsdWVzLiBVc2UgYSBwbGFpbiBqYXZhc2NyaXB0IG9iamVjdCBpbnN0ZWFkLlwiKX0oZSk7dmFyIHI9ZnVuY3Rpb24obyl7dmFyIGE9dGhpcztpZihvIGluc3RhbmNlb2YgcilyZXR1cm4gbztpZighKHRoaXMgaW5zdGFuY2VvZiByKSlyZXR1cm4gbmV3IHIobyk7aWYoIW4pe249ITA7dmFyIHM9T2JqZWN0LmtleXMoZSksYz1pLl9pbmRpY2VzPXt9O2kuX25hbWU9dCxpLl9rZXlzPXMsaS5fZGVmYXVsdFZhbHVlcz1lO2Zvcih2YXIgbD0wO2w8cy5sZW5ndGg7bCsrKXt2YXIgdT1zW2xdO2NbdV09bCxpW3VdP1wib2JqZWN0XCI9PXR5cGVvZiBjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybihcIkNhbm5vdCBkZWZpbmUgXCIrbXIodGhpcykrJyB3aXRoIHByb3BlcnR5IFwiJyt1KydcIiBzaW5jZSB0aGF0IHByb3BlcnR5IG5hbWUgaXMgcGFydCBvZiB0aGUgUmVjb3JkIEFQSS4nKTp2cihpLHUpfX1yZXR1cm4gdGhpcy5fX293bmVySUQ9dm9pZCAwLHRoaXMuX3ZhbHVlcz1vbigpLndpdGhNdXRhdGlvbnMoKGZ1bmN0aW9uKGUpe2Uuc2V0U2l6ZShhLl9rZXlzLmxlbmd0aCksQShvKS5mb3JFYWNoKChmdW5jdGlvbih0LG4pe2Uuc2V0KGEuX2luZGljZXNbbl0sdD09PWEuX2RlZmF1bHRWYWx1ZXNbbl0/dm9pZCAwOnQpfSkpfSkpLHRoaXN9LGk9ci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShmcik7cmV0dXJuIGkuY29uc3RydWN0b3I9cix0JiYoci5kaXNwbGF5TmFtZT10KSxyfTtkci5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtmb3IodmFyIGUsdD1tcih0aGlzKStcIiB7IFwiLG49dGhpcy5fa2V5cyxyPTAsaT1uLmxlbmd0aDtyIT09aTtyKyspdCs9KHI/XCIsIFwiOlwiXCIpKyhlPW5bcl0pK1wiOiBcIithdCh0aGlzLmdldChlKSk7cmV0dXJuIHQrXCIgfVwifSxkci5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZXx8RChlKSYmaHIodGhpcykuZXF1YWxzKGhyKGUpKX0sZHIucHJvdG90eXBlLmhhc2hDb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIGhyKHRoaXMpLmhhc2hDb2RlKCl9LGRyLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2luZGljZXMuaGFzT3duUHJvcGVydHkoZSl9LGRyLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5oYXMoZSkpcmV0dXJuIHQ7dmFyIG49dGhpcy5faW5kaWNlc1tlXSxyPXRoaXMuX3ZhbHVlcy5nZXQobik7cmV0dXJuIHZvaWQgMD09PXI/dGhpcy5fZGVmYXVsdFZhbHVlc1tlXTpyfSxkci5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7aWYodGhpcy5oYXMoZSkpe3ZhciBuPXRoaXMuX3ZhbHVlcy5zZXQodGhpcy5faW5kaWNlc1tlXSx0PT09dGhpcy5fZGVmYXVsdFZhbHVlc1tlXT92b2lkIDA6dCk7aWYobiE9PXRoaXMuX3ZhbHVlcyYmIXRoaXMuX19vd25lcklEKXJldHVybiBwcih0aGlzLG4pfXJldHVybiB0aGlzfSxkci5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnNldChlKX0sZHIucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fdmFsdWVzLmNsZWFyKCkuc2V0U2l6ZSh0aGlzLl9rZXlzLmxlbmd0aCk7cmV0dXJuIHRoaXMuX19vd25lcklEP3RoaXM6cHIodGhpcyxlKX0sZHIucHJvdG90eXBlLndhc0FsdGVyZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFsdWVzLndhc0FsdGVyZWQoKX0sZHIucHJvdG90eXBlLnRvU2VxPWZ1bmN0aW9uKCl7cmV0dXJuIGhyKHRoaXMpfSxkci5wcm90b3R5cGUudG9KUz1mdW5jdGlvbigpe3JldHVybiBMbih0aGlzKX0sZHIucHJvdG90eXBlLmVudHJpZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2l0ZXJhdG9yKEYpfSxkci5wcm90b3R5cGUuX19pdGVyYXRvcj1mdW5jdGlvbihlLHQpe3JldHVybiBocih0aGlzKS5fX2l0ZXJhdG9yKGUsdCl9LGRyLnByb3RvdHlwZS5fX2l0ZXJhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaHIodGhpcykuX19pdGVyYXRlKGUsdCl9LGRyLnByb3RvdHlwZS5fX2Vuc3VyZU93bmVyPWZ1bmN0aW9uKGUpe2lmKGU9PT10aGlzLl9fb3duZXJJRClyZXR1cm4gdGhpczt2YXIgdD10aGlzLl92YWx1ZXMuX19lbnN1cmVPd25lcihlKTtyZXR1cm4gZT9wcih0aGlzLHQsZSk6KHRoaXMuX19vd25lcklEPWUsdGhpcy5fdmFsdWVzPXQsdGhpcyl9LGRyLmlzUmVjb3JkPUQsZHIuZ2V0RGVzY3JpcHRpdmVOYW1lPW1yO3ZhciBmcj1kci5wcm90b3R5cGU7ZnVuY3Rpb24gcHIoZSx0LG4pe3ZhciByPU9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpKTtyZXR1cm4gci5fdmFsdWVzPXQsci5fX293bmVySUQ9bixyfWZ1bmN0aW9uIG1yKGUpe3JldHVybiBlLmNvbnN0cnVjdG9yLmRpc3BsYXlOYW1lfHxlLmNvbnN0cnVjdG9yLm5hbWV8fFwiUmVjb3JkXCJ9ZnVuY3Rpb24gaHIoZSl7cmV0dXJuIGFlKGUuX2tleXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm5bdCxlLmdldCh0KV19KSkpfWZ1bmN0aW9uIHZyKGUsdCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldCh0KX0sc2V0OmZ1bmN0aW9uKGUpe2V0KHRoaXMuX19vd25lcklELFwiQ2Fubm90IHNldCBvbiBhbiBpbW11dGFibGUgcmVjb3JkLlwiKSx0aGlzLnNldCh0LGUpfX0pfWNhdGNoKGUpe319ZnJbd109ITAsZnJbcl09ZnIucmVtb3ZlLGZyLmRlbGV0ZUluPWZyLnJlbW92ZUluPWd0LGZyLmdldEluPVpuLGZyLmhhc0luPVluLmhhc0luLGZyLm1lcmdlPUl0LGZyLm1lcmdlV2l0aD1TdCxmci5tZXJnZUluPWt0LGZyLm1lcmdlRGVlcD1BdCxmci5tZXJnZURlZXBXaXRoPVJ0LGZyLm1lcmdlRGVlcEluPU90LGZyLnNldEluPWh0LGZyLnVwZGF0ZT1FdCxmci51cGRhdGVJbj1fdCxmci53aXRoTXV0YXRpb25zPU50LGZyLmFzTXV0YWJsZT13dCxmci5hc0ltbXV0YWJsZT1EdCxmcltHXT1mci5lbnRyaWVzLGZyLnRvSlNPTj1mci50b09iamVjdD1Zbi50b09iamVjdCxmci5pbnNwZWN0PWZyLnRvU291cmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoKX07dmFyIGdyLHlyPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSxuKXtpZighKHRoaXMgaW5zdGFuY2VvZiB0KSlyZXR1cm4gbmV3IHQoZSxuKTtpZih0aGlzLl92YWx1ZT1lLHRoaXMuc2l6ZT12b2lkIDA9PT1uPzEvMDpNYXRoLm1heCgwLG4pLDA9PT10aGlzLnNpemUpe2lmKGdyKXJldHVybiBncjtncj10aGlzfX1yZXR1cm4gZSYmKHQuX19wcm90b19fPWUpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXQsdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuc2l6ZT9cIlJlcGVhdCBbXVwiOlwiUmVwZWF0IFsgXCIrdGhpcy5fdmFsdWUrXCIgXCIrdGhpcy5zaXplK1wiIHRpbWVzIF1cIn0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuaGFzKGUpP3RoaXMuX3ZhbHVlOnR9LHQucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUpe3JldHVybiBwZSh0aGlzLl92YWx1ZSxlKX0sdC5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oZSxuKXt2YXIgcj10aGlzLnNpemU7cmV0dXJuIHAoZSxuLHIpP3RoaXM6bmV3IHQodGhpcy5fdmFsdWUsaChuLHIpLW0oZSxyKSl9LHQucHJvdG90eXBlLnJldmVyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihlKXtyZXR1cm4gcGUodGhpcy5fdmFsdWUsZSk/MDotMX0sdC5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24oZSl7cmV0dXJuIHBlKHRoaXMuX3ZhbHVlLGUpP3RoaXMuc2l6ZTotMX0sdC5wcm90b3R5cGUuX19pdGVyYXRlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXRoaXMuc2l6ZSxyPTA7ciE9PW4mJiExIT09ZSh0aGlzLl92YWx1ZSx0P24tKytyOnIrKyx0aGlzKTspO3JldHVybiByfSx0LnByb3RvdHlwZS5fX2l0ZXJhdG9yPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPXRoaXMuc2l6ZSxpPTA7cmV0dXJuIG5ldyBIKChmdW5jdGlvbigpe3JldHVybiBpPT09cj97dmFsdWU6dm9pZCAwLGRvbmU6ITB9OlcoZSx0P3ItKytpOmkrKyxuLl92YWx1ZSl9KSl9LHQucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHQ/cGUodGhpcy5fdmFsdWUsZS5fdmFsdWUpOlBuKGUpfSx0fSgkKTtmdW5jdGlvbiBFcihlLHQsbixyLGksbyl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIG4mJiFQKG4pJiYoWChuKXx8WihuKXx8aXQobikpKXtpZih+ZS5pbmRleE9mKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY29udmVydCBjaXJjdWxhciBzdHJ1Y3R1cmUgdG8gSW1tdXRhYmxlXCIpO2UucHVzaChuKSxpJiZcIlwiIT09ciYmaS5wdXNoKHIpO3ZhciBhPXQuY2FsbChvLHIsUShuKS5tYXAoKGZ1bmN0aW9uKHIsbyl7cmV0dXJuIEVyKGUsdCxyLG8saSxuKX0pKSxpJiZpLnNsaWNlKCkpO3JldHVybiBlLnBvcCgpLGkmJmkucG9wKCksYX1yZXR1cm4gbn1mdW5jdGlvbiBfcihlLHQpe3JldHVybiBiKHQpP3QudG9MaXN0KCk6SSh0KT90LnRvTWFwKCk6dC50b1NldCgpfWNvbnN0IElyPXt2ZXJzaW9uOlwiNC4zLjBcIixDb2xsZWN0aW9uOkMsSXRlcmFibGU6QyxTZXE6USxNYXA6TXQsT3JkZXJlZE1hcDpFbixMaXN0Om9uLFN0YWNrOkNuLFNldDpVbixPcmRlcmVkU2V0OmFyLFBhaXJTb3J0aW5nOntMZWZ0VGhlblJpZ2h0Oi0xLFJpZ2h0VGhlbkxlZnQ6MX0sUmVjb3JkOmRyLFJhbmdlOlduLFJlcGVhdDp5cixpczpwZSxmcm9tSlM6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gRXIoW10sdHx8X3IsZSxcIlwiLHQmJnQubGVuZ3RoPjI/W106dm9pZCAwLHtcIlwiOmV9KX0saGFzaDpnZSxpc0ltbXV0YWJsZTpQLGlzQ29sbGVjdGlvbjpFLGlzS2V5ZWQ6SSxpc0luZGV4ZWQ6Yixpc0Fzc29jaWF0aXZlOlQsaXNPcmRlcmVkOkwsaXNWYWx1ZU9iamVjdDpmZSxpc1BsYWluT2JqZWN0Oml0LGlzU2VxOk4saXNMaXN0OnJuLGlzTWFwOnVlLGlzT3JkZXJlZE1hcDpkZSxpc1N0YWNrOlRuLGlzU2V0OnduLGlzT3JkZXJlZFNldDpEbixpc1JlY29yZDpELGdldDpjdCxnZXRJbjpqbixoYXM6c3QsaGFzSW46em4sbWVyZ2U6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49YXJndW1lbnRzLmxlbmd0aC0xO24tLSA+MDspdFtuXT1hcmd1bWVudHNbbisxXTtyZXR1cm4gQ3QoZSx0KX0sbWVyZ2VEZWVwOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPWFyZ3VtZW50cy5sZW5ndGgtMTtuLS0gPjA7KXRbbl09YXJndW1lbnRzW24rMV07cmV0dXJuIFR0KGUsdCl9LG1lcmdlV2l0aDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1bXSxyPWFyZ3VtZW50cy5sZW5ndGgtMjtyLS0gPjA7KW5bcl09YXJndW1lbnRzW3IrMl07cmV0dXJuIEN0KHQsbixlKX0sbWVyZ2VEZWVwV2l0aDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1bXSxyPWFyZ3VtZW50cy5sZW5ndGgtMjtyLS0gPjA7KW5bcl09YXJndW1lbnRzW3IrMl07cmV0dXJuIFR0KHQsbixlKX0scmVtb3ZlOnV0LHJlbW92ZUluOnZ0LHNldDpkdCxzZXRJbjptdCx1cGRhdGU6eXQsdXBkYXRlSW46ZnR9fSwxNjI4NDooZSx0LG4pPT57bi5kKHQse0M6KCk9PmN9KTt2YXIgcj1uKDcwNjU1KSxpPW4oMzk5NDMpLG89big5NTk1NyksYT1uKDYxMDkyKTtmdW5jdGlvbiBzKGUpe3JldHVybntjcmVhdGU6ZnVuY3Rpb24oKXtyZXR1cm57Z2V0OmZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSxzZXQ6ZnVuY3Rpb24odCxuKXtlW3RdPW59fX19fXZhciBjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4saSxjKXt2b2lkIDA9PT1uJiYobj1lLmRlZmF1bHRMb2NhbGUpO3ZhciBsLHUsZCxmPXRoaXM7aWYodGhpcy5mb3JtYXR0ZXJDYWNoZT17bnVtYmVyOnt9LGRhdGVUaW1lOnt9LHBsdXJhbFJ1bGVzOnt9fSx0aGlzLmZvcm1hdD1mdW5jdGlvbihlKXt2YXIgdD1mLmZvcm1hdFRvUGFydHMoZSk7aWYoMT09PXQubGVuZ3RoKXJldHVybiB0WzBdLnZhbHVlO3ZhciBuPXQucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlLmxlbmd0aCYmdC50eXBlPT09YS5kdS5saXRlcmFsJiZcInN0cmluZ1wiPT10eXBlb2YgZVtlLmxlbmd0aC0xXT9lW2UubGVuZ3RoLTFdKz10LnZhbHVlOmUucHVzaCh0LnZhbHVlKSxlfSksW10pO3JldHVybiBuLmxlbmd0aDw9MT9uWzBdfHxcIlwiOm59LHRoaXMuZm9ybWF0VG9QYXJ0cz1mdW5jdGlvbihlKXtyZXR1cm4oMCxhLkZLKShmLmFzdCxmLmxvY2FsZXMsZi5mb3JtYXR0ZXJzLGYuZm9ybWF0cyxlLHZvaWQgMCxmLm1lc3NhZ2UpfSx0aGlzLnJlc29sdmVkT3B0aW9ucz1mdW5jdGlvbigpe3ZhciBlO3JldHVybntsb2NhbGU6KG51bGw9PT0oZT1mLnJlc29sdmVkTG9jYWxlKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS50b1N0cmluZygpKXx8SW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKGYubG9jYWxlcylbMF19fSx0aGlzLmdldEFzdD1mdW5jdGlvbigpe3JldHVybiBmLmFzdH0sdGhpcy5sb2NhbGVzPW4sdGhpcy5yZXNvbHZlZExvY2FsZT1lLnJlc29sdmVMb2NhbGUobiksXCJzdHJpbmdcIj09dHlwZW9mIHQpe2lmKHRoaXMubWVzc2FnZT10LCFlLl9fcGFyc2UpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludGxNZXNzYWdlRm9ybWF0Ll9fcGFyc2UgbXVzdCBiZSBzZXQgdG8gcHJvY2VzcyBgbWVzc2FnZWAgb2YgdHlwZSBgc3RyaW5nYFwiKTt2YXIgcD1jfHx7fSxtPShwLmZvcm1hdHRlcnMsKDAsci5fX3Jlc3QpKHAsW1wiZm9ybWF0dGVyc1wiXSkpO3RoaXMuYXN0PWUuX19wYXJzZSh0LCgwLHIuX19hc3NpZ24pKCgwLHIuX19hc3NpZ24pKHt9LG0pLHtsb2NhbGU6dGhpcy5yZXNvbHZlZExvY2FsZX0pKX1lbHNlIHRoaXMuYXN0PXQ7aWYoIUFycmF5LmlzQXJyYXkodGhpcy5hc3QpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBIG1lc3NhZ2UgbXVzdCBiZSBwcm92aWRlZCBhcyBhIFN0cmluZyBvciBBU1QuXCIpO3RoaXMuZm9ybWF0cz0odT1lLmZvcm1hdHMsKGQ9aSk/T2JqZWN0LmtleXModSkucmVkdWNlKChmdW5jdGlvbihlLHQpe3ZhciBuLGk7cmV0dXJuIGVbdF09KG49dVt0XSwoaT1kW3RdKT8oMCxyLl9fYXNzaWduKSgoMCxyLl9fYXNzaWduKSgoMCxyLl9fYXNzaWduKSh7fSxufHx7fSksaXx8e30pLE9iamVjdC5rZXlzKG4pLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XT0oMCxyLl9fYXNzaWduKSgoMCxyLl9fYXNzaWduKSh7fSxuW3RdKSxpW3RdfHx7fSksZX0pLHt9KSk6biksZX0pLCgwLHIuX19hc3NpZ24pKHt9LHUpKTp1KSx0aGlzLmZvcm1hdHRlcnM9YyYmYy5mb3JtYXR0ZXJzfHwodm9pZCAwPT09KGw9dGhpcy5mb3JtYXR0ZXJDYWNoZSkmJihsPXtudW1iZXI6e30sZGF0ZVRpbWU6e30scGx1cmFsUnVsZXM6e319KSx7Z2V0TnVtYmVyRm9ybWF0OigwLG8uSCkoKGZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIG5ldygoZT1JbnRsLk51bWJlckZvcm1hdCkuYmluZC5hcHBseShlLCgwLHIuX19zcHJlYWRBcnJheSkoW3ZvaWQgMF0sdCwhMSkpKX0pLHtjYWNoZTpzKGwubnVtYmVyKSxzdHJhdGVneTpvLkEudmFyaWFkaWN9KSxnZXREYXRlVGltZUZvcm1hdDooMCxvLkgpKChmdW5jdGlvbigpe2Zvcih2YXIgZSx0PVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXRbbl09YXJndW1lbnRzW25dO3JldHVybiBuZXcoKGU9SW50bC5EYXRlVGltZUZvcm1hdCkuYmluZC5hcHBseShlLCgwLHIuX19zcHJlYWRBcnJheSkoW3ZvaWQgMF0sdCwhMSkpKX0pLHtjYWNoZTpzKGwuZGF0ZVRpbWUpLHN0cmF0ZWd5Om8uQS52YXJpYWRpY30pLGdldFBsdXJhbFJ1bGVzOigwLG8uSCkoKGZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIG5ldygoZT1JbnRsLlBsdXJhbFJ1bGVzKS5iaW5kLmFwcGx5KGUsKDAsci5fX3NwcmVhZEFycmF5KShbdm9pZCAwXSx0LCExKSkpfSkse2NhY2hlOnMobC5wbHVyYWxSdWxlcyksc3RyYXRlZ3k6by5BLnZhcmlhZGljfSl9KX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJkZWZhdWx0TG9jYWxlXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBlLm1lbW9pemVkRGVmYXVsdExvY2FsZXx8KGUubWVtb2l6ZWREZWZhdWx0TG9jYWxlPShuZXcgSW50bC5OdW1iZXJGb3JtYXQpLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZSksZS5tZW1vaXplZERlZmF1bHRMb2NhbGV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5tZW1vaXplZERlZmF1bHRMb2NhbGU9bnVsbCxlLnJlc29sdmVMb2NhbGU9ZnVuY3Rpb24oZSl7aWYodm9pZCAwIT09SW50bC5Mb2NhbGUpe3ZhciB0PUludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihlKTtyZXR1cm4gdC5sZW5ndGg+MD9uZXcgSW50bC5Mb2NhbGUodFswXSk6bmV3IEludGwuTG9jYWxlKFwic3RyaW5nXCI9PXR5cGVvZiBlP2U6ZVswXSl9fSxlLl9fcGFyc2U9aS5RYyxlLmZvcm1hdHM9e251bWJlcjp7aW50ZWdlcjp7bWF4aW11bUZyYWN0aW9uRGlnaXRzOjB9LGN1cnJlbmN5OntzdHlsZTpcImN1cnJlbmN5XCJ9LHBlcmNlbnQ6e3N0eWxlOlwicGVyY2VudFwifX0sZGF0ZTp7c2hvcnQ6e21vbnRoOlwibnVtZXJpY1wiLGRheTpcIm51bWVyaWNcIix5ZWFyOlwiMi1kaWdpdFwifSxtZWRpdW06e21vbnRoOlwic2hvcnRcIixkYXk6XCJudW1lcmljXCIseWVhcjpcIm51bWVyaWNcIn0sbG9uZzp7bW9udGg6XCJsb25nXCIsZGF5OlwibnVtZXJpY1wiLHllYXI6XCJudW1lcmljXCJ9LGZ1bGw6e3dlZWtkYXk6XCJsb25nXCIsbW9udGg6XCJsb25nXCIsZGF5OlwibnVtZXJpY1wiLHllYXI6XCJudW1lcmljXCJ9fSx0aW1lOntzaG9ydDp7aG91cjpcIm51bWVyaWNcIixtaW51dGU6XCJudW1lcmljXCJ9LG1lZGl1bTp7aG91cjpcIm51bWVyaWNcIixtaW51dGU6XCJudW1lcmljXCIsc2Vjb25kOlwibnVtZXJpY1wifSxsb25nOntob3VyOlwibnVtZXJpY1wiLG1pbnV0ZTpcIm51bWVyaWNcIixzZWNvbmQ6XCJudW1lcmljXCIsdGltZVpvbmVOYW1lOlwic2hvcnRcIn0sZnVsbDp7aG91cjpcIm51bWVyaWNcIixtaW51dGU6XCJudW1lcmljXCIsc2Vjb25kOlwibnVtZXJpY1wiLHRpbWVab25lTmFtZTpcInNob3J0XCJ9fX0sZX0oKX0sMTEwNTA6KGUsdCxuKT0+e24uZCh0LHtDODooKT0+YSxIUjooKT0+YyxZUjooKT0+cyxqSzooKT0+cix1XzooKT0+b30pO3ZhciByLGk9big3MDY1NSk7IWZ1bmN0aW9uKGUpe2UuTUlTU0lOR19WQUxVRT1cIk1JU1NJTkdfVkFMVUVcIixlLklOVkFMSURfVkFMVUU9XCJJTlZBTElEX1ZBTFVFXCIsZS5NSVNTSU5HX0lOVExfQVBJPVwiTUlTU0lOR19JTlRMX0FQSVwifShyfHwocj17fSkpO3ZhciBvPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuLHIpe3ZhciBpPWUuY2FsbCh0aGlzLHQpfHx0aGlzO3JldHVybiBpLmNvZGU9bixpLm9yaWdpbmFsTWVzc2FnZT1yLGl9cmV0dXJuKDAsaS5fX2V4dGVuZHMpKHQsZSksdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIltmb3JtYXRqcyBFcnJvcjogXCIuY29uY2F0KHRoaXMuY29kZSxcIl0gXCIpLmNvbmNhdCh0aGlzLm1lc3NhZ2UpfSx0fShFcnJvciksYT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbixpLG8pe3JldHVybiBlLmNhbGwodGhpcywnSW52YWxpZCB2YWx1ZXMgZm9yIFwiJy5jb25jYXQodCwnXCI6IFwiJykuY29uY2F0KG4sJ1wiLiBPcHRpb25zIGFyZSBcIicpLmNvbmNhdChPYmplY3Qua2V5cyhpKS5qb2luKCdcIiwgXCInKSwnXCInKSxyLklOVkFMSURfVkFMVUUsbyl8fHRoaXN9cmV0dXJuKDAsaS5fX2V4dGVuZHMpKHQsZSksdH0obykscz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbixpKXtyZXR1cm4gZS5jYWxsKHRoaXMsJ1ZhbHVlIGZvciBcIicuY29uY2F0KHQsJ1wiIG11c3QgYmUgb2YgdHlwZSAnKS5jb25jYXQobiksci5JTlZBTElEX1ZBTFVFLGkpfHx0aGlzfXJldHVybigwLGkuX19leHRlbmRzKSh0LGUpLHR9KG8pLGM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LG4pe3JldHVybiBlLmNhbGwodGhpcywnVGhlIGludGwgc3RyaW5nIGNvbnRleHQgdmFyaWFibGUgXCInLmNvbmNhdCh0LCdcIiB3YXMgbm90IHByb3ZpZGVkIHRvIHRoZSBzdHJpbmcgXCInKS5jb25jYXQobiwnXCInKSxyLk1JU1NJTkdfVkFMVUUsbil8fHRoaXN9cmV0dXJuKDAsaS5fX2V4dGVuZHMpKHQsZSksdH0obyl9LDYxMDkyOihlLHQsbik9PntuLmQodCx7Rks6KCk9PnMsR3Q6KCk9PmEsZHU6KCk9PnJ9KTt2YXIgcixpPW4oMzk5NDMpLG89bigxMTA1MCk7ZnVuY3Rpb24gYShlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlfWZ1bmN0aW9uIHMoZSx0LG4sYyxsLHUsZCl7aWYoMT09PWUubGVuZ3RoJiYoMCxpLk80KShlWzBdKSlyZXR1cm5be3R5cGU6ci5saXRlcmFsLHZhbHVlOmVbMF0udmFsdWV9XTtmb3IodmFyIGY9W10scD0wLG09ZTtwPG0ubGVuZ3RoO3ArKyl7dmFyIGg9bVtwXTtpZigoMCxpLk80KShoKSlmLnB1c2goe3R5cGU6ci5saXRlcmFsLHZhbHVlOmgudmFsdWV9KTtlbHNlIGlmKCgwLGkueXgpKGgpKVwibnVtYmVyXCI9PXR5cGVvZiB1JiZmLnB1c2goe3R5cGU6ci5saXRlcmFsLHZhbHVlOm4uZ2V0TnVtYmVyRm9ybWF0KHQpLmZvcm1hdCh1KX0pO2Vsc2V7dmFyIHY9aC52YWx1ZTtpZighbHx8ISh2IGluIGwpKXRocm93IG5ldyBvLkhSKHYsZCk7dmFyIGc9bFt2XTtpZigoMCxpLlZHKShoKSlnJiZcInN0cmluZ1wiIT10eXBlb2YgZyYmXCJudW1iZXJcIiE9dHlwZW9mIGd8fChnPVwic3RyaW5nXCI9PXR5cGVvZiBnfHxcIm51bWJlclwiPT10eXBlb2YgZz9TdHJpbmcoZyk6XCJcIiksZi5wdXNoKHt0eXBlOlwic3RyaW5nXCI9PXR5cGVvZiBnP3IubGl0ZXJhbDpyLm9iamVjdCx2YWx1ZTpnfSk7ZWxzZSBpZigoMCxpLnJwKShoKSl7dmFyIHk9XCJzdHJpbmdcIj09dHlwZW9mIGguc3R5bGU/Yy5kYXRlW2guc3R5bGVdOigwLGkuSWkpKGguc3R5bGUpP2guc3R5bGUucGFyc2VkT3B0aW9uczp2b2lkIDA7Zi5wdXNoKHt0eXBlOnIubGl0ZXJhbCx2YWx1ZTpuLmdldERhdGVUaW1lRm9ybWF0KHQseSkuZm9ybWF0KGcpfSl9ZWxzZSBpZigoMCxpLnBlKShoKSl5PVwic3RyaW5nXCI9PXR5cGVvZiBoLnN0eWxlP2MudGltZVtoLnN0eWxlXTooMCxpLklpKShoLnN0eWxlKT9oLnN0eWxlLnBhcnNlZE9wdGlvbnM6Yy50aW1lLm1lZGl1bSxmLnB1c2goe3R5cGU6ci5saXRlcmFsLHZhbHVlOm4uZ2V0RGF0ZVRpbWVGb3JtYXQodCx5KS5mb3JtYXQoZyl9KTtlbHNlIGlmKCgwLGkudWYpKGgpKSh5PVwic3RyaW5nXCI9PXR5cGVvZiBoLnN0eWxlP2MubnVtYmVyW2guc3R5bGVdOigwLGkuV2gpKGguc3R5bGUpP2guc3R5bGUucGFyc2VkT3B0aW9uczp2b2lkIDApJiZ5LnNjYWxlJiYoZyo9eS5zY2FsZXx8MSksZi5wdXNoKHt0eXBlOnIubGl0ZXJhbCx2YWx1ZTpuLmdldE51bWJlckZvcm1hdCh0LHkpLmZvcm1hdChnKX0pO2Vsc2V7aWYoKDAsaS5ISSkoaCkpe3ZhciBFPWguY2hpbGRyZW4sXz1oLnZhbHVlLEk9bFtfXTtpZighYShJKSl0aHJvdyBuZXcgby5ZUihfLFwiZnVuY3Rpb25cIixkKTt2YXIgUz1JKHMoRSx0LG4sYyxsLHUpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWV9KSkpO0FycmF5LmlzQXJyYXkoUyl8fChTPVtTXSksZi5wdXNoLmFwcGx5KGYsUy5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOlwic3RyaW5nXCI9PXR5cGVvZiBlP3IubGl0ZXJhbDpyLm9iamVjdCx2YWx1ZTplfX0pKSl9aWYoKDAsaS5XaSkoaCkpe2lmKCEoYj1oLm9wdGlvbnNbZ118fGgub3B0aW9ucy5vdGhlcikpdGhyb3cgbmV3IG8uQzgoaC52YWx1ZSxnLE9iamVjdC5rZXlzKGgub3B0aW9ucyksZCk7Zi5wdXNoLmFwcGx5KGYscyhiLnZhbHVlLHQsbixjLGwpKX1lbHNlIGlmKCgwLGkuSm8pKGgpKXt2YXIgYjtpZighKGI9aC5vcHRpb25zW1wiPVwiLmNvbmNhdChnKV0pKXtpZighSW50bC5QbHVyYWxSdWxlcyl0aHJvdyBuZXcgby51XygnSW50bC5QbHVyYWxSdWxlcyBpcyBub3QgYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQuXFxuVHJ5IHBvbHlmaWxsaW5nIGl0IHVzaW5nIFwiQGZvcm1hdGpzL2ludGwtcGx1cmFscnVsZXNcIlxcbicsby5qSy5NSVNTSU5HX0lOVExfQVBJLGQpO3ZhciBUPW4uZ2V0UGx1cmFsUnVsZXModCx7dHlwZTpoLnBsdXJhbFR5cGV9KS5zZWxlY3QoZy0oaC5vZmZzZXR8fDApKTtiPWgub3B0aW9uc1tUXXx8aC5vcHRpb25zLm90aGVyfWlmKCFiKXRocm93IG5ldyBvLkM4KGgudmFsdWUsZyxPYmplY3Qua2V5cyhoLm9wdGlvbnMpLGQpO2YucHVzaC5hcHBseShmLHMoYi52YWx1ZSx0LG4sYyxsLGctKGgub2Zmc2V0fHwwKSkpfX19fXJldHVybihDPWYpLmxlbmd0aDwyP0M6Qy5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7dmFyIG49ZVtlLmxlbmd0aC0xXTtyZXR1cm4gbiYmbi50eXBlPT09ci5saXRlcmFsJiZ0LnR5cGU9PT1yLmxpdGVyYWw/bi52YWx1ZSs9dC52YWx1ZTplLnB1c2godCksZX0pLFtdKTt2YXIgQ30hZnVuY3Rpb24oZSl7ZVtlLmxpdGVyYWw9MF09XCJsaXRlcmFsXCIsZVtlLm9iamVjdD0xXT1cIm9iamVjdFwifShyfHwocj17fSkpfSwxMDY0NjpmdW5jdGlvbihlKXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbillW3JdPW5bcl19cmV0dXJuIGV9cmV0dXJuIGZ1bmN0aW9uIHQobixyKXtmdW5jdGlvbiBpKHQsaSxvKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQpe1wibnVtYmVyXCI9PXR5cGVvZihvPWUoe30scixvKSkuZXhwaXJlcyYmKG8uZXhwaXJlcz1uZXcgRGF0ZShEYXRlLm5vdygpKzg2NGU1Km8uZXhwaXJlcykpLG8uZXhwaXJlcyYmKG8uZXhwaXJlcz1vLmV4cGlyZXMudG9VVENTdHJpbmcoKSksdD1lbmNvZGVVUklDb21wb25lbnQodCkucmVwbGFjZSgvJSgyWzM0NkJdfDVFfDYwfDdDKS9nLGRlY29kZVVSSUNvbXBvbmVudCkucmVwbGFjZSgvWygpXS9nLGVzY2FwZSk7dmFyIGE9XCJcIjtmb3IodmFyIHMgaW4gbylvW3NdJiYoYSs9XCI7IFwiK3MsITAhPT1vW3NdJiYoYSs9XCI9XCIrb1tzXS5zcGxpdChcIjtcIilbMF0pKTtyZXR1cm4gZG9jdW1lbnQuY29va2llPXQrXCI9XCIrbi53cml0ZShpLHQpK2F9fXJldHVybiBPYmplY3QuY3JlYXRlKHtzZXQ6aSxnZXQ6ZnVuY3Rpb24oZSl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50JiYoIWFyZ3VtZW50cy5sZW5ndGh8fGUpKXtmb3IodmFyIHQ9ZG9jdW1lbnQuY29va2llP2RvY3VtZW50LmNvb2tpZS5zcGxpdChcIjsgXCIpOltdLHI9e30saT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgbz10W2ldLnNwbGl0KFwiPVwiKSxhPW8uc2xpY2UoMSkuam9pbihcIj1cIik7dHJ5e3ZhciBzPWRlY29kZVVSSUNvbXBvbmVudChvWzBdKTtpZihyW3NdPW4ucmVhZChhLHMpLGU9PT1zKWJyZWFrfWNhdGNoKGUpe319cmV0dXJuIGU/cltlXTpyfX0scmVtb3ZlOmZ1bmN0aW9uKHQsbil7aSh0LFwiXCIsZSh7fSxuLHtleHBpcmVzOi0xfSkpfSx3aXRoQXR0cmlidXRlczpmdW5jdGlvbihuKXtyZXR1cm4gdCh0aGlzLmNvbnZlcnRlcixlKHt9LHRoaXMuYXR0cmlidXRlcyxuKSl9LHdpdGhDb252ZXJ0ZXI6ZnVuY3Rpb24obil7cmV0dXJuIHQoZSh7fSx0aGlzLmNvbnZlcnRlcixuKSx0aGlzLmF0dHJpYnV0ZXMpfX0se2F0dHJpYnV0ZXM6e3ZhbHVlOk9iamVjdC5mcmVlemUocil9LGNvbnZlcnRlcjp7dmFsdWU6T2JqZWN0LmZyZWV6ZShuKX19KX0oe3JlYWQ6ZnVuY3Rpb24oZSl7cmV0dXJuJ1wiJz09PWVbMF0mJihlPWUuc2xpY2UoMSwtMSkpLGUucmVwbGFjZSgvKCVbXFxkQS1GXXsyfSkrL2dpLGRlY29kZVVSSUNvbXBvbmVudCl9LHdyaXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoZSkucmVwbGFjZSgvJSgyWzM0NkJGXXwzW0FDLUZdfDQwfDVbQkRFXXw2MHw3W0JDRF0pL2csZGVjb2RlVVJJQ29tcG9uZW50KX19LHtwYXRoOlwiL1wifSl9KCl9LDQ0MDA6KGUsdCxuKT0+e3ZhciByPW4oNTQxMjMpLnN0cmluZ2lmeSxpPW4oMjY4MTMpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm57cGFyc2U6aShlKSxzdHJpbmdpZnk6cn19LGUuZXhwb3J0cy5wYXJzZT1pKCksZS5leHBvcnRzLnN0cmluZ2lmeT1yfSwyNjgxMzooZSx0LG4pPT57dmFyIHI9bnVsbDtjb25zdCBpPS8oPzpffFxcXFx1MDA1W0ZmXSkoPzpffFxcXFx1MDA1W0ZmXSkoPzpwfFxcXFx1MDA3MCkoPzpyfFxcXFx1MDA3MikoPzpvfFxcXFx1MDA2W0ZmXSkoPzp0fFxcXFx1MDA3NCkoPzpvfFxcXFx1MDA2W0ZmXSkoPzpffFxcXFx1MDA1W0ZmXSkoPzpffFxcXFx1MDA1W0ZmXSkvLG89Lyg/OmN8XFxcXHUwMDYzKSg/Om98XFxcXHUwMDZbRmZdKSg/Om58XFxcXHUwMDZbRWVdKSg/OnN8XFxcXHUwMDczKSg/OnR8XFxcXHUwMDc0KSg/OnJ8XFxcXHUwMDcyKSg/OnV8XFxcXHUwMDc1KSg/OmN8XFxcXHUwMDYzKSg/OnR8XFxcXHUwMDc0KSg/Om98XFxcXHUwMDZbRmZdKSg/OnJ8XFxcXHUwMDcyKS87ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXtzdHJpY3Q6ITEsc3RvcmVBc1N0cmluZzohMSxhbHdheXNQYXJzZUFzQmlnOiExLHVzZU5hdGl2ZUJpZ0ludDohMSxwcm90b0FjdGlvbjpcImVycm9yXCIsY29uc3RydWN0b3JBY3Rpb246XCJlcnJvclwifTtpZihudWxsIT1lKXtpZighMD09PWUuc3RyaWN0JiYodC5zdHJpY3Q9ITApLCEwPT09ZS5zdG9yZUFzU3RyaW5nJiYodC5zdG9yZUFzU3RyaW5nPSEwKSx0LmFsd2F5c1BhcnNlQXNCaWc9ITA9PT1lLmFsd2F5c1BhcnNlQXNCaWcmJmUuYWx3YXlzUGFyc2VBc0JpZyx0LnVzZU5hdGl2ZUJpZ0ludD0hMD09PWUudXNlTmF0aXZlQmlnSW50JiZlLnVzZU5hdGl2ZUJpZ0ludCx2b2lkIDAhPT1lLmNvbnN0cnVjdG9yQWN0aW9uKXtpZihcImVycm9yXCIhPT1lLmNvbnN0cnVjdG9yQWN0aW9uJiZcImlnbm9yZVwiIT09ZS5jb25zdHJ1Y3RvckFjdGlvbiYmXCJwcmVzZXJ2ZVwiIT09ZS5jb25zdHJ1Y3RvckFjdGlvbil0aHJvdyBuZXcgRXJyb3IoYEluY29ycmVjdCB2YWx1ZSBmb3IgY29uc3RydWN0b3JBY3Rpb24gb3B0aW9uLCBtdXN0IGJlIFwiZXJyb3JcIiwgXCJpZ25vcmVcIiBvciB1bmRlZmluZWQgYnV0IHBhc3NlZCAke2UuY29uc3RydWN0b3JBY3Rpb259YCk7dC5jb25zdHJ1Y3RvckFjdGlvbj1lLmNvbnN0cnVjdG9yQWN0aW9ufWlmKHZvaWQgMCE9PWUucHJvdG9BY3Rpb24pe2lmKFwiZXJyb3JcIiE9PWUucHJvdG9BY3Rpb24mJlwiaWdub3JlXCIhPT1lLnByb3RvQWN0aW9uJiZcInByZXNlcnZlXCIhPT1lLnByb3RvQWN0aW9uKXRocm93IG5ldyBFcnJvcihgSW5jb3JyZWN0IHZhbHVlIGZvciBwcm90b0FjdGlvbiBvcHRpb24sIG11c3QgYmUgXCJlcnJvclwiLCBcImlnbm9yZVwiIG9yIHVuZGVmaW5lZCBidXQgcGFzc2VkICR7ZS5wcm90b0FjdGlvbn1gKTt0LnByb3RvQWN0aW9uPWUucHJvdG9BY3Rpb259fXZhciBhLHMsYyxsLHU9eydcIic6J1wiJyxcIlxcXFxcIjpcIlxcXFxcIixcIi9cIjpcIi9cIixiOlwiXFxiXCIsZjpcIlxcZlwiLG46XCJcXG5cIixyOlwiXFxyXCIsdDpcIlxcdFwifSxkPWZ1bmN0aW9uKGUpe3Rocm93e25hbWU6XCJTeW50YXhFcnJvclwiLG1lc3NhZ2U6ZSxhdDphLHRleHQ6Y319LGY9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUhPT1zJiZkKFwiRXhwZWN0ZWQgJ1wiK2UrXCInIGluc3RlYWQgb2YgJ1wiK3MrXCInXCIpLHM9Yy5jaGFyQXQoYSksYSs9MSxzfSxwPWZ1bmN0aW9uKCl7dmFyIGUsaT1cIlwiO2ZvcihcIi1cIj09PXMmJihpPVwiLVwiLGYoXCItXCIpKTtzPj1cIjBcIiYmczw9XCI5XCI7KWkrPXMsZigpO2lmKFwiLlwiPT09cylmb3IoaSs9XCIuXCI7ZigpJiZzPj1cIjBcIiYmczw9XCI5XCI7KWkrPXM7aWYoXCJlXCI9PT1zfHxcIkVcIj09PXMpZm9yKGkrPXMsZigpLFwiLVwiIT09cyYmXCIrXCIhPT1zfHwoaSs9cyxmKCkpO3M+PVwiMFwiJiZzPD1cIjlcIjspaSs9cyxmKCk7aWYoZT0raSxpc0Zpbml0ZShlKSlyZXR1cm4gbnVsbD09ciYmKHI9big0NDQzMSkpLGkubGVuZ3RoPjE1P3Quc3RvcmVBc1N0cmluZz9pOnQudXNlTmF0aXZlQmlnSW50P0JpZ0ludChpKTpuZXcgcihpKTp0LmFsd2F5c1BhcnNlQXNCaWc/dC51c2VOYXRpdmVCaWdJbnQ/QmlnSW50KGUpOm5ldyByKGUpOmU7ZChcIkJhZCBudW1iZXJcIil9LG09ZnVuY3Rpb24oKXt2YXIgZSx0LG4scj1cIlwiO2lmKCdcIic9PT1zKWZvcih2YXIgaT1hO2YoKTspe2lmKCdcIic9PT1zKXJldHVybiBhLTE+aSYmKHIrPWMuc3Vic3RyaW5nKGksYS0xKSksZigpLHI7aWYoXCJcXFxcXCI9PT1zKXtpZihhLTE+aSYmKHIrPWMuc3Vic3RyaW5nKGksYS0xKSksZigpLFwidVwiPT09cyl7Zm9yKG49MCx0PTA7dDw0JiYoZT1wYXJzZUludChmKCksMTYpLGlzRmluaXRlKGUpKTt0Kz0xKW49MTYqbitlO3IrPVN0cmluZy5mcm9tQ2hhckNvZGUobil9ZWxzZXtpZihcInN0cmluZ1wiIT10eXBlb2YgdVtzXSlicmVhaztyKz11W3NdfWk9YX19ZChcIkJhZCBzdHJpbmdcIil9LGg9ZnVuY3Rpb24oKXtmb3IoO3MmJnM8PVwiIFwiOylmKCl9O3JldHVybiBsPWZ1bmN0aW9uKCl7c3dpdGNoKGgoKSxzKXtjYXNlXCJ7XCI6cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGUsbj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKFwie1wiPT09cyl7aWYoZihcIntcIiksaCgpLFwifVwiPT09cylyZXR1cm4gZihcIn1cIiksbjtmb3IoO3M7KXtpZihlPW0oKSxoKCksZihcIjpcIiksITA9PT10LnN0cmljdCYmT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobixlKSYmZCgnRHVwbGljYXRlIGtleSBcIicrZSsnXCInKSwhMD09PWkudGVzdChlKT9cImVycm9yXCI9PT10LnByb3RvQWN0aW9uP2QoXCJPYmplY3QgY29udGFpbnMgZm9yYmlkZGVuIHByb3RvdHlwZSBwcm9wZXJ0eVwiKTpcImlnbm9yZVwiPT09dC5wcm90b0FjdGlvbj9sKCk6bltlXT1sKCk6ITA9PT1vLnRlc3QoZSk/XCJlcnJvclwiPT09dC5jb25zdHJ1Y3RvckFjdGlvbj9kKFwiT2JqZWN0IGNvbnRhaW5zIGZvcmJpZGRlbiBjb25zdHJ1Y3RvciBwcm9wZXJ0eVwiKTpcImlnbm9yZVwiPT09dC5jb25zdHJ1Y3RvckFjdGlvbj9sKCk6bltlXT1sKCk6bltlXT1sKCksaCgpLFwifVwiPT09cylyZXR1cm4gZihcIn1cIiksbjtmKFwiLFwiKSxoKCl9fWQoXCJCYWQgb2JqZWN0XCIpfSgpO2Nhc2VcIltcIjpyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1bXTtpZihcIltcIj09PXMpe2lmKGYoXCJbXCIpLGgoKSxcIl1cIj09PXMpcmV0dXJuIGYoXCJdXCIpLGU7Zm9yKDtzOyl7aWYoZS5wdXNoKGwoKSksaCgpLFwiXVwiPT09cylyZXR1cm4gZihcIl1cIiksZTtmKFwiLFwiKSxoKCl9fWQoXCJCYWQgYXJyYXlcIil9KCk7Y2FzZSdcIic6cmV0dXJuIG0oKTtjYXNlXCItXCI6cmV0dXJuIHAoKTtkZWZhdWx0OnJldHVybiBzPj1cIjBcIiYmczw9XCI5XCI/cCgpOmZ1bmN0aW9uKCl7c3dpdGNoKHMpe2Nhc2VcInRcIjpyZXR1cm4gZihcInRcIiksZihcInJcIiksZihcInVcIiksZihcImVcIiksITA7Y2FzZVwiZlwiOnJldHVybiBmKFwiZlwiKSxmKFwiYVwiKSxmKFwibFwiKSxmKFwic1wiKSxmKFwiZVwiKSwhMTtjYXNlXCJuXCI6cmV0dXJuIGYoXCJuXCIpLGYoXCJ1XCIpLGYoXCJsXCIpLGYoXCJsXCIpLG51bGx9ZChcIlVuZXhwZWN0ZWQgJ1wiK3MrXCInXCIpfSgpfX0sZnVuY3Rpb24oZSx0KXt2YXIgbjtyZXR1cm4gYz1lK1wiXCIsYT0wLHM9XCIgXCIsbj1sKCksaCgpLHMmJmQoXCJTeW50YXggZXJyb3JcIiksXCJmdW5jdGlvblwiPT10eXBlb2YgdD9mdW5jdGlvbiBlKG4scil7dmFyIGksbz1uW3JdO3JldHVybiBvJiZcIm9iamVjdFwiPT10eXBlb2YgbyYmT2JqZWN0LmtleXMobykuZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09KGk9ZShvLHQpKT9vW3RdPWk6ZGVsZXRlIG9bdF19KSksdC5jYWxsKG4scixvKX0oe1wiXCI6bn0sXCJcIik6bn19fSw1NDEyMzooZSx0LG4pPT57dmFyIHI9big0NDQzMSksaT1lLmV4cG9ydHM7IWZ1bmN0aW9uKCl7dmFyIGUsdCxuLG89L1tcXFxcXFxcIlxceDAwLVxceDFmXFx4N2YtXFx4OWZcXHUwMGFkXFx1MDYwMC1cXHUwNjA0XFx1MDcwZlxcdTE3YjRcXHUxN2I1XFx1MjAwYy1cXHUyMDBmXFx1MjAyOC1cXHUyMDJmXFx1MjA2MC1cXHUyMDZmXFx1ZmVmZlxcdWZmZjAtXFx1ZmZmZl0vZyxhPXtcIlxcYlwiOlwiXFxcXGJcIixcIlxcdFwiOlwiXFxcXHRcIixcIlxcblwiOlwiXFxcXG5cIixcIlxcZlwiOlwiXFxcXGZcIixcIlxcclwiOlwiXFxcXHJcIiwnXCInOidcXFxcXCInLFwiXFxcXFwiOlwiXFxcXFxcXFxcIn07ZnVuY3Rpb24gcyhlKXtyZXR1cm4gby5sYXN0SW5kZXg9MCxvLnRlc3QoZSk/J1wiJytlLnJlcGxhY2UobywoZnVuY3Rpb24oZSl7dmFyIHQ9YVtlXTtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdD90OlwiXFxcXHVcIisoXCIwMDAwXCIrZS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpfSkpKydcIic6J1wiJytlKydcIid9ZnVuY3Rpb24gYyhpLG8pe3ZhciBhLGwsdSxkLGYscD1lLG09b1tpXSxoPW51bGwhPW0mJihtIGluc3RhbmNlb2Ygcnx8ci5pc0JpZ051bWJlcihtKSk7c3dpdGNoKG0mJlwib2JqZWN0XCI9PXR5cGVvZiBtJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBtLnRvSlNPTiYmKG09bS50b0pTT04oaSkpLFwiZnVuY3Rpb25cIj09dHlwZW9mIG4mJihtPW4uY2FsbChvLGksbSkpLHR5cGVvZiBtKXtjYXNlXCJzdHJpbmdcIjpyZXR1cm4gaD9tOnMobSk7Y2FzZVwibnVtYmVyXCI6cmV0dXJuIGlzRmluaXRlKG0pP1N0cmluZyhtKTpcIm51bGxcIjtjYXNlXCJib29sZWFuXCI6Y2FzZVwibnVsbFwiOmNhc2VcImJpZ2ludFwiOnJldHVybiBTdHJpbmcobSk7Y2FzZVwib2JqZWN0XCI6aWYoIW0pcmV0dXJuXCJudWxsXCI7aWYoZSs9dCxmPVtdLFwiW29iamVjdCBBcnJheV1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuYXBwbHkobSkpe2ZvcihkPW0ubGVuZ3RoLGE9MDthPGQ7YSs9MSlmW2FdPWMoYSxtKXx8XCJudWxsXCI7cmV0dXJuIHU9MD09PWYubGVuZ3RoP1wiW11cIjplP1wiW1xcblwiK2UrZi5qb2luKFwiLFxcblwiK2UpK1wiXFxuXCIrcCtcIl1cIjpcIltcIitmLmpvaW4oXCIsXCIpK1wiXVwiLGU9cCx1fWlmKG4mJlwib2JqZWN0XCI9PXR5cGVvZiBuKWZvcihkPW4ubGVuZ3RoLGE9MDthPGQ7YSs9MSlcInN0cmluZ1wiPT10eXBlb2YgblthXSYmKHU9YyhsPW5bYV0sbSkpJiZmLnB1c2gocyhsKSsoZT9cIjogXCI6XCI6XCIpK3UpO2Vsc2UgT2JqZWN0LmtleXMobSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49Yyh0LG0pO24mJmYucHVzaChzKHQpKyhlP1wiOiBcIjpcIjpcIikrbil9KSk7cmV0dXJuIHU9MD09PWYubGVuZ3RoP1wie31cIjplP1wie1xcblwiK2UrZi5qb2luKFwiLFxcblwiK2UpK1wiXFxuXCIrcCtcIn1cIjpcIntcIitmLmpvaW4oXCIsXCIpK1wifVwiLGU9cCx1fX1cImZ1bmN0aW9uXCIhPXR5cGVvZiBpLnN0cmluZ2lmeSYmKGkuc3RyaW5naWZ5PWZ1bmN0aW9uKHIsaSxvKXt2YXIgYTtpZihlPVwiXCIsdD1cIlwiLFwibnVtYmVyXCI9PXR5cGVvZiBvKWZvcihhPTA7YTxvO2ErPTEpdCs9XCIgXCI7ZWxzZVwic3RyaW5nXCI9PXR5cGVvZiBvJiYodD1vKTtpZihuPWksaSYmXCJmdW5jdGlvblwiIT10eXBlb2YgaSYmKFwib2JqZWN0XCIhPXR5cGVvZiBpfHxcIm51bWJlclwiIT10eXBlb2YgaS5sZW5ndGgpKXRocm93IG5ldyBFcnJvcihcIkpTT04uc3RyaW5naWZ5XCIpO3JldHVybiBjKFwiXCIse1wiXCI6cn0pfSl9KCl9LDU1NzMzOihlLHQsbik9PntlLmV4cG9ydHM9ZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gaShhLHMpe2lmKCFuW2FdKXtpZighdFthXSl7aWYobylyZXR1cm4gbyhhLCEwKTt2YXIgYz1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2ErXCInXCIpO3Rocm93IGMuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixjfXZhciBsPW5bYV09e2V4cG9ydHM6e319O3RbYV1bMF0uY2FsbChsLmV4cG9ydHMsKGZ1bmN0aW9uKGUpe3JldHVybiBpKHRbYV1bMV1bZV18fGUpfSksbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bYV0uZXhwb3J0c31mb3IodmFyIG89dm9pZCAwLGE9MDthPHIubGVuZ3RoO2ErKylpKHJbYV0pO3JldHVybiBpfSh7MTpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUoXCIuL3V0aWxzXCIpLGk9ZShcIi4vc3VwcG9ydFwiKSxvPVwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIjtuLmVuY29kZT1mdW5jdGlvbihlKXtmb3IodmFyIHQsbixpLGEscyxjLGwsdT1bXSxkPTAsZj1lLmxlbmd0aCxwPWYsbT1cInN0cmluZ1wiIT09ci5nZXRUeXBlT2YoZSk7ZDxlLmxlbmd0aDspcD1mLWQsaT1tPyh0PWVbZCsrXSxuPWQ8Zj9lW2QrK106MCxkPGY/ZVtkKytdOjApOih0PWUuY2hhckNvZGVBdChkKyspLG49ZDxmP2UuY2hhckNvZGVBdChkKyspOjAsZDxmP2UuY2hhckNvZGVBdChkKyspOjApLGE9dD4+MixzPSgzJnQpPDw0fG4+PjQsYz0xPHA/KDE1Jm4pPDwyfGk+PjY6NjQsbD0yPHA/NjMmaTo2NCx1LnB1c2goby5jaGFyQXQoYSkrby5jaGFyQXQocykrby5jaGFyQXQoYykrby5jaGFyQXQobCkpO3JldHVybiB1LmpvaW4oXCJcIil9LG4uZGVjb2RlPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixhLHMsYyxsPTAsdT0wO2lmKFwiZGF0YTpcIj09PWUuc3Vic3RyKDAsNSkpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBiYXNlNjQgaW5wdXQsIGl0IGxvb2tzIGxpa2UgYSBkYXRhIHVybC5cIik7dmFyIGQsZj0zKihlPWUucmVwbGFjZSgvW15BLVphLXowLTkrLz1dL2csXCJcIikpLmxlbmd0aC80O2lmKGUuY2hhckF0KGUubGVuZ3RoLTEpPT09by5jaGFyQXQoNjQpJiZmLS0sZS5jaGFyQXQoZS5sZW5ndGgtMik9PT1vLmNoYXJBdCg2NCkmJmYtLSxmJTEhPTApdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBiYXNlNjQgaW5wdXQsIGJhZCBjb250ZW50IGxlbmd0aC5cIik7Zm9yKGQ9aS51aW50OGFycmF5P25ldyBVaW50OEFycmF5KDB8Zik6bmV3IEFycmF5KDB8Zik7bDxlLmxlbmd0aDspdD1vLmluZGV4T2YoZS5jaGFyQXQobCsrKSk8PDJ8KGE9by5pbmRleE9mKGUuY2hhckF0KGwrKykpKT4+NCxuPSgxNSZhKTw8NHwocz1vLmluZGV4T2YoZS5jaGFyQXQobCsrKSkpPj4yLHI9KDMmcyk8PDZ8KGM9by5pbmRleE9mKGUuY2hhckF0KGwrKykpKSxkW3UrK109dCw2NCE9PXMmJihkW3UrK109biksNjQhPT1jJiYoZFt1KytdPXIpO3JldHVybiBkfX0se1wiLi9zdXBwb3J0XCI6MzAsXCIuL3V0aWxzXCI6MzJ9XSwyOltmdW5jdGlvbihlLHQsbil7dmFyIHI9ZShcIi4vZXh0ZXJuYWxcIiksaT1lKFwiLi9zdHJlYW0vRGF0YVdvcmtlclwiKSxvPWUoXCIuL3N0cmVhbS9DcmMzMlByb2JlXCIpLGE9ZShcIi4vc3RyZWFtL0RhdGFMZW5ndGhQcm9iZVwiKTtmdW5jdGlvbiBzKGUsdCxuLHIsaSl7dGhpcy5jb21wcmVzc2VkU2l6ZT1lLHRoaXMudW5jb21wcmVzc2VkU2l6ZT10LHRoaXMuY3JjMzI9bix0aGlzLmNvbXByZXNzaW9uPXIsdGhpcy5jb21wcmVzc2VkQ29udGVudD1pfXMucHJvdG90eXBlPXtnZXRDb250ZW50V29ya2VyOmZ1bmN0aW9uKCl7dmFyIGU9bmV3IGkoci5Qcm9taXNlLnJlc29sdmUodGhpcy5jb21wcmVzc2VkQ29udGVudCkpLnBpcGUodGhpcy5jb21wcmVzc2lvbi51bmNvbXByZXNzV29ya2VyKCkpLnBpcGUobmV3IGEoXCJkYXRhX2xlbmd0aFwiKSksdD10aGlzO3JldHVybiBlLm9uKFwiZW5kXCIsKGZ1bmN0aW9uKCl7aWYodGhpcy5zdHJlYW1JbmZvLmRhdGFfbGVuZ3RoIT09dC51bmNvbXByZXNzZWRTaXplKXRocm93IG5ldyBFcnJvcihcIkJ1ZyA6IHVuY29tcHJlc3NlZCBkYXRhIHNpemUgbWlzbWF0Y2hcIil9KSksZX0sZ2V0Q29tcHJlc3NlZFdvcmtlcjpmdW5jdGlvbigpe3JldHVybiBuZXcgaShyLlByb21pc2UucmVzb2x2ZSh0aGlzLmNvbXByZXNzZWRDb250ZW50KSkud2l0aFN0cmVhbUluZm8oXCJjb21wcmVzc2VkU2l6ZVwiLHRoaXMuY29tcHJlc3NlZFNpemUpLndpdGhTdHJlYW1JbmZvKFwidW5jb21wcmVzc2VkU2l6ZVwiLHRoaXMudW5jb21wcmVzc2VkU2l6ZSkud2l0aFN0cmVhbUluZm8oXCJjcmMzMlwiLHRoaXMuY3JjMzIpLndpdGhTdHJlYW1JbmZvKFwiY29tcHJlc3Npb25cIix0aGlzLmNvbXByZXNzaW9uKX19LHMuY3JlYXRlV29ya2VyRnJvbT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUucGlwZShuZXcgbykucGlwZShuZXcgYShcInVuY29tcHJlc3NlZFNpemVcIikpLnBpcGUodC5jb21wcmVzc1dvcmtlcihuKSkucGlwZShuZXcgYShcImNvbXByZXNzZWRTaXplXCIpKS53aXRoU3RyZWFtSW5mbyhcImNvbXByZXNzaW9uXCIsdCl9LHQuZXhwb3J0cz1zfSx7XCIuL2V4dGVybmFsXCI6NixcIi4vc3RyZWFtL0NyYzMyUHJvYmVcIjoyNSxcIi4vc3RyZWFtL0RhdGFMZW5ndGhQcm9iZVwiOjI2LFwiLi9zdHJlYW0vRGF0YVdvcmtlclwiOjI3fV0sMzpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUoXCIuL3N0cmVhbS9HZW5lcmljV29ya2VyXCIpO24uU1RPUkU9e21hZ2ljOlwiXFwwXFwwXCIsY29tcHJlc3NXb3JrZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHIoXCJTVE9SRSBjb21wcmVzc2lvblwiKX0sdW5jb21wcmVzc1dvcmtlcjpmdW5jdGlvbigpe3JldHVybiBuZXcgcihcIlNUT1JFIGRlY29tcHJlc3Npb25cIil9fSxuLkRFRkxBVEU9ZShcIi4vZmxhdGVcIil9LHtcIi4vZmxhdGVcIjo3LFwiLi9zdHJlYW0vR2VuZXJpY1dvcmtlclwiOjI4fV0sNDpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUoXCIuL3V0aWxzXCIpLGk9ZnVuY3Rpb24oKXtmb3IodmFyIGUsdD1bXSxuPTA7bjwyNTY7bisrKXtlPW47Zm9yKHZhciByPTA7cjw4O3IrKyllPTEmZT8zOTg4MjkyMzg0XmU+Pj4xOmU+Pj4xO3Rbbl09ZX1yZXR1cm4gdH0oKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwIT09ZSYmZS5sZW5ndGg/XCJzdHJpbmdcIiE9PXIuZ2V0VHlwZU9mKGUpP2Z1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPWksYT0wK247ZV49LTE7Zm9yKHZhciBzPTA7czxhO3MrKyllPWU+Pj44Xm9bMjU1JihlXnRbc10pXTtyZXR1cm4tMV5lfSgwfHQsZSxlLmxlbmd0aCk6ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89aSxhPTArbjtlXj0tMTtmb3IodmFyIHM9MDtzPGE7cysrKWU9ZT4+Pjheb1syNTUmKGVedC5jaGFyQ29kZUF0KHMpKV07cmV0dXJuLTFeZX0oMHx0LGUsZS5sZW5ndGgpOjB9fSx7XCIuL3V0aWxzXCI6MzJ9XSw1OltmdW5jdGlvbihlLHQsbil7bi5iYXNlNjQ9ITEsbi5iaW5hcnk9ITEsbi5kaXI9ITEsbi5jcmVhdGVGb2xkZXJzPSEwLG4uZGF0ZT1udWxsLG4uY29tcHJlc3Npb249bnVsbCxuLmNvbXByZXNzaW9uT3B0aW9ucz1udWxsLG4uY29tbWVudD1udWxsLG4udW5peFBlcm1pc3Npb25zPW51bGwsbi5kb3NQZXJtaXNzaW9ucz1udWxsfSx7fV0sNjpbZnVuY3Rpb24oZSx0LG4pe3ZhciByO3I9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFByb21pc2U/UHJvbWlzZTplKFwibGllXCIpLHQuZXhwb3J0cz17UHJvbWlzZTpyfX0se2xpZTozN31dLDc6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1cInVuZGVmaW5lZFwiIT10eXBlb2YgVWludDhBcnJheSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQxNkFycmF5JiZcInVuZGVmaW5lZFwiIT10eXBlb2YgVWludDMyQXJyYXksaT1lKFwicGFrb1wiKSxvPWUoXCIuL3V0aWxzXCIpLGE9ZShcIi4vc3RyZWFtL0dlbmVyaWNXb3JrZXJcIikscz1yP1widWludDhhcnJheVwiOlwiYXJyYXlcIjtmdW5jdGlvbiBjKGUsdCl7YS5jYWxsKHRoaXMsXCJGbGF0ZVdvcmtlci9cIitlKSx0aGlzLl9wYWtvPW51bGwsdGhpcy5fcGFrb0FjdGlvbj1lLHRoaXMuX3Bha29PcHRpb25zPXQsdGhpcy5tZXRhPXt9fW4ubWFnaWM9XCJcXGJcXDBcIixvLmluaGVyaXRzKGMsYSksYy5wcm90b3R5cGUucHJvY2Vzc0NodW5rPWZ1bmN0aW9uKGUpe3RoaXMubWV0YT1lLm1ldGEsbnVsbD09PXRoaXMuX3Bha28mJnRoaXMuX2NyZWF0ZVBha28oKSx0aGlzLl9wYWtvLnB1c2goby50cmFuc2Zvcm1UbyhzLGUuZGF0YSksITEpfSxjLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2EucHJvdG90eXBlLmZsdXNoLmNhbGwodGhpcyksbnVsbD09PXRoaXMuX3Bha28mJnRoaXMuX2NyZWF0ZVBha28oKSx0aGlzLl9wYWtvLnB1c2goW10sITApfSxjLnByb3RvdHlwZS5jbGVhblVwPWZ1bmN0aW9uKCl7YS5wcm90b3R5cGUuY2xlYW5VcC5jYWxsKHRoaXMpLHRoaXMuX3Bha289bnVsbH0sYy5wcm90b3R5cGUuX2NyZWF0ZVBha289ZnVuY3Rpb24oKXt0aGlzLl9wYWtvPW5ldyBpW3RoaXMuX3Bha29BY3Rpb25dKHtyYXc6ITAsbGV2ZWw6dGhpcy5fcGFrb09wdGlvbnMubGV2ZWx8fC0xfSk7dmFyIGU9dGhpczt0aGlzLl9wYWtvLm9uRGF0YT1mdW5jdGlvbih0KXtlLnB1c2goe2RhdGE6dCxtZXRhOmUubWV0YX0pfX0sbi5jb21wcmVzc1dvcmtlcj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGMoXCJEZWZsYXRlXCIsZSl9LG4udW5jb21wcmVzc1dvcmtlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgYyhcIkluZmxhdGVcIix7fSl9fSx7XCIuL3N0cmVhbS9HZW5lcmljV29ya2VyXCI6MjgsXCIuL3V0aWxzXCI6MzIscGFrbzozOH1dLDg6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCl7dmFyIG4scj1cIlwiO2ZvcihuPTA7bjx0O24rKylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSZlKSxlPj4+PTg7cmV0dXJuIHJ9ZnVuY3Rpb24gaShlLHQsbixpLGEsdSl7dmFyIGQsZixwPWUuZmlsZSxtPWUuY29tcHJlc3Npb24saD11IT09cy51dGY4ZW5jb2RlLHY9by50cmFuc2Zvcm1UbyhcInN0cmluZ1wiLHUocC5uYW1lKSksZz1vLnRyYW5zZm9ybVRvKFwic3RyaW5nXCIscy51dGY4ZW5jb2RlKHAubmFtZSkpLHk9cC5jb21tZW50LEU9by50cmFuc2Zvcm1UbyhcInN0cmluZ1wiLHUoeSkpLF89by50cmFuc2Zvcm1UbyhcInN0cmluZ1wiLHMudXRmOGVuY29kZSh5KSksST1nLmxlbmd0aCE9PXAubmFtZS5sZW5ndGgsUz1fLmxlbmd0aCE9PXkubGVuZ3RoLGI9XCJcIixUPVwiXCIsQz1cIlwiLEE9cC5kaXIsUj1wLmRhdGUsaz17Y3JjMzI6MCxjb21wcmVzc2VkU2l6ZTowLHVuY29tcHJlc3NlZFNpemU6MH07dCYmIW58fChrLmNyYzMyPWUuY3JjMzIsay5jb21wcmVzc2VkU2l6ZT1lLmNvbXByZXNzZWRTaXplLGsudW5jb21wcmVzc2VkU2l6ZT1lLnVuY29tcHJlc3NlZFNpemUpO3ZhciBPPTA7dCYmKE98PTgpLGh8fCFJJiYhU3x8KE98PTIwNDgpO3ZhciBOPTAsdz0wO0EmJihOfD0xNiksXCJVTklYXCI9PT1hPyh3PTc5OCxOfD1mdW5jdGlvbihlLHQpe3ZhciBuPWU7cmV0dXJuIGV8fChuPXQ/MTY4OTM6MzMyMDQpLCg2NTUzNSZuKTw8MTZ9KHAudW5peFBlcm1pc3Npb25zLEEpKToodz0yMCxOfD1mdW5jdGlvbihlKXtyZXR1cm4gNjMmKGV8fDApfShwLmRvc1Blcm1pc3Npb25zKSksZD1SLmdldFVUQ0hvdXJzKCksZDw8PTYsZHw9Ui5nZXRVVENNaW51dGVzKCksZDw8PTUsZHw9Ui5nZXRVVENTZWNvbmRzKCkvMixmPVIuZ2V0VVRDRnVsbFllYXIoKS0xOTgwLGY8PD00LGZ8PVIuZ2V0VVRDTW9udGgoKSsxLGY8PD01LGZ8PVIuZ2V0VVRDRGF0ZSgpLEkmJihUPXIoMSwxKStyKGModiksNCkrZyxiKz1cInVwXCIrcihULmxlbmd0aCwyKStUKSxTJiYoQz1yKDEsMSkrcihjKEUpLDQpK18sYis9XCJ1Y1wiK3IoQy5sZW5ndGgsMikrQyk7dmFyIEQ9XCJcIjtyZXR1cm4gRCs9XCJcXG5cXDBcIixEKz1yKE8sMiksRCs9bS5tYWdpYyxEKz1yKGQsMiksRCs9cihmLDIpLEQrPXIoay5jcmMzMiw0KSxEKz1yKGsuY29tcHJlc3NlZFNpemUsNCksRCs9cihrLnVuY29tcHJlc3NlZFNpemUsNCksRCs9cih2Lmxlbmd0aCwyKSxEKz1yKGIubGVuZ3RoLDIpLHtmaWxlUmVjb3JkOmwuTE9DQUxfRklMRV9IRUFERVIrRCt2K2IsZGlyUmVjb3JkOmwuQ0VOVFJBTF9GSUxFX0hFQURFUityKHcsMikrRCtyKEUubGVuZ3RoLDIpK1wiXFwwXFwwXFwwXFwwXCIrcihOLDQpK3IoaSw0KSt2K2IrRX19dmFyIG89ZShcIi4uL3V0aWxzXCIpLGE9ZShcIi4uL3N0cmVhbS9HZW5lcmljV29ya2VyXCIpLHM9ZShcIi4uL3V0ZjhcIiksYz1lKFwiLi4vY3JjMzJcIiksbD1lKFwiLi4vc2lnbmF0dXJlXCIpO2Z1bmN0aW9uIHUoZSx0LG4scil7YS5jYWxsKHRoaXMsXCJaaXBGaWxlV29ya2VyXCIpLHRoaXMuYnl0ZXNXcml0dGVuPTAsdGhpcy56aXBDb21tZW50PXQsdGhpcy56aXBQbGF0Zm9ybT1uLHRoaXMuZW5jb2RlRmlsZU5hbWU9cix0aGlzLnN0cmVhbUZpbGVzPWUsdGhpcy5hY2N1bXVsYXRlPSExLHRoaXMuY29udGVudEJ1ZmZlcj1bXSx0aGlzLmRpclJlY29yZHM9W10sdGhpcy5jdXJyZW50U291cmNlT2Zmc2V0PTAsdGhpcy5lbnRyaWVzQ291bnQ9MCx0aGlzLmN1cnJlbnRGaWxlPW51bGwsdGhpcy5fc291cmNlcz1bXX1vLmluaGVyaXRzKHUsYSksdS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlKXt2YXIgdD1lLm1ldGEucGVyY2VudHx8MCxuPXRoaXMuZW50cmllc0NvdW50LHI9dGhpcy5fc291cmNlcy5sZW5ndGg7dGhpcy5hY2N1bXVsYXRlP3RoaXMuY29udGVudEJ1ZmZlci5wdXNoKGUpOih0aGlzLmJ5dGVzV3JpdHRlbis9ZS5kYXRhLmxlbmd0aCxhLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyx7ZGF0YTplLmRhdGEsbWV0YTp7Y3VycmVudEZpbGU6dGhpcy5jdXJyZW50RmlsZSxwZXJjZW50Om4/KHQrMTAwKihuLXItMSkpL246MTAwfX0pKX0sdS5wcm90b3R5cGUub3BlbmVkU291cmNlPWZ1bmN0aW9uKGUpe3RoaXMuY3VycmVudFNvdXJjZU9mZnNldD10aGlzLmJ5dGVzV3JpdHRlbix0aGlzLmN1cnJlbnRGaWxlPWUuZmlsZS5uYW1lO3ZhciB0PXRoaXMuc3RyZWFtRmlsZXMmJiFlLmZpbGUuZGlyO2lmKHQpe3ZhciBuPWkoZSx0LCExLHRoaXMuY3VycmVudFNvdXJjZU9mZnNldCx0aGlzLnppcFBsYXRmb3JtLHRoaXMuZW5jb2RlRmlsZU5hbWUpO3RoaXMucHVzaCh7ZGF0YTpuLmZpbGVSZWNvcmQsbWV0YTp7cGVyY2VudDowfX0pfWVsc2UgdGhpcy5hY2N1bXVsYXRlPSEwfSx1LnByb3RvdHlwZS5jbG9zZWRTb3VyY2U9ZnVuY3Rpb24oZSl7dGhpcy5hY2N1bXVsYXRlPSExO3ZhciB0PXRoaXMuc3RyZWFtRmlsZXMmJiFlLmZpbGUuZGlyLG49aShlLHQsITAsdGhpcy5jdXJyZW50U291cmNlT2Zmc2V0LHRoaXMuemlwUGxhdGZvcm0sdGhpcy5lbmNvZGVGaWxlTmFtZSk7aWYodGhpcy5kaXJSZWNvcmRzLnB1c2gobi5kaXJSZWNvcmQpLHQpdGhpcy5wdXNoKHtkYXRhOmZ1bmN0aW9uKGUpe3JldHVybiBsLkRBVEFfREVTQ1JJUFRPUityKGUuY3JjMzIsNCkrcihlLmNvbXByZXNzZWRTaXplLDQpK3IoZS51bmNvbXByZXNzZWRTaXplLDQpfShlKSxtZXRhOntwZXJjZW50OjEwMH19KTtlbHNlIGZvcih0aGlzLnB1c2goe2RhdGE6bi5maWxlUmVjb3JkLG1ldGE6e3BlcmNlbnQ6MH19KTt0aGlzLmNvbnRlbnRCdWZmZXIubGVuZ3RoOyl0aGlzLnB1c2godGhpcy5jb250ZW50QnVmZmVyLnNoaWZ0KCkpO3RoaXMuY3VycmVudEZpbGU9bnVsbH0sdS5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5ieXRlc1dyaXR0ZW4sdD0wO3Q8dGhpcy5kaXJSZWNvcmRzLmxlbmd0aDt0KyspdGhpcy5wdXNoKHtkYXRhOnRoaXMuZGlyUmVjb3Jkc1t0XSxtZXRhOntwZXJjZW50OjEwMH19KTt2YXIgbj10aGlzLmJ5dGVzV3JpdHRlbi1lLGk9ZnVuY3Rpb24oZSx0LG4saSxhKXt2YXIgcz1vLnRyYW5zZm9ybVRvKFwic3RyaW5nXCIsYShpKSk7cmV0dXJuIGwuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EK1wiXFwwXFwwXFwwXFwwXCIrcihlLDIpK3IoZSwyKStyKHQsNCkrcihuLDQpK3Iocy5sZW5ndGgsMikrc30odGhpcy5kaXJSZWNvcmRzLmxlbmd0aCxuLGUsdGhpcy56aXBDb21tZW50LHRoaXMuZW5jb2RlRmlsZU5hbWUpO3RoaXMucHVzaCh7ZGF0YTppLG1ldGE6e3BlcmNlbnQ6MTAwfX0pfSx1LnByb3RvdHlwZS5wcmVwYXJlTmV4dFNvdXJjZT1mdW5jdGlvbigpe3RoaXMucHJldmlvdXM9dGhpcy5fc291cmNlcy5zaGlmdCgpLHRoaXMub3BlbmVkU291cmNlKHRoaXMucHJldmlvdXMuc3RyZWFtSW5mbyksdGhpcy5pc1BhdXNlZD90aGlzLnByZXZpb3VzLnBhdXNlKCk6dGhpcy5wcmV2aW91cy5yZXN1bWUoKX0sdS5wcm90b3R5cGUucmVnaXN0ZXJQcmV2aW91cz1mdW5jdGlvbihlKXt0aGlzLl9zb3VyY2VzLnB1c2goZSk7dmFyIHQ9dGhpcztyZXR1cm4gZS5vbihcImRhdGFcIiwoZnVuY3Rpb24oZSl7dC5wcm9jZXNzQ2h1bmsoZSl9KSksZS5vbihcImVuZFwiLChmdW5jdGlvbigpe3QuY2xvc2VkU291cmNlKHQucHJldmlvdXMuc3RyZWFtSW5mbyksdC5fc291cmNlcy5sZW5ndGg/dC5wcmVwYXJlTmV4dFNvdXJjZSgpOnQuZW5kKCl9KSksZS5vbihcImVycm9yXCIsKGZ1bmN0aW9uKGUpe3QuZXJyb3IoZSl9KSksdGhpc30sdS5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7cmV0dXJuISFhLnByb3RvdHlwZS5yZXN1bWUuY2FsbCh0aGlzKSYmKCF0aGlzLnByZXZpb3VzJiZ0aGlzLl9zb3VyY2VzLmxlbmd0aD8odGhpcy5wcmVwYXJlTmV4dFNvdXJjZSgpLCEwKTp0aGlzLnByZXZpb3VzfHx0aGlzLl9zb3VyY2VzLmxlbmd0aHx8dGhpcy5nZW5lcmF0ZWRFcnJvcj92b2lkIDA6KHRoaXMuZW5kKCksITApKX0sdS5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fc291cmNlcztpZighYS5wcm90b3R5cGUuZXJyb3IuY2FsbCh0aGlzLGUpKXJldHVybiExO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXRyeXt0W25dLmVycm9yKGUpfWNhdGNoKGUpe31yZXR1cm4hMH0sdS5wcm90b3R5cGUubG9jaz1mdW5jdGlvbigpe2EucHJvdG90eXBlLmxvY2suY2FsbCh0aGlzKTtmb3IodmFyIGU9dGhpcy5fc291cmNlcyx0PTA7dDxlLmxlbmd0aDt0KyspZVt0XS5sb2NrKCl9LHQuZXhwb3J0cz11fSx7XCIuLi9jcmMzMlwiOjQsXCIuLi9zaWduYXR1cmVcIjoyMyxcIi4uL3N0cmVhbS9HZW5lcmljV29ya2VyXCI6MjgsXCIuLi91dGY4XCI6MzEsXCIuLi91dGlsc1wiOjMyfV0sOTpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUoXCIuLi9jb21wcmVzc2lvbnNcIiksaT1lKFwiLi9aaXBGaWxlV29ya2VyXCIpO24uZ2VuZXJhdGVXb3JrZXI9ZnVuY3Rpb24oZSx0LG4pe3ZhciBvPW5ldyBpKHQuc3RyZWFtRmlsZXMsbix0LnBsYXRmb3JtLHQuZW5jb2RlRmlsZU5hbWUpLGE9MDt0cnl7ZS5mb3JFYWNoKChmdW5jdGlvbihlLG4pe2ErKzt2YXIgaT1mdW5jdGlvbihlLHQpe3ZhciBuPWV8fHQsaT1yW25dO2lmKCFpKXRocm93IG5ldyBFcnJvcihuK1wiIGlzIG5vdCBhIHZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCAhXCIpO3JldHVybiBpfShuLm9wdGlvbnMuY29tcHJlc3Npb24sdC5jb21wcmVzc2lvbikscz1uLm9wdGlvbnMuY29tcHJlc3Npb25PcHRpb25zfHx0LmNvbXByZXNzaW9uT3B0aW9uc3x8e30sYz1uLmRpcixsPW4uZGF0ZTtuLl9jb21wcmVzc1dvcmtlcihpLHMpLndpdGhTdHJlYW1JbmZvKFwiZmlsZVwiLHtuYW1lOmUsZGlyOmMsZGF0ZTpsLGNvbW1lbnQ6bi5jb21tZW50fHxcIlwiLHVuaXhQZXJtaXNzaW9uczpuLnVuaXhQZXJtaXNzaW9ucyxkb3NQZXJtaXNzaW9uczpuLmRvc1Blcm1pc3Npb25zfSkucGlwZShvKX0pKSxvLmVudHJpZXNDb3VudD1hfWNhdGNoKGUpe28uZXJyb3IoZSl9cmV0dXJuIG99fSx7XCIuLi9jb21wcmVzc2lvbnNcIjozLFwiLi9aaXBGaWxlV29ya2VyXCI6OH1dLDEwOltmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcigpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHIpKXJldHVybiBuZXcgcjtpZihhcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIlRoZSBjb25zdHJ1Y3RvciB3aXRoIHBhcmFtZXRlcnMgaGFzIGJlZW4gcmVtb3ZlZCBpbiBKU1ppcCAzLjAsIHBsZWFzZSBjaGVjayB0aGUgdXBncmFkZSBndWlkZS5cIik7dGhpcy5maWxlcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuY29tbWVudD1udWxsLHRoaXMucm9vdD1cIlwiLHRoaXMuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgcjtmb3IodmFyIHQgaW4gdGhpcylcImZ1bmN0aW9uXCIhPXR5cGVvZiB0aGlzW3RdJiYoZVt0XT10aGlzW3RdKTtyZXR1cm4gZX19KHIucHJvdG90eXBlPWUoXCIuL29iamVjdFwiKSkubG9hZEFzeW5jPWUoXCIuL2xvYWRcIiksci5zdXBwb3J0PWUoXCIuL3N1cHBvcnRcIiksci5kZWZhdWx0cz1lKFwiLi9kZWZhdWx0c1wiKSxyLnZlcnNpb249XCIzLjEwLjFcIixyLmxvYWRBc3luYz1mdW5jdGlvbihlLHQpe3JldHVybihuZXcgcikubG9hZEFzeW5jKGUsdCl9LHIuZXh0ZXJuYWw9ZShcIi4vZXh0ZXJuYWxcIiksdC5leHBvcnRzPXJ9LHtcIi4vZGVmYXVsdHNcIjo1LFwiLi9leHRlcm5hbFwiOjYsXCIuL2xvYWRcIjoxMSxcIi4vb2JqZWN0XCI6MTUsXCIuL3N1cHBvcnRcIjozMH1dLDExOltmdW5jdGlvbihlLHQsbil7dmFyIHI9ZShcIi4vdXRpbHNcIiksaT1lKFwiLi9leHRlcm5hbFwiKSxvPWUoXCIuL3V0ZjhcIiksYT1lKFwiLi96aXBFbnRyaWVzXCIpLHM9ZShcIi4vc3RyZWFtL0NyYzMyUHJvYmVcIiksYz1lKFwiLi9ub2RlanNVdGlsc1wiKTtmdW5jdGlvbiBsKGUpe3JldHVybiBuZXcgaS5Qcm9taXNlKChmdW5jdGlvbih0LG4pe3ZhciByPWUuZGVjb21wcmVzc2VkLmdldENvbnRlbnRXb3JrZXIoKS5waXBlKG5ldyBzKTtyLm9uKFwiZXJyb3JcIiwoZnVuY3Rpb24oZSl7bihlKX0pKS5vbihcImVuZFwiLChmdW5jdGlvbigpe3Iuc3RyZWFtSW5mby5jcmMzMiE9PWUuZGVjb21wcmVzc2VkLmNyYzMyP24obmV3IEVycm9yKFwiQ29ycnVwdGVkIHppcCA6IENSQzMyIG1pc21hdGNoXCIpKTp0KCl9KSkucmVzdW1lKCl9KSl9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztyZXR1cm4gdD1yLmV4dGVuZCh0fHx7fSx7YmFzZTY0OiExLGNoZWNrQ1JDMzI6ITEsb3B0aW1pemVkQmluYXJ5U3RyaW5nOiExLGNyZWF0ZUZvbGRlcnM6ITEsZGVjb2RlRmlsZU5hbWU6by51dGY4ZGVjb2RlfSksYy5pc05vZGUmJmMuaXNTdHJlYW0oZSk/aS5Qcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJKU1ppcCBjYW4ndCBhY2NlcHQgYSBzdHJlYW0gd2hlbiBsb2FkaW5nIGEgemlwIGZpbGUuXCIpKTpyLnByZXBhcmVDb250ZW50KFwidGhlIGxvYWRlZCB6aXAgZmlsZVwiLGUsITAsdC5vcHRpbWl6ZWRCaW5hcnlTdHJpbmcsdC5iYXNlNjQpLnRoZW4oKGZ1bmN0aW9uKGUpe3ZhciBuPW5ldyBhKHQpO3JldHVybiBuLmxvYWQoZSksbn0pKS50aGVuKChmdW5jdGlvbihlKXt2YXIgbj1baS5Qcm9taXNlLnJlc29sdmUoZSldLHI9ZS5maWxlcztpZih0LmNoZWNrQ1JDMzIpZm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspbi5wdXNoKGwocltvXSkpO3JldHVybiBpLlByb21pc2UuYWxsKG4pfSkpLnRoZW4oKGZ1bmN0aW9uKGUpe2Zvcih2YXIgaT1lLnNoaWZ0KCksbz1pLmZpbGVzLGE9MDthPG8ubGVuZ3RoO2ErKyl7dmFyIHM9b1thXSxjPXMuZmlsZU5hbWVTdHIsbD1yLnJlc29sdmUocy5maWxlTmFtZVN0cik7bi5maWxlKGwscy5kZWNvbXByZXNzZWQse2JpbmFyeTohMCxvcHRpbWl6ZWRCaW5hcnlTdHJpbmc6ITAsZGF0ZTpzLmRhdGUsZGlyOnMuZGlyLGNvbW1lbnQ6cy5maWxlQ29tbWVudFN0ci5sZW5ndGg/cy5maWxlQ29tbWVudFN0cjpudWxsLHVuaXhQZXJtaXNzaW9uczpzLnVuaXhQZXJtaXNzaW9ucyxkb3NQZXJtaXNzaW9uczpzLmRvc1Blcm1pc3Npb25zLGNyZWF0ZUZvbGRlcnM6dC5jcmVhdGVGb2xkZXJzfSkscy5kaXJ8fChuLmZpbGUobCkudW5zYWZlT3JpZ2luYWxOYW1lPWMpfXJldHVybiBpLnppcENvbW1lbnQubGVuZ3RoJiYobi5jb21tZW50PWkuemlwQ29tbWVudCksbn0pKX19LHtcIi4vZXh0ZXJuYWxcIjo2LFwiLi9ub2RlanNVdGlsc1wiOjE0LFwiLi9zdHJlYW0vQ3JjMzJQcm9iZVwiOjI1LFwiLi91dGY4XCI6MzEsXCIuL3V0aWxzXCI6MzIsXCIuL3ppcEVudHJpZXNcIjozM31dLDEyOltmdW5jdGlvbihlLHQsbil7dmFyIHI9ZShcIi4uL3V0aWxzXCIpLGk9ZShcIi4uL3N0cmVhbS9HZW5lcmljV29ya2VyXCIpO2Z1bmN0aW9uIG8oZSx0KXtpLmNhbGwodGhpcyxcIk5vZGVqcyBzdHJlYW0gaW5wdXQgYWRhcHRlciBmb3IgXCIrZSksdGhpcy5fdXBzdHJlYW1FbmRlZD0hMSx0aGlzLl9iaW5kU3RyZWFtKHQpfXIuaW5oZXJpdHMobyxpKSxvLnByb3RvdHlwZS5fYmluZFN0cmVhbT1mdW5jdGlvbihlKXt2YXIgdD10aGlzOyh0aGlzLl9zdHJlYW09ZSkucGF1c2UoKSxlLm9uKFwiZGF0YVwiLChmdW5jdGlvbihlKXt0LnB1c2goe2RhdGE6ZSxtZXRhOntwZXJjZW50OjB9fSl9KSkub24oXCJlcnJvclwiLChmdW5jdGlvbihlKXt0LmlzUGF1c2VkP3RoaXMuZ2VuZXJhdGVkRXJyb3I9ZTp0LmVycm9yKGUpfSkpLm9uKFwiZW5kXCIsKGZ1bmN0aW9uKCl7dC5pc1BhdXNlZD90Ll91cHN0cmVhbUVuZGVkPSEwOnQuZW5kKCl9KSl9LG8ucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7cmV0dXJuISFpLnByb3RvdHlwZS5wYXVzZS5jYWxsKHRoaXMpJiYodGhpcy5fc3RyZWFtLnBhdXNlKCksITApfSxvLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXtyZXR1cm4hIWkucHJvdG90eXBlLnJlc3VtZS5jYWxsKHRoaXMpJiYodGhpcy5fdXBzdHJlYW1FbmRlZD90aGlzLmVuZCgpOnRoaXMuX3N0cmVhbS5yZXN1bWUoKSwhMCl9LHQuZXhwb3J0cz1vfSx7XCIuLi9zdHJlYW0vR2VuZXJpY1dvcmtlclwiOjI4LFwiLi4vdXRpbHNcIjozMn1dLDEzOltmdW5jdGlvbihlLHQsbil7dmFyIHI9ZShcInJlYWRhYmxlLXN0cmVhbVwiKS5SZWFkYWJsZTtmdW5jdGlvbiBpKGUsdCxuKXtyLmNhbGwodGhpcyx0KSx0aGlzLl9oZWxwZXI9ZTt2YXIgaT10aGlzO2Uub24oXCJkYXRhXCIsKGZ1bmN0aW9uKGUsdCl7aS5wdXNoKGUpfHxpLl9oZWxwZXIucGF1c2UoKSxuJiZuKHQpfSkpLm9uKFwiZXJyb3JcIiwoZnVuY3Rpb24oZSl7aS5lbWl0KFwiZXJyb3JcIixlKX0pKS5vbihcImVuZFwiLChmdW5jdGlvbigpe2kucHVzaChudWxsKX0pKX1lKFwiLi4vdXRpbHNcIikuaW5oZXJpdHMoaSxyKSxpLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbigpe3RoaXMuX2hlbHBlci5yZXN1bWUoKX0sdC5leHBvcnRzPWl9LHtcIi4uL3V0aWxzXCI6MzIsXCJyZWFkYWJsZS1zdHJlYW1cIjoxNn1dLDE0OltmdW5jdGlvbihlLHQsbil7dC5leHBvcnRzPXtpc05vZGU6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIEJ1ZmZlcixuZXdCdWZmZXJGcm9tOmZ1bmN0aW9uKGUsdCl7aWYoQnVmZmVyLmZyb20mJkJ1ZmZlci5mcm9tIT09VWludDhBcnJheS5mcm9tKXJldHVybiBCdWZmZXIuZnJvbShlLHQpO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcignVGhlIFwiZGF0YVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJyk7cmV0dXJuIG5ldyBCdWZmZXIoZSx0KX0sYWxsb2NCdWZmZXI6ZnVuY3Rpb24oZSl7aWYoQnVmZmVyLmFsbG9jKXJldHVybiBCdWZmZXIuYWxsb2MoZSk7dmFyIHQ9bmV3IEJ1ZmZlcihlKTtyZXR1cm4gdC5maWxsKDApLHR9LGlzQnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoZSl9LGlzU3RyZWFtOmZ1bmN0aW9uKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLm9uJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnBhdXNlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnJlc3VtZX19fSx7fV0sMTU6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCxuKXt2YXIgcixpPW8uZ2V0VHlwZU9mKHQpLHM9by5leHRlbmQobnx8e30sYyk7cy5kYXRlPXMuZGF0ZXx8bmV3IERhdGUsbnVsbCE9PXMuY29tcHJlc3Npb24mJihzLmNvbXByZXNzaW9uPXMuY29tcHJlc3Npb24udG9VcHBlckNhc2UoKSksXCJzdHJpbmdcIj09dHlwZW9mIHMudW5peFBlcm1pc3Npb25zJiYocy51bml4UGVybWlzc2lvbnM9cGFyc2VJbnQocy51bml4UGVybWlzc2lvbnMsOCkpLHMudW5peFBlcm1pc3Npb25zJiYxNjM4NCZzLnVuaXhQZXJtaXNzaW9ucyYmKHMuZGlyPSEwKSxzLmRvc1Blcm1pc3Npb25zJiYxNiZzLmRvc1Blcm1pc3Npb25zJiYocy5kaXI9ITApLHMuZGlyJiYoZT1oKGUpKSxzLmNyZWF0ZUZvbGRlcnMmJihyPW0oZSkpJiZ2LmNhbGwodGhpcyxyLCEwKTt2YXIgZCxnPVwic3RyaW5nXCI9PT1pJiYhMT09PXMuYmluYXJ5JiYhMT09PXMuYmFzZTY0O24mJnZvaWQgMCE9PW4uYmluYXJ5fHwocy5iaW5hcnk9IWcpLCh0IGluc3RhbmNlb2YgbCYmMD09PXQudW5jb21wcmVzc2VkU2l6ZXx8cy5kaXJ8fCF0fHwwPT09dC5sZW5ndGgpJiYocy5iYXNlNjQ9ITEscy5iaW5hcnk9ITAsdD1cIlwiLHMuY29tcHJlc3Npb249XCJTVE9SRVwiLGk9XCJzdHJpbmdcIiksZD10IGluc3RhbmNlb2YgbHx8dCBpbnN0YW5jZW9mIGE/dDpmLmlzTm9kZSYmZi5pc1N0cmVhbSh0KT9uZXcgcChlLHQpOm8ucHJlcGFyZUNvbnRlbnQoZSx0LHMuYmluYXJ5LHMub3B0aW1pemVkQmluYXJ5U3RyaW5nLHMuYmFzZTY0KTt2YXIgeT1uZXcgdShlLGQscyk7dGhpcy5maWxlc1tlXT15fXZhciBpPWUoXCIuL3V0ZjhcIiksbz1lKFwiLi91dGlsc1wiKSxhPWUoXCIuL3N0cmVhbS9HZW5lcmljV29ya2VyXCIpLHM9ZShcIi4vc3RyZWFtL1N0cmVhbUhlbHBlclwiKSxjPWUoXCIuL2RlZmF1bHRzXCIpLGw9ZShcIi4vY29tcHJlc3NlZE9iamVjdFwiKSx1PWUoXCIuL3ppcE9iamVjdFwiKSxkPWUoXCIuL2dlbmVyYXRlXCIpLGY9ZShcIi4vbm9kZWpzVXRpbHNcIikscD1lKFwiLi9ub2RlanMvTm9kZWpzU3RyZWFtSW5wdXRBZGFwdGVyXCIpLG09ZnVuY3Rpb24oZSl7XCIvXCI9PT1lLnNsaWNlKC0xKSYmKGU9ZS5zdWJzdHJpbmcoMCxlLmxlbmd0aC0xKSk7dmFyIHQ9ZS5sYXN0SW5kZXhPZihcIi9cIik7cmV0dXJuIDA8dD9lLnN1YnN0cmluZygwLHQpOlwiXCJ9LGg9ZnVuY3Rpb24oZSl7cmV0dXJuXCIvXCIhPT1lLnNsaWNlKC0xKSYmKGUrPVwiL1wiKSxlfSx2PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9dm9pZCAwIT09dD90OmMuY3JlYXRlRm9sZGVycyxlPWgoZSksdGhpcy5maWxlc1tlXXx8ci5jYWxsKHRoaXMsZSxudWxsLHtkaXI6ITAsY3JlYXRlRm9sZGVyczp0fSksdGhpcy5maWxlc1tlXX07ZnVuY3Rpb24gZyhlKXtyZXR1cm5cIltvYmplY3QgUmVnRXhwXVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfXZhciB5PXtsb2FkOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVtb3ZlZCBpbiBKU1ppcCAzLjAsIHBsZWFzZSBjaGVjayB0aGUgdXBncmFkZSBndWlkZS5cIil9LGZvckVhY2g6ZnVuY3Rpb24oZSl7dmFyIHQsbixyO2Zvcih0IGluIHRoaXMuZmlsZXMpcj10aGlzLmZpbGVzW3RdLChuPXQuc2xpY2UodGhpcy5yb290Lmxlbmd0aCx0Lmxlbmd0aCkpJiZ0LnNsaWNlKDAsdGhpcy5yb290Lmxlbmd0aCk9PT10aGlzLnJvb3QmJmUobixyKX0sZmlsdGVyOmZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiB0aGlzLmZvckVhY2goKGZ1bmN0aW9uKG4scil7ZShuLHIpJiZ0LnB1c2gocil9KSksdH0sZmlsZTpmdW5jdGlvbihlLHQsbil7aWYoMSE9PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGU9dGhpcy5yb290K2Usci5jYWxsKHRoaXMsZSx0LG4pLHRoaXM7aWYoZyhlKSl7dmFyIGk9ZTtyZXR1cm4gdGhpcy5maWx0ZXIoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIXQuZGlyJiZpLnRlc3QoZSl9KSl9dmFyIG89dGhpcy5maWxlc1t0aGlzLnJvb3QrZV07cmV0dXJuIG8mJiFvLmRpcj9vOm51bGx9LGZvbGRlcjpmdW5jdGlvbihlKXtpZighZSlyZXR1cm4gdGhpcztpZihnKGUpKXJldHVybiB0aGlzLmZpbHRlcigoZnVuY3Rpb24odCxuKXtyZXR1cm4gbi5kaXImJmUudGVzdCh0KX0pKTt2YXIgdD10aGlzLnJvb3QrZSxuPXYuY2FsbCh0aGlzLHQpLHI9dGhpcy5jbG9uZSgpO3JldHVybiByLnJvb3Q9bi5uYW1lLHJ9LHJlbW92ZTpmdW5jdGlvbihlKXtlPXRoaXMucm9vdCtlO3ZhciB0PXRoaXMuZmlsZXNbZV07aWYodHx8KFwiL1wiIT09ZS5zbGljZSgtMSkmJihlKz1cIi9cIiksdD10aGlzLmZpbGVzW2VdKSx0JiYhdC5kaXIpZGVsZXRlIHRoaXMuZmlsZXNbZV07ZWxzZSBmb3IodmFyIG49dGhpcy5maWx0ZXIoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIG4ubmFtZS5zbGljZSgwLGUubGVuZ3RoKT09PWV9KSkscj0wO3I8bi5sZW5ndGg7cisrKWRlbGV0ZSB0aGlzLmZpbGVzW25bcl0ubmFtZV07cmV0dXJuIHRoaXN9LGdlbmVyYXRlOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVtb3ZlZCBpbiBKU1ppcCAzLjAsIHBsZWFzZSBjaGVjayB0aGUgdXBncmFkZSBndWlkZS5cIil9LGdlbmVyYXRlSW50ZXJuYWxTdHJlYW06ZnVuY3Rpb24oZSl7dmFyIHQsbj17fTt0cnl7aWYoKG49by5leHRlbmQoZXx8e30se3N0cmVhbUZpbGVzOiExLGNvbXByZXNzaW9uOlwiU1RPUkVcIixjb21wcmVzc2lvbk9wdGlvbnM6bnVsbCx0eXBlOlwiXCIscGxhdGZvcm06XCJET1NcIixjb21tZW50Om51bGwsbWltZVR5cGU6XCJhcHBsaWNhdGlvbi96aXBcIixlbmNvZGVGaWxlTmFtZTppLnV0ZjhlbmNvZGV9KSkudHlwZT1uLnR5cGUudG9Mb3dlckNhc2UoKSxuLmNvbXByZXNzaW9uPW4uY29tcHJlc3Npb24udG9VcHBlckNhc2UoKSxcImJpbmFyeXN0cmluZ1wiPT09bi50eXBlJiYobi50eXBlPVwic3RyaW5nXCIpLCFuLnR5cGUpdGhyb3cgbmV3IEVycm9yKFwiTm8gb3V0cHV0IHR5cGUgc3BlY2lmaWVkLlwiKTtvLmNoZWNrU3VwcG9ydChuLnR5cGUpLFwiZGFyd2luXCIhPT1uLnBsYXRmb3JtJiZcImZyZWVic2RcIiE9PW4ucGxhdGZvcm0mJlwibGludXhcIiE9PW4ucGxhdGZvcm0mJlwic3Vub3NcIiE9PW4ucGxhdGZvcm18fChuLnBsYXRmb3JtPVwiVU5JWFwiKSxcIndpbjMyXCI9PT1uLnBsYXRmb3JtJiYobi5wbGF0Zm9ybT1cIkRPU1wiKTt2YXIgcj1uLmNvbW1lbnR8fHRoaXMuY29tbWVudHx8XCJcIjt0PWQuZ2VuZXJhdGVXb3JrZXIodGhpcyxuLHIpfWNhdGNoKGUpeyh0PW5ldyBhKFwiZXJyb3JcIikpLmVycm9yKGUpfXJldHVybiBuZXcgcyh0LG4udHlwZXx8XCJzdHJpbmdcIixuLm1pbWVUeXBlKX0sZ2VuZXJhdGVBc3luYzpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmdlbmVyYXRlSW50ZXJuYWxTdHJlYW0oZSkuYWNjdW11bGF0ZSh0KX0sZ2VuZXJhdGVOb2RlU3RyZWFtOmZ1bmN0aW9uKGUsdCl7cmV0dXJuKGU9ZXx8e30pLnR5cGV8fChlLnR5cGU9XCJub2RlYnVmZmVyXCIpLHRoaXMuZ2VuZXJhdGVJbnRlcm5hbFN0cmVhbShlKS50b05vZGVqc1N0cmVhbSh0KX19O3QuZXhwb3J0cz15fSx7XCIuL2NvbXByZXNzZWRPYmplY3RcIjoyLFwiLi9kZWZhdWx0c1wiOjUsXCIuL2dlbmVyYXRlXCI6OSxcIi4vbm9kZWpzL05vZGVqc1N0cmVhbUlucHV0QWRhcHRlclwiOjEyLFwiLi9ub2RlanNVdGlsc1wiOjE0LFwiLi9zdHJlYW0vR2VuZXJpY1dvcmtlclwiOjI4LFwiLi9zdHJlYW0vU3RyZWFtSGVscGVyXCI6MjksXCIuL3V0ZjhcIjozMSxcIi4vdXRpbHNcIjozMixcIi4vemlwT2JqZWN0XCI6MzV9XSwxNjpbZnVuY3Rpb24oZSx0LG4pe3QuZXhwb3J0cz1lKFwic3RyZWFtXCIpfSx7c3RyZWFtOnZvaWQgMH1dLDE3OltmdW5jdGlvbihlLHQsbil7dmFyIHI9ZShcIi4vRGF0YVJlYWRlclwiKTtmdW5jdGlvbiBpKGUpe3IuY2FsbCh0aGlzLGUpO2Zvcih2YXIgdD0wO3Q8dGhpcy5kYXRhLmxlbmd0aDt0KyspZVt0XT0yNTUmZVt0XX1lKFwiLi4vdXRpbHNcIikuaW5oZXJpdHMoaSxyKSxpLnByb3RvdHlwZS5ieXRlQXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGF0YVt0aGlzLnplcm8rZV19LGkucHJvdG90eXBlLmxhc3RJbmRleE9mU2lnbmF0dXJlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmNoYXJDb2RlQXQoMCksbj1lLmNoYXJDb2RlQXQoMSkscj1lLmNoYXJDb2RlQXQoMiksaT1lLmNoYXJDb2RlQXQoMyksbz10aGlzLmxlbmd0aC00OzA8PW87LS1vKWlmKHRoaXMuZGF0YVtvXT09PXQmJnRoaXMuZGF0YVtvKzFdPT09biYmdGhpcy5kYXRhW28rMl09PT1yJiZ0aGlzLmRhdGFbbyszXT09PWkpcmV0dXJuIG8tdGhpcy56ZXJvO3JldHVybi0xfSxpLnByb3RvdHlwZS5yZWFkQW5kQ2hlY2tTaWduYXR1cmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jaGFyQ29kZUF0KDApLG49ZS5jaGFyQ29kZUF0KDEpLHI9ZS5jaGFyQ29kZUF0KDIpLGk9ZS5jaGFyQ29kZUF0KDMpLG89dGhpcy5yZWFkRGF0YSg0KTtyZXR1cm4gdD09PW9bMF0mJm49PT1vWzFdJiZyPT09b1syXSYmaT09PW9bM119LGkucHJvdG90eXBlLnJlYWREYXRhPWZ1bmN0aW9uKGUpe2lmKHRoaXMuY2hlY2tPZmZzZXQoZSksMD09PWUpcmV0dXJuW107dmFyIHQ9dGhpcy5kYXRhLnNsaWNlKHRoaXMuemVybyt0aGlzLmluZGV4LHRoaXMuemVybyt0aGlzLmluZGV4K2UpO3JldHVybiB0aGlzLmluZGV4Kz1lLHR9LHQuZXhwb3J0cz1pfSx7XCIuLi91dGlsc1wiOjMyLFwiLi9EYXRhUmVhZGVyXCI6MTh9XSwxODpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUoXCIuLi91dGlsc1wiKTtmdW5jdGlvbiBpKGUpe3RoaXMuZGF0YT1lLHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuaW5kZXg9MCx0aGlzLnplcm89MH1pLnByb3RvdHlwZT17Y2hlY2tPZmZzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5jaGVja0luZGV4KHRoaXMuaW5kZXgrZSl9LGNoZWNrSW5kZXg6ZnVuY3Rpb24oZSl7aWYodGhpcy5sZW5ndGg8dGhpcy56ZXJvK2V8fGU8MCl0aHJvdyBuZXcgRXJyb3IoXCJFbmQgb2YgZGF0YSByZWFjaGVkIChkYXRhIGxlbmd0aCA9IFwiK3RoaXMubGVuZ3RoK1wiLCBhc2tlZCBpbmRleCA9IFwiK2UrXCIpLiBDb3JydXB0ZWQgemlwID9cIil9LHNldEluZGV4OmZ1bmN0aW9uKGUpe3RoaXMuY2hlY2tJbmRleChlKSx0aGlzLmluZGV4PWV9LHNraXA6ZnVuY3Rpb24oZSl7dGhpcy5zZXRJbmRleCh0aGlzLmluZGV4K2UpfSxieXRlQXQ6ZnVuY3Rpb24oKXt9LHJlYWRJbnQ6ZnVuY3Rpb24oZSl7dmFyIHQsbj0wO2Zvcih0aGlzLmNoZWNrT2Zmc2V0KGUpLHQ9dGhpcy5pbmRleCtlLTE7dD49dGhpcy5pbmRleDt0LS0pbj0objw8OCkrdGhpcy5ieXRlQXQodCk7cmV0dXJuIHRoaXMuaW5kZXgrPWUsbn0scmVhZFN0cmluZzpmdW5jdGlvbihlKXtyZXR1cm4gci50cmFuc2Zvcm1UbyhcInN0cmluZ1wiLHRoaXMucmVhZERhdGEoZSkpfSxyZWFkRGF0YTpmdW5jdGlvbigpe30sbGFzdEluZGV4T2ZTaWduYXR1cmU6ZnVuY3Rpb24oKXt9LHJlYWRBbmRDaGVja1NpZ25hdHVyZTpmdW5jdGlvbigpe30scmVhZERhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlYWRJbnQoNCk7cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKDE5ODArKGU+PjI1JjEyNyksKGU+PjIxJjE1KS0xLGU+PjE2JjMxLGU+PjExJjMxLGU+PjUmNjMsKDMxJmUpPDwxKSl9fSx0LmV4cG9ydHM9aX0se1wiLi4vdXRpbHNcIjozMn1dLDE5OltmdW5jdGlvbihlLHQsbil7dmFyIHI9ZShcIi4vVWludDhBcnJheVJlYWRlclwiKTtmdW5jdGlvbiBpKGUpe3IuY2FsbCh0aGlzLGUpfWUoXCIuLi91dGlsc1wiKS5pbmhlcml0cyhpLHIpLGkucHJvdG90eXBlLnJlYWREYXRhPWZ1bmN0aW9uKGUpe3RoaXMuY2hlY2tPZmZzZXQoZSk7dmFyIHQ9dGhpcy5kYXRhLnNsaWNlKHRoaXMuemVybyt0aGlzLmluZGV4LHRoaXMuemVybyt0aGlzLmluZGV4K2UpO3JldHVybiB0aGlzLmluZGV4Kz1lLHR9LHQuZXhwb3J0cz1pfSx7XCIuLi91dGlsc1wiOjMyLFwiLi9VaW50OEFycmF5UmVhZGVyXCI6MjF9XSwyMDpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUoXCIuL0RhdGFSZWFkZXJcIik7ZnVuY3Rpb24gaShlKXtyLmNhbGwodGhpcyxlKX1lKFwiLi4vdXRpbHNcIikuaW5oZXJpdHMoaSxyKSxpLnByb3RvdHlwZS5ieXRlQXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGF0YS5jaGFyQ29kZUF0KHRoaXMuemVybytlKX0saS5wcm90b3R5cGUubGFzdEluZGV4T2ZTaWduYXR1cmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGF0YS5sYXN0SW5kZXhPZihlKS10aGlzLnplcm99LGkucHJvdG90eXBlLnJlYWRBbmRDaGVja1NpZ25hdHVyZT1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXRoaXMucmVhZERhdGEoNCl9LGkucHJvdG90eXBlLnJlYWREYXRhPWZ1bmN0aW9uKGUpe3RoaXMuY2hlY2tPZmZzZXQoZSk7dmFyIHQ9dGhpcy5kYXRhLnNsaWNlKHRoaXMuemVybyt0aGlzLmluZGV4LHRoaXMuemVybyt0aGlzLmluZGV4K2UpO3JldHVybiB0aGlzLmluZGV4Kz1lLHR9LHQuZXhwb3J0cz1pfSx7XCIuLi91dGlsc1wiOjMyLFwiLi9EYXRhUmVhZGVyXCI6MTh9XSwyMTpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUoXCIuL0FycmF5UmVhZGVyXCIpO2Z1bmN0aW9uIGkoZSl7ci5jYWxsKHRoaXMsZSl9ZShcIi4uL3V0aWxzXCIpLmluaGVyaXRzKGksciksaS5wcm90b3R5cGUucmVhZERhdGE9ZnVuY3Rpb24oZSl7aWYodGhpcy5jaGVja09mZnNldChlKSwwPT09ZSlyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7dmFyIHQ9dGhpcy5kYXRhLnN1YmFycmF5KHRoaXMuemVybyt0aGlzLmluZGV4LHRoaXMuemVybyt0aGlzLmluZGV4K2UpO3JldHVybiB0aGlzLmluZGV4Kz1lLHR9LHQuZXhwb3J0cz1pfSx7XCIuLi91dGlsc1wiOjMyLFwiLi9BcnJheVJlYWRlclwiOjE3fV0sMjI6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1lKFwiLi4vdXRpbHNcIiksaT1lKFwiLi4vc3VwcG9ydFwiKSxvPWUoXCIuL0FycmF5UmVhZGVyXCIpLGE9ZShcIi4vU3RyaW5nUmVhZGVyXCIpLHM9ZShcIi4vTm9kZUJ1ZmZlclJlYWRlclwiKSxjPWUoXCIuL1VpbnQ4QXJyYXlSZWFkZXJcIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXIuZ2V0VHlwZU9mKGUpO3JldHVybiByLmNoZWNrU3VwcG9ydCh0KSxcInN0cmluZ1wiIT09dHx8aS51aW50OGFycmF5P1wibm9kZWJ1ZmZlclwiPT09dD9uZXcgcyhlKTppLnVpbnQ4YXJyYXk/bmV3IGMoci50cmFuc2Zvcm1UbyhcInVpbnQ4YXJyYXlcIixlKSk6bmV3IG8oci50cmFuc2Zvcm1UbyhcImFycmF5XCIsZSkpOm5ldyBhKGUpfX0se1wiLi4vc3VwcG9ydFwiOjMwLFwiLi4vdXRpbHNcIjozMixcIi4vQXJyYXlSZWFkZXJcIjoxNyxcIi4vTm9kZUJ1ZmZlclJlYWRlclwiOjE5LFwiLi9TdHJpbmdSZWFkZXJcIjoyMCxcIi4vVWludDhBcnJheVJlYWRlclwiOjIxfV0sMjM6W2Z1bmN0aW9uKGUsdCxuKXtuLkxPQ0FMX0ZJTEVfSEVBREVSPVwiUEtcdTAwMDNcdTAwMDRcIixuLkNFTlRSQUxfRklMRV9IRUFERVI9XCJQS1x1MDAwMVx1MDAwMlwiLG4uQ0VOVFJBTF9ESVJFQ1RPUllfRU5EPVwiUEtcdTAwMDVcdTAwMDZcIixuLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1I9XCJQS1x1MDAwNlx1MDAwN1wiLG4uWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EPVwiUEtcdTAwMDZcdTAwMDZcIixuLkRBVEFfREVTQ1JJUFRPUj1cIlBLXHUwMDA3XFxiXCJ9LHt9XSwyNDpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUoXCIuL0dlbmVyaWNXb3JrZXJcIiksaT1lKFwiLi4vdXRpbHNcIik7ZnVuY3Rpb24gbyhlKXtyLmNhbGwodGhpcyxcIkNvbnZlcnRXb3JrZXIgdG8gXCIrZSksdGhpcy5kZXN0VHlwZT1lfWkuaW5oZXJpdHMobyxyKSxvLnByb3RvdHlwZS5wcm9jZXNzQ2h1bms9ZnVuY3Rpb24oZSl7dGhpcy5wdXNoKHtkYXRhOmkudHJhbnNmb3JtVG8odGhpcy5kZXN0VHlwZSxlLmRhdGEpLG1ldGE6ZS5tZXRhfSl9LHQuZXhwb3J0cz1vfSx7XCIuLi91dGlsc1wiOjMyLFwiLi9HZW5lcmljV29ya2VyXCI6Mjh9XSwyNTpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUoXCIuL0dlbmVyaWNXb3JrZXJcIiksaT1lKFwiLi4vY3JjMzJcIik7ZnVuY3Rpb24gbygpe3IuY2FsbCh0aGlzLFwiQ3JjMzJQcm9iZVwiKSx0aGlzLndpdGhTdHJlYW1JbmZvKFwiY3JjMzJcIiwwKX1lKFwiLi4vdXRpbHNcIikuaW5oZXJpdHMobyxyKSxvLnByb3RvdHlwZS5wcm9jZXNzQ2h1bms9ZnVuY3Rpb24oZSl7dGhpcy5zdHJlYW1JbmZvLmNyYzMyPWkoZS5kYXRhLHRoaXMuc3RyZWFtSW5mby5jcmMzMnx8MCksdGhpcy5wdXNoKGUpfSx0LmV4cG9ydHM9b30se1wiLi4vY3JjMzJcIjo0LFwiLi4vdXRpbHNcIjozMixcIi4vR2VuZXJpY1dvcmtlclwiOjI4fV0sMjY6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1lKFwiLi4vdXRpbHNcIiksaT1lKFwiLi9HZW5lcmljV29ya2VyXCIpO2Z1bmN0aW9uIG8oZSl7aS5jYWxsKHRoaXMsXCJEYXRhTGVuZ3RoUHJvYmUgZm9yIFwiK2UpLHRoaXMucHJvcE5hbWU9ZSx0aGlzLndpdGhTdHJlYW1JbmZvKGUsMCl9ci5pbmhlcml0cyhvLGkpLG8ucHJvdG90eXBlLnByb2Nlc3NDaHVuaz1mdW5jdGlvbihlKXtpZihlKXt2YXIgdD10aGlzLnN0cmVhbUluZm9bdGhpcy5wcm9wTmFtZV18fDA7dGhpcy5zdHJlYW1JbmZvW3RoaXMucHJvcE5hbWVdPXQrZS5kYXRhLmxlbmd0aH1pLnByb3RvdHlwZS5wcm9jZXNzQ2h1bmsuY2FsbCh0aGlzLGUpfSx0LmV4cG9ydHM9b30se1wiLi4vdXRpbHNcIjozMixcIi4vR2VuZXJpY1dvcmtlclwiOjI4fV0sMjc6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1lKFwiLi4vdXRpbHNcIiksaT1lKFwiLi9HZW5lcmljV29ya2VyXCIpO2Z1bmN0aW9uIG8oZSl7aS5jYWxsKHRoaXMsXCJEYXRhV29ya2VyXCIpO3ZhciB0PXRoaXM7dGhpcy5kYXRhSXNSZWFkeT0hMSx0aGlzLmluZGV4PTAsdGhpcy5tYXg9MCx0aGlzLmRhdGE9bnVsbCx0aGlzLnR5cGU9XCJcIix0aGlzLl90aWNrU2NoZWR1bGVkPSExLGUudGhlbigoZnVuY3Rpb24oZSl7dC5kYXRhSXNSZWFkeT0hMCx0LmRhdGE9ZSx0Lm1heD1lJiZlLmxlbmd0aHx8MCx0LnR5cGU9ci5nZXRUeXBlT2YoZSksdC5pc1BhdXNlZHx8dC5fdGlja0FuZFJlcGVhdCgpfSksKGZ1bmN0aW9uKGUpe3QuZXJyb3IoZSl9KSl9ci5pbmhlcml0cyhvLGkpLG8ucHJvdG90eXBlLmNsZWFuVXA9ZnVuY3Rpb24oKXtpLnByb3RvdHlwZS5jbGVhblVwLmNhbGwodGhpcyksdGhpcy5kYXRhPW51bGx9LG8ucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3JldHVybiEhaS5wcm90b3R5cGUucmVzdW1lLmNhbGwodGhpcykmJighdGhpcy5fdGlja1NjaGVkdWxlZCYmdGhpcy5kYXRhSXNSZWFkeSYmKHRoaXMuX3RpY2tTY2hlZHVsZWQ9ITAsci5kZWxheSh0aGlzLl90aWNrQW5kUmVwZWF0LFtdLHRoaXMpKSwhMCl9LG8ucHJvdG90eXBlLl90aWNrQW5kUmVwZWF0PWZ1bmN0aW9uKCl7dGhpcy5fdGlja1NjaGVkdWxlZD0hMSx0aGlzLmlzUGF1c2VkfHx0aGlzLmlzRmluaXNoZWR8fCh0aGlzLl90aWNrKCksdGhpcy5pc0ZpbmlzaGVkfHwoci5kZWxheSh0aGlzLl90aWNrQW5kUmVwZWF0LFtdLHRoaXMpLHRoaXMuX3RpY2tTY2hlZHVsZWQ9ITApKX0sby5wcm90b3R5cGUuX3RpY2s9ZnVuY3Rpb24oKXtpZih0aGlzLmlzUGF1c2VkfHx0aGlzLmlzRmluaXNoZWQpcmV0dXJuITE7dmFyIGU9bnVsbCx0PU1hdGgubWluKHRoaXMubWF4LHRoaXMuaW5kZXgrMTYzODQpO2lmKHRoaXMuaW5kZXg+PXRoaXMubWF4KXJldHVybiB0aGlzLmVuZCgpO3N3aXRjaCh0aGlzLnR5cGUpe2Nhc2VcInN0cmluZ1wiOmU9dGhpcy5kYXRhLnN1YnN0cmluZyh0aGlzLmluZGV4LHQpO2JyZWFrO2Nhc2VcInVpbnQ4YXJyYXlcIjplPXRoaXMuZGF0YS5zdWJhcnJheSh0aGlzLmluZGV4LHQpO2JyZWFrO2Nhc2VcImFycmF5XCI6Y2FzZVwibm9kZWJ1ZmZlclwiOmU9dGhpcy5kYXRhLnNsaWNlKHRoaXMuaW5kZXgsdCl9cmV0dXJuIHRoaXMuaW5kZXg9dCx0aGlzLnB1c2goe2RhdGE6ZSxtZXRhOntwZXJjZW50OnRoaXMubWF4P3RoaXMuaW5kZXgvdGhpcy5tYXgqMTAwOjB9fSl9LHQuZXhwb3J0cz1vfSx7XCIuLi91dGlsc1wiOjMyLFwiLi9HZW5lcmljV29ya2VyXCI6Mjh9XSwyODpbZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7dGhpcy5uYW1lPWV8fFwiZGVmYXVsdFwiLHRoaXMuc3RyZWFtSW5mbz17fSx0aGlzLmdlbmVyYXRlZEVycm9yPW51bGwsdGhpcy5leHRyYVN0cmVhbUluZm89e30sdGhpcy5pc1BhdXNlZD0hMCx0aGlzLmlzRmluaXNoZWQ9ITEsdGhpcy5pc0xvY2tlZD0hMSx0aGlzLl9saXN0ZW5lcnM9e2RhdGE6W10sZW5kOltdLGVycm9yOltdfSx0aGlzLnByZXZpb3VzPW51bGx9ci5wcm90b3R5cGU9e3B1c2g6ZnVuY3Rpb24oZSl7dGhpcy5lbWl0KFwiZGF0YVwiLGUpfSxlbmQ6ZnVuY3Rpb24oKXtpZih0aGlzLmlzRmluaXNoZWQpcmV0dXJuITE7dGhpcy5mbHVzaCgpO3RyeXt0aGlzLmVtaXQoXCJlbmRcIiksdGhpcy5jbGVhblVwKCksdGhpcy5pc0ZpbmlzaGVkPSEwfWNhdGNoKGUpe3RoaXMuZW1pdChcImVycm9yXCIsZSl9cmV0dXJuITB9LGVycm9yOmZ1bmN0aW9uKGUpe3JldHVybiF0aGlzLmlzRmluaXNoZWQmJih0aGlzLmlzUGF1c2VkP3RoaXMuZ2VuZXJhdGVkRXJyb3I9ZToodGhpcy5pc0ZpbmlzaGVkPSEwLHRoaXMuZW1pdChcImVycm9yXCIsZSksdGhpcy5wcmV2aW91cyYmdGhpcy5wcmV2aW91cy5lcnJvcihlKSx0aGlzLmNsZWFuVXAoKSksITApfSxvbjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9saXN0ZW5lcnNbZV0ucHVzaCh0KSx0aGlzfSxjbGVhblVwOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW1JbmZvPXRoaXMuZ2VuZXJhdGVkRXJyb3I9dGhpcy5leHRyYVN0cmVhbUluZm89bnVsbCx0aGlzLl9saXN0ZW5lcnM9W119LGVtaXQ6ZnVuY3Rpb24oZSx0KXtpZih0aGlzLl9saXN0ZW5lcnNbZV0pZm9yKHZhciBuPTA7bjx0aGlzLl9saXN0ZW5lcnNbZV0ubGVuZ3RoO24rKyl0aGlzLl9saXN0ZW5lcnNbZV1bbl0uY2FsbCh0aGlzLHQpfSxwaXBlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlZ2lzdGVyUHJldmlvdXModGhpcyl9LHJlZ2lzdGVyUHJldmlvdXM6ZnVuY3Rpb24oZSl7aWYodGhpcy5pc0xvY2tlZCl0aHJvdyBuZXcgRXJyb3IoXCJUaGUgc3RyZWFtICdcIit0aGlzK1wiJyBoYXMgYWxyZWFkeSBiZWVuIHVzZWQuXCIpO3RoaXMuc3RyZWFtSW5mbz1lLnN0cmVhbUluZm8sdGhpcy5tZXJnZVN0cmVhbUluZm8oKSx0aGlzLnByZXZpb3VzPWU7dmFyIHQ9dGhpcztyZXR1cm4gZS5vbihcImRhdGFcIiwoZnVuY3Rpb24oZSl7dC5wcm9jZXNzQ2h1bmsoZSl9KSksZS5vbihcImVuZFwiLChmdW5jdGlvbigpe3QuZW5kKCl9KSksZS5vbihcImVycm9yXCIsKGZ1bmN0aW9uKGUpe3QuZXJyb3IoZSl9KSksdGhpc30scGF1c2U6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5pc1BhdXNlZCYmIXRoaXMuaXNGaW5pc2hlZCYmKHRoaXMuaXNQYXVzZWQ9ITAsdGhpcy5wcmV2aW91cyYmdGhpcy5wcmV2aW91cy5wYXVzZSgpLCEwKX0scmVzdW1lOmZ1bmN0aW9uKCl7aWYoIXRoaXMuaXNQYXVzZWR8fHRoaXMuaXNGaW5pc2hlZClyZXR1cm4hMTt2YXIgZT10aGlzLmlzUGF1c2VkPSExO3JldHVybiB0aGlzLmdlbmVyYXRlZEVycm9yJiYodGhpcy5lcnJvcih0aGlzLmdlbmVyYXRlZEVycm9yKSxlPSEwKSx0aGlzLnByZXZpb3VzJiZ0aGlzLnByZXZpb3VzLnJlc3VtZSgpLCFlfSxmbHVzaDpmdW5jdGlvbigpe30scHJvY2Vzc0NodW5rOmZ1bmN0aW9uKGUpe3RoaXMucHVzaChlKX0sd2l0aFN0cmVhbUluZm86ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5leHRyYVN0cmVhbUluZm9bZV09dCx0aGlzLm1lcmdlU3RyZWFtSW5mbygpLHRoaXN9LG1lcmdlU3RyZWFtSW5mbzpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzLmV4dHJhU3RyZWFtSW5mbylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5leHRyYVN0cmVhbUluZm8sZSkmJih0aGlzLnN0cmVhbUluZm9bZV09dGhpcy5leHRyYVN0cmVhbUluZm9bZV0pfSxsb2NrOmZ1bmN0aW9uKCl7aWYodGhpcy5pc0xvY2tlZCl0aHJvdyBuZXcgRXJyb3IoXCJUaGUgc3RyZWFtICdcIit0aGlzK1wiJyBoYXMgYWxyZWFkeSBiZWVuIHVzZWQuXCIpO3RoaXMuaXNMb2NrZWQ9ITAsdGhpcy5wcmV2aW91cyYmdGhpcy5wcmV2aW91cy5sb2NrKCl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIGU9XCJXb3JrZXIgXCIrdGhpcy5uYW1lO3JldHVybiB0aGlzLnByZXZpb3VzP3RoaXMucHJldmlvdXMrXCIgLT4gXCIrZTplfX0sdC5leHBvcnRzPXJ9LHt9XSwyOTpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUoXCIuLi91dGlsc1wiKSxpPWUoXCIuL0NvbnZlcnRXb3JrZXJcIiksbz1lKFwiLi9HZW5lcmljV29ya2VyXCIpLGE9ZShcIi4uL2Jhc2U2NFwiKSxzPWUoXCIuLi9zdXBwb3J0XCIpLGM9ZShcIi4uL2V4dGVybmFsXCIpLGw9bnVsbDtpZihzLm5vZGVzdHJlYW0pdHJ5e2w9ZShcIi4uL25vZGVqcy9Ob2RlanNTdHJlYW1PdXRwdXRBZGFwdGVyXCIpfWNhdGNoKGUpe31mdW5jdGlvbiB1KGUsdCxuKXt2YXIgYT10O3N3aXRjaCh0KXtjYXNlXCJibG9iXCI6Y2FzZVwiYXJyYXlidWZmZXJcIjphPVwidWludDhhcnJheVwiO2JyZWFrO2Nhc2VcImJhc2U2NFwiOmE9XCJzdHJpbmdcIn10cnl7dGhpcy5faW50ZXJuYWxUeXBlPWEsdGhpcy5fb3V0cHV0VHlwZT10LHRoaXMuX21pbWVUeXBlPW4sci5jaGVja1N1cHBvcnQoYSksdGhpcy5fd29ya2VyPWUucGlwZShuZXcgaShhKSksZS5sb2NrKCl9Y2F0Y2goZSl7dGhpcy5fd29ya2VyPW5ldyBvKFwiZXJyb3JcIiksdGhpcy5fd29ya2VyLmVycm9yKGUpfX11LnByb3RvdHlwZT17YWNjdW11bGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IGMuUHJvbWlzZSgoZnVuY3Rpb24obixpKXt2YXIgbz1bXSxzPWUuX2ludGVybmFsVHlwZSxjPWUuX291dHB1dFR5cGUsbD1lLl9taW1lVHlwZTtlLm9uKFwiZGF0YVwiLChmdW5jdGlvbihlLG4pe28ucHVzaChlKSx0JiZ0KG4pfSkpLm9uKFwiZXJyb3JcIiwoZnVuY3Rpb24oZSl7bz1bXSxpKGUpfSkpLm9uKFwiZW5kXCIsKGZ1bmN0aW9uKCl7dHJ5e3ZhciBlPWZ1bmN0aW9uKGUsdCxuKXtzd2l0Y2goZSl7Y2FzZVwiYmxvYlwiOnJldHVybiByLm5ld0Jsb2Ioci50cmFuc2Zvcm1UbyhcImFycmF5YnVmZmVyXCIsdCksbik7Y2FzZVwiYmFzZTY0XCI6cmV0dXJuIGEuZW5jb2RlKHQpO2RlZmF1bHQ6cmV0dXJuIHIudHJhbnNmb3JtVG8oZSx0KX19KGMsZnVuY3Rpb24oZSx0KXt2YXIgbixyPTAsaT1udWxsLG89MDtmb3Iobj0wO248dC5sZW5ndGg7bisrKW8rPXRbbl0ubGVuZ3RoO3N3aXRjaChlKXtjYXNlXCJzdHJpbmdcIjpyZXR1cm4gdC5qb2luKFwiXCIpO2Nhc2VcImFycmF5XCI6cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sdCk7Y2FzZVwidWludDhhcnJheVwiOmZvcihpPW5ldyBVaW50OEFycmF5KG8pLG49MDtuPHQubGVuZ3RoO24rKylpLnNldCh0W25dLHIpLHIrPXRbbl0ubGVuZ3RoO3JldHVybiBpO2Nhc2VcIm5vZGVidWZmZXJcIjpyZXR1cm4gQnVmZmVyLmNvbmNhdCh0KTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcImNvbmNhdCA6IHVuc3VwcG9ydGVkIHR5cGUgJ1wiK2UrXCInXCIpfX0ocyxvKSxsKTtuKGUpfWNhdGNoKGUpe2koZSl9bz1bXX0pKS5yZXN1bWUoKX0pKX0odGhpcyxlKX0sb246ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO3JldHVyblwiZGF0YVwiPT09ZT90aGlzLl93b3JrZXIub24oZSwoZnVuY3Rpb24oZSl7dC5jYWxsKG4sZS5kYXRhLGUubWV0YSl9KSk6dGhpcy5fd29ya2VyLm9uKGUsKGZ1bmN0aW9uKCl7ci5kZWxheSh0LGFyZ3VtZW50cyxuKX0pKSx0aGlzfSxyZXN1bWU6ZnVuY3Rpb24oKXtyZXR1cm4gci5kZWxheSh0aGlzLl93b3JrZXIucmVzdW1lLFtdLHRoaXMuX3dvcmtlciksdGhpc30scGF1c2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd29ya2VyLnBhdXNlKCksdGhpc30sdG9Ob2RlanNTdHJlYW06ZnVuY3Rpb24oZSl7aWYoci5jaGVja1N1cHBvcnQoXCJub2Rlc3RyZWFtXCIpLFwibm9kZWJ1ZmZlclwiIT09dGhpcy5fb3V0cHV0VHlwZSl0aHJvdyBuZXcgRXJyb3IodGhpcy5fb3V0cHV0VHlwZStcIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgbWV0aG9kXCIpO3JldHVybiBuZXcgbCh0aGlzLHtvYmplY3RNb2RlOlwibm9kZWJ1ZmZlclwiIT09dGhpcy5fb3V0cHV0VHlwZX0sZSl9fSx0LmV4cG9ydHM9dX0se1wiLi4vYmFzZTY0XCI6MSxcIi4uL2V4dGVybmFsXCI6NixcIi4uL25vZGVqcy9Ob2RlanNTdHJlYW1PdXRwdXRBZGFwdGVyXCI6MTMsXCIuLi9zdXBwb3J0XCI6MzAsXCIuLi91dGlsc1wiOjMyLFwiLi9Db252ZXJ0V29ya2VyXCI6MjQsXCIuL0dlbmVyaWNXb3JrZXJcIjoyOH1dLDMwOltmdW5jdGlvbihlLHQsbil7aWYobi5iYXNlNjQ9ITAsbi5hcnJheT0hMCxuLnN0cmluZz0hMCxuLmFycmF5YnVmZmVyPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4QXJyYXksbi5ub2RlYnVmZmVyPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBCdWZmZXIsbi51aW50OGFycmF5PVwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50OEFycmF5LFwidW5kZWZpbmVkXCI9PXR5cGVvZiBBcnJheUJ1ZmZlciluLmJsb2I9ITE7ZWxzZXt2YXIgcj1uZXcgQXJyYXlCdWZmZXIoMCk7dHJ5e24uYmxvYj0wPT09bmV3IEJsb2IoW3JdLHt0eXBlOlwiYXBwbGljYXRpb24vemlwXCJ9KS5zaXplfWNhdGNoKGUpe3RyeXt2YXIgaT1uZXcoc2VsZi5CbG9iQnVpbGRlcnx8c2VsZi5XZWJLaXRCbG9iQnVpbGRlcnx8c2VsZi5Nb3pCbG9iQnVpbGRlcnx8c2VsZi5NU0Jsb2JCdWlsZGVyKTtpLmFwcGVuZChyKSxuLmJsb2I9MD09PWkuZ2V0QmxvYihcImFwcGxpY2F0aW9uL3ppcFwiKS5zaXplfWNhdGNoKGUpe24uYmxvYj0hMX19fXRyeXtuLm5vZGVzdHJlYW09ISFlKFwicmVhZGFibGUtc3RyZWFtXCIpLlJlYWRhYmxlfWNhdGNoKGUpe24ubm9kZXN0cmVhbT0hMX19LHtcInJlYWRhYmxlLXN0cmVhbVwiOjE2fV0sMzE6W2Z1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9ZShcIi4vdXRpbHNcIiksaT1lKFwiLi9zdXBwb3J0XCIpLG89ZShcIi4vbm9kZWpzVXRpbHNcIiksYT1lKFwiLi9zdHJlYW0vR2VuZXJpY1dvcmtlclwiKSxzPW5ldyBBcnJheSgyNTYpLGM9MDtjPDI1NjtjKyspc1tjXT0yNTI8PWM/NjoyNDg8PWM/NToyNDA8PWM/NDoyMjQ8PWM/MzoxOTI8PWM/MjoxO2Z1bmN0aW9uIGwoKXthLmNhbGwodGhpcyxcInV0Zi04IGRlY29kZVwiKSx0aGlzLmxlZnRPdmVyPW51bGx9ZnVuY3Rpb24gdSgpe2EuY2FsbCh0aGlzLFwidXRmLTggZW5jb2RlXCIpfXNbMjU0XT1zWzI1NF09MSxuLnV0ZjhlbmNvZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGkubm9kZWJ1ZmZlcj9vLm5ld0J1ZmZlckZyb20oZSxcInV0Zi04XCIpOmZ1bmN0aW9uKGUpe3ZhciB0LG4scixvLGEscz1lLmxlbmd0aCxjPTA7Zm9yKG89MDtvPHM7bysrKTU1Mjk2PT0oNjQ1MTImKG49ZS5jaGFyQ29kZUF0KG8pKSkmJm8rMTxzJiY1NjMyMD09KDY0NTEyJihyPWUuY2hhckNvZGVBdChvKzEpKSkmJihuPTY1NTM2KyhuLTU1Mjk2PDwxMCkrKHItNTYzMjApLG8rKyksYys9bjwxMjg/MTpuPDIwNDg/MjpuPDY1NTM2PzM6NDtmb3IodD1pLnVpbnQ4YXJyYXk/bmV3IFVpbnQ4QXJyYXkoYyk6bmV3IEFycmF5KGMpLG89YT0wO2E8YztvKyspNTUyOTY9PSg2NDUxMiYobj1lLmNoYXJDb2RlQXQobykpKSYmbysxPHMmJjU2MzIwPT0oNjQ1MTImKHI9ZS5jaGFyQ29kZUF0KG8rMSkpKSYmKG49NjU1MzYrKG4tNTUyOTY8PDEwKSsoci01NjMyMCksbysrKSxuPDEyOD90W2ErK109bjoobjwyMDQ4P3RbYSsrXT0xOTJ8bj4+PjY6KG48NjU1MzY/dFthKytdPTIyNHxuPj4+MTI6KHRbYSsrXT0yNDB8bj4+PjE4LHRbYSsrXT0xMjh8bj4+PjEyJjYzKSx0W2ErK109MTI4fG4+Pj42JjYzKSx0W2ErK109MTI4fDYzJm4pO3JldHVybiB0fShlKX0sbi51dGY4ZGVjb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBpLm5vZGVidWZmZXI/ci50cmFuc2Zvcm1UbyhcIm5vZGVidWZmZXJcIixlKS50b1N0cmluZyhcInV0Zi04XCIpOmZ1bmN0aW9uKGUpe3ZhciB0LG4saSxvLGE9ZS5sZW5ndGgsYz1uZXcgQXJyYXkoMiphKTtmb3IodD1uPTA7dDxhOylpZigoaT1lW3QrK10pPDEyOCljW24rK109aTtlbHNlIGlmKDQ8KG89c1tpXSkpY1tuKytdPTY1NTMzLHQrPW8tMTtlbHNle2ZvcihpJj0yPT09bz8zMTozPT09bz8xNTo3OzE8byYmdDxhOylpPWk8PDZ8NjMmZVt0KytdLG8tLTsxPG8/Y1tuKytdPTY1NTMzOmk8NjU1MzY/Y1tuKytdPWk6KGktPTY1NTM2LGNbbisrXT01NTI5NnxpPj4xMCYxMDIzLGNbbisrXT01NjMyMHwxMDIzJmkpfXJldHVybiBjLmxlbmd0aCE9PW4mJihjLnN1YmFycmF5P2M9Yy5zdWJhcnJheSgwLG4pOmMubGVuZ3RoPW4pLHIuYXBwbHlGcm9tQ2hhckNvZGUoYyl9KGU9ci50cmFuc2Zvcm1UbyhpLnVpbnQ4YXJyYXk/XCJ1aW50OGFycmF5XCI6XCJhcnJheVwiLGUpKX0sci5pbmhlcml0cyhsLGEpLGwucHJvdG90eXBlLnByb2Nlc3NDaHVuaz1mdW5jdGlvbihlKXt2YXIgdD1yLnRyYW5zZm9ybVRvKGkudWludDhhcnJheT9cInVpbnQ4YXJyYXlcIjpcImFycmF5XCIsZS5kYXRhKTtpZih0aGlzLmxlZnRPdmVyJiZ0aGlzLmxlZnRPdmVyLmxlbmd0aCl7aWYoaS51aW50OGFycmF5KXt2YXIgbz10Oyh0PW5ldyBVaW50OEFycmF5KG8ubGVuZ3RoK3RoaXMubGVmdE92ZXIubGVuZ3RoKSkuc2V0KHRoaXMubGVmdE92ZXIsMCksdC5zZXQobyx0aGlzLmxlZnRPdmVyLmxlbmd0aCl9ZWxzZSB0PXRoaXMubGVmdE92ZXIuY29uY2F0KHQpO3RoaXMubGVmdE92ZXI9bnVsbH12YXIgYT1mdW5jdGlvbihlLHQpe3ZhciBuO2ZvcigodD10fHxlLmxlbmd0aCk+ZS5sZW5ndGgmJih0PWUubGVuZ3RoKSxuPXQtMTswPD1uJiYxMjg9PSgxOTImZVtuXSk7KW4tLTtyZXR1cm4gbjwwfHwwPT09bj90Om4rc1tlW25dXT50P246dH0odCksYz10O2EhPT10Lmxlbmd0aCYmKGkudWludDhhcnJheT8oYz10LnN1YmFycmF5KDAsYSksdGhpcy5sZWZ0T3Zlcj10LnN1YmFycmF5KGEsdC5sZW5ndGgpKTooYz10LnNsaWNlKDAsYSksdGhpcy5sZWZ0T3Zlcj10LnNsaWNlKGEsdC5sZW5ndGgpKSksdGhpcy5wdXNoKHtkYXRhOm4udXRmOGRlY29kZShjKSxtZXRhOmUubWV0YX0pfSxsLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe3RoaXMubGVmdE92ZXImJnRoaXMubGVmdE92ZXIubGVuZ3RoJiYodGhpcy5wdXNoKHtkYXRhOm4udXRmOGRlY29kZSh0aGlzLmxlZnRPdmVyKSxtZXRhOnt9fSksdGhpcy5sZWZ0T3Zlcj1udWxsKX0sbi5VdGY4RGVjb2RlV29ya2VyPWwsci5pbmhlcml0cyh1LGEpLHUucHJvdG90eXBlLnByb2Nlc3NDaHVuaz1mdW5jdGlvbihlKXt0aGlzLnB1c2goe2RhdGE6bi51dGY4ZW5jb2RlKGUuZGF0YSksbWV0YTplLm1ldGF9KX0sbi5VdGY4RW5jb2RlV29ya2VyPXV9LHtcIi4vbm9kZWpzVXRpbHNcIjoxNCxcIi4vc3RyZWFtL0dlbmVyaWNXb3JrZXJcIjoyOCxcIi4vc3VwcG9ydFwiOjMwLFwiLi91dGlsc1wiOjMyfV0sMzI6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1lKFwiLi9zdXBwb3J0XCIpLGk9ZShcIi4vYmFzZTY0XCIpLG89ZShcIi4vbm9kZWpzVXRpbHNcIiksYT1lKFwiLi9leHRlcm5hbFwiKTtmdW5jdGlvbiBzKGUpe3JldHVybiBlfWZ1bmN0aW9uIGMoZSx0KXtmb3IodmFyIG49MDtuPGUubGVuZ3RoOysrbil0W25dPTI1NSZlLmNoYXJDb2RlQXQobik7cmV0dXJuIHR9ZShcInNldGltbWVkaWF0ZVwiKSxuLm5ld0Jsb2I9ZnVuY3Rpb24oZSx0KXtuLmNoZWNrU3VwcG9ydChcImJsb2JcIik7dHJ5e3JldHVybiBuZXcgQmxvYihbZV0se3R5cGU6dH0pfWNhdGNoKG4pe3RyeXt2YXIgcj1uZXcoc2VsZi5CbG9iQnVpbGRlcnx8c2VsZi5XZWJLaXRCbG9iQnVpbGRlcnx8c2VsZi5Nb3pCbG9iQnVpbGRlcnx8c2VsZi5NU0Jsb2JCdWlsZGVyKTtyZXR1cm4gci5hcHBlbmQoZSksci5nZXRCbG9iKHQpfWNhdGNoKGUpe3Rocm93IG5ldyBFcnJvcihcIkJ1ZyA6IGNhbid0IGNvbnN0cnVjdCB0aGUgQmxvYi5cIil9fX07dmFyIGw9e3N0cmluZ2lmeUJ5Q2h1bms6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVtdLGk9MCxvPWUubGVuZ3RoO2lmKG88PW4pcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxlKTtmb3IoO2k8bzspXCJhcnJheVwiPT09dHx8XCJub2RlYnVmZmVyXCI9PT10P3IucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZS5zbGljZShpLE1hdGgubWluKGkrbixvKSkpKTpyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGUuc3ViYXJyYXkoaSxNYXRoLm1pbihpK24sbykpKSksaSs9bjtyZXR1cm4gci5qb2luKFwiXCIpfSxzdHJpbmdpZnlCeUNoYXI6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVwiXCIsbj0wO248ZS5sZW5ndGg7bisrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtuXSk7cmV0dXJuIHR9LGFwcGx5Q2FuQmVVc2VkOnt1aW50OGFycmF5OmZ1bmN0aW9uKCl7dHJ5e3JldHVybiByLnVpbnQ4YXJyYXkmJjE9PT1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQ4QXJyYXkoMSkpLmxlbmd0aH1jYXRjaChlKXtyZXR1cm4hMX19KCksbm9kZWJ1ZmZlcjpmdW5jdGlvbigpe3RyeXtyZXR1cm4gci5ub2RlYnVmZmVyJiYxPT09U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG8uYWxsb2NCdWZmZXIoMSkpLmxlbmd0aH1jYXRjaChlKXtyZXR1cm4hMX19KCl9fTtmdW5jdGlvbiB1KGUpe3ZhciB0PTY1NTM2LHI9bi5nZXRUeXBlT2YoZSksaT0hMDtpZihcInVpbnQ4YXJyYXlcIj09PXI/aT1sLmFwcGx5Q2FuQmVVc2VkLnVpbnQ4YXJyYXk6XCJub2RlYnVmZmVyXCI9PT1yJiYoaT1sLmFwcGx5Q2FuQmVVc2VkLm5vZGVidWZmZXIpLGkpZm9yKDsxPHQ7KXRyeXtyZXR1cm4gbC5zdHJpbmdpZnlCeUNodW5rKGUscix0KX1jYXRjaChlKXt0PU1hdGguZmxvb3IodC8yKX1yZXR1cm4gbC5zdHJpbmdpZnlCeUNoYXIoZSl9ZnVuY3Rpb24gZChlLHQpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXRbbl09ZVtuXTtyZXR1cm4gdH1uLmFwcGx5RnJvbUNoYXJDb2RlPXU7dmFyIGY9e307Zi5zdHJpbmc9e3N0cmluZzpzLGFycmF5OmZ1bmN0aW9uKGUpe3JldHVybiBjKGUsbmV3IEFycmF5KGUubGVuZ3RoKSl9LGFycmF5YnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiBmLnN0cmluZy51aW50OGFycmF5KGUpLmJ1ZmZlcn0sdWludDhhcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gYyhlLG5ldyBVaW50OEFycmF5KGUubGVuZ3RoKSl9LG5vZGVidWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSxvLmFsbG9jQnVmZmVyKGUubGVuZ3RoKSl9fSxmLmFycmF5PXtzdHJpbmc6dSxhcnJheTpzLGFycmF5YnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVWludDhBcnJheShlKS5idWZmZXJ9LHVpbnQ4YXJyYXk6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBVaW50OEFycmF5KGUpfSxub2RlYnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiBvLm5ld0J1ZmZlckZyb20oZSl9fSxmLmFycmF5YnVmZmVyPXtzdHJpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuIHUobmV3IFVpbnQ4QXJyYXkoZSkpfSxhcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gZChuZXcgVWludDhBcnJheShlKSxuZXcgQXJyYXkoZS5ieXRlTGVuZ3RoKSl9LGFycmF5YnVmZmVyOnMsdWludDhhcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZSl9LG5vZGVidWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG8ubmV3QnVmZmVyRnJvbShuZXcgVWludDhBcnJheShlKSl9fSxmLnVpbnQ4YXJyYXk9e3N0cmluZzp1LGFycmF5OmZ1bmN0aW9uKGUpe3JldHVybiBkKGUsbmV3IEFycmF5KGUubGVuZ3RoKSl9LGFycmF5YnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiBlLmJ1ZmZlcn0sdWludDhhcnJheTpzLG5vZGVidWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG8ubmV3QnVmZmVyRnJvbShlKX19LGYubm9kZWJ1ZmZlcj17c3RyaW5nOnUsYXJyYXk6ZnVuY3Rpb24oZSl7cmV0dXJuIGQoZSxuZXcgQXJyYXkoZS5sZW5ndGgpKX0sYXJyYXlidWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGYubm9kZWJ1ZmZlci51aW50OGFycmF5KGUpLmJ1ZmZlcn0sdWludDhhcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gZChlLG5ldyBVaW50OEFycmF5KGUubGVuZ3RoKSl9LG5vZGVidWZmZXI6c30sbi50cmFuc2Zvcm1Ubz1mdW5jdGlvbihlLHQpe2lmKHQ9dHx8XCJcIiwhZSlyZXR1cm4gdDtuLmNoZWNrU3VwcG9ydChlKTt2YXIgcj1uLmdldFR5cGVPZih0KTtyZXR1cm4gZltyXVtlXSh0KX0sbi5yZXNvbHZlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLnNwbGl0KFwiL1wiKSxuPVtdLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGk9dFtyXTtcIi5cIj09PWl8fFwiXCI9PT1pJiYwIT09ciYmciE9PXQubGVuZ3RoLTF8fChcIi4uXCI9PT1pP24ucG9wKCk6bi5wdXNoKGkpKX1yZXR1cm4gbi5qb2luKFwiL1wiKX0sbi5nZXRUeXBlT2Y9ZnVuY3Rpb24oZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGU/XCJzdHJpbmdcIjpcIltvYmplY3QgQXJyYXldXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSk/XCJhcnJheVwiOnIubm9kZWJ1ZmZlciYmby5pc0J1ZmZlcihlKT9cIm5vZGVidWZmZXJcIjpyLnVpbnQ4YXJyYXkmJmUgaW5zdGFuY2VvZiBVaW50OEFycmF5P1widWludDhhcnJheVwiOnIuYXJyYXlidWZmZXImJmUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9cImFycmF5YnVmZmVyXCI6dm9pZCAwfSxuLmNoZWNrU3VwcG9ydD1mdW5jdGlvbihlKXtpZighcltlLnRvTG93ZXJDYXNlKCldKXRocm93IG5ldyBFcnJvcihlK1wiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBwbGF0Zm9ybVwiKX0sbi5NQVhfVkFMVUVfMTZCSVRTPTY1NTM1LG4uTUFYX1ZBTFVFXzMyQklUUz0tMSxuLnByZXR0eT1mdW5jdGlvbihlKXt2YXIgdCxuLHI9XCJcIjtmb3Iobj0wO248KGV8fFwiXCIpLmxlbmd0aDtuKyspcis9XCJcXFxceFwiKygodD1lLmNoYXJDb2RlQXQobikpPDE2P1wiMFwiOlwiXCIpK3QudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7cmV0dXJuIHJ9LG4uZGVsYXk9ZnVuY3Rpb24oZSx0LG4pe3NldEltbWVkaWF0ZSgoZnVuY3Rpb24oKXtlLmFwcGx5KG58fG51bGwsdHx8W10pfSkpfSxuLmluaGVyaXRzPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbigpe31uLnByb3RvdHlwZT10LnByb3RvdHlwZSxlLnByb3RvdHlwZT1uZXcgbn0sbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgZSx0LG49e307Zm9yKGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKWZvcih0IGluIGFyZ3VtZW50c1tlXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYXJndW1lbnRzW2VdLHQpJiZ2b2lkIDA9PT1uW3RdJiYoblt0XT1hcmd1bWVudHNbZV1bdF0pO3JldHVybiBufSxuLnByZXBhcmVDb250ZW50PWZ1bmN0aW9uKGUsdCxvLHMsbCl7cmV0dXJuIGEuUHJvbWlzZS5yZXNvbHZlKHQpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiByLmJsb2ImJihlIGluc3RhbmNlb2YgQmxvYnx8LTEhPT1bXCJbb2JqZWN0IEZpbGVdXCIsXCJbb2JqZWN0IEJsb2JdXCJdLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKSkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBGaWxlUmVhZGVyP25ldyBhLlByb21pc2UoKGZ1bmN0aW9uKHQsbil7dmFyIHI9bmV3IEZpbGVSZWFkZXI7ci5vbmxvYWQ9ZnVuY3Rpb24oZSl7dChlLnRhcmdldC5yZXN1bHQpfSxyLm9uZXJyb3I9ZnVuY3Rpb24oZSl7bihlLnRhcmdldC5lcnJvcil9LHIucmVhZEFzQXJyYXlCdWZmZXIoZSl9KSk6ZX0pKS50aGVuKChmdW5jdGlvbih0KXt2YXIgdT1uLmdldFR5cGVPZih0KTtyZXR1cm4gdT8oXCJhcnJheWJ1ZmZlclwiPT09dT90PW4udHJhbnNmb3JtVG8oXCJ1aW50OGFycmF5XCIsdCk6XCJzdHJpbmdcIj09PXUmJihsP3Q9aS5kZWNvZGUodCk6byYmITAhPT1zJiYodD1mdW5jdGlvbihlKXtyZXR1cm4gYyhlLHIudWludDhhcnJheT9uZXcgVWludDhBcnJheShlLmxlbmd0aCk6bmV3IEFycmF5KGUubGVuZ3RoKSl9KHQpKSksdCk6YS5Qcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJDYW4ndCByZWFkIHRoZSBkYXRhIG9mICdcIitlK1wiJy4gSXMgaXQgaW4gYSBzdXBwb3J0ZWQgSmF2YVNjcmlwdCB0eXBlIChTdHJpbmcsIEJsb2IsIEFycmF5QnVmZmVyLCBldGMpID9cIikpfSkpfX0se1wiLi9iYXNlNjRcIjoxLFwiLi9leHRlcm5hbFwiOjYsXCIuL25vZGVqc1V0aWxzXCI6MTQsXCIuL3N1cHBvcnRcIjozMCxzZXRpbW1lZGlhdGU6NTR9XSwzMzpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUoXCIuL3JlYWRlci9yZWFkZXJGb3JcIiksaT1lKFwiLi91dGlsc1wiKSxvPWUoXCIuL3NpZ25hdHVyZVwiKSxhPWUoXCIuL3ppcEVudHJ5XCIpLHM9ZShcIi4vc3VwcG9ydFwiKTtmdW5jdGlvbiBjKGUpe3RoaXMuZmlsZXM9W10sdGhpcy5sb2FkT3B0aW9ucz1lfWMucHJvdG90eXBlPXtjaGVja1NpZ25hdHVyZTpmdW5jdGlvbihlKXtpZighdGhpcy5yZWFkZXIucmVhZEFuZENoZWNrU2lnbmF0dXJlKGUpKXt0aGlzLnJlYWRlci5pbmRleC09NDt2YXIgdD10aGlzLnJlYWRlci5yZWFkU3RyaW5nKDQpO3Rocm93IG5ldyBFcnJvcihcIkNvcnJ1cHRlZCB6aXAgb3IgYnVnOiB1bmV4cGVjdGVkIHNpZ25hdHVyZSAoXCIraS5wcmV0dHkodCkrXCIsIGV4cGVjdGVkIFwiK2kucHJldHR5KGUpK1wiKVwiKX19LGlzU2lnbmF0dXJlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5yZWFkZXIuaW5kZXg7dGhpcy5yZWFkZXIuc2V0SW5kZXgoZSk7dmFyIHI9dGhpcy5yZWFkZXIucmVhZFN0cmluZyg0KT09PXQ7cmV0dXJuIHRoaXMucmVhZGVyLnNldEluZGV4KG4pLHJ9LHJlYWRCbG9ja0VuZE9mQ2VudHJhbDpmdW5jdGlvbigpe3RoaXMuZGlza051bWJlcj10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuZGlza1dpdGhDZW50cmFsRGlyU3RhcnQ9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzT25UaGlzRGlzaz10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuY2VudHJhbERpclJlY29yZHM9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmNlbnRyYWxEaXJTaXplPXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5jZW50cmFsRGlyT2Zmc2V0PXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy56aXBDb21tZW50TGVuZ3RoPXRoaXMucmVhZGVyLnJlYWRJbnQoMik7dmFyIGU9dGhpcy5yZWFkZXIucmVhZERhdGEodGhpcy56aXBDb21tZW50TGVuZ3RoKSx0PXMudWludDhhcnJheT9cInVpbnQ4YXJyYXlcIjpcImFycmF5XCIsbj1pLnRyYW5zZm9ybVRvKHQsZSk7dGhpcy56aXBDb21tZW50PXRoaXMubG9hZE9wdGlvbnMuZGVjb2RlRmlsZU5hbWUobil9LHJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsOmZ1bmN0aW9uKCl7dGhpcy56aXA2NEVuZE9mQ2VudHJhbFNpemU9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLnJlYWRlci5za2lwKDQpLHRoaXMuZGlza051bWJlcj10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuZGlza1dpdGhDZW50cmFsRGlyU3RhcnQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzT25UaGlzRGlzaz10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuY2VudHJhbERpclJlY29yZHM9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmNlbnRyYWxEaXJTaXplPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5jZW50cmFsRGlyT2Zmc2V0PXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy56aXA2NEV4dGVuc2libGVEYXRhPXt9O2Zvcih2YXIgZSx0LG4scj10aGlzLnppcDY0RW5kT2ZDZW50cmFsU2l6ZS00NDswPHI7KWU9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0PXRoaXMucmVhZGVyLnJlYWRJbnQoNCksbj10aGlzLnJlYWRlci5yZWFkRGF0YSh0KSx0aGlzLnppcDY0RXh0ZW5zaWJsZURhdGFbZV09e2lkOmUsbGVuZ3RoOnQsdmFsdWU6bn19LHJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsTG9jYXRvcjpmdW5jdGlvbigpe2lmKHRoaXMuZGlza1dpdGhaaXA2NENlbnRyYWxEaXJTdGFydD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMucmVsYXRpdmVPZmZzZXRFbmRPZlppcDY0Q2VudHJhbERpcj10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuZGlza3NDb3VudD10aGlzLnJlYWRlci5yZWFkSW50KDQpLDE8dGhpcy5kaXNrc0NvdW50KXRocm93IG5ldyBFcnJvcihcIk11bHRpLXZvbHVtZXMgemlwIGFyZSBub3Qgc3VwcG9ydGVkXCIpfSxyZWFkTG9jYWxGaWxlczpmdW5jdGlvbigpe3ZhciBlLHQ7Zm9yKGU9MDtlPHRoaXMuZmlsZXMubGVuZ3RoO2UrKyl0PXRoaXMuZmlsZXNbZV0sdGhpcy5yZWFkZXIuc2V0SW5kZXgodC5sb2NhbEhlYWRlck9mZnNldCksdGhpcy5jaGVja1NpZ25hdHVyZShvLkxPQ0FMX0ZJTEVfSEVBREVSKSx0LnJlYWRMb2NhbFBhcnQodGhpcy5yZWFkZXIpLHQuaGFuZGxlVVRGOCgpLHQucHJvY2Vzc0F0dHJpYnV0ZXMoKX0scmVhZENlbnRyYWxEaXI6ZnVuY3Rpb24oKXt2YXIgZTtmb3IodGhpcy5yZWFkZXIuc2V0SW5kZXgodGhpcy5jZW50cmFsRGlyT2Zmc2V0KTt0aGlzLnJlYWRlci5yZWFkQW5kQ2hlY2tTaWduYXR1cmUoby5DRU5UUkFMX0ZJTEVfSEVBREVSKTspKGU9bmV3IGEoe3ppcDY0OnRoaXMuemlwNjR9LHRoaXMubG9hZE9wdGlvbnMpKS5yZWFkQ2VudHJhbFBhcnQodGhpcy5yZWFkZXIpLHRoaXMuZmlsZXMucHVzaChlKTtpZih0aGlzLmNlbnRyYWxEaXJSZWNvcmRzIT09dGhpcy5maWxlcy5sZW5ndGgmJjAhPT10aGlzLmNlbnRyYWxEaXJSZWNvcmRzJiYwPT09dGhpcy5maWxlcy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiQ29ycnVwdGVkIHppcCBvciBidWc6IGV4cGVjdGVkIFwiK3RoaXMuY2VudHJhbERpclJlY29yZHMrXCIgcmVjb3JkcyBpbiBjZW50cmFsIGRpciwgZ290IFwiK3RoaXMuZmlsZXMubGVuZ3RoKX0scmVhZEVuZE9mQ2VudHJhbDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucmVhZGVyLmxhc3RJbmRleE9mU2lnbmF0dXJlKG8uQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKTtpZihlPDApdGhyb3cgdGhpcy5pc1NpZ25hdHVyZSgwLG8uTE9DQUxfRklMRV9IRUFERVIpP25ldyBFcnJvcihcIkNvcnJ1cHRlZCB6aXA6IGNhbid0IGZpbmQgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5XCIpOm5ldyBFcnJvcihcIkNhbid0IGZpbmQgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5IDogaXMgdGhpcyBhIHppcCBmaWxlID8gSWYgaXQgaXMsIHNlZSBodHRwczovL3N0dWsuZ2l0aHViLmlvL2pzemlwL2RvY3VtZW50YXRpb24vaG93dG8vcmVhZF96aXAuaHRtbFwiKTt0aGlzLnJlYWRlci5zZXRJbmRleChlKTt2YXIgdD1lO2lmKHRoaXMuY2hlY2tTaWduYXR1cmUoby5DRU5UUkFMX0RJUkVDVE9SWV9FTkQpLHRoaXMucmVhZEJsb2NrRW5kT2ZDZW50cmFsKCksdGhpcy5kaXNrTnVtYmVyPT09aS5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PT09aS5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzT25UaGlzRGlzaz09PWkuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5jZW50cmFsRGlyUmVjb3Jkcz09PWkuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5jZW50cmFsRGlyU2l6ZT09PWkuTUFYX1ZBTFVFXzMyQklUU3x8dGhpcy5jZW50cmFsRGlyT2Zmc2V0PT09aS5NQVhfVkFMVUVfMzJCSVRTKXtpZih0aGlzLnppcDY0PSEwLChlPXRoaXMucmVhZGVyLmxhc3RJbmRleE9mU2lnbmF0dXJlKG8uWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUikpPDApdGhyb3cgbmV3IEVycm9yKFwiQ29ycnVwdGVkIHppcDogY2FuJ3QgZmluZCB0aGUgWklQNjQgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5IGxvY2F0b3JcIik7aWYodGhpcy5yZWFkZXIuc2V0SW5kZXgoZSksdGhpcy5jaGVja1NpZ25hdHVyZShvLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1IpLHRoaXMucmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWxMb2NhdG9yKCksIXRoaXMuaXNTaWduYXR1cmUodGhpcy5yZWxhdGl2ZU9mZnNldEVuZE9mWmlwNjRDZW50cmFsRGlyLG8uWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKSYmKHRoaXMucmVsYXRpdmVPZmZzZXRFbmRPZlppcDY0Q2VudHJhbERpcj10aGlzLnJlYWRlci5sYXN0SW5kZXhPZlNpZ25hdHVyZShvLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0VORCksdGhpcy5yZWxhdGl2ZU9mZnNldEVuZE9mWmlwNjRDZW50cmFsRGlyPDApKXRocm93IG5ldyBFcnJvcihcIkNvcnJ1cHRlZCB6aXA6IGNhbid0IGZpbmQgdGhlIFpJUDY0IGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeVwiKTt0aGlzLnJlYWRlci5zZXRJbmRleCh0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENlbnRyYWxEaXIpLHRoaXMuY2hlY2tTaWduYXR1cmUoby5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQpLHRoaXMucmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWwoKX12YXIgbj10aGlzLmNlbnRyYWxEaXJPZmZzZXQrdGhpcy5jZW50cmFsRGlyU2l6ZTt0aGlzLnppcDY0JiYobis9MjAsbis9MTIrdGhpcy56aXA2NEVuZE9mQ2VudHJhbFNpemUpO3ZhciByPXQtbjtpZigwPHIpdGhpcy5pc1NpZ25hdHVyZSh0LG8uQ0VOVFJBTF9GSUxFX0hFQURFUil8fCh0aGlzLnJlYWRlci56ZXJvPXIpO2Vsc2UgaWYocjwwKXRocm93IG5ldyBFcnJvcihcIkNvcnJ1cHRlZCB6aXA6IG1pc3NpbmcgXCIrTWF0aC5hYnMocikrXCIgYnl0ZXMuXCIpfSxwcmVwYXJlUmVhZGVyOmZ1bmN0aW9uKGUpe3RoaXMucmVhZGVyPXIoZSl9LGxvYWQ6ZnVuY3Rpb24oZSl7dGhpcy5wcmVwYXJlUmVhZGVyKGUpLHRoaXMucmVhZEVuZE9mQ2VudHJhbCgpLHRoaXMucmVhZENlbnRyYWxEaXIoKSx0aGlzLnJlYWRMb2NhbEZpbGVzKCl9fSx0LmV4cG9ydHM9Y30se1wiLi9yZWFkZXIvcmVhZGVyRm9yXCI6MjIsXCIuL3NpZ25hdHVyZVwiOjIzLFwiLi9zdXBwb3J0XCI6MzAsXCIuL3V0aWxzXCI6MzIsXCIuL3ppcEVudHJ5XCI6MzR9XSwzNDpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUoXCIuL3JlYWRlci9yZWFkZXJGb3JcIiksaT1lKFwiLi91dGlsc1wiKSxvPWUoXCIuL2NvbXByZXNzZWRPYmplY3RcIiksYT1lKFwiLi9jcmMzMlwiKSxzPWUoXCIuL3V0ZjhcIiksYz1lKFwiLi9jb21wcmVzc2lvbnNcIiksbD1lKFwiLi9zdXBwb3J0XCIpO2Z1bmN0aW9uIHUoZSx0KXt0aGlzLm9wdGlvbnM9ZSx0aGlzLmxvYWRPcHRpb25zPXR9dS5wcm90b3R5cGU9e2lzRW5jcnlwdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMuYml0RmxhZyl9LHVzZVVURjg6ZnVuY3Rpb24oKXtyZXR1cm4gMjA0OD09KDIwNDgmdGhpcy5iaXRGbGFnKX0scmVhZExvY2FsUGFydDpmdW5jdGlvbihlKXt2YXIgdCxuO2lmKGUuc2tpcCgyMiksdGhpcy5maWxlTmFtZUxlbmd0aD1lLnJlYWRJbnQoMiksbj1lLnJlYWRJbnQoMiksdGhpcy5maWxlTmFtZT1lLnJlYWREYXRhKHRoaXMuZmlsZU5hbWVMZW5ndGgpLGUuc2tpcChuKSwtMT09PXRoaXMuY29tcHJlc3NlZFNpemV8fC0xPT09dGhpcy51bmNvbXByZXNzZWRTaXplKXRocm93IG5ldyBFcnJvcihcIkJ1ZyBvciBjb3JydXB0ZWQgemlwIDogZGlkbid0IGdldCBlbm91Z2ggaW5mb3JtYXRpb24gZnJvbSB0aGUgY2VudHJhbCBkaXJlY3RvcnkgKGNvbXByZXNzZWRTaXplID09PSAtMSB8fCB1bmNvbXByZXNzZWRTaXplID09PSAtMSlcIik7aWYobnVsbD09PSh0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBjKWlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjLHQpJiZjW3RdLm1hZ2ljPT09ZSlyZXR1cm4gY1t0XTtyZXR1cm4gbnVsbH0odGhpcy5jb21wcmVzc2lvbk1ldGhvZCkpKXRocm93IG5ldyBFcnJvcihcIkNvcnJ1cHRlZCB6aXAgOiBjb21wcmVzc2lvbiBcIitpLnByZXR0eSh0aGlzLmNvbXByZXNzaW9uTWV0aG9kKStcIiB1bmtub3duIChpbm5lciBmaWxlIDogXCIraS50cmFuc2Zvcm1UbyhcInN0cmluZ1wiLHRoaXMuZmlsZU5hbWUpK1wiKVwiKTt0aGlzLmRlY29tcHJlc3NlZD1uZXcgbyh0aGlzLmNvbXByZXNzZWRTaXplLHRoaXMudW5jb21wcmVzc2VkU2l6ZSx0aGlzLmNyYzMyLHQsZS5yZWFkRGF0YSh0aGlzLmNvbXByZXNzZWRTaXplKSl9LHJlYWRDZW50cmFsUGFydDpmdW5jdGlvbihlKXt0aGlzLnZlcnNpb25NYWRlQnk9ZS5yZWFkSW50KDIpLGUuc2tpcCgyKSx0aGlzLmJpdEZsYWc9ZS5yZWFkSW50KDIpLHRoaXMuY29tcHJlc3Npb25NZXRob2Q9ZS5yZWFkU3RyaW5nKDIpLHRoaXMuZGF0ZT1lLnJlYWREYXRlKCksdGhpcy5jcmMzMj1lLnJlYWRJbnQoNCksdGhpcy5jb21wcmVzc2VkU2l6ZT1lLnJlYWRJbnQoNCksdGhpcy51bmNvbXByZXNzZWRTaXplPWUucmVhZEludCg0KTt2YXIgdD1lLnJlYWRJbnQoMik7aWYodGhpcy5leHRyYUZpZWxkc0xlbmd0aD1lLnJlYWRJbnQoMiksdGhpcy5maWxlQ29tbWVudExlbmd0aD1lLnJlYWRJbnQoMiksdGhpcy5kaXNrTnVtYmVyU3RhcnQ9ZS5yZWFkSW50KDIpLHRoaXMuaW50ZXJuYWxGaWxlQXR0cmlidXRlcz1lLnJlYWRJbnQoMiksdGhpcy5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzPWUucmVhZEludCg0KSx0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PWUucmVhZEludCg0KSx0aGlzLmlzRW5jcnlwdGVkKCkpdGhyb3cgbmV3IEVycm9yKFwiRW5jcnlwdGVkIHppcCBhcmUgbm90IHN1cHBvcnRlZFwiKTtlLnNraXAodCksdGhpcy5yZWFkRXh0cmFGaWVsZHMoZSksdGhpcy5wYXJzZVpJUDY0RXh0cmFGaWVsZChlKSx0aGlzLmZpbGVDb21tZW50PWUucmVhZERhdGEodGhpcy5maWxlQ29tbWVudExlbmd0aCl9LHByb2Nlc3NBdHRyaWJ1dGVzOmZ1bmN0aW9uKCl7dGhpcy51bml4UGVybWlzc2lvbnM9bnVsbCx0aGlzLmRvc1Blcm1pc3Npb25zPW51bGw7dmFyIGU9dGhpcy52ZXJzaW9uTWFkZUJ5Pj44O3RoaXMuZGlyPSEhKDE2JnRoaXMuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyksMD09ZSYmKHRoaXMuZG9zUGVybWlzc2lvbnM9NjMmdGhpcy5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzKSwzPT1lJiYodGhpcy51bml4UGVybWlzc2lvbnM9dGhpcy5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzPj4xNiY2NTUzNSksdGhpcy5kaXJ8fFwiL1wiIT09dGhpcy5maWxlTmFtZVN0ci5zbGljZSgtMSl8fCh0aGlzLmRpcj0hMCl9LHBhcnNlWklQNjRFeHRyYUZpZWxkOmZ1bmN0aW9uKCl7aWYodGhpcy5leHRyYUZpZWxkc1sxXSl7dmFyIGU9cih0aGlzLmV4dHJhRmllbGRzWzFdLnZhbHVlKTt0aGlzLnVuY29tcHJlc3NlZFNpemU9PT1pLk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLnVuY29tcHJlc3NlZFNpemU9ZS5yZWFkSW50KDgpKSx0aGlzLmNvbXByZXNzZWRTaXplPT09aS5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy5jb21wcmVzc2VkU2l6ZT1lLnJlYWRJbnQoOCkpLHRoaXMubG9jYWxIZWFkZXJPZmZzZXQ9PT1pLk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PWUucmVhZEludCg4KSksdGhpcy5kaXNrTnVtYmVyU3RhcnQ9PT1pLk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLmRpc2tOdW1iZXJTdGFydD1lLnJlYWRJbnQoNCkpfX0scmVhZEV4dHJhRmllbGRzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpPWUuaW5kZXgrdGhpcy5leHRyYUZpZWxkc0xlbmd0aDtmb3IodGhpcy5leHRyYUZpZWxkc3x8KHRoaXMuZXh0cmFGaWVsZHM9e30pO2UuaW5kZXgrNDxpOyl0PWUucmVhZEludCgyKSxuPWUucmVhZEludCgyKSxyPWUucmVhZERhdGEobiksdGhpcy5leHRyYUZpZWxkc1t0XT17aWQ6dCxsZW5ndGg6bix2YWx1ZTpyfTtlLnNldEluZGV4KGkpfSxoYW5kbGVVVEY4OmZ1bmN0aW9uKCl7dmFyIGU9bC51aW50OGFycmF5P1widWludDhhcnJheVwiOlwiYXJyYXlcIjtpZih0aGlzLnVzZVVURjgoKSl0aGlzLmZpbGVOYW1lU3RyPXMudXRmOGRlY29kZSh0aGlzLmZpbGVOYW1lKSx0aGlzLmZpbGVDb21tZW50U3RyPXMudXRmOGRlY29kZSh0aGlzLmZpbGVDb21tZW50KTtlbHNle3ZhciB0PXRoaXMuZmluZEV4dHJhRmllbGRVbmljb2RlUGF0aCgpO2lmKG51bGwhPT10KXRoaXMuZmlsZU5hbWVTdHI9dDtlbHNle3ZhciBuPWkudHJhbnNmb3JtVG8oZSx0aGlzLmZpbGVOYW1lKTt0aGlzLmZpbGVOYW1lU3RyPXRoaXMubG9hZE9wdGlvbnMuZGVjb2RlRmlsZU5hbWUobil9dmFyIHI9dGhpcy5maW5kRXh0cmFGaWVsZFVuaWNvZGVDb21tZW50KCk7aWYobnVsbCE9PXIpdGhpcy5maWxlQ29tbWVudFN0cj1yO2Vsc2V7dmFyIG89aS50cmFuc2Zvcm1UbyhlLHRoaXMuZmlsZUNvbW1lbnQpO3RoaXMuZmlsZUNvbW1lbnRTdHI9dGhpcy5sb2FkT3B0aW9ucy5kZWNvZGVGaWxlTmFtZShvKX19fSxmaW5kRXh0cmFGaWVsZFVuaWNvZGVQYXRoOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5leHRyYUZpZWxkc1syODc4OV07aWYoZSl7dmFyIHQ9cihlLnZhbHVlKTtyZXR1cm4gMSE9PXQucmVhZEludCgxKXx8YSh0aGlzLmZpbGVOYW1lKSE9PXQucmVhZEludCg0KT9udWxsOnMudXRmOGRlY29kZSh0LnJlYWREYXRhKGUubGVuZ3RoLTUpKX1yZXR1cm4gbnVsbH0sZmluZEV4dHJhRmllbGRVbmljb2RlQ29tbWVudDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZXh0cmFGaWVsZHNbMjU0NjFdO2lmKGUpe3ZhciB0PXIoZS52YWx1ZSk7cmV0dXJuIDEhPT10LnJlYWRJbnQoMSl8fGEodGhpcy5maWxlQ29tbWVudCkhPT10LnJlYWRJbnQoNCk/bnVsbDpzLnV0ZjhkZWNvZGUodC5yZWFkRGF0YShlLmxlbmd0aC01KSl9cmV0dXJuIG51bGx9fSx0LmV4cG9ydHM9dX0se1wiLi9jb21wcmVzc2VkT2JqZWN0XCI6MixcIi4vY29tcHJlc3Npb25zXCI6MyxcIi4vY3JjMzJcIjo0LFwiLi9yZWFkZXIvcmVhZGVyRm9yXCI6MjIsXCIuL3N1cHBvcnRcIjozMCxcIi4vdXRmOFwiOjMxLFwiLi91dGlsc1wiOjMyfV0sMzU6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCxuKXt0aGlzLm5hbWU9ZSx0aGlzLmRpcj1uLmRpcix0aGlzLmRhdGU9bi5kYXRlLHRoaXMuY29tbWVudD1uLmNvbW1lbnQsdGhpcy51bml4UGVybWlzc2lvbnM9bi51bml4UGVybWlzc2lvbnMsdGhpcy5kb3NQZXJtaXNzaW9ucz1uLmRvc1Blcm1pc3Npb25zLHRoaXMuX2RhdGE9dCx0aGlzLl9kYXRhQmluYXJ5PW4uYmluYXJ5LHRoaXMub3B0aW9ucz17Y29tcHJlc3Npb246bi5jb21wcmVzc2lvbixjb21wcmVzc2lvbk9wdGlvbnM6bi5jb21wcmVzc2lvbk9wdGlvbnN9fXZhciBpPWUoXCIuL3N0cmVhbS9TdHJlYW1IZWxwZXJcIiksbz1lKFwiLi9zdHJlYW0vRGF0YVdvcmtlclwiKSxhPWUoXCIuL3V0ZjhcIikscz1lKFwiLi9jb21wcmVzc2VkT2JqZWN0XCIpLGM9ZShcIi4vc3RyZWFtL0dlbmVyaWNXb3JrZXJcIik7ci5wcm90b3R5cGU9e2ludGVybmFsU3RyZWFtOmZ1bmN0aW9uKGUpe3ZhciB0PW51bGwsbj1cInN0cmluZ1wiO3RyeXtpZighZSl0aHJvdyBuZXcgRXJyb3IoXCJObyBvdXRwdXQgdHlwZSBzcGVjaWZpZWQuXCIpO3ZhciByPVwic3RyaW5nXCI9PT0obj1lLnRvTG93ZXJDYXNlKCkpfHxcInRleHRcIj09PW47XCJiaW5hcnlzdHJpbmdcIiE9PW4mJlwidGV4dFwiIT09bnx8KG49XCJzdHJpbmdcIiksdD10aGlzLl9kZWNvbXByZXNzV29ya2VyKCk7dmFyIG89IXRoaXMuX2RhdGFCaW5hcnk7byYmIXImJih0PXQucGlwZShuZXcgYS5VdGY4RW5jb2RlV29ya2VyKSksIW8mJnImJih0PXQucGlwZShuZXcgYS5VdGY4RGVjb2RlV29ya2VyKSl9Y2F0Y2goZSl7KHQ9bmV3IGMoXCJlcnJvclwiKSkuZXJyb3IoZSl9cmV0dXJuIG5ldyBpKHQsbixcIlwiKX0sYXN5bmM6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5pbnRlcm5hbFN0cmVhbShlKS5hY2N1bXVsYXRlKHQpfSxub2RlU3RyZWFtOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuaW50ZXJuYWxTdHJlYW0oZXx8XCJub2RlYnVmZmVyXCIpLnRvTm9kZWpzU3RyZWFtKHQpfSxfY29tcHJlc3NXb3JrZXI6ZnVuY3Rpb24oZSx0KXtpZih0aGlzLl9kYXRhIGluc3RhbmNlb2YgcyYmdGhpcy5fZGF0YS5jb21wcmVzc2lvbi5tYWdpYz09PWUubWFnaWMpcmV0dXJuIHRoaXMuX2RhdGEuZ2V0Q29tcHJlc3NlZFdvcmtlcigpO3ZhciBuPXRoaXMuX2RlY29tcHJlc3NXb3JrZXIoKTtyZXR1cm4gdGhpcy5fZGF0YUJpbmFyeXx8KG49bi5waXBlKG5ldyBhLlV0ZjhFbmNvZGVXb3JrZXIpKSxzLmNyZWF0ZVdvcmtlckZyb20obixlLHQpfSxfZGVjb21wcmVzc1dvcmtlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kYXRhIGluc3RhbmNlb2Ygcz90aGlzLl9kYXRhLmdldENvbnRlbnRXb3JrZXIoKTp0aGlzLl9kYXRhIGluc3RhbmNlb2YgYz90aGlzLl9kYXRhOm5ldyBvKHRoaXMuX2RhdGEpfX07Zm9yKHZhciBsPVtcImFzVGV4dFwiLFwiYXNCaW5hcnlcIixcImFzTm9kZUJ1ZmZlclwiLFwiYXNVaW50OEFycmF5XCIsXCJhc0FycmF5QnVmZmVyXCJdLHU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIG1ldGhvZCBoYXMgYmVlbiByZW1vdmVkIGluIEpTWmlwIDMuMCwgcGxlYXNlIGNoZWNrIHRoZSB1cGdyYWRlIGd1aWRlLlwiKX0sZD0wO2Q8bC5sZW5ndGg7ZCsrKXIucHJvdG90eXBlW2xbZF1dPXU7dC5leHBvcnRzPXJ9LHtcIi4vY29tcHJlc3NlZE9iamVjdFwiOjIsXCIuL3N0cmVhbS9EYXRhV29ya2VyXCI6MjcsXCIuL3N0cmVhbS9HZW5lcmljV29ya2VyXCI6MjgsXCIuL3N0cmVhbS9TdHJlYW1IZWxwZXJcIjoyOSxcIi4vdXRmOFwiOjMxfV0sMzY6W2Z1bmN0aW9uKGUsdCxyKXsoZnVuY3Rpb24oZSl7dmFyIG4scixpPWUuTXV0YXRpb25PYnNlcnZlcnx8ZS5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO2lmKGkpe3ZhciBvPTAsYT1uZXcgaSh1KSxzPWUuZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIik7YS5vYnNlcnZlKHMse2NoYXJhY3RlckRhdGE6ITB9KSxuPWZ1bmN0aW9uKCl7cy5kYXRhPW89KytvJTJ9fWVsc2UgaWYoZS5zZXRJbW1lZGlhdGV8fHZvaWQgMD09PWUuTWVzc2FnZUNoYW5uZWwpbj1cImRvY3VtZW50XCJpbiBlJiZcIm9ucmVhZHlzdGF0ZWNoYW5nZVwiaW4gZS5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpP2Z1bmN0aW9uKCl7dmFyIHQ9ZS5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO3Qub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7dSgpLHQub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpLHQ9bnVsbH0sZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQodCl9OmZ1bmN0aW9uKCl7c2V0VGltZW91dCh1LDApfTtlbHNle3ZhciBjPW5ldyBlLk1lc3NhZ2VDaGFubmVsO2MucG9ydDEub25tZXNzYWdlPXUsbj1mdW5jdGlvbigpe2MucG9ydDIucG9zdE1lc3NhZ2UoMCl9fXZhciBsPVtdO2Z1bmN0aW9uIHUoKXt2YXIgZSx0O3I9ITA7Zm9yKHZhciBuPWwubGVuZ3RoO247KXtmb3IodD1sLGw9W10sZT0tMTsrK2U8bjspdFtlXSgpO249bC5sZW5ndGh9cj0hMX10LmV4cG9ydHM9ZnVuY3Rpb24oZSl7MSE9PWwucHVzaChlKXx8cnx8bigpfX0pLmNhbGwodGhpcyx2b2lkIDAhPT1uLmc/bi5nOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7fV0sMzc6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1lKFwiaW1tZWRpYXRlXCIpO2Z1bmN0aW9uIGkoKXt9dmFyIG89e30sYT1bXCJSRUpFQ1RFRFwiXSxzPVtcIkZVTEZJTExFRFwiXSxjPVtcIlBFTkRJTkdcIl07ZnVuY3Rpb24gbChlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoXCJyZXNvbHZlciBtdXN0IGJlIGEgZnVuY3Rpb25cIik7dGhpcy5zdGF0ZT1jLHRoaXMucXVldWU9W10sdGhpcy5vdXRjb21lPXZvaWQgMCxlIT09aSYmcCh0aGlzLGUpfWZ1bmN0aW9uIHUoZSx0LG4pe3RoaXMucHJvbWlzZT1lLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJih0aGlzLm9uRnVsZmlsbGVkPXQsdGhpcy5jYWxsRnVsZmlsbGVkPXRoaXMub3RoZXJDYWxsRnVsZmlsbGVkKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBuJiYodGhpcy5vblJlamVjdGVkPW4sdGhpcy5jYWxsUmVqZWN0ZWQ9dGhpcy5vdGhlckNhbGxSZWplY3RlZCl9ZnVuY3Rpb24gZChlLHQsbil7cigoZnVuY3Rpb24oKXt2YXIgcjt0cnl7cj10KG4pfWNhdGNoKHIpe3JldHVybiBvLnJlamVjdChlLHIpfXI9PT1lP28ucmVqZWN0KGUsbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZXNvbHZlIHByb21pc2Ugd2l0aCBpdHNlbGZcIikpOm8ucmVzb2x2ZShlLHIpfSkpfWZ1bmN0aW9uIGYoZSl7dmFyIHQ9ZSYmZS50aGVuO2lmKGUmJihcIm9iamVjdFwiPT10eXBlb2YgZXx8XCJmdW5jdGlvblwiPT10eXBlb2YgZSkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHQpcmV0dXJuIGZ1bmN0aW9uKCl7dC5hcHBseShlLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIHAoZSx0KXt2YXIgbj0hMTtmdW5jdGlvbiByKHQpe258fChuPSEwLG8ucmVqZWN0KGUsdCkpfWZ1bmN0aW9uIGkodCl7bnx8KG49ITAsby5yZXNvbHZlKGUsdCkpfXZhciBhPW0oKGZ1bmN0aW9uKCl7dChpLHIpfSkpO1wiZXJyb3JcIj09PWEuc3RhdHVzJiZyKGEudmFsdWUpfWZ1bmN0aW9uIG0oZSx0KXt2YXIgbj17fTt0cnl7bi52YWx1ZT1lKHQpLG4uc3RhdHVzPVwic3VjY2Vzc1wifWNhdGNoKGUpe24uc3RhdHVzPVwiZXJyb3JcIixuLnZhbHVlPWV9cmV0dXJuIG59KHQuZXhwb3J0cz1sKS5wcm90b3R5cGUuZmluYWxseT1mdW5jdGlvbihlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXJldHVybiB0aGlzO3ZhciB0PXRoaXMuY29uc3RydWN0b3I7cmV0dXJuIHRoaXMudGhlbigoZnVuY3Rpb24obil7cmV0dXJuIHQucmVzb2x2ZShlKCkpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIG59KSl9KSwoZnVuY3Rpb24obil7cmV0dXJuIHQucmVzb2x2ZShlKCkpLnRoZW4oKGZ1bmN0aW9uKCl7dGhyb3cgbn0pKX0pKX0sbC5wcm90b3R5cGUuY2F0Y2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudGhlbihudWxsLGUpfSxsLnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmdGhpcy5zdGF0ZT09PXN8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJnRoaXMuc3RhdGU9PT1hKXJldHVybiB0aGlzO3ZhciBuPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGkpO3JldHVybiB0aGlzLnN0YXRlIT09Yz9kKG4sdGhpcy5zdGF0ZT09PXM/ZTp0LHRoaXMub3V0Y29tZSk6dGhpcy5xdWV1ZS5wdXNoKG5ldyB1KG4sZSx0KSksbn0sdS5wcm90b3R5cGUuY2FsbEZ1bGZpbGxlZD1mdW5jdGlvbihlKXtvLnJlc29sdmUodGhpcy5wcm9taXNlLGUpfSx1LnByb3RvdHlwZS5vdGhlckNhbGxGdWxmaWxsZWQ9ZnVuY3Rpb24oZSl7ZCh0aGlzLnByb21pc2UsdGhpcy5vbkZ1bGZpbGxlZCxlKX0sdS5wcm90b3R5cGUuY2FsbFJlamVjdGVkPWZ1bmN0aW9uKGUpe28ucmVqZWN0KHRoaXMucHJvbWlzZSxlKX0sdS5wcm90b3R5cGUub3RoZXJDYWxsUmVqZWN0ZWQ9ZnVuY3Rpb24oZSl7ZCh0aGlzLnByb21pc2UsdGhpcy5vblJlamVjdGVkLGUpfSxvLnJlc29sdmU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1tKGYsdCk7aWYoXCJlcnJvclwiPT09bi5zdGF0dXMpcmV0dXJuIG8ucmVqZWN0KGUsbi52YWx1ZSk7dmFyIHI9bi52YWx1ZTtpZihyKXAoZSxyKTtlbHNle2Uuc3RhdGU9cyxlLm91dGNvbWU9dDtmb3IodmFyIGk9LTEsYT1lLnF1ZXVlLmxlbmd0aDsrK2k8YTspZS5xdWV1ZVtpXS5jYWxsRnVsZmlsbGVkKHQpfXJldHVybiBlfSxvLnJlamVjdD1mdW5jdGlvbihlLHQpe2Uuc3RhdGU9YSxlLm91dGNvbWU9dDtmb3IodmFyIG49LTEscj1lLnF1ZXVlLmxlbmd0aDsrK248cjspZS5xdWV1ZVtuXS5jYWxsUmVqZWN0ZWQodCk7cmV0dXJuIGV9LGwucmVzb2x2ZT1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHRoaXM/ZTpvLnJlc29sdmUobmV3IHRoaXMoaSksZSl9LGwucmVqZWN0PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyB0aGlzKGkpO3JldHVybiBvLnJlamVjdCh0LGUpfSxsLmFsbD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKFwiW29iamVjdCBBcnJheV1cIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSlyZXR1cm4gdGhpcy5yZWplY3QobmV3IFR5cGVFcnJvcihcIm11c3QgYmUgYW4gYXJyYXlcIikpO3ZhciBuPWUubGVuZ3RoLHI9ITE7aWYoIW4pcmV0dXJuIHRoaXMucmVzb2x2ZShbXSk7Zm9yKHZhciBhPW5ldyBBcnJheShuKSxzPTAsYz0tMSxsPW5ldyB0aGlzKGkpOysrYzxuOyl1KGVbY10sYyk7cmV0dXJuIGw7ZnVuY3Rpb24gdShlLGkpe3QucmVzb2x2ZShlKS50aGVuKChmdW5jdGlvbihlKXthW2ldPWUsKytzIT09bnx8cnx8KHI9ITAsby5yZXNvbHZlKGwsYSkpfSksKGZ1bmN0aW9uKGUpe3J8fChyPSEwLG8ucmVqZWN0KGwsZSkpfSkpfX0sbC5yYWNlPWZ1bmN0aW9uKGUpe2lmKFwiW29iamVjdCBBcnJheV1cIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSlyZXR1cm4gdGhpcy5yZWplY3QobmV3IFR5cGVFcnJvcihcIm11c3QgYmUgYW4gYXJyYXlcIikpO3ZhciB0PWUubGVuZ3RoLG49ITE7aWYoIXQpcmV0dXJuIHRoaXMucmVzb2x2ZShbXSk7Zm9yKHZhciByLGE9LTEscz1uZXcgdGhpcyhpKTsrK2E8dDspcj1lW2FdLHRoaXMucmVzb2x2ZShyKS50aGVuKChmdW5jdGlvbihlKXtufHwobj0hMCxvLnJlc29sdmUocyxlKSl9KSwoZnVuY3Rpb24oZSl7bnx8KG49ITAsby5yZWplY3QocyxlKSl9KSk7cmV0dXJuIHN9fSx7aW1tZWRpYXRlOjM2fV0sMzg6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj17fTsoMCxlKFwiLi9saWIvdXRpbHMvY29tbW9uXCIpLmFzc2lnbikocixlKFwiLi9saWIvZGVmbGF0ZVwiKSxlKFwiLi9saWIvaW5mbGF0ZVwiKSxlKFwiLi9saWIvemxpYi9jb25zdGFudHNcIikpLHQuZXhwb3J0cz1yfSx7XCIuL2xpYi9kZWZsYXRlXCI6MzksXCIuL2xpYi9pbmZsYXRlXCI6NDAsXCIuL2xpYi91dGlscy9jb21tb25cIjo0MSxcIi4vbGliL3psaWIvY29uc3RhbnRzXCI6NDR9XSwzOTpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUoXCIuL3psaWIvZGVmbGF0ZVwiKSxpPWUoXCIuL3V0aWxzL2NvbW1vblwiKSxvPWUoXCIuL3V0aWxzL3N0cmluZ3NcIiksYT1lKFwiLi96bGliL21lc3NhZ2VzXCIpLHM9ZShcIi4vemxpYi96c3RyZWFtXCIpLGM9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxsPTAsdT0tMSxkPTAsZj04O2Z1bmN0aW9uIHAoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgcCkpcmV0dXJuIG5ldyBwKGUpO3RoaXMub3B0aW9ucz1pLmFzc2lnbih7bGV2ZWw6dSxtZXRob2Q6ZixjaHVua1NpemU6MTYzODQsd2luZG93Qml0czoxNSxtZW1MZXZlbDo4LHN0cmF0ZWd5OmQsdG86XCJcIn0sZXx8e30pO3ZhciB0PXRoaXMub3B0aW9uczt0LnJhdyYmMDx0LndpbmRvd0JpdHM/dC53aW5kb3dCaXRzPS10LndpbmRvd0JpdHM6dC5nemlwJiYwPHQud2luZG93Qml0cyYmdC53aW5kb3dCaXRzPDE2JiYodC53aW5kb3dCaXRzKz0xNiksdGhpcy5lcnI9MCx0aGlzLm1zZz1cIlwiLHRoaXMuZW5kZWQ9ITEsdGhpcy5jaHVua3M9W10sdGhpcy5zdHJtPW5ldyBzLHRoaXMuc3RybS5hdmFpbF9vdXQ9MDt2YXIgbj1yLmRlZmxhdGVJbml0Mih0aGlzLnN0cm0sdC5sZXZlbCx0Lm1ldGhvZCx0LndpbmRvd0JpdHMsdC5tZW1MZXZlbCx0LnN0cmF0ZWd5KTtpZihuIT09bCl0aHJvdyBuZXcgRXJyb3IoYVtuXSk7aWYodC5oZWFkZXImJnIuZGVmbGF0ZVNldEhlYWRlcih0aGlzLnN0cm0sdC5oZWFkZXIpLHQuZGljdGlvbmFyeSl7dmFyIG07aWYobT1cInN0cmluZ1wiPT10eXBlb2YgdC5kaWN0aW9uYXJ5P28uc3RyaW5nMmJ1Zih0LmRpY3Rpb25hcnkpOlwiW29iamVjdCBBcnJheUJ1ZmZlcl1cIj09PWMuY2FsbCh0LmRpY3Rpb25hcnkpP25ldyBVaW50OEFycmF5KHQuZGljdGlvbmFyeSk6dC5kaWN0aW9uYXJ5LChuPXIuZGVmbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLG0pKSE9PWwpdGhyb3cgbmV3IEVycm9yKGFbbl0pO3RoaXMuX2RpY3Rfc2V0PSEwfX1mdW5jdGlvbiBtKGUsdCl7dmFyIG49bmV3IHAodCk7aWYobi5wdXNoKGUsITApLG4uZXJyKXRocm93IG4ubXNnfHxhW24uZXJyXTtyZXR1cm4gbi5yZXN1bHR9cC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe3ZhciBuLGEscz10aGlzLnN0cm0sdT10aGlzLm9wdGlvbnMuY2h1bmtTaXplO2lmKHRoaXMuZW5kZWQpcmV0dXJuITE7YT10PT09fn50P3Q6ITA9PT10PzQ6MCxcInN0cmluZ1wiPT10eXBlb2YgZT9zLmlucHV0PW8uc3RyaW5nMmJ1ZihlKTpcIltvYmplY3QgQXJyYXlCdWZmZXJdXCI9PT1jLmNhbGwoZSk/cy5pbnB1dD1uZXcgVWludDhBcnJheShlKTpzLmlucHV0PWUscy5uZXh0X2luPTAscy5hdmFpbF9pbj1zLmlucHV0Lmxlbmd0aDtkb3tpZigwPT09cy5hdmFpbF9vdXQmJihzLm91dHB1dD1uZXcgaS5CdWY4KHUpLHMubmV4dF9vdXQ9MCxzLmF2YWlsX291dD11KSwxIT09KG49ci5kZWZsYXRlKHMsYSkpJiZuIT09bClyZXR1cm4gdGhpcy5vbkVuZChuKSwhKHRoaXMuZW5kZWQ9ITApOzAhPT1zLmF2YWlsX291dCYmKDAhPT1zLmF2YWlsX2lufHw0IT09YSYmMiE9PWEpfHwoXCJzdHJpbmdcIj09PXRoaXMub3B0aW9ucy50bz90aGlzLm9uRGF0YShvLmJ1ZjJiaW5zdHJpbmcoaS5zaHJpbmtCdWYocy5vdXRwdXQscy5uZXh0X291dCkpKTp0aGlzLm9uRGF0YShpLnNocmlua0J1ZihzLm91dHB1dCxzLm5leHRfb3V0KSkpfXdoaWxlKCgwPHMuYXZhaWxfaW58fDA9PT1zLmF2YWlsX291dCkmJjEhPT1uKTtyZXR1cm4gND09PWE/KG49ci5kZWZsYXRlRW5kKHRoaXMuc3RybSksdGhpcy5vbkVuZChuKSx0aGlzLmVuZGVkPSEwLG49PT1sKToyIT09YXx8KHRoaXMub25FbmQobCksIShzLmF2YWlsX291dD0wKSl9LHAucHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbihlKXt0aGlzLmNodW5rcy5wdXNoKGUpfSxwLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbihlKXtlPT09bCYmKFwic3RyaW5nXCI9PT10aGlzLm9wdGlvbnMudG8/dGhpcy5yZXN1bHQ9dGhpcy5jaHVua3Muam9pbihcIlwiKTp0aGlzLnJlc3VsdD1pLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVycj1lLHRoaXMubXNnPXRoaXMuc3RybS5tc2d9LG4uRGVmbGF0ZT1wLG4uZGVmbGF0ZT1tLG4uZGVmbGF0ZVJhdz1mdW5jdGlvbihlLHQpe3JldHVybih0PXR8fHt9KS5yYXc9ITAsbShlLHQpfSxuLmd6aXA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4odD10fHx7fSkuZ3ppcD0hMCxtKGUsdCl9fSx7XCIuL3V0aWxzL2NvbW1vblwiOjQxLFwiLi91dGlscy9zdHJpbmdzXCI6NDIsXCIuL3psaWIvZGVmbGF0ZVwiOjQ2LFwiLi96bGliL21lc3NhZ2VzXCI6NTEsXCIuL3psaWIvenN0cmVhbVwiOjUzfV0sNDA6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1lKFwiLi96bGliL2luZmxhdGVcIiksaT1lKFwiLi91dGlscy9jb21tb25cIiksbz1lKFwiLi91dGlscy9zdHJpbmdzXCIpLGE9ZShcIi4vemxpYi9jb25zdGFudHNcIikscz1lKFwiLi96bGliL21lc3NhZ2VzXCIpLGM9ZShcIi4vemxpYi96c3RyZWFtXCIpLGw9ZShcIi4vemxpYi9nemhlYWRlclwiKSx1PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gZChlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBkKSlyZXR1cm4gbmV3IGQoZSk7dGhpcy5vcHRpb25zPWkuYXNzaWduKHtjaHVua1NpemU6MTYzODQsd2luZG93Qml0czowLHRvOlwiXCJ9LGV8fHt9KTt2YXIgdD10aGlzLm9wdGlvbnM7dC5yYXcmJjA8PXQud2luZG93Qml0cyYmdC53aW5kb3dCaXRzPDE2JiYodC53aW5kb3dCaXRzPS10LndpbmRvd0JpdHMsMD09PXQud2luZG93Qml0cyYmKHQud2luZG93Qml0cz0tMTUpKSwhKDA8PXQud2luZG93Qml0cyYmdC53aW5kb3dCaXRzPDE2KXx8ZSYmZS53aW5kb3dCaXRzfHwodC53aW5kb3dCaXRzKz0zMiksMTU8dC53aW5kb3dCaXRzJiZ0LndpbmRvd0JpdHM8NDgmJjA9PSgxNSZ0LndpbmRvd0JpdHMpJiYodC53aW5kb3dCaXRzfD0xNSksdGhpcy5lcnI9MCx0aGlzLm1zZz1cIlwiLHRoaXMuZW5kZWQ9ITEsdGhpcy5jaHVua3M9W10sdGhpcy5zdHJtPW5ldyBjLHRoaXMuc3RybS5hdmFpbF9vdXQ9MDt2YXIgbj1yLmluZmxhdGVJbml0Mih0aGlzLnN0cm0sdC53aW5kb3dCaXRzKTtpZihuIT09YS5aX09LKXRocm93IG5ldyBFcnJvcihzW25dKTt0aGlzLmhlYWRlcj1uZXcgbCxyLmluZmxhdGVHZXRIZWFkZXIodGhpcy5zdHJtLHRoaXMuaGVhZGVyKX1mdW5jdGlvbiBmKGUsdCl7dmFyIG49bmV3IGQodCk7aWYobi5wdXNoKGUsITApLG4uZXJyKXRocm93IG4ubXNnfHxzW24uZXJyXTtyZXR1cm4gbi5yZXN1bHR9ZC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe3ZhciBuLHMsYyxsLGQsZixwPXRoaXMuc3RybSxtPXRoaXMub3B0aW9ucy5jaHVua1NpemUsaD10aGlzLm9wdGlvbnMuZGljdGlvbmFyeSx2PSExO2lmKHRoaXMuZW5kZWQpcmV0dXJuITE7cz10PT09fn50P3Q6ITA9PT10P2EuWl9GSU5JU0g6YS5aX05PX0ZMVVNILFwic3RyaW5nXCI9PXR5cGVvZiBlP3AuaW5wdXQ9by5iaW5zdHJpbmcyYnVmKGUpOlwiW29iamVjdCBBcnJheUJ1ZmZlcl1cIj09PXUuY2FsbChlKT9wLmlucHV0PW5ldyBVaW50OEFycmF5KGUpOnAuaW5wdXQ9ZSxwLm5leHRfaW49MCxwLmF2YWlsX2luPXAuaW5wdXQubGVuZ3RoO2Rve2lmKDA9PT1wLmF2YWlsX291dCYmKHAub3V0cHV0PW5ldyBpLkJ1ZjgobSkscC5uZXh0X291dD0wLHAuYXZhaWxfb3V0PW0pLChuPXIuaW5mbGF0ZShwLGEuWl9OT19GTFVTSCkpPT09YS5aX05FRURfRElDVCYmaCYmKGY9XCJzdHJpbmdcIj09dHlwZW9mIGg/by5zdHJpbmcyYnVmKGgpOlwiW29iamVjdCBBcnJheUJ1ZmZlcl1cIj09PXUuY2FsbChoKT9uZXcgVWludDhBcnJheShoKTpoLG49ci5pbmZsYXRlU2V0RGljdGlvbmFyeSh0aGlzLnN0cm0sZikpLG49PT1hLlpfQlVGX0VSUk9SJiYhMD09PXYmJihuPWEuWl9PSyx2PSExKSxuIT09YS5aX1NUUkVBTV9FTkQmJm4hPT1hLlpfT0spcmV0dXJuIHRoaXMub25FbmQobiksISh0aGlzLmVuZGVkPSEwKTtwLm5leHRfb3V0JiYoMCE9PXAuYXZhaWxfb3V0JiZuIT09YS5aX1NUUkVBTV9FTkQmJigwIT09cC5hdmFpbF9pbnx8cyE9PWEuWl9GSU5JU0gmJnMhPT1hLlpfU1lOQ19GTFVTSCl8fChcInN0cmluZ1wiPT09dGhpcy5vcHRpb25zLnRvPyhjPW8udXRmOGJvcmRlcihwLm91dHB1dCxwLm5leHRfb3V0KSxsPXAubmV4dF9vdXQtYyxkPW8uYnVmMnN0cmluZyhwLm91dHB1dCxjKSxwLm5leHRfb3V0PWwscC5hdmFpbF9vdXQ9bS1sLGwmJmkuYXJyYXlTZXQocC5vdXRwdXQscC5vdXRwdXQsYyxsLDApLHRoaXMub25EYXRhKGQpKTp0aGlzLm9uRGF0YShpLnNocmlua0J1ZihwLm91dHB1dCxwLm5leHRfb3V0KSkpKSwwPT09cC5hdmFpbF9pbiYmMD09PXAuYXZhaWxfb3V0JiYodj0hMCl9d2hpbGUoKDA8cC5hdmFpbF9pbnx8MD09PXAuYXZhaWxfb3V0KSYmbiE9PWEuWl9TVFJFQU1fRU5EKTtyZXR1cm4gbj09PWEuWl9TVFJFQU1fRU5EJiYocz1hLlpfRklOSVNIKSxzPT09YS5aX0ZJTklTSD8obj1yLmluZmxhdGVFbmQodGhpcy5zdHJtKSx0aGlzLm9uRW5kKG4pLHRoaXMuZW5kZWQ9ITAsbj09PWEuWl9PSyk6cyE9PWEuWl9TWU5DX0ZMVVNIfHwodGhpcy5vbkVuZChhLlpfT0spLCEocC5hdmFpbF9vdXQ9MCkpfSxkLnByb3RvdHlwZS5vbkRhdGE9ZnVuY3Rpb24oZSl7dGhpcy5jaHVua3MucHVzaChlKX0sZC5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24oZSl7ZT09PWEuWl9PSyYmKFwic3RyaW5nXCI9PT10aGlzLm9wdGlvbnMudG8/dGhpcy5yZXN1bHQ9dGhpcy5jaHVua3Muam9pbihcIlwiKTp0aGlzLnJlc3VsdD1pLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVycj1lLHRoaXMubXNnPXRoaXMuc3RybS5tc2d9LG4uSW5mbGF0ZT1kLG4uaW5mbGF0ZT1mLG4uaW5mbGF0ZVJhdz1mdW5jdGlvbihlLHQpe3JldHVybih0PXR8fHt9KS5yYXc9ITAsZihlLHQpfSxuLnVuZ3ppcD1mfSx7XCIuL3V0aWxzL2NvbW1vblwiOjQxLFwiLi91dGlscy9zdHJpbmdzXCI6NDIsXCIuL3psaWIvY29uc3RhbnRzXCI6NDQsXCIuL3psaWIvZ3poZWFkZXJcIjo0NyxcIi4vemxpYi9pbmZsYXRlXCI6NDksXCIuL3psaWIvbWVzc2FnZXNcIjo1MSxcIi4vemxpYi96c3RyZWFtXCI6NTN9XSw0MTpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50OEFycmF5JiZcInVuZGVmaW5lZFwiIT10eXBlb2YgVWludDE2QXJyYXkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBJbnQzMkFycmF5O24uYXNzaWduPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7dC5sZW5ndGg7KXt2YXIgbj10LnNoaWZ0KCk7aWYobil7aWYoXCJvYmplY3RcIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcihuK1wibXVzdCBiZSBub24tb2JqZWN0XCIpO2Zvcih2YXIgciBpbiBuKW4uaGFzT3duUHJvcGVydHkocikmJihlW3JdPW5bcl0pfX1yZXR1cm4gZX0sbi5zaHJpbmtCdWY9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5sZW5ndGg9PT10P2U6ZS5zdWJhcnJheT9lLnN1YmFycmF5KDAsdCk6KGUubGVuZ3RoPXQsZSl9O3ZhciBpPXthcnJheVNldDpmdW5jdGlvbihlLHQsbixyLGkpe2lmKHQuc3ViYXJyYXkmJmUuc3ViYXJyYXkpZS5zZXQodC5zdWJhcnJheShuLG4rciksaSk7ZWxzZSBmb3IodmFyIG89MDtvPHI7bysrKWVbaStvXT10W24rb119LGZsYXR0ZW5DaHVua3M6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxhO2Zvcih0PXI9MCxuPWUubGVuZ3RoO3Q8bjt0Kyspcis9ZVt0XS5sZW5ndGg7Zm9yKGE9bmV3IFVpbnQ4QXJyYXkociksdD1pPTAsbj1lLmxlbmd0aDt0PG47dCsrKW89ZVt0XSxhLnNldChvLGkpLGkrPW8ubGVuZ3RoO3JldHVybiBhfX0sbz17YXJyYXlTZXQ6ZnVuY3Rpb24oZSx0LG4scixpKXtmb3IodmFyIG89MDtvPHI7bysrKWVbaStvXT10W24rb119LGZsYXR0ZW5DaHVua3M6ZnVuY3Rpb24oZSl7cmV0dXJuW10uY29uY2F0LmFwcGx5KFtdLGUpfX07bi5zZXRUeXBlZD1mdW5jdGlvbihlKXtlPyhuLkJ1Zjg9VWludDhBcnJheSxuLkJ1ZjE2PVVpbnQxNkFycmF5LG4uQnVmMzI9SW50MzJBcnJheSxuLmFzc2lnbihuLGkpKToobi5CdWY4PUFycmF5LG4uQnVmMTY9QXJyYXksbi5CdWYzMj1BcnJheSxuLmFzc2lnbihuLG8pKX0sbi5zZXRUeXBlZChyKX0se31dLDQyOltmdW5jdGlvbihlLHQsbil7dmFyIHI9ZShcIi4vY29tbW9uXCIpLGk9ITAsbz0hMDt0cnl7U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLFswXSl9Y2F0Y2goZSl7aT0hMX10cnl7U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG5ldyBVaW50OEFycmF5KDEpKX1jYXRjaChlKXtvPSExfWZvcih2YXIgYT1uZXcgci5CdWY4KDI1Nikscz0wO3M8MjU2O3MrKylhW3NdPTI1Mjw9cz82OjI0ODw9cz81OjI0MDw9cz80OjIyNDw9cz8zOjE5Mjw9cz8yOjE7ZnVuY3Rpb24gYyhlLHQpe2lmKHQ8NjU1MzcmJihlLnN1YmFycmF5JiZvfHwhZS5zdWJhcnJheSYmaSkpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxyLnNocmlua0J1ZihlLHQpKTtmb3IodmFyIG49XCJcIixhPTA7YTx0O2ErKyluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbYV0pO3JldHVybiBufWFbMjU0XT1hWzI1NF09MSxuLnN0cmluZzJidWY9ZnVuY3Rpb24oZSl7dmFyIHQsbixpLG8sYSxzPWUubGVuZ3RoLGM9MDtmb3Iobz0wO288cztvKyspNTUyOTY9PSg2NDUxMiYobj1lLmNoYXJDb2RlQXQobykpKSYmbysxPHMmJjU2MzIwPT0oNjQ1MTImKGk9ZS5jaGFyQ29kZUF0KG8rMSkpKSYmKG49NjU1MzYrKG4tNTUyOTY8PDEwKSsoaS01NjMyMCksbysrKSxjKz1uPDEyOD8xOm48MjA0OD8yOm48NjU1MzY/Mzo0O2Zvcih0PW5ldyByLkJ1ZjgoYyksbz1hPTA7YTxjO28rKyk1NTI5Nj09KDY0NTEyJihuPWUuY2hhckNvZGVBdChvKSkpJiZvKzE8cyYmNTYzMjA9PSg2NDUxMiYoaT1lLmNoYXJDb2RlQXQobysxKSkpJiYobj02NTUzNisobi01NTI5Njw8MTApKyhpLTU2MzIwKSxvKyspLG48MTI4P3RbYSsrXT1uOihuPDIwNDg/dFthKytdPTE5MnxuPj4+Njoobjw2NTUzNj90W2ErK109MjI0fG4+Pj4xMjoodFthKytdPTI0MHxuPj4+MTgsdFthKytdPTEyOHxuPj4+MTImNjMpLHRbYSsrXT0xMjh8bj4+PjYmNjMpLHRbYSsrXT0xMjh8NjMmbik7cmV0dXJuIHR9LG4uYnVmMmJpbnN0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gYyhlLGUubGVuZ3RoKX0sbi5iaW5zdHJpbmcyYnVmPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1uZXcgci5CdWY4KGUubGVuZ3RoKSxuPTAsaT10Lmxlbmd0aDtuPGk7bisrKXRbbl09ZS5jaGFyQ29kZUF0KG4pO3JldHVybiB0fSxuLmJ1ZjJzdHJpbmc9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxzPXR8fGUubGVuZ3RoLGw9bmV3IEFycmF5KDIqcyk7Zm9yKG49cj0wO248czspaWYoKGk9ZVtuKytdKTwxMjgpbFtyKytdPWk7ZWxzZSBpZig0PChvPWFbaV0pKWxbcisrXT02NTUzMyxuKz1vLTE7ZWxzZXtmb3IoaSY9Mj09PW8/MzE6Mz09PW8/MTU6NzsxPG8mJm48czspaT1pPDw2fDYzJmVbbisrXSxvLS07MTxvP2xbcisrXT02NTUzMzppPDY1NTM2P2xbcisrXT1pOihpLT02NTUzNixsW3IrK109NTUyOTZ8aT4+MTAmMTAyMyxsW3IrK109NTYzMjB8MTAyMyZpKX1yZXR1cm4gYyhsLHIpfSxuLnV0Zjhib3JkZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbjtmb3IoKHQ9dHx8ZS5sZW5ndGgpPmUubGVuZ3RoJiYodD1lLmxlbmd0aCksbj10LTE7MDw9biYmMTI4PT0oMTkyJmVbbl0pOyluLS07cmV0dXJuIG48MHx8MD09PW4/dDpuK2FbZVtuXV0+dD9uOnR9fSx7XCIuL2NvbW1vblwiOjQxfV0sNDM6W2Z1bmN0aW9uKGUsdCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4scil7Zm9yKHZhciBpPTY1NTM1JmV8MCxvPWU+Pj4xNiY2NTUzNXwwLGE9MDswIT09bjspe2ZvcihuLT1hPTJlMzxuPzJlMzpuO289bysoaT1pK3RbcisrXXwwKXwwLC0tYTspO2klPTY1NTIxLG8lPTY1NTIxfXJldHVybiBpfG88PDE2fDB9fSx7fV0sNDQ6W2Z1bmN0aW9uKGUsdCxuKXt0LmV4cG9ydHM9e1pfTk9fRkxVU0g6MCxaX1BBUlRJQUxfRkxVU0g6MSxaX1NZTkNfRkxVU0g6MixaX0ZVTExfRkxVU0g6MyxaX0ZJTklTSDo0LFpfQkxPQ0s6NSxaX1RSRUVTOjYsWl9PSzowLFpfU1RSRUFNX0VORDoxLFpfTkVFRF9ESUNUOjIsWl9FUlJOTzotMSxaX1NUUkVBTV9FUlJPUjotMixaX0RBVEFfRVJST1I6LTMsWl9CVUZfRVJST1I6LTUsWl9OT19DT01QUkVTU0lPTjowLFpfQkVTVF9TUEVFRDoxLFpfQkVTVF9DT01QUkVTU0lPTjo5LFpfREVGQVVMVF9DT01QUkVTU0lPTjotMSxaX0ZJTFRFUkVEOjEsWl9IVUZGTUFOX09OTFk6MixaX1JMRTozLFpfRklYRUQ6NCxaX0RFRkFVTFRfU1RSQVRFR1k6MCxaX0JJTkFSWTowLFpfVEVYVDoxLFpfVU5LTk9XTjoyLFpfREVGTEFURUQ6OH19LHt9XSw0NTpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPWZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9W10sbj0wO248MjU2O24rKyl7ZT1uO2Zvcih2YXIgcj0wO3I8ODtyKyspZT0xJmU/Mzk4ODI5MjM4NF5lPj4+MTplPj4+MTt0W25dPWV9cmV0dXJuIHR9KCk7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLGkpe3ZhciBvPXIsYT1pK247ZV49LTE7Zm9yKHZhciBzPWk7czxhO3MrKyllPWU+Pj44Xm9bMjU1JihlXnRbc10pXTtyZXR1cm4tMV5lfX0se31dLDQ2OltmdW5jdGlvbihlLHQsbil7dmFyIHIsaT1lKFwiLi4vdXRpbHMvY29tbW9uXCIpLG89ZShcIi4vdHJlZXNcIiksYT1lKFwiLi9hZGxlcjMyXCIpLHM9ZShcIi4vY3JjMzJcIiksYz1lKFwiLi9tZXNzYWdlc1wiKSxsPTAsdT0wLGQ9LTIsZj0yLHA9OCxtPTI4NixoPTMwLHY9MTksZz0yKm0rMSx5PTE1LEU9MyxfPTI1OCxJPV8rRSsxLFM9NDIsYj0xMTM7ZnVuY3Rpb24gVChlLHQpe3JldHVybiBlLm1zZz1jW3RdLHR9ZnVuY3Rpb24gQyhlKXtyZXR1cm4oZTw8MSktKDQ8ZT85OjApfWZ1bmN0aW9uIEEoZSl7Zm9yKHZhciB0PWUubGVuZ3RoOzA8PS0tdDspZVt0XT0wfWZ1bmN0aW9uIFIoZSl7dmFyIHQ9ZS5zdGF0ZSxuPXQucGVuZGluZztuPmUuYXZhaWxfb3V0JiYobj1lLmF2YWlsX291dCksMCE9PW4mJihpLmFycmF5U2V0KGUub3V0cHV0LHQucGVuZGluZ19idWYsdC5wZW5kaW5nX291dCxuLGUubmV4dF9vdXQpLGUubmV4dF9vdXQrPW4sdC5wZW5kaW5nX291dCs9bixlLnRvdGFsX291dCs9bixlLmF2YWlsX291dC09bix0LnBlbmRpbmctPW4sMD09PXQucGVuZGluZyYmKHQucGVuZGluZ19vdXQ9MCkpfWZ1bmN0aW9uIGsoZSx0KXtvLl90cl9mbHVzaF9ibG9jayhlLDA8PWUuYmxvY2tfc3RhcnQ/ZS5ibG9ja19zdGFydDotMSxlLnN0cnN0YXJ0LWUuYmxvY2tfc3RhcnQsdCksZS5ibG9ja19zdGFydD1lLnN0cnN0YXJ0LFIoZS5zdHJtKX1mdW5jdGlvbiBPKGUsdCl7ZS5wZW5kaW5nX2J1ZltlLnBlbmRpbmcrK109dH1mdW5jdGlvbiBOKGUsdCl7ZS5wZW5kaW5nX2J1ZltlLnBlbmRpbmcrK109dD4+PjgmMjU1LGUucGVuZGluZ19idWZbZS5wZW5kaW5nKytdPTI1NSZ0fWZ1bmN0aW9uIHcoZSx0KXt2YXIgbixyLGk9ZS5tYXhfY2hhaW5fbGVuZ3RoLG89ZS5zdHJzdGFydCxhPWUucHJldl9sZW5ndGgscz1lLm5pY2VfbWF0Y2gsYz1lLnN0cnN0YXJ0PmUud19zaXplLUk/ZS5zdHJzdGFydC0oZS53X3NpemUtSSk6MCxsPWUud2luZG93LHU9ZS53X21hc2ssZD1lLnByZXYsZj1lLnN0cnN0YXJ0K18scD1sW28rYS0xXSxtPWxbbythXTtlLnByZXZfbGVuZ3RoPj1lLmdvb2RfbWF0Y2gmJihpPj49Mikscz5lLmxvb2thaGVhZCYmKHM9ZS5sb29rYWhlYWQpO2Rve2lmKGxbKG49dCkrYV09PT1tJiZsW24rYS0xXT09PXAmJmxbbl09PT1sW29dJiZsWysrbl09PT1sW28rMV0pe28rPTIsbisrO2Rve313aGlsZShsWysrb109PT1sWysrbl0mJmxbKytvXT09PWxbKytuXSYmbFsrK29dPT09bFsrK25dJiZsWysrb109PT1sWysrbl0mJmxbKytvXT09PWxbKytuXSYmbFsrK29dPT09bFsrK25dJiZsWysrb109PT1sWysrbl0mJmxbKytvXT09PWxbKytuXSYmbzxmKTtpZihyPV8tKGYtbyksbz1mLV8sYTxyKXtpZihlLm1hdGNoX3N0YXJ0PXQsczw9KGE9cikpYnJlYWs7cD1sW28rYS0xXSxtPWxbbythXX19fXdoaWxlKCh0PWRbdCZ1XSk+YyYmMCE9LS1pKTtyZXR1cm4gYTw9ZS5sb29rYWhlYWQ/YTplLmxvb2thaGVhZH1mdW5jdGlvbiBEKGUpe3ZhciB0LG4scixvLGMsbCx1LGQsZixwLG09ZS53X3NpemU7ZG97aWYobz1lLndpbmRvd19zaXplLWUubG9va2FoZWFkLWUuc3Ryc3RhcnQsZS5zdHJzdGFydD49bSsobS1JKSl7Zm9yKGkuYXJyYXlTZXQoZS53aW5kb3csZS53aW5kb3csbSxtLDApLGUubWF0Y2hfc3RhcnQtPW0sZS5zdHJzdGFydC09bSxlLmJsb2NrX3N0YXJ0LT1tLHQ9bj1lLmhhc2hfc2l6ZTtyPWUuaGVhZFstLXRdLGUuaGVhZFt0XT1tPD1yP3ItbTowLC0tbjspO2Zvcih0PW49bTtyPWUucHJldlstLXRdLGUucHJldlt0XT1tPD1yP3ItbTowLC0tbjspO28rPW19aWYoMD09PWUuc3RybS5hdmFpbF9pbilicmVhaztpZihsPWUuc3RybSx1PWUud2luZG93LGQ9ZS5zdHJzdGFydCtlLmxvb2thaGVhZCxwPXZvaWQgMCwoZj1vKTwocD1sLmF2YWlsX2luKSYmKHA9Ziksbj0wPT09cD8wOihsLmF2YWlsX2luLT1wLGkuYXJyYXlTZXQodSxsLmlucHV0LGwubmV4dF9pbixwLGQpLDE9PT1sLnN0YXRlLndyYXA/bC5hZGxlcj1hKGwuYWRsZXIsdSxwLGQpOjI9PT1sLnN0YXRlLndyYXAmJihsLmFkbGVyPXMobC5hZGxlcix1LHAsZCkpLGwubmV4dF9pbis9cCxsLnRvdGFsX2luKz1wLHApLGUubG9va2FoZWFkKz1uLGUubG9va2FoZWFkK2UuaW5zZXJ0Pj1FKWZvcihjPWUuc3Ryc3RhcnQtZS5pbnNlcnQsZS5pbnNfaD1lLndpbmRvd1tjXSxlLmluc19oPShlLmluc19oPDxlLmhhc2hfc2hpZnReZS53aW5kb3dbYysxXSkmZS5oYXNoX21hc2s7ZS5pbnNlcnQmJihlLmluc19oPShlLmluc19oPDxlLmhhc2hfc2hpZnReZS53aW5kb3dbYytFLTFdKSZlLmhhc2hfbWFzayxlLnByZXZbYyZlLndfbWFza109ZS5oZWFkW2UuaW5zX2hdLGUuaGVhZFtlLmluc19oXT1jLGMrKyxlLmluc2VydC0tLCEoZS5sb29rYWhlYWQrZS5pbnNlcnQ8RSkpOyk7fXdoaWxlKGUubG9va2FoZWFkPEkmJjAhPT1lLnN0cm0uYXZhaWxfaW4pfWZ1bmN0aW9uIFAoZSx0KXtmb3IodmFyIG4scjs7KXtpZihlLmxvb2thaGVhZDxJKXtpZihEKGUpLGUubG9va2FoZWFkPEkmJnQ9PT1sKXJldHVybiAxO2lmKDA9PT1lLmxvb2thaGVhZClicmVha31pZihuPTAsZS5sb29rYWhlYWQ+PUUmJihlLmluc19oPShlLmluc19oPDxlLmhhc2hfc2hpZnReZS53aW5kb3dbZS5zdHJzdGFydCtFLTFdKSZlLmhhc2hfbWFzayxuPWUucHJldltlLnN0cnN0YXJ0JmUud19tYXNrXT1lLmhlYWRbZS5pbnNfaF0sZS5oZWFkW2UuaW5zX2hdPWUuc3Ryc3RhcnQpLDAhPT1uJiZlLnN0cnN0YXJ0LW48PWUud19zaXplLUkmJihlLm1hdGNoX2xlbmd0aD13KGUsbikpLGUubWF0Y2hfbGVuZ3RoPj1FKWlmKHI9by5fdHJfdGFsbHkoZSxlLnN0cnN0YXJ0LWUubWF0Y2hfc3RhcnQsZS5tYXRjaF9sZW5ndGgtRSksZS5sb29rYWhlYWQtPWUubWF0Y2hfbGVuZ3RoLGUubWF0Y2hfbGVuZ3RoPD1lLm1heF9sYXp5X21hdGNoJiZlLmxvb2thaGVhZD49RSl7Zm9yKGUubWF0Y2hfbGVuZ3RoLS07ZS5zdHJzdGFydCsrLGUuaW5zX2g9KGUuaW5zX2g8PGUuaGFzaF9zaGlmdF5lLndpbmRvd1tlLnN0cnN0YXJ0K0UtMV0pJmUuaGFzaF9tYXNrLG49ZS5wcmV2W2Uuc3Ryc3RhcnQmZS53X21hc2tdPWUuaGVhZFtlLmluc19oXSxlLmhlYWRbZS5pbnNfaF09ZS5zdHJzdGFydCwwIT0tLWUubWF0Y2hfbGVuZ3RoOyk7ZS5zdHJzdGFydCsrfWVsc2UgZS5zdHJzdGFydCs9ZS5tYXRjaF9sZW5ndGgsZS5tYXRjaF9sZW5ndGg9MCxlLmluc19oPWUud2luZG93W2Uuc3Ryc3RhcnRdLGUuaW5zX2g9KGUuaW5zX2g8PGUuaGFzaF9zaGlmdF5lLndpbmRvd1tlLnN0cnN0YXJ0KzFdKSZlLmhhc2hfbWFzaztlbHNlIHI9by5fdHJfdGFsbHkoZSwwLGUud2luZG93W2Uuc3Ryc3RhcnRdKSxlLmxvb2thaGVhZC0tLGUuc3Ryc3RhcnQrKztpZihyJiYoayhlLCExKSwwPT09ZS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9cmV0dXJuIGUuaW5zZXJ0PWUuc3Ryc3RhcnQ8RS0xP2Uuc3Ryc3RhcnQ6RS0xLDQ9PT10PyhrKGUsITApLDA9PT1lLnN0cm0uYXZhaWxfb3V0PzM6NCk6ZS5sYXN0X2xpdCYmKGsoZSwhMSksMD09PWUuc3RybS5hdmFpbF9vdXQpPzE6Mn1mdW5jdGlvbiBNKGUsdCl7Zm9yKHZhciBuLHIsaTs7KXtpZihlLmxvb2thaGVhZDxJKXtpZihEKGUpLGUubG9va2FoZWFkPEkmJnQ9PT1sKXJldHVybiAxO2lmKDA9PT1lLmxvb2thaGVhZClicmVha31pZihuPTAsZS5sb29rYWhlYWQ+PUUmJihlLmluc19oPShlLmluc19oPDxlLmhhc2hfc2hpZnReZS53aW5kb3dbZS5zdHJzdGFydCtFLTFdKSZlLmhhc2hfbWFzayxuPWUucHJldltlLnN0cnN0YXJ0JmUud19tYXNrXT1lLmhlYWRbZS5pbnNfaF0sZS5oZWFkW2UuaW5zX2hdPWUuc3Ryc3RhcnQpLGUucHJldl9sZW5ndGg9ZS5tYXRjaF9sZW5ndGgsZS5wcmV2X21hdGNoPWUubWF0Y2hfc3RhcnQsZS5tYXRjaF9sZW5ndGg9RS0xLDAhPT1uJiZlLnByZXZfbGVuZ3RoPGUubWF4X2xhenlfbWF0Y2gmJmUuc3Ryc3RhcnQtbjw9ZS53X3NpemUtSSYmKGUubWF0Y2hfbGVuZ3RoPXcoZSxuKSxlLm1hdGNoX2xlbmd0aDw9NSYmKDE9PT1lLnN0cmF0ZWd5fHxlLm1hdGNoX2xlbmd0aD09PUUmJjQwOTY8ZS5zdHJzdGFydC1lLm1hdGNoX3N0YXJ0KSYmKGUubWF0Y2hfbGVuZ3RoPUUtMSkpLGUucHJldl9sZW5ndGg+PUUmJmUubWF0Y2hfbGVuZ3RoPD1lLnByZXZfbGVuZ3RoKXtmb3IoaT1lLnN0cnN0YXJ0K2UubG9va2FoZWFkLUUscj1vLl90cl90YWxseShlLGUuc3Ryc3RhcnQtMS1lLnByZXZfbWF0Y2gsZS5wcmV2X2xlbmd0aC1FKSxlLmxvb2thaGVhZC09ZS5wcmV2X2xlbmd0aC0xLGUucHJldl9sZW5ndGgtPTI7KytlLnN0cnN0YXJ0PD1pJiYoZS5pbnNfaD0oZS5pbnNfaDw8ZS5oYXNoX3NoaWZ0XmUud2luZG93W2Uuc3Ryc3RhcnQrRS0xXSkmZS5oYXNoX21hc2ssbj1lLnByZXZbZS5zdHJzdGFydCZlLndfbWFza109ZS5oZWFkW2UuaW5zX2hdLGUuaGVhZFtlLmluc19oXT1lLnN0cnN0YXJ0KSwwIT0tLWUucHJldl9sZW5ndGg7KTtpZihlLm1hdGNoX2F2YWlsYWJsZT0wLGUubWF0Y2hfbGVuZ3RoPUUtMSxlLnN0cnN0YXJ0KyssciYmKGsoZSwhMSksMD09PWUuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfWVsc2UgaWYoZS5tYXRjaF9hdmFpbGFibGUpe2lmKChyPW8uX3RyX3RhbGx5KGUsMCxlLndpbmRvd1tlLnN0cnN0YXJ0LTFdKSkmJmsoZSwhMSksZS5zdHJzdGFydCsrLGUubG9va2FoZWFkLS0sMD09PWUuc3RybS5hdmFpbF9vdXQpcmV0dXJuIDF9ZWxzZSBlLm1hdGNoX2F2YWlsYWJsZT0xLGUuc3Ryc3RhcnQrKyxlLmxvb2thaGVhZC0tfXJldHVybiBlLm1hdGNoX2F2YWlsYWJsZSYmKHI9by5fdHJfdGFsbHkoZSwwLGUud2luZG93W2Uuc3Ryc3RhcnQtMV0pLGUubWF0Y2hfYXZhaWxhYmxlPTApLGUuaW5zZXJ0PWUuc3Ryc3RhcnQ8RS0xP2Uuc3Ryc3RhcnQ6RS0xLDQ9PT10PyhrKGUsITApLDA9PT1lLnN0cm0uYXZhaWxfb3V0PzM6NCk6ZS5sYXN0X2xpdCYmKGsoZSwhMSksMD09PWUuc3RybS5hdmFpbF9vdXQpPzE6Mn1mdW5jdGlvbiBMKGUsdCxuLHIsaSl7dGhpcy5nb29kX2xlbmd0aD1lLHRoaXMubWF4X2xhenk9dCx0aGlzLm5pY2VfbGVuZ3RoPW4sdGhpcy5tYXhfY2hhaW49cix0aGlzLmZ1bmM9aX1mdW5jdGlvbiBVKCl7dGhpcy5zdHJtPW51bGwsdGhpcy5zdGF0dXM9MCx0aGlzLnBlbmRpbmdfYnVmPW51bGwsdGhpcy5wZW5kaW5nX2J1Zl9zaXplPTAsdGhpcy5wZW5kaW5nX291dD0wLHRoaXMucGVuZGluZz0wLHRoaXMud3JhcD0wLHRoaXMuZ3poZWFkPW51bGwsdGhpcy5nemluZGV4PTAsdGhpcy5tZXRob2Q9cCx0aGlzLmxhc3RfZmx1c2g9LTEsdGhpcy53X3NpemU9MCx0aGlzLndfYml0cz0wLHRoaXMud19tYXNrPTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLndpbmRvd19zaXplPTAsdGhpcy5wcmV2PW51bGwsdGhpcy5oZWFkPW51bGwsdGhpcy5pbnNfaD0wLHRoaXMuaGFzaF9zaXplPTAsdGhpcy5oYXNoX2JpdHM9MCx0aGlzLmhhc2hfbWFzaz0wLHRoaXMuaGFzaF9zaGlmdD0wLHRoaXMuYmxvY2tfc3RhcnQ9MCx0aGlzLm1hdGNoX2xlbmd0aD0wLHRoaXMucHJldl9tYXRjaD0wLHRoaXMubWF0Y2hfYXZhaWxhYmxlPTAsdGhpcy5zdHJzdGFydD0wLHRoaXMubWF0Y2hfc3RhcnQ9MCx0aGlzLmxvb2thaGVhZD0wLHRoaXMucHJldl9sZW5ndGg9MCx0aGlzLm1heF9jaGFpbl9sZW5ndGg9MCx0aGlzLm1heF9sYXp5X21hdGNoPTAsdGhpcy5sZXZlbD0wLHRoaXMuc3RyYXRlZ3k9MCx0aGlzLmdvb2RfbWF0Y2g9MCx0aGlzLm5pY2VfbWF0Y2g9MCx0aGlzLmR5bl9sdHJlZT1uZXcgaS5CdWYxNigyKmcpLHRoaXMuZHluX2R0cmVlPW5ldyBpLkJ1ZjE2KDIqKDIqaCsxKSksdGhpcy5ibF90cmVlPW5ldyBpLkJ1ZjE2KDIqKDIqdisxKSksQSh0aGlzLmR5bl9sdHJlZSksQSh0aGlzLmR5bl9kdHJlZSksQSh0aGlzLmJsX3RyZWUpLHRoaXMubF9kZXNjPW51bGwsdGhpcy5kX2Rlc2M9bnVsbCx0aGlzLmJsX2Rlc2M9bnVsbCx0aGlzLmJsX2NvdW50PW5ldyBpLkJ1ZjE2KHkrMSksdGhpcy5oZWFwPW5ldyBpLkJ1ZjE2KDIqbSsxKSxBKHRoaXMuaGVhcCksdGhpcy5oZWFwX2xlbj0wLHRoaXMuaGVhcF9tYXg9MCx0aGlzLmRlcHRoPW5ldyBpLkJ1ZjE2KDIqbSsxKSxBKHRoaXMuZGVwdGgpLHRoaXMubF9idWY9MCx0aGlzLmxpdF9idWZzaXplPTAsdGhpcy5sYXN0X2xpdD0wLHRoaXMuZF9idWY9MCx0aGlzLm9wdF9sZW49MCx0aGlzLnN0YXRpY19sZW49MCx0aGlzLm1hdGNoZXM9MCx0aGlzLmluc2VydD0wLHRoaXMuYmlfYnVmPTAsdGhpcy5iaV92YWxpZD0wfWZ1bmN0aW9uIHgoZSl7dmFyIHQ7cmV0dXJuIGUmJmUuc3RhdGU/KGUudG90YWxfaW49ZS50b3RhbF9vdXQ9MCxlLmRhdGFfdHlwZT1mLCh0PWUuc3RhdGUpLnBlbmRpbmc9MCx0LnBlbmRpbmdfb3V0PTAsdC53cmFwPDAmJih0LndyYXA9LXQud3JhcCksdC5zdGF0dXM9dC53cmFwP1M6YixlLmFkbGVyPTI9PT10LndyYXA/MDoxLHQubGFzdF9mbHVzaD1sLG8uX3RyX2luaXQodCksdSk6VChlLGQpfWZ1bmN0aW9uIEYoZSl7dmFyIHQ9eChlKTtyZXR1cm4gdD09PXUmJmZ1bmN0aW9uKGUpe2Uud2luZG93X3NpemU9MiplLndfc2l6ZSxBKGUuaGVhZCksZS5tYXhfbGF6eV9tYXRjaD1yW2UubGV2ZWxdLm1heF9sYXp5LGUuZ29vZF9tYXRjaD1yW2UubGV2ZWxdLmdvb2RfbGVuZ3RoLGUubmljZV9tYXRjaD1yW2UubGV2ZWxdLm5pY2VfbGVuZ3RoLGUubWF4X2NoYWluX2xlbmd0aD1yW2UubGV2ZWxdLm1heF9jaGFpbixlLnN0cnN0YXJ0PTAsZS5ibG9ja19zdGFydD0wLGUubG9va2FoZWFkPTAsZS5pbnNlcnQ9MCxlLm1hdGNoX2xlbmd0aD1lLnByZXZfbGVuZ3RoPUUtMSxlLm1hdGNoX2F2YWlsYWJsZT0wLGUuaW5zX2g9MH0oZS5zdGF0ZSksdH1mdW5jdGlvbiBCKGUsdCxuLHIsbyxhKXtpZighZSlyZXR1cm4gZDt2YXIgcz0xO2lmKC0xPT09dCYmKHQ9NikscjwwPyhzPTAscj0tcik6MTU8ciYmKHM9MixyLT0xNiksbzwxfHw5PG98fG4hPT1wfHxyPDh8fDE1PHJ8fHQ8MHx8OTx0fHxhPDB8fDQ8YSlyZXR1cm4gVChlLGQpOzg9PT1yJiYocj05KTt2YXIgYz1uZXcgVTtyZXR1cm4oZS5zdGF0ZT1jKS5zdHJtPWUsYy53cmFwPXMsYy5nemhlYWQ9bnVsbCxjLndfYml0cz1yLGMud19zaXplPTE8PGMud19iaXRzLGMud19tYXNrPWMud19zaXplLTEsYy5oYXNoX2JpdHM9bys3LGMuaGFzaF9zaXplPTE8PGMuaGFzaF9iaXRzLGMuaGFzaF9tYXNrPWMuaGFzaF9zaXplLTEsYy5oYXNoX3NoaWZ0PX5+KChjLmhhc2hfYml0cytFLTEpL0UpLGMud2luZG93PW5ldyBpLkJ1ZjgoMipjLndfc2l6ZSksYy5oZWFkPW5ldyBpLkJ1ZjE2KGMuaGFzaF9zaXplKSxjLnByZXY9bmV3IGkuQnVmMTYoYy53X3NpemUpLGMubGl0X2J1ZnNpemU9MTw8bys2LGMucGVuZGluZ19idWZfc2l6ZT00KmMubGl0X2J1ZnNpemUsYy5wZW5kaW5nX2J1Zj1uZXcgaS5CdWY4KGMucGVuZGluZ19idWZfc2l6ZSksYy5kX2J1Zj0xKmMubGl0X2J1ZnNpemUsYy5sX2J1Zj0zKmMubGl0X2J1ZnNpemUsYy5sZXZlbD10LGMuc3RyYXRlZ3k9YSxjLm1ldGhvZD1uLEYoZSl9cj1bbmV3IEwoMCwwLDAsMCwoZnVuY3Rpb24oZSx0KXt2YXIgbj02NTUzNTtmb3Iobj5lLnBlbmRpbmdfYnVmX3NpemUtNSYmKG49ZS5wZW5kaW5nX2J1Zl9zaXplLTUpOzspe2lmKGUubG9va2FoZWFkPD0xKXtpZihEKGUpLDA9PT1lLmxvb2thaGVhZCYmdD09PWwpcmV0dXJuIDE7aWYoMD09PWUubG9va2FoZWFkKWJyZWFrfWUuc3Ryc3RhcnQrPWUubG9va2FoZWFkLGUubG9va2FoZWFkPTA7dmFyIHI9ZS5ibG9ja19zdGFydCtuO2lmKCgwPT09ZS5zdHJzdGFydHx8ZS5zdHJzdGFydD49cikmJihlLmxvb2thaGVhZD1lLnN0cnN0YXJ0LXIsZS5zdHJzdGFydD1yLGsoZSwhMSksMD09PWUuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxO2lmKGUuc3Ryc3RhcnQtZS5ibG9ja19zdGFydD49ZS53X3NpemUtSSYmKGsoZSwhMSksMD09PWUuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBlLmluc2VydD0wLDQ9PT10PyhrKGUsITApLDA9PT1lLnN0cm0uYXZhaWxfb3V0PzM6NCk6KGUuc3Ryc3RhcnQ+ZS5ibG9ja19zdGFydCYmKGsoZSwhMSksZS5zdHJtLmF2YWlsX291dCksMSl9KSksbmV3IEwoNCw0LDgsNCxQKSxuZXcgTCg0LDUsMTYsOCxQKSxuZXcgTCg0LDYsMzIsMzIsUCksbmV3IEwoNCw0LDE2LDE2LE0pLG5ldyBMKDgsMTYsMzIsMzIsTSksbmV3IEwoOCwxNiwxMjgsMTI4LE0pLG5ldyBMKDgsMzIsMTI4LDI1NixNKSxuZXcgTCgzMiwxMjgsMjU4LDEwMjQsTSksbmV3IEwoMzIsMjU4LDI1OCw0MDk2LE0pXSxuLmRlZmxhdGVJbml0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEIoZSx0LHAsMTUsOCwwKX0sbi5kZWZsYXRlSW5pdDI9QixuLmRlZmxhdGVSZXNldD1GLG4uZGVmbGF0ZVJlc2V0S2VlcD14LG4uZGVmbGF0ZVNldEhlYWRlcj1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLnN0YXRlPzIhPT1lLnN0YXRlLndyYXA/ZDooZS5zdGF0ZS5nemhlYWQ9dCx1KTpkfSxuLmRlZmxhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbixpLGEsYztpZighZXx8IWUuc3RhdGV8fDU8dHx8dDwwKXJldHVybiBlP1QoZSxkKTpkO2lmKGk9ZS5zdGF0ZSwhZS5vdXRwdXR8fCFlLmlucHV0JiYwIT09ZS5hdmFpbF9pbnx8NjY2PT09aS5zdGF0dXMmJjQhPT10KXJldHVybiBUKGUsMD09PWUuYXZhaWxfb3V0Py01OmQpO2lmKGkuc3RybT1lLG49aS5sYXN0X2ZsdXNoLGkubGFzdF9mbHVzaD10LGkuc3RhdHVzPT09UylpZigyPT09aS53cmFwKWUuYWRsZXI9MCxPKGksMzEpLE8oaSwxMzkpLE8oaSw4KSxpLmd6aGVhZD8oTyhpLChpLmd6aGVhZC50ZXh0PzE6MCkrKGkuZ3poZWFkLmhjcmM/MjowKSsoaS5nemhlYWQuZXh0cmE/NDowKSsoaS5nemhlYWQubmFtZT84OjApKyhpLmd6aGVhZC5jb21tZW50PzE2OjApKSxPKGksMjU1JmkuZ3poZWFkLnRpbWUpLE8oaSxpLmd6aGVhZC50aW1lPj44JjI1NSksTyhpLGkuZ3poZWFkLnRpbWU+PjE2JjI1NSksTyhpLGkuZ3poZWFkLnRpbWU+PjI0JjI1NSksTyhpLDk9PT1pLmxldmVsPzI6Mjw9aS5zdHJhdGVneXx8aS5sZXZlbDwyPzQ6MCksTyhpLDI1NSZpLmd6aGVhZC5vcyksaS5nemhlYWQuZXh0cmEmJmkuZ3poZWFkLmV4dHJhLmxlbmd0aCYmKE8oaSwyNTUmaS5nemhlYWQuZXh0cmEubGVuZ3RoKSxPKGksaS5nemhlYWQuZXh0cmEubGVuZ3RoPj44JjI1NSkpLGkuZ3poZWFkLmhjcmMmJihlLmFkbGVyPXMoZS5hZGxlcixpLnBlbmRpbmdfYnVmLGkucGVuZGluZywwKSksaS5nemluZGV4PTAsaS5zdGF0dXM9NjkpOihPKGksMCksTyhpLDApLE8oaSwwKSxPKGksMCksTyhpLDApLE8oaSw5PT09aS5sZXZlbD8yOjI8PWkuc3RyYXRlZ3l8fGkubGV2ZWw8Mj80OjApLE8oaSwzKSxpLnN0YXR1cz1iKTtlbHNle3ZhciBmPXArKGkud19iaXRzLTg8PDQpPDw4O2Z8PSgyPD1pLnN0cmF0ZWd5fHxpLmxldmVsPDI/MDppLmxldmVsPDY/MTo2PT09aS5sZXZlbD8yOjMpPDw2LDAhPT1pLnN0cnN0YXJ0JiYoZnw9MzIpLGYrPTMxLWYlMzEsaS5zdGF0dXM9YixOKGksZiksMCE9PWkuc3Ryc3RhcnQmJihOKGksZS5hZGxlcj4+PjE2KSxOKGksNjU1MzUmZS5hZGxlcikpLGUuYWRsZXI9MX1pZig2OT09PWkuc3RhdHVzKWlmKGkuZ3poZWFkLmV4dHJhKXtmb3IoYT1pLnBlbmRpbmc7aS5nemluZGV4PCg2NTUzNSZpLmd6aGVhZC5leHRyYS5sZW5ndGgpJiYoaS5wZW5kaW5nIT09aS5wZW5kaW5nX2J1Zl9zaXplfHwoaS5nemhlYWQuaGNyYyYmaS5wZW5kaW5nPmEmJihlLmFkbGVyPXMoZS5hZGxlcixpLnBlbmRpbmdfYnVmLGkucGVuZGluZy1hLGEpKSxSKGUpLGE9aS5wZW5kaW5nLGkucGVuZGluZyE9PWkucGVuZGluZ19idWZfc2l6ZSkpOylPKGksMjU1JmkuZ3poZWFkLmV4dHJhW2kuZ3ppbmRleF0pLGkuZ3ppbmRleCsrO2kuZ3poZWFkLmhjcmMmJmkucGVuZGluZz5hJiYoZS5hZGxlcj1zKGUuYWRsZXIsaS5wZW5kaW5nX2J1ZixpLnBlbmRpbmctYSxhKSksaS5nemluZGV4PT09aS5nemhlYWQuZXh0cmEubGVuZ3RoJiYoaS5nemluZGV4PTAsaS5zdGF0dXM9NzMpfWVsc2UgaS5zdGF0dXM9NzM7aWYoNzM9PT1pLnN0YXR1cylpZihpLmd6aGVhZC5uYW1lKXthPWkucGVuZGluZztkb3tpZihpLnBlbmRpbmc9PT1pLnBlbmRpbmdfYnVmX3NpemUmJihpLmd6aGVhZC5oY3JjJiZpLnBlbmRpbmc+YSYmKGUuYWRsZXI9cyhlLmFkbGVyLGkucGVuZGluZ19idWYsaS5wZW5kaW5nLWEsYSkpLFIoZSksYT1pLnBlbmRpbmcsaS5wZW5kaW5nPT09aS5wZW5kaW5nX2J1Zl9zaXplKSl7Yz0xO2JyZWFrfWM9aS5nemluZGV4PGkuZ3poZWFkLm5hbWUubGVuZ3RoPzI1NSZpLmd6aGVhZC5uYW1lLmNoYXJDb2RlQXQoaS5nemluZGV4KyspOjAsTyhpLGMpfXdoaWxlKDAhPT1jKTtpLmd6aGVhZC5oY3JjJiZpLnBlbmRpbmc+YSYmKGUuYWRsZXI9cyhlLmFkbGVyLGkucGVuZGluZ19idWYsaS5wZW5kaW5nLWEsYSkpLDA9PT1jJiYoaS5nemluZGV4PTAsaS5zdGF0dXM9OTEpfWVsc2UgaS5zdGF0dXM9OTE7aWYoOTE9PT1pLnN0YXR1cylpZihpLmd6aGVhZC5jb21tZW50KXthPWkucGVuZGluZztkb3tpZihpLnBlbmRpbmc9PT1pLnBlbmRpbmdfYnVmX3NpemUmJihpLmd6aGVhZC5oY3JjJiZpLnBlbmRpbmc+YSYmKGUuYWRsZXI9cyhlLmFkbGVyLGkucGVuZGluZ19idWYsaS5wZW5kaW5nLWEsYSkpLFIoZSksYT1pLnBlbmRpbmcsaS5wZW5kaW5nPT09aS5wZW5kaW5nX2J1Zl9zaXplKSl7Yz0xO2JyZWFrfWM9aS5nemluZGV4PGkuZ3poZWFkLmNvbW1lbnQubGVuZ3RoPzI1NSZpLmd6aGVhZC5jb21tZW50LmNoYXJDb2RlQXQoaS5nemluZGV4KyspOjAsTyhpLGMpfXdoaWxlKDAhPT1jKTtpLmd6aGVhZC5oY3JjJiZpLnBlbmRpbmc+YSYmKGUuYWRsZXI9cyhlLmFkbGVyLGkucGVuZGluZ19idWYsaS5wZW5kaW5nLWEsYSkpLDA9PT1jJiYoaS5zdGF0dXM9MTAzKX1lbHNlIGkuc3RhdHVzPTEwMztpZigxMDM9PT1pLnN0YXR1cyYmKGkuZ3poZWFkLmhjcmM/KGkucGVuZGluZysyPmkucGVuZGluZ19idWZfc2l6ZSYmUihlKSxpLnBlbmRpbmcrMjw9aS5wZW5kaW5nX2J1Zl9zaXplJiYoTyhpLDI1NSZlLmFkbGVyKSxPKGksZS5hZGxlcj4+OCYyNTUpLGUuYWRsZXI9MCxpLnN0YXR1cz1iKSk6aS5zdGF0dXM9YiksMCE9PWkucGVuZGluZyl7aWYoUihlKSwwPT09ZS5hdmFpbF9vdXQpcmV0dXJuIGkubGFzdF9mbHVzaD0tMSx1fWVsc2UgaWYoMD09PWUuYXZhaWxfaW4mJkModCk8PUMobikmJjQhPT10KXJldHVybiBUKGUsLTUpO2lmKDY2Nj09PWkuc3RhdHVzJiYwIT09ZS5hdmFpbF9pbilyZXR1cm4gVChlLC01KTtpZigwIT09ZS5hdmFpbF9pbnx8MCE9PWkubG9va2FoZWFkfHx0IT09bCYmNjY2IT09aS5zdGF0dXMpe3ZhciBtPTI9PT1pLnN0cmF0ZWd5P2Z1bmN0aW9uKGUsdCl7Zm9yKHZhciBuOzspe2lmKDA9PT1lLmxvb2thaGVhZCYmKEQoZSksMD09PWUubG9va2FoZWFkKSl7aWYodD09PWwpcmV0dXJuIDE7YnJlYWt9aWYoZS5tYXRjaF9sZW5ndGg9MCxuPW8uX3RyX3RhbGx5KGUsMCxlLndpbmRvd1tlLnN0cnN0YXJ0XSksZS5sb29rYWhlYWQtLSxlLnN0cnN0YXJ0KyssbiYmKGsoZSwhMSksMD09PWUuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBlLmluc2VydD0wLDQ9PT10PyhrKGUsITApLDA9PT1lLnN0cm0uYXZhaWxfb3V0PzM6NCk6ZS5sYXN0X2xpdCYmKGsoZSwhMSksMD09PWUuc3RybS5hdmFpbF9vdXQpPzE6Mn0oaSx0KTozPT09aS5zdHJhdGVneT9mdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyLGksYSxzPWUud2luZG93Ozspe2lmKGUubG9va2FoZWFkPD1fKXtpZihEKGUpLGUubG9va2FoZWFkPD1fJiZ0PT09bClyZXR1cm4gMTtpZigwPT09ZS5sb29rYWhlYWQpYnJlYWt9aWYoZS5tYXRjaF9sZW5ndGg9MCxlLmxvb2thaGVhZD49RSYmMDxlLnN0cnN0YXJ0JiYocj1zW2k9ZS5zdHJzdGFydC0xXSk9PT1zWysraV0mJnI9PT1zWysraV0mJnI9PT1zWysraV0pe2E9ZS5zdHJzdGFydCtfO2Rve313aGlsZShyPT09c1srK2ldJiZyPT09c1srK2ldJiZyPT09c1srK2ldJiZyPT09c1srK2ldJiZyPT09c1srK2ldJiZyPT09c1srK2ldJiZyPT09c1srK2ldJiZyPT09c1srK2ldJiZpPGEpO2UubWF0Y2hfbGVuZ3RoPV8tKGEtaSksZS5tYXRjaF9sZW5ndGg+ZS5sb29rYWhlYWQmJihlLm1hdGNoX2xlbmd0aD1lLmxvb2thaGVhZCl9aWYoZS5tYXRjaF9sZW5ndGg+PUU/KG49by5fdHJfdGFsbHkoZSwxLGUubWF0Y2hfbGVuZ3RoLUUpLGUubG9va2FoZWFkLT1lLm1hdGNoX2xlbmd0aCxlLnN0cnN0YXJ0Kz1lLm1hdGNoX2xlbmd0aCxlLm1hdGNoX2xlbmd0aD0wKToobj1vLl90cl90YWxseShlLDAsZS53aW5kb3dbZS5zdHJzdGFydF0pLGUubG9va2FoZWFkLS0sZS5zdHJzdGFydCsrKSxuJiYoayhlLCExKSwwPT09ZS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9cmV0dXJuIGUuaW5zZXJ0PTAsND09PXQ/KGsoZSwhMCksMD09PWUuc3RybS5hdmFpbF9vdXQ/Mzo0KTplLmxhc3RfbGl0JiYoayhlLCExKSwwPT09ZS5zdHJtLmF2YWlsX291dCk/MToyfShpLHQpOnJbaS5sZXZlbF0uZnVuYyhpLHQpO2lmKDMhPT1tJiY0IT09bXx8KGkuc3RhdHVzPTY2NiksMT09PW18fDM9PT1tKXJldHVybiAwPT09ZS5hdmFpbF9vdXQmJihpLmxhc3RfZmx1c2g9LTEpLHU7aWYoMj09PW0mJigxPT09dD9vLl90cl9hbGlnbihpKTo1IT09dCYmKG8uX3RyX3N0b3JlZF9ibG9jayhpLDAsMCwhMSksMz09PXQmJihBKGkuaGVhZCksMD09PWkubG9va2FoZWFkJiYoaS5zdHJzdGFydD0wLGkuYmxvY2tfc3RhcnQ9MCxpLmluc2VydD0wKSkpLFIoZSksMD09PWUuYXZhaWxfb3V0KSlyZXR1cm4gaS5sYXN0X2ZsdXNoPS0xLHV9cmV0dXJuIDQhPT10P3U6aS53cmFwPD0wPzE6KDI9PT1pLndyYXA/KE8oaSwyNTUmZS5hZGxlciksTyhpLGUuYWRsZXI+PjgmMjU1KSxPKGksZS5hZGxlcj4+MTYmMjU1KSxPKGksZS5hZGxlcj4+MjQmMjU1KSxPKGksMjU1JmUudG90YWxfaW4pLE8oaSxlLnRvdGFsX2luPj44JjI1NSksTyhpLGUudG90YWxfaW4+PjE2JjI1NSksTyhpLGUudG90YWxfaW4+PjI0JjI1NSkpOihOKGksZS5hZGxlcj4+PjE2KSxOKGksNjU1MzUmZS5hZGxlcikpLFIoZSksMDxpLndyYXAmJihpLndyYXA9LWkud3JhcCksMCE9PWkucGVuZGluZz91OjEpfSxuLmRlZmxhdGVFbmQ9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIGUmJmUuc3RhdGU/KHQ9ZS5zdGF0ZS5zdGF0dXMpIT09UyYmNjkhPT10JiY3MyE9PXQmJjkxIT09dCYmMTAzIT09dCYmdCE9PWImJjY2NiE9PXQ/VChlLGQpOihlLnN0YXRlPW51bGwsdD09PWI/VChlLC0zKTp1KTpkfSxuLmRlZmxhdGVTZXREaWN0aW9uYXJ5PWZ1bmN0aW9uKGUsdCl7dmFyIG4scixvLHMsYyxsLGYscCxtPXQubGVuZ3RoO2lmKCFlfHwhZS5zdGF0ZSlyZXR1cm4gZDtpZigyPT09KHM9KG49ZS5zdGF0ZSkud3JhcCl8fDE9PT1zJiZuLnN0YXR1cyE9PVN8fG4ubG9va2FoZWFkKXJldHVybiBkO2ZvcigxPT09cyYmKGUuYWRsZXI9YShlLmFkbGVyLHQsbSwwKSksbi53cmFwPTAsbT49bi53X3NpemUmJigwPT09cyYmKEEobi5oZWFkKSxuLnN0cnN0YXJ0PTAsbi5ibG9ja19zdGFydD0wLG4uaW5zZXJ0PTApLHA9bmV3IGkuQnVmOChuLndfc2l6ZSksaS5hcnJheVNldChwLHQsbS1uLndfc2l6ZSxuLndfc2l6ZSwwKSx0PXAsbT1uLndfc2l6ZSksYz1lLmF2YWlsX2luLGw9ZS5uZXh0X2luLGY9ZS5pbnB1dCxlLmF2YWlsX2luPW0sZS5uZXh0X2luPTAsZS5pbnB1dD10LEQobik7bi5sb29rYWhlYWQ+PUU7KXtmb3Iocj1uLnN0cnN0YXJ0LG89bi5sb29rYWhlYWQtKEUtMSk7bi5pbnNfaD0obi5pbnNfaDw8bi5oYXNoX3NoaWZ0Xm4ud2luZG93W3IrRS0xXSkmbi5oYXNoX21hc2ssbi5wcmV2W3Imbi53X21hc2tdPW4uaGVhZFtuLmluc19oXSxuLmhlYWRbbi5pbnNfaF09cixyKyssLS1vOyk7bi5zdHJzdGFydD1yLG4ubG9va2FoZWFkPUUtMSxEKG4pfXJldHVybiBuLnN0cnN0YXJ0Kz1uLmxvb2thaGVhZCxuLmJsb2NrX3N0YXJ0PW4uc3Ryc3RhcnQsbi5pbnNlcnQ9bi5sb29rYWhlYWQsbi5sb29rYWhlYWQ9MCxuLm1hdGNoX2xlbmd0aD1uLnByZXZfbGVuZ3RoPUUtMSxuLm1hdGNoX2F2YWlsYWJsZT0wLGUubmV4dF9pbj1sLGUuaW5wdXQ9ZixlLmF2YWlsX2luPWMsbi53cmFwPXMsdX0sbi5kZWZsYXRlSW5mbz1cInBha28gZGVmbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdClcIn0se1wiLi4vdXRpbHMvY29tbW9uXCI6NDEsXCIuL2FkbGVyMzJcIjo0MyxcIi4vY3JjMzJcIjo0NSxcIi4vbWVzc2FnZXNcIjo1MSxcIi4vdHJlZXNcIjo1Mn1dLDQ3OltmdW5jdGlvbihlLHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dGhpcy50ZXh0PTAsdGhpcy50aW1lPTAsdGhpcy54ZmxhZ3M9MCx0aGlzLm9zPTAsdGhpcy5leHRyYT1udWxsLHRoaXMuZXh0cmFfbGVuPTAsdGhpcy5uYW1lPVwiXCIsdGhpcy5jb21tZW50PVwiXCIsdGhpcy5oY3JjPTAsdGhpcy5kb25lPSExfX0se31dLDQ4OltmdW5jdGlvbihlLHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYSxzLGMsbCx1LGQsZixwLG0saCx2LGcseSxFLF8sSSxTLGIsVCxDLEE7bj1lLnN0YXRlLHI9ZS5uZXh0X2luLEM9ZS5pbnB1dCxpPXIrKGUuYXZhaWxfaW4tNSksbz1lLm5leHRfb3V0LEE9ZS5vdXRwdXQsYT1vLSh0LWUuYXZhaWxfb3V0KSxzPW8rKGUuYXZhaWxfb3V0LTI1NyksYz1uLmRtYXgsbD1uLndzaXplLHU9bi53aGF2ZSxkPW4ud25leHQsZj1uLndpbmRvdyxwPW4uaG9sZCxtPW4uYml0cyxoPW4ubGVuY29kZSx2PW4uZGlzdGNvZGUsZz0oMTw8bi5sZW5iaXRzKS0xLHk9KDE8PG4uZGlzdGJpdHMpLTE7ZTpkb3ttPDE1JiYocCs9Q1tyKytdPDxtLG0rPTgscCs9Q1tyKytdPDxtLG0rPTgpLEU9aFtwJmddO3Q6Zm9yKDs7KXtpZihwPj4+PV89RT4+PjI0LG0tPV8sMD09KF89RT4+PjE2JjI1NSkpQVtvKytdPTY1NTM1JkU7ZWxzZXtpZighKDE2Jl8pKXtpZigwPT0oNjQmXykpe0U9aFsoNjU1MzUmRSkrKHAmKDE8PF8pLTEpXTtjb250aW51ZSB0fWlmKDMyJl8pe24ubW9kZT0xMjticmVhayBlfWUubXNnPVwiaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlXCIsbi5tb2RlPTMwO2JyZWFrIGV9ST02NTUzNSZFLChfJj0xNSkmJihtPF8mJihwKz1DW3IrK108PG0sbSs9OCksSSs9cCYoMTw8XyktMSxwPj4+PV8sbS09XyksbTwxNSYmKHArPUNbcisrXTw8bSxtKz04LHArPUNbcisrXTw8bSxtKz04KSxFPXZbcCZ5XTtuOmZvcig7Oyl7aWYocD4+Pj1fPUU+Pj4yNCxtLT1fLCEoMTYmKF89RT4+PjE2JjI1NSkpKXtpZigwPT0oNjQmXykpe0U9dlsoNjU1MzUmRSkrKHAmKDE8PF8pLTEpXTtjb250aW51ZSBufWUubXNnPVwiaW52YWxpZCBkaXN0YW5jZSBjb2RlXCIsbi5tb2RlPTMwO2JyZWFrIGV9aWYoUz02NTUzNSZFLG08KF8mPTE1KSYmKHArPUNbcisrXTw8bSwobSs9OCk8XyYmKHArPUNbcisrXTw8bSxtKz04KSksYzwoUys9cCYoMTw8XyktMSkpe2UubXNnPVwiaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2tcIixuLm1vZGU9MzA7YnJlYWsgZX1pZihwPj4+PV8sbS09XywoXz1vLWEpPFMpe2lmKHU8KF89Uy1fKSYmbi5zYW5lKXtlLm1zZz1cImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrXCIsbi5tb2RlPTMwO2JyZWFrIGV9aWYoVD1mLChiPTApPT09ZCl7aWYoYis9bC1fLF88SSl7Zm9yKEktPV87QVtvKytdPWZbYisrXSwtLV87KTtiPW8tUyxUPUF9fWVsc2UgaWYoZDxfKXtpZihiKz1sK2QtXywoXy09ZCk8SSl7Zm9yKEktPV87QVtvKytdPWZbYisrXSwtLV87KTtpZihiPTAsZDxJKXtmb3IoSS09Xz1kO0FbbysrXT1mW2IrK10sLS1fOyk7Yj1vLVMsVD1BfX19ZWxzZSBpZihiKz1kLV8sXzxJKXtmb3IoSS09XztBW28rK109ZltiKytdLC0tXzspO2I9by1TLFQ9QX1mb3IoOzI8STspQVtvKytdPVRbYisrXSxBW28rK109VFtiKytdLEFbbysrXT1UW2IrK10sSS09MztJJiYoQVtvKytdPVRbYisrXSwxPEkmJihBW28rK109VFtiKytdKSl9ZWxzZXtmb3IoYj1vLVM7QVtvKytdPUFbYisrXSxBW28rK109QVtiKytdLEFbbysrXT1BW2IrK10sMjwoSS09Myk7KTtJJiYoQVtvKytdPUFbYisrXSwxPEkmJihBW28rK109QVtiKytdKSl9YnJlYWt9fWJyZWFrfX13aGlsZShyPGkmJm88cyk7ci09ST1tPj4zLHAmPSgxPDwobS09STw8MykpLTEsZS5uZXh0X2luPXIsZS5uZXh0X291dD1vLGUuYXZhaWxfaW49cjxpP2ktcis1OjUtKHItaSksZS5hdmFpbF9vdXQ9bzxzP3MtbysyNTc6MjU3LShvLXMpLG4uaG9sZD1wLG4uYml0cz1tfX0se31dLDQ5OltmdW5jdGlvbihlLHQsbil7dmFyIHI9ZShcIi4uL3V0aWxzL2NvbW1vblwiKSxpPWUoXCIuL2FkbGVyMzJcIiksbz1lKFwiLi9jcmMzMlwiKSxhPWUoXCIuL2luZmZhc3RcIikscz1lKFwiLi9pbmZ0cmVlc1wiKSxjPTAsbD0tMix1PTEsZD04NTIsZj01OTI7ZnVuY3Rpb24gcChlKXtyZXR1cm4oZT4+PjI0JjI1NSkrKGU+Pj44JjY1MjgwKSsoKDY1MjgwJmUpPDw4KSsoKDI1NSZlKTw8MjQpfWZ1bmN0aW9uIG0oKXt0aGlzLm1vZGU9MCx0aGlzLmxhc3Q9ITEsdGhpcy53cmFwPTAsdGhpcy5oYXZlZGljdD0hMSx0aGlzLmZsYWdzPTAsdGhpcy5kbWF4PTAsdGhpcy5jaGVjaz0wLHRoaXMudG90YWw9MCx0aGlzLmhlYWQ9bnVsbCx0aGlzLndiaXRzPTAsdGhpcy53c2l6ZT0wLHRoaXMud2hhdmU9MCx0aGlzLnduZXh0PTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLmhvbGQ9MCx0aGlzLmJpdHM9MCx0aGlzLmxlbmd0aD0wLHRoaXMub2Zmc2V0PTAsdGhpcy5leHRyYT0wLHRoaXMubGVuY29kZT1udWxsLHRoaXMuZGlzdGNvZGU9bnVsbCx0aGlzLmxlbmJpdHM9MCx0aGlzLmRpc3RiaXRzPTAsdGhpcy5uY29kZT0wLHRoaXMubmxlbj0wLHRoaXMubmRpc3Q9MCx0aGlzLmhhdmU9MCx0aGlzLm5leHQ9bnVsbCx0aGlzLmxlbnM9bmV3IHIuQnVmMTYoMzIwKSx0aGlzLndvcms9bmV3IHIuQnVmMTYoMjg4KSx0aGlzLmxlbmR5bj1udWxsLHRoaXMuZGlzdGR5bj1udWxsLHRoaXMuc2FuZT0wLHRoaXMuYmFjaz0wLHRoaXMud2FzPTB9ZnVuY3Rpb24gaChlKXt2YXIgdDtyZXR1cm4gZSYmZS5zdGF0ZT8odD1lLnN0YXRlLGUudG90YWxfaW49ZS50b3RhbF9vdXQ9dC50b3RhbD0wLGUubXNnPVwiXCIsdC53cmFwJiYoZS5hZGxlcj0xJnQud3JhcCksdC5tb2RlPXUsdC5sYXN0PTAsdC5oYXZlZGljdD0wLHQuZG1heD0zMjc2OCx0LmhlYWQ9bnVsbCx0LmhvbGQ9MCx0LmJpdHM9MCx0LmxlbmNvZGU9dC5sZW5keW49bmV3IHIuQnVmMzIoZCksdC5kaXN0Y29kZT10LmRpc3RkeW49bmV3IHIuQnVmMzIoZiksdC5zYW5lPTEsdC5iYWNrPS0xLGMpOmx9ZnVuY3Rpb24gdihlKXt2YXIgdDtyZXR1cm4gZSYmZS5zdGF0ZT8oKHQ9ZS5zdGF0ZSkud3NpemU9MCx0LndoYXZlPTAsdC53bmV4dD0wLGgoZSkpOmx9ZnVuY3Rpb24gZyhlLHQpe3ZhciBuLHI7cmV0dXJuIGUmJmUuc3RhdGU/KHI9ZS5zdGF0ZSx0PDA/KG49MCx0PS10KToobj0xKyh0Pj40KSx0PDQ4JiYodCY9MTUpKSx0JiYodDw4fHwxNTx0KT9sOihudWxsIT09ci53aW5kb3cmJnIud2JpdHMhPT10JiYoci53aW5kb3c9bnVsbCksci53cmFwPW4sci53Yml0cz10LHYoZSkpKTpsfWZ1bmN0aW9uIHkoZSx0KXt2YXIgbixyO3JldHVybiBlPyhyPW5ldyBtLChlLnN0YXRlPXIpLndpbmRvdz1udWxsLChuPWcoZSx0KSkhPT1jJiYoZS5zdGF0ZT1udWxsKSxuKTpsfXZhciBFLF8sST0hMDtmdW5jdGlvbiBTKGUpe2lmKEkpe3ZhciB0O2ZvcihFPW5ldyByLkJ1ZjMyKDUxMiksXz1uZXcgci5CdWYzMigzMiksdD0wO3Q8MTQ0OyllLmxlbnNbdCsrXT04O2Zvcig7dDwyNTY7KWUubGVuc1t0KytdPTk7Zm9yKDt0PDI4MDspZS5sZW5zW3QrK109Nztmb3IoO3Q8Mjg4OyllLmxlbnNbdCsrXT04O2ZvcihzKDEsZS5sZW5zLDAsMjg4LEUsMCxlLndvcmsse2JpdHM6OX0pLHQ9MDt0PDMyOyllLmxlbnNbdCsrXT01O3MoMixlLmxlbnMsMCwzMixfLDAsZS53b3JrLHtiaXRzOjV9KSxJPSExfWUubGVuY29kZT1FLGUubGVuYml0cz05LGUuZGlzdGNvZGU9XyxlLmRpc3RiaXRzPTV9ZnVuY3Rpb24gYihlLHQsbixpKXt2YXIgbyxhPWUuc3RhdGU7cmV0dXJuIG51bGw9PT1hLndpbmRvdyYmKGEud3NpemU9MTw8YS53Yml0cyxhLnduZXh0PTAsYS53aGF2ZT0wLGEud2luZG93PW5ldyByLkJ1ZjgoYS53c2l6ZSkpLGk+PWEud3NpemU/KHIuYXJyYXlTZXQoYS53aW5kb3csdCxuLWEud3NpemUsYS53c2l6ZSwwKSxhLnduZXh0PTAsYS53aGF2ZT1hLndzaXplKTooaTwobz1hLndzaXplLWEud25leHQpJiYobz1pKSxyLmFycmF5U2V0KGEud2luZG93LHQsbi1pLG8sYS53bmV4dCksKGktPW8pPyhyLmFycmF5U2V0KGEud2luZG93LHQsbi1pLGksMCksYS53bmV4dD1pLGEud2hhdmU9YS53c2l6ZSk6KGEud25leHQrPW8sYS53bmV4dD09PWEud3NpemUmJihhLnduZXh0PTApLGEud2hhdmU8YS53c2l6ZSYmKGEud2hhdmUrPW8pKSksMH1uLmluZmxhdGVSZXNldD12LG4uaW5mbGF0ZVJlc2V0Mj1nLG4uaW5mbGF0ZVJlc2V0S2VlcD1oLG4uaW5mbGF0ZUluaXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHkoZSwxNSl9LG4uaW5mbGF0ZUluaXQyPXksbi5pbmZsYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG4sZCxmLG0saCx2LGcseSxFLF8sSSxULEMsQSxSLGssTyxOLHcsRCxQLE0sTCxVLHg9MCxGPW5ldyByLkJ1ZjgoNCksQj1bMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV07aWYoIWV8fCFlLnN0YXRlfHwhZS5vdXRwdXR8fCFlLmlucHV0JiYwIT09ZS5hdmFpbF9pbilyZXR1cm4gbDsxMj09PShuPWUuc3RhdGUpLm1vZGUmJihuLm1vZGU9MTMpLGg9ZS5uZXh0X291dCxmPWUub3V0cHV0LGc9ZS5hdmFpbF9vdXQsbT1lLm5leHRfaW4sZD1lLmlucHV0LHY9ZS5hdmFpbF9pbix5PW4uaG9sZCxFPW4uYml0cyxfPXYsST1nLE09YztlOmZvcig7Oylzd2l0Y2gobi5tb2RlKXtjYXNlIHU6aWYoMD09PW4ud3JhcCl7bi5tb2RlPTEzO2JyZWFrfWZvcig7RTwxNjspe2lmKDA9PT12KWJyZWFrIGU7di0tLHkrPWRbbSsrXTw8RSxFKz04fWlmKDImbi53cmFwJiYzNTYxNT09PXkpe0Zbbi5jaGVjaz0wXT0yNTUmeSxGWzFdPXk+Pj44JjI1NSxuLmNoZWNrPW8obi5jaGVjayxGLDIsMCksRT15PTAsbi5tb2RlPTI7YnJlYWt9aWYobi5mbGFncz0wLG4uaGVhZCYmKG4uaGVhZC5kb25lPSExKSwhKDEmbi53cmFwKXx8KCgoMjU1JnkpPDw4KSsoeT4+OCkpJTMxKXtlLm1zZz1cImluY29ycmVjdCBoZWFkZXIgY2hlY2tcIixuLm1vZGU9MzA7YnJlYWt9aWYoOCE9KDE1JnkpKXtlLm1zZz1cInVua25vd24gY29tcHJlc3Npb24gbWV0aG9kXCIsbi5tb2RlPTMwO2JyZWFrfWlmKEUtPTQsUD04KygxNSYoeT4+Pj00KSksMD09PW4ud2JpdHMpbi53Yml0cz1QO2Vsc2UgaWYoUD5uLndiaXRzKXtlLm1zZz1cImludmFsaWQgd2luZG93IHNpemVcIixuLm1vZGU9MzA7YnJlYWt9bi5kbWF4PTE8PFAsZS5hZGxlcj1uLmNoZWNrPTEsbi5tb2RlPTUxMiZ5PzEwOjEyLEU9eT0wO2JyZWFrO2Nhc2UgMjpmb3IoO0U8MTY7KXtpZigwPT09dilicmVhayBlO3YtLSx5Kz1kW20rK108PEUsRSs9OH1pZihuLmZsYWdzPXksOCE9KDI1NSZuLmZsYWdzKSl7ZS5tc2c9XCJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZFwiLG4ubW9kZT0zMDticmVha31pZig1NzM0NCZuLmZsYWdzKXtlLm1zZz1cInVua25vd24gaGVhZGVyIGZsYWdzIHNldFwiLG4ubW9kZT0zMDticmVha31uLmhlYWQmJihuLmhlYWQudGV4dD15Pj44JjEpLDUxMiZuLmZsYWdzJiYoRlswXT0yNTUmeSxGWzFdPXk+Pj44JjI1NSxuLmNoZWNrPW8obi5jaGVjayxGLDIsMCkpLEU9eT0wLG4ubW9kZT0zO2Nhc2UgMzpmb3IoO0U8MzI7KXtpZigwPT09dilicmVhayBlO3YtLSx5Kz1kW20rK108PEUsRSs9OH1uLmhlYWQmJihuLmhlYWQudGltZT15KSw1MTImbi5mbGFncyYmKEZbMF09MjU1JnksRlsxXT15Pj4+OCYyNTUsRlsyXT15Pj4+MTYmMjU1LEZbM109eT4+PjI0JjI1NSxuLmNoZWNrPW8obi5jaGVjayxGLDQsMCkpLEU9eT0wLG4ubW9kZT00O2Nhc2UgNDpmb3IoO0U8MTY7KXtpZigwPT09dilicmVhayBlO3YtLSx5Kz1kW20rK108PEUsRSs9OH1uLmhlYWQmJihuLmhlYWQueGZsYWdzPTI1NSZ5LG4uaGVhZC5vcz15Pj44KSw1MTImbi5mbGFncyYmKEZbMF09MjU1JnksRlsxXT15Pj4+OCYyNTUsbi5jaGVjaz1vKG4uY2hlY2ssRiwyLDApKSxFPXk9MCxuLm1vZGU9NTtjYXNlIDU6aWYoMTAyNCZuLmZsYWdzKXtmb3IoO0U8MTY7KXtpZigwPT09dilicmVhayBlO3YtLSx5Kz1kW20rK108PEUsRSs9OH1uLmxlbmd0aD15LG4uaGVhZCYmKG4uaGVhZC5leHRyYV9sZW49eSksNTEyJm4uZmxhZ3MmJihGWzBdPTI1NSZ5LEZbMV09eT4+PjgmMjU1LG4uY2hlY2s9byhuLmNoZWNrLEYsMiwwKSksRT15PTB9ZWxzZSBuLmhlYWQmJihuLmhlYWQuZXh0cmE9bnVsbCk7bi5tb2RlPTY7Y2FzZSA2OmlmKDEwMjQmbi5mbGFncyYmKHY8KFQ9bi5sZW5ndGgpJiYoVD12KSxUJiYobi5oZWFkJiYoUD1uLmhlYWQuZXh0cmFfbGVuLW4ubGVuZ3RoLG4uaGVhZC5leHRyYXx8KG4uaGVhZC5leHRyYT1uZXcgQXJyYXkobi5oZWFkLmV4dHJhX2xlbikpLHIuYXJyYXlTZXQobi5oZWFkLmV4dHJhLGQsbSxULFApKSw1MTImbi5mbGFncyYmKG4uY2hlY2s9byhuLmNoZWNrLGQsVCxtKSksdi09VCxtKz1ULG4ubGVuZ3RoLT1UKSxuLmxlbmd0aCkpYnJlYWsgZTtuLmxlbmd0aD0wLG4ubW9kZT03O2Nhc2UgNzppZigyMDQ4Jm4uZmxhZ3Mpe2lmKDA9PT12KWJyZWFrIGU7Zm9yKFQ9MDtQPWRbbStUKytdLG4uaGVhZCYmUCYmbi5sZW5ndGg8NjU1MzYmJihuLmhlYWQubmFtZSs9U3RyaW5nLmZyb21DaGFyQ29kZShQKSksUCYmVDx2Oyk7aWYoNTEyJm4uZmxhZ3MmJihuLmNoZWNrPW8obi5jaGVjayxkLFQsbSkpLHYtPVQsbSs9VCxQKWJyZWFrIGV9ZWxzZSBuLmhlYWQmJihuLmhlYWQubmFtZT1udWxsKTtuLmxlbmd0aD0wLG4ubW9kZT04O2Nhc2UgODppZig0MDk2Jm4uZmxhZ3Mpe2lmKDA9PT12KWJyZWFrIGU7Zm9yKFQ9MDtQPWRbbStUKytdLG4uaGVhZCYmUCYmbi5sZW5ndGg8NjU1MzYmJihuLmhlYWQuY29tbWVudCs9U3RyaW5nLmZyb21DaGFyQ29kZShQKSksUCYmVDx2Oyk7aWYoNTEyJm4uZmxhZ3MmJihuLmNoZWNrPW8obi5jaGVjayxkLFQsbSkpLHYtPVQsbSs9VCxQKWJyZWFrIGV9ZWxzZSBuLmhlYWQmJihuLmhlYWQuY29tbWVudD1udWxsKTtuLm1vZGU9OTtjYXNlIDk6aWYoNTEyJm4uZmxhZ3Mpe2Zvcig7RTwxNjspe2lmKDA9PT12KWJyZWFrIGU7di0tLHkrPWRbbSsrXTw8RSxFKz04fWlmKHkhPT0oNjU1MzUmbi5jaGVjaykpe2UubXNnPVwiaGVhZGVyIGNyYyBtaXNtYXRjaFwiLG4ubW9kZT0zMDticmVha31FPXk9MH1uLmhlYWQmJihuLmhlYWQuaGNyYz1uLmZsYWdzPj45JjEsbi5oZWFkLmRvbmU9ITApLGUuYWRsZXI9bi5jaGVjaz0wLG4ubW9kZT0xMjticmVhaztjYXNlIDEwOmZvcig7RTwzMjspe2lmKDA9PT12KWJyZWFrIGU7di0tLHkrPWRbbSsrXTw8RSxFKz04fWUuYWRsZXI9bi5jaGVjaz1wKHkpLEU9eT0wLG4ubW9kZT0xMTtjYXNlIDExOmlmKDA9PT1uLmhhdmVkaWN0KXJldHVybiBlLm5leHRfb3V0PWgsZS5hdmFpbF9vdXQ9ZyxlLm5leHRfaW49bSxlLmF2YWlsX2luPXYsbi5ob2xkPXksbi5iaXRzPUUsMjtlLmFkbGVyPW4uY2hlY2s9MSxuLm1vZGU9MTI7Y2FzZSAxMjppZig1PT09dHx8Nj09PXQpYnJlYWsgZTtjYXNlIDEzOmlmKG4ubGFzdCl7eT4+Pj03JkUsRS09NyZFLG4ubW9kZT0yNzticmVha31mb3IoO0U8Mzspe2lmKDA9PT12KWJyZWFrIGU7di0tLHkrPWRbbSsrXTw8RSxFKz04fXN3aXRjaChuLmxhc3Q9MSZ5LEUtPTEsMyYoeT4+Pj0xKSl7Y2FzZSAwOm4ubW9kZT0xNDticmVhaztjYXNlIDE6aWYoUyhuKSxuLm1vZGU9MjAsNiE9PXQpYnJlYWs7eT4+Pj0yLEUtPTI7YnJlYWsgZTtjYXNlIDI6bi5tb2RlPTE3O2JyZWFrO2Nhc2UgMzplLm1zZz1cImludmFsaWQgYmxvY2sgdHlwZVwiLG4ubW9kZT0zMH15Pj4+PTIsRS09MjticmVhaztjYXNlIDE0OmZvcih5Pj4+PTcmRSxFLT03JkU7RTwzMjspe2lmKDA9PT12KWJyZWFrIGU7di0tLHkrPWRbbSsrXTw8RSxFKz04fWlmKCg2NTUzNSZ5KSE9KHk+Pj4xNl42NTUzNSkpe2UubXNnPVwiaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3Roc1wiLG4ubW9kZT0zMDticmVha31pZihuLmxlbmd0aD02NTUzNSZ5LEU9eT0wLG4ubW9kZT0xNSw2PT09dClicmVhayBlO2Nhc2UgMTU6bi5tb2RlPTE2O2Nhc2UgMTY6aWYoVD1uLmxlbmd0aCl7aWYodjxUJiYoVD12KSxnPFQmJihUPWcpLDA9PT1UKWJyZWFrIGU7ci5hcnJheVNldChmLGQsbSxULGgpLHYtPVQsbSs9VCxnLT1ULGgrPVQsbi5sZW5ndGgtPVQ7YnJlYWt9bi5tb2RlPTEyO2JyZWFrO2Nhc2UgMTc6Zm9yKDtFPDE0Oyl7aWYoMD09PXYpYnJlYWsgZTt2LS0seSs9ZFttKytdPDxFLEUrPTh9aWYobi5ubGVuPTI1NysoMzEmeSkseT4+Pj01LEUtPTUsbi5uZGlzdD0xKygzMSZ5KSx5Pj4+PTUsRS09NSxuLm5jb2RlPTQrKDE1JnkpLHk+Pj49NCxFLT00LDI4NjxuLm5sZW58fDMwPG4ubmRpc3Qpe2UubXNnPVwidG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHNcIixuLm1vZGU9MzA7YnJlYWt9bi5oYXZlPTAsbi5tb2RlPTE4O2Nhc2UgMTg6Zm9yKDtuLmhhdmU8bi5uY29kZTspe2Zvcig7RTwzOyl7aWYoMD09PXYpYnJlYWsgZTt2LS0seSs9ZFttKytdPDxFLEUrPTh9bi5sZW5zW0Jbbi5oYXZlKytdXT03JnkseT4+Pj0zLEUtPTN9Zm9yKDtuLmhhdmU8MTk7KW4ubGVuc1tCW24uaGF2ZSsrXV09MDtpZihuLmxlbmNvZGU9bi5sZW5keW4sbi5sZW5iaXRzPTcsTD17Yml0czpuLmxlbmJpdHN9LE09cygwLG4ubGVucywwLDE5LG4ubGVuY29kZSwwLG4ud29yayxMKSxuLmxlbmJpdHM9TC5iaXRzLE0pe2UubXNnPVwiaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0XCIsbi5tb2RlPTMwO2JyZWFrfW4uaGF2ZT0wLG4ubW9kZT0xOTtjYXNlIDE5OmZvcig7bi5oYXZlPG4ubmxlbituLm5kaXN0Oyl7Zm9yKDtrPSh4PW4ubGVuY29kZVt5JigxPDxuLmxlbmJpdHMpLTFdKT4+PjE2JjI1NSxPPTY1NTM1JngsISgoUj14Pj4+MjQpPD1FKTspe2lmKDA9PT12KWJyZWFrIGU7di0tLHkrPWRbbSsrXTw8RSxFKz04fWlmKE88MTYpeT4+Pj1SLEUtPVIsbi5sZW5zW24uaGF2ZSsrXT1PO2Vsc2V7aWYoMTY9PT1PKXtmb3IoVT1SKzI7RTxVOyl7aWYoMD09PXYpYnJlYWsgZTt2LS0seSs9ZFttKytdPDxFLEUrPTh9aWYoeT4+Pj1SLEUtPVIsMD09PW4uaGF2ZSl7ZS5tc2c9XCJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0XCIsbi5tb2RlPTMwO2JyZWFrfVA9bi5sZW5zW24uaGF2ZS0xXSxUPTMrKDMmeSkseT4+Pj0yLEUtPTJ9ZWxzZSBpZigxNz09PU8pe2ZvcihVPVIrMztFPFU7KXtpZigwPT09dilicmVhayBlO3YtLSx5Kz1kW20rK108PEUsRSs9OH1FLT1SLFA9MCxUPTMrKDcmKHk+Pj49UikpLHk+Pj49MyxFLT0zfWVsc2V7Zm9yKFU9Uis3O0U8VTspe2lmKDA9PT12KWJyZWFrIGU7di0tLHkrPWRbbSsrXTw8RSxFKz04fUUtPVIsUD0wLFQ9MTErKDEyNyYoeT4+Pj1SKSkseT4+Pj03LEUtPTd9aWYobi5oYXZlK1Q+bi5ubGVuK24ubmRpc3Qpe2UubXNnPVwiaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdFwiLG4ubW9kZT0zMDticmVha31mb3IoO1QtLTspbi5sZW5zW24uaGF2ZSsrXT1QfX1pZigzMD09PW4ubW9kZSlicmVhaztpZigwPT09bi5sZW5zWzI1Nl0pe2UubXNnPVwiaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrXCIsbi5tb2RlPTMwO2JyZWFrfWlmKG4ubGVuYml0cz05LEw9e2JpdHM6bi5sZW5iaXRzfSxNPXMoMSxuLmxlbnMsMCxuLm5sZW4sbi5sZW5jb2RlLDAsbi53b3JrLEwpLG4ubGVuYml0cz1MLmJpdHMsTSl7ZS5tc2c9XCJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXRcIixuLm1vZGU9MzA7YnJlYWt9aWYobi5kaXN0Yml0cz02LG4uZGlzdGNvZGU9bi5kaXN0ZHluLEw9e2JpdHM6bi5kaXN0Yml0c30sTT1zKDIsbi5sZW5zLG4ubmxlbixuLm5kaXN0LG4uZGlzdGNvZGUsMCxuLndvcmssTCksbi5kaXN0Yml0cz1MLmJpdHMsTSl7ZS5tc2c9XCJpbnZhbGlkIGRpc3RhbmNlcyBzZXRcIixuLm1vZGU9MzA7YnJlYWt9aWYobi5tb2RlPTIwLDY9PT10KWJyZWFrIGU7Y2FzZSAyMDpuLm1vZGU9MjE7Y2FzZSAyMTppZig2PD12JiYyNTg8PWcpe2UubmV4dF9vdXQ9aCxlLmF2YWlsX291dD1nLGUubmV4dF9pbj1tLGUuYXZhaWxfaW49dixuLmhvbGQ9eSxuLmJpdHM9RSxhKGUsSSksaD1lLm5leHRfb3V0LGY9ZS5vdXRwdXQsZz1lLmF2YWlsX291dCxtPWUubmV4dF9pbixkPWUuaW5wdXQsdj1lLmF2YWlsX2luLHk9bi5ob2xkLEU9bi5iaXRzLDEyPT09bi5tb2RlJiYobi5iYWNrPS0xKTticmVha31mb3Iobi5iYWNrPTA7az0oeD1uLmxlbmNvZGVbeSYoMTw8bi5sZW5iaXRzKS0xXSk+Pj4xNiYyNTUsTz02NTUzNSZ4LCEoKFI9eD4+PjI0KTw9RSk7KXtpZigwPT09dilicmVhayBlO3YtLSx5Kz1kW20rK108PEUsRSs9OH1pZihrJiYwPT0oMjQwJmspKXtmb3IoTj1SLHc9ayxEPU87az0oeD1uLmxlbmNvZGVbRCsoKHkmKDE8PE4rdyktMSk+Pk4pXSk+Pj4xNiYyNTUsTz02NTUzNSZ4LCEoTisoUj14Pj4+MjQpPD1FKTspe2lmKDA9PT12KWJyZWFrIGU7di0tLHkrPWRbbSsrXTw8RSxFKz04fXk+Pj49TixFLT1OLG4uYmFjays9Tn1pZih5Pj4+PVIsRS09UixuLmJhY2srPVIsbi5sZW5ndGg9TywwPT09ayl7bi5tb2RlPTI2O2JyZWFrfWlmKDMyJmspe24uYmFjaz0tMSxuLm1vZGU9MTI7YnJlYWt9aWYoNjQmayl7ZS5tc2c9XCJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGVcIixuLm1vZGU9MzA7YnJlYWt9bi5leHRyYT0xNSZrLG4ubW9kZT0yMjtjYXNlIDIyOmlmKG4uZXh0cmEpe2ZvcihVPW4uZXh0cmE7RTxVOyl7aWYoMD09PXYpYnJlYWsgZTt2LS0seSs9ZFttKytdPDxFLEUrPTh9bi5sZW5ndGgrPXkmKDE8PG4uZXh0cmEpLTEseT4+Pj1uLmV4dHJhLEUtPW4uZXh0cmEsbi5iYWNrKz1uLmV4dHJhfW4ud2FzPW4ubGVuZ3RoLG4ubW9kZT0yMztjYXNlIDIzOmZvcig7az0oeD1uLmRpc3Rjb2RlW3kmKDE8PG4uZGlzdGJpdHMpLTFdKT4+PjE2JjI1NSxPPTY1NTM1JngsISgoUj14Pj4+MjQpPD1FKTspe2lmKDA9PT12KWJyZWFrIGU7di0tLHkrPWRbbSsrXTw8RSxFKz04fWlmKDA9PSgyNDAmaykpe2ZvcihOPVIsdz1rLEQ9TztrPSh4PW4uZGlzdGNvZGVbRCsoKHkmKDE8PE4rdyktMSk+Pk4pXSk+Pj4xNiYyNTUsTz02NTUzNSZ4LCEoTisoUj14Pj4+MjQpPD1FKTspe2lmKDA9PT12KWJyZWFrIGU7di0tLHkrPWRbbSsrXTw8RSxFKz04fXk+Pj49TixFLT1OLG4uYmFjays9Tn1pZih5Pj4+PVIsRS09UixuLmJhY2srPVIsNjQmayl7ZS5tc2c9XCJpbnZhbGlkIGRpc3RhbmNlIGNvZGVcIixuLm1vZGU9MzA7YnJlYWt9bi5vZmZzZXQ9TyxuLmV4dHJhPTE1Jmssbi5tb2RlPTI0O2Nhc2UgMjQ6aWYobi5leHRyYSl7Zm9yKFU9bi5leHRyYTtFPFU7KXtpZigwPT09dilicmVhayBlO3YtLSx5Kz1kW20rK108PEUsRSs9OH1uLm9mZnNldCs9eSYoMTw8bi5leHRyYSktMSx5Pj4+PW4uZXh0cmEsRS09bi5leHRyYSxuLmJhY2srPW4uZXh0cmF9aWYobi5vZmZzZXQ+bi5kbWF4KXtlLm1zZz1cImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrXCIsbi5tb2RlPTMwO2JyZWFrfW4ubW9kZT0yNTtjYXNlIDI1OmlmKDA9PT1nKWJyZWFrIGU7aWYoVD1JLWcsbi5vZmZzZXQ+VCl7aWYoKFQ9bi5vZmZzZXQtVCk+bi53aGF2ZSYmbi5zYW5lKXtlLm1zZz1cImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrXCIsbi5tb2RlPTMwO2JyZWFrfUM9VD5uLnduZXh0PyhULT1uLnduZXh0LG4ud3NpemUtVCk6bi53bmV4dC1ULFQ+bi5sZW5ndGgmJihUPW4ubGVuZ3RoKSxBPW4ud2luZG93fWVsc2UgQT1mLEM9aC1uLm9mZnNldCxUPW4ubGVuZ3RoO2ZvcihnPFQmJihUPWcpLGctPVQsbi5sZW5ndGgtPVQ7ZltoKytdPUFbQysrXSwtLVQ7KTswPT09bi5sZW5ndGgmJihuLm1vZGU9MjEpO2JyZWFrO2Nhc2UgMjY6aWYoMD09PWcpYnJlYWsgZTtmW2grK109bi5sZW5ndGgsZy0tLG4ubW9kZT0yMTticmVhaztjYXNlIDI3OmlmKG4ud3JhcCl7Zm9yKDtFPDMyOyl7aWYoMD09PXYpYnJlYWsgZTt2LS0seXw9ZFttKytdPDxFLEUrPTh9aWYoSS09ZyxlLnRvdGFsX291dCs9SSxuLnRvdGFsKz1JLEkmJihlLmFkbGVyPW4uY2hlY2s9bi5mbGFncz9vKG4uY2hlY2ssZixJLGgtSSk6aShuLmNoZWNrLGYsSSxoLUkpKSxJPWcsKG4uZmxhZ3M/eTpwKHkpKSE9PW4uY2hlY2spe2UubXNnPVwiaW5jb3JyZWN0IGRhdGEgY2hlY2tcIixuLm1vZGU9MzA7YnJlYWt9RT15PTB9bi5tb2RlPTI4O2Nhc2UgMjg6aWYobi53cmFwJiZuLmZsYWdzKXtmb3IoO0U8MzI7KXtpZigwPT09dilicmVhayBlO3YtLSx5Kz1kW20rK108PEUsRSs9OH1pZih5IT09KDQyOTQ5NjcyOTUmbi50b3RhbCkpe2UubXNnPVwiaW5jb3JyZWN0IGxlbmd0aCBjaGVja1wiLG4ubW9kZT0zMDticmVha31FPXk9MH1uLm1vZGU9Mjk7Y2FzZSAyOTpNPTE7YnJlYWsgZTtjYXNlIDMwOk09LTM7YnJlYWsgZTtjYXNlIDMxOnJldHVybi00O2RlZmF1bHQ6cmV0dXJuIGx9cmV0dXJuIGUubmV4dF9vdXQ9aCxlLmF2YWlsX291dD1nLGUubmV4dF9pbj1tLGUuYXZhaWxfaW49dixuLmhvbGQ9eSxuLmJpdHM9RSwobi53c2l6ZXx8SSE9PWUuYXZhaWxfb3V0JiZuLm1vZGU8MzAmJihuLm1vZGU8Mjd8fDQhPT10KSkmJmIoZSxlLm91dHB1dCxlLm5leHRfb3V0LEktZS5hdmFpbF9vdXQpPyhuLm1vZGU9MzEsLTQpOihfLT1lLmF2YWlsX2luLEktPWUuYXZhaWxfb3V0LGUudG90YWxfaW4rPV8sZS50b3RhbF9vdXQrPUksbi50b3RhbCs9SSxuLndyYXAmJkkmJihlLmFkbGVyPW4uY2hlY2s9bi5mbGFncz9vKG4uY2hlY2ssZixJLGUubmV4dF9vdXQtSSk6aShuLmNoZWNrLGYsSSxlLm5leHRfb3V0LUkpKSxlLmRhdGFfdHlwZT1uLmJpdHMrKG4ubGFzdD82NDowKSsoMTI9PT1uLm1vZGU/MTI4OjApKygyMD09PW4ubW9kZXx8MTU9PT1uLm1vZGU/MjU2OjApLCgwPT1fJiYwPT09SXx8ND09PXQpJiZNPT09YyYmKE09LTUpLE0pfSxuLmluZmxhdGVFbmQ9ZnVuY3Rpb24oZSl7aWYoIWV8fCFlLnN0YXRlKXJldHVybiBsO3ZhciB0PWUuc3RhdGU7cmV0dXJuIHQud2luZG93JiYodC53aW5kb3c9bnVsbCksZS5zdGF0ZT1udWxsLGN9LG4uaW5mbGF0ZUdldEhlYWRlcj1mdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBlJiZlLnN0YXRlPzA9PSgyJihuPWUuc3RhdGUpLndyYXApP2w6KChuLmhlYWQ9dCkuZG9uZT0hMSxjKTpsfSxuLmluZmxhdGVTZXREaWN0aW9uYXJ5PWZ1bmN0aW9uKGUsdCl7dmFyIG4scj10Lmxlbmd0aDtyZXR1cm4gZSYmZS5zdGF0ZT8wIT09KG49ZS5zdGF0ZSkud3JhcCYmMTEhPT1uLm1vZGU/bDoxMT09PW4ubW9kZSYmaSgxLHQsciwwKSE9PW4uY2hlY2s/LTM6YihlLHQscixyKT8obi5tb2RlPTMxLC00KToobi5oYXZlZGljdD0xLGMpOmx9LG4uaW5mbGF0ZUluZm89XCJwYWtvIGluZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpXCJ9LHtcIi4uL3V0aWxzL2NvbW1vblwiOjQxLFwiLi9hZGxlcjMyXCI6NDMsXCIuL2NyYzMyXCI6NDUsXCIuL2luZmZhc3RcIjo0OCxcIi4vaW5mdHJlZXNcIjo1MH1dLDUwOltmdW5jdGlvbihlLHQsbil7dmFyIHI9ZShcIi4uL3V0aWxzL2NvbW1vblwiKSxpPVszLDQsNSw2LDcsOCw5LDEwLDExLDEzLDE1LDE3LDE5LDIzLDI3LDMxLDM1LDQzLDUxLDU5LDY3LDgzLDk5LDExNSwxMzEsMTYzLDE5NSwyMjcsMjU4LDAsMF0sbz1bMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTcsMTcsMTcsMTcsMTgsMTgsMTgsMTgsMTksMTksMTksMTksMjAsMjAsMjAsMjAsMjEsMjEsMjEsMjEsMTYsNzIsNzhdLGE9WzEsMiwzLDQsNSw3LDksMTMsMTcsMjUsMzMsNDksNjUsOTcsMTI5LDE5MywyNTcsMzg1LDUxMyw3NjksMTAyNSwxNTM3LDIwNDksMzA3Myw0MDk3LDYxNDUsODE5MywxMjI4OSwxNjM4NSwyNDU3NywwLDBdLHM9WzE2LDE2LDE2LDE2LDE3LDE3LDE4LDE4LDE5LDE5LDIwLDIwLDIxLDIxLDIyLDIyLDIzLDIzLDI0LDI0LDI1LDI1LDI2LDI2LDI3LDI3LDI4LDI4LDI5LDI5LDY0LDY0XTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4sYyxsLHUsZCxmKXt2YXIgcCxtLGgsdixnLHksRSxfLEksUz1mLmJpdHMsYj0wLFQ9MCxDPTAsQT0wLFI9MCxrPTAsTz0wLE49MCx3PTAsRD0wLFA9bnVsbCxNPTAsTD1uZXcgci5CdWYxNigxNiksVT1uZXcgci5CdWYxNigxNikseD1udWxsLEY9MDtmb3IoYj0wO2I8PTE1O2IrKylMW2JdPTA7Zm9yKFQ9MDtUPGM7VCsrKUxbdFtuK1RdXSsrO2ZvcihSPVMsQT0xNTsxPD1BJiYwPT09TFtBXTtBLS0pO2lmKEE8UiYmKFI9QSksMD09PUEpcmV0dXJuIGxbdSsrXT0yMDk3MTUyMCxsW3UrK109MjA5NzE1MjAsZi5iaXRzPTEsMDtmb3IoQz0xO0M8QSYmMD09PUxbQ107QysrKTtmb3IoUjxDJiYoUj1DKSxiPU49MTtiPD0xNTtiKyspaWYoTjw8PTEsKE4tPUxbYl0pPDApcmV0dXJuLTE7aWYoMDxOJiYoMD09PWV8fDEhPT1BKSlyZXR1cm4tMTtmb3IoVVsxXT0wLGI9MTtiPDE1O2IrKylVW2IrMV09VVtiXStMW2JdO2ZvcihUPTA7VDxjO1QrKykwIT09dFtuK1RdJiYoZFtVW3RbbitUXV0rK109VCk7aWYoeT0wPT09ZT8oUD14PWQsMTkpOjE9PT1lPyhQPWksTS09MjU3LHg9byxGLT0yNTcsMjU2KTooUD1hLHg9cywtMSksYj1DLGc9dSxPPVQ9RD0wLGg9LTEsdj0odz0xPDwoaz1SKSktMSwxPT09ZSYmODUyPHd8fDI9PT1lJiY1OTI8dylyZXR1cm4gMTtmb3IoOzspe2ZvcihFPWItTyxJPWRbVF08eT8oXz0wLGRbVF0pOmRbVF0+eT8oXz14W0YrZFtUXV0sUFtNK2RbVF1dKTooXz05NiwwKSxwPTE8PGItTyxDPW09MTw8aztsW2crKEQ+Pk8pKyhtLT1wKV09RTw8MjR8Xzw8MTZ8SXwwLDAhPT1tOyk7Zm9yKHA9MTw8Yi0xO0QmcDspcD4+PTE7aWYoMCE9PXA/KEQmPXAtMSxEKz1wKTpEPTAsVCsrLDA9PS0tTFtiXSl7aWYoYj09PUEpYnJlYWs7Yj10W24rZFtUXV19aWYoUjxiJiYoRCZ2KSE9PWgpe2ZvcigwPT09TyYmKE89UiksZys9QyxOPTE8PChrPWItTyk7aytPPEEmJiEoKE4tPUxbaytPXSk8PTApOylrKyssTjw8PTE7aWYodys9MTw8aywxPT09ZSYmODUyPHd8fDI9PT1lJiY1OTI8dylyZXR1cm4gMTtsW2g9RCZ2XT1SPDwyNHxrPDwxNnxnLXV8MH19cmV0dXJuIDAhPT1EJiYobFtnK0RdPWItTzw8MjR8NjQ8PDE2fDApLGYuYml0cz1SLDB9fSx7XCIuLi91dGlscy9jb21tb25cIjo0MX1dLDUxOltmdW5jdGlvbihlLHQsbil7dC5leHBvcnRzPXsyOlwibmVlZCBkaWN0aW9uYXJ5XCIsMTpcInN0cmVhbSBlbmRcIiwwOlwiXCIsXCItMVwiOlwiZmlsZSBlcnJvclwiLFwiLTJcIjpcInN0cmVhbSBlcnJvclwiLFwiLTNcIjpcImRhdGEgZXJyb3JcIixcIi00XCI6XCJpbnN1ZmZpY2llbnQgbWVtb3J5XCIsXCItNVwiOlwiYnVmZmVyIGVycm9yXCIsXCItNlwiOlwiaW5jb21wYXRpYmxlIHZlcnNpb25cIn19LHt9XSw1MjpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUoXCIuLi91dGlscy9jb21tb25cIik7ZnVuY3Rpb24gaShlKXtmb3IodmFyIHQ9ZS5sZW5ndGg7MDw9LS10OyllW3RdPTB9dmFyIG89MTUsYT0xNixzPVswLDAsMCwwLDAsMCwwLDAsMSwxLDEsMSwyLDIsMiwyLDMsMywzLDMsNCw0LDQsNCw1LDUsNSw1LDBdLGM9WzAsMCwwLDAsMSwxLDIsMiwzLDMsNCw0LDUsNSw2LDYsNyw3LDgsOCw5LDksMTAsMTAsMTEsMTEsMTIsMTIsMTMsMTNdLGw9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwzLDddLHU9WzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdLGQ9bmV3IEFycmF5KDU3Nik7aShkKTt2YXIgZj1uZXcgQXJyYXkoNjApO2koZik7dmFyIHA9bmV3IEFycmF5KDUxMik7aShwKTt2YXIgbT1uZXcgQXJyYXkoMjU2KTtpKG0pO3ZhciBoPW5ldyBBcnJheSgyOSk7aShoKTt2YXIgdixnLHksRT1uZXcgQXJyYXkoMzApO2Z1bmN0aW9uIF8oZSx0LG4scixpKXt0aGlzLnN0YXRpY190cmVlPWUsdGhpcy5leHRyYV9iaXRzPXQsdGhpcy5leHRyYV9iYXNlPW4sdGhpcy5lbGVtcz1yLHRoaXMubWF4X2xlbmd0aD1pLHRoaXMuaGFzX3N0cmVlPWUmJmUubGVuZ3RofWZ1bmN0aW9uIEkoZSx0KXt0aGlzLmR5bl90cmVlPWUsdGhpcy5tYXhfY29kZT0wLHRoaXMuc3RhdF9kZXNjPXR9ZnVuY3Rpb24gUyhlKXtyZXR1cm4gZTwyNTY/cFtlXTpwWzI1NisoZT4+PjcpXX1mdW5jdGlvbiBiKGUsdCl7ZS5wZW5kaW5nX2J1ZltlLnBlbmRpbmcrK109MjU1JnQsZS5wZW5kaW5nX2J1ZltlLnBlbmRpbmcrK109dD4+PjgmMjU1fWZ1bmN0aW9uIFQoZSx0LG4pe2UuYmlfdmFsaWQ+YS1uPyhlLmJpX2J1Znw9dDw8ZS5iaV92YWxpZCY2NTUzNSxiKGUsZS5iaV9idWYpLGUuYmlfYnVmPXQ+PmEtZS5iaV92YWxpZCxlLmJpX3ZhbGlkKz1uLWEpOihlLmJpX2J1Znw9dDw8ZS5iaV92YWxpZCY2NTUzNSxlLmJpX3ZhbGlkKz1uKX1mdW5jdGlvbiBDKGUsdCxuKXtUKGUsblsyKnRdLG5bMip0KzFdKX1mdW5jdGlvbiBBKGUsdCl7Zm9yKHZhciBuPTA7bnw9MSZlLGU+Pj49MSxuPDw9MSwwPC0tdDspO3JldHVybiBuPj4+MX1mdW5jdGlvbiBSKGUsdCxuKXt2YXIgcixpLGE9bmV3IEFycmF5KG8rMSkscz0wO2ZvcihyPTE7cjw9bztyKyspYVtyXT1zPXMrbltyLTFdPDwxO2ZvcihpPTA7aTw9dDtpKyspe3ZhciBjPWVbMippKzFdOzAhPT1jJiYoZVsyKmldPUEoYVtjXSsrLGMpKX19ZnVuY3Rpb24gayhlKXt2YXIgdDtmb3IodD0wO3Q8Mjg2O3QrKyllLmR5bl9sdHJlZVsyKnRdPTA7Zm9yKHQ9MDt0PDMwO3QrKyllLmR5bl9kdHJlZVsyKnRdPTA7Zm9yKHQ9MDt0PDE5O3QrKyllLmJsX3RyZWVbMip0XT0wO2UuZHluX2x0cmVlWzUxMl09MSxlLm9wdF9sZW49ZS5zdGF0aWNfbGVuPTAsZS5sYXN0X2xpdD1lLm1hdGNoZXM9MH1mdW5jdGlvbiBPKGUpezg8ZS5iaV92YWxpZD9iKGUsZS5iaV9idWYpOjA8ZS5iaV92YWxpZCYmKGUucGVuZGluZ19idWZbZS5wZW5kaW5nKytdPWUuYmlfYnVmKSxlLmJpX2J1Zj0wLGUuYmlfdmFsaWQ9MH1mdW5jdGlvbiBOKGUsdCxuLHIpe3ZhciBpPTIqdCxvPTIqbjtyZXR1cm4gZVtpXTxlW29dfHxlW2ldPT09ZVtvXSYmclt0XTw9cltuXX1mdW5jdGlvbiB3KGUsdCxuKXtmb3IodmFyIHI9ZS5oZWFwW25dLGk9bjw8MTtpPD1lLmhlYXBfbGVuJiYoaTxlLmhlYXBfbGVuJiZOKHQsZS5oZWFwW2krMV0sZS5oZWFwW2ldLGUuZGVwdGgpJiZpKyssIU4odCxyLGUuaGVhcFtpXSxlLmRlcHRoKSk7KWUuaGVhcFtuXT1lLmhlYXBbaV0sbj1pLGk8PD0xO2UuaGVhcFtuXT1yfWZ1bmN0aW9uIEQoZSx0LG4pe3ZhciByLGksbyxhLGw9MDtpZigwIT09ZS5sYXN0X2xpdClmb3IoO3I9ZS5wZW5kaW5nX2J1ZltlLmRfYnVmKzIqbF08PDh8ZS5wZW5kaW5nX2J1ZltlLmRfYnVmKzIqbCsxXSxpPWUucGVuZGluZ19idWZbZS5sX2J1ZitsXSxsKyssMD09PXI/QyhlLGksdCk6KEMoZSwobz1tW2ldKSsyNTYrMSx0KSwwIT09KGE9c1tvXSkmJlQoZSxpLT1oW29dLGEpLEMoZSxvPVMoLS1yKSxuKSwwIT09KGE9Y1tvXSkmJlQoZSxyLT1FW29dLGEpKSxsPGUubGFzdF9saXQ7KTtDKGUsMjU2LHQpfWZ1bmN0aW9uIFAoZSx0KXt2YXIgbixyLGksYT10LmR5bl90cmVlLHM9dC5zdGF0X2Rlc2Muc3RhdGljX3RyZWUsYz10LnN0YXRfZGVzYy5oYXNfc3RyZWUsbD10LnN0YXRfZGVzYy5lbGVtcyx1PS0xO2ZvcihlLmhlYXBfbGVuPTAsZS5oZWFwX21heD01NzMsbj0wO248bDtuKyspMCE9PWFbMipuXT8oZS5oZWFwWysrZS5oZWFwX2xlbl09dT1uLGUuZGVwdGhbbl09MCk6YVsyKm4rMV09MDtmb3IoO2UuaGVhcF9sZW48MjspYVsyKihpPWUuaGVhcFsrK2UuaGVhcF9sZW5dPXU8Mj8rK3U6MCldPTEsZS5kZXB0aFtpXT0wLGUub3B0X2xlbi0tLGMmJihlLnN0YXRpY19sZW4tPXNbMippKzFdKTtmb3IodC5tYXhfY29kZT11LG49ZS5oZWFwX2xlbj4+MTsxPD1uO24tLSl3KGUsYSxuKTtmb3IoaT1sO249ZS5oZWFwWzFdLGUuaGVhcFsxXT1lLmhlYXBbZS5oZWFwX2xlbi0tXSx3KGUsYSwxKSxyPWUuaGVhcFsxXSxlLmhlYXBbLS1lLmhlYXBfbWF4XT1uLGUuaGVhcFstLWUuaGVhcF9tYXhdPXIsYVsyKmldPWFbMipuXSthWzIqcl0sZS5kZXB0aFtpXT0oZS5kZXB0aFtuXT49ZS5kZXB0aFtyXT9lLmRlcHRoW25dOmUuZGVwdGhbcl0pKzEsYVsyKm4rMV09YVsyKnIrMV09aSxlLmhlYXBbMV09aSsrLHcoZSxhLDEpLDI8PWUuaGVhcF9sZW47KTtlLmhlYXBbLS1lLmhlYXBfbWF4XT1lLmhlYXBbMV0sZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksYSxzLGMsbD10LmR5bl90cmVlLHU9dC5tYXhfY29kZSxkPXQuc3RhdF9kZXNjLnN0YXRpY190cmVlLGY9dC5zdGF0X2Rlc2MuaGFzX3N0cmVlLHA9dC5zdGF0X2Rlc2MuZXh0cmFfYml0cyxtPXQuc3RhdF9kZXNjLmV4dHJhX2Jhc2UsaD10LnN0YXRfZGVzYy5tYXhfbGVuZ3RoLHY9MDtmb3IoYT0wO2E8PW87YSsrKWUuYmxfY291bnRbYV09MDtmb3IobFsyKmUuaGVhcFtlLmhlYXBfbWF4XSsxXT0wLG49ZS5oZWFwX21heCsxO248NTczO24rKyloPChhPWxbMipsWzIqKHI9ZS5oZWFwW25dKSsxXSsxXSsxKSYmKGE9aCx2KyspLGxbMipyKzFdPWEsdTxyfHwoZS5ibF9jb3VudFthXSsrLHM9MCxtPD1yJiYocz1wW3ItbV0pLGM9bFsyKnJdLGUub3B0X2xlbis9YyooYStzKSxmJiYoZS5zdGF0aWNfbGVuKz1jKihkWzIqcisxXStzKSkpO2lmKDAhPT12KXtkb3tmb3IoYT1oLTE7MD09PWUuYmxfY291bnRbYV07KWEtLTtlLmJsX2NvdW50W2FdLS0sZS5ibF9jb3VudFthKzFdKz0yLGUuYmxfY291bnRbaF0tLSx2LT0yfXdoaWxlKDA8dik7Zm9yKGE9aDswIT09YTthLS0pZm9yKHI9ZS5ibF9jb3VudFthXTswIT09cjspdTwoaT1lLmhlYXBbLS1uXSl8fChsWzIqaSsxXSE9PWEmJihlLm9wdF9sZW4rPShhLWxbMippKzFdKSpsWzIqaV0sbFsyKmkrMV09YSksci0tKX19KGUsdCksUihhLHUsZS5ibF9jb3VudCl9ZnVuY3Rpb24gTShlLHQsbil7dmFyIHIsaSxvPS0xLGE9dFsxXSxzPTAsYz03LGw9NDtmb3IoMD09PWEmJihjPTEzOCxsPTMpLHRbMioobisxKSsxXT02NTUzNSxyPTA7cjw9bjtyKyspaT1hLGE9dFsyKihyKzEpKzFdLCsrczxjJiZpPT09YXx8KHM8bD9lLmJsX3RyZWVbMippXSs9czowIT09aT8oaSE9PW8mJmUuYmxfdHJlZVsyKmldKyssZS5ibF90cmVlWzMyXSsrKTpzPD0xMD9lLmJsX3RyZWVbMzRdKys6ZS5ibF90cmVlWzM2XSsrLG89aSxsPShzPTApPT09YT8oYz0xMzgsMyk6aT09PWE/KGM9NiwzKTooYz03LDQpKX1mdW5jdGlvbiBMKGUsdCxuKXt2YXIgcixpLG89LTEsYT10WzFdLHM9MCxjPTcsbD00O2ZvcigwPT09YSYmKGM9MTM4LGw9Mykscj0wO3I8PW47cisrKWlmKGk9YSxhPXRbMioocisxKSsxXSwhKCsrczxjJiZpPT09YSkpe2lmKHM8bClmb3IoO0MoZSxpLGUuYmxfdHJlZSksMCE9LS1zOyk7ZWxzZSAwIT09aT8oaSE9PW8mJihDKGUsaSxlLmJsX3RyZWUpLHMtLSksQyhlLDE2LGUuYmxfdHJlZSksVChlLHMtMywyKSk6czw9MTA/KEMoZSwxNyxlLmJsX3RyZWUpLFQoZSxzLTMsMykpOihDKGUsMTgsZS5ibF90cmVlKSxUKGUscy0xMSw3KSk7bz1pLGw9KHM9MCk9PT1hPyhjPTEzOCwzKTppPT09YT8oYz02LDMpOihjPTcsNCl9fWkoRSk7dmFyIFU9ITE7ZnVuY3Rpb24geChlLHQsbixpKXtUKGUsMCsoaT8xOjApLDMpLGZ1bmN0aW9uKGUsdCxuLGkpe08oZSksYihlLG4pLGIoZSx+biksci5hcnJheVNldChlLnBlbmRpbmdfYnVmLGUud2luZG93LHQsbixlLnBlbmRpbmcpLGUucGVuZGluZys9bn0oZSx0LG4pfW4uX3RyX2luaXQ9ZnVuY3Rpb24oZSl7VXx8KGZ1bmN0aW9uKCl7dmFyIGUsdCxuLHIsaSxhPW5ldyBBcnJheShvKzEpO2ZvcihyPW49MDtyPDI4O3IrKylmb3IoaFtyXT1uLGU9MDtlPDE8PHNbcl07ZSsrKW1bbisrXT1yO2ZvcihtW24tMV09cixyPWk9MDtyPDE2O3IrKylmb3IoRVtyXT1pLGU9MDtlPDE8PGNbcl07ZSsrKXBbaSsrXT1yO2ZvcihpPj49NztyPDMwO3IrKylmb3IoRVtyXT1pPDw3LGU9MDtlPDE8PGNbcl0tNztlKyspcFsyNTYraSsrXT1yO2Zvcih0PTA7dDw9bzt0KyspYVt0XT0wO2ZvcihlPTA7ZTw9MTQzOylkWzIqZSsxXT04LGUrKyxhWzhdKys7Zm9yKDtlPD0yNTU7KWRbMiplKzFdPTksZSsrLGFbOV0rKztmb3IoO2U8PTI3OTspZFsyKmUrMV09NyxlKyssYVs3XSsrO2Zvcig7ZTw9Mjg3OylkWzIqZSsxXT04LGUrKyxhWzhdKys7Zm9yKFIoZCwyODcsYSksZT0wO2U8MzA7ZSsrKWZbMiplKzFdPTUsZlsyKmVdPUEoZSw1KTt2PW5ldyBfKGQscywyNTcsMjg2LG8pLGc9bmV3IF8oZixjLDAsMzAsbykseT1uZXcgXyhuZXcgQXJyYXkoMCksbCwwLDE5LDcpfSgpLFU9ITApLGUubF9kZXNjPW5ldyBJKGUuZHluX2x0cmVlLHYpLGUuZF9kZXNjPW5ldyBJKGUuZHluX2R0cmVlLGcpLGUuYmxfZGVzYz1uZXcgSShlLmJsX3RyZWUseSksZS5iaV9idWY9MCxlLmJpX3ZhbGlkPTAsayhlKX0sbi5fdHJfc3RvcmVkX2Jsb2NrPXgsbi5fdHJfZmx1c2hfYmxvY2s9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhPTA7MDxlLmxldmVsPygyPT09ZS5zdHJtLmRhdGFfdHlwZSYmKGUuc3RybS5kYXRhX3R5cGU9ZnVuY3Rpb24oZSl7dmFyIHQsbj00MDkzNjI0NDQ3O2Zvcih0PTA7dDw9MzE7dCsrLG4+Pj49MSlpZigxJm4mJjAhPT1lLmR5bl9sdHJlZVsyKnRdKXJldHVybiAwO2lmKDAhPT1lLmR5bl9sdHJlZVsxOF18fDAhPT1lLmR5bl9sdHJlZVsyMF18fDAhPT1lLmR5bl9sdHJlZVsyNl0pcmV0dXJuIDE7Zm9yKHQ9MzI7dDwyNTY7dCsrKWlmKDAhPT1lLmR5bl9sdHJlZVsyKnRdKXJldHVybiAxO3JldHVybiAwfShlKSksUChlLGUubF9kZXNjKSxQKGUsZS5kX2Rlc2MpLGE9ZnVuY3Rpb24oZSl7dmFyIHQ7Zm9yKE0oZSxlLmR5bl9sdHJlZSxlLmxfZGVzYy5tYXhfY29kZSksTShlLGUuZHluX2R0cmVlLGUuZF9kZXNjLm1heF9jb2RlKSxQKGUsZS5ibF9kZXNjKSx0PTE4OzM8PXQmJjA9PT1lLmJsX3RyZWVbMip1W3RdKzFdO3QtLSk7cmV0dXJuIGUub3B0X2xlbis9MyoodCsxKSs1KzUrNCx0fShlKSxpPWUub3B0X2xlbiszKzc+Pj4zLChvPWUuc3RhdGljX2xlbiszKzc+Pj4zKTw9aSYmKGk9bykpOmk9bz1uKzUsbis0PD1pJiYtMSE9PXQ/eChlLHQsbixyKTo0PT09ZS5zdHJhdGVneXx8bz09PWk/KFQoZSwyKyhyPzE6MCksMyksRChlLGQsZikpOihUKGUsNCsocj8xOjApLDMpLGZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpO2ZvcihUKGUsdC0yNTcsNSksVChlLG4tMSw1KSxUKGUsci00LDQpLGk9MDtpPHI7aSsrKVQoZSxlLmJsX3RyZWVbMip1W2ldKzFdLDMpO0woZSxlLmR5bl9sdHJlZSx0LTEpLEwoZSxlLmR5bl9kdHJlZSxuLTEpfShlLGUubF9kZXNjLm1heF9jb2RlKzEsZS5kX2Rlc2MubWF4X2NvZGUrMSxhKzEpLEQoZSxlLmR5bl9sdHJlZSxlLmR5bl9kdHJlZSkpLGsoZSksciYmTyhlKX0sbi5fdHJfdGFsbHk9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlLnBlbmRpbmdfYnVmW2UuZF9idWYrMiplLmxhc3RfbGl0XT10Pj4+OCYyNTUsZS5wZW5kaW5nX2J1ZltlLmRfYnVmKzIqZS5sYXN0X2xpdCsxXT0yNTUmdCxlLnBlbmRpbmdfYnVmW2UubF9idWYrZS5sYXN0X2xpdF09MjU1Jm4sZS5sYXN0X2xpdCsrLDA9PT10P2UuZHluX2x0cmVlWzIqbl0rKzooZS5tYXRjaGVzKyssdC0tLGUuZHluX2x0cmVlWzIqKG1bbl0rMjU2KzEpXSsrLGUuZHluX2R0cmVlWzIqUyh0KV0rKyksZS5sYXN0X2xpdD09PWUubGl0X2J1ZnNpemUtMX0sbi5fdHJfYWxpZ249ZnVuY3Rpb24oZSl7VChlLDIsMyksQyhlLDI1NixkKSxmdW5jdGlvbihlKXsxNj09PWUuYmlfdmFsaWQ/KGIoZSxlLmJpX2J1ZiksZS5iaV9idWY9MCxlLmJpX3ZhbGlkPTApOjg8PWUuYmlfdmFsaWQmJihlLnBlbmRpbmdfYnVmW2UucGVuZGluZysrXT0yNTUmZS5iaV9idWYsZS5iaV9idWY+Pj04LGUuYmlfdmFsaWQtPTgpfShlKX19LHtcIi4uL3V0aWxzL2NvbW1vblwiOjQxfV0sNTM6W2Z1bmN0aW9uKGUsdCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt0aGlzLmlucHV0PW51bGwsdGhpcy5uZXh0X2luPTAsdGhpcy5hdmFpbF9pbj0wLHRoaXMudG90YWxfaW49MCx0aGlzLm91dHB1dD1udWxsLHRoaXMubmV4dF9vdXQ9MCx0aGlzLmF2YWlsX291dD0wLHRoaXMudG90YWxfb3V0PTAsdGhpcy5tc2c9XCJcIix0aGlzLnN0YXRlPW51bGwsdGhpcy5kYXRhX3R5cGU9Mix0aGlzLmFkbGVyPTB9fSx7fV0sNTQ6W2Z1bmN0aW9uKGUsdCxyKXsoZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7aWYoIWUuc2V0SW1tZWRpYXRlKXt2YXIgbixyLGksbyxhPTEscz17fSxjPSExLGw9ZS5kb2N1bWVudCx1PU9iamVjdC5nZXRQcm90b3R5cGVPZiYmT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3U9dSYmdS5zZXRUaW1lb3V0P3U6ZSxuPVwiW29iamVjdCBwcm9jZXNzXVwiPT09e30udG9TdHJpbmcuY2FsbChlLnByb2Nlc3MpP2Z1bmN0aW9uKGUpe3Byb2Nlc3MubmV4dFRpY2soKGZ1bmN0aW9uKCl7ZihlKX0pKX06ZnVuY3Rpb24oKXtpZihlLnBvc3RNZXNzYWdlJiYhZS5pbXBvcnRTY3JpcHRzKXt2YXIgdD0hMCxuPWUub25tZXNzYWdlO3JldHVybiBlLm9ubWVzc2FnZT1mdW5jdGlvbigpe3Q9ITF9LGUucG9zdE1lc3NhZ2UoXCJcIixcIipcIiksZS5vbm1lc3NhZ2U9bix0fX0oKT8obz1cInNldEltbWVkaWF0ZSRcIitNYXRoLnJhbmRvbSgpK1wiJFwiLGUuYWRkRXZlbnRMaXN0ZW5lcj9lLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIscCwhMSk6ZS5hdHRhY2hFdmVudChcIm9ubWVzc2FnZVwiLHApLGZ1bmN0aW9uKHQpe2UucG9zdE1lc3NhZ2Uobyt0LFwiKlwiKX0pOmUuTWVzc2FnZUNoYW5uZWw/KChpPW5ldyBNZXNzYWdlQ2hhbm5lbCkucG9ydDEub25tZXNzYWdlPWZ1bmN0aW9uKGUpe2YoZS5kYXRhKX0sZnVuY3Rpb24oZSl7aS5wb3J0Mi5wb3N0TWVzc2FnZShlKX0pOmwmJlwib25yZWFkeXN0YXRlY2hhbmdlXCJpbiBsLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik/KHI9bC5kb2N1bWVudEVsZW1lbnQsZnVuY3Rpb24oZSl7dmFyIHQ9bC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO3Qub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7ZihlKSx0Lm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLHIucmVtb3ZlQ2hpbGQodCksd